From fd8bec3e7093becbfcf7742124becb3889debdab Mon Sep 17 00:00:00 2001 From: Rotimi Best Date: Sun, 12 Jul 2026 11:33:04 +0100 Subject: [PATCH] feat(billing): enforce free-plan student cap across the app (#733) * feat(billing): enforce free-plan student cap across the app Free (BASIC) plan orgs were able to exceed the advertised 20-student limit because the cap existed only as dashboard cosmetic copy with no server-side enforcement. Add a single source of truth (getStudentLimit / STUDENT_LIMITS) and a central guard (assertStudentCapacityOrThrow) wired into every path that creates a new student-role org member: self-enrolment, course-invite acceptance, bulk audience import, and org-invite acceptance. The guard throws UPGRADE_REQUIRED (403) and notifies org admins by email (throttled to once per org per day) when the limit is hit. Surface the limit in the UI: disable the audience import button and the course new-student invite section with upgrade banners for admins, and show a "contact your administrator" message on the public enrol page for students (who cannot upgrade). Expose a studentLimitReached flag from the public course endpoint so the enrol button can be disabled proactively. Add a one-time (manual, non-cron) db script, db:notify-students-over-limit, to email admins of orgs already over the limit at rollout. * feat(billing): guard remaining student-creating paths against the cap The initial cap enforcement missed several service entry points that also create a new student-role org member. Add the capacity guard to: - autoEnrollStudent (public org self-join on a tenant site) - cohort enrollment (bulk group enrollment and single member accept) - ensureProgramCourseAccess (program/cohort-granted course access) For the cohort and program paths, only genuinely new members are counted (existing org members are skipped) so re-enrolling current students is never falsely blocked. The core path enforces via the shared limit check; it throws UPGRADE_REQUIRED without the admin email since the queue lives in the api layer. * fix(billing): don't show cap block to existing org members on enroll page The public course-by-slug endpoint is unauthenticated, so the enroll page's studentLimitReached flag is org-wide and can't tell whether the current viewer is already an org member. An existing student of a full BASIC org would see Join disabled even though the backend correctly lets existing members enroll without consuming a new seat. Only pre-block anonymous visitors (would-be new joiners). Logged-in users are governed by the membership-aware backend, which allows existing members and returns UPGRADE_REQUIRED (surfaced via the enroll onError mapping) for genuinely new students. * feat(billing): deliver org plan-limits via /account with an extensible registry Replace the ad-hoc, per-surface audience fetches (each calling getOrgAudience just to read a count) with a single, future-proof delivery of org usage + limits on the /account payload, gated to admin/tutor members (students never receive limit data; a plain COUNT, no student rows). Model it generically so future org limits (courses, etc.) drop in without reshaping the payload or re-plumbing the frontend: - New packages/utils plan-limits registry: PLAN_LIMIT_RESOURCES, PLAN_LIMITS (reuses STUDENT_LIMITS), getPlanLimit, and a JSON-safe ResourceUsage / OrgUsageLimits shape with isResourceLimitReached / resourceLimitRemaining. - getAccountData attaches a per-org `limits` map for admin/tutor orgs. - Store selectors currentOrgLimits / studentUsage / isStudentLimitReached; sidebars, upgrade card, People pages, and invite modals read these instead of fetching audience rows. Bring cohort surfaces to parity with course: cohort People page banner and cohort sidebar People upgrade icon, matching the course equivalents. Also: close the upgrade modal that opened over the invite modal (drop the `add` param via openUpgradeModalOver), redesign the sidebar upgrade card (progress toward the student limit), add a Progress `variant`, and document the no-complex-expressions-in-object-literals rule in AGENTS.md. * refactor(billing): address PR review on the limits work - Dedupe new student profile IDs before the cohort seat check so duplicate batch entries can't overcount against the cap (Greptile P1). - Drive the org-sidebar upgrade indicator from a dynamic nav-item `upgrade` flag (audience config declares `upgradeResource: 'students'`; groups set it from a `limitsReached` map) instead of a hardcoded path check. - Collapse the audience Import button into a single button with ternary `disabled`/`href`. - Simplify the notify-students-over-limit upgrade link to app.classroomio.com. - Drop the comment on the org `limits` field. - Add .greptile/rules.md documenting the manual one-time db/src/scripts convention (operator-controlled reruns) so idempotency isn't reflagged. * fix(billing): name the org in the enroll capacity message Change the enroll-page student-limit message from "This course has reached its student capacity" to "{orgName} has reached its student capacity", since the cap is org-wide, not course-specific. Pass orgName from the loaded org on the page and from the currentOrg store in the enroll onError snackbar. * style(billing): use PremiumIcon for the Authentication upgrade indicator Replace the RocketIcon on paid settings sub-items (e.g. Authentication) with the PremiumIcon used on the Audience item, right-aligned (ml-auto) to match. --- .greptile/rules.md | 18 +++++ AGENTS.md | 9 +++ apps/api/src/services/account/profile.ts | 19 +++++ apps/api/src/services/cohort/cohort.ts | 27 ++++++- apps/api/src/services/course/invite.ts | 5 ++ .../api/src/services/organization/audience.ts | 3 + .../src/services/organization/auto-enroll.ts | 3 + apps/api/src/services/organization/invite.ts | 5 ++ .../services/organization/student-limit.ts | 72 +++++++++++++++++++ .../components/invite-members-modal.svelte | 8 ++- .../sidebar/cohort-sidebar-navigation.svelte | 14 +++- .../lib/features/course/api/course.svelte.ts | 12 ++++ .../components/people/invitation-modal.svelte | 9 ++- .../sidebar/course-sidebar-navigation.svelte | 7 +- .../lib/features/course/pages/people.svelte | 7 +- .../components/bulk-email-section.svelte | 14 +++- .../features/ui/navigation/org-navigation.ts | 12 +++- .../ui/sidebar/org-sidebar/nav-main.svelte | 14 ++-- .../org-sidebar/upgrade-trigger.svelte | 46 ++++++++---- .../src/lib/features/ui/upgrade-banner.svelte | 8 ++- apps/dashboard/src/lib/utils/functions/org.ts | 22 +++++- apps/dashboard/src/lib/utils/store/org.ts | 26 ++++--- .../src/lib/utils/translations/da.json | 17 +++-- .../src/lib/utils/translations/de.json | 17 +++-- .../src/lib/utils/translations/en.json | 8 ++- .../src/lib/utils/translations/es.json | 17 +++-- .../src/lib/utils/translations/fr.json | 17 +++-- .../src/lib/utils/translations/hi.json | 17 +++-- .../src/lib/utils/translations/pl.json | 17 +++-- .../src/lib/utils/translations/pt.json | 17 +++-- .../src/lib/utils/translations/ru.json | 17 +++-- .../src/lib/utils/translations/vi.json | 17 +++-- .../(app)/cohorts/[id]/people/+page.svelte | 7 +- .../(app)/org/[slug]/audience/+page.svelte | 8 ++- .../course/[slug]/enroll/+page.server.ts | 2 + .../course/[slug]/enroll/+page.svelte | 13 +++- packages/core/src/services/course/course.ts | 39 +++++++++- packages/db/package.json | 1 + .../src/queries/organization/organization.ts | 52 ++++++++++++++ packages/db/src/queries/organization/types.ts | 2 + .../src/scripts/notify-students-over-limit.ts | 70 ++++++++++++++++++ packages/email/src/emails/index.ts | 3 + .../email/src/emails/student-limit-reached.ts | 28 ++++++++ packages/email/src/utils/constants.ts | 1 + packages/ui/src/base/progress/index.ts | 6 +- packages/ui/src/base/progress/progress.svelte | 38 +++++++--- packages/ui/src/output.css | 2 +- packages/utils/src/plans/constants.ts | 14 ++++ packages/utils/src/plans/index.ts | 1 + packages/utils/src/plans/limits.ts | 41 +++++++++++ 50 files changed, 740 insertions(+), 109 deletions(-) create mode 100644 .greptile/rules.md create mode 100644 apps/api/src/services/organization/student-limit.ts create mode 100644 packages/db/src/scripts/notify-students-over-limit.ts create mode 100644 packages/email/src/emails/student-limit-reached.ts create mode 100644 packages/utils/src/plans/limits.ts diff --git a/.greptile/rules.md b/.greptile/rules.md new file mode 100644 index 00000000..b1cf2123 --- /dev/null +++ b/.greptile/rules.md @@ -0,0 +1,18 @@ +# Greptile review rules + +Repo-specific conventions for code review. See https://www.greptile.com/docs/code-review/custom-standards. + +## One-time admin/ops scripts (`packages/db/src/scripts/**`) + +These are manual, operator-invoked, run-once maintenance scripts (backfills, notifications, migrations). They are **not** part of the request/runtime path. + +- **Do not flag missing idempotency / "can resend on rerun" / "can re-process on rerun".** Re-run behavior is the operator's responsibility, controlled by an explicit `--execute` flag (dry-run by default). This is intentional and not a bug. +- These scripts live in `packages/db` and have **no access to the BullMQ queue or Redis** (`@cio/jobs`), so they send email directly via `@cio/email` (`sendEmail`) rather than the runtime's queued, daily-idempotent path. Do not suggest routing them through the queue as a required change. + +## Plan/usage limit checks + +- The org student-cap guard (`assertStudentCapacityOrThrow`) reads the count outside the insert transaction. This is a known, accepted best-effort TOCTOU consistent with the existing workspace-allowance check — do not re-flag it as a race-condition bug unless hard atomic enforcement is explicitly requested. + +## Code style + +- Never call an `await` or a complex/multi-call expression inside an object literal (construction or update). Assign to a well-named local first, then reference it. (Also documented in `AGENTS.md`.) diff --git a/AGENTS.md b/AGENTS.md index 148cbac3..c61436f2 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -25,6 +25,15 @@ When a task requires factual information (API specifications, context window siz - Use kebab-case for files (e.g. `user-profile.svelte`, `org.svelte.ts`). - **Variables must read clearly at the call site.** Avoid opaque single-letter or ultra-short names (`d`, `x`, `tmp`) unless they match a universal convention (e.g. `i` in a trivial index loop). Prefer names that state intent (`deadlineDate`, `parsedUrl`, `nextSection`). - **After an early `return` (or other guard exit), leave a blank line** before the next statement so the “happy path” block is visually separated from guards. +- **Never put an `await` or a complex/multi-call expression inside an object literal** (construction or update). Assign each value to a well-named local first, then reference it in the object. This keeps the call site readable and debuggable. + ```ts + // ❌ don't + org.limits = { students: toResourceUsage(await countActiveStudents(org.id), getPlanLimit('students', plan)) }; + // ✅ do + const studentsUsed = await countActiveStudents(org.id); + const studentsLimit = getPlanLimit('students', plan); + org.limits = { students: toResourceUsage(studentsUsed, studentsLimit) }; + ``` ## Creating a New Route diff --git a/apps/api/src/services/account/profile.ts b/apps/api/src/services/account/profile.ts index 216b8983..c3604016 100644 --- a/apps/api/src/services/account/profile.ts +++ b/apps/api/src/services/account/profile.ts @@ -1,10 +1,12 @@ import { AppError, ErrorCodes } from '@api/utils/errors'; import { + countActiveStudents, createOrganizationMember, getFirstOrganization, getOrganizationByProfileId, hasOrgMemberByProfileIdOrEmail } from '@cio/db/queries/organization'; +import { getPlanLimit, toResourceUsage } from '@cio/utils/plans'; import { getProfileByEmail, getProfileById, @@ -65,6 +67,23 @@ export async function getAccountData(userId: string): Promise { + if (org.roleId !== ROLE.ADMIN && org.roleId !== ROLE.TUTOR) return; + + const activePlan = org.plans.find((plan) => plan.isActive); + const studentsUsed = await countActiveStudents(org.id); + const studentsLimit = getPlanLimit('students', activePlan?.planName); + + org.limits = { students: toResourceUsage(studentsUsed, studentsLimit) }; + }) + ); + } + return { profile, organizations, diff --git a/apps/api/src/services/cohort/cohort.ts b/apps/api/src/services/cohort/cohort.ts index e7ec30fa..26ea1b23 100644 --- a/apps/api/src/services/cohort/cohort.ts +++ b/apps/api/src/services/cohort/cohort.ts @@ -42,9 +42,14 @@ import { import { getCourseGroupIds } from '@cio/db/queries/course'; import { insertGroupMembersOnConflictDoNothing } from '@cio/db/queries/group'; import { getProfileByEmail } from '@cio/db/queries/auth'; -import { insertOrganizationMembersOnConflictDoNothing } from '@cio/db/queries/organization'; +import { + getOrgMembersByProfileIds, + getOrganizationMemberIdByOrgAndProfile, + insertOrganizationMembersOnConflictDoNothing +} from '@cio/db/queries/organization'; import { ROLE } from '@cio/utils/constants'; import { db } from '@cio/db/drizzle'; +import { assertStudentCapacityOrThrow } from '../organization/student-limit'; type CohortMemberEnrollment = { profileId: string; @@ -64,6 +69,17 @@ async function enrollCohortStudentsInGroups( return 0; } + const studentProfileIds = studentMembers + .map((member) => member.profileId) + .filter((profileId): profileId is string => Boolean(profileId)); + const existingMembers = await getOrgMembersByProfileIds(organizationId, studentProfileIds); + const existingMemberProfileIds = new Set(existingMembers.map((member) => member.profileId)); + const newStudentProfileIds = new Set( + studentProfileIds.filter((profileId) => !existingMemberProfileIds.has(profileId)) + ); + + await assertStudentCapacityOrThrow(organizationId, newStudentProfileIds.size); + const organizationMemberRows = studentMembers.map((member) => ({ organizationId, roleId: ROLE.STUDENT, @@ -241,6 +257,15 @@ export async function addCohortMembers(cohortId: string, data: TAddCohortMembers if (member && member.roleId === ROLE.STUDENT && member.profileId && courseGroupIds.length > 0) { const validCourseGroupIds = courseGroupIds.filter((groupId): groupId is string => Boolean(groupId)); + const existingOrgMemberId = await getOrganizationMemberIdByOrgAndProfile( + cohort.organizationId, + member.profileId, + tx + ); + if (!existingOrgMemberId) { + await assertStudentCapacityOrThrow(cohort.organizationId, 1); + } + await insertOrganizationMembersOnConflictDoNothing( [ { diff --git a/apps/api/src/services/course/invite.ts b/apps/api/src/services/course/invite.ts index b25a1b35..23991fd8 100644 --- a/apps/api/src/services/course/invite.ts +++ b/apps/api/src/services/course/invite.ts @@ -34,6 +34,7 @@ import { enqueueTransactionalEmail } from '@api/services/jobs'; import { getProfileByEmail, markUserAndProfileEmailVerified } from '@cio/db/queries/auth'; import { generateSlug } from '@cio/utils/functions'; import { ensureComplianceEnrollmentRecordsForProfiles } from './compliance'; +import { assertStudentCapacityOrThrow } from '../organization/student-limit'; import { getWelcomeSessionIcs } from './session-invite'; import { db } from '@cio/db/drizzle'; import { trackServerEvent, SERVER_EVENTS } from '@cio/analytics'; @@ -671,6 +672,8 @@ export async function enrollInCourse( } if (!orgMemberId) { + await assertStudentCapacityOrThrow(org.id, 1); + await createOrganizationMember({ organizationId: org.id, roleId: ROLE.STUDENT, @@ -1001,6 +1004,8 @@ export async function acceptStudentInvite(token: string, user: TAuthUser, contex const orgMemberId = await getOrganizationMemberIdByOrgAndProfile(organization.id, user.id, tx); if (!orgMemberId) { + await assertStudentCapacityOrThrow(organization.id, 1); + await createOrganizationMember( { organizationId: organization.id, diff --git a/apps/api/src/services/organization/audience.ts b/apps/api/src/services/organization/audience.ts index dd357282..2fa8c2ee 100644 --- a/apps/api/src/services/organization/audience.ts +++ b/apps/api/src/services/organization/audience.ts @@ -28,6 +28,7 @@ import { updateOrganizationAudienceMember } from '@cio/db/queries/organization'; import { ROLE } from '@cio/utils/constants'; import crypto from 'node:crypto'; import { getDashboardBaseUrl } from '@cio/core/config/dashboard-url'; +import { assertStudentCapacityOrThrow } from './student-limit'; import { getProfilesByEmails } from '@cio/db/queries/auth'; import { ensureComplianceEnrollmentRecordsForProfiles } from '../course/compliance'; import { getWelcomeSessionIcs } from '../course/session-invite'; @@ -528,6 +529,8 @@ export async function importAudienceMembers(orgId: string, data: TImportAudience let importEmailsFailed = 0; if (newEmails.length > 0) { + await assertStudentCapacityOrThrow(orgId, newEmails.length); + await createOrganizationMembers( newEmails.map((email) => ({ organizationId: orgId, diff --git a/apps/api/src/services/organization/auto-enroll.ts b/apps/api/src/services/organization/auto-enroll.ts index 525e13fa..a8a6e928 100644 --- a/apps/api/src/services/organization/auto-enroll.ts +++ b/apps/api/src/services/organization/auto-enroll.ts @@ -7,6 +7,7 @@ import { import { ROLE } from '@cio/utils/constants'; import { getProfileById } from '@cio/db/queries/auth'; +import { assertStudentCapacityOrThrow } from './student-limit'; interface OrgSignupSettings { signup?: { @@ -56,6 +57,8 @@ export async function autoEnrollStudent(userId: string, orgId: string): Promise< throw new AppError('Profile email not found', ErrorCodes.NOT_FOUND, 404); } + await assertStudentCapacityOrThrow(orgId, 1); + await createOrganizationMember({ organizationId: orgId, profileId: userId, diff --git a/apps/api/src/services/organization/invite.ts b/apps/api/src/services/organization/invite.ts index e91d8dc4..00db1f9e 100644 --- a/apps/api/src/services/organization/invite.ts +++ b/apps/api/src/services/organization/invite.ts @@ -28,6 +28,7 @@ import { ROLE } from '@cio/utils/constants'; import type { TNewOrganizationInviteAudit } from '@db/types'; import crypto from 'node:crypto'; import { db, type DbOrTxClient } from '@cio/db/drizzle'; +import { assertStudentCapacityOrThrow } from './student-limit'; import { getAppBaseUrl } from '@cio/core/config/dashboard-url'; import { parseCourseIdsFromInviteMetadata, parseCohortIdsFromInviteMetadata } from '@api/utils/org'; import { getProfileById, markUserAndProfileEmailVerified } from '@cio/db/queries/auth/profile'; @@ -137,6 +138,10 @@ async function syncOrgMemberForOrgInvite( return; } + if (params.roleId === ROLE.STUDENT) { + await assertStudentCapacityOrThrow(params.organizationId, 1); + } + await createOrganizationMember( { organizationId: params.organizationId, diff --git a/apps/api/src/services/organization/student-limit.ts b/apps/api/src/services/organization/student-limit.ts new file mode 100644 index 00000000..c43e2d0e --- /dev/null +++ b/apps/api/src/services/organization/student-limit.ts @@ -0,0 +1,72 @@ +import { AppError, ErrorCodes } from '@api/utils/errors'; +import { enqueueTransactionalEmail } from '@api/services/jobs'; +import { buildEmailBranding } from '@cio/email'; +import { getDashboardBaseUrl } from '@cio/core/config/dashboard-url'; +import { getStudentLimit } from '@cio/utils/plans'; +import { env } from '@cio/core/config/env'; +import { + countActiveStudents, + getActiveOrganizationPlan, + getOrganizationAdminEmails, + getOrganizationById +} from '@cio/db/queries/organization'; + +/** + * Notifies org admins that the org has hit its plan's student limit. Enqueued + * with a per-day idempotency key so repeated blocked attempts don't spam admins. + */ +async function notifyAdminsStudentLimitReached( + orgId: string, + studentCount: number, + studentLimit: number +): Promise { + const [admins, org] = await Promise.all([getOrganizationAdminEmails(orgId), getOrganizationById(orgId)]); + + if (!admins.length || !org) return; + + const todayKey = new Date().toISOString().slice(0, 10); + const upgradeUrl = `${getDashboardBaseUrl()}/org/${org.siteName}?upgrade=true`; + + await enqueueTransactionalEmail('studentLimitReached', { + to: admins.map((admin) => admin.email), + fields: { + orgName: org.name, + studentCount, + studentLimit, + upgradeUrl, + branding: buildEmailBranding({ name: org.name, avatarUrl: org.avatarUrl, theme: org.theme }) + }, + idempotencyKey: `student-limit-reached:${orgId}:${todayKey}` + }); +} + +/** + * Throws `UPGRADE_REQUIRED` when adding `additionalStudents` new org members + * with the student role would push the org past its plan's student limit. + * Self-hosted orgs and paid plans with an unlimited allowance are exempt. + * + * Fires an admin-notification email (fire-and-forget) the moment the limit is hit. + */ +export async function assertStudentCapacityOrThrow(orgId: string, additionalStudents: number): Promise { + if (additionalStudents <= 0) return; + if (env.PUBLIC_IS_SELFHOSTED === 'true') return; + + const activePlan = await getActiveOrganizationPlan(orgId); + const limit = getStudentLimit(activePlan?.planName); + + if (!Number.isFinite(limit)) return; + + const currentCount = await countActiveStudents(orgId); + + if (currentCount + additionalStudents > limit) { + notifyAdminsStudentLimitReached(orgId, currentCount, limit).catch((error) => { + console.error('notifyAdminsStudentLimitReached error:', error); + }); + + throw new AppError( + `This organization has reached its ${limit}-student limit on the Free plan`, + ErrorCodes.UPGRADE_REQUIRED, + 403 + ); + } +} diff --git a/apps/dashboard/src/lib/features/cohort/components/invite-members-modal.svelte b/apps/dashboard/src/lib/features/cohort/components/invite-members-modal.svelte index 100f51df..54996d70 100644 --- a/apps/dashboard/src/lib/features/cohort/components/invite-members-modal.svelte +++ b/apps/dashboard/src/lib/features/cohort/components/invite-members-modal.svelte @@ -8,10 +8,11 @@ import { Button } from '@cio/ui/base/button'; import { ROLE } from '@cio/utils/constants'; import { t } from '$lib/utils/functions/translations'; - import { currentOrg } from '$lib/utils/store/org'; + import { currentOrg, isStudentLimitReached } from '$lib/utils/store/org'; import { orgApi } from '$features/org/api/org.svelte'; import { DEFAULT_ORG_AUDIENCE_QUERY } from '$features/org/utils/audience-query-utils'; import { BulkEmailSection, ExistingStudentsSection, TutorSelectSection } from '$features/people/components'; + import { UpgradeBanner } from '$features/ui'; import type { OrgStudent, Tutor } from '$features/people/utils/types'; import type { OrgTeamMember } from '$lib/utils/types/org'; import { cohortApi } from '../api'; @@ -220,7 +221,10 @@ onSearchValueChange={handleStudentSearch} onAssign={assignExistingStudents} /> - + {#if $isStudentLimitReached} + {$t(`${INVITE_MODAL}.student_limit_reached`)} + {/if} + diff --git a/apps/dashboard/src/lib/features/cohort/components/sidebar/cohort-sidebar-navigation.svelte b/apps/dashboard/src/lib/features/cohort/components/sidebar/cohort-sidebar-navigation.svelte index afa39258..15d6de0b 100644 --- a/apps/dashboard/src/lib/features/cohort/components/sidebar/cohort-sidebar-navigation.svelte +++ b/apps/dashboard/src/lib/features/cohort/components/sidebar/cohort-sidebar-navigation.svelte @@ -3,9 +3,16 @@ import { resolve } from '$app/paths'; import * as Sidebar from '@cio/ui/base/sidebar'; import { BackButton } from '@cio/ui'; - import { HoverableItem, NewsFeedIcon, CourseIcon, PeopleIcon, SettingsIcon } from '@cio/ui/custom/moving-icons'; + import { + HoverableItem, + NewsFeedIcon, + CourseIcon, + PeopleIcon, + PremiumIcon, + SettingsIcon + } from '@cio/ui/custom/moving-icons'; import { t } from '$lib/utils/functions/translations'; - import { currentOrgPath, isOrgAdmin } from '$lib/utils/store/org'; + import { currentOrgPath, isOrgAdmin, isStudentLimitReached } from '$lib/utils/store/org'; import { isStudentExperience } from '$lib/utils/store/app'; import { profile } from '$lib/utils/store/user'; import { cohortApi } from '$features/cohort/api'; @@ -88,6 +95,9 @@ {item.title} + {#if item.id === 'people' && $isStudentLimitReached} + + {/if} {/snippet} diff --git a/apps/dashboard/src/lib/features/course/api/course.svelte.ts b/apps/dashboard/src/lib/features/course/api/course.svelte.ts index 288dc61d..656b5996 100644 --- a/apps/dashboard/src/lib/features/course/api/course.svelte.ts +++ b/apps/dashboard/src/lib/features/course/api/course.svelte.ts @@ -27,6 +27,7 @@ import { mapZodErrorsToTranslations } from '$lib/utils/validation'; import { profile } from '$lib/utils/store/user'; import { resolve } from '$app/paths'; import { snackbar } from '$features/ui/snackbar/store'; +import { t } from '$lib/utils/functions/translations'; import { coursesApi } from './courses.svelte'; import { ROLE } from '@cio/utils/constants'; import { ContentType } from '@cio/utils/constants/content'; @@ -310,6 +311,17 @@ export class CourseApi extends BaseApiWithErrors { onError: (result) => { if (typeof result === 'string') { snackbar.error('snackbar.invite.failed_join'); + } else if ( + typeof result === 'object' && + result !== null && + 'code' in result && + result.code === 'UPGRADE_REQUIRED' + ) { + snackbar.error( + t.get('course.navItem.landing_page.enroll_page.student_limit_reached', { + orgName: get(currentOrg)?.name ?? '' + }) + ); } else if (typeof result === 'object' && result !== null && 'error' in result) { snackbar.error((result as { error: string }).error); } diff --git a/apps/dashboard/src/lib/features/course/components/people/invitation-modal.svelte b/apps/dashboard/src/lib/features/course/components/people/invitation-modal.svelte index af04473a..030f6e3f 100644 --- a/apps/dashboard/src/lib/features/course/components/people/invitation-modal.svelte +++ b/apps/dashboard/src/lib/features/course/components/people/invitation-modal.svelte @@ -9,7 +9,7 @@ import { ROLE } from '@cio/utils/constants'; import { t } from '$lib/utils/functions/translations'; import { courseApi } from '$features/course/api'; - import { currentOrg } from '$lib/utils/store/org'; + import { currentOrg, isStudentLimitReached } from '$lib/utils/store/org'; import { peopleApi } from '$features/course/api'; import { orgApi } from '$features/org/api/org.svelte'; import { DEFAULT_ORG_AUDIENCE_QUERY } from '$features/org/utils/audience-query-utils'; @@ -17,6 +17,7 @@ import type { OrgTeamMember } from '$lib/utils/types/org'; import type { OrgStudent, Tutor } from '$features/people/utils/types'; import { TutorSelectSection, ExistingStudentsSection, BulkEmailSection } from '$features/people/components'; + import { UpgradeBanner } from '$features/ui'; let tutors = $state([]); let selectedIds = $state([]); @@ -216,7 +217,11 @@ onAssign={assignExistingStudents} /> - + {#if $isStudentLimitReached} + {$t(`${INVITE_MODAL}.student_limit_reached`)} + {/if} + + diff --git a/apps/dashboard/src/lib/features/course/components/sidebar/course-sidebar-navigation.svelte b/apps/dashboard/src/lib/features/course/components/sidebar/course-sidebar-navigation.svelte index 2eea69c8..b7e91784 100644 --- a/apps/dashboard/src/lib/features/course/components/sidebar/course-sidebar-navigation.svelte +++ b/apps/dashboard/src/lib/features/course/components/sidebar/course-sidebar-navigation.svelte @@ -19,6 +19,7 @@ MarksIcon, NewsFeedIcon, PeopleIcon, + PremiumIcon, SettingsIcon, SubmissionIcon } from '@cio/ui/custom/moving-icons'; @@ -31,7 +32,7 @@ import { NAV_IDS } from './constants'; import { complianceApi, courseApi } from '$features/course/api'; import { t } from '$lib/utils/functions/translations'; - import { currentOrg, isFreePlan, currentOrgPath } from '$lib/utils/store/org'; + import { currentOrg, isFreePlan, isStudentLimitReached, currentOrgPath } from '$lib/utils/store/org'; import { isStudentExperience } from '$lib/utils/store/app'; import { getNavItemRoute, getLessonsRoute } from '$features/course/utils/functions'; import { useSidebar } from '@cio/ui/base/sidebar'; @@ -48,6 +49,7 @@ let { path, id, isStudent = false }: Props = $props(); const coursesListPath = $derived($isStudentExperience ? '/lms/mylearning' : `${$currentOrgPath}/courses`); + const contentData = $derived(getCourseContent(courseApi.course)); const sidebar = useSidebar(); const contentCount = $derived.by(() => { @@ -406,6 +408,9 @@ {/if} {item.title} + {#if item.id === NAV_IDS.PEOPLE && $isStudentLimitReached} + + {/if} {/snippet} diff --git a/apps/dashboard/src/lib/features/course/pages/people.svelte b/apps/dashboard/src/lib/features/course/pages/people.svelte index ebb9d388..72dea963 100644 --- a/apps/dashboard/src/lib/features/course/pages/people.svelte +++ b/apps/dashboard/src/lib/features/course/pages/people.svelte @@ -9,9 +9,10 @@ import { Chip } from '@cio/ui/custom/chip'; import * as Avatar from '@cio/ui/base/avatar'; - import { ComingSoon, RoleBasedSecurity } from '$features/ui'; + import { ComingSoon, RoleBasedSecurity, UpgradeBanner } from '$features/ui'; import InvitationModal from '$features/course/components/people/invitation-modal.svelte'; import DeleteConfirmation from '$features/course/components/people/delete-confirmation.svelte'; + import { isStudentLimitReached } from '$lib/utils/store/org'; import { profile } from '$lib/utils/store/user'; import type { CourseMembers, CourseMember } from '$features/course/utils/types'; @@ -101,6 +102,10 @@ +{#if $isStudentLimitReached} + {$t('course.navItem.people.invite_modal.student_limit_reached')} +{/if} +
diff --git a/apps/dashboard/src/lib/features/people/components/bulk-email-section.svelte b/apps/dashboard/src/lib/features/people/components/bulk-email-section.svelte index dea8c9cc..804b60d5 100644 --- a/apps/dashboard/src/lib/features/people/components/bulk-email-section.svelte +++ b/apps/dashboard/src/lib/features/people/components/bulk-email-section.svelte @@ -12,6 +12,7 @@ descriptionKey?: string; submitKey?: string; noEmailsKey?: string; + disabled?: boolean; } let { @@ -19,7 +20,8 @@ titleKey = 'course.navItem.people.invite_modal.invite_new_students_title', descriptionKey = 'course.navItem.people.invite_modal.invite_new_students_description', submitKey = 'course.navItem.people.invite_modal.invite_new_students', - noEmailsKey = 'audience.import.snackbar_no_emails' + noEmailsKey = 'audience.import.snackbar_no_emails', + disabled = false }: Props = $props(); let recipientCsv = $state(''); @@ -53,12 +55,18 @@ bind:value={recipientCsv} rows={4} className="w-full" + {disabled} placeholder={$t('audience.import.emails_placeholder')} /> - + - diff --git a/apps/dashboard/src/lib/features/ui/navigation/org-navigation.ts b/apps/dashboard/src/lib/features/ui/navigation/org-navigation.ts index 854838b5..60bf5205 100644 --- a/apps/dashboard/src/lib/features/ui/navigation/org-navigation.ts +++ b/apps/dashboard/src/lib/features/ui/navigation/org-navigation.ts @@ -19,6 +19,7 @@ import type { AccountOrg } from '$features/app/types'; import BotIcon from '@lucide/svelte/icons/bot'; import type { Component } from 'svelte'; import { isActive } from '$lib/utils/functions/app'; +import type { PlanLimitResource } from '@cio/utils/plans'; export interface NavItem { title: string; @@ -31,6 +32,8 @@ export interface NavItem { matchPattern?: string; items?: NavItem[]; // for nested items like settings isPaid?: boolean; // Show upgrade indicator for free plan users + /** True when this item's plan-limited resource has hit its cap (drives the upgrade indicator). */ + upgrade?: boolean; disabled?: boolean; // Metadata for breadcrumb generation useHashUrl?: boolean; // Use '#' as URL (for collapsible items like settings) @@ -50,6 +53,8 @@ export interface NavItemConfig { supportsDynamicSegment?: boolean; // Supports dynamic segments (like [slug]) matchPattern?: string | ((orgSlug: string) => string); // Regex pattern for route matching isPaid?: boolean; // Show upgrade indicator for free plan users + /** Plan-limited resource this item represents; when that resource is at its cap, `upgrade` is set. */ + upgradeResource?: PlanLimitResource; group?: string | null; // Group label key for sidebar grouping } @@ -163,6 +168,7 @@ export const baseNavConfig: NavItemConfig[] = [ titleKey: 'org_navigation.audience', path: '/audience', icon: PeopleIcon, + upgradeResource: 'students', matchPattern: '^/org/[^/]+/audience(/.*)?$' // Matches nested routes }, { @@ -376,7 +382,8 @@ export function getOrgNavigationGroups( currentOrg: AccountOrg, isOrgAdmin: boolean | null, t: (key: string) => string, - pagePathname: string + pagePathname: string, + limitsReached: Partial> = {} ): NavGroup[] { const pathnameOnly = pagePathname.split('?')[0]; const groupedMap = new Map(); @@ -413,7 +420,8 @@ export function getOrgNavigationGroups( useHashUrl: config.useHashUrl, nestedRoutes: config.nestedRoutes, supportsDynamicSegment: config.supportsDynamicSegment, - isPaid: config.isPaid + isPaid: config.isPaid, + upgrade: config.upgradeResource ? Boolean(limitsReached[config.upgradeResource]) : undefined }; if (visibleSubConfigs.length > 0) { diff --git a/apps/dashboard/src/lib/features/ui/sidebar/org-sidebar/nav-main.svelte b/apps/dashboard/src/lib/features/ui/sidebar/org-sidebar/nav-main.svelte index 27a8a905..b39ee03e 100644 --- a/apps/dashboard/src/lib/features/ui/sidebar/org-sidebar/nav-main.svelte +++ b/apps/dashboard/src/lib/features/ui/sidebar/org-sidebar/nav-main.svelte @@ -1,16 +1,17 @@ @@ -85,6 +86,9 @@ {:else} {item.title} {/if} + {#if item.upgrade} + + {/if} {/if} {/snippet} @@ -102,7 +106,7 @@ {subItem.title} {#if subItem.isPaid && $isFreePlan} - + {/if} {/snippet} diff --git a/apps/dashboard/src/lib/features/ui/sidebar/org-sidebar/upgrade-trigger.svelte b/apps/dashboard/src/lib/features/ui/sidebar/org-sidebar/upgrade-trigger.svelte index 4854c0dc..e98c1c60 100644 --- a/apps/dashboard/src/lib/features/ui/sidebar/org-sidebar/upgrade-trigger.svelte +++ b/apps/dashboard/src/lib/features/ui/sidebar/org-sidebar/upgrade-trigger.svelte @@ -1,28 +1,50 @@ {#if $isFreePlan}
{#if sidebar.open && !sidebar.isMobile} -
- - -

{$t('org_navigation.early_adopter')}

-

{$t('org_navigation.unlock')}

-
-
{:else} diff --git a/apps/dashboard/src/lib/features/ui/upgrade-banner.svelte b/apps/dashboard/src/lib/features/ui/upgrade-banner.svelte index e1279064..d462b0bf 100644 --- a/apps/dashboard/src/lib/features/ui/upgrade-banner.svelte +++ b/apps/dashboard/src/lib/features/ui/upgrade-banner.svelte @@ -1,5 +1,5 @@ @@ -26,7 +28,7 @@ {...props} onclick={() => { onClick(); - openUpgradeModal(); + openUpgradeModalOver(removeParams); }} > diff --git a/apps/dashboard/src/lib/utils/functions/org.ts b/apps/dashboard/src/lib/utils/functions/org.ts index bb88e410..c409c209 100644 --- a/apps/dashboard/src/lib/utils/functions/org.ts +++ b/apps/dashboard/src/lib/utils/functions/org.ts @@ -14,12 +14,28 @@ export function generateSitename(orgName: string): string { .replace(/[^a-zA-Z0-9-]/g, ''); } -export function openUpgradeModal() { +function navigateToUpgradeModal(removeParams: string[]) { const url = new URL(window.location.href); + for (const param of removeParams) { + url.searchParams.delete(param); + } + url.searchParams.set('upgrade', 'true'); - const searchParams = url.searchParams.toString(); + goto(resolve(url.pathname + `?${url.searchParams.toString()}`, {})); +} - goto(resolve(window.location.pathname + `?${searchParams}`, {})); +/** Opens the in-app upgrade modal by setting `?upgrade=true`. Safe to use directly as an event handler. */ +export function openUpgradeModal() { + navigateToUpgradeModal([]); +} + +/** + * Opens the upgrade modal while dropping query params that keep another modal + * open (e.g. `['add']` for the invite modal), so the upgrade modal isn't + * stacked behind it — done in a single navigation to avoid a read-after-goto race. + */ +export function openUpgradeModalOver(removeParams: string[]) { + navigateToUpgradeModal(removeParams); } diff --git a/apps/dashboard/src/lib/utils/store/org.ts b/apps/dashboard/src/lib/utils/store/org.ts index 71eb85b7..7477e9fe 100644 --- a/apps/dashboard/src/lib/utils/store/org.ts +++ b/apps/dashboard/src/lib/utils/store/org.ts @@ -4,7 +4,7 @@ import merge from 'lodash/merge'; import type { AccountOrg } from '$features/app/types'; import type { OrgTeamMember } from '../types/org'; -import { canUsePublicApi, isOrgOnFreePlan, PLAN } from '@cio/utils/plans'; +import { canUsePublicApi, getStudentLimit, isOrgOnFreePlan, isResourceLimitReached, PLAN } from '@cio/utils/plans'; import { PUBLIC_IS_SELFHOSTED } from '$env/static/public'; import { BRAND_ROOT_DOMAIN, ROLE, TENANT_ROOT_DOMAIN } from '@cio/utils/constants'; import { STEPS } from '../constants/quiz'; @@ -160,14 +160,22 @@ export const hasPublicApiAccess = derived(currentOrg, ($currentOrg) => { return canUsePublicApi(plan?.planName, PUBLIC_IS_SELFHOSTED === 'true'); }); -export const currentOrgMaxAudience = derived(currentOrgPlan, ($plan) => - !$plan - ? 20 - : $plan.planName === PLAN.EARLY_ADOPTER - ? 10000 - : $plan.planName === PLAN.ENTERPRISE - ? Number.MAX_SAFE_INTEGER - : 20 +export const currentOrgMaxAudience = derived(currentOrgPlan, ($plan) => { + const limit = getStudentLimit($plan?.planName); + return Number.isFinite(limit) ? limit : Number.MAX_SAFE_INTEGER; +}); + +/** + * Per-resource org usage + limits delivered by `/account` (admin/tutor only). + * `studentUsage`/`isStudentLimitReached` are convenience selectors; generic + * consumers can read `$currentOrgLimits.` with `isResourceLimitReached`. + */ +export const currentOrgLimits = derived(currentOrg, ($currentOrg) => $currentOrg.limits ?? {}); + +export const studentUsage = derived(currentOrg, ($currentOrg) => $currentOrg.limits?.students); + +export const isStudentLimitReached = derived(currentOrg, ($currentOrg) => + isResourceLimitReached($currentOrg.limits?.students) ); // Quiz diff --git a/apps/dashboard/src/lib/utils/translations/da.json b/apps/dashboard/src/lib/utils/translations/da.json index dca5794c..539ee9dd 100644 --- a/apps/dashboard/src/lib/utils/translations/da.json +++ b/apps/dashboard/src/lib/utils/translations/da.json @@ -709,7 +709,8 @@ "cancel": "Annuller", "confirm": "Slet", "snackbar_success": "Medlem slettet" - } + }, + "import_limit_reached": "Du har nået din plans elevgrænse. Opgrader for at importere flere elever." }, "community": { "title": "Fællesskab", @@ -894,7 +895,8 @@ "back_to_course": "Tilbage til kurset", "join_course": "Deltag i kursus", "enrolled_success": "Du er tilmeldt dette kursus.", - "enrolled_verify_email": "Du er tilmeldt! Bekræft din e-mail for at få adgang til dette kursus." + "enrolled_verify_email": "Du er tilmeldt! Bekræft din e-mail for at få adgang til dette kursus.", + "student_limit_reached": "{orgName} har nået sin elevkapacitet. Kontakt venligst din organisations administrator." }, "pricing_section": { "free": "Gratis", @@ -1226,7 +1228,8 @@ "multi_use_7d": "Multi-brug (7 dage)", "multi_use_30d": "Multi-brug (30 dage)", "custom": "Brugerdefineret" - } + }, + "student_limit_reached": "Du har nået din plans elevgrænse. Opgrader for at invitere flere elever." } }, "marks": { @@ -2811,7 +2814,10 @@ "stats": "Statistik", "analytics": "Analytics", "compliance": "Overholdelse", - "cohorts": "Programmer" + "cohorts": "Programmer", + "upgrade_now": "Opgrader nu", + "upgrade_students": "{studentCount} af {studentLimit} elever", + "upgrade_left": "{count} tilbage" }, "media_manager": { "page_title": "Media Manager - ClassroomIO", @@ -3636,7 +3642,8 @@ "widgets": "Widgets", "tags": "Tags", "students": "studerende", - "settings": "Indstillinger" + "settings": "Indstillinger", + "cohorts": "Kohorter" } } }, diff --git a/apps/dashboard/src/lib/utils/translations/de.json b/apps/dashboard/src/lib/utils/translations/de.json index 8ece8bd7..a04e5e16 100644 --- a/apps/dashboard/src/lib/utils/translations/de.json +++ b/apps/dashboard/src/lib/utils/translations/de.json @@ -709,7 +709,8 @@ "cancel": "Abbrechen", "confirm": "Löschen", "snackbar_success": "Mitglied gelöscht" - } + }, + "import_limit_reached": "Sie haben das Studentenlimit Ihres Plans erreicht. Führen Sie ein Upgrade durch, um mehr Schüler zu importieren." }, "community": { "title": "Gemeinschaft", @@ -894,7 +895,8 @@ "back_to_course": "Zurück zum Kurs", "join_course": "Nehmen Sie am Kurs teil", "enrolled_success": "Sie sind für diesen Kurs eingeschrieben.", - "enrolled_verify_email": "Sie sind eingeschrieben! Bestätigen Sie Ihre E-Mail, um auf diesen Kurs zuzugreifen." + "enrolled_verify_email": "Sie sind eingeschrieben! Bestätigen Sie Ihre E-Mail, um auf diesen Kurs zuzugreifen.", + "student_limit_reached": "{orgName} hat seine Studentenkapazität erreicht. Bitte wenden Sie sich an den Administrator Ihrer Organisation." }, "pricing_section": { "free": "Kostenlos", @@ -1226,7 +1228,8 @@ "multi_use_7d": "Mehrfachnutzung (7 Tage)", "multi_use_30d": "Mehrfachnutzung (30 Tage)", "custom": "Benutzerdefiniert" - } + }, + "student_limit_reached": "Sie haben das Studentenlimit Ihres Plans erreicht. Führen Sie ein Upgrade durch, um weitere Schüler einzuladen." } }, "marks": { @@ -2811,7 +2814,10 @@ "stats": "Statistiken", "analytics": "Analytik", "compliance": "Compliance", - "cohorts": "Programme" + "cohorts": "Programme", + "upgrade_now": "Jetzt upgraden", + "upgrade_students": "{studentCount} von {studentLimit} Studenten", + "upgrade_left": "{count} übrig" }, "media_manager": { "page_title": "Medienmanager - ClassroomIO", @@ -3636,7 +3642,8 @@ "widgets": "Widgets", "tags": "Schlagworte", "students": "Studenten", - "settings": "Einstellungen" + "settings": "Einstellungen", + "cohorts": "Kohorten" } } }, diff --git a/apps/dashboard/src/lib/utils/translations/en.json b/apps/dashboard/src/lib/utils/translations/en.json index 97bcf398..805cce77 100644 --- a/apps/dashboard/src/lib/utils/translations/en.json +++ b/apps/dashboard/src/lib/utils/translations/en.json @@ -1259,6 +1259,9 @@ "early_adopter": "Become an Early Adopter", "unlock": "Unlock unlimited features and invest in our future", "upgrade": "Upgrade Now", + "upgrade_now": "Upgrade now", + "upgrade_students": "{studentCount} of {studentLimit} students", + "upgrade_left": "{count} left", "cohorts": "Cohorts" }, "pricing": { @@ -3054,6 +3057,7 @@ "to_add": "To add tutor to your organization,", "go_to": "go to organization settings", "invite_students": "Add Students", + "student_limit_reached": "You've reached your plan's student limit. Upgrade to invite more students.", "via_link": "You can invite students via an invite link", "via_qr": "You can invite students via QR", "download_qr": "Download QR code", @@ -3373,7 +3377,8 @@ "back_to_course": "Back to course", "join_course": "Join Course", "enrolled_success": "You're enrolled in this course.", - "enrolled_verify_email": "You're enrolled! Verify your email to access this course." + "enrolled_verify_email": "You're enrolled! Verify your email to access this course.", + "student_limit_reached": "{orgName} has reached its student capacity. Please contact your organization administrator." }, "course_content": "Course content", "modules": "modules", @@ -3558,6 +3563,7 @@ "page_subtitle": "See who belongs to your org, who is learning, who is invited, and how to reach them.", "export": "Export", "import_users": "Import Users", + "import_limit_reached": "You've reached your plan's student limit. Upgrade to import more students.", "no_audience": "No audience to manage", "manage": "Manage all your students here and stay connected with them", "name": "Name", diff --git a/apps/dashboard/src/lib/utils/translations/es.json b/apps/dashboard/src/lib/utils/translations/es.json index 93254f28..c27fccaf 100644 --- a/apps/dashboard/src/lib/utils/translations/es.json +++ b/apps/dashboard/src/lib/utils/translations/es.json @@ -709,7 +709,8 @@ "cancel": "Cancelar", "confirm": "Eliminar", "snackbar_success": "Miembro eliminado" - } + }, + "import_limit_reached": "Has alcanzado el límite de estudiantes de tu plan. Actualice para importar más estudiantes." }, "community": { "title": "Comunidad", @@ -894,7 +895,8 @@ "back_to_course": "volver al curso", "join_course": "Unirse al curso", "enrolled_success": "Estás inscrito en este curso.", - "enrolled_verify_email": "¡Estás inscrito! Verifica tu correo electrónico para acceder a este curso." + "enrolled_verify_email": "¡Estás inscrito! Verifica tu correo electrónico para acceder a este curso.", + "student_limit_reached": "{orgName} ha alcanzado su capacidad de estudiantes. Comuníquese con el administrador de su organización." }, "pricing_section": { "free": "Gratis", @@ -1226,7 +1228,8 @@ "multi_use_7d": "Multiuso (7 días)", "multi_use_30d": "Multiuso (30 días)", "custom": "personalizado" - } + }, + "student_limit_reached": "Has alcanzado el límite de estudiantes de tu plan. Actualice para invitar a más estudiantes." } }, "marks": { @@ -2811,7 +2814,10 @@ "stats": "Estadísticas", "analytics": "Analítica", "compliance": "Cumplimiento", - "cohorts": "Programas" + "cohorts": "Programas", + "upgrade_now": "Actualiza ahora", + "upgrade_students": "{studentCount} de {studentLimit} estudiantes", + "upgrade_left": "{count} restante" }, "media_manager": { "page_title": "Administrador de medios - ClassroomIO", @@ -3636,7 +3642,8 @@ "widgets": "widgets", "tags": "Etiquetas", "students": "estudiantes", - "settings": "Configuración" + "settings": "Configuración", + "cohorts": "Cohortes" } } }, diff --git a/apps/dashboard/src/lib/utils/translations/fr.json b/apps/dashboard/src/lib/utils/translations/fr.json index 9723cfd5..9d2babb6 100644 --- a/apps/dashboard/src/lib/utils/translations/fr.json +++ b/apps/dashboard/src/lib/utils/translations/fr.json @@ -709,7 +709,8 @@ "cancel": "Annuler", "confirm": "Supprimer", "snackbar_success": "Membre supprimé" - } + }, + "import_limit_reached": "Vous avez atteint la limite d'étudiants de votre plan. Mettez à niveau pour importer plus d'étudiants." }, "community": { "title": "Communauté", @@ -894,7 +895,8 @@ "back_to_course": "Retour au cours", "join_course": "Rejoindre le cours", "enrolled_success": "Vous êtes inscrit à ce cours.", - "enrolled_verify_email": "Vous êtes inscrit ! Vérifiez votre e-mail pour accéder à ce cours." + "enrolled_verify_email": "Vous êtes inscrit ! Vérifiez votre e-mail pour accéder à ce cours.", + "student_limit_reached": "{orgName} a atteint sa capacité d'accueil. Veuillez contacter l'administrateur de votre organisation." }, "pricing_section": { "free": "Gratuit", @@ -1226,7 +1228,8 @@ "multi_use_7d": "Multi-usage (7 jours)", "multi_use_30d": "Multi-usage (30 jours)", "custom": "Personnalisé" - } + }, + "student_limit_reached": "Vous avez atteint la limite d'étudiants de votre plan. Mettez à niveau pour inviter plus d'étudiants." } }, "marks": { @@ -2811,7 +2814,10 @@ "stats": "Statistiques", "analytics": "Analyse", "compliance": "Conformité", - "cohorts": "Programmes" + "cohorts": "Programmes", + "upgrade_now": "Mettre à niveau maintenant", + "upgrade_students": "{studentCount} sur {studentLimit} étudiants", + "upgrade_left": "Il reste {count}" }, "media_manager": { "page_title": "Gestionnaire de médias - ClassroomIO", @@ -3636,7 +3642,8 @@ "widgets": "Widgets", "tags": "Balises", "students": "Étudiants", - "settings": "Paramètres" + "settings": "Paramètres", + "cohorts": "Cohortes" } } }, diff --git a/apps/dashboard/src/lib/utils/translations/hi.json b/apps/dashboard/src/lib/utils/translations/hi.json index b0382f36..14e779af 100644 --- a/apps/dashboard/src/lib/utils/translations/hi.json +++ b/apps/dashboard/src/lib/utils/translations/hi.json @@ -709,7 +709,8 @@ "cancel": "रद्द करें", "confirm": "हटाएँ", "snackbar_success": "सदस्य हटा दिया गया" - } + }, + "import_limit_reached": "आप अपनी योजना की छात्र सीमा तक पहुँच गए हैं। अधिक छात्रों को आयात करने के लिए अपग्रेड करें।" }, "community": { "title": "समुदाय", @@ -894,7 +895,8 @@ "back_to_course": "पाठ्यक्रम पर वापस जाएँ", "join_course": "पाठ्यक्रम में शामिल हों", "enrolled_success": "आप इस पाठ्यक्रम में नामांकित हैं।", - "enrolled_verify_email": "आप नामांकित हैं! इस पाठ्यक्रम तक पहुँचने के लिए अपना ईमेल सत्यापित करें।" + "enrolled_verify_email": "आप नामांकित हैं! इस पाठ्यक्रम तक पहुँचने के लिए अपना ईमेल सत्यापित करें।", + "student_limit_reached": "{orgName} अपनी छात्र क्षमता तक पहुंच गया है। कृपया अपने संगठन प्रशासक से संपर्क करें." }, "pricing_section": { "free": "निःशुल्क", @@ -1226,7 +1228,8 @@ "multi_use_7d": "बहु-उपयोग (7 दिन)", "multi_use_30d": "बहु-उपयोग (30 दिन)", "custom": "कस्टम" - } + }, + "student_limit_reached": "आप अपनी योजना की छात्र सीमा तक पहुँच गए हैं। अधिक छात्रों को आमंत्रित करने के लिए अपग्रेड करें।" } }, "marks": { @@ -2811,7 +2814,10 @@ "stats": "आँकड़े", "analytics": "विश्लेषिकी", "compliance": "अनुपालन", - "cohorts": "कार्यक्रम" + "cohorts": "कार्यक्रम", + "upgrade_now": "अभी अपग्रेड करें", + "upgrade_students": "{studentLimit} छात्रों की {studentCount}", + "upgrade_left": "{गिनती} बाएँ" }, "media_manager": { "page_title": "मीडिया मैनेजर - क्लासरूमआईओ", @@ -3636,7 +3642,8 @@ "widgets": "विजेट्स", "tags": "टैग", "students": "छात्र", - "settings": "सेटिंग्स" + "settings": "सेटिंग्स", + "cohorts": "समानता रखने वाले लोग" } } }, diff --git a/apps/dashboard/src/lib/utils/translations/pl.json b/apps/dashboard/src/lib/utils/translations/pl.json index af13b44b..6b78aafe 100644 --- a/apps/dashboard/src/lib/utils/translations/pl.json +++ b/apps/dashboard/src/lib/utils/translations/pl.json @@ -709,7 +709,8 @@ "cancel": "Anuluj", "confirm": "Usuń", "snackbar_success": "Członek usunięty" - } + }, + "import_limit_reached": "Osiągnąłeś limit studentów w swoim planie. Uaktualnij, aby zaimportować więcej uczniów." }, "community": { "title": "Społeczność", @@ -894,7 +895,8 @@ "back_to_course": "Powrót na kurs", "join_course": "Dołącz do kursu", "enrolled_success": "Zapisano Cię na ten kurs.", - "enrolled_verify_email": "Jesteś zapisany! Zweryfikuj swój e-mail, aby uzyskać dostęp do tego kursu." + "enrolled_verify_email": "Jesteś zapisany! Zweryfikuj swój e-mail, aby uzyskać dostęp do tego kursu.", + "student_limit_reached": "Organizacja {orgName} osiągnęła już limit uczniów. Skontaktuj się z administratorem organizacji." }, "pricing_section": { "free": "Bezpłatny", @@ -1226,7 +1228,8 @@ "multi_use_7d": "Wielokrotnego użytku (7 dni)", "multi_use_30d": "Wielokrotnego użytku (30 dni)", "custom": "Niestandardowe" - } + }, + "student_limit_reached": "Osiągnąłeś limit studentów w swoim planie. Uaktualnij, aby zaprosić więcej uczniów." } }, "marks": { @@ -2811,7 +2814,10 @@ "stats": "Statystyki", "analytics": "Analityka", "compliance": "Zgodność", - "cohorts": "Programy" + "cohorts": "Programy", + "upgrade_now": "Uaktualnij teraz", + "upgrade_students": "{studentCount} z {studentLimit} uczniów", + "upgrade_left": "Pozostało {count}" }, "media_manager": { "page_title": "Menedżer multimediów - ClassroomIO", @@ -3636,7 +3642,8 @@ "widgets": "Widżety", "tags": "Tagi", "students": "Studenci", - "settings": "Ustawienia" + "settings": "Ustawienia", + "cohorts": "Kohorty" } } }, diff --git a/apps/dashboard/src/lib/utils/translations/pt.json b/apps/dashboard/src/lib/utils/translations/pt.json index 661512b5..64f65fbf 100644 --- a/apps/dashboard/src/lib/utils/translations/pt.json +++ b/apps/dashboard/src/lib/utils/translations/pt.json @@ -709,7 +709,8 @@ "cancel": "Cancelar", "confirm": "Excluir", "snackbar_success": "Membro excluído" - } + }, + "import_limit_reached": "Você atingiu o limite de alunos do seu plano. Atualize para importar mais alunos." }, "community": { "title": "Comunidade", @@ -894,7 +895,8 @@ "back_to_course": "De volta ao curso", "join_course": "Participe do curso", "enrolled_success": "Você está inscrito neste curso.", - "enrolled_verify_email": "Você está inscrito! Verifique seu e-mail para acessar este curso." + "enrolled_verify_email": "Você está inscrito! Verifique seu e-mail para acessar este curso.", + "student_limit_reached": "{orgName} atingiu sua capacidade de alunos. Entre em contato com o administrador da sua organização." }, "pricing_section": { "free": "Grátis", @@ -1226,7 +1228,8 @@ "multi_use_7d": "Multiuso (7 dias)", "multi_use_30d": "Multiuso (30 dias)", "custom": "Personalizado" - } + }, + "student_limit_reached": "Você atingiu o limite de alunos do seu plano. Atualize para convidar mais alunos." } }, "marks": { @@ -2811,7 +2814,10 @@ "stats": "Estatísticas", "analytics": "Análise", "compliance": "Conformidade", - "cohorts": "Programas" + "cohorts": "Programas", + "upgrade_now": "Atualize agora", + "upgrade_students": "{studentCount} de {studentLimit} alunos", + "upgrade_left": "{contagem} restantes" }, "media_manager": { "page_title": "Gerenciador de mídia - ClassroomIO", @@ -3636,7 +3642,8 @@ "widgets": "Widgets", "tags": "Etiquetas", "students": "Alunos", - "settings": "Configurações" + "settings": "Configurações", + "cohorts": "Coortes" } } }, diff --git a/apps/dashboard/src/lib/utils/translations/ru.json b/apps/dashboard/src/lib/utils/translations/ru.json index c791f0bb..21e88d57 100644 --- a/apps/dashboard/src/lib/utils/translations/ru.json +++ b/apps/dashboard/src/lib/utils/translations/ru.json @@ -709,7 +709,8 @@ "cancel": "Отмена", "confirm": "Удалить", "snackbar_success": "Участник удален" - } + }, + "import_limit_reached": "Вы достигли лимита учащихся, предусмотренного вашим планом. Обновите, чтобы импортировать больше студентов." }, "community": { "title": "Сообщество", @@ -894,7 +895,8 @@ "back_to_course": "Вернуться к курсу", "join_course": "Присоединиться к курсу", "enrolled_success": "Вы записаны на этот курс.", - "enrolled_verify_email": "Вы записаны! Подтвердите email, чтобы получить доступ к курсу." + "enrolled_verify_email": "Вы записаны! Подтвердите email, чтобы получить доступ к курсу.", + "student_limit_reached": "В {orgName} достигнута вместимость учащихся. Обратитесь к администратору вашей организации." }, "pricing_section": { "free": "Бесплатно", @@ -1226,7 +1228,8 @@ "multi_use_7d": "Многоразовое использование (7 дней)", "multi_use_30d": "Многоразовое использование (30 дней)", "custom": "Пользовательский" - } + }, + "student_limit_reached": "Вы достигли лимита учащихся, предусмотренного вашим планом. Обновите, чтобы пригласить больше студентов." } }, "marks": { @@ -2811,7 +2814,10 @@ "stats": "Статистика", "analytics": "Аналитика", "compliance": "Соответствие", - "cohorts": "Программы" + "cohorts": "Программы", + "upgrade_now": "Обновите сейчас", + "upgrade_students": "{studentCount} из {studentLimit} студентов", + "upgrade_left": "{count} осталось" }, "media_manager": { "page_title": "Медиа-менеджер — ClassroomIO", @@ -3636,7 +3642,8 @@ "widgets": "Виджеты", "tags": "Теги", "students": "Студенты", - "settings": "Настройки" + "settings": "Настройки", + "cohorts": "когорты" } } }, diff --git a/apps/dashboard/src/lib/utils/translations/vi.json b/apps/dashboard/src/lib/utils/translations/vi.json index a1d290f3..70443e4c 100644 --- a/apps/dashboard/src/lib/utils/translations/vi.json +++ b/apps/dashboard/src/lib/utils/translations/vi.json @@ -709,7 +709,8 @@ "cancel": "Hủy bỏ", "confirm": "Xóa", "snackbar_success": "Thành viên đã bị xóa" - } + }, + "import_limit_reached": "Bạn đã đạt đến giới hạn sinh viên trong kế hoạch của mình. Nâng cấp để nhập thêm sinh viên." }, "community": { "title": "cộng đồng", @@ -894,7 +895,8 @@ "back_to_course": "Quay lại khóa học", "join_course": "Tham gia khóa học", "enrolled_success": "Bạn đã ghi danh khóa học này.", - "enrolled_verify_email": "Bạn đã ghi danh! Xác minh email để truy cập khóa học này." + "enrolled_verify_email": "Bạn đã ghi danh! Xác minh email để truy cập khóa học này.", + "student_limit_reached": "{orgName} đã đạt đủ số lượng sinh viên. Vui lòng liên hệ với quản trị viên tổ chức của bạn." }, "pricing_section": { "free": "miễn phí", @@ -1226,7 +1228,8 @@ "multi_use_7d": "Sử dụng nhiều lần (7 ngày)", "multi_use_30d": "Sử dụng nhiều lần (30 ngày)", "custom": "tùy chỉnh" - } + }, + "student_limit_reached": "Bạn đã đạt đến giới hạn sinh viên trong kế hoạch của mình. Nâng cấp để mời thêm sinh viên." } }, "marks": { @@ -2811,7 +2814,10 @@ "stats": "Thống kê", "analytics": "Phân tích", "compliance": "Tuân thủ", - "cohorts": "Chương trình" + "cohorts": "Chương trình", + "upgrade_now": "Nâng cấp ngay bây giờ", + "upgrade_students": "{studentCount} trong số {studentLimit} sinh viên", + "upgrade_left": "còn {count}" }, "media_manager": { "page_title": "Quản lý truyền thông - ClassroomIO", @@ -3636,7 +3642,8 @@ "widgets": "Widget", "tags": "Thẻ", "students": "Sinh viên", - "settings": "Cài đặt" + "settings": "Cài đặt", + "cohorts": "Nhóm thuần tập" } } }, diff --git a/apps/dashboard/src/routes/(app)/cohorts/[id]/people/+page.svelte b/apps/dashboard/src/routes/(app)/cohorts/[id]/people/+page.svelte index 66219154..02a6660e 100644 --- a/apps/dashboard/src/routes/(app)/cohorts/[id]/people/+page.svelte +++ b/apps/dashboard/src/routes/(app)/cohorts/[id]/people/+page.svelte @@ -21,8 +21,9 @@ import { shortenName } from '$lib/utils/functions/string'; import { ROLE } from '@cio/utils/constants'; import { ROLE_LABEL } from '$lib/utils/constants/roles'; - import { isOrgAdmin } from '$lib/utils/store/org'; + import { isOrgAdmin, isStudentLimitReached } from '$lib/utils/store/org'; import { profile } from '$lib/utils/store/user'; + import { UpgradeBanner } from '$features/ui'; import InviteMembersModal from '$features/cohort/components/invite-members-modal.svelte'; import GoalsOverviewTiles from '$features/cohort/components/goals/goals-overview-tiles.svelte'; import { cohortApi } from '$features/cohort/api'; @@ -148,6 +149,10 @@ {#snippet child()} + {#if $isStudentLimitReached} + {$t('course.navItem.people.invite_modal.student_limit_reached')} + {/if} +
diff --git a/apps/dashboard/src/routes/(app)/org/[slug]/audience/+page.svelte b/apps/dashboard/src/routes/(app)/org/[slug]/audience/+page.svelte index 1482d46e..45d2415d 100644 --- a/apps/dashboard/src/routes/(app)/org/[slug]/audience/+page.svelte +++ b/apps/dashboard/src/routes/(app)/org/[slug]/audience/+page.svelte @@ -18,6 +18,7 @@ } const audienceLength = $derived(data.pagination?.total || 0); + const atStudentLimit = $derived(audienceLength >= $currentOrgMaxAudience); @@ -41,7 +42,12 @@ - diff --git a/apps/dashboard/src/routes/(org-site)/course/[slug]/enroll/+page.server.ts b/apps/dashboard/src/routes/(org-site)/course/[slug]/enroll/+page.server.ts index 635f1b3a..4183e0fe 100644 --- a/apps/dashboard/src/routes/(org-site)/course/[slug]/enroll/+page.server.ts +++ b/apps/dashboard/src/routes/(org-site)/course/[slug]/enroll/+page.server.ts @@ -51,6 +51,7 @@ export const load = async ({ params, url }) => { inviteEmail: data.inviteContext?.recipientEmail ?? null, inviteEmailExists: data.inviteContext?.recipientExists ?? false, requiresPaymentOrInvite: false, + studentLimitReached: false, token: inviteToken }; } @@ -97,6 +98,7 @@ export const load = async ({ params, url }) => { currentOrg, invite: null, requiresPaymentOrInvite: !isFree, + studentLimitReached: courseData.studentLimitReached ?? false, token: null as string | null }; }; diff --git a/apps/dashboard/src/routes/(org-site)/course/[slug]/enroll/+page.svelte b/apps/dashboard/src/routes/(org-site)/course/[slug]/enroll/+page.svelte index 9b1961cf..7f5ecaad 100644 --- a/apps/dashboard/src/routes/(org-site)/course/[slug]/enroll/+page.svelte +++ b/apps/dashboard/src/routes/(org-site)/course/[slug]/enroll/+page.svelte @@ -54,8 +54,14 @@ const inviteStatus = $derived(data.invite?.status ?? 'INVALID'); const hasActiveInvite = $derived(Boolean(data.invite) && inviteStatus === 'ACTIVE'); + // The org-wide cap only applies to *new* students joining the org. We can't + // know the viewer's membership here (public, unauthenticated load), so only + // pre-block anonymous visitors (would-be new joiners). Logged-in users are + // governed by the membership-aware backend, which allows existing members + // and returns UPGRADE_REQUIRED (surfaced via the enroll onError) for new ones. + const blocksNewSignup = $derived(Boolean(data.studentLimitReached) && !isLoggedIn); const canJoinCourse = $derived( - data.requiresPaymentOrInvite + data.requiresPaymentOrInvite || blocksNewSignup ? false : (hasActiveInvite || (!data.invite && data.course?.allowNewStudent !== false)) && data.course?.status === 'ACTIVE' && @@ -63,6 +69,11 @@ ); function getBlockedMessage(): string { + if (blocksNewSignup) { + return t.get('course.navItem.landing_page.enroll_page.student_limit_reached', { + orgName: data.currentOrg?.name ?? '' + }); + } if (data.requiresPaymentOrInvite) { return t.get('course.navItem.landing_page.enroll_page.requires_payment_or_invite'); } diff --git a/packages/core/src/services/course/course.ts b/packages/core/src/services/course/course.ts index c2aecd17..259afb89 100644 --- a/packages/core/src/services/course/course.ts +++ b/packages/core/src/services/course/course.ts @@ -36,11 +36,34 @@ import { and, eq } from 'drizzle-orm'; import { exerciseBelongsToCourse } from '@cio/db/queries/course/certification-exercise'; import { updateExercise, updateExercisesSectionId } from '@cio/db/queries/exercise/exercise'; import { getProfileById } from '@cio/db/queries/auth'; -import { insertOrganizationMembersOnConflictDoNothing } from '@cio/db/queries/organization'; +import { + countActiveStudents, + getActiveOrganizationPlan, + getOrganizationMemberIdByOrgAndProfile, + insertOrganizationMembersOnConflictDoNothing +} from '@cio/db/queries/organization'; +import { getStudentLimit } from '@cio/utils/plans'; +import { env } from '../../config/env'; import { annotateCourseContentWithProgression } from './progression'; import { buildCourseContent, calcPercentageWithRounding, type CourseContent } from './utils'; import { guardCourseTypeTransition } from './public-course-guard'; +/** + * Whether a *new* student would be turned away from this org right now + * (mirrors the check in `apps/api/src/services/organization/student-limit.ts`, + * duplicated here since packages/core can't depend on the api app). + */ +async function isStudentLimitReached(orgId: string): Promise { + if (env.PUBLIC_IS_SELFHOSTED === 'true') return false; + + const activePlan = await getActiveOrganizationPlan(orgId); + const limit = getStudentLimit(activePlan?.planName); + if (!Number.isFinite(limit)) return false; + + const currentCount = await countActiveStudents(orgId); + return currentCount + 1 > limit; +} + const DEFAULT_CONTENT_GROUPING = true; const DEFAULT_SECTION_TITLE = 'First Section [edit me]'; @@ -57,6 +80,17 @@ export async function ensureProgramCourseAccess(courseId: string, profileId: str const normalizedEmail = access.profileEmail?.trim() || undefined; + if (access.roleId === ROLE.STUDENT) { + const existingMemberId = await getOrganizationMemberIdByOrgAndProfile(organizationId, profileId); + if (!existingMemberId && (await isStudentLimitReached(organizationId))) { + throw new AppError( + 'This organization has reached its student limit on the Free plan', + ErrorCodes.UPGRADE_REQUIRED, + 403 + ); + } + } + await db.transaction(async (tx) => { await insertOrganizationMembersOnConflictDoNothing( [ @@ -160,9 +194,12 @@ export async function getCourse(courseId?: string, slug?: string, profileId?: st const { contentItems, org: courseOrg, ...rest } = course; + const studentLimitReached = courseOrg ? await isStudentLimitReached(courseOrg.id) : false; + const base = { ...rest, content, + studentLimitReached, metadata: { ...course.metadata, progressionMode diff --git a/packages/db/package.json b/packages/db/package.json index 8e252823..2bf3c87e 100644 --- a/packages/db/package.json +++ b/packages/db/package.json @@ -68,6 +68,7 @@ "db:login-link": "tsx src/scripts/generate-login-link.ts", "db:sync-orphaned-profiles": "tsx src/scripts/sync-orphaned-profiles.ts", "db:backfill-profile-email-verification": "tsx src/scripts/backfill-profile-email-verification.ts", + "db:notify-students-over-limit": "tsx src/scripts/notify-students-over-limit.ts", "move-users": "tsx src/scripts/supabase-to-betterauth.ts", "pull": "drizzle-kit pull --config drizzle.config.ts", "generate-types": "tsx scripts/generate-types.ts && pnpm format", diff --git a/packages/db/src/queries/organization/organization.ts b/packages/db/src/queries/organization/organization.ts index 51d700c0..657fac6c 100644 --- a/packages/db/src/queries/organization/organization.ts +++ b/packages/db/src/queries/organization/organization.ts @@ -567,6 +567,58 @@ export const getOrganizationTeam = async (orgId: string) => { })); }; +/** + * Counts active organization members with the student role. Used to enforce per-plan student caps. + */ +export async function countActiveStudents(orgId: string): Promise { + try { + const [row] = await db + .select({ count: count(schema.organizationmember.id) }) + .from(schema.organizationmember) + .where( + and(eq(schema.organizationmember.organizationId, orgId), eq(schema.organizationmember.roleId, ROLE.STUDENT)) + ); + + return Number(row?.count ?? 0); + } catch (error) { + console.error('countActiveStudents error:', error); + throw new Error('Failed to count active students'); + } +} + +/** + * Gets verified admin emails for an organization. Used to notify admins about plan-limit events. + */ +export async function getOrganizationAdminEmails(orgId: string): Promise> { + try { + const result = await db + .select({ + email: schema.organizationmember.email, + profileEmail: schema.profile.email, + fullname: schema.profile.fullname + }) + .from(schema.organizationmember) + .leftJoin(schema.profile, eq(schema.organizationmember.profileId, schema.profile.id)) + .where( + and( + eq(schema.organizationmember.organizationId, orgId), + eq(schema.organizationmember.roleId, ROLE.ADMIN), + eq(schema.organizationmember.verified, true) + ) + ); + + return result + .map((member) => ({ + email: member.profileEmail || member.email || '', + fullname: member.fullname || '' + })) + .filter((member) => member.email); + } catch (error) { + console.error('getOrganizationAdminEmails error:', error); + throw new Error('Failed to get organization admin emails'); + } +} + /** * Gets organization audience (all organization members with student role). * Includes invited members without a profile (LEFT JOIN profile). diff --git a/packages/db/src/queries/organization/types.ts b/packages/db/src/queries/organization/types.ts index ae85743e..6145ba5b 100644 --- a/packages/db/src/queries/organization/types.ts +++ b/packages/db/src/queries/organization/types.ts @@ -1,4 +1,5 @@ import { TOrganization, TOrganizationPlan } from '@db/types'; +import type { OrgUsageLimits } from '@cio/utils/plans'; export type OrganizationPlan = Pick & { customerId: string | null; @@ -8,6 +9,7 @@ export type OrganizationWithMemberAndPlans = TOrganization & { memberId?: number; roleId?: number; plans: OrganizationPlan[]; + limits?: OrgUsageLimits; }; export type OrganizationWithPlans = TOrganization & { diff --git a/packages/db/src/scripts/notify-students-over-limit.ts b/packages/db/src/scripts/notify-students-over-limit.ts new file mode 100644 index 00000000..adef0a3f --- /dev/null +++ b/packages/db/src/scripts/notify-students-over-limit.ts @@ -0,0 +1,70 @@ +/** + * One-time (manual, not cron) backfill: email admins of every free-plan org + * that already exceeds the student limit, so they know new enrolments/invites + * are now blocked. Dry-run by default; pass --execute to actually send. + * + * Usage: + * pnpm db:notify-students-over-limit # dry run (default) + * pnpm db:notify-students-over-limit -- --execute # send emails + */ +import 'dotenv/config'; + +import { buildEmailBranding, sendEmail } from '@cio/email'; +import { PLAN, getStudentLimit, isOrgOnFreePlan } from '@cio/utils/plans'; + +import { + countActiveStudents, + getOrganizationAdminEmails, + getOrganizations +} from '../queries/organization/organization'; + +async function main() { + const execute = process.argv.includes('--execute'); + const orgs = await getOrganizations(); + const limit = getStudentLimit(PLAN.BASIC); + + let notified = 0; + + for (const org of orgs) { + const isFree = isOrgOnFreePlan({ plans: org.plans, isSelfHosted: false, orgId: org.id }); + if (!isFree) continue; + + const studentCount = await countActiveStudents(org.id); + if (studentCount <= limit) continue; + + const admins = await getOrganizationAdminEmails(org.id); + if (!admins.length) { + console.log(`Skipping ${org.name} (${org.id}): ${studentCount}/${limit} but no admin emails`); + continue; + } + + console.log( + `${execute ? 'Notifying' : '[dry-run] Would notify'} ${org.name} (${org.id}): ${studentCount}/${limit} students → ${admins.length} admin(s)` + ); + + if (execute) { + const branding = buildEmailBranding({ name: org.name, avatarUrl: org.avatarUrl, theme: org.theme }); + const upgradeUrl = `https://app.classroomio.com/org/${org.siteName ?? ''}?upgrade=true`; + + await Promise.all( + admins.map((admin) => + sendEmail('studentLimitReached', { + to: admin.email, + fields: { orgName: org.name, studentCount, studentLimit: limit, upgradeUrl, branding } + }) + ) + ); + + notified++; + } + } + + console.log(execute ? `Done. Notified ${notified} org(s).` : 'Dry run complete — re-run with --execute to send.'); +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/packages/email/src/emails/index.ts b/packages/email/src/emails/index.ts index 3c229390..41ee21fc 100644 --- a/packages/email/src/emails/index.ts +++ b/packages/email/src/emails/index.ts @@ -26,6 +26,7 @@ export * from './quiz-assigned'; export * from './session'; export * from './submission-received'; export * from './submission-graded'; +export * from './student-limit-reached'; import type { newsfeedCommentEmail, newsfeedPostEmail } from './newsfeed'; @@ -44,6 +45,7 @@ import type { quizAssignedEmail } from './quiz-assigned'; import type { sessionReminderEmail, sessionUpdatedEmail } from './session'; import type { submissionReceivedEmail } from './submission-received'; import type { submissionGradedEmail } from './submission-graded'; +import type { studentLimitReachedEmail } from './student-limit-reached'; import type { teacherCourseWelcomeEmail } from './teacher-course-welcome'; import type { teacherStudentBuyRequestEmail } from './teacher-student-buy-request'; import type { teacherStudentJoinedEmail } from './teacher-student-joined'; @@ -79,4 +81,5 @@ export type EmailSchemas = { sessionUpdated: typeof sessionUpdatedEmail.template.schema; submissionReceived: typeof submissionReceivedEmail.template.schema; submissionGraded: typeof submissionGradedEmail.template.schema; + studentLimitReached: typeof studentLimitReachedEmail.template.schema; }; diff --git a/packages/email/src/emails/student-limit-reached.ts b/packages/email/src/emails/student-limit-reached.ts new file mode 100644 index 00000000..715a1093 --- /dev/null +++ b/packages/email/src/emails/student-limit-reached.ts @@ -0,0 +1,28 @@ +import * as z from 'zod'; + +import { defineEmail } from '../send'; +import { getDefaultTemplate } from '../templates'; +import { ZEmailBranding } from '../core/branding'; + +export const studentLimitReachedEmail = defineEmail({ + id: 'studentLimitReached', + subject: "You've reached your Free plan student limit", + schema: z.object({ + orgName: z.string().min(1), + studentCount: z.number(), + studentLimit: z.number(), + upgradeUrl: z.string().url(), + branding: ZEmailBranding + }), + render: (fields) => { + const content = ` +

Hi there,

+

${fields.orgName} has reached the ${fields.studentLimit}-student limit on the Free plan (currently ${fields.studentCount} students). New students can't enrol or be invited until you upgrade.

+ + `; + + return getDefaultTemplate(content, fields.branding); + } +}); diff --git a/packages/email/src/utils/constants.ts b/packages/email/src/utils/constants.ts index 7b32e7aa..969447a3 100644 --- a/packages/email/src/utils/constants.ts +++ b/packages/email/src/utils/constants.ts @@ -12,6 +12,7 @@ export const EMAIL_IDS = [ 'sessionUpdated', 'submissionGraded', 'submissionReceived', + 'studentLimitReached', 'studentCourseInvite', 'studentCourseCompletion', 'studentCourseWelcome', diff --git a/packages/ui/src/base/progress/index.ts b/packages/ui/src/base/progress/index.ts index 8685886f..384b8e3b 100644 --- a/packages/ui/src/base/progress/index.ts +++ b/packages/ui/src/base/progress/index.ts @@ -1,7 +1,9 @@ -import Root from './progress.svelte'; +import Root, { type ProgressVariant, progressVariants } from './progress.svelte'; export { Root, // - Root as Progress + Root as Progress, + progressVariants, + type ProgressVariant }; diff --git a/packages/ui/src/base/progress/progress.svelte b/packages/ui/src/base/progress/progress.svelte index 2e01227d..e2518bbc 100644 --- a/packages/ui/src/base/progress/progress.svelte +++ b/packages/ui/src/base/progress/progress.svelte @@ -1,3 +1,25 @@ + + - +
diff --git a/packages/ui/src/output.css b/packages/ui/src/output.css index 399422df..781a076a 100644 --- a/packages/ui/src/output.css +++ b/packages/ui/src/output.css @@ -1,2 +1,2 @@ /*! tailwindcss v4.2.1 | MIT License | https://tailwindcss.com */ -@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-space-y-reverse:0;--tw-space-x-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:"";--tw-outline-style:solid;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0;--border-angle:0deg}}}@layer theme{:root,:host{--ui-font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--ui-font-serif:ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--ui-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--ui-color-red-50:oklch(97.1% .013 17.38);--ui-color-red-500:oklch(63.7% .237 25.331);--ui-color-red-600:oklch(57.7% .245 27.325);--ui-color-red-700:oklch(50.5% .213 27.518);--ui-color-red-950:oklch(25.8% .092 26.042);--ui-color-orange-500:oklch(70.5% .213 47.604);--ui-color-amber-50:oklch(98.7% .022 95.277);--ui-color-amber-200:oklch(92.4% .12 95.746);--ui-color-amber-300:oklch(87.9% .169 91.605);--ui-color-amber-400:oklch(82.8% .189 84.429);--ui-color-amber-500:oklch(76.9% .188 70.08);--ui-color-amber-600:oklch(66.6% .179 58.318);--ui-color-amber-900:oklch(41.4% .112 45.904);--ui-color-amber-950:oklch(27.9% .077 45.635);--ui-color-yellow-500:oklch(79.5% .184 86.047);--ui-color-green-500:oklch(72.3% .219 149.579);--ui-color-green-600:oklch(62.7% .194 149.214);--ui-color-emerald-50:oklch(97.9% .021 166.113);--ui-color-emerald-300:oklch(84.5% .143 164.978);--ui-color-emerald-400:oklch(76.5% .177 163.223);--ui-color-emerald-500:oklch(69.6% .17 162.48);--ui-color-emerald-600:oklch(59.6% .145 163.225);--ui-color-emerald-700:oklch(50.8% .118 165.612);--ui-color-emerald-950:oklch(26.2% .051 172.552);--ui-color-sky-50:oklch(97.7% .013 236.62);--ui-color-sky-200:oklch(90.1% .058 230.902);--ui-color-sky-900:oklch(39.1% .09 240.876);--ui-color-sky-950:oklch(29.3% .066 243.157);--ui-color-blue-600:oklch(54.6% .245 262.881);--ui-color-violet-500:oklch(60.6% .25 292.717);--ui-color-pink-500:oklch(65.6% .241 354.308);--ui-color-rose-500:oklch(64.5% .246 16.439);--ui-color-slate-500:oklch(55.4% .046 257.417);--ui-color-slate-800:oklch(27.9% .041 260.031);--ui-color-slate-950:oklch(12.9% .042 264.695);--ui-color-gray-200:oklch(92.8% .006 264.531);--ui-color-gray-700:oklch(37.3% .034 259.733);--ui-color-zinc-100:oklch(96.7% .001 286.375);--ui-color-zinc-300:oklch(87.1% .006 286.286);--ui-color-zinc-400:oklch(70.5% .015 286.067);--ui-color-zinc-700:oklch(37% .013 285.805);--ui-color-zinc-800:oklch(27.4% .006 286.033);--ui-color-neutral-100:oklch(97% 0 0);--ui-color-neutral-400:oklch(70.8% 0 0);--ui-color-neutral-600:oklch(43.9% 0 0);--ui-color-neutral-800:oklch(26.9% 0 0);--ui-color-neutral-900:oklch(20.5% 0 0);--ui-color-black:#000;--ui-color-white:#fff;--ui-spacing:.25rem;--ui-container-xs:20rem;--ui-container-sm:24rem;--ui-container-md:28rem;--ui-container-lg:32rem;--ui-container-xl:36rem;--ui-container-2xl:42rem;--ui-container-3xl:48rem;--ui-container-4xl:56rem;--ui-container-5xl:64rem;--ui-container-7xl:80rem;--ui-text-xs:.75rem;--ui-text-xs--line-height:calc(1 / .75);--ui-text-sm:.875rem;--ui-text-sm--line-height:calc(1.25 / .875);--ui-text-base:1rem;--ui-text-base--line-height:calc(1.5 / 1);--ui-text-lg:1.125rem;--ui-text-lg--line-height:calc(1.75 / 1.125);--ui-text-xl:1.25rem;--ui-text-xl--line-height:calc(1.75 / 1.25);--ui-text-2xl:1.5rem;--ui-text-2xl--line-height:calc(2 / 1.5);--ui-text-3xl:1.875rem;--ui-text-3xl--line-height:calc(2.25 / 1.875);--ui-text-4xl:2.25rem;--ui-text-4xl--line-height:calc(2.5 / 2.25);--ui-text-5xl:3rem;--ui-text-5xl--line-height:1;--ui-text-6xl:3.75rem;--ui-text-6xl--line-height:1;--ui-text-7xl:4.5rem;--ui-text-7xl--line-height:1;--ui-font-weight-light:300;--ui-font-weight-normal:400;--ui-font-weight-medium:500;--ui-font-weight-semibold:600;--ui-font-weight-bold:700;--ui-font-weight-extrabold:800;--ui-font-weight-black:900;--ui-tracking-tighter:-.05em;--ui-tracking-tight:-.025em;--ui-tracking-wide:.025em;--ui-tracking-wider:.05em;--ui-tracking-widest:.1em;--ui-leading-tight:1.25;--ui-leading-snug:1.375;--ui-leading-normal:1.5;--ui-leading-relaxed:1.625;--ui-radius-xs:.125rem;--ui-radius-2xl:1rem;--ui-radius-3xl:1.5rem;--ui-drop-shadow-sm:0 1px 2px #00000026;--ui-ease-out:cubic-bezier(0, 0, .2, 1);--ui-ease-in-out:cubic-bezier(.4, 0, .2, 1);--ui-animate-spin:spin 1s linear infinite;--ui-animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--ui-blur-sm:8px;--ui-blur-md:12px;--ui-blur-xl:24px;--ui-blur-2xl:40px;--ui-blur-3xl:64px;--ui-aspect-video:16 / 9;--ui-default-transition-duration:.15s;--ui-default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--ui-default-mono-font-family:var(--ui-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(--font-cio,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--ui-default-font-feature-settings,normal);font-variation-settings:var(--ui-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--ui-default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--ui-default-mono-font-feature-settings,normal);font-variation-settings:var(--ui-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){*{outline-color:color-mix(in oklab, var(--ring) 50%, transparent)}}body{background-color:var(--background);font-family:var(--font-sans);color:var(--foreground)}button,input,select,optgroup,textarea{font-family:var(--font-sans)}::file-selector-button{font-family:var(--font-sans)}.toaster{--normal-bg:var(--color-popover);--normal-text:var(--color-popover-foreground);--normal-border:var(--color-border)}}@layer components{.cio-marketing-border-beam{pointer-events:none;border-radius:inherit;border:calc(var(--border-width) * 1px) solid transparent;-webkit-mask-composite:source-in;-webkit-mask-source-type:auto,auto;position:absolute;inset:0;-webkit-mask-image:linear-gradient(#0000,#0000),linear-gradient(#fff,#fff);mask-image:linear-gradient(#0000,#0000),linear-gradient(#fff,#fff);-webkit-mask-position:0 0,0 0;mask-position:0 0,0 0;-webkit-mask-size:auto,auto;mask-size:auto,auto;-webkit-mask-repeat:repeat,repeat;mask-repeat:repeat,repeat;-webkit-mask-clip:padding-box,border-box;mask-clip:padding-box,border-box;-webkit-mask-origin:border-box,border-box;mask-origin:border-box,border-box;-webkit-mask-composite:source-in;mask-composite:intersect;-webkit-mask-source-type:auto,auto;mask-mode:match-source,match-source}.cio-marketing-border-beam:after{content:"";aspect-ratio:1;width:calc(var(--size) * 1px);animation-delay:var(--delay);background:linear-gradient(to left, var(--color-from), var(--color-to), transparent);offset-anchor:calc(var(--anchor) * 1%) 50%;offset-path:rect(0 auto auto 0 round calc(var(--size) * 1px));animation:border-beam calc(var(--duration) * 1s) infinite linear;position:absolute}}@layer utilities{.ui\:\@container\/field-group{container:field-group/inline-size}.ui\:\@container{container-type:inline-size}.ui\:\@container-\[size\]{container-type:size}.ui\:pointer-events-none{pointer-events:none}.ui\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.ui\:absolute{position:absolute}.ui\:fixed{position:fixed}.ui\:relative{position:relative}.ui\:sticky{position:sticky}.ui\:-inset-full{inset:-100%}.ui\:-inset-px{inset:-1px}.ui\:inset-\(--cut\){inset:var(--cut)}.ui\:inset-0{inset:calc(var(--ui-spacing) * 0)}.ui\:inset-x-0{inset-inline:calc(var(--ui-spacing) * 0)}.ui\:inset-x-\[-10\%\]{inset-inline:-10%}.ui\:inset-y-0{inset-block:calc(var(--ui-spacing) * 0)}.ui\:start-0{inset-inline-start:calc(var(--ui-spacing) * 0)}.ui\:end-4{inset-inline-end:calc(var(--ui-spacing) * 4)}.ui\:-top-2{top:calc(var(--ui-spacing) * -2)}.ui\:-top-3{top:calc(var(--ui-spacing) * -3)}.ui\:-top-16{top:calc(var(--ui-spacing) * -16)}.ui\:-top-20{top:calc(var(--ui-spacing) * -20)}.ui\:-top-32{top:calc(var(--ui-spacing) * -32)}.ui\:top-0{top:calc(var(--ui-spacing) * 0)}.ui\:top-1\.5{top:calc(var(--ui-spacing) * 1.5)}.ui\:top-1\/2{top:50%}.ui\:top-2{top:calc(var(--ui-spacing) * 2)}.ui\:top-3{top:calc(var(--ui-spacing) * 3)}.ui\:top-3\.5{top:calc(var(--ui-spacing) * 3.5)}.ui\:top-4{top:calc(var(--ui-spacing) * 4)}.ui\:top-11{top:calc(var(--ui-spacing) * 11)}.ui\:top-12{top:calc(var(--ui-spacing) * 12)}.ui\:top-\[-12px\]{top:-12px}.ui\:top-\[6px\]{top:6px}.ui\:top-\[50\%\]{top:50%}.ui\:top-\[60\%\]{top:60%}.ui\:top-full{top:100%}.ui\:top-px{top:1px}.ui\:-right-4{right:calc(var(--ui-spacing) * -4)}.ui\:right-0{right:calc(var(--ui-spacing) * 0)}.ui\:right-1{right:calc(var(--ui-spacing) * 1)}.ui\:right-2{right:calc(var(--ui-spacing) * 2)}.ui\:right-3{right:calc(var(--ui-spacing) * 3)}.ui\:right-3\.5{right:calc(var(--ui-spacing) * 3.5)}.ui\:right-4{right:calc(var(--ui-spacing) * 4)}.ui\:right-9{right:calc(var(--ui-spacing) * 9)}.ui\:right-\[-10\%\]{right:-10%}.ui\:right-\[-12px\]{right:-12px}.ui\:-bottom-px{bottom:-1px}.ui\:bottom-0{bottom:calc(var(--ui-spacing) * 0)}.ui\:bottom-2{bottom:calc(var(--ui-spacing) * 2)}.ui\:bottom-3{bottom:calc(var(--ui-spacing) * 3)}.ui\:bottom-3\.5{bottom:calc(var(--ui-spacing) * 3.5)}.ui\:bottom-4{bottom:calc(var(--ui-spacing) * 4)}.ui\:bottom-\[-50\%\]{bottom:-50%}.ui\:bottom-\[-220px\]{bottom:-220px}.ui\:bottom-full{bottom:100%}.ui\:-left-24{left:calc(var(--ui-spacing) * -24)}.ui\:left-0{left:calc(var(--ui-spacing) * 0)}.ui\:left-1\/2{left:50%}.ui\:left-2{left:calc(var(--ui-spacing) * 2)}.ui\:left-3{left:calc(var(--ui-spacing) * 3)}.ui\:left-3\.5{left:calc(var(--ui-spacing) * 3.5)}.ui\:left-\[50\%\]{left:50%}.ui\:left-\[calc\(50\%-3rem\)\]{left:calc(50% - 3rem)}.ui\:left-auto{left:auto}.ui\:left-full{left:100%}.ui\:isolate{isolation:isolate}.ui\:-z-10{z-index:calc(10 * -1)}.ui\:-z-20{z-index:calc(20 * -1)}.ui\:-z-30{z-index:calc(30 * -1)}.ui\:z-0{z-index:0}.ui\:z-1{z-index:1}.ui\:z-10{z-index:10}.ui\:z-20{z-index:20}.ui\:z-30{z-index:30}.ui\:z-40{z-index:40}.ui\:z-50{z-index:50}.ui\:z-999{z-index:999}.ui\:z-\[1\]{z-index:1}.ui\:z-\[110\]{z-index:110}.ui\:z-app-bar{z-index:100}.ui\:z-app-bar\!{z-index:100!important}.ui\:z-app-bar-elevated{z-index:150}.ui\:z-app-bar-elevated\!{z-index:150!important}.ui\:z-menu-elevated{z-index:250}.ui\:z-menu-elevated\!{z-index:250!important}.ui\:z-modal{z-index:200}.ui\:z-modal\!{z-index:200!important}.ui\:order-first{order:-9999}.ui\:order-last{order:9999}.ui\:col-start-2{grid-column-start:2}.ui\:row-span-2{grid-row:span 2/span 2}.ui\:row-start-1{grid-row-start:1}.ui\:m-0{margin:calc(var(--ui-spacing) * 0)}.ui\:m-0\!{margin:calc(var(--ui-spacing) * 0)!important}.ui\:-mx-1{margin-inline:calc(var(--ui-spacing) * -1)}.ui\:-mx-6{margin-inline:calc(var(--ui-spacing) * -6)}.ui\:-mx-\[2\.5px\]{margin-inline:-2.5px}.ui\:-mx-\[2px\]{margin-inline:-2px}.ui\:mx-0\.5{margin-inline:calc(var(--ui-spacing) * .5)}.ui\:mx-2{margin-inline:calc(var(--ui-spacing) * 2)}.ui\:mx-4{margin-inline:calc(var(--ui-spacing) * 4)}.ui\:mx-5{margin-inline:calc(var(--ui-spacing) * 5)}.ui\:mx-auto{margin-inline:auto}.ui\:my-0{margin-block:calc(var(--ui-spacing) * 0)}.ui\:my-0\.5{margin-block:calc(var(--ui-spacing) * .5)}.ui\:my-1{margin-block:calc(var(--ui-spacing) * 1)}.ui\:my-2{margin-block:calc(var(--ui-spacing) * 2)}.ui\:my-3{margin-block:calc(var(--ui-spacing) * 3)}.ui\:my-4{margin-block:calc(var(--ui-spacing) * 4)}.ui\:my-10{margin-block:calc(var(--ui-spacing) * 10)}.ui\:ms-1{margin-inline-start:calc(var(--ui-spacing) * 1)}.ui\:ms-4{margin-inline-start:calc(var(--ui-spacing) * 4)}.ui\:-mt-1{margin-top:calc(var(--ui-spacing) * -1)}.ui\:mt-0\.5{margin-top:calc(var(--ui-spacing) * .5)}.ui\:mt-1{margin-top:calc(var(--ui-spacing) * 1)}.ui\:mt-1\.5{margin-top:calc(var(--ui-spacing) * 1.5)}.ui\:mt-2{margin-top:calc(var(--ui-spacing) * 2)}.ui\:mt-2\.5{margin-top:calc(var(--ui-spacing) * 2.5)}.ui\:mt-3{margin-top:calc(var(--ui-spacing) * 3)}.ui\:mt-4{margin-top:calc(var(--ui-spacing) * 4)}.ui\:mt-6{margin-top:calc(var(--ui-spacing) * 6)}.ui\:mt-7{margin-top:calc(var(--ui-spacing) * 7)}.ui\:mt-8{margin-top:calc(var(--ui-spacing) * 8)}.ui\:mt-9{margin-top:calc(var(--ui-spacing) * 9)}.ui\:mt-10{margin-top:calc(var(--ui-spacing) * 10)}.ui\:mt-12{margin-top:calc(var(--ui-spacing) * 12)}.ui\:mt-14{margin-top:calc(var(--ui-spacing) * 14)}.ui\:mt-16{margin-top:calc(var(--ui-spacing) * 16)}.ui\:mt-auto{margin-top:auto}.ui\:mr-1{margin-right:calc(var(--ui-spacing) * 1)}.ui\:mr-2{margin-right:calc(var(--ui-spacing) * 2)}.ui\:-mb-6{margin-bottom:calc(var(--ui-spacing) * -6)}.ui\:mb-1{margin-bottom:calc(var(--ui-spacing) * 1)}.ui\:mb-1\.5{margin-bottom:calc(var(--ui-spacing) * 1.5)}.ui\:mb-2{margin-bottom:calc(var(--ui-spacing) * 2)}.ui\:mb-2\.5{margin-bottom:calc(var(--ui-spacing) * 2.5)}.ui\:mb-3{margin-bottom:calc(var(--ui-spacing) * 3)}.ui\:mb-4{margin-bottom:calc(var(--ui-spacing) * 4)}.ui\:mb-5{margin-bottom:calc(var(--ui-spacing) * 5)}.ui\:mb-6{margin-bottom:calc(var(--ui-spacing) * 6)}.ui\:mb-7{margin-bottom:calc(var(--ui-spacing) * 7)}.ui\:mb-8{margin-bottom:calc(var(--ui-spacing) * 8)}.ui\:mb-9{margin-bottom:calc(var(--ui-spacing) * 9)}.ui\:mb-10{margin-bottom:calc(var(--ui-spacing) * 10)}.ui\:mb-12{margin-bottom:calc(var(--ui-spacing) * 12)}.ui\:mb-14{margin-bottom:calc(var(--ui-spacing) * 14)}.ui\:mb-16{margin-bottom:calc(var(--ui-spacing) * 16)}.ui\:ml-1{margin-left:calc(var(--ui-spacing) * 1)}.ui\:ml-2{margin-left:calc(var(--ui-spacing) * 2)}.ui\:ml-2\.5{margin-left:calc(var(--ui-spacing) * 2.5)}.ui\:ml-auto{margin-left:auto}.ui\:box-border{box-sizing:border-box}.ui\:line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.ui\:line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.ui\:line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.ui\:block{display:block}.ui\:flex{display:flex}.ui\:grid{display:grid}.ui\:hidden{display:none}.ui\:inline-block{display:inline-block}.ui\:inline-flex{display:inline-flex}.ui\:field-sizing-content{field-sizing:content}.ui\:aspect-\[1\],.ui\:aspect-square{aspect-ratio:1}.ui\:aspect-video{aspect-ratio:var(--ui-aspect-video)}.ui\:\!size-6{width:calc(var(--ui-spacing) * 6)!important;height:calc(var(--ui-spacing) * 6)!important}.ui\:size-1{width:calc(var(--ui-spacing) * 1);height:calc(var(--ui-spacing) * 1)}.ui\:size-1\.5{width:calc(var(--ui-spacing) * 1.5);height:calc(var(--ui-spacing) * 1.5)}.ui\:size-2{width:calc(var(--ui-spacing) * 2);height:calc(var(--ui-spacing) * 2)}.ui\:size-2\.5{width:calc(var(--ui-spacing) * 2.5);height:calc(var(--ui-spacing) * 2.5)}.ui\:size-3{width:calc(var(--ui-spacing) * 3);height:calc(var(--ui-spacing) * 3)}.ui\:size-3\.5{width:calc(var(--ui-spacing) * 3.5);height:calc(var(--ui-spacing) * 3.5)}.ui\:size-4{width:calc(var(--ui-spacing) * 4);height:calc(var(--ui-spacing) * 4)}.ui\:size-5{width:calc(var(--ui-spacing) * 5);height:calc(var(--ui-spacing) * 5)}.ui\:size-6{width:calc(var(--ui-spacing) * 6);height:calc(var(--ui-spacing) * 6)}.ui\:size-7{width:calc(var(--ui-spacing) * 7);height:calc(var(--ui-spacing) * 7)}.ui\:size-8{width:calc(var(--ui-spacing) * 8);height:calc(var(--ui-spacing) * 8)}.ui\:size-9{width:calc(var(--ui-spacing) * 9);height:calc(var(--ui-spacing) * 9)}.ui\:size-10{width:calc(var(--ui-spacing) * 10);height:calc(var(--ui-spacing) * 10)}.ui\:size-11{width:calc(var(--ui-spacing) * 11);height:calc(var(--ui-spacing) * 11)}.ui\:size-12{width:calc(var(--ui-spacing) * 12);height:calc(var(--ui-spacing) * 12)}.ui\:size-14{width:calc(var(--ui-spacing) * 14);height:calc(var(--ui-spacing) * 14)}.ui\:size-14\!{width:calc(var(--ui-spacing) * 14)!important;height:calc(var(--ui-spacing) * 14)!important}.ui\:size-16{width:calc(var(--ui-spacing) * 16);height:calc(var(--ui-spacing) * 16)}.ui\:size-20{width:calc(var(--ui-spacing) * 20);height:calc(var(--ui-spacing) * 20)}.ui\:size-24{width:calc(var(--ui-spacing) * 24);height:calc(var(--ui-spacing) * 24)}.ui\:size-28{width:calc(var(--ui-spacing) * 28);height:calc(var(--ui-spacing) * 28)}.ui\:size-32{width:calc(var(--ui-spacing) * 32);height:calc(var(--ui-spacing) * 32)}.ui\:size-\[2\.4px\]{width:2.4px;height:2.4px}.ui\:size-\[11px\]{width:11px;height:11px}.ui\:size-\[22px\]{width:22px;height:22px}.ui\:size-\[640px\]{width:640px;height:640px}.ui\:size-\[800px\]{width:800px;height:800px}.ui\:size-fit{width:fit-content;height:fit-content}.ui\:size-full{width:100%;height:100%}.ui\:h-\(--bits-navigation-menu-viewport-height\){height:var(--bits-navigation-menu-viewport-height)}.ui\:h-\(--bits-select-anchor-height\){height:var(--bits-select-anchor-height)}.ui\:h-0{height:calc(var(--ui-spacing) * 0)}.ui\:h-0\.5{height:calc(var(--ui-spacing) * .5)}.ui\:h-0\.5\!{height:calc(var(--ui-spacing) * .5)!important}.ui\:h-1{height:calc(var(--ui-spacing) * 1)}.ui\:h-1\.5{height:calc(var(--ui-spacing) * 1.5)}.ui\:h-2{height:calc(var(--ui-spacing) * 2)}.ui\:h-2\.5{height:calc(var(--ui-spacing) * 2.5)}.ui\:h-3{height:calc(var(--ui-spacing) * 3)}.ui\:h-4{height:calc(var(--ui-spacing) * 4)}.ui\:h-5{height:calc(var(--ui-spacing) * 5)}.ui\:h-6{height:calc(var(--ui-spacing) * 6)}.ui\:h-7{height:calc(var(--ui-spacing) * 7)}.ui\:h-8{height:calc(var(--ui-spacing) * 8)}.ui\:h-9{height:calc(var(--ui-spacing) * 9)}.ui\:h-10{height:calc(var(--ui-spacing) * 10)}.ui\:h-12{height:calc(var(--ui-spacing) * 12)}.ui\:h-14{height:calc(var(--ui-spacing) * 14)}.ui\:h-16{height:calc(var(--ui-spacing) * 16)}.ui\:h-20{height:calc(var(--ui-spacing) * 20)}.ui\:h-24{height:calc(var(--ui-spacing) * 24)}.ui\:h-28{height:calc(var(--ui-spacing) * 28)}.ui\:h-40{height:calc(var(--ui-spacing) * 40)}.ui\:h-48{height:calc(var(--ui-spacing) * 48)}.ui\:h-50\!{height:calc(var(--ui-spacing) * 50)!important}.ui\:h-96{height:calc(var(--ui-spacing) * 96)}.ui\:h-128{height:calc(var(--ui-spacing) * 128)}.ui\:h-\[1\.2rem\]{height:1.2rem}.ui\:h-\[1\.15rem\]{height:1.15rem}.ui\:h-\[6px\]{height:6px}.ui\:h-\[10px\]{height:10px}.ui\:h-\[14px\]{height:14px}.ui\:h-\[22px\]{height:22px}.ui\:h-\[70px\]{height:70px}.ui\:h-\[72px\]{height:72px}.ui\:h-\[100cqh\]{height:100cqh}.ui\:h-\[168px\]{height:168px}.ui\:h-\[180px\]{height:180px}.ui\:h-\[200px\]{height:200px}.ui\:h-\[280px\]{height:280px}.ui\:h-\[380px\]{height:380px}.ui\:h-\[420px\]{height:420px}.ui\:h-\[440px\]{height:440px}.ui\:h-\[460px\]{height:460px}.ui\:h-\[500px\]{height:500px}.ui\:h-\[520px\]{height:520px}.ui\:h-\[680px\]{height:680px}.ui\:h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.ui\:h-\[calc\(100\%-3px\)\]{height:calc(100% - 3px)}.ui\:h-\[calc\(100dvh-3rem\)\]{height:calc(100dvh - 3rem)}.ui\:h-auto{height:auto}.ui\:h-fit{height:fit-content}.ui\:h-fit\!{height:fit-content!important}.ui\:h-full{height:100%}.ui\:h-px{height:1px}.ui\:h-screen{height:100vh}.ui\:max-h-\(--bits-dropdown-menu-content-available-height\){max-height:var(--bits-dropdown-menu-content-available-height)}.ui\:max-h-\(--bits-select-content-available-height\){max-height:var(--bits-select-content-available-height)}.ui\:max-h-32{max-height:calc(var(--ui-spacing) * 32)}.ui\:max-h-52{max-height:calc(var(--ui-spacing) * 52)}.ui\:max-h-60{max-height:calc(var(--ui-spacing) * 60)}.ui\:max-h-64{max-height:calc(var(--ui-spacing) * 64)}.ui\:max-h-72{max-height:calc(var(--ui-spacing) * 72)}.ui\:max-h-80{max-height:calc(var(--ui-spacing) * 80)}.ui\:max-h-90{max-height:calc(var(--ui-spacing) * 90)}.ui\:max-h-96{max-height:calc(var(--ui-spacing) * 96)}.ui\:max-h-\[85vh\]{max-height:85vh}.ui\:max-h-\[300px\]{max-height:300px}.ui\:max-h-svh{max-height:100svh}.ui\:min-h-0{min-height:calc(var(--ui-spacing) * 0)}.ui\:min-h-4{min-height:calc(var(--ui-spacing) * 4)}.ui\:min-h-8{min-height:calc(var(--ui-spacing) * 8)}.ui\:min-h-14{min-height:calc(var(--ui-spacing) * 14)}.ui\:min-h-16{min-height:calc(var(--ui-spacing) * 16)}.ui\:min-h-40{min-height:calc(var(--ui-spacing) * 40)}.ui\:min-h-96{min-height:calc(var(--ui-spacing) * 96)}.ui\:min-h-\[32rem\]{min-height:32rem}.ui\:min-h-\[44px\]{min-height:44px}.ui\:min-h-\[63px\]{min-height:63px}.ui\:min-h-\[240px\]{min-height:240px}.ui\:min-h-\[320px\]{min-height:320px}.ui\:min-h-\[calc\(100dvh-3rem\)\]{min-height:calc(100dvh - 3rem)}.ui\:min-h-\[calc\(100vh-48px\)\]{min-height:calc(100vh - 48px)}.ui\:min-h-dvh{min-height:100dvh}.ui\:min-h-screen{min-height:100vh}.ui\:w-\(--sidebar-width\){width:var(--sidebar-width)}.ui\:w-0{width:calc(var(--ui-spacing) * 0)}.ui\:w-1{width:calc(var(--ui-spacing) * 1)}.ui\:w-1\.5{width:calc(var(--ui-spacing) * 1.5)}.ui\:w-1\/4{width:25%}.ui\:w-2{width:calc(var(--ui-spacing) * 2)}.ui\:w-2\.5{width:calc(var(--ui-spacing) * 2.5)}.ui\:w-2\/4{width:50%}.ui\:w-3\/4{width:75%}.ui\:w-4{width:calc(var(--ui-spacing) * 4)}.ui\:w-5{width:calc(var(--ui-spacing) * 5)}.ui\:w-6{width:calc(var(--ui-spacing) * 6)}.ui\:w-7{width:calc(var(--ui-spacing) * 7)}.ui\:w-8{width:calc(var(--ui-spacing) * 8)}.ui\:w-10{width:calc(var(--ui-spacing) * 10)}.ui\:w-14{width:calc(var(--ui-spacing) * 14)}.ui\:w-16{width:calc(var(--ui-spacing) * 16)}.ui\:w-20{width:calc(var(--ui-spacing) * 20)}.ui\:w-24{width:calc(var(--ui-spacing) * 24)}.ui\:w-28{width:calc(var(--ui-spacing) * 28)}.ui\:w-40{width:calc(var(--ui-spacing) * 40)}.ui\:w-48{width:calc(var(--ui-spacing) * 48)}.ui\:w-52{width:calc(var(--ui-spacing) * 52)}.ui\:w-64{width:calc(var(--ui-spacing) * 64)}.ui\:w-72{width:calc(var(--ui-spacing) * 72)}.ui\:w-88{width:calc(var(--ui-spacing) * 88)}.ui\:w-96{width:calc(var(--ui-spacing) * 96)}.ui\:w-\[1\.2rem\]{width:1.2rem}.ui\:w-\[10px\]{width:10px}.ui\:w-\[25px\]{width:25px}.ui\:w-\[50px\]{width:50px}.ui\:w-\[80\%\]{width:80%}.ui\:w-\[84\%\]{width:84%}.ui\:w-\[100px\]{width:100px}.ui\:w-\[260px\]{width:260px}.ui\:w-\[420px\]{width:420px}.ui\:w-\[520px\]{width:520px}.ui\:w-auto{width:auto}.ui\:w-fit{width:fit-content}.ui\:w-fit\!{width:fit-content!important}.ui\:w-full{width:100%}.ui\:w-full\!{width:100%!important}.ui\:w-max{width:max-content}.ui\:w-px{width:1px}.ui\:w-screen{width:100vw}.ui\:max-w-\(--skeleton-width\){max-width:var(--skeleton-width)}.ui\:max-w-2xl{max-width:var(--ui-container-2xl)}.ui\:max-w-3xl{max-width:var(--ui-container-3xl)}.ui\:max-w-4xl{max-width:var(--ui-container-4xl)}.ui\:max-w-5xl{max-width:var(--ui-container-5xl)}.ui\:max-w-6{max-width:calc(var(--ui-spacing) * 6)}.ui\:max-w-7xl{max-width:var(--ui-container-7xl)}.ui\:max-w-40{max-width:calc(var(--ui-spacing) * 40)}.ui\:max-w-80{max-width:calc(var(--ui-spacing) * 80)}.ui\:max-w-\[16rem\]{max-width:16rem}.ui\:max-w-\[18ch\]{max-width:18ch}.ui\:max-w-\[20ch\]{max-width:20ch}.ui\:max-w-\[55vw\]{max-width:55vw}.ui\:max-w-\[60\%\]{max-width:60%}.ui\:max-w-\[200px\]{max-width:200px}.ui\:max-w-\[240px\]{max-width:240px}.ui\:max-w-\[260px\]{max-width:260px}.ui\:max-w-\[280px\]{max-width:280px}.ui\:max-w-\[300px\]{max-width:300px}.ui\:max-w-\[320px\]{max-width:320px}.ui\:max-w-\[480px\]{max-width:480px}.ui\:max-w-\[520px\]{max-width:520px}.ui\:max-w-\[600px\]{max-width:600px}.ui\:max-w-\[640px\]{max-width:640px}.ui\:max-w-\[700px\]{max-width:700px}.ui\:max-w-\[820px\]{max-width:820px}.ui\:max-w-\[880px\]{max-width:880px}.ui\:max-w-\[1080px\]{max-width:1080px}.ui\:max-w-\[1100px\]{max-width:1100px}.ui\:max-w-\[1120px\]{max-width:1120px}.ui\:max-w-\[1180px\]{max-width:1180px}.ui\:max-w-\[1200px\]{max-width:1200px}.ui\:max-w-\[1240px\]{max-width:1240px}.ui\:max-w-\[1280px\]{max-width:1280px}.ui\:max-w-\[1320px\]{max-width:1320px}.ui\:max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.ui\:max-w-full{max-width:100%}.ui\:max-w-max{max-width:max-content}.ui\:max-w-md{max-width:var(--ui-container-md)}.ui\:max-w-none{max-width:none}.ui\:max-w-sm{max-width:var(--ui-container-sm)}.ui\:max-w-xl{max-width:var(--ui-container-xl)}.ui\:max-w-xs{max-width:var(--ui-container-xs)}.ui\:min-w-\(--bits-select-anchor-width\){min-width:var(--bits-select-anchor-width)}.ui\:min-w-0{min-width:calc(var(--ui-spacing) * 0)}.ui\:min-w-5{min-width:calc(var(--ui-spacing) * 5)}.ui\:min-w-7{min-width:calc(var(--ui-spacing) * 7)}.ui\:min-w-8{min-width:calc(var(--ui-spacing) * 8)}.ui\:min-w-9{min-width:calc(var(--ui-spacing) * 9)}.ui\:min-w-10{min-width:calc(var(--ui-spacing) * 10)}.ui\:min-w-18{min-width:calc(var(--ui-spacing) * 18)}.ui\:min-w-32{min-width:calc(var(--ui-spacing) * 32)}.ui\:min-w-48{min-width:calc(var(--ui-spacing) * 48)}.ui\:min-w-\[3ch\]{min-width:3ch}.ui\:min-w-\[5rem\]{min-width:5rem}.ui\:min-w-\[9rem\]{min-width:9rem}.ui\:min-w-\[min\(24rem\,calc\(100vw-5rem\)\)\]{min-width:min(24rem,100vw - 5rem)}.ui\:min-w-full{min-width:100%}.ui\:flex-1{flex:1}.ui\:flex-shrink-0{flex-shrink:0}.ui\:shrink{flex-shrink:1}.ui\:shrink-0{flex-shrink:0}.ui\:basis-full{flex-basis:100%}.ui\:origin-\(--bits-dropdown-menu-content-transform-origin\){transform-origin:var(--bits-dropdown-menu-content-transform-origin)}.ui\:origin-\(--bits-menubar-content-transform-origin\){transform-origin:var(--bits-menubar-content-transform-origin)}.ui\:origin-\(--bits-popover-content-transform-origin\){transform-origin:var(--bits-popover-content-transform-origin)}.ui\:origin-\(--bits-select-content-transform-origin\){transform-origin:var(--bits-select-content-transform-origin)}.ui\:origin-\(--bits-tooltip-content-transform-origin\){transform-origin:var(--bits-tooltip-content-transform-origin)}.ui\:origin-center{transform-origin:50%}.ui\:-translate-x-0{--tw-translate-x:calc(var(--ui-spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:-translate-x-px{--tw-translate-x:-1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:translate-x-3{--tw-translate-x:calc(var(--ui-spacing) * 3);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:translate-x-4{--tw-translate-x:calc(var(--ui-spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:translate-x-px{--tw-translate-x:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:-translate-y-full{--tw-translate-y:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:translate-y-0\.5{--tw-translate-y:calc(var(--ui-spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:translate-y-3{--tw-translate-y:calc(var(--ui-spacing) * 3);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:translate-y-4{--tw-translate-y:calc(var(--ui-spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:\[translate\:0_0\]{translate:0}.ui\:scale-0{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x) var(--tw-scale-y)}.ui\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.ui\:-rotate-90{rotate:-90deg}.ui\:rotate-0{rotate:none}.ui\:rotate-5{rotate:5deg}.ui\:rotate-45{rotate:45deg}.ui\:rotate-90{rotate:90deg}.ui\:\[transform\:scaleX\(-1\)\]{transform:scaleX(-1)}.ui\:transform-gpu{transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.ui\:animate-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ui\:animate-magicslide{animation:magicslide var(--speed) ease-in-out infinite alternate}.ui\:animate-meteor{animation:5s linear infinite meteor}.ui\:animate-pulse{animation:var(--ui-animate-pulse)}.ui\:animate-shine{animation:2s linear infinite shine}.ui\:animate-spin{animation:var(--ui-animate-spin)}.ui\:animate-spin-around{animation:spin-around calc(var(--speed) * 2) infinite linear}.ui\:cursor-auto{cursor:auto}.ui\:cursor-col-resize{cursor:col-resize}.ui\:cursor-default{cursor:default}.ui\:cursor-default\!{cursor:default!important}.ui\:cursor-grab{cursor:grab}.ui\:cursor-not-allowed{cursor:not-allowed}.ui\:cursor-pointer{cursor:pointer}.ui\:cursor-text{cursor:text}.ui\:resize-none{resize:none}.ui\:scroll-my-1{scroll-margin-block:calc(var(--ui-spacing) * 1)}.ui\:scroll-py-1{scroll-padding-block:calc(var(--ui-spacing) * 1)}.ui\:list-disc{list-style-type:disc}.ui\:list-none{list-style-type:none}.ui\:auto-rows-min{grid-auto-rows:min-content}.ui\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.ui\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.ui\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.ui\:grid-cols-\[0_1fr\]{grid-template-columns:0 1fr}.ui\:grid-cols-\[1fr_auto_1fr\]{grid-template-columns:1fr auto 1fr}.ui\:grid-cols-\[6px_6px\]{grid-template-columns:6px 6px}.ui\:grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.ui\:flex-col{flex-direction:column}.ui\:flex-col-reverse{flex-direction:column-reverse}.ui\:flex-row{flex-direction:row}.ui\:flex-nowrap\!{flex-wrap:nowrap!important}.ui\:flex-wrap{flex-wrap:wrap}.ui\:place-content-between{place-content:space-between}.ui\:place-content-center{place-content:center}.ui\:place-items-center{place-items:center}.ui\:items-baseline{align-items:baseline}.ui\:items-center{align-items:center}.ui\:items-end{align-items:flex-end}.ui\:items-start{align-items:flex-start}.ui\:items-stretch{align-items:stretch}.ui\:justify-around{justify-content:space-around}.ui\:justify-between{justify-content:space-between}.ui\:justify-center{justify-content:center}.ui\:justify-end{justify-content:flex-end}.ui\:justify-start{justify-content:flex-start}.ui\:justify-start\!{justify-content:flex-start!important}.ui\:justify-items-center{justify-items:center}.ui\:justify-items-start{justify-items:start}.ui\:gap-0{gap:calc(var(--ui-spacing) * 0)}.ui\:gap-0\.5{gap:calc(var(--ui-spacing) * .5)}.ui\:gap-1{gap:calc(var(--ui-spacing) * 1)}.ui\:gap-1\.5{gap:calc(var(--ui-spacing) * 1.5)}.ui\:gap-2{gap:calc(var(--ui-spacing) * 2)}.ui\:gap-2\.5{gap:calc(var(--ui-spacing) * 2.5)}.ui\:gap-3{gap:calc(var(--ui-spacing) * 3)}.ui\:gap-4{gap:calc(var(--ui-spacing) * 4)}.ui\:gap-5{gap:calc(var(--ui-spacing) * 5)}.ui\:gap-6{gap:calc(var(--ui-spacing) * 6)}.ui\:gap-7{gap:calc(var(--ui-spacing) * 7)}.ui\:gap-8{gap:calc(var(--ui-spacing) * 8)}.ui\:gap-10{gap:calc(var(--ui-spacing) * 10)}.ui\:gap-12{gap:calc(var(--ui-spacing) * 12)}.ui\:gap-16{gap:calc(var(--ui-spacing) * 16)}.ui\:gap-20{gap:calc(var(--ui-spacing) * 20)}.ui\:gap-\[1px\]{gap:1px}.ui\:gap-\[14px\]{gap:14px}.ui\:gap-px{gap:1px}:where(.ui\:space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ui-spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ui-spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.ui\:space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ui-spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ui-spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.ui\:space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ui-spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ui-spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.ui\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ui-spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ui-spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.ui\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ui-spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ui-spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.ui\:space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ui-spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ui-spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.ui\:gap-x-3{column-gap:calc(var(--ui-spacing) * 3)}.ui\:gap-x-4{column-gap:calc(var(--ui-spacing) * 4)}.ui\:gap-x-5{column-gap:calc(var(--ui-spacing) * 5)}.ui\:gap-x-6{column-gap:calc(var(--ui-spacing) * 6)}.ui\:gap-x-8{column-gap:calc(var(--ui-spacing) * 8)}:where(.ui\:space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--ui-spacing) * 1) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--ui-spacing) * 1) * calc(1 - var(--tw-space-x-reverse)))}:where(.ui\:space-x-8>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--ui-spacing) * 8) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--ui-spacing) * 8) * calc(1 - var(--tw-space-x-reverse)))}.ui\:gap-y-0\.5{row-gap:calc(var(--ui-spacing) * .5)}.ui\:gap-y-1{row-gap:calc(var(--ui-spacing) * 1)}.ui\:gap-y-2{row-gap:calc(var(--ui-spacing) * 2)}.ui\:gap-y-10{row-gap:calc(var(--ui-spacing) * 10)}.ui\:gap-y-12{row-gap:calc(var(--ui-spacing) * 12)}.ui\:place-self-end{place-self:end}.ui\:self-center{align-self:center}.ui\:self-start{align-self:flex-start}.ui\:self-stretch{align-self:stretch}.ui\:justify-self-center{justify-self:center}.ui\:justify-self-end{justify-self:flex-end}.ui\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ui\:overflow-auto{overflow:auto}.ui\:overflow-hidden{overflow:hidden}.ui\:overflow-visible{overflow:visible}.ui\:overflow-x-auto{overflow-x:auto}.ui\:overflow-x-hidden{overflow-x:hidden}.ui\:overflow-y-auto{overflow-y:auto}.ui\:overflow-y-hidden{overflow-y:hidden}.ui\:scroll-smooth{scroll-behavior:smooth}.ui\:\[border-radius\:9999px\]{border-radius:9999px}.ui\:\[border-radius\:var\(--landing-radius-card\)\]{border-radius:var(--landing-radius-card)}.ui\:\[border-radius\:var\(--landing-radius-pill\)\]{border-radius:var(--landing-radius-pill)}.ui\:rounded{border-radius:.25rem}.ui\:rounded-\(--radius\){border-radius:var(--radius)}.ui\:rounded-2xl{border-radius:var(--ui-radius-2xl)}.ui\:rounded-3xl{border-radius:var(--ui-radius-3xl)}.ui\:rounded-\[2px\]{border-radius:2px}.ui\:rounded-\[3px\]{border-radius:3px}.ui\:rounded-\[4px\]{border-radius:4px}.ui\:rounded-\[10px\]{border-radius:10px}.ui\:rounded-\[14px\]{border-radius:14px}.ui\:rounded-\[20px\]{border-radius:20px}.ui\:rounded-\[calc\(var\(--radius\)-5px\)\]{border-radius:calc(var(--radius) - 5px)}.ui\:rounded-full{border-radius:3.40282e38px}.ui\:rounded-lg{border-radius:var(--radius)}.ui\:rounded-md{border-radius:calc(var(--radius) - 2px)}.ui\:rounded-md\!{border-radius:calc(var(--radius) - 2px)!important}.ui\:rounded-none{border-radius:0}.ui\:rounded-sm{border-radius:calc(var(--radius) - 4px)}.ui\:rounded-xl{border-radius:calc(var(--radius) + 4px)}.ui\:rounded-xs{border-radius:var(--ui-radius-xs)}.ui\:rounded-t-md{border-top-left-radius:calc(var(--radius) - 2px);border-top-right-radius:calc(var(--radius) - 2px)}.ui\:rounded-t-xl{border-top-left-radius:calc(var(--radius) + 4px);border-top-right-radius:calc(var(--radius) + 4px)}.ui\:border{border-style:var(--tw-border-style);border-width:1px}.ui\:border-0{border-style:var(--tw-border-style);border-width:0}.ui\:border-0\!{border-style:var(--tw-border-style)!important;border-width:0!important}.ui\:border-2{border-style:var(--tw-border-style);border-width:2px}.ui\:border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.ui\:border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.ui\:border-x-0{border-inline-style:var(--tw-border-style);border-inline-width:0}.ui\:border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.ui\:border-y-\[10px\]{border-block-style:var(--tw-border-style);border-block-width:10px}.ui\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.ui\:border-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.ui\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.ui\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ui\:border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.ui\:border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.ui\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.ui\:border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.ui\:border-l-\[16px\]{border-left-style:var(--tw-border-style);border-left-width:16px}.ui\:border-dashed{--tw-border-style:dashed;border-style:dashed}.ui\:border-none{--tw-border-style:none;border-style:none}.ui\:border-solid{--tw-border-style:solid;border-style:solid}.ui\:border-\(--color-border\){border-color:var(--color-border)}.ui\:border-\[\#1c1f28\]{border-color:#1c1f28}.ui\:border-\[\#262a35\]{border-color:#262a35}.ui\:border-\[\#d9d8d0\]{border-color:#d9d8d0}.ui\:border-\[var\(--landing-accent\)\]{border-color:var(--landing-accent)}.ui\:border-\[var\(--landing-accent-fg\)\],.ui\:border-\[var\(--landing-accent-fg\)\]\/15{border-color:var(--landing-accent-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:border-\[var\(--landing-accent-fg\)\]\/15{border-color:color-mix(in oklab, var(--landing-accent-fg) 15%, transparent)}}.ui\:border-\[var\(--landing-accent-fg\)\]\/20{border-color:var(--landing-accent-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:border-\[var\(--landing-accent-fg\)\]\/20{border-color:color-mix(in oklab, var(--landing-accent-fg) 20%, transparent)}}.ui\:border-\[var\(--landing-bg\)\]\/15{border-color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:border-\[var\(--landing-bg\)\]\/15{border-color:color-mix(in oklab, var(--landing-bg) 15%, transparent)}}.ui\:border-\[var\(--landing-bg\)\]\/40{border-color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:border-\[var\(--landing-bg\)\]\/40{border-color:color-mix(in oklab, var(--landing-bg) 40%, transparent)}}.ui\:border-\[var\(--landing-border\)\],.ui\:border-\[var\(--landing-border\)\]\/40{border-color:var(--landing-border)}@supports (color:color-mix(in lab, red, red)){.ui\:border-\[var\(--landing-border\)\]\/40{border-color:color-mix(in oklab, var(--landing-border) 40%, transparent)}}.ui\:border-\[var\(--landing-border\)\]\/50{border-color:var(--landing-border)}@supports (color:color-mix(in lab, red, red)){.ui\:border-\[var\(--landing-border\)\]\/50{border-color:color-mix(in oklab, var(--landing-border) 50%, transparent)}}.ui\:border-\[var\(--landing-border\)\]\/60{border-color:var(--landing-border)}@supports (color:color-mix(in lab, red, red)){.ui\:border-\[var\(--landing-border\)\]\/60{border-color:color-mix(in oklab, var(--landing-border) 60%, transparent)}}.ui\:border-\[var\(--landing-border-soft\)\]{border-color:var(--landing-border-soft)}.ui\:border-\[var\(--landing-button-secondary-border\)\]{border-color:var(--landing-button-secondary-border)}.ui\:border-\[var\(--landing-fg\)\]{border-color:var(--landing-fg)}.ui\:border-amber-200{border-color:var(--ui-color-amber-200)}.ui\:border-amber-400{border-color:var(--ui-color-amber-400)}.ui\:border-black{border-color:var(--ui-color-black)}.ui\:border-border,.ui\:border-border\/50{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.ui\:border-border\/50{border-color:color-mix(in oklab, var(--border) 50%, transparent)}}.ui\:border-emerald-300{border-color:var(--ui-color-emerald-300)}.ui\:border-emerald-400{border-color:var(--ui-color-emerald-400)}.ui\:border-emerald-500{border-color:var(--ui-color-emerald-500)}.ui\:border-input{border-color:var(--input)}.ui\:border-muted{border-color:var(--muted)}.ui\:border-muted-foreground,.ui\:border-muted-foreground\/40{border-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.ui\:border-muted-foreground\/40{border-color:color-mix(in oklab, var(--muted-foreground) 40%, transparent)}}.ui\:border-neutral-400{border-color:var(--ui-color-neutral-400)}.ui\:border-neutral-800{border-color:var(--ui-color-neutral-800)}.ui\:border-primary,.ui\:border-primary\/30{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:border-primary\/30{border-color:color-mix(in oklab, var(--primary) 30%, transparent)}}.ui\:border-primary\/40{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:border-primary\/40{border-color:color-mix(in oklab, var(--primary) 40%, transparent)}}.ui\:border-primary\/50{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:border-primary\/50{border-color:color-mix(in oklab, var(--primary) 50%, transparent)}}.ui\:border-red-500{border-color:var(--ui-color-red-500)}.ui\:border-sidebar-border{border-color:var(--sidebar-border)}.ui\:border-sky-200{border-color:var(--ui-color-sky-200)}.ui\:border-transparent{border-color:#0000}.ui\:border-white,.ui\:border-white\/10{border-color:var(--ui-color-white)}@supports (color:color-mix(in lab, red, red)){.ui\:border-white\/10{border-color:color-mix(in oklab, var(--ui-color-white) 10%, transparent)}}.ui\:border-zinc-300{border-color:var(--ui-color-zinc-300)}.ui\:border-zinc-400{border-color:var(--ui-color-zinc-400)}.ui\:border-y-transparent{border-block-color:#0000}.ui\:border-l-current{border-left-color:currentColor}.ui\:border-l-foreground{border-left-color:var(--foreground)}.ui\:border-l-transparent{border-left-color:#0000}.ui\:bg-\(--color-bg\){background-color:var(--color-bg)}.ui\:bg-\[\#0f1218\]{background-color:#0f1218}.ui\:bg-\[\#1a1a1a\]{background-color:#1a1a1a}.ui\:bg-\[\#06070a\]{background-color:#06070a}.ui\:bg-\[\#e2e1d9\]{background-color:#e2e1d9}.ui\:bg-\[\#ebeae3\]{background-color:#ebeae3}.ui\:bg-\[\#ecebe5\]{background-color:#ecebe5}.ui\:bg-\[\#f4f3ed\]{background-color:#f4f3ed}.ui\:bg-\[\#f4f5f7\]{background-color:#f4f5f7}.ui\:bg-\[\#fafaf5\]{background-color:#fafaf5}.ui\:bg-\[var\(--landing-accent\)\],.ui\:bg-\[var\(--landing-accent\)\]\/5{background-color:var(--landing-accent)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-accent\)\]\/5{background-color:color-mix(in oklab, var(--landing-accent) 5%, transparent)}}.ui\:bg-\[var\(--landing-accent\)\]\/10{background-color:var(--landing-accent)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-accent\)\]\/10{background-color:color-mix(in oklab, var(--landing-accent) 10%, transparent)}}.ui\:bg-\[var\(--landing-accent\)\]\/60{background-color:var(--landing-accent)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-accent\)\]\/60{background-color:color-mix(in oklab, var(--landing-accent) 60%, transparent)}}.ui\:bg-\[var\(--landing-accent\)\]\/70{background-color:var(--landing-accent)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-accent\)\]\/70{background-color:color-mix(in oklab, var(--landing-accent) 70%, transparent)}}.ui\:bg-\[var\(--landing-accent-fg\)\],.ui\:bg-\[var\(--landing-accent-fg\)\]\/10{background-color:var(--landing-accent-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-accent-fg\)\]\/10{background-color:color-mix(in oklab, var(--landing-accent-fg) 10%, transparent)}}.ui\:bg-\[var\(--landing-accent-fg\)\]\/15{background-color:var(--landing-accent-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-accent-fg\)\]\/15{background-color:color-mix(in oklab, var(--landing-accent-fg) 15%, transparent)}}.ui\:bg-\[var\(--landing-bg\)\],.ui\:bg-\[var\(--landing-bg\)\]\/5{background-color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-bg\)\]\/5{background-color:color-mix(in oklab, var(--landing-bg) 5%, transparent)}}.ui\:bg-\[var\(--landing-bg\)\]\/30{background-color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-bg\)\]\/30{background-color:color-mix(in oklab, var(--landing-bg) 30%, transparent)}}.ui\:bg-\[var\(--landing-bg\)\]\/75{background-color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-bg\)\]\/75{background-color:color-mix(in oklab, var(--landing-bg) 75%, transparent)}}.ui\:bg-\[var\(--landing-bg\)\]\/85{background-color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-bg\)\]\/85{background-color:color-mix(in oklab, var(--landing-bg) 85%, transparent)}}.ui\:bg-\[var\(--landing-bg\)\]\/90{background-color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-bg\)\]\/90{background-color:color-mix(in oklab, var(--landing-bg) 90%, transparent)}}.ui\:bg-\[var\(--landing-bg\)\]\/95{background-color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-bg\)\]\/95{background-color:color-mix(in oklab, var(--landing-bg) 95%, transparent)}}.ui\:bg-\[var\(--landing-bg-section\)\]{background-color:var(--landing-bg-section)}.ui\:bg-\[var\(--landing-border\)\]{background-color:var(--landing-border)}.ui\:bg-\[var\(--landing-button-primary-bg\)\]{background-color:var(--landing-button-primary-bg)}.ui\:bg-\[var\(--landing-button-secondary-bg\)\]{background-color:var(--landing-button-secondary-bg)}.ui\:bg-\[var\(--landing-card\)\],.ui\:bg-\[var\(--landing-card\)\]\/70{background-color:var(--landing-card)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-card\)\]\/70{background-color:color-mix(in oklab, var(--landing-card) 70%, transparent)}}.ui\:bg-\[var\(--landing-card-soft\)\],.ui\:bg-\[var\(--landing-card-soft\)\]\/30{background-color:var(--landing-card-soft)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-card-soft\)\]\/30{background-color:color-mix(in oklab, var(--landing-card-soft) 30%, transparent)}}.ui\:bg-\[var\(--landing-card-soft\)\]\/40{background-color:var(--landing-card-soft)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-card-soft\)\]\/40{background-color:color-mix(in oklab, var(--landing-card-soft) 40%, transparent)}}.ui\:bg-\[var\(--landing-card-soft\)\]\/50{background-color:var(--landing-card-soft)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-card-soft\)\]\/50{background-color:color-mix(in oklab, var(--landing-card-soft) 50%, transparent)}}.ui\:bg-\[var\(--landing-card-soft\)\]\/60{background-color:var(--landing-card-soft)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-card-soft\)\]\/60{background-color:color-mix(in oklab, var(--landing-card-soft) 60%, transparent)}}.ui\:bg-\[var\(--landing-fg\)\]{background-color:var(--landing-fg)}.ui\:bg-accent{background-color:var(--accent)}.ui\:bg-amber-50,.ui\:bg-amber-50\/30{background-color:var(--ui-color-amber-50)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-amber-50\/30{background-color:color-mix(in oklab, var(--ui-color-amber-50) 30%, transparent)}}.ui\:bg-amber-500{background-color:var(--ui-color-amber-500)}.ui\:bg-amber-500\!{background-color:var(--ui-color-amber-500)!important}.ui\:bg-amber-600{background-color:var(--ui-color-amber-600)}.ui\:bg-background,.ui\:bg-background\/50{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-background\/50{background-color:color-mix(in oklab, var(--background) 50%, transparent)}}.ui\:bg-background\/90{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-background\/90{background-color:color-mix(in oklab, var(--background) 90%, transparent)}}.ui\:bg-background\/95{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-background\/95{background-color:color-mix(in oklab, var(--background) 95%, transparent)}}.ui\:bg-black,.ui\:bg-black\/10{background-color:var(--ui-color-black)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-black\/10{background-color:color-mix(in oklab, var(--ui-color-black) 10%, transparent)}}.ui\:bg-black\/40{background-color:var(--ui-color-black)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-black\/40{background-color:color-mix(in oklab, var(--ui-color-black) 40%, transparent)}}.ui\:bg-black\/50{background-color:var(--ui-color-black)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-black\/50{background-color:color-mix(in oklab, var(--ui-color-black) 50%, transparent)}}.ui\:bg-blue-600{background-color:var(--ui-color-blue-600)}.ui\:bg-blue-600\!{background-color:var(--ui-color-blue-600)!important}.ui\:bg-border{background-color:var(--border)}.ui\:bg-card,.ui\:bg-card\/95{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-card\/95{background-color:color-mix(in oklab, var(--card) 95%, transparent)}}.ui\:bg-current{background-color:currentColor}.ui\:bg-destructive{background-color:var(--destructive)}.ui\:bg-emerald-50\/20{background-color:var(--ui-color-emerald-50)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-emerald-50\/20{background-color:color-mix(in oklab, var(--ui-color-emerald-50) 20%, transparent)}}.ui\:bg-emerald-50\/30{background-color:var(--ui-color-emerald-50)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-emerald-50\/30{background-color:color-mix(in oklab, var(--ui-color-emerald-50) 30%, transparent)}}.ui\:bg-emerald-50\/40{background-color:var(--ui-color-emerald-50)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-emerald-50\/40{background-color:color-mix(in oklab, var(--ui-color-emerald-50) 40%, transparent)}}.ui\:bg-emerald-500{background-color:var(--ui-color-emerald-500)}.ui\:bg-emerald-500\!{background-color:var(--ui-color-emerald-500)!important}.ui\:bg-emerald-600{background-color:var(--ui-color-emerald-600)}.ui\:bg-gray-200{background-color:var(--ui-color-gray-200)}.ui\:bg-green-500{background-color:var(--ui-color-green-500)}.ui\:bg-inherit{background-color:inherit}.ui\:bg-input{background-color:var(--input)}.ui\:bg-muted{background-color:var(--muted)}.ui\:bg-muted-foreground\/30{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-muted-foreground\/30{background-color:color-mix(in oklab, var(--muted-foreground) 30%, transparent)}}.ui\:bg-muted\/30{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-muted\/30{background-color:color-mix(in oklab, var(--muted) 30%, transparent)}}.ui\:bg-muted\/50{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-muted\/50{background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}.ui\:bg-muted\/95{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-muted\/95{background-color:color-mix(in oklab, var(--muted) 95%, transparent)}}.ui\:bg-neutral-100{background-color:var(--ui-color-neutral-100)}.ui\:bg-neutral-900\/50{background-color:var(--ui-color-neutral-900)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-neutral-900\/50{background-color:color-mix(in oklab, var(--ui-color-neutral-900) 50%, transparent)}}.ui\:bg-popover{background-color:var(--popover)}.ui\:bg-primary{background-color:var(--primary)}.ui\:bg-primary-foreground{background-color:var(--primary-foreground)}.ui\:bg-primary\/10{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-primary\/10{background-color:color-mix(in oklab, var(--primary) 10%, transparent)}}.ui\:bg-primary\/20{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-primary\/20{background-color:color-mix(in oklab, var(--primary) 20%, transparent)}}.ui\:bg-red-50\/40{background-color:var(--ui-color-red-50)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-red-50\/40{background-color:color-mix(in oklab, var(--ui-color-red-50) 40%, transparent)}}.ui\:bg-red-500{background-color:var(--ui-color-red-500)}.ui\:bg-rose-500{background-color:var(--ui-color-rose-500)}.ui\:bg-rose-500\!{background-color:var(--ui-color-rose-500)!important}.ui\:bg-secondary,.ui\:bg-secondary\/50{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-secondary\/50{background-color:color-mix(in oklab, var(--secondary) 50%, transparent)}}.ui\:bg-sidebar{background-color:var(--sidebar)}.ui\:bg-sidebar-border{background-color:var(--sidebar-border)}.ui\:bg-sky-50{background-color:var(--ui-color-sky-50)}.ui\:bg-slate-500{background-color:var(--ui-color-slate-500)}.ui\:bg-slate-500\!{background-color:var(--ui-color-slate-500)!important}.ui\:bg-transparent{background-color:#0000}.ui\:bg-violet-500{background-color:var(--ui-color-violet-500)}.ui\:bg-violet-500\!{background-color:var(--ui-color-violet-500)!important}.ui\:bg-white,.ui\:bg-white\/5{background-color:var(--ui-color-white)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-white\/5{background-color:color-mix(in oklab, var(--ui-color-white) 5%, transparent)}}.ui\:bg-yellow-500{background-color:var(--ui-color-yellow-500)}.ui\:bg-zinc-100{background-color:var(--ui-color-zinc-100)}.ui\:bg-zinc-400{background-color:var(--ui-color-zinc-400)}.ui\:bg-linear-to-r{--tw-gradient-position:to right}@supports (background-image:linear-gradient(in lab, red, red)){.ui\:bg-linear-to-r{--tw-gradient-position:to right in oklab}}.ui\:bg-linear-to-r{background-image:linear-gradient(var(--tw-gradient-stops))}.ui\:bg-linear-to-t{--tw-gradient-position:to top}@supports (background-image:linear-gradient(in lab, red, red)){.ui\:bg-linear-to-t{--tw-gradient-position:to top in oklab}}.ui\:bg-linear-to-t{background-image:linear-gradient(var(--tw-gradient-stops))}.ui\:bg-\[linear-gradient\(110deg\,\#000103\,45\%\,\#1e2631\,55\%\,\#000103\)\]{background-image:linear-gradient(110deg,#000103,45%,#1e2631,55%,#000103)}.ui\:from-background{--tw-gradient-from:var(--background);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ui\:from-pink-500{--tw-gradient-from:var(--ui-color-pink-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ui\:from-slate-500{--tw-gradient-from:var(--ui-color-slate-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ui\:from-transparent{--tw-gradient-from:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ui\:via-black\/80{--tw-gradient-via:var(--ui-color-black)}@supports (color:color-mix(in lab, red, red)){.ui\:via-black\/80{--tw-gradient-via:color-mix(in oklab, var(--ui-color-black) 80%, transparent)}}.ui\:via-black\/80{--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.ui\:via-blue-600\/30{--tw-gradient-via:var(--ui-color-blue-600)}@supports (color:color-mix(in lab, red, red)){.ui\:via-blue-600\/30{--tw-gradient-via:color-mix(in oklab, var(--ui-color-blue-600) 30%, transparent)}}.ui\:via-blue-600\/30{--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.ui\:via-50\%{--tw-gradient-via-position:50%}.ui\:to-orange-500{--tw-gradient-to:var(--ui-color-orange-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ui\:to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ui\:bg-\[length\:200\%_100\%\]{background-size:200% 100%}.ui\:bg-cover{background-size:cover}.ui\:bg-size-\[var\(--shimmer-width\)_100\%\]{background-size:var(--shimmer-width) 100%}.ui\:bg-clip-padding{background-clip:padding-box}.ui\:bg-clip-text{-webkit-background-clip:text;background-clip:text}.ui\:bg-center{background-position:50%}.ui\:bg-position-\[0_0\]{background-position:0 0}.ui\:bg-no-repeat{background-repeat:no-repeat}.ui\:fill-amber-400{fill:var(--ui-color-amber-400)}.ui\:fill-current{fill:currentColor}.ui\:fill-none{fill:none}.ui\:fill-primary{fill:var(--primary)}.ui\:object-contain{object-fit:contain}.ui\:object-cover{object-fit:cover}.ui\:p-0{padding:calc(var(--ui-spacing) * 0)}.ui\:p-0\!{padding:calc(var(--ui-spacing) * 0)!important}.ui\:p-0\.5{padding:calc(var(--ui-spacing) * .5)}.ui\:p-1{padding:calc(var(--ui-spacing) * 1)}.ui\:p-1\!{padding:calc(var(--ui-spacing) * 1)!important}.ui\:p-1\.5{padding:calc(var(--ui-spacing) * 1.5)}.ui\:p-2{padding:calc(var(--ui-spacing) * 2)}.ui\:p-3{padding:calc(var(--ui-spacing) * 3)}.ui\:p-3\!{padding:calc(var(--ui-spacing) * 3)!important}.ui\:p-4{padding:calc(var(--ui-spacing) * 4)}.ui\:p-5{padding:calc(var(--ui-spacing) * 5)}.ui\:p-6{padding:calc(var(--ui-spacing) * 6)}.ui\:p-7{padding:calc(var(--ui-spacing) * 7)}.ui\:p-8{padding:calc(var(--ui-spacing) * 8)}.ui\:p-10{padding:calc(var(--ui-spacing) * 10)}.ui\:p-\[3px\]{padding:3px}.ui\:px-1{padding-inline:calc(var(--ui-spacing) * 1)}.ui\:px-1\.5{padding-inline:calc(var(--ui-spacing) * 1.5)}.ui\:px-2{padding-inline:calc(var(--ui-spacing) * 2)}.ui\:px-2\.5{padding-inline:calc(var(--ui-spacing) * 2.5)}.ui\:px-3{padding-inline:calc(var(--ui-spacing) * 3)}.ui\:px-3\.5{padding-inline:calc(var(--ui-spacing) * 3.5)}.ui\:px-4{padding-inline:calc(var(--ui-spacing) * 4)}.ui\:px-5{padding-inline:calc(var(--ui-spacing) * 5)}.ui\:px-6{padding-inline:calc(var(--ui-spacing) * 6)}.ui\:px-7{padding-inline:calc(var(--ui-spacing) * 7)}.ui\:px-8{padding-inline:calc(var(--ui-spacing) * 8)}.ui\:py-0{padding-block:calc(var(--ui-spacing) * 0)}.ui\:py-0\.5{padding-block:calc(var(--ui-spacing) * .5)}.ui\:py-1{padding-block:calc(var(--ui-spacing) * 1)}.ui\:py-1\.5{padding-block:calc(var(--ui-spacing) * 1.5)}.ui\:py-2{padding-block:calc(var(--ui-spacing) * 2)}.ui\:py-2\.5{padding-block:calc(var(--ui-spacing) * 2.5)}.ui\:py-3{padding-block:calc(var(--ui-spacing) * 3)}.ui\:py-3\.5{padding-block:calc(var(--ui-spacing) * 3.5)}.ui\:py-4{padding-block:calc(var(--ui-spacing) * 4)}.ui\:py-5{padding-block:calc(var(--ui-spacing) * 5)}.ui\:py-6{padding-block:calc(var(--ui-spacing) * 6)}.ui\:py-8{padding-block:calc(var(--ui-spacing) * 8)}.ui\:py-10{padding-block:calc(var(--ui-spacing) * 10)}.ui\:py-12{padding-block:calc(var(--ui-spacing) * 12)}.ui\:py-14{padding-block:calc(var(--ui-spacing) * 14)}.ui\:py-16{padding-block:calc(var(--ui-spacing) * 16)}.ui\:py-20{padding-block:calc(var(--ui-spacing) * 20)}.ui\:py-24{padding-block:calc(var(--ui-spacing) * 24)}.ui\:py-32{padding-block:calc(var(--ui-spacing) * 32)}.ui\:ps-3{padding-inline-start:calc(var(--ui-spacing) * 3)}.ui\:pe-3{padding-inline-end:calc(var(--ui-spacing) * 3)}.ui\:pt-0{padding-top:calc(var(--ui-spacing) * 0)}.ui\:pt-1{padding-top:calc(var(--ui-spacing) * 1)}.ui\:pt-1\.5{padding-top:calc(var(--ui-spacing) * 1.5)}.ui\:pt-2{padding-top:calc(var(--ui-spacing) * 2)}.ui\:pt-2\.5{padding-top:calc(var(--ui-spacing) * 2.5)}.ui\:pt-3{padding-top:calc(var(--ui-spacing) * 3)}.ui\:pt-3\!{padding-top:calc(var(--ui-spacing) * 3)!important}.ui\:pt-3\.5{padding-top:calc(var(--ui-spacing) * 3.5)}.ui\:pt-4{padding-top:calc(var(--ui-spacing) * 4)}.ui\:pt-5{padding-top:calc(var(--ui-spacing) * 5)}.ui\:pt-6{padding-top:calc(var(--ui-spacing) * 6)}.ui\:pt-8{padding-top:calc(var(--ui-spacing) * 8)}.ui\:pt-10{padding-top:calc(var(--ui-spacing) * 10)}.ui\:pt-12{padding-top:calc(var(--ui-spacing) * 12)}.ui\:pt-16{padding-top:calc(var(--ui-spacing) * 16)}.ui\:pt-20{padding-top:calc(var(--ui-spacing) * 20)}.ui\:pr-1{padding-right:calc(var(--ui-spacing) * 1)}.ui\:pr-2{padding-right:calc(var(--ui-spacing) * 2)}.ui\:pr-4{padding-right:calc(var(--ui-spacing) * 4)}.ui\:pr-8{padding-right:calc(var(--ui-spacing) * 8)}.ui\:pr-9{padding-right:calc(var(--ui-spacing) * 9)}.ui\:pr-18{padding-right:calc(var(--ui-spacing) * 18)}.ui\:pb-0{padding-bottom:calc(var(--ui-spacing) * 0)}.ui\:pb-2{padding-bottom:calc(var(--ui-spacing) * 2)}.ui\:pb-3{padding-bottom:calc(var(--ui-spacing) * 3)}.ui\:pb-4{padding-bottom:calc(var(--ui-spacing) * 4)}.ui\:pb-5{padding-bottom:calc(var(--ui-spacing) * 5)}.ui\:pb-6{padding-bottom:calc(var(--ui-spacing) * 6)}.ui\:pb-8{padding-bottom:calc(var(--ui-spacing) * 8)}.ui\:pb-10{padding-bottom:calc(var(--ui-spacing) * 10)}.ui\:pb-12{padding-bottom:calc(var(--ui-spacing) * 12)}.ui\:pb-16{padding-bottom:calc(var(--ui-spacing) * 16)}.ui\:pb-20{padding-bottom:calc(var(--ui-spacing) * 20)}.ui\:pb-24{padding-bottom:calc(var(--ui-spacing) * 24)}.ui\:pb-\[max\(env\(safe-area-inset-bottom\)\,1rem\)\]{padding-bottom:max(env(safe-area-inset-bottom), 1rem)}.ui\:pl-2{padding-left:calc(var(--ui-spacing) * 2)}.ui\:pl-3{padding-left:calc(var(--ui-spacing) * 3)}.ui\:pl-4{padding-left:calc(var(--ui-spacing) * 4)}.ui\:pl-5{padding-left:calc(var(--ui-spacing) * 5)}.ui\:pl-8{padding-left:calc(var(--ui-spacing) * 8)}.ui\:text-center{text-align:center}.ui\:text-left{text-align:left}.ui\:text-right{text-align:right}.ui\:align-middle{vertical-align:middle}.ui\:font-mono{font-family:var(--ui-font-mono)}.ui\:font-sans{font-family:var(--ui-font-sans)}.ui\:font-serif{font-family:var(--ui-font-serif)}.ui\:text-2xl{font-size:var(--ui-text-2xl);line-height:var(--tw-leading,var(--ui-text-2xl--line-height))}.ui\:text-3xl{font-size:var(--ui-text-3xl);line-height:var(--tw-leading,var(--ui-text-3xl--line-height))}.ui\:text-4xl{font-size:var(--ui-text-4xl);line-height:var(--tw-leading,var(--ui-text-4xl--line-height))}.ui\:text-5xl{font-size:var(--ui-text-5xl);line-height:var(--tw-leading,var(--ui-text-5xl--line-height))}.ui\:text-6xl{font-size:var(--ui-text-6xl);line-height:var(--tw-leading,var(--ui-text-6xl--line-height))}.ui\:text-base{font-size:var(--ui-text-base);line-height:var(--tw-leading,var(--ui-text-base--line-height))}.ui\:text-base\!{font-size:var(--ui-text-base)!important;line-height:var(--tw-leading,var(--ui-text-base--line-height))!important}.ui\:text-lg{font-size:var(--ui-text-lg);line-height:var(--tw-leading,var(--ui-text-lg--line-height))}.ui\:text-sm{font-size:var(--ui-text-sm);line-height:var(--tw-leading,var(--ui-text-sm--line-height))}.ui\:text-sm\/relaxed{font-size:var(--ui-text-sm);line-height:var(--ui-leading-relaxed)}.ui\:text-xl{font-size:var(--ui-text-xl);line-height:var(--tw-leading,var(--ui-text-xl--line-height))}.ui\:text-xs{font-size:var(--ui-text-xs);line-height:var(--tw-leading,var(--ui-text-xs--line-height))}.ui\:text-\[0\.7rem\]{font-size:.7rem}.ui\:text-\[10px\]{font-size:10px}.ui\:text-\[11\.5px\]{font-size:11.5px}.ui\:text-\[11px\]{font-size:11px}.ui\:text-\[12\.5px\]{font-size:12.5px}.ui\:text-\[12px\]{font-size:12px}.ui\:text-\[13\.5px\]{font-size:13.5px}.ui\:text-\[13px\]{font-size:13px}.ui\:text-\[14\.5px\]{font-size:14.5px}.ui\:text-\[14px\]{font-size:14px}.ui\:text-\[15px\]{font-size:15px}.ui\:text-\[16px\]{font-size:16px}.ui\:text-\[17px\]{font-size:17px}.ui\:text-\[19px\]{font-size:19px}.ui\:text-\[22px\]{font-size:22px}.ui\:text-\[36px\]{font-size:36px}.ui\:text-\[40px\]{font-size:40px}.ui\:text-\[44px\]{font-size:44px}.ui\:text-\[64px\]{font-size:64px}.ui\:leading-7{--tw-leading:calc(var(--ui-spacing) * 7);line-height:calc(var(--ui-spacing) * 7)}.ui\:leading-8{--tw-leading:calc(var(--ui-spacing) * 8);line-height:calc(var(--ui-spacing) * 8)}.ui\:leading-\[0\.95\]{--tw-leading:.95;line-height:.95}.ui\:leading-\[1\.1\]{--tw-leading:1.1;line-height:1.1}.ui\:leading-\[1\.02\]{--tw-leading:1.02;line-height:1.02}.ui\:leading-\[1\.05\]{--tw-leading:1.05;line-height:1.05}.ui\:leading-\[1\.5\]{--tw-leading:1.5;line-height:1.5}.ui\:leading-\[1\.08\]{--tw-leading:1.08;line-height:1.08}.ui\:leading-\[1\.25\]{--tw-leading:1.25;line-height:1.25}.ui\:leading-\[1\.35\]{--tw-leading:1.35;line-height:1.35}.ui\:leading-none{--tw-leading:1;line-height:1}.ui\:leading-normal{--tw-leading:var(--ui-leading-normal);line-height:var(--ui-leading-normal)}.ui\:leading-relaxed{--tw-leading:var(--ui-leading-relaxed);line-height:var(--ui-leading-relaxed)}.ui\:leading-snug{--tw-leading:var(--ui-leading-snug);line-height:var(--ui-leading-snug)}.ui\:leading-tight{--tw-leading:var(--ui-leading-tight);line-height:var(--ui-leading-tight)}.ui\:font-black{--tw-font-weight:var(--ui-font-weight-black);font-weight:var(--ui-font-weight-black)}.ui\:font-bold{--tw-font-weight:var(--ui-font-weight-bold);font-weight:var(--ui-font-weight-bold)}.ui\:font-extrabold{--tw-font-weight:var(--ui-font-weight-extrabold);font-weight:var(--ui-font-weight-extrabold)}.ui\:font-light{--tw-font-weight:var(--ui-font-weight-light);font-weight:var(--ui-font-weight-light)}.ui\:font-medium{--tw-font-weight:var(--ui-font-weight-medium);font-weight:var(--ui-font-weight-medium)}.ui\:font-normal{--tw-font-weight:var(--ui-font-weight-normal);font-weight:var(--ui-font-weight-normal)}.ui\:font-semibold{--tw-font-weight:var(--ui-font-weight-semibold);font-weight:var(--ui-font-weight-semibold)}.ui\:\[font-weight\:var\(--landing-heading-weight\)\]{font-weight:var(--landing-heading-weight)}.ui\:tracking-\[-0\.02em\]{--tw-tracking:-.02em;letter-spacing:-.02em}.ui\:tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.ui\:tracking-\[0\.04em\]{--tw-tracking:.04em;letter-spacing:.04em}.ui\:tracking-\[0\.08em\]{--tw-tracking:.08em;letter-spacing:.08em}.ui\:tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.ui\:tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.ui\:tracking-tight{--tw-tracking:var(--ui-tracking-tight);letter-spacing:var(--ui-tracking-tight)}.ui\:tracking-tighter{--tw-tracking:var(--ui-tracking-tighter);letter-spacing:var(--ui-tracking-tighter)}.ui\:tracking-wide{--tw-tracking:var(--ui-tracking-wide);letter-spacing:var(--ui-tracking-wide)}.ui\:tracking-wider{--tw-tracking:var(--ui-tracking-wider);letter-spacing:var(--ui-tracking-wider)}.ui\:tracking-widest{--tw-tracking:var(--ui-tracking-widest);letter-spacing:var(--ui-tracking-widest)}.ui\:\[letter-spacing\:var\(--landing-eyebrow-tracking\)\]{letter-spacing:var(--landing-eyebrow-tracking)}.ui\:\[letter-spacing\:var\(--landing-heading-tracking\)\]{letter-spacing:var(--landing-heading-tracking)}.ui\:text-balance{text-wrap:balance}.ui\:text-wrap{text-wrap:wrap}.ui\:break-words{overflow-wrap:break-word}.ui\:break-all{word-break:break-all}.ui\:text-ellipsis{text-overflow:ellipsis}.ui\:whitespace-nowrap{white-space:nowrap}.ui\:text-\[\#0a0b0e\]{color:#0a0b0e}.ui\:text-\[\#1a1a1a\]{color:#1a1a1a}.ui\:text-\[\#2c2b29\]{color:#2c2b29}.ui\:text-\[\#9da1ab\]{color:#9da1ab}.ui\:text-\[\#61656f\]{color:#61656f}.ui\:text-\[\#76746c\]{color:#76746c}.ui\:text-\[\#c25237\]{color:#c25237}.ui\:text-\[\#e9eaed\]{color:#e9eaed}.ui\:text-\[\#fafaf5\]{color:#fafaf5}.ui\:text-\[var\(--landing-accent\)\]{color:var(--landing-accent)}.ui\:text-\[var\(--landing-accent-fg\)\],.ui\:text-\[var\(--landing-accent-fg\)\]\/70{color:var(--landing-accent-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-accent-fg\)\]\/70{color:color-mix(in oklab, var(--landing-accent-fg) 70%, transparent)}}.ui\:text-\[var\(--landing-accent-fg\)\]\/80{color:var(--landing-accent-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-accent-fg\)\]\/80{color:color-mix(in oklab, var(--landing-accent-fg) 80%, transparent)}}.ui\:text-\[var\(--landing-accent-fg\)\]\/85{color:var(--landing-accent-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-accent-fg\)\]\/85{color:color-mix(in oklab, var(--landing-accent-fg) 85%, transparent)}}.ui\:text-\[var\(--landing-bg\)\],.ui\:text-\[var\(--landing-bg\)\]\/50{color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-bg\)\]\/50{color:color-mix(in oklab, var(--landing-bg) 50%, transparent)}}.ui\:text-\[var\(--landing-bg\)\]\/55{color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-bg\)\]\/55{color:color-mix(in oklab, var(--landing-bg) 55%, transparent)}}.ui\:text-\[var\(--landing-bg\)\]\/60{color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-bg\)\]\/60{color:color-mix(in oklab, var(--landing-bg) 60%, transparent)}}.ui\:text-\[var\(--landing-bg\)\]\/65{color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-bg\)\]\/65{color:color-mix(in oklab, var(--landing-bg) 65%, transparent)}}.ui\:text-\[var\(--landing-bg\)\]\/70{color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-bg\)\]\/70{color:color-mix(in oklab, var(--landing-bg) 70%, transparent)}}.ui\:text-\[var\(--landing-bg\)\]\/75{color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-bg\)\]\/75{color:color-mix(in oklab, var(--landing-bg) 75%, transparent)}}.ui\:text-\[var\(--landing-bg\)\]\/80{color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-bg\)\]\/80{color:color-mix(in oklab, var(--landing-bg) 80%, transparent)}}.ui\:text-\[var\(--landing-bg\)\]\/90{color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-bg\)\]\/90{color:color-mix(in oklab, var(--landing-bg) 90%, transparent)}}.ui\:text-\[var\(--landing-button-primary-fg\)\]{color:var(--landing-button-primary-fg)}.ui\:text-\[var\(--landing-button-secondary-fg\)\]{color:var(--landing-button-secondary-fg)}.ui\:text-\[var\(--landing-button-tertiary-fg\)\]{color:var(--landing-button-tertiary-fg)}.ui\:text-\[var\(--landing-fg\)\],.ui\:text-\[var\(--landing-fg\)\]\/70{color:var(--landing-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-fg\)\]\/70{color:color-mix(in oklab, var(--landing-fg) 70%, transparent)}}.ui\:text-\[var\(--landing-fg\)\]\/72{color:var(--landing-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-fg\)\]\/72{color:color-mix(in oklab, var(--landing-fg) 72%, transparent)}}.ui\:text-\[var\(--landing-fg\)\]\/80{color:var(--landing-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-fg\)\]\/80{color:color-mix(in oklab, var(--landing-fg) 80%, transparent)}}.ui\:text-\[var\(--landing-fg-faint\)\]{color:var(--landing-fg-faint)}.ui\:text-\[var\(--landing-fg-muted\)\]{color:var(--landing-fg-muted)}.ui\:text-accent-foreground{color:var(--accent-foreground)}.ui\:text-amber-200{color:var(--ui-color-amber-200)}.ui\:text-amber-500{color:var(--ui-color-amber-500)}.ui\:text-amber-600{color:var(--ui-color-amber-600)}.ui\:text-amber-900{color:var(--ui-color-amber-900)}.ui\:text-black{color:var(--ui-color-black)}.ui\:text-card-foreground{color:var(--card-foreground)}.ui\:text-current{color:currentColor}.ui\:text-destructive{color:var(--destructive)}.ui\:text-emerald-600{color:var(--ui-color-emerald-600)}.ui\:text-emerald-700{color:var(--ui-color-emerald-700)}.ui\:text-foreground,.ui\:text-foreground\/70{color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.ui\:text-foreground\/70{color:color-mix(in oklab, var(--foreground) 70%, transparent)}}.ui\:text-gray-200{color:var(--ui-color-gray-200)}.ui\:text-green-500{color:var(--ui-color-green-500)}.ui\:text-green-600{color:var(--ui-color-green-600)}.ui\:text-muted-foreground,.ui\:text-muted-foreground\/60{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.ui\:text-muted-foreground\/60{color:color-mix(in oklab, var(--muted-foreground) 60%, transparent)}}.ui\:text-muted-foreground\/75{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.ui\:text-muted-foreground\/75{color:color-mix(in oklab, var(--muted-foreground) 75%, transparent)}}.ui\:text-neutral-600\/50{color:var(--ui-color-neutral-600)}@supports (color:color-mix(in lab, red, red)){.ui\:text-neutral-600\/50{color:color-mix(in oklab, var(--ui-color-neutral-600) 50%, transparent)}}.ui\:text-popover-foreground{color:var(--popover-foreground)}.ui\:text-primary{color:var(--primary)}.ui\:text-primary\!{color:var(--primary)!important}.ui\:text-primary-foreground{color:var(--primary-foreground)}.ui\:text-red-500{color:var(--ui-color-red-500)}.ui\:text-red-600{color:var(--ui-color-red-600)}.ui\:text-red-700{color:var(--ui-color-red-700)}.ui\:text-secondary-foreground{color:var(--secondary-foreground)}.ui\:text-sidebar-foreground,.ui\:text-sidebar-foreground\/70{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab, red, red)){.ui\:text-sidebar-foreground\/70{color:color-mix(in oklab, var(--sidebar-foreground) 70%, transparent)}}.ui\:text-sidebar-foreground\/75{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab, red, red)){.ui\:text-sidebar-foreground\/75{color:color-mix(in oklab, var(--sidebar-foreground) 75%, transparent)}}.ui\:text-sidebar-foreground\/80{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab, red, red)){.ui\:text-sidebar-foreground\/80{color:color-mix(in oklab, var(--sidebar-foreground) 80%, transparent)}}.ui\:text-sky-900{color:var(--ui-color-sky-900)}.ui\:text-transparent{color:#0000}.ui\:text-white{color:var(--ui-color-white)}.ui\:text-white\!{color:var(--ui-color-white)!important}.ui\:\[text-transform\:var\(--landing-eyebrow-case\)\]{text-transform:var(--landing-eyebrow-case)}.ui\:\[text-transform\:var\(--landing-heading-case\)\]{text-transform:var(--landing-heading-case)}.ui\:capitalize{text-transform:capitalize}.ui\:uppercase{text-transform:uppercase}.ui\:italic{font-style:italic}.ui\: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,)}.ui\:line-through{text-decoration-line:line-through}.ui\:no-underline{text-decoration-line:none}.ui\:underline{text-decoration-line:underline}.ui\:underline-offset-2{text-underline-offset:2px}.ui\:underline-offset-4{text-underline-offset:4px}.ui\:opacity-0{opacity:0}.ui\:opacity-10{opacity:.1}.ui\:opacity-30{opacity:.3}.ui\:opacity-40{opacity:.4}.ui\:opacity-50{opacity:.5}.ui\:opacity-60{opacity:.6}.ui\:opacity-70{opacity:.7}.ui\:opacity-85{opacity:.85}.ui\:opacity-90{opacity:.9}.ui\:opacity-95{opacity:.95}.ui\:opacity-100{opacity:1}.ui\:opacity-\[0\.06\]{opacity:.06}.ui\:opacity-\[0\.08\]{opacity:.08}.ui\:opacity-\[0\.10\]{opacity:.1}.ui\:opacity-\[0\.15\]{opacity:.15}.ui\:shadow-\[var\(--landing-accent\)\]\/20{--tw-shadow-alpha:20%;--tw-shadow:var(--landing-accent);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:shadow-\[var\(--landing-accent\)\]\/25{--tw-shadow-alpha:25%;--tw-shadow:var(--landing-accent);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\: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)}.ui\:shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:shadow-2xs{--tw-shadow:0 1px var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:shadow-\[0_0_0_1px_\#ffffff10\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#ffffff10);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:shadow-\[0_0_0_1px_var\(--sidebar-border\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,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)}.ui\:shadow-\[0_4px_16px_rgba\(0\,0\,0\,0\.10\)\]{--tw-shadow:0 4px 16px 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)}.ui\:shadow-\[0_4px_24px_-8px_rgba\(14\,14\,16\,0\.08\)\]{--tw-shadow:0 4px 24px -8px var(--tw-shadow-color,#0e0e1014);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:shadow-\[0_18px_40px_rgba\(0\,0\,0\,0\.18\)\,0_6px_12px_rgba\(0\,0\,0\,0\.12\)\]{--tw-shadow:0 18px 40px var(--tw-shadow-color,#0000002e), 0 6px 12px var(--tw-shadow-color,#0000001f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:shadow-\[0_20px_60px_-30px_rgba\(14\,14\,16\,0\.25\)\]{--tw-shadow:0 20px 60px -30px var(--tw-shadow-color,#0e0e1040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:shadow-\[0_40px_90px_-30px_rgba\(0\,0\,0\,0\.35\)\]{--tw-shadow:0 40px 90px -30px var(--tw-shadow-color,#00000059);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:shadow-\[inset_0_-8px_10px_\#ffffff1f\]{--tw-shadow:inset 0 -8px 10px var(--tw-shadow-color,#ffffff1f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\: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)}.ui\: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)}.ui\: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)}.ui\: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)}.ui\:shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\: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)}.ui\: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)}.ui\:ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:ring-3{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\: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)}.ui\:\[box-shadow\:var\(--landing-glow\)\]{box-shadow:var(--landing-glow)}.ui\:\[box-shadow\:var\(--landing-shadow-card\)\]{box-shadow:var(--landing-shadow-card)}.ui\:ring-\[var\(--landing-accent\)\]{--tw-ring-color:var(--landing-accent)}.ui\:ring-accent{--tw-ring-color:var(--accent)}.ui\:ring-background{--tw-ring-color:var(--background)}.ui\:ring-border,.ui\:ring-border\/50{--tw-ring-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.ui\:ring-border\/50{--tw-ring-color:color-mix(in oklab, var(--border) 50%, transparent)}}.ui\:ring-primary{--tw-ring-color:var(--primary)}.ui\:ring-sidebar-ring{--tw-ring-color:var(--sidebar-ring)}.ui\:ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.ui\:ring-offset-background{--tw-ring-offset-color:var(--background)}.ui\:outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.ui\:outline-hidden{outline-offset:2px;outline:2px solid #0000}}.ui\:blur-3xl{--tw-blur:blur(var(--ui-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,)}.ui\:blur-\[2px\]{--tw-blur:blur(2px);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,)}.ui\:brightness-200{--tw-brightness:brightness(200%);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,)}.ui\:drop-shadow-sm{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--ui-drop-shadow-sm));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.ui\:drop-shadow-none{--tw-drop-shadow: ;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,)}.ui\:grayscale{--tw-grayscale:grayscale(100%);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,)}.ui\: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,)}.ui\:backdrop-blur-2xl{--tw-backdrop-blur:blur(var(--ui-blur-2xl));-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,)}.ui\:backdrop-blur-md{--tw-backdrop-blur:blur(var(--ui-blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.ui\:backdrop-blur-sm{--tw-backdrop-blur:blur(var(--ui-blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.ui\:backdrop-blur-xl{--tw-backdrop-blur:blur(var(--ui-blur-xl));-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,)}.ui\: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(--ui-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ui-default-transition-duration))}.ui\:transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--ui-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ui-default-transition-duration))}.ui\:transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--ui-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ui-default-transition-duration))}.ui\:transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:var(--tw-ease,var(--ui-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ui-default-transition-duration))}.ui\:transition-\[stroke-dashoffset\]{transition-property:stroke-dashoffset;transition-timing-function:var(--tw-ease,var(--ui-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ui-default-transition-duration))}.ui\:transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--ui-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ui-default-transition-duration))}.ui\:transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--ui-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ui-default-transition-duration))}.ui\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--ui-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ui-default-transition-duration))}.ui\: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(--ui-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ui-default-transition-duration))}.ui\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--ui-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ui-default-transition-duration))}.ui\:transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--ui-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ui-default-transition-duration))}.ui\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--ui-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ui-default-transition-duration))}.ui\:transition-none{transition-property:none}.ui\:duration-100{--tw-duration:.1s;transition-duration:.1s}.ui\:duration-200{--tw-duration:.2s;transition-duration:.2s}.ui\:duration-300{--tw-duration:.3s;transition-duration:.3s}.ui\:duration-500{--tw-duration:.5s;transition-duration:.5s}.ui\:duration-700{--tw-duration:.7s;transition-duration:.7s}.ui\:ease-in-out{--tw-ease:var(--ui-ease-in-out);transition-timing-function:var(--ui-ease-in-out)}.ui\:ease-linear{--tw-ease:linear;transition-timing-function:linear}.ui\:ease-out{--tw-ease:var(--ui-ease-out);transition-timing-function:var(--ui-ease-out)}.ui\:fade-in-0{--tw-enter-opacity:0}.ui\:outline-none{--tw-outline-style:none;outline-style:none}.ui\:select-none{-webkit-user-select:none;user-select:none}.ui\:zoom-in-95{--tw-enter-scale:.95}.ui\:\[--dot-field-glow\:\#fff\]{--dot-field-glow:#fff}.ui\:\[background\:conic-gradient\(from_calc\(270deg-\(var\(--spread\)\*0\.5\)\)\,transparent_0\,var\(--shimmer-color\)_var\(--spread\)\,transparent_var\(--spread\)\)\]{background:conic-gradient(from calc(270deg - (var(--spread) * .5)),transparent 0,var(--shimmer-color) var(--spread),transparent var(--spread))}.ui\:\[background\:linear-gradient\(180deg\,var\(--landing-card\)_0\%\,var\(--landing-bg-section\)_100\%\)\]{background:linear-gradient(180deg,var(--landing-card) 0%,var(--landing-bg-section) 100%)}.ui\:\[background\:var\(--bg\)\]{background:var(--bg)}.ui\:\[border-top\:1px_dashed_var\(--landing-border-soft\)\]{border-top:1px dashed var(--landing-border-soft)}.ui\:\[mask\:none\]{-webkit-mask:none;mask:none}.ui\:ring-inset{--tw-ring-inset:inset}:is(.ui\:\*\:w-full>*){width:100%}.ui\:group-focus-within\/menu-item\:opacity-100:is(:where(.ui\:group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.ui\:group-hover\:translate-x-0\.5:is(:where(.ui\:group):hover *){--tw-translate-x:calc(var(--ui-spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:group-hover\:scale-\[1\.02\]:is(:where(.ui\:group):hover *){scale:1.02}.ui\:group-hover\:bg-\[var\(--landing-accent\)\]:is(:where(.ui\:group):hover *){background-color:var(--landing-accent)}.ui\:group-hover\:bg-muted-foreground\/15:is(:where(.ui\:group):hover *){background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.ui\:group-hover\:bg-muted-foreground\/15:is(:where(.ui\:group):hover *){background-color:color-mix(in oklab, var(--muted-foreground) 15%, transparent)}}.ui\:group-hover\:bg-secondary\/80:is(:where(.ui\:group):hover *){background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.ui\:group-hover\:bg-secondary\/80:is(:where(.ui\:group):hover *){background-color:color-mix(in oklab, var(--secondary) 80%, transparent)}}.ui\:group-hover\:text-\[var\(--landing-accent\)\]:is(:where(.ui\:group):hover *){color:var(--landing-accent)}.ui\:group-hover\:text-\[var\(--landing-accent-fg\)\]:is(:where(.ui\:group):hover *){color:var(--landing-accent-fg)}.ui\:group-hover\:text-foreground:is(:where(.ui\:group):hover *){color:var(--foreground)}.ui\:group-hover\:text-primary:is(:where(.ui\:group):hover *){color:var(--primary)}.ui\:group-hover\:opacity-100:is(:where(.ui\:group):hover *){opacity:1}.ui\:group-hover\:shadow-\[inset_0_-6px_10px_\#ffffff3f\]:is(:where(.ui\:group):hover *){--tw-shadow:inset 0 -6px 10px var(--tw-shadow-color,#ffffff3f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:group-hover\/menu-item\:opacity-100:is(:where(.ui\:group\/menu-item):hover *){opacity:1}}.ui\:group-focus-visible\:opacity-100:is(:where(.ui\:group):focus-visible *){opacity:1}.ui\:group-active\:shadow-\[inset_0_-10px_10px_\#ffffff3f\]:is(:where(.ui\:group):active *){--tw-shadow:inset 0 -10px 10px var(--tw-shadow-color,#ffffff3f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:group-has-data-\[orientation\=horizontal\]\/field\:text-balance:is(:where(.ui\:group\/field):has([data-orientation=horizontal]) *){text-wrap:balance}.ui\:group-has-data-\[sidebar\=menu-action\]\/menu-item\:pr-8:is(:where(.ui\:group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--ui-spacing) * 8)}.ui\:group-has-\[\[data-slot\=item-description\]\]\/item\:translate-y-0\.5:is(:where(.ui\:group\/item):has([data-slot=item-description]) *){--tw-translate-y:calc(var(--ui-spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:group-has-\[\[data-slot\=item-description\]\]\/item\:self-start:is(:where(.ui\:group\/item):has([data-slot=item-description]) *){align-self:flex-start}.ui\:group-has-\[\>input\]\/input-group\:pt-2\.5:is(:where(.ui\:group\/input-group):has(>input) *){padding-top:calc(var(--ui-spacing) * 2.5)}.ui\:group-has-\[\>input\]\/input-group\:pb-2\.5:is(:where(.ui\:group\/input-group):has(>input) *){padding-bottom:calc(var(--ui-spacing) * 2.5)}.ui\:group-aria-disabled\/file-drop-zone-trigger\:opacity-50:is(:where(.ui\:group\/file-drop-zone-trigger)[aria-disabled=true] *){opacity:.5}.ui\:group-data-\[collapsible\=icon\]\:pointer-events-none:is(:where(.ui\:group)[data-collapsible=icon] *){pointer-events:none}.ui\:group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.ui\:group)[data-collapsible=icon] *){margin-top:calc(var(--ui-spacing) * -8)}.ui\:group-data-\[collapsible\=icon\]\:hidden:is(:where(.ui\:group)[data-collapsible=icon] *){display:none}.ui\:group-data-\[collapsible\=icon\]\:size-8\!:is(:where(.ui\:group)[data-collapsible=icon] *){width:calc(var(--ui-spacing) * 8)!important;height:calc(var(--ui-spacing) * 8)!important}.ui\:group-data-\[collapsible\=icon\]\:w-\(--sidebar-width-icon\):is(:where(.ui\:group)[data-collapsible=icon] *){width:var(--sidebar-width-icon)}.ui\:group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]:is(:where(.ui\:group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--ui-spacing) * 4)) + 2px)}.ui\:group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.ui\:group)[data-collapsible=icon] *){overflow:hidden}.ui\:group-data-\[collapsible\=icon\]\:p-0\!:is(:where(.ui\:group)[data-collapsible=icon] *){padding:calc(var(--ui-spacing) * 0)!important}.ui\:group-data-\[collapsible\=icon\]\:p-2\!:is(:where(.ui\:group)[data-collapsible=icon] *){padding:calc(var(--ui-spacing) * 2)!important}.ui\:group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.ui\:group)[data-collapsible=icon] *){opacity:0}.ui\:group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.ui\:group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width) * -1)}.ui\:group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.ui\:group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width) * -1)}.ui\:group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.ui\:group)[data-collapsible=offcanvas] *){width:calc(var(--ui-spacing) * 0)}.ui\:group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.ui\:group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--ui-spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.ui\:group)[data-disabled=true] *){pointer-events:none}.ui\:group-data-\[disabled\=true\]\:opacity-50:is(:where(.ui\:group)[data-disabled=true] *),.ui\:group-data-\[disabled\=true\]\/field\:opacity-50:is(:where(.ui\:group\/field)[data-disabled=true] *),.ui\:group-data-\[disabled\=true\]\/input-group\:opacity-50:is(:where(.ui\:group\/input-group)[data-disabled=true] *){opacity:.5}.ui\:group-data-\[side\=left\]\:-right-4:is(:where(.ui\:group)[data-side=left] *){right:calc(var(--ui-spacing) * -4)}.ui\:group-data-\[side\=left\]\:border-r:is(:where(.ui\:group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.ui\:group-data-\[side\=right\]\:left-0:is(:where(.ui\:group)[data-side=right] *){left:calc(var(--ui-spacing) * 0)}.ui\:group-data-\[side\=right\]\:rotate-180:is(:where(.ui\:group)[data-side=right] *){rotate:180deg}.ui\:group-data-\[side\=right\]\:border-l:is(:where(.ui\:group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.ui\:group-data-\[state\=open\]\:rotate-180:is(:where(.ui\:group)[data-state=open] *){rotate:180deg}.ui\:group-data-\[variant\=floating\]\:rounded-lg:is(:where(.ui\:group)[data-variant=floating] *){border-radius:var(--radius)}.ui\:group-data-\[variant\=floating\]\:border:is(:where(.ui\:group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.ui\:group-data-\[variant\=floating\]\:border-sidebar-border:is(:where(.ui\:group)[data-variant=floating] *){border-color:var(--sidebar-border)}.ui\:group-data-\[variant\=floating\]\:shadow-sm:is(:where(.ui\:group)[data-variant=floating] *){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:group-data-\[variant\=outline\]\/field-group\:-mb-2:is(:where(.ui\:group\/field-group)[data-variant=outline] *){margin-bottom:calc(var(--ui-spacing) * -2)}.ui\:group-data-\[vaul-drawer-direction\=bottom\]\/drawer-content\:block:is(:where(.ui\:group\/drawer-content)[data-vaul-drawer-direction=bottom] *){display:block}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:top-full:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *){top:100%}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:mt-1\.5:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *){margin-top:calc(var(--ui-spacing) * 1.5)}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:overflow-hidden:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *){overflow:hidden}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:rounded-md:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *){border-radius:calc(var(--radius) - 2px)}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:border:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *){border-style:var(--tw-border-style);border-width:1px}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:bg-popover:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *){background-color:var(--popover)}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:text-popover-foreground:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *){color:var(--popover-foreground)}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:shadow:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *){--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)}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:duration-200:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *){--tw-duration:.2s;transition-duration:.2s}@media (hover:hover){.ui\:peer-hover\/menu-button\:text-sidebar-accent-foreground:is(:where(.ui\:peer\/menu-button):hover~*){color:var(--sidebar-accent-foreground)}}.ui\:peer-focus-visible\:opacity-100:is(:where(.ui\:peer):focus-visible~*){opacity:1}.ui\:peer-disabled\:cursor-not-allowed:is(:where(.ui\:peer):disabled~*){cursor:not-allowed}.ui\:peer-disabled\:opacity-50:is(:where(.ui\:peer):disabled~*){opacity:.5}.ui\:peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground:is(:where(.ui\:peer\/menu-button)[data-active=true]~*){color:var(--sidebar-accent-foreground)}.ui\:peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.ui\:peer\/menu-button)[data-size=default]~*){top:calc(var(--ui-spacing) * 1.5)}.ui\:peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.ui\:peer\/menu-button)[data-size=lg]~*){top:calc(var(--ui-spacing) * 2.5)}.ui\:peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.ui\:peer\/menu-button)[data-size=sm]~*){top:calc(var(--ui-spacing) * 1)}.ui\:first-letter\:float-left:first-letter{float:left}.ui\:first-letter\:mr-2:first-letter{margin-right:calc(var(--ui-spacing) * 2)}.ui\:first-letter\:text-5xl:first-letter{font-size:var(--ui-text-5xl);line-height:var(--tw-leading,var(--ui-text-5xl--line-height))}.ui\:first-letter\:leading-none:first-letter{--tw-leading:1;line-height:1}.ui\:first-letter\:\[font-weight\:var\(--landing-heading-weight\)\]:first-letter{font-weight:var(--landing-heading-weight)}.ui\:first-letter\:text-\[var\(--landing-accent\)\]:first-letter{color:var(--landing-accent)}.ui\:selection\:bg-primary ::selection{background-color:var(--primary)}.ui\:selection\:bg-primary::selection{background-color:var(--primary)}.ui\:selection\:text-primary-foreground ::selection{color:var(--primary-foreground)}.ui\:selection\:text-primary-foreground::selection{color:var(--primary-foreground)}.ui\:placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}.ui\:before\:mr-1:before{content:var(--tw-content);margin-right:calc(var(--ui-spacing) * 1)}.ui\:before\:size-1\.5:before{content:var(--tw-content);width:calc(var(--ui-spacing) * 1.5);height:calc(var(--ui-spacing) * 1.5)}.ui\:before\:rounded-full:before{content:var(--tw-content);border-radius:3.40282e38px}.ui\:before\:bg-\[var\(--landing-accent\)\]:before{content:var(--tw-content);background-color:var(--landing-accent)}.ui\:before\:text-2xl:before{content:var(--tw-content);font-size:var(--ui-text-2xl);line-height:var(--tw-leading,var(--ui-text-2xl--line-height))}.ui\:before\:text-\[var\(--landing-accent\)\]:before{content:var(--tw-content);color:var(--landing-accent)}.ui\:before\:content-\[\"\"\]:before{--tw-content:"";content:var(--tw-content)}.ui\:before\:content-\[\"“\"\]:before{--tw-content:"“";content:var(--tw-content)}.ui\:after\:absolute:after{content:var(--tw-content);position:absolute}.ui\:after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--ui-spacing) * -2)}.ui\:after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--ui-spacing) * 0)}.ui\:after\:left-\[calc\(1\/2\*100\%-1px\)\]:after{content:var(--tw-content);left:calc(50% - 1px)}.ui\:after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.ui\:group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.ui\:group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.ui\:first\:border-t-0:first-child{border-top-style:var(--tw-border-style);border-top-width:0}.ui\:last\:mt-0:last-child{margin-top:calc(var(--ui-spacing) * 0)}.ui\:last\:border-b:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ui\:last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.ui\:focus-within\:border-ring:focus-within{border-color:var(--ring)}.ui\:focus-within\:ring-\[3px\]:focus-within{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:focus-within\:ring-ring\/50:focus-within{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.ui\:focus-within\:ring-ring\/50:focus-within{--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}@media (hover:hover){.ui\:hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--ui-spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:hover\:-translate-y-1:hover{--tw-translate-y:calc(var(--ui-spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:hover\:cursor-pointer:hover{cursor:pointer}.ui\:hover\:border:hover{border-style:var(--tw-border-style);border-width:1px}.ui\:hover\:border-\[var\(--landing-accent\)\]:hover{border-color:var(--landing-accent)}.ui\:hover\:border-\[var\(--landing-accent-fg\)\]\/30:hover{border-color:var(--landing-accent-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:border-\[var\(--landing-accent-fg\)\]\/30:hover{border-color:color-mix(in oklab, var(--landing-accent-fg) 30%, transparent)}}.ui\:hover\:border-\[var\(--landing-bg\)\]\/60:hover{border-color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:border-\[var\(--landing-bg\)\]\/60:hover{border-color:color-mix(in oklab, var(--landing-bg) 60%, transparent)}}.ui\:hover\:border-\[var\(--landing-border\)\]:hover{border-color:var(--landing-border)}.ui\:hover\:border-\[var\(--landing-fg\)\]\/30:hover{border-color:var(--landing-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:border-\[var\(--landing-fg\)\]\/30:hover{border-color:color-mix(in oklab, var(--landing-fg) 30%, transparent)}}.ui\:hover\:border-primary\/40:hover{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:border-primary\/40:hover{border-color:color-mix(in oklab, var(--primary) 40%, transparent)}}.ui\:hover\:bg-\[\#2c2b29\]:hover{background-color:#2c2b29}.ui\:hover\:bg-\[\#14171f\]:hover{background-color:#14171f}.ui\:hover\:bg-\[\#e2e1d9\]:hover{background-color:#e2e1d9}.ui\:hover\:bg-\[\#ebeae3\]:hover{background-color:#ebeae3}.ui\:hover\:bg-\[var\(--landing-accent\)\]:hover,.ui\:hover\:bg-\[var\(--landing-accent\)\]\/90:hover{background-color:var(--landing-accent)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-\[var\(--landing-accent\)\]\/90:hover{background-color:color-mix(in oklab, var(--landing-accent) 90%, transparent)}}.ui\:hover\:bg-\[var\(--landing-accent-fg\)\]\/5:hover{background-color:var(--landing-accent-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-\[var\(--landing-accent-fg\)\]\/5:hover{background-color:color-mix(in oklab, var(--landing-accent-fg) 5%, transparent)}}.ui\:hover\:bg-\[var\(--landing-accent-fg\)\]\/10:hover{background-color:var(--landing-accent-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-\[var\(--landing-accent-fg\)\]\/10:hover{background-color:color-mix(in oklab, var(--landing-accent-fg) 10%, transparent)}}.ui\:hover\:bg-\[var\(--landing-accent-fg\)\]\/90:hover{background-color:var(--landing-accent-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-\[var\(--landing-accent-fg\)\]\/90:hover{background-color:color-mix(in oklab, var(--landing-accent-fg) 90%, transparent)}}.ui\:hover\:bg-\[var\(--landing-bg\)\]\/10:hover{background-color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-\[var\(--landing-bg\)\]\/10:hover{background-color:color-mix(in oklab, var(--landing-bg) 10%, transparent)}}.ui\:hover\:bg-\[var\(--landing-bg-section\)\]:hover{background-color:var(--landing-bg-section)}.ui\:hover\:bg-\[var\(--landing-button-primary-bg-hover\)\]:hover{background-color:var(--landing-button-primary-bg-hover)}.ui\:hover\:bg-\[var\(--landing-button-secondary-bg-hover\)\]:hover{background-color:var(--landing-button-secondary-bg-hover)}.ui\:hover\:bg-\[var\(--landing-button-tertiary-bg-hover\)\]:hover{background-color:var(--landing-button-tertiary-bg-hover)}.ui\:hover\:bg-\[var\(--landing-card\)\]:hover{background-color:var(--landing-card)}.ui\:hover\:bg-\[var\(--landing-card-soft\)\]:hover,.ui\:hover\:bg-\[var\(--landing-card-soft\)\]\/30:hover{background-color:var(--landing-card-soft)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-\[var\(--landing-card-soft\)\]\/30:hover{background-color:color-mix(in oklab, var(--landing-card-soft) 30%, transparent)}}.ui\:hover\:bg-\[var\(--landing-card-soft\)\]\/40:hover{background-color:var(--landing-card-soft)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-\[var\(--landing-card-soft\)\]\/40:hover{background-color:color-mix(in oklab, var(--landing-card-soft) 40%, transparent)}}.ui\:hover\:bg-\[var\(--landing-card-soft\)\]\/60:hover{background-color:var(--landing-card-soft)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-\[var\(--landing-card-soft\)\]\/60:hover{background-color:color-mix(in oklab, var(--landing-card-soft) 60%, transparent)}}.ui\:hover\:bg-\[var\(--landing-fg\)\]:hover{background-color:var(--landing-fg)}.ui\:hover\:bg-accent:hover,.ui\:hover\:bg-accent\/25:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-accent\/25:hover{background-color:color-mix(in oklab, var(--accent) 25%, transparent)}}.ui\:hover\:bg-accent\/50:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-accent\/50:hover{background-color:color-mix(in oklab, var(--accent) 50%, transparent)}}.ui\:hover\:bg-amber-500\/10:hover{background-color:var(--ui-color-amber-500)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-amber-500\/10:hover{background-color:color-mix(in oklab, var(--ui-color-amber-500) 10%, transparent)}}.ui\:hover\:bg-black\/20:hover{background-color:var(--ui-color-black)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-black\/20:hover{background-color:color-mix(in oklab, var(--ui-color-black) 20%, transparent)}}.ui\:hover\:bg-black\/80:hover{background-color:var(--ui-color-black)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-black\/80:hover{background-color:color-mix(in oklab, var(--ui-color-black) 80%, transparent)}}.ui\:hover\:bg-muted:hover,.ui\:hover\:bg-muted\/40:hover{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-muted\/40:hover{background-color:color-mix(in oklab, var(--muted) 40%, transparent)}}.ui\:hover\:bg-muted\/50:hover{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-muted\/50:hover{background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}.ui\:hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, var(--primary) 90%, transparent)}}.ui\:hover\:bg-sidebar-accent:hover{background-color:var(--sidebar-accent)}.ui\:hover\:bg-transparent\!:hover{background-color:#0000!important}.ui\:hover\:bg-white:hover,.ui\:hover\:bg-white\/5:hover{background-color:var(--ui-color-white)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-white\/5:hover{background-color:color-mix(in oklab, var(--ui-color-white) 5%, transparent)}}.ui\:hover\:bg-white\/10:hover{background-color:var(--ui-color-white)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-white\/10:hover{background-color:color-mix(in oklab, var(--ui-color-white) 10%, transparent)}}.ui\:hover\:text-\[\#1a1a1a\]:hover{color:#1a1a1a}.ui\:hover\:text-\[\#e9eaed\]:hover{color:#e9eaed}.ui\:hover\:text-\[var\(--landing-accent\)\]:hover{color:var(--landing-accent)}.ui\:hover\:text-\[var\(--landing-accent-fg\)\]:hover{color:var(--landing-accent-fg)}.ui\:hover\:text-\[var\(--landing-bg\)\]:hover{color:var(--landing-bg)}.ui\:hover\:text-\[var\(--landing-fg\)\]:hover{color:var(--landing-fg)}.ui\:hover\:text-\[var\(--landing-fg-muted\)\]:hover{color:var(--landing-fg-muted)}.ui\:hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.ui\:hover\:text-foreground:hover{color:var(--foreground)}.ui\:hover\:text-muted-foreground:hover{color:var(--muted-foreground)}.ui\:hover\:text-primary:hover{color:var(--primary)}.ui\:hover\:text-sidebar-accent-foreground:hover{color:var(--sidebar-accent-foreground)}.ui\:hover\:underline:hover{text-decoration-line:underline}.ui\:hover\:opacity-90:hover{opacity:.9}.ui\:hover\:opacity-100:hover{opacity:1}.ui\:hover\:shadow-2xs:hover{--tw-shadow:0 1px var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:hover\:shadow-\[0_0_0_1px_var\(--sidebar-accent\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,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)}.ui\: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)}.ui\:hover\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:hover\:ring-2:hover{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:hover\:shadow-primary\/5:hover{--tw-shadow-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:shadow-primary\/5:hover{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--primary) 5%, transparent) var(--tw-shadow-alpha), transparent)}}.ui\:hover\:ring-primary\/40:hover{--tw-ring-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:ring-primary\/40:hover{--tw-ring-color:color-mix(in oklab, var(--primary) 40%, transparent)}}.ui\:hover\:ring-inset:hover{--tw-ring-inset:inset}.ui\:group-aria-disabled\/file-drop-zone-trigger\:hover\:cursor-not-allowed:is(:where(.ui\:group\/file-drop-zone-trigger)[aria-disabled=true] *):hover{cursor:not-allowed}.ui\:hover\:group-data-\[collapsible\=offcanvas\]\:bg-sidebar:hover:is(:where(.ui\:group)[data-collapsible=offcanvas] *){background-color:var(--sidebar)}.ui\:hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:var(--sidebar-border)}}.ui\:focus\:bg-accent:focus{background-color:var(--accent)}.ui\:focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.ui\: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)}.ui\:focus\:ring-ring:focus{--tw-ring-color:var(--ring)}.ui\: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)}.ui\:focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.ui\:focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.ui\:focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.ui\:focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.ui\:focus-visible\:ring-0:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:focus-visible\:ring-0\!:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor)!important;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)!important}.ui\: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)}.ui\:focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:focus-visible\:ring-\[var\(--landing-accent\)\]\/50:focus-visible{--tw-ring-color:var(--landing-accent)}@supports (color:color-mix(in lab, red, red)){.ui\:focus-visible\:ring-\[var\(--landing-accent\)\]\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--landing-accent) 50%, transparent)}}.ui\:focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.ui\:focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.ui\:focus-visible\:ring-ring:focus-visible,.ui\:focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.ui\:focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.ui\:focus-visible\:ring-offset-0\!:focus-visible{--tw-ring-offset-width:0px!important;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important}.ui\: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)}.ui\:focus-visible\:outline-hidden:focus-visible{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.ui\:focus-visible\:outline-hidden:focus-visible{outline-offset:2px;outline:2px solid #0000}}.ui\:focus-visible\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.ui\:focus-visible\:outline-ring:focus-visible{outline-color:var(--ring)}.ui\:focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.ui\:active\:translate-y-px:active{--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:active\:bg-sidebar-accent:active{background-color:var(--sidebar-accent)}.ui\:active\:text-sidebar-accent-foreground:active{color:var(--sidebar-accent-foreground)}.ui\:disabled\:pointer-events-none:disabled{pointer-events:none}.ui\:disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.ui\:disabled\:opacity-30:disabled{opacity:.3}.ui\:disabled\:opacity-40:disabled{opacity:.4}.ui\:disabled\:opacity-50:disabled{opacity:.5}:where([data-side=left]) .ui\:in-data-\[side\=left\]\:cursor-w-resize{cursor:w-resize}:where([data-side=right]) .ui\:in-data-\[side\=right\]\:cursor-e-resize{cursor:e-resize}:where([data-slot=tooltip-content]) .ui\:in-data-\[slot\=tooltip-content\]\:bg-background\/20{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){:where([data-slot=tooltip-content]) .ui\:in-data-\[slot\=tooltip-content\]\:bg-background\/20{background-color:color-mix(in oklab, var(--background) 20%, transparent)}}:where([data-slot=tooltip-content]) .ui\:in-data-\[slot\=tooltip-content\]\:text-background{color:var(--background)}.ui\:has-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.ui\:has-data-\[state\=checked\]\:border-primary:has([data-state=checked]){border-color:var(--primary)}.ui\:has-data-\[state\=checked\]\:bg-primary\/5:has([data-state=checked]){background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:has-data-\[state\=checked\]\:bg-primary\/5:has([data-state=checked]){background-color:color-mix(in oklab, var(--primary) 5%, transparent)}}.ui\:has-data-\[variant\=inset\]\:bg-sidebar:has([data-variant=inset]){background-color:var(--sidebar)}.ui\:has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:border-ring:has([data-slot=input-group-control]:focus-visible){border-color:var(--ring)}.ui\:has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:ring-\[3px\]:has([data-slot=input-group-control]:focus-visible){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:ring-ring\/50:has([data-slot=input-group-control]:focus-visible){--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.ui\:has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:ring-ring\/50:has([data-slot=input-group-control]:focus-visible){--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.ui\:has-\[\[data-slot\]\[aria-invalid\=true\]\]\:border-destructive:has([data-slot][aria-invalid=true]){border-color:var(--destructive)}.ui\:has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/20:has([data-slot][aria-invalid=true]){--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.ui\:has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/20:has([data-slot][aria-invalid=true]){--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.ui\:has-\[\>\[data-align\=block-end\]\]\:h-auto:has(>[data-align=block-end]){height:auto}.ui\:has-\[\>\[data-align\=block-end\]\]\:flex-col:has(>[data-align=block-end]){flex-direction:column}.ui\:has-\[\>\[data-align\=block-start\]\]\:h-auto:has(>[data-align=block-start]){height:auto}.ui\:has-\[\>\[data-align\=block-start\]\]\:flex-col:has(>[data-align=block-start]){flex-direction:column}.ui\:has-\[\>\[data-slot\=button-group\]\]\:gap-2:has(>[data-slot=button-group]){gap:calc(var(--ui-spacing) * 2)}.ui\:has-\[\>\[data-slot\=checkbox-group\]\]\:gap-3:has(>[data-slot=checkbox-group]){gap:calc(var(--ui-spacing) * 3)}.ui\:has-\[\>\[data-slot\=field-content\]\]\:items-start:has(>[data-slot=field-content]){align-items:flex-start}.ui\:has-\[\>\[data-slot\=field\]\]\:w-full:has(>[data-slot=field]){width:100%}.ui\:has-\[\>\[data-slot\=field\]\]\:cursor-pointer:has(>[data-slot=field]){cursor:pointer}.ui\:has-\[\>\[data-slot\=field\]\]\:flex-col:has(>[data-slot=field]){flex-direction:column}.ui\:has-\[\>\[data-slot\=field\]\]\:rounded-md:has(>[data-slot=field]){border-radius:calc(var(--radius) - 2px)}.ui\:has-\[\>\[data-slot\=field\]\]\:border:has(>[data-slot=field]){border-style:var(--tw-border-style);border-width:1px}@media (hover:hover){.ui\:has-\[\>\[data-slot\=field\]\]\:hover\:bg-primary\/5:has(>[data-slot=field]):hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:has-\[\>\[data-slot\=field\]\]\:hover\:bg-primary\/5:has(>[data-slot=field]):hover{background-color:color-mix(in oklab, var(--primary) 5%, transparent)}}}.ui\:has-\[\>\[data-slot\=radio-group\]\]\:gap-3:has(>[data-slot=radio-group]){gap:calc(var(--ui-spacing) * 3)}.ui\:has-\[\>button\]\:ms-\[-0\.45rem\]:has(>button){margin-inline-start:-.45rem}.ui\:has-\[\>button\]\:me-\[-0\.45rem\]:has(>button){margin-inline-end:-.45rem}.ui\:has-\[\>kbd\]\:ms-\[-0\.35rem\]:has(>kbd){margin-inline-start:-.35rem}.ui\:has-\[\>kbd\]\:me-\[-0\.35rem\]:has(>kbd){margin-inline-end:-.35rem}.ui\:has-\[\>svg\]\:grid-cols-\[calc\(var\(--spacing\)\*4\)_1fr\]:has(>svg){grid-template-columns:calc(var(--spacing) * 4) 1fr}.ui\:has-\[\>svg\]\:gap-x-3:has(>svg){column-gap:calc(var(--ui-spacing) * 3)}.ui\:has-\[\>svg\]\:p-0:has(>svg){padding:calc(var(--ui-spacing) * 0)}.ui\:has-\[\>svg\]\:px-2:has(>svg){padding-inline:calc(var(--ui-spacing) * 2)}.ui\:has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--ui-spacing) * 2.5)}.ui\:has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--ui-spacing) * 3)}.ui\:has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--ui-spacing) * 4)}.ui\:has-\[\>textarea\]\:h-auto:has(>textarea){height:auto}.ui\:aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.ui\:aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.ui\:aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.ui\:aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.ui\:aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.ui\:aria-selected\:bg-accent[aria-selected=true]{background-color:var(--accent)}.ui\:aria-selected\:text-accent-foreground[aria-selected=true]{color:var(--accent-foreground)}:is(.ui\:\*\*\:data-command-group\:px-2 *)[data-command-group]{padding-inline:calc(var(--ui-spacing) * 2)}:is(.ui\:\*\*\:data-command-input\:h-12 *)[data-command-input]{height:calc(var(--ui-spacing) * 12)}:is(.ui\:\*\*\:data-command-item\:px-2 *)[data-command-item]{padding-inline:calc(var(--ui-spacing) * 2)}:is(.ui\:\*\*\:data-command-item\:py-3 *)[data-command-item]{padding-block:calc(var(--ui-spacing) * 3)}.ui\:data-disabled\:pointer-events-none[data-disabled]{pointer-events:none}.ui\:data-disabled\:cursor-not-allowed[data-disabled]{cursor:not-allowed}.ui\:data-disabled\:opacity-50[data-disabled]{opacity:.5}.ui\:data-highlighted\:bg-accent[data-highlighted]{background-color:var(--accent)}.ui\:data-highlighted\:text-accent-foreground[data-highlighted]{color:var(--accent-foreground)}.ui\:data-inset\:pl-8[data-inset]{padding-left:calc(var(--ui-spacing) * 8)}.ui\:data-placeholder\:text-muted-foreground[data-placeholder]{color:var(--muted-foreground)}.ui\:data-\[active\=true\]\:bg-accent\/50[data-active=true]{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.ui\:data-\[active\=true\]\:bg-accent\/50[data-active=true]{background-color:color-mix(in oklab, var(--accent) 50%, transparent)}}.ui\:data-\[active\=true\]\:bg-primary\/10[data-active=true]{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:data-\[active\=true\]\:bg-primary\/10[data-active=true]{background-color:color-mix(in oklab, var(--primary) 10%, transparent)}}.ui\:data-\[active\=true\]\:text-accent-foreground[data-active=true]{color:var(--accent-foreground)}.ui\:data-\[active\=true\]\:text-primary[data-active=true]{color:var(--primary)}@media (hover:hover){.ui\:data-\[active\=true\]\:hover\:bg-accent[data-active=true]:hover{background-color:var(--accent)}}.ui\:data-\[active\=true\]\:focus\:bg-accent[data-active=true]:focus{background-color:var(--accent)}.ui\:data-\[collapsed\=true\]\:max-h-\[300px\][data-collapsed=true]{max-height:300px}.ui\:data-\[current\=true\]\:bg-muted[data-current=true]{background-color:var(--muted)}.ui\:data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.ui\:data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.ui\:data-\[inset\]\:pl-8[data-inset]{padding-left:calc(var(--ui-spacing) * 8)}.ui\:data-\[invalid\=true\]\:text-destructive[data-invalid=true]{color:var(--destructive)}.ui\:data-\[motion\=from-end\]\:slide-in-from-end-52[data-motion=from-end]:where(:dir(ltr),[dir=ltr]){--tw-enter-translate-x:calc(52*var(--spacing))}.ui\:data-\[motion\=from-end\]\:slide-in-from-end-52[data-motion=from-end]:where(:dir(rtl),[dir=rtl]),.ui\:data-\[motion\=from-start\]\:slide-in-from-start-52[data-motion=from-start]:where(:dir(ltr),[dir=ltr]){--tw-enter-translate-x:calc(52*var(--spacing)*-1)}.ui\:data-\[motion\=from-start\]\:slide-in-from-start-52[data-motion=from-start]:where(:dir(rtl),[dir=rtl]){--tw-enter-translate-x:calc(52*var(--spacing))}.ui\:data-\[motion\=to-end\]\:slide-out-to-end-52[data-motion=to-end]:where(:dir(ltr),[dir=ltr]){--tw-exit-translate-x:calc(52*var(--spacing))}.ui\:data-\[motion\=to-end\]\:slide-out-to-end-52[data-motion=to-end]:where(:dir(rtl),[dir=rtl]),.ui\:data-\[motion\=to-start\]\:slide-out-to-start-52[data-motion=to-start]:where(:dir(ltr),[dir=ltr]){--tw-exit-translate-x:calc(52*var(--spacing)*-1)}.ui\:data-\[motion\=to-start\]\:slide-out-to-start-52[data-motion=to-start]:where(:dir(rtl),[dir=rtl]){--tw-exit-translate-x:calc(52*var(--spacing))}.ui\:data-\[motion\^\=from-\]\:animate-in[data-motion^=from-]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ui\:data-\[motion\^\=from-\]\:fade-in[data-motion^=from-]{--tw-enter-opacity:0}.ui\:data-\[motion\^\=to-\]\:animate-out[data-motion^=to-]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ui\:data-\[motion\^\=to-\]\:fade-out[data-motion^=to-]{--tw-exit-opacity:0}.ui\:data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.ui\:data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.ui\:data-\[orientation\=vertical\]\:h-auto[data-orientation=vertical]{height:auto}.ui\:data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.ui\:data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.ui\:data-\[side\=bottom\]\:-translate-x-1\/2[data-side=bottom]{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:data-\[side\=bottom\]\:-translate-y-\[calc\(-50\%\+1px\)\][data-side=bottom]{--tw-translate-y:calc(calc(-50% + 1px) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--ui-spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.ui\:data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--ui-spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:data-\[side\=left\]\:-translate-y-\[calc\(50\%-3px\)\][data-side=left]{--tw-translate-y:calc(calc(50% - 3px) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:data-\[side\=left\]\:slide-in-from-end-2[data-side=left]:where(:dir(ltr),[dir=ltr]){--tw-enter-translate-x:calc(2*var(--spacing))}.ui\:data-\[side\=left\]\:slide-in-from-end-2[data-side=left]:where(:dir(rtl),[dir=rtl]){--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.ui\:data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.ui\:data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--ui-spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:data-\[side\=right\]\:translate-x-\[calc\(50\%\+2px\)\][data-side=right]{--tw-translate-x:calc(50% + 2px);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:data-\[side\=right\]\:translate-y-1\/2[data-side=right]{--tw-translate-y:calc(1 / 2 * 100%);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:data-\[side\=right\]\:slide-in-from-start-2[data-side=right]:where(:dir(ltr),[dir=ltr]){--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.ui\:data-\[side\=right\]\:slide-in-from-start-2[data-side=right]:where(:dir(rtl),[dir=rtl]){--tw-enter-translate-x:calc(2*var(--spacing))}.ui\:data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.ui\:data-\[side\=top\]\:translate-x-1\/2[data-side=top]{--tw-translate-x:calc(1 / 2 * 100%);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--ui-spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:data-\[side\=top\]\:translate-y-\[calc\(-50\%\+2px\)\][data-side=top]{--tw-translate-y:calc(-50% + 2px);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.ui\:data-\[size\=default\]\:h-9[data-size=default]{height:calc(var(--ui-spacing) * 9)}.ui\:data-\[size\=sm\]\:h-8[data-size=sm]{height:calc(var(--ui-spacing) * 8)}.ui\:data-\[slot\=checkbox-group\]\:gap-3[data-slot=checkbox-group]{gap:calc(var(--ui-spacing) * 3)}:is(.ui\:\*\:data-\[slot\=field\]\:p-4>*)[data-slot=field]{padding:calc(var(--ui-spacing) * 4)}:is(.ui\:\*\:data-\[slot\=field-group\]\:gap-4>*)[data-slot=field-group]{gap:calc(var(--ui-spacing) * 4)}:is(.ui\:\*\*\:data-\[slot\=navigation-menu-link\]\:focus\:ring-0 *)[data-slot=navigation-menu-link]:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}:is(.ui\:\*\*\:data-\[slot\=navigation-menu-link\]\:focus\:outline-none *)[data-slot=navigation-menu-link]:focus{--tw-outline-style:none;outline-style:none}:is(.ui\:\*\*\:data-\[slot\=select-value\]\:line-clamp-1 *)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.ui\:\*\*\:data-\[slot\=select-value\]\:flex *)[data-slot=select-value]{display:flex}:is(.ui\:\*\*\:data-\[slot\=select-value\]\:items-center *)[data-slot=select-value]{align-items:center}:is(.ui\:\*\*\:data-\[slot\=select-value\]\:gap-2 *)[data-slot=select-value]{gap:calc(var(--ui-spacing) * 2)}.ui\:data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--background)}.ui\:data-\[state\=active\]\:text-foreground[data-state=active]{color:var(--foreground)}.ui\:data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:data-\[state\=checked\]\:translate-x-\[calc\(100\%-2px\)\][data-state=checked]{--tw-translate-x:calc(100% - 2px);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:var(--primary)}.ui\:data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--primary)}.ui\:data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:var(--primary-foreground)}.ui\:data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:accordion-up var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ui\:data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ui\:data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.ui\:data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.ui\:data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.ui\:data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.ui\:data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x:-100%}.ui\:data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x:100%}.ui\:data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y:-100%}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:animate-out:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *)[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:fade-out-0:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *)[data-state=closed]{--tw-exit-opacity:0}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:zoom-out-95:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *)[data-state=closed]{--tw-exit-scale:.95}.ui\:data-\[state\=hidden\]\:animate-out[data-state=hidden]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ui\:data-\[state\=hidden\]\:fade-out[data-state=hidden]{--tw-exit-opacity:0}.ui\:data-\[state\=off\]\:text-muted-foreground[data-state=off]{color:var(--muted-foreground)}@media (hover:hover){.ui\:hover\:data-\[state\=off\]\:text-accent-foreground:hover[data-state=off]{color:var(--accent-foreground)}}.ui\:data-\[state\=on\]\:bg-accent[data-state=on]{background-color:var(--accent)}.ui\:data-\[state\=on\]\:bg-primary[data-state=on]{background-color:var(--primary)}.ui\:data-\[state\=on\]\:bg-transparent[data-state=on]{background-color:#0000}.ui\:data-\[state\=on\]\:text-accent-foreground[data-state=on]{color:var(--accent-foreground)}.ui\:data-\[state\=on\]\:text-muted-foreground[data-state=on]{color:var(--muted-foreground)}.ui\:data-\[state\=on\]\:text-primary-foreground[data-state=on]{color:var(--primary-foreground)}@media (hover:hover){.ui\:hover\:data-\[state\=on\]\:text-accent-foreground:hover[data-state=on]{color:var(--accent-foreground)}}.ui\:data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:accordion-down var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ui\:data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ui\:data-\[state\=open\]\:bg-accent[data-state=open],.ui\:data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.ui\:data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:color-mix(in oklab, var(--accent) 50%, transparent)}}.ui\:data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:var(--accent-foreground)}.ui\:data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.ui\:data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.ui\:data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.ui\:data-\[state\=open\]\:zoom-in-90[data-state=open]{--tw-enter-scale:.9}.ui\:data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.ui\:data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.ui\:data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x:-100%}.ui\:data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x:100%}.ui\:data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y:-100%}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:animate-in:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *)[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:fade-in-0:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *)[data-state=open]{--tw-enter-opacity:0}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:zoom-in-95:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *)[data-state=open]{--tw-enter-scale:.95}@media (hover:hover){.ui\:data-\[state\=open\]\:hover\:bg-accent[data-state=open]:hover{background-color:var(--accent)}.ui\:data-\[state\=open\]\:hover\:bg-sidebar-accent[data-state=open]:hover{background-color:var(--sidebar-accent)}.ui\:data-\[state\=open\]\:hover\:text-sidebar-accent-foreground[data-state=open]:hover{color:var(--sidebar-accent-foreground)}}.ui\:data-\[state\=open\]\:focus\:bg-accent[data-state=open]:focus{background-color:var(--accent)}.ui\:data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--muted)}.ui\:data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:calc(var(--ui-spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:var(--input)}.ui\:data-\[state\=visible\]\:animate-in[data-state=visible]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ui\:data-\[state\=visible\]\:fade-in[data-state=visible]{--tw-enter-opacity:0}.ui\:data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{color:var(--destructive)}.ui\:data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.ui\:data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:color-mix(in oklab, var(--destructive) 10%, transparent)}}.ui\:data-\[variant\=destructive\]\:focus\:text-destructive[data-variant=destructive]:focus{color:var(--destructive)}.ui\:data-\[variant\=destructive\]\:data-highlighted\:bg-destructive\/10[data-variant=destructive][data-highlighted]{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.ui\:data-\[variant\=destructive\]\:data-highlighted\:bg-destructive\/10[data-variant=destructive][data-highlighted]{background-color:color-mix(in oklab, var(--destructive) 10%, transparent)}}.ui\:data-\[variant\=destructive\]\:data-highlighted\:text-destructive[data-variant=destructive][data-highlighted]{color:var(--destructive)}.ui\:data-\[variant\=label\]\:text-sm[data-variant=label]{font-size:var(--ui-text-sm);line-height:var(--tw-leading,var(--ui-text-sm--line-height))}.ui\:data-\[variant\=legend\]\:text-base[data-variant=legend]{font-size:var(--ui-text-base);line-height:var(--tw-leading,var(--ui-text-base--line-height))}.ui\:data-\[vaul-drawer-direction\=bottom\]\:inset-x-0[data-vaul-drawer-direction=bottom]{inset-inline:calc(var(--ui-spacing) * 0)}.ui\:data-\[vaul-drawer-direction\=bottom\]\:bottom-0[data-vaul-drawer-direction=bottom]{bottom:calc(var(--ui-spacing) * 0)}.ui\:data-\[vaul-drawer-direction\=bottom\]\:mt-24[data-vaul-drawer-direction=bottom]{margin-top:calc(var(--ui-spacing) * 24)}.ui\:data-\[vaul-drawer-direction\=bottom\]\:max-h-\[80vh\][data-vaul-drawer-direction=bottom]{max-height:80vh}.ui\:data-\[vaul-drawer-direction\=bottom\]\:rounded-t-lg[data-vaul-drawer-direction=bottom]{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.ui\:data-\[vaul-drawer-direction\=bottom\]\:border-t[data-vaul-drawer-direction=bottom]{border-top-style:var(--tw-border-style);border-top-width:1px}.ui\:data-\[vaul-drawer-direction\=left\]\:inset-y-0[data-vaul-drawer-direction=left]{inset-block:calc(var(--ui-spacing) * 0)}.ui\:data-\[vaul-drawer-direction\=left\]\:start-0[data-vaul-drawer-direction=left]{inset-inline-start:calc(var(--ui-spacing) * 0)}.ui\:data-\[vaul-drawer-direction\=left\]\:w-3\/4[data-vaul-drawer-direction=left]{width:75%}.ui\:data-\[vaul-drawer-direction\=left\]\:border-e[data-vaul-drawer-direction=left]{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.ui\:data-\[vaul-drawer-direction\=right\]\:inset-y-0[data-vaul-drawer-direction=right]{inset-block:calc(var(--ui-spacing) * 0)}.ui\:data-\[vaul-drawer-direction\=right\]\:end-0[data-vaul-drawer-direction=right]{inset-inline-end:calc(var(--ui-spacing) * 0)}.ui\:data-\[vaul-drawer-direction\=right\]\:w-3\/4[data-vaul-drawer-direction=right]{width:75%}.ui\:data-\[vaul-drawer-direction\=right\]\:border-s[data-vaul-drawer-direction=right]{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.ui\:data-\[vaul-drawer-direction\=top\]\:inset-x-0[data-vaul-drawer-direction=top]{inset-inline:calc(var(--ui-spacing) * 0)}.ui\:data-\[vaul-drawer-direction\=top\]\:top-0[data-vaul-drawer-direction=top]{top:calc(var(--ui-spacing) * 0)}.ui\:data-\[vaul-drawer-direction\=top\]\:mb-24[data-vaul-drawer-direction=top]{margin-bottom:calc(var(--ui-spacing) * 24)}.ui\:data-\[vaul-drawer-direction\=top\]\:max-h-\[80vh\][data-vaul-drawer-direction=top]{max-height:80vh}.ui\:data-\[vaul-drawer-direction\=top\]\:rounded-b-lg[data-vaul-drawer-direction=top]{border-bottom-right-radius:var(--radius);border-bottom-left-radius:var(--radius)}.ui\:data-\[vaul-drawer-direction\=top\]\:border-b[data-vaul-drawer-direction=top]{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ui\:nth-last-2\:-mt-1:nth-last-child(2){margin-top:calc(var(--ui-spacing) * -1)}@supports ((-webkit-backdrop-filter:var(--tw)) or (backdrop-filter:var(--tw))){.ui\:supports-\[backdrop-filter\]\:bg-background\/80{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.ui\:supports-\[backdrop-filter\]\:bg-background\/80{background-color:color-mix(in oklab, var(--background) 80%, transparent)}}}@media (min-width:40rem){.ui\:sm\:top-6{top:calc(var(--ui-spacing) * 6)}.ui\:sm\:bottom-6{bottom:calc(var(--ui-spacing) * 6)}.ui\:sm\:col-span-2{grid-column:span 2/span 2}.ui\:sm\:flex{display:flex}.ui\:sm\:inline-flex{display:inline-flex}.ui\:sm\:w-64{width:calc(var(--ui-spacing) * 64)}.ui\:sm\:max-w-lg{max-width:var(--ui-container-lg)}.ui\:sm\:max-w-sm{max-width:var(--ui-container-sm)}.ui\:sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.ui\:sm\:flex-row{flex-direction:row}.ui\:sm\:items-center{align-items:center}.ui\:sm\:items-end{align-items:flex-end}.ui\:sm\:justify-between{justify-content:space-between}.ui\:sm\:justify-end{justify-content:flex-end}.ui\:sm\:gap-2\.5{gap:calc(var(--ui-spacing) * 2.5)}.ui\:sm\:gap-3{gap:calc(var(--ui-spacing) * 3)}.ui\:sm\:rounded-lg{border-radius:var(--radius)}.ui\:sm\:border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.ui\:sm\:p-6{padding:calc(var(--ui-spacing) * 6)}.ui\:sm\:px-6{padding-inline:calc(var(--ui-spacing) * 6)}.ui\:sm\:py-16{padding-block:calc(var(--ui-spacing) * 16)}.ui\:sm\:py-32{padding-block:calc(var(--ui-spacing) * 32)}.ui\:sm\:pr-2\.5{padding-right:calc(var(--ui-spacing) * 2.5)}.ui\:sm\:pl-2\.5{padding-left:calc(var(--ui-spacing) * 2.5)}.ui\:sm\:text-3xl{font-size:var(--ui-text-3xl);line-height:var(--tw-leading,var(--ui-text-3xl--line-height))}.ui\:sm\:text-5xl{font-size:var(--ui-text-5xl);line-height:var(--tw-leading,var(--ui-text-5xl--line-height))}.ui\:sm\:text-xl{font-size:var(--ui-text-xl);line-height:var(--tw-leading,var(--ui-text-xl--line-height))}.ui\:data-\[vaul-drawer-direction\=left\]\:sm\:max-w-sm[data-vaul-drawer-direction=left],.ui\:data-\[vaul-drawer-direction\=right\]\:sm\:max-w-sm[data-vaul-drawer-direction=right]{max-width:var(--ui-container-sm)}}@media (min-width:48rem){.ui\:md\:absolute{position:absolute}.ui\:md\:top-8{top:calc(var(--ui-spacing) * 8)}.ui\:md\:bottom-8{bottom:calc(var(--ui-spacing) * 8)}.ui\:md\:col-span-1{grid-column:span 1/span 1}.ui\:md\:col-span-4{grid-column:span 4/span 4}.ui\:md\:col-span-7{grid-column:span 7/span 7}.ui\:md\:col-start-9{grid-column-start:9}.ui\:md\:mx-0{margin-inline:calc(var(--ui-spacing) * 0)}.ui\:md\:mt-12{margin-top:calc(var(--ui-spacing) * 12)}.ui\:md\:mb-12{margin-bottom:calc(var(--ui-spacing) * 12)}.ui\:md\:block{display:block}.ui\:md\:flex{display:flex}.ui\:md\:size-\[1\.125rem\]{width:1.125rem;height:1.125rem}.ui\:md\:h-7{height:calc(var(--ui-spacing) * 7)}.ui\:md\:h-8{height:calc(var(--ui-spacing) * 8)}.ui\:md\:h-14{height:calc(var(--ui-spacing) * 14)}.ui\:md\:h-\[220px\]{height:220px}.ui\:md\:h-\[480px\]{height:480px}.ui\:md\:w-24{width:calc(var(--ui-spacing) * 24)}.ui\:md\:w-52{width:calc(var(--ui-spacing) * 52)}.ui\:md\:w-\[var\(--bits-navigation-menu-viewport-width\)\]{width:var(--bits-navigation-menu-viewport-width)}.ui\:md\:w-auto{width:auto}.ui\:md\:w-full{width:100%}.ui\:md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.ui\:md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.ui\:md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.ui\:md\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.ui\:md\:grid-cols-\[1fr_2fr\]{grid-template-columns:1fr 2fr}.ui\:md\:grid-cols-\[180px_1fr\]{grid-template-columns:180px 1fr}.ui\:md\:grid-cols-\[260px_1fr\]{grid-template-columns:260px 1fr}.ui\:md\:grid-cols-\[auto_1fr\]{grid-template-columns:auto 1fr}.ui\:md\:grid-cols-\[minmax\(0\,1\.4fr\)_repeat\(auto-fit\,minmax\(140px\,1fr\)\)\]{grid-template-columns:minmax(0,1.4fr) repeat(auto-fit,minmax(140px,1fr))}.ui\:md\:grid-cols-\[minmax\(0\,220px\)_1fr\]{grid-template-columns:minmax(0,220px) 1fr}.ui\:md\:flex-col{flex-direction:column}.ui\:md\:flex-row{flex-direction:row}.ui\:md\:items-baseline{align-items:baseline}.ui\:md\:items-center{align-items:center}.ui\:md\:items-end{align-items:flex-end}.ui\:md\:items-start{align-items:flex-start}.ui\:md\:justify-between{justify-content:space-between}.ui\:md\:justify-center{justify-content:center}.ui\:md\:justify-end{justify-content:flex-end}.ui\:md\:gap-4{gap:calc(var(--ui-spacing) * 4)}.ui\:md\:gap-8{gap:calc(var(--ui-spacing) * 8)}.ui\:md\:gap-10{gap:calc(var(--ui-spacing) * 10)}.ui\:md\:gap-x-12{column-gap:calc(var(--ui-spacing) * 12)}.ui\:md\:gap-y-12{row-gap:calc(var(--ui-spacing) * 12)}.ui\:md\:self-auto{align-self:auto}.ui\:md\:overflow-x-auto{overflow-x:auto}.ui\:md\:overflow-x-visible{overflow-x:visible}.ui\:md\:overflow-y-visible{overflow-y:visible}.ui\:md\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.ui\:md\:border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.ui\:md\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.ui\:md\:border-border{border-color:var(--border)}.ui\:md\:p-6{padding:calc(var(--ui-spacing) * 6)}.ui\:md\:p-8{padding:calc(var(--ui-spacing) * 8)}.ui\:md\:p-12{padding:calc(var(--ui-spacing) * 12)}.ui\:md\:px-6{padding-inline:calc(var(--ui-spacing) * 6)}.ui\:md\:px-8{padding-inline:calc(var(--ui-spacing) * 8)}.ui\:md\:py-0{padding-block:calc(var(--ui-spacing) * 0)}.ui\:md\:py-1{padding-block:calc(var(--ui-spacing) * 1)}.ui\:md\:py-14{padding-block:calc(var(--ui-spacing) * 14)}.ui\:md\:py-16{padding-block:calc(var(--ui-spacing) * 16)}.ui\:md\:py-20{padding-block:calc(var(--ui-spacing) * 20)}.ui\:md\:py-24{padding-block:calc(var(--ui-spacing) * 24)}.ui\:md\:py-28{padding-block:calc(var(--ui-spacing) * 28)}.ui\:md\:py-32{padding-block:calc(var(--ui-spacing) * 32)}.ui\:md\:py-40{padding-block:calc(var(--ui-spacing) * 40)}.ui\:md\:pt-8{padding-top:calc(var(--ui-spacing) * 8)}.ui\:md\:pt-10{padding-top:calc(var(--ui-spacing) * 10)}.ui\:md\:pt-12{padding-top:calc(var(--ui-spacing) * 12)}.ui\:md\:pt-16{padding-top:calc(var(--ui-spacing) * 16)}.ui\:md\:pt-20{padding-top:calc(var(--ui-spacing) * 20)}.ui\:md\:pt-24{padding-top:calc(var(--ui-spacing) * 24)}.ui\:md\:pb-10{padding-bottom:calc(var(--ui-spacing) * 10)}.ui\:md\:pb-12{padding-bottom:calc(var(--ui-spacing) * 12)}.ui\:md\:pb-14{padding-bottom:calc(var(--ui-spacing) * 14)}.ui\:md\:pb-20{padding-bottom:calc(var(--ui-spacing) * 20)}.ui\:md\:pb-24{padding-bottom:calc(var(--ui-spacing) * 24)}.ui\:md\:pb-28{padding-bottom:calc(var(--ui-spacing) * 28)}.ui\:md\:pl-8{padding-left:calc(var(--ui-spacing) * 8)}.ui\:md\:text-right{text-align:right}.ui\:md\:text-2xl{font-size:var(--ui-text-2xl);line-height:var(--tw-leading,var(--ui-text-2xl--line-height))}.ui\:md\:text-3xl{font-size:var(--ui-text-3xl);line-height:var(--tw-leading,var(--ui-text-3xl--line-height))}.ui\:md\:text-4xl{font-size:var(--ui-text-4xl);line-height:var(--tw-leading,var(--ui-text-4xl--line-height))}.ui\:md\:text-5xl{font-size:var(--ui-text-5xl);line-height:var(--tw-leading,var(--ui-text-5xl--line-height))}.ui\:md\:text-6xl{font-size:var(--ui-text-6xl);line-height:var(--tw-leading,var(--ui-text-6xl--line-height))}.ui\:md\:text-7xl{font-size:var(--ui-text-7xl);line-height:var(--tw-leading,var(--ui-text-7xl--line-height))}.ui\:md\:text-lg{font-size:var(--ui-text-lg);line-height:var(--tw-leading,var(--ui-text-lg--line-height))}.ui\:md\:text-sm{font-size:var(--ui-text-sm);line-height:var(--tw-leading,var(--ui-text-sm--line-height))}.ui\:md\:text-xl{font-size:var(--ui-text-xl);line-height:var(--tw-leading,var(--ui-text-xl--line-height))}.ui\:md\:text-\[38px\]{font-size:38px}.ui\:md\:text-\[40px\]{font-size:40px}.ui\:md\:text-\[56px\]{font-size:56px}.ui\:md\:text-\[88px\]{font-size:88px}.ui\:md\:leading-20{--tw-leading:calc(var(--ui-spacing) * 20);line-height:calc(var(--ui-spacing) * 20)}.ui\:md\:opacity-0{opacity:0}.ui\:md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.ui\:peer)[data-variant=inset]~*){margin:calc(var(--ui-spacing) * 2)}.ui\:md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.ui\:peer)[data-variant=inset]~*){margin-left:calc(var(--ui-spacing) * 0)}.ui\:md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.ui\:peer)[data-variant=inset]~*){border-radius:calc(var(--radius) + 4px)}.ui\:md\:peer-data-\[variant\=inset\]\:shadow-sm:is(:where(.ui\: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)}.ui\:md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-2:is(:where(.ui\:peer)[data-variant=inset]~*):is(:where(.ui\:peer)[data-state=collapsed]~*){margin-left:calc(var(--ui-spacing) * 2)}.ui\:md\:after\:hidden:after{content:var(--tw-content);display:none}}@media (min-width:64rem){.ui\:lg\:block{display:block}.ui\:lg\:hidden{display:none}.ui\:lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.ui\:lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.ui\:lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.ui\:lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.ui\:lg\:grid-cols-\[1\.15fr_1fr\]{grid-template-columns:1.15fr 1fr}.ui\:lg\:grid-cols-\[1fr_1\.05fr\]{grid-template-columns:1fr 1.05fr}.ui\:lg\:gap-14{gap:calc(var(--ui-spacing) * 14)}.ui\:lg\:gap-20{gap:calc(var(--ui-spacing) * 20)}.ui\:lg\:px-6{padding-inline:calc(var(--ui-spacing) * 6)}.ui\:lg\:px-8{padding-inline:calc(var(--ui-spacing) * 8)}.ui\:lg\:py-10{padding-block:calc(var(--ui-spacing) * 10)}.ui\:lg\:py-12{padding-block:calc(var(--ui-spacing) * 12)}.ui\:lg\:py-24{padding-block:calc(var(--ui-spacing) * 24)}.ui\:lg\:pb-12{padding-bottom:calc(var(--ui-spacing) * 12)}.ui\:lg\:text-4xl{font-size:var(--ui-text-4xl);line-height:var(--tw-leading,var(--ui-text-4xl--line-height))}.ui\:lg\:text-5xl{font-size:var(--ui-text-5xl);line-height:var(--tw-leading,var(--ui-text-5xl--line-height))}.ui\:lg\:text-6xl{font-size:var(--ui-text-6xl);line-height:var(--tw-leading,var(--ui-text-6xl--line-height))}.ui\:lg\:text-7xl{font-size:var(--ui-text-7xl);line-height:var(--tw-leading,var(--ui-text-7xl--line-height))}.ui\:lg\:text-xl{font-size:var(--ui-text-xl);line-height:var(--tw-leading,var(--ui-text-xl--line-height))}.ui\:lg\:text-\[22px\]{font-size:22px}.ui\:lg\:text-\[40px\]{font-size:40px}.ui\:lg\:text-\[56px\]{font-size:56px}.ui\:lg\:text-\[64px\]{font-size:64px}.ui\:lg\:text-\[80px\]{font-size:80px}.ui\:lg\:text-\[110px\]{font-size:110px}}@container field-group (min-width:28rem){.ui\:\@md\/field-group\:flex-row{flex-direction:row}.ui\:\@md\/field-group\:items-center{align-items:center}.ui\:\@md\/field-group\:has-\[\>\[data-slot\=field-content\]\]\:items-start:has(>[data-slot=field-content]){align-items:flex-start}}@container (min-width:32rem){.ui\:\@lg\:w-48{width:calc(var(--ui-spacing) * 48)}.ui\:\@lg\:shrink-0{flex-shrink:0}.ui\:\@lg\:flex-row{flex-direction:row}}@container (min-width:36rem){.ui\:\@xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (min-width:42rem){.ui\:\@2xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (min-width:56rem){.ui\:\@4xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.ui\:dark\:scale-0:where(.dark,.dark *){--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x) var(--tw-scale-y)}.ui\:dark\:scale-100:where(.dark,.dark *){--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.ui\:dark\:-rotate-90:where(.dark,.dark *){rotate:-90deg}.ui\:dark\:rotate-0:where(.dark,.dark *){rotate:none}.ui\:dark\:border-amber-900:where(.dark,.dark *){border-color:var(--ui-color-amber-900)}.ui\:dark\:border-input:where(.dark,.dark *){border-color:var(--input)}.ui\:dark\:border-sky-900:where(.dark,.dark *){border-color:var(--ui-color-sky-900)}.ui\:dark\:border-slate-800:where(.dark,.dark *){border-color:var(--ui-color-slate-800)}.ui\:dark\:border-zinc-700:where(.dark,.dark *){border-color:var(--ui-color-zinc-700)}.ui\:dark\:border-zinc-800:where(.dark,.dark *){border-color:var(--ui-color-zinc-800)}.ui\:dark\:bg-\[\#09090B\]:where(.dark,.dark *){background-color:#09090b}.ui\:dark\:bg-amber-500:where(.dark,.dark *){background-color:var(--ui-color-amber-500)}.ui\:dark\:bg-amber-950:where(.dark,.dark *){background-color:var(--ui-color-amber-950)}.ui\:dark\:bg-card\!:where(.dark,.dark *){background-color:var(--card)!important}.ui\:dark\:bg-destructive\/60:where(.dark,.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:bg-destructive\/60:where(.dark,.dark *){background-color:color-mix(in oklab, var(--destructive) 60%, transparent)}}.ui\:dark\:bg-destructive\/70:where(.dark,.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:bg-destructive\/70:where(.dark,.dark *){background-color:color-mix(in oklab, var(--destructive) 70%, transparent)}}.ui\:dark\:bg-emerald-500:where(.dark,.dark *){background-color:var(--ui-color-emerald-500)}.ui\:dark\:bg-emerald-950\/20:where(.dark,.dark *){background-color:var(--ui-color-emerald-950)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:bg-emerald-950\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--ui-color-emerald-950) 20%, transparent)}}.ui\:dark\:bg-emerald-950\/30:where(.dark,.dark *){background-color:var(--ui-color-emerald-950)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:bg-emerald-950\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--ui-color-emerald-950) 30%, transparent)}}.ui\:dark\:bg-input\/30:where(.dark,.dark *){background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:bg-input\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--input) 30%, transparent)}}.ui\:dark\:bg-neutral-900:where(.dark,.dark *){background-color:var(--ui-color-neutral-900)}.ui\:dark\:bg-red-950\/30:where(.dark,.dark *){background-color:var(--ui-color-red-950)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:bg-red-950\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--ui-color-red-950) 30%, transparent)}}.ui\:dark\:bg-sky-950:where(.dark,.dark *){background-color:var(--ui-color-sky-950)}.ui\:dark\:bg-slate-950:where(.dark,.dark *){background-color:var(--ui-color-slate-950)}.ui\:dark\:bg-transparent:where(.dark,.dark *){background-color:#0000}.ui\:dark\:bg-zinc-700:where(.dark,.dark *){background-color:var(--ui-color-zinc-700)}.ui\:dark\:via-white\/80:where(.dark,.dark *){--tw-gradient-via:var(--ui-color-white)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:via-white\/80:where(.dark,.dark *){--tw-gradient-via:color-mix(in oklab, var(--ui-color-white) 80%, transparent)}}.ui\:dark\:via-white\/80:where(.dark,.dark *){--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.ui\:dark\:fill-amber-400:where(.dark,.dark *){fill:var(--ui-color-amber-400)}.ui\:dark\:text-amber-50:where(.dark,.dark *){color:var(--ui-color-amber-50)}.ui\:dark\:text-amber-300:where(.dark,.dark *){color:var(--ui-color-amber-300)}.ui\:dark\:text-amber-400:where(.dark,.dark *){color:var(--ui-color-amber-400)}.ui\:dark\:text-amber-500\/40:where(.dark,.dark *){color:var(--ui-color-amber-500)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:text-amber-500\/40:where(.dark,.dark *){color:color-mix(in oklab, var(--ui-color-amber-500) 40%, transparent)}}.ui\:dark\:text-amber-950:where(.dark,.dark *){color:var(--ui-color-amber-950)}.ui\:dark\:text-emerald-950:where(.dark,.dark *){color:var(--ui-color-emerald-950)}.ui\:dark\:text-gray-700:where(.dark,.dark *){color:var(--ui-color-gray-700)}.ui\:dark\:text-muted-foreground:where(.dark,.dark *){color:var(--muted-foreground)}.ui\:dark\:text-neutral-400\/50:where(.dark,.dark *){color:var(--ui-color-neutral-400)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:text-neutral-400\/50:where(.dark,.dark *){color:color-mix(in oklab, var(--ui-color-neutral-400) 50%, transparent)}}.ui\:dark\:text-sky-50:where(.dark,.dark *){color:var(--ui-color-sky-50)}.ui\:dark\:text-white:where(.dark,.dark *){color:var(--ui-color-white)}.ui\:dark\:\[--dot-field-glow\:\#0a0a0a\]:where(.dark,.dark *){--dot-field-glow:#0a0a0a}@media (hover:hover){.ui\:dark\:hover\:border-input:where(.dark,.dark *):hover{border-color:var(--input)}.ui\:dark\:hover\:bg-input\/50:where(.dark,.dark *):hover{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:hover\:bg-input\/50:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--input) 50%, transparent)}}}.ui\:dark\:focus-visible\:ring-destructive\/40:where(.dark,.dark *):focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:focus-visible\:ring-destructive\/40:where(.dark,.dark *):focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}:where([data-slot=tooltip-content]) .ui\:dark\:in-data-\[slot\=tooltip-content\]\:bg-background\/10:where(.dark,.dark *){background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){:where([data-slot=tooltip-content]) .ui\:dark\:in-data-\[slot\=tooltip-content\]\:bg-background\/10:where(.dark,.dark *){background-color:color-mix(in oklab, var(--background) 10%, transparent)}}.ui\:dark\:has-data-\[state\=checked\]\:bg-primary\/10:where(.dark,.dark *):has([data-state=checked]){background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:has-data-\[state\=checked\]\:bg-primary\/10:where(.dark,.dark *):has([data-state=checked]){background-color:color-mix(in oklab, var(--primary) 10%, transparent)}}.ui\:dark\:has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/40:where(.dark,.dark *):has([data-slot][aria-invalid=true]){--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/40:where(.dark,.dark *):has([data-slot][aria-invalid=true]){--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.ui\:dark\:aria-invalid\:ring-destructive\/40:where(.dark,.dark *)[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:aria-invalid\:ring-destructive\/40:where(.dark,.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.ui\:dark\:data-\[active\=true\]\:bg-primary\/20:where(.dark,.dark *)[data-active=true]{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:data-\[active\=true\]\:bg-primary\/20:where(.dark,.dark *)[data-active=true]{background-color:color-mix(in oklab, var(--primary) 20%, transparent)}}.ui\:dark\:data-\[state\=active\]\:border-input:where(.dark,.dark *)[data-state=active]{border-color:var(--input)}.ui\:dark\:data-\[state\=active\]\:bg-input\/30:where(.dark,.dark *)[data-state=active]{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:data-\[state\=active\]\:bg-input\/30:where(.dark,.dark *)[data-state=active]{background-color:color-mix(in oklab, var(--input) 30%, transparent)}}.ui\:dark\:data-\[state\=active\]\:text-foreground:where(.dark,.dark *)[data-state=active]{color:var(--foreground)}.ui\:dark\:data-\[state\=checked\]\:bg-primary:where(.dark,.dark *)[data-state=checked]{background-color:var(--primary)}.ui\:dark\:data-\[state\=checked\]\:bg-primary-foreground:where(.dark,.dark *)[data-state=checked]{background-color:var(--primary-foreground)}.ui\:dark\:data-\[state\=unchecked\]\:bg-foreground:where(.dark,.dark *)[data-state=unchecked]{background-color:var(--foreground)}.ui\:dark\:data-\[state\=unchecked\]\:bg-input\/80:where(.dark,.dark *)[data-state=unchecked]{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:data-\[state\=unchecked\]\:bg-input\/80:where(.dark,.dark *)[data-state=unchecked]{background-color:color-mix(in oklab, var(--input) 80%, transparent)}}.ui\:dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:where(.dark,.dark *)[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:where(.dark,.dark *)[data-variant=destructive]:focus{background-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.ui\:dark\:data-\[variant\=destructive\]\:data-highlighted\:bg-destructive\/20:where(.dark,.dark *)[data-variant=destructive][data-highlighted]{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:data-\[variant\=destructive\]\:data-highlighted\:bg-destructive\/20:where(.dark,.dark *)[data-variant=destructive][data-highlighted]{background-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.ui\:\[\&_\.lc-area-path\]\:opacity-100 .lc-area-path{opacity:1}.ui\:\[\&_\.lc-axis-tick\]\:stroke-0 .lc-axis-tick{stroke-width:0}.ui\:\[\&_\.lc-axis-tick-label\]\:fill-muted-foreground .lc-axis-tick-label{fill:var(--muted-foreground)}.ui\:\[\&_\.lc-axis-tick-label\]\:font-normal .lc-axis-tick-label{--tw-font-weight:var(--ui-font-weight-normal);font-weight:var(--ui-font-weight-normal)}.ui\:\[\&_\.lc-grid-x-radial-circle\]\:stroke-border .lc-grid-x-radial-circle,.ui\:\[\&_\.lc-grid-x-radial-line\]\:stroke-border .lc-grid-x-radial-line,.ui\:\[\&_\.lc-grid-y-radial-circle\]\:stroke-border .lc-grid-y-radial-circle,.ui\:\[\&_\.lc-grid-y-radial-line\]\:stroke-border .lc-grid-y-radial-line{stroke:var(--border)}.ui\:\[\&_\.lc-highlight-line\]\:stroke-0 .lc-highlight-line{stroke-width:0}.ui\:\[\&_\.lc-highlight-line\]\:opacity-100 .lc-highlight-line,.ui\:\[\&_\.lc-highlight-point\]\:opacity-100 .lc-highlight-point{opacity:1}.ui\:\[\&_\.lc-labels-text\:not\(\[fill\]\)\]\:fill-foreground .lc-labels-text:not([fill]){fill:var(--foreground)}.ui\:\[\&_\.lc-layout-svg-g\]\:fill-transparent .lc-layout-svg-g{fill:#0000}.ui\:\[\&_\.lc-legend-swatch\]\:size-2\.5 .lc-legend-swatch{width:calc(var(--ui-spacing) * 2.5);height:calc(var(--ui-spacing) * 2.5)}.ui\:\[\&_\.lc-legend-swatch\]\:rounded-\[2px\] .lc-legend-swatch{border-radius:2px}.ui\:\[\&_\.lc-legend-swatch-button\]\:items-center .lc-legend-swatch-button{align-items:center}.ui\:\[\&_\.lc-legend-swatch-button\]\:gap-1\.5 .lc-legend-swatch-button{gap:calc(var(--ui-spacing) * 1.5)}.ui\:\[\&_\.lc-legend-swatch-group\]\:items-center .lc-legend-swatch-group{align-items:center}.ui\:\[\&_\.lc-legend-swatch-group\]\:gap-4 .lc-legend-swatch-group{gap:calc(var(--ui-spacing) * 4)}.ui\:\[\&_\.lc-line\]\:stroke-border\/50 .lc-line{stroke:var(--border)}@supports (color:color-mix(in lab, red, red)){.ui\:\[\&_\.lc-line\]\:stroke-border\/50 .lc-line{stroke:color-mix(in oklab, var(--border) 50%, transparent)}}.ui\:\[\&_\.lc-root-container\]\:w-full .lc-root-container{width:100%}.ui\:\[\&_\.lc-rule-x-line\:not\(\.lc-grid-x-rule\)\]\:stroke-0 .lc-rule-x-line:not(.lc-grid-x-rule),.ui\:\[\&_\.lc-rule-y-line\:not\(\.lc-grid-y-rule\)\]\:stroke-0 .lc-rule-y-line:not(.lc-grid-y-rule){stroke-width:0}.ui\:\[\&_\.lc-spline-path\]\:opacity-100 .lc-spline-path{opacity:1}.ui\:\[\&_\.lc-text\]\:text-xs .lc-text{font-size:var(--ui-text-xs);line-height:var(--tw-leading,var(--ui-text-xs--line-height))}.ui\:\[\&_\.lc-text-svg\]\:overflow-visible .lc-text-svg{overflow:visible}.ui\:\[\&_\.lc-tooltip-rects-g\]\:fill-transparent .lc-tooltip-rects-g{fill:#0000}.ui\:\[\&_\.stroke-white\]\:stroke-transparent .stroke-white{stroke:#0000}.ui\:\[\&_\[data-command-group\]\:not\(\[hidden\]\)_\~\[data-command-group\]\]\:pt-0 [data-command-group]:not([hidden])~[data-command-group]{padding-top:calc(var(--ui-spacing) * 0)}.ui\:\[\&_\[data-command-input-wrapper\]_svg\]\:h-5 [data-command-input-wrapper] svg{height:calc(var(--ui-spacing) * 5)}.ui\:\[\&_\[data-command-input-wrapper\]_svg\]\:w-5 [data-command-input-wrapper] svg{width:calc(var(--ui-spacing) * 5)}.ui\:\[\&_\[data-command-item\]_svg\]\:h-5 [data-command-item] svg{height:calc(var(--ui-spacing) * 5)}.ui\:\[\&_\[data-command-item\]_svg\]\:w-5 [data-command-item] svg{width:calc(var(--ui-spacing) * 5)}.ui\:\[\&_\[data-slot\=empty-description\]\]\:text-\[var\(--landing-fg-muted\)\] [data-slot=empty-description]{color:var(--landing-fg-muted)}.ui\:\[\&_\[data-slot\=empty-title\]\]\:text-\[var\(--landing-fg\)\] [data-slot=empty-title]{color:var(--landing-fg)}.ui\:\[\&_img\]\:size-full img{width:100%;height:100%}.ui\:\[\&_img\]\:object-cover img{object-fit:cover}.ui\:\[\&_li\]\:mb-1 li{margin-bottom:calc(var(--ui-spacing) * 1)}.ui\:\[\&_p\]\:mb-2 p{margin-bottom:calc(var(--ui-spacing) * 2)}.ui\:\[\&_p\]\:leading-relaxed p{--tw-leading:var(--ui-leading-relaxed);line-height:var(--ui-leading-relaxed)}.ui\:\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.ui\:\[\&_svg\]\:size-8\! svg{width:calc(var(--ui-spacing) * 8)!important;height:calc(var(--ui-spacing) * 8)!important}.ui\:\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.ui\:\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*=size-]){width:calc(var(--ui-spacing) * 3);height:calc(var(--ui-spacing) * 3)}.ui\:\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--ui-spacing) * 4);height:calc(var(--ui-spacing) * 4)}.ui\:\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:var(--muted-foreground)}.ui\:\[\&_svg\:not\(\[class\*\=\'ui\:size-\'\]\)\]\:size-4 svg:not([class*=ui\:size-]){width:calc(var(--ui-spacing) * 4);height:calc(var(--ui-spacing) * 4)}.ui\:\[\&_svg\:not\(\[class\*\=\'ui\:size-\'\]\)\]\:size-6 svg:not([class*=ui\:size-]){width:calc(var(--ui-spacing) * 6);height:calc(var(--ui-spacing) * 6)}.ui\:\[\&_text\]\:stroke-transparent text{stroke:#0000}.ui\:\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ui\:\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.ui\:\[\&_ul\]\:list-disc ul{list-style-type:disc}.ui\:\[\&_ul\]\:pl-5 ul{padding-left:calc(var(--ui-spacing) * 5)}.ui\:\[\&\+\[data-slot\=item-content\]\]\:flex-none+[data-slot=item-content]{flex:none}.ui\:\[\&\:has\(\[data-slot\=dialog-footer\]\[data-sticky\=true\]\)\]\:pb-0:has([data-slot=dialog-footer][data-sticky=true]){padding-bottom:calc(var(--ui-spacing) * 0)}.ui\:\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--ui-spacing) * 0)}.ui\:\[\.border-b\]\:pb-3.border-b{padding-bottom:calc(var(--ui-spacing) * 3)}.ui\:\[\.border-b\]\:pb-6.border-b{padding-bottom:calc(var(--ui-spacing) * 6)}.ui\:\[\.border-t\]\:pt-3.border-t{padding-top:calc(var(--ui-spacing) * 3)}.ui\:\[\.border-t\]\:pt-6.border-t{padding-top:calc(var(--ui-spacing) * 6)}.ui\:\[a\]\:transition-colors:is(a){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(--ui-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ui-default-transition-duration))}@media (hover:hover){.ui\:\[a\]\:hover\:bg-accent\/50:is(a):hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.ui\:\[a\]\:hover\:bg-accent\/50:is(a):hover{background-color:color-mix(in oklab, var(--accent) 50%, transparent)}}}:is(.ui\:\*\:\[span\]\:last\:flex>*):is(span):last-child{display:flex}:is(.ui\:\*\:\[span\]\:last\:items-center>*):is(span):last-child{align-items:center}:is(.ui\:\*\:\[span\]\:last\:gap-2>*):is(span):last-child{gap:calc(var(--ui-spacing) * 2)}:is(.ui\:data-\[variant\=destructive\]\:\*\:\[svg\]\:text-destructive\![data-variant=destructive]>*):is(svg){color:var(--destructive)!important}.ui\:\[\&\>\*\]\:focus-visible\:relative>:focus-visible{position:relative}.ui\:\[\&\>\*\]\:focus-visible\:z-10>:focus-visible{z-index:10}@container field-group (min-width:28rem){.ui\:\@md\/field-group\:\[\&\>\*\]\:w-auto>*{width:auto}}.ui\:\[\&\>\*\:not\(\:first-child\)\]\:rounded-s-none>:not(:first-child){border-start-start-radius:0;border-end-start-radius:0}.ui\:\[\&\>\*\:not\(\:first-child\)\]\:rounded-t-none>:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.ui\:\[\&\>\*\:not\(\:first-child\)\]\:border-s-0>:not(:first-child){border-inline-start-style:var(--tw-border-style);border-inline-start-width:0}.ui\:\[\&\>\*\:not\(\:first-child\)\]\:border-t-0>:not(:first-child){border-top-style:var(--tw-border-style);border-top-width:0}.ui\:\[\&\>\*\:not\(\:last-child\)\]\:rounded-e-none>:not(:last-child){border-start-end-radius:0;border-end-end-radius:0}.ui\:\[\&\>\*\:not\(\:last-child\)\]\:rounded-b-none>:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0}.ui\:\[\&\>\[data-slot\=field-label\]\]\:flex-auto>[data-slot=field-label]{flex:auto}@container field-group (min-width:28rem){.ui\:\@md\/field-group\:\[\&\>\[data-slot\=field-label\]\]\:flex-auto>[data-slot=field-label]{flex:auto}}.ui\:has-\[select\[aria-hidden\=true\]\:last-child\]\:\[\&\>\[data-slot\=select-trigger\]\:last-of-type\]\:rounded-e-md:has(:is(select[aria-hidden=true]:last-child))>[data-slot=select-trigger]:last-of-type{border-start-end-radius:calc(var(--radius) - 2px);border-end-end-radius:calc(var(--radius) - 2px)}.ui\:\[\&\>\[data-slot\=select-trigger\]\:not\(\[class\*\=\'ui\:w-\'\]\)\]\:w-fit>[data-slot=select-trigger]:not([class*=ui\:w-]){width:fit-content}.ui\:has-\[\>\[data-slot\=field-content\]\]\:\[\&\>\[role\=checkbox\]\,\[role\=radio\]\]\:mt-px:has(>[data-slot=field-content])>[role=checkbox],.ui\:has-\[\>\[data-slot\=field-content\]\]\:\[\&\>\[role\=checkbox\]\,\[role\=radio\]\]\:mt-px:has(>[data-slot=field-content]) [role=radio]{margin-top:1px}@container field-group (min-width:28rem){.ui\:\@md\/field-group\:has-\[\>\[data-slot\=field-content\]\]\:\[\&\>\[role\=checkbox\]\,\[role\=radio\]\]\:mt-px:has(>[data-slot=field-content])>[role=checkbox],.ui\:\@md\/field-group\:has-\[\>\[data-slot\=field-content\]\]\:\[\&\>\[role\=checkbox\]\,\[role\=radio\]\]\:mt-px:has(>[data-slot=field-content]) [role=radio]{margin-top:1px}}.ui\:\[\&\>a\]\:underline>a{text-decoration-line:underline}.ui\:\[\&\>a\]\:underline-offset-4>a{text-underline-offset:4px}.ui\:\[\&\>a\:hover\]\:text-primary>a:hover{color:var(--primary)}.ui\:\[\&\>button\]\:hidden>button{display:none}.ui\:\[\&\>input\]\:flex-1>input{flex:1}.ui\:has-\[\>\[data-align\=block-end\]\]\:\[\&\>input\]\:pt-3:has(>[data-align=block-end])>input{padding-top:calc(var(--ui-spacing) * 3)}.ui\:has-\[\>\[data-align\=block-start\]\]\:\[\&\>input\]\:pb-3:has(>[data-align=block-start])>input{padding-bottom:calc(var(--ui-spacing) * 3)}.ui\:has-\[\>\[data-align\=inline-end\]\]\:\[\&\>input\]\:pe-2:has(>[data-align=inline-end])>input{padding-inline-end:calc(var(--ui-spacing) * 2)}.ui\:has-\[\>\[data-align\=inline-start\]\]\:\[\&\>input\]\:ps-2:has(>[data-align=inline-start])>input{padding-inline-start:calc(var(--ui-spacing) * 2)}.ui\:\[\&\>kbd\]\:rounded-\[calc\(var\(--radius\)-5px\)\]>kbd{border-radius:calc(var(--radius) - 5px)}.ui\:\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ui\:\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.ui\:\[\&\>svg\]\:size-2\.5>svg{width:calc(var(--ui-spacing) * 2.5);height:calc(var(--ui-spacing) * 2.5)}.ui\:\[\&\>svg\]\:size-3>svg{width:calc(var(--ui-spacing) * 3);height:calc(var(--ui-spacing) * 3)}.ui\:\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--ui-spacing) * 3.5);height:calc(var(--ui-spacing) * 3.5)}.ui\:\[\&\>svg\]\:size-4>svg{width:calc(var(--ui-spacing) * 4);height:calc(var(--ui-spacing) * 4)}.ui\:\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.ui\:\[\&\>svg\]\:translate-y-0\.5>svg{--tw-translate-y:calc(var(--ui-spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:\[\&\>svg\]\:text-current>svg{color:currentColor}.ui\:\[\&\>svg\]\:text-muted-foreground>svg{color:var(--muted-foreground)}.ui\:\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:var(--sidebar-accent-foreground)}.ui\:data-\[active\=true\]\:\[\&\>svg\]\:text-primary[data-active=true]>svg{color:var(--primary)}.ui\:\[\&\>svg\:not\(\[class\*\=\'ui\:size-\'\]\)\]\:size-3\.5>svg:not([class*=ui\:size-]){width:calc(var(--ui-spacing) * 3.5);height:calc(var(--ui-spacing) * 3.5)}.ui\:\[\&\>svg\:not\(\[class\*\=\'ui\:size-\'\]\)\]\:size-4>svg:not([class*=ui\:size-]){width:calc(var(--ui-spacing) * 4);height:calc(var(--ui-spacing) * 4)}@media (hover:hover){:is(.ui\:hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover,.ui\:hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover>svelte-css-wrapper)>th,:is(.ui\:hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover,.ui\:hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover>svelte-css-wrapper) td{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){:is(.ui\:hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover,.ui\:hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover>svelte-css-wrapper)>th,:is(.ui\:hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover,.ui\:hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover>svelte-css-wrapper) td{background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}}.ui\:\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.ui\:\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}.ui\:\[\&\[for\]\]\:cursor-pointer[for]{cursor:pointer}[data-side=left][data-collapsible=offcanvas] .ui\:\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--ui-spacing) * -2)}[data-side=left][data-state=collapsed] .ui\:\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .ui\:\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--ui-spacing) * -2)}[data-side=right][data-state=collapsed] .ui\:\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-variant=legend]+.ui\:\[\[data-variant\=legend\]\+\&\]\:-mt-1\.5{margin-top:calc(var(--ui-spacing) * -1.5)}@media (hover:hover){a.ui\:\[a\&\]\:hover\:bg-accent:hover{background-color:var(--accent)}a.ui\:\[a\&\]\:hover\:bg-amber-600\/90:hover{background-color:var(--ui-color-amber-600)}@supports (color:color-mix(in lab, red, red)){a.ui\:\[a\&\]\:hover\:bg-amber-600\/90:hover{background-color:color-mix(in oklab, var(--ui-color-amber-600) 90%, transparent)}}a.ui\:\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){a.ui\:\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab, var(--destructive) 90%, transparent)}}a.ui\:\[a\&\]\:hover\:bg-emerald-600\/90:hover{background-color:var(--ui-color-emerald-600)}@supports (color:color-mix(in lab, red, red)){a.ui\:\[a\&\]\:hover\:bg-emerald-600\/90:hover{background-color:color-mix(in oklab, var(--ui-color-emerald-600) 90%, transparent)}}a.ui\:\[a\&\]\:hover\:bg-primary\/30:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){a.ui\:\[a\&\]\:hover\:bg-primary\/30:hover{background-color:color-mix(in oklab, var(--primary) 30%, transparent)}}a.ui\:\[a\&\]\:hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){a.ui\:\[a\&\]\:hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, var(--primary) 90%, transparent)}}a.ui\:\[a\&\]\:hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){a.ui\:\[a\&\]\:hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab, var(--secondary) 80%, transparent)}}a.ui\:\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){a.ui\:\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:color-mix(in oklab, var(--secondary) 90%, transparent)}}a.ui\:\[a\&\]\:hover\:text-accent-foreground:hover{color:var(--accent-foreground)}a.ui\:\[a\&\]\:hover\:text-primary:hover{color:var(--primary)}a.ui\:\[a\&\]\:hover\:underline:hover{text-decoration-line:underline}a.ui\:dark\:\[a\&\]\:hover\:bg-accent\/50:where(.dark,.dark *):hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){a.ui\:dark\:\[a\&\]\:hover\:bg-accent\/50:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--accent) 50%, transparent)}}}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}@keyframes border-beam{to{offset-distance:100%}}@keyframes meteor{0%{opacity:1;transform:rotate(215deg)translate(0)}70%{opacity:1}to{opacity:0;transform:rotate(215deg)translate(-500px)}}@keyframes shimmer-marketing{0%,90%,to{background-position:calc(-100% - var(--shimmer-width)) 0}30%,60%{background-position:calc(100% + var(--shimmer-width)) 0}}@keyframes spin-around{0%{transform:translateZ(0)rotate(0)}15%,35%{transform:translateZ(0)rotate(90deg)}65%,85%{transform:translateZ(0)rotate(270deg)}to{transform:translateZ(0)rotate(360deg)}}@keyframes magicslide{to{transform:translate(calc(100cqw - 100%))}}:root{--background:oklch(100% 0 0);--foreground:oklch(14.5% 0 0);--card:oklch(100% 0 0);--card-foreground:oklch(14.5% 0 0);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.5% 0 0);--primary:oklch(48.8% .243 264.376);--primary-foreground:oklch(97% .014 254.604);--secondary:oklch(96.7% .001 286.375);--secondary-foreground:oklch(21% .006 285.885);--muted:oklch(97% 0 0);--muted-foreground:oklch(55.6% 0 0);--accent:oklch(97% 0 0);--accent-foreground:oklch(20.5% 0 0);--destructive:oklch(57.7% .245 27.325);--border:oklch(92.2% 0 0);--input:oklch(92.2% 0 0);--ring:oklch(70.8% 0 0);--chart-1:oklch(80.9% .105 251.813);--chart-2:oklch(62.3% .214 259.815);--chart-3:oklch(54.6% .245 262.881);--chart-4:oklch(48.8% .243 264.376);--chart-5:oklch(42.4% .199 265.638);--radius:.625rem;--sidebar:oklch(98.5% 0 0);--sidebar-foreground:oklch(14.5% 0 0);--sidebar-primary:oklch(54.6% .245 262.881);--sidebar-primary-foreground:oklch(97% .014 254.604);--sidebar-accent:oklch(97% 0 0);--sidebar-accent-foreground:oklch(20.5% 0 0);--sidebar-border:oklch(92.2% 0 0);--sidebar-ring:oklch(70.8% 0 0)}.dark{--background:oklch(14.5% 0 0);--foreground:oklch(98.5% 0 0);--card:oklch(20.5% 0 0);--card-foreground:oklch(98.5% 0 0);--popover:oklch(20.5% 0 0);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(42.4% .199 265.638);--primary-foreground:oklch(97% .014 254.604);--secondary:oklch(27.4% .006 286.033);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(26.9% 0 0);--muted-foreground:oklch(70.8% 0 0);--accent:oklch(26.9% 0 0);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.6% 0 0);--chart-1:oklch(80.9% .105 251.813);--chart-2:oklch(62.3% .214 259.815);--chart-3:oklch(54.6% .245 262.881);--chart-4:oklch(48.8% .243 264.376);--chart-5:oklch(42.4% .199 265.638);--sidebar:oklch(20.5% 0 0);--sidebar-foreground:oklch(98.5% 0 0);--sidebar-primary:oklch(62.3% .214 259.815);--sidebar-primary-foreground:oklch(97% .014 254.604);--sidebar-accent:oklch(26.9% 0 0);--sidebar-accent-foreground:oklch(98.5% 0 0);--sidebar-border:oklch(100% 0 0/.1);--sidebar-ring:oklch(55.6% 0 0)}@property --border-angle{syntax:"";inherits:false;initial-value:0deg}@keyframes border{to{--border-angle:360deg}}@keyframes flip{to{transform:rotate(360deg)}}@keyframes kitrotate{to{transform:rotate(90deg)}}@keyframes shine{0%{background-position:0 0}to{background-position:-200% 0}}.animate-gradient-border{background:linear-gradient(45deg, white, white) padding-box, conic-gradient(from var(--border-angle), #94a3b84d 75%, var(--primary,#1d4ee2) 82%, var(--primary-foreground,white) 88%, var(--primary,#1d4ee2) 92%, #94a3b84d 100%) border-box;border:1px solid #0000;transition:--border-angle 3s ease-in-out}.animate-gradient-border:hover{animation:4s ease-in-out infinite border}.dark.animate-gradient-border{background:linear-gradient(45deg, #000, #000) padding-box, conic-gradient(from var(--border-angle), #4755697a 75%, var(--primary,#1d4ee2) 82%, var(--primary-foreground,black) 88%, var(--primary,#1d4ee2) 92%, #4755697a 100%) border-box}@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-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,var(--ngp-accordion-content-height,auto)))))}}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,var(--ngp-accordion-content-height,auto)))))}to{height:0}} \ No newline at end of file +@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-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-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial;--tw-ease:initial;--tw-content:"";--tw-outline-style:solid;--tw-animation-delay:0s;--tw-animation-direction:normal;--tw-animation-duration:initial;--tw-animation-fill-mode:none;--tw-animation-iteration-count:1;--tw-enter-blur:0;--tw-enter-opacity:1;--tw-enter-rotate:0;--tw-enter-scale:1;--tw-enter-translate-x:0;--tw-enter-translate-y:0;--tw-exit-blur:0;--tw-exit-opacity:1;--tw-exit-rotate:0;--tw-exit-scale:1;--tw-exit-translate-x:0;--tw-exit-translate-y:0;--border-angle:0deg}}}@layer theme{:root,:host{--ui-font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--ui-font-serif:ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--ui-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--ui-color-red-50:oklch(97.1% .013 17.38);--ui-color-red-500:oklch(63.7% .237 25.331);--ui-color-red-600:oklch(57.7% .245 27.325);--ui-color-red-700:oklch(50.5% .213 27.518);--ui-color-red-950:oklch(25.8% .092 26.042);--ui-color-orange-500:oklch(70.5% .213 47.604);--ui-color-amber-50:oklch(98.7% .022 95.277);--ui-color-amber-200:oklch(92.4% .12 95.746);--ui-color-amber-300:oklch(87.9% .169 91.605);--ui-color-amber-400:oklch(82.8% .189 84.429);--ui-color-amber-500:oklch(76.9% .188 70.08);--ui-color-amber-600:oklch(66.6% .179 58.318);--ui-color-amber-900:oklch(41.4% .112 45.904);--ui-color-amber-950:oklch(27.9% .077 45.635);--ui-color-yellow-500:oklch(79.5% .184 86.047);--ui-color-green-500:oklch(72.3% .219 149.579);--ui-color-green-600:oklch(62.7% .194 149.214);--ui-color-emerald-50:oklch(97.9% .021 166.113);--ui-color-emerald-300:oklch(84.5% .143 164.978);--ui-color-emerald-400:oklch(76.5% .177 163.223);--ui-color-emerald-500:oklch(69.6% .17 162.48);--ui-color-emerald-600:oklch(59.6% .145 163.225);--ui-color-emerald-700:oklch(50.8% .118 165.612);--ui-color-emerald-950:oklch(26.2% .051 172.552);--ui-color-sky-50:oklch(97.7% .013 236.62);--ui-color-sky-200:oklch(90.1% .058 230.902);--ui-color-sky-900:oklch(39.1% .09 240.876);--ui-color-sky-950:oklch(29.3% .066 243.157);--ui-color-blue-600:oklch(54.6% .245 262.881);--ui-color-violet-500:oklch(60.6% .25 292.717);--ui-color-pink-500:oklch(65.6% .241 354.308);--ui-color-rose-500:oklch(64.5% .246 16.439);--ui-color-slate-500:oklch(55.4% .046 257.417);--ui-color-slate-800:oklch(27.9% .041 260.031);--ui-color-slate-950:oklch(12.9% .042 264.695);--ui-color-gray-200:oklch(92.8% .006 264.531);--ui-color-gray-700:oklch(37.3% .034 259.733);--ui-color-zinc-100:oklch(96.7% .001 286.375);--ui-color-zinc-300:oklch(87.1% .006 286.286);--ui-color-zinc-400:oklch(70.5% .015 286.067);--ui-color-zinc-700:oklch(37% .013 285.805);--ui-color-zinc-800:oklch(27.4% .006 286.033);--ui-color-neutral-100:oklch(97% 0 0);--ui-color-neutral-400:oklch(70.8% 0 0);--ui-color-neutral-600:oklch(43.9% 0 0);--ui-color-neutral-800:oklch(26.9% 0 0);--ui-color-neutral-900:oklch(20.5% 0 0);--ui-color-black:#000;--ui-color-white:#fff;--ui-spacing:.25rem;--ui-container-xs:20rem;--ui-container-sm:24rem;--ui-container-md:28rem;--ui-container-lg:32rem;--ui-container-xl:36rem;--ui-container-2xl:42rem;--ui-container-3xl:48rem;--ui-container-4xl:56rem;--ui-container-5xl:64rem;--ui-container-7xl:80rem;--ui-text-xs:.75rem;--ui-text-xs--line-height:calc(1 / .75);--ui-text-sm:.875rem;--ui-text-sm--line-height:calc(1.25 / .875);--ui-text-base:1rem;--ui-text-base--line-height:calc(1.5 / 1);--ui-text-lg:1.125rem;--ui-text-lg--line-height:calc(1.75 / 1.125);--ui-text-xl:1.25rem;--ui-text-xl--line-height:calc(1.75 / 1.25);--ui-text-2xl:1.5rem;--ui-text-2xl--line-height:calc(2 / 1.5);--ui-text-3xl:1.875rem;--ui-text-3xl--line-height:calc(2.25 / 1.875);--ui-text-4xl:2.25rem;--ui-text-4xl--line-height:calc(2.5 / 2.25);--ui-text-5xl:3rem;--ui-text-5xl--line-height:1;--ui-text-6xl:3.75rem;--ui-text-6xl--line-height:1;--ui-text-7xl:4.5rem;--ui-text-7xl--line-height:1;--ui-font-weight-light:300;--ui-font-weight-normal:400;--ui-font-weight-medium:500;--ui-font-weight-semibold:600;--ui-font-weight-bold:700;--ui-font-weight-extrabold:800;--ui-font-weight-black:900;--ui-tracking-tighter:-.05em;--ui-tracking-tight:-.025em;--ui-tracking-wide:.025em;--ui-tracking-wider:.05em;--ui-tracking-widest:.1em;--ui-leading-tight:1.25;--ui-leading-snug:1.375;--ui-leading-normal:1.5;--ui-leading-relaxed:1.625;--ui-radius-xs:.125rem;--ui-radius-2xl:1rem;--ui-radius-3xl:1.5rem;--ui-drop-shadow-sm:0 1px 2px #00000026;--ui-ease-out:cubic-bezier(0, 0, .2, 1);--ui-ease-in-out:cubic-bezier(.4, 0, .2, 1);--ui-animate-spin:spin 1s linear infinite;--ui-animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--ui-blur-sm:8px;--ui-blur-md:12px;--ui-blur-xl:24px;--ui-blur-2xl:40px;--ui-blur-3xl:64px;--ui-aspect-video:16 / 9;--ui-default-transition-duration:.15s;--ui-default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--ui-default-mono-font-family:var(--ui-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(--font-cio,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--ui-default-font-feature-settings,normal);font-variation-settings:var(--ui-default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--ui-default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--ui-default-mono-font-feature-settings,normal);font-variation-settings:var(--ui-default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){*{outline-color:color-mix(in oklab, var(--ring) 50%, transparent)}}body{background-color:var(--background);font-family:var(--font-sans);color:var(--foreground)}button,input,select,optgroup,textarea{font-family:var(--font-sans)}::file-selector-button{font-family:var(--font-sans)}.toaster{--normal-bg:var(--color-popover);--normal-text:var(--color-popover-foreground);--normal-border:var(--color-border)}}@layer components{.cio-marketing-border-beam{pointer-events:none;border-radius:inherit;border:calc(var(--border-width) * 1px) solid transparent;-webkit-mask-composite:source-in;-webkit-mask-source-type:auto,auto;position:absolute;inset:0;-webkit-mask-image:linear-gradient(#0000,#0000),linear-gradient(#fff,#fff);mask-image:linear-gradient(#0000,#0000),linear-gradient(#fff,#fff);-webkit-mask-position:0 0,0 0;mask-position:0 0,0 0;-webkit-mask-size:auto,auto;mask-size:auto,auto;-webkit-mask-repeat:repeat,repeat;mask-repeat:repeat,repeat;-webkit-mask-clip:padding-box,border-box;mask-clip:padding-box,border-box;-webkit-mask-origin:border-box,border-box;mask-origin:border-box,border-box;-webkit-mask-composite:source-in;mask-composite:intersect;-webkit-mask-source-type:auto,auto;mask-mode:match-source,match-source}.cio-marketing-border-beam:after{content:"";aspect-ratio:1;width:calc(var(--size) * 1px);animation-delay:var(--delay);background:linear-gradient(to left, var(--color-from), var(--color-to), transparent);offset-anchor:calc(var(--anchor) * 1%) 50%;offset-path:rect(0 auto auto 0 round calc(var(--size) * 1px));animation:border-beam calc(var(--duration) * 1s) infinite linear;position:absolute}}@layer utilities{.ui\:\@container\/field-group{container:field-group/inline-size}.ui\:\@container{container-type:inline-size}.ui\:\@container-\[size\]{container-type:size}.ui\:pointer-events-none{pointer-events:none}.ui\:sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.ui\:absolute{position:absolute}.ui\:fixed{position:fixed}.ui\:relative{position:relative}.ui\:sticky{position:sticky}.ui\:-inset-full{inset:-100%}.ui\:-inset-px{inset:-1px}.ui\:inset-\(--cut\){inset:var(--cut)}.ui\:inset-0{inset:calc(var(--ui-spacing) * 0)}.ui\:inset-x-0{inset-inline:calc(var(--ui-spacing) * 0)}.ui\:inset-x-\[-10\%\]{inset-inline:-10%}.ui\:inset-y-0{inset-block:calc(var(--ui-spacing) * 0)}.ui\:start-0{inset-inline-start:calc(var(--ui-spacing) * 0)}.ui\:end-4{inset-inline-end:calc(var(--ui-spacing) * 4)}.ui\:-top-2{top:calc(var(--ui-spacing) * -2)}.ui\:-top-3{top:calc(var(--ui-spacing) * -3)}.ui\:-top-16{top:calc(var(--ui-spacing) * -16)}.ui\:-top-20{top:calc(var(--ui-spacing) * -20)}.ui\:-top-32{top:calc(var(--ui-spacing) * -32)}.ui\:top-0{top:calc(var(--ui-spacing) * 0)}.ui\:top-1\.5{top:calc(var(--ui-spacing) * 1.5)}.ui\:top-1\/2{top:50%}.ui\:top-2{top:calc(var(--ui-spacing) * 2)}.ui\:top-3{top:calc(var(--ui-spacing) * 3)}.ui\:top-3\.5{top:calc(var(--ui-spacing) * 3.5)}.ui\:top-4{top:calc(var(--ui-spacing) * 4)}.ui\:top-11{top:calc(var(--ui-spacing) * 11)}.ui\:top-12{top:calc(var(--ui-spacing) * 12)}.ui\:top-\[-12px\]{top:-12px}.ui\:top-\[6px\]{top:6px}.ui\:top-\[50\%\]{top:50%}.ui\:top-\[60\%\]{top:60%}.ui\:top-full{top:100%}.ui\:top-px{top:1px}.ui\:-right-4{right:calc(var(--ui-spacing) * -4)}.ui\:right-0{right:calc(var(--ui-spacing) * 0)}.ui\:right-1{right:calc(var(--ui-spacing) * 1)}.ui\:right-2{right:calc(var(--ui-spacing) * 2)}.ui\:right-3{right:calc(var(--ui-spacing) * 3)}.ui\:right-3\.5{right:calc(var(--ui-spacing) * 3.5)}.ui\:right-4{right:calc(var(--ui-spacing) * 4)}.ui\:right-9{right:calc(var(--ui-spacing) * 9)}.ui\:right-\[-10\%\]{right:-10%}.ui\:right-\[-12px\]{right:-12px}.ui\:-bottom-px{bottom:-1px}.ui\:bottom-0{bottom:calc(var(--ui-spacing) * 0)}.ui\:bottom-2{bottom:calc(var(--ui-spacing) * 2)}.ui\:bottom-3{bottom:calc(var(--ui-spacing) * 3)}.ui\:bottom-3\.5{bottom:calc(var(--ui-spacing) * 3.5)}.ui\:bottom-4{bottom:calc(var(--ui-spacing) * 4)}.ui\:bottom-\[-50\%\]{bottom:-50%}.ui\:bottom-\[-220px\]{bottom:-220px}.ui\:bottom-full{bottom:100%}.ui\:-left-24{left:calc(var(--ui-spacing) * -24)}.ui\:left-0{left:calc(var(--ui-spacing) * 0)}.ui\:left-1\/2{left:50%}.ui\:left-2{left:calc(var(--ui-spacing) * 2)}.ui\:left-3{left:calc(var(--ui-spacing) * 3)}.ui\:left-3\.5{left:calc(var(--ui-spacing) * 3.5)}.ui\:left-\[50\%\]{left:50%}.ui\:left-\[calc\(50\%-3rem\)\]{left:calc(50% - 3rem)}.ui\:left-auto{left:auto}.ui\:left-full{left:100%}.ui\:isolate{isolation:isolate}.ui\:-z-10{z-index:calc(10 * -1)}.ui\:-z-20{z-index:calc(20 * -1)}.ui\:-z-30{z-index:calc(30 * -1)}.ui\:z-0{z-index:0}.ui\:z-1{z-index:1}.ui\:z-10{z-index:10}.ui\:z-20{z-index:20}.ui\:z-30{z-index:30}.ui\:z-40{z-index:40}.ui\:z-50{z-index:50}.ui\:z-999{z-index:999}.ui\:z-\[1\]{z-index:1}.ui\:z-\[110\]{z-index:110}.ui\:z-app-bar{z-index:100}.ui\:z-app-bar\!{z-index:100!important}.ui\:z-app-bar-elevated{z-index:150}.ui\:z-app-bar-elevated\!{z-index:150!important}.ui\:z-menu-elevated{z-index:250}.ui\:z-menu-elevated\!{z-index:250!important}.ui\:z-modal{z-index:200}.ui\:z-modal\!{z-index:200!important}.ui\:order-first{order:-9999}.ui\:order-last{order:9999}.ui\:col-start-2{grid-column-start:2}.ui\:row-span-2{grid-row:span 2/span 2}.ui\:row-start-1{grid-row-start:1}.ui\:m-0{margin:calc(var(--ui-spacing) * 0)}.ui\:m-0\!{margin:calc(var(--ui-spacing) * 0)!important}.ui\:-mx-1{margin-inline:calc(var(--ui-spacing) * -1)}.ui\:-mx-6{margin-inline:calc(var(--ui-spacing) * -6)}.ui\:-mx-\[2\.5px\]{margin-inline:-2.5px}.ui\:-mx-\[2px\]{margin-inline:-2px}.ui\:mx-0\.5{margin-inline:calc(var(--ui-spacing) * .5)}.ui\:mx-2{margin-inline:calc(var(--ui-spacing) * 2)}.ui\:mx-4{margin-inline:calc(var(--ui-spacing) * 4)}.ui\:mx-5{margin-inline:calc(var(--ui-spacing) * 5)}.ui\:mx-auto{margin-inline:auto}.ui\:my-0{margin-block:calc(var(--ui-spacing) * 0)}.ui\:my-0\.5{margin-block:calc(var(--ui-spacing) * .5)}.ui\:my-1{margin-block:calc(var(--ui-spacing) * 1)}.ui\:my-2{margin-block:calc(var(--ui-spacing) * 2)}.ui\:my-3{margin-block:calc(var(--ui-spacing) * 3)}.ui\:my-4{margin-block:calc(var(--ui-spacing) * 4)}.ui\:my-10{margin-block:calc(var(--ui-spacing) * 10)}.ui\:ms-1{margin-inline-start:calc(var(--ui-spacing) * 1)}.ui\:ms-4{margin-inline-start:calc(var(--ui-spacing) * 4)}.ui\:-mt-1{margin-top:calc(var(--ui-spacing) * -1)}.ui\:mt-0\.5{margin-top:calc(var(--ui-spacing) * .5)}.ui\:mt-1{margin-top:calc(var(--ui-spacing) * 1)}.ui\:mt-1\.5{margin-top:calc(var(--ui-spacing) * 1.5)}.ui\:mt-2{margin-top:calc(var(--ui-spacing) * 2)}.ui\:mt-2\.5{margin-top:calc(var(--ui-spacing) * 2.5)}.ui\:mt-3{margin-top:calc(var(--ui-spacing) * 3)}.ui\:mt-4{margin-top:calc(var(--ui-spacing) * 4)}.ui\:mt-6{margin-top:calc(var(--ui-spacing) * 6)}.ui\:mt-7{margin-top:calc(var(--ui-spacing) * 7)}.ui\:mt-8{margin-top:calc(var(--ui-spacing) * 8)}.ui\:mt-9{margin-top:calc(var(--ui-spacing) * 9)}.ui\:mt-10{margin-top:calc(var(--ui-spacing) * 10)}.ui\:mt-12{margin-top:calc(var(--ui-spacing) * 12)}.ui\:mt-14{margin-top:calc(var(--ui-spacing) * 14)}.ui\:mt-16{margin-top:calc(var(--ui-spacing) * 16)}.ui\:mt-auto{margin-top:auto}.ui\:mr-1{margin-right:calc(var(--ui-spacing) * 1)}.ui\:mr-2{margin-right:calc(var(--ui-spacing) * 2)}.ui\:-mb-6{margin-bottom:calc(var(--ui-spacing) * -6)}.ui\:mb-1{margin-bottom:calc(var(--ui-spacing) * 1)}.ui\:mb-1\.5{margin-bottom:calc(var(--ui-spacing) * 1.5)}.ui\:mb-2{margin-bottom:calc(var(--ui-spacing) * 2)}.ui\:mb-2\.5{margin-bottom:calc(var(--ui-spacing) * 2.5)}.ui\:mb-3{margin-bottom:calc(var(--ui-spacing) * 3)}.ui\:mb-4{margin-bottom:calc(var(--ui-spacing) * 4)}.ui\:mb-5{margin-bottom:calc(var(--ui-spacing) * 5)}.ui\:mb-6{margin-bottom:calc(var(--ui-spacing) * 6)}.ui\:mb-7{margin-bottom:calc(var(--ui-spacing) * 7)}.ui\:mb-8{margin-bottom:calc(var(--ui-spacing) * 8)}.ui\:mb-9{margin-bottom:calc(var(--ui-spacing) * 9)}.ui\:mb-10{margin-bottom:calc(var(--ui-spacing) * 10)}.ui\:mb-12{margin-bottom:calc(var(--ui-spacing) * 12)}.ui\:mb-14{margin-bottom:calc(var(--ui-spacing) * 14)}.ui\:mb-16{margin-bottom:calc(var(--ui-spacing) * 16)}.ui\:ml-1{margin-left:calc(var(--ui-spacing) * 1)}.ui\:ml-2{margin-left:calc(var(--ui-spacing) * 2)}.ui\:ml-2\.5{margin-left:calc(var(--ui-spacing) * 2.5)}.ui\:ml-auto{margin-left:auto}.ui\:box-border{box-sizing:border-box}.ui\:line-clamp-1{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.ui\:line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.ui\:line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.ui\:block{display:block}.ui\:flex{display:flex}.ui\:grid{display:grid}.ui\:hidden{display:none}.ui\:inline-block{display:inline-block}.ui\:inline-flex{display:inline-flex}.ui\:field-sizing-content{field-sizing:content}.ui\:aspect-\[1\],.ui\:aspect-square{aspect-ratio:1}.ui\:aspect-video{aspect-ratio:var(--ui-aspect-video)}.ui\:\!size-6{width:calc(var(--ui-spacing) * 6)!important;height:calc(var(--ui-spacing) * 6)!important}.ui\:size-1{width:calc(var(--ui-spacing) * 1);height:calc(var(--ui-spacing) * 1)}.ui\:size-1\.5{width:calc(var(--ui-spacing) * 1.5);height:calc(var(--ui-spacing) * 1.5)}.ui\:size-2{width:calc(var(--ui-spacing) * 2);height:calc(var(--ui-spacing) * 2)}.ui\:size-2\.5{width:calc(var(--ui-spacing) * 2.5);height:calc(var(--ui-spacing) * 2.5)}.ui\:size-3{width:calc(var(--ui-spacing) * 3);height:calc(var(--ui-spacing) * 3)}.ui\:size-3\.5{width:calc(var(--ui-spacing) * 3.5);height:calc(var(--ui-spacing) * 3.5)}.ui\:size-4{width:calc(var(--ui-spacing) * 4);height:calc(var(--ui-spacing) * 4)}.ui\:size-5{width:calc(var(--ui-spacing) * 5);height:calc(var(--ui-spacing) * 5)}.ui\:size-6{width:calc(var(--ui-spacing) * 6);height:calc(var(--ui-spacing) * 6)}.ui\:size-7{width:calc(var(--ui-spacing) * 7);height:calc(var(--ui-spacing) * 7)}.ui\:size-8{width:calc(var(--ui-spacing) * 8);height:calc(var(--ui-spacing) * 8)}.ui\:size-9{width:calc(var(--ui-spacing) * 9);height:calc(var(--ui-spacing) * 9)}.ui\:size-10{width:calc(var(--ui-spacing) * 10);height:calc(var(--ui-spacing) * 10)}.ui\:size-11{width:calc(var(--ui-spacing) * 11);height:calc(var(--ui-spacing) * 11)}.ui\:size-12{width:calc(var(--ui-spacing) * 12);height:calc(var(--ui-spacing) * 12)}.ui\:size-14{width:calc(var(--ui-spacing) * 14);height:calc(var(--ui-spacing) * 14)}.ui\:size-14\!{width:calc(var(--ui-spacing) * 14)!important;height:calc(var(--ui-spacing) * 14)!important}.ui\:size-16{width:calc(var(--ui-spacing) * 16);height:calc(var(--ui-spacing) * 16)}.ui\:size-20{width:calc(var(--ui-spacing) * 20);height:calc(var(--ui-spacing) * 20)}.ui\:size-24{width:calc(var(--ui-spacing) * 24);height:calc(var(--ui-spacing) * 24)}.ui\:size-28{width:calc(var(--ui-spacing) * 28);height:calc(var(--ui-spacing) * 28)}.ui\:size-32{width:calc(var(--ui-spacing) * 32);height:calc(var(--ui-spacing) * 32)}.ui\:size-\[2\.4px\]{width:2.4px;height:2.4px}.ui\:size-\[11px\]{width:11px;height:11px}.ui\:size-\[22px\]{width:22px;height:22px}.ui\:size-\[640px\]{width:640px;height:640px}.ui\:size-\[800px\]{width:800px;height:800px}.ui\:size-fit{width:fit-content;height:fit-content}.ui\:size-full{width:100%;height:100%}.ui\:h-\(--bits-navigation-menu-viewport-height\){height:var(--bits-navigation-menu-viewport-height)}.ui\:h-\(--bits-select-anchor-height\){height:var(--bits-select-anchor-height)}.ui\:h-0{height:calc(var(--ui-spacing) * 0)}.ui\:h-0\.5{height:calc(var(--ui-spacing) * .5)}.ui\:h-0\.5\!{height:calc(var(--ui-spacing) * .5)!important}.ui\:h-1{height:calc(var(--ui-spacing) * 1)}.ui\:h-1\.5{height:calc(var(--ui-spacing) * 1.5)}.ui\:h-2{height:calc(var(--ui-spacing) * 2)}.ui\:h-2\.5{height:calc(var(--ui-spacing) * 2.5)}.ui\:h-3{height:calc(var(--ui-spacing) * 3)}.ui\:h-4{height:calc(var(--ui-spacing) * 4)}.ui\:h-5{height:calc(var(--ui-spacing) * 5)}.ui\:h-6{height:calc(var(--ui-spacing) * 6)}.ui\:h-7{height:calc(var(--ui-spacing) * 7)}.ui\:h-8{height:calc(var(--ui-spacing) * 8)}.ui\:h-9{height:calc(var(--ui-spacing) * 9)}.ui\:h-10{height:calc(var(--ui-spacing) * 10)}.ui\:h-12{height:calc(var(--ui-spacing) * 12)}.ui\:h-14{height:calc(var(--ui-spacing) * 14)}.ui\:h-16{height:calc(var(--ui-spacing) * 16)}.ui\:h-20{height:calc(var(--ui-spacing) * 20)}.ui\:h-24{height:calc(var(--ui-spacing) * 24)}.ui\:h-28{height:calc(var(--ui-spacing) * 28)}.ui\:h-40{height:calc(var(--ui-spacing) * 40)}.ui\:h-48{height:calc(var(--ui-spacing) * 48)}.ui\:h-50\!{height:calc(var(--ui-spacing) * 50)!important}.ui\:h-96{height:calc(var(--ui-spacing) * 96)}.ui\:h-128{height:calc(var(--ui-spacing) * 128)}.ui\:h-\[1\.2rem\]{height:1.2rem}.ui\:h-\[1\.15rem\]{height:1.15rem}.ui\:h-\[6px\]{height:6px}.ui\:h-\[10px\]{height:10px}.ui\:h-\[14px\]{height:14px}.ui\:h-\[22px\]{height:22px}.ui\:h-\[70px\]{height:70px}.ui\:h-\[72px\]{height:72px}.ui\:h-\[100cqh\]{height:100cqh}.ui\:h-\[168px\]{height:168px}.ui\:h-\[180px\]{height:180px}.ui\:h-\[200px\]{height:200px}.ui\:h-\[280px\]{height:280px}.ui\:h-\[380px\]{height:380px}.ui\:h-\[420px\]{height:420px}.ui\:h-\[440px\]{height:440px}.ui\:h-\[460px\]{height:460px}.ui\:h-\[500px\]{height:500px}.ui\:h-\[520px\]{height:520px}.ui\:h-\[680px\]{height:680px}.ui\:h-\[calc\(100\%-1px\)\]{height:calc(100% - 1px)}.ui\:h-\[calc\(100\%-3px\)\]{height:calc(100% - 3px)}.ui\:h-\[calc\(100dvh-3rem\)\]{height:calc(100dvh - 3rem)}.ui\:h-auto{height:auto}.ui\:h-fit{height:fit-content}.ui\:h-fit\!{height:fit-content!important}.ui\:h-full{height:100%}.ui\:h-px{height:1px}.ui\:h-screen{height:100vh}.ui\:max-h-\(--bits-dropdown-menu-content-available-height\){max-height:var(--bits-dropdown-menu-content-available-height)}.ui\:max-h-\(--bits-select-content-available-height\){max-height:var(--bits-select-content-available-height)}.ui\:max-h-32{max-height:calc(var(--ui-spacing) * 32)}.ui\:max-h-52{max-height:calc(var(--ui-spacing) * 52)}.ui\:max-h-60{max-height:calc(var(--ui-spacing) * 60)}.ui\:max-h-64{max-height:calc(var(--ui-spacing) * 64)}.ui\:max-h-72{max-height:calc(var(--ui-spacing) * 72)}.ui\:max-h-80{max-height:calc(var(--ui-spacing) * 80)}.ui\:max-h-90{max-height:calc(var(--ui-spacing) * 90)}.ui\:max-h-96{max-height:calc(var(--ui-spacing) * 96)}.ui\:max-h-\[85vh\]{max-height:85vh}.ui\:max-h-\[300px\]{max-height:300px}.ui\:max-h-svh{max-height:100svh}.ui\:min-h-0{min-height:calc(var(--ui-spacing) * 0)}.ui\:min-h-4{min-height:calc(var(--ui-spacing) * 4)}.ui\:min-h-8{min-height:calc(var(--ui-spacing) * 8)}.ui\:min-h-14{min-height:calc(var(--ui-spacing) * 14)}.ui\:min-h-16{min-height:calc(var(--ui-spacing) * 16)}.ui\:min-h-40{min-height:calc(var(--ui-spacing) * 40)}.ui\:min-h-96{min-height:calc(var(--ui-spacing) * 96)}.ui\:min-h-\[32rem\]{min-height:32rem}.ui\:min-h-\[44px\]{min-height:44px}.ui\:min-h-\[63px\]{min-height:63px}.ui\:min-h-\[240px\]{min-height:240px}.ui\:min-h-\[320px\]{min-height:320px}.ui\:min-h-\[calc\(100dvh-3rem\)\]{min-height:calc(100dvh - 3rem)}.ui\:min-h-\[calc\(100vh-48px\)\]{min-height:calc(100vh - 48px)}.ui\:min-h-dvh{min-height:100dvh}.ui\:min-h-screen{min-height:100vh}.ui\:w-\(--sidebar-width\){width:var(--sidebar-width)}.ui\:w-0{width:calc(var(--ui-spacing) * 0)}.ui\:w-1{width:calc(var(--ui-spacing) * 1)}.ui\:w-1\.5{width:calc(var(--ui-spacing) * 1.5)}.ui\:w-1\/4{width:25%}.ui\:w-2{width:calc(var(--ui-spacing) * 2)}.ui\:w-2\.5{width:calc(var(--ui-spacing) * 2.5)}.ui\:w-2\/4{width:50%}.ui\:w-3\/4{width:75%}.ui\:w-4{width:calc(var(--ui-spacing) * 4)}.ui\:w-5{width:calc(var(--ui-spacing) * 5)}.ui\:w-6{width:calc(var(--ui-spacing) * 6)}.ui\:w-7{width:calc(var(--ui-spacing) * 7)}.ui\:w-8{width:calc(var(--ui-spacing) * 8)}.ui\:w-10{width:calc(var(--ui-spacing) * 10)}.ui\:w-14{width:calc(var(--ui-spacing) * 14)}.ui\:w-16{width:calc(var(--ui-spacing) * 16)}.ui\:w-20{width:calc(var(--ui-spacing) * 20)}.ui\:w-24{width:calc(var(--ui-spacing) * 24)}.ui\:w-28{width:calc(var(--ui-spacing) * 28)}.ui\:w-40{width:calc(var(--ui-spacing) * 40)}.ui\:w-48{width:calc(var(--ui-spacing) * 48)}.ui\:w-52{width:calc(var(--ui-spacing) * 52)}.ui\:w-64{width:calc(var(--ui-spacing) * 64)}.ui\:w-72{width:calc(var(--ui-spacing) * 72)}.ui\:w-88{width:calc(var(--ui-spacing) * 88)}.ui\:w-96{width:calc(var(--ui-spacing) * 96)}.ui\:w-\[1\.2rem\]{width:1.2rem}.ui\:w-\[10px\]{width:10px}.ui\:w-\[25px\]{width:25px}.ui\:w-\[50px\]{width:50px}.ui\:w-\[80\%\]{width:80%}.ui\:w-\[84\%\]{width:84%}.ui\:w-\[100px\]{width:100px}.ui\:w-\[260px\]{width:260px}.ui\:w-\[420px\]{width:420px}.ui\:w-\[520px\]{width:520px}.ui\:w-auto{width:auto}.ui\:w-fit{width:fit-content}.ui\:w-fit\!{width:fit-content!important}.ui\:w-full{width:100%}.ui\:w-full\!{width:100%!important}.ui\:w-max{width:max-content}.ui\:w-px{width:1px}.ui\:w-screen{width:100vw}.ui\:max-w-\(--skeleton-width\){max-width:var(--skeleton-width)}.ui\:max-w-2xl{max-width:var(--ui-container-2xl)}.ui\:max-w-3xl{max-width:var(--ui-container-3xl)}.ui\:max-w-4xl{max-width:var(--ui-container-4xl)}.ui\:max-w-5xl{max-width:var(--ui-container-5xl)}.ui\:max-w-6{max-width:calc(var(--ui-spacing) * 6)}.ui\:max-w-7xl{max-width:var(--ui-container-7xl)}.ui\:max-w-40{max-width:calc(var(--ui-spacing) * 40)}.ui\:max-w-80{max-width:calc(var(--ui-spacing) * 80)}.ui\:max-w-\[16rem\]{max-width:16rem}.ui\:max-w-\[18ch\]{max-width:18ch}.ui\:max-w-\[20ch\]{max-width:20ch}.ui\:max-w-\[55vw\]{max-width:55vw}.ui\:max-w-\[60\%\]{max-width:60%}.ui\:max-w-\[200px\]{max-width:200px}.ui\:max-w-\[240px\]{max-width:240px}.ui\:max-w-\[260px\]{max-width:260px}.ui\:max-w-\[280px\]{max-width:280px}.ui\:max-w-\[300px\]{max-width:300px}.ui\:max-w-\[320px\]{max-width:320px}.ui\:max-w-\[480px\]{max-width:480px}.ui\:max-w-\[520px\]{max-width:520px}.ui\:max-w-\[600px\]{max-width:600px}.ui\:max-w-\[640px\]{max-width:640px}.ui\:max-w-\[700px\]{max-width:700px}.ui\:max-w-\[820px\]{max-width:820px}.ui\:max-w-\[880px\]{max-width:880px}.ui\:max-w-\[1080px\]{max-width:1080px}.ui\:max-w-\[1100px\]{max-width:1100px}.ui\:max-w-\[1120px\]{max-width:1120px}.ui\:max-w-\[1180px\]{max-width:1180px}.ui\:max-w-\[1200px\]{max-width:1200px}.ui\:max-w-\[1240px\]{max-width:1240px}.ui\:max-w-\[1280px\]{max-width:1280px}.ui\:max-w-\[1320px\]{max-width:1320px}.ui\:max-w-\[calc\(100\%-2rem\)\]{max-width:calc(100% - 2rem)}.ui\:max-w-full{max-width:100%}.ui\:max-w-max{max-width:max-content}.ui\:max-w-md{max-width:var(--ui-container-md)}.ui\:max-w-none{max-width:none}.ui\:max-w-sm{max-width:var(--ui-container-sm)}.ui\:max-w-xl{max-width:var(--ui-container-xl)}.ui\:max-w-xs{max-width:var(--ui-container-xs)}.ui\:min-w-\(--bits-select-anchor-width\){min-width:var(--bits-select-anchor-width)}.ui\:min-w-0{min-width:calc(var(--ui-spacing) * 0)}.ui\:min-w-5{min-width:calc(var(--ui-spacing) * 5)}.ui\:min-w-7{min-width:calc(var(--ui-spacing) * 7)}.ui\:min-w-8{min-width:calc(var(--ui-spacing) * 8)}.ui\:min-w-9{min-width:calc(var(--ui-spacing) * 9)}.ui\:min-w-10{min-width:calc(var(--ui-spacing) * 10)}.ui\:min-w-18{min-width:calc(var(--ui-spacing) * 18)}.ui\:min-w-32{min-width:calc(var(--ui-spacing) * 32)}.ui\:min-w-48{min-width:calc(var(--ui-spacing) * 48)}.ui\:min-w-\[3ch\]{min-width:3ch}.ui\:min-w-\[5rem\]{min-width:5rem}.ui\:min-w-\[9rem\]{min-width:9rem}.ui\:min-w-\[min\(24rem\,calc\(100vw-5rem\)\)\]{min-width:min(24rem,100vw - 5rem)}.ui\:min-w-full{min-width:100%}.ui\:flex-1{flex:1}.ui\:flex-shrink-0{flex-shrink:0}.ui\:shrink{flex-shrink:1}.ui\:shrink-0{flex-shrink:0}.ui\:basis-full{flex-basis:100%}.ui\:origin-\(--bits-dropdown-menu-content-transform-origin\){transform-origin:var(--bits-dropdown-menu-content-transform-origin)}.ui\:origin-\(--bits-menubar-content-transform-origin\){transform-origin:var(--bits-menubar-content-transform-origin)}.ui\:origin-\(--bits-popover-content-transform-origin\){transform-origin:var(--bits-popover-content-transform-origin)}.ui\:origin-\(--bits-select-content-transform-origin\){transform-origin:var(--bits-select-content-transform-origin)}.ui\:origin-\(--bits-tooltip-content-transform-origin\){transform-origin:var(--bits-tooltip-content-transform-origin)}.ui\:origin-center{transform-origin:50%}.ui\:-translate-x-0{--tw-translate-x:calc(var(--ui-spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:-translate-x-full{--tw-translate-x:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:-translate-x-px{--tw-translate-x:-1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:translate-x-3{--tw-translate-x:calc(var(--ui-spacing) * 3);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:translate-x-4{--tw-translate-x:calc(var(--ui-spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:translate-x-\[-50\%\]{--tw-translate-x:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:translate-x-px{--tw-translate-x:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:-translate-y-full{--tw-translate-y:-100%;translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:translate-y-0\.5{--tw-translate-y:calc(var(--ui-spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:translate-y-3{--tw-translate-y:calc(var(--ui-spacing) * 3);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:translate-y-4{--tw-translate-y:calc(var(--ui-spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:translate-y-\[-50\%\]{--tw-translate-y:-50%;translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:\[translate\:0_0\]{translate:0}.ui\:scale-0{--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x) var(--tw-scale-y)}.ui\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.ui\:-rotate-90{rotate:-90deg}.ui\:rotate-0{rotate:none}.ui\:rotate-5{rotate:5deg}.ui\:rotate-45{rotate:45deg}.ui\:rotate-90{rotate:90deg}.ui\:\[transform\:scaleX\(-1\)\]{transform:scaleX(-1)}.ui\:transform-gpu{transform:translateZ(0) var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.ui\:animate-in{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ui\:animate-magicslide{animation:magicslide var(--speed) ease-in-out infinite alternate}.ui\:animate-meteor{animation:5s linear infinite meteor}.ui\:animate-pulse{animation:var(--ui-animate-pulse)}.ui\:animate-shine{animation:2s linear infinite shine}.ui\:animate-spin{animation:var(--ui-animate-spin)}.ui\:animate-spin-around{animation:spin-around calc(var(--speed) * 2) infinite linear}.ui\:cursor-auto{cursor:auto}.ui\:cursor-col-resize{cursor:col-resize}.ui\:cursor-default{cursor:default}.ui\:cursor-default\!{cursor:default!important}.ui\:cursor-grab{cursor:grab}.ui\:cursor-not-allowed{cursor:not-allowed}.ui\:cursor-pointer{cursor:pointer}.ui\:cursor-text{cursor:text}.ui\:resize-none{resize:none}.ui\:scroll-my-1{scroll-margin-block:calc(var(--ui-spacing) * 1)}.ui\:scroll-py-1{scroll-padding-block:calc(var(--ui-spacing) * 1)}.ui\:list-disc{list-style-type:disc}.ui\:list-none{list-style-type:none}.ui\:auto-rows-min{grid-auto-rows:min-content}.ui\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.ui\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.ui\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.ui\:grid-cols-\[0_1fr\]{grid-template-columns:0 1fr}.ui\:grid-cols-\[1fr_auto_1fr\]{grid-template-columns:1fr auto 1fr}.ui\:grid-cols-\[6px_6px\]{grid-template-columns:6px 6px}.ui\:grid-rows-\[auto_auto\]{grid-template-rows:auto auto}.ui\:flex-col{flex-direction:column}.ui\:flex-col-reverse{flex-direction:column-reverse}.ui\:flex-row{flex-direction:row}.ui\:flex-nowrap\!{flex-wrap:nowrap!important}.ui\:flex-wrap{flex-wrap:wrap}.ui\:place-content-between{place-content:space-between}.ui\:place-content-center{place-content:center}.ui\:place-items-center{place-items:center}.ui\:items-baseline{align-items:baseline}.ui\:items-center{align-items:center}.ui\:items-end{align-items:flex-end}.ui\:items-start{align-items:flex-start}.ui\:items-stretch{align-items:stretch}.ui\:justify-around{justify-content:space-around}.ui\:justify-between{justify-content:space-between}.ui\:justify-center{justify-content:center}.ui\:justify-end{justify-content:flex-end}.ui\:justify-start{justify-content:flex-start}.ui\:justify-start\!{justify-content:flex-start!important}.ui\:justify-items-center{justify-items:center}.ui\:justify-items-start{justify-items:start}.ui\:gap-0{gap:calc(var(--ui-spacing) * 0)}.ui\:gap-0\.5{gap:calc(var(--ui-spacing) * .5)}.ui\:gap-1{gap:calc(var(--ui-spacing) * 1)}.ui\:gap-1\.5{gap:calc(var(--ui-spacing) * 1.5)}.ui\:gap-2{gap:calc(var(--ui-spacing) * 2)}.ui\:gap-2\.5{gap:calc(var(--ui-spacing) * 2.5)}.ui\:gap-3{gap:calc(var(--ui-spacing) * 3)}.ui\:gap-4{gap:calc(var(--ui-spacing) * 4)}.ui\:gap-5{gap:calc(var(--ui-spacing) * 5)}.ui\:gap-6{gap:calc(var(--ui-spacing) * 6)}.ui\:gap-7{gap:calc(var(--ui-spacing) * 7)}.ui\:gap-8{gap:calc(var(--ui-spacing) * 8)}.ui\:gap-10{gap:calc(var(--ui-spacing) * 10)}.ui\:gap-12{gap:calc(var(--ui-spacing) * 12)}.ui\:gap-16{gap:calc(var(--ui-spacing) * 16)}.ui\:gap-20{gap:calc(var(--ui-spacing) * 20)}.ui\:gap-\[1px\]{gap:1px}.ui\:gap-\[14px\]{gap:14px}.ui\:gap-px{gap:1px}:where(.ui\:space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ui-spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ui-spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.ui\:space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ui-spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ui-spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.ui\:space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ui-spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ui-spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.ui\:space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ui-spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ui-spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.ui\:space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ui-spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ui-spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.ui\:space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--ui-spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--ui-spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.ui\:gap-x-3{column-gap:calc(var(--ui-spacing) * 3)}.ui\:gap-x-4{column-gap:calc(var(--ui-spacing) * 4)}.ui\:gap-x-5{column-gap:calc(var(--ui-spacing) * 5)}.ui\:gap-x-6{column-gap:calc(var(--ui-spacing) * 6)}.ui\:gap-x-8{column-gap:calc(var(--ui-spacing) * 8)}:where(.ui\:space-x-1>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--ui-spacing) * 1) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--ui-spacing) * 1) * calc(1 - var(--tw-space-x-reverse)))}:where(.ui\:space-x-8>:not(:last-child)){--tw-space-x-reverse:0;margin-inline-start:calc(calc(var(--ui-spacing) * 8) * var(--tw-space-x-reverse));margin-inline-end:calc(calc(var(--ui-spacing) * 8) * calc(1 - var(--tw-space-x-reverse)))}.ui\:gap-y-0\.5{row-gap:calc(var(--ui-spacing) * .5)}.ui\:gap-y-1{row-gap:calc(var(--ui-spacing) * 1)}.ui\:gap-y-2{row-gap:calc(var(--ui-spacing) * 2)}.ui\:gap-y-10{row-gap:calc(var(--ui-spacing) * 10)}.ui\:gap-y-12{row-gap:calc(var(--ui-spacing) * 12)}.ui\:place-self-end{place-self:end}.ui\:self-center{align-self:center}.ui\:self-start{align-self:flex-start}.ui\:self-stretch{align-self:stretch}.ui\:justify-self-center{justify-self:center}.ui\:justify-self-end{justify-self:flex-end}.ui\:truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ui\:overflow-auto{overflow:auto}.ui\:overflow-hidden{overflow:hidden}.ui\:overflow-visible{overflow:visible}.ui\:overflow-x-auto{overflow-x:auto}.ui\:overflow-x-hidden{overflow-x:hidden}.ui\:overflow-y-auto{overflow-y:auto}.ui\:overflow-y-hidden{overflow-y:hidden}.ui\:scroll-smooth{scroll-behavior:smooth}.ui\:\[border-radius\:9999px\]{border-radius:9999px}.ui\:\[border-radius\:var\(--landing-radius-card\)\]{border-radius:var(--landing-radius-card)}.ui\:\[border-radius\:var\(--landing-radius-pill\)\]{border-radius:var(--landing-radius-pill)}.ui\:rounded{border-radius:.25rem}.ui\:rounded-\(--radius\){border-radius:var(--radius)}.ui\:rounded-2xl{border-radius:var(--ui-radius-2xl)}.ui\:rounded-3xl{border-radius:var(--ui-radius-3xl)}.ui\:rounded-\[2px\]{border-radius:2px}.ui\:rounded-\[3px\]{border-radius:3px}.ui\:rounded-\[4px\]{border-radius:4px}.ui\:rounded-\[10px\]{border-radius:10px}.ui\:rounded-\[14px\]{border-radius:14px}.ui\:rounded-\[20px\]{border-radius:20px}.ui\:rounded-\[calc\(var\(--radius\)-5px\)\]{border-radius:calc(var(--radius) - 5px)}.ui\:rounded-full{border-radius:3.40282e38px}.ui\:rounded-lg{border-radius:var(--radius)}.ui\:rounded-md{border-radius:calc(var(--radius) - 2px)}.ui\:rounded-md\!{border-radius:calc(var(--radius) - 2px)!important}.ui\:rounded-none{border-radius:0}.ui\:rounded-sm{border-radius:calc(var(--radius) - 4px)}.ui\:rounded-xl{border-radius:calc(var(--radius) + 4px)}.ui\:rounded-xs{border-radius:var(--ui-radius-xs)}.ui\:rounded-t-md{border-top-left-radius:calc(var(--radius) - 2px);border-top-right-radius:calc(var(--radius) - 2px)}.ui\:rounded-t-xl{border-top-left-radius:calc(var(--radius) + 4px);border-top-right-radius:calc(var(--radius) + 4px)}.ui\:border{border-style:var(--tw-border-style);border-width:1px}.ui\:border-0{border-style:var(--tw-border-style);border-width:0}.ui\:border-0\!{border-style:var(--tw-border-style)!important;border-width:0!important}.ui\:border-2{border-style:var(--tw-border-style);border-width:2px}.ui\:border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.ui\:border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.ui\:border-x-0{border-inline-style:var(--tw-border-style);border-inline-width:0}.ui\:border-y{border-block-style:var(--tw-border-style);border-block-width:1px}.ui\:border-y-\[10px\]{border-block-style:var(--tw-border-style);border-block-width:10px}.ui\:border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.ui\:border-t-2{border-top-style:var(--tw-border-style);border-top-width:2px}.ui\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.ui\:border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ui\:border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.ui\:border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.ui\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.ui\:border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.ui\:border-l-\[16px\]{border-left-style:var(--tw-border-style);border-left-width:16px}.ui\:border-dashed{--tw-border-style:dashed;border-style:dashed}.ui\:border-none{--tw-border-style:none;border-style:none}.ui\:border-solid{--tw-border-style:solid;border-style:solid}.ui\:border-\(--color-border\){border-color:var(--color-border)}.ui\:border-\[\#1c1f28\]{border-color:#1c1f28}.ui\:border-\[\#262a35\]{border-color:#262a35}.ui\:border-\[\#d9d8d0\]{border-color:#d9d8d0}.ui\:border-\[var\(--landing-accent\)\]{border-color:var(--landing-accent)}.ui\:border-\[var\(--landing-accent-fg\)\],.ui\:border-\[var\(--landing-accent-fg\)\]\/15{border-color:var(--landing-accent-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:border-\[var\(--landing-accent-fg\)\]\/15{border-color:color-mix(in oklab, var(--landing-accent-fg) 15%, transparent)}}.ui\:border-\[var\(--landing-accent-fg\)\]\/20{border-color:var(--landing-accent-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:border-\[var\(--landing-accent-fg\)\]\/20{border-color:color-mix(in oklab, var(--landing-accent-fg) 20%, transparent)}}.ui\:border-\[var\(--landing-bg\)\]\/15{border-color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:border-\[var\(--landing-bg\)\]\/15{border-color:color-mix(in oklab, var(--landing-bg) 15%, transparent)}}.ui\:border-\[var\(--landing-bg\)\]\/40{border-color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:border-\[var\(--landing-bg\)\]\/40{border-color:color-mix(in oklab, var(--landing-bg) 40%, transparent)}}.ui\:border-\[var\(--landing-border\)\],.ui\:border-\[var\(--landing-border\)\]\/40{border-color:var(--landing-border)}@supports (color:color-mix(in lab, red, red)){.ui\:border-\[var\(--landing-border\)\]\/40{border-color:color-mix(in oklab, var(--landing-border) 40%, transparent)}}.ui\:border-\[var\(--landing-border\)\]\/50{border-color:var(--landing-border)}@supports (color:color-mix(in lab, red, red)){.ui\:border-\[var\(--landing-border\)\]\/50{border-color:color-mix(in oklab, var(--landing-border) 50%, transparent)}}.ui\:border-\[var\(--landing-border\)\]\/60{border-color:var(--landing-border)}@supports (color:color-mix(in lab, red, red)){.ui\:border-\[var\(--landing-border\)\]\/60{border-color:color-mix(in oklab, var(--landing-border) 60%, transparent)}}.ui\:border-\[var\(--landing-border-soft\)\]{border-color:var(--landing-border-soft)}.ui\:border-\[var\(--landing-button-secondary-border\)\]{border-color:var(--landing-button-secondary-border)}.ui\:border-\[var\(--landing-fg\)\]{border-color:var(--landing-fg)}.ui\:border-amber-200{border-color:var(--ui-color-amber-200)}.ui\:border-amber-400{border-color:var(--ui-color-amber-400)}.ui\:border-black{border-color:var(--ui-color-black)}.ui\:border-border,.ui\:border-border\/50{border-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.ui\:border-border\/50{border-color:color-mix(in oklab, var(--border) 50%, transparent)}}.ui\:border-emerald-300{border-color:var(--ui-color-emerald-300)}.ui\:border-emerald-400{border-color:var(--ui-color-emerald-400)}.ui\:border-emerald-500{border-color:var(--ui-color-emerald-500)}.ui\:border-input{border-color:var(--input)}.ui\:border-muted{border-color:var(--muted)}.ui\:border-muted-foreground,.ui\:border-muted-foreground\/40{border-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.ui\:border-muted-foreground\/40{border-color:color-mix(in oklab, var(--muted-foreground) 40%, transparent)}}.ui\:border-neutral-400{border-color:var(--ui-color-neutral-400)}.ui\:border-neutral-800{border-color:var(--ui-color-neutral-800)}.ui\:border-primary,.ui\:border-primary\/30{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:border-primary\/30{border-color:color-mix(in oklab, var(--primary) 30%, transparent)}}.ui\:border-primary\/40{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:border-primary\/40{border-color:color-mix(in oklab, var(--primary) 40%, transparent)}}.ui\:border-primary\/50{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:border-primary\/50{border-color:color-mix(in oklab, var(--primary) 50%, transparent)}}.ui\:border-red-500{border-color:var(--ui-color-red-500)}.ui\:border-sidebar-border{border-color:var(--sidebar-border)}.ui\:border-sky-200{border-color:var(--ui-color-sky-200)}.ui\:border-transparent{border-color:#0000}.ui\:border-white,.ui\:border-white\/10{border-color:var(--ui-color-white)}@supports (color:color-mix(in lab, red, red)){.ui\:border-white\/10{border-color:color-mix(in oklab, var(--ui-color-white) 10%, transparent)}}.ui\:border-zinc-300{border-color:var(--ui-color-zinc-300)}.ui\:border-zinc-400{border-color:var(--ui-color-zinc-400)}.ui\:border-y-transparent{border-block-color:#0000}.ui\:border-l-current{border-left-color:currentColor}.ui\:border-l-foreground{border-left-color:var(--foreground)}.ui\:border-l-transparent{border-left-color:#0000}.ui\:bg-\(--color-bg\){background-color:var(--color-bg)}.ui\:bg-\[\#0f1218\]{background-color:#0f1218}.ui\:bg-\[\#1a1a1a\]{background-color:#1a1a1a}.ui\:bg-\[\#06070a\]{background-color:#06070a}.ui\:bg-\[\#e2e1d9\]{background-color:#e2e1d9}.ui\:bg-\[\#ebeae3\]{background-color:#ebeae3}.ui\:bg-\[\#ecebe5\]{background-color:#ecebe5}.ui\:bg-\[\#f4f3ed\]{background-color:#f4f3ed}.ui\:bg-\[\#f4f5f7\]{background-color:#f4f5f7}.ui\:bg-\[\#fafaf5\]{background-color:#fafaf5}.ui\:bg-\[var\(--landing-accent\)\],.ui\:bg-\[var\(--landing-accent\)\]\/5{background-color:var(--landing-accent)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-accent\)\]\/5{background-color:color-mix(in oklab, var(--landing-accent) 5%, transparent)}}.ui\:bg-\[var\(--landing-accent\)\]\/10{background-color:var(--landing-accent)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-accent\)\]\/10{background-color:color-mix(in oklab, var(--landing-accent) 10%, transparent)}}.ui\:bg-\[var\(--landing-accent\)\]\/60{background-color:var(--landing-accent)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-accent\)\]\/60{background-color:color-mix(in oklab, var(--landing-accent) 60%, transparent)}}.ui\:bg-\[var\(--landing-accent\)\]\/70{background-color:var(--landing-accent)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-accent\)\]\/70{background-color:color-mix(in oklab, var(--landing-accent) 70%, transparent)}}.ui\:bg-\[var\(--landing-accent-fg\)\],.ui\:bg-\[var\(--landing-accent-fg\)\]\/10{background-color:var(--landing-accent-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-accent-fg\)\]\/10{background-color:color-mix(in oklab, var(--landing-accent-fg) 10%, transparent)}}.ui\:bg-\[var\(--landing-accent-fg\)\]\/15{background-color:var(--landing-accent-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-accent-fg\)\]\/15{background-color:color-mix(in oklab, var(--landing-accent-fg) 15%, transparent)}}.ui\:bg-\[var\(--landing-bg\)\],.ui\:bg-\[var\(--landing-bg\)\]\/5{background-color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-bg\)\]\/5{background-color:color-mix(in oklab, var(--landing-bg) 5%, transparent)}}.ui\:bg-\[var\(--landing-bg\)\]\/30{background-color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-bg\)\]\/30{background-color:color-mix(in oklab, var(--landing-bg) 30%, transparent)}}.ui\:bg-\[var\(--landing-bg\)\]\/75{background-color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-bg\)\]\/75{background-color:color-mix(in oklab, var(--landing-bg) 75%, transparent)}}.ui\:bg-\[var\(--landing-bg\)\]\/85{background-color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-bg\)\]\/85{background-color:color-mix(in oklab, var(--landing-bg) 85%, transparent)}}.ui\:bg-\[var\(--landing-bg\)\]\/90{background-color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-bg\)\]\/90{background-color:color-mix(in oklab, var(--landing-bg) 90%, transparent)}}.ui\:bg-\[var\(--landing-bg\)\]\/95{background-color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-bg\)\]\/95{background-color:color-mix(in oklab, var(--landing-bg) 95%, transparent)}}.ui\:bg-\[var\(--landing-bg-section\)\]{background-color:var(--landing-bg-section)}.ui\:bg-\[var\(--landing-border\)\]{background-color:var(--landing-border)}.ui\:bg-\[var\(--landing-button-primary-bg\)\]{background-color:var(--landing-button-primary-bg)}.ui\:bg-\[var\(--landing-button-secondary-bg\)\]{background-color:var(--landing-button-secondary-bg)}.ui\:bg-\[var\(--landing-card\)\],.ui\:bg-\[var\(--landing-card\)\]\/70{background-color:var(--landing-card)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-card\)\]\/70{background-color:color-mix(in oklab, var(--landing-card) 70%, transparent)}}.ui\:bg-\[var\(--landing-card-soft\)\],.ui\:bg-\[var\(--landing-card-soft\)\]\/30{background-color:var(--landing-card-soft)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-card-soft\)\]\/30{background-color:color-mix(in oklab, var(--landing-card-soft) 30%, transparent)}}.ui\:bg-\[var\(--landing-card-soft\)\]\/40{background-color:var(--landing-card-soft)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-card-soft\)\]\/40{background-color:color-mix(in oklab, var(--landing-card-soft) 40%, transparent)}}.ui\:bg-\[var\(--landing-card-soft\)\]\/50{background-color:var(--landing-card-soft)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-card-soft\)\]\/50{background-color:color-mix(in oklab, var(--landing-card-soft) 50%, transparent)}}.ui\:bg-\[var\(--landing-card-soft\)\]\/60{background-color:var(--landing-card-soft)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-\[var\(--landing-card-soft\)\]\/60{background-color:color-mix(in oklab, var(--landing-card-soft) 60%, transparent)}}.ui\:bg-\[var\(--landing-fg\)\]{background-color:var(--landing-fg)}.ui\:bg-accent{background-color:var(--accent)}.ui\:bg-amber-50,.ui\:bg-amber-50\/30{background-color:var(--ui-color-amber-50)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-amber-50\/30{background-color:color-mix(in oklab, var(--ui-color-amber-50) 30%, transparent)}}.ui\:bg-amber-500{background-color:var(--ui-color-amber-500)}.ui\:bg-amber-500\!{background-color:var(--ui-color-amber-500)!important}.ui\:bg-amber-600{background-color:var(--ui-color-amber-600)}.ui\:bg-background,.ui\:bg-background\/50{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-background\/50{background-color:color-mix(in oklab, var(--background) 50%, transparent)}}.ui\:bg-background\/90{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-background\/90{background-color:color-mix(in oklab, var(--background) 90%, transparent)}}.ui\:bg-background\/95{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-background\/95{background-color:color-mix(in oklab, var(--background) 95%, transparent)}}.ui\:bg-black,.ui\:bg-black\/10{background-color:var(--ui-color-black)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-black\/10{background-color:color-mix(in oklab, var(--ui-color-black) 10%, transparent)}}.ui\:bg-black\/40{background-color:var(--ui-color-black)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-black\/40{background-color:color-mix(in oklab, var(--ui-color-black) 40%, transparent)}}.ui\:bg-black\/50{background-color:var(--ui-color-black)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-black\/50{background-color:color-mix(in oklab, var(--ui-color-black) 50%, transparent)}}.ui\:bg-blue-600{background-color:var(--ui-color-blue-600)}.ui\:bg-blue-600\!{background-color:var(--ui-color-blue-600)!important}.ui\:bg-border{background-color:var(--border)}.ui\:bg-card,.ui\:bg-card\/95{background-color:var(--card)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-card\/95{background-color:color-mix(in oklab, var(--card) 95%, transparent)}}.ui\:bg-current{background-color:currentColor}.ui\:bg-destructive{background-color:var(--destructive)}.ui\:bg-emerald-50\/20{background-color:var(--ui-color-emerald-50)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-emerald-50\/20{background-color:color-mix(in oklab, var(--ui-color-emerald-50) 20%, transparent)}}.ui\:bg-emerald-50\/30{background-color:var(--ui-color-emerald-50)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-emerald-50\/30{background-color:color-mix(in oklab, var(--ui-color-emerald-50) 30%, transparent)}}.ui\:bg-emerald-50\/40{background-color:var(--ui-color-emerald-50)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-emerald-50\/40{background-color:color-mix(in oklab, var(--ui-color-emerald-50) 40%, transparent)}}.ui\:bg-emerald-500{background-color:var(--ui-color-emerald-500)}.ui\:bg-emerald-500\!{background-color:var(--ui-color-emerald-500)!important}.ui\:bg-emerald-600{background-color:var(--ui-color-emerald-600)}.ui\:bg-gray-200{background-color:var(--ui-color-gray-200)}.ui\:bg-green-500{background-color:var(--ui-color-green-500)}.ui\:bg-inherit{background-color:inherit}.ui\:bg-input{background-color:var(--input)}.ui\:bg-muted{background-color:var(--muted)}.ui\:bg-muted-foreground\/30{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-muted-foreground\/30{background-color:color-mix(in oklab, var(--muted-foreground) 30%, transparent)}}.ui\:bg-muted-foreground\/40{background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-muted-foreground\/40{background-color:color-mix(in oklab, var(--muted-foreground) 40%, transparent)}}.ui\:bg-muted\/30{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-muted\/30{background-color:color-mix(in oklab, var(--muted) 30%, transparent)}}.ui\:bg-muted\/50{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-muted\/50{background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}.ui\:bg-muted\/95{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-muted\/95{background-color:color-mix(in oklab, var(--muted) 95%, transparent)}}.ui\:bg-neutral-100{background-color:var(--ui-color-neutral-100)}.ui\:bg-neutral-900\/50{background-color:var(--ui-color-neutral-900)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-neutral-900\/50{background-color:color-mix(in oklab, var(--ui-color-neutral-900) 50%, transparent)}}.ui\:bg-popover{background-color:var(--popover)}.ui\:bg-primary{background-color:var(--primary)}.ui\:bg-primary-foreground{background-color:var(--primary-foreground)}.ui\:bg-primary\/10{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-primary\/10{background-color:color-mix(in oklab, var(--primary) 10%, transparent)}}.ui\:bg-primary\/20{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-primary\/20{background-color:color-mix(in oklab, var(--primary) 20%, transparent)}}.ui\:bg-red-50\/40{background-color:var(--ui-color-red-50)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-red-50\/40{background-color:color-mix(in oklab, var(--ui-color-red-50) 40%, transparent)}}.ui\:bg-red-500{background-color:var(--ui-color-red-500)}.ui\:bg-rose-500{background-color:var(--ui-color-rose-500)}.ui\:bg-rose-500\!{background-color:var(--ui-color-rose-500)!important}.ui\:bg-secondary,.ui\:bg-secondary\/50{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-secondary\/50{background-color:color-mix(in oklab, var(--secondary) 50%, transparent)}}.ui\:bg-sidebar{background-color:var(--sidebar)}.ui\:bg-sidebar-border{background-color:var(--sidebar-border)}.ui\:bg-sky-50{background-color:var(--ui-color-sky-50)}.ui\:bg-slate-500{background-color:var(--ui-color-slate-500)}.ui\:bg-slate-500\!{background-color:var(--ui-color-slate-500)!important}.ui\:bg-transparent{background-color:#0000}.ui\:bg-violet-500{background-color:var(--ui-color-violet-500)}.ui\:bg-violet-500\!{background-color:var(--ui-color-violet-500)!important}.ui\:bg-white,.ui\:bg-white\/5{background-color:var(--ui-color-white)}@supports (color:color-mix(in lab, red, red)){.ui\:bg-white\/5{background-color:color-mix(in oklab, var(--ui-color-white) 5%, transparent)}}.ui\:bg-yellow-500{background-color:var(--ui-color-yellow-500)}.ui\:bg-zinc-100{background-color:var(--ui-color-zinc-100)}.ui\:bg-zinc-400{background-color:var(--ui-color-zinc-400)}.ui\:bg-linear-to-r{--tw-gradient-position:to right}@supports (background-image:linear-gradient(in lab, red, red)){.ui\:bg-linear-to-r{--tw-gradient-position:to right in oklab}}.ui\:bg-linear-to-r{background-image:linear-gradient(var(--tw-gradient-stops))}.ui\:bg-linear-to-t{--tw-gradient-position:to top}@supports (background-image:linear-gradient(in lab, red, red)){.ui\:bg-linear-to-t{--tw-gradient-position:to top in oklab}}.ui\:bg-linear-to-t{background-image:linear-gradient(var(--tw-gradient-stops))}.ui\:bg-\[linear-gradient\(110deg\,\#000103\,45\%\,\#1e2631\,55\%\,\#000103\)\]{background-image:linear-gradient(110deg,#000103,45%,#1e2631,55%,#000103)}.ui\:from-background{--tw-gradient-from:var(--background);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ui\:from-pink-500{--tw-gradient-from:var(--ui-color-pink-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ui\:from-slate-500{--tw-gradient-from:var(--ui-color-slate-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ui\:from-transparent{--tw-gradient-from:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ui\:via-black\/80{--tw-gradient-via:var(--ui-color-black)}@supports (color:color-mix(in lab, red, red)){.ui\:via-black\/80{--tw-gradient-via:color-mix(in oklab, var(--ui-color-black) 80%, transparent)}}.ui\:via-black\/80{--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.ui\:via-blue-600\/30{--tw-gradient-via:var(--ui-color-blue-600)}@supports (color:color-mix(in lab, red, red)){.ui\:via-blue-600\/30{--tw-gradient-via:color-mix(in oklab, var(--ui-color-blue-600) 30%, transparent)}}.ui\:via-blue-600\/30{--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.ui\:via-50\%{--tw-gradient-via-position:50%}.ui\:to-orange-500{--tw-gradient-to:var(--ui-color-orange-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ui\:to-transparent{--tw-gradient-to:transparent;--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.ui\:bg-\[length\:200\%_100\%\]{background-size:200% 100%}.ui\:bg-cover{background-size:cover}.ui\:bg-size-\[var\(--shimmer-width\)_100\%\]{background-size:var(--shimmer-width) 100%}.ui\:bg-clip-padding{background-clip:padding-box}.ui\:bg-clip-text{-webkit-background-clip:text;background-clip:text}.ui\:bg-center{background-position:50%}.ui\:bg-position-\[0_0\]{background-position:0 0}.ui\:bg-no-repeat{background-repeat:no-repeat}.ui\:fill-amber-400{fill:var(--ui-color-amber-400)}.ui\:fill-current{fill:currentColor}.ui\:fill-none{fill:none}.ui\:fill-primary{fill:var(--primary)}.ui\:object-contain{object-fit:contain}.ui\:object-cover{object-fit:cover}.ui\:p-0{padding:calc(var(--ui-spacing) * 0)}.ui\:p-0\!{padding:calc(var(--ui-spacing) * 0)!important}.ui\:p-0\.5{padding:calc(var(--ui-spacing) * .5)}.ui\:p-1{padding:calc(var(--ui-spacing) * 1)}.ui\:p-1\!{padding:calc(var(--ui-spacing) * 1)!important}.ui\:p-1\.5{padding:calc(var(--ui-spacing) * 1.5)}.ui\:p-2{padding:calc(var(--ui-spacing) * 2)}.ui\:p-3{padding:calc(var(--ui-spacing) * 3)}.ui\:p-3\!{padding:calc(var(--ui-spacing) * 3)!important}.ui\:p-4{padding:calc(var(--ui-spacing) * 4)}.ui\:p-5{padding:calc(var(--ui-spacing) * 5)}.ui\:p-6{padding:calc(var(--ui-spacing) * 6)}.ui\:p-7{padding:calc(var(--ui-spacing) * 7)}.ui\:p-8{padding:calc(var(--ui-spacing) * 8)}.ui\:p-10{padding:calc(var(--ui-spacing) * 10)}.ui\:p-\[3px\]{padding:3px}.ui\:px-1{padding-inline:calc(var(--ui-spacing) * 1)}.ui\:px-1\.5{padding-inline:calc(var(--ui-spacing) * 1.5)}.ui\:px-2{padding-inline:calc(var(--ui-spacing) * 2)}.ui\:px-2\.5{padding-inline:calc(var(--ui-spacing) * 2.5)}.ui\:px-3{padding-inline:calc(var(--ui-spacing) * 3)}.ui\:px-3\.5{padding-inline:calc(var(--ui-spacing) * 3.5)}.ui\:px-4{padding-inline:calc(var(--ui-spacing) * 4)}.ui\:px-5{padding-inline:calc(var(--ui-spacing) * 5)}.ui\:px-6{padding-inline:calc(var(--ui-spacing) * 6)}.ui\:px-7{padding-inline:calc(var(--ui-spacing) * 7)}.ui\:px-8{padding-inline:calc(var(--ui-spacing) * 8)}.ui\:py-0{padding-block:calc(var(--ui-spacing) * 0)}.ui\:py-0\.5{padding-block:calc(var(--ui-spacing) * .5)}.ui\:py-1{padding-block:calc(var(--ui-spacing) * 1)}.ui\:py-1\.5{padding-block:calc(var(--ui-spacing) * 1.5)}.ui\:py-2{padding-block:calc(var(--ui-spacing) * 2)}.ui\:py-2\.5{padding-block:calc(var(--ui-spacing) * 2.5)}.ui\:py-3{padding-block:calc(var(--ui-spacing) * 3)}.ui\:py-3\.5{padding-block:calc(var(--ui-spacing) * 3.5)}.ui\:py-4{padding-block:calc(var(--ui-spacing) * 4)}.ui\:py-5{padding-block:calc(var(--ui-spacing) * 5)}.ui\:py-6{padding-block:calc(var(--ui-spacing) * 6)}.ui\:py-8{padding-block:calc(var(--ui-spacing) * 8)}.ui\:py-10{padding-block:calc(var(--ui-spacing) * 10)}.ui\:py-12{padding-block:calc(var(--ui-spacing) * 12)}.ui\:py-14{padding-block:calc(var(--ui-spacing) * 14)}.ui\:py-16{padding-block:calc(var(--ui-spacing) * 16)}.ui\:py-20{padding-block:calc(var(--ui-spacing) * 20)}.ui\:py-24{padding-block:calc(var(--ui-spacing) * 24)}.ui\:py-32{padding-block:calc(var(--ui-spacing) * 32)}.ui\:ps-3{padding-inline-start:calc(var(--ui-spacing) * 3)}.ui\:pe-3{padding-inline-end:calc(var(--ui-spacing) * 3)}.ui\:pt-0{padding-top:calc(var(--ui-spacing) * 0)}.ui\:pt-1{padding-top:calc(var(--ui-spacing) * 1)}.ui\:pt-1\.5{padding-top:calc(var(--ui-spacing) * 1.5)}.ui\:pt-2{padding-top:calc(var(--ui-spacing) * 2)}.ui\:pt-2\.5{padding-top:calc(var(--ui-spacing) * 2.5)}.ui\:pt-3{padding-top:calc(var(--ui-spacing) * 3)}.ui\:pt-3\!{padding-top:calc(var(--ui-spacing) * 3)!important}.ui\:pt-3\.5{padding-top:calc(var(--ui-spacing) * 3.5)}.ui\:pt-4{padding-top:calc(var(--ui-spacing) * 4)}.ui\:pt-5{padding-top:calc(var(--ui-spacing) * 5)}.ui\:pt-6{padding-top:calc(var(--ui-spacing) * 6)}.ui\:pt-8{padding-top:calc(var(--ui-spacing) * 8)}.ui\:pt-10{padding-top:calc(var(--ui-spacing) * 10)}.ui\:pt-12{padding-top:calc(var(--ui-spacing) * 12)}.ui\:pt-16{padding-top:calc(var(--ui-spacing) * 16)}.ui\:pt-20{padding-top:calc(var(--ui-spacing) * 20)}.ui\:pr-1{padding-right:calc(var(--ui-spacing) * 1)}.ui\:pr-2{padding-right:calc(var(--ui-spacing) * 2)}.ui\:pr-4{padding-right:calc(var(--ui-spacing) * 4)}.ui\:pr-8{padding-right:calc(var(--ui-spacing) * 8)}.ui\:pr-9{padding-right:calc(var(--ui-spacing) * 9)}.ui\:pr-18{padding-right:calc(var(--ui-spacing) * 18)}.ui\:pb-0{padding-bottom:calc(var(--ui-spacing) * 0)}.ui\:pb-2{padding-bottom:calc(var(--ui-spacing) * 2)}.ui\:pb-3{padding-bottom:calc(var(--ui-spacing) * 3)}.ui\:pb-4{padding-bottom:calc(var(--ui-spacing) * 4)}.ui\:pb-5{padding-bottom:calc(var(--ui-spacing) * 5)}.ui\:pb-6{padding-bottom:calc(var(--ui-spacing) * 6)}.ui\:pb-8{padding-bottom:calc(var(--ui-spacing) * 8)}.ui\:pb-10{padding-bottom:calc(var(--ui-spacing) * 10)}.ui\:pb-12{padding-bottom:calc(var(--ui-spacing) * 12)}.ui\:pb-16{padding-bottom:calc(var(--ui-spacing) * 16)}.ui\:pb-20{padding-bottom:calc(var(--ui-spacing) * 20)}.ui\:pb-24{padding-bottom:calc(var(--ui-spacing) * 24)}.ui\:pb-\[max\(env\(safe-area-inset-bottom\)\,1rem\)\]{padding-bottom:max(env(safe-area-inset-bottom), 1rem)}.ui\:pl-2{padding-left:calc(var(--ui-spacing) * 2)}.ui\:pl-3{padding-left:calc(var(--ui-spacing) * 3)}.ui\:pl-4{padding-left:calc(var(--ui-spacing) * 4)}.ui\:pl-5{padding-left:calc(var(--ui-spacing) * 5)}.ui\:pl-8{padding-left:calc(var(--ui-spacing) * 8)}.ui\:text-center{text-align:center}.ui\:text-left{text-align:left}.ui\:text-right{text-align:right}.ui\:align-middle{vertical-align:middle}.ui\:font-mono{font-family:var(--ui-font-mono)}.ui\:font-sans{font-family:var(--ui-font-sans)}.ui\:font-serif{font-family:var(--ui-font-serif)}.ui\:text-2xl{font-size:var(--ui-text-2xl);line-height:var(--tw-leading,var(--ui-text-2xl--line-height))}.ui\:text-3xl{font-size:var(--ui-text-3xl);line-height:var(--tw-leading,var(--ui-text-3xl--line-height))}.ui\:text-4xl{font-size:var(--ui-text-4xl);line-height:var(--tw-leading,var(--ui-text-4xl--line-height))}.ui\:text-5xl{font-size:var(--ui-text-5xl);line-height:var(--tw-leading,var(--ui-text-5xl--line-height))}.ui\:text-6xl{font-size:var(--ui-text-6xl);line-height:var(--tw-leading,var(--ui-text-6xl--line-height))}.ui\:text-base{font-size:var(--ui-text-base);line-height:var(--tw-leading,var(--ui-text-base--line-height))}.ui\:text-base\!{font-size:var(--ui-text-base)!important;line-height:var(--tw-leading,var(--ui-text-base--line-height))!important}.ui\:text-lg{font-size:var(--ui-text-lg);line-height:var(--tw-leading,var(--ui-text-lg--line-height))}.ui\:text-sm{font-size:var(--ui-text-sm);line-height:var(--tw-leading,var(--ui-text-sm--line-height))}.ui\:text-sm\/relaxed{font-size:var(--ui-text-sm);line-height:var(--ui-leading-relaxed)}.ui\:text-xl{font-size:var(--ui-text-xl);line-height:var(--tw-leading,var(--ui-text-xl--line-height))}.ui\:text-xs{font-size:var(--ui-text-xs);line-height:var(--tw-leading,var(--ui-text-xs--line-height))}.ui\:text-\[0\.7rem\]{font-size:.7rem}.ui\:text-\[10px\]{font-size:10px}.ui\:text-\[11\.5px\]{font-size:11.5px}.ui\:text-\[11px\]{font-size:11px}.ui\:text-\[12\.5px\]{font-size:12.5px}.ui\:text-\[12px\]{font-size:12px}.ui\:text-\[13\.5px\]{font-size:13.5px}.ui\:text-\[13px\]{font-size:13px}.ui\:text-\[14\.5px\]{font-size:14.5px}.ui\:text-\[14px\]{font-size:14px}.ui\:text-\[15px\]{font-size:15px}.ui\:text-\[16px\]{font-size:16px}.ui\:text-\[17px\]{font-size:17px}.ui\:text-\[19px\]{font-size:19px}.ui\:text-\[22px\]{font-size:22px}.ui\:text-\[36px\]{font-size:36px}.ui\:text-\[40px\]{font-size:40px}.ui\:text-\[44px\]{font-size:44px}.ui\:text-\[64px\]{font-size:64px}.ui\:leading-7{--tw-leading:calc(var(--ui-spacing) * 7);line-height:calc(var(--ui-spacing) * 7)}.ui\:leading-8{--tw-leading:calc(var(--ui-spacing) * 8);line-height:calc(var(--ui-spacing) * 8)}.ui\:leading-\[0\.95\]{--tw-leading:.95;line-height:.95}.ui\:leading-\[1\.1\]{--tw-leading:1.1;line-height:1.1}.ui\:leading-\[1\.02\]{--tw-leading:1.02;line-height:1.02}.ui\:leading-\[1\.05\]{--tw-leading:1.05;line-height:1.05}.ui\:leading-\[1\.5\]{--tw-leading:1.5;line-height:1.5}.ui\:leading-\[1\.08\]{--tw-leading:1.08;line-height:1.08}.ui\:leading-\[1\.25\]{--tw-leading:1.25;line-height:1.25}.ui\:leading-\[1\.35\]{--tw-leading:1.35;line-height:1.35}.ui\:leading-none{--tw-leading:1;line-height:1}.ui\:leading-normal{--tw-leading:var(--ui-leading-normal);line-height:var(--ui-leading-normal)}.ui\:leading-relaxed{--tw-leading:var(--ui-leading-relaxed);line-height:var(--ui-leading-relaxed)}.ui\:leading-snug{--tw-leading:var(--ui-leading-snug);line-height:var(--ui-leading-snug)}.ui\:leading-tight{--tw-leading:var(--ui-leading-tight);line-height:var(--ui-leading-tight)}.ui\:font-black{--tw-font-weight:var(--ui-font-weight-black);font-weight:var(--ui-font-weight-black)}.ui\:font-bold{--tw-font-weight:var(--ui-font-weight-bold);font-weight:var(--ui-font-weight-bold)}.ui\:font-extrabold{--tw-font-weight:var(--ui-font-weight-extrabold);font-weight:var(--ui-font-weight-extrabold)}.ui\:font-light{--tw-font-weight:var(--ui-font-weight-light);font-weight:var(--ui-font-weight-light)}.ui\:font-medium{--tw-font-weight:var(--ui-font-weight-medium);font-weight:var(--ui-font-weight-medium)}.ui\:font-normal{--tw-font-weight:var(--ui-font-weight-normal);font-weight:var(--ui-font-weight-normal)}.ui\:font-semibold{--tw-font-weight:var(--ui-font-weight-semibold);font-weight:var(--ui-font-weight-semibold)}.ui\:\[font-weight\:var\(--landing-heading-weight\)\]{font-weight:var(--landing-heading-weight)}.ui\:tracking-\[-0\.02em\]{--tw-tracking:-.02em;letter-spacing:-.02em}.ui\:tracking-\[0\.2em\]{--tw-tracking:.2em;letter-spacing:.2em}.ui\:tracking-\[0\.04em\]{--tw-tracking:.04em;letter-spacing:.04em}.ui\:tracking-\[0\.08em\]{--tw-tracking:.08em;letter-spacing:.08em}.ui\:tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.ui\:tracking-\[0\.18em\]{--tw-tracking:.18em;letter-spacing:.18em}.ui\:tracking-tight{--tw-tracking:var(--ui-tracking-tight);letter-spacing:var(--ui-tracking-tight)}.ui\:tracking-tighter{--tw-tracking:var(--ui-tracking-tighter);letter-spacing:var(--ui-tracking-tighter)}.ui\:tracking-wide{--tw-tracking:var(--ui-tracking-wide);letter-spacing:var(--ui-tracking-wide)}.ui\:tracking-wider{--tw-tracking:var(--ui-tracking-wider);letter-spacing:var(--ui-tracking-wider)}.ui\:tracking-widest{--tw-tracking:var(--ui-tracking-widest);letter-spacing:var(--ui-tracking-widest)}.ui\:\[letter-spacing\:var\(--landing-eyebrow-tracking\)\]{letter-spacing:var(--landing-eyebrow-tracking)}.ui\:\[letter-spacing\:var\(--landing-heading-tracking\)\]{letter-spacing:var(--landing-heading-tracking)}.ui\:text-balance{text-wrap:balance}.ui\:text-wrap{text-wrap:wrap}.ui\:break-words{overflow-wrap:break-word}.ui\:break-all{word-break:break-all}.ui\:text-ellipsis{text-overflow:ellipsis}.ui\:whitespace-nowrap{white-space:nowrap}.ui\:text-\[\#0a0b0e\]{color:#0a0b0e}.ui\:text-\[\#1a1a1a\]{color:#1a1a1a}.ui\:text-\[\#2c2b29\]{color:#2c2b29}.ui\:text-\[\#9da1ab\]{color:#9da1ab}.ui\:text-\[\#61656f\]{color:#61656f}.ui\:text-\[\#76746c\]{color:#76746c}.ui\:text-\[\#c25237\]{color:#c25237}.ui\:text-\[\#e9eaed\]{color:#e9eaed}.ui\:text-\[\#fafaf5\]{color:#fafaf5}.ui\:text-\[var\(--landing-accent\)\]{color:var(--landing-accent)}.ui\:text-\[var\(--landing-accent-fg\)\],.ui\:text-\[var\(--landing-accent-fg\)\]\/70{color:var(--landing-accent-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-accent-fg\)\]\/70{color:color-mix(in oklab, var(--landing-accent-fg) 70%, transparent)}}.ui\:text-\[var\(--landing-accent-fg\)\]\/80{color:var(--landing-accent-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-accent-fg\)\]\/80{color:color-mix(in oklab, var(--landing-accent-fg) 80%, transparent)}}.ui\:text-\[var\(--landing-accent-fg\)\]\/85{color:var(--landing-accent-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-accent-fg\)\]\/85{color:color-mix(in oklab, var(--landing-accent-fg) 85%, transparent)}}.ui\:text-\[var\(--landing-bg\)\],.ui\:text-\[var\(--landing-bg\)\]\/50{color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-bg\)\]\/50{color:color-mix(in oklab, var(--landing-bg) 50%, transparent)}}.ui\:text-\[var\(--landing-bg\)\]\/55{color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-bg\)\]\/55{color:color-mix(in oklab, var(--landing-bg) 55%, transparent)}}.ui\:text-\[var\(--landing-bg\)\]\/60{color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-bg\)\]\/60{color:color-mix(in oklab, var(--landing-bg) 60%, transparent)}}.ui\:text-\[var\(--landing-bg\)\]\/65{color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-bg\)\]\/65{color:color-mix(in oklab, var(--landing-bg) 65%, transparent)}}.ui\:text-\[var\(--landing-bg\)\]\/70{color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-bg\)\]\/70{color:color-mix(in oklab, var(--landing-bg) 70%, transparent)}}.ui\:text-\[var\(--landing-bg\)\]\/75{color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-bg\)\]\/75{color:color-mix(in oklab, var(--landing-bg) 75%, transparent)}}.ui\:text-\[var\(--landing-bg\)\]\/80{color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-bg\)\]\/80{color:color-mix(in oklab, var(--landing-bg) 80%, transparent)}}.ui\:text-\[var\(--landing-bg\)\]\/90{color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-bg\)\]\/90{color:color-mix(in oklab, var(--landing-bg) 90%, transparent)}}.ui\:text-\[var\(--landing-button-primary-fg\)\]{color:var(--landing-button-primary-fg)}.ui\:text-\[var\(--landing-button-secondary-fg\)\]{color:var(--landing-button-secondary-fg)}.ui\:text-\[var\(--landing-button-tertiary-fg\)\]{color:var(--landing-button-tertiary-fg)}.ui\:text-\[var\(--landing-fg\)\],.ui\:text-\[var\(--landing-fg\)\]\/70{color:var(--landing-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-fg\)\]\/70{color:color-mix(in oklab, var(--landing-fg) 70%, transparent)}}.ui\:text-\[var\(--landing-fg\)\]\/72{color:var(--landing-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-fg\)\]\/72{color:color-mix(in oklab, var(--landing-fg) 72%, transparent)}}.ui\:text-\[var\(--landing-fg\)\]\/80{color:var(--landing-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:text-\[var\(--landing-fg\)\]\/80{color:color-mix(in oklab, var(--landing-fg) 80%, transparent)}}.ui\:text-\[var\(--landing-fg-faint\)\]{color:var(--landing-fg-faint)}.ui\:text-\[var\(--landing-fg-muted\)\]{color:var(--landing-fg-muted)}.ui\:text-accent-foreground{color:var(--accent-foreground)}.ui\:text-amber-200{color:var(--ui-color-amber-200)}.ui\:text-amber-500{color:var(--ui-color-amber-500)}.ui\:text-amber-600{color:var(--ui-color-amber-600)}.ui\:text-amber-900{color:var(--ui-color-amber-900)}.ui\:text-black{color:var(--ui-color-black)}.ui\:text-card-foreground{color:var(--card-foreground)}.ui\:text-current{color:currentColor}.ui\:text-destructive{color:var(--destructive)}.ui\:text-emerald-600{color:var(--ui-color-emerald-600)}.ui\:text-emerald-700{color:var(--ui-color-emerald-700)}.ui\:text-foreground,.ui\:text-foreground\/70{color:var(--foreground)}@supports (color:color-mix(in lab, red, red)){.ui\:text-foreground\/70{color:color-mix(in oklab, var(--foreground) 70%, transparent)}}.ui\:text-gray-200{color:var(--ui-color-gray-200)}.ui\:text-green-500{color:var(--ui-color-green-500)}.ui\:text-green-600{color:var(--ui-color-green-600)}.ui\:text-muted-foreground,.ui\:text-muted-foreground\/60{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.ui\:text-muted-foreground\/60{color:color-mix(in oklab, var(--muted-foreground) 60%, transparent)}}.ui\:text-muted-foreground\/75{color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.ui\:text-muted-foreground\/75{color:color-mix(in oklab, var(--muted-foreground) 75%, transparent)}}.ui\:text-neutral-600\/50{color:var(--ui-color-neutral-600)}@supports (color:color-mix(in lab, red, red)){.ui\:text-neutral-600\/50{color:color-mix(in oklab, var(--ui-color-neutral-600) 50%, transparent)}}.ui\:text-popover-foreground{color:var(--popover-foreground)}.ui\:text-primary{color:var(--primary)}.ui\:text-primary\!{color:var(--primary)!important}.ui\:text-primary-foreground{color:var(--primary-foreground)}.ui\:text-red-500{color:var(--ui-color-red-500)}.ui\:text-red-600{color:var(--ui-color-red-600)}.ui\:text-red-700{color:var(--ui-color-red-700)}.ui\:text-secondary-foreground{color:var(--secondary-foreground)}.ui\:text-sidebar-foreground,.ui\:text-sidebar-foreground\/70{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab, red, red)){.ui\:text-sidebar-foreground\/70{color:color-mix(in oklab, var(--sidebar-foreground) 70%, transparent)}}.ui\:text-sidebar-foreground\/75{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab, red, red)){.ui\:text-sidebar-foreground\/75{color:color-mix(in oklab, var(--sidebar-foreground) 75%, transparent)}}.ui\:text-sidebar-foreground\/80{color:var(--sidebar-foreground)}@supports (color:color-mix(in lab, red, red)){.ui\:text-sidebar-foreground\/80{color:color-mix(in oklab, var(--sidebar-foreground) 80%, transparent)}}.ui\:text-sky-900{color:var(--ui-color-sky-900)}.ui\:text-transparent{color:#0000}.ui\:text-white{color:var(--ui-color-white)}.ui\:text-white\!{color:var(--ui-color-white)!important}.ui\:\[text-transform\:var\(--landing-eyebrow-case\)\]{text-transform:var(--landing-eyebrow-case)}.ui\:\[text-transform\:var\(--landing-heading-case\)\]{text-transform:var(--landing-heading-case)}.ui\:capitalize{text-transform:capitalize}.ui\:uppercase{text-transform:uppercase}.ui\:italic{font-style:italic}.ui\: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,)}.ui\:line-through{text-decoration-line:line-through}.ui\:no-underline{text-decoration-line:none}.ui\:underline{text-decoration-line:underline}.ui\:underline-offset-2{text-underline-offset:2px}.ui\:underline-offset-4{text-underline-offset:4px}.ui\:opacity-0{opacity:0}.ui\:opacity-10{opacity:.1}.ui\:opacity-30{opacity:.3}.ui\:opacity-40{opacity:.4}.ui\:opacity-50{opacity:.5}.ui\:opacity-60{opacity:.6}.ui\:opacity-70{opacity:.7}.ui\:opacity-85{opacity:.85}.ui\:opacity-90{opacity:.9}.ui\:opacity-95{opacity:.95}.ui\:opacity-100{opacity:1}.ui\:opacity-\[0\.06\]{opacity:.06}.ui\:opacity-\[0\.08\]{opacity:.08}.ui\:opacity-\[0\.10\]{opacity:.1}.ui\:opacity-\[0\.15\]{opacity:.15}.ui\:shadow-\[var\(--landing-accent\)\]\/20{--tw-shadow-alpha:20%;--tw-shadow:var(--landing-accent);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:shadow-\[var\(--landing-accent\)\]\/25{--tw-shadow-alpha:25%;--tw-shadow:var(--landing-accent);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\: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)}.ui\:shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:shadow-2xs{--tw-shadow:0 1px var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:shadow-\[0_0_0_1px_\#ffffff10\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,#ffffff10);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:shadow-\[0_0_0_1px_var\(--sidebar-border\)\]{--tw-shadow:0 0 0 1px var(--tw-shadow-color,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)}.ui\:shadow-\[0_4px_16px_rgba\(0\,0\,0\,0\.10\)\]{--tw-shadow:0 4px 16px 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)}.ui\:shadow-\[0_4px_24px_-8px_rgba\(14\,14\,16\,0\.08\)\]{--tw-shadow:0 4px 24px -8px var(--tw-shadow-color,#0e0e1014);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:shadow-\[0_18px_40px_rgba\(0\,0\,0\,0\.18\)\,0_6px_12px_rgba\(0\,0\,0\,0\.12\)\]{--tw-shadow:0 18px 40px var(--tw-shadow-color,#0000002e), 0 6px 12px var(--tw-shadow-color,#0000001f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:shadow-\[0_20px_60px_-30px_rgba\(14\,14\,16\,0\.25\)\]{--tw-shadow:0 20px 60px -30px var(--tw-shadow-color,#0e0e1040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:shadow-\[0_40px_90px_-30px_rgba\(0\,0\,0\,0\.35\)\]{--tw-shadow:0 40px 90px -30px var(--tw-shadow-color,#00000059);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:shadow-\[inset_0_-8px_10px_\#ffffff1f\]{--tw-shadow:inset 0 -8px 10px var(--tw-shadow-color,#ffffff1f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\: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)}.ui\: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)}.ui\: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)}.ui\: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)}.ui\:shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\: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)}.ui\: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)}.ui\:ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:ring-3{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\: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)}.ui\:\[box-shadow\:var\(--landing-glow\)\]{box-shadow:var(--landing-glow)}.ui\:\[box-shadow\:var\(--landing-shadow-card\)\]{box-shadow:var(--landing-shadow-card)}.ui\:ring-\[var\(--landing-accent\)\]{--tw-ring-color:var(--landing-accent)}.ui\:ring-accent{--tw-ring-color:var(--accent)}.ui\:ring-background{--tw-ring-color:var(--background)}.ui\:ring-border,.ui\:ring-border\/50{--tw-ring-color:var(--border)}@supports (color:color-mix(in lab, red, red)){.ui\:ring-border\/50{--tw-ring-color:color-mix(in oklab, var(--border) 50%, transparent)}}.ui\:ring-primary{--tw-ring-color:var(--primary)}.ui\:ring-sidebar-ring{--tw-ring-color:var(--sidebar-ring)}.ui\:ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.ui\:ring-offset-background{--tw-ring-offset-color:var(--background)}.ui\:outline-hidden{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.ui\:outline-hidden{outline-offset:2px;outline:2px solid #0000}}.ui\:blur-3xl{--tw-blur:blur(var(--ui-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,)}.ui\:blur-\[2px\]{--tw-blur:blur(2px);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,)}.ui\:brightness-200{--tw-brightness:brightness(200%);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,)}.ui\:drop-shadow-sm{--tw-drop-shadow-size:drop-shadow(0 1px 2px var(--tw-drop-shadow-color,#00000026));--tw-drop-shadow:drop-shadow(var(--ui-drop-shadow-sm));filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.ui\:drop-shadow-none{--tw-drop-shadow: ;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,)}.ui\:grayscale{--tw-grayscale:grayscale(100%);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,)}.ui\: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,)}.ui\:backdrop-blur-2xl{--tw-backdrop-blur:blur(var(--ui-blur-2xl));-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,)}.ui\:backdrop-blur-md{--tw-backdrop-blur:blur(var(--ui-blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.ui\:backdrop-blur-sm{--tw-backdrop-blur:blur(var(--ui-blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.ui\:backdrop-blur-xl{--tw-backdrop-blur:blur(var(--ui-blur-xl));-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,)}.ui\: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(--ui-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ui-default-transition-duration))}.ui\:transition-\[color\,box-shadow\]{transition-property:color,box-shadow;transition-timing-function:var(--tw-ease,var(--ui-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ui-default-transition-duration))}.ui\:transition-\[left\,right\,width\]{transition-property:left,right,width;transition-timing-function:var(--tw-ease,var(--ui-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ui-default-transition-duration))}.ui\:transition-\[margin\,opacity\]{transition-property:margin,opacity;transition-timing-function:var(--tw-ease,var(--ui-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ui-default-transition-duration))}.ui\:transition-\[stroke-dashoffset\]{transition-property:stroke-dashoffset;transition-timing-function:var(--tw-ease,var(--ui-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ui-default-transition-duration))}.ui\:transition-\[width\,height\,padding\]{transition-property:width,height,padding;transition-timing-function:var(--tw-ease,var(--ui-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ui-default-transition-duration))}.ui\:transition-\[width\]{transition-property:width;transition-timing-function:var(--tw-ease,var(--ui-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ui-default-transition-duration))}.ui\:transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--ui-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ui-default-transition-duration))}.ui\: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(--ui-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ui-default-transition-duration))}.ui\:transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--ui-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ui-default-transition-duration))}.ui\:transition-shadow{transition-property:box-shadow;transition-timing-function:var(--tw-ease,var(--ui-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ui-default-transition-duration))}.ui\:transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--ui-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ui-default-transition-duration))}.ui\:transition-none{transition-property:none}.ui\:duration-100{--tw-duration:.1s;transition-duration:.1s}.ui\:duration-200{--tw-duration:.2s;transition-duration:.2s}.ui\:duration-300{--tw-duration:.3s;transition-duration:.3s}.ui\:duration-500{--tw-duration:.5s;transition-duration:.5s}.ui\:duration-700{--tw-duration:.7s;transition-duration:.7s}.ui\:ease-in-out{--tw-ease:var(--ui-ease-in-out);transition-timing-function:var(--ui-ease-in-out)}.ui\:ease-linear{--tw-ease:linear;transition-timing-function:linear}.ui\:ease-out{--tw-ease:var(--ui-ease-out);transition-timing-function:var(--ui-ease-out)}.ui\:fade-in-0{--tw-enter-opacity:0}.ui\:outline-none{--tw-outline-style:none;outline-style:none}.ui\:select-none{-webkit-user-select:none;user-select:none}.ui\:zoom-in-95{--tw-enter-scale:.95}.ui\:\[--dot-field-glow\:\#fff\]{--dot-field-glow:#fff}.ui\:\[background\:conic-gradient\(from_calc\(270deg-\(var\(--spread\)\*0\.5\)\)\,transparent_0\,var\(--shimmer-color\)_var\(--spread\)\,transparent_var\(--spread\)\)\]{background:conic-gradient(from calc(270deg - (var(--spread) * .5)),transparent 0,var(--shimmer-color) var(--spread),transparent var(--spread))}.ui\:\[background\:linear-gradient\(180deg\,var\(--landing-card\)_0\%\,var\(--landing-bg-section\)_100\%\)\]{background:linear-gradient(180deg,var(--landing-card) 0%,var(--landing-bg-section) 100%)}.ui\:\[background\:var\(--bg\)\]{background:var(--bg)}.ui\:\[border-top\:1px_dashed_var\(--landing-border-soft\)\]{border-top:1px dashed var(--landing-border-soft)}.ui\:\[mask\:none\]{-webkit-mask:none;mask:none}.ui\:ring-inset{--tw-ring-inset:inset}:is(.ui\:\*\:w-full>*){width:100%}.ui\:group-focus-within\/menu-item\:opacity-100:is(:where(.ui\:group\/menu-item):focus-within *){opacity:1}@media (hover:hover){.ui\:group-hover\:translate-x-0\.5:is(:where(.ui\:group):hover *){--tw-translate-x:calc(var(--ui-spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:group-hover\:scale-\[1\.02\]:is(:where(.ui\:group):hover *){scale:1.02}.ui\:group-hover\:bg-\[var\(--landing-accent\)\]:is(:where(.ui\:group):hover *){background-color:var(--landing-accent)}.ui\:group-hover\:bg-muted-foreground\/15:is(:where(.ui\:group):hover *){background-color:var(--muted-foreground)}@supports (color:color-mix(in lab, red, red)){.ui\:group-hover\:bg-muted-foreground\/15:is(:where(.ui\:group):hover *){background-color:color-mix(in oklab, var(--muted-foreground) 15%, transparent)}}.ui\:group-hover\:bg-secondary\/80:is(:where(.ui\:group):hover *){background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){.ui\:group-hover\:bg-secondary\/80:is(:where(.ui\:group):hover *){background-color:color-mix(in oklab, var(--secondary) 80%, transparent)}}.ui\:group-hover\:text-\[var\(--landing-accent\)\]:is(:where(.ui\:group):hover *){color:var(--landing-accent)}.ui\:group-hover\:text-\[var\(--landing-accent-fg\)\]:is(:where(.ui\:group):hover *){color:var(--landing-accent-fg)}.ui\:group-hover\:text-foreground:is(:where(.ui\:group):hover *){color:var(--foreground)}.ui\:group-hover\:text-primary:is(:where(.ui\:group):hover *){color:var(--primary)}.ui\:group-hover\:opacity-100:is(:where(.ui\:group):hover *){opacity:1}.ui\:group-hover\:shadow-\[inset_0_-6px_10px_\#ffffff3f\]:is(:where(.ui\:group):hover *){--tw-shadow:inset 0 -6px 10px var(--tw-shadow-color,#ffffff3f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:group-hover\/menu-item\:opacity-100:is(:where(.ui\:group\/menu-item):hover *){opacity:1}}.ui\:group-focus-visible\:opacity-100:is(:where(.ui\:group):focus-visible *){opacity:1}.ui\:group-active\:shadow-\[inset_0_-10px_10px_\#ffffff3f\]:is(:where(.ui\:group):active *){--tw-shadow:inset 0 -10px 10px var(--tw-shadow-color,#ffffff3f);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:group-has-data-\[orientation\=horizontal\]\/field\:text-balance:is(:where(.ui\:group\/field):has([data-orientation=horizontal]) *){text-wrap:balance}.ui\:group-has-data-\[sidebar\=menu-action\]\/menu-item\:pr-8:is(:where(.ui\:group\/menu-item):has([data-sidebar=menu-action]) *){padding-right:calc(var(--ui-spacing) * 8)}.ui\:group-has-\[\[data-slot\=item-description\]\]\/item\:translate-y-0\.5:is(:where(.ui\:group\/item):has([data-slot=item-description]) *){--tw-translate-y:calc(var(--ui-spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:group-has-\[\[data-slot\=item-description\]\]\/item\:self-start:is(:where(.ui\:group\/item):has([data-slot=item-description]) *){align-self:flex-start}.ui\:group-has-\[\>input\]\/input-group\:pt-2\.5:is(:where(.ui\:group\/input-group):has(>input) *){padding-top:calc(var(--ui-spacing) * 2.5)}.ui\:group-has-\[\>input\]\/input-group\:pb-2\.5:is(:where(.ui\:group\/input-group):has(>input) *){padding-bottom:calc(var(--ui-spacing) * 2.5)}.ui\:group-aria-disabled\/file-drop-zone-trigger\:opacity-50:is(:where(.ui\:group\/file-drop-zone-trigger)[aria-disabled=true] *){opacity:.5}.ui\:group-data-\[collapsible\=icon\]\:pointer-events-none:is(:where(.ui\:group)[data-collapsible=icon] *){pointer-events:none}.ui\:group-data-\[collapsible\=icon\]\:-mt-8:is(:where(.ui\:group)[data-collapsible=icon] *){margin-top:calc(var(--ui-spacing) * -8)}.ui\:group-data-\[collapsible\=icon\]\:hidden:is(:where(.ui\:group)[data-collapsible=icon] *){display:none}.ui\:group-data-\[collapsible\=icon\]\:size-8\!:is(:where(.ui\:group)[data-collapsible=icon] *){width:calc(var(--ui-spacing) * 8)!important;height:calc(var(--ui-spacing) * 8)!important}.ui\:group-data-\[collapsible\=icon\]\:w-\(--sidebar-width-icon\):is(:where(.ui\:group)[data-collapsible=icon] *){width:var(--sidebar-width-icon)}.ui\:group-data-\[collapsible\=icon\]\:w-\[calc\(var\(--sidebar-width-icon\)\+\(--spacing\(4\)\)\+2px\)\]:is(:where(.ui\:group)[data-collapsible=icon] *){width:calc(var(--sidebar-width-icon) + (calc(var(--ui-spacing) * 4)) + 2px)}.ui\:group-data-\[collapsible\=icon\]\:overflow-hidden:is(:where(.ui\:group)[data-collapsible=icon] *){overflow:hidden}.ui\:group-data-\[collapsible\=icon\]\:p-0\!:is(:where(.ui\:group)[data-collapsible=icon] *){padding:calc(var(--ui-spacing) * 0)!important}.ui\:group-data-\[collapsible\=icon\]\:p-2\!:is(:where(.ui\:group)[data-collapsible=icon] *){padding:calc(var(--ui-spacing) * 2)!important}.ui\:group-data-\[collapsible\=icon\]\:opacity-0:is(:where(.ui\:group)[data-collapsible=icon] *){opacity:0}.ui\:group-data-\[collapsible\=offcanvas\]\:right-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.ui\:group)[data-collapsible=offcanvas] *){right:calc(var(--sidebar-width) * -1)}.ui\:group-data-\[collapsible\=offcanvas\]\:left-\[calc\(var\(--sidebar-width\)\*-1\)\]:is(:where(.ui\:group)[data-collapsible=offcanvas] *){left:calc(var(--sidebar-width) * -1)}.ui\:group-data-\[collapsible\=offcanvas\]\:w-0:is(:where(.ui\:group)[data-collapsible=offcanvas] *){width:calc(var(--ui-spacing) * 0)}.ui\:group-data-\[collapsible\=offcanvas\]\:translate-x-0:is(:where(.ui\:group)[data-collapsible=offcanvas] *){--tw-translate-x:calc(var(--ui-spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:group-data-\[disabled\=true\]\:pointer-events-none:is(:where(.ui\:group)[data-disabled=true] *){pointer-events:none}.ui\:group-data-\[disabled\=true\]\:opacity-50:is(:where(.ui\:group)[data-disabled=true] *),.ui\:group-data-\[disabled\=true\]\/field\:opacity-50:is(:where(.ui\:group\/field)[data-disabled=true] *),.ui\:group-data-\[disabled\=true\]\/input-group\:opacity-50:is(:where(.ui\:group\/input-group)[data-disabled=true] *){opacity:.5}.ui\:group-data-\[side\=left\]\:-right-4:is(:where(.ui\:group)[data-side=left] *){right:calc(var(--ui-spacing) * -4)}.ui\:group-data-\[side\=left\]\:border-r:is(:where(.ui\:group)[data-side=left] *){border-right-style:var(--tw-border-style);border-right-width:1px}.ui\:group-data-\[side\=right\]\:left-0:is(:where(.ui\:group)[data-side=right] *){left:calc(var(--ui-spacing) * 0)}.ui\:group-data-\[side\=right\]\:rotate-180:is(:where(.ui\:group)[data-side=right] *){rotate:180deg}.ui\:group-data-\[side\=right\]\:border-l:is(:where(.ui\:group)[data-side=right] *){border-left-style:var(--tw-border-style);border-left-width:1px}.ui\:group-data-\[state\=open\]\:rotate-180:is(:where(.ui\:group)[data-state=open] *){rotate:180deg}.ui\:group-data-\[variant\=floating\]\:rounded-lg:is(:where(.ui\:group)[data-variant=floating] *){border-radius:var(--radius)}.ui\:group-data-\[variant\=floating\]\:border:is(:where(.ui\:group)[data-variant=floating] *){border-style:var(--tw-border-style);border-width:1px}.ui\:group-data-\[variant\=floating\]\:border-sidebar-border:is(:where(.ui\:group)[data-variant=floating] *){border-color:var(--sidebar-border)}.ui\:group-data-\[variant\=floating\]\:shadow-sm:is(:where(.ui\:group)[data-variant=floating] *){--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:group-data-\[variant\=outline\]\/field-group\:-mb-2:is(:where(.ui\:group\/field-group)[data-variant=outline] *){margin-bottom:calc(var(--ui-spacing) * -2)}.ui\:group-data-\[vaul-drawer-direction\=bottom\]\/drawer-content\:block:is(:where(.ui\:group\/drawer-content)[data-vaul-drawer-direction=bottom] *){display:block}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:top-full:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *){top:100%}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:mt-1\.5:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *){margin-top:calc(var(--ui-spacing) * 1.5)}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:overflow-hidden:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *){overflow:hidden}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:rounded-md:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *){border-radius:calc(var(--radius) - 2px)}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:border:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *){border-style:var(--tw-border-style);border-width:1px}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:bg-popover:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *){background-color:var(--popover)}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:text-popover-foreground:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *){color:var(--popover-foreground)}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:shadow:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *){--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)}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:duration-200:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *){--tw-duration:.2s;transition-duration:.2s}@media (hover:hover){.ui\:peer-hover\/menu-button\:text-sidebar-accent-foreground:is(:where(.ui\:peer\/menu-button):hover~*){color:var(--sidebar-accent-foreground)}}.ui\:peer-focus-visible\:opacity-100:is(:where(.ui\:peer):focus-visible~*){opacity:1}.ui\:peer-disabled\:cursor-not-allowed:is(:where(.ui\:peer):disabled~*){cursor:not-allowed}.ui\:peer-disabled\:opacity-50:is(:where(.ui\:peer):disabled~*){opacity:.5}.ui\:peer-data-\[active\=true\]\/menu-button\:text-sidebar-accent-foreground:is(:where(.ui\:peer\/menu-button)[data-active=true]~*){color:var(--sidebar-accent-foreground)}.ui\:peer-data-\[size\=default\]\/menu-button\:top-1\.5:is(:where(.ui\:peer\/menu-button)[data-size=default]~*){top:calc(var(--ui-spacing) * 1.5)}.ui\:peer-data-\[size\=lg\]\/menu-button\:top-2\.5:is(:where(.ui\:peer\/menu-button)[data-size=lg]~*){top:calc(var(--ui-spacing) * 2.5)}.ui\:peer-data-\[size\=sm\]\/menu-button\:top-1:is(:where(.ui\:peer\/menu-button)[data-size=sm]~*){top:calc(var(--ui-spacing) * 1)}.ui\:first-letter\:float-left:first-letter{float:left}.ui\:first-letter\:mr-2:first-letter{margin-right:calc(var(--ui-spacing) * 2)}.ui\:first-letter\:text-5xl:first-letter{font-size:var(--ui-text-5xl);line-height:var(--tw-leading,var(--ui-text-5xl--line-height))}.ui\:first-letter\:leading-none:first-letter{--tw-leading:1;line-height:1}.ui\:first-letter\:\[font-weight\:var\(--landing-heading-weight\)\]:first-letter{font-weight:var(--landing-heading-weight)}.ui\:first-letter\:text-\[var\(--landing-accent\)\]:first-letter{color:var(--landing-accent)}.ui\:selection\:bg-primary ::selection{background-color:var(--primary)}.ui\:selection\:bg-primary::selection{background-color:var(--primary)}.ui\:selection\:text-primary-foreground ::selection{color:var(--primary-foreground)}.ui\:selection\:text-primary-foreground::selection{color:var(--primary-foreground)}.ui\:placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}.ui\:before\:mr-1:before{content:var(--tw-content);margin-right:calc(var(--ui-spacing) * 1)}.ui\:before\:size-1\.5:before{content:var(--tw-content);width:calc(var(--ui-spacing) * 1.5);height:calc(var(--ui-spacing) * 1.5)}.ui\:before\:rounded-full:before{content:var(--tw-content);border-radius:3.40282e38px}.ui\:before\:bg-\[var\(--landing-accent\)\]:before{content:var(--tw-content);background-color:var(--landing-accent)}.ui\:before\:text-2xl:before{content:var(--tw-content);font-size:var(--ui-text-2xl);line-height:var(--tw-leading,var(--ui-text-2xl--line-height))}.ui\:before\:text-\[var\(--landing-accent\)\]:before{content:var(--tw-content);color:var(--landing-accent)}.ui\:before\:content-\[\"\"\]:before{--tw-content:"";content:var(--tw-content)}.ui\:before\:content-\[\"“\"\]:before{--tw-content:"“";content:var(--tw-content)}.ui\:after\:absolute:after{content:var(--tw-content);position:absolute}.ui\:after\:-inset-2:after{content:var(--tw-content);inset:calc(var(--ui-spacing) * -2)}.ui\:after\:inset-y-0:after{content:var(--tw-content);inset-block:calc(var(--ui-spacing) * 0)}.ui\:after\:left-\[calc\(1\/2\*100\%-1px\)\]:after{content:var(--tw-content);left:calc(50% - 1px)}.ui\:after\:w-\[2px\]:after{content:var(--tw-content);width:2px}.ui\:group-data-\[collapsible\=offcanvas\]\:after\:left-full:is(:where(.ui\:group)[data-collapsible=offcanvas] *):after{content:var(--tw-content);left:100%}.ui\:first\:border-t-0:first-child{border-top-style:var(--tw-border-style);border-top-width:0}.ui\:last\:mt-0:last-child{margin-top:calc(var(--ui-spacing) * 0)}.ui\:last\:border-b:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ui\:last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.ui\:focus-within\:border-ring:focus-within{border-color:var(--ring)}.ui\:focus-within\:ring-\[3px\]:focus-within{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:focus-within\:ring-ring\/50:focus-within{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.ui\:focus-within\:ring-ring\/50:focus-within{--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}@media (hover:hover){.ui\:hover\:-translate-y-0\.5:hover{--tw-translate-y:calc(var(--ui-spacing) * -.5);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:hover\:-translate-y-1:hover{--tw-translate-y:calc(var(--ui-spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:hover\:cursor-pointer:hover{cursor:pointer}.ui\:hover\:border:hover{border-style:var(--tw-border-style);border-width:1px}.ui\:hover\:border-\[var\(--landing-accent\)\]:hover{border-color:var(--landing-accent)}.ui\:hover\:border-\[var\(--landing-accent-fg\)\]\/30:hover{border-color:var(--landing-accent-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:border-\[var\(--landing-accent-fg\)\]\/30:hover{border-color:color-mix(in oklab, var(--landing-accent-fg) 30%, transparent)}}.ui\:hover\:border-\[var\(--landing-bg\)\]\/60:hover{border-color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:border-\[var\(--landing-bg\)\]\/60:hover{border-color:color-mix(in oklab, var(--landing-bg) 60%, transparent)}}.ui\:hover\:border-\[var\(--landing-border\)\]:hover{border-color:var(--landing-border)}.ui\:hover\:border-\[var\(--landing-fg\)\]\/30:hover{border-color:var(--landing-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:border-\[var\(--landing-fg\)\]\/30:hover{border-color:color-mix(in oklab, var(--landing-fg) 30%, transparent)}}.ui\:hover\:border-primary\/40:hover{border-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:border-primary\/40:hover{border-color:color-mix(in oklab, var(--primary) 40%, transparent)}}.ui\:hover\:bg-\[\#2c2b29\]:hover{background-color:#2c2b29}.ui\:hover\:bg-\[\#14171f\]:hover{background-color:#14171f}.ui\:hover\:bg-\[\#e2e1d9\]:hover{background-color:#e2e1d9}.ui\:hover\:bg-\[\#ebeae3\]:hover{background-color:#ebeae3}.ui\:hover\:bg-\[var\(--landing-accent\)\]:hover,.ui\:hover\:bg-\[var\(--landing-accent\)\]\/90:hover{background-color:var(--landing-accent)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-\[var\(--landing-accent\)\]\/90:hover{background-color:color-mix(in oklab, var(--landing-accent) 90%, transparent)}}.ui\:hover\:bg-\[var\(--landing-accent-fg\)\]\/5:hover{background-color:var(--landing-accent-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-\[var\(--landing-accent-fg\)\]\/5:hover{background-color:color-mix(in oklab, var(--landing-accent-fg) 5%, transparent)}}.ui\:hover\:bg-\[var\(--landing-accent-fg\)\]\/10:hover{background-color:var(--landing-accent-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-\[var\(--landing-accent-fg\)\]\/10:hover{background-color:color-mix(in oklab, var(--landing-accent-fg) 10%, transparent)}}.ui\:hover\:bg-\[var\(--landing-accent-fg\)\]\/90:hover{background-color:var(--landing-accent-fg)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-\[var\(--landing-accent-fg\)\]\/90:hover{background-color:color-mix(in oklab, var(--landing-accent-fg) 90%, transparent)}}.ui\:hover\:bg-\[var\(--landing-bg\)\]\/10:hover{background-color:var(--landing-bg)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-\[var\(--landing-bg\)\]\/10:hover{background-color:color-mix(in oklab, var(--landing-bg) 10%, transparent)}}.ui\:hover\:bg-\[var\(--landing-bg-section\)\]:hover{background-color:var(--landing-bg-section)}.ui\:hover\:bg-\[var\(--landing-button-primary-bg-hover\)\]:hover{background-color:var(--landing-button-primary-bg-hover)}.ui\:hover\:bg-\[var\(--landing-button-secondary-bg-hover\)\]:hover{background-color:var(--landing-button-secondary-bg-hover)}.ui\:hover\:bg-\[var\(--landing-button-tertiary-bg-hover\)\]:hover{background-color:var(--landing-button-tertiary-bg-hover)}.ui\:hover\:bg-\[var\(--landing-card\)\]:hover{background-color:var(--landing-card)}.ui\:hover\:bg-\[var\(--landing-card-soft\)\]:hover,.ui\:hover\:bg-\[var\(--landing-card-soft\)\]\/30:hover{background-color:var(--landing-card-soft)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-\[var\(--landing-card-soft\)\]\/30:hover{background-color:color-mix(in oklab, var(--landing-card-soft) 30%, transparent)}}.ui\:hover\:bg-\[var\(--landing-card-soft\)\]\/40:hover{background-color:var(--landing-card-soft)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-\[var\(--landing-card-soft\)\]\/40:hover{background-color:color-mix(in oklab, var(--landing-card-soft) 40%, transparent)}}.ui\:hover\:bg-\[var\(--landing-card-soft\)\]\/60:hover{background-color:var(--landing-card-soft)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-\[var\(--landing-card-soft\)\]\/60:hover{background-color:color-mix(in oklab, var(--landing-card-soft) 60%, transparent)}}.ui\:hover\:bg-\[var\(--landing-fg\)\]:hover{background-color:var(--landing-fg)}.ui\:hover\:bg-accent:hover,.ui\:hover\:bg-accent\/25:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-accent\/25:hover{background-color:color-mix(in oklab, var(--accent) 25%, transparent)}}.ui\:hover\:bg-accent\/50:hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-accent\/50:hover{background-color:color-mix(in oklab, var(--accent) 50%, transparent)}}.ui\:hover\:bg-amber-500\/10:hover{background-color:var(--ui-color-amber-500)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-amber-500\/10:hover{background-color:color-mix(in oklab, var(--ui-color-amber-500) 10%, transparent)}}.ui\:hover\:bg-black\/20:hover{background-color:var(--ui-color-black)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-black\/20:hover{background-color:color-mix(in oklab, var(--ui-color-black) 20%, transparent)}}.ui\:hover\:bg-black\/80:hover{background-color:var(--ui-color-black)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-black\/80:hover{background-color:color-mix(in oklab, var(--ui-color-black) 80%, transparent)}}.ui\:hover\:bg-muted:hover,.ui\:hover\:bg-muted\/40:hover{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-muted\/40:hover{background-color:color-mix(in oklab, var(--muted) 40%, transparent)}}.ui\:hover\:bg-muted\/50:hover{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-muted\/50:hover{background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}.ui\:hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, var(--primary) 90%, transparent)}}.ui\:hover\:bg-sidebar-accent:hover{background-color:var(--sidebar-accent)}.ui\:hover\:bg-transparent\!:hover{background-color:#0000!important}.ui\:hover\:bg-white:hover,.ui\:hover\:bg-white\/5:hover{background-color:var(--ui-color-white)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-white\/5:hover{background-color:color-mix(in oklab, var(--ui-color-white) 5%, transparent)}}.ui\:hover\:bg-white\/10:hover{background-color:var(--ui-color-white)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:bg-white\/10:hover{background-color:color-mix(in oklab, var(--ui-color-white) 10%, transparent)}}.ui\:hover\:text-\[\#1a1a1a\]:hover{color:#1a1a1a}.ui\:hover\:text-\[\#e9eaed\]:hover{color:#e9eaed}.ui\:hover\:text-\[var\(--landing-accent\)\]:hover{color:var(--landing-accent)}.ui\:hover\:text-\[var\(--landing-accent-fg\)\]:hover{color:var(--landing-accent-fg)}.ui\:hover\:text-\[var\(--landing-bg\)\]:hover{color:var(--landing-bg)}.ui\:hover\:text-\[var\(--landing-fg\)\]:hover{color:var(--landing-fg)}.ui\:hover\:text-\[var\(--landing-fg-muted\)\]:hover{color:var(--landing-fg-muted)}.ui\:hover\:text-accent-foreground:hover{color:var(--accent-foreground)}.ui\:hover\:text-foreground:hover{color:var(--foreground)}.ui\:hover\:text-muted-foreground:hover{color:var(--muted-foreground)}.ui\:hover\:text-primary:hover{color:var(--primary)}.ui\:hover\:text-sidebar-accent-foreground:hover{color:var(--sidebar-accent-foreground)}.ui\:hover\:underline:hover{text-decoration-line:underline}.ui\:hover\:opacity-90:hover{opacity:.9}.ui\:hover\:opacity-100:hover{opacity:1}.ui\:hover\:shadow-2xs:hover{--tw-shadow:0 1px var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:hover\:shadow-\[0_0_0_1px_var\(--sidebar-accent\)\]:hover{--tw-shadow:0 0 0 1px var(--tw-shadow-color,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)}.ui\: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)}.ui\:hover\:shadow-xl:hover{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:hover\:ring-2:hover{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:hover\:shadow-primary\/5:hover{--tw-shadow-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:shadow-primary\/5:hover{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--primary) 5%, transparent) var(--tw-shadow-alpha), transparent)}}.ui\:hover\:ring-primary\/40:hover{--tw-ring-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:hover\:ring-primary\/40:hover{--tw-ring-color:color-mix(in oklab, var(--primary) 40%, transparent)}}.ui\:hover\:ring-inset:hover{--tw-ring-inset:inset}.ui\:group-aria-disabled\/file-drop-zone-trigger\:hover\:cursor-not-allowed:is(:where(.ui\:group\/file-drop-zone-trigger)[aria-disabled=true] *):hover{cursor:not-allowed}.ui\:hover\:group-data-\[collapsible\=offcanvas\]\:bg-sidebar:hover:is(:where(.ui\:group)[data-collapsible=offcanvas] *){background-color:var(--sidebar)}.ui\:hover\:after\:bg-sidebar-border:hover:after{content:var(--tw-content);background-color:var(--sidebar-border)}}.ui\:focus\:bg-accent:focus{background-color:var(--accent)}.ui\:focus\:text-accent-foreground:focus{color:var(--accent-foreground)}.ui\: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)}.ui\:focus\:ring-ring:focus{--tw-ring-color:var(--ring)}.ui\: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)}.ui\:focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.ui\:focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}.ui\:focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.ui\:focus-visible\:border-ring:focus-visible{border-color:var(--ring)}.ui\:focus-visible\:ring-0:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:focus-visible\:ring-0\!:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor)!important;box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)!important}.ui\: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)}.ui\:focus-visible\:ring-\[3px\]:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:focus-visible\:ring-\[var\(--landing-accent\)\]\/50:focus-visible{--tw-ring-color:var(--landing-accent)}@supports (color:color-mix(in lab, red, red)){.ui\:focus-visible\:ring-\[var\(--landing-accent\)\]\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--landing-accent) 50%, transparent)}}.ui\:focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.ui\:focus-visible\:ring-destructive\/20:focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.ui\:focus-visible\:ring-ring:focus-visible,.ui\:focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.ui\:focus-visible\:ring-ring\/50:focus-visible{--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.ui\:focus-visible\:ring-offset-0\!:focus-visible{--tw-ring-offset-width:0px!important;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)!important}.ui\: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)}.ui\:focus-visible\:outline-hidden:focus-visible{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.ui\:focus-visible\:outline-hidden:focus-visible{outline-offset:2px;outline:2px solid #0000}}.ui\:focus-visible\:outline-1:focus-visible{outline-style:var(--tw-outline-style);outline-width:1px}.ui\:focus-visible\:outline-ring:focus-visible{outline-color:var(--ring)}.ui\:focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.ui\:active\:translate-y-px:active{--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:active\:bg-sidebar-accent:active{background-color:var(--sidebar-accent)}.ui\:active\:text-sidebar-accent-foreground:active{color:var(--sidebar-accent-foreground)}.ui\:disabled\:pointer-events-none:disabled{pointer-events:none}.ui\:disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.ui\:disabled\:opacity-30:disabled{opacity:.3}.ui\:disabled\:opacity-40:disabled{opacity:.4}.ui\:disabled\:opacity-50:disabled{opacity:.5}:where([data-side=left]) .ui\:in-data-\[side\=left\]\:cursor-w-resize{cursor:w-resize}:where([data-side=right]) .ui\:in-data-\[side\=right\]\:cursor-e-resize{cursor:e-resize}:where([data-slot=tooltip-content]) .ui\:in-data-\[slot\=tooltip-content\]\:bg-background\/20{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){:where([data-slot=tooltip-content]) .ui\:in-data-\[slot\=tooltip-content\]\:bg-background\/20{background-color:color-mix(in oklab, var(--background) 20%, transparent)}}:where([data-slot=tooltip-content]) .ui\:in-data-\[slot\=tooltip-content\]\:text-background{color:var(--background)}.ui\:has-data-\[slot\=card-action\]\:grid-cols-\[1fr_auto\]:has([data-slot=card-action]){grid-template-columns:1fr auto}.ui\:has-data-\[state\=checked\]\:border-primary:has([data-state=checked]){border-color:var(--primary)}.ui\:has-data-\[state\=checked\]\:bg-primary\/5:has([data-state=checked]){background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:has-data-\[state\=checked\]\:bg-primary\/5:has([data-state=checked]){background-color:color-mix(in oklab, var(--primary) 5%, transparent)}}.ui\:has-data-\[variant\=inset\]\:bg-sidebar:has([data-variant=inset]){background-color:var(--sidebar)}.ui\:has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:border-ring:has([data-slot=input-group-control]:focus-visible){border-color:var(--ring)}.ui\:has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:ring-\[3px\]:has([data-slot=input-group-control]:focus-visible){--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:ring-ring\/50:has([data-slot=input-group-control]:focus-visible){--tw-ring-color:var(--ring)}@supports (color:color-mix(in lab, red, red)){.ui\:has-\[\[data-slot\=input-group-control\]\:focus-visible\]\:ring-ring\/50:has([data-slot=input-group-control]:focus-visible){--tw-ring-color:color-mix(in oklab, var(--ring) 50%, transparent)}}.ui\:has-\[\[data-slot\]\[aria-invalid\=true\]\]\:border-destructive:has([data-slot][aria-invalid=true]){border-color:var(--destructive)}.ui\:has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/20:has([data-slot][aria-invalid=true]){--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.ui\:has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/20:has([data-slot][aria-invalid=true]){--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.ui\:has-\[\>\[data-align\=block-end\]\]\:h-auto:has(>[data-align=block-end]){height:auto}.ui\:has-\[\>\[data-align\=block-end\]\]\:flex-col:has(>[data-align=block-end]){flex-direction:column}.ui\:has-\[\>\[data-align\=block-start\]\]\:h-auto:has(>[data-align=block-start]){height:auto}.ui\:has-\[\>\[data-align\=block-start\]\]\:flex-col:has(>[data-align=block-start]){flex-direction:column}.ui\:has-\[\>\[data-slot\=button-group\]\]\:gap-2:has(>[data-slot=button-group]){gap:calc(var(--ui-spacing) * 2)}.ui\:has-\[\>\[data-slot\=checkbox-group\]\]\:gap-3:has(>[data-slot=checkbox-group]){gap:calc(var(--ui-spacing) * 3)}.ui\:has-\[\>\[data-slot\=field-content\]\]\:items-start:has(>[data-slot=field-content]){align-items:flex-start}.ui\:has-\[\>\[data-slot\=field\]\]\:w-full:has(>[data-slot=field]){width:100%}.ui\:has-\[\>\[data-slot\=field\]\]\:cursor-pointer:has(>[data-slot=field]){cursor:pointer}.ui\:has-\[\>\[data-slot\=field\]\]\:flex-col:has(>[data-slot=field]){flex-direction:column}.ui\:has-\[\>\[data-slot\=field\]\]\:rounded-md:has(>[data-slot=field]){border-radius:calc(var(--radius) - 2px)}.ui\:has-\[\>\[data-slot\=field\]\]\:border:has(>[data-slot=field]){border-style:var(--tw-border-style);border-width:1px}@media (hover:hover){.ui\:has-\[\>\[data-slot\=field\]\]\:hover\:bg-primary\/5:has(>[data-slot=field]):hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:has-\[\>\[data-slot\=field\]\]\:hover\:bg-primary\/5:has(>[data-slot=field]):hover{background-color:color-mix(in oklab, var(--primary) 5%, transparent)}}}.ui\:has-\[\>\[data-slot\=radio-group\]\]\:gap-3:has(>[data-slot=radio-group]){gap:calc(var(--ui-spacing) * 3)}.ui\:has-\[\>button\]\:ms-\[-0\.45rem\]:has(>button){margin-inline-start:-.45rem}.ui\:has-\[\>button\]\:me-\[-0\.45rem\]:has(>button){margin-inline-end:-.45rem}.ui\:has-\[\>kbd\]\:ms-\[-0\.35rem\]:has(>kbd){margin-inline-start:-.35rem}.ui\:has-\[\>kbd\]\:me-\[-0\.35rem\]:has(>kbd){margin-inline-end:-.35rem}.ui\:has-\[\>svg\]\:grid-cols-\[calc\(var\(--spacing\)\*4\)_1fr\]:has(>svg){grid-template-columns:calc(var(--spacing) * 4) 1fr}.ui\:has-\[\>svg\]\:gap-x-3:has(>svg){column-gap:calc(var(--ui-spacing) * 3)}.ui\:has-\[\>svg\]\:p-0:has(>svg){padding:calc(var(--ui-spacing) * 0)}.ui\:has-\[\>svg\]\:px-2:has(>svg){padding-inline:calc(var(--ui-spacing) * 2)}.ui\:has-\[\>svg\]\:px-2\.5:has(>svg){padding-inline:calc(var(--ui-spacing) * 2.5)}.ui\:has-\[\>svg\]\:px-3:has(>svg){padding-inline:calc(var(--ui-spacing) * 3)}.ui\:has-\[\>svg\]\:px-4:has(>svg){padding-inline:calc(var(--ui-spacing) * 4)}.ui\:has-\[\>textarea\]\:h-auto:has(>textarea){height:auto}.ui\:aria-disabled\:pointer-events-none[aria-disabled=true]{pointer-events:none}.ui\:aria-disabled\:opacity-50[aria-disabled=true]{opacity:.5}.ui\:aria-invalid\:border-destructive[aria-invalid=true]{border-color:var(--destructive)}.ui\:aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.ui\:aria-invalid\:ring-destructive\/20[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.ui\:aria-selected\:bg-accent[aria-selected=true]{background-color:var(--accent)}.ui\:aria-selected\:text-accent-foreground[aria-selected=true]{color:var(--accent-foreground)}:is(.ui\:\*\*\:data-command-group\:px-2 *)[data-command-group]{padding-inline:calc(var(--ui-spacing) * 2)}:is(.ui\:\*\*\:data-command-input\:h-12 *)[data-command-input]{height:calc(var(--ui-spacing) * 12)}:is(.ui\:\*\*\:data-command-item\:px-2 *)[data-command-item]{padding-inline:calc(var(--ui-spacing) * 2)}:is(.ui\:\*\*\:data-command-item\:py-3 *)[data-command-item]{padding-block:calc(var(--ui-spacing) * 3)}.ui\:data-disabled\:pointer-events-none[data-disabled]{pointer-events:none}.ui\:data-disabled\:cursor-not-allowed[data-disabled]{cursor:not-allowed}.ui\:data-disabled\:opacity-50[data-disabled]{opacity:.5}.ui\:data-highlighted\:bg-accent[data-highlighted]{background-color:var(--accent)}.ui\:data-highlighted\:text-accent-foreground[data-highlighted]{color:var(--accent-foreground)}.ui\:data-inset\:pl-8[data-inset]{padding-left:calc(var(--ui-spacing) * 8)}.ui\:data-placeholder\:text-muted-foreground[data-placeholder]{color:var(--muted-foreground)}.ui\:data-\[active\=true\]\:bg-accent\/50[data-active=true]{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.ui\:data-\[active\=true\]\:bg-accent\/50[data-active=true]{background-color:color-mix(in oklab, var(--accent) 50%, transparent)}}.ui\:data-\[active\=true\]\:bg-primary\/10[data-active=true]{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:data-\[active\=true\]\:bg-primary\/10[data-active=true]{background-color:color-mix(in oklab, var(--primary) 10%, transparent)}}.ui\:data-\[active\=true\]\:text-accent-foreground[data-active=true]{color:var(--accent-foreground)}.ui\:data-\[active\=true\]\:text-primary[data-active=true]{color:var(--primary)}@media (hover:hover){.ui\:data-\[active\=true\]\:hover\:bg-accent[data-active=true]:hover{background-color:var(--accent)}}.ui\:data-\[active\=true\]\:focus\:bg-accent[data-active=true]:focus{background-color:var(--accent)}.ui\:data-\[collapsed\=true\]\:max-h-\[300px\][data-collapsed=true]{max-height:300px}.ui\:data-\[current\=true\]\:bg-muted[data-current=true]{background-color:var(--muted)}.ui\:data-\[disabled\=true\]\:pointer-events-none[data-disabled=true]{pointer-events:none}.ui\:data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.ui\:data-\[inset\]\:pl-8[data-inset]{padding-left:calc(var(--ui-spacing) * 8)}.ui\:data-\[invalid\=true\]\:text-destructive[data-invalid=true]{color:var(--destructive)}.ui\:data-\[motion\=from-end\]\:slide-in-from-end-52[data-motion=from-end]:where(:dir(ltr),[dir=ltr]){--tw-enter-translate-x:calc(52*var(--spacing))}.ui\:data-\[motion\=from-end\]\:slide-in-from-end-52[data-motion=from-end]:where(:dir(rtl),[dir=rtl]),.ui\:data-\[motion\=from-start\]\:slide-in-from-start-52[data-motion=from-start]:where(:dir(ltr),[dir=ltr]){--tw-enter-translate-x:calc(52*var(--spacing)*-1)}.ui\:data-\[motion\=from-start\]\:slide-in-from-start-52[data-motion=from-start]:where(:dir(rtl),[dir=rtl]){--tw-enter-translate-x:calc(52*var(--spacing))}.ui\:data-\[motion\=to-end\]\:slide-out-to-end-52[data-motion=to-end]:where(:dir(ltr),[dir=ltr]){--tw-exit-translate-x:calc(52*var(--spacing))}.ui\:data-\[motion\=to-end\]\:slide-out-to-end-52[data-motion=to-end]:where(:dir(rtl),[dir=rtl]),.ui\:data-\[motion\=to-start\]\:slide-out-to-start-52[data-motion=to-start]:where(:dir(ltr),[dir=ltr]){--tw-exit-translate-x:calc(52*var(--spacing)*-1)}.ui\:data-\[motion\=to-start\]\:slide-out-to-start-52[data-motion=to-start]:where(:dir(rtl),[dir=rtl]){--tw-exit-translate-x:calc(52*var(--spacing))}.ui\:data-\[motion\^\=from-\]\:animate-in[data-motion^=from-]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ui\:data-\[motion\^\=from-\]\:fade-in[data-motion^=from-]{--tw-enter-opacity:0}.ui\:data-\[motion\^\=to-\]\:animate-out[data-motion^=to-]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ui\:data-\[motion\^\=to-\]\:fade-out[data-motion^=to-]{--tw-exit-opacity:0}.ui\:data-\[orientation\=horizontal\]\:h-px[data-orientation=horizontal]{height:1px}.ui\:data-\[orientation\=horizontal\]\:w-full[data-orientation=horizontal]{width:100%}.ui\:data-\[orientation\=vertical\]\:h-auto[data-orientation=vertical]{height:auto}.ui\:data-\[orientation\=vertical\]\:h-full[data-orientation=vertical]{height:100%}.ui\:data-\[orientation\=vertical\]\:w-px[data-orientation=vertical]{width:1px}.ui\:data-\[side\=bottom\]\:-translate-x-1\/2[data-side=bottom]{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:data-\[side\=bottom\]\:-translate-y-\[calc\(-50\%\+1px\)\][data-side=bottom]{--tw-translate-y:calc(calc(-50% + 1px) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:calc(var(--ui-spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:data-\[side\=bottom\]\:slide-in-from-top-2[data-side=bottom]{--tw-enter-translate-y:calc(2*var(--spacing)*-1)}.ui\:data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:calc(var(--ui-spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:data-\[side\=left\]\:-translate-y-\[calc\(50\%-3px\)\][data-side=left]{--tw-translate-y:calc(calc(50% - 3px) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:data-\[side\=left\]\:slide-in-from-end-2[data-side=left]:where(:dir(ltr),[dir=ltr]){--tw-enter-translate-x:calc(2*var(--spacing))}.ui\:data-\[side\=left\]\:slide-in-from-end-2[data-side=left]:where(:dir(rtl),[dir=rtl]){--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.ui\:data-\[side\=left\]\:slide-in-from-right-2[data-side=left]{--tw-enter-translate-x:calc(2*var(--spacing))}.ui\:data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:calc(var(--ui-spacing) * 1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:data-\[side\=right\]\:translate-x-\[calc\(50\%\+2px\)\][data-side=right]{--tw-translate-x:calc(50% + 2px);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:data-\[side\=right\]\:translate-y-1\/2[data-side=right]{--tw-translate-y:calc(1 / 2 * 100%);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:data-\[side\=right\]\:slide-in-from-start-2[data-side=right]:where(:dir(ltr),[dir=ltr]){--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.ui\:data-\[side\=right\]\:slide-in-from-start-2[data-side=right]:where(:dir(rtl),[dir=rtl]){--tw-enter-translate-x:calc(2*var(--spacing))}.ui\:data-\[side\=right\]\:slide-in-from-left-2[data-side=right]{--tw-enter-translate-x:calc(2*var(--spacing)*-1)}.ui\:data-\[side\=top\]\:translate-x-1\/2[data-side=top]{--tw-translate-x:calc(1 / 2 * 100%);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:calc(var(--ui-spacing) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:data-\[side\=top\]\:translate-y-\[calc\(-50\%\+2px\)\][data-side=top]{--tw-translate-y:calc(-50% + 2px);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:data-\[side\=top\]\:slide-in-from-bottom-2[data-side=top]{--tw-enter-translate-y:calc(2*var(--spacing))}.ui\:data-\[size\=default\]\:h-9[data-size=default]{height:calc(var(--ui-spacing) * 9)}.ui\:data-\[size\=sm\]\:h-8[data-size=sm]{height:calc(var(--ui-spacing) * 8)}.ui\:data-\[slot\=checkbox-group\]\:gap-3[data-slot=checkbox-group]{gap:calc(var(--ui-spacing) * 3)}:is(.ui\:\*\:data-\[slot\=field\]\:p-4>*)[data-slot=field]{padding:calc(var(--ui-spacing) * 4)}:is(.ui\:\*\:data-\[slot\=field-group\]\:gap-4>*)[data-slot=field-group]{gap:calc(var(--ui-spacing) * 4)}:is(.ui\:\*\*\:data-\[slot\=navigation-menu-link\]\:focus\:ring-0 *)[data-slot=navigation-menu-link]:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}:is(.ui\:\*\*\:data-\[slot\=navigation-menu-link\]\:focus\:outline-none *)[data-slot=navigation-menu-link]:focus{--tw-outline-style:none;outline-style:none}:is(.ui\:\*\*\:data-\[slot\=select-value\]\:line-clamp-1 *)[data-slot=select-value]{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}:is(.ui\:\*\*\:data-\[slot\=select-value\]\:flex *)[data-slot=select-value]{display:flex}:is(.ui\:\*\*\:data-\[slot\=select-value\]\:items-center *)[data-slot=select-value]{align-items:center}:is(.ui\:\*\*\:data-\[slot\=select-value\]\:gap-2 *)[data-slot=select-value]{gap:calc(var(--ui-spacing) * 2)}.ui\:data-\[state\=active\]\:bg-background[data-state=active]{background-color:var(--background)}.ui\:data-\[state\=active\]\:text-foreground[data-state=active]{color:var(--foreground)}.ui\:data-\[state\=active\]\:shadow-sm[data-state=active]{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ui\:data-\[state\=checked\]\:translate-x-\[calc\(100\%-2px\)\][data-state=checked]{--tw-translate-x:calc(100% - 2px);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:data-\[state\=checked\]\:border-primary[data-state=checked]{border-color:var(--primary)}.ui\:data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:var(--primary)}.ui\:data-\[state\=checked\]\:text-primary-foreground[data-state=checked]{color:var(--primary-foreground)}.ui\:data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:accordion-up var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ui\:data-\[state\=closed\]\:animate-out[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ui\:data-\[state\=closed\]\:duration-300[data-state=closed]{--tw-duration:.3s;transition-duration:.3s}.ui\:data-\[state\=closed\]\:fade-out-0[data-state=closed]{--tw-exit-opacity:0}.ui\:data-\[state\=closed\]\:zoom-out-95[data-state=closed]{--tw-exit-scale:.95}.ui\:data-\[state\=closed\]\:slide-out-to-bottom[data-state=closed]{--tw-exit-translate-y:100%}.ui\:data-\[state\=closed\]\:slide-out-to-left[data-state=closed]{--tw-exit-translate-x:-100%}.ui\:data-\[state\=closed\]\:slide-out-to-right[data-state=closed]{--tw-exit-translate-x:100%}.ui\:data-\[state\=closed\]\:slide-out-to-top[data-state=closed]{--tw-exit-translate-y:-100%}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:animate-out:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *)[data-state=closed]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:fade-out-0:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *)[data-state=closed]{--tw-exit-opacity:0}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=closed\]\:zoom-out-95:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *)[data-state=closed]{--tw-exit-scale:.95}.ui\:data-\[state\=hidden\]\:animate-out[data-state=hidden]{animation:exit var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ui\:data-\[state\=hidden\]\:fade-out[data-state=hidden]{--tw-exit-opacity:0}.ui\:data-\[state\=off\]\:text-muted-foreground[data-state=off]{color:var(--muted-foreground)}@media (hover:hover){.ui\:hover\:data-\[state\=off\]\:text-accent-foreground:hover[data-state=off]{color:var(--accent-foreground)}}.ui\:data-\[state\=on\]\:bg-accent[data-state=on]{background-color:var(--accent)}.ui\:data-\[state\=on\]\:bg-primary[data-state=on]{background-color:var(--primary)}.ui\:data-\[state\=on\]\:bg-transparent[data-state=on]{background-color:#0000}.ui\:data-\[state\=on\]\:text-accent-foreground[data-state=on]{color:var(--accent-foreground)}.ui\:data-\[state\=on\]\:text-muted-foreground[data-state=on]{color:var(--muted-foreground)}.ui\:data-\[state\=on\]\:text-primary-foreground[data-state=on]{color:var(--primary-foreground)}@media (hover:hover){.ui\:hover\:data-\[state\=on\]\:text-accent-foreground:hover[data-state=on]{color:var(--accent-foreground)}}.ui\:data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:accordion-down var(--tw-animation-duration,var(--tw-duration,.2s))var(--tw-ease,ease-out)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ui\:data-\[state\=open\]\:animate-in[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ui\:data-\[state\=open\]\:bg-accent[data-state=open],.ui\:data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.ui\:data-\[state\=open\]\:bg-accent\/50[data-state=open]{background-color:color-mix(in oklab, var(--accent) 50%, transparent)}}.ui\:data-\[state\=open\]\:text-accent-foreground[data-state=open]{color:var(--accent-foreground)}.ui\:data-\[state\=open\]\:opacity-100[data-state=open]{opacity:1}.ui\:data-\[state\=open\]\:duration-500[data-state=open]{--tw-duration:.5s;transition-duration:.5s}.ui\:data-\[state\=open\]\:fade-in-0[data-state=open]{--tw-enter-opacity:0}.ui\:data-\[state\=open\]\:zoom-in-90[data-state=open]{--tw-enter-scale:.9}.ui\:data-\[state\=open\]\:zoom-in-95[data-state=open]{--tw-enter-scale:.95}.ui\:data-\[state\=open\]\:slide-in-from-bottom[data-state=open]{--tw-enter-translate-y:100%}.ui\:data-\[state\=open\]\:slide-in-from-left[data-state=open]{--tw-enter-translate-x:-100%}.ui\:data-\[state\=open\]\:slide-in-from-right[data-state=open]{--tw-enter-translate-x:100%}.ui\:data-\[state\=open\]\:slide-in-from-top[data-state=open]{--tw-enter-translate-y:-100%}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:animate-in:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *)[data-state=open]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:fade-in-0:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *)[data-state=open]{--tw-enter-opacity:0}.ui\:group-data-\[viewport\=false\]\/navigation-menu\:data-\[state\=open\]\:zoom-in-95:is(:where(.ui\:group\/navigation-menu)[data-viewport=false] *)[data-state=open]{--tw-enter-scale:.95}@media (hover:hover){.ui\:data-\[state\=open\]\:hover\:bg-accent[data-state=open]:hover{background-color:var(--accent)}.ui\:data-\[state\=open\]\:hover\:bg-sidebar-accent[data-state=open]:hover{background-color:var(--sidebar-accent)}.ui\:data-\[state\=open\]\:hover\:text-sidebar-accent-foreground[data-state=open]:hover{color:var(--sidebar-accent-foreground)}}.ui\:data-\[state\=open\]\:focus\:bg-accent[data-state=open]:focus{background-color:var(--accent)}.ui\:data-\[state\=selected\]\:bg-muted[data-state=selected]{background-color:var(--muted)}.ui\:data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:calc(var(--ui-spacing) * 0);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:var(--input)}.ui\:data-\[state\=visible\]\:animate-in[data-state=visible]{animation:enter var(--tw-animation-duration,var(--tw-duration,.15s))var(--tw-ease,ease)var(--tw-animation-delay,0s)var(--tw-animation-iteration-count,1)var(--tw-animation-direction,normal)var(--tw-animation-fill-mode,none)}.ui\:data-\[state\=visible\]\:fade-in[data-state=visible]{--tw-enter-opacity:0}.ui\:data-\[variant\=destructive\]\:text-destructive[data-variant=destructive]{color:var(--destructive)}.ui\:data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.ui\:data-\[variant\=destructive\]\:focus\:bg-destructive\/10[data-variant=destructive]:focus{background-color:color-mix(in oklab, var(--destructive) 10%, transparent)}}.ui\:data-\[variant\=destructive\]\:focus\:text-destructive[data-variant=destructive]:focus{color:var(--destructive)}.ui\:data-\[variant\=destructive\]\:data-highlighted\:bg-destructive\/10[data-variant=destructive][data-highlighted]{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.ui\:data-\[variant\=destructive\]\:data-highlighted\:bg-destructive\/10[data-variant=destructive][data-highlighted]{background-color:color-mix(in oklab, var(--destructive) 10%, transparent)}}.ui\:data-\[variant\=destructive\]\:data-highlighted\:text-destructive[data-variant=destructive][data-highlighted]{color:var(--destructive)}.ui\:data-\[variant\=label\]\:text-sm[data-variant=label]{font-size:var(--ui-text-sm);line-height:var(--tw-leading,var(--ui-text-sm--line-height))}.ui\:data-\[variant\=legend\]\:text-base[data-variant=legend]{font-size:var(--ui-text-base);line-height:var(--tw-leading,var(--ui-text-base--line-height))}.ui\:data-\[vaul-drawer-direction\=bottom\]\:inset-x-0[data-vaul-drawer-direction=bottom]{inset-inline:calc(var(--ui-spacing) * 0)}.ui\:data-\[vaul-drawer-direction\=bottom\]\:bottom-0[data-vaul-drawer-direction=bottom]{bottom:calc(var(--ui-spacing) * 0)}.ui\:data-\[vaul-drawer-direction\=bottom\]\:mt-24[data-vaul-drawer-direction=bottom]{margin-top:calc(var(--ui-spacing) * 24)}.ui\:data-\[vaul-drawer-direction\=bottom\]\:max-h-\[80vh\][data-vaul-drawer-direction=bottom]{max-height:80vh}.ui\:data-\[vaul-drawer-direction\=bottom\]\:rounded-t-lg[data-vaul-drawer-direction=bottom]{border-top-left-radius:var(--radius);border-top-right-radius:var(--radius)}.ui\:data-\[vaul-drawer-direction\=bottom\]\:border-t[data-vaul-drawer-direction=bottom]{border-top-style:var(--tw-border-style);border-top-width:1px}.ui\:data-\[vaul-drawer-direction\=left\]\:inset-y-0[data-vaul-drawer-direction=left]{inset-block:calc(var(--ui-spacing) * 0)}.ui\:data-\[vaul-drawer-direction\=left\]\:start-0[data-vaul-drawer-direction=left]{inset-inline-start:calc(var(--ui-spacing) * 0)}.ui\:data-\[vaul-drawer-direction\=left\]\:w-3\/4[data-vaul-drawer-direction=left]{width:75%}.ui\:data-\[vaul-drawer-direction\=left\]\:border-e[data-vaul-drawer-direction=left]{border-inline-end-style:var(--tw-border-style);border-inline-end-width:1px}.ui\:data-\[vaul-drawer-direction\=right\]\:inset-y-0[data-vaul-drawer-direction=right]{inset-block:calc(var(--ui-spacing) * 0)}.ui\:data-\[vaul-drawer-direction\=right\]\:end-0[data-vaul-drawer-direction=right]{inset-inline-end:calc(var(--ui-spacing) * 0)}.ui\:data-\[vaul-drawer-direction\=right\]\:w-3\/4[data-vaul-drawer-direction=right]{width:75%}.ui\:data-\[vaul-drawer-direction\=right\]\:border-s[data-vaul-drawer-direction=right]{border-inline-start-style:var(--tw-border-style);border-inline-start-width:1px}.ui\:data-\[vaul-drawer-direction\=top\]\:inset-x-0[data-vaul-drawer-direction=top]{inset-inline:calc(var(--ui-spacing) * 0)}.ui\:data-\[vaul-drawer-direction\=top\]\:top-0[data-vaul-drawer-direction=top]{top:calc(var(--ui-spacing) * 0)}.ui\:data-\[vaul-drawer-direction\=top\]\:mb-24[data-vaul-drawer-direction=top]{margin-bottom:calc(var(--ui-spacing) * 24)}.ui\:data-\[vaul-drawer-direction\=top\]\:max-h-\[80vh\][data-vaul-drawer-direction=top]{max-height:80vh}.ui\:data-\[vaul-drawer-direction\=top\]\:rounded-b-lg[data-vaul-drawer-direction=top]{border-bottom-right-radius:var(--radius);border-bottom-left-radius:var(--radius)}.ui\:data-\[vaul-drawer-direction\=top\]\:border-b[data-vaul-drawer-direction=top]{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ui\:nth-last-2\:-mt-1:nth-last-child(2){margin-top:calc(var(--ui-spacing) * -1)}@supports ((-webkit-backdrop-filter:var(--tw)) or (backdrop-filter:var(--tw))){.ui\:supports-\[backdrop-filter\]\:bg-background\/80{background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){.ui\:supports-\[backdrop-filter\]\:bg-background\/80{background-color:color-mix(in oklab, var(--background) 80%, transparent)}}}@media (min-width:40rem){.ui\:sm\:top-6{top:calc(var(--ui-spacing) * 6)}.ui\:sm\:bottom-6{bottom:calc(var(--ui-spacing) * 6)}.ui\:sm\:col-span-2{grid-column:span 2/span 2}.ui\:sm\:flex{display:flex}.ui\:sm\:inline-flex{display:inline-flex}.ui\:sm\:w-64{width:calc(var(--ui-spacing) * 64)}.ui\:sm\:max-w-lg{max-width:var(--ui-container-lg)}.ui\:sm\:max-w-sm{max-width:var(--ui-container-sm)}.ui\:sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.ui\:sm\:flex-row{flex-direction:row}.ui\:sm\:items-center{align-items:center}.ui\:sm\:items-end{align-items:flex-end}.ui\:sm\:justify-between{justify-content:space-between}.ui\:sm\:justify-end{justify-content:flex-end}.ui\:sm\:gap-2\.5{gap:calc(var(--ui-spacing) * 2.5)}.ui\:sm\:gap-3{gap:calc(var(--ui-spacing) * 3)}.ui\:sm\:rounded-lg{border-radius:var(--radius)}.ui\:sm\:border-x{border-inline-style:var(--tw-border-style);border-inline-width:1px}.ui\:sm\:p-6{padding:calc(var(--ui-spacing) * 6)}.ui\:sm\:px-6{padding-inline:calc(var(--ui-spacing) * 6)}.ui\:sm\:py-16{padding-block:calc(var(--ui-spacing) * 16)}.ui\:sm\:py-32{padding-block:calc(var(--ui-spacing) * 32)}.ui\:sm\:pr-2\.5{padding-right:calc(var(--ui-spacing) * 2.5)}.ui\:sm\:pl-2\.5{padding-left:calc(var(--ui-spacing) * 2.5)}.ui\:sm\:text-3xl{font-size:var(--ui-text-3xl);line-height:var(--tw-leading,var(--ui-text-3xl--line-height))}.ui\:sm\:text-5xl{font-size:var(--ui-text-5xl);line-height:var(--tw-leading,var(--ui-text-5xl--line-height))}.ui\:sm\:text-xl{font-size:var(--ui-text-xl);line-height:var(--tw-leading,var(--ui-text-xl--line-height))}.ui\:data-\[vaul-drawer-direction\=left\]\:sm\:max-w-sm[data-vaul-drawer-direction=left],.ui\:data-\[vaul-drawer-direction\=right\]\:sm\:max-w-sm[data-vaul-drawer-direction=right]{max-width:var(--ui-container-sm)}}@media (min-width:48rem){.ui\:md\:absolute{position:absolute}.ui\:md\:top-8{top:calc(var(--ui-spacing) * 8)}.ui\:md\:bottom-8{bottom:calc(var(--ui-spacing) * 8)}.ui\:md\:col-span-1{grid-column:span 1/span 1}.ui\:md\:col-span-4{grid-column:span 4/span 4}.ui\:md\:col-span-7{grid-column:span 7/span 7}.ui\:md\:col-start-9{grid-column-start:9}.ui\:md\:mx-0{margin-inline:calc(var(--ui-spacing) * 0)}.ui\:md\:mt-12{margin-top:calc(var(--ui-spacing) * 12)}.ui\:md\:mb-12{margin-bottom:calc(var(--ui-spacing) * 12)}.ui\:md\:block{display:block}.ui\:md\:flex{display:flex}.ui\:md\:size-\[1\.125rem\]{width:1.125rem;height:1.125rem}.ui\:md\:h-7{height:calc(var(--ui-spacing) * 7)}.ui\:md\:h-8{height:calc(var(--ui-spacing) * 8)}.ui\:md\:h-14{height:calc(var(--ui-spacing) * 14)}.ui\:md\:h-\[220px\]{height:220px}.ui\:md\:h-\[480px\]{height:480px}.ui\:md\:w-24{width:calc(var(--ui-spacing) * 24)}.ui\:md\:w-52{width:calc(var(--ui-spacing) * 52)}.ui\:md\:w-\[var\(--bits-navigation-menu-viewport-width\)\]{width:var(--bits-navigation-menu-viewport-width)}.ui\:md\:w-auto{width:auto}.ui\:md\:w-full{width:100%}.ui\:md\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.ui\:md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.ui\:md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.ui\:md\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.ui\:md\:grid-cols-\[1fr_2fr\]{grid-template-columns:1fr 2fr}.ui\:md\:grid-cols-\[180px_1fr\]{grid-template-columns:180px 1fr}.ui\:md\:grid-cols-\[260px_1fr\]{grid-template-columns:260px 1fr}.ui\:md\:grid-cols-\[auto_1fr\]{grid-template-columns:auto 1fr}.ui\:md\:grid-cols-\[minmax\(0\,1\.4fr\)_repeat\(auto-fit\,minmax\(140px\,1fr\)\)\]{grid-template-columns:minmax(0,1.4fr) repeat(auto-fit,minmax(140px,1fr))}.ui\:md\:grid-cols-\[minmax\(0\,220px\)_1fr\]{grid-template-columns:minmax(0,220px) 1fr}.ui\:md\:flex-col{flex-direction:column}.ui\:md\:flex-row{flex-direction:row}.ui\:md\:items-baseline{align-items:baseline}.ui\:md\:items-center{align-items:center}.ui\:md\:items-end{align-items:flex-end}.ui\:md\:items-start{align-items:flex-start}.ui\:md\:justify-between{justify-content:space-between}.ui\:md\:justify-center{justify-content:center}.ui\:md\:justify-end{justify-content:flex-end}.ui\:md\:gap-4{gap:calc(var(--ui-spacing) * 4)}.ui\:md\:gap-8{gap:calc(var(--ui-spacing) * 8)}.ui\:md\:gap-10{gap:calc(var(--ui-spacing) * 10)}.ui\:md\:gap-x-12{column-gap:calc(var(--ui-spacing) * 12)}.ui\:md\:gap-y-12{row-gap:calc(var(--ui-spacing) * 12)}.ui\:md\:self-auto{align-self:auto}.ui\:md\:overflow-x-auto{overflow-x:auto}.ui\:md\:overflow-x-visible{overflow-x:visible}.ui\:md\:overflow-y-visible{overflow-y:visible}.ui\:md\:border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.ui\:md\:border-b-0{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.ui\:md\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.ui\:md\:border-border{border-color:var(--border)}.ui\:md\:p-6{padding:calc(var(--ui-spacing) * 6)}.ui\:md\:p-8{padding:calc(var(--ui-spacing) * 8)}.ui\:md\:p-12{padding:calc(var(--ui-spacing) * 12)}.ui\:md\:px-6{padding-inline:calc(var(--ui-spacing) * 6)}.ui\:md\:px-8{padding-inline:calc(var(--ui-spacing) * 8)}.ui\:md\:py-0{padding-block:calc(var(--ui-spacing) * 0)}.ui\:md\:py-1{padding-block:calc(var(--ui-spacing) * 1)}.ui\:md\:py-14{padding-block:calc(var(--ui-spacing) * 14)}.ui\:md\:py-16{padding-block:calc(var(--ui-spacing) * 16)}.ui\:md\:py-20{padding-block:calc(var(--ui-spacing) * 20)}.ui\:md\:py-24{padding-block:calc(var(--ui-spacing) * 24)}.ui\:md\:py-28{padding-block:calc(var(--ui-spacing) * 28)}.ui\:md\:py-32{padding-block:calc(var(--ui-spacing) * 32)}.ui\:md\:py-40{padding-block:calc(var(--ui-spacing) * 40)}.ui\:md\:pt-8{padding-top:calc(var(--ui-spacing) * 8)}.ui\:md\:pt-10{padding-top:calc(var(--ui-spacing) * 10)}.ui\:md\:pt-12{padding-top:calc(var(--ui-spacing) * 12)}.ui\:md\:pt-16{padding-top:calc(var(--ui-spacing) * 16)}.ui\:md\:pt-20{padding-top:calc(var(--ui-spacing) * 20)}.ui\:md\:pt-24{padding-top:calc(var(--ui-spacing) * 24)}.ui\:md\:pb-10{padding-bottom:calc(var(--ui-spacing) * 10)}.ui\:md\:pb-12{padding-bottom:calc(var(--ui-spacing) * 12)}.ui\:md\:pb-14{padding-bottom:calc(var(--ui-spacing) * 14)}.ui\:md\:pb-20{padding-bottom:calc(var(--ui-spacing) * 20)}.ui\:md\:pb-24{padding-bottom:calc(var(--ui-spacing) * 24)}.ui\:md\:pb-28{padding-bottom:calc(var(--ui-spacing) * 28)}.ui\:md\:pl-8{padding-left:calc(var(--ui-spacing) * 8)}.ui\:md\:text-right{text-align:right}.ui\:md\:text-2xl{font-size:var(--ui-text-2xl);line-height:var(--tw-leading,var(--ui-text-2xl--line-height))}.ui\:md\:text-3xl{font-size:var(--ui-text-3xl);line-height:var(--tw-leading,var(--ui-text-3xl--line-height))}.ui\:md\:text-4xl{font-size:var(--ui-text-4xl);line-height:var(--tw-leading,var(--ui-text-4xl--line-height))}.ui\:md\:text-5xl{font-size:var(--ui-text-5xl);line-height:var(--tw-leading,var(--ui-text-5xl--line-height))}.ui\:md\:text-6xl{font-size:var(--ui-text-6xl);line-height:var(--tw-leading,var(--ui-text-6xl--line-height))}.ui\:md\:text-7xl{font-size:var(--ui-text-7xl);line-height:var(--tw-leading,var(--ui-text-7xl--line-height))}.ui\:md\:text-lg{font-size:var(--ui-text-lg);line-height:var(--tw-leading,var(--ui-text-lg--line-height))}.ui\:md\:text-sm{font-size:var(--ui-text-sm);line-height:var(--tw-leading,var(--ui-text-sm--line-height))}.ui\:md\:text-xl{font-size:var(--ui-text-xl);line-height:var(--tw-leading,var(--ui-text-xl--line-height))}.ui\:md\:text-\[38px\]{font-size:38px}.ui\:md\:text-\[40px\]{font-size:40px}.ui\:md\:text-\[56px\]{font-size:56px}.ui\:md\:text-\[88px\]{font-size:88px}.ui\:md\:leading-20{--tw-leading:calc(var(--ui-spacing) * 20);line-height:calc(var(--ui-spacing) * 20)}.ui\:md\:opacity-0{opacity:0}.ui\:md\:peer-data-\[variant\=inset\]\:m-2:is(:where(.ui\:peer)[data-variant=inset]~*){margin:calc(var(--ui-spacing) * 2)}.ui\:md\:peer-data-\[variant\=inset\]\:ml-0:is(:where(.ui\:peer)[data-variant=inset]~*){margin-left:calc(var(--ui-spacing) * 0)}.ui\:md\:peer-data-\[variant\=inset\]\:rounded-xl:is(:where(.ui\:peer)[data-variant=inset]~*){border-radius:calc(var(--radius) + 4px)}.ui\:md\:peer-data-\[variant\=inset\]\:shadow-sm:is(:where(.ui\: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)}.ui\:md\:peer-data-\[variant\=inset\]\:peer-data-\[state\=collapsed\]\:ml-2:is(:where(.ui\:peer)[data-variant=inset]~*):is(:where(.ui\:peer)[data-state=collapsed]~*){margin-left:calc(var(--ui-spacing) * 2)}.ui\:md\:after\:hidden:after{content:var(--tw-content);display:none}}@media (min-width:64rem){.ui\:lg\:block{display:block}.ui\:lg\:hidden{display:none}.ui\:lg\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.ui\:lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.ui\:lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.ui\:lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.ui\:lg\:grid-cols-\[1\.15fr_1fr\]{grid-template-columns:1.15fr 1fr}.ui\:lg\:grid-cols-\[1fr_1\.05fr\]{grid-template-columns:1fr 1.05fr}.ui\:lg\:gap-14{gap:calc(var(--ui-spacing) * 14)}.ui\:lg\:gap-20{gap:calc(var(--ui-spacing) * 20)}.ui\:lg\:px-6{padding-inline:calc(var(--ui-spacing) * 6)}.ui\:lg\:px-8{padding-inline:calc(var(--ui-spacing) * 8)}.ui\:lg\:py-10{padding-block:calc(var(--ui-spacing) * 10)}.ui\:lg\:py-12{padding-block:calc(var(--ui-spacing) * 12)}.ui\:lg\:py-24{padding-block:calc(var(--ui-spacing) * 24)}.ui\:lg\:pb-12{padding-bottom:calc(var(--ui-spacing) * 12)}.ui\:lg\:text-4xl{font-size:var(--ui-text-4xl);line-height:var(--tw-leading,var(--ui-text-4xl--line-height))}.ui\:lg\:text-5xl{font-size:var(--ui-text-5xl);line-height:var(--tw-leading,var(--ui-text-5xl--line-height))}.ui\:lg\:text-6xl{font-size:var(--ui-text-6xl);line-height:var(--tw-leading,var(--ui-text-6xl--line-height))}.ui\:lg\:text-7xl{font-size:var(--ui-text-7xl);line-height:var(--tw-leading,var(--ui-text-7xl--line-height))}.ui\:lg\:text-xl{font-size:var(--ui-text-xl);line-height:var(--tw-leading,var(--ui-text-xl--line-height))}.ui\:lg\:text-\[22px\]{font-size:22px}.ui\:lg\:text-\[40px\]{font-size:40px}.ui\:lg\:text-\[56px\]{font-size:56px}.ui\:lg\:text-\[64px\]{font-size:64px}.ui\:lg\:text-\[80px\]{font-size:80px}.ui\:lg\:text-\[110px\]{font-size:110px}}@container field-group (min-width:28rem){.ui\:\@md\/field-group\:flex-row{flex-direction:row}.ui\:\@md\/field-group\:items-center{align-items:center}.ui\:\@md\/field-group\:has-\[\>\[data-slot\=field-content\]\]\:items-start:has(>[data-slot=field-content]){align-items:flex-start}}@container (min-width:32rem){.ui\:\@lg\:w-48{width:calc(var(--ui-spacing) * 48)}.ui\:\@lg\:shrink-0{flex-shrink:0}.ui\:\@lg\:flex-row{flex-direction:row}}@container (min-width:36rem){.ui\:\@xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (min-width:42rem){.ui\:\@2xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (min-width:56rem){.ui\:\@4xl\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.ui\:dark\:scale-0:where(.dark,.dark *){--tw-scale-x:0%;--tw-scale-y:0%;--tw-scale-z:0%;scale:var(--tw-scale-x) var(--tw-scale-y)}.ui\:dark\:scale-100:where(.dark,.dark *){--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.ui\:dark\:-rotate-90:where(.dark,.dark *){rotate:-90deg}.ui\:dark\:rotate-0:where(.dark,.dark *){rotate:none}.ui\:dark\:border-amber-900:where(.dark,.dark *){border-color:var(--ui-color-amber-900)}.ui\:dark\:border-input:where(.dark,.dark *){border-color:var(--input)}.ui\:dark\:border-sky-900:where(.dark,.dark *){border-color:var(--ui-color-sky-900)}.ui\:dark\:border-slate-800:where(.dark,.dark *){border-color:var(--ui-color-slate-800)}.ui\:dark\:border-zinc-700:where(.dark,.dark *){border-color:var(--ui-color-zinc-700)}.ui\:dark\:border-zinc-800:where(.dark,.dark *){border-color:var(--ui-color-zinc-800)}.ui\:dark\:bg-\[\#09090B\]:where(.dark,.dark *){background-color:#09090b}.ui\:dark\:bg-amber-500:where(.dark,.dark *){background-color:var(--ui-color-amber-500)}.ui\:dark\:bg-amber-950:where(.dark,.dark *){background-color:var(--ui-color-amber-950)}.ui\:dark\:bg-card\!:where(.dark,.dark *){background-color:var(--card)!important}.ui\:dark\:bg-destructive\/60:where(.dark,.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:bg-destructive\/60:where(.dark,.dark *){background-color:color-mix(in oklab, var(--destructive) 60%, transparent)}}.ui\:dark\:bg-destructive\/70:where(.dark,.dark *){background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:bg-destructive\/70:where(.dark,.dark *){background-color:color-mix(in oklab, var(--destructive) 70%, transparent)}}.ui\:dark\:bg-emerald-500:where(.dark,.dark *){background-color:var(--ui-color-emerald-500)}.ui\:dark\:bg-emerald-950\/20:where(.dark,.dark *){background-color:var(--ui-color-emerald-950)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:bg-emerald-950\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--ui-color-emerald-950) 20%, transparent)}}.ui\:dark\:bg-emerald-950\/30:where(.dark,.dark *){background-color:var(--ui-color-emerald-950)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:bg-emerald-950\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--ui-color-emerald-950) 30%, transparent)}}.ui\:dark\:bg-input\/30:where(.dark,.dark *){background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:bg-input\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--input) 30%, transparent)}}.ui\:dark\:bg-neutral-900:where(.dark,.dark *){background-color:var(--ui-color-neutral-900)}.ui\:dark\:bg-red-950\/30:where(.dark,.dark *){background-color:var(--ui-color-red-950)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:bg-red-950\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--ui-color-red-950) 30%, transparent)}}.ui\:dark\:bg-sky-950:where(.dark,.dark *){background-color:var(--ui-color-sky-950)}.ui\:dark\:bg-slate-950:where(.dark,.dark *){background-color:var(--ui-color-slate-950)}.ui\:dark\:bg-transparent:where(.dark,.dark *){background-color:#0000}.ui\:dark\:bg-zinc-700:where(.dark,.dark *){background-color:var(--ui-color-zinc-700)}.ui\:dark\:via-white\/80:where(.dark,.dark *){--tw-gradient-via:var(--ui-color-white)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:via-white\/80:where(.dark,.dark *){--tw-gradient-via:color-mix(in oklab, var(--ui-color-white) 80%, transparent)}}.ui\:dark\:via-white\/80:where(.dark,.dark *){--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.ui\:dark\:fill-amber-400:where(.dark,.dark *){fill:var(--ui-color-amber-400)}.ui\:dark\:text-amber-50:where(.dark,.dark *){color:var(--ui-color-amber-50)}.ui\:dark\:text-amber-300:where(.dark,.dark *){color:var(--ui-color-amber-300)}.ui\:dark\:text-amber-400:where(.dark,.dark *){color:var(--ui-color-amber-400)}.ui\:dark\:text-amber-500\/40:where(.dark,.dark *){color:var(--ui-color-amber-500)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:text-amber-500\/40:where(.dark,.dark *){color:color-mix(in oklab, var(--ui-color-amber-500) 40%, transparent)}}.ui\:dark\:text-amber-950:where(.dark,.dark *){color:var(--ui-color-amber-950)}.ui\:dark\:text-emerald-950:where(.dark,.dark *){color:var(--ui-color-emerald-950)}.ui\:dark\:text-gray-700:where(.dark,.dark *){color:var(--ui-color-gray-700)}.ui\:dark\:text-muted-foreground:where(.dark,.dark *){color:var(--muted-foreground)}.ui\:dark\:text-neutral-400\/50:where(.dark,.dark *){color:var(--ui-color-neutral-400)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:text-neutral-400\/50:where(.dark,.dark *){color:color-mix(in oklab, var(--ui-color-neutral-400) 50%, transparent)}}.ui\:dark\:text-sky-50:where(.dark,.dark *){color:var(--ui-color-sky-50)}.ui\:dark\:text-white:where(.dark,.dark *){color:var(--ui-color-white)}.ui\:dark\:\[--dot-field-glow\:\#0a0a0a\]:where(.dark,.dark *){--dot-field-glow:#0a0a0a}@media (hover:hover){.ui\:dark\:hover\:border-input:where(.dark,.dark *):hover{border-color:var(--input)}.ui\:dark\:hover\:bg-input\/50:where(.dark,.dark *):hover{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:hover\:bg-input\/50:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--input) 50%, transparent)}}}.ui\:dark\:focus-visible\:ring-destructive\/40:where(.dark,.dark *):focus-visible{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:focus-visible\:ring-destructive\/40:where(.dark,.dark *):focus-visible{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}:where([data-slot=tooltip-content]) .ui\:dark\:in-data-\[slot\=tooltip-content\]\:bg-background\/10:where(.dark,.dark *){background-color:var(--background)}@supports (color:color-mix(in lab, red, red)){:where([data-slot=tooltip-content]) .ui\:dark\:in-data-\[slot\=tooltip-content\]\:bg-background\/10:where(.dark,.dark *){background-color:color-mix(in oklab, var(--background) 10%, transparent)}}.ui\:dark\:has-data-\[state\=checked\]\:bg-primary\/10:where(.dark,.dark *):has([data-state=checked]){background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:has-data-\[state\=checked\]\:bg-primary\/10:where(.dark,.dark *):has([data-state=checked]){background-color:color-mix(in oklab, var(--primary) 10%, transparent)}}.ui\:dark\:has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/40:where(.dark,.dark *):has([data-slot][aria-invalid=true]){--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:has-\[\[data-slot\]\[aria-invalid\=true\]\]\:ring-destructive\/40:where(.dark,.dark *):has([data-slot][aria-invalid=true]){--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.ui\:dark\:aria-invalid\:ring-destructive\/40:where(.dark,.dark *)[aria-invalid=true]{--tw-ring-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:aria-invalid\:ring-destructive\/40:where(.dark,.dark *)[aria-invalid=true]{--tw-ring-color:color-mix(in oklab, var(--destructive) 40%, transparent)}}.ui\:dark\:data-\[active\=true\]\:bg-primary\/20:where(.dark,.dark *)[data-active=true]{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:data-\[active\=true\]\:bg-primary\/20:where(.dark,.dark *)[data-active=true]{background-color:color-mix(in oklab, var(--primary) 20%, transparent)}}.ui\:dark\:data-\[state\=active\]\:border-input:where(.dark,.dark *)[data-state=active]{border-color:var(--input)}.ui\:dark\:data-\[state\=active\]\:bg-input\/30:where(.dark,.dark *)[data-state=active]{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:data-\[state\=active\]\:bg-input\/30:where(.dark,.dark *)[data-state=active]{background-color:color-mix(in oklab, var(--input) 30%, transparent)}}.ui\:dark\:data-\[state\=active\]\:text-foreground:where(.dark,.dark *)[data-state=active]{color:var(--foreground)}.ui\:dark\:data-\[state\=checked\]\:bg-primary:where(.dark,.dark *)[data-state=checked]{background-color:var(--primary)}.ui\:dark\:data-\[state\=checked\]\:bg-primary-foreground:where(.dark,.dark *)[data-state=checked]{background-color:var(--primary-foreground)}.ui\:dark\:data-\[state\=unchecked\]\:bg-foreground:where(.dark,.dark *)[data-state=unchecked]{background-color:var(--foreground)}.ui\:dark\:data-\[state\=unchecked\]\:bg-input\/80:where(.dark,.dark *)[data-state=unchecked]{background-color:var(--input)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:data-\[state\=unchecked\]\:bg-input\/80:where(.dark,.dark *)[data-state=unchecked]{background-color:color-mix(in oklab, var(--input) 80%, transparent)}}.ui\:dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:where(.dark,.dark *)[data-variant=destructive]:focus{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:data-\[variant\=destructive\]\:focus\:bg-destructive\/20:where(.dark,.dark *)[data-variant=destructive]:focus{background-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.ui\:dark\:data-\[variant\=destructive\]\:data-highlighted\:bg-destructive\/20:where(.dark,.dark *)[data-variant=destructive][data-highlighted]{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){.ui\:dark\:data-\[variant\=destructive\]\:data-highlighted\:bg-destructive\/20:where(.dark,.dark *)[data-variant=destructive][data-highlighted]{background-color:color-mix(in oklab, var(--destructive) 20%, transparent)}}.ui\:\[\&_\.lc-area-path\]\:opacity-100 .lc-area-path{opacity:1}.ui\:\[\&_\.lc-axis-tick\]\:stroke-0 .lc-axis-tick{stroke-width:0}.ui\:\[\&_\.lc-axis-tick-label\]\:fill-muted-foreground .lc-axis-tick-label{fill:var(--muted-foreground)}.ui\:\[\&_\.lc-axis-tick-label\]\:font-normal .lc-axis-tick-label{--tw-font-weight:var(--ui-font-weight-normal);font-weight:var(--ui-font-weight-normal)}.ui\:\[\&_\.lc-grid-x-radial-circle\]\:stroke-border .lc-grid-x-radial-circle,.ui\:\[\&_\.lc-grid-x-radial-line\]\:stroke-border .lc-grid-x-radial-line,.ui\:\[\&_\.lc-grid-y-radial-circle\]\:stroke-border .lc-grid-y-radial-circle,.ui\:\[\&_\.lc-grid-y-radial-line\]\:stroke-border .lc-grid-y-radial-line{stroke:var(--border)}.ui\:\[\&_\.lc-highlight-line\]\:stroke-0 .lc-highlight-line{stroke-width:0}.ui\:\[\&_\.lc-highlight-line\]\:opacity-100 .lc-highlight-line,.ui\:\[\&_\.lc-highlight-point\]\:opacity-100 .lc-highlight-point{opacity:1}.ui\:\[\&_\.lc-labels-text\:not\(\[fill\]\)\]\:fill-foreground .lc-labels-text:not([fill]){fill:var(--foreground)}.ui\:\[\&_\.lc-layout-svg-g\]\:fill-transparent .lc-layout-svg-g{fill:#0000}.ui\:\[\&_\.lc-legend-swatch\]\:size-2\.5 .lc-legend-swatch{width:calc(var(--ui-spacing) * 2.5);height:calc(var(--ui-spacing) * 2.5)}.ui\:\[\&_\.lc-legend-swatch\]\:rounded-\[2px\] .lc-legend-swatch{border-radius:2px}.ui\:\[\&_\.lc-legend-swatch-button\]\:items-center .lc-legend-swatch-button{align-items:center}.ui\:\[\&_\.lc-legend-swatch-button\]\:gap-1\.5 .lc-legend-swatch-button{gap:calc(var(--ui-spacing) * 1.5)}.ui\:\[\&_\.lc-legend-swatch-group\]\:items-center .lc-legend-swatch-group{align-items:center}.ui\:\[\&_\.lc-legend-swatch-group\]\:gap-4 .lc-legend-swatch-group{gap:calc(var(--ui-spacing) * 4)}.ui\:\[\&_\.lc-line\]\:stroke-border\/50 .lc-line{stroke:var(--border)}@supports (color:color-mix(in lab, red, red)){.ui\:\[\&_\.lc-line\]\:stroke-border\/50 .lc-line{stroke:color-mix(in oklab, var(--border) 50%, transparent)}}.ui\:\[\&_\.lc-root-container\]\:w-full .lc-root-container{width:100%}.ui\:\[\&_\.lc-rule-x-line\:not\(\.lc-grid-x-rule\)\]\:stroke-0 .lc-rule-x-line:not(.lc-grid-x-rule),.ui\:\[\&_\.lc-rule-y-line\:not\(\.lc-grid-y-rule\)\]\:stroke-0 .lc-rule-y-line:not(.lc-grid-y-rule){stroke-width:0}.ui\:\[\&_\.lc-spline-path\]\:opacity-100 .lc-spline-path{opacity:1}.ui\:\[\&_\.lc-text\]\:text-xs .lc-text{font-size:var(--ui-text-xs);line-height:var(--tw-leading,var(--ui-text-xs--line-height))}.ui\:\[\&_\.lc-text-svg\]\:overflow-visible .lc-text-svg{overflow:visible}.ui\:\[\&_\.lc-tooltip-rects-g\]\:fill-transparent .lc-tooltip-rects-g{fill:#0000}.ui\:\[\&_\.stroke-white\]\:stroke-transparent .stroke-white{stroke:#0000}.ui\:\[\&_\[data-command-group\]\:not\(\[hidden\]\)_\~\[data-command-group\]\]\:pt-0 [data-command-group]:not([hidden])~[data-command-group]{padding-top:calc(var(--ui-spacing) * 0)}.ui\:\[\&_\[data-command-input-wrapper\]_svg\]\:h-5 [data-command-input-wrapper] svg{height:calc(var(--ui-spacing) * 5)}.ui\:\[\&_\[data-command-input-wrapper\]_svg\]\:w-5 [data-command-input-wrapper] svg{width:calc(var(--ui-spacing) * 5)}.ui\:\[\&_\[data-command-item\]_svg\]\:h-5 [data-command-item] svg{height:calc(var(--ui-spacing) * 5)}.ui\:\[\&_\[data-command-item\]_svg\]\:w-5 [data-command-item] svg{width:calc(var(--ui-spacing) * 5)}.ui\:\[\&_\[data-slot\=empty-description\]\]\:text-\[var\(--landing-fg-muted\)\] [data-slot=empty-description]{color:var(--landing-fg-muted)}.ui\:\[\&_\[data-slot\=empty-title\]\]\:text-\[var\(--landing-fg\)\] [data-slot=empty-title]{color:var(--landing-fg)}.ui\:\[\&_img\]\:size-full img{width:100%;height:100%}.ui\:\[\&_img\]\:object-cover img{object-fit:cover}.ui\:\[\&_li\]\:mb-1 li{margin-bottom:calc(var(--ui-spacing) * 1)}.ui\:\[\&_p\]\:mb-2 p{margin-bottom:calc(var(--ui-spacing) * 2)}.ui\:\[\&_p\]\:leading-relaxed p{--tw-leading:var(--ui-leading-relaxed);line-height:var(--ui-leading-relaxed)}.ui\:\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.ui\:\[\&_svg\]\:size-8\! svg{width:calc(var(--ui-spacing) * 8)!important;height:calc(var(--ui-spacing) * 8)!important}.ui\:\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.ui\:\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-3 svg:not([class*=size-]){width:calc(var(--ui-spacing) * 3);height:calc(var(--ui-spacing) * 3)}.ui\:\[\&_svg\:not\(\[class\*\=\'size-\'\]\)\]\:size-4 svg:not([class*=size-]){width:calc(var(--ui-spacing) * 4);height:calc(var(--ui-spacing) * 4)}.ui\:\[\&_svg\:not\(\[class\*\=\'text-\'\]\)\]\:text-muted-foreground svg:not([class*=text-]){color:var(--muted-foreground)}.ui\:\[\&_svg\:not\(\[class\*\=\'ui\:size-\'\]\)\]\:size-4 svg:not([class*=ui\:size-]){width:calc(var(--ui-spacing) * 4);height:calc(var(--ui-spacing) * 4)}.ui\:\[\&_svg\:not\(\[class\*\=\'ui\:size-\'\]\)\]\:size-6 svg:not([class*=ui\:size-]){width:calc(var(--ui-spacing) * 6);height:calc(var(--ui-spacing) * 6)}.ui\:\[\&_text\]\:stroke-transparent text{stroke:#0000}.ui\:\[\&_tr\]\:border-b tr{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.ui\:\[\&_tr\:last-child\]\:border-0 tr:last-child{border-style:var(--tw-border-style);border-width:0}.ui\:\[\&_ul\]\:list-disc ul{list-style-type:disc}.ui\:\[\&_ul\]\:pl-5 ul{padding-left:calc(var(--ui-spacing) * 5)}.ui\:\[\&\+\[data-slot\=item-content\]\]\:flex-none+[data-slot=item-content]{flex:none}.ui\:\[\&\:has\(\[data-slot\=dialog-footer\]\[data-sticky\=true\]\)\]\:pb-0:has([data-slot=dialog-footer][data-sticky=true]){padding-bottom:calc(var(--ui-spacing) * 0)}.ui\:\[\&\:has\(\[role\=checkbox\]\)\]\:pr-0:has([role=checkbox]){padding-right:calc(var(--ui-spacing) * 0)}.ui\:\[\.border-b\]\:pb-3.border-b{padding-bottom:calc(var(--ui-spacing) * 3)}.ui\:\[\.border-b\]\:pb-6.border-b{padding-bottom:calc(var(--ui-spacing) * 6)}.ui\:\[\.border-t\]\:pt-3.border-t{padding-top:calc(var(--ui-spacing) * 3)}.ui\:\[\.border-t\]\:pt-6.border-t{padding-top:calc(var(--ui-spacing) * 6)}.ui\:\[a\]\:transition-colors:is(a){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(--ui-default-transition-timing-function));transition-duration:var(--tw-duration,var(--ui-default-transition-duration))}@media (hover:hover){.ui\:\[a\]\:hover\:bg-accent\/50:is(a):hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){.ui\:\[a\]\:hover\:bg-accent\/50:is(a):hover{background-color:color-mix(in oklab, var(--accent) 50%, transparent)}}}:is(.ui\:\*\:\[span\]\:last\:flex>*):is(span):last-child{display:flex}:is(.ui\:\*\:\[span\]\:last\:items-center>*):is(span):last-child{align-items:center}:is(.ui\:\*\:\[span\]\:last\:gap-2>*):is(span):last-child{gap:calc(var(--ui-spacing) * 2)}:is(.ui\:data-\[variant\=destructive\]\:\*\:\[svg\]\:text-destructive\![data-variant=destructive]>*):is(svg){color:var(--destructive)!important}.ui\:\[\&\>\*\]\:focus-visible\:relative>:focus-visible{position:relative}.ui\:\[\&\>\*\]\:focus-visible\:z-10>:focus-visible{z-index:10}@container field-group (min-width:28rem){.ui\:\@md\/field-group\:\[\&\>\*\]\:w-auto>*{width:auto}}.ui\:\[\&\>\*\:not\(\:first-child\)\]\:rounded-s-none>:not(:first-child){border-start-start-radius:0;border-end-start-radius:0}.ui\:\[\&\>\*\:not\(\:first-child\)\]\:rounded-t-none>:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.ui\:\[\&\>\*\:not\(\:first-child\)\]\:border-s-0>:not(:first-child){border-inline-start-style:var(--tw-border-style);border-inline-start-width:0}.ui\:\[\&\>\*\:not\(\:first-child\)\]\:border-t-0>:not(:first-child){border-top-style:var(--tw-border-style);border-top-width:0}.ui\:\[\&\>\*\:not\(\:last-child\)\]\:rounded-e-none>:not(:last-child){border-start-end-radius:0;border-end-end-radius:0}.ui\:\[\&\>\*\:not\(\:last-child\)\]\:rounded-b-none>:not(:last-child){border-bottom-right-radius:0;border-bottom-left-radius:0}.ui\:\[\&\>\[data-slot\=field-label\]\]\:flex-auto>[data-slot=field-label]{flex:auto}@container field-group (min-width:28rem){.ui\:\@md\/field-group\:\[\&\>\[data-slot\=field-label\]\]\:flex-auto>[data-slot=field-label]{flex:auto}}.ui\:has-\[select\[aria-hidden\=true\]\:last-child\]\:\[\&\>\[data-slot\=select-trigger\]\:last-of-type\]\:rounded-e-md:has(:is(select[aria-hidden=true]:last-child))>[data-slot=select-trigger]:last-of-type{border-start-end-radius:calc(var(--radius) - 2px);border-end-end-radius:calc(var(--radius) - 2px)}.ui\:\[\&\>\[data-slot\=select-trigger\]\:not\(\[class\*\=\'ui\:w-\'\]\)\]\:w-fit>[data-slot=select-trigger]:not([class*=ui\:w-]){width:fit-content}.ui\:has-\[\>\[data-slot\=field-content\]\]\:\[\&\>\[role\=checkbox\]\,\[role\=radio\]\]\:mt-px:has(>[data-slot=field-content])>[role=checkbox],.ui\:has-\[\>\[data-slot\=field-content\]\]\:\[\&\>\[role\=checkbox\]\,\[role\=radio\]\]\:mt-px:has(>[data-slot=field-content]) [role=radio]{margin-top:1px}@container field-group (min-width:28rem){.ui\:\@md\/field-group\:has-\[\>\[data-slot\=field-content\]\]\:\[\&\>\[role\=checkbox\]\,\[role\=radio\]\]\:mt-px:has(>[data-slot=field-content])>[role=checkbox],.ui\:\@md\/field-group\:has-\[\>\[data-slot\=field-content\]\]\:\[\&\>\[role\=checkbox\]\,\[role\=radio\]\]\:mt-px:has(>[data-slot=field-content]) [role=radio]{margin-top:1px}}.ui\:\[\&\>a\]\:underline>a{text-decoration-line:underline}.ui\:\[\&\>a\]\:underline-offset-4>a{text-underline-offset:4px}.ui\:\[\&\>a\:hover\]\:text-primary>a:hover{color:var(--primary)}.ui\:\[\&\>button\]\:hidden>button{display:none}.ui\:\[\&\>input\]\:flex-1>input{flex:1}.ui\:has-\[\>\[data-align\=block-end\]\]\:\[\&\>input\]\:pt-3:has(>[data-align=block-end])>input{padding-top:calc(var(--ui-spacing) * 3)}.ui\:has-\[\>\[data-align\=block-start\]\]\:\[\&\>input\]\:pb-3:has(>[data-align=block-start])>input{padding-bottom:calc(var(--ui-spacing) * 3)}.ui\:has-\[\>\[data-align\=inline-end\]\]\:\[\&\>input\]\:pe-2:has(>[data-align=inline-end])>input{padding-inline-end:calc(var(--ui-spacing) * 2)}.ui\:has-\[\>\[data-align\=inline-start\]\]\:\[\&\>input\]\:ps-2:has(>[data-align=inline-start])>input{padding-inline-start:calc(var(--ui-spacing) * 2)}.ui\:\[\&\>kbd\]\:rounded-\[calc\(var\(--radius\)-5px\)\]>kbd{border-radius:calc(var(--radius) - 5px)}.ui\:\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.ui\:\[\&\>svg\]\:pointer-events-none>svg{pointer-events:none}.ui\:\[\&\>svg\]\:size-2\.5>svg{width:calc(var(--ui-spacing) * 2.5);height:calc(var(--ui-spacing) * 2.5)}.ui\:\[\&\>svg\]\:size-3>svg{width:calc(var(--ui-spacing) * 3);height:calc(var(--ui-spacing) * 3)}.ui\:\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--ui-spacing) * 3.5);height:calc(var(--ui-spacing) * 3.5)}.ui\:\[\&\>svg\]\:size-4>svg{width:calc(var(--ui-spacing) * 4);height:calc(var(--ui-spacing) * 4)}.ui\:\[\&\>svg\]\:shrink-0>svg{flex-shrink:0}.ui\:\[\&\>svg\]\:translate-y-0\.5>svg{--tw-translate-y:calc(var(--ui-spacing) * .5);translate:var(--tw-translate-x) var(--tw-translate-y)}.ui\:\[\&\>svg\]\:text-current>svg{color:currentColor}.ui\:\[\&\>svg\]\:text-muted-foreground>svg{color:var(--muted-foreground)}.ui\:\[\&\>svg\]\:text-sidebar-accent-foreground>svg{color:var(--sidebar-accent-foreground)}.ui\:data-\[active\=true\]\:\[\&\>svg\]\:text-primary[data-active=true]>svg{color:var(--primary)}.ui\:\[\&\>svg\:not\(\[class\*\=\'ui\:size-\'\]\)\]\:size-3\.5>svg:not([class*=ui\:size-]){width:calc(var(--ui-spacing) * 3.5);height:calc(var(--ui-spacing) * 3.5)}.ui\:\[\&\>svg\:not\(\[class\*\=\'ui\:size-\'\]\)\]\:size-4>svg:not([class*=ui\:size-]){width:calc(var(--ui-spacing) * 4);height:calc(var(--ui-spacing) * 4)}@media (hover:hover){:is(.ui\:hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover,.ui\:hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover>svelte-css-wrapper)>th,:is(.ui\:hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover,.ui\:hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover>svelte-css-wrapper) td{background-color:var(--muted)}@supports (color:color-mix(in lab, red, red)){:is(.ui\:hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover,.ui\:hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover>svelte-css-wrapper)>th,:is(.ui\:hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover,.ui\:hover\:\[\&\,\&\>svelte-css-wrapper\]\:\[\&\>th\,td\]\:bg-muted\/50:hover>svelte-css-wrapper) td{background-color:color-mix(in oklab, var(--muted) 50%, transparent)}}}.ui\:\[\&\>tr\]\:last\:border-b-0>tr:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.ui\:\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{rotate:180deg}.ui\:\[\&\[for\]\]\:cursor-pointer[for]{cursor:pointer}[data-side=left][data-collapsible=offcanvas] .ui\:\[\[data-side\=left\]\[data-collapsible\=offcanvas\]_\&\]\:-right-2{right:calc(var(--ui-spacing) * -2)}[data-side=left][data-state=collapsed] .ui\:\[\[data-side\=left\]\[data-state\=collapsed\]_\&\]\:cursor-e-resize{cursor:e-resize}[data-side=right][data-collapsible=offcanvas] .ui\:\[\[data-side\=right\]\[data-collapsible\=offcanvas\]_\&\]\:-left-2{left:calc(var(--ui-spacing) * -2)}[data-side=right][data-state=collapsed] .ui\:\[\[data-side\=right\]\[data-state\=collapsed\]_\&\]\:cursor-w-resize{cursor:w-resize}[data-variant=legend]+.ui\:\[\[data-variant\=legend\]\+\&\]\:-mt-1\.5{margin-top:calc(var(--ui-spacing) * -1.5)}@media (hover:hover){a.ui\:\[a\&\]\:hover\:bg-accent:hover{background-color:var(--accent)}a.ui\:\[a\&\]\:hover\:bg-amber-600\/90:hover{background-color:var(--ui-color-amber-600)}@supports (color:color-mix(in lab, red, red)){a.ui\:\[a\&\]\:hover\:bg-amber-600\/90:hover{background-color:color-mix(in oklab, var(--ui-color-amber-600) 90%, transparent)}}a.ui\:\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab, red, red)){a.ui\:\[a\&\]\:hover\:bg-destructive\/90:hover{background-color:color-mix(in oklab, var(--destructive) 90%, transparent)}}a.ui\:\[a\&\]\:hover\:bg-emerald-600\/90:hover{background-color:var(--ui-color-emerald-600)}@supports (color:color-mix(in lab, red, red)){a.ui\:\[a\&\]\:hover\:bg-emerald-600\/90:hover{background-color:color-mix(in oklab, var(--ui-color-emerald-600) 90%, transparent)}}a.ui\:\[a\&\]\:hover\:bg-primary\/30:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){a.ui\:\[a\&\]\:hover\:bg-primary\/30:hover{background-color:color-mix(in oklab, var(--primary) 30%, transparent)}}a.ui\:\[a\&\]\:hover\:bg-primary\/90:hover{background-color:var(--primary)}@supports (color:color-mix(in lab, red, red)){a.ui\:\[a\&\]\:hover\:bg-primary\/90:hover{background-color:color-mix(in oklab, var(--primary) 90%, transparent)}}a.ui\:\[a\&\]\:hover\:bg-secondary\/80:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){a.ui\:\[a\&\]\:hover\:bg-secondary\/80:hover{background-color:color-mix(in oklab, var(--secondary) 80%, transparent)}}a.ui\:\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:var(--secondary)}@supports (color:color-mix(in lab, red, red)){a.ui\:\[a\&\]\:hover\:bg-secondary\/90:hover{background-color:color-mix(in oklab, var(--secondary) 90%, transparent)}}a.ui\:\[a\&\]\:hover\:text-accent-foreground:hover{color:var(--accent-foreground)}a.ui\:\[a\&\]\:hover\:text-primary:hover{color:var(--primary)}a.ui\:\[a\&\]\:hover\:underline:hover{text-decoration-line:underline}a.ui\:dark\:\[a\&\]\:hover\:bg-accent\/50:where(.dark,.dark *):hover{background-color:var(--accent)}@supports (color:color-mix(in lab, red, red)){a.ui\:dark\:\[a\&\]\:hover\:bg-accent\/50:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--accent) 50%, transparent)}}}}@property --tw-animation-delay{syntax:"*";inherits:false;initial-value:0s}@property --tw-animation-direction{syntax:"*";inherits:false;initial-value:normal}@property --tw-animation-duration{syntax:"*";inherits:false}@property --tw-animation-fill-mode{syntax:"*";inherits:false;initial-value:none}@property --tw-animation-iteration-count{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-enter-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-enter-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-blur{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-opacity{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-rotate{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-scale{syntax:"*";inherits:false;initial-value:1}@property --tw-exit-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-exit-translate-y{syntax:"*";inherits:false;initial-value:0}@keyframes border-beam{to{offset-distance:100%}}@keyframes meteor{0%{opacity:1;transform:rotate(215deg)translate(0)}70%{opacity:1}to{opacity:0;transform:rotate(215deg)translate(-500px)}}@keyframes shimmer-marketing{0%,90%,to{background-position:calc(-100% - var(--shimmer-width)) 0}30%,60%{background-position:calc(100% + var(--shimmer-width)) 0}}@keyframes spin-around{0%{transform:translateZ(0)rotate(0)}15%,35%{transform:translateZ(0)rotate(90deg)}65%,85%{transform:translateZ(0)rotate(270deg)}to{transform:translateZ(0)rotate(360deg)}}@keyframes magicslide{to{transform:translate(calc(100cqw - 100%))}}:root{--background:oklch(100% 0 0);--foreground:oklch(14.5% 0 0);--card:oklch(100% 0 0);--card-foreground:oklch(14.5% 0 0);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.5% 0 0);--primary:oklch(48.8% .243 264.376);--primary-foreground:oklch(97% .014 254.604);--secondary:oklch(96.7% .001 286.375);--secondary-foreground:oklch(21% .006 285.885);--muted:oklch(97% 0 0);--muted-foreground:oklch(55.6% 0 0);--accent:oklch(97% 0 0);--accent-foreground:oklch(20.5% 0 0);--destructive:oklch(57.7% .245 27.325);--border:oklch(92.2% 0 0);--input:oklch(92.2% 0 0);--ring:oklch(70.8% 0 0);--chart-1:oklch(80.9% .105 251.813);--chart-2:oklch(62.3% .214 259.815);--chart-3:oklch(54.6% .245 262.881);--chart-4:oklch(48.8% .243 264.376);--chart-5:oklch(42.4% .199 265.638);--radius:.625rem;--sidebar:oklch(98.5% 0 0);--sidebar-foreground:oklch(14.5% 0 0);--sidebar-primary:oklch(54.6% .245 262.881);--sidebar-primary-foreground:oklch(97% .014 254.604);--sidebar-accent:oklch(97% 0 0);--sidebar-accent-foreground:oklch(20.5% 0 0);--sidebar-border:oklch(92.2% 0 0);--sidebar-ring:oklch(70.8% 0 0)}.dark{--background:oklch(14.5% 0 0);--foreground:oklch(98.5% 0 0);--card:oklch(20.5% 0 0);--card-foreground:oklch(98.5% 0 0);--popover:oklch(20.5% 0 0);--popover-foreground:oklch(98.5% 0 0);--primary:oklch(42.4% .199 265.638);--primary-foreground:oklch(97% .014 254.604);--secondary:oklch(27.4% .006 286.033);--secondary-foreground:oklch(98.5% 0 0);--muted:oklch(26.9% 0 0);--muted-foreground:oklch(70.8% 0 0);--accent:oklch(26.9% 0 0);--accent-foreground:oklch(98.5% 0 0);--destructive:oklch(70.4% .191 22.216);--border:oklch(100% 0 0/.1);--input:oklch(100% 0 0/.15);--ring:oklch(55.6% 0 0);--chart-1:oklch(80.9% .105 251.813);--chart-2:oklch(62.3% .214 259.815);--chart-3:oklch(54.6% .245 262.881);--chart-4:oklch(48.8% .243 264.376);--chart-5:oklch(42.4% .199 265.638);--sidebar:oklch(20.5% 0 0);--sidebar-foreground:oklch(98.5% 0 0);--sidebar-primary:oklch(62.3% .214 259.815);--sidebar-primary-foreground:oklch(97% .014 254.604);--sidebar-accent:oklch(26.9% 0 0);--sidebar-accent-foreground:oklch(98.5% 0 0);--sidebar-border:oklch(100% 0 0/.1);--sidebar-ring:oklch(55.6% 0 0)}@property --border-angle{syntax:"";inherits:false;initial-value:0deg}@keyframes border{to{--border-angle:360deg}}@keyframes flip{to{transform:rotate(360deg)}}@keyframes kitrotate{to{transform:rotate(90deg)}}@keyframes shine{0%{background-position:0 0}to{background-position:-200% 0}}.animate-gradient-border{background:linear-gradient(45deg, white, white) padding-box, conic-gradient(from var(--border-angle), #94a3b84d 75%, var(--primary,#1d4ee2) 82%, var(--primary-foreground,white) 88%, var(--primary,#1d4ee2) 92%, #94a3b84d 100%) border-box;border:1px solid #0000;transition:--border-angle 3s ease-in-out}.animate-gradient-border:hover{animation:4s ease-in-out infinite border}.dark.animate-gradient-border{background:linear-gradient(45deg, #000, #000) padding-box, conic-gradient(from var(--border-angle), #4755697a 75%, var(--primary,#1d4ee2) 82%, var(--primary-foreground,black) 88%, var(--primary,#1d4ee2) 92%, #4755697a 100%) border-box}@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-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@keyframes enter{0%{opacity:var(--tw-enter-opacity,1);transform:translate3d(var(--tw-enter-translate-x,0),var(--tw-enter-translate-y,0),0)scale3d(var(--tw-enter-scale,1),var(--tw-enter-scale,1),var(--tw-enter-scale,1))rotate(var(--tw-enter-rotate,0));filter:blur(var(--tw-enter-blur,0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity,1);transform:translate3d(var(--tw-exit-translate-x,0),var(--tw-exit-translate-y,0),0)scale3d(var(--tw-exit-scale,1),var(--tw-exit-scale,1),var(--tw-exit-scale,1))rotate(var(--tw-exit-rotate,0));filter:blur(var(--tw-exit-blur,0))}}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,var(--ngp-accordion-content-height,auto)))))}}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height,var(--bits-accordion-content-height,var(--reka-accordion-content-height,var(--kb-accordion-content-height,var(--ngp-accordion-content-height,auto)))))}to{height:0}} \ No newline at end of file diff --git a/packages/utils/src/plans/constants.ts b/packages/utils/src/plans/constants.ts index 4c065c62..f9f56a19 100644 --- a/packages/utils/src/plans/constants.ts +++ b/packages/utils/src/plans/constants.ts @@ -62,3 +62,17 @@ export function getWorkspaceAllowance(planName: string | null | undefined): numb export function canCreateWorkspaces(planName: string | null | undefined): boolean { return planName === PLAN.ENTERPRISE; } + +/** + * Max students allowed per plan (org-wide, counts ROLE.STUDENT organizationmember rows). + */ +export const STUDENT_LIMITS: Record = { + [PLAN.BASIC]: 20, + [PLAN.EARLY_ADOPTER]: 10000, + [PLAN.ENTERPRISE]: Infinity +}; + +export function getStudentLimit(planName: string | null | undefined): number { + if (!planName) return STUDENT_LIMITS[PLAN.BASIC]; + return STUDENT_LIMITS[planName] ?? STUDENT_LIMITS[PLAN.BASIC]; +} diff --git a/packages/utils/src/plans/index.ts b/packages/utils/src/plans/index.ts index c9159027..952274a3 100644 --- a/packages/utils/src/plans/index.ts +++ b/packages/utils/src/plans/index.ts @@ -1,4 +1,5 @@ export * from './constants'; +export * from './limits'; export * from './automation'; export * from './public-api'; export * from './org-plan'; diff --git a/packages/utils/src/plans/limits.ts b/packages/utils/src/plans/limits.ts new file mode 100644 index 00000000..9e0b226d --- /dev/null +++ b/packages/utils/src/plans/limits.ts @@ -0,0 +1,41 @@ +import { PLAN, STUDENT_LIMITS } from './constants'; + +/** + * Org-scoped resources that carry a per-plan limit and are surfaced to the + * dashboard. Extend this tuple (plus PLAN_LIMITS) to add a new limited resource. + */ +export const PLAN_LIMIT_RESOURCES = ['students'] as const; +export type PlanLimitResource = (typeof PLAN_LIMIT_RESOURCES)[number]; + +/** Per-resource, per-plan numeric caps (Infinity = unlimited). */ +export const PLAN_LIMITS: Record> = { + students: STUDENT_LIMITS +}; + +export function getPlanLimit(resource: PlanLimitResource, planName: string | null | undefined): number { + const table = PLAN_LIMITS[resource]; + if (!planName) return table[PLAN.BASIC]; + + return table[planName] ?? table[PLAN.BASIC]; +} + +/** JSON-safe usage record carried in the account payload. `limit: null` = unlimited. */ +export type ResourceUsage = { used: number; limit: number | null }; +export type OrgUsageLimits = Partial>; + +/** Build a usage record, converting a non-JSON-safe Infinity limit to null. */ +export function toResourceUsage(used: number, planLimit: number): ResourceUsage { + return { used, limit: Number.isFinite(planLimit) ? planLimit : null }; +} + +export function isResourceLimitReached(usage: ResourceUsage | undefined): boolean { + if (!usage || usage.limit === null) return false; + + return usage.used >= usage.limit; +} + +export function resourceLimitRemaining(usage: ResourceUsage | undefined): number | null { + if (!usage || usage.limit === null) return null; + + return Math.max(0, usage.limit - usage.used); +}