@rozenite/controls-plugin 2.0.0 → 2.2.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.
@@ -6,9 +6,7 @@ export type ControlsTextItem = {
6
6
  description?: string;
7
7
  };
8
8
 
9
- export type ControlsValidationResult =
10
- | { valid: true }
11
- | { valid: false; message: string };
9
+ export type ControlsValidationResult = { valid: true } | { valid: false; message: string };
12
10
 
13
11
  export type ControlsMutableItemBase<TValue> = {
14
12
  id: string;
@@ -66,22 +64,13 @@ export type ControlsSection = {
66
64
 
67
65
  export type ControlsTextItemSnapshot = Omit<ControlsTextItem, never>;
68
66
 
69
- export type ControlsToggleItemSnapshot = Omit<
70
- ControlsToggleItem,
71
- 'validate' | 'onUpdate'
72
- >;
67
+ export type ControlsToggleItemSnapshot = Omit<ControlsToggleItem, 'validate' | 'onUpdate'>;
73
68
 
74
69
  export type ControlsButtonItemSnapshot = Omit<ControlsButtonItem, 'onPress'>;
75
70
 
76
- export type ControlsSelectItemSnapshot = Omit<
77
- ControlsSelectItem,
78
- 'validate' | 'onUpdate'
79
- >;
71
+ export type ControlsSelectItemSnapshot = Omit<ControlsSelectItem, 'validate' | 'onUpdate'>;
80
72
 
81
- export type ControlsInputItemSnapshot = Omit<
82
- ControlsInputItem,
83
- 'validate' | 'onUpdate'
84
- >;
73
+ export type ControlsInputItemSnapshot = Omit<ControlsInputItem, 'validate' | 'onUpdate'>;
85
74
 
86
75
  export type ControlsItemSnapshot =
87
76
  | ControlsTextItemSnapshot
@@ -106,6 +95,5 @@ export type RozeniteControlsPluginOptionsInput =
106
95
  | RozeniteControlsPluginOptions
107
96
  | RozeniteControlsPluginOptionsUpdater;
108
97
 
109
- export const createSection = <TSection extends ControlsSection>(
110
- section: TSection,
111
- ): TSection => section;
98
+ export const createSection = <TSection extends ControlsSection>(section: TSection): TSection =>
99
+ section;
package/src/ui/panel.tsx CHANGED
@@ -16,10 +16,7 @@ import type {
16
16
  ControlsSnapshotEvent,
17
17
  ControlsUpdateResultEvent,
18
18
  } from '../shared/messaging';
19
- import type {
20
- ControlsItemSnapshot,
21
- ControlsSectionSnapshot,
22
- } from '../shared/types';
19
+ import type { ControlsItemSnapshot, ControlsSectionSnapshot } from '../shared/types';
23
20
  import '@rozenite/ui/styles.css';
24
21
 
25
22
  type ItemUiState = {
@@ -27,8 +24,7 @@ type ItemUiState = {
27
24
  message?: string;
28
25
  };
29
26
 
30
- const getItemKey = (sectionId: string, itemId: string) =>
31
- `${sectionId}:${itemId}`;
27
+ const getItemKey = (sectionId: string, itemId: string) => `${sectionId}:${itemId}`;
32
28
 
33
29
  const createRequestId = () =>
34
30
  `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 10)}`;
@@ -47,12 +43,8 @@ const RowShell = ({
47
43
  <div className="flex items-start justify-between gap-4 py-3">
48
44
  <div className="min-w-0">
49
45
  <div className="text-sm font-medium text-foreground">{title}</div>
50
- {description ? (
51
- <div className="mt-1 text-xs text-muted-foreground">{description}</div>
52
- ) : null}
53
- {errorMessage ? (
54
- <div className="mt-1 text-xs text-destructive">{errorMessage}</div>
55
- ) : null}
46
+ {description ? <div className="mt-1 text-xs text-muted-foreground">{description}</div> : null}
47
+ {errorMessage ? <div className="mt-1 text-xs text-danger">{errorMessage}</div> : null}
56
48
  </div>
57
49
  {children}
58
50
  </div>
@@ -70,11 +62,7 @@ const ToggleRow = ({
70
62
  onToggle: (sectionId: string, itemId: string, value: boolean) => void;
71
63
  }) => {
72
64
  return (
73
- <RowShell
74
- title={item.title}
75
- description={item.description}
76
- errorMessage={uiState?.message}
77
- >
65
+ <RowShell title={item.title} description={item.description} errorMessage={uiState?.message}>
78
66
  <Switch
79
67
  aria-label={item.title}
80
68
  checked={item.value}
@@ -97,13 +85,10 @@ const ButtonRow = ({
97
85
  onPress: (sectionId: string, itemId: string) => void;
98
86
  }) => {
99
87
  return (
100
- <RowShell
101
- title={item.title}
102
- description={item.description}
103
- errorMessage={uiState?.message}
104
- >
88
+ <RowShell title={item.title} description={item.description} errorMessage={uiState?.message}>
105
89
  <Button
106
- size="compact"
90
+ size="sm"
91
+ tone="neutral"
107
92
  variant="outline"
108
93
  disabled={item.disabled || uiState?.pending}
109
94
  onClick={() => onPress(sectionId, item.id)}
@@ -126,11 +111,7 @@ const SelectRow = ({
126
111
  onSelect: (sectionId: string, itemId: string, value: string) => void;
127
112
  }) => {
128
113
  return (
129
- <RowShell
130
- title={item.title}
131
- description={item.description}
132
- errorMessage={uiState?.message}
133
- >
114
+ <RowShell title={item.title} description={item.description} errorMessage={uiState?.message}>
134
115
  <Select
135
116
  value={item.value}
136
117
  disabled={item.disabled || uiState?.pending}
@@ -155,11 +136,7 @@ const SelectRow = ({
155
136
  );
156
137
  };
157
138
 
158
- const TextRow = ({
159
- item,
160
- }: {
161
- item: Extract<ControlsItemSnapshot, { type: 'text' }>;
162
- }) => {
139
+ const TextRow = ({ item }: { item: Extract<ControlsItemSnapshot, { type: 'text' }> }) => {
163
140
  return (
164
141
  <RowShell title={item.title} description={item.description}>
165
142
  <div className="max-w-[50%] rounded-md bg-muted px-3 py-1.5 text-right text-xs text-muted-foreground">
@@ -187,11 +164,7 @@ const InputRow = ({
187
164
  const isChanged = draftValue !== item.value;
188
165
 
189
166
  return (
190
- <RowShell
191
- title={item.title}
192
- description={item.description}
193
- errorMessage={uiState?.message}
194
- >
167
+ <RowShell title={item.title} description={item.description} errorMessage={uiState?.message}>
195
168
  <div className="flex min-w-[240px] items-center gap-2">
196
169
  <Input
197
170
  className="flex-1"
@@ -199,12 +172,11 @@ const InputRow = ({
199
172
  value={draftValue}
200
173
  placeholder={item.placeholder}
201
174
  disabled={item.disabled || uiState?.pending}
202
- onChange={(event) =>
203
- onDraftChange(sectionId, item.id, event.target.value)
204
- }
175
+ onChange={(event) => onDraftChange(sectionId, item.id, event.target.value)}
205
176
  />
206
177
  <Button
207
- size="compact"
178
+ size="sm"
179
+ tone="neutral"
208
180
  variant="outline"
209
181
  disabled={!isChanged || item.disabled || uiState?.pending}
210
182
  onClick={() => onApply(sectionId, item.id)}
@@ -234,11 +206,7 @@ const renderItem = ({
234
206
  onToggle: (sectionId: string, itemId: string, value: boolean) => void;
235
207
  onPress: (sectionId: string, itemId: string) => void;
236
208
  onSelect: (sectionId: string, itemId: string, value: string) => void;
237
- onInputDraftChange: (
238
- sectionId: string,
239
- itemId: string,
240
- value: string,
241
- ) => void;
209
+ onInputDraftChange: (sectionId: string, itemId: string, value: string) => void;
242
210
  onInputApply: (sectionId: string, itemId: string) => void;
243
211
  }) => {
244
212
  if (item.type === 'text') {
@@ -246,25 +214,11 @@ const renderItem = ({
246
214
  }
247
215
 
248
216
  if (item.type === 'toggle') {
249
- return (
250
- <ToggleRow
251
- sectionId={sectionId}
252
- item={item}
253
- uiState={uiState}
254
- onToggle={onToggle}
255
- />
256
- );
217
+ return <ToggleRow sectionId={sectionId} item={item} uiState={uiState} onToggle={onToggle} />;
257
218
  }
258
219
 
259
220
  if (item.type === 'select') {
260
- return (
261
- <SelectRow
262
- sectionId={sectionId}
263
- item={item}
264
- uiState={uiState}
265
- onSelect={onSelect}
266
- />
267
- );
221
+ return <SelectRow sectionId={sectionId} item={item} uiState={uiState} onSelect={onSelect} />;
268
222
  }
269
223
 
270
224
  if (item.type === 'input') {
@@ -280,28 +234,15 @@ const renderItem = ({
280
234
  );
281
235
  }
282
236
 
283
- return (
284
- <ButtonRow
285
- sectionId={sectionId}
286
- item={item}
287
- uiState={uiState}
288
- onPress={onPress}
289
- />
290
- );
237
+ return <ButtonRow sectionId={sectionId} item={item} uiState={uiState} onPress={onPress} />;
291
238
  };
292
239
 
293
240
  export default function ControlsPanel() {
294
241
  const [sections, setSections] = useState<ControlsSectionSnapshot[]>([]);
295
- const [selectedSectionId, setSelectedSectionId] = useState<string | null>(
296
- null,
297
- );
242
+ const [selectedSectionId, setSelectedSectionId] = useState<string | null>(null);
298
243
  const [loading, setLoading] = useState(true);
299
- const [itemUiState, setItemUiState] = useState<Map<string, ItemUiState>>(
300
- new Map(),
301
- );
302
- const [inputDrafts, setInputDrafts] = useState<Map<string, string>>(
303
- new Map(),
304
- );
244
+ const [itemUiState, setItemUiState] = useState<Map<string, ItemUiState>>(new Map());
245
+ const [inputDrafts, setInputDrafts] = useState<Map<string, string>>(new Map());
305
246
  const committedInputValuesRef = useRef<Map<string, string>>(new Map());
306
247
 
307
248
  const client = useRozeniteDevToolsClient<ControlsEventMap>({
@@ -313,56 +254,48 @@ export default function ControlsPanel() {
313
254
  return;
314
255
  }
315
256
 
316
- const snapshotSubscription = client.onMessage(
317
- 'snapshot',
318
- (event: ControlsSnapshotEvent) => {
319
- setSections(event.sections);
320
- setSelectedSectionId((previous) =>
321
- event.sections.some((section) => section.id === previous)
322
- ? previous
323
- : (event.sections[0]?.id ?? null),
324
- );
325
- setLoading(false);
326
-
327
- const nextCommittedValues = new Map<string, string>();
328
- event.sections.forEach((section) => {
329
- section.items.forEach((item) => {
330
- if (item.type === 'input') {
331
- nextCommittedValues.set(
332
- getItemKey(section.id, item.id),
333
- item.value,
334
- );
335
- }
336
- });
257
+ const snapshotSubscription = client.onMessage('snapshot', (event: ControlsSnapshotEvent) => {
258
+ setSections(event.sections);
259
+ setSelectedSectionId((previous) =>
260
+ event.sections.some((section) => section.id === previous)
261
+ ? previous
262
+ : (event.sections[0]?.id ?? null),
263
+ );
264
+ setLoading(false);
265
+
266
+ const nextCommittedValues = new Map<string, string>();
267
+ event.sections.forEach((section) => {
268
+ section.items.forEach((item) => {
269
+ if (item.type === 'input') {
270
+ nextCommittedValues.set(getItemKey(section.id, item.id), item.value);
271
+ }
337
272
  });
273
+ });
338
274
 
339
- setInputDrafts((previous) => {
340
- const next = new Map(previous);
275
+ setInputDrafts((previous) => {
276
+ const next = new Map(previous);
341
277
 
342
- next.forEach((_value, key) => {
343
- if (!nextCommittedValues.has(key)) {
344
- next.delete(key);
345
- }
346
- });
278
+ next.forEach((_value, key) => {
279
+ if (!nextCommittedValues.has(key)) {
280
+ next.delete(key);
281
+ }
282
+ });
347
283
 
348
- nextCommittedValues.forEach((committedValue, key) => {
349
- const previousCommitted = committedInputValuesRef.current.get(key);
350
- const previousDraft = previous.get(key);
351
- const isDirty =
352
- previousDraft !== undefined &&
353
- previousDraft !== previousCommitted;
284
+ nextCommittedValues.forEach((committedValue, key) => {
285
+ const previousCommitted = committedInputValuesRef.current.get(key);
286
+ const previousDraft = previous.get(key);
287
+ const isDirty = previousDraft !== undefined && previousDraft !== previousCommitted;
354
288
 
355
- if (!isDirty || previousDraft === committedValue) {
356
- next.set(key, committedValue);
357
- }
358
- });
359
-
360
- return next;
289
+ if (!isDirty || previousDraft === committedValue) {
290
+ next.set(key, committedValue);
291
+ }
361
292
  });
362
293
 
363
- committedInputValuesRef.current = nextCommittedValues;
364
- },
365
- );
294
+ return next;
295
+ });
296
+
297
+ committedInputValuesRef.current = nextCommittedValues;
298
+ });
366
299
  const updateResultSubscription = client.onMessage(
367
300
  'update-result',
368
301
  (event: ControlsUpdateResultEvent) => {
@@ -389,11 +322,7 @@ export default function ControlsPanel() {
389
322
  };
390
323
  }, [client]);
391
324
 
392
- const sendUpdateRequest = (
393
- sectionId: string,
394
- itemId: string,
395
- value: boolean | string,
396
- ) => {
325
+ const sendUpdateRequest = (sectionId: string, itemId: string, value: boolean | string) => {
397
326
  if (!client) {
398
327
  return;
399
328
  }
@@ -440,11 +369,7 @@ export default function ControlsPanel() {
440
369
  sendUpdateRequest(sectionId, itemId, value);
441
370
  };
442
371
 
443
- const handleInputDraftChange = (
444
- sectionId: string,
445
- itemId: string,
446
- value: string,
447
- ) => {
372
+ const handleInputDraftChange = (sectionId: string, itemId: string, value: string) => {
448
373
  const key = getItemKey(sectionId, itemId);
449
374
 
450
375
  setInputDrafts((previous) => {
@@ -477,9 +402,7 @@ export default function ControlsPanel() {
477
402
  sendUpdateRequest(sectionId, itemId, draftValue);
478
403
  };
479
404
 
480
- const selectedSection = sections.find(
481
- (section) => section.id === selectedSectionId,
482
- );
405
+ const selectedSection = sections.find((section) => section.id === selectedSectionId);
483
406
 
484
407
  return (
485
408
  <PluginShell className="dark">
@@ -513,9 +436,7 @@ export default function ControlsPanel() {
513
436
  <Split.Handle />
514
437
  <Split.Pane>
515
438
  <section className="h-full overflow-auto p-6">
516
- <h1 className="text-base font-semibold text-foreground">
517
- {selectedSection.title}
518
- </h1>
439
+ <h1 className="text-base font-semibold text-foreground">{selectedSection.title}</h1>
519
440
  {selectedSection.description ? (
520
441
  <p className="mt-1 text-sm text-muted-foreground">
521
442
  {selectedSection.description}
@@ -527,12 +448,8 @@ export default function ControlsPanel() {
527
448
  {renderItem({
528
449
  sectionId: selectedSection.id,
529
450
  item,
530
- uiState: itemUiState.get(
531
- getItemKey(selectedSection.id, item.id),
532
- ),
533
- inputDraft: inputDrafts.get(
534
- getItemKey(selectedSection.id, item.id),
535
- ),
451
+ uiState: itemUiState.get(getItemKey(selectedSection.id, item.id)),
452
+ inputDraft: inputDrafts.get(getItemKey(selectedSection.id, item.id)),
536
453
  onToggle: handleToggle,
537
454
  onPress: handlePress,
538
455
  onSelect: handleSelect,
package/tsconfig.json CHANGED
@@ -11,11 +11,7 @@
11
11
  "noFallthroughCasesInSwitch": true,
12
12
  "module": "ESNext",
13
13
  "moduleResolution": "bundler",
14
- "baseUrl": ".",
15
- "paths": {
16
- "@rozenite/agent-shared": ["../agent-shared/src/index.ts"],
17
- "@rozenite/plugin-bridge": ["../plugin-bridge/src/index.ts"]
18
- },
14
+ "customConditions": ["development"],
19
15
  "resolveJsonModule": true,
20
16
  "isolatedModules": true,
21
17
  "noEmit": true,
@@ -24,6 +20,9 @@
24
20
  "include": ["src/**/*", "react-native.ts", "sdk.ts", "rozenite.config.ts"],
25
21
  "exclude": ["node_modules", "dist", "build"],
26
22
  "references": [
23
+ {
24
+ "path": "../agent-bridge"
25
+ },
27
26
  {
28
27
  "path": "../plugin-bridge"
29
28
  },
@@ -1 +0,0 @@
1
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-content:"";--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height: 1.5 ;--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--font-weight-medium:500;--font-weight-semibold:600;--radius-lg:var(--radius);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){*{outline-color:color-mix(in oklab,var(--ring) 50%,transparent)}}body{background-color:var(--background);color:var(--foreground);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background-color:var(--border);border-radius:var(--radius-lg);background-clip:padding-box;border:2px solid #0000}::-webkit-scrollbar-thumb:hover{background-color:var(--muted-foreground)}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-1\/2{top:50%}.top-4{top:calc(var(--spacing) * 4)}.right-1\.5{right:calc(var(--spacing) * 1.5)}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-0\.5{left:calc(var(--spacing) * .5)}.left-2\.5{left:calc(var(--spacing) * 2.5)}.z-10{z-index:10}.z-50{z-index:50}.row-0{grid-row:0}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-1{margin-inline:calc(var(--spacing) * 1)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.ml-3\.5{margin-left:calc(var(--spacing) * 3.5)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-16{height:calc(var(--spacing) * 16)}.h-full{height:100%}.h-screen{height:100vh}.max-h-64{max-height:calc(var(--spacing) * 64)}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-28{min-height:calc(var(--spacing) * 28)}.min-h-56{min-height:calc(var(--spacing) * 56)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-40{width:calc(var(--spacing) * 40)}.w-56{width:calc(var(--spacing) * 56)}.w-80{width:calc(var(--spacing) * 80)}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-\[50\%\]{max-width:50%}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[--anchor-width\]{min-width:--anchor-width}.min-w-\[240px\]{min-width:240px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.origin-\(--transform-origin\){transform-origin:var(--transform-origin)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-90{rotate:90deg}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.resize{resize:both}.resize-y{resize:vertical}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-border>:not(:last-child)){border-color:var(--border)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) * .8)}.rounded-sm{border-radius:calc(var(--radius) * .6)}.border{border-style:var(--tw-border-style);border-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-r-0{border-right-style:var(--tw-border-style);border-right-width:0}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-border{border-color:var(--border)}.border-destructive\/50{border-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.border-destructive\/50{border-color:color-mix(in oklab,var(--destructive) 50%,transparent)}}.border-input{border-color:var(--input)}.border-ring{border-color:var(--ring)}.border-sidebar-border{border-color:var(--sidebar-border)}.bg-background,.bg-background\/70{background-color:var(--background)}@supports (color:color-mix(in lab,red,red)){.bg-background\/70{background-color:color-mix(in oklab,var(--background) 70%,transparent)}}.bg-border{background-color:var(--border)}.bg-card{background-color:var(--card)}.bg-destructive{background-color:var(--destructive)}.bg-foreground{background-color:var(--foreground)}.bg-muted{background-color:var(--muted)}.bg-popover{background-color:var(--popover)}.bg-primary{background-color:var(--primary)}.bg-secondary{background-color:var(--secondary)}.bg-sidebar{background-color:var(--sidebar)}.bg-transparent{background-color:#0000}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-10{padding-block:calc(var(--spacing) * 10)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pr-14{padding-right:calc(var(--spacing) * 14)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-8{padding-left:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.whitespace-nowrap{white-space:nowrap}.text-accent-foreground{color:var(--accent-foreground)}.text-background{color:var(--background)}.text-card-foreground{color:var(--card-foreground)}.text-destructive{color:var(--destructive)}.text-destructive-foreground{color:var(--destructive-foreground)}.text-foreground{color:var(--foreground)}.text-muted{color:var(--muted)}.text-muted-foreground,.text-muted-foreground\/60{color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/60{color:color-mix(in oklab,var(--muted-foreground) 60%,transparent)}}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-sidebar-foreground,.text-sidebar-foreground\/60{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab,red,red)){.text-sidebar-foreground\/60{color:color-mix(in oklab,var(--sidebar-foreground) 60%,transparent)}}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.transition-\[transform\,opacity\]{transition-property:transform,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[transform\,scale\,opacity\]{transition-property:transform,scale,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.running{animation-play-state:running}.group-aria-\[orientation\=horizontal\]\/split-handle\:h-3:is(:where(.group\/split-handle)[aria-orientation=horizontal] *){height:calc(var(--spacing) * 3)}.group-aria-\[orientation\=horizontal\]\/split-handle\:w-4:is(:where(.group\/split-handle)[aria-orientation=horizontal] *){width:calc(var(--spacing) * 4)}.group-aria-\[orientation\=horizontal\]\/split-handle\:rotate-90:is(:where(.group\/split-handle)[aria-orientation=horizontal] *){rotate:90deg}.group-aria-\[orientation\=vertical\]\/split-handle\:h-4:is(:where(.group\/split-handle)[aria-orientation=vertical] *){height:calc(var(--spacing) * 4)}.group-aria-\[orientation\=vertical\]\/split-handle\:w-3:is(:where(.group\/split-handle)[aria-orientation=vertical] *){width:calc(var(--spacing) * 3)}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing) * 0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing) * 1)}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}@media(hover:hover){.hover\:bg-accent:hover,.hover\:bg-accent\/50:hover{background-color:var(--accent)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-accent\/50:hover{background-color:color-mix(in oklab,var(--accent) 50%,transparent)}}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive) 90%,transparent)}}.hover\:bg-muted-foreground:hover{background-color:var(--muted-foreground)}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary) 90%,transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--secondary) 80%,transparent)}}.hover\:bg-sidebar-accent:hover{background-color:var(--sidebar-accent)}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:text-primary:hover{color:var(--primary)}.hover\:text-sidebar-accent-foreground:hover{color:var(--sidebar-accent-foreground)}}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-ring:focus-visible,.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.focus-visible\:ring-sidebar-ring:focus-visible{--tw-ring-color:var(--sidebar-ring)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color:var(--background)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.aria-\[orientation\=horizontal\]\:h-px[aria-orientation=horizontal]{height:1px}.aria-\[orientation\=horizontal\]\:cursor-row-resize[aria-orientation=horizontal]{cursor:row-resize}.aria-\[orientation\=vertical\]\:w-px[aria-orientation=vertical]{width:1px}.aria-\[orientation\=vertical\]\:cursor-col-resize[aria-orientation=vertical]{cursor:col-resize}.data-\[checked\]\:translate-x-4[data-checked]{--tw-translate-x:calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[checked\]\:border-primary[data-checked]{border-color:var(--primary)}.data-\[checked\]\:bg-primary[data-checked]{background-color:var(--primary)}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[ending-style\]\:scale-90[data-ending-style]{--tw-scale-x:90%;--tw-scale-y:90%;--tw-scale-z:90%;scale:var(--tw-scale-x) var(--tw-scale-y)}.data-\[ending-style\]\:scale-95[data-ending-style]{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.data-\[ending-style\]\:opacity-0[data-ending-style]{opacity:0}.data-\[highlighted\]\:bg-accent[data-highlighted]{background-color:var(--accent)}.data-\[highlighted\]\:text-accent-foreground[data-highlighted]{color:var(--accent-foreground)}.data-\[selected\]\:bg-background[data-selected]{background-color:var(--background)}.data-\[selected\]\:bg-sidebar-accent[data-selected]{background-color:var(--sidebar-accent)}.data-\[selected\]\:font-medium[data-selected]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[selected\]\:text-foreground[data-selected]{color:var(--foreground)}.data-\[selected\]\:text-sidebar-accent-foreground[data-selected]{color:var(--sidebar-accent-foreground)}.data-\[selected\]\:shadow-xs[data-selected]{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[starting-style\]\:scale-90[data-starting-style]{--tw-scale-x:90%;--tw-scale-y:90%;--tw-scale-z:90%;scale:var(--tw-scale-x) var(--tw-scale-y)}.data-\[starting-style\]\:scale-95[data-starting-style]{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.data-\[starting-style\]\:opacity-0[data-starting-style]{opacity:0}@media(min-width:40rem){.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-3\.5 svg{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&\:\:-webkit-search-cancel-button\]\:appearance-none::-webkit-search-cancel-button{appearance:none}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}:root{--radius:0;--background:#fff;--foreground:#201f24;--card:#fff;--card-foreground:#201f24;--popover:#fff;--popover-foreground:#201f24;--primary:#8232ff;--primary-foreground:#fff;--secondary:#f9f8fd;--secondary-foreground:#201f24;--muted:#f9f8fd;--muted-foreground:#838289;--accent:#8232ff29;--accent-foreground:#201f24;--destructive:#fa7171;--destructive-foreground:#201f24;--border:#cfced5;--input:#cfced5;--ring:#8232ff;--sidebar:#fff;--sidebar-foreground:#201f24;--sidebar-primary:#8232ff;--sidebar-primary-foreground:#fff;--sidebar-accent:#8232ff29;--sidebar-accent-foreground:#201f24;--sidebar-border:#cfced5;--sidebar-ring:#8232ff}.dark{--background:#201f24;--foreground:#fff;--card:#201f24;--card-foreground:#fff;--popover:#2b2a2f;--popover-foreground:#fff;--primary:#8232ff;--primary-foreground:#fff;--secondary:#2b2a2f;--secondary-foreground:#fff;--muted:#2b2a2f;--muted-foreground:#cfced5;--accent:#8232ff33;--accent-foreground:#fff;--destructive:#fa7171;--destructive-foreground:#201f24;--border:#424145;--input:#424145;--ring:#8232ff;--sidebar:#201f24;--sidebar-foreground:#fff;--sidebar-primary:#8232ff;--sidebar-primary-foreground:#fff;--sidebar-accent:#8232ff33;--sidebar-accent-foreground:#fff;--sidebar-border:#424145;--sidebar-ring:#8232ff}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}