@revikornmann/muka-ui 0.27.1 → 0.27.3

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 (40) hide show
  1. package/dist/cjs/components/Avatar/Avatar.css +45 -11
  2. package/dist/cjs/components/Avatar/Avatar.js +4 -1
  3. package/dist/cjs/components/Avatar/Avatar.js.map +1 -1
  4. package/dist/cjs/components/Avatar/AvatarGroup.js +4 -2
  5. package/dist/cjs/components/Avatar/AvatarGroup.js.map +1 -1
  6. package/dist/cjs/components/Tabs/Tabs.js +6 -3
  7. package/dist/cjs/components/Tabs/Tabs.js.map +1 -1
  8. package/dist/esm/components/Avatar/Avatar.css +45 -11
  9. package/dist/esm/components/Avatar/Avatar.js +4 -1
  10. package/dist/esm/components/Avatar/Avatar.js.map +1 -1
  11. package/dist/esm/components/Avatar/AvatarGroup.js +4 -2
  12. package/dist/esm/components/Avatar/AvatarGroup.js.map +1 -1
  13. package/dist/esm/components/Tabs/Tabs.js +6 -3
  14. package/dist/esm/components/Tabs/Tabs.js.map +1 -1
  15. package/dist/styles/components/Avatar.css +45 -11
  16. package/dist/styles/index.css +766 -724
  17. package/dist/styles/muka-dark.css +766 -724
  18. package/dist/styles/muka-light.css +766 -724
  19. package/dist/styles/tokens-bouwplan-dark.css +15 -7
  20. package/dist/styles/tokens-bouwplan-light.css +15 -7
  21. package/dist/styles/tokens-fscl-dark.css +15 -7
  22. package/dist/styles/tokens-fscl-light.css +15 -7
  23. package/dist/styles/tokens-grip-dark.css +15 -7
  24. package/dist/styles/tokens-grip-light.css +15 -7
  25. package/dist/styles/tokens-muka-dark.css +15 -7
  26. package/dist/styles/tokens-muka-light.css +15 -7
  27. package/dist/styles/tokens-wireframe-dark.css +15 -7
  28. package/dist/styles/tokens-wireframe-light.css +15 -7
  29. package/dist/styles/wireframe-dark.css +766 -724
  30. package/dist/styles/wireframe-light.css +766 -724
  31. package/dist/types/components/Avatar/Avatar.d.ts +4 -1
  32. package/dist/types/components/Avatar/Avatar.d.ts.map +1 -1
  33. package/dist/types/components/Avatar/AvatarGroup.d.ts +8 -0
  34. package/dist/types/components/Avatar/AvatarGroup.d.ts.map +1 -1
  35. package/dist/types/components/Tabs/Tabs.d.ts.map +1 -1
  36. package/docs/consumers/brand.md +6 -2
  37. package/docs/consumers/setup-instructions.md +35 -3
  38. package/package.json +1 -1
  39. package/skills/setup-muka/SKILL.md +36 -3
  40. package/tokens/t4-components/avatar.json +46 -8
