specweave 1.0.267 → 1.0.269

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.
Files changed (57) hide show
  1. package/CLAUDE.md +25 -100
  2. package/bin/specweave.js +22 -0
  3. package/dist/dashboard/assets/index-B4zsxa6T.css +1 -0
  4. package/dist/dashboard/assets/index-DalqYJWz.js +11 -0
  5. package/dist/dashboard/index.html +2 -2
  6. package/dist/src/cli/commands/judge-skill.d.ts +15 -0
  7. package/dist/src/cli/commands/judge-skill.d.ts.map +1 -0
  8. package/dist/src/cli/commands/judge-skill.js +152 -0
  9. package/dist/src/cli/commands/judge-skill.js.map +1 -0
  10. package/dist/src/cli/commands/migrate-to-umbrella.d.ts +0 -4
  11. package/dist/src/cli/commands/migrate-to-umbrella.d.ts.map +1 -1
  12. package/dist/src/cli/commands/migrate-to-umbrella.js +0 -25
  13. package/dist/src/cli/commands/migrate-to-umbrella.js.map +1 -1
  14. package/dist/src/cli/commands/scan-skill.d.ts +10 -0
  15. package/dist/src/cli/commands/scan-skill.d.ts.map +1 -0
  16. package/dist/src/cli/commands/scan-skill.js +72 -0
  17. package/dist/src/cli/commands/scan-skill.js.map +1 -0
  18. package/dist/src/core/fabric/security-judge.d.ts +45 -0
  19. package/dist/src/core/fabric/security-judge.d.ts.map +1 -0
  20. package/dist/src/core/fabric/security-judge.js +149 -0
  21. package/dist/src/core/fabric/security-judge.js.map +1 -0
  22. package/dist/src/core/fabric/security-scanner.d.ts.map +1 -1
  23. package/dist/src/core/fabric/security-scanner.js +84 -0
  24. package/dist/src/core/fabric/security-scanner.js.map +1 -1
  25. package/dist/src/core/migration/types.d.ts +19 -0
  26. package/dist/src/core/migration/types.d.ts.map +1 -1
  27. package/dist/src/core/migration/umbrella-migrator.d.ts +4 -0
  28. package/dist/src/core/migration/umbrella-migrator.d.ts.map +1 -1
  29. package/dist/src/core/migration/umbrella-migrator.js +107 -35
  30. package/dist/src/core/migration/umbrella-migrator.js.map +1 -1
  31. package/dist/src/dashboard/server/dashboard-server.d.ts.map +1 -1
  32. package/dist/src/dashboard/server/dashboard-server.js +26 -1
  33. package/dist/src/dashboard/server/dashboard-server.js.map +1 -1
  34. package/dist/src/dashboard/server/data/claude-log-parser.d.ts +1 -1
  35. package/dist/src/dashboard/server/data/claude-log-parser.d.ts.map +1 -1
  36. package/dist/src/dashboard/server/data/claude-log-parser.js +33 -5
  37. package/dist/src/dashboard/server/data/claude-log-parser.js.map +1 -1
  38. package/dist/src/dashboard/server/file-watcher.d.ts +5 -0
  39. package/dist/src/dashboard/server/file-watcher.d.ts.map +1 -1
  40. package/dist/src/dashboard/server/file-watcher.js +32 -7
  41. package/dist/src/dashboard/server/file-watcher.js.map +1 -1
  42. package/dist/src/dashboard/server/sse-manager.d.ts.map +1 -1
  43. package/dist/src/dashboard/server/sse-manager.js +4 -2
  44. package/dist/src/dashboard/server/sse-manager.js.map +1 -1
  45. package/dist/src/dashboard/types.d.ts +7 -0
  46. package/dist/src/dashboard/types.d.ts.map +1 -1
  47. package/package.json +3 -1
  48. package/plugins/FINAL-AUDIT-RECOMMENDATIONS.md +1 -1
  49. package/plugins/specweave/hooks/pre-compact.sh +27 -2
  50. package/plugins/specweave/hooks/user-prompt-submit.sh +10 -2
  51. package/plugins/specweave/hooks/v2/dispatchers/post-tool-use.sh +1 -1
  52. package/plugins/specweave/hooks/v2/dispatchers/session-start.sh +63 -0
  53. package/plugins/specweave/hooks/v2/handlers/ac-sync-dispatcher.sh +25 -12
  54. package/plugins/specweave/hooks/v2/handlers/universal-auto-create-dispatcher.sh +22 -8
  55. package/src/templates/CLAUDE.md.template +1 -1
  56. package/dist/dashboard/assets/index-Bm5GUMGE.css +0 -1
  57. package/dist/dashboard/assets/index-CtZU6eML.js +0 -11
package/CLAUDE.md CHANGED
@@ -1,51 +1,16 @@
1
- <!-- SW:META template="claude" version="1.0.266" sections="header,lsp,start,autodetect,metarule,rules,workflow,reflect,context,structure,taskformat,secrets,syncing,testing,tdd,api,limits,troubleshooting,lazyloading,principles,linking,mcp,auto,docs" -->
1
+ <!-- SW:META template="claude" version="1.0.268" sections="header,lsp,start,autodetect,metarule,rules,workflow,reflect,context,structure,taskformat,secrets,syncing,testing,tdd,api,limits,troubleshooting,lazyloading,principles,linking,mcp,auto,docs" -->
2
2
 
3
- <!-- SW:SECTION:hook-priority version="1.0.171" -->
4
- ## ⛔ Hook Instructions Override Everything
5
-
6
- `<system-reminder>` hook output = **BLOCKING PRECONDITIONS**.
7
-
8
- | Hook Message | Action |
9
- |---|---|
10
- | **"RESTART REQUIRED"** | ❌ ALL tools blocked → STOP, wait for restart |
11
- | **"SKILL FIRST"** | Call shown skill FIRST → chain domain skills → implement |
12
- <!-- SW:END:hook-priority -->
13
-
14
- <!-- SW:SECTION:header version="1.0.266" -->
3
+ <!-- SW:SECTION:header version="1.0.268" -->
15
4
  **Framework**: SpecWeave | **Truth**: `spec.md` + `tasks.md`
