runcastle 1.2.7 → 1.2.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/bin/runcastle.js +6098 -4370
  2. package/drizzle/0027_dashing_texas_twister.sql +1 -0
  3. package/drizzle/0028_tired_deadpool.sql +2 -0
  4. package/drizzle/0029_damp_stellaris.sql +1 -0
  5. package/drizzle/0030_productive_marvex.sql +1 -0
  6. package/drizzle/0031_backfill_feature_base_branch.sql +10 -0
  7. package/drizzle/0032_gigantic_tempest.sql +1 -0
  8. package/drizzle/meta/0027_snapshot.json +928 -0
  9. package/drizzle/meta/0028_snapshot.json +942 -0
  10. package/drizzle/meta/0029_snapshot.json +949 -0
  11. package/drizzle/meta/0030_snapshot.json +956 -0
  12. package/drizzle/meta/0031_snapshot.json +956 -0
  13. package/drizzle/meta/0032_snapshot.json +949 -0
  14. package/drizzle/meta/_journal.json +42 -0
  15. package/index.js +6075 -4358
  16. package/package.json +1 -1
  17. package/sandcastle-template/Containerfile +9 -1
  18. package/sandcastle-template/Dockerfile +9 -1
  19. package/skills/burner/implement-ticket.md +32 -47
  20. package/skills/burner/resolve-conflict.md +3 -3
  21. package/skills/burner/review-ticket.md +24 -25
  22. package/skills/packs/README.md +95 -5
  23. package/skills/packs/runcastle/.claude-plugin/plugin.json +1 -1
  24. package/skills/packs/runcastle/skills/converge/SKILL.md +26 -21
  25. package/skills/packs/runcastle/skills/ideate/SKILL.md +14 -8
  26. package/skills/packs/runcastle/skills/prepare/SKILL.md +96 -0
  27. package/skills/packs/runcastle/skills/prepare/references/recipes.md +72 -0
  28. package/skills/packs/runcastle/skills/project/SKILL.md +32 -48
  29. package/skills/packs/runcastle/skills/project/references/charter.md +79 -0
  30. package/skills/packs/runcastle/skills/project/references/health-sweeps.md +44 -0
  31. package/skills/packs/runcastle/skills/qa/SKILL.md +29 -13
  32. package/skills/packs/runcastle/skills/revisit/SKILL.md +8 -8
  33. package/skills/packs/runcastle/skills/spec/SKILL.md +3 -3
  34. package/skills/packs/runcastle/skills/tickets/SKILL.md +13 -2
  35. package/skills/packs/runcastle/skills/waypoint/SKILL.md +14 -9
  36. package/web/assets/index-BCAA3_oq.css +1 -0
  37. package/web/assets/index-BlVLhZP1.js +142 -0
  38. package/web/index.html +2 -2
  39. package/web/assets/index-B3xwZ1FR.css +0 -1
  40. package/web/assets/index-C0S4i8wY.js +0 -142
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: revisit
3
3
  description: Fold late-arriving information into a feature whose sessions are finished — amend the docs, then reconcile tickets (update/cancel/emit); an ordinary revisit never advances phases. Also the lap session: on a Rethink from review, digest the test drive, amend decisions + spec, emit the lap's tickets and complete ideation → spec → tickets in the one session. Entry skill for kind=revisit sessions.
4
- disable-model-invocation: false
4
+ disable-model-invocation: true
5
5
  ---
6
6
 
7
7
  # Revisit
@@ -13,7 +13,7 @@ That is the ordinary revisit, and it is what the moves below describe. The one e
13
13
  ## Order of operations
14
14
 
15
15
  1. **Listen first.** The human opens with what changed. If this terminal resumed the previous conversation, use that context; do not re-grill what is already settled. Ask only the questions the NEW information raises.
16
- 2. **Context.** Call `mcp__runcastle__get_feature_context` — it returns the feature, phase, all docs, and all tickets with their ids and statuses. You need the ticket list before any surgery.
16
+ 2. **Context.** Call `mcp__runcastle__get_feature_context` — the feature, its `phase` and `lap`, the canonical docs inlined in `docs[]` (brief, map, decisions, spec), an index of everything else in `moreDocs[]` (test notes, `research/*.md`; fetch one with `mcp__runcastle__read_feature_doc({ relPath })`), and every ticket with its id and status. The injected system prompt carries the slug and paths; trust `get_feature_context` for the live state. When all you need is ticket ids to operate on, `mcp__runcastle__list_tickets({ status? })` is the cheap call — it returns the queue without the docs.
17
17
  3. **Docs.** Capture the change as decision prose:
18
18
  - Append to `docs/features/<slug>/decisions.md` under a dated `## Revisited <date>` heading — never rewrite old decisions, supersede them ("Supersedes: <old decision>").
19
19
  - If `spec.md` exists and the change touches it, amend the affected sections in place.
@@ -29,8 +29,8 @@ That is the ordinary revisit, and it is what the moves below describe. The one e
29
29
 
30
30
  Your kickoff line reads `LAP <n> REVIEW ITERATION`. The human burned the last lap, test-drove the branch, and clicked **Rethink**: the code was right, the *spec* wasn't. `feature.rethink` has already incremented the lap and looped the feature back, so it sits at **ideation**, not review. One trip round the pipeline is a lap, and this session is the whole front half of lap `<n>` — you carry it from what-the-drive-taught to ticket cards waiting on the human's **Burn** click, in this one conversation:
31
31
 
32
- 1. **Digest what the drive taught.** Your inputs are the previous lap's section of `docs/features/<slug>/test-notes.md` and the spec's `## Later laps` section, both injected into your context. **Both may be absent** — that is not an error and not something to go hunting for: interview the human from scratch instead. What did they hit, what surprised them, what do they want instead now they've used it?
33
- 2. **Context.** `mcp__runcastle__get_feature_context` — the feature (including its `lap`), the docs, and the full ticket history across every lap. Skim what the last lap actually landed and what failed before you interview.
32
+ 1. **Digest what the drive taught.** Your two inputs are the previous lap's section of `docs/features/<slug>/test-notes.md` — it is in `moreDocs[]`, so read it with `mcp__runcastle__read_feature_doc({ relPath: "test-notes.md" })` (or off disk) — and the `## Later laps` section of `spec.md`, which is inlined in `docs[]`. **Both may be absent** — that is not an error and not something to go hunting for: interview the human from scratch instead. What did they hit, what surprised them, what do they want instead now they've used it?
33
+ 2. **Context.** `mcp__runcastle__get_feature_context` — the feature (including its `lap`), the docs, and the full ticket history across every lap; each ticket's own `lap` is what separates them. Skim what the last lap actually landed and what failed before you interview.
34
34
  3. **Never re-emit a promoted note.** Notes the human already promoted from the review checklist are tickets in *this* lap and arrive as ids in your context. However well such a note reads as a ticket, if its id is in front of you the work is already carded — emitting it again gives the burner the same job twice.
35
35
  4. **Grill, briefly.** A small rethink is a short grilling: a few questions, one at a time, each with your recommended answer attached. Prune and promote `## Later laps` entries with the human as part of that conversation — what the drive taught is usually what decides which deferred scope this lap picks up and which stays parked.
36
36
  5. **Amend the docs.** Append this lap's learning to `docs/features/<slug>/decisions.md` under a `## Lap <n>` heading (the convention) — never rewrite old decisions, supersede them. Then amend `spec.md` in place: the sections this lap changes, plus the pruned `## Later laps`.
@@ -46,12 +46,12 @@ If the rethink turns out to be genuinely big — whole branches of design reopen
46
46
 
47
47
  - **Never call `complete_phase` in an ordinary revisit.** It has no gates to cross; the human drives the pipeline from the UI. **Lap mode is the one exception** — advancing ideation → spec → tickets is its job (move 7), and nothing else here licenses it.
48
48
  - **Never resolve or reopen waypoints.** If a resolved waypoint's answer is now wrong, record the superseding decision in `decisions.md` — the map's history stays intact.
49
- - **Never implement changes.** Code changes ride tickets; the burner (or a human) implements them.
49
+ - **Code changes ride tickets** — the burner (or a human) implements them, never this session. (The no-code rule itself is in your injected prompt and enforced by the edit guard.)
50
50
 
51
51
  ## Scope check
52
52
 
53
- If what the human brings is not an amendment but a whole new capability, say so:
53
+ If what the human brings is not an amendment but a whole new capability, say so — and park it rather than losing it:
54
54
 
55
- > That reads like a new feature, not a revision of this one. Create it in the runcastle UI and grill it there — I can record a pointer note here.
55
+ > That reads like a new feature, not a revision of this one. I'll park it as a draft so it isn't lost; you can start it from the runcastle UI when you want it, and it gets grilled there.
56
56
 
57
- Then `record_event` a one-line note so the idea is not lost.
57
+ `mcp__runcastle__create_feature({ title, oneLiner, brief, draft: true })` — a parked draft, no branch cut and nothing written, with the `brief` carrying why you deferred it and what it must not swallow. `draft: true` is the only door open to you; a full create belongs to the project session.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: spec
3
- description: Synthesize the ideation conversation and decisions.md into docs/features/<slug>/spec.md, then complete the spec phase. No interview — pure synthesis. Invoked by /runcastle:ideate.
3
+ description: Synthesize the ideation conversation and decisions.md into docs/features/<slug>/spec.md, then complete the spec phase. No interview — pure synthesis. Invoked by /runcastle:ideate or /runcastle:converge.
4
4
  disable-model-invocation: false
5
5
  ---
6
6
  <!-- Forked from Matt Pocock's to-spec skill, via https://github.com/mattpocock/skills, 2026-07-14, adapted for runcastle -->
@@ -42,6 +42,6 @@ Turn the ideation conversation plus `docs/features/<slug>/decisions.md` into a s
42
42
 
43
43
  Do **not** hardcode specific file paths or code snippets — they go stale. Exception: if the ideation produced a snippet that pins a decision more precisely than prose can (a state machine, reducer, schema, type shape), inline the decision-rich parts and note it came from that discussion.
44
44
 
45
- 4. **Complete the phase.** `mcp__runcastle__record_event({ type: "spec.written", message: "<feature title>" })`, then `mcp__runcastle__complete_phase({ phase: "spec" })`. If the gate returns `ok: false`, it names what is missing — fix and retry.
45
+ 4. **Complete the phase.** `mcp__runcastle__complete_phase({ phase: "spec" })`. If the gate returns `ok: false`, it names what is missing — fix and retry. It logs its own timeline event and checkpoints `spec.md` into git; do not add an event of your own.
46
46
 
47
- Return control to `/runcastle:ideate`, which invokes `/runcastle:tickets` next.
47
+ Return control to **the session skill that invoked you** — `/runcastle:ideate` for a linear feature, `/runcastle:converge` for a mapped one. It invokes `/runcastle:tickets` next. Do **not** invoke a session skill yourself to hand back: you are already inside one, and loading another session's entry skill would drop a whole procedure this session is not running (a converge session in particular is forbidden to grill) into the window.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: tickets
3
- description: Break the spec into vertical slices sized to earn a fresh sandboxed agent session and land inside it, and emit them via MCP. Then complete the tickets phase. Invoked by /runcastle:ideate.
3
+ description: Break the spec into vertical slices sized to earn a fresh sandboxed agent session and land inside it, and emit them via MCP. Then complete the tickets phase. Invoked by /runcastle:ideate or /runcastle:converge.
4
4
  disable-model-invocation: false
5
5
  ---
6
6
  <!-- Forked from Matt Pocock's to-tickets skill, via https://github.com/mattpocock/skills, 2026-07-14, adapted for runcastle -->
