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