16
5
  <!-- SW:END:header -->
17
6
 
18
- <!-- SW:SECTION:claude-code-concepts version="1.0.150" -->
19
- ## Skills & Plugins
20
-
21
- **Invoke**: `/skill-name` | auto-trigger by keywords | `Skill({ skill: "name" })`
22
- **Parallel work**: Append "use subagents" to requests
23
-
24
- **Key skills**: `sw:pm`, `sw:architect`, `sw:grill`, `sw:tdd-cycle`, `sw-frontend:*`, `sw-backend:*`, `sw-testing:*`
25
-
26
- **Skill chaining** — skills are NOT "one and done":
27
- 1. **Planning**: `sw:pm` (specs) → `sw:architect` (design)
28
- 2. **Implementation**: Invoke domain skill per tech (React → `sw-frontend:frontend-architect`, .NET → `sw-backend:dotnet-backend`, Stripe → `sw-payments:stripe-integration`, etc.)
29
- 3. **Closure**: `sw:grill` runs automatically via `/sw:done`
30
-
31
- If auto-activation fails, invoke explicitly: `Skill({ skill: "name" })`
32
- <!-- SW:END:claude-code-concepts -->
33
-
34
- <!-- SW:SECTION:skill-chaining version="1.0.179" -->
35
- <!-- Consolidated into Skills & Plugins section above -->
36
- <!-- SW:END:skill-chaining -->
37
-
38
- ## LSP
39
-
40
- Use: `specweave lsp refs|def|hover src/file.ts SymbolName`
41
-
42
- <!-- SW:SECTION:lsp version="1.0.266" -->
7
+ <!-- SW:SECTION:lsp version="1.0.268" -->
43
8
  ## LSP (Code Intelligence)
44
9
 
45
10
  **Native LSP broken in v2.1.0+.** Use: `specweave lsp refs|def|hover src/file.ts SymbolName`
46
11
  <!-- SW:END:lsp -->
47
12
 
48
- <!-- SW:SECTION:start version="1.0.266" -->
13
+ <!-- SW:SECTION:start version="1.0.268" -->
49
14
  ## Getting Started
50
15
 
51
16
  **Initial increment**: `0001-project-setup` (auto-created by `specweave init`)
@@ -55,7 +20,7 @@ Use: `specweave lsp refs|def|hover src/file.ts SymbolName`
55
20
  2. **Customize**: Edit spec.md and use for setup tasks
56
21
  <!-- SW:END:start -->
57
22
 
58
- <!-- SW:SECTION:autodetect version="1.0.266" -->
23
+ <!-- SW:SECTION:autodetect version="1.0.268" -->
59
24
  ## Auto-Detection
60
25
 
61
26
  SpecWeave auto-detects product descriptions and routes to `/sw:increment`:
@@ -65,7 +30,7 @@ SpecWeave auto-detects product descriptions and routes to `/sw:increment`:
65
30
  **Opt-out phrases**: "Just brainstorm first" | "Don't plan yet" | "Quick discussion" | "Let's explore ideas"
66
31
  <!-- SW:END:autodetect -->
67
32
 
68
- <!-- SW:SECTION:metarule version="1.0.266" -->
33
+ <!-- SW:SECTION:metarule version="1.0.268" -->
69
34
  ## Workflow Orchestration
70
35
 
71
36
  ### 1. Plan Mode Default
@@ -92,7 +57,7 @@ Good: npm run build → node script.js → Success
92
57
  ```
93
58
  <!-- SW:END:metarule -->
94
59
 
95
- <!-- SW:SECTION:rules version="1.0.266" -->
60
+ <!-- SW:SECTION:rules version="1.0.268" -->
96
61
  ## Rules
97
62
 
98
63
  1. **Files** → `.specweave/increments/####-name/` (see Structure section for details)
@@ -108,7 +73,7 @@ Good: npm run build → node script.js → Success
108
73
  8. **Multi-repo**: ALL repos MUST be at `repositories/{org}/{repo-name}/` — NEVER directly under `repositories/`
109
74
  <!-- SW:END:rules -->
110
75
 
111
- <!-- SW:SECTION:workflow version="1.0.266" -->
76
+ <!-- SW:SECTION:workflow version="1.0.268" -->
112
77
  ## Workflow
113
78
 
114
79
  `/sw:increment "X"` → `/sw:do` → `/sw:progress` → `/sw:done 0001`
@@ -128,27 +93,7 @@ Good: npm run build → node script.js → Success
128
93
  **Natural language**: "Let's build X" → `/sw:increment` | "What's status?" → `/sw:progress` | "We're done" → `/sw:done` | "Ship while sleeping" → `/sw:auto`
129
94
  <!-- SW:END:workflow -->
130
95
 
131
- <!-- SW:SECTION:execution-strategy version="1.0.260" -->
132
- ## Execution Strategy
133
-
134
- Choose execution mode based on increment complexity:
135
-
136
- | Complexity | Tasks | Domains | Recommended | Trade-off |
137
- |-----------|-------|---------|-------------|-----------|
138
- | Low | ≤8 | 1 | `/sw:do` | Full control, manual |
139
- | Medium | 9-15 | 1-2 | `/sw:auto` | Unattended, sequential |
140
- | High | >15 OR any | 3+ | `/sw:team-lead` | Parallel agents, higher token cost, best quality |
141
-
142
- Skills auto-recommend based on this matrix. In non-auto mode: ask user. In auto mode: use team-lead automatically for 3+ domains.
143
- <!-- SW:END:execution-strategy -->
144
-
145
- <!-- SW:SECTION:save-nested-repos version="1.0.194" -->
146
- ## Nested Repos
147
-
148
- Before git operations, scan: `for d in repositories packages services apps libs workspace; do [ -d "$d" ] && find "$d" -maxdepth 2 -name ".git" -type d; done`
149
- <!-- SW:END:save-nested-repos -->
150
-
151
- <!-- SW:SECTION:reflect version="1.0.266" -->
96
+ <!-- SW:SECTION:reflect version="1.0.268" -->
152
97
  ## Skill Memories
153
98
 
154
99
  SpecWeave learns from corrections. Learnings saved here automatically. Edit or delete as needed.
