@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
@@ -2020,9 +2020,16 @@ body {
2020
2020
  --avatar-size-md: 4rem;
2021
2021
  --avatar-size-lg: 5rem;
2022
2022
  --avatar-size-xl: 7rem;
2023
+ --avatar-icon-size-3xs: 1rem;
2024
+ --avatar-icon-size-2xs: 1.25rem;
2025
+ --avatar-icon-size-xs: 1.5rem;
2026
+ --avatar-icon-size-sm: 2rem;
2027
+ --avatar-icon-size-md: 2.5rem;
2028
+ --avatar-icon-size-lg: 3rem;
2029
+ --avatar-icon-size-xl: 4rem;
2023
2030
  --avatar-color-background-default: #2a2a2a;
2024
2031
  --avatar-color-background-loading: #313131;
2025
- --avatar-color-foreground-default: #eeeeee;
2032
+ --avatar-color-foreground-default: #7b7b7b;
2026
2033
  --avatar-color-foreground-muted: #606060;
2027
2034
  --avatar-color-status-online: #30a46c;
2028
2035
  --avatar-color-status-offline: #606060;
@@ -2047,15 +2054,16 @@ body {
2047
2054
  --avatar-status-size-xl: 1.5rem;
2048
2055
  --avatar-group-ring-width: 0.125rem;
2049
2056
  --avatar-group-ring-color: #111111;
2050
- --avatar-group-overlap-tight-sm: 2rem;
2051
- --avatar-group-overlap-tight-2xs: 1.25rem;
2057
+ --avatar-group-overlap-tight-xs: 1.75rem;
2058
+ --avatar-group-overlap-tight-2xs: 1.5rem;
2052
2059
  --avatar-group-overlap-tight-3xs: 1rem;
2053
- --avatar-group-overlap-compact-sm: 1.5rem;
2054
- --avatar-group-overlap-compact-2xs: 1rem;
2055
- --avatar-group-overlap-compact-3xs: 0.75rem;
2056
- --avatar-group-overlap-spacious-sm: 1rem;
2060
+ --avatar-group-overlap-compact-xs: 1.5rem;
2061
+ --avatar-group-overlap-compact-2xs: 1.125rem;
2062
+ --avatar-group-overlap-compact-3xs: 0.875rem;
2063
+ --avatar-group-overlap-spacious-xs: 1rem;
2057
2064
  --avatar-group-overlap-spacious-2xs: 0.75rem;
2058
2065
  --avatar-group-overlap-spacious-3xs: 0.5rem;
2066
+ --avatar-group-badge-offset: 0.25rem;
2059
2067
  --toast-color-info-background: #eeeeee;
2060
2068
  --toast-color-info-foreground: #111111;
2061
2069
  --toast-color-info-accent: #0d2847;
@@ -2429,38 +2437,6 @@ body {
2429
2437
  }
2430
2438
 
2431
2439
 
2432
- /* VoiceMessage */
2433
- /* VoiceMessage Component Styles */
2434
-
2435
- .muka-voice-message {
2436
- display: flex;
2437
- align-items: center;
2438
- gap: var(--spacing-3);
2439
- width: 100%;
2440
- min-width: min(16rem, 60vw);
2441
- }
2442
-
2443
- .muka-voice-message__wave {
2444
- flex: 1 1 auto;
2445
- min-width: 0;
2446
- }
2447
-
2448
- .muka-voice-message__time {
2449
- flex: 0 0 auto;
2450
- white-space: nowrap;
2451
- font-size: var(--text-label-sm-fontSize, 0.75rem);
2452
- line-height: var(--text-label-sm-lineHeight, 1);
2453
- font-variant-numeric: tabular-nums;
2454
- color: var(--color-text-subtle-default);
2455
- }
2456
-
2457
- /* On the tinted own bubble the surface is the action color, so the timer flips
2458
- * to the inverse text token for contrast. */
2459
- .muka-voice-message--own .muka-voice-message__time {
2460
- color: var(--color-text-default-inverse);
2461
- }
2462
-
2463
-
2464
2440
  /* View */
2465
2441
  /* View Component Styles */
2466
2442
 
@@ -2571,6 +2547,38 @@ body {
2571
2547
  }
2572
2548
 
2573
2549
 
2550
+ /* VoiceMessage */
2551
+ /* VoiceMessage Component Styles */
2552
+
2553
+ .muka-voice-message {
2554
+ display: flex;
2555
+ align-items: center;
2556
+ gap: var(--spacing-3);
2557
+ width: 100%;
2558
+ min-width: min(16rem, 60vw);
2559
+ }
2560
+
2561
+ .muka-voice-message__wave {
2562
+ flex: 1 1 auto;
2563
+ min-width: 0;
2564
+ }
2565
+
2566
+ .muka-voice-message__time {
2567
+ flex: 0 0 auto;
2568
+ white-space: nowrap;
2569
+ font-size: var(--text-label-sm-fontSize, 0.75rem);
2570
+ line-height: var(--text-label-sm-lineHeight, 1);
2571
+ font-variant-numeric: tabular-nums;
2572
+ color: var(--color-text-subtle-default);
2573
+ }
2574
+
2575
+ /* On the tinted own bubble the surface is the action color, so the timer flips
2576
+ * to the inverse text token for contrast. */
2577
+ .muka-voice-message--own .muka-voice-message__time {
2578
+ color: var(--color-text-default-inverse);
2579
+ }
2580
+
2581
+
2574
2582
  /* Typography */
2575
2583
  .muka-typography-catalog {
2576
2584
  display: flex;
@@ -6116,219 +6124,147 @@ body {
6116
6124
  }
6117
6125
 
6118
6126
 
6119
- /* RangeSlider */
6120
- /* RangeSlider Component Styles - Using Muka Design Tokens */
6127
+ /* Radio */
6128
+ /* Radio Component Styles - Using Muka Design Tokens */
6121
6129
 
6122
- .muka-range-slider {
6123
- display: flex;
6124
- flex-direction: column;
6125
- gap: var(--spacing-1);
6126
- width: 100%;
6130
+ /* Wrapper - clickable label container */
6131
+ .muka-radio {
6132
+ display: inline-flex;
6133
+ align-items: center;
6134
+ gap: var(--spacing-4);
6135
+ cursor: pointer;
6136
+ user-select: none;
6127
6137
  }
6128
6138
 
6129
- /* ========================================
6130
- HEADER: label group (label + info + optional) and value readout
6131
- ======================================== */
6132
-
6133
- .muka-range-slider__header {
6134
- display: flex;
6135
- align-items: center;
6136
- justify-content: space-between;
6137
- gap: var(--spacing-2);
6138
- min-height: 24px;
6139
+ .muka-radio--disabled {
6140
+ cursor: not-allowed;
6141
+ opacity: 0.6;
6139
6142
  }
6140
6143
 
6141
- .muka-range-slider__label-group {
6144
+ /* Control container */
6145
+ .muka-radio__control {
6146
+ position: relative;
6142
6147
  display: inline-flex;
6143
6148
  align-items: center;
6144
- gap: var(--spacing-2);
6149
+ justify-content: center;
6150
+ flex-shrink: 0;
6145
6151
  }
6146
6152
 
6147
- .muka-range-slider__label {
6148
- font-family: var(--text-label-md-semibold-fontFamily);
6149
- font-weight: var(--text-label-md-semibold-fontWeight);
6150
- font-size: var(--text-label-md-semibold-fontSize);
6151
- line-height: var(--text-label-md-semibold-lineHeight);
6152
- color: var(--color-text-default-default);
6153
+ /* Hidden native input */
6154
+ .muka-radio__input {
6155
+ position: absolute;
6156
+ width: 1px;
6157
+ height: 1px;
6158
+ padding: 0;
6159
+ margin: -1px;
6160
+ overflow: hidden;
6161
+ clip: rect(0, 0, 0, 0);
6162
+ white-space: nowrap;
6163
+ border: 0;
6153
6164
  }
6154
6165
 
6155
- .muka-range-slider__info {
6156
- color: var(--color-text-subtle-default);
6166
+ /* Visual indicator (circle) */
6167
+ .muka-radio__indicator {
6168
+ display: flex;
6169
+ align-items: center;
6170
+ justify-content: center;
6171
+ width: var(--radio-size-default);
6172
+ height: var(--radio-size-default);
6173
+ border-radius: var(--border-radius-full);
6174
+ background-color: var(--radio-color-default-background);
6175
+ border: var(--border-width-regular) solid var(--radio-color-default-border);
6176
+ transition: all 0.15s ease;
6177
+ box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.15);
6157
6178
  }
6158
6179
 
6159
- .muka-range-slider__optional {
6160
- font-family: var(--text-label-sm-regular-fontFamily);
6161
- font-weight: var(--text-label-sm-regular-fontWeight);
6162
- font-size: var(--text-label-sm-regular-fontSize);
6163
- line-height: var(--text-label-sm-regular-lineHeight);
6164
- color: var(--color-text-subtle-default);
6180
+ /* Size variants */
6181
+ .muka-radio--sm .muka-radio__indicator {
6182
+ width: var(--radio-size-sm);
6183
+ height: var(--radio-size-sm);
6165
6184
  }
6166
6185
 
6167
- .muka-range-slider__value {
6168
- font-family: var(--text-label-md-regular-fontFamily);
6169
- font-weight: var(--text-label-md-regular-fontWeight);
6170
- font-size: var(--text-label-md-regular-fontSize);
6171
- line-height: var(--text-label-md-regular-lineHeight);
6172
- color: var(--color-text-default-default);
6173
- font-variant-numeric: tabular-nums;
6186
+ .muka-radio--lg .muka-radio__indicator {
6187
+ width: var(--radio-size-lg);
6188
+ height: var(--radio-size-lg);
6174
6189
  }
6175
6190
 
6176
- .muka-range-slider__helper {
6177
- margin: 0;
6178
- font-family: var(--text-body-sm-regular-fontFamily);
6179
- font-weight: var(--text-body-sm-regular-fontWeight);
6180
- font-size: var(--text-body-sm-regular-fontSize);
6181
- line-height: var(--text-body-sm-regular-lineHeight);
6182
- color: var(--color-text-subtle-default);
6191
+ /* Inner dot (shown when checked) */
6192
+ .muka-radio__dot {
6193
+ width: var(--radio-dot-size-default);
6194
+ height: var(--radio-dot-size-default);
6195
+ border-radius: var(--border-radius-full);
6196
+ background-color: var(--radio-color-default-dot);
6197
+ transform: scale(0);
6198
+ transition: transform 0.15s ease;
6183
6199
  }
6184
6200
 
6185
- /* ========================================
6186
- TRACK + THUMB
6187
- Native range input, restyled. A thick sunken track holds an accent fill up to
6188
- the current value, with a circular grip handle. The filled portion is driven
6189
- by the inline --muka-range-fill custom property (set from the component value).
6190
- ======================================== */
6191
-
6192
- /* Size variants: track height, thumb diameter and grip geometry */
6193
- .muka-range-slider--sm {
6194
- --muka-range-track-h: 12px;
6195
- --muka-range-thumb: 24px;
6196
- --muka-range-grip-h: 9px;
6197
- }
6198
- .muka-range-slider--md {
6199
- --muka-range-track-h: 16px;
6200
- --muka-range-thumb: 32px;
6201
- --muka-range-grip-h: 12px;
6202
- }
6203
- .muka-range-slider--lg {
6204
- --muka-range-track-h: 20px;
6205
- --muka-range-thumb: 40px;
6206
- --muka-range-grip-h: 15px;
6201
+ .muka-radio--sm .muka-radio__dot {
6202
+ width: var(--radio-dot-size-sm);
6203
+ height: var(--radio-dot-size-sm);
6207
6204
  }
6208
6205
 
6209
- .muka-range-slider__bar {
6210
- /* Reserve the full thumb height so the handle never clips the layout. */
6211
- display: flex;
6212
- align-items: center;
6213
- height: var(--muka-range-thumb);
6206
+ .muka-radio--lg .muka-radio__dot {
6207
+ width: var(--radio-dot-size-lg);
6208
+ height: var(--radio-dot-size-lg);
6214
6209
  }
6215
6210
 
6216
- .muka-range-slider__input {
6217
- -webkit-appearance: none;
6218
- appearance: none;
6219
- width: 100%;
6220
- height: var(--muka-range-thumb);
6221
- margin: 0;
6222
- background: transparent;
6223
- cursor: pointer;
6224
-
6225
- /* Grip handle fill + two vertical grip bars, all theme-aware. */
6226
- --muka-range-grip-color: var(--color-text-subtle-default);
6227
- --muka-range-grip-w: 2px;
6228
- --muka-range-grip-gap: 3px;
6211
+ /* Hover state - removed per design */
6229
6212
 
6230
- /* The track fill: action colour up to the value, sunken surface beyond it. */
6231
- --muka-range-track-fill: linear-gradient(
6232
- to right,
6233
- var(--color-action-default) 0,
6234
- var(--color-action-default) var(--muka-range-fill, 0%),
6235
- var(--color-surface-sunken) var(--muka-range-fill, 0%),
6236
- var(--color-surface-sunken) 100%
6237
- );
6213
+ /* Focus state */
6214
+ .muka-radio__input:focus-visible + .muka-radio__indicator {
6215
+ outline: 2px solid var(--color-border-focus);
6216
+ outline-offset: 2px;
6238
6217
  }
6239
6218
 
6240
- .muka-range-slider__input:focus {
6241
- outline: none;
6219
+ /* Checked state */
6220
+ .muka-radio__input:checked + .muka-radio__indicator {
6221
+ background-color: var(--radio-color-checked-background);
6222
+ border-width: var(--border-width-bold);
6223
+ border-color: var(--radio-color-checked-border);
6224
+ box-shadow: none;
6242
6225
  }
6243
6226
 
6244
- /* WebKit / Blink track */
6245
- .muka-range-slider__input::-webkit-slider-runnable-track {
6246
- height: var(--muka-range-track-h);
6247
- border-radius: var(--border-radius-full);
6248
- background-image: var(--muka-range-track-fill);
6249
- border: 1px solid var(--color-border-contrast);
6250
- box-shadow: var(--shadow-sunken);
6227
+ .muka-radio__input:checked + .muka-radio__indicator .muka-radio__dot {
6228
+ background-color: var(--radio-color-checked-dot);
6229
+ transform: scale(1);
6251
6230
  }
6252
6231
 
6253
- /* Firefox track + progress */
6254
- .muka-range-slider__input::-moz-range-track {
6255
- height: var(--muka-range-track-h);
6256
- border-radius: var(--border-radius-full);
6257
- background: var(--color-surface-sunken);
6258
- border: 1px solid var(--color-border-contrast);
6259
- box-shadow: var(--shadow-sunken);
6260
- }
6261
- .muka-range-slider__input::-moz-range-progress {
6262
- height: var(--muka-range-track-h);
6263
- border-radius: var(--border-radius-full);
6264
- background: var(--color-action-default);
6232
+ /* Disabled state */
6233
+ .muka-radio--disabled .muka-radio__indicator {
6234
+ background-color: var(--radio-color-disabled-background);
6235
+ border-color: var(--radio-color-disabled-border);
6236
+ box-shadow: none;
6265
6237
  }
6266
6238
 
6267
- /* WebKit / Blink thumb (vertically centred over the track) */
6268
- .muka-range-slider__input::-webkit-slider-thumb {
6269
- -webkit-appearance: none;
6270
- appearance: none;
6271
- width: var(--muka-range-thumb);
6272
- height: var(--muka-range-thumb);
6273
- margin-top: calc((var(--muka-range-track-h) - var(--muka-range-thumb)) / 2);
6274
- border-radius: var(--border-radius-full);
6275
- border: 1px solid var(--color-border-contrast);
6276
- box-shadow: var(--shadow-level2);
6277
- background-color: var(--color-surface-level1);
6278
- background-image:
6279
- linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color)),
6280
- linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color));
6281
- background-repeat: no-repeat;
6282
- background-size: var(--muka-range-grip-w) var(--muka-range-grip-h), var(--muka-range-grip-w) var(--muka-range-grip-h);
6283
- background-position:
6284
- calc(50% - var(--muka-range-grip-gap)) center,
6285
- calc(50% + var(--muka-range-grip-gap)) center;
6286
- transition: box-shadow 0.15s ease, background-color 0.15s ease;
6239
+ .muka-radio__input:disabled:checked + .muka-radio__indicator .muka-radio__dot {
6240
+ background-color: var(--radio-color-disabled-dot);
6287
6241
  }
6288
6242
 
6289
- /* Firefox thumb */
6290
- .muka-range-slider__input::-moz-range-thumb {
6291
- width: var(--muka-range-thumb);
6292
- height: var(--muka-range-thumb);
6293
- border-radius: var(--border-radius-full);
6294
- border: 1px solid var(--color-border-contrast);
6295
- box-shadow: var(--shadow-level2);
6296
- background-color: var(--color-surface-level1);
6297
- background-image:
6298
- linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color)),
6299
- linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color));
6300
- background-repeat: no-repeat;
6301
- background-size: var(--muka-range-grip-w) var(--muka-range-grip-h), var(--muka-range-grip-w) var(--muka-range-grip-h);
6302
- background-position:
6303
- calc(50% - var(--muka-range-grip-gap)) center,
6304
- calc(50% + var(--muka-range-grip-gap)) center;
6305
- transition: box-shadow 0.15s ease, background-color 0.15s ease;
6243
+ /* Label text */
6244
+ .muka-radio__label {
6245
+ font-family: var(--text-label-lg-regular-fontFamily);
6246
+ font-weight: var(--text-label-lg-regular-fontWeight);
6247
+ font-size: var(--text-label-lg-regular-fontSize);
6248
+ line-height: var(--text-label-lg-regular-lineHeight);
6249
+ color: var(--color-text-default-default);
6306
6250
  }
6307
6251
 
6308
- /* Hover */
6309
- .muka-range-slider__input:hover::-webkit-slider-thumb {
6310
- background-color: var(--color-surface-level1);
6311
- box-shadow: var(--shadow-level3);
6312
- }
6313
- .muka-range-slider__input:hover::-moz-range-thumb {
6314
- background-color: var(--color-surface-level1);
6315
- box-shadow: var(--shadow-level3);
6252
+ .muka-radio--sm .muka-radio__label {
6253
+ font-family: var(--text-label-md-regular-fontFamily);
6254
+ font-weight: var(--text-label-md-regular-fontWeight);
6255
+ font-size: var(--text-label-md-regular-fontSize);
6256
+ line-height: var(--text-label-md-regular-lineHeight);
6316
6257
  }
6317
6258
 
6318
- /* Focus ring */
6319
- .muka-range-slider__input:focus-visible::-webkit-slider-thumb {
6320
- box-shadow: var(--shadow-level2), 0 0 0 3px var(--color-border-focus);
6321
- }
6322
- .muka-range-slider__input:focus-visible::-moz-range-thumb {
6323
- box-shadow: var(--shadow-level2), 0 0 0 3px var(--color-border-focus);
6259
+ .muka-radio--lg .muka-radio__label {
6260
+ font-family: var(--text-label-xl-regular-fontFamily);
6261
+ font-weight: var(--text-label-xl-regular-fontWeight);
6262
+ font-size: var(--text-label-xl-regular-fontSize);
6263
+ line-height: var(--text-label-xl-regular-lineHeight);
6324
6264
  }
6325
6265
 
6326
- /* Disabled */
6327
- .muka-range-slider--disabled {
6328
- opacity: 0.5;
6329
- }
6330
- .muka-range-slider--disabled .muka-range-slider__input {
6331
- cursor: not-allowed;
6266
+ .muka-radio--disabled .muka-radio__label {
6267
+ color: var(--color-text-subtle-default);
6332
6268
  }
6333
6269
 
6334
6270
 
@@ -6475,150 +6411,6 @@ body {
6475
6411
  }
6476
6412
 
6477
6413
 
6478
- /* Radio */
6479
- /* Radio Component Styles - Using Muka Design Tokens */
6480
-
6481
- /* Wrapper - clickable label container */
6482
- .muka-radio {
6483
- display: inline-flex;
6484
- align-items: center;
6485
- gap: var(--spacing-4);
6486
- cursor: pointer;
6487
- user-select: none;
6488
- }
6489
-
6490
- .muka-radio--disabled {
6491
- cursor: not-allowed;
6492
- opacity: 0.6;
6493
- }
6494
-
6495
- /* Control container */
6496
- .muka-radio__control {
6497
- position: relative;
6498
- display: inline-flex;
6499
- align-items: center;
6500
- justify-content: center;
6501
- flex-shrink: 0;
6502
- }
6503
-
6504
- /* Hidden native input */
6505
- .muka-radio__input {
6506
- position: absolute;
6507
- width: 1px;
6508
- height: 1px;
6509
- padding: 0;
6510
- margin: -1px;
6511
- overflow: hidden;
6512
- clip: rect(0, 0, 0, 0);
6513
- white-space: nowrap;
6514
- border: 0;
6515
- }
6516
-
6517
- /* Visual indicator (circle) */
6518
- .muka-radio__indicator {
6519
- display: flex;
6520
- align-items: center;
6521
- justify-content: center;
6522
- width: var(--radio-size-default);
6523
- height: var(--radio-size-default);
6524
- border-radius: var(--border-radius-full);
6525
- background-color: var(--radio-color-default-background);
6526
- border: var(--border-width-regular) solid var(--radio-color-default-border);
6527
- transition: all 0.15s ease;
6528
- box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.15);
6529
- }
6530
-
6531
- /* Size variants */
6532
- .muka-radio--sm .muka-radio__indicator {
6533
- width: var(--radio-size-sm);
6534
- height: var(--radio-size-sm);
6535
- }
6536
-
6537
- .muka-radio--lg .muka-radio__indicator {
6538
- width: var(--radio-size-lg);
6539
- height: var(--radio-size-lg);
6540
- }
6541
-
6542
- /* Inner dot (shown when checked) */
6543
- .muka-radio__dot {
6544
- width: var(--radio-dot-size-default);
6545
- height: var(--radio-dot-size-default);
6546
- border-radius: var(--border-radius-full);
6547
- background-color: var(--radio-color-default-dot);
6548
- transform: scale(0);
6549
- transition: transform 0.15s ease;
6550
- }
6551
-
6552
- .muka-radio--sm .muka-radio__dot {
6553
- width: var(--radio-dot-size-sm);
6554
- height: var(--radio-dot-size-sm);
6555
- }
6556
-
6557
- .muka-radio--lg .muka-radio__dot {
6558
- width: var(--radio-dot-size-lg);
6559
- height: var(--radio-dot-size-lg);
6560
- }
6561
-
6562
- /* Hover state - removed per design */
6563
-
6564
- /* Focus state */
6565
- .muka-radio__input:focus-visible + .muka-radio__indicator {
6566
- outline: 2px solid var(--color-border-focus);
6567
- outline-offset: 2px;
6568
- }
6569
-
6570
- /* Checked state */
6571
- .muka-radio__input:checked + .muka-radio__indicator {
6572
- background-color: var(--radio-color-checked-background);
6573
- border-width: var(--border-width-bold);
6574
- border-color: var(--radio-color-checked-border);
6575
- box-shadow: none;
6576
- }
6577
-
6578
- .muka-radio__input:checked + .muka-radio__indicator .muka-radio__dot {
6579
- background-color: var(--radio-color-checked-dot);
6580
- transform: scale(1);
6581
- }
6582
-
6583
- /* Disabled state */
6584
- .muka-radio--disabled .muka-radio__indicator {
6585
- background-color: var(--radio-color-disabled-background);
6586
- border-color: var(--radio-color-disabled-border);
6587
- box-shadow: none;
6588
- }
6589
-
6590
- .muka-radio__input:disabled:checked + .muka-radio__indicator .muka-radio__dot {
6591
- background-color: var(--radio-color-disabled-dot);
6592
- }
6593
-
6594
- /* Label text */
6595
- .muka-radio__label {
6596
- font-family: var(--text-label-lg-regular-fontFamily);
6597
- font-weight: var(--text-label-lg-regular-fontWeight);
6598
- font-size: var(--text-label-lg-regular-fontSize);
6599
- line-height: var(--text-label-lg-regular-lineHeight);
6600
- color: var(--color-text-default-default);
6601
- }
6602
-
6603
- .muka-radio--sm .muka-radio__label {
6604
- font-family: var(--text-label-md-regular-fontFamily);
6605
- font-weight: var(--text-label-md-regular-fontWeight);
6606
- font-size: var(--text-label-md-regular-fontSize);
6607
- line-height: var(--text-label-md-regular-lineHeight);
6608
- }
6609
-
6610
- .muka-radio--lg .muka-radio__label {
6611
- font-family: var(--text-label-xl-regular-fontFamily);
6612
- font-weight: var(--text-label-xl-regular-fontWeight);
6613
- font-size: var(--text-label-xl-regular-fontSize);
6614
- line-height: var(--text-label-xl-regular-lineHeight);
6615
- }
6616
-
6617
- .muka-radio--disabled .muka-radio__label {
6618
- color: var(--color-text-subtle-default);
6619
- }
6620
-
6621
-
6622
6414
  /* PullToRefresh */
6623
6415
  /* PullToRefresh Component Styles */
6624
6416
 
@@ -7265,65 +7057,281 @@ body {
7265
7057
  grid-template-rows: 0fr;
7266
7058
  }
7267
7059
 
7268
- /* The direct grid child clips and must have NO padding/border of its own —
7269
- min-height:0 lets it shrink, and with no padding the 0fr track reaches a true
7270
- 0 height (padding on the item would leave a residual gap when collapsed). */
7271
- .muka-progress-accordeon__slot-clip {
7272
- overflow: hidden;
7273
- min-height: 0;
7060
+ /* The direct grid child clips and must have NO padding/border of its own —
7061
+ min-height:0 lets it shrink, and with no padding the 0fr track reaches a true
7062
+ 0 height (padding on the item would leave a residual gap when collapsed). */
7063
+ .muka-progress-accordeon__slot-clip {
7064
+ overflow: hidden;
7065
+ min-height: 0;
7066
+ }
7067
+
7068
+ /* The header↔content spacing lives on the inner slot (inside the clip region)
7069
+ so it collapses together with the content. */
7070
+ .muka-progress-accordeon__slot-wrapper .muka-progress-accordeon__slot {
7071
+ padding-top: var(--spacing-4);
7072
+ }
7073
+
7074
+ /* ─── Action buttons (current state) ─────────────────────── */
7075
+ .muka-progress-accordeon__actions {
7076
+ display: flex;
7077
+ justify-content: flex-end;
7078
+ gap: var(--spacing-4);
7079
+ width: 100%;
7080
+ }
7081
+
7082
+ .muka-progress-accordeon__action {
7083
+ min-width: 160px;
7084
+ }
7085
+
7086
+ /* ─── Divider ────────────────────────────────────────────── */
7087
+ .muka-progress-accordeon__divider {
7088
+ width: 100%;
7089
+ }
7090
+
7091
+ /* ─── Responsive (narrow container) ──────────────────────── */
7092
+ @container (max-width: 480px) {
7093
+ /* Heading steps down to heading/sm. The 24px line-height is shorter than the
7094
+ 32px step indicator, so nudge the text down to keep a single line centred. */
7095
+ .muka-progress-accordeon__heading {
7096
+ font-size: var(--text-heading-sm-fontSize);
7097
+ line-height: var(--text-heading-sm-lineHeight);
7098
+ padding-top: var(--spacing-1);
7099
+ }
7100
+
7101
+ /* Edit button swaps to the icon-only variant */
7102
+ .muka-progress-accordeon__edit--wide {
7103
+ display: none;
7104
+ }
7105
+
7106
+ .muka-progress-accordeon__edit--narrow {
7107
+ display: inline-flex;
7108
+ }
7109
+
7110
+ /* Action buttons stretch to fill the row */
7111
+ .muka-progress-accordeon__actions {
7112
+ justify-content: stretch;
7113
+ }
7114
+
7115
+ .muka-progress-accordeon__action {
7116
+ flex: 1 0 0;
7117
+ min-width: 0;
7118
+ }
7119
+ }
7120
+
7121
+
7122
+ /* RangeSlider */
7123
+ /* RangeSlider Component Styles - Using Muka Design Tokens */
7124
+
7125
+ .muka-range-slider {
7126
+ display: flex;
7127
+ flex-direction: column;
7128
+ gap: var(--spacing-1);
7129
+ width: 100%;
7130
+ }
7131
+
7132
+ /* ========================================
7133
+ HEADER: label group (label + info + optional) and value readout
7134
+ ======================================== */
7135
+
7136
+ .muka-range-slider__header {
7137
+ display: flex;
7138
+ align-items: center;
7139
+ justify-content: space-between;
7140
+ gap: var(--spacing-2);
7141
+ min-height: 24px;
7142
+ }
7143
+
7144
+ .muka-range-slider__label-group {
7145
+ display: inline-flex;
7146
+ align-items: center;
7147
+ gap: var(--spacing-2);
7148
+ }
7149
+
7150
+ .muka-range-slider__label {
7151
+ font-family: var(--text-label-md-semibold-fontFamily);
7152
+ font-weight: var(--text-label-md-semibold-fontWeight);
7153
+ font-size: var(--text-label-md-semibold-fontSize);
7154
+ line-height: var(--text-label-md-semibold-lineHeight);
7155
+ color: var(--color-text-default-default);
7156
+ }
7157
+
7158
+ .muka-range-slider__info {
7159
+ color: var(--color-text-subtle-default);
7160
+ }
7161
+
7162
+ .muka-range-slider__optional {
7163
+ font-family: var(--text-label-sm-regular-fontFamily);
7164
+ font-weight: var(--text-label-sm-regular-fontWeight);
7165
+ font-size: var(--text-label-sm-regular-fontSize);
7166
+ line-height: var(--text-label-sm-regular-lineHeight);
7167
+ color: var(--color-text-subtle-default);
7168
+ }
7169
+
7170
+ .muka-range-slider__value {
7171
+ font-family: var(--text-label-md-regular-fontFamily);
7172
+ font-weight: var(--text-label-md-regular-fontWeight);
7173
+ font-size: var(--text-label-md-regular-fontSize);
7174
+ line-height: var(--text-label-md-regular-lineHeight);
7175
+ color: var(--color-text-default-default);
7176
+ font-variant-numeric: tabular-nums;
7177
+ }
7178
+
7179
+ .muka-range-slider__helper {
7180
+ margin: 0;
7181
+ font-family: var(--text-body-sm-regular-fontFamily);
7182
+ font-weight: var(--text-body-sm-regular-fontWeight);
7183
+ font-size: var(--text-body-sm-regular-fontSize);
7184
+ line-height: var(--text-body-sm-regular-lineHeight);
7185
+ color: var(--color-text-subtle-default);
7186
+ }
7187
+
7188
+ /* ========================================
7189
+ TRACK + THUMB
7190
+ Native range input, restyled. A thick sunken track holds an accent fill up to
7191
+ the current value, with a circular grip handle. The filled portion is driven
7192
+ by the inline --muka-range-fill custom property (set from the component value).
7193
+ ======================================== */
7194
+
7195
+ /* Size variants: track height, thumb diameter and grip geometry */
7196
+ .muka-range-slider--sm {
7197
+ --muka-range-track-h: 12px;
7198
+ --muka-range-thumb: 24px;
7199
+ --muka-range-grip-h: 9px;
7200
+ }
7201
+ .muka-range-slider--md {
7202
+ --muka-range-track-h: 16px;
7203
+ --muka-range-thumb: 32px;
7204
+ --muka-range-grip-h: 12px;
7205
+ }
7206
+ .muka-range-slider--lg {
7207
+ --muka-range-track-h: 20px;
7208
+ --muka-range-thumb: 40px;
7209
+ --muka-range-grip-h: 15px;
7210
+ }
7211
+
7212
+ .muka-range-slider__bar {
7213
+ /* Reserve the full thumb height so the handle never clips the layout. */
7214
+ display: flex;
7215
+ align-items: center;
7216
+ height: var(--muka-range-thumb);
7217
+ }
7218
+
7219
+ .muka-range-slider__input {
7220
+ -webkit-appearance: none;
7221
+ appearance: none;
7222
+ width: 100%;
7223
+ height: var(--muka-range-thumb);
7224
+ margin: 0;
7225
+ background: transparent;
7226
+ cursor: pointer;
7227
+
7228
+ /* Grip handle fill + two vertical grip bars, all theme-aware. */
7229
+ --muka-range-grip-color: var(--color-text-subtle-default);
7230
+ --muka-range-grip-w: 2px;
7231
+ --muka-range-grip-gap: 3px;
7232
+
7233
+ /* The track fill: action colour up to the value, sunken surface beyond it. */
7234
+ --muka-range-track-fill: linear-gradient(
7235
+ to right,
7236
+ var(--color-action-default) 0,
7237
+ var(--color-action-default) var(--muka-range-fill, 0%),
7238
+ var(--color-surface-sunken) var(--muka-range-fill, 0%),
7239
+ var(--color-surface-sunken) 100%
7240
+ );
7241
+ }
7242
+
7243
+ .muka-range-slider__input:focus {
7244
+ outline: none;
7274
7245
  }
7275
7246
 
7276
- /* The header↔content spacing lives on the inner slot (inside the clip region)
7277
- so it collapses together with the content. */
7278
- .muka-progress-accordeon__slot-wrapper .muka-progress-accordeon__slot {
7279
- padding-top: var(--spacing-4);
7247
+ /* WebKit / Blink track */
7248
+ .muka-range-slider__input::-webkit-slider-runnable-track {
7249
+ height: var(--muka-range-track-h);
7250
+ border-radius: var(--border-radius-full);
7251
+ background-image: var(--muka-range-track-fill);
7252
+ border: 1px solid var(--color-border-contrast);
7253
+ box-shadow: var(--shadow-sunken);
7280
7254
  }
7281
7255
 
7282
- /* ─── Action buttons (current state) ─────────────────────── */
7283
- .muka-progress-accordeon__actions {
7284
- display: flex;
7285
- justify-content: flex-end;
7286
- gap: var(--spacing-4);
7287
- width: 100%;
7256
+ /* Firefox track + progress */
7257
+ .muka-range-slider__input::-moz-range-track {
7258
+ height: var(--muka-range-track-h);
7259
+ border-radius: var(--border-radius-full);
7260
+ background: var(--color-surface-sunken);
7261
+ border: 1px solid var(--color-border-contrast);
7262
+ box-shadow: var(--shadow-sunken);
7288
7263
  }
7289
-
7290
- .muka-progress-accordeon__action {
7291
- min-width: 160px;
7264
+ .muka-range-slider__input::-moz-range-progress {
7265
+ height: var(--muka-range-track-h);
7266
+ border-radius: var(--border-radius-full);
7267
+ background: var(--color-action-default);
7292
7268
  }
7293
7269
 
7294
- /* ─── Divider ────────────────────────────────────────────── */
7295
- .muka-progress-accordeon__divider {
7296
- width: 100%;
7270
+ /* WebKit / Blink thumb (vertically centred over the track) */
7271
+ .muka-range-slider__input::-webkit-slider-thumb {
7272
+ -webkit-appearance: none;
7273
+ appearance: none;
7274
+ width: var(--muka-range-thumb);
7275
+ height: var(--muka-range-thumb);
7276
+ margin-top: calc((var(--muka-range-track-h) - var(--muka-range-thumb)) / 2);
7277
+ border-radius: var(--border-radius-full);
7278
+ border: 1px solid var(--color-border-contrast);
7279
+ box-shadow: var(--shadow-level2);
7280
+ background-color: var(--color-surface-level1);
7281
+ background-image:
7282
+ linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color)),
7283
+ linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color));
7284
+ background-repeat: no-repeat;
7285
+ background-size: var(--muka-range-grip-w) var(--muka-range-grip-h), var(--muka-range-grip-w) var(--muka-range-grip-h);
7286
+ background-position:
7287
+ calc(50% - var(--muka-range-grip-gap)) center,
7288
+ calc(50% + var(--muka-range-grip-gap)) center;
7289
+ transition: box-shadow 0.15s ease, background-color 0.15s ease;
7297
7290
  }
7298
7291
 
7299
- /* ─── Responsive (narrow container) ──────────────────────── */
7300
- @container (max-width: 480px) {
7301
- /* Heading steps down to heading/sm. The 24px line-height is shorter than the
7302
- 32px step indicator, so nudge the text down to keep a single line centred. */
7303
- .muka-progress-accordeon__heading {
7304
- font-size: var(--text-heading-sm-fontSize);
7305
- line-height: var(--text-heading-sm-lineHeight);
7306
- padding-top: var(--spacing-1);
7307
- }
7308
-
7309
- /* Edit button swaps to the icon-only variant */
7310
- .muka-progress-accordeon__edit--wide {
7311
- display: none;
7312
- }
7292
+ /* Firefox thumb */
7293
+ .muka-range-slider__input::-moz-range-thumb {
7294
+ width: var(--muka-range-thumb);
7295
+ height: var(--muka-range-thumb);
7296
+ border-radius: var(--border-radius-full);
7297
+ border: 1px solid var(--color-border-contrast);
7298
+ box-shadow: var(--shadow-level2);
7299
+ background-color: var(--color-surface-level1);
7300
+ background-image:
7301
+ linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color)),
7302
+ linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color));
7303
+ background-repeat: no-repeat;
7304
+ background-size: var(--muka-range-grip-w) var(--muka-range-grip-h), var(--muka-range-grip-w) var(--muka-range-grip-h);
7305
+ background-position:
7306
+ calc(50% - var(--muka-range-grip-gap)) center,
7307
+ calc(50% + var(--muka-range-grip-gap)) center;
7308
+ transition: box-shadow 0.15s ease, background-color 0.15s ease;
7309
+ }
7313
7310
 
7314
- .muka-progress-accordeon__edit--narrow {
7315
- display: inline-flex;
7316
- }
7311
+ /* Hover */
7312
+ .muka-range-slider__input:hover::-webkit-slider-thumb {
7313
+ background-color: var(--color-surface-level1);
7314
+ box-shadow: var(--shadow-level3);
7315
+ }
7316
+ .muka-range-slider__input:hover::-moz-range-thumb {
7317
+ background-color: var(--color-surface-level1);
7318
+ box-shadow: var(--shadow-level3);
7319
+ }
7317
7320
 
7318
- /* Action buttons stretch to fill the row */
7319
- .muka-progress-accordeon__actions {
7320
- justify-content: stretch;
7321
- }
7321
+ /* Focus ring */
7322
+ .muka-range-slider__input:focus-visible::-webkit-slider-thumb {
7323
+ box-shadow: var(--shadow-level2), 0 0 0 3px var(--color-border-focus);
7324
+ }
7325
+ .muka-range-slider__input:focus-visible::-moz-range-thumb {
7326
+ box-shadow: var(--shadow-level2), 0 0 0 3px var(--color-border-focus);
7327
+ }
7322
7328
 
7323
- .muka-progress-accordeon__action {
7324
- flex: 1 0 0;
7325
- min-width: 0;
7326
- }
7329
+ /* Disabled */
7330
+ .muka-range-slider--disabled {
7331
+ opacity: 0.5;
7332
+ }
7333
+ .muka-range-slider--disabled .muka-range-slider__input {
7334
+ cursor: not-allowed;
7327
7335
  }
7328
7336
 
7329
7337
 
@@ -7923,36 +7931,6 @@ body {
7923
7931
  }
7924
7932
 
7925
7933
 
7926
- /* PhotoDraftStrip */
7927
- /* PhotoDraftStrip Component Styles */
7928
-
7929
- .muka-photo-draft-strip {
7930
- display: flex;
7931
- align-items: center;
7932
- gap: var(--spacing-3);
7933
- width: 100%;
7934
- padding: var(--spacing-2) 0;
7935
- }
7936
-
7937
- .muka-photo-draft-strip__track {
7938
- display: flex;
7939
- gap: var(--spacing-2);
7940
- flex: 1 1 auto;
7941
- min-width: 0;
7942
- overflow-x: auto;
7943
- scroll-behavior: smooth;
7944
- scrollbar-width: none;
7945
- }
7946
-
7947
- .muka-photo-draft-strip__track::-webkit-scrollbar {
7948
- display: none;
7949
- }
7950
-
7951
- .muka-photo-draft-strip__item {
7952
- flex: 0 0 auto;
7953
- }
7954
-
7955
-
7956
7934
  /* Pagination */
7957
7935
  /* Pagination Component Styles */
7958
7936
 
@@ -8055,6 +8033,36 @@ body {
8055
8033
  }
8056
8034
 
8057
8035
 
8036
+ /* PhotoDraftStrip */
8037
+ /* PhotoDraftStrip Component Styles */
8038
+
8039
+ .muka-photo-draft-strip {
8040
+ display: flex;
8041
+ align-items: center;
8042
+ gap: var(--spacing-3);
8043
+ width: 100%;
8044
+ padding: var(--spacing-2) 0;
8045
+ }
8046
+
8047
+ .muka-photo-draft-strip__track {
8048
+ display: flex;
8049
+ gap: var(--spacing-2);
8050
+ flex: 1 1 auto;
8051
+ min-width: 0;
8052
+ overflow-x: auto;
8053
+ scroll-behavior: smooth;
8054
+ scrollbar-width: none;
8055
+ }
8056
+
8057
+ .muka-photo-draft-strip__track::-webkit-scrollbar {
8058
+ display: none;
8059
+ }
8060
+
8061
+ .muka-photo-draft-strip__item {
8062
+ flex: 0 0 auto;
8063
+ }
8064
+
8065
+
8058
8066
  /* NumberInput */
8059
8067
  /* NumberInput — reuses Input field styles (../Input/Input.css). */
8060
8068
  /* Only the prefix/suffix affixes are NumberInput-specific. */
@@ -10788,38 +10796,6 @@ li.muka-listitem {
10788
10796
  }
10789
10797
 
10790
10798
 
10791
- /* DatePicker */
10792
- /* DatePicker — compact native date field. */
10793
- /* Field/label/helper styling is inherited from ../Input/Input.css. */
10794
-
10795
- /* Adopt the field typography on the native date input. */
10796
- .muka-datepicker__field .muka-input__native {
10797
- font-family: var(--text-input-md-fontFamily);
10798
- font-size: var(--text-input-md-fontSize);
10799
- line-height: var(--text-input-md-lineHeight);
10800
- }
10801
-
10802
- .muka-datepicker__field--sm .muka-input__native {
10803
- font-family: var(--text-input-sm-fontFamily);
10804
- font-size: var(--text-input-sm-fontSize);
10805
- line-height: var(--text-input-sm-lineHeight);
10806
- }
10807
-
10808
- /* Tint the browser calendar indicator to match the field foreground. */
10809
- .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator {
10810
- cursor: pointer;
10811
- opacity: 0.6;
10812
- }
10813
-
10814
- .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator:hover {
10815
- opacity: 1;
10816
- }
10817
-
10818
- .muka-datepicker__field .muka-input__native:disabled {
10819
- cursor: not-allowed;
10820
- }
10821
-
10822
-
10823
10799
  /* Dialog */
10824
10800
  /* Dialog Component Styles */
10825
10801
 
@@ -11073,18 +11049,50 @@ li.muka-listitem {
11073
11049
  }
11074
11050
  }
11075
11051
 
11076
- /* ─── Bar elevation shadows ──────────────────────────── */
11077
-
11078
- .muka-dialog .muka-topbar {
11079
- position: relative;
11080
- z-index: 1;
11081
- box-shadow: var(--shadow-level2);
11052
+ /* ─── Bar elevation shadows ──────────────────────────── */
11053
+
11054
+ .muka-dialog .muka-topbar {
11055
+ position: relative;
11056
+ z-index: 1;
11057
+ box-shadow: var(--shadow-level2);
11058
+ }
11059
+
11060
+ .muka-dialog .muka-bottombar {
11061
+ position: relative;
11062
+ z-index: 1;
11063
+ box-shadow: var(--shadow-level2);
11064
+ }
11065
+
11066
+
11067
+ /* DatePicker */
11068
+ /* DatePicker — compact native date field. */
11069
+ /* Field/label/helper styling is inherited from ../Input/Input.css. */
11070
+
11071
+ /* Adopt the field typography on the native date input. */
11072
+ .muka-datepicker__field .muka-input__native {
11073
+ font-family: var(--text-input-md-fontFamily);
11074
+ font-size: var(--text-input-md-fontSize);
11075
+ line-height: var(--text-input-md-lineHeight);
11076
+ }
11077
+
11078
+ .muka-datepicker__field--sm .muka-input__native {
11079
+ font-family: var(--text-input-sm-fontFamily);
11080
+ font-size: var(--text-input-sm-fontSize);
11081
+ line-height: var(--text-input-sm-lineHeight);
11082
+ }
11083
+
11084
+ /* Tint the browser calendar indicator to match the field foreground. */
11085
+ .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator {
11086
+ cursor: pointer;
11087
+ opacity: 0.6;
11088
+ }
11089
+
11090
+ .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator:hover {
11091
+ opacity: 1;
11082
11092
  }
11083
11093
 
11084
- .muka-dialog .muka-bottombar {
11085
- position: relative;
11086
- z-index: 1;
11087
- box-shadow: var(--shadow-level2);
11094
+ .muka-datepicker__field .muka-input__native:disabled {
11095
+ cursor: not-allowed;
11088
11096
  }
11089
11097
 
11090
11098
 
@@ -12405,128 +12413,6 @@ li.muka-listitem {
12405
12413
  }
12406
12414
 
12407
12415
 
12408
- /* ChatPhotoGrid */
12409
- /* ChatPhotoGrid Component Styles */
12410
-
12411
- /*
12412
- * The grid clips to its own radius and the tiles stay square, so only the four
12413
- * outer corners round — matching the Figma "Wrapper" frame (5225:1394).
12414
- */
12415
- .muka-chat-photo-grid {
12416
- display: grid;
12417
- gap: var(--chatphotogrid-gap);
12418
- width: 100%;
12419
- min-width: 0;
12420
- overflow: hidden;
12421
- border-radius: var(--chatphotogrid-radius);
12422
- }
12423
-
12424
- /* ─── Tiles ────────────────────────────────────────────── */
12425
-
12426
- .muka-chat-photo-grid__tile {
12427
- position: relative;
12428
- display: block;
12429
- overflow: hidden;
12430
- min-width: 0;
12431
- padding: 0;
12432
- margin: 0;
12433
- border: none;
12434
- background-color: var(--chatphotogrid-color-placeholder);
12435
- aspect-ratio: 1 / 1;
12436
- }
12437
-
12438
- button.muka-chat-photo-grid__tile {
12439
- cursor: pointer;
12440
- appearance: none;
12441
- }
12442
-
12443
- button.muka-chat-photo-grid__tile:focus-visible {
12444
- outline: var(--border-width-bold) solid var(--color-border-focus);
12445
- /* Inset, so the grid's overflow clip cannot cut the ring off on corner tiles */
12446
- outline-offset: calc(-1 * var(--border-width-bold));
12447
- }
12448
-
12449
- .muka-chat-photo-grid__image {
12450
- display: block;
12451
- width: 100%;
12452
- height: 100%;
12453
- object-fit: cover;
12454
- }
12455
-
12456
- /* ─── Overflow tile ────────────────────────────────────── */
12457
-
12458
- .muka-chat-photo-grid__overflow {
12459
- position: absolute;
12460
- inset: 0;
12461
- display: flex;
12462
- align-items: center;
12463
- justify-content: center;
12464
- background-color: var(--chatphotogrid-color-overflow-background);
12465
- color: var(--chatphotogrid-color-overflow-foreground);
12466
- font-family: var(--text-body-2xl-regular-fontFamily);
12467
- font-weight: var(--text-body-2xl-regular-fontWeight);
12468
- font-size: var(--text-body-2xl-regular-fontSize);
12469
- line-height: var(--text-body-2xl-regular-lineHeight);
12470
- }
12471
-
12472
- /* ─── Layouts ──────────────────────────────────────────── */
12473
-
12474
- .muka-chat-photo-grid--1 {
12475
- grid-template-columns: 1fr;
12476
- }
12477
-
12478
- .muka-chat-photo-grid--landscape .muka-chat-photo-grid__tile {
12479
- aspect-ratio: 4 / 3;
12480
- }
12481
-
12482
- .muka-chat-photo-grid--portrait .muka-chat-photo-grid__tile {
12483
- aspect-ratio: 3 / 4;
12484
- }
12485
-
12486
- .muka-chat-photo-grid--2 {
12487
- grid-template-columns: repeat(2, 1fr);
12488
- }
12489
-
12490
- .muka-chat-photo-grid--3 {
12491
- grid-template-columns: repeat(3, 1fr);
12492
- }
12493
-
12494
- .muka-chat-photo-grid--4 {
12495
- grid-template-columns: repeat(2, 1fr);
12496
- }
12497
-
12498
- /* 5 photos: a 2-up row above a 3-up row, on a shared 6-column track */
12499
- .muka-chat-photo-grid--5 {
12500
- grid-template-columns: repeat(6, 1fr);
12501
- }
12502
-
12503
- .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(-n + 2) {
12504
- grid-column: span 3;
12505
- }
12506
-
12507
- .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(n + 3) {
12508
- grid-column: span 2;
12509
- }
12510
-
12511
- .muka-chat-photo-grid--6,
12512
- .muka-chat-photo-grid--overflow {
12513
- grid-template-columns: repeat(3, 1fr);
12514
- }
12515
-
12516
- /* ─── Print ────────────────────────────────────────────── */
12517
-
12518
- @media print {
12519
- .muka-chat-photo-grid {
12520
- break-inside: avoid;
12521
- }
12522
-
12523
- .muka-chat-photo-grid__image {
12524
- print-color-adjust: exact;
12525
- -webkit-print-color-adjust: exact;
12526
- }
12527
- }
12528
-
12529
-
12530
12416
  /* Checkbox */
12531
12417
  /* Checkbox Component Styles - Using Muka Design Tokens */
12532
12418
 
@@ -12682,15 +12568,137 @@ button.muka-chat-photo-grid__tile:focus-visible {
12682
12568
  line-height: var(--text-label-md-regular-lineHeight);
12683
12569
  }
12684
12570
 
12685
- .muka-checkbox--lg .muka-checkbox__label {
12686
- font-family: var(--text-label-xl-regular-fontFamily);
12687
- font-weight: var(--text-label-xl-regular-fontWeight);
12688
- font-size: var(--text-label-xl-regular-fontSize);
12689
- line-height: var(--text-label-xl-regular-lineHeight);
12690
- }
12571
+ .muka-checkbox--lg .muka-checkbox__label {
12572
+ font-family: var(--text-label-xl-regular-fontFamily);
12573
+ font-weight: var(--text-label-xl-regular-fontWeight);
12574
+ font-size: var(--text-label-xl-regular-fontSize);
12575
+ line-height: var(--text-label-xl-regular-lineHeight);
12576
+ }
12577
+
12578
+ .muka-checkbox--disabled .muka-checkbox__label {
12579
+ color: var(--color-text-subtle-default);
12580
+ }
12581
+
12582
+
12583
+ /* ChatPhotoGrid */
12584
+ /* ChatPhotoGrid Component Styles */
12585
+
12586
+ /*
12587
+ * The grid clips to its own radius and the tiles stay square, so only the four
12588
+ * outer corners round — matching the Figma "Wrapper" frame (5225:1394).
12589
+ */
12590
+ .muka-chat-photo-grid {
12591
+ display: grid;
12592
+ gap: var(--chatphotogrid-gap);
12593
+ width: 100%;
12594
+ min-width: 0;
12595
+ overflow: hidden;
12596
+ border-radius: var(--chatphotogrid-radius);
12597
+ }
12598
+
12599
+ /* ─── Tiles ────────────────────────────────────────────── */
12600
+
12601
+ .muka-chat-photo-grid__tile {
12602
+ position: relative;
12603
+ display: block;
12604
+ overflow: hidden;
12605
+ min-width: 0;
12606
+ padding: 0;
12607
+ margin: 0;
12608
+ border: none;
12609
+ background-color: var(--chatphotogrid-color-placeholder);
12610
+ aspect-ratio: 1 / 1;
12611
+ }
12612
+
12613
+ button.muka-chat-photo-grid__tile {
12614
+ cursor: pointer;
12615
+ appearance: none;
12616
+ }
12617
+
12618
+ button.muka-chat-photo-grid__tile:focus-visible {
12619
+ outline: var(--border-width-bold) solid var(--color-border-focus);
12620
+ /* Inset, so the grid's overflow clip cannot cut the ring off on corner tiles */
12621
+ outline-offset: calc(-1 * var(--border-width-bold));
12622
+ }
12623
+
12624
+ .muka-chat-photo-grid__image {
12625
+ display: block;
12626
+ width: 100%;
12627
+ height: 100%;
12628
+ object-fit: cover;
12629
+ }
12630
+
12631
+ /* ─── Overflow tile ────────────────────────────────────── */
12632
+
12633
+ .muka-chat-photo-grid__overflow {
12634
+ position: absolute;
12635
+ inset: 0;
12636
+ display: flex;
12637
+ align-items: center;
12638
+ justify-content: center;
12639
+ background-color: var(--chatphotogrid-color-overflow-background);
12640
+ color: var(--chatphotogrid-color-overflow-foreground);
12641
+ font-family: var(--text-body-2xl-regular-fontFamily);
12642
+ font-weight: var(--text-body-2xl-regular-fontWeight);
12643
+ font-size: var(--text-body-2xl-regular-fontSize);
12644
+ line-height: var(--text-body-2xl-regular-lineHeight);
12645
+ }
12646
+
12647
+ /* ─── Layouts ──────────────────────────────────────────── */
12648
+
12649
+ .muka-chat-photo-grid--1 {
12650
+ grid-template-columns: 1fr;
12651
+ }
12652
+
12653
+ .muka-chat-photo-grid--landscape .muka-chat-photo-grid__tile {
12654
+ aspect-ratio: 4 / 3;
12655
+ }
12656
+
12657
+ .muka-chat-photo-grid--portrait .muka-chat-photo-grid__tile {
12658
+ aspect-ratio: 3 / 4;
12659
+ }
12660
+
12661
+ .muka-chat-photo-grid--2 {
12662
+ grid-template-columns: repeat(2, 1fr);
12663
+ }
12664
+
12665
+ .muka-chat-photo-grid--3 {
12666
+ grid-template-columns: repeat(3, 1fr);
12667
+ }
12668
+
12669
+ .muka-chat-photo-grid--4 {
12670
+ grid-template-columns: repeat(2, 1fr);
12671
+ }
12672
+
12673
+ /* 5 photos: a 2-up row above a 3-up row, on a shared 6-column track */
12674
+ .muka-chat-photo-grid--5 {
12675
+ grid-template-columns: repeat(6, 1fr);
12676
+ }
12677
+
12678
+ .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(-n + 2) {
12679
+ grid-column: span 3;
12680
+ }
12681
+
12682
+ .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(n + 3) {
12683
+ grid-column: span 2;
12684
+ }
12685
+
12686
+ .muka-chat-photo-grid--6,
12687
+ .muka-chat-photo-grid--overflow {
12688
+ grid-template-columns: repeat(3, 1fr);
12689
+ }
12690
+
12691
+ /* ─── Print ────────────────────────────────────────────── */
12691
12692
 
12692
- .muka-checkbox--disabled .muka-checkbox__label {
12693
- color: var(--color-text-subtle-default);
12693
+ @media print {
12694
+ .muka-chat-photo-grid {
12695
+ break-inside: avoid;
12696
+ }
12697
+
12698
+ .muka-chat-photo-grid__image {
12699
+ print-color-adjust: exact;
12700
+ -webkit-print-color-adjust: exact;
12701
+ }
12694
12702
  }
12695
12703
 
12696
12704
 
@@ -13979,114 +13987,6 @@ button.muka-chat-photo-grid__tile:focus-visible {
13979
13987
  }
13980
13988
 
13981
13989
 
13982
- /* BadgeNumber */
13983
- /* BadgeNumber Component Styles - Using Muka Design Tokens */
13984
-
13985
- .muka-badge-number {
13986
- display: inline-flex;
13987
- align-items: center;
13988
- justify-content: center;
13989
- border-radius: var(--border-radius-full);
13990
- white-space: nowrap;
13991
- user-select: none;
13992
- box-sizing: border-box;
13993
- }
13994
-
13995
- /*
13996
- * Sizes — fixed height, matching min-width (so a single digit renders as a
13997
- * circle), horizontal padding, and bold label typography. Vertical centering
13998
- * is handled by the fixed height + align-items: center.
13999
- */
14000
- .muka-badge-number--2xs {
14001
- height: var(--badge-number-size-2xs);
14002
- min-width: var(--badge-number-size-2xs);
14003
- padding: 0 var(--badge-number-padding-2xs);
14004
- font-family: var(--text-label-xs-bold-fontFamily);
14005
- font-weight: var(--text-label-xs-bold-fontWeight);
14006
- font-size: var(--text-label-xs-bold-fontSize);
14007
- line-height: var(--text-label-xs-bold-lineHeight);
14008
- }
14009
-
14010
- .muka-badge-number--xs {
14011
- height: var(--badge-number-size-xs);
14012
- min-width: var(--badge-number-size-xs);
14013
- padding: 0 var(--badge-number-padding-xs);
14014
- font-family: var(--text-label-sm-bold-fontFamily);
14015
- font-weight: var(--text-label-sm-bold-fontWeight);
14016
- font-size: var(--text-label-sm-bold-fontSize);
14017
- line-height: var(--text-label-sm-bold-lineHeight);
14018
- }
14019
-
14020
- .muka-badge-number--sm {
14021
- height: var(--badge-number-size-sm);
14022
- min-width: var(--badge-number-size-sm);
14023
- padding: 0 var(--badge-number-padding-sm);
14024
- font-family: var(--text-label-md-bold-fontFamily);
14025
- font-weight: var(--text-label-md-bold-fontWeight);
14026
- font-size: var(--text-label-md-bold-fontSize);
14027
- line-height: var(--text-label-md-bold-lineHeight);
14028
- }
14029
-
14030
- .muka-badge-number--md {
14031
- height: var(--badge-number-size-md);
14032
- min-width: var(--badge-number-size-md);
14033
- padding: 0 var(--badge-number-padding-md);
14034
- font-family: var(--text-label-lg-bold-fontFamily);
14035
- font-weight: var(--text-label-lg-bold-fontWeight);
14036
- font-size: var(--text-label-lg-bold-fontSize);
14037
- line-height: var(--text-label-lg-bold-lineHeight);
14038
- }
14039
-
14040
- .muka-badge-number--lg {
14041
- height: var(--badge-number-size-lg);
14042
- min-width: var(--badge-number-size-lg);
14043
- padding: 0 var(--badge-number-padding-lg);
14044
- font-family: var(--text-label-2xl-bold-fontFamily);
14045
- font-weight: var(--text-label-2xl-bold-fontWeight);
14046
- font-size: var(--text-label-2xl-bold-fontSize);
14047
- line-height: var(--text-label-2xl-bold-lineHeight);
14048
- }
14049
-
14050
- .muka-badge-number__label {
14051
- /*
14052
- * The badge sets a tight line-height for compact sizing, which would clip
14053
- * glyph descenders; give the label a roomier line-height. Vertical centering
14054
- * is unaffected because the badge height is fixed and content is centered.
14055
- */
14056
- line-height: normal;
14057
- }
14058
-
14059
- /* Neutral variant */
14060
- .muka-badge-number--neutral {
14061
- background-color: var(--color-surface-level1);
14062
- color: var(--color-text-default-default);
14063
- }
14064
-
14065
- /* Info variant */
14066
- .muka-badge-number--info {
14067
- background-color: var(--color-state-info-contrast);
14068
- color: var(--color-text-default-inverse);
14069
- }
14070
-
14071
- /* Success variant */
14072
- .muka-badge-number--success {
14073
- background-color: var(--color-state-success-contrast);
14074
- color: var(--color-text-default-inverse);
14075
- }
14076
-
14077
- /* Warning variant */
14078
- .muka-badge-number--warning {
14079
- background-color: var(--color-state-warning-contrast);
14080
- color: var(--color-text-default-inverse);
14081
- }
14082
-
14083
- /* Error variant */
14084
- .muka-badge-number--error {
14085
- background-color: var(--color-state-error-contrast);
14086
- color: var(--color-text-default-inverse);
14087
- }
14088
-
14089
-
14090
13990
  /* BottomBar */
14091
13991
  /* BottomBar Component Styles */
14092
13992
 
@@ -14403,6 +14303,114 @@ button.muka-chat-photo-grid__tile:focus-visible {
14403
14303
  }
14404
14304
 
14405
14305
 
14306
+ /* BadgeNumber */
14307
+ /* BadgeNumber Component Styles - Using Muka Design Tokens */
14308
+
14309
+ .muka-badge-number {
14310
+ display: inline-flex;
14311
+ align-items: center;
14312
+ justify-content: center;
14313
+ border-radius: var(--border-radius-full);
14314
+ white-space: nowrap;
14315
+ user-select: none;
14316
+ box-sizing: border-box;
14317
+ }
14318
+
14319
+ /*
14320
+ * Sizes — fixed height, matching min-width (so a single digit renders as a
14321
+ * circle), horizontal padding, and bold label typography. Vertical centering
14322
+ * is handled by the fixed height + align-items: center.
14323
+ */
14324
+ .muka-badge-number--2xs {
14325
+ height: var(--badge-number-size-2xs);
14326
+ min-width: var(--badge-number-size-2xs);
14327
+ padding: 0 var(--badge-number-padding-2xs);
14328
+ font-family: var(--text-label-xs-bold-fontFamily);
14329
+ font-weight: var(--text-label-xs-bold-fontWeight);
14330
+ font-size: var(--text-label-xs-bold-fontSize);
14331
+ line-height: var(--text-label-xs-bold-lineHeight);
14332
+ }
14333
+
14334
+ .muka-badge-number--xs {
14335
+ height: var(--badge-number-size-xs);
14336
+ min-width: var(--badge-number-size-xs);
14337
+ padding: 0 var(--badge-number-padding-xs);
14338
+ font-family: var(--text-label-sm-bold-fontFamily);
14339
+ font-weight: var(--text-label-sm-bold-fontWeight);
14340
+ font-size: var(--text-label-sm-bold-fontSize);
14341
+ line-height: var(--text-label-sm-bold-lineHeight);
14342
+ }
14343
+
14344
+ .muka-badge-number--sm {
14345
+ height: var(--badge-number-size-sm);
14346
+ min-width: var(--badge-number-size-sm);
14347
+ padding: 0 var(--badge-number-padding-sm);
14348
+ font-family: var(--text-label-md-bold-fontFamily);
14349
+ font-weight: var(--text-label-md-bold-fontWeight);
14350
+ font-size: var(--text-label-md-bold-fontSize);
14351
+ line-height: var(--text-label-md-bold-lineHeight);
14352
+ }
14353
+
14354
+ .muka-badge-number--md {
14355
+ height: var(--badge-number-size-md);
14356
+ min-width: var(--badge-number-size-md);
14357
+ padding: 0 var(--badge-number-padding-md);
14358
+ font-family: var(--text-label-lg-bold-fontFamily);
14359
+ font-weight: var(--text-label-lg-bold-fontWeight);
14360
+ font-size: var(--text-label-lg-bold-fontSize);
14361
+ line-height: var(--text-label-lg-bold-lineHeight);
14362
+ }
14363
+
14364
+ .muka-badge-number--lg {
14365
+ height: var(--badge-number-size-lg);
14366
+ min-width: var(--badge-number-size-lg);
14367
+ padding: 0 var(--badge-number-padding-lg);
14368
+ font-family: var(--text-label-2xl-bold-fontFamily);
14369
+ font-weight: var(--text-label-2xl-bold-fontWeight);
14370
+ font-size: var(--text-label-2xl-bold-fontSize);
14371
+ line-height: var(--text-label-2xl-bold-lineHeight);
14372
+ }
14373
+
14374
+ .muka-badge-number__label {
14375
+ /*
14376
+ * The badge sets a tight line-height for compact sizing, which would clip
14377
+ * glyph descenders; give the label a roomier line-height. Vertical centering
14378
+ * is unaffected because the badge height is fixed and content is centered.
14379
+ */
14380
+ line-height: normal;
14381
+ }
14382
+
14383
+ /* Neutral variant */
14384
+ .muka-badge-number--neutral {
14385
+ background-color: var(--color-surface-level1);
14386
+ color: var(--color-text-default-default);
14387
+ }
14388
+
14389
+ /* Info variant */
14390
+ .muka-badge-number--info {
14391
+ background-color: var(--color-state-info-contrast);
14392
+ color: var(--color-text-default-inverse);
14393
+ }
14394
+
14395
+ /* Success variant */
14396
+ .muka-badge-number--success {
14397
+ background-color: var(--color-state-success-contrast);
14398
+ color: var(--color-text-default-inverse);
14399
+ }
14400
+
14401
+ /* Warning variant */
14402
+ .muka-badge-number--warning {
14403
+ background-color: var(--color-state-warning-contrast);
14404
+ color: var(--color-text-default-inverse);
14405
+ }
14406
+
14407
+ /* Error variant */
14408
+ .muka-badge-number--error {
14409
+ background-color: var(--color-state-error-contrast);
14410
+ color: var(--color-text-default-inverse);
14411
+ }
14412
+
14413
+
14406
14414
  /* Badge */
14407
14415
  /* Badge Component Styles - Using Muka Design Tokens */
14408
14416
 
@@ -14597,7 +14605,8 @@ button.muka-chat-photo-grid__tile:focus-visible {
14597
14605
  align-items: center;
14598
14606
  justify-content: center;
14599
14607
  flex-shrink: 0;
14600
- overflow: hidden;
14608
+ /* No overflow clipping: the status dot sits on the edge. The image and the
14609
+ loading shimmer round themselves to the avatar shape instead. */
14601
14610
  user-select: none;
14602
14611
  vertical-align: middle;
14603
14612
  background-color: var(--avatar-color-background-default);
@@ -14670,9 +14679,10 @@ button.muka-chat-photo-grid__tile:focus-visible {
14670
14679
  border-radius: var(--avatar-radius-square-sm);
14671
14680
  }
14672
14681
 
14673
- /* 4xs is too small for initials, the fallback icon or a status dot:
14682
+ /* 4xs is too small for initials, an icon, the fallback icon or a status dot:
14674
14683
  it shows the picture, or the plain background */
14675
14684
  .muka-avatar--4xs .muka-avatar__initials,
14685
+ .muka-avatar--4xs .muka-avatar__icon,
14676
14686
  .muka-avatar--4xs .muka-avatar__fallback,
14677
14687
  .muka-avatar--4xs .muka-avatar__status {
14678
14688
  display: none;
@@ -14708,38 +14718,59 @@ button.muka-chat-photo-grid__tile:focus-visible {
14708
14718
  .muka-avatar__skeleton {
14709
14719
  position: absolute;
14710
14720
  inset: 0;
14721
+ border-radius: inherit;
14711
14722
  background: linear-gradient(
14712
14723
  90deg,
14713
14724
  transparent 0%,
14714
14725
  var(--color-surface-level1) 50%,
14715
14726
  transparent 100%
14716
- );
14727
+ ) no-repeat;
14728
+ background-size: 50% 100%;
14717
14729
  animation: avatar-loading 1.5s ease-in-out infinite;
14718
14730
  }
14719
14731
 
14732
+ /* The highlight sweeps by background position, so it stays inside the
14733
+ rounded shape without the avatar clipping its overflow */
14720
14734
  @keyframes avatar-loading {
14721
14735
  0% {
14722
- transform: translateX(-100%);
14736
+ background-position: -100% 0;
14723
14737
  }
14724
14738
  100% {
14725
- transform: translateX(100%);
14739
+ background-position: 200% 0;
14726
14740
  }
14727
14741
  }
14728
14742
 
14729
14743
  /* Avatar content */
14730
14744
  .muka-avatar__image {
14745
+ border-radius: inherit;
14731
14746
  width: 100%;
14732
14747
  height: 100%;
14733
14748
  object-fit: cover;
14734
14749
  display: block;
14735
14750
  }
14736
14751
 
14752
+ /* Icon slot: a fixed icon size per avatar size, in the initials colour
14753
+ (subtle text) */
14737
14754
  .muka-avatar__icon {
14738
- width: 60%;
14739
- height: 60%;
14740
14755
  display: flex;
14741
14756
  align-items: center;
14742
14757
  justify-content: center;
14758
+ color: var(--avatar-color-foreground-default);
14759
+ }
14760
+
14761
+ .muka-avatar--3xs .muka-avatar__icon { width: var(--avatar-icon-size-3xs); height: var(--avatar-icon-size-3xs); }
14762
+ .muka-avatar--2xs .muka-avatar__icon { width: var(--avatar-icon-size-2xs); height: var(--avatar-icon-size-2xs); }
14763
+ .muka-avatar--xs .muka-avatar__icon { width: var(--avatar-icon-size-xs); height: var(--avatar-icon-size-xs); }
14764
+ .muka-avatar--sm .muka-avatar__icon { width: var(--avatar-icon-size-sm); height: var(--avatar-icon-size-sm); }
14765
+ .muka-avatar--md .muka-avatar__icon { width: var(--avatar-icon-size-md); height: var(--avatar-icon-size-md); }
14766
+ .muka-avatar--lg .muka-avatar__icon { width: var(--avatar-icon-size-lg); height: var(--avatar-icon-size-lg); }
14767
+ .muka-avatar--xl .muka-avatar__icon { width: var(--avatar-icon-size-xl); height: var(--avatar-icon-size-xl); }
14768
+
14769
+ /* A Muka Icon fills the slot and takes its colour (its own `color` prop still wins) */
14770
+ .muka-avatar__icon .muka-icon {
14771
+ width: 100%;
14772
+ height: 100%;
14773
+ color: inherit;
14743
14774
  }
14744
14775
 
14745
14776
  .muka-avatar__icon svg {
@@ -14846,9 +14877,12 @@ button.muka-chat-photo-grid__tile:focus-visible {
14846
14877
 
14847
14878
  /* Avatar Group (Figma "Avatar Stack") */
14848
14879
  .muka-avatar-group {
14880
+ position: relative;
14849
14881
  display: inline-flex;
14850
14882
  align-items: center;
14851
14883
  flex-direction: row;
14884
+ /* Never stretch to a grid cell or column, so the badge stays on the last avatar */
14885
+ width: fit-content;
14852
14886
  }
14853
14887
 
14854
14888
  /* Later avatars sit on top of earlier ones (DOM order); a hovered one comes to the front */
@@ -14868,7 +14902,7 @@ button.muka-chat-photo-grid__tile:focus-visible {
14868
14902
  box-shadow: 0 0 0 var(--avatar-group-ring-width) var(--avatar-group-ring-color);
14869
14903
  }
14870
14904
 
14871
- /* Overlap. Figma specifies exact values for 48 / 32 / 24px avatars (sm / 2xs / 3xs);
14905
+ /* Overlap. Figma specifies exact values for 40 / 32 / 24px avatars (xs / 2xs / 3xs);
14872
14906
  other sizes use the same proportions: tight 2/3, compact 1/2, spacious 1/3. */
14873
14907
  .muka-avatar-group--4xs { --muka-avatar-group-size: var(--avatar-size-4xs); }
14874
14908
  .muka-avatar-group--3xs { --muka-avatar-group-size: var(--avatar-size-3xs); }
@@ -14883,13 +14917,13 @@ button.muka-chat-photo-grid__tile:focus-visible {
14883
14917
  .muka-avatar-group--compact { --muka-avatar-group-overlap: calc(var(--muka-avatar-group-size) / 2); }
14884
14918
  .muka-avatar-group--spacious { --muka-avatar-group-overlap: calc(var(--muka-avatar-group-size) / 3); }
14885
14919
 
14886
- .muka-avatar-group--tight.muka-avatar-group--sm { --muka-avatar-group-overlap: var(--avatar-group-overlap-tight-sm); }
14920
+ .muka-avatar-group--tight.muka-avatar-group--xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-tight-xs); }
14887
14921
  .muka-avatar-group--tight.muka-avatar-group--2xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-tight-2xs); }
14888
14922
  .muka-avatar-group--tight.muka-avatar-group--3xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-tight-3xs); }
14889
- .muka-avatar-group--compact.muka-avatar-group--sm { --muka-avatar-group-overlap: var(--avatar-group-overlap-compact-sm); }
14923
+ .muka-avatar-group--compact.muka-avatar-group--xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-compact-xs); }
14890
14924
  .muka-avatar-group--compact.muka-avatar-group--2xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-compact-2xs); }
14891
14925
  .muka-avatar-group--compact.muka-avatar-group--3xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-compact-3xs); }
14892
- .muka-avatar-group--spacious.muka-avatar-group--sm { --muka-avatar-group-overlap: var(--avatar-group-overlap-spacious-sm); }
14926
+ .muka-avatar-group--spacious.muka-avatar-group--xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-spacious-xs); }
14893
14927
  .muka-avatar-group--spacious.muka-avatar-group--2xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-spacious-2xs); }
14894
14928
  .muka-avatar-group--spacious.muka-avatar-group--3xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-spacious-3xs); }
14895
14929
 
@@ -14897,6 +14931,14 @@ button.muka-chat-photo-grid__tile:focus-visible {
14897
14931
  margin-left: calc(-1 * var(--muka-avatar-group-overlap));
14898
14932
  }
14899
14933
 
14934
+ /* Badge: a BadgeNumber on the top-right corner of the stack, above every avatar */
14935
+ .muka-avatar-group__badge {
14936
+ position: absolute;
14937
+ top: calc(-1 * var(--avatar-group-badge-offset));
14938
+ right: calc(-1 * var(--avatar-group-badge-offset));
14939
+ z-index: 20;
14940
+ }
14941
+
14900
14942
  /* Overflow avatar styling */
14901
14943
  .muka-avatar--overflow {
14902
14944
  background-color: var(--avatar-color-background-default);