@revikornmann/muka-ui 0.26.0 → 0.27.1

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 (79) hide show
  1. package/dist/cjs/components/Avatar/Avatar.css +79 -30
  2. package/dist/cjs/components/Avatar/Avatar.js +24 -2
  3. package/dist/cjs/components/Avatar/Avatar.js.map +1 -1
  4. package/dist/cjs/components/Avatar/AvatarGroup.js +4 -3
  5. package/dist/cjs/components/Avatar/AvatarGroup.js.map +1 -1
  6. package/dist/cjs/components/Button/Button.css +33 -0
  7. package/dist/cjs/components/Button/Button.js +2 -2
  8. package/dist/cjs/components/DataPieChart/DataPieChart.js +5 -2
  9. package/dist/cjs/components/DataPieChart/DataPieChart.js.map +1 -1
  10. package/dist/cjs/components/DataPieChart/index.js.map +1 -1
  11. package/dist/cjs/components/Tabs/Tabs.css +37 -14
  12. package/dist/cjs/components/Tabs/Tabs.js +30 -10
  13. package/dist/cjs/components/Tabs/Tabs.js.map +1 -1
  14. package/dist/cjs/components/index.js.map +1 -1
  15. package/dist/esm/components/Avatar/Avatar.css +79 -30
  16. package/dist/esm/components/Avatar/Avatar.js +25 -3
  17. package/dist/esm/components/Avatar/Avatar.js.map +1 -1
  18. package/dist/esm/components/Avatar/AvatarGroup.js +4 -3
  19. package/dist/esm/components/Avatar/AvatarGroup.js.map +1 -1
  20. package/dist/esm/components/Button/Button.css +33 -0
  21. package/dist/esm/components/Button/Button.js +2 -2
  22. package/dist/esm/components/DataPieChart/DataPieChart.js +4 -1
  23. package/dist/esm/components/DataPieChart/DataPieChart.js.map +1 -1
  24. package/dist/esm/components/DataPieChart/index.js.map +1 -1
  25. package/dist/esm/components/Tabs/Tabs.css +37 -14
  26. package/dist/esm/components/Tabs/Tabs.js +30 -10
  27. package/dist/esm/components/Tabs/Tabs.js.map +1 -1
  28. package/dist/esm/components/index.js.map +1 -1
  29. package/dist/styles/components/Avatar.css +79 -30
  30. package/dist/styles/components/Button.css +33 -0
  31. package/dist/styles/components/Tabs.css +37 -14
  32. package/dist/styles/index.css +555 -407
  33. package/dist/styles/muka-dark.css +555 -407
  34. package/dist/styles/muka-light.css +555 -407
  35. package/dist/styles/tokens-bouwplan-dark.css +48 -5
  36. package/dist/styles/tokens-bouwplan-light.css +48 -5
  37. package/dist/styles/tokens-fscl-dark.css +48 -5
  38. package/dist/styles/tokens-fscl-light.css +48 -5
  39. package/dist/styles/tokens-grip-dark.css +48 -5
  40. package/dist/styles/tokens-grip-light.css +48 -5
  41. package/dist/styles/tokens-muka-dark.css +48 -5
  42. package/dist/styles/tokens-muka-light.css +48 -5
  43. package/dist/styles/tokens-wireframe-dark.css +48 -5
  44. package/dist/styles/tokens-wireframe-light.css +48 -5
  45. package/dist/styles/wireframe-dark.css +555 -407
  46. package/dist/styles/wireframe-light.css +555 -407
  47. package/dist/types/components/Avatar/Avatar.d.ts +8 -3
  48. package/dist/types/components/Avatar/Avatar.d.ts.map +1 -1
  49. package/dist/types/components/Avatar/AvatarGroup.d.ts +10 -5
  50. package/dist/types/components/Avatar/AvatarGroup.d.ts.map +1 -1
  51. package/dist/types/components/Avatar/index.d.ts +1 -1
  52. package/dist/types/components/Avatar/index.d.ts.map +1 -1
  53. package/dist/types/components/Button/Button.d.ts +3 -3
  54. package/dist/types/components/Button/Button.d.ts.map +1 -1
  55. package/dist/types/components/DataPieChart/DataPieChart.d.ts +13 -2
  56. package/dist/types/components/DataPieChart/DataPieChart.d.ts.map +1 -1
  57. package/dist/types/components/DataPieChart/index.d.ts +1 -1
  58. package/dist/types/components/DataPieChart/index.d.ts.map +1 -1
  59. package/dist/types/components/Tabs/Tabs.d.ts +17 -2
  60. package/dist/types/components/Tabs/Tabs.d.ts.map +1 -1
  61. package/dist/types/components/index.d.ts +2 -2
  62. package/dist/types/components/index.d.ts.map +1 -1
  63. package/package.json +1 -1
  64. package/tokens/t1-primitives/color.json +10 -0
  65. package/tokens/t2-alias/base.json +14 -0
  66. package/tokens/t2-alias/brand/bouwplan/dark.json +5 -0
  67. package/tokens/t2-alias/brand/bouwplan/light.json +5 -0
  68. package/tokens/t2-alias/brand/fscl/dark.json +5 -0
  69. package/tokens/t2-alias/brand/fscl/light.json +5 -0
  70. package/tokens/t2-alias/brand/grip/dark.json +14 -0
  71. package/tokens/t2-alias/brand/grip/light.json +14 -0
  72. package/tokens/t2-alias/brand/muka/dark.json +14 -0
  73. package/tokens/t2-alias/brand/muka/light.json +14 -0
  74. package/tokens/t2-alias/brand/wireframe/dark.json +14 -0
  75. package/tokens/t2-alias/brand/wireframe/light.json +14 -0
  76. package/tokens/t3-semantics/ui.json +49 -2
  77. package/tokens/t4-components/avatar.json +82 -18
  78. package/tokens/t4-components/button.json +56 -0
  79. package/tokens/t4-components/tabs.json +41 -1
