bmad-studio 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +158 -18
  2. package/package.json +1 -1
  3. package/packages/client/dist/assets/index-81ZKe-R8.css +1 -0
  4. package/packages/client/dist/assets/index-DyjtzhqN.js +641 -0
  5. package/packages/client/dist/index.html +2 -2
  6. package/packages/server/dist/app.d.ts +1 -1
  7. package/packages/server/dist/app.d.ts.map +1 -1
  8. package/packages/server/dist/app.js +59 -3
  9. package/packages/server/dist/app.js.map +1 -1
  10. package/packages/server/dist/core/file-store.d.ts +8 -1
  11. package/packages/server/dist/core/file-store.d.ts.map +1 -1
  12. package/packages/server/dist/core/file-store.js +26 -3
  13. package/packages/server/dist/core/file-store.js.map +1 -1
  14. package/packages/server/dist/index.js +39 -0
  15. package/packages/server/dist/index.js.map +1 -1
  16. package/packages/server/dist/plugins/agents-plugin.d.ts.map +1 -1
  17. package/packages/server/dist/plugins/agents-plugin.js +51 -0
  18. package/packages/server/dist/plugins/agents-plugin.js.map +1 -1
  19. package/packages/server/dist/plugins/commands-plugin.d.ts.map +1 -1
  20. package/packages/server/dist/plugins/commands-plugin.js +37 -10
  21. package/packages/server/dist/plugins/commands-plugin.js.map +1 -1
  22. package/packages/server/dist/plugins/datasources-plugin.d.ts.map +1 -1
  23. package/packages/server/dist/plugins/datasources-plugin.js +101 -0
  24. package/packages/server/dist/plugins/datasources-plugin.js.map +1 -1
  25. package/packages/server/dist/plugins/modules-plugin.d.ts.map +1 -1
  26. package/packages/server/dist/plugins/modules-plugin.js +24 -1
  27. package/packages/server/dist/plugins/modules-plugin.js.map +1 -1
  28. package/packages/server/dist/plugins/outputs-plugin.d.ts.map +1 -1
  29. package/packages/server/dist/plugins/outputs-plugin.js +111 -0
  30. package/packages/server/dist/plugins/outputs-plugin.js.map +1 -1
  31. package/packages/server/dist/plugins/overview-plugin.d.ts.map +1 -1
  32. package/packages/server/dist/plugins/overview-plugin.js +34 -1
  33. package/packages/server/dist/plugins/overview-plugin.js.map +1 -1
  34. package/packages/server/dist/plugins/search-plugin.d.ts.map +1 -1
  35. package/packages/server/dist/plugins/search-plugin.js +19 -2
  36. package/packages/server/dist/plugins/search-plugin.js.map +1 -1
  37. package/packages/server/dist/plugins/settings-plugin.d.ts.map +1 -1
  38. package/packages/server/dist/plugins/settings-plugin.js +13 -0
  39. package/packages/server/dist/plugins/settings-plugin.js.map +1 -1
  40. package/packages/shared/src/events.ts +7 -0
  41. package/packages/shared/src/index.ts +1 -0
  42. package/packages/shared/src/workflows.ts +27 -0
  43. package/packages/client/dist/assets/index-CWL4J-eZ.css +0 -1
  44. package/packages/client/dist/assets/index-DBqsFqD5.js +0 -535
package/README.md CHANGED
@@ -6,20 +6,78 @@ BMAD Studio is the **configuration and visibility layer** for BMAD projects. It
6
6
 
7
7
  ## Screenshots
8
8
 
9
+ ### Overview Dashboard
10
+
11
+ The overview page surfaces everything at a glance — agents, teams, installed workflows, the BMAD process timeline, your toolkit, skills, and data sources.
12
+
9
13
  ![Overview Dashboard](e2e/visual-regression.spec.ts-snapshots/overview-chromium-darwin.png)
10
14
 
11
- ![Agents Page](e2e/visual-regression.spec.ts-snapshots/agents-chromium-darwin.png)
15
+ ### Agents
16
+
17
+ Browse all agents across installed modules. Each card shows the agent's icon, title, module source, and skill count.
18
+
19
+ ![Agents](e2e/visual-regression.spec.ts-snapshots/agents-chromium-darwin.png)
20
+
21
+ ### Modules
22
+
23
+ Install, manage, and export modules. Browse a shared registry or install from npm, GitHub, local path, or ZIP.
24
+
25
+ ![Modules](e2e/visual-regression.spec.ts-snapshots/modules-chromium-darwin.png)
26
+
27
+ ### Module Registry
28
+
29
+ Connect to a GitHub-based module registry to browse and install shared modules across your team.
30
+
31
+ ![Module Registry](e2e/visual-regression.spec.ts-snapshots/packages-registry-list-chromium-darwin.png)
32
+
33
+ ### Teams
34
+
35
+ Create and manage agent teams for collaborative workflows and Party Mode.
36
+
37
+ ![Teams](e2e/visual-regression.spec.ts-snapshots/teams-chromium-darwin.png)
38
+
39
+ ### Outputs
40
+
41
+ Browse all project deliverables grouped by BMAD phase — brainstorming, implementation artifacts, and planning artifacts.
42
+
43
+ ![Outputs](e2e/visual-regression.spec.ts-snapshots/outputs-chromium-darwin.png)
44
+
45
+ ### Settings
46
+
47
+ Configure theme, port, module registry, and project settings.
48
+
49
+ ![Settings](e2e/visual-regression.spec.ts-snapshots/settings-with-registry-chromium-darwin.png)
50
+
51
+ ### Files
52
+
53
+ Browse and navigate the raw BMAD file tree with folder hierarchy.
54
+
55
+ ![Files](e2e/visual-regression.spec.ts-snapshots/files-chromium-darwin.png)
56
+
57
+ ### Data Sources
58
+
59
+ View and manage IDE connections and external data sources.
60
+
61
+ ![Data Sources](e2e/visual-regression.spec.ts-snapshots/connections-chromium-darwin.png)
12
62
 
