@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
@@ -1181,6 +1181,19 @@ body {
1181
1181
  --color-state-warning-default: #ffc53d;
1182
1182
  --color-state-warning-contrast: #ffca16;
1183
1183
  --color-state-warning-background: #302008;
1184
+ --color-conversation-own-background: #132d21;
1185
+ --color-conversation-own-background-raised: #121b17;
1186
+ --color-conversation-own-border: #174933;
1187
+ --color-conversation-own-foreground: #eeeeee;
1188
+ --color-conversation-peer-background: #111111;
1189
+ --color-conversation-peer-background-raised: #222222;
1190
+ --color-conversation-peer-border: #3a3a3a;
1191
+ --color-conversation-peer-foreground: #eeeeee;
1192
+ --color-conversation-agent-background: #302008;
1193
+ --color-conversation-agent-background-raised: #1d180f;
1194
+ --color-conversation-agent-border: #4d3000;
1195
+ --color-conversation-agent-foreground: #eeeeee;
1196
+ --color-conversation-meta: #eeeeee;
1184
1197
  --color-border-contrast: #606060;
1185
1198
  --color-border-default: #313131;
1186
1199
  --color-border-muted: #2a2a2a;
@@ -1280,6 +1293,16 @@ body {
1280
1293
  --alias-color-state-neutral-surface-level1: #222222;
1281
1294
  --alias-color-state-neutral-surface-level2: #2a2a2a;
1282
1295
  --alias-color-state-neutral-surface-level3: #313131;
1296
+ --alias-color-conversation-own-surface-default: #132d21;
1297
+ --alias-color-conversation-own-surface-raised: #121b17;
1298
+ --alias-color-conversation-own-border: #174933;
1299
+ --alias-color-conversation-peer-surface-default: #111111;
1300
+ --alias-color-conversation-peer-surface-raised: #222222;
1301
+ --alias-color-conversation-peer-border: #3a3a3a;
1302
+ --alias-color-conversation-agent-surface-default: #302008;
1303
+ --alias-color-conversation-agent-surface-raised: #1d180f;
1304
+ --alias-color-conversation-agent-border: #4d3000;
1305
+ --alias-color-conversation-meta: #eeeeee;
1283
1306
  --alias-font-plain-family: Helvetica;
1284
1307
  --alias-font-plain-weight-regular: 400;
1285
1308
  --alias-font-plain-weight-medium: 500;
@@ -1626,6 +1649,41 @@ body {
1626
1649
  --card-border-hover: 0.0625rem solid #606060;
1627
1650
  --card-border-pressed: 0.125rem solid #b4b4b4;
1628
1651
  --card-border-selected: 0.125rem solid #b4b4b4;
1652
+ --chatbubble-max-width: 640px;
1653
+ --chatbubble-radius: 0px;
1654
+ --chatbubble-padding: 1rem;
1655
+ --chatbubble-gap: 0.25rem;
1656
+ --chatbubble-body-gap: 1.5rem;
1657
+ --chatbubble-row-gap: 0.75rem;
1658
+ --chatbubble-avatar-size: 3rem;
1659
+ --chatbubble-color-own-background: #132d21;
1660
+ --chatbubble-color-own-border: #174933;
1661
+ --chatbubble-color-own-foreground: #eeeeee;
1662
+ --chatbubble-color-peer-background: #111111;
1663
+ --chatbubble-color-peer-border: #3a3a3a;
1664
+ --chatbubble-color-peer-foreground: #eeeeee;
1665
+ --chatbubble-color-agent-background: #302008;
1666
+ --chatbubble-color-agent-border: #4d3000;
1667
+ --chatbubble-color-agent-foreground: #eeeeee;
1668
+ --chatbubble-color-timestamp: #eeeeee;
1669
+ --chatbubble-embed-padding: 0.75rem;
1670
+ --chatbubble-embed-gap: 0.5rem;
1671
+ --chatbubble-embed-radius: 0px;
1672
+ --chatbubble-embed-color-own-background: #121b17;
1673
+ --chatbubble-embed-color-own-border: #174933;
1674
+ --chatbubble-embed-color-own-foreground: #eeeeee;
1675
+ --chatbubble-embed-color-peer-background: #222222;
1676
+ --chatbubble-embed-color-peer-border: #3a3a3a;
1677
+ --chatbubble-embed-color-peer-foreground: #eeeeee;
1678
+ --chatbubble-embed-color-agent-background: #1d180f;
1679
+ --chatbubble-embed-color-agent-border: #4d3000;
1680
+ --chatbubble-embed-color-agent-foreground: #eeeeee;
1681
+ --chatbubble-action-stack-gap: 0.75rem;
1682
+ --chatphotogrid-gap: 0.5rem;
1683
+ --chatphotogrid-radius: 0px;
1684
+ --chatphotogrid-color-placeholder: #2a2a2a;
1685
+ --chatphotogrid-color-overflow-background: rgba(0, 0, 0, 0.565);
1686
+ --chatphotogrid-color-overflow-foreground: #111111;
1629
1687
  --input-field-color-default-background: #111111;
1630
1688
  --input-field-color-default-foreground: #eeeeee;
1631
1689
  --input-field-color-default-border: #606060;
@@ -2007,9 +2065,10 @@ body {
2007
2065
  --bottombar-floating-shadow: 0 0 1px 0 rgba(0, 0, 0, 0.090), 0 8px 16px 0 rgba(0, 0, 0, 0.090);
2008
2066
  --bottombar-floating-max-width: 768px;
2009
2067
  --bottombar-floating-backdrop-start: transparent;
2010
- --bottombar-floating-backdrop-end: rgba(0, 0, 0, 0.090);
2011
- --bottombar-floating-backdrop-blur: 2px;
2068
+ --bottombar-floating-backdrop-end: rgba(0, 0, 0, 0.027);
2012
2069
  --bottombar-floating-padding-top: 2rem;
2070
+ --bottombar-chat-max-width: 1024px;
2071
+ --bottombar-chat-padding: 0.75rem;
2013
2072
  --bottombar-tab-icon-size: 24px;
2014
2073
  --bottombar-tab-gap: 0.25rem;
2015
2074
  --bottombar-tab-padding-y: 0.5rem;
@@ -7055,6 +7114,34 @@ body {
7055
7114
  }
7056
7115
 
7057
7116
 
7117
+ /* NavigationTransition */
7118
+ /* NavigationTransition Component Styles */
7119
+
7120
+ /* ─── Wrapper ────────────────────────────────────────── */
7121
+
7122
+ .muka-nav-transition {
7123
+ position: relative;
7124
+ height: 100vh;
7125
+ overflow: hidden;
7126
+ }
7127
+
7128
+ /* Disable interaction during animation */
7129
+ .muka-nav-transition--active {
7130
+ pointer-events: none;
7131
+ }
7132
+
7133
+ /* ─── View slots ─────────────────────────────────────── */
7134
+
7135
+ .muka-nav-transition--active .muka-nav-transition__view {
7136
+ position: absolute;
7137
+ inset: 0;
7138
+ }
7139
+
7140
+ /* Z-index layering */
7141
+ .muka-nav-transition__view--bottom { z-index: 1; }
7142
+ .muka-nav-transition__view--top { z-index: 2; }
7143
+
7144
+
7058
7145
  /* NumberInput */
7059
7146
  /* NumberInput — reuses Input field styles (../Input/Input.css). */
7060
7147
  /* Only the prefix/suffix affixes are NumberInput-specific. */
@@ -7085,34 +7172,6 @@ body {
7085
7172
  }
7086
7173
 
7087
7174
 
7088
- /* NavigationTransition */
7089
- /* NavigationTransition Component Styles */
7090
-
7091
- /* ─── Wrapper ────────────────────────────────────────── */
7092
-
7093
- .muka-nav-transition {
7094
- position: relative;
7095
- height: 100vh;
7096
- overflow: hidden;
7097
- }
7098
-
7099
- /* Disable interaction during animation */
7100
- .muka-nav-transition--active {
7101
- pointer-events: none;
7102
- }
7103
-
7104
- /* ─── View slots ─────────────────────────────────────── */
7105
-
7106
- .muka-nav-transition--active .muka-nav-transition__view {
7107
- position: absolute;
7108
- inset: 0;
7109
- }
7110
-
7111
- /* Z-index layering */
7112
- .muka-nav-transition__view--bottom { z-index: 1; }
7113
- .muka-nav-transition__view--top { z-index: 2; }
7114
-
7115
-
7116
7175
  /* Menu */
7117
7176
  /* Menu Component Styles */
7118
7177
 
@@ -8114,144 +8173,406 @@ li.muka-listitem {
8114
8173
  }
8115
8174
 
8116
8175
 
8117
- /* FAB */
8118
- /* FAB (Floating Action Button) Component Styles */
8176
+ /* FileUpload */
8177
+ /* FileUpload Component Styles */
8119
8178
 
8120
- .muka-fab {
8121
- position: fixed;
8122
- z-index: 40;
8179
+ .muka-fileupload-wrapper {
8180
+ display: flex;
8181
+ flex-direction: column;
8182
+ gap: var(--spacing-3);
8183
+ width: 100%;
8184
+ }
8123
8185
 
8124
- display: inline-flex;
8186
+ /* Dropzone */
8187
+ .muka-fileupload {
8188
+ display: flex;
8189
+ flex-direction: column;
8125
8190
  align-items: center;
8126
8191
  justify-content: center;
8127
- gap: var(--spacing-2);
8128
-
8129
- border: none;
8192
+ gap: var(--fileupload-dropzone-gap);
8193
+ padding: var(--fileupload-dropzone-padding-md);
8194
+ background-color: var(--fileupload-dropzone-color-default-background);
8195
+ border: var(--fileupload-dropzone-border-width) dashed var(--fileupload-dropzone-color-default-border);
8196
+ border-radius: var(--fileupload-dropzone-radius);
8130
8197
  cursor: pointer;
8131
- font-family: inherit;
8132
- box-shadow: var(--shadow-level4);
8133
-
8134
- transition: transform 0.12s ease, box-shadow 0.12s ease, background-color 0.12s ease;
8135
- -webkit-tap-highlight-color: transparent;
8136
- }
8137
-
8138
- .muka-fab:active {
8139
- transform: scale(0.96);
8140
- box-shadow: var(--shadow-level3);
8198
+ transition: background-color 0.2s ease, border-color 0.2s ease;
8199
+ text-align: center;
8200
+ min-height: 120px;
8141
8201
  }
8142
8202
 
8143
- .muka-fab:focus-visible {
8144
- outline: 2px solid var(--color-action-default);
8203
+ .muka-fileupload:focus-visible {
8204
+ outline: 2px solid var(--color-border-focus);
8145
8205
  outline-offset: 2px;
8146
8206
  }
8147
8207
 
8148
- .muka-fab:disabled {
8149
- opacity: 0.5;
8150
- cursor: not-allowed;
8151
- box-shadow: none;
8152
- }
8153
-
8154
- /* ─── Variants ────────────────────────────────────────── */
8155
-
8156
- .muka-fab--primary {
8157
- background-color: var(--color-action-default);
8158
- color: var(--color-text-inverse-default);
8208
+ /* Size variants */
8209
+ .muka-fileupload--sm {
8210
+ padding: var(--fileupload-dropzone-padding-sm);
8211
+ min-height: 80px;
8159
8212
  }
8160
8213
 
8161
- .muka-fab--primary:hover:not(:disabled) {
8162
- background-color: var(--color-action-hover);
8214
+ .muka-fileupload--lg {
8215
+ padding: var(--fileupload-dropzone-padding-lg);
8216
+ min-height: 160px;
8163
8217
  }
8164
8218
 
8165
- .muka-fab--secondary {
8166
- background-color: var(--color-surface-level3);
8167
- color: var(--color-text-default-default);
8219
+ /* Button variant */
8220
+ .muka-fileupload--button {
8221
+ flex-direction: row;
8222
+ min-height: auto;
8223
+ padding: var(--spacing-2) var(--spacing-3);
8224
+ border-style: solid;
8225
+ border-width: var(--border-width-regular);
8226
+ border-radius: var(--border-radius-md);
8168
8227
  }
8169
8228
 
8170
- .muka-fab--secondary:hover:not(:disabled) {
8171
- background-color: var(--color-surface-level2);
8229
+ /* Hover state */
8230
+ .muka-fileupload:hover:not(.muka-fileupload--disabled) {
8231
+ background-color: var(--fileupload-dropzone-color-hover-background);
8232
+ border-color: var(--fileupload-dropzone-color-hover-border);
8172
8233
  }
8173
8234
 
8174
- /* ─── Sizes (circular by default) ─────────────────────── */
8175
-
8176
- .muka-fab--md {
8177
- width: 56px;
8178
- height: 56px;
8179
- border-radius: 50%;
8235
+ /* Active/drag state */
8236
+ .muka-fileupload--active:not(.muka-fileupload--disabled) {
8237
+ background-color: var(--fileupload-dropzone-color-active-background);
8238
+ border-color: var(--fileupload-dropzone-color-active-border);
8180
8239
  }
8181
8240
 
8182
- .muka-fab--lg {
8183
- width: 64px;
8184
- height: 64px;
8185
- border-radius: 50%;
8241
+ /* Disabled state */
8242
+ .muka-fileupload--disabled {
8243
+ background-color: var(--fileupload-dropzone-color-disabled-background);
8244
+ border-color: var(--fileupload-dropzone-color-disabled-border);
8245
+ cursor: not-allowed;
8246
+ opacity: 0.6;
8186
8247
  }
8187
8248
 
8188
- /* ─── Extended (pill shape with label) ────────────────── */
8189
-
8190
- .muka-fab--extended {
8191
- width: auto;
8192
- height: auto;
8193
- padding: var(--spacing-3) var(--spacing-4);
8194
- border-radius: var(--radius-full);
8249
+ /* Hidden file input */
8250
+ .muka-fileupload__input {
8251
+ position: absolute;
8252
+ width: 1px;
8253
+ height: 1px;
8254
+ padding: 0;
8255
+ margin: -1px;
8256
+ overflow: hidden;
8257
+ clip: rect(0, 0, 0, 0);
8258
+ white-space: nowrap;
8259
+ border: 0;
8195
8260
  }
8196
8261
 
8197
- .muka-fab--extended.muka-fab--lg {
8198
- padding: var(--spacing-4) var(--spacing-5);
8262
+ /* Content container */
8263
+ .muka-fileupload__content {
8264
+ display: flex;
8265
+ flex-direction: column;
8266
+ align-items: center;
8267
+ gap: var(--spacing-2);
8199
8268
  }
8200
8269
 
8201
- .muka-fab__icon {
8202
- display: inline-flex;
8270
+ /* Upload icon */
8271
+ .muka-fileupload__icon {
8272
+ display: flex;
8203
8273
  align-items: center;
8204
8274
  justify-content: center;
8205
- width: 24px;
8206
- height: 24px;
8275
+ width: var(--size-3xl);
8276
+ height: var(--size-3xl);
8277
+ color: var(--fileupload-dropzone-color-default-foreground);
8207
8278
  }
8208
8279
 
8209
- .muka-fab__icon svg {
8280
+ .muka-fileupload__icon svg {
8210
8281
  width: 100%;
8211
8282
  height: 100%;
8212
8283
  }
8213
8284
 
8214
- .muka-fab__label {
8215
- font-family: var(--text-label-md-semibold-fontFamily);
8216
- font-weight: var(--text-label-md-semibold-fontWeight);
8217
- font-size: var(--text-label-md-semibold-fontSize);
8218
- line-height: var(--text-label-md-semibold-lineHeight);
8219
- }
8220
-
8221
- /* ─── Positioning ─────────────────────────────────────── */
8222
-
8223
- .muka-fab--bottom-right {
8224
- right: var(--spacing-4);
8225
- bottom: var(--spacing-4);
8285
+ .muka-fileupload--sm .muka-fileupload__icon {
8286
+ width: var(--size-2xl);
8287
+ height: var(--size-2xl);
8226
8288
  }
8227
8289
 
8228
- .muka-fab--bottom-left {
8229
- left: var(--spacing-4);
8230
- bottom: var(--spacing-4);
8290
+ .muka-fileupload--lg .muka-fileupload__icon {
8291
+ width: var(--size-4xl);
8292
+ height: var(--size-4xl);
8231
8293
  }
8232
8294
 
8233
- .muka-fab--bottom-center {
8234
- left: 50%;
8235
- bottom: var(--spacing-4);
8236
- transform: translateX(-50%);
8295
+ /* Text */
8296
+ .muka-fileupload__text {
8297
+ font-family: var(--text-body-md-regular-fontFamily);
8298
+ font-size: var(--text-body-md-regular-fontSize);
8299
+ font-weight: var(--text-body-md-regular-fontWeight);
8300
+ line-height: var(--text-body-md-regular-lineHeight);
8301
+ color: var(--color-text-default-default);
8237
8302
  }
8238
8303
 
8239
- .muka-fab--bottom-center:active {
8240
- transform: translateX(-50%) scale(0.96);
8304
+ .muka-fileupload--sm .muka-fileupload__text {
8305
+ font-size: var(--text-body-sm-regular-fontSize);
8241
8306
  }
8242
8307
 
8243
- /* Add the iOS home-indicator inset to the bottom offset. */
8244
- .muka-fab:not(.muka-fab--no-safe-area) {
8245
- bottom: calc(var(--spacing-4) + env(safe-area-inset-bottom));
8308
+ /* Hint text */
8309
+ .muka-fileupload__hint {
8310
+ font-family: var(--text-label-sm-regular-fontFamily);
8311
+ font-size: var(--text-label-sm-regular-fontSize);
8312
+ font-weight: var(--text-label-sm-regular-fontWeight);
8313
+ line-height: var(--text-label-sm-regular-lineHeight);
8314
+ color: var(--fileupload-dropzone-color-default-foreground);
8246
8315
  }
8247
8316
 
8248
- /* Lateral safe-area for landscape iPhone with notch. */
8249
- .muka-fab--bottom-right:not(.muka-fab--no-safe-area) {
8250
- right: max(var(--spacing-4), env(safe-area-inset-right));
8317
+ /* File list */
8318
+ .muka-fileupload__list {
8319
+ display: flex;
8320
+ flex-direction: column;
8321
+ gap: var(--spacing-2);
8322
+ list-style: none;
8323
+ margin: 0;
8324
+ padding: 0;
8251
8325
  }
8252
8326
 
8253
- .muka-fab--bottom-left:not(.muka-fab--no-safe-area) {
8254
- left: max(var(--spacing-4), env(safe-area-inset-left));
8327
+ .muka-fileupload__list li {
8328
+ margin: 0;
8329
+ padding: 0;
8330
+ }
8331
+
8332
+ /* File item */
8333
+ .muka-fileupload-item {
8334
+ display: flex;
8335
+ align-items: center;
8336
+ gap: var(--fileupload-item-gap);
8337
+ padding: var(--fileupload-item-padding-y) var(--fileupload-item-padding-x);
8338
+ background-color: var(--fileupload-item-color-default-background);
8339
+ border-radius: var(--fileupload-item-radius);
8340
+ }
8341
+
8342
+ .muka-fileupload-item--error {
8343
+ background-color: var(--fileupload-item-color-error-background);
8344
+ }
8345
+
8346
+ .muka-fileupload-item--success {
8347
+ background-color: var(--fileupload-item-color-default-background);
8348
+ }
8349
+
8350
+ /* Preview/Icon container */
8351
+ .muka-fileupload-item__preview {
8352
+ display: flex;
8353
+ align-items: center;
8354
+ justify-content: center;
8355
+ flex-shrink: 0;
8356
+ width: var(--fileupload-preview-size);
8357
+ height: var(--fileupload-preview-size);
8358
+ border-radius: var(--fileupload-preview-radius);
8359
+ overflow: hidden;
8360
+ background-color: var(--color-surface-level1);
8361
+ }
8362
+
8363
+ .muka-fileupload-item__thumbnail {
8364
+ width: 100%;
8365
+ height: 100%;
8366
+ object-fit: cover;
8367
+ }
8368
+
8369
+ .muka-fileupload-item__icon {
8370
+ color: var(--color-text-subtle-default);
8371
+ }
8372
+
8373
+ /* File info */
8374
+ .muka-fileupload-item__info {
8375
+ flex: 1;
8376
+ min-width: 0;
8377
+ display: flex;
8378
+ flex-direction: column;
8379
+ gap: var(--spacing-1);
8380
+ }
8381
+
8382
+ .muka-fileupload-item__name {
8383
+ font-family: var(--text-body-sm-medium-fontFamily);
8384
+ font-size: var(--text-body-sm-medium-fontSize);
8385
+ font-weight: var(--text-body-sm-medium-fontWeight);
8386
+ line-height: var(--text-body-sm-medium-lineHeight);
8387
+ color: var(--fileupload-item-color-default-foreground);
8388
+ white-space: nowrap;
8389
+ overflow: hidden;
8390
+ text-overflow: ellipsis;
8391
+ }
8392
+
8393
+ .muka-fileupload-item--error .muka-fileupload-item__name {
8394
+ color: var(--fileupload-item-color-error-foreground);
8395
+ }
8396
+
8397
+ .muka-fileupload-item__meta {
8398
+ font-family: var(--text-label-sm-regular-fontFamily);
8399
+ font-size: var(--text-label-sm-regular-fontSize);
8400
+ font-weight: var(--text-label-sm-regular-fontWeight);
8401
+ line-height: var(--text-label-sm-regular-lineHeight);
8402
+ color: var(--color-text-subtle-default);
8403
+ }
8404
+
8405
+ .muka-fileupload-item__error {
8406
+ color: var(--fileupload-item-color-error-foreground);
8407
+ }
8408
+
8409
+ .muka-fileupload-item__progress {
8410
+ margin-top: var(--spacing-1);
8411
+ }
8412
+
8413
+ /* Actions */
8414
+ .muka-fileupload-item__actions {
8415
+ display: flex;
8416
+ align-items: center;
8417
+ gap: var(--spacing-2);
8418
+ flex-shrink: 0;
8419
+ }
8420
+
8421
+ .muka-fileupload-item__status-icon--success {
8422
+ color: var(--color-state-success-foreground);
8423
+ }
8424
+
8425
+ .muka-fileupload-item__status-icon--error {
8426
+ color: var(--color-state-error-foreground);
8427
+ }
8428
+
8429
+ .muka-fileupload-item__remove {
8430
+ opacity: 0.7;
8431
+ }
8432
+
8433
+ .muka-fileupload-item__remove:hover {
8434
+ opacity: 1;
8435
+ }
8436
+
8437
+
8438
+ /* FAB */
8439
+ /* FAB (Floating Action Button) Component Styles */
8440
+
8441
+ .muka-fab {
8442
+ position: fixed;
8443
+ z-index: 40;
8444
+
8445
+ display: inline-flex;
8446
+ align-items: center;
8447
+ justify-content: center;
8448
+ gap: var(--spacing-2);
8449
+
8450
+ border: none;
8451
+ cursor: pointer;
8452
+ font-family: inherit;
8453
+ box-shadow: var(--shadow-level4);
8454
+
8455
+ transition: transform 0.12s ease, box-shadow 0.12s ease, background-color 0.12s ease;
8456
+ -webkit-tap-highlight-color: transparent;
8457
+ }
8458
+
8459
+ .muka-fab:active {
8460
+ transform: scale(0.96);
8461
+ box-shadow: var(--shadow-level3);
8462
+ }
8463
+
8464
+ .muka-fab:focus-visible {
8465
+ outline: 2px solid var(--color-action-default);
8466
+ outline-offset: 2px;
8467
+ }
8468
+
8469
+ .muka-fab:disabled {
8470
+ opacity: 0.5;
8471
+ cursor: not-allowed;
8472
+ box-shadow: none;
8473
+ }
8474
+
8475
+ /* ─── Variants ────────────────────────────────────────── */
8476
+
8477
+ .muka-fab--primary {
8478
+ background-color: var(--color-action-default);
8479
+ color: var(--color-text-inverse-default);
8480
+ }
8481
+
8482
+ .muka-fab--primary:hover:not(:disabled) {
8483
+ background-color: var(--color-action-hover);
8484
+ }
8485
+
8486
+ .muka-fab--secondary {
8487
+ background-color: var(--color-surface-level3);
8488
+ color: var(--color-text-default-default);
8489
+ }
8490
+
8491
+ .muka-fab--secondary:hover:not(:disabled) {
8492
+ background-color: var(--color-surface-level2);
8493
+ }
8494
+
8495
+ /* ─── Sizes (circular by default) ─────────────────────── */
8496
+
8497
+ .muka-fab--md {
8498
+ width: 56px;
8499
+ height: 56px;
8500
+ border-radius: 50%;
8501
+ }
8502
+
8503
+ .muka-fab--lg {
8504
+ width: 64px;
8505
+ height: 64px;
8506
+ border-radius: 50%;
8507
+ }
8508
+
8509
+ /* ─── Extended (pill shape with label) ────────────────── */
8510
+
8511
+ .muka-fab--extended {
8512
+ width: auto;
8513
+ height: auto;
8514
+ padding: var(--spacing-3) var(--spacing-4);
8515
+ border-radius: var(--radius-full);
8516
+ }
8517
+
8518
+ .muka-fab--extended.muka-fab--lg {
8519
+ padding: var(--spacing-4) var(--spacing-5);
8520
+ }
8521
+
8522
+ .muka-fab__icon {
8523
+ display: inline-flex;
8524
+ align-items: center;
8525
+ justify-content: center;
8526
+ width: 24px;
8527
+ height: 24px;
8528
+ }
8529
+
8530
+ .muka-fab__icon svg {
8531
+ width: 100%;
8532
+ height: 100%;
8533
+ }
8534
+
8535
+ .muka-fab__label {
8536
+ font-family: var(--text-label-md-semibold-fontFamily);
8537
+ font-weight: var(--text-label-md-semibold-fontWeight);
8538
+ font-size: var(--text-label-md-semibold-fontSize);
8539
+ line-height: var(--text-label-md-semibold-lineHeight);
8540
+ }
8541
+
8542
+ /* ─── Positioning ─────────────────────────────────────── */
8543
+
8544
+ .muka-fab--bottom-right {
8545
+ right: var(--spacing-4);
8546
+ bottom: var(--spacing-4);
8547
+ }
8548
+
8549
+ .muka-fab--bottom-left {
8550
+ left: var(--spacing-4);
8551
+ bottom: var(--spacing-4);
8552
+ }
8553
+
8554
+ .muka-fab--bottom-center {
8555
+ left: 50%;
8556
+ bottom: var(--spacing-4);
8557
+ transform: translateX(-50%);
8558
+ }
8559
+
8560
+ .muka-fab--bottom-center:active {
8561
+ transform: translateX(-50%) scale(0.96);
8562
+ }
8563
+
8564
+ /* Add the iOS home-indicator inset to the bottom offset. */
8565
+ .muka-fab:not(.muka-fab--no-safe-area) {
8566
+ bottom: calc(var(--spacing-4) + env(safe-area-inset-bottom));
8567
+ }
8568
+
8569
+ /* Lateral safe-area for landscape iPhone with notch. */
8570
+ .muka-fab--bottom-right:not(.muka-fab--no-safe-area) {
8571
+ right: max(var(--spacing-4), env(safe-area-inset-right));
8572
+ }
8573
+
8574
+ .muka-fab--bottom-left:not(.muka-fab--no-safe-area) {
8575
+ left: max(var(--spacing-4), env(safe-area-inset-left));
8255
8576
  }
8256
8577
 
8257
8578
 
@@ -8396,164 +8717,8 @@ li.muka-listitem {
8396
8717
  }
8397
8718
 
8398
8719
 
8399
- /* Drawer */
8400
- /* Drawer Component Styles */
8401
-
8402
- /* Size tokens (local to Drawer) */
8403
- .muka-drawer {
8404
- --drawer-width-sm: 18rem;
8405
- --drawer-width-md: 26rem;
8406
- --drawer-width-lg: 36rem;
8407
- }
8408
-
8409
- /* Reset native dialog */
8410
- .muka-drawer {
8411
- border: none;
8412
- padding: 0;
8413
- max-width: none;
8414
- max-height: none;
8415
- background: transparent;
8416
- overflow: visible;
8417
- }
8418
-
8419
- /* Backdrop */
8420
- .muka-drawer::backdrop {
8421
- background-color: var(--color-surface-backdrop);
8422
- opacity: 0;
8423
- transition: opacity 200ms ease;
8424
- }
8425
-
8426
- .muka-drawer--slide-in::backdrop {
8427
- opacity: 1;
8428
- }
8429
-
8430
- /* Surface */
8431
- .muka-drawer__surface {
8432
- display: flex;
8433
- flex-direction: column;
8434
- background-color: var(--color-surface-level3);
8435
- box-shadow: var(--shadow-level5);
8436
- height: 100%;
8437
- overflow: hidden;
8438
- position: fixed;
8439
- transition: transform 200ms cubic-bezier(0.16, 1, 0.3, 1);
8440
- }
8441
-
8442
- /* Side positioning + initial transforms */
8443
- .muka-drawer--right .muka-drawer__surface {
8444
- top: 0;
8445
- right: 0;
8446
- bottom: 0;
8447
- border-radius: var(--radius-lg) 0 0 var(--radius-lg);
8448
- transform: translateX(100%);
8449
- }
8450
-
8451
- .muka-drawer--left .muka-drawer__surface {
8452
- top: 0;
8453
- left: 0;
8454
- bottom: 0;
8455
- border-radius: 0 var(--radius-lg) var(--radius-lg) 0;
8456
- transform: translateX(-100%);
8457
- }
8458
-
8459
- .muka-drawer--bottom .muka-drawer__surface {
8460
- left: 0;
8461
- right: 0;
8462
- bottom: 0;
8463
- border-radius: var(--radius-lg) var(--radius-lg) 0 0;
8464
- transform: translateY(100%);
8465
- }
8466
-
8467
- .muka-drawer--top .muka-drawer__surface {
8468
- left: 0;
8469
- right: 0;
8470
- top: 0;
8471
- border-radius: 0 0 var(--radius-lg) var(--radius-lg);
8472
- transform: translateY(-100%);
8473
- }
8474
-
8475
- /* Slide-in state */
8476
- .muka-drawer--slide-in .muka-drawer__surface {
8477
- transform: translate(0, 0);
8478
- }
8479
-
8480
- /* Width sizes (left/right) */
8481
- .muka-drawer--right .muka-drawer__surface,
8482
- .muka-drawer--left .muka-drawer__surface {
8483
- width: var(--drawer-width-md);
8484
- }
8485
-
8486
- .muka-drawer--sm.muka-drawer--right .muka-drawer__surface,
8487
- .muka-drawer--sm.muka-drawer--left .muka-drawer__surface {
8488
- width: var(--drawer-width-sm);
8489
- }
8490
-
8491
- .muka-drawer--lg.muka-drawer--right .muka-drawer__surface,
8492
- .muka-drawer--lg.muka-drawer--left .muka-drawer__surface {
8493
- width: var(--drawer-width-lg);
8494
- }
8495
-
8496
- .muka-drawer--full.muka-drawer--right .muka-drawer__surface,
8497
- .muka-drawer--full.muka-drawer--left .muka-drawer__surface {
8498
- width: 100%;
8499
- }
8500
-
8501
- /* Height sizes (top/bottom) */
8502
- .muka-drawer--top .muka-drawer__surface,
8503
- .muka-drawer--bottom .muka-drawer__surface {
8504
- height: auto;
8505
- max-height: 80vh;
8506
- }
8507
-
8508
- .muka-drawer--full.muka-drawer--top .muka-drawer__surface,
8509
- .muka-drawer--full.muka-drawer--bottom .muka-drawer__surface {
8510
- max-height: 100vh;
8511
- }
8512
-
8513
- /* Header */
8514
- .muka-drawer__header {
8515
- display: flex;
8516
- align-items: center;
8517
- gap: var(--spacing-3);
8518
- padding: var(--spacing-4);
8519
- border-bottom: var(--border-width-regular) solid var(--color-border-default);
8520
- flex-shrink: 0;
8521
- }
8522
-
8523
- .muka-drawer__title {
8524
- flex: 1;
8525
- margin: 0;
8526
- font-family: var(--text-label-lg-semibold-fontFamily);
8527
- font-weight: var(--text-label-lg-semibold-fontWeight);
8528
- font-size: var(--text-label-lg-semibold-fontSize);
8529
- line-height: var(--text-label-lg-semibold-lineHeight);
8530
- color: var(--color-text-default-default);
8531
- }
8532
-
8533
- .muka-drawer__leading,
8534
- .muka-drawer__trailing {
8535
- display: flex;
8536
- align-items: center;
8537
- flex-shrink: 0;
8538
- }
8539
-
8540
- /* Body */
8541
- .muka-drawer__body {
8542
- flex: 1;
8543
- overflow-y: auto;
8544
- padding: var(--spacing-4);
8545
- }
8546
-
8547
- /* Footer */
8548
- .muka-drawer__footer {
8549
- padding: var(--spacing-4);
8550
- border-top: var(--border-width-regular) solid var(--color-border-default);
8551
- flex-shrink: 0;
8552
- }
8553
-
8554
-
8555
- /* DocumentViewer */
8556
- /* DocumentViewer Component Styles - Using Muka Design Tokens */
8720
+ /* DocumentViewer */
8721
+ /* DocumentViewer Component Styles - Using Muka Design Tokens */
8557
8722
 
8558
8723
  .muka-documentviewer {
8559
8724
  display: flex;
@@ -8831,100 +8996,229 @@ li.muka-listitem {
8831
8996
  }
8832
8997
 
8833
8998
 
8834
- /* Divider */
8835
- /* Divider Component Styles - Using Muka Design Tokens */
8836
-
8837
- .muka-divider {
8838
- flex-shrink: 0;
8839
- }
8840
-
8841
- .muka-divider--horizontal {
8842
- width: 100%;
8843
- height: var(--separator-width);
8844
- }
8845
-
8846
- .muka-divider--vertical {
8847
- height: 100%;
8848
- width: var(--separator-width);
8849
- align-self: stretch;
8850
- }
8851
-
8852
- .muka-divider--default {
8853
- background-color: var(--separator-color-default);
8854
- }
8999
+ /* Drawer */
9000
+ /* Drawer Component Styles */
8855
9001
 
8856
- .muka-divider--contrast {
8857
- background-color: var(--separator-color-contrast);
9002
+ /* Size tokens (local to Drawer) */
9003
+ .muka-drawer {
9004
+ --drawer-width-sm: 18rem;
9005
+ --drawer-width-md: 26rem;
9006
+ --drawer-width-lg: 36rem;
8858
9007
  }
8859
9008
 
8860
-
8861
- /* Dialog */
8862
- /* Dialog Component Styles */
8863
-
8864
- /* ─── Native dialog reset ─────────────────────────────── */
8865
-
8866
- .muka-dialog {
9009
+ /* Reset native dialog */
9010
+ .muka-drawer {
8867
9011
  border: none;
8868
9012
  padding: 0;
8869
9013
  max-width: none;
8870
9014
  max-height: none;
8871
- overflow: visible;
8872
9015
  background: transparent;
8873
- color: inherit;
8874
- box-shadow: none;
8875
- }
8876
-
8877
- .muka-dialog:not([open]) {
8878
- display: none;
8879
- }
8880
-
8881
- /* ─── Backdrop ────────────────────────────────────────── */
8882
-
8883
- .muka-dialog::backdrop {
8884
- background-color: var(--dialog-color-backdrop);
8885
- }
8886
-
8887
- /* ─── Non-modal modifier ──────────────────────────────── */
8888
-
8889
- .muka-dialog--non-modal::backdrop {
8890
- pointer-events: auto;
9016
+ overflow: visible;
8891
9017
  }
8892
9018
 
8893
- /* ─── Mobile: all sizes bottom-attached (< 1024px) ───── */
8894
-
8895
- .muka-dialog--sm,
8896
- .muka-dialog--md,
8897
- .muka-dialog--lg {
8898
- width: 100%;
8899
- height: 100%;
8900
- max-width: 100vw;
8901
- max-height: 100vh;
8902
- margin: 0;
8903
- display: flex;
8904
- flex-direction: column;
8905
- justify-content: flex-end;
8906
- align-items: stretch;
9019
+ /* Backdrop */
9020
+ .muka-drawer::backdrop {
9021
+ background-color: var(--color-surface-backdrop);
9022
+ opacity: 0;
9023
+ transition: opacity 200ms ease;
8907
9024
  }
8908
9025
 
8909
- .muka-dialog__surface:focus {
8910
- outline: none;
9026
+ .muka-drawer--slide-in::backdrop {
9027
+ opacity: 1;
8911
9028
  }
8912
9029
 
8913
- .muka-dialog--sm .muka-dialog__surface,
8914
- .muka-dialog--md .muka-dialog__surface,
8915
- .muka-dialog--lg .muka-dialog__surface {
8916
- background-color: var(--dialog-color-background);
8917
- border-radius: var(--dialog-border-radius) var(--dialog-border-radius) 0 0;
8918
- box-shadow: var(--dialog-shadow-default);
9030
+ /* Surface */
9031
+ .muka-drawer__surface {
8919
9032
  display: flex;
8920
9033
  flex-direction: column;
9034
+ background-color: var(--color-surface-level3);
9035
+ box-shadow: var(--shadow-level5);
9036
+ height: 100%;
8921
9037
  overflow: hidden;
8922
- min-height: var(--dialog-min-height-mobile);
9038
+ position: fixed;
9039
+ transition: transform 200ms cubic-bezier(0.16, 1, 0.3, 1);
8923
9040
  }
8924
9041
 
8925
- /* Mobile per-size heights */
8926
- .muka-dialog--sm .muka-dialog__surface {
8927
- height: var(--dialog-height-mobile-sm);
9042
+ /* Side positioning + initial transforms */
9043
+ .muka-drawer--right .muka-drawer__surface {
9044
+ top: 0;
9045
+ right: 0;
9046
+ bottom: 0;
9047
+ border-radius: var(--radius-lg) 0 0 var(--radius-lg);
9048
+ transform: translateX(100%);
9049
+ }
9050
+
9051
+ .muka-drawer--left .muka-drawer__surface {
9052
+ top: 0;
9053
+ left: 0;
9054
+ bottom: 0;
9055
+ border-radius: 0 var(--radius-lg) var(--radius-lg) 0;
9056
+ transform: translateX(-100%);
9057
+ }
9058
+
9059
+ .muka-drawer--bottom .muka-drawer__surface {
9060
+ left: 0;
9061
+ right: 0;
9062
+ bottom: 0;
9063
+ border-radius: var(--radius-lg) var(--radius-lg) 0 0;
9064
+ transform: translateY(100%);
9065
+ }
9066
+
9067
+ .muka-drawer--top .muka-drawer__surface {
9068
+ left: 0;
9069
+ right: 0;
9070
+ top: 0;
9071
+ border-radius: 0 0 var(--radius-lg) var(--radius-lg);
9072
+ transform: translateY(-100%);
9073
+ }
9074
+
9075
+ /* Slide-in state */
9076
+ .muka-drawer--slide-in .muka-drawer__surface {
9077
+ transform: translate(0, 0);
9078
+ }
9079
+
9080
+ /* Width sizes (left/right) */
9081
+ .muka-drawer--right .muka-drawer__surface,
9082
+ .muka-drawer--left .muka-drawer__surface {
9083
+ width: var(--drawer-width-md);
9084
+ }
9085
+
9086
+ .muka-drawer--sm.muka-drawer--right .muka-drawer__surface,
9087
+ .muka-drawer--sm.muka-drawer--left .muka-drawer__surface {
9088
+ width: var(--drawer-width-sm);
9089
+ }
9090
+
9091
+ .muka-drawer--lg.muka-drawer--right .muka-drawer__surface,
9092
+ .muka-drawer--lg.muka-drawer--left .muka-drawer__surface {
9093
+ width: var(--drawer-width-lg);
9094
+ }
9095
+
9096
+ .muka-drawer--full.muka-drawer--right .muka-drawer__surface,
9097
+ .muka-drawer--full.muka-drawer--left .muka-drawer__surface {
9098
+ width: 100%;
9099
+ }
9100
+
9101
+ /* Height sizes (top/bottom) */
9102
+ .muka-drawer--top .muka-drawer__surface,
9103
+ .muka-drawer--bottom .muka-drawer__surface {
9104
+ height: auto;
9105
+ max-height: 80vh;
9106
+ }
9107
+
9108
+ .muka-drawer--full.muka-drawer--top .muka-drawer__surface,
9109
+ .muka-drawer--full.muka-drawer--bottom .muka-drawer__surface {
9110
+ max-height: 100vh;
9111
+ }
9112
+
9113
+ /* Header */
9114
+ .muka-drawer__header {
9115
+ display: flex;
9116
+ align-items: center;
9117
+ gap: var(--spacing-3);
9118
+ padding: var(--spacing-4);
9119
+ border-bottom: var(--border-width-regular) solid var(--color-border-default);
9120
+ flex-shrink: 0;
9121
+ }
9122
+
9123
+ .muka-drawer__title {
9124
+ flex: 1;
9125
+ margin: 0;
9126
+ font-family: var(--text-label-lg-semibold-fontFamily);
9127
+ font-weight: var(--text-label-lg-semibold-fontWeight);
9128
+ font-size: var(--text-label-lg-semibold-fontSize);
9129
+ line-height: var(--text-label-lg-semibold-lineHeight);
9130
+ color: var(--color-text-default-default);
9131
+ }
9132
+
9133
+ .muka-drawer__leading,
9134
+ .muka-drawer__trailing {
9135
+ display: flex;
9136
+ align-items: center;
9137
+ flex-shrink: 0;
9138
+ }
9139
+
9140
+ /* Body */
9141
+ .muka-drawer__body {
9142
+ flex: 1;
9143
+ overflow-y: auto;
9144
+ padding: var(--spacing-4);
9145
+ }
9146
+
9147
+ /* Footer */
9148
+ .muka-drawer__footer {
9149
+ padding: var(--spacing-4);
9150
+ border-top: var(--border-width-regular) solid var(--color-border-default);
9151
+ flex-shrink: 0;
9152
+ }
9153
+
9154
+
9155
+ /* Dialog */
9156
+ /* Dialog Component Styles */
9157
+
9158
+ /* ─── Native dialog reset ─────────────────────────────── */
9159
+
9160
+ .muka-dialog {
9161
+ border: none;
9162
+ padding: 0;
9163
+ max-width: none;
9164
+ max-height: none;
9165
+ overflow: visible;
9166
+ background: transparent;
9167
+ color: inherit;
9168
+ box-shadow: none;
9169
+ }
9170
+
9171
+ .muka-dialog:not([open]) {
9172
+ display: none;
9173
+ }
9174
+
9175
+ /* ─── Backdrop ────────────────────────────────────────── */
9176
+
9177
+ .muka-dialog::backdrop {
9178
+ background-color: var(--dialog-color-backdrop);
9179
+ }
9180
+
9181
+ /* ─── Non-modal modifier ──────────────────────────────── */
9182
+
9183
+ .muka-dialog--non-modal::backdrop {
9184
+ pointer-events: auto;
9185
+ }
9186
+
9187
+ /* ─── Mobile: all sizes bottom-attached (< 1024px) ───── */
9188
+
9189
+ .muka-dialog--sm,
9190
+ .muka-dialog--md,
9191
+ .muka-dialog--lg {
9192
+ width: 100%;
9193
+ height: 100%;
9194
+ max-width: 100vw;
9195
+ max-height: 100vh;
9196
+ margin: 0;
9197
+ display: flex;
9198
+ flex-direction: column;
9199
+ justify-content: flex-end;
9200
+ align-items: stretch;
9201
+ }
9202
+
9203
+ .muka-dialog__surface:focus {
9204
+ outline: none;
9205
+ }
9206
+
9207
+ .muka-dialog--sm .muka-dialog__surface,
9208
+ .muka-dialog--md .muka-dialog__surface,
9209
+ .muka-dialog--lg .muka-dialog__surface {
9210
+ background-color: var(--dialog-color-background);
9211
+ border-radius: var(--dialog-border-radius) var(--dialog-border-radius) 0 0;
9212
+ box-shadow: var(--dialog-shadow-default);
9213
+ display: flex;
9214
+ flex-direction: column;
9215
+ overflow: hidden;
9216
+ min-height: var(--dialog-min-height-mobile);
9217
+ }
9218
+
9219
+ /* Mobile per-size heights */
9220
+ .muka-dialog--sm .muka-dialog__surface {
9221
+ height: var(--dialog-height-mobile-sm);
8928
9222
  }
8929
9223
 
8930
9224
  .muka-dialog--md .muka-dialog__surface {
@@ -10149,6 +10443,33 @@ li.muka-listitem {
10149
10443
  }
10150
10444
 
10151
10445
 
10446
+ /* Divider */
10447
+ /* Divider Component Styles - Using Muka Design Tokens */
10448
+
10449
+ .muka-divider {
10450
+ flex-shrink: 0;
10451
+ }
10452
+
10453
+ .muka-divider--horizontal {
10454
+ width: 100%;
10455
+ height: var(--separator-width);
10456
+ }
10457
+
10458
+ .muka-divider--vertical {
10459
+ height: 100%;
10460
+ width: var(--separator-width);
10461
+ align-self: stretch;
10462
+ }
10463
+
10464
+ .muka-divider--default {
10465
+ background-color: var(--separator-color-default);
10466
+ }
10467
+
10468
+ .muka-divider--contrast {
10469
+ background-color: var(--separator-color-contrast);
10470
+ }
10471
+
10472
+
10152
10473
  /* CheckboxTile */
10153
10474
  /* CheckboxTile Component Styles - Using Muka Design Tokens */
10154
10475
 
@@ -10474,62 +10795,198 @@ li.muka-listitem {
10474
10795
  }
10475
10796
 
10476
10797
 
10477
- /* ChatMessageList */
10478
- /* ChatMessageList Component Styles */
10479
-
10480
- .muka-chat-message-list {
10481
- flex: 1 1 auto;
10482
- min-height: 0;
10483
- width: 100%;
10484
- overflow-x: clip;
10485
- overflow-y: auto;
10486
- background-color: var(--color-surface-level3);
10487
- padding: var(--section-padding-vertical-default, var(--spacing-8))
10488
- var(--section-padding-horizontal-default, var(--spacing-4));
10489
- -webkit-overflow-scrolling: touch;
10490
- overscroll-behavior: contain;
10491
- }
10798
+ /* ChatPhotoGrid */
10799
+ /* ChatPhotoGrid Component Styles */
10492
10800
 
10493
- .muka-chat-message-list__inner {
10494
- display: flex;
10495
- flex-direction: column;
10496
- align-items: stretch;
10497
- gap: var(--spacing-8);
10801
+ .muka-chat-photo-grid {
10802
+ display: grid;
10803
+ gap: var(--chatphotogrid-gap);
10498
10804
  width: 100%;
10499
- max-width: 640px;
10500
- margin: 0 auto;
10805
+ min-width: 0;
10501
10806
  }
10502
10807
 
10808
+ /* ─── Tiles ────────────────────────────────────────────── */
10503
10809
 
10504
- /* ChatComposer */
10505
- /* ChatComposer Component Styles */
10506
-
10507
- .muka-chat-composer {
10508
- display: flex;
10509
- flex-direction: column;
10510
- gap: var(--spacing-3);
10511
- width: 100%;
10512
- max-width: 768px;
10810
+ .muka-chat-photo-grid__tile {
10811
+ position: relative;
10812
+ display: block;
10813
+ overflow: hidden;
10814
+ min-width: 0;
10815
+ padding: 0;
10816
+ margin: 0;
10817
+ border: none;
10818
+ border-radius: var(--chatphotogrid-radius);
10819
+ background-color: var(--chatphotogrid-color-placeholder);
10820
+ aspect-ratio: 1 / 1;
10513
10821
  }
10514
10822
 
10515
- .muka-chat-composer--disabled {
10516
- opacity: 0.6;
10517
- pointer-events: none;
10823
+ button.muka-chat-photo-grid__tile {
10824
+ cursor: pointer;
10825
+ appearance: none;
10518
10826
  }
10519
10827
 
10520
- /* ─── Input row ────────────────────────────────────────── */
10828
+ button.muka-chat-photo-grid__tile:focus-visible {
10829
+ outline: var(--border-width-bold) solid var(--color-border-focus);
10830
+ outline-offset: var(--spacing-1);
10831
+ }
10521
10832
 
10522
- .muka-chat-composer__row {
10523
- display: flex;
10833
+ .muka-chat-photo-grid__image {
10834
+ display: block;
10524
10835
  width: 100%;
10525
- align-items: flex-end;
10526
- gap: var(--spacing-3);
10836
+ height: 100%;
10837
+ object-fit: cover;
10527
10838
  }
10528
10839
 
10529
- /* ─── Text field ───────────────────────────────────────── */
10840
+ /* ─── Overflow tile ────────────────────────────────────── */
10530
10841
 
10531
- .muka-chat-composer__field {
10532
- display: flex;
10842
+ .muka-chat-photo-grid__overflow {
10843
+ position: absolute;
10844
+ inset: 0;
10845
+ display: flex;
10846
+ align-items: center;
10847
+ justify-content: center;
10848
+ background-color: var(--chatphotogrid-color-overflow-background);
10849
+ color: var(--chatphotogrid-color-overflow-foreground);
10850
+ font-family: var(--text-body-2xl-regular-fontFamily);
10851
+ font-weight: var(--text-body-2xl-regular-fontWeight);
10852
+ font-size: var(--text-body-2xl-regular-fontSize);
10853
+ line-height: var(--text-body-2xl-regular-lineHeight);
10854
+ }
10855
+
10856
+ /* ─── Layouts ──────────────────────────────────────────── */
10857
+
10858
+ .muka-chat-photo-grid--1 {
10859
+ grid-template-columns: 1fr;
10860
+ }
10861
+
10862
+ .muka-chat-photo-grid--landscape .muka-chat-photo-grid__tile {
10863
+ aspect-ratio: 4 / 3;
10864
+ }
10865
+
10866
+ .muka-chat-photo-grid--portrait .muka-chat-photo-grid__tile {
10867
+ aspect-ratio: 3 / 4;
10868
+ }
10869
+
10870
+ .muka-chat-photo-grid--2 {
10871
+ grid-template-columns: repeat(2, 1fr);
10872
+ }
10873
+
10874
+ .muka-chat-photo-grid--3 {
10875
+ grid-template-columns: repeat(3, 1fr);
10876
+ }
10877
+
10878
+ .muka-chat-photo-grid--4 {
10879
+ grid-template-columns: repeat(2, 1fr);
10880
+ }
10881
+
10882
+ /* 5 photos: a 2-up row above a 3-up row, on a shared 6-column track */
10883
+ .muka-chat-photo-grid--5 {
10884
+ grid-template-columns: repeat(6, 1fr);
10885
+ }
10886
+
10887
+ .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(-n + 2) {
10888
+ grid-column: span 3;
10889
+ }
10890
+
10891
+ .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(n + 3) {
10892
+ grid-column: span 2;
10893
+ }
10894
+
10895
+ .muka-chat-photo-grid--6,
10896
+ .muka-chat-photo-grid--overflow {
10897
+ grid-template-columns: repeat(3, 1fr);
10898
+ }
10899
+
10900
+ /* ─── Print ────────────────────────────────────────────── */
10901
+
10902
+ @media print {
10903
+ .muka-chat-photo-grid {
10904
+ break-inside: avoid;
10905
+ }
10906
+
10907
+ .muka-chat-photo-grid__image {
10908
+ print-color-adjust: exact;
10909
+ -webkit-print-color-adjust: exact;
10910
+ }
10911
+ }
10912
+
10913
+
10914
+ /* ChatMessageList */
10915
+ /* ChatMessageList Component Styles */
10916
+
10917
+ .muka-chat-message-list {
10918
+ flex: 1 1 auto;
10919
+ min-height: 0;
10920
+ width: 100%;
10921
+ overflow-x: clip;
10922
+ overflow-y: auto;
10923
+ background-color: var(--color-surface-level3);
10924
+ padding: var(--section-padding-vertical-default, var(--spacing-8))
10925
+ var(--section-padding-horizontal-default, var(--spacing-4));
10926
+ -webkit-overflow-scrolling: touch;
10927
+ overscroll-behavior: contain;
10928
+ }
10929
+
10930
+ .muka-chat-message-list__inner {
10931
+ display: flex;
10932
+ flex-direction: column;
10933
+ align-items: stretch;
10934
+ gap: var(--spacing-8);
10935
+ width: 100%;
10936
+ max-width: var(--container-max-width-sm);
10937
+ margin: 0 auto;
10938
+ }
10939
+
10940
+ /* ─── Print ────────────────────────────────────────────── */
10941
+
10942
+ @media print {
10943
+ .muka-chat-message-list {
10944
+ overflow: visible;
10945
+ height: auto;
10946
+ max-height: none;
10947
+ background: none;
10948
+ padding: 0;
10949
+ }
10950
+
10951
+ .muka-chat-message-list__inner {
10952
+ max-width: 100%;
10953
+ }
10954
+ }
10955
+
10956
+
10957
+ /* ChatComposer */
10958
+ /* ChatComposer Component Styles */
10959
+
10960
+ /*
10961
+ * The composer is a bare, fill-width row: no padding, background, border or
10962
+ * max-width of its own (Figma 5243:14141). Whatever hosts it owns the
10963
+ * container — see BottomBar's `chat` variant.
10964
+ */
10965
+ .muka-chat-composer {
10966
+ display: flex;
10967
+ flex-direction: column;
10968
+ gap: var(--spacing-3);
10969
+ width: 100%;
10970
+ }
10971
+
10972
+ .muka-chat-composer--disabled {
10973
+ opacity: 0.6;
10974
+ pointer-events: none;
10975
+ }
10976
+
10977
+ /* ─── Input row ────────────────────────────────────────── */
10978
+
10979
+ .muka-chat-composer__row {
10980
+ display: flex;
10981
+ width: 100%;
10982
+ align-items: flex-end;
10983
+ gap: var(--spacing-3);
10984
+ }
10985
+
10986
+ /* ─── Text field ───────────────────────────────────────── */
10987
+
10988
+ .muka-chat-composer__field {
10989
+ display: flex;
10533
10990
  flex: 1 1 auto;
10534
10991
  min-width: 0;
10535
10992
  box-sizing: border-box;
@@ -10616,6 +11073,14 @@ li.muka-listitem {
10616
11073
  transform: translateY(-50%);
10617
11074
  }
10618
11075
 
11076
+ /* ─── Print ────────────────────────────────────────────── */
11077
+
11078
+ @media print {
11079
+ .muka-chat-composer {
11080
+ display: none;
11081
+ }
11082
+ }
11083
+
10619
11084
 
10620
11085
  /* ChatBubble */
10621
11086
  /* ChatBubble Component Styles */
@@ -10623,69 +11088,222 @@ li.muka-listitem {
10623
11088
  .muka-chat-bubble {
10624
11089
  display: flex;
10625
11090
  flex-direction: column;
10626
- gap: var(--spacing-1);
10627
11091
  width: 100%;
10628
11092
  max-width: 100%;
10629
11093
  }
10630
11094
 
10631
- /* ─── User variant — right-aligned bubble ──────────────── */
11095
+ /* ─── Row: avatar rail + bubble + action bar ───────────────
11096
+ *
11097
+ * A two-row grid rather than a flex column, so the avatar bottom-aligns to the
11098
+ * bubble itself and not to the action bar underneath it (Figma 5223:8520).
11099
+ */
10632
11100
 
10633
- .muka-chat-bubble--user {
10634
- align-items: flex-end;
11101
+ .muka-chat-bubble__row {
11102
+ display: grid;
11103
+ grid-template-columns: minmax(0, 1fr);
11104
+ grid-template-areas:
11105
+ 'bubble'
11106
+ 'actions';
11107
+ column-gap: var(--chatbubble-row-gap);
11108
+ row-gap: var(--chatbubble-gap);
11109
+ width: 100%;
10635
11110
  }
10636
11111
 
10637
- .muka-chat-bubble--user .muka-chat-bubble__message {
10638
- background-color: var(--color-surface-level2);
10639
- color: var(--color-text-default-default);
10640
- border-radius: var(--radius-lg);
10641
- padding: var(--spacing-4);
10642
- max-width: min(600px, 100%);
10643
- word-break: break-word;
11112
+ .muka-chat-bubble--has-avatar .muka-chat-bubble__row {
11113
+ grid-template-columns: auto minmax(0, 1fr);
11114
+ grid-template-areas:
11115
+ 'rail bubble'
11116
+ '. actions';
10644
11117
  }
10645
11118
 
10646
- .muka-chat-bubble--user .muka-chat-bubble__meta {
10647
- justify-content: flex-end;
11119
+ .muka-chat-bubble--own.muka-chat-bubble--has-avatar .muka-chat-bubble__row {
11120
+ grid-template-columns: minmax(0, 1fr) auto;
11121
+ grid-template-areas:
11122
+ 'bubble rail'
11123
+ 'actions .';
10648
11124
  }
10649
11125
 
10650
- /* ─── Agent variant — no bubble, full width ────────────── */
10651
-
10652
- .muka-chat-bubble--agent {
10653
- align-items: flex-start;
11126
+ .muka-chat-bubble__rail {
11127
+ grid-area: rail;
11128
+ /* Sits on the bubble's baseline, above the action bar */
11129
+ align-self: end;
11130
+ display: flex;
11131
+ justify-content: center;
11132
+ min-width: var(--chatbubble-avatar-size);
10654
11133
  }
10655
11134
 
10656
- .muka-chat-bubble--agent .muka-chat-bubble__message {
10657
- color: var(--color-text-default-default);
10658
- padding: 0 var(--spacing-2);
11135
+ /* ─── Bubble surface ───────────────────────────────────── */
11136
+
11137
+ .muka-chat-bubble__bubble {
11138
+ grid-area: bubble;
11139
+ max-width: var(--chatbubble-max-width);
11140
+ position: relative;
11141
+ display: flex;
11142
+ flex-direction: column;
11143
+ gap: var(--chatbubble-gap);
10659
11144
  width: 100%;
11145
+ padding: var(--chatbubble-padding);
11146
+ border-radius: var(--chatbubble-radius);
11147
+ border: var(--border-width-regular) solid transparent;
10660
11148
  word-break: break-word;
10661
11149
  }
10662
11150
 
10663
- .muka-chat-bubble--agent .muka-chat-bubble__meta {
10664
- justify-content: flex-start;
11151
+ .muka-chat-bubble--own .muka-chat-bubble__bubble,
11152
+ .muka-chat-bubble--own .muka-chat-bubble__actions {
11153
+ justify-self: end;
10665
11154
  }
10666
11155
 
10667
- /* ─── Message typography ───────────────────────────────── */
11156
+ .muka-chat-bubble--own .muka-chat-bubble__bubble {
11157
+ background-color: var(--chatbubble-color-own-background);
11158
+ border-color: var(--chatbubble-color-own-border);
11159
+ color: var(--chatbubble-color-own-foreground);
11160
+ /* Room for the inset timestamp in the bottom-right corner */
11161
+ padding-right: var(--spacing-6);
11162
+ }
11163
+
11164
+ .muka-chat-bubble--peer .muka-chat-bubble__bubble {
11165
+ background-color: var(--chatbubble-color-peer-background);
11166
+ border-color: var(--chatbubble-color-peer-border);
11167
+ color: var(--chatbubble-color-peer-foreground);
11168
+ box-shadow: var(--shadow-level2);
11169
+ }
11170
+
11171
+ .muka-chat-bubble--agent .muka-chat-bubble__bubble {
11172
+ background-color: var(--chatbubble-color-agent-background);
11173
+ border-color: var(--chatbubble-color-agent-border);
11174
+ color: var(--chatbubble-color-agent-foreground);
11175
+ }
11176
+
11177
+ /* ─── Header row (author · meta · time · badge) ────────── */
11178
+
11179
+ .muka-chat-bubble__header {
11180
+ display: flex;
11181
+ flex-flow: row wrap;
11182
+ align-items: center;
11183
+ gap: var(--chatbubble-row-gap);
11184
+ }
11185
+
11186
+ .muka-chat-bubble__author {
11187
+ font-family: var(--text-body-base-bold-fontFamily);
11188
+ font-weight: var(--text-body-base-bold-fontWeight);
11189
+ font-size: var(--text-body-base-bold-fontSize);
11190
+ line-height: var(--text-body-base-bold-lineHeight);
11191
+ }
11192
+
11193
+ .muka-chat-bubble__author-meta {
11194
+ /* Inherits the variant's body colour from the bubble */
11195
+ color: inherit;
11196
+ font-family: var(--text-body-base-regular-fontFamily);
11197
+ font-weight: var(--text-body-base-regular-fontWeight);
11198
+ font-size: var(--text-body-base-regular-fontSize);
11199
+ line-height: var(--text-body-base-regular-lineHeight);
11200
+ }
11201
+
11202
+ .muka-chat-bubble__badge {
11203
+ display: inline-flex;
11204
+ align-items: center;
11205
+ }
11206
+
11207
+ /*
11208
+ * Keep the first line of content clear of the absolutely positioned menu
11209
+ * button in the bubble's top-right corner.
11210
+ */
11211
+ .muka-chat-bubble--has-menu .muka-chat-bubble__header,
11212
+ .muka-chat-bubble--has-menu.muka-chat-bubble--no-header .muka-chat-bubble__message {
11213
+ padding-right: var(--spacing-6);
11214
+ }
11215
+
11216
+ /* ─── Body ─────────────────────────────────────────────── */
11217
+
11218
+ .muka-chat-bubble__body {
11219
+ display: flex;
11220
+ flex-direction: column;
11221
+ gap: var(--chatbubble-gap);
11222
+ min-width: 0;
11223
+ }
11224
+
11225
+ /* The agent balloon spaces its blocks further apart (Figma 5223:8520) */
11226
+ .muka-chat-bubble--agent .muka-chat-bubble__body {
11227
+ gap: var(--chatbubble-body-gap);
11228
+ }
11229
+
11230
+ .muka-chat-bubble__media {
11231
+ min-width: 0;
11232
+ }
10668
11233
 
10669
11234
  .muka-chat-bubble__message {
10670
11235
  font-family: var(--text-body-base-regular-fontFamily);
10671
11236
  font-weight: var(--text-body-base-regular-fontWeight);
10672
11237
  font-size: var(--text-body-base-regular-fontSize);
10673
11238
  line-height: var(--text-body-base-regular-lineHeight);
11239
+ white-space: pre-wrap;
11240
+ word-break: break-word;
11241
+ }
11242
+
11243
+ /* Empty message block should not add a gap of its own */
11244
+ .muka-chat-bubble__message:empty {
11245
+ display: none;
11246
+ }
11247
+
11248
+ /* ─── Embedded card ────────────────────────────────────── */
11249
+
11250
+ .muka-chat-bubble__embed {
11251
+ position: relative;
11252
+ display: flex;
11253
+ flex-direction: column;
11254
+ gap: var(--chatbubble-embed-gap);
11255
+ padding: var(--chatbubble-embed-padding);
11256
+ border-radius: var(--chatbubble-embed-radius);
11257
+ border: var(--border-width-regular) solid transparent;
11258
+ }
11259
+
11260
+ /*
11261
+ * The embed sits on the raised surface of its author's role, one step apart
11262
+ * from the bubble it is nested in, and reuses that role's border colour.
11263
+ */
11264
+ .muka-chat-bubble--own .muka-chat-bubble__embed {
11265
+ background-color: var(--chatbubble-embed-color-own-background);
11266
+ border-color: var(--chatbubble-embed-color-own-border);
11267
+ color: var(--chatbubble-embed-color-own-foreground);
11268
+ }
11269
+
11270
+ .muka-chat-bubble--peer .muka-chat-bubble__embed {
11271
+ background-color: var(--chatbubble-embed-color-peer-background);
11272
+ border-color: var(--chatbubble-embed-color-peer-border);
11273
+ color: var(--chatbubble-embed-color-peer-foreground);
10674
11274
  }
10675
11275
 
10676
- /* ─── Meta row (timestamp + actions) ───────────────────── */
11276
+ .muka-chat-bubble--agent .muka-chat-bubble__embed {
11277
+ background-color: var(--chatbubble-embed-color-agent-background);
11278
+ border-color: var(--chatbubble-embed-color-agent-border);
11279
+ color: var(--chatbubble-embed-color-agent-foreground);
11280
+ }
10677
11281
 
10678
- .muka-chat-bubble__meta {
11282
+ .muka-chat-bubble__embed-content {
10679
11283
  display: flex;
10680
- align-items: center;
10681
- gap: var(--spacing-1);
11284
+ flex-direction: column;
11285
+ gap: var(--chatbubble-embed-gap);
11286
+ min-width: 0;
11287
+ }
11288
+
11289
+ .muka-chat-bubble__embed-copy {
11290
+ position: absolute;
11291
+ top: var(--chatbubble-embed-padding);
11292
+ right: var(--chatbubble-embed-padding);
11293
+ }
11294
+
11295
+ /* ─── Stacked full-width action buttons ────────────────── */
11296
+
11297
+ .muka-chat-bubble__action-stack {
11298
+ display: flex;
11299
+ flex-direction: column;
11300
+ gap: var(--chatbubble-action-stack-gap);
10682
11301
  }
10683
11302
 
11303
+ /* ─── Inset timestamp (user variant) ───────────────────── */
11304
+
10684
11305
  .muka-chat-bubble__timestamp {
10685
- display: inline-flex;
10686
- align-items: center;
10687
- padding: 0 var(--spacing-2);
10688
- color: var(--color-text-subtle-default);
11306
+ color: var(--chatbubble-color-timestamp);
10689
11307
  font-family: var(--text-body-sm-regular-fontFamily);
10690
11308
  font-weight: var(--text-body-sm-regular-fontWeight);
10691
11309
  font-size: var(--text-body-sm-regular-fontSize);
@@ -10693,12 +11311,79 @@ li.muka-listitem {
10693
11311
  white-space: nowrap;
10694
11312
  }
10695
11313
 
11314
+ .muka-chat-bubble__timestamp--inset {
11315
+ align-self: flex-end;
11316
+ }
11317
+
11318
+ /* ─── Menu affordance ──────────────────────────────────── */
11319
+
11320
+ .muka-chat-bubble__menu {
11321
+ position: absolute;
11322
+ top: var(--spacing-1);
11323
+ right: var(--spacing-1);
11324
+ }
11325
+
11326
+ /* ─── Meta action row (below the bubble) ───────────────── */
11327
+
10696
11328
  .muka-chat-bubble__actions {
11329
+ grid-area: actions;
11330
+ max-width: var(--chatbubble-max-width);
10697
11331
  display: flex;
10698
11332
  align-items: center;
10699
11333
  gap: 0;
10700
11334
  }
10701
11335
 
11336
+ .muka-chat-bubble--own .muka-chat-bubble__actions,
11337
+ .muka-chat-bubble--agent .muka-chat-bubble__actions {
11338
+ justify-content: flex-end;
11339
+ }
11340
+
11341
+ /*
11342
+ * The meta row uses 32px icon buttons per the design. Expand the pointer/touch
11343
+ * target to the 44px WCAG 2.1 AA minimum without changing the visual size.
11344
+ */
11345
+ .muka-chat-bubble__actions .muka-button--icon-only {
11346
+ position: relative;
11347
+ }
11348
+
11349
+ .muka-chat-bubble__actions .muka-button--icon-only::after {
11350
+ content: '';
11351
+ position: absolute;
11352
+ top: 50%;
11353
+ left: 50%;
11354
+ width: 44px;
11355
+ height: 44px;
11356
+ transform: translate(-50%, -50%);
11357
+ }
11358
+
11359
+ /* ─── Print ────────────────────────────────────────────── */
11360
+
11361
+ @media print {
11362
+ .muka-chat-bubble__bubble {
11363
+ box-shadow: none;
11364
+ break-inside: avoid;
11365
+ print-color-adjust: exact;
11366
+ -webkit-print-color-adjust: exact;
11367
+ }
11368
+
11369
+ .muka-chat-bubble__embed {
11370
+ break-inside: avoid;
11371
+ print-color-adjust: exact;
11372
+ -webkit-print-color-adjust: exact;
11373
+ }
11374
+
11375
+ .muka-chat-bubble__menu,
11376
+ .muka-chat-bubble__actions,
11377
+ .muka-chat-bubble__embed-copy,
11378
+ .muka-chat-bubble__action-stack {
11379
+ display: none;
11380
+ }
11381
+
11382
+ .muka-chat-bubble__column {
11383
+ max-width: 100%;
11384
+ }
11385
+ }
11386
+
10702
11387
 
10703
11388
  /* ChatAttachmentChip */
10704
11389
  /* ChatAttachmentChip Component Styles */
@@ -11066,10 +11751,13 @@ li.muka-listitem {
11066
11751
  }
11067
11752
 
11068
11753
  /* `[data-state="open"]` keeps a Button pressed while it's an open disclosure
11069
- trigger (Radix Menu/Popover set this on the trigger). */
11754
+ trigger (Radix Menu/Popover set this on the trigger). `[aria-pressed="true"]`
11755
+ gives toggle buttons a visible selected state, so the toggle is not conveyed
11756
+ to sighted users by the accessibility tree alone. */
11070
11757
  .muka-button--primary:active:not(:disabled),
11071
11758
  .muka-button--primary.muka-button--pressed:not(:disabled),
11072
- .muka-button--primary[data-state="open"]:not(:disabled) {
11759
+ .muka-button--primary[data-state="open"]:not(:disabled),
11760
+ .muka-button--primary[aria-pressed="true"]:not(:disabled) {
11073
11761
  background-color: var(--button-color-primary-background-pressed);
11074
11762
  color: var(--button-color-primary-foreground-pressed);
11075
11763
  box-shadow: var(--button-color-primary-shadow-pressed);
@@ -11098,7 +11786,8 @@ li.muka-listitem {
11098
11786
 
11099
11787
  .muka-button--secondary:active:not(:disabled),
11100
11788
  .muka-button--secondary.muka-button--pressed:not(:disabled),
11101
- .muka-button--secondary[data-state="open"]:not(:disabled) {
11789
+ .muka-button--secondary[data-state="open"]:not(:disabled),
11790
+ .muka-button--secondary[aria-pressed="true"]:not(:disabled) {
11102
11791
  background-color: var(--button-color-secondary-background-pressed);
11103
11792
  color: var(--button-color-secondary-foreground-pressed);
11104
11793
  box-shadow: var(--button-color-secondary-shadow-pressed);
@@ -11127,7 +11816,8 @@ li.muka-listitem {
11127
11816
 
11128
11817
  .muka-button--tertiary:active:not(:disabled),
11129
11818
  .muka-button--tertiary.muka-button--pressed:not(:disabled),
11130
- .muka-button--tertiary[data-state="open"]:not(:disabled) {
11819
+ .muka-button--tertiary[data-state="open"]:not(:disabled),
11820
+ .muka-button--tertiary[aria-pressed="true"]:not(:disabled) {
11131
11821
  background-color: var(--button-color-tertiary-background-pressed);
11132
11822
  color: var(--button-color-tertiary-foreground-pressed);
11133
11823
  border-color: var(--button-color-tertiary-border-pressed);
@@ -11156,7 +11846,8 @@ li.muka-listitem {
11156
11846
 
11157
11847
  .muka-button--ghost:active:not(:disabled),
11158
11848
  .muka-button--ghost.muka-button--pressed:not(:disabled),
11159
- .muka-button--ghost[data-state="open"]:not(:disabled) {
11849
+ .muka-button--ghost[data-state="open"]:not(:disabled),
11850
+ .muka-button--ghost[aria-pressed="true"]:not(:disabled) {
11160
11851
  background-color: var(--button-color-ghost-background-pressed);
11161
11852
  color: var(--button-color-ghost-foreground-pressed);
11162
11853
  border-color: var(--button-color-ghost-border-pressed);
@@ -11185,7 +11876,8 @@ li.muka-listitem {
11185
11876
 
11186
11877
  .muka-button--muted:active:not(:disabled),
11187
11878
  .muka-button--muted.muka-button--pressed:not(:disabled),
11188
- .muka-button--muted[data-state="open"]:not(:disabled) {
11879
+ .muka-button--muted[data-state="open"]:not(:disabled),
11880
+ .muka-button--muted[aria-pressed="true"]:not(:disabled) {
11189
11881
  background-color: var(--button-color-muted-background-pressed);
11190
11882
  color: var(--button-color-muted-foreground-pressed);
11191
11883
  border-color: var(--button-color-muted-border-pressed);
@@ -11422,6 +12114,25 @@ li.muka-listitem {
11422
12114
  flex-direction: row;
11423
12115
  }
11424
12116
 
12117
+ /* ─── Chat variant (houses a ChatComposer) ───────────── */
12118
+
12119
+ .muka-bottombar--chat .muka-bottombar__content {
12120
+ flex-direction: row;
12121
+ max-width: var(--bottombar-chat-max-width);
12122
+ width: 100%;
12123
+ margin: 0 auto;
12124
+ }
12125
+
12126
+ /* Docked chat pads its content; the floating card supplies its own padding. */
12127
+ .muka-bottombar--chat:not(.muka-bottombar--floating) .muka-bottombar__content {
12128
+ padding: var(--bottombar-chat-padding);
12129
+ }
12130
+
12131
+ /* Floating chat card widens to the chat cap (overrides the md default below). */
12132
+ .muka-bottombar--chat.muka-bottombar--floating .muka-bottombar__content {
12133
+ max-width: var(--bottombar-chat-max-width);
12134
+ }
12135
+
11425
12136
  /* ─── Tab item ────────────────────────────────────────── */
11426
12137
 
11427
12138
  .muka-bottombar__tab {
@@ -11478,8 +12189,6 @@ li.muka-listitem {
11478
12189
  var(--bottombar-floating-backdrop-start),
11479
12190
  var(--bottombar-floating-backdrop-end)
11480
12191
  );
11481
- backdrop-filter: blur(var(--bottombar-floating-backdrop-blur));
11482
- -webkit-backdrop-filter: blur(var(--bottombar-floating-backdrop-blur));
11483
12192
  padding: var(--bottombar-floating-padding-top) var(--bottombar-floating-margin-x) var(--bottombar-floating-margin-bottom);
11484
12193
 
11485
12194
  /* The transparent frosted margin around the pill overlays scrolling content;
@@ -11635,10 +12344,18 @@ li.muka-listitem {
11635
12344
  }
11636
12345
  }
11637
12346
 
12347
+ /* ─── Print ────────────────────────────────────────────── */
12348
+
12349
+ @media print {
12350
+ .muka-bottombar {
12351
+ display: none;
12352
+ }
12353
+ }
12354
+
12355
+
12356
+ /* Badge */
12357
+ /* Badge Component Styles - Using Muka Design Tokens */
11638
12358
 
11639
- /* Badge */
11640
- /* Badge Component Styles - Using Muka Design Tokens */
11641
-
11642
12359
  .muka-badge {
11643
12360
  display: inline-flex;
11644
12361
  align-items: center;
@@ -12410,12 +13127,19 @@ li.muka-listitem {
12410
13127
  margin: 0;
12411
13128
  cursor: pointer;
12412
13129
  color: var(--color-text-subtle-default);
13130
+ font-family: var(--text-body-sm-regular-fontFamily);
13131
+ font-weight: var(--text-body-sm-regular-fontWeight);
13132
+ font-size: var(--text-body-sm-regular-fontSize);
13133
+ line-height: var(--text-body-sm-regular-lineHeight);
13134
+ text-align: left;
13135
+ -webkit-tap-highlight-color: transparent;
13136
+ }
13137
+
13138
+ .muka-agent-task-list--open .muka-agent-task-list__header {
12413
13139
  font-family: var(--text-body-sm-bold-fontFamily);
12414
13140
  font-weight: var(--text-body-sm-bold-fontWeight);
12415
13141
  font-size: var(--text-body-sm-bold-fontSize);
12416
13142
  line-height: var(--text-body-sm-bold-lineHeight);
12417
- text-align: left;
12418
- -webkit-tap-highlight-color: transparent;
12419
13143
  }
12420
13144
 
12421
13145
  .muka-agent-task-list__header:focus-visible {
@@ -12473,7 +13197,7 @@ li.muka-listitem {
12473
13197
  position: absolute;
12474
13198
  left: 7px;
12475
13199
  width: 1px;
12476
- background-color: var(--color-border-default, #d9d9d9);
13200
+ background-color: var(--color-border-default);
12477
13201
  }
12478
13202
 
12479
13203
  .muka-agent-task-list__line--top {
@@ -12536,6 +13260,18 @@ li.muka-listitem {
12536
13260
  word-break: break-word;
12537
13261
  }
12538
13262
 
13263
+ /* ─── Print ────────────────────────────────────────────── */
13264
+
13265
+ @media print {
13266
+ .muka-agent-task-list {
13267
+ break-inside: avoid;
13268
+ }
13269
+
13270
+ .muka-agent-task-list__chevron {
13271
+ display: none;
13272
+ }
13273
+ }
13274
+
12539
13275
 
12540
13276
  /* ActionSheet */
12541
13277
  /* ActionSheet Component Styles */
@@ -12809,265 +13545,3 @@ li.muka-listitem {
12809
13545
  border-bottom: none;
12810
13546
  }
12811
13547
 
12812
-
12813
- /* FileUpload */
12814
- /* FileUpload Component Styles */
12815
-
12816
- .muka-fileupload-wrapper {
12817
- display: flex;
12818
- flex-direction: column;
12819
- gap: var(--spacing-3);
12820
- width: 100%;
12821
- }
12822
-
12823
- /* Dropzone */
12824
- .muka-fileupload {
12825
- display: flex;
12826
- flex-direction: column;
12827
- align-items: center;
12828
- justify-content: center;
12829
- gap: var(--fileupload-dropzone-gap);
12830
- padding: var(--fileupload-dropzone-padding-md);
12831
- background-color: var(--fileupload-dropzone-color-default-background);
12832
- border: var(--fileupload-dropzone-border-width) dashed var(--fileupload-dropzone-color-default-border);
12833
- border-radius: var(--fileupload-dropzone-radius);
12834
- cursor: pointer;
12835
- transition: background-color 0.2s ease, border-color 0.2s ease;
12836
- text-align: center;
12837
- min-height: 120px;
12838
- }
12839
-
12840
- .muka-fileupload:focus-visible {
12841
- outline: 2px solid var(--color-border-focus);
12842
- outline-offset: 2px;
12843
- }
12844
-
12845
- /* Size variants */
12846
- .muka-fileupload--sm {
12847
- padding: var(--fileupload-dropzone-padding-sm);
12848
- min-height: 80px;
12849
- }
12850
-
12851
- .muka-fileupload--lg {
12852
- padding: var(--fileupload-dropzone-padding-lg);
12853
- min-height: 160px;
12854
- }
12855
-
12856
- /* Button variant */
12857
- .muka-fileupload--button {
12858
- flex-direction: row;
12859
- min-height: auto;
12860
- padding: var(--spacing-2) var(--spacing-3);
12861
- border-style: solid;
12862
- border-width: var(--border-width-regular);
12863
- border-radius: var(--border-radius-md);
12864
- }
12865
-
12866
- /* Hover state */
12867
- .muka-fileupload:hover:not(.muka-fileupload--disabled) {
12868
- background-color: var(--fileupload-dropzone-color-hover-background);
12869
- border-color: var(--fileupload-dropzone-color-hover-border);
12870
- }
12871
-
12872
- /* Active/drag state */
12873
- .muka-fileupload--active:not(.muka-fileupload--disabled) {
12874
- background-color: var(--fileupload-dropzone-color-active-background);
12875
- border-color: var(--fileupload-dropzone-color-active-border);
12876
- }
12877
-
12878
- /* Disabled state */
12879
- .muka-fileupload--disabled {
12880
- background-color: var(--fileupload-dropzone-color-disabled-background);
12881
- border-color: var(--fileupload-dropzone-color-disabled-border);
12882
- cursor: not-allowed;
12883
- opacity: 0.6;
12884
- }
12885
-
12886
- /* Hidden file input */
12887
- .muka-fileupload__input {
12888
- position: absolute;
12889
- width: 1px;
12890
- height: 1px;
12891
- padding: 0;
12892
- margin: -1px;
12893
- overflow: hidden;
12894
- clip: rect(0, 0, 0, 0);
12895
- white-space: nowrap;
12896
- border: 0;
12897
- }
12898
-
12899
- /* Content container */
12900
- .muka-fileupload__content {
12901
- display: flex;
12902
- flex-direction: column;
12903
- align-items: center;
12904
- gap: var(--spacing-2);
12905
- }
12906
-
12907
- /* Upload icon */
12908
- .muka-fileupload__icon {
12909
- display: flex;
12910
- align-items: center;
12911
- justify-content: center;
12912
- width: var(--size-3xl);
12913
- height: var(--size-3xl);
12914
- color: var(--fileupload-dropzone-color-default-foreground);
12915
- }
12916
-
12917
- .muka-fileupload__icon svg {
12918
- width: 100%;
12919
- height: 100%;
12920
- }
12921
-
12922
- .muka-fileupload--sm .muka-fileupload__icon {
12923
- width: var(--size-2xl);
12924
- height: var(--size-2xl);
12925
- }
12926
-
12927
- .muka-fileupload--lg .muka-fileupload__icon {
12928
- width: var(--size-4xl);
12929
- height: var(--size-4xl);
12930
- }
12931
-
12932
- /* Text */
12933
- .muka-fileupload__text {
12934
- font-family: var(--text-body-md-regular-fontFamily);
12935
- font-size: var(--text-body-md-regular-fontSize);
12936
- font-weight: var(--text-body-md-regular-fontWeight);
12937
- line-height: var(--text-body-md-regular-lineHeight);
12938
- color: var(--color-text-default-default);
12939
- }
12940
-
12941
- .muka-fileupload--sm .muka-fileupload__text {
12942
- font-size: var(--text-body-sm-regular-fontSize);
12943
- }
12944
-
12945
- /* Hint text */
12946
- .muka-fileupload__hint {
12947
- font-family: var(--text-label-sm-regular-fontFamily);
12948
- font-size: var(--text-label-sm-regular-fontSize);
12949
- font-weight: var(--text-label-sm-regular-fontWeight);
12950
- line-height: var(--text-label-sm-regular-lineHeight);
12951
- color: var(--fileupload-dropzone-color-default-foreground);
12952
- }
12953
-
12954
- /* File list */
12955
- .muka-fileupload__list {
12956
- display: flex;
12957
- flex-direction: column;
12958
- gap: var(--spacing-2);
12959
- list-style: none;
12960
- margin: 0;
12961
- padding: 0;
12962
- }
12963
-
12964
- .muka-fileupload__list li {
12965
- margin: 0;
12966
- padding: 0;
12967
- }
12968
-
12969
- /* File item */
12970
- .muka-fileupload-item {
12971
- display: flex;
12972
- align-items: center;
12973
- gap: var(--fileupload-item-gap);
12974
- padding: var(--fileupload-item-padding-y) var(--fileupload-item-padding-x);
12975
- background-color: var(--fileupload-item-color-default-background);
12976
- border-radius: var(--fileupload-item-radius);
12977
- }
12978
-
12979
- .muka-fileupload-item--error {
12980
- background-color: var(--fileupload-item-color-error-background);
12981
- }
12982
-
12983
- .muka-fileupload-item--success {
12984
- background-color: var(--fileupload-item-color-default-background);
12985
- }
12986
-
12987
- /* Preview/Icon container */
12988
- .muka-fileupload-item__preview {
12989
- display: flex;
12990
- align-items: center;
12991
- justify-content: center;
12992
- flex-shrink: 0;
12993
- width: var(--fileupload-preview-size);
12994
- height: var(--fileupload-preview-size);
12995
- border-radius: var(--fileupload-preview-radius);
12996
- overflow: hidden;
12997
- background-color: var(--color-surface-level1);
12998
- }
12999
-
13000
- .muka-fileupload-item__thumbnail {
13001
- width: 100%;
13002
- height: 100%;
13003
- object-fit: cover;
13004
- }
13005
-
13006
- .muka-fileupload-item__icon {
13007
- color: var(--color-text-subtle-default);
13008
- }
13009
-
13010
- /* File info */
13011
- .muka-fileupload-item__info {
13012
- flex: 1;
13013
- min-width: 0;
13014
- display: flex;
13015
- flex-direction: column;
13016
- gap: var(--spacing-1);
13017
- }
13018
-
13019
- .muka-fileupload-item__name {
13020
- font-family: var(--text-body-sm-medium-fontFamily);
13021
- font-size: var(--text-body-sm-medium-fontSize);
13022
- font-weight: var(--text-body-sm-medium-fontWeight);
13023
- line-height: var(--text-body-sm-medium-lineHeight);
13024
- color: var(--fileupload-item-color-default-foreground);
13025
- white-space: nowrap;
13026
- overflow: hidden;
13027
- text-overflow: ellipsis;
13028
- }
13029
-
13030
- .muka-fileupload-item--error .muka-fileupload-item__name {
13031
- color: var(--fileupload-item-color-error-foreground);
13032
- }
13033
-
13034
- .muka-fileupload-item__meta {
13035
- font-family: var(--text-label-sm-regular-fontFamily);
13036
- font-size: var(--text-label-sm-regular-fontSize);
13037
- font-weight: var(--text-label-sm-regular-fontWeight);
13038
- line-height: var(--text-label-sm-regular-lineHeight);
13039
- color: var(--color-text-subtle-default);
13040
- }
13041
-
13042
- .muka-fileupload-item__error {
13043
- color: var(--fileupload-item-color-error-foreground);
13044
- }
13045
-
13046
- .muka-fileupload-item__progress {
13047
- margin-top: var(--spacing-1);
13048
- }
13049
-
13050
- /* Actions */
13051
- .muka-fileupload-item__actions {
13052
- display: flex;
13053
- align-items: center;
13054
- gap: var(--spacing-2);
13055
- flex-shrink: 0;
13056
- }
13057
-
13058
- .muka-fileupload-item__status-icon--success {
13059
- color: var(--color-state-success-foreground);
13060
- }
13061
-
13062
- .muka-fileupload-item__status-icon--error {
13063
- color: var(--color-state-error-foreground);
13064
- }
13065
-
13066
- .muka-fileupload-item__remove {
13067
- opacity: 0.7;
13068
- }
13069
-
13070
- .muka-fileupload-item__remove:hover {
13071
- opacity: 1;
13072
- }
13073
-