interceptr 1.3.0 → 1.4.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 CHANGED
@@ -1,47 +1,39 @@
1
1
  <p align="center">
2
- <img src="logo.png" alt="Interceptr" width="420" />
2
+ <img src="https://raw.githubusercontent.com/pckhib/interceptr/main/logo.png" alt="Interceptr" width="420" />
3
3
  </p>
4
4
 
5
5
  <p align="center">
6
- <strong>A local API proxy for intercepting, mocking, and manipulating HTTP traffic during development.</strong>
6
+ <a href="https://github.com/pckhib/interceptr/actions/workflows/release.yml"><img src="https://img.shields.io/github/actions/workflow/status/pckhib/interceptr/release.yml?branch=main&label=release&color=4f46e5&labelColor=1e1b4b&style=flat-square" alt="release status" /></a>
7
+ <a href="https://www.npmjs.com/package/interceptr"><img src="https://img.shields.io/npm/v/interceptr?color=4f46e5&labelColor=1e1b4b&style=flat-square" alt="npm version" /></a>
8
+ <a href="https://www.npmjs.com/package/interceptr"><img src="https://img.shields.io/npm/dm/interceptr?color=4f46e5&labelColor=1e1b4b&style=flat-square" alt="npm downloads" /></a>
9
+ <a href="https://nodejs.org"><img src="https://img.shields.io/node/v/interceptr?color=4f46e5&labelColor=1e1b4b&style=flat-square" alt="Node.js version" /></a>
10
+ <a href="LICENSE"><img src="https://img.shields.io/npm/l/interceptr?color=4f46e5&labelColor=1e1b4b&style=flat-square" alt="MIT license" /></a>
7
11
  </p>
8
12
 
9
13
  <p align="center">
10
- Import your OpenAPI specs, configure per-endpoint behavior, and switch between environmentsall from a clean web UI.
14
+ <strong>A local HTTP proxy for mocking, intercepting, and delaying API callswith a browser-based UI.</strong>
11
15
  </p>
12
16
 
13
- ---
14
-
15
- ## Features
16
-
17
- - **Consolidated Workspace** — Manage endpoints and monitor traffic in a single, high-efficiency two-panel view.
18
- - **OpenAPI Integration** — Import specs via URL or file upload. Supports OpenAPI 3.0/3.1 (JSON/YAML) with automatic response example generation.
19
- - **Per-Endpoint & Group Control** — Set proxy modes (Pass, Delay, Mock) for individual endpoints or entire tag groups.
20
- - **Precision Mocking** — Populate mock responses instantly using examples from your OpenAPI spec, or create custom ones with a built-in JSON editor.
21
- - **Live Traffic Monitor** — Inspect real-time request/response cycles with a dense, searchable activity feed and detailed inspector drawer.
22
- - **Multi-Environment Support** — Organize work into projects and switch between multiple specifications (e.g., local, staging) with a single click.
23
- - **Presets** — Save and restore complete endpoint configurations. Includes built-in quick actions (Pass All, Slow, Errors).
24
- - **Theme Support** — Professional-grade "Midnight Blue" dark mode and a clean, high-contrast light mode.
25
-
26
- ## Getting Started
17
+ <p align="center">
18
+ Import your OpenAPI / Swagger spec, control each endpoint individually (pass, delay, or mock), and watch live traffic in real time. No code changes. No config files. Just run it and point your app at the proxy.
19
+ </p>
27
20
 
28
- ### Install from npm
21
+ ---
29
22
 
30
- **Run without installing** (recommended for trying it out):
23
+ ## Quick Start
31
24
 
32
25
  ```bash
33
26
  npx interceptr
34
27
  ```
35
28
 
36
- **Install globally** and run anytime:
29
+ Then open **http://localhost:3001** in your browser. Point your app (or Postman, curl, etc.) at **http://localhost:4000** — traffic will be intercepted and handled based on your settings.
37
30
 
38
31
  ```bash
32
+ # Install globally
39
33
  npm install -g interceptr
40
- interceptr
34
+ interceptr --port 3001
41
35
  ```
42
36
 