13
63
  ## Features
14
64
 
15
- - **Overview Dashboard** — See your entire BMAD project at a glance: agents, teams, workflows, skills, data sources
16
- - **Agent Management** — Browse agents, view their skills and workflow roles, edit overrides
17
- - **Workflow Visualization** — Step-by-step workflow detail with variant tabs, nested step hierarchy, and supporting file previews
18
- - **Skill Library** — Browse, create, and assign skills to agents
65
+ - **Overview Dashboard** — Agents, teams, workflows, process timeline, toolkit stats, skills, and data sources at a glance
66
+ - **Agent Management** — Browse agents across modules, view skills and workflow roles, create overrides
19
67
  - **Team Management** — Create and manage agent teams for collaborative workflows and Party Mode
20
- - **Module Management** — Install, configure, and export BMAD modules
68
+ - **Skill Library** — Browse, filter, search, create, and assign skills to agents
69
+ - **Workflow Visualization** — Step-by-step detail with variant tabs and module filtering
70
+ - **Output Hub** — Browse all deliverables grouped by BMAD phase
71
+ - **Module Management** — Install, remove, export, and create modules from npm, GitHub, local, or ZIP sources
72
+ - **Module Registry** — Connect to a shared GitHub-based registry to browse and install team modules
73
+ - **Data Sources** — View and manage IDE connections and external integrations
74
+ - **Workspace Editor** — Structured editor for project-context.md with per-section editing and rules management
75
+ - **Commands** — Browse all BMAD process triggers organized by phase, including Quick Flow and anytime commands
76
+ - **File Browser** — Navigate the raw `_bmad/` file tree with size indicators
77
+ - **Project Switching** — Switch between registered BMAD projects without restarting
21
78
  - **Live Reload** — File system changes appear instantly via WebSocket
22
- - **Dark/Light Theme** — Automatic theme detection with manual toggle
79
+ - **Dark/Light Theme** — Toggle between themes from Settings or the sidebar
80
+ - **Custom App Title** — Rebrand the header (e.g. "DEPT Agent Studio") via Settings
23
81
 
24
82
  ## Quick Start
25
83
 
@@ -33,14 +91,19 @@ npx bmad-studio
33
91
 
