@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
@@ -1415,6 +1415,18 @@ body {
1415
1415
  --text-heading-overline-lineHeight: 1rem;
1416
1416
  --text-heading-overline-letterSpacing: 0.025em;
1417
1417
  --text-heading-overline-textCase: uppercase;
1418
+ --text-label-xs-regular-fontFamily: Funnel Sans;
1419
+ --text-label-xs-regular-fontWeight: 400;
1420
+ --text-label-xs-regular-fontSize: 0.75rem;
1421
+ --text-label-xs-regular-lineHeight: 0.75rem;
1422
+ --text-label-xs-semibold-fontFamily: Funnel Sans;
1423
+ --text-label-xs-semibold-fontWeight: 600;
1424
+ --text-label-xs-semibold-fontSize: 0.75rem;
1425
+ --text-label-xs-semibold-lineHeight: 0.75rem;
1426
+ --text-label-xs-bold-fontFamily: Funnel Sans;
1427
+ --text-label-xs-bold-fontWeight: 700;
1428
+ --text-label-xs-bold-fontSize: 0.75rem;
1429
+ --text-label-xs-bold-lineHeight: 0.75rem;
1418
1430
  --text-label-sm-regular-fontFamily: Funnel Sans;
1419
1431
  --text-label-sm-regular-fontWeight: 400;
1420
1432
  --text-label-sm-regular-fontSize: 0.875rem;
@@ -1684,11 +1696,14 @@ body {
1684
1696
  --card-border-selected: 0.125rem solid #3e63dd;
1685
1697
  --chatbubble-max-width: 640px;
1686
1698
  --chatbubble-radius: 0.75rem;
1687
- --chatbubble-padding: 1rem;
1699
+ --chatbubble-padding-block: 0.75rem;
1700
+ --chatbubble-padding-inline: 1rem;
1688
1701
  --chatbubble-gap: 0.25rem;
1689
- --chatbubble-body-gap: 1.5rem;
1690
1702
  --chatbubble-row-gap: 0.75rem;
1703
+ --chatbubble-row-gap-compact: 0.5rem;
1704
+ --chatbubble-stack-gap: 0.75rem;
1691
1705
  --chatbubble-avatar-size: 3rem;
1706
+ --chatbubble-avatar-size-compact: 2rem;
1692
1707
  --chatbubble-color-own-background: #ddf9f2;
1693
1708
  --chatbubble-color-own-border: #b3ecde;
1694
1709
  --chatbubble-color-own-foreground: #211f26;
@@ -1699,7 +1714,9 @@ body {
1699
1714
  --chatbubble-color-agent-border: #fbe577;
1700
1715
  --chatbubble-color-agent-foreground: #211f26;
1701
1716
  --chatbubble-color-timestamp: #65636d;
1702
- --chatbubble-embed-padding: 0.75rem;
1717
+ --chatbubble-embed-padding-block: 0.75rem;
1718
+ --chatbubble-embed-padding-inline: 1rem;
1719
+ --chatbubble-embed-margin-block: 0.75rem;
1703
1720
  --chatbubble-embed-gap: 0.5rem;
1704
1721
  --chatbubble-embed-radius: 0.75rem;
1705
1722
  --chatbubble-embed-color-own-background: #f2fbf9;
@@ -1712,8 +1729,8 @@ body {
1712
1729
  --chatbubble-embed-color-agent-border: #fbe577;
1713
1730
  --chatbubble-embed-color-agent-foreground: #211f26;
1714
1731
  --chatbubble-action-stack-gap: 0.75rem;
1715
- --chatphotogrid-gap: 0.5rem;
1716
- --chatphotogrid-radius: 0.1875rem;
1732
+ --chatphotogrid-gap: 0.25rem;
1733
+ --chatphotogrid-radius: 0.375rem;
1717
1734
  --chatphotogrid-color-placeholder: #f2eff3;
1718
1735
  --chatphotogrid-color-overflow-background: rgba(0, 0, 0, 0.565);
1719
1736
  --chatphotogrid-color-overflow-foreground: #fdfcfd;
@@ -2127,6 +2144,16 @@ body {
2127
2144
  --badge-padding-leading-sm: 0.5rem;
2128
2145
  --badge-padding-leading-md: 0.75rem;
2129
2146
  --badge-padding-leading-lg: 0.75rem;
2147
+ --badge-number-size-2xs: 1rem;
2148
+ --badge-number-size-xs: 1.25rem;
2149
+ --badge-number-size-sm: 1.5rem;
2150
+ --badge-number-size-md: 2rem;
2151
+ --badge-number-size-lg: 2.5rem;
2152
+ --badge-number-padding-2xs: 0.25rem;
2153
+ --badge-number-padding-xs: 0.375rem;
2154
+ --badge-number-padding-sm: 0.5rem;
2155
+ --badge-number-padding-md: 0.5rem;
2156
+ --badge-number-padding-lg: 0.75rem;
2130
2157
  --table-cell-padding-x-sm: 0.5rem;
2131
2158
  --table-cell-padding-x-md: 0.75rem;
2132
2159
  --table-cell-padding-x-lg: 1rem;
@@ -2893,196 +2920,6 @@ body {
2893
2920
  }
2894
2921
 
2895
2922
 
2896
- /* Toast */
2897
- /* Toast Component Styles - Using Muka Design Tokens */
2898
-
2899
- .muka-toast {
2900
- display: flex;
2901
- align-items: flex-start;
2902
- gap: var(--toast-gap);
2903
- padding: var(--toast-padding-y) var(--toast-padding-x);
2904
- border-radius: var(--toast-radius);
2905
- box-shadow: var(--toast-shadow);
2906
- min-width: var(--toast-width-min);
2907
- max-width: var(--toast-width-max);
2908
- pointer-events: auto;
2909
- animation: muka-toast-slide-in 0.2s ease-out;
2910
- }
2911
-
2912
- /* Entry animation */
2913
- @keyframes muka-toast-slide-in {
2914
- from {
2915
- opacity: 0;
2916
- transform: translateY(8px);
2917
- }
2918
- to {
2919
- opacity: 1;
2920
- transform: translateY(0);
2921
- }
2922
- }
2923
-
2924
- /* Position variants (for standalone use - typically managed by ToastProvider) */
2925
- .muka-toast--top-right,
2926
- .muka-toast--top-left,
2927
- .muka-toast--top-center,
2928
- .muka-toast--bottom-right,
2929
- .muka-toast--bottom-left,
2930
- .muka-toast--bottom-center {
2931
- position: fixed;
2932
- z-index: 9999;
2933
- }
2934
-
2935
- .muka-toast--top-right {
2936
- top: var(--spacing-4);
2937
- right: var(--spacing-4);
2938
- }
2939
-
2940
- .muka-toast--top-left {
2941
- top: var(--spacing-4);
2942
- left: var(--spacing-4);
2943
- }
2944
-
2945
- .muka-toast--top-center {
2946
- top: var(--spacing-4);
2947
- left: 50%;
2948
- transform: translateX(-50%);
2949
- }
2950
-
2951
- .muka-toast--bottom-right {
2952
- bottom: var(--spacing-4);
2953
- right: var(--spacing-4);
2954
- }
2955
-
2956
- .muka-toast--bottom-left {
2957
- bottom: var(--spacing-4);
2958
- left: var(--spacing-4);
2959
- }
2960
-
2961
- .muka-toast--bottom-center {
2962
- bottom: var(--spacing-4);
2963
- left: 50%;
2964
- transform: translateX(-50%);
2965
- }
2966
-
2967
- /* Variant: Info */
2968
- .muka-toast--info {
2969
- background-color: var(--toast-color-info-background);
2970
- color: var(--toast-color-info-foreground);
2971
- }
2972
-
2973
- .muka-toast--info .muka-toast__icon {
2974
- color: var(--toast-color-info-accent);
2975
- }
2976
-
2977
- /* Variant: Success */
2978
- .muka-toast--success {
2979
- background-color: var(--toast-color-success-background);
2980
- color: var(--toast-color-success-foreground);
2981
- }
2982
-
2983
- .muka-toast--success .muka-toast__icon {
2984
- color: var(--toast-color-success-accent);
2985
- }
2986
-
2987
- /* Variant: Warning */
2988
- .muka-toast--warning {
2989
- background-color: var(--toast-color-warning-background);
2990
- color: var(--toast-color-warning-foreground);
2991
- }
2992
-
2993
- .muka-toast--warning .muka-toast__icon {
2994
- color: var(--toast-color-warning-accent);
2995
- }
2996
-
2997
- /* Variant: Error */
2998
- .muka-toast--error {
2999
- background-color: var(--toast-color-error-background);
3000
- color: var(--toast-color-error-foreground);
3001
- }
3002
-
3003
- .muka-toast--error .muka-toast__icon {
3004
- color: var(--toast-color-error-accent);
3005
- }
3006
-
3007
- /* Icon */
3008
- .muka-toast__icon {
3009
- display: flex;
3010
- align-items: center;
3011
- justify-content: center;
3012
- flex-shrink: 0;
3013
- width: var(--toast-icon-size);
3014
- height: var(--toast-icon-size);
3015
- }
3016
-
3017
- .muka-toast__icon svg {
3018
- width: 100%;
3019
- height: 100%;
3020
- }
3021
-
3022
- /* Content */
3023
- .muka-toast__content {
3024
- flex: 1;
3025
- min-width: 0;
3026
- }
3027
-
3028
- .muka-toast__title {
3029
- font-family: var(--text-label-md-semibold-fontFamily);
3030
- font-weight: var(--text-label-md-semibold-fontWeight);
3031
- font-size: var(--text-label-md-semibold-fontSize);
3032
- line-height: var(--text-label-md-semibold-lineHeight);
3033
- margin-bottom: var(--spacing-1);
3034
- }
3035
-
3036
- .muka-toast__message {
3037
- font-family: var(--text-body-sm-regular-fontFamily);
3038
- font-weight: var(--text-body-sm-regular-fontWeight);
3039
- font-size: var(--text-body-sm-regular-fontSize);
3040
- line-height: var(--text-body-sm-regular-lineHeight);
3041
- }
3042
-
3043
- /* Action slot */
3044
- .muka-toast__action {
3045
- display: flex;
3046
- align-items: center;
3047
- flex-shrink: 0;
3048
- }
3049
-
3050
- /* Dismiss button */
3051
- .muka-toast__dismiss {
3052
- display: flex;
3053
- align-items: center;
3054
- justify-content: center;
3055
- flex-shrink: 0;
3056
- width: 24px;
3057
- height: 24px;
3058
- padding: 0;
3059
- margin: -2px -4px -2px 0;
3060
- border: none;
3061
- background: transparent;
3062
- color: inherit;
3063
- opacity: 0.7;
3064
- cursor: pointer;
3065
- border-radius: var(--border-radius-sm);
3066
- transition: opacity 0.15s ease, background-color 0.15s ease;
3067
- }
3068
-
3069
- .muka-toast__dismiss:hover {
3070
- opacity: 1;
3071
- background-color: rgba(0, 0, 0, 0.05);
3072
- }
3073
-
3074
- .muka-toast__dismiss:focus-visible {
3075
- outline: 2px solid var(--color-border-focus);
3076
- outline-offset: 2px;
3077
- opacity: 1;
3078
- }
3079
-
3080
- .muka-toast__dismiss svg {
3081
- width: 16px;
3082
- height: 16px;
3083
- }
3084
-
3085
-
3086
2923
  /* Tile */
3087
2924
  /* Tile Component Styles - Using Muka Design Tokens */
3088
2925
 
@@ -3444,45 +3281,235 @@ body {
3444
3281
  }
3445
3282
 
3446
3283
 
3447
- /* Thumbnail */
3448
- /* Thumbnail Component Styles - Using Muka Design Tokens */
3284
+ /* Toast */
3285
+ /* Toast Component Styles - Using Muka Design Tokens */
3449
3286
 
3450
- .muka-thumbnail {
3451
- position: relative;
3452
- flex-shrink: 0;
3287
+ .muka-toast {
3288
+ display: flex;
3289
+ align-items: flex-start;
3290
+ gap: var(--toast-gap);
3291
+ padding: var(--toast-padding-y) var(--toast-padding-x);
3292
+ border-radius: var(--toast-radius);
3293
+ box-shadow: var(--toast-shadow);
3294
+ min-width: var(--toast-width-min);
3295
+ max-width: var(--toast-width-max);
3296
+ pointer-events: auto;
3297
+ animation: muka-toast-slide-in 0.2s ease-out;
3453
3298
  }
3454
3299
 
3455
- /* The frame carries the border, background and shape clip. Keeping it separate
3456
- from the root lets the remove (×) button sit outside the clip (needed for the
3457
- circular/ellipse shape, whose corners would otherwise clip the button). */
3458
- .muka-thumbnail__frame {
3459
- position: absolute;
3460
- inset: 0;
3461
- overflow: hidden;
3462
- border: var(--border-width-regular, 1px) solid var(--color-black-alpha-3);
3463
- border-radius: var(--border-radius-lg);
3464
- background-color: var(--color-surface-level1);
3300
+ /* Entry animation */
3301
+ @keyframes muka-toast-slide-in {
3302
+ from {
3303
+ opacity: 0;
3304
+ transform: translateY(8px);
3305
+ }
3306
+ to {
3307
+ opacity: 1;
3308
+ transform: translateY(0);
3309
+ }
3465
3310
  }
3466
3311
 
3467
- /* ─── Shapes ──────────────────────────────────────────── */
3468
- .muka-thumbnail--4-3 {
3469
- width: 160px;
3470
- height: 120px;
3312
+ /* Position variants (for standalone use - typically managed by ToastProvider) */
3313
+ .muka-toast--top-right,
3314
+ .muka-toast--top-left,
3315
+ .muka-toast--top-center,
3316
+ .muka-toast--bottom-right,
3317
+ .muka-toast--bottom-left,
3318
+ .muka-toast--bottom-center {
3319
+ position: fixed;
3320
+ z-index: 9999;
3471
3321
  }
3472
3322
 
3473
- .muka-thumbnail--1-1 {
3474
- width: 120px;
3475
- height: 120px;
3323
+ .muka-toast--top-right {
3324
+ top: var(--spacing-4);
3325
+ right: var(--spacing-4);
3476
3326
  }
3477
3327
 
3478
- .muka-thumbnail--ellipse {
3479
- width: 120px;
3480
- height: 120px;
3328
+ .muka-toast--top-left {
3329
+ top: var(--spacing-4);
3330
+ left: var(--spacing-4);
3481
3331
  }
3482
3332
 
3483
- .muka-thumbnail--ellipse .muka-thumbnail__frame {
3484
- border-radius: var(--border-radius-full);
3485
- }
3333
+ .muka-toast--top-center {
3334
+ top: var(--spacing-4);
3335
+ left: 50%;
3336
+ transform: translateX(-50%);
3337
+ }
3338
+
3339
+ .muka-toast--bottom-right {
3340
+ bottom: var(--spacing-4);
3341
+ right: var(--spacing-4);
3342
+ }
3343
+
3344
+ .muka-toast--bottom-left {
3345
+ bottom: var(--spacing-4);
3346
+ left: var(--spacing-4);
3347
+ }
3348
+
3349
+ .muka-toast--bottom-center {
3350
+ bottom: var(--spacing-4);
3351
+ left: 50%;
3352
+ transform: translateX(-50%);
3353
+ }
3354
+
3355
+ /* Variant: Info */
3356
+ .muka-toast--info {
3357
+ background-color: var(--toast-color-info-background);
3358
+ color: var(--toast-color-info-foreground);
3359
+ }
3360
+
3361
+ .muka-toast--info .muka-toast__icon {
3362
+ color: var(--toast-color-info-accent);
3363
+ }
3364
+
3365
+ /* Variant: Success */
3366
+ .muka-toast--success {
3367
+ background-color: var(--toast-color-success-background);
3368
+ color: var(--toast-color-success-foreground);
3369
+ }
3370
+
3371
+ .muka-toast--success .muka-toast__icon {
3372
+ color: var(--toast-color-success-accent);
3373
+ }
3374
+
3375
+ /* Variant: Warning */
3376
+ .muka-toast--warning {
3377
+ background-color: var(--toast-color-warning-background);
3378
+ color: var(--toast-color-warning-foreground);
3379
+ }
3380
+
3381
+ .muka-toast--warning .muka-toast__icon {
3382
+ color: var(--toast-color-warning-accent);
3383
+ }
3384
+
3385
+ /* Variant: Error */
3386
+ .muka-toast--error {
3387
+ background-color: var(--toast-color-error-background);
3388
+ color: var(--toast-color-error-foreground);
3389
+ }
3390
+
3391
+ .muka-toast--error .muka-toast__icon {
3392
+ color: var(--toast-color-error-accent);
3393
+ }
3394
+
3395
+ /* Icon */
3396
+ .muka-toast__icon {
3397
+ display: flex;
3398
+ align-items: center;
3399
+ justify-content: center;
3400
+ flex-shrink: 0;
3401
+ width: var(--toast-icon-size);
3402
+ height: var(--toast-icon-size);
3403
+ }
3404
+
3405
+ .muka-toast__icon svg {
3406
+ width: 100%;
3407
+ height: 100%;
3408
+ }
3409
+
3410
+ /* Content */
3411
+ .muka-toast__content {
3412
+ flex: 1;
3413
+ min-width: 0;
3414
+ }
3415
+
3416
+ .muka-toast__title {
3417
+ font-family: var(--text-label-md-semibold-fontFamily);
3418
+ font-weight: var(--text-label-md-semibold-fontWeight);
3419
+ font-size: var(--text-label-md-semibold-fontSize);
3420
+ line-height: var(--text-label-md-semibold-lineHeight);
3421
+ margin-bottom: var(--spacing-1);
3422
+ }
3423
+
3424
+ .muka-toast__message {
3425
+ font-family: var(--text-body-sm-regular-fontFamily);
3426
+ font-weight: var(--text-body-sm-regular-fontWeight);
3427
+ font-size: var(--text-body-sm-regular-fontSize);
3428
+ line-height: var(--text-body-sm-regular-lineHeight);
3429
+ }
3430
+
3431
+ /* Action slot */
3432
+ .muka-toast__action {
3433
+ display: flex;
3434
+ align-items: center;
3435
+ flex-shrink: 0;
3436
+ }
3437
+
3438
+ /* Dismiss button */
3439
+ .muka-toast__dismiss {
3440
+ display: flex;
3441
+ align-items: center;
3442
+ justify-content: center;
3443
+ flex-shrink: 0;
3444
+ width: 24px;
3445
+ height: 24px;
3446
+ padding: 0;
3447
+ margin: -2px -4px -2px 0;
3448
+ border: none;
3449
+ background: transparent;
3450
+ color: inherit;
3451
+ opacity: 0.7;
3452
+ cursor: pointer;
3453
+ border-radius: var(--border-radius-sm);
3454
+ transition: opacity 0.15s ease, background-color 0.15s ease;
3455
+ }
3456
+
3457
+ .muka-toast__dismiss:hover {
3458
+ opacity: 1;
3459
+ background-color: rgba(0, 0, 0, 0.05);
3460
+ }
3461
+
3462
+ .muka-toast__dismiss:focus-visible {
3463
+ outline: 2px solid var(--color-border-focus);
3464
+ outline-offset: 2px;
3465
+ opacity: 1;
3466
+ }
3467
+
3468
+ .muka-toast__dismiss svg {
3469
+ width: 16px;
3470
+ height: 16px;
3471
+ }
3472
+
3473
+
3474
+ /* Thumbnail */
3475
+ /* Thumbnail Component Styles - Using Muka Design Tokens */
3476
+
3477
+ .muka-thumbnail {
3478
+ position: relative;
3479
+ flex-shrink: 0;
3480
+ }
3481
+
3482
+ /* The frame carries the border, background and shape clip. Keeping it separate
3483
+ from the root lets the remove (×) button sit outside the clip (needed for the
3484
+ circular/ellipse shape, whose corners would otherwise clip the button). */
3485
+ .muka-thumbnail__frame {
3486
+ position: absolute;
3487
+ inset: 0;
3488
+ overflow: hidden;
3489
+ border: var(--border-width-regular, 1px) solid var(--color-black-alpha-3);
3490
+ border-radius: var(--border-radius-lg);
3491
+ background-color: var(--color-surface-level1);
3492
+ }
3493
+
3494
+ /* ─── Shapes ──────────────────────────────────────────── */
3495
+ .muka-thumbnail--4-3 {
3496
+ width: 160px;
3497
+ height: 120px;
3498
+ }
3499
+
3500
+ .muka-thumbnail--1-1 {
3501
+ width: 120px;
3502
+ height: 120px;
3503
+ }
3504
+
3505
+ .muka-thumbnail--ellipse {
3506
+ width: 120px;
3507
+ height: 120px;
3508
+ }
3509
+
3510
+ .muka-thumbnail--ellipse .muka-thumbnail__frame {
3511
+ border-radius: var(--border-radius-full);
3512
+ }
3486
3513
 
3487
3514
  /* Image fills the frame, cropped to cover. Sits at scale(1) by default so the
3488
3515
  interactive hover zoom has a clean origin. */
@@ -7147,34 +7174,6 @@ body {
7147
7174
  }
7148
7175
 
7149
7176
 
7150
- /* NavigationTransition */
7151
- /* NavigationTransition Component Styles */
7152
-
7153
- /* ─── Wrapper ────────────────────────────────────────── */
7154
-
7155
- .muka-nav-transition {
7156
- position: relative;
7157
- height: 100vh;
7158
- overflow: hidden;
7159
- }
7160
-
7161
- /* Disable interaction during animation */
7162
- .muka-nav-transition--active {
7163
- pointer-events: none;
7164
- }
7165
-
7166
- /* ─── View slots ─────────────────────────────────────── */
7167
-
7168
- .muka-nav-transition--active .muka-nav-transition__view {
7169
- position: absolute;
7170
- inset: 0;
7171
- }
7172
-
7173
- /* Z-index layering */
7174
- .muka-nav-transition__view--bottom { z-index: 1; }
7175
- .muka-nav-transition__view--top { z-index: 2; }
7176
-
7177
-
7178
7177
  /* NumberInput */
7179
7178
  /* NumberInput — reuses Input field styles (../Input/Input.css). */
7180
7179
  /* Only the prefix/suffix affixes are NumberInput-specific. */
@@ -7205,6 +7204,34 @@ body {
7205
7204
  }
7206
7205
 
7207
7206
 
7207
+ /* NavigationTransition */
7208
+ /* NavigationTransition Component Styles */
7209
+
7210
+ /* ─── Wrapper ────────────────────────────────────────── */
7211
+
7212
+ .muka-nav-transition {
7213
+ position: relative;
7214
+ height: 100vh;
7215
+ overflow: hidden;
7216
+ }
7217
+
7218
+ /* Disable interaction during animation */
7219
+ .muka-nav-transition--active {
7220
+ pointer-events: none;
7221
+ }
7222
+
7223
+ /* ─── View slots ─────────────────────────────────────── */
7224
+
7225
+ .muka-nav-transition--active .muka-nav-transition__view {
7226
+ position: absolute;
7227
+ inset: 0;
7228
+ }
7229
+
7230
+ /* Z-index layering */
7231
+ .muka-nav-transition__view--bottom { z-index: 1; }
7232
+ .muka-nav-transition__view--top { z-index: 2; }
7233
+
7234
+
7208
7235
  /* Menu */
7209
7236
  /* Menu Component Styles */
7210
7237
 
@@ -8750,22 +8777,178 @@ li.muka-listitem {
8750
8777
  }
8751
8778
 
8752
8779
 
8753
- /* DocumentViewer */
8754
- /* DocumentViewer Component Styles - Using Muka Design Tokens */
8780
+ /* Drawer */
8781
+ /* Drawer Component Styles */
8755
8782
 
8756
- .muka-documentviewer {
8757
- display: flex;
8758
- flex-direction: column;
8759
- background-color: var(--documentviewer-container-background);
8760
- border-radius: var(--documentviewer-container-borderRadius);
8761
- overflow: hidden;
8762
- position: relative;
8783
+ /* Size tokens (local to Drawer) */
8784
+ .muka-drawer {
8785
+ --drawer-width-sm: 18rem;
8786
+ --drawer-width-md: 26rem;
8787
+ --drawer-width-lg: 36rem;
8763
8788
  }
8764
8789
 
8765
- .muka-documentviewer--fullscreen {
8766
- position: fixed;
8767
- top: 0;
8768
- left: 0;
8790
+ /* Reset native dialog */
8791
+ .muka-drawer {
8792
+ border: none;
8793
+ padding: 0;
8794
+ max-width: none;
8795
+ max-height: none;
8796
+ background: transparent;
8797
+ overflow: visible;
8798
+ }
8799
+
8800
+ /* Backdrop */
8801
+ .muka-drawer::backdrop {
8802
+ background-color: var(--color-surface-backdrop);
8803
+ opacity: 0;
8804
+ transition: opacity 200ms ease;
8805
+ }
8806
+
8807
+ .muka-drawer--slide-in::backdrop {
8808
+ opacity: 1;
8809
+ }
8810
+
8811
+ /* Surface */
8812
+ .muka-drawer__surface {
8813
+ display: flex;
8814
+ flex-direction: column;
8815
+ background-color: var(--color-surface-level3);
8816
+ box-shadow: var(--shadow-level5);
8817
+ height: 100%;
8818
+ overflow: hidden;
8819
+ position: fixed;
8820
+ transition: transform 200ms cubic-bezier(0.16, 1, 0.3, 1);
8821
+ }
8822
+
8823
+ /* Side positioning + initial transforms */
8824
+ .muka-drawer--right .muka-drawer__surface {
8825
+ top: 0;
8826
+ right: 0;
8827
+ bottom: 0;
8828
+ border-radius: var(--radius-lg) 0 0 var(--radius-lg);
8829
+ transform: translateX(100%);
8830
+ }
8831
+
8832
+ .muka-drawer--left .muka-drawer__surface {
8833
+ top: 0;
8834
+ left: 0;
8835
+ bottom: 0;
8836
+ border-radius: 0 var(--radius-lg) var(--radius-lg) 0;
8837
+ transform: translateX(-100%);
8838
+ }
8839
+
8840
+ .muka-drawer--bottom .muka-drawer__surface {
8841
+ left: 0;
8842
+ right: 0;
8843
+ bottom: 0;
8844
+ border-radius: var(--radius-lg) var(--radius-lg) 0 0;
8845
+ transform: translateY(100%);
8846
+ }
8847
+
8848
+ .muka-drawer--top .muka-drawer__surface {
8849
+ left: 0;
8850
+ right: 0;
8851
+ top: 0;
8852
+ border-radius: 0 0 var(--radius-lg) var(--radius-lg);
8853
+ transform: translateY(-100%);
8854
+ }
8855
+
8856
+ /* Slide-in state */
8857
+ .muka-drawer--slide-in .muka-drawer__surface {
8858
+ transform: translate(0, 0);
8859
+ }
8860
+
8861
+ /* Width sizes (left/right) */
8862
+ .muka-drawer--right .muka-drawer__surface,
8863
+ .muka-drawer--left .muka-drawer__surface {
8864
+ width: var(--drawer-width-md);
8865
+ }
8866
+
8867
+ .muka-drawer--sm.muka-drawer--right .muka-drawer__surface,
8868
+ .muka-drawer--sm.muka-drawer--left .muka-drawer__surface {
8869
+ width: var(--drawer-width-sm);
8870
+ }
8871
+
8872
+ .muka-drawer--lg.muka-drawer--right .muka-drawer__surface,
8873
+ .muka-drawer--lg.muka-drawer--left .muka-drawer__surface {
8874
+ width: var(--drawer-width-lg);
8875
+ }
8876
+
8877
+ .muka-drawer--full.muka-drawer--right .muka-drawer__surface,
8878
+ .muka-drawer--full.muka-drawer--left .muka-drawer__surface {
8879
+ width: 100%;
8880
+ }
8881
+
8882
+ /* Height sizes (top/bottom) */
8883
+ .muka-drawer--top .muka-drawer__surface,
8884
+ .muka-drawer--bottom .muka-drawer__surface {
8885
+ height: auto;
8886
+ max-height: 80vh;
8887
+ }
8888
+
8889
+ .muka-drawer--full.muka-drawer--top .muka-drawer__surface,
8890
+ .muka-drawer--full.muka-drawer--bottom .muka-drawer__surface {
8891
+ max-height: 100vh;
8892
+ }
8893
+
8894
+ /* Header */
8895
+ .muka-drawer__header {
8896
+ display: flex;
8897
+ align-items: center;
8898
+ gap: var(--spacing-3);
8899
+ padding: var(--spacing-4);
8900
+ border-bottom: var(--border-width-regular) solid var(--color-border-default);
8901
+ flex-shrink: 0;
8902
+ }
8903
+
8904
+ .muka-drawer__title {
8905
+ flex: 1;
8906
+ margin: 0;
8907
+ font-family: var(--text-label-lg-semibold-fontFamily);
8908
+ font-weight: var(--text-label-lg-semibold-fontWeight);
8909
+ font-size: var(--text-label-lg-semibold-fontSize);
8910
+ line-height: var(--text-label-lg-semibold-lineHeight);
8911
+ color: var(--color-text-default-default);
8912
+ }
8913
+
8914
+ .muka-drawer__leading,
8915
+ .muka-drawer__trailing {
8916
+ display: flex;
8917
+ align-items: center;
8918
+ flex-shrink: 0;
8919
+ }
8920
+
8921
+ /* Body */
8922
+ .muka-drawer__body {
8923
+ flex: 1;
8924
+ overflow-y: auto;
8925
+ padding: var(--spacing-4);
8926
+ }
8927
+
8928
+ /* Footer */
8929
+ .muka-drawer__footer {
8930
+ padding: var(--spacing-4);
8931
+ border-top: var(--border-width-regular) solid var(--color-border-default);
8932
+ flex-shrink: 0;
8933
+ }
8934
+
8935
+
8936
+ /* DocumentViewer */
8937
+ /* DocumentViewer Component Styles - Using Muka Design Tokens */
8938
+
8939
+ .muka-documentviewer {
8940
+ display: flex;
8941
+ flex-direction: column;
8942
+ background-color: var(--documentviewer-container-background);
8943
+ border-radius: var(--documentviewer-container-borderRadius);
8944
+ overflow: hidden;
8945
+ position: relative;
8946
+ }
8947
+
8948
+ .muka-documentviewer--fullscreen {
8949
+ position: fixed;
8950
+ top: 0;
8951
+ left: 0;
8769
8952
  right: 0;
8770
8953
  bottom: 0;
8771
8954
  width: 100vw;
@@ -9029,212 +9212,83 @@ li.muka-listitem {
9029
9212
  }
9030
9213
 
9031
9214
 
9032
- /* Drawer */
9033
- /* Drawer Component Styles */
9215
+ /* Divider */
9216
+ /* Divider Component Styles - Using Muka Design Tokens */
9034
9217
 
9035
- /* Size tokens (local to Drawer) */
9036
- .muka-drawer {
9037
- --drawer-width-sm: 18rem;
9038
- --drawer-width-md: 26rem;
9039
- --drawer-width-lg: 36rem;
9218
+ .muka-divider {
9219
+ flex-shrink: 0;
9040
9220
  }
9041
9221
 
9042
- /* Reset native dialog */
9043
- .muka-drawer {
9222
+ .muka-divider--horizontal {
9223
+ width: 100%;
9224
+ height: var(--separator-width);
9225
+ }
9226
+
9227
+ .muka-divider--vertical {
9228
+ height: 100%;
9229
+ width: var(--separator-width);
9230
+ align-self: stretch;
9231
+ }
9232
+
9233
+ .muka-divider--default {
9234
+ background-color: var(--separator-color-default);
9235
+ }
9236
+
9237
+ .muka-divider--contrast {
9238
+ background-color: var(--separator-color-contrast);
9239
+ }
9240
+
9241
+
9242
+ /* Dialog */
9243
+ /* Dialog Component Styles */
9244
+
9245
+ /* ─── Native dialog reset ─────────────────────────────── */
9246
+
9247
+ .muka-dialog {
9044
9248
  border: none;
9045
9249
  padding: 0;
9046
9250
  max-width: none;
9047
9251
  max-height: none;
9048
- background: transparent;
9049
9252
  overflow: visible;
9253
+ background: transparent;
9254
+ color: inherit;
9255
+ box-shadow: none;
9050
9256
  }
9051
9257
 
9052
- /* Backdrop */
9053
- .muka-drawer::backdrop {
9054
- background-color: var(--color-surface-backdrop);
9055
- opacity: 0;
9056
- transition: opacity 200ms ease;
9258
+ .muka-dialog:not([open]) {
9259
+ display: none;
9057
9260
  }
9058
9261
 
9059
- .muka-drawer--slide-in::backdrop {
9060
- opacity: 1;
9262
+ /* ─── Backdrop ────────────────────────────────────────── */
9263
+
9264
+ .muka-dialog::backdrop {
9265
+ background-color: var(--dialog-color-backdrop);
9061
9266
  }
9062
9267
 
9063
- /* Surface */
9064
- .muka-drawer__surface {
9268
+ /* ─── Non-modal modifier ──────────────────────────────── */
9269
+
9270
+ .muka-dialog--non-modal::backdrop {
9271
+ pointer-events: auto;
9272
+ }
9273
+
9274
+ /* ─── Mobile: all sizes bottom-attached (< 1024px) ───── */
9275
+
9276
+ .muka-dialog--sm,
9277
+ .muka-dialog--md,
9278
+ .muka-dialog--lg {
9279
+ width: 100%;
9280
+ height: 100%;
9281
+ max-width: 100vw;
9282
+ max-height: 100vh;
9283
+ margin: 0;
9065
9284
  display: flex;
9066
9285
  flex-direction: column;
9067
- background-color: var(--color-surface-level3);
9068
- box-shadow: var(--shadow-level5);
9069
- height: 100%;
9070
- overflow: hidden;
9071
- position: fixed;
9072
- transition: transform 200ms cubic-bezier(0.16, 1, 0.3, 1);
9286
+ justify-content: flex-end;
9287
+ align-items: stretch;
9073
9288
  }
9074
9289
 
9075
- /* Side positioning + initial transforms */
9076
- .muka-drawer--right .muka-drawer__surface {
9077
- top: 0;
9078
- right: 0;
9079
- bottom: 0;
9080
- border-radius: var(--radius-lg) 0 0 var(--radius-lg);
9081
- transform: translateX(100%);
9082
- }
9083
-
9084
- .muka-drawer--left .muka-drawer__surface {
9085
- top: 0;
9086
- left: 0;
9087
- bottom: 0;
9088
- border-radius: 0 var(--radius-lg) var(--radius-lg) 0;
9089
- transform: translateX(-100%);
9090
- }
9091
-
9092
- .muka-drawer--bottom .muka-drawer__surface {
9093
- left: 0;
9094
- right: 0;
9095
- bottom: 0;
9096
- border-radius: var(--radius-lg) var(--radius-lg) 0 0;
9097
- transform: translateY(100%);
9098
- }
9099
-
9100
- .muka-drawer--top .muka-drawer__surface {
9101
- left: 0;
9102
- right: 0;
9103
- top: 0;
9104
- border-radius: 0 0 var(--radius-lg) var(--radius-lg);
9105
- transform: translateY(-100%);
9106
- }
9107
-
9108
- /* Slide-in state */
9109
- .muka-drawer--slide-in .muka-drawer__surface {
9110
- transform: translate(0, 0);
9111
- }
9112
-
9113
- /* Width sizes (left/right) */
9114
- .muka-drawer--right .muka-drawer__surface,
9115
- .muka-drawer--left .muka-drawer__surface {
9116
- width: var(--drawer-width-md);
9117
- }
9118
-
9119
- .muka-drawer--sm.muka-drawer--right .muka-drawer__surface,
9120
- .muka-drawer--sm.muka-drawer--left .muka-drawer__surface {
9121
- width: var(--drawer-width-sm);
9122
- }
9123
-
9124
- .muka-drawer--lg.muka-drawer--right .muka-drawer__surface,
9125
- .muka-drawer--lg.muka-drawer--left .muka-drawer__surface {
9126
- width: var(--drawer-width-lg);
9127
- }
9128
-
9129
- .muka-drawer--full.muka-drawer--right .muka-drawer__surface,
9130
- .muka-drawer--full.muka-drawer--left .muka-drawer__surface {
9131
- width: 100%;
9132
- }
9133
-
9134
- /* Height sizes (top/bottom) */
9135
- .muka-drawer--top .muka-drawer__surface,
9136
- .muka-drawer--bottom .muka-drawer__surface {
9137
- height: auto;
9138
- max-height: 80vh;
9139
- }
9140
-
9141
- .muka-drawer--full.muka-drawer--top .muka-drawer__surface,
9142
- .muka-drawer--full.muka-drawer--bottom .muka-drawer__surface {
9143
- max-height: 100vh;
9144
- }
9145
-
9146
- /* Header */
9147
- .muka-drawer__header {
9148
- display: flex;
9149
- align-items: center;
9150
- gap: var(--spacing-3);
9151
- padding: var(--spacing-4);
9152
- border-bottom: var(--border-width-regular) solid var(--color-border-default);
9153
- flex-shrink: 0;
9154
- }
9155
-
9156
- .muka-drawer__title {
9157
- flex: 1;
9158
- margin: 0;
9159
- font-family: var(--text-label-lg-semibold-fontFamily);
9160
- font-weight: var(--text-label-lg-semibold-fontWeight);
9161
- font-size: var(--text-label-lg-semibold-fontSize);
9162
- line-height: var(--text-label-lg-semibold-lineHeight);
9163
- color: var(--color-text-default-default);
9164
- }
9165
-
9166
- .muka-drawer__leading,
9167
- .muka-drawer__trailing {
9168
- display: flex;
9169
- align-items: center;
9170
- flex-shrink: 0;
9171
- }
9172
-
9173
- /* Body */
9174
- .muka-drawer__body {
9175
- flex: 1;
9176
- overflow-y: auto;
9177
- padding: var(--spacing-4);
9178
- }
9179
-
9180
- /* Footer */
9181
- .muka-drawer__footer {
9182
- padding: var(--spacing-4);
9183
- border-top: var(--border-width-regular) solid var(--color-border-default);
9184
- flex-shrink: 0;
9185
- }
9186
-
9187
-
9188
- /* Dialog */
9189
- /* Dialog Component Styles */
9190
-
9191
- /* ─── Native dialog reset ─────────────────────────────── */
9192
-
9193
- .muka-dialog {
9194
- border: none;
9195
- padding: 0;
9196
- max-width: none;
9197
- max-height: none;
9198
- overflow: visible;
9199
- background: transparent;
9200
- color: inherit;
9201
- box-shadow: none;
9202
- }
9203
-
9204
- .muka-dialog:not([open]) {
9205
- display: none;
9206
- }
9207
-
9208
- /* ─── Backdrop ────────────────────────────────────────── */
9209
-
9210
- .muka-dialog::backdrop {
9211
- background-color: var(--dialog-color-backdrop);
9212
- }
9213
-
9214
- /* ─── Non-modal modifier ──────────────────────────────── */
9215
-
9216
- .muka-dialog--non-modal::backdrop {
9217
- pointer-events: auto;
9218
- }
9219
-
9220
- /* ─── Mobile: all sizes bottom-attached (< 1024px) ───── */
9221
-
9222
- .muka-dialog--sm,
9223
- .muka-dialog--md,
9224
- .muka-dialog--lg {
9225
- width: 100%;
9226
- height: 100%;
9227
- max-width: 100vw;
9228
- max-height: 100vh;
9229
- margin: 0;
9230
- display: flex;
9231
- flex-direction: column;
9232
- justify-content: flex-end;
9233
- align-items: stretch;
9234
- }
9235
-
9236
- .muka-dialog__surface:focus {
9237
- outline: none;
9290
+ .muka-dialog__surface:focus {
9291
+ outline: none;
9238
9292
  }
9239
9293
 
9240
9294
  .muka-dialog--sm .muka-dialog__surface,
@@ -10476,33 +10530,6 @@ li.muka-listitem {
10476
10530
  }
10477
10531
 
10478
10532
 
10479
- /* Divider */
10480
- /* Divider Component Styles - Using Muka Design Tokens */
10481
-
10482
- .muka-divider {
10483
- flex-shrink: 0;
10484
- }
10485
-
10486
- .muka-divider--horizontal {
10487
- width: 100%;
10488
- height: var(--separator-width);
10489
- }
10490
-
10491
- .muka-divider--vertical {
10492
- height: 100%;
10493
- width: var(--separator-width);
10494
- align-self: stretch;
10495
- }
10496
-
10497
- .muka-divider--default {
10498
- background-color: var(--separator-color-default);
10499
- }
10500
-
10501
- .muka-divider--contrast {
10502
- background-color: var(--separator-color-contrast);
10503
- }
10504
-
10505
-
10506
10533
  /* CheckboxTile */
10507
10534
  /* CheckboxTile Component Styles - Using Muka Design Tokens */
10508
10535
 
@@ -10831,11 +10858,17 @@ li.muka-listitem {
10831
10858
  /* ChatPhotoGrid */
10832
10859
  /* ChatPhotoGrid Component Styles */
10833
10860
 
10861
+ /*
10862
+ * The grid clips to its own radius and the tiles stay square, so only the four
10863
+ * outer corners round — matching the Figma "Wrapper" frame (5225:1394).
10864
+ */
10834
10865
  .muka-chat-photo-grid {
10835
10866
  display: grid;
10836
10867
  gap: var(--chatphotogrid-gap);
10837
10868
  width: 100%;
10838
10869
  min-width: 0;
10870
+ overflow: hidden;
10871
+ border-radius: var(--chatphotogrid-radius);
10839
10872
  }
10840
10873
 
10841
10874
  /* ─── Tiles ────────────────────────────────────────────── */
@@ -10848,7 +10881,6 @@ li.muka-listitem {
10848
10881
  padding: 0;
10849
10882
  margin: 0;
10850
10883
  border: none;
10851
- border-radius: var(--chatphotogrid-radius);
10852
10884
  background-color: var(--chatphotogrid-color-placeholder);
10853
10885
  aspect-ratio: 1 / 1;
10854
10886
  }
@@ -10860,7 +10892,8 @@ button.muka-chat-photo-grid__tile {
10860
10892
 
10861
10893
  button.muka-chat-photo-grid__tile:focus-visible {
10862
10894
  outline: var(--border-width-bold) solid var(--color-border-focus);
10863
- outline-offset: var(--spacing-1);
10895
+ /* Inset, so the grid's overflow clip cannot cut the ring off on corner tiles */
10896
+ outline-offset: calc(-1 * var(--border-width-bold));
10864
10897
  }
10865
10898
 
10866
10899
  .muka-chat-photo-grid__image {
@@ -10944,6 +10977,60 @@ button.muka-chat-photo-grid__tile:focus-visible {
10944
10977
  }
10945
10978
 
10946
10979
 
10980
+ /* ChatMessageStack */
10981
+ /* ChatMessageStack Component Styles */
10982
+
10983
+ .muka-chat-message-stack {
10984
+ display: flex;
10985
+ flex-direction: column;
10986
+ gap: var(--chatbubble-stack-gap);
10987
+ width: 100%;
10988
+ max-width: 100%;
10989
+ }
10990
+
10991
+ .muka-chat-message-stack__messages {
10992
+ display: flex;
10993
+ flex-direction: column;
10994
+ gap: var(--chatbubble-stack-gap);
10995
+ width: 100%;
10996
+ }
10997
+
10998
+ /*
10999
+ * Reasoning sits above the stack, indented past the avatar rail so it lines up
11000
+ * with the bubbles rather than with the avatar (Figma 5379:47300).
11001
+ */
11002
+ .muka-chat-message-stack__reasoning {
11003
+ min-width: 0;
11004
+ }
11005
+
11006
+ .muka-chat-message-stack--has-avatar .muka-chat-message-stack__reasoning {
11007
+ padding-left: calc(var(--chatbubble-avatar-size) + var(--chatbubble-row-gap));
11008
+ }
11009
+
11010
+ .muka-chat-message-stack--own.muka-chat-message-stack--has-avatar
11011
+ .muka-chat-message-stack__reasoning {
11012
+ padding-left: 0;
11013
+ padding-right: calc(var(--chatbubble-avatar-size) + var(--chatbubble-row-gap));
11014
+ }
11015
+
11016
+ /* Follow the message's compact rail and gap below the desktop breakpoint */
11017
+ @media (max-width: 1023px) {
11018
+ .muka-chat-message-stack--has-avatar .muka-chat-message-stack__reasoning {
11019
+ padding-left: calc(
11020
+ var(--chatbubble-avatar-size-compact) + var(--chatbubble-row-gap-compact)
11021
+ );
11022
+ }
11023
+
11024
+ .muka-chat-message-stack--own.muka-chat-message-stack--has-avatar
11025
+ .muka-chat-message-stack__reasoning {
11026
+ padding-left: 0;
11027
+ padding-right: calc(
11028
+ var(--chatbubble-avatar-size-compact) + var(--chatbubble-row-gap-compact)
11029
+ );
11030
+ }
11031
+ }
11032
+
11033
+
10947
11034
  /* ChatMessageList */
10948
11035
  /* ChatMessageList Component Styles */
10949
11036
 
@@ -10987,221 +11074,111 @@ button.muka-chat-photo-grid__tile:focus-visible {
10987
11074
  }
10988
11075
 
10989
11076
 
10990
- /* ChatComposer */
10991
- /* ChatComposer Component Styles */
11077
+ /* ChatMessage */
11078
+ /* ChatMessage Component Styles */
10992
11079
 
10993
- /*
10994
- * The composer is a bare, fill-width row: no padding, background, border or
10995
- * max-width of its own (Figma 5243:14141). Whatever hosts it owns the
10996
- * container — see BottomBar's `chat` variant.
10997
- */
10998
- .muka-chat-composer {
11080
+ .muka-chat-message {
10999
11081
  display: flex;
11000
11082
  flex-direction: column;
11001
- gap: var(--spacing-3);
11002
11083
  width: 100%;
11084
+ max-width: 100%;
11003
11085
  }
11004
11086
 
11005
- .muka-chat-composer--disabled {
11006
- opacity: 0.6;
11007
- pointer-events: none;
11008
- }
11009
-
11010
- /* ─── Input row ────────────────────────────────────────── */
11087
+ /* ─── Row: avatar rail + bubble ────────────────────────── */
11011
11088
 
11012
- .muka-chat-composer__row {
11013
- display: flex;
11089
+ .muka-chat-message__row {
11090
+ display: grid;
11091
+ grid-template-columns: minmax(0, 1fr);
11092
+ grid-template-areas: 'bubble';
11093
+ column-gap: var(--chatbubble-row-gap);
11014
11094
  width: 100%;
11015
- align-items: flex-end;
11016
- gap: var(--spacing-3);
11017
11095
  }
11018
11096
 
11019
- /* ─── Text field ───────────────────────────────────────── */
11020
-
11021
- .muka-chat-composer__field {
11022
- display: flex;
11023
- flex: 1 1 auto;
11024
- min-width: 0;
11025
- box-sizing: border-box;
11026
- align-items: center;
11027
- gap: var(--spacing-1);
11028
- min-height: var(--input-field-height-lg, 48px);
11029
- padding: 0 var(--spacing-2);
11030
- border: var(--border-width-regular) solid var(--input-field-color-default-border);
11031
- border-radius: var(--input-field-radius-lg);
11032
- background-color: var(--input-field-color-default-background);
11033
- transition: border-color 0.12s ease;
11097
+ .muka-chat-message--has-avatar .muka-chat-message__row {
11098
+ grid-template-columns: auto minmax(0, 1fr);
11099
+ grid-template-areas: 'rail bubble';
11034
11100
  }
11035
11101
 
11036
- .muka-chat-composer__field:focus-within {
11037
- border-color: var(--input-field-color-focus-border, var(--color-action-default));
11102
+ .muka-chat-message--own.muka-chat-message--has-avatar .muka-chat-message__row {
11103
+ grid-template-columns: minmax(0, 1fr) auto;
11104
+ grid-template-areas: 'bubble rail';
11038
11105
  }
11039
11106
 
11040
- .muka-chat-composer__input {
11041
- flex: 1 1 auto;
11042
- min-width: 0;
11043
- width: 100%;
11044
- box-sizing: border-box;
11045
- resize: none;
11046
- border: none;
11047
- background: transparent;
11048
- outline: none;
11049
- padding: 0 var(--spacing-1);
11050
- color: var(--color-text-default-default);
11051
- font-family: var(--text-body-base-regular-fontFamily);
11052
- font-weight: var(--text-body-base-regular-fontWeight);
11053
- font-size: var(--text-body-base-regular-fontSize);
11054
- line-height: var(--text-body-base-regular-lineHeight);
11055
- appearance: none;
11056
- -webkit-appearance: none;
11057
- }
11058
-
11059
- .muka-chat-composer__input::placeholder {
11060
- color: var(--color-text-subtle-default);
11061
- }
11062
-
11063
- /* Keep the in-field emoji button flush to the bottom-right as the field grows */
11064
- .muka-chat-composer__emoji {
11065
- flex-shrink: 0;
11066
- }
11067
-
11068
- /* ─── Recording bar ────────────────────────────────────── */
11069
-
11070
- .muka-chat-composer__recording {
11071
- display: flex;
11072
- flex: 1 1 auto;
11073
- min-width: 0;
11074
- box-sizing: border-box;
11075
- align-items: center;
11076
- min-height: var(--input-field-height-lg, 48px);
11077
- padding: var(--card-padding-sm);
11078
- border: var(--border-width-regular) solid var(--card-color-default-border);
11079
- border-radius: var(--radius-lg);
11080
- background-color: var(--card-color-default-background);
11081
- }
11082
-
11083
- /* ─── Staged attachments strip ─────────────────────────── */
11084
-
11085
- .muka-chat-composer__attachments-strip {
11086
- position: relative;
11087
- width: 100%;
11088
- }
11089
-
11090
- .muka-chat-composer__attachments {
11091
- display: flex;
11092
- gap: var(--spacing-3);
11093
- overflow-x: auto;
11094
- scroll-behavior: smooth;
11095
- scrollbar-width: none;
11096
- }
11097
-
11098
- .muka-chat-composer__attachments::-webkit-scrollbar {
11099
- display: none;
11100
- }
11101
-
11102
- .muka-chat-composer__overflow {
11103
- position: absolute;
11104
- top: 50%;
11105
- right: var(--spacing-2);
11106
- transform: translateY(-50%);
11107
- }
11108
-
11109
- /* ─── Print ────────────────────────────────────────────── */
11110
-
11111
- @media print {
11112
- .muka-chat-composer {
11113
- display: none;
11114
- }
11115
- }
11116
-
11117
-
11118
- /* ChatBubble */
11119
- /* ChatBubble Component Styles */
11120
-
11121
- .muka-chat-bubble {
11107
+ .muka-chat-message__rail {
11108
+ grid-area: rail;
11109
+ /* Sits on the bubble's baseline (Figma 5355:44091) */
11110
+ align-self: end;
11122
11111
  display: flex;
11123
- flex-direction: column;
11124
- width: 100%;
11125
- max-width: 100%;
11112
+ justify-content: center;
11113
+ min-width: var(--chatbubble-avatar-size);
11126
11114
  }
11127
11115
 
11128
- /* ─── Row: avatar rail + bubble + action bar ───────────────
11129
- *
11130
- * A two-row grid rather than a flex column, so the avatar bottom-aligns to the
11131
- * bubble itself and not to the action bar underneath it (Figma 5223:8520).
11116
+ /*
11117
+ * The Small size in Figma (5373:44702) halves the avatar to 32px and tightens
11118
+ * the gap to the bubble. Size the avatar itself, not just the rail, so the
11119
+ * bubbles keep their alignment. The header row keeps its own gap.
11132
11120
  */
11121
+ @media (max-width: 1023px) {
11122
+ .muka-chat-message__row {
11123
+ column-gap: var(--chatbubble-row-gap-compact);
11124
+ }
11133
11125
 
11134
- .muka-chat-bubble__row {
11135
- display: grid;
11136
- grid-template-columns: minmax(0, 1fr);
11137
- grid-template-areas:
11138
- 'bubble'
11139
- 'actions';
11140
- column-gap: var(--chatbubble-row-gap);
11141
- row-gap: var(--chatbubble-gap);
11142
- width: 100%;
11143
- }
11144
-
11145
- .muka-chat-bubble--has-avatar .muka-chat-bubble__row {
11146
- grid-template-columns: auto minmax(0, 1fr);
11147
- grid-template-areas:
11148
- 'rail bubble'
11149
- '. actions';
11150
- }
11151
-
11152
- .muka-chat-bubble--own.muka-chat-bubble--has-avatar .muka-chat-bubble__row {
11153
- grid-template-columns: minmax(0, 1fr) auto;
11154
- grid-template-areas:
11155
- 'bubble rail'
11156
- 'actions .';
11157
- }
11126
+ .muka-chat-message__rail {
11127
+ min-width: var(--chatbubble-avatar-size-compact);
11128
+ }
11158
11129
 
11159
- .muka-chat-bubble__rail {
11160
- grid-area: rail;
11161
- /* Sits on the bubble's baseline, above the action bar */
11162
- align-self: end;
11163
- display: flex;
11164
- justify-content: center;
11165
- min-width: var(--chatbubble-avatar-size);
11130
+ /* Outweighs the avatar's own size class, which sets width/height directly */
11131
+ .muka-chat-message .muka-chat-message__rail > * {
11132
+ width: var(--chatbubble-avatar-size-compact);
11133
+ height: var(--chatbubble-avatar-size-compact);
11134
+ }
11166
11135
  }
11167
11136
 
11168
11137
  /* ─── Bubble surface ───────────────────────────────────── */
11169
11138
 
11170
- .muka-chat-bubble__bubble {
11139
+ .muka-chat-message__bubble {
11171
11140
  grid-area: bubble;
11172
11141
  max-width: var(--chatbubble-max-width);
11173
11142
  position: relative;
11174
11143
  display: flex;
11175
11144
  flex-direction: column;
11176
11145
  gap: var(--chatbubble-gap);
11177
- width: 100%;
11178
- padding: var(--chatbubble-padding);
11146
+ padding: var(--chatbubble-padding-block) var(--chatbubble-padding-inline);
11179
11147
  border-radius: var(--chatbubble-radius);
11180
11148
  border: var(--border-width-regular) solid transparent;
11149
+ box-shadow: var(--shadow-level2);
11181
11150
  word-break: break-word;
11182
11151
  }
11183
11152
 
11184
- .muka-chat-bubble--own .muka-chat-bubble__bubble,
11185
- .muka-chat-bubble--own .muka-chat-bubble__actions {
11153
+ /*
11154
+ * Length axis (Figma `Text length` on 5355:44091): short messages hug their
11155
+ * content, long ones fill the row up to the shared max width.
11156
+ */
11157
+ .muka-chat-message--long .muka-chat-message__bubble {
11158
+ width: 100%;
11159
+ }
11160
+
11161
+ .muka-chat-message--short .muka-chat-message__bubble {
11162
+ width: fit-content;
11163
+ }
11164
+
11165
+ .muka-chat-message--own .muka-chat-message__bubble {
11186
11166
  justify-self: end;
11187
11167
  }
11188
11168
 
11189
- .muka-chat-bubble--own .muka-chat-bubble__bubble {
11169
+ .muka-chat-message--own .muka-chat-message__bubble {
11190
11170
  background-color: var(--chatbubble-color-own-background);
11191
11171
  border-color: var(--chatbubble-color-own-border);
11192
11172
  color: var(--chatbubble-color-own-foreground);
11193
- /* Room for the inset timestamp in the bottom-right corner */
11194
- padding-right: var(--spacing-6);
11195
11173
  }
11196
11174
 
11197
- .muka-chat-bubble--peer .muka-chat-bubble__bubble {
11175
+ .muka-chat-message--peer .muka-chat-message__bubble {
11198
11176
  background-color: var(--chatbubble-color-peer-background);
11199
11177
  border-color: var(--chatbubble-color-peer-border);
11200
11178
  color: var(--chatbubble-color-peer-foreground);
11201
- box-shadow: var(--shadow-level2);
11202
11179
  }
11203
11180
 
11204
- .muka-chat-bubble--agent .muka-chat-bubble__bubble {
11181
+ .muka-chat-message--agent .muka-chat-message__bubble {
11205
11182
  background-color: var(--chatbubble-color-agent-background);
11206
11183
  border-color: var(--chatbubble-color-agent-border);
11207
11184
  color: var(--chatbubble-color-agent-foreground);
@@ -11209,21 +11186,21 @@ button.muka-chat-photo-grid__tile:focus-visible {
11209
11186
 
11210
11187
  /* ─── Header row (author · meta · time · badge) ────────── */
11211
11188
 
11212
- .muka-chat-bubble__header {
11189
+ .muka-chat-message__header {
11213
11190
  display: flex;
11214
11191
  flex-flow: row wrap;
11215
11192
  align-items: center;
11216
11193
  gap: var(--chatbubble-row-gap);
11217
11194
  }
11218
11195
 
11219
- .muka-chat-bubble__author {
11196
+ .muka-chat-message__author {
11220
11197
  font-family: var(--text-body-base-bold-fontFamily);
11221
11198
  font-weight: var(--text-body-base-bold-fontWeight);
11222
11199
  font-size: var(--text-body-base-bold-fontSize);
11223
11200
  line-height: var(--text-body-base-bold-lineHeight);
11224
11201
  }
11225
11202
 
11226
- .muka-chat-bubble__author-meta {
11203
+ .muka-chat-message__author-meta {
11227
11204
  /* Inherits the variant's body colour from the bubble */
11228
11205
  color: inherit;
11229
11206
  font-family: var(--text-body-base-regular-fontFamily);
@@ -11232,7 +11209,7 @@ button.muka-chat-photo-grid__tile:focus-visible {
11232
11209
  line-height: var(--text-body-base-regular-lineHeight);
11233
11210
  }
11234
11211
 
11235
- .muka-chat-bubble__badge {
11212
+ .muka-chat-message__badge {
11236
11213
  display: inline-flex;
11237
11214
  align-items: center;
11238
11215
  }
@@ -11241,30 +11218,30 @@ button.muka-chat-photo-grid__tile:focus-visible {
11241
11218
  * Keep the first line of content clear of the absolutely positioned menu
11242
11219
  * button in the bubble's top-right corner.
11243
11220
  */
11244
- .muka-chat-bubble--has-menu .muka-chat-bubble__header,
11245
- .muka-chat-bubble--has-menu.muka-chat-bubble--no-header .muka-chat-bubble__message {
11246
- padding-right: var(--spacing-6);
11221
+ .muka-chat-message--has-menu .muka-chat-message__header,
11222
+ .muka-chat-message--has-menu.muka-chat-message--no-header .muka-chat-message__message {
11223
+ padding-right: var(--spacing-10);
11224
+ }
11225
+
11226
+ /* …and the last line clear of the inset timestamp in the bottom-right corner */
11227
+ .muka-chat-message--has-timestamp .muka-chat-message__message {
11228
+ padding-right: var(--spacing-10);
11247
11229
  }
11248
11230
 
11249
11231
  /* ─── Body ─────────────────────────────────────────────── */
11250
11232
 
11251
- .muka-chat-bubble__body {
11233
+ .muka-chat-message__body {
11252
11234
  display: flex;
11253
11235
  flex-direction: column;
11254
11236
  gap: var(--chatbubble-gap);
11255
11237
  min-width: 0;
11256
11238
  }
11257
11239
 
11258
- /* The agent balloon spaces its blocks further apart (Figma 5223:8520) */
11259
- .muka-chat-bubble--agent .muka-chat-bubble__body {
11260
- gap: var(--chatbubble-body-gap);
11261
- }
11262
-
11263
- .muka-chat-bubble__media {
11240
+ .muka-chat-message__media {
11264
11241
  min-width: 0;
11265
11242
  }
11266
11243
 
11267
- .muka-chat-bubble__message {
11244
+ .muka-chat-message__message {
11268
11245
  font-family: var(--text-body-base-regular-fontFamily);
11269
11246
  font-weight: var(--text-body-base-regular-fontWeight);
11270
11247
  font-size: var(--text-body-base-regular-fontSize);
@@ -11274,18 +11251,20 @@ button.muka-chat-photo-grid__tile:focus-visible {
11274
11251
  }
11275
11252
 
11276
11253
  /* Empty message block should not add a gap of its own */
11277
- .muka-chat-bubble__message:empty {
11254
+ .muka-chat-message__message:empty {
11278
11255
  display: none;
11279
11256
  }
11280
11257
 
11281
11258
  /* ─── Embedded card ────────────────────────────────────── */
11282
11259
 
11283
- .muka-chat-bubble__embed {
11260
+ .muka-chat-message__embed {
11284
11261
  position: relative;
11285
11262
  display: flex;
11286
11263
  flex-direction: column;
11287
11264
  gap: var(--chatbubble-embed-gap);
11288
- padding: var(--chatbubble-embed-padding);
11265
+ /* The card is inset from the blocks above and below it (Figma 5289:40562) */
11266
+ margin-block: var(--chatbubble-embed-margin-block);
11267
+ padding: var(--chatbubble-embed-padding-block) var(--chatbubble-embed-padding-inline);
11289
11268
  border-radius: var(--chatbubble-embed-radius);
11290
11269
  border: var(--border-width-regular) solid transparent;
11291
11270
  }
@@ -11294,127 +11273,135 @@ button.muka-chat-photo-grid__tile:focus-visible {
11294
11273
  * The embed sits on the raised surface of its author's role, one step apart
11295
11274
  * from the bubble it is nested in, and reuses that role's border colour.
11296
11275
  */
11297
- .muka-chat-bubble--own .muka-chat-bubble__embed {
11276
+ .muka-chat-message--own .muka-chat-message__embed {
11298
11277
  background-color: var(--chatbubble-embed-color-own-background);
11299
11278
  border-color: var(--chatbubble-embed-color-own-border);
11300
11279
  color: var(--chatbubble-embed-color-own-foreground);
11301
11280
  }
11302
11281
 
11303
- .muka-chat-bubble--peer .muka-chat-bubble__embed {
11282
+ .muka-chat-message--peer .muka-chat-message__embed {
11304
11283
  background-color: var(--chatbubble-embed-color-peer-background);
11305
11284
  border-color: var(--chatbubble-embed-color-peer-border);
11306
11285
  color: var(--chatbubble-embed-color-peer-foreground);
11307
11286
  }
11308
11287
 
11309
- .muka-chat-bubble--agent .muka-chat-bubble__embed {
11288
+ .muka-chat-message--agent .muka-chat-message__embed {
11310
11289
  background-color: var(--chatbubble-embed-color-agent-background);
11311
11290
  border-color: var(--chatbubble-embed-color-agent-border);
11312
11291
  color: var(--chatbubble-embed-color-agent-foreground);
11313
11292
  }
11314
11293
 
11315
- .muka-chat-bubble__embed-content {
11294
+ .muka-chat-message__embed-content {
11316
11295
  display: flex;
11317
11296
  flex-direction: column;
11318
11297
  gap: var(--chatbubble-embed-gap);
11319
11298
  min-width: 0;
11320
11299
  }
11321
11300
 
11322
- .muka-chat-bubble__embed-copy {
11301
+ .muka-chat-message__embed-copy {
11323
11302
  position: absolute;
11324
- top: var(--chatbubble-embed-padding);
11325
- right: var(--chatbubble-embed-padding);
11303
+ top: var(--chatbubble-embed-padding-block);
11304
+ right: var(--chatbubble-embed-padding-inline);
11326
11305
  }
11327
11306
 
11328
11307
  /* ─── Stacked full-width action buttons ────────────────── */
11329
11308
 
11330
- .muka-chat-bubble__action-stack {
11309
+ .muka-chat-message__action-stack {
11331
11310
  display: flex;
11332
11311
  flex-direction: column;
11333
11312
  gap: var(--chatbubble-action-stack-gap);
11334
11313
  }
11335
11314
 
11336
- /* ─── Inset timestamp (user variant) ───────────────────── */
11315
+ /* ─── Inset timestamp ──────────────────────────────────── */
11316
+
11317
+ /*
11318
+ * Every author puts its timestamp in the bubble's bottom-right corner, below
11319
+ * the message — never in the header row (Figma 5355:44091).
11320
+ */
11337
11321
 
11338
- .muka-chat-bubble__timestamp {
11322
+ .muka-chat-message__timestamp {
11339
11323
  color: var(--chatbubble-color-timestamp);
11340
- font-family: var(--text-body-sm-regular-fontFamily);
11341
- font-weight: var(--text-body-sm-regular-fontWeight);
11342
- font-size: var(--text-body-sm-regular-fontSize);
11343
- line-height: var(--text-body-sm-regular-lineHeight);
11324
+ font-family: var(--text-body-xs-regular-fontFamily);
11325
+ font-weight: var(--text-body-xs-regular-fontWeight);
11326
+ font-size: var(--text-body-xs-regular-fontSize);
11327
+ line-height: var(--text-body-xs-regular-lineHeight);
11344
11328
  white-space: nowrap;
11345
11329
  }
11346
11330
 
11347
- .muka-chat-bubble__timestamp--inset {
11348
- align-self: flex-end;
11331
+ /*
11332
+ * Pinned to the corner rather than stacked below the message, so a one-line
11333
+ * message stays one line tall. The message reserves the width it needs.
11334
+ */
11335
+ .muka-chat-message__timestamp--inset {
11336
+ position: absolute;
11337
+ right: var(--spacing-2);
11338
+ bottom: var(--spacing-1);
11339
+ }
11340
+
11341
+ /*
11342
+ * Media, an embed or an action stack run the full width of the bubble, so the
11343
+ * corner the timestamp sits in has to be cleared for it.
11344
+ */
11345
+ .muka-chat-message--has-timestamp.muka-chat-message--has-blocks .muka-chat-message__body {
11346
+ padding-bottom: var(--text-body-xs-regular-lineHeight);
11349
11347
  }
11350
11348
 
11351
11349
  /* ─── Menu affordance ──────────────────────────────────── */
11352
11350
 
11353
- .muka-chat-bubble__menu {
11351
+ /*
11352
+ * Hidden at rest. Revealed on hover on pointer devices, on keyboard focus
11353
+ * everywhere, and pinned while its menu is open. On touch the equivalent
11354
+ * affordance is a long-press on the bubble, which opens an ActionSheet.
11355
+ */
11356
+ .muka-chat-message__menu {
11354
11357
  position: absolute;
11355
11358
  top: var(--spacing-1);
11356
11359
  right: var(--spacing-1);
11360
+ opacity: 0;
11361
+ pointer-events: none;
11357
11362
  }
11358
11363
 
11359
- /* ─── Meta action row (below the bubble) ───────────────── */
11360
-
11361
- .muka-chat-bubble__actions {
11362
- grid-area: actions;
11363
- max-width: var(--chatbubble-max-width);
11364
- display: flex;
11365
- align-items: center;
11366
- gap: 0;
11367
- }
11368
-
11369
- .muka-chat-bubble--own .muka-chat-bubble__actions,
11370
- .muka-chat-bubble--agent .muka-chat-bubble__actions {
11371
- justify-content: flex-end;
11364
+ .muka-chat-message__menu:focus-within,
11365
+ .muka-chat-message--menu-open .muka-chat-message__menu {
11366
+ opacity: 1;
11367
+ pointer-events: auto;
11372
11368
  }
11373
11369
 
11374
- /*
11375
- * The meta row uses 32px icon buttons per the design. Expand the pointer/touch
11376
- * target to the 44px WCAG 2.1 AA minimum without changing the visual size.
11377
- */
11378
- .muka-chat-bubble__actions .muka-button--icon-only {
11379
- position: relative;
11370
+ @media (hover: hover) and (pointer: fine) and (min-width: 1024px) {
11371
+ .muka-chat-message__bubble:hover .muka-chat-message__menu {
11372
+ opacity: 1;
11373
+ pointer-events: auto;
11374
+ }
11380
11375
  }
11381
11376
 
11382
- .muka-chat-bubble__actions .muka-button--icon-only::after {
11383
- content: '';
11384
- position: absolute;
11385
- top: 50%;
11386
- left: 50%;
11387
- width: 44px;
11388
- height: 44px;
11389
- transform: translate(-50%, -50%);
11377
+ /* Suppress iOS Safari's own callout so the long-press sheet can take over */
11378
+ @media (pointer: coarse) {
11379
+ .muka-chat-message--has-menu .muka-chat-message__bubble {
11380
+ -webkit-touch-callout: none;
11381
+ }
11390
11382
  }
11391
11383
 
11392
11384
  /* ─── Print ────────────────────────────────────────────── */
11393
11385
 
11394
11386
  @media print {
11395
- .muka-chat-bubble__bubble {
11387
+ .muka-chat-message__bubble {
11396
11388
  box-shadow: none;
11397
11389
  break-inside: avoid;
11398
11390
  print-color-adjust: exact;
11399
11391
  -webkit-print-color-adjust: exact;
11400
11392
  }
11401
11393
 
11402
- .muka-chat-bubble__embed {
11394
+ .muka-chat-message__embed {
11403
11395
  break-inside: avoid;
11404
11396
  print-color-adjust: exact;
11405
11397
  -webkit-print-color-adjust: exact;
11406
11398
  }
11407
11399
 
11408
- .muka-chat-bubble__menu,
11409
- .muka-chat-bubble__actions,
11410
- .muka-chat-bubble__embed-copy,
11411
- .muka-chat-bubble__action-stack {
11400
+ .muka-chat-message__menu,
11401
+ .muka-chat-message__embed-copy,
11402
+ .muka-chat-message__action-stack {
11412
11403
  display: none;
11413
11404
  }
11414
-
11415
- .muka-chat-bubble__column {
11416
- max-width: 100%;
11417
- }
11418
11405
  }
11419
11406
 
11420
11407
 
@@ -11685,400 +11672,213 @@ button.muka-chat-photo-grid__tile:focus-visible {
11685
11672
  }
11686
11673
 
11687
11674
 
11688
- /* Button */
11689
- /* Button Component Styles - Using Muka Design Tokens */
11690
-
11691
- /* Base button styles */
11692
- .muka-button {
11693
- /* Layout */
11694
- display: inline-flex;
11695
- align-items: center;
11696
- justify-content: center;
11675
+ /* ChatComposer */
11676
+ /* ChatComposer Component Styles */
11697
11677
 
11698
- /* Typography - using semantic tokens */
11699
- font-family: var(--alias-font-brand-family);
11700
- font-weight: var(--alias-font-brand-weight-semibold);
11701
- text-decoration: none;
11702
-
11703
- /* Interaction */
11704
- border: none;
11705
- cursor: pointer;
11706
- user-select: none;
11707
- transition: all 0.2s ease;
11708
-
11709
- /* Accessibility */
11710
- outline: none;
11711
- position: relative;
11678
+ /*
11679
+ * The composer is a bare, fill-width row: no padding, background, border or
11680
+ * max-width of its own (Figma 5243:14141). Whatever hosts it owns the
11681
+ * container — see BottomBar's `chat` variant.
11682
+ */
11683
+ .muka-chat-composer {
11684
+ display: flex;
11685
+ flex-direction: column;
11686
+ gap: var(--spacing-3);
11687
+ width: 100%;
11712
11688
  }
11713
11689
 
11714
- /* Focus styles for accessibility */
11715
- .muka-button:focus-visible {
11716
- outline: 2px solid var(--color-border-focus);
11717
- outline-offset: 2px;
11690
+ .muka-chat-composer--disabled {
11691
+ opacity: 0.6;
11692
+ pointer-events: none;
11718
11693
  }
11719
11694
 
11720
- /* Size variants
11721
- Height is driven by min-height; vertical padding is 0 and the label carries
11722
- tight (Figma) line-height. Horizontal spacing matches Figma's nested model:
11723
- the button's padding is the outer container inset, and the label's own
11724
- padding is the icon-to-text gap (so text-only buttons keep both insets). */
11725
- .muka-button--sm {
11726
- padding: 0 var(--button-padding-sm-x);
11727
- border-radius: var(--button-radius-sm);
11728
- font-size: var(--text-label-sm-semibold-fontSize);
11729
- line-height: var(--text-label-sm-semibold-lineHeight);
11730
- min-height: 32px;
11731
- }
11695
+ /* ─── Input row ────────────────────────────────────────── */
11732
11696
 
11733
- .muka-button--sm .muka-button__label {
11734
- padding: 0 var(--button-gap-sm);
11697
+ .muka-chat-composer__row {
11698
+ display: flex;
11699
+ width: 100%;
11700
+ align-items: flex-end;
11701
+ gap: var(--spacing-3);
11735
11702
  }
11736
11703
 
11737
- .muka-button--md {
11738
- padding: 0 var(--button-padding-md-x);
11739
- border-radius: var(--button-radius-md);
11740
- font-size: var(--text-label-sm-semibold-fontSize);
11741
- line-height: var(--text-label-sm-semibold-lineHeight);
11742
- min-height: 40px;
11743
- }
11704
+ /* ─── Text field ───────────────────────────────────────── */
11744
11705
 
11745
- .muka-button--md .muka-button__label {
11746
- padding: 0 var(--button-gap-md);
11706
+ .muka-chat-composer__field {
11707
+ display: flex;
11708
+ flex: 1 1 auto;
11709
+ min-width: 0;
11710
+ box-sizing: border-box;
11711
+ align-items: center;
11712
+ gap: var(--spacing-1);
11713
+ min-height: var(--input-field-height-lg, 48px);
11714
+ padding: 0 var(--spacing-2);
11715
+ border: var(--border-width-regular) solid var(--input-field-color-default-border);
11716
+ border-radius: var(--input-field-radius-lg);
11717
+ background-color: var(--input-field-color-default-background);
11718
+ transition: border-color 0.12s ease;
11747
11719
  }
11748
11720
 
11749
- .muka-button--lg {
11750
- padding: 0 var(--button-padding-lg-x);
11751
- border-radius: var(--button-radius-lg);
11752
- font-size: var(--text-label-lg-semibold-fontSize);
11753
- line-height: var(--text-label-lg-semibold-lineHeight);
11754
- min-height: 48px;
11721
+ .muka-chat-composer__field:focus-within {
11722
+ border-color: var(--input-field-color-focus-border, var(--color-action-default));
11755
11723
  }
11756
11724
 
11757
- .muka-button--lg .muka-button__label {
11758
- padding: 0 var(--button-gap-lg);
11725
+ .muka-chat-composer__input {
11726
+ flex: 1 1 auto;
11727
+ min-width: 0;
11728
+ width: 100%;
11729
+ box-sizing: border-box;
11730
+ resize: none;
11731
+ border: none;
11732
+ background: transparent;
11733
+ outline: none;
11734
+ padding: 0 var(--spacing-1);
11735
+ color: var(--color-text-default-default);
11736
+ font-family: var(--text-body-base-regular-fontFamily);
11737
+ font-weight: var(--text-body-base-regular-fontWeight);
11738
+ font-size: var(--text-body-base-regular-fontSize);
11739
+ line-height: var(--text-body-base-regular-lineHeight);
11740
+ appearance: none;
11741
+ -webkit-appearance: none;
11759
11742
  }
11760
11743
 
11761
- .muka-button--xl {
11762
- padding: 0 var(--button-padding-xl-x);
11763
- border-radius: var(--button-radius-xl);
11764
- font-size: var(--text-label-2xl-semibold-fontSize);
11765
- line-height: var(--text-label-2xl-semibold-lineHeight);
11766
- min-height: 64px;
11744
+ .muka-chat-composer__input::placeholder {
11745
+ color: var(--color-text-subtle-default);
11767
11746
  }
11768
11747
 
11769
- .muka-button--xl .muka-button__label {
11770
- padding: 0 var(--button-gap-xl);
11748
+ /* Keep the in-field emoji button flush to the bottom-right as the field grows */
11749
+ .muka-chat-composer__emoji {
11750
+ flex-shrink: 0;
11771
11751
  }
11772
11752
 
11773
- /* Primary variant - your main CTA button */
11774
- .muka-button--primary {
11775
- background-color: var(--button-color-primary-background-default);
11776
- color: var(--button-color-primary-foreground-default);
11777
- box-shadow: var(--button-color-primary-shadow-default);
11778
- }
11753
+ /* ─── Recording bar ────────────────────────────────────── */
11779
11754
 
11780
- .muka-button--primary:hover:not(:disabled) {
11781
- background-color: var(--button-color-primary-background-hover);
11782
- color: var(--button-color-primary-foreground-hover);
11783
- box-shadow: var(--button-color-primary-shadow-hover);
11755
+ .muka-chat-composer__recording {
11756
+ display: flex;
11757
+ flex: 1 1 auto;
11758
+ min-width: 0;
11759
+ box-sizing: border-box;
11760
+ align-items: center;
11761
+ min-height: var(--input-field-height-lg, 48px);
11762
+ padding: var(--card-padding-sm);
11763
+ border: var(--border-width-regular) solid var(--card-color-default-border);
11764
+ border-radius: var(--radius-lg);
11765
+ background-color: var(--card-color-default-background);
11784
11766
  }
11785
11767
 
11786
- /* `[data-state="open"]` keeps a Button pressed while it's an open disclosure
11787
- trigger (Radix Menu/Popover set this on the trigger). `[aria-pressed="true"]`
11788
- gives toggle buttons a visible selected state, so the toggle is not conveyed
11789
- to sighted users by the accessibility tree alone. */
11790
- .muka-button--primary:active:not(:disabled),
11791
- .muka-button--primary.muka-button--pressed:not(:disabled),
11792
- .muka-button--primary[data-state="open"]:not(:disabled),
11793
- .muka-button--primary[aria-pressed="true"]:not(:disabled) {
11794
- background-color: var(--button-color-primary-background-pressed);
11795
- color: var(--button-color-primary-foreground-pressed);
11796
- box-shadow: var(--button-color-primary-shadow-pressed);
11797
- }
11768
+ /* ─── Staged attachments strip ─────────────────────────── */
11798
11769
 
11799
- .muka-button--primary:disabled {
11800
- background-color: var(--button-color-primary-background-disabled);
11801
- color: var(--button-color-primary-foreground-disabled);
11802
- box-shadow: var(--button-color-primary-shadow-disabled);
11803
- cursor: not-allowed;
11804
- opacity: 1; /* Remove opacity since we have proper disabled tokens */
11770
+ .muka-chat-composer__attachments-strip {
11771
+ position: relative;
11772
+ width: 100%;
11805
11773
  }
11806
11774
 
11807
- /* Secondary variant - supporting actions, no border, only bottom inner shadow */
11808
- .muka-button--secondary {
11809
- background-color: var(--button-color-secondary-background-default);
11810
- color: var(--button-color-secondary-foreground-default);
11811
- box-shadow: var(--button-color-secondary-shadow-default);
11775
+ .muka-chat-composer__attachments {
11776
+ display: flex;
11777
+ gap: var(--spacing-3);
11778
+ overflow-x: auto;
11779
+ scroll-behavior: smooth;
11780
+ scrollbar-width: none;
11812
11781
  }
11813
11782
 
11814
- .muka-button--secondary:hover:not(:disabled) {
11815
- background-color: var(--button-color-secondary-background-hover);
11816
- color: var(--button-color-secondary-foreground-hover);
11817
- box-shadow: var(--button-color-secondary-shadow-hover);
11783
+ .muka-chat-composer__attachments::-webkit-scrollbar {
11784
+ display: none;
11818
11785
  }
11819
11786
 
11820
- .muka-button--secondary:active:not(:disabled),
11821
- .muka-button--secondary.muka-button--pressed:not(:disabled),
11822
- .muka-button--secondary[data-state="open"]:not(:disabled),
11823
- .muka-button--secondary[aria-pressed="true"]:not(:disabled) {
11824
- background-color: var(--button-color-secondary-background-pressed);
11825
- color: var(--button-color-secondary-foreground-pressed);
11826
- box-shadow: var(--button-color-secondary-shadow-pressed);
11787
+ .muka-chat-composer__overflow {
11788
+ position: absolute;
11789
+ top: 50%;
11790
+ right: var(--spacing-2);
11791
+ transform: translateY(-50%);
11827
11792
  }
11828
11793
 
11829
- .muka-button--secondary:disabled {
11830
- background-color: var(--button-color-secondary-background-disabled);
11831
- color: var(--button-color-secondary-foreground-disabled);
11832
- box-shadow: var(--button-color-secondary-shadow-disabled);
11833
- cursor: not-allowed;
11834
- opacity: 1;
11835
- }
11794
+ /* ─── Print ────────────────────────────────────────────── */
11836
11795
 
11837
- /* Tertiary variant - tinted background with accent text and border */
11838
- .muka-button--tertiary {
11839
- background-color: var(--button-color-tertiary-background-default);
11840
- color: var(--button-color-tertiary-foreground-default);
11841
- border: 1px solid var(--button-color-tertiary-border-default);
11796
+ @media print {
11797
+ .muka-chat-composer {
11798
+ display: none;
11799
+ }
11842
11800
  }
11843
11801
 
11844
- .muka-button--tertiary:hover:not(:disabled) {
11845
- background-color: var(--button-color-tertiary-background-hover);
11846
- color: var(--button-color-tertiary-foreground-hover);
11847
- border-color: var(--button-color-tertiary-border-hover);
11848
- }
11849
11802
 
11850
- .muka-button--tertiary:active:not(:disabled),
11851
- .muka-button--tertiary.muka-button--pressed:not(:disabled),
11852
- .muka-button--tertiary[data-state="open"]:not(:disabled),
11853
- .muka-button--tertiary[aria-pressed="true"]:not(:disabled) {
11854
- background-color: var(--button-color-tertiary-background-pressed);
11855
- color: var(--button-color-tertiary-foreground-pressed);
11856
- border-color: var(--button-color-tertiary-border-pressed);
11803
+ /* Breadcrumb */
11804
+ /* Breadcrumb Component Styles */
11805
+
11806
+ .muka-breadcrumb__list {
11807
+ display: flex;
11808
+ align-items: center;
11809
+ flex-wrap: wrap;
11810
+ list-style: none;
11811
+ margin: 0;
11812
+ padding: 0;
11813
+ gap: var(--spacing-1);
11857
11814
  }
11858
11815
 
11859
- .muka-button--tertiary:disabled {
11860
- background-color: var(--button-color-tertiary-background-disabled);
11861
- color: var(--button-color-tertiary-foreground-disabled);
11862
- border-color: var(--button-color-tertiary-border-disabled);
11863
- cursor: not-allowed;
11864
- opacity: 1;
11816
+ .muka-breadcrumb__item {
11817
+ display: inline-flex;
11818
+ align-items: center;
11819
+ gap: var(--spacing-1);
11865
11820
  }
11866
11821
 
11867
- /* Ghost variant - minimal styling, border appears on hover */
11868
- .muka-button--ghost {
11869
- background-color: var(--button-color-ghost-background-default);
11870
- color: var(--button-color-ghost-foreground-default);
11871
- border: 1px solid var(--button-color-ghost-border-default);
11822
+ .muka-breadcrumb__icon {
11823
+ display: inline-flex;
11824
+ align-items: center;
11825
+ color: var(--color-text-subtle-default);
11872
11826
  }
11873
11827
 
11874
- .muka-button--ghost:hover:not(:disabled) {
11875
- background-color: var(--button-color-ghost-background-hover);
11876
- color: var(--button-color-ghost-foreground-hover);
11877
- border-color: var(--button-color-ghost-border-hover);
11828
+ /* Link styles */
11829
+ .muka-breadcrumb__link {
11830
+ color: var(--color-text-subtle-default);
11831
+ text-decoration: none;
11832
+ border: none;
11833
+ background: none;
11834
+ padding: 0;
11835
+ cursor: pointer;
11836
+ font: inherit;
11837
+ transition: color 0.15s ease;
11878
11838
  }
11879
11839
 
11880
- .muka-button--ghost:active:not(:disabled),
11881
- .muka-button--ghost.muka-button--pressed:not(:disabled),
11882
- .muka-button--ghost[data-state="open"]:not(:disabled),
11883
- .muka-button--ghost[aria-pressed="true"]:not(:disabled) {
11884
- background-color: var(--button-color-ghost-background-pressed);
11885
- color: var(--button-color-ghost-foreground-pressed);
11886
- border-color: var(--button-color-ghost-border-pressed);
11840
+ .muka-breadcrumb__link:hover {
11841
+ color: var(--color-text-action-default);
11842
+ text-decoration: underline;
11887
11843
  }
11888
11844
 
11889
- .muka-button--ghost:disabled {
11890
- background-color: var(--button-color-ghost-background-disabled);
11891
- color: var(--button-color-ghost-foreground-disabled);
11892
- border-color: var(--button-color-ghost-border-disabled);
11893
- cursor: not-allowed;
11894
- opacity: 1;
11845
+ /* Current page (last item) */
11846
+ .muka-breadcrumb__current {
11847
+ color: var(--color-text-default-default);
11848
+ font-weight: 600;
11895
11849
  }
11896
11850
 
11897
- /* Muted variant - same as ghost but resting foreground is subtle, darkens on interaction */
11898
- .muka-button--muted {
11899
- background-color: var(--button-color-muted-background-default);
11900
- color: var(--button-color-muted-foreground-default);
11901
- border: 1px solid var(--button-color-muted-border-default);
11851
+ /* Separator */
11852
+ .muka-breadcrumb__separator {
11853
+ color: var(--color-text-subtle-default);
11854
+ user-select: none;
11902
11855
  }
11903
11856
 
11904
- .muka-button--muted:hover:not(:disabled) {
11905
- background-color: var(--button-color-muted-background-hover);
11906
- color: var(--button-color-muted-foreground-hover);
11907
- border-color: var(--button-color-muted-border-hover);
11857
+ /* Ellipsis */
11858
+ .muka-breadcrumb__ellipsis {
11859
+ color: var(--color-text-subtle-default);
11908
11860
  }
11909
11861
 
11910
- .muka-button--muted:active:not(:disabled),
11911
- .muka-button--muted.muka-button--pressed:not(:disabled),
11912
- .muka-button--muted[data-state="open"]:not(:disabled),
11913
- .muka-button--muted[aria-pressed="true"]:not(:disabled) {
11914
- background-color: var(--button-color-muted-background-pressed);
11915
- color: var(--button-color-muted-foreground-pressed);
11916
- border-color: var(--button-color-muted-border-pressed);
11862
+ /* Size variants */
11863
+ .muka-breadcrumb--sm {
11864
+ font-family: var(--text-label-sm-regular-fontFamily);
11865
+ font-weight: var(--text-label-sm-regular-fontWeight);
11866
+ font-size: var(--text-label-sm-regular-fontSize);
11867
+ line-height: var(--text-label-sm-regular-lineHeight);
11917
11868
  }
11918
11869
 
11919
- .muka-button--muted:disabled {
11920
- background-color: var(--button-color-muted-background-disabled);
11921
- color: var(--button-color-muted-foreground-disabled);
11922
- border-color: var(--button-color-muted-border-disabled);
11923
- cursor: not-allowed;
11924
- opacity: 1;
11870
+ .muka-breadcrumb--md {
11871
+ font-family: var(--text-label-md-regular-fontFamily);
11872
+ font-weight: var(--text-label-md-regular-fontWeight);
11873
+ font-size: var(--text-label-md-regular-fontSize);
11874
+ line-height: var(--text-label-md-regular-lineHeight);
11925
11875
  }
11926
11876
 
11927
- /* General disabled state - fallback */
11928
- .muka-button:disabled {
11929
- cursor: not-allowed;
11930
- pointer-events: none;
11931
- }
11932
-
11933
- /* Full width modifier */
11934
- .muka-button--full-width {
11935
- width: 100%;
11936
- }
11937
-
11938
- /* Icons - forced to the Figma per-size dimension regardless of the icon passed */
11939
- .muka-button__icon {
11940
- display: inline-flex;
11941
- align-items: center;
11942
- justify-content: center;
11943
- flex-shrink: 0;
11944
- }
11945
-
11946
- /* Make the icon content (raw <svg> or a nested Icon span) fill the wrapper.
11947
- Scoped under .muka-button to outrank Icon.css's own `.muka-icon--{size}`
11948
- rule, so the button's size wins even when the icon hardcodes its own size. */
11949
- .muka-button .muka-button__icon > *,
11950
- .muka-button .muka-button__icon svg {
11951
- width: 100%;
11952
- height: 100%;
11953
- display: block;
11954
- }
11955
-
11956
- .muka-button--sm .muka-button__icon {
11957
- width: var(--button-icon-sm);
11958
- height: var(--button-icon-sm);
11959
- }
11960
-
11961
- .muka-button--md .muka-button__icon {
11962
- width: var(--button-icon-md);
11963
- height: var(--button-icon-md);
11964
- }
11965
-
11966
- .muka-button--lg .muka-button__icon {
11967
- width: var(--button-icon-lg);
11968
- height: var(--button-icon-lg);
11969
- }
11970
-
11971
- .muka-button--xl .muka-button__icon {
11972
- width: var(--button-icon-xl);
11973
- height: var(--button-icon-xl);
11974
- }
11975
-
11976
- .muka-button__label {
11977
- display: inline-flex;
11978
- align-items: center;
11979
- }
11980
-
11981
- /* Icon-only buttons - square, sized to the button height per size */
11982
- .muka-button--icon-only {
11983
- padding: 0;
11984
- }
11985
-
11986
- .muka-button--icon-only.muka-button--sm {
11987
- width: 32px;
11988
- }
11989
-
11990
- .muka-button--icon-only.muka-button--md {
11991
- width: 40px;
11992
- }
11993
-
11994
- .muka-button--icon-only.muka-button--lg {
11995
- width: 48px;
11996
- }
11997
-
11998
- .muka-button--icon-only.muka-button--xl {
11999
- width: 64px;
12000
- }
12001
-
12002
-
12003
- /* Breadcrumb */
12004
- /* Breadcrumb Component Styles */
12005
-
12006
- .muka-breadcrumb__list {
12007
- display: flex;
12008
- align-items: center;
12009
- flex-wrap: wrap;
12010
- list-style: none;
12011
- margin: 0;
12012
- padding: 0;
12013
- gap: var(--spacing-1);
12014
- }
12015
-
12016
- .muka-breadcrumb__item {
12017
- display: inline-flex;
12018
- align-items: center;
12019
- gap: var(--spacing-1);
12020
- }
12021
-
12022
- .muka-breadcrumb__icon {
12023
- display: inline-flex;
12024
- align-items: center;
12025
- color: var(--color-text-subtle-default);
12026
- }
12027
-
12028
- /* Link styles */
12029
- .muka-breadcrumb__link {
12030
- color: var(--color-text-subtle-default);
12031
- text-decoration: none;
12032
- border: none;
12033
- background: none;
12034
- padding: 0;
12035
- cursor: pointer;
12036
- font: inherit;
12037
- transition: color 0.15s ease;
12038
- }
12039
-
12040
- .muka-breadcrumb__link:hover {
12041
- color: var(--color-text-action-default);
12042
- text-decoration: underline;
12043
- }
12044
-
12045
- /* Current page (last item) */
12046
- .muka-breadcrumb__current {
12047
- color: var(--color-text-default-default);
12048
- font-weight: 600;
12049
- }
12050
-
12051
- /* Separator */
12052
- .muka-breadcrumb__separator {
12053
- color: var(--color-text-subtle-default);
12054
- user-select: none;
12055
- }
12056
-
12057
- /* Ellipsis */
12058
- .muka-breadcrumb__ellipsis {
12059
- color: var(--color-text-subtle-default);
12060
- }
12061
-
12062
- /* Size variants */
12063
- .muka-breadcrumb--sm {
12064
- font-family: var(--text-label-sm-regular-fontFamily);
12065
- font-weight: var(--text-label-sm-regular-fontWeight);
12066
- font-size: var(--text-label-sm-regular-fontSize);
12067
- line-height: var(--text-label-sm-regular-lineHeight);
12068
- }
12069
-
12070
- .muka-breadcrumb--md {
12071
- font-family: var(--text-label-md-regular-fontFamily);
12072
- font-weight: var(--text-label-md-regular-fontWeight);
12073
- font-size: var(--text-label-md-regular-fontSize);
12074
- line-height: var(--text-label-md-regular-lineHeight);
12075
- }
12076
-
12077
- .muka-breadcrumb--lg {
12078
- font-family: var(--text-label-lg-regular-fontFamily);
12079
- font-weight: var(--text-label-lg-regular-fontWeight);
12080
- font-size: var(--text-label-lg-regular-fontSize);
12081
- line-height: var(--text-label-lg-regular-lineHeight);
11877
+ .muka-breadcrumb--lg {
11878
+ font-family: var(--text-label-lg-regular-fontFamily);
11879
+ font-weight: var(--text-label-lg-regular-fontWeight);
11880
+ font-size: var(--text-label-lg-regular-fontSize);
11881
+ line-height: var(--text-label-lg-regular-lineHeight);
12082
11882
  }
12083
11883
 
12084
11884
 
@@ -12386,12 +12186,13 @@ button.muka-chat-photo-grid__tile:focus-visible {
12386
12186
  }
12387
12187
 
12388
12188
 
12389
- /* Badge */
12390
- /* Badge Component Styles - Using Muka Design Tokens */
12189
+ /* BadgeNumber */
12190
+ /* BadgeNumber Component Styles - Using Muka Design Tokens */
12391
12191
 
12392
- .muka-badge {
12192
+ .muka-badge-number {
12393
12193
  display: inline-flex;
12394
12194
  align-items: center;
12195
+ justify-content: center;
12395
12196
  border-radius: var(--border-radius-full);
12396
12197
  white-space: nowrap;
12397
12198
  user-select: none;
@@ -12399,174 +12200,412 @@ button.muka-chat-photo-grid__tile:focus-visible {
12399
12200
  }
12400
12201
 
12401
12202
  /*
12402
- * Sizes — height, gap, type, and default (label-edge) horizontal padding.
12403
- * Mirrors Chip so the two components share sizing, fonts, and spacing.
12404
- * Vertical centering is handled by the fixed height + align-items: center.
12405
- * The leading side gets a tighter padding when an icon/dot is present, via the
12406
- * --has-icon / --has-dot modifiers below.
12203
+ * Sizes — fixed height, matching min-width (so a single digit renders as a
12204
+ * circle), horizontal padding, and bold label typography. Vertical centering
12205
+ * is handled by the fixed height + align-items: center.
12407
12206
  */
12408
- .muka-badge--sm {
12409
- height: var(--badge-size-height-sm);
12410
- gap: var(--badge-gap-sm);
12411
- padding: 0 var(--badge-padding-label-sm);
12412
- font-family: var(--text-label-sm-regular-fontFamily);
12413
- font-weight: var(--text-label-sm-regular-fontWeight);
12414
- font-size: var(--text-label-sm-regular-fontSize);
12415
- line-height: var(--text-label-sm-regular-lineHeight);
12207
+ .muka-badge-number--2xs {
12208
+ height: var(--badge-number-size-2xs);
12209
+ min-width: var(--badge-number-size-2xs);
12210
+ padding: 0 var(--badge-number-padding-2xs);
12211
+ font-family: var(--text-label-xs-bold-fontFamily);
12212
+ font-weight: var(--text-label-xs-bold-fontWeight);
12213
+ font-size: var(--text-label-xs-bold-fontSize);
12214
+ line-height: var(--text-label-xs-bold-lineHeight);
12215
+ }
12216
+
12217
+ .muka-badge-number--xs {
12218
+ height: var(--badge-number-size-xs);
12219
+ min-width: var(--badge-number-size-xs);
12220
+ padding: 0 var(--badge-number-padding-xs);
12221
+ font-family: var(--text-label-sm-bold-fontFamily);
12222
+ font-weight: var(--text-label-sm-bold-fontWeight);
12223
+ font-size: var(--text-label-sm-bold-fontSize);
12224
+ line-height: var(--text-label-sm-bold-lineHeight);
12416
12225
  }
12417
12226
 
12418
- .muka-badge--md {
12419
- height: var(--badge-size-height-md);
12420
- gap: var(--badge-gap-md);
12421
- padding: 0 var(--badge-padding-label-md);
12422
- font-family: var(--text-label-md-regular-fontFamily);
12423
- font-weight: var(--text-label-md-regular-fontWeight);
12424
- font-size: var(--text-label-md-regular-fontSize);
12425
- line-height: var(--text-label-md-regular-lineHeight);
12227
+ .muka-badge-number--sm {
12228
+ height: var(--badge-number-size-sm);
12229
+ min-width: var(--badge-number-size-sm);
12230
+ padding: 0 var(--badge-number-padding-sm);
12231
+ font-family: var(--text-label-md-bold-fontFamily);
12232
+ font-weight: var(--text-label-md-bold-fontWeight);
12233
+ font-size: var(--text-label-md-bold-fontSize);
12234
+ line-height: var(--text-label-md-bold-lineHeight);
12426
12235
  }
12427
12236
 
12428
- .muka-badge--lg {
12429
- height: var(--badge-size-height-lg);
12430
- gap: var(--badge-gap-lg);
12431
- padding: 0 var(--badge-padding-label-lg);
12432
- font-family: var(--text-label-lg-regular-fontFamily);
12433
- font-weight: var(--text-label-lg-regular-fontWeight);
12434
- font-size: var(--text-label-lg-regular-fontSize);
12435
- line-height: var(--text-label-lg-regular-lineHeight);
12237
+ .muka-badge-number--md {
12238
+ height: var(--badge-number-size-md);
12239
+ min-width: var(--badge-number-size-md);
12240
+ padding: 0 var(--badge-number-padding-md);
12241
+ font-family: var(--text-label-lg-bold-fontFamily);
12242
+ font-weight: var(--text-label-lg-bold-fontWeight);
12243
+ font-size: var(--text-label-lg-bold-fontSize);
12244
+ line-height: var(--text-label-lg-bold-lineHeight);
12436
12245
  }
12437
12246
 
12438
- /* Tighter leading padding when a leading icon or dot is present */
12439
- .muka-badge--sm.muka-badge--has-icon,
12440
- .muka-badge--sm.muka-badge--has-dot {
12441
- padding-left: var(--badge-padding-leading-sm);
12442
- }
12443
- .muka-badge--md.muka-badge--has-icon,
12444
- .muka-badge--md.muka-badge--has-dot {
12445
- padding-left: var(--badge-padding-leading-md);
12446
- }
12447
- .muka-badge--lg.muka-badge--has-icon,
12448
- .muka-badge--lg.muka-badge--has-dot {
12449
- padding-left: var(--badge-padding-leading-lg);
12247
+ .muka-badge-number--lg {
12248
+ height: var(--badge-number-size-lg);
12249
+ min-width: var(--badge-number-size-lg);
12250
+ padding: 0 var(--badge-number-padding-lg);
12251
+ font-family: var(--text-label-2xl-bold-fontFamily);
12252
+ font-weight: var(--text-label-2xl-bold-fontWeight);
12253
+ font-size: var(--text-label-2xl-bold-fontSize);
12254
+ line-height: var(--text-label-2xl-bold-lineHeight);
12450
12255
  }
12451
12256
 
12452
- /* Leading icon slot — Figma icon sizes: sm 16, md 20, lg 24 (matches Chip) */
12453
- .muka-badge__icon {
12454
- display: inline-flex;
12455
- align-items: center;
12456
- justify-content: center;
12457
- flex-shrink: 0;
12257
+ .muka-badge-number__label {
12258
+ /*
12259
+ * The badge sets a tight line-height for compact sizing, which would clip
12260
+ * glyph descenders; give the label a roomier line-height. Vertical centering
12261
+ * is unaffected because the badge height is fixed and content is centered.
12262
+ */
12263
+ line-height: normal;
12458
12264
  }
12459
12265
 
12460
- .muka-badge--sm .muka-badge__icon {
12461
- width: var(--icon-size-xs);
12462
- height: var(--icon-size-xs);
12463
- }
12464
- .muka-badge--md .muka-badge__icon {
12465
- width: var(--icon-size-sm);
12466
- height: var(--icon-size-sm);
12467
- }
12468
- .muka-badge--lg .muka-badge__icon {
12469
- width: var(--icon-size-default);
12470
- height: var(--icon-size-default);
12266
+ /* Neutral variant */
12267
+ .muka-badge-number--neutral {
12268
+ background-color: var(--color-surface-level1);
12269
+ color: var(--color-text-default-default);
12471
12270
  }
12472
12271
 
12473
- /* Force the passed content (raw <svg> or an <Icon> wrapper) to the slot size,
12474
- so callers don't have to size the icon to match each badge size. The
12475
- .muka-icon selector is intentionally 2 classes deep to override .muka-icon--md. */
12476
- .muka-badge__icon .muka-icon,
12477
- .muka-badge__icon svg {
12478
- width: 100%;
12479
- height: 100%;
12272
+ /* Info variant */
12273
+ .muka-badge-number--info {
12274
+ background-color: var(--color-state-info-contrast);
12275
+ color: var(--color-text-default-inverse);
12480
12276
  }
12481
12277
 
12482
- /* Icons inherit the badge's per-variant foreground color */
12483
- .muka-badge .muka-icon {
12484
- color: inherit;
12278
+ /* Success variant */
12279
+ .muka-badge-number--success {
12280
+ background-color: var(--color-state-success-contrast);
12281
+ color: var(--color-text-default-inverse);
12485
12282
  }
12486
12283
 
12487
- /* Dot indicator */
12488
- .muka-badge__dot {
12489
- flex-shrink: 0;
12490
- border-radius: var(--border-radius-full);
12284
+ /* Warning variant */
12285
+ .muka-badge-number--warning {
12286
+ background-color: var(--color-state-warning-contrast);
12287
+ color: var(--color-text-default-inverse);
12491
12288
  }
12492
12289
 
12493
- .muka-badge--sm .muka-badge__dot {
12494
- width: var(--badge-size-dot-sm);
12495
- height: var(--badge-size-dot-sm);
12290
+ /* Error variant */
12291
+ .muka-badge-number--error {
12292
+ background-color: var(--color-state-error-contrast);
12293
+ color: var(--color-text-default-inverse);
12496
12294
  }
12497
12295
 
12498
- .muka-badge--md .muka-badge__dot {
12499
- width: var(--badge-size-dot-md);
12500
- height: var(--badge-size-dot-md);
12296
+
12297
+ /* Button */
12298
+ /* Button Component Styles - Using Muka Design Tokens */
12299
+
12300
+ /* Base button styles */
12301
+ .muka-button {
12302
+ /* Layout */
12303
+ display: inline-flex;
12304
+ align-items: center;
12305
+ justify-content: center;
12306
+
12307
+ /* Typography - using semantic tokens */
12308
+ font-family: var(--alias-font-brand-family);
12309
+ font-weight: var(--alias-font-brand-weight-semibold);
12310
+ text-decoration: none;
12311
+
12312
+ /* Interaction */
12313
+ border: none;
12314
+ cursor: pointer;
12315
+ user-select: none;
12316
+ transition: all 0.2s ease;
12317
+
12318
+ /* Accessibility */
12319
+ outline: none;
12320
+ position: relative;
12501
12321
  }
12502
12322
 
12503
- .muka-badge--lg .muka-badge__dot {
12504
- width: var(--badge-size-dot-lg);
12505
- height: var(--badge-size-dot-lg);
12323
+ /* Focus styles for accessibility */
12324
+ .muka-button:focus-visible {
12325
+ outline: 2px solid var(--color-border-focus);
12326
+ outline-offset: 2px;
12506
12327
  }
12507
12328
 
12508
- .muka-badge__label {
12509
- flex: 0 1 auto;
12510
- min-width: 0;
12511
- overflow: hidden;
12512
- text-overflow: ellipsis;
12513
- /*
12514
- * The badge sets a tight line-height for compact sizing, but the label's
12515
- * `overflow: hidden` (needed for ellipsis) then clips glyph descenders (g, y, p). Give the
12516
- * label its own roomier line-height so descenders render; vertical centering is unaffected
12517
- * because the badge height is fixed and content is centered via align-items: center.
12518
- */
12519
- line-height: normal;
12329
+ /* Size variants
12330
+ Height is driven by min-height; vertical padding is 0 and the label carries
12331
+ tight (Figma) line-height. Horizontal spacing matches Figma's nested model:
12332
+ the button's padding is the outer container inset, and the label's own
12333
+ padding is the icon-to-text gap (so text-only buttons keep both insets). */
12334
+ .muka-button--sm {
12335
+ padding: 0 var(--button-padding-sm-x);
12336
+ border-radius: var(--button-radius-sm);
12337
+ font-size: var(--text-label-sm-semibold-fontSize);
12338
+ line-height: var(--text-label-sm-semibold-lineHeight);
12339
+ min-height: 32px;
12340
+ }
12341
+
12342
+ .muka-button--sm .muka-button__label {
12343
+ padding: 0 var(--button-gap-sm);
12344
+ }
12345
+
12346
+ .muka-button--md {
12347
+ padding: 0 var(--button-padding-md-x);
12348
+ border-radius: var(--button-radius-md);
12349
+ font-size: var(--text-label-sm-semibold-fontSize);
12350
+ line-height: var(--text-label-sm-semibold-lineHeight);
12351
+ min-height: 40px;
12352
+ }
12353
+
12354
+ .muka-button--md .muka-button__label {
12355
+ padding: 0 var(--button-gap-md);
12356
+ }
12357
+
12358
+ .muka-button--lg {
12359
+ padding: 0 var(--button-padding-lg-x);
12360
+ border-radius: var(--button-radius-lg);
12361
+ font-size: var(--text-label-lg-semibold-fontSize);
12362
+ line-height: var(--text-label-lg-semibold-lineHeight);
12363
+ min-height: 48px;
12364
+ }
12365
+
12366
+ .muka-button--lg .muka-button__label {
12367
+ padding: 0 var(--button-gap-lg);
12368
+ }
12369
+
12370
+ .muka-button--xl {
12371
+ padding: 0 var(--button-padding-xl-x);
12372
+ border-radius: var(--button-radius-xl);
12373
+ font-size: var(--text-label-2xl-semibold-fontSize);
12374
+ line-height: var(--text-label-2xl-semibold-lineHeight);
12375
+ min-height: 64px;
12376
+ }
12377
+
12378
+ .muka-button--xl .muka-button__label {
12379
+ padding: 0 var(--button-gap-xl);
12380
+ }
12381
+
12382
+ /* Primary variant - your main CTA button */
12383
+ .muka-button--primary {
12384
+ background-color: var(--button-color-primary-background-default);
12385
+ color: var(--button-color-primary-foreground-default);
12386
+ box-shadow: var(--button-color-primary-shadow-default);
12387
+ }
12388
+
12389
+ .muka-button--primary:hover:not(:disabled) {
12390
+ background-color: var(--button-color-primary-background-hover);
12391
+ color: var(--button-color-primary-foreground-hover);
12392
+ box-shadow: var(--button-color-primary-shadow-hover);
12393
+ }
12394
+
12395
+ /* `[data-state="open"]` keeps a Button pressed while it's an open disclosure
12396
+ trigger (Radix Menu/Popover set this on the trigger). `[aria-pressed="true"]`
12397
+ gives toggle buttons a visible selected state, so the toggle is not conveyed
12398
+ to sighted users by the accessibility tree alone. */
12399
+ .muka-button--primary:active:not(:disabled),
12400
+ .muka-button--primary.muka-button--pressed:not(:disabled),
12401
+ .muka-button--primary[data-state="open"]:not(:disabled),
12402
+ .muka-button--primary[aria-pressed="true"]:not(:disabled) {
12403
+ background-color: var(--button-color-primary-background-pressed);
12404
+ color: var(--button-color-primary-foreground-pressed);
12405
+ box-shadow: var(--button-color-primary-shadow-pressed);
12406
+ }
12407
+
12408
+ .muka-button--primary:disabled {
12409
+ background-color: var(--button-color-primary-background-disabled);
12410
+ color: var(--button-color-primary-foreground-disabled);
12411
+ box-shadow: var(--button-color-primary-shadow-disabled);
12412
+ cursor: not-allowed;
12413
+ opacity: 1; /* Remove opacity since we have proper disabled tokens */
12414
+ }
12415
+
12416
+ /* Secondary variant - supporting actions, no border, only bottom inner shadow */
12417
+ .muka-button--secondary {
12418
+ background-color: var(--button-color-secondary-background-default);
12419
+ color: var(--button-color-secondary-foreground-default);
12420
+ box-shadow: var(--button-color-secondary-shadow-default);
12421
+ }
12422
+
12423
+ .muka-button--secondary:hover:not(:disabled) {
12424
+ background-color: var(--button-color-secondary-background-hover);
12425
+ color: var(--button-color-secondary-foreground-hover);
12426
+ box-shadow: var(--button-color-secondary-shadow-hover);
12427
+ }
12428
+
12429
+ .muka-button--secondary:active:not(:disabled),
12430
+ .muka-button--secondary.muka-button--pressed:not(:disabled),
12431
+ .muka-button--secondary[data-state="open"]:not(:disabled),
12432
+ .muka-button--secondary[aria-pressed="true"]:not(:disabled) {
12433
+ background-color: var(--button-color-secondary-background-pressed);
12434
+ color: var(--button-color-secondary-foreground-pressed);
12435
+ box-shadow: var(--button-color-secondary-shadow-pressed);
12436
+ }
12437
+
12438
+ .muka-button--secondary:disabled {
12439
+ background-color: var(--button-color-secondary-background-disabled);
12440
+ color: var(--button-color-secondary-foreground-disabled);
12441
+ box-shadow: var(--button-color-secondary-shadow-disabled);
12442
+ cursor: not-allowed;
12443
+ opacity: 1;
12444
+ }
12445
+
12446
+ /* Tertiary variant - tinted background with accent text and border */
12447
+ .muka-button--tertiary {
12448
+ background-color: var(--button-color-tertiary-background-default);
12449
+ color: var(--button-color-tertiary-foreground-default);
12450
+ border: 1px solid var(--button-color-tertiary-border-default);
12451
+ }
12452
+
12453
+ .muka-button--tertiary:hover:not(:disabled) {
12454
+ background-color: var(--button-color-tertiary-background-hover);
12455
+ color: var(--button-color-tertiary-foreground-hover);
12456
+ border-color: var(--button-color-tertiary-border-hover);
12457
+ }
12458
+
12459
+ .muka-button--tertiary:active:not(:disabled),
12460
+ .muka-button--tertiary.muka-button--pressed:not(:disabled),
12461
+ .muka-button--tertiary[data-state="open"]:not(:disabled),
12462
+ .muka-button--tertiary[aria-pressed="true"]:not(:disabled) {
12463
+ background-color: var(--button-color-tertiary-background-pressed);
12464
+ color: var(--button-color-tertiary-foreground-pressed);
12465
+ border-color: var(--button-color-tertiary-border-pressed);
12466
+ }
12467
+
12468
+ .muka-button--tertiary:disabled {
12469
+ background-color: var(--button-color-tertiary-background-disabled);
12470
+ color: var(--button-color-tertiary-foreground-disabled);
12471
+ border-color: var(--button-color-tertiary-border-disabled);
12472
+ cursor: not-allowed;
12473
+ opacity: 1;
12474
+ }
12475
+
12476
+ /* Ghost variant - minimal styling, border appears on hover */
12477
+ .muka-button--ghost {
12478
+ background-color: var(--button-color-ghost-background-default);
12479
+ color: var(--button-color-ghost-foreground-default);
12480
+ border: 1px solid var(--button-color-ghost-border-default);
12481
+ }
12482
+
12483
+ .muka-button--ghost:hover:not(:disabled) {
12484
+ background-color: var(--button-color-ghost-background-hover);
12485
+ color: var(--button-color-ghost-foreground-hover);
12486
+ border-color: var(--button-color-ghost-border-hover);
12487
+ }
12488
+
12489
+ .muka-button--ghost:active:not(:disabled),
12490
+ .muka-button--ghost.muka-button--pressed:not(:disabled),
12491
+ .muka-button--ghost[data-state="open"]:not(:disabled),
12492
+ .muka-button--ghost[aria-pressed="true"]:not(:disabled) {
12493
+ background-color: var(--button-color-ghost-background-pressed);
12494
+ color: var(--button-color-ghost-foreground-pressed);
12495
+ border-color: var(--button-color-ghost-border-pressed);
12496
+ }
12497
+
12498
+ .muka-button--ghost:disabled {
12499
+ background-color: var(--button-color-ghost-background-disabled);
12500
+ color: var(--button-color-ghost-foreground-disabled);
12501
+ border-color: var(--button-color-ghost-border-disabled);
12502
+ cursor: not-allowed;
12503
+ opacity: 1;
12504
+ }
12505
+
12506
+ /* Muted variant - same as ghost but resting foreground is subtle, darkens on interaction */
12507
+ .muka-button--muted {
12508
+ background-color: var(--button-color-muted-background-default);
12509
+ color: var(--button-color-muted-foreground-default);
12510
+ border: 1px solid var(--button-color-muted-border-default);
12511
+ }
12512
+
12513
+ .muka-button--muted:hover:not(:disabled) {
12514
+ background-color: var(--button-color-muted-background-hover);
12515
+ color: var(--button-color-muted-foreground-hover);
12516
+ border-color: var(--button-color-muted-border-hover);
12517
+ }
12518
+
12519
+ .muka-button--muted:active:not(:disabled),
12520
+ .muka-button--muted.muka-button--pressed:not(:disabled),
12521
+ .muka-button--muted[data-state="open"]:not(:disabled),
12522
+ .muka-button--muted[aria-pressed="true"]:not(:disabled) {
12523
+ background-color: var(--button-color-muted-background-pressed);
12524
+ color: var(--button-color-muted-foreground-pressed);
12525
+ border-color: var(--button-color-muted-border-pressed);
12526
+ }
12527
+
12528
+ .muka-button--muted:disabled {
12529
+ background-color: var(--button-color-muted-background-disabled);
12530
+ color: var(--button-color-muted-foreground-disabled);
12531
+ border-color: var(--button-color-muted-border-disabled);
12532
+ cursor: not-allowed;
12533
+ opacity: 1;
12534
+ }
12535
+
12536
+ /* General disabled state - fallback */
12537
+ .muka-button:disabled {
12538
+ cursor: not-allowed;
12539
+ pointer-events: none;
12540
+ }
12541
+
12542
+ /* Full width modifier */
12543
+ .muka-button--full-width {
12544
+ width: 100%;
12545
+ }
12546
+
12547
+ /* Icons - forced to the Figma per-size dimension regardless of the icon passed */
12548
+ .muka-button__icon {
12549
+ display: inline-flex;
12550
+ align-items: center;
12551
+ justify-content: center;
12552
+ flex-shrink: 0;
12553
+ }
12554
+
12555
+ /* Make the icon content (raw <svg> or a nested Icon span) fill the wrapper.
12556
+ Scoped under .muka-button to outrank Icon.css's own `.muka-icon--{size}`
12557
+ rule, so the button's size wins even when the icon hardcodes its own size. */
12558
+ .muka-button .muka-button__icon > *,
12559
+ .muka-button .muka-button__icon svg {
12560
+ width: 100%;
12561
+ height: 100%;
12562
+ display: block;
12520
12563
  }
12521
12564
 
12522
- /* Neutral variant */
12523
- .muka-badge--neutral {
12524
- background-color: var(--color-surface-level1);
12525
- color: var(--color-text-default-default);
12565
+ .muka-button--sm .muka-button__icon {
12566
+ width: var(--button-icon-sm);
12567
+ height: var(--button-icon-sm);
12526
12568
  }
12527
12569
 
12528
- .muka-badge--neutral .muka-badge__dot {
12529
- background-color: var(--color-text-subtle-default);
12570
+ .muka-button--md .muka-button__icon {
12571
+ width: var(--button-icon-md);
12572
+ height: var(--button-icon-md);
12530
12573
  }
12531
12574
 
12532
- /* Info variant */
12533
- .muka-badge--info {
12534
- background-color: var(--color-state-info-background);
12535
- color: var(--color-state-info-contrast);
12575
+ .muka-button--lg .muka-button__icon {
12576
+ width: var(--button-icon-lg);
12577
+ height: var(--button-icon-lg);
12536
12578
  }
12537
12579
 
12538
- .muka-badge--info .muka-badge__dot {
12539
- background-color: var(--color-state-info-default);
12580
+ .muka-button--xl .muka-button__icon {
12581
+ width: var(--button-icon-xl);
12582
+ height: var(--button-icon-xl);
12540
12583
  }
12541
12584
 
12542
- /* Success variant */
12543
- .muka-badge--success {
12544
- background-color: var(--color-state-success-background);
12545
- color: var(--color-state-success-contrast);
12585
+ .muka-button__label {
12586
+ display: inline-flex;
12587
+ align-items: center;
12546
12588
  }
12547
12589
 
12548
- .muka-badge--success .muka-badge__dot {
12549
- background-color: var(--color-state-success-default);
12590
+ /* Icon-only buttons - square, sized to the button height per size */
12591
+ .muka-button--icon-only {
12592
+ padding: 0;
12550
12593
  }
12551
12594
 
12552
- /* Warning variant */
12553
- .muka-badge--warning {
12554
- background-color: var(--color-state-warning-background);
12555
- color: var(--color-state-warning-contrast);
12595
+ .muka-button--icon-only.muka-button--sm {
12596
+ width: 32px;
12556
12597
  }
12557
12598
 
12558
- .muka-badge--warning .muka-badge__dot {
12559
- background-color: var(--color-state-warning-default);
12599
+ .muka-button--icon-only.muka-button--md {
12600
+ width: 40px;
12560
12601
  }
12561
12602
 
12562
- /* Error variant */
12563
- .muka-badge--error {
12564
- background-color: var(--color-state-error-background);
12565
- color: var(--color-state-error-contrast);
12603
+ .muka-button--icon-only.muka-button--lg {
12604
+ width: 48px;
12566
12605
  }
12567
12606
 
12568
- .muka-badge--error .muka-badge__dot {
12569
- background-color: var(--color-state-error-default);
12607
+ .muka-button--icon-only.muka-button--xl {
12608
+ width: 64px;
12570
12609
  }
12571
12610
 
12572
12611
 
@@ -13042,98 +13081,282 @@ button.muka-chat-photo-grid__tile:focus-visible {
13042
13081
  height: var(--alert-icon-size);
13043
13082
  }
13044
13083
 
13045
- .muka-alert__icon svg {
13046
- width: 100%;
13047
- height: 100%;
13084
+ .muka-alert__icon svg {
13085
+ width: 100%;
13086
+ height: 100%;
13087
+ }
13088
+
13089
+ /* The leading icon and the dismiss (×) icon inherit the variant accent set on
13090
+ their container, overriding the Icon component's default color. */
13091
+ .muka-alert__icon .muka-icon,
13092
+ .muka-alert__dismiss .muka-icon {
13093
+ color: inherit;
13094
+ }
13095
+
13096
+ /* Content */
13097
+ .muka-alert__content {
13098
+ flex: 1;
13099
+ min-width: 0;
13100
+ }
13101
+
13102
+ .muka-alert__title {
13103
+ font-family: var(--text-label-md-semibold-fontFamily);
13104
+ font-weight: var(--text-label-md-semibold-fontWeight);
13105
+ font-size: var(--text-label-md-semibold-fontSize);
13106
+ line-height: var(--text-label-md-semibold-lineHeight);
13107
+ margin-bottom: var(--spacing-1);
13108
+ }
13109
+
13110
+ .muka-alert--sm .muka-alert__title {
13111
+ font-family: var(--text-label-sm-semibold-fontFamily);
13112
+ font-weight: var(--text-label-sm-semibold-fontWeight);
13113
+ font-size: var(--text-label-sm-semibold-fontSize);
13114
+ line-height: var(--text-label-sm-semibold-lineHeight);
13115
+ }
13116
+
13117
+ .muka-alert--lg .muka-alert__title {
13118
+ font-family: var(--text-label-lg-semibold-fontFamily);
13119
+ font-weight: var(--text-label-lg-semibold-fontWeight);
13120
+ font-size: var(--text-label-lg-semibold-fontSize);
13121
+ line-height: var(--text-label-lg-semibold-lineHeight);
13122
+ }
13123
+
13124
+ .muka-alert__message {
13125
+ font-family: var(--text-body-sm-regular-fontFamily);
13126
+ font-weight: var(--text-body-sm-regular-fontWeight);
13127
+ font-size: var(--text-body-sm-regular-fontSize);
13128
+ line-height: var(--text-body-sm-regular-lineHeight);
13129
+ }
13130
+
13131
+ .muka-alert--lg .muka-alert__message {
13132
+ font-family: var(--text-body-base-regular-fontFamily);
13133
+ font-weight: var(--text-body-base-regular-fontWeight);
13134
+ font-size: var(--text-body-base-regular-fontSize);
13135
+ line-height: var(--text-body-base-regular-lineHeight);
13136
+ }
13137
+
13138
+ /* Action slot */
13139
+ .muka-alert__action {
13140
+ display: flex;
13141
+ align-items: center;
13142
+ flex-shrink: 0;
13143
+ }
13144
+
13145
+ /* Dismiss button - uses accent color per variant, aligned with icon row */
13146
+ .muka-alert__dismiss {
13147
+ display: flex;
13148
+ align-items: center;
13149
+ justify-content: center;
13150
+ flex-shrink: 0;
13151
+ align-self: flex-start;
13152
+ width: 24px;
13153
+ height: 24px;
13154
+ padding: 0;
13155
+ margin: 0 0 0 auto;
13156
+ border: none;
13157
+ background: transparent;
13158
+ cursor: pointer;
13159
+ border-radius: var(--border-radius-sm);
13160
+ transition: opacity 0.15s ease, background-color 0.15s ease;
13161
+ }
13162
+
13163
+ .muka-alert__dismiss:hover {
13164
+ opacity: 0.85;
13165
+ background-color: rgba(0, 0, 0, 0.05);
13166
+ }
13167
+
13168
+ .muka-alert__dismiss:focus-visible {
13169
+ outline: 2px solid var(--color-border-focus);
13170
+ outline-offset: 2px;
13171
+ }
13172
+
13173
+ .muka-alert__dismiss svg {
13174
+ width: 16px;
13175
+ height: 16px;
13176
+ }
13177
+
13178
+
13179
+ /* Badge */
13180
+ /* Badge Component Styles - Using Muka Design Tokens */
13181
+
13182
+ .muka-badge {
13183
+ display: inline-flex;
13184
+ align-items: center;
13185
+ border-radius: var(--border-radius-full);
13186
+ white-space: nowrap;
13187
+ user-select: none;
13188
+ box-sizing: border-box;
13189
+ }
13190
+
13191
+ /*
13192
+ * Sizes — height, gap, type, and default (label-edge) horizontal padding.
13193
+ * Mirrors Chip so the two components share sizing, fonts, and spacing.
13194
+ * Vertical centering is handled by the fixed height + align-items: center.
13195
+ * The leading side gets a tighter padding when an icon/dot is present, via the
13196
+ * --has-icon / --has-dot modifiers below.
13197
+ */
13198
+ .muka-badge--sm {
13199
+ height: var(--badge-size-height-sm);
13200
+ gap: var(--badge-gap-sm);
13201
+ padding: 0 var(--badge-padding-label-sm);
13202
+ font-family: var(--text-label-sm-regular-fontFamily);
13203
+ font-weight: var(--text-label-sm-regular-fontWeight);
13204
+ font-size: var(--text-label-sm-regular-fontSize);
13205
+ line-height: var(--text-label-sm-regular-lineHeight);
13206
+ }
13207
+
13208
+ .muka-badge--md {
13209
+ height: var(--badge-size-height-md);
13210
+ gap: var(--badge-gap-md);
13211
+ padding: 0 var(--badge-padding-label-md);
13212
+ font-family: var(--text-label-md-regular-fontFamily);
13213
+ font-weight: var(--text-label-md-regular-fontWeight);
13214
+ font-size: var(--text-label-md-regular-fontSize);
13215
+ line-height: var(--text-label-md-regular-lineHeight);
13216
+ }
13217
+
13218
+ .muka-badge--lg {
13219
+ height: var(--badge-size-height-lg);
13220
+ gap: var(--badge-gap-lg);
13221
+ padding: 0 var(--badge-padding-label-lg);
13222
+ font-family: var(--text-label-lg-regular-fontFamily);
13223
+ font-weight: var(--text-label-lg-regular-fontWeight);
13224
+ font-size: var(--text-label-lg-regular-fontSize);
13225
+ line-height: var(--text-label-lg-regular-lineHeight);
13226
+ }
13227
+
13228
+ /* Tighter leading padding when a leading icon or dot is present */
13229
+ .muka-badge--sm.muka-badge--has-icon,
13230
+ .muka-badge--sm.muka-badge--has-dot {
13231
+ padding-left: var(--badge-padding-leading-sm);
13232
+ }
13233
+ .muka-badge--md.muka-badge--has-icon,
13234
+ .muka-badge--md.muka-badge--has-dot {
13235
+ padding-left: var(--badge-padding-leading-md);
13236
+ }
13237
+ .muka-badge--lg.muka-badge--has-icon,
13238
+ .muka-badge--lg.muka-badge--has-dot {
13239
+ padding-left: var(--badge-padding-leading-lg);
13240
+ }
13241
+
13242
+ /* Leading icon slot — Figma icon sizes: sm 16, md 20, lg 24 (matches Chip) */
13243
+ .muka-badge__icon {
13244
+ display: inline-flex;
13245
+ align-items: center;
13246
+ justify-content: center;
13247
+ flex-shrink: 0;
13248
+ }
13249
+
13250
+ .muka-badge--sm .muka-badge__icon {
13251
+ width: var(--icon-size-xs);
13252
+ height: var(--icon-size-xs);
13253
+ }
13254
+ .muka-badge--md .muka-badge__icon {
13255
+ width: var(--icon-size-sm);
13256
+ height: var(--icon-size-sm);
13257
+ }
13258
+ .muka-badge--lg .muka-badge__icon {
13259
+ width: var(--icon-size-default);
13260
+ height: var(--icon-size-default);
13261
+ }
13262
+
13263
+ /* Force the passed content (raw <svg> or an <Icon> wrapper) to the slot size,
13264
+ so callers don't have to size the icon to match each badge size. The
13265
+ .muka-icon selector is intentionally 2 classes deep to override .muka-icon--md. */
13266
+ .muka-badge__icon .muka-icon,
13267
+ .muka-badge__icon svg {
13268
+ width: 100%;
13269
+ height: 100%;
13270
+ }
13271
+
13272
+ /* Icons inherit the badge's per-variant foreground color */
13273
+ .muka-badge .muka-icon {
13274
+ color: inherit;
13275
+ }
13276
+
13277
+ /* Dot indicator */
13278
+ .muka-badge__dot {
13279
+ flex-shrink: 0;
13280
+ border-radius: var(--border-radius-full);
13281
+ }
13282
+
13283
+ .muka-badge--sm .muka-badge__dot {
13284
+ width: var(--badge-size-dot-sm);
13285
+ height: var(--badge-size-dot-sm);
13286
+ }
13287
+
13288
+ .muka-badge--md .muka-badge__dot {
13289
+ width: var(--badge-size-dot-md);
13290
+ height: var(--badge-size-dot-md);
13048
13291
  }
13049
13292
 
13050
- /* The leading icon and the dismiss (×) icon inherit the variant accent set on
13051
- their container, overriding the Icon component's default color. */
13052
- .muka-alert__icon .muka-icon,
13053
- .muka-alert__dismiss .muka-icon {
13054
- color: inherit;
13293
+ .muka-badge--lg .muka-badge__dot {
13294
+ width: var(--badge-size-dot-lg);
13295
+ height: var(--badge-size-dot-lg);
13055
13296
  }
13056
13297
 
13057
- /* Content */
13058
- .muka-alert__content {
13059
- flex: 1;
13298
+ .muka-badge__label {
13299
+ flex: 0 1 auto;
13060
13300
  min-width: 0;
13301
+ overflow: hidden;
13302
+ text-overflow: ellipsis;
13303
+ /*
13304
+ * The badge sets a tight line-height for compact sizing, but the label's
13305
+ * `overflow: hidden` (needed for ellipsis) then clips glyph descenders (g, y, p). Give the
13306
+ * label its own roomier line-height so descenders render; vertical centering is unaffected
13307
+ * because the badge height is fixed and content is centered via align-items: center.
13308
+ */
13309
+ line-height: normal;
13061
13310
  }
13062
13311
 
13063
- .muka-alert__title {
13064
- font-family: var(--text-label-md-semibold-fontFamily);
13065
- font-weight: var(--text-label-md-semibold-fontWeight);
13066
- font-size: var(--text-label-md-semibold-fontSize);
13067
- line-height: var(--text-label-md-semibold-lineHeight);
13068
- margin-bottom: var(--spacing-1);
13312
+ /* Neutral variant */
13313
+ .muka-badge--neutral {
13314
+ background-color: var(--color-surface-level1);
13315
+ color: var(--color-text-default-default);
13069
13316
  }
13070
13317
 
13071
- .muka-alert--sm .muka-alert__title {
13072
- font-family: var(--text-label-sm-semibold-fontFamily);
13073
- font-weight: var(--text-label-sm-semibold-fontWeight);
13074
- font-size: var(--text-label-sm-semibold-fontSize);
13075
- line-height: var(--text-label-sm-semibold-lineHeight);
13318
+ .muka-badge--neutral .muka-badge__dot {
13319
+ background-color: var(--color-text-subtle-default);
13076
13320
  }
13077
13321
 
13078
- .muka-alert--lg .muka-alert__title {
13079
- font-family: var(--text-label-lg-semibold-fontFamily);
13080
- font-weight: var(--text-label-lg-semibold-fontWeight);
13081
- font-size: var(--text-label-lg-semibold-fontSize);
13082
- line-height: var(--text-label-lg-semibold-lineHeight);
13322
+ /* Info variant */
13323
+ .muka-badge--info {
13324
+ background-color: var(--color-state-info-background);
13325
+ color: var(--color-state-info-contrast);
13083
13326
  }
13084
13327
 
13085
- .muka-alert__message {
13086
- font-family: var(--text-body-sm-regular-fontFamily);
13087
- font-weight: var(--text-body-sm-regular-fontWeight);
13088
- font-size: var(--text-body-sm-regular-fontSize);
13089
- line-height: var(--text-body-sm-regular-lineHeight);
13328
+ .muka-badge--info .muka-badge__dot {
13329
+ background-color: var(--color-state-info-default);
13090
13330
  }
13091
13331
 
13092
- .muka-alert--lg .muka-alert__message {
13093
- font-family: var(--text-body-base-regular-fontFamily);
13094
- font-weight: var(--text-body-base-regular-fontWeight);
13095
- font-size: var(--text-body-base-regular-fontSize);
13096
- line-height: var(--text-body-base-regular-lineHeight);
13332
+ /* Success variant */
13333
+ .muka-badge--success {
13334
+ background-color: var(--color-state-success-background);
13335
+ color: var(--color-state-success-contrast);
13097
13336
  }
13098
13337
 
13099
- /* Action slot */
13100
- .muka-alert__action {
13101
- display: flex;
13102
- align-items: center;
13103
- flex-shrink: 0;
13338
+ .muka-badge--success .muka-badge__dot {
13339
+ background-color: var(--color-state-success-default);
13104
13340
  }
13105
13341
 
13106
- /* Dismiss button - uses accent color per variant, aligned with icon row */
13107
- .muka-alert__dismiss {
13108
- display: flex;
13109
- align-items: center;
13110
- justify-content: center;
13111
- flex-shrink: 0;
13112
- align-self: flex-start;
13113
- width: 24px;
13114
- height: 24px;
13115
- padding: 0;
13116
- margin: 0 0 0 auto;
13117
- border: none;
13118
- background: transparent;
13119
- cursor: pointer;
13120
- border-radius: var(--border-radius-sm);
13121
- transition: opacity 0.15s ease, background-color 0.15s ease;
13342
+ /* Warning variant */
13343
+ .muka-badge--warning {
13344
+ background-color: var(--color-state-warning-background);
13345
+ color: var(--color-state-warning-contrast);
13122
13346
  }
13123
13347
 
13124
- .muka-alert__dismiss:hover {
13125
- opacity: 0.85;
13126
- background-color: rgba(0, 0, 0, 0.05);
13348
+ .muka-badge--warning .muka-badge__dot {
13349
+ background-color: var(--color-state-warning-default);
13127
13350
  }
13128
13351
 
13129
- .muka-alert__dismiss:focus-visible {
13130
- outline: 2px solid var(--color-border-focus);
13131
- outline-offset: 2px;
13352
+ /* Error variant */
13353
+ .muka-badge--error {
13354
+ background-color: var(--color-state-error-background);
13355
+ color: var(--color-state-error-contrast);
13132
13356
  }
13133
13357
 
13134
- .muka-alert__dismiss svg {
13135
- width: 16px;
13136
- height: 16px;
13358
+ .muka-badge--error .muka-badge__dot {
13359
+ background-color: var(--color-state-error-default);
13137
13360
  }
13138
13361
 
13139
13362
 
@@ -13209,100 +13432,231 @@ button.muka-chat-photo-grid__tile:focus-visible {
13209
13432
 
13210
13433
  /* ─── Single task row ──────────────────────────────────── */
13211
13434
 
13212
- .muka-agent-task-list__task {
13213
- display: flex;
13214
- align-items: stretch;
13215
- gap: var(--spacing-4);
13216
- min-height: 32px;
13217
- padding: 0;
13435
+ .muka-agent-task-list__task {
13436
+ display: flex;
13437
+ align-items: stretch;
13438
+ gap: var(--spacing-4);
13439
+ min-height: 32px;
13440
+ padding: 0;
13441
+ }
13442
+
13443
+ /* ─── Bullet column (icon + timeline connector) ────────── */
13444
+
13445
+ .muka-agent-task-list__bullet {
13446
+ position: relative;
13447
+ flex-shrink: 0;
13448
+ width: 16px;
13449
+ align-self: stretch;
13450
+ }
13451
+
13452
+ .muka-agent-task-list__line {
13453
+ position: absolute;
13454
+ left: 7px;
13455
+ width: 1px;
13456
+ background-color: var(--color-border-default);
13457
+ }
13458
+
13459
+ .muka-agent-task-list__line--top {
13460
+ top: 0;
13461
+ height: 6px;
13462
+ }
13463
+
13464
+ .muka-agent-task-list__line--bottom {
13465
+ top: 32px;
13466
+ bottom: 0;
13467
+ }
13468
+
13469
+ .muka-agent-task-list__task:first-child .muka-agent-task-list__line--top {
13470
+ display: none;
13471
+ }
13472
+
13473
+ .muka-agent-task-list__task:last-child .muka-agent-task-list__line--bottom {
13474
+ display: none;
13475
+ }
13476
+
13477
+ .muka-agent-task-list__icon {
13478
+ position: absolute;
13479
+ top: 8px;
13480
+ left: 0;
13481
+ width: 16px;
13482
+ height: 16px;
13483
+ display: inline-flex;
13484
+ align-items: center;
13485
+ justify-content: center;
13486
+ color: var(--color-text-subtle-default);
13487
+ z-index: 1;
13488
+ }
13489
+
13490
+ /* ─── State color treatments ───────────────────────────── */
13491
+
13492
+ .muka-agent-task-list__task[data-state='active'] .muka-agent-task-list__icon {
13493
+ color: var(--color-action-default);
13494
+ }
13495
+
13496
+ .muka-agent-task-list__task[data-state='done'] .muka-agent-task-list__icon {
13497
+ color: var(--color-text-subtle-default);
13498
+ }
13499
+
13500
+ .muka-agent-task-list__task[data-state='pending'] .muka-agent-task-list__icon {
13501
+ color: var(--color-text-muted-default, var(--color-text-subtle-default));
13502
+ opacity: 0.6;
13503
+ }
13504
+
13505
+ /* ─── Label ────────────────────────────────────────────── */
13506
+
13507
+ .muka-agent-task-list__label {
13508
+ flex: 1 1 0;
13509
+ min-width: 0;
13510
+ padding: var(--spacing-2) 0;
13511
+ color: var(--color-text-subtle-default);
13512
+ font-family: var(--text-body-sm-regular-fontFamily);
13513
+ font-weight: var(--text-body-sm-regular-fontWeight);
13514
+ font-size: var(--text-body-sm-regular-fontSize);
13515
+ line-height: var(--text-body-sm-regular-lineHeight);
13516
+ word-break: break-word;
13517
+ }
13518
+
13519
+ /* ─── Print ────────────────────────────────────────────── */
13520
+
13521
+ @media print {
13522
+ .muka-agent-task-list {
13523
+ break-inside: avoid;
13524
+ }
13525
+
13526
+ .muka-agent-task-list__chevron {
13527
+ display: none;
13528
+ }
13529
+ }
13530
+
13531
+
13532
+ /* Accordion */
13533
+ /* Accordion Component Styles */
13534
+
13535
+ .muka-accordion {
13536
+ width: 100%;
13537
+ }
13538
+
13539
+ /* Item */
13540
+ .muka-accordion__item {
13541
+ border-bottom: var(--border-width-regular) solid var(--color-border-default);
13542
+ }
13543
+
13544
+ .muka-accordion__item:last-child {
13545
+ border-bottom: none;
13546
+ }
13547
+
13548
+ /* Header reset */
13549
+ .muka-accordion__header {
13550
+ margin: 0;
13551
+ }
13552
+
13553
+ /* Trigger */
13554
+ .muka-accordion__trigger {
13555
+ display: flex;
13556
+ align-items: center;
13557
+ justify-content: space-between;
13558
+ width: 100%;
13559
+ padding: var(--spacing-4);
13560
+ background: none;
13561
+ border: none;
13562
+ cursor: pointer;
13563
+ font-family: var(--text-label-md-semibold-fontFamily);
13564
+ font-weight: var(--text-label-md-semibold-fontWeight);
13565
+ font-size: var(--text-label-md-semibold-fontSize);
13566
+ line-height: var(--text-label-md-semibold-lineHeight);
13567
+ color: var(--color-text-default-default);
13568
+ text-align: left;
13569
+ gap: var(--spacing-3);
13570
+ transition: background-color 0.15s ease;
13571
+ }
13572
+
13573
+ .muka-accordion__trigger:hover {
13574
+ background-color: var(--color-surface-level1);
13218
13575
  }
13219
13576
 
13220
- /* ─── Bullet column (icon + timeline connector) ────────── */
13577
+ .muka-accordion__trigger[data-disabled] {
13578
+ cursor: not-allowed;
13579
+ opacity: 0.4;
13580
+ }
13221
13581
 
13222
- .muka-agent-task-list__bullet {
13223
- position: relative;
13224
- flex-shrink: 0;
13225
- width: 16px;
13226
- align-self: stretch;
13582
+ .muka-accordion__trigger-text {
13583
+ flex: 1;
13227
13584
  }
13228
13585
 
13229
- .muka-agent-task-list__line {
13230
- position: absolute;
13231
- left: 7px;
13232
- width: 1px;
13233
- background-color: var(--color-border-default);
13586
+ /* Chevron rotation */
13587
+ .muka-accordion__chevron {
13588
+ display: inline-flex;
13589
+ align-items: center;
13590
+ color: var(--color-text-subtle-default);
13591
+ transition: transform 200ms ease;
13234
13592
  }
13235
13593
 
13236
- .muka-agent-task-list__line--top {
13237
- top: 0;
13238
- height: 6px;
13594
+ .muka-accordion__trigger[data-state='open'] .muka-accordion__chevron {
13595
+ transform: rotate(180deg);
13239
13596
  }
13240
13597
 
13241
- .muka-agent-task-list__line--bottom {
13242
- top: 32px;
13243
- bottom: 0;
13598
+ /* Content */
13599
+ .muka-accordion__content {
13600
+ overflow: hidden;
13244
13601
  }
13245
13602
 
13246
- .muka-agent-task-list__task:first-child .muka-agent-task-list__line--top {
13247
- display: none;
13603
+ .muka-accordion__content[data-state='open'] {
13604
+ animation: muka-accordion-slideDown 200ms ease;
13248
13605
  }
13249
13606
 
13250
- .muka-agent-task-list__task:last-child .muka-agent-task-list__line--bottom {
13251
- display: none;
13607
+ .muka-accordion__content[data-state='closed'] {
13608
+ animation: muka-accordion-slideUp 200ms ease;
13252
13609
  }
13253
13610
 
13254
- .muka-agent-task-list__icon {
13255
- position: absolute;
13256
- top: 8px;
13257
- left: 0;
13258
- width: 16px;
13259
- height: 16px;
13260
- display: inline-flex;
13261
- align-items: center;
13262
- justify-content: center;
13263
- color: var(--color-text-subtle-default);
13264
- z-index: 1;
13611
+ @keyframes muka-accordion-slideDown {
13612
+ from {
13613
+ height: 0;
13614
+ }
13615
+ to {
13616
+ height: var(--radix-accordion-content-height);
13617
+ }
13265
13618
  }
13266
13619
 
13267
- /* ─── State color treatments ───────────────────────────── */
13620
+ @keyframes muka-accordion-slideUp {
13621
+ from {
13622
+ height: var(--radix-accordion-content-height);
13623
+ }
13624
+ to {
13625
+ height: 0;
13626
+ }
13627
+ }
13268
13628
 
13269
- .muka-agent-task-list__task[data-state='active'] .muka-agent-task-list__icon {
13270
- color: var(--color-action-default);
13629
+ .muka-accordion__content-inner {
13630
+ padding: 0 var(--spacing-4) var(--spacing-5);
13631
+ color: var(--color-text-default-default);
13271
13632
  }
13272
13633
 
13273
- .muka-agent-task-list__task[data-state='done'] .muka-agent-task-list__icon {
13274
- color: var(--color-text-subtle-default);
13634
+ /* ─── Variant: flush ────────────────────────────────────────────────────── */
13635
+
13636
+ .muka-accordion--flush .muka-accordion__trigger {
13637
+ padding-left: 0;
13638
+ padding-right: 0;
13275
13639
  }
13276
13640
 
13277
- .muka-agent-task-list__task[data-state='pending'] .muka-agent-task-list__icon {
13278
- color: var(--color-text-muted-default, var(--color-text-subtle-default));
13279
- opacity: 0.6;
13641
+ .muka-accordion--flush .muka-accordion__content-inner {
13642
+ padding-left: 0;
13643
+ padding-right: 0;
13280
13644
  }
13281
13645
 
13282
- /* ─── Label ────────────────────────────────────────────── */
13646
+ /* ─── Variant: contained ────────────────────────────────────────────────── */
13283
13647
 
13284
- .muka-agent-task-list__label {
13285
- flex: 1 1 0;
13286
- min-width: 0;
13287
- padding: var(--spacing-2) 0;
13288
- color: var(--color-text-subtle-default);
13289
- font-family: var(--text-body-sm-regular-fontFamily);
13290
- font-weight: var(--text-body-sm-regular-fontWeight);
13291
- font-size: var(--text-body-sm-regular-fontSize);
13292
- line-height: var(--text-body-sm-regular-lineHeight);
13293
- word-break: break-word;
13648
+ .muka-accordion--contained {
13649
+ border: var(--border-width-regular) solid var(--color-border-default);
13650
+ border-radius: var(--radius-md);
13651
+ overflow: hidden;
13294
13652
  }
13295
13653
 
13296
- /* ─── Print ────────────────────────────────────────────── */
13297
-
13298
- @media print {
13299
- .muka-agent-task-list {
13300
- break-inside: avoid;
13301
- }
13654
+ .muka-accordion--contained .muka-accordion__item {
13655
+ background-color: var(--color-surface-level3);
13656
+ }
13302
13657
 
13303
- .muka-agent-task-list__chevron {
13304
- display: none;
13305
- }
13658
+ .muka-accordion--contained .muka-accordion__item:last-child {
13659
+ border-bottom: none;
13306
13660
  }
13307
13661
 
13308
13662
 
@@ -13447,134 +13801,3 @@ button.muka-chat-photo-grid__tile:focus-visible {
13447
13801
  outline-offset: 2px;
13448
13802
  }
13449
13803
 
13450
-
13451
- /* Accordion */
13452
- /* Accordion Component Styles */
13453
-
13454
- .muka-accordion {
13455
- width: 100%;
13456
- }
13457
-
13458
- /* Item */
13459
- .muka-accordion__item {
13460
- border-bottom: var(--border-width-regular) solid var(--color-border-default);
13461
- }
13462
-
13463
- .muka-accordion__item:last-child {
13464
- border-bottom: none;
13465
- }
13466
-
13467
- /* Header reset */
13468
- .muka-accordion__header {
13469
- margin: 0;
13470
- }
13471
-
13472
- /* Trigger */
13473
- .muka-accordion__trigger {
13474
- display: flex;
13475
- align-items: center;
13476
- justify-content: space-between;
13477
- width: 100%;
13478
- padding: var(--spacing-4);
13479
- background: none;
13480
- border: none;
13481
- cursor: pointer;
13482
- font-family: var(--text-label-md-semibold-fontFamily);
13483
- font-weight: var(--text-label-md-semibold-fontWeight);
13484
- font-size: var(--text-label-md-semibold-fontSize);
13485
- line-height: var(--text-label-md-semibold-lineHeight);
13486
- color: var(--color-text-default-default);
13487
- text-align: left;
13488
- gap: var(--spacing-3);
13489
- transition: background-color 0.15s ease;
13490
- }
13491
-
13492
- .muka-accordion__trigger:hover {
13493
- background-color: var(--color-surface-level1);
13494
- }
13495
-
13496
- .muka-accordion__trigger[data-disabled] {
13497
- cursor: not-allowed;
13498
- opacity: 0.4;
13499
- }
13500
-
13501
- .muka-accordion__trigger-text {
13502
- flex: 1;
13503
- }
13504
-
13505
- /* Chevron rotation */
13506
- .muka-accordion__chevron {
13507
- display: inline-flex;
13508
- align-items: center;
13509
- color: var(--color-text-subtle-default);
13510
- transition: transform 200ms ease;
13511
- }
13512
-
13513
- .muka-accordion__trigger[data-state='open'] .muka-accordion__chevron {
13514
- transform: rotate(180deg);
13515
- }
13516
-
13517
- /* Content */
13518
- .muka-accordion__content {
13519
- overflow: hidden;
13520
- }
13521
-
13522
- .muka-accordion__content[data-state='open'] {
13523
- animation: muka-accordion-slideDown 200ms ease;
13524
- }
13525
-
13526
- .muka-accordion__content[data-state='closed'] {
13527
- animation: muka-accordion-slideUp 200ms ease;
13528
- }
13529
-
13530
- @keyframes muka-accordion-slideDown {
13531
- from {
13532
- height: 0;
13533
- }
13534
- to {
13535
- height: var(--radix-accordion-content-height);
13536
- }
13537
- }
13538
-
13539
- @keyframes muka-accordion-slideUp {
13540
- from {
13541
- height: var(--radix-accordion-content-height);
13542
- }
13543
- to {
13544
- height: 0;
13545
- }
13546
- }
13547
-
13548
- .muka-accordion__content-inner {
13549
- padding: 0 var(--spacing-4) var(--spacing-5);
13550
- color: var(--color-text-default-default);
13551
- }
13552
-
13553
- /* ─── Variant: flush ────────────────────────────────────────────────────── */
13554
-
13555
- .muka-accordion--flush .muka-accordion__trigger {
13556
- padding-left: 0;
13557
- padding-right: 0;
13558
- }
13559
-
13560
- .muka-accordion--flush .muka-accordion__content-inner {
13561
- padding-left: 0;
13562
- padding-right: 0;
13563
- }
13564
-
13565
- /* ─── Variant: contained ────────────────────────────────────────────────── */
13566
-
13567
- .muka-accordion--contained {
13568
- border: var(--border-width-regular) solid var(--color-border-default);
13569
- border-radius: var(--radius-md);
13570
- overflow: hidden;
13571
- }
13572
-
13573
- .muka-accordion--contained .muka-accordion__item {
13574
- background-color: var(--color-surface-level3);
13575
- }
13576
-
13577
- .muka-accordion--contained .muka-accordion__item:last-child {
13578
- border-bottom: none;
13579
- }
13580
-