@objectstack/account 5.0.0 → 5.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ var e={save:`保存`,cancel:`取消`,delete:`删除`,edit:`编辑`,create:`创建`,loading:`加载中...`,submit:`提交`,confirm:`确认`,back:`返回`,next:`下一步`,yes:`是`,no:`否`,english:`English`,chinese:`中文`,language:`语言`,theme:`主题`,light:`浅色`,dark:`深色`,system:`跟随系统`,toggleTheme:`切换主题`,saving:`保存中…`,roles:{owner:`所有者`,admin:`管理员`,member:`成员`}},t={accountHome:`账户首页`,brand:`ObjectStack 账户`,breadcrumb:{account:`账户`,profile:`个人资料`,security:`安全`,sessions:`会话`,twoFactor:`双因素认证`,organizations:`组织`,oauthApps:`OAuth 应用`,new:`新建`,general:`常规`,members:`成员`,settings:`设置`,acceptInvitation:`接受邀请`,deviceAuthorization:`设备授权`}},n={groups:{account:`账户`,organization:`组织`,developer:`开发者`},items:{home:`首页`,profile:`个人资料`,security:`安全`,sessions:`会话`,twoFactor:`双因素认证`,overview:`概览`,general:`常规`,members:`成员`,oauthApps:`OAuth 应用`,invitations:`邀请`,linkedAccounts:`关联账号`,teams:`团队`},expand:`展开侧边栏`,collapse:`收起侧边栏`},r={select:`选择组织`,new:`新建组织…`,manage:`管理组织`},i={user:`用户`,signIn:`登录`,account:`账户`,organizations:`组织`,signOut:`退出登录`},a={welcome:`欢迎回来`,verified:`已验证`,quickAccess:`快速访问`,stats:{score:`安全评分`,orgs:`组织数`,twoFactor:`双因素认证`,enabled:`已启用`,disabled:`未启用`,manage:`管理`,review:`查看`,enable:`立即启用`},tiles:{profile:{title:`个人资料`,description:`显示名称、头像与联系方式。`},security:{title:`安全`,description:`修改密码并查看登录活动。`},twoFactor:{title:`双因素认证`,description:`启用 Authenticator 让登录更安全。`},sessions:{title:`活跃会话`,description:`查看并注销已登录的设备。`},linked:{title:`关联账号`,description:`管理社交与 SSO 登录提供方。`},oauth:{title:`OAuth 应用`,description:`你已授权访问账户的应用列表。`}}},o={title:`个人资料`,description:`更新你的显示名称。`,email:`邮箱`,name:`姓名`,namePlaceholder:`你的姓名`,save:`保存修改`,updated:`资料已更新`,updateFailed:`更新资料失败`,changeAvatar:`更换头像`,avatarUploading:`上传中…`,avatarHint:`JPG、PNG 或 GIF,最大 2 MB。`,avatarUpdated:`头像已更新`,avatarUploadFailed:`头像上传失败`,avatarStorageUnavailable:`存储服务不可用`},s={title:`修改密码`,description:`更新你的账户密码。`,currentPassword:`当前密码`,newPassword:`新密码`,confirmPassword:`确认新密码`,submit:`修改密码`,passwordsMismatch:`两次输入的密码不一致`,changed:`密码已修改`,changeFailed:`修改密码失败`,revokeOtherSessions:`同时撤销所有其他会话`,email:{title:`更改邮箱`,description:`更新与您账户关联的电子邮件地址。`,current:`当前邮箱`,new:`新邮箱地址`,placeholder:`new@example.com`,submit:`更改邮箱`,requested:`验证邮件已发送到新地址`,requestFailed:`更改邮箱失败`},delete:{title:`删除账户`,description:`永久删除您的账户及所有关联数据。此操作不可撤销。`,dialogTitle:`您确定要执行此操作吗?`,confirm:`请输入您的邮箱以确认:{{email}}`,confirmationMismatch:`邮箱不匹配`,password:`输入密码以确认`,cta:`删除我的账户`,success:`账户已删除`,failed:`删除账户失败`}},c={title:`活跃会话`,description:`管理已登录到你账户的设备。`,revokeOthers:`注销其他全部`,revokingOthers:`注销中…`,loading:`正在加载会话…`,empty:`未找到活跃会话。`,unknownDevice:`未知设备`,expires:`过期于 {{date}}`,loadFailed:`加载会话失败`,revoked:`会话已注销`,revokeFailed:`注销会话失败`,othersRevoked:`其他会话已注销`,revokeOthersFailed:`注销其他会话失败`,current:`当前会话`},l={title:`双因素认证`,loadingStatus:`正在加载状态…`,setupTitle:`设置双因素认证`,setupDescription:`使用身份验证器应用扫描二维码,然后输入验证码。`,qrAlt:`TOTP 二维码`,uriHint:`如果无法扫描二维码,请将此 URI 复制到你的身份验证器应用中。`,verificationCode:`验证码`,verify:`验证并启用`,verifying:`验证中…`,cancel:`取消`,enabled:`已启用`,notEnabled:`未启用`,enabledDescription:`你的账户已受 2FA 保护。输入密码以禁用它。`,notEnabledDescription:`通过 TOTP 身份验证器应用为账户增加一层安全保障。`,password:`密码`,passwordPlaceholder:`使用账户密码确认`,enable:`启用 2FA`,loading:`加载中…`,disable:`禁用 2FA`,disabling:`禁用中…`,enableSuccess:`双因素认证已启用`,disableSuccess:`双因素认证已禁用`,enableFailed:`启用 2FA 失败`,disableFailed:`禁用 2FA 失败`,invalidCode:`验证码无效`,trustDevice:`信任此设备`,backupCodes:{title:`备用验证码`,description:`当您无法使用验证器应用时,可使用备用验证码登录。`,savedTitle:`请保存这些备用验证码`,savedHint:`请将这些验证码保存在安全的地方,每个验证码只能使用一次。`,newTitle:`已生成新的备用验证码`,regenerate:`重新生成备用验证码`,regenerated:`备用验证码已重新生成`,regenerateFailed:`重新生成备用验证码失败`,copy:`复制`,copied:`备用验证码已复制到剪贴板`,copyFailed:`复制到剪贴板失败`}},u={emailLabel:`邮箱`,passwordLabel:`密码`,nameLabel:`姓名`,emailPlaceholder:`you@example.com`,social:{continueWith:`继续使用`,signUpWith:`使用以下方式注册`,orContinueEmail:`或使用邮箱继续`,redirectingTo:`正在跳转到 {{provider}}…`},login:{title:`欢迎回来`,description:`登录你的 ObjectStack 账户。`,forgotPassword:`忘记密码?`,submit:`登录`,submitting:`登录中…`,noAccount:`还没有账户?`,signUp:`注册`,welcomeToast:`欢迎回来`,failed:`登录失败`,signingIn:`正在登录…`,ssoHandoff:`请登录 ObjectStack 账户以继续访问 {{target}}`,brandHeadline:`面向 AI 原生业务软件的元数据后端。`,brandSubline:`一个身份,连接所有工作区。登录即可管理账户、组织与已授权应用。`},register:{title:`创建账户`,description:`加入 ObjectStack。`,submit:`创建账户`,submitting:`创建中…`,haveAccount:`已经有账户?`,signIn:`登录`,successToast:`账户创建成功`,failed:`注册失败`},forgotPassword:{checkEmailTitle:`请查收邮箱`,checkEmailDescription:`如果 {{email}} 对应的账户存在,你将很快收到密码重置链接。`,backToSignIn:`返回登录`,title:`忘记密码`,description:`输入你的邮箱,我们将发送重置链接。`,submit:`发送重置链接`,submitting:`发送中…`,rememberPassword:`想起密码了?`,signIn:`登录`,failed:`发送重置邮件失败`},resetPassword:{title:`重置密码`,description:`为你的账户设置新密码。`,newPassword:`新密码`,confirmPassword:`确认密码`,submit:`重置密码`,submitting:`重置中…`,passwordsMismatch:`两次输入的密码不一致`,missingToken:`缺少重置令牌`,invalidToken:`重置令牌无效或缺失。`,requestNewLink:`重新申请链接`,success:`密码重置成功`,failed:`重置密码失败`},verifyEmail:{missingToken:`缺少验证令牌。`,verificationFailed:`验证失败 ({{status}})`,verifyingTitle:`正在验证邮箱…`,verifyingDescription:`请稍候,正在验证你的邮箱地址。`,successTitle:`邮箱已验证`,successDescription:`你的邮箱已验证成功。`,signInLink:`登录你的账户`,errorTitle:`验证失败`,errorDescription:`验证链接无效或已过期。`,backToSignIn:`返回登录`},setup:{welcomeTitle:`初始化 ObjectStack`,successDescription:`你的所有者账户已创建。`,failed:`初始化失败`,description:`创建首个所有者账户。`,yourName:`您的姓名`,passwordHint:`至少 8 个字符`,orgName:`组织名称`,orgNamePlaceholder:`示例公司`,orgNameHint:`你之后可以重命名或添加更多组织。`,submit:`创建账户`,submitting:`正在创建所有者账户…`,footerNote:`此页面仅在首次启动时出现。完成初始化后,所有用户均按常规方式登录。`,orgSlug:`组织标识`,orgSlugHint:`URL 友好的标识符(根据名称自动生成)。`,inviteTeammates:`邀请团队成员`,inviteTeammatesHint:`可选。您可以稍后随时邀请。`,addInvite:`添加`,inviteEmpty:`暂无邀请 — 在上方添加团队成员。`,invitePartialFailure:`部分邀请发送失败`,invitePartialFailureDescription:`{{total}} 个邀请中有 {{failed}} 个未能发送。`,invitesSent:`已发送 {{count}} 个邀请`},device:{invalidTitle:`无效请求`,invalidDescription:`未提供用户码,请使用 CLI 提供的链接。`,loading:`加载中…`,approvedTitle:`CLI 已授权`,approvedDescription:`你可以关闭此页面。`,deniedTitle:`请求已拒绝`,deniedDescription:`CLI 登录请求已被拒绝。`,approveSuccess:`CLI 登录已批准`,approveSuccessDescription:`CLI 已通过身份验证。`,approveFailed:`批准失败`,denyFailed:`拒绝失败`,title:`CLI 登录请求`,subtitle:`为 {{email}} 批准 CLI 访问`,userCodeLabel:`用户码`,loggedInAs:`当前登录账户 {{email}}`,approve:`批准 CLI 访问`,approving:`批准中…`,deny:`拒绝`,denying:`拒绝中…`,cancel:`取消`},shell:{tenantHostHint:`你正在登录此工作区`},userMenu:{signingOut:`正在退出…`}},d={title:`组织邀请`,description:`你已被邀请加入一个组织。请在下方接受或拒绝。`,accept:`接受邀请`,accepting:`接受中…`,decline:`拒绝`,declining:`拒绝中…`,accepted:`邀请已接受`,acceptFailed:`接受邀请失败`,declined:`邀请已拒绝`,declineFailed:`拒绝邀请失败`},f={consent:{title:`授权 {{appName}}`,request:`{{appName}} 正在请求访问你的账户{{suffix}}。`,willAllow:`这将允许其:`,deny:`拒绝`,authorize:`授权`,submitting:`提交中…`,granted:`已授予权限`,denied:`已拒绝权限`,noRedirect:`服务器未返回重定向地址。`,failed:`提交授权失败`,unknownApp:`某个应用`,footer:`你可以随时在账户设置中撤销访问权限。`,scope:{openid:`验证你的身份`,profile:`访问你的基本资料信息`,email:`访问你的邮箱地址`,offlineAccess:`在你离线时保持访问`}},applications:{title:`OAuth 应用`,description:`注册应用,以便通过此服务器的 OpenID Connect 身份提供者认证用户。`,new:`新建应用`,register:`注册应用`,registering:`注册中…`,registered:`应用已注册`,registeredTitle:`应用已注册`,registeredDescription:`请立即复制客户端密钥,之后将无法再次查看。`,registerFailed:`注册应用失败`,deleted:`OAuth 应用已删除`,deleteFailed:`删除应用失败`,deleteDialogTitle:`删除 OAuth 应用?`,deleteDialogDescription:`这将永久删除 {{name}}。与该客户端关联的所有访问令牌和授权记录也会被撤销。此操作无法撤销。`,deleting:`删除中…`,disabled:`已禁用`,emptyTitle:`还没有 OAuth 应用`,emptyDescription:`注册一个应用以开始集成单点登录。`,credentials:`凭据`,credentialsDescription:`使用这些值来配置你的 OAuth/OIDC 客户端应用。`,credentialsDescriptionDetail:`客户端密钥只会在注册时显示一次。如需轮换,请删除此应用并重新注册。`,clientId:`客户端 ID`,clientSecret:`客户端密钥`,clientSecretWarning:`请立即保存此密钥,之后将无法再次获取。`,copied:`{{label}} 已复制到剪贴板`,copyFailed:`复制 {{label}} 失败`,backToList:`返回列表`,viewApplication:`查看应用`,notFoundTitle:`未找到应用`,notFoundDescription:`找不到使用该客户端 ID 的 OAuth 应用。`,redirectUris:`重定向 URI`,noRedirectUris:`未配置。`,dangerTitle:`危险操作`,dangerDescription:`删除此应用会撤销签发给它的所有访问令牌,并移除已记录的用户授权。`,delete:`删除应用`,form:{title:`注册 OAuth 应用`,description:`创建凭据,使外部应用可以通过此服务器认证用户。`,details:`应用详情`,name:`应用名称`,namePlaceholder:`我的超赞应用`,nameRequired:`名称不能为空`,redirectUris:`重定向 URI`,redirectPlaceholder:`https://app.example.com/callback`,redirectHint:`每行一个,或使用逗号分隔。必须与客户端在授权流程中使用的 URI 完全一致。`,redirectRequired:`至少需要一个重定向 URI`,authMethod:`令牌端点认证方式`,authMethodBasic:`client_secret_basic(推荐)`,authMethodPost:`client_secret_post`,authMethodNone:`none(公开客户端 / 仅 PKCE)`,clientUri:`应用地址(可选)`,clientUriPlaceholder:`https://app.example.com`,logoUri:`Logo 地址(可选)`,logoUriPlaceholder:`https://app.example.com/logo.png`,logoHint:`会在授权同意页展示给用户。`,registering:`注册中…`}}},p={title:`组织`,description:`选择一个组织开始工作,或创建新的组织。`,newOrganization:`新建组织`,loading:`加载中…`,emptyTitle:`暂无组织`,emptyDescription:`创建你的第一个组织,开始与团队协作。`,createOrganization:`创建组织`,active:`当前`,switchFailed:`切换组织失败`,new:{title:`新建组织`,description:`组织用于聚合项目、元数据、成员和资源。`,name:`名称`,namePlaceholder:`示例公司`,slug:`标识`,slugPlaceholder:`example-company`,slugHint:`仅小写字母和短横线,用于 URL 和 API。`,cancel:`取消`,submit:`创建组织`,submitting:`创建中…`,successToast:`组织已创建`,failed:`创建组织失败`},general:{switched:`组织已切换`,switchFailed:`切换组织失败`,nameRequired:`名称不能为空`,updated:`组织已更新`,updateFailed:`更新组织失败`,confirmationMismatch:`确认内容不匹配`,confirmationHint:`请输入 “{{name}}” 以确认删除。`,deleted:`组织已删除`,deletedWithWarnings:`已移除 {{deletedProjects}} 个项目。警告:{{warning}}`,deletedDescription:`已删除 {{name}} 以及 {{deletedProjects}} 个项目(包含它们的数据库)。`,deleteFailed:`删除组织失败`,setActive:`设为当前组织`,detailsTitle:`详情`,detailsDescription:`更新组织的显示名称、URL 标识和 Logo。`,detailsReadOnly:`只有所有者和管理员可以编辑这些信息。`,namePlaceholder:`示例公司`,slugPlaceholder:`example`,slugHint:`仅小写字母和短横线,用于 URL 和邀请链接。`,logo:`Logo 地址`,logoPlaceholder:`https://…`,organizationId:`组织 ID`,reset:`重置`,save:`保存修改`,overviewTitle:`概览`,members:`成员`,pendingInvitations:`待处理邀请`,dangerTitle:`危险操作`,dangerDescription:`永久删除该组织、其所有项目以及每个项目底层数据库。此操作无法撤销。`,delete:`删除组织`,deleteDialogTitle:`删除组织`,deleteDialogDescription:`这将永久删除 {{name}}、其所有项目以及每个项目底层数据库。成员和待处理邀请也会一并移除。此操作无法撤销。`,deleteDialogLabel:`输入 {{name}} 以确认`,deleting:`删除中…`},members:{title:`成员({{count}})`,description:`拥有该组织访问权限的成员`,invite:`邀请`,loadingMembers:`正在加载成员...`,empty:`还没有成员。邀请一位同事开始协作。`,inviteMember:`邀请成员`,removeMember:`移除成员`,pendingTitle:`待处理邀请({{count}})`,pendingDescription:`已发送的组织加入邀请`,sendInvitation:`发送邀请`,loadingInvitations:`正在加载邀请...`,noPending:`暂无待处理邀请`,pendingHint:`发送后邀请会显示在这里`,expires:`过期于 {{date}}`,inviteDialogTitle:`邀请成员`,inviteDialogDescription:`向 {{organization}} 发送加入邀请`,email:`邮箱地址`,emailPlaceholder:`colleague@example.com`,role:`角色`,roleHints:{owner:`拥有管理该组织的完整权限`,admin:`可以管理成员和设置,但不能删除组织`,member:`可以查看并使用组织资源`},emailRequired:`需要填写邮箱`,emailRequiredDescription:`请输入邮箱地址`,invitationSent:`邀请已成功发送`,inviteFailed:`发送邀请失败`,removeConfirm:`确定要将 {{name}} 从此组织中移除吗?`,memberRemoved:`成员已移除`,removeFailed:`移除成员失败`,cancelConfirm:`取消发送给 {{email}} 的邀请?`,invitationCanceled:`邀请已取消`,cancelFailed:`取消邀请失败`,sending:`发送中...`,you:`你`,leave:`退出`,leaveConfirm:`退出"{{org}}"?您将失去对该组织的访问权限。`,leftOrg:`您已退出该组织`,leaveFailed:`退出组织失败`,roleUpdated:`角色已更新`,roleUpdateFailed:`更新角色失败`,singleInvite:`单个`,bulkInvite:`批量`,bulkEmails:`邮箱地址`,bulkEmailsPlaceholder:`one@example.com
2
+ two@example.com`,bulkEmailsHint:`每行一个邮箱,或用逗号分隔。`,invitationResent:`邀请已重新发送`,resend:`重新发送`,resendFailed:`重新发送邀请失败`,copyLink:`复制邀请链接`,linkCopied:`邀请链接已复制`,linkCopyFailed:`复制链接失败`,cancel:`取消邀请`,invitePartialSuccess:`{{sent}} 个已发送,{{failed}} 个失败`}},m={agreementPrefix:`点击继续即表示你同意我们的`,termsOfService:`服务条款`,and:`和`,privacyPolicy:`隐私政策`},h={title:`邀请`,description:`您收到的待处理组织邀请。`,empty:`没有待处理的邀请。`,accept:`接受`,accepted:`已接受邀请`,acceptFailed:`接受邀请失败`,reject:`拒绝`,rejected:`已拒绝邀请`,rejectFailed:`拒绝邀请失败`,expires:`过期时间 {{date}}`},g={title:`关联账号`,description:`连接到您个人资料的社交和 OAuth 账号。`,empty:`暂无关联账号。`,unlink:`取消关联`,unlinkConfirm:`取消关联 {{provider}}?`,unlinked:`已取消关联`,unlinkFailed:`取消关联失败`,linkedOn:`关联于 {{date}}`,addTitle:`关联新账号`,addDescription:`连接其他登录方式以便快速登录。`,linkFailed:`关联失败`},_={title:`团队({{count}})`,description:`在组织内将成员分组为团队进行管理。`,empty:`暂无团队。`,create:`创建团队`,createTitle:`创建新团队`,createDescription:`团队可以帮助您对成员进行分组管理。`,created:`团队已创建`,createFailed:`创建团队失败`,nameLabel:`团队名称`,namePlaceholder:`例如:工程团队`,delete:`删除团队`,deleteConfirm:`删除团队"{{name}}"?此操作不可撤销。`,deleted:`团队已删除`,deleteFailed:`删除团队失败`,members:`成员({{count}})`,noMembers:`该团队暂无成员。`,addMember:`添加成员`,addMemberTitle:`添加团队成员`,addMemberDescription:`选择一位组织成员添加到此团队。`,selectMember:`成员`,selectMemberPlaceholder:`选择成员…`,memberAdded:`成员已添加到团队`,addMemberFailed:`添加成员失败`,memberRemoved:`成员已从团队移除`,removeMemberFailed:`移除成员失败`},v={common:e,topBar:t,sidebar:n,organizationSwitcher:r,userMenu:i,home:a,profile:o,security:s,sessions:c,twoFactor:l,auth:u,acceptInvitation:d,oauth:f,organizations:p,legal:m,invitations:h,linkedAccounts:g,teams:_};export{d as acceptInvitation,u as auth,e as common,v as default,a as home,h as invitations,m as legal,g as linkedAccounts,f as oauth,r as organizationSwitcher,p as organizations,o as profile,s as security,c as sessions,n as sidebar,_ as teams,t as topBar,l as twoFactor,i as userMenu};
package/dist/index.html CHANGED
@@ -8,10 +8,57 @@
8
8
  <link href="https://fonts.googleapis.com/css2?family=Inter:wght@100..900&display=swap" rel="stylesheet">
