@reddb-io/ui 0.3.3 → 0.3.4

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 (36) hide show
  1. package/build/_app/immutable/assets/0.BR-GggVq.css +1 -0
  2. package/build/_app/immutable/chunks/BspmDMQv.js +404 -0
  3. package/build/_app/immutable/chunks/{CEBul73-.js → CAWnp6XP.js} +1 -1
  4. package/build/_app/immutable/chunks/{CXuFZWQe.js → C_WxkIDp.js} +1 -1
  5. package/build/_app/immutable/chunks/{DLDgyIn5.js → CgQYykwo.js} +66 -66
  6. package/build/_app/immutable/chunks/D4Buwe3n.js +1 -0
  7. package/build/_app/immutable/chunks/{C9pP73gT.js → DpZOD-db.js} +1 -1
  8. package/build/_app/immutable/entry/{app.BBk9O_OI.js → app.A4vKpDuk.js} +2 -2
  9. package/build/_app/immutable/entry/start.CPPUYn3g.js +1 -0
  10. package/build/_app/immutable/nodes/{0.BBf1ZyjL.js → 0.CNfy1rZt.js} +1 -1
  11. package/build/_app/immutable/nodes/{1.BmVeJAGw.js → 1.DyKCxpV1.js} +1 -1
  12. package/build/_app/immutable/nodes/{10.DZmZgLvj.js → 10.tDyQ2Z5A.js} +1 -1
  13. package/build/_app/immutable/nodes/{15.CRwZaU1B.js → 15.CZWDD8kn.js} +1 -1
  14. package/build/_app/version.json +1 -1
  15. package/build/index.html +11 -11
  16. package/dist/embed/{AnalyticsView-BWwvQS2I.js → AnalyticsView-b7oALOd5.js} +2 -2
  17. package/dist/embed/{AnalyticsView-BWwvQS2I.js.map → AnalyticsView-b7oALOd5.js.map} +1 -1
  18. package/dist/embed/{RedUiEmbedRoot-DAB-6DEr.js → RedUiEmbedRoot-Bngci7ez.js} +7600 -7571
  19. package/dist/embed/RedUiEmbedRoot-Bngci7ez.js.map +1 -0
  20. package/dist/embed/index-C0FJgu3h.js +881 -0
  21. package/dist/embed/index-C0FJgu3h.js.map +1 -0
  22. package/dist/embed/index.js +1 -1
  23. package/dist/embed/{sigma.esm-BOgYLguI.js → sigma.esm-CvtUChKS.js} +2 -2
  24. package/dist/embed/{sigma.esm-BOgYLguI.js.map → sigma.esm-CvtUChKS.js.map} +1 -1
  25. package/package.json +3 -3
  26. package/src/lib/ConnectDropdown.svelte +36 -7
  27. package/src/lib/Workspace.svelte +6 -2
  28. package/src/lib/connections.svelte.ts +31 -0
  29. package/src/lib/reddb/client.ts +59 -3
  30. package/build/_app/immutable/assets/0.CEQwbG0J.css +0 -1
  31. package/build/_app/immutable/chunks/CgIoFKBK.js +0 -1
  32. package/build/_app/immutable/chunks/D6XJvoMn.js +0 -404
  33. package/build/_app/immutable/entry/start.C9qfj9ex.js +0 -1
  34. package/dist/embed/RedUiEmbedRoot-DAB-6DEr.js.map +0 -1
  35. package/dist/embed/index-Bgo4yw4C.js +0 -856
  36. package/dist/embed/index-Bgo4yw4C.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reddb-io/ui",
3
- "version": "0.3.3",
3
+ "version": "0.3.4",
4
4
  "private": false,
5
5
  "description": "RedDB UI components and standalone web application.",
6
6
  "type": "module",
@@ -64,8 +64,8 @@
64
64
  "sigma": "^3.0.3",
65
65
  "tailwind-merge": "^3.6.0",
66
66
  "tailwind-variants": "^2.1.0",
67
- "@reddb-io/ui-kit": "0.3.3",
68
- "@reddb-io/ui-mcp": "0.3.3"
67
+ "@reddb-io/ui-kit": "0.3.4",
68
+ "@reddb-io/ui-mcp": "0.3.4"
69
69
  },