@@ -63,6 +63,17 @@ Each ticket:
63
63
  - **seams** — `string[]`, the public interfaces to test at (carry them from the spec's Seams section; prefer existing, prefer the highest, prefer one).
64
64
  - **blockedBy** — `number[]`, **required**, the seq numbers (from your 1..N ordering) of the tickets that *genuinely* gate this one. Only true gates; pass `[]` when there are none — omitting it fails validation.
65
65
  - **kind** — `"implementation"` (the default, omit it) or `"review"` for the one review ticket described above.
66
+ - **model** — optional, and usually omitted. See below.
67
+
68
+ ### Assigning a model (only from the annotated roster)
69
+
70
+ `mcp__runcastle__get_feature_context` returns `annotatedModels`: `{ id, runtime, note }` for the models the human wrote a use-case note against, and only those. That list is the *entire* set of ids you may put in a ticket's `model`.
71
+
72
+ - **Empty list → never set `model`.** The human annotated nothing, so there is no stated reason to prefer one model over another. Omit the field on every ticket.
73
+ - **Non-empty → set it only where a note actually fits the ticket.** The note is the human's own vocabulary for what that model is good at ("UI/UX taste", "mechanical refactors"); assign it when this ticket's work is plainly that, and leave the field unset when nothing in the list speaks to it. Unset is the good default — it falls through to the model the project already burns on.
74
+ - **Never invent an id**, never copy one from these docs or from memory, and never write a model that is not in `annotatedModels` — the store rejects it and the whole batch fails to emit.
75
+
76
+ The human sees the assignment on the ticket card and can change or clear it before Burn, so a wrong-but-reasonable choice is cheap; a fabricated id is not.
66
77
 
67
78
  ## 3. Self-check, then emit
68
79
 
@@ -79,4 +90,4 @@ Then:
79
90
  - `mcp__runcastle__emit_tickets({ tickets: [...] })` — **emit the array; do NOT write ticket files.** It returns `{ stored, ids }` and logs the timeline event itself; do not record one of your own.
80
91
  - `mcp__runcastle__complete_phase({ phase: "tickets" })`. If the gate returns `ok: false`, fix what it names and retry.
81
92
 
82
- Return to `/runcastle:ideate` to close out the session.
93
+ Return control to **the session skill that invoked you** — `/runcastle:ideate` for a linear feature, `/runcastle:converge` for a mapped one — and let it close out the session. Do **not** invoke a session skill yourself to hand back: you are already inside one, and loading another session's entry skill would drop a whole procedure this session is not running (a converge session in particular is forbidden to grill) into the window.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: waypoint
3
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
4
+ disable-model-invocation: true
5
5
  ---
6
6
  <!-- runcastle mapped-ideation waypoint session (ADR-0001 §13.5) -->
7
7
 
@@ -11,20 +11,25 @@ This is a **mapped-ideation** feature: too big for one context window, so it was
11
11
 
12
12
  ## 0. Orient
13
13
 
14
- 1. Call `mcp__runcastle__get_feature_context`. For a mapped feature it returns, besides the usual feature/phase/docs, the full `map` state: `waypoints`, the `frontier`, and — the one that matters here — `assignedWaypoint`: **your** waypoint (the one this session claimed). Read its `title`, `type`, and `question`. The injected system prompt carries the same question; trust `get_feature_context` for the live state.
15
- 2. Read `docs/features/<slug>/map.md` (Destination, Notes, Not-yet-specified, Out-of-scope) so your answer fits the north star, and skim `decisions.md` for what is already locked — **do not re-litigate settled decisions.**
16
- 3. `mcp__runcastle__record_event({ type: "waypoint.started", message: "<waypoint title>" })`.
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. 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.
17
20
 
18
21
  ## 1. Work it — mode by type
19
22
 
20
- Your `assignedWaypoint.type` picks the mode:
23
+ Your waypoint's `type` picks the mode:
21
24
 
22
- - **`grilling`** → grill the human on the question exactly as `/runcastle:ideate` does: 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.
23
- - **`prototype`** → build the smallest throwaway spike that answers the question (a fork to compare approaches, a spike to prove feasibility). The prototype exists to produce a decision, not to ship — capture what it proved, then let it go.
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.
24
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.
25
28
 
26
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.
27
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
+
28
33
  ## 2. Write the decision prose — directly, to the docs
29
34
 
30
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:
@@ -39,13 +44,13 @@ The answer is **prose in the docs**, not a tool argument. Serial HITL makes thes
39
44
 
40
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.
41
46
 
42
- Write the prose **before** you resolve — the resolve tool flips machinery only and does not carry your answer.
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.
43
48
 
44
49
  ## 3. Resolve — end the session
45
50
 
46
51
  `mcp__runcastle__resolve_waypoint({ id: "<your waypoint id>", disposition: "resolved" | "dropped", summary: "<one-line gist>" })`.
47
52
 
48
- 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.
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.
49
54
 
50
55
  Then tell the human plainly:
51
56
 
@@ -0,0 +1 @@
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:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.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:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2)format("woff2-variations");unicode-range:U+1F??}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-greek-wght-normal-CkhJZR-_.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-vietnamese-wght-normal-CBcvBZtf.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:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-latin-ext-wght-normal-DO1Apj_S.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:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-latin-wght-normal-Dx4kXJAl.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:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(data:font/woff2;base64,d09GMgABAAAAAAfsABQAAAAAEAwAAAeCAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoP0hWQVJbBmA/U1RBVIFiJyYAdC9qEQgKhGSEAAsgADCGCAE2AiQDOgQgBYlMB4EUDAcbLQ4onoexrSC/2ZyLAa8p8VHB8/x3Vue+V0hVJalMJg2nx/TCrQXxBeqLjQG7FyM1WEa/X1tEXN7cFz9EJEMmMUz3RihWSSKeQCbcIou0izz/C8v+fq3VfajEa9gDD11CImXS7qL/RJFVzC1qiB6KmKeD6TZdQ6IRGv78dL6uSVVCfgni5mzu7kcgQBgAEAQTQRCoL++STTYybkJxNfQxAAIAGu8OdEB9teW2jh4BpgDqFjAeSEByW3zFP0CBBgNMsMCGEDjgggdhiEAUAeIIED7ABTDUEnkIE9Q9ahFgKttcVhApo4ACB4qobHaccgDfEjFO6aaWUhjMLt2SyIvHKoDqoA4CSUwEIYQCEjhAO9R1G6keDeDZGjNo+AhxOjCEGTr1WeIF3kYBiLAOKvkJSMiKX0VdAyQt3SDJClCkxJCHkCzfqyVTriJZLcolS32JZHUekq2TYNkYtCtjYHMQXSxGjXDz2t/yLWXzDzxz+o3zFwDEaN23F+13pyMdQAEaSKAR9vcGq4A4MTSKCElGW+M7UcY7xqkggITb28ZJhlqc9q2twYKTt0NjixBgYvO9BIihEBLYuOFXQzfIQ7dXGUEEEgFDooBfAzqiQbpJrhiWSuKJCRFKYbHCyJKI2G5GiZbNAvgAu5pc3vwx4G+g3aDkhklABiSz0BICXrYghtYhx/cdJ+44rY2oZ0aMNRFz3VZjb6W33F3gzltqtOCV8tTHSpOeXuItfvr5lCdfzFpqtEitvqdcdGGFd28ZqqC0tPbeChGXgrIlnhSWu/eUso4uKWFLugyDzQJhflY4659+WjQ++6x72WUMv9G8mw6QJl7BVxX5fe/kpUsOvnZwee9uQ0cGXYd0o89XB2748sDSnt8d2VphdOTTgceDVvOds0v9P/s7HPq15aGun/6Vllb56f1dl0t1LejqrNkpdRZsG8TOnM5vkBG5oiVyVGnS8LHps5cfNWJs6qKPfaNSxiQNBUm3cKNWROr0GSur7Za31k1vieq7LH11VF+jXdRIasRKflc7jkobm1Z9te1IyZA0pDkhLR98+H37Zf1c/8at+dB7x+7GfVyTfJMPiYztsnl59Y5l4j+0n1RXlpHnF3Tq7HecmNF/CJodEMAikruxiyJaGLvHOdAfoA+oDvpjBm2b91cHGRZMU9n25xEU0A8fgEEAdKI3Q1iDtc034sug5YVMkE2jsE+BIkwSoQ3gxXMqz9tELp48bd0cFKOKS7xYjEuXBnZP5ia7DyiO/X/YI+PQSbt2uSdqAkWL9nQbV1XB94/+uPfdZz8dnXYFBYrcTl2SIR/ybxJNJPz/Gupb0JaZeens2ekC7EKr8t+Ls/P5VJPYJdHKyqfg2nqU6bhlidzcddQV/7MmecTzJ5VPcKXkNKSEogHjYFx6QZ7rQ+FSe8njaiNuOnXS8H2ScQ619c2mC3VTtauL0rRbXd/CkSOP37FY9Zkjz8+GibYUMOEWF+RdrFS8Ecv1SHOpPUPZGEIpjPvFyU5cXKjd6OXqorTqy9GwRd++HVufPGnVsW+aO3vggKZ18jR9sXaTC1PWTEsVUaK0FkNySbTQDqlm2PfDjZcu4aalnSLKjnOoYQ0nUlqqXcGpPu/4VgV/xU2pAqW4BW3qzhQ8/hFKhV2qE3+BKAtDqBXjfgnVdH4y0wg5tbVNRenNdTWOrenWLcupQdmsbq5b+18piTe/xRdp1xbILxNPJGInm2z6hoB21Lal0i+ePTtd7B45+3XhFJ329evskXm7qurUVREotqSluSo/L29d3qDhI4YOQqWhI4YNvBNfsMHeXKemXrxQfKeuPOGRVayA3JtkJKEgbPp+dXUDluddutRYLFoXGXWX6N3WFaGLbQtRSitVYNacTNSdy7AaG/HSaUEANcBoGXNdcZvZsOqQ1icBDv21/gzAoYPHH/WDW0qNR3QTYKEAEHig6o13NXbND06CQPlRtYjGNnSktRc09k1mAMDvAlDKfQjgy6fssInlfzmNAjKkDxoxHOBLdVRAIVt9j4qo+hA1w9T1aNBNTUOTTNUHLbqokE+UAfJXCIGw/IxCSL5GRUJeR40rL/UxTm4Q08H6MbCs70ObuNyIIXrINHQYInF06UUlevTjbQzTh5upiDMzMMogUtEnjPs/Y7jAHCJeB0GBHh04tC6FiB6ZFB1oArUSIoFoqhzCeAN6lHwm0T4C3VVPWvjpSMXReuWesMEcoqrmgtNBGd2noWeV0hNAz9rFeShNJxHGsPa3HXeKTk8b55hahySYHaYKKFFLpCfN8rsoaJn01CR04Gkc+5k7KVTCmClX8Q10HCrUEkVlSX+XO33oQR9609tJ516H497WSobWs5Up6TLaS10/dessIskgJSLiDlWvHVUywpkQ7hdPZqGyiEF0uVQerVcPamT1A3eKXdyI1vG9OoflrSXihZ1qqGE3nhmAgiIbRCQgPLEPtOM3UQwTLYaYYomNlpA44opnjV6jkD6id80OOrzf6BzmMD6eEa1zKyeYG1fzfEf16V6jw9XYOaar1/b2kP/IYX8oR2mcFvv2GtBV3JXgd437AQAA)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:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.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:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.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:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.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}:root{--bg:#090b10;--panel:#0e1117;--panel-2:#0b0e14;--panel-3:#12151d;--panel-inset:#07080b;--hairline:#1c2230;--hairline-soft:#151a26;--hairline-strong:#2a3242;--text:#dde3ed;--text-2:#96a0b0;--text-3:#5f6a7a;--text-4:#3a4354;--accent:#7c6cf6;--accent-hi:#a49bff;--accent-2:#8f80f8;--accent-ink:#0d0722;--accent-soft:#161329;--accent-line:#3d3670;--ph-ideation:#8b7cf8;--ph-spec:#8a94a2;--ph-tickets:#d7a94a;--ph-implementation:#f0883e;--ph-review:#58a6ff;--ph-shipped:#3fb950;--danger:#f4594e;--needs:#d7a94a;--warn:var(--needs);--ok:#3fb950;--drive:#58a6ff;--mono:"JetBrains Mono Variable", "Cascadia Code", Consolas, ui-monospace, monospace;--sans:"Inter Variable", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--radius-sm:5px;--radius:7px;--radius-lg:10px;--radius-pill:999px;--control-h:28px;--sidebar-w:252px;--inspector-w:300px;--maprail-w:300px;--content-max:1060px;--shadow-menu:0 8px 28px -10px #000000b3, 0 2px 8px -2px #00000080;--shadow-overlay:0 24px 70px -24px #000000d9, 0 8px 24px -12px #0009;--dur-1:.12s;--dur-2:.19s;--dur-3:.32s;--ease:cubic-bezier(.22, .61, .24, 1);--ease-out:cubic-bezier(.16, 1, .3, 1);--ring:0 0 0 2px var(--bg), 0 0 0 4px #7c6cf680}*{box-sizing:border-box}html,body,#root{height:100%;margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:var(--sans);letter-spacing:.004em;font-feature-settings:"tnum" 1, "cv05" 1;-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;font-size:13px;line-height:1.45;overflow:hidden}button{color:inherit;font-family:inherit}:focus-visible{box-shadow:var(--ring);border-radius:var(--radius-sm);outline:none}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:#1c2230 padding-box padding-box;border:2px solid #0000;border-radius:5px}::-webkit-scrollbar-thumb:hover{background:#2a3242 padding-box padding-box;border:2px solid #0000}::-webkit-scrollbar-track{background:0 0}.empty-state{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:6px;padding:44px 24px;display:flex}.empty-state.is-compact{padding:26px 20px}.empty-state-icon{width:34px;height:34px;color:var(--text-3);background:var(--panel-3);border:1px solid var(--hairline);border-radius:9px;justify-content:center;align-items:center;margin-bottom:4px;display:flex}.empty-state-title{color:var(--text-2);font-size:13px;font-weight:500}.empty-state-hint{color:var(--text-3);text-wrap:pretty;max-width:42ch;font-size:12px;line-height:1.55}.empty-state-action{margin-top:8px}.mono{font-family:var(--mono);font-size:12.5px}.dim{color:var(--text-3)}.dim-line{color:var(--text-3);font-family:var(--mono);padding:2px 0;font-size:12.5px}.section-title{text-transform:uppercase;letter-spacing:.09em;color:var(--text-3);padding:4px 0;font-size:11px;font-weight:600}.phase-fg-ideation{color:var(--ph-ideation)}.phase-fg-spec{color:var(--ph-spec)}.phase-fg-tickets{color:var(--ph-tickets)}.phase-fg-implementation{color:var(--ph-implementation)}.phase-fg-review{color:var(--ph-review)}.phase-fg-shipped{color:var(--ph-shipped)}.btn{height:var(--control-h);border-radius:var(--radius);border:1px solid var(--hairline);color:var(--text);cursor:pointer;white-space:nowrap;transition:border-color var(--dur-1) var(--ease), background var(--dur-1) var(--ease), color var(--dur-1) var(--ease), transform var(--dur-1) var(--ease), box-shadow var(--dur-2) var(--ease), opacity var(--dur-1);background:0 0;justify-content:center;align-items:center;gap:6px;padding:0 12px;font-size:12.5px;display:inline-flex}.btn:disabled{opacity:.4;cursor:not-allowed}.btn:active:not(:disabled){transform:translateY(.5px)scale(.99)}.btn-ghost:hover:not(:disabled){border-color:var(--hairline-strong);background:var(--panel);color:var(--text)}.btn-solid{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}.btn-solid:hover:not(:disabled){background:var(--accent-2);border-color:var(--accent-2);transform:translateY(-1px);box-shadow:0 4px 16px -6px #7c6cf6b3}.btn-solid:active:not(:disabled){box-shadow:none;transform:translateY(0)}.btn-danger{border-color:color-mix(in srgb, var(--danger) 55%, var(--hairline));color:var(--danger)}.btn-danger:hover:not(:disabled){border-color:var(--danger);background:#f4594e1f}.btn-xs{border-radius:var(--radius-sm);height:22px;padding:0 9px;font-size:11.5px}.btn-lg{height:32px;padding:0 16px;font-size:13px}.ghost-link{color:var(--text-2);cursor:pointer;transition:color var(--dur-1) var(--ease);background:0 0;border:none;padding:2px 0;font-size:12.5px}.ghost-link:hover:not(:disabled){color:var(--accent-hi)}.ghost-link:disabled{opacity:.4;cursor:not-allowed}.chip{border-radius:var(--radius-pill);border:1px solid var(--hairline);height:19px;font-family:var(--mono);color:var(--text-2);white-space:nowrap;align-items:center;gap:5px;padding:0 8px;font-size:10.5px;display:inline-flex}.chip-neutral{color:var(--text-2)}.chip-blocked{color:var(--needs);border-color:color-mix(in srgb, var(--needs) 40%, transparent)}.chip-ticket-pending{color:var(--text-3)}.chip-ticket-burning{color:var(--ph-implementation);border-color:color-mix(in srgb, var(--ph-implementation) 45%, transparent);background:color-mix(in srgb, var(--ph-implementation) 8%, transparent);animation:1.5s ease-in-out infinite pulse}.chip-ticket-done{color:var(--ok);border-color:color-mix(in srgb, var(--ok) 40%, transparent)}.chip-ticket-failed{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 45%, transparent)}.chip-ticket-cancelled{color:var(--text-3);text-decoration:line-through}.chip-kind-review,.chip-note-agent{color:var(--ph-review);border-color:color-mix(in srgb, var(--ph-review) 40%, transparent);background:color-mix(in srgb, var(--ph-review) 8%, transparent)}.chip-note-agent{flex:none}.chip-run-running{color:var(--ph-implementation);border-color:color-mix(in srgb, var(--ph-implementation) 45%, transparent);animation:1.5s ease-in-out infinite pulse}.chip-run-succeeded{color:var(--ok);border-color:color-mix(in srgb, var(--ok) 40%, transparent)}.chip-run-failed{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 45%, transparent)}.chip-run-cancelled{color:var(--text-3)}.tag{font-family:var(--mono);text-transform:lowercase;font-size:12px;font-weight:600}.status-dot{background:var(--text-3);border-radius:50%;flex:none;width:7px;height:7px;display:inline-block}.sess-dot-launching{background:var(--needs);animation:1.3s ease-in-out infinite pulse}.sess-dot-live{background:var(--ok);box-shadow:0 0 0 3px #3fb95029}.sess-dot-ended{background:var(--text-3)}.spinner,.spin-ring{border:1.6px solid var(--ph-implementation);border-top-color:#0000;border-radius:50%;flex:none;width:12px;height:12px;animation:.8s linear infinite spin;display:inline-block}.shell{grid-template-rows:44px 1fr 28px;height:100%;display:grid}.shell-body{grid-template-columns:var(--sidebar-w) 1fr var(--inspector-w);min-height:0;display:grid}.shell.inspector-collapsed .shell-body{grid-template-columns:var(--sidebar-w) 1fr}.titlebar{border-bottom:1px solid var(--hairline);background:var(--panel);align-items:center;gap:9px;padding:0 14px;font-size:13px;display:flex}.tb-logo{flex:none;justify-content:center;align-items:center;display:inline-flex}.tb-app{color:var(--text);letter-spacing:.02em;font-weight:600}.wordmark{font-family:var(--mono);letter-spacing:-.25px;white-space:nowrap;font-size:13px;font-weight:600;line-height:1}.wordmark.is-lg{letter-spacing:-.5px;font-size:21px}.wordmark-run{color:var(--accent-hi)}.wordmark-castle{color:var(--text)}.tb-home:hover .wordmark-castle{color:var(--accent-hi)}.tb-arrow,.tb-dot{color:var(--text-4);flex:none}.tb-project{color:var(--text-2);text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.tb-spacer{flex:1}.tb-search{background:var(--panel-inset);border:1px solid var(--hairline);border-radius:var(--radius);height:28px;color:var(--text-3);cursor:pointer;transition:border-color var(--dur-1), color var(--dur-1), background var(--dur-1);align-items:center;gap:8px;min-width:220px;padding:0 8px 0 10px;font-size:12px;display:flex}.tb-search:hover{border-color:var(--hairline-strong);color:var(--text-2);background:var(--panel-3)}.tb-search-spacer{flex:1}.kbd{font-family:var(--mono);border:1px solid var(--hairline-strong);color:var(--text-3);border-radius:4px;padding:1px 5px;font-size:10px;line-height:1.4}.tb-runs{border-radius:var(--radius-pill);border:1px solid color-mix(in srgb, var(--ph-implementation) 30%, transparent);background:color-mix(in srgb, var(--ph-implementation) 9%, transparent);height:24px;color:var(--ph-implementation);font-family:var(--mono);animation:fadeUp var(--dur-3) var(--ease-out);align-items:center;gap:7px;padding:0 10px;font-size:11px;display:inline-flex}.health-dot{background:var(--text-3);width:8px;height:8px;transition:background var(--dur-2);border-radius:50%;display:inline-block}.tb-health.is-ok .health-dot,.sb-health.is-ok .health-dot{background:var(--ok)}.tb-health.is-down .health-dot,.sb-health.is-down .health-dot{background:var(--danger);animation:1s ease-in-out infinite pulse}.tb-icon-btn{border-radius:var(--radius);width:28px;height:28px;color:var(--text-3);cursor:pointer;transition:color var(--dur-1), background var(--dur-1);background:0 0;border:none;justify-content:center;align-items:center;display:inline-flex}.tb-icon-btn:hover{color:var(--text);background:var(--panel-3)}.tb-icon-btn.is-on{color:var(--text-2);background:var(--panel-3)}.sidebar{border-right:1px solid var(--hairline);background:var(--panel-2);flex-direction:column;min-height:0;display:flex}.sidebar-head{border-bottom:1px solid var(--hairline-soft);flex:0 0 40px;justify-content:space-between;align-items:center;height:40px;padding:0 12px;display:flex}.sidebar-head .pane-title{text-transform:uppercase;letter-spacing:.09em;color:var(--text-3);font-size:11px;font-weight:600}.new-btn{border:1px solid var(--accent-line);border-radius:var(--radius);height:23px;color:var(--accent-hi);cursor:pointer;transition:background var(--dur-1), border-color var(--dur-1), transform var(--dur-1);background:0 0;align-items:center;gap:4px;padding:0 9px;font-size:11.5px;font-weight:500;display:inline-flex}.new-btn:hover{background:var(--accent-soft);border-color:var(--accent)}.new-btn:active{transform:scale(.96)}.sidebar-head .pane-title{margin-right:auto}.sidebar-head .new-btn+.new-btn{margin-left:6px}.new-btn.is-quick{border-color:var(--hairline);color:var(--text-3)}.new-btn.is-quick:hover{background:var(--panel-3);border-color:var(--hairline-strong);color:var(--text-2)}.sidebar-empty{color:var(--text-3);padding:14px 10px;font-size:12px;line-height:1.6}.sidebar-list{flex:1;min-height:0;padding:4px 6px 12px;overflow-y:auto}.triage-group+.triage-group{margin-top:4px}.triage-label{letter-spacing:.09em;text-transform:uppercase;align-items:center;gap:6px;padding:11px 8px 5px;font-size:10px;font-weight:700;display:flex}.triage-count{color:var(--text-4);font-family:var(--mono);font-weight:500}.triage-needsYou .triage-label>.triage-name{color:var(--needs)}.triage-agentWorking .triage-label>.triage-name{color:var(--ph-implementation)}.triage-inProgress .triage-label>.triage-name{color:var(--text-3)}.triage-drafts .triage-label>.triage-name{color:var(--text-4)}.triage-shipped .triage-label>.triage-name{color:var(--ph-shipped)}.feature-row{border-radius:var(--radius-sm);width:100%;transition:background var(--dur-1) var(--ease);align-items:center;display:flex;position:relative}.feature-row-main{cursor:pointer;text-align:left;background:0 0;border:none;flex-direction:column;flex:1;gap:3px;min-width:0;padding:6px 4px 7px 9px;display:flex}.feature-line{align-items:center;gap:8px;min-width:0;display:flex}.feature-line.is-meta{gap:7px}.feature-row:before{content:"";background:var(--accent);transform-origin:50%;width:2px;transition:transform var(--dur-2) var(--ease-out);border-radius:2px;position:absolute;top:6px;bottom:6px;left:1px;transform:scaleY(0)}.feature-row:hover,.feature-row.is-active{background:var(--panel-3)}.feature-row.is-active:before{transform:scaleY(1)}.feature-row.is-active .feature-title{color:var(--text)}.feature-row.is-dim{opacity:.55}.feature-row.is-dim:hover{opacity:.85}.project-pin{border-bottom:1px solid var(--hairline-soft);flex:none;padding:6px}.project-row{border-radius:var(--radius-sm);background:var(--panel-3);cursor:pointer;text-align:left;width:100%;min-height:32px;transition:background var(--dur-1) var(--ease), border-color var(--dur-1) var(--ease);border:1px solid #0000;align-items:center;gap:8px;padding:0 9px;display:flex}.project-row:hover{border-color:var(--hairline-strong)}.project-row.is-active{border-color:var(--accent-line);background:var(--accent-soft)}.project-row-mark{opacity:.85;align-items:center;display:flex}.project-row.is-active .project-row-mark{opacity:1}.project-row-name{min-width:0;color:var(--text-2);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:12.5px;overflow:hidden}.project-row.is-active .project-row-name{color:var(--text)}.project-row-kick{letter-spacing:.09em;text-transform:uppercase;color:var(--text-4);font-size:9.5px;font-weight:700}.project-row-live{color:var(--accent-hi);align-items:center;gap:5px;font-size:10.5px;display:inline-flex}.project-row-live .spin-ring{border-color:var(--accent);border-top-color:#0000;width:10px;height:10px}.row-actions{flex:none;padding-right:4px;position:relative}.row-actions-btn{color:var(--text-3);cursor:pointer;border-radius:var(--radius-sm);transition:background var(--dur-1) var(--ease), color var(--dur-1) var(--ease);background:0 0;border:none;padding:2px 5px;font-size:15px;line-height:1}.row-actions-btn:hover{background:var(--panel-3);color:var(--text)}.row-actions-menu{z-index:20;background:var(--panel-2);border:1px solid var(--border);border-radius:var(--radius-sm);flex-direction:column;min-width:128px;padding:4px;display:flex;position:absolute;top:calc(100% - 2px);right:4px;box-shadow:0 6px 20px -8px #0009}.row-actions-item{text-align:left;border-radius:var(--radius-sm);cursor:pointer;color:var(--text-2);transition:background var(--dur-1) var(--ease), color var(--dur-1) var(--ease);background:0 0;border:none;padding:5px 8px;font-size:12.5px}.row-actions-item:hover{background:var(--panel-3);color:var(--text)}.row-actions-item.is-danger{color:var(--danger)}.show-archived-toggle,.lane-expander{width:100%;color:var(--text-3);cursor:pointer;text-align:left;border-radius:var(--radius-sm);transition:background var(--dur-1) var(--ease), color var(--dur-1) var(--ease);background:0 0;border:none;margin-top:8px;padding:6px 9px;font-size:11.5px}.show-archived-toggle:hover,.lane-expander:hover{background:var(--panel-3);color:var(--text-2)}.feature-dot{opacity:.9;border-radius:3px;flex:none;width:8px;height:8px}.phase-bg-ideation{background:var(--ph-ideation)}.phase-bg-spec{background:var(--ph-spec)}.phase-bg-tickets{background:var(--ph-tickets)}.phase-bg-implementation{background:var(--ph-implementation)}.phase-bg-review{background:var(--ph-review)}.phase-bg-shipped{background:var(--ph-shipped)}.feature-draft-glyph{width:8px;color:var(--text-4);flex:none;font-size:11px;line-height:1}.feature-title{min-width:0;color:var(--text-2);text-overflow:ellipsis;white-space:nowrap;transition:color var(--dur-1);flex:1;font-size:12.5px;font-weight:550;overflow:hidden}.feature-slug{min-width:0;font-family:var(--mono);color:var(--text-3);text-overflow:ellipsis;white-space:nowrap;flex:0 auto;font-size:10.5px;overflow:hidden}.feature-progress{color:var(--text-3);flex:none;font-size:10.5px}.feature-chip{color:var(--text-3);flex:none;align-items:center;gap:4px;font-size:10.5px;display:flex}.feature-chip.is-needsMe{color:var(--needs)}.feature-chip.is-working{color:var(--ph-implementation)}.feature-chip.is-shipped{color:var(--ph-shipped)}.feature-chip.is-draft{color:var(--text-4)}.feature-chip .spin-ring{border-width:1.4px;width:9px;height:9px}.feature-line.is-meta .mini-map{margin-left:auto}.needs-dot{background:var(--needs);border-radius:50%;width:7px;height:7px}.needs-attention{background:var(--danger)}.needs-grill,.needs-burn,.needs-ship{background:var(--needs)}.mini-map{align-items:center;gap:2px;display:flex}.mini-seg{background:var(--text-4);width:6px;height:6px;transition:background var(--dur-2);border-radius:2px}.mini-seg.is-done{background:var(--text-3)}.mini-seg.is-current{background:var(--accent);box-shadow:0 0 0 2px #7c6cf638}.mini-seg.is-skipped{border:1px solid var(--text-4);background:0 0}.sidebar-foot{border-top:1px solid var(--hairline-soft);color:var(--text-4);padding:10px 12px;font-size:11px;line-height:1.5}.nf-form{border:1px solid var(--hairline);border-radius:var(--radius);background:var(--panel);animation:fadeUp var(--dur-2) var(--ease-out);flex-direction:column;gap:8px;margin:6px;padding:10px;display:flex}.workspace{background:var(--bg);flex-direction:column;min-width:0;min-height:0;display:flex;position:relative}.ws-empty{flex-direction:column;height:100%;display:flex;overflow-y:auto}.ws-empty-inner{min-height:100%;color:var(--text-3);flex-direction:column;justify-content:center;align-items:center;gap:12px;display:flex}.ws-empty-logo{opacity:.85;justify-content:center;align-items:center;display:flex}.ws-empty-title{color:var(--text-2);font-size:14px;font-weight:500}.ws-empty-sub{color:var(--text-3);text-align:center;max-width:40ch;font-size:12.5px}.ws-empty-actions{gap:10px;display:flex}.ws-empty-hint{color:var(--text-4);text-align:center;max-width:44ch;font-size:12px;line-height:1.5}.talk-door{color:var(--text-3);cursor:pointer;border-radius:var(--radius-sm);transition:color var(--dur-1) var(--ease);background:0 0;border:none;padding:2px 4px;font-size:12px}.talk-door:hover:not(:disabled){color:var(--accent-hi)}.talk-door:disabled{opacity:.5;cursor:default}.nf-actions-spacer{flex:1}.pw-tag{border-radius:var(--radius-pill);border:1px solid var(--accent-line);background:var(--accent-soft);height:18px;color:var(--accent-hi);letter-spacing:.09em;align-items:center;padding:0 8px;font-size:9.5px;font-weight:700;display:inline-flex}.ws-branch.is-static{cursor:default}.pw-consequence{color:var(--text-3);margin-top:8px;font-size:12px;line-height:1.5}.pw-landing{flex-wrap:wrap;align-items:center;gap:8px;margin-top:8px;display:flex}.pw-landing .nf-base-label{color:var(--text-3);font-size:12px}.pw-landing .size-hint{flex-basis:100%}.pw-landing-origin{letter-spacing:.09em;text-transform:uppercase;border-radius:var(--radius-sm);border:1px solid var(--hairline);color:var(--text-3);padding:2px 6px;font-size:10px;font-weight:700}.pw-landing-origin.is-vanished{border-color:color-mix(in srgb, var(--danger) 55%, var(--hairline));color:var(--danger)}.pw-frame{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel-2);margin-bottom:18px;padding:14px 16px}.pw-frame-head{letter-spacing:.09em;text-transform:uppercase;color:var(--text-3);margin-bottom:8px;font-size:10px;font-weight:700}.pw-frame-list{color:var(--text-3);flex-direction:column;gap:5px;margin:0;padding-left:18px;font-size:12.5px;line-height:1.55;display:flex}.pw-frame-list b{color:var(--text-2);font-weight:600}.pw-frame-list code{font-family:var(--mono);font-size:11.5px}.pw-term{height:clamp(300px,100dvh - 420px,1200px)}.pw-rest-title{color:var(--text-2);font-size:14px;font-weight:500}.pw-rest-sub{color:var(--text-3);max-width:52ch;font-size:12.5px;line-height:1.6}.pw-newchat{border:1px solid var(--accent-line);border-radius:var(--radius-lg);background:var(--accent-soft);align-items:center;gap:20px;margin-bottom:18px;padding:20px 22px;display:flex}.pw-newchat-copy{flex-direction:column;flex:1;gap:6px;display:flex}.pw-convos{flex-direction:column;gap:2px;margin-bottom:18px;display:flex}.pw-convos .pw-frame-head{margin-bottom:6px}.pw-convo{border-radius:var(--radius);transition:background var(--dur-1) var(--ease), border-color var(--dur-1) var(--ease);border:1px solid #0000;align-items:center;gap:10px;padding:9px 12px;display:flex}.pw-convo:hover{background:var(--panel-2);border-color:var(--hairline)}.pw-convo-glyph{color:var(--text-3);display:inline-flex}.pw-convo-main{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.pw-convo-title{color:var(--text-2);text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;overflow:hidden}.pw-convo-when{color:var(--text-3);font-size:11px}.pw-reading{flex-direction:column;gap:14px;display:flex}.pw-reading-head{align-items:center;gap:12px;display:flex}.convo-transcript{flex-direction:column;gap:10px;max-height:clamp(300px,100dvh - 340px,1200px);padding-right:4px;display:flex;overflow-y:auto}.convo-bubble{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel-2);max-width:76ch;padding:10px 14px}.convo-bubble.is-user{border-color:var(--accent-line);background:var(--accent-soft);align-self:flex-end}.convo-bubble-role{letter-spacing:.09em;text-transform:uppercase;color:var(--text-3);margin-bottom:4px;font-size:9.5px;font-weight:700}.convo-bubble-text{color:var(--text-2);white-space:pre-wrap;overflow-wrap:anywhere;font-size:12.5px;line-height:1.6}.ws-head,.nextstep,.readonly-bar,.ws-banner,.ws-lap,.ws-body-inner{width:100%;max-width:calc(var(--content-max) + 56px);margin-left:auto;margin-right:auto;padding-left:28px;padding-right:28px}.ws-head{flex:none;padding-top:18px}.ws-title-row{align-items:center;gap:10px;display:flex}.ws-title{letter-spacing:-.01em;color:var(--text);font-size:17px;font-weight:600}.ws-title-spacer{flex:1}.ws-branch{font-family:var(--mono);color:var(--text-3);cursor:pointer;transition:color var(--dur-1);background:0 0;border:none;align-items:center;gap:5px;font-size:11.5px;display:inline-flex}.ws-branch:hover{color:var(--text)}.pipeline{align-items:center;margin-top:16px;display:flex}.pstep{border-radius:var(--radius-pill);cursor:default;height:26px;color:var(--text-3);transition:background var(--dur-1), color var(--dur-1), border-color var(--dur-1), transform var(--dur-1);background:0 0;border:1px solid #0000;align-items:center;gap:7px;padding:0 10px;font-size:12px;display:inline-flex}.pstep.is-clickable{cursor:pointer}.pstep.is-clickable:hover{background:var(--panel);color:var(--text)}.pstep.is-clickable:active{transform:scale(.97)}.pstep-dot{opacity:.5;width:8px;height:8px;transition:opacity var(--dur-2), box-shadow var(--dur-2);background:currentColor;border-radius:50%;flex:none}.pstep-label{text-transform:lowercase}.pstep.is-done{color:var(--text-2)}.pstep.is-done .pstep-dot{opacity:1}.pstep.is-current{color:var(--text);font-weight:600}.pstep.is-current .pstep-dot{opacity:1;background:var(--accent);animation:2.4s ease-in-out infinite dotGlow;box-shadow:0 0 0 3px #7c6cf633}.pstep.is-upcoming,.pstep.is-skipped{color:var(--text-4)}.pstep.is-skipped .pstep-label{opacity:.7;text-decoration:line-through}.pstep.is-viewed{border-color:var(--hairline);background:var(--panel)}.pstep.is-viewed.is-current{border-color:var(--accent-line)}.pconn{background:var(--hairline);width:16px;height:1px;transition:background var(--dur-2);flex:none}.pconn.is-done{background:var(--text-4)}.pipeline-lap{font-family:var(--mono);letter-spacing:.06em;color:var(--text-3);border:1px solid var(--hairline);border-radius:4px;flex-shrink:0;margin-left:12px;padding:1px 6px;font-size:10px}.nextstep{border:1px solid var(--hairline);background:var(--panel);border-radius:var(--radius-lg);animation:fadeUp var(--dur-3) var(--ease-out);align-items:center;gap:14px;margin-top:14px;padding:13px 16px;display:flex}.nextstep-spin{flex:none}.nextstep-main{flex:1;min-width:0}.nextstep-kick{letter-spacing:.1em;color:var(--accent-hi);font-size:10px;font-weight:700}.nextstep-kick.is-progress{color:var(--ph-implementation)}.nextstep-kick.is-shipped{color:var(--ph-shipped)}.nextstep-kick.is-waiting{color:var(--text-3)}.nextstep-title{color:var(--text);margin-top:2px;font-size:13.5px;font-weight:600}.nextstep-desc{color:var(--text-2);text-wrap:pretty;margin-top:2px;font-size:12px;line-height:1.5}.nextstep-actions{flex:none;align-items:center;gap:8px;display:flex}.nextstep-fog,.nextstep-warn{font-family:var(--mono);color:color-mix(in srgb, var(--needs) 82%, var(--text));align-items:baseline;gap:8px;margin-top:4px;font-size:11.5px;line-height:1.6;display:flex}.nextstep-fog-icon,.nextstep-warn-icon{color:var(--needs);flex-shrink:0}.nextstep-override{align-items:center;gap:8px;display:flex}.nextstep-override .override-input{width:260px}.readonly-bar{border:1px dashed var(--hairline-strong);border-radius:var(--radius);background:var(--panel-2);color:var(--text-2);animation:fadeUp var(--dur-2) var(--ease-out);align-items:center;gap:10px;margin-top:12px;padding:8px 14px;font-size:12px;display:flex}.readonly-tag{font-family:var(--mono);letter-spacing:.06em;color:var(--text-3);border:1px solid var(--hairline);border-radius:4px;padding:1px 6px;font-size:10px}.readonly-back{color:var(--accent-hi);cursor:pointer;background:0 0;border:none;margin-left:auto;font-size:12px}.readonly-back:hover{color:var(--accent-2)}.ws-banner{border:1px solid color-mix(in srgb, var(--danger) 55%, var(--hairline));border-radius:var(--radius);background:color-mix(in srgb, var(--danger) 8%, var(--panel-2));color:var(--danger);cursor:pointer;animation:fadeUp var(--dur-2) var(--ease-out);align-items:center;gap:10px;margin-top:10px;padding:8px 14px;font-size:12.5px;display:flex}.ws-banner.is-offline{cursor:default;border-color:color-mix(in srgb, var(--warn,#d9a441) 45%, var(--hairline));background:color-mix(in srgb, var(--warn,#d9a441) 7%, var(--panel-2));color:var(--warn,#d9a441)}.ws-banner.is-offline .ws-banner-tag{border-color:color-mix(in srgb, var(--warn,#d9a441) 40%, var(--hairline))}.ws-banner.is-broken{cursor:default;align-items:flex-start;animation:none}.broken-detail{flex-wrap:wrap;align-items:center;gap:10px;padding:0 14px;display:flex}.ws-banner-tag{font-family:var(--mono);letter-spacing:.06em;border:1px solid color-mix(in srgb, var(--danger) 45%, var(--hairline));border-radius:4px;flex-shrink:0;padding:1px 6px;font-size:10px}.ws-lap{align-items:flex-start;gap:10px;margin-top:12px;display:flex}.ws-lap-tag{font-family:var(--mono);letter-spacing:.06em;color:var(--accent-2);border:1px solid var(--accent-line);cursor:default;border-radius:4px;flex:none;padding:2px 7px;font-size:10px}.ws-lap-body{flex-direction:column;gap:2px;min-width:0;display:flex}.ws-lap-why{color:var(--text-2);text-wrap:pretty;font-size:12px;line-height:1.5}.ws-lap-facts{color:var(--text-3);gap:10px;font-size:11.5px;display:flex}.ws-lap-facts>span+span:before{content:"· ";color:var(--text-4)}.ws-body{flex:1;min-height:0;padding:18px 0 32px;overflow-y:auto}.ws-body-inner{animation:bodyIn var(--dur-3) var(--ease-out)}.ws-body:has(.grill){padding:0;display:flex;overflow:hidden}.ws-body:has(.grill)>.ws-body-inner{flex:1;min-width:0;max-width:none;min-height:0;padding:0;display:flex}.body-title{align-items:baseline;gap:10px;margin-bottom:12px;display:flex}.body-title .section-title{padding:0}.body-hint{color:var(--text-3);text-wrap:pretty;margin-bottom:12px;font-size:12px}.body-meta{font-family:var(--mono);color:var(--text-2);font-size:11.5px}.surface{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel-2);overflow:hidden}.grill{flex:1;min-width:0;max-width:none;min-height:0;display:flex}.maprail{flex:0 0 var(--maprail-w);width:var(--maprail-w);background:var(--panel-2);border-right:1px solid var(--hairline);flex-direction:column;min-width:0;min-height:0;display:flex}.maprail.is-collapsed{flex-basis:38px;width:38px}.mr-head{border-bottom:1px solid var(--hairline-soft);flex:0 0 32px;align-items:center;gap:8px;padding:0 6px 0 12px;display:flex}.maprail.is-collapsed .mr-head{padding:0 7px}.mr-head .section-title{flex:1;padding:0}.mr-toggle{border-radius:var(--radius-sm);width:22px;height:22px;color:var(--text-3);cursor:pointer;transition:background var(--dur-1), color var(--dur-1);background:0 0;border:0;flex:none;justify-content:center;align-items:center;font-size:13px;display:flex}.mr-toggle:hover{background:var(--panel-3);color:var(--text)}.mr-stub{cursor:pointer;background:0 0;border:0;flex-direction:column;flex:1;align-items:center;gap:8px;min-height:0;padding:10px 0;display:flex}.mr-stub-count{border:1px solid var(--accent-line);background:var(--accent-soft);width:22px;height:22px;color:var(--accent-hi);font-family:var(--mono);border-radius:50%;flex:none;justify-content:center;align-items:center;font-size:11px;display:flex}.mr-stub-label{writing-mode:vertical-rl;letter-spacing:.12em;text-transform:uppercase;color:var(--text-4);font-size:9.5px}.mr-scroll{flex:1;min-height:0;padding:12px 12px 20px;overflow-y:auto}.termpane{flex-direction:column;flex:1;gap:10px;min-width:0;min-height:0;padding:14px 20px 18px;display:flex;overflow-y:auto}.termpane .grill-panel:has(.grill-term){flex:1;min-height:0}.termpane .grill-term{flex:1;min-height:0}.grill-panel{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel-2);flex-direction:column;display:flex;overflow:hidden}.grill-strip{background:var(--panel);border-bottom:1px solid var(--hairline-soft);flex:0 0 34px;align-items:center;gap:10px;height:34px;padding:0 12px;display:flex}.grill-kind{border-radius:var(--radius-pill);border:1px solid var(--accent-line);background:var(--accent-soft);height:18px;color:var(--accent-hi);font-family:var(--mono);align-items:center;padding:0 8px;font-size:10.5px;display:inline-flex}.grill-sid{font-family:var(--mono);color:var(--text-3);font-size:11px}.grill-strip-spacer{flex:1}.sess-end{color:color-mix(in srgb, var(--danger) 70%, var(--text-2))}.sess-end:hover:not(:disabled){color:var(--danger);border-color:color-mix(in srgb, var(--danger) 55%, var(--hairline))}.grill-term{background:var(--panel-inset);position:relative}.tickets-session{margin-bottom:18px}.tickets-session .grill-term,.review-session .grill-term{height:clamp(300px,100dvh - 420px,1200px)}.grill-empty{text-align:center;color:var(--text-3);flex-direction:column;align-items:center;gap:10px;padding:40px 24px;display:flex}.grill-live-label{color:var(--text-3);font-size:11.5px}.session-briefing-warn{color:var(--warn,#d9a441);background:color-mix(in srgb, var(--warn,#d9a441) 9%, var(--panel-2));border-bottom:1px solid color-mix(in srgb, var(--warn,#d9a441) 35%, var(--hairline));align-items:center;gap:12px;padding:8px 12px;font-size:12px;display:flex}.session-briefing-text{flex:1}.session-checkin-hint{color:var(--text-3);border-bottom:1px solid var(--hairline);padding:6px 12px;font-size:11.5px}.strip-done{flex:1;align-items:center;gap:9px;min-width:0;display:flex}.done-check{border:1px solid color-mix(in srgb, var(--ok) 50%, transparent);background:color-mix(in srgb, var(--ok) 18%, transparent);width:16px;height:16px;color:var(--ok);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:9px;display:flex}.done-txt{min-width:0;color:var(--text-2);white-space:nowrap;text-overflow:ellipsis;font-size:11.5px;overflow:hidden}.done-txt b{color:var(--text);font-weight:560}.strip-work-next{text-overflow:ellipsis;max-width:260px;overflow:hidden}.session-ended-card{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel-2);animation:fadeUp var(--dur-2) var(--ease-out);align-items:center;gap:12px;padding:14px 16px;display:flex}.session-ended-dot{background:var(--text-4);border-radius:50%;flex:none;width:8px;height:8px}.session-ended-main{flex:1;min-width:0}.session-ended-title{color:var(--text-2);font-size:13px;font-weight:500}.session-ended-sub{color:var(--text-3);margin-top:1px;font-size:12px}.session-ended-resume{flex:none}.doc-card{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel-2);width:100%;color:var(--text-3);cursor:pointer;text-align:left;transition:border-color var(--dur-1), background var(--dur-1);align-items:center;gap:9px;padding:11px 14px;font-size:12.5px;display:flex}.doc-card:hover{border-color:var(--hairline-strong);background:var(--panel-3)}.doc-card:hover .doc-card-open{color:var(--accent-hi)}.doc-card.is-empty{cursor:default}.doc-card.is-empty:hover{border-color:var(--hairline);background:var(--panel-2)}.doc-card-title{color:var(--text);font-weight:500}.doc-card-meta{font-family:var(--mono);color:var(--text-4);font-size:11px}.doc-card-hint{color:var(--text-3);font-size:12px}.doc-card-open{color:var(--text-3);transition:color var(--dur-1);align-items:center;gap:3px;margin-left:auto;font-size:12px;display:inline-flex}.spec-doc{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel-2);max-width:780px;padding:22px 26px}.spec-meta{font-family:var(--mono);color:var(--text-3);font-size:11px}.spec-body{font-family:var(--mono);color:var(--text);white-space:pre-wrap;word-break:break-word;margin:10px 0 0;font-size:12.5px;line-height:1.7}.mapdoc{border-top:1px solid var(--hairline-soft);margin-top:4px;padding-top:12px}.mapdoc-summary{letter-spacing:.09em;text-transform:uppercase;color:var(--text-3);cursor:pointer;padding:2px;font-size:10px}.mapdoc-summary:hover{color:var(--text-2)}.map-section{margin-top:12px}.map-section-title{font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--accent-hi);margin-bottom:6px;font-size:10.5px}.map-waypoints>.dim-line{border:1px dashed var(--hairline);border-radius:var(--radius-lg);text-align:center;padding:18px}.wp-group{margin-bottom:14px}.wp-group-title{font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--text-3);margin-bottom:7px;font-size:10.5px}.wp-group-frontier .wp-group-title{color:var(--accent-hi)}.wp-group-claimed .wp-group-title{color:var(--drive)}details.wp-group-done{border-top:1px solid var(--hairline-soft);padding-top:12px}details.wp-group-done>summary{cursor:pointer;list-style:revert}.wp{border:1px solid var(--hairline);border-radius:var(--radius-sm);background:var(--panel-2);cursor:pointer;transition:border-color var(--dur-2) var(--ease-out);margin-bottom:6px;padding:9px 12px}.wp:hover{border-color:var(--hairline-strong)}.wp-frontier{border-color:var(--accent-line)}.wp-blocked{opacity:.55}.wp-claimed{border-color:color-mix(in srgb, var(--drive) 45%, var(--hairline))}.wp-done{opacity:.6}.wp-top{align-items:baseline;gap:9px;display:flex}.wp-caret{color:var(--text-4);transition:transform var(--dur-2) var(--ease-out);flex-shrink:0;font-size:9px}.wp.is-open .wp-caret{transform:rotate(90deg)}.wp-detail{border-top:1px solid var(--hairline-soft);cursor:default;flex-direction:column;gap:6px;margin-top:8px;padding-top:8px;display:flex}.wp-q{cursor:text}.wp-type{font-family:var(--mono);letter-spacing:.05em;text-transform:uppercase;color:var(--text-2);border:1px solid var(--hairline-strong);border-radius:var(--radius-sm);flex-shrink:0;padding:1px 6px;font-size:10px}.wp-title{color:var(--text);overflow-wrap:anywhere;flex:1;min-width:0;font-size:13px}.wp-blockers,.wp-lineage,.wp-resume{font-family:var(--mono);color:var(--text-3);font-size:11px}.wp-blockers{color:var(--needs)}.wp-resume{color:var(--drive)}.wp-detail .wp-summary{color:var(--text-3)}.wp-run-note{font-family:var(--mono);color:var(--drive);font-size:11px;font-style:italic}.wp-actions{align-items:center;gap:7px;margin-top:8px;display:flex}.wp-pulse{background:var(--drive);border-radius:50%;flex-shrink:0;width:7px;height:7px;animation:1.4s ease-in-out infinite pulse}.wp-confirm{border:1px solid color-mix(in srgb, var(--needs) 45%, var(--hairline));border-radius:var(--radius-sm);background:color-mix(in srgb, var(--needs) 7%, transparent);margin-top:8px;padding:9px}.wp-confirm-text{color:var(--text-2);margin-bottom:8px;font-size:11.5px;line-height:1.45}.wp-confirm-text b{color:var(--text);font-weight:600}.wp-confirm-actions{gap:7px;display:flex}.converge-resume{border:1px solid var(--hairline);border-radius:var(--radius);background:var(--panel-2);flex-wrap:wrap;align-items:center;gap:12px;margin-top:14px;padding:10px 14px;display:flex}.converge-resume-text{color:var(--text-2);font-size:12.5px}.lap-group-head{font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--text-3);align-items:baseline;gap:8px;padding:8px 0;font-size:10.5px;display:flex}.lap-group.is-current>.lap-group-head{color:var(--text-2)}.lap-group-meta{color:var(--text-4)}details.lap-group>summary.lap-group-head{cursor:pointer;list-style:none}details.lap-group>summary::-webkit-details-marker{display:none}details.lap-group>summary.lap-group-head:before{content:"▸";color:var(--text-4);flex:none}details.lap-group[open]>summary.lap-group-head:before{content:"▾"}.ledger .lap-group-head{background:var(--panel-3);padding:8px 14px}.ledger .lap-group+.lap-group{border-top:1px solid var(--hairline)}.ledger{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel-2);overflow:hidden}.ledger-row+.ledger-row{border-top:1px solid var(--hairline-soft)}.ledger-head{cursor:pointer;text-align:left;width:100%;transition:background var(--dur-1);background:0 0;border:none;align-items:center;gap:10px;padding:10px 14px;display:flex}.ledger-head:hover{background:var(--panel-3)}.lg-caret{color:var(--text-4);width:12px;transition:transform var(--dur-2) var(--ease);flex:none;align-items:center;display:inline-flex}.ledger-row.is-open .lg-caret{transform:rotate(90deg)}.lg-seq{color:var(--text-3);font-family:var(--mono);flex:none;width:22px;font-size:11.5px}.lg-title{min-width:0;color:var(--text);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;overflow:hidden}.lg-block{font-family:var(--mono);color:var(--needs);flex:none;font-size:10.5px}.ledger-head .chip-kind-review{flex:none}.lg-meta{flex:none;align-items:center;gap:8px;display:flex}.lg-commits{color:var(--text-2);font-size:11px}.ledger-detail{background:var(--panel-inset);border-top:1px solid var(--hairline-soft);animation:detailIn var(--dur-2) var(--ease-out);padding:2px 16px 16px 46px;overflow:hidden}.td-section{margin-top:12px}.td-heading{letter-spacing:.07em;text-transform:uppercase;color:var(--text-3);margin-bottom:4px;font-size:10.5px;font-weight:600}.td-body{color:var(--text);white-space:pre-wrap;word-break:break-word;text-wrap:pretty;max-width:640px;line-height:1.55}.td-list{margin:0;padding-left:0;list-style:none}.td-list li{color:var(--text-2);gap:8px;padding:2px 0;line-height:1.5;display:flex}.td-list li:before{content:"—";color:var(--text-4);flex:none}.td-edit-open{border:1px solid var(--hairline);border-radius:var(--radius);color:var(--text-3);cursor:pointer;transition:border-color var(--dur-1), color var(--dur-1);background:0 0;margin-top:12px;padding:3px 9px;font-family:inherit;font-size:11.5px}.td-edit-open:hover{border-color:var(--hairline-strong);color:var(--text-2)}.td-edit label.td-section{max-width:640px;display:block}.td-input{background:var(--panel-inset);border:1px solid var(--hairline);border-radius:var(--radius);width:100%;color:var(--text);transition:border-color var(--dur-1);outline:none;padding:7px 10px;font-family:inherit;font-size:12.5px;line-height:1.55}.td-input:focus{border-color:var(--accent)}.td-area{resize:vertical;min-height:68px}.td-edit-actions{justify-content:flex-end;gap:8px;max-width:640px;margin-top:14px;display:flex}.td-seams{flex-wrap:wrap;gap:6px;display:flex}.seam{font-family:var(--mono);color:var(--text-2);border:1px solid var(--hairline);background:var(--panel-2);border-radius:var(--radius-sm);padding:2px 7px;font-size:11px}.td-commits{flex-wrap:wrap;gap:6px;display:flex}.commit-sha{font-family:var(--mono);color:var(--ph-shipped);border:1px solid var(--hairline);cursor:pointer;transition:border-color var(--dur-1);background:0 0;border-radius:4px;padding:1px 6px;font-size:11px}.commit-sha:hover{border-color:var(--ph-shipped)}.td-error .td-heading{color:var(--danger)}.td-error-body{color:var(--danger);white-space:pre-wrap;word-break:break-word}.td-empty{font-family:var(--mono);color:var(--text-4);font-size:11.5px}.run-digest{margin-bottom:12px}.run-split{align-items:stretch;gap:14px;display:flex}.run-lanes-panel{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel-2);flex:2;align-self:flex-start;min-width:0;overflow:hidden}.panel-cap{border-bottom:1px solid var(--hairline-soft);letter-spacing:.07em;text-transform:uppercase;color:var(--text-3);padding:8px 12px;font-size:10.5px;font-weight:600}.run-lanes{flex-direction:column;gap:6px;padding:8px;display:flex}.lane{border:1px solid var(--hairline);border-left:2px solid var(--text-4);border-radius:var(--radius-sm);transition:border-color var(--dur-2), background var(--dur-2);padding:8px 10px}.lane.is-clickable{cursor:pointer}.lane.is-clickable:hover{border-color:var(--accent)}.lane.is-selected{background:var(--panel-inset);border-color:var(--accent)}.lane.status-burning{border-left-color:var(--ph-implementation);animation:1.7s ease-in-out infinite pulse}.lane.status-done{border-left-color:var(--ok)}.lane.status-failed{border-left-color:var(--danger)}.lane-head{align-items:center;gap:8px;display:flex}.lane-seq{color:var(--text-3);font-family:var(--mono);flex:none;font-size:11.5px}.lane-title{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:12.5px;overflow:hidden}.lane-head .chip-kind-review{flex:none}.lane-foot{justify-content:space-between;align-items:center;gap:8px;margin-top:6px;display:flex}.lane-commits{flex-wrap:wrap;gap:4px;display:flex}.lane-dur{color:var(--text-3);font-family:var(--mono);font-size:11px}.lane-error{color:var(--danger);font-family:var(--mono);text-overflow:ellipsis;white-space:nowrap;margin-top:5px;font-size:11px;overflow:hidden}.lane-conflict{border:1px solid color-mix(in srgb, var(--danger) 35%, var(--hairline));border-radius:var(--radius-sm);background:color-mix(in srgb, var(--danger) 6%, transparent);margin-top:6px;padding:7px 9px}.lane-conflict-head{color:var(--text-2);font-size:11.5px;line-height:1.45}.lane-conflict-head code{font-family:var(--mono);color:var(--text);font-size:11px}.lane-conflict-files{flex-direction:column;gap:2px;margin:6px 0 0;padding:0;list-style:none;display:flex}.lane-conflict-files li{font-family:var(--mono);color:var(--danger);text-overflow:ellipsis;white-space:nowrap;text-align:left;direction:rtl;font-size:11px;overflow:hidden}.lane-conflict .lane-error{margin-top:6px}.lane-actions{gap:6px;margin-top:6px;display:flex}.lane-btn{border:1px solid var(--hairline);color:var(--text-2);border-radius:var(--radius-pill);cursor:pointer;transition:color var(--dur-1), border-color var(--dur-1);background:0 0;padding:2px 8px;font-size:11px}.lane-btn:hover:not(:disabled){color:var(--text);border-color:var(--accent)}.lane-btn:disabled{opacity:.5;cursor:default}.lane-btn-danger:hover:not(:disabled){color:var(--danger);border-color:var(--danger)}.run-stream-panel{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel-inset);flex-direction:column;flex:3;min-width:0;height:clamp(320px,100dvh - 330px,1200px);display:flex;overflow:hidden}.panel-tabs{align-items:center;gap:4px;display:flex}.panel-tab{color:var(--text-3);letter-spacing:.07em;text-transform:uppercase;border-radius:var(--radius-pill);cursor:pointer;transition:color var(--dur-1), background var(--dur-1);background:0 0;border:none;padding:3px 10px;font-size:10.5px;font-weight:600}.panel-tab:hover{color:var(--text)}.panel-tab.is-active{color:var(--text);background:var(--panel-inset)}.panel-tab-ctx{color:var(--accent-hi);font-family:var(--mono);text-transform:none;letter-spacing:0;margin-left:6px}.agent-live-dot{background:var(--ph-implementation);border-radius:50%;width:8px;height:8px;animation:1.7s ease-in-out infinite pulse}.agent-body{font-family:var(--mono);flex:1;padding:12px 16px;font-size:12px;line-height:1.7;overflow-y:auto}.agent-trimmed{color:var(--text-4);text-align:center;padding-bottom:8px;font-size:11px}.agent-turn{animation:lineIn var(--dur-2) var(--ease-out);align-items:flex-start;gap:9px;margin-bottom:10px;display:flex}.agent-turn.is-tool{margin-bottom:6px}.agent-glyph{line-height:inherit;flex:none}.agent-glyph.is-text{color:var(--text-2)}.agent-glyph.is-tool{color:var(--ok)}.agent-prose{min-width:0;color:var(--text);white-space:pre-wrap;word-break:break-word;flex:1}.agent-toolline{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.agent-toolname{color:var(--text);font-weight:600}.agent-toolargs{color:var(--text-3)}.agent-live-row{color:var(--ph-implementation);align-items:center;gap:8px;margin-top:4px;display:flex}.agent-spinner{animation:1.2s linear infinite agentSpin;display:inline-block}.agent-live-label{color:var(--text-3);font-size:11.5px}.agent-cursor{color:var(--text-2);animation:1.1s step-end infinite cursorBlink}@keyframes agentSpin{to{transform:rotate(360deg)}}@keyframes cursorBlink{50%{opacity:0}}.agent-follow{background:var(--panel-2);margin-left:auto;display:block;position:sticky;bottom:6px}.stream-head{border-bottom:1px solid var(--hairline-soft);background:var(--panel-2);justify-content:space-between;align-items:center;padding:8px 12px;display:flex}.follow-pill{border:1px solid var(--accent);color:var(--accent-hi);border-radius:var(--radius-pill);cursor:pointer;animation:fadeUp var(--dur-2) var(--ease-out);background:0 0;padding:1px 10px;font-size:11px}.stream-body{font-family:var(--mono);flex:1;padding:10px 14px;font-size:11.5px;line-height:1.85;overflow-y:auto}.stream-line{animation:lineIn var(--dur-2) var(--ease-out);gap:10px;display:flex}.sl-time{color:var(--text-4);flex:0 0 42px}.sl-type{text-overflow:ellipsis;white-space:nowrap;color:var(--text-2);flex:0 0 118px;overflow:hidden}.sl-msg{min-width:0;color:var(--text-2);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.level-error .sl-type{color:var(--danger)}.level-ok .sl-type{color:var(--ok)}.level-active .sl-type{color:var(--ph-implementation)}.level-info .sl-type{color:var(--accent-hi)}.review-grid{grid-template-columns:1fr 1fr;gap:14px;max-width:1000px;display:grid}@media (width<=900px){.review-grid{grid-template-columns:1fr}}.review-card{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel-2);padding:14px 16px}.check-row{align-items:center;gap:10px;margin-top:11px;display:flex}.check-dot{border-radius:50%;flex:0 0 7px;width:7px;height:7px}.check-dot.is-ok{background:var(--ok)}.check-dot.is-warn{background:var(--warn,#d9a441)}.check-dot.is-danger{background:var(--danger)}.check-dot.is-idle{background:var(--text-3)}.check-k{font-family:var(--mono);color:var(--text);flex:none;width:92px;font-size:12px}.check-v{font-family:var(--mono);color:var(--text-3);font-size:11.5px}.lap-account{border-bottom:1px solid var(--hairline-soft);margin-top:12px;padding-bottom:12px}.lap-account-head{font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--text-3);margin-bottom:8px;font-size:11px}.lap-account-prose{max-height:320px;overflow:auto}.lap-account-note{color:var(--text-3);margin-bottom:10px;font-size:11.5px;line-height:1.5}.lap-account-entry+.lap-account-entry{border-top:1px solid var(--hairline-soft);margin-top:10px;padding-top:10px}.lap-account-ticket{font-family:var(--mono);color:var(--text-2);margin-bottom:6px;font-size:11.5px}.planned-lap-card{border-color:color-mix(in srgb, var(--warn,#d9a441) 40%, var(--hairline));max-width:1000px}.planned-lap-scope{margin-top:12px}.review-foot{border-top:1px solid var(--hairline-soft);font-family:var(--mono);color:var(--text-2);margin-top:14px;padding-top:12px;font-size:11.5px}.drive-live{align-items:center;gap:9px;margin-top:12px;display:flex}.drive-pulse{background:var(--drive);border-radius:50%;width:8px;height:8px;animation:1.4s ease-in-out infinite pulse}.drive-label{color:var(--drive);font-size:12.5px;font-weight:600}.drive-loc{font-family:var(--mono);color:var(--text-2);font-size:11.5px}.drive-copy{color:var(--text-2);text-wrap:pretty;margin-top:12px;font-size:12.5px;line-height:1.55}.drive-stop-review{margin-top:12px}.conflict-card{border-color:color-mix(in srgb, var(--danger) 45%, var(--hairline));max-width:1000px}.conflict-files{flex-direction:column;gap:4px;margin:12px 0 0;padding:0;list-style:none;display:flex}.conflict-files li{font-family:var(--mono);color:var(--danger);border-radius:var(--radius-sm);background:color-mix(in srgb, var(--danger) 9%, transparent);padding:3px 8px;font-size:11.5px}.conflict-resolve{margin-top:14px}.conflict-note{color:var(--text-3);margin-top:8px;font-size:11.5px;line-height:1.5}.drive-failure-card{border-color:color-mix(in srgb, var(--danger) 45%, var(--hairline));max-width:1000px}.drive-failure-fix{margin-top:14px}.drive-failure-output{max-height:220px;font-family:var(--mono);white-space:pre-wrap;color:var(--text-2);border-radius:var(--radius-sm);background:color-mix(in srgb, var(--danger) 9%, transparent);margin:12px 0 0;padding:10px 12px;font-size:11.5px;line-height:1.5;overflow:auto}.conflict-head{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.conflict-when{font-family:var(--mono);color:var(--text-3);font-size:11px}.drive-label.is-quiet{color:var(--text-2)}.review-body{flex-direction:column;gap:14px;display:flex}.drive-pane{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel-2);max-width:1000px;overflow:hidden}.drive-pane-strip{background:var(--panel);border-bottom:1px solid var(--hairline-soft);align-items:center;gap:10px;height:38px;padding:0 12px;display:flex}.drive-pane-kind{border-radius:var(--radius-pill);border:1px solid var(--drive-line,var(--accent-line));background:var(--accent-soft);height:18px;color:var(--drive);font-family:var(--mono);align-items:center;padding:0 8px;font-size:10.5px;display:inline-flex}.drive-pane-loc{font-family:var(--mono);color:var(--text-3);font-size:11.5px}.drive-pane-spacer{flex:1}.drive-open{font-family:var(--mono);color:var(--drive);border:1px solid color-mix(in srgb, var(--drive) 40%, var(--hairline));border-radius:var(--radius-pill);background:var(--accent-soft);padding:4px 10px;font-size:11.5px;font-weight:600;text-decoration:none}.drive-open:hover{border-color:var(--drive)}.drive-open-waiting{color:var(--text-3);border-color:var(--hairline);cursor:default;background:0 0;font-weight:500}.drive-pane-term{background:var(--bg);height:420px;min-height:260px;position:relative}.walkthrough-card{max-width:1000px;margin-top:14px}.walkthrough-player{margin-top:12px}.player-stage{line-height:0;display:block;position:relative}.walkthrough-video{border:1px solid var(--hairline);border-radius:var(--radius);background:#000;width:100%;display:block}.player-canvas{border-radius:var(--radius);cursor:crosshair;touch-action:none;width:100%;height:100%;position:absolute;inset:0}.player-bar{align-items:center;gap:10px;margin-top:8px;display:flex}.player-play{flex:none;min-width:30px;font-size:10px}.player-scrub{min-width:0;height:4px;accent-color:var(--accent);cursor:pointer;flex:1}.player-scrub:disabled{cursor:default;opacity:.5}.player-clock{color:var(--text-3);flex:none;font-size:11px}.player-annotate{flex:none}.annotate-bar{align-items:center;gap:8px;margin-top:8px;display:flex}.notes-card{max-width:1000px;margin-top:14px}.notes-head{align-items:baseline;gap:10px;display:flex}.notes-hint{color:var(--text-3);text-wrap:pretty;margin-top:8px;font-size:12px}.notes-hint strong{color:var(--text-2);font-weight:500}.notes-form{align-items:center;gap:8px;margin-top:14px;display:flex}.notes-input{background:var(--panel-inset);border:1px solid var(--hairline);border-radius:var(--radius);min-width:0;height:32px;color:var(--text);transition:border-color var(--dur-1);outline:none;flex:1;padding:0 12px;font-family:inherit;font-size:12.5px}.notes-input:focus{border-color:var(--accent)}.notes-list{flex-direction:column;margin-top:12px;display:flex}.note-row{border-top:1px solid var(--hairline-soft);align-items:center;gap:10px;padding:7px 0;display:flex}.note-row:first-child{border-top:none}.note-check{accent-color:var(--accent);flex:0 0 13px;width:13px;height:13px}.note-frozen{text-align:center;width:13px;color:var(--text-3);flex:0 0 13px}.note-shot{flex:none;line-height:0;display:block}.note-shot img{border:1px solid var(--hairline);background:#000;border-radius:3px;max-width:60px;max-height:34px;display:block}.note-shot:hover img{border-color:var(--accent)}.note-at{font-family:var(--mono);color:var(--text-3);transition:color var(--dur-1);background:0 0;border:none;flex:none;padding:0;font-size:11px}button.note-at{cursor:pointer}button.note-at:hover{color:var(--accent)}.note-text{min-width:0;color:var(--text);text-wrap:pretty;flex:1;font-size:12.5px}.note-row.is-done .note-text{color:var(--text-3);text-decoration:line-through}.note-row.is-promoted .note-text{color:var(--text-2)}.note-ticket{text-overflow:ellipsis;white-space:nowrap;max-width:40%;font-family:var(--mono);color:var(--text-3);flex:0 auto;font-size:11px;overflow:hidden}.note-actions{opacity:0;transition:opacity var(--dur-1);flex:none;gap:4px;display:flex}.note-row:hover .note-actions,.note-row:focus-within .note-actions,.note-row.is-editing .note-actions{opacity:1}.shipped-hero{text-align:center;max-width:560px;animation:fadeUp var(--dur-3) var(--ease-out);margin:36px auto 0}.shipped-check{border:1px solid color-mix(in srgb, var(--ok) 45%, transparent);width:40px;height:40px;color:var(--ok);animation:popIn var(--dur-3) var(--ease-out);border-radius:50%;justify-content:center;align-items:center;margin:0 auto;font-size:17px;display:flex}.shipped-title{margin-top:14px;font-size:16px;font-weight:600}.shipped-meta{font-family:var(--mono);color:var(--text-2);align-items:center;gap:5px;margin-top:6px;font-size:12px;display:inline-flex}.shipped-sub{color:var(--text-3);margin-top:10px;font-size:12.5px;line-height:1.55}.shipped-body{flex-direction:column;gap:18px;display:flex}.shipped-session .grill-term{height:clamp(300px,100dvh - 420px,1200px)}.draft-body{flex-direction:column;gap:18px;max-width:640px;margin:0 auto;display:flex}.draft-hero{animation:fadeUp var(--dur-3) var(--ease-out);margin-top:28px}.draft-kick{letter-spacing:.09em;color:var(--text-4);align-items:center;gap:6px;font-size:10px;font-weight:700;display:flex}.draft-glyph{font-size:12px;line-height:1}.draft-title{margin-top:8px;font-size:16px;font-weight:600}.draft-oneliner{color:var(--text-2);margin-top:6px;font-size:13px;line-height:1.55}.draft-sub{color:var(--text-3);margin-top:12px;font-size:12.5px;line-height:1.55}.draft-brief.is-empty{color:var(--text-4)}.draft-advanced-summary{cursor:pointer;color:var(--text-3);-webkit-user-select:none;user-select:none;font-size:11.5px}.draft-advanced[open] .draft-advanced-summary{margin-bottom:8px}.tag.is-draft{color:var(--text-4)}.nf-overlay{flex:1;justify-content:center;align-items:center;padding:24px;display:flex}.nf-card{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel);width:540px;max-width:100%;animation:popIn var(--dur-3) var(--ease-out);padding:26px 28px}.nf-kick{letter-spacing:.09em;color:var(--accent-hi);font-size:11px;font-weight:700}.nf-h{margin-top:6px;font-size:16px;font-weight:600}.nf-sub{color:var(--text-2);margin-top:5px;font-size:12.5px;line-height:1.55}.nf-input{background:var(--panel-inset);border:1px solid var(--hairline);border-radius:var(--radius);width:100%;height:36px;color:var(--text);transition:border-color var(--dur-1);outline:none;margin-top:18px;padding:0 12px;font-family:inherit;font-size:13px}.nf-input:focus{border-color:var(--accent)}.nf-oneliner{height:32px;margin-top:8px;font-size:12.5px}.nf-textarea{resize:vertical;height:132px;margin-top:8px;padding:10px 12px;font-size:12.5px;line-height:1.55}.size-hint{color:var(--text-3);font-size:12px}.nf-base{flex-wrap:wrap;align-items:center;gap:10px;margin-top:16px;display:flex}.nf-base-label{color:var(--text);font-size:13px}.nf-base-select{background:var(--panel-inset);border:1px solid var(--hairline);border-radius:var(--radius);height:30px;color:var(--text);font-family:var(--mono);cursor:pointer;transition:border-color var(--dur-1);outline:none;padding:0 8px;font-size:11.5px}.nf-base-select:focus{border-color:var(--accent)}.nf-base-select:disabled{opacity:.5;cursor:default}.nf-branch{font-family:var(--mono);color:var(--text-3);margin-top:16px;font-size:11.5px}.nf-actions{justify-content:flex-end;gap:10px;margin-top:22px;display:flex}.nf-discard{border:1px solid color-mix(in srgb, var(--warn,#d9a441) 45%, var(--hairline));border-radius:var(--radius);background:color-mix(in srgb, var(--warn,#d9a441) 7%, var(--panel-2));align-items:center;gap:8px;margin-top:16px;padding:10px 12px;display:flex}.nf-discard-text{color:var(--text);font-size:12.5px}.nf-discard-spacer{flex:1}.nf-dupe{color:var(--warn,#d9a441);margin-top:8px;font-size:12px;line-height:1.5}.nf-advanced{margin-top:16px}.nf-advanced-summary{color:var(--text-2);cursor:pointer;-webkit-user-select:none;user-select:none;width:fit-content;font-size:12.5px}.nf-advanced-summary:hover{color:var(--text)}.nf-advanced[open] .nf-advanced-summary{color:var(--text);margin-bottom:4px}.nf-advanced .nf-base{margin-top:10px}.qf-modes{border-bottom:1px solid var(--hairline-soft);align-items:center;gap:2px;margin-top:12px;display:flex}.qf-mode{color:var(--text-3);cursor:pointer;transition:color var(--dur-1);background:0 0;border:none;border-bottom:2px solid #0000;padding:6px 10px 8px;font-size:12.5px;font-weight:500}.qf-mode:hover{color:var(--text-2)}.qf-mode.is-active{color:var(--text);border-bottom-color:var(--accent)}.qf-tickets{flex-direction:column;gap:8px;margin-top:10px;display:flex}.qf-ticket{align-items:flex-start;gap:8px;display:flex}.qf-ticket-num{text-align:right;width:16px;font-family:var(--mono);color:var(--text-3);flex:none;margin-top:12px;font-size:11.5px}.qf-ticket-text{flex:1;height:62px;margin-top:0}.qf-ticket-remove{color:var(--text-3);cursor:pointer;transition:color var(--dur-1);background:0 0;border:none;flex:none;margin-top:8px;padding:4px 6px;font-size:15px;line-height:1}.qf-ticket-remove:hover{color:var(--danger)}.qf-add{color:var(--accent);cursor:pointer;background:0 0;border:none;width:fit-content;margin-top:8px;padding:0;font-size:12.5px}.qf-add:hover{color:var(--accent-hi)}.inspector{border-left:1px solid var(--hairline);background:var(--panel-2);flex-direction:column;min-height:0;display:flex;overflow:hidden}.insp-tabs{border-bottom:1px solid var(--hairline-soft);flex:none;align-items:center;gap:2px;padding:8px 10px 0;display:flex}.insp-tab{color:var(--text-3);cursor:pointer;transition:color var(--dur-1);background:0 0;border:none;border-bottom:2px solid #0000;padding:6px 10px 8px;font-size:12px;font-weight:500}.insp-tab:hover{color:var(--text-2)}.insp-tab.is-active{color:var(--text);border-bottom-color:var(--accent)}.insp-pane{min-height:0;animation:fadeUp var(--dur-2) var(--ease-out);flex-direction:column;flex:1;gap:22px;padding:16px;display:flex;overflow-y:auto}.insp-pane-activity{gap:0;padding:10px 12px}.insp-empty{color:var(--text-3);text-wrap:pretty;font-size:12px;line-height:1.55}.insp-section>.insp-cap{letter-spacing:.09em;text-transform:uppercase;color:var(--text-3);margin-bottom:8px;font-size:10.5px;font-weight:600}.insp-hint{color:var(--text-3);text-wrap:pretty;margin-bottom:8px;font-size:11.5px;line-height:1.5}.gate-shipped{color:var(--ok);align-items:center;gap:8px;font-size:12.5px;display:flex}.gate-card{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel);padding:12px 14px}.gate-override-link{color:var(--text-3);cursor:pointer;transition:color var(--dur-1);background:0 0;border:none;margin-top:10px;padding:0;font-size:11.5px}.gate-override-link:hover{color:var(--accent-hi)}.override-actions{gap:6px;display:flex}.gate-idrow{align-items:center;gap:8px;display:flex}.gate-id{font-family:var(--mono);color:var(--accent-hi);font-size:11px}.gate-name{color:var(--text);font-size:12.5px;font-weight:600}.gate-req{color:var(--text-2);text-wrap:pretty;margin-top:6px;font-size:11.5px;line-height:1.5}.gate-state{align-items:center;gap:8px;margin-top:11px;font-size:12px;display:flex}.gate-state.is-ok{color:var(--ok)}.gate-state.is-block{color:var(--needs)}.gate-state-dot{background:currentColor;border-radius:50%;flex:none;width:7px;height:7px}.gate-hint{color:var(--text-4);margin-top:10px;font-size:11px;line-height:1.5}.gate-empty{border:1px dashed var(--hairline-strong);border-radius:var(--radius);color:var(--text-3);padding:12px 14px;font-size:11.5px}.override-form{flex-direction:column;gap:6px;margin-top:11px;display:flex}.override-input{background:var(--panel-inset);border:1px solid var(--hairline);border-radius:var(--radius-sm);height:26px;color:var(--text);outline:none;padding:0 8px;font-size:12px}.override-input:focus{border-color:var(--accent)}.override-consequence{color:var(--needs);text-wrap:pretty;font-size:11.5px;line-height:1.5}.gate-undo{border:1px dashed var(--hairline-strong);border-radius:var(--radius);color:var(--text-3);text-wrap:pretty;flex-direction:column;align-items:flex-start;gap:7px;margin-top:10px;padding:10px 12px;font-size:11.5px;line-height:1.5;display:flex}.doc-list{margin:0;padding:0;list-style:none}.doc-link{cursor:pointer;text-align:left;border-radius:var(--radius-sm);width:100%;transition:background var(--dur-1);background:0 0;border:none;align-items:center;gap:8px;margin:0 -8px;padding:7px 8px;display:flex}.doc-link:hover{background:var(--panel-3)}.doc-link-icon{color:var(--text-4);flex:none;display:inline-flex}.doc-title{color:var(--text);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:12.5px;overflow:hidden}.doc-meta{color:var(--text-4);flex:none;font-size:11px}.activity-log{flex-direction:column;display:flex}.act-line{border-top:1px solid var(--hairline-soft);gap:10px;padding:8px 4px;display:flex}.act-line:first-child{border-top:none}.act-lap{font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--accent-2);align-items:center;gap:8px;margin:6px 0;padding:0 4px;font-size:10px;display:flex}.act-lap:after{content:"";background:var(--accent-line);flex:1;height:1px}.act-lap-time{color:var(--text-4);order:1}.act-dot{background:var(--text-4);border-radius:50%;flex:none;width:7px;height:7px;margin-top:5px}.act-dot.is-ok{background:var(--ok)}.act-dot.is-danger{background:var(--danger)}.act-dot.is-accent{background:var(--accent)}.act-body{flex:1;min-width:0}.act-msg{color:var(--text-2);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:1.45;display:-webkit-box;overflow:hidden}.act-msg-toggle{text-align:left;width:100%;font:inherit;color:inherit;cursor:pointer;background:0 0;border:none;margin:0;padding:0}.act-msg-toggle:hover{color:var(--text)}.act-more{color:var(--text-4);margin-left:6px}.act-detail{background:var(--panel-inset);border:1px solid var(--hairline);border-radius:var(--radius);max-height:260px;color:var(--text-2);white-space:pre-wrap;word-break:break-word;margin:6px 0 0;padding:7px 9px;font-size:11px;line-height:1.5;overflow:auto}.act-sub{align-items:baseline;gap:8px;margin-top:2px;display:flex}.act-type{color:var(--text-4);text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;overflow:hidden}.act-time{color:var(--text-4);flex:none;margin-left:auto;font-size:10.5px}.statusbar{border-top:1px solid var(--hairline);background:var(--panel);color:var(--text-3);align-items:center;gap:16px;padding:0 12px;font-size:11px;display:flex}.sb-item{align-items:center;gap:5px;display:inline-flex}.sb-branch{color:var(--text-3);cursor:pointer;font-family:var(--mono);transition:color var(--dur-1);background:0 0;border:none;align-items:center;gap:5px;padding:0;font-size:11px;display:inline-flex}.sb-branch:hover{color:var(--text)}.sb-driving{color:var(--drive);align-items:center;gap:7px;display:flex}.sb-driving-dot{background:var(--drive);border-radius:50%;width:6px;height:6px;animation:1.4s ease-in-out infinite pulse}.sb-stop{border:1px solid color-mix(in srgb, var(--drive) 40%, transparent);height:16px;color:var(--drive);cursor:pointer;background:0 0;border-radius:4px;padding:0 6px;font-size:10px}.sb-stop:hover:not(:disabled){background:#58a6ff1f}.sb-spacer{flex:1}.sb-notify{color:var(--text-3);cursor:pointer;transition:color var(--dur-1);background:0 0;border:none;align-items:center;gap:5px;padding:0;font-size:11px;display:inline-flex}.sb-notify:hover{color:var(--text)}.sb-notify.is-on{color:var(--ok)}.sb-notify.is-blocked{color:var(--warn,#d9a441)}.sb-health{color:var(--ph-shipped);align-items:center;gap:6px;display:inline-flex}.sb-live-dot{background:var(--ok);border-radius:50%;flex:none;width:6px;height:6px}.sb-live.is-degraded{color:var(--warn,#d9a441)}.sb-live.is-degraded .sb-live-dot{background:var(--warn,#d9a441);animation:1.4s ease-in-out infinite pulse}.cmdk-backdrop{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:300;animation:backdropIn var(--dur-2) var(--ease-out);background:#04060a8c;justify-content:center;align-items:flex-start;padding:12vh 16px 16px;display:flex;position:fixed;inset:0}.cmdk{background:var(--panel);border:1px solid var(--hairline-strong);border-radius:var(--radius-lg);width:100%;max-width:560px;animation:cmdkIn var(--dur-2) var(--ease-out);overflow:hidden;box-shadow:0 24px 60px -20px #000c}.cmdk-input{border:none;border-bottom:1px solid var(--hairline);width:100%;height:46px;color:var(--text);background:0 0;outline:none;padding:0 16px;font-family:inherit;font-size:14px}.cmdk-input::placeholder{color:var(--text-3)}.cmdk-list{max-height:340px;padding:6px;overflow-y:auto}.cmdk-group-label{letter-spacing:.09em;text-transform:uppercase;color:var(--text-4);padding:8px 10px 4px;font-size:10px;font-weight:700}.cmdk-item{border-radius:var(--radius-sm);cursor:pointer;color:var(--text-2);align-items:center;gap:10px;padding:8px 10px;display:flex}.cmdk-item.is-active{background:var(--panel-3);color:var(--text)}.cmdk-item-glyph{width:16px;color:var(--text-3);flex:none;justify-content:center;align-items:center;display:inline-flex}.cmdk-item-label{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:13px;overflow:hidden}.cmdk-item-slug{font-family:var(--mono);color:var(--text-4);font-size:11px}.cmdk-item-hint{color:var(--text-4);font-size:11px}.cmdk-item-current{letter-spacing:.06em;text-transform:uppercase;color:var(--accent-hi);font-size:10px}.cmdk-empty{text-align:center;color:var(--text-3);padding:24px;font-size:13px}.cmdk-foot{border-top:1px solid var(--hairline);color:var(--text-4);align-items:center;gap:14px;padding:8px 14px;font-size:11px;display:flex}.cmdk-foot .kbd{font-size:10px}.md{font-family:var(--sans);color:var(--text-2);white-space:normal;font-size:11.5px;line-height:1.55}.md>:first-child{margin-top:0}.md>:last-child{margin-bottom:0}.md h1,.md h2,.md h3{color:var(--text);margin:12px 0 5px;font-weight:600;line-height:1.3}.md h1{letter-spacing:-.01em;font-size:14px}.md h2{font-size:12.5px}.md h3{color:var(--text-2);font-size:11.5px}.md p{margin:0 0 7px}.md ul,.md ol{margin:0 0 7px;padding-left:17px}.md li{margin-bottom:2.5px}.md li::marker{color:var(--text-4)}.md strong{color:var(--text);font-weight:600}.md em{color:var(--text-2)}.md a{color:var(--accent-hi);border-bottom:1px solid var(--accent-line);text-decoration:none}.md code{font-family:var(--mono);background:var(--panel-inset);border:1px solid var(--hairline-soft);color:var(--accent-hi);border-radius:3px;padding:.5px 4px;font-size:10.5px}.md pre{background:var(--panel-inset);border:1px solid var(--hairline-soft);border-radius:var(--radius-sm);margin:0 0 8px;padding:8px 10px;overflow-x:auto}.md pre code{color:var(--text-2);background:0 0;border:0;padding:0;font-size:10.5px}.md blockquote{border-left:2px solid var(--accent-line);color:var(--text-3);margin:0 0 8px;padding-left:10px}.md table{border-collapse:collapse;width:100%;margin:0 0 8px;font-size:11px}.md th,.md td{border:1px solid var(--hairline);text-align:left;padding:4px 7px}.md th{background:var(--panel);color:var(--text-2);font-weight:600}.md hr{border:0;border-top:1px solid var(--hairline);margin:10px 0}.md .contains-task-list{padding-left:2px;list-style:none}.md input[type=checkbox]{accent-color:var(--accent);vertical-align:-1px;margin-right:5px}.peek-backdrop{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:200;animation:backdropIn var(--dur-2) var(--ease-out);background:#030508b8;justify-content:center;align-items:flex-start;padding:8vh 16px 16px;display:flex;position:fixed;inset:0}.peek{background:var(--panel);border:1px solid var(--hairline-strong);border-radius:var(--radius-lg);width:100%;max-width:780px;max-height:82vh;animation:cmdkIn var(--dur-2) var(--ease-out);flex-direction:column;display:flex;overflow:hidden}.peek-head{border-bottom:1px solid var(--hairline);justify-content:space-between;align-items:center;padding:10px 14px;display:flex}.peek-path{color:var(--text-2);font-size:12px}.peek-close{color:var(--text-3);cursor:pointer;background:0 0;border:none;font-size:12px}.peek-close:hover{color:var(--text)}.peek-body{padding:14px 18px;overflow:auto}.peek-body .md{font-size:12.5px}.peek-pre{font-family:var(--mono);white-space:pre-wrap;word-break:break-word;color:var(--text);margin:0;font-size:12.5px;line-height:1.6}.peek.settings{max-width:620px}.settings-title{color:var(--text);font-size:13px;font-weight:600}.settings-body{flex-direction:column;gap:26px;display:flex}.settings-autosave{color:var(--text-3);border-left:2px solid var(--accent-line,var(--hairline));padding-left:10px;font-size:11.5px;line-height:1.55}.settings-section{flex-direction:column;gap:14px;display:flex}.settings-section-head{border-bottom:1px solid var(--hairline);align-items:baseline;gap:10px;padding-bottom:8px;display:flex}.settings-section-title{letter-spacing:.09em;text-transform:uppercase;color:var(--text-2);margin:0;font-size:11px;font-weight:700}.settings-section-hint{color:var(--text-4);font-size:11.5px}.settings-field{flex-direction:column;gap:5px;display:flex}.settings-field-head{align-items:center;gap:8px;display:flex}.settings-field-label{color:var(--text);font-size:12.5px}.settings-field.is-locked .settings-field-label{color:var(--text-2)}.settings-field-help{color:var(--text-4);font-size:11.5px;line-height:1.4}.settings-badge{letter-spacing:.04em;text-transform:uppercase;border:1px solid var(--hairline-strong);color:var(--text-3);border-radius:999px;padding:1px 6px;font-size:9.5px}.settings-badge.is-warn{color:var(--drive);border-color:color-mix(in srgb, var(--drive) 40%, transparent)}.settings-badge.is-override{color:var(--accent-hi);border-color:var(--accent-line)}.settings-badge.is-verified{color:var(--ok);border-color:color-mix(in srgb, var(--ok) 40%, transparent)}.settings-badge.is-unverified{color:var(--needs);border-color:color-mix(in srgb, var(--needs) 40%, transparent)}.settings-saving{color:var(--text-4);font-size:10.5px;font-style:italic}.settings-input{background:var(--panel-inset);border:1px solid var(--hairline);border-radius:var(--radius);width:100%;height:32px;color:var(--text);transition:border-color var(--dur-1);outline:none;padding:0 10px;font-family:inherit;font-size:12.5px}.settings-input:focus{border-color:var(--accent)}.settings-input:disabled{opacity:.6;cursor:progress}select.settings-input{cursor:pointer}.settings-textarea{resize:vertical;height:auto;min-height:32px;padding:7px 10px;line-height:1.5}.settings-readonly{background:var(--panel-inset);border:1px dashed var(--hairline);border-radius:var(--radius);min-height:32px;color:var(--text-2);align-items:center;padding:0 10px;font-size:12.5px;display:flex}.settings-field-note{color:var(--text-4);font-size:11px}.settings-field-error{color:var(--danger);font-size:11px}.settings-field-evidence,.prep-finding-evidence{color:var(--text-3);background:var(--panel-inset);border-left:2px solid var(--accent-line);border-radius:0 var(--radius) var(--radius) 0;white-space:pre-wrap;overflow-wrap:anywhere;padding:5px 7px;font-size:11px;line-height:1.45}.prep-stack{flex-direction:column;gap:18px;display:flex}.prep-stack .pw-frame{margin-bottom:0}.prep-warn{color:var(--text-2);background:color-mix(in srgb, var(--drive) 10%, transparent);border:1px solid color-mix(in srgb, var(--drive) 35%, transparent);border-radius:var(--radius);padding:7px 9px;font-size:11.5px;line-height:1.5}.prep-dryrun{border-radius:var(--radius);background:color-mix(in srgb, var(--drive) 10%, transparent);border:1px solid color-mix(in srgb, var(--drive) 35%, transparent);align-items:center;gap:9px;padding:8px 11px;display:flex}.prep-dryrun-label{color:var(--drive);font-size:12.5px;font-weight:600}.prep-dryrun-url{color:var(--text-2);font-size:11.5px}.prep-dryrun-waiting{color:var(--text-3)}.prep-dryrun-spacer{flex:1}.prep-cta{text-align:center;flex-direction:column;align-items:center;gap:12px;padding:40px 0 28px;display:flex}.prep-cta-logo{opacity:.85;display:flex}.prep-cta-title{color:var(--text-1);font-size:15px;font-weight:500}.prep-cta-sub{color:var(--text-3);max-width:52ch;font-size:12.5px;line-height:1.6}.prep-cta-open{flex-wrap:wrap;justify-content:center;gap:6px;max-width:56ch;margin:0;padding:0;list-style:none;display:flex}.prep-cta .prep-warn,.prep-cta .pw-frame{text-align:left;width:100%;max-width:62ch}.prep-cta-actions{align-items:center;gap:8px;display:flex}.prep-cta-open li{color:var(--text-3);border:1px solid var(--hairline);background:var(--panel-3);border-radius:999px;padding:3px 8px;font-size:11px}.prep-nudge{border:none;border-top:1px solid var(--hairline);width:100%;color:var(--text-3);text-align:left;cursor:pointer;transition:background var(--dur-1) var(--ease), color var(--dur-1) var(--ease);background:0 0;flex:none;align-items:center;gap:8px;padding:9px 12px;font-size:11.5px;display:flex}.prep-nudge:hover{background:var(--panel-3);color:var(--text-2)}.prep-nudge-dot{background:var(--drive);border-radius:50%;flex:none;width:7px;height:7px}.prep-nudge.is-done{color:var(--text-4)}.prep-nudge.is-done .prep-nudge-dot{box-shadow:inset 0 0 0 1px var(--text-4);background:0 0}.prep-nudge-text{flex:1;min-width:0}.prep-nudge-count{color:var(--text-4);white-space:nowrap;flex:none;font-size:10.5px}.prep-findings{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.prep-finding{flex-direction:column;gap:4px;display:flex}.prep-finding-head{align-items:baseline;gap:7px;display:flex}.prep-finding-key{color:var(--text-1);font-size:12px}.prep-finding-note{color:var(--text-4);font-size:11px}.prep-finding.is-stale .prep-finding-note{color:var(--drive)}.settings-clear{color:var(--text-3);cursor:pointer;text-underline-offset:2px;background:0 0;border:none;align-self:flex-start;margin-top:2px;padding:0;font-size:11px;text-decoration:underline}.settings-clear:hover:not(:disabled){color:var(--accent-hi)}.settings-clear:disabled{opacity:.5;cursor:default}.settings-combo{flex-direction:column;gap:6px;display:flex}.settings-custom-model{border:1px solid var(--hairline);border-radius:4px;flex-direction:column;gap:6px;padding:8px;display:flex}.settings-runtime-picker{border:none;flex-wrap:wrap;gap:12px;margin:0;padding:0;display:flex}.settings-runtime-picker legend{margin-bottom:4px;padding:0}.settings-runtime-option{color:var(--text-2);cursor:pointer;align-items:center;gap:4px;font-size:12px;display:flex}.settings-advanced-toggle{cursor:pointer;text-align:left;width:100%;color:inherit;background:0 0;border:none;justify-content:space-between;align-items:baseline;gap:8px;padding:0;display:flex}.settings-advanced-toggle:hover .settings-section-title{color:var(--accent-hi)}.settings-advanced-body{border-left:1px solid var(--border-1,var(--text-5,#333));flex-direction:column;gap:14px;margin-top:4px;padding-left:10px;display:flex}.peek.delete-dialog,.peek.merge-dialog{max-width:460px}.delete-dialog-title{color:var(--danger);font-size:13px;font-weight:600}.merge-dialog-title{color:var(--text);font-size:13px;font-weight:600}.merge-dialog-warnings{border-radius:var(--radius-sm);border:1px solid color-mix(in srgb, var(--warn,#d9a441) 40%, var(--hairline));background:color-mix(in srgb, var(--warn,#d9a441) 7%, var(--panel-2));color:var(--warn,#d9a441);margin:0;padding:10px 12px 10px 26px;font-size:12px;line-height:1.6}.delete-dialog-body,.merge-dialog-body{flex-direction:column;gap:16px;display:flex}.delete-dialog-lead,.merge-dialog-lead{color:var(--text-2);margin:0;font-size:12.5px;line-height:1.6}.delete-dialog-lead strong,.merge-dialog-lead strong{color:var(--text);font-weight:600}.delete-dialog-field{flex-direction:column;gap:6px;display:flex}.delete-dialog-field>span{color:var(--text-2);font-size:12px}.delete-dialog-field code{border-radius:var(--radius);background:var(--panel-inset);color:var(--text);padding:1px 5px}.delete-dialog-field .settings-input:focus{border-color:var(--danger)}.delete-dialog-actions,.merge-dialog-actions{justify-content:flex-end;gap:8px;margin-top:2px;display:flex}.peek.notes-dialog{max-width:560px}.notes-dialog-body{flex-direction:column;gap:20px;display:flex}.notes-dialog-road{flex-direction:column;gap:8px;display:flex}.notes-dialog-list{border:1px solid var(--hairline);border-radius:var(--radius);background:var(--panel-2);flex-direction:column;max-height:260px;display:flex;overflow-y:auto}.notes-dialog-row{cursor:pointer;transition:background var(--dur-1);align-items:center;gap:10px;padding:7px 12px;display:flex}.notes-dialog-row+.notes-dialog-row{border-top:1px solid var(--hairline-soft)}.notes-dialog-row:hover{background:var(--panel-3)}.notes-dialog-actions{align-items:center;gap:10px;display:flex}.notes-dialog-blocked{color:var(--text-3);text-wrap:pretty;font-size:11.5px}.terminal-placeholder,.boundary-fallback{background:var(--bg);justify-content:center;align-items:center;height:100%;display:flex}.toasts{z-index:400;flex-direction:column;gap:8px;max-width:380px;display:flex;position:fixed;bottom:34px;right:16px}.toast{border-radius:var(--radius);cursor:pointer;border:1px solid var(--hairline);background:var(--panel);color:var(--text);word-break:break-word;animation:toastIn var(--dur-3) var(--ease-out);padding:9px 13px;font-size:12.5px;box-shadow:0 12px 30px -14px #000c}.toast-error{border-color:color-mix(in srgb, var(--danger) 55%, var(--hairline));color:var(--danger)}.toast-success{border-color:color-mix(in srgb, var(--ok) 50%, var(--hairline));color:var(--ok)}.toast-info{color:var(--text-2)}.app-frame{flex-direction:column;height:100%;display:flex}.app-frame-body{flex:1;min-height:0}.update-banner{border-bottom:1px solid var(--accent-line);background:color-mix(in srgb, var(--accent) 12%, var(--panel));color:var(--text);flex:none;align-items:center;gap:10px;padding:6px 14px;font-size:12.5px;display:flex;overflow:hidden}.update-banner-dot{background:var(--accent-hi);width:7px;height:7px;animation:dotGlow 2.2s var(--ease) infinite;border-radius:50%;flex:none}.update-banner-text{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.update-banner-text strong{color:var(--accent-hi);font-weight:600}.update-banner-sep{color:var(--text-4)}.update-banner-dim{color:var(--text-3)}.update-banner-cmd{font-family:var(--mono);color:var(--accent-hi);background:var(--panel-inset);border:1px solid var(--hairline);border-radius:var(--radius-sm);white-space:nowrap;-webkit-user-select:all;user-select:all;padding:2px 7px;font-size:11.5px}.update-banner-dismiss{width:22px;height:22px;color:var(--text-3);border-radius:var(--radius-sm);cursor:pointer;background:0 0;border:none;flex:none;place-items:center;margin-left:auto;font-size:16px;line-height:1;display:grid}.update-banner-dismiss:hover{color:var(--text);background:var(--panel-3)}.app-loading{justify-content:center;align-items:center;height:100%;display:flex}.tb-home{cursor:pointer;color:inherit;background:0 0;border:0;flex:none;align-items:center;gap:9px;padding:0;display:inline-flex}.tb-home:hover .tb-app{color:var(--accent-hi)}.tb-switcher{min-width:0;display:inline-flex;position:relative}.tb-switcher-btn{border-radius:var(--radius);cursor:pointer;min-width:0;height:24px;transition:border-color var(--dur-1), background var(--dur-1);background:0 0;border:1px solid #0000;align-items:center;gap:5px;padding:0 7px;display:inline-flex}.tb-switcher-btn:hover{border-color:var(--hairline);background:var(--panel-3)}.tb-switcher-caret{color:var(--text-4);align-items:center;display:inline-flex}.tb-menu{z-index:40;background:var(--panel);border:1px solid var(--hairline);border-radius:var(--radius-lg);min-width:240px;animation:cmdkIn var(--dur-2) var(--ease-out);padding:5px;position:absolute;top:30px;left:0;box-shadow:0 18px 44px -18px #000000d9}.tb-menu-label{letter-spacing:.08em;text-transform:uppercase;color:var(--text-4);padding:6px 8px 4px;font-size:10px}.tb-menu-item{border-radius:var(--radius);cursor:pointer;width:100%;color:var(--text-2);text-align:left;transition:background var(--dur-1), color var(--dur-1);background:0 0;border:0;align-items:center;gap:8px;padding:7px 8px;display:flex}.tb-menu-item:hover{background:var(--panel-3);color:var(--text)}.tb-menu-item.is-current{color:var(--text)}.tb-menu-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:13px;overflow:hidden}.tb-menu-check{color:var(--accent-hi);align-items:center;display:inline-flex}.tb-menu-sep{background:var(--hairline-soft);height:1px;margin:5px 4px}button.tb-runs{cursor:pointer}.home-frame{flex-direction:column;height:100%;display:flex}.home-topbar{border-bottom:1px solid var(--hairline);background:var(--panel);flex:0 0 44px;align-items:center;gap:9px;padding:0 16px;display:flex}.home{min-height:0;animation:fadeUp var(--dur-3) var(--ease-out);flex:1;padding:48px clamp(20px,6vw,72px) 56px;overflow-y:auto}.home-head{max-width:1100px;margin:0 auto 30px}.home-title{align-items:center;gap:11px;display:flex}.home-title-text{letter-spacing:-.01em;font-size:22px;font-weight:600}.home-count{font-family:var(--mono);color:var(--text-3);border:1px solid var(--hairline);border-radius:var(--radius-pill);padding:1px 9px;font-size:12px}.home-sub{color:var(--text-3);max-width:60ch;margin:10px 0 0;font-size:13px}.home-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;max-width:1100px;margin:0 auto;display:grid}.project-card{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel);animation:fadeUp var(--dur-3) var(--ease-out) backwards;transition:border-color var(--dur-2), transform var(--dur-2), box-shadow var(--dur-2);flex-direction:column;display:flex;overflow:hidden}.home-grid>:nth-child(2){animation-delay:40ms}.home-grid>:nth-child(3){animation-delay:80ms}.home-grid>:nth-child(4){animation-delay:.12s}.home-grid>:nth-child(5){animation-delay:.16s}.home-grid>:nth-child(n+6){animation-delay:.2s}.project-card:hover{border-color:var(--hairline-strong);transform:translateY(-2px);box-shadow:0 16px 34px -20px #000c}.pc-main{cursor:pointer;text-align:left;color:inherit;background:0 0;border:0;flex-direction:column;flex:1;gap:5px;padding:16px 16px 14px;display:flex}.pc-head{align-items:center;gap:8px;display:flex}.pc-name{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text);flex:1;font-size:15px;font-weight:600;overflow:hidden}.pc-rename{background:var(--panel-inset);border:1px solid var(--accent-line);border-radius:var(--radius-sm);min-width:0;height:24px;color:var(--text);flex:1;padding:0 6px;font-size:14px}.pc-health-dot{border-radius:50%;flex:none;width:8px;height:8px}.health-dot-attention{background:var(--needs)}.health-dot-working{background:var(--ph-implementation);animation:1.4s ease-in-out infinite pulse}.health-dot-steady{background:var(--ok)}.health-dot-empty{background:var(--text-4)}.pc-path{color:var(--text-4);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.pc-stats{gap:16px;margin-top:10px;display:flex}.pc-stat{color:var(--text-3);align-items:baseline;gap:5px;display:inline-flex}.pc-stat .spin-ring{align-self:center}.pc-stat-n{font-family:var(--mono);color:var(--text);font-size:16px}.pc-stat-label{font-size:11px}.pc-stat-run .pc-stat-n{color:var(--ph-implementation)}.pc-stat-needs .pc-stat-n{color:var(--needs)}.pc-health-label{letter-spacing:.06em;text-transform:uppercase;color:var(--text-4);margin-top:12px;font-size:10px}.pc-actions{border-top:1px solid var(--hairline-soft);background:var(--panel-2);opacity:0;transition:opacity var(--dur-2) var(--ease);gap:6px;padding:8px 12px;display:flex}.project-card:hover .pc-actions,.project-card:focus-within .pc-actions{opacity:1}.pc-action{border:1px solid var(--hairline);border-radius:var(--radius);height:24px;color:var(--text-3);cursor:pointer;transition:color var(--dur-1), border-color var(--dur-1);background:0 0;padding:0 10px;font-size:11px}.pc-action:hover:not(:disabled){color:var(--text);border-color:var(--hairline-strong)}.pc-action:disabled{opacity:.4;cursor:not-allowed}.pc-action-danger:hover:not(:disabled){color:var(--danger);border-color:color-mix(in srgb, var(--danger) 45%, var(--hairline))}.open-card{border:1px dashed var(--hairline-strong);border-radius:var(--radius-lg);cursor:pointer;min-height:150px;color:var(--text-3);transition:border-color var(--dur-2), color var(--dur-2), background var(--dur-2);background:0 0;flex-direction:column;justify-content:center;align-items:flex-start;gap:4px;padding:16px;display:flex}.open-card:hover{border-color:var(--accent-line);color:var(--text);background:var(--accent-soft)}.open-card-plus{color:var(--accent-hi);margin-bottom:2px;display:inline-flex}.open-card-label{font-size:14px;font-weight:600}.open-card-sub{color:var(--text-4);font-size:11px}.open-project{height:100%;animation:fadeUp var(--dur-3) var(--ease-out);justify-content:center;align-items:center;padding:24px;display:flex}.op-card{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel);flex-direction:column;gap:6px;width:100%;max-width:460px;padding:28px;display:flex;box-shadow:0 24px 60px -30px #000c}.op-logo{background:var(--accent);border-radius:9px;justify-content:center;align-items:center;width:36px;height:36px;margin-bottom:6px;display:flex}.op-kick{letter-spacing:.1em;text-transform:uppercase;color:var(--accent-hi);font-size:10px}.op-h{font-size:19px;font-weight:600}.op-sub{color:var(--text-3);margin-bottom:8px;font-size:13px;line-height:1.5}.op-label{color:var(--text-2);margin-top:4px;font-size:11px}.op-input{background:var(--panel-inset);border:1px solid var(--hairline);border-radius:var(--radius);height:32px;color:var(--text);transition:border-color var(--dur-1);padding:0 10px;font-size:13px}.op-input:focus{border-color:var(--accent-line);outline:none}.op-input-row{align-items:center;gap:6px;display:flex}.op-input-row .op-input{flex:1;min-width:0}.op-hint{color:var(--text-4);font-size:11px}.op-error{border:1px solid color-mix(in srgb, var(--danger,#e5534b) 45%, var(--hairline));border-radius:var(--radius);background:color-mix(in srgb, var(--danger,#e5534b) 7%, var(--panel-2));padding:8px 10px}.op-error-msg{color:var(--danger,#e5534b);font-size:12px;font-family:var(--mono);word-break:break-word}.op-error-hint{color:var(--text-2);margin-top:5px;font-size:12px;line-height:1.5}.op-error-hint code{font-family:var(--mono)}.op-actions{justify-content:flex-end;gap:8px;margin-top:14px;display:flex}.peek.dir-picker{max-width:660px;height:66vh}.dir-picker-title{font-size:13px;font-weight:600}.dir-picker-bar{border-bottom:1px solid var(--hairline);align-items:center;gap:8px;padding:8px 12px;display:flex}.dir-up{min-width:28px;padding:0 8px}.dir-path-row{border-bottom:1px solid var(--hairline);align-items:center;gap:8px;padding:8px 12px;display:flex}.dir-path-label{color:var(--text-4);font-size:11px}.dir-path-input{background:var(--panel-inset);border:1px solid var(--hairline);border-radius:var(--radius);min-width:0;height:28px;color:var(--text);transition:border-color var(--dur-1);outline:none;flex:1;padding:0 8px;font-size:11.5px}.dir-path-input:focus{border-color:var(--accent)}.dir-crumbs{white-space:nowrap;scrollbar-width:none;flex:1;align-items:center;gap:2px;min-width:0;font-size:12px;display:flex;overflow-x:auto}.dir-crumbs::-webkit-scrollbar{display:none}.dir-crumb-wrap{color:var(--text-4);align-items:center;gap:2px;display:inline-flex}.dir-crumb{border-radius:var(--radius);color:var(--text-2);font:inherit;cursor:pointer;background:0 0;border:none;padding:2px 4px}.dir-crumb:hover{color:var(--text);background:var(--panel-inset)}.dir-hidden-toggle{color:var(--text-4);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:5px;font-size:11px;display:inline-flex}.dir-picker-body{flex:1;min-height:0;display:flex}.dir-rail{border-right:1px solid var(--hairline);flex-direction:column;flex:none;gap:1px;width:140px;padding:8px;display:flex;overflow-y:auto}.dir-rail-item{border-radius:var(--radius);color:var(--text-3);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:7px;padding:5px 7px;font-size:12px;display:flex}.dir-rail-item:hover{background:var(--panel-inset);color:var(--text)}.dir-rail-item.is-active{background:var(--accent-soft);color:var(--text)}.dir-rail-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.dir-list{flex:1;min-width:0;padding:8px;overflow-y:auto}.dir-item{border-radius:var(--radius);width:100%;color:var(--text-2);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;padding:6px 8px;font-size:12.5px;display:flex}.dir-item:hover{background:var(--panel-inset);color:var(--text)}.dir-item.is-repo{color:var(--text)}.dir-item-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.dir-item-tag{color:var(--text-4);font-size:10px}.dir-item-repo{letter-spacing:.04em;text-transform:uppercase;color:var(--accent-hi);flex:none;align-items:center;gap:3px;font-size:10px;display:inline-flex}.dir-picker-foot{border-top:1px solid var(--hairline);align-items:center;gap:12px;padding:10px 12px;display:flex}.dir-picked{min-width:0;color:var(--text-3);text-overflow:ellipsis;white-space:nowrap;text-align:left;direction:rtl;flex:1;font-size:11.5px;overflow:hidden}.dir-picked>bdi{unicode-bidi:isolate}.dir-picker-actions{flex:none;gap:8px;display:flex}.wizard-card{max-width:520px}.wizard-steps{color:var(--text-4);gap:16px;margin:0 0 6px;padding:0;font-size:11px;list-style:none;display:flex}.wizard-step{align-items:center;gap:6px;display:flex}.wizard-step.is-current{color:var(--accent-hi)}.wizard-step.is-done{color:var(--text-2)}.wizard-step.is-passed{color:var(--ok)}.wizard-passed{color:var(--text-3);align-items:center;gap:6px;margin-bottom:8px;font-size:11.5px;display:flex}.wizard-passed>svg{color:var(--ok);flex:none}.wizard-step-dot{background:var(--hairline);border-radius:50%;width:7px;height:7px}.wizard-step.is-current .wizard-step-dot{background:var(--accent)}.wizard-step.is-done .wizard-step-dot{background:var(--text-3)}.afk-card{flex-direction:column;gap:10px;display:flex}.afk-card-head{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.afk-card-title{font-size:16px;font-weight:600}.afk-card-sub{color:var(--text-3);margin:0;font-size:12.5px;line-height:1.5}.afk-rows{flex-direction:column;gap:8px;display:flex}.afk-row{border:1px solid var(--hairline);border-radius:var(--radius);background:var(--panel-2);flex-direction:column;gap:8px;padding:12px;display:flex}.afk-row.is-ok{opacity:.72}.afk-row-head{align-items:flex-start;gap:9px;display:flex}.afk-dot{border-radius:50%;flex:none;width:8px;height:8px;margin-top:4px}.afk-dot-ok{background:var(--ok,#3fb950)}.afk-dot-warn{background:var(--warn,#d9a441)}.afk-row-text{flex-direction:column;gap:2px;display:flex}.afk-row-label{font-size:13px;font-weight:500}.afk-row-detail{color:var(--text-4);font-size:11px}.afk-row-action{flex-direction:column;gap:8px;padding-left:17px;display:flex}.afk-cmd{background:var(--panel-inset);border:1px solid var(--hairline);border-radius:var(--radius);align-items:center;gap:8px;padding:8px 10px;display:flex}.afk-cmd-text{color:var(--accent-hi);word-break:break-all;flex:1;font-size:12px}.afk-note{color:var(--text-4);font-size:11px}.afk-term{border:1px solid var(--hairline);border-radius:var(--radius);height:280px;overflow:hidden}.afk-term-actions{justify-content:flex-end;gap:8px;display:flex}.afk-verdict{flex-direction:column;gap:4px;font-size:12px;display:flex}.afk-verdict.is-ok{color:var(--ok,#3fb950)}.afk-verdict.is-warn{color:var(--warn,#d9a441)}.afk-verdict-fix{color:var(--text-4)}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.32}}@keyframes dotGlow{0%,to{box-shadow:0 0 0 3px #7c6cf638}50%{box-shadow:0 0 0 5px #7c6cf614}}@keyframes fadeUp{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@keyframes bodyIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes detailIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes lineIn{0%{opacity:0;transform:translate(-4px)}to{opacity:1;transform:translate(0)}}@keyframes popIn{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}@keyframes cmdkIn{0%{opacity:0;transform:translateY(-10px)scale(.985)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes backdropIn{0%{opacity:0}to{opacity:1}}@keyframes toastIn{0%{opacity:0;transform:translate(16px)scale(.98)}to{opacity:1;transform:translate(0)scale(1)}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}.btn-solid:hover:not(:disabled){box-shadow:none;transform:none}}