runcastle 1.4.2 → 1.4.3
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/bin/runcastle.js +4555 -3931
- package/drizzle/0042_retire_mapped_ideation.sql +3 -0
- package/drizzle/0042_review_gate_run.sql +1 -0
- package/drizzle/0044_icy_daimon_hellstrom.sql +8 -0
- package/drizzle/meta/0042_snapshot.json +1131 -0
- package/drizzle/meta/0044_snapshot.json +1197 -0
- package/drizzle/meta/_journal.json +21 -0
- package/index.js +4552 -3928
- package/package.json +1 -1
- package/skills/burner/implement-ticket.md +5 -3
- package/skills/burner/review-ticket.md +14 -9
- package/skills/burner/verify-fixes.md +3 -1
- package/skills/packs/README.md +10 -17
- package/skills/packs/runcastle/.claude-plugin/plugin.json +1 -1
- package/skills/packs/runcastle/skills/code-review/SKILL.md +1 -1
- package/skills/packs/runcastle/skills/ideate/SKILL.md +8 -25
- package/skills/packs/runcastle/skills/project/SKILL.md +28 -10
- package/skills/packs/runcastle/skills/qa/SKILL.md +2 -6
- package/skills/packs/runcastle/skills/revisit/SKILL.md +8 -10
- package/skills/packs/runcastle/skills/spec/SKILL.md +2 -2
- package/skills/packs/runcastle/skills/tickets/SKILL.md +2 -2
- package/web/assets/index-BAbR9IXb.css +1 -0
- package/web/assets/index-CW8ioVQ6.js +188 -0
- package/web/favicon.svg +7 -5
- package/web/index.html +2 -2
- package/skills/burner/research-waypoint.md +0 -45
- package/skills/packs/runcastle/skills/converge/SKILL.md +0 -54
- package/skills/packs/runcastle/skills/waypoint/SKILL.md +0 -59
- package/web/assets/index-D7diTU3w.css +0 -1
- package/web/assets/index-Ih8W7ADS.js +0 -187
package/web/favicon.svg
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32">
|
|
2
|
-
<!-- Runcastle brand mark,
|
|
3
|
-
gate
|
|
4
|
-
|
|
2
|
+
<!-- Runcastle brand mark, neutral: the castle in `text` on a `canvas` tile,
|
|
3
|
+
its gate a play triangle (negative space via evenodd). The tile keeps the
|
|
4
|
+
white mark visible on a light tab strip. Same silhouette as LOGO_PATH in
|
|
5
|
+
src/icons.tsx, scaled to 80% to sit inside the tile. -->
|
|
6
|
+
<rect width="32" height="32" rx="7" fill="#0a0c11"/>
|
|
5
7
|
<path fill-rule="evenodd" clip-rule="evenodd"
|
|
6
|
-
d="M6.
|
|
7
|
-
fill="#
|
|
8
|
+
d="M6.4 25.2 V6.8 H11.2 V10.8 H13.6 V6.8 H18.4 V10.8 H20.8 V6.8 H25.6 V25.2 H6.4 Z M13.2 14 L20.4 18 L13.2 22 Z"
|
|
9
|
+
fill="#eceef4"/>
|
|
8
10
|
</svg>
|
package/web/index.html
CHANGED
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
document.documentElement.dataset.theme = t
|
|
19
19
|
})()
|
|
20
20
|
</script>
|
|
21
|
-
<script type="module" crossorigin src="/assets/index-
|
|
22
|
-
<link rel="stylesheet" crossorigin href="/assets/index-
|
|
21
|
+
<script type="module" crossorigin src="/assets/index-CW8ioVQ6.js"></script>
|
|
22
|
+
<link rel="stylesheet" crossorigin href="/assets/index-BAbR9IXb.css">
|
|
23
23
|
</head>
|
|
24
24
|
<body>
|
|
25
25
|
<div id="root"></div>
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
<!-- Forked from Matt Pocock's research + grilling skills, 2026-07-15, adapted for runcastle's unattended research-waypoint runner (SPEC §13.2). Rendered per research waypoint; the placeholder tokens are filled in by the research workflow. -->
|
|
2
|
-
|
|
3
|
-
# Research this waypoint — unattended
|
|
4
|
-
|
|
5
|
-
You are a single agent in a sandbox on **this run's own temp branch**, `runcastle/research/<slug>/<seq>-<unique>`, forked from the feature branch `feature/<slug>`. Commit there and only there — the run merges your branch back into the feature branch when it lands, and the feature branch stays checked out elsewhere for the whole run, so never check it out or commit to it yourself. You have **one research question**. There is **no human to ask** — no follow-up questions are possible. Everything you need is in this prompt, on the web, and in the repo. Research carefully, write one focused summary, commit it, and stop.
|
|
6
|
-
|
|
7
|
-
## The waypoint
|
|
8
|
-
|
|
9
|
-
```json
|
|
10
|
-
{{WAYPOINT_JSON}}
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
## Feature context
|
|
14
|
-
|
|
15
|
-
{{FEATURE_BRIEF}}
|
|
16
|
-
|
|
17
|
-
## Feature docs (spec / decisions digest)
|
|
18
|
-
|
|
19
|
-
{{DOCS_DIGEST}}
|
|
20
|
-
|
|
21
|
-
## How to work
|
|
22
|
-
|
|
23
|
-
1. **Understand the question.** Read the waypoint's `title` and `question`. This is a *research* node: its job is to produce a well-sourced answer that later ideation/spec sessions can build on — not to change product code.
|
|
24
|
-
|
|
25
|
-
2. **Research web + repo.** Search the web for authoritative, current sources (official docs, primary references, well-regarded write-ups) and read the parts of *this* repo the question bears on. Prefer primary sources; note version/date where it matters. Reconcile conflicts rather than papering over them.
|
|
26
|
-
|
|
27
|
-
3. **Write ONE summary doc** at exactly:
|
|
28
|
-
|
|
29
|
-
`{{RESEARCH_DOC_PATH}}`
|
|
30
|
-
|
|
31
|
-
Create the `research/` directory if it does not exist. The doc is the deliverable — structure it so a reader who never saw this prompt can act on it:
|
|
32
|
-
- a one-line **answer** up top,
|
|
33
|
-
- the **findings** with reasoning,
|
|
34
|
-
- a short **sources** list (links/titles), and
|
|
35
|
-
- any **open questions** the research could not close.
|
|
36
|
-
|
|
37
|
-
Keep it tight and honest. If the question cannot be answered from available material, say so plainly in the doc and record what would be needed.
|
|
38
|
-
|
|
39
|
-
4. **Commit the doc to the branch you are on.** Stage only your new/changed doc under `docs/features/<slug>/` and commit with a clear message, e.g. `research(<seq>): <summary>`. The run reads your exit state from the commit — **a doc with no commit is read as no research landed** — and merges the commit onto the feature branch for you.
|
|
40
|
-
|
|
41
|
-
## Hard rules
|
|
42
|
-
|
|
43
|
-
- **Stay in scope.** Answer this one question. Do not touch product code, other docs, or other waypoints' territory. If you surface adjacent questions worth their own waypoint, note them in the doc's *open questions* — do not chase them.
|
|
44
|
-
- **No questions, no guessing into the void.** Resolve ambiguity from the question, the feature docs, and reputable sources. If two readings both fit, take the narrower one and say which you took.
|
|
45
|
-
- **Cite what you rely on.** Every non-obvious claim in the summary should trace to a source or to code you read.
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: converge
|
|
3
|
-
description: Close a mapped feature. Read the compressed knowledge — map.md, decisions.md and the research deliverables — never the waypoint transcripts, then drive spec and tickets out of that one unbroken window. Entry skill for kind=converge sessions.
|
|
4
|
-
disable-model-invocation: false
|
|
5
|
-
---
|
|
6
|
-
<!-- Forked from Matt Pocock's grilling/to-spec/to-tickets discipline, via https://github.com/mattpocock/skills, 2026-07-15, adapted for runcastle mapped ideation -->
|
|
7
|
-
|
|
8
|
-
# Converge — close a mapped feature
|
|
9
|
-
|
|
10
|
-
A mapped feature was too big for one window, so it was charted into a map and its waypoints were worked in their own sessions. Every waypoint is now terminal and the human clicked **Converge**; the feature stays in **Planning** throughout — converging is not a state change, it is the rest of Planning done in one window. Your job: turn the compressed knowledge into a spec and tickets — the exact output an unbroken ideation session produces.
|
|
11
|
-
|
|
12
|
-
## Context hygiene is the whole game
|
|
13
|
-
|
|
14
|
-
Everything happens in this one window. **Never compact. Never `/clear`. Never suggest either.** The map plus the decisions plus the research ARE the compression — that is the whole point of charting a map. Read them once, hold them, and let spec and tickets fall out of the same conversation.
|
|
15
|
-
|
|
16
|
-
## 0. Read the compressed knowledge — and only that
|
|
17
|
-
|
|
18
|
-
Call `mcp__runcastle__get_feature_context`. The injected system prompt carries the slug and the paths; trust `get_feature_context` for the live state. It returns the feature, the current `phase`, the map, the tickets as summary rows (`seq`, `title`, `status`, `goal`; `mcp__runcastle__get_ticket({ seq })` has a ticket's context, acceptance criteria and digest), and its docs in two parts — `docs[]`, inlined in full, and `moreDocs[]`, an index of everything else with a `relPath` and a byte count. A canonical doc too large to inline is listed in `notInlined` instead of `docs[]`: read it with `mcp__runcastle__read_feature_doc({ relPath })` or off disk before acting. Read, in this order:
|
|
19
|
-
|
|
20
|
-
1. **`map.md`** (inlined in `docs[]`) — the destination, the notes, and what was ruled out of scope.
|
|
21
|
-
2. **`decisions.md`** (inlined in `docs[]`) — every decision the waypoint sessions locked. This is the spine of the spec.
|
|
22
|
-
3. **`research/*.md`** — the deliverables the `research` waypoints wrote, one file each, under `docs/features/<slug>/research/`. **These are not inlined.** They appear in `moreDocs[]` with their paths and sizes, and each resolved research waypoint's `summary` in `waypoints[]` names its file (`researched: <title> — see <path>`). Read them with `mcp__runcastle__read_feature_doc({ relPath })`, or straight off disk in this worktree.
|
|
23
|
-
|
|
24
|
-
**Do not skip step 3.** A research waypoint is forbidden to write `decisions.md` — its findings live *only* in its own file. If a whole AFK run went into researching this feature and you converge without opening the file it produced, that run is simply lost, and the spec you write will contradict it. Read every research deliverable the map produced, or say out loud which one you skipped and why.
|
|
25
|
-
|
|
26
|
-
**Do NOT read the waypoint session transcripts.** The map, the decisions and the research deliverables are the compression; trust them. If something is genuinely missing you may check the codebase for a *fact*, but never re-grill the human and never reopen a resolved waypoint — converge, do not re-ideate.
|
|
27
|
-
|
|
28
|
-
If a `map.md` gap is big enough that no spec can be written over it, do not paper over it and do not grill it out here: say so plainly and tell the human to work one more waypoint before converging.
|
|
29
|
-
|
|
30
|
-
## 1. Run the pipeline in this window
|
|
31
|
-
|
|
32
|
-
Invoke `/runcastle:spec` (it writes `spec.md` and completes the `spec` phase); when it returns, invoke `/runcastle:tickets`.
|
|
33
|
-
|
|
34
|
-
Do not open a new session for these. They run here, on top of the compressed knowledge you just read.
|
|
35
|
-
|
|
36
|
-
A converged batch is burned exactly like an ideated one, so the two batch-wide rules `/runcastle:tickets` carries bind here unchanged: the batch closes with **one review ticket**, and before you emit you state the **critical path and the width it leaves against `burnConcurrency`**, reslicing when the chain is longer than roughly total / concurrency. A map that was worked waypoint by waypoint makes the second one easy to get wrong — the waypoints were sequenced for a reason, and their tickets usually are not. Chain two only where the later one reads the earlier one's output.
|
|
37
|
-
|
|
38
|
-
**Re-convergence.** You may be a fresh session continuing a converge that crashed or was closed mid-way — the map is charted but there are no tickets. Do not start over; pick up from whatever is already on disk, which is the only thing that says how far the last session got:
|
|
39
|
-
|
|
40
|
-
- **`spec.md` already exists** (it is in `docs[]`): read it, do **not** rewrite it, and go straight to `/runcastle:tickets`. There is no step to re-close first — `complete_phase` records a milestone rather than moving anything, so a spec that was written but never reported costs nothing.
|
|
41
|
-
- **`spec.md` does not exist**: run `/runcastle:spec` then `/runcastle:tickets` as normal.
|
|
42
|
-
- **Tickets already exist** for this lap: reconcile rather than duplicate — this is the one case where `update_ticket` / `cancel_ticket` beat a second `emit_tickets`.
|
|
43
|
-
|
|
44
|
-
## 2. Parking, not swallowing
|
|
45
|
-
|
|
46
|
-
If something surfaces that is plainly its own feature rather than part of this one, park it: `mcp__runcastle__create_feature({ title, oneLiner, brief, draft: true })` creates a parked draft — no branch, nothing written — with the `brief` carrying why you deferred it and what it must not swallow. Then get back to converging. Drafts are the only feature you may create here; a full create belongs to the project session.
|
|
47
|
-
|
|
48
|
-
## 3. Close — hand off to the human
|
|
49
|
-
|
|
50
|
-
`/runcastle:tickets` ends by emitting tickets to the runcastle store. When it returns, your job is **done**. Tell the human plainly:
|
|
51
|
-
|
|
52
|
-
> Converged. Tickets are in the runcastle UI — review the ticket cards and click **Burn** to start the AFK agents. I'll stop here.
|
|
53
|
-
|
|
54
|
-
Do **not** start burning. Burn and Merge are the only two clicks in the whole pipeline, and both belong to the human. (You do not write code here either — that rule is in your injected prompt and enforced by the edit guard, not restated as advice.)
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: waypoint
|
|
3
|
-
description: The runcastle waypoint session. Work ONE waypoint on a feature's map — grill, prototype, or run a task checklist for its assigned question — write the decision prose to the docs, then resolve the waypoint. Entry skill for kind=waypoint sessions.
|
|
4
|
-
disable-model-invocation: false
|
|
5
|
-
---
|
|
6
|
-
<!-- runcastle mapped-ideation waypoint session (ADR-0001 §13.5) -->
|
|
7
|
-
|
|
8
|
-
# Waypoint — work one node on the map
|
|
9
|
-
|
|
10
|
-
This is a **mapped-ideation** feature: too big for one context window, so it was charted into a *map* of waypoints. You have been handed exactly ONE of them. Your job is narrow and finite: answer its question, write the decision down, resolve it. You are **not** converging the whole feature, writing a spec, or emitting tickets — other sessions and the human own that.
|
|
11
|
-
|
|
12
|
-
## 0. Orient
|
|
13
|
-
|
|
14
|
-
1. Call `mcp__runcastle__get_feature_context`. The injected system prompt carries the slug, the paths and your question; trust `get_feature_context` for the live state. For a mapped feature it returns, besides the usual feature/phase/docs:
|
|
15
|
-
- `waypoints` — every waypoint on the map, with its `title`, `type`, `question`, status and (once terminal) `summary`.
|
|
16
|
-
- `frontierIds` — the ids currently open, unclaimed and unblocked.
|
|
17
|
-
- `assignedWaypointId` — **your** waypoint's id, the one this session claimed. Find that id in `waypoints` and read its `title`, `type` and `question`. That is your whole assignment.
|
|
18
|
-
2. `docs[]` inlines the canonical docs in full — `brief.md`, `map.md`, `decisions.md`, `spec.md` if it exists. One too large to inline is listed in `notInlined` instead, with its `relPath` and `absPath`: read it with `mcp__runcastle__read_feature_doc({ relPath })` or off disk before acting. Any tickets arrive as summary rows with their `goal`; `mcp__runcastle__get_ticket({ seq })` holds one ticket's context, acceptance criteria and digest. Read `map.md` (Destination, Notes, Not-yet-specified, Out-of-scope) so your answer fits the north star, and `decisions.md` for what is already locked — **do not re-litigate settled decisions.**
|
|
19
|
-
3. **Read the research already done for this feature.** Earlier `research` waypoints wrote deliverables to `docs/features/<slug>/research/<seq>-<slug>.md`. They are *not* inlined — they appear in the `moreDocs` index with their `relPath` and `bytes`, and each resolved research waypoint's `summary` in `waypoints` names its file (`researched: <title> — see <path>`). Fetch the ones your question depends on with `mcp__runcastle__read_feature_doc({ relPath })`, or read them off disk in this worktree. A waypoint that re-derives a finding an earlier waypoint already paid an AFK run for is a wasted session.
|
|
20
|
-
|
|
21
|
-
## 1. Work it — mode by type
|
|
22
|
-
|
|
23
|
-
Your waypoint's `type` picks the mode:
|
|
24
|
-
|
|
25
|
-
- **`grilling`** → grill the human on the question exactly as `/runcastle:ideate` does (`/runcastle:ideate` §1 is the procedure — one question at a time, always recommend an answer, look up facts in the code, model the domain, don't move on until you share understanding). Scope the grill to THIS waypoint's question — resist wandering into the whole feature.
|
|
26
|
-
- **`prototype`** → build the smallest throwaway spike that answers the question (a fork to compare two approaches, a spike to prove feasibility). **Write it under `docs/features/<slug>/prototypes/` and nowhere else.** That directory is the only place a talk session may put code: everything outside `docs/features/<slug>/` is denied by the edit guard, and the deny is real, not advisory. The spike is *evidence for the decision prose*, not shipped code — nothing under `prototypes/` is ever built on, and the working version rides a ticket like any other code. So do not try to write into `src/`, do not conclude the prototype is impossible and emit a ticket instead, and do not ask the human to run it for you: spike it in `prototypes/`, read what it proves, write the decision (§2), and let the spike go.
|
|
27
|
-
- **`task`** → run the concrete checklist the question describes (gather the facts, enumerate the cases, fill the table). Produce the artifact the waypoint asked for.
|
|
28
|
-
|
|
29
|
-
If, while working, you discover the question really splits into new sub-questions or uncovers whole new branches, chart them: `mcp__runcastle__emit_waypoints({ waypoints: [...] })` — each with `title`, `type`, `question`, `blockedBy` (1-based positions in this batch and/or existing waypoint ids), and `originWaypointId: "<your waypoint id>"` so the lineage ("surfaced by …") is recorded. Any mapped session may branch the map; that is the recursion. Emitting a waypoint does **not** relieve you of answering your own.
|
|
30
|
-
|
|
31
|
-
If something surfaces that is plainly its own **feature** rather than another waypoint, park it instead of swallowing it: `mcp__runcastle__create_feature({ title, oneLiner, brief, draft: true })` creates a parked draft — no branch, nothing written — with the `brief` carrying why you deferred it. Drafts are the only feature you may create here; a full create belongs to the project session.
|
|
32
|
-
|
|
33
|
-
## 2. Write the decision prose — directly, to the docs
|
|
34
|
-
|
|
35
|
-
The answer is **prose in the docs**, not a tool argument. Serial HITL makes these writes race-free, so edit the files directly in this talk worktree:
|
|
36
|
-
|
|
37
|
-
- **Resolving** (question answered): append the decision to `docs/features/<slug>/decisions.md`, one entry:
|
|
38
|
-
|
|
39
|
-
```markdown
|
|
40
|
-
## <n>. <short decision title>
|
|
41
|
-
**Decision:** <the choice, in the project's domain vocabulary>
|
|
42
|
-
**Why:** <the reason / the trade-off chosen over the alternatives>
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
- **Dropping** (no longer worth answering): record a one-line gist under `## Out of scope` in `docs/features/<slug>/map.md`, so the map remembers why it was cut.
|
|
46
|
-
|
|
47
|
-
Write the prose **before** you resolve — the resolve tool flips machinery only and does not carry your answer. If a prototype produced the answer, the decision entry must stand on its own: the reader of `decisions.md` is a converge session that will never open your spike.
|
|
48
|
-
|
|
49
|
-
## 3. Resolve — end the session
|
|
50
|
-
|
|
51
|
-
`mcp__runcastle__resolve_waypoint({ id: "<your waypoint id>", disposition: "resolved" | "dropped", summary: "<one-line gist>" })`.
|
|
52
|
-
|
|
53
|
-
This marks your waypoint terminal and frees any waypoint that was blocked only on yours — they appear on the frontier for the next session to Work. The `summary` is the one line shown on the map card, and it is what a later session sees first; if your work left a file behind (a prototype, a table), name its path there.
|
|
54
|
-
|
|
55
|
-
Then tell the human plainly:
|
|
56
|
-
|
|
57
|
-
> This waypoint is resolved — its decision is in `decisions.md`. Back in the runcastle UI, the frontier has updated; work the next waypoint, or converge once it clears. I'll stop here.
|
|
58
|
-
|
|
59
|
-
**End the session.** One waypoint, one session. Do **not** claim or work another waypoint, do **not** converge, do **not** spec or emit tickets. If you close the terminal without resolving, runcastle auto-releases the waypoint back to the frontier and offers **Resume** — so resolving is how you signal you are genuinely done.
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
.xterm{cursor:text;-webkit-user-select:none;user-select:none;position:relative}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{z-index:5;position:absolute;top:0}.xterm .xterm-helper-textarea{opacity:0;z-index:-5;white-space:nowrap;resize:none;border:0;width:0;height:0;margin:0;padding:0;position:absolute;top:0;left:-9999em;overflow:hidden}.xterm .composition-view{color:#fff;white-space:nowrap;z-index:1;background:#000;display:none;position:absolute}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{cursor:default;background-color:#000;position:absolute;inset:0;overflow-y:scroll}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;top:0;left:0}.xterm-char-measure-element{visibility:hidden;line-height:normal;display:inline-block;position:absolute;top:0;left:-9999em}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{z-index:10;color:#0000;pointer-events:none;position:absolute;inset:0}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:#0000}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre;font-family:monospace}.xterm .xterm-accessibility-tree>div{transform-origin:0;width:fit-content}.xterm .live-region{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:underline double;text-decoration:underline double}.xterm-underline-3{-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.xterm-underline-4{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xterm-underline-5{-webkit-text-decoration:underline dashed;text-decoration:underline dashed}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:underline overline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;pointer-events:none;position:absolute;top:0;right:0}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;z-index:11;background:0 0;transition:opacity .1s linear}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{display:none;position:absolute}.xterm .xterm-scrollable-element>.shadow.top{width:100%;height:3px;box-shadow:var(--vscode-scrollbar-shadow,#000) 0 6px 6px -6px inset;display:block;top:0;left:3px}.xterm .xterm-scrollable-element>.shadow.left{width:3px;height:100%;box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset;display:block;top:3px;left:0}.xterm .xterm-scrollable-element>.shadow.top-left-corner{width:3px;height:3px;display:block;top:0;left:0}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-latin-wght-normal-BgDaEnEv.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2)format("woff2-variations");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@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-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction: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-outline-style:solid;--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-duration:initial;--tw-ease:initial;--tw-content:"";--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-sans:"Geist Variable", "Segoe UI Variable", system-ui, -apple-system, sans-serif;--font-mono:"Geist Mono Variable", "Cascadia Code", ui-monospace, Consolas, monospace;--spacing:.25rem;--container-sm:24rem;--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--leading-tight:1.25;--leading-snug:1.375;--ease-out:cubic-bezier(0, 0, .2, 1);--animate-spin:spin .8s linear infinite;--aspect-video:16 / 9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--color-canvas:#0a0c11;--color-surface:#10131a;--color-surface-raised:#161a24;--color-surface-hover:#1a1e29;--color-surface-selected:#212636;--color-surface-inset:#0c0e14;--color-border:#222837;--color-border-subtle:#c8d7ff0f;--color-border-strong:#333a4d;--color-text:#eceef4;--color-text-secondary:#a2a8b9;--color-text-tertiary:#8a91a5;--color-text-disabled:#4b5163;--color-icon:#8990a4;--color-primary:#eceef4;--color-primary-hover:#fff;--color-on-primary:#0a0c11;--color-accent:#4f8ef7;--color-accent-text:#7aaafa;--color-accent-subtle:#16213a;--color-success:#46b67a;--color-warning:#e2a53b;--color-danger:#f06363;--color-danger-subtle:#2a1515;--color-phase-draft:var(--color-text-disabled);--color-phase-ideation:#ec7cb5;--color-phase-spec:#35c2b8;--color-phase-planning:var(--color-phase-spec);--color-phase-tickets:var(--color-warning);--color-phase-implementation:#f08a4b;--color-phase-building:var(--color-phase-implementation);--color-phase-review:var(--color-accent);--color-phase-shipped:var(--color-success);--color-focus-ring:var(--color-accent);--color-scrim:#0009;--text-xs:12px;--text-xs--line-height:16px;--text-sm:13px;--text-sm--line-height:20px;--text-base:14px;--text-base--line-height:22px;--text-lg:16px;--text-lg--line-height:24px;--text-lg--letter-spacing:-.01em;--text-xl:22px;--text-xl--line-height:28px;--text-xl--letter-spacing:-.02em;--radius-sm:4px;--radius-md:6px;--radius-lg:10px;--radius-full:9999px;--shadow-popover:var(--elevation-popover);--shadow-dialog:var(--elevation-dialog);--ease-app:cubic-bezier(.22, .61, .24, 1);--ease-out-app:cubic-bezier(.16, 1, .3, 1);--animate-rise-in:riseIn var(--dur-3) var(--ease-out-app) both;--animate-fade-in:fadeIn var(--dur-2) var(--ease-out-app) both;--animate-dialog-in:dialogIn var(--dur-3) var(--ease-out-app) both;--animate-backdrop-in:backdropIn var(--dur-2) var(--ease-out-app) both;--animate-slide-in-right:slideInRight var(--dur-3) var(--ease-out-app) both;--animate-toast-in:toastIn var(--dur-3) var(--ease-out-app) both;--animate-breathe:breathe 2s ease-in-out infinite;--animate-overlay-in:cmdkIn var(--dur-2) var(--ease-out-app);--animate-dot-glow:dotGlow 2.2s var(--ease-app) infinite;--control-sm:24px;--control-h:28px;--control-lg:32px;--row-h:32px;--topbar-h:44px;--sidebar-w:248px;--inspector-w:320px;--aside-w:380px;--content-max:760px;--content-wide:1040px;--maprail-w:300px;--artifact-w:380px;--chat-panel-w:400px;--notes-rail-w:360px;--dur-1:.12s;--dur-2:.18s;--dur-3:.24s;--ring:0 0 0 2px var(--color-surface), 0 0 0 4px var(--color-focus-ring)}}@layer base{button{appearance:none;color:inherit;background:0 0;border:0;padding:0;font-family:inherit}input,textarea,select{font-family:inherit;font-size:inherit;line-height:inherit;color:inherit}:is(input,textarea,select):focus-visible{outline:2px solid var(--color-focus-ring);outline-offset:-1px}details[data-disclosure]::details-content{overflow-clip-margin:4px;block-size:0;transition:block-size var(--dur-2) var(--ease-app), content-visibility var(--dur-2) allow-discrete;overflow:clip}details[data-disclosure][open]::details-content{block-size:auto}}@layer components;@layer utilities{.\@container{container-type:inline-size}.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.sticky{position:sticky}.inset-0{inset:0}.inset-x-0{inset-inline:0}.inset-x-3{inset-inline:calc(var(--spacing) * 3)}.inset-y-0{inset-block:0}.-top-0\.5{top:calc(var(--spacing) * -.5)}.-top-2{top:calc(var(--spacing) * -2)}.-top-5{top:calc(var(--spacing) * -5)}.top-0{top:0}.top-0\.5{top:calc(var(--spacing) * .5)}.top-1\.5{top:calc(var(--spacing) * 1.5)}.top-1\/2{top:50%}.top-3{top:calc(var(--spacing) * 3)}.top-4{top:calc(var(--spacing) * 4)}.top-7{top:calc(var(--spacing) * 7)}.-right-0\.5{right:calc(var(--spacing) * -.5)}.-right-2{right:calc(var(--spacing) * -2)}.-right-\[3px\]{right:-3px}.right-1{right:var(--spacing)}.right-2{right:calc(var(--spacing) * 2)}.right-3{right:calc(var(--spacing) * 3)}.right-4{right:calc(var(--spacing) * 4)}.bottom-0{bottom:0}.bottom-3{bottom:calc(var(--spacing) * 3)}.bottom-4{bottom:calc(var(--spacing) * 4)}.-left-\[3px\]{left:-3px}.left-0{left:0}.z-10{z-index:10}.z-20{z-index:20}.z-\[100\]{z-index:100}.z-\[200\]{z-index:200}.z-\[300\]{z-index:300}.z-\[400\]{z-index:400}.col-span-full{grid-column:1/-1}.col-start-1{grid-column-start:1}.row-start-1{grid-row-start:1}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.m-0{margin:0}.m-4{margin:calc(var(--spacing) * 4)}.m-auto{margin:auto}.-mx-1{margin-inline:calc(var(--spacing) * -1)}.-mx-1\.5{margin-inline:calc(var(--spacing) * -1.5)}.-mx-2{margin-inline:calc(var(--spacing) * -2)}.mx-0{margin-inline:0}.mx-0\.5{margin-inline:calc(var(--spacing) * .5)}.mx-1{margin-inline:var(--spacing)}.mx-4{margin-inline:calc(var(--spacing) * 4)}.mx-auto{margin-inline:auto}.-my-0\.5{margin-block:calc(var(--spacing) * -.5)}.my-1{margin-block:var(--spacing)}.my-2{margin-block:calc(var(--spacing) * 2)}.my-5{margin-block:calc(var(--spacing) * 5)}.-mt-3\.5{margin-top:calc(var(--spacing) * -3.5)}.mt-0{margin-top:0}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-1\.5{margin-top:calc(var(--spacing) * 1.5)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-2\.5{margin-top:calc(var(--spacing) * 2.5)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-9{margin-top:calc(var(--spacing) * 9)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mt-\[3px\]{margin-top:3px}.-mr-1{margin-right:calc(var(--spacing) * -1)}.mr-2{margin-right:calc(var(--spacing) * 2)}.mr-auto{margin-right:auto}.mb-0{margin-bottom:0}.mb-1{margin-bottom:var(--spacing)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-2\.5{margin-bottom:calc(var(--spacing) * 2.5)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.mb-10{margin-bottom:calc(var(--spacing) * 10)}.-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-0\.5{margin-left:calc(var(--spacing) * .5)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-12{margin-left:calc(var(--spacing) * 12)}.ml-auto{margin-left:auto}.box-border{box-sizing:border-box}.line-clamp-3{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.inline-grid{display:inline-grid}.table{display:table}.aspect-video{aspect-ratio:var(--aspect-video)}.size-\(--control-h\){width:var(--control-h);height:var(--control-h)}.size-\(--control-lg\){width:var(--control-lg);height:var(--control-lg)}.size-\(--control-sm\){width:var(--control-sm);height:var(--control-sm)}.size-1\.5{width:calc(var(--spacing) * 1.5);height:calc(var(--spacing) * 1.5)}.size-2\.5{width:calc(var(--spacing) * 2.5);height:calc(var(--spacing) * 2.5)}.size-3{width:calc(var(--spacing) * 3);height:calc(var(--spacing) * 3)}.size-3\.5{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.size-4{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.size-6{width:calc(var(--spacing) * 6);height:calc(var(--spacing) * 6)}.size-7{width:calc(var(--spacing) * 7);height:calc(var(--spacing) * 7)}.size-8{width:calc(var(--spacing) * 8);height:calc(var(--spacing) * 8)}.h-\(--control-h\){height:var(--control-h)}.h-\(--control-lg\){height:var(--control-lg)}.h-\(--control-sm\){height:var(--control-sm)}.h-\(--row-h\){height:var(--row-h)}.h-\(--topbar-h\){height:var(--topbar-h)}.h-1{height:var(--spacing)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-4\.5{height:calc(var(--spacing) * 4.5)}.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-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.h-13{height:calc(var(--spacing) * 13)}.h-14{height:calc(var(--spacing) * 14)}.h-70{height:calc(var(--spacing) * 70)}.h-105{height:calc(var(--spacing) * 105)}.h-\[22px\]{height:22px}.h-\[26px\]{height:26px}.h-\[54px\]{height:54px}.h-\[clamp\(300px\,calc\(100dvh-420px\)\,1200px\)\]{height:clamp(300px,100dvh - 420px,1200px)}.h-\[clamp\(320px\,calc\(100dvh-360px\)\,960px\)\]{height:clamp(320px,100dvh - 360px,960px)}.h-\[min\(620px\,76vh\)\]{height:min(620px,76vh)}.h-\[min\(720px\,84vh\)\]{height:min(720px,84vh)}.h-auto{height:auto}.h-full{height:100%}.h-px{height:1px}.max-h-\(--radix-dropdown-menu-content-available-height\){max-height:var(--radix-dropdown-menu-content-available-height)}.max-h-\(--radix-popover-content-available-height\){max-height:var(--radix-popover-content-available-height)}.max-h-\(--radix-select-content-available-height\){max-height:var(--radix-select-content-available-height)}.max-h-55{max-height:calc(var(--spacing) * 55)}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-72{max-height:calc(var(--spacing) * 72)}.max-h-96{max-height:calc(var(--spacing) * 96)}.max-h-120{max-height:calc(var(--spacing) * 120)}.max-h-\[46vh\]{max-height:46vh}.max-h-\[80vh\]{max-height:80vh}.max-h-\[82vh\]{max-height:82vh}.max-h-\[84vh\]{max-height:84vh}.max-h-\[260px\]{max-height:260px}.max-h-\[calc\(100vh-320px\)\]{max-height:calc(100vh - 320px)}.max-h-\[clamp\(300px\,calc\(100dvh-340px\)\,1200px\)\]{max-height:clamp(300px,100dvh - 340px,1200px)}.max-h-\[min\(520px\,76vh\)\]{max-height:min(520px,76vh)}.min-h-\(--control-h\){min-height:var(--control-h)}.min-h-0{min-height:0}.min-h-4{min-height:calc(var(--spacing) * 4)}.min-h-5{min-height:calc(var(--spacing) * 5)}.min-h-6{min-height:calc(var(--spacing) * 6)}.min-h-7{min-height:calc(var(--spacing) * 7)}.min-h-7\.5{min-height:calc(var(--spacing) * 7.5)}.min-h-8{min-height:calc(var(--spacing) * 8)}.min-h-10{min-height:calc(var(--spacing) * 10)}.min-h-12{min-height:calc(var(--spacing) * 12)}.min-h-16{min-height:calc(var(--spacing) * 16)}.min-h-65{min-height:calc(var(--spacing) * 65)}.min-h-100{min-height:calc(var(--spacing) * 100)}.min-h-full{min-height:100%}.w-\(--artifact-w\){width:var(--artifact-w)}.w-\(--aside-w\){width:var(--aside-w)}.w-\(--maprail-w\){width:var(--maprail-w)}.w-\(--notes-rail-w\){width:var(--notes-rail-w)}.w-\(--sidebar-w\){width:var(--sidebar-w)}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-1\/2{width:50%}.w-1\/3{width:33.3333%}.w-2{width:calc(var(--spacing) * 2)}.w-2\/3{width:66.6667%}.w-2\/5{width:40%}.w-3{width:calc(var(--spacing) * 3)}.w-3\/4{width:75%}.w-3\/5{width:60%}.w-4\/5{width:80%}.w-5{width:calc(var(--spacing) * 5)}.w-5\/6{width:83.3333%}.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-11{width:calc(var(--spacing) * 11)}.w-11\/12{width:91.6667%}.w-12{width:calc(var(--spacing) * 12)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-24{width:calc(var(--spacing) * 24)}.w-28{width:calc(var(--spacing) * 28)}.w-32{width:calc(var(--spacing) * 32)}.w-36{width:calc(var(--spacing) * 36)}.w-40{width:calc(var(--spacing) * 40)}.w-44{width:calc(var(--spacing) * 44)}.w-48{width:calc(var(--spacing) * 48)}.w-50{width:calc(var(--spacing) * 50)}.w-52{width:calc(var(--spacing) * 52)}.w-56{width:calc(var(--spacing) * 56)}.w-64{width:calc(var(--spacing) * 64)}.w-72{width:calc(var(--spacing) * 72)}.w-105{width:calc(var(--spacing) * 105)}.w-fit{width:fit-content}.w-full{width:100%}.w-px{width:1px}.max-w-\(--content-max\){max-width:var(--content-max)}.max-w-\(--content-wide\){max-width:var(--content-wide)}.max-w-\(--radix-popover-content-available-width\){max-width:var(--radix-popover-content-available-width)}.max-w-56{max-width:calc(var(--spacing) * 56)}.max-w-60{max-width:calc(var(--spacing) * 60)}.max-w-64{max-width:calc(var(--spacing) * 64)}.max-w-72{max-width:calc(var(--spacing) * 72)}.max-w-80{max-width:calc(var(--spacing) * 80)}.max-w-95{max-width:calc(var(--spacing) * 95)}.max-w-96{max-width:calc(var(--spacing) * 96)}.max-w-\[32ch\]{max-width:32ch}.max-w-\[52ch\]{max-width:52ch}.max-w-\[60ch\]{max-width:60ch}.max-w-\[64ch\]{max-width:64ch}.max-w-\[460px\]{max-width:460px}.max-w-\[560px\]{max-width:560px}.max-w-\[620px\]{max-width:620px}.max-w-\[680px\]{max-width:680px}.max-w-\[780px\]{max-width:780px}.max-w-\[860px\]{max-width:860px}.max-w-\[940px\]{max-width:940px}.max-w-full{max-width:100%}.max-w-sm{max-width:var(--container-sm)}.min-w-\(--radix-select-trigger-width\){min-width:var(--radix-select-trigger-width)}.min-w-0{min-width:0}.min-w-3\.5{min-width:calc(var(--spacing) * 3.5)}.min-w-4{min-width:calc(var(--spacing) * 4)}.min-w-4\.5{min-width:calc(var(--spacing) * 4.5)}.min-w-32{min-width:calc(var(--spacing) * 32)}.min-w-48{min-width:calc(var(--spacing) * 48)}.min-w-52{min-width:calc(var(--spacing) * 52)}.min-w-56{min-width:calc(var(--spacing) * 56)}.min-w-60{min-width:calc(var(--spacing) * 60)}.min-w-64{min-width:calc(var(--spacing) * 64)}.min-w-72{min-width:calc(var(--spacing) * 72)}.flex-1{flex:1}.flex-none{flex:none}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.basis-60{flex-basis:calc(var(--spacing) * 60)}.basis-80{flex-basis:calc(var(--spacing) * 80)}.basis-full{flex-basis:100%}.border-collapse{border-collapse:collapse}.animate-pop-in{animation:popIn var(--dur-2) var(--ease-out-app) both;transform-origin:var(--radix-popper-transform-origin,top)}.-translate-x-1\/2{--tw-translate-x:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-x-2{--tw-translate-x:calc(var(--spacing) * -2);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-0{--tw-translate-x:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-x-3{--tw-translate-x:calc(var(--spacing) * 3);translate:var(--tw-translate-x) var(--tw-translate-y)}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-px{--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.rotate-90{rotate:90deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.animate-backdrop-in{animation:var(--animate-backdrop-in)}.animate-breathe{animation:var(--animate-breathe)}.animate-dialog-in{animation:var(--animate-dialog-in)}.animate-fade-in{animation:var(--animate-fade-in)}.animate-rise-in{animation:var(--animate-rise-in)}.animate-slide-in-right{animation:var(--animate-slide-in-right)}.animate-spin{animation:var(--animate-spin)}.animate-toast-in{animation:var(--animate-toast-in)}.cursor-col-resize{cursor:col-resize}.cursor-crosshair{cursor:crosshair}.cursor-default{cursor:default}.cursor-not-allowed{cursor:not-allowed}.cursor-pointer{cursor:pointer}.cursor-text{cursor:text}.cursor-zoom-in{cursor:zoom-in}.touch-none{touch-action:none}.resize{resize:both}.resize-none{resize:none}.resize-y{resize:vertical}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.list-none{list-style-type:none}.appearance-none{appearance:none}.grid-cols-\[16px_96px_minmax\(0\,1fr\)\]{grid-template-columns:16px 96px minmax(0,1fr)}.grid-cols-\[28px_minmax\(0\,1fr\)_auto\]{grid-template-columns:28px minmax(0,1fr) auto}.grid-cols-\[176px_minmax\(0\,1fr\)\]{grid-template-columns:176px minmax(0,1fr)}.grid-cols-\[208px_minmax\(0\,1fr\)\]{grid-template-columns:208px minmax(0,1fr)}.grid-cols-\[210px_1fr\]{grid-template-columns:210px 1fr}.grid-cols-\[max-content_minmax\(0\,1fr\)\]{grid-template-columns:max-content minmax(0,1fr)}.grid-cols-\[minmax\(0\,1\.5fr\)_minmax\(0\,1\.3fr\)_minmax\(0\,0\.8fr\)_88px_24px\]{grid-template-columns:minmax(0,1.5fr) minmax(0,1.3fr) minmax(0,.8fr) 88px 24px}.grid-cols-\[minmax\(0\,1fr\)_132px_minmax\(0\,1\.2fr\)_auto\]{grid-template-columns:minmax(0,1fr) 132px minmax(0,1.2fr) auto}.grid-cols-\[minmax\(0\,1fr\)_260px_24px\]{grid-template-columns:minmax(0,1fr) 260px 24px}.grid-cols-\[minmax\(0\,1fr\)_minmax\(0\,300px\)\]{grid-template-columns:minmax(0,1fr) minmax(0,300px)}.grid-rows-\[minmax\(0\,1fr\)\]{grid-template-rows:minmax(0,1fr)}.flex-col{flex-direction:column}.flex-nowrap{flex-wrap:nowrap}.flex-wrap{flex-wrap:wrap}.place-items-center{place-items:center}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:var(--spacing)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-2\.5{gap:calc(var(--spacing) * 2.5)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}.gap-10{gap:calc(var(--spacing) * 10)}.gap-12{gap:calc(var(--spacing) * 12)}.gap-px{gap:1px}.gap-x-0\.5{column-gap:calc(var(--spacing) * .5)}.gap-x-2{column-gap:calc(var(--spacing) * 2)}.gap-x-3{column-gap:calc(var(--spacing) * 3)}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-x-5{column-gap:calc(var(--spacing) * 5)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-x-8{column-gap:calc(var(--spacing) * 8)}.gap-y-0\.5{row-gap:calc(var(--spacing) * .5)}.gap-y-1{row-gap:var(--spacing)}.gap-y-1\.5{row-gap:calc(var(--spacing) * 1.5)}.gap-y-2{row-gap:calc(var(--spacing) * 2)}.gap-y-2\.5{row-gap:calc(var(--spacing) * 2.5)}.gap-y-3{row-gap:calc(var(--spacing) * 3)}.gap-y-4{row-gap:calc(var(--spacing) * 4)}.self-start{align-self:flex-start}.justify-self-start{justify-self:flex-start}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-clip{overflow:clip}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-x-hidden{overflow-x:hidden}.overflow-y-auto{overflow-y:auto}.overscroll-contain{overscroll-behavior:contain}.rounded-\[2px\]{border-radius:2px}.rounded-\[5px\]{border-radius:5px}.rounded-full{border-radius:var(--radius-full)}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.border{border-style:var(--tw-border-style);border-width:1px}.border-0{border-style:var(--tw-border-style);border-width:0}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-\[1\.5px\]{border-style:var(--tw-border-style);border-width:1.5px}.border-y{border-block-style:var(--tw-border-style);border-block-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-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-accent{border-color:var(--color-accent)}.border-border{border-color:var(--color-border)}.border-border-strong{border-color:var(--color-border-strong)}.border-border-subtle{border-color:var(--color-border-subtle)}.border-current{border-color:currentColor}.border-primary{border-color:var(--color-primary)}.border-text-tertiary{border-color:var(--color-text-tertiary)}.border-transparent{border-color:#0000}.border-t-transparent{border-top-color:#0000}.bg-\[color-mix\(in_srgb\,var\(--step-hue\)_14\%\,transparent\)\]{background-color:var(--step-hue)}@supports (color:color-mix(in lab, red, red)){.bg-\[color-mix\(in_srgb\,var\(--step-hue\)_14\%\,transparent\)\]{background-color:color-mix(in srgb,var(--step-hue) 14%,transparent)}}.bg-accent{background-color:var(--color-accent)}.bg-accent-subtle{background-color:var(--color-accent-subtle)}.bg-accent-subtle\/40{background-color:#16213a66}@supports (color:color-mix(in lab, red, red)){.bg-accent-subtle\/40{background-color:color-mix(in oklab, var(--color-accent-subtle) 40%, transparent)}}.bg-border{background-color:var(--color-border)}.bg-border-strong{background-color:var(--color-border-strong)}.bg-border-subtle{background-color:var(--color-border-subtle)}.bg-canvas{background-color:var(--color-canvas)}.bg-danger{background-color:var(--color-danger)}.bg-danger-subtle{background-color:var(--color-danger-subtle)}.bg-icon{background-color:var(--color-icon)}.bg-inherit{background-color:inherit}.bg-on-primary{background-color:var(--color-on-primary)}.bg-primary{background-color:var(--color-primary)}.bg-scrim{background-color:var(--color-scrim)}.bg-scrim\/20{background-color:#0000001f}@supports (color:color-mix(in lab, red, red)){.bg-scrim\/20{background-color:color-mix(in oklab, var(--color-scrim) 20%, transparent)}}.bg-scrim\/40{background-color:#0000003d}@supports (color:color-mix(in lab, red, red)){.bg-scrim\/40{background-color:color-mix(in oklab, var(--color-scrim) 40%, transparent)}}.bg-success{background-color:var(--color-success)}.bg-surface{background-color:var(--color-surface)}.bg-surface-hover{background-color:var(--color-surface-hover)}.bg-surface-hover\/50{background-color:#1a1e2980}@supports (color:color-mix(in lab, red, red)){.bg-surface-hover\/50{background-color:color-mix(in oklab, var(--color-surface-hover) 50%, transparent)}}.bg-surface-inset{background-color:var(--color-surface-inset)}.bg-surface-inset\/70{background-color:#0c0e14b3}@supports (color:color-mix(in lab, red, red)){.bg-surface-inset\/70{background-color:color-mix(in oklab, var(--color-surface-inset) 70%, transparent)}}.bg-surface-raised{background-color:var(--color-surface-raised)}.bg-surface-selected{background-color:var(--color-surface-selected)}.bg-text-disabled{background-color:var(--color-text-disabled)}.bg-text-tertiary{background-color:var(--color-text-tertiary)}.bg-transparent{background-color:#0000}.bg-warning{background-color:var(--color-warning)}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-0{padding:0}.p-0\.5{padding:calc(var(--spacing) * .5)}.p-1{padding:var(--spacing)}.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-6{padding:calc(var(--spacing) * 6)}.p-px{padding:1px}.px-0{padding-inline:0}.px-1{padding-inline:var(--spacing)}.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-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.px-10{padding-inline:calc(var(--spacing) * 10)}.py-0{padding-block:0}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.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-3\.75{padding-block:calc(var(--spacing) * 3.75)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-12{padding-block:calc(var(--spacing) * 12)}.py-px{padding-block:1px}.pt-0\.5{padding-top:calc(var(--spacing) * .5)}.pt-1{padding-top:var(--spacing)}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-2\.5{padding-top:calc(var(--spacing) * 2.5)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pt-9{padding-top:calc(var(--spacing) * 9)}.pt-12{padding-top:calc(var(--spacing) * 12)}.pt-\[8vh\]{padding-top:8vh}.pt-\[12vh\]{padding-top:12vh}.pt-px{padding-top:1px}.pr-0\.5{padding-right:calc(var(--spacing) * .5)}.pr-1{padding-right:var(--spacing)}.pr-1\.5{padding-right:calc(var(--spacing) * 1.5)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pb-1{padding-bottom:var(--spacing)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-2\.5{padding-bottom:calc(var(--spacing) * 2.5)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-5{padding-bottom:calc(var(--spacing) * 5)}.pb-6{padding-bottom:calc(var(--spacing) * 6)}.pb-12{padding-bottom:calc(var(--spacing) * 12)}.pb-16{padding-bottom:calc(var(--spacing) * 16)}.pl-0\.5{padding-left:calc(var(--spacing) * .5)}.pl-1{padding-left:var(--spacing)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-2\.5{padding-left:calc(var(--spacing) * 2.5)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-4\.5{padding-left:calc(var(--spacing) * 4.5)}.pl-5{padding-left:calc(var(--spacing) * 5)}.pl-5\.5{padding-left:calc(var(--spacing) * 5.5)}.pl-6{padding-left:calc(var(--spacing) * 6)}.pl-8{padding-left:calc(var(--spacing) * 8)}.pl-8\.5{padding-left:calc(var(--spacing) * 8.5)}.pl-10{padding-left:calc(var(--spacing) * 10)}.pl-17\.5{padding-left:calc(var(--spacing) * 17.5)}.pl-\[3\.25rem\]{padding-left:3.25rem}.pl-\[3\.75rem\]{padding-left:3.75rem}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.align-\[-1px\]{vertical-align:-1px}.align-\[-2px\]{vertical-align:-2px}.align-middle{vertical-align:middle}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.font-sans{font-family:var(--font-sans)}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height));letter-spacing:var(--tw-tracking,var(--text-lg--letter-spacing))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height));letter-spacing:var(--tw-tracking,var(--text-xl--letter-spacing))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--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-\[0\.88em\]{font-size:.88em}.text-\[0\.93em\]{font-size:.93em}.text-\[1\.3em\]{font-size:1.3em}.text-\[1\.12em\]{font-size:1.12em}.text-\[1em\]{font-size:1em}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-\[1\.5\]{--tw-leading:1.5;line-height:1.5}.leading-\[18px\]{--tw-leading:18px;line-height:18px}.leading-none{--tw-leading:1;line-height:1}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.text-pretty{text-wrap:pretty}.break-words{overflow-wrap:break-word}.wrap-anywhere{overflow-wrap:anywhere}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-accent{color:var(--color-accent)}.text-accent-text{color:var(--color-accent-text)}.text-danger{color:var(--color-danger)}.text-icon{color:var(--color-icon)}.text-inherit{color:inherit}.text-on-primary{color:var(--color-on-primary)}.text-phase-building{color:var(--color-phase-building)}.text-phase-draft{color:var(--color-phase-draft)}.text-phase-ideation{color:var(--color-phase-ideation)}.text-phase-implementation{color:var(--color-phase-implementation)}.text-phase-planning{color:var(--color-phase-planning)}.text-phase-review{color:var(--color-phase-review)}.text-phase-shipped{color:var(--color-phase-shipped)}.text-phase-spec{color:var(--color-phase-spec)}.text-phase-tickets{color:var(--color-phase-tickets)}.text-success{color:var(--color-success)}.text-surface{color:var(--color-surface)}.text-text{color:var(--color-text)}.text-text\!{color:var(--color-text)!important}.text-text-disabled{color:var(--color-text-disabled)}.text-text-secondary{color:var(--color-text-secondary)}.text-text-tertiary{color:var(--color-text-tertiary)}.text-warning{color:var(--color-warning)}.lowercase{text-transform:lowercase}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.line-through{text-decoration-line:line-through}.no-underline{text-decoration-line:none}.underline{text-decoration-line:underline}.decoration-accent-text\/50{text-decoration-color:#7aaafa80}@supports (color:color-mix(in lab, red, red)){.decoration-accent-text\/50{-webkit-text-decoration-color:color-mix(in oklab, var(--color-accent-text) 50%, transparent);-webkit-text-decoration-color:color-mix(in oklab, var(--color-accent-text) 50%, transparent);-webkit-text-decoration-color:color-mix(in oklab, var(--color-accent-text) 50%, transparent);text-decoration-color:color-mix(in oklab, var(--color-accent-text) 50%, transparent)}}.decoration-border-strong{-webkit-text-decoration-color:var(--color-border-strong);-webkit-text-decoration-color:var(--color-border-strong);-webkit-text-decoration-color:var(--color-border-strong);text-decoration-color:var(--color-border-strong)}.decoration-dotted{text-decoration-style:dotted}.underline-offset-2{text-underline-offset:2px}.underline-offset-4{text-underline-offset:4px}.accent-accent{accent-color:var(--color-accent)}.accent-text{accent-color:var(--color-text)}.opacity-0{opacity:0}.opacity-60{opacity:.6}.opacity-85{opacity:.85}.opacity-100{opacity:1}.shadow-\[0_0_0_3px_var\(--color-accent-subtle\)\]{--tw-shadow:0 0 0 3px var(--tw-shadow-color,var(--color-accent-subtle));box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-dialog{--tw-shadow:var(--elevation-dialog);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-popover{--tw-shadow:var(--elevation-popover);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.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)}.inset-ring{--tw-inset-ring-shadow:inset 0 0 0 1px var(--tw-inset-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-surface{--tw-ring-color:var(--color-surface)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.outline-2{outline-style:var(--tw-outline-style);outline-width:2px}.outline-offset-4{outline-offset:4px}.outline-accent{outline-color:var(--color-accent)}.sepia{--tw-sepia:sepia(100%);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,)}.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,)}.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-\[border-color\]{transition-property:border-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[color\,background-color\,border-color\,transform\]{transition-property:color,background-color,border-color,transform;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[height\,opacity\]{transition-property:height,opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[height\]{transition-property:height;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[opacity\,translate\]{transition-property:opacity,translate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[outline-color\]{transition-property:outline-color;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-\[width\]{transition-property:width;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))}.delay-75{transition-delay:75ms}.duration-\(--dur-1\){--tw-duration:var(--dur-1);transition-duration:var(--dur-1)}.duration-\(--dur-2\){--tw-duration:var(--dur-2);transition-duration:var(--dur-2)}.duration-\(--dur-3\){--tw-duration:var(--dur-3);transition-duration:var(--dur-3)}.ease-app{--tw-ease:var(--ease-app);transition-timing-function:var(--ease-app)}.ease-out-app{--tw-ease:var(--ease-out-app);transition-timing-function:var(--ease-out-app)}.outline-none{--tw-outline-style:none;outline-style:none}.select-all{-webkit-user-select:all;user-select:all}.select-none{-webkit-user-select:none;user-select:none}.\[animation-delay\:300ms\]{animation-delay:.3s}.\[animation-delay\:calc\(var\(--i\)\*20ms\)\]{animation-delay:calc(var(--i) * 20ms)}.\[counter-increment\:checklist\]{counter-increment:checklist}.\[counter-reset\:checklist\]{counter-reset:checklist}.\[writing-mode\:vertical-rl\]{writing-mode:vertical-rl}.group-open\/disclosure\:rotate-90:is(:where(.group\/disclosure):is([open],:popover-open,:open) *),.group-open\/lap\:rotate-90:is(:where(.group\/lap):is([open],:popover-open,:open) *){rotate:90deg}.group-focus-within\:opacity-100:is(:where(.group):focus-within *){opacity:1}.group-focus-within\/nav\:opacity-0:is(:where(.group\/nav):focus-within *){opacity:0}.group-focus-within\/nav\:opacity-100:is(:where(.group\/nav):focus-within *){opacity:1}.group-focus-within\/row\:opacity-0:is(:where(.group\/row):focus-within *){opacity:0}.group-focus-within\/row\:opacity-100:is(:where(.group\/row):focus-within *){opacity:1}@media (hover:hover){.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}.group-hover\/nav\:text-text:is(:where(.group\/nav):hover *){color:var(--color-text)}.group-hover\/nav\:opacity-0:is(:where(.group\/nav):hover *){opacity:0}.group-hover\/nav\:opacity-100:is(:where(.group\/nav):hover *){opacity:1}.group-hover\/row\:opacity-0:is(:where(.group\/row):hover *){opacity:0}.group-hover\/row\:opacity-100:is(:where(.group\/row):hover *){opacity:1}}.group-has-\[\[aria-expanded\=true\]\]\/nav\:opacity-0:is(:where(.group\/nav):has([aria-expanded=true]) *){opacity:0}.group-aria-expanded\:rotate-180:is(:where(.group)[aria-expanded=true] *){rotate:180deg}.peer-checked\:opacity-100:is(:where(.peer):checked~*){opacity:1}.first-letter\:uppercase:first-letter{text-transform:uppercase}.marker\:text-text-tertiary ::marker{color:var(--color-text-tertiary)}.marker\:text-text-tertiary::marker{color:var(--color-text-tertiary)}.marker\:text-text-tertiary ::-webkit-details-marker{color:var(--color-text-tertiary)}.marker\:text-text-tertiary::-webkit-details-marker{color:var(--color-text-tertiary)}.placeholder\:text-text-disabled::placeholder{color:var(--color-text-disabled)}.placeholder\:text-text-tertiary::placeholder{color:var(--color-text-tertiary)}.before\:content-\[counter\(checklist\)\]:before{--tw-content:counter(checklist);content:var(--tw-content)}.first\:mt-0:first-child{margin-top:0}.first\:border-t-0:first-child{border-top-style:var(--tw-border-style);border-top-width:0}.first\:pl-0:first-child{padding-left:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.checked\:border-primary:checked{border-color:var(--color-primary)}.checked\:bg-primary:checked{background-color:var(--color-primary)}.focus-within\:border-accent:focus-within{border-color:var(--color-accent)}.focus-within\:bg-surface-hover:focus-within{background-color:var(--color-surface-hover)}.focus-within\:outline-2:focus-within{outline-style:var(--tw-outline-style);outline-width:2px}.focus-within\:-outline-offset-1:focus-within{outline-offset:calc(1px * -1)}.focus-within\:outline-focus-ring:focus-within{outline-color:var(--color-focus-ring)}@media (hover:hover){.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:scale-125:hover{--tw-scale-x:125%;--tw-scale-y:125%;--tw-scale-z:125%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-border:hover{border-color:var(--color-border)}.hover\:border-border-strong:hover{border-color:var(--color-border-strong)}.hover\:border-text-tertiary:hover{border-color:var(--color-text-tertiary)}.hover\:bg-border-strong:hover{background-color:var(--color-border-strong)}.hover\:bg-danger-subtle:hover{background-color:var(--color-danger-subtle)}.hover\:bg-surface-hover:hover{background-color:var(--color-surface-hover)}.hover\:bg-surface-hover\/50:hover{background-color:#1a1e2980}@supports (color:color-mix(in lab, red, red)){.hover\:bg-surface-hover\/50:hover{background-color:color-mix(in oklab, var(--color-surface-hover) 50%, transparent)}}.hover\:bg-surface-selected:hover{background-color:var(--color-surface-selected)}.hover\:bg-transparent:hover{background-color:#0000}.hover\:text-accent-text:hover{color:var(--color-accent-text)}.hover\:text-text:hover{color:var(--color-text)}.hover\:text-text-secondary:hover{color:var(--color-text-secondary)}.hover\:underline:hover{text-decoration-line:underline}.hover\:decoration-accent-text:hover{-webkit-text-decoration-color:var(--color-accent-text);-webkit-text-decoration-color:var(--color-accent-text);-webkit-text-decoration-color:var(--color-accent-text);text-decoration-color:var(--color-accent-text)}.checked\:hover\:bg-primary-hover:checked:hover{background-color:var(--color-primary-hover)}}.focus\:border-accent:focus{border-color:var(--color-accent)}.focus\:bg-surface-inset:focus{background-color:var(--color-surface-inset)}.focus-visible\:opacity-100:focus-visible{opacity:1}.focus-visible\:outline-2:focus-visible{outline-style:var(--tw-outline-style);outline-width:2px}.focus-visible\:outline-offset-2:focus-visible{outline-offset:2px}.focus-visible\:outline-focus-ring:focus-visible{outline-color:var(--color-focus-ring)}@media (hover:hover){.enabled\:hover\:border-border-strong:enabled:hover{border-color:var(--color-border-strong)}.enabled\:hover\:border-danger-subtle:enabled:hover{border-color:var(--color-danger-subtle)}.enabled\:hover\:border-text-tertiary:enabled:hover{border-color:var(--color-text-tertiary)}.enabled\:hover\:bg-danger-subtle:enabled:hover{background-color:var(--color-danger-subtle)}.enabled\:hover\:bg-primary-hover:enabled:hover{background-color:var(--color-primary-hover)}.enabled\:hover\:bg-surface-hover:enabled:hover{background-color:var(--color-surface-hover)}.enabled\:hover\:text-danger:enabled:hover{color:var(--color-danger)}.enabled\:hover\:text-text:enabled:hover{color:var(--color-text)}.enabled\:hover\:text-text-secondary:enabled:hover{color:var(--color-text-secondary)}}.enabled\:active\:translate-y-px:enabled:active{--tw-translate-y:1px;translate:var(--tw-translate-x) var(--tw-translate-y)}.disabled\:cursor-default:disabled{cursor:default}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:border-border:disabled{border-color:var(--color-border)}.disabled\:border-border-subtle:disabled{border-color:var(--color-border-subtle)}.disabled\:bg-surface-selected:disabled{background-color:var(--color-surface-selected)}.disabled\:text-text-disabled:disabled{color:var(--color-text-disabled)}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}.disabled\:checked\:bg-text-disabled:disabled:checked{background-color:var(--color-text-disabled)}.has-\[\[aria-expanded\=true\]\]\:opacity-100:has([aria-expanded=true]){opacity:1}.has-\[input\:disabled\]\:cursor-not-allowed:has(:is(input:disabled)){cursor:not-allowed}.has-\[input\[aria-invalid\=true\]\]\:border-danger:has(:is(input[aria-invalid=true])){border-color:var(--color-danger)}.aria-expanded\:border-accent[aria-expanded=true]{border-color:var(--color-accent)}.aria-expanded\:bg-danger-subtle[aria-expanded=true]{background-color:var(--color-danger-subtle)}.aria-expanded\:bg-surface-selected[aria-expanded=true]{background-color:var(--color-surface-selected)}.aria-expanded\:text-danger[aria-expanded=true]{color:var(--color-danger)}.aria-expanded\:text-text[aria-expanded=true]{color:var(--color-text)}.aria-invalid\:border-danger[aria-invalid=true]{border-color:var(--color-danger)}.aria-pressed\:bg-surface-selected[aria-pressed=true]{background-color:var(--color-surface-selected)}.aria-pressed\:text-text[aria-pressed=true]{color:var(--color-text)}.aria-\[current\=true\]\:font-medium[aria-current=true]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-disabled\:cursor-not-allowed[data-disabled]{cursor:not-allowed}.data-disabled\:opacity-50[data-disabled]{opacity:.5}.data-highlighted\:bg-danger-subtle[data-highlighted]{background-color:var(--color-danger-subtle)}.data-highlighted\:bg-surface-hover[data-highlighted]{background-color:var(--color-surface-hover)}.data-placeholder\:text-text-tertiary[data-placeholder]{color:var(--color-text-tertiary)}.data-\[disabled\=true\]\:cursor-not-allowed[data-disabled=true]{cursor:not-allowed}.data-\[disabled\=true\]\:opacity-50[data-disabled=true]{opacity:.5}.data-\[selected\=true\]\:bg-surface-hover[data-selected=true]{background-color:var(--color-surface-hover)}.data-\[state\=checked\]\:font-medium[data-state=checked]{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.data-\[state\=open\]\:border-accent[data-state=open]{border-color:var(--color-accent)}.data-\[state\=open\]\:bg-surface-selected[data-state=open]{background-color:var(--color-surface-selected)}.data-\[state\=open\]\:text-text[data-state=open]{color:var(--color-text)}@media (prefers-reduced-motion:reduce){.motion-reduce\:transition-none{transition-property:none}}@media (width>=48rem){.md\:flex{display:flex}}@media (width>=80rem){.xl\:inline{display:inline}}@container not (width>=56rem){.\@max-4xl\:absolute{position:absolute}.\@max-4xl\:inset-y-0{inset-block:0}.\@max-4xl\:top-\(--topbar-h\){top:var(--topbar-h)}.\@max-4xl\:right-0{right:0}.\@max-4xl\:z-20{z-index:20}.\@max-4xl\:h-auto{height:auto}.\@max-4xl\:shadow-dialog{--tw-shadow:var(--elevation-dialog);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}}@container (width>=28rem){.\@md\:block{display:block}.\@md\:w-28{width:calc(var(--spacing) * 28)}}@container (width>=32rem){.\@lg\:inline-flex{display:inline-flex}}@container (width>=36rem){.\@xl\:block{display:block}.\@xl\:inline-flex{display:inline-flex}}@container (width>=42rem){.\@2xl\:inline-flex{display:inline-flex}}@container (width>=48rem){.\@3xl\:block{display:block}}@starting-style{.starting\:h-0{height:0}.starting\:opacity-0{opacity:0}}.\[\&_\.xterm-viewport\]\:bg-transparent\! .xterm-viewport{background-color:#0000!important}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0}.\[\&_svg\]\:text-danger svg{color:var(--color-danger)}.\[\&_svg\]\:text-icon svg{color:var(--color-icon)}.\[\&\:\:-webkit-details-marker\]\:hidden::-webkit-details-marker{display:none}.\[\&\>\*\]\:min-h-0>*{min-height:0}.\[\&\>\*\]\:flex-1>*{flex:1}.\[\&\>\*\:first-child\]\:mt-0>:first-child{margin-top:0}.\[\&\>\*\:last-child\]\:mb-0>:last-child{margin-bottom:0}.\[\&\>\*\:last-child\]\:border-b>:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&\>\*\:last-child\]\:border-border-subtle>:last-child{border-color:var(--color-border-subtle)}.\[\&\>\[data-list-row\]\]\:rounded-none>[data-list-row]{border-radius:0}.\[\&\>\[data-list-row\]\]\:border-b>[data-list-row]{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&\>\[data-list-row\]\]\:border-border-subtle>[data-list-row]{border-color:var(--color-border-subtle)}.\[\&\>\[data-list-row\]\:last-child\]\:border-b-0>[data-list-row]:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}.\[\&\>code\]\:border-0>code{border-style:var(--tw-border-style);border-width:0}.\[\&\>code\]\:bg-transparent>code{background-color:#0000}.\[\&\>code\]\:p-0>code{padding:0}.\[\&\>code\]\:text-\[1em\]>code{font-size:1em}.\[\&\>code\]\:text-text-secondary>code{color:var(--color-text-secondary)}.\[\&\>details\:last-child\]\:border-b>details:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.\[\&\>details\:last-child\]\:border-border-subtle>details:last-child{border-color:var(--color-border-subtle)}.\[\&\>li\]\:relative>li{position:relative}.\[\&\>li\]\:pl-6>li{padding-left:calc(var(--spacing) * 6)}.\[\&\>ol\]\:mt-1>ol{margin-top:var(--spacing)}.\[\&\>ol\]\:mb-0>ol{margin-bottom:0}.\[\&\>p\]\:mb-1>p{margin-bottom:var(--spacing)}.\[\&\>span\:last-child\]\:truncate>span:last-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.\[\&\>svg\]\:mt-0\.5>svg{margin-top:calc(var(--spacing) * .5)}.\[\&\>svg\]\:size-3\.5>svg{width:calc(var(--spacing) * 3.5);height:calc(var(--spacing) * 3.5)}.\[\&\>svg\]\:size-4>svg{width:calc(var(--spacing) * 4);height:calc(var(--spacing) * 4)}.\[\&\>svg\]\:size-5>svg{width:calc(var(--spacing) * 5);height:calc(var(--spacing) * 5)}.\[\&\>ul\]\:mt-1>ul{margin-top:var(--spacing)}.\[\&\>ul\]\:mb-0>ul{margin-bottom:0}}:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--elevation-popover:0 0 0 1px #ffffff0f, 0 8px 24px -6px #0009;--elevation-dialog:0 0 0 1px #ffffff12, 0 24px 64px -12px #000000bf;interpolate-size:allow-keywords}:root[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--color-canvas:#f4f6f9;--color-surface:#fff;--color-surface-raised:#fff;--color-surface-hover:#eef1f6;--color-surface-selected:#e4e8f1;--color-surface-inset:#f4f6f9;--color-border:#dfe3ec;--color-border-subtle:#161e3212;--color-border-strong:#cdd2de;--color-text:#161a24;--color-text-secondary:#4c5366;--color-text-tertiary:#5c6377;--color-text-disabled:#a4aab9;--color-icon:#6a7185;--color-primary:#161a24;--color-primary-hover:#2a3040;--color-on-primary:#fff;--color-accent:#2f6fe4;--color-accent-text:#2463d6;--color-accent-subtle:#ecf2fe;--color-success:#1e8e53;--color-warning:#a86a06;--color-danger:#c42828;--color-danger-subtle:#fdeeee;--color-phase-ideation:#c13d7e;--color-phase-spec:#0b7f78;--color-phase-implementation:#b44f0c;--color-scrim:#161a2447;--elevation-popover:0 0 0 1px #0000000f, 0 8px 24px -8px #00000029;--elevation-dialog:0 0 0 1px #0000000f, 0 24px 64px -16px #00000038}:root[data-theme-switching] *,:root[data-theme-switching] :before,:root[data-theme-switching] :after{transition:none!important}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}@keyframes breathe{0%,to{opacity:1}50%{opacity:.4}}@keyframes dotGlow{0%,to{box-shadow:0 0 0 3px color-mix(in oklab, var(--color-accent) 22%, transparent)}50%{box-shadow:0 0 0 5px color-mix(in oklab, var(--color-accent) 8%, transparent)}}@keyframes riseIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeUp{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}@keyframes bodyIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}@keyframes detailIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}@keyframes popIn{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:none}}@keyframes dialogIn{0%{opacity:0;transform:translateY(8px)scale(.98)}to{opacity:1;transform:none}}@keyframes cmdkIn{0%{opacity:0;transform:translateY(8px)scale(.98)}to{opacity:1;transform:none}}@keyframes backdropIn{0%{opacity:0}to{opacity:1}}@keyframes slideInRight{0%{opacity:0;transform:translate(12px)}to{opacity:1;transform:none}}@keyframes toastIn{0%{opacity:0;transform:translateY(8px)scale(.98)}to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}[data-progress]{animation:2s ease-in-out infinite pulse!important}details[data-disclosure]::details-content{transition-duration:.001ms!important}}@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-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@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-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{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-outline-style{syntax:"*";inherits:false;initial-value:solid}@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-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@property --tw-content{syntax:"*";inherits:false;initial-value:""}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}*{box-sizing:border-box}html,body,#root{height:100%;margin:0;padding:0}body{background:var(--color-canvas);color:var(--color-text);font-family:var(--font-sans);font-size:var(--text-sm);line-height:var(--text-sm--line-height);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;overflow:hidden}html{scrollbar-width:thin;scrollbar-color:var(--color-border-strong) transparent}:focus-visible:not(input,textarea,select){outline:2px solid var(--color-focus-ring);outline-offset:2px}:is([tabindex="-1"],[role=menuitem],[role=menuitemradio],[role=menuitemcheckbox],[role=option],[cmdk-item]):focus-visible{outline:none}
|