specweave 1.0.260 → 1.0.262
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-plugin/README.md +0 -2
- package/CLAUDE.md +28 -27
- package/bin/specweave.js +14 -85
- package/dist/dashboard/assets/index-Cv1XUAKk.css +1 -0
- package/dist/dashboard/assets/index-DHOztQSu.js +11 -0
- package/dist/dashboard/index.html +2 -2
- package/dist/src/adapters/README.md +1 -1
- package/dist/src/adapters/agents-md-generator.js +1 -1
- package/dist/src/adapters/agents-md-generator.js.map +1 -1
- package/dist/src/adapters/claude/README.md +8 -8
- package/dist/src/adapters/claude/adapter.js +2 -2
- package/dist/src/adapters/claude-md-generator.js +2 -2
- package/dist/src/adapters/claude-md-generator.js.map +1 -1
- package/dist/src/adapters/cursor/README.md +7 -7
- package/dist/src/adapters/generic/README.md +2 -2
- package/dist/src/cli/commands/create-increment.d.ts +1 -1
- package/dist/src/cli/commands/create-increment.js +1 -1
- package/dist/src/cli/commands/update.d.ts.map +1 -1
- package/dist/src/cli/commands/update.js +64 -1
- package/dist/src/cli/commands/update.js.map +1 -1
- package/dist/src/cli/helpers/init/api-docs-config.js +7 -7
- package/dist/src/cli/helpers/init/api-docs-config.js.map +1 -1
- package/dist/src/core/config/types.d.ts +18 -0
- package/dist/src/core/config/types.d.ts.map +1 -1
- package/dist/src/core/config/types.js +4 -0
- package/dist/src/core/config/types.js.map +1 -1
- package/dist/src/core/external-tools/external-items-display.d.ts.map +1 -1
- package/dist/src/core/external-tools/external-items-display.js +1 -11
- package/dist/src/core/external-tools/external-items-display.js.map +1 -1
- package/dist/src/core/increment/increment-archiver.js +1 -1
- package/dist/src/core/increment/increment-archiver.js.map +1 -1
- package/dist/src/core/increment/metadata-manager.js +2 -2
- package/dist/src/core/increment/metadata-manager.js.map +1 -1
- package/dist/src/core/increment/template-creator.d.ts +1 -1
- package/dist/src/core/increment/template-creator.js +4 -4
- package/dist/src/core/lazy-loading/llm-plugin-detector.d.ts +2 -2
- package/dist/src/core/lazy-loading/llm-plugin-detector.d.ts.map +1 -1
- package/dist/src/core/lazy-loading/llm-plugin-detector.js +15 -5
- package/dist/src/core/lazy-loading/llm-plugin-detector.js.map +1 -1
- package/dist/src/core/living-docs/feature-consistency-validator.js +1 -1
- package/dist/src/core/living-docs/feature-consistency-validator.js.map +1 -1
- package/dist/src/core/living-docs/scaffolding/scaffold.js +3 -3
- package/dist/src/core/notifications/command-integration.d.ts.map +1 -1
- package/dist/src/core/notifications/command-integration.js +0 -1
- package/dist/src/core/notifications/command-integration.js.map +1 -1
- package/dist/src/core/reflection/reflect-handler.js +2 -2
- package/dist/src/core/reflection/reflect-handler.js.map +1 -1
- package/dist/src/core/validators/ac-presence-validator.d.ts +1 -1
- package/dist/src/core/validators/ac-presence-validator.js +3 -3
- package/dist/src/core/validators/ac-presence-validator.js.map +1 -1
- package/dist/src/dashboard/server/command-runner.d.ts.map +1 -1
- package/dist/src/dashboard/server/command-runner.js +2 -2
- package/dist/src/dashboard/server/command-runner.js.map +1 -1
- package/dist/src/dashboard/server/dashboard-server.d.ts.map +1 -1
- package/dist/src/dashboard/server/dashboard-server.js +107 -41
- package/dist/src/dashboard/server/dashboard-server.js.map +1 -1
- package/dist/src/dashboard/server/data/cost-aggregator.d.ts +36 -0
- package/dist/src/dashboard/server/data/cost-aggregator.d.ts.map +1 -0
- package/dist/src/dashboard/server/data/cost-aggregator.js +156 -0
- package/dist/src/dashboard/server/data/cost-aggregator.js.map +1 -0
- package/dist/src/dashboard/server/data/dashboard-data-aggregator.d.ts +37 -10
- package/dist/src/dashboard/server/data/dashboard-data-aggregator.d.ts.map +1 -1
- package/dist/src/dashboard/server/data/dashboard-data-aggregator.js +193 -51
- package/dist/src/dashboard/server/data/dashboard-data-aggregator.js.map +1 -1
- package/dist/src/dashboard/types.d.ts +11 -0
- package/dist/src/dashboard/types.d.ts.map +1 -1
- package/dist/src/utils/agents-md-compiler.js +1 -1
- package/dist/src/utils/agents-md-compiler.js.map +1 -1
- package/dist/src/utils/find-project-root.d.ts +5 -4
- package/dist/src/utils/find-project-root.d.ts.map +1 -1
- package/dist/src/utils/find-project-root.js +8 -10
- package/dist/src/utils/find-project-root.js.map +1 -1
- package/dist/src/utils/generate-skills-index.js +3 -3
- package/dist/src/utils/notification-constants.js +1 -1
- package/dist/src/utils/notification-constants.js.map +1 -1
- package/package.json +1 -1
- package/plugins/FINAL-AUDIT-RECOMMENDATIONS.md +3 -3
- package/plugins/specweave/PLUGIN.md +0 -22
- package/plugins/specweave/commands/analytics.md +1 -1
- package/plugins/specweave/commands/discrepancies.md +0 -1
- package/plugins/specweave/commands/living-docs.md +0 -1
- package/plugins/specweave/commands/reconcile.md +1 -1
- package/plugins/specweave/hooks/hooks.json +10 -0
- package/plugins/specweave/hooks/pre-compact.sh +39 -0
- package/plugins/specweave/hooks/stop-sync.sh +23 -1
- package/plugins/specweave/hooks/universal/fail-fast-wrapper.sh +4 -0
- package/plugins/specweave/hooks/user-prompt-submit.sh +193 -59
- package/plugins/specweave/hooks/v2/dispatchers/session-start.sh +7 -0
- package/plugins/specweave/hooks/v2/guards/spec-template-enforcement-guard.sh +1 -1
- package/plugins/specweave/hooks/v2/handlers/ac-sync-dispatcher.sh +25 -6
- package/plugins/specweave/hooks/v2/handlers/universal-auto-create-dispatcher.sh +21 -3
- package/plugins/specweave/hooks/v2/lib/check-provider-enabled.sh +52 -0
- package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js +2 -2
- package/plugins/specweave/lib/vendor/core/increment/metadata-manager.js.map +1 -1
- package/plugins/specweave/skills/auto/SKILL.md +35 -0
- package/plugins/specweave/skills/do/SKILL.md +2 -2
- package/plugins/specweave/skills/done/SKILL.md +1 -1
- package/plugins/specweave/skills/framework/SKILL.md +4 -4
- package/plugins/specweave/skills/increment/SKILL.md +192 -25
- package/plugins/specweave/skills/next/SKILL.md +36 -630
- package/plugins/specweave/skills/plan/SKILL.md +37 -0
- package/plugins/specweave/skills/pm/phases/00-deep-interview.md +2 -2
- package/plugins/specweave/skills/progress-sync/SKILL.md +7 -25
- package/plugins/specweave/skills/spec-generator/SKILL.md +44 -626
- package/plugins/specweave/skills/tdd-green/SKILL.md +10 -798
- package/plugins/specweave/skills/tdd-red/SKILL.md +8 -136
- package/plugins/specweave/skills/tdd-refactor/SKILL.md +15 -147
- package/plugins/specweave/skills/team-lead/SKILL.md +1 -1
- package/plugins/specweave-github/hooks/github-auto-create-handler.sh +23 -5
- package/src/templates/AGENTS.md.template +11 -11
- package/src/templates/CLAUDE.md.template +1 -1
- package/dist/dashboard/assets/index-DdtF4K1G.css +0 -1
- package/dist/dashboard/assets/index-cZA6rz8s.js +0 -11
- package/plugins/specweave/commands/api-docs.md +0 -672
- package/plugins/specweave/commands/check-hooks.md +0 -241
- package/plugins/specweave/commands/embed-acs.md +0 -445
- package/plugins/specweave/commands/external.md +0 -145
- package/plugins/specweave/commands/import-docs.md +0 -212
- package/plugins/specweave/commands/migrate-config.md +0 -104
- package/plugins/specweave/commands/notifications.md +0 -94
- package/plugins/specweave/commands/plugin-validator.md +0 -429
- package/plugins/specweave/commands/revert-wip-limit.md +0 -82
- package/plugins/specweave/commands/sync-acs.md +0 -342
- package/plugins/specweave/commands/sync-specs.md +0 -339
- package/plugins/specweave/commands/sync-tasks.md +0 -255
- package/plugins/specweave/commands/update-scope.md +0 -351
- package/plugins/specweave/commands/validate-features.md +0 -207
- package/plugins/specweave/skills/archive-increments/SKILL.md +0 -209
- package/plugins/specweave/skills/code-review/SKILL.md +0 -598
- package/plugins/specweave/skills/increment-planner/SKILL.md +0 -238
- package/plugins/specweave/skills/increment-work-router/SKILL.md +0 -562
- package/plugins/specweave/skills/multi-project-spec-mapper/SKILL.md +0 -423
- package/plugins/specweave/skills/pm-closure-validation/SKILL.md +0 -542
- package/plugins/specweave/skills/smart-reopen-detector/SKILL.md +0 -245
- package/plugins/specweave/skills/tdd-orchestrator/SKILL.md +0 -228
- package/plugins/specweave/skills/umbrella-repo-detector/SKILL.md +0 -301
package/.claude-plugin/README.md
CHANGED
|
@@ -149,8 +149,6 @@ SpecWeave's marketplace.json follows Claude's official schema format. Here's the
|
|
|
149
149
|
- `close-previous` - Close incomplete increments
|
|
150
150
|
|
|
151
151
|
**Skills**:
|
|
152
|
-
- `increment-planner` - PM-led planning workflow
|
|
153
|
-
- `increment-work-router` - Smart work continuation
|
|
154
152
|
- `spec-generator` - Specification creation
|
|
155
153
|
- `context-loader` - Context management
|
|
156
154
|
- `brownfield-analyzer` - Existing project analysis
|
package/CLAUDE.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- SW:META template="claude" version="1.0.
|
|
1
|
+
<!-- SW:META template="claude" version="1.0.261" 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
3
|
<!-- SW:SECTION:hook-priority version="1.0.171" -->
|
|
4
4
|
## ⛔ Hook Instructions Override Everything
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
| **"SKILL FIRST"** | Call shown skill FIRST → chain domain skills → implement |
|
|
12
12
|
<!-- SW:END:hook-priority -->
|
|
13
13
|
|
|
14
|
-
<!-- SW:SECTION:header version="1.0.
|
|
14
|
+
<!-- SW:SECTION:header version="1.0.261" -->
|
|
15
15
|
**Framework**: SpecWeave | **Truth**: `spec.md` + `tasks.md`
|
|
16
16
|
<!-- SW:END:header -->
|
|
17
17
|
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
**Invoke**: `/skill-name` | auto-trigger by keywords | `Skill({ skill: "name" })`
|
|
22
22
|
**Parallel work**: Append "use subagents" to requests
|
|
23
23
|
|
|
24
|
-
**Key skills**: `sw:pm`, `sw:architect`, `sw:grill`, `sw:tdd-
|
|
24
|
+
**Key skills**: `sw:pm`, `sw:architect`, `sw:grill`, `sw:tdd-cycle`, `sw-frontend:*`, `sw-backend:*`, `sw-testing:*`
|
|
25
25
|
|
|
26
26
|
**Skill chaining** — skills are NOT "one and done":
|
|
27
27
|
1. **Planning**: `sw:pm` (specs) → `sw:architect` (design)
|
|
@@ -39,13 +39,13 @@ If auto-activation fails, invoke explicitly: `Skill({ skill: "name" })`
|
|
|
39
39
|
|
|
40
40
|
Use: `specweave lsp refs|def|hover src/file.ts SymbolName`
|
|
41
41
|
|
|
42
|
-
<!-- SW:SECTION:lsp version="1.0.
|
|
42
|
+
<!-- SW:SECTION:lsp version="1.0.261" -->
|
|
43
43
|
## LSP (Code Intelligence)
|
|
44
44
|
|
|
45
45
|
**Native LSP broken in v2.1.0+.** Use: `specweave lsp refs|def|hover src/file.ts SymbolName`
|
|
46
46
|
<!-- SW:END:lsp -->
|
|
47
47
|
|
|
48
|
-
<!-- SW:SECTION:start version="1.0.
|
|
48
|
+
<!-- SW:SECTION:start version="1.0.261" -->
|
|
49
49
|
## Getting Started
|
|
50
50
|
|
|
51
51
|
**Initial increment**: `0001-project-setup` (auto-created by `specweave init`)
|
|
@@ -55,7 +55,7 @@ Use: `specweave lsp refs|def|hover src/file.ts SymbolName`
|
|
|
55
55
|
2. **Customize**: Edit spec.md and use for setup tasks
|
|
56
56
|
<!-- SW:END:start -->
|
|
57
57
|
|
|
58
|
-
<!-- SW:SECTION:autodetect version="1.0.
|
|
58
|
+
<!-- SW:SECTION:autodetect version="1.0.261" -->
|
|
59
59
|
## Auto-Detection
|
|
60
60
|
|
|
61
61
|
SpecWeave auto-detects product descriptions and routes to `/sw:increment`:
|
|
@@ -65,7 +65,7 @@ SpecWeave auto-detects product descriptions and routes to `/sw:increment`:
|
|
|
65
65
|
**Opt-out phrases**: "Just brainstorm first" | "Don't plan yet" | "Quick discussion" | "Let's explore ideas"
|
|
66
66
|
<!-- SW:END:autodetect -->
|
|
67
67
|
|
|
68
|
-
<!-- SW:SECTION:metarule version="1.0.
|
|
68
|
+
<!-- SW:SECTION:metarule version="1.0.261" -->
|
|
69
69
|
## Workflow Orchestration
|
|
70
70
|
|
|
71
71
|
### 1. Plan Mode Default
|
|
@@ -92,7 +92,7 @@ Good: npm run build → node script.js → Success
|
|
|
92
92
|
```
|
|
93
93
|
<!-- SW:END:metarule -->
|
|
94
94
|
|
|
95
|
-
<!-- SW:SECTION:rules version="1.0.
|
|
95
|
+
<!-- SW:SECTION:rules version="1.0.261" -->
|
|
96
96
|
## Rules
|
|
97
97
|
|
|
98
98
|
1. **Files** → `.specweave/increments/####-name/` (see Structure section for details)
|
|
@@ -108,7 +108,7 @@ Good: npm run build → node script.js → Success
|
|
|
108
108
|
8. **Multi-repo**: ALL repos MUST be at `repositories/{org}/{repo-name}/` — NEVER directly under `repositories/`
|
|
109
109
|
<!-- SW:END:rules -->
|
|
110
110
|
|
|
111
|
-
<!-- SW:SECTION:workflow version="1.0.
|
|
111
|
+
<!-- SW:SECTION:workflow version="1.0.261" -->
|
|
112
112
|
## Workflow
|
|
113
113
|
|
|
114
114
|
`/sw:increment "X"` → `/sw:do` → `/sw:progress` → `/sw:done 0001`
|
|
@@ -148,7 +148,7 @@ Skills auto-recommend based on this matrix. In non-auto mode: ask user. In auto
|
|
|
148
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
149
|
<!-- SW:END:save-nested-repos -->
|
|
150
150
|
|
|
151
|
-
<!-- SW:SECTION:reflect version="1.0.
|
|
151
|
+
<!-- SW:SECTION:reflect version="1.0.261" -->
|
|
152
152
|
## Skill Memories
|
|
153
153
|
|
|
154
154
|
SpecWeave learns from corrections. Learnings saved here automatically. Edit or delete as needed.
|
|
@@ -168,8 +168,9 @@ SpecWeave learns from corrections. Learnings saved here automatically. Edit or d
|
|
|
168
168
|
- Auto command: explicit stop conditions, visible output
|
|
169
169
|
- Prefer leaderboard-style reporting for analysis
|
|
170
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.
|
|
171
172
|
|
|
172
|
-
<!-- SW:SECTION:context version="1.0.
|
|
173
|
+
<!-- SW:SECTION:context version="1.0.261" -->
|
|
173
174
|
## Context
|
|
174
175
|
|
|
175
176
|
**Before implementing**: Check ADRs at `.specweave/docs/internal/architecture/adr/`
|
|
@@ -177,7 +178,7 @@ SpecWeave learns from corrections. Learnings saved here automatically. Edit or d
|
|
|
177
178
|
**Load context**: `/sw:docs <topic>` loads relevant living docs into conversation
|
|
178
179
|
<!-- SW:END:context -->
|
|
179
180
|
|
|
180
|
-
<!-- SW:SECTION:structure version="1.0.
|
|
181
|
+
<!-- SW:SECTION:structure version="1.0.261" -->
|
|
181
182
|
## Structure
|
|
182
183
|
|
|
183
184
|
```
|
|
@@ -192,7 +193,7 @@ SpecWeave learns from corrections. Learnings saved here automatically. Edit or d
|
|
|
192
193
|
**Everything else → subfolders**: `reports/` | `logs/` | `scripts/` | `backups/`
|
|
193
194
|
<!-- SW:END:structure -->
|
|
194
195
|
|
|
195
|
-
<!-- SW:SECTION:taskformat version="1.0.
|
|
196
|
+
<!-- SW:SECTION:taskformat version="1.0.261" -->
|
|
196
197
|
## Task Format
|
|
197
198
|
|
|
198
199
|
```markdown
|
|
@@ -202,58 +203,58 @@ SpecWeave learns from corrections. Learnings saved here automatically. Edit or d
|
|
|
202
203
|
```
|
|
203
204
|
<!-- SW:END:taskformat -->
|
|
204
205
|
|
|
205
|
-
<!-- SW:SECTION:secrets version="1.0.
|
|
206
|
+
<!-- SW:SECTION:secrets version="1.0.261" -->
|
|
206
207
|
## Secrets
|
|
207
208
|
|
|
208
209
|
Before CLI tools, check existing config (`grep -q` only — never display values).
|
|
209
210
|
<!-- SW:END:secrets -->
|
|
210
211
|
|
|
211
|
-
<!-- SW:SECTION:syncing version="1.0.
|
|
212
|
+
<!-- SW:SECTION:syncing version="1.0.261" -->
|
|
212
213
|
## External Sync
|
|
213
214
|
|
|
214
215
|
Primary: `/sw:progress-sync`. Individual: `/sw-github:push`, `/sw-github:close`. Mapping: Feature→Milestone | Story→Issue | Task→Checkbox.
|
|
215
216
|
<!-- SW:END:syncing -->
|
|
216
217
|
|
|
217
|
-
<!-- SW:SECTION:testing version="1.0.
|
|
218
|
+
<!-- SW:SECTION:testing version="1.0.261" -->
|
|
218
219
|
## Testing
|
|
219
220
|
|
|
220
221
|
BDD in tasks.md | Unit >80% | `.test.ts` (Vitest) | ESM mocking: `vi.hoisted()` + `vi.mock()`
|
|
221
222
|
<!-- SW:END:testing -->
|
|
222
223
|
|
|
223
|
-
<!-- SW:SECTION:tdd version="1.0.
|
|
224
|
+
<!-- SW:SECTION:tdd version="1.0.261" -->
|
|
224
225
|
## TDD
|
|
225
226
|
|
|
226
227
|
When `testing.defaultTestMode: "TDD"` in config.json: RED→GREEN→REFACTOR. Use `/sw:tdd-cycle`. Enforcement via `testing.tddEnforcement` (strict|warn|off).
|
|
227
228
|
<!-- SW:END:tdd -->
|
|
228
229
|
|
|
229
|
-
<!-- SW:SECTION:api version="1.0.
|
|
230
|
+
<!-- SW:SECTION:api version="1.0.261" -->
|
|
230
231
|
<!-- API: Enable `apiDocs` in config.json. Commands: /sw:api-docs -->
|
|
231
232
|
<!-- SW:END:api -->
|
|
232
233
|
|
|
233
|
-
<!-- SW:SECTION:limits version="1.0.
|
|
234
|
+
<!-- SW:SECTION:limits version="1.0.261" -->
|
|
234
235
|
## Limits
|
|
235
236
|
|
|
236
237
|
**Max 1500 lines/file** — extract before adding
|
|
237
238
|
<!-- SW:END:limits -->
|
|
238
239
|
|
|
239
|
-
<!-- SW:SECTION:troubleshooting version="1.0.
|
|
240
|
+
<!-- SW:SECTION:troubleshooting version="1.0.261" -->
|
|
240
241
|
## Troubleshooting
|
|
241
242
|
|
|
242
243
|
| Issue | Fix |
|
|
243
244
|
|-------|-----|
|
|
244
245
|
| Skills missing | Restart Claude Code |
|
|
245
246
|
| Plugins outdated | `specweave refresh-marketplace` |
|
|
246
|
-
| Out of sync | `/sw:sync-
|
|
247
|
+
| Out of sync | `/sw:sync-progress` |
|
|
247
248
|
| Session stuck | `rm -f .specweave/state/*.lock` + restart |
|
|
248
249
|
<!-- SW:END:troubleshooting -->
|
|
249
250
|
|
|
250
|
-
<!-- SW:SECTION:lazyloading version="1.0.
|
|
251
|
+
<!-- SW:SECTION:lazyloading version="1.0.261" -->
|
|
251
252
|
## Plugin Auto-Loading
|
|
252
253
|
|
|
253
254
|
Plugins load automatically. Manual: `claude plugin install sw-frontend@specweave`. Disable: `export SPECWEAVE_DISABLE_AUTO_LOAD=1`
|
|
254
255
|
<!-- SW:END:lazyloading -->
|
|
255
256
|
|
|
256
|
-
<!-- SW:SECTION:principles version="1.0.
|
|
257
|
+
<!-- SW:SECTION:principles version="1.0.261" -->
|
|
257
258
|
## Principles
|
|
258
259
|
|
|
259
260
|
1. **Spec-first**: `/sw:increment` before coding
|
|
@@ -262,7 +263,7 @@ Plugins load automatically. Manual: `claude plugin install sw-frontend@specweave
|
|
|
262
263
|
4. **No Laziness**: Root causes, senior standards
|
|
263
264
|
<!-- SW:END:principles -->
|
|
264
265
|
|
|
265
|
-
<!-- SW:SECTION:linking version="1.0.
|
|
266
|
+
<!-- SW:SECTION:linking version="1.0.261" -->
|
|
266
267
|
## Bidirectional Linking
|
|
267
268
|
|
|
268
269
|
Tasks ↔ User Stories auto-linked via AC-IDs: `AC-US1-01` → `US-001`
|
|
@@ -270,13 +271,13 @@ Tasks ↔ User Stories auto-linked via AC-IDs: `AC-US1-01` → `US-001`
|
|
|
270
271
|
Task format: `**AC**: AC-US1-01, AC-US1-02` (CRITICAL for linking)
|
|
271
272
|
<!-- SW:END:linking -->
|
|
272
273
|
|
|
273
|
-
<!-- SW:SECTION:mcp version="1.0.
|
|
274
|
+
<!-- SW:SECTION:mcp version="1.0.261" -->
|
|
274
275
|
## External Services
|
|
275
276
|
|
|
276
277
|
CLI tools first (`gh`, `wrangler`, `supabase`) → MCP for complex integrations.
|
|
277
278
|
<!-- SW:END:mcp -->
|
|
278
279
|
|
|
279
|
-
<!-- SW:SECTION:auto version="1.0.
|
|
280
|
+
<!-- SW:SECTION:auto version="1.0.261" -->
|
|
280
281
|
## Auto Mode
|
|
281
282
|
|
|
282
283
|
`/sw:auto` (start) | `/sw:auto-status` (check) | `/sw:cancel-auto` (emergency)
|
|
@@ -284,7 +285,7 @@ CLI tools first (`gh`, `wrangler`, `supabase`) → MCP for complex integrations.
|
|
|
284
285
|
Pattern: IMPLEMENT → TEST → FAIL? → FIX → PASS → NEXT. STOP & ASK if spec conflicts or ambiguity.
|
|
285
286
|
<!-- SW:END:auto -->
|
|
286
287
|
|
|
287
|
-
<!-- SW:SECTION:docs version="1.0.
|
|
288
|
+
<!-- SW:SECTION:docs version="1.0.261" -->
|
|
288
289
|
## Docs
|
|
289
290
|
|
|
290
291
|
[spec-weave.com](https://spec-weave.com)
|
package/bin/specweave.js
CHANGED
|
@@ -963,29 +963,6 @@ contextCmd
|
|
|
963
963
|
await contextSelectCommand();
|
|
964
964
|
});
|
|
965
965
|
|
|
966
|
-
// Enable multi-project command - Migrate from single-project to multi-project mode
|
|
967
|
-
program
|
|
968
|
-
.command('enable-multiproject')
|
|
969
|
-
.description('Enable multi-project mode (explicit opt-in from single-project)')
|
|
970
|
-
.option('-y, --yes', 'Skip confirmation prompt')
|
|
971
|
-
.action(async (options) => {
|
|
972
|
-
const { enableMultiProject } = await import('../dist/src/cli/commands/enable-multiproject.js');
|
|
973
|
-
await enableMultiProject({
|
|
974
|
-
skipConfirmation: options.yes
|
|
975
|
-
});
|
|
976
|
-
});
|
|
977
|
-
|
|
978
|
-
// Switch project command - Change active project (multi-project mode)
|
|
979
|
-
program
|
|
980
|
-
.command('switch-project [project-id]')
|
|
981
|
-
.description('Switch active project (multi-project mode only)')
|
|
982
|
-
.action(async (projectId) => {
|
|
983
|
-
const { switchProject } = await import('../dist/src/cli/commands/switch-project.js');
|
|
984
|
-
await switchProject({
|
|
985
|
-
projectId
|
|
986
|
-
});
|
|
987
|
-
});
|
|
988
|
-
|
|
989
966
|
// Refresh marketplace command - Update marketplace with lazy loading support
|
|
990
967
|
program
|
|
991
968
|
.command('refresh-marketplace')
|
|
@@ -999,40 +976,6 @@ program
|
|
|
999
976
|
await refreshMarketplaceCommand(options);
|
|
1000
977
|
});
|
|
1001
978
|
|
|
1002
|
-
// Cache status command - Display plugin cache health status
|
|
1003
|
-
program
|
|
1004
|
-
.command('cache-status')
|
|
1005
|
-
.description('Display plugin cache health status and detect issues')
|
|
1006
|
-
.argument('[plugin]', 'Check specific plugin (optional)')
|
|
1007
|
-
.option('--verbose', 'Show detailed information')
|
|
1008
|
-
.option('--check-github', 'Check GitHub for updates (uses API)')
|
|
1009
|
-
.action(async (pluginName, options) => {
|
|
1010
|
-
const { cacheStatus } = await import('../dist/src/cli/commands/cache-status.js');
|
|
1011
|
-
await cacheStatus({
|
|
1012
|
-
pluginName,
|
|
1013
|
-
verbose: options.verbose,
|
|
1014
|
-
checkGithub: options.checkGithub,
|
|
1015
|
-
});
|
|
1016
|
-
});
|
|
1017
|
-
|
|
1018
|
-
// Cache refresh command - Refresh plugin cache with skill memory preservation
|
|
1019
|
-
program
|
|
1020
|
-
.command('cache-refresh')
|
|
1021
|
-
.description('Refresh plugin cache with skill memory preservation')
|
|
1022
|
-
.argument('[plugin]', 'Refresh specific plugin (optional)')
|
|
1023
|
-
.option('--force', 'Hard refresh (delete cache)')
|
|
1024
|
-
.option('--all', 'Refresh all plugins (even healthy)')
|
|
1025
|
-
.option('--verify', 'Verify cache health after refresh')
|
|
1026
|
-
.action(async (pluginName, options) => {
|
|
1027
|
-
const { cacheRefresh } = await import('../dist/src/cli/commands/cache-refresh.js');
|
|
1028
|
-
await cacheRefresh({
|
|
1029
|
-
pluginName,
|
|
1030
|
-
force: options.force,
|
|
1031
|
-
all: options.all,
|
|
1032
|
-
verify: options.verify,
|
|
1033
|
-
});
|
|
1034
|
-
});
|
|
1035
|
-
|
|
1036
979
|
// Doctor command - Comprehensive health check
|
|
1037
980
|
program
|
|
1038
981
|
.command('doctor')
|
|
@@ -1058,10 +1001,11 @@ program
|
|
|
1058
1001
|
}
|
|
1059
1002
|
});
|
|
1060
1003
|
|
|
1061
|
-
// Detect intent command - Hook helper for automatic plugin loading
|
|
1004
|
+
// Detect intent command - Hook helper for automatic plugin loading (internal)
|
|
1062
1005
|
program
|
|
1063
1006
|
.command('detect-intent [prompt]')
|
|
1064
1007
|
.description('Detect SpecWeave intent from a prompt and optionally install plugins')
|
|
1008
|
+
|
|
1065
1009
|
.option('--install', 'Also install detected plugins after detection')
|
|
1066
1010
|
.option('--silent', 'Silent mode - no stdout output (for hooks)')
|
|
1067
1011
|
.option('--file <path>', 'Read prompt from file instead of argument (avoids shell escaping issues)')
|
|
@@ -1094,10 +1038,11 @@ program
|
|
|
1094
1038
|
process.exit(result.detected ? 0 : 1);
|
|
1095
1039
|
});
|
|
1096
1040
|
|
|
1097
|
-
// Evaluate completion command - LLM-based completion evaluation for auto mode
|
|
1041
|
+
// Evaluate completion command - LLM-based completion evaluation for auto mode (internal)
|
|
1098
1042
|
program
|
|
1099
1043
|
.command('evaluate-completion <increment-id>')
|
|
1100
1044
|
.description('Evaluate whether an auto mode session should be considered complete')
|
|
1045
|
+
|
|
1101
1046
|
.option('--model <model>', 'Model for LLM evaluation: haiku or sonnet (default: sonnet)')
|
|
1102
1047
|
.option('--timeout <ms>', 'Timeout in milliseconds (default: 45000)', parseInt)
|
|
1103
1048
|
.option('--silent', 'Minimal output')
|
|
@@ -1111,10 +1056,11 @@ program
|
|
|
1111
1056
|
process.exit(result.complete ? 0 : 1);
|
|
1112
1057
|
});
|
|
1113
1058
|
|
|
1114
|
-
// Reflect stop command - Extract learnings at session end (called by stop hook)
|
|
1059
|
+
// Reflect stop command - Extract learnings at session end (internal, called by stop hook)
|
|
1115
1060
|
program
|
|
1116
1061
|
.command('reflect-stop <transcript-path>')
|
|
1117
1062
|
.description('Extract learnings from session transcript (called by stop hook)')
|
|
1063
|
+
|
|
1118
1064
|
.option('-s, --silent', 'Silent mode - output JSON only')
|
|
1119
1065
|
.option('-m, --model <model>', 'Model to use (haiku, sonnet, opus)')
|
|
1120
1066
|
.option('--migrate', 'Run migration of old memory files first')
|
|
@@ -1123,10 +1069,11 @@ program
|
|
|
1123
1069
|
await reflectStopCommand(transcriptPath, options);
|
|
1124
1070
|
});
|
|
1125
1071
|
|
|
1126
|
-
// Detect project command - Analyze project files and suggest plugins
|
|
1072
|
+
// Detect project command - Analyze project files and suggest plugins (internal)
|
|
1127
1073
|
program
|
|
1128
1074
|
.command('detect-project [path]')
|
|
1129
1075
|
.description('Detect project type from files and suggest plugins to install')
|
|
1076
|
+
|
|
1130
1077
|
.option('--name <name>', 'Increment name for legacy name-based detection')
|
|
1131
1078
|
.option('--description <text>', 'Description for legacy name-based detection')
|
|
1132
1079
|
.option('--install', 'Also install detected plugins after detection')
|
|
@@ -1138,19 +1085,6 @@ program
|
|
|
1138
1085
|
process.exit(result.types.length > 0 ? 0 : 1);
|
|
1139
1086
|
});
|
|
1140
1087
|
|
|
1141
|
-
// Migrate to lazy loading command
|
|
1142
|
-
program
|
|
1143
|
-
.command('migrate-lazy')
|
|
1144
|
-
.description('Migrate to lazy loading mode (router-only, on-demand plugins)')
|
|
1145
|
-
.option('--rollback', 'Rollback to pre-migration full installation')
|
|
1146
|
-
.option('-y, --yes', 'Skip confirmation prompt')
|
|
1147
|
-
.option('-v, --verbose', 'Show detailed output')
|
|
1148
|
-
.option('--dry-run', 'Preview without making changes')
|
|
1149
|
-
.action(async (options) => {
|
|
1150
|
-
const { migrateLazyCommand } = await import('../dist/src/cli/commands/migrate-lazy.js');
|
|
1151
|
-
await migrateLazyCommand(options);
|
|
1152
|
-
});
|
|
1153
|
-
|
|
1154
1088
|
// Export skills command - Export to Agent Skills open standard
|
|
1155
1089
|
program
|
|
1156
1090
|
.command('export-skills')
|
|
@@ -1242,8 +1176,8 @@ program.on('--help', () => {
|
|
|
1242
1176
|
console.log(' $ specweave set-sync-target 0008 # Set sync target for increment');
|
|
1243
1177
|
console.log(' $ specweave set-sync-target 0008 -v # Show resolution path');
|
|
1244
1178
|
console.log(' $ specweave set-sync-target 0008 --validate-only # Validate only');
|
|
1245
|
-
console.log(' $ specweave refresh-marketplace # Lazy mode: router only (~500
|
|
1246
|
-
console.log(' $ specweave refresh-marketplace --all # Legacy mode: all plugins (~60K
|
|
1179
|
+
console.log(' $ specweave refresh-marketplace # Lazy mode: router only (~500 chars)');
|
|
1180
|
+
console.log(' $ specweave refresh-marketplace --all # Legacy mode: all plugins (~60K chars)');
|
|
1247
1181
|
console.log(' $ specweave refresh-marketplace --force # Force reinstall (clears cache)');
|
|
1248
1182
|
console.log(' $ specweave update # Update CLI + instructions + config');
|
|
1249
1183
|
console.log(' $ specweave update --plugins # Also refresh marketplace plugins');
|
|
@@ -1323,15 +1257,10 @@ program
|
|
|
1323
1257
|
(async () => {
|
|
1324
1258
|
await checkForDuplicates();
|
|
1325
1259
|
|
|
1326
|
-
//
|
|
1327
|
-
|
|
1328
|
-
const
|
|
1329
|
-
|
|
1330
|
-
} catch (error) {
|
|
1331
|
-
// Silently fail if command not available (may not be built yet)
|
|
1332
|
-
if (process.env.DEBUG) {
|
|
1333
|
-
console.error(chalk.dim(`[DEBUG] Failed to register delete-feature command: ${error}`));
|
|
1334
|
-
}
|
|
1260
|
+
// Hide internal-only commands from --help (still callable by hooks)
|
|
1261
|
+
for (const name of ['detect-intent', 'evaluate-completion', 'reflect-stop', 'detect-project']) {
|
|
1262
|
+
const cmd = program.commands.find(c => c.name() === name);
|
|
1263
|
+
if (cmd) cmd._hidden = true;
|
|
1335
1264
|
}
|
|
1336
1265
|
|
|
1337
1266
|
// Parse arguments
|
|
@@ -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;--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}.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-full{top:100%}.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-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-\[500px\]{max-height:500px}.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%}.w-px{width:1px}.max-w-\[120px\]{max-width:120px}.max-w-\[180px\]{max-width:180px}.max-w-\[200px\]{max-width:200px}.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)}.-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}.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)}: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-400{background-color:var(--color-blue-400)}.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-400{background-color:var(--color-gray-400)}.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-950{background-color:var(--color-gray-950)}.bg-green-400{background-color:var(--color-green-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-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}.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}.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\: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-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.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}}
|