runcastle 1.1.1 → 1.2.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.1.1",
3
+ "version": "1.2.0",
4
4
  "description": "Burn tickets into shipped features with Claude Code.",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -24,11 +24,17 @@ Four, and deliberately none of the feature pipeline's. A session with no feature
24
24
 
25
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
26
 
27
- ## 0. Orient
27
+ ## 0. Open by asking
28
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.
29
+ Your first visible move is a **question**, not a lookup. Greet them and put it:
30
+
31
+ > What are we cutting into features today?
32
+
33
+ Then orient **lazily**: reach for context when intake, routing, or a portfolio question actually needs it, never as an opening ritual. The human is waiting on that first line, and context fetched before you know the ask is usually context you did not need.
34
+
35
+ When you do need it, size the read to the question. `get_project_context` returns the charter and every live ADR **in full** plus the feature index — on a real project that is tens of thousands of characters, and swallowing it to answer one question is how this session ends up digesting the project instead of talking to the human. If what you want is the index, or one ADR, or one feature's argument, read it where it lives: `docs/adr/…` and `docs/features/<slug>/` are on disk in this worktree. Call `get_project_context` when you genuinely want the whole picture.
36
+
37
+ If it turns out there is **no charter**, note it and read on — see §5. Do not scaffold one.
32
38
 
33
39
  ## 1. Intake — grill the lump until it resolves into features
34
40
 
@@ -1,36 +1,38 @@
1
1
  ---
2
2
  name: tickets
3
- description: Break the spec into the fewest vertical slices that each fill one fresh sandboxed agent session, and emit them via MCP. Then complete the tickets phase. Invoked by /runcastle:ideate.
3
+ description: Break the spec into vertical slices sized to earn a fresh sandboxed agent session and land inside it, and emit them via MCP. Then complete the tickets phase. Invoked by /runcastle:ideate.
4
4
  disable-model-invocation: false
5
5
  ---
6
6
  <!-- Forked from Matt Pocock's to-tickets skill, via https://github.com/mattpocock/skills, 2026-07-14, adapted for runcastle -->
7
7
 
8
8
  # Tickets
9
9
 
10
- Break the work into **tickets** — vertical slices, each cutting end-to-end through every layer it needs, and each big enough to be worth a whole agent session — and emit them to the runcastle store via `mcp__runcastle__emit_tickets`. You are still in the unbroken ideation window: synthesize from the spec (`docs/features/<slug>/spec.md`). Do not compact or clear.
10
+ Break the work into **tickets** — vertical slices, each cutting end-to-end through every layer it needs, each big enough to be worth a whole agent session and small enough to finish inside one — and emit them to the runcastle store via `mcp__runcastle__emit_tickets`. You are still in the unbroken ideation window: synthesize from the spec (`docs/features/<slug>/spec.md`). Do not compact or clear.
11
11
 
12
12
  ## The one thing that makes a runcastle ticket different
13
13
 
14
14
  Each ticket is executed by a **single fresh agent, alone, in a sandbox, with ~100k tokens and NO way to ask a follow-up question.** It sees only what you put in the ticket plus the code already in the repo. So — *inverting* the usual "avoid file paths, they go stale" rule — the ticket's `context` field **must be concrete and self-sufficient**: name the files to touch, the existing patterns to copy, the type/schema shapes, the gotchas, the commands to run and verify with. A ticket that assumes the agent can ask "where does X live?" is a broken ticket. Over-specify context; under-specify nothing.
15
15
 
16
- ## The second thing: a ticket costs ~10 minutes before it does any work
16
+ ## The second thing: a ticket costs ~10 minutes before it does any work — and pays it twice if it overruns
17
17
 
18
18
  That fresh agent is fresh *every time*. Each ticket gets its own container: cold build, a full dependency install (measured 70–507s, ~2.5 min average), then an agent that re-reads the spec, the docs digest, and every file your `context` names — reading the repo was 16% of all agent time across 42 measured attempts. **This overhead is paid per ticket and is the same whether the ticket is twenty lines or a day's work.** Splitting one coherent piece of work into three tickets triples it, and adds two seams where a new agent has to reconstruct what the previous one had just finished learning.
19
19
 
20
- So size for the **largest slice that still lands green**, not the smallest. Fine-grained slicing still matters — it just belongs *inside* a ticket, as the `acceptanceCriteria` list. The burner works red→green one criterion at a time and commits each green slice, so one ticket with eight criteria produces eight small commits and orients once; eight one-criterion tickets produce the same commits and orient eight times.
20
+ But that meter runs both ways. A ticket too big to finish in one pass gets no cheap second wind: an iteration is not a retry (ADR-0008) — the container is rebuilt, the install runs again, and a brand-new agent re-reads everything from the last commit, having lost every conclusion its predecessor reached. An overstuffed ticket pays the exact overhead it was merged to avoid, on top of the orientation it already paid once, and it pays it *after* the work is half-done rather than before.
21
21
 
22
- Expect a **handful of substantial tickets** for a feature — roughly 3–6, each filling a session. A dozen thin ones means you sliced by layer or by file, not by behaviour.
22
+ So size a ticket to **earn its container and still land in one pass**: substantial, with room left at the end for the tests, the self-review and the commits — not the smallest slice you can name, and not the largest you can imagine fitting. Fine-grained slicing still matters — it just belongs *inside* a ticket, as the `acceptanceCriteria` list. The burner works red→green one criterion at a time and commits each green slice, so one ticket with six criteria produces six small commits and orients once; six one-criterion tickets produce the same commits and orient six times.
23
+
24
+ Expect a **handful of substantial tickets** for a feature — roughly 4–8, each worth a session. A dozen thin ones means you sliced by layer or by file, not by behaviour. Two or three giant ones means you will pay back the containers you saved, with interest, when they overrun.
23
25
 
24
26
  ## 1. Draft vertical slices
25
27
 
26
28
  <vertical-slice-rules>
27
29
  - Each slice cuts a narrow but COMPLETE path through every layer it needs (schema, API, UI, tests) — vertical, NOT a horizontal slice of one layer.
28
30
  - A completed slice is demoable or verifiable on its own.
29
- - Each slice **fills** one fresh ~100k-token agent session working alone, without overflowing it.
30
- - **Merge by default.** Two drafts are one ticket if they touch the same files, share a type or module, or the second one's first act would be re-reading what the first just wrote. Same for the obvious siblings of one behaviour: create/edit/delete of a resource, an endpoint and the UI that calls it, code and the tests that cover it.
31
- - **Split only for a real reason:** (a) a genuine gate — the later work cannot be written until the earlier work's interface exists; (b) the combined work genuinely will not fit one session; (c) a prefactor, which is its own slice done first ("make the change easy, then make the easy change"); (d) the wide-refactor sequence below.
31
+ - Each slice is worth one fresh ~100k-token agent session working alone and **lands inside it** — the orientation at the front and the tests, self-review and commits at the back are fixed tax, so leave them room instead of filling the window to the brim.
32
+ - **Merge when a merge test holds.** Two drafts are one ticket if they touch the same files, share a type or module, or the second one's first act would be re-reading what the first just wrote. Same for the obvious siblings of one behaviour: create/edit/delete of a resource, an endpoint and the UI that calls it, code and the tests that cover it. Two drafts that share none of that are not one ticket merely because both would fit.
33
+ - **Split only for a real reason:** (a) a genuine gate — the later work cannot be written until the earlier work's interface exists; (b) the combined work would not land in one session; (c) a prefactor, which is its own slice done first ("make the change easy, then make the easy change"); (d) parallel width, under the rule below; (e) the wide-refactor sequence below.
32
34
  - **Not reasons to split:** one ticket per file, layer, endpoint or component; keeping each ticket easy; keeping diffs small; separating tests from the code they test.
