@buildbase/sdk 0.0.71 → 0.0.73
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 +81 -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-CvBSuMf-.mjs +2 -0
- package/dist/react/chunks/SettingsDialog-DdOUkwIi.cjs +2 -0
- package/dist/react/chunks/{SubscriptionDialog-Bkue_qyM.cjs → SubscriptionDialog-CdZzF5eK.cjs} +1 -1
- package/dist/react/chunks/{SubscriptionDialog-ZjdyTmxn.mjs → SubscriptionDialog-D8_frxHc.mjs} +1 -1
- package/dist/react/chunks/react-BSHCN-ZU.mjs +2 -0
- package/dist/react/chunks/react-DQqr117G.cjs +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,87 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.0.73] - 2026-09-28
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **An organization's own permissions.** Keys defined in the BuildBase console
|
|
15
|
+
(`app:reports:export`) arrive in `settings.workspace.customPermissions` and
|
|
16
|
+
resolve per role exactly like the platform's own, so `can('app:reports:export')`
|
|
17
|
+
answers from what the organization granted rather than from a prop the app
|
|
18
|
+
shipped. `usePermissions()` returns `appPermissionDefinitions` for rendering
|
|
19
|
+
them, and `appPermissionCatalogue(settings, appPermissions)` is exported for
|
|
20
|
+
the same list outside React. Needs a server from release 23.
|
|
21
|
+
- **Your backend can ask what a member may do.** The server client gains
|
|
22
|
+
`workspace.permissions(workspaceId)`, the server's own answer
|
|
23
|
+
(`{ role, isOwner, permissions }`), and `workspace.can(workspaceId, key)` for
|
|
24
|
+
one key or every key of a list. Check before acting rather than trusting the
|
|
25
|
+
browser.
|
|
26
|
+
- The workspace permissions screen lists the organization's catalogue with its
|
|
27
|
+
labels. Before, it could only infer keys from the `defaultPermissions` prop,
|
|
28
|
+
so a permission nobody had granted yet was invisible and ungrantable.
|
|
29
|
+
Keys passed through `defaultPermissions` keep working and are listed too.
|
|
30
|
+
- `Permission.WORKSPACE_USAGE_RECORD` (`workspace:usage:record`): recording usage
|
|
31
|
+
and spending credits. Editors hold it, viewers do not.
|
|
32
|
+
- **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.
|
|
33
|
+
- **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.
|
|
34
|
+
- **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.
|
|
35
|
+
- **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.
|
|
36
|
+
|
|
37
|
+
- **`@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`.
|
|
38
|
+
- **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.
|
|
39
|
+
- **`@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.
|
|
40
|
+
- **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.
|
|
41
|
+
- 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.
|
|
42
|
+
- **`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.
|
|
43
|
+
|
|
44
|
+
### Changed
|
|
45
|
+
|
|
46
|
+
- **⚠️ 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.
|
|
47
|
+
- 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).
|
|
48
|
+
|
|
49
|
+
### Fixed
|
|
50
|
+
|
|
51
|
+
- **A grant made in the console reaches the member.** A role's app permissions
|
|
52
|
+
were read from the workspace override or the `defaultPermissions` prop only,
|
|
53
|
+
never from the organization's matrix, so a custom permission granted to a role
|
|
54
|
+
in the console answered `false` in the app while the server said yes. The SDK
|
|
55
|
+
now resolves in the server's order: workspace override, then the organization,
|
|
56
|
+
then the SDK defaults. A key the console does not catalogue keeps the prop's
|
|
57
|
+
default.
|
|
58
|
+
- **Admin holds every permission**, a custom one added after admin's list was
|
|
59
|
+
saved included, as the server and both settings screens say.
|
|
60
|
+
- **The Permissions screen appears for a console-only catalogue.** It was shown
|
|
61
|
+
only when the app passed `defaultPermissions`.
|
|
62
|
+
- **Saving the Permissions screen no longer strips platform permissions.** A
|
|
63
|
+
role the workspace had no override for was saved with its app keys only, so
|
|
64
|
+
an editor lost settings, members and usage access in that workspace. The
|
|
65
|
+
screen also starts from what each role resolves to now, the console's grants
|
|
66
|
+
included, and groups rows as the console does.
|
|
67
|
+
- `ISettings['workspace']` declares `customPermissions`, which the server already
|
|
68
|
+
sent but the type did not name.
|
|
69
|
+
- New helper `resolveRolePermissions(role, ctx)`: what one role may do, by the
|
|
70
|
+
same rules as `resolvePermissions`.
|
|
71
|
+
|
|
72
|
+
- **Inviting a member never preselects `admin`.** The invite form preselects the
|
|
73
|
+
org's default role, but not when that is `admin`: an invite sent with one click
|
|
74
|
+
handed over settings, members and billing. It falls back to `viewer`, then to
|
|
75
|
+
any other role. New helper `pickDefaultRole(roles, defaultRole)`.
|
|
76
|
+
- **Custom roles appear in the role dropdown.** Changing a member's role listed
|
|
77
|
+
the workspace's copy of the roles, made when it was created and never updated,
|
|
78
|
+
so a role added later in the console was missing. It lists the org's roles.
|
|
79
|
+
- **`DEFAULT_ROLE_PERMISSIONS` matches the server.** It had a `member` entry,
|
|
80
|
+
which no one can hold, and no `editor`, so an editor was shown nothing the
|
|
81
|
+
server allowed. It now names `admin`, `editor` and `viewer`. Servers from this
|
|
82
|
+
release send every role's effective permissions, so these defaults apply only
|
|
83
|
+
to older servers.
|
|
84
|
+
- An unknown role never falls back to `admin`, even when that is the org's
|
|
85
|
+
default role.
|
|
86
|
+
- **`useSeatStatus` applies the org's member ceiling by default.** It used the
|
|
87
|
+
org's `maxWorkspaceUsers` only when the caller passed it, so an app page that
|
|
88
|
+
did not showed no limit beside the SDK's own members screen showing 1/50 for
|
|
89
|
+
the same workspace. An explicit `settingsMaxUsers` still wins.
|
|
90
|
+
|
|
10
91
|
## [0.0.71] - 2026-09-25
|
|
11
92
|
|
|
12
93
|
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}
|