declare-cc 1.0.7 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +153 -187
- package/dist/client/assets/index-BVuhr02G.css +1 -0
- package/dist/client/assets/index-DujGXAYw.js +9 -0
- package/dist/client/index.html +23 -0
- package/dist/index.js +17459 -0
- package/package.json +38 -45
- package/src/agents/prompts/00-research.md +90 -0
- package/src/agents/prompts/01-vision.md +38 -0
- package/src/agents/prompts/02-declarations.md +47 -0
- package/src/agents/prompts/03-milestones.md +43 -0
- package/src/agents/prompts/04-actions.md +90 -0
- package/src/agents/prompts/05-execution.md +63 -0
- package/src/agents/prompts/06-verification.md +104 -0
- package/LICENSE +0 -21
- package/agents/declare-codebase-mapper.md +0 -761
- package/agents/declare-debugger.md +0 -1198
- package/agents/declare-executor.md +0 -353
- package/agents/declare-integration-checker.md +0 -440
- package/agents/declare-plan-checker.md +0 -608
- package/agents/declare-planner.md +0 -1015
- package/agents/declare-research-synthesizer.md +0 -309
- package/agents/declare-researcher.md +0 -484
- package/agents/declare-roadmapper.md +0 -639
- package/agents/declare-verifier.md +0 -555
- package/bin/declare.js +0 -16
- package/bin/install.js +0 -1907
- package/commands/declare/actions.md +0 -113
- package/commands/declare/add-todo.md +0 -41
- package/commands/declare/audit.md +0 -76
- package/commands/declare/check-todos.md +0 -125
- package/commands/declare/complete-milestone.md +0 -215
- package/commands/declare/dashboard.md +0 -65
- package/commands/declare/debug.md +0 -162
- package/commands/declare/discuss.md +0 -65
- package/commands/declare/execute.md +0 -521
- package/commands/declare/future.md +0 -72
- package/commands/declare/health.md +0 -92
- package/commands/declare/help.md +0 -31
- package/commands/declare/init.md +0 -39
- package/commands/declare/map-codebase.md +0 -149
- package/commands/declare/milestones.md +0 -98
- package/commands/declare/new-cycle.md +0 -172
- package/commands/declare/new-project.md +0 -565
- package/commands/declare/pause.md +0 -138
- package/commands/declare/plan.md +0 -320
- package/commands/declare/prioritize.md +0 -65
- package/commands/declare/progress.md +0 -116
- package/commands/declare/quick.md +0 -119
- package/commands/declare/reapply-patches.md +0 -178
- package/commands/declare/research.md +0 -267
- package/commands/declare/resume.md +0 -146
- package/commands/declare/set-profile.md +0 -66
- package/commands/declare/settings.md +0 -119
- package/commands/declare/status.md +0 -65
- package/commands/declare/trace.md +0 -81
- package/commands/declare/update.md +0 -251
- package/commands/declare/verify.md +0 -65
- package/commands/declare/visualize.md +0 -74
- package/dist/declare-tools.cjs +0 -9428
- package/dist/public/app.js +0 -9086
- package/dist/public/index.html +0 -4292
- package/hooks/declare-activity.js +0 -106
- package/hooks/declare-check-update.js +0 -62
- package/hooks/declare-server.js +0 -116
- package/hooks/declare-statusline.js +0 -91
- package/scripts/build-hooks.js +0 -42
- package/scripts/release.js +0 -50
- package/templates/future.md +0 -4
- package/templates/milestones.md +0 -11
- package/workflows/actions.md +0 -89
- package/workflows/discuss.md +0 -476
- package/workflows/future.md +0 -185
- package/workflows/milestones.md +0 -87
- package/workflows/scope.md +0 -94
- package/workflows/verify.md +0 -504
package/README.md
CHANGED
|
@@ -1,262 +1,228 @@
|
|
|
1
|
-
|
|
1
|
+
# Declare
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
**Future-driven development for AI agents.**
|
|
4
4
|
|
|
5
|
-
**
|
|
5
|
+
Declare flips the script on project planning. Instead of task lists, you write **declarations** — verifiable statements about what will be true when your project succeeds. AI agents then derive milestones, plan actions, execute code, and verify results — all traceable back to the future you declared.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
```
|
|
8
|
+
npx dcl
|
|
9
|
+
```
|
|
9
10
|
|
|
10
|
-
|
|
11
|
+
## Why Declare
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
**You don't manage tasks. You declare futures.**
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
Most planning tools track what you're *doing*. Declare tracks what must be *true*. This distinction matters because:
|
|
15
16
|
|
|
16
|
-
|
|
17
|
+
- **Declarations are verifiable.** "Users can log in via OAuth" is either true or false. "Implement auth" is vague forever.
|
|
18
|
+
- **Milestones are states, not tasks.** "The database supports multi-tenancy" vs "design the schema." States can be checked; tasks just get checked off.
|
|
19
|
+
- **Actions have causal context.** Every action knows *why* it exists — which milestone it advances, which declaration it ultimately serves. Agents never lose the plot.
|
|
20
|
+
- **Verification is honest.** The verifier checks if the *outcome* holds, not if actions were completed. Stub implementations get flagged. Empty files get caught.
|
|
17
21
|
|
|
18
|
-
|
|
22
|
+
## How it works
|
|
19
23
|
|
|
20
|
-
```bash
|
|
21
|
-
npm install --save-dev declare-cc
|
|
22
24
|
```
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
```json
|
|
27
|
-
{
|
|
28
|
-
"scripts": {
|
|
29
|
-
"plan": "dcl"
|
|
30
|
-
}
|
|
31
|
-
}
|
|
25
|
+
Declaration (what must be true)
|
|
26
|
+
└── Milestone (what state must hold)
|
|
27
|
+
└── Action (what to do, with verify command)
|
|
32
28
|
```
|
|
33
29
|
|
|
34
|
-
|
|
30
|
+
1. **Declare** — Write present-tense statements about your project's future
|
|
31
|
+
2. **Derive** — AI breaks each declaration into verifiable milestones
|
|
32
|
+
3. **Plan** — AI plans concrete actions with files, verify commands, and wave assignments
|
|
33
|
+
4. **Execute** — Agents write code, wave by wave (parallel within each wave)
|
|
34
|
+
5. **Verify** — Deep verification: artifacts exist, aren't stubs, are properly wired
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
npm run plan
|
|
38
|
-
```
|
|
36
|
+
Everything lives in `.planning/` as markdown files you can read, edit, and version control.
|
|
39
37
|
|
|
40
|
-
|
|
38
|
+
## Getting started
|
|
41
39
|
|
|
42
|
-
|
|
40
|
+
### Start the dashboard
|
|
43
41
|
|
|
44
42
|
```bash
|
|
45
43
|
npx dcl
|
|
46
44
|
```
|
|
47
45
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
---
|
|
51
|
-
|
|
52
|
-
## What This Is
|
|
53
|
-
|
|
54
|
-
Most planning tools start from the present and work forward — "what should we do first?" Declare starts from the future and works backward — "what must be true for this to succeed?"
|
|
55
|
-
|
|
56
|
-
You declare present-tense statements of fact about your project's future. The system derives milestones ("what must be true?") and actions ("what must be done?") through causal structure, then spawns Claude Code agents to execute them — visible in real time through a browser dashboard.
|
|
57
|
-
|
|
58
|
-
---
|
|
59
|
-
|
|
60
|
-
## How It Works
|
|
61
|
-
|
|
62
|
-
Everything happens through the dashboard. `dcl` starts the server and prints the URL — click it to open.
|
|
63
|
-
|
|
64
|
-
### 1. Declare Futures
|
|
65
|
-
|
|
66
|
-
Create declarations directly in the dashboard — present-tense statements about your project's future. Not goals, not wishes.
|
|
67
|
-
|
|
68
|
-
### 2. Derive Milestones
|
|
69
|
-
|
|
70
|
-
Press **P** on a declaration card. The AI works backward: "What must be true for this to hold?" Milestones appear as cards immediately.
|
|
71
|
-
|
|
72
|
-
### 3. Plan Actions
|
|
73
|
-
|
|
74
|
-
Press **P** on a milestone card. The AI derives 2-5 concrete actions. Actions auto-accept and appear as cards — the action list IS the plan.
|
|
75
|
-
|
|
76
|
-
### 4. Review & Approve
|
|
46
|
+
Opens a web dashboard at `http://localhost:3847`. If no `.planning/` folder exists, it scaffolds one and starts the onboarding flow.
|
|
77
47
|
|
|
78
|
-
|
|
48
|
+
### Onboarding
|
|
79
49
|
|
|
80
|
-
|
|
50
|
+
The dashboard guides you through:
|
|
81
51
|
|
|
82
|
-
|
|
52
|
+
1. **Vision** — Describe what success looks like (not *how* to build it)
|
|
53
|
+
2. **Questions** — AI asks clarifying questions to sharpen your vision
|
|
54
|
+
3. **Declarations** — AI generates declaration candidates, you approve
|
|
83
55
|
|
|
84
|
-
|
|
56
|
+
### CLI commands
|
|
85
57
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
▼
|
|
92
|
-
Milestones (M-XX) "What must be true" (derived backward)
|
|
93
|
-
│
|
|
94
|
-
▼
|
|
95
|
-
Actions (A-XX) "What must be done" (derived backward)
|
|
58
|
+
```bash
|
|
59
|
+
dcl # Start server + open dashboard
|
|
60
|
+
dcl init # Scaffold .planning/ in current directory
|
|
61
|
+
dcl status # Print graph health (declarations, milestones, actions)
|
|
62
|
+
dcl mcp # Start MCP server on stdio
|
|
96
63
|
```
|
|
97
64
|
|
|
98
|
-
|
|
65
|
+
## Three interfaces, same capability
|
|
99
66
|
|
|
100
|
-
|
|
67
|
+
Every operation works through all three interfaces:
|
|
101
68
|
|
|
102
|
-
|
|
69
|
+
| Interface | For | How |
|
|
70
|
+
|-----------|-----|-----|
|
|
71
|
+
| **Web dashboard** | Visual users | `npx dcl` — full lifecycle UI |
|
|
72
|
+
| **MCP server** | AI agents | `dcl mcp` — tools, resources, prompts over stdio |
|
|
73
|
+
| **CLI** | Terminal users | `dcl status`, `dcl init` |
|
|
103
74
|
|
|
104
|
-
###
|
|
75
|
+
### MCP integration
|
|
105
76
|
|
|
106
|
-
|
|
77
|
+
Add to your Claude Code settings (`.claude/settings.json`):
|
|
107
78
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
79
|
+
```json
|
|
80
|
+
{
|
|
81
|
+
"mcpServers": {
|
|
82
|
+
"declare": {
|
|
83
|
+
"command": "bun",
|
|
84
|
+
"args": ["run", "/path/to/dcl/src/mcp/index.ts"],
|
|
85
|
+
"env": {
|
|
86
|
+
"DCL_PROJECT_ROOT": "/path/to/your/project"
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
```
|
|
115
92
|
|
|
116
|
-
|
|
93
|
+
**MCP tools:** `get-graph`, `add-declaration`, `update-declaration`, `delete-declaration`, `approve-batch`, `get-status`
|
|
117
94
|
|
|
118
|
-
|
|
119
|
-
|-----|--------|
|
|
120
|
-
| **P** | Plan (derive milestones/actions) |
|
|
121
|
-
| **A** | Approve |
|
|
122
|
-
| **E** | Edit / Execute |
|
|
123
|
-
| **D** | Delete |
|
|
124
|
-
| **Arrow keys** | Navigate cards, drill in/out |
|
|
125
|
-
| **Ctrl+Shift+A** | Approve all visible |
|
|
126
|
-
| **C** | Command bar |
|
|
95
|
+
**MCP resources:** `declare://graph`, `declare://project`, `declare://prompt/{name}`
|
|
127
96
|
|
|
128
|
-
|
|
97
|
+
**MCP prompts:** `onboard`, `derive-milestones`, `plan-actions`
|
|
129
98
|
|
|
130
|
-
##
|
|
99
|
+
## The meta-prompts
|
|
131
100
|
|
|
132
|
-
|
|
101
|
+
Declare's core value is its prompting methodology. Seven standalone markdown files in `src/agents/prompts/` encode the full workflow:
|
|
133
102
|
|
|
134
|
-
|
|
103
|
+
| Prompt | Purpose |
|
|
104
|
+
|--------|---------|
|
|
105
|
+
| `00-research.md` | Codebase mapping before planning — stack, conventions, tests, pitfalls |
|
|
106
|
+
| `01-vision.md` | Extract vivid future state (what, not how) |
|
|
107
|
+
| `02-declarations.md` | Transform vision into falsifiable present-tense statements |
|
|
108
|
+
| `03-milestones.md` | Derive verifiable states backward from declarations |
|
|
109
|
+
| `04-actions.md` | Plan actions with must-haves, verify commands, wave assignments |
|
|
110
|
+
| `05-execution.md` | Execute with causal context + write tests alongside code |
|
|
111
|
+
| `06-verification.md` | 3-level check: exists, substantive (not stub), wired (actually used) |
|
|
135
112
|
|
|
136
|
-
|
|
137
|
-
2. After the server is listening, it writes the port number to `.planning/server.port` (plain text, e.g. `62964`)
|
|
138
|
-
3. On shutdown (SIGINT, SIGTERM, process exit), the file is deleted
|
|
139
|
-
4. Next time `dcl` runs, it reads the port file. If the server is still alive, it reuses it. If the file is stale (server crashed), it cleans up and starts fresh.
|
|
113
|
+
Each prompt is self-contained and doubles as documentation. They're exposed as MCP resources so any agent can read them.
|
|
140
114
|
|
|
141
|
-
|
|
115
|
+
## Key concepts
|
|
142
116
|
|
|
143
|
-
|
|
117
|
+
### Declarations
|
|
144
118
|
|
|
145
|
-
|
|
146
|
-
const port = fs.readFileSync('<project>/.planning/server.port', 'utf8').trim();
|
|
147
|
-
// Verify it's alive:
|
|
148
|
-
// GET http://localhost:<port>/api/graph → 200 = running
|
|
149
|
-
// Embed dashboard:
|
|
150
|
-
// <iframe src="http://localhost:<port>/" />
|
|
151
|
-
```
|
|
119
|
+
Present-tense statements about the future. Not goals or tasks — *truths that will hold*.
|
|
152
120
|
|
|
153
|
-
|
|
121
|
+
```markdown
|
|
122
|
+
## D-01: Users can search the full product catalog in under 200ms
|
|
154
123
|
|
|
155
|
-
|
|
156
|
-
|
|
124
|
+
**Statement:** Any search query against the product catalog returns relevant results
|
|
125
|
+
within 200ms at the 95th percentile, with zero downtime during index rebuilds.
|
|
126
|
+
**Why:** Search is the primary discovery mechanism. If it's slow, users browse Amazon instead.
|
|
157
127
|
```
|
|
158
128
|
|
|
159
|
-
|
|
129
|
+
### Milestones
|
|
160
130
|
|
|
161
|
-
|
|
131
|
+
States that must independently hold. Derived backward from declarations.
|
|
162
132
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
133
|
+
```
|
|
134
|
+
M-01: Full-text search index covers all product fields
|
|
135
|
+
M-02: Search API responds within 200ms p95 under load
|
|
136
|
+
M-03: Index rebuilds happen without search downtime
|
|
167
137
|
```
|
|
168
138
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
## For Agents
|
|
172
|
-
|
|
173
|
-
If you're an AI agent (Claude Code, Cursor, etc.) working in a project that uses Declare, here's what you need to know:
|
|
174
|
-
|
|
175
|
-
### Project state lives in `.planning/`
|
|
139
|
+
### Actions with must-haves
|
|
176
140
|
|
|
177
|
-
|
|
178
|
-
- **`MILESTONES.md`** — Milestones derived backward from futures
|
|
179
|
-
- **`.planning/milestones/M-XX-slug/PLAN.md`** — Actions for each milestone (title, produces, causes)
|
|
180
|
-
- **`.planning/STATE.md`** — Current project state and decisions
|
|
181
|
-
- **`.planning/PROJECT.md`** — Project context and background
|
|
141
|
+
Each plan declares what must be true (truths), what files must exist (artifacts), and how components connect (key links). Actions include runnable verify commands.
|
|
182
142
|
|
|
183
|
-
|
|
143
|
+
```markdown
|
|
144
|
+
**Truths:**
|
|
145
|
+
- Search returns results for partial matches
|
|
146
|
+
- Index rebuilds don't drop existing results
|
|
184
147
|
|
|
185
|
-
|
|
148
|
+
**Artifacts:**
|
|
149
|
+
- `src/search/index.ts` — Search index builder
|
|
150
|
+
- `src/search/query.ts` — Query parser and executor
|
|
186
151
|
|
|
187
|
-
|
|
188
|
-
|
|
152
|
+
**Key Links:**
|
|
153
|
+
- from: `src/search/index.ts` -> to: `src/api/search.ts` -> via: searchIndex.query()
|
|
189
154
|
```
|
|
190
155
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
### Slash commands available to you
|
|
194
|
-
|
|
195
|
-
If you're running inside Claude Code with declare-cc installed, these slash commands are available:
|
|
196
|
-
|
|
197
|
-
- `/declare:status` — See where the project stands
|
|
198
|
-
- `/declare:execute M-XX` — Execute actions for a milestone
|
|
199
|
-
- `/declare:verify M-XX` — Validate deliverables
|
|
200
|
-
- `/declare:trace A-XX` — Understand why an action exists (walk the why-chain)
|
|
201
|
-
- `/declare:progress` — Find the next thing to work on
|
|
202
|
-
- `/declare:help` — See all commands
|
|
156
|
+
### Wave execution
|
|
203
157
|
|
|
204
|
-
|
|
158
|
+
Actions are assigned to waves. Wave 1 runs first, Wave 2 after Wave 1 completes. Actions within the same wave run concurrently.
|
|
205
159
|
|
|
206
|
-
|
|
160
|
+
### Deep verification
|
|
207
161
|
|
|
208
|
-
|
|
209
|
-
|--------|------|---------|
|
|
210
|
-
| GET | `/api/graph` | Full DAG (declarations, milestones, actions) |
|
|
211
|
-
| GET | `/api/status` | Integrity/alignment metrics |
|
|
212
|
-
| GET | `/api/agents` | Running/completed agents |
|
|
213
|
-
| GET | `/api/events` | SSE stream (real-time updates) |
|
|
214
|
-
| POST | `/api/review` | Approve/reject a node |
|
|
215
|
-
| POST | `/api/action/:id/execute` | Execute an action |
|
|
162
|
+
The verifier doesn't just check if files exist. Three levels:
|
|
216
163
|
|
|
217
|
-
|
|
164
|
+
1. **Exists** — Is the artifact at the expected path?
|
|
165
|
+
2. **Substantive** — Is it real code, not a stub? (`return null`, `// TODO`, empty bodies get flagged)
|
|
166
|
+
3. **Wired** — Is it actually used? (imports that are never called, components that are never rendered)
|
|
218
167
|
|
|
219
|
-
##
|
|
168
|
+
## Project structure
|
|
220
169
|
|
|
221
|
-
|
|
170
|
+
```
|
|
171
|
+
src/
|
|
172
|
+
agents/ # Claude agent spawning + prompts
|
|
173
|
+
prompts/ # 7 standalone meta-prompt markdown files
|
|
174
|
+
claude.ts # AI runner (SDK integration)
|
|
175
|
+
runner.ts # Agent registry + lifecycle
|
|
176
|
+
server/ # Hono API server
|
|
177
|
+
routes/ # graph.ts, agents.ts, onboard.ts
|
|
178
|
+
sse.ts # Real-time event streaming
|
|
179
|
+
core/ # Planning engine
|
|
180
|
+
dag.ts # Three-layer DAG (declarations → milestones → actions)
|
|
181
|
+
graph.ts # Graph builder from disk artifacts
|
|
182
|
+
artifacts/ # Markdown parsers/writers (FUTURE.md, MILESTONES.md, PLAN.md)
|
|
183
|
+
app/ # React 19 dashboard
|
|
184
|
+
cli/ # CLI entry point
|
|
185
|
+
mcp/ # MCP server (tools, resources, prompts)
|
|
186
|
+
```
|
|
222
187
|
|
|
223
|
-
|
|
224
|
-
|---------|--------------|
|
|
225
|
-
| `/declare:future` | Guided conversation to capture futures |
|
|
226
|
-
| `/declare:milestones` | Derive milestones from declarations |
|
|
227
|
-
| `/declare:actions M-XX` | Derive actions for a milestone |
|
|
228
|
-
| `/declare:execute M-XX` | Execute actions |
|
|
229
|
-
| `/declare:verify M-XX` | Conversational UAT |
|
|
230
|
-
| `/declare:audit M-XX` | Cross-reference against declarations |
|
|
231
|
-
| `/declare:trace A-XX` | Walk the why-chain to its declaration |
|
|
232
|
-
| `/declare:status` | Graph health and layer counts |
|
|
233
|
-
| `/declare:dashboard` | Start server and print URL |
|
|
234
|
-
| `/declare:help` | Show all commands |
|
|
188
|
+
~5,000 lines of TypeScript. The folder structure maps 1:1 to concepts.
|
|
235
189
|
|
|
236
|
-
|
|
190
|
+
## Planning files
|
|
237
191
|
|
|
238
|
-
|
|
192
|
+
All state lives in `.planning/` as human-readable markdown:
|
|
239
193
|
|
|
240
194
|
```
|
|
241
195
|
.planning/
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
196
|
+
FUTURE.md # Declarations (D-01, D-02, ...)
|
|
197
|
+
MILESTONES.md # Milestone table (M-01, M-02, ...)
|
|
198
|
+
PROJECT.md # Project context
|
|
199
|
+
config.json # Settings
|
|
200
|
+
agent-state.json # Persisted agent registry
|
|
201
|
+
milestones/
|
|
202
|
+
M-01-search-index/
|
|
203
|
+
PLAN.md # Actions for this milestone (A-01, A-02, ...)
|
|
250
204
|
```
|
|
251
205
|
|
|
252
|
-
|
|
206
|
+
## Development
|
|
253
207
|
|
|
254
|
-
|
|
208
|
+
```bash
|
|
209
|
+
bun install
|
|
210
|
+
bun dev # Start server + client with hot reload
|
|
211
|
+
bun test # Unit tests (vitest)
|
|
212
|
+
bun run test:e2e # E2E tests (playwright)
|
|
213
|
+
bun run lint # Type check (tsc --noEmit)
|
|
214
|
+
bun run build # Production build
|
|
215
|
+
```
|
|
255
216
|
|
|
256
|
-
|
|
217
|
+
## Tech stack
|
|
257
218
|
|
|
258
|
-
|
|
219
|
+
- **Runtime:** Bun
|
|
220
|
+
- **Server:** Hono
|
|
221
|
+
- **Frontend:** React 19 + TanStack Router/Query + Tailwind 4
|
|
222
|
+
- **AI:** Claude Agent SDK (local auth, no API key needed)
|
|
223
|
+
- **MCP:** @modelcontextprotocol/sdk
|
|
224
|
+
- **Tests:** Vitest (unit) + Playwright (E2E)
|
|
259
225
|
|
|
260
|
-
|
|
226
|
+
## License
|
|
261
227
|
|
|
262
|
-
|
|
228
|
+
MIT
|
|
@@ -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-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--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}}}@layer theme{:root,:host{--font-sans:var(--font-sans);--font-mono:var(--font-mono);--color-red-50:oklch(97.1% .013 17.38);--color-red-300:oklch(80.8% .114 19.571);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-950:oklch(25.8% .092 26.042);--spacing:.25rem;--container-xl:36rem;--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);--font-weight-medium:500;--font-weight-semibold:600;--tracking-wide:.025em;--tracking-wider:.05em;--tracking-widest:.1em;--leading-relaxed:1.625;--shadow-xs:var(--shadow-xs);--shadow-sm:var(--shadow-sm);--shadow-md:var(--shadow-md);--shadow-lg:var(--shadow-lg);--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);--color-node-decl:var(--node-decl);--color-node-decl-bg:var(--node-decl-bg);--color-node-mile:var(--node-mile);--color-node-mile-bg:var(--node-mile-bg);--color-node-act:var(--node-act);--color-node-act-bg:var(--node-act-bg)}}@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}*{border-color:var(--border);outline-color:var(--ring)}@supports (color:color-mix(in lab,red,red)){*{outline-color:color-mix(in oklab,var(--ring) 50%,transparent)}}body{background-color:var(--background);font-family:var(--font-sans);color:var(--foreground);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}}@layer components;@layer utilities{.visible{visibility:visible}.static{position:static}.sticky{position:sticky}.end{inset-inline-end:var(--spacing)}.bottom-0{bottom:calc(var(--spacing) * 0)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mr-1{margin-right:calc(var(--spacing) * 1)}.mr-2{margin-right:calc(var(--spacing) * 2)}.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)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-1\.5{margin-left:calc(var(--spacing) * 1.5)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-4{margin-left:calc(var(--spacing) * 4)}.ml-9{margin-left:calc(var(--spacing) * 9)}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.hidden{display:none}.inline{display:inline}.table{display:table}.h-2{height:calc(var(--spacing) * 2)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-px{height:1px}.h-screen{height:100vh}.max-h-20{max-height:calc(var(--spacing) * 20)}.max-h-24{max-height:calc(var(--spacing) * 24)}.max-h-40{max-height:calc(var(--spacing) * 40)}.w-2{width:calc(var(--spacing) * 2)}.w-3{width:calc(var(--spacing) * 3)}.w-4{width:calc(var(--spacing) * 4)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-72{width:calc(var(--spacing) * 72)}.w-\[480px\]{width:480px}.w-full{width:100%}.max-w-xl{max-width:var(--container-xl)}.min-w-0{min-width:calc(var(--spacing) * 0)}.flex-1{flex:1}.shrink-0{flex-shrink:0}.animate-pulse{animation:var(--animate-pulse)}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.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)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}: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-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-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * 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)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:calc(var(--radius) * 1.333)}.rounded-md{border-radius:var(--radius)}.border{border-style:var(--tw-border-style);border-width:1px}.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{border-left-style:var(--tw-border-style);border-left-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-border{border-color:var(--border)}.border-brand{border-color:var(--brand)}.border-muted-foreground\/30{border-color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.border-muted-foreground\/30{border-color:color-mix(in oklab,var(--muted-foreground) 30%,transparent)}}.border-node-act\/20{border-color:var(--node-act)}@supports (color:color-mix(in lab,red,red)){.border-node-act\/20{border-color:color-mix(in oklab,var(--node-act) 20%,transparent)}}.border-node-decl\/20{border-color:var(--node-decl)}@supports (color:color-mix(in lab,red,red)){.border-node-decl\/20{border-color:color-mix(in oklab,var(--node-decl) 20%,transparent)}}.border-node-mile\/20{border-color:var(--node-mile)}@supports (color:color-mix(in lab,red,red)){.border-node-mile\/20{border-color:color-mix(in oklab,var(--node-mile) 20%,transparent)}}.border-red-300{border-color:var(--color-red-300)}.border-warning\/40{border-color:var(--warning)}@supports (color:color-mix(in lab,red,red)){.border-warning\/40{border-color:color-mix(in oklab,var(--warning) 40%,transparent)}}.bg-accent{background-color:var(--accent)}.bg-border{background-color:var(--border)}.bg-brand,.bg-brand\/10{background-color:var(--brand)}@supports (color:color-mix(in lab,red,red)){.bg-brand\/10{background-color:color-mix(in oklab,var(--brand) 10%,transparent)}}.bg-brand\/20{background-color:var(--brand)}@supports (color:color-mix(in lab,red,red)){.bg-brand\/20{background-color:color-mix(in oklab,var(--brand) 20%,transparent)}}.bg-card{background-color:var(--card)}.bg-destructive,.bg-destructive\/10{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.bg-destructive\/10{background-color:color-mix(in oklab,var(--destructive) 10%,transparent)}}.bg-muted,.bg-muted\/60{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.bg-muted\/60{background-color:color-mix(in oklab,var(--muted) 60%,transparent)}}.bg-node-act-bg{background-color:var(--node-act-bg)}.bg-node-decl-bg{background-color:var(--node-decl-bg)}.bg-node-mile-bg{background-color:var(--node-mile-bg)}.bg-red-50{background-color:var(--color-red-50)}.bg-success,.bg-success\/10{background-color:var(--success)}@supports (color:color-mix(in lab,red,red)){.bg-success\/10{background-color:color-mix(in oklab,var(--success) 10%,transparent)}}.bg-warning,.bg-warning\/5{background-color:var(--warning)}@supports (color:color-mix(in lab,red,red)){.bg-warning\/5{background-color:color-mix(in oklab,var(--warning) 5%,transparent)}}.bg-warning\/10{background-color:var(--warning)}@supports (color:color-mix(in lab,red,red)){.bg-warning\/10{background-color:color-mix(in oklab,var(--warning) 10%,transparent)}}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.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-8{padding-inline:calc(var(--spacing) * 8)}.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-3{padding-block:calc(var(--spacing) * 3)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-16{padding-block:calc(var(--spacing) * 16)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pb-4{padding-bottom: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-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-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[15px\]{font-size:15px}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.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-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.whitespace-pre-wrap{white-space:pre-wrap}.text-brand{color:var(--brand)}.text-brand-foreground{color:var(--brand-foreground)}.text-destructive{color:var(--destructive)}.text-foreground,.text-foreground\/80{color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.text-foreground\/80{color:color-mix(in oklab,var(--foreground) 80%,transparent)}}.text-muted-foreground,.text-muted-foreground\/60{color:var(--muted-foreground)}@supports (color:color-mix(in lab,red,red)){.text-muted-foreground\/60{color:color-mix(in oklab,var(--muted-foreground) 60%,transparent)}}.text-node-act{color:var(--node-act)}.text-node-decl{color:var(--node-decl)}.text-node-mile{color:var(--node-mile)}.text-primary{color:var(--primary)}.text-red-700{color:var(--color-red-700)}.text-success{color:var(--success)}.text-warning{color:var(--warning)}.uppercase{text-transform:uppercase}.italic{font-style:italic}.line-through{text-decoration-line:line-through}.opacity-0{opacity:0}.opacity-60{opacity:.6}.ring{--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-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + 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-brand\/40{--tw-ring-color:var(--brand)}@supports (color:color-mix(in lab,red,red)){.ring-brand\/40{--tw-ring-color:color-mix(in oklab, var(--brand) 40%, transparent)}}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.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))}@media(hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-muted-foreground::placeholder{color:var(--muted-foreground)}@media(hover:hover){.hover\:border-destructive\/30:hover{border-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:border-destructive\/30:hover{border-color:color-mix(in oklab,var(--destructive) 30%,transparent)}}.hover\:border-foreground\/30:hover{border-color:var(--foreground)}@supports (color:color-mix(in lab,red,red)){.hover\:border-foreground\/30:hover{border-color:color-mix(in oklab,var(--foreground) 30%,transparent)}}.hover\:bg-accent:hover{background-color:var(--accent)}.hover\:bg-destructive\/10:hover{background-color:var(--destructive)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-destructive\/10:hover{background-color:color-mix(in oklab,var(--destructive) 10%,transparent)}}.hover\:bg-muted\/50:hover{background-color:var(--muted)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-muted\/50:hover{background-color:color-mix(in oklab,var(--muted) 50%,transparent)}}.hover\:bg-warning\/10:hover{background-color:var(--warning)}@supports (color:color-mix(in lab,red,red)){.hover\:bg-warning\/10:hover{background-color:color-mix(in oklab,var(--warning) 10%,transparent)}}.hover\:text-destructive:hover{color:var(--destructive)}.hover\:text-foreground:hover{color:var(--foreground)}.hover\:opacity-90:hover{opacity:.9}.hover\:brightness-90:hover{--tw-brightness:brightness(90%);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,)}.hover\:brightness-\[0\.98\]:hover{--tw-brightness:brightness(.98);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,)}}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + 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-brand\/40:focus{--tw-ring-color:var(--brand)}@supports (color:color-mix(in lab,red,red)){.focus\:ring-brand\/40:focus{--tw-ring-color:color-mix(in oklab, var(--brand) 40%, transparent)}}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}@media(min-width:40rem){.sm\:block{display:block}}.dark\:border-red-800:is(.dark *){border-color:var(--color-red-800)}.dark\:bg-red-950:is(.dark *){background-color:var(--color-red-950)}.dark\:text-red-300:is(.dark *){color:var(--color-red-300)}@media(hover:hover){.dark\:hover\:brightness-110:is(.dark *):hover{--tw-brightness:brightness(110%);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,)}}}:root{--background:oklch(100% 0 0);--foreground:oklch(14.5% .01 60);--card:oklch(100% 0 0);--card-foreground:oklch(14.5% .01 60);--popover:oklch(100% 0 0);--popover-foreground:oklch(14.5% .01 60);--muted:oklch(95.5% .006 80);--muted-foreground:oklch(46% .012 60);--accent:oklch(95.5% .008 80);--accent-foreground:oklch(20% .01 60);--border:oklch(91.5% .005 80);--input:oklch(88% .006 80);--ring:oklch(20.5% .012 60);--primary:oklch(20.5% .012 60);--primary-foreground:oklch(98% .005 60);--secondary:oklch(95.5% .006 80);--secondary-foreground:oklch(20% .01 60);--destructive:oklch(58% .22 27);--destructive-foreground:oklch(97% .01 17);--success:oklch(60% .17 149);--success-foreground:oklch(98% .02 156);--warning:oklch(75% .15 70);--warning-foreground:oklch(99% .02 95);--sidebar:oklch(97.5% .006 80);--sidebar-foreground:oklch(20% .01 60);--sidebar-accent:oklch(94% .012 80);--sidebar-accent-foreground:oklch(20% .01 60);--sidebar-border:oklch(91.5% .005 80);--brand:oklch(89% .2 118);--brand-foreground:oklch(19% .01 107);--node-decl:oklch(45% .15 260);--node-decl-bg:oklch(95% .02 260);--node-mile:oklch(50% .18 290);--node-mile-bg:oklch(95% .03 290);--node-act:oklch(32% .1 155);--node-act-bg:oklch(95% .02 155);--font-sans:"Inter", ui-sans-serif, system-ui, sans-serif;--font-mono:"CommitMono", ui-monospace, SFMono-Regular, Menlo, monospace;--spacing:.25rem;--radius:.375rem;--shadow-xs:oklch(0% 0 0/.03) 0px 1px 2px;--shadow-sm:oklch(0% 0 0/.04) 0px 2px 4px, oklch(0% 0 0/.02) 0px 1px 2px;--shadow-md:oklch(0% 0 0/.06) 0px 4px 12px, oklch(0% 0 0/.04) 0px 2px 4px;--shadow-lg:oklch(0% 0 0/.08) 0px 8px 32px, oklch(0% 0 0/.06) 0px 4px 12px}.dark{--background:oklch(15.5% .005 60);--foreground:oklch(96% .005 60);--card:oklch(18.5% .005 60);--card-foreground:oklch(96% .005 60);--popover:oklch(22% .005 60);--popover-foreground:oklch(96% .005 60);--muted:oklch(23% .005 60);--muted-foreground:oklch(62% .008 60);--accent:oklch(26% .005 60);--accent-foreground:oklch(96% .005 60);--border:oklch(26% .005 60);--input:oklch(28% .005 60);--ring:oklch(82% .01 60);--primary:oklch(82% .01 60);--primary-foreground:oklch(14% .01 60);--secondary:oklch(21% .005 60);--secondary-foreground:oklch(96% .005 60);--destructive:oklch(45% .2 27);--destructive-foreground:oklch(97% .01 17);--success:oklch(45% .15 149);--success-foreground:oklch(97% .02 156);--warning:oklch(65% .15 70);--warning-foreground:oklch(98% .02 95);--sidebar:oklch(17.5% .005 60);--sidebar-foreground:oklch(96% .005 60);--sidebar-accent:oklch(23% .005 60);--sidebar-accent-foreground:oklch(96% .005 60);--sidebar-border:oklch(26% .005 60);--brand:oklch(89% .2 118);--brand-foreground:oklch(14% .01 60);--node-decl:oklch(72% .12 250);--node-decl-bg:oklch(20% .03 250);--node-mile:oklch(72% .15 290);--node-mile-bg:oklch(20% .03 290);--node-act:oklch(72% .14 155);--node-act-bg:oklch(20% .03 155)}@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-leading{syntax:"*";inherits:false}@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}@keyframes pulse{50%{opacity:.5}}
|