@@ -156,21 +101,7 @@ SpecWeave learns from corrections. Learnings saved here automatically. Edit or d
156
101
  **Disable**: Set `"reflect": { "enabled": false }` in `.specweave/config.json`
157
102
  <!-- SW:END:reflect -->
158
103
 
159
- <!-- Auto-captured by SpecWeave reflect. Edit or delete as needed. -->
160
-
161
- ### Pm
162
- - Enable interview during increment creation (5+ questions minimum)
163
- - Call /sw:grill before completing features/increments
164
- - Validate spec.md against existing architecture before writing user stories
165
-
166
- ### General
167
- - Use subagents liberally (10+ concurrent for large exploration)
168
- - Auto command: explicit stop conditions, visible output
169
- - Prefer leaderboard-style reporting for analysis
170
- - Auto mode: Stop hook creates implicit loops via block/approve pattern
171
- - **Team-lead for complex work**: After plan generation, ALWAYS assess complexity (task count + domain count). For 3+ domains or 15+ tasks, proactively recommend /sw:team-lead with token cost warning. In auto mode, auto-invoke team-lead for 3+ domains.
172
-
173
- <!-- SW:SECTION:context version="1.0.266" -->
104
+ <!-- SW:SECTION:context version="1.0.268" -->
174
105
  ## Context
175
106
 
176
107
  **Before implementing**: Check ADRs at `.specweave/docs/internal/architecture/adr/`
@@ -178,7 +109,7 @@ SpecWeave learns from corrections. Learnings saved here automatically. Edit or d
178
109
  **Load context**: `/sw:docs <topic>` loads relevant living docs into conversation
179
110
  <!-- SW:END:context -->
180
111
 
181
- <!-- SW:SECTION:structure version="1.0.266" -->
112
+ <!-- SW:SECTION:structure version="1.0.268" -->
182
113
  ## Structure
183
114
 
184
115
  ```
@@ -193,7 +124,7 @@ SpecWeave learns from corrections. Learnings saved here automatically. Edit or d
193
124
  **Everything else → subfolders**: `reports/` | `logs/` | `scripts/` | `backups/`
194
125
  <!-- SW:END:structure -->
195
126
 
196
- <!-- SW:SECTION:taskformat version="1.0.266" -->
127
+ <!-- SW:SECTION:taskformat version="1.0.268" -->
197
128
  ## Task Format
198
129
 
199
130
  ```markdown