70
70
  "devDependencies": {
71
71
  "@sveltejs/adapter-static": "^3.0.8",
@@ -29,13 +29,15 @@
29
29
 
30
30
  let open = $state(false)
31
31
  let url = $state(pickDefaultUrl())
32
+ let username = $state('')
33
+ let password = $state('')
32
34
  let status = $state<'idle' | 'probing' | 'ok' | 'error'>('idle')
33
35
  let error = $state<string | null>(null)
34
36
  let rtt = $state<number | null>(null)
35
37
  let menuEl: HTMLDivElement | undefined = $state()
36
38
  let inputEl: HTMLInputElement | undefined = $state()
37
39
 
38
- async function attempt(targetUrl: string) {
40
+ async function attempt(targetUrl: string, signIn = false) {
39
41
  const cleaned = targetUrl.trim().replace(/\/$/, '')
40
42
  if (!cleaned) return
41
43
  url = cleaned
@@ -54,7 +56,12 @@
54
56
  status = 'probing'
55
57
  error = null
56
58
  rtt = null
57
- const ok = await connection.tryConnect(makeCustomConnection(cleaned))
59
+ const preset = makeCustomConnection(cleaned)
60
+ const secret = password
61
+ password = ''
62
+ const ok = signIn
63
+ ? await connection.login(preset, username.trim(), secret)
64
+ : await connection.tryConnect(preset)
58
65
  if (ok) {
59
66
  status = 'ok'
60
67
  rtt = connection.probe.rtt_ms ?? null
@@ -67,7 +74,7 @@
67
74
 
68
75
  function submit(e: Event) {
69
76
  e.preventDefault()
70
- attempt(url)
77
+ attempt(url, Boolean(username.trim() && password))
71
78
  }
72
79
 
73
80
  // Desktop-only "Open database file…" flow (#123): the native OS picker feeds
@@ -118,6 +125,15 @@
118
125
  return () => window.removeEventListener('red:open-connect', onOpen)
119
126
  })
120
127
 
128
+ $effect(() => {
129
+ if (!connection.connected && connection.probe.error) {
130
+ url = connection.active.url
131
+ error = connection.probe.error
132
+ status = 'error'
133
+ open = true
134
+ }
135
+ })
136
+
121
137
  const dotClass = $derived(
122
138
  connection.connected ? 'bg-ok' : status === 'error' ? 'bg-danger' : 'bg-fg-3'
123
139
  )
@@ -178,7 +194,7 @@
178
194
  <div class="fixed inset-0 z-40" onclick={() => (open = false)} role="presentation"></div>
179
195
  <div
180
196
  bind:this={menuEl}
181
- class="absolute top-[calc(100%+6px)] left-0 z-50 w-[380px] bg-bg-1 border border-line-2 rounded-lg shadow-2xl p-4"
197
+ class="absolute top-[calc(100%+6px)] left-0 z-50 w-[380px] max-w-[calc(100vw-2rem)] bg-bg-1 border border-line-2 rounded-lg shadow-2xl p-4"
182
198
  role="dialog"
183
199
  aria-label="Connect to reddb"
184
200
  >
@@ -188,6 +204,8 @@
188
204
  id="connect-url"
189
205
  bind:this={inputEl}
190
206
  bind:value={url}
207
+ disabled={status === 'probing'}
208
+ oninput={() => { password = '' }}
191
209
  spellcheck="false"
192
210
  placeholder="red://localhost"
193
211
  class="w-full h-9 px-3 mb-1 bg-bg-0 border border-line-2 rounded-md font-mono text-[13px] text-fg-0 outline-none transition-colors focus:border-accent placeholder:text-fg-3"
@@ -195,9 +213,20 @@
195
213
 
196
214
  <div class="mb-2 text-[10px] font-mono text-fg-3">reachable here: {supportedHint}</div>
197
215
 
216
+ <details class="mb-3">
217
+ <summary class="cursor-pointer text-xs text-fg-2">Sign in to the database</summary>
218
+ <div class="grid gap-2 mt-2">
219
+ <label class="text-xs text-fg-2" for="connect-username">Username</label>
220
+ <input id="connect-username" autocomplete="username" bind:value={username} disabled={status === 'probing'} class="w-full h-9 px-3 bg-bg-0 border border-line-2 rounded-md text-fg-0 outline-none focus:border-accent" />
221
+ <label class="text-xs text-fg-2" for="connect-password">Password</label>
222
+ <input id="connect-password" type="password" autocomplete="current-password" bind:value={password} disabled={status === 'probing'} class="w-full h-9 px-3 bg-bg-0 border border-line-2 rounded-md text-fg-0 outline-none focus:border-accent" />
223
+ <p class="text-[11px] text-fg-3">Credentials go directly to this database. The session stays in this tab.</p>
224
+ </div>
225
+ </details>
226
+
198
227
  <button
199
228
  type="submit"
200
- disabled={status === 'probing' || !url.trim()}
229
+ disabled={status === 'probing' || !url.trim() || Boolean(username.trim()) !== Boolean(password)}
201
230
  class="w-full h-9 bg-accent text-white font-medium rounded-md cursor-pointer transition-colors hover:bg-[#ff3868] disabled:opacity-40 disabled:cursor-not-allowed flex items-center justify-center gap-2 text-[13px]"
202
231
  >
203
232
  {#if status === 'probing'}
@@ -209,13 +238,13 @@
209
238
  {/if}
210
239
  </button>
211
240
 
212
- <div class="h-5 mt-2 flex items-center gap-1.5 text-[11px] font-mono">
241
+ <div aria-live="polite" class="min-h-5 mt-2 flex items-center gap-1.5 text-[11px] font-mono">
213
242
  {#if status === 'ok'}
214
243
  <CheckCircle2 class="size-3 text-ok" />
215
244
  <span class="text-ok">Connected{rtt !== null ? ` · ${rtt}ms` : ''}</span>
216
245
  {:else if status === 'error'}
217
246
  <AlertCircle class="size-3 text-danger" />
218
- <span class="text-danger truncate">{error}</span>
247
+ <span class="text-danger break-words">{error}</span>
219
248
  {/if}
220
249
  </div>
221
250
  </form>
@@ -220,8 +220,12 @@
220
220
  // default it was never pointed at.
221
221
  $effect(() => {
222
222
  if (secureStore.locked || !connection.targetResolved) return
223
- connection.refresh()
224
- const id = setInterval(() => connection.refresh(), REFRESH_MS)
223
+ // Poll only an acquired client. Re-entering connect here races with the
224
+ // boot/login token exchange; tracking refresh reads also retriggers this
225
+ // effect whenever a probe changes instead of waiting for the interval.
226
+ const refresh = () => { if (connection.client) void connection.refresh() }
227
+ untrack(refresh)
228
+ const id = setInterval(refresh, REFRESH_MS)
225
229
  return () => clearInterval(id)
226
230
  })
227
231
 
@@ -445,7 +445,38 @@ class ConnectionStore {
445
445
  await this.tryConnect(preset);
446
446
  }
447
447
 
448
+ async login(
449
+ preset: ConnectionPreset,
450
+ username: string,
451
+ password: string
452
+ ): Promise<boolean> {
453
+ this.active = preset;
454
+ this.#client = null;
455
+ this.connected = false;
456
+ this.probe = { reachable: false };
457
+ try {
458
+ const targetProvider = getConnectionProvider();
459
+ if (!isHandoffTokenConsumer(targetProvider))
460
+ throw new Error("This connection is managed by its host.");
461
+ const token = await new RedClient(preset.url, {
462
+ fetch: desktopFetch,
463
+ }).login(username, password);
464
+ targetProvider.useHandoffToken(preset.url, token);
465
+ return await this.tryConnect(preset);
466
+ } catch (error) {
467
+ this.probe = {
468
+ reachable: false,
469
+ error:
470
+ error instanceof Error ? error.message : "Database sign-in failed.",
471
+ };
472
+ return false;
473
+ }
474
+ }
475
+
448
476
  async tryConnect(preset: ConnectionPreset): Promise<boolean> {
477
+ this.active = preset;
478
+ this.#client = null;
479
+ this.connected = false;
449
480
  // An explicit connect attempt means a target has been chosen — unblocks
450
481
  // automatic refresh from here on (#21).
451
482
  this.#targetResolved = true;
@@ -256,7 +256,12 @@ function isPermissionResource(value: unknown): value is PermissionResource {
256
256
 
257
257
  /** One NDJSON frame from `POST /query/stream`. Discriminated by its single key. */
258
258
  type NdjsonFrame =
259
- | { descriptor: { columns: string[]; schema_fingerprint?: string } }
259
+ | {
260
+ descriptor: {
261
+ columns: Array<string | { name: string }>;
262
+ schema_fingerprint?: string;
263
+ };
264
+ }
260
265
  | { cursor: { token: string; snapshot_lsn?: number; resumable?: boolean } }
261
266
  | { row: Record<string, unknown> }
262
267
  | { end: { row_count?: number } }
@@ -359,7 +364,16 @@ export async function runQueryPreferStream(
359
364
  record_count: s.rowCount,
360
365
  result: {
361
366
  columns: s.columns,
362
- records: s.rows.map((values) => ({ values })),
367
+ records: s.rows.map((row) =>
368
+ row.values &&
369
+ typeof row.values === "object" &&
370
+ ("nodes" in row ||
371
+ "edges" in row ||
372
+ "paths" in row ||
373
+ "vector_results" in row)
374
+ ? (row as unknown as QueryRow)
375
+ : { values: row }
376
+ ),
363
377
  },
364
378
  streamed: true,
365
379
  truncated: s.truncated,
@@ -456,6 +470,46 @@ export class RedClient {
456
470
  return data;
457
471
  }
458
472
 
473
+ /** Exchange credentials for a session token. Neither value is persisted. */
474
+ async login(username: string, password: string): Promise<string> {
475
+ const endpoint = new URL(this.baseUrl);
476
+ if (
477
+ endpoint.username ||
478
+ endpoint.password ||
479
+ endpoint.search ||
480
+ endpoint.hash ||
481
+ (endpoint.protocol !== "https:" &&
482
+ !(
483
+ endpoint.protocol === "http:" &&
484
+ ["localhost", "127.0.0.1", "[::1]"].includes(endpoint.hostname)
485
+ ))
486
+ ) {
487
+ throw new Error("Use HTTPS to sign in to a remote database.");
488
+ }
489
+ // Bypass query instrumentation: credentials and the session response must
490
+ // never enter the developer console, including an authentication failure.
491
+ const response = await this.fetcher(`${this.baseUrl}/auth/login`, {
492
+ method: "POST",
493
+ headers: { "Content-Type": "application/json" },
494
+ credentials: "omit",
495
+ redirect: "error",
496
+ body: JSON.stringify({ username, password }),
497
+ });
498
+ if (!response.ok)
499
+ throw new Error(
500
+ "Database sign-in failed. Check your credentials and try again."
501
+ );
502
+ const session = await response.json();
503
+ if (
504
+ session.ok !== true ||
505
+ typeof session.token !== "string" ||
506
+ !session.token
507
+ ) {
508
+ throw new Error("The database did not return a session token.");
509
+ }
510
+ return session.token;
511
+ }
512
+
459
513
  async stats(): Promise<Stats> {
460
514
  return this.json<Stats>("/stats");
461
515
  }
@@ -716,7 +770,9 @@ export class RedClient {
716
770
 
717
771
  for await (const frame of parseNdjsonFrames(res.body)) {
718
772
  if ("descriptor" in frame) {
719
- out.columns = frame.descriptor.columns ?? [];
773
+ out.columns = (frame.descriptor.columns ?? []).map((column) =>
774
+ typeof column === "string" ? column : column.name
775
+ );
720
776
  out.schemaFingerprint = frame.descriptor.schema_fingerprint;
721
777
  } else if ("cursor" in frame) {
722
778
  out.cursor = frame.cursor.token;
@@ -1 +0,0 @@
1
- /*! tailwindcss v4.3.0 | 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-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--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-outline-style:solid;--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-ease:initial}}}@layer theme{:root,:host{--font-sans:"Inter Variable", "Inter", system-ui, -apple-system, sans-serif;--font-serif:ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--font-mono:"JetBrains Mono Variable", "JetBrains Mono", ui-monospace, "SF Mono", "Menlo", monospace;--color-amber-400:oklch(82.8% .189 84.429);--color-yellow-200:oklch(94.5% .129 101.54);--color-lime-500:oklch(76.8% .233 130.85);--color-blue-500:oklch(62.3% .214 259.815);--color-purple-700:oklch(49.6% .265 301.924);--color-zinc-300:oklch(87.1% .006 286.286);--color-neutral-900:var(--reddb-color-neutral-900);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--text-xs:11px;--text-xs--line-height:1.45;--text-sm:12px;--text-sm--line-height:1.5;--text-base:13px;--text-base--line-height:1.5;--text-lg:18px;--text-lg--line-height:1.3;--text-xl:22px;--text-xl--line-height:1.2;--text-2xl:28px;--text-2xl--line-height:1.15;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-relaxed:1.625;--radius-sm:3px;--radius-md:5px;--radius-lg:8px;--shadow-md:0 4px 12px #0f172a14, 0 0 0 1px var(--color-line-2);--shadow-lg:0 16px 48px #0f172a24, 0 0 0 1px var(--color-line-2);--ease-out:cubic-bezier(.16, 1, .3, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--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:var(--reddb-color-background);--color-foreground:var(--reddb-color-foreground);--color-muted:var(--reddb-color-muted);--color-primary:var(--reddb-color-primary);--radius-full:var(--reddb-radius-full);--space-1:var(--reddb-space-1);--space-2:var(--reddb-space-2);--color-bg-0:#fff;--color-bg-1:#fafafa;--color-bg-2:#f4f4f5;--color-bg-3:#e7e7ea;--color-fg-0:#0a0a0b;--color-fg-1:#3f3f46;--color-fg-2:#52525b;--color-fg-3:#71717a;--color-line-1:#ececef;--color-line-2:#d4d4d8;--color-line-3:#a1a1aa;--color-accent:#e11d48;--color-accent-soft:#e11d481a;--color-accent-glow:#e11d484d;--color-ok:#16a34a;--color-warn:#b45309;--color-danger:#dc2626;--color-info:#2563eb;--color-role-primary:#e11d48;--color-role-replica:#2563eb;--color-role-embedded:#16a34a;--color-ambient-glow:#e11d480a;--ease-snap:cubic-bezier(.25, 1, .5, 1)}}@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}:root{--background:var(--color-bg-0);--foreground:var(--color-fg-0);--card:var(--color-bg-1);--card-foreground:var(--color-fg-0);--popover:var(--color-bg-1);--popover-foreground:var(--color-fg-0);--primary:var(--color-accent);--primary-foreground:#fff;--secondary:var(--color-bg-2);--secondary-foreground:var(--color-fg-1);--muted:var(--color-bg-2);--muted-foreground:var(--color-fg-2);--accent:var(--color-bg-3);--accent-foreground:var(--color-fg-0);--destructive:var(--color-danger);--destructive-foreground:#fff;--border:var(--color-line-2);--input:var(--color-line-2);--ring:var(--color-accent);--radius:var(--radius-md)}*{box-sizing:border-box}html,body{background:var(--color-bg-0);color:var(--color-fg-0);font-family:var(--font-sans);font-feature-settings:"cv11","ss01","ss03";letter-spacing:-.005em;-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;font-size:13px;line-height:1.5}.type-h1{letter-spacing:-.02em;color:var(--color-fg-0);font-size:22px;font-weight:600;line-height:1.2}.type-h2{letter-spacing:-.015em;color:var(--color-fg-0);font-size:16px;font-weight:600;line-height:1.3}.type-label{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.1em;color:var(--color-fg-2);font-size:10px;font-weight:500}.type-caption{color:var(--color-fg-2);font-size:11px;line-height:1.45}.type-code{font-family:var(--font-mono);color:var(--color-fg-1);font-size:12px}body:before{content:"";background-image:radial-gradient(ellipse 80% 50% at 50% -10%,var(--color-ambient-glow),transparent),linear-gradient(var(--color-line-1) 1px,transparent 1px),linear-gradient(90deg,var(--color-line-1) 1px,transparent 1px);opacity:.35;pointer-events:none;z-index:0;background-size:100% 100%,96px 96px,96px 96px;position:fixed;top:0;right:0;bottom:0;left:0}::selection{background:var(--color-accent-soft);color:var(--color-fg-0)}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--color-line-2);border:2px solid var(--color-bg-0);border-radius:8px}::-webkit-scrollbar-thumb:hover{background:var(--color-line-3)}}@layer components;@layer utilities{.\@container{container-type:inline-size}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.inset-x-0{inset-inline:calc(var(--spacing) * 0)}.top-0{top:calc(var(--spacing) * 0)}.top-1\/2{top:50%}.top-4{top:calc(var(--spacing) * 4)}.top-\[calc\(100\%\+6px\)\]{top:calc(100% + 6px)}.top-full{top:100%}.right-0{right:calc(var(--spacing) * 0)}.right-1{right:calc(var(--spacing) * 1)}.right-4{right:calc(var(--spacing) * 4)}.bottom-0{bottom:calc(var(--spacing) * 0)}.left-0{left:calc(var(--spacing) * 0)}.left-1\/2{left:50%}.left-2\.5{left:calc(var(--spacing) * 2.5)}.left-4{left:calc(var(--spacing) * 4)}.z-10{z-index:10}.z-20{z-index:20}.z-40{z-index:40}.z-50{z-index:50}.z-\[1\]{z-index:1}.z-\[100\]{z-index:100}.z-\[200\]{z-index:200}.z-\[9990\]{z-index:9990}.z-\[9998\]{z-index:9998}.z-\[9999\]{z-index:9999}.col-start-1{grid-column-start:1}.col-start-2{grid-column-start:2}.row-1{grid-row:1}.row-start-1{grid-row-start:1}.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}}.m-0{margin:calc(var(--spacing) * 0)}.mx-0\.5{margin-inline:calc(var(--spacing) * .5)}.mx-4{margin-inline:calc(var(--spacing) * 4)}.mx-auto{margin-inline:auto}.mx-px{margin-inline:1px}.ms-auto{margin-inline-start:auto}.-me-1{margin-inline-end:calc(var(--spacing) * -1)}.-mt-2{margin-top: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-5{margin-top:calc(var(--spacing) * 5)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-\[3px\]{margin-top:3px}.mt-\[5px\]{margin-top:5px}.mt-auto{margin-top:auto}.mr-0\.5{margin-right:calc(var(--spacing) * .5)}.-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-2\.5{margin-bottom:calc(var(--spacing) * 2.5)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.size-2{width:calc(var(--spacing) * 2);height:calc(var(--spacing) * 2)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.size-9{width:calc(var(--spacing) * 9);height:calc(var(--spacing) * 9)}.size-12{width:calc(var(--spacing) * 12);height:calc(var(--spacing) * 12)}.h-1{height:calc(var(--spacing) * 1)}.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-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-9{height:calc(var(--spacing) * 9)}.h-11{height:calc(var(--spacing) * 11)}.h-12{height:calc(var(--spacing) * 12)}.h-24{height:calc(var(--spacing) * 24)}.h-64{height:calc(var(--spacing) * 64)}.h-\[2\.75rem\]{height:2.75rem}.h-\[18px\]{height:18px}.h-\[21px\]{height:21px}.h-\[29px\]{height:29px}.h-\[30px\]{height:30px}.h-\[82px\]{height:82px}.h-\[180px\]{height:180px}.h-\[320px\]{height:320px}.h-\[var\(--reddb-spatial-control-height-lg\)\]{height:var(--reddb-spatial-control-height-lg)}.h-\[var\(--reddb-spatial-control-height-md\)\]{height:var(--reddb-spatial-control-height-md)}.h-\[var\(--reddb-spatial-control-height-sm\)\]{height:var(--reddb-spatial-control-height-sm)}.h-\[var\(--reddb-spatial-control-height-xl\)\]{height:var(--reddb-spatial-control-height-xl)}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.max-h-24{max-height:calc(var(--spacing) * 24)}.max-h-32{max-height:calc(var(--spacing) * 32)}.max-h-48{max-height:calc(var(--spacing) * 48)}.max-h-52{max-height:calc(var(--spacing) * 52)}.max-h-\[45vh\]{max-height:45vh}.max-h-\[50vh\]{max-height:50vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[180px\]{max-height:180px}.max-h-\[220px\]{max-height:220px}.max-h-\[320px\]{max-height:320px}.max-h-\[520px\]{max-height:520px}.max-h-\[calc\(100vh-96px\)\]{max-height:calc(100vh - 96px)}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-9{min-height:calc(var(--spacing) * 9)}.min-h-20{min-height:calc(var(--spacing) * 20)}.min-h-24{min-height:calc(var(--spacing) * 24)}.min-h-28{min-height:calc(var(--spacing) * 28)}.min-h-\[36px\]{min-height:36px}.min-h-\[160px\]{min-height:160px}.min-h-\[240px\]{min-height:240px}.min-h-\[280px\]{min-height:280px}.min-h-\[720px\]{min-height:720px}.min-h-\[var\(--reddb-spatial-control-height-sm\)\]{min-height:var(--reddb-spatial-control-height-sm)}.min-h-screen{min-height:100vh}.w-1{width:calc(var(--spacing) * 1)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-2\/3{width:66.6667%}.w-4{width:calc(var(--spacing) * 4)}.w-4\/5{width:80%}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-11{width:calc(var(--spacing) * 11)}.w-12{width:calc(var(--spacing) * 12)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-28{width:calc(var(--spacing) * 28)}.w-32{width:calc(var(--spacing) * 32)}.w-44{width:calc(var(--spacing) * 44)}.w-48{width:calc(var(--spacing) * 48)}.w-56{width:calc(var(--spacing) * 56)}.w-64{width:calc(var(--spacing) * 64)}.w-96{width:calc(var(--spacing) * 96)}.w-\[54px\]{width:54px}.w-\[58px\]{width:58px}.w-\[70px\]{width:70px}.w-\[76px\]{width:76px}.w-\[78px\]{width:78px}.w-\[92px\]{width:92px}.w-\[94px\]{width:94px}.w-\[110px\]{width:110px}.w-\[150px\]{width:150px}.w-\[160px\]{width:160px}.w-\[180px\]{width:180px}.w-\[190px\]{width:190px}.w-\[200px\]{width:200px}.w-\[220px\]{width:220px}.w-\[260px\]{width:260px}.w-\[320px\]{width:320px}.w-\[340px\]{width:340px}.w-\[360px\]{width:360px}.w-\[380px\]{width:380px}.w-\[420px\]{width:420px}.w-\[min\(34rem\,90vw\)\]{width:min(34rem,90vw)}.w-\[min\(320px\,48vw\)\]{width:min(320px,48vw)}.w-\[min\(460px\,90vw\)\]{width:min(460px,90vw)}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-40{max-width:calc(var(--spacing) * 40)}.max-w-\[38vw\]{max-width:38vw}.max-w-\[45vw\]{max-width:45vw}.max-w-\[85\%\]{max-width:85%}.max-w-\[180px\]{max-width:180px}.max-w-\[260px\]{max-width:260px}.max-w-\[280px\]{max-width:280px}.max-w-\[320px\]{max-width:320px}.max-w-\[520px\]{max-width:520px}.max-w-\[640px\]{max-width:640px}.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-prose{max-width:65ch}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-4{min-width:calc(var(--spacing) * 4)}.min-w-5{min-width:calc(var(--spacing) * 5)}.min-w-12{min-width:calc(var(--spacing) * 12)}.min-w-\[12rem\]{min-width:12rem}.min-w-\[78px\]{min-width:78px}.min-w-\[92px\]{min-width:92px}.min-w-\[94px\]{min-width:94px}.min-w-\[180px\]{min-width:180px}.min-w-\[220px\]{min-width:220px}.min-w-\[260px\]{min-width:260px}.min-w-\[760px\]{min-width:760px}.flex-1{flex:1}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.grow-0{flex-grow:0}.border-collapse{border-collapse:collapse}.-translate-x-1\/2{--tw-translate-x: -50% ;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)}.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-col-resize{cursor:col-resize}.cursor-pointer{cursor:pointer}.cursor-row-resize{cursor:row-resize}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.list-none{list-style-type:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[1fr_1fr_auto_auto\]{grid-template-columns:1fr 1fr auto auto}.grid-cols-\[13rem_minmax\(0\,1fr\)\]{grid-template-columns:13rem minmax(0,1fr)}.grid-cols-\[16px_1fr_auto\]{grid-template-columns:16px 1fr auto}.grid-cols-\[40px_repeat\(6\,minmax\(96px\,1fr\)\)\]{grid-template-columns:40px repeat(6,minmax(96px,1fr))}.grid-cols-\[52px_1fr_90px\]{grid-template-columns:52px 1fr 90px}.grid-cols-\[60px_1fr\]{grid-template-columns:60px 1fr}.grid-cols-\[78px_1fr\]{grid-template-columns:78px 1fr}.grid-cols-\[82px_1fr\]{grid-template-columns:82px 1fr}.grid-cols-\[100px_1fr\]{grid-template-columns:100px 1fr}.grid-cols-\[110px_1fr\]{grid-template-columns:110px 1fr}.grid-cols-\[120px_1fr\]{grid-template-columns:120px 1fr}.grid-cols-\[160px_1fr\]{grid-template-columns:160px 1fr}.grid-cols-\[260px_1fr\]{grid-template-columns:260px 1fr}.grid-cols-\[280px_1fr\]{grid-template-columns:280px 1fr}.grid-cols-\[320px_1fr\]{grid-template-columns:320px 1fr}.grid-cols-\[auto_1fr\]{grid-template-columns:auto 1fr}.grid-cols-\[minmax\(0\,1fr\)_360px\]{grid-template-columns:minmax(0,1fr) 360px}.grid-cols-\[minmax\(0\,1fr\)_auto\]{grid-template-columns:minmax(0,1fr) auto}.grid-cols-\[minmax\(160px\,0\.8fr\)_1\.2fr\]{grid-template-columns:minmax(160px,.8fr) 1.2fr}.grid-cols-\[minmax\(280px\,0\.75fr\)_1\.25fr\]{grid-template-columns:minmax(280px,.75fr) 1.25fr}.grid-cols-\[minmax\(320px\,0\.9fr\)_1\.1fr\]{grid-template-columns:minmax(320px,.9fr) 1.1fr}.grid-cols-\[minmax\(340px\,42\%\)_1fr\]{grid-template-columns:minmax(340px,42%) 1fr}.grid-cols-\[minmax\(360px\,0\.9fr\)_1\.1fr\]{grid-template-columns:minmax(360px,.9fr) 1.1fr}.grid-cols-\[repeat\(auto-fill\,minmax\(180px\,1fr\)\)\]{grid-template-columns:repeat(auto-fill,minmax(180px,1fr))}.grid-cols-\[repeat\(auto-fill\,minmax\(220px\,1fr\)\)\]{grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}.grid-cols-\[repeat\(auto-fill\,minmax\(260px\,1fr\)\)\]{grid-template-columns:repeat(auto-fill,minmax(260px,1fr))}.grid-rows-\[44px_32px_1fr\]{grid-template-rows:44px 32px 1fr}.flex-col{flex-direction:column}.flex-row{flex-direction:row}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.content-start{align-content:flex-start}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.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)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-\[0\.5rem\]{gap:.5rem}.gap-\[var\(--reddb-spatial-gap-lg\)\]{gap:var(--reddb-spatial-gap-lg)}.gap-\[var\(--reddb-spatial-gap-md\)\]{gap:var(--reddb-spatial-gap-md)}.gap-\[var\(--reddb-spatial-gap-sm\)\]{gap:var(--reddb-spatial-gap-sm)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--space-1) * var(--tw-space-y-reverse));margin-block-end:calc(var(--space-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(var(--space-2) * var(--tw-space-y-reverse));margin-block-end:calc(var(--space-2) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-2{column-gap:calc(var(--spacing) * 2)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-y-0\.5{row-gap:calc(var(--spacing) * .5)}.gap-y-1{row-gap:calc(var(--spacing) * 1)}.gap-y-1\.5{row-gap:calc(var(--spacing) * 1.5)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}:where(.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(.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-line-1>:not(:last-child)){border-color:var(--color-line-1)}:where(.divide-line-1\/60>:not(:last-child)){border-color:#ececef99}@supports (color:color-mix(in lab,red,red)){:where(.divide-line-1\/60>:not(:last-child)){border-color:color-mix(in oklab,var(--color-line-1) 60%,transparent)}}.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-\[4px\]{border-radius:4px}.rounded-\[9999px\]{border-radius:9999px}.rounded-\[var\(--reddb-radius-lg\)\]{border-radius:var(--reddb-radius-lg)}.rounded-full{border-radius:var(--radius-full)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-s{border-start-start-radius:.25rem;border-end-start-radius:.25rem}.rounded-ss{border-start-start-radius:.25rem}.rounded-e{border-start-end-radius:.25rem;border-end-end-radius:.25rem}.rounded-se{border-start-end-radius:.25rem}.rounded-ee{border-end-end-radius:.25rem}.rounded-es{border-end-start-radius:.25rem}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-tl{border-top-left-radius:.25rem}.rounded-tl-md{border-top-left-radius:var(--radius-md)}.rounded-r{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.rounded-tr{border-top-right-radius:.25rem}.rounded-b{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.rounded-b-full{border-bottom-right-radius:var(--radius-full);border-bottom-left-radius:var(--radius-full)}.rounded-br{border-bottom-right-radius:.25rem}.rounded-br-sm{border-bottom-right-radius:var(--radius-sm)}.rounded-bl{border-bottom-left-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.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-accent{border-color:var(--color-accent)}.border-accent\/30{border-color:#e11d484d}@supports (color:color-mix(in lab,red,red)){.border-accent\/30{border-color:color-mix(in oklab,var(--color-accent) 30%,transparent)}}.border-accent\/35{border-color:#e11d4859}@supports (color:color-mix(in lab,red,red)){.border-accent\/35{border-color:color-mix(in oklab,var(--color-accent) 35%,transparent)}}.border-accent\/40{border-color:#e11d4866}@supports (color:color-mix(in lab,red,red)){.border-accent\/40{border-color:color-mix(in oklab,var(--color-accent) 40%,transparent)}}.border-accent\/60{border-color:#e11d4899}@supports (color:color-mix(in lab,red,red)){.border-accent\/60{border-color:color-mix(in oklab,var(--color-accent) 60%,transparent)}}.border-danger\/30{border-color:#dc26264d}@supports (color:color-mix(in lab,red,red)){.border-danger\/30{border-color:color-mix(in oklab,var(--color-danger) 30%,transparent)}}.border-danger\/40{border-color:#dc262666}@supports (color:color-mix(in lab,red,red)){.border-danger\/40{border-color:color-mix(in oklab,var(--color-danger) 40%,transparent)}}.border-danger\/50{border-color:#dc262680}@supports (color:color-mix(in lab,red,red)){.border-danger\/50{border-color:color-mix(in oklab,var(--color-danger) 50%,transparent)}}.border-lime-500{border-color:var(--color-lime-500)}.border-line-1{border-color:var(--color-line-1)}.border-line-1\/50{border-color:#ececef80}@supports (color:color-mix(in lab,red,red)){.border-line-1\/50{border-color:color-mix(in oklab,var(--color-line-1) 50%,transparent)}}.border-line-1\/60{border-color:#ececef99}@supports (color:color-mix(in lab,red,red)){.border-line-1\/60{border-color:color-mix(in oklab,var(--color-line-1) 60%,transparent)}}.border-line-2{border-color:var(--color-line-2)}.border-muted{border-color:var(--color-muted)}.border-ok\/30{border-color:#16a34a4d}@supports (color:color-mix(in lab,red,red)){.border-ok\/30{border-color:color-mix(in oklab,var(--color-ok) 30%,transparent)}}.border-ok\/40{border-color:#16a34a66}@supports (color:color-mix(in lab,red,red)){.border-ok\/40{border-color:color-mix(in oklab,var(--color-ok) 40%,transparent)}}.border-primary{border-color:var(--color-primary)}.border-transparent{border-color:#0000}.border-warn\/30{border-color:#b453094d}@supports (color:color-mix(in lab,red,red)){.border-warn\/30{border-color:color-mix(in oklab,var(--color-warn) 30%,transparent)}}.border-warn\/40{border-color:#b4530966}@supports (color:color-mix(in lab,red,red)){.border-warn\/40{border-color:color-mix(in oklab,var(--color-warn) 40%,transparent)}}.border-white{border-color:var(--color-white)}.border-zinc-300{border-color:var(--color-zinc-300)}.border-b-accent{border-bottom-color:var(--color-accent)}.bg-\[\#e5484d\]{background-color:#e5484d}.bg-\[\#fff\]{background-color:#fff}.bg-\[var\(--reddb-color-primary\)\]{background-color:var(--reddb-color-primary)}.bg-accent{background-color:var(--color-accent)}.bg-accent-soft{background-color:var(--color-accent-soft)}.bg-accent\/5{background-color:#e11d480d}@supports (color:color-mix(in lab,red,red)){.bg-accent\/5{background-color:color-mix(in oklab,var(--color-accent) 5%,transparent)}}.bg-accent\/10{background-color:#e11d481a}@supports (color:color-mix(in lab,red,red)){.bg-accent\/10{background-color:color-mix(in oklab,var(--color-accent) 10%,transparent)}}.bg-accent\/15{background-color:#e11d4826}@supports (color:color-mix(in lab,red,red)){.bg-accent\/15{background-color:color-mix(in oklab,var(--color-accent) 15%,transparent)}}.bg-accent\/80{background-color:#e11d48cc}@supports (color:color-mix(in lab,red,red)){.bg-accent\/80{background-color:color-mix(in oklab,var(--color-accent) 80%,transparent)}}.bg-amber-400{background-color:var(--color-amber-400)}.bg-bg-0{background-color:var(--color-bg-0)}.bg-bg-0\/70{background-color:#ffffffb3}@supports (color:color-mix(in lab,red,red)){.bg-bg-0\/70{background-color:color-mix(in oklab,var(--color-bg-0) 70%,transparent)}}.bg-bg-0\/80{background-color:#fffc}@supports (color:color-mix(in lab,red,red)){.bg-bg-0\/80{background-color:color-mix(in oklab,var(--color-bg-0) 80%,transparent)}}.bg-bg-0\/85{background-color:#ffffffd9}@supports (color:color-mix(in lab,red,red)){.bg-bg-0\/85{background-color:color-mix(in oklab,var(--color-bg-0) 85%,transparent)}}.bg-bg-1{background-color:var(--color-bg-1)}.bg-bg-1\/20{background-color:#fafafa33}@supports (color:color-mix(in lab,red,red)){.bg-bg-1\/20{background-color:color-mix(in oklab,var(--color-bg-1) 20%,transparent)}}.bg-bg-1\/30{background-color:#fafafa4d}@supports (color:color-mix(in lab,red,red)){.bg-bg-1\/30{background-color:color-mix(in oklab,var(--color-bg-1) 30%,transparent)}}.bg-bg-1\/35{background-color:#fafafa59}@supports (color:color-mix(in lab,red,red)){.bg-bg-1\/35{background-color:color-mix(in oklab,var(--color-bg-1) 35%,transparent)}}.bg-bg-1\/40{background-color:#fafafa66}@supports (color:color-mix(in lab,red,red)){.bg-bg-1\/40{background-color:color-mix(in oklab,var(--color-bg-1) 40%,transparent)}}.bg-bg-1\/60{background-color:#fafafa99}@supports (color:color-mix(in lab,red,red)){.bg-bg-1\/60{background-color:color-mix(in oklab,var(--color-bg-1) 60%,transparent)}}.bg-bg-1\/80{background-color:#fafafacc}@supports (color:color-mix(in lab,red,red)){.bg-bg-1\/80{background-color:color-mix(in oklab,var(--color-bg-1) 80%,transparent)}}.bg-bg-2{background-color:var(--color-bg-2)}.bg-bg-2\/30{background-color:#f4f4f54d}@supports (color:color-mix(in lab,red,red)){.bg-bg-2\/30{background-color:color-mix(in oklab,var(--color-bg-2) 30%,transparent)}}.bg-bg-2\/60{background-color:#f4f4f599}@supports (color:color-mix(in lab,red,red)){.bg-bg-2\/60{background-color:color-mix(in oklab,var(--color-bg-2) 60%,transparent)}}.bg-bg-3{background-color:var(--color-bg-3)}.bg-black{background-color:var(--color-black)}.bg-black\/45{background-color:#00000073}@supports (color:color-mix(in lab,red,red)){.bg-black\/45{background-color:color-mix(in oklab,var(--color-black) 45%,transparent)}}.bg-blue-500{background-color:var(--color-blue-500)}.bg-danger{background-color:var(--color-danger)}.bg-danger\/5{background-color:#dc26260d}@supports (color:color-mix(in lab,red,red)){.bg-danger\/5{background-color:color-mix(in oklab,var(--color-danger) 5%,transparent)}}.bg-danger\/10{background-color:#dc26261a}@supports (color:color-mix(in lab,red,red)){.bg-danger\/10{background-color:color-mix(in oklab,var(--color-danger) 10%,transparent)}}.bg-fg-2{background-color:var(--color-fg-2)}.bg-fg-3{background-color:var(--color-fg-3)}.bg-line-1{background-color:var(--color-line-1)}.bg-line-2{background-color:var(--color-line-2)}.bg-muted,.bg-muted\/15{background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/15{background-color:color-mix(in oklab,var(--color-muted) 15%,transparent)}}.bg-muted\/40{background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/40{background-color:color-mix(in oklab,var(--color-muted) 40%,transparent)}}.bg-neutral-900{background-color:var(--color-neutral-900)}.bg-ok{background-color:var(--color-ok)}.bg-ok\/5{background-color:#16a34a0d}@supports (color:color-mix(in lab,red,red)){.bg-ok\/5{background-color:color-mix(in oklab,var(--color-ok) 5%,transparent)}}.bg-ok\/10{background-color:#16a34a1a}@supports (color:color-mix(in lab,red,red)){.bg-ok\/10{background-color:color-mix(in oklab,var(--color-ok) 10%,transparent)}}.bg-primary,.bg-primary\/10{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/10{background-color:color-mix(in oklab,var(--color-primary) 10%,transparent)}}.bg-primary\/80{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.bg-primary\/80{background-color:color-mix(in oklab,var(--color-primary) 80%,transparent)}}.bg-role-embedded{background-color:var(--color-role-embedded)}.bg-role-primary{background-color:var(--color-role-primary)}.bg-role-replica{background-color:var(--color-role-replica)}.bg-transparent{background-color:#0000}.bg-warn\/5{background-color:#b453090d}@supports (color:color-mix(in lab,red,red)){.bg-warn\/5{background-color:color-mix(in oklab,var(--color-warn) 5%,transparent)}}.bg-warn\/10{background-color:#b453091a}@supports (color:color-mix(in lab,red,red)){.bg-warn\/10{background-color:color-mix(in oklab,var(--color-warn) 10%,transparent)}}.bg-warn\/15{background-color:#b4530926}@supports (color:color-mix(in lab,red,red)){.bg-warn\/15{background-color:color-mix(in oklab,var(--color-warn) 15%,transparent)}}.bg-white{background-color:var(--color-white)}.bg-yellow-200{background-color:var(--color-yellow-200)}.fill-background{fill:var(--color-background)}.fill-bg-1{fill:var(--color-bg-1)}.fill-fg-0{fill:var(--color-fg-0)}.fill-fg-3{fill:var(--color-fg-3)}.fill-none{fill:none}.stroke-current{stroke:currentColor}.p-0{padding:calc(var(--spacing) * 0)}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.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-0{padding-inline:calc(var(--spacing) * 0)}.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-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.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-\[1\.5rem\]{padding-inline:1.5rem}.px-\[var\(--reddb-spatial-inset-lg\)\]{padding-inline:var(--reddb-spatial-inset-lg)}.px-\[var\(--reddb-spatial-inset-md\)\]{padding-inline:var(--reddb-spatial-inset-md)}.px-\[var\(--reddb-spatial-inset-sm\)\]{padding-inline:var(--reddb-spatial-inset-sm)}.py-0{padding-block:calc(var(--spacing) * 0)}.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-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-16{padding-block:calc(var(--spacing) * 16)}.py-\[var\(--reddb-space-6\)\]{padding-block:var(--reddb-space-6)}.py-\[var\(--reddb-spatial-inset-lg\)\]{padding-block:var(--reddb-spatial-inset-lg)}.py-\[var\(--reddb-spatial-inset-md\)\]{padding-block:var(--reddb-spatial-inset-md)}.py-\[var\(--reddb-spatial-inset-sm\)\]{padding-block:var(--reddb-spatial-inset-sm)}.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)}.pr-1\.5{padding-right:calc(var(--spacing) * 1.5)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-2\.5{padding-right:calc(var(--spacing) * 2.5)}.pr-5{padding-right:calc(var(--spacing) * 5)}.pb-0{padding-bottom:calc(var(--spacing) * 0)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-\[var\(--reddb-spatial-inset-sm\)\]{padding-bottom:var(--reddb-spatial-inset-sm)}.pl-1{padding-left:calc(var(--spacing) * 1)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-2\.5{padding-left:calc(var(--spacing) * 2.5)}.pl-8{padding-left:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.text-start{text-align:start}.align-super{vertical-align:super}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.font-serif{font-family:var(--font-serif)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--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-\[10\.5px\]{font-size:10.5px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[16px\]{font-size:16px}.text-\[18px\]{font-size:18px}.text-\[20px\]{font-size:20px}.text-\[22px\]{font-size:22px}.text-\[40px\]{font-size:40px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.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-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)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.08em\]{--tw-tracking:.08em;letter-spacing:.08em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-accent{color:var(--color-accent)}.text-amber-400{color:var(--color-amber-400)}.text-background{color:var(--color-background)}.text-bg-0{color:var(--color-bg-0)}.text-black{color:var(--color-black)}.text-danger{color:var(--color-danger)}.text-fg-0{color:var(--color-fg-0)}.text-fg-1{color:var(--color-fg-1)}.text-fg-2{color:var(--color-fg-2)}.text-fg-3{color:var(--color-fg-3)}.text-foreground{color:var(--color-foreground)}.text-line-3{color:var(--color-line-3)}.text-muted{color:var(--color-muted)}.text-ok{color:var(--color-ok)}.text-primary{color:var(--color-primary)}.text-purple-700{color:var(--color-purple-700)}.text-role-replica{color:var(--color-role-replica)}.text-warn{color:var(--color-warn)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.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,)}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.decoration-2{text-decoration-thickness:2px}.accent-accent{accent-color:var(--color-accent)}.accent-current{accent-color:currentColor}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-100{opacity:1}.shadow{--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-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_12px_var\(--color-accent-glow\)\]{--tw-shadow:0 0 12px var(--tw-shadow-color,var(--color-accent-glow));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 16px 48px var(--tw-shadow-color,#0f172a24), 0 0 0 1px var(--tw-shadow-color,var(--color-line-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-md{--tw-shadow:0 4px 12px var(--tw-shadow-color,#0f172a14), 0 0 0 1px var(--tw-shadow-color,var(--color-line-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-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{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-primary{--tw-ring-color:var(--color-primary)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.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{--tw-backdrop-blur:blur(8px);-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-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,)}.backdrop-filter{-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media(hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-fg-3::placeholder{color:var(--color-fg-3)}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media(hover:hover){.hover\:border-accent:hover{border-color:var(--color-accent)}.hover\:border-danger\/50:hover{border-color:#dc262680}@supports (color:color-mix(in lab,red,red)){.hover\:border-danger\/50:hover{border-color:color-mix(in oklab,var(--color-danger) 50%,transparent)}}.hover\:border-danger\/60:hover{border-color:#dc262699}@supports (color:color-mix(in lab,red,red)){.hover\:border-danger\/60:hover{border-color:color-mix(in oklab,var(--color-danger) 60%,transparent)}}.hover\:border-fg-3:hover{border-color:var(--color-fg-3)}.hover\:border-foreground:hover{border-color:var(--color-foreground)}.hover\:border-line-2:hover{border-color:var(--color-line-2)}.hover\:border-line-3:hover{border-color:var(--color-line-3)}.hover\:border-warn\/70:hover{border-color:#b45309b3}@supports (color:color-mix(in lab,red,red)){.hover\:border-warn\/70:hover{border-color:color-mix(in oklab,var(--color-warn) 70%,transparent)}}.hover\:bg-\[\#ff3868\]:hover{background-color:#ff3868}.hover\:bg-accent\/20:hover{background-color:#e11d4833}@supports (color:color-mix(in lab,red,red)){.hover\:bg-accent\/20:hover{background-color:color-mix(in oklab,var(--color-accent) 20%,transparent)}}.hover\:bg-accent\/25:hover{background-color:#e11d4840}@supports (color:color-mix(in lab,red,red)){.hover\:bg-accent\/25:hover{background-color:color-mix(in oklab,var(--color-accent) 25%,transparent)}}.hover\:bg-accent\/90:hover{background-color:#e11d48e6}@supports (color:color-mix(in lab,red,red)){.hover\:bg-accent\/90:hover{background-color:color-mix(in oklab,var(--color-accent) 90%,transparent)}}.hover\:bg-bg-1:hover{background-color:var(--color-bg-1)}.hover\:bg-bg-1\/40:hover{background-color:#fafafa66}@supports (color:color-mix(in lab,red,red)){.hover\:bg-bg-1\/40:hover{background-color:color-mix(in oklab,var(--color-bg-1) 40%,transparent)}}.hover\:bg-bg-1\/50:hover{background-color:#fafafa80}@supports (color:color-mix(in lab,red,red)){.hover\:bg-bg-1\/50:hover{background-color:color-mix(in oklab,var(--color-bg-1) 50%,transparent)}}.hover\:bg-bg-1\/60:hover{background-color:#fafafa99}@supports (color:color-mix(in lab,red,red)){.hover\:bg-bg-1\/60:hover{background-color:color-mix(in oklab,var(--color-bg-1) 60%,transparent)}}.hover\:bg-bg-2:hover{background-color:var(--color-bg-2)}.hover\:bg-bg-2\/40:hover{background-color:#f4f4f566}@supports (color:color-mix(in lab,red,red)){.hover\:bg-bg-2\/40:hover{background-color:color-mix(in oklab,var(--color-bg-2) 40%,transparent)}}.hover\:bg-bg-2\/60:hover{background-color:#f4f4f599}@supports (color:color-mix(in lab,red,red)){.hover\:bg-bg-2\/60:hover{background-color:color-mix(in oklab,var(--color-bg-2) 60%,transparent)}}.hover\:bg-bg-3:hover{background-color:var(--color-bg-3)}.hover\:bg-bg-3\/60:hover{background-color:#e7e7ea99}@supports (color:color-mix(in lab,red,red)){.hover\:bg-bg-3\/60:hover{background-color:color-mix(in oklab,var(--color-bg-3) 60%,transparent)}}.hover\:bg-blue-500:hover{background-color:var(--color-blue-500)}.hover\:bg-danger\/20:hover{background-color:#dc262633}@supports (color:color-mix(in lab,red,red)){.hover\:bg-danger\/20:hover{background-color:color-mix(in oklab,var(--color-danger) 20%,transparent)}}.hover\:bg-muted:hover,.hover\:bg-muted\/10:hover{background-color:var(--color-muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/10:hover{background-color:color-mix(in oklab,var(--color-muted) 10%,transparent)}}.hover\:bg-primary:hover,.hover\:bg-primary\/80:hover{background-color:var(--color-primary)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-primary\/80:hover{background-color:color-mix(in oklab,var(--color-primary) 80%,transparent)}}.hover\:text-accent:hover{color:var(--color-accent)}.hover\:text-danger:hover{color:var(--color-danger)}.hover\:text-fg-0:hover{color:var(--color-fg-0)}.hover\:text-fg-1:hover{color:var(--color-fg-1)}.hover\:text-foreground:hover{color:var(--color-foreground)}.hover\:opacity-70:hover{opacity:.7}.hover\:opacity-90:hover{opacity:.9}}.focus\:border-accent:focus{border-color:var(--color-accent)}.focus\:border-line-3:focus{border-color:var(--color-line-3)}.focus\:opacity-100:focus{opacity:1}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-accent\/40:focus-visible{--tw-ring-color:#e11d4866}@supports (color:color-mix(in lab,red,red)){.focus-visible\:ring-accent\/40:focus-visible{--tw-ring-color:color-mix(in oklab, var(--color-accent) 40%, transparent)}}.focus-visible\:ring-primary:focus-visible{--tw-ring-color:var(--color-primary)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:text-fg-3:disabled{color:var(--color-fg-3)}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-100:disabled{opacity:1}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}@media(prefers-reduced-motion:no-preference){.motion-safe\:animate-pulse{animation:var(--animate-pulse)}.motion-safe\:animate-spin{animation:var(--animate-spin)}}@media(prefers-reduced-motion:reduce){.motion-reduce\:animate-none{animation:none}.motion-reduce\:opacity-50{opacity:.5}.motion-reduce\:backdrop-blur-none{--tw-backdrop-blur: ;-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,)}}@media(min-width:40rem){.sm\:inline{display:inline}}@media(min-width:48rem){.md\:h-11{height:calc(var(--spacing) * 11)}.md\:h-\[var\(--reddb-spatial-control-height-lg\)\]{height:var(--reddb-spatial-control-height-lg)}.md\:grid-cols-\[1fr_1fr\]{grid-template-columns:1fr 1fr}@media(hover:hover){.md\:hover\:text-muted:hover{color:var(--color-muted)}}}@container (min-width:42rem){.\@min-\[42rem\]\:grid-cols-\[minmax\(0\,1fr\)_8rem\]{grid-template-columns:minmax(0,1fr) 8rem}}@container (min-width:52rem){.\@min-\[52rem\]\:grid-cols-\[13rem_minmax\(0\,1fr\)\]{grid-template-columns:13rem minmax(0,1fr)}}@container (min-width:62rem){.\@min-\[62rem\]\:grid-cols-\[13rem_minmax\(18rem\,24rem\)_minmax\(0\,1fr\)\]{grid-template-columns:13rem minmax(18rem,24rem) minmax(0,1fr)}.\@min-\[62rem\]\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.\@min-\[62rem\]\:border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}}}:root{--reddb-color-background:var(--reddb-color-neutral-50);--reddb-color-foreground:var(--reddb-color-neutral-900);--reddb-color-muted:var(--reddb-color-neutral-500);--reddb-color-neutral-50:#fbfcfd;--reddb-color-neutral-500:#889096;--reddb-color-neutral-900:#11181c;--reddb-color-primary:var(--reddb-color-red-500);--reddb-color-red-500:#e5484d;--reddb-color-red-600:#dc3d43;--reddb-radius-full:9999px;--reddb-radius-lg:.75rem;--reddb-radius-md:.5rem;--reddb-radius-sm:.25rem;--reddb-space-0:0rem;--reddb-space-1:.125rem;--reddb-space-10:2rem;--reddb-space-11:2.25rem;--reddb-space-12:2.5rem;--reddb-space-13:2.75rem;--reddb-space-14:3rem;--reddb-space-2:.25rem;--reddb-space-3:.375rem;--reddb-space-4:.5rem;--reddb-space-5:.75rem;--reddb-space-6:1rem;--reddb-space-7:1.25rem;--reddb-space-8:1.5rem;--reddb-space-9:1.75rem}:where(:root),[data-density=comfortable]{--reddb-spatial-control-height-lg:var(--reddb-space-13);--reddb-spatial-control-height-md:var(--reddb-space-11);--reddb-spatial-control-height-sm:var(--reddb-space-10);--reddb-spatial-gap-lg:var(--reddb-space-5);--reddb-spatial-gap-md:var(--reddb-space-4);--reddb-spatial-gap-sm:var(--reddb-space-2);--reddb-spatial-inset-lg:var(--reddb-space-8);--reddb-spatial-inset-md:var(--reddb-space-6);--reddb-spatial-inset-sm:var(--reddb-space-5)}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-cyrillic-ext-wght-normal.BOeWTOD4.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-cyrillic-wght-normal.DqGufNeO.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-greek-ext-wght-normal.DlzME5K_.woff2)format("woff2-variations");unicode-range:U+1F??}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-greek-wght-normal.CkhJZR-_.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-vietnamese-wght-normal.CBcvBZtf.woff2)format("woff2-variations");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 Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-latin-ext-wght-normal.DO1Apj_S.woff2)format("woff2-variations");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 Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./inter-latin-wght-normal.Dx4kXJAl.woff2)format("woff2-variations");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:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(data:font/woff2;base64,d09GMgABAAAAAAfsABQAAAAAEAwAAAeCAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoP0hWQVJbBmA/U1RBVIFiJyYAdC9qEQgKhGSEAAsgADCGCAE2AiQDOgQgBYlMB4EUDAcbLQ4onoexrSC/2ZyLAa8p8VHB8/x3Vue+V0hVJalMJg2nx/TCrQXxBeqLjQG7FyM1WEa/X1tEXN7cFz9EJEMmMUz3RihWSSKeQCbcIou0izz/C8v+fq3VfajEa9gDD11CImXS7qL/RJFVzC1qiB6KmKeD6TZdQ6IRGv78dL6uSVVCfgni5mzu7kcgQBgAEAQTQRCoL++STTYybkJxNfQxAAIAGu8OdEB9teW2jh4BpgDqFjAeSEByW3zFP0CBBgNMsMCGEDjgggdhiEAUAeIIED7ABTDUEnkIE9Q9ahFgKttcVhApo4ACB4qobHaccgDfEjFO6aaWUhjMLt2SyIvHKoDqoA4CSUwEIYQCEjhAO9R1G6keDeDZGjNo+AhxOjCEGTr1WeIF3kYBiLAOKvkJSMiKX0VdAyQt3SDJClCkxJCHkCzfqyVTriJZLcolS32JZHUekq2TYNkYtCtjYHMQXSxGjXDz2t/yLWXzDzxz+o3zFwDEaN23F+13pyMdQAEaSKAR9vcGq4A4MTSKCElGW+M7UcY7xqkggITb28ZJhlqc9q2twYKTt0NjixBgYvO9BIihEBLYuOFXQzfIQ7dXGUEEEgFDooBfAzqiQbpJrhiWSuKJCRFKYbHCyJKI2G5GiZbNAvgAu5pc3vwx4G+g3aDkhklABiSz0BICXrYghtYhx/cdJ+44rY2oZ0aMNRFz3VZjb6W33F3gzltqtOCV8tTHSpOeXuItfvr5lCdfzFpqtEitvqdcdGGFd28ZqqC0tPbeChGXgrIlnhSWu/eUso4uKWFLugyDzQJhflY4659+WjQ++6x72WUMv9G8mw6QJl7BVxX5fe/kpUsOvnZwee9uQ0cGXYd0o89XB2748sDSnt8d2VphdOTTgceDVvOds0v9P/s7HPq15aGun/6Vllb56f1dl0t1LejqrNkpdRZsG8TOnM5vkBG5oiVyVGnS8LHps5cfNWJs6qKPfaNSxiQNBUm3cKNWROr0GSur7Za31k1vieq7LH11VF+jXdRIasRKflc7jkobm1Z9te1IyZA0pDkhLR98+H37Zf1c/8at+dB7x+7GfVyTfJMPiYztsnl59Y5l4j+0n1RXlpHnF3Tq7HecmNF/CJodEMAikruxiyJaGLvHOdAfoA+oDvpjBm2b91cHGRZMU9n25xEU0A8fgEEAdKI3Q1iDtc034sug5YVMkE2jsE+BIkwSoQ3gxXMqz9tELp48bd0cFKOKS7xYjEuXBnZP5ia7DyiO/X/YI+PQSbt2uSdqAkWL9nQbV1XB94/+uPfdZz8dnXYFBYrcTl2SIR/ybxJNJPz/Gupb0JaZeens2ekC7EKr8t+Ls/P5VJPYJdHKyqfg2nqU6bhlidzcddQV/7MmecTzJ5VPcKXkNKSEogHjYFx6QZ7rQ+FSe8njaiNuOnXS8H2ScQ619c2mC3VTtauL0rRbXd/CkSOP37FY9Zkjz8+GibYUMOEWF+RdrFS8Ecv1SHOpPUPZGEIpjPvFyU5cXKjd6OXqorTqy9GwRd++HVufPGnVsW+aO3vggKZ18jR9sXaTC1PWTEsVUaK0FkNySbTQDqlm2PfDjZcu4aalnSLKjnOoYQ0nUlqqXcGpPu/4VgV/xU2pAqW4BW3qzhQ8/hFKhV2qE3+BKAtDqBXjfgnVdH4y0wg5tbVNRenNdTWOrenWLcupQdmsbq5b+18piTe/xRdp1xbILxNPJGInm2z6hoB21Lal0i+ePTtd7B45+3XhFJ329evskXm7qurUVREotqSluSo/L29d3qDhI4YOQqWhI4YNvBNfsMHeXKemXrxQfKeuPOGRVayA3JtkJKEgbPp+dXUDluddutRYLFoXGXWX6N3WFaGLbQtRSitVYNacTNSdy7AaG/HSaUEANcBoGXNdcZvZsOqQ1icBDv21/gzAoYPHH/WDW0qNR3QTYKEAEHig6o13NXbND06CQPlRtYjGNnSktRc09k1mAMDvAlDKfQjgy6fssInlfzmNAjKkDxoxHOBLdVRAIVt9j4qo+hA1w9T1aNBNTUOTTNUHLbqokE+UAfJXCIGw/IxCSL5GRUJeR40rL/UxTm4Q08H6MbCs70ObuNyIIXrINHQYInF06UUlevTjbQzTh5upiDMzMMogUtEnjPs/Y7jAHCJeB0GBHh04tC6FiB6ZFB1oArUSIoFoqhzCeAN6lHwm0T4C3VVPWvjpSMXReuWesMEcoqrmgtNBGd2noWeV0hNAz9rFeShNJxHGsPa3HXeKTk8b55hahySYHaYKKFFLpCfN8rsoaJn01CR04Gkc+5k7KVTCmClX8Q10HCrUEkVlSX+XO33oQR9609tJ516H497WSobWs5Up6TLaS10/dessIskgJSLiDlWvHVUywpkQ7hdPZqGyiEF0uVQerVcPamT1A3eKXdyI1vG9OoflrSXihZ1qqGE3nhmAgiIbRCQgPLEPtOM3UQwTLYaYYomNlpA44opnjV6jkD6id80OOrzf6BzmMD6eEa1zKyeYG1fzfEf16V6jw9XYOaar1/b2kP/IYX8oR2mcFvv2GtBV3JXgd437AQAA)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(./jetbrains-mono-cyrillic-wght-normal.D73BlboJ.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(./jetbrains-mono-greek-wght-normal.Bw9x6K1M.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(./jetbrains-mono-vietnamese-wght-normal.Bt-aOZkq.woff2)format("woff2-variations");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:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(./jetbrains-mono-latin-ext-wght-normal.DBQx-q_a.woff2)format("woff2-variations");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:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(./jetbrains-mono-latin-wght-normal.B9CIFXIH.woff2)format("woff2-variations");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[data-theme=dark]{--color-bg-0:#050607;--color-bg-1:#0d0f13;--color-bg-2:#181b21;--color-bg-3:#232730;--color-fg-0:#f7f8fa;--color-fg-1:#c8ccd4;--color-fg-2:#9ca1a9;--color-fg-3:#7a7f87;--color-line-1:#181b21;--color-line-2:#2a2e36;--color-line-3:#3d424b;--color-accent:#ff2056;--color-accent-soft:#ff20561f;--color-accent-glow:#ff205673;--color-ok:#4ade80;--color-warn:#fbbf24;--color-danger:#ff5470;--color-info:#60a5fa;--color-role-primary:#ff2056;--color-role-replica:#60a5fa;--color-role-embedded:#4ade80;--color-ambient-glow:#ff20560f;--shadow-md:0 4px 12px #0006, 0 0 0 1px var(--color-line-2);--shadow-lg:0 16px 48px #0009, 0 0 0 1px var(--color-line-2)}.global-progress{z-index:30;pointer-events:none;background:var(--color-accent-soft);height:2px;position:absolute;inset:0 0 auto;overflow:hidden}.global-progress__bar{background:var(--color-accent);width:42%;height:100%;box-shadow:0 0 14px var(--color-accent-glow);transform-origin:0;animation:global-progress-slide 1.05s var(--ease-snap) infinite}@keyframes global-progress-slide{0%{transform:translate(-110%)scaleX(.7)}50%{transform:translate(90%)scaleX(1)}to{transform:translate(245%)scaleX(.85)}}@media(prefers-reduced-motion:reduce){.global-progress__bar{opacity:.85;width:100%;animation:none}}@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-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@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-outline-style{syntax:"*";inherits:false;initial-value:solid}@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-ease{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
@@ -1 +0,0 @@
1
- var ee=t=>{throw TypeError(t)};var De=(t,e,n)=>e.has(t)||ee("Cannot "+n);var y=(t,e,n)=>(De(t,e,"read from private field"),n?n.call(t):e.get(t)),A=(t,e,n)=>e.has(t)?ee("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,n);import{bR as qt,bz as T,at as I,bm as P,bH as _t,bt as Ve}from"./CGFL56WJ.js";import{a as ne}from"./Btd6PFkC.js";class Bt{constructor(e,n){this.status=e,typeof n=="string"?this.body={message:n}:n?this.body=n:this.body={message:`Error: ${e}`}}toString(){return JSON.stringify(this.body)}}class Kt{constructor(e,n){try{new Headers({location:n})}catch{throw new Error(`Invalid redirect location ${JSON.stringify(n)}: this string contains characters that cannot be used in HTTP headers`)}this.status=e,this.location=n}}class Mt extends Error{constructor(e,n,r){super(r),this.status=e,this.text=n}}new URL("sveltekit-internal://");function qe(t,e){return t==="/"||e==="ignore"?t:e==="never"?t.endsWith("/")?t.slice(0,-1):t:e==="always"&&!t.endsWith("/")?t+"/":t}function Be(t){return t.split("%25").map(decodeURI).join("%25")}function Ke(t){for(const e in t)t[e]=decodeURIComponent(t[e]);return t}function Pt({href:t}){return t.split("#")[0]}function j(){}function Me(...t){let e=5381;for(const n of t)if(typeof n=="string"){let r=n.length;for(;r;)e=e*33^n.charCodeAt(--r)}else if(ArrayBuffer.isView(n)){const r=new Uint8Array(n.buffer,n.byteOffset,n.byteLength);let a=r.length;for(;a;)e=e*33^r[--a]}else throw new TypeError("value must be a string or TypedArray");return(e>>>0).toString(36)}new TextEncoder;function He(t){const e=atob(t),n=new Uint8Array(e.length);for(let r=0;r<e.length;r++)n[r]=e.charCodeAt(r);return n}const Fe=window.fetch;window.fetch=(t,e)=>((t instanceof Request?t.method:(e==null?void 0:e.method)||"GET")!=="GET"&&Y.delete(Ht(t)),Fe(t,e));const Y=new Map;function Ge(t,e){const n=Ht(t,e),r=document.querySelector(n);if(r!=null&&r.textContent){r.remove();let{body:a,...o}=JSON.parse(r.textContent);const s=r.getAttribute("data-ttl");return s&&Y.set(n,{body:a,init:o,ttl:1e3*Number(s)}),r.getAttribute("data-b64")!==null&&(a=He(a)),Promise.resolve(new Response(a,o))}return window.fetch(t,e)}function We(t,e,n){if(Y.size>0){const r=Ht(t,n),a=Y.get(r);if(a){if(performance.now()<a.ttl&&["default","force-cache","only-if-cached",void 0].includes(n==null?void 0:n.cache))return new Response(a.body,a.init);Y.delete(r)}}return window.fetch(e,n)}function Ht(t,e){let r=`script[data-sveltekit-fetched][data-url=${JSON.stringify(t instanceof Request?t.url:t)}]`;if(e!=null&&e.headers||e!=null&&e.body){const a=[];e.headers&&a.push([...new Headers(e.headers)].join(",")),e.body&&(typeof e.body=="string"||ArrayBuffer.isView(e.body))&&a.push(e.body),r+=`[data-hash="${Me(...a)}"]`}return r}const ze=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/,Je=/^\/\((?:[^)]+)\)$/;function Ye(t){const e=[];return{pattern:t==="/"||Je.test(t)?/^\/$/:new RegExp(`^${Qe(t).map(r=>{const a=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(r);if(a)return e.push({name:a[1],matcher:a[2],optional:!1,rest:!0,chained:!0}),"(?:/([^]*))?";const o=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(r);if(o)return e.push({name:o[1],matcher:o[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!r)return;const s=r.split(/\[(.+?)\](?!\])/);return"/"+s.map((l,c)=>{if(c%2){if(l.startsWith("x+"))return Ot(String.fromCharCode(parseInt(l.slice(2),16)));if(l.startsWith("u+"))return Ot(String.fromCharCode(...l.slice(2).split("-").map(m=>parseInt(m,16))));const u=ze.exec(l),[,h,_,p,f]=u;return e.push({name:p,matcher:f,optional:!!h,rest:!!_,chained:_?c===1&&s[0]==="":!1}),_?"([^]*?)":h?"([^/]*)?":"([^/]+?)"}return Ot(l)}).join("")}).join("")}/?$`),params:e}}function Xe(t){return t!==""&&!/^\([^)]+\)$/.test(t)}function Qe(t){return t.slice(1).split("/").filter(Xe)}function Ze(t,e,n){const r={},a=t.slice(1),o=a.filter(i=>i!==void 0);let s=0;for(let i=0;i<e.length;i+=1){const l=e[i];let c=a[i-s];if(l.chained&&l.rest&&s&&(c=a.slice(i-s,i+1).filter(u=>u).join("/"),s=0),c===void 0)if(l.rest)c="";else continue;if(!l.matcher||n[l.matcher](c)){r[l.name]=c;const u=e[i+1],h=a[i+1];u&&!u.rest&&u.optional&&h&&l.chained&&(s=0),!u&&!h&&Object.keys(r).length===o.length&&(s=0);continue}if(l.optional&&l.chained){s++;continue}return}if(!s)return r}function Ot(t){return t.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}function tn({nodes:t,server_loads:e,dictionary:n,matchers:r}){const a=new Set(e);return Object.entries(n).map(([i,[l,c,u]])=>{const{pattern:h,params:_}=Ye(i),p={id:i,exec:f=>{const m=h.exec(f);if(m)return Ze(m,_,r)},errors:[1,...u||[]].map(f=>t[f]),layouts:[0,...c||[]].map(s),leaf:o(l)};return p.errors.length=p.layouts.length=Math.max(p.errors.length,p.layouts.length),p});function o(i){const l=i<0;return l&&(i=~i),[l,t[i]]}function s(i){return i===void 0?i:[a.has(i),t[i]]}}function me(t,e=JSON.parse){try{return e(sessionStorage[t])}catch{}}function re(t,e,n=JSON.stringify){const r=n(e);try{sessionStorage[t]=r}catch{}}var ue;const U=((ue=globalThis.__sveltekit_cv6r80)==null?void 0:ue.base)??"";var de;const en=((de=globalThis.__sveltekit_cv6r80)==null?void 0:de.assets)??U??"",nn="1789961081476",_e="sveltekit:snapshot",we="sveltekit:scroll",ve="sveltekit:states",rn="sveltekit:pageurl",H="sveltekit:history",Q="sveltekit:navigation",q={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},Lt=location.origin;function Ft(t){if(t instanceof URL)return t;let e=document.baseURI;if(!e){const n=document.getElementsByTagName("base");e=n.length?n[0].href:document.URL}return new URL(t,e)}function B(){return{x:pageXOffset,y:pageYOffset}}function M(t,e){return t.getAttribute(`data-sveltekit-${e}`)}const ae={...q,"":q.hover};function ye(t){let e=t.assignedSlot??t.parentNode;return(e==null?void 0:e.nodeType)===11&&(e=e.host),e}function be(t,e){for(;t&&t!==e;){if(t.nodeName.toUpperCase()==="A"&&t.hasAttribute("href"))return t;t=ye(t)}}function jt(t,e,n){let r;try{if(r=new URL(t instanceof SVGAElement?t.href.baseVal:t.href,document.baseURI),n&&r.hash.match(/^#[^/]/)){const i=location.hash.split("#")[1]||"/";r.hash=`#${i}${r.hash}`}}catch{}const a=t instanceof SVGAElement?t.target.baseVal:t.target,o=!r||!!a||Ut(r,e,n)||(t.getAttribute("rel")||"").split(/\s+/).includes("external"),s=(r==null?void 0:r.origin)===Lt&&t.hasAttribute("download");return{url:r,external:o,target:a,download:s}}function wt(t){let e=null,n=null,r=null,a=null,o=null,s=null,i=t;for(;i&&i!==document.documentElement;)r===null&&(r=M(i,"preload-code")),a===null&&(a=M(i,"preload-data")),e===null&&(e=M(i,"keepfocus")),n===null&&(n=M(i,"noscroll")),o===null&&(o=M(i,"reload")),s===null&&(s=M(i,"replacestate")),i=ye(i);function l(c){switch(c){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:ae[r??"off"],preload_data:ae[a??"off"],keepfocus:l(e),noscroll:l(n),reload:l(o),replace_state:l(s)}}function oe(t){const e=qt(t);let n=!0;function r(){n=!0,e.update(s=>s)}function a(s){n=!1,e.set(s)}function o(s){let i;return e.subscribe(l=>{(i===void 0||n&&l!==i)&&s(i=l)})}return{notify:r,set:a,subscribe:o}}const ke={v:j};function an(){const{set:t,subscribe:e}=qt(!1);let n;async function r(){clearTimeout(n);try{const a=await fetch(`${en}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!a.ok)return!1;const s=(await a.json()).version!==nn;return s&&(t(!0),ke.v(),clearTimeout(n)),s}catch{return!1}}return{subscribe:e,check:r}}function Ut(t,e,n){return t.origin!==Lt||!t.pathname.startsWith(e)?!0:n?t.pathname!==location.pathname:!1}function Pn(t){}const Ee=new Set(["load","prerender","csr","ssr","trailingSlash","config"]);[...Ee];const on=new Set([...Ee]);[...on];function sn(t){return t.filter(e=>e!=null)}function gt(t,e){return t+"/"+e}function Gt(t){return t instanceof Bt||t instanceof Mt?t.status:500}function ln(t){return t instanceof Mt?t.text:"Internal Error"}let x,Z,$t;const cn=ne.toString().includes("$$")||/function \w+\(\) \{\}/.test(ne.toString()),se="a:";var at,ot,st,it,lt,ct,ft,ut,he,dt,pe,ht,ge;cn?(x={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL(se)},Z={current:null},$t={current:!1}):(x=new(he=class{constructor(){A(this,at,T({}));A(this,ot,T(null));A(this,st,T(null));A(this,it,T({}));A(this,lt,T({id:null}));A(this,ct,T({}));A(this,ft,T(-1));A(this,ut,T(new URL(se)))}get data(){return I(y(this,at))}set data(e){P(y(this,at),e)}get form(){return I(y(this,ot))}set form(e){P(y(this,ot),e)}get error(){return I(y(this,st))}set error(e){P(y(this,st),e)}get params(){return I(y(this,it))}set params(e){P(y(this,it),e)}get route(){return I(y(this,lt))}set route(e){P(y(this,lt),e)}get state(){return I(y(this,ct))}set state(e){P(y(this,ct),e)}get status(){return I(y(this,ft))}set status(e){P(y(this,ft),e)}get url(){return I(y(this,ut))}set url(e){P(y(this,ut),e)}},at=new WeakMap,ot=new WeakMap,st=new WeakMap,it=new WeakMap,lt=new WeakMap,ct=new WeakMap,ft=new WeakMap,ut=new WeakMap,he),Z=new(pe=class{constructor(){A(this,dt,T(null))}get current(){return I(y(this,dt))}set current(e){P(y(this,dt),e)}},dt=new WeakMap,pe),$t=new(ge=class{constructor(){A(this,ht,T(!1))}get current(){return I(y(this,ht))}set current(e){P(y(this,ht),e)}},ht=new WeakMap,ge),ke.v=()=>$t.current=!0);function Se(t){Object.assign(x,t)}const fn=new Set(["icon","shortcut icon","apple-touch-icon"]);let z=null;const D=me(we)??{},tt=me(_e)??{},N={url:oe({}),page:oe({}),navigating:qt(null),updated:an()};function Wt(t){D[t]=B()}function un(t,e){let n=t+1;for(;D[n];)delete D[n],n+=1;for(n=e+1;tt[n];)delete tt[n],n+=1}function et(t,e=!1){return e?location.replace(t.href):location.href=t.href,new Promise(j)}async function Re(){if("serviceWorker"in navigator){const t=await navigator.serviceWorker.getRegistration(U||"/");t&&await t.update()}}let zt,Nt,vt,O,Dt,E;const yt=[],bt=[];let v=null;function kt(){var t;(t=v==null?void 0:v.fork)==null||t.then(e=>e==null?void 0:e.discard()),v=null}const mt=new Map,xe=new Set,dn=new Set,X=new Set;let w={branch:[],error:null,url:null},Le=!1,Et=!1,ie=!0,nt=!1,J=!1,Ue=!1,Jt=!1,Ae,k,L,C;const St=new Set,le=new Map,ce=new Map;async function jn(t,e,n){var o,s,i,l;globalThis.__sveltekit_cv6r80&&(globalThis.__sveltekit_cv6r80.query,globalThis.__sveltekit_cv6r80.prerender),document.URL!==location.href&&(location.href=location.href),E=t,await((s=(o=t.hooks).init)==null?void 0:s.call(o)),zt=tn(t),O=document.documentElement,Dt=e,Nt=t.nodes[0],vt=t.nodes[1],Nt(),vt(),k=(i=history.state)==null?void 0:i[H],L=(l=history.state)==null?void 0:l[Q],k||(k=L=Date.now(),history.replaceState({...history.state,[H]:k,[Q]:L},""));const r=D[k];function a(){r&&(history.scrollRestoration="manual",scrollTo(r.x,r.y))}n?(a(),await Rn(Dt,n)):(await F({type:"enter",url:Ft(E.hash?Un(new URL(location.href)):location.href),replace_state:!0}),a()),Sn()}function hn(){yt.length=0,Jt=!1}function Te(t){bt.some(e=>e==null?void 0:e.snapshot)&&(tt[t]=bt.map(e=>{var n;return(n=e==null?void 0:e.snapshot)==null?void 0:n.capture()}))}function Ie(t){var e;(e=tt[t])==null||e.forEach((n,r)=>{var a,o;(o=(a=bt[r])==null?void 0:a.snapshot)==null||o.restore(n)})}function fe(){Wt(k),re(we,D),Te(L),re(_e,tt)}async function Pe(t,e,n,r){let a,o;e.invalidateAll&&kt(),await F({type:"goto",url:Ft(t),keepfocus:e.keepFocus,noscroll:e.noScroll,replace_state:e.replaceState,state:e.state,redirect_count:n,nav_token:r,accept:()=>{if(e.invalidateAll){Jt=!0,a=new Set;for(const[s,i]of le)for(const l of i.keys())a.add(gt(s,l));o=new Set;for(const[s,i]of ce)for(const l of i.keys())o.add(gt(s,l))}e.invalidate&&e.invalidate.forEach(En)}}),e.invalidateAll&&_t().then(_t).then(()=>{for(const[s,i]of le)for(const[l,{resource:c}]of i)a!=null&&a.has(gt(s,l))&&c.refresh();for(const[s,i]of ce)for(const[l,{resource:c}]of i)o!=null&&o.has(gt(s,l))&&c.reconnect()})}async function pn(t){if(t.id!==(v==null?void 0:v.id)){kt();const e={};St.add(e),v={id:t.id,token:e,promise:$e({...t,preload:e}).then(n=>(St.delete(e),n.type==="loaded"&&n.state.error&&kt(),n)),fork:null}}return v.promise}async function Ct(t){var n;const e=(n=await At(t,!1))==null?void 0:n.route;e&&await Promise.all([...e.layouts,e.leaf].filter(Boolean).map(r=>r[1]()))}async function Oe(t,e,n){var a;const r={params:w.params,route:{id:((a=w.route)==null?void 0:a.id)??null},url:new URL(location.href)};if(w={...t.state,nav:r},Se(t.props.page),Ae=new E.root({target:e,props:{...t.props,stores:N,components:bt},hydrate:n,sync:!1,transformError:void 0}),await Promise.resolve(),Ie(L),n){const o={from:null,to:{...r,scroll:D[k]??B()},willUnload:!1,type:"enter",complete:Promise.resolve()};X.forEach(s=>s(o))}Et=!0}async function Rt({url:t,params:e,branch:n,errors:r,status:a,error:o,route:s,form:i}){let l="never";if(U&&(t.pathname===U||t.pathname===U+"/"))l="always";else for(const f of n)(f==null?void 0:f.slash)!==void 0&&(l=f.slash);t.pathname=qe(t.pathname,l),t.search=t.search;const c={type:"loaded",state:{url:t,params:e,branch:n,error:o,route:s},props:{constructors:sn(n).map(f=>f.node.component),page:te(x)}};i!==void 0&&(c.props.form=i);let u={},h=!x,_=0;for(let f=0;f<Math.max(n.length,w.branch.length);f+=1){const m=n[f],d=w.branch[f];(m==null?void 0:m.data)!==(d==null?void 0:d.data)&&(h=!0),m&&(u={...u,...m.data},h&&(c.props[`data_${_}`]=u),_+=1)}return(!w.url||t.href!==w.url.href||w.error!==o||i!==void 0&&i!==x.form||h)&&(c.props.page={error:o,params:e,route:{id:(s==null?void 0:s.id)??null},state:{},status:a,url:new URL(t),form:i??null,data:h?u:x.data}),c}async function Yt({loader:t,parent:e,url:n,params:r,route:a,server_data_node:o}){var c,u;let s=null;const i={dependencies:new Set,params:new Set,parent:!1,route:!1,url:!1,search_params:new Set},l=await t();return{node:l,loader:t,server:o,universal:(c=l.universal)!=null&&c.load?{type:"data",data:s,uses:i}:null,data:s??(o==null?void 0:o.data)??null,slash:((u=l.universal)==null?void 0:u.trailingSlash)??(o==null?void 0:o.slash)}}function gn(t,e,n){let r=t instanceof Request?t.url:t;const a=new URL(r,n);a.origin===n.origin&&(r=a.href.slice(n.origin.length));const o=Et?We(r,a.href,e):Ge(r,e);return{resolved:a,promise:o}}function mn(t,e,n,r,a,o){if(Jt)return!0;if(!a)return!1;if(a.parent&&t||a.route&&e||a.url&&n)return!0;for(const s of a.search_params)if(r.has(s))return!0;for(const s of a.params)if(o[s]!==w.params[s])return!0;for(const s of a.dependencies)if(yt.some(i=>i(new URL(s))))return!0;return!1}function Xt(t,e){return(t==null?void 0:t.type)==="data"?t:(t==null?void 0:t.type)==="skip"?e??null:null}function _n(t,e){if(!t)return new Set(e.searchParams.keys());const n=new Set([...t.searchParams.keys(),...e.searchParams.keys()]);for(const r of n){const a=t.searchParams.getAll(r),o=e.searchParams.getAll(r);a.every(s=>o.includes(s))&&o.every(s=>a.includes(s))&&n.delete(r)}return n}function wn({error:t,url:e,route:n,params:r}){return{type:"loaded",state:{error:t,url:e,route:n,params:r,branch:[]},props:{page:te(x),constructors:[]}}}async function $e({id:t,invalidating:e,url:n,params:r,route:a,preload:o}){if((v==null?void 0:v.id)===t)return St.delete(v.token),v.promise;const{errors:s,layouts:i,leaf:l}=a,c=[...i,l];s.forEach(d=>d==null?void 0:d().catch(j)),c.forEach(d=>d==null?void 0:d[1]().catch(j));const u=w.url?t!==xt(w.url):!1,h=w.route?a.id!==w.route.id:!1,_=_n(w.url,n);let p=!1;const f=c.map(async(d,g)=>{var $;if(!d)return;const b=w.branch[g];return d[1]===(b==null?void 0:b.loader)&&!mn(p,h,u,_,($=b.universal)==null?void 0:$.uses,r)?b:(p=!0,Yt({loader:d[1],url:n,params:r,route:a,parent:async()=>{var pt;const V={};for(let K=0;K<g;K+=1)Object.assign(V,(pt=await f[K])==null?void 0:pt.data);return V},server_data_node:Xt(d[0]?{type:"skip"}:null,d[0]?b==null?void 0:b.server:void 0)}))});for(const d of f)d.catch(j);const m=[];for(let d=0;d<c.length;d+=1)if(c[d])try{m.push(await f[d])}catch(g){if(g instanceof Kt)return{type:"redirect",location:g.location};if(St.has(o))return wn({error:await rt(g,{params:r,url:n,route:{id:a.id}}),url:n,params:r,route:a});let b=Gt(g),R;if(g instanceof Bt)R=g.body;else{if(await N.updated.check())return await Re(),await et(n);R=await rt(g,{params:r,url:n,route:{id:a.id}})}const $=await vn(d,m,s);return $?Rt({url:n,params:r,branch:m.slice(0,$.idx).concat($.node),errors:s,status:b,error:R,route:a}):await je(n,{id:a.id},R,b)}else m.push(void 0);return Rt({url:n,params:r,branch:m,errors:s,status:200,error:null,route:a,form:e?void 0:null})}async function vn(t,e,n){for(;t--;)if(n[t]){let r=t;for(;!e[r];)r-=1;try{return{idx:r+1,node:{node:await n[t](),loader:n[t],data:{},server:null,universal:null}}}catch{continue}}}async function Qt({status:t,error:e,url:n,route:r}){const a={};let o=null;try{const s=await Yt({loader:Nt,url:n,params:a,route:r,parent:()=>Promise.resolve({}),server_data_node:Xt(o)}),i={node:await vt(),loader:vt,universal:null,server:null,data:null};return Rt({url:n,params:a,branch:[s,i],status:t,error:e,errors:[],route:null})}catch(s){if(s instanceof Kt)return Pe(new URL(s.location,location.href),{},0);throw s}}async function yn(t){const e=t.href;if(mt.has(e))return mt.get(e);let n;try{const r=(async()=>{let a=await E.hooks.reroute({url:new URL(t),fetch:async(o,s)=>gn(o,s,t).promise})??t;if(typeof a=="string"){const o=new URL(t);E.hash?o.hash=a:o.pathname=a,a=o}return a})();mt.set(e,r),n=await r}catch{mt.delete(e);return}return n}async function At(t,e){if(t&&!Ut(t,U,E.hash)){const n=await yn(t);if(!n)return;const r=bn(n);for(const a of zt){const o=a.exec(r);if(o)return{id:xt(t),invalidating:e,route:a,params:Ke(o),url:t}}}}function bn(t){return Be(E.hash?t.hash.replace(/^#/,"").replace(/[?#].+/,""):t.pathname.slice(U.length))||"/"}function xt(t){return(E.hash?t.hash.replace(/^#/,""):t.pathname)+t.search}function Ce({url:t,type:e,intent:n,delta:r,event:a,scroll:o}){let s=!1;const i=Zt(w,n,t,e,o??null);r!==void 0&&(i.navigation.delta=r),a!==void 0&&(i.navigation.event=a);const l={...i.navigation,cancel:()=>{s=!0,i.reject(new Error("navigation cancelled"))}};return nt||xe.forEach(c=>c(l)),s?null:i}async function F({type:t,url:e,popped:n,keepfocus:r,noscroll:a,replace_state:o,state:s={},redirect_count:i=0,nav_token:l={},accept:c=j,block:u=j,event:h}){var K;const _=C;C=l;const p=await At(e,!1),f=t==="enter"?Zt(w,p,e,t):Ce({url:e,type:t,delta:n==null?void 0:n.delta,intent:p,scroll:n==null?void 0:n.scroll,event:h});if(!f){u(),C===l&&(C=_);return}const m=k,d=L;c(),nt=!0,Et&&f.navigation.type!=="enter"&&N.navigating.set(Z.current=f.navigation);let g=p&&await $e(p);if(!g){if(Ut(e,U,E.hash))return await et(e,o);g=await je(e,{id:null},await rt(new Mt(404,"Not Found",`Not found: ${e.pathname}`),{url:e,params:{},route:{id:null}}),404,o)}if(e=(p==null?void 0:p.url)||e,C!==l)return f.reject(new Error("navigation aborted")),!1;if(g.type==="redirect"){if(i<20){await F({type:t,url:new URL(g.location,e),popped:n,keepfocus:r,noscroll:a,replace_state:o,state:s,redirect_count:i+1,nav_token:l}),f.fulfil(void 0);return}g=await Qt({status:500,error:await rt(new Error("Redirect loop"),{url:e,params:{},route:{id:null}}),url:e,route:{id:null}})}else g.props.page.status>=400&&await N.updated.check()&&(await Re(),await et(e,o));if(hn(),Wt(m),Te(d),g.props.page.url.pathname!==e.pathname&&(e.pathname=g.props.page.url.pathname),s=n?n.state:s,!n){const S=o?0:1,G={[H]:k+=S,[Q]:L+=S,[ve]:s};(o?history.replaceState:history.pushState).call(history,G,"",e),o||un(k,L)}const b=p&&(v==null?void 0:v.id)===p.id?v.fork:null;v!=null&&v.fork&&!b&&kt(),v=null,g.props.page.state=s;let R;if(Et){const S=(await Promise.all(Array.from(dn,W=>W(f.navigation)))).filter(W=>typeof W=="function");if(S.length>0){let W=function(){S.forEach(It=>{X.delete(It)})};S.push(W),S.forEach(It=>{X.add(It)})}const G=f.navigation.to;w={...g.state,nav:{params:G.params,route:G.route,url:G.url}},g.props.page&&(g.props.page.url=e);const Tt=b&&await b;Tt?R=Tt.commit():(z=null,Ae.$set(g.props),z&&Object.assign(g.props.page,z),Se(g.props.page),R=(K=Ve)==null?void 0:K()),Ue=!0}else await Oe(g,Dt,!1);const{activeElement:$}=document;if(await R,await _t(),await _t(),C!==l)return f.reject(new Error("navigation aborted")),!1;g.props.page&&z&&Object.assign(g.props.page,z);let V=null;if(ie){const S=n?n.scroll:a?B():null;S?scrollTo(S.x,S.y):(V=e.hash&&document.getElementById(Ne(e)))?V.scrollIntoView():scrollTo(0,0)}const pt=document.activeElement!==$&&document.activeElement!==document.body;!r&&!pt&&Ln(e,!V),ie=!0,nt=!1,t==="popstate"&&Ie(L),f.fulfil(void 0),f.navigation.to&&(f.navigation.to.scroll=B()),X.forEach(S=>S(f.navigation)),N.navigating.set(Z.current=null)}async function je(t,e,n,r,a){return t.origin===Lt&&t.pathname===location.pathname&&!Le?await Qt({status:r,error:n,url:t,route:e}):await et(t,a)}function kn(){let t,e={element:void 0,href:void 0},n;O.addEventListener("mousemove",i=>{const l=i.target;clearTimeout(t),t=setTimeout(()=>{o(l,q.hover)},20)});function r(i){i.defaultPrevented||o(i.composedPath()[0],q.tap)}O.addEventListener("mousedown",r),O.addEventListener("touchstart",r,{passive:!0});const a=new IntersectionObserver(i=>{for(const l of i)l.isIntersecting&&(Ct(new URL(l.target.href)),a.unobserve(l.target))},{threshold:0});async function o(i,l){const c=be(i,O),u=c===e.element&&(c==null?void 0:c.href)===e.href&&l>=n;if(!c||u)return;const{url:h,external:_,download:p}=jt(c,U,E.hash);if(_||p)return;const f=wt(c),m=h&&xt(w.url)===xt(h);if(!(f.reload||m))if(l<=f.preload_data){e={element:c,href:c.href},n=q.tap;const d=await At(h,!1);if(!d)return;pn(d)}else l<=f.preload_code&&(e={element:c,href:c.href},n=l,Ct(h))}function s(){a.disconnect();for(const i of O.querySelectorAll("a")){const{url:l,external:c,download:u}=jt(i,U,E.hash);if(c||u)continue;const h=wt(i);h.reload||(h.preload_code===q.viewport&&a.observe(i),h.preload_code===q.eager&&Ct(l))}}X.add(s),s()}function rt(t,e){if(t instanceof Bt)return t.body;const n=Gt(t),r=ln(t);return E.hooks.handleError({error:t,event:e,status:n,message:r})??{message:r}}function Nn(t,e={}){return t=new URL(Ft(t)),t.origin!==Lt?Promise.reject(new Error("goto: invalid URL")):Pe(t,e,0)}function En(t){if(typeof t=="function")yt.push(t);else{const{href:e}=new URL(t,location.href);yt.push(n=>n.href===e)}}function Sn(){var e,n;history.scrollRestoration="manual",addEventListener("beforeunload",r=>{let a=!1;if(fe(),!nt){const o=Zt(w,void 0,null,"leave"),s={...o.navigation,cancel:()=>{a=!0,o.reject(new Error("navigation cancelled"))}};xe.forEach(i=>i(s))}a?(r.preventDefault(),r.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&fe()}),!((e=navigator.connection)!=null&&e.saveData)&&!/2g/.test((n=navigator.connection)==null?void 0:n.effectiveType)&&kn(),O.addEventListener("click",async r=>{if(r.button||r.which!==1||r.metaKey||r.ctrlKey||r.shiftKey||r.altKey||r.defaultPrevented)return;const a=be(r.composedPath()[0],O);if(!a)return;const{url:o,external:s,target:i,download:l}=jt(a,U,E.hash);if(!o)return;if(i==="_parent"||i==="_top"){if(window.parent!==window)return}else if(i&&i!=="_self")return;const c=wt(a);if(!(a instanceof SVGAElement)&&o.protocol!==location.protocol&&!(o.protocol==="https:"||o.protocol==="http:")||l)return;const[h,_]=(E.hash?o.hash.replace(/^#/,""):o.href).split("#"),p=h===Pt(location);if(s||c.reload&&(!p||!_)){Ce({url:o,type:"link",event:r})?nt=!0:r.preventDefault();return}if(_!==void 0&&p){const[,f]=w.url.href.split("#");if(f===_){if(r.preventDefault(),_===""||_==="top"&&a.ownerDocument.getElementById("top")===null)scrollTo({top:0});else{const m=a.ownerDocument.getElementById(decodeURIComponent(_));m&&(m.scrollIntoView(),m.focus())}return}if(J=!0,Wt(k),t(o),!c.replace_state)return;J=!1}r.preventDefault(),await new Promise(f=>{requestAnimationFrame(()=>{setTimeout(f,0)}),setTimeout(f,100)}),await F({type:"link",url:o,keepfocus:c.keepfocus,noscroll:c.noscroll,replace_state:c.replace_state??o.href===location.href,event:r})}),O.addEventListener("submit",r=>{if(r.defaultPrevented)return;const a=HTMLFormElement.prototype.cloneNode.call(r.target),o=r.submitter;if(((o==null?void 0:o.formTarget)||a.target)==="_blank"||((o==null?void 0:o.formMethod)||a.method)!=="get")return;const l=new URL((o==null?void 0:o.hasAttribute("formaction"))&&(o==null?void 0:o.formAction)||a.action);if(Ut(l,U,!1))return;const c=r.target,u=wt(c);if(u.reload)return;r.preventDefault(),r.stopPropagation();const h=new FormData(c,o);l.search=new URLSearchParams(h).toString(),F({type:"form",url:l,keepfocus:u.keepfocus,noscroll:u.noscroll,replace_state:u.replace_state??l.href===location.href,event:r})}),addEventListener("popstate",async r=>{var a;if(!Vt){if((a=r.state)!=null&&a[H]){const o=r.state[H];if(C={},o===k)return;const s=D[o],i=r.state[ve]??{},l=new URL(r.state[rn]??location.href),c=r.state[Q],u=w.url?Pt(location)===Pt(w.url):!1;if(c===L&&(Ue||u)){i!==x.state&&(x.state=i),t(l),D[k]=B(),s&&scrollTo(s.x,s.y),k=o;return}const _=o-k;await F({type:"popstate",url:l,popped:{state:i,scroll:s,delta:_},accept:()=>{k=o,L=c},block:()=>{history.go(-_)},nav_token:C,event:r})}else if(!J){const o=new URL(location.href);t(o),E.hash&&location.reload()}}}),addEventListener("hashchange",()=>{J&&(J=!1,history.replaceState({...history.state,[H]:++k,[Q]:L},"",location.href))});for(const r of document.querySelectorAll("link"))fn.has(r.rel)&&(r.href=r.href);addEventListener("pageshow",r=>{r.persisted&&N.navigating.set(Z.current=null)});function t(r){w.url=x.url=r,N.page.set(te(x)),N.page.notify()}}async function Rn(t,{status:e=200,error:n,node_ids:r,params:a,route:o,server_route:s,data:i,form:l}){Le=!0;const c=new URL(location.href);let u;({params:a={},route:o={id:null}}=await At(c,!1)||{}),u=zt.find(({id:p})=>p===o.id);let h,_=!0;try{const p=r.map(async(m,d)=>{const g=i[d];return g!=null&&g.uses&&(g.uses=xn(g.uses)),Yt({loader:E.nodes[m],url:c,params:a,route:o,parent:async()=>{const b={};for(let R=0;R<d;R+=1)Object.assign(b,(await p[R]).data);return b},server_data_node:Xt(g)})}),f=await Promise.all(p);if(u){const m=u.layouts;for(let d=0;d<m.length;d++)m[d]||f.splice(d,0,void 0)}h=await Rt({url:c,params:a,branch:f,status:e,error:n,errors:u==null?void 0:u.errors,form:l,route:u??null})}catch(p){if(p instanceof Kt){await et(new URL(p.location,location.href));return}h=await Qt({status:Gt(p),error:await rt(p,{url:c,params:a,route:o}),url:c,route:o}),t.textContent="",_=!1}finally{}h.props.page&&(h.props.page.state={}),await Oe(h,t,_)}function xn(t){return{dependencies:new Set((t==null?void 0:t.dependencies)??[]),params:new Set((t==null?void 0:t.params)??[]),parent:!!(t!=null&&t.parent),route:!!(t!=null&&t.route),url:!!(t!=null&&t.url),search_params:new Set((t==null?void 0:t.search_params)??[])}}let Vt=!1;function Ln(t,e=!0){const n=document.querySelector("[autofocus]");if(n)n.focus();else{const r=Ne(t);if(r&&document.getElementById(r)){const{x:o,y:s}=B();setTimeout(()=>{const i=history.state;Vt=!0,location.replace(new URL(`#${r}`,location.href)),history.replaceState(i,"",t),e&&scrollTo(o,s),Vt=!1})}else{const o=document.body,s=o.getAttribute("tabindex");o.tabIndex=-1,o.focus({preventScroll:!0,focusVisible:!1}),s!==null?o.setAttribute("tabindex",s):o.removeAttribute("tabindex")}const a=getSelection();if(a&&a.type!=="None"){const o=[];for(let s=0;s<a.rangeCount;s+=1)o.push(a.getRangeAt(s));setTimeout(()=>{if(a.rangeCount===o.length){for(let s=0;s<a.rangeCount;s+=1){const i=o[s],l=a.getRangeAt(s);if(i.commonAncestorContainer!==l.commonAncestorContainer||i.startContainer!==l.startContainer||i.endContainer!==l.endContainer||i.startOffset!==l.startOffset||i.endOffset!==l.endOffset)return}a.removeAllRanges()}})}}}function Zt(t,e,n,r,a=null){var c,u;let o,s;const i=new Promise((h,_)=>{o=h,s=_});return i.catch(j),{navigation:{from:{params:t.params,route:{id:((c=t.route)==null?void 0:c.id)??null},url:t.url,scroll:B()},to:n&&{params:(e==null?void 0:e.params)??null,route:{id:((u=e==null?void 0:e.route)==null?void 0:u.id)??null},url:n,scroll:a},willUnload:!e,type:r,complete:i},fulfil:o,reject:s}}function te(t){return{data:t.data,error:t.error,form:t.form,params:t.params,route:t.route,state:t.state,status:t.status,url:t.url}}function Un(t){const e=new URL(t);return e.hash=decodeURIComponent(t.hash),e}function Ne(t){let e;if(E.hash){const[,,n]=t.hash.split("#",3);e=n??""}else e=t.hash.slice(1);return decodeURIComponent(e)}export{N as a,U as b,Nn as g,Pn as l,x as p,jn as s};