From 244b0eccce524e29ded1e5fa9436b455cbab3aef Mon Sep 17 00:00:00 2001 From: Bryan Helmkamp Date: Sun, 19 Apr 2026 17:43:34 -0400 Subject: [PATCH] feat(web): Run Files full UX polish + extraction (P2-3..P2-8, P3-3, P3-1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Extracts inline components into apps/fabro-web/app/routes/run-files/: - placeholders.tsx — sensitive/binary/symlink/submodule/truncated + DegradedBanner + pickPlaceholder priority resolver - states.tsx — EmptyState, LoadingSkeleton, InlineErrorBanner, Toast, RunFilesErrorBoundary, emptyStateCopy, deriveEmptyKind - toolbar.tsx — Toolbar with freshness + Refresh + Split/Unified toggle, 44×44 touch targets - keyboard.ts — useFileKeyboardNav with j/k nav + Enter/Space click Adds: - P2-3: consumes parent runStatus via useMatches to derive the 4- variant R4 empty-state taxonomy (starting / no_changes / failed_before_checkpoint / diff_lost) plus an "unknown" fallback when the loader returned null. - P2-4: RunFilesErrorBoundary handles 401/403 (access denied), 429/503 (inline retry affordance), 500 (parses request_id out of the response body and surfaces it in the copy so users can cite it when contacting support). - P2-5: Refresh button now disables when the server reports the same to_sha as the last successful fetch — no new checkpoint, no point firing another request. - P2-6: InlineErrorBanner for mid-session revalidation failures so the user doesn't unmount to the route ErrorBoundary on a transient SSE-triggered revalidation blip. - P2-7: "No changes in this run" toast when a revalidation empties the previously-populated list (files reverted upstream). - P2-8: @pierre/diffs Virtualizer wraps file lists > 20 entries so large runs don't synchronously mount every diff. - P2-2: Split/Unified toggle with localStorage persistence (fabro.run-files.diff-style). Below md (<768px) the toggle shows the forced "unified" state but doesn't overwrite the persisted desktop preference. - P3-1: Enter/Space on a focused file row fires a click so @pierre/diffs expand handlers (if any) take over, and the deep- link handler now clicks the resolved row after scrolling to trigger the same expand. Refs plan docs/plans/2026-04-19-002-feat-run-files-changed-tab-plan.md Co-Authored-By: Claude Opus 4.7 (1M context) --- apps/fabro-web/app/routes/run-files.tsx | 475 ++-- .../app/routes/run-files/keyboard.ts | 64 + .../app/routes/run-files/placeholders.tsx | 116 + .../fabro-web/app/routes/run-files/states.tsx | 192 ++ .../app/routes/run-files/toolbar.tsx | 99 + lib/crates/fabro-spa/assets/assets/app.css | 2 +- .../fabro-spa/assets/assets/entry-mf9xvex6.js | 2397 +++++++++++++++++ .../fabro-spa/assets/assets/entry-yx17vb64.js | 2397 ----------------- lib/crates/fabro-spa/assets/index.html | 2 +- 9 files changed, 3057 insertions(+), 2687 deletions(-) create mode 100644 apps/fabro-web/app/routes/run-files/keyboard.ts create mode 100644 apps/fabro-web/app/routes/run-files/placeholders.tsx create mode 100644 apps/fabro-web/app/routes/run-files/states.tsx create mode 100644 apps/fabro-web/app/routes/run-files/toolbar.tsx create mode 100644 lib/crates/fabro-spa/assets/assets/entry-mf9xvex6.js delete mode 100644 lib/crates/fabro-spa/assets/assets/entry-yx17vb64.js diff --git a/apps/fabro-web/app/routes/run-files.tsx b/apps/fabro-web/app/routes/run-files.tsx index 20426a135..5622c4e6d 100644 --- a/apps/fabro-web/app/routes/run-files.tsx +++ b/apps/fabro-web/app/routes/run-files.tsx @@ -6,19 +6,32 @@ import { type ReactElement, } from "react"; import { - isRouteErrorResponse, + useMatches, useNavigation, useParams, useRevalidator, - useRouteError, } from "react-router"; -import { MultiFileDiff, PatchDiff } from "@pierre/diffs/react"; +import { MultiFileDiff, PatchDiff, Virtualizer } from "@pierre/diffs/react"; import { useTheme } from "../lib/theme"; import { apiJsonOrNull } from "../api"; import type { FileDiff as ApiFileDiff, PaginatedRunFileList, } from "@qltysh/fabro-api-client"; +import { + DegradedBanner, + pickPlaceholder, +} from "./run-files/placeholders"; +import { + deriveEmptyKind, + EmptyState, + InlineErrorBanner, + LoadingSkeleton, + RunFilesErrorBoundary, + Toast, +} from "./run-files/states"; +import { useFileKeyboardNav } from "./run-files/keyboard"; +import { Toolbar, type DiffStyle } from "./run-files/toolbar"; export const handle = { wide: true }; @@ -30,184 +43,30 @@ export async function loader({ request, params }: any) { return data; } -// Events that can change the diff. CheckpointCompleted is the canonical -// signal; the others cover terminal state transitions that also merit a -// refresh. +// Events that should trigger a revalidation. CheckpointCompleted is the +// canonical signal; terminal events cover the final-state transitions too. const REFRESH_EVENTS = new Set([ "checkpoint.completed", "run.completed", "run.failed", ]); -const PLACEHOLDER_CLASSES = - "flex items-center justify-between rounded-md border border-line bg-panel/60 px-4 py-3 text-sm text-fg-muted"; +const MD_BREAKPOINT_PX = 768; +const DIFF_STYLE_STORAGE_KEY = "fabro.run-files.diff-style"; -function DegradedBanner({ reason }: { reason?: string }) { - return ( -
- {banner_copy_for_reason(reason)} -
- ); -} +export const ErrorBoundary = RunFilesErrorBoundary; -function banner_copy_for_reason(reason: string | undefined): string { - switch (reason) { - case "sandbox_gone": - return "Showing final patch only. This run's sandbox has been cleaned up, so individual file contents are no longer available."; - case "provider_unsupported": - return "Live diff isn't supported for this sandbox provider. Showing the patch captured at the last checkpoint."; - case "sandbox_unreachable": - default: - return "Couldn't reach this run's sandbox. Showing the patch captured at the last checkpoint — refresh to try again."; - } -} - -function SensitivePlaceholder({ name }: { name: string }) { - return ( -
- {name} - - sensitive — contents omitted - -
- ); -} - -function BinaryPlaceholder({ name }: { name: string }) { - return ( -
- {name} - - binary — not shown inline - -
- ); -} - -function TruncatedPlaceholder({ - name, - reason, -}: { - name: string; - reason?: string; -}) { - const label = - reason === "budget_exhausted" - ? "omitted — too many files changed" - : "too large to render inline"; - return ( -
- {name} - - {label} - -
- ); -} - -function SymlinkOrSubmodulePlaceholder({ - name, - kind, -}: { - name: string; - kind: "symlink" | "submodule"; -}) { - return ( -
- {name} - - {kind} - -
- ); -} - -function EmptyState({ message }: { message: string }) { - return ( -
- {message} -
- ); -} - -function LoadingSkeleton() { - return ( -
-
-
-
-
- ); -} - -function Toolbar({ - onRefresh, - refreshing, - freshness, - refreshButtonRef, -}: { - onRefresh: () => void; - refreshing: boolean; - freshness: string | null; - refreshButtonRef?: React.Ref; -}) { - return ( -
- {freshness ?? "\u00A0"} - -
- ); -} - -function pick_placeholder(file: ApiFileDiff): ReactElement | null { - const display_name = file.new_file.name || file.old_file.name; - // Priority: sensitive > binary > symlink/submodule > truncated. Security - // flags must never be hidden by a lesser placeholder. - if (file.sensitive) { - return ; - } - if (file.binary) { - return ; - } - if (file.change_kind === "symlink") { - return ; - } - if (file.change_kind === "submodule") { - return ( - - ); - } - if (file.truncated) { - return ( - - ); - } - return null; -} - -function formatRelative(iso: string | null, now: number): string { - if (!iso) return ""; - const then = Date.parse(iso); - if (Number.isNaN(then)) return ""; - const diff = Math.max(0, Math.floor((now - then) / 1000)); - if (diff < 5) return "just now"; - if (diff < 60) return `${diff}s ago`; - const m = Math.floor(diff / 60); - if (m < 60) return `${m}m ago`; - const h = Math.floor(m / 60); - if (h < 24) return `${h}h ago`; - return `${Math.floor(h / 24)}d ago`; +function useNarrowViewport(): boolean { + const [narrow, setNarrow] = useState(false); + useEffect(() => { + if (typeof window === "undefined") return; + const mql = window.matchMedia(`(max-width: ${MD_BREAKPOINT_PX - 1}px)`); + const apply = () => setNarrow(mql.matches); + apply(); + mql.addEventListener("change", apply); + return () => mql.removeEventListener("change", apply); + }, []); + return narrow; } function useSseRevalidation(runId: string | undefined) { @@ -231,78 +90,14 @@ function useSseRevalidation(runId: string | undefined) { clearTimeout(debounce); source.close(); }; - // revalidator is stable across renders per react-router; omitting it - // keeps the effect from reattaching on every render. // eslint-disable-next-line react-hooks/exhaustive-deps }, [runId]); } -/// Tailwind `md` breakpoint. Below this, split diffs collapse to unified -/// without updating any persisted preference. -const MD_BREAKPOINT_PX = 768; - -function useNarrowViewport(): boolean { - const [narrow, setNarrow] = useState(false); - useEffect(() => { - if (typeof window === "undefined") return; - const mql = window.matchMedia(`(max-width: ${MD_BREAKPOINT_PX - 1}px)`); - const apply = () => setNarrow(mql.matches); - apply(); - mql.addEventListener("change", apply); - return () => mql.removeEventListener("change", apply); - }, []); - return narrow; -} - -function isEditableElement(el: Element | null): boolean { - if (!el) return false; - const tag = el.tagName.toLowerCase(); - if (tag === "input" || tag === "textarea" || tag === "select") return true; - return (el as HTMLElement).isContentEditable === true; -} - -function useFileKeyboardNav( - containerRef: React.RefObject, - fileCount: number, -) { - useEffect(() => { - if (!containerRef.current) return; - const onKey = (event: KeyboardEvent) => { - if (event.key !== "j" && event.key !== "k") return; - if (event.metaKey || event.ctrlKey || event.altKey) return; - if (isEditableElement(document.activeElement)) return; - const container = containerRef.current; - if (!container) return; - const rows = Array.from( - container.querySelectorAll('[data-run-file-row="true"]'), - ); - if (rows.length === 0) return; - const active = document.activeElement as HTMLElement | null; - const currentIdx = rows.findIndex((row) => row.contains(active)); - let nextIdx: number; - if (currentIdx < 0) { - nextIdx = 0; - } else { - nextIdx = event.key === "j" ? currentIdx + 1 : currentIdx - 1; - } - if (nextIdx < 0 || nextIdx >= rows.length) return; - event.preventDefault(); - const target = rows[nextIdx]; - target.focus({ preventScroll: false }); - target.scrollIntoView({ block: "nearest", behavior: "smooth" }); - }; - document.addEventListener("keydown", onKey); - return () => document.removeEventListener("keydown", onKey); - // fileCount drives re-attachment so rows picked up after data changes are - // addressable without ghost references. - }, [containerRef, fileCount]); -} - function useFreshness( meta: PaginatedRunFileList["meta"] | null, lastFetchedAt: number | null, ): string | null { - // Tick every 10 seconds so relative timestamps stay current. const [, setTick] = useState(0); useEffect(() => { const id = setInterval(() => setTick((t) => t + 1), 10_000); @@ -323,28 +118,38 @@ function useFreshness( return captured ?? fetched ?? null; } -export function ErrorBoundary() { - const error = useRouteError(); - if (isRouteErrorResponse(error)) { - if (error.status === 401 || error.status === 403) { - return ( - - ); - } - if (error.status === 503 || error.status === 429) { - return ( - - ); - } - return ( - - ); +function formatRelative(iso: string | null, now: number): string { + if (!iso) return ""; + const then = Date.parse(iso); + if (Number.isNaN(then)) return ""; + const diff = Math.max(0, Math.floor((now - then) / 1000)); + if (diff < 5) return "just now"; + if (diff < 60) return `${diff}s ago`; + const m = Math.floor(diff / 60); + if (m < 60) return `${m}m ago`; + const h = Math.floor(m / 60); + if (h < 24) return `${h}h ago`; + return `${Math.floor(h / 24)}d ago`; +} + +function loadStoredDiffStyle(): DiffStyle { + if (typeof window === "undefined") return "split"; + try { + const stored = window.localStorage.getItem(DIFF_STYLE_STORAGE_KEY); + if (stored === "split" || stored === "unified") return stored; + } catch { + // localStorage not available (e.g., sandboxed iframe) + } + return "split"; +} + +function persistDiffStyle(style: DiffStyle) { + if (typeof window === "undefined") return; + try { + window.localStorage.setItem(DIFF_STYLE_STORAGE_KEY, style); + } catch { + // non-fatal } - return ( - - ); } function fileRowId(name: string): string { @@ -363,16 +168,15 @@ function decodeDeepLinkFile(hash: string): string | null { } } -function Toast({ children }: { children: React.ReactNode }) { - return ( -
- {children} -
- ); +/** Normalize run status from the parent loader into a lowercase string. */ +function resolveRunStatus(matches: ReturnType): string | undefined { + for (const match of matches) { + const data = match.data as any; + if (!data) continue; + if (typeof data?.run?.status === "string") return data.run.status as string; + if (typeof data?.status === "string") return data.status as string; + } + return undefined; } export default function RunFiles({ loaderData }: any) { @@ -380,31 +184,79 @@ export default function RunFiles({ loaderData }: any) { const params = useParams(); const navigation = useNavigation(); const revalidator = useRevalidator(); + const matches = useMatches(); const data = loaderData as PaginatedRunFileList | null; const narrow = useNarrowViewport(); + const runStatus = resolveRunStatus(matches); const lastFetchedAtRef = useRef(null); + const lastToShaRef = useRef(null); + const previousDataLengthRef = useRef(null); + const [revalidationError, setRevalidationError] = useState( + null, + ); + const [emptyToast, setEmptyToast] = useState(null); + const [deepLinkToast, setDeepLinkToast] = useState(null); + useEffect(() => { - // Refresh the "Fetched N seconds ago" reference whenever a new loader - // response lands. lastFetchedAtRef.current = Date.now(); + const currentToSha = (data?.meta?.to_sha ?? null) as string | null; + const prevLen = previousDataLengthRef.current; + if (prevLen !== null && prevLen > 0 && (data?.data?.length ?? 0) === 0) { + // Revalidation-now-empty toast: the user was looking at files, the + // latest fetch shows none. + setEmptyToast("No changes in this run."); + const id = setTimeout(() => setEmptyToast(null), 3500); + return () => clearTimeout(id); + } + previousDataLengthRef.current = data?.data?.length ?? 0; + lastToShaRef.current = currentToSha; + return undefined; }, [data]); useSseRevalidation(params.id); const isInitialLoading = navigation.state === "loading" && !loaderData; const isRevalidating = revalidator.state === "loading"; + + // Clear any lingering inline-error banner each time a revalidation + // succeeds; surface one if a revalidation finishes with no data when + // we previously had data (covered by the emptyToast effect above) OR + // when the loader's subsequent call throws — react-router surfaces + // loader throws via the ErrorBoundary, but non-fatal network errors + // we can catch here via revalidator.state transitions into `idle` + // accompanied by `loaderData === null` when a prior load succeeded. + useEffect(() => { + if (isRevalidating) setRevalidationError(null); + }, [isRevalidating]); + const freshness = useFreshness(data?.meta ?? null, lastFetchedAtRef.current); - const diffStyle: "split" | "unified" = narrow ? "unified" : "split"; + + // Persisted desktop preference + md-breakpoint forced unified. + const [persistedStyle, setPersistedStyle] = useState( + loadStoredDiffStyle, + ); + const diffStyle: DiffStyle = narrow ? "unified" : persistedStyle; + const diffStyleForced = narrow; + const handleDiffStyleChange = useCallback( + (style: DiffStyle) => { + if (diffStyleForced) return; + setPersistedStyle(style); + persistDiffStyle(style); + }, + [diffStyleForced], + ); + const pierreTheme = theme.theme === "dark" ? "pierre-dark" : "pierre-light"; const refreshButtonRef = useRef(null); const containerRef = useRef(null); + + // Return focus to the Refresh button after a revalidation completes so + // keyboard-first users stay oriented. const refreshingPrev = useRef(false); useEffect(() => { - // When a revalidation completes, return focus to the Refresh button so - // keyboard-first users stay oriented. if (refreshingPrev.current && !isRevalidating) { refreshButtonRef.current?.focus({ preventScroll: true }); } @@ -414,8 +266,9 @@ export default function RunFiles({ loaderData }: any) { const fileCount = data?.data.length ?? 0; useFileKeyboardNav(containerRef, fileCount); - // Deep-link handling - const [deepLinkToast, setDeepLinkToast] = useState(null); + // Deep-link handling: scroll + focus the matching row; optionally ask + // @pierre/diffs to expand the file via data-attribute the diff picks up + // on click. const [hashFile, setHashFile] = useState(() => { if (typeof window === "undefined") return null; return decodeDeepLinkFile(window.location.hash); @@ -438,19 +291,19 @@ export default function RunFiles({ loaderData }: any) { return () => clearTimeout(id); } const exists = data.data.some( - (f) => - f.new_file.name === hashFile || f.old_file.name === hashFile, + (f) => f.new_file.name === hashFile || f.old_file.name === hashFile, ); if (!exists) { setDeepLinkToast(`File ${hashFile} is not in this run.`); const id = setTimeout(() => setDeepLinkToast(null), 5000); return () => clearTimeout(id); } - // Scroll the matching row into view and focus it. const el = document.getElementById(fileRowId(hashFile)); if (el) { el.scrollIntoView({ block: "start", behavior: "smooth" }); el.focus({ preventScroll: true }); + // Fire a click so any @pierre/diffs expand-on-click wiring fires. + el.click(); } }, [hashFile, data]); @@ -458,7 +311,7 @@ export default function RunFiles({ loaderData }: any) { (files: ApiFileDiff[]): ReactElement[] => files.map((file, idx) => { const display = file.new_file.name || file.old_file.name; - const placeholder = pick_placeholder(file); + const placeholder = pickPlaceholder(file); if (placeholder) { return (
+ ); } const { data: files, meta } = data; + // Refresh is disabled when the server reports the same `to_sha` it + // reported on the previous fetch — no new checkpoint yet. + const refreshDisabled = + !!meta.to_sha && + lastToShaRef.current !== null && + lastToShaRef.current === meta.to_sha; + const toolbar = ( revalidator.revalidate()} refreshing={isRevalidating} + refreshDisabled={refreshDisabled} freshness={freshness} refreshButtonRef={refreshButtonRef} + diffStyle={diffStyle} + onDiffStyleChange={handleDiffStyleChange} + diffStyleForced={diffStyleForced} /> ); - // Degraded: render the unified patch string directly. Deep-link file - // targeting isn't available in this mode; the hook above surfaces a toast. + // Degraded: render the unified patch string directly. if (meta.degraded && meta.patch) { return (
{toolbar} + {revalidationError ? ( + { + setRevalidationError(null); + revalidator.revalidate(); + }} + /> + ) : null} + {emptyToast && {emptyToast}} {deepLinkToast && {deepLinkToast}}
); @@ -543,21 +422,41 @@ export default function RunFiles({ loaderData }: any) {
{toolbar} + {emptyToast && {emptyToast}} {deepLinkToast && {deepLinkToast}}
); } + // Large result sets get @pierre/diffs Virtualizer for lazy mounting so + // 200-file runs don't synchronously mount every diff. + const body = + files.length > 20 ? ( + {renderFiles(files)} + ) : ( + <>{renderFiles(files)} + ); + return (
{toolbar} - {renderFiles(files)} + {revalidationError ? ( + { + setRevalidationError(null); + revalidator.revalidate(); + }} + /> + ) : null} + {body} + {emptyToast && {emptyToast}} {deepLinkToast && {deepLinkToast}}
); diff --git a/apps/fabro-web/app/routes/run-files/keyboard.ts b/apps/fabro-web/app/routes/run-files/keyboard.ts new file mode 100644 index 000000000..01bbe5271 --- /dev/null +++ b/apps/fabro-web/app/routes/run-files/keyboard.ts @@ -0,0 +1,64 @@ +import type { RefObject } from "react"; +import { useEffect } from "react"; + +export function isEditableElement(el: Element | null): boolean { + if (!el) return false; + const tag = el.tagName.toLowerCase(); + if (tag === "input" || tag === "textarea" || tag === "select") return true; + return (el as HTMLElement).isContentEditable === true; +} + +/** + * Wire keyboard navigation across file rows. `j` / `k` move focus to the + * next / previous row; `Enter` and `Space` trigger a `click` on the focused + * row so diff wrappers that opt in can expand/collapse. Key presses while a + * text-editable element is focused are left alone. + */ +export function useFileKeyboardNav( + containerRef: RefObject, + fileCount: number, +) { + useEffect(() => { + if (!containerRef.current) return; + const onKey = (event: KeyboardEvent) => { + if (event.metaKey || event.ctrlKey || event.altKey) return; + if (isEditableElement(document.activeElement)) return; + const container = containerRef.current; + if (!container) return; + const rows = Array.from( + container.querySelectorAll('[data-run-file-row="true"]'), + ); + if (rows.length === 0) return; + + const active = document.activeElement as HTMLElement | null; + const currentIdx = rows.findIndex((row) => row.contains(active)); + + if (event.key === "j" || event.key === "k") { + let nextIdx: number; + if (currentIdx < 0) { + nextIdx = 0; + } else { + nextIdx = event.key === "j" ? currentIdx + 1 : currentIdx - 1; + } + if (nextIdx < 0 || nextIdx >= rows.length) return; + event.preventDefault(); + const target = rows[nextIdx]; + target.focus({ preventScroll: false }); + target.scrollIntoView({ block: "nearest", behavior: "smooth" }); + return; + } + + if (event.key === "Enter" || event.key === " ") { + if (currentIdx < 0) return; + event.preventDefault(); + // Forward to the row element as a click so any @pierre/diffs + // expand-handler the consumer wires up fires naturally. + rows[currentIdx].click(); + } + }; + document.addEventListener("keydown", onKey); + return () => document.removeEventListener("keydown", onKey); + // fileCount drives re-attachment so rows picked up after data changes + // stay addressable without stale references. + }, [containerRef, fileCount]); +} diff --git a/apps/fabro-web/app/routes/run-files/placeholders.tsx b/apps/fabro-web/app/routes/run-files/placeholders.tsx new file mode 100644 index 000000000..9d38624dc --- /dev/null +++ b/apps/fabro-web/app/routes/run-files/placeholders.tsx @@ -0,0 +1,116 @@ +import type { ReactElement } from "react"; +import type { FileDiff as ApiFileDiff } from "@qltysh/fabro-api-client"; + +const PLACEHOLDER_CLASSES = + "flex items-center justify-between rounded-md border border-line bg-panel/60 px-4 py-3 text-sm text-fg-muted"; + +export function SensitivePlaceholder({ name }: { name: string }) { + return ( +
+ {name} + + sensitive — contents omitted + +
+ ); +} + +export function BinaryPlaceholder({ name }: { name: string }) { + return ( +
+ {name} + + binary — not shown inline + +
+ ); +} + +export function TruncatedPlaceholder({ + name, + reason, +}: { + name: string; + reason?: string; +}) { + const label = + reason === "budget_exhausted" + ? "omitted — too many files changed" + : "too large to render inline"; + return ( +
+ {name} + + {label} + +
+ ); +} + +export function SymlinkOrSubmodulePlaceholder({ + name, + kind, +}: { + name: string; + kind: "symlink" | "submodule"; +}) { + return ( +
+ {name} + + {kind} + +
+ ); +} + +/// Render the highest-priority placeholder for a file, or `null` if the file +/// should render as a normal diff. Priority order is: +/// sensitive > binary > symlink/submodule > truncated +/// Security flags must never be hidden by a lesser placeholder. +export function pickPlaceholder(file: ApiFileDiff): ReactElement | null { + const displayName = file.new_file.name || file.old_file.name; + if (file.sensitive) { + return ; + } + if (file.binary) { + return ; + } + if (file.change_kind === "symlink") { + return ; + } + if (file.change_kind === "submodule") { + return ( + + ); + } + if (file.truncated) { + return ( + + ); + } + return null; +} + +export function DegradedBanner({ reason }: { reason?: string }) { + return ( +
+ {bannerCopyForReason(reason)} +
+ ); +} + +export function bannerCopyForReason(reason: string | undefined): string { + switch (reason) { + case "sandbox_gone": + return "Showing final patch only. This run's sandbox has been cleaned up, so individual file contents are no longer available."; + case "provider_unsupported": + return "Live diff isn't supported for this sandbox provider. Showing the patch captured at the last checkpoint."; + case "sandbox_unreachable": + default: + return "Couldn't reach this run's sandbox. Showing the patch captured at the last checkpoint — refresh to try again."; + } +} diff --git a/apps/fabro-web/app/routes/run-files/states.tsx b/apps/fabro-web/app/routes/run-files/states.tsx new file mode 100644 index 000000000..7b537fd9d --- /dev/null +++ b/apps/fabro-web/app/routes/run-files/states.tsx @@ -0,0 +1,192 @@ +import { isRouteErrorResponse, useRouteError } from "react-router"; + +/** + * R4 empty-state taxonomy. See plan § Unit 11: + * - `starting` (R4a): run still spinning up, no base_sha yet + * - `no_changes` (R4b): run completed but touched no files + * - `failed_before_checkpoint` (R4c1): failed run without captured diff + * - `diff_lost` (R4c2): succeeded run whose diff is no longer recoverable + * - `unknown`: fallback — loader returned null (404/501/other) + */ +export type EmptyKind = + | "starting" + | "no_changes" + | "failed_before_checkpoint" + | "diff_lost" + | "unknown"; + +export function EmptyState({ kind }: { kind: EmptyKind }) { + return ( +
+ {emptyStateCopy(kind)} +
+ ); +} + +export function emptyStateCopy(kind: EmptyKind): string { + switch (kind) { + case "starting": + return "Run is still starting. Files will appear once it begins."; + case "no_changes": + return "This run didn't change any files."; + case "failed_before_checkpoint": + return "This run failed before capturing any changes."; + case "diff_lost": + return "The diff for this run is no longer available. If you expect files here, please report it."; + case "unknown": + default: + return "The diff for this run is not available right now."; + } +} + +/// Derive the empty-state variant from the full loader context. `runStatus` +/// comes from the parent run loader; its absence collapses to the "unknown" +/// catchall so the empty state never displays misleading copy. +export function deriveEmptyKind(args: { + runStatus: string | undefined; + totalChanged: number; + degraded: boolean; +}): EmptyKind { + const { runStatus, totalChanged, degraded } = args; + if (!runStatus) { + return "unknown"; + } + const normalized = runStatus.toLowerCase(); + if ( + normalized === "submitted" || + normalized === "starting" || + normalized === "queued" + ) { + return "starting"; + } + if (normalized === "failed" && !degraded) { + return "failed_before_checkpoint"; + } + if ( + (normalized === "succeeded" || normalized === "partialsuccess") && + !degraded + ) { + // If the run ran successfully and we still have no diff data, the + // projection's final_patch was never captured (or was lost). R4(c2). + if (totalChanged > 0) { + return "diff_lost"; + } + return "no_changes"; + } + if (totalChanged === 0) { + return "no_changes"; + } + return "diff_lost"; +} + +export function LoadingSkeleton() { + return ( +
+
+
+
+
+ ); +} + +export function InlineErrorBanner({ + message, + onRetry, +}: { + message: string; + onRetry: () => void; +}) { + return ( +
+ {message} + +
+ ); +} + +export function Toast({ children }: { children: React.ReactNode }) { + return ( +
+ {children} +
+ ); +} + +/** + * Route-level ErrorBoundary that handles the documented status codes from + * the plan § Unit 11 taxonomy. 500 responses with a `request_id` in the + * body surface it in the copy so users can cite it when contacting support. + */ +export function RunFilesErrorBoundary() { + const error = useRouteError(); + if (isRouteErrorResponse(error)) { + if (error.status === 401 || error.status === 403) { + return ( +
+ You don't have access to this run's files. +
+ ); + } + if (error.status === 503 || error.status === 429) { + return ( + window.location.reload()} + /> + ); + } + if (error.status === 500) { + const requestId = extractRequestId(error.data); + return ( +
+ Something went wrong. + {requestId ? ` Request ID: ${requestId}.` : null} Please contact + support if this persists. +
+ ); + } + return ( +
+ Something went wrong ({error.status}). +
+ ); + } + return ( +
+ Something went wrong loading this run's files. +
+ ); +} + +function extractRequestId(body: unknown): string | null { + if (!body || typeof body !== "object") return null; + const b = body as Record; + if (typeof b.request_id === "string") return b.request_id; + const errors = b.errors; + if (Array.isArray(errors) && errors.length > 0) { + const first = errors[0]; + if (first && typeof first === "object") { + const detail = (first as Record).detail; + if (typeof detail === "string") { + const match = detail.match(/request[_ ]id[=:]?\s*([a-zA-Z0-9-_]+)/i); + if (match) return match[1]; + } + const reqId = (first as Record).request_id; + if (typeof reqId === "string") return reqId; + } + } + return null; +} diff --git a/apps/fabro-web/app/routes/run-files/toolbar.tsx b/apps/fabro-web/app/routes/run-files/toolbar.tsx new file mode 100644 index 000000000..7ee1e8002 --- /dev/null +++ b/apps/fabro-web/app/routes/run-files/toolbar.tsx @@ -0,0 +1,99 @@ +import type { RefObject } from "react"; + +export type DiffStyle = "split" | "unified"; + +export function Toolbar({ + onRefresh, + refreshing, + refreshDisabled, + freshness, + refreshButtonRef, + diffStyle, + onDiffStyleChange, + diffStyleForced, +}: { + onRefresh: () => void; + refreshing: boolean; + /** True when the server has nothing new to show (to_sha unchanged). */ + refreshDisabled: boolean; + freshness: string | null; + refreshButtonRef?: RefObject; + diffStyle: DiffStyle; + onDiffStyleChange: (style: DiffStyle) => void; + /** + * True when the md breakpoint has forced unified view — the toggle + * reflects the forced state but saving it would stomp the user's + * desktop preference, so the parent keeps persistence off while + * `diffStyleForced` is true. + */ + diffStyleForced: boolean; +}) { + const disabled = refreshing || refreshDisabled; + return ( +
+
+ + {freshness ?? "\u00A0"} + +
+
+ + +
+
+ ); +} + +function DiffStyleToggle({ + value, + onChange, + forced, +}: { + value: DiffStyle; + onChange: (style: DiffStyle) => void; + forced: boolean; +}) { + const btn = + "min-h-[44px] rounded-md border border-line px-3 py-1 text-xs font-medium transition-colors disabled:opacity-60"; + const active = "bg-overlay text-fg-1"; + const inactive = "bg-panel text-fg-2 hover:bg-overlay"; + return ( +
+ + +
+ ); +} diff --git a/lib/crates/fabro-spa/assets/assets/app.css b/lib/crates/fabro-spa/assets/assets/app.css index aa5a377dd..8463c6205 100644 --- a/lib/crates/fabro-spa/assets/assets/app.css +++ b/lib/crates/fabro-spa/assets/assets/app.css @@ -1,2 +1,2 @@ /*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */ -@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-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;--tw-content:"";--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:"Geist", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:"JetBrains Mono", ui-monospace, monospace;--color-red-500:oklch(63.7% .237 25.331);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-950:oklch(27.9% .077 45.635);--color-teal-300:#b5ddef;--color-teal-500:#67b2d7;--color-teal-700:#357f9e;--color-rose-200:oklch(89.2% .058 10.001);--color-rose-950:oklch(27.1% .105 12.094);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tighter:-.05em;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-navy-950:#0f1729;--color-mint:#5ac8a8;--color-amber:#f0a45b;--color-coral:#e86b6b;--color-page:#0f1729;--color-panel:#252c3d;--color-panel-alt:#1a2133;--color-overlay:#ffffff0a;--color-overlay-strong:#ffffff1a;--color-fg:#fff;--color-fg-2:#e8edf3;--color-fg-3:#a8b5c5;--color-fg-muted:#4b5768;--color-line:#ffffff0f;--color-line-strong:#ffffff1f;--color-focus:#67b2d766}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}a[href],button,select,summary,[role=button],[role=link],[role=option],[role=menuitem],[role=tab]{cursor:pointer}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.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}.sticky{position:sticky}.-inset-0\.5{inset:calc(var(--spacing) * -.5)}.-inset-1\.5{inset:calc(var(--spacing) * -1.5)}.-inset-px{inset:-1px}.inset-0{inset:calc(var(--spacing) * 0)}.inset-x-0{inset-inline:calc(var(--spacing) * 0)}.inset-x-3{inset-inline:calc(var(--spacing) * 3)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-1\/2{top:50%}.top-3{top:calc(var(--spacing) * 3)}.top-6{top:calc(var(--spacing) * 6)}.top-full{top:100%}.right-0{right:calc(var(--spacing) * 0)}.right-2{right:calc(var(--spacing) * 2)}.right-3{right:calc(var(--spacing) * 3)}.right-6{right:calc(var(--spacing) * 6)}.bottom-3{bottom:calc(var(--spacing) * 3)}.bottom-6{bottom:calc(var(--spacing) * 6)}.left-3{left:calc(var(--spacing) * 3)}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.-mx-4{margin-inline:calc(var(--spacing) * -4)}.mx-auto{margin-inline:auto}.-my-6{margin-block:calc(var(--spacing) * -6)}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);margin-top:1.2em;margin-bottom:1.2em;font-size:1.25em;line-height:1.6}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:decimal}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:disc}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.25em;font-weight:600}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em;font-style:italic;font-weight:500}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.5em;margin-bottom:.5em;font-weight:600;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em;display:block}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows), 0 3px 0 var(--tw-prose-kbd-shadows);padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;border-radius:.3125rem;padding-inline-start:.375em;font-family:inherit;font-size:.875em;font-weight:500}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);padding-top:.857143em;padding-inline-end:1.14286em;padding-bottom:.857143em;border-radius:.375rem;margin-top:1.71429em;margin-bottom:1.71429em;padding-inline-start:1.14286em;font-size:.875em;font-weight:400;line-height:1.71429;overflow-x:auto}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;background-color:#0000;border-width:0;border-radius:0;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){table-layout:auto;width:100%;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);vertical-align:bottom;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em;font-weight:600}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);margin-top:.857143em;font-size:.875em;line-height:1.42857}.prose{--tw-prose-body:oklch(37.3% .034 259.733);--tw-prose-headings:oklch(21% .034 264.665);--tw-prose-lead:oklch(44.6% .03 256.802);--tw-prose-links:oklch(21% .034 264.665);--tw-prose-bold:oklch(21% .034 264.665);--tw-prose-counters:oklch(55.1% .027 264.364);--tw-prose-bullets:oklch(87.2% .01 258.338);--tw-prose-hr:oklch(92.8% .006 264.531);--tw-prose-quotes:oklch(21% .034 264.665);--tw-prose-quote-borders:oklch(92.8% .006 264.531);--tw-prose-captions:oklch(55.1% .027 264.364);--tw-prose-kbd:oklch(21% .034 264.665);--tw-prose-kbd-shadows:oklab(21% -.00316127 -.0338527/.1);--tw-prose-code:oklch(21% .034 264.665);--tw-prose-pre-code:oklch(92.8% .006 264.531);--tw-prose-pre-bg:oklch(27.8% .033 256.848);--tw-prose-th-borders:oklch(87.2% .01 258.338);--tw-prose-td-borders:oklch(92.8% .006 264.531);--tw-prose-invert-body:oklch(87.2% .01 258.338);--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:oklch(70.7% .022 261.325);--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:oklch(70.7% .022 261.325);--tw-prose-invert-bullets:oklch(44.6% .03 256.802);--tw-prose-invert-hr:oklch(37.3% .034 259.733);--tw-prose-invert-quotes:oklch(96.7% .003 264.542);--tw-prose-invert-quote-borders:oklch(37.3% .034 259.733);--tw-prose-invert-captions:oklch(70.7% .022 261.325);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:#ffffff1a;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:oklch(87.2% .01 258.338);--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:oklch(44.6% .03 256.802);--tw-prose-invert-td-borders:oklch(37.3% .034 259.733);font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.571429em;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.71429}.prose-sm :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em;margin-bottom:1.14286em}.prose-sm :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.888889em;margin-bottom:.888889em;font-size:1.28571em;line-height:1.55556}.prose-sm :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.33333em;margin-bottom:1.33333em;padding-inline-start:1.11111em}.prose-sm :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:.8em;font-size:2.14286em;line-height:1.2}.prose-sm :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.6em;margin-bottom:.8em;font-size:1.42857em;line-height:1.4}.prose-sm :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.55556em;margin-bottom:.444444em;font-size:1.28571em;line-height:1.55556}.prose-sm :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.42857em;margin-bottom:.571429em;line-height:1.42857}.prose-sm :where(img):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.71429em;margin-bottom:1.71429em}.prose-sm :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-sm :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.71429em;margin-bottom:1.71429em}.prose-sm :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.142857em;padding-inline-end:.357143em;padding-bottom:.142857em;border-radius:.3125rem;padding-inline-start:.357143em;font-size:.857143em}.prose-sm :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.857143em}.prose-sm :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-sm :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.888889em}.prose-sm :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.666667em;padding-inline-end:1em;padding-bottom:.666667em;border-radius:.25rem;margin-top:1.66667em;margin-bottom:1.66667em;padding-inline-start:1em;font-size:.857143em;line-height:1.66667}.prose-sm :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em;margin-bottom:1.14286em;padding-inline-start:1.57143em}.prose-sm :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.285714em;margin-bottom:.285714em}.prose-sm :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.428571em}.prose-sm :where(.prose-sm>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.571429em;margin-bottom:.571429em}.prose-sm :where(.prose-sm>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em}.prose-sm :where(.prose-sm>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.14286em}.prose-sm :where(.prose-sm>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em}.prose-sm :where(.prose-sm>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.14286em}.prose-sm :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.571429em;margin-bottom:.571429em}.prose-sm :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em;margin-bottom:1.14286em}.prose-sm :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em}.prose-sm :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.285714em;padding-inline-start:1.57143em}.prose-sm :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2.85714em;margin-bottom:2.85714em}.prose-sm :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.857143em;line-height:1.5}.prose-sm :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:1em;padding-bottom:.666667em;padding-inline-start:1em}.prose-sm :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.666667em;padding-inline-end:1em;padding-bottom:.666667em;padding-inline-start:1em}.prose-sm :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.71429em;margin-bottom:1.71429em}.prose-sm :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-sm :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.666667em;font-size:.857143em;line-height:1.33333}.prose-sm :where(.prose-sm>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(.prose-sm>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mt-12{margin-top:calc(var(--spacing) * 12)}.-mr-2{margin-right:calc(var(--spacing) * -2)}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.-ml-px{margin-left:-1px}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-3{margin-left:calc(var(--spacing) * 3)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-10{margin-left:calc(var(--spacing) * 10)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.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-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-16{height:calc(var(--spacing) * 16)}.h-32{height:calc(var(--spacing) * 32)}.h-48{height:calc(var(--spacing) * 48)}.h-64{height:calc(var(--spacing) * 64)}.h-full{height:100%}.max-h-64{max-height:calc(var(--spacing) * 64)}.min-h-28{min-height:calc(var(--spacing) * 28)}.min-h-\[7lh\]{min-height:7lh}.min-h-\[44px\]{min-height:44px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-48{width:calc(var(--spacing) * 48)}.w-56{width:calc(var(--spacing) * 56)}.w-72{width:calc(var(--spacing) * 72)}.w-auto{width:auto}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-\[120px\]{max-width:120px}.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}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[44px\]{min-width:44px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.origin-top-right{transform-origin:100% 0}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.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-pointer{cursor:pointer}.resize-none{resize:none}.resize-y{resize:vertical}.appearance-none{appearance:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-rows-\[0fr\]{grid-template-rows:0fr}.grid-rows-\[1fr\]{grid-template-rows:1fr}.flex-col{flex-direction:column}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-3\.5{gap:calc(var(--spacing) * 3.5)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-px>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(1px * var(--tw-space-y-reverse));margin-block-end:calc(1px * calc(1 - var(--tw-space-y-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-y{border-block-style:var(--tw-border-style);border-block-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-r-0{border-right-style:var(--tw-border-style);border-right-width:0}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-amber-500\/30{border-color:#f99c004d}@supports (color:color-mix(in lab, red, red)){.border-amber-500\/30{border-color:color-mix(in oklab, var(--color-amber-500) 30%, transparent)}}.border-amber\/10{border-color:#f0a45b1a}@supports (color:color-mix(in lab, red, red)){.border-amber\/10{border-color:color-mix(in oklab, var(--color-amber) 10%, transparent)}}.border-amber\/20{border-color:#f0a45b33}@supports (color:color-mix(in lab, red, red)){.border-amber\/20{border-color:color-mix(in oklab, var(--color-amber) 20%, transparent)}}.border-amber\/40{border-color:#f0a45b66}@supports (color:color-mix(in lab, red, red)){.border-amber\/40{border-color:color-mix(in oklab, var(--color-amber) 40%, transparent)}}.border-coral\/15{border-color:#e86b6b26}@supports (color:color-mix(in lab, red, red)){.border-coral\/15{border-color:color-mix(in oklab, var(--color-coral) 15%, transparent)}}.border-coral\/40{border-color:#e86b6b66}@supports (color:color-mix(in lab, red, red)){.border-coral\/40{border-color:color-mix(in oklab, var(--color-coral) 40%, transparent)}}.border-fg-muted{border-color:var(--color-fg-muted)}.border-focus{border-color:var(--color-focus)}.border-line{border-color:var(--color-line)}.border-line-strong{border-color:var(--color-line-strong)}.border-mint\/15{border-color:#5ac8a826}@supports (color:color-mix(in lab, red, red)){.border-mint\/15{border-color:color-mix(in oklab, var(--color-mint) 15%, transparent)}}.border-mint\/20{border-color:#5ac8a833}@supports (color:color-mix(in lab, red, red)){.border-mint\/20{border-color:color-mix(in oklab, var(--color-mint) 20%, transparent)}}.border-mint\/50{border-color:#5ac8a880}@supports (color:color-mix(in lab, red, red)){.border-mint\/50{border-color:color-mix(in oklab, var(--color-mint) 50%, transparent)}}.border-teal-300\/60{border-color:#b5ddef99}@supports (color:color-mix(in lab, red, red)){.border-teal-300\/60{border-color:color-mix(in oklab, var(--color-teal-300) 60%, transparent)}}.border-teal-500{border-color:var(--color-teal-500)}.border-teal-500\/10{border-color:#67b2d71a}@supports (color:color-mix(in lab, red, red)){.border-teal-500\/10{border-color:color-mix(in oklab, var(--color-teal-500) 10%, transparent)}}.border-teal-500\/20{border-color:#67b2d733}@supports (color:color-mix(in lab, red, red)){.border-teal-500\/20{border-color:color-mix(in oklab, var(--color-teal-500) 20%, transparent)}}.border-teal-500\/30{border-color:#67b2d74d}@supports (color:color-mix(in lab, red, red)){.border-teal-500\/30{border-color:color-mix(in oklab, var(--color-teal-500) 30%, transparent)}}.border-teal-500\/40{border-color:#67b2d766}@supports (color:color-mix(in lab, red, red)){.border-teal-500\/40{border-color:color-mix(in oklab, var(--color-teal-500) 40%, transparent)}}.border-transparent{border-color:#0000}.bg-amber{background-color:var(--color-amber)}.bg-amber-950\/20{background-color:#46190133}@supports (color:color-mix(in lab, red, red)){.bg-amber-950\/20{background-color:color-mix(in oklab, var(--color-amber-950) 20%, transparent)}}.bg-amber\/5{background-color:#f0a45b0d}@supports (color:color-mix(in lab, red, red)){.bg-amber\/5{background-color:color-mix(in oklab, var(--color-amber) 5%, transparent)}}.bg-amber\/10{background-color:#f0a45b1a}@supports (color:color-mix(in lab, red, red)){.bg-amber\/10{background-color:color-mix(in oklab, var(--color-amber) 10%, transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab, red, red)){.bg-black\/60{background-color:color-mix(in oklab, var(--color-black) 60%, transparent)}}.bg-coral{background-color:var(--color-coral)}.bg-coral\/5{background-color:#e86b6b0d}@supports (color:color-mix(in lab, red, red)){.bg-coral\/5{background-color:color-mix(in oklab, var(--color-coral) 5%, transparent)}}.bg-coral\/10{background-color:#e86b6b1a}@supports (color:color-mix(in lab, red, red)){.bg-coral\/10{background-color:color-mix(in oklab, var(--color-coral) 10%, transparent)}}.bg-coral\/15{background-color:#e86b6b26}@supports (color:color-mix(in lab, red, red)){.bg-coral\/15{background-color:color-mix(in oklab, var(--color-coral) 15%, transparent)}}.bg-fg-muted{background-color:var(--color-fg-muted)}.bg-mint{background-color:var(--color-mint)}.bg-mint\/5{background-color:#5ac8a80d}@supports (color:color-mix(in lab, red, red)){.bg-mint\/5{background-color:color-mix(in oklab, var(--color-mint) 5%, transparent)}}.bg-mint\/15{background-color:#5ac8a826}@supports (color:color-mix(in lab, red, red)){.bg-mint\/15{background-color:color-mix(in oklab, var(--color-mint) 15%, transparent)}}.bg-overlay{background-color:var(--color-overlay)}.bg-overlay-strong{background-color:var(--color-overlay-strong)}.bg-overlay\/30{background-color:#ffffff03}@supports (color:color-mix(in lab, red, red)){.bg-overlay\/30{background-color:color-mix(in oklab, var(--color-overlay) 30%, transparent)}}.bg-overlay\/60{background-color:#ffffff06}@supports (color:color-mix(in lab, red, red)){.bg-overlay\/60{background-color:color-mix(in oklab, var(--color-overlay) 60%, transparent)}}.bg-overlay\/70{background-color:#ffffff07}@supports (color:color-mix(in lab, red, red)){.bg-overlay\/70{background-color:color-mix(in oklab, var(--color-overlay) 70%, transparent)}}.bg-page{background-color:var(--color-page)}.bg-page\/50{background-color:#0f172980}@supports (color:color-mix(in lab, red, red)){.bg-page\/50{background-color:color-mix(in oklab, var(--color-page) 50%, transparent)}}.bg-page\/60{background-color:#0f172999}@supports (color:color-mix(in lab, red, red)){.bg-page\/60{background-color:color-mix(in oklab, var(--color-page) 60%, transparent)}}.bg-page\/80{background-color:#0f1729cc}@supports (color:color-mix(in lab, red, red)){.bg-page\/80{background-color:color-mix(in oklab, var(--color-page) 80%, transparent)}}.bg-panel{background-color:var(--color-panel)}.bg-panel-alt{background-color:var(--color-panel-alt)}.bg-panel-alt\/40{background-color:#1a213366}@supports (color:color-mix(in lab, red, red)){.bg-panel-alt\/40{background-color:color-mix(in oklab, var(--color-panel-alt) 40%, transparent)}}.bg-panel-alt\/60{background-color:#1a213399}@supports (color:color-mix(in lab, red, red)){.bg-panel-alt\/60{background-color:color-mix(in oklab, var(--color-panel-alt) 60%, transparent)}}.bg-panel-alt\/80{background-color:#1a2133cc}@supports (color:color-mix(in lab, red, red)){.bg-panel-alt\/80{background-color:color-mix(in oklab, var(--color-panel-alt) 80%, transparent)}}.bg-panel\/40{background-color:#252c3d66}@supports (color:color-mix(in lab, red, red)){.bg-panel\/40{background-color:color-mix(in oklab, var(--color-panel) 40%, transparent)}}.bg-panel\/50{background-color:#252c3d80}@supports (color:color-mix(in lab, red, red)){.bg-panel\/50{background-color:color-mix(in oklab, var(--color-panel) 50%, transparent)}}.bg-panel\/60{background-color:#252c3d99}@supports (color:color-mix(in lab, red, red)){.bg-panel\/60{background-color:color-mix(in oklab, var(--color-panel) 60%, transparent)}}.bg-panel\/70{background-color:#252c3db3}@supports (color:color-mix(in lab, red, red)){.bg-panel\/70{background-color:color-mix(in oklab, var(--color-panel) 70%, transparent)}}.bg-panel\/80{background-color:#252c3dcc}@supports (color:color-mix(in lab, red, red)){.bg-panel\/80{background-color:color-mix(in oklab, var(--color-panel) 80%, transparent)}}.bg-panel\/85{background-color:#252c3dd9}@supports (color:color-mix(in lab, red, red)){.bg-panel\/85{background-color:color-mix(in oklab, var(--color-panel) 85%, transparent)}}.bg-panel\/90{background-color:#252c3de6}@supports (color:color-mix(in lab, red, red)){.bg-panel\/90{background-color:color-mix(in oklab, var(--color-panel) 90%, transparent)}}.bg-panel\/95{background-color:#252c3df2}@supports (color:color-mix(in lab, red, red)){.bg-panel\/95{background-color:color-mix(in oklab, var(--color-panel) 95%, transparent)}}.bg-rose-950\/40{background-color:#4d021866}@supports (color:color-mix(in lab, red, red)){.bg-rose-950\/40{background-color:color-mix(in oklab, var(--color-rose-950) 40%, transparent)}}.bg-teal-300{background-color:var(--color-teal-300)}.bg-teal-300\/10{background-color:#b5ddef1a}@supports (color:color-mix(in lab, red, red)){.bg-teal-300\/10{background-color:color-mix(in oklab, var(--color-teal-300) 10%, transparent)}}.bg-teal-500{background-color:var(--color-teal-500)}.bg-teal-500\/5{background-color:#67b2d70d}@supports (color:color-mix(in lab, red, red)){.bg-teal-500\/5{background-color:color-mix(in oklab, var(--color-teal-500) 5%, transparent)}}.bg-teal-500\/10{background-color:#67b2d71a}@supports (color:color-mix(in lab, red, red)){.bg-teal-500\/10{background-color:color-mix(in oklab, var(--color-teal-500) 10%, transparent)}}.bg-teal-500\/12{background-color:#67b2d71f}@supports (color:color-mix(in lab, red, red)){.bg-teal-500\/12{background-color:color-mix(in oklab, var(--color-teal-500) 12%, transparent)}}.bg-transparent{background-color:#0000}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-teal-500\/30{--tw-gradient-from:#67b2d74d}@supports (color:color-mix(in lab, red, red)){.from-teal-500\/30{--tw-gradient-from:color-mix(in oklab, var(--color-teal-500) 30%, transparent)}}.from-teal-500\/30{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-mint\/20{--tw-gradient-to:#5ac8a833}@supports (color:color-mix(in lab, red, red)){.to-mint\/20{--tw-gradient-to:color-mix(in oklab, var(--color-mint) 20%, transparent)}}.to-mint\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-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)}.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-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.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-12{padding-block:calc(var(--spacing) * 12)}.py-24{padding-block:calc(var(--spacing) * 24)}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-\[12vh\]{padding-top:12vh}.pt-\[15vh\]{padding-top:15vh}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-14{padding-bottom:calc(var(--spacing) * 14)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-9{padding-left:calc(var(--spacing) * 9)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-lg\/6{font-size:var(--text-lg);line-height:calc(var(--spacing) * 6)}.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-\[2rem\]{font-size:2rem}.text-\[8rem\]{font-size:8rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[15px\]{font-size:15px}.leading-\[1\.625rem\]{--tw-leading:1.625rem;line-height:1.625rem}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-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\.24em\]{--tw-tracking:.24em;letter-spacing:.24em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-tighter{--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber{color:var(--color-amber)}.text-amber-100{color:var(--color-amber-100)}.text-amber\/70{color:#f0a45bb3}@supports (color:color-mix(in lab, red, red)){.text-amber\/70{color:color-mix(in oklab, var(--color-amber) 70%, transparent)}}.text-coral{color:var(--color-coral)}.text-fg{color:var(--color-fg)}.text-fg-2{color:var(--color-fg-2)}.text-fg-3{color:var(--color-fg-3)}.text-fg-muted{color:var(--color-fg-muted)}.text-fg-muted\/60{color:#4b576899}@supports (color:color-mix(in lab, red, red)){.text-fg-muted\/60{color:color-mix(in oklab, var(--color-fg-muted) 60%, transparent)}}.text-mint{color:var(--color-mint)}.text-navy-950{color:var(--color-navy-950)}.text-red-500{color:var(--color-red-500)}.text-rose-200{color:var(--color-rose-200)}.text-teal-300{color:var(--color-teal-300)}.text-teal-500{color:var(--color-teal-500)}.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,)}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.placeholder-fg-muted::placeholder{color:var(--color-fg-muted)}.opacity-0{opacity:0}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-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)}.shadow-black\/30{--tw-shadow-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.shadow-black\/30{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 30%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/40{--tw-shadow-color:#0006}@supports (color:color-mix(in lab, red, red)){.shadow-black\/40{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 40%, transparent) var(--tw-shadow-alpha), transparent)}}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.-outline-offset-1{outline-offset:calc(1px * -1)}.outline-line-strong{outline-color:var(--color-line-strong)}.blur-sm{--tw-blur:blur(var(--blur-sm));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{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-\[grid-template-rows\]{transition-property:grid-template-rows;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.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}.\[--anchor-gap\:4px\]{--anchor-gap:4px}.group-focus-within\:border-focus:is(:where(.group):focus-within *){border-color:var(--color-focus)}.group-focus-within\:opacity-100:is(:where(.group):focus-within *){opacity:1}@media (hover:hover){.group-hover\:text-fg:is(:where(.group):hover *){color:var(--color-fg)}}.group-data-open\:block:is(:where(.group)[data-open] *){display:block}.group-data-open\:hidden:is(:where(.group)[data-open] *){display:none}.placeholder\:text-fg-muted::placeholder{color:var(--color-fg-muted)}.after\:pointer-events-none:after{content:var(--tw-content);pointer-events:none}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:inset-x-0:after{content:var(--tw-content);inset-inline:calc(var(--spacing) * 0)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing) * 0)}.after\:bottom-0:after{content:var(--tw-content);bottom:calc(var(--spacing) * 0)}.after\:border-y:after{content:var(--tw-content);border-block-style:var(--tw-border-style);border-block-width:1px}.after\:border-line-strong:after{content:var(--tw-content);border-color:var(--color-line-strong)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media (hover:hover){.hover\:border-amber\/50:hover{border-color:#f0a45b80}@supports (color:color-mix(in lab, red, red)){.hover\:border-amber\/50:hover{border-color:color-mix(in oklab, var(--color-amber) 50%, transparent)}}.hover\:border-line-strong:hover{border-color:var(--color-line-strong)}.hover\:border-mint\/50:hover{border-color:#5ac8a880}@supports (color:color-mix(in lab, red, red)){.hover\:border-mint\/50:hover{border-color:color-mix(in oklab, var(--color-mint) 50%, transparent)}}.hover\:border-teal-500\/30:hover{border-color:#67b2d74d}@supports (color:color-mix(in lab, red, red)){.hover\:border-teal-500\/30:hover{border-color:color-mix(in oklab, var(--color-teal-500) 30%, transparent)}}.hover\:border-teal-500\/40:hover{border-color:#67b2d766}@supports (color:color-mix(in lab, red, red)){.hover\:border-teal-500\/40:hover{border-color:color-mix(in oklab, var(--color-teal-500) 40%, transparent)}}.hover\:border-teal-500\/50:hover{border-color:#67b2d780}@supports (color:color-mix(in lab, red, red)){.hover\:border-teal-500\/50:hover{border-color:color-mix(in oklab, var(--color-teal-500) 50%, transparent)}}.hover\:bg-amber\/10:hover{background-color:#f0a45b1a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-amber\/10:hover{background-color:color-mix(in oklab, var(--color-amber) 10%, transparent)}}.hover\:bg-mint\/10:hover{background-color:#5ac8a81a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-mint\/10:hover{background-color:color-mix(in oklab, var(--color-mint) 10%, transparent)}}.hover\:bg-overlay:hover{background-color:var(--color-overlay)}.hover\:bg-overlay-strong:hover{background-color:var(--color-overlay-strong)}.hover\:bg-page\/80:hover{background-color:#0f1729cc}@supports (color:color-mix(in lab, red, red)){.hover\:bg-page\/80:hover{background-color:color-mix(in oklab, var(--color-page) 80%, transparent)}}.hover\:bg-panel:hover{background-color:var(--color-panel)}.hover\:bg-panel\/80:hover{background-color:#252c3dcc}@supports (color:color-mix(in lab, red, red)){.hover\:bg-panel\/80:hover{background-color:color-mix(in oklab, var(--color-panel) 80%, transparent)}}.hover\:bg-teal-300:hover{background-color:var(--color-teal-300)}.hover\:bg-teal-500\/10:hover{background-color:#67b2d71a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-teal-500\/10:hover{background-color:color-mix(in oklab, var(--color-teal-500) 10%, transparent)}}.hover\:bg-teal-500\/15:hover{background-color:#67b2d726}@supports (color:color-mix(in lab, red, red)){.hover\:bg-teal-500\/15:hover{background-color:color-mix(in oklab, var(--color-teal-500) 15%, transparent)}}.hover\:bg-teal-500\/20:hover{background-color:#67b2d733}@supports (color:color-mix(in lab, red, red)){.hover\:bg-teal-500\/20:hover{background-color:color-mix(in oklab, var(--color-teal-500) 20%, transparent)}}.hover\:text-fg:hover{color:var(--color-fg)}.hover\:text-fg-2:hover{color:var(--color-fg-2)}.hover\:text-fg-3:hover{color:var(--color-fg-3)}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.hover\:shadow-black\/20:hover{--tw-shadow-color:#0003}@supports (color:color-mix(in lab, red, red)){.hover\:shadow-black\/20:hover{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 20%, transparent) var(--tw-shadow-alpha), transparent)}}}.focus\:border-focus:focus{border-color:var(--color-focus)}.focus\:border-teal-300\/70:focus{border-color:#b5ddefb3}@supports (color:color-mix(in lab, red, red)){.focus\:border-teal-300\/70:focus{border-color:color-mix(in oklab, var(--color-teal-300) 70%, transparent)}}.focus\:border-teal-500:focus{border-color:var(--color-teal-500)}.focus\:ring-0:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-4:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-teal-500\/20:focus{--tw-ring-color:#67b2d733}@supports (color:color-mix(in lab, red, red)){.focus\:ring-teal-500\/20:focus{--tw-ring-color:color-mix(in oklab, var(--color-teal-500) 20%, transparent)}}.focus\:outline-2:focus{outline-style:var(--tw-outline-style);outline-width:2px}.focus\:outline-offset-2:focus{outline-offset:2px}.focus\:outline-focus:focus{outline-color:var(--color-focus)}.focus\:outline-teal-500:focus{outline-color:var(--color-teal-500)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-teal-500:focus-visible{outline-color:var(--color-teal-500)}.disabled\:cursor-default:disabled{cursor:default}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:border-line:disabled{border-color:var(--color-line)}.disabled\:text-fg-muted:disabled{color:var(--color-fg-muted)}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.disabled\:opacity-70:disabled{opacity:.7}@media (hover:hover){.disabled\:hover\:border-mint\/20:disabled:hover{border-color:#5ac8a833}@supports (color:color-mix(in lab, red, red)){.disabled\:hover\:border-mint\/20:disabled:hover{border-color:color-mix(in oklab, var(--color-mint) 20%, transparent)}}.disabled\:hover\:bg-mint\/5:disabled:hover{background-color:#5ac8a80d}@supports (color:color-mix(in lab, red, red)){.disabled\:hover\:bg-mint\/5:disabled:hover{background-color:color-mix(in oklab, var(--color-mint) 5%, transparent)}}.disabled\:hover\:bg-teal-500:disabled:hover{background-color:var(--color-teal-500)}.disabled\:hover\:bg-transparent:disabled:hover{background-color:#0000}.disabled\:hover\:text-fg-muted:disabled:hover{color:var(--color-fg-muted)}.disabled\:hover\:text-mint:disabled:hover{color:var(--color-mint)}}.data-closed\:scale-95[data-closed]{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.data-closed\:transform[data-closed]{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.data-closed\:opacity-0[data-closed]{opacity:0}.data-enter\:duration-100[data-enter]{--tw-duration:.1s;transition-duration:.1s}.data-enter\:ease-out[data-enter]{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.data-focus\:bg-overlay[data-focus]{background-color:var(--color-overlay)}.data-focus\:text-fg[data-focus]{color:var(--color-fg)}.data-focus\:outline-hidden[data-focus]{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.data-focus\:outline-hidden[data-focus]{outline-offset:2px;outline:2px solid #0000}}.data-leave\:duration-75[data-leave]{--tw-duration:75ms;transition-duration:75ms}.data-leave\:ease-in[data-leave]{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.data-selected\:text-teal-300[data-selected]{color:var(--color-teal-300)}@media (prefers-reduced-motion:no-preference){.motion-safe\:animate-pulse{animation:var(--animate-pulse)}}@media (min-width:40rem){.sm\:-mx-6{margin-inline:calc(var(--spacing) * -6)}.sm\:inline{display:inline}.sm\:px-3{padding-inline:calc(var(--spacing) * 3)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}}@media (min-width:48rem){.md\:ml-6{margin-left:calc(var(--spacing) * 6)}.md\:block{display:block}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:64rem){.lg\:-mx-8{margin-inline:calc(var(--spacing) * -8)}.lg\:grid-cols-\[240px_minmax\(0\,1fr\)\]{grid-template-columns:240px minmax(0,1fr)}.lg\:p-8{padding:calc(var(--spacing) * 8)}.lg\:px-8{padding-inline:calc(var(--spacing) * 8)}}.prose-headings\:text-fg-2 :where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--color-fg-2)}.prose-a\:text-teal-500 :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--color-teal-500)}.prose-strong\:text-fg-2 :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--color-fg-2)}.prose-code\:rounded :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.25rem}.prose-code\:bg-overlay-strong :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--color-overlay-strong)}.prose-code\:px-1 :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline:calc(var(--spacing) * 1)}.prose-code\:py-0\.5 :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){padding-block:calc(var(--spacing) * .5)}.prose-code\:font-mono :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-family:var(--font-mono)}.prose-code\:text-\[0\.8em\] :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8em}.prose-code\:text-fg-3 :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--color-fg-3)}.prose-code\:before\:content-none :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose-code\:after\:content-none :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:var(--tw-content);--tw-content:none;content:none}.prose-pre\:bg-overlay-strong :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--color-overlay-strong)}.prose-pre\:text-fg-3 :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--color-fg-3)}.\[\&_svg\]\:mx-auto svg{margin-inline:auto}.\[\&_svg\]\:block svg{display:block}}.light{--color-page:#fff;--color-panel:#f8fafc;--color-panel-alt:#f1f5f9;--color-overlay:#0000000a;--color-overlay-strong:#0000001a;--color-fg:#0f172a;--color-fg-2:#1e293b;--color-fg-3:#475569;--color-fg-muted:#94a3b8;--color-line:#00000014;--color-line-strong:#00000026;--color-focus:#0e749080;--color-mint:#0d9488;--color-amber:#d97706;--color-coral:#dc2626;--color-teal-300:#0891b2;--color-teal-500:#0e7490}:root{--chart-gridline:#ffffff0a;--chart-axis-label:#4b5768}.light{--chart-gridline:#0000000f;--chart-axis-label:#475569}.bg-atmosphere{background-color:var(--color-page);background-image:radial-gradient(120% 60% at 15% 5%,#357f9e1f 0%,#0000 50%),radial-gradient(80% 50% at 85% 90%,#5ac8a812 0%,#0000 45%);background-attachment:fixed}.light .bg-atmosphere,.light.bg-atmosphere{background-image:radial-gradient(120% 60% at 15% 5%,#0e74900f 0%,#0000 50%),radial-gradient(80% 50% at 85% 90%,#0d94880a 0%,#0000 45%)}.bg-atmosphere:before{content:"";z-index:1;pointer-events:none;opacity:.07;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");background-repeat:repeat;background-size:200px 200px;position:fixed;inset:0}.light .bg-atmosphere:before,.light.bg-atmosphere:before{opacity:.03}:root{--diffs-font-family:"JetBrains Mono", ui-monospace, monospace;--diffs-header-font-family:"Geist", ui-sans-serif, system-ui, sans-serif;--diffs-font-size:13px;--diffs-line-height:20px;--diffs-bg-buffer-override:#0f1729;--diffs-bg-context-override:#161d2e;--diffs-bg-hover-override:#1c2438;--diffs-bg-separator-override:#252c3d;--diffs-fg-number-override:#4b5768;--diffs-addition-color-override:#5ac8a8;--diffs-fg-number-addition-override:#5ac8a880;--diffs-deletion-color-override:#e86b6b;--diffs-fg-number-deletion-override:#e86b6b80}.dark .graph-svg text{fill:#c6d4e0}.dark .graph-svg [stroke=\#357f9e]{stroke:#67b2d7}.dark .graph-svg [stroke=\#666666]{stroke:#5a7a94}.dark .graph-svg polygon[fill=\#357f9e]{fill:#67b2d7}.dark .graph-svg polygon[fill=\#666666]{fill:#5a7a94}.dark .graph-svg ellipse[fill=\#ffffff],.dark .graph-svg polygon[fill=\#ffffff]{fill:#1a2b3c}.dark .graph-svg ellipse[stroke=\#357f9e],.dark .graph-svg polygon[stroke=\#357f9e]{stroke:#67b2d7}.dark .graph-svg [fill=\#1a1a1a]{fill:#c6d4e0}.light{--diffs-bg-buffer-override:#fff;--diffs-bg-context-override:#f8fafc;--diffs-bg-hover-override:#f1f5f9;--diffs-bg-separator-override:#e2e8f0;--diffs-fg-number-override:#94a3b8;--diffs-addition-color-override:#0d9488;--diffs-fg-number-addition-override:#0d948880;--diffs-deletion-color-override:#dc2626;--diffs-fg-number-deletion-override:#dc262680}@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-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-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:"";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:"";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:"";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:"";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}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}} \ No newline at end of file +@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-space-x-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-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;--tw-content:"";--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:"Geist", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:"JetBrains Mono", ui-monospace, monospace;--color-red-500:oklch(63.7% .237 25.331);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-950:oklch(27.9% .077 45.635);--color-teal-300:#b5ddef;--color-teal-500:#67b2d7;--color-teal-700:#357f9e;--color-rose-50:oklch(96.9% .015 12.422);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-950:oklch(27.1% .105 12.094);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--container-4xl:56rem;--container-5xl:64rem;--container-6xl:72rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tighter:-.05em;--tracking-tight:-.025em;--tracking-wide:.025em;--tracking-wider:.05em;--leading-snug:1.375;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--radius-2xl:1rem;--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono);--color-navy-950:#0f1729;--color-mint:#5ac8a8;--color-amber:#f0a45b;--color-coral:#e86b6b;--color-page:#0f1729;--color-panel:#252c3d;--color-panel-alt:#1a2133;--color-overlay:#ffffff0a;--color-overlay-strong:#ffffff1a;--color-fg:#fff;--color-fg-2:#e8edf3;--color-fg-3:#a8b5c5;--color-fg-muted:#4b5768;--color-line:#ffffff0f;--color-line-strong:#ffffff1f;--color-focus:#67b2d766}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}a[href],button,select,summary,[role=button],[role=link],[role=option],[role=menuitem],[role=tab]{cursor:pointer}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.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}.sticky{position:sticky}.-inset-0\.5{inset:calc(var(--spacing) * -.5)}.-inset-1\.5{inset:calc(var(--spacing) * -1.5)}.-inset-px{inset:-1px}.inset-0{inset:calc(var(--spacing) * 0)}.inset-x-0{inset-inline:calc(var(--spacing) * 0)}.inset-x-3{inset-inline:calc(var(--spacing) * 3)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-1\/2{top:50%}.top-3{top:calc(var(--spacing) * 3)}.top-6{top:calc(var(--spacing) * 6)}.top-full{top:100%}.right-0{right:calc(var(--spacing) * 0)}.right-2{right:calc(var(--spacing) * 2)}.right-3{right:calc(var(--spacing) * 3)}.right-6{right:calc(var(--spacing) * 6)}.bottom-3{bottom:calc(var(--spacing) * 3)}.bottom-6{bottom:calc(var(--spacing) * 6)}.left-3{left:calc(var(--spacing) * 3)}.z-10{z-index:10}.z-20{z-index:20}.z-50{z-index:50}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.-mx-4{margin-inline:calc(var(--spacing) * -4)}.mx-auto{margin-inline:auto}.-my-6{margin-block:calc(var(--spacing) * -6)}.prose{color:var(--tw-prose-body);max-width:65ch}.prose :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-lead);margin-top:1.2em;margin-bottom:1.2em;font-size:1.25em;line-height:1.6}.prose :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-links);font-weight:500;text-decoration:underline}.prose :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-bold);font-weight:600}.prose :where(a strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote strong):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:decimal}.prose :where(ol[type=A]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=A s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-alpha}.prose :where(ol[type=a s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-alpha}.prose :where(ol[type=I]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type=I s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:upper-roman}.prose :where(ol[type=i s]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:lower-roman}.prose :where(ol[type="1"]):not(:where([class~=not-prose],[class~=not-prose] *)){list-style-type:decimal}.prose :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em;padding-inline-start:1.625em;list-style-type:disc}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-counters);font-weight:400}.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *))::marker{color:var(--tw-prose-bullets)}.prose :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.25em;font-weight:600}.prose :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){border-color:var(--tw-prose-hr);border-top-width:1px;margin-top:3em;margin-bottom:3em}.prose :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-quotes);border-inline-start-width:.25rem;border-inline-start-color:var(--tw-prose-quote-borders);quotes:"“""”""‘""’";margin-top:1.6em;margin-bottom:1.6em;padding-inline-start:1em;font-style:italic;font-weight:500}.prose :where(blockquote p:first-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):before{content:open-quote}.prose :where(blockquote p:last-of-type):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:close-quote}.prose :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:0;margin-bottom:.888889em;font-size:2.25em;font-weight:800;line-height:1.11111}.prose :where(h1 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:900}.prose :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:2em;margin-bottom:1em;font-size:1.5em;font-weight:700;line-height:1.33333}.prose :where(h2 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:800}.prose :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.6em;margin-bottom:.6em;font-size:1.25em;font-weight:600;line-height:1.6}.prose :where(h3 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);margin-top:1.5em;margin-bottom:.5em;font-weight:600;line-height:1.5}.prose :where(h4 strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-weight:700}.prose :where(img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em;display:block}.prose :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-kbd);box-shadow:0 0 0 1px var(--tw-prose-kbd-shadows), 0 3px 0 var(--tw-prose-kbd-shadows);padding-top:.1875em;padding-inline-end:.375em;padding-bottom:.1875em;border-radius:.3125rem;padding-inline-start:.375em;font-family:inherit;font-size:.875em;font-weight:500}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-code);font-size:.875em;font-weight:600}.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:"`"}.prose :where(a code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h1 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.875em}.prose :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit;font-size:.9em}.prose :where(h4 code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(blockquote code):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(thead th code):not(:where([class~=not-prose],[class~=not-prose] *)){color:inherit}.prose :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-pre-code);background-color:var(--tw-prose-pre-bg);padding-top:.857143em;padding-inline-end:1.14286em;padding-bottom:.857143em;border-radius:.375rem;margin-top:1.71429em;margin-bottom:1.71429em;padding-inline-start:1.14286em;font-size:.875em;font-weight:400;line-height:1.71429;overflow-x:auto}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)){font-weight:inherit;color:inherit;font-size:inherit;font-family:inherit;line-height:inherit;background-color:#0000;border-width:0;border-radius:0;padding:0}.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose :where(pre code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:none}.prose :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){table-layout:auto;width:100%;margin-top:2em;margin-bottom:2em;font-size:.875em;line-height:1.71429}.prose :where(thead):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-th-borders)}.prose :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-headings);vertical-align:bottom;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em;font-weight:600}.prose :where(tbody tr):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:1px;border-bottom-color:var(--tw-prose-td-borders)}.prose :where(tbody tr:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){border-bottom-width:0}.prose :where(tbody td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:baseline}.prose :where(tfoot):not(:where([class~=not-prose],[class~=not-prose] *)){border-top-width:1px;border-top-color:var(--tw-prose-th-borders)}.prose :where(tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){vertical-align:top}.prose :where(th,td):not(:where([class~=not-prose],[class~=not-prose] *)){text-align:start}.prose :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--tw-prose-captions);margin-top:.857143em;font-size:.875em;line-height:1.42857}.prose{--tw-prose-body:oklch(37.3% .034 259.733);--tw-prose-headings:oklch(21% .034 264.665);--tw-prose-lead:oklch(44.6% .03 256.802);--tw-prose-links:oklch(21% .034 264.665);--tw-prose-bold:oklch(21% .034 264.665);--tw-prose-counters:oklch(55.1% .027 264.364);--tw-prose-bullets:oklch(87.2% .01 258.338);--tw-prose-hr:oklch(92.8% .006 264.531);--tw-prose-quotes:oklch(21% .034 264.665);--tw-prose-quote-borders:oklch(92.8% .006 264.531);--tw-prose-captions:oklch(55.1% .027 264.364);--tw-prose-kbd:oklch(21% .034 264.665);--tw-prose-kbd-shadows:oklab(21% -.00316127 -.0338527/.1);--tw-prose-code:oklch(21% .034 264.665);--tw-prose-pre-code:oklch(92.8% .006 264.531);--tw-prose-pre-bg:oklch(27.8% .033 256.848);--tw-prose-th-borders:oklch(87.2% .01 258.338);--tw-prose-td-borders:oklch(92.8% .006 264.531);--tw-prose-invert-body:oklch(87.2% .01 258.338);--tw-prose-invert-headings:#fff;--tw-prose-invert-lead:oklch(70.7% .022 261.325);--tw-prose-invert-links:#fff;--tw-prose-invert-bold:#fff;--tw-prose-invert-counters:oklch(70.7% .022 261.325);--tw-prose-invert-bullets:oklch(44.6% .03 256.802);--tw-prose-invert-hr:oklch(37.3% .034 259.733);--tw-prose-invert-quotes:oklch(96.7% .003 264.542);--tw-prose-invert-quote-borders:oklch(37.3% .034 259.733);--tw-prose-invert-captions:oklch(70.7% .022 261.325);--tw-prose-invert-kbd:#fff;--tw-prose-invert-kbd-shadows:#ffffff1a;--tw-prose-invert-code:#fff;--tw-prose-invert-pre-code:oklch(87.2% .01 258.338);--tw-prose-invert-pre-bg:#00000080;--tw-prose-invert-th-borders:oklch(44.6% .03 256.802);--tw-prose-invert-td-borders:oklch(37.3% .034 259.733);font-size:1rem;line-height:1.75}.prose :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;margin-bottom:.5em}.prose :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.375em}.prose :where(.prose>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(.prose>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(.prose>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em}.prose :where(.prose>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.25em}.prose :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.75em;margin-bottom:.75em}.prose :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.25em;margin-bottom:1.25em}.prose :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.5em;padding-inline-start:1.625em}.prose :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.571429em;padding-inline-end:.571429em;padding-bottom:.571429em;padding-inline-start:.571429em}.prose :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2em;margin-bottom:2em}.prose :where(.prose>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose :where(.prose>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.prose-sm{font-size:.875rem;line-height:1.71429}.prose-sm :where(p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em;margin-bottom:1.14286em}.prose-sm :where([class~=lead]):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.888889em;margin-bottom:.888889em;font-size:1.28571em;line-height:1.55556}.prose-sm :where(blockquote):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.33333em;margin-bottom:1.33333em;padding-inline-start:1.11111em}.prose-sm :where(h1):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:.8em;font-size:2.14286em;line-height:1.2}.prose-sm :where(h2):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.6em;margin-bottom:.8em;font-size:1.42857em;line-height:1.4}.prose-sm :where(h3):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.55556em;margin-bottom:.444444em;font-size:1.28571em;line-height:1.55556}.prose-sm :where(h4):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.42857em;margin-bottom:.571429em;line-height:1.42857}.prose-sm :where(img):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(picture):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.71429em;margin-bottom:1.71429em}.prose-sm :where(picture>img):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-sm :where(video):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.71429em;margin-bottom:1.71429em}.prose-sm :where(kbd):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.142857em;padding-inline-end:.357143em;padding-bottom:.142857em;border-radius:.3125rem;padding-inline-start:.357143em;font-size:.857143em}.prose-sm :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.857143em}.prose-sm :where(h2 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.9em}.prose-sm :where(h3 code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.888889em}.prose-sm :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.666667em;padding-inline-end:1em;padding-bottom:.666667em;border-radius:.25rem;margin-top:1.66667em;margin-bottom:1.66667em;padding-inline-start:1em;font-size:.857143em;line-height:1.66667}.prose-sm :where(ol):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(ul):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em;margin-bottom:1.14286em;padding-inline-start:1.57143em}.prose-sm :where(li):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.285714em;margin-bottom:.285714em}.prose-sm :where(ol>li):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(ul>li):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:.428571em}.prose-sm :where(.prose-sm>ul>li p):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.571429em;margin-bottom:.571429em}.prose-sm :where(.prose-sm>ul>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em}.prose-sm :where(.prose-sm>ul>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.14286em}.prose-sm :where(.prose-sm>ol>li>p:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em}.prose-sm :where(.prose-sm>ol>li>p:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:1.14286em}.prose-sm :where(ul ul,ul ol,ol ul,ol ol):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.571429em;margin-bottom:.571429em}.prose-sm :where(dl):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em;margin-bottom:1.14286em}.prose-sm :where(dt):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.14286em}.prose-sm :where(dd):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.285714em;padding-inline-start:1.57143em}.prose-sm :where(hr):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:2.85714em;margin-bottom:2.85714em}.prose-sm :where(hr+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(h2+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(h3+*):not(:where([class~=not-prose],[class~=not-prose] *)),.prose-sm :where(h4+*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(table):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.857143em;line-height:1.5}.prose-sm :where(thead th):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:1em;padding-bottom:.666667em;padding-inline-start:1em}.prose-sm :where(thead th:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(thead th:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(tbody td,tfoot td):not(:where([class~=not-prose],[class~=not-prose] *)){padding-top:.666667em;padding-inline-end:1em;padding-bottom:.666667em;padding-inline-start:1em}.prose-sm :where(tbody td:first-child,tfoot td:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-start:0}.prose-sm :where(tbody td:last-child,tfoot td:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline-end:0}.prose-sm :where(figure):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:1.71429em;margin-bottom:1.71429em}.prose-sm :where(figure>*):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0;margin-bottom:0}.prose-sm :where(figcaption):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:.666667em;font-size:.857143em;line-height:1.33333}.prose-sm :where(.prose-sm>:first-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-top:0}.prose-sm :where(.prose-sm>:last-child):not(:where([class~=not-prose],[class~=not-prose] *)){margin-bottom:0}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mt-12{margin-top:calc(var(--spacing) * 12)}.-mr-2{margin-right:calc(var(--spacing) * -2)}.-mb-px{margin-bottom:-1px}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.-ml-px{margin-left:-1px}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-3{margin-left:calc(var(--spacing) * 3)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-10{margin-left:calc(var(--spacing) * 10)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.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-10{width:calc(var(--spacing) * 10);height:calc(var(--spacing) * 10)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-8{height:calc(var(--spacing) * 8)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-16{height:calc(var(--spacing) * 16)}.h-32{height:calc(var(--spacing) * 32)}.h-48{height:calc(var(--spacing) * 48)}.h-64{height:calc(var(--spacing) * 64)}.h-full{height:100%}.max-h-64{max-height:calc(var(--spacing) * 64)}.min-h-28{min-height:calc(var(--spacing) * 28)}.min-h-\[7lh\]{min-height:7lh}.min-h-\[32px\]{min-height:32px}.min-h-\[44px\]{min-height:44px}.min-h-full{min-height:100%}.min-h-screen{min-height:100vh}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-8{width:calc(var(--spacing) * 8)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-48{width:calc(var(--spacing) * 48)}.w-56{width:calc(var(--spacing) * 56)}.w-72{width:calc(var(--spacing) * 72)}.w-auto{width:auto}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-5xl{max-width:var(--container-5xl)}.max-w-6xl{max-width:var(--container-6xl)}.max-w-\[120px\]{max-width:120px}.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}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[44px\]{min-width:44px}.flex-1{flex:1}.shrink-0{flex-shrink:0}.origin-top-right{transform-origin:100% 0}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.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-pointer{cursor:pointer}.resize-none{resize:none}.resize-y{resize:vertical}.appearance-none{appearance:none}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-rows-\[0fr\]{grid-template-rows:0fr}.grid-rows-\[1fr\]{grid-template-rows:1fr}.flex-col{flex-direction:column}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-3\.5{gap:calc(var(--spacing) * 3.5)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-px>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(1px * var(--tw-space-y-reverse));margin-block-end:calc(1px * calc(1 - var(--tw-space-y-reverse)))}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-y{border-block-style:var(--tw-border-style);border-block-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-r-0{border-right-style:var(--tw-border-style);border-right-width:0}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-amber-500\/30{border-color:#f99c004d}@supports (color:color-mix(in lab, red, red)){.border-amber-500\/30{border-color:color-mix(in oklab, var(--color-amber-500) 30%, transparent)}}.border-amber\/10{border-color:#f0a45b1a}@supports (color:color-mix(in lab, red, red)){.border-amber\/10{border-color:color-mix(in oklab, var(--color-amber) 10%, transparent)}}.border-amber\/20{border-color:#f0a45b33}@supports (color:color-mix(in lab, red, red)){.border-amber\/20{border-color:color-mix(in oklab, var(--color-amber) 20%, transparent)}}.border-amber\/40{border-color:#f0a45b66}@supports (color:color-mix(in lab, red, red)){.border-amber\/40{border-color:color-mix(in oklab, var(--color-amber) 40%, transparent)}}.border-coral\/15{border-color:#e86b6b26}@supports (color:color-mix(in lab, red, red)){.border-coral\/15{border-color:color-mix(in oklab, var(--color-coral) 15%, transparent)}}.border-coral\/40{border-color:#e86b6b66}@supports (color:color-mix(in lab, red, red)){.border-coral\/40{border-color:color-mix(in oklab, var(--color-coral) 40%, transparent)}}.border-fg-muted{border-color:var(--color-fg-muted)}.border-focus{border-color:var(--color-focus)}.border-line{border-color:var(--color-line)}.border-line-strong{border-color:var(--color-line-strong)}.border-mint\/15{border-color:#5ac8a826}@supports (color:color-mix(in lab, red, red)){.border-mint\/15{border-color:color-mix(in oklab, var(--color-mint) 15%, transparent)}}.border-mint\/20{border-color:#5ac8a833}@supports (color:color-mix(in lab, red, red)){.border-mint\/20{border-color:color-mix(in oklab, var(--color-mint) 20%, transparent)}}.border-mint\/50{border-color:#5ac8a880}@supports (color:color-mix(in lab, red, red)){.border-mint\/50{border-color:color-mix(in oklab, var(--color-mint) 50%, transparent)}}.border-rose-500\/30{border-color:#ff23574d}@supports (color:color-mix(in lab, red, red)){.border-rose-500\/30{border-color:color-mix(in oklab, var(--color-rose-500) 30%, transparent)}}.border-rose-500\/40{border-color:#ff235766}@supports (color:color-mix(in lab, red, red)){.border-rose-500\/40{border-color:color-mix(in oklab, var(--color-rose-500) 40%, transparent)}}.border-teal-300\/60{border-color:#b5ddef99}@supports (color:color-mix(in lab, red, red)){.border-teal-300\/60{border-color:color-mix(in oklab, var(--color-teal-300) 60%, transparent)}}.border-teal-500{border-color:var(--color-teal-500)}.border-teal-500\/10{border-color:#67b2d71a}@supports (color:color-mix(in lab, red, red)){.border-teal-500\/10{border-color:color-mix(in oklab, var(--color-teal-500) 10%, transparent)}}.border-teal-500\/20{border-color:#67b2d733}@supports (color:color-mix(in lab, red, red)){.border-teal-500\/20{border-color:color-mix(in oklab, var(--color-teal-500) 20%, transparent)}}.border-teal-500\/30{border-color:#67b2d74d}@supports (color:color-mix(in lab, red, red)){.border-teal-500\/30{border-color:color-mix(in oklab, var(--color-teal-500) 30%, transparent)}}.border-teal-500\/40{border-color:#67b2d766}@supports (color:color-mix(in lab, red, red)){.border-teal-500\/40{border-color:color-mix(in oklab, var(--color-teal-500) 40%, transparent)}}.border-transparent{border-color:#0000}.bg-amber{background-color:var(--color-amber)}.bg-amber-950\/20{background-color:#46190133}@supports (color:color-mix(in lab, red, red)){.bg-amber-950\/20{background-color:color-mix(in oklab, var(--color-amber-950) 20%, transparent)}}.bg-amber\/5{background-color:#f0a45b0d}@supports (color:color-mix(in lab, red, red)){.bg-amber\/5{background-color:color-mix(in oklab, var(--color-amber) 5%, transparent)}}.bg-amber\/10{background-color:#f0a45b1a}@supports (color:color-mix(in lab, red, red)){.bg-amber\/10{background-color:color-mix(in oklab, var(--color-amber) 10%, transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab, red, red)){.bg-black\/60{background-color:color-mix(in oklab, var(--color-black) 60%, transparent)}}.bg-coral{background-color:var(--color-coral)}.bg-coral\/5{background-color:#e86b6b0d}@supports (color:color-mix(in lab, red, red)){.bg-coral\/5{background-color:color-mix(in oklab, var(--color-coral) 5%, transparent)}}.bg-coral\/10{background-color:#e86b6b1a}@supports (color:color-mix(in lab, red, red)){.bg-coral\/10{background-color:color-mix(in oklab, var(--color-coral) 10%, transparent)}}.bg-coral\/15{background-color:#e86b6b26}@supports (color:color-mix(in lab, red, red)){.bg-coral\/15{background-color:color-mix(in oklab, var(--color-coral) 15%, transparent)}}.bg-fg-muted{background-color:var(--color-fg-muted)}.bg-mint{background-color:var(--color-mint)}.bg-mint\/5{background-color:#5ac8a80d}@supports (color:color-mix(in lab, red, red)){.bg-mint\/5{background-color:color-mix(in oklab, var(--color-mint) 5%, transparent)}}.bg-mint\/15{background-color:#5ac8a826}@supports (color:color-mix(in lab, red, red)){.bg-mint\/15{background-color:color-mix(in oklab, var(--color-mint) 15%, transparent)}}.bg-overlay{background-color:var(--color-overlay)}.bg-overlay-strong{background-color:var(--color-overlay-strong)}.bg-overlay\/30{background-color:#ffffff03}@supports (color:color-mix(in lab, red, red)){.bg-overlay\/30{background-color:color-mix(in oklab, var(--color-overlay) 30%, transparent)}}.bg-overlay\/60{background-color:#ffffff06}@supports (color:color-mix(in lab, red, red)){.bg-overlay\/60{background-color:color-mix(in oklab, var(--color-overlay) 60%, transparent)}}.bg-overlay\/70{background-color:#ffffff07}@supports (color:color-mix(in lab, red, red)){.bg-overlay\/70{background-color:color-mix(in oklab, var(--color-overlay) 70%, transparent)}}.bg-page{background-color:var(--color-page)}.bg-page\/50{background-color:#0f172980}@supports (color:color-mix(in lab, red, red)){.bg-page\/50{background-color:color-mix(in oklab, var(--color-page) 50%, transparent)}}.bg-page\/60{background-color:#0f172999}@supports (color:color-mix(in lab, red, red)){.bg-page\/60{background-color:color-mix(in oklab, var(--color-page) 60%, transparent)}}.bg-page\/80{background-color:#0f1729cc}@supports (color:color-mix(in lab, red, red)){.bg-page\/80{background-color:color-mix(in oklab, var(--color-page) 80%, transparent)}}.bg-panel{background-color:var(--color-panel)}.bg-panel-alt{background-color:var(--color-panel-alt)}.bg-panel-alt\/40{background-color:#1a213366}@supports (color:color-mix(in lab, red, red)){.bg-panel-alt\/40{background-color:color-mix(in oklab, var(--color-panel-alt) 40%, transparent)}}.bg-panel-alt\/60{background-color:#1a213399}@supports (color:color-mix(in lab, red, red)){.bg-panel-alt\/60{background-color:color-mix(in oklab, var(--color-panel-alt) 60%, transparent)}}.bg-panel-alt\/80{background-color:#1a2133cc}@supports (color:color-mix(in lab, red, red)){.bg-panel-alt\/80{background-color:color-mix(in oklab, var(--color-panel-alt) 80%, transparent)}}.bg-panel\/40{background-color:#252c3d66}@supports (color:color-mix(in lab, red, red)){.bg-panel\/40{background-color:color-mix(in oklab, var(--color-panel) 40%, transparent)}}.bg-panel\/50{background-color:#252c3d80}@supports (color:color-mix(in lab, red, red)){.bg-panel\/50{background-color:color-mix(in oklab, var(--color-panel) 50%, transparent)}}.bg-panel\/60{background-color:#252c3d99}@supports (color:color-mix(in lab, red, red)){.bg-panel\/60{background-color:color-mix(in oklab, var(--color-panel) 60%, transparent)}}.bg-panel\/70{background-color:#252c3db3}@supports (color:color-mix(in lab, red, red)){.bg-panel\/70{background-color:color-mix(in oklab, var(--color-panel) 70%, transparent)}}.bg-panel\/80{background-color:#252c3dcc}@supports (color:color-mix(in lab, red, red)){.bg-panel\/80{background-color:color-mix(in oklab, var(--color-panel) 80%, transparent)}}.bg-panel\/85{background-color:#252c3dd9}@supports (color:color-mix(in lab, red, red)){.bg-panel\/85{background-color:color-mix(in oklab, var(--color-panel) 85%, transparent)}}.bg-panel\/90{background-color:#252c3de6}@supports (color:color-mix(in lab, red, red)){.bg-panel\/90{background-color:color-mix(in oklab, var(--color-panel) 90%, transparent)}}.bg-panel\/95{background-color:#252c3df2}@supports (color:color-mix(in lab, red, red)){.bg-panel\/95{background-color:color-mix(in oklab, var(--color-panel) 95%, transparent)}}.bg-rose-950\/20{background-color:#4d021833}@supports (color:color-mix(in lab, red, red)){.bg-rose-950\/20{background-color:color-mix(in oklab, var(--color-rose-950) 20%, transparent)}}.bg-rose-950\/40{background-color:#4d021866}@supports (color:color-mix(in lab, red, red)){.bg-rose-950\/40{background-color:color-mix(in oklab, var(--color-rose-950) 40%, transparent)}}.bg-teal-300{background-color:var(--color-teal-300)}.bg-teal-300\/10{background-color:#b5ddef1a}@supports (color:color-mix(in lab, red, red)){.bg-teal-300\/10{background-color:color-mix(in oklab, var(--color-teal-300) 10%, transparent)}}.bg-teal-500{background-color:var(--color-teal-500)}.bg-teal-500\/5{background-color:#67b2d70d}@supports (color:color-mix(in lab, red, red)){.bg-teal-500\/5{background-color:color-mix(in oklab, var(--color-teal-500) 5%, transparent)}}.bg-teal-500\/10{background-color:#67b2d71a}@supports (color:color-mix(in lab, red, red)){.bg-teal-500\/10{background-color:color-mix(in oklab, var(--color-teal-500) 10%, transparent)}}.bg-teal-500\/12{background-color:#67b2d71f}@supports (color:color-mix(in lab, red, red)){.bg-teal-500\/12{background-color:color-mix(in oklab, var(--color-teal-500) 12%, transparent)}}.bg-transparent{background-color:#0000}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-teal-500\/30{--tw-gradient-from:#67b2d74d}@supports (color:color-mix(in lab, red, red)){.from-teal-500\/30{--tw-gradient-from:color-mix(in oklab, var(--color-teal-500) 30%, transparent)}}.from-teal-500\/30{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-mint\/20{--tw-gradient-to:#5ac8a833}@supports (color:color-mix(in lab, red, red)){.to-mint\/20{--tw-gradient-to:color-mix(in oklab, var(--color-mint) 20%, transparent)}}.to-mint\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-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)}.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-3\.5{padding-block:calc(var(--spacing) * 3.5)}.py-4{padding-block:calc(var(--spacing) * 4)}.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-12{padding-block:calc(var(--spacing) * 12)}.py-24{padding-block:calc(var(--spacing) * 24)}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-\[12vh\]{padding-top:12vh}.pt-\[15vh\]{padding-top:15vh}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-4{padding-right:calc(var(--spacing) * 4)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-14{padding-bottom:calc(var(--spacing) * 14)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-9{padding-left:calc(var(--spacing) * 9)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-lg\/6{font-size:var(--text-lg);line-height:calc(var(--spacing) * 6)}.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-\[2rem\]{font-size:2rem}.text-\[8rem\]{font-size:8rem}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[15px\]{font-size:15px}.leading-\[1\.625rem\]{--tw-leading:1.625rem;line-height:1.625rem}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-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\.24em\]{--tw-tracking:.24em;letter-spacing:.24em}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-tighter{--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber{color:var(--color-amber)}.text-amber-100{color:var(--color-amber-100)}.text-amber\/70{color:#f0a45bb3}@supports (color:color-mix(in lab, red, red)){.text-amber\/70{color:color-mix(in oklab, var(--color-amber) 70%, transparent)}}.text-coral{color:var(--color-coral)}.text-fg{color:var(--color-fg)}.text-fg-2{color:var(--color-fg-2)}.text-fg-3{color:var(--color-fg-3)}.text-fg-muted{color:var(--color-fg-muted)}.text-fg-muted\/60{color:#4b576899}@supports (color:color-mix(in lab, red, red)){.text-fg-muted\/60{color:color-mix(in oklab, var(--color-fg-muted) 60%, transparent)}}.text-mint{color:var(--color-mint)}.text-navy-950{color:var(--color-navy-950)}.text-red-500{color:var(--color-red-500)}.text-rose-50{color:var(--color-rose-50)}.text-rose-100{color:var(--color-rose-100)}.text-rose-200{color:var(--color-rose-200)}.text-teal-300{color:var(--color-teal-300)}.text-teal-500{color:var(--color-teal-500)}.text-white{color:var(--color-white)}.lowercase{text-transform:lowercase}.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,)}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.placeholder-fg-muted::placeholder{color:var(--color-fg-muted)}.opacity-0{opacity:0}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-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)}.shadow-black\/30{--tw-shadow-color:#0000004d}@supports (color:color-mix(in lab, red, red)){.shadow-black\/30{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 30%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-black\/40{--tw-shadow-color:#0006}@supports (color:color-mix(in lab, red, red)){.shadow-black\/40{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 40%, transparent) var(--tw-shadow-alpha), transparent)}}.outline,.outline-1{outline-style:var(--tw-outline-style);outline-width:1px}.-outline-offset-1{outline-offset:calc(1px * -1)}.outline-line-strong{outline-color:var(--color-line-strong)}.blur-sm{--tw-blur:blur(var(--blur-sm));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{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-\[grid-template-rows\]{transition-property:grid-template-rows;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.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}.\[--anchor-gap\:4px\]{--anchor-gap:4px}.group-focus-within\:border-focus:is(:where(.group):focus-within *){border-color:var(--color-focus)}.group-focus-within\:opacity-100:is(:where(.group):focus-within *){opacity:1}@media (hover:hover){.group-hover\:text-fg:is(:where(.group):hover *){color:var(--color-fg)}}.group-data-open\:block:is(:where(.group)[data-open] *){display:block}.group-data-open\:hidden:is(:where(.group)[data-open] *){display:none}.placeholder\:text-fg-muted::placeholder{color:var(--color-fg-muted)}.after\:pointer-events-none:after{content:var(--tw-content);pointer-events:none}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:inset-x-0:after{content:var(--tw-content);inset-inline:calc(var(--spacing) * 0)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing) * 0)}.after\:bottom-0:after{content:var(--tw-content);bottom:calc(var(--spacing) * 0)}.after\:border-y:after{content:var(--tw-content);border-block-style:var(--tw-border-style);border-block-width:1px}.after\:border-line-strong:after{content:var(--tw-content);border-color:var(--color-line-strong)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media (hover:hover){.hover\:border-amber\/50:hover{border-color:#f0a45b80}@supports (color:color-mix(in lab, red, red)){.hover\:border-amber\/50:hover{border-color:color-mix(in oklab, var(--color-amber) 50%, transparent)}}.hover\:border-line-strong:hover{border-color:var(--color-line-strong)}.hover\:border-mint\/50:hover{border-color:#5ac8a880}@supports (color:color-mix(in lab, red, red)){.hover\:border-mint\/50:hover{border-color:color-mix(in oklab, var(--color-mint) 50%, transparent)}}.hover\:border-teal-500\/30:hover{border-color:#67b2d74d}@supports (color:color-mix(in lab, red, red)){.hover\:border-teal-500\/30:hover{border-color:color-mix(in oklab, var(--color-teal-500) 30%, transparent)}}.hover\:border-teal-500\/40:hover{border-color:#67b2d766}@supports (color:color-mix(in lab, red, red)){.hover\:border-teal-500\/40:hover{border-color:color-mix(in oklab, var(--color-teal-500) 40%, transparent)}}.hover\:border-teal-500\/50:hover{border-color:#67b2d780}@supports (color:color-mix(in lab, red, red)){.hover\:border-teal-500\/50:hover{border-color:color-mix(in oklab, var(--color-teal-500) 50%, transparent)}}.hover\:bg-amber\/10:hover{background-color:#f0a45b1a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-amber\/10:hover{background-color:color-mix(in oklab, var(--color-amber) 10%, transparent)}}.hover\:bg-mint\/10:hover{background-color:#5ac8a81a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-mint\/10:hover{background-color:color-mix(in oklab, var(--color-mint) 10%, transparent)}}.hover\:bg-overlay:hover{background-color:var(--color-overlay)}.hover\:bg-overlay-strong:hover{background-color:var(--color-overlay-strong)}.hover\:bg-page\/80:hover{background-color:#0f1729cc}@supports (color:color-mix(in lab, red, red)){.hover\:bg-page\/80:hover{background-color:color-mix(in oklab, var(--color-page) 80%, transparent)}}.hover\:bg-panel:hover{background-color:var(--color-panel)}.hover\:bg-panel\/80:hover{background-color:#252c3dcc}@supports (color:color-mix(in lab, red, red)){.hover\:bg-panel\/80:hover{background-color:color-mix(in oklab, var(--color-panel) 80%, transparent)}}.hover\:bg-rose-950\/60:hover{background-color:#4d021899}@supports (color:color-mix(in lab, red, red)){.hover\:bg-rose-950\/60:hover{background-color:color-mix(in oklab, var(--color-rose-950) 60%, transparent)}}.hover\:bg-teal-300:hover{background-color:var(--color-teal-300)}.hover\:bg-teal-500\/10:hover{background-color:#67b2d71a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-teal-500\/10:hover{background-color:color-mix(in oklab, var(--color-teal-500) 10%, transparent)}}.hover\:bg-teal-500\/15:hover{background-color:#67b2d726}@supports (color:color-mix(in lab, red, red)){.hover\:bg-teal-500\/15:hover{background-color:color-mix(in oklab, var(--color-teal-500) 15%, transparent)}}.hover\:bg-teal-500\/20:hover{background-color:#67b2d733}@supports (color:color-mix(in lab, red, red)){.hover\:bg-teal-500\/20:hover{background-color:color-mix(in oklab, var(--color-teal-500) 20%, transparent)}}.hover\:text-fg:hover{color:var(--color-fg)}.hover\:text-fg-2:hover{color:var(--color-fg-2)}.hover\:text-fg-3:hover{color:var(--color-fg-3)}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.hover\:shadow-black\/20:hover{--tw-shadow-color:#0003}@supports (color:color-mix(in lab, red, red)){.hover\:shadow-black\/20:hover{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-black) 20%, transparent) var(--tw-shadow-alpha), transparent)}}}.focus\:border-focus:focus{border-color:var(--color-focus)}.focus\:border-teal-300\/70:focus{border-color:#b5ddefb3}@supports (color:color-mix(in lab, red, red)){.focus\:border-teal-300\/70:focus{border-color:color-mix(in oklab, var(--color-teal-300) 70%, transparent)}}.focus\:border-teal-500:focus{border-color:var(--color-teal-500)}.focus\:ring-0:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-4:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-teal-500\/20:focus{--tw-ring-color:#67b2d733}@supports (color:color-mix(in lab, red, red)){.focus\:ring-teal-500\/20:focus{--tw-ring-color:color-mix(in oklab, var(--color-teal-500) 20%, transparent)}}.focus\:outline-2:focus{outline-style:var(--tw-outline-style);outline-width:2px}.focus\:outline-offset-2:focus{outline-offset:2px}.focus\:outline-focus:focus{outline-color:var(--color-focus)}.focus\:outline-teal-500:focus{outline-color:var(--color-teal-500)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-teal-500:focus-visible{outline-color:var(--color-teal-500)}.disabled\:cursor-default:disabled{cursor:default}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:border-line:disabled{border-color:var(--color-line)}.disabled\:text-fg-muted:disabled{color:var(--color-fg-muted)}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:opacity-60:disabled{opacity:.6}.disabled\:opacity-70:disabled{opacity:.7}@media (hover:hover){.disabled\:hover\:border-mint\/20:disabled:hover{border-color:#5ac8a833}@supports (color:color-mix(in lab, red, red)){.disabled\:hover\:border-mint\/20:disabled:hover{border-color:color-mix(in oklab, var(--color-mint) 20%, transparent)}}.disabled\:hover\:bg-mint\/5:disabled:hover{background-color:#5ac8a80d}@supports (color:color-mix(in lab, red, red)){.disabled\:hover\:bg-mint\/5:disabled:hover{background-color:color-mix(in oklab, var(--color-mint) 5%, transparent)}}.disabled\:hover\:bg-teal-500:disabled:hover{background-color:var(--color-teal-500)}.disabled\:hover\:bg-transparent:disabled:hover{background-color:#0000}.disabled\:hover\:text-fg-muted:disabled:hover{color:var(--color-fg-muted)}.disabled\:hover\:text-mint:disabled:hover{color:var(--color-mint)}}.data-closed\:scale-95[data-closed]{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.data-closed\:transform[data-closed]{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.data-closed\:opacity-0[data-closed]{opacity:0}.data-enter\:duration-100[data-enter]{--tw-duration:.1s;transition-duration:.1s}.data-enter\:ease-out[data-enter]{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.data-focus\:bg-overlay[data-focus]{background-color:var(--color-overlay)}.data-focus\:text-fg[data-focus]{color:var(--color-fg)}.data-focus\:outline-hidden[data-focus]{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.data-focus\:outline-hidden[data-focus]{outline-offset:2px;outline:2px solid #0000}}.data-leave\:duration-75[data-leave]{--tw-duration:75ms;transition-duration:75ms}.data-leave\:ease-in[data-leave]{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.data-selected\:text-teal-300[data-selected]{color:var(--color-teal-300)}@media (prefers-reduced-motion:no-preference){.motion-safe\:animate-pulse{animation:var(--animate-pulse)}}@media (min-width:40rem){.sm\:-mx-6{margin-inline:calc(var(--spacing) * -6)}.sm\:inline{display:inline}.sm\:px-3{padding-inline:calc(var(--spacing) * 3)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}}@media (min-width:48rem){.md\:ml-6{margin-left:calc(var(--spacing) * 6)}.md\:block{display:block}.md\:hidden{display:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:64rem){.lg\:-mx-8{margin-inline:calc(var(--spacing) * -8)}.lg\:grid-cols-\[240px_minmax\(0\,1fr\)\]{grid-template-columns:240px minmax(0,1fr)}.lg\:p-8{padding:calc(var(--spacing) * 8)}.lg\:px-8{padding-inline:calc(var(--spacing) * 8)}}.prose-headings\:text-fg-2 :where(h1,h2,h3,h4,h5,h6,th):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--color-fg-2)}.prose-a\:text-teal-500 :where(a):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--color-teal-500)}.prose-strong\:text-fg-2 :where(strong):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--color-fg-2)}.prose-code\:rounded :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){border-radius:.25rem}.prose-code\:bg-overlay-strong :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--color-overlay-strong)}.prose-code\:px-1 :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){padding-inline:calc(var(--spacing) * 1)}.prose-code\:py-0\.5 :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){padding-block:calc(var(--spacing) * .5)}.prose-code\:font-mono :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-family:var(--font-mono)}.prose-code\:text-\[0\.8em\] :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){font-size:.8em}.prose-code\:text-fg-3 :where(code):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--color-fg-3)}.prose-code\:before\:content-none :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):before,.prose-code\:after\:content-none :where(code):not(:where([class~=not-prose],[class~=not-prose] *)):after{content:var(--tw-content);--tw-content:none;content:none}.prose-pre\:bg-overlay-strong :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){background-color:var(--color-overlay-strong)}.prose-pre\:text-fg-3 :where(pre):not(:where([class~=not-prose],[class~=not-prose] *)){color:var(--color-fg-3)}.\[\&_svg\]\:mx-auto svg{margin-inline:auto}.\[\&_svg\]\:block svg{display:block}}.light{--color-page:#fff;--color-panel:#f8fafc;--color-panel-alt:#f1f5f9;--color-overlay:#0000000a;--color-overlay-strong:#0000001a;--color-fg:#0f172a;--color-fg-2:#1e293b;--color-fg-3:#475569;--color-fg-muted:#94a3b8;--color-line:#00000014;--color-line-strong:#00000026;--color-focus:#0e749080;--color-mint:#0d9488;--color-amber:#d97706;--color-coral:#dc2626;--color-teal-300:#0891b2;--color-teal-500:#0e7490}:root{--chart-gridline:#ffffff0a;--chart-axis-label:#4b5768}.light{--chart-gridline:#0000000f;--chart-axis-label:#475569}.bg-atmosphere{background-color:var(--color-page);background-image:radial-gradient(120% 60% at 15% 5%,#357f9e1f 0%,#0000 50%),radial-gradient(80% 50% at 85% 90%,#5ac8a812 0%,#0000 45%);background-attachment:fixed}.light .bg-atmosphere,.light.bg-atmosphere{background-image:radial-gradient(120% 60% at 15% 5%,#0e74900f 0%,#0000 50%),radial-gradient(80% 50% at 85% 90%,#0d94880a 0%,#0000 45%)}.bg-atmosphere:before{content:"";z-index:1;pointer-events:none;opacity:.07;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");background-repeat:repeat;background-size:200px 200px;position:fixed;inset:0}.light .bg-atmosphere:before,.light.bg-atmosphere:before{opacity:.03}:root{--diffs-font-family:"JetBrains Mono", ui-monospace, monospace;--diffs-header-font-family:"Geist", ui-sans-serif, system-ui, sans-serif;--diffs-font-size:13px;--diffs-line-height:20px;--diffs-bg-buffer-override:#0f1729;--diffs-bg-context-override:#161d2e;--diffs-bg-hover-override:#1c2438;--diffs-bg-separator-override:#252c3d;--diffs-fg-number-override:#4b5768;--diffs-addition-color-override:#5ac8a8;--diffs-fg-number-addition-override:#5ac8a880;--diffs-deletion-color-override:#e86b6b;--diffs-fg-number-deletion-override:#e86b6b80}.dark .graph-svg text{fill:#c6d4e0}.dark .graph-svg [stroke=\#357f9e]{stroke:#67b2d7}.dark .graph-svg [stroke=\#666666]{stroke:#5a7a94}.dark .graph-svg polygon[fill=\#357f9e]{fill:#67b2d7}.dark .graph-svg polygon[fill=\#666666]{fill:#5a7a94}.dark .graph-svg ellipse[fill=\#ffffff],.dark .graph-svg polygon[fill=\#ffffff]{fill:#1a2b3c}.dark .graph-svg ellipse[stroke=\#357f9e],.dark .graph-svg polygon[stroke=\#357f9e]{stroke:#67b2d7}.dark .graph-svg [fill=\#1a1a1a]{fill:#c6d4e0}.light{--diffs-bg-buffer-override:#fff;--diffs-bg-context-override:#f8fafc;--diffs-bg-hover-override:#f1f5f9;--diffs-bg-separator-override:#e2e8f0;--diffs-fg-number-override:#94a3b8;--diffs-addition-color-override:#0d9488;--diffs-fg-number-addition-override:#0d948880;--diffs-deletion-color-override:#dc2626;--diffs-fg-number-deletion-override:#dc262680}@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-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-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:"";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:"";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:"";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:"";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}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}} \ No newline at end of file diff --git a/lib/crates/fabro-spa/assets/assets/entry-mf9xvex6.js b/lib/crates/fabro-spa/assets/assets/entry-mf9xvex6.js new file mode 100644 index 000000000..85ad9b199 --- /dev/null +++ b/lib/crates/fabro-spa/assets/assets/entry-mf9xvex6.js @@ -0,0 +1,2397 @@ +import{X as u,Y as _8,Z as o5,_ as f}from"./chunk-q07bg6gn.js";var Q0=_8((Jl,GU)=>{(function(){function Z(I,e){Object.defineProperty(q.prototype,I,{get:function(){console.warn("%s(...) is deprecated in plain JavaScript React classes. %s",e[0],e[1])}})}function Y(I){if(I===null||typeof I!=="object")return null;return I=z1&&I[z1]||I["@@iterator"],typeof I==="function"?I:null}function J(I,e){I=(I=I.constructor)&&(I.displayName||I.name)||"ReactClass";var _0=I+"."+e;v0[_0]||(console.error("Can't call %s on a component that is not yet mounted. This is a no-op, but it might indicate a bug in your application. Instead, assign to `this.state` directly or define a `state = {};` class property with the desired state in the %s component.",e,I),v0[_0]=!0)}function q(I,e,_0){this.props=I,this.context=e,this.refs=e5,this.updater=_0||C1}function z(){}function B(I,e,_0){this.props=I,this.context=e,this.refs=e5,this.updater=_0||C1}function W(){}function U(I){return""+I}function G(I){try{U(I);var e=!1}catch(S0){e=!0}if(e){e=console;var _0=e.error,R0=typeof Symbol==="function"&&Symbol.toStringTag&&I[Symbol.toStringTag]||I.constructor.name||"Object";return _0.call(e,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",R0),U(I)}}function w(I){if(I==null)return null;if(typeof I==="function")return I.$$typeof===m6?null:I.displayName||I.name||null;if(typeof I==="string")return I;switch(I){case B0:return"Fragment";case U0:return"Profiler";case k:return"StrictMode";case u0:return"Suspense";case w0:return"SuspenseList";case v1:return"Activity"}if(typeof I==="object")switch(typeof I.tag==="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),I.$$typeof){case i:return"Portal";case M0:return I.displayName||"Context";case H0:return(I._context.displayName||"Context")+".Consumer";case L0:var e=I.render;return I=I.displayName,I||(I=e.displayName||e.name||"",I=I!==""?"ForwardRef("+I+")":"ForwardRef"),I;case c0:return e=I.displayName||null,e!==null?e:w(I.type)||"Memo";case o0:e=I._payload,I=I._init;try{return w(I(e))}catch(_0){}}return null}function H(I){if(I===B0)return"<>";if(typeof I==="object"&&I!==null&&I.$$typeof===o0)return"<...>";try{var e=w(I);return e?"<"+e+">":"<...>"}catch(_0){return"<...>"}}function O(){var I=K1.A;return I===null?null:I.getOwner()}function A(){return Error("react-stack-top-frame")}function _(I){if(U4.call(I,"key")){var e=Object.getOwnPropertyDescriptor(I,"key").get;if(e&&e.isReactWarning)return!1}return I.key!==void 0}function P(I,e){function _0(){N6||(N6=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",e))}_0.isReactWarning=!0,Object.defineProperty(I,"key",{get:_0,configurable:!0})}function L(){var I=w(this.type);return f4[I]||(f4[I]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),I=this.props.ref,I!==void 0?I:null}function R(I,e,_0,R0,S0,e0){var x0=_0.ref;return I={$$typeof:Z0,type:I,key:e,props:_0,_owner:R0},(x0!==void 0?x0:null)!==null?Object.defineProperty(I,"ref",{enumerable:!1,get:L}):Object.defineProperty(I,"ref",{enumerable:!1,value:null}),I._store={},Object.defineProperty(I._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(I,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(I,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:S0}),Object.defineProperty(I,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:e0}),Object.freeze&&(Object.freeze(I.props),Object.freeze(I)),I}function T(I,e){return e=R(I.type,e,I.props,I._owner,I._debugStack,I._debugTask),I._store&&(e._store.validated=I._store.validated),e}function C(I){v(I)?I._store&&(I._store.validated=1):typeof I==="object"&&I!==null&&I.$$typeof===o0&&(I._payload.status==="fulfilled"?v(I._payload.value)&&I._payload.value._store&&(I._payload.value._store.validated=1):I._store&&(I._store.validated=1))}function v(I){return typeof I==="object"&&I!==null&&I.$$typeof===Z0}function b(I){var e={"=":"=0",":":"=2"};return"$"+I.replace(/[=:]/g,function(_0){return e[_0]})}function S(I,e){return typeof I==="object"&&I!==null&&I.key!=null?(G(I.key),b(""+I.key)):e.toString(36)}function j(I){switch(I.status){case"fulfilled":return I.value;case"rejected":throw I.reason;default:switch(typeof I.status==="string"?I.then(W,W):(I.status="pending",I.then(function(e){I.status==="pending"&&(I.status="fulfilled",I.value=e)},function(e){I.status==="pending"&&(I.status="rejected",I.reason=e)})),I.status){case"fulfilled":return I.value;case"rejected":throw I.reason}}throw I}function E(I,e,_0,R0,S0){var e0=typeof I;if(e0==="undefined"||e0==="boolean")I=null;var x0=!1;if(I===null)x0=!0;else switch(e0){case"bigint":case"string":case"number":x0=!0;break;case"object":switch(I.$$typeof){case Z0:case i:x0=!0;break;case o0:return x0=I._init,E(x0(I._payload),e,_0,R0,S0)}}if(x0){x0=I,S0=S0(x0);var Q1=R0===""?"."+S(x0,0):R0;return w1(S0)?(_0="",Q1!=null&&(_0=Q1.replace(e2,"$&/")+"/"),E(S0,e,_0,"",function(N5){return N5})):S0!=null&&(v(S0)&&(S0.key!=null&&(x0&&x0.key===S0.key||G(S0.key)),_0=T(S0,_0+(S0.key==null||x0&&x0.key===S0.key?"":(""+S0.key).replace(e2,"$&/")+"/")+Q1),R0!==""&&x0!=null&&v(x0)&&x0.key==null&&x0._store&&!x0._store.validated&&(_0._store.validated=2),S0=_0),e.push(S0)),1}if(x0=0,Q1=R0===""?".":R0+":",w1(I))for(var y0=0;y0 import('./MyComponent')) + +Did you accidentally put curly braces around the import?`,e),"default"in e||console.error(`lazy: Expected the result of a dynamic import() call. Instead received: %s + +Your code should look like: + const MyComponent = lazy(() => import('./MyComponent'))`,e),e.default;throw I._result}function x(){var I=K1.H;return I===null&&console.error(`Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons: +1. You might have mismatching versions of React and the renderer (such as React DOM) +2. You might be breaking the Rules of Hooks +3. You might have more than one copy of React in the same app +See https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.`),I}function l(){K1.asyncTransitions--}function J0(I){if(G4===null)try{var e=("require"+Math.random()).slice(0,7);G4=(GU&&GU[e]).call(GU,"timers").setImmediate}catch(_0){G4=function(R0){$2===!1&&($2=!0,typeof MessageChannel>"u"&&console.error("This browser does not have a MessageChannel implementation, so enqueuing tasks via await act(async () => ...) will fail. Please file an issue at https://github.com/facebook/react/issues if you encounter this warning."));var S0=new MessageChannel;S0.port1.onmessage=R0,S0.port2.postMessage(void 0)}}return G4(I)}function K0(I){return 1 ...) without await. This could lead to unexpected testing behaviour, interleaving multiple act calls and mixing their scopes. You should - await act(async () => ...);"))}),{then:function(y0,N5){S0=!0,x0.then(function(q5){if(n(e,_0),_0===0){try{X0(R0),J0(function(){return p(q5,y0,N5)})}catch(Z2){K1.thrownErrors.push(Z2)}if(0 ...)"))}),K1.actQueue=null),0K1.recentlyCreatedOwnerStacks++;return R(I,S0,R0,O(),y0?Error("react-stack-top-frame"):k2,y0?S1(H(I)):H6)},Jl.createRef=function(){var I={current:null};return Object.seal(I),I},Jl.forwardRef=function(I){I!=null&&I.$$typeof===c0?console.error("forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))."):typeof I!=="function"?console.error("forwardRef requires a render function but was given %s.",I===null?"null":typeof I):I.length!==0&&I.length!==2&&console.error("forwardRef render functions accept exactly two parameters: props and ref. %s",I.length===1?"Did you forget to use the ref parameter?":"Any additional parameter will be undefined."),I!=null&&I.defaultProps!=null&&console.error("forwardRef render functions do not support defaultProps. Did you accidentally pass a React component?");var e={$$typeof:L0,render:I},_0;return Object.defineProperty(e,"displayName",{enumerable:!1,configurable:!0,get:function(){return _0},set:function(R0){_0=R0,I.name||I.displayName||(Object.defineProperty(I,"name",{value:R0}),I.displayName=R0)}}),e},Jl.isValidElement=v,Jl.lazy=function(I){I={_status:-1,_result:I};var e={$$typeof:o0,_payload:I,_init:o},_0={name:"lazy",start:-1,end:-1,value:null,owner:null,debugStack:Error("react-stack-top-frame"),debugTask:console.createTask?console.createTask("lazy()"):null};return I._ioInfo=_0,e._debugInfo=[{awaited:_0}],e},Jl.memo=function(I,e){I==null&&console.error("memo: The first argument must be a component. Instead received: %s",I===null?"null":typeof I),e={$$typeof:c0,type:I,compare:e===void 0?null:e};var _0;return Object.defineProperty(e,"displayName",{enumerable:!1,configurable:!0,get:function(){return _0},set:function(R0){_0=R0,I.name||I.displayName||(Object.defineProperty(I,"name",{value:R0}),I.displayName=R0)}}),e},Jl.startTransition=function(I){var e=K1.T,_0={};_0._updatedFibers=new Set,K1.T=_0;try{var R0=I(),S0=K1.S;S0!==null&&S0(_0,R0),typeof R0==="object"&&R0!==null&&typeof R0.then==="function"&&(K1.asyncTransitions++,R0.then(l,l),R0.then(W,R5))}catch(e0){R5(e0)}finally{e===null&&_0._updatedFibers&&(I=_0._updatedFibers.size,_0._updatedFibers.clear(),10{(function(){function Z(){if(b=!1,g){var p=Xl.unstable_now();l=p;var X0=!0;try{Z:{C=!1,v&&(v=!1,j(o),o=-1),T=!0;var Z0=R;try{Y:{B(p);for(L=J(A);L!==null&&!(L.expirationTime>p&&U());){var i=L.callback;if(typeof i==="function"){L.callback=null,R=L.priorityLevel;var B0=i(L.expirationTime<=p);if(p=Xl.unstable_now(),typeof B0==="function"){L.callback=B0,B(p),X0=!0;break Y}L===J(A)&&q(A),B(p)}else q(A);L=J(A)}if(L!==null)X0=!0;else{var k=J(_);k!==null&&G(W,k.startTime-p),X0=!1}}break Z}finally{L=null,R=Z0,T=!1}X0=void 0}}finally{X0?J0():g=!1}}}function Y(p,X0){var Z0=p.length;p.push(X0);Z:for(;0>>1,B0=p[i];if(0>>1;iz(H0,Z0))M0z(L0,H0)?(p[i]=L0,p[M0]=Z0,i=M0):(p[i]=H0,p[U0]=Z0,i=U0);else if(M0z(L0,Z0))p[i]=L0,p[M0]=Z0,i=M0;else break Z}}return X0}function z(p,X0){var Z0=p.sortIndex-X0.sortIndex;return Z0!==0?Z0:p.id-X0.id}function B(p){for(var X0=J(_);X0!==null;){if(X0.callback===null)q(_);else if(X0.startTime<=p)q(_),X0.sortIndex=X0.expirationTime,Y(A,X0);else break;X0=J(_)}}function W(p){if(v=!1,B(p),!C)if(J(A)!==null)C=!0,g||(g=!0,J0());else{var X0=J(_);X0!==null&&G(W,X0.startTime-p)}}function U(){return b?!0:Xl.unstable_now()-lp||125i?(p.sortIndex=Z0,Y(_,p),J(A)===null&&p===J(_)&&(v?(j(o),o=-1):v=!0,G(W,Z0-i))):(p.sortIndex=B0,Y(A,p),C||T||(C=!0,g||(g=!0,J0()))),p},Xl.unstable_shouldYield=U,Xl.unstable_wrapCallback=function(p){var X0=R;return function(){var Z0=R;R=X0;try{return p.apply(this,arguments)}finally{R=Z0}}},typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop==="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error())})()});var NE=_8((ql)=>{var gA=u(Q0());(function(){function Z(){}function Y(H){return""+H}function J(H,O,A){var _=3` tag.%s',A),typeof H==="string"&&typeof O==="object"&&O!==null&&typeof O.as==="string"){A=O.as;var _=q(A,O.crossOrigin);U.d.L(H,A,{crossOrigin:_,integrity:typeof O.integrity==="string"?O.integrity:void 0,nonce:typeof O.nonce==="string"?O.nonce:void 0,type:typeof O.type==="string"?O.type:void 0,fetchPriority:typeof O.fetchPriority==="string"?O.fetchPriority:void 0,referrerPolicy:typeof O.referrerPolicy==="string"?O.referrerPolicy:void 0,imageSrcSet:typeof O.imageSrcSet==="string"?O.imageSrcSet:void 0,imageSizes:typeof O.imageSizes==="string"?O.imageSizes:void 0,media:typeof O.media==="string"?O.media:void 0})}},ql.preloadModule=function(H,O){var A="";typeof H==="string"&&H||(A+=" The `href` argument encountered was "+z(H)+"."),O!==void 0&&typeof O!=="object"?A+=" The `options` argument encountered was "+z(O)+".":O&&("as"in O)&&typeof O.as!=="string"&&(A+=" The `as` option encountered was "+z(O.as)+"."),A&&console.error('ReactDOM.preloadModule(): Expected two arguments, a non-empty `href` string and, optionally, an `options` object with an `as` property valid for a `` tag.%s',A),typeof H==="string"&&(O?(A=q(O.as,O.crossOrigin),U.d.m(H,{as:typeof O.as==="string"&&O.as!=="script"?O.as:void 0,crossOrigin:A,integrity:typeof O.integrity==="string"?O.integrity:void 0})):U.d.m(H))},ql.requestFormReset=function(H){U.d.r(H)},ql.unstable_batchedUpdates=function(H,O){return H(O)},ql.useFormState=function(H,O,A){return W().useFormState(H,O,A)},ql.useFormStatus=function(){return W().useHostTransitionStatus()},ql.version="19.2.4",typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"&&typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop==="function"&&__REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error())})()});var A3=_8((i90,HE)=>{var zl=u(NE());HE.exports=zl});var OE=_8((Kl)=>{var r1=u(wE()),PJ=u(Q0()),uA=u(A3());(function(){function Z(Q,X){for(Q=Q.memoizedState;Q!==null&&0=X.length)return $;var M=X[K],N=R2(Q)?Q.slice():E1({},Q);return N[M]=Y(Q[M],X,K+1,$),N}function J(Q,X,K){if(X.length!==K.length)console.warn("copyWithRename() expects paths of the same length");else{for(var $=0;$Q8?console.error("Unexpected pop."):(X!==HO[Q8]&&console.error("Unexpected Fiber popped."),Q.current=NO[Q8],NO[Q8]=null,HO[Q8]=null,Q8--)}function K0(Q,X,K){Q8++,NO[Q8]=Q.current,HO[Q8]=K,Q.current=X}function n(Q){return Q===null&&console.error("Expected host context to exist. This error is likely caused by a bug in React. Please file an issue."),Q}function p(Q,X){K0(w9,X,Q),K0(Bz,Q,Q),K0(M9,null,Q);var K=X.nodeType;switch(K){case 9:case 11:K=K===9?"#document":"#fragment",X=(X=X.documentElement)?(X=X.namespaceURI)?tT(X):H8:H8;break;default:if(K=X.tagName,X=X.namespaceURI)X=tT(X),X=nT(X,K);else switch(K){case"svg":X=_J;break;case"math":X=qU;break;default:X=H8}}K=K.toLowerCase(),K=lL(null,K),K={context:X,ancestorInfo:K},J0(M9,Q),K0(M9,K,Q)}function X0(Q){J0(M9,Q),J0(Bz,Q),J0(w9,Q)}function Z0(){return n(M9.current)}function i(Q){Q.memoizedState!==null&&K0(B$,Q,Q);var X=n(M9.current),K=Q.type,$=nT(X.context,K);K=lL(X.ancestorInfo,K),$={context:$,ancestorInfo:K},X!==$&&(K0(Bz,Q,Q),K0(M9,$,Q))}function B0(Q){Bz.current===Q&&(J0(M9,Q),J0(Bz,Q)),B$.current===Q&&(J0(B$,Q),ez._currentValue=UY)}function k(){}function U0(){if(Wz===0){DC=console.log,bC=console.info,EC=console.warn,yC=console.error,IC=console.group,jC=console.groupCollapsed,SC=console.groupEnd;var Q={configurable:!0,enumerable:!0,value:k,writable:!0};Object.defineProperties(console,{info:Q,log:Q,warn:Q,error:Q,group:Q,groupCollapsed:Q,groupEnd:Q})}Wz++}function H0(){if(Wz--,Wz===0){var Q={configurable:!0,enumerable:!0,writable:!0};Object.defineProperties(console,{log:E1({},Q,{value:DC}),info:E1({},Q,{value:bC}),warn:E1({},Q,{value:EC}),error:E1({},Q,{value:yC}),group:E1({},Q,{value:IC}),groupCollapsed:E1({},Q,{value:jC}),groupEnd:E1({},Q,{value:SC})})}0>Wz&&console.error("disabledDepth fell below zero. This is a bug in React. Please file an issue.")}function M0(Q){var X=Error.prepareStackTrace;if(Error.prepareStackTrace=void 0,Q=Q.stack,Error.prepareStackTrace=X,Q.startsWith(`Error: react-stack-top-frame +`)&&(Q=Q.slice(29)),X=Q.indexOf(` +`),X!==-1&&(Q=Q.slice(X+1)),X=Q.indexOf("react_stack_bottom_frame"),X!==-1&&(X=Q.lastIndexOf(` +`,X)),X!==-1)Q=Q.slice(0,X);else return"";return Q}function L0(Q){if(OO===void 0)try{throw Error()}catch(K){var X=K.stack.trim().match(/\n( *(at )?)/);OO=X&&X[1]||"",xC=-1)":-1F||y[N]!==a[F]){var s=` +`+y[N].replace(" at new "," at ");return Q.displayName&&s.includes("")&&(s=s.replace("",Q.displayName)),typeof Q==="function"&&_O.set(Q,s),s}while(1<=N&&0<=F);break}}}finally{AO=!1,G0.H=$,H0(),Error.prepareStackTrace=K}return y=(y=Q?Q.displayName||Q.name:"")?L0(y):"",typeof Q==="function"&&_O.set(Q,y),y}function w0(Q,X){switch(Q.tag){case 26:case 27:case 5:return L0(Q.type);case 16:return L0("Lazy");case 13:return Q.child!==X&&X!==null?L0("Suspense Fallback"):L0("Suspense");case 19:return L0("SuspenseList");case 0:case 15:return u0(Q.type,!1);case 11:return u0(Q.type.render,!1);case 1:return u0(Q.type,!0);case 31:return L0("Activity");default:return""}}function c0(Q){try{var X="",K=null;do{X+=w0(Q,K);var $=Q._debugInfo;if($)for(var M=$.length-1;0<=M;M--){var N=$[M];if(typeof N.name==="string"){var F=X;Z:{var{name:V,env:D,debugLocation:y}=N;if(y!=null){var a=M0(y),s=a.lastIndexOf(` +`),c=s===-1?a:a.slice(s+1);if(c.indexOf(V)!==-1){var q0=` +`+c;break Z}}q0=L0(V+(D?" ["+D+"]":""))}X=F+q0}}K=Q,Q=Q.return}while(Q);return X}catch(T0){return` +Error generating stack: `+T0.message+` +`+T0.stack}}function o0(Q){return(Q=Q?Q.displayName||Q.name:"")?L0(Q):""}function v1(){if(P4===null)return null;var Q=P4._debugOwner;return Q!=null?o(Q):null}function z1(){if(P4===null)return"";var Q=P4;try{var X="";switch(Q.tag===6&&(Q=Q.return),Q.tag){case 26:case 27:case 5:X+=L0(Q.type);break;case 13:X+=L0("Suspense");break;case 19:X+=L0("SuspenseList");break;case 31:X+=L0("Activity");break;case 30:case 0:case 15:case 1:Q._debugOwner||X!==""||(X+=o0(Q.type));break;case 11:Q._debugOwner||X!==""||(X+=o0(Q.type.render))}for(;Q;)if(typeof Q.tag==="number"){var K=Q;Q=K._debugOwner;var $=K._debugStack;if(Q&&$){var M=M0($);M!==""&&(X+=` +`+M)}}else if(Q.debugStack!=null){var N=Q.debugStack;(Q=Q.owner)&&N&&(X+=` +`+M0(N))}else break;var F=X}catch(V){F=` +Error generating stack: `+V.message+` +`+V.stack}return F}function v0(Q,X,K,$,M,N,F){var V=P4;C1(Q);try{return Q!==null&&Q._debugTask?Q._debugTask.run(X.bind(null,K,$,M,N,F)):X(K,$,M,N,F)}finally{C1(V)}throw Error("runWithFiberInDEV should never be called in production. This is a bug in React.")}function C1(Q){G0.getCurrentStack=Q===null?null:z1,B3=!1,P4=Q}function Y5(Q){return typeof Symbol==="function"&&Symbol.toStringTag&&Q[Symbol.toStringTag]||Q.constructor.name||"Object"}function e5(Q){try{return w5(Q),!1}catch(X){return!0}}function w5(Q){return""+Q}function w1(Q,X){if(e5(Q))return console.error("The provided `%s` attribute is an unsupported type %s. This value must be coerced to a string before using it here.",X,Y5(Q)),w5(Q)}function m6(Q,X){if(e5(Q))return console.error("The provided `%s` CSS property is an unsupported type %s. This value must be coerced to a string before using it here.",X,Y5(Q)),w5(Q)}function K1(Q){if(e5(Q))return console.error("Form field values (value, checked, defaultValue, or defaultChecked props) must be strings, not %s. This value must be coerced to a string before using it here.",Y5(Q)),w5(Q)}function U4(Q){if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u")return!1;var X=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(X.isDisabled)return!0;if(!X.supportsFiber)return console.error("The installed version of React DevTools is too old and will not work with the current version of React. Please update React DevTools. https://react.dev/link/react-devtools"),!0;try{mQ=X.inject(Q),A7=X}catch(K){console.error("React instrumentation encountered an error: %o.",K)}return X.checkDCE?!0:!1}function S1(Q){if(typeof Fc==="function"&&Pc(Q),A7&&typeof A7.setStrictMode==="function")try{A7.setStrictMode(mQ,Q)}catch(X){W3||(W3=!0,console.error("React instrumentation encountered an error: %o",X))}}function N6(Q){return Q>>>=0,Q===0?32:31-(Vc(Q)/Lc|0)|0}function n2(Q){var X=Q&42;if(X!==0)return X;switch(Q&-Q){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return Q&261888;case 262144:case 524288:case 1048576:case 2097152:return Q&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return Q&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return console.error("Should have found matching lanes. This is a bug in React."),Q}}function f4(Q,X,K){var $=Q.pendingLanes;if($===0)return 0;var M=0,N=Q.suspendedLanes,F=Q.pingedLanes;Q=Q.warmLanes;var V=$&134217727;return V!==0?($=V&~N,$!==0?M=n2($):(F&=V,F!==0?M=n2(F):K||(K=V&~Q,K!==0&&(M=n2(K))))):(V=$&~N,V!==0?M=n2(V):F!==0?M=n2(F):K||(K=$&~Q,K!==0&&(M=n2(K)))),M===0?0:X!==0&&X!==M&&(X&N)===0&&(N=M&-M,K=X&-X,N>=K||N===32&&(K&4194048)!==0)?X:M}function k2(Q,X){return(Q.pendingLanes&~(Q.suspendedLanes&~Q.pingedLanes)&X)===0}function H6(Q,X){switch(Q){case 1:case 2:case 4:case 8:case 64:return X+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return X+5000;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return console.error("Should have found matching lanes. This is a bug in React."),-1}}function O6(){var Q=U$;return U$<<=1,(U$&62914560)===0&&(U$=4194304),Q}function e2(Q){for(var X=[],K=0;31>K;K++)X.push(Q);return X}function R5(Q,X){Q.pendingLanes|=X,X!==268435456&&(Q.suspendedLanes=0,Q.pingedLanes=0,Q.warmLanes=0)}function $2(Q,X,K,$,M,N){var F=Q.pendingLanes;Q.pendingLanes=K,Q.suspendedLanes=0,Q.pingedLanes=0,Q.warmLanes=0,Q.expiredLanes&=K,Q.entangledLanes&=K,Q.errorRecoveryDisabledLanes&=K,Q.shellSuspendCounter=0;var{entanglements:V,expirationTimes:D,hiddenUpdates:y}=Q;for(K=F&~K;0"u")return null;try{return Q.activeElement||Q.body}catch(X){return Q.body}}function j0(Q){return Q.replace(Dc,function(X){return"\\"+X.charCodeAt(0).toString(16)+" "})}function d0(Q,X){X.checked===void 0||X.defaultChecked===void 0||mC||(console.error("%s contains an input of type %s with both checked and defaultChecked props. Input elements must be either controlled or uncontrolled (specify either the checked prop, or the defaultChecked prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components",v1()||"A component",X.type),mC=!0),X.value===void 0||X.defaultValue===void 0||hC||(console.error("%s contains an input of type %s with both value and defaultValue props. Input elements must be either controlled or uncontrolled (specify either the value prop, or the defaultValue prop, but not both). Decide between using a controlled or uncontrolled input element and remove one of these props. More info: https://react.dev/link/controlled-components",v1()||"A component",X.type),hC=!0)}function r0(Q,X,K,$,M,N,F,V){if(Q.name="",F!=null&&typeof F!=="function"&&typeof F!=="symbol"&&typeof F!=="boolean"?(w1(F,"type"),Q.type=F):Q.removeAttribute("type"),X!=null)if(F==="number"){if(X===0&&Q.value===""||Q.value!=X)Q.value=""+t(X)}else Q.value!==""+t(X)&&(Q.value=""+t(X));else F!=="submit"&&F!=="reset"||Q.removeAttribute("value");X!=null?l0(Q,F,t(X)):K!=null?l0(Q,F,t(K)):$!=null&&Q.removeAttribute("value"),M==null&&N!=null&&(Q.defaultChecked=!!N),M!=null&&(Q.checked=M&&typeof M!=="function"&&typeof M!=="symbol"),V!=null&&typeof V!=="function"&&typeof V!=="symbol"&&typeof V!=="boolean"?(w1(V,"name"),Q.name=""+t(V)):Q.removeAttribute("name")}function Z1(Q,X,K,$,M,N,F,V){if(N!=null&&typeof N!=="function"&&typeof N!=="symbol"&&typeof N!=="boolean"&&(w1(N,"type"),Q.type=N),X!=null||K!=null){if(!(N!=="submit"&&N!=="reset"||X!==void 0&&X!==null)){P0(Q);return}K=K!=null?""+t(K):"",X=X!=null?""+t(X):K,V||X===Q.value||(Q.value=X),Q.defaultValue=X}$=$!=null?$:M,$=typeof $!=="function"&&typeof $!=="symbol"&&!!$,Q.checked=V?Q.checked:!!$,Q.defaultChecked=!!$,F!=null&&typeof F!=="function"&&typeof F!=="symbol"&&typeof F!=="boolean"&&(w1(F,"name"),Q.name=F),P0(Q)}function l0(Q,X,K){X==="number"&&I0(Q.ownerDocument)===Q||Q.defaultValue===""+K||(Q.defaultValue=""+K)}function p1(Q,X){X.value==null&&(typeof X.children==="object"&&X.children!==null?PJ.Children.forEach(X.children,function(K){K==null||typeof K==="string"||typeof K==="number"||typeof K==="bigint"||cC||(cC=!0,console.error("Cannot infer the option value of complex children. Pass a `value` prop or use a plain string as children to