@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
@@ -377,6 +377,8 @@ body {
377
377
  --color-red-10: #dc3d43;
378
378
  --color-red-11: #cd2b31;
379
379
  --color-red-12: #381316;
380
+ --color-redStrong-1: #bd1524;
381
+ --color-redStrong-2: #ab001a;
380
382
  --color-ruby-1: #fffcfd;
381
383
  --color-ruby-2: #fff7f8;
382
384
  --color-ruby-3: #ffeef1;
@@ -1175,6 +1177,9 @@ body {
1175
1177
  --color-state-error-default: #e5484d;
1176
1178
  --color-state-error-contrast: #cd2b31;
1177
1179
  --color-state-error-background: #ffefef;
1180
+ --color-state-error-solid-default: #cd2b31;
1181
+ --color-state-error-solid-hover: #bd1524;
1182
+ --color-state-error-solid-pressed: #ab001a;
1178
1183
  --color-state-info-default: #0091ff;
1179
1184
  --color-state-info-contrast: #0d74ce;
1180
1185
  --color-state-info-background: #edf6ff;
@@ -1275,6 +1280,9 @@ body {
1275
1280
  --alias-color-state-error-contrast: #cd2b31;
1276
1281
  --alias-color-state-error-default: #e5484d;
1277
1282
  --alias-color-state-error-muted: #ffefef;
1283
+ --alias-color-state-error-solid-default: #cd2b31;
1284
+ --alias-color-state-error-solid-hover: #bd1524;
1285
+ --alias-color-state-error-solid-pressed: #ab001a;
1278
1286
  --alias-color-state-error-surface-level0: #fff8f8;
1279
1287
  --alias-color-state-error-surface-level1: #ffefef;
1280
1288
  --alias-color-state-error-surface-level2: #ffe5e5;
@@ -1571,6 +1579,18 @@ body {
1571
1579
  --button-color-primary-shadow-hover: inset 0px -2px 0px 0px rgba(0, 0, 0, 0.090);
1572
1580
  --button-color-primary-shadow-pressed: none;
1573
1581
  --button-color-primary-shadow-disabled: none;
1582
+ --button-color-destructive-background-default: #cd2b31;
1583
+ --button-color-destructive-background-hover: #bd1524;
1584
+ --button-color-destructive-background-pressed: #ab001a;
1585
+ --button-color-destructive-background-disabled: #e0e0e0;
1586
+ --button-color-destructive-foreground-default: #fcfcfc;
1587
+ --button-color-destructive-foreground-hover: #fcfcfc;
1588
+ --button-color-destructive-foreground-pressed: #fcfcfc;
1589
+ --button-color-destructive-foreground-disabled: #bbbbbb;
1590
+ --button-color-destructive-shadow-default: inset 0px -2px 0px 0px rgba(0, 0, 0, 0.090);
1591
+ --button-color-destructive-shadow-hover: inset 0px -2px 0px 0px rgba(0, 0, 0, 0.090);
1592
+ --button-color-destructive-shadow-pressed: none;
1593
+ --button-color-destructive-shadow-disabled: none;
1574
1594
  --button-color-secondary-background-default: #e8e8e8;
1575
1595
  --button-color-secondary-background-hover: #e8e8e8;
1576
1596
  --button-color-secondary-background-pressed: #e0e0e0;
@@ -1935,7 +1955,7 @@ body {
1935
1955
  --contextmenu-trigger-outline-color: #113264;
1936
1956
  --contextmenu-trigger-outline-offset: 0.25rem;
1937
1957
  --tabs-trigger-color-default-background: #e8e8e8;
1938
- --tabs-trigger-color-default-foreground: #202020;
1958
+ --tabs-trigger-color-default-foreground: #838383;
1939
1959
  --tabs-trigger-color-default-border: #bbbbbb;
1940
1960
  --tabs-trigger-color-hover-background: #e8e8e8;
1941
1961
  --tabs-trigger-color-hover-foreground: #202020;
@@ -1950,8 +1970,16 @@ body {
1950
1970
  --tabs-trigger-padding-y: 0.5rem;
1951
1971
  --tabs-trigger-height: 3rem;
1952
1972
  --tabs-trigger-radius: 0px;
1973
+ --tabs-trigger-min-height-sm: 2.5rem;
1974
+ --tabs-trigger-min-height-md: 3.5rem;
1975
+ --tabs-trigger-min-height-lg: 5rem;
1953
1976
  --tabs-panel-background: #fcfcfc;
1954
1977
  --tabs-panel-border: #bbbbbb;
1978
+ --tabs-indicator-color: #113264;
1979
+ --tabs-indicator-height-sm: 2px;
1980
+ --tabs-indicator-height-md: 3px;
1981
+ --tabs-indicator-height-lg: 4px;
1982
+ --tabs-list-padding-x: 1rem;
1955
1983
  --separator-color-default: #e0e0e0;
1956
1984
  --separator-color-contrast: #bbbbbb;
1957
1985
  --separator-width: 0.0625rem;
@@ -1984,6 +2012,9 @@ body {
1984
2012
  --progress-size-circle-strokeWidth-sm: 0.25rem;
1985
2013
  --progress-size-circle-strokeWidth-md: 0.5rem;
1986
2014
  --progress-size-circle-strokeWidth-lg: 0.75rem;
2015
+ --avatar-size-4xs: 1rem;
2016
+ --avatar-size-3xs: 1.5rem;
2017
+ --avatar-size-2xs: 2rem;
1987
2018
  --avatar-size-xs: 2.5rem;
1988
2019
  --avatar-size-sm: 3rem;
1989
2020
  --avatar-size-md: 4rem;
@@ -1993,26 +2024,38 @@ body {
1993
2024
  --avatar-color-background-loading: #e0e0e0;
1994
2025
  --avatar-color-foreground-default: #202020;
1995
2026
  --avatar-color-foreground-muted: #bbbbbb;
1996
- --avatar-color-border-default: #e0e0e0;
1997
2027
  --avatar-color-status-online: #30a46c;
1998
2028
  --avatar-color-status-offline: #bbbbbb;
1999
2029
  --avatar-color-status-busy: #e5484d;
2000
2030
  --avatar-color-status-away: #ffc53d;
2001
2031
  --avatar-radius-circle: 999rem;
2002
2032
  --avatar-radius-square: 0px;
2033
+ --avatar-radius-square-sm: 0px;
2034
+ --avatar-font-size-3xs: 0.75rem;
2035
+ --avatar-font-size-2xs: 0.75rem;
2003
2036
  --avatar-font-size-xs: 0.75rem;
2004
2037
  --avatar-font-size-sm: 0.875rem;
2005
2038
  --avatar-font-size-md: 1.125rem;
2006
2039
  --avatar-font-size-lg: 1.25rem;
2007
2040
  --avatar-font-size-xl: 1.5rem;
2041
+ --avatar-status-size-3xs: 0.5rem;
2042
+ --avatar-status-size-2xs: 0.5rem;
2008
2043
  --avatar-status-size-xs: 0.5rem;
2009
2044
  --avatar-status-size-sm: 0.75rem;
2010
2045
  --avatar-status-size-md: 1rem;
2011
2046
  --avatar-status-size-lg: 1.25rem;
2012
2047
  --avatar-status-size-xl: 1.5rem;
2013
- --avatar-border-width: 1px;
2014
- --avatar-group-spacing-tight: -0.5rem;
2015
- --avatar-group-spacing-normal: -0.25rem;
2048
+ --avatar-group-ring-width: 0.125rem;
2049
+ --avatar-group-ring-color: #fcfcfc;
2050
+ --avatar-group-overlap-tight-sm: 2rem;
2051
+ --avatar-group-overlap-tight-2xs: 1.25rem;
2052
+ --avatar-group-overlap-tight-3xs: 1rem;
2053
+ --avatar-group-overlap-compact-sm: 1.5rem;
2054
+ --avatar-group-overlap-compact-2xs: 1rem;
2055
+ --avatar-group-overlap-compact-3xs: 0.75rem;
2056
+ --avatar-group-overlap-spacious-sm: 1rem;
2057
+ --avatar-group-overlap-spacious-2xs: 0.75rem;
2058
+ --avatar-group-overlap-spacious-3xs: 0.5rem;
2016
2059
  --toast-color-info-background: #202020;
2017
2060
  --toast-color-info-foreground: #fcfcfc;
2018
2061
  --toast-color-info-accent: #edf6ff;
@@ -3766,88 +3809,6 @@ body {
3766
3809
  }
3767
3810
 
3768
3811
 
3769
- /* TextLink */
3770
- /* TextLink Component Styles - Using Muka Design Tokens */
3771
-
3772
- .muka-text-link {
3773
- display: inline;
3774
- cursor: pointer;
3775
- text-decoration: underline;
3776
- /* Nudge the rule clear of descenders; the Figma underline sits off baseline. */
3777
- text-underline-offset: 0.2em;
3778
- text-decoration-thickness: from-font;
3779
- /* Rounds the focus ring's corners; the link itself has no visible box. */
3780
- border-radius: var(--border-radius-sm);
3781
- transition: color var(--motion-duration-micro, 0.15s) var(--motion-easing-enter, ease);
3782
- }
3783
-
3784
- /* ─── Sizes ───────────────────────────────────────────────
3785
- Mirrors the body text scale so a link matches the copy it sits in. */
3786
- .muka-text-link--sm {
3787
- font-family: var(--text-body-sm-regular-fontFamily);
3788
- font-weight: var(--text-body-sm-regular-fontWeight);
3789
- font-size: var(--text-body-sm-regular-fontSize);
3790
- line-height: var(--text-body-sm-regular-lineHeight);
3791
- }
3792
-
3793
- .muka-text-link--base {
3794
- font-family: var(--text-body-base-regular-fontFamily);
3795
- font-weight: var(--text-body-base-regular-fontWeight);
3796
- font-size: var(--text-body-base-regular-fontSize);
3797
- line-height: var(--text-body-base-regular-lineHeight);
3798
- }
3799
-
3800
- .muka-text-link--lg {
3801
- font-family: var(--text-body-lg-regular-fontFamily);
3802
- font-weight: var(--text-body-lg-regular-fontWeight);
3803
- font-size: var(--text-body-lg-regular-fontSize);
3804
- line-height: var(--text-body-lg-regular-lineHeight);
3805
- }
3806
-
3807
- /* ─── Variant: default (accent) ───────────────────────────
3808
- Visited repeats the default colour on purpose: the design treats visited and
3809
- default the same, and pinning it stops the browser's purple from showing. */
3810
- .muka-text-link--default,
3811
- .muka-text-link--default:visited {
3812
- color: var(--color-text-action-default);
3813
- }
3814
-
3815
- .muka-text-link--default:hover,
3816
- .muka-text-link--default:focus-visible {
3817
- color: var(--color-text-action-hover);
3818
- }
3819
-
3820
- .muka-text-link--default:active {
3821
- color: var(--color-text-action-pressed);
3822
- }
3823
-
3824
- /* ─── Variant: subtle (neutral) ───────────────────────────
3825
- Hover, focus and pressed all darken to the default text colour. */
3826
- .muka-text-link--subtle,
3827
- .muka-text-link--subtle:visited {
3828
- color: var(--color-text-subtle-default);
3829
- }
3830
-
3831
- .muka-text-link--subtle:hover,
3832
- .muka-text-link--subtle:focus-visible,
3833
- .muka-text-link--subtle:active {
3834
- color: var(--color-text-default-default);
3835
- }
3836
-
3837
- /* ─── Focus ───────────────────────────────────────────────
3838
- Same ring as every other focusable Muka component. */
3839
- .muka-text-link:focus-visible {
3840
- outline: 2px solid var(--color-border-focus);
3841
- outline-offset: 2px;
3842
- }
3843
-
3844
- @media (prefers-reduced-motion: reduce) {
3845
- .muka-text-link {
3846
- transition: none;
3847
- }
3848
- }
3849
-
3850
-
3851
3812
  /* Textarea */
3852
3813
  /* Textarea Component Styles - Using Muka Design Tokens */
3853
3814
 
@@ -4012,6 +3973,88 @@ body {
4012
3973
  }
4013
3974
 
4014
3975
 
3976
+ /* TextLink */
3977
+ /* TextLink Component Styles - Using Muka Design Tokens */
3978
+
3979
+ .muka-text-link {
3980
+ display: inline;
3981
+ cursor: pointer;
3982
+ text-decoration: underline;
3983
+ /* Nudge the rule clear of descenders; the Figma underline sits off baseline. */
3984
+ text-underline-offset: 0.2em;
3985
+ text-decoration-thickness: from-font;
3986
+ /* Rounds the focus ring's corners; the link itself has no visible box. */
3987
+ border-radius: var(--border-radius-sm);
3988
+ transition: color var(--motion-duration-micro, 0.15s) var(--motion-easing-enter, ease);
3989
+ }
3990
+
3991
+ /* ─── Sizes ───────────────────────────────────────────────
3992
+ Mirrors the body text scale so a link matches the copy it sits in. */
3993
+ .muka-text-link--sm {
3994
+ font-family: var(--text-body-sm-regular-fontFamily);
3995
+ font-weight: var(--text-body-sm-regular-fontWeight);
3996
+ font-size: var(--text-body-sm-regular-fontSize);
3997
+ line-height: var(--text-body-sm-regular-lineHeight);
3998
+ }
3999
+
4000
+ .muka-text-link--base {
4001
+ font-family: var(--text-body-base-regular-fontFamily);
4002
+ font-weight: var(--text-body-base-regular-fontWeight);
4003
+ font-size: var(--text-body-base-regular-fontSize);
4004
+ line-height: var(--text-body-base-regular-lineHeight);
4005
+ }
4006
+
4007
+ .muka-text-link--lg {
4008
+ font-family: var(--text-body-lg-regular-fontFamily);
4009
+ font-weight: var(--text-body-lg-regular-fontWeight);
4010
+ font-size: var(--text-body-lg-regular-fontSize);
4011
+ line-height: var(--text-body-lg-regular-lineHeight);
4012
+ }
4013
+
4014
+ /* ─── Variant: default (accent) ───────────────────────────
4015
+ Visited repeats the default colour on purpose: the design treats visited and
4016
+ default the same, and pinning it stops the browser's purple from showing. */
4017
+ .muka-text-link--default,
4018
+ .muka-text-link--default:visited {
4019
+ color: var(--color-text-action-default);
4020
+ }
4021
+
4022
+ .muka-text-link--default:hover,
4023
+ .muka-text-link--default:focus-visible {
4024
+ color: var(--color-text-action-hover);
4025
+ }
4026
+
4027
+ .muka-text-link--default:active {
4028
+ color: var(--color-text-action-pressed);
4029
+ }
4030
+
4031
+ /* ─── Variant: subtle (neutral) ───────────────────────────
4032
+ Hover, focus and pressed all darken to the default text colour. */
4033
+ .muka-text-link--subtle,
4034
+ .muka-text-link--subtle:visited {
4035
+ color: var(--color-text-subtle-default);
4036
+ }
4037
+
4038
+ .muka-text-link--subtle:hover,
4039
+ .muka-text-link--subtle:focus-visible,
4040
+ .muka-text-link--subtle:active {
4041
+ color: var(--color-text-default-default);
4042
+ }
4043
+
4044
+ /* ─── Focus ───────────────────────────────────────────────
4045
+ Same ring as every other focusable Muka component. */
4046
+ .muka-text-link:focus-visible {
4047
+ outline: 2px solid var(--color-border-focus);
4048
+ outline-offset: 2px;
4049
+ }
4050
+
4051
+ @media (prefers-reduced-motion: reduce) {
4052
+ .muka-text-link {
4053
+ transition: none;
4054
+ }
4055
+ }
4056
+
4057
+
4015
4058
  /* Tabs */
4016
4059
  /* Tabs Component Styles - Clean underline style tabs matching Figma */
4017
4060
 
@@ -4043,12 +4086,17 @@ body {
4043
4086
  border-bottom: 1px solid var(--tabs-trigger-color-default-border);
4044
4087
  }
4045
4088
 
4089
+ /* Padding: inset the tabs; the divider (border) still spans the full width */
4090
+ .muka-tabs--padding-default .muka-tabs__list {
4091
+ padding-inline: var(--tabs-list-padding-x);
4092
+ }
4093
+
4046
4094
  /* Tab Trigger — clean underline style */
4047
4095
  .muka-tabs__trigger {
4048
4096
  display: inline-flex;
4049
4097
  align-items: center;
4050
4098
  justify-content: center;
4051
- gap: var(--spacing-2, 8px);
4099
+ gap: var(--spacing-1);
4052
4100
  background: transparent;
4053
4101
  border: none;
4054
4102
  cursor: pointer;
@@ -4061,8 +4109,8 @@ body {
4061
4109
  color: var(--tabs-trigger-color-default-foreground);
4062
4110
 
4063
4111
  /* Default MD size values */
4064
- height: 48px;
4065
- padding: 0 var(--spacing-3, 12px);
4112
+ min-height: var(--tabs-trigger-min-height-md);
4113
+ padding: var(--spacing-3);
4066
4114
  font-family: var(--text-label-md-regular-fontFamily);
4067
4115
  font-weight: var(--text-label-md-regular-fontWeight);
4068
4116
  font-size: var(--text-label-md-regular-fontSize);
@@ -4071,8 +4119,8 @@ body {
4071
4119
 
4072
4120
  /* Size Variants */
4073
4121
  .muka-tabs--size-sm .muka-tabs__trigger {
4074
- height: 36px;
4075
- padding: 0 var(--spacing-2, 8px);
4122
+ min-height: var(--tabs-trigger-min-height-sm);
4123
+ padding: 0 var(--spacing-2);
4076
4124
  font-family: var(--text-label-sm-regular-fontFamily);
4077
4125
  font-weight: var(--text-label-sm-regular-fontWeight);
4078
4126
  font-size: var(--text-label-sm-regular-fontSize);
@@ -4080,8 +4128,8 @@ body {
4080
4128
  }
4081
4129
 
4082
4130
  .muka-tabs--size-lg .muka-tabs__trigger {
4083
- height: 56px;
4084
- padding: 0 var(--spacing-4, 16px);
4131
+ min-height: var(--tabs-trigger-min-height-lg);
4132
+ padding: var(--spacing-4);
4085
4133
  font-family: var(--text-label-lg-regular-fontFamily);
4086
4134
  font-weight: var(--text-label-lg-regular-fontWeight);
4087
4135
  font-size: var(--text-label-lg-regular-fontSize);
@@ -4105,8 +4153,8 @@ body {
4105
4153
  bottom: -1px; /* Overlap the 1px border */
4106
4154
  left: 0;
4107
4155
  right: 0;
4108
- height: 3px;
4109
- background-color: var(--tabs-trigger-color-current-foreground);
4156
+ height: var(--tabs-indicator-height-md);
4157
+ background-color: var(--tabs-indicator-color);
4110
4158
  border-bottom-left-radius: 1px;
4111
4159
  border-bottom-right-radius: 1px;
4112
4160
  border-top-left-radius: 3px;
@@ -4114,6 +4162,13 @@ body {
4114
4162
  z-index: 3;
4115
4163
  }
4116
4164
 
4165
+ .muka-tabs--size-sm .muka-tabs__trigger--current::after {
4166
+ height: var(--tabs-indicator-height-sm);
4167
+ }
4168
+ .muka-tabs--size-lg .muka-tabs__trigger--current::after {
4169
+ height: var(--tabs-indicator-height-lg);
4170
+ }
4171
+
4117
4172
  .muka-tabs__trigger--disabled {
4118
4173
  color: var(--tabs-trigger-color-disabled-foreground);
4119
4174
  cursor: not-allowed;
@@ -4124,18 +4179,29 @@ body {
4124
4179
  outline-offset: -2px;
4125
4180
  }
4126
4181
 
4127
- /* Icons */
4128
- .muka-tabs__icon {
4182
+ /* Label: Figma pads the label 8px either side, so with the 4px gap a leading
4183
+ item sits 12px from the text */
4184
+ .muka-tabs__label {
4185
+ padding: 0 var(--spacing-2);
4186
+ }
4187
+
4188
+ /* Leading item: icon, avatar, avatar group or data pie chart */
4189
+ .muka-tabs__leading {
4129
4190
  display: flex;
4130
4191
  align-items: center;
4131
4192
  justify-content: center;
4193
+ flex-shrink: 0;
4132
4194
  }
4133
4195
  .muka-tabs__trigger .muka-icon {
4134
4196
  color: inherit;
4135
4197
  }
4136
- .muka-tabs--size-sm .muka-tabs__icon svg { width: 16px; height: 16px; }
4137
- .muka-tabs--size-md .muka-tabs__icon svg { width: 20px; height: 20px; }
4138
- .muka-tabs--size-lg .muka-tabs__icon svg { width: 24px; height: 24px; }
4198
+ /* Icon sizes only: avatars and pie charts are sized through their size prop */
4199
+ .muka-tabs--size-sm .muka-tabs__leading > svg,
4200
+ .muka-tabs--size-sm .muka-tabs__leading > .muka-icon svg { width: 16px; height: 16px; }
4201
+ .muka-tabs--size-md .muka-tabs__leading > svg,
4202
+ .muka-tabs--size-md .muka-tabs__leading > .muka-icon svg { width: 20px; height: 20px; }
4203
+ .muka-tabs--size-lg .muka-tabs__leading > svg,
4204
+ .muka-tabs--size-lg .muka-tabs__leading > .muka-icon svg { width: 24px; height: 24px; }
4139
4205
 
4140
4206
  /* Responsive Scroll behavior on small screens */
4141
4207
  @media (max-width: 768px) {
@@ -10722,6 +10788,38 @@ li.muka-listitem {
10722
10788
  }
10723
10789
 
10724
10790
 
10791
+ /* DatePicker */
10792
+ /* DatePicker — compact native date field. */
10793
+ /* Field/label/helper styling is inherited from ../Input/Input.css. */
10794
+
10795
+ /* Adopt the field typography on the native date input. */
10796
+ .muka-datepicker__field .muka-input__native {
10797
+ font-family: var(--text-input-md-fontFamily);
10798
+ font-size: var(--text-input-md-fontSize);
10799
+ line-height: var(--text-input-md-lineHeight);
10800
+ }
10801
+
10802
+ .muka-datepicker__field--sm .muka-input__native {
10803
+ font-family: var(--text-input-sm-fontFamily);
10804
+ font-size: var(--text-input-sm-fontSize);
10805
+ line-height: var(--text-input-sm-lineHeight);
10806
+ }
10807
+
10808
+ /* Tint the browser calendar indicator to match the field foreground. */
10809
+ .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator {
10810
+ cursor: pointer;
10811
+ opacity: 0.6;
10812
+ }
10813
+
10814
+ .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator:hover {
10815
+ opacity: 1;
10816
+ }
10817
+
10818
+ .muka-datepicker__field .muka-input__native:disabled {
10819
+ cursor: not-allowed;
10820
+ }
10821
+
10822
+
10725
10823
  /* Dialog */
10726
10824
  /* Dialog Component Styles */
10727
10825
 
@@ -10990,38 +11088,6 @@ li.muka-listitem {
10990
11088
  }
10991
11089
 
10992
11090
 
10993
- /* DatePicker */
10994
- /* DatePicker — compact native date field. */
10995
- /* Field/label/helper styling is inherited from ../Input/Input.css. */
10996
-
10997
- /* Adopt the field typography on the native date input. */
10998
- .muka-datepicker__field .muka-input__native {
10999
- font-family: var(--text-input-md-fontFamily);
11000
- font-size: var(--text-input-md-fontSize);
11001
- line-height: var(--text-input-md-lineHeight);
11002
- }
11003
-
11004
- .muka-datepicker__field--sm .muka-input__native {
11005
- font-family: var(--text-input-sm-fontFamily);
11006
- font-size: var(--text-input-sm-fontSize);
11007
- line-height: var(--text-input-sm-lineHeight);
11008
- }
11009
-
11010
- /* Tint the browser calendar indicator to match the field foreground. */
11011
- .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator {
11012
- cursor: pointer;
11013
- opacity: 0.6;
11014
- }
11015
-
11016
- .muka-datepicker__field .muka-input__native::-webkit-calendar-picker-indicator:hover {
11017
- opacity: 1;
11018
- }
11019
-
11020
- .muka-datepicker__field .muka-input__native:disabled {
11021
- cursor: not-allowed;
11022
- }
11023
-
11024
-
11025
11091
  /* DataTable */
11026
11092
  /* DataTable Component Styles - Using Muka Design Tokens */
11027
11093
 
@@ -12339,17 +12405,139 @@ li.muka-listitem {
12339
12405
  }
12340
12406
 
12341
12407
 
12342
- /* Checkbox */
12343
- /* Checkbox Component Styles - Using Muka Design Tokens */
12408
+ /* ChatPhotoGrid */
12409
+ /* ChatPhotoGrid Component Styles */
12344
12410
 
12345
- /* Wrapper - clickable label container */
12346
- .muka-checkbox {
12347
- display: inline-flex;
12348
- align-items: center;
12349
- gap: var(--spacing-4);
12350
- cursor: pointer;
12351
- user-select: none;
12352
- }
12411
+ /*
12412
+ * The grid clips to its own radius and the tiles stay square, so only the four
12413
+ * outer corners round — matching the Figma "Wrapper" frame (5225:1394).
12414
+ */
12415
+ .muka-chat-photo-grid {
12416
+ display: grid;
12417
+ gap: var(--chatphotogrid-gap);
12418
+ width: 100%;
12419
+ min-width: 0;
12420
+ overflow: hidden;
12421
+ border-radius: var(--chatphotogrid-radius);
12422
+ }
12423
+
12424
+ /* ─── Tiles ────────────────────────────────────────────── */
12425
+
12426
+ .muka-chat-photo-grid__tile {
12427
+ position: relative;
12428
+ display: block;
12429
+ overflow: hidden;
12430
+ min-width: 0;
12431
+ padding: 0;
12432
+ margin: 0;
12433
+ border: none;
12434
+ background-color: var(--chatphotogrid-color-placeholder);
12435
+ aspect-ratio: 1 / 1;
12436
+ }
12437
+
12438
+ button.muka-chat-photo-grid__tile {
12439
+ cursor: pointer;
12440
+ appearance: none;
12441
+ }
12442
+
12443
+ button.muka-chat-photo-grid__tile:focus-visible {
12444
+ outline: var(--border-width-bold) solid var(--color-border-focus);
12445
+ /* Inset, so the grid's overflow clip cannot cut the ring off on corner tiles */
12446
+ outline-offset: calc(-1 * var(--border-width-bold));
12447
+ }
12448
+
12449
+ .muka-chat-photo-grid__image {
12450
+ display: block;
12451
+ width: 100%;
12452
+ height: 100%;
12453
+ object-fit: cover;
12454
+ }
12455
+
12456
+ /* ─── Overflow tile ────────────────────────────────────── */
12457
+
12458
+ .muka-chat-photo-grid__overflow {
12459
+ position: absolute;
12460
+ inset: 0;
12461
+ display: flex;
12462
+ align-items: center;
12463
+ justify-content: center;
12464
+ background-color: var(--chatphotogrid-color-overflow-background);
12465
+ color: var(--chatphotogrid-color-overflow-foreground);
12466
+ font-family: var(--text-body-2xl-regular-fontFamily);
12467
+ font-weight: var(--text-body-2xl-regular-fontWeight);
12468
+ font-size: var(--text-body-2xl-regular-fontSize);
12469
+ line-height: var(--text-body-2xl-regular-lineHeight);
12470
+ }
12471
+
12472
+ /* ─── Layouts ──────────────────────────────────────────── */
12473
+
12474
+ .muka-chat-photo-grid--1 {
12475
+ grid-template-columns: 1fr;
12476
+ }
12477
+
12478
+ .muka-chat-photo-grid--landscape .muka-chat-photo-grid__tile {
12479
+ aspect-ratio: 4 / 3;
12480
+ }
12481
+
12482
+ .muka-chat-photo-grid--portrait .muka-chat-photo-grid__tile {
12483
+ aspect-ratio: 3 / 4;
12484
+ }
12485
+
12486
+ .muka-chat-photo-grid--2 {
12487
+ grid-template-columns: repeat(2, 1fr);
12488
+ }
12489
+
12490
+ .muka-chat-photo-grid--3 {
12491
+ grid-template-columns: repeat(3, 1fr);
12492
+ }
12493
+
12494
+ .muka-chat-photo-grid--4 {
12495
+ grid-template-columns: repeat(2, 1fr);
12496
+ }
12497
+
12498
+ /* 5 photos: a 2-up row above a 3-up row, on a shared 6-column track */
12499
+ .muka-chat-photo-grid--5 {
12500
+ grid-template-columns: repeat(6, 1fr);
12501
+ }
12502
+
12503
+ .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(-n + 2) {
12504
+ grid-column: span 3;
12505
+ }
12506
+
12507
+ .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(n + 3) {
12508
+ grid-column: span 2;
12509
+ }
12510
+
12511
+ .muka-chat-photo-grid--6,
12512
+ .muka-chat-photo-grid--overflow {
12513
+ grid-template-columns: repeat(3, 1fr);
12514
+ }
12515
+
12516
+ /* ─── Print ────────────────────────────────────────────── */
12517
+
12518
+ @media print {
12519
+ .muka-chat-photo-grid {
12520
+ break-inside: avoid;
12521
+ }
12522
+
12523
+ .muka-chat-photo-grid__image {
12524
+ print-color-adjust: exact;
12525
+ -webkit-print-color-adjust: exact;
12526
+ }
12527
+ }
12528
+
12529
+
12530
+ /* Checkbox */
12531
+ /* Checkbox Component Styles - Using Muka Design Tokens */
12532
+
12533
+ /* Wrapper - clickable label container */
12534
+ .muka-checkbox {
12535
+ display: inline-flex;
12536
+ align-items: center;
12537
+ gap: var(--spacing-4);
12538
+ cursor: pointer;
12539
+ user-select: none;
12540
+ }
12353
12541
 
12354
12542
  .muka-checkbox--disabled {
12355
12543
  cursor: not-allowed;
@@ -12506,128 +12694,6 @@ li.muka-listitem {
12506
12694
  }
12507
12695
 
12508
12696
 
12509
- /* ChatPhotoGrid */
12510
- /* ChatPhotoGrid Component Styles */
12511
-
12512
- /*
12513
- * The grid clips to its own radius and the tiles stay square, so only the four
12514
- * outer corners round — matching the Figma "Wrapper" frame (5225:1394).
12515
- */
12516
- .muka-chat-photo-grid {
12517
- display: grid;
12518
- gap: var(--chatphotogrid-gap);
12519
- width: 100%;
12520
- min-width: 0;
12521
- overflow: hidden;
12522
- border-radius: var(--chatphotogrid-radius);
12523
- }
12524
-
12525
- /* ─── Tiles ────────────────────────────────────────────── */
12526
-
12527
- .muka-chat-photo-grid__tile {
12528
- position: relative;
12529
- display: block;
12530
- overflow: hidden;
12531
- min-width: 0;
12532
- padding: 0;
12533
- margin: 0;
12534
- border: none;
12535
- background-color: var(--chatphotogrid-color-placeholder);
12536
- aspect-ratio: 1 / 1;
12537
- }
12538
-
12539
- button.muka-chat-photo-grid__tile {
12540
- cursor: pointer;
12541
- appearance: none;
12542
- }
12543
-
12544
- button.muka-chat-photo-grid__tile:focus-visible {
12545
- outline: var(--border-width-bold) solid var(--color-border-focus);
12546
- /* Inset, so the grid's overflow clip cannot cut the ring off on corner tiles */
12547
- outline-offset: calc(-1 * var(--border-width-bold));
12548
- }
12549
-
12550
- .muka-chat-photo-grid__image {
12551
- display: block;
12552
- width: 100%;
12553
- height: 100%;
12554
- object-fit: cover;
12555
- }
12556
-
12557
- /* ─── Overflow tile ────────────────────────────────────── */
12558
-
12559
- .muka-chat-photo-grid__overflow {
12560
- position: absolute;
12561
- inset: 0;
12562
- display: flex;
12563
- align-items: center;
12564
- justify-content: center;
12565
- background-color: var(--chatphotogrid-color-overflow-background);
12566
- color: var(--chatphotogrid-color-overflow-foreground);
12567
- font-family: var(--text-body-2xl-regular-fontFamily);
12568
- font-weight: var(--text-body-2xl-regular-fontWeight);
12569
- font-size: var(--text-body-2xl-regular-fontSize);
12570
- line-height: var(--text-body-2xl-regular-lineHeight);
12571
- }
12572
-
12573
- /* ─── Layouts ──────────────────────────────────────────── */
12574
-
12575
- .muka-chat-photo-grid--1 {
12576
- grid-template-columns: 1fr;
12577
- }
12578
-
12579
- .muka-chat-photo-grid--landscape .muka-chat-photo-grid__tile {
12580
- aspect-ratio: 4 / 3;
12581
- }
12582
-
12583
- .muka-chat-photo-grid--portrait .muka-chat-photo-grid__tile {
12584
- aspect-ratio: 3 / 4;
12585
- }
12586
-
12587
- .muka-chat-photo-grid--2 {
12588
- grid-template-columns: repeat(2, 1fr);
12589
- }
12590
-
12591
- .muka-chat-photo-grid--3 {
12592
- grid-template-columns: repeat(3, 1fr);
12593
- }
12594
-
12595
- .muka-chat-photo-grid--4 {
12596
- grid-template-columns: repeat(2, 1fr);
12597
- }
12598
-
12599
- /* 5 photos: a 2-up row above a 3-up row, on a shared 6-column track */
12600
- .muka-chat-photo-grid--5 {
12601
- grid-template-columns: repeat(6, 1fr);
12602
- }
12603
-
12604
- .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(-n + 2) {
12605
- grid-column: span 3;
12606
- }
12607
-
12608
- .muka-chat-photo-grid--5 .muka-chat-photo-grid__tile:nth-child(n + 3) {
12609
- grid-column: span 2;
12610
- }
12611
-
12612
- .muka-chat-photo-grid--6,
12613
- .muka-chat-photo-grid--overflow {
12614
- grid-template-columns: repeat(3, 1fr);
12615
- }
12616
-
12617
- /* ─── Print ────────────────────────────────────────────── */
12618
-
12619
- @media print {
12620
- .muka-chat-photo-grid {
12621
- break-inside: avoid;
12622
- }
12623
-
12624
- .muka-chat-photo-grid__image {
12625
- print-color-adjust: exact;
12626
- -webkit-print-color-adjust: exact;
12627
- }
12628
- }
12629
-
12630
-
12631
12697
  /* ChatMessageStack */
12632
12698
  /* ChatMessageStack Component Styles */
12633
12699
 
@@ -13570,10 +13636,43 @@ button.muka-chat-photo-grid__tile:focus-visible {
13570
13636
  opacity: 1; /* Remove opacity since we have proper disabled tokens */
13571
13637
  }
13572
13638
 
13573
- /* Secondary variant - supporting actions, no border, only bottom inner shadow */
13574
- .muka-button--secondary {
13575
- background-color: var(--button-color-secondary-background-default);
13576
- color: var(--button-color-secondary-foreground-default);
13639
+ /* Destructive variant - primary's structure on the solid error fill, for
13640
+ irreversible actions. Hover and pressed step away from the label color, so
13641
+ contrast never drops (darker in light themes, lighter in dark themes).
13642
+ Disabled is neutral grey rather than primary's brand-tinted fill. */
13643
+ .muka-button--destructive {
13644
+ background-color: var(--button-color-destructive-background-default);
13645
+ color: var(--button-color-destructive-foreground-default);
13646
+ box-shadow: var(--button-color-destructive-shadow-default);
13647
+ }
13648
+
13649
+ .muka-button--destructive:hover:not(:disabled) {
13650
+ background-color: var(--button-color-destructive-background-hover);
13651
+ color: var(--button-color-destructive-foreground-hover);
13652
+ box-shadow: var(--button-color-destructive-shadow-hover);
13653
+ }
13654
+
13655
+ .muka-button--destructive:active:not(:disabled),
13656
+ .muka-button--destructive.muka-button--pressed:not(:disabled),
13657
+ .muka-button--destructive[data-state="open"]:not(:disabled),
13658
+ .muka-button--destructive[aria-pressed="true"]:not(:disabled) {
13659
+ background-color: var(--button-color-destructive-background-pressed);
13660
+ color: var(--button-color-destructive-foreground-pressed);
13661
+ box-shadow: var(--button-color-destructive-shadow-pressed);
13662
+ }
13663
+
13664
+ .muka-button--destructive:disabled {
13665
+ background-color: var(--button-color-destructive-background-disabled);
13666
+ color: var(--button-color-destructive-foreground-disabled);
13667
+ box-shadow: var(--button-color-destructive-shadow-disabled);
13668
+ cursor: not-allowed;
13669
+ opacity: 1;
13670
+ }
13671
+
13672
+ /* Secondary variant - supporting actions, no border, only bottom inner shadow */
13673
+ .muka-button--secondary {
13674
+ background-color: var(--button-color-secondary-background-default);
13675
+ color: var(--button-color-secondary-foreground-default);
13577
13676
  box-shadow: var(--button-color-secondary-shadow-default);
13578
13677
  }
13579
13678
 
@@ -13880,6 +13979,114 @@ button.muka-chat-photo-grid__tile:focus-visible {
13880
13979
  }
13881
13980
 
13882
13981
 
13982
+ /* BadgeNumber */
13983
+ /* BadgeNumber Component Styles - Using Muka Design Tokens */
13984
+
13985
+ .muka-badge-number {
13986
+ display: inline-flex;
13987
+ align-items: center;
13988
+ justify-content: center;
13989
+ border-radius: var(--border-radius-full);
13990
+ white-space: nowrap;
13991
+ user-select: none;
13992
+ box-sizing: border-box;
13993
+ }
13994
+
13995
+ /*
13996
+ * Sizes — fixed height, matching min-width (so a single digit renders as a
13997
+ * circle), horizontal padding, and bold label typography. Vertical centering
13998
+ * is handled by the fixed height + align-items: center.
13999
+ */
14000
+ .muka-badge-number--2xs {
14001
+ height: var(--badge-number-size-2xs);
14002
+ min-width: var(--badge-number-size-2xs);
14003
+ padding: 0 var(--badge-number-padding-2xs);
14004
+ font-family: var(--text-label-xs-bold-fontFamily);
14005
+ font-weight: var(--text-label-xs-bold-fontWeight);
14006
+ font-size: var(--text-label-xs-bold-fontSize);
14007
+ line-height: var(--text-label-xs-bold-lineHeight);
14008
+ }
14009
+
14010
+ .muka-badge-number--xs {
14011
+ height: var(--badge-number-size-xs);
14012
+ min-width: var(--badge-number-size-xs);
14013
+ padding: 0 var(--badge-number-padding-xs);
14014
+ font-family: var(--text-label-sm-bold-fontFamily);
14015
+ font-weight: var(--text-label-sm-bold-fontWeight);
14016
+ font-size: var(--text-label-sm-bold-fontSize);
14017
+ line-height: var(--text-label-sm-bold-lineHeight);
14018
+ }
14019
+
14020
+ .muka-badge-number--sm {
14021
+ height: var(--badge-number-size-sm);
14022
+ min-width: var(--badge-number-size-sm);
14023
+ padding: 0 var(--badge-number-padding-sm);
14024
+ font-family: var(--text-label-md-bold-fontFamily);
14025
+ font-weight: var(--text-label-md-bold-fontWeight);
14026
+ font-size: var(--text-label-md-bold-fontSize);
14027
+ line-height: var(--text-label-md-bold-lineHeight);
14028
+ }
14029
+
14030
+ .muka-badge-number--md {
14031
+ height: var(--badge-number-size-md);
14032
+ min-width: var(--badge-number-size-md);
14033
+ padding: 0 var(--badge-number-padding-md);
14034
+ font-family: var(--text-label-lg-bold-fontFamily);
14035
+ font-weight: var(--text-label-lg-bold-fontWeight);
14036
+ font-size: var(--text-label-lg-bold-fontSize);
14037
+ line-height: var(--text-label-lg-bold-lineHeight);
14038
+ }
14039
+
14040
+ .muka-badge-number--lg {
14041
+ height: var(--badge-number-size-lg);
14042
+ min-width: var(--badge-number-size-lg);
14043
+ padding: 0 var(--badge-number-padding-lg);
14044
+ font-family: var(--text-label-2xl-bold-fontFamily);
14045
+ font-weight: var(--text-label-2xl-bold-fontWeight);
14046
+ font-size: var(--text-label-2xl-bold-fontSize);
14047
+ line-height: var(--text-label-2xl-bold-lineHeight);
14048
+ }
14049
+
14050
+ .muka-badge-number__label {
14051
+ /*
14052
+ * The badge sets a tight line-height for compact sizing, which would clip
14053
+ * glyph descenders; give the label a roomier line-height. Vertical centering
14054
+ * is unaffected because the badge height is fixed and content is centered.
14055
+ */
14056
+ line-height: normal;
14057
+ }
14058
+
14059
+ /* Neutral variant */
14060
+ .muka-badge-number--neutral {
14061
+ background-color: var(--color-surface-level1);
14062
+ color: var(--color-text-default-default);
14063
+ }
14064
+
14065
+ /* Info variant */
14066
+ .muka-badge-number--info {
14067
+ background-color: var(--color-state-info-contrast);
14068
+ color: var(--color-text-default-inverse);
14069
+ }
14070
+
14071
+ /* Success variant */
14072
+ .muka-badge-number--success {
14073
+ background-color: var(--color-state-success-contrast);
14074
+ color: var(--color-text-default-inverse);
14075
+ }
14076
+
14077
+ /* Warning variant */
14078
+ .muka-badge-number--warning {
14079
+ background-color: var(--color-state-warning-contrast);
14080
+ color: var(--color-text-default-inverse);
14081
+ }
14082
+
14083
+ /* Error variant */
14084
+ .muka-badge-number--error {
14085
+ background-color: var(--color-state-error-contrast);
14086
+ color: var(--color-text-default-inverse);
14087
+ }
14088
+
14089
+
13883
14090
  /* BottomBar */
13884
14091
  /* BottomBar Component Styles */
13885
14092
 
@@ -14196,114 +14403,6 @@ button.muka-chat-photo-grid__tile:focus-visible {
14196
14403
  }
14197
14404
 
14198
14405
 
14199
- /* BadgeNumber */
14200
- /* BadgeNumber Component Styles - Using Muka Design Tokens */
14201
-
14202
- .muka-badge-number {
14203
- display: inline-flex;
14204
- align-items: center;
14205
- justify-content: center;
14206
- border-radius: var(--border-radius-full);
14207
- white-space: nowrap;
14208
- user-select: none;
14209
- box-sizing: border-box;
14210
- }
14211
-
14212
- /*
14213
- * Sizes — fixed height, matching min-width (so a single digit renders as a
14214
- * circle), horizontal padding, and bold label typography. Vertical centering
14215
- * is handled by the fixed height + align-items: center.
14216
- */
14217
- .muka-badge-number--2xs {
14218
- height: var(--badge-number-size-2xs);
14219
- min-width: var(--badge-number-size-2xs);
14220
- padding: 0 var(--badge-number-padding-2xs);
14221
- font-family: var(--text-label-xs-bold-fontFamily);
14222
- font-weight: var(--text-label-xs-bold-fontWeight);
14223
- font-size: var(--text-label-xs-bold-fontSize);
14224
- line-height: var(--text-label-xs-bold-lineHeight);
14225
- }
14226
-
14227
- .muka-badge-number--xs {
14228
- height: var(--badge-number-size-xs);
14229
- min-width: var(--badge-number-size-xs);
14230
- padding: 0 var(--badge-number-padding-xs);
14231
- font-family: var(--text-label-sm-bold-fontFamily);
14232
- font-weight: var(--text-label-sm-bold-fontWeight);
14233
- font-size: var(--text-label-sm-bold-fontSize);
14234
- line-height: var(--text-label-sm-bold-lineHeight);
14235
- }
14236
-
14237
- .muka-badge-number--sm {
14238
- height: var(--badge-number-size-sm);
14239
- min-width: var(--badge-number-size-sm);
14240
- padding: 0 var(--badge-number-padding-sm);
14241
- font-family: var(--text-label-md-bold-fontFamily);
14242
- font-weight: var(--text-label-md-bold-fontWeight);
14243
- font-size: var(--text-label-md-bold-fontSize);
14244
- line-height: var(--text-label-md-bold-lineHeight);
14245
- }
14246
-
14247
- .muka-badge-number--md {
14248
- height: var(--badge-number-size-md);
14249
- min-width: var(--badge-number-size-md);
14250
- padding: 0 var(--badge-number-padding-md);
14251
- font-family: var(--text-label-lg-bold-fontFamily);
14252
- font-weight: var(--text-label-lg-bold-fontWeight);
14253
- font-size: var(--text-label-lg-bold-fontSize);
14254
- line-height: var(--text-label-lg-bold-lineHeight);
14255
- }
14256
-
14257
- .muka-badge-number--lg {
14258
- height: var(--badge-number-size-lg);
14259
- min-width: var(--badge-number-size-lg);
14260
- padding: 0 var(--badge-number-padding-lg);
14261
- font-family: var(--text-label-2xl-bold-fontFamily);
14262
- font-weight: var(--text-label-2xl-bold-fontWeight);
14263
- font-size: var(--text-label-2xl-bold-fontSize);
14264
- line-height: var(--text-label-2xl-bold-lineHeight);
14265
- }
14266
-
14267
- .muka-badge-number__label {
14268
- /*
14269
- * The badge sets a tight line-height for compact sizing, which would clip
14270
- * glyph descenders; give the label a roomier line-height. Vertical centering
14271
- * is unaffected because the badge height is fixed and content is centered.
14272
- */
14273
- line-height: normal;
14274
- }
14275
-
14276
- /* Neutral variant */
14277
- .muka-badge-number--neutral {
14278
- background-color: var(--color-surface-level1);
14279
- color: var(--color-text-default-default);
14280
- }
14281
-
14282
- /* Info variant */
14283
- .muka-badge-number--info {
14284
- background-color: var(--color-state-info-contrast);
14285
- color: var(--color-text-default-inverse);
14286
- }
14287
-
14288
- /* Success variant */
14289
- .muka-badge-number--success {
14290
- background-color: var(--color-state-success-contrast);
14291
- color: var(--color-text-default-inverse);
14292
- }
14293
-
14294
- /* Warning variant */
14295
- .muka-badge-number--warning {
14296
- background-color: var(--color-state-warning-contrast);
14297
- color: var(--color-text-default-inverse);
14298
- }
14299
-
14300
- /* Error variant */
14301
- .muka-badge-number--error {
14302
- background-color: var(--color-state-error-contrast);
14303
- color: var(--color-text-default-inverse);
14304
- }
14305
-
14306
-
14307
14406
  /* Badge */
14308
14407
  /* Badge Component Styles - Using Muka Design Tokens */
14309
14408
 
@@ -14503,12 +14602,29 @@ button.muka-chat-photo-grid__tile:focus-visible {
14503
14602
  vertical-align: middle;
14504
14603
  background-color: var(--avatar-color-background-default);
14505
14604
  color: var(--avatar-color-foreground-default);
14506
- border: var(--avatar-border-width) solid var(--avatar-color-border-default);
14507
14605
  font-family: var(--alias-font-brand-family);
14508
14606
  font-weight: var(--alias-font-brand-weight-semibold);
14509
14607
  }
14510
14608
 
14511
14609
  /* Size variants */
14610
+ .muka-avatar--4xs {
14611
+ width: var(--avatar-size-4xs);
14612
+ height: var(--avatar-size-4xs);
14613
+ font-size: var(--avatar-font-size-3xs); /* only used by an AvatarGroup "+N" */
14614
+ }
14615
+
14616
+ .muka-avatar--3xs {
14617
+ width: var(--avatar-size-3xs);
14618
+ height: var(--avatar-size-3xs);
14619
+ font-size: var(--avatar-font-size-3xs);
14620
+ }
14621
+
14622
+ .muka-avatar--2xs {
14623
+ width: var(--avatar-size-2xs);
14624
+ height: var(--avatar-size-2xs);
14625
+ font-size: var(--avatar-font-size-2xs);
14626
+ }
14627
+
14512
14628
  .muka-avatar--xs {
14513
14629
  width: var(--avatar-size-xs);
14514
14630
  height: var(--avatar-size-xs);
@@ -14548,6 +14664,20 @@ button.muka-chat-photo-grid__tile:focus-visible {
14548
14664
  border-radius: var(--avatar-radius-square);
14549
14665
  }
14550
14666
 
14667
+ .muka-avatar--square.muka-avatar--4xs,
14668
+ .muka-avatar--square.muka-avatar--3xs,
14669
+ .muka-avatar--square.muka-avatar--2xs {
14670
+ border-radius: var(--avatar-radius-square-sm);
14671
+ }
14672
+
14673
+ /* 4xs is too small for initials, the fallback icon or a status dot:
14674
+ it shows the picture, or the plain background */
14675
+ .muka-avatar--4xs .muka-avatar__initials,
14676
+ .muka-avatar--4xs .muka-avatar__fallback,
14677
+ .muka-avatar--4xs .muka-avatar__status {
14678
+ display: none;
14679
+ }
14680
+
14551
14681
  /* Clickable state */
14552
14682
  .muka-avatar--clickable {
14553
14683
  cursor: pointer;
@@ -14651,6 +14781,16 @@ button.muka-chat-photo-grid__tile:focus-visible {
14651
14781
  box-sizing: border-box;
14652
14782
  }
14653
14783
 
14784
+ .muka-avatar--3xs .muka-avatar__status {
14785
+ width: var(--avatar-status-size-3xs);
14786
+ height: var(--avatar-status-size-3xs);
14787
+ }
14788
+
14789
+ .muka-avatar--2xs .muka-avatar__status {
14790
+ width: var(--avatar-status-size-2xs);
14791
+ height: var(--avatar-status-size-2xs);
14792
+ }
14793
+
14654
14794
  .muka-avatar--xs .muka-avatar__status {
14655
14795
  width: var(--avatar-status-size-xs);
14656
14796
  height: var(--avatar-status-size-xs);
@@ -14704,44 +14844,17 @@ button.muka-chat-photo-grid__tile:focus-visible {
14704
14844
  background-color: var(--avatar-color-status-away);
14705
14845
  }
14706
14846
 
14707
- /* Avatar Group */
14847
+ /* Avatar Group (Figma "Avatar Stack") */
14708
14848
  .muka-avatar-group {
14709
14849
  display: inline-flex;
14710
14850
  align-items: center;
14711
14851
  flex-direction: row;
14712
14852
  }
14713
14853
 
14854
+ /* Later avatars sit on top of earlier ones (DOM order); a hovered one comes to the front */
14714
14855
  .muka-avatar-group__item {
14715
14856
  position: relative;
14716
14857
  display: inline-flex;
14717
- border: 2px solid var(--color-surface-level1);
14718
- border-radius: inherit;
14719
- }
14720
-
14721
- /* Add border radius to match avatar shape */
14722
- .muka-avatar-group__item .muka-avatar--circle {
14723
- border-radius: var(--avatar-radius-circle);
14724
- }
14725
-
14726
- .muka-avatar-group__item .muka-avatar--square {
14727
- border-radius: var(--avatar-radius-square);
14728
- }
14729
-
14730
- .muka-avatar-group__item .muka-avatar {
14731
- border: none;
14732
- }
14733
-
14734
- /* Spacing variants for avatar group */
14735
- .muka-avatar-group--tight .muka-avatar-group__item:not(:first-child) {
14736
- margin-left: calc(var(--avatar-group-spacing-tight));
14737
- }
14738
-
14739
- .muka-avatar-group--normal .muka-avatar-group__item:not(:first-child) {
14740
- margin-left: calc(var(--avatar-group-spacing-normal));
14741
- }
14742
-
14743
- /* Z-index stacking for overlap effect */
14744
- .muka-avatar-group__item {
14745
14858
  z-index: 0;
14746
14859
  }
14747
14860
 
@@ -14749,6 +14862,41 @@ button.muka-chat-photo-grid__tile:focus-visible {
14749
14862
  z-index: 10;
14750
14863
  }
14751
14864
 
14865
+ /* Grouped avatars get a ring outside their edge, drawn as a shadow so it
14866
+ does not change the avatar's size or the overlap */
14867
+ .muka-avatar-group__item .muka-avatar {
14868
+ box-shadow: 0 0 0 var(--avatar-group-ring-width) var(--avatar-group-ring-color);
14869
+ }
14870
+
14871
+ /* Overlap. Figma specifies exact values for 48 / 32 / 24px avatars (sm / 2xs / 3xs);
14872
+ other sizes use the same proportions: tight 2/3, compact 1/2, spacious 1/3. */
14873
+ .muka-avatar-group--4xs { --muka-avatar-group-size: var(--avatar-size-4xs); }
14874
+ .muka-avatar-group--3xs { --muka-avatar-group-size: var(--avatar-size-3xs); }
14875
+ .muka-avatar-group--2xs { --muka-avatar-group-size: var(--avatar-size-2xs); }
14876
+ .muka-avatar-group--xs { --muka-avatar-group-size: var(--avatar-size-xs); }
14877
+ .muka-avatar-group--sm { --muka-avatar-group-size: var(--avatar-size-sm); }
14878
+ .muka-avatar-group--md { --muka-avatar-group-size: var(--avatar-size-md); }
14879
+ .muka-avatar-group--lg { --muka-avatar-group-size: var(--avatar-size-lg); }
14880
+ .muka-avatar-group--xl { --muka-avatar-group-size: var(--avatar-size-xl); }
14881
+
14882
+ .muka-avatar-group--tight { --muka-avatar-group-overlap: calc(var(--muka-avatar-group-size) * 2 / 3); }
14883
+ .muka-avatar-group--compact { --muka-avatar-group-overlap: calc(var(--muka-avatar-group-size) / 2); }
14884
+ .muka-avatar-group--spacious { --muka-avatar-group-overlap: calc(var(--muka-avatar-group-size) / 3); }
14885
+
14886
+ .muka-avatar-group--tight.muka-avatar-group--sm { --muka-avatar-group-overlap: var(--avatar-group-overlap-tight-sm); }
14887
+ .muka-avatar-group--tight.muka-avatar-group--2xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-tight-2xs); }
14888
+ .muka-avatar-group--tight.muka-avatar-group--3xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-tight-3xs); }
14889
+ .muka-avatar-group--compact.muka-avatar-group--sm { --muka-avatar-group-overlap: var(--avatar-group-overlap-compact-sm); }
14890
+ .muka-avatar-group--compact.muka-avatar-group--2xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-compact-2xs); }
14891
+ .muka-avatar-group--compact.muka-avatar-group--3xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-compact-3xs); }
14892
+ .muka-avatar-group--spacious.muka-avatar-group--sm { --muka-avatar-group-overlap: var(--avatar-group-overlap-spacious-sm); }
14893
+ .muka-avatar-group--spacious.muka-avatar-group--2xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-spacious-2xs); }
14894
+ .muka-avatar-group--spacious.muka-avatar-group--3xs { --muka-avatar-group-overlap: var(--avatar-group-overlap-spacious-3xs); }
14895
+
14896
+ .muka-avatar-group__item:not(:first-child) {
14897
+ margin-left: calc(-1 * var(--muka-avatar-group-overlap));
14898
+ }
14899
+
14752
14900
  /* Overflow avatar styling */
14753
14901
  .muka-avatar--overflow {
14754
14902
  background-color: var(--avatar-color-background-default);