gbs-add-block 2.1.0 → 2.3.0

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 (129) hide show
  1. package/.gbs/skills/gbs-components/SKILL.md +190 -134
  2. package/.gbs/skills/gbs-components/references/install.md +25 -3
  3. package/.gbs/skills/gbs-components/references/styling.md +246 -207
  4. package/CHANGELOG.md +74 -0
  5. package/README.md +154 -23
  6. package/index.cjs +212 -3
  7. package/package.json +41 -10
  8. package/schema/passport-v1.schema.json +204 -0
  9. package/source/beta-components/accordion/passport.json +259 -0
  10. package/source/beta-components/accordion/styles.css +207 -208
  11. package/source/beta-components/alert/passport.json +250 -0
  12. package/source/beta-components/alert/styles.css +154 -155
  13. package/source/beta-components/avatar/passport.json +294 -0
  14. package/source/beta-components/avatar/styles.css +225 -226
  15. package/source/beta-components/badge/passport.json +332 -0
  16. package/source/beta-components/badge/styles.css +203 -204
  17. package/source/beta-components/breadcrumb/passport.json +243 -0
  18. package/source/beta-components/breadcrumb/styles.css +138 -140
  19. package/source/beta-components/button/passport.json +402 -0
  20. package/source/beta-components/button/passport.manual.json +31 -0
  21. package/source/beta-components/button/styles.css +232 -234
  22. package/source/beta-components/card/passport.json +337 -0
  23. package/source/beta-components/card/styles.css +230 -232
  24. package/source/beta-components/checkbox/passport.json +456 -0
  25. package/source/beta-components/checkbox/styles.css +211 -213
  26. package/source/beta-components/combobox/passport.json +456 -0
  27. package/source/beta-components/combobox/styles.css +419 -417
  28. package/source/beta-components/data-grid/agent/coerce.ts +368 -0
  29. package/source/beta-components/data-grid/agent/contract.ts +410 -0
  30. package/source/beta-components/data-grid/agent/dataset.ts +92 -0
  31. package/source/beta-components/data-grid/agent/engine.ts +470 -0
  32. package/source/beta-components/data-grid/agent/executors.ts +155 -0
  33. package/source/beta-components/data-grid/agent/index.ts +79 -0
  34. package/source/beta-components/data-grid/agent/intent.ts +324 -0
  35. package/source/beta-components/data-grid/agent/operations.ts +335 -0
  36. package/source/beta-components/data-grid/agent/validate.ts +630 -0
  37. package/source/beta-components/data-grid/agent/webmcp.ts +107 -0
  38. package/source/beta-components/data-grid/index.ts +14 -7
  39. package/source/beta-components/data-grid/passport.json +1051 -0
  40. package/source/beta-components/data-grid/passport.manual.json +255 -0
  41. package/source/beta-components/data-grid/react/AskGrid.tsx +164 -0
  42. package/source/beta-components/data-grid/react/DataGrid.tsx +39 -0
  43. package/source/beta-components/data-grid/styles.css +874 -716
  44. package/source/beta-components/date-picker/passport.json +407 -0
  45. package/source/beta-components/date-picker/styles.css +445 -446
  46. package/source/beta-components/dialog/passport.json +344 -0
  47. package/source/beta-components/dialog/styles.css +280 -279
  48. package/source/beta-components/file-uploader/passport.json +518 -0
  49. package/source/beta-components/file-uploader/styles.css +394 -396
  50. package/source/beta-components/input/passport.json +536 -0
  51. package/source/beta-components/input/styles.css +295 -297
  52. package/source/beta-components/menu/passport.json +322 -0
  53. package/source/beta-components/menu/styles.css +224 -223
  54. package/source/beta-components/modal/passport.json +289 -0
  55. package/source/beta-components/modal/styles.css +241 -240
  56. package/source/beta-components/number-input/passport.json +541 -0
  57. package/source/beta-components/number-input/styles.css +230 -231
  58. package/source/beta-components/popover/passport.json +238 -0
  59. package/source/beta-components/popover/styles.css +148 -147
  60. package/source/beta-components/progress/passport.json +270 -0
  61. package/source/beta-components/progress/styles.css +200 -201
  62. package/source/beta-components/radio-group/passport.json +477 -0
  63. package/source/beta-components/radio-group/styles.css +269 -270
  64. package/source/beta-components/shared/core/agent/adapter.ts +65 -0
  65. package/source/beta-components/shared/core/agent/history.ts +120 -0
  66. package/source/beta-components/shared/core/agent/index.ts +46 -0
  67. package/source/beta-components/shared/core/agent/numbers.ts +217 -0
  68. package/source/beta-components/shared/core/agent/schema.ts +180 -0
  69. package/source/beta-components/shared/core/agent/types.ts +169 -0
  70. package/source/beta-components/shared/core/agent/webmcp.ts +328 -0
  71. package/source/beta-components/shared/index.ts +9 -0
  72. package/source/beta-components/shared/react/GramproAIProvider.tsx +50 -0
  73. package/source/beta-components/shared/react/useAskAgent.ts +217 -0
  74. package/source/beta-components/shared/styles.css +79 -0
  75. package/source/beta-components/shared/version.json +4 -4
  76. package/source/beta-components/shared/version.ts +6 -6
  77. package/source/beta-components/skeleton/passport.json +251 -0
  78. package/source/beta-components/skeleton/styles.css +185 -187
  79. package/source/beta-components/spinner/passport.json +245 -0
  80. package/source/beta-components/spinner/styles.css +173 -174
  81. package/source/beta-components/switch/passport.json +421 -0
  82. package/source/beta-components/switch/styles.css +227 -229
  83. package/source/beta-components/tabs/passport.json +315 -0
  84. package/source/beta-components/tabs/styles.css +263 -264
  85. package/source/beta-components/textarea/passport.json +382 -0
  86. package/source/beta-components/textarea/styles.css +158 -160
  87. package/source/beta-components/toaster/passport.json +221 -0
  88. package/source/beta-components/toaster/styles.css +282 -282
  89. package/source/beta-components/tooltip/passport.json +170 -0
  90. package/source/beta-components/tooltip/styles.css +71 -73
  91. package/tools/env.cjs +61 -0
  92. package/tools/passport/cli.cjs +79 -0
  93. package/tools/passport/extract.cjs +493 -0
  94. package/tools/passport/index.cjs +185 -0
  95. package/tools/passport/merge.cjs +131 -0
  96. package/tools/passport/policy.cjs +65 -0
  97. package/tools/passport/validate.cjs +277 -0
  98. package/tools/ts-require.cjs +79 -0
  99. package/source/beta-components/accordion/__tests__/core.test.ts +0 -58
  100. package/source/beta-components/alert/__tests__/core.test.ts +0 -17
  101. package/source/beta-components/avatar/__tests__/core.test.ts +0 -88
  102. package/source/beta-components/badge/__tests__/core.test.ts +0 -46
  103. package/source/beta-components/breadcrumb/__tests__/core.test.ts +0 -58
  104. package/source/beta-components/button/__tests__/core.test.ts +0 -31
  105. package/source/beta-components/card/__tests__/core.test.ts +0 -57
  106. package/source/beta-components/checkbox/__tests__/core.test.ts +0 -40
  107. package/source/beta-components/combobox/__tests__/core.test.ts +0 -134
  108. package/source/beta-components/data-grid/__tests__/core.test.ts +0 -356
  109. package/source/beta-components/data-grid/__tests__/export.test.ts +0 -70
  110. package/source/beta-components/data-grid/__tests__/pdf.test.ts +0 -209
  111. package/source/beta-components/date-picker/__tests__/core.test.ts +0 -273
  112. package/source/beta-components/dialog/__tests__/core.test.ts +0 -86
  113. package/source/beta-components/file-uploader/__tests__/core.test.ts +0 -395
  114. package/source/beta-components/input/__tests__/core.test.ts +0 -75
  115. package/source/beta-components/menu/__tests__/core.test.ts +0 -120
  116. package/source/beta-components/modal/__tests__/core.test.ts +0 -55
  117. package/source/beta-components/number-input/__tests__/core.test.ts +0 -151
  118. package/source/beta-components/progress/__tests__/core.test.ts +0 -56
  119. package/source/beta-components/radio-group/__tests__/core.test.ts +0 -64
  120. package/source/beta-components/shared/__tests__/boundaries.test.ts +0 -95
  121. package/source/beta-components/shared/__tests__/core.test.ts +0 -55
  122. package/source/beta-components/shared/__tests__/position.test.ts +0 -143
  123. package/source/beta-components/skeleton/__tests__/core.test.ts +0 -41
  124. package/source/beta-components/spinner/__tests__/core.test.ts +0 -48
  125. package/source/beta-components/switch/__tests__/core.test.ts +0 -64
  126. package/source/beta-components/tabs/__tests__/core.test.ts +0 -51
  127. package/source/beta-components/textarea/__tests__/core.test.ts +0 -38
  128. package/source/beta-components/toaster/__tests__/core.test.ts +0 -256
  129. package/source/beta-components/tooltip/__tests__/core.test.ts +0 -42
