image-sprout 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/README.md +377 -0
- package/dist/app/apple-touch-icon.png +0 -0
- package/dist/app/assets/index-C7ombVWN.css +1 -0
- package/dist/app/assets/index-Yj_7qKUG.js +3 -0
- package/dist/app/favicon-96x96.png +0 -0
- package/dist/app/favicon.ico +0 -0
- package/dist/app/favicon.svg +1 -0
- package/dist/app/index.html +20 -0
- package/dist/cli/apple-touch-icon.png +0 -0
- package/dist/cli/favicon-96x96.png +0 -0
- package/dist/cli/favicon.ico +0 -0
- package/dist/cli/favicon.svg +1 -0
- package/dist/cli/index.js +3127 -0
- package/package.json +38 -0
package/README.md
ADDED
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+

|
|
2
|
+
|
|
3
|
+
# Image Sprout
|
|
4
|
+
|
|
5
|
+
Image Sprout is a local image-generation tool for building consistent outputs from reference images and reusable instructions.
|
|
6
|
+
|
|
7
|
+
Without a tool like this, you end up repeating the same context over and over:
|
|
8
|
+
- upload the same reference images again
|
|
9
|
+
- restate the same style direction again
|
|
10
|
+
- restate the same subject guidance again
|
|
11
|
+
- restate the same persistent instructions again
|
|
12
|
+
|
|
13
|
+
Image Sprout turns that repeated context into a project you can reuse.
|
|
14
|
+
|
|
15
|
+
It runs in two modes over the same local project data:
|
|
16
|
+
- a local web app for interactive setup, review, and iteration
|
|
17
|
+
- a CLI for shell workflows and AI agents
|
|
18
|
+
|
|
19
|
+
## What Problem It Solves
|
|
20
|
+
|
|
21
|
+
Most image-generation tools are prompt-first. That works for one-off outputs, but it breaks down when you need consistency.
|
|
22
|
+
|
|
23
|
+
Image Sprout gives you a project with:
|
|
24
|
+
- reference images
|
|
25
|
+
- a `Visual Style`
|
|
26
|
+
- a `Subject Guide`
|
|
27
|
+
- persistent `Instructions`
|
|
28
|
+
- sessions and runs
|
|
29
|
+
|
|
30
|
+
That lets you set up the context once, then keep generating and iterating without rebuilding it from scratch each time.
|
|
31
|
+
|
|
32
|
+
## Demo
|
|
33
|
+
|
|
34
|
+
### Project Setup Walkthrough
|
|
35
|
+
|
|
36
|
+
This video shows creating the project setup by adding a general reference image and deriving both the style and subject guide:
|
|
37
|
+
|
|
38
|
+
[](https://www.youtube.com/watch?v=2lwqKotC5KU)
|
|
39
|
+
|
|
40
|
+
### Generation And Iteration Walkthrough
|
|
41
|
+
|
|
42
|
+
This video shows generating images from a project that already has its style and subject guide, then iterating on the results:
|
|
43
|
+
|
|
44
|
+
[](https://www.youtube.com/watch?v=jt7wE-ttwxU)
|
|
45
|
+
|
|
46
|
+
## Install
|
|
47
|
+
|
|
48
|
+
### Install From npm
|
|
49
|
+
|
|
50
|
+
Install Image Sprout globally from npm:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npm install -g image-sprout
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
If you prefer not to install globally, you can also run it with `npx image-sprout`.
|
|
57
|
+
|
|
58
|
+
### Install From The GitHub Repo
|
|
59
|
+
|
|
60
|
+
If you want to work from source instead, clone the repo and install dependencies locally:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
git clone <repo-url>
|
|
64
|
+
cd image-sprout
|
|
65
|
+
npm install
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
From the repo checkout, you can run the app with the local scripts or run the built CLI directly.
|
|
69
|
+
|
|
70
|
+
## How To Run It
|
|
71
|
+
|
|
72
|
+
You can use either mode.
|
|
73
|
+
|
|
74
|
+
### Web App
|
|
75
|
+
|
|
76
|
+
Launch the local web app:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
image-sprout web
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
This starts the interactive local app backed by the same on-disk store the CLI uses.
|
|
83
|
+
|
|
84
|
+
### CLI
|
|
85
|
+
|
|
86
|
+
Run CLI commands directly:
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
image-sprout help
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Bring Your Own OpenRouter Key
|
|
93
|
+
|
|
94
|
+
Image Sprout requires your own [OpenRouter](https://openrouter.ai/) API key.
|
|
95
|
+
|
|
96
|
+
### Configure The Key In The CLI
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
image-sprout config set apiKey <your-openrouter-key>
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Useful config commands:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
image-sprout config show
|
|
106
|
+
image-sprout config get model
|
|
107
|
+
image-sprout config path
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Notes:
|
|
111
|
+
- `config show` and `config get apiKey` do not print the raw API key
|
|
112
|
+
- CLI output is text by default; pass `--json` for machine-readable output
|
|
113
|
+
|
|
114
|
+
### Configure The Key In The Web App
|
|
115
|
+
|
|
116
|
+
Open the app with `image-sprout web`.
|
|
117
|
+
|
|
118
|
+
If the API key is missing, the app will prompt you to set it. You can also manage it from the settings flow inside the app.
|
|
119
|
+
|
|
120
|
+
## Models
|
|
121
|
+
|
|
122
|
+
Image Sprout defaults to `Nano Banana 2` (`google/gemini-3.1-flash-image-preview`).
|
|
123
|
+
|
|
124
|
+
You can also add other OpenRouter models, but Image Sprout only accepts models that:
|
|
125
|
+
- accept text input
|
|
126
|
+
- accept image input
|
|
127
|
+
- produce image output
|
|
128
|
+
|
|
129
|
+
### Manage Models In The Web App
|
|
130
|
+
|
|
131
|
+
Use the gear icon next to the model selector.
|
|
132
|
+
|
|
133
|
+
From there you can:
|
|
134
|
+
- add a model by OpenRouter model id
|
|
135
|
+
- rename its display label locally
|
|
136
|
+
- set the default model
|
|
137
|
+
- restore the built-in defaults
|
|
138
|
+
|
|
139
|
+
### Manage Models In The CLI
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
image-sprout model list
|
|
143
|
+
image-sprout model add openai/gpt-5-image
|
|
144
|
+
image-sprout model set-default google/gemini-3.1-flash-image-preview
|
|
145
|
+
image-sprout model restore-defaults
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Recommended Project Setup
|
|
149
|
+
|
|
150
|
+
The general workflow is:
|
|
151
|
+
1. Create a project.
|
|
152
|
+
2. Add at least 3 reference images.
|
|
153
|
+
3. Decide whether the project should preserve style, subject, or both.
|
|
154
|
+
4. Derive the appropriate guide or guides.
|
|
155
|
+
5. Generate new images from that saved project context.
|
|
156
|
+
|
|
157
|
+
### How To Think About The Project
|
|
158
|
+
|
|
159
|
+
Use these fields intentionally:
|
|
160
|
+
- `Visual Style`: how outputs should look
|
|
161
|
+
- `Subject Guide`: what subject identity should stay consistent
|
|
162
|
+
- `Instructions`: persistent generation instructions that should apply every time
|
|
163
|
+
|
|
164
|
+
Examples for `Instructions`:
|
|
165
|
+
- watermark requirements
|
|
166
|
+
- framing requirements
|
|
167
|
+
- text-placement requirements
|
|
168
|
+
- branding constraints
|
|
169
|
+
|
|
170
|
+
## Web App Workflow
|
|
171
|
+
|
|
172
|
+
### 1. Create A Project
|
|
173
|
+
|
|
174
|
+
Open the web app and create a new project.
|
|
175
|
+
|
|
176
|
+
### 2. Add Reference Images
|
|
177
|
+
|
|
178
|
+
Best practice:
|
|
179
|
+
- start with at least 3 strong reference images
|
|
180
|
+
- use higher-quality references instead of many weak ones
|
|
181
|
+
- if the project needs split references, enable separate style and subject references in Project Settings
|
|
182
|
+
|
|
183
|
+
Default behavior:
|
|
184
|
+
- uploaded references are shared
|
|
185
|
+
- shared references can drive both `Visual Style` and `Subject Guide`
|
|
186
|
+
|
|
187
|
+
Advanced behavior:
|
|
188
|
+
- if needed, split references into:
|
|
189
|
+
- style references
|
|
190
|
+
- subject references
|
|
191
|
+
|
|
192
|
+
### 3. Decide Whether The Project Is Style, Subject, Or Both
|
|
193
|
+
|
|
194
|
+
Common cases:
|
|
195
|
+
- `style only`: you want consistent look, but subjects can vary
|
|
196
|
+
- `subject only`: you want consistent subject identity, but style can vary
|
|
197
|
+
- `both`: you want both look and subject consistency
|
|
198
|
+
|
|
199
|
+
### 4. Derive Guides
|
|
200
|
+
|
|
201
|
+
In Project Settings, derive the guides you actually need:
|
|
202
|
+
- `Derive Style`
|
|
203
|
+
- `Derive Subject`
|
|
204
|
+
- `Derive Style + Subject`
|
|
205
|
+
|
|
206
|
+
Recommended mapping:
|
|
207
|
+
- style-only project: derive style
|
|
208
|
+
- subject-only project: derive subject
|
|
209
|
+
- style-and-subject project: derive both
|
|
210
|
+
|
|
211
|
+
Review the derived text before saving it.
|
|
212
|
+
|
|
213
|
+
### 5. Save The Project Profile
|
|
214
|
+
|
|
215
|
+
Project Settings does not auto-save guide edits. Save after:
|
|
216
|
+
- deriving guides
|
|
217
|
+
- editing guides manually
|
|
218
|
+
- updating instructions
|
|
219
|
+
|
|
220
|
+
### 6. Generate Images
|
|
221
|
+
|
|
222
|
+
Once the project is configured, generate from the main canvas.
|
|
223
|
+
|
|
224
|
+
The main prompt is the per-run request.
|
|
225
|
+
|
|
226
|
+
Examples:
|
|
227
|
+
- `a flower in a forest`
|
|
228
|
+
- `the same character sitting at a cafe in morning light`
|
|
229
|
+
- `product shot on a neutral tabletop with more negative space`
|
|
230
|
+
|
|
231
|
+
### 7. Iterate
|
|
232
|
+
|
|
233
|
+
After a run:
|
|
234
|
+
- select one or more returned images to steer the next iteration visually
|
|
235
|
+
- describe the change you want
|
|
236
|
+
- use `Iterate`
|
|
237
|
+
- use `Run Again` when you want another take on the same run without changing the prompt
|
|
238
|
+
|
|
239
|
+
## CLI Workflow
|
|
240
|
+
|
|
241
|
+
### 1. Create A Project
|
|
242
|
+
|
|
243
|
+
```bash
|
|
244
|
+
image-sprout project create my-blog
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### 2. Add Reference Images
|
|
248
|
+
|
|
249
|
+
Add at least 3 references. By default, refs apply to both style and subject:
|
|
250
|
+
|
|
251
|
+
```bash
|
|
252
|
+
image-sprout ref add --project my-blog ./ref-1.png ./ref-2.png ./ref-3.png
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
If you need separate pools:
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
image-sprout ref add --project my-blog --role style ./style-1.png ./style-2.png
|
|
259
|
+
image-sprout ref add --project my-blog --role subject ./subject-1.png ./subject-2.png
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### 3. Set Optional Persistent Instructions
|
|
263
|
+
|
|
264
|
+
```bash
|
|
265
|
+
image-sprout project update my-blog --instructions "Bottom right corner should say 'My Blog' in a legible but subtle watermark."
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
### 4. Decide Whether The Project Uses Style, Subject, Or Both
|
|
269
|
+
|
|
270
|
+
Then derive the right guide or guides.
|
|
271
|
+
|
|
272
|
+
Style only:
|
|
273
|
+
|
|
274
|
+
```bash
|
|
275
|
+
image-sprout project derive my-blog --target style
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
Subject only:
|
|
279
|
+
|
|
280
|
+
```bash
|
|
281
|
+
image-sprout project derive my-blog --target subject
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
Both:
|
|
285
|
+
|
|
286
|
+
```bash
|
|
287
|
+
image-sprout project derive my-blog --target both
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
Inspect readiness:
|
|
291
|
+
|
|
292
|
+
```bash
|
|
293
|
+
image-sprout project status my-blog
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
### 5. Generate Images
|
|
297
|
+
|
|
298
|
+
```bash
|
|
299
|
+
image-sprout project generate my-blog --prompt "a flower in a forest"
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
### 6. Inspect Sessions And Runs
|
|
303
|
+
|
|
304
|
+
```bash
|
|
305
|
+
image-sprout session list --project my-blog
|
|
306
|
+
image-sprout run list --project my-blog
|
|
307
|
+
image-sprout run latest --project my-blog --json
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
## CLI For Agents
|
|
311
|
+
|
|
312
|
+
The CLI is the better mode for AI agents because it:
|
|
313
|
+
- works directly from explicit commands
|
|
314
|
+
- supports `--json` for machine-readable output
|
|
315
|
+
- operates on the same project store as the web app
|
|
316
|
+
- makes project state inspectable and scriptable
|
|
317
|
+
|
|
318
|
+
Examples:
|
|
319
|
+
|
|
320
|
+
```bash
|
|
321
|
+
image-sprout project show my-blog --json
|
|
322
|
+
image-sprout project status my-blog --json
|
|
323
|
+
image-sprout run latest --project my-blog --json
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
## Command Help
|
|
327
|
+
|
|
328
|
+
```bash
|
|
329
|
+
image-sprout help
|
|
330
|
+
image-sprout project --help
|
|
331
|
+
image-sprout ref --help
|
|
332
|
+
image-sprout model --help
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
## Development
|
|
336
|
+
|
|
337
|
+
For local repo development:
|
|
338
|
+
|
|
339
|
+
```bash
|
|
340
|
+
npm install
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
```bash
|
|
346
|
+
npm run dev # Vite dev server
|
|
347
|
+
npm run build # Build the web app
|
|
348
|
+
npm run build:cli # Build the CLI
|
|
349
|
+
npm run web # Build web + CLI, then launch local web mode
|
|
350
|
+
npm run check # Svelte + TypeScript checks
|
|
351
|
+
npm test # Run all tests
|
|
352
|
+
npm run test:watch # Watch tests
|
|
353
|
+
```
|
|
354
|
+
|
|
355
|
+
## Architecture
|
|
356
|
+
|
|
357
|
+
```text
|
|
358
|
+
CLI commands -----------\
|
|
359
|
+
> shared on-disk project/config/model store
|
|
360
|
+
Local web app -----------/
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
Important implementation pieces:
|
|
364
|
+
- `src/cli/project-store.ts` — shared disk-backed persistence
|
|
365
|
+
- `src/cli/model-registry.ts` — shared model registry
|
|
366
|
+
- `src/cli/web-server.ts` — local bridge for the web app
|
|
367
|
+
- `src/lib/api/openrouter.ts` — generation and guide derivation
|
|
368
|
+
- `src/lib/stores/*.svelte.ts` — bridge-backed web state
|
|
369
|
+
|
|
370
|
+
## Current Stack
|
|
371
|
+
|
|
372
|
+
- Svelte 5
|
|
373
|
+
- TypeScript
|
|
374
|
+
- Tailwind CSS v4
|
|
375
|
+
- Vite
|
|
376
|
+
- OpenRouter
|
|
377
|
+
- Vitest
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
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-space-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-font-weight:initial;--tw-tracking: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-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--font-sans:"Inter", ui-sans-serif, system-ui, sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-green-300:oklch(87.1% .15 154.449);--color-emerald-700:oklch(50.8% .118 165.612);--color-sky-50:oklch(97.7% .013 236.62);--color-sky-400:oklch(74.6% .16 232.661);--color-indigo-50:oklch(96.2% .018 272.314);--color-indigo-100:oklch(93% .034 272.788);--color-indigo-200:oklch(87% .065 274.039);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-700:oklch(45.7% .24 277.023);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--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);--color-accent-50:#eef2ff;--color-accent-500:#6366f1;--color-accent-600:#4f46e5;--color-accent-700:#4338ca}}@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}}@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\.5{top:calc(var(--spacing) * 1.5)}.top-2{top:calc(var(--spacing) * 2)}.top-3{top:calc(var(--spacing) * 3)}.right-0{right:calc(var(--spacing) * 0)}.right-1\.5{right:calc(var(--spacing) * 1.5)}.right-2{right:calc(var(--spacing) * 2)}.right-3{right:calc(var(--spacing) * 3)}.bottom-0{bottom:calc(var(--spacing) * 0)}.left-0{left:calc(var(--spacing) * 0)}.left-2{left:calc(var(--spacing) * 2)}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.z-\[70\]{z-index:70}.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-4{margin-inline:calc(var(--spacing) * 4)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-auto{margin-right:auto}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.aspect-square{aspect-ratio:1}.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-10{height:calc(var(--spacing) * 10)}.h-\[44px\]{height:44px}.h-auto{height:auto}.h-full{height:100%}.h-screen{height:100vh}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[88vh\]{max-height:88vh}.max-h-\[90vh\]{max-height:90vh}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-10{min-height:calc(var(--spacing) * 10)}.min-h-28{min-height:calc(var(--spacing) * 28)}.min-h-44{min-height:calc(var(--spacing) * 44)}.min-h-screen{min-height:100vh}.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-10{width:calc(var(--spacing) * 10)}.w-32{width:calc(var(--spacing) * 32)}.w-44{width:calc(var(--spacing) * 44)}.w-auto{width:auto}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-64{max-width:calc(var(--spacing) * 64)}.max-w-full{max-width:100%}.max-w-md{max-width:var(--container-md)}.min-w-0{min-width:calc(var(--spacing) * 0)}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.rotate-180{rotate:180deg}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.resize-y{resize:vertical}.appearance-none{appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.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)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-\[4px\]{border-radius:4px}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-b-xl{border-bottom-right-radius:var(--radius-xl);border-bottom-left-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-r-2{border-right-style:var(--tw-border-style);border-right-width:2px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-accent-500{border-color:var(--color-accent-500)}.border-amber-200{border-color:var(--color-amber-200)}.border-amber-400{border-color:var(--color-amber-400)}.border-indigo-200{border-color:var(--color-indigo-200)}.border-indigo-500{border-color:var(--color-indigo-500)}.border-red-200{border-color:var(--color-red-200)}.border-sky-400{border-color:var(--color-sky-400)}.border-slate-100{border-color:var(--color-slate-100)}.border-slate-200{border-color:var(--color-slate-200)}.border-slate-300{border-color:var(--color-slate-300)}.border-t-indigo-600{border-top-color:var(--color-indigo-600)}.bg-accent-50{background-color:var(--color-accent-50)}.bg-accent-600{background-color:var(--color-accent-600)}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-50\/70{background-color:#fffbebb3}@supports (color:color-mix(in lab,red,red)){.bg-amber-50\/70{background-color:color-mix(in oklab,var(--color-amber-50) 70%,transparent)}}.bg-amber-600{background-color:var(--color-amber-600)}.bg-black\/40{background-color:#0006}@supports (color:color-mix(in lab,red,red)){.bg-black\/40{background-color:color-mix(in oklab,var(--color-black) 40%,transparent)}}.bg-black\/45{background-color:#00000073}@supports (color:color-mix(in lab,red,red)){.bg-black\/45{background-color:color-mix(in oklab,var(--color-black) 45%,transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab,red,red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black) 50%,transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab,red,red)){.bg-black\/60{background-color:color-mix(in oklab,var(--color-black) 60%,transparent)}}.bg-black\/70{background-color:#000000b3}@supports (color:color-mix(in lab,red,red)){.bg-black\/70{background-color:color-mix(in oklab,var(--color-black) 70%,transparent)}}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-red-100{background-color:var(--color-red-100)}.bg-sky-50\/80{background-color:#f0f9ffcc}@supports (color:color-mix(in lab,red,red)){.bg-sky-50\/80{background-color:color-mix(in oklab,var(--color-sky-50) 80%,transparent)}}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-100{background-color:var(--color-slate-100)}.bg-slate-200{background-color:var(--color-slate-200)}.bg-slate-900{background-color:var(--color-slate-900)}.bg-slate-950{background-color:var(--color-slate-950)}.bg-slate-950\/75{background-color:#020618bf}@supports (color:color-mix(in lab,red,red)){.bg-slate-950\/75{background-color:color-mix(in oklab,var(--color-slate-950) 75%,transparent)}}.bg-white{background-color:var(--color-white)}.bg-white\/20{background-color:#fff3}@supports (color:color-mix(in lab,red,red)){.bg-white\/20{background-color:color-mix(in oklab,var(--color-white) 20%,transparent)}}.bg-white\/80{background-color:#fffc}@supports (color:color-mix(in lab,red,red)){.bg-white\/80{background-color:color-mix(in oklab,var(--color-white) 80%,transparent)}}.bg-white\/90{background-color:#ffffffe6}@supports (color:color-mix(in lab,red,red)){.bg-white\/90{background-color:color-mix(in oklab,var(--color-white) 90%,transparent)}}.bg-white\/96{background-color:#fffffff5}@supports (color:color-mix(in lab,red,red)){.bg-white\/96{background-color:color-mix(in oklab,var(--color-white) 96%,transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-\[linear-gradient\(180deg\,\#fffdf7_0\%\,\#ffffff_18\%\,\#f8fafc_100\%\)\]{background-image:linear-gradient(#fffdf7,#fff 18%,#f8fafc)}.bg-\[url\(\'data\:image\/svg\+xml\;charset\=utf-8\,\%3Csvg\%20xmlns\%3D\%22http\%3A\%2F\%2Fwww\.w3\.org\%2F2000\%2Fsvg\%22\%20width\%3D\%2212\%22\%20height\%3D\%2212\%22\%20viewBox\%3D\%220\%200\%2024\%2024\%22\%20fill\%3D\%22none\%22\%20stroke\%3D\%22\%2364748b\%22\%20stroke-width\%3D\%222\%22\%3E\%3Cpath\%20d\%3D\%22M6\%209l6\%206\%206-6\%22\%2F\%3E\%3C\%2Fsvg\%3E\'\)\]{background-image:url(data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2212%22%20height%3D%2212%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%2364748b%22%20stroke-width%3D%222%22%3E%3Cpath%20d%3D%22M6%209l6%206%206-6%22%2F%3E%3C%2Fsvg%3E)}.from-slate-200{--tw-gradient-from:var(--color-slate-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.via-slate-100{--tw-gradient-via:var(--color-slate-100);--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-slate-200{--tw-gradient-to:var(--color-slate-200);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.bg-\[length\:12px\]{background-size:12px}.bg-\[right_8px_center\]{background-position:right 8px center}.bg-no-repeat{background-repeat:no-repeat}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-4{padding:calc(var(--spacing) * 4)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.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)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.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-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pr-6{padding-right:calc(var(--spacing) * 6)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--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))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.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)}.tracking-\[0\.14em\]{--tw-tracking:.14em;letter-spacing:.14em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-pre-wrap{white-space:pre-wrap}.text-accent-600{color:var(--color-accent-600)}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-emerald-700{color:var(--color-emerald-700)}.text-green-300{color:var(--color-green-300)}.text-indigo-600{color:var(--color-indigo-600)}.text-indigo-700{color:var(--color-indigo-700)}.text-red-300{color:var(--color-red-300)}.text-red-600{color:var(--color-red-600)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-slate-800{color:var(--color-slate-800)}.text-slate-900{color:var(--color-slate-900)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.underline{text-decoration-line:underline}.decoration-amber-300{-webkit-text-decoration-color:var(--color-amber-300);text-decoration-color:var(--color-amber-300)}.underline-offset-2{text-underline-offset:2px}.placeholder-slate-400::placeholder{color:var(--color-slate-400)}.opacity-0{opacity:0}.opacity-45{opacity:.45}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.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-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px 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-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px 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)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + 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)}.ring-2{--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)}.ring-indigo-600{--tw-ring-color:var(--color-indigo-600)}.ring-slate-200{--tw-ring-color:var(--color-slate-200)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;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))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.select-none{-webkit-user-select:none;user-select:none}.group-focus-within\:opacity-100:is(:where(.group):focus-within *){opacity:1}@media(hover:hover){.group-hover\:text-slate-700:is(:where(.group):hover *){color:var(--color-slate-700)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-slate-400::placeholder{color:var(--color-slate-400)}@media(hover:hover){.hover\:border-amber-400:hover{border-color:var(--color-amber-400)}.hover\:bg-accent-700:hover{background-color:var(--color-accent-700)}.hover\:bg-amber-700:hover{background-color:var(--color-amber-700)}.hover\:bg-black\/70:hover{background-color:#000000b3}@supports (color:color-mix(in lab,red,red)){.hover\:bg-black\/70:hover{background-color:color-mix(in oklab,var(--color-black) 70%,transparent)}}.hover\:bg-indigo-50:hover{background-color:var(--color-indigo-50)}.hover\:bg-indigo-700:hover{background-color:var(--color-indigo-700)}.hover\:bg-red-50:hover{background-color:var(--color-red-50)}.hover\:bg-slate-50:hover{background-color:var(--color-slate-50)}.hover\:bg-slate-100:hover{background-color:var(--color-slate-100)}.hover\:bg-slate-300:hover{background-color:var(--color-slate-300)}.hover\:bg-slate-800:hover{background-color:var(--color-slate-800)}.hover\:bg-white:hover{background-color:var(--color-white)}.hover\:bg-white\/40:hover{background-color:#fff6}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/40:hover{background-color:color-mix(in oklab,var(--color-white) 40%,transparent)}}.hover\:text-accent-600:hover{color:var(--color-accent-600)}.hover\:text-accent-700:hover{color:var(--color-accent-700)}.hover\:text-amber-600:hover{color:var(--color-amber-600)}.hover\:text-amber-900:hover{color:var(--color-amber-900)}.hover\:text-red-500:hover{color:var(--color-red-500)}.hover\:text-red-600:hover{color:var(--color-red-600)}.hover\:text-red-700:hover{color:var(--color-red-700)}.hover\:text-slate-600:hover{color:var(--color-slate-600)}.hover\:text-slate-700:hover{color:var(--color-slate-700)}.hover\:text-slate-800:hover{color:var(--color-slate-800)}}.focus\:border-amber-500:focus{border-color:var(--color-amber-500)}.focus\:border-indigo-500:focus{border-color:var(--color-indigo-500)}.focus\:border-transparent:focus{border-color:#0000}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + 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\:ring-2:focus{--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\:ring-accent-500:focus{--tw-ring-color:var(--color-accent-500)}.focus\:ring-amber-500:focus{--tw-ring-color:var(--color-amber-500)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:40rem){.sm\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(min-width:48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-\[1\.8fr_1fr_auto\]{grid-template-columns:1.8fr 1fr auto}}@media(min-width:64rem){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:80rem){.xl\:col-span-2{grid-column:span 2/span 2}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}}body{font-family:var(--font-sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0}#app{width:100%;min-height:100vh}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{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-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
|