@buildbase/sdk 0.0.71 → 0.0.74
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +106 -0
- package/README.md +43 -10
- package/dist/cli.mjs +2 -0
- package/dist/css/styles.css +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +103 -2
- package/dist/index.mjs +1 -1
- package/dist/mcp/index.cjs +1 -1
- package/dist/mcp/index.d.ts +30 -0
- package/dist/mcp/index.mjs +1 -1
- package/dist/react/chunks/SettingsDialog-C0ocJMBA.cjs +2 -0
- package/dist/react/chunks/SettingsDialog-CWrmSyKV.mjs +2 -0
- package/dist/react/chunks/{SubscriptionDialog-Bkue_qyM.cjs → SubscriptionDialog-CLh4zW9Y.cjs} +1 -1
- package/dist/react/chunks/{SubscriptionDialog-ZjdyTmxn.mjs → SubscriptionDialog-sH0cQdPD.mjs} +1 -1
- package/dist/react/chunks/react-BBSVsY3n.cjs +2 -0
- package/dist/react/chunks/react-CNHfoa5L.mjs +2 -0
- package/dist/react/index.cjs +1 -1
- package/dist/react/index.d.ts +130 -8
- package/dist/react/index.mjs +1 -1
- package/dist/server/browser.cjs +1 -0
- package/dist/server/browser.mjs +1 -0
- package/dist/server/index.cjs +1 -0
- package/dist/server/index.d.ts +556 -0
- package/dist/server/index.mjs +1 -0
- package/dist/server/next/index.cjs +1 -0
- package/dist/server/next/index.d.ts +156 -0
- package/dist/server/next/index.mjs +1 -0
- package/dist/tracking/index.cjs +1 -1
- package/dist/tracking/index.d.ts +205 -8
- package/dist/tracking/index.mjs +1 -1
- package/docs/SERVER-CONTENT.md +297 -0
- package/package.json +65 -5
- package/dist/react/chunks/SettingsDialog-D5lLHG9-.cjs +0 -2
- package/dist/react/chunks/SettingsDialog-DiTnAWFt.mjs +0 -2
- package/dist/react/chunks/react-BIZcTNos.mjs +0 -2
- package/dist/react/chunks/react-DM1nGVlR.cjs +0 -2
- /package/dist/react/chunks/{ar-D_agqxXa.cjs → ar-CRVhjpVE.cjs} +0 -0
- /package/dist/react/chunks/{ar-By_nJtJ6.mjs → ar-DFPDdu2U.mjs} +0 -0
- /package/dist/react/chunks/{de-D7j-9T8u.cjs → de-BGhzn711.cjs} +0 -0
- /package/dist/react/chunks/{de-CQW2yLLr.mjs → de-Bqi8scew.mjs} +0 -0
- /package/dist/react/chunks/{es-CggBj8dc.mjs → es-D_Eqhob3.mjs} +0 -0
- /package/dist/react/chunks/{es-DYtfnqFg.cjs → es-DyrMaeUp.cjs} +0 -0
- /package/dist/react/chunks/{fr-Bu6_05LA.cjs → fr-C0SkloRr.cjs} +0 -0
- /package/dist/react/chunks/{fr-CbvudRKC.mjs → fr-DkZpFQ1Q.mjs} +0 -0
- /package/dist/react/chunks/{hi-dKtSIE95.cjs → hi-B9TK87T8.cjs} +0 -0
- /package/dist/react/chunks/{hi-DrJIuj_0.mjs → hi-DrTcPkiY.mjs} +0 -0
- /package/dist/react/chunks/{ja-BtZsSYAE.mjs → ja-Dgahn--0.mjs} +0 -0
- /package/dist/react/chunks/{ja-6AwwCaS_.cjs → ja-LjzlAhAT.cjs} +0 -0
- /package/dist/react/chunks/{zh-BZsPG6yc.mjs → zh-BezRHDHs.mjs} +0 -0
- /package/dist/react/chunks/{zh-C6onHYpa.cjs → zh-CcodKi4U.cjs} +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,112 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.0.74] - 2026-09-28
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- **A signed-out browser no longer keeps authenticating as the previous user.**
|
|
15
|
+
`getAuthHeaders()` reads the stored session id on every request and has no
|
|
16
|
+
view of React auth state, so when hydration decided nobody was signed in the
|
|
17
|
+
id stayed in storage and kept riding on SDK calls. Both give-up branches now
|
|
18
|
+
clear it: the one where your `getSession` returns nothing, and the one where
|
|
19
|
+
the id it returned does not resolve to a profile.
|
|
20
|
+
|
|
21
|
+
This matters most where the app's cookie is shorter-lived than the BuildBase
|
|
22
|
+
session behind it - the Next.js starter sets a 7 day cookie against a 30 day
|
|
23
|
+
session, so the window opens once a month by design. In it the app renders
|
|
24
|
+
signed out while the SDK still authenticates as whoever was last signed in,
|
|
25
|
+
which on a shared browser is one person's session in the next person's tab.
|
|
26
|
+
|
|
27
|
+
`signOut` already did this; these paths did not.
|
|
28
|
+
|
|
29
|
+
Known limit: the id is read per request, so calls issued before hydration
|
|
30
|
+
resolves still carry it. Against the starter that is three org-scoped public
|
|
31
|
+
endpoints (`plans`, `credit-packages`, `settings`) which return the same bytes
|
|
32
|
+
to everyone; no authenticated request carries it. Closing that window needs
|
|
33
|
+
requests gated on hydration, which is a behaviour change for every consumer.
|
|
34
|
+
|
|
35
|
+
## [0.0.73] - 2026-09-28
|
|
36
|
+
|
|
37
|
+
### Added
|
|
38
|
+
|
|
39
|
+
- **An organization's own permissions.** Keys defined in the BuildBase console
|
|
40
|
+
(`app:reports:export`) arrive in `settings.workspace.customPermissions` and
|
|
41
|
+
resolve per role exactly like the platform's own, so `can('app:reports:export')`
|
|
42
|
+
answers from what the organization granted rather than from a prop the app
|
|
43
|
+
shipped. `usePermissions()` returns `appPermissionDefinitions` for rendering
|
|
44
|
+
them, and `appPermissionCatalogue(settings, appPermissions)` is exported for
|
|
45
|
+
the same list outside React. Needs a server from release 23.
|
|
46
|
+
- **Your backend can ask what a member may do.** The server client gains
|
|
47
|
+
`workspace.permissions(workspaceId)`, the server's own answer
|
|
48
|
+
(`{ role, isOwner, permissions }`), and `workspace.can(workspaceId, key)` for
|
|
49
|
+
one key or every key of a list. Check before acting rather than trusting the
|
|
50
|
+
browser.
|
|
51
|
+
- The workspace permissions screen lists the organization's catalogue with its
|
|
52
|
+
labels. Before, it could only infer keys from the `defaultPermissions` prop,
|
|
53
|
+
so a permission nobody had granted yet was invisible and ungrantable.
|
|
54
|
+
Keys passed through `defaultPermissions` keep working and are listed too.
|
|
55
|
+
- `Permission.WORKSPACE_USAGE_RECORD` (`workspace:usage:record`): recording usage
|
|
56
|
+
and spending credits. Editors hold it, viewers do not.
|
|
57
|
+
- **Enhanced conversions.** New `setIdentity({ email, phone })` on `useTracking()`: normalised per Google's spec (trimmed, lower case, dots removed from Gmail local parts; phones in E.164) and hashed with SHA-256 in the browser (WebCrypto, with the SDK's pure fallback). Only the hashes are kept. They are set as `gtag('set', 'user_data', { sha256_email_address, sha256_phone_number })` before each conversion and as Meta advanced matching (`fbq('init', id, { em, ph })`), and only when the app's console setting has enhanced conversions on and the visitor granted marketing consent. `SaaSOSProvider` supplies the signed-in user's email automatically. An `email` or `phone` passed in `setUser` traits is now routed here instead of reaching vendors raw.
|
|
58
|
+
- **Consent records.** `consent.set(state, { source?, consentString? })` also sends a record to `POST /api/v1/public/:orgId/consent` (choices, manifest version, a `bb_cid` visitor id, and the session when signed in), so the app can answer a data-subject request. The same answer restored on every page load is recorded once.
|
|
59
|
+
- **Attribution reaches the server, not only the vendors.** The `bb_attr` cookie now records when the landing was captured and its origin and path (never the query). `signIn()` sends it with the auth request as `trackingAttribution`, workspace creation sends it with the create call, and checkout metadata carries `bb_attr_ts`. The server stores it on the user and the workspace, so a trial that converts a week later from a Stripe webhook can be joined to the ad click. New `getAttributionRecord()` and `attributionPayload()`. Against an older server that rejects the new fields, sign-in and workspace creation retry without them.
|
|
60
|
+
- **Regional consent defaults.** `consent` also takes `{ default: 'granted', regions: { denied: ['EEA', 'GB', 'CH'] } }`; `'EEA'` expands to the 30 member states. The country comes from the tracking-config response (the edge's country header), never from the browser; an unknown country resolves to denied. With `consent: 'auto'` the client's regional default from the console applies when one is set. The rule is also sent to Google in its own `region` syntax. New `consent.effective`, `consent.default` and `consent.country` on `useTracking()`; `consent.state` is still only the visitor's answer. Checkout metadata now carries `consent.effective`, so a server-side send sees a granted regional default as granted. `EEA_COUNTRIES`, `SAFE_REGIONAL_CONSENT`, `expandRegions` and `resolveConsentDefault` are exported from `@buildbase/sdk/tracking`. Needs a server that returns `country`; against an older one every visitor resolves to denied, as before.
|
|
61
|
+
|
|
62
|
+
- **`@buildbase/sdk/server`: content from your server.** A client for blogs, docs, FAQs, testimonials, rich content and collection data that authenticates with an org API token and so only runs on a server: the package's `browser` export condition resolves to a module that throws at load, and `createServerClient` refuses to construct in a browser. It uses only standard `fetch`, so it runs on Node 18+, Bun, Deno, Cloudflare Workers and edge runtimes. Every read is cached (`memoryCache` by default, `redisCache` for ioredis or node-redis, `kvCache` for Workers KV or Upstash, or your own `CacheStore`) and revalidated with `If-None-Match`, so an unchanged resource costs one `304`. Identical concurrent reads share a request, and the last good copy is served if BuildBase is unreachable. Lists return published content unless asked otherwise. See `docs/SERVER-CONTENT.md`.
|
|
63
|
+
- **Content webhooks.** `handleContentWebhook(request, { secret, cache })` verifies a BuildBase webhook and drops the cached reads its event names (`blog.published`, `doc.updated`, `faq.updated`, `rich_content.updated`, `collection.record_created` and the rest in `CONTENT_WEBHOOK_EVENTS`), using the tag vocabulary in `contentTags`. `toNodeHandler()` adapts it to Express, Fastify and NestJS. Needs a server that sends content events; against an older one reads still revalidate on their TTL.
|
|
64
|
+
- **`@buildbase/sdk/server/next`.** `withNextCache()` hands caching to Next's data cache (`{ next: { tags, revalidate } }` on every read) and `createNextWebhookHandler()` calls `revalidateTag`. `next` is an optional peer.
|
|
65
|
+
- **Stale content is served while it refreshes.** A read past `max-age` but inside the response's `stale-while-revalidate` returns the cached copy at once and revalidates in the background, one request however many reads arrive. BuildBase sends `private, max-age=60, stale-while-revalidate=300`; `private` does not stop the client caching, since the cache is on your server.
|
|
66
|
+
- FAQ collections and their questions are read by slug through `GET /api/faqs/collections/slug/:slug` (and `/faqs`), a testimonial by id through `GET /api/testimonials/:id`, and live collection data with `latest=true` alone. These need the server release that ships content delivery.
|
|
67
|
+
- **`buildbase content pull`.** A CLI (`npx buildbase content pull --out content.json`) that writes all published content to one JSON file, for static sites and single-page apps with no backend. Reads the token from `BUILDBASE_API_TOKEN` only. `pullContent()` does the same from a build script.
|
|
68
|
+
|
|
69
|
+
### Changed
|
|
70
|
+
|
|
71
|
+
- **⚠️ Tags that honour Google Consent Mode now load before a consent answer, whatever their category.** Google Ads is a `marketing` tag, so it used to stay off the page until `consent.set({ marketing: true })`, which meant no cookieless pings and nothing for Google to model the unobserved conversions from. A vendor with `supportsConsentMode: true` (GTM, GA4, Google Ads) now loads in the denied state and stays after a refusal; every other vendor still waits for a yes in its category. `consent: 'denied'` still loads nothing at all.
|
|
72
|
+
- With a Google tag configured, the SDK sets `url_passthrough: true`, and `ads_data_redaction: true` while `ad_storage` is denied (cleared on a grant).
|
|
73
|
+
|
|
74
|
+
### Fixed
|
|
75
|
+
|
|
76
|
+
- **A grant made in the console reaches the member.** A role's app permissions
|
|
77
|
+
were read from the workspace override or the `defaultPermissions` prop only,
|
|
78
|
+
never from the organization's matrix, so a custom permission granted to a role
|
|
79
|
+
in the console answered `false` in the app while the server said yes. The SDK
|
|
80
|
+
now resolves in the server's order: workspace override, then the organization,
|
|
81
|
+
then the SDK defaults. A key the console does not catalogue keeps the prop's
|
|
82
|
+
default.
|
|
83
|
+
- **Admin holds every permission**, a custom one added after admin's list was
|
|
84
|
+
saved included, as the server and both settings screens say.
|
|
85
|
+
- **The Permissions screen appears for a console-only catalogue.** It was shown
|
|
86
|
+
only when the app passed `defaultPermissions`.
|
|
87
|
+
- **Saving the Permissions screen no longer strips platform permissions.** A
|
|
88
|
+
role the workspace had no override for was saved with its app keys only, so
|
|
89
|
+
an editor lost settings, members and usage access in that workspace. The
|
|
90
|
+
screen also starts from what each role resolves to now, the console's grants
|
|
91
|
+
included, and groups rows as the console does.
|
|
92
|
+
- `ISettings['workspace']` declares `customPermissions`, which the server already
|
|
93
|
+
sent but the type did not name.
|
|
94
|
+
- New helper `resolveRolePermissions(role, ctx)`: what one role may do, by the
|
|
95
|
+
same rules as `resolvePermissions`.
|
|
96
|
+
|
|
97
|
+
- **Inviting a member never preselects `admin`.** The invite form preselects the
|
|
98
|
+
org's default role, but not when that is `admin`: an invite sent with one click
|
|
99
|
+
handed over settings, members and billing. It falls back to `viewer`, then to
|
|
100
|
+
any other role. New helper `pickDefaultRole(roles, defaultRole)`.
|
|
101
|
+
- **Custom roles appear in the role dropdown.** Changing a member's role listed
|
|
102
|
+
the workspace's copy of the roles, made when it was created and never updated,
|
|
103
|
+
so a role added later in the console was missing. It lists the org's roles.
|
|
104
|
+
- **`DEFAULT_ROLE_PERMISSIONS` matches the server.** It had a `member` entry,
|
|
105
|
+
which no one can hold, and no `editor`, so an editor was shown nothing the
|
|
106
|
+
server allowed. It now names `admin`, `editor` and `viewer`. Servers from this
|
|
107
|
+
release send every role's effective permissions, so these defaults apply only
|
|
108
|
+
to older servers.
|
|
109
|
+
- An unknown role never falls back to `admin`, even when that is the org's
|
|
110
|
+
default role.
|
|
111
|
+
- **`useSeatStatus` applies the org's member ceiling by default.** It used the
|
|
112
|
+
org's `maxWorkspaceUsers` only when the caller passed it, so an app page that
|
|
113
|
+
did not showed no limit beside the SDK's own members screen showing 1/50 for
|
|
114
|
+
the same workspace. An explicit `settingsMaxUsers` still wins.
|
|
115
|
+
|
|
10
116
|
## [0.0.71] - 2026-09-25
|
|
11
117
|
|
|
12
118
|
Ships with BuildBase server release 22. Every item below that says it needs a
|
package/README.md
CHANGED
|
@@ -21,6 +21,7 @@ Also works server-side (Next.js API routes, Express, Hono) — see [Server-Side
|
|
|
21
21
|
- [Trial Gates](#-trial-gates)
|
|
22
22
|
- [Push Notifications](#-push-notifications)
|
|
23
23
|
- [Notifications](#-notifications)
|
|
24
|
+
- [Content from your server](#️-content-from-your-server)
|
|
24
25
|
- [Connected Agents](#-connected-agents)
|
|
25
26
|
- [Devices & Sessions](#-devices--sessions)
|
|
26
27
|
- [User Management](#-user-management)
|
|
@@ -113,16 +114,20 @@ that has them. Everything else works on any server. Where a feature needs a
|
|
|
113
114
|
newer server than yours, the SDK degrades the way the table says rather than
|
|
114
115
|
breaking.
|
|
115
116
|
|
|
116
|
-
| Feature | SDK | Server
|
|
117
|
-
| ---------------------------------------------------------------------------------------- | ------ |
|
|
118
|
-
| Workspace invitations (`inviteMember`, `<PendingInvitations />`, the landing) | 0.0.71 | release 22
|
|
119
|
-
| Notification inbox (`useNotifications`, `<NotificationBell />`, `<NotificationInbox />`) | 0.0.71 | release 22
|
|
120
|
-
| Live inbox updates | 0.0.71 | release 22
|
|
121
|
-
| Per-member notification preferences | 0.0.71 | release 22
|
|
122
|
-
| A slug not set up registers itself on first send | any | release 22
|
|
123
|
-
| Forbidden requests answer 403, so a viewer stays signed in | any | release 22
|
|
124
|
-
|
|
|
125
|
-
| `
|
|
117
|
+
| Feature | SDK | Server | On an older server |
|
|
118
|
+
| ---------------------------------------------------------------------------------------- | ------ | ---------------- | --------------------------------------------------------------- |
|
|
119
|
+
| Workspace invitations (`inviteMember`, `<PendingInvitations />`, the landing) | 0.0.71 | release 22 | The invite form answers 404 |
|
|
120
|
+
| Notification inbox (`useNotifications`, `<NotificationBell />`, `<NotificationInbox />`) | 0.0.71 | release 22 | The inbox routes answer 404 |
|
|
121
|
+
| Live inbox updates | 0.0.71 | release 22 | The socket is refused; the one-minute poll carries on |
|
|
122
|
+
| Per-member notification preferences | 0.0.71 | release 22 | The screen edits the workspace defaults, as before |
|
|
123
|
+
| A slug not set up registers itself on first send | any | release 22 | The notification is sent unregistered, push and inbox only |
|
|
124
|
+
| Forbidden requests answer 403, so a viewer stays signed in | any | release 22 | A 401 ends the session |
|
|
125
|
+
| Content from your server (`@buildbase/sdk/server`: blogs, docs, rich content, lists) | next | any | |
|
|
126
|
+
| FAQ collections by slug, `testimonials.get(id)`, collection data without a `version` | next | content delivery | 404 (FAQ, testimonial) or 400 (collection data) |
|
|
127
|
+
| Content reads answered `304` from BuildBase's cache, with `stale-while-revalidate` | next | content delivery | Every read gets the full body; the client caches on its own TTL |
|
|
128
|
+
| Content webhooks (`handleContentWebhook`, `createNextWebhookHandler`) | next | content delivery | No events arrive; cached reads expire on their TTL |
|
|
129
|
+
| Tracking (`tracking` prop, `/tracking` entry) | 0.0.68 | any | |
|
|
130
|
+
| `signOut()` revokes the session on the server | 0.0.70 | any | |
|
|
126
131
|
|
|
127
132
|
## Quick Start
|
|
128
133
|
|
|
@@ -1144,6 +1149,34 @@ interface NotificationEvent {
|
|
|
1144
1149
|
}
|
|
1145
1150
|
```
|
|
1146
1151
|
|
|
1152
|
+
## 🗂️ Content from your server
|
|
1153
|
+
|
|
1154
|
+
Blogs, docs, FAQs, testimonials, rich content and collection data are read with an
|
|
1155
|
+
**org API token**, so they are read on your server or at build time, never in a browser.
|
|
1156
|
+
`@buildbase/sdk/server` reads them, caches every read, revalidates with ETags, and
|
|
1157
|
+
drops what changed when BuildBase sends a content webhook. It runs on Node 18+, Bun,
|
|
1158
|
+
Deno, Cloudflare Workers and edge runtimes, and refuses to load in a browser.
|
|
1159
|
+
|
|
1160
|
+
```ts
|
|
1161
|
+
import { createServerClient } from '@buildbase/sdk/server';
|
|
1162
|
+
|
|
1163
|
+
const content = createServerClient({
|
|
1164
|
+
serverUrl: 'https://api.console.buildbase.app',
|
|
1165
|
+
apiToken: process.env.BUILDBASE_API_TOKEN!, // <orgId>:<secret>, read-only content-reader role
|
|
1166
|
+
});
|
|
1167
|
+
|
|
1168
|
+
const posts = await content.blogs.list({ limit: 20 });
|
|
1169
|
+
const refund = await content.richContent.get('refund-policy');
|
|
1170
|
+
const releases = await content.collections.data('release-notes');
|
|
1171
|
+
```
|
|
1172
|
+
|
|
1173
|
+
- **A server (any framework):** the client above, plus `handleContentWebhook` (standard `Request`/`Response`) or `toNodeHandler(...)` for Express, Fastify and NestJS.
|
|
1174
|
+
- **No backend (static sites, single-page apps):** `npx buildbase content pull --out content.json` in CI; the token never leaves CI.
|
|
1175
|
+
- **Next.js:** `withNextCache()` and `createNextWebhookHandler()` from `@buildbase/sdk/server/next` hand caching to Next's tag cache.
|
|
1176
|
+
- **Another language:** the same HTTP rules (`If-None-Match`, bracket-encoded filters, HMAC-signed webhooks).
|
|
1177
|
+
|
|
1178
|
+
The full guide, with Express, Hono/Workers, Next and Python examples, is [`docs/SERVER-CONTENT.md`](docs/SERVER-CONTENT.md).
|
|
1179
|
+
|
|
1147
1180
|
## 🌐 Internationalization (i18n)
|
|
1148
1181
|
|
|
1149
1182
|
The SDK supports 8 locales with ICU MessageFormat for plurals, selects, and number formatting.
|
package/dist/cli.mjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{mkdir as e,writeFile as t}from"node:fs/promises";import{resolve as o,dirname as n}from"node:path";const s=["blogs","docs","faqs","testimonials","richContent","collections"];async function r(e){const t=[];for(let o=1;o<=1e4;o++){const n=await e(o);t.push(...n.docs);if(!(n.hasNextPage??(void 0!==n.totalPages&&o<n.totalPages))||0===n.docs.length)break}return t}const a=`Usage: buildbase content pull --out <file> [options]\n\nFetch published content once and write it to a JSON file (run it in CI or at build time).\n\nOptions:\n --out <file> where to write the JSON (required)\n --modules <list> comma-separated: ${s.join(",")} (default: all)\n --collections <slugs> collection slugs to pull records for (default: every live collection)\n --server-url <url> overrides BUILDBASE_SERVER_URL\n --page-size <n> page size while paging lists (default 100)\n\nEnvironment:\n BUILDBASE_API_TOKEN org API token, <orgId>:<secret> (required)\n BUILDBASE_SERVER_URL e.g. https://api.console.buildbase.app`;function i(e){return(e??"").split(",").map(e=>e.trim()).filter(Boolean)}function l(e={}){const t=Math.max(1,e.maxEntries??1e3),o=new Map,n=new Map,s=e=>{const t=o.get(e);t&&(o.delete(e),((e,t)=>{for(const o of t.tags){const t=n.get(o);t&&(t.delete(e),0===t.size&&n.delete(o))}})(e,t.entry))};return{async get(e){const t=o.get(e);if(t){if(!(t.expiresAt<=Date.now()))return o.delete(e),o.set(e,t),t.entry;s(e)}},async set(e,r,a){s(e),o.set(e,{entry:r,expiresAt:Date.now()+1e3*a});for(const t of r.tags){let o=n.get(t);o||n.set(t,o=new Set),o.add(e)}for(;o.size>t;){const e=o.keys().next().value;if(void 0===e)break;s(e)}},async delete(e){s(e)},async deleteByTag(e){const t=n.get(e);if(t)for(const e of[...t])s(e)}}}function c(e,t,o){if(null!=o)if(Array.isArray(o))o.forEach((o,n)=>c(e,`${t}[${n}]`,o));else if("object"!=typeof o)e.append(t,String(o));else for(const[n,s]of Object.entries(o))c(e,`${t}[${n}]`,s)}const u="buildbase:all",d=e=>`buildbase:${e}`,f=(e,t)=>`buildbase:${e}:${t}`,p=(e,t)=>`buildbase:${e}:id:${t}`,h=e=>`buildbase:collection:${e}`;new Set(["blog.published","blog.updated","blog.unpublished","blog.deleted","doc.published","doc.updated","doc.unpublished","doc.deleted","faq.updated","faq_collection.updated","testimonial.updated","testimonial.deleted","rich_content.updated","rich_content.deleted","collection.version_published","collection.record_created","collection.record_updated","collection.record_deleted"]);class g extends Error{constructor(e,t,o,n){super(e),this.status=t,this.url=o,this.body=n,this.name="BuildBaseContentError"}}const m=/^[0-9a-f]{24}$/i,w=new WeakMap;function b(e){return Array.isArray(e)?e:e&&"object"==typeof e&&Array.isArray(e.docs)?e.docs:[]}function y(e){const t=e.split("/").filter(Boolean);return t[t.length-1]??e}function v(e={},t={}){const o={...t,...e.filter};return{$page:e.page,$limit:e.limit,filter:Object.keys(o).length>0?o:void 0,sort:e.sort}}function $(e){if("undefined"!=typeof window&&"undefined"!=typeof document)throw new Error("@buildbase/sdk/server holds your org API token and must only run on a server. Import it from server code (an API route, a server component, a build script), never from code that ships to the browser.");if(!e||"string"!=typeof e.serverUrl||!e.serverUrl)throw new Error("createServerClient: `serverUrl` is required");if("string"!=typeof e.apiToken||!e.apiToken.includes(":"))throw new Error("createServerClient: `apiToken` must be an org API token of the form <orgId>:<secret> (console, Settings, API tokens)");const t=e.serverUrl.replace(/\/+$/,""),o=e.apiToken,n=o.slice(0,o.indexOf(":")),s=!1===e.cache?null:e.cache??l(),r=e.fetch??((e,t)=>globalThis.fetch(e,t)),a=e.timeoutMs??1e4,i=e.defaultTtlSeconds??60,$=Math.max(e.retainSeconds??86400,1),q=e.staleOnError??!0,U=new Map,E=(e,t)=>(e&&"object"==typeof e&&w.set(e,t),e);async function I(n,s,i){const l="function"==typeof e.requestInit?e.requestInit({path:n,tags:s}):e.requestInit??{},c=new Headers(l.headers);c.set("Authorization",`Bearer ${o}`),c.set("Accept","application/json"),i&&c.set("If-None-Match",i);const u=new AbortController,d=setTimeout(()=>u.abort(),a);try{return await r(`${t}${n}`,{...l,method:"GET",headers:c,signal:l.signal??u.signal})}finally{clearTimeout(d)}}async function _(e){const o=`${e.path}${function(e){if(!e)return"";const t=new URLSearchParams;for(const o of Object.keys(e).sort())c(t,o,e[o]);t.sort();const o=t.toString();return o?`?${o}`:""}(e.query)}`,r=`${n}:${o}`,a=s?await s.get(r):void 0,l=Date.now();if(a&&a.freshUntil>l)return E(a.data,a.tags);const d=()=>{const n=async function(){let n;try{n=await I(o,e.tags,a?.etag),304!==n.status||a||(n=await I(o,e.tags))}catch(e){if(q&&a)return E(a.data,a.tags);throw new g(`BuildBase request failed: ${e instanceof Error?e.message:String(e)}`,0,`${t}${o}`)}const l=function(e,t){const o=e.headers.get("cache-control");if(!o)return t;const n=o.toLowerCase().split(",").map(e=>e.trim());if(n.includes("no-store"))return null;if(n.includes("no-cache"))return 0;const s=n.find(e=>e.startsWith("max-age="));if(s){const e=Number(s.slice(8));if(Number.isFinite(e)&&e>=0)return e}return t}(n,i),c=function(e){const t=e.headers.get("cache-control");if(!t)return 0;const o=t.toLowerCase().split(",").map(e=>e.trim()).find(e=>e.startsWith("stale-while-revalidate=")),n=o?Number(o.slice(23)):0;return Number.isFinite(n)&&n>0?n:0}(n);if(304===n.status&&a){const e={...a,etag:n.headers.get("etag")??a.etag,freshUntil:Date.now()+1e3*(l??0),staleUntil:c>0?Date.now()+1e3*((l??0)+c):void 0};return s&&await s.set(r,e,$),E(a.data,a.tags)}if(404===n.status&&e.nullOnNotFound)return null;if(!n.ok){const s=await n.text().catch(()=>"");let r=s;try{r=s?JSON.parse(s):void 0}catch{}if(q&&a&&401!==n.status&&403!==n.status)return E(a.data,a.tags);const i=r?.message??`BuildBase responded ${n.status} for ${e.path}`;throw new g(i,n.status,`${t}${o}`,r)}const d=(f=await n.json().catch(()=>null),f&&"object"==typeof f&&!Array.isArray(f)&&"data"in f&&"success"in f&&!("docs"in f)?f.data:f);var f;if(null==d&&e.nullOnNotFound)return null;const p=e.transform?e.transform(d):d,h=[...new Set([...e.tags,...e.tagsFrom?e.tagsFrom(p):[],u])];s&&null!==l&&await s.set(r,{data:p,etag:n.headers.get("etag")??void 0,freshUntil:Date.now()+1e3*l,staleUntil:c>0?Date.now()+1e3*(l+c):void 0,tags:h},Math.max($,l));return E(p,h)}();return U.set(r,n),n.then(()=>U.delete(r),()=>U.delete(r)),n};if(a&&void 0!==a.staleUntil&&a.staleUntil>l)return U.has(r)||d().catch(()=>{}),E(a.data,a.tags);const f=U.get(r);return f||d()}const A=e=>t=>{const o=[];return t?._id&&o.push(p(e,t._id)),t?.slug&&o.push(f(e,t.slug)),o};function S(e,t){const o=d(t);return{list:(t={})=>_({path:`/api/${e}`,query:v(t,t.includeDrafts?{}:{published:!0}),tags:[o]}),get:o=>_({path:`/api/${e}/${encodeURIComponent(o)}`,tags:[p(t,o)],tagsFrom:A(t),nullOnNotFound:!0}),byPath:(o,n={})=>_({path:`/api/${e}/path`,query:{path:o,draftPreview:!!n.draftPreview||void 0},tags:[f(t,y(o))],tagsFrom:A(t),nullOnNotFound:!0}),tree:(t={})=>_({path:`/api/${e}/folders/tree`,query:{folder:t.folder},tags:[o]}),tags:(t={})=>_({path:`/api/${e}/tags`,query:v(t),tags:[o]}),authors:(t={})=>_({path:`/api/${e}/authors`,query:v(t),tags:[o]})}}const B=d("faq_collection");async function O(e){const t=m.test(e);return _({path:t?`/api/faqs/collections/${encodeURIComponent(e)}`:`/api/faqs/collections/slug/${encodeURIComponent(e)}`,tags:[t?p("faq_collection",e):f("faq_collection",e)],tagsFrom:A("faq_collection"),nullOnNotFound:!0})}return{blogs:S("blogs","blog"),docs:S("docs","doc"),faqs:{collections:(e={})=>_({path:"/api/faqs/collections",query:v(e,{archived:!1}),tags:[B]}),collection:O,async questions(e){const t=m.test(e);if(t&&!await O(e))return[];return await _({path:t?`/api/faqs/collections/${encodeURIComponent(e)}/faqs`:`/api/faqs/collections/slug/${encodeURIComponent(e)}/faqs`,query:{pagination:!1},tags:[d("faq"),t?p("faq_collection",e):f("faq_collection",e)],transform:e=>b(e).filter(e=>!e.archived),nullOnNotFound:!0})??[]}},testimonials:{list:(e={})=>_({path:"/api/testimonials",query:v(e,e.includeUnpublished?{archived:!1}:{published:!0,archived:!1}),tags:[d("testimonial")]}),get:e=>_({path:`/api/testimonials/${encodeURIComponent(e)}`,tags:[p("testimonial",e)],nullOnNotFound:!0})},richContent:{get:e=>_({path:`/api/rich-content/slug/${encodeURIComponent(e)}`,tags:[f("rich_content",e)],tagsFrom:A("rich_content"),nullOnNotFound:!0}),list:(e={})=>_({path:"/api/rich-content",query:v(e,{archived:!1}),tags:[d("rich_content")]})},collections:{list:(e={})=>_({path:"/api/collections",query:v(e,{archived:!1}),tags:[d("collection")]}),data(e,t={}){const o=void 0===t.version;return _({path:`/api/collections/data/${encodeURIComponent(e)}`,query:o?{latest:!0}:{version:t.version},tags:[h(e)],transform:e=>b(e).filter(e=>!e.archived)})}},async revalidate(e){s&&await s.deleteByTag(e)},async revalidateAll(){s&&await s.deleteByTag(u)},cache:s}}(async function(l){let c;try{c=function(e){const[t,o,...n]=e;if(!t||"--help"===t||"-h"===t||"help"===t)return{command:"help"};if("content"!==t||"pull"!==o)throw new Error(`Unknown command: ${[t,o].filter(Boolean).join(" ")}`);const r=new Map;for(let e=0;e<n.length;e++){const t=n[e];if("--help"===t||"-h"===t)return{command:"help"};if(!t.startsWith("--"))throw new Error(`Unexpected argument: ${t}`);const o=t.indexOf("=");if(o>-1)r.set(t.slice(2,o),t.slice(o+1));else{const o=n[e+1];if(void 0===o||o.startsWith("--"))throw new Error(`Missing value for ${t}`);r.set(t.slice(2),o),e++}}const a=new Set(["out","modules","collections","server-url","page-size"]);for(const e of r.keys())if(!a.has(e))throw new Error(`Unknown option: --${e}`);const l=r.get("out");if(!l)throw new Error("--out <file> is required");let c,u;if(r.has("modules")){const e=i(r.get("modules")),t=e.filter(e=>!s.includes(e));if(t.length)throw new Error(`Unknown module(s): ${t.join(", ")}. Use: ${s.join(", ")}`);c=e}if(r.has("page-size")&&(u=Number(r.get("page-size")),!Number.isInteger(u)||u<1))throw new Error("--page-size must be a positive integer");return{command:"content-pull",out:l,modules:c,collections:r.has("collections")?i(r.get("collections")):void 0,serverUrl:r.get("server-url"),pageSize:u}}(l)}catch(e){return console.error(`buildbase: ${e.message}\n\n${a}`),2}if("help"===c.command)return console.log(a),0;const u=process.env.BUILDBASE_API_TOKEN,d=c.serverUrl??process.env.BUILDBASE_SERVER_URL??process.env.NEXT_PUBLIC_BUILDBASE_SERVER_URL;if(!u)return console.error("buildbase: set BUILDBASE_API_TOKEN to an org API token (<orgId>:<secret>)"),2;if(!d)return console.error("buildbase: set BUILDBASE_SERVER_URL (for example https://api.console.buildbase.app)"),2;try{const a=$({serverUrl:d,apiToken:u,cache:!1}),i=await async function(e,t={}){const o=new Set(t.modules??s),n=t.pageSize??100,a={generatedAt:(new Date).toISOString()};if(o.has("blogs")&&(a.blogs=await r(t=>e.blogs.list({page:t,limit:n}))),o.has("docs")&&(a.docs=await r(t=>e.docs.list({page:t,limit:n}))),o.has("faqs")){const t=await r(t=>e.faqs.collections({page:t,limit:n}));a.faqs=[];for(const o of t)a.faqs.push({...o,questions:await e.faqs.questions(o._id)})}if(o.has("testimonials")&&(a.testimonials=await r(t=>e.testimonials.list({page:t,limit:n}))),o.has("richContent")&&(a.richContent=await r(t=>e.richContent.list({page:t,limit:n}))),o.has("collections")){const o=t.collections??(await r(t=>e.collections.list({page:t,limit:n}))).map(e=>e.slug);a.collections={};for(const t of o)a.collections[t]=await e.collections.data(t)}return a}(a,{modules:c.modules,collections:c.collections,pageSize:c.pageSize}),l=o(process.cwd(),c.out);await e(n(l),{recursive:!0}),await t(l,`${JSON.stringify(i,null,2)}\n`,"utf8");const f=Object.entries(i).filter(([e])=>"generatedAt"!==e).map(([e,t])=>`${e}: ${Array.isArray(t)?t.length:Object.keys(t).length}`).join(", ");return console.log(`buildbase: wrote ${c.out} (${f})`),0}catch(e){return e instanceof g&&(401===e.status||403===e.status)?(console.error(`buildbase: the API token was refused (${e.status}). Check BUILDBASE_API_TOKEN and that its role can read content.`),1):(console.error(`buildbase: ${e.message}`),1)}})(process.argv.slice(2)).then(e=>process.exit(e),e=>{console.error(e),process.exit(1)});
|
package/dist/css/styles.css
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
.saas-os-ui *,.saas-os-ui :after,.saas-os-ui :before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.saas-os-ui ::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*
|
|
2
2
|
! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com
|
|
3
|
-
*/.saas-os-ui *,.saas-os-ui :after,.saas-os-ui :before{border:0 solid #e5e7eb;box-sizing:border-box}.saas-os-ui :after,.saas-os-ui :before{--tw-content:""}.saas-os-ui,.saas-os-ui :host{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}.saas-os-ui{line-height:inherit;margin:0}.saas-os-ui hr{border-top-width:1px;color:inherit;height:0}.saas-os-ui abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.saas-os-ui h1,.saas-os-ui h2,.saas-os-ui h3,.saas-os-ui h4,.saas-os-ui h5,.saas-os-ui h6{font-size:inherit;font-weight:inherit}.saas-os-ui a{color:inherit;text-decoration:inherit}.saas-os-ui b,.saas-os-ui strong{font-weight:bolder}.saas-os-ui code,.saas-os-ui kbd,.saas-os-ui pre,.saas-os-ui samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}.saas-os-ui small{font-size:80%}.saas-os-ui sub,.saas-os-ui sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.saas-os-ui sub{bottom:-.25em}.saas-os-ui sup{top:-.5em}.saas-os-ui table{border-collapse:collapse;border-color:inherit;text-indent:0}.saas-os-ui button,.saas-os-ui input,.saas-os-ui optgroup,.saas-os-ui select,.saas-os-ui textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}.saas-os-ui button,.saas-os-ui select{text-transform:none}.saas-os-ui button,.saas-os-ui input:where([type=button]),.saas-os-ui input:where([type=reset]),.saas-os-ui input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}.saas-os-ui :-moz-focusring{outline:auto}.saas-os-ui :-moz-ui-invalid{box-shadow:none}.saas-os-ui progress{vertical-align:baseline}.saas-os-ui ::-webkit-inner-spin-button,.saas-os-ui ::-webkit-outer-spin-button{height:auto}.saas-os-ui [type=search]{-webkit-appearance:textfield;outline-offset:-2px}.saas-os-ui ::-webkit-search-decoration{-webkit-appearance:none}.saas-os-ui ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.saas-os-ui summary{display:list-item}.saas-os-ui blockquote,.saas-os-ui dd,.saas-os-ui dl,.saas-os-ui figure,.saas-os-ui h1,.saas-os-ui h2,.saas-os-ui h3,.saas-os-ui h4,.saas-os-ui h5,.saas-os-ui h6,.saas-os-ui hr,.saas-os-ui p,.saas-os-ui pre{margin:0}.saas-os-ui fieldset{margin:0;padding:0}.saas-os-ui legend{padding:0}.saas-os-ui menu,.saas-os-ui ol,.saas-os-ui ul{list-style:none;margin:0;padding:0}.saas-os-ui dialog{padding:0}.saas-os-ui textarea{resize:vertical}.saas-os-ui input::-moz-placeholder,.saas-os-ui textarea::-moz-placeholder{color:#9ca3af;opacity:1}.saas-os-ui input::placeholder,.saas-os-ui textarea::placeholder{color:#9ca3af;opacity:1}.saas-os-ui [role=button],.saas-os-ui button{cursor:pointer}.saas-os-ui :disabled{cursor:default}.saas-os-ui audio,.saas-os-ui canvas,.saas-os-ui embed,.saas-os-ui iframe,.saas-os-ui img,.saas-os-ui object,.saas-os-ui svg,.saas-os-ui video{display:block;vertical-align:middle}.saas-os-ui img,.saas-os-ui video{height:auto;max-width:100%}.saas-os-ui [hidden]:where(:not([hidden=until-found])){display:none}.saas-os-ui{--background:0 0% 100%;--foreground:222.2 84% 4.9%;--card:0 0% 100%;--card-foreground:222.2 84% 4.9%;--popover:0 0% 100%;--popover-foreground:222.2 84% 4.9%;--primary:222.2 47.4% 11.2%;--primary-foreground:210 40% 98%;--secondary:210 40% 96%;--secondary-foreground:222.2 84% 4.9%;--muted:210 40% 96%;--muted-foreground:215.4 16.3% 46.9%;--accent:210 40% 96%;--accent-foreground:222.2 84% 4.9%;--destructive:0 84.2% 60.2%;--destructive-foreground:210 40% 98%;--success:142 72% 29%;--success-foreground:0 0% 100%;--warning:26 90% 37%;--warning-foreground:0 0% 100%;--info:224 76% 48%;--info-foreground:0 0% 100%;--border:214.3 31.8% 91.4%;--input:214.3 31.8% 91.4%;--ring:222.2 84% 4.9%;--radius:0.5rem}.dark .saas-os-ui,.saas-os-ui .dark,.saas-os-ui.dark{--background:222.2 84% 4.9%;--foreground:210 40% 98%;--card:222.2 84% 4.9%;--card-foreground:210 40% 98%;--popover:222.2 84% 4.9%;--popover-foreground:210 40% 98%;--primary:210 40% 98%;--primary-foreground:222.2 47.4% 11.2%;--secondary:217.2 32.6% 17.5%;--secondary-foreground:210 40% 98%;--muted:217.2 32.6% 17.5%;--muted-foreground:215 20.2% 65.1%;--accent:217.2 32.6% 17.5%;--accent-foreground:210 40% 98%;--destructive:0 62.8% 30.6%;--destructive-foreground:210 40% 98%;--success:142 69% 58%;--success-foreground:222.2 47.4% 11.2%;--warning:38 92% 50%;--warning-foreground:222.2 47.4% 11.2%;--info:217 91% 60%;--info-foreground:222.2 47.4% 11.2%;--border:217.2 32.6% 17.5%;--input:217.2 32.6% 17.5%;--ring:212.7 26.8% 83.9%}.saas-os-ui *{border-color:hsl(var(--border))}.saas-os-ui{background-color:hsl(var(--background));color:hsl(var(--foreground))}.saas-os-ui .container{width:100%}@media (min-width:640px){.saas-os-ui .container{max-width:640px}}@media (min-width:768px){.saas-os-ui .container{max-width:768px}}@media (min-width:1024px){.saas-os-ui .container{max-width:1024px}}@media (min-width:1280px){.saas-os-ui .container{max-width:1280px}}@media (min-width:1536px){.saas-os-ui .container{max-width:1536px}}.saas-os-ui .sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.saas-os-ui .pointer-events-none{pointer-events:none}.saas-os-ui .visible{visibility:visible}.saas-os-ui .invisible{visibility:hidden}.saas-os-ui .collapse{visibility:collapse}.saas-os-ui .static{position:static}.saas-os-ui .fixed{position:fixed}.saas-os-ui .absolute{position:absolute}.saas-os-ui .relative{position:relative}.saas-os-ui .sticky{position:sticky}.saas-os-ui .inset-0{inset:0}.saas-os-ui .-end-0\.5{inset-inline-end:-.125rem}.saas-os-ui .-top-0\.5{top:-.125rem}.saas-os-ui .end-2{inset-inline-end:.5rem}.saas-os-ui .end-8{inset-inline-end:2rem}.saas-os-ui .left-\[50\%\]{left:50%}.saas-os-ui .right-2{right:.5rem}.saas-os-ui .start-0{inset-inline-start:0}.saas-os-ui .start-3{inset-inline-start:.75rem}.saas-os-ui .top-0{top:0}.saas-os-ui .top-1\/2{top:50%}.saas-os-ui .top-2{top:.5rem}.saas-os-ui .top-\[50\%\]{top:50%}.saas-os-ui .isolate{isolation:isolate}.saas-os-ui .z-10{z-index:10}.saas-os-ui .z-20{z-index:20}.saas-os-ui .z-30{z-index:30}.saas-os-ui .z-50{z-index:50}.saas-os-ui .m-0{margin:0}.saas-os-ui .-mx-1{margin-left:-.25rem;margin-right:-.25rem}.saas-os-ui .mx-auto{margin-left:auto;margin-right:auto}.saas-os-ui .my-1{margin-bottom:.25rem;margin-top:.25rem}.saas-os-ui .my-2{margin-bottom:.5rem;margin-top:.5rem}.saas-os-ui .my-2\.5{margin-bottom:.625rem;margin-top:.625rem}.saas-os-ui .my-4{margin-bottom:1rem;margin-top:1rem}.saas-os-ui .-mb-px{margin-bottom:-1px}.saas-os-ui .-ms-2{margin-inline-start:-.5rem}.saas-os-ui .mb-0\.5{margin-bottom:.125rem}.saas-os-ui .mb-1{margin-bottom:.25rem}.saas-os-ui .mb-1\.5{margin-bottom:.375rem}.saas-os-ui .mb-2{margin-bottom:.5rem}.saas-os-ui .mb-2\.5{margin-bottom:.625rem}.saas-os-ui .mb-3{margin-bottom:.75rem}.saas-os-ui .mb-4{margin-bottom:1rem}.saas-os-ui .me-1\.5{margin-inline-end:.375rem}.saas-os-ui .me-2{margin-inline-end:.5rem}.saas-os-ui .ml-1{margin-left:.25rem}.saas-os-ui .ms-1{margin-inline-start:.25rem}.saas-os-ui .ms-1\.5{margin-inline-start:.375rem}.saas-os-ui .ms-2{margin-inline-start:.5rem}.saas-os-ui .ms-auto{margin-inline-start:auto}.saas-os-ui .mt-0\.5{margin-top:.125rem}.saas-os-ui .mt-1{margin-top:.25rem}.saas-os-ui .mt-1\.5{margin-top:.375rem}.saas-os-ui .mt-2{margin-top:.5rem}.saas-os-ui .mt-3{margin-top:.75rem}.saas-os-ui .mt-4{margin-top:1rem}.saas-os-ui .mt-6{margin-top:1.5rem}.saas-os-ui .mt-auto{margin-top:auto}.saas-os-ui .line-clamp-1{-webkit-line-clamp:1}.saas-os-ui .line-clamp-1,.saas-os-ui .line-clamp-2{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.saas-os-ui .line-clamp-2{-webkit-line-clamp:2}.saas-os-ui .line-clamp-3{-webkit-box-orient:vertical;-webkit-line-clamp:3;display:-webkit-box;overflow:hidden}.saas-os-ui .block{display:block}.saas-os-ui .inline-block{display:inline-block}.saas-os-ui .inline{display:inline}.saas-os-ui .flex{display:flex}.saas-os-ui .inline-flex{display:inline-flex}.saas-os-ui .table{display:table}.saas-os-ui .grid{display:grid}.saas-os-ui .contents{display:contents}.saas-os-ui .hidden{display:none}.saas-os-ui .aspect-square{aspect-ratio:1/1}.saas-os-ui .h-1\.5{height:.375rem}.saas-os-ui .h-10{height:2.5rem}.saas-os-ui .h-11{height:2.75rem}.saas-os-ui .h-12{height:3rem}.saas-os-ui .h-14{height:3.5rem}.saas-os-ui .h-16{height:4rem}.saas-os-ui .h-2{height:.5rem}.saas-os-ui .h-2\.5{height:.625rem}.saas-os-ui .h-20{height:5rem}.saas-os-ui .h-24{height:6rem}.saas-os-ui .h-3{height:.75rem}.saas-os-ui .h-3\.5{height:.875rem}.saas-os-ui .h-32{height:8rem}.saas-os-ui .h-4{height:1rem}.saas-os-ui .h-48{height:12rem}.saas-os-ui .h-5{height:1.25rem}.saas-os-ui .h-6{height:1.5rem}.saas-os-ui .h-64{height:16rem}.saas-os-ui .h-7{height:1.75rem}.saas-os-ui .h-8{height:2rem}.saas-os-ui .h-9{height:2.25rem}.saas-os-ui .h-\[1px\]{height:1px}.saas-os-ui .h-\[20px\]{height:20px}.saas-os-ui .h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.saas-os-ui .h-dvh{height:100dvh}.saas-os-ui .h-full{height:100%}.saas-os-ui .h-px{height:1px}.saas-os-ui .h-screen{height:100vh}.saas-os-ui .max-h-24{max-height:6rem}.saas-os-ui .max-h-\[300px\]{max-height:300px}.saas-os-ui .max-h-\[min\(32rem\2c calc\(100vh-6rem\)\)\]{max-height:min(32rem,calc(100vh - 6rem))}.saas-os-ui .max-h-dvh{max-height:100dvh}.saas-os-ui .min-h-0{min-height:0}.saas-os-ui .min-h-\[3rem\]{min-height:3rem}.saas-os-ui .w-10{width:2.5rem}.saas-os-ui .w-12{width:3rem}.saas-os-ui .w-16{width:4rem}.saas-os-ui .w-2{width:.5rem}.saas-os-ui .w-2\.5{width:.625rem}.saas-os-ui .w-24{width:6rem}.saas-os-ui .w-3{width:.75rem}.saas-os-ui .w-3\.5{width:.875rem}.saas-os-ui .w-32{width:8rem}.saas-os-ui .w-4{width:1rem}.saas-os-ui .w-48{width:12rem}.saas-os-ui .w-5{width:1.25rem}.saas-os-ui .w-6{width:1.5rem}.saas-os-ui .w-7{width:1.75rem}.saas-os-ui .w-72{width:18rem}.saas-os-ui .w-8{width:2rem}.saas-os-ui .w-\[1px\]{width:1px}.saas-os-ui .w-\[36px\]{width:36px}.saas-os-ui .w-\[min\(24rem\2c calc\(100vw-2rem\)\)\]{width:min(24rem,calc(100vw - 2rem))}.saas-os-ui .w-full{width:100%}.saas-os-ui .w-screen{width:100vw}.saas-os-ui .min-w-0{min-width:0}.saas-os-ui .min-w-4{min-width:1rem}.saas-os-ui .min-w-\[160px\]{min-width:160px}.saas-os-ui .min-w-\[80px\]{min-width:80px}.saas-os-ui .min-w-\[8rem\]{min-width:8rem}.saas-os-ui .min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.saas-os-ui .min-w-full{min-width:100%}.saas-os-ui .max-w-2xl{max-width:42rem}.saas-os-ui .max-w-fit{max-width:-moz-fit-content;max-width:fit-content}.saas-os-ui .max-w-full{max-width:100%}.saas-os-ui .max-w-lg{max-width:32rem}.saas-os-ui .max-w-none{max-width:none}.saas-os-ui .max-w-xl{max-width:36rem}.saas-os-ui .flex-1{flex:1 1 0%}.saas-os-ui .flex-shrink-0{flex-shrink:0}.saas-os-ui .shrink{flex-shrink:1}.saas-os-ui .shrink-0{flex-shrink:0}.saas-os-ui .grow{flex-grow:1}.saas-os-ui .border-separate{border-collapse:separate}.saas-os-ui .border-spacing-0{--tw-border-spacing-x:0px;--tw-border-spacing-y:0px;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y)}.saas-os-ui .-translate-y-1\/2{--tw-translate-y:-50%}.saas-os-ui .-translate-y-1\/2,.saas-os-ui .translate-x-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.saas-os-ui .translate-x-0{--tw-translate-x:0px}.saas-os-ui .translate-x-\[-50\%\]{--tw-translate-x:-50%}.saas-os-ui .translate-x-\[-50\%\],.saas-os-ui .translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.saas-os-ui .translate-y-0{--tw-translate-y:0px}.saas-os-ui .translate-y-\[-50\%\]{--tw-translate-y:-50%}.saas-os-ui .transform,.saas-os-ui .translate-y-\[-50\%\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.saas-os-ui .animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.saas-os-ui .animate-spin{animation:spin 1s linear infinite}.saas-os-ui .cursor-default{cursor:default}.saas-os-ui .cursor-pointer{cursor:pointer}.saas-os-ui .touch-none{touch-action:none}.saas-os-ui .select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.saas-os-ui .list-inside{list-style-position:inside}.saas-os-ui .list-decimal{list-style-type:decimal}.saas-os-ui .grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.saas-os-ui .grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.saas-os-ui .grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.saas-os-ui .flex-col{flex-direction:column}.saas-os-ui .flex-col-reverse{flex-direction:column-reverse}.saas-os-ui .flex-wrap{flex-wrap:wrap}.saas-os-ui .items-start{align-items:flex-start}.saas-os-ui .items-end{align-items:flex-end}.saas-os-ui .items-center{align-items:center}.saas-os-ui .items-baseline{align-items:baseline}.saas-os-ui .justify-end{justify-content:flex-end}.saas-os-ui .justify-center{justify-content:center}.saas-os-ui .justify-between{justify-content:space-between}.saas-os-ui .gap-0\.5{gap:.125rem}.saas-os-ui .gap-1{gap:.25rem}.saas-os-ui .gap-1\.5{gap:.375rem}.saas-os-ui .gap-2{gap:.5rem}.saas-os-ui .gap-3{gap:.75rem}.saas-os-ui .gap-4{gap:1rem}.saas-os-ui .gap-6{gap:1.5rem}.saas-os-ui .gap-x-0{-moz-column-gap:0;column-gap:0}.saas-os-ui .gap-x-0\.5{-moz-column-gap:.125rem;column-gap:.125rem}.saas-os-ui .gap-x-1{-moz-column-gap:.25rem;column-gap:.25rem}.saas-os-ui .gap-x-1\.5{-moz-column-gap:.375rem;column-gap:.375rem}.saas-os-ui .gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.saas-os-ui .gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.saas-os-ui .gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.saas-os-ui .gap-y-0\.5{row-gap:.125rem}.saas-os-ui .gap-y-1{row-gap:.25rem}.saas-os-ui .gap-y-1\.5{row-gap:.375rem}.saas-os-ui .gap-y-2{row-gap:.5rem}.saas-os-ui .gap-y-2\.5{row-gap:.625rem}.saas-os-ui .gap-y-3\.5{row-gap:.875rem}.saas-os-ui .space-x-0>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(0px*(1 - var(--tw-space-x-reverse)));margin-right:calc(0px*var(--tw-space-x-reverse))}.saas-os-ui .space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.saas-os-ui .space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.saas-os-ui .space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.375rem*var(--tw-space-y-reverse));margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)))}.saas-os-ui .space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.saas-os-ui .space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.saas-os-ui .space-y-3\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.875rem*var(--tw-space-y-reverse));margin-top:calc(.875rem*(1 - var(--tw-space-y-reverse)))}.saas-os-ui .space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.saas-os-ui .space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.25rem*var(--tw-space-y-reverse));margin-top:calc(1.25rem*(1 - var(--tw-space-y-reverse)))}.saas-os-ui .space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.saas-os-ui .space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(2rem*var(--tw-space-y-reverse));margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)))}.saas-os-ui .divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.saas-os-ui .divide-border\/60>:not([hidden])~:not([hidden]){border-color:hsl(var(--border)/.6)}.saas-os-ui .overflow-auto{overflow:auto}.saas-os-ui .overflow-hidden{overflow:hidden}.saas-os-ui .overflow-x-auto{overflow-x:auto}.saas-os-ui .overflow-y-auto{overflow-y:auto}.saas-os-ui .overflow-x-hidden{overflow-x:hidden}.saas-os-ui .overscroll-contain{overscroll-behavior:contain}.saas-os-ui .truncate{overflow:hidden;white-space:nowrap}.saas-os-ui .text-ellipsis,.saas-os-ui .truncate{text-overflow:ellipsis}.saas-os-ui .whitespace-nowrap{white-space:nowrap}.saas-os-ui .break-words{overflow-wrap:break-word}.saas-os-ui .rounded{border-radius:.25rem}.saas-os-ui .rounded-\[inherit\]{border-radius:inherit}.saas-os-ui .rounded-full{border-radius:9999px}.saas-os-ui .rounded-lg{border-radius:var(--radius)}.saas-os-ui .rounded-md{border-radius:calc(var(--radius) - 2px)}.saas-os-ui .rounded-none{border-radius:0}.saas-os-ui .rounded-sm{border-radius:calc(var(--radius) - 4px)}.saas-os-ui .rounded-xl{border-radius:.75rem}.saas-os-ui .border{border-width:1px}.saas-os-ui .border-2{border-width:2px}.saas-os-ui .border-b{border-bottom-width:1px}.saas-os-ui .border-b-2{border-bottom-width:2px}.saas-os-ui .border-l{border-left-width:1px}.saas-os-ui .border-t{border-top-width:1px}.saas-os-ui .border-dashed{border-style:dashed}.saas-os-ui .border-border{border-color:hsl(var(--border))}.saas-os-ui .border-border\/40{border-color:hsl(var(--border)/.4)}.saas-os-ui .border-border\/60{border-color:hsl(var(--border)/.6)}.saas-os-ui .border-destructive\/20{border-color:hsl(var(--destructive)/.2)}.saas-os-ui .border-destructive\/30{border-color:hsl(var(--destructive)/.3)}.saas-os-ui .border-destructive\/50{border-color:hsl(var(--destructive)/.5)}.saas-os-ui .border-info{border-color:hsl(var(--info))}.saas-os-ui .border-info\/20{border-color:hsl(var(--info)/.2)}.saas-os-ui .border-info\/30{border-color:hsl(var(--info)/.3)}.saas-os-ui .border-input{border-color:hsl(var(--input))}.saas-os-ui .border-primary{border-color:hsl(var(--primary))}.saas-os-ui .border-success\/20{border-color:hsl(var(--success)/.2)}.saas-os-ui .border-success\/30{border-color:hsl(var(--success)/.3)}.saas-os-ui .border-transparent{border-color:transparent}.saas-os-ui .border-warning\/20{border-color:hsl(var(--warning)/.2)}.saas-os-ui .border-warning\/30{border-color:hsl(var(--warning)/.3)}.saas-os-ui .border-warning\/40{border-color:hsl(var(--warning)/.4)}.saas-os-ui .border-l-transparent{border-left-color:transparent}.saas-os-ui .border-t-transparent{border-top-color:transparent}.saas-os-ui .bg-background{background-color:hsl(var(--background))}.saas-os-ui .bg-background\/80{background-color:hsl(var(--background)/.8)}.saas-os-ui .bg-border{background-color:hsl(var(--border))}.saas-os-ui .bg-card{background-color:hsl(var(--card))}.saas-os-ui .bg-destructive{background-color:hsl(var(--destructive))}.saas-os-ui .bg-destructive\/10{background-color:hsl(var(--destructive)/.1)}.saas-os-ui .bg-destructive\/15{background-color:hsl(var(--destructive)/.15)}.saas-os-ui .bg-info{background-color:hsl(var(--info))}.saas-os-ui .bg-info\/10{background-color:hsl(var(--info)/.1)}.saas-os-ui .bg-info\/15{background-color:hsl(var(--info)/.15)}.saas-os-ui .bg-info\/5{background-color:hsl(var(--info)/.05)}.saas-os-ui .bg-muted{background-color:hsl(var(--muted))}.saas-os-ui .bg-muted-foreground{background-color:hsl(var(--muted-foreground))}.saas-os-ui .bg-muted\/30{background-color:hsl(var(--muted)/.3)}.saas-os-ui .bg-muted\/40{background-color:hsl(var(--muted)/.4)}.saas-os-ui .bg-muted\/50{background-color:hsl(var(--muted)/.5)}.saas-os-ui .bg-popover{background-color:hsl(var(--popover))}.saas-os-ui .bg-primary{background-color:hsl(var(--primary))}.saas-os-ui .bg-primary\/10{background-color:hsl(var(--primary)/.1)}.saas-os-ui .bg-primary\/5{background-color:hsl(var(--primary)/.05)}.saas-os-ui .bg-secondary{background-color:hsl(var(--secondary))}.saas-os-ui .bg-success{background-color:hsl(var(--success))}.saas-os-ui .bg-success\/10{background-color:hsl(var(--success)/.1)}.saas-os-ui .bg-success\/15{background-color:hsl(var(--success)/.15)}.saas-os-ui .bg-transparent{background-color:transparent}.saas-os-ui .bg-warning{background-color:hsl(var(--warning))}.saas-os-ui .bg-warning\/10{background-color:hsl(var(--warning)/.1)}.saas-os-ui .bg-warning\/15{background-color:hsl(var(--warning)/.15)}.saas-os-ui .bg-warning\/5{background-color:hsl(var(--warning)/.05)}.saas-os-ui .bg-warning\/70{background-color:hsl(var(--warning)/.7)}.saas-os-ui .fill-primary{fill:hsl(var(--primary))}.saas-os-ui .object-contain{-o-object-fit:contain;object-fit:contain}.saas-os-ui .object-cover{-o-object-fit:cover;object-fit:cover}.saas-os-ui .p-0{padding:0}.saas-os-ui .p-0\.5{padding:.125rem}.saas-os-ui .p-1{padding:.25rem}.saas-os-ui .p-2{padding:.5rem}.saas-os-ui .p-3{padding:.75rem}.saas-os-ui .p-4{padding:1rem}.saas-os-ui .p-5{padding:1.25rem}.saas-os-ui .p-6{padding:1.5rem}.saas-os-ui .p-\[1px\]{padding:1px}.saas-os-ui .px-0\.5{padding-left:.125rem;padding-right:.125rem}.saas-os-ui .px-1{padding-left:.25rem;padding-right:.25rem}.saas-os-ui .px-1\.5{padding-left:.375rem;padding-right:.375rem}.saas-os-ui .px-2{padding-left:.5rem;padding-right:.5rem}.saas-os-ui .px-2\.5{padding-left:.625rem;padding-right:.625rem}.saas-os-ui .px-3{padding-left:.75rem;padding-right:.75rem}.saas-os-ui .px-4{padding-left:1rem;padding-right:1rem}.saas-os-ui .px-5{padding-left:1.25rem;padding-right:1.25rem}.saas-os-ui .px-6{padding-left:1.5rem;padding-right:1.5rem}.saas-os-ui .py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.saas-os-ui .py-1{padding-bottom:.25rem;padding-top:.25rem}.saas-os-ui .py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.saas-os-ui .py-12{padding-bottom:3rem;padding-top:3rem}.saas-os-ui .py-16{padding-bottom:4rem;padding-top:4rem}.saas-os-ui .py-2{padding-bottom:.5rem;padding-top:.5rem}.saas-os-ui .py-2\.5{padding-bottom:.625rem;padding-top:.625rem}.saas-os-ui .py-3{padding-bottom:.75rem;padding-top:.75rem}.saas-os-ui .py-4{padding-bottom:1rem;padding-top:1rem}.saas-os-ui .py-6{padding-bottom:1.5rem;padding-top:1.5rem}.saas-os-ui .py-8{padding-bottom:2rem;padding-top:2rem}.saas-os-ui .pb-1{padding-bottom:.25rem}.saas-os-ui .pb-2{padding-bottom:.5rem}.saas-os-ui .pb-3{padding-bottom:.75rem}.saas-os-ui .pe-1{padding-inline-end:.25rem}.saas-os-ui .pe-10{padding-inline-end:2.5rem}.saas-os-ui .pe-4{padding-inline-end:1rem}.saas-os-ui .pe-8{padding-inline-end:2rem}.saas-os-ui .ps-10{padding-inline-start:2.5rem}.saas-os-ui .ps-2{padding-inline-start:.5rem}.saas-os-ui .ps-3{padding-inline-start:.75rem}.saas-os-ui .pt-0{padding-top:0}.saas-os-ui .pt-1{padding-top:.25rem}.saas-os-ui .pt-2{padding-top:.5rem}.saas-os-ui .pt-3{padding-top:.75rem}.saas-os-ui .pt-4{padding-top:1rem}.saas-os-ui .text-center{text-align:center}.saas-os-ui .text-start{text-align:start}.saas-os-ui .text-end{text-align:end}.saas-os-ui .align-top{vertical-align:top}.saas-os-ui .align-middle{vertical-align:middle}.saas-os-ui .font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.saas-os-ui .text-2xl{font-size:1.5rem;line-height:2rem}.saas-os-ui .text-3xl{font-size:1.875rem;line-height:2.25rem}.saas-os-ui .text-4xl{font-size:2.25rem;line-height:2.5rem}.saas-os-ui .text-\[10px\]{font-size:10px}.saas-os-ui .text-base{font-size:1rem;line-height:1.5rem}.saas-os-ui .text-lg{font-size:1.125rem;line-height:1.75rem}.saas-os-ui .text-sm{font-size:.875rem;line-height:1.25rem}.saas-os-ui .text-xl{font-size:1.25rem;line-height:1.75rem}.saas-os-ui .text-xs{font-size:.75rem;line-height:1rem}.saas-os-ui .font-bold{font-weight:700}.saas-os-ui .font-medium{font-weight:500}.saas-os-ui .font-normal{font-weight:400}.saas-os-ui .font-semibold{font-weight:600}.saas-os-ui .uppercase{text-transform:uppercase}.saas-os-ui .lowercase{text-transform:lowercase}.saas-os-ui .capitalize{text-transform:capitalize}.saas-os-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)}.saas-os-ui .leading-none{line-height:1}.saas-os-ui .leading-relaxed{line-height:1.625}.saas-os-ui .leading-tight{line-height:1.25}.saas-os-ui .tracking-tight{letter-spacing:-.025em}.saas-os-ui .tracking-wide{letter-spacing:.025em}.saas-os-ui .tracking-wider{letter-spacing:.05em}.saas-os-ui .tracking-widest{letter-spacing:.1em}.saas-os-ui .text-background{color:hsl(var(--background))}.saas-os-ui .text-card-foreground{color:hsl(var(--card-foreground))}.saas-os-ui .text-destructive{color:hsl(var(--destructive))}.saas-os-ui .text-destructive-foreground{color:hsl(var(--destructive-foreground))}.saas-os-ui .text-destructive\/80{color:hsl(var(--destructive)/.8)}.saas-os-ui .text-foreground{color:hsl(var(--foreground))}.saas-os-ui .text-info{color:hsl(var(--info))}.saas-os-ui .text-info-foreground{color:hsl(var(--info-foreground))}.saas-os-ui .text-info\/80{color:hsl(var(--info)/.8)}.saas-os-ui .text-muted-foreground{color:hsl(var(--muted-foreground))}.saas-os-ui .text-muted-foreground\/50{color:hsl(var(--muted-foreground)/.5)}.saas-os-ui .text-muted-foreground\/70{color:hsl(var(--muted-foreground)/.7)}.saas-os-ui .text-popover-foreground{color:hsl(var(--popover-foreground))}.saas-os-ui .text-primary{color:hsl(var(--primary))}.saas-os-ui .text-primary-foreground{color:hsl(var(--primary-foreground))}.saas-os-ui .text-secondary-foreground{color:hsl(var(--secondary-foreground))}.saas-os-ui .text-success{color:hsl(var(--success))}.saas-os-ui .text-success-foreground{color:hsl(var(--success-foreground))}.saas-os-ui .text-success\/80{color:hsl(var(--success)/.8)}.saas-os-ui .text-warning{color:hsl(var(--warning))}.saas-os-ui .text-warning\/80{color:hsl(var(--warning)/.8)}.saas-os-ui .underline-offset-4{text-underline-offset:4px}.saas-os-ui .opacity-0{opacity:0}.saas-os-ui .opacity-100{opacity:1}.saas-os-ui .opacity-40{opacity:.4}.saas-os-ui .opacity-50{opacity:.5}.saas-os-ui .opacity-70{opacity:.7}.saas-os-ui .shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.saas-os-ui .shadow,.saas-os-ui .shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.saas-os-ui .shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.saas-os-ui .shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.saas-os-ui .shadow-md,.saas-os-ui .shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.saas-os-ui .shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.saas-os-ui .shadow-sticky-col{--tw-shadow:2px 0 4px -2px rgba(0,0,0,.06);--tw-shadow-colored:2px 0 4px -2px var(--tw-shadow-color)}.saas-os-ui .shadow-sticky-col,.saas-os-ui .shadow-sticky-row{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.saas-os-ui .shadow-sticky-row{--tw-shadow:0 2px 4px -2px rgba(0,0,0,.06);--tw-shadow-colored:0 2px 4px -2px var(--tw-shadow-color)}.saas-os-ui .outline-none{outline:2px solid transparent;outline-offset:2px}.saas-os-ui .outline{outline-style:solid}.saas-os-ui .ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.saas-os-ui .ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.saas-os-ui .filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.saas-os-ui .backdrop-blur-sm{--tw-backdrop-blur:blur(4px);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)}.saas-os-ui .transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.saas-os-ui .transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.saas-os-ui .transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.saas-os-ui .transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.saas-os-ui .transition-shadow{transition-duration:.15s;transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1)}.saas-os-ui .transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.saas-os-ui .duration-200{transition-duration:.2s}.saas-os-ui .duration-500{transition-duration:.5s}.saas-os-ui .\[buildbase\:tracking\]{buildbase:tracking}.saas-os-ui .file\:border-0::file-selector-button{border-width:0}.saas-os-ui .file\:bg-transparent::file-selector-button{background-color:transparent}.saas-os-ui .file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.saas-os-ui .file\:font-medium::file-selector-button{font-weight:500}.saas-os-ui .placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.saas-os-ui .placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.saas-os-ui .last\:border-b-0:last-child{border-bottom-width:0}.saas-os-ui .hover\:border-border:hover{border-color:hsl(var(--border))}.saas-os-ui .hover\:bg-accent:hover{background-color:hsl(var(--accent))}.saas-os-ui .hover\:bg-destructive\/10:hover{background-color:hsl(var(--destructive)/.1)}.saas-os-ui .hover\:bg-destructive\/15:hover{background-color:hsl(var(--destructive)/.15)}.saas-os-ui .hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive)/.9)}.saas-os-ui .hover\:bg-info\/10:hover{background-color:hsl(var(--info)/.1)}.saas-os-ui .hover\:bg-info\/15:hover{background-color:hsl(var(--info)/.15)}.saas-os-ui .hover\:bg-info\/90:hover{background-color:hsl(var(--info)/.9)}.saas-os-ui .hover\:bg-muted:hover{background-color:hsl(var(--muted))}.saas-os-ui .hover\:bg-muted-foreground\/90:hover{background-color:hsl(var(--muted-foreground)/.9)}.saas-os-ui .hover\:bg-muted\/30:hover{background-color:hsl(var(--muted)/.3)}.saas-os-ui .hover\:bg-primary\/90:hover{background-color:hsl(var(--primary)/.9)}.saas-os-ui .hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary)/.8)}.saas-os-ui .hover\:bg-success\/10:hover{background-color:hsl(var(--success)/.1)}.saas-os-ui .hover\:bg-success\/90:hover{background-color:hsl(var(--success)/.9)}.saas-os-ui .hover\:bg-transparent:hover{background-color:transparent}.saas-os-ui .hover\:bg-warning\/10:hover{background-color:hsl(var(--warning)/.1)}.saas-os-ui .hover\:bg-warning\/15:hover{background-color:hsl(var(--warning)/.15)}.saas-os-ui .hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.saas-os-ui .hover\:text-destructive:hover{color:hsl(var(--destructive))}.saas-os-ui .hover\:text-foreground:hover{color:hsl(var(--foreground))}.saas-os-ui .hover\:text-info:hover{color:hsl(var(--info))}.saas-os-ui .hover\:underline:hover{text-decoration-line:underline}.saas-os-ui .hover\:opacity-100:hover{opacity:1}.saas-os-ui .hover\:shadow-sm:hover{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.saas-os-ui .focus\:bg-accent:focus{background-color:hsl(var(--accent))}.saas-os-ui .focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.saas-os-ui .focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.saas-os-ui .focus\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.saas-os-ui .focus\:ring-1:focus,.saas-os-ui .focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.saas-os-ui .focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.saas-os-ui .focus\:ring-destructive:focus{--tw-ring-color:hsl(var(--destructive))}.saas-os-ui .focus\:ring-primary:focus{--tw-ring-color:hsl(var(--primary))}.saas-os-ui .focus\:ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.saas-os-ui .focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.saas-os-ui .focus-visible\:underline:focus-visible{text-decoration-line:underline}.saas-os-ui .focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.saas-os-ui .focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.saas-os-ui .focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.saas-os-ui .focus-visible\:ring-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.saas-os-ui .focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.saas-os-ui .focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color:hsl(var(--background))}.saas-os-ui .disabled\:pointer-events-none:disabled{pointer-events:none}.saas-os-ui .disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.saas-os-ui .disabled\:opacity-50:disabled{opacity:.5}.saas-os-ui .group:hover .group-hover\:bg-muted\/50{background-color:hsl(var(--muted)/.5)}.saas-os-ui .peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.saas-os-ui .peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.saas-os-ui .aria-selected\:bg-accent[aria-selected=true]{background-color:hsl(var(--accent))}.saas-os-ui .aria-selected\:text-accent-foreground[aria-selected=true]{color:hsl(var(--accent-foreground))}.saas-os-ui .data-\[disabled\=true\]\:pointer-events-none[data-disabled=true],.saas-os-ui .data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.saas-os-ui .data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.saas-os-ui .data-\[side\=bottom\]\:translate-y-1[data-side=bottom],.saas-os-ui .data-\[side\=left\]\:-translate-x-1[data-side=left]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.saas-os-ui .data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.saas-os-ui .data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.saas-os-ui .data-\[side\=right\]\:translate-x-1[data-side=right],.saas-os-ui .data-\[side\=top\]\:-translate-y-1[data-side=top]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.saas-os-ui .data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.saas-os-ui .data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x:1rem}.saas-os-ui .data-\[state\=checked\]\:translate-x-4[data-state=checked],.saas-os-ui .data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.saas-os-ui .data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:0px}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}.saas-os-ui .data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:accordion-up .2s ease-out}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}.saas-os-ui .data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:accordion-down .2s ease-out}.saas-os-ui .data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.saas-os-ui .data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.saas-os-ui .data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.saas-os-ui .data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.saas-os-ui .data-\[disabled\=true\]\:opacity-50[data-disabled=true],.saas-os-ui .data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}@media (min-width:640px){.saas-os-ui .sm\:mt-0{margin-top:0}.saas-os-ui .sm\:block{display:block}.saas-os-ui .sm\:inline{display:inline}.saas-os-ui .sm\:flex{display:flex}.saas-os-ui .sm\:hidden{display:none}.saas-os-ui .sm\:h-10{height:2.5rem}.saas-os-ui .sm\:h-7{height:1.75rem}.saas-os-ui .sm\:h-8{height:2rem}.saas-os-ui .sm\:h-9{height:2.25rem}.saas-os-ui .sm\:h-auto{height:auto}.saas-os-ui .sm\:h-full{height:100%}.saas-os-ui .sm\:max-h-\[500px\]{max-height:500px}.saas-os-ui .sm\:max-h-\[90vh\]{max-height:90vh}.saas-os-ui .sm\:min-h-\[600px\]{min-height:600px}.saas-os-ui .sm\:w-56{width:14rem}.saas-os-ui .sm\:w-7{width:1.75rem}.saas-os-ui .sm\:w-8{width:2rem}.saas-os-ui .sm\:w-9{width:2.25rem}.saas-os-ui .sm\:w-auto{width:auto}.saas-os-ui .sm\:w-full{width:100%}.saas-os-ui .sm\:min-w-0{min-width:0}.saas-os-ui .sm\:min-w-\[600px\]{min-width:600px}.saas-os-ui .sm\:max-w-lg{max-width:32rem}.saas-os-ui .sm\:max-w-md{max-width:28rem}.saas-os-ui .sm\:flex-initial{flex:0 1 auto}.saas-os-ui .sm\:flex-none{flex:none}.saas-os-ui .sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.saas-os-ui .sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.saas-os-ui .sm\:flex-row{flex-direction:row}.saas-os-ui .sm\:flex-col{flex-direction:column}.saas-os-ui .sm\:items-start{align-items:flex-start}.saas-os-ui .sm\:items-end{align-items:flex-end}.saas-os-ui .sm\:items-center{align-items:center}.saas-os-ui .sm\:justify-end{justify-content:flex-end}.saas-os-ui .sm\:justify-between{justify-content:space-between}.saas-os-ui .sm\:gap-1{gap:.25rem}.saas-os-ui .sm\:gap-1\.5{gap:.375rem}.saas-os-ui .sm\:gap-2{gap:.5rem}.saas-os-ui .sm\:gap-3{gap:.75rem}.saas-os-ui .sm\:gap-4{gap:1rem}.saas-os-ui .sm\:gap-x-1{-moz-column-gap:.25rem;column-gap:.25rem}.saas-os-ui .sm\:gap-y-4{row-gap:1rem}.saas-os-ui .sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.saas-os-ui .sm\:space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.saas-os-ui .sm\:space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.saas-os-ui .sm\:rounded-lg{border-radius:var(--radius)}.saas-os-ui .sm\:border-0{border-width:0}.saas-os-ui .sm\:p-0{padding:0}.saas-os-ui .sm\:p-4{padding:1rem}.saas-os-ui .sm\:p-5{padding:1.25rem}.saas-os-ui .sm\:p-6{padding:1.5rem}.saas-os-ui .sm\:px-1\.5{padding-left:.375rem;padding-right:.375rem}.saas-os-ui .sm\:px-4{padding-left:1rem;padding-right:1rem}.saas-os-ui .sm\:px-5{padding-left:1.25rem;padding-right:1.25rem}.saas-os-ui .sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.saas-os-ui .sm\:py-1{padding-bottom:.25rem;padding-top:.25rem}.saas-os-ui .sm\:py-5{padding-bottom:1.25rem;padding-top:1.25rem}.saas-os-ui .sm\:py-6{padding-bottom:1.5rem;padding-top:1.5rem}.saas-os-ui .sm\:py-8{padding-bottom:2rem;padding-top:2rem}.saas-os-ui .sm\:pe-0{padding-inline-end:0}.saas-os-ui .sm\:pe-2{padding-inline-end:.5rem}.saas-os-ui .sm\:pt-0{padding-top:0}.saas-os-ui .sm\:text-start{text-align:start}.saas-os-ui .sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}.saas-os-ui .sm\:text-sm{font-size:.875rem;line-height:1.25rem}.saas-os-ui .sm\:text-xl{font-size:1.25rem;line-height:1.75rem}.saas-os-ui .sm\:opacity-0{opacity:0}.saas-os-ui .sm\:transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.saas-os-ui .group:focus-within .sm\:group-focus-within\:opacity-100{opacity:1}.saas-os-ui .group:hover .sm\:group-hover\:opacity-100{opacity:1}}@media (min-width:768px){.saas-os-ui .md\:block{display:block}.saas-os-ui .md\:hidden{display:none}.saas-os-ui .md\:w-full{width:100%}.saas-os-ui .md\:min-w-\[800px\]{min-width:800px}}@media (min-width:1024px){.saas-os-ui .lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:1280px){.saas-os-ui .xl\:max-h-\[65vh\]{max-height:65vh}.saas-os-ui .xl\:min-w-\[960px\]{min-width:960px}}.saas-os-ui .rtl\:left-2:where([dir=rtl],[dir=rtl] *){left:.5rem}.saas-os-ui .rtl\:right-auto:where([dir=rtl],[dir=rtl] *){right:auto}.saas-os-ui .rtl\:rotate-180:where([dir=rtl],[dir=rtl] *){--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.saas-os-ui .rtl\:data-\[state\=checked\]\:-translate-x-4[data-state=checked]:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.saas-os-ui .\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.saas-os-ui .\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.saas-os-ui .\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-bottom:.375rem;padding-top:.375rem}.saas-os-ui .\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.saas-os-ui .\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{font-weight:500}.saas-os-ui .\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:hsl(var(--muted-foreground))}.saas-os-ui .\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.saas-os-ui .\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.saas-os-ui .\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:1.25rem}.saas-os-ui .\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:1.25rem}.saas-os-ui .\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:3rem}.saas-os-ui .\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.saas-os-ui .\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-bottom:.75rem;padding-top:.75rem}.saas-os-ui .\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:1.25rem}.saas-os-ui .\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:1.25rem}
|
|
3
|
+
*/.saas-os-ui *,.saas-os-ui :after,.saas-os-ui :before{border:0 solid #e5e7eb;box-sizing:border-box}.saas-os-ui :after,.saas-os-ui :before{--tw-content:""}.saas-os-ui,.saas-os-ui :host{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}.saas-os-ui{line-height:inherit;margin:0}.saas-os-ui hr{border-top-width:1px;color:inherit;height:0}.saas-os-ui abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.saas-os-ui h1,.saas-os-ui h2,.saas-os-ui h3,.saas-os-ui h4,.saas-os-ui h5,.saas-os-ui h6{font-size:inherit;font-weight:inherit}.saas-os-ui a{color:inherit;text-decoration:inherit}.saas-os-ui b,.saas-os-ui strong{font-weight:bolder}.saas-os-ui code,.saas-os-ui kbd,.saas-os-ui pre,.saas-os-ui samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}.saas-os-ui small{font-size:80%}.saas-os-ui sub,.saas-os-ui sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}.saas-os-ui sub{bottom:-.25em}.saas-os-ui sup{top:-.5em}.saas-os-ui table{border-collapse:collapse;border-color:inherit;text-indent:0}.saas-os-ui button,.saas-os-ui input,.saas-os-ui optgroup,.saas-os-ui select,.saas-os-ui textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}.saas-os-ui button,.saas-os-ui select{text-transform:none}.saas-os-ui button,.saas-os-ui input:where([type=button]),.saas-os-ui input:where([type=reset]),.saas-os-ui input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}.saas-os-ui :-moz-focusring{outline:auto}.saas-os-ui :-moz-ui-invalid{box-shadow:none}.saas-os-ui progress{vertical-align:baseline}.saas-os-ui ::-webkit-inner-spin-button,.saas-os-ui ::-webkit-outer-spin-button{height:auto}.saas-os-ui [type=search]{-webkit-appearance:textfield;outline-offset:-2px}.saas-os-ui ::-webkit-search-decoration{-webkit-appearance:none}.saas-os-ui ::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}.saas-os-ui summary{display:list-item}.saas-os-ui blockquote,.saas-os-ui dd,.saas-os-ui dl,.saas-os-ui figure,.saas-os-ui h1,.saas-os-ui h2,.saas-os-ui h3,.saas-os-ui h4,.saas-os-ui h5,.saas-os-ui h6,.saas-os-ui hr,.saas-os-ui p,.saas-os-ui pre{margin:0}.saas-os-ui fieldset{margin:0;padding:0}.saas-os-ui legend{padding:0}.saas-os-ui menu,.saas-os-ui ol,.saas-os-ui ul{list-style:none;margin:0;padding:0}.saas-os-ui dialog{padding:0}.saas-os-ui textarea{resize:vertical}.saas-os-ui input::-moz-placeholder,.saas-os-ui textarea::-moz-placeholder{color:#9ca3af;opacity:1}.saas-os-ui input::placeholder,.saas-os-ui textarea::placeholder{color:#9ca3af;opacity:1}.saas-os-ui [role=button],.saas-os-ui button{cursor:pointer}.saas-os-ui :disabled{cursor:default}.saas-os-ui audio,.saas-os-ui canvas,.saas-os-ui embed,.saas-os-ui iframe,.saas-os-ui img,.saas-os-ui object,.saas-os-ui svg,.saas-os-ui video{display:block;vertical-align:middle}.saas-os-ui img,.saas-os-ui video{height:auto;max-width:100%}.saas-os-ui [hidden]:where(:not([hidden=until-found])){display:none}.saas-os-ui{--background:0 0% 100%;--foreground:222.2 84% 4.9%;--card:0 0% 100%;--card-foreground:222.2 84% 4.9%;--popover:0 0% 100%;--popover-foreground:222.2 84% 4.9%;--primary:222.2 47.4% 11.2%;--primary-foreground:210 40% 98%;--secondary:210 40% 96%;--secondary-foreground:222.2 84% 4.9%;--muted:210 40% 96%;--muted-foreground:215.4 16.3% 46.9%;--accent:210 40% 96%;--accent-foreground:222.2 84% 4.9%;--destructive:0 84.2% 60.2%;--destructive-foreground:210 40% 98%;--success:142 72% 29%;--success-foreground:0 0% 100%;--warning:26 90% 37%;--warning-foreground:0 0% 100%;--info:224 76% 48%;--info-foreground:0 0% 100%;--border:214.3 31.8% 91.4%;--input:214.3 31.8% 91.4%;--ring:222.2 84% 4.9%;--radius:0.5rem}.dark .saas-os-ui,.saas-os-ui .dark,.saas-os-ui.dark{--background:222.2 84% 4.9%;--foreground:210 40% 98%;--card:222.2 84% 4.9%;--card-foreground:210 40% 98%;--popover:222.2 84% 4.9%;--popover-foreground:210 40% 98%;--primary:210 40% 98%;--primary-foreground:222.2 47.4% 11.2%;--secondary:217.2 32.6% 17.5%;--secondary-foreground:210 40% 98%;--muted:217.2 32.6% 17.5%;--muted-foreground:215 20.2% 65.1%;--accent:217.2 32.6% 17.5%;--accent-foreground:210 40% 98%;--destructive:0 62.8% 30.6%;--destructive-foreground:210 40% 98%;--success:142 69% 58%;--success-foreground:222.2 47.4% 11.2%;--warning:38 92% 50%;--warning-foreground:222.2 47.4% 11.2%;--info:217 91% 60%;--info-foreground:222.2 47.4% 11.2%;--border:217.2 32.6% 17.5%;--input:217.2 32.6% 17.5%;--ring:212.7 26.8% 83.9%}.saas-os-ui *{border-color:hsl(var(--border))}.saas-os-ui{background-color:hsl(var(--background));color:hsl(var(--foreground))}.saas-os-ui .container{width:100%}@media (min-width:640px){.saas-os-ui .container{max-width:640px}}@media (min-width:768px){.saas-os-ui .container{max-width:768px}}@media (min-width:1024px){.saas-os-ui .container{max-width:1024px}}@media (min-width:1280px){.saas-os-ui .container{max-width:1280px}}@media (min-width:1536px){.saas-os-ui .container{max-width:1536px}}.saas-os-ui .sr-only{clip:rect(0,0,0,0);border-width:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}.saas-os-ui .pointer-events-none{pointer-events:none}.saas-os-ui .visible{visibility:visible}.saas-os-ui .invisible{visibility:hidden}.saas-os-ui .collapse{visibility:collapse}.saas-os-ui .static{position:static}.saas-os-ui .fixed{position:fixed}.saas-os-ui .absolute{position:absolute}.saas-os-ui .relative{position:relative}.saas-os-ui .sticky{position:sticky}.saas-os-ui .inset-0{inset:0}.saas-os-ui .-end-0\.5{inset-inline-end:-.125rem}.saas-os-ui .-top-0\.5{top:-.125rem}.saas-os-ui .end-2{inset-inline-end:.5rem}.saas-os-ui .end-8{inset-inline-end:2rem}.saas-os-ui .left-\[50\%\]{left:50%}.saas-os-ui .right-2{right:.5rem}.saas-os-ui .start-0{inset-inline-start:0}.saas-os-ui .start-3{inset-inline-start:.75rem}.saas-os-ui .top-0{top:0}.saas-os-ui .top-1\/2{top:50%}.saas-os-ui .top-2{top:.5rem}.saas-os-ui .top-\[50\%\]{top:50%}.saas-os-ui .isolate{isolation:isolate}.saas-os-ui .z-10{z-index:10}.saas-os-ui .z-20{z-index:20}.saas-os-ui .z-30{z-index:30}.saas-os-ui .z-50{z-index:50}.saas-os-ui .m-0{margin:0}.saas-os-ui .-mx-1{margin-left:-.25rem;margin-right:-.25rem}.saas-os-ui .mx-auto{margin-left:auto;margin-right:auto}.saas-os-ui .my-1{margin-bottom:.25rem;margin-top:.25rem}.saas-os-ui .my-2{margin-bottom:.5rem;margin-top:.5rem}.saas-os-ui .my-2\.5{margin-bottom:.625rem;margin-top:.625rem}.saas-os-ui .my-4{margin-bottom:1rem;margin-top:1rem}.saas-os-ui .-mb-px{margin-bottom:-1px}.saas-os-ui .-ms-2{margin-inline-start:-.5rem}.saas-os-ui .mb-0\.5{margin-bottom:.125rem}.saas-os-ui .mb-1{margin-bottom:.25rem}.saas-os-ui .mb-1\.5{margin-bottom:.375rem}.saas-os-ui .mb-2{margin-bottom:.5rem}.saas-os-ui .mb-2\.5{margin-bottom:.625rem}.saas-os-ui .mb-3{margin-bottom:.75rem}.saas-os-ui .mb-4{margin-bottom:1rem}.saas-os-ui .me-1\.5{margin-inline-end:.375rem}.saas-os-ui .me-2{margin-inline-end:.5rem}.saas-os-ui .ml-1{margin-left:.25rem}.saas-os-ui .ms-1{margin-inline-start:.25rem}.saas-os-ui .ms-1\.5{margin-inline-start:.375rem}.saas-os-ui .ms-2{margin-inline-start:.5rem}.saas-os-ui .ms-auto{margin-inline-start:auto}.saas-os-ui .mt-0\.5{margin-top:.125rem}.saas-os-ui .mt-1{margin-top:.25rem}.saas-os-ui .mt-1\.5{margin-top:.375rem}.saas-os-ui .mt-2{margin-top:.5rem}.saas-os-ui .mt-3{margin-top:.75rem}.saas-os-ui .mt-4{margin-top:1rem}.saas-os-ui .mt-6{margin-top:1.5rem}.saas-os-ui .mt-auto{margin-top:auto}.saas-os-ui .line-clamp-1{-webkit-line-clamp:1}.saas-os-ui .line-clamp-1,.saas-os-ui .line-clamp-2{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.saas-os-ui .line-clamp-2{-webkit-line-clamp:2}.saas-os-ui .line-clamp-3{-webkit-box-orient:vertical;-webkit-line-clamp:3;display:-webkit-box;overflow:hidden}.saas-os-ui .block{display:block}.saas-os-ui .inline-block{display:inline-block}.saas-os-ui .inline{display:inline}.saas-os-ui .flex{display:flex}.saas-os-ui .inline-flex{display:inline-flex}.saas-os-ui .table{display:table}.saas-os-ui .grid{display:grid}.saas-os-ui .contents{display:contents}.saas-os-ui .hidden{display:none}.saas-os-ui .aspect-square{aspect-ratio:1/1}.saas-os-ui .h-1\.5{height:.375rem}.saas-os-ui .h-10{height:2.5rem}.saas-os-ui .h-11{height:2.75rem}.saas-os-ui .h-12{height:3rem}.saas-os-ui .h-14{height:3.5rem}.saas-os-ui .h-16{height:4rem}.saas-os-ui .h-2{height:.5rem}.saas-os-ui .h-2\.5{height:.625rem}.saas-os-ui .h-20{height:5rem}.saas-os-ui .h-24{height:6rem}.saas-os-ui .h-3{height:.75rem}.saas-os-ui .h-3\.5{height:.875rem}.saas-os-ui .h-32{height:8rem}.saas-os-ui .h-4{height:1rem}.saas-os-ui .h-48{height:12rem}.saas-os-ui .h-5{height:1.25rem}.saas-os-ui .h-6{height:1.5rem}.saas-os-ui .h-64{height:16rem}.saas-os-ui .h-7{height:1.75rem}.saas-os-ui .h-8{height:2rem}.saas-os-ui .h-9{height:2.25rem}.saas-os-ui .h-\[1px\]{height:1px}.saas-os-ui .h-\[20px\]{height:20px}.saas-os-ui .h-\[var\(--radix-select-trigger-height\)\]{height:var(--radix-select-trigger-height)}.saas-os-ui .h-dvh{height:100dvh}.saas-os-ui .h-full{height:100%}.saas-os-ui .h-px{height:1px}.saas-os-ui .h-screen{height:100vh}.saas-os-ui .max-h-24{max-height:6rem}.saas-os-ui .max-h-\[300px\]{max-height:300px}.saas-os-ui .max-h-\[min\(32rem\2c calc\(100vh-6rem\)\)\]{max-height:min(32rem,calc(100vh - 6rem))}.saas-os-ui .max-h-dvh{max-height:100dvh}.saas-os-ui .min-h-0{min-height:0}.saas-os-ui .min-h-\[3rem\]{min-height:3rem}.saas-os-ui .w-10{width:2.5rem}.saas-os-ui .w-12{width:3rem}.saas-os-ui .w-16{width:4rem}.saas-os-ui .w-2{width:.5rem}.saas-os-ui .w-2\.5{width:.625rem}.saas-os-ui .w-24{width:6rem}.saas-os-ui .w-3{width:.75rem}.saas-os-ui .w-3\.5{width:.875rem}.saas-os-ui .w-32{width:8rem}.saas-os-ui .w-4{width:1rem}.saas-os-ui .w-48{width:12rem}.saas-os-ui .w-5{width:1.25rem}.saas-os-ui .w-6{width:1.5rem}.saas-os-ui .w-7{width:1.75rem}.saas-os-ui .w-72{width:18rem}.saas-os-ui .w-8{width:2rem}.saas-os-ui .w-\[1px\]{width:1px}.saas-os-ui .w-\[36px\]{width:36px}.saas-os-ui .w-\[min\(24rem\2c calc\(100vw-2rem\)\)\]{width:min(24rem,calc(100vw - 2rem))}.saas-os-ui .w-full{width:100%}.saas-os-ui .w-screen{width:100vw}.saas-os-ui .min-w-0{min-width:0}.saas-os-ui .min-w-4{min-width:1rem}.saas-os-ui .min-w-\[160px\]{min-width:160px}.saas-os-ui .min-w-\[80px\]{min-width:80px}.saas-os-ui .min-w-\[8rem\]{min-width:8rem}.saas-os-ui .min-w-\[var\(--radix-select-trigger-width\)\]{min-width:var(--radix-select-trigger-width)}.saas-os-ui .min-w-full{min-width:100%}.saas-os-ui .max-w-2xl{max-width:42rem}.saas-os-ui .max-w-fit{max-width:-moz-fit-content;max-width:fit-content}.saas-os-ui .max-w-full{max-width:100%}.saas-os-ui .max-w-lg{max-width:32rem}.saas-os-ui .max-w-none{max-width:none}.saas-os-ui .max-w-xl{max-width:36rem}.saas-os-ui .flex-1{flex:1 1 0%}.saas-os-ui .flex-shrink-0{flex-shrink:0}.saas-os-ui .shrink{flex-shrink:1}.saas-os-ui .shrink-0{flex-shrink:0}.saas-os-ui .grow{flex-grow:1}.saas-os-ui .border-separate{border-collapse:separate}.saas-os-ui .border-spacing-0{--tw-border-spacing-x:0px;--tw-border-spacing-y:0px;border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y)}.saas-os-ui .-translate-y-1\/2{--tw-translate-y:-50%}.saas-os-ui .-translate-y-1\/2,.saas-os-ui .translate-x-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.saas-os-ui .translate-x-0{--tw-translate-x:0px}.saas-os-ui .translate-x-\[-50\%\]{--tw-translate-x:-50%}.saas-os-ui .translate-x-\[-50\%\],.saas-os-ui .translate-y-0{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.saas-os-ui .translate-y-0{--tw-translate-y:0px}.saas-os-ui .translate-y-\[-50\%\]{--tw-translate-y:-50%}.saas-os-ui .transform,.saas-os-ui .translate-y-\[-50\%\]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}@keyframes pulse{50%{opacity:.5}}.saas-os-ui .animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.6,1) infinite}@keyframes spin{to{transform:rotate(1turn)}}.saas-os-ui .animate-spin{animation:spin 1s linear infinite}.saas-os-ui .cursor-default{cursor:default}.saas-os-ui .cursor-pointer{cursor:pointer}.saas-os-ui .touch-none{touch-action:none}.saas-os-ui .select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.saas-os-ui .list-inside{list-style-position:inside}.saas-os-ui .list-decimal{list-style-type:decimal}.saas-os-ui .grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.saas-os-ui .grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.saas-os-ui .grid-cols-8{grid-template-columns:repeat(8,minmax(0,1fr))}.saas-os-ui .flex-col{flex-direction:column}.saas-os-ui .flex-col-reverse{flex-direction:column-reverse}.saas-os-ui .flex-wrap{flex-wrap:wrap}.saas-os-ui .items-start{align-items:flex-start}.saas-os-ui .items-end{align-items:flex-end}.saas-os-ui .items-center{align-items:center}.saas-os-ui .items-baseline{align-items:baseline}.saas-os-ui .justify-end{justify-content:flex-end}.saas-os-ui .justify-center{justify-content:center}.saas-os-ui .justify-between{justify-content:space-between}.saas-os-ui .gap-0\.5{gap:.125rem}.saas-os-ui .gap-1{gap:.25rem}.saas-os-ui .gap-1\.5{gap:.375rem}.saas-os-ui .gap-2{gap:.5rem}.saas-os-ui .gap-3{gap:.75rem}.saas-os-ui .gap-4{gap:1rem}.saas-os-ui .gap-6{gap:1.5rem}.saas-os-ui .gap-x-0{-moz-column-gap:0;column-gap:0}.saas-os-ui .gap-x-0\.5{-moz-column-gap:.125rem;column-gap:.125rem}.saas-os-ui .gap-x-1{-moz-column-gap:.25rem;column-gap:.25rem}.saas-os-ui .gap-x-1\.5{-moz-column-gap:.375rem;column-gap:.375rem}.saas-os-ui .gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.saas-os-ui .gap-x-3{-moz-column-gap:.75rem;column-gap:.75rem}.saas-os-ui .gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.saas-os-ui .gap-y-0\.5{row-gap:.125rem}.saas-os-ui .gap-y-1{row-gap:.25rem}.saas-os-ui .gap-y-1\.5{row-gap:.375rem}.saas-os-ui .gap-y-2{row-gap:.5rem}.saas-os-ui .gap-y-2\.5{row-gap:.625rem}.saas-os-ui .gap-y-3\.5{row-gap:.875rem}.saas-os-ui .space-x-0>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(0px*(1 - var(--tw-space-x-reverse)));margin-right:calc(0px*var(--tw-space-x-reverse))}.saas-os-ui .space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.saas-os-ui .space-y-1>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.25rem*var(--tw-space-y-reverse));margin-top:calc(.25rem*(1 - var(--tw-space-y-reverse)))}.saas-os-ui .space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.375rem*var(--tw-space-y-reverse));margin-top:calc(.375rem*(1 - var(--tw-space-y-reverse)))}.saas-os-ui .space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.5rem*var(--tw-space-y-reverse));margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)))}.saas-os-ui .space-y-3>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.75rem*var(--tw-space-y-reverse));margin-top:calc(.75rem*(1 - var(--tw-space-y-reverse)))}.saas-os-ui .space-y-3\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(.875rem*var(--tw-space-y-reverse));margin-top:calc(.875rem*(1 - var(--tw-space-y-reverse)))}.saas-os-ui .space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.saas-os-ui .space-y-5>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.25rem*var(--tw-space-y-reverse));margin-top:calc(1.25rem*(1 - var(--tw-space-y-reverse)))}.saas-os-ui .space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.saas-os-ui .space-y-8>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(2rem*var(--tw-space-y-reverse));margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)))}.saas-os-ui .divide-y>:not([hidden])~:not([hidden]){--tw-divide-y-reverse:0;border-bottom-width:calc(1px*var(--tw-divide-y-reverse));border-top-width:calc(1px*(1 - var(--tw-divide-y-reverse)))}.saas-os-ui .divide-border\/60>:not([hidden])~:not([hidden]){border-color:hsl(var(--border)/.6)}.saas-os-ui .overflow-auto{overflow:auto}.saas-os-ui .overflow-hidden{overflow:hidden}.saas-os-ui .overflow-x-auto{overflow-x:auto}.saas-os-ui .overflow-y-auto{overflow-y:auto}.saas-os-ui .overflow-x-hidden{overflow-x:hidden}.saas-os-ui .overscroll-contain{overscroll-behavior:contain}.saas-os-ui .truncate{overflow:hidden;white-space:nowrap}.saas-os-ui .text-ellipsis,.saas-os-ui .truncate{text-overflow:ellipsis}.saas-os-ui .whitespace-nowrap{white-space:nowrap}.saas-os-ui .break-words{overflow-wrap:break-word}.saas-os-ui .rounded{border-radius:.25rem}.saas-os-ui .rounded-\[inherit\]{border-radius:inherit}.saas-os-ui .rounded-full{border-radius:9999px}.saas-os-ui .rounded-lg{border-radius:var(--radius)}.saas-os-ui .rounded-md{border-radius:calc(var(--radius) - 2px)}.saas-os-ui .rounded-none{border-radius:0}.saas-os-ui .rounded-sm{border-radius:calc(var(--radius) - 4px)}.saas-os-ui .rounded-xl{border-radius:.75rem}.saas-os-ui .border{border-width:1px}.saas-os-ui .border-2{border-width:2px}.saas-os-ui .border-b{border-bottom-width:1px}.saas-os-ui .border-b-2{border-bottom-width:2px}.saas-os-ui .border-l{border-left-width:1px}.saas-os-ui .border-t{border-top-width:1px}.saas-os-ui .border-dashed{border-style:dashed}.saas-os-ui .border-border{border-color:hsl(var(--border))}.saas-os-ui .border-border\/40{border-color:hsl(var(--border)/.4)}.saas-os-ui .border-border\/60{border-color:hsl(var(--border)/.6)}.saas-os-ui .border-destructive\/20{border-color:hsl(var(--destructive)/.2)}.saas-os-ui .border-destructive\/30{border-color:hsl(var(--destructive)/.3)}.saas-os-ui .border-destructive\/50{border-color:hsl(var(--destructive)/.5)}.saas-os-ui .border-info{border-color:hsl(var(--info))}.saas-os-ui .border-info\/20{border-color:hsl(var(--info)/.2)}.saas-os-ui .border-info\/30{border-color:hsl(var(--info)/.3)}.saas-os-ui .border-input{border-color:hsl(var(--input))}.saas-os-ui .border-primary{border-color:hsl(var(--primary))}.saas-os-ui .border-success\/20{border-color:hsl(var(--success)/.2)}.saas-os-ui .border-success\/30{border-color:hsl(var(--success)/.3)}.saas-os-ui .border-transparent{border-color:transparent}.saas-os-ui .border-warning\/20{border-color:hsl(var(--warning)/.2)}.saas-os-ui .border-warning\/30{border-color:hsl(var(--warning)/.3)}.saas-os-ui .border-warning\/40{border-color:hsl(var(--warning)/.4)}.saas-os-ui .border-l-transparent{border-left-color:transparent}.saas-os-ui .border-t-transparent{border-top-color:transparent}.saas-os-ui .bg-background{background-color:hsl(var(--background))}.saas-os-ui .bg-background\/80{background-color:hsl(var(--background)/.8)}.saas-os-ui .bg-border{background-color:hsl(var(--border))}.saas-os-ui .bg-card{background-color:hsl(var(--card))}.saas-os-ui .bg-destructive{background-color:hsl(var(--destructive))}.saas-os-ui .bg-destructive\/10{background-color:hsl(var(--destructive)/.1)}.saas-os-ui .bg-destructive\/15{background-color:hsl(var(--destructive)/.15)}.saas-os-ui .bg-info{background-color:hsl(var(--info))}.saas-os-ui .bg-info\/10{background-color:hsl(var(--info)/.1)}.saas-os-ui .bg-info\/15{background-color:hsl(var(--info)/.15)}.saas-os-ui .bg-info\/5{background-color:hsl(var(--info)/.05)}.saas-os-ui .bg-muted{background-color:hsl(var(--muted))}.saas-os-ui .bg-muted-foreground{background-color:hsl(var(--muted-foreground))}.saas-os-ui .bg-muted\/30{background-color:hsl(var(--muted)/.3)}.saas-os-ui .bg-muted\/40{background-color:hsl(var(--muted)/.4)}.saas-os-ui .bg-muted\/50{background-color:hsl(var(--muted)/.5)}.saas-os-ui .bg-popover{background-color:hsl(var(--popover))}.saas-os-ui .bg-primary{background-color:hsl(var(--primary))}.saas-os-ui .bg-primary\/10{background-color:hsl(var(--primary)/.1)}.saas-os-ui .bg-primary\/5{background-color:hsl(var(--primary)/.05)}.saas-os-ui .bg-secondary{background-color:hsl(var(--secondary))}.saas-os-ui .bg-success{background-color:hsl(var(--success))}.saas-os-ui .bg-success\/10{background-color:hsl(var(--success)/.1)}.saas-os-ui .bg-success\/15{background-color:hsl(var(--success)/.15)}.saas-os-ui .bg-transparent{background-color:transparent}.saas-os-ui .bg-warning{background-color:hsl(var(--warning))}.saas-os-ui .bg-warning\/10{background-color:hsl(var(--warning)/.1)}.saas-os-ui .bg-warning\/15{background-color:hsl(var(--warning)/.15)}.saas-os-ui .bg-warning\/5{background-color:hsl(var(--warning)/.05)}.saas-os-ui .bg-warning\/70{background-color:hsl(var(--warning)/.7)}.saas-os-ui .fill-primary{fill:hsl(var(--primary))}.saas-os-ui .object-contain{-o-object-fit:contain;object-fit:contain}.saas-os-ui .object-cover{-o-object-fit:cover;object-fit:cover}.saas-os-ui .p-0{padding:0}.saas-os-ui .p-0\.5{padding:.125rem}.saas-os-ui .p-1{padding:.25rem}.saas-os-ui .p-2{padding:.5rem}.saas-os-ui .p-3{padding:.75rem}.saas-os-ui .p-4{padding:1rem}.saas-os-ui .p-5{padding:1.25rem}.saas-os-ui .p-6{padding:1.5rem}.saas-os-ui .p-\[1px\]{padding:1px}.saas-os-ui .px-0\.5{padding-left:.125rem;padding-right:.125rem}.saas-os-ui .px-1{padding-left:.25rem;padding-right:.25rem}.saas-os-ui .px-1\.5{padding-left:.375rem;padding-right:.375rem}.saas-os-ui .px-2{padding-left:.5rem;padding-right:.5rem}.saas-os-ui .px-2\.5{padding-left:.625rem;padding-right:.625rem}.saas-os-ui .px-3{padding-left:.75rem;padding-right:.75rem}.saas-os-ui .px-4{padding-left:1rem;padding-right:1rem}.saas-os-ui .px-5{padding-left:1.25rem;padding-right:1.25rem}.saas-os-ui .px-6{padding-left:1.5rem;padding-right:1.5rem}.saas-os-ui .py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.saas-os-ui .py-1{padding-bottom:.25rem;padding-top:.25rem}.saas-os-ui .py-1\.5{padding-bottom:.375rem;padding-top:.375rem}.saas-os-ui .py-12{padding-bottom:3rem;padding-top:3rem}.saas-os-ui .py-16{padding-bottom:4rem;padding-top:4rem}.saas-os-ui .py-2{padding-bottom:.5rem;padding-top:.5rem}.saas-os-ui .py-2\.5{padding-bottom:.625rem;padding-top:.625rem}.saas-os-ui .py-3{padding-bottom:.75rem;padding-top:.75rem}.saas-os-ui .py-4{padding-bottom:1rem;padding-top:1rem}.saas-os-ui .py-6{padding-bottom:1.5rem;padding-top:1.5rem}.saas-os-ui .py-8{padding-bottom:2rem;padding-top:2rem}.saas-os-ui .pb-1{padding-bottom:.25rem}.saas-os-ui .pb-2{padding-bottom:.5rem}.saas-os-ui .pb-3{padding-bottom:.75rem}.saas-os-ui .pe-1{padding-inline-end:.25rem}.saas-os-ui .pe-10{padding-inline-end:2.5rem}.saas-os-ui .pe-4{padding-inline-end:1rem}.saas-os-ui .pe-8{padding-inline-end:2rem}.saas-os-ui .ps-10{padding-inline-start:2.5rem}.saas-os-ui .ps-2{padding-inline-start:.5rem}.saas-os-ui .ps-3{padding-inline-start:.75rem}.saas-os-ui .pt-0{padding-top:0}.saas-os-ui .pt-1{padding-top:.25rem}.saas-os-ui .pt-2{padding-top:.5rem}.saas-os-ui .pt-3{padding-top:.75rem}.saas-os-ui .pt-4{padding-top:1rem}.saas-os-ui .text-center{text-align:center}.saas-os-ui .text-start{text-align:start}.saas-os-ui .text-end{text-align:end}.saas-os-ui .align-top{vertical-align:top}.saas-os-ui .align-middle{vertical-align:middle}.saas-os-ui .font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.saas-os-ui .text-2xl{font-size:1.5rem;line-height:2rem}.saas-os-ui .text-3xl{font-size:1.875rem;line-height:2.25rem}.saas-os-ui .text-4xl{font-size:2.25rem;line-height:2.5rem}.saas-os-ui .text-\[10px\]{font-size:10px}.saas-os-ui .text-base{font-size:1rem;line-height:1.5rem}.saas-os-ui .text-lg{font-size:1.125rem;line-height:1.75rem}.saas-os-ui .text-sm{font-size:.875rem;line-height:1.25rem}.saas-os-ui .text-xl{font-size:1.25rem;line-height:1.75rem}.saas-os-ui .text-xs{font-size:.75rem;line-height:1rem}.saas-os-ui .font-bold{font-weight:700}.saas-os-ui .font-medium{font-weight:500}.saas-os-ui .font-normal{font-weight:400}.saas-os-ui .font-semibold{font-weight:600}.saas-os-ui .uppercase{text-transform:uppercase}.saas-os-ui .lowercase{text-transform:lowercase}.saas-os-ui .capitalize{text-transform:capitalize}.saas-os-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)}.saas-os-ui .leading-none{line-height:1}.saas-os-ui .leading-relaxed{line-height:1.625}.saas-os-ui .leading-tight{line-height:1.25}.saas-os-ui .tracking-tight{letter-spacing:-.025em}.saas-os-ui .tracking-wide{letter-spacing:.025em}.saas-os-ui .tracking-wider{letter-spacing:.05em}.saas-os-ui .tracking-widest{letter-spacing:.1em}.saas-os-ui .text-background{color:hsl(var(--background))}.saas-os-ui .text-card-foreground{color:hsl(var(--card-foreground))}.saas-os-ui .text-destructive{color:hsl(var(--destructive))}.saas-os-ui .text-destructive-foreground{color:hsl(var(--destructive-foreground))}.saas-os-ui .text-destructive\/80{color:hsl(var(--destructive)/.8)}.saas-os-ui .text-foreground{color:hsl(var(--foreground))}.saas-os-ui .text-info{color:hsl(var(--info))}.saas-os-ui .text-info-foreground{color:hsl(var(--info-foreground))}.saas-os-ui .text-info\/80{color:hsl(var(--info)/.8)}.saas-os-ui .text-muted-foreground{color:hsl(var(--muted-foreground))}.saas-os-ui .text-muted-foreground\/50{color:hsl(var(--muted-foreground)/.5)}.saas-os-ui .text-muted-foreground\/70{color:hsl(var(--muted-foreground)/.7)}.saas-os-ui .text-popover-foreground{color:hsl(var(--popover-foreground))}.saas-os-ui .text-primary{color:hsl(var(--primary))}.saas-os-ui .text-primary-foreground{color:hsl(var(--primary-foreground))}.saas-os-ui .text-secondary-foreground{color:hsl(var(--secondary-foreground))}.saas-os-ui .text-success{color:hsl(var(--success))}.saas-os-ui .text-success-foreground{color:hsl(var(--success-foreground))}.saas-os-ui .text-success\/80{color:hsl(var(--success)/.8)}.saas-os-ui .text-warning{color:hsl(var(--warning))}.saas-os-ui .text-warning\/80{color:hsl(var(--warning)/.8)}.saas-os-ui .underline-offset-4{text-underline-offset:4px}.saas-os-ui .opacity-0{opacity:0}.saas-os-ui .opacity-100{opacity:1}.saas-os-ui .opacity-40{opacity:.4}.saas-os-ui .opacity-50{opacity:.5}.saas-os-ui .opacity-60{opacity:.6}.saas-os-ui .opacity-70{opacity:.7}.saas-os-ui .shadow{--tw-shadow:0 1px 3px 0 rgba(0,0,0,.1),0 1px 2px -1px rgba(0,0,0,.1);--tw-shadow-colored:0 1px 3px 0 var(--tw-shadow-color),0 1px 2px -1px var(--tw-shadow-color)}.saas-os-ui .shadow,.saas-os-ui .shadow-lg{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.saas-os-ui .shadow-lg{--tw-shadow:0 10px 15px -3px rgba(0,0,0,.1),0 4px 6px -4px rgba(0,0,0,.1);--tw-shadow-colored:0 10px 15px -3px var(--tw-shadow-color),0 4px 6px -4px var(--tw-shadow-color)}.saas-os-ui .shadow-md{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color)}.saas-os-ui .shadow-md,.saas-os-ui .shadow-sm{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.saas-os-ui .shadow-sm{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color)}.saas-os-ui .shadow-sticky-col{--tw-shadow:2px 0 4px -2px rgba(0,0,0,.06);--tw-shadow-colored:2px 0 4px -2px var(--tw-shadow-color)}.saas-os-ui .shadow-sticky-col,.saas-os-ui .shadow-sticky-row{box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.saas-os-ui .shadow-sticky-row{--tw-shadow:0 2px 4px -2px rgba(0,0,0,.06);--tw-shadow-colored:0 2px 4px -2px var(--tw-shadow-color)}.saas-os-ui .outline-none{outline:2px solid transparent;outline-offset:2px}.saas-os-ui .outline{outline-style:solid}.saas-os-ui .ring-0{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.saas-os-ui .ring-offset-background{--tw-ring-offset-color:hsl(var(--background))}.saas-os-ui .filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.saas-os-ui .backdrop-blur-sm{--tw-backdrop-blur:blur(4px);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)}.saas-os-ui .transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.saas-os-ui .transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.saas-os-ui .transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.saas-os-ui .transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.saas-os-ui .transition-shadow{transition-duration:.15s;transition-property:box-shadow;transition-timing-function:cubic-bezier(.4,0,.2,1)}.saas-os-ui .transition-transform{transition-duration:.15s;transition-property:transform;transition-timing-function:cubic-bezier(.4,0,.2,1)}.saas-os-ui .duration-200{transition-duration:.2s}.saas-os-ui .duration-500{transition-duration:.5s}.saas-os-ui .\[buildbase\:tracking\]{buildbase:tracking}.saas-os-ui .file\:border-0::file-selector-button{border-width:0}.saas-os-ui .file\:bg-transparent::file-selector-button{background-color:transparent}.saas-os-ui .file\:text-sm::file-selector-button{font-size:.875rem;line-height:1.25rem}.saas-os-ui .file\:font-medium::file-selector-button{font-weight:500}.saas-os-ui .placeholder\:text-muted-foreground::-moz-placeholder{color:hsl(var(--muted-foreground))}.saas-os-ui .placeholder\:text-muted-foreground::placeholder{color:hsl(var(--muted-foreground))}.saas-os-ui .last\:border-b-0:last-child{border-bottom-width:0}.saas-os-ui .hover\:border-border:hover{border-color:hsl(var(--border))}.saas-os-ui .hover\:bg-accent:hover{background-color:hsl(var(--accent))}.saas-os-ui .hover\:bg-destructive\/10:hover{background-color:hsl(var(--destructive)/.1)}.saas-os-ui .hover\:bg-destructive\/15:hover{background-color:hsl(var(--destructive)/.15)}.saas-os-ui .hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive)/.9)}.saas-os-ui .hover\:bg-info\/10:hover{background-color:hsl(var(--info)/.1)}.saas-os-ui .hover\:bg-info\/15:hover{background-color:hsl(var(--info)/.15)}.saas-os-ui .hover\:bg-info\/90:hover{background-color:hsl(var(--info)/.9)}.saas-os-ui .hover\:bg-muted:hover{background-color:hsl(var(--muted))}.saas-os-ui .hover\:bg-muted-foreground\/90:hover{background-color:hsl(var(--muted-foreground)/.9)}.saas-os-ui .hover\:bg-muted\/30:hover{background-color:hsl(var(--muted)/.3)}.saas-os-ui .hover\:bg-primary\/90:hover{background-color:hsl(var(--primary)/.9)}.saas-os-ui .hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary)/.8)}.saas-os-ui .hover\:bg-success\/10:hover{background-color:hsl(var(--success)/.1)}.saas-os-ui .hover\:bg-success\/90:hover{background-color:hsl(var(--success)/.9)}.saas-os-ui .hover\:bg-transparent:hover{background-color:transparent}.saas-os-ui .hover\:bg-warning\/10:hover{background-color:hsl(var(--warning)/.1)}.saas-os-ui .hover\:bg-warning\/15:hover{background-color:hsl(var(--warning)/.15)}.saas-os-ui .hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.saas-os-ui .hover\:text-destructive:hover{color:hsl(var(--destructive))}.saas-os-ui .hover\:text-foreground:hover{color:hsl(var(--foreground))}.saas-os-ui .hover\:text-info:hover{color:hsl(var(--info))}.saas-os-ui .hover\:underline:hover{text-decoration-line:underline}.saas-os-ui .hover\:opacity-100:hover{opacity:1}.saas-os-ui .hover\:shadow-sm:hover{--tw-shadow:0 1px 2px 0 rgba(0,0,0,.05);--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.saas-os-ui .focus\:bg-accent:focus{background-color:hsl(var(--accent))}.saas-os-ui .focus\:text-accent-foreground:focus{color:hsl(var(--accent-foreground))}.saas-os-ui .focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.saas-os-ui .focus\:ring-1:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.saas-os-ui .focus\:ring-1:focus,.saas-os-ui .focus\:ring-2:focus{box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.saas-os-ui .focus\:ring-2:focus{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color)}.saas-os-ui .focus\:ring-destructive:focus{--tw-ring-color:hsl(var(--destructive))}.saas-os-ui .focus\:ring-primary:focus{--tw-ring-color:hsl(var(--primary))}.saas-os-ui .focus\:ring-ring:focus{--tw-ring-color:hsl(var(--ring))}.saas-os-ui .focus\:ring-offset-2:focus{--tw-ring-offset-width:2px}.saas-os-ui .focus-visible\:underline:focus-visible{text-decoration-line:underline}.saas-os-ui .focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.saas-os-ui .focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.saas-os-ui .focus-visible\:ring-2:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.saas-os-ui .focus-visible\:ring-ring:focus-visible{--tw-ring-color:hsl(var(--ring))}.saas-os-ui .focus-visible\:ring-offset-2:focus-visible{--tw-ring-offset-width:2px}.saas-os-ui .focus-visible\:ring-offset-background:focus-visible{--tw-ring-offset-color:hsl(var(--background))}.saas-os-ui .disabled\:pointer-events-none:disabled{pointer-events:none}.saas-os-ui .disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.saas-os-ui .disabled\:opacity-50:disabled{opacity:.5}.saas-os-ui .group:hover .group-hover\:bg-muted\/50{background-color:hsl(var(--muted)/.5)}.saas-os-ui .peer:disabled~.peer-disabled\:cursor-not-allowed{cursor:not-allowed}.saas-os-ui .peer:disabled~.peer-disabled\:opacity-70{opacity:.7}.saas-os-ui .aria-selected\:bg-accent[aria-selected=true]{background-color:hsl(var(--accent))}.saas-os-ui .aria-selected\:text-accent-foreground[aria-selected=true]{color:hsl(var(--accent-foreground))}.saas-os-ui .data-\[disabled\=true\]\:pointer-events-none[data-disabled=true],.saas-os-ui .data-\[disabled\]\:pointer-events-none[data-disabled]{pointer-events:none}.saas-os-ui .data-\[side\=bottom\]\:translate-y-1[data-side=bottom]{--tw-translate-y:0.25rem}.saas-os-ui .data-\[side\=bottom\]\:translate-y-1[data-side=bottom],.saas-os-ui .data-\[side\=left\]\:-translate-x-1[data-side=left]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.saas-os-ui .data-\[side\=left\]\:-translate-x-1[data-side=left]{--tw-translate-x:-0.25rem}.saas-os-ui .data-\[side\=right\]\:translate-x-1[data-side=right]{--tw-translate-x:0.25rem}.saas-os-ui .data-\[side\=right\]\:translate-x-1[data-side=right],.saas-os-ui .data-\[side\=top\]\:-translate-y-1[data-side=top]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.saas-os-ui .data-\[side\=top\]\:-translate-y-1[data-side=top]{--tw-translate-y:-0.25rem}.saas-os-ui .data-\[state\=checked\]\:translate-x-4[data-state=checked]{--tw-translate-x:1rem}.saas-os-ui .data-\[state\=checked\]\:translate-x-4[data-state=checked],.saas-os-ui .data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.saas-os-ui .data-\[state\=unchecked\]\:translate-x-0[data-state=unchecked]{--tw-translate-x:0px}@keyframes accordion-up{0%{height:var(--radix-accordion-content-height)}to{height:0}}.saas-os-ui .data-\[state\=closed\]\:animate-accordion-up[data-state=closed]{animation:accordion-up .2s ease-out}@keyframes accordion-down{0%{height:0}to{height:var(--radix-accordion-content-height)}}.saas-os-ui .data-\[state\=open\]\:animate-accordion-down[data-state=open]{animation:accordion-down .2s ease-out}.saas-os-ui .data-\[state\=checked\]\:bg-primary[data-state=checked]{background-color:hsl(var(--primary))}.saas-os-ui .data-\[state\=open\]\:bg-accent[data-state=open]{background-color:hsl(var(--accent))}.saas-os-ui .data-\[state\=unchecked\]\:bg-input[data-state=unchecked]{background-color:hsl(var(--input))}.saas-os-ui .data-\[state\=open\]\:text-muted-foreground[data-state=open]{color:hsl(var(--muted-foreground))}.saas-os-ui .data-\[disabled\=true\]\:opacity-50[data-disabled=true],.saas-os-ui .data-\[disabled\]\:opacity-50[data-disabled]{opacity:.5}@media (min-width:640px){.saas-os-ui .sm\:mt-0{margin-top:0}.saas-os-ui .sm\:block{display:block}.saas-os-ui .sm\:inline{display:inline}.saas-os-ui .sm\:flex{display:flex}.saas-os-ui .sm\:hidden{display:none}.saas-os-ui .sm\:h-10{height:2.5rem}.saas-os-ui .sm\:h-7{height:1.75rem}.saas-os-ui .sm\:h-8{height:2rem}.saas-os-ui .sm\:h-9{height:2.25rem}.saas-os-ui .sm\:h-auto{height:auto}.saas-os-ui .sm\:h-full{height:100%}.saas-os-ui .sm\:max-h-\[500px\]{max-height:500px}.saas-os-ui .sm\:max-h-\[90vh\]{max-height:90vh}.saas-os-ui .sm\:min-h-\[600px\]{min-height:600px}.saas-os-ui .sm\:w-56{width:14rem}.saas-os-ui .sm\:w-7{width:1.75rem}.saas-os-ui .sm\:w-8{width:2rem}.saas-os-ui .sm\:w-9{width:2.25rem}.saas-os-ui .sm\:w-auto{width:auto}.saas-os-ui .sm\:w-full{width:100%}.saas-os-ui .sm\:min-w-0{min-width:0}.saas-os-ui .sm\:min-w-\[600px\]{min-width:600px}.saas-os-ui .sm\:max-w-lg{max-width:32rem}.saas-os-ui .sm\:max-w-md{max-width:28rem}.saas-os-ui .sm\:flex-initial{flex:0 1 auto}.saas-os-ui .sm\:flex-none{flex:none}.saas-os-ui .sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.saas-os-ui .sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.saas-os-ui .sm\:flex-row{flex-direction:row}.saas-os-ui .sm\:flex-col{flex-direction:column}.saas-os-ui .sm\:items-start{align-items:flex-start}.saas-os-ui .sm\:items-end{align-items:flex-end}.saas-os-ui .sm\:items-center{align-items:center}.saas-os-ui .sm\:justify-end{justify-content:flex-end}.saas-os-ui .sm\:justify-between{justify-content:space-between}.saas-os-ui .sm\:gap-1{gap:.25rem}.saas-os-ui .sm\:gap-1\.5{gap:.375rem}.saas-os-ui .sm\:gap-2{gap:.5rem}.saas-os-ui .sm\:gap-3{gap:.75rem}.saas-os-ui .sm\:gap-4{gap:1rem}.saas-os-ui .sm\:gap-x-1{-moz-column-gap:.25rem;column-gap:.25rem}.saas-os-ui .sm\:gap-y-4{row-gap:1rem}.saas-os-ui .sm\:space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-left:calc(.5rem*(1 - var(--tw-space-x-reverse)));margin-right:calc(.5rem*var(--tw-space-x-reverse))}.saas-os-ui .sm\:space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1rem*var(--tw-space-y-reverse));margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)))}.saas-os-ui .sm\:space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-bottom:calc(1.5rem*var(--tw-space-y-reverse));margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)))}.saas-os-ui .sm\:rounded-lg{border-radius:var(--radius)}.saas-os-ui .sm\:border-0{border-width:0}.saas-os-ui .sm\:p-0{padding:0}.saas-os-ui .sm\:p-4{padding:1rem}.saas-os-ui .sm\:p-5{padding:1.25rem}.saas-os-ui .sm\:p-6{padding:1.5rem}.saas-os-ui .sm\:px-1\.5{padding-left:.375rem;padding-right:.375rem}.saas-os-ui .sm\:px-4{padding-left:1rem;padding-right:1rem}.saas-os-ui .sm\:px-5{padding-left:1.25rem;padding-right:1.25rem}.saas-os-ui .sm\:px-6{padding-left:1.5rem;padding-right:1.5rem}.saas-os-ui .sm\:py-1{padding-bottom:.25rem;padding-top:.25rem}.saas-os-ui .sm\:py-5{padding-bottom:1.25rem;padding-top:1.25rem}.saas-os-ui .sm\:py-6{padding-bottom:1.5rem;padding-top:1.5rem}.saas-os-ui .sm\:py-8{padding-bottom:2rem;padding-top:2rem}.saas-os-ui .sm\:pe-0{padding-inline-end:0}.saas-os-ui .sm\:pe-2{padding-inline-end:.5rem}.saas-os-ui .sm\:pt-0{padding-top:0}.saas-os-ui .sm\:text-start{text-align:start}.saas-os-ui .sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}.saas-os-ui .sm\:text-sm{font-size:.875rem;line-height:1.25rem}.saas-os-ui .sm\:text-xl{font-size:1.25rem;line-height:1.75rem}.saas-os-ui .sm\:opacity-0{opacity:0}.saas-os-ui .sm\:transition-opacity{transition-duration:.15s;transition-property:opacity;transition-timing-function:cubic-bezier(.4,0,.2,1)}.saas-os-ui .group:focus-within .sm\:group-focus-within\:opacity-100{opacity:1}.saas-os-ui .group:hover .sm\:group-hover\:opacity-100{opacity:1}}@media (min-width:768px){.saas-os-ui .md\:block{display:block}.saas-os-ui .md\:hidden{display:none}.saas-os-ui .md\:w-full{width:100%}.saas-os-ui .md\:min-w-\[800px\]{min-width:800px}}@media (min-width:1024px){.saas-os-ui .lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:1280px){.saas-os-ui .xl\:max-h-\[65vh\]{max-height:65vh}.saas-os-ui .xl\:min-w-\[960px\]{min-width:960px}}.saas-os-ui .rtl\:left-2:where([dir=rtl],[dir=rtl] *){left:.5rem}.saas-os-ui .rtl\:right-auto:where([dir=rtl],[dir=rtl] *){right:auto}.saas-os-ui .rtl\:rotate-180:where([dir=rtl],[dir=rtl] *){--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.saas-os-ui .rtl\:data-\[state\=checked\]\:-translate-x-4[data-state=checked]:where([dir=rtl],[dir=rtl] *){--tw-translate-x:-1rem;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.saas-os-ui .\[\&\[data-state\=open\]\>svg\]\:rotate-180[data-state=open]>svg{--tw-rotate:180deg;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.saas-os-ui .\[\&_\[cmdk-group-heading\]\]\:px-2 [cmdk-group-heading]{padding-left:.5rem;padding-right:.5rem}.saas-os-ui .\[\&_\[cmdk-group-heading\]\]\:py-1\.5 [cmdk-group-heading]{padding-bottom:.375rem;padding-top:.375rem}.saas-os-ui .\[\&_\[cmdk-group-heading\]\]\:text-xs [cmdk-group-heading]{font-size:.75rem;line-height:1rem}.saas-os-ui .\[\&_\[cmdk-group-heading\]\]\:font-medium [cmdk-group-heading]{font-weight:500}.saas-os-ui .\[\&_\[cmdk-group-heading\]\]\:text-muted-foreground [cmdk-group-heading]{color:hsl(var(--muted-foreground))}.saas-os-ui .\[\&_\[cmdk-group\]\:not\(\[hidden\]\)_\~\[cmdk-group\]\]\:pt-0 [cmdk-group]:not([hidden])~[cmdk-group]{padding-top:0}.saas-os-ui .\[\&_\[cmdk-group\]\]\:px-2 [cmdk-group]{padding-left:.5rem;padding-right:.5rem}.saas-os-ui .\[\&_\[cmdk-input-wrapper\]_svg\]\:h-5 [cmdk-input-wrapper] svg{height:1.25rem}.saas-os-ui .\[\&_\[cmdk-input-wrapper\]_svg\]\:w-5 [cmdk-input-wrapper] svg{width:1.25rem}.saas-os-ui .\[\&_\[cmdk-input\]\]\:h-12 [cmdk-input]{height:3rem}.saas-os-ui .\[\&_\[cmdk-item\]\]\:px-2 [cmdk-item]{padding-left:.5rem;padding-right:.5rem}.saas-os-ui .\[\&_\[cmdk-item\]\]\:py-3 [cmdk-item]{padding-bottom:.75rem;padding-top:.75rem}.saas-os-ui .\[\&_\[cmdk-item\]_svg\]\:h-5 [cmdk-item] svg{height:1.25rem}.saas-os-ui .\[\&_\[cmdk-item\]_svg\]\:w-5 [cmdk-item] svg{width:1.25rem}
|