@@ -1,226 +1,225 @@
1
- /*
2
- * Avatar and AvatarGroup styles.
3
- *
4
- * The fallback colour comes from --av-hue-index, which the component sets from
5
- * a hash of the name: the same person is the same colour everywhere, and the
6
- * palette is generated rather than listed, so it follows a themed hue. Tokens
7
- * read the shared --gbs-* variables when they are set on an ancestor (set them
8
- * on :root to theme every component at once). Rules live in the `components`
9
- * layer, so utility classes passed through `className` / `classNames` override
10
- * them.
11
- */
12
-
13
- @layer gbs {
14
- .av-root,
15
- .av-group,
16
- .av-overflow {
17
- --av-fg: var(--gbs-fg, var(--dg-fg, light-dark(#18181b, #f4f4f5)));
18
- --av-muted: var(--gbs-muted, var(--dg-muted, light-dark(#71717a, #a1a1aa)));
19
- --av-bg: var(--gbs-bg, var(--dg-bg, light-dark(#ffffff, #0b0b0e)));
20
- --av-subtle: var(--gbs-subtle, light-dark(#f4f4f5, #1c1c20));
21
- --av-border: var(--gbs-border, var(--dg-border, light-dark(#e4e4e7, #27272a)));
22
- --av-success: var(--gbs-success, light-dark(#15803d, #4ade80));
23
- --av-warning: var(--gbs-warning, light-dark(#b45309, #fbbf24));
24
- --av-danger: var(--gbs-danger, var(--dg-danger, light-dark(#dc2626, #f87171)));
25
- --av-radius: var(--gbs-radius, var(--dg-radius, 8px));
26
- --av-size: 32px;
27
- --av-font-size: 13px;
28
- --av-hue-index: 0;
29
- /* Eight hues, 45° apart, starting at the blue end. */
30
- --av-hue: calc(210 + var(--av-hue-index) * 45);
31
-
32
- color-scheme: inherit;
33
- }
34
-
35
- :where(.dark, [data-theme="dark"]) :is(.av-root, .av-group, .av-overflow) {
36
- color-scheme: dark;
37
- }
38
- :where(.light, [data-theme="light"]) :is(.av-root, .av-group, .av-overflow) {
39
- color-scheme: light;
40
- }
41
-
42
- :where(.av-root, .av-group) *,
43
- :where(.av-root, .av-group) *::before,
44
- :where(.av-root, .av-group) *::after {
45
- box-sizing: border-box;
46
- }
47
-
48
- .av-root {
49
- position: relative;
50
- display: inline-flex;
51
- flex: none;
52
- align-items: center;
53
- justify-content: center;
54
- width: var(--av-size);
55
- height: var(--av-size);
56
- border-radius: 50%;
57
- background: var(--av-subtle);
58
- font-size: var(--av-font-size);
59
- font-weight: 600;
60
- line-height: 1;
61
- overflow: hidden;
62
- user-select: none;
63
- vertical-align: middle;
64
- }
65
- .av-root[data-shape="square"] {
66
- border-radius: var(--av-radius);
67
- overflow: visible;
68
- }
69
- .av-root[data-shape="square"] .av-image,
70
- .av-root[data-shape="square"] .av-fallback {
71
- border-radius: var(--av-radius);
72
- }
73
-
74
- .av-root[data-size="xs"] {
75
- --av-size: 20px;
76
- --av-font-size: 10px;
77
- }
78
- .av-root[data-size="sm"] {
79
- --av-size: 24px;
80
- --av-font-size: 11px;
81
- }
82
- .av-root[data-size="lg"] {
83
- --av-size: 40px;
84
- --av-font-size: 15px;
85
- }
86
- .av-root[data-size="xl"] {
87
- --av-size: 56px;
88
- --av-font-size: 20px;
89
- }
90
-
91
- .av-image {
92
- width: 100%;
93
- height: 100%;
94
- object-fit: cover;
95
- }
96
-
97
- /* `oklch` keeps every hue at the same lightness, so no one person's initials
98
- come out harder to read than another's — which is what a list of hand-picked
99
- hex pairs always ends up doing. */
100
- .av-fallback {
101
- display: flex;
102
- align-items: center;
103
- justify-content: center;
104
- width: 100%;
105
- height: 100%;
106
- background: oklch(from light-dark(oklch(0.93 0.05 0), oklch(0.32 0.06 0)) l c var(--av-hue));
107
- color: oklch(from light-dark(oklch(0.42 0.13 0), oklch(0.88 0.1 0)) l c var(--av-hue));
108
- text-transform: uppercase;
109
- }
110
- .av-fallback > svg {
111
- width: 60%;
112
- height: 60%;
113
- }
114
-
115
- .av-status {
116
- position: absolute;
117
- right: 0;
118
- bottom: 0;
119
- width: 30%;
120
- height: 30%;
121
- min-width: 8px;
122
- min-height: 8px;
123
- border: 2px solid var(--av-bg);
124
- border-radius: 50%;
125
- background: var(--av-muted);
126
- }
127
- .av-root[data-shape="square"] .av-status {
128
- right: -2px;
129
- bottom: -2px;
130
- }
131
- .av-status[data-status="online"] {
132
- background: var(--av-success);
133
- }
134
- .av-status[data-status="away"] {
135
- background: var(--av-warning);
136
- }
137
- .av-status[data-status="busy"] {
138
- background: var(--av-danger);
139
- }
140
-
141
- /* ---------------------------------------------------------------- group */
142
-
143
- .av-group {
144
- display: inline-flex;
145
- align-items: center;
146
- vertical-align: middle;
147
- }
148
- /* Each face overlaps the one before and is ringed in the page colour, so the
149
- stack reads as separate people rather than one smear. */
150
- .av-group > * {
151
- margin-inline-start: calc(var(--av-size) / -4);
152
- box-shadow: 0 0 0 2px var(--av-bg);
153
- }
154
- .av-group > *:first-child {
155
- margin-inline-start: 0;
156
- }
157
-
158
- .av-overflow {
159
- position: relative;
160
- display: inline-flex;
161
- flex: none;
162
- align-items: center;
163
- justify-content: center;
164
- width: var(--av-size);
165
- height: var(--av-size);
166
- border-radius: 50%;
167
- background: var(--av-subtle);
168
- /* Muted grey clears 4.5:1 on the page background but only reaches 4.39:1
169
- on this one, so the count moves a step towards the text colour. */
170
- color: color-mix(in oklab, var(--av-muted) 65%, var(--av-fg));
171
- font-size: calc(var(--av-font-size) - 1px);
172
- font-weight: 600;
173
- font-variant-numeric: tabular-nums;
174
- line-height: 1;
175
- }
176
- .av-overflow[data-shape="square"] {
177
- border-radius: var(--av-radius);
178
- }
179
- .av-group[data-size="xs"],
180
- .av-overflow[data-size="xs"] {
181
- --av-size: 20px;
182
- --av-font-size: 10px;
183
- }
184
- .av-group[data-size="sm"],
185
- .av-overflow[data-size="sm"] {
186
- --av-size: 24px;
187
- --av-font-size: 11px;
188
- }
189
- .av-group[data-size="lg"],
190
- .av-overflow[data-size="lg"] {
191
- --av-size: 40px;
192
- --av-font-size: 15px;
193
- }
194
- .av-group[data-size="xl"],
195
- .av-overflow[data-size="xl"] {
196
- --av-size: 56px;
197
- --av-font-size: 20px;
198
- }
199
- /* The group's size reaches the avatars inside it, unless one sets its own. */
200
- .av-group[data-size="xs"] .av-root:not([data-size]) {
201
- --av-size: 20px;
202
- --av-font-size: 10px;
203
- }
204
- .av-group[data-size="sm"] .av-root:not([data-size]) {
205
- --av-size: 24px;
206
- --av-font-size: 11px;
207
- }
208
- .av-group[data-size="lg"] .av-root:not([data-size]) {
209
- --av-size: 40px;
210
- --av-font-size: 15px;
211
- }
212
- .av-group[data-size="xl"] .av-root:not([data-size]) {
213
- --av-size: 56px;
214
- --av-font-size: 20px;
215
- }
216
-
217
- @media (forced-colors: active) {
218
- .av-root,
219
- .av-overflow {
220
- border: 1px solid CanvasText;
221
- }
222
- .av-status {
223
- border-color: Canvas;
224
- }
225
- }
226
- }
1
+ /*
2
+ * Avatar and AvatarGroup styles.
3
+ *
4
+ * The fallback colour comes from --av-hue-index, which the component sets from
5
+ * a hash of the name: the same person is the same colour everywhere, and the
6
+ * palette is generated rather than listed, so it follows a themed hue. Tokens
7
+ * read the shared --gbs-* variables when they are set on an ancestor (set them
8
+ * on :root to theme every component at once). Rules are unlayered: they beat a
9
+ * framework reset on specificity, and lose to anything you pass through
10
+ * `className`. With Tailwind v4, import this file after the framework and
11
+ * inside its components layer - see the README.
12
+ */
13
+
14
+ .av-root,
15
+ .av-group,
16
+ .av-overflow {
17
+ --av-fg: var(--gbs-fg, var(--dg-fg, light-dark(#18181b, #f4f4f5)));
18
+ --av-muted: var(--gbs-muted, var(--dg-muted, light-dark(#71717a, #a1a1aa)));
19
+ --av-bg: var(--gbs-bg, var(--dg-bg, light-dark(#ffffff, #0b0b0e)));
20
+ --av-subtle: var(--gbs-subtle, light-dark(#f4f4f5, #1c1c20));
21
+ --av-border: var(--gbs-border, var(--dg-border, light-dark(#e4e4e7, #27272a)));
22
+ --av-success: var(--gbs-success, light-dark(#15803d, #4ade80));
23
+ --av-warning: var(--gbs-warning, light-dark(#b45309, #fbbf24));
24
+ --av-danger: var(--gbs-danger, var(--dg-danger, light-dark(#dc2626, #f87171)));
25
+ --av-radius: var(--gbs-radius, var(--dg-radius, 8px));
26
+ --av-size: 32px;
27
+ --av-font-size: 13px;
28
+ --av-hue-index: 0;
29
+ /* Eight hues, 45° apart, starting at the blue end. */
30
+ --av-hue: calc(210 + var(--av-hue-index) * 45);
31
+
32
+ color-scheme: inherit;
33
+ }
34
+
35
+ :where(.dark, [data-theme="dark"]) :is(.av-root, .av-group, .av-overflow) {
36
+ color-scheme: dark;
37
+ }
38
+ :where(.light, [data-theme="light"]) :is(.av-root, .av-group, .av-overflow) {
39
+ color-scheme: light;
40
+ }
41
+
42
+ :where(.av-root, .av-group) *,
43
+ :where(.av-root, .av-group) *::before,
44
+ :where(.av-root, .av-group) *::after {
45
+ box-sizing: border-box;
46
+ }
47
+
48
+ .av-root {
49
+ position: relative;
50
+ display: inline-flex;
51
+ flex: none;
52
+ align-items: center;
53
+ justify-content: center;
54
+ width: var(--av-size);
55
+ height: var(--av-size);
56
+ border-radius: 50%;
57
+ background: var(--av-subtle);
58
+ font-size: var(--av-font-size);
59
+ font-weight: 600;
60
+ line-height: 1;
61
+ overflow: hidden;
62
+ user-select: none;
63
+ vertical-align: middle;
64
+ }
65
+ .av-root[data-shape="square"] {
66
+ border-radius: var(--av-radius);
67
+ overflow: visible;
68
+ }
69
+ .av-root[data-shape="square"] .av-image,
70
+ .av-root[data-shape="square"] .av-fallback {
71
+ border-radius: var(--av-radius);
72
+ }
73
+
74
+ .av-root[data-size="xs"] {
75
+ --av-size: 20px;
76
+ --av-font-size: 10px;
77
+ }
78
+ .av-root[data-size="sm"] {
79
+ --av-size: 24px;
80
+ --av-font-size: 11px;
81
+ }
82
+ .av-root[data-size="lg"] {
83
+ --av-size: 40px;
84
+ --av-font-size: 15px;
85
+ }
86
+ .av-root[data-size="xl"] {
87
+ --av-size: 56px;
88
+ --av-font-size: 20px;
89
+ }
90
+
91
+ .av-image {
92
+ width: 100%;
93
+ height: 100%;
94
+ object-fit: cover;
95
+ }
96
+
97
+ /* `oklch` keeps every hue at the same lightness, so no one person's initials
98
+ come out harder to read than another's — which is what a list of hand-picked
99
+ hex pairs always ends up doing. */
100
+ .av-fallback {
101
+ display: flex;
102
+ align-items: center;
103
+ justify-content: center;
104
+ width: 100%;
105
+ height: 100%;
106
+ background: oklch(from light-dark(oklch(0.93 0.05 0), oklch(0.32 0.06 0)) l c var(--av-hue));
107
+ color: oklch(from light-dark(oklch(0.42 0.13 0), oklch(0.88 0.1 0)) l c var(--av-hue));
108
+ text-transform: uppercase;
109
+ }
110
+ .av-fallback > svg {
111
+ width: 60%;
112
+ height: 60%;
113
+ }
114
+
115
+ .av-status {
116
+ position: absolute;
117
+ right: 0;
118
+ bottom: 0;
119
+ width: 30%;
120
+ height: 30%;
121
+ min-width: 8px;
122
+ min-height: 8px;
123
+ border: 2px solid var(--av-bg);
124
+ border-radius: 50%;
125
+ background: var(--av-muted);
126
+ }
127
+ .av-root[data-shape="square"] .av-status {
128
+ right: -2px;
129
+ bottom: -2px;
130
+ }
131
+ .av-status[data-status="online"] {
132
+ background: var(--av-success);
133
+ }
134
+ .av-status[data-status="away"] {
135
+ background: var(--av-warning);
136
+ }
137
+ .av-status[data-status="busy"] {
138
+ background: var(--av-danger);
139
+ }
140
+
141
+ /* ---------------------------------------------------------------- group */
142
+
143
+ .av-group {
144
+ display: inline-flex;
145
+ align-items: center;
146
+ vertical-align: middle;
147
+ }
148
+ /* Each face overlaps the one before and is ringed in the page colour, so the
149
+ stack reads as separate people rather than one smear. */
150
+ .av-group > * {
151
+ margin-inline-start: calc(var(--av-size) / -4);
152
+ box-shadow: 0 0 0 2px var(--av-bg);
153
+ }
154
+ .av-group > *:first-child {
155
+ margin-inline-start: 0;
156
+ }
157
+
158
+ .av-overflow {
159
+ position: relative;
160
+ display: inline-flex;
161
+ flex: none;
162
+ align-items: center;
163
+ justify-content: center;
164
+ width: var(--av-size);
165
+ height: var(--av-size);
166
+ border-radius: 50%;
167
+ background: var(--av-subtle);
168
+ /* Muted grey clears 4.5:1 on the page background but only reaches 4.39:1
169
+ on this one, so the count moves a step towards the text colour. */
170
+ color: color-mix(in oklab, var(--av-muted) 65%, var(--av-fg));
171
+ font-size: calc(var(--av-font-size) - 1px);
172
+ font-weight: 600;
173
+ font-variant-numeric: tabular-nums;
174
+ line-height: 1;
175
+ }
176
+ .av-overflow[data-shape="square"] {
177
+ border-radius: var(--av-radius);
178
+ }
179
+ .av-group[data-size="xs"],
180
+ .av-overflow[data-size="xs"] {
181
+ --av-size: 20px;
182
+ --av-font-size: 10px;
183
+ }
184
+ .av-group[data-size="sm"],
185
+ .av-overflow[data-size="sm"] {
186
+ --av-size: 24px;
187
+ --av-font-size: 11px;
188
+ }
189
+ .av-group[data-size="lg"],
190
+ .av-overflow[data-size="lg"] {
191
+ --av-size: 40px;
192
+ --av-font-size: 15px;
193
+ }
194
+ .av-group[data-size="xl"],
195
+ .av-overflow[data-size="xl"] {
196
+ --av-size: 56px;
197
+ --av-font-size: 20px;
198
+ }
199
+ /* The group's size reaches the avatars inside it, unless one sets its own. */
200
+ .av-group[data-size="xs"] .av-root:not([data-size]) {
201
+ --av-size: 20px;
202
+ --av-font-size: 10px;
203
+ }
204
+ .av-group[data-size="sm"] .av-root:not([data-size]) {
205
+ --av-size: 24px;
206
+ --av-font-size: 11px;
207
+ }
208
+ .av-group[data-size="lg"] .av-root:not([data-size]) {
209
+ --av-size: 40px;
210
+ --av-font-size: 15px;
211
+ }
212
+ .av-group[data-size="xl"] .av-root:not([data-size]) {
213
+ --av-size: 56px;
214
+ --av-font-size: 20px;
215
+ }
216
+
217
+ @media (forced-colors: active) {
218
+ .av-root,
219
+ .av-overflow {
220
+ border: 1px solid CanvasText;
221
+ }
222
+ .av-status {
223
+ border-color: Canvas;
224
+ }
225
+ }