@revikornmann/muka-ui 0.10.0 → 0.12.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 (86) hide show
  1. package/build/manifest.json +20 -0
  2. package/dist/cjs/components/AgentTaskList/AgentTaskList.css +22 -3
  3. package/dist/cjs/components/BottomBar/BottomBar.css +27 -2
  4. package/dist/cjs/components/BottomBar/BottomBar.js +1 -0
  5. package/dist/cjs/components/BottomBar/BottomBar.js.map +1 -1
  6. package/dist/cjs/components/Button/Button.css +13 -6
  7. package/dist/cjs/components/Button/Button.js +1 -1
  8. package/dist/cjs/components/ChatBubble/ChatBubble.css +251 -31
  9. package/dist/cjs/components/ChatBubble/ChatBubble.js +17 -4
  10. package/dist/cjs/components/ChatBubble/ChatBubble.js.map +1 -1
  11. package/dist/cjs/components/ChatComposer/ChatComposer.css +13 -1
  12. package/dist/cjs/components/ChatMessageList/ChatMessageList.css +17 -1
  13. package/dist/cjs/components/ChatPhotoGrid/ChatPhotoGrid.css +113 -0
  14. package/dist/cjs/components/ChatPhotoGrid/ChatPhotoGrid.js +47 -0
  15. package/dist/cjs/components/ChatPhotoGrid/ChatPhotoGrid.js.map +1 -0
  16. package/dist/cjs/components/ChatPhotoGrid/index.js +11 -0
  17. package/dist/cjs/components/ChatPhotoGrid/index.js.map +1 -0
  18. package/dist/cjs/components/index.js +3 -1
  19. package/dist/cjs/components/index.js.map +1 -1
  20. package/dist/esm/components/AgentTaskList/AgentTaskList.css +22 -3
  21. package/dist/esm/components/BottomBar/BottomBar.css +27 -2
  22. package/dist/esm/components/BottomBar/BottomBar.js +1 -0
  23. package/dist/esm/components/BottomBar/BottomBar.js.map +1 -1
  24. package/dist/esm/components/Button/Button.css +13 -6
  25. package/dist/esm/components/Button/Button.js +1 -1
  26. package/dist/esm/components/ChatBubble/ChatBubble.css +251 -31
  27. package/dist/esm/components/ChatBubble/ChatBubble.js +18 -5
  28. package/dist/esm/components/ChatBubble/ChatBubble.js.map +1 -1
  29. package/dist/esm/components/ChatComposer/ChatComposer.css +13 -1
  30. package/dist/esm/components/ChatMessageList/ChatMessageList.css +17 -1
  31. package/dist/esm/components/ChatPhotoGrid/ChatPhotoGrid.css +113 -0
  32. package/dist/esm/components/ChatPhotoGrid/ChatPhotoGrid.js +43 -0
  33. package/dist/esm/components/ChatPhotoGrid/ChatPhotoGrid.js.map +1 -0
  34. package/dist/esm/components/ChatPhotoGrid/index.js +3 -0
  35. package/dist/esm/components/ChatPhotoGrid/index.js.map +1 -0
  36. package/dist/esm/components/index.js +1 -0
  37. package/dist/esm/components/index.js.map +1 -1
  38. package/dist/styles/components/AgentTaskList.css +22 -3
  39. package/dist/styles/components/BottomBar.css +27 -2
  40. package/dist/styles/components/Button.css +13 -6
  41. package/dist/styles/components/ChatBubble.css +251 -31
  42. package/dist/styles/components/ChatComposer.css +13 -1
  43. package/dist/styles/components/ChatMessageList.css +17 -1
  44. package/dist/styles/components/ChatPhotoGrid.css +113 -0
  45. package/dist/styles/index.css +1178 -704
  46. package/dist/styles/muka-dark.css +1178 -704
  47. package/dist/styles/muka-light.css +1178 -704
  48. package/dist/styles/tokens-bouwplan-dark.css +61 -2
  49. package/dist/styles/tokens-bouwplan-light.css +61 -2
  50. package/dist/styles/tokens-fscl-dark.css +61 -2
  51. package/dist/styles/tokens-fscl-light.css +61 -2
  52. package/dist/styles/tokens-grip-dark.css +61 -2
  53. package/dist/styles/tokens-grip-light.css +61 -2
  54. package/dist/styles/tokens-muka-dark.css +61 -2
  55. package/dist/styles/tokens-muka-light.css +61 -2
  56. package/dist/styles/tokens-wireframe-dark.css +61 -2
  57. package/dist/styles/tokens-wireframe-light.css +61 -2
  58. package/dist/styles/wireframe-dark.css +1178 -704
  59. package/dist/styles/wireframe-light.css +1178 -704
  60. package/dist/types/components/BottomBar/BottomBar.d.ts +3 -2
  61. package/dist/types/components/BottomBar/BottomBar.d.ts.map +1 -1
  62. package/dist/types/components/Button/Button.d.ts +1 -1
  63. package/dist/types/components/ChatBubble/ChatBubble.d.ts +63 -8
  64. package/dist/types/components/ChatBubble/ChatBubble.d.ts.map +1 -1
  65. package/dist/types/components/ChatPhotoGrid/ChatPhotoGrid.d.ts +44 -0
  66. package/dist/types/components/ChatPhotoGrid/ChatPhotoGrid.d.ts.map +1 -0
  67. package/dist/types/components/ChatPhotoGrid/index.d.ts +3 -0
  68. package/dist/types/components/ChatPhotoGrid/index.d.ts.map +1 -0
  69. package/dist/types/components/index.d.ts +1 -0
  70. package/dist/types/components/index.d.ts.map +1 -1
  71. package/package.json +1 -1
  72. package/tokens/README.md +14 -0
  73. package/tokens/t2-alias/brand/bouwplan/dark.json +24 -0
  74. package/tokens/t2-alias/brand/bouwplan/light.json +24 -0
  75. package/tokens/t2-alias/brand/fscl/dark.json +24 -0
  76. package/tokens/t2-alias/brand/fscl/light.json +24 -0
  77. package/tokens/t2-alias/brand/grip/dark.json +54 -0
  78. package/tokens/t2-alias/brand/grip/light.json +54 -0
  79. package/tokens/t2-alias/brand/muka/dark.json +54 -0
  80. package/tokens/t2-alias/brand/muka/light.json +54 -0
  81. package/tokens/t2-alias/brand/wireframe/dark.json +54 -0
  82. package/tokens/t2-alias/brand/wireframe/light.json +54 -0
  83. package/tokens/t3-semantics/ui.json +190 -0
  84. package/tokens/t4-components/bottombar.json +11 -5
  85. package/tokens/t4-components/chatbubble.json +154 -0
  86. package/tokens/t4-components/chatphotogrid.json +32 -0
