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