@revikornmann/muka-ui 0.27.2 → 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.
@@ -2053,9 +2053,16 @@ body {
2053
2053
  --avatar-size-md: 4rem;
2054
2054
  --avatar-size-lg: 5rem;
2055
2055
  --avatar-size-xl: 7rem;
2056
+ --avatar-icon-size-3xs: 1rem;
2057
+ --avatar-icon-size-2xs: 1.25rem;
2058
+ --avatar-icon-size-xs: 1.5rem;
2059
+ --avatar-icon-size-sm: 2rem;
2060
+ --avatar-icon-size-md: 2.5rem;
2061
+ --avatar-icon-size-lg: 3rem;
2062
+ --avatar-icon-size-xl: 4rem;
2056
2063
  --avatar-color-background-default: #f2eff3;
2057
2064
  --avatar-color-background-loading: #eae7ec;
2058
- --avatar-color-foreground-default: #211f26;
2065
+ --avatar-color-foreground-default: #8e8c99;
2059
2066
  --avatar-color-foreground-muted: #d0cdd7;
2060
2067
  --avatar-color-status-online: #027864;
2061
2068
  --avatar-color-status-offline: #d0cdd7;
@@ -2463,38 +2470,6 @@ body {
2463
2470
  }
2464
2471
 
2465
2472
 
2466
- /* VoiceMessage */
2467
- /* VoiceMessage Component Styles */
2468
-
2469
- .muka-voice-message {
2470
- display: flex;
2471
- align-items: center;
2472
- gap: var(--spacing-3);
2473
- width: 100%;
2474
- min-width: min(16rem, 60vw);
2475
- }
2476
-
2477
- .muka-voice-message__wave {
2478
- flex: 1 1 auto;
2479
- min-width: 0;
2480
- }
2481
-
2482
- .muka-voice-message__time {
2483
- flex: 0 0 auto;
2484
- white-space: nowrap;
2485
- font-size: var(--text-label-sm-fontSize, 0.75rem);
2486
- line-height: var(--text-label-sm-lineHeight, 1);
2487
- font-variant-numeric: tabular-nums;
2488
- color: var(--color-text-subtle-default);
2489
- }
2490
-
2491
- /* On the tinted own bubble the surface is the action color, so the timer flips
2492
- * to the inverse text token for contrast. */
2493
- .muka-voice-message--own .muka-voice-message__time {
2494
- color: var(--color-text-default-inverse);
2495
- }
2496
-
2497
-
2498
2473
  /* View */
2499
2474
  /* View Component Styles */
2500
2475
 
@@ -2605,6 +2580,38 @@ body {
2605
2580
  }
2606
2581
 
2607
2582
 
2583
+ /* VoiceMessage */
2584
+ /* VoiceMessage Component Styles */
2585
+
2586
+ .muka-voice-message {
2587
+ display: flex;
2588
+ align-items: center;
2589
+ gap: var(--spacing-3);
2590
+ width: 100%;
2591
+ min-width: min(16rem, 60vw);
2592
+ }
2593
+
2594
+ .muka-voice-message__wave {
2595
+ flex: 1 1 auto;
2596
+ min-width: 0;
2597
+ }
2598
+
2599
+ .muka-voice-message__time {
2600
+ flex: 0 0 auto;
2601
+ white-space: nowrap;
2602
+ font-size: var(--text-label-sm-fontSize, 0.75rem);
2603
+ line-height: var(--text-label-sm-lineHeight, 1);
2604
+ font-variant-numeric: tabular-nums;
2605
+ color: var(--color-text-subtle-default);
2606
+ }
2607
+
2608
+ /* On the tinted own bubble the surface is the action color, so the timer flips
2609
+ * to the inverse text token for contrast. */
2610
+ .muka-voice-message--own .muka-voice-message__time {
2611
+ color: var(--color-text-default-inverse);
2612
+ }
2613
+
2614
+
2608
2615
  /* Typography */
2609
2616
  .muka-typography-catalog {
2610
2617
  display: flex;
@@ -4631,6 +4638,114 @@ body {
4631
4638
  }
4632
4639
 
4633
4640
 
4641
+ /* SwipeActions */
4642
+ /* SwipeActions Component Styles */
4643
+
4644
+ .muka-swipe-actions {
4645
+ position: relative;
4646
+ overflow: hidden;
4647
+ touch-action: pan-y;
4648
+ -webkit-user-select: none;
4649
+ user-select: none;
4650
+ background-color: var(--color-surface-level3);
4651
+ }
4652
+
4653
+ .muka-swipe-actions--disabled {
4654
+ touch-action: auto;
4655
+ }
4656
+
4657
+ /* ─── Row that holds the actual content ────────────────── */
4658
+
4659
+ .muka-swipe-actions__row {
4660
+ position: relative;
4661
+ z-index: 1;
4662
+ background-color: inherit;
4663
+ will-change: transform;
4664
+ }
4665
+
4666
+ /* ─── Action panels — sit beneath the row ──────────────── */
4667
+
4668
+ .muka-swipe-actions__panel {
4669
+ position: absolute;
4670
+ top: 0;
4671
+ bottom: 0;
4672
+ display: flex;
4673
+ align-items: stretch;
4674
+ z-index: 0;
4675
+ }
4676
+
4677
+ .muka-swipe-actions__panel--left {
4678
+ left: 0;
4679
+ }
4680
+
4681
+ .muka-swipe-actions__panel--right {
4682
+ right: 0;
4683
+ }
4684
+
4685
+ /* ─── Single action button ─────────────────────────────── */
4686
+
4687
+ .muka-swipe-actions__button {
4688
+ display: flex;
4689
+ flex-direction: column;
4690
+ align-items: center;
4691
+ justify-content: center;
4692
+ gap: var(--spacing-1);
4693
+ border: none;
4694
+ cursor: pointer;
4695
+ padding: var(--spacing-2);
4696
+ background-color: var(--color-surface-level2);
4697
+ color: var(--color-text-default-default);
4698
+ font-family: var(--text-label-sm-semibold-fontFamily);
4699
+ font-weight: var(--text-label-sm-semibold-fontWeight);
4700
+ font-size: var(--text-label-sm-semibold-fontSize);
4701
+ line-height: var(--text-label-sm-semibold-lineHeight);
4702
+ -webkit-tap-highlight-color: transparent;
4703
+ transition: filter 0.12s ease;
4704
+ }
4705
+
4706
+ .muka-swipe-actions__button:hover {
4707
+ filter: brightness(0.95);
4708
+ }
4709
+
4710
+ .muka-swipe-actions__button:focus-visible {
4711
+ outline: 2px solid var(--color-action-default);
4712
+ outline-offset: -2px;
4713
+ }
4714
+
4715
+ .muka-swipe-actions__button-icon {
4716
+ display: inline-flex;
4717
+ align-items: center;
4718
+ justify-content: center;
4719
+ }
4720
+
4721
+ /* ─── Color variants ───────────────────────────────────── */
4722
+
4723
+ .muka-swipe-actions__button--neutral {
4724
+ background-color: var(--color-surface-level2);
4725
+ color: var(--color-text-default-default);
4726
+ }
4727
+
4728
+ .muka-swipe-actions__button--primary {
4729
+ background-color: var(--color-action-default);
4730
+ color: var(--color-text-default-inverse);
4731
+ }
4732
+
4733
+ .muka-swipe-actions__button--success {
4734
+ background-color: var(--color-state-success-default);
4735
+ color: var(--color-text-default-inverse);
4736
+ }
4737
+
4738
+ .muka-swipe-actions__button--warning {
4739
+ background-color: var(--color-state-warning-default);
4740
+ color: var(--color-text-default-default);
4741
+ }
4742
+
4743
+ .muka-swipe-actions__button--destructive {
4744
+ background-color: var(--color-state-error-default);
4745
+ color: var(--color-text-default-inverse);
4746
+ }
4747
+
4748
+
4634
4749
  /* Spinner */
4635
4750
  /* Spinner Component Styles */
4636
4751
 
@@ -4794,179 +4909,71 @@ body {
4794
4909
  }
4795
4910
 
4796
4911
 
4797
- /* SwipeActions */
4798
- /* SwipeActions Component Styles */
4912
+ /* SocialSignInButton */
4913
+ /*
4914
+ * SocialSignInButton lockup colors are provider-mandated (Apple HIG /
4915
+ * Google Identity branding) and intentionally fixed across Muka brands —
4916
+ * same exception pattern as LicensePlateInput regulatory colors.
4917
+ *
4918
+ * Apple: https://developer.apple.com/design/human-interface-guidelines/sign-in-with-apple
4919
+ * Google: https://developers.google.com/identity/branding-guidelines
4920
+ */
4921
+ .muka-social-sign-in-button {
4922
+ --ssi-white: #ffffff;
4923
+ --ssi-black: #000000;
4924
+ --ssi-google-text-light: #1f1f1f;
4799
4925
 
4800
- .muka-swipe-actions {
4801
- position: relative;
4802
- overflow: hidden;
4803
- touch-action: pan-y;
4804
- -webkit-user-select: none;
4805
- user-select: none;
4806
- background-color: var(--color-surface-level3);
4807
- }
4926
+ display: inline-flex;
4927
+ align-items: center;
4928
+ justify-content: center;
4808
4929
 
4809
- .muka-swipe-actions--disabled {
4810
- touch-action: auto;
4811
- }
4930
+ /* Provider lockup type — matches Figma / HIG, not brand font tokens.
4931
+ * SF Pro Text is OS-provided on Apple platforms (not redistributable).
4932
+ * Google Sans is not freely shippable; Roboto is the closest system fallback. */
4933
+ font-family: inherit;
4934
+ font-weight: 600;
4935
+ text-decoration: none;
4936
+ white-space: nowrap;
4812
4937
 
4813
- /* ─── Row that holds the actual content ────────────────── */
4938
+ border: 1px solid transparent;
4939
+ cursor: pointer;
4940
+ user-select: none;
4941
+ transition: opacity 0.15s ease, filter 0.15s ease;
4814
4942
 
4815
- .muka-swipe-actions__row {
4943
+ outline: none;
4816
4944
  position: relative;
4817
- z-index: 1;
4818
- background-color: inherit;
4819
- will-change: transform;
4945
+ box-sizing: border-box;
4820
4946
  }
4821
4947
 
4822
- /* ─── Action panels — sit beneath the row ──────────────── */
4948
+ .muka-social-sign-in-button--apple {
4949
+ font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
4950
+ Helvetica, Arial, sans-serif;
4951
+ font-weight: 600;
4952
+ }
4823
4953
 
4824
- .muka-swipe-actions__panel {
4825
- position: absolute;
4826
- top: 0;
4827
- bottom: 0;
4828
- display: flex;
4829
- align-items: stretch;
4830
- z-index: 0;
4954
+ .muka-social-sign-in-button--google {
4955
+ font-family: 'Google Sans', Roboto, 'Helvetica Neue', Arial, sans-serif;
4956
+ font-weight: 500;
4831
4957
  }
4832
4958
 
4833
- .muka-swipe-actions__panel--left {
4834
- left: 0;
4959
+ .muka-social-sign-in-button:focus-visible {
4960
+ outline: 2px solid var(--color-border-focus);
4961
+ outline-offset: 2px;
4835
4962
  }
4836
4963
 
4837
- .muka-swipe-actions__panel--right {
4838
- right: 0;
4964
+ /* Sizes — heights align with Button md/lg */
4965
+ .muka-social-sign-in-button--md {
4966
+ padding: 0 var(--button-padding-md-x);
4967
+ border-radius: var(--button-radius-md);
4968
+ font-size: var(--text-label-sm-semibold-fontSize);
4969
+ line-height: var(--text-label-sm-semibold-lineHeight);
4970
+ min-height: 40px;
4971
+ min-width: 240px;
4839
4972
  }
4840
4973
 
4841
- /* ─── Single action button ─────────────────────────────── */
4842
-
4843
- .muka-swipe-actions__button {
4844
- display: flex;
4845
- flex-direction: column;
4846
- align-items: center;
4847
- justify-content: center;
4848
- gap: var(--spacing-1);
4849
- border: none;
4850
- cursor: pointer;
4851
- padding: var(--spacing-2);
4852
- background-color: var(--color-surface-level2);
4853
- color: var(--color-text-default-default);
4854
- font-family: var(--text-label-sm-semibold-fontFamily);
4855
- font-weight: var(--text-label-sm-semibold-fontWeight);
4856
- font-size: var(--text-label-sm-semibold-fontSize);
4857
- line-height: var(--text-label-sm-semibold-lineHeight);
4858
- -webkit-tap-highlight-color: transparent;
4859
- transition: filter 0.12s ease;
4860
- }
4861
-
4862
- .muka-swipe-actions__button:hover {
4863
- filter: brightness(0.95);
4864
- }
4865
-
4866
- .muka-swipe-actions__button:focus-visible {
4867
- outline: 2px solid var(--color-action-default);
4868
- outline-offset: -2px;
4869
- }
4870
-
4871
- .muka-swipe-actions__button-icon {
4872
- display: inline-flex;
4873
- align-items: center;
4874
- justify-content: center;
4875
- }
4876
-
4877
- /* ─── Color variants ───────────────────────────────────── */
4878
-
4879
- .muka-swipe-actions__button--neutral {
4880
- background-color: var(--color-surface-level2);
4881
- color: var(--color-text-default-default);
4882
- }
4883
-
4884
- .muka-swipe-actions__button--primary {
4885
- background-color: var(--color-action-default);
4886
- color: var(--color-text-default-inverse);
4887
- }
4888
-
4889
- .muka-swipe-actions__button--success {
4890
- background-color: var(--color-state-success-default);
4891
- color: var(--color-text-default-inverse);
4892
- }
4893
-
4894
- .muka-swipe-actions__button--warning {
4895
- background-color: var(--color-state-warning-default);
4896
- color: var(--color-text-default-default);
4897
- }
4898
-
4899
- .muka-swipe-actions__button--destructive {
4900
- background-color: var(--color-state-error-default);
4901
- color: var(--color-text-default-inverse);
4902
- }
4903
-
4904
-
4905
- /* SocialSignInButton */
4906
- /*
4907
- * SocialSignInButton lockup colors are provider-mandated (Apple HIG /
4908
- * Google Identity branding) and intentionally fixed across Muka brands —
4909
- * same exception pattern as LicensePlateInput regulatory colors.
4910
- *
4911
- * Apple: https://developer.apple.com/design/human-interface-guidelines/sign-in-with-apple
4912
- * Google: https://developers.google.com/identity/branding-guidelines
4913
- */
4914
- .muka-social-sign-in-button {
4915
- --ssi-white: #ffffff;
4916
- --ssi-black: #000000;
4917
- --ssi-google-text-light: #1f1f1f;
4918
-
4919
- display: inline-flex;
4920
- align-items: center;
4921
- justify-content: center;
4922
-
4923
- /* Provider lockup type — matches Figma / HIG, not brand font tokens.
4924
- * SF Pro Text is OS-provided on Apple platforms (not redistributable).
4925
- * Google Sans is not freely shippable; Roboto is the closest system fallback. */
4926
- font-family: inherit;
4927
- font-weight: 600;
4928
- text-decoration: none;
4929
- white-space: nowrap;
4930
-
4931
- border: 1px solid transparent;
4932
- cursor: pointer;
4933
- user-select: none;
4934
- transition: opacity 0.15s ease, filter 0.15s ease;
4935
-
4936
- outline: none;
4937
- position: relative;
4938
- box-sizing: border-box;
4939
- }
4940
-
4941
- .muka-social-sign-in-button--apple {
4942
- font-family: 'SF Pro Text', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
4943
- Helvetica, Arial, sans-serif;
4944
- font-weight: 600;
4945
- }
4946
-
4947
- .muka-social-sign-in-button--google {
4948
- font-family: 'Google Sans', Roboto, 'Helvetica Neue', Arial, sans-serif;
4949
- font-weight: 500;
4950
- }
4951
-
4952
- .muka-social-sign-in-button:focus-visible {
4953
- outline: 2px solid var(--color-border-focus);
4954
- outline-offset: 2px;
4955
- }
4956
-
4957
- /* Sizes — heights align with Button md/lg */
4958
- .muka-social-sign-in-button--md {
4959
- padding: 0 var(--button-padding-md-x);
4960
- border-radius: var(--button-radius-md);
4961
- font-size: var(--text-label-sm-semibold-fontSize);
4962
- line-height: var(--text-label-sm-semibold-lineHeight);
4963
- min-height: 40px;
4964
- min-width: 240px;
4965
- }
4966
-
4967
- .muka-social-sign-in-button--md .muka-social-sign-in-button__label {
4968
- padding: 0 var(--button-gap-md);
4969
- }
4974
+ .muka-social-sign-in-button--md .muka-social-sign-in-button__label {
4975
+ padding: 0 var(--button-gap-md);
4976
+ }
4970
4977
 
4971
4978
  .muka-social-sign-in-button--md .muka-social-sign-in-button__icon {
4972
4979
  width: var(--button-icon-md);
@@ -6150,219 +6157,147 @@ body {
6150
6157
  }
6151
6158
 
6152
6159
 
6153
- /* RangeSlider */
6154
- /* RangeSlider Component Styles - Using Muka Design Tokens */
6160
+ /* Radio */
6161
+ /* Radio Component Styles - Using Muka Design Tokens */
6155
6162
 
6156
- .muka-range-slider {
6157
- display: flex;
6158
- flex-direction: column;
6159
- gap: var(--spacing-1);
6160
- width: 100%;
6163
+ /* Wrapper - clickable label container */
6164
+ .muka-radio {
6165
+ display: inline-flex;
6166
+ align-items: center;
6167
+ gap: var(--spacing-4);
6168
+ cursor: pointer;
6169
+ user-select: none;
6161
6170
  }
6162
6171
 
6163
- /* ========================================
6164
- HEADER: label group (label + info + optional) and value readout
6165
- ======================================== */
6166
-
6167
- .muka-range-slider__header {
6168
- display: flex;
6169
- align-items: center;
6170
- justify-content: space-between;
6171
- gap: var(--spacing-2);
6172
- min-height: 24px;
6172
+ .muka-radio--disabled {
6173
+ cursor: not-allowed;
6174
+ opacity: 0.6;
6173
6175
  }
6174
6176
 
6175
- .muka-range-slider__label-group {
6177
+ /* Control container */
6178
+ .muka-radio__control {
6179
+ position: relative;
6176
6180
  display: inline-flex;
6177
6181
  align-items: center;
6178
- gap: var(--spacing-2);
6182
+ justify-content: center;
6183
+ flex-shrink: 0;
6179
6184
  }
6180
6185
 
6181
- .muka-range-slider__label {
6182
- font-family: var(--text-label-md-semibold-fontFamily);
6183
- font-weight: var(--text-label-md-semibold-fontWeight);
6184
- font-size: var(--text-label-md-semibold-fontSize);
6185
- line-height: var(--text-label-md-semibold-lineHeight);
6186
- color: var(--color-text-default-default);
6186
+ /* Hidden native input */
6187
+ .muka-radio__input {
6188
+ position: absolute;
6189
+ width: 1px;
6190
+ height: 1px;
6191
+ padding: 0;
6192
+ margin: -1px;
6193
+ overflow: hidden;
6194
+ clip: rect(0, 0, 0, 0);
6195
+ white-space: nowrap;
6196
+ border: 0;
6187
6197
  }
6188
6198
 
6189
- .muka-range-slider__info {
6190
- color: var(--color-text-subtle-default);
6199
+ /* Visual indicator (circle) */
6200
+ .muka-radio__indicator {
6201
+ display: flex;
6202
+ align-items: center;
6203
+ justify-content: center;
6204
+ width: var(--radio-size-default);
6205
+ height: var(--radio-size-default);
6206
+ border-radius: var(--border-radius-full);
6207
+ background-color: var(--radio-color-default-background);
6208
+ border: var(--border-width-regular) solid var(--radio-color-default-border);
6209
+ transition: all 0.15s ease;
6210
+ box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.15);
6191
6211
  }
6192
6212
 
6193
- .muka-range-slider__optional {
6194
- font-family: var(--text-label-sm-regular-fontFamily);
6195
- font-weight: var(--text-label-sm-regular-fontWeight);
6196
- font-size: var(--text-label-sm-regular-fontSize);
6197
- line-height: var(--text-label-sm-regular-lineHeight);
6198
- color: var(--color-text-subtle-default);
6213
+ /* Size variants */
6214
+ .muka-radio--sm .muka-radio__indicator {
6215
+ width: var(--radio-size-sm);
6216
+ height: var(--radio-size-sm);
6199
6217
  }
6200
6218
 
6201
- .muka-range-slider__value {
6202
- font-family: var(--text-label-md-regular-fontFamily);
6203
- font-weight: var(--text-label-md-regular-fontWeight);
6204
- font-size: var(--text-label-md-regular-fontSize);
6205
- line-height: var(--text-label-md-regular-lineHeight);
6206
- color: var(--color-text-default-default);
6207
- font-variant-numeric: tabular-nums;
6219
+ .muka-radio--lg .muka-radio__indicator {
6220
+ width: var(--radio-size-lg);
6221
+ height: var(--radio-size-lg);
6208
6222
  }
6209
6223
 
6210
- .muka-range-slider__helper {
6211
- margin: 0;
6212
- font-family: var(--text-body-sm-regular-fontFamily);
6213
- font-weight: var(--text-body-sm-regular-fontWeight);
6214
- font-size: var(--text-body-sm-regular-fontSize);
6215
- line-height: var(--text-body-sm-regular-lineHeight);
6216
- color: var(--color-text-subtle-default);
6224
+ /* Inner dot (shown when checked) */
6225
+ .muka-radio__dot {
6226
+ width: var(--radio-dot-size-default);
6227
+ height: var(--radio-dot-size-default);
6228
+ border-radius: var(--border-radius-full);
6229
+ background-color: var(--radio-color-default-dot);
6230
+ transform: scale(0);
6231
+ transition: transform 0.15s ease;
6217
6232
  }
6218
6233
 
6219
- /* ========================================
6220
- TRACK + THUMB
6221
- Native range input, restyled. A thick sunken track holds an accent fill up to
6222
- the current value, with a circular grip handle. The filled portion is driven
6223
- by the inline --muka-range-fill custom property (set from the component value).
6224
- ======================================== */
6225
-
6226
- /* Size variants: track height, thumb diameter and grip geometry */
6227
- .muka-range-slider--sm {
6228
- --muka-range-track-h: 12px;
6229
- --muka-range-thumb: 24px;
6230
- --muka-range-grip-h: 9px;
6231
- }
6232
- .muka-range-slider--md {
6233
- --muka-range-track-h: 16px;
6234
- --muka-range-thumb: 32px;
6235
- --muka-range-grip-h: 12px;
6234
+ .muka-radio--sm .muka-radio__dot {
6235
+ width: var(--radio-dot-size-sm);
6236
+ height: var(--radio-dot-size-sm);
6236
6237
  }
6237
- .muka-range-slider--lg {
6238
- --muka-range-track-h: 20px;
6239
- --muka-range-thumb: 40px;
6240
- --muka-range-grip-h: 15px;
6238
+
6239
+ .muka-radio--lg .muka-radio__dot {
6240
+ width: var(--radio-dot-size-lg);
6241
+ height: var(--radio-dot-size-lg);
6241
6242
  }
6242
6243
 
6243
- .muka-range-slider__bar {
6244
- /* Reserve the full thumb height so the handle never clips the layout. */
6245
- display: flex;
6246
- align-items: center;
6247
- height: var(--muka-range-thumb);
6248
- }
6249
-
6250
- .muka-range-slider__input {
6251
- -webkit-appearance: none;
6252
- appearance: none;
6253
- width: 100%;
6254
- height: var(--muka-range-thumb);
6255
- margin: 0;
6256
- background: transparent;
6257
- cursor: pointer;
6258
-
6259
- /* Grip handle fill + two vertical grip bars, all theme-aware. */
6260
- --muka-range-grip-color: var(--color-text-subtle-default);
6261
- --muka-range-grip-w: 2px;
6262
- --muka-range-grip-gap: 3px;
6244
+ /* Hover state - removed per design */
6263
6245
 
6264
- /* The track fill: action colour up to the value, sunken surface beyond it. */
6265
- --muka-range-track-fill: linear-gradient(
6266
- to right,
6267
- var(--color-action-default) 0,
6268
- var(--color-action-default) var(--muka-range-fill, 0%),
6269
- var(--color-surface-sunken) var(--muka-range-fill, 0%),
6270
- var(--color-surface-sunken) 100%
6271
- );
6246
+ /* Focus state */
6247
+ .muka-radio__input:focus-visible + .muka-radio__indicator {
6248
+ outline: 2px solid var(--color-border-focus);
6249
+ outline-offset: 2px;
6272
6250
  }
6273
6251
 
6274
- .muka-range-slider__input:focus {
6275
- outline: none;
6252
+ /* Checked state */
6253
+ .muka-radio__input:checked + .muka-radio__indicator {
6254
+ background-color: var(--radio-color-checked-background);
6255
+ border-width: var(--border-width-bold);
6256
+ border-color: var(--radio-color-checked-border);
6257
+ box-shadow: none;
6276
6258
  }
6277
6259
 
6278
- /* WebKit / Blink track */
6279
- .muka-range-slider__input::-webkit-slider-runnable-track {
6280
- height: var(--muka-range-track-h);
6281
- border-radius: var(--border-radius-full);
6282
- background-image: var(--muka-range-track-fill);
6283
- border: 1px solid var(--color-border-contrast);
6284
- box-shadow: var(--shadow-sunken);
6260
+ .muka-radio__input:checked + .muka-radio__indicator .muka-radio__dot {
6261
+ background-color: var(--radio-color-checked-dot);
6262
+ transform: scale(1);
6285
6263
  }
6286
6264
 
6287
- /* Firefox track + progress */
6288
- .muka-range-slider__input::-moz-range-track {
6289
- height: var(--muka-range-track-h);
6290
- border-radius: var(--border-radius-full);
6291
- background: var(--color-surface-sunken);
6292
- border: 1px solid var(--color-border-contrast);
6293
- box-shadow: var(--shadow-sunken);
6294
- }
6295
- .muka-range-slider__input::-moz-range-progress {
6296
- height: var(--muka-range-track-h);
6297
- border-radius: var(--border-radius-full);
6298
- background: var(--color-action-default);
6265
+ /* Disabled state */
6266
+ .muka-radio--disabled .muka-radio__indicator {
6267
+ background-color: var(--radio-color-disabled-background);
6268
+ border-color: var(--radio-color-disabled-border);
6269
+ box-shadow: none;
6299
6270
  }
6300
6271
 
6301
- /* WebKit / Blink thumb (vertically centred over the track) */
6302
- .muka-range-slider__input::-webkit-slider-thumb {
6303
- -webkit-appearance: none;
6304
- appearance: none;
6305
- width: var(--muka-range-thumb);
6306
- height: var(--muka-range-thumb);
6307
- margin-top: calc((var(--muka-range-track-h) - var(--muka-range-thumb)) / 2);
6308
- border-radius: var(--border-radius-full);
6309
- border: 1px solid var(--color-border-contrast);
6310
- box-shadow: var(--shadow-level2);
6311
- background-color: var(--color-surface-level1);
6312
- background-image:
6313
- linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color)),
6314
- linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color));
6315
- background-repeat: no-repeat;
6316
- background-size: var(--muka-range-grip-w) var(--muka-range-grip-h), var(--muka-range-grip-w) var(--muka-range-grip-h);
6317
- background-position:
6318
- calc(50% - var(--muka-range-grip-gap)) center,
6319
- calc(50% + var(--muka-range-grip-gap)) center;
6320
- transition: box-shadow 0.15s ease, background-color 0.15s ease;
6272
+ .muka-radio__input:disabled:checked + .muka-radio__indicator .muka-radio__dot {
6273
+ background-color: var(--radio-color-disabled-dot);
6321
6274
  }
6322
6275
 
6323
- /* Firefox thumb */
6324
- .muka-range-slider__input::-moz-range-thumb {
6325
- width: var(--muka-range-thumb);
6326
- height: var(--muka-range-thumb);
6327
- border-radius: var(--border-radius-full);
6328
- border: 1px solid var(--color-border-contrast);
6329
- box-shadow: var(--shadow-level2);
6330
- background-color: var(--color-surface-level1);
6331
- background-image:
6332
- linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color)),
6333
- linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color));
6334
- background-repeat: no-repeat;
6335
- background-size: var(--muka-range-grip-w) var(--muka-range-grip-h), var(--muka-range-grip-w) var(--muka-range-grip-h);
6336
- background-position:
6337
- calc(50% - var(--muka-range-grip-gap)) center,
6338
- calc(50% + var(--muka-range-grip-gap)) center;
6339
- transition: box-shadow 0.15s ease, background-color 0.15s ease;
6276
+ /* Label text */
6277
+ .muka-radio__label {
6278
+ font-family: var(--text-label-lg-regular-fontFamily);
6279
+ font-weight: var(--text-label-lg-regular-fontWeight);
6280
+ font-size: var(--text-label-lg-regular-fontSize);
6281
+ line-height: var(--text-label-lg-regular-lineHeight);
6282
+ color: var(--color-text-default-default);
6340
6283
  }
6341
6284
 
6342
- /* Hover */
6343
- .muka-range-slider__input:hover::-webkit-slider-thumb {
6344
- background-color: var(--color-surface-level1);
6345
- box-shadow: var(--shadow-level3);
6346
- }
6347
- .muka-range-slider__input:hover::-moz-range-thumb {
6348
- background-color: var(--color-surface-level1);
6349
- box-shadow: var(--shadow-level3);
6285
+ .muka-radio--sm .muka-radio__label {
6286
+ font-family: var(--text-label-md-regular-fontFamily);
6287
+ font-weight: var(--text-label-md-regular-fontWeight);
6288
+ font-size: var(--text-label-md-regular-fontSize);
6289
+ line-height: var(--text-label-md-regular-lineHeight);
6350
6290
  }
6351
6291
 
6352
- /* Focus ring */
6353
- .muka-range-slider__input:focus-visible::-webkit-slider-thumb {
6354
- box-shadow: var(--shadow-level2), 0 0 0 3px var(--color-border-focus);
6355
- }
6356
- .muka-range-slider__input:focus-visible::-moz-range-thumb {
6357
- box-shadow: var(--shadow-level2), 0 0 0 3px var(--color-border-focus);
6292
+ .muka-radio--lg .muka-radio__label {
6293
+ font-family: var(--text-label-xl-regular-fontFamily);
6294
+ font-weight: var(--text-label-xl-regular-fontWeight);
6295
+ font-size: var(--text-label-xl-regular-fontSize);
6296
+ line-height: var(--text-label-xl-regular-lineHeight);
6358
6297
  }
6359
6298
 
6360
- /* Disabled */
6361
- .muka-range-slider--disabled {
6362
- opacity: 0.5;
6363
- }
6364
- .muka-range-slider--disabled .muka-range-slider__input {
6365
- cursor: not-allowed;
6299
+ .muka-radio--disabled .muka-radio__label {
6300
+ color: var(--color-text-subtle-default);
6366
6301
  }
6367
6302
 
6368
6303
 
@@ -6509,150 +6444,6 @@ body {
6509
6444
  }
6510
6445
 
6511
6446
 
6512
- /* Radio */
6513
- /* Radio Component Styles - Using Muka Design Tokens */
6514
-
6515
- /* Wrapper - clickable label container */
6516
- .muka-radio {
6517
- display: inline-flex;
6518
- align-items: center;
6519
- gap: var(--spacing-4);
6520
- cursor: pointer;
6521
- user-select: none;
6522
- }
6523
-
6524
- .muka-radio--disabled {
6525
- cursor: not-allowed;
6526
- opacity: 0.6;
6527
- }
6528
-
6529
- /* Control container */
6530
- .muka-radio__control {
6531
- position: relative;
6532
- display: inline-flex;
6533
- align-items: center;
6534
- justify-content: center;
6535
- flex-shrink: 0;
6536
- }
6537
-
6538
- /* Hidden native input */
6539
- .muka-radio__input {
6540
- position: absolute;
6541
- width: 1px;
6542
- height: 1px;
6543
- padding: 0;
6544
- margin: -1px;
6545
- overflow: hidden;
6546
- clip: rect(0, 0, 0, 0);
6547
- white-space: nowrap;
6548
- border: 0;
6549
- }
6550
-
6551
- /* Visual indicator (circle) */
6552
- .muka-radio__indicator {
6553
- display: flex;
6554
- align-items: center;
6555
- justify-content: center;
6556
- width: var(--radio-size-default);
6557
- height: var(--radio-size-default);
6558
- border-radius: var(--border-radius-full);
6559
- background-color: var(--radio-color-default-background);
6560
- border: var(--border-width-regular) solid var(--radio-color-default-border);
6561
- transition: all 0.15s ease;
6562
- box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.15);
6563
- }
6564
-
6565
- /* Size variants */
6566
- .muka-radio--sm .muka-radio__indicator {
6567
- width: var(--radio-size-sm);
6568
- height: var(--radio-size-sm);
6569
- }
6570
-
6571
- .muka-radio--lg .muka-radio__indicator {
6572
- width: var(--radio-size-lg);
6573
- height: var(--radio-size-lg);
6574
- }
6575
-
6576
- /* Inner dot (shown when checked) */
6577
- .muka-radio__dot {
6578
- width: var(--radio-dot-size-default);
6579
- height: var(--radio-dot-size-default);
6580
- border-radius: var(--border-radius-full);
6581
- background-color: var(--radio-color-default-dot);
6582
- transform: scale(0);
6583
- transition: transform 0.15s ease;
6584
- }
6585
-
6586
- .muka-radio--sm .muka-radio__dot {
6587
- width: var(--radio-dot-size-sm);
6588
- height: var(--radio-dot-size-sm);
6589
- }
6590
-
6591
- .muka-radio--lg .muka-radio__dot {
6592
- width: var(--radio-dot-size-lg);
6593
- height: var(--radio-dot-size-lg);
6594
- }
6595
-
6596
- /* Hover state - removed per design */
6597
-
6598
- /* Focus state */
6599
- .muka-radio__input:focus-visible + .muka-radio__indicator {
6600
- outline: 2px solid var(--color-border-focus);
6601
- outline-offset: 2px;
6602
- }
6603
-
6604
- /* Checked state */
6605
- .muka-radio__input:checked + .muka-radio__indicator {
6606
- background-color: var(--radio-color-checked-background);
6607
- border-width: var(--border-width-bold);
6608
- border-color: var(--radio-color-checked-border);
6609
- box-shadow: none;
6610
- }
6611
-
6612
- .muka-radio__input:checked + .muka-radio__indicator .muka-radio__dot {
6613
- background-color: var(--radio-color-checked-dot);
6614
- transform: scale(1);
6615
- }
6616
-
6617
- /* Disabled state */
6618
- .muka-radio--disabled .muka-radio__indicator {
6619
- background-color: var(--radio-color-disabled-background);
6620
- border-color: var(--radio-color-disabled-border);
6621
- box-shadow: none;
6622
- }
6623
-
6624
- .muka-radio__input:disabled:checked + .muka-radio__indicator .muka-radio__dot {
6625
- background-color: var(--radio-color-disabled-dot);
6626
- }
6627
-
6628
- /* Label text */
6629
- .muka-radio__label {
6630
- font-family: var(--text-label-lg-regular-fontFamily);
6631
- font-weight: var(--text-label-lg-regular-fontWeight);
6632
- font-size: var(--text-label-lg-regular-fontSize);
6633
- line-height: var(--text-label-lg-regular-lineHeight);
6634
- color: var(--color-text-default-default);
6635
- }
6636
-
6637
- .muka-radio--sm .muka-radio__label {
6638
- font-family: var(--text-label-md-regular-fontFamily);
6639
- font-weight: var(--text-label-md-regular-fontWeight);
6640
- font-size: var(--text-label-md-regular-fontSize);
6641
- line-height: var(--text-label-md-regular-lineHeight);
6642
- }
6643
-
6644
- .muka-radio--lg .muka-radio__label {
6645
- font-family: var(--text-label-xl-regular-fontFamily);
6646
- font-weight: var(--text-label-xl-regular-fontWeight);
6647
- font-size: var(--text-label-xl-regular-fontSize);
6648
- line-height: var(--text-label-xl-regular-lineHeight);
6649
- }
6650
-
6651
- .muka-radio--disabled .muka-radio__label {
6652
- color: var(--color-text-subtle-default);
6653
- }
6654
-
6655
-
6656
6447
  /* PullToRefresh */
6657
6448
  /* PullToRefresh Component Styles */
6658
6449
 
@@ -7266,98 +7057,314 @@ body {
7266
7057
  line-height: var(--text-body-base-regular-lineHeight);
7267
7058
  color: var(--color-text-default-default);
7268
7059
  }
7269
-
7270
- /* ─── Edit button ────────────────────────────────────────── */
7271
- .muka-progress-accordeon__edit {
7272
- flex-shrink: 0;
7060
+
7061
+ /* ─── Edit button ────────────────────────────────────────── */
7062
+ .muka-progress-accordeon__edit {
7063
+ flex-shrink: 0;
7064
+ }
7065
+
7066
+ /* Wide container shows the labelled button; the icon-only one is hidden */
7067
+ .muka-progress-accordeon__edit--narrow {
7068
+ display: none;
7069
+ }
7070
+
7071
+ /* ─── Content slot ───────────────────────────────────────── */
7072
+ .muka-progress-accordeon__slot {
7073
+ display: flex;
7074
+ flex-direction: column;
7075
+ align-items: stretch;
7076
+ width: 100%;
7077
+ }
7078
+
7079
+ /* ─── Collapse/expand animation (past & upcoming steps) ──────
7080
+ The grid-template-rows 1fr → 0fr technique animates the content to/from its
7081
+ intrinsic (auto) height with no magic max-height. Under prefers-reduced-motion
7082
+ --motion-duration-view resolves to 0ms, so the toggle stays instant. */
7083
+ .muka-progress-accordeon__slot-wrapper {
7084
+ display: grid;
7085
+ grid-template-rows: 1fr;
7086
+ transition: grid-template-rows var(--motion-duration-view) var(--motion-easing-enter);
7087
+ }
7088
+
7089
+ .muka-progress-accordeon__slot-wrapper--collapsed {
7090
+ grid-template-rows: 0fr;
7091
+ }
7092
+
7093
+ /* The direct grid child clips and must have NO padding/border of its own —
7094
+ min-height:0 lets it shrink, and with no padding the 0fr track reaches a true
7095
+ 0 height (padding on the item would leave a residual gap when collapsed). */
7096
+ .muka-progress-accordeon__slot-clip {
7097
+ overflow: hidden;
7098
+ min-height: 0;
7099
+ }
7100
+
7101
+ /* The header↔content spacing lives on the inner slot (inside the clip region)
7102
+ so it collapses together with the content. */
7103
+ .muka-progress-accordeon__slot-wrapper .muka-progress-accordeon__slot {
7104
+ padding-top: var(--spacing-4);
7105
+ }
7106
+
7107
+ /* ─── Action buttons (current state) ─────────────────────── */
7108
+ .muka-progress-accordeon__actions {
7109
+ display: flex;
7110
+ justify-content: flex-end;
7111
+ gap: var(--spacing-4);
7112
+ width: 100%;
7113
+ }
7114
+
7115
+ .muka-progress-accordeon__action {
7116
+ min-width: 160px;
7117
+ }
7118
+
7119
+ /* ─── Divider ────────────────────────────────────────────── */
7120
+ .muka-progress-accordeon__divider {
7121
+ width: 100%;
7122
+ }
7123
+
7124
+ /* ─── Responsive (narrow container) ──────────────────────── */
7125
+ @container (max-width: 480px) {
7126
+ /* Heading steps down to heading/sm. The 24px line-height is shorter than the
7127
+ 32px step indicator, so nudge the text down to keep a single line centred. */
7128
+ .muka-progress-accordeon__heading {
7129
+ font-size: var(--text-heading-sm-fontSize);
7130
+ line-height: var(--text-heading-sm-lineHeight);
7131
+ padding-top: var(--spacing-1);
7132
+ }
7133
+
7134
+ /* Edit button swaps to the icon-only variant */
7135
+ .muka-progress-accordeon__edit--wide {
7136
+ display: none;
7137
+ }
7138
+
7139
+ .muka-progress-accordeon__edit--narrow {
7140
+ display: inline-flex;
7141
+ }
7142
+
7143
+ /* Action buttons stretch to fill the row */
7144
+ .muka-progress-accordeon__actions {
7145
+ justify-content: stretch;
7146
+ }
7147
+
7148
+ .muka-progress-accordeon__action {
7149
+ flex: 1 0 0;
7150
+ min-width: 0;
7151
+ }
7152
+ }
7153
+
7154
+
7155
+ /* RangeSlider */
7156
+ /* RangeSlider Component Styles - Using Muka Design Tokens */
7157
+
7158
+ .muka-range-slider {
7159
+ display: flex;
7160
+ flex-direction: column;
7161
+ gap: var(--spacing-1);
7162
+ width: 100%;
7163
+ }
7164
+
7165
+ /* ========================================
7166
+ HEADER: label group (label + info + optional) and value readout
7167
+ ======================================== */
7168
+
7169
+ .muka-range-slider__header {
7170
+ display: flex;
7171
+ align-items: center;
7172
+ justify-content: space-between;
7173
+ gap: var(--spacing-2);
7174
+ min-height: 24px;
7175
+ }
7176
+
7177
+ .muka-range-slider__label-group {
7178
+ display: inline-flex;
7179
+ align-items: center;
7180
+ gap: var(--spacing-2);
7181
+ }
7182
+
7183
+ .muka-range-slider__label {
7184
+ font-family: var(--text-label-md-semibold-fontFamily);
7185
+ font-weight: var(--text-label-md-semibold-fontWeight);
7186
+ font-size: var(--text-label-md-semibold-fontSize);
7187
+ line-height: var(--text-label-md-semibold-lineHeight);
7188
+ color: var(--color-text-default-default);
7189
+ }
7190
+
7191
+ .muka-range-slider__info {
7192
+ color: var(--color-text-subtle-default);
7193
+ }
7194
+
7195
+ .muka-range-slider__optional {
7196
+ font-family: var(--text-label-sm-regular-fontFamily);
7197
+ font-weight: var(--text-label-sm-regular-fontWeight);
7198
+ font-size: var(--text-label-sm-regular-fontSize);
7199
+ line-height: var(--text-label-sm-regular-lineHeight);
7200
+ color: var(--color-text-subtle-default);
7201
+ }
7202
+
7203
+ .muka-range-slider__value {
7204
+ font-family: var(--text-label-md-regular-fontFamily);
7205
+ font-weight: var(--text-label-md-regular-fontWeight);
7206
+ font-size: var(--text-label-md-regular-fontSize);
7207
+ line-height: var(--text-label-md-regular-lineHeight);
7208
+ color: var(--color-text-default-default);
7209
+ font-variant-numeric: tabular-nums;
7210
+ }
7211
+
7212
+ .muka-range-slider__helper {
7213
+ margin: 0;
7214
+ font-family: var(--text-body-sm-regular-fontFamily);
7215
+ font-weight: var(--text-body-sm-regular-fontWeight);
7216
+ font-size: var(--text-body-sm-regular-fontSize);
7217
+ line-height: var(--text-body-sm-regular-lineHeight);
7218
+ color: var(--color-text-subtle-default);
7219
+ }
7220
+
7221
+ /* ========================================
7222
+ TRACK + THUMB
7223
+ Native range input, restyled. A thick sunken track holds an accent fill up to
7224
+ the current value, with a circular grip handle. The filled portion is driven
7225
+ by the inline --muka-range-fill custom property (set from the component value).
7226
+ ======================================== */
7227
+
7228
+ /* Size variants: track height, thumb diameter and grip geometry */
7229
+ .muka-range-slider--sm {
7230
+ --muka-range-track-h: 12px;
7231
+ --muka-range-thumb: 24px;
7232
+ --muka-range-grip-h: 9px;
7233
+ }
7234
+ .muka-range-slider--md {
7235
+ --muka-range-track-h: 16px;
7236
+ --muka-range-thumb: 32px;
7237
+ --muka-range-grip-h: 12px;
7238
+ }
7239
+ .muka-range-slider--lg {
7240
+ --muka-range-track-h: 20px;
7241
+ --muka-range-thumb: 40px;
7242
+ --muka-range-grip-h: 15px;
7273
7243
  }
7274
7244
 
7275
- /* Wide container shows the labelled button; the icon-only one is hidden */
7276
- .muka-progress-accordeon__edit--narrow {
7277
- display: none;
7245
+ .muka-range-slider__bar {
7246
+ /* Reserve the full thumb height so the handle never clips the layout. */
7247
+ display: flex;
7248
+ align-items: center;
7249
+ height: var(--muka-range-thumb);
7278
7250
  }
7279
7251
 
7280
- /* ─── Content slot ───────────────────────────────────────── */
7281
- .muka-progress-accordeon__slot {
7282
- display: flex;
7283
- flex-direction: column;
7284
- align-items: stretch;
7252
+ .muka-range-slider__input {
7253
+ -webkit-appearance: none;
7254
+ appearance: none;
7285
7255
  width: 100%;
7286
- }
7256
+ height: var(--muka-range-thumb);
7257
+ margin: 0;
7258
+ background: transparent;
7259
+ cursor: pointer;
7287
7260
 
7288
- /* ─── Collapse/expand animation (past & upcoming steps) ──────
7289
- The grid-template-rows 1fr → 0fr technique animates the content to/from its
7290
- intrinsic (auto) height with no magic max-height. Under prefers-reduced-motion
7291
- --motion-duration-view resolves to 0ms, so the toggle stays instant. */
7292
- .muka-progress-accordeon__slot-wrapper {
7293
- display: grid;
7294
- grid-template-rows: 1fr;
7295
- transition: grid-template-rows var(--motion-duration-view) var(--motion-easing-enter);
7296
- }
7261
+ /* Grip handle fill + two vertical grip bars, all theme-aware. */
7262
+ --muka-range-grip-color: var(--color-text-subtle-default);
7263
+ --muka-range-grip-w: 2px;
7264
+ --muka-range-grip-gap: 3px;
7297
7265
 
7298
- .muka-progress-accordeon__slot-wrapper--collapsed {
7299
- grid-template-rows: 0fr;
7266
+ /* The track fill: action colour up to the value, sunken surface beyond it. */
7267
+ --muka-range-track-fill: linear-gradient(
7268
+ to right,
7269
+ var(--color-action-default) 0,
7270
+ var(--color-action-default) var(--muka-range-fill, 0%),
7271
+ var(--color-surface-sunken) var(--muka-range-fill, 0%),
7272
+ var(--color-surface-sunken) 100%
7273
+ );
7300
7274
  }
7301
7275
 
7302
- /* The direct grid child clips and must have NO padding/border of its own —
7303
- min-height:0 lets it shrink, and with no padding the 0fr track reaches a true
7304
- 0 height (padding on the item would leave a residual gap when collapsed). */
7305
- .muka-progress-accordeon__slot-clip {
7306
- overflow: hidden;
7307
- min-height: 0;
7276
+ .muka-range-slider__input:focus {
7277
+ outline: none;
7308
7278
  }
7309
7279
 
7310
- /* The header↔content spacing lives on the inner slot (inside the clip region)
7311
- so it collapses together with the content. */
7312
- .muka-progress-accordeon__slot-wrapper .muka-progress-accordeon__slot {
7313
- padding-top: var(--spacing-4);
7280
+ /* WebKit / Blink track */
7281
+ .muka-range-slider__input::-webkit-slider-runnable-track {
7282
+ height: var(--muka-range-track-h);
7283
+ border-radius: var(--border-radius-full);
7284
+ background-image: var(--muka-range-track-fill);
7285
+ border: 1px solid var(--color-border-contrast);
7286
+ box-shadow: var(--shadow-sunken);
7314
7287
  }
7315
7288
 
7316
- /* ─── Action buttons (current state) ─────────────────────── */
7317
- .muka-progress-accordeon__actions {
7318
- display: flex;
7319
- justify-content: flex-end;
7320
- gap: var(--spacing-4);
7321
- width: 100%;
7289
+ /* Firefox track + progress */
7290
+ .muka-range-slider__input::-moz-range-track {
7291
+ height: var(--muka-range-track-h);
7292
+ border-radius: var(--border-radius-full);
7293
+ background: var(--color-surface-sunken);
7294
+ border: 1px solid var(--color-border-contrast);
7295
+ box-shadow: var(--shadow-sunken);
7322
7296
  }
7323
-
7324
- .muka-progress-accordeon__action {
7325
- min-width: 160px;
7297
+ .muka-range-slider__input::-moz-range-progress {
7298
+ height: var(--muka-range-track-h);
7299
+ border-radius: var(--border-radius-full);
7300
+ background: var(--color-action-default);
7326
7301
  }
7327
7302
 
7328
- /* ─── Divider ────────────────────────────────────────────── */
7329
- .muka-progress-accordeon__divider {
7330
- width: 100%;
7303
+ /* WebKit / Blink thumb (vertically centred over the track) */
7304
+ .muka-range-slider__input::-webkit-slider-thumb {
7305
+ -webkit-appearance: none;
7306
+ appearance: none;
7307
+ width: var(--muka-range-thumb);
7308
+ height: var(--muka-range-thumb);
7309
+ margin-top: calc((var(--muka-range-track-h) - var(--muka-range-thumb)) / 2);
7310
+ border-radius: var(--border-radius-full);
7311
+ border: 1px solid var(--color-border-contrast);
7312
+ box-shadow: var(--shadow-level2);
7313
+ background-color: var(--color-surface-level1);
7314
+ background-image:
7315
+ linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color)),
7316
+ linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color));
7317
+ background-repeat: no-repeat;
7318
+ background-size: var(--muka-range-grip-w) var(--muka-range-grip-h), var(--muka-range-grip-w) var(--muka-range-grip-h);
7319
+ background-position:
7320
+ calc(50% - var(--muka-range-grip-gap)) center,
7321
+ calc(50% + var(--muka-range-grip-gap)) center;
7322
+ transition: box-shadow 0.15s ease, background-color 0.15s ease;
7331
7323
  }
7332
7324
 
7333
- /* ─── Responsive (narrow container) ──────────────────────── */
7334
- @container (max-width: 480px) {
7335
- /* Heading steps down to heading/sm. The 24px line-height is shorter than the
7336
- 32px step indicator, so nudge the text down to keep a single line centred. */
7337
- .muka-progress-accordeon__heading {
7338
- font-size: var(--text-heading-sm-fontSize);
7339
- line-height: var(--text-heading-sm-lineHeight);
7340
- padding-top: var(--spacing-1);
7341
- }
7342
-
7343
- /* Edit button swaps to the icon-only variant */
7344
- .muka-progress-accordeon__edit--wide {
7345
- display: none;
7346
- }
7325
+ /* Firefox thumb */
7326
+ .muka-range-slider__input::-moz-range-thumb {
7327
+ width: var(--muka-range-thumb);
7328
+ height: var(--muka-range-thumb);
7329
+ border-radius: var(--border-radius-full);
7330
+ border: 1px solid var(--color-border-contrast);
7331
+ box-shadow: var(--shadow-level2);
7332
+ background-color: var(--color-surface-level1);
7333
+ background-image:
7334
+ linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color)),
7335
+ linear-gradient(var(--muka-range-grip-color), var(--muka-range-grip-color));
7336
+ background-repeat: no-repeat;
7337
+ background-size: var(--muka-range-grip-w) var(--muka-range-grip-h), var(--muka-range-grip-w) var(--muka-range-grip-h);
7338
+ background-position:
7339
+ calc(50% - var(--muka-range-grip-gap)) center,
7340
+ calc(50% + var(--muka-range-grip-gap)) center;
7341
+ transition: box-shadow 0.15s ease, background-color 0.15s ease;
7342
+ }
7347
7343
 
7348
- .muka-progress-accordeon__edit--narrow {
7349
- display: inline-flex;
7350
- }
7344
+ /* Hover */
7345
+ .muka-range-slider__input:hover::-webkit-slider-thumb {
7346
+ background-color: var(--color-surface-level1);
7347
+ box-shadow: var(--shadow-level3);
7348
+ }
7349
+ .muka-range-slider__input:hover::-moz-range-thumb {
7350
+ background-color: var(--color-surface-level1);
7351
+ box-shadow: var(--shadow-level3);
7352
+ }
7351
7353
 
7352
- /* Action buttons stretch to fill the row */
7353
- .muka-progress-accordeon__actions {
7354
- justify-content: stretch;
7355
- }
7354
+ /* Focus ring */
7355
+ .muka-range-slider__input:focus-visible::-webkit-slider-thumb {
7356
+ box-shadow: var(--shadow-level2), 0 0 0 3px var(--color-border-focus);
7357
+ }
7358
+ .muka-range-slider__input:focus-visible::-moz-range-thumb {
7359
+ box-shadow: var(--shadow-level2), 0 0 0 3px var(--color-border-focus);
7360
+ }
7356
7361
 
7357
- .muka-progress-accordeon__action {
7358
- flex: 1 0 0;
7359
- min-width: 0;
7360
- }
7362
+ /* Disabled */
7363
+ .muka-range-slider--disabled {
7364
+ opacity: 0.5;
7365
+ }
7366
+ .muka-range-slider--disabled .muka-range-slider__input {
7367
+ cursor: not-allowed;
7361
7368
  }
7362
7369
 
7363
7370
 
@@ -7957,36 +7964,6 @@ body {
7957
7964
  }
7958
7965
 
7959
7966
 
7960
- /* PhotoDraftStrip */
7961
- /* PhotoDraftStrip Component Styles */
7962
-
7963
- .muka-photo-draft-strip {
7964
- display: flex;
7965
- align-items: center;
7966
- gap: var(--spacing-3);
7967
- width: 100%;
7968
- padding: var(--spacing-2) 0;
7969
- }
7970
-
7971
- .muka-photo-draft-strip__track {
7972
- display: flex;
7973
- gap: var(--spacing-2);
7974
- flex: 1 1 auto;
7975
- min-width: 0;
7976
- overflow-x: auto;
7977
- scroll-behavior: smooth;
7978
- scrollbar-width: none;
7979
- }
7980
-
7981
- .muka-photo-draft-strip__track::-webkit-scrollbar {
7982
- display: none;
7983
- }
7984
-
7985
- .muka-photo-draft-strip__item {
7986
- flex: 0 0 auto;
7987
- }
7988
-
7989
-
7990
7967
  /* Pagination */
7991
7968
  /* Pagination Component Styles */
7992
7969
 
@@ -8089,6 +8066,36 @@ body {
8089
8066
  }
8090
8067
 
8091
8068
 
8069
+ /* PhotoDraftStrip */
8070
+ /* PhotoDraftStrip Component Styles */
8071
+
8072
+ .muka-photo-draft-strip {
8073
+ display: flex;
8074
+ align-items: center;
8075
+ gap: var(--spacing-3);
8076
+ width: 100%;
8077
+ padding: var(--spacing-2) 0;
8078
+ }
8079
+
8080
+ .muka-photo-draft-strip__track {
8081
+ display: flex;
8082
+ gap: var(--spacing-2);
8083
+ flex: 1 1 auto;
8084
+ min-width: 0;
8085
+ overflow-x: auto;
8086
+ scroll-behavior: smooth;
8087
+ scrollbar-width: none;
8088
+ }
8089
+
8090
+ .muka-photo-draft-strip__track::-webkit-scrollbar {
8091
+ display: none;
8092
+ }
8093
+
8094
+ .muka-photo-draft-strip__item {
8095
+ flex: 0 0 auto;
8096
+ }
8097
+
8098
+
8092
8099
  /* NumberInput */
8093
8100
  /* NumberInput — reuses Input field styles (../Input/Input.css). */
8094
8101
  /* Only the prefix/suffix affixes are NumberInput-specific. */
@@ -14631,7 +14638,8 @@ button.muka-chat-photo-grid__tile:focus-visible {
14631
14638
  align-items: center;
14632
14639
  justify-content: center;
14633
14640
  flex-shrink: 0;
14634
- overflow: hidden;
14641
+ /* No overflow clipping: the status dot sits on the edge. The image and the
14642
+ loading shimmer round themselves to the avatar shape instead. */
14635
14643
  user-select: none;
14636
14644
  vertical-align: middle;
14637
14645
  background-color: var(--avatar-color-background-default);
@@ -14704,9 +14712,10 @@ button.muka-chat-photo-grid__tile:focus-visible {
14704
14712
  border-radius: var(--avatar-radius-square-sm);
14705
14713
  }
14706
14714
 
14707
- /* 4xs is too small for initials, the fallback icon or a status dot:
14715
+ /* 4xs is too small for initials, an icon, the fallback icon or a status dot:
14708
14716
  it shows the picture, or the plain background */
14709
14717
  .muka-avatar--4xs .muka-avatar__initials,
14718
+ .muka-avatar--4xs .muka-avatar__icon,
14710
14719
  .muka-avatar--4xs .muka-avatar__fallback,
14711
14720
  .muka-avatar--4xs .muka-avatar__status {
14712
14721
  display: none;
@@ -14742,38 +14751,59 @@ button.muka-chat-photo-grid__tile:focus-visible {
14742
14751
  .muka-avatar__skeleton {
14743
14752
  position: absolute;
14744
14753
  inset: 0;
14754
+ border-radius: inherit;
14745
14755
  background: linear-gradient(
14746
14756
  90deg,
14747
14757
  transparent 0%,
14748
14758
  var(--color-surface-level1) 50%,
14749
14759
  transparent 100%
14750
- );
14760
+ ) no-repeat;
14761
+ background-size: 50% 100%;
14751
14762
  animation: avatar-loading 1.5s ease-in-out infinite;
14752
14763
  }
14753
14764
 
14765
+ /* The highlight sweeps by background position, so it stays inside the
14766
+ rounded shape without the avatar clipping its overflow */
14754
14767
  @keyframes avatar-loading {
14755
14768
  0% {
14756
- transform: translateX(-100%);
14769
+ background-position: -100% 0;
14757
14770
  }
14758
14771
  100% {
14759
- transform: translateX(100%);
14772
+ background-position: 200% 0;
14760
14773
  }
14761
14774
  }
14762
14775
 
14763
14776
  /* Avatar content */
14764
14777
  .muka-avatar__image {
14778
+ border-radius: inherit;
14765
14779
  width: 100%;
14766
14780
  height: 100%;
14767
14781
  object-fit: cover;
14768
14782
  display: block;
14769
14783
  }
14770
14784
 
14785
+ /* Icon slot: a fixed icon size per avatar size, in the initials colour
14786
+ (subtle text) */
14771
14787
  .muka-avatar__icon {
14772
- width: 60%;
14773
- height: 60%;
14774
14788
  display: flex;
14775
14789
  align-items: center;
14776
14790
  justify-content: center;
14791
+ color: var(--avatar-color-foreground-default);
14792
+ }
14793
+
14794
+ .muka-avatar--3xs .muka-avatar__icon { width: var(--avatar-icon-size-3xs); height: var(--avatar-icon-size-3xs); }
14795
+ .muka-avatar--2xs .muka-avatar__icon { width: var(--avatar-icon-size-2xs); height: var(--avatar-icon-size-2xs); }
14796
+ .muka-avatar--xs .muka-avatar__icon { width: var(--avatar-icon-size-xs); height: var(--avatar-icon-size-xs); }
14797
+ .muka-avatar--sm .muka-avatar__icon { width: var(--avatar-icon-size-sm); height: var(--avatar-icon-size-sm); }
14798
+ .muka-avatar--md .muka-avatar__icon { width: var(--avatar-icon-size-md); height: var(--avatar-icon-size-md); }
14799
+ .muka-avatar--lg .muka-avatar__icon { width: var(--avatar-icon-size-lg); height: var(--avatar-icon-size-lg); }
14800
+ .muka-avatar--xl .muka-avatar__icon { width: var(--avatar-icon-size-xl); height: var(--avatar-icon-size-xl); }
14801
+
14802
+ /* A Muka Icon fills the slot and takes its colour (its own `color` prop still wins) */
14803
+ .muka-avatar__icon .muka-icon {
14804
+ width: 100%;
14805
+ height: 100%;
14806
+ color: inherit;
14777
14807
  }
14778
14808
 
14779
14809
  .muka-avatar__icon svg {