@@ -1214,6 +1214,19 @@ body {
1214
1214
  --color-state-warning-default: #ffc53d;
1215
1215
  --color-state-warning-contrast: #ab6400;
1216
1216
  --color-state-warning-background: #fff7c2;
1217
+ --color-conversation-own-background: #ddf9f2;
1218
+ --color-conversation-own-background-raised: #f2fbf9;
1219
+ --color-conversation-own-border: #b3ecde;
1220
+ --color-conversation-own-foreground: #211f26;
1221
+ --color-conversation-peer-background: #fdfcfd;
1222
+ --color-conversation-peer-background-raised: #faf9fb;
1223
+ --color-conversation-peer-border: #e3dfe6;
1224
+ --color-conversation-peer-foreground: #211f26;
1225
+ --color-conversation-agent-background: #fff7c2;
1226
+ --color-conversation-agent-background-raised: #fefbe9;
1227
+ --color-conversation-agent-border: #fbe577;
1228
+ --color-conversation-agent-foreground: #211f26;
1229
+ --color-conversation-meta: #65636d;
1217
1230
  --color-border-contrast: #d0cdd7;
1218
1231
  --color-border-default: #eae7ec;
1219
1232
  --color-border-muted: #f2eff3;
@@ -1313,6 +1326,16 @@ body {
1313
1326
  --alias-color-state-neutral-surface-level1: #f2eff3;
1314
1327
  --alias-color-state-neutral-surface-level2: #eae7ec;
1315
1328
  --alias-color-state-neutral-surface-level3: #e3dfe6;
1329
+ --alias-color-conversation-own-surface-default: #ddf9f2;
1330
+ --alias-color-conversation-own-surface-raised: #f2fbf9;
1331
+ --alias-color-conversation-own-border: #b3ecde;
1332
+ --alias-color-conversation-peer-surface-default: #fdfcfd;
1333
+ --alias-color-conversation-peer-surface-raised: #faf9fb;
1334
+ --alias-color-conversation-peer-border: #e3dfe6;
1335
+ --alias-color-conversation-agent-surface-default: #fff7c2;
1336
+ --alias-color-conversation-agent-surface-raised: #fefbe9;
1337
+ --alias-color-conversation-agent-border: #fbe577;
1338
+ --alias-color-conversation-meta: #65636d;
1316
1339
  --alias-font-plain-family: Funnel Sans;
1317
1340
  --alias-font-plain-weight-regular: 400;
1318
1341
  --alias-font-plain-weight-medium: 500;
@@ -1659,6 +1682,41 @@ body {
1659
1682
  --card-border-hover: 0.0625rem solid #d0cdd7;
1660
1683
  --card-border-pressed: 0.125rem solid #3e63dd;
1661
1684
  --card-border-selected: 0.125rem solid #3e63dd;
1685
+ --chatbubble-max-width: 640px;
1686
+ --chatbubble-radius: 0.75rem;
1687
+ --chatbubble-padding: 1rem;
1688
+ --chatbubble-gap: 0.25rem;
1689
+ --chatbubble-body-gap: 1.5rem;
1690
+ --chatbubble-row-gap: 0.75rem;
1691
+ --chatbubble-avatar-size: 3rem;
1692
+ --chatbubble-color-own-background: #ddf9f2;
1693
+ --chatbubble-color-own-border: #b3ecde;
1694
+ --chatbubble-color-own-foreground: #211f26;
1695
+ --chatbubble-color-peer-background: #fdfcfd;
1696
+ --chatbubble-color-peer-border: #e3dfe6;
1697
+ --chatbubble-color-peer-foreground: #211f26;
1698
+ --chatbubble-color-agent-background: #fff7c2;
1699
+ --chatbubble-color-agent-border: #fbe577;
1700
+ --chatbubble-color-agent-foreground: #211f26;
1701
+ --chatbubble-color-timestamp: #65636d;
1702
+ --chatbubble-embed-padding: 0.75rem;
1703
+ --chatbubble-embed-gap: 0.5rem;
1704
+ --chatbubble-embed-radius: 0.75rem;
1705
+ --chatbubble-embed-color-own-background: #f2fbf9;
1706
+ --chatbubble-embed-color-own-border: #b3ecde;
1707
+ --chatbubble-embed-color-own-foreground: #211f26;
1708
+ --chatbubble-embed-color-peer-background: #faf9fb;
1709
+ --chatbubble-embed-color-peer-border: #e3dfe6;
1710
+ --chatbubble-embed-color-peer-foreground: #211f26;
1711
+ --chatbubble-embed-color-agent-background: #fefbe9;
1712
+ --chatbubble-embed-color-agent-border: #fbe577;
1713
+ --chatbubble-embed-color-agent-foreground: #211f26;
1714
+ --chatbubble-action-stack-gap: 0.75rem;
1715
+ --chatphotogrid-gap: 0.5rem;
1716
+ --chatphotogrid-radius: 0.1875rem;
1717
+ --chatphotogrid-color-placeholder: #f2eff3;
1718
+ --chatphotogrid-color-overflow-background: rgba(0, 0, 0, 0.565);
1719
+ --chatphotogrid-color-overflow-foreground: #fdfcfd;
1662
1720
  --input-field-color-default-background: #fdfcfd;
1663
1721
  --input-field-color-default-foreground: #211f26;
1664
1722
  --input-field-color-default-border: #d0cdd7;
@@ -2040,9 +2098,10 @@ body {
2040
2098
  --bottombar-floating-shadow: 0 0 1px 0 rgba(0, 0, 0, 0.090), 0 8px 16px 0 rgba(0, 0, 0, 0.090);
2041
2099
  --bottombar-floating-max-width: 768px;
2042
2100
  --bottombar-floating-backdrop-start: transparent;
2043
- --bottombar-floating-backdrop-end: rgba(0, 0, 0, 0.090);
2044
- --bottombar-floating-backdrop-blur: 2px;
2101
+ --bottombar-floating-backdrop-end: rgba(0, 0, 0, 0.027);
2045
2102
  --bottombar-floating-padding-top: 2rem;
2103
+ --bottombar-chat-max-width: 1024px;
2104
+ --bottombar-chat-padding: 0.75rem;
2046
2105
  --bottombar-tab-icon-size: 24px;
2047
2106
  --bottombar-tab-gap: 0.25rem;
2048
2107
  --bottombar-tab-padding-y: 0.5rem;
@@ -7088,6 +7147,34 @@ body {
7088
7147
  }
7089
7148
 
7090
7149
 
7150
+ /* NavigationTransition */
7151
+ /* NavigationTransition Component Styles */
7152
+
7153
+ /* ─── Wrapper ────────────────────────────────────────── */
7154
+
7155
+ .muka-nav-transition {
7156
+ position: relative;
7157
+ height: 100vh;
7158
+ overflow: hidden;
7159
+ }
7160
+
7161
+ /* Disable interaction during animation */
7162
+ .muka-nav-transition--active {
7163
+ pointer-events: none;
7164
+ }
7165
+
7166
+ /* ─── View slots ─────────────────────────────────────── */
7167
+
7168
+ .muka-nav-transition--active .muka-nav-transition__view {
7169
+ position: absolute;
7170
+ inset: 0;
7171
+ }
7172
+
7173
+ /* Z-index layering */
7174
+ .muka-nav-transition__view--bottom { z-index: 1; }
7175
+ .muka-nav-transition__view--top { z-index: 2; }
7176
+
7177
+
7091
7178
  /* NumberInput */
7092
7179
  /* NumberInput — reuses Input field styles (../Input/Input.css). */
7093
7180
  /* Only the prefix/suffix affixes are NumberInput-specific. */
@@ -7118,34 +7205,6 @@ body {
7118
7205
  }
7119
7206
 
7120
7207
 
7121
- /* NavigationTransition */
7122
- /* NavigationTransition Component Styles */
7123
-
7124
- /* ─── Wrapper ────────────────────────────────────────── */
7125
-
7126
- .muka-nav-transition {
7127
- position: relative;
7128
- height: 100vh;
7129
- overflow: hidden;
7130
- }
7131
-
7132
- /* Disable interaction during animation */
7133
- .muka-nav-transition--active {
7134
- pointer-events: none;
7135
- }
7136
-
7137
- /* ─── View slots ─────────────────────────────────────── */
7138
-
7139
- .muka-nav-transition--active .muka-nav-transition__view {
7140
- position: absolute;
7141
- inset: 0;
7142
- }
7143
-
7144
- /* Z-index layering */
7145
- .muka-nav-transition__view--bottom { z-index: 1; }
7146
- .muka-nav-transition__view--top { z-index: 2; }
7147
-
7148
-
7149
7208
  /* Menu */
7150
7209
  /* Menu Component Styles */
7151
7210
 
@@ -8147,144 +8206,406 @@ li.muka-listitem {
8147
8206
  }
8148
8207
 
8149
8208
 
8150
- /* FAB */
8151
- /* FAB (Floating Action Button) Component Styles */
8209
+ /* FileUpload */
8210
+ /* FileUpload Component Styles */
8152
8211
 
8153
- .muka-fab {
8154
- position: fixed;
8155
- z-index: 40;
8212
+ .muka-fileupload-wrapper {
8213
+ display: flex;
8214
+ flex-direction: column;
8215
+ gap: var(--spacing-3);
8216
+ width: 100%;
8217
+ }
8156
8218
 
8157
- display: inline-flex;
8219
+ /* Dropzone */
8220
+ .muka-fileupload {
8221
+ display: flex;
8222
+ flex-direction: column;
8158
8223
  align-items: center;
8159
8224
  justify-content: center;
8160
- gap: var(--spacing-2);
8161
-
8162
- border: none;
8225
+ gap: var(--fileupload-dropzone-gap);
8226
+ padding: var(--fileupload-dropzone-padding-md);
8227
+ background-color: var(--fileupload-dropzone-color-default-background);
8228
+ border: var(--fileupload-dropzone-border-width) dashed var(--fileupload-dropzone-color-default-border);
8229
+ border-radius: var(--fileupload-dropzone-radius);
8163
8230
  cursor: pointer;
8164
- font-family: inherit;
8165
- box-shadow: var(--shadow-level4);
8166
-
8167
- transition: transform 0.12s ease, box-shadow 0.12s ease, background-color 0.12s ease;
8168
- -webkit-tap-highlight-color: transparent;
8169
- }
8170
-
8171
- .muka-fab:active {
8172
- transform: scale(0.96);
8173
- box-shadow: var(--shadow-level3);
8231
+ transition: background-color 0.2s ease, border-color 0.2s ease;
8232
+ text-align: center;
8233
+ min-height: 120px;
8174
8234
  }
8175
8235
 
8176
- .muka-fab:focus-visible {
8177
- outline: 2px solid var(--color-action-default);
8236
+ .muka-fileupload:focus-visible {
8237
+ outline: 2px solid var(--color-border-focus);
8178
8238
  outline-offset: 2px;
8179
8239
  }
8180
8240
 
8181
- .muka-fab:disabled {
8182
- opacity: 0.5;
8183
- cursor: not-allowed;
8184
- box-shadow: none;
8185
- }
8186
-
8187
- /* ─── Variants ────────────────────────────────────────── */
8188
-
8189
- .muka-fab--primary {
8190
- background-color: var(--color-action-default);
8191
- color: var(--color-text-inverse-default);
8241
+ /* Size variants */
8242
+ .muka-fileupload--sm {
8243
+ padding: var(--fileupload-dropzone-padding-sm);
8244
+ min-height: 80px;
8192
8245
  }
8193
8246
 
8194
- .muka-fab--primary:hover:not(:disabled) {
8195
- background-color: var(--color-action-hover);
8247
+ .muka-fileupload--lg {
8248
+ padding: var(--fileupload-dropzone-padding-lg);
8249
+ min-height: 160px;
8196
8250
  }
8197
8251
 
8198
- .muka-fab--secondary {
8199
- background-color: var(--color-surface-level3);
8200
- color: var(--color-text-default-default);
8252
+ /* Button variant */
8253
+ .muka-fileupload--button {
8254
+ flex-direction: row;
8255
+ min-height: auto;
8256
+ padding: var(--spacing-2) var(--spacing-3);
8257
+ border-style: solid;
8258
+ border-width: var(--border-width-regular);
8259
+ border-radius: var(--border-radius-md);
8201
8260
  }
8202
8261
 
8203
- .muka-fab--secondary:hover:not(:disabled) {
8204
- background-color: var(--color-surface-level2);
8262
+ /* Hover state */
8263
+ .muka-fileupload:hover:not(.muka-fileupload--disabled) {
8264
+ background-color: var(--fileupload-dropzone-color-hover-background);
8265
+ border-color: var(--fileupload-dropzone-color-hover-border);
8205
8266
  }
8206
8267
 
8207
- /* ─── Sizes (circular by default) ─────────────────────── */
8208
-
8209
- .muka-fab--md {
8210
- width: 56px;
8211
- height: 56px;
8212
- border-radius: 50%;
8268
+ /* Active/drag state */
8269
+ .muka-fileupload--active:not(.muka-fileupload--disabled) {
8270
+ background-color: var(--fileupload-dropzone-color-active-background);
8271
+ border-color: var(--fileupload-dropzone-color-active-border);
8213
8272
  }
8214
8273
 
8215
- .muka-fab--lg {
8216
- width: 64px;
8217
- height: 64px;
8218
- border-radius: 50%;
8274
+ /* Disabled state */
8275
+ .muka-fileupload--disabled {
8276
+ background-color: var(--fileupload-dropzone-color-disabled-background);
8277
+ border-color: var(--fileupload-dropzone-color-disabled-border);
8278
+ cursor: not-allowed;
8279
+ opacity: 0.6;
8219
8280
  }
8220
8281
 
8221
- /* ─── Extended (pill shape with label) ────────────────── */
8222
-
8223
- .muka-fab--extended {
8224
- width: auto;
8225
- height: auto;
8226
- padding: var(--spacing-3) var(--spacing-4);
8227
- border-radius: var(--radius-full);
8282
+ /* Hidden file input */
8283
+ .muka-fileupload__input {
8284
+ position: absolute;
8285
+ width: 1px;
8286
+ height: 1px;
8287
+ padding: 0;
8288
+ margin: -1px;
8289
+ overflow: hidden;
8290
+ clip: rect(0, 0, 0, 0);
8291
+ white-space: nowrap;
8292
+ border: 0;
8228
8293
  }
8229
8294
 
8230
- .muka-fab--extended.muka-fab--lg {
8231
- padding: var(--spacing-4) var(--spacing-5);
8295
+ /* Content container */
8296
+ .muka-fileupload__content {
8297
+ display: flex;
8298
+ flex-direction: column;
8299
+ align-items: center;
8300
+ gap: var(--spacing-2);
8232
8301
  }
8233
8302
 
8234
- .muka-fab__icon {
8235
- display: inline-flex;
8303
+ /* Upload icon */
8304
+ .muka-fileupload__icon {
8305
+ display: flex;
8236
8306
  align-items: center;
8237
8307
  justify-content: center;
8238
- width: 24px;
8239
- height: 24px;
8308
+ width: var(--size-3xl);
8309
+ height: var(--size-3xl);
8310
+ color: var(--fileupload-dropzone-color-default-foreground);
8240
8311
  }
8241
8312
 
8242
- .muka-fab__icon svg {
8313
+ .muka-fileupload__icon svg {
8243
8314
  width: 100%;
8244
8315
  height: 100%;
8245
8316
  }
8246
8317
 
8247
- .muka-fab__label {
8248
- font-family: var(--text-label-md-semibold-fontFamily);
8249
- font-weight: var(--text-label-md-semibold-fontWeight);
8250
- font-size: var(--text-label-md-semibold-fontSize);
8251
- line-height: var(--text-label-md-semibold-lineHeight);
8252
- }
8253
-
8254
- /* ─── Positioning ─────────────────────────────────────── */
8255
-
8256
- .muka-fab--bottom-right {
8257
- right: var(--spacing-4);
8258
- bottom: var(--spacing-4);
8318
+ .muka-fileupload--sm .muka-fileupload__icon {
8319
+ width: var(--size-2xl);
8320
+ height: var(--size-2xl);
8259
8321
  }
8260
8322
 
8261
- .muka-fab--bottom-left {
8262
- left: var(--spacing-4);
8263
- bottom: var(--spacing-4);
8323
+ .muka-fileupload--lg .muka-fileupload__icon {
8324
+ width: var(--size-4xl);
8325
+ height: var(--size-4xl);
8264
8326
  }
8265
8327
 
8266
- .muka-fab--bottom-center {
8267
- left: 50%;
8268
- bottom: var(--spacing-4);
8269
- transform: translateX(-50%);
8328
+ /* Text */
8329
+ .muka-fileupload__text {
8330
+ font-family: var(--text-body-md-regular-fontFamily);
8331
+ font-size: var(--text-body-md-regular-fontSize);
8332
+ font-weight: var(--text-body-md-regular-fontWeight);
8333
+ line-height: var(--text-body-md-regular-lineHeight);
8334
+ color: var(--color-text-default-default);
8270
8335
  }
8271
8336
 
8272
- .muka-fab--bottom-center:active {
8273
- transform: translateX(-50%) scale(0.96);
8337
+ .muka-fileupload--sm .muka-fileupload__text {
8338
+ font-size: var(--text-body-sm-regular-fontSize);
8274
8339
  }
8275
8340
 
8276
- /* Add the iOS home-indicator inset to the bottom offset. */
8277
- .muka-fab:not(.muka-fab--no-safe-area) {
8278
- bottom: calc(var(--spacing-4) + env(safe-area-inset-bottom));
8341
+ /* Hint text */
8342
+ .muka-fileupload__hint {
8343
+ font-family: var(--text-label-sm-regular-fontFamily);
8344
+ font-size: var(--text-label-sm-regular-fontSize);
8345
+ font-weight: var(--text-label-sm-regular-fontWeight);
8346
+ line-height: var(--text-label-sm-regular-lineHeight);
8347
+ color: var(--fileupload-dropzone-color-default-foreground);
8279
8348
  }
8280
8349
 
8281
- /* Lateral safe-area for landscape iPhone with notch. */
8282
- .muka-fab--bottom-right:not(.muka-fab--no-safe-area) {
8283
- right: max(var(--spacing-4), env(safe-area-inset-right));
8350
+ /* File list */
8351
+ .muka-fileupload__list {
8352
+ display: flex;
8353
+ flex-direction: column;
8354
+ gap: var(--spacing-2);
8355
+ list-style: none;
8356
+ margin: 0;
8357
+ padding: 0;
8284
8358
  }
8285
8359
 
8286
- .muka-fab--bottom-left:not(.muka-fab--no-safe-area) {
8287
- left: max(var(--spacing-4), env(safe-area-inset-left));
8360
+ .muka-fileupload__list li {
8361
+ margin: 0;
8362
+ padding: 0;
8363
+ }
8364
+
8365
+ /* File item */
8366
+ .muka-fileupload-item {
8367
+ display: flex;
8368
+ align-items: center;
8369
+ gap: var(--fileupload-item-gap);
8370
+ padding: var(--fileupload-item-padding-y) var(--fileupload-item-padding-x);
8371
+ background-color: var(--fileupload-item-color-default-background);
8372
+ border-radius: var(--fileupload-item-radius);
8373
+ }
8374
+
8375
+ .muka-fileupload-item--error {
8376
+ background-color: var(--fileupload-item-color-error-background);
8377
+ }
8378
+
8379
+ .muka-fileupload-item--success {
8380
+ background-color: var(--fileupload-item-color-default-background);
8381
+ }
8382
+
8383
+ /* Preview/Icon container */
8384
+ .muka-fileupload-item__preview {
8385
+ display: flex;
8386
+ align-items: center;
8387
+ justify-content: center;
8388
+ flex-shrink: 0;
8389
+ width: var(--fileupload-preview-size);
8390
+ height: var(--fileupload-preview-size);
8391
+ border-radius: var(--fileupload-preview-radius);
8392
+ overflow: hidden;
8393
+ background-color: var(--color-surface-level1);
8394
+ }
8395
+
8396
+ .muka-fileupload-item__thumbnail {
8397
+ width: 100%;
8398
+ height: 100%;
8399
+ object-fit: cover;
8400
+ }
8401
+
8402
+ .muka-fileupload-item__icon {
8403
+ color: var(--color-text-subtle-default);
8404
+ }
8405
+
8406
+ /* File info */
8407
+ .muka-fileupload-item__info {
8408
+ flex: 1;
8409
+ min-width: 0;
8410
+ display: flex;
8411
+ flex-direction: column;
8412
+ gap: var(--spacing-1);
8413
+ }
8414
+
8415
+ .muka-fileupload-item__name {
8416
+ font-family: var(--text-body-sm-medium-fontFamily);
8417
+ font-size: var(--text-body-sm-medium-fontSize);
8418
+ font-weight: var(--text-body-sm-medium-fontWeight);
8419
+ line-height: var(--text-body-sm-medium-lineHeight);
8420
+ color: var(--fileupload-item-color-default-foreground);
8421
+ white-space: nowrap;
8422
+ overflow: hidden;
8423
+ text-overflow: ellipsis;
8424
+ }
8425
+
8426
+ .muka-fileupload-item--error .muka-fileupload-item__name {
8427
+ color: var(--fileupload-item-color-error-foreground);
8428
+ }
8429
+
8430
+ .muka-fileupload-item__meta {
8431
+ font-family: var(--text-label-sm-regular-fontFamily);
8432
+ font-size: var(--text-label-sm-regular-fontSize);
8433
+ font-weight: var(--text-label-sm-regular-fontWeight);
8434
+ line-height: var(--text-label-sm-regular-lineHeight);
8435
+ color: var(--color-text-subtle-default);
8436
+ }
8437
+
8438
+ .muka-fileupload-item__error {
8439
+ color: var(--fileupload-item-color-error-foreground);
8440
+ }
8441
+
8442
+ .muka-fileupload-item__progress {
8443
+ margin-top: var(--spacing-1);
8444
+ }
8445
+
8446
+ /* Actions */
8447
+ .muka-fileupload-item__actions {
8448
+ display: flex;
8449
+ align-items: center;
8450
+ gap: var(--spacing-2);
8451
+ flex-shrink: 0;
8452
+ }
8453
+
8454
+ .muka-fileupload-item__status-icon--success {
8455
+ color: var(--color-state-success-foreground);
8456
+ }
8457
+
8458
+ .muka-fileupload-item__status-icon--error {
8459
+ color: var(--color-state-error-foreground);
8460
+ }
8461
+
8462
+ .muka-fileupload-item__remove {
8463
+ opacity: 0.7;
8464
+ }
8465
+
8466
+ .muka-fileupload-item__remove:hover {
8467
+ opacity: 1;
8468
+ }
8469
+
8470
+
8471
+ /* FAB */
8472
+ /* FAB (Floating Action Button) Component Styles */
8473
+
8474
+ .muka-fab {
8475
+ position: fixed;
8476
+ z-index: 40;
8477
+
8478
+ display: inline-flex;
8479
+ align-items: center;
8480
+ justify-content: center;
8481
+ gap: var(--spacing-2);
8482
+
8483
+ border: none;
8484
+ cursor: pointer;
8485
+ font-family: inherit;
8486
+ box-shadow: var(--shadow-level4);
8487
+
8488
+ transition: transform 0.12s ease, box-shadow 0.12s ease, background-color 0.12s ease;
8489
+ -webkit-tap-highlight-color: transparent;
8490
+ }
8491
+
8492
+ .muka-fab:active {
8493
+ transform: scale(0.96);
8494
+ box-shadow: var(--shadow-level3);
8495
+ }
8496
+
8497
+ .muka-fab:focus-visible {
8498
+ outline: 2px solid var(--color-action-default);
8499
+ outline-offset: 2px;
8500
+ }
8501
+
8502
+ .muka-fab:disabled {
8503
+ opacity: 0.5;
8504
+ cursor: not-allowed;
8505
+ box-shadow: none;
8506
+ }
8507
+
8508
+ /* ─── Variants ────────────────────────────────────────── */
8509
+
8510
+ .muka-fab--primary {
8511
+ background-color: var(--color-action-default);
8512
+ color: var(--color-text-inverse-default);
8513
+ }
8514
+
8515
+ .muka-fab--primary:hover:not(:disabled) {
8516
+ background-color: var(--color-action-hover);
8517
+ }
8518
+
8519
+ .muka-fab--secondary {
8520
+ background-color: var(--color-surface-level3);
8521
+ color: var(--color-text-default-default);
8522
+ }
8523
+
8524
+ .muka-fab--secondary:hover:not(:disabled) {
8525
+ background-color: var(--color-surface-level2);
8526
+ }
8527
+
8528
+ /* ─── Sizes (circular by default) ─────────────────────── */
8529
+
8530
+ .muka-fab--md {
8531
+ width: 56px;
8532
+ height: 56px;
8533
+ border-radius: 50%;
8534
+ }
8535
+
8536
+ .muka-fab--lg {
8537
+ width: 64px;
8538
+ height: 64px;
8539
+ border-radius: 50%;
8540
+ }
8541
+
8542
+ /* ─── Extended (pill shape with label) ────────────────── */
8543
+
8544
+ .muka-fab--extended {
8545
+ width: auto;
8546
+ height: auto;
8547
+ padding: var(--spacing-3) var(--spacing-4);
8548
+ border-radius: var(--radius-full);
8549
+ }
8550
+
8551
+ .muka-fab--extended.muka-fab--lg {
8552
+ padding: var(--spacing-4) var(--spacing-5);
8553
+ }
8554
+
8555
+ .muka-fab__icon {
8556
+ display: inline-flex;
8557
+ align-items: center;
8558
+ justify-content: center;
8559
+ width: 24px;
8560
+ height: 24px;
8561
+ }
8562
+
8563
+ .muka-fab__icon svg {
8564
+ width: 100%;
8565
+ height: 100%;
8566
+ }
8567
+
8568
+ .muka-fab__label {
8569
+ font-family: var(--text-label-md-semibold-fontFamily);
8570
+ font-weight: var(--text-label-md-semibold-fontWeight);
8571
+ font-size: var(--text-label-md-semibold-fontSize);
8572
+ line-height: var(--text-label-md-semibold-lineHeight);
8573
+ }
8574
+
8575
+ /* ─── Positioning ─────────────────────────────────────── */
8576
+
8577
+ .muka-fab--bottom-right {
8578
+ right: var(--spacing-4);
8579
+ bottom: var(--spacing-4);
8580
+ }
8581
+
8582
+ .muka-fab--bottom-left {
8583
+ left: var(--spacing-4);
8584
+ bottom: var(--spacing-4);
8585
+ }
8586
+
8587
+ .muka-fab--bottom-center {
8588
+ left: 50%;
8589
+ bottom: var(--spacing-4);
8590
+ transform: translateX(-50%);
8591
+ }
8592
+
8593
+ .muka-fab--bottom-center:active {
8594
+ transform: translateX(-50%) scale(0.96);
8595
+ }
8596
+
8597
+ /* Add the iOS home-indicator inset to the bottom offset. */
8598
+ .muka-fab:not(.muka-fab--no-safe-area) {
8599
+ bottom: calc(var(--spacing-4) + env(safe-area-inset-bottom));
8600
+ }
8601
+
8602
+ /* Lateral safe-area for landscape iPhone with notch. */
8603
+ .muka-fab--bottom-right:not(.muka-fab--no-safe-area) {
8604
+ right: max(var(--spacing-4), env(safe-area-inset-right));
8605
+ }
8606
+
8607
+ .muka-fab--bottom-left:not(.muka-fab--no-safe-area) {
8608
+ left: max(var(--spacing-4), env(safe-area-inset-left));
8288
8609
  }
8289
8610
 
8290
8611
 
@@ -8429,164 +8750,8 @@ li.muka-listitem {
8429
8750
  }
8430
8751
 
8431
8752
 
8432
- /* Drawer */
8433
- /* Drawer Component Styles */
8434
-
8435
- /* Size tokens (local to Drawer) */
8436
- .muka-drawer {
8437
- --drawer-width-sm: 18rem;
8438
- --drawer-width-md: 26rem;
8439
- --drawer-width-lg: 36rem;
8440
- }
8441
-
8442
- /* Reset native dialog */
8443
- .muka-drawer {
8444
- border: none;
8445
- padding: 0;
8446
- max-width: none;
8447
- max-height: none;
8448
- background: transparent;
8449
- overflow: visible;
8450
- }
8451
-
8452
- /* Backdrop */
8453
- .muka-drawer::backdrop {
8454
- background-color: var(--color-surface-backdrop);
8455
- opacity: 0;
8456
- transition: opacity 200ms ease;
8457
- }
8458
-
8459
- .muka-drawer--slide-in::backdrop {
8460
- opacity: 1;
8461
- }
8462
-
8463
- /* Surface */
8464
- .muka-drawer__surface {
8465
- display: flex;
8466
- flex-direction: column;
8467
- background-color: var(--color-surface-level3);
8468
- box-shadow: var(--shadow-level5);
8469
- height: 100%;
8470
- overflow: hidden;
8471
- position: fixed;
8472
- transition: transform 200ms cubic-bezier(0.16, 1, 0.3, 1);
8473
- }
8474
-
8475
- /* Side positioning + initial transforms */
8476
- .muka-drawer--right .muka-drawer__surface {
8477
- top: 0;
8478
- right: 0;
8479
- bottom: 0;
8480
- border-radius: var(--radius-lg) 0 0 var(--radius-lg);
8481
- transform: translateX(100%);
8482
- }
8483
-
8484
- .muka-drawer--left .muka-drawer__surface {
8485
- top: 0;
8486
- left: 0;
8487
- bottom: 0;
8488
- border-radius: 0 var(--radius-lg) var(--radius-lg) 0;
8489
- transform: translateX(-100%);
8490
- }
8491
-
8492
- .muka-drawer--bottom .muka-drawer__surface {
8493
- left: 0;
8494
- right: 0;
8495
- bottom: 0;
8496
- border-radius: var(--radius-lg) var(--radius-lg) 0 0;
8497
- transform: translateY(100%);
8498
- }
8499
-
8500
- .muka-drawer--top .muka-drawer__surface {
8501
- left: 0;
8502
- right: 0;
8503
- top: 0;
8504
- border-radius: 0 0 var(--radius-lg) var(--radius-lg);
8505
- transform: translateY(-100%);
8506
- }
8507
-
8508
- /* Slide-in state */
8509
- .muka-drawer--slide-in .muka-drawer__surface {
8510
- transform: translate(0, 0);
8511
- }
8512
-
8513
- /* Width sizes (left/right) */
8514
- .muka-drawer--right .muka-drawer__surface,
8515
- .muka-drawer--left .muka-drawer__surface {
8516
- width: var(--drawer-width-md);
8517
- }
8518
-
8519
- .muka-drawer--sm.muka-drawer--right .muka-drawer__surface,
8520
- .muka-drawer--sm.muka-drawer--left .muka-drawer__surface {
8521
- width: var(--drawer-width-sm);
8522
- }
8523
-
8524
- .muka-drawer--lg.muka-drawer--right .muka-drawer__surface,
8525
- .muka-drawer--lg.muka-drawer--left .muka-drawer__surface {
8526
- width: var(--drawer-width-lg);
8527
- }
8528
-
8529
- .muka-drawer--full.muka-drawer--right .muka-drawer__surface,
8530
- .muka-drawer--full.muka-drawer--left .muka-drawer__surface {
8531
- width: 100%;
8532
- }
8533
-
8534
- /* Height sizes (top/bottom) */
8535
- .muka-drawer--top .muka-drawer__surface,
8536
- .muka-drawer--bottom .muka-drawer__surface {
8537
- height: auto;
8538
- max-height: 80vh;
8539
- }
8540
-
8541
- .muka-drawer--full.muka-drawer--top .muka-drawer__surface,
8542
- .muka-drawer--full.muka-drawer--bottom .muka-drawer__surface {
8543
- max-height: 100vh;
8544
- }
8545
-
8546
- /* Header */
8547
- .muka-drawer__header {
8548
- display: flex;
8549
- align-items: center;
8550
- gap: var(--spacing-3);
8551
- padding: var(--spacing-4);
8552
- border-bottom: var(--border-width-regular) solid var(--color-border-default);
8553
- flex-shrink: 0;
8554
- }
8555
-
8556
- .muka-drawer__title {
8557
- flex: 1;
8558
- margin: 0;
8559
- font-family: var(--text-label-lg-semibold-fontFamily);
8560
- font-weight: var(--text-label-lg-semibold-fontWeight);
8561
- font-size: var(--text-label-lg-semibold-fontSize);
8562
- line-height: var(--text-label-lg-semibold-lineHeight);
8563
- color: var(--color-text-default-default);
8564
- }
8565
-
8566
- .muka-drawer__leading,
8567
- .muka-drawer__trailing {
8568
- display: flex;
8569
- align-items: center;
8570
- flex-shrink: 0;
8571
- }
8572
-
8573
- /* Body */
8574
- .muka-drawer__body {
8575
- flex: 1;
8576
- overflow-y: auto;
8577
- padding: var(--spacing-4);
8578
- }
8579
-
8580
- /* Footer */
8581
- .muka-drawer__footer {
8582
- padding: var(--spacing-4);
8583
- border-top: var(--border-width-regular) solid var(--color-border-default);
8584
- flex-shrink: 0;
8585
- }
8586
-
8587
-
8588
- /* DocumentViewer */
8589
- /* DocumentViewer Component Styles - Using Muka Design Tokens */
8753
+ /* DocumentViewer */
8754
+ /* DocumentViewer Component Styles - Using Muka Design Tokens */
8590
8755
 
8591
8756
  .muka-documentviewer {
8592
8757
  display: flex;
@@ -8864,100 +9029,229 @@ li.muka-listitem {
8864
9029
  }
8865
9030
 
8866
9031
 
8867
- /* Divider */
8868
- /* Divider Component Styles - Using Muka Design Tokens */
8869
-
8870
- .muka-divider {
8871
- flex-shrink: 0;
8872
- }
8873
-
8874
- .muka-divider--horizontal {
8875
- width: 100%;
8876
- height: var(--separator-width);
8877
- }
8878
-
8879
- .muka-divider--vertical {
8880
- height: 100%;
8881
- width: var(--separator-width);
8882
- align-self: stretch;
8883
- }
8884
-
8885
- .muka-divider--default {
8886
- background-color: var(--separator-color-default);
8887
- }
9032
+ /* Drawer */
9033
+ /* Drawer Component Styles */
8888
9034
 
8889
- .muka-divider--contrast {
8890
- background-color: var(--separator-color-contrast);
9035
+ /* Size tokens (local to Drawer) */
9036
+ .muka-drawer {
9037
+ --drawer-width-sm: 18rem;
9038
+ --drawer-width-md: 26rem;
9039
+ --drawer-width-lg: 36rem;
8891
9040
  }
8892
9041
 
8893
-
8894
- /* Dialog */
8895
- /* Dialog Component Styles */
8896
-
8897
- /* ─── Native dialog reset ─────────────────────────────── */
8898
-
8899
- .muka-dialog {
9042
+ /* Reset native dialog */
9043
+ .muka-drawer {
8900
9044
  border: none;
8901
9045
  padding: 0;
8902
9046
  max-width: none;
8903
9047
  max-height: none;
8904
- overflow: visible;
8905
9048
  background: transparent;
8906
- color: inherit;
8907
- box-shadow: none;
8908
- }
8909
-
8910
- .muka-dialog:not([open]) {
8911
- display: none;
8912
- }
8913
-
8914
- /* ─── Backdrop ────────────────────────────────────────── */
8915
-
8916
- .muka-dialog::backdrop {
8917
- background-color: var(--dialog-color-backdrop);
8918
- }
8919
-
8920
- /* ─── Non-modal modifier ──────────────────────────────── */
8921
-
8922
- .muka-dialog--non-modal::backdrop {
8923
- pointer-events: auto;
9049
+ overflow: visible;
8924
9050
  }
8925
9051
 
8926
- /* ─── Mobile: all sizes bottom-attached (< 1024px) ───── */
8927
-
8928
- .muka-dialog--sm,
8929
- .muka-dialog--md,
8930
- .muka-dialog--lg {
8931
- width: 100%;
8932
- height: 100%;
8933
- max-width: 100vw;
8934
- max-height: 100vh;
8935
- margin: 0;
8936
- display: flex;
8937
- flex-direction: column;
8938
- justify-content: flex-end;
8939
- align-items: stretch;
9052
+ /* Backdrop */
9053
+ .muka-drawer::backdrop {
9054
+ background-color: var(--color-surface-backdrop);
9055
+ opacity: 0;
9056
+ transition: opacity 200ms ease;
8940
9057
  }
8941
9058
 
8942
- .muka-dialog__surface:focus {
8943
- outline: none;
9059
+ .muka-drawer--slide-in::backdrop {
9060
+ opacity: 1;
8944
9061
  }
8945
9062
 
8946
- .muka-dialog--sm .muka-dialog__surface,
8947
- .muka-dialog--md .muka-dialog__surface,
8948
- .muka-dialog--lg .muka-dialog__surface {
8949
- background-color: var(--dialog-color-background);
8950
- border-radius: var(--dialog-border-radius) var(--dialog-border-radius) 0 0;
8951
- box-shadow: var(--dialog-shadow-default);
9063
+ /* Surface */
9064
+ .muka-drawer__surface {
8952
9065
  display: flex;
8953
9066
  flex-direction: column;
9067
+ background-color: var(--color-surface-level3);
9068
+ box-shadow: var(--shadow-level5);
9069
+ height: 100%;
8954
9070
  overflow: hidden;
8955
- min-height: var(--dialog-min-height-mobile);
9071
+ position: fixed;
9072
+ transition: transform 200ms cubic-bezier(0.16, 1, 0.3, 1);
8956
9073
  }
8957
9074
 
8958
- /* Mobile per-size heights */
8959
- .muka-dialog--sm .muka-dialog__surface {
8960
- height: var(--dialog-height-mobile-sm);
9075
+ /* Side positioning + initial transforms */
9076
+ .muka-drawer--right .muka-drawer__surface {
9077
+ top: 0;
9078
+ right: 0;
9079
+ bottom: 0;
9080
+ border-radius: var(--radius-lg) 0 0 var(--radius-lg);
9081
+ transform: translateX(100%);
9082
+ }
9083
+
9084
+ .muka-drawer--left .muka-drawer__surface {
9085
+ top: 0;
9086
+ left: 0;
9087
+ bottom: 0;
9088
+ border-radius: 0 var(--radius-lg) var(--radius-lg) 0;
9089
+ transform: translateX(-100%);
9090
+ }
9091
+
9092
+ .muka-drawer--bottom .muka-drawer__surface {
9093
+ left: 0;
9094
+ right: 0;
9095
+ bottom: 0;
9096
+ border-radius: var(--radius-lg) var(--radius-lg) 0 0;
9097
+ transform: translateY(100%);
9098
+ }
9099
+
9100
+ .muka-drawer--top .muka-drawer__surface {
9101
+ left: 0;
9102
+ right: 0;
9103
+ top: 0;
9104
+ border-radius: 0 0 var(--radius-lg) var(--radius-lg);
9105
+ transform: translateY(-100%);
9106
+ }
9107
+
9108
+ /* Slide-in state */
9109
+ .muka-drawer--slide-in .muka-drawer__surface {
9110
+ transform: translate(0, 0);
9111
+ }
9112
+
9113
+ /* Width sizes (left/right) */
9114
+ .muka-drawer--right .muka-drawer__surface,
9115
+ .muka-drawer--left .muka-drawer__surface {
9116
+ width: var(--drawer-width-md);
9117
+ }
9118
+
9119
+ .muka-drawer--sm.muka-drawer--right .muka-drawer__surface,
9120
+ .muka-drawer--sm.muka-drawer--left .muka-drawer__surface {
9121
+ width: var(--drawer-width-sm);
9122
+ }
9123
+
9124
+ .muka-drawer--lg.muka-drawer--right .muka-drawer__surface,
9125
+ .muka-drawer--lg.muka-drawer--left .muka-drawer__surface {
9126
+ width: var(--drawer-width-lg);
9127
+ }
9128
+
9129
+ .muka-drawer--full.muka-drawer--right .muka-drawer__surface,
9130
+ .muka-drawer--full.muka-drawer--left .muka-drawer__surface {
9131
+ width: 100%;
9132
+ }
9133
+
9134
+ /* Height sizes (top/bottom) */
9135
+ .muka-drawer--top .muka-drawer__surface,
9136
+ .muka-drawer--bottom .muka-drawer__surface {
9137
+ height: auto;
9138
+ max-height: 80vh;
9139
+ }
9140
+
9141
+ .muka-drawer--full.muka-drawer--top .muka-drawer__surface,
9142
+ .muka-drawer--full.muka-drawer--bottom .muka-drawer__surface {
9143
+ max-height: 100vh;
9144
+ }
9145
+
9146
+ /* Header */
9147
+ .muka-drawer__header {
9148
+ display: flex;
9149
+ align-items: center;
9150
+ gap: var(--spacing-3);
9151
+ padding: var(--spacing-4);
9152
+ border-bottom: var(--border-width-regular) solid var(--color-border-default);
9153
+ flex-shrink: 0;
9154
+ }
9155
+
9156
+ .muka-drawer__title {
9157
+ flex: 1;
9158
+ margin: 0;
9159
+ font-family: var(--text-label-lg-semibold-fontFamily);
9160
+ font-weight: var(--text-label-lg-semibold-fontWeight);
9161
+ font-size: var(--text-label-lg-semibold-fontSize);
9162
+ line-height: var(--text-label-lg-semibold-lineHeight);
9163
+ color: var(--color-text-default-default);
9164
+ }
9165
+
9166
+ .muka-drawer__leading,
9167
+ .muka-drawer__trailing {
9168
+ display: flex;
9169
+ align-items: center;
9170
+ flex-shrink: 0;
9171
+ }
9172
+
9173
+ /* Body */
9174
+ .muka-drawer__body {
9175
+ flex: 1;
9176
+ overflow-y: auto;
9177
+ padding: var(--spacing-4);
9178
+ }
9179
+
9180
+ /* Footer */
9181
+ .muka-drawer__footer {
9182
+ padding: var(--spacing-4);
9183
+ border-top: var(--border-width-regular) solid var(--color-border-default);
9184
+ flex-shrink: 0;
9185
+ }
9186
+
9187
+
9188
+ /* Dialog */
9189
+ /* Dialog Component Styles */
9190
+
9191
+ /* ─── Native dialog reset ─────────────────────────────── */
9192
+
9193
+ .muka-dialog {
9194
+ border: none;
9195
+ padding: 0;
9196
+ max-width: none;
9197
+ max-height: none;
9198
+ overflow: visible;
9199
+ background: transparent;
9200
+ color: inherit;
9201
+ box-shadow: none;
9202
+ }
9203
+
9204
+ .muka-dialog:not([open]) {
9205
+ display: none;
9206
+ }
9207
+
9208
+ /* ─── Backdrop ────────────────────────────────────────── */
9209
+
9210
+ .muka-dialog::backdrop {
9211
+ background-color: var(--dialog-color-backdrop);
9212
+ }
9213
+
9214
+ /* ─── Non-modal modifier ──────────────────────────────── */
9215
+
9216
+ .muka-dialog--non-modal::backdrop {
9217
+ pointer-events: auto;
9218
+ }
9219
+
9220
+ /* ─── Mobile: all sizes bottom-attached (< 1024px) ───── */
9221
+
9222
+ .muka-dialog--sm,
9223
+ .muka-dialog--md,
9224
+ .muka-dialog--lg {
9225
+ width: 100%;
9226
+ height: 100%;
9227
+ max-width: 100vw;
9228
+ max-height: 100vh;
9229
+ margin: 0;
9230
+ display: flex;
9231
+ flex-direction: column;
9232
+ justify-content: flex-end;
9233
+ align-items: stretch;
9234
+ }
9235
+
9236
+ .muka-dialog__surface:focus {
9237
+ outline: none;
9238
+ }
9239
+
9240
+ .muka-dialog--sm .muka-dialog__surface,
9241
+ .muka-dialog--md .muka-dialog__surface,
9242
+ .muka-dialog--lg .muka-dialog__surface {
9243
+ background-color: var(--dialog-color-background);
9244
+ border-radius: var(--dialog-border-radius) var(--dialog-border-radius) 0 0;
9245
+ box-shadow: var(--dialog-shadow-default);
9246
+ display: flex;
9247
+ flex-direction: column;
9248
+ overflow: hidden;
9249
+ min-height: var(--dialog-min-height-mobile);
9250
+ }
9251
+
9252
+ /* Mobile per-size heights */
9253
+ .muka-dialog--sm .muka-dialog__surface {
9254
+ height: var(--dialog-height-mobile-sm);
8961
9255
  }
8962
9256
 
8963
9257
  .muka-dialog--md .muka-dialog__surface {
@@ -10182,6 +10476,33 @@ li.muka-listitem {
10182
10476
  }
10183
10477
 
10184
10478
 
10479
+ /* Divider */
10480
+ /* Divider Component Styles - Using Muka Design Tokens */
10481
+
10482
+ .muka-divider {
10483
+ flex-shrink: 0;
10484
+ }
10485
+
10486
+ .muka-divider--horizontal {
10487
+ width: 100%;
10488
+ height: var(--separator-width);
10489
+ }
10490
+
10491
+ .muka-divider--vertical {
10492
+ height: 100%;
10493
+ width: var(--separator-width);
10494
+ align-self: stretch;
10495
+ }
10496
+
10497
+ .muka-divider--default {
10498
+ background-color: var(--separator-color-default);
10499
+ }
10500
+
10501
+ .muka-divider--contrast {
10502
+ background-color: var(--separator-color-contrast);
10503
+ }
10504
+
10505
+
10185
10506
  /* CheckboxTile */
10186
10507
  /* CheckboxTile Component Styles - Using Muka Design Tokens */
10187
10508
 
@@ -10507,62 +10828,198 @@ li.muka-listitem {
10507
10828
  }
10508
10829
 
10509
10830
 
10510
- /* ChatMessageList */
10511
- /* ChatMessageList Component Styles */
10512
-
10513
- .muka-chat-message-list {
10514
- flex: 1 1 auto;
10515
- min-height: 0;
10516
- width: 100%;
10517
- overflow-x: clip;
10518
- overflow-y: auto;
10519
- background-color: var(--color-surface-level3);
10520
- padding: var(--section-padding-vertical-default, var(--spacing-8))
10521
- var(--section-padding-horizontal-default, var(--spacing-4));
10522
- -webkit-overflow-scrolling: touch;
10523
- overscroll-behavior: contain;
10524
- }
10831
+ /* ChatPhotoGrid */
10832
+ /* ChatPhotoGrid Component Styles */
10525
10833
 
10526
- .muka-chat-message-list__inner {
10527
- display: flex;
10528
- flex-direction: column;
10529
- align-items: stretch;
10530
- gap: var(--spacing-8);
10834
+ .muka-chat-photo-grid {
10835
+ display: grid;
10836
+ gap: var(--chatphotogrid-gap);
10531
10837
  width: 100%;
10532
- max-width: 640px;
10533
- margin: 0 auto;
10838
+ min-width: 0;
10534
10839
  }
10535
10840
 
10841
+ /* ─── Tiles ────────────────────────────────────────────── */
10536
10842
 
10537
- /* ChatComposer */
10538
- /* ChatComposer Component Styles */
10539
-
10540
- .muka-chat-composer {
10541
- display: flex;
10542
- flex-direction: column;
10543
- gap: var(--spacing-3);
10544
- width: 100%;
10545
- max-width: 768px;
10843
+ .muka-chat-photo-grid__tile {
10844
+ position: relative;
10845
+ display: block;
10846
+ overflow: hidden;
10847
+ min-width: 0;
10848
+ padding: 0;
10849
+ margin: 0;
10850
+ border: none;
10851
+ border-radius: var(--chatphotogrid-radius);
10852
+ background-color: var(--chatphotogrid-color-placeholder);
10853
+ aspect-ratio: 1 / 1;
10546
10854
  }
10547
10855
 
10548
- .muka-chat-composer--disabled {
10549
- opacity: 0.6;
10550
- pointer-events: none;
10856
+ button.muka-chat-photo-grid__tile {
10857
+ cursor: pointer;
10858
+ appearance: none;
10551
10859
  }
10552
10860
 
10553
- /* ─── Input row ────────────────────────────────────────── */
10861
+ button.muka-chat-photo-grid__tile:focus-visible {
10862
+ outline: var(--border-width-bold) solid var(--color-border-focus);
10863
+ outline-offset: var(--spacing-1);
10864
+ }
10554
10865
 
10555
- .muka-chat-composer__row {
10556
- display: flex;
10866
+ .muka-chat-photo-grid__image {
10867
+ display: block;
10557
10868
  width: 100%;
10558
- align-items: flex-end;
10559
- gap: var(--spacing-3);
10869
+ height: 100%;
10870
+ object-fit: cover;
10560
10871
  }
10561
10872
 
10562
- /* ─── Text field ───────────────────────────────────────── */
10873
+ /* ─── Overflow tile ────────────────────────────────────── */
10563
10874
 
10564
- .muka-chat-composer__field {
10565
- display: flex;
10875
+ .muka-chat-photo-grid__overflow {
10876
+ position: absolute;
10877
+ inset: 0;
10878
+ display: flex;
10879
+ align-items: center;
10880
+ justify-content: center;
10881
+ background-color: var(--chatphotogrid-color-overflow-background);
10882
+ color: var(--chatphotogrid-color-overflow-foreground);
10883
+ font-family: var(--text-body-2xl-regular-fontFamily);
10884
+ font-weight: var(--text-body-2xl-regular-fontWeight);
10885
+ font-size: var(--text-body-2xl-regular-fontSize);
10886
+ line-height: var(--text-body-2xl-regular-lineHeight);
10887
+ }
10888
+
10889
+ /* ─── Layouts ──────────────────────────────────────────── */
10890
+
10891
+ .muka-chat-photo-grid--1 {
10892
+ grid-template-columns: 1fr;
10893
+ }
10894
+
10895
+ .muka-chat-photo-grid--landscape .muka-chat-photo-grid__tile {
10896
+ aspect-ratio: 4 / 3;
10897
+ }
10898
+
10899
+ .muka-chat-photo-grid--portrait .muka-chat-photo-grid__tile {
10900
+ aspect-ratio: 3 / 4;
10901
+ }
10902
+
10903
+ .muka-chat-photo-grid--2 {
10904
+ grid-template-columns: repeat(2, 1fr);
10905
+ }
10906
+
10907
+ .muka-chat-photo-grid--3 {
10908
+ grid-template-columns: repeat(3, 1fr);
10909
+ }
10910
+
10911
+ .muka-chat-photo-grid--4 {
10912
+ grid-template-columns: repeat(2, 1fr);
10913
+ }
10914
+
10915
+ /* 5 photos: a 2-up row above a 3-up row, on a shared 6-column track */
10916
+ .muka-chat-photo-grid--5 {
10917
+ grid-template-columns: repeat(6, 1fr);
10918
+ }
10919
+
10920
+ .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(-n + 2) {
10921
+ grid-column: span 3;
10922
+ }
10923
+
10924
+ .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(n + 3) {
10925
+ grid-column: span 2;
10926
+ }
10927
+
10928
+ .muka-chat-photo-grid--6,
10929
+ .muka-chat-photo-grid--overflow {
10930
+ grid-template-columns: repeat(3, 1fr);
10931
+ }
10932
+
10933
+ /* ─── Print ────────────────────────────────────────────── */
10934
+
10935
+ @media print {
10936
+ .muka-chat-photo-grid {
10937
+ break-inside: avoid;
10938
+ }
10939
+
10940
+ .muka-chat-photo-grid__image {
10941
+ print-color-adjust: exact;
10942
+ -webkit-print-color-adjust: exact;
10943
+ }
10944
+ }
10945
+
10946
+
10947
+ /* ChatMessageList */
10948
+ /* ChatMessageList Component Styles */
10949
+
10950
+ .muka-chat-message-list {
10951
+ flex: 1 1 auto;
10952
+ min-height: 0;
10953
+ width: 100%;
10954
+ overflow-x: clip;
10955
+ overflow-y: auto;
10956
+ background-color: var(--color-surface-level3);
10957
+ padding: var(--section-padding-vertical-default, var(--spacing-8))
10958
+ var(--section-padding-horizontal-default, var(--spacing-4));
10959
+ -webkit-overflow-scrolling: touch;
10960
+ overscroll-behavior: contain;
10961
+ }
10962
+
10963
+ .muka-chat-message-list__inner {
10964
+ display: flex;
10965
+ flex-direction: column;
10966
+ align-items: stretch;
10967
+ gap: var(--spacing-8);
10968
+ width: 100%;
10969
+ max-width: var(--container-max-width-sm);
10970
+ margin: 0 auto;
10971
+ }
10972
+
10973
+ /* ─── Print ────────────────────────────────────────────── */
10974
+
10975
+ @media print {
10976
+ .muka-chat-message-list {
10977
+ overflow: visible;
10978
+ height: auto;
10979
+ max-height: none;
10980
+ background: none;
10981
+ padding: 0;
10982
+ }
10983
+
10984
+ .muka-chat-message-list__inner {
10985
+ max-width: 100%;
10986
+ }
10987
+ }
10988
+
10989
+
10990
+ /* ChatComposer */
10991
+ /* ChatComposer Component Styles */
10992
+
10993
+ /*
10994
+ * The composer is a bare, fill-width row: no padding, background, border or
10995
+ * max-width of its own (Figma 5243:14141). Whatever hosts it owns the
10996
+ * container — see BottomBar's `chat` variant.
10997
+ */
10998
+ .muka-chat-composer {
10999
+ display: flex;
11000
+ flex-direction: column;
11001
+ gap: var(--spacing-3);
11002
+ width: 100%;
11003
+ }
11004
+
11005
+ .muka-chat-composer--disabled {
11006
+ opacity: 0.6;
11007
+ pointer-events: none;
11008
+ }
11009
+
11010
+ /* ─── Input row ────────────────────────────────────────── */
11011
+
11012
+ .muka-chat-composer__row {
11013
+ display: flex;
11014
+ width: 100%;
11015
+ align-items: flex-end;
11016
+ gap: var(--spacing-3);
11017
+ }
11018
+
11019
+ /* ─── Text field ───────────────────────────────────────── */
11020
+
11021
+ .muka-chat-composer__field {
11022
+ display: flex;
10566
11023
  flex: 1 1 auto;
10567
11024
  min-width: 0;
10568
11025
  box-sizing: border-box;
@@ -10649,6 +11106,14 @@ li.muka-listitem {
10649
11106
  transform: translateY(-50%);
10650
11107
  }
10651
11108
 
11109
+ /* ─── Print ────────────────────────────────────────────── */
11110
+
11111
+ @media print {
11112
+ .muka-chat-composer {
11113
+ display: none;
11114
+ }
11115
+ }
11116
+
10652
11117
 
10653
11118
  /* ChatBubble */
10654
11119
  /* ChatBubble Component Styles */
@@ -10656,69 +11121,222 @@ li.muka-listitem {
10656
11121
  .muka-chat-bubble {
10657
11122
  display: flex;
10658
11123
  flex-direction: column;
10659
- gap: var(--spacing-1);
10660
11124
  width: 100%;
10661
11125
  max-width: 100%;
10662
11126
  }
10663
11127
 
10664
- /* ─── User variant — right-aligned bubble ──────────────── */
11128
+ /* ─── Row: avatar rail + bubble + action bar ───────────────
11129
+ *
11130
+ * A two-row grid rather than a flex column, so the avatar bottom-aligns to the
11131
+ * bubble itself and not to the action bar underneath it (Figma 5223:8520).
11132
+ */
10665
11133
 
10666
- .muka-chat-bubble--user {
10667
- align-items: flex-end;
11134
+ .muka-chat-bubble__row {
11135
+ display: grid;
11136
+ grid-template-columns: minmax(0, 1fr);
11137
+ grid-template-areas:
11138
+ 'bubble'
11139
+ 'actions';
11140
+ column-gap: var(--chatbubble-row-gap);
11141
+ row-gap: var(--chatbubble-gap);
11142
+ width: 100%;
10668
11143
  }
10669
11144
 
10670
- .muka-chat-bubble--user .muka-chat-bubble__message {
10671
- background-color: var(--color-surface-level2);
10672
- color: var(--color-text-default-default);
10673
- border-radius: var(--radius-lg);
10674
- padding: var(--spacing-4);
10675
- max-width: min(600px, 100%);
10676
- word-break: break-word;
11145
+ .muka-chat-bubble--has-avatar .muka-chat-bubble__row {
11146
+ grid-template-columns: auto minmax(0, 1fr);
11147
+ grid-template-areas:
11148
+ 'rail bubble'
11149
+ '. actions';
10677
11150
  }
10678
11151
 
10679
- .muka-chat-bubble--user .muka-chat-bubble__meta {
10680
- justify-content: flex-end;
11152
+ .muka-chat-bubble--own.muka-chat-bubble--has-avatar .muka-chat-bubble__row {
11153
+ grid-template-columns: minmax(0, 1fr) auto;
11154
+ grid-template-areas:
11155
+ 'bubble rail'
11156
+ 'actions .';
10681
11157
  }
10682
11158
 
10683
- /* ─── Agent variant — no bubble, full width ────────────── */
10684
-
10685
- .muka-chat-bubble--agent {
10686
- align-items: flex-start;
11159
+ .muka-chat-bubble__rail {
11160
+ grid-area: rail;
11161
+ /* Sits on the bubble's baseline, above the action bar */
11162
+ align-self: end;
11163
+ display: flex;
11164
+ justify-content: center;
11165
+ min-width: var(--chatbubble-avatar-size);
10687
11166
  }
10688
11167
 
10689
- .muka-chat-bubble--agent .muka-chat-bubble__message {
10690
- color: var(--color-text-default-default);
10691
- padding: 0 var(--spacing-2);
11168
+ /* ─── Bubble surface ───────────────────────────────────── */
11169
+
11170
+ .muka-chat-bubble__bubble {
11171
+ grid-area: bubble;
11172
+ max-width: var(--chatbubble-max-width);
11173
+ position: relative;
11174
+ display: flex;
11175
+ flex-direction: column;
11176
+ gap: var(--chatbubble-gap);
10692
11177
  width: 100%;
11178
+ padding: var(--chatbubble-padding);
11179
+ border-radius: var(--chatbubble-radius);
11180
+ border: var(--border-width-regular) solid transparent;
10693
11181
  word-break: break-word;
10694
11182
  }
10695
11183
 
10696
- .muka-chat-bubble--agent .muka-chat-bubble__meta {
10697
- justify-content: flex-start;
11184
+ .muka-chat-bubble--own .muka-chat-bubble__bubble,
11185
+ .muka-chat-bubble--own .muka-chat-bubble__actions {
11186
+ justify-self: end;
10698
11187
  }
10699
11188
 
10700
- /* ─── Message typography ───────────────────────────────── */
11189
+ .muka-chat-bubble--own .muka-chat-bubble__bubble {
11190
+ background-color: var(--chatbubble-color-own-background);
11191
+ border-color: var(--chatbubble-color-own-border);
11192
+ color: var(--chatbubble-color-own-foreground);
11193
+ /* Room for the inset timestamp in the bottom-right corner */
11194
+ padding-right: var(--spacing-6);
11195
+ }
11196
+
11197
+ .muka-chat-bubble--peer .muka-chat-bubble__bubble {
11198
+ background-color: var(--chatbubble-color-peer-background);
11199
+ border-color: var(--chatbubble-color-peer-border);
11200
+ color: var(--chatbubble-color-peer-foreground);
11201
+ box-shadow: var(--shadow-level2);
11202
+ }
11203
+
11204
+ .muka-chat-bubble--agent .muka-chat-bubble__bubble {
11205
+ background-color: var(--chatbubble-color-agent-background);
11206
+ border-color: var(--chatbubble-color-agent-border);
11207
+ color: var(--chatbubble-color-agent-foreground);
11208
+ }
11209
+
11210
+ /* ─── Header row (author · meta · time · badge) ────────── */
11211
+
11212
+ .muka-chat-bubble__header {
11213
+ display: flex;
11214
+ flex-flow: row wrap;
11215
+ align-items: center;
11216
+ gap: var(--chatbubble-row-gap);
11217
+ }
11218
+
11219
+ .muka-chat-bubble__author {
11220
+ font-family: var(--text-body-base-bold-fontFamily);
11221
+ font-weight: var(--text-body-base-bold-fontWeight);
11222
+ font-size: var(--text-body-base-bold-fontSize);
11223
+ line-height: var(--text-body-base-bold-lineHeight);
11224
+ }
11225
+
11226
+ .muka-chat-bubble__author-meta {
11227
+ /* Inherits the variant's body colour from the bubble */
11228
+ color: inherit;
11229
+ font-family: var(--text-body-base-regular-fontFamily);
11230
+ font-weight: var(--text-body-base-regular-fontWeight);
11231
+ font-size: var(--text-body-base-regular-fontSize);
11232
+ line-height: var(--text-body-base-regular-lineHeight);
11233
+ }
11234
+
11235
+ .muka-chat-bubble__badge {
11236
+ display: inline-flex;
11237
+ align-items: center;
11238
+ }
11239
+
11240
+ /*
11241
+ * Keep the first line of content clear of the absolutely positioned menu
11242
+ * button in the bubble's top-right corner.
11243
+ */
11244
+ .muka-chat-bubble--has-menu .muka-chat-bubble__header,
11245
+ .muka-chat-bubble--has-menu.muka-chat-bubble--no-header .muka-chat-bubble__message {
11246
+ padding-right: var(--spacing-6);
11247
+ }
11248
+
11249
+ /* ─── Body ─────────────────────────────────────────────── */
11250
+
11251
+ .muka-chat-bubble__body {
11252
+ display: flex;
11253
+ flex-direction: column;
11254
+ gap: var(--chatbubble-gap);
11255
+ min-width: 0;
11256
+ }
11257
+
11258
+ /* The agent balloon spaces its blocks further apart (Figma 5223:8520) */
11259
+ .muka-chat-bubble--agent .muka-chat-bubble__body {
11260
+ gap: var(--chatbubble-body-gap);
11261
+ }
11262
+
11263
+ .muka-chat-bubble__media {
11264
+ min-width: 0;
11265
+ }
10701
11266
 
10702
11267
  .muka-chat-bubble__message {
10703
11268
  font-family: var(--text-body-base-regular-fontFamily);
10704
11269
  font-weight: var(--text-body-base-regular-fontWeight);
10705
11270
  font-size: var(--text-body-base-regular-fontSize);
10706
11271
  line-height: var(--text-body-base-regular-lineHeight);
11272
+ white-space: pre-wrap;
11273
+ word-break: break-word;
11274
+ }
11275
+
11276
+ /* Empty message block should not add a gap of its own */
11277
+ .muka-chat-bubble__message:empty {
11278
+ display: none;
11279
+ }
11280
+
11281
+ /* ─── Embedded card ────────────────────────────────────── */
11282
+
11283
+ .muka-chat-bubble__embed {
11284
+ position: relative;
11285
+ display: flex;
11286
+ flex-direction: column;
11287
+ gap: var(--chatbubble-embed-gap);
11288
+ padding: var(--chatbubble-embed-padding);
11289
+ border-radius: var(--chatbubble-embed-radius);
11290
+ border: var(--border-width-regular) solid transparent;
11291
+ }
11292
+
11293
+ /*
11294
+ * The embed sits on the raised surface of its author's role, one step apart
11295
+ * from the bubble it is nested in, and reuses that role's border colour.
11296
+ */
11297
+ .muka-chat-bubble--own .muka-chat-bubble__embed {
11298
+ background-color: var(--chatbubble-embed-color-own-background);
11299
+ border-color: var(--chatbubble-embed-color-own-border);
11300
+ color: var(--chatbubble-embed-color-own-foreground);
11301
+ }
11302
+
11303
+ .muka-chat-bubble--peer .muka-chat-bubble__embed {
11304
+ background-color: var(--chatbubble-embed-color-peer-background);
11305
+ border-color: var(--chatbubble-embed-color-peer-border);
11306
+ color: var(--chatbubble-embed-color-peer-foreground);
10707
11307
  }
10708
11308
 
10709
- /* ─── Meta row (timestamp + actions) ───────────────────── */
11309
+ .muka-chat-bubble--agent .muka-chat-bubble__embed {
11310
+ background-color: var(--chatbubble-embed-color-agent-background);
11311
+ border-color: var(--chatbubble-embed-color-agent-border);
11312
+ color: var(--chatbubble-embed-color-agent-foreground);
11313
+ }
10710
11314
 
10711
- .muka-chat-bubble__meta {
11315
+ .muka-chat-bubble__embed-content {
10712
11316
  display: flex;
10713
- align-items: center;
10714
- gap: var(--spacing-1);
11317
+ flex-direction: column;
11318
+ gap: var(--chatbubble-embed-gap);
11319
+ min-width: 0;
11320
+ }
11321
+
11322
+ .muka-chat-bubble__embed-copy {
11323
+ position: absolute;
11324
+ top: var(--chatbubble-embed-padding);
11325
+ right: var(--chatbubble-embed-padding);
11326
+ }
11327
+
11328
+ /* ─── Stacked full-width action buttons ────────────────── */
11329
+
11330
+ .muka-chat-bubble__action-stack {
11331
+ display: flex;
11332
+ flex-direction: column;
11333
+ gap: var(--chatbubble-action-stack-gap);
10715
11334
  }
10716
11335
 
11336
+ /* ─── Inset timestamp (user variant) ───────────────────── */
11337
+
10717
11338
  .muka-chat-bubble__timestamp {
10718
- display: inline-flex;
10719
- align-items: center;
10720
- padding: 0 var(--spacing-2);
10721
- color: var(--color-text-subtle-default);
11339
+ color: var(--chatbubble-color-timestamp);
10722
11340
  font-family: var(--text-body-sm-regular-fontFamily);
10723
11341
  font-weight: var(--text-body-sm-regular-fontWeight);
10724
11342
  font-size: var(--text-body-sm-regular-fontSize);
@@ -10726,12 +11344,79 @@ li.muka-listitem {
10726
11344
  white-space: nowrap;
10727
11345
  }
10728
11346
 
11347
+ .muka-chat-bubble__timestamp--inset {
11348
+ align-self: flex-end;
11349
+ }
11350
+
11351
+ /* ─── Menu affordance ──────────────────────────────────── */
11352
+
11353
+ .muka-chat-bubble__menu {
11354
+ position: absolute;
11355
+ top: var(--spacing-1);
11356
+ right: var(--spacing-1);
11357
+ }
11358
+
11359
+ /* ─── Meta action row (below the bubble) ───────────────── */
11360
+
10729
11361
  .muka-chat-bubble__actions {
11362
+ grid-area: actions;
11363
+ max-width: var(--chatbubble-max-width);
10730
11364
  display: flex;
10731
11365
  align-items: center;
10732
11366
  gap: 0;
10733
11367
  }
10734
11368
 
11369
+ .muka-chat-bubble--own .muka-chat-bubble__actions,
11370
+ .muka-chat-bubble--agent .muka-chat-bubble__actions {
11371
+ justify-content: flex-end;
11372
+ }
11373
+
11374
+ /*
11375
+ * The meta row uses 32px icon buttons per the design. Expand the pointer/touch
11376
+ * target to the 44px WCAG 2.1 AA minimum without changing the visual size.
11377
+ */
11378
+ .muka-chat-bubble__actions .muka-button--icon-only {
11379
+ position: relative;
11380
+ }
11381
+
11382
+ .muka-chat-bubble__actions .muka-button--icon-only::after {
11383
+ content: '';
11384
+ position: absolute;
11385
+ top: 50%;
11386
+ left: 50%;
11387
+ width: 44px;
11388
+ height: 44px;
11389
+ transform: translate(-50%, -50%);
11390
+ }
11391
+
11392
+ /* ─── Print ────────────────────────────────────────────── */
11393
+
11394
+ @media print {
11395
+ .muka-chat-bubble__bubble {
11396
+ box-shadow: none;
11397
+ break-inside: avoid;
11398
+ print-color-adjust: exact;
11399
+ -webkit-print-color-adjust: exact;
11400
+ }
11401
+
11402
+ .muka-chat-bubble__embed {
11403
+ break-inside: avoid;
11404
+ print-color-adjust: exact;
11405
+ -webkit-print-color-adjust: exact;
11406
+ }
11407
+
11408
+ .muka-chat-bubble__menu,
11409
+ .muka-chat-bubble__actions,
11410
+ .muka-chat-bubble__embed-copy,
11411
+ .muka-chat-bubble__action-stack {
11412
+ display: none;
11413
+ }
11414
+
11415
+ .muka-chat-bubble__column {
11416
+ max-width: 100%;
11417
+ }
11418
+ }
11419
+
10735
11420
 
10736
11421
  /* ChatAttachmentChip */
10737
11422
  /* ChatAttachmentChip Component Styles */
@@ -11099,10 +11784,13 @@ li.muka-listitem {
11099
11784
  }
11100
11785
 
11101
11786
  /* `[data-state="open"]` keeps a Button pressed while it's an open disclosure
11102
- trigger (Radix Menu/Popover set this on the trigger). */
11787
+ trigger (Radix Menu/Popover set this on the trigger). `[aria-pressed="true"]`
11788
+ gives toggle buttons a visible selected state, so the toggle is not conveyed
11789
+ to sighted users by the accessibility tree alone. */
11103
11790
  .muka-button--primary:active:not(:disabled),
11104
11791
  .muka-button--primary.muka-button--pressed:not(:disabled),
11105
- .muka-button--primary[data-state="open"]:not(:disabled) {
11792
+ .muka-button--primary[data-state="open"]:not(:disabled),
11793
+ .muka-button--primary[aria-pressed="true"]:not(:disabled) {
11106
11794
  background-color: var(--button-color-primary-background-pressed);
11107
11795
  color: var(--button-color-primary-foreground-pressed);
11108
11796
  box-shadow: var(--button-color-primary-shadow-pressed);
@@ -11131,7 +11819,8 @@ li.muka-listitem {
11131
11819
 
11132
11820
  .muka-button--secondary:active:not(:disabled),
11133
11821
  .muka-button--secondary.muka-button--pressed:not(:disabled),
11134
- .muka-button--secondary[data-state="open"]:not(:disabled) {
11822
+ .muka-button--secondary[data-state="open"]:not(:disabled),
11823
+ .muka-button--secondary[aria-pressed="true"]:not(:disabled) {
11135
11824
  background-color: var(--button-color-secondary-background-pressed);
11136
11825
  color: var(--button-color-secondary-foreground-pressed);
11137
11826
  box-shadow: var(--button-color-secondary-shadow-pressed);
@@ -11160,7 +11849,8 @@ li.muka-listitem {
11160
11849
 
11161
11850
  .muka-button--tertiary:active:not(:disabled),
11162
11851
  .muka-button--tertiary.muka-button--pressed:not(:disabled),
11163
- .muka-button--tertiary[data-state="open"]:not(:disabled) {
11852
+ .muka-button--tertiary[data-state="open"]:not(:disabled),
11853
+ .muka-button--tertiary[aria-pressed="true"]:not(:disabled) {
11164
11854
  background-color: var(--button-color-tertiary-background-pressed);
11165
11855
  color: var(--button-color-tertiary-foreground-pressed);
11166
11856
  border-color: var(--button-color-tertiary-border-pressed);
@@ -11189,7 +11879,8 @@ li.muka-listitem {
11189
11879
 
11190
11880
  .muka-button--ghost:active:not(:disabled),
11191
11881
  .muka-button--ghost.muka-button--pressed:not(:disabled),
11192
- .muka-button--ghost[data-state="open"]:not(:disabled) {
11882
+ .muka-button--ghost[data-state="open"]:not(:disabled),
11883
+ .muka-button--ghost[aria-pressed="true"]:not(:disabled) {
11193
11884
  background-color: var(--button-color-ghost-background-pressed);
11194
11885
  color: var(--button-color-ghost-foreground-pressed);
11195
11886
  border-color: var(--button-color-ghost-border-pressed);
@@ -11218,7 +11909,8 @@ li.muka-listitem {
11218
11909
 
11219
11910
  .muka-button--muted:active:not(:disabled),
11220
11911
  .muka-button--muted.muka-button--pressed:not(:disabled),
11221
- .muka-button--muted[data-state="open"]:not(:disabled) {
11912
+ .muka-button--muted[data-state="open"]:not(:disabled),
11913
+ .muka-button--muted[aria-pressed="true"]:not(:disabled) {
11222
11914
  background-color: var(--button-color-muted-background-pressed);
11223
11915
  color: var(--button-color-muted-foreground-pressed);
11224
11916
  border-color: var(--button-color-muted-border-pressed);
@@ -11455,6 +12147,25 @@ li.muka-listitem {
11455
12147
  flex-direction: row;
11456
12148
  }
11457
12149
 
12150
+ /* ─── Chat variant (houses a ChatComposer) ───────────── */
12151
+
12152
+ .muka-bottombar--chat .muka-bottombar__content {
12153
+ flex-direction: row;
12154
+ max-width: var(--bottombar-chat-max-width);
12155
+ width: 100%;
12156
+ margin: 0 auto;
12157
+ }
12158
+
12159
+ /* Docked chat pads its content; the floating card supplies its own padding. */
12160
+ .muka-bottombar--chat:not(.muka-bottombar--floating) .muka-bottombar__content {
12161
+ padding: var(--bottombar-chat-padding);
12162
+ }
12163
+
12164
+ /* Floating chat card widens to the chat cap (overrides the md default below). */
12165
+ .muka-bottombar--chat.muka-bottombar--floating .muka-bottombar__content {
12166
+ max-width: var(--bottombar-chat-max-width);
12167
+ }
12168
+
11458
12169
  /* ─── Tab item ────────────────────────────────────────── */
11459
12170
 
11460
12171
  .muka-bottombar__tab {
@@ -11511,8 +12222,6 @@ li.muka-listitem {
11511
12222
  var(--bottombar-floating-backdrop-start),
11512
12223
  var(--bottombar-floating-backdrop-end)
11513
12224
  );
11514
- backdrop-filter: blur(var(--bottombar-floating-backdrop-blur));
11515
- -webkit-backdrop-filter: blur(var(--bottombar-floating-backdrop-blur));
11516
12225
  padding: var(--bottombar-floating-padding-top) var(--bottombar-floating-margin-x) var(--bottombar-floating-margin-bottom);
11517
12226
 
11518
12227
  /* The transparent frosted margin around the pill overlays scrolling content;
@@ -11668,10 +12377,18 @@ li.muka-listitem {
11668
12377
  }
11669
12378
  }
11670
12379
 
12380
+ /* ─── Print ────────────────────────────────────────────── */
12381
+
12382
+ @media print {
12383
+ .muka-bottombar {
12384
+ display: none;
12385
+ }
12386
+ }
12387
+
12388
+
12389
+ /* Badge */
12390
+ /* Badge Component Styles - Using Muka Design Tokens */
11671
12391
 
11672
- /* Badge */
11673
- /* Badge Component Styles - Using Muka Design Tokens */
11674
-
11675
12392
  .muka-badge {
11676
12393
  display: inline-flex;
11677
12394
  align-items: center;
@@ -12443,12 +13160,19 @@ li.muka-listitem {
12443
13160
  margin: 0;
12444
13161
  cursor: pointer;
12445
13162
  color: var(--color-text-subtle-default);
13163
+ font-family: var(--text-body-sm-regular-fontFamily);
13164
+ font-weight: var(--text-body-sm-regular-fontWeight);
13165
+ font-size: var(--text-body-sm-regular-fontSize);
13166
+ line-height: var(--text-body-sm-regular-lineHeight);
13167
+ text-align: left;
13168
+ -webkit-tap-highlight-color: transparent;
13169
+ }
13170
+
13171
+ .muka-agent-task-list--open .muka-agent-task-list__header {
12446
13172
  font-family: var(--text-body-sm-bold-fontFamily);
12447
13173
  font-weight: var(--text-body-sm-bold-fontWeight);
12448
13174
  font-size: var(--text-body-sm-bold-fontSize);
12449
13175
  line-height: var(--text-body-sm-bold-lineHeight);
12450
- text-align: left;
12451
- -webkit-tap-highlight-color: transparent;
12452
13176
  }
12453
13177
 
12454
13178
  .muka-agent-task-list__header:focus-visible {
@@ -12506,7 +13230,7 @@ li.muka-listitem {
12506
13230
  position: absolute;
12507
13231
  left: 7px;
12508
13232
  width: 1px;
12509
- background-color: var(--color-border-default, #d9d9d9);
13233
+ background-color: var(--color-border-default);
12510
13234
  }
12511
13235
 
12512
13236
  .muka-agent-task-list__line--top {
@@ -12569,6 +13293,18 @@ li.muka-listitem {
12569
13293
  word-break: break-word;
12570
13294
  }
12571
13295
 
13296
+ /* ─── Print ────────────────────────────────────────────── */
13297
+
13298
+ @media print {
13299
+ .muka-agent-task-list {
13300
+ break-inside: avoid;
13301
+ }
13302
+
13303
+ .muka-agent-task-list__chevron {
13304
+ display: none;
13305
+ }
13306
+ }
13307
+
12572
13308
 
12573
13309
  /* ActionSheet */
12574
13310
  /* ActionSheet Component Styles */
@@ -12842,265 +13578,3 @@ li.muka-listitem {
12842
13578
  border-bottom: none;
12843
13579
  }
12844
13580
 
12845
-
12846
- /* FileUpload */
12847
- /* FileUpload Component Styles */
12848
-
12849
- .muka-fileupload-wrapper {
12850
- display: flex;
12851
- flex-direction: column;
12852
- gap: var(--spacing-3);
12853
- width: 100%;
12854
- }
12855
-
12856
- /* Dropzone */
12857
- .muka-fileupload {
12858
- display: flex;
12859
- flex-direction: column;
12860
- align-items: center;
12861
- justify-content: center;
12862
- gap: var(--fileupload-dropzone-gap);
12863
- padding: var(--fileupload-dropzone-padding-md);
12864
- background-color: var(--fileupload-dropzone-color-default-background);
12865
- border: var(--fileupload-dropzone-border-width) dashed var(--fileupload-dropzone-color-default-border);
12866
- border-radius: var(--fileupload-dropzone-radius);
12867
- cursor: pointer;
12868
- transition: background-color 0.2s ease, border-color 0.2s ease;
12869
- text-align: center;
12870
- min-height: 120px;
12871
- }
12872
-
12873
- .muka-fileupload:focus-visible {
12874
- outline: 2px solid var(--color-border-focus);
12875
- outline-offset: 2px;
12876
- }
12877
-
12878
- /* Size variants */
12879
- .muka-fileupload--sm {
12880
- padding: var(--fileupload-dropzone-padding-sm);
12881
- min-height: 80px;
12882
- }
12883
-
12884
- .muka-fileupload--lg {
12885
- padding: var(--fileupload-dropzone-padding-lg);
12886
- min-height: 160px;
12887
- }
12888
-
12889
- /* Button variant */
12890
- .muka-fileupload--button {
12891
- flex-direction: row;
12892
- min-height: auto;
12893
- padding: var(--spacing-2) var(--spacing-3);
12894
- border-style: solid;
12895
- border-width: var(--border-width-regular);
12896
- border-radius: var(--border-radius-md);
12897
- }
12898
-
12899
- /* Hover state */
12900
- .muka-fileupload:hover:not(.muka-fileupload--disabled) {
12901
- background-color: var(--fileupload-dropzone-color-hover-background);
12902
- border-color: var(--fileupload-dropzone-color-hover-border);
12903
- }
12904
-
12905
- /* Active/drag state */
12906
- .muka-fileupload--active:not(.muka-fileupload--disabled) {
12907
- background-color: var(--fileupload-dropzone-color-active-background);
12908
- border-color: var(--fileupload-dropzone-color-active-border);
12909
- }
12910
-
12911
- /* Disabled state */
12912
- .muka-fileupload--disabled {
12913
- background-color: var(--fileupload-dropzone-color-disabled-background);
12914
- border-color: var(--fileupload-dropzone-color-disabled-border);
12915
- cursor: not-allowed;
12916
- opacity: 0.6;
12917
- }
12918
-
12919
- /* Hidden file input */
12920
- .muka-fileupload__input {
12921
- position: absolute;
12922
- width: 1px;
12923
- height: 1px;
12924
- padding: 0;
12925
- margin: -1px;
12926
- overflow: hidden;
12927
- clip: rect(0, 0, 0, 0);
12928
- white-space: nowrap;
12929
- border: 0;
12930
- }
12931
-
12932
- /* Content container */
12933
- .muka-fileupload__content {
12934
- display: flex;
12935
- flex-direction: column;
12936
- align-items: center;
12937
- gap: var(--spacing-2);
12938
- }
12939
-
12940
- /* Upload icon */
12941
- .muka-fileupload__icon {
12942
- display: flex;
12943
- align-items: center;
12944
- justify-content: center;
12945
- width: var(--size-3xl);
12946
- height: var(--size-3xl);
12947
- color: var(--fileupload-dropzone-color-default-foreground);
12948
- }
12949
-
12950
- .muka-fileupload__icon svg {
12951
- width: 100%;
12952
- height: 100%;
12953
- }
12954
-
12955
- .muka-fileupload--sm .muka-fileupload__icon {
12956
- width: var(--size-2xl);
12957
- height: var(--size-2xl);
12958
- }
12959
-
12960
- .muka-fileupload--lg .muka-fileupload__icon {
12961
- width: var(--size-4xl);
12962
- height: var(--size-4xl);
12963
- }
12964
-
12965
- /* Text */
12966
- .muka-fileupload__text {
12967
- font-family: var(--text-body-md-regular-fontFamily);
12968
- font-size: var(--text-body-md-regular-fontSize);
12969
- font-weight: var(--text-body-md-regular-fontWeight);
12970
- line-height: var(--text-body-md-regular-lineHeight);
12971
- color: var(--color-text-default-default);
12972
- }
12973
-
12974
- .muka-fileupload--sm .muka-fileupload__text {
12975
- font-size: var(--text-body-sm-regular-fontSize);
12976
- }
12977
-
12978
- /* Hint text */
12979
- .muka-fileupload__hint {
12980
- font-family: var(--text-label-sm-regular-fontFamily);
12981
- font-size: var(--text-label-sm-regular-fontSize);
12982
- font-weight: var(--text-label-sm-regular-fontWeight);
12983
- line-height: var(--text-label-sm-regular-lineHeight);
12984
- color: var(--fileupload-dropzone-color-default-foreground);
12985
- }
12986
-
12987
- /* File list */
12988
- .muka-fileupload__list {
12989
- display: flex;
12990
- flex-direction: column;
12991
- gap: var(--spacing-2);
12992
- list-style: none;
12993
- margin: 0;
12994
- padding: 0;
12995
- }
12996
-
12997
- .muka-fileupload__list li {
12998
- margin: 0;
12999
- padding: 0;
13000
- }
13001
-
13002
- /* File item */
13003
- .muka-fileupload-item {
13004
- display: flex;
13005
- align-items: center;
13006
- gap: var(--fileupload-item-gap);
13007
- padding: var(--fileupload-item-padding-y) var(--fileupload-item-padding-x);
13008
- background-color: var(--fileupload-item-color-default-background);
13009
- border-radius: var(--fileupload-item-radius);
13010
- }
13011
-
13012
- .muka-fileupload-item--error {
13013
- background-color: var(--fileupload-item-color-error-background);
13014
- }
13015
-
13016
- .muka-fileupload-item--success {
13017
- background-color: var(--fileupload-item-color-default-background);
13018
- }
13019
-
13020
- /* Preview/Icon container */
13021
- .muka-fileupload-item__preview {
13022
- display: flex;
13023
- align-items: center;
13024
- justify-content: center;
13025
- flex-shrink: 0;
13026
- width: var(--fileupload-preview-size);
13027
- height: var(--fileupload-preview-size);
13028
- border-radius: var(--fileupload-preview-radius);
13029
- overflow: hidden;
13030
- background-color: var(--color-surface-level1);
13031
- }
13032
-
13033
- .muka-fileupload-item__thumbnail {
13034
- width: 100%;
13035
- height: 100%;
13036
- object-fit: cover;
13037
- }
13038
-
13039
- .muka-fileupload-item__icon {
13040
- color: var(--color-text-subtle-default);
13041
- }
13042
-
13043
- /* File info */
13044
- .muka-fileupload-item__info {
13045
- flex: 1;
13046
- min-width: 0;
13047
- display: flex;
13048
- flex-direction: column;
13049
- gap: var(--spacing-1);
13050
- }
13051
-
13052
- .muka-fileupload-item__name {
13053
- font-family: var(--text-body-sm-medium-fontFamily);
13054
- font-size: var(--text-body-sm-medium-fontSize);
13055
- font-weight: var(--text-body-sm-medium-fontWeight);
13056
- line-height: var(--text-body-sm-medium-lineHeight);
13057
- color: var(--fileupload-item-color-default-foreground);
13058
- white-space: nowrap;
13059
- overflow: hidden;
13060
- text-overflow: ellipsis;
13061
- }
13062
-
13063
- .muka-fileupload-item--error .muka-fileupload-item__name {
13064
- color: var(--fileupload-item-color-error-foreground);
13065
- }
13066
-
13067
- .muka-fileupload-item__meta {
13068
- font-family: var(--text-label-sm-regular-fontFamily);
13069
- font-size: var(--text-label-sm-regular-fontSize);
13070
- font-weight: var(--text-label-sm-regular-fontWeight);
13071
- line-height: var(--text-label-sm-regular-lineHeight);
13072
- color: var(--color-text-subtle-default);
13073
- }
13074
-
13075
- .muka-fileupload-item__error {
13076
- color: var(--fileupload-item-color-error-foreground);
13077
- }
13078
-
13079
- .muka-fileupload-item__progress {
13080
- margin-top: var(--spacing-1);
13081
- }
13082
-
13083
- /* Actions */
13084
- .muka-fileupload-item__actions {
13085
- display: flex;
13086
- align-items: center;
13087
- gap: var(--spacing-2);
13088
- flex-shrink: 0;
13089
- }
13090
-
13091
- .muka-fileupload-item__status-icon--success {
13092
- color: var(--color-state-success-foreground);
13093
- }
13094
-
13095
- .muka-fileupload-item__status-icon--error {
13096
- color: var(--color-state-error-foreground);
13097
- }
13098
-
13099
- .muka-fileupload-item__remove {
13100
- opacity: 0.7;
13101
- }
13102
-
13103
- .muka-fileupload-item__remove:hover {
13104
- opacity: 1;
13105
- }
13106
-