From 04d04d8c0da3d3a770cb08320c0178de5769481f Mon Sep 17 00:00:00 2001 From: Arthur Souza Rodrigues Date: Sun, 8 Feb 2026 14:09:02 -0500 Subject: [PATCH 001/103] feat(docx-io): add tracked changes and comments import/export Add full round-trip support for DOCX tracked changes (suggestions) and comments with threading. This enables import/export of Word documents while preserving revision history and comment discussions. Import pipeline: - Custom mammoth.js fork emits [[DOCX_*:...]] tokens for ins/del/comments - importTrackChanges.ts parses tokens, applies suggestion marks - importComments.ts parses comment tokens, creates discussion structures - importDocx.ts orchestrates full pipeline with token cleanup - searchRange.ts provides text-based range finding for token placement Export pipeline: - exportTrackChanges.ts injects tracking tokens into serialized HTML - exportComments.ts handles comment-specific OOXML generation - html-to-docx enhanced with comments.xml, commentsExtended.xml, commentsIds.xml, commentsExtensible.xml, and people.xml generation - Proper paraId threading for reply chains App integration: - import-toolbar-button.tsx: full DOCX import with user registration - export-toolbar-button.tsx: export with discussions and suggestions - suggestion-node-docx.tsx: DOCX-safe suggestion rendering (no ins/del) - discussion-kit.tsx: paraId fields for round-trip fidelity - docx-export-kit.tsx: SuggestionLeafDocx override for clean export Key features: - Suggestion authorship preserved through round-trip - Comment threading via paraId/parentParaId linking - UTC date handling for cross-timezone compatibility - Overlapping comment ranges supported - ImportedUser type for user store registration --- .../editor/plugins/discussion-kit.tsx | 6 + .../editor/plugins/docx-export-kit.tsx | 3 + .../src/registry/lib/discussion-ids.spec.ts | 37 + apps/www/src/registry/lib/discussion-ids.ts | 18 + apps/www/src/registry/ui/block-discussion.tsx | 50 +- apps/www/src/registry/ui/comment.tsx | 23 +- .../src/registry/ui/export-toolbar-button.tsx | 38 +- .../src/registry/ui/import-toolbar-button.tsx | 103 +- .../src/registry/ui/suggestion-node-docx.tsx | 22 + .../www/src/registry/ui/table-node-static.tsx | 31 + packages/docx-io/src/lib/DocxIOPlugin.tsx | 76 + .../__tests__/complex-tracking-export.spec.ts | 87 + .../src/lib/__tests__/docx-io-demo.spec.ts | 129 + .../lib/__tests__/export-comment-ids.spec.ts | 336 + .../__tests__/export-ooxml-comments.spec.ts | 184 + .../lib/__tests__/export-replies-id.spec.ts | 133 + .../src/lib/__tests__/export-replies.spec.ts | 146 + .../__tests__/preprocessMammothHtml.spec.ts | 20 + .../src/lib/__tests__/roundtrip-audit.spec.ts | 198 + .../src/lib/__tests__/roundtrip.spec.tsx | 496 +- .../src/lib/__tests__/testDocxImporter.tsx | 14 +- .../__tests__/xml-builder-falsy-ids.spec.ts | 54 + .../docx-io/src/lib/applyDocxTracking.spec.ts | 1149 + .../docx-io/src/lib/docx-export-plugin.tsx | 75 +- packages/docx-io/src/lib/exportComments.ts | 29 + .../lib/{html-to-docx.ts => exportDocx.ts} | 46 +- .../docx-io/src/lib/exportTrackChanges.ts | 979 + .../src/lib/html-to-docx/comment-templates.ts | 35 + .../docx-io/src/lib/html-to-docx/constants.ts | 39 + .../src/lib/html-to-docx/docx-document.ts | 395 +- .../src/lib/html-to-docx/helpers/index.ts | 29 +- .../helpers/render-document-file.ts | 8 +- .../html-to-docx/helpers/xml-builder.spec.ts | 146 + .../lib/html-to-docx/helpers/xml-builder.ts | 295 +- .../src/lib/html-to-docx/html-to-docx.spec.ts | 3 +- .../src/lib/html-to-docx/html-to-docx.ts | 76 +- .../docx-io/src/lib/html-to-docx/index.ts | 203 +- .../src/lib/html-to-docx/namespaces.ts | 16 + .../src/lib/html-to-docx/schemas/core.ts | 19 +- .../src/lib/html-to-docx/schemas/index.ts | 10 +- .../src/lib/html-to-docx/schemas/styles.ts | 63 + .../src/lib/html-to-docx/tracking.spec.ts | 426 + .../docx-io/src/lib/html-to-docx/tracking.ts | 423 + .../src/lib/html-to-docx/utils/index.ts | 12 + packages/docx-io/src/lib/importComments.ts | 1278 + packages/docx-io/src/lib/importDocx.ts | 653 +- .../docx-io/src/lib/importTrackChanges.ts | 468 + packages/docx-io/src/lib/index.ts | 110 +- .../src/lib/injectDocxTrackingTokens.spec.ts | 669 + packages/docx-io/src/lib/mammoth.js/LICENSE | 22 + .../src/lib/mammoth.js/browser/docx/files.js | 19 + .../src/lib/mammoth.js/browser/unzip.js | 11 + packages/docx-io/src/lib/mammoth.js/index.ts | 5 + .../lib/mammoth.js/lib/document-to-html.js | 641 + .../src/lib/mammoth.js/lib/documents.js | 300 + .../lib/mammoth.js/lib/docx/body-reader.js | 892 + .../lib/docx/comments-extended-reader.js | 23 + .../mammoth.js/lib/docx/comments-reader.js | 53 + .../lib/docx/content-types-reader.js | 70 + .../lib/docx/document-xml-reader.js | 31 + .../lib/mammoth.js/lib/docx/docx-reader.js | 310 + .../src/lib/mammoth.js/lib/docx/files.js | 107 + .../lib/mammoth.js/lib/docx/notes-reader.js | 30 + .../lib/mammoth.js/lib/docx/numbering-xml.js | 120 + .../mammoth.js/lib/docx/office-xml-reader.js | 76 + .../lib/docx/relationships-reader.js | 42 + .../src/lib/mammoth.js/lib/docx/style-map.js | 81 + .../lib/mammoth.js/lib/docx/styles-reader.js | 98 + .../src/lib/mammoth.js/lib/docx/uris.js | 19 + .../src/lib/mammoth.js/lib/html/ast.js | 54 + .../src/lib/mammoth.js/lib/html/index.js | 41 + .../src/lib/mammoth.js/lib/html/simplify.js | 90 + .../docx-io/src/lib/mammoth.js/lib/images.js | 31 + .../docx-io/src/lib/mammoth.js/lib/index.d.ts | 89 + .../docx-io/src/lib/mammoth.js/lib/index.js | 102 + .../docx-io/src/lib/mammoth.js/lib/index.ts | 5 + .../docx-io/src/lib/mammoth.js/lib/main.js | 78 + .../src/lib/mammoth.js/lib/options-reader.js | 103 + .../src/lib/mammoth.js/lib/promises.js | 42 + .../src/lib/mammoth.js/lib/raw-text.js | 14 + .../docx-io/src/lib/mammoth.js/lib/results.js | 70 + .../src/lib/mammoth.js/lib/style-reader.js | 405 + .../lib/styles/document-matchers.js | 116 + .../lib/mammoth.js/lib/styles/html-paths.js | 79 + .../mammoth.js/lib/styles/parser/tokeniser.js | 35 + .../src/lib/mammoth.js/lib/transforms.js | 60 + .../src/lib/mammoth.js/lib/underline.js | 8 + .../docx-io/src/lib/mammoth.js/lib/unzip.js | 21 + .../lib/mammoth.js/lib/writers/html-writer.js | 158 + .../src/lib/mammoth.js/lib/writers/index.js | 12 + .../mammoth.js/lib/writers/markdown-writer.js | 155 + .../src/lib/mammoth.js/lib/xml/index.js | 8 + .../src/lib/mammoth.js/lib/xml/nodes.js | 62 + .../src/lib/mammoth.js/lib/xml/reader.js | 68 + .../src/lib/mammoth.js/lib/xml/writer.js | 69 + .../src/lib/mammoth.js/lib/xml/xmldom.js | 23 + .../docx-io/src/lib/mammoth.js/lib/zipfile.js | 73 + .../src/lib/mammoth.js/mammoth.browser.js | 24717 ++++++++++++++++ .../docx-io/src/lib/mammoth.js/package.json | 64 + .../docx-io/src/lib/parseDocxTracking.spec.ts | 501 + .../docx-io/src/lib/preprocessMammothHtml.ts | 127 - packages/docx-io/src/lib/searchRange.spec.ts | 551 + packages/docx-io/src/lib/searchRange.ts | 463 + packages/docx-io/src/lib/types.ts | 60 +- packages/docx-io/tsconfig.build.json | 7 + 105 files changed, 40984 insertions(+), 385 deletions(-) create mode 100644 apps/www/src/registry/lib/discussion-ids.spec.ts create mode 100644 apps/www/src/registry/lib/discussion-ids.ts create mode 100644 apps/www/src/registry/ui/suggestion-node-docx.tsx create mode 100644 packages/docx-io/src/lib/DocxIOPlugin.tsx create mode 100644 packages/docx-io/src/lib/__tests__/complex-tracking-export.spec.ts create mode 100644 packages/docx-io/src/lib/__tests__/docx-io-demo.spec.ts create mode 100644 packages/docx-io/src/lib/__tests__/export-comment-ids.spec.ts create mode 100644 packages/docx-io/src/lib/__tests__/export-ooxml-comments.spec.ts create mode 100644 packages/docx-io/src/lib/__tests__/export-replies-id.spec.ts create mode 100644 packages/docx-io/src/lib/__tests__/export-replies.spec.ts create mode 100644 packages/docx-io/src/lib/__tests__/preprocessMammothHtml.spec.ts create mode 100644 packages/docx-io/src/lib/__tests__/roundtrip-audit.spec.ts create mode 100644 packages/docx-io/src/lib/__tests__/xml-builder-falsy-ids.spec.ts create mode 100644 packages/docx-io/src/lib/applyDocxTracking.spec.ts create mode 100644 packages/docx-io/src/lib/exportComments.ts rename packages/docx-io/src/lib/{html-to-docx.ts => exportDocx.ts} (51%) create mode 100644 packages/docx-io/src/lib/exportTrackChanges.ts create mode 100644 packages/docx-io/src/lib/html-to-docx/comment-templates.ts create mode 100644 packages/docx-io/src/lib/html-to-docx/helpers/xml-builder.spec.ts create mode 100644 packages/docx-io/src/lib/html-to-docx/tracking.spec.ts create mode 100644 packages/docx-io/src/lib/html-to-docx/tracking.ts create mode 100644 packages/docx-io/src/lib/html-to-docx/utils/index.ts create mode 100644 packages/docx-io/src/lib/importComments.ts create mode 100644 packages/docx-io/src/lib/importTrackChanges.ts create mode 100644 packages/docx-io/src/lib/injectDocxTrackingTokens.spec.ts create mode 100644 packages/docx-io/src/lib/mammoth.js/LICENSE create mode 100644 packages/docx-io/src/lib/mammoth.js/browser/docx/files.js create mode 100644 packages/docx-io/src/lib/mammoth.js/browser/unzip.js create mode 100644 packages/docx-io/src/lib/mammoth.js/index.ts create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/document-to-html.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/documents.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/docx/body-reader.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/docx/comments-extended-reader.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/docx/comments-reader.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/docx/content-types-reader.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/docx/document-xml-reader.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/docx/docx-reader.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/docx/files.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/docx/notes-reader.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/docx/numbering-xml.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/docx/office-xml-reader.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/docx/relationships-reader.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/docx/style-map.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/docx/styles-reader.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/docx/uris.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/html/ast.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/html/index.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/html/simplify.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/images.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/index.d.ts create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/index.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/index.ts create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/main.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/options-reader.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/promises.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/raw-text.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/results.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/style-reader.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/styles/document-matchers.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/styles/html-paths.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/styles/parser/tokeniser.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/transforms.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/underline.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/unzip.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/writers/html-writer.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/writers/index.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/writers/markdown-writer.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/xml/index.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/xml/nodes.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/xml/reader.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/xml/writer.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/xml/xmldom.js create mode 100644 packages/docx-io/src/lib/mammoth.js/lib/zipfile.js create mode 100644 packages/docx-io/src/lib/mammoth.js/mammoth.browser.js create mode 100644 packages/docx-io/src/lib/mammoth.js/package.json create mode 100644 packages/docx-io/src/lib/parseDocxTracking.spec.ts delete mode 100644 packages/docx-io/src/lib/preprocessMammothHtml.ts create mode 100644 packages/docx-io/src/lib/searchRange.spec.ts create mode 100644 packages/docx-io/src/lib/searchRange.ts create mode 100644 packages/docx-io/tsconfig.build.json diff --git a/apps/www/src/registry/components/editor/plugins/discussion-kit.tsx b/apps/www/src/registry/components/editor/plugins/discussion-kit.tsx index ed94a3445b..beab11ea34 100644 --- a/apps/www/src/registry/components/editor/plugins/discussion-kit.tsx +++ b/apps/www/src/registry/components/editor/plugins/discussion-kit.tsx @@ -13,6 +13,12 @@ export type TDiscussion = { isResolved: boolean; userId: string; documentContent?: string; + /** Direct author name from DOCX import (bypasses user lookup) */ + authorName?: string; + /** Author initials from DOCX import */ + authorInitials?: string; + /** OOXML paraId for round-trip DOCX threading fidelity */ + paraId?: string; }; const discussionsData: TDiscussion[] = [ diff --git a/apps/www/src/registry/components/editor/plugins/docx-export-kit.tsx b/apps/www/src/registry/components/editor/plugins/docx-export-kit.tsx index 81c07282ba..0f5382c486 100644 --- a/apps/www/src/registry/components/editor/plugins/docx-export-kit.tsx +++ b/apps/www/src/registry/components/editor/plugins/docx-export-kit.tsx @@ -26,6 +26,7 @@ import { EquationElementDocx, InlineEquationElementDocx, } from '@/registry/ui/equation-node-static'; +import { SuggestionLeafDocx } from '@/registry/ui/suggestion-node-docx'; import { TocElementDocx } from '@/registry/ui/toc-node-static'; import { DocxExportPlugin } from '@platejs/docx-io'; import { KEYS } from 'platejs'; @@ -40,6 +41,7 @@ import { KEYS } from 'platejs'; * - Equations (inline font instead of KaTeX) * - Callouts (table layout for icon placement) * - TOC (anchor links with paragraph breaks) + * - Suggestions ( instead of / to avoid unwanted formatting) * * Tables use base version with juice CSS inlining. */ @@ -56,6 +58,7 @@ export const DocxExportKit = [ [KEYS.inlineEquation]: InlineEquationElementDocx, [KEYS.callout]: CalloutElementDocx, [KEYS.toc]: TocElementDocx, + [KEYS.suggestion]: SuggestionLeafDocx, }, }, }), diff --git a/apps/www/src/registry/lib/discussion-ids.spec.ts b/apps/www/src/registry/lib/discussion-ids.spec.ts new file mode 100644 index 0000000000..fdac2c8326 --- /dev/null +++ b/apps/www/src/registry/lib/discussion-ids.spec.ts @@ -0,0 +1,37 @@ +import { describe, expect, it } from 'bun:test'; + +import { getDiscussionCounterSeed } from './discussion-ids'; + +describe('getDiscussionCounterSeed', () => { + it('returns 0 for empty list', () => { + expect(getDiscussionCounterSeed([])).toBe(0); + }); + + it('returns max suffix for contiguous ids', () => { + const discussions = [{ id: 'discussion1' }, { id: 'discussion2' }]; + expect(getDiscussionCounterSeed(discussions)).toBe(2); + }); + + it('returns max suffix for non-contiguous ids', () => { + const discussions = [{ id: 'discussion1' }, { id: 'discussion3' }]; + expect(getDiscussionCounterSeed(discussions)).toBe(3); + }); + + it('ignores non-matching ids', () => { + const discussions = [ + { id: 'alpha1' }, + { id: 'discussion' }, + { id: 'discussion10x' }, + ]; + expect(getDiscussionCounterSeed(discussions)).toBe(0); + }); + + it('handles mixed ids and returns highest match', () => { + const discussions = [ + { id: 'discussion2' }, + { id: 'alpha1' }, + { id: 'discussion12' }, + ]; + expect(getDiscussionCounterSeed(discussions)).toBe(12); + }); +}); diff --git a/apps/www/src/registry/lib/discussion-ids.ts b/apps/www/src/registry/lib/discussion-ids.ts new file mode 100644 index 0000000000..1c49cd9453 --- /dev/null +++ b/apps/www/src/registry/lib/discussion-ids.ts @@ -0,0 +1,18 @@ +export type DiscussionIdLike = { + id: string; +}; + +const discussionIdPattern = /^discussion(\d+)$/; + +export const getDiscussionCounterSeed = ( + discussions: DiscussionIdLike[] +): number => + discussions.reduce((max, discussion) => { + const match = discussionIdPattern.exec(discussion.id); + if (!match) return max; + + const value = Number(match[1]); + if (Number.isNaN(value)) return max; + + return Math.max(max, value); + }, 0); diff --git a/apps/www/src/registry/ui/block-discussion.tsx b/apps/www/src/registry/ui/block-discussion.tsx index a66cc8f8ef..04eefad0ae 100644 --- a/apps/www/src/registry/ui/block-discussion.tsx +++ b/apps/www/src/registry/ui/block-discussion.tsx @@ -4,7 +4,11 @@ import * as React from 'react'; import type { PlateElementProps, RenderNodeWrapper } from 'platejs/react'; -import { getDraftCommentKey } from '@platejs/comment'; +import { + getCommentKeyId, + getCommentKeys, + getDraftCommentKey, +} from '@platejs/comment'; import { CommentPlugin } from '@platejs/comment/react'; import { getTransientSuggestionKey } from '@platejs/suggestion'; import { SuggestionPlugin } from '@platejs/suggestion/react'; @@ -316,31 +320,45 @@ const useResolvedDiscussion = ( const discussions = usePluginOption(discussionPlugin, 'discussions'); + const getLeafCommentIds = (leaf: TCommentText) => + getCommentKeys(leaf) + .map(getCommentKeyId) + .filter((id): id is string => Boolean(id) && id !== 'draft'); + + const map = getOption('uniquePathMap'); + const nextMap = new Map(map); + let mapChanged = false; + commentNodes.forEach(([node]) => { - const id = api.comment.nodeId(node); - const map = getOption('uniquePathMap'); + const ids = getLeafCommentIds(node); + if (ids.length === 0) return; - if (!id) return; + ids.forEach((id) => { + const previousPath = nextMap.get(id); - const previousPath = map.get(id); + // If there are no comment nodes in the corresponding path in the map, then update it. + if (PathApi.isPath(previousPath)) { + const nodes = api.comment.node({ id, at: previousPath }); - // If there are no comment nodes in the corresponding path in the map, then update it. - if (PathApi.isPath(previousPath)) { - const nodes = api.comment.node({ id, at: previousPath }); + if (!nodes) { + nextMap.set(id, blockPath); + mapChanged = true; + } - if (!nodes) { - setOption('uniquePathMap', new Map(map).set(id, blockPath)); return; } - - return; - } - // TODO: fix throw error - setOption('uniquePathMap', new Map(map).set(id, blockPath)); + // TODO: fix throw error + nextMap.set(id, blockPath); + mapChanged = true; + }); }); + if (mapChanged) { + setOption('uniquePathMap', nextMap); + } + const commentsIds = new Set( - commentNodes.map(([node]) => api.comment.nodeId(node)).filter(Boolean) + commentNodes.flatMap(([node]) => getLeafCommentIds(node)) ); const resolvedDiscussions = discussions diff --git a/apps/www/src/registry/ui/comment.tsx b/apps/www/src/registry/ui/comment.tsx index 38b5bb6405..6493f8084a 100644 --- a/apps/www/src/registry/ui/comment.tsx +++ b/apps/www/src/registry/ui/comment.tsx @@ -54,6 +54,14 @@ export type TComment = { discussionId: string; isEdited: boolean; userId: string; + /** Direct author name from DOCX import (bypasses user lookup) */ + authorName?: string; + /** Author initials from DOCX import */ + authorInitials?: string; + /** OOXML paraId for round-trip DOCX threading fidelity */ + paraId?: string; + /** OOXML parentParaId for round-trip DOCX reply threading */ + parentParaId?: string; }; export function Comment(props: { @@ -180,12 +188,19 @@ export function Comment(props: { >
- - {userInfo?.name?.[0]} + + + {comment.authorInitials ?? + comment.authorName?.[0] ?? + userInfo?.name?.[0]} +

- {/* Replace to your own backend or refer to potion */} - {userInfo?.name} + {/* Use direct author name from DOCX or fall back to user lookup */} + {comment.authorName ?? userInfo?.name}

diff --git a/apps/www/src/registry/ui/export-toolbar-button.tsx b/apps/www/src/registry/ui/export-toolbar-button.tsx index 436bd190af..d5246d6562 100644 --- a/apps/www/src/registry/ui/export-toolbar-button.tsx +++ b/apps/www/src/registry/ui/export-toolbar-button.tsx @@ -4,7 +4,7 @@ import * as React from 'react'; import type { DropdownMenuProps } from '@radix-ui/react-dropdown-menu'; -import { exportToDocx } from '@platejs/docx-io'; +import { exportToDocx, type DocxExportDiscussion } from '@platejs/docx-io'; import { MarkdownPlugin } from '@platejs/markdown'; import { ArrowDownToLineIcon } from 'lucide-react'; import type { SlatePlugin } from 'platejs'; @@ -20,6 +20,7 @@ import { DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { BaseEditorKit } from '@/registry/components/editor/editor-base-kit'; +import { discussionPlugin } from '@/registry/components/editor/plugins/discussion-kit'; import { EditorStatic } from './editor-static'; import { ToolbarButton } from './toolbar'; @@ -151,8 +152,43 @@ export function ExportToolbarButton(props: DropdownMenuProps) { }; const exportToWord = async () => { + // Get discussions and users from the discussion plugin for comment export + const discussions = editor.getOption(discussionPlugin, 'discussions') ?? []; + const users = editor.getOption(discussionPlugin, 'users') ?? {}; + + // Resolve display name: prefer authorName (from DOCX import), fall back to users lookup + const resolveUser = ( + userId: string, + authorName?: string + ): { id: string; name: string } | undefined => { + const name = authorName ?? users[userId]?.name; + return name ? { id: userId, name } : undefined; + }; + + // Convert discussions to export format + const exportDiscussions: DocxExportDiscussion[] = discussions.map((d) => ({ + id: d.id, + comments: d.comments?.map((c) => ({ + contentRich: c.contentRich, + createdAt: c.createdAt, + id: c.id, + paraId: c.paraId, + parentParaId: c.parentParaId, + userId: c.userId, + user: resolveUser(c.userId, c.authorName), + })), + createdAt: d.createdAt, + documentContent: d.documentContent, + paraId: d.paraId, + userId: d.userId, + user: resolveUser(d.userId, d.authorName), + })); + const blob = await exportToDocx(editor.children, { editorPlugins: [...BaseEditorKit, ...DocxExportKit] as SlatePlugin[], + tracking: { + discussions: exportDiscussions, + }, }); const url = URL.createObjectURL(blob); diff --git a/apps/www/src/registry/ui/import-toolbar-button.tsx b/apps/www/src/registry/ui/import-toolbar-button.tsx index 1f03f23238..7ade7be25a 100644 --- a/apps/www/src/registry/ui/import-toolbar-button.tsx +++ b/apps/www/src/registry/ui/import-toolbar-button.tsx @@ -4,11 +4,14 @@ import * as React from 'react'; import type { DropdownMenuProps } from '@radix-ui/react-dropdown-menu'; -import { importDocx } from '@platejs/docx-io'; +import { getCommentKey } from '@platejs/comment'; +import { importDocxWithTracking } from '@platejs/docx-io'; import { MarkdownPlugin } from '@platejs/markdown'; +import { getSuggestionKey } from '@platejs/suggestion'; import { ArrowUpToLineIcon } from 'lucide-react'; -import { getEditorDOMFromHtmlString } from 'platejs/static'; +import { KEYS, TextApi } from 'platejs'; import { useEditorRef } from 'platejs/react'; +import { getEditorDOMFromHtmlString } from 'platejs/static'; import { useFilePicker } from 'use-file-picker'; import { @@ -19,10 +22,18 @@ import { DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; +import { commentPlugin } from '@/registry/components/editor/plugins/comment-kit'; +import { + discussionPlugin, + type TDiscussion, +} from '@/registry/components/editor/plugins/discussion-kit'; +import { getDiscussionCounterSeed } from '../lib/discussion-ids'; import { ToolbarButton } from './toolbar'; type ImportType = 'html' | 'markdown'; +const WHITESPACE_REGEX = /\s+/; + export function ImportToolbarButton(props: DropdownMenuProps) { const editor = useEditorRef(); const [open, setOpen] = React.useState(false); @@ -73,9 +84,93 @@ export function ImportToolbarButton(props: DropdownMenuProps) { multiple: false, onFilesSelected: async ({ plainFiles }) => { const arrayBuffer = await plainFiles[0].arrayBuffer(); - const result = await importDocx(editor, arrayBuffer); - editor.tf.insertNodes(result.nodes as typeof editor.children); + // Compute next discussion number to avoid ID collisions + const existingDiscussions = + editor.getOption(discussionPlugin, 'discussions') ?? []; + let discussionCounter = getDiscussionCounterSeed(existingDiscussions); + + // Import with full tracking support (suggestions + comments) + const result = await importDocxWithTracking(editor as any, arrayBuffer, { + suggestionKey: KEYS.suggestion, + getSuggestionKey, + commentKey: KEYS.comment, + getCommentKey, + isText: TextApi.isText, + generateId: () => `discussion${++discussionCounter}`, + }); + + // Register imported users so suggestion/comment UI can resolve them + if (result.users.length > 0) { + const existingUsers = editor.getOption(discussionPlugin, 'users') ?? {}; + const updatedUsers = { ...existingUsers }; + + for (const user of result.users) { + if (!updatedUsers[user.id]) { + updatedUsers[user.id] = { + id: user.id, + name: user.name, + avatarUrl: `https://api.dicebear.com/9.x/glass/svg?seed=${encodeURIComponent(user.name)}`, + }; + } + } + + editor.setOption(discussionPlugin, 'users', updatedUsers); + } + + // Add imported discussions to the discussion plugin + if (result.discussions.length > 0) { + // Convert imported discussions to TDiscussion format + const newDiscussions: TDiscussion[] = result.discussions.map((d) => ({ + id: d.id, + comments: (d.comments ?? []).map((c, index) => ({ + id: c.id || `comment${index + 1}`, + contentRich: + c.contentRich as TDiscussion['comments'][number]['contentRich'], + createdAt: c.createdAt ?? new Date(), + discussionId: d.id, + isEdited: false, + userId: c.userId ?? c.user?.id ?? 'imported-unknown', + authorName: c.user?.name, + authorInitials: c.user?.name + ? c.user.name + .split(WHITESPACE_REGEX) + .slice(0, 2) + .map((w) => w[0]?.toUpperCase() ?? '') + .join('') + : undefined, + paraId: c.paraId, + parentParaId: c.parentParaId, + })), + createdAt: d.createdAt ?? new Date(), + documentContent: d.documentContent, + isResolved: false, + userId: d.userId ?? d.user?.id ?? 'imported-unknown', + authorName: d.user?.name, + authorInitials: d.user?.name + ? d.user.name + .split(WHITESPACE_REGEX) + .slice(0, 2) + .map((w) => w[0]?.toUpperCase() ?? '') + .join('') + : undefined, + paraId: d.paraId, + })); + + // Replace all discussions (not append) because importDocxWithTracking + // replaces the entire editor content, making old discussions stale + editor.setOption(discussionPlugin, 'discussions', newDiscussions); + editor.setOption(commentPlugin, 'uniquePathMap', new Map()); + } + + // Log import results in dev only + if ( + result.hasTracking && + result.errors.length > 0 && + process.env.NODE_ENV !== 'production' + ) { + console.warn('[DOCX Import] Errors:', result.errors); + } }, }); diff --git a/apps/www/src/registry/ui/suggestion-node-docx.tsx b/apps/www/src/registry/ui/suggestion-node-docx.tsx new file mode 100644 index 0000000000..5364ca55a9 --- /dev/null +++ b/apps/www/src/registry/ui/suggestion-node-docx.tsx @@ -0,0 +1,22 @@ +import * as React from 'react'; + +import type { TSuggestionText } from 'platejs'; +import type { SlateLeafProps } from 'platejs/static'; + +import { SlateLeaf } from 'platejs/static'; + +/** + * DOCX export suggestion leaf: renders as instead of /. + * + * The default SuggestionLeafStatic uses / HTML tags which + * html-to-docx interprets as underline/strikethrough formatting. + * For DOCX export, the tracked changes are handled by the injected + * DOCX tracking tokens, so we only need a plain wrapper. + */ +export function SuggestionLeafDocx(props: SlateLeafProps) { + return ( + + {props.children} + + ); +} diff --git a/apps/www/src/registry/ui/table-node-static.tsx b/apps/www/src/registry/ui/table-node-static.tsx index c794b07b22..ff45194654 100644 --- a/apps/www/src/registry/ui/table-node-static.tsx +++ b/apps/www/src/registry/ui/table-node-static.tsx @@ -41,6 +41,33 @@ export function TableRowElementStatic(props: SlateElementProps) { ); } +/** Build inline border styles for DOCX export (all 4 sides per cell). */ +const cellBorderStyles = ( + element: TTableCellElement +): Record => { + const b = element.borders; + if (!b) return {}; + + const fmt = (dir: 'bottom' | 'left' | 'right' | 'top') => { + const border = b[dir]; + if (!border || !border.size) return; + return `${border.size}px ${border.style || 'solid'} ${border.color || '#000'}`; + }; + + const styles: Record = {}; + const top = fmt('top'); + const right = fmt('right'); + const bottom = fmt('bottom'); + const left = fmt('left'); + + if (top) styles.borderTop = top; + if (right) styles.borderRight = right; + if (bottom) styles.borderBottom = bottom; + if (left) styles.borderLeft = left; + + return styles; +}; + export function TableCellElementStatic({ isHeader, ...props @@ -74,8 +101,12 @@ export function TableCellElementStatic({ style={ { '--cellBackground': element.background, + ...(element.background + ? { backgroundColor: element.background } + : {}), maxWidth: width || 240, minWidth: width || 120, + ...cellBorderStyles(element), } as React.CSSProperties } attributes={{ diff --git a/packages/docx-io/src/lib/DocxIOPlugin.tsx b/packages/docx-io/src/lib/DocxIOPlugin.tsx new file mode 100644 index 0000000000..68f792ecf1 --- /dev/null +++ b/packages/docx-io/src/lib/DocxIOPlugin.tsx @@ -0,0 +1,76 @@ +/** + * DOCX Import/Export Plugin Kit for Plate.js + * + * This module provides an easy-to-use plugin kit that combines both + * import and export functionality for DOCX files. + * + * @example + * ```tsx + * import { DocxIOPlugin, importDocx, exportToDocx } from '@platejs/docx-io'; + * + * // Use the plugin in your editor + * const editor = createPlateEditor({ + * plugins: [ + * ...BaseEditorKit, + * DocxIOPlugin, + * ], + * }); + * + * // Import a DOCX file + * const { nodes } = await importDocx(editor, arrayBuffer); + * editor.tf.insertNodes(nodes); + * + * // Export to DOCX + * const blob = await exportToDocx(editor.children, { + * editorPlugins: editor.plugins, + * }); + * ``` + * + * @packageDocumentation + */ + +'use client'; + +import { DocxExportPlugin } from './docx-export-plugin'; + +export { importDocx } from './importDocx'; +export { + downloadDocx, + exportEditorToDocx, + exportToDocx, +} from './docx-export-plugin'; +export { htmlToDocxBlob } from './exportDocx'; + +/** + * DOCX Import/Export Plugin for Plate.js + * + * This plugin provides both import and export functionality for DOCX files. + * It's a simple re-export of DocxExportPlugin with better discoverability. + * + * For import, use the `importDocx` function directly. + * For export, use the plugin's `exportToDocx` or `downloadDocx` functions. + * + * @example + * ```tsx + * import { DocxIOPlugin } from '@platejs/docx-io'; + * + * const editor = createPlateEditor({ + * plugins: [DocxIOPlugin], + * }); + * ``` + */ +export const DocxIOPlugin = DocxExportPlugin; + +/** + * DOCX Import/Export Kit - array form for use with spread operator + * + * @example + * ```tsx + * import { DocxIOKit } from '@platejs/docx-io'; + * + * const editor = createPlateEditor({ + * plugins: [...BaseEditorKit, ...DocxIOKit], + * }); + * ``` + */ +export const DocxIOKit = [DocxExportPlugin]; diff --git a/packages/docx-io/src/lib/__tests__/complex-tracking-export.spec.ts b/packages/docx-io/src/lib/__tests__/complex-tracking-export.spec.ts new file mode 100644 index 0000000000..9693fa79a6 --- /dev/null +++ b/packages/docx-io/src/lib/__tests__/complex-tracking-export.spec.ts @@ -0,0 +1,87 @@ +import { describe, expect, it } from 'bun:test'; +import { htmlToDocxBlob } from '../exportDocx'; +import { + buildCommentStartToken, + buildSuggestionStartToken, +} from '../html-to-docx/tracking'; + +describe('Crash Reproduction: Overlapping and Duplicate IDs', () => { + it('should not crash when exporting overlapping comments/suggestions and duplicate reply IDs', async () => { + // 1. Construct Payloads + const discussion1Payload = { + id: 'discussion1', + authorName: 'Charlie', + authorInitials: 'C', + date: '2026-02-06T11:55:06.789Z', + text: 'Comments are a great way to provide feedback and discuss changes.', + replies: [ + { + id: 'comment2', // Duplicate ID + authorName: 'Bob', + authorInitials: 'B', + date: '2026-02-06T11:56:46.789Z', + text: 'Agreed! The link to the docs makes it easy to learn more.', + }, + ], + }; + + const discussion2Payload = { + id: 'discussion2', + authorName: 'Bob', + authorInitials: 'B', + date: '2026-02-06T12:00:06.789Z', + text: 'Nice demonstration of overlapping annotations with both comments and suggestions!', + replies: [ + { + id: 'comment2', // Duplicate ID reused here + authorName: 'Charlie', + authorInitials: 'C', + date: '2026-02-06T12:01:46.789Z', + text: 'This helps users understand how powerful the editor can be.', + }, + ], + }; + + const suggestionPayload = { + id: 'playground3', + type: 'insert', + author: 'charlie', + date: '1770379506741', + }; + + // 2. Construct Tokens + const d1Start = buildCommentStartToken(discussion1Payload); + const d2Start = buildCommentStartToken(discussion2Payload); + const sStart = buildSuggestionStartToken(suggestionPayload, 'insert'); + + // 3. Construct HTML + // Simulating: + //

+ // [d1]comments[/d1] + // [d1] on many text segments[/d1]. You can even have + // [s][d2]overlapping[/d2][/s] annotations! + //

+ const html = ` +

+ Review and refine content seamlessly. Use + + ${d1Start}comments[[DOCX_CMT_END:discussion1]] + + ${d1Start} on many text segments[[DOCX_CMT_END:discussion1]]. + You can even have + ${sStart}${d2Start}overlapping[[DOCX_CMT_END:discussion2]][[DOCX_INS_END:playground3]] + annotations! +

+ `; + + // 4. Run Export + try { + const blob = await htmlToDocxBlob(html); + expect(blob).toBeDefined(); + expect(blob.size).toBeGreaterThan(0); + } catch (error) { + console.error('Export failed:', error); + throw error; + } + }); +}); diff --git a/packages/docx-io/src/lib/__tests__/docx-io-demo.spec.ts b/packages/docx-io/src/lib/__tests__/docx-io-demo.spec.ts new file mode 100644 index 0000000000..81ff9be0b9 --- /dev/null +++ b/packages/docx-io/src/lib/__tests__/docx-io-demo.spec.ts @@ -0,0 +1,129 @@ +/** + * DOCX Import/Export Demo Tests + * + * These tests demonstrate the htmlToDocxBlob utility for + * converting HTML to DOCX format. + */ + +import { describe, expect, it } from 'bun:test'; +import JSZip from 'jszip'; + +// Import directly from exportDocx to avoid platejs dependencies +import { htmlToDocxBlob } from '../exportDocx'; + +const loadZipFromBlob = async (blob: Blob): Promise => { + const arrayBuffer = await blob.arrayBuffer(); + return JSZip.loadAsync(arrayBuffer); +}; + +describe('DOCX Import/Export Demo', () => { + describe('htmlToDocxBlob utility', () => { + it('should convert HTML string to DOCX blob', async () => { + const html = ` +

Document Title

+

This is a formatted paragraph.

+
    +
  • Item 1
  • +
  • Item 2
  • +
+ `; + + const blob = await htmlToDocxBlob(html); + + expect(blob).toBeInstanceOf(Blob); + + const zip = await loadZipFromBlob(blob); + const docXml = await zip.file('word/document.xml')!.async('string'); + + expect(docXml).toContain('Document Title'); + expect(docXml).toContain('formatted'); + expect(docXml).toContain('Item 1'); + expect(docXml).toContain('Item 2'); + }); + + it('should handle empty HTML', async () => { + const blob = await htmlToDocxBlob(''); + + expect(blob).toBeInstanceOf(Blob); + }); + + it('should apply document options', async () => { + const html = '

Test content

'; + const blob = await htmlToDocxBlob(html, { + orientation: 'landscape', + margins: { + top: 720, // 0.5 inch in TWIP + bottom: 720, + left: 720, + right: 720, + }, + }); + + const zip = await loadZipFromBlob(blob); + const docXml = await zip.file('word/document.xml')!.async('string'); + + expect(docXml).toContain('landscape'); + }); + }); + + describe('Complete HTML to DOCX workflow', () => { + it('should produce valid DOCX with all required files', async () => { + const html = ` +

Test Document

+

This is a test paragraph with bold text.

+

Second paragraph.

+ `; + + const blob = await htmlToDocxBlob(html); + + // Verify DOCX structure + const zip = await loadZipFromBlob(blob); + + // Check required DOCX files exist + expect(zip.file('word/document.xml')).not.toBeNull(); + expect(zip.file('[Content_Types].xml')).not.toBeNull(); + expect(zip.file('_rels/.rels')).not.toBeNull(); + + // Verify content + const docXml = await zip.file('word/document.xml')!.async('string'); + expect(docXml).toContain('Test Document'); + expect(docXml).toContain('bold'); + expect(docXml).toContain('Second paragraph'); + }); + + it('should handle tables', async () => { + const html = ` + + + + + + + + + +
Cell 1Cell 2
Cell 3Cell 4
+ `; + + const blob = await htmlToDocxBlob(html); + const zip = await loadZipFromBlob(blob); + const docXml = await zip.file('word/document.xml')!.async('string'); + + expect(docXml).toContain('Cell 1'); + expect(docXml).toContain('Cell 4'); + expect(docXml).toContain(' { + const html = + '

Visit our website.

'; + + const blob = await htmlToDocxBlob(html); + const zip = await loadZipFromBlob(blob); + const docXml = await zip.file('word/document.xml')!.async('string'); + + expect(docXml).toContain('our website'); + expect(docXml).toContain(' { + const marks: Record = {}; + + for (const id of discussionIds) { + marks[`comment_${id}`] = true; + } + + const value: TNode[] = [ + { + type: 'p', + children: [{ text: 'Annotated text', ...marks }], + }, + ]; + + const result = injectDocxTrackingTokens(value, { discussions }); + const injectedText = ( + (result[0] as Record).children as Record[] + )[0].text as string; + + const tokens = splitDocxTrackingTokens(injectedText); + const payloads = new Map(); + + for (const token of tokens) { + if (token.type === 'commentStart') { + payloads.set(token.data.id, token.data); + } + } + + return payloads; +} + +describe('export comment ID uniqueness', () => { + it('should use discussion ID as payload ID, not comment ID', () => { + const discussions: DocxExportDiscussion[] = [ + { + id: 'discussion1', + comments: [ + { + id: 'comment1', + contentRich: [{ type: 'p', children: [{ text: 'Root comment' }] }], + createdAt: '2025-01-15T10:00:00.000Z', + user: { id: 'alice', name: 'Alice' }, + userId: 'alice', + }, + ], + createdAt: '2025-01-15T10:00:00.000Z', + documentContent: 'Root comment', + user: { id: 'alice', name: 'Alice' }, + userId: 'alice', + }, + ]; + + const payloads = extractAllCommentPayloads(['discussion1'], discussions); + + expect(payloads.size).toBe(1); + // Payload ID must be the discussion ID, NOT the comment ID + expect(payloads.has('discussion1')).toBe(true); + expect(payloads.has('comment1')).toBe(false); + }); + + it('should not collide when two discussions use the same comment IDs', () => { + const discussions: DocxExportDiscussion[] = [ + { + id: 'discussion1', + comments: [ + { + id: 'comment1', // Duplicate across discussions + contentRich: [{ type: 'p', children: [{ text: 'From Alice' }] }], + createdAt: '2025-01-15T10:00:00.000Z', + user: { id: 'alice', name: 'Alice' }, + userId: 'alice', + }, + ], + createdAt: '2025-01-15T10:00:00.000Z', + documentContent: 'From Alice', + user: { id: 'alice', name: 'Alice' }, + userId: 'alice', + }, + { + id: 'discussion2', + comments: [ + { + id: 'comment1', // Same ID as above — must not collide + contentRich: [{ type: 'p', children: [{ text: 'From Bob' }] }], + createdAt: '2025-01-15T11:00:00.000Z', + user: { id: 'bob', name: 'Bob' }, + userId: 'bob', + }, + ], + createdAt: '2025-01-15T11:00:00.000Z', + documentContent: 'From Bob', + user: { id: 'bob', name: 'Bob' }, + userId: 'bob', + }, + ]; + + const payloads = extractAllCommentPayloads( + ['discussion1', 'discussion2'], + discussions + ); + + // Must produce 2 distinct payloads keyed by discussion ID + expect(payloads.size).toBe(2); + + const d1 = payloads.get('discussion1'); + const d2 = payloads.get('discussion2'); + expect(d1).toBeDefined(); + expect(d2).toBeDefined(); + + // Author names must be distinct (no collision/overwrite) + expect(d1!.authorName).toBe('Alice'); + expect(d2!.authorName).toBe('Bob'); + + // Payload IDs must differ + expect(d1!.id).not.toBe(d2!.id); + }); + + it('should produce unique reply composite IDs across discussions', () => { + const discussions: DocxExportDiscussion[] = [ + { + id: 'discussion1', + comments: [ + { + id: 'comment1', + contentRich: [{ type: 'p', children: [{ text: 'Root 1' }] }], + createdAt: '2025-01-15T10:00:00.000Z', + user: { id: 'alice', name: 'Alice' }, + userId: 'alice', + }, + { + id: 'reply1', // Same reply ID in both discussions + contentRich: [{ type: 'p', children: [{ text: 'Reply in d1' }] }], + createdAt: '2025-01-15T11:00:00.000Z', + user: { id: 'bob', name: 'Bob' }, + userId: 'bob', + }, + ], + createdAt: '2025-01-15T10:00:00.000Z', + documentContent: 'Root 1', + user: { id: 'alice', name: 'Alice' }, + userId: 'alice', + }, + { + id: 'discussion2', + comments: [ + { + id: 'comment1', + contentRich: [{ type: 'p', children: [{ text: 'Root 2' }] }], + createdAt: '2025-01-15T12:00:00.000Z', + user: { id: 'charlie', name: 'Charlie' }, + userId: 'charlie', + }, + { + id: 'reply1', // Same reply ID as discussion1 + contentRich: [{ type: 'p', children: [{ text: 'Reply in d2' }] }], + createdAt: '2025-01-15T13:00:00.000Z', + user: { id: 'dave', name: 'Dave' }, + userId: 'dave', + }, + ], + createdAt: '2025-01-15T12:00:00.000Z', + documentContent: 'Root 2', + user: { id: 'charlie', name: 'Charlie' }, + userId: 'charlie', + }, + ]; + + const payloads = extractAllCommentPayloads( + ['discussion1', 'discussion2'], + discussions + ); + + const d1 = payloads.get('discussion1'); + const d2 = payloads.get('discussion2'); + + expect(d1!.replies).toHaveLength(1); + expect(d2!.replies).toHaveLength(1); + + // Reply IDs in the payload are preserved from the comment data + expect(d1!.replies![0].id).toBe('reply1'); + expect(d2!.replies![0].id).toBe('reply1'); + + // But the discussion IDs (used as lookup keys) are different, + // so xml-builder will create composite IDs: + // "discussion1-reply-reply1" vs "discussion2-reply-reply1" + // — these are unique because the parent ID differs + expect(d1!.id).toBe('discussion1'); + expect(d2!.id).toBe('discussion2'); + + // Author names must be preserved per discussion + expect(d1!.replies![0].authorName).toBe('Bob'); + expect(d2!.replies![0].authorName).toBe('Dave'); + }); +}); + +describe('export comment author resolution', () => { + it('should resolve author from user.name', () => { + const discussions: DocxExportDiscussion[] = [ + { + id: 'disc-1', + comments: [ + { + contentRich: [{ type: 'p', children: [{ text: 'Comment' }] }], + createdAt: '2025-01-15T10:00:00.000Z', + user: { id: 'user-1', name: 'Jane Doe' }, + userId: 'user-1', + }, + ], + createdAt: '2025-01-15T10:00:00.000Z', + documentContent: 'Comment', + user: { id: 'user-1', name: 'Jane Doe' }, + userId: 'user-1', + }, + ]; + + const payloads = extractAllCommentPayloads(['disc-1'], discussions); + const payload = payloads.get('disc-1'); + + expect(payload!.authorName).toBe('Jane Doe'); + expect(payload!.authorInitials).toBe('JD'); + }); + + it('should fallback to userId when user.name is missing', () => { + const discussions: DocxExportDiscussion[] = [ + { + id: 'disc-1', + comments: [ + { + contentRich: [{ type: 'p', children: [{ text: 'Comment' }] }], + createdAt: '2025-01-15T10:00:00.000Z', + userId: 'charlie', + }, + ], + createdAt: '2025-01-15T10:00:00.000Z', + documentContent: 'Comment', + userId: 'charlie', + }, + ]; + + const payloads = extractAllCommentPayloads(['disc-1'], discussions); + const payload = payloads.get('disc-1'); + + // Falls back to userId when no user.name + expect(payload!.authorName).toBe('charlie'); + }); + + it('should use "unknown" when no author info available', () => { + const discussions: DocxExportDiscussion[] = [ + { + id: 'disc-1', + comments: [ + { + contentRich: [{ type: 'p', children: [{ text: 'Orphan' }] }], + createdAt: '2025-01-15T10:00:00.000Z', + }, + ], + createdAt: '2025-01-15T10:00:00.000Z', + documentContent: 'Orphan', + }, + ]; + + const payloads = extractAllCommentPayloads(['disc-1'], discussions); + const payload = payloads.get('disc-1'); + + expect(payload!.authorName).toBe('unknown'); + }); + + it('should use userNameMap for author resolution', () => { + const discussions: DocxExportDiscussion[] = [ + { + id: 'disc-1', + comments: [ + { + contentRich: [{ type: 'p', children: [{ text: 'Comment' }] }], + createdAt: '2025-01-15T10:00:00.000Z', + userId: 'user-42', + }, + ], + createdAt: '2025-01-15T10:00:00.000Z', + documentContent: 'Comment', + userId: 'user-42', + }, + ]; + + const userNameMap = new Map([['user-42', 'Mapped Name']]); + + const value = [ + { + type: 'p', + children: [{ text: 'text', ['comment_disc-1']: true }], + }, + ] as TNode[]; + + const result = injectDocxTrackingTokens(value, { + discussions, + userNameMap, + }); + const injectedText = ( + (result[0] as Record).children as Record< + string, + unknown + >[] + )[0].text as string; + + const tokens = splitDocxTrackingTokens(injectedText); + const commentStart = tokens.find((t) => t.type === 'commentStart'); + + expect(commentStart).toBeDefined(); + if (commentStart?.type === 'commentStart') { + expect(commentStart.data.authorName).toBe('Mapped Name'); + } + }); +}); diff --git a/packages/docx-io/src/lib/__tests__/export-ooxml-comments.spec.ts b/packages/docx-io/src/lib/__tests__/export-ooxml-comments.spec.ts new file mode 100644 index 0000000000..02ad6e68cb --- /dev/null +++ b/packages/docx-io/src/lib/__tests__/export-ooxml-comments.spec.ts @@ -0,0 +1,184 @@ +/** + * Tests for OOXML comment XML generation via htmlToDocxBlob. + * + * Verifies that: + * - Comments produce valid comments.xml with correct authors + * - Reply threading produces commentsExtended.xml with parentParaId + * - Multiple discussions don't collide in the OOXML output + * - paraId values are unique across all comments + */ + +import { describe, expect, it } from 'bun:test'; +import JSZip from 'jszip'; + +import { htmlToDocxBlob } from '../exportDocx'; +import { + buildCommentStartToken, + buildCommentEndToken, +} from '../html-to-docx/tracking'; + +async function loadZipFromBlob(blob: Blob): Promise { + const arrayBuffer = await blob.arrayBuffer(); + return JSZip.loadAsync(arrayBuffer); +} + +async function getXmlFromZip(zip: JSZip, path: string): Promise { + const file = zip.file(path); + if (!file) return null; + return file.async('text'); +} + +describe('OOXML comment generation', () => { + it('should produce comments.xml with correct author names', async () => { + const payload = { + id: 'discussion1', + authorName: 'Alice', + authorInitials: 'A', + date: '2025-01-15T10:00:00.000Z', + text: 'Great work!', + }; + + const token = buildCommentStartToken(payload); + const html = `

${token}annotated text${buildCommentEndToken('discussion1')}

`; + + const blob = await htmlToDocxBlob(html); + const zip = await loadZipFromBlob(blob); + const commentsXml = await getXmlFromZip(zip, 'word/comments.xml'); + + expect(commentsXml).not.toBeNull(); + // Author should be "Alice", not "unknown" + expect(commentsXml).toContain('author="Alice"'); + expect(commentsXml).toContain('initials="A"'); + }); + + it('should preserve distinct authors for two discussions', async () => { + const d1 = { + id: 'discussion1', + authorName: 'Alice', + authorInitials: 'A', + date: '2025-01-15T10:00:00.000Z', + text: 'Comment from Alice', + }; + + const d2 = { + id: 'discussion2', + authorName: 'Bob', + authorInitials: 'B', + date: '2025-01-15T11:00:00.000Z', + text: 'Comment from Bob', + }; + + const html = ` +

+ ${buildCommentStartToken(d1)}text one${buildCommentEndToken('discussion1')} + ${buildCommentStartToken(d2)}text two${buildCommentEndToken('discussion2')} +

+ `; + + const blob = await htmlToDocxBlob(html); + const zip = await loadZipFromBlob(blob); + const commentsXml = await getXmlFromZip(zip, 'word/comments.xml'); + + expect(commentsXml).not.toBeNull(); + expect(commentsXml).toContain('author="Alice"'); + expect(commentsXml).toContain('author="Bob"'); + }); + + it('should thread replies via commentsExtended.xml', async () => { + const payload = { + id: 'discussion1', + authorName: 'Alice', + authorInitials: 'A', + date: '2025-01-15T10:00:00.000Z', + text: 'Root comment', + replies: [ + { + id: 'reply1', + authorName: 'Bob', + authorInitials: 'B', + date: '2025-01-15T11:00:00.000Z', + text: 'Reply from Bob', + }, + ], + }; + + const html = `

${buildCommentStartToken(payload)}annotated${buildCommentEndToken('discussion1')}

`; + + const blob = await htmlToDocxBlob(html); + const zip = await loadZipFromBlob(blob); + + const commentsXml = await getXmlFromZip(zip, 'word/comments.xml'); + const extendedXml = await getXmlFromZip(zip, 'word/commentsExtended.xml'); + + expect(commentsXml).not.toBeNull(); + // Both authors present + expect(commentsXml).toContain('author="Alice"'); + expect(commentsXml).toContain('author="Bob"'); + + // commentsExtended should exist with threading + expect(extendedXml).not.toBeNull(); + // Should contain paraIdParent for the reply + expect(extendedXml).toContain('paraIdParent'); + }); + + it('should produce unique paraIds for all comments', async () => { + const d1 = { + id: 'disc1', + authorName: 'Alice', + authorInitials: 'A', + text: 'Comment 1', + replies: [{ id: 'r1', authorName: 'Bob', text: 'Reply 1' }], + }; + + const d2 = { + id: 'disc2', + authorName: 'Charlie', + authorInitials: 'C', + text: 'Comment 2', + }; + + const html = ` +

+ ${buildCommentStartToken(d1)}first${buildCommentEndToken('disc1')} + ${buildCommentStartToken(d2)}second${buildCommentEndToken('disc2')} +

+ `; + + const blob = await htmlToDocxBlob(html); + const zip = await loadZipFromBlob(blob); + const commentsXml = await getXmlFromZip(zip, 'word/comments.xml'); + + expect(commentsXml).not.toBeNull(); + + // Extract all paraId values from comments.xml + const paraIdMatches = commentsXml!.match(/paraId="([^"]+)"/g); + expect(paraIdMatches).not.toBeNull(); + expect(paraIdMatches!.length).toBeGreaterThanOrEqual(3); // 2 roots + 1 reply + + // All paraIds must be unique + const paraIds = paraIdMatches!.map((m) => m.replace(/paraId="|"/g, '')); + const uniqueParaIds = new Set(paraIds); + expect(uniqueParaIds.size).toBe(paraIds.length); + }); + + it('should not produce "unknown" author when author is provided', async () => { + const payload = { + id: 'disc1', + authorName: 'Charlie', + authorInitials: 'C', + date: '2025-01-15T10:00:00.000Z', + text: 'Named comment', + }; + + const html = `

${buildCommentStartToken(payload)}text${buildCommentEndToken('disc1')}

`; + + const blob = await htmlToDocxBlob(html); + const zip = await loadZipFromBlob(blob); + const commentsXml = await getXmlFromZip(zip, 'word/comments.xml'); + + expect(commentsXml).not.toBeNull(); + expect(commentsXml).toContain('author="Charlie"'); + // "unknown" should not appear when author is explicitly provided + expect(commentsXml).not.toContain('author="unknown"'); + }); +}); diff --git a/packages/docx-io/src/lib/__tests__/export-replies-id.spec.ts b/packages/docx-io/src/lib/__tests__/export-replies-id.spec.ts new file mode 100644 index 0000000000..ce3c109057 --- /dev/null +++ b/packages/docx-io/src/lib/__tests__/export-replies-id.spec.ts @@ -0,0 +1,133 @@ +/** + * Tests for resolveCommentMeta() reply ID handling. + */ + +import { describe, expect, it } from 'bun:test'; + +import type { TNode } from 'platejs'; + +import type { DocxExportDiscussion } from '../exportTrackChanges'; +import { injectDocxTrackingTokens } from '../exportTrackChanges'; +import type { CommentPayload } from '../html-to-docx/tracking'; +import { splitDocxTrackingTokens } from '../html-to-docx/tracking'; + +/** Extract the first CommentPayload from injected token text */ +function extractCommentPayload( + discussionId: string, + discussions: DocxExportDiscussion[] +): CommentPayload | undefined { + const value: TNode[] = [ + { + type: 'p', + children: [ + { + text: 'Hello world', + [`comment_${discussionId}`]: true, + }, + ], + }, + ]; + + const result = injectDocxTrackingTokens(value, { discussions }); + const injectedText = ( + (result[0] as Record).children as Record[] + )[0].text as string; + + const tokens = splitDocxTrackingTokens(injectedText); + const commentStart = tokens.find((t) => t.type === 'commentStart'); + + if (commentStart && commentStart.type === 'commentStart') { + return commentStart.data; + } + + return; +} + +describe('resolveCommentMeta with reply IDs', () => { + it('should include IDs in replies', () => { + const discussionId = 'disc-001'; + + const discussions: DocxExportDiscussion[] = [ + { + id: discussionId, + comments: [ + { + contentRich: [ + { type: 'p', children: [{ text: 'Parent comment text' }] }, + ], + createdAt: '2025-01-15T10:00:00.000Z', + user: { id: 'user-1', name: 'Alice Author' }, + userId: 'user-1', + // Parent doesn't need explicit ID in this structure as discussion.id is used + }, + { + id: 'reply-1', // ID we want to preserve + contentRich: [ + { type: 'p', children: [{ text: 'First reply text' }] }, + ], + createdAt: '2025-01-15T11:00:00.000Z', + user: { id: 'user-2', name: 'Bob Reviewer' }, + userId: 'user-2', + }, + ], + createdAt: '2025-01-15T10:00:00.000Z', + documentContent: 'Parent comment text', + user: { id: 'user-1', name: 'Alice Author' }, + userId: 'user-1', + }, + ]; + + const payload = extractCommentPayload(discussionId, discussions); + + expect(payload).toBeDefined(); + expect(payload!.replies).toBeDefined(); + expect(payload!.replies).toHaveLength(1); + + // This check is expected to fail initially because 'id' is not passed through + expect(payload!.replies![0]!.id).toBe('reply-1'); + }); + + it('should generate IDs for replies when missing', () => { + const discussionId = 'disc-002'; + + const discussions: DocxExportDiscussion[] = [ + { + id: discussionId, + comments: [ + { + contentRich: [ + { type: 'p', children: [{ text: 'Parent comment text' }] }, + ], + createdAt: '2025-01-15T10:00:00.000Z', + user: { id: 'user-1', name: 'Alice Author' }, + userId: 'user-1', + }, + { + // Missing ID, should be generated + contentRich: [ + { type: 'p', children: [{ text: 'Reply without ID' }] }, + ], + createdAt: '2025-01-15T11:00:00.000Z', + user: { id: 'user-2', name: 'Bob Reviewer' }, + userId: 'user-2', + }, + ], + createdAt: '2025-01-15T10:00:00.000Z', + documentContent: 'Parent comment text', + user: { id: 'user-1', name: 'Alice Author' }, + userId: 'user-1', + }, + ]; + + const payload = extractCommentPayload(discussionId, discussions); + + expect(payload).toBeDefined(); + expect(payload!.replies).toBeDefined(); + expect(payload!.replies).toHaveLength(1); + + const replyId = payload!.replies![0]!.id; + expect(replyId).toBeDefined(); + expect(typeof replyId).toBe('string'); + expect(replyId.length).toBeGreaterThan(0); + }); +}); diff --git a/packages/docx-io/src/lib/__tests__/export-replies.spec.ts b/packages/docx-io/src/lib/__tests__/export-replies.spec.ts new file mode 100644 index 0000000000..6f22a1fe61 --- /dev/null +++ b/packages/docx-io/src/lib/__tests__/export-replies.spec.ts @@ -0,0 +1,146 @@ +/** + * Tests for resolveCommentMeta() reply handling. + * + * resolveCommentMeta is private, so we test through the public API: + * injectDocxTrackingTokens -> token text -> splitDocxTrackingTokens + * + * These tests should FAIL until Phase 3 implementation populates replies. + */ + +import { describe, expect, it } from 'bun:test'; + +import type { TNode } from 'platejs'; + +import type { DocxExportDiscussion } from '../exportTrackChanges'; +import { injectDocxTrackingTokens } from '../exportTrackChanges'; +import type { CommentPayload } from '../html-to-docx/tracking'; +import { splitDocxTrackingTokens } from '../html-to-docx/tracking'; + +/** Extract the first CommentPayload from injected token text */ +function extractCommentPayload( + discussionId: string, + discussions: DocxExportDiscussion[] +): CommentPayload | undefined { + const value: TNode[] = [ + { + type: 'p', + children: [ + { + text: 'Hello world', + [`comment_${discussionId}`]: true, + }, + ], + }, + ]; + + const result = injectDocxTrackingTokens(value, { discussions }); + const injectedText = ( + (result[0] as Record).children as Record[] + )[0].text as string; + + const tokens = splitDocxTrackingTokens(injectedText); + const commentStart = tokens.find((t) => t.type === 'commentStart'); + + if (commentStart && commentStart.type === 'commentStart') { + return commentStart.data; + } + + return; +} + +describe('resolveCommentMeta with replies', () => { + it('should include replies array from multi-comment discussion', () => { + const discussionId = 'disc-001'; + + const discussions: DocxExportDiscussion[] = [ + { + id: discussionId, + comments: [ + { + contentRich: [ + { type: 'p', children: [{ text: 'Parent comment text' }] }, + ], + createdAt: '2025-01-15T10:00:00.000Z', + user: { id: 'user-1', name: 'Alice Author' }, + userId: 'user-1', + }, + { + contentRich: [ + { type: 'p', children: [{ text: 'First reply text' }] }, + ], + createdAt: '2025-01-15T11:00:00.000Z', + user: { id: 'user-2', name: 'Bob Reviewer' }, + userId: 'user-2', + }, + { + contentRich: [ + { type: 'p', children: [{ text: 'Second reply text' }] }, + ], + createdAt: '2025-01-15T12:00:00.000Z', + user: { id: 'user-3', name: 'Carol Editor' }, + userId: 'user-3', + }, + ], + createdAt: '2025-01-15T10:00:00.000Z', + documentContent: 'Parent comment text', + user: { id: 'user-1', name: 'Alice Author' }, + userId: 'user-1', + }, + ]; + + const payload = extractCommentPayload(discussionId, discussions); + + expect(payload).toBeDefined(); + expect(payload!.id).toBe(discussionId); + + // Parent metadata + expect(payload!.authorName).toBe('Alice Author'); + expect(payload!.date).toBe('2025-01-15T10:00:00.000Z'); + + // Replies - this WILL FAIL until resolveCommentMeta populates replies + expect(payload!.replies).toBeDefined(); + expect(payload!.replies).toHaveLength(2); + + // First reply + expect(payload!.replies![0].authorName).toBe('Bob Reviewer'); + expect(payload!.replies![0].text).toBe('First reply text'); + expect(payload!.replies![0].date).toBe('2025-01-15T11:00:00.000Z'); + + // Second reply + expect(payload!.replies![1].authorName).toBe('Carol Editor'); + expect(payload!.replies![1].text).toBe('Second reply text'); + expect(payload!.replies![1].date).toBe('2025-01-15T12:00:00.000Z'); + }); + + it('should return empty replies for single-comment discussion', () => { + const discussionId = 'disc-002'; + + const discussions: DocxExportDiscussion[] = [ + { + id: discussionId, + comments: [ + { + contentRich: [{ type: 'p', children: [{ text: 'Only comment' }] }], + createdAt: '2025-01-15T10:00:00.000Z', + user: { id: 'user-1', name: 'Alice Author' }, + userId: 'user-1', + }, + ], + createdAt: '2025-01-15T10:00:00.000Z', + documentContent: 'Only comment', + user: { id: 'user-1', name: 'Alice Author' }, + userId: 'user-1', + }, + ]; + + const payload = extractCommentPayload(discussionId, discussions); + + expect(payload).toBeDefined(); + expect(payload!.id).toBe(discussionId); + expect(payload!.authorName).toBe('Alice Author'); + + // Single comment -> no replies (empty array or undefined) + const replies = payload!.replies ?? []; + expect(replies).toHaveLength(0); + }); +}); diff --git a/packages/docx-io/src/lib/__tests__/preprocessMammothHtml.spec.ts b/packages/docx-io/src/lib/__tests__/preprocessMammothHtml.spec.ts new file mode 100644 index 0000000000..371a478bc6 --- /dev/null +++ b/packages/docx-io/src/lib/__tests__/preprocessMammothHtml.spec.ts @@ -0,0 +1,20 @@ +import { preprocessMammothHtml } from '../importDocx'; + +describe('preprocessMammothHtml', () => { + it('throws when DOMParser is unavailable', () => { + const globalWithDom = globalThis as Omit & { + DOMParser?: typeof DOMParser; + }; + const originalDOMParser = globalWithDom.DOMParser; + + try { + globalWithDom.DOMParser = undefined; + + expect(() => preprocessMammothHtml('

Test

')).toThrow( + 'preprocessMammothHtml requires DOMParser (browser-like environment).' + ); + } finally { + globalWithDom.DOMParser = originalDOMParser; + } + }); +}); diff --git a/packages/docx-io/src/lib/__tests__/roundtrip-audit.spec.ts b/packages/docx-io/src/lib/__tests__/roundtrip-audit.spec.ts new file mode 100644 index 0000000000..2a7c130b48 --- /dev/null +++ b/packages/docx-io/src/lib/__tests__/roundtrip-audit.spec.ts @@ -0,0 +1,198 @@ +/** + * Round-trip audit: Export → Unzip → Inspect XML → Verify + * + * Checks that everything we put into the export comes out correctly + * in the OOXML ZIP, and that mammoth can parse it back. + */ +import { describe, expect, it } from 'bun:test'; +import JSZip from 'jszip'; + +import { htmlToDocxBlob } from '../exportDocx'; +import { + buildCommentStartToken, + buildCommentEndToken, + type CommentPayload, +} from '../html-to-docx/tracking'; + +async function loadZip(blob: Blob): Promise { + return JSZip.loadAsync(await blob.arrayBuffer()); +} + +async function getXml(zip: JSZip, path: string): Promise { + const file = zip.file(path); + return file ? file.async('text') : null; +} + +// Build a full HTML with comment tokens +function buildCommentHtml(payload: CommentPayload): string { + const start = buildCommentStartToken(payload); + const end = buildCommentEndToken(payload.id); + return `

${start}annotated text${end}

`; +} + +describe('Round-trip audit: export OOXML correctness', () => { + it('comments.xml should have correct author, not "unknown"', async () => { + const html = buildCommentHtml({ + id: 'disc1', + authorName: 'Alice', + authorInitials: 'A', + date: '2025-01-15T10:00:00.000Z', + text: 'Hello', + }); + const zip = await loadZip(await htmlToDocxBlob(html)); + const xml = await getXml(zip, 'word/comments.xml'); + + expect(xml).toContain('author="Alice"'); + expect(xml).not.toContain('author="unknown"'); + }); + + it('comments.xml should have paraId on element', async () => { + const html = buildCommentHtml({ + id: 'disc1', + authorName: 'Alice', + paraId: 'AABBCCDD', + text: 'Test', + }); + const zip = await loadZip(await htmlToDocxBlob(html)); + const xml = await getXml(zip, 'word/comments.xml'); + + expect(xml).toContain('AABBCCDD'); + }); + + it('commentsExtended.xml should exist and contain paraId', async () => { + const html = buildCommentHtml({ + id: 'disc1', + authorName: 'Alice', + paraId: '11223344', + text: 'Test', + }); + const zip = await loadZip(await htmlToDocxBlob(html)); + const xml = await getXml(zip, 'word/commentsExtended.xml'); + + expect(xml).not.toBeNull(); + expect(xml).toContain('11223344'); + }); + + it('reply should have parentParaId in commentsExtended.xml', async () => { + const html = buildCommentHtml({ + id: 'disc1', + authorName: 'Alice', + paraId: 'PARENT01', + text: 'Root comment', + replies: [ + { + id: 'reply1', + authorName: 'Bob', + paraId: 'REPLY001', + text: 'Reply text', + }, + ], + }); + const zip = await loadZip(await htmlToDocxBlob(html)); + const extXml = await getXml(zip, 'word/commentsExtended.xml'); + + expect(extXml).not.toBeNull(); + // Root comment paraId + expect(extXml).toContain('PARENT01'); + // Reply paraId + expect(extXml).toContain('REPLY001'); + // Reply should reference parent + expect(extXml).toContain('paraIdParent'); + }); + + it('document.xml should have commentRangeStart and commentRangeEnd', async () => { + const html = buildCommentHtml({ + id: 'disc1', + authorName: 'Alice', + text: 'Test', + }); + const zip = await loadZip(await htmlToDocxBlob(html)); + const xml = await getXml(zip, 'word/document.xml'); + + expect(xml).toContain('commentRangeStart'); + expect(xml).toContain('commentRangeEnd'); + expect(xml).toContain('commentReference'); + }); + + it('styles.xml should define CommentText and CommentReference styles', async () => { + const html = buildCommentHtml({ + id: 'disc1', + authorName: 'Alice', + text: 'Test', + }); + const zip = await loadZip(await htmlToDocxBlob(html)); + const xml = await getXml(zip, 'word/styles.xml'); + + // These styles are referenced by comments.xml — if missing, mammoth warns + expect(xml).toContain('CommentText'); + expect(xml).toContain('CommentReference'); + }); + + it('commentsExtended.xml namespace should use w15 prefix readable by mammoth', async () => { + const html = buildCommentHtml({ + id: 'disc1', + authorName: 'Alice', + paraId: 'AABB1122', + text: 'Test', + replies: [ + { + id: 'r1', + authorName: 'Bob', + paraId: 'CCDD3344', + text: 'Reply', + }, + ], + }); + const zip = await loadZip(await htmlToDocxBlob(html)); + const xml = await getXml(zip, 'word/commentsExtended.xml'); + + // mammoth expects element names like + // Check the actual namespace URI is declared + expect(xml).toContain( + 'http://schemas.microsoft.com/office/word/2012/wordml' + ); + // Check element name format - should be w15:commentEx or namespace-qualified + expect(xml).toContain('commentEx'); + expect(xml).toContain('paraId'); + }); + + it('two discussions should produce two separate comment entries', async () => { + const p1 = buildCommentStartToken({ + id: 'disc1', + authorName: 'Alice', + text: 'First', + }); + const p2 = buildCommentStartToken({ + id: 'disc2', + authorName: 'Bob', + text: 'Second', + }); + const html = + `

${p1}text1${buildCommentEndToken('disc1')}

` + + `

${p2}text2${buildCommentEndToken('disc2')}

`; + + const zip = await loadZip(await htmlToDocxBlob(html)); + const xml = await getXml(zip, 'word/comments.xml'); + + expect(xml).toContain('author="Alice"'); + expect(xml).toContain('author="Bob"'); + // Should have w:id="1" and w:id="2" + const idMatches = xml!.match(/w:id="(\d+)"/g); + expect(idMatches!.length).toBeGreaterThanOrEqual(2); + }); + + it('no tokens should remain in document.xml text', async () => { + const html = buildCommentHtml({ + id: 'disc1', + authorName: 'Alice', + text: 'Test', + }); + const zip = await loadZip(await htmlToDocxBlob(html)); + const xml = await getXml(zip, 'word/document.xml'); + + expect(xml).not.toContain('[[DOCX_CMT_START'); + expect(xml).not.toContain('[[DOCX_CMT_END'); + expect(xml).not.toContain('DOCX_INS_START'); + expect(xml).not.toContain('DOCX_DEL_START'); + }); +}); diff --git a/packages/docx-io/src/lib/__tests__/roundtrip.spec.tsx b/packages/docx-io/src/lib/__tests__/roundtrip.spec.tsx index 7032fc9be2..266afd3a70 100644 --- a/packages/docx-io/src/lib/__tests__/roundtrip.spec.tsx +++ b/packages/docx-io/src/lib/__tests__/roundtrip.spec.tsx @@ -1,19 +1,29 @@ /** @jsx jsx */ +/** biome-ignore-all lint/suspicious/noEvolvingTypes: test file */ +/** biome-ignore-all lint/suspicious/noImplicitAnyLet: test file */ +/** biome-ignore-all lint/suspicious/noAssignInExpressions: test file */ +/** biome-ignore-all lint/suspicious/useIterableCallbackReturn: test file */ import fs from 'node:fs'; import path from 'node:path'; +import { getCommentKey } from '@platejs/comment'; import { cleanDocx } from '@platejs/docx'; +import { jsx } from '@platejs/test-utils'; +import JSZip from 'jszip'; import type { SlatePlugin, TNode, Value } from 'platejs'; -import { createSlateEditor } from 'platejs'; +import { createSlateEditor, KEYS, NodeApi, TextApi } from 'platejs'; import { serializeHtml } from 'platejs/static'; -import { jsx } from '@platejs/test-utils'; -import mammoth from 'mammoth'; import { BaseEditorKit } from 'www/src/registry/components/editor/editor-base-kit'; import { DocxExportKit } from 'www/src/registry/components/editor/plugins/docx-export-kit'; - -import { htmlToDocxBlob } from '../html-to-docx'; -import { preprocessMammothHtml } from '../preprocessMammothHtml'; +import { exportToDocx, htmlToDocxBlob } from '../docx-export-plugin'; +import type { DocxExportDiscussion } from '../exportTrackChanges'; +import { + applyTrackedCommentsLocal, + parseDocxTracking, +} from '../importComments'; +import { mammoth, preprocessMammothHtml } from '../importDocx'; +import { searchRange } from '../searchRange'; jsx; @@ -35,12 +45,24 @@ const readDocxFixture = (filename: string): Buffer => { return fs.readFileSync(filepath); }; +const readMammothFixture = (filename: string): Buffer => { + const docxTestDir = path.resolve(__dirname, '../mammoth.js/test/test-data'); + const filepath = path.join(docxTestDir, `${filename}.docx`); + + return fs.readFileSync(filepath); +}; + const importDocxBuffer = async ( editor: ReturnType, buffer: Buffer ): Promise => { + // Convert Node Buffer to ArrayBuffer for mammoth + const arrayBuffer = buffer.buffer.slice( + buffer.byteOffset, + buffer.byteOffset + buffer.byteLength + ) as ArrayBuffer; const mammothResult = await mammoth.convertToHtml( - { buffer }, + { arrayBuffer }, { styleMap: ['comment-reference => sup'] } ); @@ -68,6 +90,33 @@ const exportNodesToDocx = async (nodes: TNode[]): Promise => { return Buffer.from(arrayBuffer); }; +const loadZipFromBlob = async (blob: Blob): Promise => { + const arrayBuffer = await blob.arrayBuffer(); + return JSZip.loadAsync(arrayBuffer); +}; + +const hasCommentMark = (nodes: TNode[]): boolean => { + let found = false; + + const visit = (node: TNode) => { + if (found) return; + if (typeof node.text === 'string') { + if (Object.keys(node).some((key) => key.startsWith('comment_'))) { + found = true; + } + return; + } + + if ('children' in node && Array.isArray(node.children)) { + node.children.forEach((child) => visit(child as TNode)); + } + }; + + nodes.forEach((node) => visit(node)); + + return found; +}; + /** * Roundtrip test: import → export → reimport * @@ -143,4 +192,437 @@ describe('docx roundtrip', () => { expect(nodesD.length).toBeGreaterThan(0); // Note: nodesD won't equal nodesB due to mark/linebreak loss }); + + it('should roundtrip comments without ref tokens and with non-empty ranges', async () => { + const buffer = readMammothFixture('comments'); + const editor = createTestEditor(); + + // Convert Node Buffer to ArrayBuffer for mammoth + const arrayBuffer = buffer.buffer.slice( + buffer.byteOffset, + buffer.byteOffset + buffer.byteLength + ) as ArrayBuffer; + const mammothResult = await mammoth.convertToHtml( + { arrayBuffer }, + { styleMap: ['comment-reference => sup'] } + ); + + const { html: preprocessedHtml } = preprocessMammothHtml( + mammothResult.value + ); + + expect(preprocessedHtml).not.toContain('DOCX_COMMENT_REF'); + expect(preprocessedHtml).not.toContain('comment-ref-'); + + const cleanedHtml = cleanDocx(preprocessedHtml, ''); + const doc = new DOMParser().parseFromString(cleanedHtml, 'text/html'); + const nodes = editor.api.html.deserialize({ element: doc.body }) as TNode[]; + + expect(JSON.stringify(nodes)).not.toContain('DOCX_COMMENT_REF'); + + const tracking = parseDocxTracking(mammothResult.value); + const commentEditor = createTestEditor(nodes as Value); + let discussionIndex = 0; + + const commentsResult = applyTrackedCommentsLocal({ + editor: commentEditor as Parameters< + typeof applyTrackedCommentsLocal + >[0]['editor'], + comments: tracking.comments.comments, + searchRange: (_editor, search) => + searchRange(commentEditor as Parameters[0], search), + commentKey: KEYS.comment, + getCommentKey, + isText: TextApi.isText, + generateId: () => `discussion-${(discussionIndex += 1)}`, + documentDate: new Date(), + }); + + expect(commentsResult.discussions.length).toBeGreaterThan(0); + expect(hasCommentMark(commentEditor.children as TNode[])).toBe(true); + + const docxDiscussions: DocxExportDiscussion[] = + commentsResult.discussions.map((discussion) => ({ + id: discussion.id, + comments: discussion.comments?.map((comment) => ({ + contentRich: comment.contentRich, + createdAt: comment.createdAt, + userId: comment.userId, + user: comment.user, + })), + createdAt: discussion.createdAt, + documentContent: discussion.documentContent, + userId: discussion.userId, + user: discussion.user, + })); + + const exportBlob = await exportToDocx(commentEditor.children as Value, { + editorPlugins, + tracking: { + discussions: docxDiscussions, + nodeToString: (node: unknown) => { + try { + return NodeApi.string(node as Parameters[0]); + } catch { + return ''; + } + }, + }, + }); + + const zip = await loadZipFromBlob(exportBlob); + const docXml = await zip.file('word/document.xml')!.async('string'); + + expect(docXml).toContain(']*w:id="(\d+)"/g; + let match; + + while ((match = startRegex.exec(docXml)) !== null) { + const id = match[1]; + const remaining = docXml.slice(match.index); + const endMatch = new RegExp(`]*w:id="${id}"`).exec( + remaining + ); + + expect(endMatch).not.toBeNull(); + if (!endMatch) continue; + + const endIndex = match.index + endMatch.index; + const between = docXml.slice(match.index, endIndex); + expect(between).toMatch(/ { + // Create editor value with a comment mark + const discussionId = 'disc-1'; + const value: Value = [ + { + type: 'p', + children: [ + { + text: 'Hello commented world', + [`comment_${discussionId}`]: true, + }, + ], + }, + ]; + + // Discussion with 1 parent comment + 1 reply + const docxDiscussions: DocxExportDiscussion[] = [ + { + id: discussionId, + comments: [ + { + contentRich: [ + { type: 'p', children: [{ text: 'Parent comment' }] }, + ], + createdAt: new Date('2025-01-01T00:00:00Z'), + userId: 'user-1', + user: { id: 'user-1', name: 'Alice' }, + }, + { + contentRich: [{ type: 'p', children: [{ text: 'Reply comment' }] }], + createdAt: new Date('2025-01-01T01:00:00Z'), + userId: 'user-2', + user: { id: 'user-2', name: 'Bob' }, + }, + ], + createdAt: new Date('2025-01-01T00:00:00Z'), + documentContent: 'Hello commented world', + userId: 'user-1', + user: { id: 'user-1', name: 'Alice' }, + }, + ]; + + const exportBlob = await exportToDocx(value, { + editorPlugins, + tracking: { + discussions: docxDiscussions, + nodeToString: (node: unknown) => { + try { + return NodeApi.string(node as Parameters[0]); + } catch { + return ''; + } + }, + }, + }); + + const zip = await loadZipFromBlob(exportBlob); + + const expectedFiles = [ + 'word/comments.xml', + 'word/commentsExtended.xml', + 'word/commentsIds.xml', + 'word/commentsExtensible.xml', + 'word/people.xml', + ]; + + for (const filePath of expectedFiles) { + expect( + zip.file(filePath), + `Expected ZIP to contain ${filePath}` + ).not.toBeNull(); + } + }); + + it('should produce people.xml with unique authors only', async () => { + // Build a minimal editor value with a comment mark on "Hello" + const value: Value = [ + { + type: 'p', + children: [{ text: 'Hello', comment_disc1: true }, { text: ' world' }], + }, + ]; + + // Discussion: parent by Alice, reply by Bob + const docxDiscussions: DocxExportDiscussion[] = [ + { + id: 'disc1', + userId: 'alice-id', + user: { id: 'alice-id', name: 'Alice' }, + createdAt: new Date('2026-01-01T00:00:00Z'), + documentContent: 'Hello', + comments: [ + { + userId: 'alice-id', + user: { id: 'alice-id', name: 'Alice' }, + createdAt: new Date('2026-01-01T00:00:00Z'), + contentRich: [ + { type: 'p', children: [{ text: 'Parent comment' }] }, + ], + }, + { + userId: 'bob-id', + user: { id: 'bob-id', name: 'Bob' }, + createdAt: new Date('2026-01-01T00:01:00Z'), + contentRich: [{ type: 'p', children: [{ text: 'Reply comment' }] }], + }, + ], + }, + ]; + + const exportBlob = await exportToDocx(value, { + editorPlugins, + tracking: { + discussions: docxDiscussions, + nodeToString: (node: unknown) => { + try { + return NodeApi.string(node as Parameters[0]); + } catch { + return ''; + } + }, + }, + }); + + const zip = await loadZipFromBlob(exportBlob); + const peopleFile = zip.file('word/people.xml'); + + expect(peopleFile).not.toBeNull(); + + const peopleXml = await peopleFile!.async('string'); + + // Extract all elements with their w15:author attributes + const personRegex = /]*w15:author="([^"]*)"/g; + const authors: string[] = []; + let personMatch; + + while ((personMatch = personRegex.exec(peopleXml)) !== null) { + authors.push(personMatch[1]); + } + + // Exactly 2 unique authors: Alice and Bob + expect(authors).toHaveLength(2); + expect(authors).toContain('Alice'); + expect(authors).toContain('Bob'); + + // Verify uniqueness -- no duplicates + const uniqueAuthors = [...new Set(authors)]; + expect(uniqueAuthors).toHaveLength(authors.length); + }); + + it('should export commentsExtended.xml with correct paraIdParent linking for replies', async () => { + // Create editor value with a comment mark on text + const discussionId = 'disc-parent-reply'; + const value: Value = [ + { + type: 'p', + children: [ + { + text: 'Hello world with comment', + [`comment_${discussionId}`]: true, + }, + ], + }, + ]; + + // Discussion with parent comment (comments[0]) and a reply (comments[1]) + const discussions: DocxExportDiscussion[] = [ + { + id: discussionId, + comments: [ + { + contentRich: [ + { type: 'p', children: [{ text: 'Parent comment' }] }, + ], + createdAt: new Date('2024-01-01T00:00:00Z'), + user: { id: 'user1', name: 'Alice' }, + userId: 'user1', + }, + { + contentRich: [ + { type: 'p', children: [{ text: 'Reply to parent' }] }, + ], + createdAt: new Date('2024-01-01T01:00:00Z'), + user: { id: 'user2', name: 'Bob' }, + userId: 'user2', + }, + ], + createdAt: new Date('2024-01-01T00:00:00Z'), + documentContent: 'Hello world with comment', + user: { id: 'user1', name: 'Alice' }, + userId: 'user1', + }, + ]; + + const exportBlob = await exportToDocx(value, { + editorPlugins, + tracking: { + discussions, + nodeToString: (node: unknown) => { + try { + return NodeApi.string(node as Parameters[0]); + } catch { + return ''; + } + }, + }, + }); + + const zip = await loadZipFromBlob(exportBlob); + + // commentsExtended.xml must exist + const commentsExtFile = zip.file('word/commentsExtended.xml'); + expect(commentsExtFile).not.toBeNull(); + + const commentsExtXml = await commentsExtFile!.async('string'); + + // Parse all w15:commentEx elements (self-closing or with body) + const commentExRegex = /]*\/?>/g; + const commentExElements: string[] = []; + let ceMatch; + + // biome-ignore lint/suspicious/noAssignInExpressions: idiomatic regex loop + while ((ceMatch = commentExRegex.exec(commentsExtXml)) !== null) { + commentExElements.push(ceMatch[0]); + } + + // Should have at least 2 commentEx elements (parent + reply) + expect(commentExElements.length).toBeGreaterThanOrEqual(2); + + // Helper: extract an attribute value from an XML element string + const parseAttr = (el: string, attr: string): string | null => { + const attrRegex = new RegExp(`${attr}="([^"]+)"`); + const m = attrRegex.exec(el); + return m ? m[1] : null; + }; + + // Find the parent commentEx (has w15:paraId but NO w15:paraIdParent) + const parentElements = commentExElements.filter( + (el) => parseAttr(el, 'w15:paraId') && !parseAttr(el, 'w15:paraIdParent') + ); + expect(parentElements.length).toBeGreaterThanOrEqual(1); + + const parentParaId = parseAttr(parentElements[0], 'w15:paraId'); + expect(parentParaId).toBeTruthy(); + + // Find the reply commentEx (has w15:paraIdParent matching parent's w15:paraId) + const replyElements = commentExElements.filter( + (el) => parseAttr(el, 'w15:paraIdParent') === parentParaId + ); + expect(replyElements.length).toBeGreaterThanOrEqual(1); + + // Reply must also have its own paraId + const replyParaId = parseAttr(replyElements[0], 'w15:paraId'); + expect(replyParaId).toBeTruthy(); + + // Parent and reply paraIds must be different + expect(replyParaId).not.toBe(parentParaId); + }); + + it('should round-trip comment date through export', async () => { + const inputDate = '2025-01-15T10:30:00Z'; + const discussionId = 'date-roundtrip-disc'; + + const value: Value = [ + { + type: 'p', + children: [ + { text: 'Before ' }, + { text: 'dated comment', [`comment_${discussionId}`]: true }, + { text: ' after.' }, + ], + }, + ]; + + const discussions: DocxExportDiscussion[] = [ + { + id: discussionId, + comments: [ + { + contentRich: [ + { type: 'p', children: [{ text: 'Comment with date' }] }, + ], + createdAt: inputDate, + user: { id: 'user-1', name: 'Test User' }, + userId: 'user-1', + }, + ], + createdAt: inputDate, + documentContent: 'dated comment', + user: { id: 'user-1', name: 'Test User' }, + userId: 'user-1', + }, + ]; + + const exportBlob = await exportToDocx(value, { + editorPlugins, + tracking: { + discussions, + nodeToString: (node: unknown) => { + try { + return NodeApi.string(node as Parameters[0]); + } catch { + return ''; + } + }, + }, + }); + + const zip = await loadZipFromBlob(exportBlob); + const commentsFile = zip.file('word/comments.xml'); + expect(commentsFile).not.toBeNull(); + + const commentsXml = await commentsFile!.async('string'); + + // Extract all w:date attributes from w:comment elements + const commentDateRegex = /]*w:date="([^"]*)"/g; + const dates: string[] = []; + let dateMatch; + + while ((dateMatch = commentDateRegex.exec(commentsXml)) !== null) { + dates.push(dateMatch[1]); + } + + expect(dates.length).toBeGreaterThan(0); + + // Verify the exported date represents the same instant as input (may differ in tz offset) + const inputMs = new Date(inputDate).getTime(); + const matchesInstant = dates.some((d) => new Date(d).getTime() === inputMs); + expect(matchesInstant).toBe(true); + }); }); diff --git a/packages/docx-io/src/lib/__tests__/testDocxImporter.tsx b/packages/docx-io/src/lib/__tests__/testDocxImporter.tsx index 74fb7163e8..162524e8e8 100644 --- a/packages/docx-io/src/lib/__tests__/testDocxImporter.tsx +++ b/packages/docx-io/src/lib/__tests__/testDocxImporter.tsx @@ -20,9 +20,7 @@ import { ListPlugin } from '@platejs/list/react'; import { ImagePlugin } from '@platejs/media/react'; import { TablePlugin } from '@platejs/table/react'; import { jsx } from '@platejs/test-utils'; -import mammoth from 'mammoth'; - -import { preprocessMammothHtml } from '../preprocessMammothHtml'; +import { mammoth, preprocessMammothHtml } from '../importDocx'; // biome-ignore lint/nursery/noUnusedExpressions: test jsx; @@ -81,9 +79,15 @@ export const testDocxImporter = ({ // Read docx file as Node Buffer const buffer = readDocxFixture(filename); - // Use mammoth with buffer option (Node.js compatible) + // Convert Node Buffer to ArrayBuffer for mammoth + const arrayBuffer = buffer.buffer.slice( + buffer.byteOffset, + buffer.byteOffset + buffer.byteLength + ) as ArrayBuffer; + + // Use mammoth with arrayBuffer option const mammothResult = await mammoth.convertToHtml( - { buffer }, + { arrayBuffer }, { styleMap: ['comment-reference => sup'] } ); diff --git a/packages/docx-io/src/lib/__tests__/xml-builder-falsy-ids.spec.ts b/packages/docx-io/src/lib/__tests__/xml-builder-falsy-ids.spec.ts new file mode 100644 index 0000000000..b7ff789949 --- /dev/null +++ b/packages/docx-io/src/lib/__tests__/xml-builder-falsy-ids.spec.ts @@ -0,0 +1,54 @@ +import { describe, expect, it } from 'bun:test'; +import JSZip from 'jszip'; +import { htmlToDocxBlob } from '../exportDocx'; +import { buildCommentStartToken } from '../html-to-docx/tracking'; + +async function loadZipFromBlob(blob: Blob): Promise { + const arrayBuffer = await blob.arrayBuffer(); + return JSZip.loadAsync(arrayBuffer); +} + +describe('XML Builder Regression Tests', () => { + it('should handle falsy but valid IDs (empty string) for replies without overriding them', async () => { + // Construct a comment payload where a reply has an empty string ID + const payload = { + id: 'cmt-1', + authorName: 'Test User', + text: 'Parent', + replies: [ + { + id: '', // Empty string ID (falsy) + authorName: 'Reply User', + text: 'Reply with empty ID', + }, + ], + }; + + // We expect the XML builder to use "" as the ID, not "cmt-1-reply-0" + // And subsequently track it and close it properly. + + const token = buildCommentStartToken(payload); + const html = `

Text ${token}Commented${'[[DOCX_CMT_END:cmt-1]]'}

`; + + const blob = await htmlToDocxBlob(html); + const zip = await loadZipFromBlob(blob); + + // Check comments.xml to see if a comment was created for the reply + const commentsXml = await zip.file('word/comments.xml')!.async('string'); + + // There should be 2 comments: parent and reply. + // The reply should have the text "Reply with empty ID" + expect(commentsXml).toContain('Reply with empty ID'); + + // Check document.xml to ensure ranges are closed + const docXml = await zip.file('word/document.xml')!.async('string'); + + // We expect 2 pairs of commentRangeStart/End + // Counting them is a rough check + const startCount = (docXml.match(/ 'sample text'), + rangeRef: (range: TRange) => ({ + current: range, + unref: mock(() => range), + }), + }, + tf: { + setNodes: mock(() => {}), + delete: mock(() => {}), + withMerging: mock((fn: () => void) => fn()), + }, + setOption: mock(() => {}), + }; +} + +// Mock search function that returns predictable ranges +function createMockSearchRange( + tokenMap?: Map +): (editor: TrackingEditor, search: string) => TRange | null { + return (_editor, search) => { + if (tokenMap) { + return tokenMap.get(search) ?? null; + } + // Default behavior: return a range for tokens + if (search.includes('START') || search.includes('END')) { + return { + anchor: { path: [0, 0], offset: 0 }, + focus: { path: [0, 0], offset: search.length }, + }; + } + return null; + }; +} + +describe('applyDocxTracking', () => { + describe('applyTrackedChangeSuggestions', () => { + it('returns zero counts for empty changes', () => { + const editor = createMockEditor(); + const result = applyTrackedChangeSuggestions({ + editor, + changes: [], + searchRange: createMockSearchRange(), + suggestionKey: 'suggestion', + getSuggestionKey: (id) => `suggestion_${id}`, + isText: (node) => + typeof (node as Record).text === 'string', + }); + + expect(result.insertions).toBe(0); + expect(result.deletions).toBe(0); + expect(result.total).toBe(0); + expect(result.errors).toEqual([]); + }); + + it('applies insertion suggestion', () => { + const editor = createMockEditor(); + const changes: DocxTrackedChange[] = [ + { + id: 'ins-1', + type: 'insert', + author: 'John Doe', + date: '2024-01-15T12:00:00Z', + startToken: '[[START:ins-1]]', + endToken: '[[END:ins-1]]', + }, + ]; + + const result = applyTrackedChangeSuggestions({ + editor, + changes, + searchRange: createMockSearchRange(), + suggestionKey: 'suggestion', + getSuggestionKey: (id) => `suggestion_${id}`, + isText: (node) => + typeof (node as Record).text === 'string', + }); + + expect(result.insertions).toBe(1); + expect(result.deletions).toBe(0); + expect(result.total).toBe(1); + expect(editor.tf.setNodes).toHaveBeenCalled(); + }); + + it('applies deletion suggestion', () => { + const editor = createMockEditor(); + const changes: DocxTrackedChange[] = [ + { + id: 'del-1', + type: 'remove', + author: 'Jane Doe', + startToken: '[[START:del-1]]', + endToken: '[[END:del-1]]', + }, + ]; + + const result = applyTrackedChangeSuggestions({ + editor, + changes, + searchRange: createMockSearchRange(), + suggestionKey: 'suggestion', + getSuggestionKey: (id) => `suggestion_${id}`, + isText: (node) => + typeof (node as Record).text === 'string', + }); + + expect(result.insertions).toBe(0); + expect(result.deletions).toBe(1); + expect(result.total).toBe(1); + }); + + it('handles missing start token', () => { + const editor = createMockEditor(); + const tokenMap = new Map(); + tokenMap.set('[[START:missing]]', null); + tokenMap.set('[[END:missing]]', { + anchor: { path: [0, 0], offset: 0 }, + focus: { path: [0, 0], offset: 10 }, + }); + + const changes: DocxTrackedChange[] = [ + { + id: 'missing', + type: 'insert', + startToken: '[[START:missing]]', + endToken: '[[END:missing]]', + }, + ]; + + const result = applyTrackedChangeSuggestions({ + editor, + changes, + searchRange: createMockSearchRange(tokenMap), + suggestionKey: 'suggestion', + getSuggestionKey: (id) => `suggestion_${id}`, + isText: (node) => + typeof (node as Record).text === 'string', + }); + + expect(result.total).toBe(0); + expect(result.errors.length).toBe(1); + expect(result.errors[0]).toContain('Missing token'); + }); + + it('handles missing end token', () => { + const editor = createMockEditor(); + const tokenMap = new Map(); + tokenMap.set('[[START:missing]]', { + anchor: { path: [0, 0], offset: 0 }, + focus: { path: [0, 0], offset: 10 }, + }); + tokenMap.set('[[END:missing]]', null); + + const changes: DocxTrackedChange[] = [ + { + id: 'missing', + type: 'insert', + startToken: '[[START:missing]]', + endToken: '[[END:missing]]', + }, + ]; + + const result = applyTrackedChangeSuggestions({ + editor, + changes, + searchRange: createMockSearchRange(tokenMap), + suggestionKey: 'suggestion', + getSuggestionKey: (id) => `suggestion_${id}`, + isText: (node) => + typeof (node as Record).text === 'string', + }); + + expect(result.total).toBe(0); + expect(result.errors.length).toBe(1); + }); + + it('applies multiple changes', () => { + const editor = createMockEditor(); + const changes: DocxTrackedChange[] = [ + { + id: 'change-1', + type: 'insert', + startToken: '[[START:1]]', + endToken: '[[END:1]]', + }, + { + id: 'change-2', + type: 'remove', + startToken: '[[START:2]]', + endToken: '[[END:2]]', + }, + { + id: 'change-3', + type: 'insert', + startToken: '[[START:3]]', + endToken: '[[END:3]]', + }, + ]; + + const result = applyTrackedChangeSuggestions({ + editor, + changes, + searchRange: createMockSearchRange(), + suggestionKey: 'suggestion', + getSuggestionKey: (id) => `suggestion_${id}`, + isText: (node) => + typeof (node as Record).text === 'string', + }); + + expect(result.insertions).toBe(2); + expect(result.deletions).toBe(1); + expect(result.total).toBe(3); + }); + + it('deletes tokens after applying marks', () => { + const editor = createMockEditor(); + const changes: DocxTrackedChange[] = [ + { + id: 'ins-1', + type: 'insert', + startToken: '[[START:ins-1]]', + endToken: '[[END:ins-1]]', + }, + ]; + + applyTrackedChangeSuggestions({ + editor, + changes, + searchRange: createMockSearchRange(), + suggestionKey: 'suggestion', + getSuggestionKey: (id) => `suggestion_${id}`, + isText: () => true, + }); + + // Delete should be called twice (start and end tokens) + expect(editor.tf.delete).toHaveBeenCalledTimes(2); + }); + + it('handles invalid rangeRef (null current)', () => { + const editor: TrackingEditor = { + api: { + string: mock(() => 'sample text'), + rangeRef: () => ({ + current: null, + unref: mock(() => null), + }), + }, + tf: { + setNodes: mock(() => {}), + delete: mock(() => {}), + withMerging: mock((fn: () => void) => fn()), + }, + }; + + const changes: DocxTrackedChange[] = [ + { + id: 'change-1', + type: 'insert', + startToken: '[[START:1]]', + endToken: '[[END:1]]', + }, + ]; + + const result = applyTrackedChangeSuggestions({ + editor, + changes, + searchRange: createMockSearchRange(), + suggestionKey: 'suggestion', + getSuggestionKey: (id) => `suggestion_${id}`, + isText: () => true, + }); + + expect(result.total).toBe(0); + expect(result.errors.length).toBe(1); + expect(result.errors[0]).toContain('Invalid range'); + }); + + it('handles exceptions during processing', () => { + const editor: TrackingEditor = { + api: { + string: mock(() => 'sample text'), + rangeRef: () => { + throw new Error('Test error'); + }, + }, + tf: { + setNodes: mock(() => {}), + delete: mock(() => {}), + withMerging: mock((fn: () => void) => fn()), + }, + }; + + const changes: DocxTrackedChange[] = [ + { + id: 'change-1', + type: 'insert', + startToken: '[[START:1]]', + endToken: '[[END:1]]', + }, + ]; + + const result = applyTrackedChangeSuggestions({ + editor, + changes, + searchRange: createMockSearchRange(), + suggestionKey: 'suggestion', + getSuggestionKey: (id) => `suggestion_${id}`, + isText: () => true, + }); + + expect(result.total).toBe(0); + expect(result.errors.length).toBe(1); + expect(result.errors[0]).toContain('Failed to apply change'); + expect(result.errors[0]).toContain('Test error'); + }); + + it('handles non-Error exceptions', () => { + const editor: TrackingEditor = { + api: { + string: mock(() => 'sample text'), + rangeRef: () => { + throw new Error('string error'); + }, + }, + tf: { + setNodes: mock(() => {}), + delete: mock(() => {}), + withMerging: mock((fn: () => void) => fn()), + }, + }; + + const changes: DocxTrackedChange[] = [ + { + id: 'change-1', + type: 'insert', + startToken: '[[START:1]]', + endToken: '[[END:1]]', + }, + ]; + + const result = applyTrackedChangeSuggestions({ + editor, + changes, + searchRange: createMockSearchRange(), + suggestionKey: 'suggestion', + getSuggestionKey: (id) => `suggestion_${id}`, + isText: () => true, + }); + + expect(result.errors[0]).toContain('string error'); + }); + + it('handles missing author (uses default)', () => { + const editor = createMockEditor(); + const changes: DocxTrackedChange[] = [ + { + id: 'change-1', + type: 'insert', + author: undefined, + startToken: '[[START:1]]', + endToken: '[[END:1]]', + }, + ]; + + const result = applyTrackedChangeSuggestions({ + editor, + changes, + searchRange: createMockSearchRange(), + suggestionKey: 'suggestion', + getSuggestionKey: (id) => `suggestion_${id}`, + isText: () => true, + }); + + expect(result.total).toBe(1); + }); + + it('handles invalid date (uses current time)', () => { + const editor = createMockEditor(); + const changes: DocxTrackedChange[] = [ + { + id: 'change-1', + type: 'insert', + date: 'invalid-date', + startToken: '[[START:1]]', + endToken: '[[END:1]]', + }, + ]; + + const result = applyTrackedChangeSuggestions({ + editor, + changes, + searchRange: createMockSearchRange(), + suggestionKey: 'suggestion', + getSuggestionKey: (id) => `suggestion_${id}`, + isText: () => true, + }); + + expect(result.total).toBe(1); + }); + }); + + describe('applyTrackedComments', () => { + it('returns zero counts for empty comments', async () => { + const editor = createMockEditor(); + const result = await applyTrackedComments({ + editor, + comments: [], + searchRange: createMockSearchRange(), + documentId: 'doc-1', + createDiscussionWithComment: { + mutateAsync: mock(async () => ({ id: 'disc-1' })), + }, + commentKey: 'comment', + getCommentKey: (id) => `comment_${id}`, + isText: () => true, + }); + + expect(result.created).toBe(0); + expect(result.skipped).toBe(0); + expect(result.errors).toEqual([]); + }); + + it('creates comment for valid tokens', async () => { + const editor = createMockEditor(); + const createDiscussion = mock(async () => ({ id: 'disc-new' })); + + const comments: DocxImportComment[] = [ + { + id: 'cmt-1', + text: 'Test comment', + startToken: '[[CMT_START:1]]', + endToken: '[[CMT_END:1]]', + hasStartToken: true, + hasEndToken: true, + }, + ]; + + const result = await applyTrackedComments({ + editor, + comments, + searchRange: createMockSearchRange(), + documentId: 'doc-1', + createDiscussionWithComment: { mutateAsync: createDiscussion }, + commentKey: 'comment', + getCommentKey: (id) => `comment_${id}`, + isText: () => true, + }); + + expect(result.created).toBe(1); + expect(result.skipped).toBe(0); + expect(createDiscussion).toHaveBeenCalledWith( + expect.objectContaining({ + documentId: 'doc-1', + }) + ); + }); + + it('handles null ranges during cleanup', async () => { + const refs: Array<{ + current: TRange | null; + unref: () => TRange | null; + }> = []; + const editor: TrackingEditor = { + api: { + string: mock(() => 'sample text'), + rangeRef: (range: TRange) => { + const ref = { current: range, unref: mock(() => range) }; + refs.push(ref); + return ref; + }, + }, + tf: { + setNodes: mock(() => {}), + delete: mock(() => {}), + withMerging: mock((fn: () => void) => { + fn(); + refs.forEach((ref) => { + ref.current = null; + }); + }), + }, + setOption: mock(() => {}), + }; + + const comments: DocxImportComment[] = [ + { + id: 'cmt-1', + text: 'Test comment', + startToken: '[[CMT_START:1]]', + endToken: '[[CMT_END:1]]', + hasStartToken: true, + hasEndToken: true, + }, + ]; + + const result = await applyTrackedComments({ + editor, + comments, + searchRange: createMockSearchRange(), + documentId: 'doc-1', + createDiscussionWithComment: { + mutateAsync: mock(async () => ({ id: 'disc-1' })), + }, + commentKey: 'comment', + getCommentKey: (id) => `comment_${id}`, + isText: () => true, + }); + + expect(result.created).toBe(1); + expect(result.errors).toEqual([]); + expect(editor.tf.setNodes).toHaveBeenCalled(); + expect(editor.tf.delete).not.toHaveBeenCalled(); + }); + + it('skips comment with no tokens found', async () => { + const editor = createMockEditor(); + const tokenMap = new Map(); + tokenMap.set('[[CMT_START:1]]', null); + tokenMap.set('[[CMT_END:1]]', null); + + const comments: DocxImportComment[] = [ + { + id: 'cmt-1', + text: 'Test comment', + startToken: '[[CMT_START:1]]', + endToken: '[[CMT_END:1]]', + hasStartToken: true, + hasEndToken: true, + }, + ]; + + const result = await applyTrackedComments({ + editor, + comments, + searchRange: createMockSearchRange(tokenMap), + documentId: 'doc-1', + createDiscussionWithComment: { + mutateAsync: mock(async () => ({ id: 'disc-1' })), + }, + commentKey: 'comment', + getCommentKey: (id) => `comment_${id}`, + isText: () => true, + }); + + expect(result.created).toBe(0); + expect(result.skipped).toBe(1); + }); + + it('creates point comment when only start token found', async () => { + const editor = createMockEditor(); + const tokenMap = new Map(); + tokenMap.set('[[CMT_START:1]]', { + anchor: { path: [0, 0], offset: 0 }, + focus: { path: [0, 0], offset: 10 }, + }); + tokenMap.set('[[CMT_END:1]]', null); + + const comments: DocxImportComment[] = [ + { + id: 'cmt-1', + text: 'Point comment', + startToken: '[[CMT_START:1]]', + endToken: '[[CMT_END:1]]', + hasStartToken: true, + hasEndToken: false, // Indicates end token not in original HTML + }, + ]; + + const createDiscussion = mock(async () => ({ id: 'disc-point' })); + + const result = await applyTrackedComments({ + editor, + comments, + searchRange: createMockSearchRange(tokenMap), + documentId: 'doc-1', + createDiscussionWithComment: { mutateAsync: createDiscussion }, + commentKey: 'comment', + getCommentKey: (id) => `comment_${id}`, + isText: () => true, + }); + + expect(result.created).toBe(1); + }); + + it('applies transient comment key when provided', async () => { + const editor = createMockEditor(); + const comments: DocxImportComment[] = [ + { + id: 'cmt-1', + text: 'Test', + startToken: '[[CMT_START:1]]', + endToken: '[[CMT_END:1]]', + hasStartToken: true, + hasEndToken: true, + }, + ]; + + await applyTrackedComments({ + editor, + comments, + searchRange: createMockSearchRange(), + documentId: 'doc-1', + createDiscussionWithComment: { + mutateAsync: mock(async () => ({ id: 'disc-1' })), + }, + commentKey: 'comment', + getCommentKey: (id) => `comment_${id}`, + getTransientCommentKey: () => 'transient_comment', + isText: () => true, + }); + + expect(editor.tf.setNodes).toHaveBeenCalledWith( + expect.objectContaining({ + transient_comment: true, + }), + expect.any(Object) + ); + }); + + it('calls onCommentsCreated callback when comments are created', async () => { + const editor = createMockEditor(); + const onCommentsCreated = mock(() => {}); + + const comments: DocxImportComment[] = [ + { + id: 'cmt-1', + text: 'Test', + startToken: '[[CMT_START:1]]', + endToken: '[[CMT_END:1]]', + hasStartToken: true, + hasEndToken: true, + }, + ]; + + await applyTrackedComments({ + editor, + comments, + searchRange: createMockSearchRange(), + documentId: 'doc-1', + createDiscussionWithComment: { + mutateAsync: mock(async () => ({ id: 'disc-1' })), + }, + commentKey: 'comment', + getCommentKey: (id) => `comment_${id}`, + isText: () => true, + onCommentsCreated, + }); + + expect(onCommentsCreated).toHaveBeenCalledTimes(1); + }); + + it('does not call onCommentsCreated when no comments created', async () => { + const editor = createMockEditor(); + const onCommentsCreated = mock(() => {}); + + const tokenMap = new Map(); + tokenMap.set('[[CMT_START:1]]', null); + tokenMap.set('[[CMT_END:1]]', null); + + const comments: DocxImportComment[] = [ + { + id: 'cmt-1', + text: 'Test', + startToken: '[[CMT_START:1]]', + endToken: '[[CMT_END:1]]', + hasStartToken: true, + hasEndToken: true, + }, + ]; + + await applyTrackedComments({ + editor, + comments, + searchRange: createMockSearchRange(tokenMap), + documentId: 'doc-1', + createDiscussionWithComment: { + mutateAsync: mock(async () => ({ id: 'disc-1' })), + }, + commentKey: 'comment', + getCommentKey: (id) => `comment_${id}`, + isText: () => true, + onCommentsCreated, + }); + + expect(onCommentsCreated).not.toHaveBeenCalled(); + }); + + it('handles invalid rangeRef (null current) for comments', async () => { + const editor: TrackingEditor = { + api: { + string: mock(() => 'sample text'), + rangeRef: () => ({ + current: null, + unref: mock(() => null), + }), + }, + tf: { + setNodes: mock(() => {}), + delete: mock(() => {}), + withMerging: mock((fn: () => void) => fn()), + }, + }; + + const comments: DocxImportComment[] = [ + { + id: 'cmt-1', + text: 'Test', + startToken: '[[CMT_START:1]]', + endToken: '[[CMT_END:1]]', + hasStartToken: true, + hasEndToken: true, + }, + ]; + + const result = await applyTrackedComments({ + editor, + comments, + searchRange: createMockSearchRange(), + documentId: 'doc-1', + createDiscussionWithComment: { + mutateAsync: mock(async () => ({ id: 'disc-1' })), + }, + commentKey: 'comment', + getCommentKey: (id) => `comment_${id}`, + isText: () => true, + }); + + expect(result.created).toBe(0); + expect(result.skipped).toBe(1); + }); + + it('handles empty document content (uses default)', async () => { + const editor: TrackingEditor = { + api: { + string: mock(() => ''), // Returns empty string + rangeRef: (range: TRange) => ({ + current: range, + unref: mock(() => range), + }), + }, + tf: { + setNodes: mock(() => {}), + delete: mock(() => {}), + withMerging: mock((fn: () => void) => fn()), + }, + }; + + const createDiscussion = mock(async () => ({ id: 'disc-1' })); + + const comments: DocxImportComment[] = [ + { + id: 'cmt-1', + text: 'Test comment', + startToken: '[[CMT_START:1]]', + endToken: '[[CMT_END:1]]', + hasStartToken: true, + hasEndToken: true, + }, + ]; + + await applyTrackedComments({ + editor, + comments, + searchRange: createMockSearchRange(), + documentId: 'doc-1', + createDiscussionWithComment: { mutateAsync: createDiscussion }, + commentKey: 'comment', + getCommentKey: (id) => `comment_${id}`, + isText: () => true, + }); + + expect(createDiscussion).toHaveBeenCalledWith( + expect.objectContaining({ + documentContent: 'Imported comment', + }) + ); + }); + + it('handles comment with commentPlugin and setOption', async () => { + const editor = createMockEditor(); + const commentPlugin = { key: 'comment' }; + + const comments: DocxImportComment[] = [ + { + id: 'cmt-1', + text: 'Test', + startToken: '[[CMT_START:1]]', + endToken: '[[CMT_END:1]]', + hasStartToken: true, + hasEndToken: true, + }, + ]; + + await applyTrackedComments({ + editor, + comments, + searchRange: createMockSearchRange(), + documentId: 'doc-1', + createDiscussionWithComment: { + mutateAsync: mock(async () => ({ id: 'disc-1' })), + }, + commentKey: 'comment', + getCommentKey: (id) => `comment_${id}`, + isText: () => true, + commentPlugin, + }); + + expect(editor.setOption).toHaveBeenCalledWith( + commentPlugin, + 'updateTimestamp', + expect.any(Number) + ); + }); + + it('handles exceptions during comment processing', async () => { + const editor: TrackingEditor = { + api: { + string: mock(() => 'sample text'), + rangeRef: () => { + throw new Error('Comment error'); + }, + }, + tf: { + setNodes: mock(() => {}), + delete: mock(() => {}), + withMerging: mock((fn: () => void) => fn()), + }, + }; + + const comments: DocxImportComment[] = [ + { + id: 'cmt-1', + text: 'Test', + startToken: '[[CMT_START:1]]', + endToken: '[[CMT_END:1]]', + hasStartToken: true, + hasEndToken: true, + }, + ]; + + const result = await applyTrackedComments({ + editor, + comments, + searchRange: createMockSearchRange(), + documentId: 'doc-1', + createDiscussionWithComment: { + mutateAsync: mock(async () => ({ id: 'disc-1' })), + }, + commentKey: 'comment', + getCommentKey: (id) => `comment_${id}`, + isText: () => true, + }); + + expect(result.errors.length).toBe(1); + expect(result.errors[0]).toContain('Failed to apply comment'); + expect(result.errors[0]).toContain('Comment error'); + }); + + it('unrefs rangeRefs when create discussion fails', async () => { + const startUnref = mock(() => null); + const endUnref = mock(() => null); + let rangeRefCalls = 0; + + const editor: TrackingEditor = { + api: { + string: mock(() => 'sample text'), + rangeRef: (range: TRange) => { + rangeRefCalls += 1; + return { + current: range, + unref: rangeRefCalls === 1 ? startUnref : endUnref, + }; + }, + }, + tf: { + setNodes: mock(() => {}), + delete: mock(() => {}), + withMerging: mock((fn: () => void) => fn()), + }, + }; + + const comments: DocxImportComment[] = [ + { + id: 'cmt-1', + text: 'Test', + startToken: '[[CMT_START:1]]', + endToken: '[[CMT_END:1]]', + hasStartToken: true, + hasEndToken: true, + }, + ]; + + const result = await applyTrackedComments({ + editor, + comments, + searchRange: createMockSearchRange(), + documentId: 'doc-1', + createDiscussionWithComment: { + mutateAsync: mock(async () => { + throw new Error('API fail'); + }), + }, + commentKey: 'comment', + getCommentKey: (id) => `comment_${id}`, + isText: () => true, + }); + + expect(result.errors.length).toBe(1); + expect(startUnref).toHaveBeenCalledTimes(1); + expect(endUnref).toHaveBeenCalledTimes(1); + }); + + it('handles non-Error exceptions in comments', async () => { + const editor: TrackingEditor = { + api: { + string: mock(() => 'sample text'), + rangeRef: () => { + throw new Error('string comment error'); + }, + }, + tf: { + setNodes: mock(() => {}), + delete: mock(() => {}), + withMerging: mock((fn: () => void) => fn()), + }, + }; + + const comments: DocxImportComment[] = [ + { + id: 'cmt-1', + text: 'Test', + startToken: '[[CMT_START:1]]', + endToken: '[[CMT_END:1]]', + hasStartToken: true, + hasEndToken: true, + }, + ]; + + const result = await applyTrackedComments({ + editor, + comments, + searchRange: createMockSearchRange(), + documentId: 'doc-1', + createDiscussionWithComment: { + mutateAsync: mock(async () => ({ id: 'disc-1' })), + }, + commentKey: 'comment', + getCommentKey: (id) => `comment_${id}`, + isText: () => true, + }); + + expect(result.errors[0]).toContain('string comment error'); + }); + + it('handles comment without text (undefined)', async () => { + const editor = createMockEditor(); + const createDiscussion = mock(async () => ({ id: 'disc-1' })); + + const comments: DocxImportComment[] = [ + { + id: 'cmt-1', + text: undefined, + startToken: '[[CMT_START:1]]', + endToken: '[[CMT_END:1]]', + hasStartToken: true, + hasEndToken: true, + }, + ]; + + await applyTrackedComments({ + editor, + comments, + searchRange: createMockSearchRange(), + documentId: 'doc-1', + createDiscussionWithComment: { mutateAsync: createDiscussion }, + commentKey: 'comment', + getCommentKey: (id) => `comment_${id}`, + isText: () => true, + }); + + expect(createDiscussion).toHaveBeenCalledWith( + expect.objectContaining({ + contentRich: undefined, + }) + ); + }); + }); + + describe('applyTrackedCommentsLocal', () => { + it('removes reply tokens without creating discussions', () => { + const editor = createMockEditor(); + + const comments: DocxImportComment[] = [ + { + id: 'cmt-reply', + text: 'Reply text', + startToken: '[[CMT_START:reply]]', + endToken: '[[CMT_END:reply]]', + hasStartToken: true, + hasEndToken: true, + parentParaId: 'parent-para-1', + }, + ]; + + const result = applyTrackedCommentsLocal({ + editor, + comments, + searchRange: createMockSearchRange(), + commentKey: 'comment', + getCommentKey: (id) => `comment_${id}`, + isText: () => true, + generateId: () => 'discussion-1', + documentDate: new Date(), + }); + + expect(result.applied).toBe(0); + expect(result.discussions).toEqual([]); + expect(result.errors).toEqual([]); + expect(editor.tf.setNodes).not.toHaveBeenCalled(); + expect(editor.tf.delete).toHaveBeenCalledTimes(2); + }); + }); + + describe('applyAllTracking', () => { + it('applies both suggestions and comments', async () => { + const editor = createMockEditor(); + + const trackedChanges: DocxTrackedChange[] = [ + { + id: 'change-1', + type: 'insert', + startToken: '[[INS_START:1]]', + endToken: '[[INS_END:1]]', + }, + ]; + + const comments: DocxImportComment[] = [ + { + id: 'cmt-1', + text: 'Comment', + startToken: '[[CMT_START:1]]', + endToken: '[[CMT_END:1]]', + hasStartToken: true, + hasEndToken: true, + }, + ]; + + const result = await applyAllTracking({ + editor, + trackedChanges, + comments, + searchRange: createMockSearchRange(), + suggestionConfig: { + suggestionKey: 'suggestion', + getSuggestionKey: (id) => `suggestion_${id}`, + isText: () => true, + }, + commentConfig: { + documentId: 'doc-1', + createDiscussionWithComment: { + mutateAsync: mock(async () => ({ id: 'disc-1' })), + }, + commentKey: 'comment', + getCommentKey: (id) => `comment_${id}`, + isText: () => true, + }, + }); + + expect(result.suggestions.total).toBe(1); + expect(result.comments?.created).toBe(1); + expect(result.totalApplied).toBe(2); + }); + + it('applies only suggestions when no comment config', async () => { + const editor = createMockEditor(); + + const trackedChanges: DocxTrackedChange[] = [ + { + id: 'change-1', + type: 'insert', + startToken: '[[INS_START:1]]', + endToken: '[[INS_END:1]]', + }, + ]; + + const result = await applyAllTracking({ + editor, + trackedChanges, + searchRange: createMockSearchRange(), + suggestionConfig: { + suggestionKey: 'suggestion', + getSuggestionKey: (id) => `suggestion_${id}`, + isText: () => true, + }, + }); + + expect(result.suggestions.total).toBe(1); + expect(result.comments).toBeNull(); + expect(result.totalApplied).toBe(1); + }); + + it('skips comments when empty array', async () => { + const editor = createMockEditor(); + + const result = await applyAllTracking({ + editor, + trackedChanges: [], + comments: [], + searchRange: createMockSearchRange(), + suggestionConfig: { + suggestionKey: 'suggestion', + getSuggestionKey: (id) => `suggestion_${id}`, + isText: () => true, + }, + commentConfig: { + documentId: 'doc-1', + createDiscussionWithComment: { + mutateAsync: mock(async () => ({ id: 'disc-1' })), + }, + commentKey: 'comment', + getCommentKey: (id) => `comment_${id}`, + isText: () => true, + }, + }); + + expect(result.suggestions.total).toBe(0); + expect(result.comments).toBeNull(); // Skipped due to empty array + expect(result.totalApplied).toBe(0); + }); + }); +}); diff --git a/packages/docx-io/src/lib/docx-export-plugin.tsx b/packages/docx-io/src/lib/docx-export-plugin.tsx index 57e4aeb5f7..485b32ae76 100644 --- a/packages/docx-io/src/lib/docx-export-plugin.tsx +++ b/packages/docx-io/src/lib/docx-export-plugin.tsx @@ -33,15 +33,20 @@ 'use client'; import type { SlatePlugin, Value } from 'platejs'; +import juice from 'juice'; import { createSlateEditor, createSlatePlugin } from 'platejs'; import type { PlateStaticProps, SerializeHtmlOptions } from 'platejs/static'; import { serializeHtml } from 'platejs/static'; -import juice from 'juice'; - import type { DocumentMargins } from './html-to-docx'; -import { htmlToDocxBlob } from './html-to-docx'; +import { htmlToDocxBlob } from './exportDocx'; +import { + buildUserNameMap, + injectDocxTrackingTokens, + type DocxExportDiscussion, + type InjectDocxTrackingTokensOptions, +} from './exportTrackChanges'; // ============================================================================= // CSS Styles for DOCX Export @@ -155,6 +160,35 @@ export type DocxExportMargins = DocumentMargins; */ export type DocxExportOrientation = 'landscape' | 'portrait'; +/** + * Options for tracked changes/comments export. + */ +export type DocxTrackingExportOptions = { + /** + * Discussion threads for comment metadata. + * Each discussion represents a comment thread with its comments. + */ + discussions?: DocxExportDiscussion[] | null; + + /** + * Custom function to get comment IDs from a text node. + * If not provided, uses default implementation that looks for 'comment_' prefixed keys. + */ + getCommentIds?: InjectDocxTrackingTokensOptions['getCommentIds']; + + /** + * Custom function to get suggestion metadata from a text node. + * If not provided, uses default implementation that looks for 'suggestion_' prefixed keys. + */ + getSuggestions?: InjectDocxTrackingTokensOptions['getSuggestions']; + + /** + * Function to convert rich content to plain text. + * Used for extracting comment text from rich content. + */ + nodeToString?: InjectDocxTrackingTokensOptions['nodeToString']; +}; + /** * Options for DOCX export operations. */ @@ -202,6 +236,13 @@ export type DocxExportOperationOptions = { * Document title (for metadata purposes). */ title?: string; + + /** + * Options for exporting tracked changes and comments. + * When provided, tracking tokens will be injected into the document + * and converted to Word tracked changes format. + */ + tracking?: DocxTrackingExportOptions; }; /** @@ -409,22 +450,39 @@ async function exportToDocxInternal( fontFamily, margins = DEFAULT_DOCX_MARGINS, orientation = 'portrait', + tracking, value, } = options; + // Process tracking tokens if enabled + let processedValue: Value = value; + + if (tracking) { + const userNameMap = buildUserNameMap(tracking.discussions); + processedValue = injectDocxTrackingTokens(value, { + discussions: tracking.discussions, + getCommentIds: tracking.getCommentIds, + getSuggestions: tracking.getSuggestions, + nodeToString: tracking.nodeToString, + userNameMap, + }) as Value; + } + // Serialize editor content to HTML const bodyHtml = await serializeToHtml({ EditorStaticComponent: editorStaticComponent, components, fontFamily, plugins: editorPlugins, - value, + value: processedValue, }); // Wrap in complete HTML document const fullHtml = wrapHtmlForDocx(bodyHtml, customStyles); // Inline CSS styles using juice for DOCX compatibility + // html-to-docx only reads inline style="" attributes, so CSS \n \n \n ${editorHtml}\n \n `;\n\n const url = `data:text/html;charset=utf-8,${encodeURIComponent(html)}`;\n\n await downloadFile(url, 'plate.html');\n };\n\n const exportToMarkdown = async () => {\n const md = editor.getApi(MarkdownPlugin).markdown.serialize();\n const url = `data:text/markdown;charset=utf-8,${encodeURIComponent(md)}`;\n await downloadFile(url, 'plate.md');\n };\n\n const exportToWord = async () => {\n const blob = await exportToDocx(editor.children, {\n editorPlugins: [...BaseEditorKit, ...DocxExportKit] as SlatePlugin[],\n });\n\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = 'plate.docx';\n document.body.append(link);\n link.click();\n link.remove();\n URL.revokeObjectURL(url);\n };\n\n return (\n \n \n \n \n \n \n\n \n \n \n Export as HTML\n \n \n Export as PDF\n \n \n Export as Image\n \n \n Export as Markdown\n \n \n Export as Word\n \n \n \n \n );\n}\n", + "content": "'use client';\n\nimport * as React from 'react';\n\nimport type { DropdownMenuProps } from '@radix-ui/react-dropdown-menu';\n\nimport { exportToDocx, type DocxExportDiscussion } from '@platejs/docx-io';\nimport { MarkdownPlugin } from '@platejs/markdown';\nimport { ArrowDownToLineIcon } from 'lucide-react';\nimport type { SlatePlugin } from 'platejs';\nimport { createSlateEditor } from 'platejs';\nimport { useEditorRef } from 'platejs/react';\nimport { serializeHtml } from 'platejs/static';\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { BaseEditorKit } from '@/registry/components/editor/editor-base-kit';\nimport { discussionPlugin } from '@/registry/components/editor/plugins/discussion-kit';\n\nimport { EditorStatic } from './editor-static';\nimport { ToolbarButton } from './toolbar';\nimport { DocxExportKit } from '@/registry/components/editor/plugins/docx-export-kit';\n\nconst siteUrl = 'https://platejs.org';\n\nexport function ExportToolbarButton(props: DropdownMenuProps) {\n const editor = useEditorRef();\n const [open, setOpen] = React.useState(false);\n\n const getCanvas = async () => {\n const { default: html2canvas } = await import('html2canvas-pro');\n\n const style = document.createElement('style');\n document.head.append(style);\n\n const canvas = await html2canvas(editor.api.toDOMNode(editor)!, {\n onclone: (document: Document) => {\n const editorElement = document.querySelector(\n '[contenteditable=\"true\"]'\n );\n if (editorElement) {\n Array.from(editorElement.querySelectorAll('*')).forEach((element) => {\n const existingStyle = element.getAttribute('style') || '';\n element.setAttribute(\n 'style',\n `${existingStyle}; font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif !important`\n );\n });\n }\n },\n });\n style.remove();\n\n return canvas;\n };\n\n const downloadFile = async (url: string, filename: string) => {\n const response = await fetch(url);\n\n const blob = await response.blob();\n const blobUrl = window.URL.createObjectURL(blob);\n\n const link = document.createElement('a');\n link.href = blobUrl;\n link.download = filename;\n document.body.append(link);\n link.click();\n link.remove();\n\n // Clean up the blob URL\n window.URL.revokeObjectURL(blobUrl);\n };\n\n const exportToPdf = async () => {\n const canvas = await getCanvas();\n\n const PDFLib = await import('pdf-lib');\n const pdfDoc = await PDFLib.PDFDocument.create();\n const page = pdfDoc.addPage([canvas.width, canvas.height]);\n const imageEmbed = await pdfDoc.embedPng(canvas.toDataURL('PNG'));\n const { height, width } = imageEmbed.scale(1);\n page.drawImage(imageEmbed, {\n height,\n width,\n x: 0,\n y: 0,\n });\n const pdfBase64 = await pdfDoc.saveAsBase64({ dataUri: true });\n\n await downloadFile(pdfBase64, 'plate.pdf');\n };\n\n const exportToImage = async () => {\n const canvas = await getCanvas();\n await downloadFile(canvas.toDataURL('image/png'), 'plate.png');\n };\n\n const exportToHtml = async () => {\n const editorStatic = createSlateEditor({\n plugins: BaseEditorKit,\n value: editor.children,\n });\n\n const editorHtml = await serializeHtml(editorStatic, {\n editorComponent: EditorStatic,\n props: { style: { padding: '0 calc(50% - 350px)', paddingBottom: '' } },\n });\n\n const tailwindCss = ``;\n const katexCss = ``;\n\n const html = `\n \n \n \n \n \n \n \n \n ${tailwindCss}\n ${katexCss}\n \n \n \n ${editorHtml}\n \n `;\n\n const url = `data:text/html;charset=utf-8,${encodeURIComponent(html)}`;\n\n await downloadFile(url, 'plate.html');\n };\n\n const exportToMarkdown = async () => {\n const md = editor.getApi(MarkdownPlugin).markdown.serialize();\n const url = `data:text/markdown;charset=utf-8,${encodeURIComponent(md)}`;\n await downloadFile(url, 'plate.md');\n };\n\n const exportToWord = async () => {\n // Get discussions and users from the discussion plugin for comment export\n const discussions = editor.getOption(discussionPlugin, 'discussions') ?? [];\n const users = editor.getOption(discussionPlugin, 'users') ?? {};\n\n // Resolve display name: prefer authorName (from DOCX import), fall back to users lookup\n const resolveUser = (\n userId: string,\n authorName?: string\n ): { id: string; name: string } | undefined => {\n const name = authorName ?? users[userId]?.name;\n return name ? { id: userId, name } : undefined;\n };\n\n // Convert discussions to export format\n const exportDiscussions: DocxExportDiscussion[] = discussions.map((d) => ({\n id: d.id,\n comments: d.comments?.map((c) => ({\n contentRich: c.contentRich,\n createdAt: c.createdAt,\n id: c.id,\n paraId: c.paraId,\n parentParaId: c.parentParaId,\n userId: c.userId,\n user: resolveUser(c.userId, c.authorName),\n })),\n createdAt: d.createdAt,\n documentContent: d.documentContent,\n paraId: d.paraId,\n userId: d.userId,\n user: resolveUser(d.userId, d.authorName),\n }));\n\n const blob = await exportToDocx(editor.children, {\n editorPlugins: [...BaseEditorKit, ...DocxExportKit] as SlatePlugin[],\n tracking: {\n discussions: exportDiscussions,\n },\n });\n\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = 'plate.docx';\n document.body.append(link);\n link.click();\n link.remove();\n URL.revokeObjectURL(url);\n };\n\n return (\n \n \n \n \n \n \n\n \n \n \n Export as HTML\n \n \n Export as PDF\n \n \n Export as Image\n \n \n Export as Markdown\n \n \n Export as Word\n \n \n \n \n );\n}\n", "type": "registry:ui" } ], diff --git a/apps/www/public/r/import-toolbar-button.json b/apps/www/public/r/import-toolbar-button.json index 1e1c1bb8f9..d5b8404e2c 100644 --- a/apps/www/public/r/import-toolbar-button.json +++ b/apps/www/public/r/import-toolbar-button.json @@ -14,7 +14,7 @@ "files": [ { "path": "src/registry/ui/import-toolbar-button.tsx", - "content": "'use client';\n\nimport * as React from 'react';\n\nimport type { DropdownMenuProps } from '@radix-ui/react-dropdown-menu';\n\nimport { importDocx } from '@platejs/docx-io';\nimport { MarkdownPlugin } from '@platejs/markdown';\nimport { ArrowUpToLineIcon } from 'lucide-react';\nimport { getEditorDOMFromHtmlString } from 'platejs/static';\nimport { useEditorRef } from 'platejs/react';\nimport { useFilePicker } from 'use-file-picker';\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\n\nimport { ToolbarButton } from './toolbar';\n\ntype ImportType = 'html' | 'markdown';\n\nexport function ImportToolbarButton(props: DropdownMenuProps) {\n const editor = useEditorRef();\n const [open, setOpen] = React.useState(false);\n\n const getFileNodes = (text: string, type: ImportType) => {\n if (type === 'html') {\n const editorNode = getEditorDOMFromHtmlString(text);\n const nodes = editor.api.html.deserialize({\n element: editorNode,\n });\n\n return nodes;\n }\n\n if (type === 'markdown') {\n return editor.getApi(MarkdownPlugin).markdown.deserialize(text);\n }\n\n return [];\n };\n\n const { openFilePicker: openMdFilePicker } = useFilePicker({\n accept: ['.md', '.mdx'],\n multiple: false,\n onFilesSelected: async ({ plainFiles }) => {\n const text = await plainFiles[0].text();\n\n const nodes = getFileNodes(text, 'markdown');\n\n editor.tf.insertNodes(nodes);\n },\n });\n\n const { openFilePicker: openHtmlFilePicker } = useFilePicker({\n accept: ['text/html'],\n multiple: false,\n onFilesSelected: async ({ plainFiles }) => {\n const text = await plainFiles[0].text();\n\n const nodes = getFileNodes(text, 'html');\n\n editor.tf.insertNodes(nodes);\n },\n });\n\n const { openFilePicker: openDocxFilePicker } = useFilePicker({\n accept: ['.docx'],\n multiple: false,\n onFilesSelected: async ({ plainFiles }) => {\n const arrayBuffer = await plainFiles[0].arrayBuffer();\n const result = await importDocx(editor, arrayBuffer);\n\n editor.tf.insertNodes(result.nodes as typeof editor.children);\n },\n });\n\n return (\n \n \n \n \n \n \n\n \n \n {\n openHtmlFilePicker();\n }}\n >\n Import from HTML\n \n\n {\n openMdFilePicker();\n }}\n >\n Import from Markdown\n \n\n {\n openDocxFilePicker();\n }}\n >\n Import from Word\n \n \n \n \n );\n}\n", + "content": "'use client';\n\nimport * as React from 'react';\n\nimport type { DropdownMenuProps } from '@radix-ui/react-dropdown-menu';\n\nimport { getCommentKey } from '@platejs/comment';\nimport { importDocxWithTracking } from '@platejs/docx-io';\nimport { MarkdownPlugin } from '@platejs/markdown';\nimport { getSuggestionKey } from '@platejs/suggestion';\nimport { ArrowUpToLineIcon } from 'lucide-react';\nimport { KEYS, TextApi } from 'platejs';\nimport { useEditorRef } from 'platejs/react';\nimport { getEditorDOMFromHtmlString } from 'platejs/static';\nimport { useFilePicker } from 'use-file-picker';\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\n\nimport { commentPlugin } from '@/registry/components/editor/plugins/comment-kit';\nimport {\n discussionPlugin,\n type TDiscussion,\n} from '@/registry/components/editor/plugins/discussion-kit';\nimport { getDiscussionCounterSeed } from '../lib/discussion-ids';\nimport { ToolbarButton } from './toolbar';\n\ntype ImportType = 'html' | 'markdown';\n\nconst WHITESPACE_REGEX = /\\s+/;\n\nexport function ImportToolbarButton(props: DropdownMenuProps) {\n const editor = useEditorRef();\n const [open, setOpen] = React.useState(false);\n\n const getFileNodes = (text: string, type: ImportType) => {\n if (type === 'html') {\n const editorNode = getEditorDOMFromHtmlString(text);\n const nodes = editor.api.html.deserialize({\n element: editorNode,\n });\n\n return nodes;\n }\n\n if (type === 'markdown') {\n return editor.getApi(MarkdownPlugin).markdown.deserialize(text);\n }\n\n return [];\n };\n\n const { openFilePicker: openMdFilePicker } = useFilePicker({\n accept: ['.md', '.mdx'],\n multiple: false,\n onFilesSelected: async ({ plainFiles }) => {\n const text = await plainFiles[0].text();\n\n const nodes = getFileNodes(text, 'markdown');\n\n editor.tf.insertNodes(nodes);\n },\n });\n\n const { openFilePicker: openHtmlFilePicker } = useFilePicker({\n accept: ['text/html'],\n multiple: false,\n onFilesSelected: async ({ plainFiles }) => {\n const text = await plainFiles[0].text();\n\n const nodes = getFileNodes(text, 'html');\n\n editor.tf.insertNodes(nodes);\n },\n });\n\n const { openFilePicker: openDocxFilePicker } = useFilePicker({\n accept: ['.docx'],\n multiple: false,\n onFilesSelected: async ({ plainFiles }) => {\n const arrayBuffer = await plainFiles[0].arrayBuffer();\n\n // Compute next discussion number to avoid ID collisions\n const existingDiscussions =\n editor.getOption(discussionPlugin, 'discussions') ?? [];\n let discussionCounter = getDiscussionCounterSeed(existingDiscussions);\n\n // Import with full tracking support (suggestions + comments)\n const result = await importDocxWithTracking(editor as any, arrayBuffer, {\n suggestionKey: KEYS.suggestion,\n getSuggestionKey,\n commentKey: KEYS.comment,\n getCommentKey,\n isText: TextApi.isText,\n generateId: () => `discussion${++discussionCounter}`,\n });\n\n // Register imported users so suggestion/comment UI can resolve them\n if (result.users.length > 0) {\n const existingUsers = editor.getOption(discussionPlugin, 'users') ?? {};\n const updatedUsers = { ...existingUsers };\n\n for (const user of result.users) {\n if (!updatedUsers[user.id]) {\n updatedUsers[user.id] = {\n id: user.id,\n name: user.name,\n avatarUrl: `https://api.dicebear.com/9.x/glass/svg?seed=${encodeURIComponent(user.name)}`,\n };\n }\n }\n\n editor.setOption(discussionPlugin, 'users', updatedUsers);\n }\n\n // Add imported discussions to the discussion plugin\n if (result.discussions.length > 0) {\n // Convert imported discussions to TDiscussion format\n const newDiscussions: TDiscussion[] = result.discussions.map((d) => ({\n id: d.id,\n comments: (d.comments ?? []).map((c, index) => ({\n id: c.id || `comment${index + 1}`,\n contentRich:\n c.contentRich as TDiscussion['comments'][number]['contentRich'],\n createdAt: c.createdAt ?? new Date(),\n discussionId: d.id,\n isEdited: false,\n userId: c.userId ?? c.user?.id ?? 'imported-unknown',\n authorName: c.user?.name,\n authorInitials: c.user?.name\n ? c.user.name\n .split(WHITESPACE_REGEX)\n .slice(0, 2)\n .map((w) => w[0]?.toUpperCase() ?? '')\n .join('')\n : undefined,\n paraId: c.paraId,\n parentParaId: c.parentParaId,\n })),\n createdAt: d.createdAt ?? new Date(),\n documentContent: d.documentContent,\n isResolved: false,\n userId: d.userId ?? d.user?.id ?? 'imported-unknown',\n authorName: d.user?.name,\n authorInitials: d.user?.name\n ? d.user.name\n .split(WHITESPACE_REGEX)\n .slice(0, 2)\n .map((w) => w[0]?.toUpperCase() ?? '')\n .join('')\n : undefined,\n paraId: d.paraId,\n }));\n\n // Replace all discussions (not append) because importDocxWithTracking\n // replaces the entire editor content, making old discussions stale\n editor.setOption(discussionPlugin, 'discussions', newDiscussions);\n editor.setOption(commentPlugin, 'uniquePathMap', new Map());\n }\n\n // Log import results in dev only\n if (\n result.hasTracking &&\n result.errors.length > 0 &&\n process.env.NODE_ENV !== 'production'\n ) {\n console.warn('[DOCX Import] Errors:', result.errors);\n }\n },\n });\n\n return (\n \n \n \n \n \n \n\n \n \n {\n openHtmlFilePicker();\n }}\n >\n Import from HTML\n \n\n {\n openMdFilePicker();\n }}\n >\n Import from Markdown\n \n\n {\n openDocxFilePicker();\n }}\n >\n Import from Word\n \n \n \n \n );\n}\n", "type": "registry:ui" } ], diff --git a/apps/www/public/r/table-node.json b/apps/www/public/r/table-node.json index bb8d629595..9d4355663f 100644 --- a/apps/www/public/r/table-node.json +++ b/apps/www/public/r/table-node.json @@ -30,7 +30,7 @@ }, { "path": "src/registry/ui/table-node-static.tsx", - "content": "import * as React from 'react';\n\nimport type { TTableCellElement, TTableElement } from 'platejs';\nimport type { SlateElementProps } from 'platejs/static';\n\nimport { BaseTablePlugin } from '@platejs/table';\nimport { SlateElement } from 'platejs/static';\n\nimport { cn } from '@/lib/utils';\n\nexport function TableElementStatic({\n children,\n ...props\n}: SlateElementProps) {\n const { disableMarginLeft } = props.editor.getOptions(BaseTablePlugin);\n const marginLeft = disableMarginLeft ? 0 : props.element.marginLeft;\n\n return (\n \n
\n \n {children}\n \n
\n \n );\n}\n\nexport function TableRowElementStatic(props: SlateElementProps) {\n return (\n \n {props.children}\n \n );\n}\n\nexport function TableCellElementStatic({\n isHeader,\n ...props\n}: SlateElementProps & {\n isHeader?: boolean;\n}) {\n const { editor, element } = props;\n const { api } = editor.getPlugin(BaseTablePlugin);\n\n const { minHeight, width } = api.table.getCellSize({ element });\n const borders = api.table.getCellBorders({ element });\n\n return (\n \n \n {props.children}\n
\n \n );\n}\n\nexport function TableCellHeaderElementStatic(\n props: SlateElementProps\n) {\n return ;\n}\n", + "content": "import * as React from 'react';\n\nimport type { TTableCellElement, TTableElement } from 'platejs';\nimport type { SlateElementProps } from 'platejs/static';\n\nimport { BaseTablePlugin } from '@platejs/table';\nimport { SlateElement } from 'platejs/static';\n\nimport { cn } from '@/lib/utils';\n\nexport function TableElementStatic({\n children,\n ...props\n}: SlateElementProps) {\n const { disableMarginLeft } = props.editor.getOptions(BaseTablePlugin);\n const marginLeft = disableMarginLeft ? 0 : props.element.marginLeft;\n\n return (\n \n
\n \n {children}\n \n
\n \n );\n}\n\nexport function TableRowElementStatic(props: SlateElementProps) {\n return (\n \n {props.children}\n \n );\n}\n\n/** Build inline border styles for DOCX export (all 4 sides per cell). */\nconst cellBorderStyles = (\n element: TTableCellElement\n): Record => {\n const b = element.borders;\n if (!b) return {};\n\n const fmt = (dir: 'bottom' | 'left' | 'right' | 'top') => {\n const border = b[dir];\n if (!border || !border.size) return;\n return `${border.size}px ${border.style || 'solid'} ${border.color || '#000'}`;\n };\n\n const styles: Record = {};\n const top = fmt('top');\n const right = fmt('right');\n const bottom = fmt('bottom');\n const left = fmt('left');\n\n if (top) styles.borderTop = top;\n if (right) styles.borderRight = right;\n if (bottom) styles.borderBottom = bottom;\n if (left) styles.borderLeft = left;\n\n return styles;\n};\n\nexport function TableCellElementStatic({\n isHeader,\n ...props\n}: SlateElementProps & {\n isHeader?: boolean;\n}) {\n const { editor, element } = props;\n const { api } = editor.getPlugin(BaseTablePlugin);\n\n const { minHeight, width } = api.table.getCellSize({ element });\n const borders = api.table.getCellBorders({ element });\n\n return (\n \n \n {props.children}\n
\n \n );\n}\n\nexport function TableCellHeaderElementStatic(\n props: SlateElementProps\n) {\n return ;\n}\n", "type": "registry:ui" } ], diff --git a/apps/www/public/tailwind.css b/apps/www/public/tailwind.css index bdfd60ad33..7d797ef872 100644 --- a/apps/www/public/tailwind.css +++ b/apps/www/public/tailwind.css @@ -1,2 +1,2 @@ /*! tailwindcss v4.1.8 | 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-content:"";--tw-font-weight:initial;--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-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-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--font-sans:"var(--font-sans)","ui-sans-serif","-apple-system","BlinkMacSystemFont","Segoe UI Variable Display","Segoe UI","Helvetica","Apple Color Emoji","Arial","sans-serif","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-red-950:oklch(25.8% .092 26.042);--color-orange-50:oklch(98% .016 73.684);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-700:oklch(55.3% .195 38.402);--color-orange-800:oklch(47% .157 37.304);--color-orange-900:oklch(40.8% .123 38.172);--color-orange-950:oklch(26.6% .079 36.259);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-lime-50:oklch(98.6% .031 120.757);--color-lime-400:oklch(84.1% .238 128.85);--color-lime-500:oklch(76.8% .233 130.85);--color-lime-600:oklch(64.8% .2 131.684);--color-lime-900:oklch(40.5% .101 131.063);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-950:oklch(26.6% .065 152.934);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-700:oklch(50.8% .118 165.612);--color-teal-50:oklch(98.4% .014 180.72);--color-teal-300:oklch(85.5% .138 181.071);--color-teal-400:oklch(77.7% .152 181.912);--color-teal-500:oklch(70.4% .14 182.503);--color-teal-600:oklch(60% .118 184.704);--color-teal-700:oklch(51.1% .096 186.391);--color-teal-800:oklch(43.7% .078 188.216);--color-teal-900:oklch(38.6% .063 188.416);--color-cyan-50:oklch(98.4% .019 200.873);--color-cyan-300:oklch(86.5% .127 207.078);--color-cyan-700:oklch(52% .105 223.128);--color-cyan-950:oklch(30.2% .056 229.695);--color-blue-50:oklch(97% .014 254.604);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-violet-50:oklch(96.9% .016 293.756);--color-violet-300:oklch(81.1% .111 293.571);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-500:oklch(60.6% .25 292.717);--color-violet-600:oklch(54.1% .281 293.009);--color-violet-700:oklch(49.1% .27 292.581);--color-violet-800:oklch(43.2% .232 292.759);--color-violet-900:oklch(38% .189 293.745);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-300:oklch(82.7% .119 306.383);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-purple-800:oklch(43.8% .218 303.724);--color-purple-900:oklch(38.1% .176 304.987);--color-purple-950:oklch(29.1% .149 302.717);--color-pink-50:oklch(97.1% .014 343.198);--color-pink-300:oklch(82.3% .12 346.018);--color-pink-700:oklch(52.5% .223 3.958);--color-pink-950:oklch(28.4% .109 3.907);--color-rose-50:oklch(96.9% .015 12.422);--color-rose-300:oklch(81% .117 11.638);--color-rose-400:oklch(71.2% .194 13.428);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-600:oklch(58.6% .253 17.585);--color-rose-700:oklch(51.4% .222 16.935);--color-rose-800:oklch(45.5% .188 13.697);--color-rose-900:oklch(41% .159 10.272);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-zinc-50:oklch(98.5% 0 0);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-400:oklch(70.5% .015 286.067);--color-zinc-700:oklch(37% .013 285.805);--color-zinc-800:oklch(27.4% .006 286.033);--color-zinc-900:oklch(21% .006 285.885);--color-zinc-950:oklch(14.1% .005 285.823);--color-neutral-50:oklch(98.5% 0 0);--color-neutral-300:oklch(87% 0 0);--color-neutral-400:oklch(70.8% 0 0);--color-neutral-500:oklch(55.6% 0 0);--color-neutral-600:oklch(43.9% 0 0);--color-neutral-800:oklch(26.9% 0 0);--color-neutral-900:oklch(20.5% 0 0);--color-stone-50:oklch(98.5% .001 106.423);--color-stone-300:oklch(86.9% .005 56.366);--color-stone-400:oklch(70.9% .01 56.259);--color-stone-500:oklch(55.3% .013 58.071);--color-stone-600:oklch(44.4% .011 73.639);--color-stone-700:oklch(37.4% .01 67.558);--color-stone-800:oklch(26.8% .007 34.298);--color-stone-900:oklch(21.6% .006 56.043);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-xl:80rem;--breakpoint-2xl:96rem;--container-sm:24rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: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);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-tighter:-.05em;--tracking-tight:-.025em;--tracking-widest:.1em;--leading-tight:1.25;--leading-normal:1.5;--leading-relaxed:1.625;--leading-loose:2;--radius-xs:.125rem;--radius-sm:calc(var(--radius) - 4px);--radius-lg:var(--radius);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-xs:4px;--blur-sm:8px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:"var(--font-sans)","ui-sans-serif","-apple-system","BlinkMacSystemFont","Segoe UI Variable Display","Segoe UI","Helvetica","Apple Color Emoji","Arial","sans-serif","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--default-mono-font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-code:var(--surface);--color-code-foreground:var(--surface-foreground);--color-code-highlight:var(--code-highlight);--color-code-number:var(--code-number);--font-heading:"var(--font-heading)","ui-sans-serif","-apple-system","BlinkMacSystemFont","Segoe UI Variable Display","Segoe UI","Helvetica","Apple Color Emoji","Arial","sans-serif","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}}@layer base{@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)}}}*,: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}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){*{outline-color:color-mix(in oklab,var(--ring)50%,transparent)}}body{overscroll-behavior:none;background-color:var(--background);color:var(--foreground);font-synthesis-weight:none;text-rendering:optimizeLegibility}@supports (font:-apple-system-body) and (appearance:none){@media (min-width:1800px){[data-wrapper]{border-top-style:var(--tw-border-style);border-top-width:1px}}}a:active,button:active{opacity:.6}@media (min-width:48rem){a:active,button:active{opacity:1}}::-webkit-scrollbar{width:5px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:hsl(var(--border));border-radius:5px}*{scrollbar-width:thin;scrollbar-color:hsl(var(--border))transparent}.prose{--tw-prose-body:var(--foreground);--tw-prose-bold:inherit;--tw-prose-links:inherit;--tw-prose-bullets:var(--foreground)}[data-theme=light]{display:block}[data-theme=dark],.dark [data-theme=light]{display:none}.dark [data-theme=dark]{display:block}[data-rehype-pretty-code-fragment]{color:var(--color-white);position:relative}[data-rehype-pretty-code-fragment] code{border-style:var(--tw-border-style);min-width:100%;padding:calc(var(--spacing)*0);overflow-wrap:break-word;counter-reset:line;-webkit-box-decoration-break:clone;box-decoration-break:clone;background-color:#0000;border-width:0;border-radius:0;display:grid}[data-rehype-pretty-code-fragment] .line{width:100%;min-height:1rem;padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*.5);display:inline-block}[data-rehype-pretty-code-fragment] [data-line-numbers] .line{padding-inline:calc(var(--spacing)*2)}[data-rehype-pretty-code-fragment] [data-line-numbers]>.line:before{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:#fafafa66}@supports (color:color-mix(in lab, red, red)){[data-rehype-pretty-code-fragment] [data-line-numbers]>.line:before{color:color-mix(in oklab,var(--color-zinc-50)40%,transparent)}}[data-rehype-pretty-code-fragment] [data-line-numbers]>.line:before{counter-increment:line;content:counter(line);text-align:right;width:1.8rem;margin-right:1.4rem;display:inline-block}[data-rehype-pretty-code-fragment] .line--highlighted{background-color:#3f3f4680}@supports (color:color-mix(in lab, red, red)){[data-rehype-pretty-code-fragment] .line--highlighted{background-color:color-mix(in oklab,var(--color-zinc-700)50%,transparent)}}[data-rehype-pretty-code-fragment] .line-highlighted span{position:relative}[data-rehype-pretty-code-fragment] .word--highlighted{border-radius:calc(var(--radius) - 2px);border-color:#3f3f46b3}@supports (color:color-mix(in lab, red, red)){[data-rehype-pretty-code-fragment] .word--highlighted{border-color:color-mix(in oklab,var(--color-zinc-700)70%,transparent)}}[data-rehype-pretty-code-fragment] .word--highlighted{background-color:#3f3f4680}@supports (color:color-mix(in lab, red, red)){[data-rehype-pretty-code-fragment] .word--highlighted{background-color:color-mix(in oklab,var(--color-zinc-700)50%,transparent)}}[data-rehype-pretty-code-fragment] .word--highlighted{padding:calc(var(--spacing)*1)}.dark [data-rehype-pretty-code-fragment] .word--highlighted{background-color:var(--color-zinc-900)}[data-rehype-pretty-code-title]{margin-top:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*4);padding-top:calc(var(--spacing)*6);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground)}[data-rehype-pretty-code-title]+pre{margin-top:calc(var(--spacing)*2)!important}}@layer components{.steps:first-child,.steps:first-child>h3:first-child{margin-top:calc(var(--spacing)*0)!important}.steps>h3{margin-top:calc(var(--spacing)*16)!important}.steps>h3+p{margin-top:calc(var(--spacing)*2)!important}[data-rehype-pretty-code-figure]{background-color:var(--color-code);color:var(--color-code-foreground);border-radius:var(--radius-lg);border-width:0;border-color:var(--border);margin-top:calc(var(--spacing)*6);font-size:var(--text-sm);outline:none;position:relative;overflow:hidden}@media (min-width:48rem){[data-rehype-pretty-code-figure]{margin-inline:calc(var(--spacing)*-4)}}[data-rehype-pretty-code-figure]:has([data-rehype-pretty-code-title]) [data-slot=copy-button]{top:calc(var(--spacing)*1.5)!important}[data-rehype-pretty-code-title]{border-bottom:var(--border)}@supports (color:color-mix(in lab, red, red)){[data-rehype-pretty-code-title]{border-bottom:color-mix(in oklab,var(--border)30%,transparent)}}[data-rehype-pretty-code-title]{padding-block:calc(var(--spacing)*2.5);padding-inline:calc(var(--spacing)*4);font-size:var(--text-sm);font-family:var(--font-mono);color:var(--color-code-foreground);border-bottom-style:solid;border-bottom-width:1px}[data-line-numbers]{white-space:pre;counter-reset:line;-webkit-box-decoration-break:clone;box-decoration-break:clone;background:0 0;border:0;min-width:100%;padding:0;display:grid}[data-line-numbers] [data-line]:before{font-size:var(--text-sm);counter-increment:line;content:counter(line);width:calc(var(--spacing)*16);padding-right:calc(var(--spacing)*6);text-align:right;color:var(--color-code-number);background-color:var(--color-code);display:inline-block;position:sticky;left:0}[data-line-numbers] [data-highlighted-line][data-line]:before{background-color:var(--color-code-highlight)}[data-line]{padding-top:calc(var(--spacing)*.5);padding-bottom:calc(var(--spacing)*.5);min-height:calc(var(--spacing)*1);width:100%;display:inline-block}[data-line] span{color:var(--shiki-light)}[data-line] span:is(.dark *){color:var(--shiki-dark)!important}[data-highlighted-line],[data-highlighted-chars]{background-color:var(--color-code-highlight);position:relative}[data-highlighted-line]:after{content:"";background-color:var(--muted-foreground);width:2px;height:100%;position:absolute;top:0;left:0}@supports (color:color-mix(in lab, red, red)){[data-highlighted-line]:after{background-color:color-mix(in oklab,var(--muted-foreground)50%,transparent)}}[data-highlighted-chars]{border-radius:var(--radius-sm);font-family:var(--font-mono);padding-block:.1rem;padding-inline:.3rem;font-size:.8rem}}@layer utilities{.\@container\/card-header{container:card-header/inline-size}.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}@media (pointer:coarse){.extend-touch-target{touch-action:manipulation;position:relative}.extend-touch-target:after{content:var(--tw-content);content:var(--tw-content);inset:calc(var(--spacing)*-2);position:absolute}}.step{counter-increment:step;position:relative}.step:before{right:calc(var(--spacing)*0);margin-right:calc(var(--spacing)*2);width:calc(var(--spacing)*7);height:calc(var(--spacing)*7);text-align:center;text-indent:-1px;font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted-foreground);border-radius:3.40282e38px;justify-content:center;align-items:center;display:none}@media (min-width:48rem){.step:before{position:absolute}}.step:before{content:counter(step)}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-32{inset:calc(var(--spacing)*32)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.start-1{inset-inline-start:calc(var(--spacing)*1)}.-top-2{top:calc(var(--spacing)*-2)}.-top-4{top:calc(var(--spacing)*-4)}.-top-px{top:-1px}.top-0{top:calc(var(--spacing)*0)}.top-1{top:calc(var(--spacing)*1)}.top-1\.5{top:calc(var(--spacing)*1.5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-2\.5{top:calc(var(--spacing)*2.5)}.top-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-10{top:calc(var(--spacing)*10)}.top-14{top:calc(var(--spacing)*14)}.top-16{top:calc(var(--spacing)*16)}.top-20{top:calc(var(--spacing)*20)}.top-\[0\.3rem\]{top:.3rem}.top-\[0\.4rem\]{top:.4rem}.top-\[5px\]{top:5px}.top-\[50\%\]{top:50%}.top-\[calc\(var\(--header-height\)\+1px\)\]{top:calc(var(--header-height) + 1px)}.-right-1{right:calc(var(--spacing)*-1)}.-right-3{right:calc(var(--spacing)*-3)}.right-0{right:calc(var(--spacing)*0)}.right-0\.5{right:calc(var(--spacing)*.5)}.right-1{right:calc(var(--spacing)*1)}.right-2{right:calc(var(--spacing)*2)}.right-2\.5{right:calc(var(--spacing)*2.5)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-6{right:calc(var(--spacing)*6)}.right-16{right:calc(var(--spacing)*16)}.right-24{right:calc(var(--spacing)*24)}.right-\[-1\.5px\]{right:-1.5px}.right-\[-11px\]{right:-11px}.right-\[0\.3rem\]{right:.3rem}.right-\[28px\]{right:28px}.-bottom-1{bottom:calc(var(--spacing)*-1)}.-bottom-px{bottom:-1px}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-0\.5{bottom:calc(var(--spacing)*.5)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-16{bottom:calc(var(--spacing)*16)}.bottom-24{bottom:calc(var(--spacing)*24)}.-left-0{left:calc(var(--spacing)*0)}.-left-0\.5{left:calc(var(--spacing)*-.5)}.-left-1{left:calc(var(--spacing)*-1)}.-left-3{left:calc(var(--spacing)*-3)}.-left-5{left:calc(var(--spacing)*-5)}.-left-6{left:calc(var(--spacing)*-6)}.left-0{left:calc(var(--spacing)*0)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-2\.5{left:calc(var(--spacing)*2.5)}.left-3{left:calc(var(--spacing)*3)}.left-16{left:calc(var(--spacing)*16)}.left-\[-1\.5px\]{left:-1.5px}.left-\[-10\.5px\]{left:-10.5px}.left-\[50\%\]{left:50%}.isolate{isolation:isolate}.z-1{z-index:1}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-51{z-index:51}.z-60{z-index:60}.z-100{z-index:100}.z-500{z-index:500}.col-span-1{grid-column:span 1/span 1}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.container{width:100%}@media (min-width:1600px){.container{max-width:1600px}}@media (min-width:2000px){.container{max-width:2000px}}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.\!m-0{margin:calc(var(--spacing)*0)!important}.m-0{margin:calc(var(--spacing)*0)}.m-0\.5{margin:calc(var(--spacing)*.5)}.m-4{margin:calc(var(--spacing)*4)}.container-wrapper{width:100%;max-width:calc(var(--breakpoint-xl) + 2rem);padding-inline:calc(var(--spacing)*2);margin-inline:auto}.container{max-width:calc(var(--breakpoint-xl) + 2rem);padding-inline:calc(var(--spacing)*4);margin-inline:auto}@media (min-width:80rem){.container{padding-inline:calc(var(--spacing)*6)}}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-0{margin-inline:calc(var(--spacing)*0)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-1\.5{margin-inline:calc(var(--spacing)*1.5)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-auto{margin-inline:auto}.mx-px{margin-inline:1px}.\!my-0{margin-block:calc(var(--spacing)*0)!important}.my-1{margin-block:calc(var(--spacing)*1)}.my-1\.5{margin-block:calc(var(--spacing)*1.5)}.my-2{margin-block:calc(var(--spacing)*2)}.my-4{margin-block:calc(var(--spacing)*4)}.my-6{margin-block:calc(var(--spacing)*6)}.my-8{margin-block:calc(var(--spacing)*8)}.my-auto{margin-block:auto}.my-px{margin-block:1px}.-ms-5{margin-inline-start:calc(var(--spacing)*-5)}.me-1\.5{margin-inline-end:calc(var(--spacing)*1.5)}.\!mt-0{margin-top:calc(var(--spacing)*0)!important}.-mt-2\.5{margin-top:calc(var(--spacing)*-2.5)}.-mt-6{margin-top:calc(var(--spacing)*-6)}.-mt-12{margin-top:calc(var(--spacing)*-12)}.mt-0{margin-top:calc(var(--spacing)*0)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-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)}.mt-\[0\.75em\]{margin-top:.75em}.mt-\[1\.4em\]{margin-top:1.4em}.mt-\[1\.6em\]{margin-top:1.6em}.mt-\[1em\]{margin-top:1em}.mt-auto{margin-top:auto}.-mr-3{margin-right:calc(var(--spacing)*-3)}.mr-0{margin-right:calc(var(--spacing)*0)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-1\.5{margin-right:calc(var(--spacing)*1.5)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-4{margin-right:calc(var(--spacing)*4)}.mr-\[14px\]{margin-right:14px}.mr-auto{margin-right:auto}.\!mb-0{margin-bottom:calc(var(--spacing)*0)!important}.mb-0{margin-bottom:calc(var(--spacing)*0)}.mb-0\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-2\.5{margin-bottom:calc(var(--spacing)*2.5)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.mb-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.\!ml-6{margin-left:calc(var(--spacing)*6)!important}.-ml-2{margin-left:calc(var(--spacing)*-2)}.-ml-3{margin-left:calc(var(--spacing)*-3)}.ml-0{margin-left:calc(var(--spacing)*0)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-auto{margin-left:auto}.ml-px{margin-left:1px}.box-border{box-sizing:border-box}.box-content{box-sizing:content-box}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.no-scrollbar::-webkit-scrollbar{display:none}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-hide::-webkit-scrollbar{display:none}.block{display:block}.contents{display:contents}.flex{display:flex}.flex\!{display:flex!important}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.aspect-1\/2{aspect-ratio:1/2}.aspect-\[4\/2\.5\]{aspect-ratio:4/2.5}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.\!size-3{width:calc(var(--spacing)*3)!important;height:calc(var(--spacing)*3)!important}.\!size-3\.5{width:calc(var(--spacing)*3.5)!important;height:calc(var(--spacing)*3.5)!important}.size-0{width:calc(var(--spacing)*0);height:calc(var(--spacing)*0)}.size-2{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.size-2\.5{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.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-3\.5\!{width:calc(var(--spacing)*3.5)!important;height:calc(var(--spacing)*3.5)!important}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-4\.5{width:calc(var(--spacing)*4.5);height:calc(var(--spacing)*4.5)}.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)}.size-12{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.size-\[14px\]{width:14px;height:14px}.size-\[22px\]{width:22px;height:22px}.size-\[28px\]{width:28px;height:28px}.size-\[130px\]{width:130px;height:130px}.size-full{width:100%;height:100%}.h-\(--container-height\){height:var(--container-height)}.h-\(--header-height\){height:var(--header-height)}.h-\(--height\){height:var(--height)}.h-\(--radix-popper-available-height\){height:var(--radix-popper-available-height)}.h-\(--top-spacing\){height:var(--top-spacing)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-11{height:calc(var(--spacing)*11)}.h-12{height:calc(var(--spacing)*12)}.h-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.h-32{height:calc(var(--spacing)*32)}.h-\[0\.1px\]{height:.1px}.h-\[1\.5em\]{height:1.5em}.h-\[1\.45rem\]{height:1.45rem}.h-\[1px\]{height:1px}.h-\[19px\]{height:19px}.h-\[23rem\]{height:23rem}.h-\[24px\]{height:24px}.h-\[26px\]{height:26px}.h-\[28px\]{height:28px}.h-\[344px\]{height:344px}.h-\[350px\]{height:350px}.h-\[500px\]{height:500px}.h-\[520px\]{height:520px}.h-\[600px\]{height:600px}.h-\[650px\]{height:650px}.h-\[800px\]{height:800px}.h-\[7500px\]{height:7500px}.h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.h-\[calc\(100\%_\+_8px\)\]{height:calc(100% + 8px)}.h-\[calc\(100svh-var\(--header-height\)-var\(--footer-height\)\)\]{height:calc(100svh - var(--header-height) - var(--footer-height))}.h-\[calc\(100vh-3\.5rem\)\]{height:calc(100vh - 3.5rem)}.h-\[calc\(100vh-100px\)\]{height:calc(100vh - 100px)}.h-\[calc\(theme\(spacing\.7\)_-_1px\)\]{height:calc(1.75rem - 1px)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-dvh{height:100dvh}.h-fit{height:fit-content}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.h-svh{height:100svh}.max-h-\(--radix-context-menu-content-available-height\){max-height:var(--radix-context-menu-content-available-height)}.max-h-\(--radix-dropdown-menu-content-available-height\){max-height:var(--radix-dropdown-menu-content-available-height)}.max-h-\(--radix-select-content-available-height\){max-height:var(--radix-select-content-available-height)}.max-h-14{max-height:calc(var(--spacing)*14)}.max-h-72{max-height:calc(var(--spacing)*72)}.max-h-\[50vh\]{max-height:50vh}.max-h-\[70svh\]{max-height:70svh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[288px\]{max-height:288px}.max-h-\[300px\]{max-height:300px}.max-h-\[500px\]{max-height:500px}.max-h-\[650px\]{max-height:650px}.max-h-\[calc\(100vh-4rem\)\]{max-height:calc(100vh - 4rem)}.max-h-\[calc\(100vh-var\(--header-height\)-44px\)\]{max-height:calc(100vh - var(--header-height) - 44px)}.max-h-\[min\(50dvh\,calc\(-24px\+var\(--radix-popper-available-height\)\)\)\]{max-height:min(50dvh,calc(-24px + var(--radix-popper-available-height)))}.max-h-\[min\(70vh\,320px\)\]{max-height:min(70vh,320px)}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-4{min-height:calc(var(--spacing)*4)}.min-h-14{min-height:calc(var(--spacing)*14)}.min-h-\[1lh\]{min-height:1lh}.min-h-\[25px\]{min-height:25px}.min-h-\[50\%\]{min-height:50%}.min-h-\[350px\]{min-height:350px}.min-h-full\!{min-height:100%!important}.min-h-min{min-height:min-content}.min-h-svh{min-height:100svh}.w-\(--radix-popper-available-width\){width:var(--radix-popper-available-width)}.w-\(--sidebar-width\){width:var(--sidebar-width)}.w-0\.5{width:calc(var(--spacing)*.5)}.w-1{width:calc(var(--spacing)*1)}.w-1\/2{width:50%}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.w-4{width:calc(var(--spacing)*4)}.w-4\.5{width:calc(var(--spacing)*4.5)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-48{width:calc(var(--spacing)*48)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-\[1px\]{width:1px}.w-\[100px\]{width:100px}.w-\[180px\]{width:180px}.w-\[200px\]{width:200px}.w-\[230px\]{width:230px}.w-\[240px\]{width:240px}.w-\[280px\]{width:280px}.w-\[300px\]{width:300px}.w-\[330px\]{width:330px}.w-\[380px\]{width:380px}.w-\[700px\]{width:700px}.w-\[896px\]{width:896px}.w-\[970px\]{width:970px}.w-\[calc\(100\%-1rem\)\]{width:calc(100% - 1rem)}.w-\[min\(100\%\,600px\)\]{width:min(100%,600px)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.w-screen{width:100vw}.max-w-\(--skeleton-width\){max-width:var(--skeleton-width)}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-\[80vw\]{max-width:80vw}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-\[calc\(100vw-24px\)\]{max-width:calc(100vw - 24px)}.max-w-full{max-width:100%}.max-w-none{max-width:none}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-5{min-width:calc(var(--spacing)*5)}.min-w-8{min-width:calc(var(--spacing)*8)}.min-w-9{min-width:calc(var(--spacing)*9)}.min-w-10{min-width:calc(var(--spacing)*10)}.min-w-32{min-width:calc(var(--spacing)*32)}.min-w-\[8px\]{min-width:8px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[92px\]{min-width:92px}.min-w-\[125px\]{min-width:125px}.min-w-\[130px\]{min-width:130px}.min-w-\[180px\]{min-width:180px}.min-w-\[220px\]{min-width:220px}.min-w-\[225px\]{min-width:225px}.min-w-\[450px\]{min-width:450px}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-none{flex:none}.shrink-0{flex-shrink:0}.flex-grow-1,.grow{flex-grow:1}.table-fixed{table-layout:fixed}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.origin-\(--radix-context-menu-content-transform-origin\){transform-origin:var(--radix-context-menu-content-transform-origin)}.origin-\(--radix-dropdown-menu-content-transform-origin\){transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\(--radix-hover-card-content-transform-origin\){transform-origin:var(--radix-hover-card-content-transform-origin)}.origin-\(--radix-menubar-content-transform-origin\){transform-origin:var(--radix-menubar-content-transform-origin)}.origin-\(--radix-popover-content-transform-origin\){transform-origin:var(--radix-popover-content-transform-origin)}.origin-\(--radix-select-content-transform-origin\){transform-origin:var(--radix-select-content-transform-origin)}.origin-\(--radix-tooltip-content-transform-origin\){transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\/2{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-1\/4{--tw-translate-x:calc(calc(1/4*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-px{--tw-translate-x:-1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-12{--tw-translate-x:calc(var(--spacing)*12);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/4{--tw-translate-y:calc(calc(1/4*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-full{--tw-translate-y:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0\.5{--tw-translate-y:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[2px\]{--tw-translate-y:2px;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y:calc(-50% - 2px);translate:var(--tw-translate-x)var(--tw-translate-y)}.-rotate-45{rotate:-45deg}.rotate-0{rotate:none}.rotate-12{rotate:12deg}.rotate-45{rotate:45deg}.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-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-row-resize{cursor:row-resize}.cursor-text{cursor:text}.touch-manipulation{touch-action:manipulation}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.scroll-m-16{scroll-margin:calc(var(--spacing)*16)}.scroll-m-20{scroll-margin:calc(var(--spacing)*20)}.scroll-m-28{scroll-margin:calc(var(--spacing)*28)}.scroll-my-1{scroll-margin-block:calc(var(--spacing)*1)}.scroll-mt-20{scroll-margin-top:calc(var(--spacing)*20)}.scroll-mt-24{scroll-margin-top:calc(var(--spacing)*24)}.scroll-py-1{scroll-padding-block:calc(var(--spacing)*1)}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.list-none\!{list-style-type:none!important}.appearance-none{appearance:none}.grid-flow-row{grid-auto-flow:row}.auto-rows-max{grid-auto-rows:max-content}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.grid-cols-\[0_1fr\]{grid-template-columns:0 1fr}.grid-cols-\[repeat\(10\,1fr\)\]{grid-template-columns:repeat(10,1fr)}.grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-nowrap{flex-wrap:nowrap}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-evenly{justify-content:space-evenly}.justify-start{justify-content:flex-start}.justify-items-start{justify-items:start}.gap-0{gap:calc(var(--spacing)*0)}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}:where(.space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-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-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*10)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-16>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*16)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*16)*calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:calc(var(--spacing)*1)}:where(.space-x-0\.5>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*.5)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-0\.5{row-gap:calc(var(--spacing)*.5)}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.overscroll-none{overscroll-behavior:none}.rounded{border-radius:.25rem}.rounded-\[0\.5rem\]{border-radius:.5rem}.rounded-\[2px\]{border-radius:2px}.rounded-\[4px\]{border-radius:4px}.rounded-\[6px\]{border-radius:6px}.rounded-\[50\%\]{border-radius:50%}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-t-lg{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.rounded-r-md{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-bl-none{border-bottom-left-radius:0}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-s-2{border-inline-start-style:var(--tw-border-style);border-inline-start-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.border-\[\#ddd\]{border-color:#ddd}.border-blue-500{border-color:var(--color-blue-500)}.border-border,.border-border\/40{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/40{border-color:color-mix(in oklab,var(--border)40%,transparent)}}.border-border\/50{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/50{border-color:color-mix(in oklab,var(--border)50%,transparent)}}.border-border\/60{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/60{border-color:color-mix(in oklab,var(--border)60%,transparent)}}.border-current{border-color:currentColor}.border-gray-200{border-color:var(--color-gray-200)}.border-input{border-color:var(--input)}.border-muted{border-color:var(--muted)}.border-muted-foreground{border-color:var(--muted-foreground)}.border-primary{border-color:var(--primary)}.border-sidebar-border{border-color:var(--sidebar-border)}.border-stone-700{border-color:var(--color-stone-700)}.border-transparent{border-color:#0000}.border-zinc-700{border-color:var(--color-zinc-700)}.border-zinc-800{border-color:var(--color-zinc-800)}.border-s-blue-500\/50{border-inline-start-color:#3080ff80}@supports (color:color-mix(in lab, red, red)){.border-s-blue-500\/50{border-inline-start-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}}.border-s-green-500\/50{border-inline-start-color:#00c75880}@supports (color:color-mix(in lab, red, red)){.border-s-green-500\/50{border-inline-start-color:color-mix(in oklab,var(--color-green-500)50%,transparent)}}.border-s-orange-500\/50{border-inline-start-color:#fe6e0080}@supports (color:color-mix(in lab, red, red)){.border-s-orange-500\/50{border-inline-start-color:color-mix(in oklab,var(--color-orange-500)50%,transparent)}}.border-s-red-500\/50{border-inline-start-color:#fb2c3680}@supports (color:color-mix(in lab, red, red)){.border-s-red-500\/50{border-inline-start-color:color-mix(in oklab,var(--color-red-500)50%,transparent)}}.border-t-border{border-top-color:var(--border)}.border-t-transparent{border-top-color:#0000}.border-b-border{border-bottom-color:var(--border)}.border-b-brand\/\[\.24\]{border-bottom-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.border-b-brand\/\[\.24\]{border-bottom-color:color-mix(in oklab,var(--brand)24%,transparent)}}.border-b-gray-300{border-bottom-color:var(--color-gray-300)}.border-b-highlight,.border-b-highlight\/35{border-bottom-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.border-b-highlight\/35{border-bottom-color:color-mix(in oklab,var(--highlight)35%,transparent)}}.border-b-highlight\/\[\.7\]{border-bottom-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.border-b-highlight\/\[\.7\]{border-bottom-color:color-mix(in oklab,var(--highlight)70%,transparent)}}.border-b-highlight\/\[\.36\]{border-bottom-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.border-b-highlight\/\[\.36\]{border-bottom-color:color-mix(in oklab,var(--highlight)36%,transparent)}}.border-b-purple-100{border-bottom-color:var(--color-purple-100)}.border-b-transparent{border-bottom-color:#0000}.border-l-transparent{border-left-color:#0000}.bg-\(--cellBackground\){background-color:var(--cellBackground)}.bg-\(--color-1\){background-color:var(--color-1)}.bg-\(--color-2\){background-color:var(--color-2)}.bg-\(--color-3\){background-color:var(--color-3)}.bg-\(--color-4\){background-color:var(--color-4)}.bg-\[\#adfa1d\]{background-color:#adfa1d}.bg-\[\#eee\]{background-color:#eee}.bg-\[rgba\(0\,0\,0\,0\.5\)\]{background-color:#00000080}.bg-accent{background-color:var(--accent)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-background,.bg-background\/90{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/90{background-color:color-mix(in oklab,var(--background)90%,transparent)}}.bg-background\/95{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/95{background-color:color-mix(in oklab,var(--background)95%,transparent)}}.bg-black{background-color:var(--color-black)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-blue-200{background-color:var(--color-blue-200)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-border{background-color:var(--border)}.bg-brand,.bg-brand\/25{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.bg-brand\/25{background-color:color-mix(in oklab,var(--brand)25%,transparent)}}.bg-brand\/50{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.bg-brand\/50{background-color:color-mix(in oklab,var(--brand)50%,transparent)}}.bg-brand\/\[\.08\]{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.bg-brand\/\[\.08\]{background-color:color-mix(in oklab,var(--brand)8%,transparent)}}.bg-brand\/\[\.13\]{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.bg-brand\/\[\.13\]{background-color:color-mix(in oklab,var(--brand)13%,transparent)}}.bg-card{background-color:var(--card)}.bg-current{background-color:currentColor}.bg-cyan-50{background-color:var(--color-cyan-50)}.bg-destructive{background-color:var(--destructive)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-emerald-200\/80{background-color:#a4f4cfcc}@supports (color:color-mix(in lab, red, red)){.bg-emerald-200\/80{background-color:color-mix(in oklab,var(--color-emerald-200)80%,transparent)}}.bg-foreground{background-color:var(--foreground)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-300\/25{background-color:#d1d5dc40}@supports (color:color-mix(in lab, red, red)){.bg-gray-300\/25{background-color:color-mix(in oklab,var(--color-gray-300)25%,transparent)}}.bg-gray-800{background-color:var(--color-gray-800)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-200{background-color:var(--color-green-200)}.bg-highlight,.bg-highlight\/15{background-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.bg-highlight\/15{background-color:color-mix(in oklab,var(--highlight)15%,transparent)}}.bg-highlight\/25{background-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.bg-highlight\/25{background-color:color-mix(in oklab,var(--highlight)25%,transparent)}}.bg-highlight\/30{background-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.bg-highlight\/30{background-color:color-mix(in oklab,var(--highlight)30%,transparent)}}.bg-highlight\/45{background-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.bg-highlight\/45{background-color:color-mix(in oklab,var(--highlight)45%,transparent)}}.bg-highlight\/\[\.13\]{background-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.bg-highlight\/\[\.13\]{background-color:color-mix(in oklab,var(--highlight)13%,transparent)}}.bg-inherit{background-color:inherit}.bg-muted,.bg-muted\/30{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/30{background-color:color-mix(in oklab,var(--muted)30%,transparent)}}.bg-muted\/50{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/50{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.bg-muted\/60{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/60{background-color:color-mix(in oklab,var(--muted)60%,transparent)}}.bg-neutral-50{background-color:var(--color-neutral-50)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-pink-50{background-color:var(--color-pink-50)}.bg-popover,.bg-popover\/90{background-color:var(--popover)}@supports (color:color-mix(in lab, red, red)){.bg-popover\/90{background-color:color-mix(in oklab,var(--popover)90%,transparent)}}.bg-primary,.bg-primary\/10{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/10{background-color:color-mix(in oklab,var(--primary)10%,transparent)}}.bg-primary\/40{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/40{background-color:color-mix(in oklab,var(--primary)40%,transparent)}}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-200{background-color:var(--color-red-200)}.bg-red-200\/80{background-color:#ffcacacc}@supports (color:color-mix(in lab, red, red)){.bg-red-200\/80{background-color:color-mix(in oklab,var(--color-red-200)80%,transparent)}}.bg-ring{background-color:var(--ring)}.bg-secondary{background-color:var(--secondary)}.bg-sidebar{background-color:var(--sidebar)}.bg-sidebar-border{background-color:var(--sidebar-border)}.bg-slate-200\/50{background-color:#e2e8f080}@supports (color:color-mix(in lab, red, red)){.bg-slate-200\/50{background-color:color-mix(in oklab,var(--color-slate-200)50%,transparent)}}.bg-surface{background-color:var(--surface)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-zinc-800{background-color:var(--color-zinc-800)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-950{background-color:var(--color-zinc-950)}.bg-zinc-950\!{background-color:var(--color-zinc-950)!important}.bg-linear-to-b{--tw-gradient-position:to bottom}@supports (background-image:linear-gradient(in lab, red, red)){.bg-linear-to-b{--tw-gradient-position:to bottom in oklab}}.bg-linear-to-b{background-image:linear-gradient(var(--tw-gradient-stops))}.bg-linear-to-r{--tw-gradient-position:to right}@supports (background-image:linear-gradient(in lab, red, red)){.bg-linear-to-r{--tw-gradient-position:to right in oklab}}.bg-linear-to-r{background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[\#6EB6F2\]{--tw-gradient-from:#6eb6f2;--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))}.from-background{--tw-gradient-from:var(--background);--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))}.from-background\/10{--tw-gradient-from:var(--background)}@supports (color:color-mix(in lab, red, red)){.from-background\/10{--tw-gradient-from:color-mix(in oklab,var(--background)10%,transparent)}}.from-background\/10{--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))}.from-gray-900\/30{--tw-gradient-from:#1018284d}@supports (color:color-mix(in lab, red, red)){.from-gray-900\/30{--tw-gradient-from:color-mix(in oklab,var(--color-gray-900)30%,transparent)}}.from-gray-900\/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))}.via-\[\#a855f7\]{--tw-gradient-via:#a855f7;--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-background\/60{--tw-gradient-via:var(--background)}@supports (color:color-mix(in lab, red, red)){.via-background\/60{--tw-gradient-via:color-mix(in oklab,var(--background)60%,transparent)}}.via-background\/60{--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-\[\#eab308\]{--tw-gradient-to:#eab308;--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-background{--tw-gradient-to:var(--background);--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-transparent{--tw-gradient-to:transparent;--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-90\%{--tw-gradient-to-position:90%}.bg-cover{background-size:cover}.bg-clip-content{background-clip:content-box}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.bg-center{background-position:50%}.fill-blue-500{fill:var(--color-blue-500)}.fill-current{fill:currentColor}.fill-green-500{fill:var(--color-green-500)}.fill-none{fill:none}.fill-orange-500{fill:var(--color-orange-500)}.fill-primary{fill:var(--primary)}.fill-red-500{fill:var(--color-red-500)}.stroke-slate-300{stroke:var(--color-slate-300)}.stroke-\[3px\]{stroke-width:3px}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.\!p-0{padding:calc(var(--spacing)*0)!important}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.p-10{padding:calc(var(--spacing)*10)}.p-11{padding:calc(var(--spacing)*11)}.p-20{padding:calc(var(--spacing)*20)}.p-\[2px\]{padding:2px}.p-\[3px\]{padding:3px}.p-px{padding:1px}.\!px-0\.5{padding-inline:calc(var(--spacing)*.5)!important}.\!px-1{padding-inline:calc(var(--spacing)*1)!important}.\!px-1\.5{padding-inline:calc(var(--spacing)*1.5)!important}.\!px-2{padding-inline:calc(var(--spacing)*2)!important}.px-0{padding-inline:calc(var(--spacing)*0)}.px-0\.5{padding-inline:calc(var(--spacing)*.5)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-10{padding-inline:calc(var(--spacing)*10)}.px-16{padding-inline:calc(var(--spacing)*16)}.px-\[0\.3em\]{padding-inline:.3em}.px-\[0\.3rem\]{padding-inline:.3rem}.px-\[calc\(--spacing\(1\)-2px\)\]{padding-inline:calc(calc(var(--spacing)*1) - 2px)}.px-px{padding-inline:1px}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-4\!{padding-block:calc(var(--spacing)*4)!important}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-\[--spacing\(1\)\]{padding-block:calc(var(--spacing)*1)}.py-\[0\.2em\]{padding-block:.2em}.py-\[0\.2rem\]{padding-block:.2rem}.py-\[1\.5px\]{padding-block:1.5px}.py-\[3px\]{padding-block:3px}.ps-6{padding-inline-start:calc(var(--spacing)*6)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-0\.5{padding-top:calc(var(--spacing)*.5)}.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-2\.5{padding-top:calc(var(--spacing)*2.5)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-5{padding-top:calc(var(--spacing)*5)}.pt-24{padding-top:calc(var(--spacing)*24)}.pt-\[0\.275em\]{padding-top:.275em}.pr-1{padding-right:calc(var(--spacing)*1)}.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)}.pr-9{padding-right:calc(var(--spacing)*9)}.pr-10{padding-right:calc(var(--spacing)*10)}.pr-\[14px\]{padding-right:14px}.pr-px{padding-right:1px}.pb-0{padding-bottom:calc(var(--spacing)*0)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-1\.5{padding-bottom:calc(var(--spacing)*1.5)}.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-6{padding-bottom:calc(var(--spacing)*6)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-48{padding-bottom:calc(var(--spacing)*48)}.pb-72{padding-bottom:calc(var(--spacing)*72)}.pb-\[20vh\]{padding-bottom:20vh}.pb-\[51\.25\%\]{padding-bottom:51.25%}.pb-\[56\.25\%\]{padding-bottom:56.25%}.pb-\[56\.0417\%\]{padding-bottom:56.0417%}.pb-\[75\%\]{padding-bottom:75%}.pb-px{padding-bottom:1px}.pl-\(--index\){padding-left:var(--index)}.pl-0{padding-left:calc(var(--spacing)*0)}.pl-0\.5{padding-left:calc(var(--spacing)*.5)}.pl-1{padding-left:calc(var(--spacing)*1)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-2\.5{padding-left:calc(var(--spacing)*2.5)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-8{padding-left:calc(var(--spacing)*8)}.pl-\[26px\]{padding-left:26px}.pl-\[32px\]{padding-left:32px}.pl-\[50px\]{padding-left:50px}.text-center{text-align:center}.text-end{text-align:end}.text-justify{text-align:justify}.text-left{text-align:left}.text-start{text-align:start}.align-baseline{vertical-align:baseline}.align-middle{vertical-align:middle}.align-text-bottom{vertical-align:text-bottom}.font-\[inherit\]{font-family:inherit}.font-heading{font-family:"var(--font-heading)","ui-sans-serif",-apple-system,BlinkMacSystemFont,Segoe UI Variable Display,Segoe UI,Helvetica,Apple Color Emoji,Arial,"sans-serif",Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.font-mono{font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:"var(--font-sans)","ui-sans-serif",-apple-system,BlinkMacSystemFont,Segoe UI Variable Display,Segoe UI,Helvetica,Apple Color Emoji,Arial,"sans-serif",Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.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-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.8rem\]{font-size:.8rem}.text-\[1\.05rem\]{font-size:1.05rem}.text-\[10px\]{font-size:10px}.text-\[18px\]{font-size:18px}.text-\[20px\]{font-size:20px}.text-\[40px\]{font-size:40px}.text-\[max\(87\.5\%\,\.875rem\)\]{font-size:max(87.5%,.875rem)}.leading-7{--tw-leading:calc(var(--spacing)*7);line-height:calc(var(--spacing)*7)}.leading-\[1\.1\]{--tw-leading:1.1;line-height:1.1}.leading-\[1\.5\]{--tw-leading:1.5;line-height:1.5}.leading-\[10px\]{--tw-leading:10px;line-height:10px}.leading-\[normal\]{--tw-leading:normal;line-height:normal}.leading-loose{--tw-leading:var(--leading-loose);line-height:var(--leading-loose)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.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-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-tighter{--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.text-nowrap{text-wrap:nowrap}.break-normal{overflow-wrap:normal;word-break:normal}.break-words{overflow-wrap:break-word}.whitespace-break-spaces{white-space:break-spaces}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#000000\]{color:#000}.text-\[\#aaa\]{color:#aaa}.text-accent-foreground{color:var(--accent-foreground)}.text-background{color:var(--background)}.text-black{color:var(--color-black)}.text-blue-600{color:var(--color-blue-600)}.text-brand\/80{color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.text-brand\/80{color:color-mix(in oklab,var(--brand)80%,transparent)}}.text-card-foreground{color:var(--card-foreground)}.text-current{color:currentColor}.text-cyan-700{color:var(--color-cyan-700)}.text-destructive{color:var(--destructive)}.text-emerald-700{color:var(--color-emerald-700)}.text-foreground,.text-foreground\/80{color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.text-foreground\/80{color:color-mix(in oklab,var(--foreground)80%,transparent)}}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-inherit{color:inherit}.text-muted-foreground,.text-muted-foreground\/70{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\/70{color:color-mix(in oklab,var(--muted-foreground)70%,transparent)}}.text-muted-foreground\/80{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\/80{color:color-mix(in oklab,var(--muted-foreground)80%,transparent)}}.text-neutral-600{color:var(--color-neutral-600)}.text-neutral-800{color:var(--color-neutral-800)}.text-orange-500{color:var(--color-orange-500)}.text-orange-700{color:var(--color-orange-700)}.text-pink-700{color:var(--color-pink-700)}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-sidebar-foreground,.text-sidebar-foreground\/70{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab, red, red)){.text-sidebar-foreground\/70{color:color-mix(in oklab,var(--sidebar-foreground)70%,transparent)}}.text-slate-50{color:var(--color-slate-50)}.text-slate-500{color:var(--color-slate-500)}.text-stone-400{color:var(--color-stone-400)}.text-surface-foreground{color:var(--surface-foreground)}.text-transparent{color:#0000}.text-white{color:var(--color-white)}.text-zinc-50{color:var(--color-zinc-50)}.text-zinc-100{color:var(--color-zinc-100)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-700{color:var(--color-zinc-700)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.decoration-primary{-webkit-text-decoration-color:var(--primary);-webkit-text-decoration-color:var(--primary);text-decoration-color:var(--primary)}.decoration-\[0\.5px\]{text-decoration-thickness:.5px}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.caret-primary{caret-color:var(--primary)}.accent-foreground{accent-color:var(--foreground)}.opacity-0{opacity:0}.opacity-10{opacity:.1}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[rgba\(255\,_255\,_255\,_0\.1\)_0px_0\.5px_0px_0px_inset\,_rgb\(248\,_249\,_250\)_0px_1px_5px_0px_inset\,_rgb\(193\,_200\,_205\)_0px_0px_0px_0\.5px\,_rgb\(193\,_200\,_205\)_0px_2px_1px_-1px\,_rgb\(193\,_200\,_205\)_0px_1px_0px_0px\]{--tw-shadow-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.shadow-\[rgba\(255\,_255\,_255\,_0\.1\)_0px_0\.5px_0px_0px_inset\,_rgb\(248\,_249\,_250\)_0px_1px_5px_0px_inset\,_rgb\(193\,_200\,_205\)_0px_0px_0px_0\.5px\,_rgb\(193\,_200\,_205\)_0px_2px_1px_-1px\,_rgb\(193\,_200\,_205\)_0px_1px_0px_0px\]{--tw-shadow-color:color-mix(in oklab,#ffffff1a 0px .5px 0px 0px inset,#f8f9fa 0px 1px 5px 0px inset,#c1c8cd 0px 0px 0px .5px,#c1c8cd 0px 2px 1px -1px,#c1c8cd 0px 1px 0px 0px var(--tw-shadow-alpha),transparent)}}.ring-black\/5{--tw-ring-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.ring-black\/5{--tw-ring-color:color-mix(in oklab,var(--color-black)5%,transparent)}}.ring-ring{--tw-ring-color:var(--ring)}.ring-sidebar-ring{--tw-ring-color:var(--sidebar-ring)}.ring-offset-0{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.ring-offset-background{--tw-ring-offset-color:var(--background)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.invert-1{--tw-invert:invert(1%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.\!filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)!important}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-xs{--tw-backdrop-blur:blur(var(--blur-xs));-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,visibility,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-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;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-shadow{transition-property:box-shadow;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))}.transition-none{transition-property:none}.duration-75{--tw-duration:75ms;transition-duration:75ms}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-1000{--tw-duration:1s;transition-duration:1s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.\[contain\:content\]{contain:content}.fade-in-0{--tw-enter-opacity:0}.outline-none{--tw-outline-style:none;outline-style:none}.select-auto{-webkit-user-select:auto;user-select:auto}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}.zoom-in-95{--tw-enter-scale:.95}.\[--footer-height\:calc\(var\(--spacing\)\*14\)\]{--footer-height:calc(var(--spacing)*14)}.\[--header-height\:calc\(var\(--spacing\)\*14\)\]{--header-height:calc(var(--spacing)*14)}.\[--sidebar-width\:220px\]{--sidebar-width:220px}.\[--top-spacing\:0\]{--top-spacing:0}.\[counter-increment\:step\]{counter-increment:step}.\[counter-reset\:step\]{counter-reset:step}.\[tab-size\:2\]{tab-size:2}.fade-in{--tw-enter-opacity:0}.ring-inset{--tw-ring-inset:inset}.running{animation-play-state:running}:is(.\*\:m-0>*){margin:calc(var(--spacing)*0)}:is(.\*\:shrink-0>*){flex-shrink:0}:is(.\*\*\:my-0 *){margin-block:calc(var(--spacing)*0)}:is(.\*\*\:leading-\[calc\(1\.25\/\.875\)\] *){--tw-leading:calc(1.25/.875);line-height:1.42857}:is(.\*\*\:leading-normal *){--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.not-first\:mt-4:not(:first-child){margin-top:calc(var(--spacing)*4)}.not-first\:mt-6:not(:first-child){margin-top:calc(var(--spacing)*6)}.not-first\:mt-12:not(:first-child){margin-top:calc(var(--spacing)*12)}.not-last\:border-b:not(:last-child){border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.group-first\/column\:-left-1:is(:where(.group\/column):first-child *){left:calc(var(--spacing)*-1)}.group-first\/column\:pl-0:is(:where(.group\/column):first-child *){padding-left:calc(var(--spacing)*0)}.group-last\/column\:-right-1:is(:where(.group\/column):last-child *){right:calc(var(--spacing)*-1)}.group-last\/column\:pr-0:is(:where(.group\/column):last-child *){padding-right:calc(var(--spacing)*0)}.group-last\/toolbar-group\:hidden\!:is(:where(.group\/toolbar-group):last-child *){display:none!important}.group-focus-within\:pointer-events-none:is(:where(.group):focus-within *){pointer-events:none}.group-focus-within\:top-0:is(:where(.group):focus-within *){top:calc(var(--spacing)*0)}.group-focus-within\:cursor-default:is(:where(.group):focus-within *){cursor:default}.group-focus-within\:text-xs:is(:where(.group):focus-within *){font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.group-focus-within\:font-medium:is(:where(.group):focus-within *){--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.group-focus-within\:text-foreground:is(:where(.group):focus-within *){color:var(--foreground)}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\:translate-x-\[-135px\]:is(:where(.group):hover *){--tw-translate-x:-135px;translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:translate-x-\[-181px\]:is(:where(.group):hover *){--tw-translate-x:-181px;translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:rotate-0:is(:where(.group):hover *){rotate:none}.group-hover\:rotate-45:is(:where(.group):hover *){rotate:45deg}.group-hover\:text-\[\#e3b341\]:is(:where(.group):hover *){color:#e3b341}.group-hover\:no-underline:is(:where(.group):hover *){text-decoration-line:none}.group-hover\:underline:is(:where(.group):hover *){text-decoration-line:underline}.group-hover\:opacity-100:is(:where(.group):hover *),.group-hover\/column\:opacity-100:is(:where(.group\/column):hover *),.group-hover\/container\:opacity-100:is(:where(.group\/container):hover *),.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *),.group-hover\/row\:opacity-100:is(:where(.group\/row):hover *){opacity:1}}.group-has-disabled\:opacity-50:is(:where(.group):has(:disabled) *){opacity:.5}.group-has-data-\[resizing\=\"true\"\]\/row\:opacity-0:is(:where(.group\/row):has([data-resizing=true]) *),.group-has-data-\[resizing\=\\\"true\\\"\]\/row\:opacity-0:is(:where(.group\/row):has([data-resizing=\"true\"]) *){opacity:0}.group-has-data-\[sidebar\=menu-action\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-has-\[\[data-col\=\"0\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="0"]:hover) *),.group-has-\[\[data-col\=\"0\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="0"][data-resizing=true]) *),.group-has-\[\[data-col\=\"1\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="1"]:hover) *),.group-has-\[\[data-col\=\"1\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="1"][data-resizing=true]) *),.group-has-\[\[data-col\=\"10\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="10"]:hover) *),.group-has-\[\[data-col\=\"10\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="10"][data-resizing=true]) *),.group-has-\[\[data-col\=\"2\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="2"]:hover) *),.group-has-\[\[data-col\=\"2\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="2"][data-resizing=true]) *),.group-has-\[\[data-col\=\"3\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="3"]:hover) *),.group-has-\[\[data-col\=\"3\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="3"][data-resizing=true]) *),.group-has-\[\[data-col\=\"4\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="4"]:hover) *),.group-has-\[\[data-col\=\"4\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="4"][data-resizing=true]) *),.group-has-\[\[data-col\=\"5\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="5"]:hover) *),.group-has-\[\[data-col\=\"5\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="5"][data-resizing=true]) *),.group-has-\[\[data-col\=\"6\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="6"]:hover) *),.group-has-\[\[data-col\=\"6\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="6"][data-resizing=true]) *),.group-has-\[\[data-col\=\"7\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="7"]:hover) *),.group-has-\[\[data-col\=\"7\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="7"][data-resizing=true]) *),.group-has-\[\[data-col\=\"8\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="8"]:hover) *),.group-has-\[\[data-col\=\"8\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="8"][data-resizing=true]) *),.group-has-\[\[data-col\=\"9\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="9"]:hover) *),.group-has-\[\[data-col\=\"9\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="9"][data-resizing=true]) *),.group-has-\[\[data-col\=\\\"0\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"0\"]:hover) *),.group-has-\[\[data-col\=\\\"0\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"0\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"10\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"10\"]:hover) *),.group-has-\[\[data-col\=\\\"10\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"10\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"1\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"1\"]:hover) *),.group-has-\[\[data-col\=\\\"1\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"1\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"2\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"2\"]:hover) *),.group-has-\[\[data-col\=\\\"2\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"2\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"3\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"3\"]:hover) *),.group-has-\[\[data-col\=\\\"3\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"3\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"4\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"4\"]:hover) *),.group-has-\[\[data-col\=\\\"4\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"4\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"5\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"5\"]:hover) *),.group-has-\[\[data-col\=\\\"5\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"5\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"6\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"6\"]:hover) *),.group-has-\[\[data-col\=\\\"6\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"6\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"7\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"7\"]:hover) *),.group-has-\[\[data-col\=\\\"7\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"7\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"8\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"8\"]:hover) *),.group-has-\[\[data-col\=\\\"8\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"8\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"9\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"9\"]:hover) *),.group-has-\[\[data-col\=\\\"9\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"9\"][data-resizing=\"true\"]) *),.group-has-\[\[data-resizer-left\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-resizer-left]:hover) *),.group-has-\[\[data-resizer-left\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-resizer-left][data-resizing=true]) *),.group-has-\[\[data-resizer-left\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-resizer-left][data-resizing=\"true\"]) *){display:block}.group-data-list\:my-2:is(:where(.group)[data-list] *){margin-block:calc(var(--spacing)*2)}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:size-8\!:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\(--sidebar-width-icon\):is(:where(.group)[data-collapsible=icon] *){width:var(--sidebar-width-icon)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing)*4)))}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing)*4)) + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:p-0\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:p-2\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\[disabled\=true\]\:opacity-50:is(:where(.group)[data-disabled=true] *){opacity:.5}.group-data-\[empty\=true\]\/subheading\:hidden:is(:where(.group\/subheading)[data-empty=true] *){display:none}.group-data-\[pressed\=true\]\:bg-accent:is(:where(.group)[data-pressed=true] *){background-color:var(--accent)}.group-data-\[pressed\=true\]\:text-accent-foreground:is(:where(.group)[data-pressed=true] *){color:var(--accent-foreground)}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:border-sidebar-border:is(:where(.group)[data-variant=floating] *){border-color:var(--sidebar-border)}.group-data-\[variant\=floating\]\:shadow-sm:is(:where(.group)[data-variant=floating] *){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.group-data-\[vaul-drawer-direction\=bottom\]\/drawer-content\:block:is(:where(.group\/drawer-content)[data-vaul-drawer-direction=bottom] *){display:block}.group-data-\[view\=code\]\/block-view-wrapper\:hidden:is(:where(.group\/block-view-wrapper)[data-view=code] *),.group-data-\[view\=preview\]\/block-view-wrapper\:hidden:is(:where(.group\/block-view-wrapper)[data-view=preview] *){display:none}@media (hover:hover){.peer-hover\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button):hover~*){color:var(--sidebar-accent-foreground)}}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.peer-has-\[\[role\=menuitem\]\]\/menu-group\:block:is(:where(.peer\/menu-group):has([role=menuitem])~*),.peer-has-\[\[role\=menuitemradio\]\]\/menu-group\:block:is(:where(.peer\/menu-group):has([role=menuitemradio])~*),.peer-has-\[\[role\=option\]\]\/menu-group\:block:is(:where(.peer\/menu-group):has([role=option])~*){display:block}.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button)[data-active=true]~*){color:var(--sidebar-accent-foreground)}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.selection\:bg-brand\/25 ::selection{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.selection\:bg-brand\/25 ::selection{background-color:color-mix(in oklab,var(--brand)25%,transparent)}}.selection\:bg-brand\/25::selection{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.selection\:bg-brand\/25::selection{background-color:color-mix(in oklab,var(--brand)25%,transparent)}}.selection\:bg-transparent ::selection{background-color:#0000}.selection\:bg-transparent::selection{background-color:#0000}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-7::file-selector-button{height:calc(var(--spacing)*7)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:var(--foreground)}.placeholder\:text-muted-foreground::placeholder,.placeholder\:text-muted-foreground\/80::placeholder{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.placeholder\:text-muted-foreground\/80::placeholder{color:color-mix(in oklab,var(--muted-foreground)80%,transparent)}}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:z-10:before{content:var(--tw-content);z-index:10}.before\:mt-\[-4px\]:before{content:var(--tw-content);margin-top:-4px}.before\:ml-\[-50px\]:before{content:var(--tw-content);margin-left:-50px}.before\:box-border:before{content:var(--tw-content);box-sizing:border-box}.before\:inline-flex:before{content:var(--tw-content);display:inline-flex}.before\:size-full:before{content:var(--tw-content);width:100%;height:100%}.before\:h-9:before{content:var(--tw-content);height:calc(var(--spacing)*9)}.before\:w-9:before{content:var(--tw-content);width:calc(var(--spacing)*9)}.before\:cursor-text:before{content:var(--tw-content);cursor:text}.before\:items-center:before{content:var(--tw-content);align-items:center}.before\:justify-center:before{content:var(--tw-content);justify-content:center}.before\:rounded-full:before{content:var(--tw-content);border-radius:3.40282e38px}.before\:border-4:before{content:var(--tw-content);border-style:var(--tw-border-style);border-width:4px}.before\:border-t:before{content:var(--tw-content);border-top-style:var(--tw-border-style);border-top-width:1px}.before\:border-r:before{content:var(--tw-content);border-right-style:var(--tw-border-style);border-right-width:1px}.before\:border-b:before{content:var(--tw-content);border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.before\:border-l:before{content:var(--tw-content);border-left-style:var(--tw-border-style);border-left-width:1px}.before\:border-background:before{content:var(--tw-content);border-color:var(--background)}.before\:border-t-border:before{content:var(--tw-content);border-top-color:var(--border)}.before\:border-r-border:before{content:var(--tw-content);border-right-color:var(--border)}.before\:border-b-border:before{content:var(--tw-content);border-bottom-color:var(--border)}.before\:border-l-border:before{content:var(--tw-content);border-left-color:var(--border)}.before\:bg-brand\/5:before{content:var(--tw-content);background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.before\:bg-brand\/5:before{background-color:color-mix(in oklab,var(--brand)5%,transparent)}}.before\:bg-muted:before{content:var(--tw-content);background-color:var(--muted)}.before\:text-center:before{content:var(--tw-content);text-align:center}.before\:-indent-px:before{content:var(--tw-content);text-indent:-1px}.before\:font-mono:before{content:var(--tw-content);font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.before\:text-base:before{content:var(--tw-content);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.before\:font-medium:before{content:var(--tw-content);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.before\:text-muted-foreground\/80:before{content:var(--tw-content);color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.before\:text-muted-foreground\/80:before{color:color-mix(in oklab,var(--muted-foreground)80%,transparent)}}.before\:opacity-30:before{content:var(--tw-content);opacity:.3}.before\:content-\[\'\'\]:before{content:var(--tw-content);--tw-content:"";content:var(--tw-content)}.before\:content-\[attr\(placeholder\)\]:before{content:var(--tw-content);--tw-content:attr(placeholder);content:var(--tw-content)}.before\:\[content\:counter\(step\)\]:before{content:var(--tw-content);content:counter(step)}.before\:select-none:before{content:var(--tw-content);-webkit-user-select:none;user-select:none}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-0:after{content:var(--tw-content);inset:calc(var(--spacing)*0)}.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\:inset-y-\[-2px\]:after{content:var(--tw-content);inset-block:-2px}.after\:-top-0\.5:after{content:var(--tw-content);top:calc(var(--spacing)*-.5)}.after\:top-1\/2:after{content:var(--tw-content);top:50%}.after\:right-0:after{content:var(--tw-content);right:calc(var(--spacing)*0)}.after\:-left-1:after{content:var(--tw-content);left:calc(var(--spacing)*-1)}.after\:left-0:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:z-1:after{content:var(--tw-content);z-index:1}.after\:ml-1\.5:after{content:var(--tw-content);margin-left:calc(var(--spacing)*1.5)}.after\:block:after{content:var(--tw-content);display:block}.after\:flex:after{content:var(--tw-content);display:flex}.after\:inline-block:after{content:var(--tw-content);display:inline-block}.after\:h-3:after{content:var(--tw-content);height:calc(var(--spacing)*3)}.after\:h-8:after{content:var(--tw-content);height:calc(var(--spacing)*8)}.after\:h-16:after{content:var(--tw-content);height:calc(var(--spacing)*16)}.after\:h-\[calc\(100\%\)\+4px\]:after{content:var(--tw-content);height:calc(100%)4px}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing)*1)}.after\:w-3:after{content:var(--tw-content);width:calc(var(--spacing)*3)}.after\:w-10:after{content:var(--tw-content);width:calc(var(--spacing)*10)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:w-\[3px\]:after{content:var(--tw-content);width:3px}.after\:w-\[6px\]:after{content:var(--tw-content);width:6px}.after\:w-\[calc\(100\%\+8px\)\]:after{content:var(--tw-content);width:calc(100% + 8px)}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:-translate-x-px:after{content:var(--tw-content);--tw-translate-x:-1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:-translate-y-1\/2:after{content:var(--tw-content);--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:rounded-\[6px\]:after{content:var(--tw-content);border-radius:6px}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px}.after\:rounded-lg:after{content:var(--tw-content);border-radius:var(--radius)}.after\:rounded-sm:after{content:var(--tw-content);border-radius:calc(var(--radius) - 4px)}.after\:bg-border:after{content:var(--tw-content);background-color:var(--border)}.after\:bg-brand\/15:after{content:var(--tw-content);background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.after\:bg-brand\/15:after{background-color:color-mix(in oklab,var(--brand)15%,transparent)}}.after\:bg-neutral-500\/10:after{content:var(--tw-content);background-color:#7373731a}@supports (color:color-mix(in lab, red, red)){.after\:bg-neutral-500\/10:after{background-color:color-mix(in oklab,var(--color-neutral-500)10%,transparent)}}.after\:bg-primary:after{content:var(--tw-content);background-color:var(--primary)}.after\:bg-ring:after{content:var(--tw-content);background-color:var(--ring)}.after\:bg-zinc-950:after{content:var(--tw-content);background-color:var(--color-zinc-950)}.after\:pb-\[var\(--aspect-ratio\)\]:after{content:var(--tw-content);padding-bottom:var(--aspect-ratio)}.after\:align-middle:after{content:var(--tw-content);vertical-align:middle}.after\:opacity-0:after{content:var(--tw-content);opacity:0}.after\:transition-all:after{content:var(--tw-content);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.after\:content-\[\"\"\]:after{content:var(--tw-content);--tw-content:"";content:var(--tw-content)}.after\:content-\[\'_\'\]:after{content:var(--tw-content);--tw-content:" ";content:var(--tw-content)}.after\:content-\[\\\"\\\"\]:after{content:var(--tw-content);--tw-content:\"\";content:var(--tw-content)}@media (hover:hover){.group-hover\:after\:opacity-100:is(:where(.group):hover *):after{content:var(--tw-content);opacity:1}}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:\!mt-0:first-child{margin-top:calc(var(--spacing)*0)!important}.first\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\:rounded-l-md:first-child{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.last\:rounded-r-md:last-child{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.empty\:hidden:empty{display:none}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}.focus-within\:ring-2:focus-within{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-within\:ring-ring:focus-within{--tw-ring-color:var(--ring)}.focus-within\:ring-offset-2:focus-within{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}@media (hover:hover){.hover\:scale-125:hover{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:bg-accent:hover,.hover\:bg-accent\/80:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/80:hover{background-color:color-mix(in oklab,var(--accent)80%,transparent)}}.hover\:bg-black:hover{background-color:var(--color-black)}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}.hover\:bg-muted:hover{background-color:var(--muted)}.hover\:bg-muted-foreground\/15:hover{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted-foreground\/15:hover{background-color:color-mix(in oklab,var(--muted-foreground)15%,transparent)}}.hover\:bg-muted\/50:hover{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.hover\:bg-primary:hover,.hover\:bg-primary\/10:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/10:hover{background-color:color-mix(in oklab,var(--primary)10%,transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}.hover\:bg-secondary\/60:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-secondary\/60:hover{background-color:color-mix(in oklab,var(--secondary)60%,transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--secondary)80%,transparent)}}.hover\:bg-sidebar-accent:hover{background-color:var(--sidebar-accent)}.hover\:bg-slate-700:hover{background-color:var(--color-slate-700)}.hover\:bg-transparent:hover{background-color:#0000}.hover\:bg-zinc-700:hover{background-color:var(--color-zinc-700)}.hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:text-brand\/80:hover{color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.hover\:text-brand\/80:hover{color:color-mix(in oklab,var(--brand)80%,transparent)}}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:text-muted-foreground:hover,.hover\:text-muted-foreground\/80:hover{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.hover\:text-muted-foreground\/80:hover{color:color-mix(in oklab,var(--muted-foreground)80%,transparent)}}.hover\:text-primary:hover{color:var(--primary)}.hover\:text-primary-foreground:hover{color:var(--primary-foreground)}.hover\:text-sidebar-accent-foreground:hover{color:var(--sidebar-accent-foreground)}.hover\:text-slate-50:hover{color:var(--color-slate-50)}.hover\:text-white:hover{color:var(--color-white)}.hover\:text-zinc-50:hover{color:var(--color-zinc-50)}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));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-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-2:hover{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-primary:hover{--tw-ring-color:var(--primary)}.hover\:ring-offset-2:hover{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.hover\:group-data-\[collapsible\=offcanvas\]\:bg-sidebar:hover:is(:where(.group)[data-collapsible=offcanvas] *){background-color:var(--sidebar)}.hover\:after\:absolute:hover:after{content:var(--tw-content);position:absolute}.hover\:after\:-bottom-1:hover:after{content:var(--tw-content);bottom:calc(var(--spacing)*-1)}.hover\:after\:bottom-0:hover:after{content:var(--tw-content);bottom:calc(var(--spacing)*0)}.hover\:after\:left-0:hover:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.hover\:after\:h-10:hover:after{content:var(--tw-content);height:calc(var(--spacing)*10)}.hover\:after\:h-\[1\.5px\]:hover:after{content:var(--tw-content);height:1.5px}.hover\:after\:w-\[calc\(100\%-2px\)\]:hover:after{content:var(--tw-content);width:calc(100% - 2px)}.hover\:after\:bg-brand:hover:after{content:var(--tw-content);background-color:var(--brand)}.hover\:after\:bg-primary:hover:after{content:var(--tw-content);background-color:var(--primary)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:var(--sidebar-border)}}.focus\:z-10:focus{z-index:10}.focus\:bg-accent:focus{background-color:var(--accent)}.focus\:bg-primary:focus{background-color:var(--primary)}.focus\:bg-zinc-700:focus{background-color:var(--color-zinc-700)}.focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.focus\:text-primary-foreground:focus{color:var(--primary-foreground)}.focus\:text-white:focus{color:var(--color-white)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-ring:focus{--tw-ring-color:var(--ring)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:bg-transparent:focus-visible{background-color:#0000}.focus-visible\:bg-zinc-700:focus-visible{background-color:var(--color-zinc-700)}.focus-visible\:text-white:focus-visible{color:var(--color-white)}.focus-visible\:ring-0:focus-visible{--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-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.focus-visible\:ring-ring:focus-visible,.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--ring)50%,transparent)}}.focus-visible\:ring-slate-700:focus-visible{--tw-ring-color:var(--color-slate-700)}.focus-visible\:ring-transparent:focus-visible{--tw-ring-color:transparent}.focus-visible\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-hidden:focus-visible{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus-visible\:outline-hidden:focus-visible{outline-offset:2px;outline:2px solid #0000}}.focus-visible\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\:outline-ring:focus-visible{outline-color:var(--ring)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-sidebar-accent:active{background-color:var(--sidebar-accent)}.active\:bg-transparent:active{background-color:#0000}.active\:bg-zinc-700:active{background-color:var(--color-zinc-700)}.active\:text-sidebar-accent-foreground:active{color:var(--sidebar-accent-foreground)}.active\:text-white:active{color:var(--color-white)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}:where([data-side=left]) .in-data-\[side\=left\]\:cursor-w-resize{cursor:w-resize}:where([data-side=right]) .in-data-\[side\=right\]\:cursor-e-resize{cursor:e-resize}.has-aria-disabled\:border-input:has([aria-disabled=true]){border-color:var(--input)}.has-aria-disabled\:bg-muted:has([aria-disabled=true]){background-color:var(--muted)}.has-data-readonly\:w-fit:has([data-readonly]){width:fit-content}.has-data-readonly\:cursor-default:has([data-readonly]){cursor:default}.has-data-readonly\:border-transparent:has([data-readonly]){border-color:#0000}.has-data-readonly\:focus-within\:\[box-shadow\:none\]:has([data-readonly]):focus-within{box-shadow:none}.has-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-data-\[variant\=inset\]\:bg-sidebar:has([data-variant=inset]){background-color:var(--sidebar)}.has-\[\[data-slate-editor\]\:focus\]\:border-brand\/50:has([data-slate-editor]:focus){border-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.has-\[\[data-slate-editor\]\:focus\]\:border-brand\/50:has([data-slate-editor]:focus){border-color:color-mix(in oklab,var(--brand)50%,transparent)}}.has-\[\[data-slate-editor\]\:focus\]\:ring-2:has([data-slate-editor]:focus){--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.has-\[\[data-slate-editor\]\:focus\]\:ring-brand\/30:has([data-slate-editor]:focus){--tw-ring-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.has-\[\[data-slate-editor\]\:focus\]\:ring-brand\/30:has([data-slate-editor]:focus){--tw-ring-color:color-mix(in oklab,var(--brand)30%,transparent)}}.has-\[\[role\=menuitem\]\]\:block:has([role=menuitem]),.has-\[\[role\=menuitemradio\]\]\:block:has([role=menuitemradio]),.has-\[\[role\=option\]\]\:block:has([role=option]){display:block}.has-\[button\]\:flex:has(:is(button)){display:flex}.has-\[\+input\:not\(\:placeholder-shown\)\]\:pointer-events-none:has(+input:not(:placeholder-shown)){pointer-events:none}.has-\[\+input\:not\(\:placeholder-shown\)\]\:top-0:has(+input:not(:placeholder-shown)){top:calc(var(--spacing)*0)}.has-\[\+input\:not\(\:placeholder-shown\)\]\:cursor-default:has(+input:not(:placeholder-shown)){cursor:default}.has-\[\+input\:not\(\:placeholder-shown\)\]\:text-xs:has(+input:not(:placeholder-shown)){font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.has-\[\+input\:not\(\:placeholder-shown\)\]\:font-medium:has(+input:not(:placeholder-shown)){--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.has-\[\+input\:not\(\:placeholder-shown\)\]\:text-foreground:has(+input:not(:placeholder-shown)){color:var(--foreground)}.has-\[\>svg\]\:grid-cols-\[calc\(var\(--spacing\)\*4\)_1fr\]:has(>svg){grid-template-columns:calc(var(--spacing)*4)1fr}.has-\[\>svg\]\:gap-x-3:has(>svg){column-gap:calc(var(--spacing)*3)}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing)*2.5)}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--spacing)*3)}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--spacing)*4)}.aria-checked\:border-\(--color-1\)[aria-checked=true]{border-color:var(--color-1)}.aria-checked\:bg-accent[aria-checked=true]{background-color:var(--accent)}.aria-checked\:text-accent-foreground[aria-checked=true]{color:var(--accent-foreground)}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.aria-selected\:bg-accent[aria-selected=true]{background-color:var(--accent)}.aria-selected\:bg-primary[aria-selected=true]{background-color:var(--primary)}.aria-selected\:text-accent-foreground[aria-selected=true]{color:var(--accent-foreground)}.aria-selected\:text-muted-foreground[aria-selected=true]{color:var(--muted-foreground)}.aria-selected\:text-primary-foreground[aria-selected=true]{color:var(--primary-foreground)}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}:is(.\*\*\:data-block-hide\:hidden *)[data-block-hide]{display:none}.data-readonly\:w-fit[data-readonly]{width:fit-content}:is(.\*\*\:data-slate-editor\:max-h-\[calc\(100dvh-44px\)\] *)[data-slate-editor]{max-height:calc(100dvh - 44px)}:is(.\*\*\:data-slate-placeholder\:\!top-1\/2 *)[data-slate-placeholder]{top:50%!important}:is(.\*\*\:data-slate-placeholder\:top-\[auto_\!important\] *)[data-slate-placeholder]{top:auto!important}:is(.\*\*\:data-slate-placeholder\:-translate-y-1\/2 *)[data-slate-placeholder]{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.\*\*\:data-slate-placeholder\:text-muted-foreground\/80 *)[data-slate-placeholder]{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){:is(.\*\*\:data-slate-placeholder\:text-muted-foreground\/80 *)[data-slate-placeholder]{color:color-mix(in oklab,var(--muted-foreground)80%,transparent)}}:is(.\*\*\:data-slate-placeholder\:opacity-100\! *)[data-slate-placeholder]{opacity:1!important}.data-\[active-item\=true\]\:bg-accent[data-active-item=true]{background-color:var(--accent)}.data-\[active-item\=true\]\:text-accent-foreground[data-active-item=true]{color:var(--accent-foreground)}.data-\[active\=true\]\:bg-muted[data-active=true]{background-color:var(--muted)}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:var(--sidebar-accent)}.data-\[active\=true\]\:bg-zinc-700[data-active=true]{background-color:var(--color-zinc-700)}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:text-foreground[data-active=true]{color:var(--foreground)}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:var(--sidebar-accent-foreground)}.data-\[active\=true\]\:text-white[data-active=true]{color:var(--color-white)}.data-\[block\=login-01\]\:max-w-full[data-block=login-01]{max-width:100%}.data-\[block\=sidebar-10\]\:right-0[data-block=sidebar-10]{right:calc(var(--spacing)*0)}.data-\[block\=sidebar-10\]\:left-auto[data-block=sidebar-10]{left:auto}.data-\[block\=sidebar-11\]\:-top-1\/3[data-block=sidebar-11]{top:-33.3333%}.data-\[block\=sidebar-13\]\:max-w-full[data-block=sidebar-13]{max-width:100%}.data-\[block\=sidebar-14\]\:right-0[data-block=sidebar-14]{right:calc(var(--spacing)*0)}.data-\[block\=sidebar-14\]\:left-auto[data-block=sidebar-14]{left:auto}.data-\[block\=sidebar-15\]\:max-w-full[data-block=sidebar-15]{max-width:100%}.data-\[depth\=3\]\:pl-4[data-depth="3"]{padding-left:calc(var(--spacing)*4)}.data-\[depth\=3\]\:pl-6[data-depth="3"],.data-\[depth\=4\]\:pl-6[data-depth="4"]{padding-left:calc(var(--spacing)*6)}.data-\[depth\=4\]\:pl-8[data-depth="4"]{padding-left:calc(var(--spacing)*8)}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[error\=true\]\:text-destructive[data-error=true]{color:var(--destructive)}.data-\[highlighted\=true\]\:bg-accent[data-highlighted=true]{background-color:var(--accent)}.data-\[inset\]\:pl-8[data-inset]{padding-left:calc(var(--spacing)*8)}.data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--spacing)*1)}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:var(--muted-foreground)}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:var(--accent)}.data-\[selected\=true\]\:bg-primary\/10[data-selected=true]{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.data-\[selected\=true\]\:bg-primary\/10[data-selected=true]{background-color:color-mix(in oklab,var(--primary)10%,transparent)}}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:var(--accent-foreground)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.data-\[size\=default\]\:h-9[data-size=default]{height:calc(var(--spacing)*9)}.data-\[size\=sm\]\:h-8[data-size=sm]{height:calc(var(--spacing)*8)}:is(.\*\:data-\[slot\=alert\]\:first\:mt-0>*)[data-slot=alert]:first-child{margin-top:calc(var(--spacing)*0)}:is(.\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){:is(.\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:color-mix(in oklab,var(--destructive)90%,transparent)}}:is(.\*\:data-\[slot\=block-selection\]\:left-2>*)[data-slot=block-selection]{left:calc(var(--spacing)*2)}:is(.\*\*\:data-\[slot\=command-input-wrapper\]\:h-12 *)[data-slot=command-input-wrapper]{height:calc(var(--spacing)*12)}:is(.\*\:data-\[slot\=select-value\]\:line-clamp-1>*)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.\*\:data-\[slot\=select-value\]\:flex>*)[data-slot=select-value]{display:flex}:is(.\*\:data-\[slot\=select-value\]\:items-center>*)[data-slot=select-value]{align-items:center}:is(.\*\:data-\[slot\=select-value\]\:gap-2>*)[data-slot=select-value]{gap:calc(var(--spacing)*2)}:is(.\*\*\:data-\[slot\=separator\]\:\!h-4 *)[data-slot=separator]{height:calc(var(--spacing)*4)!important}.data-\[state\=active\]\:flex[data-state=active]{display:flex}.data-\[state\=active\]\:border-b-primary[data-state=active]{border-bottom-color:var(--primary)}.data-\[state\=active\]\:border-b-zinc-50[data-state=active]{border-bottom-color:var(--color-zinc-50)}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--background)}.data-\[state\=active\]\:bg-transparent[data-state=active]{background-color:#0000}.data-\[state\=active\]\:text-foreground[data-state=active]{color:var(--foreground)}.data-\[state\=active\]\:text-zinc-50[data-state=active]{color:var(--color-zinc-50)}.data-\[state\=active\]\:shadow-none[data-state=active]{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:var(--primary)}.data-\[state\=checked\]\:bg-accent[data-state=checked]{background-color:var(--accent)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--primary)}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:var(--primary-foreground)}.data-\[state\=closed\]\:shrink-0[data-state=closed]{flex-shrink:0}.data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:accordion-up var(--tw-animation-duration,var(--tw-duration,.2s))ease-out}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=closed\]\:opacity-0[data-state=closed]{opacity:0}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x:-100%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x:100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y:-100%}.data-\[state\=on\]\:bg-accent[data-state=on]{background-color:var(--accent)}.data-\[state\=on\]\:text-accent-foreground[data-state=on]{color:var(--accent-foreground)}.data-\[state\=open\]\:grow[data-state=open]{flex-grow:1}.data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:accordion-down var(--tw-animation-duration,var(--tw-duration,.2s))ease-out}.data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=open\]\:animate-none[data-state=open]{animation:none}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:var(--accent)}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:var(--secondary)}.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:var(--accent-foreground)}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:var(--muted-foreground)}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x:-100%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x:100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y:-100%}@media (hover:hover){.data-\[state\=open\]\:hover\:bg-sidebar-accent[data-state=open]:hover{background-color:var(--sidebar-accent)}.data-\[state\=open\]\:hover\:bg-zinc-700[data-state=open]:hover{background-color:var(--color-zinc-700)}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground[data-state=open]:hover{color:var(--sidebar-accent-foreground)}.data-\[state\=open\]\:hover\:text-white[data-state=open]:hover{color:var(--color-white)}}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--muted)}.data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{color:var(--destructive)}.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.data-\[variant\=destructive\]\:focus\:text-destructive[data-variant=destructive]:focus{color:var(--destructive)}.data-\[variant\=outline\]\:border-l-0[data-variant=outline]{border-left-style:var(--tw-border-style);border-left-width:0}.data-\[variant\=outline\]\:shadow-xs[data-variant=outline]{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[variant\=outline\]\:first\:border-l[data-variant=outline]:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.data-\[vaul-drawer-direction\=bottom\]\:inset-x-0[data-vaul-drawer-direction=bottom]{inset-inline:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=bottom\]\:bottom-0[data-vaul-drawer-direction=bottom]{bottom:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=bottom\]\:mt-24[data-vaul-drawer-direction=bottom]{margin-top:calc(var(--spacing)*24)}.data-\[vaul-drawer-direction\=bottom\]\:max-h-\[80vh\][data-vaul-drawer-direction=bottom]{max-height:80vh}.data-\[vaul-drawer-direction\=bottom\]\:rounded-t-lg[data-vaul-drawer-direction=bottom]{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.data-\[vaul-drawer-direction\=bottom\]\:border-t[data-vaul-drawer-direction=bottom]{border-top-style:var(--tw-border-style);border-top-width:1px}.data-\[vaul-drawer-direction\=left\]\:inset-y-0[data-vaul-drawer-direction=left]{inset-block:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=left\]\:left-0[data-vaul-drawer-direction=left]{left:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=left\]\:w-3\/4[data-vaul-drawer-direction=left]{width:75%}.data-\[vaul-drawer-direction\=left\]\:border-r[data-vaul-drawer-direction=left]{border-right-style:var(--tw-border-style);border-right-width:1px}.data-\[vaul-drawer-direction\=right\]\:inset-y-0[data-vaul-drawer-direction=right]{inset-block:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=right\]\:right-0[data-vaul-drawer-direction=right]{right:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=right\]\:w-3\/4[data-vaul-drawer-direction=right]{width:75%}.data-\[vaul-drawer-direction\=right\]\:border-l[data-vaul-drawer-direction=right]{border-left-style:var(--tw-border-style);border-left-width:1px}.data-\[vaul-drawer-direction\=top\]\:inset-x-0[data-vaul-drawer-direction=top]{inset-inline:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=top\]\:top-0[data-vaul-drawer-direction=top]{top:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=top\]\:mb-24[data-vaul-drawer-direction=top]{margin-bottom:calc(var(--spacing)*24)}.data-\[vaul-drawer-direction\=top\]\:max-h-\[80vh\][data-vaul-drawer-direction=top]{max-height:80vh}.data-\[vaul-drawer-direction\=top\]\:rounded-b-lg[data-vaul-drawer-direction=top]{border-bottom-right-radius:var(--radius);border-bottom-left-radius:var(--radius)}.data-\[vaul-drawer-direction\=top\]\:border-b[data-vaul-drawer-direction=top]{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}:is(.\*\:nth-\[2\]\:flex-1>*):nth-child(2){flex:1}:is(.\*\:nth-\[2\]\:text-muted-foreground>*):nth-child(2){color:var(--muted-foreground)}:is(.\*\:nth-\[2\]\:line-through>*):nth-child(2){text-decoration-line:line-through}:is(.\*\:nth-\[2\]\:focus\:outline-none>*):nth-child(2):focus{--tw-outline-style:none;outline-style:none}@supports (backdrop-blur:var(--tw)){.supports-backdrop-blur\:bg-background\/60{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.supports-backdrop-blur\:bg-background\/60{background-color:color-mix(in oklab,var(--background)60%,transparent)}}}@supports ((-webkit-backdrop-filter:var(--tw)) or (backdrop-filter:var(--tw))){.supports-backdrop-filter\:bg-background\/60{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.supports-backdrop-filter\:bg-background\/60{background-color:color-mix(in oklab,var(--background)60%,transparent)}}}@media not all and (min-width:48rem){.max-md\:hidden{display:none}}@media not all and (min-width:40rem){.max-sm\:hidden{display:none}.max-sm\:w-full{width:100%}.max-sm\:flex-auto\!{flex:auto!important}}@media (min-width:40rem){.sm\:block{display:block}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:w-\[1280px\]{width:1280px}.sm\:max-w-3xl{max-width:var(--container-3xl)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:p-10{padding:calc(var(--spacing)*10)}.sm\:px-24{padding-inline:calc(var(--spacing)*24)}.sm\:px-\[max\(64px\,calc\(50\%-350px\)\)\]{padding-inline:max(64px,50% - 350px)}.sm\:pr-12{padding-right:calc(var(--spacing)*12)}.sm\:text-left{text-align:left}.sm\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.sm\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.sm\:opacity-0{opacity:0}.data-\[vaul-drawer-direction\=left\]\:sm\:max-w-sm[data-vaul-drawer-direction=left],.data-\[vaul-drawer-direction\=right\]\:sm\:max-w-sm[data-vaul-drawer-direction=right]{max-width:var(--container-sm)}}@media (min-width:48rem){.md\:sticky{position:sticky}.md\:my-8{margin-block:calc(var(--spacing)*8)}.md\:mt-24{margin-top:calc(var(--spacing)*24)}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:aspect-auto{aspect-ratio:auto}.md\:size-7{width:calc(var(--spacing)*7);height:calc(var(--spacing)*7)}.md\:h-7{height:calc(var(--spacing)*7)}.md\:h-24{height:calc(var(--spacing)*24)}.md\:w-40{width:calc(var(--spacing)*40)}.md\:w-auto{width:auto}.md\:flex-1{flex:1}.md\:flex-none{flex:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-\[var\(--sidebar-width\)_minmax\(0\,1fr\)\]{grid-template-columns:var(--sidebar-width)minmax(0,1fr)}.md\:flex-row{flex-direction:row}.md\:flex-row-reverse{flex-direction:row-reverse}.md\:items-start{align-items:flex-start}.md\:justify-end{justify-content:flex-end}.md\:gap-4{gap:calc(var(--spacing)*4)}.md\:gap-16{gap:calc(var(--spacing)*16)}.md\:gap-24{gap:calc(var(--spacing)*24)}:where(.md\: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)))}.md\:px-2{padding-inline:calc(var(--spacing)*2)}.md\:px-8{padding-inline:calc(var(--spacing)*8)}.md\:py-0{padding-block:calc(var(--spacing)*0)}.md\:py-10{padding-block:calc(var(--spacing)*10)}.md\:pt-0{padding-top:calc(var(--spacing)*0)}.md\:pr-\[14px\]{padding-right:14px}.md\:text-left{text-align:left}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:\[--sidebar-width\:240px\]{--sidebar-width:240px}.md\:\[--top-spacing\:calc\(var\(--spacing\)\*4\)\]{--top-spacing:calc(var(--spacing)*4)}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:calc(var(--radius) + 4px)}.md\:peer-data-\[variant\=inset\]\:shadow-sm:is(:where(.peer)[data-variant=inset]~*){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-2:is(:where(.peer)[data-variant=inset]~*):is(:where(.peer)[data-state=collapsed]~*){margin-left:calc(var(--spacing)*2)}.md\:after\:hidden:after{content:var(--tw-content);display:none}}@media (min-width:64rem){.lg\:sticky{position:sticky}.lg\:top-20{top:calc(var(--spacing)*20)}.lg\:bottom-auto{bottom:auto}.lg\:mt-36{margin-top:calc(var(--spacing)*36)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:inline{display:inline}.lg\:inline-flex{display:inline-flex}.lg\:w-56{width:calc(var(--spacing)*56)}.lg\:w-auto{width:auto}.lg\:w-full{width:100%}.lg\:flex-col{flex-direction:column}.lg\:justify-start{justify-content:flex-start}.lg\:gap-1{gap:calc(var(--spacing)*1)}.lg\:gap-6{gap:calc(var(--spacing)*6)}.lg\:gap-48{gap:calc(var(--spacing)*48)}.lg\:px-0{padding-inline:calc(var(--spacing)*0)}.lg\:py-8{padding-block:calc(var(--spacing)*8)}.lg\:py-12{padding-block:calc(var(--spacing)*12)}.lg\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.lg\:leading-\[1\.1\]{--tw-leading:1.1;line-height:1.1}}@media (min-width:80rem){.xl\:block{display:block}.xl\:flex{display:flex}.xl\:hidden{display:none}.xl\:inline{display:inline}.xl\:w-64{width:calc(var(--spacing)*64)}.xl\:w-auto{width:auto}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:gap-10{gap:calc(var(--spacing)*10)}.xl\:\[--footer-height\:calc\(var\(--spacing\)\*24\)\]{--footer-height:calc(var(--spacing)*24)}}@media (min-width:96rem){.\32 xl\:block{display:block}.\32 xl\:hidden{display:none}}@container not (min-width:32rem){.\@max-lg\:col-span-full{grid-column:1/-1}}.dark\:block:is(.dark *){display:block}.dark\:hidden:is(.dark *){display:none}.dark\:border-border:is(.dark *){border-color:var(--border)}.dark\:border-input:is(.dark *){border-color:var(--input)}.dark\:bg-cyan-950:is(.dark *){background-color:var(--color-cyan-950)}.dark\:bg-destructive\/60:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-destructive\/60:is(.dark *){background-color:color-mix(in oklab,var(--destructive)60%,transparent)}}.dark\:bg-gray-800:is(.dark *){background-color:var(--color-gray-800)}.dark\:bg-green-950:is(.dark *){background-color:var(--color-green-950)}.dark\:bg-input\/30:is(.dark *){background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-input\/30:is(.dark *){background-color:color-mix(in oklab,var(--input)30%,transparent)}}.dark\:bg-muted:is(.dark *){background-color:var(--muted)}.dark\:bg-neutral-900:is(.dark *){background-color:var(--color-neutral-900)}.dark\:bg-orange-950:is(.dark *){background-color:var(--color-orange-950)}.dark\:bg-pink-950:is(.dark *){background-color:var(--color-pink-950)}.dark\:bg-purple-900:is(.dark *){background-color:var(--color-purple-900)}.dark\:bg-purple-950:is(.dark *){background-color:var(--color-purple-950)}.dark\:bg-red-900:is(.dark *){background-color:var(--color-red-900)}.dark\:bg-red-950:is(.dark *){background-color:var(--color-red-950)}.dark\:bg-white:is(.dark *){background-color:var(--color-white)}.dark\:bg-zinc-800:is(.dark *){background-color:var(--color-zinc-800)}.dark\:bg-zinc-900:is(.dark *){background-color:var(--color-zinc-900)}.dark\:bg-zinc-900\!:is(.dark *){background-color:var(--color-zinc-900)!important}.dark\:stroke-slate-600:is(.dark *){stroke:var(--color-slate-600)}.dark\:text-background:is(.dark *){color:var(--background)}.dark\:text-black:is(.dark *){color:var(--color-black)}.dark\:text-cyan-300:is(.dark *){color:var(--color-cyan-300)}.dark\:text-foreground:is(.dark *){color:var(--foreground)}.dark\:text-gray-300:is(.dark *){color:var(--color-gray-300)}.dark\:text-green-300:is(.dark *){color:var(--color-green-300)}.dark\:text-muted-foreground:is(.dark *){color:var(--muted-foreground)}.dark\:text-neutral-300:is(.dark *){color:var(--color-neutral-300)}.dark\:text-neutral-400:is(.dark *){color:var(--color-neutral-400)}.dark\:text-orange-300:is(.dark *){color:var(--color-orange-300)}.dark\:text-pink-300:is(.dark *){color:var(--color-pink-300)}.dark\:text-purple-300:is(.dark *){color:var(--color-purple-300)}.dark\:text-purple-400:is(.dark *){color:var(--color-purple-400)}.dark\:text-red-300:is(.dark *){color:var(--color-red-300)}.dark\:text-red-400:is(.dark *){color:var(--color-red-400)}.dark\:text-white:is(.dark *){color:var(--color-white)}.dark\:shadow-\[rgba\(255\,_255\,_255\,_0\.1\)_0px_0\.5px_0px_0px_inset\,_rgb\(26\,_29\,_30\)_0px_1px_5px_0px_inset\,_rgb\(76\,_81\,_85\)_0px_0px_0px_0\.5px\,_rgb\(76\,_81\,_85\)_0px_2px_1px_-1px\,_rgb\(76\,_81\,_85\)_0px_1px_0px_0px\]:is(.dark *){--tw-shadow-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.dark\:shadow-\[rgba\(255\,_255\,_255\,_0\.1\)_0px_0\.5px_0px_0px_inset\,_rgb\(26\,_29\,_30\)_0px_1px_5px_0px_inset\,_rgb\(76\,_81\,_85\)_0px_0px_0px_0\.5px\,_rgb\(76\,_81\,_85\)_0px_2px_1px_-1px\,_rgb\(76\,_81\,_85\)_0px_1px_0px_0px\]:is(.dark *){--tw-shadow-color:color-mix(in oklab,#ffffff1a 0px .5px 0px 0px inset,#1a1d1e 0px 1px 5px 0px inset,#4c5155 0px 0px 0px .5px,#4c5155 0px 2px 1px -1px,#4c5155 0px 1px 0px 0px var(--tw-shadow-alpha),transparent)}}.dark\:ring-white\/5:is(.dark *){--tw-ring-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.dark\:ring-white\/5:is(.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)5%,transparent)}}@media (hover:hover){.dark\:hover\:bg-accent\/50:is(.dark *):hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-accent\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--input)50%,transparent)}}.dark\:hover\:bg-transparent:is(.dark *):hover{background-color:#0000}}.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\:data-\[state\=active\]\:border-input:is(.dark *)[data-state=active]{border-color:var(--input)}.dark\:data-\[state\=active\]\:bg-input\/30:is(.dark *)[data-state=active]{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\:data-\[state\=active\]\:bg-input\/30:is(.dark *)[data-state=active]{background-color:color-mix(in oklab,var(--input)30%,transparent)}}.dark\:data-\[state\=active\]\:text-foreground:is(.dark *)[data-state=active]{color:var(--foreground)}.dark\:data-\[state\=checked\]\:bg-primary:is(.dark *)[data-state=checked]{background-color:var(--primary)}.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is(.dark *)[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is(.dark *)[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--destructive)20%,transparent)}}@media (min-width:48rem){.md\:dark\:hidden:is(.dark *){display:none}}@media print{.print\:hidden{display:none}.print\:break-inside-avoid{break-inside:avoid}.print\:placeholder\:text-transparent::placeholder{color:#0000}}@media (min-width:1600px){.\33 xl\:fixed\:container:is(.layout-fixed *){width:100%}@media (min-width:1600px){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:1600px}}@media (min-width:2000px){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:2000px}}@media (min-width:40rem){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:40rem}}@media (min-width:48rem){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:48rem}}@media (min-width:64rem){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:64rem}}@media (min-width:80rem){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:80rem}}@media (min-width:96rem){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:96rem}}.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:calc(var(--breakpoint-xl) + 2rem);padding-inline:calc(var(--spacing)*4);margin-inline:auto}@media (min-width:80rem){.\33 xl\:fixed\:container:is(.layout-fixed *){padding-inline:calc(var(--spacing)*6)}}.\33 xl\:fixed\:px-0:is(.layout-fixed *){padding-inline:calc(var(--spacing)*0)}.\33 xl\:fixed\:px-3:is(.layout-fixed *){padding-inline:calc(var(--spacing)*3)}}.\[\&_\*\:\:selection\]\:\!bg-transparent ::selection{background-color:#0000!important}.\[\&_\*\:\:selection\]\:bg-none ::selection{background-image:none}.\[\&_\.katex-display\]\:my-0 .katex-display{margin-block:calc(var(--spacing)*0)}.\[\&_\.katex-display\]\:my-0\! .katex-display{margin-block:calc(var(--spacing)*0)!important}.\[\&_\.line\:before\]\:sticky .line:before{position:sticky}.\[\&_\.line\:before\]\:left-2 .line:before{left:calc(var(--spacing)*2)}.\[\&_\.line\:before\]\:z-10 .line:before{z-index:10}.\[\&_\.line\:before\]\:-translate-y-px .line:before{--tw-translate-y:-1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&_\.line\:before\]\:pr-1 .line:before{padding-right:calc(var(--spacing)*1)}.\[\&_\.react-tweet-theme\]\:my-0 .react-tweet-theme{margin-block:calc(var(--spacing)*0)}.\[\&_\.react-tweet-theme\]\:ring-2 .react-tweet-theme{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.\[\&_\.react-tweet-theme\]\:ring-ring .react-tweet-theme{--tw-ring-color:var(--ring)}.\[\&_\.react-tweet-theme\]\:ring-offset-2 .react-tweet-theme{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.\[\&_\.slate-selected\]\:\!bg-primary\/20 .slate-selected{background-color:var(--primary)!important}@supports (color:color-mix(in lab, red, red)){.\[\&_\.slate-selected\]\:\!bg-primary\/20 .slate-selected{background-color:color-mix(in oklab,var(--primary)20%,transparent)!important}}.\[\&_\.slate-selection-area\]\:z-50 .slate-selection-area{z-index:50}.\[\&_\.slate-selection-area\]\:border .slate-selection-area{border-style:var(--tw-border-style);border-width:1px}.\[\&_\.slate-selection-area\]\:border-brand\/25 .slate-selection-area{border-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.\[\&_\.slate-selection-area\]\:border-brand\/25 .slate-selection-area{border-color:color-mix(in oklab,var(--brand)25%,transparent)}}.\[\&_\.slate-selection-area\]\:border-primary .slate-selection-area{border-color:var(--primary)}.\[\&_\.slate-selection-area\]\:bg-brand\/15 .slate-selection-area{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.\[\&_\.slate-selection-area\]\:bg-brand\/15 .slate-selection-area{background-color:color-mix(in oklab,var(--brand)15%,transparent)}}.\[\&_\.slate-selection-area\]\:bg-primary\/10 .slate-selection-area{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.\[\&_\.slate-selection-area\]\:bg-primary\/10 .slate-selection-area{background-color:color-mix(in oklab,var(--primary)10%,transparent)}}.\[\&_\>_\.lty-playbtn\]\:absolute>.lty-playbtn{position:absolute}.\[\&_\>_\.lty-playbtn\]\:top-1\/2>.lty-playbtn{top:50%}.\[\&_\>_\.lty-playbtn\]\:left-1\/2>.lty-playbtn{left:50%}.\[\&_\>_\.lty-playbtn\]\:z-1>.lty-playbtn{z-index:1}.\[\&_\>_\.lty-playbtn\]\:h-\[46px\]>.lty-playbtn{height:46px}.\[\&_\>_\.lty-playbtn\]\:w-\[70px\]>.lty-playbtn{width:70px}.\[\&_\>_\.lty-playbtn\]\:\[transform\:translate3d\(-50\%\,-50\%\,0\)\]>.lty-playbtn{transform:translate(-50%,-50%)}.\[\&_\>_\.lty-playbtn\]\:rounded-\[14\%\]>.lty-playbtn{border-radius:14%}.\[\&_\>_\.lty-playbtn\]\:bg-\[\#212121\]>.lty-playbtn{background-color:#212121}.\[\&_\>_\.lty-playbtn\]\:opacity-80>.lty-playbtn{opacity:.8}.\[\&_\>_\.lty-playbtn\]\:\[transition\:all_0\.2s_cubic-bezier\(0\,_0\,_0\.2\,_1\)\]>.lty-playbtn{transition:all .2s cubic-bezier(0,0,.2,1)}.\[\&_\>_\.lty-playbtn\]\:before\:absolute>.lty-playbtn:before{content:var(--tw-content);position:absolute}.\[\&_\>_\.lty-playbtn\]\:before\:top-1\/2>.lty-playbtn:before{content:var(--tw-content);top:50%}.\[\&_\>_\.lty-playbtn\]\:before\:left-1\/2>.lty-playbtn:before{content:var(--tw-content);left:50%}.\[\&_\>_\.lty-playbtn\]\:before\:\[transform\:translate3d\(-50\%\,-50\%\,0\)\]>.lty-playbtn:before{content:var(--tw-content);transform:translate(-50%,-50%)}.\[\&_\>_\.lty-playbtn\]\:before\:border-y-\[11px\]>.lty-playbtn:before{content:var(--tw-content);border-block-style:var(--tw-border-style);border-block-width:11px}.\[\&_\>_\.lty-playbtn\]\:before\:border-r-0>.lty-playbtn:before{content:var(--tw-content);border-right-style:var(--tw-border-style);border-right-width:0}.\[\&_\>_\.lty-playbtn\]\:before\:border-l-\[19px\]>.lty-playbtn:before{content:var(--tw-content);border-left-style:var(--tw-border-style);border-left-width:19px}.\[\&_\>_\.lty-playbtn\]\:before\:border-\[transparent_transparent_transparent_\#fff\]>.lty-playbtn:before{content:var(--tw-content);border-color:#0000 #0000 #0000 #fff}.\[\&_\>_\.lty-playbtn\]\:before\:content-\[\"\"\]>.lty-playbtn:before{content:var(--tw-content);--tw-content:"";content:var(--tw-content)}.\[\&_\>_\.lty-playbtn\]\:before\:content-\[\\\"\\\"\]>.lty-playbtn:before{content:var(--tw-content);--tw-content:\"\";content:var(--tw-content)}.\[\&_\>_iframe\]\:absolute>iframe{position:absolute}.\[\&_\>_iframe\]\:top-0>iframe{top:calc(var(--spacing)*0)}.\[\&_\>_iframe\]\:left-0>iframe{left:calc(var(--spacing)*0)}.\[\&_\>_iframe\]\:size-full>iframe{width:100%;height:100%}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:var(--muted-foreground)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_button\]\:hidden button{display:none}.\[\&_code\]\:text-sm code{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.\[\&_h3\.font-heading\]\:text-base h3.font-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.\[\&_h3\.font-heading\]\:font-semibold h3.font-heading{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_pre\]\:my-0 pre{margin-block:calc(var(--spacing)*0)}.\[\&_pre\]\:h-\(--height\) pre{height:var(--height)}.\[\&_pre\]\:max-h-\[350px\] pre{max-height:350px}.\[\&_pre\]\:max-h-\[650px\] pre{max-height:650px}.\[\&_pre\]\:overflow-auto pre{overflow:auto}.\[\&_pre\]\:overflow-hidden pre{overflow:hidden}.\[\&_pre\]\:bg-transparent\! pre{background-color:#0000!important}.\[\&_pre\]\:pt-4 pre{padding-top:calc(var(--spacing)*4)}.\[\&_pre\]\:pb-20 pre{padding-bottom:calc(var(--spacing)*20)}.\[\&_pre\]\:pb-\[100px\] pre{padding-bottom:100px}.\[\&_pre\]\:font-mono pre{font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.\[\&_pre\]\:text-sm pre{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.\[\&_pre\]\:leading-relaxed pre{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_strong\]\:font-bold strong{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:\!size-3 svg{width:calc(var(--spacing)*3)!important;height:calc(var(--spacing)*3)!important}.\[\&_svg\]\:size-3\.5 svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:size-6 svg{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\]\:text-muted-foreground svg{color:var(--muted-foreground)}@media (hover:hover){.\[\&_svg\]\:hover\:text-muted-foreground svg:hover{color:var(--muted-foreground)}}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:var(--muted-foreground)}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&_ul\]\:list-\[circle\] ul{list-style-type:circle}.\[\&_ul_ul\]\:list-\[square\] ul ul{list-style-type:square}.\[\&\.lyt-activated\]\:cursor-\[unset\].lyt-activated{cursor:unset}.\[\&\.lyt-activated\]\:before\:pointer-events-none.lyt-activated:before{content:var(--tw-content);pointer-events:none}.\[\&\.lyt-activated\]\:before\:absolute.lyt-activated:before{content:var(--tw-content);position:absolute}.\[\&\.lyt-activated\]\:before\:top-0.lyt-activated:before{content:var(--tw-content);top:calc(var(--spacing)*0)}.\[\&\.lyt-activated\]\:before\:h-\[60px\].lyt-activated:before{content:var(--tw-content);height:60px}.\[\&\.lyt-activated\]\:before\:w-full.lyt-activated:before{content:var(--tw-content);width:100%}.\[\&\.lyt-activated\]\:before\:bg-\[url\(data\:image\/png\;base64\,iVBORw0KGgoAAAANSUhEUgAAAAEAAADGCAYAAAAT\+OqFAAAAdklEQVQoz42QQQ7AIAgEF\/T\/D\+kbq\/RWAlnQyyazA4aoAB4FsBSA\/bFjuF1EOL7VbrIrBuusmrt4ZZORfb6ehbWdnRHEIiITaEUKa5EJqUakRSaEYBJSCY2dEstQY7AuxahwXFrvZmWl2rh4JZ07z9dLtesfNj5q0FU3A5ObbwAAAABJRU5ErkJggg\=\=\)\].lyt-activated:before{content:var(--tw-content);background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAADGCAYAAAAT+OqFAAAAdklEQVQoz42QQQ7AIAgEF/T/D+kbq/RWAlnQyyazA4aoAB4FsBSA/bFjuF1EOL7VbrIrBuusmrt4ZZORfb6ehbWdnRHEIiITaEUKa5EJqUakRSaEYBJSCY2dEstQY7AuxahwXFrvZmWl2rh4JZ07z9dLtesfNj5q0FU3A5ObbwAAAABJRU5ErkJggg==)}.\[\&\.lyt-activated\]\:before\:bg-top.lyt-activated:before{content:var(--tw-content);background-position:top}.\[\&\.lyt-activated\]\:before\:bg-repeat-x.lyt-activated:before{content:var(--tw-content);background-repeat:repeat-x}.\[\&\.lyt-activated\]\:before\:pb-\[50px\].lyt-activated:before{content:var(--tw-content);padding-bottom:50px}.\[\&\.lyt-activated\]\:before\:opacity-0.lyt-activated:before{content:var(--tw-content);opacity:0}.\[\&\.lyt-activated\]\:before\:\[transition\:all_0\.2s_cubic-bezier\(0\,_0\,_0\.2\,_1\)\].lyt-activated:before{content:var(--tw-content);transition:all .2s cubic-bezier(0,0,.2,1)}.\[\&\.lyt-activated_\>_\.lty-playbtn\]\:pointer-events-none.lyt-activated>.lty-playbtn{pointer-events:none}.\[\&\.lyt-activated_\>_\.lty-playbtn\]\:opacity-0\!.lyt-activated>.lty-playbtn{opacity:0!important}.\[\&\:\:-webkit-scrollbar\]\:w-4::-webkit-scrollbar{width:calc(var(--spacing)*4)}.\[\&\:\:-webkit-scrollbar-button\]\:hidden::-webkit-scrollbar-button{display:none}.\[\&\:\:-webkit-scrollbar-button\]\:size-0::-webkit-scrollbar-button{width:calc(var(--spacing)*0);height:calc(var(--spacing)*0)}.\[\&\:\:-webkit-scrollbar-thumb\]\:min-h-11::-webkit-scrollbar-thumb{min-height:calc(var(--spacing)*11)}.\[\&\:\:-webkit-scrollbar-thumb\]\:rounded-full::-webkit-scrollbar-thumb{border-radius:3.40282e38px}.\[\&\:\:-webkit-scrollbar-thumb\]\:border-4::-webkit-scrollbar-thumb{border-style:var(--tw-border-style);border-width:4px}.\[\&\:\:-webkit-scrollbar-thumb\]\:border-solid::-webkit-scrollbar-thumb{--tw-border-style:solid;border-style:solid}.\[\&\:\:-webkit-scrollbar-thumb\]\:border-popover::-webkit-scrollbar-thumb{border-color:var(--popover)}.\[\&\:\:-webkit-scrollbar-thumb\]\:bg-muted::-webkit-scrollbar-thumb{background-color:var(--muted)}.\[\&\:\:-webkit-scrollbar-thumb\]\:bg-clip-padding::-webkit-scrollbar-thumb{background-clip:padding-box}@media (hover:hover){.\[\&\:\:-webkit-scrollbar-thumb\]\:hover\:bg-muted-foreground\/25::-webkit-scrollbar-thumb:hover{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.\[\&\:\:-webkit-scrollbar-thumb\]\:hover\:bg-muted-foreground\/25::-webkit-scrollbar-thumb:hover{background-color:color-mix(in oklab,var(--muted-foreground)25%,transparent)}}}.focus\:\[\&\:\:placeholder\]\:opacity-0:focus::placeholder{opacity:0}.\[\&\:has\(\>\.day-range-end\)\]\:rounded-r-md:has(>.day-range-end){border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\>\.day-range-start\)\]\:rounded-l-md:has(>.day-range-start){border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[aria-selected\]\)\]\:rounded-md:has([aria-selected]){border-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[aria-selected\]\)\]\:bg-accent:has([aria-selected]){background-color:var(--accent)}.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:first-child:has([aria-selected]){border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:last-child:has([aria-selected]),.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\&\:has\(\[role\=option\]\)\]\:block:has([role=option]){display:block}.\[\&\:hover_\>_\.lty-playbtn\]\:bg-\[red\]:hover>.lty-playbtn{background-color:red}.\[\&\:hover_\>_\.lty-playbtn\]\:opacity-100:hover>.lty-playbtn{opacity:1}.\[\.border-b\]\:pb-6.border-b{padding-bottom:calc(var(--spacing)*6)}.\[\.border-t\]\:pt-6.border-t{padding-top:calc(var(--spacing)*6)}:is(.\*\*\:\[\.hljs-addition\]\:bg-\[\#f0fff4\] *).hljs-addition{background-color:#f0fff4}:is(.\*\*\:\[\.hljs-addition\]\:text-\[\#22863a\] *).hljs-addition{color:#22863a}:is(.dark\:\*\*\:\[\.hljs-addition\]\:bg-\[\#3c5743\]:is(.dark *) *).hljs-addition{background-color:#3c5743}:is(.dark\:\*\*\:\[\.hljs-addition\]\:text-\[\#ceead5\]:is(.dark *) *).hljs-addition{color:#ceead5}:is(.\*\*\:\[\.hljs-attr\,\.hljs-attribute\,\.hljs-literal\,\.hljs-meta\,\.hljs-number\,\.hljs-operator\,\.hljs-selector-attr\,\.hljs-selector-class\,\.hljs-selector-id\,\.hljs-variable\]\:text-\[\#005cc5\] *):is(.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable){color:#005cc5}:is(.dark\:\*\*\:\[\.hljs-attr\,\.hljs-attribute\,\.hljs-literal\,\.hljs-meta\,\.hljs-number\,\.hljs-operator\,\.hljs-selector-attr\,\.hljs-selector-class\,\.hljs-selector-id\,\.hljs-variable\]\:text-\[\#6596cf\]:is(.dark *) *):is(.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable){color:#6596cf}:is(.\*\*\:\[\.hljs-built\\\\\\\\\\\\\\\\_in\,\.hljs-symbol\]\:text-\[\#e36209\] *):is(.hljs-built\\\\\\_in,.hljs-symbol){color:#e36209}:is(.dark\:\*\*\:\[\.hljs-built\\\\\\\\\\\\\\\\_in\,\.hljs-symbol\]\:text-\[\#c3854e\]:is(.dark *) *):is(.hljs-built\\\\\\_in,.hljs-symbol){color:#c3854e}:is(.\*\*\:\[\.hljs-built\\\\\\\\_in\,\.hljs-symbol\]\:text-\[\#e36209\] *):is(.hljs-built\\_in,.hljs-symbol){color:#e36209}:is(.dark\:\*\*\:\[\.hljs-built\\\\\\\\_in\,\.hljs-symbol\]\:text-\[\#c3854e\]:is(.dark *) *):is(.hljs-built\\_in,.hljs-symbol){color:#c3854e}:is(.\*\*\:\[\.hljs-bullet\]\:text-\[\#735c0f\] *).hljs-bullet{color:#735c0f}:is(.\*\*\:\[\.hljs-comment\,\.hljs-code\,\.hljs-formula\]\:text-\[\#6a737d\] *):is(.hljs-comment,.hljs-code,.hljs-formula),:is(.dark\:\*\*\:\[\.hljs-comment\,\.hljs-code\,\.hljs-formula\]\:text-\[\#6a737d\]:is(.dark *) *):is(.hljs-comment,.hljs-code,.hljs-formula){color:#6a737d}:is(.\*\*\:\[\.hljs-deletion\]\:bg-\[\#ffeef0\] *).hljs-deletion{background-color:#ffeef0}:is(.\*\*\:\[\.hljs-deletion\]\:text-\[\#b31d28\] *).hljs-deletion{color:#b31d28}:is(.dark\:\*\*\:\[\.hljs-deletion\]\:bg-\[\#473235\]:is(.dark *) *).hljs-deletion{background-color:#473235}:is(.dark\:\*\*\:\[\.hljs-deletion\]\:text-\[\#e7c7cb\]:is(.dark *) *).hljs-deletion{color:#e7c7cb}:is(.\*\*\:\[\.hljs-emphasis\]\:italic *).hljs-emphasis{font-style:italic}:is(.\*\*\:\[\.hljs-keyword\,\.hljs-doctag\,\.hljs-template-tag\,\.hljs-template-variable\,\.hljs-type\,\.hljs-variable\.language\\\\\\\\\\\\\\\\_\]\:text-\[\#d73a49\] *):is(.hljs-keyword,.hljs-doctag,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language\\\\\\_){color:#d73a49}:is(.dark\:\*\*\:\[\.hljs-keyword\,\.hljs-doctag\,\.hljs-template-tag\,\.hljs-template-variable\,\.hljs-type\,\.hljs-variable\.language\\\\\\\\\\\\\\\\_\]\:text-\[\#ee6960\]:is(.dark *) *):is(.hljs-keyword,.hljs-doctag,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language\\\\\\_){color:#ee6960}:is(.\*\*\:\[\.hljs-keyword\,\.hljs-doctag\,\.hljs-template-tag\,\.hljs-template-variable\,\.hljs-type\,\.hljs-variable\.language\\\\\\\\_\]\:text-\[\#d73a49\] *):is(.hljs-keyword,.hljs-doctag,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language\\_){color:#d73a49}:is(.dark\:\*\*\:\[\.hljs-keyword\,\.hljs-doctag\,\.hljs-template-tag\,\.hljs-template-variable\,\.hljs-type\,\.hljs-variable\.language\\\\\\\\_\]\:text-\[\#ee6960\]:is(.dark *) *):is(.hljs-keyword,.hljs-doctag,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language\\_){color:#ee6960}:is(.\*\*\:\[\.hljs-name\,\.hljs-quote\,\.hljs-selector-tag\,\.hljs-selector-pseudo\]\:text-\[\#22863a\] *):is(.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo){color:#22863a}:is(.dark\:\*\*\:\[\.hljs-name\,\.hljs-quote\,\.hljs-selector-tag\,\.hljs-selector-pseudo\]\:text-\[\#36a84f\]:is(.dark *) *):is(.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo){color:#36a84f}:is(.\*\*\:\[\.hljs-regexp\,\.hljs-string\,\.hljs-meta_\.hljs-string\]\:text-\[\#032f62\] *):is(.hljs-regexp,.hljs-string,.hljs-meta .hljs-string){color:#032f62}:is(.dark\:\*\*\:\[\.hljs-regexp\,\.hljs-string\,\.hljs-meta_\.hljs-string\]\:text-\[\#3593ff\]:is(.dark *) *):is(.hljs-regexp,.hljs-string,.hljs-meta .hljs-string){color:#3593ff}:is(.\*\*\:\[\.hljs-section\]\:font-bold *).hljs-section{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}:is(.\*\*\:\[\.hljs-section\]\:text-\[\#005cc5\] *).hljs-section{color:#005cc5}:is(.dark\:\*\*\:\[\.hljs-section\]\:text-\[\#61a5f2\]:is(.dark *) *).hljs-section{color:#61a5f2}:is(.\*\*\:\[\.hljs-strong\]\:font-bold *).hljs-strong{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}:is(.\*\*\:\[\.hljs-title\,\.hljs-title\.class\\\\\\\\\\\\\\\\_\,\.hljs-title\.class\\\\\\\\\\\\\\\\_\.inherited\\\\\\\\\\\\\\\\_\\\\\\\\\\\\\\\\_\,\.hljs-title\.function\\\\\\\\\\\\\\\\_\]\:text-\[\#6f42c1\] *):is(.hljs-title,.hljs-title.class\\\\\\_,.hljs-title.class\\\\\\_.inherited\\\\\\_\\\\\\_,.hljs-title.function\\\\\\_){color:#6f42c1}:is(.dark\:\*\*\:\[\.hljs-title\,\.hljs-title\.class\\\\\\\\\\\\\\\\_\,\.hljs-title\.class\\\\\\\\\\\\\\\\_\.inherited\\\\\\\\\\\\\\\\_\\\\\\\\\\\\\\\\_\,\.hljs-title\.function\\\\\\\\\\\\\\\\_\]\:text-\[\#a77bfa\]:is(.dark *) *):is(.hljs-title,.hljs-title.class\\\\\\_,.hljs-title.class\\\\\\_.inherited\\\\\\_\\\\\\_,.hljs-title.function\\\\\\_){color:#a77bfa}:is(.\*\*\:\[\.hljs-title\,\.hljs-title\.class\\\\\\\\_\,\.hljs-title\.class\\\\\\\\_\.inherited\\\\\\\\_\\\\\\\\_\,\.hljs-title\.function\\\\\\\\_\]\:text-\[\#6f42c1\] *):is(.hljs-title,.hljs-title.class\\_,.hljs-title.class\\_.inherited\\_\\_,.hljs-title.function\\_){color:#6f42c1}:is(.dark\:\*\*\:\[\.hljs-title\,\.hljs-title\.class\\\\\\\\_\,\.hljs-title\.class\\\\\\\\_\.inherited\\\\\\\\_\\\\\\\\_\,\.hljs-title\.function\\\\\\\\_\]\:text-\[\#a77bfa\]:is(.dark *) *):is(.hljs-title,.hljs-title.class\\_,.hljs-title.class\\_.inherited\\_\\_,.hljs-title.function\\_){color:#a77bfa}@media (hover:hover){:is(.\*\*\:\[\[data-slot\=\"mdx-link\"\]\]\:hover\:after\:bottom-0 *)[data-slot=mdx-link]:hover:after{content:var(--tw-content);bottom:calc(var(--spacing)*0)}}:is(.\*\:\[code\]\:bg-inherit>*):is(code){background-color:inherit}:is(.\*\:\[h3\,h4\]\:mt-8>*):is(h3,h4){margin-top:calc(var(--spacing)*8)}:is(.\*\:\[h3\,h4\]\:mb-4>*):is(h3,h4){margin-bottom:calc(var(--spacing)*4)}:is(.\*\:\[h3\,h4\]\:text-base>*):is(h3,h4){font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}:is(.\*\:\[h3\,h4\]\:font-semibold>*):is(h3,h4){--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}:is(.\*\:\[h3\,h4\]\:\[counter-increment\:step\]>*):is(h3,h4){counter-increment:step}:is(.\*\:\[h3\,h4\]\:before\:absolute>*):is(h3,h4):before{content:var(--tw-content);position:absolute}:is(.\*\:\[h3\,h4\]\:before\:mt-\[-4px\]>*):is(h3,h4):before{content:var(--tw-content);margin-top:-4px}:is(.\*\:\[h3\,h4\]\:before\:ml-\[-50px\]>*):is(h3,h4):before{content:var(--tw-content);margin-left:-50px}:is(.\*\:\[h3\,h4\]\:before\:inline-flex>*):is(h3,h4):before{content:var(--tw-content);display:inline-flex}:is(.\*\:\[h3\,h4\]\:before\:h-9>*):is(h3,h4):before{content:var(--tw-content);height:calc(var(--spacing)*9)}:is(.\*\:\[h3\,h4\]\:before\:w-9>*):is(h3,h4):before{content:var(--tw-content);width:calc(var(--spacing)*9)}:is(.\*\:\[h3\,h4\]\:before\:items-center>*):is(h3,h4):before{content:var(--tw-content);align-items:center}:is(.\*\:\[h3\,h4\]\:before\:justify-center>*):is(h3,h4):before{content:var(--tw-content);justify-content:center}:is(.\*\:\[h3\,h4\]\:before\:rounded-full>*):is(h3,h4):before{content:var(--tw-content);border-radius:3.40282e38px}:is(.\*\:\[h3\,h4\]\:before\:border-4>*):is(h3,h4):before{content:var(--tw-content);border-style:var(--tw-border-style);border-width:4px}:is(.\*\:\[h3\,h4\]\:before\:border-background>*):is(h3,h4):before{content:var(--tw-content);border-color:var(--background)}:is(.\*\:\[h3\,h4\]\:before\:bg-muted>*):is(h3,h4):before{content:var(--tw-content);background-color:var(--muted)}:is(.\*\:\[h3\,h4\]\:before\:text-center>*):is(h3,h4):before{content:var(--tw-content);text-align:center}:is(.\*\:\[h3\,h4\]\:before\:-indent-px>*):is(h3,h4):before{content:var(--tw-content);text-indent:-1px}:is(.\*\:\[h3\,h4\]\:before\:font-mono>*):is(h3,h4):before{content:var(--tw-content);font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}:is(.\*\:\[h3\,h4\]\:before\:text-base>*):is(h3,h4):before{content:var(--tw-content);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}:is(.\*\:\[h3\,h4\]\:before\:font-medium>*):is(h3,h4):before{content:var(--tw-content);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}:is(.\*\:\[h3\,h4\]\:before\:\[content\:counter\(step\)\]>*):is(h3,h4):before{content:var(--tw-content);content:counter(step)}:is(.\*\*\:\[p\]\:m-0 *):is(p){margin:calc(var(--spacing)*0)}:is(.\*\*\:\[p\,ul\,ol\,li\]\:first\:my-0 *):is(p,ul,ol,li):first-child{margin-block:calc(var(--spacing)*0)}:is(.\*\:first\:\[span\]\:hidden>*):first-child:is(span){display:none}:is(.\*\:\[span\]\:last\:flex>*):is(span):last-child{display:flex}:is(.\*\:\[span\]\:last\:items-center>*):is(span):last-child{align-items:center}:is(.\*\:\[span\]\:last\:gap-2>*):is(span):last-child{gap:calc(var(--spacing)*2)}:is(.\*\:\[svg\]\:text-muted-foreground>*):is(svg){color:var(--muted-foreground)}:is(.\*\:\[svg\]\:text-neutral-50>*):is(svg){color:var(--color-neutral-50)}:is(.data-\[variant\=destructive\]\:\*\:\[svg\]\:\!text-destructive[data-variant=destructive]>*):is(svg){color:var(--destructive)!important}:is(.dark\:\*\:\[svg\]\:text-neutral-900:is(.dark *)>*):is(svg){color:var(--color-neutral-900)}:is(.\*\:\[ul\]\:my-0>*):is(ul){margin-block:calc(var(--spacing)*0)}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y:2px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3>svg{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:translate-y-0\.5>svg{--tw-translate-y:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\]\:text-current>svg{color:currentColor}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:var(--sidebar-accent-foreground)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\[align\=center\]\]\:text-center[align=center]{text-align:center}.\[\&\[align\=right\]\]\:text-right[align=right]{text-align:right}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div,.\[\&\[data-state\=open\]\>button\>svg\:first-child\]\:rotate-90[data-state=open]>button>svg:first-child{rotate:90deg}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}@media (min-width:1800px){.\[\@media\(width\>\=1800px\)\]\:max-w-\(--breakpoint-2xl\){max-width:var(--breakpoint-2xl)}.\[\@media\(width\>\=1800px\)\]\:border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}@media (hover:hover){a.\[a\&\]\:hover\:bg-accent:hover{background-color:var(--accent)}a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:color-mix(in oklab,var(--secondary)90%,transparent)}}a.\[a\&\]\:hover\:text-accent-foreground:hover{color:var(--accent-foreground)}}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}.prose{max-width:65ch;color:var(--foreground)}.prose h1:not(.not-prose h1){scroll-margin:calc(var(--spacing)*20);font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height));--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}@media (min-width:64rem){.prose h1:not(.not-prose h1){font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}}.prose h2:not(.not-prose h2){margin-top:calc(var(--spacing)*12);scroll-margin:calc(var(--spacing)*20);border-bottom-style:var(--tw-border-style);padding-bottom:calc(var(--spacing)*2);font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);border-bottom-width:1px}.prose h2:not(.not-prose h2):first-child{margin-top:calc(var(--spacing)*0)}.prose h3:not(.not-prose h3){margin-top:calc(var(--spacing)*12);scroll-margin:calc(var(--spacing)*20);font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.prose h3:not(.not-prose h3):first-child{margin-top:calc(var(--spacing)*0)}.prose h4:not(.not-prose h4){margin-top:calc(var(--spacing)*12);scroll-margin:calc(var(--spacing)*20);font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.prose h4:not(.not-prose h4):first-child{margin-top:calc(var(--spacing)*0)}.prose h5:not(.not-prose h5){margin-top:calc(var(--spacing)*12);scroll-margin:calc(var(--spacing)*20);font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.prose h5:not(.not-prose h5):first-child{margin-top:calc(var(--spacing)*0)}.prose h6:not(.not-prose h6){margin-top:calc(var(--spacing)*12);scroll-margin:calc(var(--spacing)*20);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.prose h6:not(.not-prose h6):first-child,:is(.prose h1:not(.not-prose h1),.prose h2:not(.not-prose h2),.prose h3:not(.not-prose h3),.prose h4:not(.not-prose h4),.prose h5:not(.not-prose h5),.prose h6:not(.not-prose h6))+p{margin-top:calc(var(--spacing)*0)}.prose p:not(.not-prose p){--tw-leading:calc(var(--spacing)*7);line-height:calc(var(--spacing)*7)}.prose p:not(.not-prose p):not(:first-child){margin-top:calc(var(--spacing)*6)}.prose a:not(.not-prose a){--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--primary);text-underline-offset:4px;text-decoration-line:underline}.prose blockquote:not(.not-prose blockquote){margin-top:calc(var(--spacing)*6);border-left-style:var(--tw-border-style);padding-left:calc(var(--spacing)*6);border-left-width:2px;font-style:italic}.prose table:not(.not-prose table){margin-block:calc(var(--spacing)*6);width:100%;overflow-y:auto}.prose table:not(.not-prose table) thead tr{margin:calc(var(--spacing)*0);border-top-style:var(--tw-border-style);padding:calc(var(--spacing)*0);border-top-width:1px}.prose table:not(.not-prose table) thead tr:nth-child(2n){background-color:var(--muted)}.prose table:not(.not-prose table) th{border-style:var(--tw-border-style);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*2);text-align:left;--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);border-width:1px}.prose table:not(.not-prose table) th[align=center]{text-align:center}.prose table:not(.not-prose table) th[align=right]{text-align:right}.prose table:not(.not-prose table) tbody tr{margin:calc(var(--spacing)*0);border-top-style:var(--tw-border-style);padding:calc(var(--spacing)*0);border-top-width:1px}.prose table:not(.not-prose table) tbody tr:nth-child(2n){background-color:var(--muted)}.prose table:not(.not-prose table) td{border-style:var(--tw-border-style);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*2);text-align:left;border-width:1px}.prose table:not(.not-prose table) td[align=center]{text-align:center}.prose table:not(.not-prose table) td[align=right]{text-align:right}.prose ul:not(.not-prose ul){margin-block:calc(var(--spacing)*6);margin-left:calc(var(--spacing)*6);list-style-type:disc}.prose ul:not(.not-prose ul)>li{margin-top:calc(var(--spacing)*2)}.prose ul:not(.not-prose ul) p{margin-block:calc(var(--spacing)*0);display:inline}.prose ol:not(.not-prose ol){margin-block:calc(var(--spacing)*6);margin-left:calc(var(--spacing)*6);list-style-type:decimal}.prose ol:not(.not-prose ol)>li{margin-top:calc(var(--spacing)*2)}.prose ol:not(.not-prose ol) p{margin-block:calc(var(--spacing)*0);display:inline}.prose pre:not(.not-prose pre){margin-block:calc(var(--spacing)*6);border-radius:calc(var(--radius) - 2px);background-color:var(--muted);padding:calc(var(--spacing)*4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));overflow-y:auto}.prose code:not(pre code):not(.not-prose code){background-color:var(--muted);font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);border-radius:.25rem;padding-block:.2rem;padding-inline:.3rem;position:relative}.prose .lead:not(.not-prose .lead){font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));color:var(--muted-foreground)}.prose .large:not(.not-prose .large){font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.prose .small:not(.not-prose .small){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:1;--tw-font-weight:var(--font-weight-medium);line-height:1;font-weight:var(--font-weight-medium)}.prose .muted:not(.not-prose .muted){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--muted-foreground)}.prose img:not(.not-prose img),.prose picture:not(.not-prose picture),.prose video:not(.not-prose video){margin-block:calc(var(--spacing)*6)}.prose picture>img:not(.not-prose picture>img){margin-block:calc(var(--spacing)*0)}.prose kbd:not(.not-prose kbd){border-radius:calc(var(--radius) - 2px);background-color:var(--muted);padding-inline:calc(var(--spacing)*1.5);padding-block:calc(var(--spacing)*.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.prose hr{margin-block:calc(var(--spacing)*10)}.prose dl:not(.not-prose dl){margin-block:calc(var(--spacing)*6)}.prose dl:not(.not-prose dl) dt{margin-top:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.prose dl:not(.not-prose dl) dt:first-child{margin-top:calc(var(--spacing)*0)}.prose details:not(.not-prose details){margin-top:calc(var(--spacing)*6)}.prose details:not(.not-prose details) summary{margin-top:calc(var(--spacing)*6);cursor:pointer;--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.prose details:not(.not-prose details) p:first-of-type{margin-top:calc(var(--spacing)*2)}.prose mark:not(.not-prose mark){background-color:var(--color-yellow-300)}.prose small:not(.not-prose small){font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-leading:1;line-height:1}.theme-default .theme-container{--chart-1:var(--color-blue-300);--chart-2:var(--color-blue-500);--chart-3:var(--color-blue-600);--chart-4:var(--color-blue-700);--chart-5:var(--color-blue-800)}.theme-blue .theme-container{--primary:var(--color-blue-600);--primary-foreground:var(--color-blue-50);--ring:var(--color-blue-400);--sidebar-primary:var(--color-blue-600);--sidebar-primary-foreground:var(--color-blue-50);--sidebar-ring:var(--color-blue-400);--chart-1:var(--color-blue-300);--chart-2:var(--color-blue-500);--chart-3:var(--color-blue-600);--chart-4:var(--color-blue-700);--chart-5:var(--color-blue-800)}.theme-blue .theme-container:is(.dark *){--primary:var(--color-blue-500);--primary-foreground:var(--color-blue-50);--ring:var(--color-blue-900);--sidebar-primary:var(--color-blue-500);--sidebar-primary-foreground:var(--color-blue-50);--sidebar-ring:var(--color-blue-900)}.theme-green .theme-container{--primary:var(--color-lime-600);--primary-foreground:var(--color-lime-50);--ring:var(--color-lime-400);--chart-1:var(--color-green-300);--chart-2:var(--color-green-500);--chart-3:var(--color-green-600);--chart-4:var(--color-green-700);--chart-5:var(--color-green-800);--sidebar-primary:var(--color-lime-600);--sidebar-primary-foreground:var(--color-lime-50);--sidebar-ring:var(--color-lime-400)}.theme-green .theme-container:is(.dark *){--primary:var(--color-lime-600);--primary-foreground:var(--color-lime-50);--ring:var(--color-lime-900);--sidebar-primary:var(--color-lime-500);--sidebar-primary-foreground:var(--color-lime-50);--sidebar-ring:var(--color-lime-900)}.theme-amber .theme-container{--primary:var(--color-amber-600);--primary-foreground:var(--color-amber-50);--ring:var(--color-amber-400);--chart-1:var(--color-amber-300);--chart-2:var(--color-amber-500);--chart-3:var(--color-amber-600);--chart-4:var(--color-amber-700);--chart-5:var(--color-amber-800);--sidebar-primary:var(--color-amber-600);--sidebar-primary-foreground:var(--color-amber-50);--sidebar-ring:var(--color-amber-400)}.theme-amber .theme-container:is(.dark *){--primary:var(--color-amber-500);--primary-foreground:var(--color-amber-50);--ring:var(--color-amber-900);--sidebar-primary:var(--color-amber-500);--sidebar-primary-foreground:var(--color-amber-50);--sidebar-ring:var(--color-amber-900)}.theme-rose .theme-container{--primary:var(--color-rose-600);--primary-foreground:var(--color-rose-50);--ring:var(--color-rose-400);--chart-1:var(--color-rose-300);--chart-2:var(--color-rose-500);--chart-3:var(--color-rose-600);--chart-4:var(--color-rose-700);--chart-5:var(--color-rose-800);--sidebar-primary:var(--color-rose-600);--sidebar-primary-foreground:var(--color-rose-50);--sidebar-ring:var(--color-rose-400)}.theme-rose .theme-container:is(.dark *){--primary:var(--color-rose-500);--primary-foreground:var(--color-rose-50);--ring:var(--color-rose-900);--sidebar-primary:var(--color-rose-500);--sidebar-primary-foreground:var(--color-rose-50);--sidebar-ring:var(--color-rose-900)}.theme-purple .theme-container{--primary:var(--color-purple-600);--primary-foreground:var(--color-purple-50);--ring:var(--color-purple-400);--chart-1:var(--color-purple-300);--chart-2:var(--color-purple-500);--chart-3:var(--color-purple-600);--chart-4:var(--color-purple-700);--chart-5:var(--color-purple-800);--sidebar-primary:var(--color-purple-600);--sidebar-primary-foreground:var(--color-purple-50);--sidebar-ring:var(--color-purple-400)}.theme-purple .theme-container:is(.dark *){--primary:var(--color-purple-500);--primary-foreground:var(--color-purple-50);--ring:var(--color-purple-900);--sidebar-primary:var(--color-purple-500);--sidebar-primary-foreground:var(--color-purple-50);--sidebar-ring:var(--color-purple-900)}.theme-orange .theme-container{--primary:var(--color-orange-600);--primary-foreground:var(--color-orange-50);--ring:var(--color-orange-400);--chart-1:var(--color-orange-300);--chart-2:var(--color-orange-500);--chart-3:var(--color-orange-600);--chart-4:var(--color-orange-700);--chart-5:var(--color-orange-800);--sidebar-primary:var(--color-orange-600);--sidebar-primary-foreground:var(--color-orange-50);--sidebar-ring:var(--color-orange-400)}.theme-orange .theme-container:is(.dark *){--primary:var(--color-orange-500);--primary-foreground:var(--color-orange-50);--ring:var(--color-orange-900);--sidebar-primary:var(--color-orange-500);--sidebar-primary-foreground:var(--color-orange-50);--sidebar-ring:var(--color-orange-900)}.theme-teal .theme-container{--primary:var(--color-teal-600);--primary-foreground:var(--color-teal-50);--chart-1:var(--color-teal-300);--chart-2:var(--color-teal-500);--chart-3:var(--color-teal-600);--chart-4:var(--color-teal-700);--chart-5:var(--color-teal-800);--sidebar-primary:var(--color-teal-600);--sidebar-primary-foreground:var(--color-teal-50);--sidebar-ring:var(--color-teal-400)}.theme-teal .theme-container:is(.dark *){--primary:var(--color-teal-500);--primary-foreground:var(--color-teal-50);--sidebar-primary:var(--color-teal-500);--sidebar-primary-foreground:var(--color-teal-50);--sidebar-ring:var(--color-teal-900)}.theme-mono .theme-container{--font-sans:var(--font-mono);--primary:var(--color-stone-600);--primary-foreground:var(--color-stone-50);--chart-1:var(--color-stone-300);--chart-2:var(--color-stone-500);--chart-3:var(--color-stone-600);--chart-4:var(--color-stone-700);--chart-5:var(--color-stone-800);--sidebar-primary:var(--color-stone-600);--sidebar-primary-foreground:var(--color-stone-50);--sidebar-ring:var(--color-stone-400)}.theme-mono .theme-container:is(.dark *){--primary:var(--color-stone-500);--primary-foreground:var(--color-stone-50);--sidebar-primary:var(--color-stone-500);--sidebar-primary-foreground:var(--color-stone-50);--sidebar-ring:var(--color-stone-900)}@media (min-width:1024px){.theme-mono .theme-container{--font-sans:var(--font-mono);--radius:.45em;--text-lg:1rem;--text-xl:1.1rem;--text-2xl:1.2rem;--text-3xl:1.3rem;--text-4xl:1.4rem;--text-5xl:1.5rem;--text-6xl:1.6rem;--text-7xl:1.7rem;--text-8xl:1.8rem;--text-base:.85rem;--text-sm:.8rem;--spacing:.222222rem}}.theme-mono .theme-container .rounded-xs,.theme-mono .theme-container .rounded-sm,.theme-mono .theme-container .rounded-md,.theme-mono .theme-container .rounded-lg,.theme-mono .theme-container .rounded-xl{border-radius:0}.theme-mono .theme-container .shadow-xs,.theme-mono .theme-container .shadow-sm,.theme-mono .theme-container .shadow-md,.theme-mono .theme-container .shadow-lg,.theme-mono .theme-container .shadow-xl{box-shadow:none}.theme-mono .theme-container [data-slot=toggle-group],.theme-mono .theme-container [data-slot=toggle-group-item]{--tw-shadow:0 0 #0000!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important;border-radius:0!important}.theme-scaled .theme-container{--chart-1:var(--color-blue-300);--chart-2:var(--color-blue-500);--chart-3:var(--color-blue-600);--chart-4:var(--color-blue-700);--chart-5:var(--color-blue-800)}@media (min-width:1024px){.theme-scaled .theme-container{--radius:.45em;--text-lg:1rem;--text-xl:1.1rem;--text-2xl:1.2rem;--text-3xl:1.3rem;--text-4xl:1.4rem;--text-5xl:1.5rem;--text-6xl:1.6rem;--text-7xl:1.7rem;--text-8xl:1.8rem;--text-base:.85rem;--text-sm:.8rem;--spacing:.2rem}}.theme-scaled .theme-container [data-slot=select-trigger],.theme-scaled .theme-container [data-slot=toggle-group-item]{--spacing:.2rem}.theme-scaled .theme-container [data-slot=card]{border-radius:var(--radius);padding-block:calc(var(--spacing)*4);gap:calc(var(--spacing)*2)}.theme-scaled .theme-container [data-slot=card].pb-0{padding-bottom:0}.theme-red .theme-container{--primary:var(--color-red-600);--primary-foreground:var(--color-red-50);--ring:var(--color-red-400);--chart-1:var(--color-red-300);--chart-2:var(--color-red-500);--chart-3:var(--color-red-600);--chart-4:var(--color-red-700);--chart-5:var(--color-red-800);--sidebar-primary:var(--color-red-600);--sidebar-primary-foreground:var(--color-red-50);--sidebar-ring:var(--color-red-400)}.theme-red .theme-container:is(.dark *){--primary:var(--color-red-500);--primary-foreground:var(--color-red-50);--ring:var(--color-red-900);--sidebar-primary:var(--color-red-500);--sidebar-primary-foreground:var(--color-red-50);--sidebar-ring:var(--color-red-900)}.theme-yellow .theme-container{--primary:var(--color-yellow-400);--primary-foreground:var(--color-yellow-900);--ring:var(--color-yellow-400);--chart-1:var(--color-yellow-300);--chart-2:var(--color-yellow-500);--chart-3:var(--color-yellow-600);--chart-4:var(--color-yellow-700);--chart-5:var(--color-yellow-800);--sidebar-primary:var(--color-yellow-600);--sidebar-primary-foreground:var(--color-yellow-50);--sidebar-ring:var(--color-yellow-400)}.theme-yellow .theme-container:is(.dark *){--primary:var(--color-yellow-500);--primary-foreground:var(--color-yellow-900);--ring:var(--color-yellow-900);--sidebar-primary:var(--color-yellow-500);--sidebar-primary-foreground:var(--color-yellow-50);--sidebar-ring:var(--color-yellow-900)}.theme-violet .theme-container{--primary:var(--color-violet-600);--primary-foreground:var(--color-violet-50);--ring:var(--color-violet-400);--chart-1:var(--color-violet-300);--chart-2:var(--color-violet-500);--chart-3:var(--color-violet-600);--chart-4:var(--color-violet-700);--chart-5:var(--color-violet-800);--sidebar-primary:var(--color-violet-600);--sidebar-primary-foreground:var(--color-violet-50);--sidebar-ring:var(--color-violet-400)}.theme-violet .theme-container:is(.dark *){--primary:var(--color-violet-500);--primary-foreground:var(--color-violet-50);--ring:var(--color-violet-900);--sidebar-primary:var(--color-violet-500);--sidebar-primary-foreground:var(--color-violet-50);--sidebar-ring:var(--color-violet-900)}:root{--radius:.625rem;--background:oklch(100% 0 0);--foreground:oklch(14.5% 0 0);--card:oklch(100% 0 0);--card-foreground:oklch(14.5% 0 0);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.5% 0 0);--primary:oklch(20.5% 0 0);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(97% 0 0);--secondary-foreground:oklch(20.5% 0 0);--muted:oklch(97% 0 0);--muted-foreground:oklch(55.6% 0 0);--accent:oklch(97% 0 0);--accent-foreground:oklch(20.5% 0 0);--destructive:oklch(57.7% .245 27.325);--border:oklch(92.2% 0 0);--input:oklch(92.2% 0 0);--ring:oklch(70.8% 0 0);--chart-1:var(--color-blue-300);--chart-2:var(--color-blue-500);--chart-3:var(--color-blue-600);--chart-4:var(--color-blue-700);--chart-5:var(--color-blue-800);--sidebar:oklch(98.5% 0 0);--sidebar-foreground:oklch(14.5% 0 0);--sidebar-primary:oklch(20.5% 0 0);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(97% 0 0);--sidebar-accent-foreground:oklch(20.5% 0 0);--sidebar-border:oklch(92.2% 0 0);--sidebar-ring:oklch(70.8% 0 0);--surface:oklch(98% 0 0);--surface-foreground:var(--foreground);--code:var(--surface);--code-foreground:var(--surface-foreground);--code-highlight:oklch(96% 0 0);--code-number:oklch(56% 0 0);--selection:oklch(14.5% 0 0);--selection-foreground:oklch(100% 0 0);--color-blue-300:oklch(77.8% .108 231.731);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.9% .234 260.011);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(41.9% .243 267.218);--brand:oklch(62.3% .214 259.815);--highlight:oklch(85.2% .199 91.936)}.dark{--background:oklch(14.5% 0 0);--foreground:oklch(98.5% 0 0);--card:oklch(20.5% 0 0);--card-foreground:oklch(98.5% 0 0);--popover:oklch(26.9% 0 0);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(92.2% 0 0);--primary-foreground:oklch(20.5% 0 0);--secondary:oklch(26.9% 0 0);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(26.9% 0 0);--muted-foreground:oklch(70.8% 0 0);--accent:oklch(37.1% 0 0);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.6% 0 0);--chart-1:var(--color-blue-300);--chart-2:var(--color-blue-500);--chart-3:var(--color-blue-600);--chart-4:var(--color-blue-700);--chart-5:var(--color-blue-800);--sidebar:oklch(20.5% 0 0);--sidebar-foreground:oklch(98.5% 0 0);--sidebar-primary:oklch(48.8% .243 264.376);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(26.9% 0 0);--sidebar-accent-foreground:oklch(98.5% 0 0);--sidebar-border:oklch(100% 0 0/.1);--sidebar-ring:oklch(43.9% 0 0);--surface:oklch(20% 0 0);--surface-foreground:oklch(70.8% 0 0);--code:var(--surface);--code-foreground:var(--surface-foreground);--code-highlight:oklch(27% 0 0);--code-number:oklch(72% 0 0);--selection:oklch(92.2% 0 0);--selection-foreground:oklch(20.5% 0 0);--brand:oklch(70.7% .165 254.624);--highlight:oklch(85.2% .199 91.936)}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-font-weight{syntax:"*";inherits:false}@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-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-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}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0))}}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,auto))))}}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,auto))))}to{height:0}} \ 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-content:"";--tw-font-weight:initial;--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-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-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--font-sans:"var(--font-sans)","ui-sans-serif","-apple-system","BlinkMacSystemFont","Segoe UI Variable Display","Segoe UI","Helvetica","Apple Color Emoji","Arial","sans-serif","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-red-950:oklch(25.8% .092 26.042);--color-orange-50:oklch(98% .016 73.684);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-700:oklch(55.3% .195 38.402);--color-orange-800:oklch(47% .157 37.304);--color-orange-900:oklch(40.8% .123 38.172);--color-orange-950:oklch(26.6% .079 36.259);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-lime-50:oklch(98.6% .031 120.757);--color-lime-400:oklch(84.1% .238 128.85);--color-lime-500:oklch(76.8% .233 130.85);--color-lime-600:oklch(64.8% .2 131.684);--color-lime-900:oklch(40.5% .101 131.063);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-950:oklch(26.6% .065 152.934);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-700:oklch(50.8% .118 165.612);--color-teal-50:oklch(98.4% .014 180.72);--color-teal-300:oklch(85.5% .138 181.071);--color-teal-400:oklch(77.7% .152 181.912);--color-teal-500:oklch(70.4% .14 182.503);--color-teal-600:oklch(60% .118 184.704);--color-teal-700:oklch(51.1% .096 186.391);--color-teal-800:oklch(43.7% .078 188.216);--color-teal-900:oklch(38.6% .063 188.416);--color-cyan-50:oklch(98.4% .019 200.873);--color-cyan-300:oklch(86.5% .127 207.078);--color-cyan-700:oklch(52% .105 223.128);--color-cyan-950:oklch(30.2% .056 229.695);--color-blue-50:oklch(97% .014 254.604);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-violet-50:oklch(96.9% .016 293.756);--color-violet-300:oklch(81.1% .111 293.571);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-500:oklch(60.6% .25 292.717);--color-violet-600:oklch(54.1% .281 293.009);--color-violet-700:oklch(49.1% .27 292.581);--color-violet-800:oklch(43.2% .232 292.759);--color-violet-900:oklch(38% .189 293.745);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-300:oklch(82.7% .119 306.383);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-purple-800:oklch(43.8% .218 303.724);--color-purple-900:oklch(38.1% .176 304.987);--color-purple-950:oklch(29.1% .149 302.717);--color-pink-50:oklch(97.1% .014 343.198);--color-pink-300:oklch(82.3% .12 346.018);--color-pink-700:oklch(52.5% .223 3.958);--color-pink-950:oklch(28.4% .109 3.907);--color-rose-50:oklch(96.9% .015 12.422);--color-rose-300:oklch(81% .117 11.638);--color-rose-400:oklch(71.2% .194 13.428);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-600:oklch(58.6% .253 17.585);--color-rose-700:oklch(51.4% .222 16.935);--color-rose-800:oklch(45.5% .188 13.697);--color-rose-900:oklch(41% .159 10.272);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-zinc-50:oklch(98.5% 0 0);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-200:oklch(92% .004 286.32);--color-zinc-400:oklch(70.5% .015 286.067);--color-zinc-700:oklch(37% .013 285.805);--color-zinc-800:oklch(27.4% .006 286.033);--color-zinc-900:oklch(21% .006 285.885);--color-zinc-950:oklch(14.1% .005 285.823);--color-neutral-50:oklch(98.5% 0 0);--color-neutral-300:oklch(87% 0 0);--color-neutral-400:oklch(70.8% 0 0);--color-neutral-500:oklch(55.6% 0 0);--color-neutral-600:oklch(43.9% 0 0);--color-neutral-800:oklch(26.9% 0 0);--color-neutral-900:oklch(20.5% 0 0);--color-stone-50:oklch(98.5% .001 106.423);--color-stone-300:oklch(86.9% .005 56.366);--color-stone-400:oklch(70.9% .01 56.259);--color-stone-500:oklch(55.3% .013 58.071);--color-stone-600:oklch(44.4% .011 73.639);--color-stone-700:oklch(37.4% .01 67.558);--color-stone-800:oklch(26.8% .007 34.298);--color-stone-900:oklch(21.6% .006 56.043);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-xl:80rem;--breakpoint-2xl:96rem;--container-sm:24rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: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);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-tighter:-.05em;--tracking-tight:-.025em;--tracking-widest:.1em;--leading-tight:1.25;--leading-normal:1.5;--leading-relaxed:1.625;--leading-loose:2;--radius-xs:.125rem;--radius-sm:calc(var(--radius) - 4px);--radius-lg:var(--radius);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-xs:4px;--blur-sm:8px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:"var(--font-sans)","ui-sans-serif","-apple-system","BlinkMacSystemFont","Segoe UI Variable Display","Segoe UI","Helvetica","Apple Color Emoji","Arial","sans-serif","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--default-mono-font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-code:var(--surface);--color-code-foreground:var(--surface-foreground);--color-code-highlight:var(--code-highlight);--color-code-number:var(--code-number);--font-heading:"var(--font-heading)","ui-sans-serif","-apple-system","BlinkMacSystemFont","Segoe UI Variable Display","Segoe UI","Helvetica","Apple Color Emoji","Arial","sans-serif","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}}@layer base{@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)}}}*,: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}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){*{outline-color:color-mix(in oklab,var(--ring)50%,transparent)}}body{overscroll-behavior:none;background-color:var(--background);color:var(--foreground);font-synthesis-weight:none;text-rendering:optimizeLegibility}@supports (font:-apple-system-body) and (appearance:none){@media (min-width:1800px){[data-wrapper]{border-top-style:var(--tw-border-style);border-top-width:1px}}}a:active,button:active{opacity:.6}@media (min-width:48rem){a:active,button:active{opacity:1}}::-webkit-scrollbar{width:5px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:hsl(var(--border));border-radius:5px}*{scrollbar-width:thin;scrollbar-color:hsl(var(--border))transparent}.prose{--tw-prose-body:var(--foreground);--tw-prose-bold:inherit;--tw-prose-links:inherit;--tw-prose-bullets:var(--foreground)}[data-theme=light]{display:block}[data-theme=dark],.dark [data-theme=light]{display:none}.dark [data-theme=dark]{display:block}[data-rehype-pretty-code-fragment]{color:var(--color-white);position:relative}[data-rehype-pretty-code-fragment] code{border-style:var(--tw-border-style);min-width:100%;padding:calc(var(--spacing)*0);overflow-wrap:break-word;counter-reset:line;-webkit-box-decoration-break:clone;box-decoration-break:clone;background-color:#0000;border-width:0;border-radius:0;display:grid}[data-rehype-pretty-code-fragment] .line{width:100%;min-height:1rem;padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*.5);display:inline-block}[data-rehype-pretty-code-fragment] [data-line-numbers] .line{padding-inline:calc(var(--spacing)*2)}[data-rehype-pretty-code-fragment] [data-line-numbers]>.line:before{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:#fafafa66}@supports (color:color-mix(in lab, red, red)){[data-rehype-pretty-code-fragment] [data-line-numbers]>.line:before{color:color-mix(in oklab,var(--color-zinc-50)40%,transparent)}}[data-rehype-pretty-code-fragment] [data-line-numbers]>.line:before{counter-increment:line;content:counter(line);text-align:right;width:1.8rem;margin-right:1.4rem;display:inline-block}[data-rehype-pretty-code-fragment] .line--highlighted{background-color:#3f3f4680}@supports (color:color-mix(in lab, red, red)){[data-rehype-pretty-code-fragment] .line--highlighted{background-color:color-mix(in oklab,var(--color-zinc-700)50%,transparent)}}[data-rehype-pretty-code-fragment] .line-highlighted span{position:relative}[data-rehype-pretty-code-fragment] .word--highlighted{border-radius:calc(var(--radius) - 2px);border-color:#3f3f46b3}@supports (color:color-mix(in lab, red, red)){[data-rehype-pretty-code-fragment] .word--highlighted{border-color:color-mix(in oklab,var(--color-zinc-700)70%,transparent)}}[data-rehype-pretty-code-fragment] .word--highlighted{background-color:#3f3f4680}@supports (color:color-mix(in lab, red, red)){[data-rehype-pretty-code-fragment] .word--highlighted{background-color:color-mix(in oklab,var(--color-zinc-700)50%,transparent)}}[data-rehype-pretty-code-fragment] .word--highlighted{padding:calc(var(--spacing)*1)}.dark [data-rehype-pretty-code-fragment] .word--highlighted{background-color:var(--color-zinc-900)}[data-rehype-pretty-code-title]{margin-top:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*4);padding-top:calc(var(--spacing)*6);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground)}[data-rehype-pretty-code-title]+pre{margin-top:calc(var(--spacing)*2)!important}}@layer components{.steps:first-child,.steps:first-child>h3:first-child{margin-top:calc(var(--spacing)*0)!important}.steps>h3{margin-top:calc(var(--spacing)*16)!important}.steps>h3+p{margin-top:calc(var(--spacing)*2)!important}[data-rehype-pretty-code-figure]{background-color:var(--color-code);color:var(--color-code-foreground);border-radius:var(--radius-lg);border-width:0;border-color:var(--border);margin-top:calc(var(--spacing)*6);font-size:var(--text-sm);outline:none;position:relative;overflow:hidden}@media (min-width:48rem){[data-rehype-pretty-code-figure]{margin-inline:calc(var(--spacing)*-4)}}[data-rehype-pretty-code-figure]:has([data-rehype-pretty-code-title]) [data-slot=copy-button]{top:calc(var(--spacing)*1.5)!important}[data-rehype-pretty-code-title]{border-bottom:var(--border)}@supports (color:color-mix(in lab, red, red)){[data-rehype-pretty-code-title]{border-bottom:color-mix(in oklab,var(--border)30%,transparent)}}[data-rehype-pretty-code-title]{padding-block:calc(var(--spacing)*2.5);padding-inline:calc(var(--spacing)*4);font-size:var(--text-sm);font-family:var(--font-mono);color:var(--color-code-foreground);border-bottom-style:solid;border-bottom-width:1px}[data-line-numbers]{white-space:pre;counter-reset:line;-webkit-box-decoration-break:clone;box-decoration-break:clone;background:0 0;border:0;min-width:100%;padding:0;display:grid}[data-line-numbers] [data-line]:before{font-size:var(--text-sm);counter-increment:line;content:counter(line);width:calc(var(--spacing)*16);padding-right:calc(var(--spacing)*6);text-align:right;color:var(--color-code-number);background-color:var(--color-code);display:inline-block;position:sticky;left:0}[data-line-numbers] [data-highlighted-line][data-line]:before{background-color:var(--color-code-highlight)}[data-line]{padding-top:calc(var(--spacing)*.5);padding-bottom:calc(var(--spacing)*.5);min-height:calc(var(--spacing)*1);width:100%;display:inline-block}[data-line] span{color:var(--shiki-light)}[data-line] span:is(.dark *){color:var(--shiki-dark)!important}[data-highlighted-line],[data-highlighted-chars]{background-color:var(--color-code-highlight);position:relative}[data-highlighted-line]:after{content:"";background-color:var(--muted-foreground);width:2px;height:100%;position:absolute;top:0;left:0}@supports (color:color-mix(in lab, red, red)){[data-highlighted-line]:after{background-color:color-mix(in oklab,var(--muted-foreground)50%,transparent)}}[data-highlighted-chars]{border-radius:var(--radius-sm);font-family:var(--font-mono);padding-block:.1rem;padding-inline:.3rem;font-size:.8rem}}@layer utilities{.\@container\/card-header{container:card-header/inline-size}.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}@media (pointer:coarse){.extend-touch-target{touch-action:manipulation;position:relative}.extend-touch-target:after{content:var(--tw-content);content:var(--tw-content);inset:calc(var(--spacing)*-2);position:absolute}}.step{counter-increment:step;position:relative}.step:before{right:calc(var(--spacing)*0);margin-right:calc(var(--spacing)*2);width:calc(var(--spacing)*7);height:calc(var(--spacing)*7);text-align:center;text-indent:-1px;font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted-foreground);border-radius:3.40282e38px;justify-content:center;align-items:center;display:none}@media (min-width:48rem){.step:before{position:absolute}}.step:before{content:counter(step)}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-32{inset:calc(var(--spacing)*32)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.start-1{inset-inline-start:calc(var(--spacing)*1)}.-top-2{top:calc(var(--spacing)*-2)}.-top-4{top:calc(var(--spacing)*-4)}.-top-px{top:-1px}.top-0{top:calc(var(--spacing)*0)}.top-1{top:calc(var(--spacing)*1)}.top-1\.5{top:calc(var(--spacing)*1.5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-2\.5{top:calc(var(--spacing)*2.5)}.top-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-10{top:calc(var(--spacing)*10)}.top-14{top:calc(var(--spacing)*14)}.top-16{top:calc(var(--spacing)*16)}.top-20{top:calc(var(--spacing)*20)}.top-\[0\.3rem\]{top:.3rem}.top-\[0\.4rem\]{top:.4rem}.top-\[5px\]{top:5px}.top-\[50\%\]{top:50%}.top-\[calc\(var\(--header-height\)\+1px\)\]{top:calc(var(--header-height) + 1px)}.-right-1{right:calc(var(--spacing)*-1)}.-right-3{right:calc(var(--spacing)*-3)}.right-0{right:calc(var(--spacing)*0)}.right-0\.5{right:calc(var(--spacing)*.5)}.right-1{right:calc(var(--spacing)*1)}.right-2{right:calc(var(--spacing)*2)}.right-2\.5{right:calc(var(--spacing)*2.5)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-6{right:calc(var(--spacing)*6)}.right-16{right:calc(var(--spacing)*16)}.right-24{right:calc(var(--spacing)*24)}.right-\[-1\.5px\]{right:-1.5px}.right-\[-11px\]{right:-11px}.right-\[0\.3rem\]{right:.3rem}.right-\[28px\]{right:28px}.-bottom-1{bottom:calc(var(--spacing)*-1)}.-bottom-px{bottom:-1px}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-0\.5{bottom:calc(var(--spacing)*.5)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-16{bottom:calc(var(--spacing)*16)}.bottom-24{bottom:calc(var(--spacing)*24)}.-left-0{left:calc(var(--spacing)*0)}.-left-0\.5{left:calc(var(--spacing)*-.5)}.-left-1{left:calc(var(--spacing)*-1)}.-left-3{left:calc(var(--spacing)*-3)}.-left-5{left:calc(var(--spacing)*-5)}.-left-6{left:calc(var(--spacing)*-6)}.left-0{left:calc(var(--spacing)*0)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-2\.5{left:calc(var(--spacing)*2.5)}.left-3{left:calc(var(--spacing)*3)}.left-16{left:calc(var(--spacing)*16)}.left-\[-1\.5px\]{left:-1.5px}.left-\[-10\.5px\]{left:-10.5px}.left-\[50\%\]{left:50%}.isolate{isolation:isolate}.z-1{z-index:1}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-51{z-index:51}.z-60{z-index:60}.z-100{z-index:100}.z-500{z-index:500}.z-\[100\]{z-index:100}.col-span-1{grid-column:span 1/span 1}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.container{width:100%}@media (min-width:1600px){.container{max-width:1600px}}@media (min-width:2000px){.container{max-width:2000px}}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.\!m-0{margin:calc(var(--spacing)*0)!important}.m-0{margin:calc(var(--spacing)*0)}.m-0\.5{margin:calc(var(--spacing)*.5)}.m-4{margin:calc(var(--spacing)*4)}.container-wrapper{width:100%;max-width:calc(var(--breakpoint-xl) + 2rem);padding-inline:calc(var(--spacing)*2);margin-inline:auto}.container{max-width:calc(var(--breakpoint-xl) + 2rem);padding-inline:calc(var(--spacing)*4);margin-inline:auto}@media (min-width:80rem){.container{padding-inline:calc(var(--spacing)*6)}}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-0{margin-inline:calc(var(--spacing)*0)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-1\.5{margin-inline:calc(var(--spacing)*1.5)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-auto{margin-inline:auto}.mx-px{margin-inline:1px}.\!my-0{margin-block:calc(var(--spacing)*0)!important}.my-1{margin-block:calc(var(--spacing)*1)}.my-1\.5{margin-block:calc(var(--spacing)*1.5)}.my-2{margin-block:calc(var(--spacing)*2)}.my-4{margin-block:calc(var(--spacing)*4)}.my-6{margin-block:calc(var(--spacing)*6)}.my-8{margin-block:calc(var(--spacing)*8)}.my-auto{margin-block:auto}.my-px{margin-block:1px}.-ms-5{margin-inline-start:calc(var(--spacing)*-5)}.me-1\.5{margin-inline-end:calc(var(--spacing)*1.5)}.\!mt-0{margin-top:calc(var(--spacing)*0)!important}.-mt-2\.5{margin-top:calc(var(--spacing)*-2.5)}.-mt-6{margin-top:calc(var(--spacing)*-6)}.-mt-12{margin-top:calc(var(--spacing)*-12)}.mt-0{margin-top:calc(var(--spacing)*0)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-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)}.mt-\[0\.75em\]{margin-top:.75em}.mt-\[1\.4em\]{margin-top:1.4em}.mt-\[1\.6em\]{margin-top:1.6em}.mt-\[1em\]{margin-top:1em}.mt-auto{margin-top:auto}.-mr-3{margin-right:calc(var(--spacing)*-3)}.mr-0{margin-right:calc(var(--spacing)*0)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-1\.5{margin-right:calc(var(--spacing)*1.5)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-4{margin-right:calc(var(--spacing)*4)}.mr-\[14px\]{margin-right:14px}.mr-auto{margin-right:auto}.\!mb-0{margin-bottom:calc(var(--spacing)*0)!important}.mb-0{margin-bottom:calc(var(--spacing)*0)}.mb-0\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-2\.5{margin-bottom:calc(var(--spacing)*2.5)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.mb-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.\!ml-6{margin-left:calc(var(--spacing)*6)!important}.-ml-2{margin-left:calc(var(--spacing)*-2)}.-ml-3{margin-left:calc(var(--spacing)*-3)}.ml-0{margin-left:calc(var(--spacing)*0)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-auto{margin-left:auto}.ml-px{margin-left:1px}.box-border{box-sizing:border-box}.box-content{box-sizing:content-box}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.no-scrollbar::-webkit-scrollbar{display:none}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-hide::-webkit-scrollbar{display:none}.block{display:block}.contents{display:contents}.flex{display:flex}.flex\!{display:flex!important}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.aspect-1\/2{aspect-ratio:1/2}.aspect-\[4\/2\.5\]{aspect-ratio:4/2.5}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.\!size-3{width:calc(var(--spacing)*3)!important;height:calc(var(--spacing)*3)!important}.\!size-3\.5{width:calc(var(--spacing)*3.5)!important;height:calc(var(--spacing)*3.5)!important}.size-0{width:calc(var(--spacing)*0);height:calc(var(--spacing)*0)}.size-2{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.size-2\.5{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.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-3\.5\!{width:calc(var(--spacing)*3.5)!important;height:calc(var(--spacing)*3.5)!important}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-4\.5{width:calc(var(--spacing)*4.5);height:calc(var(--spacing)*4.5)}.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)}.size-12{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.size-\[14px\]{width:14px;height:14px}.size-\[22px\]{width:22px;height:22px}.size-\[28px\]{width:28px;height:28px}.size-\[130px\]{width:130px;height:130px}.size-full{width:100%;height:100%}.h-\(--container-height\){height:var(--container-height)}.h-\(--header-height\){height:var(--header-height)}.h-\(--height\){height:var(--height)}.h-\(--radix-popper-available-height\){height:var(--radix-popper-available-height)}.h-\(--top-spacing\){height:var(--top-spacing)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-11{height:calc(var(--spacing)*11)}.h-12{height:calc(var(--spacing)*12)}.h-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.h-32{height:calc(var(--spacing)*32)}.h-\[0\.1px\]{height:.1px}.h-\[1\.5em\]{height:1.5em}.h-\[1\.45rem\]{height:1.45rem}.h-\[1px\]{height:1px}.h-\[19px\]{height:19px}.h-\[23rem\]{height:23rem}.h-\[24px\]{height:24px}.h-\[26px\]{height:26px}.h-\[28px\]{height:28px}.h-\[344px\]{height:344px}.h-\[350px\]{height:350px}.h-\[500px\]{height:500px}.h-\[520px\]{height:520px}.h-\[600px\]{height:600px}.h-\[650px\]{height:650px}.h-\[800px\]{height:800px}.h-\[7500px\]{height:7500px}.h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.h-\[calc\(100\%_\+_8px\)\]{height:calc(100% + 8px)}.h-\[calc\(100svh-var\(--header-height\)-var\(--footer-height\)\)\]{height:calc(100svh - var(--header-height) - var(--footer-height))}.h-\[calc\(100vh-3\.5rem\)\]{height:calc(100vh - 3.5rem)}.h-\[calc\(100vh-100px\)\]{height:calc(100vh - 100px)}.h-\[calc\(theme\(spacing\.7\)_-_1px\)\]{height:calc(1.75rem - 1px)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-dvh{height:100dvh}.h-fit{height:fit-content}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.h-svh{height:100svh}.max-h-\(--radix-context-menu-content-available-height\){max-height:var(--radix-context-menu-content-available-height)}.max-h-\(--radix-dropdown-menu-content-available-height\){max-height:var(--radix-dropdown-menu-content-available-height)}.max-h-\(--radix-select-content-available-height\){max-height:var(--radix-select-content-available-height)}.max-h-14{max-height:calc(var(--spacing)*14)}.max-h-72{max-height:calc(var(--spacing)*72)}.max-h-\[50vh\]{max-height:50vh}.max-h-\[70svh\]{max-height:70svh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[288px\]{max-height:288px}.max-h-\[300px\]{max-height:300px}.max-h-\[500px\]{max-height:500px}.max-h-\[650px\]{max-height:650px}.max-h-\[calc\(100vh-4rem\)\]{max-height:calc(100vh - 4rem)}.max-h-\[calc\(100vh-var\(--header-height\)-44px\)\]{max-height:calc(100vh - var(--header-height) - 44px)}.max-h-\[min\(50dvh\,calc\(-24px\+var\(--radix-popper-available-height\)\)\)\]{max-height:min(50dvh,calc(-24px + var(--radix-popper-available-height)))}.max-h-\[min\(70vh\,320px\)\]{max-height:min(70vh,320px)}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-4{min-height:calc(var(--spacing)*4)}.min-h-14{min-height:calc(var(--spacing)*14)}.min-h-\[1lh\]{min-height:1lh}.min-h-\[25px\]{min-height:25px}.min-h-\[50\%\]{min-height:50%}.min-h-\[350px\]{min-height:350px}.min-h-full\!{min-height:100%!important}.min-h-min{min-height:min-content}.min-h-svh{min-height:100svh}.w-\(--radix-popper-available-width\){width:var(--radix-popper-available-width)}.w-\(--sidebar-width\){width:var(--sidebar-width)}.w-0\.5{width:calc(var(--spacing)*.5)}.w-1{width:calc(var(--spacing)*1)}.w-1\/2{width:50%}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.w-4{width:calc(var(--spacing)*4)}.w-4\.5{width:calc(var(--spacing)*4.5)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-48{width:calc(var(--spacing)*48)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-\[1px\]{width:1px}.w-\[80px\]{width:80px}.w-\[100px\]{width:100px}.w-\[120px\]{width:120px}.w-\[180px\]{width:180px}.w-\[200px\]{width:200px}.w-\[230px\]{width:230px}.w-\[240px\]{width:240px}.w-\[280px\]{width:280px}.w-\[300px\]{width:300px}.w-\[330px\]{width:330px}.w-\[380px\]{width:380px}.w-\[700px\]{width:700px}.w-\[896px\]{width:896px}.w-\[970px\]{width:970px}.w-\[calc\(100\%-1rem\)\]{width:calc(100% - 1rem)}.w-\[min\(100\%\,600px\)\]{width:min(100%,600px)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.w-screen{width:100vw}.max-w-\(--skeleton-width\){max-width:var(--skeleton-width)}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-\[80vw\]{max-width:80vw}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-\[calc\(100vw-24px\)\]{max-width:calc(100vw - 24px)}.max-w-full{max-width:100%}.max-w-none{max-width:none}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-5{min-width:calc(var(--spacing)*5)}.min-w-8{min-width:calc(var(--spacing)*8)}.min-w-9{min-width:calc(var(--spacing)*9)}.min-w-10{min-width:calc(var(--spacing)*10)}.min-w-32{min-width:calc(var(--spacing)*32)}.min-w-\[8px\]{min-width:8px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[92px\]{min-width:92px}.min-w-\[125px\]{min-width:125px}.min-w-\[130px\]{min-width:130px}.min-w-\[180px\]{min-width:180px}.min-w-\[220px\]{min-width:220px}.min-w-\[225px\]{min-width:225px}.min-w-\[450px\]{min-width:450px}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-none{flex:none}.shrink-0{flex-shrink:0}.flex-grow-1,.grow{flex-grow:1}.table-fixed{table-layout:fixed}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.origin-\(--radix-context-menu-content-transform-origin\){transform-origin:var(--radix-context-menu-content-transform-origin)}.origin-\(--radix-dropdown-menu-content-transform-origin\){transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\(--radix-hover-card-content-transform-origin\){transform-origin:var(--radix-hover-card-content-transform-origin)}.origin-\(--radix-menubar-content-transform-origin\){transform-origin:var(--radix-menubar-content-transform-origin)}.origin-\(--radix-popover-content-transform-origin\){transform-origin:var(--radix-popover-content-transform-origin)}.origin-\(--radix-select-content-transform-origin\){transform-origin:var(--radix-select-content-transform-origin)}.origin-\(--radix-tooltip-content-transform-origin\){transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\/2{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-1\/4{--tw-translate-x:calc(calc(1/4*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-px{--tw-translate-x:-1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-12{--tw-translate-x:calc(var(--spacing)*12);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/4{--tw-translate-y:calc(calc(1/4*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-full{--tw-translate-y:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0\.5{--tw-translate-y:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[2px\]{--tw-translate-y:2px;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y:calc(-50% - 2px);translate:var(--tw-translate-x)var(--tw-translate-y)}.-rotate-45{rotate:-45deg}.rotate-0{rotate:none}.rotate-12{rotate:12deg}.rotate-45{rotate:45deg}.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-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-row-resize{cursor:row-resize}.cursor-text{cursor:text}.touch-manipulation{touch-action:manipulation}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.scroll-m-16{scroll-margin:calc(var(--spacing)*16)}.scroll-m-20{scroll-margin:calc(var(--spacing)*20)}.scroll-m-28{scroll-margin:calc(var(--spacing)*28)}.scroll-my-1{scroll-margin-block:calc(var(--spacing)*1)}.scroll-mt-20{scroll-margin-top:calc(var(--spacing)*20)}.scroll-mt-24{scroll-margin-top:calc(var(--spacing)*24)}.scroll-py-1{scroll-padding-block:calc(var(--spacing)*1)}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.list-none\!{list-style-type:none!important}.appearance-none{appearance:none}.grid-flow-row{grid-auto-flow:row}.auto-rows-max{grid-auto-rows:max-content}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.grid-cols-\[0_1fr\]{grid-template-columns:0 1fr}.grid-cols-\[repeat\(10\,1fr\)\]{grid-template-columns:repeat(10,1fr)}.grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-nowrap{flex-wrap:nowrap}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-evenly{justify-content:space-evenly}.justify-start{justify-content:flex-start}.justify-items-start{justify-items:start}.gap-0{gap:calc(var(--spacing)*0)}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}:where(.space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-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-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*10)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-16>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*16)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*16)*calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:calc(var(--spacing)*1)}:where(.space-x-0\.5>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*.5)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-0\.5{row-gap:calc(var(--spacing)*.5)}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.overscroll-none{overscroll-behavior:none}.rounded{border-radius:.25rem}.rounded-\[0\.5rem\]{border-radius:.5rem}.rounded-\[2px\]{border-radius:2px}.rounded-\[4px\]{border-radius:4px}.rounded-\[6px\]{border-radius:6px}.rounded-\[50\%\]{border-radius:50%}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-t-lg{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.rounded-r-md{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-bl-none{border-bottom-left-radius:0}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-s-2{border-inline-start-style:var(--tw-border-style);border-inline-start-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.border-\[\#ddd\]{border-color:#ddd}.border-blue-500{border-color:var(--color-blue-500)}.border-border,.border-border\/40{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/40{border-color:color-mix(in oklab,var(--border)40%,transparent)}}.border-border\/50{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/50{border-color:color-mix(in oklab,var(--border)50%,transparent)}}.border-border\/60{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/60{border-color:color-mix(in oklab,var(--border)60%,transparent)}}.border-current{border-color:currentColor}.border-gray-200{border-color:var(--color-gray-200)}.border-input{border-color:var(--input)}.border-muted{border-color:var(--muted)}.border-muted-foreground{border-color:var(--muted-foreground)}.border-primary{border-color:var(--primary)}.border-sidebar-border{border-color:var(--sidebar-border)}.border-stone-700{border-color:var(--color-stone-700)}.border-transparent{border-color:#0000}.border-zinc-700{border-color:var(--color-zinc-700)}.border-zinc-800{border-color:var(--color-zinc-800)}.border-s-blue-500\/50{border-inline-start-color:#3080ff80}@supports (color:color-mix(in lab, red, red)){.border-s-blue-500\/50{border-inline-start-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}}.border-s-green-500\/50{border-inline-start-color:#00c75880}@supports (color:color-mix(in lab, red, red)){.border-s-green-500\/50{border-inline-start-color:color-mix(in oklab,var(--color-green-500)50%,transparent)}}.border-s-orange-500\/50{border-inline-start-color:#fe6e0080}@supports (color:color-mix(in lab, red, red)){.border-s-orange-500\/50{border-inline-start-color:color-mix(in oklab,var(--color-orange-500)50%,transparent)}}.border-s-red-500\/50{border-inline-start-color:#fb2c3680}@supports (color:color-mix(in lab, red, red)){.border-s-red-500\/50{border-inline-start-color:color-mix(in oklab,var(--color-red-500)50%,transparent)}}.border-t-border{border-top-color:var(--border)}.border-t-transparent{border-top-color:#0000}.border-b-border{border-bottom-color:var(--border)}.border-b-brand\/\[\.24\]{border-bottom-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.border-b-brand\/\[\.24\]{border-bottom-color:color-mix(in oklab,var(--brand)24%,transparent)}}.border-b-gray-300{border-bottom-color:var(--color-gray-300)}.border-b-highlight,.border-b-highlight\/35{border-bottom-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.border-b-highlight\/35{border-bottom-color:color-mix(in oklab,var(--highlight)35%,transparent)}}.border-b-highlight\/\[\.7\]{border-bottom-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.border-b-highlight\/\[\.7\]{border-bottom-color:color-mix(in oklab,var(--highlight)70%,transparent)}}.border-b-highlight\/\[\.36\]{border-bottom-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.border-b-highlight\/\[\.36\]{border-bottom-color:color-mix(in oklab,var(--highlight)36%,transparent)}}.border-b-purple-100{border-bottom-color:var(--color-purple-100)}.border-b-transparent{border-bottom-color:#0000}.border-l-transparent{border-left-color:#0000}.bg-\(--cellBackground\){background-color:var(--cellBackground)}.bg-\(--color-1\){background-color:var(--color-1)}.bg-\(--color-2\){background-color:var(--color-2)}.bg-\(--color-3\){background-color:var(--color-3)}.bg-\(--color-4\){background-color:var(--color-4)}.bg-\[\#adfa1d\]{background-color:#adfa1d}.bg-\[\#eee\]{background-color:#eee}.bg-\[rgba\(0\,0\,0\,0\.5\)\]{background-color:#00000080}.bg-accent{background-color:var(--accent)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-background,.bg-background\/90{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/90{background-color:color-mix(in oklab,var(--background)90%,transparent)}}.bg-background\/95{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/95{background-color:color-mix(in oklab,var(--background)95%,transparent)}}.bg-black{background-color:var(--color-black)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-blue-200{background-color:var(--color-blue-200)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-border{background-color:var(--border)}.bg-brand,.bg-brand\/25{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.bg-brand\/25{background-color:color-mix(in oklab,var(--brand)25%,transparent)}}.bg-brand\/50{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.bg-brand\/50{background-color:color-mix(in oklab,var(--brand)50%,transparent)}}.bg-brand\/\[\.08\]{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.bg-brand\/\[\.08\]{background-color:color-mix(in oklab,var(--brand)8%,transparent)}}.bg-brand\/\[\.13\]{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.bg-brand\/\[\.13\]{background-color:color-mix(in oklab,var(--brand)13%,transparent)}}.bg-card{background-color:var(--card)}.bg-current{background-color:currentColor}.bg-cyan-50{background-color:var(--color-cyan-50)}.bg-destructive{background-color:var(--destructive)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-emerald-200\/80{background-color:#a4f4cfcc}@supports (color:color-mix(in lab, red, red)){.bg-emerald-200\/80{background-color:color-mix(in oklab,var(--color-emerald-200)80%,transparent)}}.bg-foreground{background-color:var(--foreground)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-300\/25{background-color:#d1d5dc40}@supports (color:color-mix(in lab, red, red)){.bg-gray-300\/25{background-color:color-mix(in oklab,var(--color-gray-300)25%,transparent)}}.bg-gray-800{background-color:var(--color-gray-800)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-200{background-color:var(--color-green-200)}.bg-highlight,.bg-highlight\/15{background-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.bg-highlight\/15{background-color:color-mix(in oklab,var(--highlight)15%,transparent)}}.bg-highlight\/25{background-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.bg-highlight\/25{background-color:color-mix(in oklab,var(--highlight)25%,transparent)}}.bg-highlight\/30{background-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.bg-highlight\/30{background-color:color-mix(in oklab,var(--highlight)30%,transparent)}}.bg-highlight\/45{background-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.bg-highlight\/45{background-color:color-mix(in oklab,var(--highlight)45%,transparent)}}.bg-highlight\/\[\.13\]{background-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.bg-highlight\/\[\.13\]{background-color:color-mix(in oklab,var(--highlight)13%,transparent)}}.bg-inherit{background-color:inherit}.bg-muted,.bg-muted\/30{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/30{background-color:color-mix(in oklab,var(--muted)30%,transparent)}}.bg-muted\/50{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/50{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.bg-muted\/60{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/60{background-color:color-mix(in oklab,var(--muted)60%,transparent)}}.bg-neutral-50{background-color:var(--color-neutral-50)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-pink-50{background-color:var(--color-pink-50)}.bg-popover,.bg-popover\/90{background-color:var(--popover)}@supports (color:color-mix(in lab, red, red)){.bg-popover\/90{background-color:color-mix(in oklab,var(--popover)90%,transparent)}}.bg-primary,.bg-primary\/10{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/10{background-color:color-mix(in oklab,var(--primary)10%,transparent)}}.bg-primary\/40{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/40{background-color:color-mix(in oklab,var(--primary)40%,transparent)}}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-200{background-color:var(--color-red-200)}.bg-red-200\/80{background-color:#ffcacacc}@supports (color:color-mix(in lab, red, red)){.bg-red-200\/80{background-color:color-mix(in oklab,var(--color-red-200)80%,transparent)}}.bg-ring{background-color:var(--ring)}.bg-secondary{background-color:var(--secondary)}.bg-sidebar{background-color:var(--sidebar)}.bg-sidebar-border{background-color:var(--sidebar-border)}.bg-slate-200\/50{background-color:#e2e8f080}@supports (color:color-mix(in lab, red, red)){.bg-slate-200\/50{background-color:color-mix(in oklab,var(--color-slate-200)50%,transparent)}}.bg-surface{background-color:var(--surface)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-zinc-800{background-color:var(--color-zinc-800)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-950{background-color:var(--color-zinc-950)}.bg-zinc-950\!{background-color:var(--color-zinc-950)!important}.bg-linear-to-b{--tw-gradient-position:to bottom}@supports (background-image:linear-gradient(in lab, red, red)){.bg-linear-to-b{--tw-gradient-position:to bottom in oklab}}.bg-linear-to-b{background-image:linear-gradient(var(--tw-gradient-stops))}.bg-linear-to-r{--tw-gradient-position:to right}@supports (background-image:linear-gradient(in lab, red, red)){.bg-linear-to-r{--tw-gradient-position:to right in oklab}}.bg-linear-to-r{background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[\#6EB6F2\]{--tw-gradient-from:#6eb6f2;--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))}.from-background{--tw-gradient-from:var(--background);--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))}.from-background\/10{--tw-gradient-from:var(--background)}@supports (color:color-mix(in lab, red, red)){.from-background\/10{--tw-gradient-from:color-mix(in oklab,var(--background)10%,transparent)}}.from-background\/10{--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))}.from-gray-900\/30{--tw-gradient-from:#1018284d}@supports (color:color-mix(in lab, red, red)){.from-gray-900\/30{--tw-gradient-from:color-mix(in oklab,var(--color-gray-900)30%,transparent)}}.from-gray-900\/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))}.via-\[\#a855f7\]{--tw-gradient-via:#a855f7;--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-background\/60{--tw-gradient-via:var(--background)}@supports (color:color-mix(in lab, red, red)){.via-background\/60{--tw-gradient-via:color-mix(in oklab,var(--background)60%,transparent)}}.via-background\/60{--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-\[\#eab308\]{--tw-gradient-to:#eab308;--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-background{--tw-gradient-to:var(--background);--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-transparent{--tw-gradient-to:transparent;--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-90\%{--tw-gradient-to-position:90%}.bg-cover{background-size:cover}.bg-clip-content{background-clip:content-box}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.bg-center{background-position:50%}.fill-blue-500{fill:var(--color-blue-500)}.fill-current{fill:currentColor}.fill-green-500{fill:var(--color-green-500)}.fill-none{fill:none}.fill-orange-500{fill:var(--color-orange-500)}.fill-primary{fill:var(--primary)}.fill-red-500{fill:var(--color-red-500)}.stroke-slate-300{stroke:var(--color-slate-300)}.stroke-\[3px\]{stroke-width:3px}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.\!p-0{padding:calc(var(--spacing)*0)!important}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.p-10{padding:calc(var(--spacing)*10)}.p-11{padding:calc(var(--spacing)*11)}.p-20{padding:calc(var(--spacing)*20)}.p-\[2px\]{padding:2px}.p-\[3px\]{padding:3px}.p-px{padding:1px}.\!px-0\.5{padding-inline:calc(var(--spacing)*.5)!important}.\!px-1{padding-inline:calc(var(--spacing)*1)!important}.\!px-1\.5{padding-inline:calc(var(--spacing)*1.5)!important}.\!px-2{padding-inline:calc(var(--spacing)*2)!important}.px-0{padding-inline:calc(var(--spacing)*0)}.px-0\.5{padding-inline:calc(var(--spacing)*.5)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-10{padding-inline:calc(var(--spacing)*10)}.px-16{padding-inline:calc(var(--spacing)*16)}.px-\[0\.3em\]{padding-inline:.3em}.px-\[0\.3rem\]{padding-inline:.3rem}.px-\[calc\(--spacing\(1\)-2px\)\]{padding-inline:calc(calc(var(--spacing)*1) - 2px)}.px-px{padding-inline:1px}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-4\!{padding-block:calc(var(--spacing)*4)!important}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-\[--spacing\(1\)\]{padding-block:calc(var(--spacing)*1)}.py-\[0\.2em\]{padding-block:.2em}.py-\[0\.2rem\]{padding-block:.2rem}.py-\[1\.5px\]{padding-block:1.5px}.py-\[3px\]{padding-block:3px}.ps-6{padding-inline-start:calc(var(--spacing)*6)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-0\.5{padding-top:calc(var(--spacing)*.5)}.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-2\.5{padding-top:calc(var(--spacing)*2.5)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-5{padding-top:calc(var(--spacing)*5)}.pt-24{padding-top:calc(var(--spacing)*24)}.pt-\[0\.275em\]{padding-top:.275em}.pr-1{padding-right:calc(var(--spacing)*1)}.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)}.pr-9{padding-right:calc(var(--spacing)*9)}.pr-10{padding-right:calc(var(--spacing)*10)}.pr-\[14px\]{padding-right:14px}.pr-px{padding-right:1px}.pb-0{padding-bottom:calc(var(--spacing)*0)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-1\.5{padding-bottom:calc(var(--spacing)*1.5)}.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-6{padding-bottom:calc(var(--spacing)*6)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-48{padding-bottom:calc(var(--spacing)*48)}.pb-72{padding-bottom:calc(var(--spacing)*72)}.pb-\[20vh\]{padding-bottom:20vh}.pb-\[51\.25\%\]{padding-bottom:51.25%}.pb-\[56\.25\%\]{padding-bottom:56.25%}.pb-\[56\.0417\%\]{padding-bottom:56.0417%}.pb-\[75\%\]{padding-bottom:75%}.pb-px{padding-bottom:1px}.pl-\(--index\){padding-left:var(--index)}.pl-0{padding-left:calc(var(--spacing)*0)}.pl-0\.5{padding-left:calc(var(--spacing)*.5)}.pl-1{padding-left:calc(var(--spacing)*1)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-2\.5{padding-left:calc(var(--spacing)*2.5)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-8{padding-left:calc(var(--spacing)*8)}.pl-\[26px\]{padding-left:26px}.pl-\[32px\]{padding-left:32px}.pl-\[50px\]{padding-left:50px}.text-center{text-align:center}.text-end{text-align:end}.text-justify{text-align:justify}.text-left{text-align:left}.text-start{text-align:start}.align-baseline{vertical-align:baseline}.align-middle{vertical-align:middle}.align-text-bottom{vertical-align:text-bottom}.font-\[inherit\]{font-family:inherit}.font-heading{font-family:"var(--font-heading)","ui-sans-serif",-apple-system,BlinkMacSystemFont,Segoe UI Variable Display,Segoe UI,Helvetica,Apple Color Emoji,Arial,"sans-serif",Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.font-mono{font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:"var(--font-sans)","ui-sans-serif",-apple-system,BlinkMacSystemFont,Segoe UI Variable Display,Segoe UI,Helvetica,Apple Color Emoji,Arial,"sans-serif",Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.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-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.8rem\]{font-size:.8rem}.text-\[1\.05rem\]{font-size:1.05rem}.text-\[10px\]{font-size:10px}.text-\[18px\]{font-size:18px}.text-\[20px\]{font-size:20px}.text-\[40px\]{font-size:40px}.text-\[max\(87\.5\%\,\.875rem\)\]{font-size:max(87.5%,.875rem)}.leading-7{--tw-leading:calc(var(--spacing)*7);line-height:calc(var(--spacing)*7)}.leading-\[1\.1\]{--tw-leading:1.1;line-height:1.1}.leading-\[1\.5\]{--tw-leading:1.5;line-height:1.5}.leading-\[10px\]{--tw-leading:10px;line-height:10px}.leading-\[normal\]{--tw-leading:normal;line-height:normal}.leading-loose{--tw-leading:var(--leading-loose);line-height:var(--leading-loose)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.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-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-tighter{--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.text-nowrap{text-wrap:nowrap}.break-normal{overflow-wrap:normal;word-break:normal}.break-words{overflow-wrap:break-word}.whitespace-break-spaces{white-space:break-spaces}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#000000\]{color:#000}.text-\[\#aaa\]{color:#aaa}.text-accent-foreground{color:var(--accent-foreground)}.text-background{color:var(--background)}.text-black{color:var(--color-black)}.text-blue-600{color:var(--color-blue-600)}.text-brand\/80{color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.text-brand\/80{color:color-mix(in oklab,var(--brand)80%,transparent)}}.text-card-foreground{color:var(--card-foreground)}.text-current{color:currentColor}.text-cyan-700{color:var(--color-cyan-700)}.text-destructive{color:var(--destructive)}.text-emerald-700{color:var(--color-emerald-700)}.text-foreground,.text-foreground\/80{color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.text-foreground\/80{color:color-mix(in oklab,var(--foreground)80%,transparent)}}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-inherit{color:inherit}.text-muted-foreground,.text-muted-foreground\/70{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\/70{color:color-mix(in oklab,var(--muted-foreground)70%,transparent)}}.text-muted-foreground\/80{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\/80{color:color-mix(in oklab,var(--muted-foreground)80%,transparent)}}.text-neutral-600{color:var(--color-neutral-600)}.text-neutral-800{color:var(--color-neutral-800)}.text-orange-500{color:var(--color-orange-500)}.text-orange-700{color:var(--color-orange-700)}.text-pink-700{color:var(--color-pink-700)}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-sidebar-foreground,.text-sidebar-foreground\/70{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab, red, red)){.text-sidebar-foreground\/70{color:color-mix(in oklab,var(--sidebar-foreground)70%,transparent)}}.text-slate-50{color:var(--color-slate-50)}.text-slate-500{color:var(--color-slate-500)}.text-stone-400{color:var(--color-stone-400)}.text-surface-foreground{color:var(--surface-foreground)}.text-transparent{color:#0000}.text-white{color:var(--color-white)}.text-zinc-50{color:var(--color-zinc-50)}.text-zinc-100{color:var(--color-zinc-100)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-700{color:var(--color-zinc-700)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.decoration-primary{-webkit-text-decoration-color:var(--primary);-webkit-text-decoration-color:var(--primary);text-decoration-color:var(--primary)}.decoration-\[0\.5px\]{text-decoration-thickness:.5px}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.caret-primary{caret-color:var(--primary)}.accent-foreground{accent-color:var(--foreground)}.opacity-0{opacity:0}.opacity-10{opacity:.1}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[rgba\(255\,_255\,_255\,_0\.1\)_0px_0\.5px_0px_0px_inset\,_rgb\(248\,_249\,_250\)_0px_1px_5px_0px_inset\,_rgb\(193\,_200\,_205\)_0px_0px_0px_0\.5px\,_rgb\(193\,_200\,_205\)_0px_2px_1px_-1px\,_rgb\(193\,_200\,_205\)_0px_1px_0px_0px\]{--tw-shadow-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.shadow-\[rgba\(255\,_255\,_255\,_0\.1\)_0px_0\.5px_0px_0px_inset\,_rgb\(248\,_249\,_250\)_0px_1px_5px_0px_inset\,_rgb\(193\,_200\,_205\)_0px_0px_0px_0\.5px\,_rgb\(193\,_200\,_205\)_0px_2px_1px_-1px\,_rgb\(193\,_200\,_205\)_0px_1px_0px_0px\]{--tw-shadow-color:color-mix(in oklab,#ffffff1a 0px .5px 0px 0px inset,#f8f9fa 0px 1px 5px 0px inset,#c1c8cd 0px 0px 0px .5px,#c1c8cd 0px 2px 1px -1px,#c1c8cd 0px 1px 0px 0px var(--tw-shadow-alpha),transparent)}}.ring-black\/5{--tw-ring-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.ring-black\/5{--tw-ring-color:color-mix(in oklab,var(--color-black)5%,transparent)}}.ring-ring{--tw-ring-color:var(--ring)}.ring-sidebar-ring{--tw-ring-color:var(--sidebar-ring)}.ring-offset-0{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.ring-offset-background{--tw-ring-offset-color:var(--background)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.invert-1{--tw-invert:invert(1%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.\!filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)!important}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-xs{--tw-backdrop-blur:blur(var(--blur-xs));-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,visibility,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-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;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-shadow{transition-property:box-shadow;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))}.transition-none{transition-property:none}.duration-75{--tw-duration:75ms;transition-duration:75ms}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-1000{--tw-duration:1s;transition-duration:1s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.\[contain\:content\]{contain:content}.fade-in-0{--tw-enter-opacity:0}.outline-none{--tw-outline-style:none;outline-style:none}.select-auto{-webkit-user-select:auto;user-select:auto}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}.zoom-in-95{--tw-enter-scale:.95}.\[--footer-height\:calc\(var\(--spacing\)\*14\)\]{--footer-height:calc(var(--spacing)*14)}.\[--header-height\:calc\(var\(--spacing\)\*14\)\]{--header-height:calc(var(--spacing)*14)}.\[--sidebar-width\:220px\]{--sidebar-width:220px}.\[--top-spacing\:0\]{--top-spacing:0}.\[counter-increment\:step\]{counter-increment:step}.\[counter-reset\:step\]{counter-reset:step}.\[tab-size\:2\]{tab-size:2}.fade-in{--tw-enter-opacity:0}.ring-inset{--tw-ring-inset:inset}.running{animation-play-state:running}:is(.\*\:m-0>*){margin:calc(var(--spacing)*0)}:is(.\*\:shrink-0>*){flex-shrink:0}:is(.\*\*\:my-0 *){margin-block:calc(var(--spacing)*0)}:is(.\*\*\:leading-\[calc\(1\.25\/\.875\)\] *){--tw-leading:calc(1.25/.875);line-height:1.42857}:is(.\*\*\:leading-normal *){--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.not-first\:mt-4:not(:first-child){margin-top:calc(var(--spacing)*4)}.not-first\:mt-6:not(:first-child){margin-top:calc(var(--spacing)*6)}.not-first\:mt-12:not(:first-child){margin-top:calc(var(--spacing)*12)}.not-last\:border-b:not(:last-child){border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.group-first\/column\:-left-1:is(:where(.group\/column):first-child *){left:calc(var(--spacing)*-1)}.group-first\/column\:pl-0:is(:where(.group\/column):first-child *){padding-left:calc(var(--spacing)*0)}.group-last\/column\:-right-1:is(:where(.group\/column):last-child *){right:calc(var(--spacing)*-1)}.group-last\/column\:pr-0:is(:where(.group\/column):last-child *){padding-right:calc(var(--spacing)*0)}.group-last\/toolbar-group\:hidden\!:is(:where(.group\/toolbar-group):last-child *){display:none!important}.group-focus-within\:pointer-events-none:is(:where(.group):focus-within *){pointer-events:none}.group-focus-within\:top-0:is(:where(.group):focus-within *){top:calc(var(--spacing)*0)}.group-focus-within\:cursor-default:is(:where(.group):focus-within *){cursor:default}.group-focus-within\:text-xs:is(:where(.group):focus-within *){font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.group-focus-within\:font-medium:is(:where(.group):focus-within *){--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.group-focus-within\:text-foreground:is(:where(.group):focus-within *){color:var(--foreground)}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\:translate-x-\[-135px\]:is(:where(.group):hover *){--tw-translate-x:-135px;translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:translate-x-\[-181px\]:is(:where(.group):hover *){--tw-translate-x:-181px;translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:rotate-0:is(:where(.group):hover *){rotate:none}.group-hover\:rotate-45:is(:where(.group):hover *){rotate:45deg}.group-hover\:text-\[\#e3b341\]:is(:where(.group):hover *){color:#e3b341}.group-hover\:no-underline:is(:where(.group):hover *){text-decoration-line:none}.group-hover\:underline:is(:where(.group):hover *){text-decoration-line:underline}.group-hover\:opacity-100:is(:where(.group):hover *),.group-hover\/column\:opacity-100:is(:where(.group\/column):hover *),.group-hover\/container\:opacity-100:is(:where(.group\/container):hover *),.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *),.group-hover\/row\:opacity-100:is(:where(.group\/row):hover *){opacity:1}}.group-has-disabled\:opacity-50:is(:where(.group):has(:disabled) *){opacity:.5}.group-has-data-\[resizing\=\"true\"\]\/row\:opacity-0:is(:where(.group\/row):has([data-resizing=true]) *),.group-has-data-\[resizing\=\\\"true\\\"\]\/row\:opacity-0:is(:where(.group\/row):has([data-resizing=\"true\"]) *){opacity:0}.group-has-data-\[sidebar\=menu-action\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-has-\[\[data-col\=\"0\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="0"]:hover) *),.group-has-\[\[data-col\=\"0\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="0"][data-resizing=true]) *),.group-has-\[\[data-col\=\"1\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="1"]:hover) *),.group-has-\[\[data-col\=\"1\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="1"][data-resizing=true]) *),.group-has-\[\[data-col\=\"10\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="10"]:hover) *),.group-has-\[\[data-col\=\"10\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="10"][data-resizing=true]) *),.group-has-\[\[data-col\=\"2\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="2"]:hover) *),.group-has-\[\[data-col\=\"2\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="2"][data-resizing=true]) *),.group-has-\[\[data-col\=\"3\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="3"]:hover) *),.group-has-\[\[data-col\=\"3\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="3"][data-resizing=true]) *),.group-has-\[\[data-col\=\"4\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="4"]:hover) *),.group-has-\[\[data-col\=\"4\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="4"][data-resizing=true]) *),.group-has-\[\[data-col\=\"5\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="5"]:hover) *),.group-has-\[\[data-col\=\"5\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="5"][data-resizing=true]) *),.group-has-\[\[data-col\=\"6\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="6"]:hover) *),.group-has-\[\[data-col\=\"6\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="6"][data-resizing=true]) *),.group-has-\[\[data-col\=\"7\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="7"]:hover) *),.group-has-\[\[data-col\=\"7\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="7"][data-resizing=true]) *),.group-has-\[\[data-col\=\"8\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="8"]:hover) *),.group-has-\[\[data-col\=\"8\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="8"][data-resizing=true]) *),.group-has-\[\[data-col\=\"9\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="9"]:hover) *),.group-has-\[\[data-col\=\"9\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="9"][data-resizing=true]) *),.group-has-\[\[data-col\=\\\"0\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"0\"]:hover) *),.group-has-\[\[data-col\=\\\"0\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"0\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"10\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"10\"]:hover) *),.group-has-\[\[data-col\=\\\"10\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"10\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"1\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"1\"]:hover) *),.group-has-\[\[data-col\=\\\"1\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"1\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"2\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"2\"]:hover) *),.group-has-\[\[data-col\=\\\"2\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"2\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"3\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"3\"]:hover) *),.group-has-\[\[data-col\=\\\"3\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"3\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"4\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"4\"]:hover) *),.group-has-\[\[data-col\=\\\"4\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"4\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"5\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"5\"]:hover) *),.group-has-\[\[data-col\=\\\"5\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"5\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"6\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"6\"]:hover) *),.group-has-\[\[data-col\=\\\"6\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"6\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"7\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"7\"]:hover) *),.group-has-\[\[data-col\=\\\"7\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"7\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"8\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"8\"]:hover) *),.group-has-\[\[data-col\=\\\"8\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"8\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"9\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"9\"]:hover) *),.group-has-\[\[data-col\=\\\"9\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"9\"][data-resizing=\"true\"]) *),.group-has-\[\[data-resizer-left\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-resizer-left]:hover) *),.group-has-\[\[data-resizer-left\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-resizer-left][data-resizing=true]) *),.group-has-\[\[data-resizer-left\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-resizer-left][data-resizing=\"true\"]) *){display:block}.group-data-list\:my-2:is(:where(.group)[data-list] *){margin-block:calc(var(--spacing)*2)}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:size-8\!:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\(--sidebar-width-icon\):is(:where(.group)[data-collapsible=icon] *){width:var(--sidebar-width-icon)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing)*4)))}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing)*4)) + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:p-0\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:p-2\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\[disabled\=true\]\:opacity-50:is(:where(.group)[data-disabled=true] *){opacity:.5}.group-data-\[empty\=true\]\/subheading\:hidden:is(:where(.group\/subheading)[data-empty=true] *){display:none}.group-data-\[pressed\=true\]\:bg-accent:is(:where(.group)[data-pressed=true] *){background-color:var(--accent)}.group-data-\[pressed\=true\]\:text-accent-foreground:is(:where(.group)[data-pressed=true] *){color:var(--accent-foreground)}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:border-sidebar-border:is(:where(.group)[data-variant=floating] *){border-color:var(--sidebar-border)}.group-data-\[variant\=floating\]\:shadow-sm:is(:where(.group)[data-variant=floating] *){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.group-data-\[vaul-drawer-direction\=bottom\]\/drawer-content\:block:is(:where(.group\/drawer-content)[data-vaul-drawer-direction=bottom] *){display:block}.group-data-\[view\=code\]\/block-view-wrapper\:hidden:is(:where(.group\/block-view-wrapper)[data-view=code] *),.group-data-\[view\=preview\]\/block-view-wrapper\:hidden:is(:where(.group\/block-view-wrapper)[data-view=preview] *){display:none}@media (hover:hover){.peer-hover\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button):hover~*){color:var(--sidebar-accent-foreground)}}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.peer-has-\[\[role\=menuitem\]\]\/menu-group\:block:is(:where(.peer\/menu-group):has([role=menuitem])~*),.peer-has-\[\[role\=menuitemradio\]\]\/menu-group\:block:is(:where(.peer\/menu-group):has([role=menuitemradio])~*),.peer-has-\[\[role\=option\]\]\/menu-group\:block:is(:where(.peer\/menu-group):has([role=option])~*){display:block}.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button)[data-active=true]~*){color:var(--sidebar-accent-foreground)}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.selection\:bg-brand\/25 ::selection{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.selection\:bg-brand\/25 ::selection{background-color:color-mix(in oklab,var(--brand)25%,transparent)}}.selection\:bg-brand\/25::selection{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.selection\:bg-brand\/25::selection{background-color:color-mix(in oklab,var(--brand)25%,transparent)}}.selection\:bg-transparent ::selection{background-color:#0000}.selection\:bg-transparent::selection{background-color:#0000}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-7::file-selector-button{height:calc(var(--spacing)*7)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:var(--foreground)}.placeholder\:text-muted-foreground::placeholder,.placeholder\:text-muted-foreground\/80::placeholder{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.placeholder\:text-muted-foreground\/80::placeholder{color:color-mix(in oklab,var(--muted-foreground)80%,transparent)}}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:z-10:before{content:var(--tw-content);z-index:10}.before\:mt-\[-4px\]:before{content:var(--tw-content);margin-top:-4px}.before\:ml-\[-50px\]:before{content:var(--tw-content);margin-left:-50px}.before\:box-border:before{content:var(--tw-content);box-sizing:border-box}.before\:inline-flex:before{content:var(--tw-content);display:inline-flex}.before\:size-full:before{content:var(--tw-content);width:100%;height:100%}.before\:h-9:before{content:var(--tw-content);height:calc(var(--spacing)*9)}.before\:w-9:before{content:var(--tw-content);width:calc(var(--spacing)*9)}.before\:cursor-text:before{content:var(--tw-content);cursor:text}.before\:items-center:before{content:var(--tw-content);align-items:center}.before\:justify-center:before{content:var(--tw-content);justify-content:center}.before\:rounded-full:before{content:var(--tw-content);border-radius:3.40282e38px}.before\:border-4:before{content:var(--tw-content);border-style:var(--tw-border-style);border-width:4px}.before\:border-t:before{content:var(--tw-content);border-top-style:var(--tw-border-style);border-top-width:1px}.before\:border-r:before{content:var(--tw-content);border-right-style:var(--tw-border-style);border-right-width:1px}.before\:border-b:before{content:var(--tw-content);border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.before\:border-l:before{content:var(--tw-content);border-left-style:var(--tw-border-style);border-left-width:1px}.before\:border-background:before{content:var(--tw-content);border-color:var(--background)}.before\:border-t-border:before{content:var(--tw-content);border-top-color:var(--border)}.before\:border-r-border:before{content:var(--tw-content);border-right-color:var(--border)}.before\:border-b-border:before{content:var(--tw-content);border-bottom-color:var(--border)}.before\:border-l-border:before{content:var(--tw-content);border-left-color:var(--border)}.before\:bg-brand\/5:before{content:var(--tw-content);background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.before\:bg-brand\/5:before{background-color:color-mix(in oklab,var(--brand)5%,transparent)}}.before\:bg-muted:before{content:var(--tw-content);background-color:var(--muted)}.before\:text-center:before{content:var(--tw-content);text-align:center}.before\:-indent-px:before{content:var(--tw-content);text-indent:-1px}.before\:font-mono:before{content:var(--tw-content);font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.before\:text-base:before{content:var(--tw-content);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.before\:font-medium:before{content:var(--tw-content);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.before\:text-muted-foreground\/80:before{content:var(--tw-content);color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.before\:text-muted-foreground\/80:before{color:color-mix(in oklab,var(--muted-foreground)80%,transparent)}}.before\:opacity-30:before{content:var(--tw-content);opacity:.3}.before\:content-\[\'\'\]:before{content:var(--tw-content);--tw-content:"";content:var(--tw-content)}.before\:content-\[attr\(placeholder\)\]:before{content:var(--tw-content);--tw-content:attr(placeholder);content:var(--tw-content)}.before\:\[content\:counter\(step\)\]:before{content:var(--tw-content);content:counter(step)}.before\:select-none:before{content:var(--tw-content);-webkit-user-select:none;user-select:none}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-0:after{content:var(--tw-content);inset:calc(var(--spacing)*0)}.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\:inset-y-\[-2px\]:after{content:var(--tw-content);inset-block:-2px}.after\:-top-0\.5:after{content:var(--tw-content);top:calc(var(--spacing)*-.5)}.after\:top-1\/2:after{content:var(--tw-content);top:50%}.after\:right-0:after{content:var(--tw-content);right:calc(var(--spacing)*0)}.after\:-left-1:after{content:var(--tw-content);left:calc(var(--spacing)*-1)}.after\:left-0:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:z-1:after{content:var(--tw-content);z-index:1}.after\:ml-1\.5:after{content:var(--tw-content);margin-left:calc(var(--spacing)*1.5)}.after\:block:after{content:var(--tw-content);display:block}.after\:flex:after{content:var(--tw-content);display:flex}.after\:inline-block:after{content:var(--tw-content);display:inline-block}.after\:h-3:after{content:var(--tw-content);height:calc(var(--spacing)*3)}.after\:h-8:after{content:var(--tw-content);height:calc(var(--spacing)*8)}.after\:h-16:after{content:var(--tw-content);height:calc(var(--spacing)*16)}.after\:h-\[calc\(100\%\)\+4px\]:after{content:var(--tw-content);height:calc(100%)4px}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing)*1)}.after\:w-3:after{content:var(--tw-content);width:calc(var(--spacing)*3)}.after\:w-10:after{content:var(--tw-content);width:calc(var(--spacing)*10)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:w-\[3px\]:after{content:var(--tw-content);width:3px}.after\:w-\[6px\]:after{content:var(--tw-content);width:6px}.after\:w-\[calc\(100\%\+8px\)\]:after{content:var(--tw-content);width:calc(100% + 8px)}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:-translate-x-px:after{content:var(--tw-content);--tw-translate-x:-1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:-translate-y-1\/2:after{content:var(--tw-content);--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:rounded-\[6px\]:after{content:var(--tw-content);border-radius:6px}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px}.after\:rounded-lg:after{content:var(--tw-content);border-radius:var(--radius)}.after\:rounded-sm:after{content:var(--tw-content);border-radius:calc(var(--radius) - 4px)}.after\:bg-border:after{content:var(--tw-content);background-color:var(--border)}.after\:bg-brand\/15:after{content:var(--tw-content);background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.after\:bg-brand\/15:after{background-color:color-mix(in oklab,var(--brand)15%,transparent)}}.after\:bg-neutral-500\/10:after{content:var(--tw-content);background-color:#7373731a}@supports (color:color-mix(in lab, red, red)){.after\:bg-neutral-500\/10:after{background-color:color-mix(in oklab,var(--color-neutral-500)10%,transparent)}}.after\:bg-primary:after{content:var(--tw-content);background-color:var(--primary)}.after\:bg-ring:after{content:var(--tw-content);background-color:var(--ring)}.after\:bg-zinc-950:after{content:var(--tw-content);background-color:var(--color-zinc-950)}.after\:pb-\[var\(--aspect-ratio\)\]:after{content:var(--tw-content);padding-bottom:var(--aspect-ratio)}.after\:align-middle:after{content:var(--tw-content);vertical-align:middle}.after\:opacity-0:after{content:var(--tw-content);opacity:0}.after\:transition-all:after{content:var(--tw-content);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.after\:content-\[\"\"\]:after{content:var(--tw-content);--tw-content:"";content:var(--tw-content)}.after\:content-\[\'_\'\]:after{content:var(--tw-content);--tw-content:" ";content:var(--tw-content)}.after\:content-\[\\\"\\\"\]:after{content:var(--tw-content);--tw-content:\"\";content:var(--tw-content)}@media (hover:hover){.group-hover\:after\:opacity-100:is(:where(.group):hover *):after{content:var(--tw-content);opacity:1}}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:\!mt-0:first-child{margin-top:calc(var(--spacing)*0)!important}.first\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\:rounded-l-md:first-child{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.last\:rounded-r-md:last-child{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.empty\:hidden:empty{display:none}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}.focus-within\:ring-2:focus-within{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-within\:ring-ring:focus-within{--tw-ring-color:var(--ring)}.focus-within\:ring-offset-2:focus-within{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}@media (hover:hover){.hover\:scale-125:hover{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:bg-accent:hover,.hover\:bg-accent\/80:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/80:hover{background-color:color-mix(in oklab,var(--accent)80%,transparent)}}.hover\:bg-black:hover{background-color:var(--color-black)}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}.hover\:bg-muted:hover{background-color:var(--muted)}.hover\:bg-muted-foreground\/15:hover{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted-foreground\/15:hover{background-color:color-mix(in oklab,var(--muted-foreground)15%,transparent)}}.hover\:bg-muted\/50:hover{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.hover\:bg-primary:hover,.hover\:bg-primary\/10:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/10:hover{background-color:color-mix(in oklab,var(--primary)10%,transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}.hover\:bg-secondary\/60:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-secondary\/60:hover{background-color:color-mix(in oklab,var(--secondary)60%,transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--secondary)80%,transparent)}}.hover\:bg-sidebar-accent:hover{background-color:var(--sidebar-accent)}.hover\:bg-slate-700:hover{background-color:var(--color-slate-700)}.hover\:bg-transparent:hover{background-color:#0000}.hover\:bg-zinc-200:hover{background-color:var(--color-zinc-200)}.hover\:bg-zinc-700:hover{background-color:var(--color-zinc-700)}.hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:text-brand\/80:hover{color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.hover\:text-brand\/80:hover{color:color-mix(in oklab,var(--brand)80%,transparent)}}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:text-muted-foreground:hover,.hover\:text-muted-foreground\/80:hover{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.hover\:text-muted-foreground\/80:hover{color:color-mix(in oklab,var(--muted-foreground)80%,transparent)}}.hover\:text-primary:hover{color:var(--primary)}.hover\:text-primary-foreground:hover{color:var(--primary-foreground)}.hover\:text-sidebar-accent-foreground:hover{color:var(--sidebar-accent-foreground)}.hover\:text-slate-50:hover{color:var(--color-slate-50)}.hover\:text-white:hover{color:var(--color-white)}.hover\:text-zinc-50:hover{color:var(--color-zinc-50)}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));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-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-2:hover{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-primary:hover{--tw-ring-color:var(--primary)}.hover\:ring-offset-2:hover{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.hover\:group-data-\[collapsible\=offcanvas\]\:bg-sidebar:hover:is(:where(.group)[data-collapsible=offcanvas] *){background-color:var(--sidebar)}.hover\:after\:absolute:hover:after{content:var(--tw-content);position:absolute}.hover\:after\:-bottom-1:hover:after{content:var(--tw-content);bottom:calc(var(--spacing)*-1)}.hover\:after\:bottom-0:hover:after{content:var(--tw-content);bottom:calc(var(--spacing)*0)}.hover\:after\:left-0:hover:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.hover\:after\:h-10:hover:after{content:var(--tw-content);height:calc(var(--spacing)*10)}.hover\:after\:h-\[1\.5px\]:hover:after{content:var(--tw-content);height:1.5px}.hover\:after\:w-\[calc\(100\%-2px\)\]:hover:after{content:var(--tw-content);width:calc(100% - 2px)}.hover\:after\:bg-brand:hover:after{content:var(--tw-content);background-color:var(--brand)}.hover\:after\:bg-primary:hover:after{content:var(--tw-content);background-color:var(--primary)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:var(--sidebar-border)}}.focus\:z-10:focus{z-index:10}.focus\:bg-accent:focus{background-color:var(--accent)}.focus\:bg-primary:focus{background-color:var(--primary)}.focus\:bg-zinc-700:focus{background-color:var(--color-zinc-700)}.focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.focus\:text-primary-foreground:focus{color:var(--primary-foreground)}.focus\:text-white:focus{color:var(--color-white)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-ring:focus{--tw-ring-color:var(--ring)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:bg-transparent:focus-visible{background-color:#0000}.focus-visible\:bg-zinc-700:focus-visible{background-color:var(--color-zinc-700)}.focus-visible\:text-white:focus-visible{color:var(--color-white)}.focus-visible\:ring-0:focus-visible{--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-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.focus-visible\:ring-ring:focus-visible,.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--ring)50%,transparent)}}.focus-visible\:ring-slate-700:focus-visible{--tw-ring-color:var(--color-slate-700)}.focus-visible\:ring-transparent:focus-visible{--tw-ring-color:transparent}.focus-visible\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-hidden:focus-visible{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus-visible\:outline-hidden:focus-visible{outline-offset:2px;outline:2px solid #0000}}.focus-visible\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\:outline-ring:focus-visible{outline-color:var(--ring)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-sidebar-accent:active{background-color:var(--sidebar-accent)}.active\:bg-transparent:active{background-color:#0000}.active\:bg-zinc-700:active{background-color:var(--color-zinc-700)}.active\:text-sidebar-accent-foreground:active{color:var(--sidebar-accent-foreground)}.active\:text-white:active{color:var(--color-white)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}:where([data-side=left]) .in-data-\[side\=left\]\:cursor-w-resize{cursor:w-resize}:where([data-side=right]) .in-data-\[side\=right\]\:cursor-e-resize{cursor:e-resize}.has-aria-disabled\:border-input:has([aria-disabled=true]){border-color:var(--input)}.has-aria-disabled\:bg-muted:has([aria-disabled=true]){background-color:var(--muted)}.has-data-readonly\:w-fit:has([data-readonly]){width:fit-content}.has-data-readonly\:cursor-default:has([data-readonly]){cursor:default}.has-data-readonly\:border-transparent:has([data-readonly]){border-color:#0000}.has-data-readonly\:focus-within\:\[box-shadow\:none\]:has([data-readonly]):focus-within{box-shadow:none}.has-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-data-\[variant\=inset\]\:bg-sidebar:has([data-variant=inset]){background-color:var(--sidebar)}.has-\[\[data-slate-editor\]\:focus\]\:border-brand\/50:has([data-slate-editor]:focus){border-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.has-\[\[data-slate-editor\]\:focus\]\:border-brand\/50:has([data-slate-editor]:focus){border-color:color-mix(in oklab,var(--brand)50%,transparent)}}.has-\[\[data-slate-editor\]\:focus\]\:ring-2:has([data-slate-editor]:focus){--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.has-\[\[data-slate-editor\]\:focus\]\:ring-brand\/30:has([data-slate-editor]:focus){--tw-ring-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.has-\[\[data-slate-editor\]\:focus\]\:ring-brand\/30:has([data-slate-editor]:focus){--tw-ring-color:color-mix(in oklab,var(--brand)30%,transparent)}}.has-\[\[role\=menuitem\]\]\:block:has([role=menuitem]),.has-\[\[role\=menuitemradio\]\]\:block:has([role=menuitemradio]),.has-\[\[role\=option\]\]\:block:has([role=option]){display:block}.has-\[button\]\:flex:has(:is(button)){display:flex}.has-\[\+input\:not\(\:placeholder-shown\)\]\:pointer-events-none:has(+input:not(:placeholder-shown)){pointer-events:none}.has-\[\+input\:not\(\:placeholder-shown\)\]\:top-0:has(+input:not(:placeholder-shown)){top:calc(var(--spacing)*0)}.has-\[\+input\:not\(\:placeholder-shown\)\]\:cursor-default:has(+input:not(:placeholder-shown)){cursor:default}.has-\[\+input\:not\(\:placeholder-shown\)\]\:text-xs:has(+input:not(:placeholder-shown)){font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.has-\[\+input\:not\(\:placeholder-shown\)\]\:font-medium:has(+input:not(:placeholder-shown)){--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.has-\[\+input\:not\(\:placeholder-shown\)\]\:text-foreground:has(+input:not(:placeholder-shown)){color:var(--foreground)}.has-\[\>svg\]\:grid-cols-\[calc\(var\(--spacing\)\*4\)_1fr\]:has(>svg){grid-template-columns:calc(var(--spacing)*4)1fr}.has-\[\>svg\]\:gap-x-3:has(>svg){column-gap:calc(var(--spacing)*3)}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing)*2.5)}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--spacing)*3)}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--spacing)*4)}.aria-checked\:border-\(--color-1\)[aria-checked=true]{border-color:var(--color-1)}.aria-checked\:bg-accent[aria-checked=true]{background-color:var(--accent)}.aria-checked\:text-accent-foreground[aria-checked=true]{color:var(--accent-foreground)}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.aria-selected\:bg-accent[aria-selected=true]{background-color:var(--accent)}.aria-selected\:bg-primary[aria-selected=true]{background-color:var(--primary)}.aria-selected\:text-accent-foreground[aria-selected=true]{color:var(--accent-foreground)}.aria-selected\:text-muted-foreground[aria-selected=true]{color:var(--muted-foreground)}.aria-selected\:text-primary-foreground[aria-selected=true]{color:var(--primary-foreground)}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}:is(.\*\*\:data-block-hide\:hidden *)[data-block-hide]{display:none}.data-readonly\:w-fit[data-readonly]{width:fit-content}:is(.\*\*\:data-slate-editor\:max-h-\[calc\(100dvh-44px\)\] *)[data-slate-editor]{max-height:calc(100dvh - 44px)}:is(.\*\*\:data-slate-placeholder\:\!top-1\/2 *)[data-slate-placeholder]{top:50%!important}:is(.\*\*\:data-slate-placeholder\:top-\[auto_\!important\] *)[data-slate-placeholder]{top:auto!important}:is(.\*\*\:data-slate-placeholder\:-translate-y-1\/2 *)[data-slate-placeholder]{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.\*\*\:data-slate-placeholder\:text-muted-foreground\/80 *)[data-slate-placeholder]{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){:is(.\*\*\:data-slate-placeholder\:text-muted-foreground\/80 *)[data-slate-placeholder]{color:color-mix(in oklab,var(--muted-foreground)80%,transparent)}}:is(.\*\*\:data-slate-placeholder\:opacity-100\! *)[data-slate-placeholder]{opacity:1!important}.data-\[active-item\=true\]\:bg-accent[data-active-item=true]{background-color:var(--accent)}.data-\[active-item\=true\]\:text-accent-foreground[data-active-item=true]{color:var(--accent-foreground)}.data-\[active\=true\]\:bg-muted[data-active=true]{background-color:var(--muted)}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:var(--sidebar-accent)}.data-\[active\=true\]\:bg-zinc-700[data-active=true]{background-color:var(--color-zinc-700)}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:text-foreground[data-active=true]{color:var(--foreground)}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:var(--sidebar-accent-foreground)}.data-\[active\=true\]\:text-white[data-active=true]{color:var(--color-white)}.data-\[block\=login-01\]\:max-w-full[data-block=login-01]{max-width:100%}.data-\[block\=sidebar-10\]\:right-0[data-block=sidebar-10]{right:calc(var(--spacing)*0)}.data-\[block\=sidebar-10\]\:left-auto[data-block=sidebar-10]{left:auto}.data-\[block\=sidebar-11\]\:-top-1\/3[data-block=sidebar-11]{top:-33.3333%}.data-\[block\=sidebar-13\]\:max-w-full[data-block=sidebar-13]{max-width:100%}.data-\[block\=sidebar-14\]\:right-0[data-block=sidebar-14]{right:calc(var(--spacing)*0)}.data-\[block\=sidebar-14\]\:left-auto[data-block=sidebar-14]{left:auto}.data-\[block\=sidebar-15\]\:max-w-full[data-block=sidebar-15]{max-width:100%}.data-\[depth\=3\]\:pl-4[data-depth="3"]{padding-left:calc(var(--spacing)*4)}.data-\[depth\=3\]\:pl-6[data-depth="3"],.data-\[depth\=4\]\:pl-6[data-depth="4"]{padding-left:calc(var(--spacing)*6)}.data-\[depth\=4\]\:pl-8[data-depth="4"]{padding-left:calc(var(--spacing)*8)}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[error\=true\]\:text-destructive[data-error=true]{color:var(--destructive)}.data-\[highlighted\=true\]\:bg-accent[data-highlighted=true]{background-color:var(--accent)}.data-\[inset\]\:pl-8[data-inset]{padding-left:calc(var(--spacing)*8)}.data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--spacing)*1)}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:var(--muted-foreground)}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:var(--accent)}.data-\[selected\=true\]\:bg-primary\/10[data-selected=true]{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.data-\[selected\=true\]\:bg-primary\/10[data-selected=true]{background-color:color-mix(in oklab,var(--primary)10%,transparent)}}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:var(--accent-foreground)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.data-\[size\=default\]\:h-9[data-size=default]{height:calc(var(--spacing)*9)}.data-\[size\=sm\]\:h-8[data-size=sm]{height:calc(var(--spacing)*8)}:is(.\*\:data-\[slot\=alert\]\:first\:mt-0>*)[data-slot=alert]:first-child{margin-top:calc(var(--spacing)*0)}:is(.\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){:is(.\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:color-mix(in oklab,var(--destructive)90%,transparent)}}:is(.\*\:data-\[slot\=block-selection\]\:left-2>*)[data-slot=block-selection]{left:calc(var(--spacing)*2)}:is(.\*\*\:data-\[slot\=command-input-wrapper\]\:h-12 *)[data-slot=command-input-wrapper]{height:calc(var(--spacing)*12)}:is(.\*\:data-\[slot\=select-value\]\:line-clamp-1>*)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.\*\:data-\[slot\=select-value\]\:flex>*)[data-slot=select-value]{display:flex}:is(.\*\:data-\[slot\=select-value\]\:items-center>*)[data-slot=select-value]{align-items:center}:is(.\*\:data-\[slot\=select-value\]\:gap-2>*)[data-slot=select-value]{gap:calc(var(--spacing)*2)}:is(.\*\*\:data-\[slot\=separator\]\:\!h-4 *)[data-slot=separator]{height:calc(var(--spacing)*4)!important}.data-\[state\=active\]\:flex[data-state=active]{display:flex}.data-\[state\=active\]\:border-b-primary[data-state=active]{border-bottom-color:var(--primary)}.data-\[state\=active\]\:border-b-zinc-50[data-state=active]{border-bottom-color:var(--color-zinc-50)}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--background)}.data-\[state\=active\]\:bg-transparent[data-state=active]{background-color:#0000}.data-\[state\=active\]\:text-foreground[data-state=active]{color:var(--foreground)}.data-\[state\=active\]\:text-zinc-50[data-state=active]{color:var(--color-zinc-50)}.data-\[state\=active\]\:shadow-none[data-state=active]{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:var(--primary)}.data-\[state\=checked\]\:bg-accent[data-state=checked]{background-color:var(--accent)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--primary)}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:var(--primary-foreground)}.data-\[state\=closed\]\:shrink-0[data-state=closed]{flex-shrink:0}.data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:accordion-up var(--tw-animation-duration,var(--tw-duration,.2s))ease-out}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=closed\]\:opacity-0[data-state=closed]{opacity:0}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x:-100%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x:100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y:-100%}.data-\[state\=on\]\:bg-accent[data-state=on]{background-color:var(--accent)}.data-\[state\=on\]\:text-accent-foreground[data-state=on]{color:var(--accent-foreground)}.data-\[state\=open\]\:grow[data-state=open]{flex-grow:1}.data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:accordion-down var(--tw-animation-duration,var(--tw-duration,.2s))ease-out}.data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=open\]\:animate-none[data-state=open]{animation:none}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:var(--accent)}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:var(--secondary)}.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:var(--accent-foreground)}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:var(--muted-foreground)}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x:-100%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x:100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y:-100%}@media (hover:hover){.data-\[state\=open\]\:hover\:bg-sidebar-accent[data-state=open]:hover{background-color:var(--sidebar-accent)}.data-\[state\=open\]\:hover\:bg-zinc-700[data-state=open]:hover{background-color:var(--color-zinc-700)}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground[data-state=open]:hover{color:var(--sidebar-accent-foreground)}.data-\[state\=open\]\:hover\:text-white[data-state=open]:hover{color:var(--color-white)}}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--muted)}.data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{color:var(--destructive)}.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.data-\[variant\=destructive\]\:focus\:text-destructive[data-variant=destructive]:focus{color:var(--destructive)}.data-\[variant\=outline\]\:border-l-0[data-variant=outline]{border-left-style:var(--tw-border-style);border-left-width:0}.data-\[variant\=outline\]\:shadow-xs[data-variant=outline]{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[variant\=outline\]\:first\:border-l[data-variant=outline]:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.data-\[vaul-drawer-direction\=bottom\]\:inset-x-0[data-vaul-drawer-direction=bottom]{inset-inline:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=bottom\]\:bottom-0[data-vaul-drawer-direction=bottom]{bottom:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=bottom\]\:mt-24[data-vaul-drawer-direction=bottom]{margin-top:calc(var(--spacing)*24)}.data-\[vaul-drawer-direction\=bottom\]\:max-h-\[80vh\][data-vaul-drawer-direction=bottom]{max-height:80vh}.data-\[vaul-drawer-direction\=bottom\]\:rounded-t-lg[data-vaul-drawer-direction=bottom]{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.data-\[vaul-drawer-direction\=bottom\]\:border-t[data-vaul-drawer-direction=bottom]{border-top-style:var(--tw-border-style);border-top-width:1px}.data-\[vaul-drawer-direction\=left\]\:inset-y-0[data-vaul-drawer-direction=left]{inset-block:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=left\]\:left-0[data-vaul-drawer-direction=left]{left:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=left\]\:w-3\/4[data-vaul-drawer-direction=left]{width:75%}.data-\[vaul-drawer-direction\=left\]\:border-r[data-vaul-drawer-direction=left]{border-right-style:var(--tw-border-style);border-right-width:1px}.data-\[vaul-drawer-direction\=right\]\:inset-y-0[data-vaul-drawer-direction=right]{inset-block:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=right\]\:right-0[data-vaul-drawer-direction=right]{right:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=right\]\:w-3\/4[data-vaul-drawer-direction=right]{width:75%}.data-\[vaul-drawer-direction\=right\]\:border-l[data-vaul-drawer-direction=right]{border-left-style:var(--tw-border-style);border-left-width:1px}.data-\[vaul-drawer-direction\=top\]\:inset-x-0[data-vaul-drawer-direction=top]{inset-inline:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=top\]\:top-0[data-vaul-drawer-direction=top]{top:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=top\]\:mb-24[data-vaul-drawer-direction=top]{margin-bottom:calc(var(--spacing)*24)}.data-\[vaul-drawer-direction\=top\]\:max-h-\[80vh\][data-vaul-drawer-direction=top]{max-height:80vh}.data-\[vaul-drawer-direction\=top\]\:rounded-b-lg[data-vaul-drawer-direction=top]{border-bottom-right-radius:var(--radius);border-bottom-left-radius:var(--radius)}.data-\[vaul-drawer-direction\=top\]\:border-b[data-vaul-drawer-direction=top]{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}:is(.\*\:nth-\[2\]\:flex-1>*):nth-child(2){flex:1}:is(.\*\:nth-\[2\]\:text-muted-foreground>*):nth-child(2){color:var(--muted-foreground)}:is(.\*\:nth-\[2\]\:line-through>*):nth-child(2){text-decoration-line:line-through}:is(.\*\:nth-\[2\]\:focus\:outline-none>*):nth-child(2):focus{--tw-outline-style:none;outline-style:none}@supports (backdrop-blur:var(--tw)){.supports-backdrop-blur\:bg-background\/60{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.supports-backdrop-blur\:bg-background\/60{background-color:color-mix(in oklab,var(--background)60%,transparent)}}}@supports ((-webkit-backdrop-filter:var(--tw)) or (backdrop-filter:var(--tw))){.supports-backdrop-filter\:bg-background\/60{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.supports-backdrop-filter\:bg-background\/60{background-color:color-mix(in oklab,var(--background)60%,transparent)}}}@media not all and (min-width:48rem){.max-md\:hidden{display:none}}@media not all and (min-width:40rem){.max-sm\:hidden{display:none}.max-sm\:w-full{width:100%}.max-sm\:flex-auto\!{flex:auto!important}}@media (min-width:40rem){.sm\:block{display:block}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:w-\[1280px\]{width:1280px}.sm\:max-w-3xl{max-width:var(--container-3xl)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:p-10{padding:calc(var(--spacing)*10)}.sm\:px-24{padding-inline:calc(var(--spacing)*24)}.sm\:px-\[max\(64px\,calc\(50\%-350px\)\)\]{padding-inline:max(64px,50% - 350px)}.sm\:pr-12{padding-right:calc(var(--spacing)*12)}.sm\:text-left{text-align:left}.sm\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.sm\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.sm\:opacity-0{opacity:0}.data-\[vaul-drawer-direction\=left\]\:sm\:max-w-sm[data-vaul-drawer-direction=left],.data-\[vaul-drawer-direction\=right\]\:sm\:max-w-sm[data-vaul-drawer-direction=right]{max-width:var(--container-sm)}}@media (min-width:48rem){.md\:sticky{position:sticky}.md\:my-8{margin-block:calc(var(--spacing)*8)}.md\:mt-24{margin-top:calc(var(--spacing)*24)}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:aspect-auto{aspect-ratio:auto}.md\:size-7{width:calc(var(--spacing)*7);height:calc(var(--spacing)*7)}.md\:h-7{height:calc(var(--spacing)*7)}.md\:h-24{height:calc(var(--spacing)*24)}.md\:w-40{width:calc(var(--spacing)*40)}.md\:w-auto{width:auto}.md\:flex-1{flex:1}.md\:flex-none{flex:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-\[var\(--sidebar-width\)_minmax\(0\,1fr\)\]{grid-template-columns:var(--sidebar-width)minmax(0,1fr)}.md\:flex-row{flex-direction:row}.md\:flex-row-reverse{flex-direction:row-reverse}.md\:items-start{align-items:flex-start}.md\:justify-end{justify-content:flex-end}.md\:gap-4{gap:calc(var(--spacing)*4)}.md\:gap-16{gap:calc(var(--spacing)*16)}.md\:gap-24{gap:calc(var(--spacing)*24)}:where(.md\: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)))}.md\:px-2{padding-inline:calc(var(--spacing)*2)}.md\:px-8{padding-inline:calc(var(--spacing)*8)}.md\:py-0{padding-block:calc(var(--spacing)*0)}.md\:py-10{padding-block:calc(var(--spacing)*10)}.md\:pt-0{padding-top:calc(var(--spacing)*0)}.md\:pr-\[14px\]{padding-right:14px}.md\:text-left{text-align:left}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:\[--sidebar-width\:240px\]{--sidebar-width:240px}.md\:\[--top-spacing\:calc\(var\(--spacing\)\*4\)\]{--top-spacing:calc(var(--spacing)*4)}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:calc(var(--radius) + 4px)}.md\:peer-data-\[variant\=inset\]\:shadow-sm:is(:where(.peer)[data-variant=inset]~*){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-2:is(:where(.peer)[data-variant=inset]~*):is(:where(.peer)[data-state=collapsed]~*){margin-left:calc(var(--spacing)*2)}.md\:after\:hidden:after{content:var(--tw-content);display:none}}@media (min-width:64rem){.lg\:sticky{position:sticky}.lg\:top-20{top:calc(var(--spacing)*20)}.lg\:bottom-auto{bottom:auto}.lg\:mt-36{margin-top:calc(var(--spacing)*36)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:inline{display:inline}.lg\:inline-flex{display:inline-flex}.lg\:w-56{width:calc(var(--spacing)*56)}.lg\:w-auto{width:auto}.lg\:w-full{width:100%}.lg\:flex-col{flex-direction:column}.lg\:justify-start{justify-content:flex-start}.lg\:gap-1{gap:calc(var(--spacing)*1)}.lg\:gap-6{gap:calc(var(--spacing)*6)}.lg\:gap-48{gap:calc(var(--spacing)*48)}.lg\:px-0{padding-inline:calc(var(--spacing)*0)}.lg\:py-8{padding-block:calc(var(--spacing)*8)}.lg\:py-12{padding-block:calc(var(--spacing)*12)}.lg\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.lg\:leading-\[1\.1\]{--tw-leading:1.1;line-height:1.1}}@media (min-width:80rem){.xl\:block{display:block}.xl\:flex{display:flex}.xl\:hidden{display:none}.xl\:inline{display:inline}.xl\:w-64{width:calc(var(--spacing)*64)}.xl\:w-auto{width:auto}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:gap-10{gap:calc(var(--spacing)*10)}.xl\:\[--footer-height\:calc\(var\(--spacing\)\*24\)\]{--footer-height:calc(var(--spacing)*24)}}@media (min-width:96rem){.\32 xl\:block{display:block}.\32 xl\:hidden{display:none}}@container not (min-width:32rem){.\@max-lg\:col-span-full{grid-column:1/-1}}.dark\:block:is(.dark *){display:block}.dark\:hidden:is(.dark *){display:none}.dark\:border-border:is(.dark *){border-color:var(--border)}.dark\:border-input:is(.dark *){border-color:var(--input)}.dark\:bg-cyan-950:is(.dark *){background-color:var(--color-cyan-950)}.dark\:bg-destructive\/60:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-destructive\/60:is(.dark *){background-color:color-mix(in oklab,var(--destructive)60%,transparent)}}.dark\:bg-gray-800:is(.dark *){background-color:var(--color-gray-800)}.dark\:bg-green-950:is(.dark *){background-color:var(--color-green-950)}.dark\:bg-input\/30:is(.dark *){background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-input\/30:is(.dark *){background-color:color-mix(in oklab,var(--input)30%,transparent)}}.dark\:bg-muted:is(.dark *){background-color:var(--muted)}.dark\:bg-neutral-900:is(.dark *){background-color:var(--color-neutral-900)}.dark\:bg-orange-950:is(.dark *){background-color:var(--color-orange-950)}.dark\:bg-pink-950:is(.dark *){background-color:var(--color-pink-950)}.dark\:bg-purple-900:is(.dark *){background-color:var(--color-purple-900)}.dark\:bg-purple-950:is(.dark *){background-color:var(--color-purple-950)}.dark\:bg-red-900:is(.dark *){background-color:var(--color-red-900)}.dark\:bg-red-950:is(.dark *){background-color:var(--color-red-950)}.dark\:bg-white:is(.dark *){background-color:var(--color-white)}.dark\:bg-zinc-800:is(.dark *){background-color:var(--color-zinc-800)}.dark\:bg-zinc-900:is(.dark *){background-color:var(--color-zinc-900)}.dark\:bg-zinc-900\!:is(.dark *){background-color:var(--color-zinc-900)!important}.dark\:stroke-slate-600:is(.dark *){stroke:var(--color-slate-600)}.dark\:text-background:is(.dark *){color:var(--background)}.dark\:text-black:is(.dark *){color:var(--color-black)}.dark\:text-cyan-300:is(.dark *){color:var(--color-cyan-300)}.dark\:text-foreground:is(.dark *){color:var(--foreground)}.dark\:text-gray-300:is(.dark *){color:var(--color-gray-300)}.dark\:text-green-300:is(.dark *){color:var(--color-green-300)}.dark\:text-muted-foreground:is(.dark *){color:var(--muted-foreground)}.dark\:text-neutral-300:is(.dark *){color:var(--color-neutral-300)}.dark\:text-neutral-400:is(.dark *){color:var(--color-neutral-400)}.dark\:text-orange-300:is(.dark *){color:var(--color-orange-300)}.dark\:text-pink-300:is(.dark *){color:var(--color-pink-300)}.dark\:text-purple-300:is(.dark *){color:var(--color-purple-300)}.dark\:text-purple-400:is(.dark *){color:var(--color-purple-400)}.dark\:text-red-300:is(.dark *){color:var(--color-red-300)}.dark\:text-red-400:is(.dark *){color:var(--color-red-400)}.dark\:text-white:is(.dark *){color:var(--color-white)}.dark\:shadow-\[rgba\(255\,_255\,_255\,_0\.1\)_0px_0\.5px_0px_0px_inset\,_rgb\(26\,_29\,_30\)_0px_1px_5px_0px_inset\,_rgb\(76\,_81\,_85\)_0px_0px_0px_0\.5px\,_rgb\(76\,_81\,_85\)_0px_2px_1px_-1px\,_rgb\(76\,_81\,_85\)_0px_1px_0px_0px\]:is(.dark *){--tw-shadow-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.dark\:shadow-\[rgba\(255\,_255\,_255\,_0\.1\)_0px_0\.5px_0px_0px_inset\,_rgb\(26\,_29\,_30\)_0px_1px_5px_0px_inset\,_rgb\(76\,_81\,_85\)_0px_0px_0px_0\.5px\,_rgb\(76\,_81\,_85\)_0px_2px_1px_-1px\,_rgb\(76\,_81\,_85\)_0px_1px_0px_0px\]:is(.dark *){--tw-shadow-color:color-mix(in oklab,#ffffff1a 0px .5px 0px 0px inset,#1a1d1e 0px 1px 5px 0px inset,#4c5155 0px 0px 0px .5px,#4c5155 0px 2px 1px -1px,#4c5155 0px 1px 0px 0px var(--tw-shadow-alpha),transparent)}}.dark\:ring-white\/5:is(.dark *){--tw-ring-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.dark\:ring-white\/5:is(.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)5%,transparent)}}@media (hover:hover){.dark\:hover\:bg-accent\/50:is(.dark *):hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-accent\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--input)50%,transparent)}}.dark\:hover\:bg-transparent:is(.dark *):hover{background-color:#0000}}.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\:data-\[state\=active\]\:border-input:is(.dark *)[data-state=active]{border-color:var(--input)}.dark\:data-\[state\=active\]\:bg-input\/30:is(.dark *)[data-state=active]{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\:data-\[state\=active\]\:bg-input\/30:is(.dark *)[data-state=active]{background-color:color-mix(in oklab,var(--input)30%,transparent)}}.dark\:data-\[state\=active\]\:text-foreground:is(.dark *)[data-state=active]{color:var(--foreground)}.dark\:data-\[state\=checked\]\:bg-primary:is(.dark *)[data-state=checked]{background-color:var(--primary)}.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is(.dark *)[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is(.dark *)[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--destructive)20%,transparent)}}@media (min-width:48rem){.md\:dark\:hidden:is(.dark *){display:none}}@media print{.print\:hidden{display:none}.print\:break-inside-avoid{break-inside:avoid}.print\:placeholder\:text-transparent::placeholder{color:#0000}}@media (min-width:1600px){.\33 xl\:fixed\:container:is(.layout-fixed *){width:100%}@media (min-width:1600px){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:1600px}}@media (min-width:2000px){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:2000px}}@media (min-width:40rem){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:40rem}}@media (min-width:48rem){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:48rem}}@media (min-width:64rem){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:64rem}}@media (min-width:80rem){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:80rem}}@media (min-width:96rem){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:96rem}}.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:calc(var(--breakpoint-xl) + 2rem);padding-inline:calc(var(--spacing)*4);margin-inline:auto}@media (min-width:80rem){.\33 xl\:fixed\:container:is(.layout-fixed *){padding-inline:calc(var(--spacing)*6)}}.\33 xl\:fixed\:px-0:is(.layout-fixed *){padding-inline:calc(var(--spacing)*0)}.\33 xl\:fixed\:px-3:is(.layout-fixed *){padding-inline:calc(var(--spacing)*3)}}.\[\&_\*\:\:selection\]\:\!bg-transparent ::selection{background-color:#0000!important}.\[\&_\*\:\:selection\]\:bg-none ::selection{background-image:none}.\[\&_\.katex-display\]\:my-0 .katex-display{margin-block:calc(var(--spacing)*0)}.\[\&_\.katex-display\]\:my-0\! .katex-display{margin-block:calc(var(--spacing)*0)!important}.\[\&_\.line\:before\]\:sticky .line:before{position:sticky}.\[\&_\.line\:before\]\:left-2 .line:before{left:calc(var(--spacing)*2)}.\[\&_\.line\:before\]\:z-10 .line:before{z-index:10}.\[\&_\.line\:before\]\:-translate-y-px .line:before{--tw-translate-y:-1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&_\.line\:before\]\:pr-1 .line:before{padding-right:calc(var(--spacing)*1)}.\[\&_\.react-tweet-theme\]\:my-0 .react-tweet-theme{margin-block:calc(var(--spacing)*0)}.\[\&_\.react-tweet-theme\]\:ring-2 .react-tweet-theme{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.\[\&_\.react-tweet-theme\]\:ring-ring .react-tweet-theme{--tw-ring-color:var(--ring)}.\[\&_\.react-tweet-theme\]\:ring-offset-2 .react-tweet-theme{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.\[\&_\.slate-selected\]\:\!bg-primary\/20 .slate-selected{background-color:var(--primary)!important}@supports (color:color-mix(in lab, red, red)){.\[\&_\.slate-selected\]\:\!bg-primary\/20 .slate-selected{background-color:color-mix(in oklab,var(--primary)20%,transparent)!important}}.\[\&_\.slate-selection-area\]\:z-50 .slate-selection-area{z-index:50}.\[\&_\.slate-selection-area\]\:border .slate-selection-area{border-style:var(--tw-border-style);border-width:1px}.\[\&_\.slate-selection-area\]\:border-brand\/25 .slate-selection-area{border-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.\[\&_\.slate-selection-area\]\:border-brand\/25 .slate-selection-area{border-color:color-mix(in oklab,var(--brand)25%,transparent)}}.\[\&_\.slate-selection-area\]\:border-primary .slate-selection-area{border-color:var(--primary)}.\[\&_\.slate-selection-area\]\:bg-brand\/15 .slate-selection-area{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.\[\&_\.slate-selection-area\]\:bg-brand\/15 .slate-selection-area{background-color:color-mix(in oklab,var(--brand)15%,transparent)}}.\[\&_\.slate-selection-area\]\:bg-primary\/10 .slate-selection-area{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.\[\&_\.slate-selection-area\]\:bg-primary\/10 .slate-selection-area{background-color:color-mix(in oklab,var(--primary)10%,transparent)}}.\[\&_\>_\.lty-playbtn\]\:absolute>.lty-playbtn{position:absolute}.\[\&_\>_\.lty-playbtn\]\:top-1\/2>.lty-playbtn{top:50%}.\[\&_\>_\.lty-playbtn\]\:left-1\/2>.lty-playbtn{left:50%}.\[\&_\>_\.lty-playbtn\]\:z-1>.lty-playbtn{z-index:1}.\[\&_\>_\.lty-playbtn\]\:h-\[46px\]>.lty-playbtn{height:46px}.\[\&_\>_\.lty-playbtn\]\:w-\[70px\]>.lty-playbtn{width:70px}.\[\&_\>_\.lty-playbtn\]\:\[transform\:translate3d\(-50\%\,-50\%\,0\)\]>.lty-playbtn{transform:translate(-50%,-50%)}.\[\&_\>_\.lty-playbtn\]\:rounded-\[14\%\]>.lty-playbtn{border-radius:14%}.\[\&_\>_\.lty-playbtn\]\:bg-\[\#212121\]>.lty-playbtn{background-color:#212121}.\[\&_\>_\.lty-playbtn\]\:opacity-80>.lty-playbtn{opacity:.8}.\[\&_\>_\.lty-playbtn\]\:\[transition\:all_0\.2s_cubic-bezier\(0\,_0\,_0\.2\,_1\)\]>.lty-playbtn{transition:all .2s cubic-bezier(0,0,.2,1)}.\[\&_\>_\.lty-playbtn\]\:before\:absolute>.lty-playbtn:before{content:var(--tw-content);position:absolute}.\[\&_\>_\.lty-playbtn\]\:before\:top-1\/2>.lty-playbtn:before{content:var(--tw-content);top:50%}.\[\&_\>_\.lty-playbtn\]\:before\:left-1\/2>.lty-playbtn:before{content:var(--tw-content);left:50%}.\[\&_\>_\.lty-playbtn\]\:before\:\[transform\:translate3d\(-50\%\,-50\%\,0\)\]>.lty-playbtn:before{content:var(--tw-content);transform:translate(-50%,-50%)}.\[\&_\>_\.lty-playbtn\]\:before\:border-y-\[11px\]>.lty-playbtn:before{content:var(--tw-content);border-block-style:var(--tw-border-style);border-block-width:11px}.\[\&_\>_\.lty-playbtn\]\:before\:border-r-0>.lty-playbtn:before{content:var(--tw-content);border-right-style:var(--tw-border-style);border-right-width:0}.\[\&_\>_\.lty-playbtn\]\:before\:border-l-\[19px\]>.lty-playbtn:before{content:var(--tw-content);border-left-style:var(--tw-border-style);border-left-width:19px}.\[\&_\>_\.lty-playbtn\]\:before\:border-\[transparent_transparent_transparent_\#fff\]>.lty-playbtn:before{content:var(--tw-content);border-color:#0000 #0000 #0000 #fff}.\[\&_\>_\.lty-playbtn\]\:before\:content-\[\"\"\]>.lty-playbtn:before{content:var(--tw-content);--tw-content:"";content:var(--tw-content)}.\[\&_\>_\.lty-playbtn\]\:before\:content-\[\\\"\\\"\]>.lty-playbtn:before{content:var(--tw-content);--tw-content:\"\";content:var(--tw-content)}.\[\&_\>_iframe\]\:absolute>iframe{position:absolute}.\[\&_\>_iframe\]\:top-0>iframe{top:calc(var(--spacing)*0)}.\[\&_\>_iframe\]\:left-0>iframe{left:calc(var(--spacing)*0)}.\[\&_\>_iframe\]\:size-full>iframe{width:100%;height:100%}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:var(--muted-foreground)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_button\]\:hidden button{display:none}.\[\&_code\]\:text-sm code{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.\[\&_h3\.font-heading\]\:text-base h3.font-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.\[\&_h3\.font-heading\]\:font-semibold h3.font-heading{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_pre\]\:my-0 pre{margin-block:calc(var(--spacing)*0)}.\[\&_pre\]\:h-\(--height\) pre{height:var(--height)}.\[\&_pre\]\:max-h-\[350px\] pre{max-height:350px}.\[\&_pre\]\:max-h-\[650px\] pre{max-height:650px}.\[\&_pre\]\:overflow-auto pre{overflow:auto}.\[\&_pre\]\:overflow-hidden pre{overflow:hidden}.\[\&_pre\]\:bg-transparent\! pre{background-color:#0000!important}.\[\&_pre\]\:pt-4 pre{padding-top:calc(var(--spacing)*4)}.\[\&_pre\]\:pb-20 pre{padding-bottom:calc(var(--spacing)*20)}.\[\&_pre\]\:pb-\[100px\] pre{padding-bottom:100px}.\[\&_pre\]\:font-mono pre{font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.\[\&_pre\]\:text-sm pre{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.\[\&_pre\]\:leading-relaxed pre{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_strong\]\:font-bold strong{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:\!size-3 svg{width:calc(var(--spacing)*3)!important;height:calc(var(--spacing)*3)!important}.\[\&_svg\]\:size-3\.5 svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:size-6 svg{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\]\:text-muted-foreground svg{color:var(--muted-foreground)}@media (hover:hover){.\[\&_svg\]\:hover\:text-muted-foreground svg:hover{color:var(--muted-foreground)}}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:var(--muted-foreground)}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&_ul\]\:list-\[circle\] ul{list-style-type:circle}.\[\&_ul_ul\]\:list-\[square\] ul ul{list-style-type:square}.\[\&\.lyt-activated\]\:cursor-\[unset\].lyt-activated{cursor:unset}.\[\&\.lyt-activated\]\:before\:pointer-events-none.lyt-activated:before{content:var(--tw-content);pointer-events:none}.\[\&\.lyt-activated\]\:before\:absolute.lyt-activated:before{content:var(--tw-content);position:absolute}.\[\&\.lyt-activated\]\:before\:top-0.lyt-activated:before{content:var(--tw-content);top:calc(var(--spacing)*0)}.\[\&\.lyt-activated\]\:before\:h-\[60px\].lyt-activated:before{content:var(--tw-content);height:60px}.\[\&\.lyt-activated\]\:before\:w-full.lyt-activated:before{content:var(--tw-content);width:100%}.\[\&\.lyt-activated\]\:before\:bg-\[url\(data\:image\/png\;base64\,iVBORw0KGgoAAAANSUhEUgAAAAEAAADGCAYAAAAT\+OqFAAAAdklEQVQoz42QQQ7AIAgEF\/T\/D\+kbq\/RWAlnQyyazA4aoAB4FsBSA\/bFjuF1EOL7VbrIrBuusmrt4ZZORfb6ehbWdnRHEIiITaEUKa5EJqUakRSaEYBJSCY2dEstQY7AuxahwXFrvZmWl2rh4JZ07z9dLtesfNj5q0FU3A5ObbwAAAABJRU5ErkJggg\=\=\)\].lyt-activated:before{content:var(--tw-content);background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAADGCAYAAAAT+OqFAAAAdklEQVQoz42QQQ7AIAgEF/T/D+kbq/RWAlnQyyazA4aoAB4FsBSA/bFjuF1EOL7VbrIrBuusmrt4ZZORfb6ehbWdnRHEIiITaEUKa5EJqUakRSaEYBJSCY2dEstQY7AuxahwXFrvZmWl2rh4JZ07z9dLtesfNj5q0FU3A5ObbwAAAABJRU5ErkJggg==)}.\[\&\.lyt-activated\]\:before\:bg-top.lyt-activated:before{content:var(--tw-content);background-position:top}.\[\&\.lyt-activated\]\:before\:bg-repeat-x.lyt-activated:before{content:var(--tw-content);background-repeat:repeat-x}.\[\&\.lyt-activated\]\:before\:pb-\[50px\].lyt-activated:before{content:var(--tw-content);padding-bottom:50px}.\[\&\.lyt-activated\]\:before\:opacity-0.lyt-activated:before{content:var(--tw-content);opacity:0}.\[\&\.lyt-activated\]\:before\:\[transition\:all_0\.2s_cubic-bezier\(0\,_0\,_0\.2\,_1\)\].lyt-activated:before{content:var(--tw-content);transition:all .2s cubic-bezier(0,0,.2,1)}.\[\&\.lyt-activated_\>_\.lty-playbtn\]\:pointer-events-none.lyt-activated>.lty-playbtn{pointer-events:none}.\[\&\.lyt-activated_\>_\.lty-playbtn\]\:opacity-0\!.lyt-activated>.lty-playbtn{opacity:0!important}.\[\&\:\:-webkit-scrollbar\]\:w-4::-webkit-scrollbar{width:calc(var(--spacing)*4)}.\[\&\:\:-webkit-scrollbar-button\]\:hidden::-webkit-scrollbar-button{display:none}.\[\&\:\:-webkit-scrollbar-button\]\:size-0::-webkit-scrollbar-button{width:calc(var(--spacing)*0);height:calc(var(--spacing)*0)}.\[\&\:\:-webkit-scrollbar-thumb\]\:min-h-11::-webkit-scrollbar-thumb{min-height:calc(var(--spacing)*11)}.\[\&\:\:-webkit-scrollbar-thumb\]\:rounded-full::-webkit-scrollbar-thumb{border-radius:3.40282e38px}.\[\&\:\:-webkit-scrollbar-thumb\]\:border-4::-webkit-scrollbar-thumb{border-style:var(--tw-border-style);border-width:4px}.\[\&\:\:-webkit-scrollbar-thumb\]\:border-solid::-webkit-scrollbar-thumb{--tw-border-style:solid;border-style:solid}.\[\&\:\:-webkit-scrollbar-thumb\]\:border-popover::-webkit-scrollbar-thumb{border-color:var(--popover)}.\[\&\:\:-webkit-scrollbar-thumb\]\:bg-muted::-webkit-scrollbar-thumb{background-color:var(--muted)}.\[\&\:\:-webkit-scrollbar-thumb\]\:bg-clip-padding::-webkit-scrollbar-thumb{background-clip:padding-box}@media (hover:hover){.\[\&\:\:-webkit-scrollbar-thumb\]\:hover\:bg-muted-foreground\/25::-webkit-scrollbar-thumb:hover{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.\[\&\:\:-webkit-scrollbar-thumb\]\:hover\:bg-muted-foreground\/25::-webkit-scrollbar-thumb:hover{background-color:color-mix(in oklab,var(--muted-foreground)25%,transparent)}}}.focus\:\[\&\:\:placeholder\]\:opacity-0:focus::placeholder{opacity:0}.\[\&\:has\(\>\.day-range-end\)\]\:rounded-r-md:has(>.day-range-end){border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\>\.day-range-start\)\]\:rounded-l-md:has(>.day-range-start){border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[aria-selected\]\)\]\:rounded-md:has([aria-selected]){border-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[aria-selected\]\)\]\:bg-accent:has([aria-selected]){background-color:var(--accent)}.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:first-child:has([aria-selected]){border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:last-child:has([aria-selected]),.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\&\:has\(\[role\=option\]\)\]\:block:has([role=option]){display:block}.\[\&\:hover_\>_\.lty-playbtn\]\:bg-\[red\]:hover>.lty-playbtn{background-color:red}.\[\&\:hover_\>_\.lty-playbtn\]\:opacity-100:hover>.lty-playbtn{opacity:1}.\[\.border-b\]\:pb-6.border-b{padding-bottom:calc(var(--spacing)*6)}.\[\.border-t\]\:pt-6.border-t{padding-top:calc(var(--spacing)*6)}:is(.\*\*\:\[\.hljs-addition\]\:bg-\[\#f0fff4\] *).hljs-addition{background-color:#f0fff4}:is(.\*\*\:\[\.hljs-addition\]\:text-\[\#22863a\] *).hljs-addition{color:#22863a}:is(.dark\:\*\*\:\[\.hljs-addition\]\:bg-\[\#3c5743\]:is(.dark *) *).hljs-addition{background-color:#3c5743}:is(.dark\:\*\*\:\[\.hljs-addition\]\:text-\[\#ceead5\]:is(.dark *) *).hljs-addition{color:#ceead5}:is(.\*\*\:\[\.hljs-attr\,\.hljs-attribute\,\.hljs-literal\,\.hljs-meta\,\.hljs-number\,\.hljs-operator\,\.hljs-selector-attr\,\.hljs-selector-class\,\.hljs-selector-id\,\.hljs-variable\]\:text-\[\#005cc5\] *):is(.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable){color:#005cc5}:is(.dark\:\*\*\:\[\.hljs-attr\,\.hljs-attribute\,\.hljs-literal\,\.hljs-meta\,\.hljs-number\,\.hljs-operator\,\.hljs-selector-attr\,\.hljs-selector-class\,\.hljs-selector-id\,\.hljs-variable\]\:text-\[\#6596cf\]:is(.dark *) *):is(.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable){color:#6596cf}:is(.\*\*\:\[\.hljs-built\\\\\\\\\\\\\\\\_in\,\.hljs-symbol\]\:text-\[\#e36209\] *):is(.hljs-built\\\\\\_in,.hljs-symbol){color:#e36209}:is(.dark\:\*\*\:\[\.hljs-built\\\\\\\\\\\\\\\\_in\,\.hljs-symbol\]\:text-\[\#c3854e\]:is(.dark *) *):is(.hljs-built\\\\\\_in,.hljs-symbol){color:#c3854e}:is(.\*\*\:\[\.hljs-built\\\\\\\\_in\,\.hljs-symbol\]\:text-\[\#e36209\] *):is(.hljs-built\\_in,.hljs-symbol){color:#e36209}:is(.dark\:\*\*\:\[\.hljs-built\\\\\\\\_in\,\.hljs-symbol\]\:text-\[\#c3854e\]:is(.dark *) *):is(.hljs-built\\_in,.hljs-symbol){color:#c3854e}:is(.\*\*\:\[\.hljs-bullet\]\:text-\[\#735c0f\] *).hljs-bullet{color:#735c0f}:is(.\*\*\:\[\.hljs-comment\,\.hljs-code\,\.hljs-formula\]\:text-\[\#6a737d\] *):is(.hljs-comment,.hljs-code,.hljs-formula),:is(.dark\:\*\*\:\[\.hljs-comment\,\.hljs-code\,\.hljs-formula\]\:text-\[\#6a737d\]:is(.dark *) *):is(.hljs-comment,.hljs-code,.hljs-formula){color:#6a737d}:is(.\*\*\:\[\.hljs-deletion\]\:bg-\[\#ffeef0\] *).hljs-deletion{background-color:#ffeef0}:is(.\*\*\:\[\.hljs-deletion\]\:text-\[\#b31d28\] *).hljs-deletion{color:#b31d28}:is(.dark\:\*\*\:\[\.hljs-deletion\]\:bg-\[\#473235\]:is(.dark *) *).hljs-deletion{background-color:#473235}:is(.dark\:\*\*\:\[\.hljs-deletion\]\:text-\[\#e7c7cb\]:is(.dark *) *).hljs-deletion{color:#e7c7cb}:is(.\*\*\:\[\.hljs-emphasis\]\:italic *).hljs-emphasis{font-style:italic}:is(.\*\*\:\[\.hljs-keyword\,\.hljs-doctag\,\.hljs-template-tag\,\.hljs-template-variable\,\.hljs-type\,\.hljs-variable\.language\\\\\\\\\\\\\\\\_\]\:text-\[\#d73a49\] *):is(.hljs-keyword,.hljs-doctag,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language\\\\\\_){color:#d73a49}:is(.dark\:\*\*\:\[\.hljs-keyword\,\.hljs-doctag\,\.hljs-template-tag\,\.hljs-template-variable\,\.hljs-type\,\.hljs-variable\.language\\\\\\\\\\\\\\\\_\]\:text-\[\#ee6960\]:is(.dark *) *):is(.hljs-keyword,.hljs-doctag,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language\\\\\\_){color:#ee6960}:is(.\*\*\:\[\.hljs-keyword\,\.hljs-doctag\,\.hljs-template-tag\,\.hljs-template-variable\,\.hljs-type\,\.hljs-variable\.language\\\\\\\\_\]\:text-\[\#d73a49\] *):is(.hljs-keyword,.hljs-doctag,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language\\_){color:#d73a49}:is(.dark\:\*\*\:\[\.hljs-keyword\,\.hljs-doctag\,\.hljs-template-tag\,\.hljs-template-variable\,\.hljs-type\,\.hljs-variable\.language\\\\\\\\_\]\:text-\[\#ee6960\]:is(.dark *) *):is(.hljs-keyword,.hljs-doctag,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language\\_){color:#ee6960}:is(.\*\*\:\[\.hljs-name\,\.hljs-quote\,\.hljs-selector-tag\,\.hljs-selector-pseudo\]\:text-\[\#22863a\] *):is(.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo){color:#22863a}:is(.dark\:\*\*\:\[\.hljs-name\,\.hljs-quote\,\.hljs-selector-tag\,\.hljs-selector-pseudo\]\:text-\[\#36a84f\]:is(.dark *) *):is(.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo){color:#36a84f}:is(.\*\*\:\[\.hljs-regexp\,\.hljs-string\,\.hljs-meta_\.hljs-string\]\:text-\[\#032f62\] *):is(.hljs-regexp,.hljs-string,.hljs-meta .hljs-string){color:#032f62}:is(.dark\:\*\*\:\[\.hljs-regexp\,\.hljs-string\,\.hljs-meta_\.hljs-string\]\:text-\[\#3593ff\]:is(.dark *) *):is(.hljs-regexp,.hljs-string,.hljs-meta .hljs-string){color:#3593ff}:is(.\*\*\:\[\.hljs-section\]\:font-bold *).hljs-section{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}:is(.\*\*\:\[\.hljs-section\]\:text-\[\#005cc5\] *).hljs-section{color:#005cc5}:is(.dark\:\*\*\:\[\.hljs-section\]\:text-\[\#61a5f2\]:is(.dark *) *).hljs-section{color:#61a5f2}:is(.\*\*\:\[\.hljs-strong\]\:font-bold *).hljs-strong{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}:is(.\*\*\:\[\.hljs-title\,\.hljs-title\.class\\\\\\\\\\\\\\\\_\,\.hljs-title\.class\\\\\\\\\\\\\\\\_\.inherited\\\\\\\\\\\\\\\\_\\\\\\\\\\\\\\\\_\,\.hljs-title\.function\\\\\\\\\\\\\\\\_\]\:text-\[\#6f42c1\] *):is(.hljs-title,.hljs-title.class\\\\\\_,.hljs-title.class\\\\\\_.inherited\\\\\\_\\\\\\_,.hljs-title.function\\\\\\_){color:#6f42c1}:is(.dark\:\*\*\:\[\.hljs-title\,\.hljs-title\.class\\\\\\\\\\\\\\\\_\,\.hljs-title\.class\\\\\\\\\\\\\\\\_\.inherited\\\\\\\\\\\\\\\\_\\\\\\\\\\\\\\\\_\,\.hljs-title\.function\\\\\\\\\\\\\\\\_\]\:text-\[\#a77bfa\]:is(.dark *) *):is(.hljs-title,.hljs-title.class\\\\\\_,.hljs-title.class\\\\\\_.inherited\\\\\\_\\\\\\_,.hljs-title.function\\\\\\_){color:#a77bfa}:is(.\*\*\:\[\.hljs-title\,\.hljs-title\.class\\\\\\\\_\,\.hljs-title\.class\\\\\\\\_\.inherited\\\\\\\\_\\\\\\\\_\,\.hljs-title\.function\\\\\\\\_\]\:text-\[\#6f42c1\] *):is(.hljs-title,.hljs-title.class\\_,.hljs-title.class\\_.inherited\\_\\_,.hljs-title.function\\_){color:#6f42c1}:is(.dark\:\*\*\:\[\.hljs-title\,\.hljs-title\.class\\\\\\\\_\,\.hljs-title\.class\\\\\\\\_\.inherited\\\\\\\\_\\\\\\\\_\,\.hljs-title\.function\\\\\\\\_\]\:text-\[\#a77bfa\]:is(.dark *) *):is(.hljs-title,.hljs-title.class\\_,.hljs-title.class\\_.inherited\\_\\_,.hljs-title.function\\_){color:#a77bfa}@media (hover:hover){:is(.\*\*\:\[\[data-slot\=\"mdx-link\"\]\]\:hover\:after\:bottom-0 *)[data-slot=mdx-link]:hover:after{content:var(--tw-content);bottom:calc(var(--spacing)*0)}}:is(.\*\:\[code\]\:bg-inherit>*):is(code){background-color:inherit}:is(.\*\:\[h3\,h4\]\:mt-8>*):is(h3,h4){margin-top:calc(var(--spacing)*8)}:is(.\*\:\[h3\,h4\]\:mb-4>*):is(h3,h4){margin-bottom:calc(var(--spacing)*4)}:is(.\*\:\[h3\,h4\]\:text-base>*):is(h3,h4){font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}:is(.\*\:\[h3\,h4\]\:font-semibold>*):is(h3,h4){--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}:is(.\*\:\[h3\,h4\]\:\[counter-increment\:step\]>*):is(h3,h4){counter-increment:step}:is(.\*\:\[h3\,h4\]\:before\:absolute>*):is(h3,h4):before{content:var(--tw-content);position:absolute}:is(.\*\:\[h3\,h4\]\:before\:mt-\[-4px\]>*):is(h3,h4):before{content:var(--tw-content);margin-top:-4px}:is(.\*\:\[h3\,h4\]\:before\:ml-\[-50px\]>*):is(h3,h4):before{content:var(--tw-content);margin-left:-50px}:is(.\*\:\[h3\,h4\]\:before\:inline-flex>*):is(h3,h4):before{content:var(--tw-content);display:inline-flex}:is(.\*\:\[h3\,h4\]\:before\:h-9>*):is(h3,h4):before{content:var(--tw-content);height:calc(var(--spacing)*9)}:is(.\*\:\[h3\,h4\]\:before\:w-9>*):is(h3,h4):before{content:var(--tw-content);width:calc(var(--spacing)*9)}:is(.\*\:\[h3\,h4\]\:before\:items-center>*):is(h3,h4):before{content:var(--tw-content);align-items:center}:is(.\*\:\[h3\,h4\]\:before\:justify-center>*):is(h3,h4):before{content:var(--tw-content);justify-content:center}:is(.\*\:\[h3\,h4\]\:before\:rounded-full>*):is(h3,h4):before{content:var(--tw-content);border-radius:3.40282e38px}:is(.\*\:\[h3\,h4\]\:before\:border-4>*):is(h3,h4):before{content:var(--tw-content);border-style:var(--tw-border-style);border-width:4px}:is(.\*\:\[h3\,h4\]\:before\:border-background>*):is(h3,h4):before{content:var(--tw-content);border-color:var(--background)}:is(.\*\:\[h3\,h4\]\:before\:bg-muted>*):is(h3,h4):before{content:var(--tw-content);background-color:var(--muted)}:is(.\*\:\[h3\,h4\]\:before\:text-center>*):is(h3,h4):before{content:var(--tw-content);text-align:center}:is(.\*\:\[h3\,h4\]\:before\:-indent-px>*):is(h3,h4):before{content:var(--tw-content);text-indent:-1px}:is(.\*\:\[h3\,h4\]\:before\:font-mono>*):is(h3,h4):before{content:var(--tw-content);font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}:is(.\*\:\[h3\,h4\]\:before\:text-base>*):is(h3,h4):before{content:var(--tw-content);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}:is(.\*\:\[h3\,h4\]\:before\:font-medium>*):is(h3,h4):before{content:var(--tw-content);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}:is(.\*\:\[h3\,h4\]\:before\:\[content\:counter\(step\)\]>*):is(h3,h4):before{content:var(--tw-content);content:counter(step)}:is(.\*\*\:\[p\]\:m-0 *):is(p){margin:calc(var(--spacing)*0)}:is(.\*\*\:\[p\,ul\,ol\,li\]\:first\:my-0 *):is(p,ul,ol,li):first-child{margin-block:calc(var(--spacing)*0)}:is(.\*\:first\:\[span\]\:hidden>*):first-child:is(span){display:none}:is(.\*\:\[span\]\:last\:flex>*):is(span):last-child{display:flex}:is(.\*\:\[span\]\:last\:items-center>*):is(span):last-child{align-items:center}:is(.\*\:\[span\]\:last\:gap-2>*):is(span):last-child{gap:calc(var(--spacing)*2)}:is(.\*\:\[svg\]\:text-muted-foreground>*):is(svg){color:var(--muted-foreground)}:is(.\*\:\[svg\]\:text-neutral-50>*):is(svg){color:var(--color-neutral-50)}:is(.data-\[variant\=destructive\]\:\*\:\[svg\]\:\!text-destructive[data-variant=destructive]>*):is(svg){color:var(--destructive)!important}:is(.dark\:\*\:\[svg\]\:text-neutral-900:is(.dark *)>*):is(svg){color:var(--color-neutral-900)}:is(.\*\:\[ul\]\:my-0>*):is(ul){margin-block:calc(var(--spacing)*0)}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y:2px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3>svg{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:translate-y-0\.5>svg{--tw-translate-y:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\]\:text-current>svg{color:currentColor}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:var(--sidebar-accent-foreground)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\[align\=center\]\]\:text-center[align=center]{text-align:center}.\[\&\[align\=right\]\]\:text-right[align=right]{text-align:right}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div,.\[\&\[data-state\=open\]\>button\>svg\:first-child\]\:rotate-90[data-state=open]>button>svg:first-child{rotate:90deg}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}@media (min-width:1800px){.\[\@media\(width\>\=1800px\)\]\:max-w-\(--breakpoint-2xl\){max-width:var(--breakpoint-2xl)}.\[\@media\(width\>\=1800px\)\]\:border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}@media (hover:hover){a.\[a\&\]\:hover\:bg-accent:hover{background-color:var(--accent)}a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:color-mix(in oklab,var(--secondary)90%,transparent)}}a.\[a\&\]\:hover\:text-accent-foreground:hover{color:var(--accent-foreground)}}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}.prose{max-width:65ch;color:var(--foreground)}.prose h1:not(.not-prose h1){scroll-margin:calc(var(--spacing)*20);font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height));--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}@media (min-width:64rem){.prose h1:not(.not-prose h1){font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}}.prose h2:not(.not-prose h2){margin-top:calc(var(--spacing)*12);scroll-margin:calc(var(--spacing)*20);border-bottom-style:var(--tw-border-style);padding-bottom:calc(var(--spacing)*2);font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);border-bottom-width:1px}.prose h2:not(.not-prose h2):first-child{margin-top:calc(var(--spacing)*0)}.prose h3:not(.not-prose h3){margin-top:calc(var(--spacing)*12);scroll-margin:calc(var(--spacing)*20);font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.prose h3:not(.not-prose h3):first-child{margin-top:calc(var(--spacing)*0)}.prose h4:not(.not-prose h4){margin-top:calc(var(--spacing)*12);scroll-margin:calc(var(--spacing)*20);font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.prose h4:not(.not-prose h4):first-child{margin-top:calc(var(--spacing)*0)}.prose h5:not(.not-prose h5){margin-top:calc(var(--spacing)*12);scroll-margin:calc(var(--spacing)*20);font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.prose h5:not(.not-prose h5):first-child{margin-top:calc(var(--spacing)*0)}.prose h6:not(.not-prose h6){margin-top:calc(var(--spacing)*12);scroll-margin:calc(var(--spacing)*20);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.prose h6:not(.not-prose h6):first-child,:is(.prose h1:not(.not-prose h1),.prose h2:not(.not-prose h2),.prose h3:not(.not-prose h3),.prose h4:not(.not-prose h4),.prose h5:not(.not-prose h5),.prose h6:not(.not-prose h6))+p{margin-top:calc(var(--spacing)*0)}.prose p:not(.not-prose p){--tw-leading:calc(var(--spacing)*7);line-height:calc(var(--spacing)*7)}.prose p:not(.not-prose p):not(:first-child){margin-top:calc(var(--spacing)*6)}.prose a:not(.not-prose a){--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--primary);text-underline-offset:4px;text-decoration-line:underline}.prose blockquote:not(.not-prose blockquote){margin-top:calc(var(--spacing)*6);border-left-style:var(--tw-border-style);padding-left:calc(var(--spacing)*6);border-left-width:2px;font-style:italic}.prose table:not(.not-prose table){margin-block:calc(var(--spacing)*6);width:100%;overflow-y:auto}.prose table:not(.not-prose table) thead tr{margin:calc(var(--spacing)*0);border-top-style:var(--tw-border-style);padding:calc(var(--spacing)*0);border-top-width:1px}.prose table:not(.not-prose table) thead tr:nth-child(2n){background-color:var(--muted)}.prose table:not(.not-prose table) th{border-style:var(--tw-border-style);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*2);text-align:left;--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);border-width:1px}.prose table:not(.not-prose table) th[align=center]{text-align:center}.prose table:not(.not-prose table) th[align=right]{text-align:right}.prose table:not(.not-prose table) tbody tr{margin:calc(var(--spacing)*0);border-top-style:var(--tw-border-style);padding:calc(var(--spacing)*0);border-top-width:1px}.prose table:not(.not-prose table) tbody tr:nth-child(2n){background-color:var(--muted)}.prose table:not(.not-prose table) td{border-style:var(--tw-border-style);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*2);text-align:left;border-width:1px}.prose table:not(.not-prose table) td[align=center]{text-align:center}.prose table:not(.not-prose table) td[align=right]{text-align:right}.prose ul:not(.not-prose ul){margin-block:calc(var(--spacing)*6);margin-left:calc(var(--spacing)*6);list-style-type:disc}.prose ul:not(.not-prose ul)>li{margin-top:calc(var(--spacing)*2)}.prose ul:not(.not-prose ul) p{margin-block:calc(var(--spacing)*0);display:inline}.prose ol:not(.not-prose ol){margin-block:calc(var(--spacing)*6);margin-left:calc(var(--spacing)*6);list-style-type:decimal}.prose ol:not(.not-prose ol)>li{margin-top:calc(var(--spacing)*2)}.prose ol:not(.not-prose ol) p{margin-block:calc(var(--spacing)*0);display:inline}.prose pre:not(.not-prose pre){margin-block:calc(var(--spacing)*6);border-radius:calc(var(--radius) - 2px);background-color:var(--muted);padding:calc(var(--spacing)*4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));overflow-y:auto}.prose code:not(pre code):not(.not-prose code){background-color:var(--muted);font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);border-radius:.25rem;padding-block:.2rem;padding-inline:.3rem;position:relative}.prose .lead:not(.not-prose .lead){font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));color:var(--muted-foreground)}.prose .large:not(.not-prose .large){font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.prose .small:not(.not-prose .small){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:1;--tw-font-weight:var(--font-weight-medium);line-height:1;font-weight:var(--font-weight-medium)}.prose .muted:not(.not-prose .muted){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--muted-foreground)}.prose img:not(.not-prose img),.prose picture:not(.not-prose picture),.prose video:not(.not-prose video){margin-block:calc(var(--spacing)*6)}.prose picture>img:not(.not-prose picture>img){margin-block:calc(var(--spacing)*0)}.prose kbd:not(.not-prose kbd){border-radius:calc(var(--radius) - 2px);background-color:var(--muted);padding-inline:calc(var(--spacing)*1.5);padding-block:calc(var(--spacing)*.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.prose hr{margin-block:calc(var(--spacing)*10)}.prose dl:not(.not-prose dl){margin-block:calc(var(--spacing)*6)}.prose dl:not(.not-prose dl) dt{margin-top:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.prose dl:not(.not-prose dl) dt:first-child{margin-top:calc(var(--spacing)*0)}.prose details:not(.not-prose details){margin-top:calc(var(--spacing)*6)}.prose details:not(.not-prose details) summary{margin-top:calc(var(--spacing)*6);cursor:pointer;--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.prose details:not(.not-prose details) p:first-of-type{margin-top:calc(var(--spacing)*2)}.prose mark:not(.not-prose mark){background-color:var(--color-yellow-300)}.prose small:not(.not-prose small){font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-leading:1;line-height:1}.theme-default .theme-container{--chart-1:var(--color-blue-300);--chart-2:var(--color-blue-500);--chart-3:var(--color-blue-600);--chart-4:var(--color-blue-700);--chart-5:var(--color-blue-800)}.theme-blue .theme-container{--primary:var(--color-blue-600);--primary-foreground:var(--color-blue-50);--ring:var(--color-blue-400);--sidebar-primary:var(--color-blue-600);--sidebar-primary-foreground:var(--color-blue-50);--sidebar-ring:var(--color-blue-400);--chart-1:var(--color-blue-300);--chart-2:var(--color-blue-500);--chart-3:var(--color-blue-600);--chart-4:var(--color-blue-700);--chart-5:var(--color-blue-800)}.theme-blue .theme-container:is(.dark *){--primary:var(--color-blue-500);--primary-foreground:var(--color-blue-50);--ring:var(--color-blue-900);--sidebar-primary:var(--color-blue-500);--sidebar-primary-foreground:var(--color-blue-50);--sidebar-ring:var(--color-blue-900)}.theme-green .theme-container{--primary:var(--color-lime-600);--primary-foreground:var(--color-lime-50);--ring:var(--color-lime-400);--chart-1:var(--color-green-300);--chart-2:var(--color-green-500);--chart-3:var(--color-green-600);--chart-4:var(--color-green-700);--chart-5:var(--color-green-800);--sidebar-primary:var(--color-lime-600);--sidebar-primary-foreground:var(--color-lime-50);--sidebar-ring:var(--color-lime-400)}.theme-green .theme-container:is(.dark *){--primary:var(--color-lime-600);--primary-foreground:var(--color-lime-50);--ring:var(--color-lime-900);--sidebar-primary:var(--color-lime-500);--sidebar-primary-foreground:var(--color-lime-50);--sidebar-ring:var(--color-lime-900)}.theme-amber .theme-container{--primary:var(--color-amber-600);--primary-foreground:var(--color-amber-50);--ring:var(--color-amber-400);--chart-1:var(--color-amber-300);--chart-2:var(--color-amber-500);--chart-3:var(--color-amber-600);--chart-4:var(--color-amber-700);--chart-5:var(--color-amber-800);--sidebar-primary:var(--color-amber-600);--sidebar-primary-foreground:var(--color-amber-50);--sidebar-ring:var(--color-amber-400)}.theme-amber .theme-container:is(.dark *){--primary:var(--color-amber-500);--primary-foreground:var(--color-amber-50);--ring:var(--color-amber-900);--sidebar-primary:var(--color-amber-500);--sidebar-primary-foreground:var(--color-amber-50);--sidebar-ring:var(--color-amber-900)}.theme-rose .theme-container{--primary:var(--color-rose-600);--primary-foreground:var(--color-rose-50);--ring:var(--color-rose-400);--chart-1:var(--color-rose-300);--chart-2:var(--color-rose-500);--chart-3:var(--color-rose-600);--chart-4:var(--color-rose-700);--chart-5:var(--color-rose-800);--sidebar-primary:var(--color-rose-600);--sidebar-primary-foreground:var(--color-rose-50);--sidebar-ring:var(--color-rose-400)}.theme-rose .theme-container:is(.dark *){--primary:var(--color-rose-500);--primary-foreground:var(--color-rose-50);--ring:var(--color-rose-900);--sidebar-primary:var(--color-rose-500);--sidebar-primary-foreground:var(--color-rose-50);--sidebar-ring:var(--color-rose-900)}.theme-purple .theme-container{--primary:var(--color-purple-600);--primary-foreground:var(--color-purple-50);--ring:var(--color-purple-400);--chart-1:var(--color-purple-300);--chart-2:var(--color-purple-500);--chart-3:var(--color-purple-600);--chart-4:var(--color-purple-700);--chart-5:var(--color-purple-800);--sidebar-primary:var(--color-purple-600);--sidebar-primary-foreground:var(--color-purple-50);--sidebar-ring:var(--color-purple-400)}.theme-purple .theme-container:is(.dark *){--primary:var(--color-purple-500);--primary-foreground:var(--color-purple-50);--ring:var(--color-purple-900);--sidebar-primary:var(--color-purple-500);--sidebar-primary-foreground:var(--color-purple-50);--sidebar-ring:var(--color-purple-900)}.theme-orange .theme-container{--primary:var(--color-orange-600);--primary-foreground:var(--color-orange-50);--ring:var(--color-orange-400);--chart-1:var(--color-orange-300);--chart-2:var(--color-orange-500);--chart-3:var(--color-orange-600);--chart-4:var(--color-orange-700);--chart-5:var(--color-orange-800);--sidebar-primary:var(--color-orange-600);--sidebar-primary-foreground:var(--color-orange-50);--sidebar-ring:var(--color-orange-400)}.theme-orange .theme-container:is(.dark *){--primary:var(--color-orange-500);--primary-foreground:var(--color-orange-50);--ring:var(--color-orange-900);--sidebar-primary:var(--color-orange-500);--sidebar-primary-foreground:var(--color-orange-50);--sidebar-ring:var(--color-orange-900)}.theme-teal .theme-container{--primary:var(--color-teal-600);--primary-foreground:var(--color-teal-50);--chart-1:var(--color-teal-300);--chart-2:var(--color-teal-500);--chart-3:var(--color-teal-600);--chart-4:var(--color-teal-700);--chart-5:var(--color-teal-800);--sidebar-primary:var(--color-teal-600);--sidebar-primary-foreground:var(--color-teal-50);--sidebar-ring:var(--color-teal-400)}.theme-teal .theme-container:is(.dark *){--primary:var(--color-teal-500);--primary-foreground:var(--color-teal-50);--sidebar-primary:var(--color-teal-500);--sidebar-primary-foreground:var(--color-teal-50);--sidebar-ring:var(--color-teal-900)}.theme-mono .theme-container{--font-sans:var(--font-mono);--primary:var(--color-stone-600);--primary-foreground:var(--color-stone-50);--chart-1:var(--color-stone-300);--chart-2:var(--color-stone-500);--chart-3:var(--color-stone-600);--chart-4:var(--color-stone-700);--chart-5:var(--color-stone-800);--sidebar-primary:var(--color-stone-600);--sidebar-primary-foreground:var(--color-stone-50);--sidebar-ring:var(--color-stone-400)}.theme-mono .theme-container:is(.dark *){--primary:var(--color-stone-500);--primary-foreground:var(--color-stone-50);--sidebar-primary:var(--color-stone-500);--sidebar-primary-foreground:var(--color-stone-50);--sidebar-ring:var(--color-stone-900)}@media (min-width:1024px){.theme-mono .theme-container{--font-sans:var(--font-mono);--radius:.45em;--text-lg:1rem;--text-xl:1.1rem;--text-2xl:1.2rem;--text-3xl:1.3rem;--text-4xl:1.4rem;--text-5xl:1.5rem;--text-6xl:1.6rem;--text-7xl:1.7rem;--text-8xl:1.8rem;--text-base:.85rem;--text-sm:.8rem;--spacing:.222222rem}}.theme-mono .theme-container .rounded-xs,.theme-mono .theme-container .rounded-sm,.theme-mono .theme-container .rounded-md,.theme-mono .theme-container .rounded-lg,.theme-mono .theme-container .rounded-xl{border-radius:0}.theme-mono .theme-container .shadow-xs,.theme-mono .theme-container .shadow-sm,.theme-mono .theme-container .shadow-md,.theme-mono .theme-container .shadow-lg,.theme-mono .theme-container .shadow-xl{box-shadow:none}.theme-mono .theme-container [data-slot=toggle-group],.theme-mono .theme-container [data-slot=toggle-group-item]{--tw-shadow:0 0 #0000!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important;border-radius:0!important}.theme-scaled .theme-container{--chart-1:var(--color-blue-300);--chart-2:var(--color-blue-500);--chart-3:var(--color-blue-600);--chart-4:var(--color-blue-700);--chart-5:var(--color-blue-800)}@media (min-width:1024px){.theme-scaled .theme-container{--radius:.45em;--text-lg:1rem;--text-xl:1.1rem;--text-2xl:1.2rem;--text-3xl:1.3rem;--text-4xl:1.4rem;--text-5xl:1.5rem;--text-6xl:1.6rem;--text-7xl:1.7rem;--text-8xl:1.8rem;--text-base:.85rem;--text-sm:.8rem;--spacing:.2rem}}.theme-scaled .theme-container [data-slot=select-trigger],.theme-scaled .theme-container [data-slot=toggle-group-item]{--spacing:.2rem}.theme-scaled .theme-container [data-slot=card]{border-radius:var(--radius);padding-block:calc(var(--spacing)*4);gap:calc(var(--spacing)*2)}.theme-scaled .theme-container [data-slot=card].pb-0{padding-bottom:0}.theme-red .theme-container{--primary:var(--color-red-600);--primary-foreground:var(--color-red-50);--ring:var(--color-red-400);--chart-1:var(--color-red-300);--chart-2:var(--color-red-500);--chart-3:var(--color-red-600);--chart-4:var(--color-red-700);--chart-5:var(--color-red-800);--sidebar-primary:var(--color-red-600);--sidebar-primary-foreground:var(--color-red-50);--sidebar-ring:var(--color-red-400)}.theme-red .theme-container:is(.dark *){--primary:var(--color-red-500);--primary-foreground:var(--color-red-50);--ring:var(--color-red-900);--sidebar-primary:var(--color-red-500);--sidebar-primary-foreground:var(--color-red-50);--sidebar-ring:var(--color-red-900)}.theme-yellow .theme-container{--primary:var(--color-yellow-400);--primary-foreground:var(--color-yellow-900);--ring:var(--color-yellow-400);--chart-1:var(--color-yellow-300);--chart-2:var(--color-yellow-500);--chart-3:var(--color-yellow-600);--chart-4:var(--color-yellow-700);--chart-5:var(--color-yellow-800);--sidebar-primary:var(--color-yellow-600);--sidebar-primary-foreground:var(--color-yellow-50);--sidebar-ring:var(--color-yellow-400)}.theme-yellow .theme-container:is(.dark *){--primary:var(--color-yellow-500);--primary-foreground:var(--color-yellow-900);--ring:var(--color-yellow-900);--sidebar-primary:var(--color-yellow-500);--sidebar-primary-foreground:var(--color-yellow-50);--sidebar-ring:var(--color-yellow-900)}.theme-violet .theme-container{--primary:var(--color-violet-600);--primary-foreground:var(--color-violet-50);--ring:var(--color-violet-400);--chart-1:var(--color-violet-300);--chart-2:var(--color-violet-500);--chart-3:var(--color-violet-600);--chart-4:var(--color-violet-700);--chart-5:var(--color-violet-800);--sidebar-primary:var(--color-violet-600);--sidebar-primary-foreground:var(--color-violet-50);--sidebar-ring:var(--color-violet-400)}.theme-violet .theme-container:is(.dark *){--primary:var(--color-violet-500);--primary-foreground:var(--color-violet-50);--ring:var(--color-violet-900);--sidebar-primary:var(--color-violet-500);--sidebar-primary-foreground:var(--color-violet-50);--sidebar-ring:var(--color-violet-900)}:root{--radius:.625rem;--background:oklch(100% 0 0);--foreground:oklch(14.5% 0 0);--card:oklch(100% 0 0);--card-foreground:oklch(14.5% 0 0);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.5% 0 0);--primary:oklch(20.5% 0 0);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(97% 0 0);--secondary-foreground:oklch(20.5% 0 0);--muted:oklch(97% 0 0);--muted-foreground:oklch(55.6% 0 0);--accent:oklch(97% 0 0);--accent-foreground:oklch(20.5% 0 0);--destructive:oklch(57.7% .245 27.325);--border:oklch(92.2% 0 0);--input:oklch(92.2% 0 0);--ring:oklch(70.8% 0 0);--chart-1:var(--color-blue-300);--chart-2:var(--color-blue-500);--chart-3:var(--color-blue-600);--chart-4:var(--color-blue-700);--chart-5:var(--color-blue-800);--sidebar:oklch(98.5% 0 0);--sidebar-foreground:oklch(14.5% 0 0);--sidebar-primary:oklch(20.5% 0 0);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(97% 0 0);--sidebar-accent-foreground:oklch(20.5% 0 0);--sidebar-border:oklch(92.2% 0 0);--sidebar-ring:oklch(70.8% 0 0);--surface:oklch(98% 0 0);--surface-foreground:var(--foreground);--code:var(--surface);--code-foreground:var(--surface-foreground);--code-highlight:oklch(96% 0 0);--code-number:oklch(56% 0 0);--selection:oklch(14.5% 0 0);--selection-foreground:oklch(100% 0 0);--color-blue-300:oklch(77.8% .108 231.731);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.9% .234 260.011);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(41.9% .243 267.218);--brand:oklch(62.3% .214 259.815);--highlight:oklch(85.2% .199 91.936)}.dark{--background:oklch(14.5% 0 0);--foreground:oklch(98.5% 0 0);--card:oklch(20.5% 0 0);--card-foreground:oklch(98.5% 0 0);--popover:oklch(26.9% 0 0);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(92.2% 0 0);--primary-foreground:oklch(20.5% 0 0);--secondary:oklch(26.9% 0 0);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(26.9% 0 0);--muted-foreground:oklch(70.8% 0 0);--accent:oklch(37.1% 0 0);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.6% 0 0);--chart-1:var(--color-blue-300);--chart-2:var(--color-blue-500);--chart-3:var(--color-blue-600);--chart-4:var(--color-blue-700);--chart-5:var(--color-blue-800);--sidebar:oklch(20.5% 0 0);--sidebar-foreground:oklch(98.5% 0 0);--sidebar-primary:oklch(48.8% .243 264.376);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(26.9% 0 0);--sidebar-accent-foreground:oklch(98.5% 0 0);--sidebar-border:oklch(100% 0 0/.1);--sidebar-ring:oklch(43.9% 0 0);--surface:oklch(20% 0 0);--surface-foreground:oklch(70.8% 0 0);--code:var(--surface);--code-foreground:var(--surface-foreground);--code-highlight:oklch(27% 0 0);--code-number:oklch(72% 0 0);--selection:oklch(92.2% 0 0);--selection-foreground:oklch(20.5% 0 0);--brand:oklch(70.7% .165 254.624);--highlight:oklch(85.2% .199 91.936)}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-font-weight{syntax:"*";inherits:false}@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-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-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}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0))}}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,auto))))}}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,auto))))}to{height:0}} \ No newline at end of file diff --git a/apps/www/src/app/(app)/docs/[[...slug]]/nav-items-grid.tsx b/apps/www/src/app/(app)/docs/[[...slug]]/nav-items-grid.tsx index f928bb6f3c..e3d9c19334 100644 --- a/apps/www/src/app/(app)/docs/[[...slug]]/nav-items-grid.tsx +++ b/apps/www/src/app/(app)/docs/[[...slug]]/nav-items-grid.tsx @@ -166,7 +166,7 @@ export function NavItemsGrid({ onClick={(e) => e.stopPropagation()} href={`#${group.title.toLowerCase().replace(/ /g, '-')}`} > -
+
diff --git a/apps/www/src/app/(app)/docs/[[...slug]]/page.tsx b/apps/www/src/app/(app)/docs/[[...slug]]/page.tsx index d544da60eb..64607bea67 100644 --- a/apps/www/src/app/(app)/docs/[[...slug]]/page.tsx +++ b/apps/www/src/app/(app)/docs/[[...slug]]/page.tsx @@ -28,11 +28,11 @@ import { registryExamples } from '@/registry/registry-examples'; import { proExamples } from '@/registry/registry-pro'; import { registryUI } from '@/registry/registry-ui'; -type DocPageProps = { +interface DocPageProps { params: Promise<{ slug: string[]; }>; -}; +} export const dynamic = 'force-static'; diff --git a/apps/www/src/app/(app)/docs/layout.tsx b/apps/www/src/app/(app)/docs/layout.tsx index aa6f80c078..b74613c674 100644 --- a/apps/www/src/app/(app)/docs/layout.tsx +++ b/apps/www/src/app/(app)/docs/layout.tsx @@ -8,9 +8,9 @@ import { cn } from '@/lib/utils'; // SYNC -type DocsLayoutProps = { +interface DocsLayoutProps { children: React.ReactNode; -}; +} export default function DocsLayout({ children }: DocsLayoutProps) { return ( diff --git a/apps/www/src/app/cn/docs/[[...slug]]/page.tsx b/apps/www/src/app/cn/docs/[[...slug]]/page.tsx index abef7ef061..7822b03143 100644 --- a/apps/www/src/app/cn/docs/[[...slug]]/page.tsx +++ b/apps/www/src/app/cn/docs/[[...slug]]/page.tsx @@ -28,11 +28,11 @@ import { registryExamples } from '@/registry/registry-examples'; import { proExamples } from '@/registry/registry-pro'; import { registryUI } from '@/registry/registry-ui'; -type DocPageProps = { +interface DocPageProps { params: Promise<{ slug: string[]; }>; -}; +} export const dynamic = 'force-static'; diff --git a/apps/www/src/app/dev/markdownStreamDemo.tsx b/apps/www/src/app/dev/markdownStreamDemo.tsx index d333026bdf..6258bd776c 100644 --- a/apps/www/src/app/dev/markdownStreamDemo.tsx +++ b/apps/www/src/app/dev/markdownStreamDemo.tsx @@ -503,13 +503,13 @@ export const MarkdownStreamDemo = () => { ); }; -type TChunks = { +interface TChunks { chunks: { index: number; text: string; }[]; linebreaks: number; -}; +} function splitChunksByLinebreak(chunks: string[]) { const result: TChunks[] = []; @@ -540,7 +540,10 @@ function splitChunksByLinebreak(chunks: string[]) { return result; } -type TChunk = { chunk: string; delayInMs: number }; +interface TChunk { + chunk: string; + delayInMs: number; +} const transformedChunks = (chunks: string[]): TChunk[] => { const result: TChunk[] = []; const joiner = new MarkdownJoiner(); diff --git a/apps/www/src/app/globals.css b/apps/www/src/app/globals.css index 41fead9905..d7ee7a82a2 100644 --- a/apps/www/src/app/globals.css +++ b/apps/www/src/app/globals.css @@ -189,7 +189,6 @@ text-rendering: optimizeLegibility; } - /* biome-ignore lint/a11y/useGenericFontNames: shadcn */ @supports (font: -apple-system-body) and (-webkit-appearance: none) { [data-wrapper] { @apply min-[1800px]:border-t; @@ -368,7 +367,6 @@ color: var(--shiki-light); @variant dark { - /* biome-ignore lint/suspicious/noDuplicateProperties: shiki */ color: var(--shiki-dark) !important; } } diff --git a/apps/www/src/app/layout.tsx b/apps/www/src/app/layout.tsx index 88b525dc29..831ff08987 100644 --- a/apps/www/src/app/layout.tsx +++ b/apps/www/src/app/layout.tsx @@ -74,9 +74,9 @@ export const viewport: Viewport = { themeColor: META_THEME_COLORS.light, }; -type RootLayoutProps = { +interface RootLayoutProps { children: React.ReactNode; -}; +} export default function RootLayout({ children }: RootLayoutProps) { return ( diff --git a/apps/www/src/components/api-list.tsx b/apps/www/src/components/api-list.tsx index 752c6f6d40..e83bc62534 100644 --- a/apps/www/src/components/api-list.tsx +++ b/apps/www/src/components/api-list.tsx @@ -14,7 +14,7 @@ import { } from './ui/accordion'; import { Card, CardContent } from './ui/card'; -type Item = { +interface Item { children: ReactNode; name: string; type: string; @@ -23,7 +23,7 @@ type Item = { optional?: boolean; required?: boolean; value?: string; -}; +} const APIContext = createContext<{ listType?: string; name?: string }>({}); @@ -92,7 +92,7 @@ export function APIItem({ onClick={(e) => e.stopPropagation()} href={`#${id}`} > -
+
@@ -189,12 +189,12 @@ export function APIMethods({ children, ...props }: APIListProps) { ); } -type APIListProps = { +interface APIListProps { children: ReactNode; collapsed?: boolean; listType?: string; type?: string; -}; +} export function APIList({ children, @@ -237,7 +237,7 @@ export function APIList({ onClick={(e) => e.stopPropagation()} href={`#${id}`} > -
+
@@ -354,7 +354,7 @@ export function APISubListItem({ onClick={(e) => e.stopPropagation()} href={`#${id}`} > -
+
diff --git a/apps/www/src/components/block-viewer.tsx b/apps/www/src/components/block-viewer.tsx index 66cc6be48c..20a7c18764 100644 --- a/apps/www/src/components/block-viewer.tsx +++ b/apps/www/src/components/block-viewer.tsx @@ -61,7 +61,7 @@ import { cn } from '@/lib/utils'; // SYNC -type BlockViewerContext = { +interface BlockViewerContext { activeFile: string | null; dependencies: string[]; highlightedFiles: @@ -82,7 +82,7 @@ type BlockViewerContext = { view: 'code' | 'preview'; setActiveFile: (file: string) => void; setView: (view: 'code' | 'preview') => void; -}; +} const BlockViewerContext = React.createContext(null); @@ -306,7 +306,7 @@ function BlockViewerToolbar({ block }: { block: boolean }) { > )} - +
@@ -495,7 +495,7 @@ function BlockViewerCode({ size }: { size?: 'default' | 'sm' }) {
diff --git a/apps/www/src/components/component-installation.tsx b/apps/www/src/components/component-installation.tsx index caf3b9d7fd..fdf0938885 100644 --- a/apps/www/src/components/component-installation.tsx +++ b/apps/www/src/components/component-installation.tsx @@ -14,7 +14,7 @@ import { ComponentPreview } from './component-preview'; import { H2, H3, Step, Steps } from './typography'; import { Tabs, TabsContent, TabsList, TabsTrigger } from './ui/tabs'; -type ComponentInstallationProps = { +interface ComponentInstallationProps { __dependencies__?: string; __highlightedFiles__?: string; __item__?: string; @@ -29,7 +29,7 @@ type ComponentInstallationProps = { name?: string; tree?: any; usage?: string[]; -}; +} export function ComponentInstallation({ __dependencies__: __registryDependencies__ = '[]', diff --git a/apps/www/src/components/counting-numbers.tsx b/apps/www/src/components/counting-numbers.tsx index 1aa37b4a22..32473b37e5 100644 --- a/apps/www/src/components/counting-numbers.tsx +++ b/apps/www/src/components/counting-numbers.tsx @@ -54,7 +54,7 @@ export const useCounting = ({ return number; }; -export type CountingNumbersProps = { +export interface CountingNumbersProps { value: number; className?: string; duration?: number; @@ -62,7 +62,7 @@ export type CountingNumbersProps = { noAnimation?: boolean; reverse?: boolean; start?: number; -}; +} export function CountingNumbers({ className, diff --git a/apps/www/src/components/docs-nav.tsx b/apps/www/src/components/docs-nav.tsx index c2d516c8da..85ffa54e13 100644 --- a/apps/www/src/components/docs-nav.tsx +++ b/apps/www/src/components/docs-nav.tsx @@ -182,7 +182,7 @@ export function DocsNav({ config }: { config: DocsConfig }) { /> {filter && ( \n \n
\n )}\n \n
\n );\n};\n\nfunction BlockComment({\n discussion,\n isLast,\n}: {\n discussion: TDiscussion;\n isLast: boolean;\n}) {\n const [editingId, setEditingId] = React.useState(null);\n\n return (\n \n
\n {discussion.comments.map((comment, index) => (\n \n ))}\n \n
\n\n {!isLast &&
}\n \n );\n}\n\nconst useResolvedDiscussion = (\n commentNodes: NodeEntry[],\n blockPath: Path\n) => {\n const { api, getOption, setOption } = useEditorPlugin(commentPlugin);\n\n const discussions = usePluginOption(discussionPlugin, 'discussions');\n\n const getLeafCommentIds = (leaf: TCommentText) =>\n getCommentKeys(leaf)\n .map(getCommentKeyId)\n .filter((id): id is string => Boolean(id) && id !== 'draft');\n\n const map = getOption('uniquePathMap');\n const nextMap = new Map(map);\n let mapChanged = false;\n\n commentNodes.forEach(([node]) => {\n const ids = getLeafCommentIds(node);\n if (ids.length === 0) return;\n\n ids.forEach((id) => {\n const previousPath = nextMap.get(id);\n\n // If there are no comment nodes in the corresponding path in the map, then update it.\n if (PathApi.isPath(previousPath)) {\n const nodes = api.comment.node({ id, at: previousPath });\n\n if (!nodes) {\n nextMap.set(id, blockPath);\n mapChanged = true;\n }\n\n return;\n }\n // TODO: fix throw error\n nextMap.set(id, blockPath);\n mapChanged = true;\n });\n });\n\n if (mapChanged) {\n setOption('uniquePathMap', nextMap);\n }\n\n const commentsIds = new Set(\n commentNodes.flatMap(([node]) => getLeafCommentIds(node))\n );\n\n const resolvedDiscussions = discussions\n .map((d: TDiscussion) => ({\n ...d,\n createdAt: new Date(d.createdAt),\n }))\n .filter((item: TDiscussion) => {\n /** If comment cross blocks just show it in the first block */\n const commentsPathMap = getOption('uniquePathMap');\n const firstBlockPath = commentsPathMap.get(item.id);\n\n if (!firstBlockPath) return false;\n if (!PathApi.equals(firstBlockPath, blockPath)) return false;\n\n return (\n api.comment.has({ id: item.id }) &&\n commentsIds.has(item.id) &&\n !item.isResolved\n );\n });\n\n return resolvedDiscussions;\n};\n", + "content": "'use client';\n\nimport * as React from 'react';\n\nimport type { PlateElementProps, RenderNodeWrapper } from 'platejs/react';\n\nimport { getDraftCommentKey } from '@platejs/comment';\nimport { CommentPlugin } from '@platejs/comment/react';\nimport { getTransientSuggestionKey } from '@platejs/suggestion';\nimport { SuggestionPlugin } from '@platejs/suggestion/react';\nimport {\n MessageSquareTextIcon,\n MessagesSquareIcon,\n PencilLineIcon,\n} from 'lucide-react';\nimport {\n type AnyPluginConfig,\n type NodeEntry,\n type Path,\n type TCommentText,\n type TElement,\n type TSuggestionText,\n PathApi,\n TextApi,\n} from 'platejs';\nimport { useEditorPlugin, useEditorRef, usePluginOption } from 'platejs/react';\n\nimport { Button } from '@/components/ui/button';\nimport {\n Popover,\n PopoverAnchor,\n PopoverContent,\n PopoverTrigger,\n} from '@/components/ui/popover';\nimport { commentPlugin } from '@/registry/components/editor/plugins/comment-kit';\nimport {\n type TDiscussion,\n discussionPlugin,\n} from '@/registry/components/editor/plugins/discussion-kit';\nimport { suggestionPlugin } from '@/registry/components/editor/plugins/suggestion-kit';\n\nimport {\n BlockSuggestionCard,\n isResolvedSuggestion,\n useResolveSuggestion,\n} from './block-suggestion';\nimport { Comment, CommentCreateForm } from './comment';\n\nexport const BlockDiscussion: RenderNodeWrapper = (props) => {\n const { editor, element } = props;\n\n const commentsApi = editor.getApi(CommentPlugin).comment;\n const blockPath = editor.api.findPath(element);\n\n // avoid duplicate in table or column\n if (!blockPath || blockPath.length > 1) return;\n\n const draftCommentNode = commentsApi.node({ at: blockPath, isDraft: true });\n\n const commentNodes = [...commentsApi.nodes({ at: blockPath })];\n\n const suggestionNodes = [\n ...editor.getApi(SuggestionPlugin).suggestion.nodes({ at: blockPath }),\n ].filter(([node]) => !node[getTransientSuggestionKey()]);\n\n if (\n commentNodes.length === 0 &&\n suggestionNodes.length === 0 &&\n !draftCommentNode\n ) {\n return;\n }\n\n return (props) => (\n \n );\n};\n\nconst BlockCommentContent = ({\n blockPath,\n children,\n commentNodes,\n draftCommentNode,\n suggestionNodes,\n}: PlateElementProps & {\n blockPath: Path;\n commentNodes: NodeEntry[];\n draftCommentNode: NodeEntry | undefined;\n suggestionNodes: NodeEntry[];\n}) => {\n const editor = useEditorRef();\n const resolvedSuggestions = useResolveSuggestion(suggestionNodes, blockPath);\n const resolvedDiscussions = useResolvedDiscussion(commentNodes, blockPath);\n\n const suggestionsCount = resolvedSuggestions.length;\n const discussionsCount = resolvedDiscussions.length;\n const totalCount = suggestionsCount + discussionsCount;\n\n const activeSuggestionId = usePluginOption(suggestionPlugin, 'activeId');\n const activeSuggestion =\n activeSuggestionId &&\n resolvedSuggestions.find((s) => s.suggestionId === activeSuggestionId);\n\n const commentingBlock = usePluginOption(commentPlugin, 'commentingBlock');\n const activeCommentId = usePluginOption(commentPlugin, 'activeId');\n const isCommenting = activeCommentId === getDraftCommentKey();\n const activeDiscussion =\n activeCommentId &&\n resolvedDiscussions.find((d) => d.id === activeCommentId);\n\n const noneActive = !activeSuggestion && !activeDiscussion;\n\n const sortedMergedData = [\n ...resolvedDiscussions,\n ...resolvedSuggestions,\n ].sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());\n\n const selected =\n resolvedDiscussions.some((d) => d.id === activeCommentId) ||\n resolvedSuggestions.some((s) => s.suggestionId === activeSuggestionId);\n\n const [_open, setOpen] = React.useState(selected);\n\n // in some cases, we may comment the multiple blocks\n const commentingCurrent =\n !!commentingBlock && PathApi.equals(blockPath, commentingBlock);\n\n const open =\n _open ||\n selected ||\n (isCommenting && !!draftCommentNode && commentingCurrent);\n\n const anchorElement = React.useMemo(() => {\n let activeNode: NodeEntry | undefined;\n\n if (activeSuggestion) {\n activeNode = suggestionNodes.find(\n ([node]) =>\n TextApi.isText(node) &&\n editor.getApi(SuggestionPlugin).suggestion.nodeId(node) ===\n activeSuggestion.suggestionId\n );\n }\n\n if (activeCommentId) {\n if (activeCommentId === getDraftCommentKey()) {\n activeNode = draftCommentNode;\n } else {\n activeNode = commentNodes.find(\n ([node]) =>\n editor.getApi(commentPlugin).comment.nodeId(node) ===\n activeCommentId\n );\n }\n }\n\n if (!activeNode) return null;\n\n return editor.api.toDOMNode(activeNode[0])!;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n open,\n activeSuggestion,\n activeCommentId,\n editor.api,\n suggestionNodes,\n draftCommentNode,\n commentNodes,\n ]);\n\n if (suggestionsCount + resolvedDiscussions.length === 0 && !draftCommentNode)\n return
{children}
;\n\n return (\n
\n {\n if (!_open_ && isCommenting && draftCommentNode) {\n editor.tf.unsetNodes(getDraftCommentKey(), {\n at: [],\n mode: 'lowest',\n match: (n) => n[getDraftCommentKey()],\n });\n }\n setOpen(_open_);\n }}\n >\n
{children}
\n {anchorElement && (\n \n )}\n\n e.preventDefault()}\n onOpenAutoFocus={(e) => e.preventDefault()}\n align=\"center\"\n side=\"bottom\"\n >\n {isCommenting ? (\n \n ) : noneActive ? (\n sortedMergedData.map((item, index) =>\n isResolvedSuggestion(item) ? (\n \n ) : (\n \n )\n )\n ) : (\n <>\n {activeSuggestion && (\n \n )}\n\n {activeDiscussion && (\n \n )}\n \n )}\n \n\n {totalCount > 0 && (\n
\n \n \n {suggestionsCount > 0 && discussionsCount === 0 && (\n \n )}\n\n {suggestionsCount === 0 && discussionsCount > 0 && (\n \n )}\n\n {suggestionsCount > 0 && discussionsCount > 0 && (\n \n )}\n\n {totalCount}\n \n \n
\n )}\n \n
\n );\n};\n\nfunction BlockComment({\n discussion,\n isLast,\n}: {\n discussion: TDiscussion;\n isLast: boolean;\n}) {\n const [editingId, setEditingId] = React.useState(null);\n\n return (\n \n
\n {discussion.comments.map((comment, index) => (\n \n ))}\n \n
\n\n {!isLast &&
}\n \n );\n}\n\nconst useResolvedDiscussion = (\n commentNodes: NodeEntry[],\n blockPath: Path\n) => {\n const { api, getOption, setOption } = useEditorPlugin(commentPlugin);\n\n const discussions = usePluginOption(discussionPlugin, 'discussions');\n\n commentNodes.forEach(([node]) => {\n const id = api.comment.nodeId(node);\n const map = getOption('uniquePathMap');\n\n if (!id) return;\n\n const previousPath = map.get(id);\n\n // If there are no comment nodes in the corresponding path in the map, then update it.\n if (PathApi.isPath(previousPath)) {\n const nodes = api.comment.node({ id, at: previousPath });\n\n if (!nodes) {\n setOption('uniquePathMap', new Map(map).set(id, blockPath));\n return;\n }\n\n return;\n }\n // TODO: fix throw error\n setOption('uniquePathMap', new Map(map).set(id, blockPath));\n });\n\n const commentsIds = new Set(\n commentNodes.map(([node]) => api.comment.nodeId(node)).filter(Boolean)\n );\n\n const resolvedDiscussions = discussions\n .map((d: TDiscussion) => ({\n ...d,\n createdAt: new Date(d.createdAt),\n }))\n .filter((item: TDiscussion) => {\n /** If comment cross blocks just show it in the first block */\n const commentsPathMap = getOption('uniquePathMap');\n const firstBlockPath = commentsPathMap.get(item.id);\n\n if (!firstBlockPath) return false;\n if (!PathApi.equals(firstBlockPath, blockPath)) return false;\n\n return (\n api.comment.has({ id: item.id }) &&\n commentsIds.has(item.id) &&\n !item.isResolved\n );\n });\n\n return resolvedDiscussions;\n};\n", "type": "registry:ui" }, { @@ -38,7 +38,7 @@ }, { "path": "src/registry/ui/comment.tsx", - "content": "'use client';\n\nimport * as React from 'react';\n\nimport type { CreatePlateEditorOptions } from 'platejs/react';\n\nimport { getCommentKey, getDraftCommentKey } from '@platejs/comment';\nimport { CommentPlugin, useCommentId } from '@platejs/comment/react';\nimport {\n differenceInDays,\n differenceInHours,\n differenceInMinutes,\n format,\n} from 'date-fns';\nimport {\n ArrowUpIcon,\n CheckIcon,\n MoreHorizontalIcon,\n PencilIcon,\n TrashIcon,\n XIcon,\n} from 'lucide-react';\nimport { type Value, KEYS, nanoid, NodeApi } from 'platejs';\nimport {\n Plate,\n useEditorPlugin,\n useEditorRef,\n usePlateEditor,\n usePluginOption,\n} from 'platejs/react';\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';\nimport { Button } from '@/components/ui/button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { cn } from '@/lib/utils';\nimport { BasicMarksKit } from '@/registry/components/editor/plugins/basic-marks-kit';\nimport {\n type TDiscussion,\n discussionPlugin,\n} from '@/registry/components/editor/plugins/discussion-kit';\n\nimport { Editor, EditorContainer } from './editor';\n\nexport type TComment = {\n id: string;\n contentRich: Value;\n createdAt: Date;\n discussionId: string;\n isEdited: boolean;\n userId: string;\n /** Direct author name from DOCX import (bypasses user lookup) */\n authorName?: string;\n /** Author initials from DOCX import */\n authorInitials?: string;\n /** OOXML paraId for round-trip DOCX threading fidelity */\n paraId?: string;\n /** OOXML parentParaId for round-trip DOCX reply threading */\n parentParaId?: string;\n};\n\nexport function Comment(props: {\n comment: TComment;\n discussionLength: number;\n editingId: string | null;\n index: number;\n setEditingId: React.Dispatch>;\n documentContent?: string;\n showDocumentContent?: boolean;\n onEditorClick?: () => void;\n}) {\n const {\n comment,\n discussionLength,\n documentContent,\n editingId,\n index,\n setEditingId,\n showDocumentContent = false,\n onEditorClick,\n } = props;\n\n const editor = useEditorRef();\n const userInfo = usePluginOption(discussionPlugin, 'user', comment.userId);\n const currentUserId = usePluginOption(discussionPlugin, 'currentUserId');\n\n const resolveDiscussion = async (id: string) => {\n const updatedDiscussions = editor\n .getOption(discussionPlugin, 'discussions')\n .map((discussion) => {\n if (discussion.id === id) {\n return { ...discussion, isResolved: true };\n }\n return discussion;\n });\n editor.setOption(discussionPlugin, 'discussions', updatedDiscussions);\n };\n\n const removeDiscussion = async (id: string) => {\n const updatedDiscussions = editor\n .getOption(discussionPlugin, 'discussions')\n .filter((discussion) => discussion.id !== id);\n editor.setOption(discussionPlugin, 'discussions', updatedDiscussions);\n };\n\n const updateComment = async (input: {\n id: string;\n contentRich: Value;\n discussionId: string;\n isEdited: boolean;\n }) => {\n const updatedDiscussions = editor\n .getOption(discussionPlugin, 'discussions')\n .map((discussion) => {\n if (discussion.id === input.discussionId) {\n const updatedComments = discussion.comments.map((comment) => {\n if (comment.id === input.id) {\n return {\n ...comment,\n contentRich: input.contentRich,\n isEdited: true,\n updatedAt: new Date(),\n };\n }\n return comment;\n });\n return { ...discussion, comments: updatedComments };\n }\n return discussion;\n });\n editor.setOption(discussionPlugin, 'discussions', updatedDiscussions);\n };\n\n const { tf } = useEditorPlugin(CommentPlugin);\n\n // Replace to your own backend or refer to potion\n const isMyComment = currentUserId === comment.userId;\n\n const initialValue = comment.contentRich;\n\n const commentEditor = useCommentEditor(\n {\n id: comment.id,\n value: initialValue,\n },\n [initialValue]\n );\n\n const onCancel = () => {\n setEditingId(null);\n commentEditor.tf.replaceNodes(initialValue, {\n at: [],\n children: true,\n });\n };\n\n const onSave = () => {\n void updateComment({\n id: comment.id,\n contentRich: commentEditor.children,\n discussionId: comment.discussionId,\n isEdited: true,\n });\n setEditingId(null);\n };\n\n const onResolveComment = () => {\n void resolveDiscussion(comment.discussionId);\n tf.comment.unsetMark({ id: comment.discussionId });\n };\n\n const isFirst = index === 0;\n const isLast = index === discussionLength - 1;\n const isEditing = editingId && editingId === comment.id;\n\n const [hovering, setHovering] = React.useState(false);\n const [dropdownOpen, setDropdownOpen] = React.useState(false);\n\n return (\n setHovering(true)}\n onMouseLeave={() => setHovering(false)}\n >\n
\n \n \n \n {comment.authorInitials ??\n comment.authorName?.[0] ??\n userInfo?.name?.[0]}\n \n \n

\n {/* Use direct author name from DOCX or fall back to user lookup */}\n {comment.authorName ?? userInfo?.name}\n

\n\n
\n \n {formatCommentDate(new Date(comment.createdAt))}\n \n {comment.isEdited && (edited)}\n
\n\n {isMyComment && (hovering || dropdownOpen) && (\n
\n {index === 0 && (\n \n \n \n )}\n\n {\n setTimeout(() => {\n commentEditor.tf.focus({ edge: 'endEditor' });\n }, 0);\n }}\n onRemoveComment={() => {\n if (discussionLength === 1) {\n tf.comment.unsetMark({ id: comment.discussionId });\n void removeDiscussion(comment.discussionId);\n }\n }}\n comment={comment}\n dropdownOpen={dropdownOpen}\n setDropdownOpen={setDropdownOpen}\n setEditingId={setEditingId}\n />\n
\n )}\n
\n\n {isFirst && showDocumentContent && (\n
\n {discussionLength > 1 && (\n
\n )}\n
\n {documentContent &&
{documentContent}
}\n
\n )}\n\n
\n {!isLast && (\n
\n )}\n \n \n onEditorClick?.()}\n />\n\n {isEditing && (\n
\n ) => {\n e.stopPropagation();\n void onCancel();\n }}\n >\n
\n \n
\n \n\n ) => {\n e.stopPropagation();\n void onSave();\n }}\n >\n
\n \n
\n \n
\n )}\n
\n
\n
\n
\n );\n}\n\nfunction CommentMoreDropdown(props: {\n comment: TComment;\n dropdownOpen: boolean;\n setDropdownOpen: React.Dispatch>;\n setEditingId: React.Dispatch>;\n onCloseAutoFocus?: () => void;\n onRemoveComment?: () => void;\n}) {\n const {\n comment,\n dropdownOpen,\n setDropdownOpen,\n setEditingId,\n onCloseAutoFocus,\n onRemoveComment,\n } = props;\n\n const editor = useEditorRef();\n\n const selectedEditCommentRef = React.useRef(false);\n\n const onDeleteComment = React.useCallback(() => {\n if (!comment.id)\n return alert('You are operating too quickly, please try again later.');\n\n // Find and update the discussion\n const updatedDiscussions = editor\n .getOption(discussionPlugin, 'discussions')\n .map((discussion) => {\n if (discussion.id !== comment.discussionId) {\n return discussion;\n }\n\n const commentIndex = discussion.comments.findIndex(\n (c) => c.id === comment.id\n );\n if (commentIndex === -1) {\n return discussion;\n }\n\n return {\n ...discussion,\n comments: [\n ...discussion.comments.slice(0, commentIndex),\n ...discussion.comments.slice(commentIndex + 1),\n ],\n };\n });\n\n // Save back to session storage\n editor.setOption(discussionPlugin, 'discussions', updatedDiscussions);\n onRemoveComment?.();\n }, [comment.discussionId, comment.id, editor, onRemoveComment]);\n\n const onEditComment = React.useCallback(() => {\n selectedEditCommentRef.current = true;\n\n if (!comment.id)\n return alert('You are operating too quickly, please try again later.');\n\n setEditingId(comment.id);\n }, [comment.id, setEditingId]);\n\n return (\n \n e.stopPropagation()}>\n \n \n {\n if (selectedEditCommentRef.current) {\n onCloseAutoFocus?.();\n selectedEditCommentRef.current = false;\n }\n\n return e.preventDefault();\n }}\n >\n \n \n \n Edit comment\n \n \n \n Delete comment\n \n \n \n \n );\n}\n\nconst useCommentEditor = (\n options: Omit = {},\n deps: any[] = []\n) => {\n const commentEditor = usePlateEditor(\n {\n id: 'comment',\n plugins: BasicMarksKit,\n value: [],\n ...options,\n },\n deps\n );\n\n return commentEditor;\n};\n\nexport function CommentCreateForm({\n autoFocus = false,\n className,\n discussionId: discussionIdProp,\n focusOnMount = false,\n}: {\n autoFocus?: boolean;\n className?: string;\n discussionId?: string;\n focusOnMount?: boolean;\n}) {\n const discussions = usePluginOption(discussionPlugin, 'discussions');\n\n const editor = useEditorRef();\n const commentId = useCommentId();\n const discussionId = discussionIdProp ?? commentId;\n\n const userInfo = usePluginOption(discussionPlugin, 'currentUser');\n const [commentValue, setCommentValue] = React.useState();\n const commentContent = React.useMemo(\n () =>\n commentValue\n ? NodeApi.string({ children: commentValue, type: KEYS.p })\n : '',\n [commentValue]\n );\n const commentEditor = useCommentEditor();\n\n React.useEffect(() => {\n if (commentEditor && focusOnMount) {\n commentEditor.tf.focus();\n }\n }, [commentEditor, focusOnMount]);\n\n const onAddComment = React.useCallback(async () => {\n if (!commentValue) return;\n\n commentEditor.tf.reset();\n\n if (discussionId) {\n // Get existing discussion\n const discussion = discussions.find((d) => d.id === discussionId);\n if (!discussion) {\n // Mock creating suggestion\n const newDiscussion: TDiscussion = {\n id: discussionId,\n comments: [\n {\n id: nanoid(),\n contentRich: commentValue,\n createdAt: new Date(),\n discussionId,\n isEdited: false,\n userId: editor.getOption(discussionPlugin, 'currentUserId'),\n },\n ],\n createdAt: new Date(),\n isResolved: false,\n userId: editor.getOption(discussionPlugin, 'currentUserId'),\n };\n\n editor.setOption(discussionPlugin, 'discussions', [\n ...discussions,\n newDiscussion,\n ]);\n return;\n }\n\n // Create reply comment\n const comment: TComment = {\n id: nanoid(),\n contentRich: commentValue,\n createdAt: new Date(),\n discussionId,\n isEdited: false,\n userId: editor.getOption(discussionPlugin, 'currentUserId'),\n };\n\n // Add reply to discussion comments\n const updatedDiscussion = {\n ...discussion,\n comments: [...discussion.comments, comment],\n };\n\n // Filter out old discussion and add updated one\n const updatedDiscussions = discussions\n .filter((d) => d.id !== discussionId)\n .concat(updatedDiscussion);\n\n editor.setOption(discussionPlugin, 'discussions', updatedDiscussions);\n\n return;\n }\n\n const commentsNodeEntry = editor\n .getApi(CommentPlugin)\n .comment.nodes({ at: [], isDraft: true });\n\n if (commentsNodeEntry.length === 0) return;\n\n const documentContent = commentsNodeEntry\n .map(([node]) => node.text)\n .join('');\n\n const _discussionId = nanoid();\n // Mock creating new discussion\n const newDiscussion: TDiscussion = {\n id: _discussionId,\n comments: [\n {\n id: nanoid(),\n contentRich: commentValue,\n createdAt: new Date(),\n discussionId: _discussionId,\n isEdited: false,\n userId: editor.getOption(discussionPlugin, 'currentUserId'),\n },\n ],\n createdAt: new Date(),\n documentContent,\n isResolved: false,\n userId: editor.getOption(discussionPlugin, 'currentUserId'),\n };\n\n editor.setOption(discussionPlugin, 'discussions', [\n ...discussions,\n newDiscussion,\n ]);\n\n const id = newDiscussion.id;\n\n commentsNodeEntry.forEach(([, path]) => {\n editor.tf.setNodes(\n {\n [getCommentKey(id)]: true,\n },\n { at: path, split: true }\n );\n editor.tf.unsetNodes([getDraftCommentKey()], { at: path });\n });\n }, [commentValue, commentEditor.tf, discussionId, editor, discussions]);\n\n return (\n
\n
\n {/* Replace to your own backend or refer to potion */}\n \n \n {userInfo?.name?.[0]}\n \n
\n\n
\n {\n setCommentValue(value);\n }}\n editor={commentEditor}\n >\n \n {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n onAddComment();\n }\n }}\n placeholder=\"Reply...\"\n autoComplete=\"off\"\n autoFocus={autoFocus}\n />\n\n {\n e.stopPropagation();\n onAddComment();\n }}\n >\n
\n \n
\n \n
\n \n
\n
\n );\n}\n\nexport const formatCommentDate = (date: Date, baseDate: Date = new Date()) => {\n const now = baseDate;\n const diffMinutes = differenceInMinutes(now, date);\n const diffHours = differenceInHours(now, date);\n const diffDays = differenceInDays(now, date);\n\n if (diffMinutes < 60) {\n return `${diffMinutes}m`;\n }\n if (diffHours < 24) {\n return `${diffHours}h`;\n }\n if (diffDays < 2) {\n return `${diffDays}d`;\n }\n\n return format(date, 'MM/dd/yyyy');\n};\n", + "content": "'use client';\n\nimport * as React from 'react';\n\nimport type { CreatePlateEditorOptions } from 'platejs/react';\n\nimport { getCommentKey, getDraftCommentKey } from '@platejs/comment';\nimport { CommentPlugin, useCommentId } from '@platejs/comment/react';\nimport {\n differenceInDays,\n differenceInHours,\n differenceInMinutes,\n format,\n} from 'date-fns';\nimport {\n ArrowUpIcon,\n CheckIcon,\n MoreHorizontalIcon,\n PencilIcon,\n TrashIcon,\n XIcon,\n} from 'lucide-react';\nimport { type Value, KEYS, nanoid, NodeApi } from 'platejs';\nimport {\n Plate,\n useEditorPlugin,\n useEditorRef,\n usePlateEditor,\n usePluginOption,\n} from 'platejs/react';\n\nimport { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar';\nimport { Button } from '@/components/ui/button';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { cn } from '@/lib/utils';\nimport { BasicMarksKit } from '@/registry/components/editor/plugins/basic-marks-kit';\nimport {\n type TDiscussion,\n discussionPlugin,\n} from '@/registry/components/editor/plugins/discussion-kit';\n\nimport { Editor, EditorContainer } from './editor';\n\nexport type TComment = {\n id: string;\n contentRich: Value;\n createdAt: Date;\n discussionId: string;\n isEdited: boolean;\n userId: string;\n};\n\nexport function Comment(props: {\n comment: TComment;\n discussionLength: number;\n editingId: string | null;\n index: number;\n setEditingId: React.Dispatch>;\n documentContent?: string;\n showDocumentContent?: boolean;\n onEditorClick?: () => void;\n}) {\n const {\n comment,\n discussionLength,\n documentContent,\n editingId,\n index,\n setEditingId,\n showDocumentContent = false,\n onEditorClick,\n } = props;\n\n const editor = useEditorRef();\n const userInfo = usePluginOption(discussionPlugin, 'user', comment.userId);\n const currentUserId = usePluginOption(discussionPlugin, 'currentUserId');\n\n const resolveDiscussion = async (id: string) => {\n const updatedDiscussions = editor\n .getOption(discussionPlugin, 'discussions')\n .map((discussion) => {\n if (discussion.id === id) {\n return { ...discussion, isResolved: true };\n }\n return discussion;\n });\n editor.setOption(discussionPlugin, 'discussions', updatedDiscussions);\n };\n\n const removeDiscussion = async (id: string) => {\n const updatedDiscussions = editor\n .getOption(discussionPlugin, 'discussions')\n .filter((discussion) => discussion.id !== id);\n editor.setOption(discussionPlugin, 'discussions', updatedDiscussions);\n };\n\n const updateComment = async (input: {\n id: string;\n contentRich: Value;\n discussionId: string;\n isEdited: boolean;\n }) => {\n const updatedDiscussions = editor\n .getOption(discussionPlugin, 'discussions')\n .map((discussion) => {\n if (discussion.id === input.discussionId) {\n const updatedComments = discussion.comments.map((comment) => {\n if (comment.id === input.id) {\n return {\n ...comment,\n contentRich: input.contentRich,\n isEdited: true,\n updatedAt: new Date(),\n };\n }\n return comment;\n });\n return { ...discussion, comments: updatedComments };\n }\n return discussion;\n });\n editor.setOption(discussionPlugin, 'discussions', updatedDiscussions);\n };\n\n const { tf } = useEditorPlugin(CommentPlugin);\n\n // Replace to your own backend or refer to potion\n const isMyComment = currentUserId === comment.userId;\n\n const initialValue = comment.contentRich;\n\n const commentEditor = useCommentEditor(\n {\n id: comment.id,\n value: initialValue,\n },\n [initialValue]\n );\n\n const onCancel = () => {\n setEditingId(null);\n commentEditor.tf.replaceNodes(initialValue, {\n at: [],\n children: true,\n });\n };\n\n const onSave = () => {\n void updateComment({\n id: comment.id,\n contentRich: commentEditor.children,\n discussionId: comment.discussionId,\n isEdited: true,\n });\n setEditingId(null);\n };\n\n const onResolveComment = () => {\n void resolveDiscussion(comment.discussionId);\n tf.comment.unsetMark({ id: comment.discussionId });\n };\n\n const isFirst = index === 0;\n const isLast = index === discussionLength - 1;\n const isEditing = editingId && editingId === comment.id;\n\n const [hovering, setHovering] = React.useState(false);\n const [dropdownOpen, setDropdownOpen] = React.useState(false);\n\n return (\n setHovering(true)}\n onMouseLeave={() => setHovering(false)}\n >\n
\n \n \n {userInfo?.name?.[0]}\n \n

\n {/* Replace to your own backend or refer to potion */}\n {userInfo?.name}\n

\n\n
\n \n {formatCommentDate(new Date(comment.createdAt))}\n \n {comment.isEdited && (edited)}\n
\n\n {isMyComment && (hovering || dropdownOpen) && (\n
\n {index === 0 && (\n \n \n \n )}\n\n {\n setTimeout(() => {\n commentEditor.tf.focus({ edge: 'endEditor' });\n }, 0);\n }}\n onRemoveComment={() => {\n if (discussionLength === 1) {\n tf.comment.unsetMark({ id: comment.discussionId });\n void removeDiscussion(comment.discussionId);\n }\n }}\n comment={comment}\n dropdownOpen={dropdownOpen}\n setDropdownOpen={setDropdownOpen}\n setEditingId={setEditingId}\n />\n
\n )}\n
\n\n {isFirst && showDocumentContent && (\n
\n {discussionLength > 1 && (\n
\n )}\n
\n {documentContent &&
{documentContent}
}\n
\n )}\n\n
\n {!isLast && (\n
\n )}\n \n \n onEditorClick?.()}\n />\n\n {isEditing && (\n
\n ) => {\n e.stopPropagation();\n void onCancel();\n }}\n >\n
\n \n
\n \n\n ) => {\n e.stopPropagation();\n void onSave();\n }}\n >\n
\n \n
\n \n
\n )}\n
\n
\n
\n
\n );\n}\n\nfunction CommentMoreDropdown(props: {\n comment: TComment;\n dropdownOpen: boolean;\n setDropdownOpen: React.Dispatch>;\n setEditingId: React.Dispatch>;\n onCloseAutoFocus?: () => void;\n onRemoveComment?: () => void;\n}) {\n const {\n comment,\n dropdownOpen,\n setDropdownOpen,\n setEditingId,\n onCloseAutoFocus,\n onRemoveComment,\n } = props;\n\n const editor = useEditorRef();\n\n const selectedEditCommentRef = React.useRef(false);\n\n const onDeleteComment = React.useCallback(() => {\n if (!comment.id)\n return alert('You are operating too quickly, please try again later.');\n\n // Find and update the discussion\n const updatedDiscussions = editor\n .getOption(discussionPlugin, 'discussions')\n .map((discussion) => {\n if (discussion.id !== comment.discussionId) {\n return discussion;\n }\n\n const commentIndex = discussion.comments.findIndex(\n (c) => c.id === comment.id\n );\n if (commentIndex === -1) {\n return discussion;\n }\n\n return {\n ...discussion,\n comments: [\n ...discussion.comments.slice(0, commentIndex),\n ...discussion.comments.slice(commentIndex + 1),\n ],\n };\n });\n\n // Save back to session storage\n editor.setOption(discussionPlugin, 'discussions', updatedDiscussions);\n onRemoveComment?.();\n }, [comment.discussionId, comment.id, editor, onRemoveComment]);\n\n const onEditComment = React.useCallback(() => {\n selectedEditCommentRef.current = true;\n\n if (!comment.id)\n return alert('You are operating too quickly, please try again later.');\n\n setEditingId(comment.id);\n }, [comment.id, setEditingId]);\n\n return (\n \n e.stopPropagation()}>\n \n \n {\n if (selectedEditCommentRef.current) {\n onCloseAutoFocus?.();\n selectedEditCommentRef.current = false;\n }\n\n return e.preventDefault();\n }}\n >\n \n \n \n Edit comment\n \n \n \n Delete comment\n \n \n \n \n );\n}\n\nconst useCommentEditor = (\n options: Omit = {},\n deps: any[] = []\n) => {\n const commentEditor = usePlateEditor(\n {\n id: 'comment',\n plugins: BasicMarksKit,\n value: [],\n ...options,\n },\n deps\n );\n\n return commentEditor;\n};\n\nexport function CommentCreateForm({\n autoFocus = false,\n className,\n discussionId: discussionIdProp,\n focusOnMount = false,\n}: {\n autoFocus?: boolean;\n className?: string;\n discussionId?: string;\n focusOnMount?: boolean;\n}) {\n const discussions = usePluginOption(discussionPlugin, 'discussions');\n\n const editor = useEditorRef();\n const commentId = useCommentId();\n const discussionId = discussionIdProp ?? commentId;\n\n const userInfo = usePluginOption(discussionPlugin, 'currentUser');\n const [commentValue, setCommentValue] = React.useState();\n const commentContent = React.useMemo(\n () =>\n commentValue\n ? NodeApi.string({ children: commentValue, type: KEYS.p })\n : '',\n [commentValue]\n );\n const commentEditor = useCommentEditor();\n\n React.useEffect(() => {\n if (commentEditor && focusOnMount) {\n commentEditor.tf.focus();\n }\n }, [commentEditor, focusOnMount]);\n\n const onAddComment = React.useCallback(async () => {\n if (!commentValue) return;\n\n commentEditor.tf.reset();\n\n if (discussionId) {\n // Get existing discussion\n const discussion = discussions.find((d) => d.id === discussionId);\n if (!discussion) {\n // Mock creating suggestion\n const newDiscussion: TDiscussion = {\n id: discussionId,\n comments: [\n {\n id: nanoid(),\n contentRich: commentValue,\n createdAt: new Date(),\n discussionId,\n isEdited: false,\n userId: editor.getOption(discussionPlugin, 'currentUserId'),\n },\n ],\n createdAt: new Date(),\n isResolved: false,\n userId: editor.getOption(discussionPlugin, 'currentUserId'),\n };\n\n editor.setOption(discussionPlugin, 'discussions', [\n ...discussions,\n newDiscussion,\n ]);\n return;\n }\n\n // Create reply comment\n const comment: TComment = {\n id: nanoid(),\n contentRich: commentValue,\n createdAt: new Date(),\n discussionId,\n isEdited: false,\n userId: editor.getOption(discussionPlugin, 'currentUserId'),\n };\n\n // Add reply to discussion comments\n const updatedDiscussion = {\n ...discussion,\n comments: [...discussion.comments, comment],\n };\n\n // Filter out old discussion and add updated one\n const updatedDiscussions = discussions\n .filter((d) => d.id !== discussionId)\n .concat(updatedDiscussion);\n\n editor.setOption(discussionPlugin, 'discussions', updatedDiscussions);\n\n return;\n }\n\n const commentsNodeEntry = editor\n .getApi(CommentPlugin)\n .comment.nodes({ at: [], isDraft: true });\n\n if (commentsNodeEntry.length === 0) return;\n\n const documentContent = commentsNodeEntry\n .map(([node]) => node.text)\n .join('');\n\n const _discussionId = nanoid();\n // Mock creating new discussion\n const newDiscussion: TDiscussion = {\n id: _discussionId,\n comments: [\n {\n id: nanoid(),\n contentRich: commentValue,\n createdAt: new Date(),\n discussionId: _discussionId,\n isEdited: false,\n userId: editor.getOption(discussionPlugin, 'currentUserId'),\n },\n ],\n createdAt: new Date(),\n documentContent,\n isResolved: false,\n userId: editor.getOption(discussionPlugin, 'currentUserId'),\n };\n\n editor.setOption(discussionPlugin, 'discussions', [\n ...discussions,\n newDiscussion,\n ]);\n\n const id = newDiscussion.id;\n\n commentsNodeEntry.forEach(([, path]) => {\n editor.tf.setNodes(\n {\n [getCommentKey(id)]: true,\n },\n { at: path, split: true }\n );\n editor.tf.unsetNodes([getDraftCommentKey()], { at: path });\n });\n }, [commentValue, commentEditor.tf, discussionId, editor, discussions]);\n\n return (\n
\n
\n {/* Replace to your own backend or refer to potion */}\n \n \n {userInfo?.name?.[0]}\n \n
\n\n
\n {\n setCommentValue(value);\n }}\n editor={commentEditor}\n >\n \n {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n onAddComment();\n }\n }}\n placeholder=\"Reply...\"\n autoComplete=\"off\"\n autoFocus={autoFocus}\n />\n\n {\n e.stopPropagation();\n onAddComment();\n }}\n >\n
\n \n
\n \n
\n \n
\n
\n );\n}\n\nexport const formatCommentDate = (date: Date) => {\n const now = new Date();\n const diffMinutes = differenceInMinutes(now, date);\n const diffHours = differenceInHours(now, date);\n const diffDays = differenceInDays(now, date);\n\n if (diffMinutes < 60) {\n return `${diffMinutes}m`;\n }\n if (diffHours < 24) {\n return `${diffHours}h`;\n }\n if (diffDays < 2) {\n return `${diffDays}d`;\n }\n\n return format(date, 'MM/dd/yyyy');\n};\n", "type": "registry:ui" } ], diff --git a/apps/www/public/r/discussion-kit.json b/apps/www/public/r/discussion-kit.json index 8e52381a87..d4a3329098 100644 --- a/apps/www/public/r/discussion-kit.json +++ b/apps/www/public/r/discussion-kit.json @@ -9,7 +9,7 @@ "files": [ { "path": "src/registry/components/editor/plugins/discussion-kit.tsx", - "content": "'use client';\n\nimport type { TComment } from '@/registry/ui/comment';\n\nimport { createPlatePlugin } from 'platejs/react';\n\nimport { BlockDiscussion } from '@/registry/ui/block-discussion';\n\nexport type TDiscussion = {\n id: string;\n comments: TComment[];\n createdAt: Date;\n isResolved: boolean;\n userId: string;\n documentContent?: string;\n /** Direct author name from DOCX import (bypasses user lookup) */\n authorName?: string;\n /** Author initials from DOCX import */\n authorInitials?: string;\n /** OOXML paraId for round-trip DOCX threading fidelity */\n paraId?: string;\n};\n\nconst discussionsData: TDiscussion[] = [\n {\n id: 'discussion1',\n comments: [\n {\n id: 'comment1',\n contentRich: [\n {\n children: [\n {\n text: 'Comments are a great way to provide feedback and discuss changes.',\n },\n ],\n type: 'p',\n },\n ],\n createdAt: new Date(Date.now() - 600_000),\n discussionId: 'discussion1',\n isEdited: false,\n userId: 'charlie',\n },\n {\n id: 'comment2',\n contentRich: [\n {\n children: [\n {\n text: 'Agreed! The link to the docs makes it easy to learn more.',\n },\n ],\n type: 'p',\n },\n ],\n createdAt: new Date(Date.now() - 500_000),\n discussionId: 'discussion1',\n isEdited: false,\n userId: 'bob',\n },\n ],\n createdAt: new Date(),\n documentContent: 'comments',\n isResolved: false,\n userId: 'charlie',\n },\n {\n id: 'discussion2',\n comments: [\n {\n id: 'comment1',\n contentRich: [\n {\n children: [\n {\n text: 'Nice demonstration of overlapping annotations with both comments and suggestions!',\n },\n ],\n type: 'p',\n },\n ],\n createdAt: new Date(Date.now() - 300_000),\n discussionId: 'discussion2',\n isEdited: false,\n userId: 'bob',\n },\n {\n id: 'comment2',\n contentRich: [\n {\n children: [\n {\n text: 'This helps users understand how powerful the editor can be.',\n },\n ],\n type: 'p',\n },\n ],\n createdAt: new Date(Date.now() - 200_000),\n discussionId: 'discussion2',\n isEdited: false,\n userId: 'charlie',\n },\n ],\n createdAt: new Date(),\n documentContent: 'overlapping',\n isResolved: false,\n userId: 'bob',\n },\n];\n\nconst avatarUrl = (seed: string) =>\n `https://api.dicebear.com/9.x/glass/svg?seed=${seed}`;\n\nconst usersData: Record<\n string,\n { id: string; avatarUrl: string; name: string; hue?: number }\n> = {\n alice: {\n id: 'alice',\n avatarUrl: avatarUrl('alice6'),\n name: 'Alice',\n },\n bob: {\n id: 'bob',\n avatarUrl: avatarUrl('bob4'),\n name: 'Bob',\n },\n charlie: {\n id: 'charlie',\n avatarUrl: avatarUrl('charlie2'),\n name: 'Charlie',\n },\n};\n\n// This plugin is purely UI. It's only used to store the discussions and users data\nexport const discussionPlugin = createPlatePlugin({\n key: 'discussion',\n options: {\n currentUserId: 'alice',\n discussions: discussionsData,\n users: usersData,\n },\n})\n .configure({\n render: { aboveNodes: BlockDiscussion },\n })\n .extendSelectors(({ getOption }) => ({\n currentUser: () => getOption('users')[getOption('currentUserId')],\n user: (id: string) => getOption('users')[id],\n }));\n\nexport const DiscussionKit = [discussionPlugin];\n", + "content": "'use client';\n\nimport type { TComment } from '@/registry/ui/comment';\n\nimport { createPlatePlugin } from 'platejs/react';\n\nimport { BlockDiscussion } from '@/registry/ui/block-discussion';\n\nexport type TDiscussion = {\n id: string;\n comments: TComment[];\n createdAt: Date;\n isResolved: boolean;\n userId: string;\n documentContent?: string;\n};\n\nconst discussionsData: TDiscussion[] = [\n {\n id: 'discussion1',\n comments: [\n {\n id: 'comment1',\n contentRich: [\n {\n children: [\n {\n text: 'Comments are a great way to provide feedback and discuss changes.',\n },\n ],\n type: 'p',\n },\n ],\n createdAt: new Date(Date.now() - 600_000),\n discussionId: 'discussion1',\n isEdited: false,\n userId: 'charlie',\n },\n {\n id: 'comment2',\n contentRich: [\n {\n children: [\n {\n text: 'Agreed! The link to the docs makes it easy to learn more.',\n },\n ],\n type: 'p',\n },\n ],\n createdAt: new Date(Date.now() - 500_000),\n discussionId: 'discussion1',\n isEdited: false,\n userId: 'bob',\n },\n ],\n createdAt: new Date(),\n documentContent: 'comments',\n isResolved: false,\n userId: 'charlie',\n },\n {\n id: 'discussion2',\n comments: [\n {\n id: 'comment1',\n contentRich: [\n {\n children: [\n {\n text: 'Nice demonstration of overlapping annotations with both comments and suggestions!',\n },\n ],\n type: 'p',\n },\n ],\n createdAt: new Date(Date.now() - 300_000),\n discussionId: 'discussion2',\n isEdited: false,\n userId: 'bob',\n },\n {\n id: 'comment2',\n contentRich: [\n {\n children: [\n {\n text: 'This helps users understand how powerful the editor can be.',\n },\n ],\n type: 'p',\n },\n ],\n createdAt: new Date(Date.now() - 200_000),\n discussionId: 'discussion2',\n isEdited: false,\n userId: 'charlie',\n },\n ],\n createdAt: new Date(),\n documentContent: 'overlapping',\n isResolved: false,\n userId: 'bob',\n },\n];\n\nconst avatarUrl = (seed: string) =>\n `https://api.dicebear.com/9.x/glass/svg?seed=${seed}`;\n\nconst usersData: Record<\n string,\n { id: string; avatarUrl: string; name: string; hue?: number }\n> = {\n alice: {\n id: 'alice',\n avatarUrl: avatarUrl('alice6'),\n name: 'Alice',\n },\n bob: {\n id: 'bob',\n avatarUrl: avatarUrl('bob4'),\n name: 'Bob',\n },\n charlie: {\n id: 'charlie',\n avatarUrl: avatarUrl('charlie2'),\n name: 'Charlie',\n },\n};\n\n// This plugin is purely UI. It's only used to store the discussions and users data\nexport const discussionPlugin = createPlatePlugin({\n key: 'discussion',\n options: {\n currentUserId: 'alice',\n discussions: discussionsData,\n users: usersData,\n },\n})\n .configure({\n render: { aboveNodes: BlockDiscussion },\n })\n .extendSelectors(({ getOption }) => ({\n currentUser: () => getOption('users')[getOption('currentUserId')],\n user: (id: string) => getOption('users')[id],\n }));\n\nexport const DiscussionKit = [discussionPlugin];\n", "type": "registry:component" } ] diff --git a/apps/www/public/r/docx-export-kit.json b/apps/www/public/r/docx-export-kit.json index 47e20abb92..7193ddeee5 100644 --- a/apps/www/public/r/docx-export-kit.json +++ b/apps/www/public/r/docx-export-kit.json @@ -15,7 +15,7 @@ "files": [ { "path": "src/registry/components/editor/plugins/docx-export-kit.tsx", - "content": "/**\n * Editor kit optimized for DOCX export.\n *\n * Uses docx-specific static components for elements that require\n * inline styles instead of Tailwind classes (which don't work in DOCX):\n * - Code blocks: Need inline syntax highlighting colors and line breaks\n * - Columns: Need table layout instead of flexbox\n * - Equations: Need inline font styling (KaTeX doesn't work in DOCX)\n * - Callouts: Need table layout for icon + content\n * - TOC: Need anchor links with proper paragraph breaks\n *\n * Tables use base version with juice CSS inlining.\n */\n\nimport { CalloutElementDocx } from '@/registry/ui/callout-node-static';\nimport {\n CodeBlockElementDocx,\n CodeLineElementDocx,\n CodeSyntaxLeafDocx,\n} from '@/registry/ui/code-block-node-static';\nimport {\n ColumnElementDocx,\n ColumnGroupElementDocx,\n} from '@/registry/ui/column-node-static';\nimport {\n EquationElementDocx,\n InlineEquationElementDocx,\n} from '@/registry/ui/equation-node-static';\nimport { SuggestionLeafDocx } from '@/registry/ui/suggestion-node-docx';\nimport { TocElementDocx } from '@/registry/ui/toc-node-static';\nimport { DocxExportPlugin } from '@platejs/docx-io';\nimport { KEYS } from 'platejs';\n\n/**\n * Editor kit for DOCX export.\n *\n * Uses standard static components for most elements (with juice CSS inlining),\n * but uses docx-specific components for elements that need special handling:\n * - Code blocks (syntax highlighting, line breaks)\n * - Columns (table layout instead of flexbox)\n * - Equations (inline font instead of KaTeX)\n * - Callouts (table layout for icon placement)\n * - TOC (anchor links with paragraph breaks)\n * - Suggestions ( instead of / to avoid unwanted formatting)\n *\n * Tables use base version with juice CSS inlining.\n */\nexport const DocxExportKit = [\n DocxExportPlugin.extend({\n override: {\n components: {\n [KEYS.codeBlock]: CodeBlockElementDocx,\n [KEYS.codeLine]: CodeLineElementDocx,\n [KEYS.codeSyntax]: CodeSyntaxLeafDocx,\n [KEYS.column]: ColumnElementDocx,\n [KEYS.columnGroup]: ColumnGroupElementDocx,\n [KEYS.equation]: EquationElementDocx,\n [KEYS.inlineEquation]: InlineEquationElementDocx,\n [KEYS.callout]: CalloutElementDocx,\n [KEYS.toc]: TocElementDocx,\n [KEYS.suggestion]: SuggestionLeafDocx,\n },\n },\n }),\n];\n", + "content": "/**\n * Editor kit optimized for DOCX export.\n *\n * Uses docx-specific static components for elements that require\n * inline styles instead of Tailwind classes (which don't work in DOCX):\n * - Code blocks: Need inline syntax highlighting colors and line breaks\n * - Columns: Need table layout instead of flexbox\n * - Equations: Need inline font styling (KaTeX doesn't work in DOCX)\n * - Callouts: Need table layout for icon + content\n * - TOC: Need anchor links with proper paragraph breaks\n *\n * Tables use base version with juice CSS inlining.\n */\n\nimport { CalloutElementDocx } from '@/registry/ui/callout-node-static';\nimport {\n CodeBlockElementDocx,\n CodeLineElementDocx,\n CodeSyntaxLeafDocx,\n} from '@/registry/ui/code-block-node-static';\nimport {\n ColumnElementDocx,\n ColumnGroupElementDocx,\n} from '@/registry/ui/column-node-static';\nimport {\n EquationElementDocx,\n InlineEquationElementDocx,\n} from '@/registry/ui/equation-node-static';\nimport { TocElementDocx } from '@/registry/ui/toc-node-static';\nimport { DocxExportPlugin } from '@platejs/docx-io';\nimport { KEYS } from 'platejs';\n\n/**\n * Editor kit for DOCX export.\n *\n * Uses standard static components for most elements (with juice CSS inlining),\n * but uses docx-specific components for elements that need special handling:\n * - Code blocks (syntax highlighting, line breaks)\n * - Columns (table layout instead of flexbox)\n * - Equations (inline font instead of KaTeX)\n * - Callouts (table layout for icon placement)\n * - TOC (anchor links with paragraph breaks)\n *\n * Tables use base version with juice CSS inlining.\n */\nexport const DocxExportKit = [\n DocxExportPlugin.configure({\n override: {\n components: {\n [KEYS.codeBlock]: CodeBlockElementDocx,\n [KEYS.codeLine]: CodeLineElementDocx,\n [KEYS.codeSyntax]: CodeSyntaxLeafDocx,\n [KEYS.column]: ColumnElementDocx,\n [KEYS.columnGroup]: ColumnGroupElementDocx,\n [KEYS.equation]: EquationElementDocx,\n [KEYS.inlineEquation]: InlineEquationElementDocx,\n [KEYS.callout]: CalloutElementDocx,\n [KEYS.toc]: TocElementDocx,\n },\n },\n }),\n];\n", "type": "registry:component" } ] diff --git a/apps/www/public/r/export-toolbar-button.json b/apps/www/public/r/export-toolbar-button.json index 88c889f7fa..54654c38da 100644 --- a/apps/www/public/r/export-toolbar-button.json +++ b/apps/www/public/r/export-toolbar-button.json @@ -18,7 +18,7 @@ "files": [ { "path": "src/registry/ui/export-toolbar-button.tsx", - "content": "'use client';\n\nimport * as React from 'react';\n\nimport type { DropdownMenuProps } from '@radix-ui/react-dropdown-menu';\n\nimport { exportToDocx, type DocxExportDiscussion } from '@platejs/docx-io';\nimport { MarkdownPlugin } from '@platejs/markdown';\nimport { ArrowDownToLineIcon } from 'lucide-react';\nimport type { SlatePlugin } from 'platejs';\nimport { createSlateEditor } from 'platejs';\nimport { useEditorRef } from 'platejs/react';\nimport { serializeHtml } from 'platejs/static';\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { BaseEditorKit } from '@/registry/components/editor/editor-base-kit';\nimport { discussionPlugin } from '@/registry/components/editor/plugins/discussion-kit';\n\nimport { EditorStatic } from './editor-static';\nimport { ToolbarButton } from './toolbar';\nimport { DocxExportKit } from '@/registry/components/editor/plugins/docx-export-kit';\n\nconst siteUrl = 'https://platejs.org';\n\nexport function ExportToolbarButton(props: DropdownMenuProps) {\n const editor = useEditorRef();\n const [open, setOpen] = React.useState(false);\n\n const getCanvas = async () => {\n const { default: html2canvas } = await import('html2canvas-pro');\n\n const style = document.createElement('style');\n document.head.append(style);\n\n const canvas = await html2canvas(editor.api.toDOMNode(editor)!, {\n onclone: (document: Document) => {\n const editorElement = document.querySelector(\n '[contenteditable=\"true\"]'\n );\n if (editorElement) {\n Array.from(editorElement.querySelectorAll('*')).forEach((element) => {\n const existingStyle = element.getAttribute('style') || '';\n element.setAttribute(\n 'style',\n `${existingStyle}; font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif !important`\n );\n });\n }\n },\n });\n style.remove();\n\n return canvas;\n };\n\n const downloadFile = async (url: string, filename: string) => {\n const response = await fetch(url);\n\n const blob = await response.blob();\n const blobUrl = window.URL.createObjectURL(blob);\n\n const link = document.createElement('a');\n link.href = blobUrl;\n link.download = filename;\n document.body.append(link);\n link.click();\n link.remove();\n\n // Clean up the blob URL\n window.URL.revokeObjectURL(blobUrl);\n };\n\n const exportToPdf = async () => {\n const canvas = await getCanvas();\n\n const PDFLib = await import('pdf-lib');\n const pdfDoc = await PDFLib.PDFDocument.create();\n const page = pdfDoc.addPage([canvas.width, canvas.height]);\n const imageEmbed = await pdfDoc.embedPng(canvas.toDataURL('PNG'));\n const { height, width } = imageEmbed.scale(1);\n page.drawImage(imageEmbed, {\n height,\n width,\n x: 0,\n y: 0,\n });\n const pdfBase64 = await pdfDoc.saveAsBase64({ dataUri: true });\n\n await downloadFile(pdfBase64, 'plate.pdf');\n };\n\n const exportToImage = async () => {\n const canvas = await getCanvas();\n await downloadFile(canvas.toDataURL('image/png'), 'plate.png');\n };\n\n const exportToHtml = async () => {\n const editorStatic = createSlateEditor({\n plugins: BaseEditorKit,\n value: editor.children,\n });\n\n const editorHtml = await serializeHtml(editorStatic, {\n editorComponent: EditorStatic,\n props: { style: { padding: '0 calc(50% - 350px)', paddingBottom: '' } },\n });\n\n const tailwindCss = ``;\n const katexCss = ``;\n\n const html = `\n \n \n \n \n \n \n \n \n ${tailwindCss}\n ${katexCss}\n \n \n \n ${editorHtml}\n \n `;\n\n const url = `data:text/html;charset=utf-8,${encodeURIComponent(html)}`;\n\n await downloadFile(url, 'plate.html');\n };\n\n const exportToMarkdown = async () => {\n const md = editor.getApi(MarkdownPlugin).markdown.serialize();\n const url = `data:text/markdown;charset=utf-8,${encodeURIComponent(md)}`;\n await downloadFile(url, 'plate.md');\n };\n\n const exportToWord = async () => {\n // Get discussions and users from the discussion plugin for comment export\n const discussions = editor.getOption(discussionPlugin, 'discussions') ?? [];\n const users = editor.getOption(discussionPlugin, 'users') ?? {};\n\n // Resolve display name: prefer authorName (from DOCX import), fall back to users lookup\n const resolveUser = (\n userId: string,\n authorName?: string\n ): { id: string; name: string } | undefined => {\n const name = authorName ?? users[userId]?.name;\n return name ? { id: userId, name } : undefined;\n };\n\n // Convert discussions to export format\n const exportDiscussions: DocxExportDiscussion[] = discussions.map((d) => ({\n id: d.id,\n comments: d.comments?.map((c) => ({\n contentRich: c.contentRich,\n createdAt: c.createdAt,\n id: c.id,\n paraId: c.paraId,\n parentParaId: c.parentParaId,\n userId: c.userId,\n user: resolveUser(c.userId, c.authorName),\n })),\n createdAt: d.createdAt,\n documentContent: d.documentContent,\n paraId: d.paraId,\n userId: d.userId,\n user: resolveUser(d.userId, d.authorName),\n }));\n\n const blob = await exportToDocx(editor.children, {\n editorPlugins: [...BaseEditorKit, ...DocxExportKit] as SlatePlugin[],\n tracking: {\n discussions: exportDiscussions,\n },\n });\n\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = 'plate.docx';\n document.body.append(link);\n link.click();\n link.remove();\n URL.revokeObjectURL(url);\n };\n\n return (\n \n \n \n \n \n \n\n \n \n \n Export as HTML\n \n \n Export as PDF\n \n \n Export as Image\n \n \n Export as Markdown\n \n \n Export as Word\n \n \n \n \n );\n}\n", + "content": "'use client';\n\nimport * as React from 'react';\n\nimport type { DropdownMenuProps } from '@radix-ui/react-dropdown-menu';\n\nimport { exportToDocx } from '@platejs/docx-io';\nimport { MarkdownPlugin } from '@platejs/markdown';\nimport { ArrowDownToLineIcon } from 'lucide-react';\nimport type { SlatePlugin } from 'platejs';\nimport { createSlateEditor } from 'platejs';\nimport { useEditorRef } from 'platejs/react';\nimport { serializeHtml } from 'platejs/static';\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\nimport { BaseEditorKit } from '@/registry/components/editor/editor-base-kit';\n\nimport { EditorStatic } from './editor-static';\nimport { ToolbarButton } from './toolbar';\nimport { DocxExportKit } from '@/registry/components/editor/plugins/docx-export-kit';\n\nconst siteUrl = 'https://platejs.org';\n\nexport function ExportToolbarButton(props: DropdownMenuProps) {\n const editor = useEditorRef();\n const [open, setOpen] = React.useState(false);\n\n const getCanvas = async () => {\n const { default: html2canvas } = await import('html2canvas-pro');\n\n const style = document.createElement('style');\n document.head.append(style);\n\n const canvas = await html2canvas(editor.api.toDOMNode(editor)!, {\n onclone: (document: Document) => {\n const editorElement = document.querySelector(\n '[contenteditable=\"true\"]'\n );\n if (editorElement) {\n Array.from(editorElement.querySelectorAll('*')).forEach((element) => {\n const existingStyle = element.getAttribute('style') || '';\n element.setAttribute(\n 'style',\n `${existingStyle}; font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif !important`\n );\n });\n }\n },\n });\n style.remove();\n\n return canvas;\n };\n\n const downloadFile = async (url: string, filename: string) => {\n const response = await fetch(url);\n\n const blob = await response.blob();\n const blobUrl = window.URL.createObjectURL(blob);\n\n const link = document.createElement('a');\n link.href = blobUrl;\n link.download = filename;\n document.body.append(link);\n link.click();\n link.remove();\n\n // Clean up the blob URL\n window.URL.revokeObjectURL(blobUrl);\n };\n\n const exportToPdf = async () => {\n const canvas = await getCanvas();\n\n const PDFLib = await import('pdf-lib');\n const pdfDoc = await PDFLib.PDFDocument.create();\n const page = pdfDoc.addPage([canvas.width, canvas.height]);\n const imageEmbed = await pdfDoc.embedPng(canvas.toDataURL('PNG'));\n const { height, width } = imageEmbed.scale(1);\n page.drawImage(imageEmbed, {\n height,\n width,\n x: 0,\n y: 0,\n });\n const pdfBase64 = await pdfDoc.saveAsBase64({ dataUri: true });\n\n await downloadFile(pdfBase64, 'plate.pdf');\n };\n\n const exportToImage = async () => {\n const canvas = await getCanvas();\n await downloadFile(canvas.toDataURL('image/png'), 'plate.png');\n };\n\n const exportToHtml = async () => {\n const editorStatic = createSlateEditor({\n plugins: BaseEditorKit,\n value: editor.children,\n });\n\n const editorHtml = await serializeHtml(editorStatic, {\n editorComponent: EditorStatic,\n props: { style: { padding: '0 calc(50% - 350px)', paddingBottom: '' } },\n });\n\n const tailwindCss = ``;\n const katexCss = ``;\n\n const html = `\n \n \n \n \n \n \n \n \n ${tailwindCss}\n ${katexCss}\n \n \n \n ${editorHtml}\n \n `;\n\n const url = `data:text/html;charset=utf-8,${encodeURIComponent(html)}`;\n\n await downloadFile(url, 'plate.html');\n };\n\n const exportToMarkdown = async () => {\n const md = editor.getApi(MarkdownPlugin).markdown.serialize();\n const url = `data:text/markdown;charset=utf-8,${encodeURIComponent(md)}`;\n await downloadFile(url, 'plate.md');\n };\n\n const exportToWord = async () => {\n const blob = await exportToDocx(editor.children, {\n editorPlugins: [...BaseEditorKit, ...DocxExportKit] as SlatePlugin[],\n });\n\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = 'plate.docx';\n document.body.append(link);\n link.click();\n link.remove();\n URL.revokeObjectURL(url);\n };\n\n return (\n \n \n \n \n \n \n\n \n \n \n Export as HTML\n \n \n Export as PDF\n \n \n Export as Image\n \n \n Export as Markdown\n \n \n Export as Word\n \n \n \n \n );\n}\n", "type": "registry:ui" } ], diff --git a/apps/www/public/r/import-toolbar-button.json b/apps/www/public/r/import-toolbar-button.json index d5b8404e2c..1e1c1bb8f9 100644 --- a/apps/www/public/r/import-toolbar-button.json +++ b/apps/www/public/r/import-toolbar-button.json @@ -14,7 +14,7 @@ "files": [ { "path": "src/registry/ui/import-toolbar-button.tsx", - "content": "'use client';\n\nimport * as React from 'react';\n\nimport type { DropdownMenuProps } from '@radix-ui/react-dropdown-menu';\n\nimport { getCommentKey } from '@platejs/comment';\nimport { importDocxWithTracking } from '@platejs/docx-io';\nimport { MarkdownPlugin } from '@platejs/markdown';\nimport { getSuggestionKey } from '@platejs/suggestion';\nimport { ArrowUpToLineIcon } from 'lucide-react';\nimport { KEYS, TextApi } from 'platejs';\nimport { useEditorRef } from 'platejs/react';\nimport { getEditorDOMFromHtmlString } from 'platejs/static';\nimport { useFilePicker } from 'use-file-picker';\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\n\nimport { commentPlugin } from '@/registry/components/editor/plugins/comment-kit';\nimport {\n discussionPlugin,\n type TDiscussion,\n} from '@/registry/components/editor/plugins/discussion-kit';\nimport { getDiscussionCounterSeed } from '../lib/discussion-ids';\nimport { ToolbarButton } from './toolbar';\n\ntype ImportType = 'html' | 'markdown';\n\nconst WHITESPACE_REGEX = /\\s+/;\n\nexport function ImportToolbarButton(props: DropdownMenuProps) {\n const editor = useEditorRef();\n const [open, setOpen] = React.useState(false);\n\n const getFileNodes = (text: string, type: ImportType) => {\n if (type === 'html') {\n const editorNode = getEditorDOMFromHtmlString(text);\n const nodes = editor.api.html.deserialize({\n element: editorNode,\n });\n\n return nodes;\n }\n\n if (type === 'markdown') {\n return editor.getApi(MarkdownPlugin).markdown.deserialize(text);\n }\n\n return [];\n };\n\n const { openFilePicker: openMdFilePicker } = useFilePicker({\n accept: ['.md', '.mdx'],\n multiple: false,\n onFilesSelected: async ({ plainFiles }) => {\n const text = await plainFiles[0].text();\n\n const nodes = getFileNodes(text, 'markdown');\n\n editor.tf.insertNodes(nodes);\n },\n });\n\n const { openFilePicker: openHtmlFilePicker } = useFilePicker({\n accept: ['text/html'],\n multiple: false,\n onFilesSelected: async ({ plainFiles }) => {\n const text = await plainFiles[0].text();\n\n const nodes = getFileNodes(text, 'html');\n\n editor.tf.insertNodes(nodes);\n },\n });\n\n const { openFilePicker: openDocxFilePicker } = useFilePicker({\n accept: ['.docx'],\n multiple: false,\n onFilesSelected: async ({ plainFiles }) => {\n const arrayBuffer = await plainFiles[0].arrayBuffer();\n\n // Compute next discussion number to avoid ID collisions\n const existingDiscussions =\n editor.getOption(discussionPlugin, 'discussions') ?? [];\n let discussionCounter = getDiscussionCounterSeed(existingDiscussions);\n\n // Import with full tracking support (suggestions + comments)\n const result = await importDocxWithTracking(editor as any, arrayBuffer, {\n suggestionKey: KEYS.suggestion,\n getSuggestionKey,\n commentKey: KEYS.comment,\n getCommentKey,\n isText: TextApi.isText,\n generateId: () => `discussion${++discussionCounter}`,\n });\n\n // Register imported users so suggestion/comment UI can resolve them\n if (result.users.length > 0) {\n const existingUsers = editor.getOption(discussionPlugin, 'users') ?? {};\n const updatedUsers = { ...existingUsers };\n\n for (const user of result.users) {\n if (!updatedUsers[user.id]) {\n updatedUsers[user.id] = {\n id: user.id,\n name: user.name,\n avatarUrl: `https://api.dicebear.com/9.x/glass/svg?seed=${encodeURIComponent(user.name)}`,\n };\n }\n }\n\n editor.setOption(discussionPlugin, 'users', updatedUsers);\n }\n\n // Add imported discussions to the discussion plugin\n if (result.discussions.length > 0) {\n // Convert imported discussions to TDiscussion format\n const newDiscussions: TDiscussion[] = result.discussions.map((d) => ({\n id: d.id,\n comments: (d.comments ?? []).map((c, index) => ({\n id: c.id || `comment${index + 1}`,\n contentRich:\n c.contentRich as TDiscussion['comments'][number]['contentRich'],\n createdAt: c.createdAt ?? new Date(),\n discussionId: d.id,\n isEdited: false,\n userId: c.userId ?? c.user?.id ?? 'imported-unknown',\n authorName: c.user?.name,\n authorInitials: c.user?.name\n ? c.user.name\n .split(WHITESPACE_REGEX)\n .slice(0, 2)\n .map((w) => w[0]?.toUpperCase() ?? '')\n .join('')\n : undefined,\n paraId: c.paraId,\n parentParaId: c.parentParaId,\n })),\n createdAt: d.createdAt ?? new Date(),\n documentContent: d.documentContent,\n isResolved: false,\n userId: d.userId ?? d.user?.id ?? 'imported-unknown',\n authorName: d.user?.name,\n authorInitials: d.user?.name\n ? d.user.name\n .split(WHITESPACE_REGEX)\n .slice(0, 2)\n .map((w) => w[0]?.toUpperCase() ?? '')\n .join('')\n : undefined,\n paraId: d.paraId,\n }));\n\n // Replace all discussions (not append) because importDocxWithTracking\n // replaces the entire editor content, making old discussions stale\n editor.setOption(discussionPlugin, 'discussions', newDiscussions);\n editor.setOption(commentPlugin, 'uniquePathMap', new Map());\n }\n\n // Log import results in dev only\n if (\n result.hasTracking &&\n result.errors.length > 0 &&\n process.env.NODE_ENV !== 'production'\n ) {\n console.warn('[DOCX Import] Errors:', result.errors);\n }\n },\n });\n\n return (\n \n \n \n \n \n \n\n \n \n {\n openHtmlFilePicker();\n }}\n >\n Import from HTML\n \n\n {\n openMdFilePicker();\n }}\n >\n Import from Markdown\n \n\n {\n openDocxFilePicker();\n }}\n >\n Import from Word\n \n \n \n \n );\n}\n", + "content": "'use client';\n\nimport * as React from 'react';\n\nimport type { DropdownMenuProps } from '@radix-ui/react-dropdown-menu';\n\nimport { importDocx } from '@platejs/docx-io';\nimport { MarkdownPlugin } from '@platejs/markdown';\nimport { ArrowUpToLineIcon } from 'lucide-react';\nimport { getEditorDOMFromHtmlString } from 'platejs/static';\nimport { useEditorRef } from 'platejs/react';\nimport { useFilePicker } from 'use-file-picker';\n\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuItem,\n DropdownMenuTrigger,\n} from '@/components/ui/dropdown-menu';\n\nimport { ToolbarButton } from './toolbar';\n\ntype ImportType = 'html' | 'markdown';\n\nexport function ImportToolbarButton(props: DropdownMenuProps) {\n const editor = useEditorRef();\n const [open, setOpen] = React.useState(false);\n\n const getFileNodes = (text: string, type: ImportType) => {\n if (type === 'html') {\n const editorNode = getEditorDOMFromHtmlString(text);\n const nodes = editor.api.html.deserialize({\n element: editorNode,\n });\n\n return nodes;\n }\n\n if (type === 'markdown') {\n return editor.getApi(MarkdownPlugin).markdown.deserialize(text);\n }\n\n return [];\n };\n\n const { openFilePicker: openMdFilePicker } = useFilePicker({\n accept: ['.md', '.mdx'],\n multiple: false,\n onFilesSelected: async ({ plainFiles }) => {\n const text = await plainFiles[0].text();\n\n const nodes = getFileNodes(text, 'markdown');\n\n editor.tf.insertNodes(nodes);\n },\n });\n\n const { openFilePicker: openHtmlFilePicker } = useFilePicker({\n accept: ['text/html'],\n multiple: false,\n onFilesSelected: async ({ plainFiles }) => {\n const text = await plainFiles[0].text();\n\n const nodes = getFileNodes(text, 'html');\n\n editor.tf.insertNodes(nodes);\n },\n });\n\n const { openFilePicker: openDocxFilePicker } = useFilePicker({\n accept: ['.docx'],\n multiple: false,\n onFilesSelected: async ({ plainFiles }) => {\n const arrayBuffer = await plainFiles[0].arrayBuffer();\n const result = await importDocx(editor, arrayBuffer);\n\n editor.tf.insertNodes(result.nodes as typeof editor.children);\n },\n });\n\n return (\n \n \n \n \n \n \n\n \n \n {\n openHtmlFilePicker();\n }}\n >\n Import from HTML\n \n\n {\n openMdFilePicker();\n }}\n >\n Import from Markdown\n \n\n {\n openDocxFilePicker();\n }}\n >\n Import from Word\n \n \n \n \n );\n}\n", "type": "registry:ui" } ], diff --git a/apps/www/public/r/table-node.json b/apps/www/public/r/table-node.json index 9d4355663f..bb8d629595 100644 --- a/apps/www/public/r/table-node.json +++ b/apps/www/public/r/table-node.json @@ -30,7 +30,7 @@ }, { "path": "src/registry/ui/table-node-static.tsx", - "content": "import * as React from 'react';\n\nimport type { TTableCellElement, TTableElement } from 'platejs';\nimport type { SlateElementProps } from 'platejs/static';\n\nimport { BaseTablePlugin } from '@platejs/table';\nimport { SlateElement } from 'platejs/static';\n\nimport { cn } from '@/lib/utils';\n\nexport function TableElementStatic({\n children,\n ...props\n}: SlateElementProps) {\n const { disableMarginLeft } = props.editor.getOptions(BaseTablePlugin);\n const marginLeft = disableMarginLeft ? 0 : props.element.marginLeft;\n\n return (\n \n
\n \n {children}\n \n
\n \n );\n}\n\nexport function TableRowElementStatic(props: SlateElementProps) {\n return (\n \n {props.children}\n \n );\n}\n\n/** Build inline border styles for DOCX export (all 4 sides per cell). */\nconst cellBorderStyles = (\n element: TTableCellElement\n): Record => {\n const b = element.borders;\n if (!b) return {};\n\n const fmt = (dir: 'bottom' | 'left' | 'right' | 'top') => {\n const border = b[dir];\n if (!border || !border.size) return;\n return `${border.size}px ${border.style || 'solid'} ${border.color || '#000'}`;\n };\n\n const styles: Record = {};\n const top = fmt('top');\n const right = fmt('right');\n const bottom = fmt('bottom');\n const left = fmt('left');\n\n if (top) styles.borderTop = top;\n if (right) styles.borderRight = right;\n if (bottom) styles.borderBottom = bottom;\n if (left) styles.borderLeft = left;\n\n return styles;\n};\n\nexport function TableCellElementStatic({\n isHeader,\n ...props\n}: SlateElementProps & {\n isHeader?: boolean;\n}) {\n const { editor, element } = props;\n const { api } = editor.getPlugin(BaseTablePlugin);\n\n const { minHeight, width } = api.table.getCellSize({ element });\n const borders = api.table.getCellBorders({ element });\n\n return (\n \n \n {props.children}\n
\n \n );\n}\n\nexport function TableCellHeaderElementStatic(\n props: SlateElementProps\n) {\n return ;\n}\n", + "content": "import * as React from 'react';\n\nimport type { TTableCellElement, TTableElement } from 'platejs';\nimport type { SlateElementProps } from 'platejs/static';\n\nimport { BaseTablePlugin } from '@platejs/table';\nimport { SlateElement } from 'platejs/static';\n\nimport { cn } from '@/lib/utils';\n\nexport function TableElementStatic({\n children,\n ...props\n}: SlateElementProps) {\n const { disableMarginLeft } = props.editor.getOptions(BaseTablePlugin);\n const marginLeft = disableMarginLeft ? 0 : props.element.marginLeft;\n\n return (\n \n
\n \n {children}\n \n
\n \n );\n}\n\nexport function TableRowElementStatic(props: SlateElementProps) {\n return (\n \n {props.children}\n \n );\n}\n\nexport function TableCellElementStatic({\n isHeader,\n ...props\n}: SlateElementProps & {\n isHeader?: boolean;\n}) {\n const { editor, element } = props;\n const { api } = editor.getPlugin(BaseTablePlugin);\n\n const { minHeight, width } = api.table.getCellSize({ element });\n const borders = api.table.getCellBorders({ element });\n\n return (\n \n \n {props.children}\n
\n \n );\n}\n\nexport function TableCellHeaderElementStatic(\n props: SlateElementProps\n) {\n return ;\n}\n", "type": "registry:ui" } ], diff --git a/apps/www/public/tailwind.css b/apps/www/public/tailwind.css index 7d797ef872..bdfd60ad33 100644 --- a/apps/www/public/tailwind.css +++ b/apps/www/public/tailwind.css @@ -1,2 +1,2 @@ /*! tailwindcss v4.1.8 | 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-content:"";--tw-font-weight:initial;--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-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-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--font-sans:"var(--font-sans)","ui-sans-serif","-apple-system","BlinkMacSystemFont","Segoe UI Variable Display","Segoe UI","Helvetica","Apple Color Emoji","Arial","sans-serif","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-red-950:oklch(25.8% .092 26.042);--color-orange-50:oklch(98% .016 73.684);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-700:oklch(55.3% .195 38.402);--color-orange-800:oklch(47% .157 37.304);--color-orange-900:oklch(40.8% .123 38.172);--color-orange-950:oklch(26.6% .079 36.259);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-lime-50:oklch(98.6% .031 120.757);--color-lime-400:oklch(84.1% .238 128.85);--color-lime-500:oklch(76.8% .233 130.85);--color-lime-600:oklch(64.8% .2 131.684);--color-lime-900:oklch(40.5% .101 131.063);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-950:oklch(26.6% .065 152.934);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-700:oklch(50.8% .118 165.612);--color-teal-50:oklch(98.4% .014 180.72);--color-teal-300:oklch(85.5% .138 181.071);--color-teal-400:oklch(77.7% .152 181.912);--color-teal-500:oklch(70.4% .14 182.503);--color-teal-600:oklch(60% .118 184.704);--color-teal-700:oklch(51.1% .096 186.391);--color-teal-800:oklch(43.7% .078 188.216);--color-teal-900:oklch(38.6% .063 188.416);--color-cyan-50:oklch(98.4% .019 200.873);--color-cyan-300:oklch(86.5% .127 207.078);--color-cyan-700:oklch(52% .105 223.128);--color-cyan-950:oklch(30.2% .056 229.695);--color-blue-50:oklch(97% .014 254.604);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-violet-50:oklch(96.9% .016 293.756);--color-violet-300:oklch(81.1% .111 293.571);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-500:oklch(60.6% .25 292.717);--color-violet-600:oklch(54.1% .281 293.009);--color-violet-700:oklch(49.1% .27 292.581);--color-violet-800:oklch(43.2% .232 292.759);--color-violet-900:oklch(38% .189 293.745);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-300:oklch(82.7% .119 306.383);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-purple-800:oklch(43.8% .218 303.724);--color-purple-900:oklch(38.1% .176 304.987);--color-purple-950:oklch(29.1% .149 302.717);--color-pink-50:oklch(97.1% .014 343.198);--color-pink-300:oklch(82.3% .12 346.018);--color-pink-700:oklch(52.5% .223 3.958);--color-pink-950:oklch(28.4% .109 3.907);--color-rose-50:oklch(96.9% .015 12.422);--color-rose-300:oklch(81% .117 11.638);--color-rose-400:oklch(71.2% .194 13.428);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-600:oklch(58.6% .253 17.585);--color-rose-700:oklch(51.4% .222 16.935);--color-rose-800:oklch(45.5% .188 13.697);--color-rose-900:oklch(41% .159 10.272);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-zinc-50:oklch(98.5% 0 0);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-200:oklch(92% .004 286.32);--color-zinc-400:oklch(70.5% .015 286.067);--color-zinc-700:oklch(37% .013 285.805);--color-zinc-800:oklch(27.4% .006 286.033);--color-zinc-900:oklch(21% .006 285.885);--color-zinc-950:oklch(14.1% .005 285.823);--color-neutral-50:oklch(98.5% 0 0);--color-neutral-300:oklch(87% 0 0);--color-neutral-400:oklch(70.8% 0 0);--color-neutral-500:oklch(55.6% 0 0);--color-neutral-600:oklch(43.9% 0 0);--color-neutral-800:oklch(26.9% 0 0);--color-neutral-900:oklch(20.5% 0 0);--color-stone-50:oklch(98.5% .001 106.423);--color-stone-300:oklch(86.9% .005 56.366);--color-stone-400:oklch(70.9% .01 56.259);--color-stone-500:oklch(55.3% .013 58.071);--color-stone-600:oklch(44.4% .011 73.639);--color-stone-700:oklch(37.4% .01 67.558);--color-stone-800:oklch(26.8% .007 34.298);--color-stone-900:oklch(21.6% .006 56.043);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-xl:80rem;--breakpoint-2xl:96rem;--container-sm:24rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: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);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-tighter:-.05em;--tracking-tight:-.025em;--tracking-widest:.1em;--leading-tight:1.25;--leading-normal:1.5;--leading-relaxed:1.625;--leading-loose:2;--radius-xs:.125rem;--radius-sm:calc(var(--radius) - 4px);--radius-lg:var(--radius);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-xs:4px;--blur-sm:8px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:"var(--font-sans)","ui-sans-serif","-apple-system","BlinkMacSystemFont","Segoe UI Variable Display","Segoe UI","Helvetica","Apple Color Emoji","Arial","sans-serif","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--default-mono-font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-code:var(--surface);--color-code-foreground:var(--surface-foreground);--color-code-highlight:var(--code-highlight);--color-code-number:var(--code-number);--font-heading:"var(--font-heading)","ui-sans-serif","-apple-system","BlinkMacSystemFont","Segoe UI Variable Display","Segoe UI","Helvetica","Apple Color Emoji","Arial","sans-serif","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}}@layer base{@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)}}}*,: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}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){*{outline-color:color-mix(in oklab,var(--ring)50%,transparent)}}body{overscroll-behavior:none;background-color:var(--background);color:var(--foreground);font-synthesis-weight:none;text-rendering:optimizeLegibility}@supports (font:-apple-system-body) and (appearance:none){@media (min-width:1800px){[data-wrapper]{border-top-style:var(--tw-border-style);border-top-width:1px}}}a:active,button:active{opacity:.6}@media (min-width:48rem){a:active,button:active{opacity:1}}::-webkit-scrollbar{width:5px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:hsl(var(--border));border-radius:5px}*{scrollbar-width:thin;scrollbar-color:hsl(var(--border))transparent}.prose{--tw-prose-body:var(--foreground);--tw-prose-bold:inherit;--tw-prose-links:inherit;--tw-prose-bullets:var(--foreground)}[data-theme=light]{display:block}[data-theme=dark],.dark [data-theme=light]{display:none}.dark [data-theme=dark]{display:block}[data-rehype-pretty-code-fragment]{color:var(--color-white);position:relative}[data-rehype-pretty-code-fragment] code{border-style:var(--tw-border-style);min-width:100%;padding:calc(var(--spacing)*0);overflow-wrap:break-word;counter-reset:line;-webkit-box-decoration-break:clone;box-decoration-break:clone;background-color:#0000;border-width:0;border-radius:0;display:grid}[data-rehype-pretty-code-fragment] .line{width:100%;min-height:1rem;padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*.5);display:inline-block}[data-rehype-pretty-code-fragment] [data-line-numbers] .line{padding-inline:calc(var(--spacing)*2)}[data-rehype-pretty-code-fragment] [data-line-numbers]>.line:before{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:#fafafa66}@supports (color:color-mix(in lab, red, red)){[data-rehype-pretty-code-fragment] [data-line-numbers]>.line:before{color:color-mix(in oklab,var(--color-zinc-50)40%,transparent)}}[data-rehype-pretty-code-fragment] [data-line-numbers]>.line:before{counter-increment:line;content:counter(line);text-align:right;width:1.8rem;margin-right:1.4rem;display:inline-block}[data-rehype-pretty-code-fragment] .line--highlighted{background-color:#3f3f4680}@supports (color:color-mix(in lab, red, red)){[data-rehype-pretty-code-fragment] .line--highlighted{background-color:color-mix(in oklab,var(--color-zinc-700)50%,transparent)}}[data-rehype-pretty-code-fragment] .line-highlighted span{position:relative}[data-rehype-pretty-code-fragment] .word--highlighted{border-radius:calc(var(--radius) - 2px);border-color:#3f3f46b3}@supports (color:color-mix(in lab, red, red)){[data-rehype-pretty-code-fragment] .word--highlighted{border-color:color-mix(in oklab,var(--color-zinc-700)70%,transparent)}}[data-rehype-pretty-code-fragment] .word--highlighted{background-color:#3f3f4680}@supports (color:color-mix(in lab, red, red)){[data-rehype-pretty-code-fragment] .word--highlighted{background-color:color-mix(in oklab,var(--color-zinc-700)50%,transparent)}}[data-rehype-pretty-code-fragment] .word--highlighted{padding:calc(var(--spacing)*1)}.dark [data-rehype-pretty-code-fragment] .word--highlighted{background-color:var(--color-zinc-900)}[data-rehype-pretty-code-title]{margin-top:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*4);padding-top:calc(var(--spacing)*6);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground)}[data-rehype-pretty-code-title]+pre{margin-top:calc(var(--spacing)*2)!important}}@layer components{.steps:first-child,.steps:first-child>h3:first-child{margin-top:calc(var(--spacing)*0)!important}.steps>h3{margin-top:calc(var(--spacing)*16)!important}.steps>h3+p{margin-top:calc(var(--spacing)*2)!important}[data-rehype-pretty-code-figure]{background-color:var(--color-code);color:var(--color-code-foreground);border-radius:var(--radius-lg);border-width:0;border-color:var(--border);margin-top:calc(var(--spacing)*6);font-size:var(--text-sm);outline:none;position:relative;overflow:hidden}@media (min-width:48rem){[data-rehype-pretty-code-figure]{margin-inline:calc(var(--spacing)*-4)}}[data-rehype-pretty-code-figure]:has([data-rehype-pretty-code-title]) [data-slot=copy-button]{top:calc(var(--spacing)*1.5)!important}[data-rehype-pretty-code-title]{border-bottom:var(--border)}@supports (color:color-mix(in lab, red, red)){[data-rehype-pretty-code-title]{border-bottom:color-mix(in oklab,var(--border)30%,transparent)}}[data-rehype-pretty-code-title]{padding-block:calc(var(--spacing)*2.5);padding-inline:calc(var(--spacing)*4);font-size:var(--text-sm);font-family:var(--font-mono);color:var(--color-code-foreground);border-bottom-style:solid;border-bottom-width:1px}[data-line-numbers]{white-space:pre;counter-reset:line;-webkit-box-decoration-break:clone;box-decoration-break:clone;background:0 0;border:0;min-width:100%;padding:0;display:grid}[data-line-numbers] [data-line]:before{font-size:var(--text-sm);counter-increment:line;content:counter(line);width:calc(var(--spacing)*16);padding-right:calc(var(--spacing)*6);text-align:right;color:var(--color-code-number);background-color:var(--color-code);display:inline-block;position:sticky;left:0}[data-line-numbers] [data-highlighted-line][data-line]:before{background-color:var(--color-code-highlight)}[data-line]{padding-top:calc(var(--spacing)*.5);padding-bottom:calc(var(--spacing)*.5);min-height:calc(var(--spacing)*1);width:100%;display:inline-block}[data-line] span{color:var(--shiki-light)}[data-line] span:is(.dark *){color:var(--shiki-dark)!important}[data-highlighted-line],[data-highlighted-chars]{background-color:var(--color-code-highlight);position:relative}[data-highlighted-line]:after{content:"";background-color:var(--muted-foreground);width:2px;height:100%;position:absolute;top:0;left:0}@supports (color:color-mix(in lab, red, red)){[data-highlighted-line]:after{background-color:color-mix(in oklab,var(--muted-foreground)50%,transparent)}}[data-highlighted-chars]{border-radius:var(--radius-sm);font-family:var(--font-mono);padding-block:.1rem;padding-inline:.3rem;font-size:.8rem}}@layer utilities{.\@container\/card-header{container:card-header/inline-size}.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}@media (pointer:coarse){.extend-touch-target{touch-action:manipulation;position:relative}.extend-touch-target:after{content:var(--tw-content);content:var(--tw-content);inset:calc(var(--spacing)*-2);position:absolute}}.step{counter-increment:step;position:relative}.step:before{right:calc(var(--spacing)*0);margin-right:calc(var(--spacing)*2);width:calc(var(--spacing)*7);height:calc(var(--spacing)*7);text-align:center;text-indent:-1px;font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted-foreground);border-radius:3.40282e38px;justify-content:center;align-items:center;display:none}@media (min-width:48rem){.step:before{position:absolute}}.step:before{content:counter(step)}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-32{inset:calc(var(--spacing)*32)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.start-1{inset-inline-start:calc(var(--spacing)*1)}.-top-2{top:calc(var(--spacing)*-2)}.-top-4{top:calc(var(--spacing)*-4)}.-top-px{top:-1px}.top-0{top:calc(var(--spacing)*0)}.top-1{top:calc(var(--spacing)*1)}.top-1\.5{top:calc(var(--spacing)*1.5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-2\.5{top:calc(var(--spacing)*2.5)}.top-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-10{top:calc(var(--spacing)*10)}.top-14{top:calc(var(--spacing)*14)}.top-16{top:calc(var(--spacing)*16)}.top-20{top:calc(var(--spacing)*20)}.top-\[0\.3rem\]{top:.3rem}.top-\[0\.4rem\]{top:.4rem}.top-\[5px\]{top:5px}.top-\[50\%\]{top:50%}.top-\[calc\(var\(--header-height\)\+1px\)\]{top:calc(var(--header-height) + 1px)}.-right-1{right:calc(var(--spacing)*-1)}.-right-3{right:calc(var(--spacing)*-3)}.right-0{right:calc(var(--spacing)*0)}.right-0\.5{right:calc(var(--spacing)*.5)}.right-1{right:calc(var(--spacing)*1)}.right-2{right:calc(var(--spacing)*2)}.right-2\.5{right:calc(var(--spacing)*2.5)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-6{right:calc(var(--spacing)*6)}.right-16{right:calc(var(--spacing)*16)}.right-24{right:calc(var(--spacing)*24)}.right-\[-1\.5px\]{right:-1.5px}.right-\[-11px\]{right:-11px}.right-\[0\.3rem\]{right:.3rem}.right-\[28px\]{right:28px}.-bottom-1{bottom:calc(var(--spacing)*-1)}.-bottom-px{bottom:-1px}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-0\.5{bottom:calc(var(--spacing)*.5)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-16{bottom:calc(var(--spacing)*16)}.bottom-24{bottom:calc(var(--spacing)*24)}.-left-0{left:calc(var(--spacing)*0)}.-left-0\.5{left:calc(var(--spacing)*-.5)}.-left-1{left:calc(var(--spacing)*-1)}.-left-3{left:calc(var(--spacing)*-3)}.-left-5{left:calc(var(--spacing)*-5)}.-left-6{left:calc(var(--spacing)*-6)}.left-0{left:calc(var(--spacing)*0)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-2\.5{left:calc(var(--spacing)*2.5)}.left-3{left:calc(var(--spacing)*3)}.left-16{left:calc(var(--spacing)*16)}.left-\[-1\.5px\]{left:-1.5px}.left-\[-10\.5px\]{left:-10.5px}.left-\[50\%\]{left:50%}.isolate{isolation:isolate}.z-1{z-index:1}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-51{z-index:51}.z-60{z-index:60}.z-100{z-index:100}.z-500{z-index:500}.z-\[100\]{z-index:100}.col-span-1{grid-column:span 1/span 1}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.container{width:100%}@media (min-width:1600px){.container{max-width:1600px}}@media (min-width:2000px){.container{max-width:2000px}}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.\!m-0{margin:calc(var(--spacing)*0)!important}.m-0{margin:calc(var(--spacing)*0)}.m-0\.5{margin:calc(var(--spacing)*.5)}.m-4{margin:calc(var(--spacing)*4)}.container-wrapper{width:100%;max-width:calc(var(--breakpoint-xl) + 2rem);padding-inline:calc(var(--spacing)*2);margin-inline:auto}.container{max-width:calc(var(--breakpoint-xl) + 2rem);padding-inline:calc(var(--spacing)*4);margin-inline:auto}@media (min-width:80rem){.container{padding-inline:calc(var(--spacing)*6)}}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-0{margin-inline:calc(var(--spacing)*0)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-1\.5{margin-inline:calc(var(--spacing)*1.5)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-auto{margin-inline:auto}.mx-px{margin-inline:1px}.\!my-0{margin-block:calc(var(--spacing)*0)!important}.my-1{margin-block:calc(var(--spacing)*1)}.my-1\.5{margin-block:calc(var(--spacing)*1.5)}.my-2{margin-block:calc(var(--spacing)*2)}.my-4{margin-block:calc(var(--spacing)*4)}.my-6{margin-block:calc(var(--spacing)*6)}.my-8{margin-block:calc(var(--spacing)*8)}.my-auto{margin-block:auto}.my-px{margin-block:1px}.-ms-5{margin-inline-start:calc(var(--spacing)*-5)}.me-1\.5{margin-inline-end:calc(var(--spacing)*1.5)}.\!mt-0{margin-top:calc(var(--spacing)*0)!important}.-mt-2\.5{margin-top:calc(var(--spacing)*-2.5)}.-mt-6{margin-top:calc(var(--spacing)*-6)}.-mt-12{margin-top:calc(var(--spacing)*-12)}.mt-0{margin-top:calc(var(--spacing)*0)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-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)}.mt-\[0\.75em\]{margin-top:.75em}.mt-\[1\.4em\]{margin-top:1.4em}.mt-\[1\.6em\]{margin-top:1.6em}.mt-\[1em\]{margin-top:1em}.mt-auto{margin-top:auto}.-mr-3{margin-right:calc(var(--spacing)*-3)}.mr-0{margin-right:calc(var(--spacing)*0)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-1\.5{margin-right:calc(var(--spacing)*1.5)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-4{margin-right:calc(var(--spacing)*4)}.mr-\[14px\]{margin-right:14px}.mr-auto{margin-right:auto}.\!mb-0{margin-bottom:calc(var(--spacing)*0)!important}.mb-0{margin-bottom:calc(var(--spacing)*0)}.mb-0\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-2\.5{margin-bottom:calc(var(--spacing)*2.5)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.mb-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.\!ml-6{margin-left:calc(var(--spacing)*6)!important}.-ml-2{margin-left:calc(var(--spacing)*-2)}.-ml-3{margin-left:calc(var(--spacing)*-3)}.ml-0{margin-left:calc(var(--spacing)*0)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-auto{margin-left:auto}.ml-px{margin-left:1px}.box-border{box-sizing:border-box}.box-content{box-sizing:content-box}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.no-scrollbar::-webkit-scrollbar{display:none}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-hide::-webkit-scrollbar{display:none}.block{display:block}.contents{display:contents}.flex{display:flex}.flex\!{display:flex!important}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.aspect-1\/2{aspect-ratio:1/2}.aspect-\[4\/2\.5\]{aspect-ratio:4/2.5}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.\!size-3{width:calc(var(--spacing)*3)!important;height:calc(var(--spacing)*3)!important}.\!size-3\.5{width:calc(var(--spacing)*3.5)!important;height:calc(var(--spacing)*3.5)!important}.size-0{width:calc(var(--spacing)*0);height:calc(var(--spacing)*0)}.size-2{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.size-2\.5{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.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-3\.5\!{width:calc(var(--spacing)*3.5)!important;height:calc(var(--spacing)*3.5)!important}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-4\.5{width:calc(var(--spacing)*4.5);height:calc(var(--spacing)*4.5)}.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)}.size-12{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.size-\[14px\]{width:14px;height:14px}.size-\[22px\]{width:22px;height:22px}.size-\[28px\]{width:28px;height:28px}.size-\[130px\]{width:130px;height:130px}.size-full{width:100%;height:100%}.h-\(--container-height\){height:var(--container-height)}.h-\(--header-height\){height:var(--header-height)}.h-\(--height\){height:var(--height)}.h-\(--radix-popper-available-height\){height:var(--radix-popper-available-height)}.h-\(--top-spacing\){height:var(--top-spacing)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-11{height:calc(var(--spacing)*11)}.h-12{height:calc(var(--spacing)*12)}.h-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.h-32{height:calc(var(--spacing)*32)}.h-\[0\.1px\]{height:.1px}.h-\[1\.5em\]{height:1.5em}.h-\[1\.45rem\]{height:1.45rem}.h-\[1px\]{height:1px}.h-\[19px\]{height:19px}.h-\[23rem\]{height:23rem}.h-\[24px\]{height:24px}.h-\[26px\]{height:26px}.h-\[28px\]{height:28px}.h-\[344px\]{height:344px}.h-\[350px\]{height:350px}.h-\[500px\]{height:500px}.h-\[520px\]{height:520px}.h-\[600px\]{height:600px}.h-\[650px\]{height:650px}.h-\[800px\]{height:800px}.h-\[7500px\]{height:7500px}.h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.h-\[calc\(100\%_\+_8px\)\]{height:calc(100% + 8px)}.h-\[calc\(100svh-var\(--header-height\)-var\(--footer-height\)\)\]{height:calc(100svh - var(--header-height) - var(--footer-height))}.h-\[calc\(100vh-3\.5rem\)\]{height:calc(100vh - 3.5rem)}.h-\[calc\(100vh-100px\)\]{height:calc(100vh - 100px)}.h-\[calc\(theme\(spacing\.7\)_-_1px\)\]{height:calc(1.75rem - 1px)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-dvh{height:100dvh}.h-fit{height:fit-content}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.h-svh{height:100svh}.max-h-\(--radix-context-menu-content-available-height\){max-height:var(--radix-context-menu-content-available-height)}.max-h-\(--radix-dropdown-menu-content-available-height\){max-height:var(--radix-dropdown-menu-content-available-height)}.max-h-\(--radix-select-content-available-height\){max-height:var(--radix-select-content-available-height)}.max-h-14{max-height:calc(var(--spacing)*14)}.max-h-72{max-height:calc(var(--spacing)*72)}.max-h-\[50vh\]{max-height:50vh}.max-h-\[70svh\]{max-height:70svh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[288px\]{max-height:288px}.max-h-\[300px\]{max-height:300px}.max-h-\[500px\]{max-height:500px}.max-h-\[650px\]{max-height:650px}.max-h-\[calc\(100vh-4rem\)\]{max-height:calc(100vh - 4rem)}.max-h-\[calc\(100vh-var\(--header-height\)-44px\)\]{max-height:calc(100vh - var(--header-height) - 44px)}.max-h-\[min\(50dvh\,calc\(-24px\+var\(--radix-popper-available-height\)\)\)\]{max-height:min(50dvh,calc(-24px + var(--radix-popper-available-height)))}.max-h-\[min\(70vh\,320px\)\]{max-height:min(70vh,320px)}.max-h-full{max-height:100%}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-4{min-height:calc(var(--spacing)*4)}.min-h-14{min-height:calc(var(--spacing)*14)}.min-h-\[1lh\]{min-height:1lh}.min-h-\[25px\]{min-height:25px}.min-h-\[50\%\]{min-height:50%}.min-h-\[350px\]{min-height:350px}.min-h-full\!{min-height:100%!important}.min-h-min{min-height:min-content}.min-h-svh{min-height:100svh}.w-\(--radix-popper-available-width\){width:var(--radix-popper-available-width)}.w-\(--sidebar-width\){width:var(--sidebar-width)}.w-0\.5{width:calc(var(--spacing)*.5)}.w-1{width:calc(var(--spacing)*1)}.w-1\/2{width:50%}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.w-4{width:calc(var(--spacing)*4)}.w-4\.5{width:calc(var(--spacing)*4.5)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-48{width:calc(var(--spacing)*48)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-\[1px\]{width:1px}.w-\[80px\]{width:80px}.w-\[100px\]{width:100px}.w-\[120px\]{width:120px}.w-\[180px\]{width:180px}.w-\[200px\]{width:200px}.w-\[230px\]{width:230px}.w-\[240px\]{width:240px}.w-\[280px\]{width:280px}.w-\[300px\]{width:300px}.w-\[330px\]{width:330px}.w-\[380px\]{width:380px}.w-\[700px\]{width:700px}.w-\[896px\]{width:896px}.w-\[970px\]{width:970px}.w-\[calc\(100\%-1rem\)\]{width:calc(100% - 1rem)}.w-\[min\(100\%\,600px\)\]{width:min(100%,600px)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.w-screen{width:100vw}.max-w-\(--skeleton-width\){max-width:var(--skeleton-width)}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-\[80vw\]{max-width:80vw}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-\[calc\(100vw-24px\)\]{max-width:calc(100vw - 24px)}.max-w-full{max-width:100%}.max-w-none{max-width:none}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-5{min-width:calc(var(--spacing)*5)}.min-w-8{min-width:calc(var(--spacing)*8)}.min-w-9{min-width:calc(var(--spacing)*9)}.min-w-10{min-width:calc(var(--spacing)*10)}.min-w-32{min-width:calc(var(--spacing)*32)}.min-w-\[8px\]{min-width:8px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[92px\]{min-width:92px}.min-w-\[125px\]{min-width:125px}.min-w-\[130px\]{min-width:130px}.min-w-\[180px\]{min-width:180px}.min-w-\[220px\]{min-width:220px}.min-w-\[225px\]{min-width:225px}.min-w-\[450px\]{min-width:450px}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-none{flex:none}.shrink-0{flex-shrink:0}.flex-grow-1,.grow{flex-grow:1}.table-fixed{table-layout:fixed}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.origin-\(--radix-context-menu-content-transform-origin\){transform-origin:var(--radix-context-menu-content-transform-origin)}.origin-\(--radix-dropdown-menu-content-transform-origin\){transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\(--radix-hover-card-content-transform-origin\){transform-origin:var(--radix-hover-card-content-transform-origin)}.origin-\(--radix-menubar-content-transform-origin\){transform-origin:var(--radix-menubar-content-transform-origin)}.origin-\(--radix-popover-content-transform-origin\){transform-origin:var(--radix-popover-content-transform-origin)}.origin-\(--radix-select-content-transform-origin\){transform-origin:var(--radix-select-content-transform-origin)}.origin-\(--radix-tooltip-content-transform-origin\){transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\/2{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-1\/4{--tw-translate-x:calc(calc(1/4*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-px{--tw-translate-x:-1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-12{--tw-translate-x:calc(var(--spacing)*12);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/4{--tw-translate-y:calc(calc(1/4*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-full{--tw-translate-y:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0\.5{--tw-translate-y:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[2px\]{--tw-translate-y:2px;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y:calc(-50% - 2px);translate:var(--tw-translate-x)var(--tw-translate-y)}.-rotate-45{rotate:-45deg}.rotate-0{rotate:none}.rotate-12{rotate:12deg}.rotate-45{rotate:45deg}.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-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-row-resize{cursor:row-resize}.cursor-text{cursor:text}.touch-manipulation{touch-action:manipulation}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.scroll-m-16{scroll-margin:calc(var(--spacing)*16)}.scroll-m-20{scroll-margin:calc(var(--spacing)*20)}.scroll-m-28{scroll-margin:calc(var(--spacing)*28)}.scroll-my-1{scroll-margin-block:calc(var(--spacing)*1)}.scroll-mt-20{scroll-margin-top:calc(var(--spacing)*20)}.scroll-mt-24{scroll-margin-top:calc(var(--spacing)*24)}.scroll-py-1{scroll-padding-block:calc(var(--spacing)*1)}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.list-none\!{list-style-type:none!important}.appearance-none{appearance:none}.grid-flow-row{grid-auto-flow:row}.auto-rows-max{grid-auto-rows:max-content}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.grid-cols-\[0_1fr\]{grid-template-columns:0 1fr}.grid-cols-\[repeat\(10\,1fr\)\]{grid-template-columns:repeat(10,1fr)}.grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-nowrap{flex-wrap:nowrap}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-evenly{justify-content:space-evenly}.justify-start{justify-content:flex-start}.justify-items-start{justify-items:start}.gap-0{gap:calc(var(--spacing)*0)}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}:where(.space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-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-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*10)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-16>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*16)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*16)*calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:calc(var(--spacing)*1)}:where(.space-x-0\.5>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*.5)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-0\.5{row-gap:calc(var(--spacing)*.5)}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.overscroll-none{overscroll-behavior:none}.rounded{border-radius:.25rem}.rounded-\[0\.5rem\]{border-radius:.5rem}.rounded-\[2px\]{border-radius:2px}.rounded-\[4px\]{border-radius:4px}.rounded-\[6px\]{border-radius:6px}.rounded-\[50\%\]{border-radius:50%}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-t-lg{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.rounded-r-md{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-bl-none{border-bottom-left-radius:0}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-s-2{border-inline-start-style:var(--tw-border-style);border-inline-start-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.border-\[\#ddd\]{border-color:#ddd}.border-blue-500{border-color:var(--color-blue-500)}.border-border,.border-border\/40{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/40{border-color:color-mix(in oklab,var(--border)40%,transparent)}}.border-border\/50{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/50{border-color:color-mix(in oklab,var(--border)50%,transparent)}}.border-border\/60{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/60{border-color:color-mix(in oklab,var(--border)60%,transparent)}}.border-current{border-color:currentColor}.border-gray-200{border-color:var(--color-gray-200)}.border-input{border-color:var(--input)}.border-muted{border-color:var(--muted)}.border-muted-foreground{border-color:var(--muted-foreground)}.border-primary{border-color:var(--primary)}.border-sidebar-border{border-color:var(--sidebar-border)}.border-stone-700{border-color:var(--color-stone-700)}.border-transparent{border-color:#0000}.border-zinc-700{border-color:var(--color-zinc-700)}.border-zinc-800{border-color:var(--color-zinc-800)}.border-s-blue-500\/50{border-inline-start-color:#3080ff80}@supports (color:color-mix(in lab, red, red)){.border-s-blue-500\/50{border-inline-start-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}}.border-s-green-500\/50{border-inline-start-color:#00c75880}@supports (color:color-mix(in lab, red, red)){.border-s-green-500\/50{border-inline-start-color:color-mix(in oklab,var(--color-green-500)50%,transparent)}}.border-s-orange-500\/50{border-inline-start-color:#fe6e0080}@supports (color:color-mix(in lab, red, red)){.border-s-orange-500\/50{border-inline-start-color:color-mix(in oklab,var(--color-orange-500)50%,transparent)}}.border-s-red-500\/50{border-inline-start-color:#fb2c3680}@supports (color:color-mix(in lab, red, red)){.border-s-red-500\/50{border-inline-start-color:color-mix(in oklab,var(--color-red-500)50%,transparent)}}.border-t-border{border-top-color:var(--border)}.border-t-transparent{border-top-color:#0000}.border-b-border{border-bottom-color:var(--border)}.border-b-brand\/\[\.24\]{border-bottom-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.border-b-brand\/\[\.24\]{border-bottom-color:color-mix(in oklab,var(--brand)24%,transparent)}}.border-b-gray-300{border-bottom-color:var(--color-gray-300)}.border-b-highlight,.border-b-highlight\/35{border-bottom-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.border-b-highlight\/35{border-bottom-color:color-mix(in oklab,var(--highlight)35%,transparent)}}.border-b-highlight\/\[\.7\]{border-bottom-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.border-b-highlight\/\[\.7\]{border-bottom-color:color-mix(in oklab,var(--highlight)70%,transparent)}}.border-b-highlight\/\[\.36\]{border-bottom-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.border-b-highlight\/\[\.36\]{border-bottom-color:color-mix(in oklab,var(--highlight)36%,transparent)}}.border-b-purple-100{border-bottom-color:var(--color-purple-100)}.border-b-transparent{border-bottom-color:#0000}.border-l-transparent{border-left-color:#0000}.bg-\(--cellBackground\){background-color:var(--cellBackground)}.bg-\(--color-1\){background-color:var(--color-1)}.bg-\(--color-2\){background-color:var(--color-2)}.bg-\(--color-3\){background-color:var(--color-3)}.bg-\(--color-4\){background-color:var(--color-4)}.bg-\[\#adfa1d\]{background-color:#adfa1d}.bg-\[\#eee\]{background-color:#eee}.bg-\[rgba\(0\,0\,0\,0\.5\)\]{background-color:#00000080}.bg-accent{background-color:var(--accent)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-background,.bg-background\/90{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/90{background-color:color-mix(in oklab,var(--background)90%,transparent)}}.bg-background\/95{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/95{background-color:color-mix(in oklab,var(--background)95%,transparent)}}.bg-black{background-color:var(--color-black)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-blue-200{background-color:var(--color-blue-200)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-border{background-color:var(--border)}.bg-brand,.bg-brand\/25{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.bg-brand\/25{background-color:color-mix(in oklab,var(--brand)25%,transparent)}}.bg-brand\/50{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.bg-brand\/50{background-color:color-mix(in oklab,var(--brand)50%,transparent)}}.bg-brand\/\[\.08\]{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.bg-brand\/\[\.08\]{background-color:color-mix(in oklab,var(--brand)8%,transparent)}}.bg-brand\/\[\.13\]{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.bg-brand\/\[\.13\]{background-color:color-mix(in oklab,var(--brand)13%,transparent)}}.bg-card{background-color:var(--card)}.bg-current{background-color:currentColor}.bg-cyan-50{background-color:var(--color-cyan-50)}.bg-destructive{background-color:var(--destructive)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-emerald-200\/80{background-color:#a4f4cfcc}@supports (color:color-mix(in lab, red, red)){.bg-emerald-200\/80{background-color:color-mix(in oklab,var(--color-emerald-200)80%,transparent)}}.bg-foreground{background-color:var(--foreground)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-300\/25{background-color:#d1d5dc40}@supports (color:color-mix(in lab, red, red)){.bg-gray-300\/25{background-color:color-mix(in oklab,var(--color-gray-300)25%,transparent)}}.bg-gray-800{background-color:var(--color-gray-800)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-200{background-color:var(--color-green-200)}.bg-highlight,.bg-highlight\/15{background-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.bg-highlight\/15{background-color:color-mix(in oklab,var(--highlight)15%,transparent)}}.bg-highlight\/25{background-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.bg-highlight\/25{background-color:color-mix(in oklab,var(--highlight)25%,transparent)}}.bg-highlight\/30{background-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.bg-highlight\/30{background-color:color-mix(in oklab,var(--highlight)30%,transparent)}}.bg-highlight\/45{background-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.bg-highlight\/45{background-color:color-mix(in oklab,var(--highlight)45%,transparent)}}.bg-highlight\/\[\.13\]{background-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.bg-highlight\/\[\.13\]{background-color:color-mix(in oklab,var(--highlight)13%,transparent)}}.bg-inherit{background-color:inherit}.bg-muted,.bg-muted\/30{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/30{background-color:color-mix(in oklab,var(--muted)30%,transparent)}}.bg-muted\/50{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/50{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.bg-muted\/60{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/60{background-color:color-mix(in oklab,var(--muted)60%,transparent)}}.bg-neutral-50{background-color:var(--color-neutral-50)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-pink-50{background-color:var(--color-pink-50)}.bg-popover,.bg-popover\/90{background-color:var(--popover)}@supports (color:color-mix(in lab, red, red)){.bg-popover\/90{background-color:color-mix(in oklab,var(--popover)90%,transparent)}}.bg-primary,.bg-primary\/10{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/10{background-color:color-mix(in oklab,var(--primary)10%,transparent)}}.bg-primary\/40{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/40{background-color:color-mix(in oklab,var(--primary)40%,transparent)}}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-200{background-color:var(--color-red-200)}.bg-red-200\/80{background-color:#ffcacacc}@supports (color:color-mix(in lab, red, red)){.bg-red-200\/80{background-color:color-mix(in oklab,var(--color-red-200)80%,transparent)}}.bg-ring{background-color:var(--ring)}.bg-secondary{background-color:var(--secondary)}.bg-sidebar{background-color:var(--sidebar)}.bg-sidebar-border{background-color:var(--sidebar-border)}.bg-slate-200\/50{background-color:#e2e8f080}@supports (color:color-mix(in lab, red, red)){.bg-slate-200\/50{background-color:color-mix(in oklab,var(--color-slate-200)50%,transparent)}}.bg-surface{background-color:var(--surface)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-zinc-800{background-color:var(--color-zinc-800)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-950{background-color:var(--color-zinc-950)}.bg-zinc-950\!{background-color:var(--color-zinc-950)!important}.bg-linear-to-b{--tw-gradient-position:to bottom}@supports (background-image:linear-gradient(in lab, red, red)){.bg-linear-to-b{--tw-gradient-position:to bottom in oklab}}.bg-linear-to-b{background-image:linear-gradient(var(--tw-gradient-stops))}.bg-linear-to-r{--tw-gradient-position:to right}@supports (background-image:linear-gradient(in lab, red, red)){.bg-linear-to-r{--tw-gradient-position:to right in oklab}}.bg-linear-to-r{background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[\#6EB6F2\]{--tw-gradient-from:#6eb6f2;--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))}.from-background{--tw-gradient-from:var(--background);--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))}.from-background\/10{--tw-gradient-from:var(--background)}@supports (color:color-mix(in lab, red, red)){.from-background\/10{--tw-gradient-from:color-mix(in oklab,var(--background)10%,transparent)}}.from-background\/10{--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))}.from-gray-900\/30{--tw-gradient-from:#1018284d}@supports (color:color-mix(in lab, red, red)){.from-gray-900\/30{--tw-gradient-from:color-mix(in oklab,var(--color-gray-900)30%,transparent)}}.from-gray-900\/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))}.via-\[\#a855f7\]{--tw-gradient-via:#a855f7;--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-background\/60{--tw-gradient-via:var(--background)}@supports (color:color-mix(in lab, red, red)){.via-background\/60{--tw-gradient-via:color-mix(in oklab,var(--background)60%,transparent)}}.via-background\/60{--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-\[\#eab308\]{--tw-gradient-to:#eab308;--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-background{--tw-gradient-to:var(--background);--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-transparent{--tw-gradient-to:transparent;--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-90\%{--tw-gradient-to-position:90%}.bg-cover{background-size:cover}.bg-clip-content{background-clip:content-box}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.bg-center{background-position:50%}.fill-blue-500{fill:var(--color-blue-500)}.fill-current{fill:currentColor}.fill-green-500{fill:var(--color-green-500)}.fill-none{fill:none}.fill-orange-500{fill:var(--color-orange-500)}.fill-primary{fill:var(--primary)}.fill-red-500{fill:var(--color-red-500)}.stroke-slate-300{stroke:var(--color-slate-300)}.stroke-\[3px\]{stroke-width:3px}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.\!p-0{padding:calc(var(--spacing)*0)!important}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.p-10{padding:calc(var(--spacing)*10)}.p-11{padding:calc(var(--spacing)*11)}.p-20{padding:calc(var(--spacing)*20)}.p-\[2px\]{padding:2px}.p-\[3px\]{padding:3px}.p-px{padding:1px}.\!px-0\.5{padding-inline:calc(var(--spacing)*.5)!important}.\!px-1{padding-inline:calc(var(--spacing)*1)!important}.\!px-1\.5{padding-inline:calc(var(--spacing)*1.5)!important}.\!px-2{padding-inline:calc(var(--spacing)*2)!important}.px-0{padding-inline:calc(var(--spacing)*0)}.px-0\.5{padding-inline:calc(var(--spacing)*.5)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-10{padding-inline:calc(var(--spacing)*10)}.px-16{padding-inline:calc(var(--spacing)*16)}.px-\[0\.3em\]{padding-inline:.3em}.px-\[0\.3rem\]{padding-inline:.3rem}.px-\[calc\(--spacing\(1\)-2px\)\]{padding-inline:calc(calc(var(--spacing)*1) - 2px)}.px-px{padding-inline:1px}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-4\!{padding-block:calc(var(--spacing)*4)!important}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-\[--spacing\(1\)\]{padding-block:calc(var(--spacing)*1)}.py-\[0\.2em\]{padding-block:.2em}.py-\[0\.2rem\]{padding-block:.2rem}.py-\[1\.5px\]{padding-block:1.5px}.py-\[3px\]{padding-block:3px}.ps-6{padding-inline-start:calc(var(--spacing)*6)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-0\.5{padding-top:calc(var(--spacing)*.5)}.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-2\.5{padding-top:calc(var(--spacing)*2.5)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-5{padding-top:calc(var(--spacing)*5)}.pt-24{padding-top:calc(var(--spacing)*24)}.pt-\[0\.275em\]{padding-top:.275em}.pr-1{padding-right:calc(var(--spacing)*1)}.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)}.pr-9{padding-right:calc(var(--spacing)*9)}.pr-10{padding-right:calc(var(--spacing)*10)}.pr-\[14px\]{padding-right:14px}.pr-px{padding-right:1px}.pb-0{padding-bottom:calc(var(--spacing)*0)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-1\.5{padding-bottom:calc(var(--spacing)*1.5)}.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-6{padding-bottom:calc(var(--spacing)*6)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-48{padding-bottom:calc(var(--spacing)*48)}.pb-72{padding-bottom:calc(var(--spacing)*72)}.pb-\[20vh\]{padding-bottom:20vh}.pb-\[51\.25\%\]{padding-bottom:51.25%}.pb-\[56\.25\%\]{padding-bottom:56.25%}.pb-\[56\.0417\%\]{padding-bottom:56.0417%}.pb-\[75\%\]{padding-bottom:75%}.pb-px{padding-bottom:1px}.pl-\(--index\){padding-left:var(--index)}.pl-0{padding-left:calc(var(--spacing)*0)}.pl-0\.5{padding-left:calc(var(--spacing)*.5)}.pl-1{padding-left:calc(var(--spacing)*1)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-2\.5{padding-left:calc(var(--spacing)*2.5)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-8{padding-left:calc(var(--spacing)*8)}.pl-\[26px\]{padding-left:26px}.pl-\[32px\]{padding-left:32px}.pl-\[50px\]{padding-left:50px}.text-center{text-align:center}.text-end{text-align:end}.text-justify{text-align:justify}.text-left{text-align:left}.text-start{text-align:start}.align-baseline{vertical-align:baseline}.align-middle{vertical-align:middle}.align-text-bottom{vertical-align:text-bottom}.font-\[inherit\]{font-family:inherit}.font-heading{font-family:"var(--font-heading)","ui-sans-serif",-apple-system,BlinkMacSystemFont,Segoe UI Variable Display,Segoe UI,Helvetica,Apple Color Emoji,Arial,"sans-serif",Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.font-mono{font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:"var(--font-sans)","ui-sans-serif",-apple-system,BlinkMacSystemFont,Segoe UI Variable Display,Segoe UI,Helvetica,Apple Color Emoji,Arial,"sans-serif",Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.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-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.8rem\]{font-size:.8rem}.text-\[1\.05rem\]{font-size:1.05rem}.text-\[10px\]{font-size:10px}.text-\[18px\]{font-size:18px}.text-\[20px\]{font-size:20px}.text-\[40px\]{font-size:40px}.text-\[max\(87\.5\%\,\.875rem\)\]{font-size:max(87.5%,.875rem)}.leading-7{--tw-leading:calc(var(--spacing)*7);line-height:calc(var(--spacing)*7)}.leading-\[1\.1\]{--tw-leading:1.1;line-height:1.1}.leading-\[1\.5\]{--tw-leading:1.5;line-height:1.5}.leading-\[10px\]{--tw-leading:10px;line-height:10px}.leading-\[normal\]{--tw-leading:normal;line-height:normal}.leading-loose{--tw-leading:var(--leading-loose);line-height:var(--leading-loose)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.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-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-tighter{--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.text-nowrap{text-wrap:nowrap}.break-normal{overflow-wrap:normal;word-break:normal}.break-words{overflow-wrap:break-word}.whitespace-break-spaces{white-space:break-spaces}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#000000\]{color:#000}.text-\[\#aaa\]{color:#aaa}.text-accent-foreground{color:var(--accent-foreground)}.text-background{color:var(--background)}.text-black{color:var(--color-black)}.text-blue-600{color:var(--color-blue-600)}.text-brand\/80{color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.text-brand\/80{color:color-mix(in oklab,var(--brand)80%,transparent)}}.text-card-foreground{color:var(--card-foreground)}.text-current{color:currentColor}.text-cyan-700{color:var(--color-cyan-700)}.text-destructive{color:var(--destructive)}.text-emerald-700{color:var(--color-emerald-700)}.text-foreground,.text-foreground\/80{color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.text-foreground\/80{color:color-mix(in oklab,var(--foreground)80%,transparent)}}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-inherit{color:inherit}.text-muted-foreground,.text-muted-foreground\/70{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\/70{color:color-mix(in oklab,var(--muted-foreground)70%,transparent)}}.text-muted-foreground\/80{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\/80{color:color-mix(in oklab,var(--muted-foreground)80%,transparent)}}.text-neutral-600{color:var(--color-neutral-600)}.text-neutral-800{color:var(--color-neutral-800)}.text-orange-500{color:var(--color-orange-500)}.text-orange-700{color:var(--color-orange-700)}.text-pink-700{color:var(--color-pink-700)}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-sidebar-foreground,.text-sidebar-foreground\/70{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab, red, red)){.text-sidebar-foreground\/70{color:color-mix(in oklab,var(--sidebar-foreground)70%,transparent)}}.text-slate-50{color:var(--color-slate-50)}.text-slate-500{color:var(--color-slate-500)}.text-stone-400{color:var(--color-stone-400)}.text-surface-foreground{color:var(--surface-foreground)}.text-transparent{color:#0000}.text-white{color:var(--color-white)}.text-zinc-50{color:var(--color-zinc-50)}.text-zinc-100{color:var(--color-zinc-100)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-700{color:var(--color-zinc-700)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.decoration-primary{-webkit-text-decoration-color:var(--primary);-webkit-text-decoration-color:var(--primary);text-decoration-color:var(--primary)}.decoration-\[0\.5px\]{text-decoration-thickness:.5px}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.caret-primary{caret-color:var(--primary)}.accent-foreground{accent-color:var(--foreground)}.opacity-0{opacity:0}.opacity-10{opacity:.1}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[rgba\(255\,_255\,_255\,_0\.1\)_0px_0\.5px_0px_0px_inset\,_rgb\(248\,_249\,_250\)_0px_1px_5px_0px_inset\,_rgb\(193\,_200\,_205\)_0px_0px_0px_0\.5px\,_rgb\(193\,_200\,_205\)_0px_2px_1px_-1px\,_rgb\(193\,_200\,_205\)_0px_1px_0px_0px\]{--tw-shadow-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.shadow-\[rgba\(255\,_255\,_255\,_0\.1\)_0px_0\.5px_0px_0px_inset\,_rgb\(248\,_249\,_250\)_0px_1px_5px_0px_inset\,_rgb\(193\,_200\,_205\)_0px_0px_0px_0\.5px\,_rgb\(193\,_200\,_205\)_0px_2px_1px_-1px\,_rgb\(193\,_200\,_205\)_0px_1px_0px_0px\]{--tw-shadow-color:color-mix(in oklab,#ffffff1a 0px .5px 0px 0px inset,#f8f9fa 0px 1px 5px 0px inset,#c1c8cd 0px 0px 0px .5px,#c1c8cd 0px 2px 1px -1px,#c1c8cd 0px 1px 0px 0px var(--tw-shadow-alpha),transparent)}}.ring-black\/5{--tw-ring-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.ring-black\/5{--tw-ring-color:color-mix(in oklab,var(--color-black)5%,transparent)}}.ring-ring{--tw-ring-color:var(--ring)}.ring-sidebar-ring{--tw-ring-color:var(--sidebar-ring)}.ring-offset-0{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.ring-offset-background{--tw-ring-offset-color:var(--background)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.invert-1{--tw-invert:invert(1%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.\!filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)!important}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-xs{--tw-backdrop-blur:blur(var(--blur-xs));-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,visibility,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-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;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-shadow{transition-property:box-shadow;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))}.transition-none{transition-property:none}.duration-75{--tw-duration:75ms;transition-duration:75ms}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-1000{--tw-duration:1s;transition-duration:1s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.\[contain\:content\]{contain:content}.fade-in-0{--tw-enter-opacity:0}.outline-none{--tw-outline-style:none;outline-style:none}.select-auto{-webkit-user-select:auto;user-select:auto}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}.zoom-in-95{--tw-enter-scale:.95}.\[--footer-height\:calc\(var\(--spacing\)\*14\)\]{--footer-height:calc(var(--spacing)*14)}.\[--header-height\:calc\(var\(--spacing\)\*14\)\]{--header-height:calc(var(--spacing)*14)}.\[--sidebar-width\:220px\]{--sidebar-width:220px}.\[--top-spacing\:0\]{--top-spacing:0}.\[counter-increment\:step\]{counter-increment:step}.\[counter-reset\:step\]{counter-reset:step}.\[tab-size\:2\]{tab-size:2}.fade-in{--tw-enter-opacity:0}.ring-inset{--tw-ring-inset:inset}.running{animation-play-state:running}:is(.\*\:m-0>*){margin:calc(var(--spacing)*0)}:is(.\*\:shrink-0>*){flex-shrink:0}:is(.\*\*\:my-0 *){margin-block:calc(var(--spacing)*0)}:is(.\*\*\:leading-\[calc\(1\.25\/\.875\)\] *){--tw-leading:calc(1.25/.875);line-height:1.42857}:is(.\*\*\:leading-normal *){--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.not-first\:mt-4:not(:first-child){margin-top:calc(var(--spacing)*4)}.not-first\:mt-6:not(:first-child){margin-top:calc(var(--spacing)*6)}.not-first\:mt-12:not(:first-child){margin-top:calc(var(--spacing)*12)}.not-last\:border-b:not(:last-child){border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.group-first\/column\:-left-1:is(:where(.group\/column):first-child *){left:calc(var(--spacing)*-1)}.group-first\/column\:pl-0:is(:where(.group\/column):first-child *){padding-left:calc(var(--spacing)*0)}.group-last\/column\:-right-1:is(:where(.group\/column):last-child *){right:calc(var(--spacing)*-1)}.group-last\/column\:pr-0:is(:where(.group\/column):last-child *){padding-right:calc(var(--spacing)*0)}.group-last\/toolbar-group\:hidden\!:is(:where(.group\/toolbar-group):last-child *){display:none!important}.group-focus-within\:pointer-events-none:is(:where(.group):focus-within *){pointer-events:none}.group-focus-within\:top-0:is(:where(.group):focus-within *){top:calc(var(--spacing)*0)}.group-focus-within\:cursor-default:is(:where(.group):focus-within *){cursor:default}.group-focus-within\:text-xs:is(:where(.group):focus-within *){font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.group-focus-within\:font-medium:is(:where(.group):focus-within *){--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.group-focus-within\:text-foreground:is(:where(.group):focus-within *){color:var(--foreground)}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\:translate-x-\[-135px\]:is(:where(.group):hover *){--tw-translate-x:-135px;translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:translate-x-\[-181px\]:is(:where(.group):hover *){--tw-translate-x:-181px;translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:rotate-0:is(:where(.group):hover *){rotate:none}.group-hover\:rotate-45:is(:where(.group):hover *){rotate:45deg}.group-hover\:text-\[\#e3b341\]:is(:where(.group):hover *){color:#e3b341}.group-hover\:no-underline:is(:where(.group):hover *){text-decoration-line:none}.group-hover\:underline:is(:where(.group):hover *){text-decoration-line:underline}.group-hover\:opacity-100:is(:where(.group):hover *),.group-hover\/column\:opacity-100:is(:where(.group\/column):hover *),.group-hover\/container\:opacity-100:is(:where(.group\/container):hover *),.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *),.group-hover\/row\:opacity-100:is(:where(.group\/row):hover *){opacity:1}}.group-has-disabled\:opacity-50:is(:where(.group):has(:disabled) *){opacity:.5}.group-has-data-\[resizing\=\"true\"\]\/row\:opacity-0:is(:where(.group\/row):has([data-resizing=true]) *),.group-has-data-\[resizing\=\\\"true\\\"\]\/row\:opacity-0:is(:where(.group\/row):has([data-resizing=\"true\"]) *){opacity:0}.group-has-data-\[sidebar\=menu-action\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-has-\[\[data-col\=\"0\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="0"]:hover) *),.group-has-\[\[data-col\=\"0\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="0"][data-resizing=true]) *),.group-has-\[\[data-col\=\"1\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="1"]:hover) *),.group-has-\[\[data-col\=\"1\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="1"][data-resizing=true]) *),.group-has-\[\[data-col\=\"10\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="10"]:hover) *),.group-has-\[\[data-col\=\"10\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="10"][data-resizing=true]) *),.group-has-\[\[data-col\=\"2\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="2"]:hover) *),.group-has-\[\[data-col\=\"2\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="2"][data-resizing=true]) *),.group-has-\[\[data-col\=\"3\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="3"]:hover) *),.group-has-\[\[data-col\=\"3\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="3"][data-resizing=true]) *),.group-has-\[\[data-col\=\"4\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="4"]:hover) *),.group-has-\[\[data-col\=\"4\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="4"][data-resizing=true]) *),.group-has-\[\[data-col\=\"5\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="5"]:hover) *),.group-has-\[\[data-col\=\"5\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="5"][data-resizing=true]) *),.group-has-\[\[data-col\=\"6\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="6"]:hover) *),.group-has-\[\[data-col\=\"6\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="6"][data-resizing=true]) *),.group-has-\[\[data-col\=\"7\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="7"]:hover) *),.group-has-\[\[data-col\=\"7\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="7"][data-resizing=true]) *),.group-has-\[\[data-col\=\"8\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="8"]:hover) *),.group-has-\[\[data-col\=\"8\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="8"][data-resizing=true]) *),.group-has-\[\[data-col\=\"9\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="9"]:hover) *),.group-has-\[\[data-col\=\"9\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="9"][data-resizing=true]) *),.group-has-\[\[data-col\=\\\"0\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"0\"]:hover) *),.group-has-\[\[data-col\=\\\"0\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"0\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"10\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"10\"]:hover) *),.group-has-\[\[data-col\=\\\"10\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"10\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"1\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"1\"]:hover) *),.group-has-\[\[data-col\=\\\"1\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"1\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"2\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"2\"]:hover) *),.group-has-\[\[data-col\=\\\"2\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"2\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"3\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"3\"]:hover) *),.group-has-\[\[data-col\=\\\"3\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"3\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"4\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"4\"]:hover) *),.group-has-\[\[data-col\=\\\"4\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"4\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"5\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"5\"]:hover) *),.group-has-\[\[data-col\=\\\"5\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"5\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"6\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"6\"]:hover) *),.group-has-\[\[data-col\=\\\"6\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"6\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"7\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"7\"]:hover) *),.group-has-\[\[data-col\=\\\"7\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"7\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"8\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"8\"]:hover) *),.group-has-\[\[data-col\=\\\"8\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"8\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"9\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"9\"]:hover) *),.group-has-\[\[data-col\=\\\"9\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"9\"][data-resizing=\"true\"]) *),.group-has-\[\[data-resizer-left\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-resizer-left]:hover) *),.group-has-\[\[data-resizer-left\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-resizer-left][data-resizing=true]) *),.group-has-\[\[data-resizer-left\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-resizer-left][data-resizing=\"true\"]) *){display:block}.group-data-list\:my-2:is(:where(.group)[data-list] *){margin-block:calc(var(--spacing)*2)}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:size-8\!:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\(--sidebar-width-icon\):is(:where(.group)[data-collapsible=icon] *){width:var(--sidebar-width-icon)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing)*4)))}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing)*4)) + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:p-0\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:p-2\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\[disabled\=true\]\:opacity-50:is(:where(.group)[data-disabled=true] *){opacity:.5}.group-data-\[empty\=true\]\/subheading\:hidden:is(:where(.group\/subheading)[data-empty=true] *){display:none}.group-data-\[pressed\=true\]\:bg-accent:is(:where(.group)[data-pressed=true] *){background-color:var(--accent)}.group-data-\[pressed\=true\]\:text-accent-foreground:is(:where(.group)[data-pressed=true] *){color:var(--accent-foreground)}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:border-sidebar-border:is(:where(.group)[data-variant=floating] *){border-color:var(--sidebar-border)}.group-data-\[variant\=floating\]\:shadow-sm:is(:where(.group)[data-variant=floating] *){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.group-data-\[vaul-drawer-direction\=bottom\]\/drawer-content\:block:is(:where(.group\/drawer-content)[data-vaul-drawer-direction=bottom] *){display:block}.group-data-\[view\=code\]\/block-view-wrapper\:hidden:is(:where(.group\/block-view-wrapper)[data-view=code] *),.group-data-\[view\=preview\]\/block-view-wrapper\:hidden:is(:where(.group\/block-view-wrapper)[data-view=preview] *){display:none}@media (hover:hover){.peer-hover\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button):hover~*){color:var(--sidebar-accent-foreground)}}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.peer-has-\[\[role\=menuitem\]\]\/menu-group\:block:is(:where(.peer\/menu-group):has([role=menuitem])~*),.peer-has-\[\[role\=menuitemradio\]\]\/menu-group\:block:is(:where(.peer\/menu-group):has([role=menuitemradio])~*),.peer-has-\[\[role\=option\]\]\/menu-group\:block:is(:where(.peer\/menu-group):has([role=option])~*){display:block}.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button)[data-active=true]~*){color:var(--sidebar-accent-foreground)}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.selection\:bg-brand\/25 ::selection{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.selection\:bg-brand\/25 ::selection{background-color:color-mix(in oklab,var(--brand)25%,transparent)}}.selection\:bg-brand\/25::selection{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.selection\:bg-brand\/25::selection{background-color:color-mix(in oklab,var(--brand)25%,transparent)}}.selection\:bg-transparent ::selection{background-color:#0000}.selection\:bg-transparent::selection{background-color:#0000}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-7::file-selector-button{height:calc(var(--spacing)*7)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:var(--foreground)}.placeholder\:text-muted-foreground::placeholder,.placeholder\:text-muted-foreground\/80::placeholder{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.placeholder\:text-muted-foreground\/80::placeholder{color:color-mix(in oklab,var(--muted-foreground)80%,transparent)}}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:z-10:before{content:var(--tw-content);z-index:10}.before\:mt-\[-4px\]:before{content:var(--tw-content);margin-top:-4px}.before\:ml-\[-50px\]:before{content:var(--tw-content);margin-left:-50px}.before\:box-border:before{content:var(--tw-content);box-sizing:border-box}.before\:inline-flex:before{content:var(--tw-content);display:inline-flex}.before\:size-full:before{content:var(--tw-content);width:100%;height:100%}.before\:h-9:before{content:var(--tw-content);height:calc(var(--spacing)*9)}.before\:w-9:before{content:var(--tw-content);width:calc(var(--spacing)*9)}.before\:cursor-text:before{content:var(--tw-content);cursor:text}.before\:items-center:before{content:var(--tw-content);align-items:center}.before\:justify-center:before{content:var(--tw-content);justify-content:center}.before\:rounded-full:before{content:var(--tw-content);border-radius:3.40282e38px}.before\:border-4:before{content:var(--tw-content);border-style:var(--tw-border-style);border-width:4px}.before\:border-t:before{content:var(--tw-content);border-top-style:var(--tw-border-style);border-top-width:1px}.before\:border-r:before{content:var(--tw-content);border-right-style:var(--tw-border-style);border-right-width:1px}.before\:border-b:before{content:var(--tw-content);border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.before\:border-l:before{content:var(--tw-content);border-left-style:var(--tw-border-style);border-left-width:1px}.before\:border-background:before{content:var(--tw-content);border-color:var(--background)}.before\:border-t-border:before{content:var(--tw-content);border-top-color:var(--border)}.before\:border-r-border:before{content:var(--tw-content);border-right-color:var(--border)}.before\:border-b-border:before{content:var(--tw-content);border-bottom-color:var(--border)}.before\:border-l-border:before{content:var(--tw-content);border-left-color:var(--border)}.before\:bg-brand\/5:before{content:var(--tw-content);background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.before\:bg-brand\/5:before{background-color:color-mix(in oklab,var(--brand)5%,transparent)}}.before\:bg-muted:before{content:var(--tw-content);background-color:var(--muted)}.before\:text-center:before{content:var(--tw-content);text-align:center}.before\:-indent-px:before{content:var(--tw-content);text-indent:-1px}.before\:font-mono:before{content:var(--tw-content);font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.before\:text-base:before{content:var(--tw-content);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.before\:font-medium:before{content:var(--tw-content);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.before\:text-muted-foreground\/80:before{content:var(--tw-content);color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.before\:text-muted-foreground\/80:before{color:color-mix(in oklab,var(--muted-foreground)80%,transparent)}}.before\:opacity-30:before{content:var(--tw-content);opacity:.3}.before\:content-\[\'\'\]:before{content:var(--tw-content);--tw-content:"";content:var(--tw-content)}.before\:content-\[attr\(placeholder\)\]:before{content:var(--tw-content);--tw-content:attr(placeholder);content:var(--tw-content)}.before\:\[content\:counter\(step\)\]:before{content:var(--tw-content);content:counter(step)}.before\:select-none:before{content:var(--tw-content);-webkit-user-select:none;user-select:none}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-0:after{content:var(--tw-content);inset:calc(var(--spacing)*0)}.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\:inset-y-\[-2px\]:after{content:var(--tw-content);inset-block:-2px}.after\:-top-0\.5:after{content:var(--tw-content);top:calc(var(--spacing)*-.5)}.after\:top-1\/2:after{content:var(--tw-content);top:50%}.after\:right-0:after{content:var(--tw-content);right:calc(var(--spacing)*0)}.after\:-left-1:after{content:var(--tw-content);left:calc(var(--spacing)*-1)}.after\:left-0:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:z-1:after{content:var(--tw-content);z-index:1}.after\:ml-1\.5:after{content:var(--tw-content);margin-left:calc(var(--spacing)*1.5)}.after\:block:after{content:var(--tw-content);display:block}.after\:flex:after{content:var(--tw-content);display:flex}.after\:inline-block:after{content:var(--tw-content);display:inline-block}.after\:h-3:after{content:var(--tw-content);height:calc(var(--spacing)*3)}.after\:h-8:after{content:var(--tw-content);height:calc(var(--spacing)*8)}.after\:h-16:after{content:var(--tw-content);height:calc(var(--spacing)*16)}.after\:h-\[calc\(100\%\)\+4px\]:after{content:var(--tw-content);height:calc(100%)4px}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing)*1)}.after\:w-3:after{content:var(--tw-content);width:calc(var(--spacing)*3)}.after\:w-10:after{content:var(--tw-content);width:calc(var(--spacing)*10)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:w-\[3px\]:after{content:var(--tw-content);width:3px}.after\:w-\[6px\]:after{content:var(--tw-content);width:6px}.after\:w-\[calc\(100\%\+8px\)\]:after{content:var(--tw-content);width:calc(100% + 8px)}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:-translate-x-px:after{content:var(--tw-content);--tw-translate-x:-1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:-translate-y-1\/2:after{content:var(--tw-content);--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:rounded-\[6px\]:after{content:var(--tw-content);border-radius:6px}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px}.after\:rounded-lg:after{content:var(--tw-content);border-radius:var(--radius)}.after\:rounded-sm:after{content:var(--tw-content);border-radius:calc(var(--radius) - 4px)}.after\:bg-border:after{content:var(--tw-content);background-color:var(--border)}.after\:bg-brand\/15:after{content:var(--tw-content);background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.after\:bg-brand\/15:after{background-color:color-mix(in oklab,var(--brand)15%,transparent)}}.after\:bg-neutral-500\/10:after{content:var(--tw-content);background-color:#7373731a}@supports (color:color-mix(in lab, red, red)){.after\:bg-neutral-500\/10:after{background-color:color-mix(in oklab,var(--color-neutral-500)10%,transparent)}}.after\:bg-primary:after{content:var(--tw-content);background-color:var(--primary)}.after\:bg-ring:after{content:var(--tw-content);background-color:var(--ring)}.after\:bg-zinc-950:after{content:var(--tw-content);background-color:var(--color-zinc-950)}.after\:pb-\[var\(--aspect-ratio\)\]:after{content:var(--tw-content);padding-bottom:var(--aspect-ratio)}.after\:align-middle:after{content:var(--tw-content);vertical-align:middle}.after\:opacity-0:after{content:var(--tw-content);opacity:0}.after\:transition-all:after{content:var(--tw-content);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.after\:content-\[\"\"\]:after{content:var(--tw-content);--tw-content:"";content:var(--tw-content)}.after\:content-\[\'_\'\]:after{content:var(--tw-content);--tw-content:" ";content:var(--tw-content)}.after\:content-\[\\\"\\\"\]:after{content:var(--tw-content);--tw-content:\"\";content:var(--tw-content)}@media (hover:hover){.group-hover\:after\:opacity-100:is(:where(.group):hover *):after{content:var(--tw-content);opacity:1}}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:\!mt-0:first-child{margin-top:calc(var(--spacing)*0)!important}.first\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\:rounded-l-md:first-child{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.last\:rounded-r-md:last-child{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.empty\:hidden:empty{display:none}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}.focus-within\:ring-2:focus-within{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-within\:ring-ring:focus-within{--tw-ring-color:var(--ring)}.focus-within\:ring-offset-2:focus-within{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}@media (hover:hover){.hover\:scale-125:hover{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:bg-accent:hover,.hover\:bg-accent\/80:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/80:hover{background-color:color-mix(in oklab,var(--accent)80%,transparent)}}.hover\:bg-black:hover{background-color:var(--color-black)}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}.hover\:bg-muted:hover{background-color:var(--muted)}.hover\:bg-muted-foreground\/15:hover{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted-foreground\/15:hover{background-color:color-mix(in oklab,var(--muted-foreground)15%,transparent)}}.hover\:bg-muted\/50:hover{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.hover\:bg-primary:hover,.hover\:bg-primary\/10:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/10:hover{background-color:color-mix(in oklab,var(--primary)10%,transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}.hover\:bg-secondary\/60:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-secondary\/60:hover{background-color:color-mix(in oklab,var(--secondary)60%,transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--secondary)80%,transparent)}}.hover\:bg-sidebar-accent:hover{background-color:var(--sidebar-accent)}.hover\:bg-slate-700:hover{background-color:var(--color-slate-700)}.hover\:bg-transparent:hover{background-color:#0000}.hover\:bg-zinc-200:hover{background-color:var(--color-zinc-200)}.hover\:bg-zinc-700:hover{background-color:var(--color-zinc-700)}.hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:text-brand\/80:hover{color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.hover\:text-brand\/80:hover{color:color-mix(in oklab,var(--brand)80%,transparent)}}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:text-muted-foreground:hover,.hover\:text-muted-foreground\/80:hover{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.hover\:text-muted-foreground\/80:hover{color:color-mix(in oklab,var(--muted-foreground)80%,transparent)}}.hover\:text-primary:hover{color:var(--primary)}.hover\:text-primary-foreground:hover{color:var(--primary-foreground)}.hover\:text-sidebar-accent-foreground:hover{color:var(--sidebar-accent-foreground)}.hover\:text-slate-50:hover{color:var(--color-slate-50)}.hover\:text-white:hover{color:var(--color-white)}.hover\:text-zinc-50:hover{color:var(--color-zinc-50)}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));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-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-2:hover{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-primary:hover{--tw-ring-color:var(--primary)}.hover\:ring-offset-2:hover{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.hover\:group-data-\[collapsible\=offcanvas\]\:bg-sidebar:hover:is(:where(.group)[data-collapsible=offcanvas] *){background-color:var(--sidebar)}.hover\:after\:absolute:hover:after{content:var(--tw-content);position:absolute}.hover\:after\:-bottom-1:hover:after{content:var(--tw-content);bottom:calc(var(--spacing)*-1)}.hover\:after\:bottom-0:hover:after{content:var(--tw-content);bottom:calc(var(--spacing)*0)}.hover\:after\:left-0:hover:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.hover\:after\:h-10:hover:after{content:var(--tw-content);height:calc(var(--spacing)*10)}.hover\:after\:h-\[1\.5px\]:hover:after{content:var(--tw-content);height:1.5px}.hover\:after\:w-\[calc\(100\%-2px\)\]:hover:after{content:var(--tw-content);width:calc(100% - 2px)}.hover\:after\:bg-brand:hover:after{content:var(--tw-content);background-color:var(--brand)}.hover\:after\:bg-primary:hover:after{content:var(--tw-content);background-color:var(--primary)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:var(--sidebar-border)}}.focus\:z-10:focus{z-index:10}.focus\:bg-accent:focus{background-color:var(--accent)}.focus\:bg-primary:focus{background-color:var(--primary)}.focus\:bg-zinc-700:focus{background-color:var(--color-zinc-700)}.focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.focus\:text-primary-foreground:focus{color:var(--primary-foreground)}.focus\:text-white:focus{color:var(--color-white)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-ring:focus{--tw-ring-color:var(--ring)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:bg-transparent:focus-visible{background-color:#0000}.focus-visible\:bg-zinc-700:focus-visible{background-color:var(--color-zinc-700)}.focus-visible\:text-white:focus-visible{color:var(--color-white)}.focus-visible\:ring-0:focus-visible{--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-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.focus-visible\:ring-ring:focus-visible,.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--ring)50%,transparent)}}.focus-visible\:ring-slate-700:focus-visible{--tw-ring-color:var(--color-slate-700)}.focus-visible\:ring-transparent:focus-visible{--tw-ring-color:transparent}.focus-visible\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-hidden:focus-visible{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus-visible\:outline-hidden:focus-visible{outline-offset:2px;outline:2px solid #0000}}.focus-visible\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\:outline-ring:focus-visible{outline-color:var(--ring)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-sidebar-accent:active{background-color:var(--sidebar-accent)}.active\:bg-transparent:active{background-color:#0000}.active\:bg-zinc-700:active{background-color:var(--color-zinc-700)}.active\:text-sidebar-accent-foreground:active{color:var(--sidebar-accent-foreground)}.active\:text-white:active{color:var(--color-white)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}:where([data-side=left]) .in-data-\[side\=left\]\:cursor-w-resize{cursor:w-resize}:where([data-side=right]) .in-data-\[side\=right\]\:cursor-e-resize{cursor:e-resize}.has-aria-disabled\:border-input:has([aria-disabled=true]){border-color:var(--input)}.has-aria-disabled\:bg-muted:has([aria-disabled=true]){background-color:var(--muted)}.has-data-readonly\:w-fit:has([data-readonly]){width:fit-content}.has-data-readonly\:cursor-default:has([data-readonly]){cursor:default}.has-data-readonly\:border-transparent:has([data-readonly]){border-color:#0000}.has-data-readonly\:focus-within\:\[box-shadow\:none\]:has([data-readonly]):focus-within{box-shadow:none}.has-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-data-\[variant\=inset\]\:bg-sidebar:has([data-variant=inset]){background-color:var(--sidebar)}.has-\[\[data-slate-editor\]\:focus\]\:border-brand\/50:has([data-slate-editor]:focus){border-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.has-\[\[data-slate-editor\]\:focus\]\:border-brand\/50:has([data-slate-editor]:focus){border-color:color-mix(in oklab,var(--brand)50%,transparent)}}.has-\[\[data-slate-editor\]\:focus\]\:ring-2:has([data-slate-editor]:focus){--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.has-\[\[data-slate-editor\]\:focus\]\:ring-brand\/30:has([data-slate-editor]:focus){--tw-ring-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.has-\[\[data-slate-editor\]\:focus\]\:ring-brand\/30:has([data-slate-editor]:focus){--tw-ring-color:color-mix(in oklab,var(--brand)30%,transparent)}}.has-\[\[role\=menuitem\]\]\:block:has([role=menuitem]),.has-\[\[role\=menuitemradio\]\]\:block:has([role=menuitemradio]),.has-\[\[role\=option\]\]\:block:has([role=option]){display:block}.has-\[button\]\:flex:has(:is(button)){display:flex}.has-\[\+input\:not\(\:placeholder-shown\)\]\:pointer-events-none:has(+input:not(:placeholder-shown)){pointer-events:none}.has-\[\+input\:not\(\:placeholder-shown\)\]\:top-0:has(+input:not(:placeholder-shown)){top:calc(var(--spacing)*0)}.has-\[\+input\:not\(\:placeholder-shown\)\]\:cursor-default:has(+input:not(:placeholder-shown)){cursor:default}.has-\[\+input\:not\(\:placeholder-shown\)\]\:text-xs:has(+input:not(:placeholder-shown)){font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.has-\[\+input\:not\(\:placeholder-shown\)\]\:font-medium:has(+input:not(:placeholder-shown)){--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.has-\[\+input\:not\(\:placeholder-shown\)\]\:text-foreground:has(+input:not(:placeholder-shown)){color:var(--foreground)}.has-\[\>svg\]\:grid-cols-\[calc\(var\(--spacing\)\*4\)_1fr\]:has(>svg){grid-template-columns:calc(var(--spacing)*4)1fr}.has-\[\>svg\]\:gap-x-3:has(>svg){column-gap:calc(var(--spacing)*3)}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing)*2.5)}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--spacing)*3)}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--spacing)*4)}.aria-checked\:border-\(--color-1\)[aria-checked=true]{border-color:var(--color-1)}.aria-checked\:bg-accent[aria-checked=true]{background-color:var(--accent)}.aria-checked\:text-accent-foreground[aria-checked=true]{color:var(--accent-foreground)}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.aria-selected\:bg-accent[aria-selected=true]{background-color:var(--accent)}.aria-selected\:bg-primary[aria-selected=true]{background-color:var(--primary)}.aria-selected\:text-accent-foreground[aria-selected=true]{color:var(--accent-foreground)}.aria-selected\:text-muted-foreground[aria-selected=true]{color:var(--muted-foreground)}.aria-selected\:text-primary-foreground[aria-selected=true]{color:var(--primary-foreground)}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}:is(.\*\*\:data-block-hide\:hidden *)[data-block-hide]{display:none}.data-readonly\:w-fit[data-readonly]{width:fit-content}:is(.\*\*\:data-slate-editor\:max-h-\[calc\(100dvh-44px\)\] *)[data-slate-editor]{max-height:calc(100dvh - 44px)}:is(.\*\*\:data-slate-placeholder\:\!top-1\/2 *)[data-slate-placeholder]{top:50%!important}:is(.\*\*\:data-slate-placeholder\:top-\[auto_\!important\] *)[data-slate-placeholder]{top:auto!important}:is(.\*\*\:data-slate-placeholder\:-translate-y-1\/2 *)[data-slate-placeholder]{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.\*\*\:data-slate-placeholder\:text-muted-foreground\/80 *)[data-slate-placeholder]{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){:is(.\*\*\:data-slate-placeholder\:text-muted-foreground\/80 *)[data-slate-placeholder]{color:color-mix(in oklab,var(--muted-foreground)80%,transparent)}}:is(.\*\*\:data-slate-placeholder\:opacity-100\! *)[data-slate-placeholder]{opacity:1!important}.data-\[active-item\=true\]\:bg-accent[data-active-item=true]{background-color:var(--accent)}.data-\[active-item\=true\]\:text-accent-foreground[data-active-item=true]{color:var(--accent-foreground)}.data-\[active\=true\]\:bg-muted[data-active=true]{background-color:var(--muted)}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:var(--sidebar-accent)}.data-\[active\=true\]\:bg-zinc-700[data-active=true]{background-color:var(--color-zinc-700)}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:text-foreground[data-active=true]{color:var(--foreground)}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:var(--sidebar-accent-foreground)}.data-\[active\=true\]\:text-white[data-active=true]{color:var(--color-white)}.data-\[block\=login-01\]\:max-w-full[data-block=login-01]{max-width:100%}.data-\[block\=sidebar-10\]\:right-0[data-block=sidebar-10]{right:calc(var(--spacing)*0)}.data-\[block\=sidebar-10\]\:left-auto[data-block=sidebar-10]{left:auto}.data-\[block\=sidebar-11\]\:-top-1\/3[data-block=sidebar-11]{top:-33.3333%}.data-\[block\=sidebar-13\]\:max-w-full[data-block=sidebar-13]{max-width:100%}.data-\[block\=sidebar-14\]\:right-0[data-block=sidebar-14]{right:calc(var(--spacing)*0)}.data-\[block\=sidebar-14\]\:left-auto[data-block=sidebar-14]{left:auto}.data-\[block\=sidebar-15\]\:max-w-full[data-block=sidebar-15]{max-width:100%}.data-\[depth\=3\]\:pl-4[data-depth="3"]{padding-left:calc(var(--spacing)*4)}.data-\[depth\=3\]\:pl-6[data-depth="3"],.data-\[depth\=4\]\:pl-6[data-depth="4"]{padding-left:calc(var(--spacing)*6)}.data-\[depth\=4\]\:pl-8[data-depth="4"]{padding-left:calc(var(--spacing)*8)}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[error\=true\]\:text-destructive[data-error=true]{color:var(--destructive)}.data-\[highlighted\=true\]\:bg-accent[data-highlighted=true]{background-color:var(--accent)}.data-\[inset\]\:pl-8[data-inset]{padding-left:calc(var(--spacing)*8)}.data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--spacing)*1)}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:var(--muted-foreground)}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:var(--accent)}.data-\[selected\=true\]\:bg-primary\/10[data-selected=true]{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.data-\[selected\=true\]\:bg-primary\/10[data-selected=true]{background-color:color-mix(in oklab,var(--primary)10%,transparent)}}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:var(--accent-foreground)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.data-\[size\=default\]\:h-9[data-size=default]{height:calc(var(--spacing)*9)}.data-\[size\=sm\]\:h-8[data-size=sm]{height:calc(var(--spacing)*8)}:is(.\*\:data-\[slot\=alert\]\:first\:mt-0>*)[data-slot=alert]:first-child{margin-top:calc(var(--spacing)*0)}:is(.\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){:is(.\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:color-mix(in oklab,var(--destructive)90%,transparent)}}:is(.\*\:data-\[slot\=block-selection\]\:left-2>*)[data-slot=block-selection]{left:calc(var(--spacing)*2)}:is(.\*\*\:data-\[slot\=command-input-wrapper\]\:h-12 *)[data-slot=command-input-wrapper]{height:calc(var(--spacing)*12)}:is(.\*\:data-\[slot\=select-value\]\:line-clamp-1>*)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.\*\:data-\[slot\=select-value\]\:flex>*)[data-slot=select-value]{display:flex}:is(.\*\:data-\[slot\=select-value\]\:items-center>*)[data-slot=select-value]{align-items:center}:is(.\*\:data-\[slot\=select-value\]\:gap-2>*)[data-slot=select-value]{gap:calc(var(--spacing)*2)}:is(.\*\*\:data-\[slot\=separator\]\:\!h-4 *)[data-slot=separator]{height:calc(var(--spacing)*4)!important}.data-\[state\=active\]\:flex[data-state=active]{display:flex}.data-\[state\=active\]\:border-b-primary[data-state=active]{border-bottom-color:var(--primary)}.data-\[state\=active\]\:border-b-zinc-50[data-state=active]{border-bottom-color:var(--color-zinc-50)}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--background)}.data-\[state\=active\]\:bg-transparent[data-state=active]{background-color:#0000}.data-\[state\=active\]\:text-foreground[data-state=active]{color:var(--foreground)}.data-\[state\=active\]\:text-zinc-50[data-state=active]{color:var(--color-zinc-50)}.data-\[state\=active\]\:shadow-none[data-state=active]{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:var(--primary)}.data-\[state\=checked\]\:bg-accent[data-state=checked]{background-color:var(--accent)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--primary)}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:var(--primary-foreground)}.data-\[state\=closed\]\:shrink-0[data-state=closed]{flex-shrink:0}.data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:accordion-up var(--tw-animation-duration,var(--tw-duration,.2s))ease-out}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=closed\]\:opacity-0[data-state=closed]{opacity:0}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x:-100%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x:100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y:-100%}.data-\[state\=on\]\:bg-accent[data-state=on]{background-color:var(--accent)}.data-\[state\=on\]\:text-accent-foreground[data-state=on]{color:var(--accent-foreground)}.data-\[state\=open\]\:grow[data-state=open]{flex-grow:1}.data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:accordion-down var(--tw-animation-duration,var(--tw-duration,.2s))ease-out}.data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=open\]\:animate-none[data-state=open]{animation:none}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:var(--accent)}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:var(--secondary)}.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:var(--accent-foreground)}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:var(--muted-foreground)}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x:-100%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x:100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y:-100%}@media (hover:hover){.data-\[state\=open\]\:hover\:bg-sidebar-accent[data-state=open]:hover{background-color:var(--sidebar-accent)}.data-\[state\=open\]\:hover\:bg-zinc-700[data-state=open]:hover{background-color:var(--color-zinc-700)}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground[data-state=open]:hover{color:var(--sidebar-accent-foreground)}.data-\[state\=open\]\:hover\:text-white[data-state=open]:hover{color:var(--color-white)}}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--muted)}.data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{color:var(--destructive)}.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.data-\[variant\=destructive\]\:focus\:text-destructive[data-variant=destructive]:focus{color:var(--destructive)}.data-\[variant\=outline\]\:border-l-0[data-variant=outline]{border-left-style:var(--tw-border-style);border-left-width:0}.data-\[variant\=outline\]\:shadow-xs[data-variant=outline]{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[variant\=outline\]\:first\:border-l[data-variant=outline]:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.data-\[vaul-drawer-direction\=bottom\]\:inset-x-0[data-vaul-drawer-direction=bottom]{inset-inline:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=bottom\]\:bottom-0[data-vaul-drawer-direction=bottom]{bottom:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=bottom\]\:mt-24[data-vaul-drawer-direction=bottom]{margin-top:calc(var(--spacing)*24)}.data-\[vaul-drawer-direction\=bottom\]\:max-h-\[80vh\][data-vaul-drawer-direction=bottom]{max-height:80vh}.data-\[vaul-drawer-direction\=bottom\]\:rounded-t-lg[data-vaul-drawer-direction=bottom]{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.data-\[vaul-drawer-direction\=bottom\]\:border-t[data-vaul-drawer-direction=bottom]{border-top-style:var(--tw-border-style);border-top-width:1px}.data-\[vaul-drawer-direction\=left\]\:inset-y-0[data-vaul-drawer-direction=left]{inset-block:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=left\]\:left-0[data-vaul-drawer-direction=left]{left:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=left\]\:w-3\/4[data-vaul-drawer-direction=left]{width:75%}.data-\[vaul-drawer-direction\=left\]\:border-r[data-vaul-drawer-direction=left]{border-right-style:var(--tw-border-style);border-right-width:1px}.data-\[vaul-drawer-direction\=right\]\:inset-y-0[data-vaul-drawer-direction=right]{inset-block:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=right\]\:right-0[data-vaul-drawer-direction=right]{right:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=right\]\:w-3\/4[data-vaul-drawer-direction=right]{width:75%}.data-\[vaul-drawer-direction\=right\]\:border-l[data-vaul-drawer-direction=right]{border-left-style:var(--tw-border-style);border-left-width:1px}.data-\[vaul-drawer-direction\=top\]\:inset-x-0[data-vaul-drawer-direction=top]{inset-inline:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=top\]\:top-0[data-vaul-drawer-direction=top]{top:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=top\]\:mb-24[data-vaul-drawer-direction=top]{margin-bottom:calc(var(--spacing)*24)}.data-\[vaul-drawer-direction\=top\]\:max-h-\[80vh\][data-vaul-drawer-direction=top]{max-height:80vh}.data-\[vaul-drawer-direction\=top\]\:rounded-b-lg[data-vaul-drawer-direction=top]{border-bottom-right-radius:var(--radius);border-bottom-left-radius:var(--radius)}.data-\[vaul-drawer-direction\=top\]\:border-b[data-vaul-drawer-direction=top]{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}:is(.\*\:nth-\[2\]\:flex-1>*):nth-child(2){flex:1}:is(.\*\:nth-\[2\]\:text-muted-foreground>*):nth-child(2){color:var(--muted-foreground)}:is(.\*\:nth-\[2\]\:line-through>*):nth-child(2){text-decoration-line:line-through}:is(.\*\:nth-\[2\]\:focus\:outline-none>*):nth-child(2):focus{--tw-outline-style:none;outline-style:none}@supports (backdrop-blur:var(--tw)){.supports-backdrop-blur\:bg-background\/60{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.supports-backdrop-blur\:bg-background\/60{background-color:color-mix(in oklab,var(--background)60%,transparent)}}}@supports ((-webkit-backdrop-filter:var(--tw)) or (backdrop-filter:var(--tw))){.supports-backdrop-filter\:bg-background\/60{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.supports-backdrop-filter\:bg-background\/60{background-color:color-mix(in oklab,var(--background)60%,transparent)}}}@media not all and (min-width:48rem){.max-md\:hidden{display:none}}@media not all and (min-width:40rem){.max-sm\:hidden{display:none}.max-sm\:w-full{width:100%}.max-sm\:flex-auto\!{flex:auto!important}}@media (min-width:40rem){.sm\:block{display:block}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:w-\[1280px\]{width:1280px}.sm\:max-w-3xl{max-width:var(--container-3xl)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:p-10{padding:calc(var(--spacing)*10)}.sm\:px-24{padding-inline:calc(var(--spacing)*24)}.sm\:px-\[max\(64px\,calc\(50\%-350px\)\)\]{padding-inline:max(64px,50% - 350px)}.sm\:pr-12{padding-right:calc(var(--spacing)*12)}.sm\:text-left{text-align:left}.sm\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.sm\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.sm\:opacity-0{opacity:0}.data-\[vaul-drawer-direction\=left\]\:sm\:max-w-sm[data-vaul-drawer-direction=left],.data-\[vaul-drawer-direction\=right\]\:sm\:max-w-sm[data-vaul-drawer-direction=right]{max-width:var(--container-sm)}}@media (min-width:48rem){.md\:sticky{position:sticky}.md\:my-8{margin-block:calc(var(--spacing)*8)}.md\:mt-24{margin-top:calc(var(--spacing)*24)}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:aspect-auto{aspect-ratio:auto}.md\:size-7{width:calc(var(--spacing)*7);height:calc(var(--spacing)*7)}.md\:h-7{height:calc(var(--spacing)*7)}.md\:h-24{height:calc(var(--spacing)*24)}.md\:w-40{width:calc(var(--spacing)*40)}.md\:w-auto{width:auto}.md\:flex-1{flex:1}.md\:flex-none{flex:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-\[var\(--sidebar-width\)_minmax\(0\,1fr\)\]{grid-template-columns:var(--sidebar-width)minmax(0,1fr)}.md\:flex-row{flex-direction:row}.md\:flex-row-reverse{flex-direction:row-reverse}.md\:items-start{align-items:flex-start}.md\:justify-end{justify-content:flex-end}.md\:gap-4{gap:calc(var(--spacing)*4)}.md\:gap-16{gap:calc(var(--spacing)*16)}.md\:gap-24{gap:calc(var(--spacing)*24)}:where(.md\: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)))}.md\:px-2{padding-inline:calc(var(--spacing)*2)}.md\:px-8{padding-inline:calc(var(--spacing)*8)}.md\:py-0{padding-block:calc(var(--spacing)*0)}.md\:py-10{padding-block:calc(var(--spacing)*10)}.md\:pt-0{padding-top:calc(var(--spacing)*0)}.md\:pr-\[14px\]{padding-right:14px}.md\:text-left{text-align:left}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:\[--sidebar-width\:240px\]{--sidebar-width:240px}.md\:\[--top-spacing\:calc\(var\(--spacing\)\*4\)\]{--top-spacing:calc(var(--spacing)*4)}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:calc(var(--radius) + 4px)}.md\:peer-data-\[variant\=inset\]\:shadow-sm:is(:where(.peer)[data-variant=inset]~*){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-2:is(:where(.peer)[data-variant=inset]~*):is(:where(.peer)[data-state=collapsed]~*){margin-left:calc(var(--spacing)*2)}.md\:after\:hidden:after{content:var(--tw-content);display:none}}@media (min-width:64rem){.lg\:sticky{position:sticky}.lg\:top-20{top:calc(var(--spacing)*20)}.lg\:bottom-auto{bottom:auto}.lg\:mt-36{margin-top:calc(var(--spacing)*36)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:inline{display:inline}.lg\:inline-flex{display:inline-flex}.lg\:w-56{width:calc(var(--spacing)*56)}.lg\:w-auto{width:auto}.lg\:w-full{width:100%}.lg\:flex-col{flex-direction:column}.lg\:justify-start{justify-content:flex-start}.lg\:gap-1{gap:calc(var(--spacing)*1)}.lg\:gap-6{gap:calc(var(--spacing)*6)}.lg\:gap-48{gap:calc(var(--spacing)*48)}.lg\:px-0{padding-inline:calc(var(--spacing)*0)}.lg\:py-8{padding-block:calc(var(--spacing)*8)}.lg\:py-12{padding-block:calc(var(--spacing)*12)}.lg\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.lg\:leading-\[1\.1\]{--tw-leading:1.1;line-height:1.1}}@media (min-width:80rem){.xl\:block{display:block}.xl\:flex{display:flex}.xl\:hidden{display:none}.xl\:inline{display:inline}.xl\:w-64{width:calc(var(--spacing)*64)}.xl\:w-auto{width:auto}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:gap-10{gap:calc(var(--spacing)*10)}.xl\:\[--footer-height\:calc\(var\(--spacing\)\*24\)\]{--footer-height:calc(var(--spacing)*24)}}@media (min-width:96rem){.\32 xl\:block{display:block}.\32 xl\:hidden{display:none}}@container not (min-width:32rem){.\@max-lg\:col-span-full{grid-column:1/-1}}.dark\:block:is(.dark *){display:block}.dark\:hidden:is(.dark *){display:none}.dark\:border-border:is(.dark *){border-color:var(--border)}.dark\:border-input:is(.dark *){border-color:var(--input)}.dark\:bg-cyan-950:is(.dark *){background-color:var(--color-cyan-950)}.dark\:bg-destructive\/60:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-destructive\/60:is(.dark *){background-color:color-mix(in oklab,var(--destructive)60%,transparent)}}.dark\:bg-gray-800:is(.dark *){background-color:var(--color-gray-800)}.dark\:bg-green-950:is(.dark *){background-color:var(--color-green-950)}.dark\:bg-input\/30:is(.dark *){background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-input\/30:is(.dark *){background-color:color-mix(in oklab,var(--input)30%,transparent)}}.dark\:bg-muted:is(.dark *){background-color:var(--muted)}.dark\:bg-neutral-900:is(.dark *){background-color:var(--color-neutral-900)}.dark\:bg-orange-950:is(.dark *){background-color:var(--color-orange-950)}.dark\:bg-pink-950:is(.dark *){background-color:var(--color-pink-950)}.dark\:bg-purple-900:is(.dark *){background-color:var(--color-purple-900)}.dark\:bg-purple-950:is(.dark *){background-color:var(--color-purple-950)}.dark\:bg-red-900:is(.dark *){background-color:var(--color-red-900)}.dark\:bg-red-950:is(.dark *){background-color:var(--color-red-950)}.dark\:bg-white:is(.dark *){background-color:var(--color-white)}.dark\:bg-zinc-800:is(.dark *){background-color:var(--color-zinc-800)}.dark\:bg-zinc-900:is(.dark *){background-color:var(--color-zinc-900)}.dark\:bg-zinc-900\!:is(.dark *){background-color:var(--color-zinc-900)!important}.dark\:stroke-slate-600:is(.dark *){stroke:var(--color-slate-600)}.dark\:text-background:is(.dark *){color:var(--background)}.dark\:text-black:is(.dark *){color:var(--color-black)}.dark\:text-cyan-300:is(.dark *){color:var(--color-cyan-300)}.dark\:text-foreground:is(.dark *){color:var(--foreground)}.dark\:text-gray-300:is(.dark *){color:var(--color-gray-300)}.dark\:text-green-300:is(.dark *){color:var(--color-green-300)}.dark\:text-muted-foreground:is(.dark *){color:var(--muted-foreground)}.dark\:text-neutral-300:is(.dark *){color:var(--color-neutral-300)}.dark\:text-neutral-400:is(.dark *){color:var(--color-neutral-400)}.dark\:text-orange-300:is(.dark *){color:var(--color-orange-300)}.dark\:text-pink-300:is(.dark *){color:var(--color-pink-300)}.dark\:text-purple-300:is(.dark *){color:var(--color-purple-300)}.dark\:text-purple-400:is(.dark *){color:var(--color-purple-400)}.dark\:text-red-300:is(.dark *){color:var(--color-red-300)}.dark\:text-red-400:is(.dark *){color:var(--color-red-400)}.dark\:text-white:is(.dark *){color:var(--color-white)}.dark\:shadow-\[rgba\(255\,_255\,_255\,_0\.1\)_0px_0\.5px_0px_0px_inset\,_rgb\(26\,_29\,_30\)_0px_1px_5px_0px_inset\,_rgb\(76\,_81\,_85\)_0px_0px_0px_0\.5px\,_rgb\(76\,_81\,_85\)_0px_2px_1px_-1px\,_rgb\(76\,_81\,_85\)_0px_1px_0px_0px\]:is(.dark *){--tw-shadow-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.dark\:shadow-\[rgba\(255\,_255\,_255\,_0\.1\)_0px_0\.5px_0px_0px_inset\,_rgb\(26\,_29\,_30\)_0px_1px_5px_0px_inset\,_rgb\(76\,_81\,_85\)_0px_0px_0px_0\.5px\,_rgb\(76\,_81\,_85\)_0px_2px_1px_-1px\,_rgb\(76\,_81\,_85\)_0px_1px_0px_0px\]:is(.dark *){--tw-shadow-color:color-mix(in oklab,#ffffff1a 0px .5px 0px 0px inset,#1a1d1e 0px 1px 5px 0px inset,#4c5155 0px 0px 0px .5px,#4c5155 0px 2px 1px -1px,#4c5155 0px 1px 0px 0px var(--tw-shadow-alpha),transparent)}}.dark\:ring-white\/5:is(.dark *){--tw-ring-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.dark\:ring-white\/5:is(.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)5%,transparent)}}@media (hover:hover){.dark\:hover\:bg-accent\/50:is(.dark *):hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-accent\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--input)50%,transparent)}}.dark\:hover\:bg-transparent:is(.dark *):hover{background-color:#0000}}.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\:data-\[state\=active\]\:border-input:is(.dark *)[data-state=active]{border-color:var(--input)}.dark\:data-\[state\=active\]\:bg-input\/30:is(.dark *)[data-state=active]{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\:data-\[state\=active\]\:bg-input\/30:is(.dark *)[data-state=active]{background-color:color-mix(in oklab,var(--input)30%,transparent)}}.dark\:data-\[state\=active\]\:text-foreground:is(.dark *)[data-state=active]{color:var(--foreground)}.dark\:data-\[state\=checked\]\:bg-primary:is(.dark *)[data-state=checked]{background-color:var(--primary)}.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is(.dark *)[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is(.dark *)[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--destructive)20%,transparent)}}@media (min-width:48rem){.md\:dark\:hidden:is(.dark *){display:none}}@media print{.print\:hidden{display:none}.print\:break-inside-avoid{break-inside:avoid}.print\:placeholder\:text-transparent::placeholder{color:#0000}}@media (min-width:1600px){.\33 xl\:fixed\:container:is(.layout-fixed *){width:100%}@media (min-width:1600px){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:1600px}}@media (min-width:2000px){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:2000px}}@media (min-width:40rem){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:40rem}}@media (min-width:48rem){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:48rem}}@media (min-width:64rem){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:64rem}}@media (min-width:80rem){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:80rem}}@media (min-width:96rem){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:96rem}}.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:calc(var(--breakpoint-xl) + 2rem);padding-inline:calc(var(--spacing)*4);margin-inline:auto}@media (min-width:80rem){.\33 xl\:fixed\:container:is(.layout-fixed *){padding-inline:calc(var(--spacing)*6)}}.\33 xl\:fixed\:px-0:is(.layout-fixed *){padding-inline:calc(var(--spacing)*0)}.\33 xl\:fixed\:px-3:is(.layout-fixed *){padding-inline:calc(var(--spacing)*3)}}.\[\&_\*\:\:selection\]\:\!bg-transparent ::selection{background-color:#0000!important}.\[\&_\*\:\:selection\]\:bg-none ::selection{background-image:none}.\[\&_\.katex-display\]\:my-0 .katex-display{margin-block:calc(var(--spacing)*0)}.\[\&_\.katex-display\]\:my-0\! .katex-display{margin-block:calc(var(--spacing)*0)!important}.\[\&_\.line\:before\]\:sticky .line:before{position:sticky}.\[\&_\.line\:before\]\:left-2 .line:before{left:calc(var(--spacing)*2)}.\[\&_\.line\:before\]\:z-10 .line:before{z-index:10}.\[\&_\.line\:before\]\:-translate-y-px .line:before{--tw-translate-y:-1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&_\.line\:before\]\:pr-1 .line:before{padding-right:calc(var(--spacing)*1)}.\[\&_\.react-tweet-theme\]\:my-0 .react-tweet-theme{margin-block:calc(var(--spacing)*0)}.\[\&_\.react-tweet-theme\]\:ring-2 .react-tweet-theme{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.\[\&_\.react-tweet-theme\]\:ring-ring .react-tweet-theme{--tw-ring-color:var(--ring)}.\[\&_\.react-tweet-theme\]\:ring-offset-2 .react-tweet-theme{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.\[\&_\.slate-selected\]\:\!bg-primary\/20 .slate-selected{background-color:var(--primary)!important}@supports (color:color-mix(in lab, red, red)){.\[\&_\.slate-selected\]\:\!bg-primary\/20 .slate-selected{background-color:color-mix(in oklab,var(--primary)20%,transparent)!important}}.\[\&_\.slate-selection-area\]\:z-50 .slate-selection-area{z-index:50}.\[\&_\.slate-selection-area\]\:border .slate-selection-area{border-style:var(--tw-border-style);border-width:1px}.\[\&_\.slate-selection-area\]\:border-brand\/25 .slate-selection-area{border-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.\[\&_\.slate-selection-area\]\:border-brand\/25 .slate-selection-area{border-color:color-mix(in oklab,var(--brand)25%,transparent)}}.\[\&_\.slate-selection-area\]\:border-primary .slate-selection-area{border-color:var(--primary)}.\[\&_\.slate-selection-area\]\:bg-brand\/15 .slate-selection-area{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.\[\&_\.slate-selection-area\]\:bg-brand\/15 .slate-selection-area{background-color:color-mix(in oklab,var(--brand)15%,transparent)}}.\[\&_\.slate-selection-area\]\:bg-primary\/10 .slate-selection-area{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.\[\&_\.slate-selection-area\]\:bg-primary\/10 .slate-selection-area{background-color:color-mix(in oklab,var(--primary)10%,transparent)}}.\[\&_\>_\.lty-playbtn\]\:absolute>.lty-playbtn{position:absolute}.\[\&_\>_\.lty-playbtn\]\:top-1\/2>.lty-playbtn{top:50%}.\[\&_\>_\.lty-playbtn\]\:left-1\/2>.lty-playbtn{left:50%}.\[\&_\>_\.lty-playbtn\]\:z-1>.lty-playbtn{z-index:1}.\[\&_\>_\.lty-playbtn\]\:h-\[46px\]>.lty-playbtn{height:46px}.\[\&_\>_\.lty-playbtn\]\:w-\[70px\]>.lty-playbtn{width:70px}.\[\&_\>_\.lty-playbtn\]\:\[transform\:translate3d\(-50\%\,-50\%\,0\)\]>.lty-playbtn{transform:translate(-50%,-50%)}.\[\&_\>_\.lty-playbtn\]\:rounded-\[14\%\]>.lty-playbtn{border-radius:14%}.\[\&_\>_\.lty-playbtn\]\:bg-\[\#212121\]>.lty-playbtn{background-color:#212121}.\[\&_\>_\.lty-playbtn\]\:opacity-80>.lty-playbtn{opacity:.8}.\[\&_\>_\.lty-playbtn\]\:\[transition\:all_0\.2s_cubic-bezier\(0\,_0\,_0\.2\,_1\)\]>.lty-playbtn{transition:all .2s cubic-bezier(0,0,.2,1)}.\[\&_\>_\.lty-playbtn\]\:before\:absolute>.lty-playbtn:before{content:var(--tw-content);position:absolute}.\[\&_\>_\.lty-playbtn\]\:before\:top-1\/2>.lty-playbtn:before{content:var(--tw-content);top:50%}.\[\&_\>_\.lty-playbtn\]\:before\:left-1\/2>.lty-playbtn:before{content:var(--tw-content);left:50%}.\[\&_\>_\.lty-playbtn\]\:before\:\[transform\:translate3d\(-50\%\,-50\%\,0\)\]>.lty-playbtn:before{content:var(--tw-content);transform:translate(-50%,-50%)}.\[\&_\>_\.lty-playbtn\]\:before\:border-y-\[11px\]>.lty-playbtn:before{content:var(--tw-content);border-block-style:var(--tw-border-style);border-block-width:11px}.\[\&_\>_\.lty-playbtn\]\:before\:border-r-0>.lty-playbtn:before{content:var(--tw-content);border-right-style:var(--tw-border-style);border-right-width:0}.\[\&_\>_\.lty-playbtn\]\:before\:border-l-\[19px\]>.lty-playbtn:before{content:var(--tw-content);border-left-style:var(--tw-border-style);border-left-width:19px}.\[\&_\>_\.lty-playbtn\]\:before\:border-\[transparent_transparent_transparent_\#fff\]>.lty-playbtn:before{content:var(--tw-content);border-color:#0000 #0000 #0000 #fff}.\[\&_\>_\.lty-playbtn\]\:before\:content-\[\"\"\]>.lty-playbtn:before{content:var(--tw-content);--tw-content:"";content:var(--tw-content)}.\[\&_\>_\.lty-playbtn\]\:before\:content-\[\\\"\\\"\]>.lty-playbtn:before{content:var(--tw-content);--tw-content:\"\";content:var(--tw-content)}.\[\&_\>_iframe\]\:absolute>iframe{position:absolute}.\[\&_\>_iframe\]\:top-0>iframe{top:calc(var(--spacing)*0)}.\[\&_\>_iframe\]\:left-0>iframe{left:calc(var(--spacing)*0)}.\[\&_\>_iframe\]\:size-full>iframe{width:100%;height:100%}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:var(--muted-foreground)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_button\]\:hidden button{display:none}.\[\&_code\]\:text-sm code{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.\[\&_h3\.font-heading\]\:text-base h3.font-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.\[\&_h3\.font-heading\]\:font-semibold h3.font-heading{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_pre\]\:my-0 pre{margin-block:calc(var(--spacing)*0)}.\[\&_pre\]\:h-\(--height\) pre{height:var(--height)}.\[\&_pre\]\:max-h-\[350px\] pre{max-height:350px}.\[\&_pre\]\:max-h-\[650px\] pre{max-height:650px}.\[\&_pre\]\:overflow-auto pre{overflow:auto}.\[\&_pre\]\:overflow-hidden pre{overflow:hidden}.\[\&_pre\]\:bg-transparent\! pre{background-color:#0000!important}.\[\&_pre\]\:pt-4 pre{padding-top:calc(var(--spacing)*4)}.\[\&_pre\]\:pb-20 pre{padding-bottom:calc(var(--spacing)*20)}.\[\&_pre\]\:pb-\[100px\] pre{padding-bottom:100px}.\[\&_pre\]\:font-mono pre{font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.\[\&_pre\]\:text-sm pre{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.\[\&_pre\]\:leading-relaxed pre{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_strong\]\:font-bold strong{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:\!size-3 svg{width:calc(var(--spacing)*3)!important;height:calc(var(--spacing)*3)!important}.\[\&_svg\]\:size-3\.5 svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:size-6 svg{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\]\:text-muted-foreground svg{color:var(--muted-foreground)}@media (hover:hover){.\[\&_svg\]\:hover\:text-muted-foreground svg:hover{color:var(--muted-foreground)}}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:var(--muted-foreground)}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&_ul\]\:list-\[circle\] ul{list-style-type:circle}.\[\&_ul_ul\]\:list-\[square\] ul ul{list-style-type:square}.\[\&\.lyt-activated\]\:cursor-\[unset\].lyt-activated{cursor:unset}.\[\&\.lyt-activated\]\:before\:pointer-events-none.lyt-activated:before{content:var(--tw-content);pointer-events:none}.\[\&\.lyt-activated\]\:before\:absolute.lyt-activated:before{content:var(--tw-content);position:absolute}.\[\&\.lyt-activated\]\:before\:top-0.lyt-activated:before{content:var(--tw-content);top:calc(var(--spacing)*0)}.\[\&\.lyt-activated\]\:before\:h-\[60px\].lyt-activated:before{content:var(--tw-content);height:60px}.\[\&\.lyt-activated\]\:before\:w-full.lyt-activated:before{content:var(--tw-content);width:100%}.\[\&\.lyt-activated\]\:before\:bg-\[url\(data\:image\/png\;base64\,iVBORw0KGgoAAAANSUhEUgAAAAEAAADGCAYAAAAT\+OqFAAAAdklEQVQoz42QQQ7AIAgEF\/T\/D\+kbq\/RWAlnQyyazA4aoAB4FsBSA\/bFjuF1EOL7VbrIrBuusmrt4ZZORfb6ehbWdnRHEIiITaEUKa5EJqUakRSaEYBJSCY2dEstQY7AuxahwXFrvZmWl2rh4JZ07z9dLtesfNj5q0FU3A5ObbwAAAABJRU5ErkJggg\=\=\)\].lyt-activated:before{content:var(--tw-content);background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAADGCAYAAAAT+OqFAAAAdklEQVQoz42QQQ7AIAgEF/T/D+kbq/RWAlnQyyazA4aoAB4FsBSA/bFjuF1EOL7VbrIrBuusmrt4ZZORfb6ehbWdnRHEIiITaEUKa5EJqUakRSaEYBJSCY2dEstQY7AuxahwXFrvZmWl2rh4JZ07z9dLtesfNj5q0FU3A5ObbwAAAABJRU5ErkJggg==)}.\[\&\.lyt-activated\]\:before\:bg-top.lyt-activated:before{content:var(--tw-content);background-position:top}.\[\&\.lyt-activated\]\:before\:bg-repeat-x.lyt-activated:before{content:var(--tw-content);background-repeat:repeat-x}.\[\&\.lyt-activated\]\:before\:pb-\[50px\].lyt-activated:before{content:var(--tw-content);padding-bottom:50px}.\[\&\.lyt-activated\]\:before\:opacity-0.lyt-activated:before{content:var(--tw-content);opacity:0}.\[\&\.lyt-activated\]\:before\:\[transition\:all_0\.2s_cubic-bezier\(0\,_0\,_0\.2\,_1\)\].lyt-activated:before{content:var(--tw-content);transition:all .2s cubic-bezier(0,0,.2,1)}.\[\&\.lyt-activated_\>_\.lty-playbtn\]\:pointer-events-none.lyt-activated>.lty-playbtn{pointer-events:none}.\[\&\.lyt-activated_\>_\.lty-playbtn\]\:opacity-0\!.lyt-activated>.lty-playbtn{opacity:0!important}.\[\&\:\:-webkit-scrollbar\]\:w-4::-webkit-scrollbar{width:calc(var(--spacing)*4)}.\[\&\:\:-webkit-scrollbar-button\]\:hidden::-webkit-scrollbar-button{display:none}.\[\&\:\:-webkit-scrollbar-button\]\:size-0::-webkit-scrollbar-button{width:calc(var(--spacing)*0);height:calc(var(--spacing)*0)}.\[\&\:\:-webkit-scrollbar-thumb\]\:min-h-11::-webkit-scrollbar-thumb{min-height:calc(var(--spacing)*11)}.\[\&\:\:-webkit-scrollbar-thumb\]\:rounded-full::-webkit-scrollbar-thumb{border-radius:3.40282e38px}.\[\&\:\:-webkit-scrollbar-thumb\]\:border-4::-webkit-scrollbar-thumb{border-style:var(--tw-border-style);border-width:4px}.\[\&\:\:-webkit-scrollbar-thumb\]\:border-solid::-webkit-scrollbar-thumb{--tw-border-style:solid;border-style:solid}.\[\&\:\:-webkit-scrollbar-thumb\]\:border-popover::-webkit-scrollbar-thumb{border-color:var(--popover)}.\[\&\:\:-webkit-scrollbar-thumb\]\:bg-muted::-webkit-scrollbar-thumb{background-color:var(--muted)}.\[\&\:\:-webkit-scrollbar-thumb\]\:bg-clip-padding::-webkit-scrollbar-thumb{background-clip:padding-box}@media (hover:hover){.\[\&\:\:-webkit-scrollbar-thumb\]\:hover\:bg-muted-foreground\/25::-webkit-scrollbar-thumb:hover{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.\[\&\:\:-webkit-scrollbar-thumb\]\:hover\:bg-muted-foreground\/25::-webkit-scrollbar-thumb:hover{background-color:color-mix(in oklab,var(--muted-foreground)25%,transparent)}}}.focus\:\[\&\:\:placeholder\]\:opacity-0:focus::placeholder{opacity:0}.\[\&\:has\(\>\.day-range-end\)\]\:rounded-r-md:has(>.day-range-end){border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\>\.day-range-start\)\]\:rounded-l-md:has(>.day-range-start){border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[aria-selected\]\)\]\:rounded-md:has([aria-selected]){border-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[aria-selected\]\)\]\:bg-accent:has([aria-selected]){background-color:var(--accent)}.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:first-child:has([aria-selected]){border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:last-child:has([aria-selected]),.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\&\:has\(\[role\=option\]\)\]\:block:has([role=option]){display:block}.\[\&\:hover_\>_\.lty-playbtn\]\:bg-\[red\]:hover>.lty-playbtn{background-color:red}.\[\&\:hover_\>_\.lty-playbtn\]\:opacity-100:hover>.lty-playbtn{opacity:1}.\[\.border-b\]\:pb-6.border-b{padding-bottom:calc(var(--spacing)*6)}.\[\.border-t\]\:pt-6.border-t{padding-top:calc(var(--spacing)*6)}:is(.\*\*\:\[\.hljs-addition\]\:bg-\[\#f0fff4\] *).hljs-addition{background-color:#f0fff4}:is(.\*\*\:\[\.hljs-addition\]\:text-\[\#22863a\] *).hljs-addition{color:#22863a}:is(.dark\:\*\*\:\[\.hljs-addition\]\:bg-\[\#3c5743\]:is(.dark *) *).hljs-addition{background-color:#3c5743}:is(.dark\:\*\*\:\[\.hljs-addition\]\:text-\[\#ceead5\]:is(.dark *) *).hljs-addition{color:#ceead5}:is(.\*\*\:\[\.hljs-attr\,\.hljs-attribute\,\.hljs-literal\,\.hljs-meta\,\.hljs-number\,\.hljs-operator\,\.hljs-selector-attr\,\.hljs-selector-class\,\.hljs-selector-id\,\.hljs-variable\]\:text-\[\#005cc5\] *):is(.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable){color:#005cc5}:is(.dark\:\*\*\:\[\.hljs-attr\,\.hljs-attribute\,\.hljs-literal\,\.hljs-meta\,\.hljs-number\,\.hljs-operator\,\.hljs-selector-attr\,\.hljs-selector-class\,\.hljs-selector-id\,\.hljs-variable\]\:text-\[\#6596cf\]:is(.dark *) *):is(.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable){color:#6596cf}:is(.\*\*\:\[\.hljs-built\\\\\\\\\\\\\\\\_in\,\.hljs-symbol\]\:text-\[\#e36209\] *):is(.hljs-built\\\\\\_in,.hljs-symbol){color:#e36209}:is(.dark\:\*\*\:\[\.hljs-built\\\\\\\\\\\\\\\\_in\,\.hljs-symbol\]\:text-\[\#c3854e\]:is(.dark *) *):is(.hljs-built\\\\\\_in,.hljs-symbol){color:#c3854e}:is(.\*\*\:\[\.hljs-built\\\\\\\\_in\,\.hljs-symbol\]\:text-\[\#e36209\] *):is(.hljs-built\\_in,.hljs-symbol){color:#e36209}:is(.dark\:\*\*\:\[\.hljs-built\\\\\\\\_in\,\.hljs-symbol\]\:text-\[\#c3854e\]:is(.dark *) *):is(.hljs-built\\_in,.hljs-symbol){color:#c3854e}:is(.\*\*\:\[\.hljs-bullet\]\:text-\[\#735c0f\] *).hljs-bullet{color:#735c0f}:is(.\*\*\:\[\.hljs-comment\,\.hljs-code\,\.hljs-formula\]\:text-\[\#6a737d\] *):is(.hljs-comment,.hljs-code,.hljs-formula),:is(.dark\:\*\*\:\[\.hljs-comment\,\.hljs-code\,\.hljs-formula\]\:text-\[\#6a737d\]:is(.dark *) *):is(.hljs-comment,.hljs-code,.hljs-formula){color:#6a737d}:is(.\*\*\:\[\.hljs-deletion\]\:bg-\[\#ffeef0\] *).hljs-deletion{background-color:#ffeef0}:is(.\*\*\:\[\.hljs-deletion\]\:text-\[\#b31d28\] *).hljs-deletion{color:#b31d28}:is(.dark\:\*\*\:\[\.hljs-deletion\]\:bg-\[\#473235\]:is(.dark *) *).hljs-deletion{background-color:#473235}:is(.dark\:\*\*\:\[\.hljs-deletion\]\:text-\[\#e7c7cb\]:is(.dark *) *).hljs-deletion{color:#e7c7cb}:is(.\*\*\:\[\.hljs-emphasis\]\:italic *).hljs-emphasis{font-style:italic}:is(.\*\*\:\[\.hljs-keyword\,\.hljs-doctag\,\.hljs-template-tag\,\.hljs-template-variable\,\.hljs-type\,\.hljs-variable\.language\\\\\\\\\\\\\\\\_\]\:text-\[\#d73a49\] *):is(.hljs-keyword,.hljs-doctag,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language\\\\\\_){color:#d73a49}:is(.dark\:\*\*\:\[\.hljs-keyword\,\.hljs-doctag\,\.hljs-template-tag\,\.hljs-template-variable\,\.hljs-type\,\.hljs-variable\.language\\\\\\\\\\\\\\\\_\]\:text-\[\#ee6960\]:is(.dark *) *):is(.hljs-keyword,.hljs-doctag,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language\\\\\\_){color:#ee6960}:is(.\*\*\:\[\.hljs-keyword\,\.hljs-doctag\,\.hljs-template-tag\,\.hljs-template-variable\,\.hljs-type\,\.hljs-variable\.language\\\\\\\\_\]\:text-\[\#d73a49\] *):is(.hljs-keyword,.hljs-doctag,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language\\_){color:#d73a49}:is(.dark\:\*\*\:\[\.hljs-keyword\,\.hljs-doctag\,\.hljs-template-tag\,\.hljs-template-variable\,\.hljs-type\,\.hljs-variable\.language\\\\\\\\_\]\:text-\[\#ee6960\]:is(.dark *) *):is(.hljs-keyword,.hljs-doctag,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language\\_){color:#ee6960}:is(.\*\*\:\[\.hljs-name\,\.hljs-quote\,\.hljs-selector-tag\,\.hljs-selector-pseudo\]\:text-\[\#22863a\] *):is(.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo){color:#22863a}:is(.dark\:\*\*\:\[\.hljs-name\,\.hljs-quote\,\.hljs-selector-tag\,\.hljs-selector-pseudo\]\:text-\[\#36a84f\]:is(.dark *) *):is(.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo){color:#36a84f}:is(.\*\*\:\[\.hljs-regexp\,\.hljs-string\,\.hljs-meta_\.hljs-string\]\:text-\[\#032f62\] *):is(.hljs-regexp,.hljs-string,.hljs-meta .hljs-string){color:#032f62}:is(.dark\:\*\*\:\[\.hljs-regexp\,\.hljs-string\,\.hljs-meta_\.hljs-string\]\:text-\[\#3593ff\]:is(.dark *) *):is(.hljs-regexp,.hljs-string,.hljs-meta .hljs-string){color:#3593ff}:is(.\*\*\:\[\.hljs-section\]\:font-bold *).hljs-section{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}:is(.\*\*\:\[\.hljs-section\]\:text-\[\#005cc5\] *).hljs-section{color:#005cc5}:is(.dark\:\*\*\:\[\.hljs-section\]\:text-\[\#61a5f2\]:is(.dark *) *).hljs-section{color:#61a5f2}:is(.\*\*\:\[\.hljs-strong\]\:font-bold *).hljs-strong{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}:is(.\*\*\:\[\.hljs-title\,\.hljs-title\.class\\\\\\\\\\\\\\\\_\,\.hljs-title\.class\\\\\\\\\\\\\\\\_\.inherited\\\\\\\\\\\\\\\\_\\\\\\\\\\\\\\\\_\,\.hljs-title\.function\\\\\\\\\\\\\\\\_\]\:text-\[\#6f42c1\] *):is(.hljs-title,.hljs-title.class\\\\\\_,.hljs-title.class\\\\\\_.inherited\\\\\\_\\\\\\_,.hljs-title.function\\\\\\_){color:#6f42c1}:is(.dark\:\*\*\:\[\.hljs-title\,\.hljs-title\.class\\\\\\\\\\\\\\\\_\,\.hljs-title\.class\\\\\\\\\\\\\\\\_\.inherited\\\\\\\\\\\\\\\\_\\\\\\\\\\\\\\\\_\,\.hljs-title\.function\\\\\\\\\\\\\\\\_\]\:text-\[\#a77bfa\]:is(.dark *) *):is(.hljs-title,.hljs-title.class\\\\\\_,.hljs-title.class\\\\\\_.inherited\\\\\\_\\\\\\_,.hljs-title.function\\\\\\_){color:#a77bfa}:is(.\*\*\:\[\.hljs-title\,\.hljs-title\.class\\\\\\\\_\,\.hljs-title\.class\\\\\\\\_\.inherited\\\\\\\\_\\\\\\\\_\,\.hljs-title\.function\\\\\\\\_\]\:text-\[\#6f42c1\] *):is(.hljs-title,.hljs-title.class\\_,.hljs-title.class\\_.inherited\\_\\_,.hljs-title.function\\_){color:#6f42c1}:is(.dark\:\*\*\:\[\.hljs-title\,\.hljs-title\.class\\\\\\\\_\,\.hljs-title\.class\\\\\\\\_\.inherited\\\\\\\\_\\\\\\\\_\,\.hljs-title\.function\\\\\\\\_\]\:text-\[\#a77bfa\]:is(.dark *) *):is(.hljs-title,.hljs-title.class\\_,.hljs-title.class\\_.inherited\\_\\_,.hljs-title.function\\_){color:#a77bfa}@media (hover:hover){:is(.\*\*\:\[\[data-slot\=\"mdx-link\"\]\]\:hover\:after\:bottom-0 *)[data-slot=mdx-link]:hover:after{content:var(--tw-content);bottom:calc(var(--spacing)*0)}}:is(.\*\:\[code\]\:bg-inherit>*):is(code){background-color:inherit}:is(.\*\:\[h3\,h4\]\:mt-8>*):is(h3,h4){margin-top:calc(var(--spacing)*8)}:is(.\*\:\[h3\,h4\]\:mb-4>*):is(h3,h4){margin-bottom:calc(var(--spacing)*4)}:is(.\*\:\[h3\,h4\]\:text-base>*):is(h3,h4){font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}:is(.\*\:\[h3\,h4\]\:font-semibold>*):is(h3,h4){--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}:is(.\*\:\[h3\,h4\]\:\[counter-increment\:step\]>*):is(h3,h4){counter-increment:step}:is(.\*\:\[h3\,h4\]\:before\:absolute>*):is(h3,h4):before{content:var(--tw-content);position:absolute}:is(.\*\:\[h3\,h4\]\:before\:mt-\[-4px\]>*):is(h3,h4):before{content:var(--tw-content);margin-top:-4px}:is(.\*\:\[h3\,h4\]\:before\:ml-\[-50px\]>*):is(h3,h4):before{content:var(--tw-content);margin-left:-50px}:is(.\*\:\[h3\,h4\]\:before\:inline-flex>*):is(h3,h4):before{content:var(--tw-content);display:inline-flex}:is(.\*\:\[h3\,h4\]\:before\:h-9>*):is(h3,h4):before{content:var(--tw-content);height:calc(var(--spacing)*9)}:is(.\*\:\[h3\,h4\]\:before\:w-9>*):is(h3,h4):before{content:var(--tw-content);width:calc(var(--spacing)*9)}:is(.\*\:\[h3\,h4\]\:before\:items-center>*):is(h3,h4):before{content:var(--tw-content);align-items:center}:is(.\*\:\[h3\,h4\]\:before\:justify-center>*):is(h3,h4):before{content:var(--tw-content);justify-content:center}:is(.\*\:\[h3\,h4\]\:before\:rounded-full>*):is(h3,h4):before{content:var(--tw-content);border-radius:3.40282e38px}:is(.\*\:\[h3\,h4\]\:before\:border-4>*):is(h3,h4):before{content:var(--tw-content);border-style:var(--tw-border-style);border-width:4px}:is(.\*\:\[h3\,h4\]\:before\:border-background>*):is(h3,h4):before{content:var(--tw-content);border-color:var(--background)}:is(.\*\:\[h3\,h4\]\:before\:bg-muted>*):is(h3,h4):before{content:var(--tw-content);background-color:var(--muted)}:is(.\*\:\[h3\,h4\]\:before\:text-center>*):is(h3,h4):before{content:var(--tw-content);text-align:center}:is(.\*\:\[h3\,h4\]\:before\:-indent-px>*):is(h3,h4):before{content:var(--tw-content);text-indent:-1px}:is(.\*\:\[h3\,h4\]\:before\:font-mono>*):is(h3,h4):before{content:var(--tw-content);font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}:is(.\*\:\[h3\,h4\]\:before\:text-base>*):is(h3,h4):before{content:var(--tw-content);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}:is(.\*\:\[h3\,h4\]\:before\:font-medium>*):is(h3,h4):before{content:var(--tw-content);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}:is(.\*\:\[h3\,h4\]\:before\:\[content\:counter\(step\)\]>*):is(h3,h4):before{content:var(--tw-content);content:counter(step)}:is(.\*\*\:\[p\]\:m-0 *):is(p){margin:calc(var(--spacing)*0)}:is(.\*\*\:\[p\,ul\,ol\,li\]\:first\:my-0 *):is(p,ul,ol,li):first-child{margin-block:calc(var(--spacing)*0)}:is(.\*\:first\:\[span\]\:hidden>*):first-child:is(span){display:none}:is(.\*\:\[span\]\:last\:flex>*):is(span):last-child{display:flex}:is(.\*\:\[span\]\:last\:items-center>*):is(span):last-child{align-items:center}:is(.\*\:\[span\]\:last\:gap-2>*):is(span):last-child{gap:calc(var(--spacing)*2)}:is(.\*\:\[svg\]\:text-muted-foreground>*):is(svg){color:var(--muted-foreground)}:is(.\*\:\[svg\]\:text-neutral-50>*):is(svg){color:var(--color-neutral-50)}:is(.data-\[variant\=destructive\]\:\*\:\[svg\]\:\!text-destructive[data-variant=destructive]>*):is(svg){color:var(--destructive)!important}:is(.dark\:\*\:\[svg\]\:text-neutral-900:is(.dark *)>*):is(svg){color:var(--color-neutral-900)}:is(.\*\:\[ul\]\:my-0>*):is(ul){margin-block:calc(var(--spacing)*0)}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y:2px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3>svg{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:translate-y-0\.5>svg{--tw-translate-y:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\]\:text-current>svg{color:currentColor}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:var(--sidebar-accent-foreground)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\[align\=center\]\]\:text-center[align=center]{text-align:center}.\[\&\[align\=right\]\]\:text-right[align=right]{text-align:right}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div,.\[\&\[data-state\=open\]\>button\>svg\:first-child\]\:rotate-90[data-state=open]>button>svg:first-child{rotate:90deg}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}@media (min-width:1800px){.\[\@media\(width\>\=1800px\)\]\:max-w-\(--breakpoint-2xl\){max-width:var(--breakpoint-2xl)}.\[\@media\(width\>\=1800px\)\]\:border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}@media (hover:hover){a.\[a\&\]\:hover\:bg-accent:hover{background-color:var(--accent)}a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:color-mix(in oklab,var(--secondary)90%,transparent)}}a.\[a\&\]\:hover\:text-accent-foreground:hover{color:var(--accent-foreground)}}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}.prose{max-width:65ch;color:var(--foreground)}.prose h1:not(.not-prose h1){scroll-margin:calc(var(--spacing)*20);font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height));--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}@media (min-width:64rem){.prose h1:not(.not-prose h1){font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}}.prose h2:not(.not-prose h2){margin-top:calc(var(--spacing)*12);scroll-margin:calc(var(--spacing)*20);border-bottom-style:var(--tw-border-style);padding-bottom:calc(var(--spacing)*2);font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);border-bottom-width:1px}.prose h2:not(.not-prose h2):first-child{margin-top:calc(var(--spacing)*0)}.prose h3:not(.not-prose h3){margin-top:calc(var(--spacing)*12);scroll-margin:calc(var(--spacing)*20);font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.prose h3:not(.not-prose h3):first-child{margin-top:calc(var(--spacing)*0)}.prose h4:not(.not-prose h4){margin-top:calc(var(--spacing)*12);scroll-margin:calc(var(--spacing)*20);font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.prose h4:not(.not-prose h4):first-child{margin-top:calc(var(--spacing)*0)}.prose h5:not(.not-prose h5){margin-top:calc(var(--spacing)*12);scroll-margin:calc(var(--spacing)*20);font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.prose h5:not(.not-prose h5):first-child{margin-top:calc(var(--spacing)*0)}.prose h6:not(.not-prose h6){margin-top:calc(var(--spacing)*12);scroll-margin:calc(var(--spacing)*20);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.prose h6:not(.not-prose h6):first-child,:is(.prose h1:not(.not-prose h1),.prose h2:not(.not-prose h2),.prose h3:not(.not-prose h3),.prose h4:not(.not-prose h4),.prose h5:not(.not-prose h5),.prose h6:not(.not-prose h6))+p{margin-top:calc(var(--spacing)*0)}.prose p:not(.not-prose p){--tw-leading:calc(var(--spacing)*7);line-height:calc(var(--spacing)*7)}.prose p:not(.not-prose p):not(:first-child){margin-top:calc(var(--spacing)*6)}.prose a:not(.not-prose a){--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--primary);text-underline-offset:4px;text-decoration-line:underline}.prose blockquote:not(.not-prose blockquote){margin-top:calc(var(--spacing)*6);border-left-style:var(--tw-border-style);padding-left:calc(var(--spacing)*6);border-left-width:2px;font-style:italic}.prose table:not(.not-prose table){margin-block:calc(var(--spacing)*6);width:100%;overflow-y:auto}.prose table:not(.not-prose table) thead tr{margin:calc(var(--spacing)*0);border-top-style:var(--tw-border-style);padding:calc(var(--spacing)*0);border-top-width:1px}.prose table:not(.not-prose table) thead tr:nth-child(2n){background-color:var(--muted)}.prose table:not(.not-prose table) th{border-style:var(--tw-border-style);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*2);text-align:left;--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);border-width:1px}.prose table:not(.not-prose table) th[align=center]{text-align:center}.prose table:not(.not-prose table) th[align=right]{text-align:right}.prose table:not(.not-prose table) tbody tr{margin:calc(var(--spacing)*0);border-top-style:var(--tw-border-style);padding:calc(var(--spacing)*0);border-top-width:1px}.prose table:not(.not-prose table) tbody tr:nth-child(2n){background-color:var(--muted)}.prose table:not(.not-prose table) td{border-style:var(--tw-border-style);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*2);text-align:left;border-width:1px}.prose table:not(.not-prose table) td[align=center]{text-align:center}.prose table:not(.not-prose table) td[align=right]{text-align:right}.prose ul:not(.not-prose ul){margin-block:calc(var(--spacing)*6);margin-left:calc(var(--spacing)*6);list-style-type:disc}.prose ul:not(.not-prose ul)>li{margin-top:calc(var(--spacing)*2)}.prose ul:not(.not-prose ul) p{margin-block:calc(var(--spacing)*0);display:inline}.prose ol:not(.not-prose ol){margin-block:calc(var(--spacing)*6);margin-left:calc(var(--spacing)*6);list-style-type:decimal}.prose ol:not(.not-prose ol)>li{margin-top:calc(var(--spacing)*2)}.prose ol:not(.not-prose ol) p{margin-block:calc(var(--spacing)*0);display:inline}.prose pre:not(.not-prose pre){margin-block:calc(var(--spacing)*6);border-radius:calc(var(--radius) - 2px);background-color:var(--muted);padding:calc(var(--spacing)*4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));overflow-y:auto}.prose code:not(pre code):not(.not-prose code){background-color:var(--muted);font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);border-radius:.25rem;padding-block:.2rem;padding-inline:.3rem;position:relative}.prose .lead:not(.not-prose .lead){font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));color:var(--muted-foreground)}.prose .large:not(.not-prose .large){font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.prose .small:not(.not-prose .small){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:1;--tw-font-weight:var(--font-weight-medium);line-height:1;font-weight:var(--font-weight-medium)}.prose .muted:not(.not-prose .muted){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--muted-foreground)}.prose img:not(.not-prose img),.prose picture:not(.not-prose picture),.prose video:not(.not-prose video){margin-block:calc(var(--spacing)*6)}.prose picture>img:not(.not-prose picture>img){margin-block:calc(var(--spacing)*0)}.prose kbd:not(.not-prose kbd){border-radius:calc(var(--radius) - 2px);background-color:var(--muted);padding-inline:calc(var(--spacing)*1.5);padding-block:calc(var(--spacing)*.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.prose hr{margin-block:calc(var(--spacing)*10)}.prose dl:not(.not-prose dl){margin-block:calc(var(--spacing)*6)}.prose dl:not(.not-prose dl) dt{margin-top:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.prose dl:not(.not-prose dl) dt:first-child{margin-top:calc(var(--spacing)*0)}.prose details:not(.not-prose details){margin-top:calc(var(--spacing)*6)}.prose details:not(.not-prose details) summary{margin-top:calc(var(--spacing)*6);cursor:pointer;--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.prose details:not(.not-prose details) p:first-of-type{margin-top:calc(var(--spacing)*2)}.prose mark:not(.not-prose mark){background-color:var(--color-yellow-300)}.prose small:not(.not-prose small){font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-leading:1;line-height:1}.theme-default .theme-container{--chart-1:var(--color-blue-300);--chart-2:var(--color-blue-500);--chart-3:var(--color-blue-600);--chart-4:var(--color-blue-700);--chart-5:var(--color-blue-800)}.theme-blue .theme-container{--primary:var(--color-blue-600);--primary-foreground:var(--color-blue-50);--ring:var(--color-blue-400);--sidebar-primary:var(--color-blue-600);--sidebar-primary-foreground:var(--color-blue-50);--sidebar-ring:var(--color-blue-400);--chart-1:var(--color-blue-300);--chart-2:var(--color-blue-500);--chart-3:var(--color-blue-600);--chart-4:var(--color-blue-700);--chart-5:var(--color-blue-800)}.theme-blue .theme-container:is(.dark *){--primary:var(--color-blue-500);--primary-foreground:var(--color-blue-50);--ring:var(--color-blue-900);--sidebar-primary:var(--color-blue-500);--sidebar-primary-foreground:var(--color-blue-50);--sidebar-ring:var(--color-blue-900)}.theme-green .theme-container{--primary:var(--color-lime-600);--primary-foreground:var(--color-lime-50);--ring:var(--color-lime-400);--chart-1:var(--color-green-300);--chart-2:var(--color-green-500);--chart-3:var(--color-green-600);--chart-4:var(--color-green-700);--chart-5:var(--color-green-800);--sidebar-primary:var(--color-lime-600);--sidebar-primary-foreground:var(--color-lime-50);--sidebar-ring:var(--color-lime-400)}.theme-green .theme-container:is(.dark *){--primary:var(--color-lime-600);--primary-foreground:var(--color-lime-50);--ring:var(--color-lime-900);--sidebar-primary:var(--color-lime-500);--sidebar-primary-foreground:var(--color-lime-50);--sidebar-ring:var(--color-lime-900)}.theme-amber .theme-container{--primary:var(--color-amber-600);--primary-foreground:var(--color-amber-50);--ring:var(--color-amber-400);--chart-1:var(--color-amber-300);--chart-2:var(--color-amber-500);--chart-3:var(--color-amber-600);--chart-4:var(--color-amber-700);--chart-5:var(--color-amber-800);--sidebar-primary:var(--color-amber-600);--sidebar-primary-foreground:var(--color-amber-50);--sidebar-ring:var(--color-amber-400)}.theme-amber .theme-container:is(.dark *){--primary:var(--color-amber-500);--primary-foreground:var(--color-amber-50);--ring:var(--color-amber-900);--sidebar-primary:var(--color-amber-500);--sidebar-primary-foreground:var(--color-amber-50);--sidebar-ring:var(--color-amber-900)}.theme-rose .theme-container{--primary:var(--color-rose-600);--primary-foreground:var(--color-rose-50);--ring:var(--color-rose-400);--chart-1:var(--color-rose-300);--chart-2:var(--color-rose-500);--chart-3:var(--color-rose-600);--chart-4:var(--color-rose-700);--chart-5:var(--color-rose-800);--sidebar-primary:var(--color-rose-600);--sidebar-primary-foreground:var(--color-rose-50);--sidebar-ring:var(--color-rose-400)}.theme-rose .theme-container:is(.dark *){--primary:var(--color-rose-500);--primary-foreground:var(--color-rose-50);--ring:var(--color-rose-900);--sidebar-primary:var(--color-rose-500);--sidebar-primary-foreground:var(--color-rose-50);--sidebar-ring:var(--color-rose-900)}.theme-purple .theme-container{--primary:var(--color-purple-600);--primary-foreground:var(--color-purple-50);--ring:var(--color-purple-400);--chart-1:var(--color-purple-300);--chart-2:var(--color-purple-500);--chart-3:var(--color-purple-600);--chart-4:var(--color-purple-700);--chart-5:var(--color-purple-800);--sidebar-primary:var(--color-purple-600);--sidebar-primary-foreground:var(--color-purple-50);--sidebar-ring:var(--color-purple-400)}.theme-purple .theme-container:is(.dark *){--primary:var(--color-purple-500);--primary-foreground:var(--color-purple-50);--ring:var(--color-purple-900);--sidebar-primary:var(--color-purple-500);--sidebar-primary-foreground:var(--color-purple-50);--sidebar-ring:var(--color-purple-900)}.theme-orange .theme-container{--primary:var(--color-orange-600);--primary-foreground:var(--color-orange-50);--ring:var(--color-orange-400);--chart-1:var(--color-orange-300);--chart-2:var(--color-orange-500);--chart-3:var(--color-orange-600);--chart-4:var(--color-orange-700);--chart-5:var(--color-orange-800);--sidebar-primary:var(--color-orange-600);--sidebar-primary-foreground:var(--color-orange-50);--sidebar-ring:var(--color-orange-400)}.theme-orange .theme-container:is(.dark *){--primary:var(--color-orange-500);--primary-foreground:var(--color-orange-50);--ring:var(--color-orange-900);--sidebar-primary:var(--color-orange-500);--sidebar-primary-foreground:var(--color-orange-50);--sidebar-ring:var(--color-orange-900)}.theme-teal .theme-container{--primary:var(--color-teal-600);--primary-foreground:var(--color-teal-50);--chart-1:var(--color-teal-300);--chart-2:var(--color-teal-500);--chart-3:var(--color-teal-600);--chart-4:var(--color-teal-700);--chart-5:var(--color-teal-800);--sidebar-primary:var(--color-teal-600);--sidebar-primary-foreground:var(--color-teal-50);--sidebar-ring:var(--color-teal-400)}.theme-teal .theme-container:is(.dark *){--primary:var(--color-teal-500);--primary-foreground:var(--color-teal-50);--sidebar-primary:var(--color-teal-500);--sidebar-primary-foreground:var(--color-teal-50);--sidebar-ring:var(--color-teal-900)}.theme-mono .theme-container{--font-sans:var(--font-mono);--primary:var(--color-stone-600);--primary-foreground:var(--color-stone-50);--chart-1:var(--color-stone-300);--chart-2:var(--color-stone-500);--chart-3:var(--color-stone-600);--chart-4:var(--color-stone-700);--chart-5:var(--color-stone-800);--sidebar-primary:var(--color-stone-600);--sidebar-primary-foreground:var(--color-stone-50);--sidebar-ring:var(--color-stone-400)}.theme-mono .theme-container:is(.dark *){--primary:var(--color-stone-500);--primary-foreground:var(--color-stone-50);--sidebar-primary:var(--color-stone-500);--sidebar-primary-foreground:var(--color-stone-50);--sidebar-ring:var(--color-stone-900)}@media (min-width:1024px){.theme-mono .theme-container{--font-sans:var(--font-mono);--radius:.45em;--text-lg:1rem;--text-xl:1.1rem;--text-2xl:1.2rem;--text-3xl:1.3rem;--text-4xl:1.4rem;--text-5xl:1.5rem;--text-6xl:1.6rem;--text-7xl:1.7rem;--text-8xl:1.8rem;--text-base:.85rem;--text-sm:.8rem;--spacing:.222222rem}}.theme-mono .theme-container .rounded-xs,.theme-mono .theme-container .rounded-sm,.theme-mono .theme-container .rounded-md,.theme-mono .theme-container .rounded-lg,.theme-mono .theme-container .rounded-xl{border-radius:0}.theme-mono .theme-container .shadow-xs,.theme-mono .theme-container .shadow-sm,.theme-mono .theme-container .shadow-md,.theme-mono .theme-container .shadow-lg,.theme-mono .theme-container .shadow-xl{box-shadow:none}.theme-mono .theme-container [data-slot=toggle-group],.theme-mono .theme-container [data-slot=toggle-group-item]{--tw-shadow:0 0 #0000!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important;border-radius:0!important}.theme-scaled .theme-container{--chart-1:var(--color-blue-300);--chart-2:var(--color-blue-500);--chart-3:var(--color-blue-600);--chart-4:var(--color-blue-700);--chart-5:var(--color-blue-800)}@media (min-width:1024px){.theme-scaled .theme-container{--radius:.45em;--text-lg:1rem;--text-xl:1.1rem;--text-2xl:1.2rem;--text-3xl:1.3rem;--text-4xl:1.4rem;--text-5xl:1.5rem;--text-6xl:1.6rem;--text-7xl:1.7rem;--text-8xl:1.8rem;--text-base:.85rem;--text-sm:.8rem;--spacing:.2rem}}.theme-scaled .theme-container [data-slot=select-trigger],.theme-scaled .theme-container [data-slot=toggle-group-item]{--spacing:.2rem}.theme-scaled .theme-container [data-slot=card]{border-radius:var(--radius);padding-block:calc(var(--spacing)*4);gap:calc(var(--spacing)*2)}.theme-scaled .theme-container [data-slot=card].pb-0{padding-bottom:0}.theme-red .theme-container{--primary:var(--color-red-600);--primary-foreground:var(--color-red-50);--ring:var(--color-red-400);--chart-1:var(--color-red-300);--chart-2:var(--color-red-500);--chart-3:var(--color-red-600);--chart-4:var(--color-red-700);--chart-5:var(--color-red-800);--sidebar-primary:var(--color-red-600);--sidebar-primary-foreground:var(--color-red-50);--sidebar-ring:var(--color-red-400)}.theme-red .theme-container:is(.dark *){--primary:var(--color-red-500);--primary-foreground:var(--color-red-50);--ring:var(--color-red-900);--sidebar-primary:var(--color-red-500);--sidebar-primary-foreground:var(--color-red-50);--sidebar-ring:var(--color-red-900)}.theme-yellow .theme-container{--primary:var(--color-yellow-400);--primary-foreground:var(--color-yellow-900);--ring:var(--color-yellow-400);--chart-1:var(--color-yellow-300);--chart-2:var(--color-yellow-500);--chart-3:var(--color-yellow-600);--chart-4:var(--color-yellow-700);--chart-5:var(--color-yellow-800);--sidebar-primary:var(--color-yellow-600);--sidebar-primary-foreground:var(--color-yellow-50);--sidebar-ring:var(--color-yellow-400)}.theme-yellow .theme-container:is(.dark *){--primary:var(--color-yellow-500);--primary-foreground:var(--color-yellow-900);--ring:var(--color-yellow-900);--sidebar-primary:var(--color-yellow-500);--sidebar-primary-foreground:var(--color-yellow-50);--sidebar-ring:var(--color-yellow-900)}.theme-violet .theme-container{--primary:var(--color-violet-600);--primary-foreground:var(--color-violet-50);--ring:var(--color-violet-400);--chart-1:var(--color-violet-300);--chart-2:var(--color-violet-500);--chart-3:var(--color-violet-600);--chart-4:var(--color-violet-700);--chart-5:var(--color-violet-800);--sidebar-primary:var(--color-violet-600);--sidebar-primary-foreground:var(--color-violet-50);--sidebar-ring:var(--color-violet-400)}.theme-violet .theme-container:is(.dark *){--primary:var(--color-violet-500);--primary-foreground:var(--color-violet-50);--ring:var(--color-violet-900);--sidebar-primary:var(--color-violet-500);--sidebar-primary-foreground:var(--color-violet-50);--sidebar-ring:var(--color-violet-900)}:root{--radius:.625rem;--background:oklch(100% 0 0);--foreground:oklch(14.5% 0 0);--card:oklch(100% 0 0);--card-foreground:oklch(14.5% 0 0);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.5% 0 0);--primary:oklch(20.5% 0 0);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(97% 0 0);--secondary-foreground:oklch(20.5% 0 0);--muted:oklch(97% 0 0);--muted-foreground:oklch(55.6% 0 0);--accent:oklch(97% 0 0);--accent-foreground:oklch(20.5% 0 0);--destructive:oklch(57.7% .245 27.325);--border:oklch(92.2% 0 0);--input:oklch(92.2% 0 0);--ring:oklch(70.8% 0 0);--chart-1:var(--color-blue-300);--chart-2:var(--color-blue-500);--chart-3:var(--color-blue-600);--chart-4:var(--color-blue-700);--chart-5:var(--color-blue-800);--sidebar:oklch(98.5% 0 0);--sidebar-foreground:oklch(14.5% 0 0);--sidebar-primary:oklch(20.5% 0 0);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(97% 0 0);--sidebar-accent-foreground:oklch(20.5% 0 0);--sidebar-border:oklch(92.2% 0 0);--sidebar-ring:oklch(70.8% 0 0);--surface:oklch(98% 0 0);--surface-foreground:var(--foreground);--code:var(--surface);--code-foreground:var(--surface-foreground);--code-highlight:oklch(96% 0 0);--code-number:oklch(56% 0 0);--selection:oklch(14.5% 0 0);--selection-foreground:oklch(100% 0 0);--color-blue-300:oklch(77.8% .108 231.731);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.9% .234 260.011);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(41.9% .243 267.218);--brand:oklch(62.3% .214 259.815);--highlight:oklch(85.2% .199 91.936)}.dark{--background:oklch(14.5% 0 0);--foreground:oklch(98.5% 0 0);--card:oklch(20.5% 0 0);--card-foreground:oklch(98.5% 0 0);--popover:oklch(26.9% 0 0);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(92.2% 0 0);--primary-foreground:oklch(20.5% 0 0);--secondary:oklch(26.9% 0 0);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(26.9% 0 0);--muted-foreground:oklch(70.8% 0 0);--accent:oklch(37.1% 0 0);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.6% 0 0);--chart-1:var(--color-blue-300);--chart-2:var(--color-blue-500);--chart-3:var(--color-blue-600);--chart-4:var(--color-blue-700);--chart-5:var(--color-blue-800);--sidebar:oklch(20.5% 0 0);--sidebar-foreground:oklch(98.5% 0 0);--sidebar-primary:oklch(48.8% .243 264.376);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(26.9% 0 0);--sidebar-accent-foreground:oklch(98.5% 0 0);--sidebar-border:oklch(100% 0 0/.1);--sidebar-ring:oklch(43.9% 0 0);--surface:oklch(20% 0 0);--surface-foreground:oklch(70.8% 0 0);--code:var(--surface);--code-foreground:var(--surface-foreground);--code-highlight:oklch(27% 0 0);--code-number:oklch(72% 0 0);--selection:oklch(92.2% 0 0);--selection-foreground:oklch(20.5% 0 0);--brand:oklch(70.7% .165 254.624);--highlight:oklch(85.2% .199 91.936)}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-font-weight{syntax:"*";inherits:false}@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-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-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}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0))}}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,auto))))}}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,auto))))}to{height:0}} \ 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-content:"";--tw-font-weight:initial;--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-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-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0}}}@layer theme{:root,:host{--font-sans:"var(--font-sans)","ui-sans-serif","-apple-system","BlinkMacSystemFont","Segoe UI Variable Display","Segoe UI","Helvetica","Apple Color Emoji","Arial","sans-serif","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-red-950:oklch(25.8% .092 26.042);--color-orange-50:oklch(98% .016 73.684);--color-orange-300:oklch(83.7% .128 66.29);--color-orange-400:oklch(75% .183 55.934);--color-orange-500:oklch(70.5% .213 47.604);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-700:oklch(55.3% .195 38.402);--color-orange-800:oklch(47% .157 37.304);--color-orange-900:oklch(40.8% .123 38.172);--color-orange-950:oklch(26.6% .079 36.259);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-lime-50:oklch(98.6% .031 120.757);--color-lime-400:oklch(84.1% .238 128.85);--color-lime-500:oklch(76.8% .233 130.85);--color-lime-600:oklch(64.8% .2 131.684);--color-lime-900:oklch(40.5% .101 131.063);--color-green-50:oklch(98.2% .018 155.826);--color-green-100:oklch(96.2% .044 156.743);--color-green-200:oklch(92.5% .084 155.995);--color-green-300:oklch(87.1% .15 154.449);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-950:oklch(26.6% .065 152.934);--color-emerald-100:oklch(95% .052 163.051);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-700:oklch(50.8% .118 165.612);--color-teal-50:oklch(98.4% .014 180.72);--color-teal-300:oklch(85.5% .138 181.071);--color-teal-400:oklch(77.7% .152 181.912);--color-teal-500:oklch(70.4% .14 182.503);--color-teal-600:oklch(60% .118 184.704);--color-teal-700:oklch(51.1% .096 186.391);--color-teal-800:oklch(43.7% .078 188.216);--color-teal-900:oklch(38.6% .063 188.416);--color-cyan-50:oklch(98.4% .019 200.873);--color-cyan-300:oklch(86.5% .127 207.078);--color-cyan-700:oklch(52% .105 223.128);--color-cyan-950:oklch(30.2% .056 229.695);--color-blue-50:oklch(97% .014 254.604);--color-blue-200:oklch(88.2% .059 254.128);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(42.4% .199 265.638);--color-blue-900:oklch(37.9% .146 265.522);--color-violet-50:oklch(96.9% .016 293.756);--color-violet-300:oklch(81.1% .111 293.571);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-500:oklch(60.6% .25 292.717);--color-violet-600:oklch(54.1% .281 293.009);--color-violet-700:oklch(49.1% .27 292.581);--color-violet-800:oklch(43.2% .232 292.759);--color-violet-900:oklch(38% .189 293.745);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-300:oklch(82.7% .119 306.383);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-500:oklch(62.7% .265 303.9);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-purple-800:oklch(43.8% .218 303.724);--color-purple-900:oklch(38.1% .176 304.987);--color-purple-950:oklch(29.1% .149 302.717);--color-pink-50:oklch(97.1% .014 343.198);--color-pink-300:oklch(82.3% .12 346.018);--color-pink-700:oklch(52.5% .223 3.958);--color-pink-950:oklch(28.4% .109 3.907);--color-rose-50:oklch(96.9% .015 12.422);--color-rose-300:oklch(81% .117 11.638);--color-rose-400:oklch(71.2% .194 13.428);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-600:oklch(58.6% .253 17.585);--color-rose-700:oklch(51.4% .222 16.935);--color-rose-800:oklch(45.5% .188 13.697);--color-rose-900:oklch(41% .159 10.272);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-zinc-50:oklch(98.5% 0 0);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-400:oklch(70.5% .015 286.067);--color-zinc-700:oklch(37% .013 285.805);--color-zinc-800:oklch(27.4% .006 286.033);--color-zinc-900:oklch(21% .006 285.885);--color-zinc-950:oklch(14.1% .005 285.823);--color-neutral-50:oklch(98.5% 0 0);--color-neutral-300:oklch(87% 0 0);--color-neutral-400:oklch(70.8% 0 0);--color-neutral-500:oklch(55.6% 0 0);--color-neutral-600:oklch(43.9% 0 0);--color-neutral-800:oklch(26.9% 0 0);--color-neutral-900:oklch(20.5% 0 0);--color-stone-50:oklch(98.5% .001 106.423);--color-stone-300:oklch(86.9% .005 56.366);--color-stone-400:oklch(70.9% .01 56.259);--color-stone-500:oklch(55.3% .013 58.071);--color-stone-600:oklch(44.4% .011 73.639);--color-stone-700:oklch(37.4% .01 67.558);--color-stone-800:oklch(26.8% .007 34.298);--color-stone-900:oklch(21.6% .006 56.043);--color-black:#000;--color-white:#fff;--spacing:.25rem;--breakpoint-xl:80rem;--breakpoint-2xl:96rem;--container-sm:24rem;--container-lg:32rem;--container-2xl:42rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-base:1rem;--text-base--line-height: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);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5/2.25);--text-5xl:3rem;--text-5xl--line-height:1;--font-weight-light:300;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-tighter:-.05em;--tracking-tight:-.025em;--tracking-widest:.1em;--leading-tight:1.25;--leading-normal:1.5;--leading-relaxed:1.625;--leading-loose:2;--radius-xs:.125rem;--radius-sm:calc(var(--radius) - 4px);--radius-lg:var(--radius);--ease-out:cubic-bezier(0,0,.2,1);--ease-in-out:cubic-bezier(.4,0,.2,1);--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--blur-xs:4px;--blur-sm:8px;--aspect-video:16/9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:"var(--font-sans)","ui-sans-serif","-apple-system","BlinkMacSystemFont","Segoe UI Variable Display","Segoe UI","Helvetica","Apple Color Emoji","Arial","sans-serif","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--default-mono-font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-code:var(--surface);--color-code-foreground:var(--surface-foreground);--color-code-highlight:var(--code-highlight);--color-code-number:var(--code-number);--font-heading:"var(--font-heading)","ui-sans-serif","-apple-system","BlinkMacSystemFont","Segoe UI Variable Display","Segoe UI","Helvetica","Apple Color Emoji","Arial","sans-serif","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji"}}@layer base{@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)}}}*,: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}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){*{outline-color:color-mix(in oklab,var(--ring)50%,transparent)}}body{overscroll-behavior:none;background-color:var(--background);color:var(--foreground);font-synthesis-weight:none;text-rendering:optimizeLegibility}@supports (font:-apple-system-body) and (appearance:none){@media (min-width:1800px){[data-wrapper]{border-top-style:var(--tw-border-style);border-top-width:1px}}}a:active,button:active{opacity:.6}@media (min-width:48rem){a:active,button:active{opacity:1}}::-webkit-scrollbar{width:5px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:hsl(var(--border));border-radius:5px}*{scrollbar-width:thin;scrollbar-color:hsl(var(--border))transparent}.prose{--tw-prose-body:var(--foreground);--tw-prose-bold:inherit;--tw-prose-links:inherit;--tw-prose-bullets:var(--foreground)}[data-theme=light]{display:block}[data-theme=dark],.dark [data-theme=light]{display:none}.dark [data-theme=dark]{display:block}[data-rehype-pretty-code-fragment]{color:var(--color-white);position:relative}[data-rehype-pretty-code-fragment] code{border-style:var(--tw-border-style);min-width:100%;padding:calc(var(--spacing)*0);overflow-wrap:break-word;counter-reset:line;-webkit-box-decoration-break:clone;box-decoration-break:clone;background-color:#0000;border-width:0;border-radius:0;display:grid}[data-rehype-pretty-code-fragment] .line{width:100%;min-height:1rem;padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*.5);display:inline-block}[data-rehype-pretty-code-fragment] [data-line-numbers] .line{padding-inline:calc(var(--spacing)*2)}[data-rehype-pretty-code-fragment] [data-line-numbers]>.line:before{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));color:#fafafa66}@supports (color:color-mix(in lab, red, red)){[data-rehype-pretty-code-fragment] [data-line-numbers]>.line:before{color:color-mix(in oklab,var(--color-zinc-50)40%,transparent)}}[data-rehype-pretty-code-fragment] [data-line-numbers]>.line:before{counter-increment:line;content:counter(line);text-align:right;width:1.8rem;margin-right:1.4rem;display:inline-block}[data-rehype-pretty-code-fragment] .line--highlighted{background-color:#3f3f4680}@supports (color:color-mix(in lab, red, red)){[data-rehype-pretty-code-fragment] .line--highlighted{background-color:color-mix(in oklab,var(--color-zinc-700)50%,transparent)}}[data-rehype-pretty-code-fragment] .line-highlighted span{position:relative}[data-rehype-pretty-code-fragment] .word--highlighted{border-radius:calc(var(--radius) - 2px);border-color:#3f3f46b3}@supports (color:color-mix(in lab, red, red)){[data-rehype-pretty-code-fragment] .word--highlighted{border-color:color-mix(in oklab,var(--color-zinc-700)70%,transparent)}}[data-rehype-pretty-code-fragment] .word--highlighted{background-color:#3f3f4680}@supports (color:color-mix(in lab, red, red)){[data-rehype-pretty-code-fragment] .word--highlighted{background-color:color-mix(in oklab,var(--color-zinc-700)50%,transparent)}}[data-rehype-pretty-code-fragment] .word--highlighted{padding:calc(var(--spacing)*1)}.dark [data-rehype-pretty-code-fragment] .word--highlighted{background-color:var(--color-zinc-900)}[data-rehype-pretty-code-title]{margin-top:calc(var(--spacing)*2);padding-inline:calc(var(--spacing)*4);padding-top:calc(var(--spacing)*6);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--foreground)}[data-rehype-pretty-code-title]+pre{margin-top:calc(var(--spacing)*2)!important}}@layer components{.steps:first-child,.steps:first-child>h3:first-child{margin-top:calc(var(--spacing)*0)!important}.steps>h3{margin-top:calc(var(--spacing)*16)!important}.steps>h3+p{margin-top:calc(var(--spacing)*2)!important}[data-rehype-pretty-code-figure]{background-color:var(--color-code);color:var(--color-code-foreground);border-radius:var(--radius-lg);border-width:0;border-color:var(--border);margin-top:calc(var(--spacing)*6);font-size:var(--text-sm);outline:none;position:relative;overflow:hidden}@media (min-width:48rem){[data-rehype-pretty-code-figure]{margin-inline:calc(var(--spacing)*-4)}}[data-rehype-pretty-code-figure]:has([data-rehype-pretty-code-title]) [data-slot=copy-button]{top:calc(var(--spacing)*1.5)!important}[data-rehype-pretty-code-title]{border-bottom:var(--border)}@supports (color:color-mix(in lab, red, red)){[data-rehype-pretty-code-title]{border-bottom:color-mix(in oklab,var(--border)30%,transparent)}}[data-rehype-pretty-code-title]{padding-block:calc(var(--spacing)*2.5);padding-inline:calc(var(--spacing)*4);font-size:var(--text-sm);font-family:var(--font-mono);color:var(--color-code-foreground);border-bottom-style:solid;border-bottom-width:1px}[data-line-numbers]{white-space:pre;counter-reset:line;-webkit-box-decoration-break:clone;box-decoration-break:clone;background:0 0;border:0;min-width:100%;padding:0;display:grid}[data-line-numbers] [data-line]:before{font-size:var(--text-sm);counter-increment:line;content:counter(line);width:calc(var(--spacing)*16);padding-right:calc(var(--spacing)*6);text-align:right;color:var(--color-code-number);background-color:var(--color-code);display:inline-block;position:sticky;left:0}[data-line-numbers] [data-highlighted-line][data-line]:before{background-color:var(--color-code-highlight)}[data-line]{padding-top:calc(var(--spacing)*.5);padding-bottom:calc(var(--spacing)*.5);min-height:calc(var(--spacing)*1);width:100%;display:inline-block}[data-line] span{color:var(--shiki-light)}[data-line] span:is(.dark *){color:var(--shiki-dark)!important}[data-highlighted-line],[data-highlighted-chars]{background-color:var(--color-code-highlight);position:relative}[data-highlighted-line]:after{content:"";background-color:var(--muted-foreground);width:2px;height:100%;position:absolute;top:0;left:0}@supports (color:color-mix(in lab, red, red)){[data-highlighted-line]:after{background-color:color-mix(in oklab,var(--muted-foreground)50%,transparent)}}[data-highlighted-chars]{border-radius:var(--radius-sm);font-family:var(--font-mono);padding-block:.1rem;padding-inline:.3rem;font-size:.8rem}}@layer utilities{.\@container\/card-header{container:card-header/inline-size}.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}@media (pointer:coarse){.extend-touch-target{touch-action:manipulation;position:relative}.extend-touch-target:after{content:var(--tw-content);content:var(--tw-content);inset:calc(var(--spacing)*-2);position:absolute}}.step{counter-increment:step;position:relative}.step:before{right:calc(var(--spacing)*0);margin-right:calc(var(--spacing)*2);width:calc(var(--spacing)*7);height:calc(var(--spacing)*7);text-align:center;text-indent:-1px;font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--muted-foreground);border-radius:3.40282e38px;justify-content:center;align-items:center;display:none}@media (min-width:48rem){.step:before{position:absolute}}.step:before{content:counter(step)}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.inset-32{inset:calc(var(--spacing)*32)}.inset-x-0{inset-inline:calc(var(--spacing)*0)}.inset-y-0{inset-block:calc(var(--spacing)*0)}.start-1{inset-inline-start:calc(var(--spacing)*1)}.-top-2{top:calc(var(--spacing)*-2)}.-top-4{top:calc(var(--spacing)*-4)}.-top-px{top:-1px}.top-0{top:calc(var(--spacing)*0)}.top-1{top:calc(var(--spacing)*1)}.top-1\.5{top:calc(var(--spacing)*1.5)}.top-1\/2{top:50%}.top-2{top:calc(var(--spacing)*2)}.top-2\.5{top:calc(var(--spacing)*2.5)}.top-3\.5{top:calc(var(--spacing)*3.5)}.top-4{top:calc(var(--spacing)*4)}.top-10{top:calc(var(--spacing)*10)}.top-14{top:calc(var(--spacing)*14)}.top-16{top:calc(var(--spacing)*16)}.top-20{top:calc(var(--spacing)*20)}.top-\[0\.3rem\]{top:.3rem}.top-\[0\.4rem\]{top:.4rem}.top-\[5px\]{top:5px}.top-\[50\%\]{top:50%}.top-\[calc\(var\(--header-height\)\+1px\)\]{top:calc(var(--header-height) + 1px)}.-right-1{right:calc(var(--spacing)*-1)}.-right-3{right:calc(var(--spacing)*-3)}.right-0{right:calc(var(--spacing)*0)}.right-0\.5{right:calc(var(--spacing)*.5)}.right-1{right:calc(var(--spacing)*1)}.right-2{right:calc(var(--spacing)*2)}.right-2\.5{right:calc(var(--spacing)*2.5)}.right-3{right:calc(var(--spacing)*3)}.right-4{right:calc(var(--spacing)*4)}.right-6{right:calc(var(--spacing)*6)}.right-16{right:calc(var(--spacing)*16)}.right-24{right:calc(var(--spacing)*24)}.right-\[-1\.5px\]{right:-1.5px}.right-\[-11px\]{right:-11px}.right-\[0\.3rem\]{right:.3rem}.right-\[28px\]{right:28px}.-bottom-1{bottom:calc(var(--spacing)*-1)}.-bottom-px{bottom:-1px}.bottom-0{bottom:calc(var(--spacing)*0)}.bottom-0\.5{bottom:calc(var(--spacing)*.5)}.bottom-1{bottom:calc(var(--spacing)*1)}.bottom-2{bottom:calc(var(--spacing)*2)}.bottom-4{bottom:calc(var(--spacing)*4)}.bottom-16{bottom:calc(var(--spacing)*16)}.bottom-24{bottom:calc(var(--spacing)*24)}.-left-0{left:calc(var(--spacing)*0)}.-left-0\.5{left:calc(var(--spacing)*-.5)}.-left-1{left:calc(var(--spacing)*-1)}.-left-3{left:calc(var(--spacing)*-3)}.-left-5{left:calc(var(--spacing)*-5)}.-left-6{left:calc(var(--spacing)*-6)}.left-0{left:calc(var(--spacing)*0)}.left-1{left:calc(var(--spacing)*1)}.left-1\/2{left:50%}.left-2{left:calc(var(--spacing)*2)}.left-2\.5{left:calc(var(--spacing)*2.5)}.left-3{left:calc(var(--spacing)*3)}.left-16{left:calc(var(--spacing)*16)}.left-\[-1\.5px\]{left:-1.5px}.left-\[-10\.5px\]{left:-10.5px}.left-\[50\%\]{left:50%}.isolate{isolation:isolate}.z-1{z-index:1}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-40{z-index:40}.z-50{z-index:50}.z-51{z-index:51}.z-60{z-index:60}.z-100{z-index:100}.z-500{z-index:500}.col-span-1{grid-column:span 1/span 1}.col-start-2{grid-column-start:2}.row-span-2{grid-row:span 2/span 2}.row-start-1{grid-row-start:1}.container{width:100%}@media (min-width:1600px){.container{max-width:1600px}}@media (min-width:2000px){.container{max-width:2000px}}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.\!m-0{margin:calc(var(--spacing)*0)!important}.m-0{margin:calc(var(--spacing)*0)}.m-0\.5{margin:calc(var(--spacing)*.5)}.m-4{margin:calc(var(--spacing)*4)}.container-wrapper{width:100%;max-width:calc(var(--breakpoint-xl) + 2rem);padding-inline:calc(var(--spacing)*2);margin-inline:auto}.container{max-width:calc(var(--breakpoint-xl) + 2rem);padding-inline:calc(var(--spacing)*4);margin-inline:auto}@media (min-width:80rem){.container{padding-inline:calc(var(--spacing)*6)}}.-mx-1{margin-inline:calc(var(--spacing)*-1)}.mx-0{margin-inline:calc(var(--spacing)*0)}.mx-1{margin-inline:calc(var(--spacing)*1)}.mx-1\.5{margin-inline:calc(var(--spacing)*1.5)}.mx-2{margin-inline:calc(var(--spacing)*2)}.mx-3\.5{margin-inline:calc(var(--spacing)*3.5)}.mx-auto{margin-inline:auto}.mx-px{margin-inline:1px}.\!my-0{margin-block:calc(var(--spacing)*0)!important}.my-1{margin-block:calc(var(--spacing)*1)}.my-1\.5{margin-block:calc(var(--spacing)*1.5)}.my-2{margin-block:calc(var(--spacing)*2)}.my-4{margin-block:calc(var(--spacing)*4)}.my-6{margin-block:calc(var(--spacing)*6)}.my-8{margin-block:calc(var(--spacing)*8)}.my-auto{margin-block:auto}.my-px{margin-block:1px}.-ms-5{margin-inline-start:calc(var(--spacing)*-5)}.me-1\.5{margin-inline-end:calc(var(--spacing)*1.5)}.\!mt-0{margin-top:calc(var(--spacing)*0)!important}.-mt-2\.5{margin-top:calc(var(--spacing)*-2.5)}.-mt-6{margin-top:calc(var(--spacing)*-6)}.-mt-12{margin-top:calc(var(--spacing)*-12)}.mt-0{margin-top:calc(var(--spacing)*0)}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-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)}.mt-\[0\.75em\]{margin-top:.75em}.mt-\[1\.4em\]{margin-top:1.4em}.mt-\[1\.6em\]{margin-top:1.6em}.mt-\[1em\]{margin-top:1em}.mt-auto{margin-top:auto}.-mr-3{margin-right:calc(var(--spacing)*-3)}.mr-0{margin-right:calc(var(--spacing)*0)}.mr-1{margin-right:calc(var(--spacing)*1)}.mr-1\.5{margin-right:calc(var(--spacing)*1.5)}.mr-2{margin-right:calc(var(--spacing)*2)}.mr-3{margin-right:calc(var(--spacing)*3)}.mr-4{margin-right:calc(var(--spacing)*4)}.mr-\[14px\]{margin-right:14px}.mr-auto{margin-right:auto}.\!mb-0{margin-bottom:calc(var(--spacing)*0)!important}.mb-0{margin-bottom:calc(var(--spacing)*0)}.mb-0\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-2\.5{margin-bottom:calc(var(--spacing)*2.5)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.mb-6{margin-bottom:calc(var(--spacing)*6)}.mb-8{margin-bottom:calc(var(--spacing)*8)}.mb-10{margin-bottom:calc(var(--spacing)*10)}.mb-12{margin-bottom:calc(var(--spacing)*12)}.mb-16{margin-bottom:calc(var(--spacing)*16)}.\!ml-6{margin-left:calc(var(--spacing)*6)!important}.-ml-2{margin-left:calc(var(--spacing)*-2)}.-ml-3{margin-left:calc(var(--spacing)*-3)}.ml-0{margin-left:calc(var(--spacing)*0)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-6{margin-left:calc(var(--spacing)*6)}.ml-auto{margin-left:auto}.ml-px{margin-left:1px}.box-border{box-sizing:border-box}.box-content{box-sizing:content-box}.line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.no-scrollbar{-ms-overflow-style:none;scrollbar-width:none}.no-scrollbar::-webkit-scrollbar{display:none}.scrollbar-hide{-ms-overflow-style:none;scrollbar-width:none}.scrollbar-hide::-webkit-scrollbar{display:none}.block{display:block}.contents{display:contents}.flex{display:flex}.flex\!{display:flex!important}.flow-root{display:flow-root}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.table-caption{display:table-caption}.table-cell{display:table-cell}.table-row{display:table-row}.aspect-1\/2{aspect-ratio:1/2}.aspect-\[4\/2\.5\]{aspect-ratio:4/2.5}.aspect-square{aspect-ratio:1}.aspect-video{aspect-ratio:var(--aspect-video)}.\!size-3{width:calc(var(--spacing)*3)!important;height:calc(var(--spacing)*3)!important}.\!size-3\.5{width:calc(var(--spacing)*3.5)!important;height:calc(var(--spacing)*3.5)!important}.size-0{width:calc(var(--spacing)*0);height:calc(var(--spacing)*0)}.size-2{width:calc(var(--spacing)*2);height:calc(var(--spacing)*2)}.size-2\.5{width:calc(var(--spacing)*2.5);height:calc(var(--spacing)*2.5)}.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-3\.5\!{width:calc(var(--spacing)*3.5)!important;height:calc(var(--spacing)*3.5)!important}.size-4{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.size-4\.5{width:calc(var(--spacing)*4.5);height:calc(var(--spacing)*4.5)}.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)}.size-12{width:calc(var(--spacing)*12);height:calc(var(--spacing)*12)}.size-\[14px\]{width:14px;height:14px}.size-\[22px\]{width:22px;height:22px}.size-\[28px\]{width:28px;height:28px}.size-\[130px\]{width:130px;height:130px}.size-full{width:100%;height:100%}.h-\(--container-height\){height:var(--container-height)}.h-\(--header-height\){height:var(--header-height)}.h-\(--height\){height:var(--height)}.h-\(--radix-popper-available-height\){height:var(--radix-popper-available-height)}.h-\(--top-spacing\){height:var(--top-spacing)}.h-0\.5{height:calc(var(--spacing)*.5)}.h-2{height:calc(var(--spacing)*2)}.h-2\.5{height:calc(var(--spacing)*2.5)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-9{height:calc(var(--spacing)*9)}.h-10{height:calc(var(--spacing)*10)}.h-11{height:calc(var(--spacing)*11)}.h-12{height:calc(var(--spacing)*12)}.h-14{height:calc(var(--spacing)*14)}.h-16{height:calc(var(--spacing)*16)}.h-20{height:calc(var(--spacing)*20)}.h-32{height:calc(var(--spacing)*32)}.h-\[0\.1px\]{height:.1px}.h-\[1\.5em\]{height:1.5em}.h-\[1\.45rem\]{height:1.45rem}.h-\[1px\]{height:1px}.h-\[19px\]{height:19px}.h-\[23rem\]{height:23rem}.h-\[24px\]{height:24px}.h-\[26px\]{height:26px}.h-\[28px\]{height:28px}.h-\[344px\]{height:344px}.h-\[350px\]{height:350px}.h-\[500px\]{height:500px}.h-\[520px\]{height:520px}.h-\[600px\]{height:600px}.h-\[650px\]{height:650px}.h-\[800px\]{height:800px}.h-\[7500px\]{height:7500px}.h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.h-\[calc\(100\%_\+_8px\)\]{height:calc(100% + 8px)}.h-\[calc\(100svh-var\(--header-height\)-var\(--footer-height\)\)\]{height:calc(100svh - var(--header-height) - var(--footer-height))}.h-\[calc\(100vh-3\.5rem\)\]{height:calc(100vh - 3.5rem)}.h-\[calc\(100vh-100px\)\]{height:calc(100vh - 100px)}.h-\[calc\(theme\(spacing\.7\)_-_1px\)\]{height:calc(1.75rem - 1px)}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-auto{height:auto}.h-dvh{height:100dvh}.h-fit{height:fit-content}.h-full{height:100%}.h-px{height:1px}.h-screen{height:100vh}.h-svh{height:100svh}.max-h-\(--radix-context-menu-content-available-height\){max-height:var(--radix-context-menu-content-available-height)}.max-h-\(--radix-dropdown-menu-content-available-height\){max-height:var(--radix-dropdown-menu-content-available-height)}.max-h-\(--radix-select-content-available-height\){max-height:var(--radix-select-content-available-height)}.max-h-14{max-height:calc(var(--spacing)*14)}.max-h-72{max-height:calc(var(--spacing)*72)}.max-h-\[50vh\]{max-height:50vh}.max-h-\[70svh\]{max-height:70svh}.max-h-\[70vh\]{max-height:70vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[90vh\]{max-height:90vh}.max-h-\[288px\]{max-height:288px}.max-h-\[300px\]{max-height:300px}.max-h-\[500px\]{max-height:500px}.max-h-\[650px\]{max-height:650px}.max-h-\[calc\(100vh-4rem\)\]{max-height:calc(100vh - 4rem)}.max-h-\[calc\(100vh-var\(--header-height\)-44px\)\]{max-height:calc(100vh - var(--header-height) - 44px)}.max-h-\[min\(50dvh\,calc\(-24px\+var\(--radix-popper-available-height\)\)\)\]{max-height:min(50dvh,calc(-24px + var(--radix-popper-available-height)))}.max-h-\[min\(70vh\,320px\)\]{max-height:min(70vh,320px)}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing)*0)}.min-h-4{min-height:calc(var(--spacing)*4)}.min-h-14{min-height:calc(var(--spacing)*14)}.min-h-\[1lh\]{min-height:1lh}.min-h-\[25px\]{min-height:25px}.min-h-\[50\%\]{min-height:50%}.min-h-\[350px\]{min-height:350px}.min-h-full\!{min-height:100%!important}.min-h-min{min-height:min-content}.min-h-svh{min-height:100svh}.w-\(--radix-popper-available-width\){width:var(--radix-popper-available-width)}.w-\(--sidebar-width\){width:var(--sidebar-width)}.w-0\.5{width:calc(var(--spacing)*.5)}.w-1{width:calc(var(--spacing)*1)}.w-1\/2{width:50%}.w-2{width:calc(var(--spacing)*2)}.w-2\.5{width:calc(var(--spacing)*2.5)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-3\/4{width:75%}.w-4{width:calc(var(--spacing)*4)}.w-4\.5{width:calc(var(--spacing)*4.5)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-48{width:calc(var(--spacing)*48)}.w-64{width:calc(var(--spacing)*64)}.w-72{width:calc(var(--spacing)*72)}.w-80{width:calc(var(--spacing)*80)}.w-\[1px\]{width:1px}.w-\[100px\]{width:100px}.w-\[180px\]{width:180px}.w-\[200px\]{width:200px}.w-\[230px\]{width:230px}.w-\[240px\]{width:240px}.w-\[280px\]{width:280px}.w-\[300px\]{width:300px}.w-\[330px\]{width:330px}.w-\[380px\]{width:380px}.w-\[700px\]{width:700px}.w-\[896px\]{width:896px}.w-\[970px\]{width:970px}.w-\[calc\(100\%-1rem\)\]{width:calc(100% - 1rem)}.w-\[min\(100\%\,600px\)\]{width:min(100%,600px)}.w-auto{width:auto}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.w-screen{width:100vw}.max-w-\(--skeleton-width\){max-width:var(--skeleton-width)}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-\[80vw\]{max-width:80vw}.max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.max-w-\[calc\(100vw-24px\)\]{max-width:calc(100vw - 24px)}.max-w-full{max-width:100%}.max-w-none{max-width:none}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-5{min-width:calc(var(--spacing)*5)}.min-w-8{min-width:calc(var(--spacing)*8)}.min-w-9{min-width:calc(var(--spacing)*9)}.min-w-10{min-width:calc(var(--spacing)*10)}.min-w-32{min-width:calc(var(--spacing)*32)}.min-w-\[8px\]{min-width:8px}.min-w-\[8rem\]{min-width:8rem}.min-w-\[12rem\]{min-width:12rem}.min-w-\[92px\]{min-width:92px}.min-w-\[125px\]{min-width:125px}.min-w-\[130px\]{min-width:130px}.min-w-\[180px\]{min-width:180px}.min-w-\[220px\]{min-width:220px}.min-w-\[225px\]{min-width:225px}.min-w-\[450px\]{min-width:450px}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.min-w-full{min-width:100%}.flex-1{flex:1}.flex-none{flex:none}.shrink-0{flex-shrink:0}.flex-grow-1,.grow{flex-grow:1}.table-fixed{table-layout:fixed}.caption-bottom{caption-side:bottom}.border-collapse{border-collapse:collapse}.origin-\(--radix-context-menu-content-transform-origin\){transform-origin:var(--radix-context-menu-content-transform-origin)}.origin-\(--radix-dropdown-menu-content-transform-origin\){transform-origin:var(--radix-dropdown-menu-content-transform-origin)}.origin-\(--radix-hover-card-content-transform-origin\){transform-origin:var(--radix-hover-card-content-transform-origin)}.origin-\(--radix-menubar-content-transform-origin\){transform-origin:var(--radix-menubar-content-transform-origin)}.origin-\(--radix-popover-content-transform-origin\){transform-origin:var(--radix-popover-content-transform-origin)}.origin-\(--radix-select-content-transform-origin\){transform-origin:var(--radix-select-content-transform-origin)}.origin-\(--radix-tooltip-content-transform-origin\){transform-origin:var(--radix-tooltip-content-transform-origin)}.-translate-x-1\/2{--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-1\/4{--tw-translate-x:calc(calc(1/4*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-x-px{--tw-translate-x:-1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-12{--tw-translate-x:calc(var(--spacing)*12);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-x-px{--tw-translate-x:1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/4{--tw-translate-y:calc(calc(1/4*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-full{--tw-translate-y:-100%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-0\.5{--tw-translate-y:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[2px\]{--tw-translate-y:2px;translate:var(--tw-translate-x)var(--tw-translate-y)}.translate-y-\[calc\(-50\%_-_2px\)\]{--tw-translate-y:calc(-50% - 2px);translate:var(--tw-translate-x)var(--tw-translate-y)}.-rotate-45{rotate:-45deg}.rotate-0{rotate:none}.rotate-12{rotate:12deg}.rotate-45{rotate:45deg}.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-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-col-resize{cursor:col-resize}.cursor-default{cursor:default}.cursor-grab{cursor:grab}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-row-resize{cursor:row-resize}.cursor-text{cursor:text}.touch-manipulation{touch-action:manipulation}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.scroll-m-16{scroll-margin:calc(var(--spacing)*16)}.scroll-m-20{scroll-margin:calc(var(--spacing)*20)}.scroll-m-28{scroll-margin:calc(var(--spacing)*28)}.scroll-my-1{scroll-margin-block:calc(var(--spacing)*1)}.scroll-mt-20{scroll-margin-top:calc(var(--spacing)*20)}.scroll-mt-24{scroll-margin-top:calc(var(--spacing)*24)}.scroll-py-1{scroll-padding-block:calc(var(--spacing)*1)}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.list-none\!{list-style-type:none!important}.appearance-none{appearance:none}.grid-flow-row{grid-auto-flow:row}.auto-rows-max{grid-auto-rows:max-content}.auto-rows-min{grid-auto-rows:min-content}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-5{grid-template-columns:repeat(5,minmax(0,1fr))}.grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.grid-cols-\[0_1fr\]{grid-template-columns:0 1fr}.grid-cols-\[repeat\(10\,1fr\)\]{grid-template-columns:repeat(10,1fr)}.grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-row{flex-direction:row}.flex-nowrap{flex-wrap:nowrap}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.items-stretch{align-items:stretch}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-evenly{justify-content:space-evenly}.justify-start{justify-content:flex-start}.justify-items-start{justify-items:start}.gap-0{gap:calc(var(--spacing)*0)}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-2\.5{gap:calc(var(--spacing)*2.5)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-5{gap:calc(var(--spacing)*5)}.gap-6{gap:calc(var(--spacing)*6)}.gap-8{gap:calc(var(--spacing)*8)}.gap-10{gap:calc(var(--spacing)*10)}.gap-12{gap:calc(var(--spacing)*12)}:where(.space-y-0>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*0)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*0)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-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-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-8>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*8)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*8)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-10>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*10)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*10)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-16>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*16)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*16)*calc(1 - var(--tw-space-y-reverse)))}.gap-x-1{column-gap:calc(var(--spacing)*1)}:where(.space-x-0\.5>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*.5)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*.5)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*1)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-x-reverse)))}:where(.space-x-2>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing)*2)*var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-x-reverse)))}.gap-y-0\.5{row-gap:calc(var(--spacing)*.5)}.self-start{align-self:flex-start}.justify-self-end{justify-self:flex-end}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-visible{overflow:visible}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overflow-y-hidden{overflow-y:hidden}.overscroll-none{overscroll-behavior:none}.rounded{border-radius:.25rem}.rounded-\[0\.5rem\]{border-radius:.5rem}.rounded-\[2px\]{border-radius:2px}.rounded-\[4px\]{border-radius:4px}.rounded-\[6px\]{border-radius:6px}.rounded-\[50\%\]{border-radius:50%}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius)}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-none{border-radius:0}.rounded-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.rounded-xs{border-radius:var(--radius-xs)}.rounded-t-lg{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.rounded-r-md{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.rounded-r-none{border-top-right-radius:0;border-bottom-right-radius:0}.rounded-bl-none{border-bottom-left-radius:0}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-s-2{border-inline-start-style:var(--tw-border-style);border-inline-start-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-0{border-left-style:var(--tw-border-style);border-left-width:0}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-none{--tw-border-style:none;border-style:none}.border-solid{--tw-border-style:solid;border-style:solid}.border-\[\#ddd\]{border-color:#ddd}.border-blue-500{border-color:var(--color-blue-500)}.border-border,.border-border\/40{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/40{border-color:color-mix(in oklab,var(--border)40%,transparent)}}.border-border\/50{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/50{border-color:color-mix(in oklab,var(--border)50%,transparent)}}.border-border\/60{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.border-border\/60{border-color:color-mix(in oklab,var(--border)60%,transparent)}}.border-current{border-color:currentColor}.border-gray-200{border-color:var(--color-gray-200)}.border-input{border-color:var(--input)}.border-muted{border-color:var(--muted)}.border-muted-foreground{border-color:var(--muted-foreground)}.border-primary{border-color:var(--primary)}.border-sidebar-border{border-color:var(--sidebar-border)}.border-stone-700{border-color:var(--color-stone-700)}.border-transparent{border-color:#0000}.border-zinc-700{border-color:var(--color-zinc-700)}.border-zinc-800{border-color:var(--color-zinc-800)}.border-s-blue-500\/50{border-inline-start-color:#3080ff80}@supports (color:color-mix(in lab, red, red)){.border-s-blue-500\/50{border-inline-start-color:color-mix(in oklab,var(--color-blue-500)50%,transparent)}}.border-s-green-500\/50{border-inline-start-color:#00c75880}@supports (color:color-mix(in lab, red, red)){.border-s-green-500\/50{border-inline-start-color:color-mix(in oklab,var(--color-green-500)50%,transparent)}}.border-s-orange-500\/50{border-inline-start-color:#fe6e0080}@supports (color:color-mix(in lab, red, red)){.border-s-orange-500\/50{border-inline-start-color:color-mix(in oklab,var(--color-orange-500)50%,transparent)}}.border-s-red-500\/50{border-inline-start-color:#fb2c3680}@supports (color:color-mix(in lab, red, red)){.border-s-red-500\/50{border-inline-start-color:color-mix(in oklab,var(--color-red-500)50%,transparent)}}.border-t-border{border-top-color:var(--border)}.border-t-transparent{border-top-color:#0000}.border-b-border{border-bottom-color:var(--border)}.border-b-brand\/\[\.24\]{border-bottom-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.border-b-brand\/\[\.24\]{border-bottom-color:color-mix(in oklab,var(--brand)24%,transparent)}}.border-b-gray-300{border-bottom-color:var(--color-gray-300)}.border-b-highlight,.border-b-highlight\/35{border-bottom-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.border-b-highlight\/35{border-bottom-color:color-mix(in oklab,var(--highlight)35%,transparent)}}.border-b-highlight\/\[\.7\]{border-bottom-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.border-b-highlight\/\[\.7\]{border-bottom-color:color-mix(in oklab,var(--highlight)70%,transparent)}}.border-b-highlight\/\[\.36\]{border-bottom-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.border-b-highlight\/\[\.36\]{border-bottom-color:color-mix(in oklab,var(--highlight)36%,transparent)}}.border-b-purple-100{border-bottom-color:var(--color-purple-100)}.border-b-transparent{border-bottom-color:#0000}.border-l-transparent{border-left-color:#0000}.bg-\(--cellBackground\){background-color:var(--cellBackground)}.bg-\(--color-1\){background-color:var(--color-1)}.bg-\(--color-2\){background-color:var(--color-2)}.bg-\(--color-3\){background-color:var(--color-3)}.bg-\(--color-4\){background-color:var(--color-4)}.bg-\[\#adfa1d\]{background-color:#adfa1d}.bg-\[\#eee\]{background-color:#eee}.bg-\[rgba\(0\,0\,0\,0\.5\)\]{background-color:#00000080}.bg-accent{background-color:var(--accent)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-background,.bg-background\/90{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/90{background-color:color-mix(in oklab,var(--background)90%,transparent)}}.bg-background\/95{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.bg-background\/95{background-color:color-mix(in oklab,var(--background)95%,transparent)}}.bg-black{background-color:var(--color-black)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab,var(--color-black)50%,transparent)}}.bg-blue-200{background-color:var(--color-blue-200)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-border{background-color:var(--border)}.bg-brand,.bg-brand\/25{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.bg-brand\/25{background-color:color-mix(in oklab,var(--brand)25%,transparent)}}.bg-brand\/50{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.bg-brand\/50{background-color:color-mix(in oklab,var(--brand)50%,transparent)}}.bg-brand\/\[\.08\]{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.bg-brand\/\[\.08\]{background-color:color-mix(in oklab,var(--brand)8%,transparent)}}.bg-brand\/\[\.13\]{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.bg-brand\/\[\.13\]{background-color:color-mix(in oklab,var(--brand)13%,transparent)}}.bg-card{background-color:var(--card)}.bg-current{background-color:currentColor}.bg-cyan-50{background-color:var(--color-cyan-50)}.bg-destructive{background-color:var(--destructive)}.bg-emerald-100{background-color:var(--color-emerald-100)}.bg-emerald-200\/80{background-color:#a4f4cfcc}@supports (color:color-mix(in lab, red, red)){.bg-emerald-200\/80{background-color:color-mix(in oklab,var(--color-emerald-200)80%,transparent)}}.bg-foreground{background-color:var(--foreground)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-300\/25{background-color:#d1d5dc40}@supports (color:color-mix(in lab, red, red)){.bg-gray-300\/25{background-color:color-mix(in oklab,var(--color-gray-300)25%,transparent)}}.bg-gray-800{background-color:var(--color-gray-800)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-100{background-color:var(--color-green-100)}.bg-green-200{background-color:var(--color-green-200)}.bg-highlight,.bg-highlight\/15{background-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.bg-highlight\/15{background-color:color-mix(in oklab,var(--highlight)15%,transparent)}}.bg-highlight\/25{background-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.bg-highlight\/25{background-color:color-mix(in oklab,var(--highlight)25%,transparent)}}.bg-highlight\/30{background-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.bg-highlight\/30{background-color:color-mix(in oklab,var(--highlight)30%,transparent)}}.bg-highlight\/45{background-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.bg-highlight\/45{background-color:color-mix(in oklab,var(--highlight)45%,transparent)}}.bg-highlight\/\[\.13\]{background-color:var(--highlight)}@supports (color:color-mix(in lab, red, red)){.bg-highlight\/\[\.13\]{background-color:color-mix(in oklab,var(--highlight)13%,transparent)}}.bg-inherit{background-color:inherit}.bg-muted,.bg-muted\/30{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/30{background-color:color-mix(in oklab,var(--muted)30%,transparent)}}.bg-muted\/50{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/50{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.bg-muted\/60{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.bg-muted\/60{background-color:color-mix(in oklab,var(--muted)60%,transparent)}}.bg-neutral-50{background-color:var(--color-neutral-50)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-pink-50{background-color:var(--color-pink-50)}.bg-popover,.bg-popover\/90{background-color:var(--popover)}@supports (color:color-mix(in lab, red, red)){.bg-popover\/90{background-color:color-mix(in oklab,var(--popover)90%,transparent)}}.bg-primary,.bg-primary\/10{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/10{background-color:color-mix(in oklab,var(--primary)10%,transparent)}}.bg-primary\/40{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.bg-primary\/40{background-color:color-mix(in oklab,var(--primary)40%,transparent)}}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-200{background-color:var(--color-red-200)}.bg-red-200\/80{background-color:#ffcacacc}@supports (color:color-mix(in lab, red, red)){.bg-red-200\/80{background-color:color-mix(in oklab,var(--color-red-200)80%,transparent)}}.bg-ring{background-color:var(--ring)}.bg-secondary{background-color:var(--secondary)}.bg-sidebar{background-color:var(--sidebar)}.bg-sidebar-border{background-color:var(--sidebar-border)}.bg-slate-200\/50{background-color:#e2e8f080}@supports (color:color-mix(in lab, red, red)){.bg-slate-200\/50{background-color:color-mix(in oklab,var(--color-slate-200)50%,transparent)}}.bg-surface{background-color:var(--surface)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-zinc-800{background-color:var(--color-zinc-800)}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-950{background-color:var(--color-zinc-950)}.bg-zinc-950\!{background-color:var(--color-zinc-950)!important}.bg-linear-to-b{--tw-gradient-position:to bottom}@supports (background-image:linear-gradient(in lab, red, red)){.bg-linear-to-b{--tw-gradient-position:to bottom in oklab}}.bg-linear-to-b{background-image:linear-gradient(var(--tw-gradient-stops))}.bg-linear-to-r{--tw-gradient-position:to right}@supports (background-image:linear-gradient(in lab, red, red)){.bg-linear-to-r{--tw-gradient-position:to right in oklab}}.bg-linear-to-r{background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-b{--tw-gradient-position:to bottom in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-t{--tw-gradient-position:to top in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-\[\#6EB6F2\]{--tw-gradient-from:#6eb6f2;--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))}.from-background{--tw-gradient-from:var(--background);--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))}.from-background\/10{--tw-gradient-from:var(--background)}@supports (color:color-mix(in lab, red, red)){.from-background\/10{--tw-gradient-from:color-mix(in oklab,var(--background)10%,transparent)}}.from-background\/10{--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))}.from-gray-900\/30{--tw-gradient-from:#1018284d}@supports (color:color-mix(in lab, red, red)){.from-gray-900\/30{--tw-gradient-from:color-mix(in oklab,var(--color-gray-900)30%,transparent)}}.from-gray-900\/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))}.via-\[\#a855f7\]{--tw-gradient-via:#a855f7;--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.via-background\/60{--tw-gradient-via:var(--background)}@supports (color:color-mix(in lab, red, red)){.via-background\/60{--tw-gradient-via:color-mix(in oklab,var(--background)60%,transparent)}}.via-background\/60{--tw-gradient-via-stops:var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-via)var(--tw-gradient-via-position),var(--tw-gradient-to)var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-\[\#eab308\]{--tw-gradient-to:#eab308;--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-background{--tw-gradient-to:var(--background);--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-transparent{--tw-gradient-to:transparent;--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-90\%{--tw-gradient-to-position:90%}.bg-cover{background-size:cover}.bg-clip-content{background-clip:content-box}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.bg-center{background-position:50%}.fill-blue-500{fill:var(--color-blue-500)}.fill-current{fill:currentColor}.fill-green-500{fill:var(--color-green-500)}.fill-none{fill:none}.fill-orange-500{fill:var(--color-orange-500)}.fill-primary{fill:var(--primary)}.fill-red-500{fill:var(--color-red-500)}.stroke-slate-300{stroke:var(--color-slate-300)}.stroke-\[3px\]{stroke-width:3px}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.\!p-0{padding:calc(var(--spacing)*0)!important}.p-0{padding:calc(var(--spacing)*0)}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.p-10{padding:calc(var(--spacing)*10)}.p-11{padding:calc(var(--spacing)*11)}.p-20{padding:calc(var(--spacing)*20)}.p-\[2px\]{padding:2px}.p-\[3px\]{padding:3px}.p-px{padding:1px}.\!px-0\.5{padding-inline:calc(var(--spacing)*.5)!important}.\!px-1{padding-inline:calc(var(--spacing)*1)!important}.\!px-1\.5{padding-inline:calc(var(--spacing)*1.5)!important}.\!px-2{padding-inline:calc(var(--spacing)*2)!important}.px-0{padding-inline:calc(var(--spacing)*0)}.px-0\.5{padding-inline:calc(var(--spacing)*.5)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.px-8{padding-inline:calc(var(--spacing)*8)}.px-10{padding-inline:calc(var(--spacing)*10)}.px-16{padding-inline:calc(var(--spacing)*16)}.px-\[0\.3em\]{padding-inline:.3em}.px-\[0\.3rem\]{padding-inline:.3rem}.px-\[calc\(--spacing\(1\)-2px\)\]{padding-inline:calc(calc(var(--spacing)*1) - 2px)}.px-px{padding-inline:1px}.py-0{padding-block:calc(var(--spacing)*0)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-4{padding-block:calc(var(--spacing)*4)}.py-4\!{padding-block:calc(var(--spacing)*4)!important}.py-5{padding-block:calc(var(--spacing)*5)}.py-6{padding-block:calc(var(--spacing)*6)}.py-8{padding-block:calc(var(--spacing)*8)}.py-\[--spacing\(1\)\]{padding-block:calc(var(--spacing)*1)}.py-\[0\.2em\]{padding-block:.2em}.py-\[0\.2rem\]{padding-block:.2rem}.py-\[1\.5px\]{padding-block:1.5px}.py-\[3px\]{padding-block:3px}.ps-6{padding-inline-start:calc(var(--spacing)*6)}.pt-0{padding-top:calc(var(--spacing)*0)}.pt-0\.5{padding-top:calc(var(--spacing)*.5)}.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-2\.5{padding-top:calc(var(--spacing)*2.5)}.pt-4{padding-top:calc(var(--spacing)*4)}.pt-5{padding-top:calc(var(--spacing)*5)}.pt-24{padding-top:calc(var(--spacing)*24)}.pt-\[0\.275em\]{padding-top:.275em}.pr-1{padding-right:calc(var(--spacing)*1)}.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)}.pr-9{padding-right:calc(var(--spacing)*9)}.pr-10{padding-right:calc(var(--spacing)*10)}.pr-\[14px\]{padding-right:14px}.pr-px{padding-right:1px}.pb-0{padding-bottom:calc(var(--spacing)*0)}.pb-1{padding-bottom:calc(var(--spacing)*1)}.pb-1\.5{padding-bottom:calc(var(--spacing)*1.5)}.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-6{padding-bottom:calc(var(--spacing)*6)}.pb-8{padding-bottom:calc(var(--spacing)*8)}.pb-48{padding-bottom:calc(var(--spacing)*48)}.pb-72{padding-bottom:calc(var(--spacing)*72)}.pb-\[20vh\]{padding-bottom:20vh}.pb-\[51\.25\%\]{padding-bottom:51.25%}.pb-\[56\.25\%\]{padding-bottom:56.25%}.pb-\[56\.0417\%\]{padding-bottom:56.0417%}.pb-\[75\%\]{padding-bottom:75%}.pb-px{padding-bottom:1px}.pl-\(--index\){padding-left:var(--index)}.pl-0{padding-left:calc(var(--spacing)*0)}.pl-0\.5{padding-left:calc(var(--spacing)*.5)}.pl-1{padding-left:calc(var(--spacing)*1)}.pl-2{padding-left:calc(var(--spacing)*2)}.pl-2\.5{padding-left:calc(var(--spacing)*2.5)}.pl-3{padding-left:calc(var(--spacing)*3)}.pl-4{padding-left:calc(var(--spacing)*4)}.pl-6{padding-left:calc(var(--spacing)*6)}.pl-8{padding-left:calc(var(--spacing)*8)}.pl-\[26px\]{padding-left:26px}.pl-\[32px\]{padding-left:32px}.pl-\[50px\]{padding-left:50px}.text-center{text-align:center}.text-end{text-align:end}.text-justify{text-align:justify}.text-left{text-align:left}.text-start{text-align:start}.align-baseline{vertical-align:baseline}.align-middle{vertical-align:middle}.align-text-bottom{vertical-align:text-bottom}.font-\[inherit\]{font-family:inherit}.font-heading{font-family:"var(--font-heading)","ui-sans-serif",-apple-system,BlinkMacSystemFont,Segoe UI Variable Display,Segoe UI,Helvetica,Apple Color Emoji,Arial,"sans-serif",Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.font-mono{font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:"var(--font-sans)","ui-sans-serif",-apple-system,BlinkMacSystemFont,Segoe UI Variable Display,Segoe UI,Helvetica,Apple Color Emoji,Arial,"sans-serif",Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.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-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[0\.8rem\]{font-size:.8rem}.text-\[1\.05rem\]{font-size:1.05rem}.text-\[10px\]{font-size:10px}.text-\[18px\]{font-size:18px}.text-\[20px\]{font-size:20px}.text-\[40px\]{font-size:40px}.text-\[max\(87\.5\%\,\.875rem\)\]{font-size:max(87.5%,.875rem)}.leading-7{--tw-leading:calc(var(--spacing)*7);line-height:calc(var(--spacing)*7)}.leading-\[1\.1\]{--tw-leading:1.1;line-height:1.1}.leading-\[1\.5\]{--tw-leading:1.5;line-height:1.5}.leading-\[10px\]{--tw-leading:10px;line-height:10px}.leading-\[normal\]{--tw-leading:normal;line-height:normal}.leading-loose{--tw-leading:var(--leading-loose);line-height:var(--leading-loose)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-light{--tw-font-weight:var(--font-weight-light);font-weight:var(--font-weight-light)}.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-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-tighter{--tw-tracking:var(--tracking-tighter);letter-spacing:var(--tracking-tighter)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.text-nowrap{text-wrap:nowrap}.break-normal{overflow-wrap:normal;word-break:normal}.break-words{overflow-wrap:break-word}.whitespace-break-spaces{white-space:break-spaces}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre{white-space:pre}.whitespace-pre-wrap{white-space:pre-wrap}.text-\[\#000000\]{color:#000}.text-\[\#aaa\]{color:#aaa}.text-accent-foreground{color:var(--accent-foreground)}.text-background{color:var(--background)}.text-black{color:var(--color-black)}.text-blue-600{color:var(--color-blue-600)}.text-brand\/80{color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.text-brand\/80{color:color-mix(in oklab,var(--brand)80%,transparent)}}.text-card-foreground{color:var(--card-foreground)}.text-current{color:currentColor}.text-cyan-700{color:var(--color-cyan-700)}.text-destructive{color:var(--destructive)}.text-emerald-700{color:var(--color-emerald-700)}.text-foreground,.text-foreground\/80{color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.text-foreground\/80{color:color-mix(in oklab,var(--foreground)80%,transparent)}}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-green-700{color:var(--color-green-700)}.text-green-800{color:var(--color-green-800)}.text-inherit{color:inherit}.text-muted-foreground,.text-muted-foreground\/70{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\/70{color:color-mix(in oklab,var(--muted-foreground)70%,transparent)}}.text-muted-foreground\/80{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\/80{color:color-mix(in oklab,var(--muted-foreground)80%,transparent)}}.text-neutral-600{color:var(--color-neutral-600)}.text-neutral-800{color:var(--color-neutral-800)}.text-orange-500{color:var(--color-orange-500)}.text-orange-700{color:var(--color-orange-700)}.text-pink-700{color:var(--color-pink-700)}.text-popover-foreground{color:var(--popover-foreground)}.text-primary{color:var(--primary)}.text-primary-foreground{color:var(--primary-foreground)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-purple-800{color:var(--color-purple-800)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-secondary-foreground{color:var(--secondary-foreground)}.text-sidebar-foreground,.text-sidebar-foreground\/70{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab, red, red)){.text-sidebar-foreground\/70{color:color-mix(in oklab,var(--sidebar-foreground)70%,transparent)}}.text-slate-50{color:var(--color-slate-50)}.text-slate-500{color:var(--color-slate-500)}.text-stone-400{color:var(--color-stone-400)}.text-surface-foreground{color:var(--surface-foreground)}.text-transparent{color:#0000}.text-white{color:var(--color-white)}.text-zinc-50{color:var(--color-zinc-50)}.text-zinc-100{color:var(--color-zinc-100)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-700{color:var(--color-zinc-700)}.capitalize{text-transform:capitalize}.lowercase{text-transform:lowercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,)var(--tw-slashed-zero,)var(--tw-numeric-figure,)var(--tw-numeric-spacing,)var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.decoration-primary{-webkit-text-decoration-color:var(--primary);-webkit-text-decoration-color:var(--primary);text-decoration-color:var(--primary)}.decoration-\[0\.5px\]{text-decoration-thickness:.5px}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.caret-primary{caret-color:var(--primary)}.accent-foreground{accent-color:var(--foreground)}.opacity-0{opacity:0}.opacity-10{opacity:.1}.opacity-30{opacity:.3}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-100{opacity:1}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[0_0_0_1px_hsl\(var\(--sidebar-border\)\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-border)));box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-none{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a),0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.shadow-\[rgba\(255\,_255\,_255\,_0\.1\)_0px_0\.5px_0px_0px_inset\,_rgb\(248\,_249\,_250\)_0px_1px_5px_0px_inset\,_rgb\(193\,_200\,_205\)_0px_0px_0px_0\.5px\,_rgb\(193\,_200\,_205\)_0px_2px_1px_-1px\,_rgb\(193\,_200\,_205\)_0px_1px_0px_0px\]{--tw-shadow-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.shadow-\[rgba\(255\,_255\,_255\,_0\.1\)_0px_0\.5px_0px_0px_inset\,_rgb\(248\,_249\,_250\)_0px_1px_5px_0px_inset\,_rgb\(193\,_200\,_205\)_0px_0px_0px_0\.5px\,_rgb\(193\,_200\,_205\)_0px_2px_1px_-1px\,_rgb\(193\,_200\,_205\)_0px_1px_0px_0px\]{--tw-shadow-color:color-mix(in oklab,#ffffff1a 0px .5px 0px 0px inset,#f8f9fa 0px 1px 5px 0px inset,#c1c8cd 0px 0px 0px .5px,#c1c8cd 0px 2px 1px -1px,#c1c8cd 0px 1px 0px 0px var(--tw-shadow-alpha),transparent)}}.ring-black\/5{--tw-ring-color:#0000000d}@supports (color:color-mix(in lab, red, red)){.ring-black\/5{--tw-ring-color:color-mix(in oklab,var(--color-black)5%,transparent)}}.ring-ring{--tw-ring-color:var(--ring)}.ring-sidebar-ring{--tw-ring-color:var(--sidebar-ring)}.ring-offset-0{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.ring-offset-background{--tw-ring-offset-color:var(--background)}.outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.outline-hidden{outline-offset:2px;outline:2px solid #0000}}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.invert-1{--tw-invert:invert(1%);filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.\!filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)!important}.filter{filter:var(--tw-blur,)var(--tw-brightness,)var(--tw-contrast,)var(--tw-grayscale,)var(--tw-hue-rotate,)var(--tw-invert,)var(--tw-saturate,)var(--tw-sepia,)var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.backdrop-blur-xs{--tw-backdrop-blur:blur(var(--blur-xs));-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,visibility,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-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;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-shadow{transition-property:box-shadow;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))}.transition-none{transition-property:none}.duration-75{--tw-duration:75ms;transition-duration:75ms}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.duration-1000{--tw-duration:1s;transition-duration:1s}.ease-in-out{--tw-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out)}.ease-linear{--tw-ease:linear;transition-timing-function:linear}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.\[contain\:content\]{contain:content}.fade-in-0{--tw-enter-opacity:0}.outline-none{--tw-outline-style:none;outline-style:none}.select-auto{-webkit-user-select:auto;user-select:auto}.select-none{-webkit-user-select:none;user-select:none}.select-text{-webkit-user-select:text;user-select:text}.zoom-in-95{--tw-enter-scale:.95}.\[--footer-height\:calc\(var\(--spacing\)\*14\)\]{--footer-height:calc(var(--spacing)*14)}.\[--header-height\:calc\(var\(--spacing\)\*14\)\]{--header-height:calc(var(--spacing)*14)}.\[--sidebar-width\:220px\]{--sidebar-width:220px}.\[--top-spacing\:0\]{--top-spacing:0}.\[counter-increment\:step\]{counter-increment:step}.\[counter-reset\:step\]{counter-reset:step}.\[tab-size\:2\]{tab-size:2}.fade-in{--tw-enter-opacity:0}.ring-inset{--tw-ring-inset:inset}.running{animation-play-state:running}:is(.\*\:m-0>*){margin:calc(var(--spacing)*0)}:is(.\*\:shrink-0>*){flex-shrink:0}:is(.\*\*\:my-0 *){margin-block:calc(var(--spacing)*0)}:is(.\*\*\:leading-\[calc\(1\.25\/\.875\)\] *){--tw-leading:calc(1.25/.875);line-height:1.42857}:is(.\*\*\:leading-normal *){--tw-leading:var(--leading-normal);line-height:var(--leading-normal)}.not-first\:mt-4:not(:first-child){margin-top:calc(var(--spacing)*4)}.not-first\:mt-6:not(:first-child){margin-top:calc(var(--spacing)*6)}.not-first\:mt-12:not(:first-child){margin-top:calc(var(--spacing)*12)}.not-last\:border-b:not(:last-child){border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.group-first\/column\:-left-1:is(:where(.group\/column):first-child *){left:calc(var(--spacing)*-1)}.group-first\/column\:pl-0:is(:where(.group\/column):first-child *){padding-left:calc(var(--spacing)*0)}.group-last\/column\:-right-1:is(:where(.group\/column):last-child *){right:calc(var(--spacing)*-1)}.group-last\/column\:pr-0:is(:where(.group\/column):last-child *){padding-right:calc(var(--spacing)*0)}.group-last\/toolbar-group\:hidden\!:is(:where(.group\/toolbar-group):last-child *){display:none!important}.group-focus-within\:pointer-events-none:is(:where(.group):focus-within *){pointer-events:none}.group-focus-within\:top-0:is(:where(.group):focus-within *){top:calc(var(--spacing)*0)}.group-focus-within\:cursor-default:is(:where(.group):focus-within *){cursor:default}.group-focus-within\:text-xs:is(:where(.group):focus-within *){font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.group-focus-within\:font-medium:is(:where(.group):focus-within *){--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.group-focus-within\:text-foreground:is(:where(.group):focus-within *){color:var(--foreground)}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\:translate-x-\[-135px\]:is(:where(.group):hover *){--tw-translate-x:-135px;translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:translate-x-\[-181px\]:is(:where(.group):hover *){--tw-translate-x:-181px;translate:var(--tw-translate-x)var(--tw-translate-y)}.group-hover\:rotate-0:is(:where(.group):hover *){rotate:none}.group-hover\:rotate-45:is(:where(.group):hover *){rotate:45deg}.group-hover\:text-\[\#e3b341\]:is(:where(.group):hover *){color:#e3b341}.group-hover\:no-underline:is(:where(.group):hover *){text-decoration-line:none}.group-hover\:underline:is(:where(.group):hover *){text-decoration-line:underline}.group-hover\:opacity-100:is(:where(.group):hover *),.group-hover\/column\:opacity-100:is(:where(.group\/column):hover *),.group-hover\/container\:opacity-100:is(:where(.group\/container):hover *),.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *),.group-hover\/row\:opacity-100:is(:where(.group\/row):hover *){opacity:1}}.group-has-disabled\:opacity-50:is(:where(.group):has(:disabled) *){opacity:.5}.group-has-data-\[resizing\=\"true\"\]\/row\:opacity-0:is(:where(.group\/row):has([data-resizing=true]) *),.group-has-data-\[resizing\=\\\"true\\\"\]\/row\:opacity-0:is(:where(.group\/row):has([data-resizing=\"true\"]) *){opacity:0}.group-has-data-\[sidebar\=menu-action\]\/menu-item\:pr-8:is(:where(.group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--spacing)*8)}.group-has-\[\[data-col\=\"0\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="0"]:hover) *),.group-has-\[\[data-col\=\"0\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="0"][data-resizing=true]) *),.group-has-\[\[data-col\=\"1\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="1"]:hover) *),.group-has-\[\[data-col\=\"1\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="1"][data-resizing=true]) *),.group-has-\[\[data-col\=\"10\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="10"]:hover) *),.group-has-\[\[data-col\=\"10\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="10"][data-resizing=true]) *),.group-has-\[\[data-col\=\"2\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="2"]:hover) *),.group-has-\[\[data-col\=\"2\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="2"][data-resizing=true]) *),.group-has-\[\[data-col\=\"3\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="3"]:hover) *),.group-has-\[\[data-col\=\"3\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="3"][data-resizing=true]) *),.group-has-\[\[data-col\=\"4\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="4"]:hover) *),.group-has-\[\[data-col\=\"4\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="4"][data-resizing=true]) *),.group-has-\[\[data-col\=\"5\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="5"]:hover) *),.group-has-\[\[data-col\=\"5\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="5"][data-resizing=true]) *),.group-has-\[\[data-col\=\"6\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="6"]:hover) *),.group-has-\[\[data-col\=\"6\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="6"][data-resizing=true]) *),.group-has-\[\[data-col\=\"7\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="7"]:hover) *),.group-has-\[\[data-col\=\"7\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="7"][data-resizing=true]) *),.group-has-\[\[data-col\=\"8\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="8"]:hover) *),.group-has-\[\[data-col\=\"8\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="8"][data-resizing=true]) *),.group-has-\[\[data-col\=\"9\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col="9"]:hover) *),.group-has-\[\[data-col\=\"9\"\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-col="9"][data-resizing=true]) *),.group-has-\[\[data-col\=\\\"0\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"0\"]:hover) *),.group-has-\[\[data-col\=\\\"0\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"0\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"10\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"10\"]:hover) *),.group-has-\[\[data-col\=\\\"10\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"10\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"1\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"1\"]:hover) *),.group-has-\[\[data-col\=\\\"1\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"1\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"2\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"2\"]:hover) *),.group-has-\[\[data-col\=\\\"2\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"2\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"3\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"3\"]:hover) *),.group-has-\[\[data-col\=\\\"3\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"3\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"4\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"4\"]:hover) *),.group-has-\[\[data-col\=\\\"4\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"4\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"5\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"5\"]:hover) *),.group-has-\[\[data-col\=\\\"5\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"5\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"6\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"6\"]:hover) *),.group-has-\[\[data-col\=\\\"6\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"6\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"7\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"7\"]:hover) *),.group-has-\[\[data-col\=\\\"7\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"7\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"8\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"8\"]:hover) *),.group-has-\[\[data-col\=\\\"8\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"8\"][data-resizing=\"true\"]) *),.group-has-\[\[data-col\=\\\"9\\\"\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-col=\"9\"]:hover) *),.group-has-\[\[data-col\=\\\"9\\\"\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-col=\"9\"][data-resizing=\"true\"]) *),.group-has-\[\[data-resizer-left\]\:hover\]\/table\:block:is(:where(.group\/table):has([data-resizer-left]:hover) *),.group-has-\[\[data-resizer-left\]\[data-resizing\=\"true\"\]\]\/table\:block:is(:where(.group\/table):has([data-resizer-left][data-resizing=true]) *),.group-has-\[\[data-resizer-left\]\[data-resizing\=\\\"true\\\"\]\]\/table\:block:is(:where(.group\/table):has([data-resizer-left][data-resizing=\"true\"]) *){display:block}.group-data-list\:my-2:is(:where(.group)[data-list] *){margin-block:calc(var(--spacing)*2)}.group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.group)[data-collapsible=icon] *){margin-top:calc(var(--spacing)*-8)}.group-data-\[collapsible\=icon\]\:hidden:is(:where(.group)[data-collapsible=icon] *){display:none}.group-data-\[collapsible\=icon\]\:size-8\!:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--spacing)*8)!important;height:calc(var(--spacing)*8)!important}.group-data-\[collapsible\=icon\]\:w-\(--sidebar-width-icon\):is(:where(.group)[data-collapsible=icon] *){width:var(--sidebar-width-icon)}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing)*4)))}.group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]:is(:where(.group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--spacing)*4)) + 2px)}.group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.group)[data-collapsible=icon] *){overflow:hidden}.group-data-\[collapsible\=icon\]\:p-0\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*0)!important}.group-data-\[collapsible\=icon\]\:p-2\!:is(:where(.group)[data-collapsible=icon] *){padding:calc(var(--spacing)*2)!important}.group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.group)[data-collapsible=icon] *){opacity:0}.group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width)*-1)}.group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.group)[data-collapsible=offcanvas] *){width:calc(var(--spacing)*0)}.group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.group)[data-disabled=true] *){pointer-events:none}.group-data-\[disabled\=true\]\:opacity-50:is(:where(.group)[data-disabled=true] *){opacity:.5}.group-data-\[empty\=true\]\/subheading\:hidden:is(:where(.group\/subheading)[data-empty=true] *){display:none}.group-data-\[pressed\=true\]\:bg-accent:is(:where(.group)[data-pressed=true] *){background-color:var(--accent)}.group-data-\[pressed\=true\]\:text-accent-foreground:is(:where(.group)[data-pressed=true] *){color:var(--accent-foreground)}.group-data-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing)*-4)}.group-data-\[side\=left\]\:border-r:is(:where(.group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing)*0)}.group-data-\[side\=right\]\:rotate-180:is(:where(.group)[data-side=right] *){rotate:180deg}.group-data-\[side\=right\]\:border-l:is(:where(.group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.group-data-\[variant\=floating\]\:rounded-lg:is(:where(.group)[data-variant=floating] *){border-radius:var(--radius)}.group-data-\[variant\=floating\]\:border:is(:where(.group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.group-data-\[variant\=floating\]\:border-sidebar-border:is(:where(.group)[data-variant=floating] *){border-color:var(--sidebar-border)}.group-data-\[variant\=floating\]\:shadow-sm:is(:where(.group)[data-variant=floating] *){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.group-data-\[vaul-drawer-direction\=bottom\]\/drawer-content\:block:is(:where(.group\/drawer-content)[data-vaul-drawer-direction=bottom] *){display:block}.group-data-\[view\=code\]\/block-view-wrapper\:hidden:is(:where(.group\/block-view-wrapper)[data-view=code] *),.group-data-\[view\=preview\]\/block-view-wrapper\:hidden:is(:where(.group\/block-view-wrapper)[data-view=preview] *){display:none}@media (hover:hover){.peer-hover\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button):hover~*){color:var(--sidebar-accent-foreground)}}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-50:is(:where(.peer):disabled~*){opacity:.5}.peer-has-\[\[role\=menuitem\]\]\/menu-group\:block:is(:where(.peer\/menu-group):has([role=menuitem])~*),.peer-has-\[\[role\=menuitemradio\]\]\/menu-group\:block:is(:where(.peer\/menu-group):has([role=menuitemradio])~*),.peer-has-\[\[role\=option\]\]\/menu-group\:block:is(:where(.peer\/menu-group):has([role=option])~*){display:block}.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button)[data-active=true]~*){color:var(--sidebar-accent-foreground)}.peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.peer\/menu-button)[data-size=default]~*){top:calc(var(--spacing)*1.5)}.peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.peer\/menu-button)[data-size=lg]~*){top:calc(var(--spacing)*2.5)}.peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.peer\/menu-button)[data-size=sm]~*){top:calc(var(--spacing)*1)}.selection\:bg-brand\/25 ::selection{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.selection\:bg-brand\/25 ::selection{background-color:color-mix(in oklab,var(--brand)25%,transparent)}}.selection\:bg-brand\/25::selection{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.selection\:bg-brand\/25::selection{background-color:color-mix(in oklab,var(--brand)25%,transparent)}}.selection\:bg-transparent ::selection{background-color:#0000}.selection\:bg-transparent::selection{background-color:#0000}.file\:inline-flex::file-selector-button{display:inline-flex}.file\:h-7::file-selector-button{height:calc(var(--spacing)*7)}.file\:border-0::file-selector-button{border-style:var(--tw-border-style);border-width:0}.file\:bg-transparent::file-selector-button{background-color:#0000}.file\:text-sm::file-selector-button{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.file\:font-medium::file-selector-button{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.file\:text-foreground::file-selector-button{color:var(--foreground)}.placeholder\:text-muted-foreground::placeholder,.placeholder\:text-muted-foreground\/80::placeholder{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.placeholder\:text-muted-foreground\/80::placeholder{color:color-mix(in oklab,var(--muted-foreground)80%,transparent)}}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:z-10:before{content:var(--tw-content);z-index:10}.before\:mt-\[-4px\]:before{content:var(--tw-content);margin-top:-4px}.before\:ml-\[-50px\]:before{content:var(--tw-content);margin-left:-50px}.before\:box-border:before{content:var(--tw-content);box-sizing:border-box}.before\:inline-flex:before{content:var(--tw-content);display:inline-flex}.before\:size-full:before{content:var(--tw-content);width:100%;height:100%}.before\:h-9:before{content:var(--tw-content);height:calc(var(--spacing)*9)}.before\:w-9:before{content:var(--tw-content);width:calc(var(--spacing)*9)}.before\:cursor-text:before{content:var(--tw-content);cursor:text}.before\:items-center:before{content:var(--tw-content);align-items:center}.before\:justify-center:before{content:var(--tw-content);justify-content:center}.before\:rounded-full:before{content:var(--tw-content);border-radius:3.40282e38px}.before\:border-4:before{content:var(--tw-content);border-style:var(--tw-border-style);border-width:4px}.before\:border-t:before{content:var(--tw-content);border-top-style:var(--tw-border-style);border-top-width:1px}.before\:border-r:before{content:var(--tw-content);border-right-style:var(--tw-border-style);border-right-width:1px}.before\:border-b:before{content:var(--tw-content);border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.before\:border-l:before{content:var(--tw-content);border-left-style:var(--tw-border-style);border-left-width:1px}.before\:border-background:before{content:var(--tw-content);border-color:var(--background)}.before\:border-t-border:before{content:var(--tw-content);border-top-color:var(--border)}.before\:border-r-border:before{content:var(--tw-content);border-right-color:var(--border)}.before\:border-b-border:before{content:var(--tw-content);border-bottom-color:var(--border)}.before\:border-l-border:before{content:var(--tw-content);border-left-color:var(--border)}.before\:bg-brand\/5:before{content:var(--tw-content);background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.before\:bg-brand\/5:before{background-color:color-mix(in oklab,var(--brand)5%,transparent)}}.before\:bg-muted:before{content:var(--tw-content);background-color:var(--muted)}.before\:text-center:before{content:var(--tw-content);text-align:center}.before\:-indent-px:before{content:var(--tw-content);text-indent:-1px}.before\:font-mono:before{content:var(--tw-content);font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.before\:text-base:before{content:var(--tw-content);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.before\:font-medium:before{content:var(--tw-content);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.before\:text-muted-foreground\/80:before{content:var(--tw-content);color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.before\:text-muted-foreground\/80:before{color:color-mix(in oklab,var(--muted-foreground)80%,transparent)}}.before\:opacity-30:before{content:var(--tw-content);opacity:.3}.before\:content-\[\'\'\]:before{content:var(--tw-content);--tw-content:"";content:var(--tw-content)}.before\:content-\[attr\(placeholder\)\]:before{content:var(--tw-content);--tw-content:attr(placeholder);content:var(--tw-content)}.before\:\[content\:counter\(step\)\]:before{content:var(--tw-content);content:counter(step)}.before\:select-none:before{content:var(--tw-content);-webkit-user-select:none;user-select:none}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing)*-2)}.after\:inset-0:after{content:var(--tw-content);inset:calc(var(--spacing)*0)}.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\:inset-y-\[-2px\]:after{content:var(--tw-content);inset-block:-2px}.after\:-top-0\.5:after{content:var(--tw-content);top:calc(var(--spacing)*-.5)}.after\:top-1\/2:after{content:var(--tw-content);top:50%}.after\:right-0:after{content:var(--tw-content);right:calc(var(--spacing)*0)}.after\:-left-1:after{content:var(--tw-content);left:calc(var(--spacing)*-1)}.after\:left-0:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:z-1:after{content:var(--tw-content);z-index:1}.after\:ml-1\.5:after{content:var(--tw-content);margin-left:calc(var(--spacing)*1.5)}.after\:block:after{content:var(--tw-content);display:block}.after\:flex:after{content:var(--tw-content);display:flex}.after\:inline-block:after{content:var(--tw-content);display:inline-block}.after\:h-3:after{content:var(--tw-content);height:calc(var(--spacing)*3)}.after\:h-8:after{content:var(--tw-content);height:calc(var(--spacing)*8)}.after\:h-16:after{content:var(--tw-content);height:calc(var(--spacing)*16)}.after\:h-\[calc\(100\%\)\+4px\]:after{content:var(--tw-content);height:calc(100%)4px}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing)*1)}.after\:w-3:after{content:var(--tw-content);width:calc(var(--spacing)*3)}.after\:w-10:after{content:var(--tw-content);width:calc(var(--spacing)*10)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.after\:w-\[3px\]:after{content:var(--tw-content);width:3px}.after\:w-\[6px\]:after{content:var(--tw-content);width:6px}.after\:w-\[calc\(100\%\+8px\)\]:after{content:var(--tw-content);width:calc(100% + 8px)}.after\:-translate-x-1\/2:after{content:var(--tw-content);--tw-translate-x:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:-translate-x-px:after{content:var(--tw-content);--tw-translate-x:-1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:-translate-y-1\/2:after{content:var(--tw-content);--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.after\:rounded-\[6px\]:after{content:var(--tw-content);border-radius:6px}.after\:rounded-full:after{content:var(--tw-content);border-radius:3.40282e38px}.after\:rounded-lg:after{content:var(--tw-content);border-radius:var(--radius)}.after\:rounded-sm:after{content:var(--tw-content);border-radius:calc(var(--radius) - 4px)}.after\:bg-border:after{content:var(--tw-content);background-color:var(--border)}.after\:bg-brand\/15:after{content:var(--tw-content);background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.after\:bg-brand\/15:after{background-color:color-mix(in oklab,var(--brand)15%,transparent)}}.after\:bg-neutral-500\/10:after{content:var(--tw-content);background-color:#7373731a}@supports (color:color-mix(in lab, red, red)){.after\:bg-neutral-500\/10:after{background-color:color-mix(in oklab,var(--color-neutral-500)10%,transparent)}}.after\:bg-primary:after{content:var(--tw-content);background-color:var(--primary)}.after\:bg-ring:after{content:var(--tw-content);background-color:var(--ring)}.after\:bg-zinc-950:after{content:var(--tw-content);background-color:var(--color-zinc-950)}.after\:pb-\[var\(--aspect-ratio\)\]:after{content:var(--tw-content);padding-bottom:var(--aspect-ratio)}.after\:align-middle:after{content:var(--tw-content);vertical-align:middle}.after\:opacity-0:after{content:var(--tw-content);opacity:0}.after\:transition-all:after{content:var(--tw-content);transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.after\:content-\[\"\"\]:after{content:var(--tw-content);--tw-content:"";content:var(--tw-content)}.after\:content-\[\'_\'\]:after{content:var(--tw-content);--tw-content:" ";content:var(--tw-content)}.after\:content-\[\\\"\\\"\]:after{content:var(--tw-content);--tw-content:\"\";content:var(--tw-content)}@media (hover:hover){.group-hover\:after\:opacity-100:is(:where(.group):hover *):after{content:var(--tw-content);opacity:1}}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.first\:\!mt-0:first-child{margin-top:calc(var(--spacing)*0)!important}.first\:mt-0:first-child{margin-top:calc(var(--spacing)*0)}.first\:rounded-l-md:first-child{border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.last\:rounded-r-md:last-child{border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.empty\:hidden:empty{display:none}.focus-within\:relative:focus-within{position:relative}.focus-within\:z-20:focus-within{z-index:20}.focus-within\:ring-2:focus-within{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-within\:ring-ring:focus-within{--tw-ring-color:var(--ring)}.focus-within\:ring-offset-2:focus-within{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}@media (hover:hover){.hover\:scale-125:hover{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x)var(--tw-scale-y)}.hover\:bg-accent:hover,.hover\:bg-accent\/80:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/80:hover{background-color:color-mix(in oklab,var(--accent)80%,transparent)}}.hover\:bg-black:hover{background-color:var(--color-black)}.hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}.hover\:bg-muted:hover{background-color:var(--muted)}.hover\:bg-muted-foreground\/15:hover{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted-foreground\/15:hover{background-color:color-mix(in oklab,var(--muted-foreground)15%,transparent)}}.hover\:bg-muted\/50:hover{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab,var(--muted)50%,transparent)}}.hover\:bg-primary:hover,.hover\:bg-primary\/10:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/10:hover{background-color:color-mix(in oklab,var(--primary)10%,transparent)}}.hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}.hover\:bg-secondary\/60:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-secondary\/60:hover{background-color:color-mix(in oklab,var(--secondary)60%,transparent)}}.hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab,var(--secondary)80%,transparent)}}.hover\:bg-sidebar-accent:hover{background-color:var(--sidebar-accent)}.hover\:bg-slate-700:hover{background-color:var(--color-slate-700)}.hover\:bg-transparent:hover{background-color:#0000}.hover\:bg-zinc-700:hover{background-color:var(--color-zinc-700)}.hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}.hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.hover\:text-brand\/80:hover{color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.hover\:text-brand\/80:hover{color:color-mix(in oklab,var(--brand)80%,transparent)}}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:text-muted-foreground:hover,.hover\:text-muted-foreground\/80:hover{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.hover\:text-muted-foreground\/80:hover{color:color-mix(in oklab,var(--muted-foreground)80%,transparent)}}.hover\:text-primary:hover{color:var(--primary)}.hover\:text-primary-foreground:hover{color:var(--primary-foreground)}.hover\:text-sidebar-accent-foreground:hover{color:var(--sidebar-accent-foreground)}.hover\:text-slate-50:hover{color:var(--color-slate-50)}.hover\:text-white:hover{color:var(--color-white)}.hover\:text-zinc-50:hover{color:var(--color-zinc-50)}.hover\:no-underline:hover{text-decoration-line:none}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-90:hover{opacity:.9}.hover\:opacity-100:hover{opacity:1}.hover\:shadow-\[0_0_0_1px_hsl\(var\(--sidebar-accent\)\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,hsl(var(--sidebar-accent)));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-lg:hover{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:shadow-md:hover{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a),0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-2:hover{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.hover\:ring-primary:hover{--tw-ring-color:var(--primary)}.hover\:ring-offset-2:hover{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.hover\:group-data-\[collapsible\=offcanvas\]\:bg-sidebar:hover:is(:where(.group)[data-collapsible=offcanvas] *){background-color:var(--sidebar)}.hover\:after\:absolute:hover:after{content:var(--tw-content);position:absolute}.hover\:after\:-bottom-1:hover:after{content:var(--tw-content);bottom:calc(var(--spacing)*-1)}.hover\:after\:bottom-0:hover:after{content:var(--tw-content);bottom:calc(var(--spacing)*0)}.hover\:after\:left-0:hover:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.hover\:after\:h-10:hover:after{content:var(--tw-content);height:calc(var(--spacing)*10)}.hover\:after\:h-\[1\.5px\]:hover:after{content:var(--tw-content);height:1.5px}.hover\:after\:w-\[calc\(100\%-2px\)\]:hover:after{content:var(--tw-content);width:calc(100% - 2px)}.hover\:after\:bg-brand:hover:after{content:var(--tw-content);background-color:var(--brand)}.hover\:after\:bg-primary:hover:after{content:var(--tw-content);background-color:var(--primary)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:var(--sidebar-border)}}.focus\:z-10:focus{z-index:10}.focus\:bg-accent:focus{background-color:var(--accent)}.focus\:bg-primary:focus{background-color:var(--primary)}.focus\:bg-zinc-700:focus{background-color:var(--color-zinc-700)}.focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.focus\:text-primary-foreground:focus{color:var(--primary-foreground)}.focus\:text-white:focus{color:var(--color-white)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-ring:focus{--tw-ring-color:var(--ring)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.focus-visible\:z-10:focus-visible{z-index:10}.focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.focus-visible\:bg-transparent:focus-visible{background-color:#0000}.focus-visible\:bg-zinc-700:focus-visible{background-color:var(--color-zinc-700)}.focus-visible\:text-white:focus-visible{color:var(--color-white)}.focus-visible\:ring-0:focus-visible{--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-visible\:ring-1:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(3px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.focus-visible\:ring-ring:focus-visible,.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab,var(--ring)50%,transparent)}}.focus-visible\:ring-slate-700:focus-visible{--tw-ring-color:var(--color-slate-700)}.focus-visible\:ring-transparent:focus-visible{--tw-ring-color:transparent}.focus-visible\:ring-offset-0:focus-visible{--tw-ring-offset-width:0px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:ring-offset-1:focus-visible{--tw-ring-offset-width:1px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.focus-visible\:outline-hidden:focus-visible{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus-visible\:outline-hidden:focus-visible{outline-offset:2px;outline:2px solid #0000}}.focus-visible\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.focus-visible\:outline-ring:focus-visible{outline-color:var(--ring)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:cursor-grabbing:active{cursor:grabbing}.active\:bg-sidebar-accent:active{background-color:var(--sidebar-accent)}.active\:bg-transparent:active{background-color:#0000}.active\:bg-zinc-700:active{background-color:var(--color-zinc-700)}.active\:text-sidebar-accent-foreground:active{color:var(--sidebar-accent-foreground)}.active\:text-white:active{color:var(--color-white)}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}:where([data-side=left]) .in-data-\[side\=left\]\:cursor-w-resize{cursor:w-resize}:where([data-side=right]) .in-data-\[side\=right\]\:cursor-e-resize{cursor:e-resize}.has-aria-disabled\:border-input:has([aria-disabled=true]){border-color:var(--input)}.has-aria-disabled\:bg-muted:has([aria-disabled=true]){background-color:var(--muted)}.has-data-readonly\:w-fit:has([data-readonly]){width:fit-content}.has-data-readonly\:cursor-default:has([data-readonly]){cursor:default}.has-data-readonly\:border-transparent:has([data-readonly]){border-color:#0000}.has-data-readonly\:focus-within\:\[box-shadow\:none\]:has([data-readonly]):focus-within{box-shadow:none}.has-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.has-data-\[variant\=inset\]\:bg-sidebar:has([data-variant=inset]){background-color:var(--sidebar)}.has-\[\[data-slate-editor\]\:focus\]\:border-brand\/50:has([data-slate-editor]:focus){border-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.has-\[\[data-slate-editor\]\:focus\]\:border-brand\/50:has([data-slate-editor]:focus){border-color:color-mix(in oklab,var(--brand)50%,transparent)}}.has-\[\[data-slate-editor\]\:focus\]\:ring-2:has([data-slate-editor]:focus){--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.has-\[\[data-slate-editor\]\:focus\]\:ring-brand\/30:has([data-slate-editor]:focus){--tw-ring-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.has-\[\[data-slate-editor\]\:focus\]\:ring-brand\/30:has([data-slate-editor]:focus){--tw-ring-color:color-mix(in oklab,var(--brand)30%,transparent)}}.has-\[\[role\=menuitem\]\]\:block:has([role=menuitem]),.has-\[\[role\=menuitemradio\]\]\:block:has([role=menuitemradio]),.has-\[\[role\=option\]\]\:block:has([role=option]){display:block}.has-\[button\]\:flex:has(:is(button)){display:flex}.has-\[\+input\:not\(\:placeholder-shown\)\]\:pointer-events-none:has(+input:not(:placeholder-shown)){pointer-events:none}.has-\[\+input\:not\(\:placeholder-shown\)\]\:top-0:has(+input:not(:placeholder-shown)){top:calc(var(--spacing)*0)}.has-\[\+input\:not\(\:placeholder-shown\)\]\:cursor-default:has(+input:not(:placeholder-shown)){cursor:default}.has-\[\+input\:not\(\:placeholder-shown\)\]\:text-xs:has(+input:not(:placeholder-shown)){font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.has-\[\+input\:not\(\:placeholder-shown\)\]\:font-medium:has(+input:not(:placeholder-shown)){--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.has-\[\+input\:not\(\:placeholder-shown\)\]\:text-foreground:has(+input:not(:placeholder-shown)){color:var(--foreground)}.has-\[\>svg\]\:grid-cols-\[calc\(var\(--spacing\)\*4\)_1fr\]:has(>svg){grid-template-columns:calc(var(--spacing)*4)1fr}.has-\[\>svg\]\:gap-x-3:has(>svg){column-gap:calc(var(--spacing)*3)}.has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--spacing)*2.5)}.has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--spacing)*3)}.has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--spacing)*4)}.aria-checked\:border-\(--color-1\)[aria-checked=true]{border-color:var(--color-1)}.aria-checked\:bg-accent[aria-checked=true]{background-color:var(--accent)}.aria-checked\:text-accent-foreground[aria-checked=true]{color:var(--accent-foreground)}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)20%,transparent)}}.aria-selected\:bg-accent[aria-selected=true]{background-color:var(--accent)}.aria-selected\:bg-primary[aria-selected=true]{background-color:var(--primary)}.aria-selected\:text-accent-foreground[aria-selected=true]{color:var(--accent-foreground)}.aria-selected\:text-muted-foreground[aria-selected=true]{color:var(--muted-foreground)}.aria-selected\:text-primary-foreground[aria-selected=true]{color:var(--primary-foreground)}.aria-selected\:opacity-100[aria-selected=true]{opacity:1}:is(.\*\*\:data-block-hide\:hidden *)[data-block-hide]{display:none}.data-readonly\:w-fit[data-readonly]{width:fit-content}:is(.\*\*\:data-slate-editor\:max-h-\[calc\(100dvh-44px\)\] *)[data-slate-editor]{max-height:calc(100dvh - 44px)}:is(.\*\*\:data-slate-placeholder\:\!top-1\/2 *)[data-slate-placeholder]{top:50%!important}:is(.\*\*\:data-slate-placeholder\:top-\[auto_\!important\] *)[data-slate-placeholder]{top:auto!important}:is(.\*\*\:data-slate-placeholder\:-translate-y-1\/2 *)[data-slate-placeholder]{--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}:is(.\*\*\:data-slate-placeholder\:text-muted-foreground\/80 *)[data-slate-placeholder]{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){:is(.\*\*\:data-slate-placeholder\:text-muted-foreground\/80 *)[data-slate-placeholder]{color:color-mix(in oklab,var(--muted-foreground)80%,transparent)}}:is(.\*\*\:data-slate-placeholder\:opacity-100\! *)[data-slate-placeholder]{opacity:1!important}.data-\[active-item\=true\]\:bg-accent[data-active-item=true]{background-color:var(--accent)}.data-\[active-item\=true\]\:text-accent-foreground[data-active-item=true]{color:var(--accent-foreground)}.data-\[active\=true\]\:bg-muted[data-active=true]{background-color:var(--muted)}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true]{background-color:var(--sidebar-accent)}.data-\[active\=true\]\:bg-zinc-700[data-active=true]{background-color:var(--color-zinc-700)}.data-\[active\=true\]\:font-medium[data-active=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[active\=true\]\:text-foreground[data-active=true]{color:var(--foreground)}.data-\[active\=true\]\:text-sidebar-accent-foreground[data-active=true]{color:var(--sidebar-accent-foreground)}.data-\[active\=true\]\:text-white[data-active=true]{color:var(--color-white)}.data-\[block\=login-01\]\:max-w-full[data-block=login-01]{max-width:100%}.data-\[block\=sidebar-10\]\:right-0[data-block=sidebar-10]{right:calc(var(--spacing)*0)}.data-\[block\=sidebar-10\]\:left-auto[data-block=sidebar-10]{left:auto}.data-\[block\=sidebar-11\]\:-top-1\/3[data-block=sidebar-11]{top:-33.3333%}.data-\[block\=sidebar-13\]\:max-w-full[data-block=sidebar-13]{max-width:100%}.data-\[block\=sidebar-14\]\:right-0[data-block=sidebar-14]{right:calc(var(--spacing)*0)}.data-\[block\=sidebar-14\]\:left-auto[data-block=sidebar-14]{left:auto}.data-\[block\=sidebar-15\]\:max-w-full[data-block=sidebar-15]{max-width:100%}.data-\[depth\=3\]\:pl-4[data-depth="3"]{padding-left:calc(var(--spacing)*4)}.data-\[depth\=3\]\:pl-6[data-depth="3"],.data-\[depth\=4\]\:pl-6[data-depth="4"]{padding-left:calc(var(--spacing)*6)}.data-\[depth\=4\]\:pl-8[data-depth="4"]{padding-left:calc(var(--spacing)*8)}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[error\=true\]\:text-destructive[data-error=true]{color:var(--destructive)}.data-\[highlighted\=true\]\:bg-accent[data-highlighted=true]{background-color:var(--accent)}.data-\[inset\]\:pl-8[data-inset]{padding-left:calc(var(--spacing)*8)}.data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.data-\[panel-group-direction\=vertical\]\:h-px[data-panel-group-direction=vertical]{height:1px}.data-\[panel-group-direction\=vertical\]\:w-full[data-panel-group-direction=vertical]{width:100%}.data-\[panel-group-direction\=vertical\]\:flex-col[data-panel-group-direction=vertical]{flex-direction:column}.data-\[panel-group-direction\=vertical\]\:after\:left-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);left:calc(var(--spacing)*0)}.data-\[panel-group-direction\=vertical\]\:after\:h-1[data-panel-group-direction=vertical]:after{content:var(--tw-content);height:calc(var(--spacing)*1)}.data-\[panel-group-direction\=vertical\]\:after\:w-full[data-panel-group-direction=vertical]:after{content:var(--tw-content);width:100%}.data-\[panel-group-direction\=vertical\]\:after\:translate-x-0[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-x:calc(var(--spacing)*0);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[panel-group-direction\=vertical\]\:after\:-translate-y-1\/2[data-panel-group-direction=vertical]:after{content:var(--tw-content);--tw-translate-y:calc(calc(1/2*100%)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[placeholder\]\:text-muted-foreground[data-placeholder]{color:var(--muted-foreground)}.data-\[selected\=true\]\:bg-accent[data-selected=true]{background-color:var(--accent)}.data-\[selected\=true\]\:bg-primary\/10[data-selected=true]{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.data-\[selected\=true\]\:bg-primary\/10[data-selected=true]{background-color:color-mix(in oklab,var(--primary)10%,transparent)}}.data-\[selected\=true\]\:text-accent-foreground[data-selected=true]{color:var(--accent-foreground)}.data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--spacing)*1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing)*-1);translate:var(--tw-translate-x)var(--tw-translate-y)}.data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.data-\[size\=default\]\:h-9[data-size=default]{height:calc(var(--spacing)*9)}.data-\[size\=sm\]\:h-8[data-size=sm]{height:calc(var(--spacing)*8)}:is(.\*\:data-\[slot\=alert\]\:first\:mt-0>*)[data-slot=alert]:first-child{margin-top:calc(var(--spacing)*0)}:is(.\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){:is(.\*\:data-\[slot\=alert-description\]\:text-destructive\/90>*)[data-slot=alert-description]{color:color-mix(in oklab,var(--destructive)90%,transparent)}}:is(.\*\:data-\[slot\=block-selection\]\:left-2>*)[data-slot=block-selection]{left:calc(var(--spacing)*2)}:is(.\*\*\:data-\[slot\=command-input-wrapper\]\:h-12 *)[data-slot=command-input-wrapper]{height:calc(var(--spacing)*12)}:is(.\*\:data-\[slot\=select-value\]\:line-clamp-1>*)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.\*\:data-\[slot\=select-value\]\:flex>*)[data-slot=select-value]{display:flex}:is(.\*\:data-\[slot\=select-value\]\:items-center>*)[data-slot=select-value]{align-items:center}:is(.\*\:data-\[slot\=select-value\]\:gap-2>*)[data-slot=select-value]{gap:calc(var(--spacing)*2)}:is(.\*\*\:data-\[slot\=separator\]\:\!h-4 *)[data-slot=separator]{height:calc(var(--spacing)*4)!important}.data-\[state\=active\]\:flex[data-state=active]{display:flex}.data-\[state\=active\]\:border-b-primary[data-state=active]{border-bottom-color:var(--primary)}.data-\[state\=active\]\:border-b-zinc-50[data-state=active]{border-bottom-color:var(--color-zinc-50)}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--background)}.data-\[state\=active\]\:bg-transparent[data-state=active]{background-color:#0000}.data-\[state\=active\]\:text-foreground[data-state=active]{color:var(--foreground)}.data-\[state\=active\]\:text-zinc-50[data-state=active]{color:var(--color-zinc-50)}.data-\[state\=active\]\:shadow-none[data-state=active]{--tw-shadow:0 0 #0000;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:var(--primary)}.data-\[state\=checked\]\:bg-accent[data-state=checked]{background-color:var(--accent)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--primary)}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:var(--primary-foreground)}.data-\[state\=closed\]\:shrink-0[data-state=closed]{flex-shrink:0}.data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:accordion-up var(--tw-animation-duration,var(--tw-duration,.2s))ease-out}.data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=closed\]\:opacity-0[data-state=closed]{opacity:0}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x:-100%}.data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x:100%}.data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y:-100%}.data-\[state\=on\]\:bg-accent[data-state=on]{background-color:var(--accent)}.data-\[state\=on\]\:text-accent-foreground[data-state=on]{color:var(--accent-foreground)}.data-\[state\=open\]\:grow[data-state=open]{flex-grow:1}.data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:accordion-down var(--tw-animation-duration,var(--tw-duration,.2s))ease-out}.data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.data-\[state\=open\]\:animate-none[data-state=open]{animation:none}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:var(--accent)}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:var(--secondary)}.data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:var(--accent-foreground)}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:var(--muted-foreground)}.data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x:-100%}.data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x:100%}.data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y:-100%}@media (hover:hover){.data-\[state\=open\]\:hover\:bg-sidebar-accent[data-state=open]:hover{background-color:var(--sidebar-accent)}.data-\[state\=open\]\:hover\:bg-zinc-700[data-state=open]:hover{background-color:var(--color-zinc-700)}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground[data-state=open]:hover{color:var(--sidebar-accent-foreground)}.data-\[state\=open\]\:hover\:text-white[data-state=open]:hover{color:var(--color-white)}}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--muted)}.data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{color:var(--destructive)}.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--destructive)10%,transparent)}}.data-\[variant\=destructive\]\:focus\:text-destructive[data-variant=destructive]:focus{color:var(--destructive)}.data-\[variant\=outline\]\:border-l-0[data-variant=outline]{border-left-style:var(--tw-border-style);border-left-width:0}.data-\[variant\=outline\]\:shadow-xs[data-variant=outline]{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.data-\[variant\=outline\]\:first\:border-l[data-variant=outline]:first-child{border-left-style:var(--tw-border-style);border-left-width:1px}.data-\[vaul-drawer-direction\=bottom\]\:inset-x-0[data-vaul-drawer-direction=bottom]{inset-inline:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=bottom\]\:bottom-0[data-vaul-drawer-direction=bottom]{bottom:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=bottom\]\:mt-24[data-vaul-drawer-direction=bottom]{margin-top:calc(var(--spacing)*24)}.data-\[vaul-drawer-direction\=bottom\]\:max-h-\[80vh\][data-vaul-drawer-direction=bottom]{max-height:80vh}.data-\[vaul-drawer-direction\=bottom\]\:rounded-t-lg[data-vaul-drawer-direction=bottom]{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.data-\[vaul-drawer-direction\=bottom\]\:border-t[data-vaul-drawer-direction=bottom]{border-top-style:var(--tw-border-style);border-top-width:1px}.data-\[vaul-drawer-direction\=left\]\:inset-y-0[data-vaul-drawer-direction=left]{inset-block:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=left\]\:left-0[data-vaul-drawer-direction=left]{left:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=left\]\:w-3\/4[data-vaul-drawer-direction=left]{width:75%}.data-\[vaul-drawer-direction\=left\]\:border-r[data-vaul-drawer-direction=left]{border-right-style:var(--tw-border-style);border-right-width:1px}.data-\[vaul-drawer-direction\=right\]\:inset-y-0[data-vaul-drawer-direction=right]{inset-block:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=right\]\:right-0[data-vaul-drawer-direction=right]{right:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=right\]\:w-3\/4[data-vaul-drawer-direction=right]{width:75%}.data-\[vaul-drawer-direction\=right\]\:border-l[data-vaul-drawer-direction=right]{border-left-style:var(--tw-border-style);border-left-width:1px}.data-\[vaul-drawer-direction\=top\]\:inset-x-0[data-vaul-drawer-direction=top]{inset-inline:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=top\]\:top-0[data-vaul-drawer-direction=top]{top:calc(var(--spacing)*0)}.data-\[vaul-drawer-direction\=top\]\:mb-24[data-vaul-drawer-direction=top]{margin-bottom:calc(var(--spacing)*24)}.data-\[vaul-drawer-direction\=top\]\:max-h-\[80vh\][data-vaul-drawer-direction=top]{max-height:80vh}.data-\[vaul-drawer-direction\=top\]\:rounded-b-lg[data-vaul-drawer-direction=top]{border-bottom-right-radius:var(--radius);border-bottom-left-radius:var(--radius)}.data-\[vaul-drawer-direction\=top\]\:border-b[data-vaul-drawer-direction=top]{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}:is(.\*\:nth-\[2\]\:flex-1>*):nth-child(2){flex:1}:is(.\*\:nth-\[2\]\:text-muted-foreground>*):nth-child(2){color:var(--muted-foreground)}:is(.\*\:nth-\[2\]\:line-through>*):nth-child(2){text-decoration-line:line-through}:is(.\*\:nth-\[2\]\:focus\:outline-none>*):nth-child(2):focus{--tw-outline-style:none;outline-style:none}@supports (backdrop-blur:var(--tw)){.supports-backdrop-blur\:bg-background\/60{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.supports-backdrop-blur\:bg-background\/60{background-color:color-mix(in oklab,var(--background)60%,transparent)}}}@supports ((-webkit-backdrop-filter:var(--tw)) or (backdrop-filter:var(--tw))){.supports-backdrop-filter\:bg-background\/60{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.supports-backdrop-filter\:bg-background\/60{background-color:color-mix(in oklab,var(--background)60%,transparent)}}}@media not all and (min-width:48rem){.max-md\:hidden{display:none}}@media not all and (min-width:40rem){.max-sm\:hidden{display:none}.max-sm\:w-full{width:100%}.max-sm\:flex-auto\!{flex:auto!important}}@media (min-width:40rem){.sm\:block{display:block}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:w-\[1280px\]{width:1280px}.sm\:max-w-3xl{max-width:var(--container-3xl)}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:flex-row{flex-direction:row}.sm\:justify-end{justify-content:flex-end}.sm\:p-10{padding:calc(var(--spacing)*10)}.sm\:px-24{padding-inline:calc(var(--spacing)*24)}.sm\:px-\[max\(64px\,calc\(50\%-350px\)\)\]{padding-inline:max(64px,50% - 350px)}.sm\:pr-12{padding-right:calc(var(--spacing)*12)}.sm\:text-left{text-align:left}.sm\:text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.sm\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.sm\:opacity-0{opacity:0}.data-\[vaul-drawer-direction\=left\]\:sm\:max-w-sm[data-vaul-drawer-direction=left],.data-\[vaul-drawer-direction\=right\]\:sm\:max-w-sm[data-vaul-drawer-direction=right]{max-width:var(--container-sm)}}@media (min-width:48rem){.md\:sticky{position:sticky}.md\:my-8{margin-block:calc(var(--spacing)*8)}.md\:mt-24{margin-top:calc(var(--spacing)*24)}.md\:block{display:block}.md\:flex{display:flex}.md\:grid{display:grid}.md\:hidden{display:none}.md\:aspect-auto{aspect-ratio:auto}.md\:size-7{width:calc(var(--spacing)*7);height:calc(var(--spacing)*7)}.md\:h-7{height:calc(var(--spacing)*7)}.md\:h-24{height:calc(var(--spacing)*24)}.md\:w-40{width:calc(var(--spacing)*40)}.md\:w-auto{width:auto}.md\:flex-1{flex:1}.md\:flex-none{flex:none}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-\[var\(--sidebar-width\)_minmax\(0\,1fr\)\]{grid-template-columns:var(--sidebar-width)minmax(0,1fr)}.md\:flex-row{flex-direction:row}.md\:flex-row-reverse{flex-direction:row-reverse}.md\:items-start{align-items:flex-start}.md\:justify-end{justify-content:flex-end}.md\:gap-4{gap:calc(var(--spacing)*4)}.md\:gap-16{gap:calc(var(--spacing)*16)}.md\:gap-24{gap:calc(var(--spacing)*24)}:where(.md\: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)))}.md\:px-2{padding-inline:calc(var(--spacing)*2)}.md\:px-8{padding-inline:calc(var(--spacing)*8)}.md\:py-0{padding-block:calc(var(--spacing)*0)}.md\:py-10{padding-block:calc(var(--spacing)*10)}.md\:pt-0{padding-top:calc(var(--spacing)*0)}.md\:pr-\[14px\]{padding-right:14px}.md\:text-left{text-align:left}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.md\:opacity-0{opacity:0}.md\:\[--sidebar-width\:240px\]{--sidebar-width:240px}.md\:\[--top-spacing\:calc\(var\(--spacing\)\*4\)\]{--top-spacing:calc(var(--spacing)*4)}.md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.peer)[data-variant=inset]~*){margin:calc(var(--spacing)*2)}.md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing)*0)}.md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.peer)[data-variant=inset]~*){border-radius:calc(var(--radius) + 4px)}.md\:peer-data-\[variant\=inset\]\:shadow-sm:is(:where(.peer)[data-variant=inset]~*){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a),0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-2:is(:where(.peer)[data-variant=inset]~*):is(:where(.peer)[data-state=collapsed]~*){margin-left:calc(var(--spacing)*2)}.md\:after\:hidden:after{content:var(--tw-content);display:none}}@media (min-width:64rem){.lg\:sticky{position:sticky}.lg\:top-20{top:calc(var(--spacing)*20)}.lg\:bottom-auto{bottom:auto}.lg\:mt-36{margin-top:calc(var(--spacing)*36)}.lg\:block{display:block}.lg\:flex{display:flex}.lg\:hidden{display:none}.lg\:inline{display:inline}.lg\:inline-flex{display:inline-flex}.lg\:w-56{width:calc(var(--spacing)*56)}.lg\:w-auto{width:auto}.lg\:w-full{width:100%}.lg\:flex-col{flex-direction:column}.lg\:justify-start{justify-content:flex-start}.lg\:gap-1{gap:calc(var(--spacing)*1)}.lg\:gap-6{gap:calc(var(--spacing)*6)}.lg\:gap-48{gap:calc(var(--spacing)*48)}.lg\:px-0{padding-inline:calc(var(--spacing)*0)}.lg\:py-8{padding-block:calc(var(--spacing)*8)}.lg\:py-12{padding-block:calc(var(--spacing)*12)}.lg\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.lg\:leading-\[1\.1\]{--tw-leading:1.1;line-height:1.1}}@media (min-width:80rem){.xl\:block{display:block}.xl\:flex{display:flex}.xl\:hidden{display:none}.xl\:inline{display:inline}.xl\:w-64{width:calc(var(--spacing)*64)}.xl\:w-auto{width:auto}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:gap-10{gap:calc(var(--spacing)*10)}.xl\:\[--footer-height\:calc\(var\(--spacing\)\*24\)\]{--footer-height:calc(var(--spacing)*24)}}@media (min-width:96rem){.\32 xl\:block{display:block}.\32 xl\:hidden{display:none}}@container not (min-width:32rem){.\@max-lg\:col-span-full{grid-column:1/-1}}.dark\:block:is(.dark *){display:block}.dark\:hidden:is(.dark *){display:none}.dark\:border-border:is(.dark *){border-color:var(--border)}.dark\:border-input:is(.dark *){border-color:var(--input)}.dark\:bg-cyan-950:is(.dark *){background-color:var(--color-cyan-950)}.dark\:bg-destructive\/60:is(.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-destructive\/60:is(.dark *){background-color:color-mix(in oklab,var(--destructive)60%,transparent)}}.dark\:bg-gray-800:is(.dark *){background-color:var(--color-gray-800)}.dark\:bg-green-950:is(.dark *){background-color:var(--color-green-950)}.dark\:bg-input\/30:is(.dark *){background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\:bg-input\/30:is(.dark *){background-color:color-mix(in oklab,var(--input)30%,transparent)}}.dark\:bg-muted:is(.dark *){background-color:var(--muted)}.dark\:bg-neutral-900:is(.dark *){background-color:var(--color-neutral-900)}.dark\:bg-orange-950:is(.dark *){background-color:var(--color-orange-950)}.dark\:bg-pink-950:is(.dark *){background-color:var(--color-pink-950)}.dark\:bg-purple-900:is(.dark *){background-color:var(--color-purple-900)}.dark\:bg-purple-950:is(.dark *){background-color:var(--color-purple-950)}.dark\:bg-red-900:is(.dark *){background-color:var(--color-red-900)}.dark\:bg-red-950:is(.dark *){background-color:var(--color-red-950)}.dark\:bg-white:is(.dark *){background-color:var(--color-white)}.dark\:bg-zinc-800:is(.dark *){background-color:var(--color-zinc-800)}.dark\:bg-zinc-900:is(.dark *){background-color:var(--color-zinc-900)}.dark\:bg-zinc-900\!:is(.dark *){background-color:var(--color-zinc-900)!important}.dark\:stroke-slate-600:is(.dark *){stroke:var(--color-slate-600)}.dark\:text-background:is(.dark *){color:var(--background)}.dark\:text-black:is(.dark *){color:var(--color-black)}.dark\:text-cyan-300:is(.dark *){color:var(--color-cyan-300)}.dark\:text-foreground:is(.dark *){color:var(--foreground)}.dark\:text-gray-300:is(.dark *){color:var(--color-gray-300)}.dark\:text-green-300:is(.dark *){color:var(--color-green-300)}.dark\:text-muted-foreground:is(.dark *){color:var(--muted-foreground)}.dark\:text-neutral-300:is(.dark *){color:var(--color-neutral-300)}.dark\:text-neutral-400:is(.dark *){color:var(--color-neutral-400)}.dark\:text-orange-300:is(.dark *){color:var(--color-orange-300)}.dark\:text-pink-300:is(.dark *){color:var(--color-pink-300)}.dark\:text-purple-300:is(.dark *){color:var(--color-purple-300)}.dark\:text-purple-400:is(.dark *){color:var(--color-purple-400)}.dark\:text-red-300:is(.dark *){color:var(--color-red-300)}.dark\:text-red-400:is(.dark *){color:var(--color-red-400)}.dark\:text-white:is(.dark *){color:var(--color-white)}.dark\:shadow-\[rgba\(255\,_255\,_255\,_0\.1\)_0px_0\.5px_0px_0px_inset\,_rgb\(26\,_29\,_30\)_0px_1px_5px_0px_inset\,_rgb\(76\,_81\,_85\)_0px_0px_0px_0\.5px\,_rgb\(76\,_81\,_85\)_0px_2px_1px_-1px\,_rgb\(76\,_81\,_85\)_0px_1px_0px_0px\]:is(.dark *){--tw-shadow-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.dark\:shadow-\[rgba\(255\,_255\,_255\,_0\.1\)_0px_0\.5px_0px_0px_inset\,_rgb\(26\,_29\,_30\)_0px_1px_5px_0px_inset\,_rgb\(76\,_81\,_85\)_0px_0px_0px_0\.5px\,_rgb\(76\,_81\,_85\)_0px_2px_1px_-1px\,_rgb\(76\,_81\,_85\)_0px_1px_0px_0px\]:is(.dark *){--tw-shadow-color:color-mix(in oklab,#ffffff1a 0px .5px 0px 0px inset,#1a1d1e 0px 1px 5px 0px inset,#4c5155 0px 0px 0px .5px,#4c5155 0px 2px 1px -1px,#4c5155 0px 1px 0px 0px var(--tw-shadow-alpha),transparent)}}.dark\:ring-white\/5:is(.dark *){--tw-ring-color:#ffffff0d}@supports (color:color-mix(in lab, red, red)){.dark\:ring-white\/5:is(.dark *){--tw-ring-color:color-mix(in oklab,var(--color-white)5%,transparent)}}@media (hover:hover){.dark\:hover\:bg-accent\/50:is(.dark *):hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-accent\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--accent)50%,transparent)}}.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-input\/50:is(.dark *):hover{background-color:color-mix(in oklab,var(--input)50%,transparent)}}.dark\:hover\:bg-transparent:is(.dark *):hover{background-color:#0000}}.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:focus-visible\:ring-destructive\/40:is(.dark *):focus-visible{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:aria-invalid\:ring-destructive\/40:is(.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab,var(--destructive)40%,transparent)}}.dark\:data-\[state\=active\]\:border-input:is(.dark *)[data-state=active]{border-color:var(--input)}.dark\:data-\[state\=active\]\:bg-input\/30:is(.dark *)[data-state=active]{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.dark\:data-\[state\=active\]\:bg-input\/30:is(.dark *)[data-state=active]{background-color:color-mix(in oklab,var(--input)30%,transparent)}}.dark\:data-\[state\=active\]\:text-foreground:is(.dark *)[data-state=active]{color:var(--foreground)}.dark\:data-\[state\=checked\]\:bg-primary:is(.dark *)[data-state=checked]{background-color:var(--primary)}.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is(.dark *)[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:is(.dark *)[data-variant=destructive]:focus{background-color:color-mix(in oklab,var(--destructive)20%,transparent)}}@media (min-width:48rem){.md\:dark\:hidden:is(.dark *){display:none}}@media print{.print\:hidden{display:none}.print\:break-inside-avoid{break-inside:avoid}.print\:placeholder\:text-transparent::placeholder{color:#0000}}@media (min-width:1600px){.\33 xl\:fixed\:container:is(.layout-fixed *){width:100%}@media (min-width:1600px){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:1600px}}@media (min-width:2000px){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:2000px}}@media (min-width:40rem){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:40rem}}@media (min-width:48rem){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:48rem}}@media (min-width:64rem){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:64rem}}@media (min-width:80rem){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:80rem}}@media (min-width:96rem){.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:96rem}}.\33 xl\:fixed\:container:is(.layout-fixed *){max-width:calc(var(--breakpoint-xl) + 2rem);padding-inline:calc(var(--spacing)*4);margin-inline:auto}@media (min-width:80rem){.\33 xl\:fixed\:container:is(.layout-fixed *){padding-inline:calc(var(--spacing)*6)}}.\33 xl\:fixed\:px-0:is(.layout-fixed *){padding-inline:calc(var(--spacing)*0)}.\33 xl\:fixed\:px-3:is(.layout-fixed *){padding-inline:calc(var(--spacing)*3)}}.\[\&_\*\:\:selection\]\:\!bg-transparent ::selection{background-color:#0000!important}.\[\&_\*\:\:selection\]\:bg-none ::selection{background-image:none}.\[\&_\.katex-display\]\:my-0 .katex-display{margin-block:calc(var(--spacing)*0)}.\[\&_\.katex-display\]\:my-0\! .katex-display{margin-block:calc(var(--spacing)*0)!important}.\[\&_\.line\:before\]\:sticky .line:before{position:sticky}.\[\&_\.line\:before\]\:left-2 .line:before{left:calc(var(--spacing)*2)}.\[\&_\.line\:before\]\:z-10 .line:before{z-index:10}.\[\&_\.line\:before\]\:-translate-y-px .line:before{--tw-translate-y:-1px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&_\.line\:before\]\:pr-1 .line:before{padding-right:calc(var(--spacing)*1)}.\[\&_\.react-tweet-theme\]\:my-0 .react-tweet-theme{margin-block:calc(var(--spacing)*0)}.\[\&_\.react-tweet-theme\]\:ring-2 .react-tweet-theme{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(2px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.\[\&_\.react-tweet-theme\]\:ring-ring .react-tweet-theme{--tw-ring-color:var(--ring)}.\[\&_\.react-tweet-theme\]\:ring-offset-2 .react-tweet-theme{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,)0 0 0 var(--tw-ring-offset-width)var(--tw-ring-offset-color)}.\[\&_\.slate-selected\]\:\!bg-primary\/20 .slate-selected{background-color:var(--primary)!important}@supports (color:color-mix(in lab, red, red)){.\[\&_\.slate-selected\]\:\!bg-primary\/20 .slate-selected{background-color:color-mix(in oklab,var(--primary)20%,transparent)!important}}.\[\&_\.slate-selection-area\]\:z-50 .slate-selection-area{z-index:50}.\[\&_\.slate-selection-area\]\:border .slate-selection-area{border-style:var(--tw-border-style);border-width:1px}.\[\&_\.slate-selection-area\]\:border-brand\/25 .slate-selection-area{border-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.\[\&_\.slate-selection-area\]\:border-brand\/25 .slate-selection-area{border-color:color-mix(in oklab,var(--brand)25%,transparent)}}.\[\&_\.slate-selection-area\]\:border-primary .slate-selection-area{border-color:var(--primary)}.\[\&_\.slate-selection-area\]\:bg-brand\/15 .slate-selection-area{background-color:var(--brand)}@supports (color:color-mix(in lab, red, red)){.\[\&_\.slate-selection-area\]\:bg-brand\/15 .slate-selection-area{background-color:color-mix(in oklab,var(--brand)15%,transparent)}}.\[\&_\.slate-selection-area\]\:bg-primary\/10 .slate-selection-area{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.\[\&_\.slate-selection-area\]\:bg-primary\/10 .slate-selection-area{background-color:color-mix(in oklab,var(--primary)10%,transparent)}}.\[\&_\>_\.lty-playbtn\]\:absolute>.lty-playbtn{position:absolute}.\[\&_\>_\.lty-playbtn\]\:top-1\/2>.lty-playbtn{top:50%}.\[\&_\>_\.lty-playbtn\]\:left-1\/2>.lty-playbtn{left:50%}.\[\&_\>_\.lty-playbtn\]\:z-1>.lty-playbtn{z-index:1}.\[\&_\>_\.lty-playbtn\]\:h-\[46px\]>.lty-playbtn{height:46px}.\[\&_\>_\.lty-playbtn\]\:w-\[70px\]>.lty-playbtn{width:70px}.\[\&_\>_\.lty-playbtn\]\:\[transform\:translate3d\(-50\%\,-50\%\,0\)\]>.lty-playbtn{transform:translate(-50%,-50%)}.\[\&_\>_\.lty-playbtn\]\:rounded-\[14\%\]>.lty-playbtn{border-radius:14%}.\[\&_\>_\.lty-playbtn\]\:bg-\[\#212121\]>.lty-playbtn{background-color:#212121}.\[\&_\>_\.lty-playbtn\]\:opacity-80>.lty-playbtn{opacity:.8}.\[\&_\>_\.lty-playbtn\]\:\[transition\:all_0\.2s_cubic-bezier\(0\,_0\,_0\.2\,_1\)\]>.lty-playbtn{transition:all .2s cubic-bezier(0,0,.2,1)}.\[\&_\>_\.lty-playbtn\]\:before\:absolute>.lty-playbtn:before{content:var(--tw-content);position:absolute}.\[\&_\>_\.lty-playbtn\]\:before\:top-1\/2>.lty-playbtn:before{content:var(--tw-content);top:50%}.\[\&_\>_\.lty-playbtn\]\:before\:left-1\/2>.lty-playbtn:before{content:var(--tw-content);left:50%}.\[\&_\>_\.lty-playbtn\]\:before\:\[transform\:translate3d\(-50\%\,-50\%\,0\)\]>.lty-playbtn:before{content:var(--tw-content);transform:translate(-50%,-50%)}.\[\&_\>_\.lty-playbtn\]\:before\:border-y-\[11px\]>.lty-playbtn:before{content:var(--tw-content);border-block-style:var(--tw-border-style);border-block-width:11px}.\[\&_\>_\.lty-playbtn\]\:before\:border-r-0>.lty-playbtn:before{content:var(--tw-content);border-right-style:var(--tw-border-style);border-right-width:0}.\[\&_\>_\.lty-playbtn\]\:before\:border-l-\[19px\]>.lty-playbtn:before{content:var(--tw-content);border-left-style:var(--tw-border-style);border-left-width:19px}.\[\&_\>_\.lty-playbtn\]\:before\:border-\[transparent_transparent_transparent_\#fff\]>.lty-playbtn:before{content:var(--tw-content);border-color:#0000 #0000 #0000 #fff}.\[\&_\>_\.lty-playbtn\]\:before\:content-\[\"\"\]>.lty-playbtn:before{content:var(--tw-content);--tw-content:"";content:var(--tw-content)}.\[\&_\>_\.lty-playbtn\]\:before\:content-\[\\\"\\\"\]>.lty-playbtn:before{content:var(--tw-content);--tw-content:\"\";content:var(--tw-content)}.\[\&_\>_iframe\]\:absolute>iframe{position:absolute}.\[\&_\>_iframe\]\:top-0>iframe{top:calc(var(--spacing)*0)}.\[\&_\>_iframe\]\:left-0>iframe{left:calc(var(--spacing)*0)}.\[\&_\>_iframe\]\:size-full>iframe{width:100%;height:100%}.\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-block:calc(var(--spacing)*1.5)}.\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:var(--muted-foreground)}.\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:calc(var(--spacing)*0)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:calc(var(--spacing)*5)}.\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:calc(var(--spacing)*12)}.\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-inline:calc(var(--spacing)*2)}.\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-block:calc(var(--spacing)*3)}.\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:calc(var(--spacing)*5)}.\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:calc(var(--spacing)*5)}.\[\&_button\]\:hidden button{display:none}.\[\&_code\]\:text-sm code{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.\[\&_h3\.font-heading\]\:text-base h3.font-heading{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.\[\&_h3\.font-heading\]\:font-semibold h3.font-heading{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.\[\&_p\]\:leading-relaxed p{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_pre\]\:my-0 pre{margin-block:calc(var(--spacing)*0)}.\[\&_pre\]\:h-\(--height\) pre{height:var(--height)}.\[\&_pre\]\:max-h-\[350px\] pre{max-height:350px}.\[\&_pre\]\:max-h-\[650px\] pre{max-height:650px}.\[\&_pre\]\:overflow-auto pre{overflow:auto}.\[\&_pre\]\:overflow-hidden pre{overflow:hidden}.\[\&_pre\]\:bg-transparent\! pre{background-color:#0000!important}.\[\&_pre\]\:pt-4 pre{padding-top:calc(var(--spacing)*4)}.\[\&_pre\]\:pb-20 pre{padding-bottom:calc(var(--spacing)*20)}.\[\&_pre\]\:pb-\[100px\] pre{padding-bottom:100px}.\[\&_pre\]\:font-mono pre{font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.\[\&_pre\]\:text-sm pre{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.\[\&_pre\]\:leading-relaxed pre{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.\[\&_strong\]\:font-bold strong{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:\!size-3 svg{width:calc(var(--spacing)*3)!important;height:calc(var(--spacing)*3)!important}.\[\&_svg\]\:size-3\.5 svg{width:calc(var(--spacing)*3.5);height:calc(var(--spacing)*3.5)}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\]\:size-6 svg{width:calc(var(--spacing)*6);height:calc(var(--spacing)*6)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\]\:text-muted-foreground svg{color:var(--muted-foreground)}@media (hover:hover){.\[\&_svg\]\:hover\:text-muted-foreground svg:hover{color:var(--muted-foreground)}}.\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:var(--muted-foreground)}.\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.\[\&_ul\]\:list-\[circle\] ul{list-style-type:circle}.\[\&_ul_ul\]\:list-\[square\] ul ul{list-style-type:square}.\[\&\.lyt-activated\]\:cursor-\[unset\].lyt-activated{cursor:unset}.\[\&\.lyt-activated\]\:before\:pointer-events-none.lyt-activated:before{content:var(--tw-content);pointer-events:none}.\[\&\.lyt-activated\]\:before\:absolute.lyt-activated:before{content:var(--tw-content);position:absolute}.\[\&\.lyt-activated\]\:before\:top-0.lyt-activated:before{content:var(--tw-content);top:calc(var(--spacing)*0)}.\[\&\.lyt-activated\]\:before\:h-\[60px\].lyt-activated:before{content:var(--tw-content);height:60px}.\[\&\.lyt-activated\]\:before\:w-full.lyt-activated:before{content:var(--tw-content);width:100%}.\[\&\.lyt-activated\]\:before\:bg-\[url\(data\:image\/png\;base64\,iVBORw0KGgoAAAANSUhEUgAAAAEAAADGCAYAAAAT\+OqFAAAAdklEQVQoz42QQQ7AIAgEF\/T\/D\+kbq\/RWAlnQyyazA4aoAB4FsBSA\/bFjuF1EOL7VbrIrBuusmrt4ZZORfb6ehbWdnRHEIiITaEUKa5EJqUakRSaEYBJSCY2dEstQY7AuxahwXFrvZmWl2rh4JZ07z9dLtesfNj5q0FU3A5ObbwAAAABJRU5ErkJggg\=\=\)\].lyt-activated:before{content:var(--tw-content);background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAADGCAYAAAAT+OqFAAAAdklEQVQoz42QQQ7AIAgEF/T/D+kbq/RWAlnQyyazA4aoAB4FsBSA/bFjuF1EOL7VbrIrBuusmrt4ZZORfb6ehbWdnRHEIiITaEUKa5EJqUakRSaEYBJSCY2dEstQY7AuxahwXFrvZmWl2rh4JZ07z9dLtesfNj5q0FU3A5ObbwAAAABJRU5ErkJggg==)}.\[\&\.lyt-activated\]\:before\:bg-top.lyt-activated:before{content:var(--tw-content);background-position:top}.\[\&\.lyt-activated\]\:before\:bg-repeat-x.lyt-activated:before{content:var(--tw-content);background-repeat:repeat-x}.\[\&\.lyt-activated\]\:before\:pb-\[50px\].lyt-activated:before{content:var(--tw-content);padding-bottom:50px}.\[\&\.lyt-activated\]\:before\:opacity-0.lyt-activated:before{content:var(--tw-content);opacity:0}.\[\&\.lyt-activated\]\:before\:\[transition\:all_0\.2s_cubic-bezier\(0\,_0\,_0\.2\,_1\)\].lyt-activated:before{content:var(--tw-content);transition:all .2s cubic-bezier(0,0,.2,1)}.\[\&\.lyt-activated_\>_\.lty-playbtn\]\:pointer-events-none.lyt-activated>.lty-playbtn{pointer-events:none}.\[\&\.lyt-activated_\>_\.lty-playbtn\]\:opacity-0\!.lyt-activated>.lty-playbtn{opacity:0!important}.\[\&\:\:-webkit-scrollbar\]\:w-4::-webkit-scrollbar{width:calc(var(--spacing)*4)}.\[\&\:\:-webkit-scrollbar-button\]\:hidden::-webkit-scrollbar-button{display:none}.\[\&\:\:-webkit-scrollbar-button\]\:size-0::-webkit-scrollbar-button{width:calc(var(--spacing)*0);height:calc(var(--spacing)*0)}.\[\&\:\:-webkit-scrollbar-thumb\]\:min-h-11::-webkit-scrollbar-thumb{min-height:calc(var(--spacing)*11)}.\[\&\:\:-webkit-scrollbar-thumb\]\:rounded-full::-webkit-scrollbar-thumb{border-radius:3.40282e38px}.\[\&\:\:-webkit-scrollbar-thumb\]\:border-4::-webkit-scrollbar-thumb{border-style:var(--tw-border-style);border-width:4px}.\[\&\:\:-webkit-scrollbar-thumb\]\:border-solid::-webkit-scrollbar-thumb{--tw-border-style:solid;border-style:solid}.\[\&\:\:-webkit-scrollbar-thumb\]\:border-popover::-webkit-scrollbar-thumb{border-color:var(--popover)}.\[\&\:\:-webkit-scrollbar-thumb\]\:bg-muted::-webkit-scrollbar-thumb{background-color:var(--muted)}.\[\&\:\:-webkit-scrollbar-thumb\]\:bg-clip-padding::-webkit-scrollbar-thumb{background-clip:padding-box}@media (hover:hover){.\[\&\:\:-webkit-scrollbar-thumb\]\:hover\:bg-muted-foreground\/25::-webkit-scrollbar-thumb:hover{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.\[\&\:\:-webkit-scrollbar-thumb\]\:hover\:bg-muted-foreground\/25::-webkit-scrollbar-thumb:hover{background-color:color-mix(in oklab,var(--muted-foreground)25%,transparent)}}}.focus\:\[\&\:\:placeholder\]\:opacity-0:focus::placeholder{opacity:0}.\[\&\:has\(\>\.day-range-end\)\]\:rounded-r-md:has(>.day-range-end){border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\>\.day-range-start\)\]\:rounded-l-md:has(>.day-range-start){border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[aria-selected\]\)\]\:rounded-md:has([aria-selected]){border-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[aria-selected\]\)\]\:bg-accent:has([aria-selected]){background-color:var(--accent)}.first\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-l-md:first-child:has([aria-selected]){border-top-left-radius:calc(var(--radius) - 2px);border-bottom-left-radius:calc(var(--radius) - 2px)}.last\:\[\&\:has\(\[aria-selected\]\)\]\:rounded-r-md:last-child:has([aria-selected]),.\[\&\:has\(\[aria-selected\]\.day-range-end\)\]\:rounded-r-md:has([aria-selected].day-range-end){border-top-right-radius:calc(var(--radius) - 2px);border-bottom-right-radius:calc(var(--radius) - 2px)}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--spacing)*0)}.\[\&\:has\(\[role\=option\]\)\]\:block:has([role=option]){display:block}.\[\&\:hover_\>_\.lty-playbtn\]\:bg-\[red\]:hover>.lty-playbtn{background-color:red}.\[\&\:hover_\>_\.lty-playbtn\]\:opacity-100:hover>.lty-playbtn{opacity:1}.\[\.border-b\]\:pb-6.border-b{padding-bottom:calc(var(--spacing)*6)}.\[\.border-t\]\:pt-6.border-t{padding-top:calc(var(--spacing)*6)}:is(.\*\*\:\[\.hljs-addition\]\:bg-\[\#f0fff4\] *).hljs-addition{background-color:#f0fff4}:is(.\*\*\:\[\.hljs-addition\]\:text-\[\#22863a\] *).hljs-addition{color:#22863a}:is(.dark\:\*\*\:\[\.hljs-addition\]\:bg-\[\#3c5743\]:is(.dark *) *).hljs-addition{background-color:#3c5743}:is(.dark\:\*\*\:\[\.hljs-addition\]\:text-\[\#ceead5\]:is(.dark *) *).hljs-addition{color:#ceead5}:is(.\*\*\:\[\.hljs-attr\,\.hljs-attribute\,\.hljs-literal\,\.hljs-meta\,\.hljs-number\,\.hljs-operator\,\.hljs-selector-attr\,\.hljs-selector-class\,\.hljs-selector-id\,\.hljs-variable\]\:text-\[\#005cc5\] *):is(.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable){color:#005cc5}:is(.dark\:\*\*\:\[\.hljs-attr\,\.hljs-attribute\,\.hljs-literal\,\.hljs-meta\,\.hljs-number\,\.hljs-operator\,\.hljs-selector-attr\,\.hljs-selector-class\,\.hljs-selector-id\,\.hljs-variable\]\:text-\[\#6596cf\]:is(.dark *) *):is(.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable){color:#6596cf}:is(.\*\*\:\[\.hljs-built\\\\\\\\\\\\\\\\_in\,\.hljs-symbol\]\:text-\[\#e36209\] *):is(.hljs-built\\\\\\_in,.hljs-symbol){color:#e36209}:is(.dark\:\*\*\:\[\.hljs-built\\\\\\\\\\\\\\\\_in\,\.hljs-symbol\]\:text-\[\#c3854e\]:is(.dark *) *):is(.hljs-built\\\\\\_in,.hljs-symbol){color:#c3854e}:is(.\*\*\:\[\.hljs-built\\\\\\\\_in\,\.hljs-symbol\]\:text-\[\#e36209\] *):is(.hljs-built\\_in,.hljs-symbol){color:#e36209}:is(.dark\:\*\*\:\[\.hljs-built\\\\\\\\_in\,\.hljs-symbol\]\:text-\[\#c3854e\]:is(.dark *) *):is(.hljs-built\\_in,.hljs-symbol){color:#c3854e}:is(.\*\*\:\[\.hljs-bullet\]\:text-\[\#735c0f\] *).hljs-bullet{color:#735c0f}:is(.\*\*\:\[\.hljs-comment\,\.hljs-code\,\.hljs-formula\]\:text-\[\#6a737d\] *):is(.hljs-comment,.hljs-code,.hljs-formula),:is(.dark\:\*\*\:\[\.hljs-comment\,\.hljs-code\,\.hljs-formula\]\:text-\[\#6a737d\]:is(.dark *) *):is(.hljs-comment,.hljs-code,.hljs-formula){color:#6a737d}:is(.\*\*\:\[\.hljs-deletion\]\:bg-\[\#ffeef0\] *).hljs-deletion{background-color:#ffeef0}:is(.\*\*\:\[\.hljs-deletion\]\:text-\[\#b31d28\] *).hljs-deletion{color:#b31d28}:is(.dark\:\*\*\:\[\.hljs-deletion\]\:bg-\[\#473235\]:is(.dark *) *).hljs-deletion{background-color:#473235}:is(.dark\:\*\*\:\[\.hljs-deletion\]\:text-\[\#e7c7cb\]:is(.dark *) *).hljs-deletion{color:#e7c7cb}:is(.\*\*\:\[\.hljs-emphasis\]\:italic *).hljs-emphasis{font-style:italic}:is(.\*\*\:\[\.hljs-keyword\,\.hljs-doctag\,\.hljs-template-tag\,\.hljs-template-variable\,\.hljs-type\,\.hljs-variable\.language\\\\\\\\\\\\\\\\_\]\:text-\[\#d73a49\] *):is(.hljs-keyword,.hljs-doctag,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language\\\\\\_){color:#d73a49}:is(.dark\:\*\*\:\[\.hljs-keyword\,\.hljs-doctag\,\.hljs-template-tag\,\.hljs-template-variable\,\.hljs-type\,\.hljs-variable\.language\\\\\\\\\\\\\\\\_\]\:text-\[\#ee6960\]:is(.dark *) *):is(.hljs-keyword,.hljs-doctag,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language\\\\\\_){color:#ee6960}:is(.\*\*\:\[\.hljs-keyword\,\.hljs-doctag\,\.hljs-template-tag\,\.hljs-template-variable\,\.hljs-type\,\.hljs-variable\.language\\\\\\\\_\]\:text-\[\#d73a49\] *):is(.hljs-keyword,.hljs-doctag,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language\\_){color:#d73a49}:is(.dark\:\*\*\:\[\.hljs-keyword\,\.hljs-doctag\,\.hljs-template-tag\,\.hljs-template-variable\,\.hljs-type\,\.hljs-variable\.language\\\\\\\\_\]\:text-\[\#ee6960\]:is(.dark *) *):is(.hljs-keyword,.hljs-doctag,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language\\_){color:#ee6960}:is(.\*\*\:\[\.hljs-name\,\.hljs-quote\,\.hljs-selector-tag\,\.hljs-selector-pseudo\]\:text-\[\#22863a\] *):is(.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo){color:#22863a}:is(.dark\:\*\*\:\[\.hljs-name\,\.hljs-quote\,\.hljs-selector-tag\,\.hljs-selector-pseudo\]\:text-\[\#36a84f\]:is(.dark *) *):is(.hljs-name,.hljs-quote,.hljs-selector-tag,.hljs-selector-pseudo){color:#36a84f}:is(.\*\*\:\[\.hljs-regexp\,\.hljs-string\,\.hljs-meta_\.hljs-string\]\:text-\[\#032f62\] *):is(.hljs-regexp,.hljs-string,.hljs-meta .hljs-string){color:#032f62}:is(.dark\:\*\*\:\[\.hljs-regexp\,\.hljs-string\,\.hljs-meta_\.hljs-string\]\:text-\[\#3593ff\]:is(.dark *) *):is(.hljs-regexp,.hljs-string,.hljs-meta .hljs-string){color:#3593ff}:is(.\*\*\:\[\.hljs-section\]\:font-bold *).hljs-section{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}:is(.\*\*\:\[\.hljs-section\]\:text-\[\#005cc5\] *).hljs-section{color:#005cc5}:is(.dark\:\*\*\:\[\.hljs-section\]\:text-\[\#61a5f2\]:is(.dark *) *).hljs-section{color:#61a5f2}:is(.\*\*\:\[\.hljs-strong\]\:font-bold *).hljs-strong{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}:is(.\*\*\:\[\.hljs-title\,\.hljs-title\.class\\\\\\\\\\\\\\\\_\,\.hljs-title\.class\\\\\\\\\\\\\\\\_\.inherited\\\\\\\\\\\\\\\\_\\\\\\\\\\\\\\\\_\,\.hljs-title\.function\\\\\\\\\\\\\\\\_\]\:text-\[\#6f42c1\] *):is(.hljs-title,.hljs-title.class\\\\\\_,.hljs-title.class\\\\\\_.inherited\\\\\\_\\\\\\_,.hljs-title.function\\\\\\_){color:#6f42c1}:is(.dark\:\*\*\:\[\.hljs-title\,\.hljs-title\.class\\\\\\\\\\\\\\\\_\,\.hljs-title\.class\\\\\\\\\\\\\\\\_\.inherited\\\\\\\\\\\\\\\\_\\\\\\\\\\\\\\\\_\,\.hljs-title\.function\\\\\\\\\\\\\\\\_\]\:text-\[\#a77bfa\]:is(.dark *) *):is(.hljs-title,.hljs-title.class\\\\\\_,.hljs-title.class\\\\\\_.inherited\\\\\\_\\\\\\_,.hljs-title.function\\\\\\_){color:#a77bfa}:is(.\*\*\:\[\.hljs-title\,\.hljs-title\.class\\\\\\\\_\,\.hljs-title\.class\\\\\\\\_\.inherited\\\\\\\\_\\\\\\\\_\,\.hljs-title\.function\\\\\\\\_\]\:text-\[\#6f42c1\] *):is(.hljs-title,.hljs-title.class\\_,.hljs-title.class\\_.inherited\\_\\_,.hljs-title.function\\_){color:#6f42c1}:is(.dark\:\*\*\:\[\.hljs-title\,\.hljs-title\.class\\\\\\\\_\,\.hljs-title\.class\\\\\\\\_\.inherited\\\\\\\\_\\\\\\\\_\,\.hljs-title\.function\\\\\\\\_\]\:text-\[\#a77bfa\]:is(.dark *) *):is(.hljs-title,.hljs-title.class\\_,.hljs-title.class\\_.inherited\\_\\_,.hljs-title.function\\_){color:#a77bfa}@media (hover:hover){:is(.\*\*\:\[\[data-slot\=\"mdx-link\"\]\]\:hover\:after\:bottom-0 *)[data-slot=mdx-link]:hover:after{content:var(--tw-content);bottom:calc(var(--spacing)*0)}}:is(.\*\:\[code\]\:bg-inherit>*):is(code){background-color:inherit}:is(.\*\:\[h3\,h4\]\:mt-8>*):is(h3,h4){margin-top:calc(var(--spacing)*8)}:is(.\*\:\[h3\,h4\]\:mb-4>*):is(h3,h4){margin-bottom:calc(var(--spacing)*4)}:is(.\*\:\[h3\,h4\]\:text-base>*):is(h3,h4){font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}:is(.\*\:\[h3\,h4\]\:font-semibold>*):is(h3,h4){--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}:is(.\*\:\[h3\,h4\]\:\[counter-increment\:step\]>*):is(h3,h4){counter-increment:step}:is(.\*\:\[h3\,h4\]\:before\:absolute>*):is(h3,h4):before{content:var(--tw-content);position:absolute}:is(.\*\:\[h3\,h4\]\:before\:mt-\[-4px\]>*):is(h3,h4):before{content:var(--tw-content);margin-top:-4px}:is(.\*\:\[h3\,h4\]\:before\:ml-\[-50px\]>*):is(h3,h4):before{content:var(--tw-content);margin-left:-50px}:is(.\*\:\[h3\,h4\]\:before\:inline-flex>*):is(h3,h4):before{content:var(--tw-content);display:inline-flex}:is(.\*\:\[h3\,h4\]\:before\:h-9>*):is(h3,h4):before{content:var(--tw-content);height:calc(var(--spacing)*9)}:is(.\*\:\[h3\,h4\]\:before\:w-9>*):is(h3,h4):before{content:var(--tw-content);width:calc(var(--spacing)*9)}:is(.\*\:\[h3\,h4\]\:before\:items-center>*):is(h3,h4):before{content:var(--tw-content);align-items:center}:is(.\*\:\[h3\,h4\]\:before\:justify-center>*):is(h3,h4):before{content:var(--tw-content);justify-content:center}:is(.\*\:\[h3\,h4\]\:before\:rounded-full>*):is(h3,h4):before{content:var(--tw-content);border-radius:3.40282e38px}:is(.\*\:\[h3\,h4\]\:before\:border-4>*):is(h3,h4):before{content:var(--tw-content);border-style:var(--tw-border-style);border-width:4px}:is(.\*\:\[h3\,h4\]\:before\:border-background>*):is(h3,h4):before{content:var(--tw-content);border-color:var(--background)}:is(.\*\:\[h3\,h4\]\:before\:bg-muted>*):is(h3,h4):before{content:var(--tw-content);background-color:var(--muted)}:is(.\*\:\[h3\,h4\]\:before\:text-center>*):is(h3,h4):before{content:var(--tw-content);text-align:center}:is(.\*\:\[h3\,h4\]\:before\:-indent-px>*):is(h3,h4):before{content:var(--tw-content);text-indent:-1px}:is(.\*\:\[h3\,h4\]\:before\:font-mono>*):is(h3,h4):before{content:var(--tw-content);font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}:is(.\*\:\[h3\,h4\]\:before\:text-base>*):is(h3,h4):before{content:var(--tw-content);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}:is(.\*\:\[h3\,h4\]\:before\:font-medium>*):is(h3,h4):before{content:var(--tw-content);--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}:is(.\*\:\[h3\,h4\]\:before\:\[content\:counter\(step\)\]>*):is(h3,h4):before{content:var(--tw-content);content:counter(step)}:is(.\*\*\:\[p\]\:m-0 *):is(p){margin:calc(var(--spacing)*0)}:is(.\*\*\:\[p\,ul\,ol\,li\]\:first\:my-0 *):is(p,ul,ol,li):first-child{margin-block:calc(var(--spacing)*0)}:is(.\*\:first\:\[span\]\:hidden>*):first-child:is(span){display:none}:is(.\*\:\[span\]\:last\:flex>*):is(span):last-child{display:flex}:is(.\*\:\[span\]\:last\:items-center>*):is(span):last-child{align-items:center}:is(.\*\:\[span\]\:last\:gap-2>*):is(span):last-child{gap:calc(var(--spacing)*2)}:is(.\*\:\[svg\]\:text-muted-foreground>*):is(svg){color:var(--muted-foreground)}:is(.\*\:\[svg\]\:text-neutral-50>*):is(svg){color:var(--color-neutral-50)}:is(.data-\[variant\=destructive\]\:\*\:\[svg\]\:\!text-destructive[data-variant=destructive]>*):is(svg){color:var(--destructive)!important}:is(.dark\:\*\:\[svg\]\:text-neutral-900:is(.dark *)>*):is(svg){color:var(--color-neutral-900)}:is(.\*\:\[ul\]\:my-0>*):is(ul){margin-block:calc(var(--spacing)*0)}.\[\&\>\[role\=checkbox\]\]\:translate-y-\[2px\]>[role=checkbox]{--tw-translate-y:2px;translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>button\]\:hidden>button{display:none}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.\[\&\>svg\]\:size-3>svg{width:calc(var(--spacing)*3);height:calc(var(--spacing)*3)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing)*4);height:calc(var(--spacing)*4)}.\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:translate-y-0\.5>svg{--tw-translate-y:calc(var(--spacing)*.5);translate:var(--tw-translate-x)var(--tw-translate-y)}.\[\&\>svg\]\:text-current>svg{color:currentColor}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:var(--sidebar-accent-foreground)}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\[align\=center\]\]\:text-center[align=center]{text-align:center}.\[\&\[align\=right\]\]\:text-right[align=right]{text-align:right}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div,.\[\&\[data-state\=open\]\>button\>svg\:first-child\]\:rotate-90[data-state=open]>button>svg:first-child{rotate:90deg}.\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}@media (min-width:1800px){.\[\@media\(width\>\=1800px\)\]\:max-w-\(--breakpoint-2xl\){max-width:var(--breakpoint-2xl)}.\[\@media\(width\>\=1800px\)\]\:border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}}[data-side=left][data-collapsible=offcanvas] .\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--spacing)*-2)}[data-side=left][data-state=collapsed] .\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--spacing)*-2)}[data-side=right][data-state=collapsed] .\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}@media (hover:hover){a.\[a\&\]\:hover\:bg-accent:hover{background-color:var(--accent)}a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){a.\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab,var(--destructive)90%,transparent)}}a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){a.\[a\&\]\:hover\:bg-primary\/90:hover{background-color:color-mix(in oklab,var(--primary)90%,transparent)}}a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){a.\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:color-mix(in oklab,var(--secondary)90%,transparent)}}a.\[a\&\]\:hover\:text-accent-foreground:hover{color:var(--accent-foreground)}}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}.prose{max-width:65ch;color:var(--foreground)}.prose h1:not(.not-prose h1){scroll-margin:calc(var(--spacing)*20);font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height));--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}@media (min-width:64rem){.prose h1:not(.not-prose h1){font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}}.prose h2:not(.not-prose h2){margin-top:calc(var(--spacing)*12);scroll-margin:calc(var(--spacing)*20);border-bottom-style:var(--tw-border-style);padding-bottom:calc(var(--spacing)*2);font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight);border-bottom-width:1px}.prose h2:not(.not-prose h2):first-child{margin-top:calc(var(--spacing)*0)}.prose h3:not(.not-prose h3){margin-top:calc(var(--spacing)*12);scroll-margin:calc(var(--spacing)*20);font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.prose h3:not(.not-prose h3):first-child{margin-top:calc(var(--spacing)*0)}.prose h4:not(.not-prose h4){margin-top:calc(var(--spacing)*12);scroll-margin:calc(var(--spacing)*20);font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.prose h4:not(.not-prose h4):first-child{margin-top:calc(var(--spacing)*0)}.prose h5:not(.not-prose h5){margin-top:calc(var(--spacing)*12);scroll-margin:calc(var(--spacing)*20);font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.prose h5:not(.not-prose h5):first-child{margin-top:calc(var(--spacing)*0)}.prose h6:not(.not-prose h6){margin-top:calc(var(--spacing)*12);scroll-margin:calc(var(--spacing)*20);font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.prose h6:not(.not-prose h6):first-child,:is(.prose h1:not(.not-prose h1),.prose h2:not(.not-prose h2),.prose h3:not(.not-prose h3),.prose h4:not(.not-prose h4),.prose h5:not(.not-prose h5),.prose h6:not(.not-prose h6))+p{margin-top:calc(var(--spacing)*0)}.prose p:not(.not-prose p){--tw-leading:calc(var(--spacing)*7);line-height:calc(var(--spacing)*7)}.prose p:not(.not-prose p):not(:first-child){margin-top:calc(var(--spacing)*6)}.prose a:not(.not-prose a){--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium);color:var(--primary);text-underline-offset:4px;text-decoration-line:underline}.prose blockquote:not(.not-prose blockquote){margin-top:calc(var(--spacing)*6);border-left-style:var(--tw-border-style);padding-left:calc(var(--spacing)*6);border-left-width:2px;font-style:italic}.prose table:not(.not-prose table){margin-block:calc(var(--spacing)*6);width:100%;overflow-y:auto}.prose table:not(.not-prose table) thead tr{margin:calc(var(--spacing)*0);border-top-style:var(--tw-border-style);padding:calc(var(--spacing)*0);border-top-width:1px}.prose table:not(.not-prose table) thead tr:nth-child(2n){background-color:var(--muted)}.prose table:not(.not-prose table) th{border-style:var(--tw-border-style);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*2);text-align:left;--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold);border-width:1px}.prose table:not(.not-prose table) th[align=center]{text-align:center}.prose table:not(.not-prose table) th[align=right]{text-align:right}.prose table:not(.not-prose table) tbody tr{margin:calc(var(--spacing)*0);border-top-style:var(--tw-border-style);padding:calc(var(--spacing)*0);border-top-width:1px}.prose table:not(.not-prose table) tbody tr:nth-child(2n){background-color:var(--muted)}.prose table:not(.not-prose table) td{border-style:var(--tw-border-style);padding-inline:calc(var(--spacing)*4);padding-block:calc(var(--spacing)*2);text-align:left;border-width:1px}.prose table:not(.not-prose table) td[align=center]{text-align:center}.prose table:not(.not-prose table) td[align=right]{text-align:right}.prose ul:not(.not-prose ul){margin-block:calc(var(--spacing)*6);margin-left:calc(var(--spacing)*6);list-style-type:disc}.prose ul:not(.not-prose ul)>li{margin-top:calc(var(--spacing)*2)}.prose ul:not(.not-prose ul) p{margin-block:calc(var(--spacing)*0);display:inline}.prose ol:not(.not-prose ol){margin-block:calc(var(--spacing)*6);margin-left:calc(var(--spacing)*6);list-style-type:decimal}.prose ol:not(.not-prose ol)>li{margin-top:calc(var(--spacing)*2)}.prose ol:not(.not-prose ol) p{margin-block:calc(var(--spacing)*0);display:inline}.prose pre:not(.not-prose pre){margin-block:calc(var(--spacing)*6);border-radius:calc(var(--radius) - 2px);background-color:var(--muted);padding:calc(var(--spacing)*4);font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));overflow-y:auto}.prose code:not(pre code):not(.not-prose code){background-color:var(--muted);font-family:"var(--font-mono)",ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);border-radius:.25rem;padding-block:.2rem;padding-inline:.3rem;position:relative}.prose .lead:not(.not-prose .lead){font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));color:var(--muted-foreground)}.prose .large:not(.not-prose .large){font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.prose .small:not(.not-prose .small){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));--tw-leading:1;--tw-font-weight:var(--font-weight-medium);line-height:1;font-weight:var(--font-weight-medium)}.prose .muted:not(.not-prose .muted){font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height));color:var(--muted-foreground)}.prose img:not(.not-prose img),.prose picture:not(.not-prose picture),.prose video:not(.not-prose video){margin-block:calc(var(--spacing)*6)}.prose picture>img:not(.not-prose picture>img){margin-block:calc(var(--spacing)*0)}.prose kbd:not(.not-prose kbd){border-radius:calc(var(--radius) - 2px);background-color:var(--muted);padding-inline:calc(var(--spacing)*1.5);padding-block:calc(var(--spacing)*.5);font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.prose hr{margin-block:calc(var(--spacing)*10)}.prose dl:not(.not-prose dl){margin-block:calc(var(--spacing)*6)}.prose dl:not(.not-prose dl) dt{margin-top:calc(var(--spacing)*6);--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.prose dl:not(.not-prose dl) dt:first-child{margin-top:calc(var(--spacing)*0)}.prose details:not(.not-prose details){margin-top:calc(var(--spacing)*6)}.prose details:not(.not-prose details) summary{margin-top:calc(var(--spacing)*6);cursor:pointer;--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold);--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.prose details:not(.not-prose details) p:first-of-type{margin-top:calc(var(--spacing)*2)}.prose mark:not(.not-prose mark){background-color:var(--color-yellow-300)}.prose small:not(.not-prose small){font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height));--tw-leading:1;line-height:1}.theme-default .theme-container{--chart-1:var(--color-blue-300);--chart-2:var(--color-blue-500);--chart-3:var(--color-blue-600);--chart-4:var(--color-blue-700);--chart-5:var(--color-blue-800)}.theme-blue .theme-container{--primary:var(--color-blue-600);--primary-foreground:var(--color-blue-50);--ring:var(--color-blue-400);--sidebar-primary:var(--color-blue-600);--sidebar-primary-foreground:var(--color-blue-50);--sidebar-ring:var(--color-blue-400);--chart-1:var(--color-blue-300);--chart-2:var(--color-blue-500);--chart-3:var(--color-blue-600);--chart-4:var(--color-blue-700);--chart-5:var(--color-blue-800)}.theme-blue .theme-container:is(.dark *){--primary:var(--color-blue-500);--primary-foreground:var(--color-blue-50);--ring:var(--color-blue-900);--sidebar-primary:var(--color-blue-500);--sidebar-primary-foreground:var(--color-blue-50);--sidebar-ring:var(--color-blue-900)}.theme-green .theme-container{--primary:var(--color-lime-600);--primary-foreground:var(--color-lime-50);--ring:var(--color-lime-400);--chart-1:var(--color-green-300);--chart-2:var(--color-green-500);--chart-3:var(--color-green-600);--chart-4:var(--color-green-700);--chart-5:var(--color-green-800);--sidebar-primary:var(--color-lime-600);--sidebar-primary-foreground:var(--color-lime-50);--sidebar-ring:var(--color-lime-400)}.theme-green .theme-container:is(.dark *){--primary:var(--color-lime-600);--primary-foreground:var(--color-lime-50);--ring:var(--color-lime-900);--sidebar-primary:var(--color-lime-500);--sidebar-primary-foreground:var(--color-lime-50);--sidebar-ring:var(--color-lime-900)}.theme-amber .theme-container{--primary:var(--color-amber-600);--primary-foreground:var(--color-amber-50);--ring:var(--color-amber-400);--chart-1:var(--color-amber-300);--chart-2:var(--color-amber-500);--chart-3:var(--color-amber-600);--chart-4:var(--color-amber-700);--chart-5:var(--color-amber-800);--sidebar-primary:var(--color-amber-600);--sidebar-primary-foreground:var(--color-amber-50);--sidebar-ring:var(--color-amber-400)}.theme-amber .theme-container:is(.dark *){--primary:var(--color-amber-500);--primary-foreground:var(--color-amber-50);--ring:var(--color-amber-900);--sidebar-primary:var(--color-amber-500);--sidebar-primary-foreground:var(--color-amber-50);--sidebar-ring:var(--color-amber-900)}.theme-rose .theme-container{--primary:var(--color-rose-600);--primary-foreground:var(--color-rose-50);--ring:var(--color-rose-400);--chart-1:var(--color-rose-300);--chart-2:var(--color-rose-500);--chart-3:var(--color-rose-600);--chart-4:var(--color-rose-700);--chart-5:var(--color-rose-800);--sidebar-primary:var(--color-rose-600);--sidebar-primary-foreground:var(--color-rose-50);--sidebar-ring:var(--color-rose-400)}.theme-rose .theme-container:is(.dark *){--primary:var(--color-rose-500);--primary-foreground:var(--color-rose-50);--ring:var(--color-rose-900);--sidebar-primary:var(--color-rose-500);--sidebar-primary-foreground:var(--color-rose-50);--sidebar-ring:var(--color-rose-900)}.theme-purple .theme-container{--primary:var(--color-purple-600);--primary-foreground:var(--color-purple-50);--ring:var(--color-purple-400);--chart-1:var(--color-purple-300);--chart-2:var(--color-purple-500);--chart-3:var(--color-purple-600);--chart-4:var(--color-purple-700);--chart-5:var(--color-purple-800);--sidebar-primary:var(--color-purple-600);--sidebar-primary-foreground:var(--color-purple-50);--sidebar-ring:var(--color-purple-400)}.theme-purple .theme-container:is(.dark *){--primary:var(--color-purple-500);--primary-foreground:var(--color-purple-50);--ring:var(--color-purple-900);--sidebar-primary:var(--color-purple-500);--sidebar-primary-foreground:var(--color-purple-50);--sidebar-ring:var(--color-purple-900)}.theme-orange .theme-container{--primary:var(--color-orange-600);--primary-foreground:var(--color-orange-50);--ring:var(--color-orange-400);--chart-1:var(--color-orange-300);--chart-2:var(--color-orange-500);--chart-3:var(--color-orange-600);--chart-4:var(--color-orange-700);--chart-5:var(--color-orange-800);--sidebar-primary:var(--color-orange-600);--sidebar-primary-foreground:var(--color-orange-50);--sidebar-ring:var(--color-orange-400)}.theme-orange .theme-container:is(.dark *){--primary:var(--color-orange-500);--primary-foreground:var(--color-orange-50);--ring:var(--color-orange-900);--sidebar-primary:var(--color-orange-500);--sidebar-primary-foreground:var(--color-orange-50);--sidebar-ring:var(--color-orange-900)}.theme-teal .theme-container{--primary:var(--color-teal-600);--primary-foreground:var(--color-teal-50);--chart-1:var(--color-teal-300);--chart-2:var(--color-teal-500);--chart-3:var(--color-teal-600);--chart-4:var(--color-teal-700);--chart-5:var(--color-teal-800);--sidebar-primary:var(--color-teal-600);--sidebar-primary-foreground:var(--color-teal-50);--sidebar-ring:var(--color-teal-400)}.theme-teal .theme-container:is(.dark *){--primary:var(--color-teal-500);--primary-foreground:var(--color-teal-50);--sidebar-primary:var(--color-teal-500);--sidebar-primary-foreground:var(--color-teal-50);--sidebar-ring:var(--color-teal-900)}.theme-mono .theme-container{--font-sans:var(--font-mono);--primary:var(--color-stone-600);--primary-foreground:var(--color-stone-50);--chart-1:var(--color-stone-300);--chart-2:var(--color-stone-500);--chart-3:var(--color-stone-600);--chart-4:var(--color-stone-700);--chart-5:var(--color-stone-800);--sidebar-primary:var(--color-stone-600);--sidebar-primary-foreground:var(--color-stone-50);--sidebar-ring:var(--color-stone-400)}.theme-mono .theme-container:is(.dark *){--primary:var(--color-stone-500);--primary-foreground:var(--color-stone-50);--sidebar-primary:var(--color-stone-500);--sidebar-primary-foreground:var(--color-stone-50);--sidebar-ring:var(--color-stone-900)}@media (min-width:1024px){.theme-mono .theme-container{--font-sans:var(--font-mono);--radius:.45em;--text-lg:1rem;--text-xl:1.1rem;--text-2xl:1.2rem;--text-3xl:1.3rem;--text-4xl:1.4rem;--text-5xl:1.5rem;--text-6xl:1.6rem;--text-7xl:1.7rem;--text-8xl:1.8rem;--text-base:.85rem;--text-sm:.8rem;--spacing:.222222rem}}.theme-mono .theme-container .rounded-xs,.theme-mono .theme-container .rounded-sm,.theme-mono .theme-container .rounded-md,.theme-mono .theme-container .rounded-lg,.theme-mono .theme-container .rounded-xl{border-radius:0}.theme-mono .theme-container .shadow-xs,.theme-mono .theme-container .shadow-sm,.theme-mono .theme-container .shadow-md,.theme-mono .theme-container .shadow-lg,.theme-mono .theme-container .shadow-xl{box-shadow:none}.theme-mono .theme-container [data-slot=toggle-group],.theme-mono .theme-container [data-slot=toggle-group-item]{--tw-shadow:0 0 #0000!important;box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)!important;border-radius:0!important}.theme-scaled .theme-container{--chart-1:var(--color-blue-300);--chart-2:var(--color-blue-500);--chart-3:var(--color-blue-600);--chart-4:var(--color-blue-700);--chart-5:var(--color-blue-800)}@media (min-width:1024px){.theme-scaled .theme-container{--radius:.45em;--text-lg:1rem;--text-xl:1.1rem;--text-2xl:1.2rem;--text-3xl:1.3rem;--text-4xl:1.4rem;--text-5xl:1.5rem;--text-6xl:1.6rem;--text-7xl:1.7rem;--text-8xl:1.8rem;--text-base:.85rem;--text-sm:.8rem;--spacing:.2rem}}.theme-scaled .theme-container [data-slot=select-trigger],.theme-scaled .theme-container [data-slot=toggle-group-item]{--spacing:.2rem}.theme-scaled .theme-container [data-slot=card]{border-radius:var(--radius);padding-block:calc(var(--spacing)*4);gap:calc(var(--spacing)*2)}.theme-scaled .theme-container [data-slot=card].pb-0{padding-bottom:0}.theme-red .theme-container{--primary:var(--color-red-600);--primary-foreground:var(--color-red-50);--ring:var(--color-red-400);--chart-1:var(--color-red-300);--chart-2:var(--color-red-500);--chart-3:var(--color-red-600);--chart-4:var(--color-red-700);--chart-5:var(--color-red-800);--sidebar-primary:var(--color-red-600);--sidebar-primary-foreground:var(--color-red-50);--sidebar-ring:var(--color-red-400)}.theme-red .theme-container:is(.dark *){--primary:var(--color-red-500);--primary-foreground:var(--color-red-50);--ring:var(--color-red-900);--sidebar-primary:var(--color-red-500);--sidebar-primary-foreground:var(--color-red-50);--sidebar-ring:var(--color-red-900)}.theme-yellow .theme-container{--primary:var(--color-yellow-400);--primary-foreground:var(--color-yellow-900);--ring:var(--color-yellow-400);--chart-1:var(--color-yellow-300);--chart-2:var(--color-yellow-500);--chart-3:var(--color-yellow-600);--chart-4:var(--color-yellow-700);--chart-5:var(--color-yellow-800);--sidebar-primary:var(--color-yellow-600);--sidebar-primary-foreground:var(--color-yellow-50);--sidebar-ring:var(--color-yellow-400)}.theme-yellow .theme-container:is(.dark *){--primary:var(--color-yellow-500);--primary-foreground:var(--color-yellow-900);--ring:var(--color-yellow-900);--sidebar-primary:var(--color-yellow-500);--sidebar-primary-foreground:var(--color-yellow-50);--sidebar-ring:var(--color-yellow-900)}.theme-violet .theme-container{--primary:var(--color-violet-600);--primary-foreground:var(--color-violet-50);--ring:var(--color-violet-400);--chart-1:var(--color-violet-300);--chart-2:var(--color-violet-500);--chart-3:var(--color-violet-600);--chart-4:var(--color-violet-700);--chart-5:var(--color-violet-800);--sidebar-primary:var(--color-violet-600);--sidebar-primary-foreground:var(--color-violet-50);--sidebar-ring:var(--color-violet-400)}.theme-violet .theme-container:is(.dark *){--primary:var(--color-violet-500);--primary-foreground:var(--color-violet-50);--ring:var(--color-violet-900);--sidebar-primary:var(--color-violet-500);--sidebar-primary-foreground:var(--color-violet-50);--sidebar-ring:var(--color-violet-900)}:root{--radius:.625rem;--background:oklch(100% 0 0);--foreground:oklch(14.5% 0 0);--card:oklch(100% 0 0);--card-foreground:oklch(14.5% 0 0);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.5% 0 0);--primary:oklch(20.5% 0 0);--primary-foreground:oklch(98.5% 0 0);--secondary:oklch(97% 0 0);--secondary-foreground:oklch(20.5% 0 0);--muted:oklch(97% 0 0);--muted-foreground:oklch(55.6% 0 0);--accent:oklch(97% 0 0);--accent-foreground:oklch(20.5% 0 0);--destructive:oklch(57.7% .245 27.325);--border:oklch(92.2% 0 0);--input:oklch(92.2% 0 0);--ring:oklch(70.8% 0 0);--chart-1:var(--color-blue-300);--chart-2:var(--color-blue-500);--chart-3:var(--color-blue-600);--chart-4:var(--color-blue-700);--chart-5:var(--color-blue-800);--sidebar:oklch(98.5% 0 0);--sidebar-foreground:oklch(14.5% 0 0);--sidebar-primary:oklch(20.5% 0 0);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(97% 0 0);--sidebar-accent-foreground:oklch(20.5% 0 0);--sidebar-border:oklch(92.2% 0 0);--sidebar-ring:oklch(70.8% 0 0);--surface:oklch(98% 0 0);--surface-foreground:var(--foreground);--code:var(--surface);--code-foreground:var(--surface-foreground);--code-highlight:oklch(96% 0 0);--code-number:oklch(56% 0 0);--selection:oklch(14.5% 0 0);--selection-foreground:oklch(100% 0 0);--color-blue-300:oklch(77.8% .108 231.731);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.9% .234 260.011);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-800:oklch(41.9% .243 267.218);--brand:oklch(62.3% .214 259.815);--highlight:oklch(85.2% .199 91.936)}.dark{--background:oklch(14.5% 0 0);--foreground:oklch(98.5% 0 0);--card:oklch(20.5% 0 0);--card-foreground:oklch(98.5% 0 0);--popover:oklch(26.9% 0 0);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(92.2% 0 0);--primary-foreground:oklch(20.5% 0 0);--secondary:oklch(26.9% 0 0);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(26.9% 0 0);--muted-foreground:oklch(70.8% 0 0);--accent:oklch(37.1% 0 0);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.6% 0 0);--chart-1:var(--color-blue-300);--chart-2:var(--color-blue-500);--chart-3:var(--color-blue-600);--chart-4:var(--color-blue-700);--chart-5:var(--color-blue-800);--sidebar:oklch(20.5% 0 0);--sidebar-foreground:oklch(98.5% 0 0);--sidebar-primary:oklch(48.8% .243 264.376);--sidebar-primary-foreground:oklch(98.5% 0 0);--sidebar-accent:oklch(26.9% 0 0);--sidebar-accent-foreground:oklch(98.5% 0 0);--sidebar-border:oklch(100% 0 0/.1);--sidebar-ring:oklch(43.9% 0 0);--surface:oklch(20% 0 0);--surface-foreground:oklch(70.8% 0 0);--code:var(--surface);--code-foreground:var(--surface-foreground);--code-highlight:oklch(27% 0 0);--code-number:oklch(72% 0 0);--selection:oklch(92.2% 0 0);--selection-foreground:oklch(20.5% 0 0);--brand:oklch(70.7% .165 254.624);--highlight:oklch(85.2% .199 91.936)}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-font-weight{syntax:"*";inherits:false}@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-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-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}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0))}}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,auto))))}}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,auto))))}to{height:0}} \ No newline at end of file diff --git a/apps/www/src/app/(app)/docs/[[...slug]]/nav-items-grid.tsx b/apps/www/src/app/(app)/docs/[[...slug]]/nav-items-grid.tsx index 6fc06513db..e3727d8e3f 100644 --- a/apps/www/src/app/(app)/docs/[[...slug]]/nav-items-grid.tsx +++ b/apps/www/src/app/(app)/docs/[[...slug]]/nav-items-grid.tsx @@ -166,7 +166,7 @@ export function NavItemsGrid({ onClick={(e) => e.stopPropagation()} href={`#${group.title.toLowerCase().replace(/ /g, '-')}`} > -
+
diff --git a/apps/www/src/app/(app)/docs/[[...slug]]/page.tsx b/apps/www/src/app/(app)/docs/[[...slug]]/page.tsx index 64607bea67..d544da60eb 100644 --- a/apps/www/src/app/(app)/docs/[[...slug]]/page.tsx +++ b/apps/www/src/app/(app)/docs/[[...slug]]/page.tsx @@ -28,11 +28,11 @@ import { registryExamples } from '@/registry/registry-examples'; import { proExamples } from '@/registry/registry-pro'; import { registryUI } from '@/registry/registry-ui'; -interface DocPageProps { +type DocPageProps = { params: Promise<{ slug: string[]; }>; -} +}; export const dynamic = 'force-static'; diff --git a/apps/www/src/app/(app)/docs/layout.tsx b/apps/www/src/app/(app)/docs/layout.tsx index b74613c674..aa6f80c078 100644 --- a/apps/www/src/app/(app)/docs/layout.tsx +++ b/apps/www/src/app/(app)/docs/layout.tsx @@ -8,9 +8,9 @@ import { cn } from '@/lib/utils'; // SYNC -interface DocsLayoutProps { +type DocsLayoutProps = { children: React.ReactNode; -} +}; export default function DocsLayout({ children }: DocsLayoutProps) { return ( diff --git a/apps/www/src/app/cn/docs/[[...slug]]/page.tsx b/apps/www/src/app/cn/docs/[[...slug]]/page.tsx index 7822b03143..abef7ef061 100644 --- a/apps/www/src/app/cn/docs/[[...slug]]/page.tsx +++ b/apps/www/src/app/cn/docs/[[...slug]]/page.tsx @@ -28,11 +28,11 @@ import { registryExamples } from '@/registry/registry-examples'; import { proExamples } from '@/registry/registry-pro'; import { registryUI } from '@/registry/registry-ui'; -interface DocPageProps { +type DocPageProps = { params: Promise<{ slug: string[]; }>; -} +}; export const dynamic = 'force-static'; diff --git a/apps/www/src/app/dev/markdownStreamDemo.tsx b/apps/www/src/app/dev/markdownStreamDemo.tsx index 6258bd776c..d333026bdf 100644 --- a/apps/www/src/app/dev/markdownStreamDemo.tsx +++ b/apps/www/src/app/dev/markdownStreamDemo.tsx @@ -503,13 +503,13 @@ export const MarkdownStreamDemo = () => { ); }; -interface TChunks { +type TChunks = { chunks: { index: number; text: string; }[]; linebreaks: number; -} +}; function splitChunksByLinebreak(chunks: string[]) { const result: TChunks[] = []; @@ -540,10 +540,7 @@ function splitChunksByLinebreak(chunks: string[]) { return result; } -interface TChunk { - chunk: string; - delayInMs: number; -} +type TChunk = { chunk: string; delayInMs: number }; const transformedChunks = (chunks: string[]): TChunk[] => { const result: TChunk[] = []; const joiner = new MarkdownJoiner(); diff --git a/apps/www/src/app/globals.css b/apps/www/src/app/globals.css index d7ee7a82a2..41fead9905 100644 --- a/apps/www/src/app/globals.css +++ b/apps/www/src/app/globals.css @@ -189,6 +189,7 @@ text-rendering: optimizeLegibility; } + /* biome-ignore lint/a11y/useGenericFontNames: shadcn */ @supports (font: -apple-system-body) and (-webkit-appearance: none) { [data-wrapper] { @apply min-[1800px]:border-t; @@ -367,6 +368,7 @@ color: var(--shiki-light); @variant dark { + /* biome-ignore lint/suspicious/noDuplicateProperties: shiki */ color: var(--shiki-dark) !important; } } diff --git a/apps/www/src/app/layout.tsx b/apps/www/src/app/layout.tsx index 831ff08987..88b525dc29 100644 --- a/apps/www/src/app/layout.tsx +++ b/apps/www/src/app/layout.tsx @@ -74,9 +74,9 @@ export const viewport: Viewport = { themeColor: META_THEME_COLORS.light, }; -interface RootLayoutProps { +type RootLayoutProps = { children: React.ReactNode; -} +}; export default function RootLayout({ children }: RootLayoutProps) { return ( diff --git a/apps/www/src/components/api-list.tsx b/apps/www/src/components/api-list.tsx index e83bc62534..752c6f6d40 100644 --- a/apps/www/src/components/api-list.tsx +++ b/apps/www/src/components/api-list.tsx @@ -14,7 +14,7 @@ import { } from './ui/accordion'; import { Card, CardContent } from './ui/card'; -interface Item { +type Item = { children: ReactNode; name: string; type: string; @@ -23,7 +23,7 @@ interface Item { optional?: boolean; required?: boolean; value?: string; -} +}; const APIContext = createContext<{ listType?: string; name?: string }>({}); @@ -92,7 +92,7 @@ export function APIItem({ onClick={(e) => e.stopPropagation()} href={`#${id}`} > -
+
@@ -189,12 +189,12 @@ export function APIMethods({ children, ...props }: APIListProps) { ); } -interface APIListProps { +type APIListProps = { children: ReactNode; collapsed?: boolean; listType?: string; type?: string; -} +}; export function APIList({ children, @@ -237,7 +237,7 @@ export function APIList({ onClick={(e) => e.stopPropagation()} href={`#${id}`} > -
+
@@ -354,7 +354,7 @@ export function APISubListItem({ onClick={(e) => e.stopPropagation()} href={`#${id}`} > -
+
diff --git a/apps/www/src/components/block-viewer.tsx b/apps/www/src/components/block-viewer.tsx index 0f761634b3..5970645a2f 100644 --- a/apps/www/src/components/block-viewer.tsx +++ b/apps/www/src/components/block-viewer.tsx @@ -61,7 +61,7 @@ import { cn } from '@/lib/utils'; // SYNC -interface BlockViewerContext { +type BlockViewerContext = { activeFile: string | null; dependencies: string[]; highlightedFiles: @@ -82,7 +82,7 @@ interface BlockViewerContext { view: 'code' | 'preview'; setActiveFile: (file: string) => void; setView: (view: 'code' | 'preview') => void; -} +}; const BlockViewerContext = React.createContext(null); @@ -306,7 +306,7 @@ function BlockViewerToolbar({ block }: { block: boolean }) { > )} - +
@@ -495,7 +495,7 @@ function BlockViewerCode({ size }: { size?: 'default' | 'sm' }) {
diff --git a/apps/www/src/components/component-installation.tsx b/apps/www/src/components/component-installation.tsx index fdf0938885..caf3b9d7fd 100644 --- a/apps/www/src/components/component-installation.tsx +++ b/apps/www/src/components/component-installation.tsx @@ -14,7 +14,7 @@ import { ComponentPreview } from './component-preview'; import { H2, H3, Step, Steps } from './typography'; import { Tabs, TabsContent, TabsList, TabsTrigger } from './ui/tabs'; -interface ComponentInstallationProps { +type ComponentInstallationProps = { __dependencies__?: string; __highlightedFiles__?: string; __item__?: string; @@ -29,7 +29,7 @@ interface ComponentInstallationProps { name?: string; tree?: any; usage?: string[]; -} +}; export function ComponentInstallation({ __dependencies__: __registryDependencies__ = '[]', diff --git a/apps/www/src/components/counting-numbers.tsx b/apps/www/src/components/counting-numbers.tsx index 32473b37e5..1aa37b4a22 100644 --- a/apps/www/src/components/counting-numbers.tsx +++ b/apps/www/src/components/counting-numbers.tsx @@ -54,7 +54,7 @@ export const useCounting = ({ return number; }; -export interface CountingNumbersProps { +export type CountingNumbersProps = { value: number; className?: string; duration?: number; @@ -62,7 +62,7 @@ export interface CountingNumbersProps { noAnimation?: boolean; reverse?: boolean; start?: number; -} +}; export function CountingNumbers({ className, diff --git a/apps/www/src/components/docs-nav.tsx b/apps/www/src/components/docs-nav.tsx index 6147694519..ceb9cae19e 100644 --- a/apps/www/src/components/docs-nav.tsx +++ b/apps/www/src/components/docs-nav.tsx @@ -182,7 +182,7 @@ export function DocsNav({ config }: { config: DocsConfig }) { /> {filter && ( -// Output: - -// With asChild: Merges props - -// Output: -``` - -## How It Works - -Uses `React.cloneElement` to clone the child and merge props (including event handlers) from both parent and child components. The enhanced child is returned with combined functionality. - -## Key Benefits - -1. **Semantic HTML** - Use the most appropriate element (links for navigation, buttons for actions) -2. **Clean DOM Structure** - Eliminates wrapper elements and "wrapper hell" -3. **Design System Integration** - Works seamlessly with existing component libraries -4. **Component Composition** - Compose multiple behaviors onto a single element - -## Common Use Cases - -- **Custom Triggers** - Replace default triggers with custom components or links -- **Accessible Navigation** - Maintain semantic navigation elements -- **Form Integration** - Integrate with form libraries while preserving functionality - -## Best Practices - -1. **Maintain Accessibility** - Ensure child elements have proper semantics and ARIA attributes -2. **Document Support** - Use JSDoc to document the `asChild` prop in your component interfaces -3. **Test Forwarding** - Verify props are properly forwarded to child components -4. **Handle Edge Cases** - Consider conditional rendering and dynamic children - -## Common Pitfalls - -1. **Not Spreading Props** - Child components must spread `...props` to receive merged behavior -2. **Multiple Children** - `asChild` expects exactly one child element, not multiple -3. **Fragment Children** - Fragments are not valid, use actual HTML elements - -# Composition - -URL: /composition - - -title: Composition -description: The foundation of building modern UI components. - - -Composition, or composability, is the foundation of building modern UI components. It is one of the most powerful techniques for creating flexible, reusable components that can handle complex requirements without sacrificing API clarity. - -Instead of cramming all functionality into a single component with dozens of props, composition distributes responsibility across multiple cooperating components. - -Fernando gave a great talk about this at React Universe Conf 2025, where he shared his approach to rebuilding Slack's Message Composer as a composable component. - -