@swis/genui-widgets 1.0.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.
package/LICENSE.md ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) swisnl <joris@swis.nl>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,297 @@
1
+ # `@swisnl/genui-widgets`
2
+
3
+
4
+ [![Software License](https://img.shields.io/packagist/l/swisnl/mcp-client.svg)](LICENSE.md)
5
+ [![Buy us a tree](https://img.shields.io/badge/Treeware-%F0%9F%8C%B3-lightgreen.svg)](https://plant.treeware.earth/swisnl/genui-widgets)
6
+ [![Made by SWIS](https://img.shields.io/badge/%F0%9F%9A%80-made%20by%20SWIS-%230737A9.svg)](https://www.swis.nl)
7
+
8
+ Render OpenAI ChatKit widget JSON in any web page with a single function call.
9
+
10
+ Pass a ChatKit widget payload directly to `render()` and it displays. No ChatKit dependency, no framework lock-in.
11
+
12
+ ![widget.png](docs/assets/widget.png)
13
+
14
+ ## Installation
15
+
16
+ ```bash
17
+ npm install @swisnl/genui-widgets
18
+ ```
19
+
20
+ ## IIFE bundle (no build step)
21
+
22
+ The standalone bundle includes Vue and injects CSS automatically.
23
+
24
+ ```html
25
+ <div id="widget"></div>
26
+ <script src="/dist/genui-widgets.js"></script>
27
+ <script>
28
+ GenUIWidgets.render(
29
+ document.getElementById('widget'),
30
+ chatKitPayload,
31
+ { format: 'chatkit' }
32
+ );
33
+ </script>
34
+ ```
35
+
36
+ ## Render an OpenAI widget payload
37
+
38
+ ```ts
39
+ import { render } from '@swisnl/genui-widgets';
40
+ import '@swisnl/genui-widgets/styles';
41
+
42
+ render(document.getElementById('widget'), chatKitPayload, {
43
+ format: 'chatkit',
44
+ actionHooks: [
45
+ async (action) => {
46
+ console.log('Action:', action);
47
+ },
48
+ ],
49
+ });
50
+ ```
51
+
52
+ ## Jinja templates
53
+
54
+ Templates can be Jinja strings that resolve to widget JSON at render time:
55
+
56
+ ```ts
57
+ render(container, `{"type":"Card","children":[{"type":"Title","value":{{ title | tojson }}}]}`, {
58
+ templateContext: { title: 'Hello' },
59
+ });
60
+ ```
61
+
62
+ ## `.widget` files
63
+
64
+ Extract the template from a `.widget` file and pass it directly to `render()`:
65
+
66
+ ```ts
67
+ import { extractTemplateFromWidgetFile, render } from '@swisnl/genui-widgets';
68
+
69
+ const template = extractTemplateFromWidgetFile(await file.text());
70
+ render(container, template);
71
+ ```
72
+
73
+
74
+ That's it. Pass the raw payload from the OpenAI response and the widget renders.
75
+
76
+ ## Vue component
77
+
78
+ ```vue
79
+ <script setup lang="ts">
80
+ import { provide } from 'vue';
81
+ import { ACTION_HOOKS_KEY, DynamicWidget, fromChatKit } from '@swisnl/genui-widgets';
82
+ import '@swisnl/genui-widgets/styles';
83
+
84
+ const template = fromChatKit(chatKitPayload);
85
+
86
+ provide(ACTION_HOOKS_KEY, [
87
+ async (action) => console.log('Action:', action),
88
+ ]);
89
+ </script>
90
+
91
+ <template>
92
+ <DynamicWidget :template="template" />
93
+ </template>
94
+ ```
95
+
96
+ ## Updating and destroying
97
+
98
+ `render()` returns an instance you can update or clean up:
99
+
100
+ ```ts
101
+ const widget = render(container, chatKitPayload, { format: 'chatkit' });
102
+
103
+ // Swap in a new payload
104
+ widget.update(newPayload);
105
+
106
+ // Clean up
107
+ widget.destroy();
108
+ ```
109
+
110
+ ## Theming
111
+
112
+ Widgets are styled through `--genui-*` CSS custom properties, all scoped to the `.genui-widget-root` container element. The library ships two ready-made themes and exposes the full API for custom themes.
113
+
114
+ ### Built-in themes
115
+
116
+ ```ts
117
+ import { defaultTheme, darkTheme, render } from '@swisnl/genui-widgets';
118
+
119
+ // Light (default — applied automatically when no theme is passed)
120
+ render(container, payload, { theme: defaultTheme });
121
+
122
+ // Dark
123
+ render(container, payload, { theme: darkTheme });
124
+ ```
125
+
126
+ ### Overriding with CSS variables
127
+
128
+ Because all tokens are plain CSS custom properties on `.genui-widget-root`, you can override them directly in a stylesheet without touching JavaScript at all:
129
+
130
+ ```css
131
+ /* Target all widget roots on the page */
132
+ .genui-widget-root {
133
+ --genui-surface: #f8f4ff;
134
+ --genui-background: #f8f4ff;
135
+ --genui-text-primary: #1a0040;
136
+ --genui-primary-60: #7c3aed;
137
+ --genui-primary-70: #6d28d9;
138
+ --genui-border-default: #e2e8f0;
139
+ --genui-base-size: 0.9rem;
140
+ }
141
+
142
+ /* Or scope overrides to a specific container */
143
+ #my-widget .genui-widget-root {
144
+ --genui-surface: #1e1e2e;
145
+ --genui-text-primary: #cdd6f4;
146
+ }
147
+ ```
148
+
149
+ ### Custom theme
150
+
151
+ Use `createTheme()` to merge overrides on top of a base theme:
152
+
153
+ ```ts
154
+ import { createTheme, defaultTheme, render } from '@swisnl/genui-widgets';
155
+
156
+ render(container, payload, {
157
+ theme: createTheme(defaultTheme, {
158
+ surface: '#f8f4ff',
159
+ background: '#f8f4ff',
160
+ textPrimary: '#1a0040',
161
+ palettes: {
162
+ primary: { 60: '#7c3aed', 70: '#6d28d9' },
163
+ },
164
+ }),
165
+ });
166
+ ```
167
+
168
+ ### Semantic color palettes
169
+
170
+ Each semantic color (`primary`, `secondary`, `success`, `danger`, `warning`, `info`, `discovery`, `caution`) exposes ten lightness steps (`5` → `90`) as CSS variables:
171
+
172
+ ```
173
+ --genui-primary-60 /* hex value */
174
+ --genui-primary-60-rgb /* "R, G, B" for alpha compositing */
175
+ ```
176
+
177
+ Override individual steps without replacing the whole palette:
178
+
179
+ ```ts
180
+ createTheme(defaultTheme, {
181
+ palettes: {
182
+ primary: { 60: '#2563eb', 70: '#1d4ed8' },
183
+ success: { 50: '#10b981' },
184
+ },
185
+ });
186
+ ```
187
+
188
+ ### Raw CSS variable overrides
189
+
190
+ Use the `overrides` escape hatch to set any `--genui-*` variable directly:
191
+
192
+ ```ts
193
+ createTheme(defaultTheme, {
194
+ overrides: {
195
+ 'base-size': '0.9rem',
196
+ '--genui-border-default': '#e2e8f0',
197
+ },
198
+ });
199
+ ```
200
+
201
+ Keys are automatically prefixed with `--genui-` when not already prefixed.
202
+
203
+ ### Applying a theme in Vue with `useTheme`
204
+
205
+ ```vue
206
+ <script setup lang="ts">
207
+ import { ref } from 'vue';
208
+ import { useTheme, darkTheme } from '@swisnl/genui-widgets';
209
+
210
+ const container = ref<HTMLElement | null>(null);
211
+ const { theme } = useTheme(container, darkTheme);
212
+
213
+ // Reactively update any token — the container updates automatically
214
+ theme.value = { ...theme.value, surface: '#1a1a2e' };
215
+ </script>
216
+
217
+ <template>
218
+ <div ref="container">
219
+ <DynamicWidget :template="widget" />
220
+ </div>
221
+ </template>
222
+ ```
223
+
224
+ ### Applying a theme manually
225
+
226
+ ```ts
227
+ import { applyTheme, createTheme, defaultTheme } from '@swisnl/genui-widgets';
228
+
229
+ applyTheme(document.getElementById('widget'), createTheme(defaultTheme, {
230
+ textPrimary: '#1a0040',
231
+ }));
232
+ ```
233
+
234
+ ### Updating the theme at runtime
235
+
236
+ ```ts
237
+ const widget = render(container, payload, { format: 'chatkit' });
238
+
239
+ widget.setTheme(darkTheme);
240
+ ```
241
+
242
+ ## Widget types
243
+
244
+ `Box` `Card` `Button` `Text` `Title` `Markdown` `Image` `Form` `Input` `Textarea` `Select` `Checkbox` `RadioGroup` `DatePicker` `Badge` `ListView` `ListViewItem` `Divider` `Spacer` `Row` `Col` `Label` `Caption` `Icon`
245
+
246
+ ## Development
247
+
248
+ ```bash
249
+ npm install
250
+ npm run demo # run the demo
251
+ npm run build # build both outputs
252
+ npm run lint
253
+ npm run typecheck
254
+ npm test
255
+ npm run test:visual
256
+ npm run test:visual:update # refresh visual baselines
257
+ npm run test:visual:playwright-image
258
+ npm run test:visual:update:playwright-image # refresh Linux baselines in the CI image
259
+ ```
260
+
261
+ Visual baselines are stored per OS with prefixes like `macos-` and `linux-`. If you need to refresh the screenshots used by GitHub Actions, run the Playwright image update command so the baselines are regenerated inside `mcr.microsoft.com/playwright:v1.58.2-noble`.
262
+
263
+ ## Build output
264
+
265
+ | File | Description |
266
+ |---|---|
267
+ | `dist/genui-widgets.esm.js` | ESM build for bundlers |
268
+ | `dist/genui-widgets.css` | Stylesheet for ESM consumers |
269
+ | `dist/genui-widgets.js` | Self-contained browser bundle with CSS injection |
270
+
271
+
272
+ ## Changelog
273
+
274
+ Please see [CHANGELOG](CHANGELOG.md) for more information on what has changed recently.
275
+
276
+ ## Contributing
277
+
278
+ Please see [CONTRIBUTING](https://github.com/spatie/.github/blob/main/CONTRIBUTING.md) for details.
279
+
280
+ ## Security Vulnerabilities
281
+
282
+ Please review [our security policy](../../security/policy) on how to report security vulnerabilities.
283
+
284
+ ## Credits
285
+
286
+ - [Joris Meijer](https://github.com/jormeijer)
287
+ - [All Contributors](../../contributors)
288
+
289
+ ## License
290
+
291
+ This package is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).
292
+
293
+ This package is [Treeware](https://treeware.earth). If you use it in production, then we ask that you [**buy the world a tree**](https://plant.treeware.earth/swisnl/mcp-client) to thank us for our work. By contributing to the Treeware forest you’ll be creating employment for local families and restoring wildlife habitats.
294
+
295
+ ## SWIS :heart: Open Source
296
+
297
+ [SWIS](https://www.swis.nl) is a web agency from Leiden, the Netherlands. We love working with open source software.
@@ -0,0 +1,7 @@
1
+ import type { WidgetTemplate } from '../types/widget';
2
+ export interface ChatKitNode {
3
+ type: string;
4
+ children?: ChatKitNode[];
5
+ [prop: string]: unknown;
6
+ }
7
+ export declare function fromChatKit(widgetRoot: ChatKitNode): WidgetTemplate;
@@ -0,0 +1,5 @@
1
+ import type { WidgetAction } from '../types/widget';
2
+ export declare function useActionDispatcher(): {
3
+ actionHooks: import("..").ActionHook[];
4
+ dispatchAction: (action: WidgetAction | null | undefined) => Promise<void>;
5
+ };
@@ -0,0 +1,227 @@
1
+ import { type Ref } from 'vue';
2
+ import type { ThemeConfig } from '../types/theme';
3
+ export declare function useTheme(containerRef: Ref<HTMLElement | null>, initialTheme?: ThemeConfig): {
4
+ theme: Ref<{
5
+ baseSize?: string | undefined;
6
+ palettes?: {
7
+ primary?: {
8
+ 5?: string | undefined;
9
+ 10?: string | undefined;
10
+ 20?: string | undefined;
11
+ 30?: string | undefined;
12
+ 40?: string | undefined;
13
+ 50?: string | undefined;
14
+ 60?: string | undefined;
15
+ 70?: string | undefined;
16
+ 80?: string | undefined;
17
+ 90?: string | undefined;
18
+ } | undefined;
19
+ secondary?: {
20
+ 5?: string | undefined;
21
+ 10?: string | undefined;
22
+ 20?: string | undefined;
23
+ 30?: string | undefined;
24
+ 40?: string | undefined;
25
+ 50?: string | undefined;
26
+ 60?: string | undefined;
27
+ 70?: string | undefined;
28
+ 80?: string | undefined;
29
+ 90?: string | undefined;
30
+ } | undefined;
31
+ success?: {
32
+ 5?: string | undefined;
33
+ 10?: string | undefined;
34
+ 20?: string | undefined;
35
+ 30?: string | undefined;
36
+ 40?: string | undefined;
37
+ 50?: string | undefined;
38
+ 60?: string | undefined;
39
+ 70?: string | undefined;
40
+ 80?: string | undefined;
41
+ 90?: string | undefined;
42
+ } | undefined;
43
+ danger?: {
44
+ 5?: string | undefined;
45
+ 10?: string | undefined;
46
+ 20?: string | undefined;
47
+ 30?: string | undefined;
48
+ 40?: string | undefined;
49
+ 50?: string | undefined;
50
+ 60?: string | undefined;
51
+ 70?: string | undefined;
52
+ 80?: string | undefined;
53
+ 90?: string | undefined;
54
+ } | undefined;
55
+ warning?: {
56
+ 5?: string | undefined;
57
+ 10?: string | undefined;
58
+ 20?: string | undefined;
59
+ 30?: string | undefined;
60
+ 40?: string | undefined;
61
+ 50?: string | undefined;
62
+ 60?: string | undefined;
63
+ 70?: string | undefined;
64
+ 80?: string | undefined;
65
+ 90?: string | undefined;
66
+ } | undefined;
67
+ info?: {
68
+ 5?: string | undefined;
69
+ 10?: string | undefined;
70
+ 20?: string | undefined;
71
+ 30?: string | undefined;
72
+ 40?: string | undefined;
73
+ 50?: string | undefined;
74
+ 60?: string | undefined;
75
+ 70?: string | undefined;
76
+ 80?: string | undefined;
77
+ 90?: string | undefined;
78
+ } | undefined;
79
+ discovery?: {
80
+ 5?: string | undefined;
81
+ 10?: string | undefined;
82
+ 20?: string | undefined;
83
+ 30?: string | undefined;
84
+ 40?: string | undefined;
85
+ 50?: string | undefined;
86
+ 60?: string | undefined;
87
+ 70?: string | undefined;
88
+ 80?: string | undefined;
89
+ 90?: string | undefined;
90
+ } | undefined;
91
+ caution?: {
92
+ 5?: string | undefined;
93
+ 10?: string | undefined;
94
+ 20?: string | undefined;
95
+ 30?: string | undefined;
96
+ 40?: string | undefined;
97
+ 50?: string | undefined;
98
+ 60?: string | undefined;
99
+ 70?: string | undefined;
100
+ 80?: string | undefined;
101
+ 90?: string | undefined;
102
+ } | undefined;
103
+ } | undefined;
104
+ surface?: string | undefined;
105
+ surfaceSecondary?: string | undefined;
106
+ surfaceTertiary?: string | undefined;
107
+ background?: string | undefined;
108
+ textPrimary?: string | undefined;
109
+ textSecondary?: string | undefined;
110
+ textTertiary?: string | undefined;
111
+ borderDefault?: string | undefined;
112
+ disabledBg?: string | undefined;
113
+ disabledText?: string | undefined;
114
+ overrides?: Record<string, string> | undefined;
115
+ }, ThemeConfig | {
116
+ baseSize?: string | undefined;
117
+ palettes?: {
118
+ primary?: {
119
+ 5?: string | undefined;
120
+ 10?: string | undefined;
121
+ 20?: string | undefined;
122
+ 30?: string | undefined;
123
+ 40?: string | undefined;
124
+ 50?: string | undefined;
125
+ 60?: string | undefined;
126
+ 70?: string | undefined;
127
+ 80?: string | undefined;
128
+ 90?: string | undefined;
129
+ } | undefined;
130
+ secondary?: {
131
+ 5?: string | undefined;
132
+ 10?: string | undefined;
133
+ 20?: string | undefined;
134
+ 30?: string | undefined;
135
+ 40?: string | undefined;
136
+ 50?: string | undefined;
137
+ 60?: string | undefined;
138
+ 70?: string | undefined;
139
+ 80?: string | undefined;
140
+ 90?: string | undefined;
141
+ } | undefined;
142
+ success?: {
143
+ 5?: string | undefined;
144
+ 10?: string | undefined;
145
+ 20?: string | undefined;
146
+ 30?: string | undefined;
147
+ 40?: string | undefined;
148
+ 50?: string | undefined;
149
+ 60?: string | undefined;
150
+ 70?: string | undefined;
151
+ 80?: string | undefined;
152
+ 90?: string | undefined;
153
+ } | undefined;
154
+ danger?: {
155
+ 5?: string | undefined;
156
+ 10?: string | undefined;
157
+ 20?: string | undefined;
158
+ 30?: string | undefined;
159
+ 40?: string | undefined;
160
+ 50?: string | undefined;
161
+ 60?: string | undefined;
162
+ 70?: string | undefined;
163
+ 80?: string | undefined;
164
+ 90?: string | undefined;
165
+ } | undefined;
166
+ warning?: {
167
+ 5?: string | undefined;
168
+ 10?: string | undefined;
169
+ 20?: string | undefined;
170
+ 30?: string | undefined;
171
+ 40?: string | undefined;
172
+ 50?: string | undefined;
173
+ 60?: string | undefined;
174
+ 70?: string | undefined;
175
+ 80?: string | undefined;
176
+ 90?: string | undefined;
177
+ } | undefined;
178
+ info?: {
179
+ 5?: string | undefined;
180
+ 10?: string | undefined;
181
+ 20?: string | undefined;
182
+ 30?: string | undefined;
183
+ 40?: string | undefined;
184
+ 50?: string | undefined;
185
+ 60?: string | undefined;
186
+ 70?: string | undefined;
187
+ 80?: string | undefined;
188
+ 90?: string | undefined;
189
+ } | undefined;
190
+ discovery?: {
191
+ 5?: string | undefined;
192
+ 10?: string | undefined;
193
+ 20?: string | undefined;
194
+ 30?: string | undefined;
195
+ 40?: string | undefined;
196
+ 50?: string | undefined;
197
+ 60?: string | undefined;
198
+ 70?: string | undefined;
199
+ 80?: string | undefined;
200
+ 90?: string | undefined;
201
+ } | undefined;
202
+ caution?: {
203
+ 5?: string | undefined;
204
+ 10?: string | undefined;
205
+ 20?: string | undefined;
206
+ 30?: string | undefined;
207
+ 40?: string | undefined;
208
+ 50?: string | undefined;
209
+ 60?: string | undefined;
210
+ 70?: string | undefined;
211
+ 80?: string | undefined;
212
+ 90?: string | undefined;
213
+ } | undefined;
214
+ } | undefined;
215
+ surface?: string | undefined;
216
+ surfaceSecondary?: string | undefined;
217
+ surfaceTertiary?: string | undefined;
218
+ background?: string | undefined;
219
+ textPrimary?: string | undefined;
220
+ textSecondary?: string | undefined;
221
+ textTertiary?: string | undefined;
222
+ borderDefault?: string | undefined;
223
+ disabledBg?: string | undefined;
224
+ disabledText?: string | undefined;
225
+ overrides?: Record<string, string> | undefined;
226
+ }>;
227
+ };
@@ -0,0 +1,2 @@
1
+ .genui-badge{white-space:nowrap;border:1px solid #0000;align-items:center;margin-inline-start:calc(var(--genui-base-size) * .375);font-weight:500;line-height:1;display:inline-flex}.genui-badge--pill{border-radius:9999px}.genui-badge:not(.genui-badge--pill){border-radius:calc(var(--genui-base-size) * .25)}.genui-badge--size-sm{font-size:calc(var(--genui-base-size) * .75);padding:calc(var(--genui-base-size) * .125) calc(var(--genui-base-size) * .5);height:1.25rem}.genui-badge--size-md{font-size:calc(var(--genui-base-size) * .875);padding:calc(var(--genui-base-size) * .125) calc(var(--genui-base-size) * .625);height:1.5rem}.genui-badge--size-lg{font-size:calc(var(--genui-base-size) * .875);padding:calc(var(--genui-base-size) * .25) calc(var(--genui-base-size) * .75);height:1.75rem}.genui-badge--color-primary.genui-badge--variant-solid{background-color:var(--genui-primary-60);color:var(--genui-primary-5)}.genui-badge--color-primary.genui-badge--variant-soft{background-color:rgba(var(--genui-primary-60-rgb), .1);color:var(--genui-primary-60)}.genui-badge--color-primary.genui-badge--variant-outline{border-color:var(--genui-primary-30);color:var(--genui-primary-60);background-color:#0000}.genui-badge--color-secondary.genui-badge--variant-solid{background-color:var(--genui-secondary-60);color:var(--genui-secondary-5)}.genui-badge--color-secondary.genui-badge--variant-soft{background-color:rgba(var(--genui-secondary-60-rgb), .1);color:var(--genui-secondary-60)}.genui-badge--color-secondary.genui-badge--variant-outline{border-color:var(--genui-secondary-30);color:var(--genui-secondary-60);background-color:#0000}.genui-badge--color-success.genui-badge--variant-solid{background-color:var(--genui-success-60);color:var(--genui-success-5)}.genui-badge--color-success.genui-badge--variant-soft{background-color:rgba(var(--genui-success-60-rgb), .1);color:var(--genui-success-60)}.genui-badge--color-success.genui-badge--variant-outline{border-color:var(--genui-success-30);color:var(--genui-success-60);background-color:#0000}.genui-badge--color-danger.genui-badge--variant-solid{background-color:var(--genui-danger-60);color:var(--genui-danger-5)}.genui-badge--color-danger.genui-badge--variant-soft{background-color:rgba(var(--genui-danger-60-rgb), .1);color:var(--genui-danger-60)}.genui-badge--color-danger.genui-badge--variant-outline{border-color:var(--genui-danger-30);color:var(--genui-danger-60);background-color:#0000}.genui-badge--color-warning.genui-badge--variant-solid{background-color:var(--genui-warning-60);color:var(--genui-warning-5)}.genui-badge--color-warning.genui-badge--variant-soft{background-color:rgba(var(--genui-warning-60-rgb), .1);color:var(--genui-warning-60)}.genui-badge--color-warning.genui-badge--variant-outline{border-color:var(--genui-warning-30);color:var(--genui-warning-60);background-color:#0000}.genui-badge--color-info.genui-badge--variant-solid{background-color:var(--genui-info-60);color:var(--genui-info-5)}.genui-badge--color-info.genui-badge--variant-soft{background-color:rgba(var(--genui-info-60-rgb), .1);color:var(--genui-info-60)}.genui-badge--color-info.genui-badge--variant-outline{border-color:var(--genui-info-30);color:var(--genui-info-60);background-color:#0000}.genui-badge--color-discovery.genui-badge--variant-solid{background-color:var(--genui-discovery-60);color:var(--genui-discovery-5)}.genui-badge--color-discovery.genui-badge--variant-soft{background-color:rgba(var(--genui-discovery-60-rgb), .1);color:var(--genui-discovery-60)}.genui-badge--color-discovery.genui-badge--variant-outline{border-color:var(--genui-discovery-30);color:var(--genui-discovery-60);background-color:#0000}.genui-badge--color-caution.genui-badge--variant-solid{background-color:var(--genui-caution-60);color:var(--genui-caution-5)}.genui-badge--color-caution.genui-badge--variant-soft{background-color:rgba(var(--genui-caution-60-rgb), .1);color:var(--genui-caution-60)}.genui-badge--color-caution.genui-badge--variant-outline{border-color:var(--genui-caution-30);color:var(--genui-caution-60);background-color:#0000}.genui-loader{margin:calc(var(--genui-base-size) * .125);width:var(--genui-base-size);height:var(--genui-base-size);border:calc(var(--genui-base-size) * .125) solid color-mix(in srgb, currentColor 50%, transparent);box-sizing:border-box;border-bottom-color:currentColor;border-radius:50%;animation:1s linear infinite genui-rotation;display:inline-block}@keyframes genui-rotation{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.genui-box{box-sizing:border-box;min-width:0}.genui-box--border{border:1px solid var(--genui-border-default)}.genui-box--flex{display:flex}.genui-box--action{cursor:pointer;outline:transparent solid calc(var(--genui-base-size) * .5);border-radius:calc(var(--genui-base-size) * .25)}.genui-box--action:hover{background-color:var(--genui-surface-tertiary);outline-color:var(--genui-surface-tertiary);transition:outline-width .2s}.genui-box--action:active{outline-width:calc(var(--genui-base-size) * .375);transition:outline-width .2s}.genui-box--action:focus-visible{outline-color:var(--genui-primary-60);outline-offset:2px;outline-width:1px}.genui-box--row.genui-box--gap .genui-badge,.genui-box--row.genui-box--gap .genui-button,.genui-box--row :first-child{margin-inline-start:0}.genui-image--flush+.genui-box{margin-top:var(--genui-base-size)}.genui-icon{color:currentColor;vertical-align:text-bottom;flex-shrink:0;display:inline-block}.genui-icon--size-xs{width:calc(var(--genui-base-size) * .75);height:calc(var(--genui-base-size) * .75)}.genui-icon--size-sm{width:calc(var(--genui-base-size) * .875);height:calc(var(--genui-base-size) * .875)}.genui-icon--size-md{width:var(--genui-base-size);height:var(--genui-base-size)}.genui-icon--size-lg{width:calc(var(--genui-base-size) * 1.125);height:calc(var(--genui-base-size) * 1.125)}.genui-icon--size-xl{width:calc(var(--genui-base-size) * 1.25);height:calc(var(--genui-base-size) * 1.25)}.genui-icon--size-2xl{width:calc(var(--genui-base-size) * 1.5);height:calc(var(--genui-base-size) * 1.5)}.genui-icon--size-3xl{width:calc(var(--genui-base-size) * 1.875);height:calc(var(--genui-base-size) * 1.875)}.genui-button{all:unset;box-sizing:border-box;margin:0;cursor:pointer;white-space:nowrap;border:1px solid #0000;justify-content:center;align-items:center;margin-inline-start:calc(var(--genui-base-size) * .375);font-weight:400;line-height:1;transition:all .2s;display:inline-flex}.genui-button:disabled{opacity:.5;cursor:not-allowed}.genui-button:focus-visible{outline:var(--genui-primary-50) solid 1px;outline-offset:2px;transition:none}.genui-button--size-3xs{height:22px;font-size:calc(var(--genui-base-size) * .625);padding:0 calc(var(--genui-base-size) * .25);gap:calc(var(--genui-base-size) * .25)}.genui-button--size-2xs{height:24px;font-size:calc(var(--genui-base-size) * .625);padding:0 calc(var(--genui-base-size) * .375);gap:calc(var(--genui-base-size) * .25)}.genui-button--size-xs{height:26px;font-size:calc(var(--genui-base-size) * .75);padding:0 calc(var(--genui-base-size) * .5);gap:calc(var(--genui-base-size) * .375)}.genui-button--size-sm{height:28px;font-size:calc(var(--genui-base-size) * .75);padding:0 calc(var(--genui-base-size) * .625);gap:calc(var(--genui-base-size) * .375)}.genui-button--size-md{height:32px;font-size:calc(var(--genui-base-size) * .875);padding:0 calc(var(--genui-base-size) * .75);gap:calc(var(--genui-base-size) * .5)}.genui-button--size-lg{height:36px;font-size:calc(var(--genui-base-size) * .875);padding:0 var(--genui-base-size);gap:calc(var(--genui-base-size) * .5)}.genui-button--size-xl{height:40px;font-size:var(--genui-base-size);padding:0 calc(var(--genui-base-size) * 1.25);gap:calc(var(--genui-base-size) * .625)}.genui-button--size-2xl{height:44px;font-size:calc(var(--genui-base-size) * 1.125);padding:0 calc(var(--genui-base-size) * 1.5);gap:calc(var(--genui-base-size) * .75)}.genui-button--size-3xl{height:48px;font-size:calc(var(--genui-base-size) * 1.25);padding:0 calc(var(--genui-base-size) * 1.75);gap:calc(var(--genui-base-size) * .875)}.genui-button--pill{border-radius:9999px}.genui-button:not(.genui-button--pill){border-radius:calc(var(--genui-base-size) * .375)}.genui-button--block{width:100%;display:flex}.genui-button--uniform{padding:0}.genui-button--uniform.genui-button--size-3xs{width:22px}.genui-button--uniform.genui-button--size-2xs{width:24px}.genui-button--uniform.genui-button--size-xs{width:26px}.genui-button--uniform.genui-button--size-sm{width:28px}.genui-button--uniform.genui-button--size-md{width:32px}.genui-button--uniform.genui-button--size-lg{width:36px}.genui-button--uniform.genui-button--size-xl{width:40px}.genui-button--uniform.genui-button--size-2xl{width:44px}.genui-button--uniform.genui-button--size-3xl{width:48px}.genui-button--color-primary.genui-button--variant-solid{background-color:var(--genui-primary-60);color:var(--genui-primary-5);border-color:#0000}.genui-button--color-primary.genui-button--variant-outline{color:var(--genui-primary-60);border-color:var(--genui-primary-30);background-color:#0000}.genui-button--color-primary.genui-button--variant-ghost{color:var(--genui-primary-60);background-color:#0000;border-color:#0000}.genui-button--color-secondary.genui-button--variant-solid{background-color:var(--genui-secondary-60);color:var(--genui-secondary-5);border-color:#0000}.genui-button--color-secondary.genui-button--variant-solid:hover:not(:disabled){background-color:var(--genui-secondary-70)}.genui-button--color-secondary.genui-button--variant-outline{color:var(--genui-secondary-60);border-color:var(--genui-secondary-30);background-color:#0000}.genui-button--color-secondary.genui-button--variant-outline:hover:not(:disabled){border-color:var(--genui-secondary-40);background-color:rgba(var(--genui-secondary-60-rgb), .06)}.genui-button--color-secondary.genui-button--variant-soft{background-color:rgba(var(--genui-secondary-60-rgb), .1);color:var(--genui-secondary-60);border-color:#0000}.genui-button--color-secondary.genui-button--variant-soft:hover:not(:disabled){background-color:rgba(var(--genui-secondary-60-rgb), .15)}.genui-button--color-secondary.genui-button--variant-ghost{color:var(--genui-secondary-60);background-color:#0000;border-color:#0000}.genui-button--color-secondary.genui-button--variant-ghost:hover:not(:disabled){background-color:rgba(var(--genui-secondary-60-rgb), .08)}.genui-button--color-success.genui-button--variant-solid{background-color:var(--genui-success-60);color:var(--genui-success-5);border-color:#0000}.genui-button--color-success.genui-button--variant-solid:hover:not(:disabled){background-color:var(--genui-success-70)}.genui-button--color-success.genui-button--variant-outline{color:var(--genui-success-60);border-color:var(--genui-success-30);background-color:#0000}.genui-button--color-success.genui-button--variant-outline:hover:not(:disabled){border-color:var(--genui-success-40);background-color:rgba(var(--genui-success-60-rgb), .06)}.genui-button--color-success.genui-button--variant-soft{background-color:rgba(var(--genui-success-60-rgb), .1);color:var(--genui-success-60);border-color:#0000}.genui-button--color-success.genui-button--variant-soft:hover:not(:disabled){background-color:rgba(var(--genui-success-60-rgb), .15)}.genui-button--color-success.genui-button--variant-ghost{color:var(--genui-success-60);background-color:#0000;border-color:#0000}.genui-button--color-success.genui-button--variant-ghost:hover:not(:disabled){background-color:rgba(var(--genui-success-60-rgb), .08)}.genui-button--color-danger.genui-button--variant-solid{background-color:var(--genui-danger-60);color:var(--genui-danger-5);border-color:#0000}.genui-button--color-danger.genui-button--variant-solid:hover:not(:disabled){background-color:var(--genui-danger-70)}.genui-button--color-danger.genui-button--variant-outline{color:var(--genui-danger-60);border-color:var(--genui-danger-30);background-color:#0000}.genui-button--color-danger.genui-button--variant-outline:hover:not(:disabled){border-color:var(--genui-danger-40);background-color:rgba(var(--genui-danger-60-rgb), .06)}.genui-button--color-danger.genui-button--variant-soft{background-color:rgba(var(--genui-danger-60-rgb), .1);color:var(--genui-danger-60);border-color:#0000}.genui-button--color-danger.genui-button--variant-soft:hover:not(:disabled){background-color:rgba(var(--genui-danger-60-rgb), .15)}.genui-button--color-danger.genui-button--variant-ghost{color:var(--genui-danger-60);background-color:#0000;border-color:#0000}.genui-button--color-danger.genui-button--variant-ghost:hover:not(:disabled){background-color:rgba(var(--genui-danger-60-rgb), .08)}.genui-button--color-warning.genui-button--variant-solid{background-color:var(--genui-warning-60);color:var(--genui-warning-5);border-color:#0000}.genui-button--color-warning.genui-button--variant-solid:hover:not(:disabled){background-color:var(--genui-warning-70)}.genui-button--color-warning.genui-button--variant-outline{color:var(--genui-warning-60);border-color:var(--genui-warning-30);background-color:#0000}.genui-button--color-warning.genui-button--variant-outline:hover:not(:disabled){border-color:var(--genui-warning-40);background-color:rgba(var(--genui-warning-60-rgb), .06)}.genui-button--color-warning.genui-button--variant-soft{background-color:rgba(var(--genui-warning-60-rgb), .1);color:var(--genui-warning-60);border-color:#0000}.genui-button--color-warning.genui-button--variant-soft:hover:not(:disabled){background-color:rgba(var(--genui-warning-60-rgb), .15)}.genui-button--color-warning.genui-button--variant-ghost{color:var(--genui-warning-60);background-color:#0000;border-color:#0000}.genui-button--color-warning.genui-button--variant-ghost:hover:not(:disabled){background-color:rgba(var(--genui-warning-60-rgb), .08)}.genui-button--color-info.genui-button--variant-solid{background-color:var(--genui-info-60);color:var(--genui-info-5);border-color:#0000}.genui-button--color-info.genui-button--variant-solid:hover:not(:disabled){background-color:var(--genui-info-70)}.genui-button--color-info.genui-button--variant-outline{color:var(--genui-info-60);border-color:var(--genui-info-30);background-color:#0000}.genui-button--color-info.genui-button--variant-outline:hover:not(:disabled){border-color:var(--genui-info-40);background-color:rgba(var(--genui-info-60-rgb), .06)}.genui-button--color-info.genui-button--variant-soft{background-color:rgba(var(--genui-info-60-rgb), .1);color:var(--genui-info-60);border-color:#0000}.genui-button--color-info.genui-button--variant-soft:hover:not(:disabled){background-color:rgba(var(--genui-info-60-rgb), .15)}.genui-button--color-info.genui-button--variant-ghost{color:var(--genui-info-60);background-color:#0000;border-color:#0000}.genui-button--color-info.genui-button--variant-ghost:hover:not(:disabled){background-color:rgba(var(--genui-info-60-rgb), .08)}.genui-button--color-discovery.genui-button--variant-solid{background-color:var(--genui-discovery-60);color:var(--genui-discovery-5);border-color:#0000}.genui-button--color-discovery.genui-button--variant-solid:hover:not(:disabled){background-color:var(--genui-discovery-70)}.genui-button--color-discovery.genui-button--variant-outline{color:var(--genui-discovery-60);border-color:var(--genui-discovery-30);background-color:#0000}.genui-button--color-discovery.genui-button--variant-outline:hover:not(:disabled){border-color:var(--genui-discovery-40);background-color:rgba(var(--genui-discovery-60-rgb), .06)}.genui-button--color-discovery.genui-button--variant-soft{background-color:rgba(var(--genui-discovery-60-rgb), .1);color:var(--genui-discovery-60);border-color:#0000}.genui-button--color-discovery.genui-button--variant-soft:hover:not(:disabled){background-color:rgba(var(--genui-discovery-60-rgb), .15)}.genui-button--color-discovery.genui-button--variant-ghost{color:var(--genui-discovery-60);background-color:#0000;border-color:#0000}.genui-button--color-discovery.genui-button--variant-ghost:hover:not(:disabled){background-color:rgba(var(--genui-discovery-60-rgb), .08)}.genui-button--color-caution.genui-button--variant-solid{background-color:var(--genui-caution-60);color:var(--genui-caution-5);border-color:#0000}.genui-button--color-caution.genui-button--variant-solid:hover:not(:disabled){background-color:var(--genui-caution-70)}.genui-button--color-caution.genui-button--variant-outline{color:var(--genui-caution-60);border-color:var(--genui-caution-30);background-color:#0000}.genui-button--color-caution.genui-button--variant-outline:hover:not(:disabled){border-color:var(--genui-caution-40);background-color:rgba(var(--genui-caution-60-rgb), .06)}.genui-button--color-caution.genui-button--variant-soft{background-color:rgba(var(--genui-caution-60-rgb), .1);color:var(--genui-caution-60);border-color:#0000}.genui-button--color-caution.genui-button--variant-soft:hover:not(:disabled){background-color:rgba(var(--genui-caution-60-rgb), .15)}.genui-button--color-caution.genui-button--variant-ghost{color:var(--genui-caution-60);background-color:#0000;border-color:#0000}.genui-button--color-caution.genui-button--variant-ghost:hover:not(:disabled){background-color:rgba(var(--genui-caution-60-rgb), .08)}.genui-button--color-primary.genui-button--variant-solid{background-color:var(--genui-primary-90)}.genui-button--color-primary.genui-button--variant-solid:hover:not(:disabled){background-color:var(--genui-primary-80)}.genui-button--color-primary.genui-button--variant-outline{color:var(--genui-primary-90);border-color:var(--genui-primary-40)}.genui-button--color-primary.genui-button--variant-outline:hover:not(:disabled){border-color:var(--genui-primary-50);background-color:rgba(var(--genui-primary-90-rgb), .06)}.genui-button--color-primary.genui-button--variant-soft{background-color:rgba(var(--genui-primary-90-rgb), .1);color:var(--genui-primary-90);border-color:#0000}.genui-button--color-primary.genui-button--variant-soft:hover:not(:disabled){background-color:rgba(var(--genui-primary-90-rgb), .15)}.genui-button--color-primary.genui-button--variant-ghost{color:var(--genui-primary-90)}.genui-button--color-primary.genui-button--variant-ghost:hover:not(:disabled){background-color:rgba(var(--genui-primary-90-rgb), .08)}.genui-button--block{margin-inline-start:0}.genui-caption{color:var(--genui-text-secondary);margin:0;line-height:1.5}.genui-caption--truncate{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.genui-caption--align-start{text-align:start}.genui-caption--align-center{text-align:center}.genui-caption--align-end{text-align:end}.genui-caption--weight-normal{font-weight:400}.genui-caption--weight-medium{font-weight:500}.genui-caption--weight-semibold{font-weight:600}.genui-caption--weight-bold{font-weight:700}.genui-caption--size-sm{font-size:calc(var(--genui-base-size) * .625)}.genui-caption--size-md{font-size:calc(var(--genui-base-size) * .75)}.genui-caption--size-lg{font-size:calc(var(--genui-base-size) * .875)}.genui-card-wrapper{gap:var(--genui-base-size);flex-direction:column;align-items:flex-start;display:flex}.genui-card{width:100%;box-shadow:0 calc(var(--genui-base-size) * .25) calc(var(--genui-base-size) * .5) 0 #0000001a;overflow:hidden}.genui-card>:not(:first-child){margin-block-start:var(--genui-base-size)}.genui-card-wrapper__actions{display:flex}.genui-card.genui-card--xs{width:calc(var(--genui-base-size) * 16)}.genui-card.genui-card--sm{width:calc(var(--genui-base-size) * 22.5)}.genui-card.genui-card--md{width:calc(var(--genui-base-size) * 26.25)}.genui-card.genui-card--lg{width:calc(var(--genui-base-size) * 32)}.genui-card.genui-card--xl{width:calc(var(--genui-base-size) * 40)}.genui-checkbox{align-items:center;gap:calc(var(--genui-base-size) * .5);cursor:pointer;font-size:calc(var(--genui-base-size) * .875);color:var(--genui-text-primary);-webkit-user-select:none;user-select:none;display:inline-flex}.genui-checkbox--disabled{opacity:.6;cursor:not-allowed;color:var(--genui-disabled-text)}.genui-checkbox--disabled .genui-checkbox__control{background:var(--genui-disabled-bg)}.genui-checkbox__input{opacity:0;width:0;height:0;position:absolute}.genui-checkbox__input:checked+.genui-checkbox__control{background:var(--genui-primary-60);border-color:var(--genui-primary-60)}.genui-checkbox__input:checked+.genui-checkbox__control .genui-checkbox__icon{opacity:1;transform:scale(1)}.genui-checkbox__input:focus-visible+.genui-checkbox__control{border-color:var(--genui-primary-60);box-shadow:0 0 0 2px #0000001a}.genui-checkbox__control{width:var(--genui-base-size);height:var(--genui-base-size);border:1px solid var(--genui-border-default);border-radius:calc(var(--genui-base-size) * .25);background:var(--genui-surface);justify-content:center;align-items:center;transition:all .2s;display:flex}.genui-checkbox__icon{width:calc(var(--genui-base-size) * .75);height:calc(var(--genui-base-size) * .75);color:var(--genui-surface);opacity:0;transition:all .2s;transform:scale(.5)}.genui-checkbox__label{line-height:1.25}.genui-datepicker-wrapper{box-sizing:border-box;border-radius:calc(var(--genui-base-size) * .375);align-items:center;width:100%;transition:all .2s;display:inline-flex;overflow:hidden}.genui-datepicker{all:unset;width:100%;color:var(--genui-text-primary);cursor:text;background:0 0;font-family:inherit}.genui-datepicker::-webkit-calendar-picker-indicator{cursor:pointer;opacity:.6;transition:all .2s}.genui-datepicker::-webkit-calendar-picker-indicator:hover{opacity:1}.genui-datepicker-wrapper--outline{border:1px solid var(--genui-border-default);background:var(--genui-surface)}.genui-datepicker-wrapper--outline:focus-within{border-color:var(--genui-primary-60);box-shadow:0 0 0 2px #0000001a}.genui-datepicker-wrapper--soft{background:var(--genui-surface-secondary);border:none}.genui-datepicker-wrapper--soft:focus-within{background:var(--genui-surface-tertiary)}.genui-datepicker-wrapper--ghost{background:0 0;border:none}.genui-datepicker-wrapper--ghost:hover{background:var(--genui-surface-secondary)}.genui-datepicker-wrapper--solid{background:var(--genui-primary-60);color:var(--genui-surface)}.genui-datepicker-wrapper--solid .genui-datepicker{color:var(--genui-surface)}.genui-datepicker-wrapper--disabled{opacity:.6;background-color:var(--genui-disabled-bg);cursor:not-allowed}.genui-datepicker-wrapper--disabled .genui-datepicker{cursor:not-allowed;color:var(--genui-disabled-text)}.genui-datepicker-wrapper--3xs{padding:calc(var(--genui-base-size) * .125) calc(var(--genui-base-size) * .25);font-size:calc(var(--genui-base-size) * .625)}.genui-datepicker-wrapper--2xs{padding:calc(var(--genui-base-size) * .25) calc(var(--genui-base-size) * .375);font-size:calc(var(--genui-base-size) * .75)}.genui-datepicker-wrapper--xs{padding:calc(var(--genui-base-size) * .375) calc(var(--genui-base-size) * .5);font-size:calc(var(--genui-base-size) * .75)}.genui-datepicker-wrapper--sm{padding:calc(var(--genui-base-size) * .375) calc(var(--genui-base-size) * .625);font-size:calc(var(--genui-base-size) * .875)}.genui-datepicker-wrapper--md{padding:calc(var(--genui-base-size) * .5) calc(var(--genui-base-size) * .75);font-size:calc(var(--genui-base-size) * .875)}.genui-datepicker-wrapper--lg{padding:calc(var(--genui-base-size) * .625) calc(var(--genui-base-size) * .875);font-size:var(--genui-base-size)}.genui-datepicker-wrapper--xl{padding:calc(var(--genui-base-size) * .75) var(--genui-base-size);font-size:calc(var(--genui-base-size) * 1.125)}.genui-datepicker-wrapper--2xl{padding:var(--genui-base-size) calc(var(--genui-base-size) * 1.25);font-size:calc(var(--genui-base-size) * 1.25)}.genui-datepicker-wrapper--3xl{padding:calc(var(--genui-base-size) * 1.25) calc(var(--genui-base-size) * 1.5);font-size:calc(var(--genui-base-size) * 1.5)}.genui-divider{margin:var(--genui-base-size) 0;border:none;width:100%}.genui-divider--color-default{background-color:var(--genui-border-default)}.genui-divider--color-subtle{background-color:var(--genui-secondary-10)}.genui-divider--color-strong{background-color:var(--genui-secondary-40)}.genui-divider--flush{margin-left:calc(var(--genui-base-size) * -1);margin-right:calc(var(--genui-base-size) * -1);width:calc(var(--genui-base-size) * 102%)}.genui-form{width:100%}.genui-image{border-radius:calc(var(--genui-base-size) * .375);max-width:100%;display:block}.genui-image--frame{padding:calc(var(--genui-base-size) * .25);background-color:#fff;border:1px solid #e4e4e7}.genui-image--flush{border-radius:0;width:calc(100% + 3rem);max-width:calc(100% + 3rem);margin:0 -1.5rem}.genui-image--flush:first-child{margin-top:-1.5rem}.genui-image--flush:last-child{margin-bottom:-1.5rem}.genui-input-wrapper{box-sizing:border-box;border-radius:calc(var(--genui-base-size) * .375);align-items:center;width:100%;transition:all .2s;display:flex;overflow:hidden}.genui-input{all:unset;width:100%;color:var(--genui-text-primary);background:0 0;font-family:inherit}.genui-input::placeholder{color:var(--genui-text-tertiary)}.genui-input-wrapper--outline{border:1px solid var(--genui-border-default);background:var(--genui-surface)}.genui-input-wrapper--outline:focus-within{border-color:var(--genui-primary-60);box-shadow:0 0 0 2px #0000001a}.genui-input-wrapper--soft{background:var(--genui-surface-secondary);border:none}.genui-input-wrapper--soft:focus-within{background:var(--genui-surface-tertiary)}.genui-input-wrapper--error{border-color:var(--genui-danger-60)}.genui-input-wrapper--disabled{opacity:.6;background-color:var(--genui-disabled-bg);cursor:not-allowed}.genui-input-wrapper--disabled .genui-input{cursor:not-allowed;color:var(--genui-disabled-text)}.genui-input-wrapper--3xs{padding:calc(var(--genui-base-size) * .125) calc(var(--genui-base-size) * .25);font-size:calc(var(--genui-base-size) * .625)}.genui-input-wrapper--2xs{padding:calc(var(--genui-base-size) * .25) calc(var(--genui-base-size) * .375);font-size:calc(var(--genui-base-size) * .75)}.genui-input-wrapper--xs{padding:calc(var(--genui-base-size) * .375) calc(var(--genui-base-size) * .5);font-size:calc(var(--genui-base-size) * .75)}.genui-input-wrapper--sm{padding:calc(var(--genui-base-size) * .375) calc(var(--genui-base-size) * .625);font-size:calc(var(--genui-base-size) * .875)}.genui-input-wrapper--md{padding:calc(var(--genui-base-size) * .5) calc(var(--genui-base-size) * .75);font-size:calc(var(--genui-base-size) * .875)}.genui-input-wrapper--lg{padding:calc(var(--genui-base-size) * .625) calc(var(--genui-base-size) * .875);font-size:var(--genui-base-size)}.genui-input-wrapper--xl{padding:calc(var(--genui-base-size) * .75) var(--genui-base-size);font-size:calc(var(--genui-base-size) * 1.125)}.genui-input-wrapper--2xl{padding:var(--genui-base-size) calc(var(--genui-base-size) * 1.25);font-size:calc(var(--genui-base-size) * 1.25)}.genui-input-wrapper--3xl{padding:calc(var(--genui-base-size) * 1.25) calc(var(--genui-base-size) * 1.5);font-size:calc(var(--genui-base-size) * 1.5)}.genui-label{margin-bottom:calc(var(--genui-base-size) * .25);color:var(--genui-text-secondary);line-height:1.25;display:block}.genui-label--align-start{text-align:start}.genui-label--align-center{text-align:center}.genui-label--align-end{text-align:end}.genui-label--weight-normal{font-weight:400}.genui-label--weight-medium{font-weight:500}.genui-label--weight-semibold{font-weight:600}.genui-label--weight-bold{font-weight:700}.genui-label--size-xs{font-size:calc(var(--genui-base-size) * .75)}.genui-label--size-sm{font-size:calc(var(--genui-base-size) * .875)}.genui-label--size-md{font-size:var(--genui-base-size)}.genui-label--size-lg{font-size:calc(var(--genui-base-size) * 1.125)}.genui-label--size-xl{font-size:calc(var(--genui-base-size) * 1.25)}.genui-list,.genui-list-item{width:100%}.genui-markdown ul,.genui-markdown ol,.genui-markdown table,.genui-markdown blockquote,.genui-markdown pre,.genui-markdown p{color:var(--genui-text-primary);font-size:var(--genui-base-size);margin:0 0 var(--genui-base-size);padding:0;line-height:1.625}.genui-markdown ul:last-child,.genui-markdown ol:last-child,.genui-markdown table:last-child,.genui-markdown blockquote:last-child,.genui-markdown pre:last-child,.genui-markdown p:last-child{margin-bottom:0}.genui-markdown ul{padding-left:calc(var(--genui-base-size) * 1.5);list-style:outside}.genui-markdown ol{padding-left:calc(var(--genui-base-size) * 1.25);list-style:auto}.genui-markdown table{border-spacing:0;border-radius:calc(var(--genui-base-size) * .5);border:1px solid var(--genui-border-default);width:100%;overflow:hidden}.genui-markdown table th,.genui-markdown table td{font-size:var(--genui-base-size);text-align:left;vertical-align:middle;color:var(--genui-text-primary);border:0;border-bottom:1px solid var(--genui-border-default);padding:calc(var(--genui-base-size) * .45) calc(var(--genui-base-size) * .5) calc(var(--genui-base-size) * .25);line-height:1.625}.genui-markdown table th{background-color:var(--genui-surface-secondary);color:var(--genui-text-primary);font-weight:700}.genui-markdown blockquote{padding:calc(var(--genui-base-size) * .25) var(--genui-base-size);margin-left:calc(var(--genui-base-size) * .125);border-left:calc(var(--genui-base-size) * .25) solid var(--genui-border-default);color:var(--genui-text-secondary);font-style:italic}.genui-markdown pre,.genui-markdown code{padding:calc(var(--genui-base-size) * .125) calc(var(--genui-base-size) * .25);font-size:var(--genui-base-size);font-variant-numeric:tabular-nums lining-nums slashed-zero;font-feature-settings:"tnum", "zero";unicode-bidi:isolate;font-family:monospace}.genui-markdown code{-webkit-box-decoration-break:clone;box-decoration-break:clone;background:var(--genui-surface-secondary);border-radius:calc(var(--genui-base-size) * .125);white-space:pre-wrap;margin:0}.genui-markdown pre{background:var(--genui-surface-tertiary);border-radius:calc(var(--genui-base-size) * .5);padding:calc(var(--genui-base-size) * .5) var(--genui-base-size);tab-size:4;box-shadow:inset 0 calc(var(--genui-base-size) * .625) calc(var(--genui-base-size) * .5) calc(var(--genui-base-size) * -.625) var(--genui-border-default), inset 0 calc(var(--genui-base-size) * -.625) calc(var(--genui-base-size) * .5) calc(var(--genui-base-size) * -.625) var(--genui-border-default);overflow-x:auto}.genui-markdown pre code{all:unset}.genui-markdown strong{font-weight:600}.genui-markdown a:not([class]){color:inherit;font-weight:600;text-decoration:underline}.genui-radio-group{gap:var(--genui-base-size);display:flex}.genui-radio-group--col{gap:calc(var(--genui-base-size) * .5);flex-direction:column}.genui-radio{align-items:center;gap:calc(var(--genui-base-size) * .5);cursor:pointer;font-size:calc(var(--genui-base-size) * .875);color:var(--genui-text-primary);-webkit-user-select:none;user-select:none;display:inline-flex}.genui-radio--disabled{opacity:.6;cursor:not-allowed;color:var(--genui-disabled-text)}.genui-radio--disabled .genui-radio__control{background:var(--genui-disabled-bg)}.genui-radio__input{opacity:0;width:0;height:0;position:absolute}.genui-radio__input:checked+.genui-radio__control{border-color:var(--genui-primary-60)}.genui-radio__input:checked+.genui-radio__control:after{transform:scale(1)}.genui-radio__input:focus-visible+.genui-radio__control{box-shadow:0 0 0 2px #0000001a}.genui-radio__control{width:var(--genui-base-size);height:var(--genui-base-size);border:1px solid var(--genui-border-default);background:var(--genui-surface);border-radius:50%;justify-content:center;align-items:center;transition:all .2s;display:flex;position:relative}.genui-radio__control:after{content:"";width:calc(var(--genui-base-size) * .5);height:calc(var(--genui-base-size) * .5);background:var(--genui-primary-60);border-radius:50%;transition:transform .2s;transform:scale(0)}.genui-radio__label{line-height:1.25}.genui-row{align-items:center}.genui-select-wrapper{box-sizing:border-box;border-radius:calc(var(--genui-base-size) * .375);background:var(--genui-surface);align-items:center;transition:all .2s;display:inline-flex;position:relative}.genui-select-wrapper--block{width:100%;display:flex}.genui-select-wrapper--pill{border-radius:calc(var(--genui-base-size) * 999)}.genui-select{all:unset;box-sizing:border-box;width:100%;color:var(--genui-text-primary);appearance:none;padding-right:calc(var(--genui-base-size) * 2);cursor:pointer;background:0 0;font-family:inherit}.genui-select::placeholder{color:var(--genui-text-secondary)}.genui-select-arrow{right:calc(var(--genui-base-size) * .75);pointer-events:none;color:var(--genui-text-secondary);align-items:center;display:flex;position:absolute}.genui-select-wrapper--outline{border:1px solid var(--genui-border-default);background:var(--genui-surface)}.genui-select-wrapper--outline:focus-within{border-color:var(--genui-primary-60);box-shadow:0 0 0 2px #0000001a}.genui-select-wrapper--soft{background:var(--genui-surface-secondary);border:none}.genui-select-wrapper--soft:focus-within{background:var(--genui-surface-tertiary)}.genui-select-wrapper--ghost{background:0 0;border:none}.genui-select-wrapper--ghost:hover{background:var(--genui-surface-secondary)}.genui-select-wrapper--solid{background:var(--genui-primary-60);color:var(--genui-surface)}.genui-select-wrapper--solid .genui-select{color:var(--genui-surface)}.genui-select-wrapper--solid .genui-select-arrow{color:var(--genui-surface-secondary)}.genui-select-wrapper--disabled{opacity:.6;background-color:var(--genui-disabled-bg);cursor:not-allowed}.genui-select-wrapper--disabled .genui-select{cursor:not-allowed;color:var(--genui-disabled-text)}.genui-select-wrapper--disabled .genui-select-arrow{color:var(--genui-disabled-text)}.genui-select option{background:var(--genui-surface);color:var(--genui-text-primary)}.genui-select-wrapper--3xs .genui-select{padding:calc(var(--genui-base-size) * .125) calc(var(--genui-base-size) * .25);font-size:calc(var(--genui-base-size) * .625)}.genui-select-wrapper--2xs .genui-select{padding:calc(var(--genui-base-size) * .25) calc(var(--genui-base-size) * .375);font-size:calc(var(--genui-base-size) * .75)}.genui-select-wrapper--xs .genui-select{padding:calc(var(--genui-base-size) * .375) calc(var(--genui-base-size) * .5);font-size:calc(var(--genui-base-size) * .75)}.genui-select-wrapper--sm .genui-select{padding:calc(var(--genui-base-size) * .375) calc(var(--genui-base-size) * .625);font-size:calc(var(--genui-base-size) * .875)}.genui-select-wrapper--md .genui-select{padding:calc(var(--genui-base-size) * .5) calc(var(--genui-base-size) * .75);font-size:calc(var(--genui-base-size) * .875)}.genui-select-wrapper--lg .genui-select{padding:calc(var(--genui-base-size) * .625) calc(var(--genui-base-size) * .875);font-size:var(--genui-base-size)}.genui-select-wrapper--xl .genui-select{padding:calc(var(--genui-base-size) * .75) var(--genui-base-size);font-size:calc(var(--genui-base-size) * 1.125)}.genui-select-wrapper--2xl .genui-select{padding:var(--genui-base-size) calc(var(--genui-base-size) * 1.25);font-size:calc(var(--genui-base-size) * 1.25)}.genui-select-wrapper--3xl .genui-select{padding:calc(var(--genui-base-size) * 1.25) calc(var(--genui-base-size) * 1.5);font-size:calc(var(--genui-base-size) * 1.5)}.genui-spacer{place-self:stretch stretch;display:block}.genui-text{color:var(--genui-text-primary);margin:0;line-height:1.5}.genui-text--truncate{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.genui-text--align-start{text-align:start}.genui-text--align-center{text-align:center}.genui-text--align-end{text-align:end}.genui-text--align-justify{text-align:justify}.genui-text--weight-normal{font-weight:400}.genui-text--weight-medium{font-weight:500}.genui-text--weight-semibold{font-weight:600}.genui-text--weight-bold{font-weight:700}.genui-text--size-xs{font-size:calc(var(--genui-base-size) * .75)}.genui-text--size-sm{font-size:calc(var(--genui-base-size) * .875)}.genui-text--size-md{font-size:var(--genui-base-size)}.genui-text--size-lg{font-size:calc(var(--genui-base-size) * 1.125)}.genui-text--size-xl{font-size:calc(var(--genui-base-size) * 1.25)}.genui-textarea-wrapper{box-sizing:border-box;border-radius:calc(var(--genui-base-size) * .375);width:100%;transition:all .2s;display:flex}.genui-textarea{all:unset;width:100%;color:var(--genui-text-primary);resize:vertical;background:0 0;font-family:inherit;line-height:1.5}.genui-textarea::placeholder{color:var(--genui-text-secondary)}.genui-textarea-wrapper--outline{border:1px solid var(--genui-border-default);background:var(--genui-surface)}.genui-textarea-wrapper--outline:focus-within{border-color:var(--genui-primary-60);box-shadow:0 0 0 2px #0000001a}.genui-textarea-wrapper--soft{background:var(--genui-surface-secondary);border:none}.genui-textarea-wrapper--soft:focus-within{background:var(--genui-surface-tertiary)}.genui-textarea-wrapper--disabled{opacity:.6;background-color:var(--genui-disabled-bg);cursor:not-allowed}.genui-textarea-wrapper--disabled .genui-textarea{cursor:not-allowed;color:var(--genui-disabled-text)}.genui-textarea-wrapper--3xs{padding:calc(var(--genui-base-size) * .125) calc(var(--genui-base-size) * .25);font-size:calc(var(--genui-base-size) * .625)}.genui-textarea-wrapper--2xs{padding:calc(var(--genui-base-size) * .25) calc(var(--genui-base-size) * .375);font-size:calc(var(--genui-base-size) * .75)}.genui-textarea-wrapper--xs{padding:calc(var(--genui-base-size) * .375) calc(var(--genui-base-size) * .5);font-size:calc(var(--genui-base-size) * .75)}.genui-textarea-wrapper--sm{padding:calc(var(--genui-base-size) * .375) calc(var(--genui-base-size) * .625);font-size:calc(var(--genui-base-size) * .875)}.genui-textarea-wrapper--md{padding:calc(var(--genui-base-size) * .5) calc(var(--genui-base-size) * .75);font-size:calc(var(--genui-base-size) * .875)}.genui-textarea-wrapper--lg{padding:calc(var(--genui-base-size) * .625) calc(var(--genui-base-size) * .875);font-size:var(--genui-base-size)}.genui-textarea-wrapper--xl{padding:calc(var(--genui-base-size) * .75) var(--genui-base-size);font-size:calc(var(--genui-base-size) * 1.125)}.genui-textarea-wrapper--2xl{padding:var(--genui-base-size) calc(var(--genui-base-size) * 1.25);font-size:calc(var(--genui-base-size) * 1.25)}.genui-textarea-wrapper--3xl{padding:calc(var(--genui-base-size) * 1.25) calc(var(--genui-base-size) * 1.5);font-size:calc(var(--genui-base-size) * 1.5)}.genui-title{color:var(--genui-text-primary);margin:0;line-height:1.25}.genui-title--truncate{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.genui-title--align-start{text-align:start}.genui-title--align-center{text-align:center}.genui-title--align-end{text-align:end}.genui-title--align-justify{text-align:justify}.genui-title--weight-normal{font-weight:400}.genui-title--weight-medium{font-weight:500}.genui-title--weight-semibold{font-weight:600}.genui-title--weight-bold{font-weight:700}.genui-title--size-sm{font-size:calc(var(--genui-base-size) * 1.125)}.genui-title--size-md{font-size:calc(var(--genui-base-size) * 1.25)}.genui-title--size-lg{font-size:calc(var(--genui-base-size) * 1.5)}.genui-title--size-xl{font-size:calc(var(--genui-base-size) * 1.875)}.genui-title--size-2xl{font-size:calc(var(--genui-base-size) * 2.25)}.genui-title--size-3xl{font-size:calc(var(--genui-base-size) * 3)}.genui-title--size-4xl{font-size:calc(var(--genui-base-size) * 4)}.genui-title--size-5xl{font-size:calc(var(--genui-base-size) * 5)}.genui-widget-root{--genui-base-size:1rem;font-size:var(--genui-base-size);line-height:1;position:relative}.genui-fade-enter-active,.genui-fade-leave-active{transition:opacity .3s}.genui-fade-enter-from,.genui-fade-leave-to{opacity:0}.genui-slide-enter-active,.genui-slide-leave-active{max-height:var(--mh);transition:max-height .3s,padding .3s,opacity .3s}.genui-slide-enter-from,.genui-slide-leave-to{opacity:0;max-height:0;padding-top:0;padding-bottom:0;overflow:hidden}.genui-fly-enter-active,.genui-fly-leave-active{transition:all .3s}.genui-fly-enter-from,.genui-fly-leave-to{opacity:0;transform:translateX(calc(var(--genui-base-size) * -1))}.genui-fly-staggered-leave-active{transition:opacity .3s linear,transform .3s;transition-delay:calc(.1s * (var(--total) - var(--i)))}.genui-fly-staggered-enter-active{transition:opacity .3s linear,transform .3s;transition-delay:calc(.1s * var(--i))}.genui-fly-staggered-enter-from{transform:translateX(calc(var(--genui-base-size) * -1));opacity:0}.genui-fly-staggered-enter-to,.genui-fly-staggered-leave-from{opacity:1;transform:translate(0)}.genui-fly-staggered-leave-to{transform:translateX(var(--genui-base-size));opacity:0}.genui-rise-enter-active,.genui-rise-leave-active{transition:opacity .3s linear,transform .3s}.genui-rise-leave-active{position:absolute}.genui-rise-enter-from{transform:translateY(var(--genui-base-size));opacity:0}.genui-rise-enter-to,.genui-rise-leave-from{opacity:1;transform:translateY(0)}.genui-rise-leave-to{transform:translateY(calc(var(--genui-base-size) * -1));opacity:0}
2
+ /*$vite$:1*/