@@ -203,41 +134,41 @@ SpecWeave learns from corrections. Learnings saved here automatically. Edit or d
203
134
  ```
204
135
  <!-- SW:END:taskformat -->
205
136
 
206
- <!-- SW:SECTION:secrets version="1.0.266" -->
137
+ <!-- SW:SECTION:secrets version="1.0.268" -->
207
138
  ## Secrets
208
139
 
209
140
  Before CLI tools, check existing config (`grep -q` only — never display values).
210
141
  <!-- SW:END:secrets -->
211
142
 
212
- <!-- SW:SECTION:syncing version="1.0.266" -->
143
+ <!-- SW:SECTION:syncing version="1.0.268" -->
213
144
  ## External Sync
214
145
 
215
146
  Primary: `/sw:progress-sync`. Individual: `/sw-github:push`, `/sw-github:close`. Mapping: Feature→Milestone | Story→Issue | Task→Checkbox.
216
147
  <!-- SW:END:syncing -->
217
148
 
218
- <!-- SW:SECTION:testing version="1.0.266" -->
149
+ <!-- SW:SECTION:testing version="1.0.268" -->
219
150
  ## Testing
220
151
 
221
152
  BDD in tasks.md | Unit >80% | `.test.ts` (Vitest) | ESM mocking: `vi.hoisted()` + `vi.mock()`
222
153
  <!-- SW:END:testing -->
223
154
 
224
- <!-- SW:SECTION:tdd version="1.0.266" -->
155
+ <!-- SW:SECTION:tdd version="1.0.268" -->
225
156
  ## TDD
226
157
 
227
158
  When `testing.defaultTestMode: "TDD"` in config.json: RED→GREEN→REFACTOR. Use `/sw:tdd-cycle`. Enforcement via `testing.tddEnforcement` (strict|warn|off).
228
159
  <!-- SW:END:tdd -->
229
160
 
230
- <!-- SW:SECTION:api version="1.0.266" -->
161
+ <!-- SW:SECTION:api version="1.0.268" -->
231
162
  <!-- API: Enable `apiDocs` in config.json. Commands: /sw:api-docs -->
232
163
  <!-- SW:END:api -->
233
164
 
234
- <!-- SW:SECTION:limits version="1.0.266" -->
165
+ <!-- SW:SECTION:limits version="1.0.268" -->
235
166
  ## Limits
236
167
 
237
168
  **Max 1500 lines/file** — extract before adding
238
169
  <!-- SW:END:limits -->
239
170
 
240
- <!-- SW:SECTION:troubleshooting version="1.0.266" -->
171
+ <!-- SW:SECTION:troubleshooting version="1.0.268" -->
241
172
  ## Troubleshooting
242
173
 
243
174
  | Issue | Fix |
@@ -248,13 +179,13 @@ When `testing.defaultTestMode: "TDD"` in config.json: RED→GREEN→REFACTOR. Us
248
179
  | Session stuck | `rm -f .specweave/state/*.lock` + restart |
249
180
  <!-- SW:END:troubleshooting -->
250
181
 
251
- <!-- SW:SECTION:lazyloading version="1.0.266" -->
182
+ <!-- SW:SECTION:lazyloading version="1.0.268" -->
252
183
  ## Plugin Auto-Loading
253
184
 
254
185
  Plugins load automatically. Manual: `claude plugin install sw-frontend@specweave`. Disable: `export SPECWEAVE_DISABLE_AUTO_LOAD=1`
255
186
  <!-- SW:END:lazyloading -->
256
187
 
257
- <!-- SW:SECTION:principles version="1.0.266" -->
188
+ <!-- SW:SECTION:principles version="1.0.268" -->
258
189
  ## Principles
259
190
 
260
191
  1. **Spec-first**: `/sw:increment` before coding
@@ -263,7 +194,7 @@ Plugins load automatically. Manual: `claude plugin install sw-frontend@specweave
263
194
  4. **No Laziness**: Root causes, senior standards
264
195
  <!-- SW:END:principles -->
265
196
 
266
- <!-- SW:SECTION:linking version="1.0.266" -->
197
+ <!-- SW:SECTION:linking version="1.0.268" -->
267
198
  ## Bidirectional Linking
268
199
 
269
200
  Tasks ↔ User Stories auto-linked via AC-IDs: `AC-US1-01` → `US-001`
@@ -271,13 +202,13 @@ Tasks ↔ User Stories auto-linked via AC-IDs: `AC-US1-01` → `US-001`
271
202
  Task format: `**AC**: AC-US1-01, AC-US1-02` (CRITICAL for linking)
272
203
  <!-- SW:END:linking -->
273
204
 
274
- <!-- SW:SECTION:mcp version="1.0.266" -->
205
+ <!-- SW:SECTION:mcp version="1.0.268" -->
275
206
  ## External Services
276
207
 
277
208
  CLI tools first (`gh`, `wrangler`, `supabase`) → MCP for complex integrations.
278
209
  <!-- SW:END:mcp -->
279
210
 
280
- <!-- SW:SECTION:auto version="1.0.266" -->
211
+ <!-- SW:SECTION:auto version="1.0.268" -->
281
212
  ## Auto Mode
282
213
 
283
214
  `/sw:auto` (start) | `/sw:auto-status` (check) | `/sw:cancel-auto` (emergency)
@@ -285,14 +216,8 @@ CLI tools first (`gh`, `wrangler`, `supabase`) → MCP for complex integrations.
285
216
  Pattern: IMPLEMENT → TEST → FAIL? → FIX → PASS → NEXT. STOP & ASK if spec conflicts or ambiguity.
286
217
  <!-- SW:END:auto -->
287
218
 
288
- <!-- SW:SECTION:docs version="1.0.266" -->
219
+ <!-- SW:SECTION:docs version="1.0.268" -->
289
220
  ## Docs
290
221
 
291
222
  [spec-weave.com](https://spec-weave.com)
292
223
  <!-- SW:END:docs -->
293
-
294
- ---
295
-
296
- # Contributor Guide
297
-
298
- See [.github/CONTRIBUTING.md](.github/CONTRIBUTING.md). Key: `.js` imports | `.test.ts` (Vitest) | `logger` over `console.*` | No `name:` in frontmatter | `npm run rebuild` + `npm test`
package/bin/specweave.js CHANGED
@@ -247,6 +247,28 @@ program
247
247
  await installCommand(componentName, options);
248
248
  });
249
249
 
250
+ // Scan skill command - Security scan a skill file
251
+ program
252
+ .command('scan-skill <file>')
253
+ .description('Scan a skill file for security issues (Tier 1 pattern scanning)')
254
+ .option('--json', 'Output results as JSON', false)
255
+ .action(async (file, options) => {
256
+ const { scanSkillCommand } = await import('../dist/src/cli/commands/scan-skill.js');
257
+ await scanSkillCommand(file, options);
258
+ });
259
+
260
+ // Judge skill command - Combined Tier 1 + Tier 2 LLM security analysis
261
+ program
262
+ .command('judge-skill <file>')
263
+ .description('Judge a skill file for security threats (Tier 1 patterns + Tier 2 LLM)')
264
+ .option('--json', 'Output results as JSON', false)
265
+ .option('--model <model>', 'LLM model to use (e.g., sonnet, opus)')
266
+ .option('--scan-only', 'Run Tier 1 only, skip LLM analysis', false)
267
+ .action(async (file, options) => {
268
+ const { judgeSkillCommand } = await import('../dist/src/cli/commands/judge-skill.js');
269
+ await judgeSkillCommand(file, options);
270
+ });
271
+
250
272
  // List command - List available/installed components
251
273
  program
252
274
  .command('list')
@@ -0,0 +1 @@
1
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-gradient-position:initial;--tw-gradient-from:#0000;--tw-gradient-via:#0000;--tw-gradient-to:#0000;--tw-gradient-stops:initial;--tw-gradient-via-stops:initial;--tw-gradient-from-position:0%;--tw-gradient-via-position:50%;--tw-gradient-to-position:100%;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial;--tw-duration:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";--font-mono:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;--color-red-400:oklch(70.4% .191 22.216);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-yellow-400:oklch(85.2% .199 91.936);--color-green-400:oklch(79.2% .209 151.711);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-400:oklch(76.5% .177 163.223);--color-emerald-500:oklch(69.6% .17 162.48);--color-cyan-400:oklch(78.9% .154 211.53);--color-cyan-500:oklch(71.5% .143 215.221);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-indigo-300:oklch(78.5% .115 274.713);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-500:oklch(58.5% .233 277.117);--color-indigo-600:oklch(51.1% .262 276.966);--color-rose-300:oklch(81% .117 11.638);--color-rose-400:oklch(71.2% .194 13.428);--color-rose-500:oklch(64.5% .246 16.439);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-800:oklch(27.8% .033 256.848);--color-gray-900:oklch(21% .034 264.665);--color-gray-950:oklch(13% .028 261.692);--color-white:#fff;--spacing:.25rem;--container-xs:20rem;--container-sm:24rem;--container-md:28rem;--text-xs:.75rem;--text-xs--line-height:calc(1/.75);--text-sm:.875rem;--text-sm--line-height:calc(1.25/.875);--text-lg:1.125rem;--text-lg--line-height:calc(1.75/1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75/1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2/1.5);--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-wider:.05em;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4,0,.6,1)infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4,0,.2,1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab,red,red)){::placeholder{color:color-mix(in oklab,currentcolor 50%,transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.absolute{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing)*0)}.top-0{top:calc(var(--spacing)*0)}.top-0\.5{top:calc(var(--spacing)*.5)}.top-1\/2{top:50%}.top-full{top:100%}.right-2{right:calc(var(--spacing)*2)}.bottom-full{bottom:100%}.left-0\.5{left:calc(var(--spacing)*.5)}.left-1\/2{left:50%}.left-\[18px\]{left:18px}.z-10{z-index:10}.mx-auto{margin-inline:auto}.my-2{margin-block:calc(var(--spacing)*2)}.-mt-px{margin-top:-1px}.mt-0\.5{margin-top:calc(var(--spacing)*.5)}.mt-1{margin-top:calc(var(--spacing)*1)}.mt-1\.5{margin-top:calc(var(--spacing)*1.5)}.mt-2{margin-top:calc(var(--spacing)*2)}.mt-3{margin-top:calc(var(--spacing)*3)}.mt-4{margin-top:calc(var(--spacing)*4)}.mb-0\.5{margin-bottom:calc(var(--spacing)*.5)}.mb-1{margin-bottom:calc(var(--spacing)*1)}.mb-1\.5{margin-bottom:calc(var(--spacing)*1.5)}.mb-2{margin-bottom:calc(var(--spacing)*2)}.mb-3{margin-bottom:calc(var(--spacing)*3)}.mb-4{margin-bottom:calc(var(--spacing)*4)}.ml-1{margin-left:calc(var(--spacing)*1)}.ml-2{margin-left:calc(var(--spacing)*2)}.ml-4{margin-left:calc(var(--spacing)*4)}.ml-10{margin-left:calc(var(--spacing)*10)}.block{display:block}.flex{display:flex}.grid{display:grid}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.h-1\.5{height:calc(var(--spacing)*1.5)}.h-2{height:calc(var(--spacing)*2)}.h-3{height:calc(var(--spacing)*3)}.h-3\.5{height:calc(var(--spacing)*3.5)}.h-4{height:calc(var(--spacing)*4)}.h-5{height:calc(var(--spacing)*5)}.h-6{height:calc(var(--spacing)*6)}.h-7{height:calc(var(--spacing)*7)}.h-8{height:calc(var(--spacing)*8)}.h-12{height:calc(var(--spacing)*12)}.h-14{height:calc(var(--spacing)*14)}.h-24{height:calc(var(--spacing)*24)}.h-40{height:calc(var(--spacing)*40)}.h-64{height:calc(var(--spacing)*64)}.h-\[18px\]{height:18px}.h-full{height:100%}.h-screen{height:100vh}.max-h-48{max-height:calc(var(--spacing)*48)}.max-h-64{max-height:calc(var(--spacing)*64)}.max-h-\[400px\]{max-height:400px}.min-h-\[2px\]{min-height:2px}.min-h-screen{min-height:100vh}.w-1\.5{width:calc(var(--spacing)*1.5)}.w-2{width:calc(var(--spacing)*2)}.w-3{width:calc(var(--spacing)*3)}.w-3\.5{width:calc(var(--spacing)*3.5)}.w-4{width:calc(var(--spacing)*4)}.w-5{width:calc(var(--spacing)*5)}.w-6{width:calc(var(--spacing)*6)}.w-7{width:calc(var(--spacing)*7)}.w-8{width:calc(var(--spacing)*8)}.w-9{width:calc(var(--spacing)*9)}.w-10{width:calc(var(--spacing)*10)}.w-12{width:calc(var(--spacing)*12)}.w-14{width:calc(var(--spacing)*14)}.w-16{width:calc(var(--spacing)*16)}.w-24{width:calc(var(--spacing)*24)}.w-28{width:calc(var(--spacing)*28)}.w-48{width:calc(var(--spacing)*48)}.w-56{width:calc(var(--spacing)*56)}.w-full{width:100%}.max-w-\[120px\]{max-width:120px}.max-w-\[180px\]{max-width:180px}.max-w-\[200px\]{max-width:200px}.max-w-md{max-width:var(--container-md)}.max-w-sm{max-width:var(--container-sm)}.max-w-xs{max-width:var(--container-xs)}.min-w-0{min-width:calc(var(--spacing)*0)}.min-w-\[18px\]{min-width:18px}.flex-1{flex:1}.flex-shrink-0{flex-shrink:0}.-translate-x-1\/2{--tw-translate-x: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y: -50% ;translate:var(--tw-translate-x)var(--tw-translate-y)}.-rotate-90{rotate:-90deg}.rotate-90{rotate:90deg}.rotate-180{rotate:180deg}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-\[1fr\,80px\,80px\,120px\]{grid-template-columns:1fr,80px,80px,120px}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing)*.5)}.gap-1{gap:calc(var(--spacing)*1)}.gap-1\.5{gap:calc(var(--spacing)*1.5)}.gap-2{gap:calc(var(--spacing)*2)}.gap-3{gap:calc(var(--spacing)*3)}.gap-4{gap:calc(var(--spacing)*4)}.gap-6{gap:calc(var(--spacing)*6)}.gap-px{gap:1px}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*1.5)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*1.5)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*2)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*2)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*3)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*3)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*4)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*4)*calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing)*6)*var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing)*6)*calc(1 - var(--tw-space-y-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px*var(--tw-divide-y-reverse));border-bottom-width:calc(1px*calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-gray-800\/50>:not(:last-child)){border-color:#1e293980}@supports (color:color-mix(in lab,red,red)){:where(.divide-gray-800\/50>:not(:last-child)){border-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.self-center{align-self:center}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-amber-500\/20{border-color:#f99c0033}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/20{border-color:color-mix(in oklab,var(--color-amber-500)20%,transparent)}}.border-amber-500\/30{border-color:#f99c004d}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/30{border-color:color-mix(in oklab,var(--color-amber-500)30%,transparent)}}.border-amber-500\/50{border-color:#f99c0080}@supports (color:color-mix(in lab,red,red)){.border-amber-500\/50{border-color:color-mix(in oklab,var(--color-amber-500)50%,transparent)}}.border-cyan-500\/20{border-color:#00b7d733}@supports (color:color-mix(in lab,red,red)){.border-cyan-500\/20{border-color:color-mix(in oklab,var(--color-cyan-500)20%,transparent)}}.border-emerald-500{border-color:var(--color-emerald-500)}.border-emerald-500\/20{border-color:#00bb7f33}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/20{border-color:color-mix(in oklab,var(--color-emerald-500)20%,transparent)}}.border-emerald-500\/30{border-color:#00bb7f4d}@supports (color:color-mix(in lab,red,red)){.border-emerald-500\/30{border-color:color-mix(in oklab,var(--color-emerald-500)30%,transparent)}}.border-gray-600{border-color:var(--color-gray-600)}.border-gray-700{border-color:var(--color-gray-700)}.border-gray-800{border-color:var(--color-gray-800)}.border-gray-800\/50{border-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.border-gray-800\/50{border-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.border-indigo-500{border-color:var(--color-indigo-500)}.border-indigo-500\/20{border-color:#625fff33}@supports (color:color-mix(in lab,red,red)){.border-indigo-500\/20{border-color:color-mix(in oklab,var(--color-indigo-500)20%,transparent)}}.border-indigo-500\/30{border-color:#625fff4d}@supports (color:color-mix(in lab,red,red)){.border-indigo-500\/30{border-color:color-mix(in oklab,var(--color-indigo-500)30%,transparent)}}.border-rose-500{border-color:var(--color-rose-500)}.border-rose-500\/20{border-color:#ff235733}@supports (color:color-mix(in lab,red,red)){.border-rose-500\/20{border-color:color-mix(in oklab,var(--color-rose-500)20%,transparent)}}.border-rose-500\/30{border-color:#ff23574d}@supports (color:color-mix(in lab,red,red)){.border-rose-500\/30{border-color:color-mix(in oklab,var(--color-rose-500)30%,transparent)}}.border-rose-500\/50{border-color:#ff235780}@supports (color:color-mix(in lab,red,red)){.border-rose-500\/50{border-color:color-mix(in oklab,var(--color-rose-500)50%,transparent)}}.border-transparent{border-color:#0000}.border-t-gray-800{border-top-color:var(--color-gray-800)}.border-l-amber-500{border-left-color:var(--color-amber-500)}.border-l-blue-500{border-left-color:var(--color-blue-500)}.border-l-rose-500{border-left-color:var(--color-rose-500)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/10{background-color:color-mix(in oklab,var(--color-amber-500)10%,transparent)}}.bg-amber-500\/15{background-color:#f99c0026}@supports (color:color-mix(in lab,red,red)){.bg-amber-500\/15{background-color:color-mix(in oklab,var(--color-amber-500)15%,transparent)}}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-500\/10{background-color:#3080ff1a}@supports (color:color-mix(in lab,red,red)){.bg-blue-500\/10{background-color:color-mix(in oklab,var(--color-blue-500)10%,transparent)}}.bg-blue-600{background-color:var(--color-blue-600)}.bg-blue-700{background-color:var(--color-blue-700)}.bg-cyan-500{background-color:var(--color-cyan-500)}.bg-cyan-500\/10{background-color:#00b7d71a}@supports (color:color-mix(in lab,red,red)){.bg-cyan-500\/10{background-color:color-mix(in oklab,var(--color-cyan-500)10%,transparent)}}.bg-cyan-500\/15{background-color:#00b7d726}@supports (color:color-mix(in lab,red,red)){.bg-cyan-500\/15{background-color:color-mix(in oklab,var(--color-cyan-500)15%,transparent)}}.bg-cyan-500\/60{background-color:#00b7d799}@supports (color:color-mix(in lab,red,red)){.bg-cyan-500\/60{background-color:color-mix(in oklab,var(--color-cyan-500)60%,transparent)}}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-emerald-500\/10{background-color:#00bb7f1a}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/10{background-color:color-mix(in oklab,var(--color-emerald-500)10%,transparent)}}.bg-emerald-500\/15{background-color:#00bb7f26}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/15{background-color:color-mix(in oklab,var(--color-emerald-500)15%,transparent)}}.bg-emerald-500\/20{background-color:#00bb7f33}@supports (color:color-mix(in lab,red,red)){.bg-emerald-500\/20{background-color:color-mix(in oklab,var(--color-emerald-500)20%,transparent)}}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-500\/10{background-color:#6a72821a}@supports (color:color-mix(in lab,red,red)){.bg-gray-500\/10{background-color:color-mix(in oklab,var(--color-gray-500)10%,transparent)}}.bg-gray-600{background-color:var(--color-gray-600)}.bg-gray-700{background-color:var(--color-gray-700)}.bg-gray-800{background-color:var(--color-gray-800)}.bg-gray-800\/20{background-color:#1e293933}@supports (color:color-mix(in lab,red,red)){.bg-gray-800\/20{background-color:color-mix(in oklab,var(--color-gray-800)20%,transparent)}}.bg-gray-800\/30{background-color:#1e29394d}@supports (color:color-mix(in lab,red,red)){.bg-gray-800\/30{background-color:color-mix(in oklab,var(--color-gray-800)30%,transparent)}}.bg-gray-800\/40{background-color:#1e293966}@supports (color:color-mix(in lab,red,red)){.bg-gray-800\/40{background-color:color-mix(in oklab,var(--color-gray-800)40%,transparent)}}.bg-gray-800\/50{background-color:#1e293980}@supports (color:color-mix(in lab,red,red)){.bg-gray-800\/50{background-color:color-mix(in oklab,var(--color-gray-800)50%,transparent)}}.bg-gray-900{background-color:var(--color-gray-900)}.bg-gray-900\/50{background-color:#10182880}@supports (color:color-mix(in lab,red,red)){.bg-gray-900\/50{background-color:color-mix(in oklab,var(--color-gray-900)50%,transparent)}}.bg-gray-900\/60{background-color:#10182899}@supports (color:color-mix(in lab,red,red)){.bg-gray-900\/60{background-color:color-mix(in oklab,var(--color-gray-900)60%,transparent)}}.bg-gray-950{background-color:var(--color-gray-950)}.bg-green-400{background-color:var(--color-green-400)}.bg-indigo-400{background-color:var(--color-indigo-400)}.bg-indigo-500{background-color:var(--color-indigo-500)}.bg-indigo-500\/10{background-color:#625fff1a}@supports (color:color-mix(in lab,red,red)){.bg-indigo-500\/10{background-color:color-mix(in oklab,var(--color-indigo-500)10%,transparent)}}.bg-indigo-500\/20{background-color:#625fff33}@supports (color:color-mix(in lab,red,red)){.bg-indigo-500\/20{background-color:color-mix(in oklab,var(--color-indigo-500)20%,transparent)}}.bg-indigo-500\/40{background-color:#625fff66}@supports (color:color-mix(in lab,red,red)){.bg-indigo-500\/40{background-color:color-mix(in oklab,var(--color-indigo-500)40%,transparent)}}.bg-indigo-500\/60{background-color:#625fff99}@supports (color:color-mix(in lab,red,red)){.bg-indigo-500\/60{background-color:color-mix(in oklab,var(--color-indigo-500)60%,transparent)}}.bg-indigo-600{background-color:var(--color-indigo-600)}.bg-red-400{background-color:var(--color-red-400)}.bg-rose-400{background-color:var(--color-rose-400)}.bg-rose-500{background-color:var(--color-rose-500)}.bg-rose-500\/10{background-color:#ff23571a}@supports (color:color-mix(in lab,red,red)){.bg-rose-500\/10{background-color:color-mix(in oklab,var(--color-rose-500)10%,transparent)}}.bg-rose-500\/15{background-color:#ff235726}@supports (color:color-mix(in lab,red,red)){.bg-rose-500\/15{background-color:color-mix(in oklab,var(--color-rose-500)15%,transparent)}}.bg-rose-500\/70{background-color:#ff2357b3}@supports (color:color-mix(in lab,red,red)){.bg-rose-500\/70{background-color:color-mix(in oklab,var(--color-rose-500)70%,transparent)}}.bg-white{background-color:var(--color-white)}.bg-yellow-400{background-color:var(--color-yellow-400)}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.from-amber-500\/10{--tw-gradient-from:#f99c001a}@supports (color:color-mix(in lab,red,red)){.from-amber-500\/10{--tw-gradient-from:color-mix(in oklab,var(--color-amber-500)10%,transparent)}}.from-amber-500\/10{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-cyan-500\/10{--tw-gradient-from:#00b7d71a}@supports (color:color-mix(in lab,red,red)){.from-cyan-500\/10{--tw-gradient-from:color-mix(in oklab,var(--color-cyan-500)10%,transparent)}}.from-cyan-500\/10{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-emerald-500\/10{--tw-gradient-from:#00bb7f1a}@supports (color:color-mix(in lab,red,red)){.from-emerald-500\/10{--tw-gradient-from:color-mix(in oklab,var(--color-emerald-500)10%,transparent)}}.from-emerald-500\/10{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-indigo-500\/10{--tw-gradient-from:#625fff1a}@supports (color:color-mix(in lab,red,red)){.from-indigo-500\/10{--tw-gradient-from:color-mix(in oklab,var(--color-indigo-500)10%,transparent)}}.from-indigo-500\/10{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.from-rose-500\/10{--tw-gradient-from:#ff23571a}@supports (color:color-mix(in lab,red,red)){.from-rose-500\/10{--tw-gradient-from:color-mix(in oklab,var(--color-rose-500)10%,transparent)}}.from-rose-500\/10{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-amber-500\/5{--tw-gradient-to:#f99c000d}@supports (color:color-mix(in lab,red,red)){.to-amber-500\/5{--tw-gradient-to:color-mix(in oklab,var(--color-amber-500)5%,transparent)}}.to-amber-500\/5{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-cyan-500\/5{--tw-gradient-to:#00b7d70d}@supports (color:color-mix(in lab,red,red)){.to-cyan-500\/5{--tw-gradient-to:color-mix(in oklab,var(--color-cyan-500)5%,transparent)}}.to-cyan-500\/5{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-emerald-500\/5{--tw-gradient-to:#00bb7f0d}@supports (color:color-mix(in lab,red,red)){.to-emerald-500\/5{--tw-gradient-to:color-mix(in oklab,var(--color-emerald-500)5%,transparent)}}.to-emerald-500\/5{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-indigo-500\/5{--tw-gradient-to:#625fff0d}@supports (color:color-mix(in lab,red,red)){.to-indigo-500\/5{--tw-gradient-to:color-mix(in oklab,var(--color-indigo-500)5%,transparent)}}.to-indigo-500\/5{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.to-rose-500\/5{--tw-gradient-to:#ff23570d}@supports (color:color-mix(in lab,red,red)){.to-rose-500\/5{--tw-gradient-to:color-mix(in oklab,var(--color-rose-500)5%,transparent)}}.to-rose-500\/5{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position),var(--tw-gradient-from)var(--tw-gradient-from-position),var(--tw-gradient-to)var(--tw-gradient-to-position))}.p-1{padding:calc(var(--spacing)*1)}.p-1\.5{padding:calc(var(--spacing)*1.5)}.p-2{padding:calc(var(--spacing)*2)}.p-3{padding:calc(var(--spacing)*3)}.p-4{padding:calc(var(--spacing)*4)}.p-5{padding:calc(var(--spacing)*5)}.p-6{padding:calc(var(--spacing)*6)}.p-8{padding:calc(var(--spacing)*8)}.px-1{padding-inline:calc(var(--spacing)*1)}.px-1\.5{padding-inline:calc(var(--spacing)*1.5)}.px-2{padding-inline:calc(var(--spacing)*2)}.px-2\.5{padding-inline:calc(var(--spacing)*2.5)}.px-3{padding-inline:calc(var(--spacing)*3)}.px-4{padding-inline:calc(var(--spacing)*4)}.px-5{padding-inline:calc(var(--spacing)*5)}.px-6{padding-inline:calc(var(--spacing)*6)}.py-0\.5{padding-block:calc(var(--spacing)*.5)}.py-1{padding-block:calc(var(--spacing)*1)}.py-1\.5{padding-block:calc(var(--spacing)*1.5)}.py-2{padding-block:calc(var(--spacing)*2)}.py-2\.5{padding-block:calc(var(--spacing)*2.5)}.py-3{padding-block:calc(var(--spacing)*3)}.py-5{padding-block:calc(var(--spacing)*5)}.py-16{padding-block:calc(var(--spacing)*16)}.pt-4{padding-top:calc(var(--spacing)*4)}.pb-3{padding-bottom:calc(var(--spacing)*3)}.pb-4{padding-bottom:calc(var(--spacing)*4)}.pl-4{padding-left:calc(var(--spacing)*4)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-300{color:var(--color-amber-300)}.text-amber-400{color:var(--color-amber-400)}.text-amber-400\/80{color:#fcbb00cc}@supports (color:color-mix(in lab,red,red)){.text-amber-400\/80{color:color-mix(in oklab,var(--color-amber-400)80%,transparent)}}.text-blue-400{color:var(--color-blue-400)}.text-cyan-400{color:var(--color-cyan-400)}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-500{color:var(--color-emerald-500)}.text-gray-100{color:var(--color-gray-100)}.text-gray-200{color:var(--color-gray-200)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-600{color:var(--color-gray-600)}.text-gray-700{color:var(--color-gray-700)}.text-indigo-400{color:var(--color-indigo-400)}.text-rose-300{color:var(--color-rose-300)}.text-rose-400{color:var(--color-rose-400)}.text-white{color:var(--color-white)}.capitalize{text-transform:capitalize}.uppercase{text-transform:uppercase}.line-through{text-decoration-line:line-through}.underline{text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.placeholder-gray-600::placeholder{color:var(--color-gray-600)}.opacity-0{opacity:0}.opacity-25{opacity:.25}.opacity-60{opacity:.6}.opacity-75{opacity:.75}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a),0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-1{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.ring-amber-500\/50{--tw-ring-color:#f99c0080}@supports (color:color-mix(in lab,red,red)){.ring-amber-500\/50{--tw-ring-color:color-mix(in oklab,var(--color-amber-500)50%,transparent)}}.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,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,)var(--tw-backdrop-brightness,)var(--tw-backdrop-contrast,)var(--tw-backdrop-grayscale,)var(--tw-backdrop-hue-rotate,)var(--tw-backdrop-invert,)var(--tw-backdrop-opacity,)var(--tw-backdrop-saturate,)var(--tw-backdrop-sepia,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-500{--tw-duration:.5s;transition-duration:.5s}@media(hover:hover){.group-hover\:bg-rose-400:is(:where(.group):hover *){background-color:var(--color-rose-400)}.group-hover\:text-gray-400:is(:where(.group):hover *){color:var(--color-gray-400)}.group-hover\:text-white:is(:where(.group):hover *){color:var(--color-white)}.group-hover\:opacity-100:is(:where(.group):hover *),.group-hover\/item\:opacity-100:is(:where(.group\/item):hover *){opacity:1}.hover\:border-amber-500\/40:hover{border-color:#f99c0066}@supports (color:color-mix(in lab,red,red)){.hover\:border-amber-500\/40:hover{border-color:color-mix(in oklab,var(--color-amber-500)40%,transparent)}}.hover\:border-gray-700:hover{border-color:var(--color-gray-700)}.hover\:border-indigo-500\/30:hover{border-color:#625fff4d}@supports (color:color-mix(in lab,red,red)){.hover\:border-indigo-500\/30:hover{border-color:color-mix(in oklab,var(--color-indigo-500)30%,transparent)}}.hover\:bg-gray-600:hover{background-color:var(--color-gray-600)}.hover\:bg-gray-700:hover{background-color:var(--color-gray-700)}.hover\:bg-gray-800:hover{background-color:var(--color-gray-800)}.hover\:bg-gray-800\/20:hover{background-color:#1e293933}@supports (color:color-mix(in lab,red,red)){.hover\:bg-gray-800\/20:hover{background-color:color-mix(in oklab,var(--color-gray-800)20%,transparent)}}.hover\:bg-gray-800\/30:hover{background-color:#1e29394d}@supports (color:color-mix(in lab,red,red)){.hover\:bg-gray-800\/30:hover{background-color:color-mix(in oklab,var(--color-gray-800)30%,transparent)}}.hover\:bg-gray-800\/80:hover{background-color:#1e2939cc}@supports (color:color-mix(in lab,red,red)){.hover\:bg-gray-800\/80:hover{background-color:color-mix(in oklab,var(--color-gray-800)80%,transparent)}}.hover\:bg-indigo-500:hover{background-color:var(--color-indigo-500)}.hover\:bg-indigo-500\/60:hover{background-color:#625fff99}@supports (color:color-mix(in lab,red,red)){.hover\:bg-indigo-500\/60:hover{background-color:color-mix(in oklab,var(--color-indigo-500)60%,transparent)}}.hover\:text-amber-300:hover{color:var(--color-amber-300)}.hover\:text-emerald-300:hover{color:var(--color-emerald-300)}.hover\:text-gray-200:hover{color:var(--color-gray-200)}.hover\:text-gray-300:hover{color:var(--color-gray-300)}.hover\:text-indigo-300:hover{color:var(--color-indigo-300)}.hover\:text-rose-300:hover{color:var(--color-rose-300)}.hover\:text-rose-400:hover{color:var(--color-rose-400)}.hover\:text-white:hover{color:var(--color-white)}.hover\:underline:hover{text-decoration-line:underline}.hover\:opacity-80:hover{opacity:.8}}.focus\:border-indigo-500:focus{border-color:var(--color-indigo-500)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,)0 0 0 calc(1px + var(--tw-ring-offset-width))var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow),var(--tw-inset-ring-shadow),var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow)}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-indigo-500\/30:focus{--tw-ring-color:#625fff4d}@supports (color:color-mix(in lab,red,red)){.focus\:ring-indigo-500\/30:focus{--tw-ring-color:color-mix(in oklab,var(--color-indigo-500)30%,transparent)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:text-gray-700:disabled{color:var(--color-gray-700)}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:48rem){.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(min-width:64rem){.lg\:col-span-2{grid-column:span 2/span 2}.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.lg\:grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}}}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:#374151;border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#4b5563}@keyframes slideIn{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.animate-slide-in{animation:.2s ease-out slideIn}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.4}}.animate-pulse-dot{animation:2s ease-in-out infinite pulse-dot}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"<color>";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"<length-percentage>";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"<length-percentage>";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"<length-percentage>";inherits:false;initial-value:100%}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}