@withmata/blueprints 0.3.4 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/skills/audit/SKILL.md +4 -4
- package/.claude/skills/blueprint-catalog/SKILL.md +17 -7
- package/.claude/skills/copywrite/SKILL.md +187 -0
- package/.claude/skills/copywrite-landing/SKILL.md +489 -0
- package/.claude/skills/design-system/SKILL.md +970 -0
- package/.claude/skills/new-project/SKILL.md +168 -112
- package/.claude/skills/scaffold-auth/SKILL.md +9 -9
- package/.claude/skills/scaffold-db/SKILL.md +14 -14
- package/.claude/skills/scaffold-env/SKILL.md +4 -4
- package/.claude/skills/scaffold-foundation/SKILL.md +15 -15
- package/.claude/skills/scaffold-tailwind/SKILL.md +17 -3
- package/.claude/skills/scaffold-ui/SKILL.md +155 -36
- package/ENGINEERING.md +2 -2
- package/blueprints/discovery/design-system/BLUEPRINT.md +1479 -0
- package/blueprints/discovery/marketing-copywriting/BLUEPRINT.md +664 -0
- package/blueprints/features/auth-better-auth/BLUEPRINT.md +20 -22
- package/blueprints/features/db-drizzle-postgres/BLUEPRINT.md +12 -12
- package/blueprints/features/db-drizzle-postgres/files/db/src/example-entity.ts +1 -1
- package/blueprints/features/db-drizzle-postgres/files/db/src/scripts/seed.ts +1 -1
- package/blueprints/features/env-t3/BLUEPRINT.md +1 -1
- package/blueprints/features/tailwind-v4/BLUEPRINT.md +9 -2
- package/blueprints/features/tailwind-v4/files/tailwind-config/shared-styles.css +80 -1
- package/blueprints/features/ui-shared-components/BLUEPRINT.md +411 -78
- package/blueprints/features/ui-shared-components/files/ui/components/ui/alert-dialog.tsx +192 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/avatar.tsx +71 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/badge.tsx +52 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/breadcrumb.tsx +122 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/button.tsx +56 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/card-select.tsx +72 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/card.tsx +100 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/collapsible.tsx +34 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/combobox.tsx +301 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/dropdown-menu.tsx +264 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/empty-state.tsx +43 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/entity-select.tsx +110 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/field.tsx +237 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/form-field.tsx +217 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/input-group.tsx +161 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/input.tsx +20 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/label.tsx +20 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/org-switcher.tsx +114 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/page-header.tsx +45 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/pagination.tsx +52 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/pill-select.tsx +151 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/popover.tsx +41 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/search-input.tsx +49 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/select.tsx +205 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/selected-entity-card.tsx +47 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/separator.tsx +25 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/sidebar.tsx +389 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/status-filter.tsx +43 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/tag-input.tsx +131 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/textarea.tsx +18 -0
- package/blueprints/features/ui-shared-components/files/ui/components/ui/user-menu.tsx +149 -0
- package/blueprints/features/ui-shared-components/files/ui/components.json +11 -8
- package/blueprints/features/ui-shared-components/files/ui/package.json +20 -11
- package/blueprints/foundation/monorepo-turbo/BLUEPRINT.md +19 -20
- package/blueprints/foundation/monorepo-turbo/files/root/package.json +1 -1
- package/dist/index.js +241 -100
- package/package.json +1 -1
- package/blueprints/features/tailwind-v4/files/tailwind-config/package.json +0 -20
- package/blueprints/foundation/monorepo-turbo/files/root/pnpm-workspace.yaml +0 -5
|
@@ -17,7 +17,7 @@ Complete.
|
|
|
17
17
|
| Blueprint | Type | Why |
|
|
18
18
|
|-----------|------|-----|
|
|
19
19
|
| `features/db-drizzle-postgres` | required | Auth creates schema files inside the database layer following the schema-group pattern (per-group drizzle.config.ts, barrel exports, explicit schema lists). Without it, auth must create a minimal db structure that lacks the full patterns. |
|
|
20
|
-
| `foundation/monorepo-turbo` | recommended | Provides monorepo workspace structure (packages/, apis/, turbo tasks,
|
|
20
|
+
| `foundation/monorepo-turbo` | recommended | Provides monorepo workspace structure (packages/, apis/, turbo tasks, bun workspaces). Works without it — adapts to single-repo projects automatically. |
|
|
21
21
|
|
|
22
22
|
### If `db-drizzle-postgres` is not installed
|
|
23
23
|
|
|
@@ -210,7 +210,7 @@ In production, this proxies `/api/*` through the frontend domain so cookies work
|
|
|
210
210
|
"scripts": {
|
|
211
211
|
"auth:generate": "turbo run auth:generate --filter={{SCOPE}}/server --no-cache",
|
|
212
212
|
"auth:migrate": "turbo run auth:migrate --filter={{SCOPE}}/db --no-cache",
|
|
213
|
-
"auth:setup": "
|
|
213
|
+
"auth:setup": "bun run auth:generate && bun run auth:migrate"
|
|
214
214
|
}
|
|
215
215
|
}
|
|
216
216
|
```
|
|
@@ -226,15 +226,13 @@ In production, this proxies `/api/*` through the frontend domain so cookies work
|
|
|
226
226
|
}
|
|
227
227
|
```
|
|
228
228
|
|
|
229
|
-
###
|
|
229
|
+
### Workspace Configuration
|
|
230
230
|
|
|
231
|
-
Ensure `apis/*` is included (for standalone server mode)
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
- "packages/*"
|
|
237
|
-
- "config/*"
|
|
231
|
+
Ensure `apis/*` is included in the workspace configuration (for standalone server mode). In the root `package.json`:
|
|
232
|
+
```json
|
|
233
|
+
{
|
|
234
|
+
"workspaces": ["apps/*", "apis/*", "packages/*", "config/*"]
|
|
235
|
+
}
|
|
238
236
|
```
|
|
239
237
|
|
|
240
238
|
---
|
|
@@ -276,7 +274,7 @@ Single-repo projects typically use **Next.js API routes** directly instead of a
|
|
|
276
274
|
"scripts": {
|
|
277
275
|
"auth:generate": "npx @better-auth/cli@latest generate --config ./src/lib/auth/index.ts --output ./src/db/auth/schema.ts --yes",
|
|
278
276
|
"auth:migrate": "drizzle-kit generate --config ./drizzle/auth/drizzle.config.ts && drizzle-kit migrate --config ./drizzle/auth/drizzle.config.ts",
|
|
279
|
-
"auth:setup": "
|
|
277
|
+
"auth:setup": "bun auth:generate && bun auth:migrate"
|
|
280
278
|
}
|
|
281
279
|
}
|
|
282
280
|
```
|
|
@@ -719,26 +717,26 @@ Rules that should be added to the target project's CLAUDE.md during scaffolding.
|
|
|
719
717
|
|
|
720
718
|
| When you... | Then run... | Why |
|
|
721
719
|
|---|---|---|
|
|
722
|
-
| Modify the Better Auth server config (`auth.ts`) — plugins, providers, fields, session settings | `
|
|
723
|
-
| Add or remove a social provider | `
|
|
724
|
-
| Change organization plugin settings (roles, limits, membership config) | `
|
|
725
|
-
| Edit `auth-schema.ts` manually | `
|
|
726
|
-
| Update the `better-auth` package version | `
|
|
720
|
+
| Modify the Better Auth server config (`auth.ts`) — plugins, providers, fields, session settings | `bun auth:generate` then `bun auth:migrate` | Config changes can alter the database schema |
|
|
721
|
+
| Add or remove a social provider | `bun auth:generate` | Provider changes affect the account schema |
|
|
722
|
+
| Change organization plugin settings (roles, limits, membership config) | `bun auth:generate` then `bun auth:migrate` | Org config changes affect member/invitation tables |
|
|
723
|
+
| Edit `auth-schema.ts` manually | `bun auth:migrate` | Manual schema edits need migrations applied |
|
|
724
|
+
| Update the `better-auth` package version | `bun auth:generate` then check for schema diff, migrate if needed | New versions may include schema changes |
|
|
727
725
|
|
|
728
726
|
### Environment Hooks
|
|
729
727
|
|
|
730
728
|
| When you... | Then run... | Why |
|
|
731
729
|
|---|---|---|
|
|
732
|
-
| Add a new env var to server `env.ts` | Add it to all relevant `.env` files and verify with `
|
|
730
|
+
| Add a new env var to server `env.ts` | Add it to all relevant `.env` files and verify with `bun dev` | Missing env vars crash at startup due to t3-env validation |
|
|
733
731
|
| Add a new `NEXT_PUBLIC_` env var | Add to `apps/web/.env.local` and restart dev server | Next.js requires restart to pick up new env vars |
|
|
734
732
|
| Change `BETTER_AUTH_URL` or `FRONTEND_DOMAIN` | Update CORS config and verify OAuth callback URLs still work | Mismatched URLs break OAuth flows and cookie sharing |
|
|
735
733
|
|
|
736
734
|
### Validation Checks
|
|
737
735
|
|
|
738
736
|
After any auth-related changes, verify:
|
|
739
|
-
- Dev server starts without errors: `
|
|
737
|
+
- Dev server starts without errors: `bun dev`
|
|
740
738
|
- Auth API responds: visit `{BETTER_AUTH_URL}/api/auth/ok`
|
|
741
|
-
- If schema changed: `
|
|
739
|
+
- If schema changed: `bun drizzle:studio:auth` shows expected tables
|
|
742
740
|
- If middleware changed: unauthenticated requests to protected routes redirect to `/auth`
|
|
743
741
|
- If org plugin changed: verify org creation and member invitation flows
|
|
744
742
|
|
|
@@ -747,9 +745,9 @@ After any auth-related changes, verify:
|
|
|
747
745
|
This is the version that gets injected into the target project's CLAUDE.md during scaffolding:
|
|
748
746
|
```markdown
|
|
749
747
|
### auth-better-auth maintenance
|
|
750
|
-
- After modifying Better Auth server config, plugins, or providers: run `
|
|
751
|
-
- After updating `better-auth` package: run `
|
|
752
|
-
- After adding/changing env vars: update all `.env` files and verify `
|
|
748
|
+
- After modifying Better Auth server config, plugins, or providers: run `bun auth:generate && bun auth:migrate`
|
|
749
|
+
- After updating `better-auth` package: run `bun auth:generate`, check for schema changes, migrate if needed
|
|
750
|
+
- After adding/changing env vars: update all `.env` files and verify `bun dev` starts clean
|
|
753
751
|
- After changing `BETTER_AUTH_URL` or `FRONTEND_DOMAIN`: verify CORS config and OAuth callback URLs
|
|
754
752
|
- After any auth changes: verify `{BETTER_AUTH_URL}/api/auth/ok` responds
|
|
755
753
|
- Never edit the auto-generated auth schema directly — modify the Better Auth config and regenerate
|
|
@@ -443,8 +443,8 @@ uniqueIndex("entity_slug_unique").on(table.slug),
|
|
|
443
443
|
|
|
444
444
|
14. Add `{{GROUP}}:generate`, `{{GROUP}}:migrate` tasks to `turbo.json` (both `cache: false`)
|
|
445
445
|
15. Add `db:generate`, `db:migrate`, `db:studio`, `db:seed` scripts to root `package.json` (Turbo wrappers)
|
|
446
|
-
16. Verify `packages/db` is covered by `
|
|
447
|
-
17. Run `
|
|
446
|
+
16. Verify `packages/db` is covered by the workspace configuration in root `package.json` (should be via `packages/*`)
|
|
447
|
+
17. Run `bun install` to wire workspace dependencies
|
|
448
448
|
|
|
449
449
|
### Phase 5-alt: Project Integration (single-repo)
|
|
450
450
|
|
|
@@ -457,10 +457,10 @@ uniqueIndex("entity_slug_unique").on(table.slug),
|
|
|
457
457
|
### Phase 6: Verification
|
|
458
458
|
|
|
459
459
|
18. Set `{{GROUP_UPPER}}_DATABASE_URL` in `packages/db/.env`
|
|
460
|
-
19. Run `
|
|
461
|
-
20. Run `
|
|
462
|
-
21. Run `
|
|
463
|
-
22. Run `
|
|
460
|
+
19. Run `bun db:generate` — should produce initial migration SQL
|
|
461
|
+
20. Run `bun db:migrate` — should apply migration to database
|
|
462
|
+
21. Run `bun db:studio` — should open Drizzle Studio
|
|
463
|
+
22. Run `bun db:seed` — should insert sample data (if seed included)
|
|
464
464
|
|
|
465
465
|
---
|
|
466
466
|
|
|
@@ -471,8 +471,8 @@ After initial scaffolding, add new domain entities with this checklist:
|
|
|
471
471
|
1. Create `src/{{GROUP}}/new-entity.ts` (copy the example entity pattern)
|
|
472
472
|
2. Add `export * from "./new-entity.js";` to `src/{{GROUP}}/index.ts`
|
|
473
473
|
3. Add `"./src/{{GROUP}}/new-entity.ts"` to `drizzle/{{GROUP}}/drizzle.config.ts` schema array
|
|
474
|
-
4. Run `
|
|
475
|
-
5. Run `
|
|
474
|
+
4. Run `bun {{GROUP}}:generate` to create the migration
|
|
475
|
+
5. Run `bun {{GROUP}}:migrate` to apply it
|
|
476
476
|
|
|
477
477
|
## Adding a New Schema Group
|
|
478
478
|
|
|
@@ -501,23 +501,23 @@ To add a second group (e.g., `"pipeline"`) for a separate database or logical do
|
|
|
501
501
|
| When you... | Then run... | Why |
|
|
502
502
|
|---|---|---|
|
|
503
503
|
| Add a new entity file | Add to `drizzle.config.ts` schema array AND `index.ts` barrel | Missing entries = invisible to migrations and consumers |
|
|
504
|
-
| Modify any schema file | `
|
|
504
|
+
| Modify any schema file | `bun {{GROUP}}:generate` then `bun {{GROUP}}:migrate` | Schema changes need migrations generated and applied |
|
|
505
505
|
| Add a new schema group | Follow "Adding a New Schema Group" checklist | Multiple configs + exports + scripts needed |
|
|
506
|
-
| Update drizzle-orm or drizzle-kit | `
|
|
506
|
+
| Update drizzle-orm or drizzle-kit | `bun {{GROUP}}:generate` and check for unexpected diffs | New versions may change migration format |
|
|
507
507
|
|
|
508
508
|
### Environment Hooks
|
|
509
509
|
|
|
510
510
|
| When you... | Then do... | Why |
|
|
511
511
|
|---|---|---|
|
|
512
512
|
| Add a new `DATABASE_URL` | Add to `.env`, `.env.example`, and consuming app env validation | Missing URL = crash at startup |
|
|
513
|
-
| Change `DATABASE_URL` | Verify connection with `
|
|
513
|
+
| Change `DATABASE_URL` | Verify connection with `bun drizzle:studio:{{GROUP}}` | Wrong URL = silent connection failures |
|
|
514
514
|
|
|
515
515
|
### Condensed Rules for CLAUDE.md
|
|
516
516
|
|
|
517
517
|
```markdown
|
|
518
518
|
### db-drizzle-postgres maintenance
|
|
519
519
|
- After creating a new schema file: add it to `drizzle/<group>/drizzle.config.ts` schema array AND the group's `index.ts` barrel export
|
|
520
|
-
- After any schema change: run `
|
|
520
|
+
- After any schema change: run `bun <group>:generate && bun <group>:migrate`
|
|
521
521
|
- After adding a new schema group: create drizzle config, add package.json export, add scripts (see BLUEPRINT.md "Adding a New Schema Group")
|
|
522
522
|
- After updating drizzle-orm/drizzle-kit: run generate and check migration diff for unexpected changes
|
|
523
523
|
- Never use glob patterns in drizzle.config.ts schema — always list files explicitly, excluding index.ts
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
// 3. Export $inferSelect / $inferInsert types
|
|
9
9
|
// 4. Add the file path to drizzle/{{GROUP}}/drizzle.config.ts schema array
|
|
10
10
|
// 5. Add the re-export to this group's index.ts
|
|
11
|
-
// 6. Run `
|
|
11
|
+
// 6. Run `bun {{GROUP}}:generate` then `bun {{GROUP}}:migrate`
|
|
12
12
|
// =============================================================================
|
|
13
13
|
|
|
14
14
|
import {
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// =============================================================================
|
|
4
4
|
// Populates the {{GROUP}} database with sample data for development.
|
|
5
5
|
//
|
|
6
|
-
// Usage:
|
|
6
|
+
// Usage: bun seed
|
|
7
7
|
// (runs via tsx, configured in packages/db/package.json)
|
|
8
8
|
//
|
|
9
9
|
// CONFIGURE: Replace the example inserts with your actual domain entities.
|
|
@@ -243,7 +243,7 @@ All core patterns are project-type-agnostic:
|
|
|
243
243
|
|
|
244
244
|
### Phase 4: Verification
|
|
245
245
|
|
|
246
|
-
15. Run `
|
|
246
|
+
15. Run `bun dev` (or equivalent) — env validation should run without errors
|
|
247
247
|
16. Try removing a required variable from `.env.local` — build should fail with a clear error message
|
|
248
248
|
|
|
249
249
|
---
|
|
@@ -175,6 +175,10 @@ For standalone applications without a monorepo, the tailwind config lives direct
|
|
|
175
175
|
|
|
176
176
|
## Integration Steps
|
|
177
177
|
|
|
178
|
+
### Design System Integration
|
|
179
|
+
|
|
180
|
+
If a custom design system exists at `docs/design/shared-styles.css` (created by `/design-system`), the scaffold process uses it instead of the generic template below. This means the colors, typography, shadows, and animations in the installed `shared-styles.css` will reflect your product's visual identity rather than the default shadcn palette.
|
|
181
|
+
|
|
178
182
|
### Phase 1: Upgrade Tailwind Config
|
|
179
183
|
|
|
180
184
|
**If foundation's `config/tailwind-config/` exists:**
|
|
@@ -194,12 +198,12 @@ For standalone applications without a monorepo, the tailwind config lives direct
|
|
|
194
198
|
|
|
195
199
|
### Phase 2: Dependency Installation
|
|
196
200
|
|
|
197
|
-
5. Run `
|
|
201
|
+
5. Run `bun install` to fetch new dependencies
|
|
198
202
|
6. Verify no peer dependency warnings
|
|
199
203
|
|
|
200
204
|
### Phase 3: Verification
|
|
201
205
|
|
|
202
|
-
7. Run `
|
|
206
|
+
7. Run `bun dev` — the app should start without CSS errors
|
|
203
207
|
8. Verify dark mode works: add `class="dark"` to `<html>` and confirm colors change
|
|
204
208
|
9. Verify animation classes work: try `animate-fade-in` on an element
|
|
205
209
|
|
|
@@ -236,6 +240,9 @@ For standalone applications without a monorepo, the tailwind config lives direct
|
|
|
236
240
|
- Whether to include chart tokens
|
|
237
241
|
- Whether to include scrollbar-hide
|
|
238
242
|
- Additional custom tokens can be added to `@theme inline`
|
|
243
|
+
- Shadow scale values (ambient/diffused, sharp/dramatic, or brand-tinted styles in the `@theme {}` block)
|
|
244
|
+
- Custom easing curves (`--ease-smooth`, `--ease-spring`, etc.) for animation personality
|
|
245
|
+
- Animation definitions and `@keyframes` — all defined in `@theme {}` alongside shadows and easing
|
|
239
246
|
|
|
240
247
|
## What's Opinionated
|
|
241
248
|
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
--color-background: var(--background);
|
|
14
14
|
--color-foreground: var(--foreground);
|
|
15
15
|
--font-sans: var(--font-sans);
|
|
16
|
-
--font-mono: var(--font-
|
|
16
|
+
--font-mono: var(--font-mono);
|
|
17
17
|
--color-sidebar-ring: var(--sidebar-ring);
|
|
18
18
|
--color-sidebar-border: var(--sidebar-border);
|
|
19
19
|
--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
|
|
@@ -52,6 +52,75 @@
|
|
|
52
52
|
--radius-4xl: calc(var(--radius) + 16px);
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
+
/* ==========================================================================
|
|
56
|
+
Extended theme — shadows, easing, animations
|
|
57
|
+
========================================================================== */
|
|
58
|
+
|
|
59
|
+
@theme {
|
|
60
|
+
/* Shadow scale — ambient style, neutral black */
|
|
61
|
+
--shadow-2xs: 0 1px rgb(0 0 0 / 0.03);
|
|
62
|
+
--shadow-xs: 0 1px 2px 0 rgb(0 0 0 / 0.04);
|
|
63
|
+
--shadow-sm: 0 1px 3px 0 rgb(0 0 0 / 0.06), 0 1px 2px -1px rgb(0 0 0 / 0.06);
|
|
64
|
+
--shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.07), 0 2px 4px -2px rgb(0 0 0 / 0.05);
|
|
65
|
+
--shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.07), 0 4px 6px -4px rgb(0 0 0 / 0.05);
|
|
66
|
+
--shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.07), 0 8px 10px -6px rgb(0 0 0 / 0.05);
|
|
67
|
+
--shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.15);
|
|
68
|
+
|
|
69
|
+
/* Easing curves */
|
|
70
|
+
--ease-in: cubic-bezier(0.4, 0, 1, 1);
|
|
71
|
+
--ease-out: cubic-bezier(0, 0, 0.2, 1);
|
|
72
|
+
--ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
|
|
73
|
+
--ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
74
|
+
--ease-smooth: cubic-bezier(0.25, 0.1, 0.25, 1);
|
|
75
|
+
|
|
76
|
+
/* Custom animations */
|
|
77
|
+
--animate-fade-in: fade-in 0.15s var(--ease-out);
|
|
78
|
+
--animate-fade-out: fade-out 0.1s var(--ease-in);
|
|
79
|
+
--animate-slide-up: slide-up 0.2s var(--ease-out);
|
|
80
|
+
--animate-slide-down: slide-down 0.2s var(--ease-out);
|
|
81
|
+
--animate-slide-in-from-left: slide-in-from-left 0.2s var(--ease-out);
|
|
82
|
+
--animate-slide-in-from-right: slide-in-from-right 0.2s var(--ease-out);
|
|
83
|
+
--animate-scale-in: scale-in 0.15s var(--ease-out);
|
|
84
|
+
--animate-scale-out: scale-out 0.1s var(--ease-in);
|
|
85
|
+
|
|
86
|
+
@keyframes fade-in {
|
|
87
|
+
from { opacity: 0; }
|
|
88
|
+
to { opacity: 1; }
|
|
89
|
+
}
|
|
90
|
+
@keyframes fade-out {
|
|
91
|
+
from { opacity: 1; }
|
|
92
|
+
to { opacity: 0; }
|
|
93
|
+
}
|
|
94
|
+
@keyframes slide-up {
|
|
95
|
+
from { transform: translateY(8px); opacity: 0; }
|
|
96
|
+
to { transform: translateY(0); opacity: 1; }
|
|
97
|
+
}
|
|
98
|
+
@keyframes slide-down {
|
|
99
|
+
from { transform: translateY(-8px); opacity: 0; }
|
|
100
|
+
to { transform: translateY(0); opacity: 1; }
|
|
101
|
+
}
|
|
102
|
+
@keyframes slide-in-from-left {
|
|
103
|
+
from { transform: translateX(-100%); }
|
|
104
|
+
to { transform: translateX(0); }
|
|
105
|
+
}
|
|
106
|
+
@keyframes slide-in-from-right {
|
|
107
|
+
from { transform: translateX(100%); }
|
|
108
|
+
to { transform: translateX(0); }
|
|
109
|
+
}
|
|
110
|
+
@keyframes scale-in {
|
|
111
|
+
from { transform: scale(0.95); opacity: 0; }
|
|
112
|
+
to { transform: scale(1); opacity: 1; }
|
|
113
|
+
}
|
|
114
|
+
@keyframes scale-out {
|
|
115
|
+
from { transform: scale(1); opacity: 1; }
|
|
116
|
+
to { transform: scale(0.95); opacity: 0; }
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/* ==========================================================================
|
|
121
|
+
Color tokens — light mode
|
|
122
|
+
========================================================================== */
|
|
123
|
+
|
|
55
124
|
:root {
|
|
56
125
|
--background: oklch(1 0 0);
|
|
57
126
|
--foreground: oklch(0.145 0 0);
|
|
@@ -85,8 +154,14 @@
|
|
|
85
154
|
--sidebar-accent-foreground: oklch(0.205 0 0);
|
|
86
155
|
--sidebar-border: oklch(0.922 0 0);
|
|
87
156
|
--sidebar-ring: oklch(0.708 0 0);
|
|
157
|
+
--font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
|
158
|
+
--font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;
|
|
88
159
|
}
|
|
89
160
|
|
|
161
|
+
/* ==========================================================================
|
|
162
|
+
Color tokens — dark mode
|
|
163
|
+
========================================================================== */
|
|
164
|
+
|
|
90
165
|
.dark {
|
|
91
166
|
--background: oklch(0.145 0 0);
|
|
92
167
|
--foreground: oklch(0.985 0 0);
|
|
@@ -121,6 +196,10 @@
|
|
|
121
196
|
--sidebar-ring: oklch(0.556 0 0);
|
|
122
197
|
}
|
|
123
198
|
|
|
199
|
+
/* ==========================================================================
|
|
200
|
+
Base layer defaults
|
|
201
|
+
========================================================================== */
|
|
202
|
+
|
|
124
203
|
@layer base {
|
|
125
204
|
* {
|
|
126
205
|
@apply border-border outline-ring/50;
|