9
9
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
10
10
  <title>ObjectStack Account</title>
11
- <script type="module" crossorigin src="/_account/assets/index-PBGFddws.js"></script>
12
- <link rel="stylesheet" crossorigin href="/_account/assets/index-B9xsZR8o.css">
11
+ <!--
12
+ Boot skeleton.
13
+
14
+ The Account SPA bundle is ~1.3 MB gzipped and the i18n locale ships
15
+ separately, so on a cold load there's a 200–800 ms window between
16
+ `index.html` paint and React mounting our `AuthShell`. Without
17
+ something here the user sees either:
18
+ - a flash of blank white background, then
19
+ - a flash of `@object-ui/i18n`'s bundled-default zh translation
20
+ ("登录您的账户" with raw `auth.emailLabel` field labels), then
21
+ - the real form.
22
+
23
+ The skeleton below is intentionally framework-agnostic (no React, no
24
+ Tailwind) — pure inline CSS + a spinner — so it renders the instant
25
+ this document is parsed. React's first commit will replace
26
+ `#root`'s children, removing the skeleton automatically.
27
+ -->
28
+ <style>
29
+ html, body { margin: 0; padding: 0; height: 100%; background: #fff; font-family: Inter, system-ui, sans-serif; }
30
+ @media (prefers-color-scheme: dark) {
31
+ html, body { background: #0a0a0a; }
32
+ .boot-skeleton__label { color: #a3a3a3 !important; }
33
+ .boot-skeleton__spinner { border-color: #404040 !important; border-top-color: transparent !important; }
34
+ }
35
+ .boot-skeleton {
36
+ position: fixed; inset: 0;
37
+ display: flex; flex-direction: column;
38
+ align-items: center; justify-content: center;
39
+ gap: 12px;
40
+ }
41
+ .boot-skeleton__spinner {
42
+ width: 32px; height: 32px;
43
+ border: 2px solid #d4d4d4;
44
+ border-top-color: transparent;
45
+ border-radius: 50%;
46
+ animation: boot-skeleton-spin 0.8s linear infinite;
47
+ }
48
+ .boot-skeleton__label {
49
+ font-size: 13px; color: #737373;
50
+ }
51
+ @keyframes boot-skeleton-spin { to { transform: rotate(360deg); } }
52
+ </style>
53
+ <script type="module" crossorigin src="/_account/assets/index-mLKtvFJI.js"></script>
54
+ <link rel="stylesheet" crossorigin href="/_account/assets/index-Bdj8EUtE.css">
13
55
  </head>
14
56
  <body>
15
- <div id="root"></div>
57
+ <div id="root">
58
+ <div class="boot-skeleton" aria-hidden="true">
59
+ <div class="boot-skeleton__spinner"></div>
60
+ <div class="boot-skeleton__label">Loading…</div>
61
+ </div>
62
+ </div>
16
63
  </body>
17
64
  </html>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@objectstack/account",
3
- "version": "5.0.0",
3
+ "version": "5.2.0",
4
4
  "description": "ObjectStack Account - End-user account & organization self-service portal",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -11,7 +11,7 @@
11
11
  "access": "public"
12
12
  },
13
13
  "dependencies": {
14
- "@object-ui/i18n": "^5.1.1",
14
+ "@object-ui/i18n": "^5.2.1",
15
15
  "@radix-ui/react-avatar": "^1.1.11",
16
16
  "@radix-ui/react-checkbox": "^1.3.3",
17
17
  "@radix-ui/react-collapsible": "^1.1.12",
@@ -34,9 +34,9 @@
34
34
  "react-dom": "^19.2.6",
35
35
  "react-resizable-panels": "^4.11.1",
36
36
  "tailwind-merge": "^3.6.0",
37
- "@objectstack/client": "5.0.0",
38
- "@objectstack/client-react": "5.0.0",
39
- "@objectstack/spec": "5.0.0"
37
+ "@objectstack/client": "5.2.0",
38
+ "@objectstack/client-react": "5.2.0",
39
+ "@objectstack/spec": "5.2.0"
40
40
  },
41
41
  "devDependencies": {
42
42
  "@tailwindcss/postcss": "^4.3.0",
@@ -1,2 +0,0 @@
1
- var e={save:`Save`,cancel:`Cancel`,delete:`Delete`,edit:`Edit`,create:`Create`,loading:`Loading...`,submit:`Submit`,confirm:`Confirm`,back:`Back`,next:`Next`,yes:`Yes`,no:`No`,english:`English`,chinese:`中文`,language:`Language`,theme:`Theme`,light:`Light`,dark:`Dark`,system:`System`,toggleTheme:`Toggle theme`,saving:`Saving…`,roles:{owner:`Owner`,admin:`Admin`,member:`Member`}},t={accountHome:`Account home`,brand:`ObjectStack Account`,breadcrumb:{account:`Account`,profile:`Profile`,security:`Security`,sessions:`Sessions`,twoFactor:`Two-Factor`,organizations:`Organizations`,oauthApps:`OAuth Apps`,new:`New`,general:`General`,members:`Members`,settings:`Settings`,acceptInvitation:`Accept invitation`,deviceAuthorization:`Device authorization`}},n={groups:{account:`Account`,organization:`Organization`,developer:`Developer`},items:{home:`Home`,profile:`Profile`,security:`Security`,sessions:`Sessions`,twoFactor:`Two-Factor`,overview:`Overview`,general:`General`,members:`Members`,oauthApps:`OAuth Apps`,invitations:`Invitations`,linkedAccounts:`Linked Accounts`,teams:`Teams`},expand:`Expand sidebar`,collapse:`Collapse sidebar`},r={select:`Select organization`,new:`New organization…`,manage:`Manage organizations`},i={user:`User`,signIn:`Sign in`,account:`Account`,organizations:`Organizations`,signOut:`Sign out`},a={welcome:`Welcome back`,verified:`Verified`,quickAccess:`Quick access`,stats:{score:`Security score`,orgs:`Organizations`,twoFactor:`Two-factor auth`,enabled:`Enabled`,disabled:`Disabled`,manage:`Manage`,review:`Review`,enable:`Enable now`},tiles:{profile:{title:`Profile`,description:`Display name, avatar and contact info.`},security:{title:`Security`,description:`Change your password and review activity.`},twoFactor:{title:`Two-factor auth`,description:`Add an authenticator app for stronger sign-in.`},sessions:{title:`Active sessions`,description:`See and revoke devices that are signed in.`},linked:{title:`Linked accounts`,description:`Manage your social and SSO providers.`},oauth:{title:`OAuth applications`,description:`Apps you have authorised to access your account.`}}},o={title:`Profile`,description:`Update your display name.`,email:`Email`,name:`Name`,namePlaceholder:`Your name`,save:`Save changes`,updated:`Profile updated`,updateFailed:`Failed to update profile`,changeAvatar:`Change avatar`,avatarUploading:`Uploading…`,avatarHint:`JPG, PNG or GIF. Max 2 MB.`,avatarUpdated:`Avatar updated`,avatarUploadFailed:`Failed to upload avatar`,avatarStorageUnavailable:`Storage service unavailable`},s={title:`Change password`,description:`Update your account password.`,currentPassword:`Current password`,newPassword:`New password`,confirmPassword:`Confirm new password`,submit:`Change password`,passwordsMismatch:`Passwords do not match`,changed:`Password changed`,changeFailed:`Failed to change password`,revokeOtherSessions:`Also revoke all other sessions`,email:{title:`Change email`,description:`Update the email address associated with your account.`,current:`Current email`,new:`New email address`,placeholder:`new@example.com`,submit:`Change email`,requested:`Verification email sent to your new address`,requestFailed:`Failed to change email`},delete:{title:`Delete account`,description:`Permanently delete your account and all associated data. This action cannot be undone.`,dialogTitle:`Are you absolutely sure?`,confirm:`Type your email to confirm: {{email}}`,confirmationMismatch:`Email does not match`,password:`Enter your password to confirm`,cta:`Delete my account`,success:`Account deleted`,failed:`Failed to delete account`}},c={title:`Active sessions`,description:`Manage devices that are signed in to your account.`,revokeOthers:`Revoke all others`,revokingOthers:`Revoking…`,loading:`Loading sessions…`,empty:`No active sessions found.`,unknownDevice:`Unknown device`,expires:`Expires {{date}}`,loadFailed:`Failed to load sessions`,revoked:`Session revoked`,revokeFailed:`Failed to revoke session`,othersRevoked:`Other sessions revoked`,revokeOthersFailed:`Failed to revoke sessions`,current:`Current session`},l={title:`Two-factor authentication`,loadingStatus:`Loading status…`,setupTitle:`Set up two-factor authentication`,setupDescription:`Scan the QR code with your authenticator app, then enter the verification code.`,qrAlt:`TOTP QR code`,uriHint:`Copy this URI into your authenticator app if you cannot scan the QR code.`,verificationCode:`Verification code`,verify:`Verify and enable`,verifying:`Verifying…`,cancel:`Cancel`,enabled:`Enabled`,notEnabled:`Not enabled`,enabledDescription:`Your account is protected with 2FA. Enter your password to disable it.`,notEnabledDescription:`Add an extra layer of security to your account using a TOTP authenticator app.`,password:`Password`,passwordPlaceholder:`Confirm with your account password`,enable:`Enable 2FA`,loading:`Loading…`,disable:`Disable 2FA`,disabling:`Disabling…`,enableSuccess:`Two-factor authentication enabled`,disableSuccess:`Two-factor authentication disabled`,enableFailed:`Failed to enable 2FA`,disableFailed:`Failed to disable 2FA`,invalidCode:`Invalid code`,trustDevice:`Trust this device`,backupCodes:{title:`Backup codes`,description:`Use backup codes to sign in if you lose access to your authenticator app.`,savedTitle:`Save these backup codes`,savedHint:`Store these codes in a safe place. Each code can only be used once.`,newTitle:`New backup codes generated`,regenerate:`Regenerate backup codes`,regenerated:`Backup codes regenerated`,regenerateFailed:`Failed to regenerate backup codes`,copy:`Copy`,copied:`Backup codes copied to clipboard`,copyFailed:`Failed to copy to clipboard`}},u={emailLabel:`Email`,passwordLabel:`Password`,nameLabel:`Name`,emailPlaceholder:`m@example.com`,social:{continueWith:`Continue with`,signUpWith:`Sign up with`,orContinueEmail:`or continue with email`},login:{title:`Welcome back`,description:`Access your ObjectStack account.`,forgotPassword:`Forgot your password?`,submit:`Login`,submitting:`Signing in…`,noAccount:`Don't have an account?`,signUp:`Sign up`,welcomeToast:`Welcome back`,failed:`Sign in failed`,brandHeadline:`The AI-native backend for business software.`,brandSubline:`One identity, every workspace. Sign in to manage your account, organizations and connected apps.`},register:{title:`Create an account`,description:`Join ObjectStack.`,submit:`Create account`,submitting:`Creating…`,haveAccount:`Already have an account?`,signIn:`Sign in`,successToast:`Account created`,failed:`Sign up failed`},forgotPassword:{checkEmailTitle:`Check your email`,checkEmailDescription:`If an account exists for {{email}}, you'll receive a password reset link shortly.`,backToSignIn:`Back to sign in`,title:`Forgot password`,description:`Enter your email and we'll send you a reset link.`,submit:`Send reset link`,submitting:`Sending…`,rememberPassword:`Remember your password?`,signIn:`Sign in`,failed:`Failed to send reset email`},resetPassword:{title:`Reset password`,description:`Choose a new password for your account.`,newPassword:`New password`,confirmPassword:`Confirm password`,submit:`Reset password`,submitting:`Resetting…`,passwordsMismatch:`Passwords do not match`,missingToken:`Missing reset token`,invalidToken:`Invalid or missing reset token.`,requestNewLink:`Request a new link`,success:`Password reset successfully`,failed:`Failed to reset password`},verifyEmail:{missingToken:`Missing verification token.`,verificationFailed:`Verification failed ({{status}})`,verifyingTitle:`Verifying email…`,verifyingDescription:`Please wait while we verify your email address.`,successTitle:`Email verified`,successDescription:`Your email has been verified successfully.`,signInLink:`Sign in to your account`,errorTitle:`Verification failed`,errorDescription:`The verification link is invalid or has expired.`,backToSignIn:`Back to sign in`},setup:{welcomeTitle:`Set up ObjectStack`,successDescription:`Your owner account has been created.`,failed:`Setup failed`,description:`Create the first owner account.`,yourName:`Your name`,passwordHint:`At least 8 characters`,orgName:`Organization name`,orgNamePlaceholder:`Acme Corp`,orgNameHint:`You can rename or add more organizations later.`,submit:`Create account`,submitting:`Creating owner account…`,footerNote:`This screen only appears on first launch. After setup, all users sign in normally.`,orgSlug:`Organization slug`,orgSlugHint:`URL-friendly identifier (auto-generated from name).`,inviteTeammates:`Invite teammates`,inviteTeammatesHint:`Optional. You can always invite people later.`,addInvite:`Add`,inviteEmpty:`No invitations yet — add teammates above.`,invitePartialFailure:`Some invitations failed`,invitePartialFailureDescription:`{{failed}} of {{total}} invitations could not be sent.`,invitesSent:`{{count}} invitation(s) sent`},device:{invalidTitle:`Invalid Request`,invalidDescription:`No user code provided. Please use the link from the CLI.`,loading:`Loading…`,approvedTitle:`CLI Authorized`,approvedDescription:`You can close this tab.`,deniedTitle:`Request Denied`,deniedDescription:`The CLI login request has been denied.`,approveSuccess:`CLI login approved`,approveSuccessDescription:`The CLI has been authenticated.`,approveFailed:`Approval failed`,denyFailed:`Deny failed`,title:`CLI Login Request`,subtitle:`Approve CLI access for {{email}}`,userCodeLabel:`User Code`,loggedInAs:`Logged in as {{email}}`,approve:`Approve CLI Access`,approving:`Approving…`,deny:`Deny`,denying:`Denying…`,cancel:`Cancel`}},d={title:`Organization invitation`,description:`You have been invited to join an organization. Accept or decline below.`,accept:`Accept invitation`,accepting:`Accepting…`,decline:`Decline`,declining:`Declining…`,accepted:`Invitation accepted`,acceptFailed:`Failed to accept invitation`,declined:`Invitation declined`,declineFailed:`Failed to decline invitation`},f={consent:{title:`Authorize {{appName}}`,request:`{{appName}} is requesting access to your account{{suffix}}.`,willAllow:`This will allow it to:`,deny:`Deny`,authorize:`Authorize`,submitting:`Submitting…`,granted:`Consent granted`,denied:`Consent denied`,noRedirect:`No redirect URL returned by the server.`,failed:`Failed to submit consent`,unknownApp:`an application`,footer:`You can revoke access any time from your account settings.`,scope:{openid:`Verify your identity`,profile:`Access your basic profile information`,email:`Access your email address`,offlineAccess:`Maintain access while you are offline`}},applications:{title:`OAuth Applications`,description:`Register applications to authenticate users through this server's OpenID Connect identity provider.`,new:`New application`,register:`Register application`,registering:`Registering…`,registered:`Application registered`,registeredTitle:`Application registered`,registeredDescription:`Copy the client secret now — it cannot be displayed again.`,registerFailed:`Failed to register application`,deleted:`OAuth application deleted`,deleteFailed:`Failed to delete application`,deleteDialogTitle:`Delete OAuth application?`,deleteDialogDescription:`This will permanently delete {{name}}. All access tokens and consents associated with this client will also be revoked. This action cannot be undone.`,deleting:`Deleting…`,disabled:`Disabled`,emptyTitle:`No OAuth applications yet`,emptyDescription:`Register an application to start integrating SSO.`,credentials:`Credentials`,credentialsDescription:`Use these values to configure the OAuth/OIDC client in your application.`,credentialsDescriptionDetail:`The client secret was shown only once at registration. To rotate it, delete this application and register a new one.`,clientId:`Client ID`,clientSecret:`Client Secret`,clientSecretWarning:`Save this secret now — it cannot be retrieved later.`,copied:`{{label}} copied to clipboard`,copyFailed:`Failed to copy {{label}}`,backToList:`Back to list`,viewApplication:`View application`,notFoundTitle:`Application not found`,notFoundDescription:`We couldn't find an OAuth application with that client ID.`,redirectUris:`Redirect URIs`,noRedirectUris:`None configured.`,dangerTitle:`Danger zone`,dangerDescription:`Deleting this application revokes all access tokens issued to it and removes any recorded user consents.`,delete:`Delete application`,form:{title:`Register OAuth application`,description:`Create credentials so an external app can authenticate users via this server.`,details:`Application details`,name:`Application name`,namePlaceholder:`My Awesome App`,nameRequired:`Name is required`,redirectUris:`Redirect URIs`,redirectPlaceholder:`https://app.example.com/callback`,redirectHint:`One per line, or comma-separated. Must exactly match the URI the client uses during the authorization flow.`,redirectRequired:`At least one redirect URI is required`,authMethod:`Token endpoint auth method`,authMethodBasic:`client_secret_basic (recommended)`,authMethodPost:`client_secret_post`,authMethodNone:`none (public client / PKCE only)`,clientUri:`Application URL (optional)`,clientUriPlaceholder:`https://app.example.com`,logoUri:`Logo URL (optional)`,logoUriPlaceholder:`https://app.example.com/logo.png`,logoHint:`Shown to users on the consent screen.`,registering:`Registering…`}}},p={title:`Organizations`,description:`Select an organization to work with, or create a new one.`,newOrganization:`New organization`,loading:`Loading…`,emptyTitle:`No organizations yet`,emptyDescription:`Create your first organization to start collaborating with your team.`,createOrganization:`Create organization`,active:`Active`,switchFailed:`Failed to switch organization`,new:{title:`New organization`,description:`Organizations group projects, metadata, members, and resources together.`,name:`Name`,namePlaceholder:`Acme Corp`,slug:`Slug`,slugPlaceholder:`acme-corp`,slugHint:`Lowercase, dashes only. Used in URLs and APIs.`,cancel:`Cancel`,submit:`Create organization`,submitting:`Creating…`,successToast:`Organization created`,failed:`Failed to create organization`},general:{switched:`Organization switched`,switchFailed:`Failed to switch organization`,nameRequired:`Name is required`,updated:`Organization updated`,updateFailed:`Failed to update organization`,confirmationMismatch:`Confirmation does not match`,confirmationHint:`Type "{{name}}" to confirm deletion.`,deleted:`Organization deleted`,deletedWithWarnings:`Removed {{deletedProjects}} project(s). Warning: {{warning}}`,deletedDescription:`{{name}} and {{deletedProjects}} project(s) (with their databases) have been removed.`,deleteFailed:`Failed to delete organization`,setActive:`Set as active`,detailsTitle:`Details`,detailsDescription:`Update your organization's display name, URL slug, and logo.`,detailsReadOnly:`Only owners and admins can edit these details.`,namePlaceholder:`Acme Inc.`,slugPlaceholder:`acme`,slugHint:`Lowercase, dash-separated. Used in URLs and invitations.`,logo:`Logo URL`,logoPlaceholder:`https://…`,organizationId:`Organization ID`,reset:`Reset`,save:`Save changes`,overviewTitle:`At a glance`,members:`Members`,pendingInvitations:`Pending invitations`,dangerTitle:`Danger zone`,dangerDescription:`Permanently delete this organization, all of its projects, and every project's underlying database. This action cannot be undone.`,delete:`Delete organization`,deleteDialogTitle:`Delete organization`,deleteDialogDescription:`This will permanently delete {{name}}, all of its projects, and every project's underlying database. Members and pending invitations will be removed. This action cannot be undone.`,deleteDialogLabel:`Type {{name}} to confirm`,deleting:`Deleting…`},members:{title:`Members ({{count}})`,description:`People with access to this organization`,invite:`Invite`,loadingMembers:`Loading members...`,empty:`No members yet. Invite someone to get started.`,inviteMember:`Invite member`,removeMember:`Remove member`,pendingTitle:`Pending invitations ({{count}})`,pendingDescription:`Invitations sent to join this organization`,sendInvitation:`Send invitation`,loadingInvitations:`Loading invitations...`,noPending:`No pending invitations`,pendingHint:`Invitations will appear here once sent`,expires:`Expires {{date}}`,inviteDialogTitle:`Invite member`,inviteDialogDescription:`Send an invitation to join {{organization}}`,email:`Email address`,emailPlaceholder:`colleague@example.com`,role:`Role`,roleHints:{owner:`Full access to manage the organization`,admin:`Can manage members and settings, but cannot delete the organization`,member:`Can view and use organization resources`},emailRequired:`Email required`,emailRequiredDescription:`Please enter an email address`,invitationSent:`Invitation sent successfully`,inviteFailed:`Failed to send invitation`,removeConfirm:`Are you sure you want to remove {{name}} from this organization?`,memberRemoved:`Member removed successfully`,removeFailed:`Failed to remove member`,cancelConfirm:`Cancel invitation for {{email}}?`,invitationCanceled:`Invitation canceled`,cancelFailed:`Failed to cancel invitation`,sending:`Sending...`,you:`You`,leave:`Leave`,leaveConfirm:`Leave "{{org}}"? You will lose access to this organization.`,leftOrg:`You have left the organization`,leaveFailed:`Failed to leave organization`,roleUpdated:`Role updated`,roleUpdateFailed:`Failed to update role`,singleInvite:`Single`,bulkInvite:`Bulk`,bulkEmails:`Email addresses`,bulkEmailsPlaceholder:`one@example.com
2
- two@example.com`,bulkEmailsHint:`One email per line, or separated by commas.`,invitationResent:`Invitation resent`,resend:`Resend`,resendFailed:`Failed to resend invitation`,copyLink:`Copy invite link`,linkCopied:`Invite link copied`,linkCopyFailed:`Failed to copy link`,cancel:`Cancel invitation`,invitePartialSuccess:`{{sent}} sent, {{failed}} failed`}},m={agreementPrefix:`By clicking continue, you agree to our`,termsOfService:`Terms of Service`,and:`and`,privacyPolicy:`Privacy Policy`},h={title:`Invitations`,description:`Pending organization invitations sent to you.`,empty:`No pending invitations.`,accept:`Accept`,accepted:`Invitation accepted`,acceptFailed:`Failed to accept invitation`,reject:`Reject`,rejected:`Invitation rejected`,rejectFailed:`Failed to reject invitation`,expires:`Expires {{date}}`},g={title:`Linked accounts`,description:`Social and OAuth accounts connected to your profile.`,empty:`No linked accounts.`,unlink:`Unlink`,unlinkConfirm:`Unlink {{provider}}?`,unlinked:`Account unlinked`,unlinkFailed:`Failed to unlink account`,linkedOn:`Linked on {{date}}`,addTitle:`Link a new account`,addDescription:`Connect additional providers for quick sign-in.`,linkFailed:`Failed to initiate linking`},_={title:`Teams ({{count}})`,description:`Organize members into teams within this organization.`,empty:`No teams yet.`,create:`Create team`,createTitle:`Create a new team`,createDescription:`Teams let you group members for easier management.`,created:`Team created`,createFailed:`Failed to create team`,nameLabel:`Team name`,namePlaceholder:`e.g. Engineering`,delete:`Delete team`,deleteConfirm:`Delete team "{{name}}"? This cannot be undone.`,deleted:`Team deleted`,deleteFailed:`Failed to delete team`,members:`Members ({{count}})`,noMembers:`No members in this team.`,addMember:`Add member`,addMemberTitle:`Add member to team`,addMemberDescription:`Select an organization member to add to this team.`,selectMember:`Member`,selectMemberPlaceholder:`Select a member…`,memberAdded:`Member added to team`,addMemberFailed:`Failed to add member`,memberRemoved:`Member removed from team`,removeMemberFailed:`Failed to remove member`},v={common:e,topBar:t,sidebar:n,organizationSwitcher:r,userMenu:i,home:a,profile:o,security:s,sessions:c,twoFactor:l,auth:u,acceptInvitation:d,oauth:f,organizations:p,legal:m,invitations:h,linkedAccounts:g,teams:_};export{d as acceptInvitation,u as auth,e as common,v as default,a as home,h as invitations,m as legal,g as linkedAccounts,f as oauth,r as organizationSwitcher,p as organizations,o as profile,s as security,c as sessions,n as sidebar,_ as teams,t as topBar,l as twoFactor,i as userMenu};
@@ -1,2 +0,0 @@
1
- /*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */
2
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:""}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--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-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-600:oklch(57.7% .245 27.325);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-600:oklch(66.6% .179 58.318);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-emerald-600:oklch(59.6% .145 163.225);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-lg:32rem;--container-3xl:48rem;--container-4xl:56rem;--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);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-tight:-.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-tight:1.25;--leading-relaxed:1.625;--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-3xl:64px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:hsl(var(--border));outline-color:hsl(var(--ring))}@supports (color:color-mix(in lab, red, red)){*{outline-color:color-mix(in oklab, hsl(var(--ring)) 50%, transparent)}}body{background-color:hsl(var(--background));color:hsl(var(--foreground));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-feature-settings:"rlig" 1, "calt" 1, "ss01" 1}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.inset-x-0{inset-inline:calc(var(--spacing) * 0)}.inset-y-0{inset-block:calc(var(--spacing) * 0)}.top-0{top:calc(var(--spacing) * 0)}.top-1\.5{top:calc(var(--spacing) * 1.5)}.top-1\/3{top:33.3333%}.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-\[50\%\]{top:50%}.-right-20{right:calc(var(--spacing) * -20)}.right-0{right:calc(var(--spacing) * 0)}.right-1{right:calc(var(--spacing) * 1)}.right-2{right:calc(var(--spacing) * 2)}.right-3{right:calc(var(--spacing) * 3)}.right-4{right:calc(var(--spacing) * 4)}.-bottom-20{bottom:calc(var(--spacing) * -20)}.bottom-0{bottom:calc(var(--spacing) * 0)}.-left-24{left:calc(var(--spacing) * -24)}.left-0{left:calc(var(--spacing) * 0)}.left-2{left:calc(var(--spacing) * 2)}.left-\[50\%\]{left:50%}.z-10{z-index:10}.z-20{z-index:20}.z-30{z-index:30}.z-50{z-index:50}.z-\[100\]{z-index:100}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.mx-1{margin-inline:calc(var(--spacing) * 1)}.mx-2{margin-inline:calc(var(--spacing) * 2)}.mx-3\.5{margin-inline:calc(var(--spacing) * 3.5)}.mx-auto{margin-inline:auto}.my-1{margin-block:calc(var(--spacing) * 1)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-4{margin-top:calc(var(--spacing) * 4)}.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)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-3{margin-left:calc(var(--spacing) * 3)}.ml-auto{margin-left:auto}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.aspect-square{aspect-ratio:1}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-5{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-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-16{width:calc(var(--spacing) * 16);height:calc(var(--spacing) * 16)}.size-20{width:calc(var(--spacing) * 20);height:calc(var(--spacing) * 20)}.size-\[24rem\]{width:24rem;height:24rem}.size-\[28rem\]{width:28rem;height:28rem}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-12{height:calc(var(--spacing) * 12)}.h-14{height:calc(var(--spacing) * 14)}.h-24{height:calc(var(--spacing) * 24)}.h-\[1px\]{height:1px}.h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.h-full{height:100%}.h-px{height:1px}.h-svh{height:100svh}.max-h-96{max-height:calc(var(--spacing) * 96)}.max-h-screen{max-height:100vh}.min-h-0{min-height:calc(var(--spacing) * 0)}.min-h-\[60px\]{min-height:60px}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-0{width:calc(var(--spacing) * 0)}.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-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-8{width:calc(var(--spacing) * 8)}.w-9{width:calc(var(--spacing) * 9)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-24{width:calc(var(--spacing) * 24)}.w-32{width:calc(var(--spacing) * 32)}.w-40{width:calc(var(--spacing) * 40)}.w-48{width:calc(var(--spacing) * 48)}.w-64{width:calc(var(--spacing) * 64)}.w-\[1px\]{width:1px}.w-\[280px\]{width:280px}.w-\[var\(--sidebar-width\)\]{width:var(--sidebar-width)}.w-\[var\(--sidebar-width-icon\)\]{width:var(--sidebar-width-icon)}.w-auto{width:auto}.w-full{width:100%}.w-px{width:1px}.max-w-3xl{max-width:var(--container-3xl)}.max-w-4xl{max-width:var(--container-4xl)}.max-w-\[160px\]{max-width:160px}.max-w-\[var\(--skeleton-width\)\]{max-width:var(--skeleton-width)}.max-w-lg{max-width:var(--container-lg)}.max-w-md{max-width:var(--container-md)}.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-\[8rem\]{min-width:8rem}.min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.caption-bottom{caption-side:bottom}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);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-\[-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-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-0{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.rotate-0{rotate:0deg}.rotate-90{rotate:90deg}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.touch-none{touch-action:none}.appearance-none{appearance:none}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-col-reverse{flex-direction:column-reverse}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-3{-moz-column-gap:calc(var(--spacing) * 3);column-gap:calc(var(--spacing) * 3)}:where(.space-x-4>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse)))}.gap-y-1{row-gap:calc(var(--spacing) * 1)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}.self-center{align-self:center}.self-start{align-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.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-sm{border-radius:calc(var(--radius) - 4px)}.rounded-xl{border-radius:calc(var(--radius) + 4px)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-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-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-border\/60{border-color:hsl(var(--border))}@supports (color:color-mix(in lab, red, red)){.border-border\/60{border-color:color-mix(in oklab, hsl(var(--border)) 60%, transparent)}}.border-destructive,.border-destructive\/40{border-color:hsl(var(--destructive))}@supports (color:color-mix(in lab, red, red)){.border-destructive\/40{border-color:color-mix(in oklab, hsl(var(--destructive)) 40%, transparent)}}.border-input{border-color:hsl(var(--input))}.border-muted{border-color:hsl(var(--muted))}.border-muted-foreground,.border-muted-foreground\/20{border-color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab, red, red)){.border-muted-foreground\/20{border-color:color-mix(in oklab, hsl(var(--muted-foreground)) 20%, transparent)}}.border-primary,.border-primary\/40{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab, red, red)){.border-primary\/40{border-color:color-mix(in oklab, hsl(var(--primary)) 40%, transparent)}}.border-primary\/50{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab, red, red)){.border-primary\/50{border-color:color-mix(in oklab, hsl(var(--primary)) 50%, transparent)}}.border-sidebar-border{border-color:hsl(var(--sidebar-border))}.border-transparent{border-color:#0000}.border-white\/30{border-color:#ffffff4d}@supports (color:color-mix(in lab, red, red)){.border-white\/30{border-color:color-mix(in oklab, var(--color-white) 30%, transparent)}}.border-t-primary{border-top-color:hsl(var(--primary))}.border-t-transparent{border-top-color:#0000}.border-l-transparent{border-left-color:#0000}.bg-background,.bg-background\/80{background-color:hsl(var(--background))}@supports (color:color-mix(in lab, red, red)){.bg-background\/80{background-color:color-mix(in oklab, hsl(var(--background)) 80%, transparent)}}.bg-black\/80{background-color:#000c}@supports (color:color-mix(in lab, red, red)){.bg-black\/80{background-color:color-mix(in oklab, var(--color-black) 80%, transparent)}}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-destructive,.bg-destructive\/5{background-color:hsl(var(--destructive))}@supports (color:color-mix(in lab, red, red)){.bg-destructive\/5{background-color:color-mix(in oklab, hsl(var(--destructive)) 5%, transparent)}}.bg-destructive\/10{background-color:hsl(var(--destructive))}@supports (color:color-mix(in lab, red, red)){.bg-destructive\/10{background-color:color-mix(in oklab, hsl(var(--destructive)) 10%, transparent)}}.bg-emerald-500\/10{background-color:#00bb7f1a}@supports (color:color-mix(in lab, red, red)){.bg-emerald-500\/10{background-color:color-mix(in oklab, var(--color-emerald-500) 10%, transparent)}}.bg-emerald-500\/15{background-color:#00bb7f26}@supports (color:color-mix(in lab, red, red)){.bg-emerald-500\/15{background-color:color-mix(in oklab, var(--color-emerald-500) 15%, transparent)}}.bg-muted,.bg-muted\/40{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab, red, red)){.bg-muted\/40{background-color:color-mix(in oklab, hsl(var(--muted)) 40%, transparent)}}.bg-muted\/50{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab, red, red)){.bg-muted\/50{background-color:color-mix(in oklab, hsl(var(--muted)) 50%, transparent)}}.bg-popover{background-color:hsl(var(--popover))}.bg-primary{background-color:hsl(var(--primary))}.bg-secondary{background-color:hsl(var(--secondary))}.bg-sidebar{background-color:hsl(var(--sidebar-background))}.bg-sidebar-border{background-color:hsl(var(--sidebar-border))}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/10{background-color:#ffffff1a}@supports (color:color-mix(in lab, red, red)){.bg-white\/10{background-color:color-mix(in oklab, var(--color-white) 10%, transparent)}}.bg-white\/15{background-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.bg-white\/15{background-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.bg-white\/20{background-color:#fff3}@supports (color:color-mix(in lab, red, red)){.bg-white\/20{background-color:color-mix(in oklab, var(--color-white) 20%, transparent)}}.fill-current{fill:currentColor}.p-0{padding:calc(var(--spacing) * 0)}.p-1{padding:calc(var(--spacing) * 1)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.p-10{padding:calc(var(--spacing) * 10)}.p-12{padding:calc(var(--spacing) * 12)}.p-\[1px\]{padding:1px}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.pt-0{padding-top:calc(var(--spacing) * 0)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-12{padding-top:calc(var(--spacing) * 12)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-8{padding-right:calc(var(--spacing) * 8)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-8{padding-left:calc(var(--spacing) * 8)}.text-center{text-align:center}.text-left{text-align:left}.align-middle{vertical-align:middle}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-base\/relaxed{font-size:var(--text-base);line-height:var(--leading-relaxed)}.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-xs\/6{font-size:var(--text-xs);line-height:calc(var(--spacing) * 6)}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-none{--tw-leading:1;line-height:1}.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-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-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.text-balance{text-wrap:balance}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.text-amber-600{color:var(--color-amber-600)}.text-card-foreground{color:hsl(var(--card-foreground))}.text-current{color:currentColor}.text-destructive{color:hsl(var(--destructive))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-emerald-500{color:var(--color-emerald-500)}.text-emerald-600{color:var(--color-emerald-600)}.text-foreground,.text-foreground\/50{color:hsl(var(--foreground))}@supports (color:color-mix(in lab, red, red)){.text-foreground\/50{color:color-mix(in oklab, hsl(var(--foreground)) 50%, transparent)}}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-muted-foreground,.text-muted-foreground\/50{color:hsl(var(--muted-foreground))}@supports (color:color-mix(in lab, red, red)){.text-muted-foreground\/50{color:color-mix(in oklab, hsl(var(--muted-foreground)) 50%, transparent)}}.text-popover-foreground{color:hsl(var(--popover-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.text-sidebar-foreground,.text-sidebar-foreground\/70{color:hsl(var(--sidebar-foreground))}@supports (color:color-mix(in lab, red, red)){.text-sidebar-foreground\/70{color:color-mix(in oklab, hsl(var(--sidebar-foreground)) 70%, transparent)}}.text-white{color:var(--color-white)}.text-white\/60{color:#fff9}@supports (color:color-mix(in lab, red, red)){.text-white\/60{color:color-mix(in oklab, var(--color-white) 60%, transparent)}}.text-white\/70{color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.text-white\/70{color:color-mix(in oklab, var(--color-white) 70%, transparent)}}.text-white\/80{color:#fffc}@supports (color:color-mix(in lab, red, red)){.text-white\/80{color:color-mix(in oklab, var(--color-white) 80%, transparent)}}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.underline-offset-4{text-underline-offset:4px}.opacity-0{opacity:0}.opacity-30{opacity:.3}.opacity-40{opacity:.4}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.opacity-70{opacity:.7}.opacity-90{opacity:.9}.opacity-\[0\.12\]{opacity:.12}.mix-blend-soft-light{mix-blend-mode:soft-light}.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)}.ring-0{--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)}.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-4{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-primary\/5{--tw-shadow-color:hsl(var(--primary))}@supports (color:color-mix(in lab, red, red)){.shadow-primary\/5{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, hsl(var(--primary)) 5%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-primary\/10{--tw-shadow-color:hsl(var(--primary))}@supports (color:color-mix(in lab, red, red)){.shadow-primary\/10{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, hsl(var(--primary)) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-primary\/20{--tw-shadow-color:hsl(var(--primary))}@supports (color:color-mix(in lab, red, red)){.shadow-primary\/20{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, hsl(var(--primary)) 20%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-primary\/30{--tw-shadow-color:hsl(var(--primary))}@supports (color:color-mix(in lab, red, red)){.shadow-primary\/30{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, hsl(var(--primary)) 30%, transparent) var(--tw-shadow-alpha), transparent)}}.ring-card{--tw-ring-color:hsl(var(--card))}.ring-destructive\/30{--tw-ring-color:hsl(var(--destructive))}@supports (color:color-mix(in lab, red, red)){.ring-destructive\/30{--tw-ring-color:color-mix(in oklab, hsl(var(--destructive)) 30%, transparent)}}.ring-emerald-500\/30{--tw-ring-color:#00bb7f4d}@supports (color:color-mix(in lab, red, red)){.ring-emerald-500\/30{--tw-ring-color:color-mix(in oklab, var(--color-emerald-500) 30%, transparent)}}.ring-primary\/10{--tw-ring-color:hsl(var(--primary))}@supports (color:color-mix(in lab, red, red)){.ring-primary\/10{--tw-ring-color:color-mix(in oklab, hsl(var(--primary)) 10%, transparent)}}.ring-primary\/15{--tw-ring-color:hsl(var(--primary))}@supports (color:color-mix(in lab, red, red)){.ring-primary\/15{--tw-ring-color:color-mix(in oklab, hsl(var(--primary)) 15%, transparent)}}.ring-primary\/30{--tw-ring-color:hsl(var(--primary))}@supports (color:color-mix(in lab, red, red)){.ring-primary\/30{--tw-ring-color:color-mix(in oklab, hsl(var(--primary)) 30%, transparent)}}.ring-sidebar-ring{--tw-ring-color:hsl(var(--sidebar-ring))}.ring-white\/15{--tw-ring-color:#ffffff26}@supports (color:color-mix(in lab, red, red)){.ring-white\/15{--tw-ring-color:color-mix(in oklab, var(--color-white) 15%, transparent)}}.ring-white\/30{--tw-ring-color:#ffffff4d}@supports (color:color-mix(in lab, red, red)){.ring-white\/30{--tw-ring-color:color-mix(in oklab, var(--color-white) 30%, transparent)}}.ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur-3xl{--tw-blur:blur(var(--blur-3xl));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,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[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-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-500{--tw-duration:.5s;transition-duration:.5s}.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}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}.group-focus-within\/menu-item\:opacity-100:is(:where(.group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.group-hover\:translate-x-0\.5:is(:where(.group):hover *){--tw-translate-x:calc(var(--spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.group-hover\:scale-105:is(:where(.group):hover *){--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:text-primary:is(:where(.group):hover *){color:hsl(var(--primary))}.group-hover\:opacity-100:is(:where(.group):hover *),.group-hover\/menu-item\:opacity-100:is(:where(.group\/menu-item):hover *){opacity:1}}.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-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\]\:\!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\=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-\[side\=left\]\:-right-4:is(:where(.group)[data-side=left] *){right:calc(var(--spacing) * -4)}.group-data-\[side\=right\]\:left-0:is(:where(.group)[data-side=right] *){left:calc(var(--spacing) * 0)}.group-\[\.destructive\]\:border-muted\/40:is(:where(.group).destructive *){border-color:hsl(var(--muted))}@supports (color:color-mix(in lab, red, red)){.group-\[\.destructive\]\:border-muted\/40:is(:where(.group).destructive *){border-color:color-mix(in oklab, hsl(var(--muted)) 40%, transparent)}}.group-\[\.destructive\]\:text-red-300:is(:where(.group).destructive *){color:var(--color-red-300)}@media (hover:hover){.peer-hover\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button):hover~*){color:hsl(var(--sidebar-accent-foreground))}}.peer-disabled\:cursor-not-allowed:is(:where(.peer):disabled~*){cursor:not-allowed}.peer-disabled\:opacity-70:is(:where(.peer):disabled~*){opacity:.7}.peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground:is(:where(.peer\/menu-button)[data-active=true]~*){color:hsl(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)}.peer-data-\[variant\=inset\]\:min-h-\[calc\(100svh-theme\(spacing\.4\)\)\]:is(:where(.peer)[data-variant=inset]~*){min-height:calc(100svh - 1rem)}.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)}.placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.before\:absolute:before{content:var(--tw-content);position:absolute}.before\:top-1\/2:before{content:var(--tw-content);top:50%}.before\:left-0:before{content:var(--tw-content);left:calc(var(--spacing) * 0)}.before\:h-5:before{content:var(--tw-content);height:calc(var(--spacing) * 5)}.before\:w-\[3px\]:before{content:var(--tw-content);width:3px}.before\:-translate-y-1\/2:before{content:var(--tw-content);--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.before\:rounded-r-full:before{content:var(--tw-content);border-top-right-radius:3.40282e38px;border-bottom-right-radius:3.40282e38px}.before\:opacity-0:before{content:var(--tw-content);opacity:0}.before\:transition-opacity:before{content:var(--tw-content);transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.after\:absolute:after{content:var(--tw-content);position:absolute}.after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--spacing) * -2)}.after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--spacing) * 0)}.after\:left-1\/2:after{content:var(--tw-content);left:50%}.after\:w-1:after{content:var(--tw-content);width:calc(var(--spacing) * 1)}.after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.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)}.group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}@media (hover:hover){.hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.hover\:scale-105:hover{--tw-scale-x:105%;--tw-scale-y:105%;--tw-scale-z:105%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-primary\/30:hover{border-color:hsl(var(--primary))}@supports (color:color-mix(in lab, red, red)){.hover\:border-primary\/30:hover{border-color:color-mix(in oklab, hsl(var(--primary)) 30%, transparent)}}.hover\:bg-accent:hover,.hover\:bg-accent\/30:hover{background-color:hsl(var(--accent))}@supports (color:color-mix(in lab, red, red)){.hover\:bg-accent\/30:hover{background-color:color-mix(in oklab, hsl(var(--accent)) 30%, transparent)}}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive))}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/80:hover{background-color:color-mix(in oklab, hsl(var(--destructive)) 80%, transparent)}}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive))}@supports (color:color-mix(in lab, red, red)){.hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab, hsl(var(--destructive)) 90%, transparent)}}.hover\:bg-muted\/50:hover{background-color:hsl(var(--muted))}@supports (color:color-mix(in lab, red, red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab, hsl(var(--muted)) 50%, transparent)}}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/80:hover{background-color:color-mix(in oklab, hsl(var(--primary)) 80%, transparent)}}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary))}@supports (color:color-mix(in lab, red, red)){.hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, hsl(var(--primary)) 90%, transparent)}}.hover\:bg-secondary:hover,.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary))}@supports (color:color-mix(in lab, red, red)){.hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab, hsl(var(--secondary)) 80%, transparent)}}.hover\:bg-sidebar-accent:hover{background-color:hsl(var(--sidebar-accent))}.hover\:bg-white\/20:hover{background-color:#fff3}@supports (color:color-mix(in lab, red, red)){.hover\:bg-white\/20:hover{background-color:color-mix(in oklab, var(--color-white) 20%, transparent)}}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:text-destructive:hover{color:hsl(var(--destructive))}.hover\:text-foreground:hover{color:hsl(var(--foreground))}.hover\:text-sidebar-accent-foreground:hover{color:hsl(var(--sidebar-accent-foreground))}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-95:hover{opacity:.95}.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-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\:shadow-primary\/5:hover{--tw-shadow-color:hsl(var(--primary))}@supports (color:color-mix(in lab, red, red)){.hover\:shadow-primary\/5:hover{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, hsl(var(--primary)) 5%, transparent) var(--tw-shadow-alpha), transparent)}}.hover\:shadow-primary\/30:hover{--tw-shadow-color:hsl(var(--primary))}@supports (color:color-mix(in lab, red, red)){.hover\:shadow-primary\/30:hover{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, hsl(var(--primary)) 30%, transparent) var(--tw-shadow-alpha), transparent)}}.group-data-\[collapsible\=offcanvas\]\:hover\:bg-sidebar:is(:where(.group)[data-collapsible=offcanvas] *):hover{background-color:hsl(var(--sidebar-background))}.group-\[\.destructive\]\:hover\:border-destructive\/30:is(:where(.group).destructive *):hover{border-color:hsl(var(--destructive))}@supports (color:color-mix(in lab, red, red)){.group-\[\.destructive\]\:hover\:border-destructive\/30:is(:where(.group).destructive *):hover{border-color:color-mix(in oklab, hsl(var(--destructive)) 30%, transparent)}}.group-\[\.destructive\]\:hover\:bg-destructive:is(:where(.group).destructive *):hover{background-color:hsl(var(--destructive))}.group-\[\.destructive\]\:hover\:text-destructive-foreground:is(:where(.group).destructive *):hover{color:hsl(var(--destructive-foreground))}.group-\[\.destructive\]\:hover\:text-red-50:is(:where(.group).destructive *):hover{color:var(--color-red-50)}.hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:hsl(var(--sidebar-border))}}.focus\:bg-accent:focus{background-color:hsl(var(--accent))}.focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.focus\:opacity-100:focus{opacity:1}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-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:hsl(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-none:focus{--tw-outline-style:none;outline-style:none}.group-\[\.destructive\]\:focus\:ring-destructive:is(:where(.group).destructive *):focus{--tw-ring-color:hsl(var(--destructive))}.group-\[\.destructive\]\:focus\:ring-red-400:is(:where(.group).destructive *):focus{--tw-ring-color:var(--color-red-400)}.group-\[\.destructive\]\:focus\:ring-offset-red-600:is(:where(.group).destructive *):focus{--tw-ring-offset-color:var(--color-red-600)}.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-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.focus-visible\:ring-sidebar-ring:focus-visible{--tw-ring-color:hsl(var(--sidebar-ring))}.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\:ring-offset-background:focus-visible{--tw-ring-offset-color:hsl(var(--background))}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.active\:bg-sidebar-accent:active{background-color:hsl(var(--sidebar-accent))}.active\:text-sidebar-accent-foreground:active{color:hsl(var(--sidebar-accent-foreground))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-50:disabled{opacity:.5}.has-data-\[variant\=inset\]\:bg-sidebar:has([data-variant=inset]){background-color:hsl(var(--sidebar-background))}.aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.data-\[active\=true\]\:bg-sidebar-accent[data-active=true],.data-\[active\=true\]\:bg-sidebar-accent\/80[data-active=true]{background-color:hsl(var(--sidebar-accent))}@supports (color:color-mix(in lab, red, red)){.data-\[active\=true\]\:bg-sidebar-accent\/80[data-active=true]{background-color:color-mix(in oklab, hsl(var(--sidebar-accent)) 80%, transparent)}}.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-sidebar-accent-foreground[data-active=true]{color:hsl(var(--sidebar-accent-foreground))}.data-\[active\=true\]\:before\:opacity-100[data-active=true]:before{content:var(--tw-content);opacity:1}.data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}.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-\[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\=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\=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\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=active\]\:bg-background[data-state=active]{background-color:hsl(var(--background))}.data-\[state\=active\]\:text-foreground[data-state=active]{color:hsl(var(--foreground))}.data-\[state\=active\]\:shadow[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\]\:translate-x-4[data-state=checked]{--tw-translate-x:calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:hsl(var(--primary-foreground))}.data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.data-\[state\=open\]\:bg-secondary[data-state=open]{background-color:hsl(var(--secondary))}.data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(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}@media (hover:hover){.data-\[state\=open\]\:hover\:bg-sidebar-accent[data-state=open]:hover{background-color:hsl(var(--sidebar-accent))}.data-\[state\=open\]\:hover\:text-sidebar-accent-foreground[data-state=open]:hover{color:hsl(var(--sidebar-accent-foreground))}}.data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:hsl(var(--muted))}.data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.data-\[swipe\=cancel\]\:translate-x-0[data-swipe=cancel]{--tw-translate-x:calc(var(--spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[swipe\=end\]\:translate-x-\[var\(--radix-toast-swipe-end-x\)\][data-swipe=end]{--tw-translate-x:var(--radix-toast-swipe-end-x);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[swipe\=move\]\:translate-x-\[var\(--radix-toast-swipe-move-x\)\][data-swipe=move]{--tw-translate-x:var(--radix-toast-swipe-move-x);translate:var(--tw-translate-x) var(--tw-translate-y)}.data-\[swipe\=move\]\:transition-none[data-swipe=move]{transition-property:none}@supports ((-webkit-backdrop-filter:var(--tw)) or (backdrop-filter:var(--tw))){.supports-\[backdrop-filter\]\:bg-background\/70{background-color:hsl(var(--background))}@supports (color:color-mix(in lab, red, red)){.supports-\[backdrop-filter\]\:bg-background\/70{background-color:color-mix(in oklab, hsl(var(--background)) 70%, transparent)}}.supports-\[backdrop-filter\]\:bg-card\/95{background-color:hsl(var(--card))}@supports (color:color-mix(in lab, red, red)){.supports-\[backdrop-filter\]\:bg-card\/95{background-color:color-mix(in oklab, hsl(var(--card)) 95%, transparent)}}}@media (width>=40rem){.sm\:top-auto{top:auto}.sm\:right-0{right:calc(var(--spacing) * 0)}.sm\:bottom-0{bottom:calc(var(--spacing) * 0)}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:hidden{display:none}.sm\:inline{display:inline}.sm\:size-20{width:calc(var(--spacing) * 20);height:calc(var(--spacing) * 20)}.sm\:max-w-sm{max-width:var(--container-sm)}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:flex-col{flex-direction:column}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:items-end{align-items:flex-end}.sm\:items-start{align-items:flex-start}.sm\:justify-between{justify-content:space-between}.sm\:justify-end{justify-content:flex-end}.sm\:gap-2{gap:calc(var(--spacing) * 2)}.sm\:gap-2\.5{gap:calc(var(--spacing) * 2.5)}.sm\:gap-5{gap:calc(var(--spacing) * 5)}.sm\:gap-6{gap:calc(var(--spacing) * 6)}:where(.sm\: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)))}.sm\:self-auto{align-self:auto}.sm\:rounded-lg{border-radius:var(--radius)}.sm\:p-8{padding:calc(var(--spacing) * 8)}.sm\:px-4{padding-inline:calc(var(--spacing) * 4)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:py-6{padding-block:calc(var(--spacing) * 6)}.sm\:py-8{padding-block:calc(var(--spacing) * 8)}.sm\:pt-16{padding-top:calc(var(--spacing) * 16)}.sm\:pb-6{padding-bottom:calc(var(--spacing) * 6)}.sm\:text-left{text-align:left}.sm\:text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}}@media (width>=48rem){.md\:flex{display:flex}.md\:max-w-\[420px\]{max-width:420px}.md\:p-10{padding:calc(var(--spacing) * 10)}.md\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.md\:opacity-0{opacity:0}.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: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-\[state\=collapsed\]\:peer-data-\[variant\=inset\]\:ml-2:is(:where(.peer)[data-state=collapsed]~*):is(:where(.peer)[data-variant=inset]~*){margin-left:calc(var(--spacing) * 2)}}.after\:md\:hidden:after{content:var(--tw-content)}@media (width>=48rem){.after\:md\:hidden:after{display:none}}@media (width>=64rem){.lg\:flex{display:flex}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:flex-col{flex-direction:column}.lg\:justify-between{justify-content:space-between}.lg\:p-12{padding:calc(var(--spacing) * 12)}}.dark\:scale-0:is(.dark *){--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x) var(--tw-scale-y)}.dark\:scale-100:is(.dark *){--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.dark\:-rotate-90:is(.dark *){rotate:-90deg}.dark\:rotate-0:is(.dark *){rotate:0deg}.dark\:text-amber-400:is(.dark *){color:var(--color-amber-400)}.dark\:text-emerald-400:is(.dark *){color:var(--color-emerald-400)}.dark\:text-green-400:is(.dark *){color:var(--color-green-400)}.\[\&_a\]\:underline a{text-decoration-line:underline}.\[\&_a\]\:underline-offset-4 a{text-underline-offset:4px}@media (hover:hover){.\[\&_a\]\:hover\:text-primary a:hover{color:hsl(var(--primary))}}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_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}.\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right: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\]\:line-clamp-1>span{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>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\]\:shrink-0>svg{flex-shrink:0}.\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:hsl(var(--sidebar-accent-foreground))}.\[\&\>svg\]\:transition-transform>svg{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))}.\[\&\>svg\]\:duration-150>svg{--tw-duration:.15s;transition-duration:.15s}@media (hover:hover){.hover\:\[\&\>svg\]\:scale-110:hover>svg{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}}.data-\[active\=true\]\:\[\&\>svg\]\:text-primary[data-active=true]>svg{color:hsl(var(--primary))}.\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\[data-panel-group-direction\=vertical\]\>div\]\:rotate-90[data-panel-group-direction=vertical]>div{rotate:90deg}[data-collapsible=icon] .\[\[data-collapsible\=icon\]_\&\]\:-mt-8{margin-top:calc(var(--spacing) * -8)}[data-collapsible=icon] .\[\[data-collapsible\=icon\]_\&\]\:overflow-hidden{overflow:hidden}[data-collapsible=icon] .\[\[data-collapsible\=icon\]_\&\]\:opacity-0{opacity:0}[data-side=left] .\[\[data-side\=left\]_\&\]\:cursor-w-resize{cursor:w-resize}[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,[data-side=right] .\[\[data-side\=right\]_\&\]\: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}.bg-brand-gradient{background-image:var(--brand-gradient)}.bg-brand-gradient-subtle{background-image:var(--brand-gradient-subtle)}.text-brand-gradient{background-image:var(--brand-gradient);color:#0000;-webkit-background-clip:text;background-clip:text}.ring-brand{--tw-ring-color:hsl(var(--brand-from) / .35)}.bg-brand-spotlight{background-image:radial-gradient(ellipse 80% 50% at 50% -20%, hsl(var(--brand-from) / .18), transparent 60%), radial-gradient(ellipse 60% 50% at 100% 100%, hsl(var(--brand-to) / .18), transparent 60%)}.bg-brand-mesh{background-color:hsl(var(--brand-from));background-image:radial-gradient(at 20% 20%, hsl(var(--brand-from)) 0%, transparent 50%), radial-gradient(at 80% 0%, hsl(var(--brand-to)) 0%, transparent 50%), radial-gradient(at 0% 80%, #b83df5 0%, transparent 50%), radial-gradient(at 80% 80%, #0da2e7 0%, transparent 50%)}}:root{--radius:.75rem;--brand-from:262 83% 58%;--brand-to:221 83% 53%;--brand-gradient:linear-gradient(135deg, hsl(var(--brand-from)), hsl(var(--brand-to)));--brand-gradient-subtle:linear-gradient(135deg, hsl(var(--brand-from) / .08), hsl(var(--brand-to) / .08));--background:0 0% 100%;--foreground:240 10% 3.9%;--card:0 0% 100%;--card-foreground:240 10% 3.9%;--popover:0 0% 100%;--popover-foreground:240 10% 3.9%;--primary:var(--brand-from);--primary-foreground:0 0% 98%;--secondary:240 4.8% 95.9%;--secondary-foreground:240 5.9% 10%;--muted:240 4.8% 95.9%;--muted-foreground:240 3.8% 46.1%;--accent:262 83% 96%;--accent-foreground:262 60% 30%;--destructive:0 84.2% 60.2%;--destructive-foreground:0 0% 98%;--border:240 5.9% 90%;--input:240 5.9% 90%;--ring:var(--brand-from);--chart-1:262 83% 58%;--chart-2:221 83% 53%;--chart-3:173 58% 39%;--chart-4:43 74% 66%;--chart-5:27 87% 67%;--sidebar-background:0 0% 98.5%;--sidebar-foreground:240 5.3% 26.1%;--sidebar-primary:var(--brand-from);--sidebar-primary-foreground:0 0% 98%;--sidebar-accent:262 83% 96%;--sidebar-accent-foreground:262 60% 30%;--sidebar-border:220 13% 91%;--sidebar-ring:var(--brand-from)}.dark{--background:222 47% 6%;--foreground:0 0% 98%;--card:222 47% 8%;--card-foreground:0 0% 98%;--popover:222 47% 8%;--popover-foreground:0 0% 98%;--primary:262 83% 68%;--primary-foreground:222 47% 6%;--secondary:222 32% 14%;--secondary-foreground:0 0% 98%;--muted:222 32% 14%;--muted-foreground:220 9% 64%;--accent:262 50% 20%;--accent-foreground:262 80% 90%;--destructive:0 62.8% 50%;--destructive-foreground:0 0% 98%;--border:222 32% 16%;--input:222 32% 16%;--ring:262 83% 68%;--chart-1:262 83% 68%;--chart-2:221 83% 63%;--chart-3:173 58% 49%;--chart-4:43 74% 66%;--chart-5:27 87% 67%;--sidebar-background:222 47% 7%;--sidebar-foreground:220 9% 80%;--sidebar-primary:262 83% 68%;--sidebar-primary-foreground:222 47% 6%;--sidebar-accent:262 50% 18%;--sidebar-accent-foreground:262 80% 90%;--sidebar-border:222 32% 14%;--sidebar-ring:262 83% 68%}@keyframes page-enter{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.page-enter{animation:.24s cubic-bezier(.16,1,.3,1) page-enter}@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-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-space-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}