34
92
  Then open [http://localhost:4040](http://localhost:4040) in your browser.
35
93
 
36
- ### Options
94
+ Studio auto-detects your BMAD project by walking up the directory tree looking for a `_bmad/` directory with a valid module configuration.
95
+
96
+ ### CLI Options
37
97
 
38
98
  ```bash
39
- npx bmad-studio --port 8080 # Custom port
99
+ npx bmad-studio # Start on default port 4040
100
+ npx bmad-studio --port 8080 # Custom port
40
101
  npx bmad-studio --dir /path/to/project # Specify project directory
41
- npx bmad-studio --verbose # Debug logging
102
+ npx bmad-studio --verbose # Enable debug logging to stdout
42
103
  ```
43
104
 
105
+ If the default port is in use, Studio will automatically try the next available port.
106
+
44
107
  ### From Source
45
108
 
46
109
  ```bash
@@ -57,15 +120,76 @@ For development with hot reload:
57
120
  npm run dev
58
121
  ```
59
122
 
60
- This starts the Vite dev server on [http://localhost:5173](http://localhost:5173) and the API server on port 4040.
123
+ This starts the Vite dev server on [http://localhost:5173](http://localhost:5173) and the API server on port 4040 concurrently.
61
124
 
62
125
  ## Prerequisites
63
126
 
64
127
  - **Node.js** >= 20.0.0
65
- - A **BMAD project** with a `_bmad/` directory at the project root (BMAD v6+)
128
+ - A **BMAD project** with a `_bmad/` directory at the project root ([BMAD v6+](https://github.com/bmadcode/BMAD-METHOD))
66
129
 
67
130
  If no BMAD project is detected, Studio starts in setup mode with guidance on getting started.
68
131
 
132
+ ## Configuration
133
+
134
+ ### Studio Settings
135
+
136
+ Studio stores its settings in `.bmad-studio/settings.json` inside your project root. You can edit these through the Settings page in the UI or directly in the file:
137
+
138
+ ```json
139
+ {
140
+ "port": 4040,
141
+ "theme": "light",
142
+ "appTitle": "My Agent Studio",
143
+ "registry": {
144
+ "repo": "owner/repo",
145
+ "branch": "main"
146
+ },
147
+ "logging": {
148
+ "enabled": true,
149
+ "level": "info"
150
+ }
151
+ }
152
+ ```
153
+
154
+ | Setting | Type | Default | Description |
155
+ |---------|------|---------|-------------|
156
+ | `port` | number | `4040` | Server port (requires restart) |
157
+ | `theme` | `"dark"` \| `"light"` | `"light"` | UI color theme |
158
+ | `appTitle` | string | `"BMAD Studio"` | Custom header title for branding |
159
+ | `registry.repo` | string | — | GitHub repo in `owner/repo` format for module registry |
160
+ | `registry.branch` | string | `"main"` | Branch to read registry from |
161
+ | `logging.enabled` | boolean | `false` | Enable file-based logging |
162
+ | `logging.level` | string | `"info"` | Log level: `trace`, `debug`, `info`, `warn`, `error` |
163
+
164
+ ### BMAD Project Configuration
165
+
166
+ BMAD project settings live in `_bmad/core/config.yaml` and are managed by the BMAD installer:
167
+
168
+ ```yaml
169
+ user_name: Jonathan
170
+ communication_language: English
171
+ document_output_language: English
172
+ output_folder: "{project-root}/_bmad-output"
173
+ ```
174
+
175
+ ### Runtime Files
176
+
177
+ Studio creates a `.bmad-studio/` directory in your project root for runtime state:
178
+
179
+ ```
180
+ .bmad-studio/
181
+ settings.json # Studio configuration (see above)
182
+ cache/ # Parsed entity cache for faster startup
183
+ logs/ # Server logs (when logging is enabled)
184
+ history/ # Change history
185
+ ```
186
+
187
+ This directory is gitignored by default. Delete it to fully reset Studio — zero-footprint removal.
188
+
189
+ ### Global State
190
+
191
+ Studio maintains a global registry of recent projects at `~/.bmad-studio/projects.json` (up to 10 entries). This enables the project switcher in Settings.
192
+
69
193
  ## Architecture
70
194
 
71
195
  BMAD Studio is a monorepo with three packages:
@@ -73,7 +197,7 @@ BMAD Studio is a monorepo with three packages:
73
197
  ```
74
198
  packages/
75
199
  shared/ # TypeScript types shared between client and server
76
- server/ # Fastify API — parses BMAD files, serves data, handles writes
200
+ server/ # Fastify 5 API — parses BMAD files, serves data, handles writes
77
201
  client/ # React SPA — Vite + Tailwind CSS + React Router
78
202
  ```
79
203
 
@@ -90,10 +214,10 @@ packages/
90
214
 
91
215
  | Layer | Technology |
92
216
  |-------|-----------|
93
- | Client | React 19, React Router 7, Tailwind CSS 4, TanStack Query, CodeMirror 6, React Flow |
94
- | Server | Fastify 5, Chokidar (file watching), gray-matter (frontmatter parsing) |
95
- | Shared | TypeScript 5.8 |
96
- | Build | Vite 6, tsx (dev), Vitest (testing) |
217
+ | Client | React 19, React Router 7, Tailwind CSS 4, shadcn/ui, CodeMirror 6 |
218
+ | Server | Fastify 5, Chokidar (file watching), WebSocket (live updates) |
219
+ | Shared | TypeScript |
220
+ | Build | Vite, tsx (dev), Vitest + Playwright (testing) |
97
221
 
98
222
  ## BMAD Concepts
99
223
 
@@ -103,7 +227,23 @@ packages/
103
227
  | **Skill** | Markdown file defining a capability assignable to agents |
104
228
  | **Workflow** | Structured markdown defining a sequence of steps with agents, inputs, and deliverables |
105
229
  | **Team** | Named grouping of agents for collaborative workflows and Party Mode |
106
- | **Module** | Versioned collection of BMAD entities from an external repository |
230
+ | **Module** | Versioned collection of agents, skills, workflows, and configuration for a specific domain |
231
+ | **Output** | Generated deliverable from a BMAD workflow (PRDs, architecture docs, stories, etc.) |
232
+ | **Command** | A BMAD process trigger organized by phase (Analysis, Planning, Solutioning, Implementation) |
233
+
234
+ ### Modules
235
+
236
+ Modules are how BMAD extends its capabilities for specific domains. They can be installed from multiple sources:
237
+
238
+ | Source | Example |
239
+ |--------|---------|
240
+ | **npm** | `npx bmad-studio` installs from the npm registry |
241
+ | **GitHub** | Install from any GitHub repository |
242
+ | **Local** | Point to a directory on disk (useful during development) |
243
+ | **ZIP** | Upload a ZIP archive |
244
+ | **Built-in** | Core modules bundled with BMAD |
245
+
246
+ Each module can contain agents, skills, workflows, teams, and configuration. Studio's Modules page lets you browse installed modules, explore a shared registry, install new modules, and export existing ones.
107
247
 
108
248
  For more on the BMAD method, see the [BMAD-METHOD repository](https://github.com/bmadcode/BMAD-METHOD).
109
249
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bmad-studio",
3
- "version": "1.0.0",
3
+ "version": "1.1.0",
4
4
  "description": "Browser-based admin interface for BMAD agentic engineering framework — visualize, configure, and manage your BMAD project",
5
5
  "type": "module",
6
6
  "workspaces": [
@@ -0,0 +1 @@
1
+ .markdown-preview{color:var(--color-text);font-size:.875rem;line-height:1.7;max-width:none}.markdown-preview h1{font-size:1.75rem;font-weight:800;margin-top:2rem;margin-bottom:1rem;padding-bottom:.5rem;border-bottom:1px solid var(--color-border-subtle);color:var(--color-text)}.markdown-preview h2{font-size:1.35rem;font-weight:700;margin-top:1.75rem;margin-bottom:.75rem;color:var(--color-text)}.markdown-preview h3{font-size:1.1rem;font-weight:700;margin-top:1.5rem;margin-bottom:.5rem;color:var(--color-text)}.markdown-preview h4,.markdown-preview h5,.markdown-preview h6{font-size:1rem;font-weight:600;margin-top:1.25rem;margin-bottom:.5rem;color:var(--color-text)}.markdown-preview h1:first-child{margin-top:0}.markdown-preview p{margin-bottom:.75rem}.markdown-preview a{color:var(--color-accent);text-decoration:none}.markdown-preview a:hover{text-decoration:underline}.markdown-preview strong{font-weight:700;color:var(--color-text)}.markdown-preview ul,.markdown-preview ol{margin-bottom:.75rem;padding-left:1.5rem}.markdown-preview ul{list-style-type:disc}.markdown-preview ol{list-style-type:decimal}.markdown-preview li{margin-bottom:.25rem}.markdown-preview li::marker{color:var(--color-muted)}.markdown-preview li>ul,.markdown-preview li>ol{margin-top:.25rem;margin-bottom:0}.markdown-preview blockquote{border-left:3px solid var(--color-accent);padding-left:1rem;margin:1rem 0;color:var(--color-muted);font-style:italic}.markdown-preview hr{border:none;border-top:1px solid var(--color-border-subtle);margin:1.5rem 0}.markdown-preview code{font-family:var(--font-mono);font-size:.8em;background:var(--color-surface-raised);padding:.15em .4em;border-radius:.25rem}.markdown-preview pre{background:var(--color-surface-raised);font-family:var(--font-mono);font-size:.8rem;padding:1rem;border-radius:.5rem;overflow-x:auto;margin:1rem 0;border:1px solid var(--color-border-subtle)}.markdown-preview pre code{background:none;padding:0;font-size:inherit}.markdown-preview table{width:100%;border-collapse:collapse;margin:1rem 0;font-size:.8rem}.markdown-preview th{text-align:left;font-weight:700;padding:.5rem .75rem;border:1px solid var(--color-border-subtle);background:var(--color-surface-raised)}.markdown-preview td{padding:.5rem .75rem;border:1px solid var(--color-border-subtle)}.markdown-preview img{max-width:100%;height:auto;border-radius:.5rem;margin:1rem 0}.markdown-preview input[type=checkbox]{margin-right:.5rem}/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */@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-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-divide-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-leading:initial;--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-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--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-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-divide-x-reverse:0}}}@layer theme{:root,:host{--font-sans:var(--font-sans);--font-mono:var(--font-mono);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-950:oklch(25.8% .092 26.042);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-950:oklch(26.6% .065 152.934);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--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);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height: 1.2 ;--font-weight-normal:400;--font-weight-medium:500;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-wide:.025em;--tracking-wider:.05em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--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:var(--color-accent);--color-accent-hover:var(--color-accent-hover);--color-bg:var(--color-bg);--color-text:var(--color-text);--color-muted:var(--color-muted);--color-success:var(--color-success);--color-warning:var(--color-warning);--color-error:var(--color-error)}}@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%;-moz-tab-size:4;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]){-webkit-appearance:button;-moz-appearance:button;appearance:button}::file-selector-button{-webkit-appearance:button;-moz-appearance: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{.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-0\.5{top:calc(var(--spacing) * .5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing) * 2)}.top-6{top:calc(var(--spacing) * 6)}.top-full{top:100%}.right-2{right:calc(var(--spacing) * 2)}.right-4{right:calc(var(--spacing) * 4)}.bottom-4{bottom:calc(var(--spacing) * 4)}.left-0{left:calc(var(--spacing) * 0)}.left-2{left:calc(var(--spacing) * 2)}.left-2\.5{left:calc(var(--spacing) * 2.5)}.left-3{left:calc(var(--spacing) * 3)}.z-10{z-index:10}.z-40{z-index:40}.z-50{z-index:50}.z-\[60\]{z-index:60}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mx-auto{margin-inline:auto}.my-2{margin-block:calc(var(--spacing) * 2)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.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-1{margin-right:calc(var(--spacing) * 1)}.mr-3{margin-right:calc(var(--spacing) * 3)}.mr-4{margin-right:calc(var(--spacing) * 4)}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.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)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.mb-10{margin-bottom:calc(var(--spacing) * 10)}.-ml-\[2px\]{margin-left:-2px}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-3{margin-left:calc(var(--spacing) * 3)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-6{margin-left:calc(var(--spacing) * 6)}.ml-7{margin-left:calc(var(--spacing) * 7)}.ml-\[calc\(12px\+0\.625rem\+1\.25rem\)\]{margin-left:calc(12px + 1.875rem)}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.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-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-11{height:calc(var(--spacing) * 11)}.h-12{height:calc(var(--spacing) * 12)}.h-16{height:calc(var(--spacing) * 16)}.h-24{height:calc(var(--spacing) * 24)}.h-32{height:calc(var(--spacing) * 32)}.h-40{height:calc(var(--spacing) * 40)}.h-48{height:calc(var(--spacing) * 48)}.h-64{height:calc(var(--spacing) * 64)}.h-96{height:calc(var(--spacing) * 96)}.h-\[500px\]{height:500px}.h-\[calc\(100vh-8rem\)\]{height:calc(100vh - 8rem)}.h-\[calc\(100vh-12rem\)\]{height:calc(100vh - 12rem)}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-36{max-height:calc(var(--spacing) * 36)}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-\[80vh\]{max-height:80vh}.max-h-\[85vh\]{max-height:85vh}.max-h-\[90vh\]{max-height:90vh}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-\[32px\]{min-height:32px}.min-h-\[36px\]{min-height:36px}.min-h-\[44px\]{min-height:44px}.min-h-\[80px\]{min-height:80px}.min-h-\[120px\]{min-height:120px}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-1\/2{width:50%}.w-2{width:calc(var(--spacing) * 2)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-3\/4{width:75%}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-11{width:calc(var(--spacing) * 11)}.w-12{width:calc(var(--spacing) * 12)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-32{width:calc(var(--spacing) * 32)}.w-36{width:calc(var(--spacing) * 36)}.w-48{width:calc(var(--spacing) * 48)}.w-56{width:calc(var(--spacing) * 56)}.w-60{width:calc(var(--spacing) * 60)}.w-64{width:calc(var(--spacing) * 64)}.w-\[700px\]{width:700px}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-\[60\%\]{max-width:60%}.max-w-\[80px\]{max-width:80px}.max-w-full{max-width:100%}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.max-w-none{max-width:none}.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-\[200px\]{min-width:200px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.translate-x-0\.5{--tw-translate-x:calc(var(--spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-1{--tw-translate-x:calc(var(--spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-5{--tw-translate-x:calc(var(--spacing) * 5);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-6{--tw-translate-x:calc(var(--spacing) * 6);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.-rotate-90{rotate:-90deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-grab{cursor:grab}.cursor-help{cursor:help}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.resize-y{resize:vertical}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.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-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}:where(.space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 0) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 0) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}: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)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 8) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 8) * calc(1 - var(--tw-space-y-reverse)))}: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-\[var\(--color-border-subtle\)\]>:not(:last-child)){border-color:var(--color-border-subtle)}:where(.divide-\[var\(--color-warning\)\]\/10>:not(:last-child)){border-color:var(--color-warning)}@supports (color:color-mix(in lab,red,red)){:where(.divide-\[var\(--color-warning\)\]\/10>:not(:last-child)){border-color:color-mix(in oklab,var(--color-warning) 10%,transparent)}}.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-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)}.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-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-\[var\(--color-accent\)\],.border-\[var\(--color-accent\)\]\/20{border-color:var(--color-accent)}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-accent\)\]\/20{border-color:color-mix(in oklab,var(--color-accent) 20%,transparent)}}.border-\[var\(--color-accent\)\]\/30{border-color:var(--color-accent)}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-accent\)\]\/30{border-color:color-mix(in oklab,var(--color-accent) 30%,transparent)}}.border-\[var\(--color-accent\)\]\/40{border-color:var(--color-accent)}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-accent\)\]\/40{border-color:color-mix(in oklab,var(--color-accent) 40%,transparent)}}.border-\[var\(--color-border-subtle\)\],.border-\[var\(--color-border-subtle\)\]\/50{border-color:var(--color-border-subtle)}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-border-subtle\)\]\/50{border-color:color-mix(in oklab,var(--color-border-subtle) 50%,transparent)}}.border-\[var\(--color-error\)\]{border-color:var(--color-error)}.border-\[var\(--color-success\)\],.border-\[var\(--color-success\)\]\/20{border-color:var(--color-success)}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-success\)\]\/20{border-color:color-mix(in oklab,var(--color-success) 20%,transparent)}}.border-\[var\(--color-warning\)\],.border-\[var\(--color-warning\)\]\/20{border-color:var(--color-warning)}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-warning\)\]\/20{border-color:color-mix(in oklab,var(--color-warning) 20%,transparent)}}.border-\[var\(--color-warning\)\]\/30{border-color:var(--color-warning)}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-warning\)\]\/30{border-color:color-mix(in oklab,var(--color-warning) 30%,transparent)}}.border-\[var\(--color-warning\)\]\/40{border-color:var(--color-warning)}@supports (color:color-mix(in lab,red,red)){.border-\[var\(--color-warning\)\]\/40{border-color:color-mix(in oklab,var(--color-warning) 40%,transparent)}}.border-amber-500\/30{border-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/30{border-color:color-mix(in oklab,var(--color-amber-500) 30%,transparent)}}.border-blue-400\/50{border-color:#54a2ff80}@supports (color:color-mix(in lab,red,red)){.border-blue-400\/50{border-color:color-mix(in oklab,var(--color-blue-400) 50%,transparent)}}.border-blue-500\/30{border-color:#3080ff4d}@supports (color:color-mix(in lab,red,red)){.border-blue-500\/30{border-color:color-mix(in oklab,var(--color-blue-500) 30%,transparent)}}.border-current{border-color:currentColor}.border-green-500\/30{border-color:#00c7584d}@supports (color:color-mix(in lab,red,red)){.border-green-500\/30{border-color:color-mix(in oklab,var(--color-green-500) 30%,transparent)}}.border-purple-400\/50{border-color:#c07eff80}@supports (color:color-mix(in lab,red,red)){.border-purple-400\/50{border-color:color-mix(in oklab,var(--color-purple-400) 50%,transparent)}}.border-purple-500\/30{border-color:#ac4bff4d}@supports (color:color-mix(in lab,red,red)){.border-purple-500\/30{border-color:color-mix(in oklab,var(--color-purple-500) 30%,transparent)}}.border-transparent{border-color:#0000}.border-yellow-500\/30{border-color:#edb2004d}@supports (color:color-mix(in lab,red,red)){.border-yellow-500\/30{border-color:color-mix(in oklab,var(--color-yellow-500) 30%,transparent)}}.border-l-\[var\(--color-accent\)\]{border-left-color:var(--color-accent)}.bg-\[var\(--color-accent\)\],.bg-\[var\(--color-accent\)\]\/3{background-color:var(--color-accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--color-accent\)\]\/3{background-color:color-mix(in oklab,var(--color-accent) 3%,transparent)}}.bg-\[var\(--color-accent\)\]\/5{background-color:var(--color-accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--color-accent\)\]\/5{background-color:color-mix(in oklab,var(--color-accent) 5%,transparent)}}.bg-\[var\(--color-accent\)\]\/10{background-color:var(--color-accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--color-accent\)\]\/10{background-color:color-mix(in oklab,var(--color-accent) 10%,transparent)}}.bg-\[var\(--color-accent\)\]\/\[0\.03\]{background-color:var(--color-accent)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--color-accent\)\]\/\[0\.03\]{background-color:color-mix(in oklab,var(--color-accent) 3%,transparent)}}.bg-\[var\(--color-bg\)\]{background-color:var(--color-bg)}.bg-\[var\(--color-border-subtle\)\]{background-color:var(--color-border-subtle)}.bg-\[var\(--color-error\)\]{background-color:var(--color-error)}.bg-\[var\(--color-success\)\]{background-color:var(--color-success)}.bg-\[var\(--color-surface-raised\)\],.bg-\[var\(--color-surface-raised\)\]\/50{background-color:var(--color-surface-raised)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--color-surface-raised\)\]\/50{background-color:color-mix(in oklab,var(--color-surface-raised) 50%,transparent)}}.bg-\[var\(--color-warning\)\],.bg-\[var\(--color-warning\)\]\/5{background-color:var(--color-warning)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--color-warning\)\]\/5{background-color:color-mix(in oklab,var(--color-warning) 5%,transparent)}}.bg-\[var\(--color-warning\)\]\/10{background-color:var(--color-warning)}@supports (color:color-mix(in lab,red,red)){.bg-\[var\(--color-warning\)\]\/10{background-color:color-mix(in oklab,var(--color-warning) 10%,transparent)}}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/10{background-color:color-mix(in oklab,var(--color-amber-500) 10%,transparent)}}.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\/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-blue-500\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500) 10%,transparent)}}.bg-green-500\/10{background-color:#00c7581a}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/10{background-color:color-mix(in oklab,var(--color-green-500) 10%,transparent)}}.bg-green-500\/20{background-color:#00c75833}@supports (color:color-mix(in lab,red,red)){.bg-green-500\/20{background-color:color-mix(in oklab,var(--color-green-500) 20%,transparent)}}.bg-green-950\/30{background-color:#032e154d}@supports (color:color-mix(in lab,red,red)){.bg-green-950\/30{background-color:color-mix(in oklab,var(--color-green-950) 30%,transparent)}}.bg-orange-500\/10{background-color:#fe6e001a}@supports (color:color-mix(in lab,red,red)){.bg-orange-500\/10{background-color:color-mix(in oklab,var(--color-orange-500) 10%,transparent)}}.bg-purple-500\/10{background-color:#ac4bff1a}@supports (color:color-mix(in lab,red,red)){.bg-purple-500\/10{background-color:color-mix(in oklab,var(--color-purple-500) 10%,transparent)}}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab,red,red)){.bg-red-500\/10{background-color:color-mix(in oklab,var(--color-red-500) 10%,transparent)}}.bg-red-950\/30{background-color:#4608094d}@supports (color:color-mix(in lab,red,red)){.bg-red-950\/30{background-color:color-mix(in oklab,var(--color-red-950) 30%,transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-yellow-500\/10{background-color:#edb2001a}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/10{background-color:color-mix(in oklab,var(--color-yellow-500) 10%,transparent)}}.bg-yellow-500\/20{background-color:#edb20033}@supports (color:color-mix(in lab,red,red)){.bg-yellow-500\/20{background-color:color-mix(in oklab,var(--color-yellow-500) 20%,transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[var\(--color-accent\)\]\/20{--tw-gradient-from:var(--color-accent)}@supports (color:color-mix(in lab,red,red)){.from-\[var\(--color-accent\)\]\/20{--tw-gradient-from:color-mix(in oklab, var(--color-accent) 20%, transparent)}}.from-\[var\(--color-accent\)\]\/20{--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))}.to-\[var\(--color-accent\)\]\/5{--tw-gradient-to:var(--color-accent)}@supports (color:color-mix(in lab,red,red)){.to-\[var\(--color-accent\)\]\/5{--tw-gradient-to:color-mix(in oklab, var(--color-accent) 5%, transparent)}}.to-\[var\(--color-accent\)\]\/5{--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))}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.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-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.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)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-16{padding-block:calc(var(--spacing) * 16)}.pt-0{padding-top:calc(var(--spacing) * 0)}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-\[18vh\]{padding-top:18vh}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-10{padding-bottom:calc(var(--spacing) * 10)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-7{padding-left:calc(var(--spacing) * 7)}.pl-8{padding-left:calc(var(--spacing) * 8)}.pl-9{padding-left:calc(var(--spacing) * 9)}.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-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-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-\[var\(--font-mono\)\]{--tw-font-weight:var(--font-mono);font-weight:var(--font-mono)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-line{white-space:pre-line}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[var\(--color-accent\)\],.text-\[var\(--color-accent\)\]\/50{color:var(--color-accent)}@supports (color:color-mix(in lab,red,red)){.text-\[var\(--color-accent\)\]\/50{color:color-mix(in oklab,var(--color-accent) 50%,transparent)}}.text-\[var\(--color-border-subtle\)\]{color:var(--color-border-subtle)}.text-\[var\(--color-error\)\]{color:var(--color-error)}.text-\[var\(--color-muted\)\],.text-\[var\(--color-muted\)\]\/60{color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.text-\[var\(--color-muted\)\]\/60{color:color-mix(in oklab,var(--color-muted) 60%,transparent)}}.text-\[var\(--color-success\)\]{color:var(--color-success)}.text-\[var\(--color-text\)\]{color:var(--color-text)}.text-\[var\(--color-warning\)\],.text-\[var\(--color-warning\)\]\/70{color:var(--color-warning)}@supports (color:color-mix(in lab,red,red)){.text-\[var\(--color-warning\)\]\/70{color:color-mix(in oklab,var(--color-warning) 70%,transparent)}}.text-amber-400{color:var(--color-amber-400)}.text-blue-400{color:var(--color-blue-400)}.text-green-400{color:var(--color-green-400)}.text-orange-400{color:var(--color-orange-400)}.text-purple-400{color:var(--color-purple-400)}.text-red-400{color:var(--color-red-400)}.text-white{color:var(--color-white)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-500{color:var(--color-yellow-500)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.underline{text-decoration-line:underline}.accent-\[var\(--color-accent\)\]{accent-color:var(--color-accent)}.opacity-0{opacity:0}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.shadow-\[var\(--color-accent\)\]\/10{--tw-shadow-alpha:10%;--tw-shadow:var(--color-accent);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.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-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-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-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-\[var\(--color-accent\)\]\/30{--tw-ring-color:var(--color-accent)}@supports (color:color-mix(in lab,red,red)){.ring-\[var\(--color-accent\)\]\/30{--tw-ring-color:color-mix(in oklab, var(--color-accent) 30%, transparent)}}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.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-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))}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.ring-inset{--tw-ring-inset:inset}@media(hover:hover){.group-hover\:text-\[var\(--color-accent\)\]:is(:where(.group):hover *){color:var(--color-accent)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.file\:mr-3::file-selector-button{margin-right:calc(var(--spacing) * 3)}.file\:rounded-md::file-selector-button{border-radius:var(--radius-md)}.file\:border::file-selector-button{border-style:var(--tw-border-style);border-width:1px}.file\:border-\[var\(--color-border-subtle\)\]::file-selector-button{border-color:var(--color-border-subtle)}.file\:bg-\[var\(--color-surface-raised\)\]::file-selector-button{background-color:var(--color-surface-raised)}.file\:px-3::file-selector-button{padding-inline:calc(var(--spacing) * 3)}.file\:py-1\.5::file-selector-button{padding-block:calc(var(--spacing) * 1.5)}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:text-\[var\(--color-text\)\]::file-selector-button{color:var(--color-text)}.placeholder\:text-\[var\(--color-muted\)\]::placeholder{color:var(--color-muted)}@media(hover:hover){.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-\[var\(--color-accent\)\]:hover,.hover\:border-\[var\(--color-accent\)\]\/50:hover{border-color:var(--color-accent)}@supports (color:color-mix(in lab,red,red)){.hover\:border-\[var\(--color-accent\)\]\/50:hover{border-color:color-mix(in oklab,var(--color-accent) 50%,transparent)}}.hover\:border-\[var\(--color-accent\)\]\/60:hover{border-color:var(--color-accent)}@supports (color:color-mix(in lab,red,red)){.hover\:border-\[var\(--color-accent\)\]\/60:hover{border-color:color-mix(in oklab,var(--color-accent) 60%,transparent)}}.hover\:bg-\[var\(--color-accent\)\]:hover{background-color:var(--color-accent)}.hover\:bg-\[var\(--color-accent-hover\)\]:hover{background-color:var(--color-accent-hover)}.hover\:bg-\[var\(--color-bg\)\]:hover{background-color:var(--color-bg)}.hover\:bg-\[var\(--color-error\)\]:hover{background-color:var(--color-error)}.hover\:bg-\[var\(--color-surface-raised\)\]:hover,.hover\:bg-\[var\(--color-surface-raised\)\]\/60:hover{background-color:var(--color-surface-raised)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-\[var\(--color-surface-raised\)\]\/60:hover{background-color:color-mix(in oklab,var(--color-surface-raised) 60%,transparent)}}.hover\:bg-yellow-600:hover{background-color:var(--color-yellow-600)}.hover\:text-\[var\(--color-accent\)\]:hover{color:var(--color-accent)}.hover\:text-\[var\(--color-accent-hover\)\]:hover{color:var(--color-accent-hover)}.hover\:text-\[var\(--color-error\)\]:hover{color:var(--color-error)}.hover\:text-\[var\(--color-text\)\]:hover{color:var(--color-text)}.hover\:text-white:hover{color:var(--color-white)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-90:hover{opacity:.9}.hover\:shadow-lg:hover{--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)}.hover\:shadow-md:hover{--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)}.hover\:file\:bg-\[var\(--color-bg\)\]:hover::file-selector-button{background-color:var(--color-bg)}}.focus\:border-\[var\(--color-accent\)\]:focus{border-color:var(--color-accent)}.focus\:border-\[var\(--color-error\)\]:focus{border-color:var(--color-error)}.focus\:ring-\[var\(--color-accent\)\]:focus{--tw-ring-color:var(--color-accent)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:40rem){.sm\:inline{display:inline}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.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-3{grid-template-columns:repeat(3,minmax(0,1fr))}:where(.md\:divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px * var(--tw-divide-x-reverse));border-inline-end-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}:where(.md\:divide-y-0>: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(0px * var(--tw-divide-y-reverse));border-bottom-width:calc(0px * calc(1 - var(--tw-divide-y-reverse)))}}@media(min-width:64rem){.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}}@font-face{font-family:Inter Tight;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-tight-cyrillic-ext-400-normal-CKO3cWyd.woff2)format("woff2"),url(/assets/inter-tight-cyrillic-ext-400-normal-DiHHcP5k.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Tight;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-tight-cyrillic-400-normal-G7BuwYWK.woff2)format("woff2"),url(/assets/inter-tight-cyrillic-400-normal-DPRou3KO.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter Tight;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-tight-greek-ext-400-normal-C3GMUg_S.woff2)format("woff2"),url(/assets/inter-tight-greek-ext-400-normal-DMqR5RoS.woff)format("woff");unicode-range:U+1F??}@font-face{font-family:Inter Tight;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-tight-greek-400-normal-Br_GQm5W.woff2)format("woff2"),url(/assets/inter-tight-greek-400-normal-BLLSFQTx.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter Tight;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-tight-vietnamese-400-normal-CqzIqjuX.woff2)format("woff2"),url(/assets/inter-tight-vietnamese-400-normal-kSDs3Vd1.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Tight;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-tight-latin-ext-400-normal-DN7wyBvd.woff2)format("woff2"),url(/assets/inter-tight-latin-ext-400-normal-BQQeeQrv.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Tight;font-style:normal;font-display:swap;font-weight:400;src:url(/assets/inter-tight-latin-400-normal-iW8qmuJY.woff2)format("woff2"),url(/assets/inter-tight-latin-400-normal-BLrFJfvD.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter Tight;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-tight-cyrillic-ext-700-normal-D_7NT8eF.woff2)format("woff2"),url(/assets/inter-tight-cyrillic-ext-700-normal-BFcoPt71.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Tight;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-tight-cyrillic-700-normal-DtWWjp29.woff2)format("woff2"),url(/assets/inter-tight-cyrillic-700-normal-DDZiLR3d.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter Tight;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-tight-greek-ext-700-normal-D0RkHJEE.woff2)format("woff2"),url(/assets/inter-tight-greek-ext-700-normal-mW3dmpoD.woff)format("woff");unicode-range:U+1F??}@font-face{font-family:Inter Tight;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-tight-greek-700-normal-RgALSHS4.woff2)format("woff2"),url(/assets/inter-tight-greek-700-normal-DU8XoIeX.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter Tight;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-tight-vietnamese-700-normal-Cn_DV52A.woff2)format("woff2"),url(/assets/inter-tight-vietnamese-700-normal-DwHBAXeT.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Tight;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-tight-latin-ext-700-normal-BpKPOkj3.woff2)format("woff2"),url(/assets/inter-tight-latin-ext-700-normal-CrlzIQ10.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Tight;font-style:normal;font-display:swap;font-weight:700;src:url(/assets/inter-tight-latin-700-normal-BZKd_v_8.woff2)format("woff2"),url(/assets/inter-tight-latin-700-normal-DvYAVZQd.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Inter Tight;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/inter-tight-cyrillic-ext-800-normal-CzCOBUhR.woff2)format("woff2"),url(/assets/inter-tight-cyrillic-ext-800-normal-WowoGRZX.woff)format("woff");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Tight;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/inter-tight-cyrillic-800-normal-CC_RRmyd.woff2)format("woff2"),url(/assets/inter-tight-cyrillic-800-normal-ChWbk4mt.woff)format("woff");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter Tight;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/inter-tight-greek-ext-800-normal-DNWjXg9N.woff2)format("woff2"),url(/assets/inter-tight-greek-ext-800-normal-DfP-QoiQ.woff)format("woff");unicode-range:U+1F??}@font-face{font-family:Inter Tight;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/inter-tight-greek-800-normal-X9eW6L67.woff2)format("woff2"),url(/assets/inter-tight-greek-800-normal-CxHmUlv4.woff)format("woff");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter Tight;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/inter-tight-vietnamese-800-normal-OJoDhpMd.woff2)format("woff2"),url(/assets/inter-tight-vietnamese-800-normal-CbYrLkxo.woff)format("woff");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Tight;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/inter-tight-latin-ext-800-normal-DfKN99cy.woff2)format("woff2"),url(/assets/inter-tight-latin-ext-800-normal-A39zhqaD.woff)format("woff");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Tight;font-style:normal;font-display:swap;font-weight:800;src:url(/assets/inter-tight-latin-800-normal-CRGCHRPv.woff2)format("woff2"),url(/assets/inter-tight-latin-800-normal-D2te1T7i.woff)format("woff");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--color-accent:#ff4a00;--color-accent-hover:#e04300;--color-yellow:#cf0;--color-bg:#fff;--color-surface-raised:#f5f5f5;--color-text:#000;--color-muted:#71717a;--color-border-subtle:#e4e4e7;--color-success:#22c55e;--color-warning:#f59e0b;--color-error:#ef4444;--color-neutral:#a1a1aa;--font-sans:"Inter Tight", system-ui, sans-serif;--font-mono:ui-monospace, "SFMono-Regular", "SF Mono", Menlo, Consolas, monospace}.dark{--color-bg:#000;--color-surface-raised:#1a1a1a;--color-text:#fff;--color-muted:#a1a1aa;--color-border-subtle:#27272a;--color-accent-hover:#ff6a33}:root{--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-7:28px;--space-8:32px;--space-9:36px;--space-10:40px;--space-11:44px;--space-12:48px}body{font-family:var(--font-sans);background-color:var(--color-bg);color:var(--color-text);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.btn-primary{background-color:var(--color-accent);color:#fff;cursor:pointer;border-radius:6px;justify-content:center;align-items:center;min-height:36px;padding:8px 16px;font-size:14px;font-weight:700;transition:background-color .15s;display:inline-flex}.btn-primary:hover{background-color:var(--color-accent-hover)}.btn-primary:disabled{opacity:.4;cursor:not-allowed}.btn-secondary{border:1px solid var(--color-border-subtle);color:var(--color-text);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;min-height:36px;padding:8px 16px;font-size:14px;transition:background-color .15s;display:inline-flex}.btn-secondary:hover{background-color:var(--color-surface-raised)}.btn-ghost{color:var(--color-muted);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;min-height:36px;padding:8px 12px;font-size:14px;transition:color .15s,background-color .15s;display:inline-flex}.btn-ghost:hover{color:var(--color-text);background-color:var(--color-surface-raised)}.dark .prose{--tw-prose-body:var(--color-text);--tw-prose-headings:var(--color-text);--tw-prose-links:var(--color-accent);--tw-prose-bold:var(--color-text);--tw-prose-counters:var(--color-muted);--tw-prose-bullets:var(--color-muted);--tw-prose-hr:var(--color-border-subtle);--tw-prose-quotes:var(--color-muted);--tw-prose-quote-borders:var(--color-accent);--tw-prose-code:var(--color-text);--tw-prose-pre-code:var(--color-text);--tw-prose-pre-bg:var(--color-surface-raised);--tw-prose-th-borders:var(--color-border-subtle);--tw-prose-td-borders:var(--color-border-subtle)}.slide-over-backdrop{z-index:40;justify-content:flex-end;display:flex;position:fixed;top:0;right:0;bottom:0;left:0}.slide-over-backdrop .slide-over-bg{background:#0006;position:absolute;top:0;right:0;bottom:0;left:0}.slide-over-backdrop .slide-over-panel{z-index:1;background:var(--color-bg);border-left:1px solid var(--color-border-subtle);max-height:100vh;position:relative;overflow-y:auto;box-shadow:-4px 0 24px #00000026}@media(prefers-reduced-motion:reduce){*,:before,:after{transition-duration:0s!important;animation-duration:0s!important}}@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-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{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-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-leading{syntax:"*";inherits:false}@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-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@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-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}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}