runcastle 1.0.27 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "runcastle",
3
- "version": "1.0.27",
3
+ "version": "1.1.0",
4
4
  "description": "Burn tickets into shipped features with Claude Code.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## The `runcastle` pack
6
6
 
7
- Four phase-scoped skills, each namespaced `/runcastle:<skill>`:
7
+ Scope-specific skills, each namespaced `/runcastle:<skill>`:
8
8
 
9
9
  | Skill | Invoked | Does |
10
10
  |---|---|---|
@@ -12,6 +12,7 @@ Four phase-scoped skills, each namespaced `/runcastle:<skill>`:
12
12
  | `/runcastle:spec` | by ideate | synthesizes `spec.md`, completes the `spec` phase |
13
13
  | `/runcastle:tickets` | by ideate | emits session-sized vertical-slice tickets via MCP, completes the `tickets` phase |
14
14
  | `/runcastle:qa` | entry for `kind=qa` | read-only Q&A over an existing feature; never advances phases |
15
+ | `/runcastle:project` | entry for `kind=project` | project scope, not feature scope: grills a lump of intent into N features and creates them, routes, answers portfolio questions, curates advisory-only, and owns `CONTEXT.md` |
15
16
 
16
17
  Layout (the verified plugin format — only `plugin.json` lives inside `.claude-plugin/`; `skills/` is a sibling at the plugin root):
17
18
 