33
- - Tickets with no blocking edge between them can burn in parallel — but a whole container of overhead is a steep price for width. Let parallelism justify a split only when both halves are already large.
35
+ - **Parallelism pays when the halves are file-disjoint.** Tickets with no blocking edge burn concurrently, each on its own temp branch, landing one at a time (ADR-0002) — so two substantial slices touching *different* files buy real wall-clock for one container. Two touching the *same* files race to land, and the loser fails on a merge conflict: that width costs a re-burn, which is worse than the container it bought. Overlapping files → merge.
34
36
  </vertical-slice-rules>
35
37
 
36
38
  Give each ticket its **blocking edges** — the tickets that must finish before it can start. No blockers → it can start immediately.
@@ -47,7 +49,7 @@ Each ticket:
47
49
  - **title** — short, descriptive, in the domain vocabulary.
48
50
  - **goal** — the end-to-end behaviour this ticket makes work, from the user's/caller's perspective. Not a layer list.
49
51
  - **context** — everything the sandboxed agent needs and cannot ask for: file paths to touch, existing patterns/modules to follow, type/schema shapes, gotchas, how to run and verify. Be concrete (see above).
50
- - **acceptanceCriteria** — `string[]`, each independently *verifiable* (a behaviour you can observe, a command that passes). These are what the burner works red-green against, one at a time, committing each green one — so this is where the fine granularity lives. A substantial ticket having six or ten criteria is right, not a smell.
52
+ - **acceptanceCriteria** — `string[]`, each independently *verifiable* (a behaviour you can observe, a command that passes). These are what the burner works red-green against, one at a time, committing each green one — so this is where the fine granularity lives. A substantial ticket having four to eight criteria is right, not a smell; a list running well past that is a ticket that will not land in one pass.
51
53
  - **seams** — `string[]`, the public interfaces to test at (carry them from the spec's Seams section; prefer existing, prefer the highest, prefer one).
52
54
  - **blockedBy** — `number[]`, the seq numbers (from your 1..N ordering) of the tickets that *genuinely* gate this one. Only true gates.
53
55
 
@@ -55,10 +57,11 @@ Each ticket:
55
57
 
56
58
  There is no in-session quiz — the human's review is the **Burn** gate in the runcastle UI, reading these cards. So make them right before you emit. Check yourself, in this order:
57
59
 
58
- 1. **Can any two of these be one ticket?** Go pair by pair. Same files, shared type, sibling behaviours, or one whose blocker is the only thing it waits on and together they'd still fit a session → merge them. This is the check that matters most; do it before the others, because merging changes the rest.
59
- 2. Is each survivor a demoable vertical slice rather than a horizontal layer, and does it fill a session rather than rattle around in one?
60
- 3. Are the blocking edges minimal and genuinely true gates?
61
- 4. Is every `context` self-sufficient for an agent that cannot ask — now covering the whole of a bigger ticket, every file and pattern it touches?
60
+ 1. **Can any two of these be one ticket?** Go pair by pair. Same files, shared type, sibling behaviours, or one whose blocker is the only thing it waits on and together they'd still land in one session → merge them. Do this first, because merging changes the rest.
61
+ 2. **Would any one of these overrun?** A criteria list longer than one agent can take red→green — with tests, self-review and commits still to come — costs a whole second container to finish. Split it where its files stop overlapping.
62
+ 3. Is each survivor a demoable vertical slice rather than a horizontal layer, and is it worth a session rather than rattling around in one?
63
+ 4. Are the blocking edges minimal and genuinely true gates? Where two are independent, do they touch different files — or will they collide on landing?
64
+ 5. Is every `context` self-sufficient for an agent that cannot ask — covering every file and pattern the ticket touches?
62
65
 
63
66
  Then:
64
67
  - `mcp__runcastle__emit_tickets({ tickets: [...] })` — **emit the array; do NOT write ticket files.** It returns `{ stored, ids }`.
@@ -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);flex:none}.tb-project{color:var(--text-2);text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.tb-branch{white-space:nowrap;color:var(--text-3);font-family:var(--mono);border-radius:var(--radius-pill);background:var(--panel-inset);border:1px solid var(--hairline-soft);flex:none;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-direction:column;flex:1;gap:3px;min-width:0;padding:6px 4px 7px 9px;display:flex}.feature-line{align-items:center;gap:8px;min-width:0;display:flex}.feature-line.is-meta{gap:7px}.feature-row:before{content:"";background:var(--accent);transform-origin:50%;width:2px;transition:transform var(--dur-2) var(--ease-out);border-radius:2px;position:absolute;top:6px;bottom:6px;left:1px;transform:scaleY(0)}.feature-row:hover,.feature-row.is-active{background:var(--panel-3)}.feature-row.is-active:before{transform:scaleY(1)}.feature-row.is-active .feature-title{color:var(--text)}.feature-row.is-dim{opacity:.55}.feature-row.is-dim:hover{opacity:.85}.project-pin{border-bottom:1px solid var(--hairline-soft);flex:none;padding:6px}.project-row{border-radius:var(--radius-sm);background:var(--panel-3);cursor:pointer;text-align:left;width:100%;min-height:32px;transition:background var(--dur-1) var(--ease), border-color var(--dur-1) var(--ease);border:1px solid #0000;align-items:center;gap:8px;padding:0 9px;display:flex}.project-row:hover{border-color:var(--hairline-strong)}.project-row.is-active{border-color:var(--accent-line);background:var(--accent-soft)}.project-row-mark{opacity:.85;align-items:center;display:flex}.project-row.is-active .project-row-mark{opacity:1}.project-row-name{min-width:0;color:var(--text-2);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:12.5px;overflow:hidden}.project-row.is-active .project-row-name{color:var(--text)}.project-row-kick{letter-spacing:.09em;text-transform:uppercase;color:var(--text-4);font-size:9.5px;font-weight:700}.project-row-live{color:var(--accent-hi);align-items:center;gap:5px;font-size:10.5px;display:inline-flex}.project-row-live .spin-ring{border-color:var(--accent);border-top-color:#0000;width:10px;height:10px}.row-actions{flex:none;padding-right:4px;position:relative}.row-actions-btn{color:var(--text-3);cursor:pointer;border-radius:var(--radius-sm);transition:background var(--dur-1) var(--ease), color var(--dur-1) var(--ease);background:0 0;border:none;padding:2px 5px;font-size:15px;line-height:1}.row-actions-btn:hover{background:var(--panel-3);color:var(--text)}.row-actions-menu{z-index:20;background:var(--panel-2);border:1px solid var(--border);border-radius:var(--radius-sm);flex-direction:column;min-width:128px;padding:4px;display:flex;position:absolute;top:calc(100% - 2px);right:4px;box-shadow:0 6px 20px -8px #0009}.row-actions-item{text-align:left;border-radius:var(--radius-sm);cursor:pointer;color:var(--text-2);transition:background var(--dur-1) var(--ease), color var(--dur-1) var(--ease);background:0 0;border:none;padding:5px 8px;font-size:12.5px}.row-actions-item:hover{background:var(--panel-3);color:var(--text)}.row-actions-item.is-danger{color:var(--danger)}.show-archived-toggle,.lane-expander{width:100%;color:var(--text-3);cursor:pointer;text-align:left;border-radius:var(--radius-sm);transition:background var(--dur-1) var(--ease), color var(--dur-1) var(--ease);background:0 0;border:none;margin-top:8px;padding:6px 9px;font-size:11.5px}.show-archived-toggle:hover,.lane-expander:hover{background:var(--panel-3);color:var(--text-2)}.feature-dot{opacity:.9;border-radius:3px;flex:none;width:8px;height:8px}.phase-bg-ideation{background:var(--ph-ideation)}.phase-bg-spec{background:var(--ph-spec)}.phase-bg-tickets{background:var(--ph-tickets)}.phase-bg-implementation{background:var(--ph-implementation)}.phase-bg-review{background:var(--ph-review)}.phase-bg-shipped{background:var(--ph-shipped)}.feature-title{min-width:0;color:var(--text-2);text-overflow:ellipsis;white-space:nowrap;transition:color var(--dur-1);flex:1;font-size:12.5px;font-weight:550;overflow:hidden}.feature-slug{min-width:0;font-family:var(--mono);color:var(--text-3);text-overflow:ellipsis;white-space:nowrap;flex:0 auto;font-size:10.5px;overflow:hidden}.feature-progress{color:var(--text-3);flex:none;font-size:10.5px}.feature-chip{color:var(--text-3);flex:none;align-items:center;gap:4px;font-size:10.5px;display:flex}.feature-chip.is-needsMe{color:var(--needs)}.feature-chip.is-working{color:var(--ph-implementation)}.feature-chip.is-shipped{color:var(--ph-shipped)}.feature-chip .spin-ring{border-width:1.4px;width:9px;height:9px}.feature-line.is-meta .mini-map{margin-left:auto}.needs-dot{background:var(--needs);border-radius:50%;width:7px;height:7px}.needs-attention{background:var(--danger)}.needs-grill,.needs-burn,.needs-ship{background:var(--needs)}.mini-map{align-items:center;gap:2px;display:flex}.mini-seg{background:var(--text-4);width:6px;height:6px;transition:background var(--dur-2);border-radius:2px}.mini-seg.is-done{background:var(--text-3)}.mini-seg.is-current{background:var(--accent);box-shadow:0 0 0 2px #7c6cf638}.mini-seg.is-skipped{border:1px solid var(--text-4);background:0 0}.sidebar-foot{border-top:1px solid var(--hairline-soft);color:var(--text-4);padding:10px 12px;font-size:11px;line-height:1.5}.nf-form{border:1px solid var(--hairline);border-radius:var(--radius);background:var(--panel);animation:fadeUp var(--dur-2) var(--ease-out);flex-direction:column;gap:8px;margin:6px;padding:10px;display:flex}.workspace{background:var(--bg);flex-direction:column;min-width:0;min-height:0;display:flex;position:relative}.ws-empty{flex-direction:column;height:100%;display:flex;overflow-y:auto}.ws-empty-inner{min-height:100%;color:var(--text-3);flex-direction:column;justify-content:center;align-items:center;gap:12px;display:flex}.ws-empty-logo{opacity:.85;justify-content:center;align-items:center;display:flex}.ws-empty-title{color:var(--text-2);font-size:14px;font-weight:500}.ws-empty-sub{color:var(--text-3);text-align:center;max-width:40ch;font-size:12.5px}.ws-empty-actions{gap:10px;display:flex}.ws-empty-hint{color:var(--text-4);text-align:center;max-width:44ch;font-size:12px;line-height:1.5}.talk-door{color:var(--text-3);cursor:pointer;border-radius:var(--radius-sm);transition:color var(--dur-1) var(--ease);background:0 0;border:none;padding:2px 4px;font-size:12px}.talk-door:hover:not(:disabled){color:var(--accent-hi)}.talk-door:disabled{opacity:.5;cursor:default}.nf-actions-spacer{flex:1}.pw-tag{border-radius:var(--radius-pill);border:1px solid var(--accent-line);background:var(--accent-soft);height:18px;color:var(--accent-hi);letter-spacing:.09em;align-items:center;padding:0 8px;font-size:9.5px;font-weight:700;display:inline-flex}.ws-branch.is-static{cursor:default}.pw-consequence{color:var(--text-3);margin-top:8px;font-size:12px;line-height:1.5}.pw-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,.nextstep-warn{font-family:var(--mono);color:color-mix(in srgb, var(--needs) 82%, var(--text));align-items:baseline;gap:8px;margin-top:4px;font-size:11.5px;line-height:1.6;display:flex}.nextstep-fog-icon,.nextstep-warn-icon{color:var(--needs);flex-shrink:0}.nextstep-override{align-items:center;gap:8px;display:flex}.nextstep-override .override-input{width:260px}.readonly-bar{border:1px dashed var(--hairline-strong);border-radius:var(--radius);background:var(--panel-2);color:var(--text-2);animation:fadeUp var(--dur-2) var(--ease-out);align-items:center;gap:10px;margin-top:12px;padding:8px 14px;font-size:12px;display:flex}.readonly-tag{font-family:var(--mono);letter-spacing:.06em;color:var(--text-3);border:1px solid var(--hairline);border-radius:4px;padding:1px 6px;font-size:10px}.readonly-back{color:var(--accent-hi);cursor:pointer;background:0 0;border:none;margin-left:auto;font-size:12px}.readonly-back:hover{color:var(--accent-2)}.ws-banner{border:1px solid color-mix(in srgb, var(--danger) 55%, var(--hairline));border-radius:var(--radius);background:color-mix(in srgb, var(--danger) 8%, var(--panel-2));color:var(--danger);cursor:pointer;animation:fadeUp var(--dur-2) var(--ease-out);align-items:center;gap:10px;margin-top:10px;padding:8px 14px;font-size:12.5px;display:flex}.ws-banner.is-offline{cursor:default;border-color:color-mix(in srgb, var(--warn,#d9a441) 45%, var(--hairline));background:color-mix(in srgb, var(--warn,#d9a441) 7%, var(--panel-2));color:var(--warn,#d9a441)}.ws-banner.is-offline .ws-banner-tag{border-color:color-mix(in srgb, var(--warn,#d9a441) 40%, var(--hairline))}.ws-banner.is-broken{cursor:default;align-items:flex-start;animation:none}.broken-detail{flex-wrap:wrap;align-items:center;gap:10px;padding:0 14px;display:flex}.ws-banner-tag{font-family:var(--mono);letter-spacing:.06em;border:1px solid color-mix(in srgb, var(--danger) 45%, var(--hairline));border-radius:4px;flex-shrink:0;padding:1px 6px;font-size:10px}.ws-body{flex:1;min-height:0;padding:18px 0 32px;overflow-y:auto}.ws-body-inner{animation:bodyIn var(--dur-3) var(--ease-out)}.ws-body:has(.grill){padding:0;display:flex;overflow:hidden}.ws-body:has(.grill)>.ws-body-inner{flex:1;min-width:0;max-width:none;min-height:0;padding:0;display:flex}.body-title{align-items:baseline;gap:10px;margin-bottom:12px;display:flex}.body-title .section-title{padding:0}.body-hint{color:var(--text-3);text-wrap:pretty;margin-bottom:12px;font-size:12px}.body-meta{font-family:var(--mono);color:var(--text-2);font-size:11.5px}.surface{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel-2);overflow:hidden}.grill{flex:1;min-width:0;max-width:none;min-height:0;display:flex}.maprail{flex:0 0 var(--maprail-w);width:var(--maprail-w);background:var(--panel-2);border-right:1px solid var(--hairline);flex-direction:column;min-width:0;min-height:0;display:flex}.maprail.is-collapsed{flex-basis:38px;width:38px}.mr-head{border-bottom:1px solid var(--hairline-soft);flex:0 0 32px;align-items:center;gap:8px;padding:0 6px 0 12px;display:flex}.maprail.is-collapsed .mr-head{padding:0 7px}.mr-head .section-title{flex:1;padding:0}.mr-toggle{border-radius:var(--radius-sm);width:22px;height:22px;color:var(--text-3);cursor:pointer;transition:background var(--dur-1), color var(--dur-1);background:0 0;border:0;flex:none;justify-content:center;align-items:center;font-size:13px;display:flex}.mr-toggle:hover{background:var(--panel-3);color:var(--text)}.mr-stub{cursor:pointer;background:0 0;border:0;flex-direction:column;flex:1;align-items:center;gap:8px;min-height:0;padding:10px 0;display:flex}.mr-stub-count{border:1px solid var(--accent-line);background:var(--accent-soft);width:22px;height:22px;color:var(--accent-hi);font-family:var(--mono);border-radius:50%;flex:none;justify-content:center;align-items:center;font-size:11px;display:flex}.mr-stub-label{writing-mode:vertical-rl;letter-spacing:.12em;text-transform:uppercase;color:var(--text-4);font-size:9.5px}.mr-scroll{flex:1;min-height:0;padding:12px 12px 20px;overflow-y:auto}.termpane{flex-direction:column;flex:1;gap:10px;min-width:0;min-height:0;padding:14px 20px 18px;display:flex;overflow-y:auto}.termpane .grill-panel:has(.grill-term){flex:1;min-height:0}.termpane .grill-term{flex:1;min-height:0}.grill-panel{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel-2);flex-direction:column;display:flex;overflow:hidden}.grill-strip{background:var(--panel);border-bottom:1px solid var(--hairline-soft);flex:0 0 34px;align-items:center;gap:10px;height:34px;padding:0 12px;display:flex}.grill-kind{border-radius:var(--radius-pill);border:1px solid var(--accent-line);background:var(--accent-soft);height:18px;color:var(--accent-hi);font-family:var(--mono);align-items:center;padding:0 8px;font-size:10.5px;display:inline-flex}.grill-sid{font-family:var(--mono);color:var(--text-3);font-size:11px}.grill-strip-spacer{flex:1}.sess-end{color:color-mix(in srgb, var(--danger) 70%, var(--text-2))}.sess-end:hover:not(:disabled){color:var(--danger);border-color:color-mix(in srgb, var(--danger) 55%, var(--hairline))}.grill-term{background:var(--panel-inset);position:relative}.tickets-session{margin-bottom:18px}.tickets-session .grill-term,.review-session .grill-term{height:clamp(300px,100dvh - 420px,1200px)}.grill-empty{text-align:center;color:var(--text-3);flex-direction:column;align-items:center;gap:10px;padding:40px 24px;display:flex}.grill-live-label{color:var(--text-3);font-size:11.5px}.session-briefing-warn{color:var(--warn,#d9a441);background:color-mix(in srgb, var(--warn,#d9a441) 9%, var(--panel-2));border-bottom:1px solid color-mix(in srgb, var(--warn,#d9a441) 35%, var(--hairline));align-items:center;gap:12px;padding:8px 12px;font-size:12px;display:flex}.session-briefing-text{flex:1}.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-dot.is-ok{background:var(--ok)}.check-dot.is-warn{background:var(--warn,#d9a441)}.check-dot.is-danger{background:var(--danger)}.check-dot.is-idle{background:var(--text-3)}.check-k{font-family:var(--mono);color:var(--text);flex:none;width:92px;font-size:12px}.check-v{font-family:var(--mono);color:var(--text-3);font-size:11.5px}.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}.conflict-head{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.conflict-when{font-family:var(--mono);color:var(--text-3);font-size:11px}.drive-label.is-quiet{color:var(--text-2)}.review-body{flex-direction:column;gap:14px;display:flex}.drive-pane{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel-2);max-width:1000px;overflow:hidden}.drive-pane-strip{background:var(--panel);border-bottom:1px solid var(--hairline-soft);align-items:center;gap:10px;height:38px;padding:0 12px;display:flex}.drive-pane-kind{border-radius:var(--radius-pill);border:1px solid var(--drive-line,var(--accent-line));background:var(--accent-soft);height:18px;color:var(--drive);font-family:var(--mono);align-items:center;padding:0 8px;font-size:10.5px;display:inline-flex}.drive-pane-loc{font-family:var(--mono);color:var(--text-3);font-size:11.5px}.drive-pane-spacer{flex:1}.drive-open{font-family:var(--mono);color:var(--drive);border:1px solid color-mix(in srgb, var(--drive) 40%, var(--hairline));border-radius:var(--radius-pill);background:var(--accent-soft);padding:4px 10px;font-size:11.5px;font-weight:600;text-decoration:none}.drive-open:hover{border-color:var(--drive)}.drive-pane-term{background:var(--bg);height:420px;min-height:260px;position:relative}.shipped-hero{text-align:center;max-width:560px;animation:fadeUp var(--dur-3) var(--ease-out);margin:36px auto 0}.shipped-check{border:1px solid color-mix(in srgb, var(--ok) 45%, transparent);width:40px;height:40px;color:var(--ok);animation:popIn var(--dur-3) var(--ease-out);border-radius:50%;justify-content:center;align-items:center;margin:0 auto;font-size:17px;display:flex}.shipped-title{margin-top:14px;font-size:16px;font-weight:600}.shipped-meta{font-family:var(--mono);color:var(--text-2);align-items:center;gap:5px;margin-top:6px;font-size:12px;display:inline-flex}.shipped-sub{color:var(--text-3);margin-top:10px;font-size:12.5px;line-height:1.55}.shipped-body{flex-direction:column;gap:18px;display:flex}.shipped-session .grill-term{height:clamp(300px,100dvh - 420px,1200px)}.nf-overlay{flex:1;justify-content:center;align-items:center;padding:24px;display:flex}.nf-card{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel);width:540px;max-width:100%;animation:popIn var(--dur-3) var(--ease-out);padding:26px 28px}.nf-kick{letter-spacing:.09em;color:var(--accent-hi);font-size:11px;font-weight:700}.nf-h{margin-top:6px;font-size:16px;font-weight:600}.nf-sub{color:var(--text-2);margin-top:5px;font-size:12.5px;line-height:1.55}.nf-input{background:var(--panel-inset);border:1px solid var(--hairline);border-radius:var(--radius);width:100%;height:36px;color:var(--text);transition:border-color var(--dur-1);outline:none;margin-top:18px;padding:0 12px;font-family:inherit;font-size:13px}.nf-input:focus{border-color:var(--accent)}.nf-oneliner{height:32px;margin-top:8px;font-size:12.5px}.nf-textarea{resize:vertical;height:132px;margin-top:8px;padding:10px 12px;font-size:12.5px;line-height:1.55}.size-hint{color:var(--text-3);font-size:12px}.nf-base{flex-wrap:wrap;align-items:center;gap:10px;margin-top:16px;display:flex}.nf-base-label{color:var(--text);font-size:13px}.nf-base-select{background:var(--panel-inset);border:1px solid var(--hairline);border-radius:var(--radius);height:30px;color:var(--text);font-family:var(--mono);cursor:pointer;transition:border-color var(--dur-1);outline:none;padding:0 8px;font-size:11.5px}.nf-base-select:focus{border-color:var(--accent)}.nf-base-select:disabled{opacity:.5;cursor:default}.nf-branch{font-family:var(--mono);color:var(--text-3);margin-top:16px;font-size:11.5px}.nf-actions{justify-content:flex-end;gap:10px;margin-top:22px;display:flex}.nf-discard{border:1px solid color-mix(in srgb, var(--warn,#d9a441) 45%, var(--hairline));border-radius:var(--radius);background:color-mix(in srgb, var(--warn,#d9a441) 7%, var(--panel-2));align-items:center;gap:8px;margin-top:16px;padding:10px 12px;display:flex}.nf-discard-text{color:var(--text);font-size:12.5px}.nf-discard-spacer{flex:1}.nf-dupe{color:var(--warn,#d9a441);margin-top:8px;font-size:12px;line-height:1.5}.nf-advanced{margin-top:16px}.nf-advanced-summary{color:var(--text-2);cursor:pointer;-webkit-user-select:none;user-select:none;width:fit-content;font-size:12.5px}.nf-advanced-summary:hover{color:var(--text)}.nf-advanced[open] .nf-advanced-summary{color:var(--text);margin-bottom:4px}.nf-advanced .nf-base{margin-top:10px}.inspector{border-left:1px solid var(--hairline);background:var(--panel-2);flex-direction:column;min-height:0;display:flex;overflow:hidden}.insp-tabs{border-bottom:1px solid var(--hairline-soft);flex:none;align-items:center;gap:2px;padding:8px 10px 0;display:flex}.insp-tab{color:var(--text-3);cursor:pointer;transition:color var(--dur-1);background:0 0;border:none;border-bottom:2px solid #0000;padding:6px 10px 8px;font-size:12px;font-weight:500}.insp-tab:hover{color:var(--text-2)}.insp-tab.is-active{color:var(--text);border-bottom-color:var(--accent)}.insp-pane{min-height:0;animation:fadeUp var(--dur-2) var(--ease-out);flex-direction:column;flex:1;gap:22px;padding:16px;display:flex;overflow-y:auto}.insp-pane-activity{gap:0;padding:10px 12px}.insp-empty{color:var(--text-3);text-wrap:pretty;font-size:12px;line-height:1.55}.insp-section>.insp-cap{letter-spacing:.09em;text-transform:uppercase;color:var(--text-3);margin-bottom:8px;font-size:10.5px;font-weight:600}.insp-hint{color:var(--text-3);text-wrap:pretty;margin-bottom:8px;font-size:11.5px;line-height:1.5}.gate-shipped{color:var(--ok);align-items:center;gap:8px;font-size:12.5px;display:flex}.gate-card{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel);padding:12px 14px}.gate-override-link{color:var(--text-3);cursor:pointer;transition:color var(--dur-1);background:0 0;border:none;margin-top:10px;padding:0;font-size:11.5px}.gate-override-link:hover{color:var(--accent-hi)}.override-actions{gap:6px;display:flex}.gate-idrow{align-items:center;gap:8px;display:flex}.gate-id{font-family:var(--mono);color:var(--accent-hi);font-size:11px}.gate-name{color:var(--text);font-size:12.5px;font-weight:600}.gate-req{color:var(--text-2);text-wrap:pretty;margin-top:6px;font-size:11.5px;line-height:1.5}.gate-state{align-items:center;gap:8px;margin-top:11px;font-size:12px;display:flex}.gate-state.is-ok{color:var(--ok)}.gate-state.is-block{color:var(--needs)}.gate-state-dot{background:currentColor;border-radius:50%;flex:none;width:7px;height:7px}.gate-hint{color:var(--text-4);margin-top:10px;font-size:11px;line-height:1.5}.gate-empty{border:1px dashed var(--hairline-strong);border-radius:var(--radius);color:var(--text-3);padding:12px 14px;font-size:11.5px}.override-form{flex-direction:column;gap:6px;margin-top:11px;display:flex}.override-input{background:var(--panel-inset);border:1px solid var(--hairline);border-radius:var(--radius-sm);height:26px;color:var(--text);outline:none;padding:0 8px;font-size:12px}.override-input:focus{border-color:var(--accent)}.override-consequence{color:var(--needs);text-wrap:pretty;font-size:11.5px;line-height:1.5}.gate-undo{border:1px dashed var(--hairline-strong);border-radius:var(--radius);color:var(--text-3);text-wrap:pretty;flex-direction:column;align-items:flex-start;gap:7px;margin-top:10px;padding:10px 12px;font-size:11.5px;line-height:1.5;display:flex}.doc-list{margin:0;padding:0;list-style:none}.doc-link{cursor:pointer;text-align:left;border-radius:var(--radius-sm);width:100%;transition:background var(--dur-1);background:0 0;border:none;align-items:center;gap:8px;margin:0 -8px;padding:7px 8px;display:flex}.doc-link:hover{background:var(--panel-3)}.doc-link-icon{color:var(--text-4);flex:none;display:inline-flex}.doc-title{color:var(--text);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:12.5px;overflow:hidden}.doc-meta{color:var(--text-4);flex:none;font-size:11px}.activity-log{flex-direction:column;display:flex}.act-line{border-top:1px solid var(--hairline-soft);gap:10px;padding:8px 4px;display:flex}.act-line:first-child{border-top:none}.act-dot{background:var(--text-4);border-radius:50%;flex:none;width:7px;height:7px;margin-top:5px}.act-dot.is-ok{background:var(--ok)}.act-dot.is-danger{background:var(--danger)}.act-dot.is-accent{background:var(--accent)}.act-body{flex:1;min-width:0}.act-msg{color:var(--text-2);-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:12px;line-height:1.45;display:-webkit-box;overflow:hidden}.act-msg-toggle{text-align:left;width:100%;font:inherit;color:inherit;cursor:pointer;background:0 0;border:none;margin:0;padding:0}.act-msg-toggle:hover{color:var(--text)}.act-more{color:var(--text-4);margin-left:6px}.act-detail{background:var(--panel-inset);border:1px solid var(--hairline);border-radius:var(--radius);max-height:260px;color:var(--text-2);white-space:pre-wrap;word-break:break-word;margin:6px 0 0;padding:7px 9px;font-size:11px;line-height:1.5;overflow:auto}.act-sub{align-items:baseline;gap:8px;margin-top:2px;display:flex}.act-type{color:var(--text-4);text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;overflow:hidden}.act-time{color:var(--text-4);flex:none;margin-left:auto;font-size:10.5px}.statusbar{border-top:1px solid var(--hairline);background:var(--panel);color:var(--text-3);align-items:center;gap:16px;padding:0 12px;font-size:11px;display:flex}.sb-item{align-items:center;gap:5px;display:inline-flex}.sb-branch{color:var(--text-3);cursor:pointer;font-family:var(--mono);transition:color var(--dur-1);background:0 0;border:none;align-items:center;gap:5px;padding:0;font-size:11px;display:inline-flex}.sb-branch:hover{color:var(--text)}.sb-driving{color:var(--drive);align-items:center;gap:7px;display:flex}.sb-driving-dot{background:var(--drive);border-radius:50%;width:6px;height:6px;animation:1.4s ease-in-out infinite pulse}.sb-stop{border:1px solid color-mix(in srgb, var(--drive) 40%, transparent);height:16px;color:var(--drive);cursor:pointer;background:0 0;border-radius:4px;padding:0 6px;font-size:10px}.sb-stop:hover:not(:disabled){background:#58a6ff1f}.sb-spacer{flex:1}.sb-notify{color:var(--text-3);cursor:pointer;transition:color var(--dur-1);background:0 0;border:none;align-items:center;gap:5px;padding:0;font-size:11px;display:inline-flex}.sb-notify:hover{color:var(--text)}.sb-notify.is-on{color:var(--ok)}.sb-notify.is-blocked{color:var(--warn,#d9a441)}.sb-health{color:var(--ph-shipped);align-items:center;gap:6px;display:inline-flex}.cmdk-backdrop{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:300;animation:backdropIn var(--dur-2) var(--ease-out);background:#04060a8c;justify-content:center;align-items:flex-start;padding:12vh 16px 16px;display:flex;position:fixed;inset:0}.cmdk{background:var(--panel);border:1px solid var(--hairline-strong);border-radius:var(--radius-lg);width:100%;max-width:560px;animation:cmdkIn var(--dur-2) var(--ease-out);overflow:hidden;box-shadow:0 24px 60px -20px #000c}.cmdk-input{border:none;border-bottom:1px solid var(--hairline);width:100%;height:46px;color:var(--text);background:0 0;outline:none;padding:0 16px;font-family:inherit;font-size:14px}.cmdk-input::placeholder{color:var(--text-3)}.cmdk-list{max-height:340px;padding:6px;overflow-y:auto}.cmdk-group-label{letter-spacing:.09em;text-transform:uppercase;color:var(--text-4);padding:8px 10px 4px;font-size:10px;font-weight:700}.cmdk-item{border-radius:var(--radius-sm);cursor:pointer;color:var(--text-2);align-items:center;gap:10px;padding:8px 10px;display:flex}.cmdk-item.is-active{background:var(--panel-3);color:var(--text)}.cmdk-item-glyph{width:16px;color:var(--text-3);flex:none;justify-content:center;align-items:center;display:inline-flex}.cmdk-item-label{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:13px;overflow:hidden}.cmdk-item-slug{font-family:var(--mono);color:var(--text-4);font-size:11px}.cmdk-item-hint{color:var(--text-4);font-size:11px}.cmdk-item-current{letter-spacing:.06em;text-transform:uppercase;color:var(--accent-hi);font-size:10px}.cmdk-empty{text-align:center;color:var(--text-3);padding:24px;font-size:13px}.cmdk-foot{border-top:1px solid var(--hairline);color:var(--text-4);align-items:center;gap:14px;padding:8px 14px;font-size:11px;display:flex}.cmdk-foot .kbd{font-size:10px}.md{font-family:var(--sans);color:var(--text-2);white-space:normal;font-size:11.5px;line-height:1.55}.md>:first-child{margin-top:0}.md>:last-child{margin-bottom:0}.md h1,.md h2,.md h3{color:var(--text);margin:12px 0 5px;font-weight:600;line-height:1.3}.md h1{letter-spacing:-.01em;font-size:14px}.md h2{font-size:12.5px}.md h3{color:var(--text-2);font-size:11.5px}.md p{margin:0 0 7px}.md ul,.md ol{margin:0 0 7px;padding-left:17px}.md li{margin-bottom:2.5px}.md li::marker{color:var(--text-4)}.md strong{color:var(--text);font-weight:600}.md em{color:var(--text-2)}.md a{color:var(--accent-hi);border-bottom:1px solid var(--accent-line);text-decoration:none}.md code{font-family:var(--mono);background:var(--panel-inset);border:1px solid var(--hairline-soft);color:var(--accent-hi);border-radius:3px;padding:.5px 4px;font-size:10.5px}.md pre{background:var(--panel-inset);border:1px solid var(--hairline-soft);border-radius:var(--radius-sm);margin:0 0 8px;padding:8px 10px;overflow-x:auto}.md pre code{color:var(--text-2);background:0 0;border:0;padding:0;font-size:10.5px}.md blockquote{border-left:2px solid var(--accent-line);color:var(--text-3);margin:0 0 8px;padding-left:10px}.md table{border-collapse:collapse;width:100%;margin:0 0 8px;font-size:11px}.md th,.md td{border:1px solid var(--hairline);text-align:left;padding:4px 7px}.md th{background:var(--panel);color:var(--text-2);font-weight:600}.md hr{border:0;border-top:1px solid var(--hairline);margin:10px 0}.md .contains-task-list{padding-left:2px;list-style:none}.md input[type=checkbox]{accent-color:var(--accent);vertical-align:-1px;margin-right:5px}.peek-backdrop{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:200;animation:backdropIn var(--dur-2) var(--ease-out);background:#030508b8;justify-content:center;align-items:flex-start;padding:8vh 16px 16px;display:flex;position:fixed;inset:0}.peek{background:var(--panel);border:1px solid var(--hairline-strong);border-radius:var(--radius-lg);width:100%;max-width:780px;max-height:82vh;animation:cmdkIn var(--dur-2) var(--ease-out);flex-direction:column;display:flex;overflow:hidden}.peek-head{border-bottom:1px solid var(--hairline);justify-content:space-between;align-items:center;padding:10px 14px;display:flex}.peek-path{color:var(--text-2);font-size:12px}.peek-close{color:var(--text-3);cursor:pointer;background:0 0;border:none;font-size:12px}.peek-close:hover{color:var(--text)}.peek-body{padding:14px 18px;overflow:auto}.peek-body .md{font-size:12.5px}.peek-pre{font-family:var(--mono);white-space:pre-wrap;word-break:break-word;color:var(--text);margin:0;font-size:12.5px;line-height:1.6}.peek.settings{max-width:620px}.settings-title{color:var(--text);font-size:13px;font-weight:600}.settings-body{flex-direction:column;gap:26px;display:flex}.settings-autosave{color:var(--text-3);border-left:2px solid var(--accent-line,var(--hairline));padding-left:10px;font-size:11.5px;line-height:1.55}.settings-section{flex-direction:column;gap:14px;display:flex}.settings-section-head{border-bottom:1px solid var(--hairline);align-items:baseline;gap:10px;padding-bottom:8px;display:flex}.settings-section-title{letter-spacing:.09em;text-transform:uppercase;color:var(--text-2);margin:0;font-size:11px;font-weight:700}.settings-section-hint{color:var(--text-4);font-size:11.5px}.settings-field{flex-direction:column;gap:5px;display:flex}.settings-field-head{align-items:center;gap:8px;display:flex}.settings-field-label{color:var(--text);font-size:12.5px}.settings-field.is-locked .settings-field-label{color:var(--text-2)}.settings-field-help{color:var(--text-4);font-size:11.5px;line-height:1.4}.settings-badge{letter-spacing:.04em;text-transform:uppercase;border:1px solid var(--hairline-strong);color:var(--text-3);border-radius:999px;padding:1px 6px;font-size:9.5px}.settings-badge.is-warn{color:var(--drive);border-color:color-mix(in srgb, var(--drive) 40%, transparent)}.settings-badge.is-override{color:var(--accent-hi);border-color:var(--accent-line)}.settings-badge.is-verified{color:var(--ok);border-color:color-mix(in srgb, var(--ok) 40%, transparent)}.settings-badge.is-unverified{color:var(--needs);border-color:color-mix(in srgb, var(--needs) 40%, transparent)}.settings-saving{color:var(--text-4);font-size:10.5px;font-style:italic}.settings-input{background:var(--panel-inset);border:1px solid var(--hairline);border-radius:var(--radius);width:100%;height:32px;color:var(--text);transition:border-color var(--dur-1);outline:none;padding:0 10px;font-family:inherit;font-size:12.5px}.settings-input:focus{border-color:var(--accent)}.settings-input:disabled{opacity:.6;cursor:progress}select.settings-input{cursor:pointer}.settings-textarea{resize:vertical;height:auto;min-height:32px;padding:7px 10px;line-height:1.5}.settings-readonly{background:var(--panel-inset);border:1px dashed var(--hairline);border-radius:var(--radius);min-height:32px;color:var(--text-2);align-items:center;padding:0 10px;font-size:12.5px;display:flex}.settings-field-note{color:var(--text-4);font-size:11px}.settings-field-evidence,.prep-finding-evidence{color:var(--text-3);background:var(--panel-inset);border-left:2px solid var(--accent-line);border-radius:0 var(--radius) var(--radius) 0;white-space:pre-wrap;overflow-wrap:anywhere;padding:5px 7px;font-size:11px;line-height:1.45}.prep-stack{flex-direction:column;gap:18px;display:flex}.prep-stack .pw-frame{margin-bottom:0}.prep-warn{color:var(--text-2);background:color-mix(in srgb, var(--drive) 10%, transparent);border:1px solid color-mix(in srgb, var(--drive) 35%, transparent);border-radius:var(--radius);padding:7px 9px;font-size:11.5px;line-height:1.5}.prep-dryrun{border-radius:var(--radius);background:color-mix(in srgb, var(--drive) 10%, transparent);border:1px solid color-mix(in srgb, var(--drive) 35%, transparent);align-items:center;gap:9px;padding:8px 11px;display:flex}.prep-dryrun-label{color:var(--drive);font-size:12.5px;font-weight:600}.prep-dryrun-url{color:var(--text-2);font-size:11.5px}.prep-dryrun-spacer{flex:1}.prep-cta{text-align:center;flex-direction:column;align-items:center;gap:12px;padding:40px 0 28px;display:flex}.prep-cta-logo{opacity:.85;display:flex}.prep-cta-title{color:var(--text-1);font-size:15px;font-weight:500}.prep-cta-sub{color:var(--text-3);max-width:52ch;font-size:12.5px;line-height:1.6}.prep-cta-open{flex-wrap:wrap;justify-content:center;gap:6px;max-width:56ch;margin:0;padding:0;list-style:none;display:flex}.prep-cta .prep-warn,.prep-cta .pw-frame{text-align:left;width:100%;max-width:62ch}.prep-cta-actions{align-items:center;gap:8px;display:flex}.prep-cta-open li{color:var(--text-3);border:1px solid var(--hairline);background:var(--panel-3);border-radius:999px;padding:3px 8px;font-size:11px}.prep-nudge{border:none;border-top:1px solid var(--hairline);width:100%;color:var(--text-3);text-align:left;cursor:pointer;transition:background var(--dur-1) var(--ease), color var(--dur-1) var(--ease);background:0 0;flex:none;align-items:center;gap:8px;padding:9px 12px;font-size:11.5px;display:flex}.prep-nudge:hover{background:var(--panel-3);color:var(--text-2)}.prep-nudge-dot{background:var(--drive);border-radius:50%;flex:none;width:7px;height:7px}.prep-nudge.is-done{color:var(--text-4)}.prep-nudge.is-done .prep-nudge-dot{box-shadow:inset 0 0 0 1px var(--text-4);background:0 0}.prep-nudge-text{flex:1;min-width:0}.prep-nudge-count{color:var(--text-4);white-space:nowrap;flex:none;font-size:10.5px}.prep-findings{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.prep-finding{flex-direction:column;gap:4px;display:flex}.prep-finding-head{align-items:baseline;gap:7px;display:flex}.prep-finding-key{color:var(--text-1);font-size:12px}.prep-finding-note{color:var(--text-4);font-size:11px}.prep-finding.is-stale .prep-finding-note{color:var(--drive)}.settings-clear{color:var(--text-3);cursor:pointer;text-underline-offset:2px;background:0 0;border:none;align-self:flex-start;margin-top:2px;padding:0;font-size:11px;text-decoration:underline}.settings-clear:hover:not(:disabled){color:var(--accent-hi)}.settings-clear:disabled{opacity:.5;cursor:default}.settings-combo{flex-direction:column;gap:6px;display:flex}.settings-advanced-toggle{cursor:pointer;text-align:left;width:100%;color:inherit;background:0 0;border:none;justify-content:space-between;align-items:baseline;gap:8px;padding:0;display:flex}.settings-advanced-toggle:hover .settings-section-title{color:var(--accent-hi)}.settings-advanced-body{border-left:1px solid var(--border-1,var(--text-5,#333));flex-direction:column;gap:14px;margin-top:4px;padding-left:10px;display:flex}.peek.delete-dialog,.peek.merge-dialog{max-width:460px}.delete-dialog-title{color:var(--danger);font-size:13px;font-weight:600}.merge-dialog-title{color:var(--text);font-size:13px;font-weight:600}.merge-dialog-warnings{border-radius:var(--radius-sm);border:1px solid color-mix(in srgb, var(--warn,#d9a441) 40%, var(--hairline));background:color-mix(in srgb, var(--warn,#d9a441) 7%, var(--panel-2));color:var(--warn,#d9a441);margin:0;padding:10px 12px 10px 26px;font-size:12px;line-height:1.6}.delete-dialog-body,.merge-dialog-body{flex-direction:column;gap:16px;display:flex}.delete-dialog-lead,.merge-dialog-lead{color:var(--text-2);margin:0;font-size:12.5px;line-height:1.6}.delete-dialog-lead strong,.merge-dialog-lead strong{color:var(--text);font-weight:600}.delete-dialog-field{flex-direction:column;gap:6px;display:flex}.delete-dialog-field>span{color:var(--text-2);font-size:12px}.delete-dialog-field code{border-radius:var(--radius);background:var(--panel-inset);color:var(--text);padding:1px 5px}.delete-dialog-field .settings-input:focus{border-color:var(--danger)}.delete-dialog-actions,.merge-dialog-actions{justify-content:flex-end;gap:8px;margin-top:2px;display:flex}.terminal-placeholder,.boundary-fallback{background:var(--bg);justify-content:center;align-items:center;height:100%;display:flex}.toasts{z-index:400;flex-direction:column;gap:8px;max-width:380px;display:flex;position:fixed;bottom:34px;right:16px}.toast{border-radius:var(--radius);cursor:pointer;border:1px solid var(--hairline);background:var(--panel);color:var(--text);word-break:break-word;animation:toastIn var(--dur-3) var(--ease-out);padding:9px 13px;font-size:12.5px;box-shadow:0 12px 30px -14px #000c}.toast-error{border-color:color-mix(in srgb, var(--danger) 55%, var(--hairline));color:var(--danger)}.toast-success{border-color:color-mix(in srgb, var(--ok) 50%, var(--hairline));color:var(--ok)}.toast-info{color:var(--text-2)}.app-frame{flex-direction:column;height:100%;display:flex}.app-frame-body{flex:1;min-height:0}.update-banner{border-bottom:1px solid var(--accent-line);background:color-mix(in srgb, var(--accent) 12%, var(--panel));color:var(--text);flex:none;align-items:center;gap:10px;padding:6px 14px;font-size:12.5px;display:flex;overflow:hidden}.update-banner-dot{background:var(--accent-hi);width:7px;height:7px;animation:dotGlow 2.2s var(--ease) infinite;border-radius:50%;flex:none}.update-banner-text{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.update-banner-text strong{color:var(--accent-hi);font-weight:600}.update-banner-sep{color:var(--text-4)}.update-banner-dim{color:var(--text-3)}.update-banner-cmd{font-family:var(--mono);color:var(--accent-hi);background:var(--panel-inset);border:1px solid var(--hairline);border-radius:var(--radius-sm);white-space:nowrap;-webkit-user-select:all;user-select:all;padding:2px 7px;font-size:11.5px}.update-banner-dismiss{width:22px;height:22px;color:var(--text-3);border-radius:var(--radius-sm);cursor:pointer;background:0 0;border:none;flex:none;place-items:center;margin-left:auto;font-size:16px;line-height:1;display:grid}.update-banner-dismiss:hover{color:var(--text);background:var(--panel-3)}.app-loading{justify-content:center;align-items:center;height:100%;display:flex}.tb-home{cursor:pointer;color:inherit;background:0 0;border:0;flex:none;align-items:center;gap:9px;padding:0;display:inline-flex}.tb-home:hover .tb-app{color:var(--accent-hi)}.tb-switcher{min-width:0;display:inline-flex;position:relative}.tb-switcher-btn{border-radius:var(--radius);cursor:pointer;min-width:0;height:24px;transition:border-color var(--dur-1), background var(--dur-1);background:0 0;border:1px solid #0000;align-items:center;gap:5px;padding:0 7px;display:inline-flex}.tb-switcher-btn:hover{border-color:var(--hairline);background:var(--panel-3)}.tb-switcher-caret{color:var(--text-4);align-items:center;display:inline-flex}.tb-menu{z-index:40;background:var(--panel);border:1px solid var(--hairline);border-radius:var(--radius-lg);min-width:240px;animation:cmdkIn var(--dur-2) var(--ease-out);padding:5px;position:absolute;top:30px;left:0;box-shadow:0 18px 44px -18px #000000d9}.tb-menu-label{letter-spacing:.08em;text-transform:uppercase;color:var(--text-4);padding:6px 8px 4px;font-size:10px}.tb-menu-item{border-radius:var(--radius);cursor:pointer;width:100%;color:var(--text-2);text-align:left;transition:background var(--dur-1), color var(--dur-1);background:0 0;border:0;align-items:center;gap:8px;padding:7px 8px;display:flex}.tb-menu-item:hover{background:var(--panel-3);color:var(--text)}.tb-menu-item.is-current{color:var(--text)}.tb-menu-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:13px;overflow:hidden}.tb-menu-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-error{border:1px solid color-mix(in srgb, var(--danger,#e5534b) 45%, var(--hairline));border-radius:var(--radius);background:color-mix(in srgb, var(--danger,#e5534b) 7%, var(--panel-2));padding:8px 10px}.op-error-msg{color:var(--danger,#e5534b);font-size:12px;font-family:var(--mono);word-break:break-word}.op-error-hint{color:var(--text-2);margin-top:5px;font-size:12px;line-height:1.5}.op-error-hint code{font-family:var(--mono)}.op-actions{justify-content:flex-end;gap:8px;margin-top:14px;display:flex}.peek.dir-picker{max-width:660px;height:66vh}.dir-picker-title{font-size:13px;font-weight:600}.dir-picker-bar{border-bottom:1px solid var(--hairline);align-items:center;gap:8px;padding:8px 12px;display:flex}.dir-up{min-width:28px;padding:0 8px}.dir-path-row{border-bottom:1px solid var(--hairline);align-items:center;gap:8px;padding:8px 12px;display:flex}.dir-path-label{color:var(--text-4);font-size:11px}.dir-path-input{background:var(--panel-inset);border:1px solid var(--hairline);border-radius:var(--radius);min-width:0;height:28px;color:var(--text);transition:border-color var(--dur-1);outline:none;flex:1;padding:0 8px;font-size:11.5px}.dir-path-input:focus{border-color:var(--accent)}.dir-crumbs{white-space:nowrap;scrollbar-width:none;flex:1;align-items:center;gap:2px;min-width:0;font-size:12px;display:flex;overflow-x:auto}.dir-crumbs::-webkit-scrollbar{display:none}.dir-crumb-wrap{color:var(--text-4);align-items:center;gap:2px;display:inline-flex}.dir-crumb{border-radius:var(--radius);color:var(--text-2);font:inherit;cursor:pointer;background:0 0;border:none;padding:2px 4px}.dir-crumb:hover{color:var(--text);background:var(--panel-inset)}.dir-hidden-toggle{color:var(--text-4);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:5px;font-size:11px;display:inline-flex}.dir-picker-body{flex:1;min-height:0;display:flex}.dir-rail{border-right:1px solid var(--hairline);flex-direction:column;flex:none;gap:1px;width:140px;padding:8px;display:flex;overflow-y:auto}.dir-rail-item{border-radius:var(--radius);color:var(--text-3);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:7px;padding:5px 7px;font-size:12px;display:flex}.dir-rail-item:hover{background:var(--panel-inset);color:var(--text)}.dir-rail-item.is-active{background:var(--accent-soft);color:var(--text)}.dir-rail-label{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.dir-list{flex:1;min-width:0;padding:8px;overflow-y:auto}.dir-item{border-radius:var(--radius);width:100%;color:var(--text-2);font:inherit;text-align:left;cursor:pointer;background:0 0;border:none;align-items:center;gap:8px;padding:6px 8px;font-size:12.5px;display:flex}.dir-item:hover{background:var(--panel-inset);color:var(--text)}.dir-item.is-repo{color:var(--text)}.dir-item-name{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.dir-item-tag{color:var(--text-4);font-size:10px}.dir-item-repo{letter-spacing:.04em;text-transform:uppercase;color:var(--accent-hi);flex:none;align-items:center;gap:3px;font-size:10px;display:inline-flex}.dir-picker-foot{border-top:1px solid var(--hairline);align-items:center;gap:12px;padding:10px 12px;display:flex}.dir-picked{min-width:0;color:var(--text-3);text-overflow:ellipsis;white-space:nowrap;text-align:left;direction:rtl;flex:1;font-size:11.5px;overflow:hidden}.dir-picked>bdi{unicode-bidi:isolate}.dir-picker-actions{flex:none;gap:8px;display:flex}.wizard-card{max-width:520px}.wizard-steps{color:var(--text-4);gap:16px;margin:0 0 6px;padding:0;font-size:11px;list-style:none;display:flex}.wizard-step{align-items:center;gap:6px;display:flex}.wizard-step.is-current{color:var(--accent-hi)}.wizard-step.is-done{color:var(--text-2)}.wizard-step.is-passed{color:var(--ok)}.wizard-passed{color:var(--text-3);align-items:center;gap:6px;margin-bottom:8px;font-size:11.5px;display:flex}.wizard-passed>svg{color:var(--ok);flex:none}.wizard-step-dot{background:var(--hairline);border-radius:50%;width:7px;height:7px}.wizard-step.is-current .wizard-step-dot{background:var(--accent)}.wizard-step.is-done .wizard-step-dot{background:var(--text-3)}.afk-card{flex-direction:column;gap:10px;display:flex}.afk-card-head{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.afk-card-title{font-size:16px;font-weight:600}.afk-card-sub{color:var(--text-3);margin:0;font-size:12.5px;line-height:1.5}.afk-rows{flex-direction:column;gap:8px;display:flex}.afk-row{border:1px solid var(--hairline);border-radius:var(--radius);background:var(--panel-2);flex-direction:column;gap:8px;padding:12px;display:flex}.afk-row.is-ok{opacity:.72}.afk-row-head{align-items:flex-start;gap:9px;display:flex}.afk-dot{border-radius:50%;flex:none;width:8px;height:8px;margin-top:4px}.afk-dot-ok{background:var(--ok,#3fb950)}.afk-dot-warn{background:var(--warn,#d9a441)}.afk-row-text{flex-direction:column;gap:2px;display:flex}.afk-row-label{font-size:13px;font-weight:500}.afk-row-detail{color:var(--text-4);font-size:11px}.afk-row-action{flex-direction:column;gap:8px;padding-left:17px;display:flex}.afk-cmd{background:var(--panel-inset);border:1px solid var(--hairline);border-radius:var(--radius);align-items:center;gap:8px;padding:8px 10px;display:flex}.afk-cmd-text{color:var(--accent-hi);word-break:break-all;flex:1;font-size:12px}.afk-note{color:var(--text-4);font-size:11px}.afk-term{border:1px solid var(--hairline);border-radius:var(--radius);height:280px;overflow:hidden}.afk-term-actions{justify-content:flex-end;gap:8px;display:flex}.afk-verdict{flex-direction:column;gap:4px;font-size:12px;display:flex}.afk-verdict.is-ok{color:var(--ok,#3fb950)}.afk-verdict.is-warn{color:var(--warn,#d9a441)}.afk-verdict-fix{color:var(--text-4)}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.32}}@keyframes dotGlow{0%,to{box-shadow:0 0 0 3px #7c6cf638}50%{box-shadow:0 0 0 5px #7c6cf614}}@keyframes fadeUp{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}@keyframes bodyIn{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@keyframes detailIn{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@keyframes lineIn{0%{opacity:0;transform:translate(-4px)}to{opacity:1;transform:translate(0)}}@keyframes popIn{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}@keyframes cmdkIn{0%{opacity:0;transform:translateY(-10px)scale(.985)}to{opacity:1;transform:translateY(0)scale(1)}}@keyframes backdropIn{0%{opacity:0}to{opacity:1}}@keyframes toastIn{0%{opacity:0;transform:translate(16px)scale(.98)}to{opacity:1;transform:translate(0)scale(1)}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.001ms!important;animation-duration:.001ms!important;animation-iteration-count:1!important}.btn-solid:hover:not(:disabled){box-shadow:none;transform:none}}