43
- Once running, open [http://localhost:3001](http://localhost:3001) in your browser to access the management UI. The proxy listens on [http://localhost:4000](http://localhost:4000) — point your app there to start intercepting traffic.
44
-
45
37
  ### CLI Options
46
38
 
47
39
  | Flag | Alias | Default | Description |
@@ -50,123 +42,68 @@ Once running, open [http://localhost:3001](http://localhost:3001) in your browse
50
42
 
51
43
  ---
52
44
 
53
- ### Development (from source)
54
-
55
- #### Prerequisites
45
+ ## What Is It For?
56
46
 
57
- - **Node.js** >= 22
58
- - **pnpm** >= 10
59
-
60
- #### Install & Run
61
-
62
- ```bash
63
- # Install dependencies
64
- pnpm install
65
-
66
- # Start both servers in dev mode
67
- pnpm dev
68
- ```
47
+ Interceptr runs as a **local reverse proxy** that sits between your frontend (or any HTTP client) and your real backend. Once your OpenAPI/Swagger spec is imported, you can control every endpoint without touching your application code:
69
48
 
70
- This starts:
71
- - **Management UI** at [http://localhost:5173](http://localhost:5173)
72
- - **Management API** at [http://localhost:3001](http://localhost:3001)
73
- - **Proxy server** at [http://localhost:4000](http://localhost:4000)
49
+ - **Frontend dev without a backend** — mock any endpoint with a custom JSON response
50
+ - **Simulate slow networks** inject configurable latency per endpoint
51
+ - **Test error handling** force 4xx/5xx responses on demand
52
+ - **Switch environments instantly** toggle between local, staging, or mock mode per endpoint
53
+ - **Debug API issues** — inspect full request/response cycles in the live traffic monitor
74
54
 
75
- #### Lint
76
-
77
- ```bash
78
- # Lint all packages
79
- pnpm lint
80
-
81
- # Lint a specific package
82
- pnpm --filter interceptr lint
83
- pnpm --filter @interceptr/web lint
84
- ```
55
+ ---
85
56
 
86
- #### Production Build & Run
57
+ ## Features
87
58
 
88
- ```bash
89
- # Build all packages
90
- pnpm build
59
+ - **OpenAPI / Swagger Import** — Load specs from a URL or file upload. Supports OpenAPI 3.0 and 3.1, JSON and YAML. Mock responses are auto-populated from spec examples.
60
+ - **Per-Endpoint Proxy Modes** — Choose **Pass** (forward to upstream), **Delay** (inject latency + jitter), or **Mock** (serve custom response) for each endpoint individually.
61
+ - **Group Actions** — Apply a mode to all endpoints in a tag group at once.
62
+ - **Live Traffic Monitor** — Watch request/response cycles in real time. Filter by method, status code, or proxy mode. Click any entry to inspect headers and JSON body.
63
+ - **Presets** — Save and restore full endpoint configurations. Built-in actions: Pass All, Slow All, Error All.
64
+ - **Multi-Project & Multi-Spec** — Organize work into projects. Toggle multiple specs (e.g., local + staging) simultaneously.
65
+ - **Global Response Headers** — Inject headers (e.g., CORS) across all responses for a spec, overridable per endpoint.
66
+ - **Conditional Rules** — Define per-request overrides based on request count, random failure rate, or header matching.
67
+ - **No Config Files** — Everything is managed from the web UI and persisted automatically as JSON.
68
+ - **Theme Support** — Dark mode (Midnight Blue) and high-contrast light mode.
91
69
 
92
- # Run the built app
93
- pnpm start
94
- ```
70
+ ---
95
71
 
96
72
  ## Usage
97
73
 
98
- ### 1. Global Navigation
74
+ ### 1. Import a Spec
99
75
 
100
- All primary controls are in the top header:
101
- - **Project Switcher**: Create or switch between different projects.
102
- - **Spec Selector**: Import, reimport, configure upstream URLs, and toggle active specifications.
103
- - **Proxy Control**: Start/Stop the proxy engine and monitor listener status.
104
- - **System Settings**: Access project renaming, port configuration, data export/import, and version info.
76
+ Click **Select Spec** in the header → **+** → paste a URL (e.g. `https://petstore.swagger.io/v2/swagger.json`) or upload a `.json` / `.yaml` file.
105
77
 
106
- ### 2. Endpoints Registry (Left Panel)
78
+ ### 2. Configure Endpoints
107
79
 
108
- Configure how traffic is handled per endpoint or by group:
80
+ The **Endpoints Registry** lists every operation from your spec, grouped by tag.
109
81
 
110
82
  | Mode | Behavior |
111
83
  |---|---|
112
84
  | **Pass** | Forwards the request to the upstream server unchanged. |
113
85
  | **Delay** | Simulates latency. Configure milliseconds and optional jitter. |
114
- | **Mock** | Overrides the response. Use "Spec Defined Responses" to instantly populate data from your OpenAPI definitions. |
86
+ | **Mock** | Returns a custom response. Use spec-defined examples or write your own JSON. |
115
87
 
116
- **Group Actions**: Apply a mode to all endpoints in a tag group with a single click.
88
+ Click an endpoint to open the editor. Use **group action buttons** (Pass / Delay / Mock) above each tag group to apply a mode to all endpoints at once.
117
89
 
118
- ### 3. Traffic Monitor (Right Panel)
90
+ ### 3. Monitor Traffic
119
91
 
120
- Monitor flows in real-time:
121
- - **Live Stream**: View incoming requests as they hit the proxy.
122
- - **Filters**: Isolate traffic by Method, Status Code range (2xx/4xx/5xx), or Proxy Mode.
123
- - **Inspector**: Click any entry to open a detail drawer showing full request/response headers and formatted JSON bodies.
124
- - **Clear Logs**: Remove all recorded entries from the buffer.
92
+ The **Traffic Monitor** (right panel) streams every request in real time. Click any entry to inspect the full request/response — headers, status code, body, and matched endpoint.
125
93
 
126
- ### 4. Presets
94
+ ### 4. Use Presets
127
95
 
128
- Use the **Preset Bar** to quickly apply complete configurations.
96
+ The **Preset Bar** lets you save and restore complete endpoint configurations. Built-in quick actions:
129
97
 
130
- **Built-in quick actions:**
131
- - **Pass All**: Instant bypass for all endpoints.
132
- - **Slow**: Set all endpoints to a 2000ms delay.
133
- - **Errors**: Set all endpoints to return a 500 mock response.
134
-
135
- **Saved presets:**
136
- - Save your current endpoint configuration under a custom name.
137
- - Apply any saved preset to instantly restore that configuration.
98
+ - **Pass All** — Instant bypass for all endpoints
99
+ - **Slow** Set all endpoints to 2000 ms delay
100
+ - **Errors** Set all endpoints to return 500
138
101
 
139
102
  ### 5. Point Your App at the Proxy
140
103
 
141
- Point your application to `http://localhost:4000` (or your configured port). Traffic will be intercepted and manipulated based on your active registry settings.
142
-
143
- ## Testing
144
-
145
- ### Run All Tests
146
-
147
- ```bash
148
- pnpm test
149
- ```
150
-
151
- ### Backend (apps/server)
152
-
153
- ```bash
154
- # Run tests
155
- pnpm --filter interceptr test
156
-
157
- # Run with coverage
158
- pnpm --filter interceptr test:coverage
159
- ```
160
-
161
- ### Frontend (apps/web)
162
-
163
- ```bash
164
- # Run tests
165
- pnpm --filter @interceptr/web test
104
+ Set your app's base URL (or `HTTP_PROXY` / `HTTPS_PROXY` env var) to `http://localhost:4000`. All matching traffic will be intercepted.
166
105
 
167
- # Run with coverage
168
- pnpm --filter @interceptr/web test:coverage
169
- ```
106
+ ---
170
107
 
171
108
  ## Architecture
172
109
 
@@ -180,8 +117,7 @@ pnpm --filter @interceptr/web test:coverage
180
117
  │ :3001 │ Vite :5173 │ types │
181
118
  │ │ │ │
182
119
  │ Proxy │ Tailwind v4 │ │
183
- │ :4000 │ OKLCH Theme │ │
184
- │ │ TanStack │ │
120
+ │ :4000 │ TanStack │ │
185
121
  └──────────────┴──────────────┴───────────────┘
186
122
  ```
187
123
 
@@ -189,13 +125,12 @@ pnpm --filter @interceptr/web test:coverage
189
125
  |---|---|
190
126
  | **Management API** | Hono on port 3001 |
191
127
  | **Proxy Server** | Hono on port 4000 |
192
- | **Frontend** | React 19, Vite, Tailwind v4 (OKLCH), TanStack Query, React Router v7 |
193
- | **Shared** | TypeScript types |
194
- | **Storage** | JSON files in `data/` directory |
128
+ | **Frontend** | React 19, Vite, Tailwind v4, TanStack Query, React Router v7 |
129
+ | **Storage** | JSON files in `data/` |
195
130
  | **Live Feed** | Server-Sent Events (SSE) |
196
- | **Testing** | Vitest, Testing Library, jsdom |
197
- | **Linting** | ESLint 10, typescript-eslint, eslint-plugin-react-hooks |
198
- | **Releases** | semantic-release (Conventional Commits) |
131
+ | **Testing** | Vitest, Testing Library |
132
+
133
+ ---
199
134
 
200
135
  ## API Reference
201
136
 
@@ -220,7 +155,7 @@ The management API runs on port 3001. All endpoints are prefixed with `/api`.
220
155
  | `POST` | `/specs` | Upload a spec (body: `{spec, name, upstreamUrl?}`) |
221
156
  | `POST` | `/specs/url` | Import a spec from URL (body: `{url, name}`) |
222
157
  | `POST` | `/specs/:id/reimport` | Reimport from source URL or new body |
223
- | `PUT` | `/specs/:id` | Update spec metadata (body: `{name?, upstreamUrl?, active?}`) |
158
+ | `PUT` | `/specs/:id` | Update spec metadata (body: `{name?, upstreamUrl?, active?, globalHeaders?}`) |
224
159
  | `PUT` | `/specs/:id/toggle` | Toggle spec active state |
225
160
  | `DELETE` | `/specs/:id` | Delete a spec |
226
161
 
@@ -232,7 +167,7 @@ The management API runs on port 3001. All endpoints are prefixed with `/api`.
232
167
  | `PUT` | `/endpoints/:id` | Update endpoint config |
233
168
  | `PUT` | `/endpoints/bulk` | Bulk update endpoints (body: `{[id]: Partial<EndpointConfig>}`) |
234
169
 
235
- The endpoint config body supports a `conditionalRules` array for request-time overrides. Each rule has a `type` of `nth-request`, `random-failure`, or `header-match`, and a `response` to serve when triggered. These rules are evaluated before the endpoint's base mode.
170
+ The endpoint config supports a `conditionalRules` array for request-time overrides. Each rule has a `type` of `nth-request`, `random-failure`, or `header-match`, and a `response` served when triggered.
236
171
 
237
172
  ### Presets
238
173
 
@@ -274,20 +209,57 @@ The endpoint config body supports a `conditionalRules` array for request-time ov
274
209
  |---|---|---|
275
210
  | `GET` | `/health` | Health check — returns `{status: "ok", version}` |
276
211
 
212
+ ---
213
+
277
214
  ## Data Storage
278
215
 
279
216
  All data is stored as JSON files in the `data/` directory:
280
217
 
281
218
  ```
282
219
  data/
283
- global.json # Global config + project list
284
- logs.json # Persisted activity logs (ring buffer)
220
+ global.json # Global config + project list
221
+ logs.json # Activity logs (500-entry ring buffer)
285
222
  projects/
286
- <project-id>.json # Specs, endpoints, and presets per project
223
+ <project-id>.json # Specs, endpoints, and presets per project
287
224
  ```
288
225
 
289
- Logs are kept in a 500-entry ring buffer that persists across server restarts. All writes are debounced (1 second) to avoid excessive disk I/O.
226
+ Writes are debounced (1 second) to avoid excessive disk I/O.
227
+
228
+ ---
229
+
230
+ ## Development
231
+
232
+ ### Prerequisites
233
+
234
+ - **Node.js** >= 22
235
+ - **pnpm** >= 10
236
+
237
+ ### Install & Run
238
+
239
+ ```bash
240
+ pnpm install
241
+ pnpm dev
242
+ ```
243
+
244
+ Starts:
245
+ - **Management UI** at http://localhost:5173
246
+ - **Management API** at http://localhost:3001
247
+ - **Proxy server** at http://localhost:4000
248
+
249
+ ### Test
250
+
251
+ ```bash
252
+ pnpm test
253
+ ```
254
+
255
+ ### Build
256
+
257
+ ```bash
258
+ pnpm build && pnpm start
259
+ ```
260
+
261
+ ---
290
262
 
291
263
  ## License
292
264
 
293
- [MIT License](LICENSE)
265
+ [MIT](LICENSE)
@@ -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-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction: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-duration:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:"Inter Variable", "Inter", ui-sans-serif, system-ui, sans-serif;--font-mono:"JetBrains Mono", ui-monospace, monospace;--color-red-500:oklch(63.7% .237 25.331);--color-orange-400:oklch(75% .183 55.934);--color-amber-400:oklch(82.8% .189 84.429);--color-emerald-400:oklch(76.5% .177 163.223);--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-rose-400:oklch(71.2% .194 13.428);--color-rose-500:oklch(64.5% .246 16.439);--color-slate-400:oklch(70.4% .04 256.788);--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-md:28rem;--container-xl:36rem;--container-2xl:42rem;--container-5xl:64rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-black:900;--tracking-tighter:-.05em;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--radius-3xl:1.5rem;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--blur-md:12px;--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-background:oklch(97% .015 250);--color-foreground:oklch(25% .04 250);--color-card:oklch(99% .01 250);--color-popover:oklch(100% 0 0);--color-primary:oklch(60% .18 250);--color-primary-foreground:oklch(98% .01 250);--color-muted:oklch(92% .03 250);--color-muted-foreground:oklch(50% .05 250);--color-accent:oklch(90% .04 250);--color-accent-foreground:oklch(20% .06 250);--color-destructive:oklch(60% .18 25);--color-destructive-foreground:oklch(98% .01 250);--color-border:oklch(88% .03 250);--color-success:oklch(65% .15 155);--color-warning:oklch(70% .12 85);--color-mode-passthrough:oklch(65% .12 215);--color-mode-delay:oklch(70% .15 85);--color-mode-mock:oklch(60% .18 315)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--color-border)}body{background-color:var(--color-background);color:var(--color-foreground);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;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));--tw-duration:75ms;transition-duration:75ms}body ::selection{background-color:#0083e333}@supports (color:color-mix(in lab,red,red)){body ::selection{background-color:color-mix(in oklab,var(--color-primary) 20%,transparent)}}body::selection{background-color:#0083e333}@supports (color:color-mix(in lab,red,red)){body::selection{background-color:color-mix(in oklab,var(--color-primary) 20%,transparent)}}body ::selection{color:var(--color-primary)}body::selection{color:var(--color-primary)}body{font-family:var(--font-sans);margin:0;scroll-behavior:auto!important}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background-color:#0000}::-webkit-scrollbar-thumb{background-color:#4d667f33;border-radius:3.40282e38px}@supports (color:color-mix(in lab,red,red)){::-webkit-scrollbar-thumb{background-color:color-mix(in oklab,var(--color-muted-foreground) 20%,transparent)}}@media(hover:hover){::-webkit-scrollbar-thumb:hover{background-color:#4d667f4d}@supports (color:color-mix(in lab,red,red)){::-webkit-scrollbar-thumb:hover{background-color:color-mix(in oklab,var(--color-muted-foreground) 30%,transparent)}}}}@layer components{.surface-raised{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border);background-color:var(--color-card);--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);box-shadow:inset 0 1px #ffffff0d,0 1px 2px #0000000d}.surface-inset{border-style:var(--tw-border-style);border-width:1px;border-color:#c9daeb99}@supports (color:color-mix(in lab,red,red)){.surface-inset{border-color:color-mix(in oklab,var(--color-border) 60%,transparent)}}.surface-inset{background-color:#eef6ff80}@supports (color:color-mix(in lab,red,red)){.surface-inset{background-color:color-mix(in oklab,var(--color-background) 50%,transparent)}}.surface-inset{--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow);box-shadow:inset 0 2px 4px #0000000d}.header-gradient{background:linear-gradient(to bottom,var(--color-card),var(--color-background))}.card-slab{border-style:var(--tw-border-style);border-width:1px;border-color:var(--color-border);background-color:var(--color-card);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));--tw-duration:75ms;border-top-color:#ffffff1a;border-bottom-color:#0000001a;transition-duration:75ms}.mono-code{font-family:var(--font-mono);--tw-leading:var(--leading-tight);font-size:.8rem;line-height:var(--leading-tight)}}@layer utilities{.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-1\/2{top:50%}.top-full{top:100%}.right-0{right:calc(var(--spacing) * 0)}.right-3{right:calc(var(--spacing) * 3)}.bottom-0{bottom:calc(var(--spacing) * 0)}.left-0{left:calc(var(--spacing) * 0)}.left-3{left:calc(var(--spacing) * 3)}.left-3\.5{left:calc(var(--spacing) * 3.5)}.isolate{isolation:isolate}.z-10{z-index:10}.z-50{z-index:50}.z-\[100\]{z-index:100}.container{width:100%}@media(min-width:40rem){.container{max-width:40rem}}@media(min-width:48rem){.container{max-width:48rem}}@media(min-width:64rem){.container{max-width:64rem}}@media(min-width:80rem){.container{max-width:80rem}}@media(min-width:96rem){.container{max-width:96rem}}.mx-1{margin-inline:calc(var(--spacing) * 1)}.mx-2{margin-inline:calc(var(--spacing) * 2)}.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-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mb-0\.5{margin-bottom:calc(var(--spacing) * .5)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.ml-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-auto{margin-left:auto}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline-flex{display:inline-flex}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-16{height:calc(var(--spacing) * 16)}.h-80{height:calc(var(--spacing) * 80)}.h-\[1px\]{height:1px}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-80{max-height:calc(var(--spacing) * 80)}.max-h-\[90vh\]{max-height:90vh}.max-h-\[300px\]{max-height:300px}.max-h-\[420px\]{max-height:420px}.max-h-\[450px\]{max-height:450px}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-28{width:calc(var(--spacing) * 28)}.w-32{width:calc(var(--spacing) * 32)}.w-\[2px\]{width:2px}.w-\[45\%\]{width:45%}.w-\[52px\]{width:52px}.w-\[400px\]{width:400px}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-\[120px\]{max-width:120px}.max-w-\[150px\]{max-width:150px}.max-w-\[200px\]{max-width:200px}.max-w-\[240px\]{max-width:240px}.max-w-\[300px\]{max-width:300px}.max-w-md{max-width:var(--container-md)}.max-w-xl{max-width:var(--container-xl)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[32px\]{min-width:32px}.min-w-\[240px\]{min-width:240px}.min-w-\[260px\]{min-width:260px}.min-w-\[340px\]{min-width:340px}.min-w-full{min-width:100%}.flex-1{flex:1}.shrink-0{flex-shrink:0}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x) var(--tw-translate-y)}.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}.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-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)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-8{gap:calc(var(--spacing) * 8)}: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-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-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-border\/20>:not(:last-child)){border-color:#c9daeb33}@supports (color:color-mix(in lab,red,red)){:where(.divide-border\/20>:not(:last-child)){border-color:color-mix(in oklab,var(--color-border) 20%,transparent)}}:where(.divide-border\/40>:not(:last-child)){border-color:#c9daeb66}@supports (color:color-mix(in lab,red,red)){:where(.divide-border\/40>:not(:last-child)){border-color:color-mix(in oklab,var(--color-border) 40%,transparent)}}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-3xl{border-radius:var(--radius-3xl)}.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)}.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-dashed{--tw-border-style:dashed;border-style:dashed}.border-amber-400\/20{border-color:#fcbb0033}@supports (color:color-mix(in lab,red,red)){.border-amber-400\/20{border-color:color-mix(in oklab,var(--color-amber-400) 20%,transparent)}}.border-amber-400\/30{border-color:#fcbb004d}@supports (color:color-mix(in lab,red,red)){.border-amber-400\/30{border-color:color-mix(in oklab,var(--color-amber-400) 30%,transparent)}}.border-blue-400\/20{border-color:#54a2ff33}@supports (color:color-mix(in lab,red,red)){.border-blue-400\/20{border-color:color-mix(in oklab,var(--color-blue-400) 20%,transparent)}}.border-blue-400\/30{border-color:#54a2ff4d}@supports (color:color-mix(in lab,red,red)){.border-blue-400\/30{border-color:color-mix(in oklab,var(--color-blue-400) 30%,transparent)}}.border-border{border-color:var(--color-border)}.border-border\/10{border-color:#c9daeb1a}@supports (color:color-mix(in lab,red,red)){.border-border\/10{border-color:color-mix(in oklab,var(--color-border) 10%,transparent)}}.border-border\/20{border-color:#c9daeb33}@supports (color:color-mix(in lab,red,red)){.border-border\/20{border-color:color-mix(in oklab,var(--color-border) 20%,transparent)}}.border-border\/40{border-color:#c9daeb66}@supports (color:color-mix(in lab,red,red)){.border-border\/40{border-color:color-mix(in oklab,var(--color-border) 40%,transparent)}}.border-border\/60{border-color:#c9daeb99}@supports (color:color-mix(in lab,red,red)){.border-border\/60{border-color:color-mix(in oklab,var(--color-border) 60%,transparent)}}.border-destructive\/20{border-color:#d7474533}@supports (color:color-mix(in lab,red,red)){.border-destructive\/20{border-color:color-mix(in oklab,var(--color-destructive) 20%,transparent)}}.border-destructive\/50{border-color:#d7474580}@supports (color:color-mix(in lab,red,red)){.border-destructive\/50{border-color:color-mix(in oklab,var(--color-destructive) 50%,transparent)}}.border-emerald-400\/20{border-color:#00d29433}@supports (color:color-mix(in lab,red,red)){.border-emerald-400\/20{border-color:color-mix(in oklab,var(--color-emerald-400) 20%,transparent)}}.border-emerald-400\/30{border-color:#00d2944d}@supports (color:color-mix(in lab,red,red)){.border-emerald-400\/30{border-color:color-mix(in oklab,var(--color-emerald-400) 30%,transparent)}}.border-mode-delay\/20{border-color:#c7960033}@supports (color:color-mix(in lab,red,red)){.border-mode-delay\/20{border-color:color-mix(in oklab,var(--color-mode-delay) 20%,transparent)}}.border-mode-delay\/30{border-color:#c796004d}@supports (color:color-mix(in lab,red,red)){.border-mode-delay\/30{border-color:color-mix(in oklab,var(--color-mode-delay) 30%,transparent)}}.border-mode-mock{border-color:var(--color-mode-mock)}.border-mode-mock\/20{border-color:#a758c833}@supports (color:color-mix(in lab,red,red)){.border-mode-mock\/20{border-color:color-mix(in oklab,var(--color-mode-mock) 20%,transparent)}}.border-mode-mock\/30{border-color:#a758c84d}@supports (color:color-mix(in lab,red,red)){.border-mode-mock\/30{border-color:color-mix(in oklab,var(--color-mode-mock) 30%,transparent)}}.border-mode-mock\/50{border-color:#a758c880}@supports (color:color-mix(in lab,red,red)){.border-mode-mock\/50{border-color:color-mix(in oklab,var(--color-mode-mock) 50%,transparent)}}.border-mode-passthrough\/20{border-color:#00a0bb33}@supports (color:color-mix(in lab,red,red)){.border-mode-passthrough\/20{border-color:color-mix(in oklab,var(--color-mode-passthrough) 20%,transparent)}}.border-mode-passthrough\/30{border-color:#00a0bb4d}@supports (color:color-mix(in lab,red,red)){.border-mode-passthrough\/30{border-color:color-mix(in oklab,var(--color-mode-passthrough) 30%,transparent)}}.border-orange-400\/30{border-color:#ff8b1a4d}@supports (color:color-mix(in lab,red,red)){.border-orange-400\/30{border-color:color-mix(in oklab,var(--color-orange-400) 30%,transparent)}}.border-primary{border-color:var(--color-primary)}.border-primary\/20{border-color:#0083e333}@supports (color:color-mix(in lab,red,red)){.border-primary\/20{border-color:color-mix(in oklab,var(--color-primary) 20%,transparent)}}.border-primary\/30{border-color:#0083e34d}@supports (color:color-mix(in lab,red,red)){.border-primary\/30{border-color:color-mix(in oklab,var(--color-primary) 30%,transparent)}}.border-primary\/40{border-color:#0083e366}@supports (color:color-mix(in lab,red,red)){.border-primary\/40{border-color:color-mix(in oklab,var(--color-primary) 40%,transparent)}}.border-purple-400\/30{border-color:#c07eff4d}@supports (color:color-mix(in lab,red,red)){.border-purple-400\/30{border-color:color-mix(in oklab,var(--color-purple-400) 30%,transparent)}}.border-rose-400\/20{border-color:#ff667f33}@supports (color:color-mix(in lab,red,red)){.border-rose-400\/20{border-color:color-mix(in oklab,var(--color-rose-400) 20%,transparent)}}.border-rose-400\/30{border-color:#ff667f4d}@supports (color:color-mix(in lab,red,red)){.border-rose-400\/30{border-color:color-mix(in oklab,var(--color-rose-400) 30%,transparent)}}.border-slate-400\/30{border-color:#90a1b94d}@supports (color:color-mix(in lab,red,red)){.border-slate-400\/30{border-color:color-mix(in oklab,var(--color-slate-400) 30%,transparent)}}.border-success\/30{border-color:#24a9654d}@supports (color:color-mix(in lab,red,red)){.border-success\/30{border-color:color-mix(in oklab,var(--color-success) 30%,transparent)}}.border-transparent{border-color:#0000}.bg-accent{background-color:var(--color-accent)}.bg-accent\/20{background-color:#cbe1f833}@supports (color:color-mix(in lab,red,red)){.bg-accent\/20{background-color:color-mix(in oklab,var(--color-accent) 20%,transparent)}}.bg-amber-400\/10{background-color:#fcbb001a}@supports (color:color-mix(in lab,red,red)){.bg-amber-400\/10{background-color:color-mix(in oklab,var(--color-amber-400) 10%,transparent)}}.bg-background{background-color:var(--color-background)}.bg-background\/50{background-color:#eef6ff80}@supports (color:color-mix(in lab,red,red)){.bg-background\/50{background-color:color-mix(in oklab,var(--color-background) 50%,transparent)}}.bg-background\/60{background-color:#eef6ff99}@supports (color:color-mix(in lab,red,red)){.bg-background\/60{background-color:color-mix(in oklab,var(--color-background) 60%,transparent)}}.bg-blue-400\/10{background-color:#54a2ff1a}@supports (color:color-mix(in lab,red,red)){.bg-blue-400\/10{background-color:color-mix(in oklab,var(--color-blue-400) 10%,transparent)}}.bg-border\/20{background-color:#c9daeb33}@supports (color:color-mix(in lab,red,red)){.bg-border\/20{background-color:color-mix(in oklab,var(--color-border) 20%,transparent)}}.bg-border\/40{background-color:#c9daeb66}@supports (color:color-mix(in lab,red,red)){.bg-border\/40{background-color:color-mix(in oklab,var(--color-border) 40%,transparent)}}.bg-card{background-color:var(--color-card)}.bg-card\/30{background-color:#f9fcff4d}@supports (color:color-mix(in lab,red,red)){.bg-card\/30{background-color:color-mix(in oklab,var(--color-card) 30%,transparent)}}.bg-card\/40{background-color:#f9fcff66}@supports (color:color-mix(in lab,red,red)){.bg-card\/40{background-color:color-mix(in oklab,var(--color-card) 40%,transparent)}}.bg-destructive\/10{background-color:#d747451a}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/10{background-color:color-mix(in oklab,var(--color-destructive) 10%,transparent)}}.bg-emerald-400\/10{background-color:#00d2941a}@supports (color:color-mix(in lab,red,red)){.bg-emerald-400\/10{background-color:color-mix(in oklab,var(--color-emerald-400) 10%,transparent)}}.bg-foreground{background-color:var(--color-foreground)}.bg-mode-delay{background-color:var(--color-mode-delay)}.bg-mode-delay\/10{background-color:#c796001a}@supports (color:color-mix(in lab,red,red)){.bg-mode-delay\/10{background-color:color-mix(in oklab,var(--color-mode-delay) 10%,transparent)}}.bg-mode-delay\/20{background-color:#c7960033}@supports (color:color-mix(in lab,red,red)){.bg-mode-delay\/20{background-color:color-mix(in oklab,var(--color-mode-delay) 20%,transparent)}}.bg-mode-mock{background-color:var(--color-mode-mock)}.bg-mode-mock\/10{background-color:#a758c81a}@supports (color:color-mix(in lab,red,red)){.bg-mode-mock\/10{background-color:color-mix(in oklab,var(--color-mode-mock) 10%,transparent)}}.bg-mode-mock\/20{background-color:#a758c833}@supports (color:color-mix(in lab,red,red)){.bg-mode-mock\/20{background-color:color-mix(in oklab,var(--color-mode-mock) 20%,transparent)}}.bg-mode-passthrough{background-color:var(--color-mode-passthrough)}.bg-mode-passthrough\/5{background-color:#00a0bb0d}@supports (color:color-mix(in lab,red,red)){.bg-mode-passthrough\/5{background-color:color-mix(in oklab,var(--color-mode-passthrough) 5%,transparent)}}.bg-mode-passthrough\/20{background-color:#00a0bb33}@supports (color:color-mix(in lab,red,red)){.bg-mode-passthrough\/20{background-color:color-mix(in oklab,var(--color-mode-passthrough) 20%,transparent)}}.bg-muted{background-color:var(--color-muted)}.bg-muted-foreground\/20{background-color:#4d667f33}@supports (color:color-mix(in lab,red,red)){.bg-muted-foreground\/20{background-color:color-mix(in oklab,var(--color-muted-foreground) 20%,transparent)}}.bg-muted\/5{background-color:#d6e7f80d}@supports (color:color-mix(in lab,red,red)){.bg-muted\/5{background-color:color-mix(in oklab,var(--color-muted) 5%,transparent)}}.bg-muted\/10{background-color:#d6e7f81a}@supports (color:color-mix(in lab,red,red)){.bg-muted\/10{background-color:color-mix(in oklab,var(--color-muted) 10%,transparent)}}.bg-muted\/20{background-color:#d6e7f833}@supports (color:color-mix(in lab,red,red)){.bg-muted\/20{background-color:color-mix(in oklab,var(--color-muted) 20%,transparent)}}.bg-muted\/30{background-color:#d6e7f84d}@supports (color:color-mix(in lab,red,red)){.bg-muted\/30{background-color:color-mix(in oklab,var(--color-muted) 30%,transparent)}}.bg-muted\/40{background-color:#d6e7f866}@supports (color:color-mix(in lab,red,red)){.bg-muted\/40{background-color:color-mix(in oklab,var(--color-muted) 40%,transparent)}}.bg-orange-400\/10{background-color:#ff8b1a1a}@supports (color:color-mix(in lab,red,red)){.bg-orange-400\/10{background-color:color-mix(in oklab,var(--color-orange-400) 10%,transparent)}}.bg-popover{background-color:var(--color-popover)}.bg-primary{background-color:var(--color-primary)}.bg-primary\/5{background-color:#0083e30d}@supports (color:color-mix(in lab,red,red)){.bg-primary\/5{background-color:color-mix(in oklab,var(--color-primary) 5%,transparent)}}.bg-primary\/10{background-color:#0083e31a}@supports (color:color-mix(in lab,red,red)){.bg-primary\/10{background-color:color-mix(in oklab,var(--color-primary) 10%,transparent)}}.bg-primary\/15{background-color:#0083e326}@supports (color:color-mix(in lab,red,red)){.bg-primary\/15{background-color:color-mix(in oklab,var(--color-primary) 15%,transparent)}}.bg-primary\/20{background-color:#0083e333}@supports (color:color-mix(in lab,red,red)){.bg-primary\/20{background-color:color-mix(in oklab,var(--color-primary) 20%,transparent)}}.bg-purple-400\/10{background-color:#c07eff1a}@supports (color:color-mix(in lab,red,red)){.bg-purple-400\/10{background-color:color-mix(in oklab,var(--color-purple-400) 10%,transparent)}}.bg-rose-400\/10{background-color:#ff667f1a}@supports (color:color-mix(in lab,red,red)){.bg-rose-400\/10{background-color:color-mix(in oklab,var(--color-rose-400) 10%,transparent)}}.bg-slate-400\/10{background-color:#90a1b91a}@supports (color:color-mix(in lab,red,red)){.bg-slate-400\/10{background-color:color-mix(in oklab,var(--color-slate-400) 10%,transparent)}}.bg-success{background-color:var(--color-success)}.bg-success\/10{background-color:#24a9651a}@supports (color:color-mix(in lab,red,red)){.bg-success\/10{background-color:color-mix(in oklab,var(--color-success) 10%,transparent)}}.bg-transparent{background-color:#0000}.bg-white\/5{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.bg-white\/5{background-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}.object-contain{object-fit:contain}.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-5{padding-inline:calc(var(--spacing) * 5)}.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-6{padding-block:calc(var(--spacing) * 6)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-20{padding-block:calc(var(--spacing) * 20)}.pt-0{padding-top:calc(var(--spacing) * 0)}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-9{padding-right:calc(var(--spacing) * 9)}.pb-1{padding-bottom:calc(var(--spacing) * 1)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pl-1{padding-left:calc(var(--spacing) * 1)}.pl-9{padding-left:calc(var(--spacing) * 9)}.pl-10{padding-left:calc(var(--spacing) * 10)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.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-\[8px\]{font-size:8px}.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)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.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\.1em\]{--tw-tracking:.1em;letter-spacing:.1em}.tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.tracking-\[0\.3em\]{--tw-tracking:.3em;letter-spacing:.3em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-tighter{--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-all{word-break:break-all}.text-accent-foreground{color:var(--color-accent-foreground)}.text-amber-400{color:var(--color-amber-400)}.text-background{color:var(--color-background)}.text-blue-400{color:var(--color-blue-400)}.text-blue-500{color:var(--color-blue-500)}.text-destructive{color:var(--color-destructive)}.text-emerald-400{color:var(--color-emerald-400)}.text-foreground{color:var(--color-foreground)}.text-foreground\/70{color:#122334b3}@supports (color:color-mix(in lab,red,red)){.text-foreground\/70{color:color-mix(in oklab,var(--color-foreground) 70%,transparent)}}.text-foreground\/80{color:#122334cc}@supports (color:color-mix(in lab,red,red)){.text-foreground\/80{color:color-mix(in oklab,var(--color-foreground) 80%,transparent)}}.text-foreground\/90{color:#122334e6}@supports (color:color-mix(in lab,red,red)){.text-foreground\/90{color:color-mix(in oklab,var(--color-foreground) 90%,transparent)}}.text-mode-delay{color:var(--color-mode-delay)}.text-mode-delay\/60{color:#c7960099}@supports (color:color-mix(in lab,red,red)){.text-mode-delay\/60{color:color-mix(in oklab,var(--color-mode-delay) 60%,transparent)}}.text-mode-mock{color:var(--color-mode-mock)}.text-mode-passthrough{color:var(--color-mode-passthrough)}.text-muted-foreground{color:var(--color-muted-foreground)}.text-muted-foreground\/10{color:#4d667f1a}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/10{color:color-mix(in oklab,var(--color-muted-foreground) 10%,transparent)}}.text-muted-foreground\/20{color:#4d667f33}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/20{color:color-mix(in oklab,var(--color-muted-foreground) 20%,transparent)}}.text-muted-foreground\/40{color:#4d667f66}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/40{color:color-mix(in oklab,var(--color-muted-foreground) 40%,transparent)}}.text-muted-foreground\/50{color:#4d667f80}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/50{color:color-mix(in oklab,var(--color-muted-foreground) 50%,transparent)}}.text-muted-foreground\/60{color:#4d667f99}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/60{color:color-mix(in oklab,var(--color-muted-foreground) 60%,transparent)}}.text-orange-400{color:var(--color-orange-400)}.text-primary{color:var(--color-primary)}.text-primary-foreground{color:var(--color-primary-foreground)}.text-primary\/40{color:#0083e366}@supports (color:color-mix(in lab,red,red)){.text-primary\/40{color:color-mix(in oklab,var(--color-primary) 40%,transparent)}}.text-primary\/60{color:#0083e399}@supports (color:color-mix(in lab,red,red)){.text-primary\/60{color:color-mix(in oklab,var(--color-primary) 60%,transparent)}}.text-purple-400{color:var(--color-purple-400)}.text-red-500{color:var(--color-red-500)}.text-rose-400{color:var(--color-rose-400)}.text-slate-400{color:var(--color-slate-400)}.text-success{color:var(--color-success)}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.accent-mode-delay{accent-color:var(--color-mode-delay)}.accent-mode-delay\/60{accent-color:#c7960099}@supports (color:color-mix(in lab,red,red)){.accent-mode-delay\/60{accent-color:color-mix(in oklab,var(--color-mode-delay) 60%,transparent)}}.opacity-0{opacity:0}.opacity-20{opacity:.2}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-100{opacity:1}.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-\[0_0_8px_-2px_rgba\(var\(--color-destructive\)\,0\.2\)\]{--tw-shadow:0 0 8px -2px var(--tw-shadow-color,rgba(var(--color-destructive),.2));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_8px_-2px_rgba\(var\(--color-primary\)\,0\.2\)\]{--tw-shadow:0 0 8px -2px var(--tw-shadow-color,rgba(var(--color-primary),.2));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_8px_-2px_rgba\(var\(--color-success\)\,0\.2\)\]{--tw-shadow:0 0 8px -2px var(--tw-shadow-color,rgba(var(--color-success),.2));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_8px_-2px_rgba\(var\(--color-warning\)\,0\.2\)\]{--tw-shadow:0 0 8px -2px var(--tw-shadow-color,rgba(var(--color-warning),.2));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_8px_-2px_rgba\(var\(--mode-delay\)\,0\.3\)\]{--tw-shadow:0 0 8px -2px var(--tw-shadow-color,rgba(var(--mode-delay),.3));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_8px_-2px_rgba\(var\(--mode-mock\)\,0\.3\)\]{--tw-shadow:0 0 8px -2px var(--tw-shadow-color,rgba(var(--mode-mock),.3));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_8px_-2px_rgba\(var\(--mode-passthrough\)\,0\.3\)\]{--tw-shadow:0 0 8px -2px var(--tw-shadow-color,rgba(var(--mode-passthrough),.3));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_8px_rgba\(var\(--color-primary\)\,0\.5\)\]{--tw-shadow:0 0 8px var(--tw-shadow-color,rgba(var(--color-primary),.5));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_10px_-2px_rgba\(34\,197\,94\,0\.3\)\]{--tw-shadow:0 0 10px -2px var(--tw-shadow-color,#22c55e4d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_10px_-3px_rgba\(52\,211\,153\,0\.3\)\]{--tw-shadow:0 0 10px -3px var(--tw-shadow-color,#34d3994d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_10px_-3px_rgba\(96\,165\,250\,0\.3\)\]{--tw-shadow:0 0 10px -3px var(--tw-shadow-color,#60a5fa4d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_10px_-3px_rgba\(192\,132\,252\,0\.3\)\]{--tw-shadow:0 0 10px -3px var(--tw-shadow-color,#c084fc4d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_10px_-3px_rgba\(251\,113\,133\,0\.3\)\]{--tw-shadow:0 0 10px -3px var(--tw-shadow-color,#fb71854d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_10px_-3px_rgba\(251\,146\,60\,0\.3\)\]{--tw-shadow:0 0 10px -3px var(--tw-shadow-color,#fb923c4d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_10px_-3px_rgba\(251\,191\,36\,0\.3\)\]{--tw-shadow:0 0 10px -3px var(--tw-shadow-color,#fbbf244d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-inner{--tw-shadow:inset 0 2px 4px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.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)}.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-primary\/5{--tw-ring-color:#0083e30d}@supports (color:color-mix(in lab,red,red)){.ring-primary\/5{--tw-ring-color:color-mix(in oklab, var(--color-primary) 5%, transparent)}}.blur{--tw-blur:blur(8px);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,)}.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-md{--tw-backdrop-blur:blur(var(--blur-md));-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,)}.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))}.duration-75{--tw-duration:75ms;transition-duration:75ms}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.group-focus-within\:text-primary:is(:where(.group):focus-within *){color:var(--color-primary)}@media(hover:hover){.group-hover\:scale-105:is(:where(.group):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:bg-primary\/20:is(:where(.group):hover *){background-color:#0083e333}@supports (color:color-mix(in lab,red,red)){.group-hover\:bg-primary\/20:is(:where(.group):hover *){background-color:color-mix(in oklab,var(--color-primary) 20%,transparent)}}.group-hover\:text-primary:is(:where(.group):hover *){color:var(--color-primary)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-muted-foreground\/40::placeholder{color:#4d667f66}@supports (color:color-mix(in lab,red,red)){.placeholder\:text-muted-foreground\/40::placeholder{color:color-mix(in oklab,var(--color-muted-foreground) 40%,transparent)}}.first\:pt-0:first-child{padding-top:calc(var(--spacing) * 0)}.focus-within\:ring-1:focus-within{--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-within\:ring-destructive\/50:focus-within{--tw-ring-color:#d7474580}@supports (color:color-mix(in lab,red,red)){.focus-within\:ring-destructive\/50:focus-within{--tw-ring-color:color-mix(in oklab, var(--color-destructive) 50%, transparent)}}.focus-within\:ring-mode-mock:focus-within{--tw-ring-color:var(--color-mode-mock)}@media(hover:hover){.hover\:border-border\/40:hover{border-color:#c9daeb66}@supports (color:color-mix(in lab,red,red)){.hover\:border-border\/40:hover{border-color:color-mix(in oklab,var(--color-border) 40%,transparent)}}.hover\:border-border\/60:hover{border-color:#c9daeb99}@supports (color:color-mix(in lab,red,red)){.hover\:border-border\/60:hover{border-color:color-mix(in oklab,var(--color-border) 60%,transparent)}}.hover\:border-destructive\/20:hover{border-color:#d7474533}@supports (color:color-mix(in lab,red,red)){.hover\:border-destructive\/20:hover{border-color:color-mix(in oklab,var(--color-destructive) 20%,transparent)}}.hover\:border-mode-mock\/20:hover{border-color:#a758c833}@supports (color:color-mix(in lab,red,red)){.hover\:border-mode-mock\/20:hover{border-color:color-mix(in oklab,var(--color-mode-mock) 20%,transparent)}}.hover\:border-mode-mock\/30:hover{border-color:#a758c84d}@supports (color:color-mix(in lab,red,red)){.hover\:border-mode-mock\/30:hover{border-color:color-mix(in oklab,var(--color-mode-mock) 30%,transparent)}}.hover\:border-mode-mock\/40:hover{border-color:#a758c866}@supports (color:color-mix(in lab,red,red)){.hover\:border-mode-mock\/40:hover{border-color:color-mix(in oklab,var(--color-mode-mock) 40%,transparent)}}.hover\:border-primary\/20:hover{border-color:#0083e333}@supports (color:color-mix(in lab,red,red)){.hover\:border-primary\/20:hover{border-color:color-mix(in oklab,var(--color-primary) 20%,transparent)}}.hover\:border-primary\/30:hover{border-color:#0083e34d}@supports (color:color-mix(in lab,red,red)){.hover\:border-primary\/30:hover{border-color:color-mix(in oklab,var(--color-primary) 30%,transparent)}}.hover\:border-primary\/40:hover{border-color:#0083e366}@supports (color:color-mix(in lab,red,red)){.hover\:border-primary\/40:hover{border-color:color-mix(in oklab,var(--color-primary) 40%,transparent)}}.hover\:bg-accent:hover{background-color:var(--color-accent)}.hover\:bg-accent\/30:hover{background-color:#cbe1f84d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-accent\/30:hover{background-color:color-mix(in oklab,var(--color-accent) 30%,transparent)}}.hover\:bg-accent\/40:hover{background-color:#cbe1f866}@supports (color:color-mix(in lab,red,red)){.hover\:bg-accent\/40:hover{background-color:color-mix(in oklab,var(--color-accent) 40%,transparent)}}.hover\:bg-accent\/50:hover{background-color:#cbe1f880}@supports (color:color-mix(in lab,red,red)){.hover\:bg-accent\/50:hover{background-color:color-mix(in oklab,var(--color-accent) 50%,transparent)}}.hover\:bg-destructive:hover{background-color:var(--color-destructive)}.hover\:bg-destructive\/5:hover{background-color:#d747450d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/5:hover{background-color:color-mix(in oklab,var(--color-destructive) 5%,transparent)}}.hover\:bg-destructive\/10:hover{background-color:#d747451a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/10:hover{background-color:color-mix(in oklab,var(--color-destructive) 10%,transparent)}}.hover\:bg-mode-delay\/10:hover{background-color:#c796001a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-mode-delay\/10:hover{background-color:color-mix(in oklab,var(--color-mode-delay) 10%,transparent)}}.hover\:bg-mode-mock\/10:hover{background-color:#a758c81a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-mode-mock\/10:hover{background-color:color-mix(in oklab,var(--color-mode-mock) 10%,transparent)}}.hover\:bg-mode-passthrough\/10:hover{background-color:#00a0bb1a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-mode-passthrough\/10:hover{background-color:color-mix(in oklab,var(--color-mode-passthrough) 10%,transparent)}}.hover\:bg-muted\/60:hover{background-color:#d6e7f899}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/60:hover{background-color:color-mix(in oklab,var(--color-muted) 60%,transparent)}}.hover\:bg-primary:hover{background-color:var(--color-primary)}.hover\:bg-primary\/5:hover{background-color:#0083e30d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/5:hover{background-color:color-mix(in oklab,var(--color-primary) 5%,transparent)}}.hover\:bg-primary\/10:hover{background-color:#0083e31a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/10:hover{background-color:color-mix(in oklab,var(--color-primary) 10%,transparent)}}.hover\:bg-primary\/90:hover{background-color:#0083e3e6}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--color-primary) 90%,transparent)}}.hover\:bg-rose-500\/10:hover{background-color:#ff23571a}@supports (color:color-mix(in lab,red,red)){.hover\:bg-rose-500\/10:hover{background-color:color-mix(in oklab,var(--color-rose-500) 10%,transparent)}}.hover\:bg-white\/5:hover{background-color:#ffffff0d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-white\/5:hover{background-color:color-mix(in oklab,var(--color-white) 5%,transparent)}}.hover\:text-destructive:hover{color:var(--color-destructive)}.hover\:text-destructive-foreground:hover{color:var(--color-destructive-foreground)}.hover\:text-foreground:hover{color:var(--color-foreground)}.hover\:text-mode-delay:hover{color:var(--color-mode-delay)}.hover\:text-mode-mock:hover{color:var(--color-mode-mock)}.hover\:text-mode-passthrough:hover{color:var(--color-mode-passthrough)}.hover\:text-muted-foreground:hover{color:var(--color-muted-foreground)}.hover\:text-primary:hover{color:var(--color-primary)}.hover\:text-primary-foreground:hover{color:var(--color-primary-foreground)}.hover\:text-primary\/80:hover{color:#0083e3cc}@supports (color:color-mix(in lab,red,red)){.hover\:text-primary\/80:hover{color:color-mix(in oklab,var(--color-primary) 80%,transparent)}}.hover\:text-rose-500:hover{color:var(--color-rose-500)}.hover\:opacity-90:hover{opacity:.9}}.focus\:border-mode-delay:focus{border-color:var(--color-mode-delay)}.focus\:border-mode-delay\/40:focus{border-color:#c7960066}@supports (color:color-mix(in lab,red,red)){.focus\:border-mode-delay\/40:focus{border-color:color-mix(in oklab,var(--color-mode-delay) 40%,transparent)}}.focus\:border-mode-mock:focus{border-color:var(--color-mode-mock)}.focus\:border-primary\/40:focus{border-color:#0083e366}@supports (color:color-mix(in lab,red,red)){.focus\:border-primary\/40:focus{border-color:color-mix(in oklab,var(--color-primary) 40%,transparent)}}.focus\:border-primary\/50:focus{border-color:#0083e380}@supports (color:color-mix(in lab,red,red)){.focus\:border-primary\/50:focus{border-color:color-mix(in oklab,var(--color-primary) 50%,transparent)}}.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-mode-delay:focus{--tw-ring-color:var(--color-mode-delay)}.focus\:ring-mode-delay\/40:focus{--tw-ring-color:#c7960066}@supports (color:color-mix(in lab,red,red)){.focus\:ring-mode-delay\/40:focus{--tw-ring-color:color-mix(in oklab, var(--color-mode-delay) 40%, transparent)}}.focus\:ring-mode-mock:focus{--tw-ring-color:var(--color-mode-mock)}.focus\:ring-primary:focus{--tw-ring-color:var(--color-primary)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:40rem){.sm\:block{display:block}.sm\:inline{display:inline}.sm\:w-40{width:calc(var(--spacing) * 40)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:rounded-xl{border-radius:var(--radius-xl)}}@media(min-width:48rem){.md\:flex{display:flex}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:64rem){.lg\:block{display:block}.lg\:flex{display:flex}.lg\:inline{display:inline}.lg\:w-\[450px\]{width:450px}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(min-width:80rem){.xl\:w-\[500px\]{width:500px}}}.dark{--color-background:oklch(24% .03 250);--color-foreground:oklch(94% .02 250);--color-card:oklch(28% .03 250);--color-card-foreground:oklch(94% .02 250);--color-popover:oklch(32% .03 250);--color-popover-foreground:oklch(94% .02 250);--color-primary:oklch(65% .18 250);--color-primary-foreground:oklch(98% .01 250);--color-secondary:oklch(32% .04 250);--color-secondary-foreground:oklch(94% .02 250);--color-muted:oklch(30% .04 250);--color-muted-foreground:oklch(75% .03 250);--color-accent:oklch(34% .05 250);--color-accent-foreground:oklch(98% .01 250);--color-destructive:oklch(55% .2 20);--color-destructive-foreground:oklch(98% .01 250);--color-border:oklch(34% .04 250);--color-input:oklch(34% .04 250);--color-ring:oklch(65% .18 250/.5);--color-mode-passthrough:oklch(70% .12 195);--color-mode-delay:oklch(75% .15 85);--color-mode-mock:oklch(65% .18 315)}@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-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-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{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-duration{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}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}