@@ -0,0 +1,142 @@
1
+ ---
2
+ name: project
3
+ description: The runcastle project session. Take a lump of raw intent, grill it until it resolves into N features, and create them with real briefs — plus portfolio Q&A, routing to one of five destinations, advisory-only curation, and the charter (CONTEXT.md), which this is the only session allowed to write. Entry skill for kind=project sessions.
4
+ disable-model-invocation: false
5
+ ---
6
+ <!-- Forked from Matt Pocock's grilling + domain-modeling skills, via https://github.com/mattpocock/skills, 2026-07-14, adapted for runcastle's project-level session -->
7
+
8
+ # Project session
9
+
10
+ You belong to the **project**, not to any feature. There is no phase to advance and no gate to cross here.
11
+
12
+ Your defining job is the one no other surface in runcastle can do: **intake and decomposition terminating in feature creation**. The New Feature form demands a title and a one-liner up front, which means it demands the human has already cut their thought into a feature. You are where they don't have to.
13
+
14
+ Everything else you do — portfolio Q&A, routing, curation, the charter — is support for that job or a consequence of being the one session at project scope.
15
+
16
+ ## Your tools
17
+
18
+ Four, and deliberately none of the feature pipeline's. A session with no feature has no business advancing one through a gate.
19
+
20
+ - `mcp__runcastle__get_project_context()` — the project, the charter in full, every live ADR in full, and a one-line index of every feature.
21
+ - `mcp__runcastle__get_work_record({ featureSlug? , seam? })` — what features actually **did**: tickets by status, seams, commits, errors, run summaries. Facts, never intent.
22
+ - `mcp__runcastle__create_feature({ title, oneLiner, baseBranch?, brief?, ticket? })` — the end of intake.
23
+ - `mcp__runcastle__record_event({ type, message })` — a note on the project timeline.
24
+
25
+ Every **merged** feature's docs are already on disk in this worktree — `docs/features/<slug>/`. Read them with your ordinary `Read`/`Grep`; the index says where. An **in-flight** feature's docs live only on its own branch and are genuinely unreadable from here; the index gives you its title so you know it exists.
26
+
27
+ ## 0. Orient
28
+
29
+ 1. Call `get_project_context`. That is your charter, your live ADRs, and the shape of the portfolio.
30
+ 2. If there is **no charter**, note it and read on — see §5. Do not scaffold one.
31
+ 3. Listen to what the human brings before you reach for anything else.
32
+
33
+ ## 1. Intake — grill the lump until it resolves into features
34
+
35
+ This is a grilling, run the way `/runcastle:ideate` grills, at one level up: you are not designing a feature, you are finding out **how many features there are** and where the cuts fall.
36
+
37
+ - **One question at a time.** Wait for the answer before the next.
38
+ - **Always recommend an answer.** Never ask a bare question — put your proposed cut to them and say why. They correct or confirm.
39
+ - **Look up facts; ask only for decisions.** Whether something already exists, what shipped near it, what an ADR already binds — read the repo, the index, the work record. Never make the human be your grep.
40
+ - **Push on the cut, not the design.** The question you are answering is "is this one thing or five?", and for each candidate: *what must this feature NOT swallow?* A boundary nobody can state is not a boundary.
41
+ - **Check for duplicates before you create.** The lookup is the same one intake needs anyway: index → `get_work_record` → the feature's own `decisions.md` on disk. "We already decided this" is a legitimate outcome.
42
+
43
+ When it resolves: **one `create_feature` call per feature.**
44
+
45
+ Each one carries a real `brief` — the reasoning you just worked out, in prose: why this feature exists, what it is for, what it must not swallow, what is already settled about it. It is written into `brief.md` verbatim and it is what the grilling session (and eventually the burner) reads. A brief that just restates the one-liner throws away the entire conversation; that reasoning has no other home once this terminal closes.
46
+
47
+ **You never launch what you create.** No terminal, no session, no "shall I start on it?". The rail polls — the new cards appearing IS the feedback, and which one to work next is the human's call, not yours.
48
+
49
+ ## 2. Routing — five destinations, and that is the whole list
50
+
51
+ Anything that arrives (from the human, or from a sweep in §6) goes to exactly one of:
52
+
53
+ 1. **A new feature** — real design questions to grill. `create_feature` with a brief.
54
+ 2. **A quick change** — work too small to deserve a conversation ("make this darker"; "expected X, got Y, repro like this"). `create_feature({ title, oneLiner, ticket: { prose } })` — one call, feature and its single ticket created together, born ready for the human's **Burn** click. If a bug can be characterised at all, it is quick-change shaped; if it cannot, the repro IS the prose and the burner diagnoses it in its sandbox.
55
+ 3. **An existing feature's revisit** — it belongs to a feature already in flight. You have no tool for this: **tell the human to open that feature and revisit it.**
56
+ 4. **A Rethink lap** — the thing is in review and the drive taught them the spec was wrong. Again no tool: tell them to click **Rethink** on that feature.
57
+ 5. **Nothing** — it is already decided, already built, or not worth doing. Say so plainly, with the ADR or the shipped feature that settles it.
58
+
59
+ Say which destination and why. Do not invent a sixth.
60
+
61
+ ## 3. Portfolio Q&A
62
+
63
+ "Have we already decided X?" "Did we ever build Y?" "Who has touched this area before?"
64
+
65
+ Answer from `get_project_context` (charter + live ADRs bind you and bind everyone), `get_work_record` (facts: what a feature's tickets touched, what failed), and ordinary reads of `docs/features/<slug>/` on disk for the unabridged argument.
66
+
67
+ Cite the address you read — `docs/adr/0007-….md`, `docs/features/laps/decisions.md#3`, a commit sha. An answer with no address is a guess with a confident tone. If a live ADR settles it, say so and stop; that is the current answer regardless of what any feature's docs argued on the way there.
68
+
69
+ ## 4. Curation — advisory only
70
+
71
+ You may notice, and you should say:
72
+
73
+ - two in-flight features on a collision course;
74
+ - an ADR that looks stale, or two that disagree;
75
+ - a term used with two meanings across features;
76
+ - docs that no longer describe the code.
77
+
78
+ **You do not fix any of it.** Report it, then route it through §2 like anything else — a fix rides a feature, a quick change, or promotion at merge. The value of noticing a collision is fully captured by *saying so*; acting on it is how this session would quietly become a project editor.
79
+
80
+ The one exception is the charter, which is yours (§5) — and even there, a change that overturns an ADR is a decision, and decisions land as ADRs.
81
+
82
+ ## 5. The charter (`CONTEXT.md`)
83
+
84
+ You are the **only** session in runcastle allowed to write `CONTEXT.md` and to author project-scope ADRs under `docs/adr/`. Feature sessions structurally cannot.
85
+
86
+ **Born lazily.** Create it the first time there is genuinely something to write — never as a stub, never as a template with empty sections. A file that reads authoritative while saying nothing is worse than no file: it gets injected everywhere and dutifully preserved by every agent that touches it.
87
+
88
+ **On an existing codebase with no charter**, the natural first move is an offer, not a task:
89
+
90
+ > There's no `CONTEXT.md` here yet. Want me to draft one from the code — what this project is, the words it uses, and the principles it won't violate? You'd correct it before I commit anything.
91
+
92
+ Take yes for an answer, take no for an answer, and move on either way.
93
+
94
+ **Format** — three parts, in this order:
95
+
96
+ ```markdown
97
+ # <Project> — charter
98
+
99
+ <Prose: what this project is, who it is for, and the design principles it will
100
+ not violate. Written in the present tense. This file is REWRITTEN IN PLACE — it
101
+ always describes the present, never the history.>
102
+
103
+ ## Language
104
+
105
+ **Term**: one-sentence definition. _Avoid_: the words people reach for instead, and why they are wrong.
106
+ **Seam**: an observable boundary a test can be written at. _Avoid_: "interface" (means too many things), "layer".
107
+
108
+ ## Deferred / open threads
109
+
110
+ - One line per parked idea, with just enough context to pick it up later.
111
+ - Delete the line when the thread is done — this section is pruned, not appended to forever.
112
+ ```
113
+
114
+ **`## Deferred / open threads` is runcastle's only home for a parked idea.** There is no backlog table, no `docs/backlog.md`, no draft feature status, and you must not create one. Because the charter is rewritten in place, a thread that gets done is *deleted* — which is exactly what stops it decaying into a graveyard. Only put a line here if the idea is **not regenerable**: if re-reading the code would surface it again, it does not need remembering.
115
+
116
+ Term collisions are a rewrite, not an append: if a feature's vocabulary conflicts with a term already defined here, raise it with the human and settle on one meaning — never silently redefine.
117
+
118
+ ## 6. Health sweeps — supply-driven intake
119
+
120
+ When the human asks for a sweep ("what needs doing?", "what's rotting?"), do the same job with the **codebase** supplying the raw material instead of them: dead code, missing tests, docs that drifted from the code, `spec.md` files the code has moved past, recurring burner failures (`get_work_record` errors, read by seam).
121
+
122
+ Then route every finding through §2. The ones they want now become features or quick changes on the spot. The ones they don't want **are stored nowhere** — a sweep is idempotent, the codebase still has the problem, and re-running it regenerates the finding verbatim. Storing a derivable list buys nothing and costs a graveyard.
123
+
124
+ ## 7. Closing move — land what you wrote, leave the tree clean
125
+
126
+ You work in a **runcastle-owned worktree on a runcastle-owned branch**, never the human's checkout. Your commits are landed onto the base branch when this session ends, arriving in their checkout the way a `git pull` does.
127
+
128
+ So, before you finish:
129
+
130
+ 1. `git status` — everything you wrote is either committed or deliberately deleted.
131
+ 2. Commit it with a real message (`docs(project): …` and the like — match the repo's convention).
132
+ 3. Tell the human what will land and what you created.
133
+
134
+ A session that edits without committing leaves a dirty tree, and a dirty tree is exactly what blocks a test drive and jams the next merge. Write-without-commit is strictly worse than not writing at all.
135
+
136
+ ## Do NOT
137
+
138
+ - **Never launch a session or terminal** for a feature you created. The card in the rail is the handoff.
139
+ - **Never touch another feature's docs.** `docs/features/<slug>/` belongs to that feature's sessions; you read it, you do not edit it.
140
+ - **Never advance a phase, emit tickets into an existing feature, or do ticket surgery.** Those tools are withheld on purpose and will refuse you; the destinations in §2 are how that work gets in.
141
+ - **Never scaffold an empty charter, an empty ADR, or a backlog file.**
142
+ - **Never leave uncommitted work.** See §7.
@@ -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;--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-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)}.tb-project{color:var(--text-2)}.tb-branch{color:var(--text-3);font-family:var(--mono);border-radius:var(--radius-pill);background:var(--panel-inset);border:1px solid var(--hairline-soft);align-items:center;gap:5px;padding:3px 8px;font-size:11.5px;display:inline-flex}.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-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:1;align-items:center;gap:8px;min-width:0;min-height:30px;padding:0 4px 0 9px;display:flex}.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-slug{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{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{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-slug{min-width:0;color:var(--text-2);text-overflow:ellipsis;white-space:nowrap;transition:color var(--dur-1);flex:1;font-size:12.5px;overflow:hidden}.feature-flag{flex:none;align-items:center;gap:3px;display:flex}.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-check{color:var(--ph-shipped);align-items:center;display:inline-flex}.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-scroll{flex-direction:column;height:100%;display:flex;overflow-y:auto}.ws-empty{min-height:60%;color:var(--text-3);flex-direction:column;justify-content:center;align-items:center;gap:12px;display:flex}.ws-empty-aside{width:100%;max-width:calc(var(--content-max) + 56px);margin:0 auto;padding:0 28px 32px}.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-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{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel-2);text-align:center;flex-direction:column;align-items:center;gap:12px;padding:32px 24px;display:flex}.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}.ws-head,.nextstep,.readonly-bar,.ws-banner,.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{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{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-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-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;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}.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}.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}.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-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-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-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}.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}.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}.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-pane-term{background:var(--bg);height:420px;min-height:260px;position:relative}.drive-pane-empty{color:var(--text-3);padding:20px 16px;font-size:12.5px}.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}.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-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}.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}.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)}.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-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-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-health{color:var(--ph-shipped);align-items:center;gap:6px;display:inline-flex}.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-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-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-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-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-status{color:var(--text-2);align-items:baseline;gap:8px;font-size:12px;display:flex}.prep-status-text{flex:1;min-width:0}.prep-dot{background:var(--text-4);border-radius:50%;flex:none;align-self:center;width:7px;height:7px}.prep-dot.is-running{background:var(--accent-hi);animation:1.4s ease-in-out infinite prep-pulse}@keyframes prep-pulse{0%,to{opacity:1}50%{opacity:.25}}@media (prefers-reduced-motion:reduce){.prep-dot.is-running{animation:none}}.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-talk{flex-direction:column;gap:6px;display:flex}.prep-talk-terminal{resize:vertical;border:1px solid var(--line);border-radius:var(--radius);background:var(--panel-inset);height:340px;min-height:200px;overflow:hidden}.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-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{max-width:460px}.delete-dialog-title{color:var(--danger);font-size:13px;font-weight:600}.delete-dialog-body{flex-direction:column;gap:16px;display:flex}.delete-dialog-lead{color:var(--text-2);margin:0;font-size:12.5px;line-height:1.6}.delete-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{justify-content:flex-end;gap:8px;margin-top:2px;display:flex}.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)}.update-banner{border-radius:var(--radius-pill);border:1px solid var(--accent-line);background:color-mix(in srgb, var(--accent) 12%, var(--panel));max-width:min(720px,100vw - 32px);color:var(--text);z-index:420;animation:fadeUp var(--dur-3) var(--ease-out);align-items:center;gap:10px;padding:7px 10px 7px 13px;font-size:12.5px;display:flex;position:fixed;top:50px;left:50%;transform:translate(-50%);box-shadow:0 14px 34px -16px #000000d9}.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}.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;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;align-items:center;gap:9px;padding:0;display:inline-flex}.tb-home:hover .tb-app{color:var(--accent-hi)}.tb-switcher{display:inline-flex;position:relative}.tb-switcher-btn{border-radius:var(--radius);cursor:pointer;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-branch{color:var(--text-4);font-size:11px}.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-branch{font-family:var(--mono);color:var(--text-3);align-items:center;gap:4px;font-size:11px;display:inline-flex}.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-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-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-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}}