@@ -2053,9 +2053,16 @@ body {
2053
2053
  --avatar-size-md: 4rem;
2054
2054
  --avatar-size-lg: 5rem;
2055
2055
  --avatar-size-xl: 7rem;
2056
+ --avatar-icon-size-3xs: 1rem;
2057
+ --avatar-icon-size-2xs: 1.25rem;
2058
+ --avatar-icon-size-xs: 1.5rem;
2059
+ --avatar-icon-size-sm: 2rem;
2060
+ --avatar-icon-size-md: 2.5rem;
2061
+ --avatar-icon-size-lg: 3rem;
2062
+ --avatar-icon-size-xl: 4rem;
2056
2063
  --avatar-color-background-default: #f2eff3;
2057
2064
  --avatar-color-background-loading: #eae7ec;
2058
- --avatar-color-foreground-default: #211f26;
2065
+ --avatar-color-foreground-default: #8e8c99;
2059
2066
  --avatar-color-foreground-muted: #d0cdd7;
2060
2067
  --avatar-color-status-online: #027864;
2061
2068
  --avatar-color-status-offline: #d0cdd7;
@@ -2080,15 +2087,16 @@ body {
2080
2087
  --avatar-status-size-xl: 1.5rem;
2081
2088
  --avatar-group-ring-width: 0.125rem;
2082
2089
  --avatar-group-ring-color: #fdfcfd;
2083
- --avatar-group-overlap-tight-sm: 2rem;
2084
- --avatar-group-overlap-tight-2xs: 1.25rem;
2090
+ --avatar-group-overlap-tight-xs: 1.75rem;
2091
+ --avatar-group-overlap-tight-2xs: 1.5rem;
2085
2092
  --avatar-group-overlap-tight-3xs: 1rem;
2086
- --avatar-group-overlap-compact-sm: 1.5rem;
2087
- --avatar-group-overlap-compact-2xs: 1rem;
2088
- --avatar-group-overlap-compact-3xs: 0.75rem;
2089
- --avatar-group-overlap-spacious-sm: 1rem;
2093
+ --avatar-group-overlap-compact-xs: 1.5rem;
2094
+ --avatar-group-overlap-compact-2xs: 1.125rem;
2095
+ --avatar-group-overlap-compact-3xs: 0.875rem;
2096
+ --avatar-group-overlap-spacious-xs: 1rem;
2090
2097
  --avatar-group-overlap-spacious-2xs: 0.75rem;
2091
2098
  --avatar-group-overlap-spacious-3xs: 0.5rem;
2099
+ --avatar-group-badge-offset: 0.25rem;
2092
2100
  --toast-color-info-background: #211f26;
2093
2101
  --toast-color-info-foreground: #fdfcfd;
2094
2102
  --toast-color-info-accent: #edf2fe;
@@ -2462,38 +2470,6 @@ body {
2462
2470
  }
2463
2471
 
2464
2472
 
2465
- /* VoiceMessage */
2466
- /* VoiceMessage Component Styles */
2467
-
2468
- .muka-voice-message {
2469
- display: flex;
2470
- align-items: center;
2471
- gap: var(--spacing-3);
2472
- width: 100%;
2473
- min-width: min(16rem, 60vw);
2474
- }
2475
-
2476
- .muka-voice-message__wave {
2477
- flex: 1 1 auto;
2478
- min-width: 0;
2479
- }
2480
-
2481
- .muka-voice-message__time {
2482
- flex: 0 0 auto;
2483
- white-space: nowrap;
2484
- font-size: var(--text-label-sm-fontSize, 0.75rem);
2485
- line-height: var(--text-label-sm-lineHeight, 1);
2486
- font-variant-numeric: tabular-nums;
2487
- color: var(--color-text-subtle-default);
2488
- }
2489
-
2490
- /* On the tinted own bubble the surface is the action color, so the timer flips
2491
- * to the inverse text token for contrast. */
2492
- .muka-voice-message--own .muka-voice-message__time {
2493
- color: var(--color-text-default-inverse);
2494
- }
2495
-
2496
-
2497
2473
  /* View */
2498
2474
  /* View Component Styles */
2499
2475
 
@@ -2604,6 +2580,38 @@ body {
2604
2580
  }
2605
2581
 
2606
2582
 
2583
+ /* VoiceMessage */
2584
+ /* VoiceMessage Component Styles */
2585
+
2586
+ .muka-voice-message {
2587
+ display: flex;
2588
+ align-items: center;
2589
+ gap: var(--spacing-3);
2590
+ width: 100%;
2591
+ min-width: min(16rem, 60vw);
2592
+ }
2593
+
2594
+ .muka-voice-message__wave {
2595
+ flex: 1 1 auto;
2596
+ min-width: 0;
2597
+ }
2598
+
2599
+ .muka-voice-message__time {
2600
+ flex: 0 0 auto;
2601
+ white-space: nowrap;
2602
+ font-size: var(--text-label-sm-fontSize, 0.75rem);
2603
+ line-height: var(--text-label-sm-lineHeight, 1);
2604
+ font-variant-numeric: tabular-nums;
2605
+ color: var(--color-text-subtle-default);
2606
+ }
2607
+
2608
+ /* On the tinted own bubble the surface is the action color, so the timer flips
2609
+ * to the inverse text token for contrast. */
2610
+ .muka-voice-message--own .muka-voice-message__time {
2611
+ color: var(--color-text-default-inverse);
2612
+ }
2613
+
2614
+
2607
2615
  /* Typography */
2608
2616
  .muka-typography-catalog {
2609
2617
  display: flex;
@@ -6149,219 +6157,147 @@ body {
6149
6157
  }
6150
6158
 
6151
6159
 
6152
- /* RangeSlider */
6153
- /* RangeSlider Component Styles - Using Muka Design Tokens */
6160
+ /* Radio */
6161
+ /* Radio Component Styles - Using Muka Design Tokens */
6154
6162
 
6155
- .muka-range-slider {
6156
- display: flex;
6157
- flex-direction: column;
6158
- gap: var(--spacing-1);
6159
- width: 100%;
6163
+ /* Wrapper - clickable label container */
6164
+ .muka-radio {
6165
+ display: inline-flex;
6166
+ align-items: center;
6167
+ gap: var(--spacing-4);
6168
+ cursor: pointer;
6169
+ user-select: none;
6160
6170
  }
6161
6171
 
6162
- /* ========================================
6163
- HEADER: label group (label + info + optional) and value readout
6164
- ======================================== */
6165
-
6166
- .muka-range-slider__header {
6167
- display: flex;
6168
- align-items: center;
6169
- justify-content: space-between;
6170
- gap: var(--spacing-2);
6171
- min-height: 24px;
6172
+ .muka-radio--disabled {
6173
+ cursor: not-allowed;
6174
+ opacity: 0.6;
6172
6175
  }
6173
6176
 
6174
- .muka-range-slider__label-group {
6177
+ /* Control container */
6178
+ .muka-radio__control {
6179
+ position: relative;
6175
6180
  display: inline-flex;
6176
6181
  align-items: center;
6177
- gap: var(--spacing-2);
6182
+ justify-content: center;
6183
+ flex-shrink: 0;
6178
6184
  }
6179
6185
 
6180
- .muka-range-slider__label {
6181
- font-family: var(--text-label-md-semibold-fontFamily);
6182
- font-weight: var(--text-label-md-semibold-fontWeight);
6183
- font-size: var(--text-label-md-semibold-fontSize);
6184
- line-height: var(--text-label-md-semibold-lineHeight);
6185
- color: var(--color-text-default-default);
6186
+ /* Hidden native input */
6187
+ .muka-radio__input {
6188
+ position: absolute;
6189
+ width: 1px;
6190
+ height: 1px;
6191
+ padding: 0;
6192
+ margin: -1px;
6193
+ overflow: hidden;
6194
+ clip: rect(0, 0, 0, 0);
6195
+ white-space: nowrap;
6196
+ border: 0;
6186
6197
  }
6187
6198
 
6188
- .muka-range-slider__info {
6189
- color: var(--color-text-subtle-default);
6199
+ /* Visual indicator (circle) */
6200
+ .muka-radio__indicator {
6201
+ display: flex;
6202
+ align-items: center;
6203
+ justify-content: center;
6204
+ width: var(--radio-size-default);
6205
+ height: var(--radio-size-default);
6206
+ border-radius: var(--border-radius-full);
6207
+ background-color: var(--radio-color-default-background);
6208
+ border: var(--border-width-regular) solid var(--radio-color-default-border);
6209
+ transition: all 0.15s ease;
6210
+ box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.15);
6190
6211
  }
6191
6212
 
6192
- .muka-range-slider__optional {
6193
- font-family: var(--text-label-sm-regular-fontFamily);
6194
- font-weight: var(--text-label-sm-regular-fontWeight);
6195
- font-size: var(--text-label-sm-regular-fontSize);
6196
- line-height: var(--text-label-sm-regular-lineHeight);
6197
- color: var(--color-text-subtle-default);
6213
+ /* Size variants */
6214
+ .muka-radio--sm .muka-radio__indicator {
6215
+ width: var(--radio-size-sm);
6216
+ height: var(--radio-size-sm);
6198
6217
  }
6199
6218
 
6200
- .muka-range-slider__value {
6201
- font-family: var(--text-label-md-regular-fontFamily);
6202
- font-weight: var(--text-label-md-regular-fontWeight);
6203
- font-size: var(--text-label-md-regular-fontSize);
6204
- line-height: var(--text-label-md-regular-lineHeight);
6205
- color: var(--color-text-default-default);
6206
- font-variant-numeric: tabular-nums;
6219
+ .muka-radio--lg .muka-radio__indicator {
6220
+ width: var(--radio-size-lg);
6221
+ height: var(--radio-size-lg);
6207
6222
  }
6208
6223
 
6209
- .muka-range-slider__helper {
6210
- margin: 0;
6211
- font-family: var(--text-body-sm-regular-fontFamily);
6212
- font-weight: var(--text-body-sm-regular-fontWeight);
6213
- font-size: var(--text-body-sm-regular-fontSize);
6214
- line-height: var(--text-body-sm-regular-lineHeight);
6215
- color: var(--color-text-subtle-default);
6224
+ /* Inner dot (shown when checked) */
6225
+ .muka-radio__dot {
6226
+ width: var(--radio-dot-size-default);
6227
+ height: var(--radio-dot-size-default);
6228
+ border-radius: var(--border-radius-full);
6229
+ background-color: var(--radio-color-default-dot);
6230
+ transform: scale(0);
6231
+ transition: transform 0.15s ease;
6216
6232
  }
6217
6233
 
6218
- /* ========================================
6219
- TRACK + THUMB
6220
- Native range input, restyled. A thick sunken track holds an accent fill up to
6221
- the current value, with a circular grip handle. The filled portion is driven
6222
- by the inline --muka-range-fill custom property (set from the component value).
6223
- ======================================== */
6224
-
6225
- /* Size variants: track height, thumb diameter and grip geometry */
6226
- .muka-range-slider--sm {
6227
- --muka-range-track-h: 12px;
6228
- --muka-range-thumb: 24px;
6229
- --muka-range-grip-h: 9px;
6230
- }
6231
- .muka-range-slider--md {
6232
- --muka-range-track-h: 16px;
6233
- --muka-range-thumb: 32px;
6234
- --muka-range-grip-h: 12px;
6235
- }
6236
- .muka-range-slider--lg {
6237
- --muka-range-track-h: 20px;
6238
- --muka-range-thumb: 40px;
6239
- --muka-range-grip-h: 15px;
6234
+ .muka-radio--sm .muka-radio__dot {
6235
+ width: var(--radio-dot-size-sm);
6236
+ height: var(--radio-dot-size-sm);
6240
6237
  }
6241
6238
 
6242
- .muka-range-slider__bar {
6243
- /* Reserve the full thumb height so the handle never clips the layout. */
6244
- display: flex;
6245
- align-items: center;
6246
- height: var(--muka-range-thumb);
6239
+ .muka-radio--lg .muka-radio__dot {
6240
+ width: var(--radio-dot-size-lg);
6241
+ height: var(--radio-dot-size-lg);
6247
6242
  }
6248
6243
 
6249
- .muka-range-slider__input {
6250
- -webkit-appearance: none;
6251
- appearance: none;
6252
- width: 100%;
6253
- height: var(--muka-range-thumb);
6254
- margin: 0;
6255
- background: transparent;
6256
- cursor: pointer;
6257
-
6258
- /* Grip handle fill + two vertical grip bars, all theme-aware. */
6259
- --muka-range-grip-color: var(--color-text-subtle-default);
6260
- --muka-range-grip-w: 2px;
6261
- --muka-range-grip-gap: 3px;
6244
+ /* Hover state - removed per design */
6262
6245
 
6263
- /* The track fill: action colour up to the value, sunken surface beyond it. */
6264
- --muka-range-track-fill: linear-gradient(
6265
- to right,
6266
- var(--color-action-default) 0,
6267
- var(--color-action-default) var(--muka-range-fill, 0%),
6268
- var(--color-surface-sunken) var(--muka-range-fill, 0%),
6269
- var(--color-surface-sunken) 100%
6270
- );
6246
+ /* Focus state */
6247
+ .muka-radio__input:focus-visible + .muka-radio__indicator {
6248
+ outline: 2px solid var(--color-border-focus);
6249
+ outline-offset: 2px;
6271
6250
  }
6272
6251
 
6273
- .muka-range-slider__input:focus {
6274
- outline: none;
6252
+ /* Checked state */
6253
+ .muka-radio__input:checked + .muka-radio__indicator {
6254
+ background-color: var(--radio-color-checked-background);
6255
+ border-width: var(--border-width-bold);
6256
+ border-color: var(--radio-color-checked-border);
6257
+ box-shadow: none;
6275
6258
  }
6276
6259
 
6277
- /* WebKit / Blink track */
6278
- .muka-range-slider__input::-webkit-slider-runnable-track {
6279
- height: var(--muka-range-track-h);
6280
- border-radius: var(--border-radius-full);
6281
- background-image: var(--muka-range-track-fill);
6282
- border: 1px solid var(--color-border-contrast);
6283
- box-shadow: var(--shadow-sunken);
6260
+ .muka-radio__input:checked + .muka-radio__indicator .muka-radio__dot {
6261
+ background-color: var(--radio-color-checked-dot);
6262
+ transform: scale(1);
6284
6263
  }
6285
6264
 
6286
- /* Firefox track + progress */
6287
- .muka-range-slider__input::-moz-range-track {
6288
- height: var(--muka-range-track-h);
6289
- border-radius: var(--border-radius-full);
6290
- background: var(--color-surface-sunken);
6291
- border: 1px solid var(--color-border-contrast);
6292
- box-shadow: var(--shadow-sunken);
6293
- }
6294
- .muka-range-slider__input::-moz-range-progress {
6295
- height: var(--muka-range-track-h);
6296
- border-radius: var(--border-radius-full);
6297
- background: var(--color-action-default);
6265
+ /* Disabled state */
6266
+ .muka-radio--disabled .muka-radio__indicator {
6267
+ background-color: var(--radio-color-disabled-background);
6268
+ border-color: var(--radio-color-disabled-border);
6269
+ box-shadow: none;
6298
6270
  }
6299
6271
 
6300
- /* WebKit / Blink thumb (vertically centred over the track) */
6301
- .muka-range-slider__input::-webkit-slider-thumb {
6302
- -webkit-appearance: none;
6303
- appearance: none;
6304
- width: var(--muka-range-thumb);
6305
- height: var(--muka-range-thumb);
6306
- margin-top: calc((var(--muka-range-track-h) - var(--muka-range-thumb)) / 2);
6307
- border-radius: var(--border-radius-full);
6308
- border: 1px solid var(--color-border-contrast);
6309
- box-shadow: var(--shadow-level2);
6310
- background-color: var(--color-surface-level1);
6311
- background-image:
6312
- linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color)),
6313
- linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color));
6314
- background-repeat: no-repeat;
6315
- background-size: var(--muka-range-grip-w) var(--muka-range-grip-h), var(--muka-range-grip-w) var(--muka-range-grip-h);
6316
- background-position:
6317
- calc(50% - var(--muka-range-grip-gap)) center,
6318
- calc(50% + var(--muka-range-grip-gap)) center;
6319
- transition: box-shadow 0.15s ease, background-color 0.15s ease;
6272
+ .muka-radio__input:disabled:checked + .muka-radio__indicator .muka-radio__dot {
6273
+ background-color: var(--radio-color-disabled-dot);
6320
6274
  }
6321
6275
 
6322
- /* Firefox thumb */
6323
- .muka-range-slider__input::-moz-range-thumb {
6324
- width: var(--muka-range-thumb);
6325
- height: var(--muka-range-thumb);
6326
- border-radius: var(--border-radius-full);
6327
- border: 1px solid var(--color-border-contrast);
6328
- box-shadow: var(--shadow-level2);
6329
- background-color: var(--color-surface-level1);
6330
- background-image:
6331
- linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color)),
6332
- linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color));
6333
- background-repeat: no-repeat;
6334
- background-size: var(--muka-range-grip-w) var(--muka-range-grip-h), var(--muka-range-grip-w) var(--muka-range-grip-h);
6335
- background-position:
6336
- calc(50% - var(--muka-range-grip-gap)) center,
6337
- calc(50% + var(--muka-range-grip-gap)) center;
6338
- transition: box-shadow 0.15s ease, background-color 0.15s ease;
6276
+ /* Label text */
6277
+ .muka-radio__label {
6278
+ font-family: var(--text-label-lg-regular-fontFamily);
6279
+ font-weight: var(--text-label-lg-regular-fontWeight);
6280
+ font-size: var(--text-label-lg-regular-fontSize);
6281
+ line-height: var(--text-label-lg-regular-lineHeight);
6282
+ color: var(--color-text-default-default);
6339
6283
  }
6340
6284
 
6341
- /* Hover */
6342
- .muka-range-slider__input:hover::-webkit-slider-thumb {
6343
- background-color: var(--color-surface-level1);
6344
- box-shadow: var(--shadow-level3);
6345
- }
6346
- .muka-range-slider__input:hover::-moz-range-thumb {
6347
- background-color: var(--color-surface-level1);
6348
- box-shadow: var(--shadow-level3);
6285
+ .muka-radio--sm .muka-radio__label {
6286
+ font-family: var(--text-label-md-regular-fontFamily);
6287
+ font-weight: var(--text-label-md-regular-fontWeight);
6288
+ font-size: var(--text-label-md-regular-fontSize);
6289
+ line-height: var(--text-label-md-regular-lineHeight);
6349
6290
  }
6350
6291
 
6351
- /* Focus ring */
6352
- .muka-range-slider__input:focus-visible::-webkit-slider-thumb {
6353
- box-shadow: var(--shadow-level2), 0 0 0 3px var(--color-border-focus);
6354
- }
6355
- .muka-range-slider__input:focus-visible::-moz-range-thumb {
6356
- box-shadow: var(--shadow-level2), 0 0 0 3px var(--color-border-focus);
6292
+ .muka-radio--lg .muka-radio__label {
6293
+ font-family: var(--text-label-xl-regular-fontFamily);
6294
+ font-weight: var(--text-label-xl-regular-fontWeight);
6295
+ font-size: var(--text-label-xl-regular-fontSize);
6296
+ line-height: var(--text-label-xl-regular-lineHeight);
6357
6297
  }
6358
6298
 
6359
- /* Disabled */
6360
- .muka-range-slider--disabled {
6361
- opacity: 0.5;
6362
- }
6363
- .muka-range-slider--disabled .muka-range-slider__input {
6364
- cursor: not-allowed;
6299
+ .muka-radio--disabled .muka-radio__label {
6300
+ color: var(--color-text-subtle-default);
6365
6301
  }
6366
6302
 
6367
6303
 
@@ -6508,150 +6444,6 @@ body {
6508
6444
  }
6509
6445
 
6510
6446
 
6511
- /* Radio */
6512
- /* Radio Component Styles - Using Muka Design Tokens */
6513
-
6514
- /* Wrapper - clickable label container */
6515
- .muka-radio {
6516
- display: inline-flex;
6517
- align-items: center;
6518
- gap: var(--spacing-4);
6519
- cursor: pointer;
6520
- user-select: none;
6521
- }
6522
-
6523
- .muka-radio--disabled {
6524
- cursor: not-allowed;
6525
- opacity: 0.6;
6526
- }
6527
-
6528
- /* Control container */
6529
- .muka-radio__control {
6530
- position: relative;
6531
- display: inline-flex;
6532
- align-items: center;
6533
- justify-content: center;
6534
- flex-shrink: 0;
6535
- }
6536
-
6537
- /* Hidden native input */
6538
- .muka-radio__input {
6539
- position: absolute;
6540
- width: 1px;
6541
- height: 1px;
6542
- padding: 0;
6543
- margin: -1px;
6544
- overflow: hidden;
6545
- clip: rect(0, 0, 0, 0);
6546
- white-space: nowrap;
6547
- border: 0;
6548
- }
6549
-
6550
- /* Visual indicator (circle) */
6551
- .muka-radio__indicator {
6552
- display: flex;
6553
- align-items: center;
6554
- justify-content: center;
6555
- width: var(--radio-size-default);
6556
- height: var(--radio-size-default);
6557
- border-radius: var(--border-radius-full);
6558
- background-color: var(--radio-color-default-background);
6559
- border: var(--border-width-regular) solid var(--radio-color-default-border);
6560
- transition: all 0.15s ease;
6561
- box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.15);
6562
- }
6563
-
6564
- /* Size variants */
6565
- .muka-radio--sm .muka-radio__indicator {
6566
- width: var(--radio-size-sm);
6567
- height: var(--radio-size-sm);
6568
- }
6569
-
6570
- .muka-radio--lg .muka-radio__indicator {
6571
- width: var(--radio-size-lg);
6572
- height: var(--radio-size-lg);
6573
- }
6574
-
6575
- /* Inner dot (shown when checked) */
6576
- .muka-radio__dot {
6577
- width: var(--radio-dot-size-default);
6578
- height: var(--radio-dot-size-default);
6579
- border-radius: var(--border-radius-full);
6580
- background-color: var(--radio-color-default-dot);
6581
- transform: scale(0);
6582
- transition: transform 0.15s ease;
6583
- }
6584
-
6585
- .muka-radio--sm .muka-radio__dot {
6586
- width: var(--radio-dot-size-sm);
6587
- height: var(--radio-dot-size-sm);
6588
- }
6589
-
6590
- .muka-radio--lg .muka-radio__dot {
6591
- width: var(--radio-dot-size-lg);
6592
- height: var(--radio-dot-size-lg);
6593
- }
6594
-
6595
- /* Hover state - removed per design */
6596
-
6597
- /* Focus state */
6598
- .muka-radio__input:focus-visible + .muka-radio__indicator {
6599
- outline: 2px solid var(--color-border-focus);
6600
- outline-offset: 2px;
6601
- }
6602
-
6603
- /* Checked state */
6604
- .muka-radio__input:checked + .muka-radio__indicator {
6605
- background-color: var(--radio-color-checked-background);
6606
- border-width: var(--border-width-bold);
6607
- border-color: var(--radio-color-checked-border);
6608
- box-shadow: none;
6609
- }
6610
-
6611
- .muka-radio__input:checked + .muka-radio__indicator .muka-radio__dot {
6612
- background-color: var(--radio-color-checked-dot);
6613
- transform: scale(1);
6614
- }
6615
-
6616
- /* Disabled state */
6617
- .muka-radio--disabled .muka-radio__indicator {
6618
- background-color: var(--radio-color-disabled-background);
6619
- border-color: var(--radio-color-disabled-border);
6620
- box-shadow: none;
6621
- }
6622
-
6623
- .muka-radio__input:disabled:checked + .muka-radio__indicator .muka-radio__dot {
6624
- background-color: var(--radio-color-disabled-dot);
6625
- }
6626
-
6627
- /* Label text */
6628
- .muka-radio__label {
6629
- font-family: var(--text-label-lg-regular-fontFamily);
6630
- font-weight: var(--text-label-lg-regular-fontWeight);
6631
- font-size: var(--text-label-lg-regular-fontSize);
6632
- line-height: var(--text-label-lg-regular-lineHeight);
6633
- color: var(--color-text-default-default);
6634
- }
6635
-
6636
- .muka-radio--sm .muka-radio__label {
6637
- font-family: var(--text-label-md-regular-fontFamily);
6638
- font-weight: var(--text-label-md-regular-fontWeight);
6639
- font-size: var(--text-label-md-regular-fontSize);
6640
- line-height: var(--text-label-md-regular-lineHeight);
6641
- }
6642
-
6643
- .muka-radio--lg .muka-radio__label {
6644
- font-family: var(--text-label-xl-regular-fontFamily);
6645
- font-weight: var(--text-label-xl-regular-fontWeight);
6646
- font-size: var(--text-label-xl-regular-fontSize);
6647
- line-height: var(--text-label-xl-regular-lineHeight);
6648
- }
6649
-
6650
- .muka-radio--disabled .muka-radio__label {
6651
- color: var(--color-text-subtle-default);
6652
- }
6653
-
6654
-
6655
6447
  /* PullToRefresh */
6656
6448
  /* PullToRefresh Component Styles */
6657
6449
 
@@ -7298,65 +7090,281 @@ body {
7298
7090
  grid-template-rows: 0fr;
7299
7091
  }
7300
7092
 
7301
- /* The direct grid child clips and must have NO padding/border of its own —
7302
- min-height:0 lets it shrink, and with no padding the 0fr track reaches a true
7303
- 0 height (padding on the item would leave a residual gap when collapsed). */
7304
- .muka-progress-accordeon__slot-clip {
7305
- overflow: hidden;
7306
- min-height: 0;
7093
+ /* The direct grid child clips and must have NO padding/border of its own —
7094
+ min-height:0 lets it shrink, and with no padding the 0fr track reaches a true
7095
+ 0 height (padding on the item would leave a residual gap when collapsed). */
7096
+ .muka-progress-accordeon__slot-clip {
7097
+ overflow: hidden;
7098
+ min-height: 0;
7099
+ }
7100
+
7101
+ /* The header↔content spacing lives on the inner slot (inside the clip region)
7102
+ so it collapses together with the content. */
7103
+ .muka-progress-accordeon__slot-wrapper .muka-progress-accordeon__slot {
7104
+ padding-top: var(--spacing-4);
7105
+ }
7106
+
7107
+ /* ─── Action buttons (current state) ─────────────────────── */
7108
+ .muka-progress-accordeon__actions {
7109
+ display: flex;
7110
+ justify-content: flex-end;
7111
+ gap: var(--spacing-4);
7112
+ width: 100%;
7113
+ }
7114
+
7115
+ .muka-progress-accordeon__action {
7116
+ min-width: 160px;
7117
+ }
7118
+
7119
+ /* ─── Divider ────────────────────────────────────────────── */
7120
+ .muka-progress-accordeon__divider {
7121
+ width: 100%;
7122
+ }
7123
+
7124
+ /* ─── Responsive (narrow container) ──────────────────────── */
7125
+ @container (max-width: 480px) {
7126
+ /* Heading steps down to heading/sm. The 24px line-height is shorter than the
7127
+ 32px step indicator, so nudge the text down to keep a single line centred. */
7128
+ .muka-progress-accordeon__heading {
7129
+ font-size: var(--text-heading-sm-fontSize);
7130
+ line-height: var(--text-heading-sm-lineHeight);
7131
+ padding-top: var(--spacing-1);
7132
+ }
7133
+
7134
+ /* Edit button swaps to the icon-only variant */
7135
+ .muka-progress-accordeon__edit--wide {
7136
+ display: none;
7137
+ }
7138
+
7139
+ .muka-progress-accordeon__edit--narrow {
7140
+ display: inline-flex;
7141
+ }
7142
+
7143
+ /* Action buttons stretch to fill the row */
7144
+ .muka-progress-accordeon__actions {
7145
+ justify-content: stretch;
7146
+ }
7147
+
7148
+ .muka-progress-accordeon__action {
7149
+ flex: 1 0 0;
7150
+ min-width: 0;
7151
+ }
7152
+ }
7153
+
7154
+
7155
+ /* RangeSlider */
7156
+ /* RangeSlider Component Styles - Using Muka Design Tokens */
7157
+
7158
+ .muka-range-slider {
7159
+ display: flex;
7160
+ flex-direction: column;
7161
+ gap: var(--spacing-1);
7162
+ width: 100%;
7163
+ }
7164
+
7165
+ /* ========================================
7166
+ HEADER: label group (label + info + optional) and value readout
7167
+ ======================================== */
7168
+
7169
+ .muka-range-slider__header {
7170
+ display: flex;
7171
+ align-items: center;
7172
+ justify-content: space-between;
7173
+ gap: var(--spacing-2);
7174
+ min-height: 24px;
7175
+ }
7176
+
7177
+ .muka-range-slider__label-group {
7178
+ display: inline-flex;
7179
+ align-items: center;
7180
+ gap: var(--spacing-2);
7181
+ }
7182
+
7183
+ .muka-range-slider__label {
7184
+ font-family: var(--text-label-md-semibold-fontFamily);
7185
+ font-weight: var(--text-label-md-semibold-fontWeight);
7186
+ font-size: var(--text-label-md-semibold-fontSize);
7187
+ line-height: var(--text-label-md-semibold-lineHeight);
7188
+ color: var(--color-text-default-default);
7189
+ }
7190
+
7191
+ .muka-range-slider__info {
7192
+ color: var(--color-text-subtle-default);
7193
+ }
7194
+
7195
+ .muka-range-slider__optional {
7196
+ font-family: var(--text-label-sm-regular-fontFamily);
7197
+ font-weight: var(--text-label-sm-regular-fontWeight);
7198
+ font-size: var(--text-label-sm-regular-fontSize);
7199
+ line-height: var(--text-label-sm-regular-lineHeight);
7200
+ color: var(--color-text-subtle-default);
7201
+ }
7202
+
7203
+ .muka-range-slider__value {
7204
+ font-family: var(--text-label-md-regular-fontFamily);
7205
+ font-weight: var(--text-label-md-regular-fontWeight);
7206
+ font-size: var(--text-label-md-regular-fontSize);
7207
+ line-height: var(--text-label-md-regular-lineHeight);
7208
+ color: var(--color-text-default-default);
7209
+ font-variant-numeric: tabular-nums;
7210
+ }
7211
+
7212
+ .muka-range-slider__helper {
7213
+ margin: 0;
7214
+ font-family: var(--text-body-sm-regular-fontFamily);
7215
+ font-weight: var(--text-body-sm-regular-fontWeight);
7216
+ font-size: var(--text-body-sm-regular-fontSize);
7217
+ line-height: var(--text-body-sm-regular-lineHeight);
7218
+ color: var(--color-text-subtle-default);
7219
+ }
7220
+
7221
+ /* ========================================
7222
+ TRACK + THUMB
7223
+ Native range input, restyled. A thick sunken track holds an accent fill up to
7224
+ the current value, with a circular grip handle. The filled portion is driven
7225
+ by the inline --muka-range-fill custom property (set from the component value).
7226
+ ======================================== */
7227
+
7228
+ /* Size variants: track height, thumb diameter and grip geometry */
7229
+ .muka-range-slider--sm {
7230
+ --muka-range-track-h: 12px;
7231
+ --muka-range-thumb: 24px;
7232
+ --muka-range-grip-h: 9px;
7233
+ }
7234
+ .muka-range-slider--md {
7235
+ --muka-range-track-h: 16px;
7236
+ --muka-range-thumb: 32px;
7237
+ --muka-range-grip-h: 12px;
7238
+ }
7239
+ .muka-range-slider--lg {
7240
+ --muka-range-track-h: 20px;
7241
+ --muka-range-thumb: 40px;
7242
+ --muka-range-grip-h: 15px;
7243
+ }
7244
+
7245
+ .muka-range-slider__bar {
7246
+ /* Reserve the full thumb height so the handle never clips the layout. */
7247
+ display: flex;
7248
+ align-items: center;
7249
+ height: var(--muka-range-thumb);
7250
+ }
7251
+
7252
+ .muka-range-slider__input {
7253
+ -webkit-appearance: none;
7254
+ appearance: none;
7255
+ width: 100%;
7256
+ height: var(--muka-range-thumb);
7257
+ margin: 0;
7258
+ background: transparent;
7259
+ cursor: pointer;
7260
+
7261
+ /* Grip handle fill + two vertical grip bars, all theme-aware. */
7262
+ --muka-range-grip-color: var(--color-text-subtle-default);
7263
+ --muka-range-grip-w: 2px;
7264
+ --muka-range-grip-gap: 3px;
7265
+
7266
+ /* The track fill: action colour up to the value, sunken surface beyond it. */
7267
+ --muka-range-track-fill: linear-gradient(
7268
+ to right,
7269
+ var(--color-action-default) 0,
7270
+ var(--color-action-default) var(--muka-range-fill, 0%),
7271
+ var(--color-surface-sunken) var(--muka-range-fill, 0%),
7272
+ var(--color-surface-sunken) 100%
7273
+ );
7274
+ }
7275
+
7276
+ .muka-range-slider__input:focus {
7277
+ outline: none;
7307
7278
  }
7308
7279
 
7309
- /* The header↔content spacing lives on the inner slot (inside the clip region)
7310
- so it collapses together with the content. */
7311
- .muka-progress-accordeon__slot-wrapper .muka-progress-accordeon__slot {
7312
- padding-top: var(--spacing-4);
7280
+ /* WebKit / Blink track */
7281
+ .muka-range-slider__input::-webkit-slider-runnable-track {
7282
+ height: var(--muka-range-track-h);
7283
+ border-radius: var(--border-radius-full);
7284
+ background-image: var(--muka-range-track-fill);
7285
+ border: 1px solid var(--color-border-contrast);
7286
+ box-shadow: var(--shadow-sunken);
7313
7287
  }
7314
7288
 
7315
- /* ─── Action buttons (current state) ─────────────────────── */
7316
- .muka-progress-accordeon__actions {
7317
- display: flex;
7318
- justify-content: flex-end;
7319
- gap: var(--spacing-4);
7320
- width: 100%;
7289
+ /* Firefox track + progress */
7290
+ .muka-range-slider__input::-moz-range-track {
7291
+ height: var(--muka-range-track-h);
7292
+ border-radius: var(--border-radius-full);
7293
+ background: var(--color-surface-sunken);
7294
+ border: 1px solid var(--color-border-contrast);
7295
+ box-shadow: var(--shadow-sunken);
7321
7296
  }
7322
-
7323
- .muka-progress-accordeon__action {
7324
- min-width: 160px;
7297
+ .muka-range-slider__input::-moz-range-progress {
7298
+ height: var(--muka-range-track-h);
7299
+ border-radius: var(--border-radius-full);
7300
+ background: var(--color-action-default);
7325
7301
  }
7326
7302
 
7327
- /* ─── Divider ────────────────────────────────────────────── */
7328
- .muka-progress-accordeon__divider {
7329
- width: 100%;
7303
+ /* WebKit / Blink thumb (vertically centred over the track) */
7304
+ .muka-range-slider__input::-webkit-slider-thumb {
7305
+ -webkit-appearance: none;
7306
+ appearance: none;
7307
+ width: var(--muka-range-thumb);
7308
+ height: var(--muka-range-thumb);
7309
+ margin-top: calc((var(--muka-range-track-h) - var(--muka-range-thumb)) / 2);
7310
+ border-radius: var(--border-radius-full);
7311
+ border: 1px solid var(--color-border-contrast);
7312
+ box-shadow: var(--shadow-level2);
7313
+ background-color: var(--color-surface-level1);
7314
+ background-image:
7315
+ linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color)),
7316
+ linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color));
7317
+ background-repeat: no-repeat;
7318
+ background-size: var(--muka-range-grip-w) var(--muka-range-grip-h), var(--muka-range-grip-w) var(--muka-range-grip-h);
7319
+ background-position:
7320
+ calc(50% - var(--muka-range-grip-gap)) center,
7321
+ calc(50% + var(--muka-range-grip-gap)) center;
7322
+ transition: box-shadow 0.15s ease, background-color 0.15s ease;
7330
7323
  }
7331
7324
 
7332
- /* ─── Responsive (narrow container) ──────────────────────── */
7333
- @container (max-width: 480px) {
7334
- /* Heading steps down to heading/sm. The 24px line-height is shorter than the
7335
- 32px step indicator, so nudge the text down to keep a single line centred. */
7336
- .muka-progress-accordeon__heading {
7337
- font-size: var(--text-heading-sm-fontSize);
7338
- line-height: var(--text-heading-sm-lineHeight);
7339
- padding-top: var(--spacing-1);
7340
- }
7341
-
7342
- /* Edit button swaps to the icon-only variant */
7343
- .muka-progress-accordeon__edit--wide {
7344
- display: none;
7345
- }
7325
+ /* Firefox thumb */
7326
+ .muka-range-slider__input::-moz-range-thumb {
7327
+ width: var(--muka-range-thumb);
7328
+ height: var(--muka-range-thumb);
7329
+ border-radius: var(--border-radius-full);
7330
+ border: 1px solid var(--color-border-contrast);
7331
+ box-shadow: var(--shadow-level2);
7332
+ background-color: var(--color-surface-level1);
7333
+ background-image:
7334
+ linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color)),
7335
+ linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color));
7336
+ background-repeat: no-repeat;
7337
+ background-size: var(--muka-range-grip-w) var(--muka-range-grip-h), var(--muka-range-grip-w) var(--muka-range-grip-h);
7338
+ background-position:
7339
+ calc(50% - var(--muka-range-grip-gap)) center,
7340
+ calc(50% + var(--muka-range-grip-gap)) center;
7341
+ transition: box-shadow 0.15s ease, background-color 0.15s ease;
7342
+ }
7346
7343
 
7347
- .muka-progress-accordeon__edit--narrow {
7348
- display: inline-flex;
7349
- }
7344
+ /* Hover */
7345
+ .muka-range-slider__input:hover::-webkit-slider-thumb {
7346
+ background-color: var(--color-surface-level1);
7347
+ box-shadow: var(--shadow-level3);
7348
+ }
7349
+ .muka-range-slider__input:hover::-moz-range-thumb {
7350
+ background-color: var(--color-surface-level1);
7351
+ box-shadow: var(--shadow-level3);
7352
+ }
7350
7353
 
7351
- /* Action buttons stretch to fill the row */
7352
- .muka-progress-accordeon__actions {
7353
- justify-content: stretch;
7354
- }
7354
+ /* Focus ring */
7355
+ .muka-range-slider__input:focus-visible::-webkit-slider-thumb {
7356
+ box-shadow: var(--shadow-level2), 0 0 0 3px var(--color-border-focus);
7357
+ }
7358
+ .muka-range-slider__input:focus-visible::-moz-range-thumb {
7359
+ box-shadow: var(--shadow-level2), 0 0 0 3px var(--color-border-focus);
7360
+ }
7355
7361
 
7356
- .muka-progress-accordeon__action {
7357
- flex: 1 0 0;
7358
- min-width: 0;
7359
- }
7362
+ /* Disabled */
7363
+ .muka-range-slider--disabled {
7364
+ opacity: 0.5;
7365
+ }
7366
+ .muka-range-slider--disabled .muka-range-slider__input {
7367
+ cursor: not-allowed;
7360
7368
  }
7361
7369
 
7362
7370
 
@@ -7956,36 +7964,6 @@ body {
7956
7964
  }
7957
7965
 
7958
7966
 
7959
- /* PhotoDraftStrip */
7960
- /* PhotoDraftStrip Component Styles */
7961
-
7962
- .muka-photo-draft-strip {
7963
- display: flex;
7964
- align-items: center;
7965
- gap: var(--spacing-3);
7966
- width: 100%;
7967
- padding: var(--spacing-2) 0;
7968
- }
7969
-
7970
- .muka-photo-draft-strip__track {
7971
- display: flex;
7972
- gap: var(--spacing-2);
7973
- flex: 1 1 auto;
7974
- min-width: 0;
7975
- overflow-x: auto;
7976
- scroll-behavior: smooth;
7977
- scrollbar-width: none;
7978
- }
7979
-
7980
- .muka-photo-draft-strip__track::-webkit-scrollbar {
7981
- display: none;
7982
- }
7983
-
7984
- .muka-photo-draft-strip__item {
7985
- flex: 0 0 auto;
7986
- }
7987
-
7988
-
7989
7967
  /* Pagination */
7990
7968
  /* Pagination Component Styles */
7991
7969
 
@@ -8088,6 +8066,36 @@ body {
8088
8066
  }
8089
8067
 
8090
8068
 
8069
+ /* PhotoDraftStrip */
8070
+ /* PhotoDraftStrip Component Styles */
8071
+
8072
+ .muka-photo-draft-strip {
8073
+ display: flex;
8074
+ align-items: center;
8075
+ gap: var(--spacing-3);
8076
+ width: 100%;
8077
+ padding: var(--spacing-2) 0;
8078
+ }
8079
+
8080
+ .muka-photo-draft-strip__track {
8081
+ display: flex;
8082
+ gap: var(--spacing-2);
8083
+ flex: 1 1 auto;
8084
+ min-width: 0;
8085
+ overflow-x: auto;
8086
+ scroll-behavior: smooth;
8087
+ scrollbar-width: none;
8088
+ }
8089
+
8090
+ .muka-photo-draft-strip__track::-webkit-scrollbar {
8091
+ display: none;
8092
+ }
8093
+
8094
+ .muka-photo-draft-strip__item {
8095
+ flex: 0 0 auto;
8096
+ }
8097
+
8098
+
8091
8099
  /* NumberInput */
8092
8100
  /* NumberInput — reuses Input field styles (../Input/Input.css). */
8093
8101
  /* Only the prefix/suffix affixes are NumberInput-specific. */
@@ -10821,38 +10829,6 @@ li.muka-listitem {
10821
10829
  }
10822
10830
 
10823
10831
 
10824
- /* DatePicker */
10825
- /* DatePicker — compact native date field. */
10826
- /* Field/label/helper styling is inherited from ../Input/Input.css. */
10827
-
10828
- /* Adopt the field typography on the native date input. */
10829
- .muka-datepicker__field .muka-input__native {
10830
- font-family: var(--text-input-md-fontFamily);
10831
- font-size: var(--text-input-md-fontSize);
10832
- line-height: var(--text-input-md-lineHeight);
10833
- }
10834
-
10835
- .muka-datepicker__field--sm .muka-input__native {
10836
- font-family: var(--text-input-sm-fontFamily);
10837
- font-size: var(--text-input-sm-fontSize);
10838
- line-height: var(--text-input-sm-lineHeight);
10839
- }
10840
-
10841
- /* Tint the browser calendar indicator to match the field foreground. */
10842
- .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator {
10843
- cursor: pointer;
10844
- opacity: 0.6;
10845
- }
10846
-
10847
- .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator:hover {
10848
- opacity: 1;
10849
- }
10850
-
10851
- .muka-datepicker__field .muka-input__native:disabled {
10852
- cursor: not-allowed;
10853
- }
10854
-
10855
-
10856
10832
  /* Dialog */
10857
10833
  /* Dialog Component Styles */
10858
10834
 
@@ -11106,18 +11082,50 @@ li.muka-listitem {
11106
11082
  }
11107
11083
  }
11108
11084
 
11109
- /* ─── Bar elevation shadows ──────────────────────────── */
11110
-
11111
- .muka-dialog .muka-topbar {
11112
- position: relative;
11113
- z-index: 1;
11114
- box-shadow: var(--shadow-level2);
11085
+ /* ─── Bar elevation shadows ──────────────────────────── */
11086
+
11087
+ .muka-dialog .muka-topbar {
11088
+ position: relative;
11089
+ z-index: 1;
11090
+ box-shadow: var(--shadow-level2);
11091
+ }
11092
+
11093
+ .muka-dialog .muka-bottombar {
11094
+ position: relative;
11095
+ z-index: 1;
11096
+ box-shadow: var(--shadow-level2);
11097
+ }
11098
+
11099
+
11100
+ /* DatePicker */
11101
+ /* DatePicker — compact native date field. */
11102
+ /* Field/label/helper styling is inherited from ../Input/Input.css. */
11103
+
11104
+ /* Adopt the field typography on the native date input. */
11105
+ .muka-datepicker__field .muka-input__native {
11106
+ font-family: var(--text-input-md-fontFamily);
11107
+ font-size: var(--text-input-md-fontSize);
11108
+ line-height: var(--text-input-md-lineHeight);
11109
+ }
11110
+
11111
+ .muka-datepicker__field--sm .muka-input__native {
11112
+ font-family: var(--text-input-sm-fontFamily);
11113
+ font-size: var(--text-input-sm-fontSize);
11114
+ line-height: var(--text-input-sm-lineHeight);
11115
+ }
11116
+
11117
+ /* Tint the browser calendar indicator to match the field foreground. */
11118
+ .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator {
11119
+ cursor: pointer;
11120
+ opacity: 0.6;
11121
+ }
11122
+
11123
+ .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator:hover {
11124
+ opacity: 1;
11115
11125
  }
11116
11126
 
11117
- .muka-dialog .muka-bottombar {
11118
- position: relative;
11119
- z-index: 1;
11120
- box-shadow: var(--shadow-level2);
11127
+ .muka-datepicker__field .muka-input__native:disabled {
11128
+ cursor: not-allowed;
11121
11129
  }
11122
11130
 
11123
11131
 
@@ -12438,128 +12446,6 @@ li.muka-listitem {
12438
12446
  }
12439
12447
 
12440
12448
 
12441
- /* ChatPhotoGrid */
12442
- /* ChatPhotoGrid Component Styles */
12443
-
12444
- /*
12445
- * The grid clips to its own radius and the tiles stay square, so only the four
12446
- * outer corners round — matching the Figma "Wrapper" frame (5225:1394).
12447
- */
12448
- .muka-chat-photo-grid {
12449
- display: grid;
12450
- gap: var(--chatphotogrid-gap);
12451
- width: 100%;
12452
- min-width: 0;
12453
- overflow: hidden;
12454
- border-radius: var(--chatphotogrid-radius);
12455
- }
12456
-
12457
- /* ─── Tiles ────────────────────────────────────────────── */
12458
-
12459
- .muka-chat-photo-grid__tile {
12460
- position: relative;
12461
- display: block;
12462
- overflow: hidden;
12463
- min-width: 0;
12464
- padding: 0;
12465
- margin: 0;
12466
- border: none;
12467
- background-color: var(--chatphotogrid-color-placeholder);
12468
- aspect-ratio: 1 / 1;
12469
- }
12470
-
12471
- button.muka-chat-photo-grid__tile {
12472
- cursor: pointer;
12473
- appearance: none;
12474
- }
12475
-
12476
- button.muka-chat-photo-grid__tile:focus-visible {
12477
- outline: var(--border-width-bold) solid var(--color-border-focus);
12478
- /* Inset, so the grid's overflow clip cannot cut the ring off on corner tiles */
12479
- outline-offset: calc(-1 * var(--border-width-bold));
12480
- }
12481
-
12482
- .muka-chat-photo-grid__image {
12483
- display: block;
12484
- width: 100%;
12485
- height: 100%;
12486
- object-fit: cover;
12487
- }
12488
-
12489
- /* ─── Overflow tile ────────────────────────────────────── */
12490
-
12491
- .muka-chat-photo-grid__overflow {
12492
- position: absolute;
12493
- inset: 0;
12494
- display: flex;
12495
- align-items: center;
12496
- justify-content: center;
12497
- background-color: var(--chatphotogrid-color-overflow-background);
12498
- color: var(--chatphotogrid-color-overflow-foreground);
12499
- font-family: var(--text-body-2xl-regular-fontFamily);
12500
- font-weight: var(--text-body-2xl-regular-fontWeight);
12501
- font-size: var(--text-body-2xl-regular-fontSize);
12502
- line-height: var(--text-body-2xl-regular-lineHeight);
12503
- }
12504
-
12505
- /* ─── Layouts ──────────────────────────────────────────── */
12506
-
12507
- .muka-chat-photo-grid--1 {
12508
- grid-template-columns: 1fr;
12509
- }
12510
-
12511
- .muka-chat-photo-grid--landscape .muka-chat-photo-grid__tile {
12512
- aspect-ratio: 4 / 3;
12513
- }
12514
-
12515
- .muka-chat-photo-grid--portrait .muka-chat-photo-grid__tile {
12516
- aspect-ratio: 3 / 4;
12517
- }
12518
-
12519
- .muka-chat-photo-grid--2 {
12520
- grid-template-columns: repeat(2, 1fr);
12521
- }
12522
-
12523
- .muka-chat-photo-grid--3 {
12524
- grid-template-columns: repeat(3, 1fr);
12525
- }
12526
-
12527
- .muka-chat-photo-grid--4 {
12528
- grid-template-columns: repeat(2, 1fr);
12529
- }
12530
-
12531
- /* 5 photos: a 2-up row above a 3-up row, on a shared 6-column track */
12532
- .muka-chat-photo-grid--5 {
12533
- grid-template-columns: repeat(6, 1fr);
12534
- }
12535
-
12536
- .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(-n + 2) {
12537
- grid-column: span 3;
12538
- }
12539
-
12540
- .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(n + 3) {
12541
- grid-column: span 2;
12542
- }
12543
-
12544
- .muka-chat-photo-grid--6,
12545
- .muka-chat-photo-grid--overflow {
12546
- grid-template-columns: repeat(3, 1fr);
12547
- }
12548
-
12549
- /* ─── Print ────────────────────────────────────────────── */
12550
-
12551
- @media print {
12552
- .muka-chat-photo-grid {
12553
- break-inside: avoid;
12554
- }
12555
-
12556
- .muka-chat-photo-grid__image {
12557
- print-color-adjust: exact;
12558
- -webkit-print-color-adjust: exact;
12559
- }
12560
- }
12561
-
12562
-
12563
12449
  /* Checkbox */
12564
12450
  /* Checkbox Component Styles - Using Muka Design Tokens */
12565
12451
 
@@ -12715,15 +12601,137 @@ button.muka-chat-photo-grid__tile:focus-visible {
12715
12601
  line-height: var(--text-label-md-regular-lineHeight);
12716
12602
  }
12717
12603
 
12718
- .muka-checkbox--lg .muka-checkbox__label {
12719
- font-family: var(--text-label-xl-regular-fontFamily);
12720
- font-weight: var(--text-label-xl-regular-fontWeight);
12721
- font-size: var(--text-label-xl-regular-fontSize);
12722
- line-height: var(--text-label-xl-regular-lineHeight);
12723
- }
12604
+ .muka-checkbox--lg .muka-checkbox__label {
12605
+ font-family: var(--text-label-xl-regular-fontFamily);
12606
+ font-weight: var(--text-label-xl-regular-fontWeight);
12607
+ font-size: var(--text-label-xl-regular-fontSize);
12608
+ line-height: var(--text-label-xl-regular-lineHeight);
12609
+ }
12610
+
12611
+ .muka-checkbox--disabled .muka-checkbox__label {
12612
+ color: var(--color-text-subtle-default);
12613
+ }
12614
+
12615
+
12616
+ /* ChatPhotoGrid */
12617
+ /* ChatPhotoGrid Component Styles */
12618
+
12619
+ /*
12620
+ * The grid clips to its own radius and the tiles stay square, so only the four
12621
+ * outer corners round — matching the Figma "Wrapper" frame (5225:1394).
12622
+ */
12623
+ .muka-chat-photo-grid {
12624
+ display: grid;
12625
+ gap: var(--chatphotogrid-gap);
12626
+ width: 100%;
12627
+ min-width: 0;
12628
+ overflow: hidden;
12629
+ border-radius: var(--chatphotogrid-radius);
12630
+ }
12631
+
12632
+ /* ─── Tiles ────────────────────────────────────────────── */
12633
+
12634
+ .muka-chat-photo-grid__tile {
12635
+ position: relative;
12636
+ display: block;
12637
+ overflow: hidden;
12638
+ min-width: 0;
12639
+ padding: 0;
12640
+ margin: 0;
12641
+ border: none;
12642
+ background-color: var(--chatphotogrid-color-placeholder);
12643
+ aspect-ratio: 1 / 1;
12644
+ }
12645
+
12646
+ button.muka-chat-photo-grid__tile {
12647
+ cursor: pointer;
12648
+ appearance: none;
12649
+ }
12650
+
12651
+ button.muka-chat-photo-grid__tile:focus-visible {
12652
+ outline: var(--border-width-bold) solid var(--color-border-focus);
12653
+ /* Inset, so the grid's overflow clip cannot cut the ring off on corner tiles */
12654
+ outline-offset: calc(-1 * var(--border-width-bold));
12655
+ }
12656
+
12657
+ .muka-chat-photo-grid__image {
12658
+ display: block;
12659
+ width: 100%;
12660
+ height: 100%;
12661
+ object-fit: cover;
12662
+ }
12663
+
12664
+ /* ─── Overflow tile ────────────────────────────────────── */
12665
+
12666
+ .muka-chat-photo-grid__overflow {
12667
+ position: absolute;
12668
+ inset: 0;
12669
+ display: flex;
12670
+ align-items: center;
12671
+ justify-content: center;
12672
+ background-color: var(--chatphotogrid-color-overflow-background);
12673
+ color: var(--chatphotogrid-color-overflow-foreground);
12674
+ font-family: var(--text-body-2xl-regular-fontFamily);
12675
+ font-weight: var(--text-body-2xl-regular-fontWeight);
12676
+ font-size: var(--text-body-2xl-regular-fontSize);
12677
+ line-height: var(--text-body-2xl-regular-lineHeight);
12678
+ }
12679
+
12680
+ /* ─── Layouts ──────────────────────────────────────────── */
12681
+
12682
+ .muka-chat-photo-grid--1 {
12683
+ grid-template-columns: 1fr;
12684
+ }
12685
+
12686
+ .muka-chat-photo-grid--landscape .muka-chat-photo-grid__tile {
12687
+ aspect-ratio: 4 / 3;
12688
+ }
12689
+
12690
+ .muka-chat-photo-grid--portrait .muka-chat-photo-grid__tile {
12691
+ aspect-ratio: 3 / 4;
12692
+ }
12693
+
12694
+ .muka-chat-photo-grid--2 {
12695
+ grid-template-columns: repeat(2, 1fr);
12696
+ }
12697
+
12698
+ .muka-chat-photo-grid--3 {
12699
+ grid-template-columns: repeat(3, 1fr);
12700
+ }
12701
+
12702
+ .muka-chat-photo-grid--4 {
12703
+ grid-template-columns: repeat(2, 1fr);
12704
+ }
12705
+
12706
+ /* 5 photos: a 2-up row above a 3-up row, on a shared 6-column track */
12707
+ .muka-chat-photo-grid--5 {
12708
+ grid-template-columns: repeat(6, 1fr);
12709
+ }
12710
+
12711
+ .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(-n + 2) {
12712
+ grid-column: span 3;
12713
+ }
12714
+
12715
+ .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(n + 3) {
12716
+ grid-column: span 2;
12717
+ }
12718
+
12719
+ .muka-chat-photo-grid--6,
12720
+ .muka-chat-photo-grid--overflow {
12721
+ grid-template-columns: repeat(3, 1fr);
12722
+ }
12723
+
12724
+ /* ─── Print ────────────────────────────────────────────── */
12724
12725
 
12725
- .muka-checkbox--disabled .muka-checkbox__label {
12726
- color: var(--color-text-subtle-default);
12726
+ @media print {
12727
+ .muka-chat-photo-grid {
12728
+ break-inside: avoid;
12729
+ }
12730
+
12731
+ .muka-chat-photo-grid__image {
12732
+ print-color-adjust: exact;
12733
+ -webkit-print-color-adjust: exact;
12734
+ }
12727
12735
  }
12728
12736
 
12729
12737
 
@@ -14012,114 +14020,6 @@ button.muka-chat-photo-grid__tile:focus-visible {
14012
14020
  }
14013
14021
 
14014
14022
 
14015
- /* BadgeNumber */
14016
- /* BadgeNumber Component Styles - Using Muka Design Tokens */
14017
-
14018
- .muka-badge-number {
14019
- display: inline-flex;
14020
- align-items: center;
14021
- justify-content: center;
14022
- border-radius: var(--border-radius-full);
14023
- white-space: nowrap;
14024
- user-select: none;
14025
- box-sizing: border-box;
14026
- }
14027
-
14028
- /*
14029
- * Sizes — fixed height, matching min-width (so a single digit renders as a
14030
- * circle), horizontal padding, and bold label typography. Vertical centering
14031
- * is handled by the fixed height + align-items: center.
14032
- */
14033
- .muka-badge-number--2xs {
14034
- height: var(--badge-number-size-2xs);
14035
- min-width: var(--badge-number-size-2xs);
14036
- padding: 0 var(--badge-number-padding-2xs);
14037
- font-family: var(--text-label-xs-bold-fontFamily);
14038
- font-weight: var(--text-label-xs-bold-fontWeight);
14039
- font-size: var(--text-label-xs-bold-fontSize);
14040
- line-height: var(--text-label-xs-bold-lineHeight);
14041
- }
14042
-
14043
- .muka-badge-number--xs {
14044
- height: var(--badge-number-size-xs);
14045
- min-width: var(--badge-number-size-xs);
14046
- padding: 0 var(--badge-number-padding-xs);
14047
- font-family: var(--text-label-sm-bold-fontFamily);
14048
- font-weight: var(--text-label-sm-bold-fontWeight);
14049
- font-size: var(--text-label-sm-bold-fontSize);
14050
- line-height: var(--text-label-sm-bold-lineHeight);
14051
- }
14052
-
14053
- .muka-badge-number--sm {
14054
- height: var(--badge-number-size-sm);
14055
- min-width: var(--badge-number-size-sm);
14056
- padding: 0 var(--badge-number-padding-sm);
14057
- font-family: var(--text-label-md-bold-fontFamily);
14058
- font-weight: var(--text-label-md-bold-fontWeight);
14059
- font-size: var(--text-label-md-bold-fontSize);
14060
- line-height: var(--text-label-md-bold-lineHeight);
14061
- }
14062
-
14063
- .muka-badge-number--md {
14064
- height: var(--badge-number-size-md);
14065
- min-width: var(--badge-number-size-md);
14066
- padding: 0 var(--badge-number-padding-md);
14067
- font-family: var(--text-label-lg-bold-fontFamily);
14068
- font-weight: var(--text-label-lg-bold-fontWeight);
14069
- font-size: var(--text-label-lg-bold-fontSize);
14070
- line-height: var(--text-label-lg-bold-lineHeight);
14071
- }
14072
-
14073
- .muka-badge-number--lg {
14074
- height: var(--badge-number-size-lg);
14075
- min-width: var(--badge-number-size-lg);
14076
- padding: 0 var(--badge-number-padding-lg);
14077
- font-family: var(--text-label-2xl-bold-fontFamily);
14078
- font-weight: var(--text-label-2xl-bold-fontWeight);
14079
- font-size: var(--text-label-2xl-bold-fontSize);
14080
- line-height: var(--text-label-2xl-bold-lineHeight);
14081
- }
14082
-
14083
- .muka-badge-number__label {
14084
- /*
14085
- * The badge sets a tight line-height for compact sizing, which would clip
14086
- * glyph descenders; give the label a roomier line-height. Vertical centering
14087
- * is unaffected because the badge height is fixed and content is centered.
14088
- */
14089
- line-height: normal;
14090
- }
14091
-
14092
- /* Neutral variant */
14093
- .muka-badge-number--neutral {
14094
- background-color: var(--color-surface-level1);
14095
- color: var(--color-text-default-default);
14096
- }
14097
-
14098
- /* Info variant */
14099
- .muka-badge-number--info {
14100
- background-color: var(--color-state-info-contrast);
14101
- color: var(--color-text-default-inverse);
14102
- }
14103
-
14104
- /* Success variant */
14105
- .muka-badge-number--success {
14106
- background-color: var(--color-state-success-contrast);
14107
- color: var(--color-text-default-inverse);
14108
- }
14109
-
14110
- /* Warning variant */
14111
- .muka-badge-number--warning {
14112
- background-color: var(--color-state-warning-contrast);
14113
- color: var(--color-text-default-inverse);
14114
- }
14115
-
14116
- /* Error variant */
14117
- .muka-badge-number--error {
14118
- background-color: var(--color-state-error-contrast);
14119
- color: var(--color-text-default-inverse);
14120
- }
14121
-
14122
-
14123
14023
  /* BottomBar */
14124
14024
  /* BottomBar Component Styles */
14125
14025
 
@@ -14436,6 +14336,114 @@ button.muka-chat-photo-grid__tile:focus-visible {
14436
14336
  }
14437
14337
 
14438
14338
 
14339
+ /* BadgeNumber */
14340
+ /* BadgeNumber Component Styles - Using Muka Design Tokens */
14341
+
14342
+ .muka-badge-number {
14343
+ display: inline-flex;
14344
+ align-items: center;
14345
+ justify-content: center;
14346
+ border-radius: var(--border-radius-full);
14347
+ white-space: nowrap;
14348
+ user-select: none;
14349
+ box-sizing: border-box;
14350
+ }
14351
+
14352
+ /*
14353
+ * Sizes — fixed height, matching min-width (so a single digit renders as a
14354
+ * circle), horizontal padding, and bold label typography. Vertical centering
14355
+ * is handled by the fixed height + align-items: center.
14356
+ */
14357
+ .muka-badge-number--2xs {
14358
+ height: var(--badge-number-size-2xs);
14359
+ min-width: var(--badge-number-size-2xs);
14360
+ padding: 0 var(--badge-number-padding-2xs);
14361
+ font-family: var(--text-label-xs-bold-fontFamily);
14362
+ font-weight: var(--text-label-xs-bold-fontWeight);
14363
+ font-size: var(--text-label-xs-bold-fontSize);
14364
+ line-height: var(--text-label-xs-bold-lineHeight);
14365
+ }
14366
+
14367
+ .muka-badge-number--xs {
14368
+ height: var(--badge-number-size-xs);
14369
+ min-width: var(--badge-number-size-xs);
14370
+ padding: 0 var(--badge-number-padding-xs);
14371
+ font-family: var(--text-label-sm-bold-fontFamily);
14372
+ font-weight: var(--text-label-sm-bold-fontWeight);
14373
+ font-size: var(--text-label-sm-bold-fontSize);
14374
+ line-height: var(--text-label-sm-bold-lineHeight);
14375
+ }
14376
+
14377
+ .muka-badge-number--sm {
14378
+ height: var(--badge-number-size-sm);
14379
+ min-width: var(--badge-number-size-sm);
14380
+ padding: 0 var(--badge-number-padding-sm);
14381
+ font-family: var(--text-label-md-bold-fontFamily);
14382
+ font-weight: var(--text-label-md-bold-fontWeight);
14383
+ font-size: var(--text-label-md-bold-fontSize);
14384
+ line-height: var(--text-label-md-bold-lineHeight);
14385
+ }
14386
+
14387
+ .muka-badge-number--md {
14388
+ height: var(--badge-number-size-md);
14389
+ min-width: var(--badge-number-size-md);
14390
+ padding: 0 var(--badge-number-padding-md);
14391
+ font-family: var(--text-label-lg-bold-fontFamily);
14392
+ font-weight: var(--text-label-lg-bold-fontWeight);
14393
+ font-size: var(--text-label-lg-bold-fontSize);
14394
+ line-height: var(--text-label-lg-bold-lineHeight);
14395
+ }
14396
+
14397
+ .muka-badge-number--lg {
14398
+ height: var(--badge-number-size-lg);
14399
+ min-width: var(--badge-number-size-lg);
14400
+ padding: 0 var(--badge-number-padding-lg);
14401
+ font-family: var(--text-label-2xl-bold-fontFamily);
14402
+ font-weight: var(--text-label-2xl-bold-fontWeight);
14403
+ font-size: var(--text-label-2xl-bold-fontSize);
14404
+ line-height: var(--text-label-2xl-bold-lineHeight);
14405
+ }
14406
+
14407
+ .muka-badge-number__label {
14408
+ /*
14409
+ * The badge sets a tight line-height for compact sizing, which would clip
14410
+ * glyph descenders; give the label a roomier line-height. Vertical centering
14411
+ * is unaffected because the badge height is fixed and content is centered.
14412
+ */
14413
+ line-height: normal;
14414
+ }
14415
+
14416
+ /* Neutral variant */
14417
+ .muka-badge-number--neutral {
14418
+ background-color: var(--color-surface-level1);
14419
+ color: var(--color-text-default-default);
14420
+ }
14421
+
14422
+ /* Info variant */
14423
+ .muka-badge-number--info {
14424
+ background-color: var(--color-state-info-contrast);
14425
+ color: var(--color-text-default-inverse);
14426
+ }
14427
+
14428
+ /* Success variant */
14429
+ .muka-badge-number--success {
14430
+ background-color: var(--color-state-success-contrast);
14431
+ color: var(--color-text-default-inverse);
14432
+ }
14433
+
14434
+ /* Warning variant */
14435
+ .muka-badge-number--warning {
14436
+ background-color: var(--color-state-warning-contrast);
14437
+ color: var(--color-text-default-inverse);
14438
+ }
14439
+
14440
+ /* Error variant */
14441
+ .muka-badge-number--error {
14442
+ background-color: var(--color-state-error-contrast);
14443
+ color: var(--color-text-default-inverse);
14444
+ }
14445
+
14446
+
14439
14447
  /* Badge */
14440
14448
  /* Badge Component Styles - Using Muka Design Tokens */
14441
14449
 
@@ -14630,7 +14638,8 @@ button.muka-chat-photo-grid__tile:focus-visible {
14630
14638
  align-items: center;
14631
14639
  justify-content: center;
14632
14640
  flex-shrink: 0;
14633
- overflow: hidden;
14641
+ /* No overflow clipping: the status dot sits on the edge. The image and the
14642
+ loading shimmer round themselves to the avatar shape instead. */
14634
14643
  user-select: none;
14635
14644
  vertical-align: middle;
14636
14645
  background-color: var(--avatar-color-background-default);
@@ -14703,9 +14712,10 @@ button.muka-chat-photo-grid__tile:focus-visible {
14703
14712
  border-radius: var(--avatar-radius-square-sm);
14704
14713
  }
14705
14714
 
14706
- /* 4xs is too small for initials, the fallback icon or a status dot:
14715
+ /* 4xs is too small for initials, an icon, the fallback icon or a status dot:
14707
14716
  it shows the picture, or the plain background */
14708
14717
  .muka-avatar--4xs .muka-avatar__initials,
14718
+ .muka-avatar--4xs .muka-avatar__icon,
14709
14719
  .muka-avatar--4xs .muka-avatar__fallback,
14710
14720
  .muka-avatar--4xs .muka-avatar__status {
14711
14721
  display: none;
@@ -14741,38 +14751,59 @@ button.muka-chat-photo-grid__tile:focus-visible {
14741
14751
  .muka-avatar__skeleton {
14742
14752
  position: absolute;
14743
14753
  inset: 0;
14754
+ border-radius: inherit;
14744
14755
  background: linear-gradient(
14745
14756
  90deg,
14746
14757
  transparent 0%,
14747
14758
  var(--color-surface-level1) 50%,
14748
14759
  transparent 100%
14749
- );
14760
+ ) no-repeat;
14761
+ background-size: 50% 100%;
14750
14762
  animation: avatar-loading 1.5s ease-in-out infinite;
14751
14763
  }
14752
14764
 
14765
+ /* The highlight sweeps by background position, so it stays inside the
14766
+ rounded shape without the avatar clipping its overflow */
14753
14767
  @keyframes avatar-loading {
14754
14768
  0% {
14755
- transform: translateX(-100%);
14769
+ background-position: -100% 0;
14756
14770
  }
14757
14771
  100% {
14758
- transform: translateX(100%);
14772
+ background-position: 200% 0;
14759
14773
  }
14760
14774
  }
14761
14775
 
14762
14776
  /* Avatar content */
14763
14777
  .muka-avatar__image {
14778
+ border-radius: inherit;
14764
14779
  width: 100%;
14765
14780
  height: 100%;
14766
14781
  object-fit: cover;
14767
14782
  display: block;
14768
14783
  }
14769
14784
 
14785
+ /* Icon slot: a fixed icon size per avatar size, in the initials colour
14786
+ (subtle text) */
14770
14787
  .muka-avatar__icon {
14771
- width: 60%;
14772
- height: 60%;
14773
14788
  display: flex;
14774
14789
  align-items: center;
14775
14790
  justify-content: center;
14791
+ color: var(--avatar-color-foreground-default);
14792
+ }
14793
+
14794
+ .muka-avatar--3xs .muka-avatar__icon { width: var(--avatar-icon-size-3xs); height: var(--avatar-icon-size-3xs); }
14795
+ .muka-avatar--2xs .muka-avatar__icon { width: var(--avatar-icon-size-2xs); height: var(--avatar-icon-size-2xs); }
14796
+ .muka-avatar--xs .muka-avatar__icon { width: var(--avatar-icon-size-xs); height: var(--avatar-icon-size-xs); }
14797
+ .muka-avatar--sm .muka-avatar__icon { width: var(--avatar-icon-size-sm); height: var(--avatar-icon-size-sm); }
14798
+ .muka-avatar--md .muka-avatar__icon { width: var(--avatar-icon-size-md); height: var(--avatar-icon-size-md); }
14799
+ .muka-avatar--lg .muka-avatar__icon { width: var(--avatar-icon-size-lg); height: var(--avatar-icon-size-lg); }
14800
+ .muka-avatar--xl .muka-avatar__icon { width: var(--avatar-icon-size-xl); height: var(--avatar-icon-size-xl); }
14801
+
14802
+ /* A Muka Icon fills the slot and takes its colour (its own `color` prop still wins) */
14803
+ .muka-avatar__icon .muka-icon {
14804
+ width: 100%;
14805
+ height: 100%;
14806
+ color: inherit;
14776
14807
  }
14777
14808
 
14778
14809
  .muka-avatar__icon svg {
@@ -14879,9 +14910,12 @@ button.muka-chat-photo-grid__tile:focus-visible {
14879
14910
 
14880
14911
  /* Avatar Group (Figma "Avatar Stack") */
14881
14912
  .muka-avatar-group {
14913
+ position: relative;
14882
14914
  display: inline-flex;
14883
14915
  align-items: center;
14884
14916
  flex-direction: row;
14917
+ /* Never stretch to a grid cell or column, so the badge stays on the last avatar */
14918
+ width: fit-content;
14885
14919
  }
14886
14920
 
14887
14921
  /* Later avatars sit on top of earlier ones (DOM order); a hovered one comes to the front */
@@ -14901,7 +14935,7 @@ button.muka-chat-photo-grid__tile:focus-visible {
14901
14935
  box-shadow: 0 0 0 var(--avatar-group-ring-width) var(--avatar-group-ring-color);
14902
14936
  }
14903
14937
 
14904
- /* Overlap. Figma specifies exact values for 48 / 32 / 24px avatars (sm / 2xs / 3xs);
14938
+ /* Overlap. Figma specifies exact values for 40 / 32 / 24px avatars (xs / 2xs / 3xs);
14905
14939
  other sizes use the same proportions: tight 2/3, compact 1/2, spacious 1/3. */
14906
14940
  .muka-avatar-group--4xs { --muka-avatar-group-size: var(--avatar-size-4xs); }
14907
14941
  .muka-avatar-group--3xs { --muka-avatar-group-size: var(--avatar-size-3xs); }
@@ -14916,13 +14950,13 @@ button.muka-chat-photo-grid__tile:focus-visible {
14916
14950
  .muka-avatar-group--compact { --muka-avatar-group-overlap: calc(var(--muka-avatar-group-size) / 2); }
14917
14951
  .muka-avatar-group--spacious { --muka-avatar-group-overlap: calc(var(--muka-avatar-group-size) / 3); }
14918
14952
 
14919
- .muka-avatar-group--tight.muka-avatar-group--sm { --muka-avatar-group-overlap: var(--avatar-group-overlap-tight-sm); }
14953
+ .muka-avatar-group--tight.muka-avatar-group--xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-tight-xs); }
14920
14954
  .muka-avatar-group--tight.muka-avatar-group--2xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-tight-2xs); }
14921
14955
  .muka-avatar-group--tight.muka-avatar-group--3xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-tight-3xs); }
14922
- .muka-avatar-group--compact.muka-avatar-group--sm { --muka-avatar-group-overlap: var(--avatar-group-overlap-compact-sm); }
14956
+ .muka-avatar-group--compact.muka-avatar-group--xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-compact-xs); }
14923
14957
  .muka-avatar-group--compact.muka-avatar-group--2xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-compact-2xs); }
14924
14958
  .muka-avatar-group--compact.muka-avatar-group--3xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-compact-3xs); }
14925
- .muka-avatar-group--spacious.muka-avatar-group--sm { --muka-avatar-group-overlap: var(--avatar-group-overlap-spacious-sm); }
14959
+ .muka-avatar-group--spacious.muka-avatar-group--xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-spacious-xs); }
14926
14960
  .muka-avatar-group--spacious.muka-avatar-group--2xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-spacious-2xs); }
14927
14961
  .muka-avatar-group--spacious.muka-avatar-group--3xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-spacious-3xs); }
14928
14962
 
@@ -14930,6 +14964,14 @@ button.muka-chat-photo-grid__tile:focus-visible {
14930
14964
  margin-left: calc(-1 * var(--muka-avatar-group-overlap));
14931
14965
  }
14932
14966
 
14967
+ /* Badge: a BadgeNumber on the top-right corner of the stack, above every avatar */
14968
+ .muka-avatar-group__badge {
14969
+ position: absolute;
14970
+ top: calc(-1 * var(--avatar-group-badge-offset));
14971
+ right: calc(-1 * var(--avatar-group-badge-offset));
14972
+ z-index: 20;
14973
+ }
14974
+
14933
14975
  /* Overflow avatar styling */
14934
14976
  .muka-avatar--overflow {
14935
14977
  background-color: var(--avatar-color-background-default);