@intelligo-dev/cli 1.0.0-beta.1 → 1.0.0-beta.14
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/NOTICE +6 -0
- package/README.md +102 -0
- package/dist/bin.js +122 -37
- package/dist/bin.js.map +1 -1
- package/dist/commands/add.d.ts +26 -1
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +70 -4
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/create-flow.d.ts +37 -0
- package/dist/commands/create-flow.d.ts.map +1 -0
- package/dist/commands/create-flow.js +212 -0
- package/dist/commands/create-flow.js.map +1 -0
- package/dist/commands/create.d.ts +27 -6
- package/dist/commands/create.d.ts.map +1 -1
- package/dist/commands/create.js +53 -13
- package/dist/commands/create.js.map +1 -1
- package/dist/commands/doctor.d.ts +14 -3
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +295 -37
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/migrate-check.d.ts +73 -1
- package/dist/commands/migrate-check.d.ts.map +1 -1
- package/dist/commands/migrate-check.js +130 -5
- package/dist/commands/migrate-check.js.map +1 -1
- package/dist/commands/migrate.d.ts +97 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +141 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/sync-messages.d.ts +37 -0
- package/dist/commands/sync-messages.d.ts.map +1 -0
- package/dist/commands/sync-messages.js +88 -0
- package/dist/commands/sync-messages.js.map +1 -0
- package/dist/commands/sync-scaffold.d.ts +36 -0
- package/dist/commands/sync-scaffold.d.ts.map +1 -0
- package/dist/commands/sync-scaffold.js +53 -0
- package/dist/commands/sync-scaffold.js.map +1 -0
- package/dist/commands/sync.d.ts +103 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +361 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/upgrade-check.d.ts +5 -5
- package/dist/commands/upgrade-check.d.ts.map +1 -1
- package/dist/commands/upgrade-check.js +22 -6
- package/dist/commands/upgrade-check.js.map +1 -1
- package/dist/env-files.d.ts +12 -0
- package/dist/env-files.d.ts.map +1 -0
- package/dist/env-files.js +29 -0
- package/dist/env-files.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/manifest.d.ts +36 -15
- package/dist/manifest.d.ts.map +1 -1
- package/dist/manifest.js +32 -16
- package/dist/manifest.js.map +1 -1
- package/dist/migrations.d.ts +3 -6
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +3 -6
- package/dist/migrations.js.map +1 -1
- package/dist/model-catalogue.d.ts +14 -0
- package/dist/model-catalogue.d.ts.map +1 -0
- package/dist/model-catalogue.js +34 -0
- package/dist/model-catalogue.js.map +1 -0
- package/dist/module-exports.d.ts +63 -0
- package/dist/module-exports.d.ts.map +1 -0
- package/dist/module-exports.js +231 -0
- package/dist/module-exports.js.map +1 -0
- package/dist/registry-bundle.d.ts +43 -0
- package/dist/registry-bundle.d.ts.map +1 -0
- package/dist/registry-bundle.js +74 -0
- package/dist/registry-bundle.js.map +1 -0
- package/dist/registry-items.d.ts +84 -0
- package/dist/registry-items.d.ts.map +1 -0
- package/dist/registry-items.js +187 -0
- package/dist/registry-items.js.map +1 -0
- package/package.json +36 -10
- package/src/bin.ts +316 -0
- package/src/commands/add.ts +255 -0
- package/src/commands/create-flow.ts +284 -0
- package/src/commands/create.ts +149 -0
- package/src/commands/doctor.ts +487 -0
- package/src/commands/migrate-check.ts +298 -0
- package/src/commands/migrate.ts +228 -0
- package/src/commands/sync-messages.ts +114 -0
- package/src/commands/sync-scaffold.ts +83 -0
- package/src/commands/sync.ts +534 -0
- package/src/commands/upgrade-check.ts +160 -0
- package/src/env-files.ts +31 -0
- package/src/index.ts +39 -0
- package/src/manifest.ts +147 -0
- package/src/migrations-dir.ts +25 -0
- package/src/migrations.ts +133 -0
- package/src/model-catalogue.ts +35 -0
- package/src/module-exports.ts +266 -0
- package/src/registry-bundle.ts +103 -0
- package/src/registry-items.ts +237 -0
- package/templates/admin-page/admin-page.tsx.tpl +2 -3
- package/templates/app-scaffold/assistant-route.ts.tpl +2 -2
- package/templates/app-scaffold/auth-route.ts.tpl +10 -0
- package/templates/app-scaffold/components.json.tpl +6 -2
- package/templates/app-scaffold/db-schema.ts.tpl +29 -0
- package/templates/app-scaffold/drizzle-journal.json.tpl +5 -0
- package/templates/app-scaffold/drizzle.config.ts.tpl +45 -0
- package/templates/app-scaffold/env.example.tpl +65 -1
- package/templates/app-scaffold/globals.css.tpl +172 -281
- package/templates/app-scaffold/i18n-request.ts.tpl +25 -0
- package/templates/app-scaffold/instrumentation.ts.tpl +21 -0
- package/templates/app-scaffold/intelligo.ts.tpl +95 -41
- package/templates/app-scaffold/layout.tsx.tpl +18 -1
- package/templates/app-scaffold/lib-utils.ts.tpl +1 -6
- package/templates/app-scaffold/next.config.mjs.tpl +2 -0
- package/templates/app-scaffold/package.json.tpl +31 -17
- package/templates/app-scaffold/page.tsx.tpl +16 -0
- package/templates/app-scaffold/plans.ts.tpl +32 -13
- package/templates/app-scaffold/{middleware.ts.tpl → proxy.ts.tpl} +6 -0
- package/templates/app-scaffold/sonner.tsx.tpl +42 -20
- package/templates/app-scaffold/stripe-webhook-route.ts.tpl +24 -0
- package/templates/app-scaffold/theme-provider.tsx.tpl +6 -4
- package/templates/app-scaffold/tsconfig.json.tpl +20 -4
- package/templates/app-scaffold/use-mobile.ts.tpl +19 -0
- package/templates/app-scaffold/workspace-bootstrap.ts.tpl +30 -0
- package/templates/maintenance/maintenance-route.ts.tpl +119 -0
- package/templates/manifest.json +75 -17
- package/templates/registry/ai-agent-activity.json +23 -0
- package/templates/registry/ai-agent-progress.json +21 -0
- package/templates/registry/ai-approval-card.json +27 -0
- package/templates/registry/ai-artifact.json +22 -0
- package/templates/registry/ai-branch.json +21 -0
- package/templates/registry/ai-citations.json +24 -0
- package/templates/registry/ai-code-block.json +23 -0
- package/templates/registry/ai-composer-menu.json +19 -0
- package/templates/registry/ai-file-diff.json +25 -0
- package/templates/registry/ai-image-generation.json +23 -0
- package/templates/registry/ai-markdown.json +23 -0
- package/templates/registry/ai-message-bubble.json +23 -0
- package/templates/registry/ai-message-scroller.json +22 -0
- package/templates/registry/ai-message.json +21 -0
- package/templates/registry/ai-motion.json +19 -0
- package/templates/registry/ai-prompt-input.json +28 -0
- package/templates/registry/ai-reasoning-text.json +22 -0
- package/templates/registry/ai-reasoning.json +22 -0
- package/templates/registry/ai-shimmer-text.json +19 -0
- package/templates/registry/ai-sidebar.json +25 -0
- package/templates/registry/ai-speech-input.json +21 -0
- package/templates/registry/ai-streaming-response.json +24 -0
- package/templates/registry/ai-suggestion.json +19 -0
- package/templates/registry/ai-todo-list.json +22 -0
- package/templates/registry/ai-tool-approval.json +26 -0
- package/templates/registry/ai-tool-result.json +25 -0
- package/templates/registry/alert-dialog.json +23 -0
- package/templates/registry/animated-list.json +21 -0
- package/templates/registry/app-shell.json +93 -0
- package/templates/registry/artifacts.json +82 -0
- package/templates/registry/attachment.json +22 -0
- package/templates/registry/auth-email-verification.json +39 -0
- package/templates/registry/auth-login.json +72 -0
- package/templates/registry/auth-password-reset.json +53 -0
- package/templates/registry/auth-signup.json +41 -0
- package/templates/registry/billing-settings.json +60 -0
- package/templates/registry/button.json +22 -0
- package/templates/registry/chat-eve.json +19 -0
- package/templates/registry/chat-panel.json +30 -0
- package/templates/registry/chat-share.json +42 -0
- package/templates/registry/chat-widget.json +34 -0
- package/templates/registry/chat.json +326 -0
- package/templates/registry/checkbox.json +22 -0
- package/templates/registry/checkout.json +40 -0
- package/templates/registry/collapsible.json +19 -0
- package/templates/registry/command.json +23 -0
- package/templates/registry/copy-button.json +21 -0
- package/templates/registry/dashboard.json +69 -0
- package/templates/registry/dialog.json +24 -0
- package/templates/registry/document-viewer.json +22 -0
- package/templates/registry/dropdown-menu.json +23 -0
- package/templates/registry/expandable-tabs.json +22 -0
- package/templates/registry/feature-gating.json +73 -0
- package/templates/registry/file-upload.json +24 -0
- package/templates/registry/hold-action-button.json +22 -0
- package/templates/registry/input-group.json +23 -0
- package/templates/registry/input.json +19 -0
- package/templates/registry/intelligo.json +187 -0
- package/templates/registry/invitation-accept.json +64 -0
- package/templates/registry/language-switcher.json +29 -0
- package/templates/registry/morphing-modal.json +24 -0
- package/templates/registry/notification-stack.json +24 -0
- package/templates/registry/notifications.json +87 -0
- package/templates/registry/onboarding.json +83 -0
- package/templates/registry/otp-input.json +22 -0
- package/templates/registry/page-header.json +15 -0
- package/templates/registry/payment-poll.json +52 -0
- package/templates/registry/popover-morph.json +22 -0
- package/templates/registry/popover.json +22 -0
- package/templates/registry/pricing.json +111 -0
- package/templates/registry/privacy-settings.json +65 -0
- package/templates/registry/profile-settings.json +68 -0
- package/templates/registry/progress.json +19 -0
- package/templates/registry/radio-group.json +22 -0
- package/templates/registry/registry.json +2945 -0
- package/templates/registry/route-error.json +65 -0
- package/templates/registry/select-morph.json +23 -0
- package/templates/registry/select.json +23 -0
- package/templates/registry/settings-shell.json +47 -0
- package/templates/registry/sheet.json +24 -0
- package/templates/registry/sidebar.json +28 -0
- package/templates/registry/smoke.json +34 -0
- package/templates/registry/spinner.json +16 -0
- package/templates/registry/stat-card.json +18 -0
- package/templates/registry/status-badge.json +18 -0
- package/templates/registry/switch.json +20 -0
- package/templates/registry/tabs.json +23 -0
- package/templates/registry/team-settings.json +97 -0
- package/templates/registry/textarea.json +16 -0
- package/templates/registry/tooltip.json +22 -0
- package/templates/registry/trial-banner.json +43 -0
- package/templates/registry/usage.json +84 -0
- package/templates/registry/workspace-settings.json +71 -0
- package/templates/registry-items.json +116 -0
- package/templates/registry-requires.json +180 -0
- package/templates/usage-page/usage-page.tsx.tpl +23 -8
- package/templates/vitest/server-only.ts.tpl +7 -0
- package/templates/vitest/vitest.config.ts.tpl +37 -0
- package/templates/billing-page/billing-page.tsx.tpl +0 -72
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tables this application owns.
|
|
3
|
+
*
|
|
4
|
+
* Everything the framework needs — users, workspaces, members, plans,
|
|
5
|
+
* subscriptions, credits, executions, audit events, notifications,
|
|
6
|
+
* conversations, documents — is `@intelligo-dev/core`'s and arrives
|
|
7
|
+
* with its own migrations. Define your product's tables here, scope
|
|
8
|
+
* them to a workspace, and reference framework tables by import:
|
|
9
|
+
*
|
|
10
|
+
* import { pgTable, text, timestamp } from "drizzle-orm/pg-core";
|
|
11
|
+
* import { organization, users } from "@intelligo-dev/core/db/schema";
|
|
12
|
+
*
|
|
13
|
+
* export const reports = pgTable("reports", {
|
|
14
|
+
* id: text("id").primaryKey(),
|
|
15
|
+
* workspaceId: text("workspace_id")
|
|
16
|
+
* .notNull()
|
|
17
|
+
* .references(() => organization.id, { onDelete: "cascade" }),
|
|
18
|
+
* createdBy: text("created_by").references(() => users.id),
|
|
19
|
+
* createdAt: timestamp("created_at").defaultNow().notNull(),
|
|
20
|
+
* });
|
|
21
|
+
*
|
|
22
|
+
* Then `pnpm db:generate` writes the migration into ./drizzle and
|
|
23
|
+
* `pnpm db:migrate` applies it after the framework's chain.
|
|
24
|
+
*
|
|
25
|
+
* Intelligo never reads these tables (every table has one
|
|
26
|
+
* owner), so their shape is entirely yours.
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { defineConfig } from "drizzle-kit";
|
|
2
|
+
import { config } from "dotenv";
|
|
3
|
+
|
|
4
|
+
// drizzle-kit does not load env files; Next.js does. Same precedence.
|
|
5
|
+
config({ path: ".env.local" });
|
|
6
|
+
config({ path: ".env" });
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Your application's migration chain — and only yours.
|
|
10
|
+
*
|
|
11
|
+
* The framework's tables (users, workspaces, plans, credits, executions,
|
|
12
|
+
* …) arrive inside `@intelligo-dev/core` together with their migration
|
|
13
|
+
* history, and `intelligo migrate` applies that chain. This config
|
|
14
|
+
* covers the tables you own: list their schema files here, generate
|
|
15
|
+
* with `pnpm db:generate`, apply with `pnpm db:migrate`.
|
|
16
|
+
* `drizzle/meta/_journal.json` starts empty so `db:migrate` succeeds
|
|
17
|
+
* before you own a table — drizzle-kit exits 1, with no message, when
|
|
18
|
+
* the journal is missing.
|
|
19
|
+
*
|
|
20
|
+
* Two chains, one database, so they record themselves in different
|
|
21
|
+
* tables: the framework in drizzle's default `__drizzle_migrations`,
|
|
22
|
+
* yours in `__app_migrations`. Do not merge them — drizzle-kit applies
|
|
23
|
+
* by timestamp, and a framework migration published after you
|
|
24
|
+
* generated one of yours would be skipped silently.
|
|
25
|
+
*
|
|
26
|
+
* Your schema may reference framework tables (`references(() =>
|
|
27
|
+
* users.id)`); drizzle-kit emits the foreign key by name and does not
|
|
28
|
+
* try to create the framework's table.
|
|
29
|
+
*
|
|
30
|
+
* Do not point `drizzle-kit push` at this config: push diffs the whole
|
|
31
|
+
* database against the schema it sees, and this config deliberately
|
|
32
|
+
* sees only yours.
|
|
33
|
+
*/
|
|
34
|
+
export default defineConfig({
|
|
35
|
+
dialect: "postgresql",
|
|
36
|
+
schema: ["./lib/db/schema.ts"],
|
|
37
|
+
out: "./drizzle",
|
|
38
|
+
migrations: { table: "__app_migrations", schema: "drizzle" },
|
|
39
|
+
// The framework's columns are snake_case in Postgres and camelCase in
|
|
40
|
+
// TypeScript. Keep the same convention so joins read naturally.
|
|
41
|
+
casing: "snake_case",
|
|
42
|
+
dbCredentials: {
|
|
43
|
+
url: process.env.DATABASE_URL!,
|
|
44
|
+
},
|
|
45
|
+
});
|
|
@@ -1,6 +1,18 @@
|
|
|
1
|
+
# ============================================
|
|
1
2
|
# Required — the app will not boot without these.
|
|
3
|
+
# ============================================
|
|
4
|
+
|
|
5
|
+
# Postgres with the pgvector extension (Neon, Supabase, RDS, or local).
|
|
2
6
|
DATABASE_URL=
|
|
7
|
+
# Driver is chosen from the URL (Neon hosts get the WebSocket driver,
|
|
8
|
+
# everything else node-postgres). Force it with pg | neon-serverless.
|
|
9
|
+
# INTELLIGO_DB_DRIVER=
|
|
10
|
+
|
|
11
|
+
# At least 32 characters. Generate with: openssl rand -base64 32
|
|
3
12
|
BETTER_AUTH_SECRET=
|
|
13
|
+
|
|
14
|
+
# Where users reach the app. Auth callbacks, email links and redirects
|
|
15
|
+
# are built from it, so production needs the public https URL.
|
|
4
16
|
NEXT_PUBLIC_APP_URL=http://localhost:3000
|
|
5
17
|
|
|
6
18
|
# Which product's plans the billing engine bills against. Your
|
|
@@ -8,6 +20,58 @@ NEXT_PUBLIC_APP_URL=http://localhost:3000
|
|
|
8
20
|
# variable is here so CLI tooling can check it without booting the app.
|
|
9
21
|
INTELLIGO_BILLING_PRODUCT=__APP_SLUG__
|
|
10
22
|
|
|
23
|
+
# ============================================
|
|
24
|
+
# Optional — everything works locally without these.
|
|
25
|
+
# ============================================
|
|
26
|
+
|
|
27
|
+
# Sign in with Google or GitHub. A provider's button appears once both
|
|
28
|
+
# of its values are set; the callback URL to register with the provider
|
|
29
|
+
# is NEXT_PUBLIC_APP_URL + /api/auth/callback/google (or /github).
|
|
30
|
+
# GOOGLE_CLIENT_ID=
|
|
31
|
+
# GOOGLE_CLIENT_SECRET=
|
|
32
|
+
# GITHUB_CLIENT_ID=
|
|
33
|
+
# GITHUB_CLIENT_SECRET=
|
|
34
|
+
|
|
35
|
+
# Email. Without a provider, emails (verification, invitations, reset
|
|
36
|
+
# links) are printed to the server console, and sign-ups are not held
|
|
37
|
+
# for email verification.
|
|
38
|
+
# RESEND_API_KEY=
|
|
39
|
+
# The sender of every email, on a domain verified with Resend. Required
|
|
40
|
+
# with RESEND_API_KEY: there is no built-in sender, so sends fail without
|
|
41
|
+
# it. Loops ignores it and takes the sender from each template.
|
|
42
|
+
# EMAIL_FROM=Acme <noreply@example.com>
|
|
43
|
+
# The product's name in every email's heading and footer; defaults to
|
|
44
|
+
# the display name in EMAIL_FROM. SUPPORT_EMAIL is the address the
|
|
45
|
+
# footer offers for replies; without it the footer offers none.
|
|
46
|
+
# APP_NAME=Acme
|
|
47
|
+
# SUPPORT_EMAIL=support@example.com
|
|
48
|
+
# Loops sends by template id instead of HTML: map each template with
|
|
49
|
+
# LOOPS_TRANSACTIONAL_ID_<KEY>, e.g. LOOPS_TRANSACTIONAL_ID_VERIFY_EMAIL.
|
|
50
|
+
# LOOPS_API_KEY=
|
|
51
|
+
# With both keys set Resend wins; force one with resend | loops | console.
|
|
52
|
+
# EMAIL_PROVIDER=
|
|
53
|
+
|
|
54
|
+
# Stripe. Billing pages say "not configured" until these are set; the
|
|
55
|
+
# webhook at /api/webhooks/stripe verifies with the secret.
|
|
56
|
+
# STRIPE_SECRET_KEY=
|
|
57
|
+
# STRIPE_WEBHOOK_SECRET=
|
|
58
|
+
|
|
59
|
+
# Which registered payment provider serves payments outside Stripe
|
|
60
|
+
# (registerPaymentProvider in the composition root). Defaults to the
|
|
61
|
+
# in-memory mock, which production refuses.
|
|
62
|
+
# PAYMENT_MODE=
|
|
63
|
+
|
|
64
|
+
# AI providers. Chat runs on a built-in stub model until lib/chat-model.ts
|
|
65
|
+
# names a real one. Set only the key of the provider that model belongs
|
|
66
|
+
# to — the provider's SDK reads it, and the framework checks none of them.
|
|
67
|
+
# OPENAI_API_KEY=
|
|
68
|
+
# ANTHROPIC_API_KEY=
|
|
69
|
+
# GOOGLE_GENERATIVE_AI_API_KEY=
|
|
70
|
+
|
|
71
|
+
# Bearer token your scheduler sends to /api/cron/maintenance
|
|
72
|
+
# (`intelligo add maintenance`). At least 32 characters.
|
|
73
|
+
# CRON_SECRET=
|
|
74
|
+
|
|
11
75
|
# Comma-separated emails allowed to reach the Intelligo admin console.
|
|
12
76
|
# Closed by default: with no value, nobody is a platform admin.
|
|
13
|
-
PLATFORM_ADMIN_EMAILS=
|
|
77
|
+
# PLATFORM_ADMIN_EMAILS=
|
|
@@ -1,263 +1,42 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Design tokens: shadcn base-nova plus status, layers and motion — what
|
|
3
|
+
* `shadcn add https://intelligo.dev/r/intelligo.json` writes. Re-value
|
|
4
|
+
* the tokens to re-theme every installed page; keep the names, registry
|
|
5
|
+
* items depend on them.
|
|
6
|
+
*/
|
|
1
7
|
@import "tailwindcss";
|
|
2
8
|
@import "tw-animate-css";
|
|
9
|
+
@import "shadcn/tailwind.css";
|
|
3
10
|
|
|
4
|
-
|
|
5
|
-
@custom-variant dark (&:is(.dark, .dark *));
|
|
6
|
-
|
|
7
|
-
/* ============================================================
|
|
8
|
-
Design tokens.
|
|
9
|
-
This file is yours — Intelligo generated it once and will not
|
|
10
|
-
overwrite it. These tokens are a starting point, not a dependency:
|
|
11
|
-
nothing in your app imports them from an Intelligo package, so
|
|
12
|
-
edit them freely. Registry items you install with `shadcn add`
|
|
13
|
-
assume the shadcn new-york theme below; the ones under "Design
|
|
14
|
-
tokens" are optional extras used by some Intelligo-authored
|
|
15
|
-
registry items (status colors, agent identity colors) — delete
|
|
16
|
-
what you don't use.
|
|
17
|
-
============================================================ */
|
|
18
|
-
|
|
19
|
-
/* ---- Light mode tokens ---- */
|
|
20
|
-
:root {
|
|
21
|
-
/* Status: success */
|
|
22
|
-
--status-success: hsl(142 76% 36%);
|
|
23
|
-
--status-success-light: hsl(143 85% 96%);
|
|
24
|
-
--status-success-dark: hsl(144 61% 20%);
|
|
25
|
-
|
|
26
|
-
/* Status: error */
|
|
27
|
-
--status-error: hsl(0 84% 60%);
|
|
28
|
-
--status-error-light: hsl(0 86% 97%);
|
|
29
|
-
--status-error-dark: hsl(0 63% 31%);
|
|
30
|
-
|
|
31
|
-
/* Status: warning */
|
|
32
|
-
--status-warning: hsl(38 92% 50%);
|
|
33
|
-
--status-warning-light: hsl(48 96% 89%);
|
|
34
|
-
--status-warning-dark: hsl(32 95% 44%);
|
|
35
|
-
|
|
36
|
-
/* Status: info */
|
|
37
|
-
--status-info: hsl(217 91% 60%);
|
|
38
|
-
--status-info-light: hsl(214 95% 93%);
|
|
39
|
-
--status-info-dark: hsl(224 76% 48%);
|
|
40
|
-
|
|
41
|
-
/* Brand — Monochrome */
|
|
42
|
-
--brand-primary: #18181B;
|
|
43
|
-
--brand-primary-foreground: #ffffff;
|
|
44
|
-
--brand-accent: #27272A;
|
|
45
|
-
--brand-accent-end: #3F3F46;
|
|
46
|
-
|
|
47
|
-
/* Spacing (semantic aliases) */
|
|
48
|
-
--space-xs: 0.25rem;
|
|
49
|
-
--space-sm: 0.5rem;
|
|
50
|
-
--space-md: 1rem;
|
|
51
|
-
--space-lg: 1.5rem;
|
|
52
|
-
--space-xl: 2rem;
|
|
53
|
-
--space-2xl: 3rem;
|
|
54
|
-
|
|
55
|
-
/* Shadows */
|
|
56
|
-
--shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
|
|
57
|
-
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
|
|
58
|
-
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
|
|
59
|
-
--shadow-glow-primary: 0 0 40px rgba(255, 255, 255, 0.1);
|
|
60
|
-
|
|
61
|
-
/* Z-index scale */
|
|
62
|
-
--z-dropdown: 50;
|
|
63
|
-
--z-sticky: 100;
|
|
64
|
-
--z-modal: 200;
|
|
65
|
-
--z-popover: 250;
|
|
66
|
-
--z-toast: 300;
|
|
67
|
-
|
|
68
|
-
/* Typography */
|
|
69
|
-
--font-size-xs: 0.75rem; /* 12px */
|
|
70
|
-
--font-size-sm: 0.875rem; /* 14px */
|
|
71
|
-
--font-size-base: 1rem; /* 16px */
|
|
72
|
-
--font-size-lg: 1.125rem; /* 18px */
|
|
73
|
-
--font-size-xl: 1.25rem; /* 20px */
|
|
74
|
-
--font-size-2xl: 1.5rem; /* 24px */
|
|
75
|
-
--font-size-3xl: 1.875rem; /* 30px */
|
|
76
|
-
|
|
77
|
-
--line-height-tight: 1.25;
|
|
78
|
-
--line-height-snug: 1.375;
|
|
79
|
-
--line-height-normal: 1.5;
|
|
80
|
-
--line-height-relaxed: 1.625;
|
|
81
|
-
|
|
82
|
-
--letter-spacing-tight: -0.025em;
|
|
83
|
-
--letter-spacing-normal: 0em;
|
|
84
|
-
--letter-spacing-wide: 0.025em;
|
|
85
|
-
|
|
86
|
-
/* Agent identity colors */
|
|
87
|
-
--agent-career: #7c3aed;
|
|
88
|
-
--agent-university: #2563eb;
|
|
89
|
-
--agent-scholarship: #d97706;
|
|
90
|
-
--agent-student-life: #059669;
|
|
91
|
-
--agent-ai-futures: #e11d48;
|
|
92
|
-
--agent-parent: #92400e;
|
|
93
|
-
|
|
94
|
-
/* Weather (decorative/thematic) */
|
|
95
|
-
--weather-day-start: hsl(200 95% 65%); /* sky-400 equivalent */
|
|
96
|
-
--weather-day-mid: hsl(217 91% 60%); /* blue-500 equivalent */
|
|
97
|
-
--weather-day-end: hsl(221 83% 53%); /* blue-600 equivalent */
|
|
98
|
-
--weather-night-start: hsl(244 47% 20%); /* indigo-900 equivalent */
|
|
99
|
-
--weather-night-mid: hsl(269 67% 18%); /* purple-900 equivalent */
|
|
100
|
-
--weather-night-end: hsl(222 47% 11%); /* slate-900 equivalent */
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/* ---- Dark mode overrides ---- */
|
|
104
|
-
.dark {
|
|
105
|
-
/* Status: success — lighter text on dark backgrounds */
|
|
106
|
-
--status-success: hsl(142 69% 58%);
|
|
107
|
-
--status-success-light: hsl(143 50% 15%);
|
|
108
|
-
--status-success-dark: hsl(144 76% 80%);
|
|
109
|
-
|
|
110
|
-
/* Status: error */
|
|
111
|
-
--status-error: hsl(0 91% 71%);
|
|
112
|
-
--status-error-light: hsl(0 50% 15%);
|
|
113
|
-
--status-error-dark: hsl(0 84% 85%);
|
|
114
|
-
|
|
115
|
-
/* Status: warning */
|
|
116
|
-
--status-warning: hsl(38 95% 64%);
|
|
117
|
-
--status-warning-light: hsl(38 60% 15%);
|
|
118
|
-
--status-warning-dark: hsl(38 92% 80%);
|
|
11
|
+
@custom-variant dark (&:is(.dark *));
|
|
119
12
|
|
|
120
|
-
/* Status: info */
|
|
121
|
-
--status-info: hsl(217 91% 70%);
|
|
122
|
-
--status-info-light: hsl(217 60% 15%);
|
|
123
|
-
--status-info-dark: hsl(217 91% 85%);
|
|
124
|
-
|
|
125
|
-
/* Brand (dark) — Monochrome */
|
|
126
|
-
--brand-primary: #E8E8E8;
|
|
127
|
-
--brand-primary-foreground: #121212;
|
|
128
|
-
--brand-accent: #888888;
|
|
129
|
-
--brand-accent-end: #555555;
|
|
130
|
-
|
|
131
|
-
/* Weather — same in dark mode (self-contained card) */
|
|
132
|
-
--weather-day-start: hsl(200 95% 65%);
|
|
133
|
-
--weather-day-mid: hsl(217 91% 60%);
|
|
134
|
-
--weather-day-end: hsl(221 83% 53%);
|
|
135
|
-
--weather-night-start: hsl(244 47% 20%);
|
|
136
|
-
--weather-night-mid: hsl(269 67% 18%);
|
|
137
|
-
--weather-night-end: hsl(222 47% 11%);
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/* ============================================================
|
|
141
|
-
shadcn new-york theme — style: new-york, baseColor: neutral,
|
|
142
|
-
cssVariables: true (components.json). Standard shadcn palette;
|
|
143
|
-
registry items you install assume this default theme, so change
|
|
144
|
-
it after things are working, not before.
|
|
145
|
-
============================================================ */
|
|
146
|
-
|
|
147
|
-
:root {
|
|
148
|
-
--radius: 0.625rem;
|
|
149
|
-
--background: oklch(1 0 0);
|
|
150
|
-
--foreground: oklch(0.145 0 0);
|
|
151
|
-
--card: oklch(1 0 0);
|
|
152
|
-
--card-foreground: oklch(0.145 0 0);
|
|
153
|
-
--popover: oklch(1 0 0);
|
|
154
|
-
--popover-foreground: oklch(0.145 0 0);
|
|
155
|
-
--primary: oklch(0.205 0 0);
|
|
156
|
-
--primary-foreground: oklch(0.985 0 0);
|
|
157
|
-
--secondary: oklch(0.97 0 0);
|
|
158
|
-
--secondary-foreground: oklch(0.205 0 0);
|
|
159
|
-
--muted: oklch(0.97 0 0);
|
|
160
|
-
--muted-foreground: oklch(0.556 0 0);
|
|
161
|
-
--accent: oklch(0.97 0 0);
|
|
162
|
-
--accent-foreground: oklch(0.205 0 0);
|
|
163
|
-
--destructive: oklch(0.577 0.245 27.325);
|
|
164
|
-
--destructive-foreground: oklch(0.985 0 0);
|
|
165
|
-
--border: oklch(0.922 0 0);
|
|
166
|
-
--input: oklch(0.922 0 0);
|
|
167
|
-
--ring: oklch(0.708 0 0);
|
|
168
|
-
--chart-1: oklch(0.646 0.222 41.116);
|
|
169
|
-
--chart-2: oklch(0.6 0.118 184.704);
|
|
170
|
-
--chart-3: oklch(0.398 0.07 227.392);
|
|
171
|
-
--chart-4: oklch(0.828 0.189 84.429);
|
|
172
|
-
--chart-5: oklch(0.769 0.188 70.08);
|
|
173
|
-
--sidebar: oklch(0.985 0 0);
|
|
174
|
-
--sidebar-foreground: oklch(0.145 0 0);
|
|
175
|
-
--sidebar-primary: oklch(0.205 0 0);
|
|
176
|
-
--sidebar-primary-foreground: oklch(0.985 0 0);
|
|
177
|
-
--sidebar-accent: oklch(0.97 0 0);
|
|
178
|
-
--sidebar-accent-foreground: oklch(0.205 0 0);
|
|
179
|
-
--sidebar-border: oklch(0.922 0 0);
|
|
180
|
-
--sidebar-ring: oklch(0.708 0 0);
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
.dark {
|
|
184
|
-
--background: oklch(0.145 0 0);
|
|
185
|
-
--foreground: oklch(0.985 0 0);
|
|
186
|
-
--card: oklch(0.205 0 0);
|
|
187
|
-
--card-foreground: oklch(0.985 0 0);
|
|
188
|
-
--popover: oklch(0.205 0 0);
|
|
189
|
-
--popover-foreground: oklch(0.985 0 0);
|
|
190
|
-
--primary: oklch(0.922 0 0);
|
|
191
|
-
--primary-foreground: oklch(0.205 0 0);
|
|
192
|
-
--secondary: oklch(0.269 0 0);
|
|
193
|
-
--secondary-foreground: oklch(0.985 0 0);
|
|
194
|
-
--muted: oklch(0.269 0 0);
|
|
195
|
-
--muted-foreground: oklch(0.708 0 0);
|
|
196
|
-
--accent: oklch(0.269 0 0);
|
|
197
|
-
--accent-foreground: oklch(0.985 0 0);
|
|
198
|
-
--destructive: oklch(0.704 0.191 22.216);
|
|
199
|
-
--destructive-foreground: oklch(0.985 0 0);
|
|
200
|
-
--border: oklch(1 0 0 / 10%);
|
|
201
|
-
--input: oklch(1 0 0 / 15%);
|
|
202
|
-
--ring: oklch(0.556 0 0);
|
|
203
|
-
--chart-1: oklch(0.488 0.243 264.376);
|
|
204
|
-
--chart-2: oklch(0.696 0.17 162.48);
|
|
205
|
-
--chart-3: oklch(0.769 0.188 70.08);
|
|
206
|
-
--chart-4: oklch(0.627 0.265 303.9);
|
|
207
|
-
--chart-5: oklch(0.645 0.246 16.439);
|
|
208
|
-
--sidebar: oklch(0.205 0 0);
|
|
209
|
-
--sidebar-foreground: oklch(0.985 0 0);
|
|
210
|
-
--sidebar-primary: oklch(0.488 0.243 264.376);
|
|
211
|
-
--sidebar-primary-foreground: oklch(0.985 0 0);
|
|
212
|
-
--sidebar-accent: oklch(0.269 0 0);
|
|
213
|
-
--sidebar-accent-foreground: oklch(0.985 0 0);
|
|
214
|
-
--sidebar-border: oklch(1 0 0 / 10%);
|
|
215
|
-
--sidebar-ring: oklch(0.556 0 0);
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
/* define theme — maps CSS variables to Tailwind utilities */
|
|
219
13
|
@theme inline {
|
|
220
|
-
--font-sans: var(--font-sans
|
|
221
|
-
|
|
222
|
-
--
|
|
223
|
-
--radius-md: calc(var(--radius) - 2px);
|
|
224
|
-
--radius-lg: var(--radius);
|
|
225
|
-
--radius-xl: calc(var(--radius) + 4px);
|
|
226
|
-
|
|
14
|
+
--font-sans: var(--font-sans);
|
|
15
|
+
--font-mono: ui-monospace, "SFMono-Regular", Menlo, monospace;
|
|
16
|
+
--font-heading: var(--font-sans);
|
|
227
17
|
--color-background: var(--background);
|
|
228
18
|
--color-foreground: var(--foreground);
|
|
229
|
-
|
|
230
19
|
--color-card: var(--card);
|
|
231
20
|
--color-card-foreground: var(--card-foreground);
|
|
232
|
-
|
|
233
21
|
--color-popover: var(--popover);
|
|
234
22
|
--color-popover-foreground: var(--popover-foreground);
|
|
235
|
-
|
|
236
23
|
--color-primary: var(--primary);
|
|
237
24
|
--color-primary-foreground: var(--primary-foreground);
|
|
238
|
-
|
|
239
25
|
--color-secondary: var(--secondary);
|
|
240
26
|
--color-secondary-foreground: var(--secondary-foreground);
|
|
241
|
-
|
|
242
27
|
--color-muted: var(--muted);
|
|
243
28
|
--color-muted-foreground: var(--muted-foreground);
|
|
244
|
-
|
|
245
29
|
--color-accent: var(--accent);
|
|
246
30
|
--color-accent-foreground: var(--accent-foreground);
|
|
247
|
-
|
|
248
31
|
--color-destructive: var(--destructive);
|
|
249
|
-
--color-destructive-foreground: var(--destructive-foreground);
|
|
250
|
-
|
|
251
32
|
--color-border: var(--border);
|
|
252
33
|
--color-input: var(--input);
|
|
253
34
|
--color-ring: var(--ring);
|
|
254
|
-
|
|
255
35
|
--color-chart-1: var(--chart-1);
|
|
256
36
|
--color-chart-2: var(--chart-2);
|
|
257
37
|
--color-chart-3: var(--chart-3);
|
|
258
38
|
--color-chart-4: var(--chart-4);
|
|
259
39
|
--color-chart-5: var(--chart-5);
|
|
260
|
-
|
|
261
40
|
--color-sidebar: var(--sidebar);
|
|
262
41
|
--color-sidebar-foreground: var(--sidebar-foreground);
|
|
263
42
|
--color-sidebar-primary: var(--sidebar-primary);
|
|
@@ -266,64 +45,176 @@
|
|
|
266
45
|
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
|
267
46
|
--color-sidebar-border: var(--sidebar-border);
|
|
268
47
|
--color-sidebar-ring: var(--sidebar-ring);
|
|
48
|
+
--color-destructive-foreground: var(--destructive-foreground);
|
|
49
|
+
--color-success: var(--success);
|
|
50
|
+
--color-success-foreground: var(--success-foreground);
|
|
51
|
+
--color-warning: var(--warning);
|
|
52
|
+
--color-warning-foreground: var(--warning-foreground);
|
|
53
|
+
--color-info: var(--info);
|
|
54
|
+
--color-info-foreground: var(--info-foreground);
|
|
55
|
+
--ease-standard: cubic-bezier(0.16, 1, 0.3, 1);
|
|
56
|
+
--ease-emphasized: cubic-bezier(0.32, 0.72, 0, 1);
|
|
57
|
+
--ease-exit: cubic-bezier(0.77, 0, 0.175, 1);
|
|
58
|
+
--radius-sm: calc(var(--radius) * 0.6);
|
|
59
|
+
--radius-md: calc(var(--radius) * 0.8);
|
|
60
|
+
--radius-lg: var(--radius);
|
|
61
|
+
--radius-xl: calc(var(--radius) * 1.4);
|
|
62
|
+
--radius-2xl: calc(var(--radius) * 1.8);
|
|
63
|
+
--radius-3xl: calc(var(--radius) * 2.2);
|
|
64
|
+
--radius-4xl: calc(var(--radius) * 2.6);
|
|
65
|
+
}
|
|
269
66
|
|
|
270
|
-
|
|
271
|
-
--
|
|
272
|
-
--
|
|
273
|
-
--
|
|
274
|
-
--
|
|
275
|
-
--
|
|
276
|
-
--
|
|
277
|
-
--
|
|
278
|
-
--
|
|
279
|
-
--
|
|
280
|
-
--
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
--
|
|
284
|
-
--
|
|
285
|
-
--
|
|
286
|
-
--
|
|
287
|
-
--
|
|
288
|
-
--
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
--
|
|
292
|
-
--
|
|
293
|
-
--
|
|
294
|
-
--
|
|
295
|
-
--
|
|
296
|
-
--
|
|
297
|
-
--
|
|
298
|
-
--
|
|
299
|
-
--
|
|
300
|
-
--
|
|
301
|
-
--
|
|
302
|
-
--
|
|
303
|
-
--
|
|
304
|
-
--
|
|
67
|
+
:root {
|
|
68
|
+
--font-sans: "Geist", "Geist Fallback", -apple-system, "Segoe UI", sans-serif;
|
|
69
|
+
--background: oklch(0.99 0 0);
|
|
70
|
+
--foreground: oklch(0.15 0 0);
|
|
71
|
+
--card: oklch(0.97 0 0);
|
|
72
|
+
--card-foreground: oklch(0.15 0 0);
|
|
73
|
+
--popover: oklch(0.99 0 0);
|
|
74
|
+
--popover-foreground: oklch(0.15 0 0);
|
|
75
|
+
--primary: oklch(0.15 0 0);
|
|
76
|
+
--primary-foreground: oklch(0.99 0 0);
|
|
77
|
+
--secondary: oklch(0.955 0 0);
|
|
78
|
+
--secondary-foreground: oklch(0.15 0 0);
|
|
79
|
+
--muted: oklch(0.97 0 0);
|
|
80
|
+
--muted-foreground: oklch(0.5 0 0);
|
|
81
|
+
--accent: oklch(0.95 0 0);
|
|
82
|
+
--accent-foreground: oklch(0.15 0 0);
|
|
83
|
+
--destructive: oklch(0.52 0.2 25);
|
|
84
|
+
--border: oklch(0.15 0 0 / 8%);
|
|
85
|
+
--input: oklch(0.15 0 0 / 14%);
|
|
86
|
+
--ring: oklch(0.55 0 0);
|
|
87
|
+
--chart-1: oklch(0.87 0 0);
|
|
88
|
+
--chart-2: oklch(0.556 0 0);
|
|
89
|
+
--chart-3: oklch(0.439 0 0);
|
|
90
|
+
--chart-4: oklch(0.371 0 0);
|
|
91
|
+
--chart-5: oklch(0.269 0 0);
|
|
92
|
+
--radius: 0.5rem;
|
|
93
|
+
--sidebar: oklch(0.975 0 0);
|
|
94
|
+
--sidebar-foreground: oklch(0.15 0 0);
|
|
95
|
+
--sidebar-primary: oklch(0.15 0 0);
|
|
96
|
+
--sidebar-primary-foreground: oklch(0.99 0 0);
|
|
97
|
+
--sidebar-accent: oklch(0.94 0 0);
|
|
98
|
+
--sidebar-accent-foreground: oklch(0.15 0 0);
|
|
99
|
+
--sidebar-border: oklch(0.15 0 0 / 8%);
|
|
100
|
+
--sidebar-ring: oklch(0.55 0 0);
|
|
101
|
+
--destructive-foreground: oklch(0.99 0 0);
|
|
102
|
+
--success: oklch(0.49 0.12 155);
|
|
103
|
+
--success-foreground: oklch(0.99 0 0);
|
|
104
|
+
--warning: oklch(0.5 0.105 75);
|
|
105
|
+
--warning-foreground: oklch(0.99 0 0);
|
|
106
|
+
--info: oklch(0.5 0.135 245);
|
|
107
|
+
--info-foreground: oklch(0.99 0 0);
|
|
305
108
|
}
|
|
306
109
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
110
|
+
.dark {
|
|
111
|
+
--background: oklch(0.196 0 0);
|
|
112
|
+
--foreground: oklch(0.96 0 0);
|
|
113
|
+
--card: oklch(0.227 0 0);
|
|
114
|
+
--card-foreground: oklch(0.96 0 0);
|
|
115
|
+
--popover: oklch(0.227 0 0);
|
|
116
|
+
--popover-foreground: oklch(0.96 0 0);
|
|
117
|
+
--primary: oklch(0.96 0 0);
|
|
118
|
+
--primary-foreground: oklch(0.196 0 0);
|
|
119
|
+
--secondary: oklch(0.27 0 0);
|
|
120
|
+
--secondary-foreground: oklch(0.96 0 0);
|
|
121
|
+
--muted: oklch(0.227 0 0);
|
|
122
|
+
--muted-foreground: oklch(0.68 0 0);
|
|
123
|
+
--accent: oklch(0.28 0 0);
|
|
124
|
+
--accent-foreground: oklch(0.96 0 0);
|
|
125
|
+
--destructive: oklch(0.7 0.18 25);
|
|
126
|
+
--border: oklch(1 0 0 / 7%);
|
|
127
|
+
--input: oklch(1 0 0 / 12%);
|
|
128
|
+
--ring: oklch(0.58 0 0);
|
|
129
|
+
--chart-1: oklch(0.87 0 0);
|
|
130
|
+
--chart-2: oklch(0.556 0 0);
|
|
131
|
+
--chart-3: oklch(0.439 0 0);
|
|
132
|
+
--chart-4: oklch(0.371 0 0);
|
|
133
|
+
--chart-5: oklch(0.269 0 0);
|
|
134
|
+
--sidebar: oklch(0.175 0 0);
|
|
135
|
+
--sidebar-foreground: oklch(0.96 0 0);
|
|
136
|
+
--sidebar-primary: oklch(0.96 0 0);
|
|
137
|
+
--sidebar-primary-foreground: oklch(0.196 0 0);
|
|
138
|
+
--sidebar-accent: oklch(0.26 0 0);
|
|
139
|
+
--sidebar-accent-foreground: oklch(0.96 0 0);
|
|
140
|
+
--sidebar-border: oklch(1 0 0 / 7%);
|
|
141
|
+
--sidebar-ring: oklch(0.58 0 0);
|
|
142
|
+
--destructive-foreground: oklch(0.196 0 0);
|
|
143
|
+
--success: oklch(0.72 0.16 155);
|
|
144
|
+
--success-foreground: oklch(0.196 0 0);
|
|
145
|
+
--warning: oklch(0.78 0.15 75);
|
|
146
|
+
--warning-foreground: oklch(0.196 0 0);
|
|
147
|
+
--info: oklch(0.72 0.13 245);
|
|
148
|
+
--info-foreground: oklch(0.196 0 0);
|
|
149
|
+
}
|
|
311
150
|
|
|
312
|
-
If we ever want to remove these styles, we need to add an explicit border
|
|
313
|
-
color utility to any element that depends on these defaults.
|
|
314
|
-
*/
|
|
315
151
|
@layer base {
|
|
316
|
-
*,
|
|
317
|
-
::after,
|
|
318
|
-
::before,
|
|
319
|
-
::backdrop,
|
|
320
|
-
::file-selector-button {
|
|
321
|
-
border-color: var(--color-gray-200, currentcolor);
|
|
322
|
-
}
|
|
323
152
|
* {
|
|
324
153
|
@apply border-border outline-ring/50;
|
|
325
154
|
}
|
|
326
155
|
body {
|
|
327
156
|
@apply bg-background text-foreground;
|
|
328
157
|
}
|
|
158
|
+
html {
|
|
159
|
+
@apply font-sans;
|
|
160
|
+
}
|
|
161
|
+
:root {
|
|
162
|
+
--z-sticky: 10;
|
|
163
|
+
--z-dropdown: 20;
|
|
164
|
+
--z-overlay: 40;
|
|
165
|
+
--z-modal: 50;
|
|
166
|
+
--z-popover: 60;
|
|
167
|
+
--z-toast: 70;
|
|
168
|
+
--duration-fast: 120ms;
|
|
169
|
+
--duration-normal: 200ms;
|
|
170
|
+
--duration-slow: 320ms;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
@utility z-sticky {
|
|
175
|
+
z-index: var(--z-sticky);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
@utility z-dropdown {
|
|
179
|
+
z-index: var(--z-dropdown);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
@utility z-overlay {
|
|
183
|
+
z-index: var(--z-overlay);
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
@utility z-modal {
|
|
187
|
+
z-index: var(--z-modal);
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
@utility z-popover {
|
|
191
|
+
z-index: var(--z-popover);
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
@utility z-toast {
|
|
195
|
+
z-index: var(--z-toast);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
@utility duration-fast {
|
|
199
|
+
transition-duration: var(--duration-fast);
|
|
200
|
+
animation-duration: var(--duration-fast);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
@utility duration-normal {
|
|
204
|
+
transition-duration: var(--duration-normal);
|
|
205
|
+
animation-duration: var(--duration-normal);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
@utility duration-slow {
|
|
209
|
+
transition-duration: var(--duration-slow);
|
|
210
|
+
animation-duration: var(--duration-slow);
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
@media (prefers-reduced-motion: reduce) {
|
|
214
|
+
*, ::before, ::after {
|
|
215
|
+
animation-duration: 0.01ms !important;
|
|
216
|
+
animation-iteration-count: 1 !important;
|
|
217
|
+
transition-duration: 0.01ms !important;
|
|
218
|
+
scroll-behavior: auto !important;
|
|
219
|
+
}
|
|
329
220
|
}
|