@@ -409,6 +409,8 @@ body {
409
409
  --color-red-10: #dc3d43;
410
410
  --color-red-11: #cd2b31;
411
411
  --color-red-12: #381316;
412
+ --color-redStrong-1: #bd1524;
413
+ --color-redStrong-2: #ab001a;
412
414
  --color-ruby-1: #fffcfd;
413
415
  --color-ruby-2: #fff7f8;
414
416
  --color-ruby-3: #ffeef1;
@@ -1207,6 +1209,9 @@ body {
1207
1209
  --color-state-error-default: #e54d4e;
1208
1210
  --color-state-error-contrast: #fea6a6;
1209
1211
  --color-state-error-background: #3d181e;
1212
+ --color-state-error-solid-default: #e54d4e;
1213
+ --color-state-error-solid-hover: #f56565;
1214
+ --color-state-error-solid-pressed: #f56565;
1210
1215
  --color-state-info-default: #0090ff;
1211
1216
  --color-state-info-contrast: #70b8ff;
1212
1217
  --color-state-info-background: #0d2847;
@@ -1307,6 +1312,9 @@ body {
1307
1312
  --alias-color-state-error-contrast: #fea6a6;
1308
1313
  --alias-color-state-error-default: #e54d4e;
1309
1314
  --alias-color-state-error-muted: #3d181e;
1315
+ --alias-color-state-error-solid-default: #e54d4e;
1316
+ --alias-color-state-error-solid-hover: #f56565;
1317
+ --alias-color-state-error-solid-pressed: #f56565;
1310
1318
  --alias-color-state-error-surface-level0: #2c1419;
1311
1319
  --alias-color-state-error-surface-level1: #3d181e;
1312
1320
  --alias-color-state-error-surface-level2: #4a1a22;
@@ -1603,6 +1611,18 @@ body {
1603
1611
  --button-color-primary-shadow-hover: inset 0px -2px 0px 0px rgba(0, 0, 0, 0.090);
1604
1612
  --button-color-primary-shadow-pressed: none;
1605
1613
  --button-color-primary-shadow-disabled: none;
1614
+ --button-color-destructive-background-default: #e54d4e;
1615
+ --button-color-destructive-background-hover: #f56565;
1616
+ --button-color-destructive-background-pressed: #f56565;
1617
+ --button-color-destructive-background-disabled: #2b2b30;
1618
+ --button-color-destructive-foreground-default: #161618;
1619
+ --button-color-destructive-foreground-hover: #161618;
1620
+ --button-color-destructive-foreground-pressed: #161618;
1621
+ --button-color-destructive-foreground-disabled: #4c4c57;
1622
+ --button-color-destructive-shadow-default: inset 0px -2px 0px 0px rgba(0, 0, 0, 0.090);
1623
+ --button-color-destructive-shadow-hover: inset 0px -2px 0px 0px rgba(0, 0, 0, 0.090);
1624
+ --button-color-destructive-shadow-pressed: none;
1625
+ --button-color-destructive-shadow-disabled: none;
1606
1626
  --button-color-secondary-background-default: #232326;
1607
1627
  --button-color-secondary-background-hover: #232326;
1608
1628
  --button-color-secondary-background-pressed: #2b2b30;
@@ -1967,7 +1987,7 @@ body {
1967
1987
  --contextmenu-trigger-outline-color: #9eb1ff;
1968
1988
  --contextmenu-trigger-outline-offset: 0.25rem;
1969
1989
  --tabs-trigger-color-default-background: #232326;
1970
- --tabs-trigger-color-default-foreground: #e6e6ea;
1990
+ --tabs-trigger-color-default-foreground: #737387;
1971
1991
  --tabs-trigger-color-default-border: #4c4c57;
1972
1992
  --tabs-trigger-color-hover-background: #232326;
1973
1993
  --tabs-trigger-color-hover-foreground: #e6e6ea;
@@ -1982,8 +2002,16 @@ body {
1982
2002
  --tabs-trigger-padding-y: 0.5rem;
1983
2003
  --tabs-trigger-height: 3rem;
1984
2004
  --tabs-trigger-radius: 0.75rem;
2005
+ --tabs-trigger-min-height-sm: 2.5rem;
2006
+ --tabs-trigger-min-height-md: 3.5rem;
2007
+ --tabs-trigger-min-height-lg: 5rem;
1985
2008
  --tabs-panel-background: #161618;
1986
2009
  --tabs-panel-border: #4c4c57;
2010
+ --tabs-indicator-color: #9eb1ff;
2011
+ --tabs-indicator-height-sm: 2px;
2012
+ --tabs-indicator-height-md: 3px;
2013
+ --tabs-indicator-height-lg: 4px;
2014
+ --tabs-list-padding-x: 1rem;
1987
2015
  --separator-color-default: #2b2b30;
1988
2016
  --separator-color-contrast: #4c4c57;
1989
2017
  --separator-width: 0.0625rem;
@@ -2016,6 +2044,9 @@ body {
2016
2044
  --progress-size-circle-strokeWidth-sm: 0.25rem;
2017
2045
  --progress-size-circle-strokeWidth-md: 0.5rem;
2018
2046
  --progress-size-circle-strokeWidth-lg: 0.75rem;
2047
+ --avatar-size-4xs: 1rem;
2048
+ --avatar-size-3xs: 1.5rem;
2049
+ --avatar-size-2xs: 2rem;
2019
2050
  --avatar-size-xs: 2.5rem;
2020
2051
  --avatar-size-sm: 3rem;
2021
2052
  --avatar-size-md: 4rem;
@@ -2025,26 +2056,38 @@ body {
2025
2056
  --avatar-color-background-loading: #2b2b30;
2026
2057
  --avatar-color-foreground-default: #e6e6ea;
2027
2058
  --avatar-color-foreground-muted: #4c4c57;
2028
- --avatar-color-border-default: #2b2b30;
2029
2059
  --avatar-color-status-online: #58d5ba;
2030
2060
  --avatar-color-status-offline: #4c4c57;
2031
2061
  --avatar-color-status-busy: #e54d4e;
2032
2062
  --avatar-color-status-away: #ffc53d;
2033
2063
  --avatar-radius-circle: 999rem;
2034
2064
  --avatar-radius-square: 0.75rem;
2065
+ --avatar-radius-square-sm: 0.375rem;
2066
+ --avatar-font-size-3xs: 0.75rem;
2067
+ --avatar-font-size-2xs: 0.75rem;
2035
2068
  --avatar-font-size-xs: 0.75rem;
2036
2069
  --avatar-font-size-sm: 0.875rem;
2037
2070
  --avatar-font-size-md: 1.125rem;
2038
2071
  --avatar-font-size-lg: 1.25rem;
2039
2072
  --avatar-font-size-xl: 1.5rem;
2073
+ --avatar-status-size-3xs: 0.5rem;
2074
+ --avatar-status-size-2xs: 0.5rem;
2040
2075
  --avatar-status-size-xs: 0.5rem;
2041
2076
  --avatar-status-size-sm: 0.75rem;
2042
2077
  --avatar-status-size-md: 1rem;
2043
2078
  --avatar-status-size-lg: 1.25rem;
2044
2079
  --avatar-status-size-xl: 1.5rem;
2045
- --avatar-border-width: 1px;
2046
- --avatar-group-spacing-tight: -0.5rem;
2047
- --avatar-group-spacing-normal: -0.25rem;
2080
+ --avatar-group-ring-width: 0.125rem;
2081
+ --avatar-group-ring-color: #161618;
2082
+ --avatar-group-overlap-tight-sm: 2rem;
2083
+ --avatar-group-overlap-tight-2xs: 1.25rem;
2084
+ --avatar-group-overlap-tight-3xs: 1rem;
2085
+ --avatar-group-overlap-compact-sm: 1.5rem;
2086
+ --avatar-group-overlap-compact-2xs: 1rem;
2087
+ --avatar-group-overlap-compact-3xs: 0.75rem;
2088
+ --avatar-group-overlap-spacious-sm: 1rem;
2089
+ --avatar-group-overlap-spacious-2xs: 0.75rem;
2090
+ --avatar-group-overlap-spacious-3xs: 0.5rem;
2048
2091
  --toast-color-info-background: #e6e6ea;
2049
2092
  --toast-color-info-foreground: #161618;
2050
2093
  --toast-color-info-accent: #0d2847;
@@ -3798,88 +3841,6 @@ body {
3798
3841
  }
3799
3842
 
3800
3843
 
3801
- /* TextLink */
3802
- /* TextLink Component Styles - Using Muka Design Tokens */
3803
-
3804
- .muka-text-link {
3805
- display: inline;
3806
- cursor: pointer;
3807
- text-decoration: underline;
3808
- /* Nudge the rule clear of descenders; the Figma underline sits off baseline. */
3809
- text-underline-offset: 0.2em;
3810
- text-decoration-thickness: from-font;
3811
- /* Rounds the focus ring's corners; the link itself has no visible box. */
3812
- border-radius: var(--border-radius-sm);
3813
- transition: color var(--motion-duration-micro, 0.15s) var(--motion-easing-enter, ease);
3814
- }
3815
-
3816
- /* ─── Sizes ───────────────────────────────────────────────
3817
- Mirrors the body text scale so a link matches the copy it sits in. */
3818
- .muka-text-link--sm {
3819
- font-family: var(--text-body-sm-regular-fontFamily);
3820
- font-weight: var(--text-body-sm-regular-fontWeight);
3821
- font-size: var(--text-body-sm-regular-fontSize);
3822
- line-height: var(--text-body-sm-regular-lineHeight);
3823
- }
3824
-
3825
- .muka-text-link--base {
3826
- font-family: var(--text-body-base-regular-fontFamily);
3827
- font-weight: var(--text-body-base-regular-fontWeight);
3828
- font-size: var(--text-body-base-regular-fontSize);
3829
- line-height: var(--text-body-base-regular-lineHeight);
3830
- }
3831
-
3832
- .muka-text-link--lg {
3833
- font-family: var(--text-body-lg-regular-fontFamily);
3834
- font-weight: var(--text-body-lg-regular-fontWeight);
3835
- font-size: var(--text-body-lg-regular-fontSize);
3836
- line-height: var(--text-body-lg-regular-lineHeight);
3837
- }
3838
-
3839
- /* ─── Variant: default (accent) ───────────────────────────
3840
- Visited repeats the default colour on purpose: the design treats visited and
3841
- default the same, and pinning it stops the browser's purple from showing. */
3842
- .muka-text-link--default,
3843
- .muka-text-link--default:visited {
3844
- color: var(--color-text-action-default);
3845
- }
3846
-
3847
- .muka-text-link--default:hover,
3848
- .muka-text-link--default:focus-visible {
3849
- color: var(--color-text-action-hover);
3850
- }
3851
-
3852
- .muka-text-link--default:active {
3853
- color: var(--color-text-action-pressed);
3854
- }
3855
-
3856
- /* ─── Variant: subtle (neutral) ───────────────────────────
3857
- Hover, focus and pressed all darken to the default text colour. */
3858
- .muka-text-link--subtle,
3859
- .muka-text-link--subtle:visited {
3860
- color: var(--color-text-subtle-default);
3861
- }
3862
-
3863
- .muka-text-link--subtle:hover,
3864
- .muka-text-link--subtle:focus-visible,
3865
- .muka-text-link--subtle:active {
3866
- color: var(--color-text-default-default);
3867
- }
3868
-
3869
- /* ─── Focus ───────────────────────────────────────────────
3870
- Same ring as every other focusable Muka component. */
3871
- .muka-text-link:focus-visible {
3872
- outline: 2px solid var(--color-border-focus);
3873
- outline-offset: 2px;
3874
- }
3875
-
3876
- @media (prefers-reduced-motion: reduce) {
3877
- .muka-text-link {
3878
- transition: none;
3879
- }
3880
- }
3881
-
3882
-
3883
3844
  /* Textarea */
3884
3845
  /* Textarea Component Styles - Using Muka Design Tokens */
3885
3846
 
@@ -4044,6 +4005,88 @@ body {
4044
4005
  }
4045
4006
 
4046
4007
 
4008
+ /* TextLink */
4009
+ /* TextLink Component Styles - Using Muka Design Tokens */
4010
+
4011
+ .muka-text-link {
4012
+ display: inline;
4013
+ cursor: pointer;
4014
+ text-decoration: underline;
4015
+ /* Nudge the rule clear of descenders; the Figma underline sits off baseline. */
4016
+ text-underline-offset: 0.2em;
4017
+ text-decoration-thickness: from-font;
4018
+ /* Rounds the focus ring's corners; the link itself has no visible box. */
4019
+ border-radius: var(--border-radius-sm);
4020
+ transition: color var(--motion-duration-micro, 0.15s) var(--motion-easing-enter, ease);
4021
+ }
4022
+
4023
+ /* ─── Sizes ───────────────────────────────────────────────
4024
+ Mirrors the body text scale so a link matches the copy it sits in. */
4025
+ .muka-text-link--sm {
4026
+ font-family: var(--text-body-sm-regular-fontFamily);
4027
+ font-weight: var(--text-body-sm-regular-fontWeight);
4028
+ font-size: var(--text-body-sm-regular-fontSize);
4029
+ line-height: var(--text-body-sm-regular-lineHeight);
4030
+ }
4031
+
4032
+ .muka-text-link--base {
4033
+ font-family: var(--text-body-base-regular-fontFamily);
4034
+ font-weight: var(--text-body-base-regular-fontWeight);
4035
+ font-size: var(--text-body-base-regular-fontSize);
4036
+ line-height: var(--text-body-base-regular-lineHeight);
4037
+ }
4038
+
4039
+ .muka-text-link--lg {
4040
+ font-family: var(--text-body-lg-regular-fontFamily);
4041
+ font-weight: var(--text-body-lg-regular-fontWeight);
4042
+ font-size: var(--text-body-lg-regular-fontSize);
4043
+ line-height: var(--text-body-lg-regular-lineHeight);
4044
+ }
4045
+
4046
+ /* ─── Variant: default (accent) ───────────────────────────
4047
+ Visited repeats the default colour on purpose: the design treats visited and
4048
+ default the same, and pinning it stops the browser's purple from showing. */
4049
+ .muka-text-link--default,
4050
+ .muka-text-link--default:visited {
4051
+ color: var(--color-text-action-default);
4052
+ }
4053
+
4054
+ .muka-text-link--default:hover,
4055
+ .muka-text-link--default:focus-visible {
4056
+ color: var(--color-text-action-hover);
4057
+ }
4058
+
4059
+ .muka-text-link--default:active {
4060
+ color: var(--color-text-action-pressed);
4061
+ }
4062
+
4063
+ /* ─── Variant: subtle (neutral) ───────────────────────────
4064
+ Hover, focus and pressed all darken to the default text colour. */
4065
+ .muka-text-link--subtle,
4066
+ .muka-text-link--subtle:visited {
4067
+ color: var(--color-text-subtle-default);
4068
+ }
4069
+
4070
+ .muka-text-link--subtle:hover,
4071
+ .muka-text-link--subtle:focus-visible,
4072
+ .muka-text-link--subtle:active {
4073
+ color: var(--color-text-default-default);
4074
+ }
4075
+
4076
+ /* ─── Focus ───────────────────────────────────────────────
4077
+ Same ring as every other focusable Muka component. */
4078
+ .muka-text-link:focus-visible {
4079
+ outline: 2px solid var(--color-border-focus);
4080
+ outline-offset: 2px;
4081
+ }
4082
+
4083
+ @media (prefers-reduced-motion: reduce) {
4084
+ .muka-text-link {
4085
+ transition: none;
4086
+ }
4087
+ }
4088
+
4089
+
4047
4090
  /* Tabs */
4048
4091
  /* Tabs Component Styles - Clean underline style tabs matching Figma */
4049
4092
 
@@ -4075,12 +4118,17 @@ body {
4075
4118
  border-bottom: 1px solid var(--tabs-trigger-color-default-border);
4076
4119
  }
4077
4120
 
4121
+ /* Padding: inset the tabs; the divider (border) still spans the full width */
4122
+ .muka-tabs--padding-default .muka-tabs__list {
4123
+ padding-inline: var(--tabs-list-padding-x);
4124
+ }
4125
+
4078
4126
  /* Tab Trigger — clean underline style */
4079
4127
  .muka-tabs__trigger {
4080
4128
  display: inline-flex;
4081
4129
  align-items: center;
4082
4130
  justify-content: center;
4083
- gap: var(--spacing-2, 8px);
4131
+ gap: var(--spacing-1);
4084
4132
  background: transparent;
4085
4133
  border: none;
4086
4134
  cursor: pointer;
@@ -4093,8 +4141,8 @@ body {
4093
4141
  color: var(--tabs-trigger-color-default-foreground);
4094
4142
 
4095
4143
  /* Default MD size values */
4096
- height: 48px;
4097
- padding: 0 var(--spacing-3, 12px);
4144
+ min-height: var(--tabs-trigger-min-height-md);
4145
+ padding: var(--spacing-3);
4098
4146
  font-family: var(--text-label-md-regular-fontFamily);
4099
4147
  font-weight: var(--text-label-md-regular-fontWeight);
4100
4148
  font-size: var(--text-label-md-regular-fontSize);
@@ -4103,8 +4151,8 @@ body {
4103
4151
 
4104
4152
  /* Size Variants */
4105
4153
  .muka-tabs--size-sm .muka-tabs__trigger {
4106
- height: 36px;
4107
- padding: 0 var(--spacing-2, 8px);
4154
+ min-height: var(--tabs-trigger-min-height-sm);
4155
+ padding: 0 var(--spacing-2);
4108
4156
  font-family: var(--text-label-sm-regular-fontFamily);
4109
4157
  font-weight: var(--text-label-sm-regular-fontWeight);
4110
4158
  font-size: var(--text-label-sm-regular-fontSize);
@@ -4112,8 +4160,8 @@ body {
4112
4160
  }
4113
4161
 
4114
4162
  .muka-tabs--size-lg .muka-tabs__trigger {
4115
- height: 56px;
4116
- padding: 0 var(--spacing-4, 16px);
4163
+ min-height: var(--tabs-trigger-min-height-lg);
4164
+ padding: var(--spacing-4);
4117
4165
  font-family: var(--text-label-lg-regular-fontFamily);
4118
4166
  font-weight: var(--text-label-lg-regular-fontWeight);
4119
4167
  font-size: var(--text-label-lg-regular-fontSize);
@@ -4137,8 +4185,8 @@ body {
4137
4185
  bottom: -1px; /* Overlap the 1px border */
4138
4186
  left: 0;
4139
4187
  right: 0;
4140
- height: 3px;
4141
- background-color: var(--tabs-trigger-color-current-foreground);
4188
+ height: var(--tabs-indicator-height-md);
4189
+ background-color: var(--tabs-indicator-color);
4142
4190
  border-bottom-left-radius: 1px;
4143
4191
  border-bottom-right-radius: 1px;
4144
4192
  border-top-left-radius: 3px;
@@ -4146,6 +4194,13 @@ body {
4146
4194
  z-index: 3;
4147
4195
  }
4148
4196
 
4197
+ .muka-tabs--size-sm .muka-tabs__trigger--current::after {
4198
+ height: var(--tabs-indicator-height-sm);
4199
+ }
4200
+ .muka-tabs--size-lg .muka-tabs__trigger--current::after {
4201
+ height: var(--tabs-indicator-height-lg);
4202
+ }
4203
+
4149
4204
  .muka-tabs__trigger--disabled {
4150
4205
  color: var(--tabs-trigger-color-disabled-foreground);
4151
4206
  cursor: not-allowed;
@@ -4156,18 +4211,29 @@ body {
4156
4211
  outline-offset: -2px;
4157
4212
  }
4158
4213
 
4159
- /* Icons */
4160
- .muka-tabs__icon {
4214
+ /* Label: Figma pads the label 8px either side, so with the 4px gap a leading
4215
+ item sits 12px from the text */
4216
+ .muka-tabs__label {
4217
+ padding: 0 var(--spacing-2);
4218
+ }
4219
+
4220
+ /* Leading item: icon, avatar, avatar group or data pie chart */
4221
+ .muka-tabs__leading {
4161
4222
  display: flex;
4162
4223
  align-items: center;
4163
4224
  justify-content: center;
4225
+ flex-shrink: 0;
4164
4226
  }
4165
4227
  .muka-tabs__trigger .muka-icon {
4166
4228
  color: inherit;
4167
4229
  }
4168
- .muka-tabs--size-sm .muka-tabs__icon svg { width: 16px; height: 16px; }
4169
- .muka-tabs--size-md .muka-tabs__icon svg { width: 20px; height: 20px; }
4170
- .muka-tabs--size-lg .muka-tabs__icon svg { width: 24px; height: 24px; }
4230
+ /* Icon sizes only: avatars and pie charts are sized through their size prop */
4231
+ .muka-tabs--size-sm .muka-tabs__leading > svg,
4232
+ .muka-tabs--size-sm .muka-tabs__leading > .muka-icon svg { width: 16px; height: 16px; }
4233
+ .muka-tabs--size-md .muka-tabs__leading > svg,
4234
+ .muka-tabs--size-md .muka-tabs__leading > .muka-icon svg { width: 20px; height: 20px; }
4235
+ .muka-tabs--size-lg .muka-tabs__leading > svg,
4236
+ .muka-tabs--size-lg .muka-tabs__leading > .muka-icon svg { width: 24px; height: 24px; }
4171
4237
 
4172
4238
  /* Responsive Scroll behavior on small screens */
4173
4239
  @media (max-width: 768px) {
@@ -10754,6 +10820,38 @@ li.muka-listitem {
10754
10820
  }
10755
10821
 
10756
10822
 
10823
+ /* DatePicker */
10824
+ /* DatePicker — compact native date field. */
10825
+ /* Field/label/helper styling is inherited from ../Input/Input.css. */
10826
+
10827
+ /* Adopt the field typography on the native date input. */
10828
+ .muka-datepicker__field .muka-input__native {
10829
+ font-family: var(--text-input-md-fontFamily);
10830
+ font-size: var(--text-input-md-fontSize);
10831
+ line-height: var(--text-input-md-lineHeight);
10832
+ }
10833
+
10834
+ .muka-datepicker__field--sm .muka-input__native {
10835
+ font-family: var(--text-input-sm-fontFamily);
10836
+ font-size: var(--text-input-sm-fontSize);
10837
+ line-height: var(--text-input-sm-lineHeight);
10838
+ }
10839
+
10840
+ /* Tint the browser calendar indicator to match the field foreground. */
10841
+ .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator {
10842
+ cursor: pointer;
10843
+ opacity: 0.6;
10844
+ }
10845
+
10846
+ .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator:hover {
10847
+ opacity: 1;
10848
+ }
10849
+
10850
+ .muka-datepicker__field .muka-input__native:disabled {
10851
+ cursor: not-allowed;
10852
+ }
10853
+
10854
+
10757
10855
  /* Dialog */
10758
10856
  /* Dialog Component Styles */
10759
10857
 
@@ -11022,38 +11120,6 @@ li.muka-listitem {
11022
11120
  }
11023
11121
 
11024
11122
 
11025
- /* DatePicker */
11026
- /* DatePicker — compact native date field. */
11027
- /* Field/label/helper styling is inherited from ../Input/Input.css. */
11028
-
11029
- /* Adopt the field typography on the native date input. */
11030
- .muka-datepicker__field .muka-input__native {
11031
- font-family: var(--text-input-md-fontFamily);
11032
- font-size: var(--text-input-md-fontSize);
11033
- line-height: var(--text-input-md-lineHeight);
11034
- }
11035
-
11036
- .muka-datepicker__field--sm .muka-input__native {
11037
- font-family: var(--text-input-sm-fontFamily);
11038
- font-size: var(--text-input-sm-fontSize);
11039
- line-height: var(--text-input-sm-lineHeight);
11040
- }
11041
-
11042
- /* Tint the browser calendar indicator to match the field foreground. */
11043
- .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator {
11044
- cursor: pointer;
11045
- opacity: 0.6;
11046
- }
11047
-
11048
- .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator:hover {
11049
- opacity: 1;
11050
- }
11051
-
11052
- .muka-datepicker__field .muka-input__native:disabled {
11053
- cursor: not-allowed;
11054
- }
11055
-
11056
-
11057
11123
  /* DataTable */
11058
11124
  /* DataTable Component Styles - Using Muka Design Tokens */
11059
11125
 
@@ -12371,17 +12437,139 @@ li.muka-listitem {
12371
12437
  }
12372
12438
 
12373
12439
 
12374
- /* Checkbox */
12375
- /* Checkbox Component Styles - Using Muka Design Tokens */
12440
+ /* ChatPhotoGrid */
12441
+ /* ChatPhotoGrid Component Styles */
12376
12442
 
12377
- /* Wrapper - clickable label container */
12378
- .muka-checkbox {
12379
- display: inline-flex;
12380
- align-items: center;
12381
- gap: var(--spacing-4);
12382
- cursor: pointer;
12383
- user-select: none;
12384
- }
12443
+ /*
12444
+ * The grid clips to its own radius and the tiles stay square, so only the four
12445
+ * outer corners round — matching the Figma "Wrapper" frame (5225:1394).
12446
+ */
12447
+ .muka-chat-photo-grid {
12448
+ display: grid;
12449
+ gap: var(--chatphotogrid-gap);
12450
+ width: 100%;
12451
+ min-width: 0;
12452
+ overflow: hidden;
12453
+ border-radius: var(--chatphotogrid-radius);
12454
+ }
12455
+
12456
+ /* ─── Tiles ────────────────────────────────────────────── */
12457
+
12458
+ .muka-chat-photo-grid__tile {
12459
+ position: relative;
12460
+ display: block;
12461
+ overflow: hidden;
12462
+ min-width: 0;
12463
+ padding: 0;
12464
+ margin: 0;
12465
+ border: none;
12466
+ background-color: var(--chatphotogrid-color-placeholder);
12467
+ aspect-ratio: 1 / 1;
12468
+ }
12469
+
12470
+ button.muka-chat-photo-grid__tile {
12471
+ cursor: pointer;
12472
+ appearance: none;
12473
+ }
12474
+
12475
+ button.muka-chat-photo-grid__tile:focus-visible {
12476
+ outline: var(--border-width-bold) solid var(--color-border-focus);
12477
+ /* Inset, so the grid's overflow clip cannot cut the ring off on corner tiles */
12478
+ outline-offset: calc(-1 * var(--border-width-bold));
12479
+ }
12480
+
12481
+ .muka-chat-photo-grid__image {
12482
+ display: block;
12483
+ width: 100%;
12484
+ height: 100%;
12485
+ object-fit: cover;
12486
+ }
12487
+
12488
+ /* ─── Overflow tile ────────────────────────────────────── */
12489
+
12490
+ .muka-chat-photo-grid__overflow {
12491
+ position: absolute;
12492
+ inset: 0;
12493
+ display: flex;
12494
+ align-items: center;
12495
+ justify-content: center;
12496
+ background-color: var(--chatphotogrid-color-overflow-background);
12497
+ color: var(--chatphotogrid-color-overflow-foreground);
12498
+ font-family: var(--text-body-2xl-regular-fontFamily);
12499
+ font-weight: var(--text-body-2xl-regular-fontWeight);
12500
+ font-size: var(--text-body-2xl-regular-fontSize);
12501
+ line-height: var(--text-body-2xl-regular-lineHeight);
12502
+ }
12503
+
12504
+ /* ─── Layouts ──────────────────────────────────────────── */
12505
+
12506
+ .muka-chat-photo-grid--1 {
12507
+ grid-template-columns: 1fr;
12508
+ }
12509
+
12510
+ .muka-chat-photo-grid--landscape .muka-chat-photo-grid__tile {
12511
+ aspect-ratio: 4 / 3;
12512
+ }
12513
+
12514
+ .muka-chat-photo-grid--portrait .muka-chat-photo-grid__tile {
12515
+ aspect-ratio: 3 / 4;
12516
+ }
12517
+
12518
+ .muka-chat-photo-grid--2 {
12519
+ grid-template-columns: repeat(2, 1fr);
12520
+ }
12521
+
12522
+ .muka-chat-photo-grid--3 {
12523
+ grid-template-columns: repeat(3, 1fr);
12524
+ }
12525
+
12526
+ .muka-chat-photo-grid--4 {
12527
+ grid-template-columns: repeat(2, 1fr);
12528
+ }
12529
+
12530
+ /* 5 photos: a 2-up row above a 3-up row, on a shared 6-column track */
12531
+ .muka-chat-photo-grid--5 {
12532
+ grid-template-columns: repeat(6, 1fr);
12533
+ }
12534
+
12535
+ .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(-n + 2) {
12536
+ grid-column: span 3;
12537
+ }
12538
+
12539
+ .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(n + 3) {
12540
+ grid-column: span 2;
12541
+ }
12542
+
12543
+ .muka-chat-photo-grid--6,
12544
+ .muka-chat-photo-grid--overflow {
12545
+ grid-template-columns: repeat(3, 1fr);
12546
+ }
12547
+
12548
+ /* ─── Print ────────────────────────────────────────────── */
12549
+
12550
+ @media print {
12551
+ .muka-chat-photo-grid {
12552
+ break-inside: avoid;
12553
+ }
12554
+
12555
+ .muka-chat-photo-grid__image {
12556
+ print-color-adjust: exact;
12557
+ -webkit-print-color-adjust: exact;
12558
+ }
12559
+ }
12560
+
12561
+
12562
+ /* Checkbox */
12563
+ /* Checkbox Component Styles - Using Muka Design Tokens */
12564
+
12565
+ /* Wrapper - clickable label container */
12566
+ .muka-checkbox {
12567
+ display: inline-flex;
12568
+ align-items: center;
12569
+ gap: var(--spacing-4);
12570
+ cursor: pointer;
12571
+ user-select: none;
12572
+ }
12385
12573
 
12386
12574
  .muka-checkbox--disabled {
12387
12575
  cursor: not-allowed;
@@ -12538,128 +12726,6 @@ li.muka-listitem {
12538
12726
  }
12539
12727
 
12540
12728
 
12541
- /* ChatPhotoGrid */
12542
- /* ChatPhotoGrid Component Styles */
12543
-
12544
- /*
12545
- * The grid clips to its own radius and the tiles stay square, so only the four
12546
- * outer corners round — matching the Figma "Wrapper" frame (5225:1394).
12547
- */
12548
- .muka-chat-photo-grid {
12549
- display: grid;
12550
- gap: var(--chatphotogrid-gap);
12551
- width: 100%;
12552
- min-width: 0;
12553
- overflow: hidden;
12554
- border-radius: var(--chatphotogrid-radius);
12555
- }
12556
-
12557
- /* ─── Tiles ────────────────────────────────────────────── */
12558
-
12559
- .muka-chat-photo-grid__tile {
12560
- position: relative;
12561
- display: block;
12562
- overflow: hidden;
12563
- min-width: 0;
12564
- padding: 0;
12565
- margin: 0;
12566
- border: none;
12567
- background-color: var(--chatphotogrid-color-placeholder);
12568
- aspect-ratio: 1 / 1;
12569
- }
12570
-
12571
- button.muka-chat-photo-grid__tile {
12572
- cursor: pointer;
12573
- appearance: none;
12574
- }
12575
-
12576
- button.muka-chat-photo-grid__tile:focus-visible {
12577
- outline: var(--border-width-bold) solid var(--color-border-focus);
12578
- /* Inset, so the grid's overflow clip cannot cut the ring off on corner tiles */
12579
- outline-offset: calc(-1 * var(--border-width-bold));
12580
- }
12581
-
12582
- .muka-chat-photo-grid__image {
12583
- display: block;
12584
- width: 100%;
12585
- height: 100%;
12586
- object-fit: cover;
12587
- }
12588
-
12589
- /* ─── Overflow tile ────────────────────────────────────── */
12590
-
12591
- .muka-chat-photo-grid__overflow {
12592
- position: absolute;
12593
- inset: 0;
12594
- display: flex;
12595
- align-items: center;
12596
- justify-content: center;
12597
- background-color: var(--chatphotogrid-color-overflow-background);
12598
- color: var(--chatphotogrid-color-overflow-foreground);
12599
- font-family: var(--text-body-2xl-regular-fontFamily);
12600
- font-weight: var(--text-body-2xl-regular-fontWeight);
12601
- font-size: var(--text-body-2xl-regular-fontSize);
12602
- line-height: var(--text-body-2xl-regular-lineHeight);
12603
- }
12604
-
12605
- /* ─── Layouts ──────────────────────────────────────────── */
12606
-
12607
- .muka-chat-photo-grid--1 {
12608
- grid-template-columns: 1fr;
12609
- }
12610
-
12611
- .muka-chat-photo-grid--landscape .muka-chat-photo-grid__tile {
12612
- aspect-ratio: 4 / 3;
12613
- }
12614
-
12615
- .muka-chat-photo-grid--portrait .muka-chat-photo-grid__tile {
12616
- aspect-ratio: 3 / 4;
12617
- }
12618
-
12619
- .muka-chat-photo-grid--2 {
12620
- grid-template-columns: repeat(2, 1fr);
12621
- }
12622
-
12623
- .muka-chat-photo-grid--3 {
12624
- grid-template-columns: repeat(3, 1fr);
12625
- }
12626
-
12627
- .muka-chat-photo-grid--4 {
12628
- grid-template-columns: repeat(2, 1fr);
12629
- }
12630
-
12631
- /* 5 photos: a 2-up row above a 3-up row, on a shared 6-column track */
12632
- .muka-chat-photo-grid--5 {
12633
- grid-template-columns: repeat(6, 1fr);
12634
- }
12635
-
12636
- .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(-n + 2) {
12637
- grid-column: span 3;
12638
- }
12639
-
12640
- .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(n + 3) {
12641
- grid-column: span 2;
12642
- }
12643
-
12644
- .muka-chat-photo-grid--6,
12645
- .muka-chat-photo-grid--overflow {
12646
- grid-template-columns: repeat(3, 1fr);
12647
- }
12648
-
12649
- /* ─── Print ────────────────────────────────────────────── */
12650
-
12651
- @media print {
12652
- .muka-chat-photo-grid {
12653
- break-inside: avoid;
12654
- }
12655
-
12656
- .muka-chat-photo-grid__image {
12657
- print-color-adjust: exact;
12658
- -webkit-print-color-adjust: exact;
12659
- }
12660
- }
12661
-
12662
-
12663
12729
  /* ChatMessageStack */
12664
12730
  /* ChatMessageStack Component Styles */
12665
12731
 
@@ -13602,10 +13668,43 @@ button.muka-chat-photo-grid__tile:focus-visible {
13602
13668
  opacity: 1; /* Remove opacity since we have proper disabled tokens */
13603
13669
  }
13604
13670
 
13605
- /* Secondary variant - supporting actions, no border, only bottom inner shadow */
13606
- .muka-button--secondary {
13607
- background-color: var(--button-color-secondary-background-default);
13608
- color: var(--button-color-secondary-foreground-default);
13671
+ /* Destructive variant - primary's structure on the solid error fill, for
13672
+ irreversible actions. Hover and pressed step away from the label color, so
13673
+ contrast never drops (darker in light themes, lighter in dark themes).
13674
+ Disabled is neutral grey rather than primary's brand-tinted fill. */
13675
+ .muka-button--destructive {
13676
+ background-color: var(--button-color-destructive-background-default);
13677
+ color: var(--button-color-destructive-foreground-default);
13678
+ box-shadow: var(--button-color-destructive-shadow-default);
13679
+ }
13680
+
13681
+ .muka-button--destructive:hover:not(:disabled) {
13682
+ background-color: var(--button-color-destructive-background-hover);
13683
+ color: var(--button-color-destructive-foreground-hover);
13684
+ box-shadow: var(--button-color-destructive-shadow-hover);
13685
+ }
13686
+
13687
+ .muka-button--destructive:active:not(:disabled),
13688
+ .muka-button--destructive.muka-button--pressed:not(:disabled),
13689
+ .muka-button--destructive[data-state="open"]:not(:disabled),
13690
+ .muka-button--destructive[aria-pressed="true"]:not(:disabled) {
13691
+ background-color: var(--button-color-destructive-background-pressed);
13692
+ color: var(--button-color-destructive-foreground-pressed);
13693
+ box-shadow: var(--button-color-destructive-shadow-pressed);
13694
+ }
13695
+
13696
+ .muka-button--destructive:disabled {
13697
+ background-color: var(--button-color-destructive-background-disabled);
13698
+ color: var(--button-color-destructive-foreground-disabled);
13699
+ box-shadow: var(--button-color-destructive-shadow-disabled);
13700
+ cursor: not-allowed;
13701
+ opacity: 1;
13702
+ }
13703
+
13704
+ /* Secondary variant - supporting actions, no border, only bottom inner shadow */
13705
+ .muka-button--secondary {
13706
+ background-color: var(--button-color-secondary-background-default);
13707
+ color: var(--button-color-secondary-foreground-default);
13609
13708
  box-shadow: var(--button-color-secondary-shadow-default);
13610
13709
  }
13611
13710
 
@@ -13912,6 +14011,114 @@ button.muka-chat-photo-grid__tile:focus-visible {
13912
14011
  }
13913
14012
 
13914
14013
 
14014
+ /* BadgeNumber */
14015
+ /* BadgeNumber Component Styles - Using Muka Design Tokens */
14016
+
14017
+ .muka-badge-number {
14018
+ display: inline-flex;
14019
+ align-items: center;
14020
+ justify-content: center;
14021
+ border-radius: var(--border-radius-full);
14022
+ white-space: nowrap;
14023
+ user-select: none;
14024
+ box-sizing: border-box;
14025
+ }
14026
+
14027
+ /*
14028
+ * Sizes — fixed height, matching min-width (so a single digit renders as a
14029
+ * circle), horizontal padding, and bold label typography. Vertical centering
14030
+ * is handled by the fixed height + align-items: center.
14031
+ */
14032
+ .muka-badge-number--2xs {
14033
+ height: var(--badge-number-size-2xs);
14034
+ min-width: var(--badge-number-size-2xs);
14035
+ padding: 0 var(--badge-number-padding-2xs);
14036
+ font-family: var(--text-label-xs-bold-fontFamily);
14037
+ font-weight: var(--text-label-xs-bold-fontWeight);
14038
+ font-size: var(--text-label-xs-bold-fontSize);
14039
+ line-height: var(--text-label-xs-bold-lineHeight);
14040
+ }
14041
+
14042
+ .muka-badge-number--xs {
14043
+ height: var(--badge-number-size-xs);
14044
+ min-width: var(--badge-number-size-xs);
14045
+ padding: 0 var(--badge-number-padding-xs);
14046
+ font-family: var(--text-label-sm-bold-fontFamily);
14047
+ font-weight: var(--text-label-sm-bold-fontWeight);
14048
+ font-size: var(--text-label-sm-bold-fontSize);
14049
+ line-height: var(--text-label-sm-bold-lineHeight);
14050
+ }
14051
+
14052
+ .muka-badge-number--sm {
14053
+ height: var(--badge-number-size-sm);
14054
+ min-width: var(--badge-number-size-sm);
14055
+ padding: 0 var(--badge-number-padding-sm);
14056
+ font-family: var(--text-label-md-bold-fontFamily);
14057
+ font-weight: var(--text-label-md-bold-fontWeight);
14058
+ font-size: var(--text-label-md-bold-fontSize);
14059
+ line-height: var(--text-label-md-bold-lineHeight);
14060
+ }
14061
+
14062
+ .muka-badge-number--md {
14063
+ height: var(--badge-number-size-md);
14064
+ min-width: var(--badge-number-size-md);
14065
+ padding: 0 var(--badge-number-padding-md);
14066
+ font-family: var(--text-label-lg-bold-fontFamily);
14067
+ font-weight: var(--text-label-lg-bold-fontWeight);
14068
+ font-size: var(--text-label-lg-bold-fontSize);
14069
+ line-height: var(--text-label-lg-bold-lineHeight);
14070
+ }
14071
+
14072
+ .muka-badge-number--lg {
14073
+ height: var(--badge-number-size-lg);
14074
+ min-width: var(--badge-number-size-lg);
14075
+ padding: 0 var(--badge-number-padding-lg);
14076
+ font-family: var(--text-label-2xl-bold-fontFamily);
14077
+ font-weight: var(--text-label-2xl-bold-fontWeight);
14078
+ font-size: var(--text-label-2xl-bold-fontSize);
14079
+ line-height: var(--text-label-2xl-bold-lineHeight);
14080
+ }
14081
+
14082
+ .muka-badge-number__label {
14083
+ /*
14084
+ * The badge sets a tight line-height for compact sizing, which would clip
14085
+ * glyph descenders; give the label a roomier line-height. Vertical centering
14086
+ * is unaffected because the badge height is fixed and content is centered.
14087
+ */
14088
+ line-height: normal;
14089
+ }
14090
+
14091
+ /* Neutral variant */
14092
+ .muka-badge-number--neutral {
14093
+ background-color: var(--color-surface-level1);
14094
+ color: var(--color-text-default-default);
14095
+ }
14096
+
14097
+ /* Info variant */
14098
+ .muka-badge-number--info {
14099
+ background-color: var(--color-state-info-contrast);
14100
+ color: var(--color-text-default-inverse);
14101
+ }
14102
+
14103
+ /* Success variant */
14104
+ .muka-badge-number--success {
14105
+ background-color: var(--color-state-success-contrast);
14106
+ color: var(--color-text-default-inverse);
14107
+ }
14108
+
14109
+ /* Warning variant */
14110
+ .muka-badge-number--warning {
14111
+ background-color: var(--color-state-warning-contrast);
14112
+ color: var(--color-text-default-inverse);
14113
+ }
14114
+
14115
+ /* Error variant */
14116
+ .muka-badge-number--error {
14117
+ background-color: var(--color-state-error-contrast);
14118
+ color: var(--color-text-default-inverse);
14119
+ }
14120
+
14121
+
13915
14122
  /* BottomBar */
13916
14123
  /* BottomBar Component Styles */
13917
14124
 
@@ -14228,114 +14435,6 @@ button.muka-chat-photo-grid__tile:focus-visible {
14228
14435
  }
14229
14436
 
14230
14437
 
14231
- /* BadgeNumber */
14232
- /* BadgeNumber Component Styles - Using Muka Design Tokens */
14233
-
14234
- .muka-badge-number {
14235
- display: inline-flex;
14236
- align-items: center;
14237
- justify-content: center;
14238
- border-radius: var(--border-radius-full);
14239
- white-space: nowrap;
14240
- user-select: none;
14241
- box-sizing: border-box;
14242
- }
14243
-
14244
- /*
14245
- * Sizes — fixed height, matching min-width (so a single digit renders as a
14246
- * circle), horizontal padding, and bold label typography. Vertical centering
14247
- * is handled by the fixed height + align-items: center.
14248
- */
14249
- .muka-badge-number--2xs {
14250
- height: var(--badge-number-size-2xs);
14251
- min-width: var(--badge-number-size-2xs);
14252
- padding: 0 var(--badge-number-padding-2xs);
14253
- font-family: var(--text-label-xs-bold-fontFamily);
14254
- font-weight: var(--text-label-xs-bold-fontWeight);
14255
- font-size: var(--text-label-xs-bold-fontSize);
14256
- line-height: var(--text-label-xs-bold-lineHeight);
14257
- }
14258
-
14259
- .muka-badge-number--xs {
14260
- height: var(--badge-number-size-xs);
14261
- min-width: var(--badge-number-size-xs);
14262
- padding: 0 var(--badge-number-padding-xs);
14263
- font-family: var(--text-label-sm-bold-fontFamily);
14264
- font-weight: var(--text-label-sm-bold-fontWeight);
14265
- font-size: var(--text-label-sm-bold-fontSize);
14266
- line-height: var(--text-label-sm-bold-lineHeight);
14267
- }
14268
-
14269
- .muka-badge-number--sm {
14270
- height: var(--badge-number-size-sm);
14271
- min-width: var(--badge-number-size-sm);
14272
- padding: 0 var(--badge-number-padding-sm);
14273
- font-family: var(--text-label-md-bold-fontFamily);
14274
- font-weight: var(--text-label-md-bold-fontWeight);
14275
- font-size: var(--text-label-md-bold-fontSize);
14276
- line-height: var(--text-label-md-bold-lineHeight);
14277
- }
14278
-
14279
- .muka-badge-number--md {
14280
- height: var(--badge-number-size-md);
14281
- min-width: var(--badge-number-size-md);
14282
- padding: 0 var(--badge-number-padding-md);
14283
- font-family: var(--text-label-lg-bold-fontFamily);
14284
- font-weight: var(--text-label-lg-bold-fontWeight);
14285
- font-size: var(--text-label-lg-bold-fontSize);
14286
- line-height: var(--text-label-lg-bold-lineHeight);
14287
- }
14288
-
14289
- .muka-badge-number--lg {
14290
- height: var(--badge-number-size-lg);
14291
- min-width: var(--badge-number-size-lg);
14292
- padding: 0 var(--badge-number-padding-lg);
14293
- font-family: var(--text-label-2xl-bold-fontFamily);
14294
- font-weight: var(--text-label-2xl-bold-fontWeight);
14295
- font-size: var(--text-label-2xl-bold-fontSize);
14296
- line-height: var(--text-label-2xl-bold-lineHeight);
14297
- }
14298
-
14299
- .muka-badge-number__label {
14300
- /*
14301
- * The badge sets a tight line-height for compact sizing, which would clip
14302
- * glyph descenders; give the label a roomier line-height. Vertical centering
14303
- * is unaffected because the badge height is fixed and content is centered.
14304
- */
14305
- line-height: normal;
14306
- }
14307
-
14308
- /* Neutral variant */
14309
- .muka-badge-number--neutral {
14310
- background-color: var(--color-surface-level1);
14311
- color: var(--color-text-default-default);
14312
- }
14313
-
14314
- /* Info variant */
14315
- .muka-badge-number--info {
14316
- background-color: var(--color-state-info-contrast);
14317
- color: var(--color-text-default-inverse);
14318
- }
14319
-
14320
- /* Success variant */
14321
- .muka-badge-number--success {
14322
- background-color: var(--color-state-success-contrast);
14323
- color: var(--color-text-default-inverse);
14324
- }
14325
-
14326
- /* Warning variant */
14327
- .muka-badge-number--warning {
14328
- background-color: var(--color-state-warning-contrast);
14329
- color: var(--color-text-default-inverse);
14330
- }
14331
-
14332
- /* Error variant */
14333
- .muka-badge-number--error {
14334
- background-color: var(--color-state-error-contrast);
14335
- color: var(--color-text-default-inverse);
14336
- }
14337
-
14338
-
14339
14438
  /* Badge */
14340
14439
  /* Badge Component Styles - Using Muka Design Tokens */
14341
14440
 
@@ -14535,12 +14634,29 @@ button.muka-chat-photo-grid__tile:focus-visible {
14535
14634
  vertical-align: middle;
14536
14635
  background-color: var(--avatar-color-background-default);
14537
14636
  color: var(--avatar-color-foreground-default);
14538
- border: var(--avatar-border-width) solid var(--avatar-color-border-default);
14539
14637
  font-family: var(--alias-font-brand-family);
14540
14638
  font-weight: var(--alias-font-brand-weight-semibold);
14541
14639
  }
14542
14640
 
14543
14641
  /* Size variants */
14642
+ .muka-avatar--4xs {
14643
+ width: var(--avatar-size-4xs);
14644
+ height: var(--avatar-size-4xs);
14645
+ font-size: var(--avatar-font-size-3xs); /* only used by an AvatarGroup "+N" */
14646
+ }
14647
+
14648
+ .muka-avatar--3xs {
14649
+ width: var(--avatar-size-3xs);
14650
+ height: var(--avatar-size-3xs);
14651
+ font-size: var(--avatar-font-size-3xs);
14652
+ }
14653
+
14654
+ .muka-avatar--2xs {
14655
+ width: var(--avatar-size-2xs);
14656
+ height: var(--avatar-size-2xs);
14657
+ font-size: var(--avatar-font-size-2xs);
14658
+ }
14659
+
14544
14660
  .muka-avatar--xs {
14545
14661
  width: var(--avatar-size-xs);
14546
14662
  height: var(--avatar-size-xs);
@@ -14580,6 +14696,20 @@ button.muka-chat-photo-grid__tile:focus-visible {
14580
14696
  border-radius: var(--avatar-radius-square);
14581
14697
  }
14582
14698
 
14699
+ .muka-avatar--square.muka-avatar--4xs,
14700
+ .muka-avatar--square.muka-avatar--3xs,
14701
+ .muka-avatar--square.muka-avatar--2xs {
14702
+ border-radius: var(--avatar-radius-square-sm);
14703
+ }
14704
+
14705
+ /* 4xs is too small for initials, the fallback icon or a status dot:
14706
+ it shows the picture, or the plain background */
14707
+ .muka-avatar--4xs .muka-avatar__initials,
14708
+ .muka-avatar--4xs .muka-avatar__fallback,
14709
+ .muka-avatar--4xs .muka-avatar__status {
14710
+ display: none;
14711
+ }
14712
+
14583
14713
  /* Clickable state */
14584
14714
  .muka-avatar--clickable {
14585
14715
  cursor: pointer;
@@ -14683,6 +14813,16 @@ button.muka-chat-photo-grid__tile:focus-visible {
14683
14813
  box-sizing: border-box;
14684
14814
  }
14685
14815
 
14816
+ .muka-avatar--3xs .muka-avatar__status {
14817
+ width: var(--avatar-status-size-3xs);
14818
+ height: var(--avatar-status-size-3xs);
14819
+ }
14820
+
14821
+ .muka-avatar--2xs .muka-avatar__status {
14822
+ width: var(--avatar-status-size-2xs);
14823
+ height: var(--avatar-status-size-2xs);
14824
+ }
14825
+
14686
14826
  .muka-avatar--xs .muka-avatar__status {
14687
14827
  width: var(--avatar-status-size-xs);
14688
14828
  height: var(--avatar-status-size-xs);
@@ -14736,44 +14876,17 @@ button.muka-chat-photo-grid__tile:focus-visible {
14736
14876
  background-color: var(--avatar-color-status-away);
14737
14877
  }
14738
14878
 
14739
- /* Avatar Group */
14879
+ /* Avatar Group (Figma "Avatar Stack") */
14740
14880
  .muka-avatar-group {
14741
14881
  display: inline-flex;
14742
14882
  align-items: center;
14743
14883
  flex-direction: row;
14744
14884
  }
14745
14885
 
14886
+ /* Later avatars sit on top of earlier ones (DOM order); a hovered one comes to the front */
14746
14887
  .muka-avatar-group__item {
14747
14888
  position: relative;
14748
14889
  display: inline-flex;
14749
- border: 2px solid var(--color-surface-level1);
14750
- border-radius: inherit;
14751
- }
14752
-
14753
- /* Add border radius to match avatar shape */
14754
- .muka-avatar-group__item .muka-avatar--circle {
14755
- border-radius: var(--avatar-radius-circle);
14756
- }
14757
-
14758
- .muka-avatar-group__item .muka-avatar--square {
14759
- border-radius: var(--avatar-radius-square);
14760
- }
14761
-
14762
- .muka-avatar-group__item .muka-avatar {
14763
- border: none;
14764
- }
14765
-
14766
- /* Spacing variants for avatar group */
14767
- .muka-avatar-group--tight .muka-avatar-group__item:not(:first-child) {
14768
- margin-left: calc(var(--avatar-group-spacing-tight));
14769
- }
14770
-
14771
- .muka-avatar-group--normal .muka-avatar-group__item:not(:first-child) {
14772
- margin-left: calc(var(--avatar-group-spacing-normal));
14773
- }
14774
-
14775
- /* Z-index stacking for overlap effect */
14776
- .muka-avatar-group__item {
14777
14890
  z-index: 0;
14778
14891
  }
14779
14892
 
@@ -14781,6 +14894,41 @@ button.muka-chat-photo-grid__tile:focus-visible {
14781
14894
  z-index: 10;
14782
14895
  }
14783
14896
 
14897
+ /* Grouped avatars get a ring outside their edge, drawn as a shadow so it
14898
+ does not change the avatar's size or the overlap */
14899
+ .muka-avatar-group__item .muka-avatar {
14900
+ box-shadow: 0 0 0 var(--avatar-group-ring-width) var(--avatar-group-ring-color);
14901
+ }
14902
+
14903
+ /* Overlap. Figma specifies exact values for 48 / 32 / 24px avatars (sm / 2xs / 3xs);
14904
+ other sizes use the same proportions: tight 2/3, compact 1/2, spacious 1/3. */
14905
+ .muka-avatar-group--4xs { --muka-avatar-group-size: var(--avatar-size-4xs); }
14906
+ .muka-avatar-group--3xs { --muka-avatar-group-size: var(--avatar-size-3xs); }
14907
+ .muka-avatar-group--2xs { --muka-avatar-group-size: var(--avatar-size-2xs); }
14908
+ .muka-avatar-group--xs { --muka-avatar-group-size: var(--avatar-size-xs); }
14909
+ .muka-avatar-group--sm { --muka-avatar-group-size: var(--avatar-size-sm); }
14910
+ .muka-avatar-group--md { --muka-avatar-group-size: var(--avatar-size-md); }
14911
+ .muka-avatar-group--lg { --muka-avatar-group-size: var(--avatar-size-lg); }
14912
+ .muka-avatar-group--xl { --muka-avatar-group-size: var(--avatar-size-xl); }
14913
+
14914
+ .muka-avatar-group--tight { --muka-avatar-group-overlap: calc(var(--muka-avatar-group-size) * 2 / 3); }
14915
+ .muka-avatar-group--compact { --muka-avatar-group-overlap: calc(var(--muka-avatar-group-size) / 2); }
14916
+ .muka-avatar-group--spacious { --muka-avatar-group-overlap: calc(var(--muka-avatar-group-size) / 3); }
14917
+
14918
+ .muka-avatar-group--tight.muka-avatar-group--sm { --muka-avatar-group-overlap: var(--avatar-group-overlap-tight-sm); }
14919
+ .muka-avatar-group--tight.muka-avatar-group--2xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-tight-2xs); }
14920
+ .muka-avatar-group--tight.muka-avatar-group--3xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-tight-3xs); }
14921
+ .muka-avatar-group--compact.muka-avatar-group--sm { --muka-avatar-group-overlap: var(--avatar-group-overlap-compact-sm); }
14922
+ .muka-avatar-group--compact.muka-avatar-group--2xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-compact-2xs); }
14923
+ .muka-avatar-group--compact.muka-avatar-group--3xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-compact-3xs); }
14924
+ .muka-avatar-group--spacious.muka-avatar-group--sm { --muka-avatar-group-overlap: var(--avatar-group-overlap-spacious-sm); }
14925
+ .muka-avatar-group--spacious.muka-avatar-group--2xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-spacious-2xs); }
14926
+ .muka-avatar-group--spacious.muka-avatar-group--3xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-spacious-3xs); }
14927
+
14928
+ .muka-avatar-group__item:not(:first-child) {
14929
+ margin-left: calc(-1 * var(--muka-avatar-group-overlap));
14930
+ }
14931
+
14784
14932
  /* Overflow avatar styling */
14785
14933
  .muka-avatar--overflow {
14786
14934
  background-color: var(--avatar-color-background-default);