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