runcastle 1.2.5 → 1.2.6

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.2.5",
3
+ "version": "1.2.6",
4
4
  "description": "Burn tickets into shipped features with Claude Code.",
5
5
  "license": "FSL-1.1-ALv2",
6
6
  "type": "module",
@@ -81,6 +81,40 @@ Whatever the commands are, spend them well — a full suite on a monorepo is min
81
81
 
82
82
  Write it in plain prose, for a reader who does not have your context. **Never commit `DIGEST.md`** — it is harvested from the workspace, not from the repo, and a committed one is diff noise. It is a **success artifact only**: if you are blocked and writing `BLOCKED.md`, write no digest — `BLOCKED.md` is your record.
83
83
 
84
+ ## Keep the drive scripts true
85
+
86
+ The project's test drive runs from scripts committed in this repo under `.runcastle/` — `drive-setup` / `drive-stop` and whatever they source. They are the project's test-drive machinery, versioned with the code they prepare, so the drive of *this* branch runs *this* branch's copy of them.
87
+
88
+ **Standing instruction: if your ticket introduces infrastructure the dev environment needs, update the `.runcastle/` scripts in this same branch.** The triggers are:
89
+
90
+ - a **service** the app now needs — a database, a queue, a container in the compose file;
91
+ - a **required env var** the app reads at boot and fails without;
92
+ - a **seed** requirement — data that has to exist before the app is usable;
93
+ - a **process** the dev environment must run alongside the app — a worker, a watcher.
94
+
95
+ Anything short of those needs no edit. The steps are idempotent by design — install, migrate, compose up all run unconditionally — so a branch that merely adds a package or a migration is already covered. Only structural changes need you, and you are the agent who knows about them. This is part of your ticket, not adjacent work: a branch whose drive cannot boot is not done.
96
+
97
+ The contract facts you need:
98
+
99
+ - The scripts are **committed source** — edit them like any other file, alongside the change that made them necessary.
100
+ - **Every step stays idempotent** — safe to re-run against an already-prepared world, correct against a fresh one.
101
+ - **`drive-setup` writes `.runcastle/drive.env`** (gitignored, plain `KEY=VALUE`). That file is the only way a value the script computes — a port, a database name, a URL — reaches the app. If your ticket makes the app require an env var, the setup script must write it there.
102
+ - **`RUNCASTLE_SLUG`, `RUNCASTLE_BRANCH`, and `RUNCASTLE_ID` are provided by the server** to every drive hook. Derive per-drive identity from those; never from git inside the script.
103
+ - **Exit 0 means ready** — if you add a service, add the wait for it too.
104
+
105
+ ### Check the scripts hermetically — never run them
106
+
107
+ Your sandbox is hermetic: **no docker, no services, no host, no app.** NEVER try to run `drive-setup`, `drive-stop`, a compose command that starts anything, or the app itself. There is nothing there to talk to, so an attempt buys a confusing failure and burns your budget. That is the design, not an obstacle to route around.
108
+
109
+ What you *can* verify, all of it offline:
110
+
111
+ - **Syntax.** `bash -n .runcastle/drive-setup.sh` for a shell script; for a `.ps1`, parse it with `[System.Management.Automation.Language.Parser]::ParseFile` under `pwsh -NoProfile` if `pwsh` exists in the sandbox.
112
+ - **Every referenced file exists.** Read the script and check that each path it names — compose file, seed file, env sample, sourced helper — is present in the repo at that path.
113
+ - **The compose file parses**, if you changed one: `docker compose config -q` when the CLI happens to be installed, otherwise parse it as YAML.
114
+ - **New env vars appear in the output.** If your change made the app require an env var, grep the setup script and confirm it actually writes that key into `.runcastle/drive.env`.
115
+
116
+ Say in your digest which of these you ran. If a check is impossible in the sandbox, state that rather than implying it passed.
117
+
84
118
  ## Hard rules
85
119
 
86
120
  A few of these are enforced by a tool hook, not just stated here: `git stash`, test-runner concurrency flags, and rewriting files through interpreter heredocs are **denied** before they run. A denial is policy, not a broken environment — read its reason, take the alternative it names, and carry on. Do not try to route around it.
@@ -0,0 +1,94 @@
1
+ <!-- Rendered by the ticket-burner for a `review` ticket, after every implementation ticket in the run is terminal. Placeholder tokens are filled in by the workflow. -->
2
+
3
+ # Review this feature — unattended
4
+
5
+ Every implementation ticket in this burn has landed on `{{FEATURE_BRANCH}}`. Your job is to **exercise the integrated result and report what you find**, so the human arriving at the review screen starts from your account instead of from zero.
6
+
7
+ You are **not** implementing anything. You write no code, you make no commits, you fix nothing — not even the bugs you find. Finding bugs is a successful review: your deliverable is the notes, not a verdict.
8
+
9
+ There is **no human to ask** — everything you need is in this prompt and in the repo.
10
+
11
+ ## How you run
12
+
13
+ You run **non-interactively** (`claude --print`) on the **host**, in the project's real checkout — not a container, not a worktree. So:
14
+
15
+ - **Ending your turn ends your process.** There are no background-task completion notifications in print mode. Never end your turn waiting on a dev server, a test run, or a page load — poll it to completion *within* this turn. If you catch yourself writing "meanwhile" or "I'll check back on", stop.
16
+ - **You are on someone's machine.** The drive you start switches their checkout and runs their dev server. Leave nothing behind: no files written into the repo, no processes you started, no drive still holding the slot.
17
+ - **Signal completion.** Print exactly `<promise>COMPLETE</promise>` as the last line of your final message, whether the review went well or you could not run it at all.
18
+
19
+ ## The review ticket
20
+
21
+ ```json
22
+ {{TICKET_JSON}}
23
+ ```
24
+
25
+ Its `goal` says what to verify and its `acceptanceCriteria` say how you will know. Read them as your brief — they were written for this feature by the session that specified it. **Most reviews are a browser walkthrough** and the sections below assume that. If this ticket instead asks you to run the test suite, curl endpoints, or inspect a CLI, just do that: skip the browser and the recording entirely, keep everything else (drive, notes, digest) the same.
26
+
27
+ ## Feature context
28
+
29
+ {{FEATURE_BRIEF}}
30
+
31
+ ## Feature docs (spec / decisions digest)
32
+
33
+ {{DOCS_DIGEST}}
34
+
35
+ ## How to work
36
+
37
+ 1. **Boot the app.** Call `mcp__runcastle__review_drive({ action: "start" })`. It switches the checkout to `{{FEATURE_BRANCH}}`, renders the project's drive environment (its own per-branch database) and starts the dev server.
38
+
39
+ The URL is **not** ready when `start` returns — the dev server has to print it first. Poll `mcp__runcastle__review_drive({ action: "status" })` until `drive.devUrl` appears, waiting a few seconds between calls. Give it a couple of minutes before you conclude it is never coming.
40
+
41
+ A refusal is **final** — a dirty tree, or a drive the human is already running. Do not retry it in a loop: go straight to *Could not review* below.
42
+
43
+ 2. **Walk the app with `agent-browser`.** Its core loop, which you repeat:
44
+
45
+ ```
46
+ agent-browser open <devUrl> # once, to start
47
+ agent-browser record start {{WALKTHROUGH_PATH}} # then, immediately — see below
48
+ agent-browser snapshot -i # the page as interactive elements, each with an @eN ref
49
+ agent-browser click @e7 # act on a ref from the snapshot you just took
50
+ agent-browser snapshot -i # RE-SNAPSHOT — see below
51
+ agent-browser wait --load networkidle # after a navigation, before snapshotting
52
+ agent-browser record stop # before you close, always
53
+ agent-browser close # when you are done driving
54
+ ```
55
+
56
+ **Record the walkthrough.** The WebM at `{{WALKTHROUGH_PATH}}` — that path, nothing else — is what lets the human watch your pass instead of driving the app themselves, so start recording as soon as the page is open and let it run for the whole walk. Two rules about it:
57
+
58
+ - **A recording failure never fails the review.** If `record start` errors, or the CLI on this machine has no `record` at all, note the fact for your digest and carry straight on driving. The notes are the deliverable; the video is evidence.
59
+ - **Always `record stop` where you stop the drive.** It belongs in the same cleanup as step 5, on every path including the failure one — a recorder you leave running outlives you, and its file may be unplayable.
60
+
61
+ **`@eN` refs go stale on any page change.** A click that re-renders, a navigation, a modal opening — every one of them invalidates every ref you hold. Re-snapshot after each, and act only on refs from the newest snapshot. Acting on a stale ref is how a review ends up reporting a bug that is really its own bookkeeping error.
62
+
63
+ Work the ticket's `acceptanceCriteria` one at a time: reach the part of the app each one names, do the thing, and read the result off a fresh snapshot. Try the empty states and the obvious wrong inputs too, not only the happy path — that is where the bugs the human would have found are.
64
+
65
+ 3. **Write one note per finding, as you go.** `mcp__runcastle__add_test_note({ text: "..." })`. Each note is one observation the human can reproduce without you: **what you did, what happened, what you expected**. Name the screen and the steps. Keep them separate — one note per finding — because each one can be promoted to a fix ticket in a click, and a note bundling three bugs makes a bad ticket.
66
+
67
+ Write notes as you find things, not in a batch at the end: a note you have sent survives an iteration that ends early, and one you were saving up does not.
68
+
69
+ 4. **Close with a summary note.** One last `add_test_note` covering the pass as a whole: which criteria you verified and how, what you could not reach and why, and the headline of what you found. This is the note the human reads first. If some of this feature's implementation tickets failed — you are reviewing it anyway, on purpose, and the signature is a surface that is missing outright rather than misbehaving — say so in this note: the human must know they are reading a review of a partially-built feature.
70
+
71
+ 5. **Stop the drive.** `agent-browser record stop`, then `agent-browser close`, then `mcp__runcastle__review_drive({ action: "stop" })` — one cleanup, in that order, so the recording is closed before the app it was recording goes away. Stopping the drive puts the checkout back and tears the environment down. Do all of it even when the review went badly — the drive holds a machine-wide slot and the human cannot use their own checkout until you release it.
72
+
73
+ 6. **Write your digest** at exactly:
74
+
75
+ `{{DIGEST_PATH}}`
76
+
77
+ Roughly 10–15 lines of plain prose, for a reader without your context: what you exercised and how, what you found (the headlines — the notes carry the detail), and what you could not verify. This is the last thing you do before signalling COMPLETE. Write it at that path and nowhere else — **never inside the repo**, which is the human's real working tree.
78
+
79
+ ## Could not review
80
+
81
+ There is exactly one kind of failure here, and finding bugs is not it. The review **failed** only when it could not run at all:
82
+
83
+ - the drive refused to start (dirty tree, or the human holds the slot),
84
+ - the dev URL never appeared,
85
+ - `agent-browser` will not run, or the app will not load at all.
86
+
87
+ When that happens: run the step 5 cleanup for whatever you got as far as starting — recorder, browser, drive — write **`{{BLOCKED_PATH}}`** — that path, not the repo — saying in one or two sentences precisely what stopped you, and print `<promise>COMPLETE</promise>`. Write no digest; the blocked file is your record. Do not write notes speculating about a feature you never saw.
88
+
89
+ ## Hard rules
90
+
91
+ - **Never edit the repo.** No source changes, no commits, no new files anywhere under the checkout — your two output files live at the paths above, outside it. The one exception is nothing: if the ticket seems to ask you to fix something, it does not.
92
+ - **Never leave the drive — or the recorder — running.** Stop both on every path, including the failure path.
93
+ - **Never report a finding you did not observe.** Every note traces to something you saw in a snapshot, a response body, or a test run. A plausible-sounding bug that is really a stale ref costs the human a fix ticket for nothing.
94
+ - **Stay inside this ticket.** Review what it names. Adjacent things you notice go in the summary note, not into a sprawl of speculative findings.
@@ -37,6 +37,12 @@ Expect a **handful of substantial tickets** for a feature — roughly 4–8, eac
37
37
 
38
38
  Give each ticket its **blocking edges** — the tickets that must finish before it can start. Every ticket carries them: the field is required, so a ticket with no blockers gets an empty array and can start immediately.
39
39
 
40
+ <review-ticket>
41
+ Close the batch with **one review ticket** (`kind: "review"`), blocked by every implementation ticket in it. It is not a slice: it is the prose brief for the agent that exercises the *integrated* feature at the tail of the burn, on the feature branch, and writes what it finds as test notes for the human's review phase. Its `goal` says what to verify and its `acceptanceCriteria` are the things to check off, one per behaviour worth confirming — the review agent walks them in order.
42
+
43
+ Prescribe the verification that fits the feature, in plain prose: a browser walkthrough for anything with a UI ("open the settings flow, add a project, check the empty state"), or "run the suite and curl these endpoints" for a backend-only one. There is no mode to pick — the agent does what the ticket says. A feature with genuinely nothing to exercise gets no review ticket; everything else gets exactly one (more per feature comes later). The review agent never edits code, so its ticket needs no `seams` beyond the surface it exercises, and finding bugs is a *successful* review — the notes are the deliverable.
44
+ </review-ticket>
45
+
40
46
  <wide-refactor-exception>
41
47
  A **wide refactor** — one mechanical change (rename a column, retype a shared symbol) whose blast radius breaks thousands of call sites at once — cannot land green as a vertical slice. Sequence it **expand → migrate → contract** instead. Expand: add the new form beside the old so nothing breaks (one ticket). Migrate: move call sites over in batches sized by blast radius (per package/dir), each batch a ticket blocked by the expand, CI green throughout because the old form still exists. Contract: delete the old form once no caller remains, blocked by every migrate batch. If even the batches cannot stay green alone, let them share an integration branch that all block a final integrate-and-verify ticket — green is promised only there.
42
48
  </wide-refactor-exception>
@@ -52,6 +58,7 @@ Each ticket:
52
58
  - **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.
53
59
  - **seams** — `string[]`, the public interfaces to test at (carry them from the spec's Seams section; prefer existing, prefer the highest, prefer one).
54
60
  - **blockedBy** — `number[]`, **required**, the seq numbers (from your 1..N ordering) of the tickets that *genuinely* gate this one. Only true gates; pass `[]` when there are none — omitting it fails validation.
61
+ - **kind** — `"implementation"` (the default, omit it) or `"review"` for the one review ticket described above.
55
62
 
56
63
  ## 3. Self-check, then emit
57
64
 
@@ -0,0 +1 @@
1
+ .xterm{cursor:text;-webkit-user-select:none;user-select:none;position:relative}.xterm.focus,.xterm:focus{outline:none}.xterm .xterm-helpers{z-index:5;position:absolute;top:0}.xterm .xterm-helper-textarea{opacity:0;z-index:-5;white-space:nowrap;resize:none;border:0;width:0;height:0;margin:0;padding:0;position:absolute;top:0;left:-9999em;overflow:hidden}.xterm .composition-view{color:#fff;white-space:nowrap;z-index:1;background:#000;display:none;position:absolute}.xterm .composition-view.active{display:block}.xterm .xterm-viewport{cursor:default;background-color:#000;position:absolute;inset:0;overflow-y:scroll}.xterm .xterm-screen{position:relative}.xterm .xterm-screen canvas{position:absolute;top:0;left:0}.xterm-char-measure-element{visibility:hidden;line-height:normal;display:inline-block;position:absolute;top:0;left:-9999em}.xterm.enable-mouse-events{cursor:default}.xterm.xterm-cursor-pointer,.xterm .xterm-cursor-pointer{cursor:pointer}.xterm.column-select.focus{cursor:crosshair}.xterm .xterm-accessibility:not(.debug),.xterm .xterm-message{z-index:10;color:#0000;pointer-events:none;position:absolute;inset:0}.xterm .xterm-accessibility-tree:not(.debug) ::selection{color:#0000}.xterm .xterm-accessibility-tree{-webkit-user-select:text;user-select:text;white-space:pre;font-family:monospace}.xterm .xterm-accessibility-tree>div{transform-origin:0;width:fit-content}.xterm .live-region{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.xterm-dim{opacity:1!important}.xterm-underline-1{text-decoration:underline}.xterm-underline-2{-webkit-text-decoration:underline double;text-decoration:underline double}.xterm-underline-3{-webkit-text-decoration:underline wavy;text-decoration:underline wavy}.xterm-underline-4{-webkit-text-decoration:underline dotted;text-decoration:underline dotted}.xterm-underline-5{-webkit-text-decoration:underline dashed;text-decoration:underline dashed}.xterm-overline{text-decoration:overline}.xterm-overline.xterm-underline-1{text-decoration:underline overline}.xterm-overline.xterm-underline-2{-webkit-text-decoration:overline double underline;text-decoration:overline double underline}.xterm-overline.xterm-underline-3{-webkit-text-decoration:overline wavy underline;text-decoration:overline wavy underline}.xterm-overline.xterm-underline-4{-webkit-text-decoration:overline dotted underline;text-decoration:overline dotted underline}.xterm-overline.xterm-underline-5{-webkit-text-decoration:overline dashed underline;text-decoration:overline dashed underline}.xterm-strikethrough{text-decoration:line-through}.xterm-screen .xterm-decoration-container .xterm-decoration{z-index:6;position:absolute}.xterm-screen .xterm-decoration-container .xterm-decoration.xterm-decoration-top-layer{z-index:7}.xterm-decoration-overview-ruler{z-index:8;pointer-events:none;position:absolute;top:0;right:0}.xterm-decoration-top{z-index:2;position:relative}.xterm .xterm-scrollable-element>.scrollbar{cursor:default}.xterm .xterm-scrollable-element>.scrollbar>.scra{cursor:pointer;font-size:11px!important}.xterm .xterm-scrollable-element>.visible{opacity:1;z-index:11;background:0 0;transition:opacity .1s linear}.xterm .xterm-scrollable-element>.invisible{opacity:0;pointer-events:none}.xterm .xterm-scrollable-element>.invisible.fade{transition:opacity .8s linear}.xterm .xterm-scrollable-element>.shadow{display:none;position:absolute}.xterm .xterm-scrollable-element>.shadow.top{width:100%;height:3px;box-shadow:var(--vscode-scrollbar-shadow,#000) 0 6px 6px -6px inset;display:block;top:0;left:3px}.xterm .xterm-scrollable-element>.shadow.left{width:3px;height:100%;box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset;display:block;top:3px;left:0}.xterm .xterm-scrollable-element>.shadow.top-left-corner{width:3px;height:3px;display:block;top:0;left:0}.xterm .xterm-scrollable-element>.shadow.top.left{box-shadow:var(--vscode-scrollbar-shadow,#000) 6px 0 6px -6px inset}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-cyrillic-ext-wght-normal-BOeWTOD4.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-cyrillic-wght-normal-DqGufNeO.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-greek-ext-wght-normal-DlzME5K_.woff2)format("woff2-variations");unicode-range:U+1F??}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-greek-wght-normal-CkhJZR-_.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-vietnamese-wght-normal-CBcvBZtf.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-latin-ext-wght-normal-DO1Apj_S.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Inter Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/assets/inter-latin-wght-normal-Dx4kXJAl.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(data:font/woff2;base64,d09GMgABAAAAAAfsABQAAAAAEAwAAAeCAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGhwbHhwoP0hWQVJbBmA/U1RBVIFiJyYAdC9qEQgKhGSEAAsgADCGCAE2AiQDOgQgBYlMB4EUDAcbLQ4onoexrSC/2ZyLAa8p8VHB8/x3Vue+V0hVJalMJg2nx/TCrQXxBeqLjQG7FyM1WEa/X1tEXN7cFz9EJEMmMUz3RihWSSKeQCbcIou0izz/C8v+fq3VfajEa9gDD11CImXS7qL/RJFVzC1qiB6KmKeD6TZdQ6IRGv78dL6uSVVCfgni5mzu7kcgQBgAEAQTQRCoL++STTYybkJxNfQxAAIAGu8OdEB9teW2jh4BpgDqFjAeSEByW3zFP0CBBgNMsMCGEDjgggdhiEAUAeIIED7ABTDUEnkIE9Q9ahFgKttcVhApo4ACB4qobHaccgDfEjFO6aaWUhjMLt2SyIvHKoDqoA4CSUwEIYQCEjhAO9R1G6keDeDZGjNo+AhxOjCEGTr1WeIF3kYBiLAOKvkJSMiKX0VdAyQt3SDJClCkxJCHkCzfqyVTriJZLcolS32JZHUekq2TYNkYtCtjYHMQXSxGjXDz2t/yLWXzDzxz+o3zFwDEaN23F+13pyMdQAEaSKAR9vcGq4A4MTSKCElGW+M7UcY7xqkggITb28ZJhlqc9q2twYKTt0NjixBgYvO9BIihEBLYuOFXQzfIQ7dXGUEEEgFDooBfAzqiQbpJrhiWSuKJCRFKYbHCyJKI2G5GiZbNAvgAu5pc3vwx4G+g3aDkhklABiSz0BICXrYghtYhx/cdJ+44rY2oZ0aMNRFz3VZjb6W33F3gzltqtOCV8tTHSpOeXuItfvr5lCdfzFpqtEitvqdcdGGFd28ZqqC0tPbeChGXgrIlnhSWu/eUso4uKWFLugyDzQJhflY4659+WjQ++6x72WUMv9G8mw6QJl7BVxX5fe/kpUsOvnZwee9uQ0cGXYd0o89XB2748sDSnt8d2VphdOTTgceDVvOds0v9P/s7HPq15aGun/6Vllb56f1dl0t1LejqrNkpdRZsG8TOnM5vkBG5oiVyVGnS8LHps5cfNWJs6qKPfaNSxiQNBUm3cKNWROr0GSur7Za31k1vieq7LH11VF+jXdRIasRKflc7jkobm1Z9te1IyZA0pDkhLR98+H37Zf1c/8at+dB7x+7GfVyTfJMPiYztsnl59Y5l4j+0n1RXlpHnF3Tq7HecmNF/CJodEMAikruxiyJaGLvHOdAfoA+oDvpjBm2b91cHGRZMU9n25xEU0A8fgEEAdKI3Q1iDtc034sug5YVMkE2jsE+BIkwSoQ3gxXMqz9tELp48bd0cFKOKS7xYjEuXBnZP5ia7DyiO/X/YI+PQSbt2uSdqAkWL9nQbV1XB94/+uPfdZz8dnXYFBYrcTl2SIR/ybxJNJPz/Gupb0JaZeens2ekC7EKr8t+Ls/P5VJPYJdHKyqfg2nqU6bhlidzcddQV/7MmecTzJ5VPcKXkNKSEogHjYFx6QZ7rQ+FSe8njaiNuOnXS8H2ScQ619c2mC3VTtauL0rRbXd/CkSOP37FY9Zkjz8+GibYUMOEWF+RdrFS8Ecv1SHOpPUPZGEIpjPvFyU5cXKjd6OXqorTqy9GwRd++HVufPGnVsW+aO3vggKZ18jR9sXaTC1PWTEsVUaK0FkNySbTQDqlm2PfDjZcu4aalnSLKjnOoYQ0nUlqqXcGpPu/4VgV/xU2pAqW4BW3qzhQ8/hFKhV2qE3+BKAtDqBXjfgnVdH4y0wg5tbVNRenNdTWOrenWLcupQdmsbq5b+18piTe/xRdp1xbILxNPJGInm2z6hoB21Lal0i+ePTtd7B45+3XhFJ329evskXm7qurUVREotqSluSo/L29d3qDhI4YOQqWhI4YNvBNfsMHeXKemXrxQfKeuPOGRVayA3JtkJKEgbPp+dXUDluddutRYLFoXGXWX6N3WFaGLbQtRSitVYNacTNSdy7AaG/HSaUEANcBoGXNdcZvZsOqQ1icBDv21/gzAoYPHH/WDW0qNR3QTYKEAEHig6o13NXbND06CQPlRtYjGNnSktRc09k1mAMDvAlDKfQjgy6fssInlfzmNAjKkDxoxHOBLdVRAIVt9j4qo+hA1w9T1aNBNTUOTTNUHLbqokE+UAfJXCIGw/IxCSL5GRUJeR40rL/UxTm4Q08H6MbCs70ObuNyIIXrINHQYInF06UUlevTjbQzTh5upiDMzMMogUtEnjPs/Y7jAHCJeB0GBHh04tC6FiB6ZFB1oArUSIoFoqhzCeAN6lHwm0T4C3VVPWvjpSMXReuWesMEcoqrmgtNBGd2noWeV0hNAz9rFeShNJxHGsPa3HXeKTk8b55hahySYHaYKKFFLpCfN8rsoaJn01CR04Gkc+5k7KVTCmClX8Q10HCrUEkVlSX+XO33oQR9609tJ516H497WSobWs5Up6TLaS10/dessIskgJSLiDlWvHVUywpkQ7hdPZqGyiEF0uVQerVcPamT1A3eKXdyI1vG9OoflrSXihZ1qqGE3nhmAgiIbRCQgPLEPtOM3UQwTLYaYYomNlpA44opnjV6jkD6id80OOrzf6BzmMD6eEa1zKyeYG1fzfEf16V6jw9XYOaar1/b2kP/IYX8oR2mcFvv2GtBV3JXgd437AQAA)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-cyrillic-wght-normal-D73BlboJ.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-greek-wght-normal-Bw9x6K1M.woff2)format("woff2-variations");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-vietnamese-wght-normal-Bt-aOZkq.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-latin-ext-wght-normal-DBQx-q_a.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono Variable;font-style:normal;font-display:swap;font-weight:100 800;src:url(/assets/jetbrains-mono-latin-wght-normal-B9CIFXIH.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{--bg:#090b10;--panel:#0e1117;--panel-2:#0b0e14;--panel-3:#12151d;--panel-inset:#07080b;--hairline:#1c2230;--hairline-soft:#151a26;--hairline-strong:#2a3242;--text:#dde3ed;--text-2:#96a0b0;--text-3:#5f6a7a;--text-4:#3a4354;--accent:#7c6cf6;--accent-hi:#a49bff;--accent-2:#8f80f8;--accent-ink:#0d0722;--accent-soft:#161329;--accent-line:#3d3670;--ph-ideation:#8b7cf8;--ph-spec:#8a94a2;--ph-tickets:#d7a94a;--ph-implementation:#f0883e;--ph-review:#58a6ff;--ph-shipped:#3fb950;--danger:#f4594e;--needs:#d7a94a;--warn:var(--needs);--ok:#3fb950;--drive:#58a6ff;--mono:"JetBrains Mono Variable", "Cascadia Code", Consolas, ui-monospace, monospace;--sans:"Inter Variable", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--radius-sm:5px;--radius:7px;--radius-lg:10px;--radius-pill:999px;--control-h:28px;--sidebar-w:252px;--inspector-w:300px;--maprail-w:300px;--content-max:1060px;--shadow-menu:0 8px 28px -10px #000000b3, 0 2px 8px -2px #00000080;--shadow-overlay:0 24px 70px -24px #000000d9, 0 8px 24px -12px #0009;--dur-1:.12s;--dur-2:.19s;--dur-3:.32s;--ease:cubic-bezier(.22, .61, .24, 1);--ease-out:cubic-bezier(.16, 1, .3, 1);--ring:0 0 0 2px var(--bg), 0 0 0 4px #7c6cf680}*{box-sizing:border-box}html,body,#root{height:100%;margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:var(--sans);letter-spacing:.004em;font-feature-settings:"tnum" 1, "cv05" 1;-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;font-size:13px;line-height:1.45;overflow:hidden}button{color:inherit;font-family:inherit}:focus-visible{box-shadow:var(--ring);border-radius:var(--radius-sm);outline:none}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-thumb{background:#1c2230 padding-box padding-box;border:2px solid #0000;border-radius:5px}::-webkit-scrollbar-thumb:hover{background:#2a3242 padding-box padding-box;border:2px solid #0000}::-webkit-scrollbar-track{background:0 0}.empty-state{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:6px;padding:44px 24px;display:flex}.empty-state.is-compact{padding:26px 20px}.empty-state-icon{width:34px;height:34px;color:var(--text-3);background:var(--panel-3);border:1px solid var(--hairline);border-radius:9px;justify-content:center;align-items:center;margin-bottom:4px;display:flex}.empty-state-title{color:var(--text-2);font-size:13px;font-weight:500}.empty-state-hint{color:var(--text-3);text-wrap:pretty;max-width:42ch;font-size:12px;line-height:1.55}.empty-state-action{margin-top:8px}.mono{font-family:var(--mono);font-size:12.5px}.dim{color:var(--text-3)}.dim-line{color:var(--text-3);font-family:var(--mono);padding:2px 0;font-size:12.5px}.section-title{text-transform:uppercase;letter-spacing:.09em;color:var(--text-3);padding:4px 0;font-size:11px;font-weight:600}.phase-fg-ideation{color:var(--ph-ideation)}.phase-fg-spec{color:var(--ph-spec)}.phase-fg-tickets{color:var(--ph-tickets)}.phase-fg-implementation{color:var(--ph-implementation)}.phase-fg-review{color:var(--ph-review)}.phase-fg-shipped{color:var(--ph-shipped)}.btn{height:var(--control-h);border-radius:var(--radius);border:1px solid var(--hairline);color:var(--text);cursor:pointer;white-space:nowrap;transition:border-color var(--dur-1) var(--ease), background var(--dur-1) var(--ease), color var(--dur-1) var(--ease), transform var(--dur-1) var(--ease), box-shadow var(--dur-2) var(--ease), opacity var(--dur-1);background:0 0;justify-content:center;align-items:center;gap:6px;padding:0 12px;font-size:12.5px;display:inline-flex}.btn:disabled{opacity:.4;cursor:not-allowed}.btn:active:not(:disabled){transform:translateY(.5px)scale(.99)}.btn-ghost:hover:not(:disabled){border-color:var(--hairline-strong);background:var(--panel);color:var(--text)}.btn-solid{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}.btn-solid:hover:not(:disabled){background:var(--accent-2);border-color:var(--accent-2);transform:translateY(-1px);box-shadow:0 4px 16px -6px #7c6cf6b3}.btn-solid:active:not(:disabled){box-shadow:none;transform:translateY(0)}.btn-danger{border-color:color-mix(in srgb, var(--danger) 55%, var(--hairline));color:var(--danger)}.btn-danger:hover:not(:disabled){border-color:var(--danger);background:#f4594e1f}.btn-xs{border-radius:var(--radius-sm);height:22px;padding:0 9px;font-size:11.5px}.btn-lg{height:32px;padding:0 16px;font-size:13px}.ghost-link{color:var(--text-2);cursor:pointer;transition:color var(--dur-1) var(--ease);background:0 0;border:none;padding:2px 0;font-size:12.5px}.ghost-link:hover:not(:disabled){color:var(--accent-hi)}.ghost-link:disabled{opacity:.4;cursor:not-allowed}.chip{border-radius:var(--radius-pill);border:1px solid var(--hairline);height:19px;font-family:var(--mono);color:var(--text-2);white-space:nowrap;align-items:center;gap:5px;padding:0 8px;font-size:10.5px;display:inline-flex}.chip-neutral{color:var(--text-2)}.chip-blocked{color:var(--needs);border-color:color-mix(in srgb, var(--needs) 40%, transparent)}.chip-ticket-pending{color:var(--text-3)}.chip-ticket-burning{color:var(--ph-implementation);border-color:color-mix(in srgb, var(--ph-implementation) 45%, transparent);background:color-mix(in srgb, var(--ph-implementation) 8%, transparent);animation:1.5s ease-in-out infinite pulse}.chip-ticket-done{color:var(--ok);border-color:color-mix(in srgb, var(--ok) 40%, transparent)}.chip-ticket-failed{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 45%, transparent)}.chip-ticket-cancelled{color:var(--text-3);text-decoration:line-through}.chip-kind-review,.chip-note-agent{color:var(--ph-review);border-color:color-mix(in srgb, var(--ph-review) 40%, transparent);background:color-mix(in srgb, var(--ph-review) 8%, transparent)}.chip-note-agent{flex:none}.chip-run-running{color:var(--ph-implementation);border-color:color-mix(in srgb, var(--ph-implementation) 45%, transparent);animation:1.5s ease-in-out infinite pulse}.chip-run-succeeded{color:var(--ok);border-color:color-mix(in srgb, var(--ok) 40%, transparent)}.chip-run-failed{color:var(--danger);border-color:color-mix(in srgb, var(--danger) 45%, transparent)}.chip-run-cancelled{color:var(--text-3)}.tag{font-family:var(--mono);text-transform:lowercase;font-size:12px;font-weight:600}.status-dot{background:var(--text-3);border-radius:50%;flex:none;width:7px;height:7px;display:inline-block}.sess-dot-launching{background:var(--needs);animation:1.3s ease-in-out infinite pulse}.sess-dot-live{background:var(--ok);box-shadow:0 0 0 3px #3fb95029}.sess-dot-ended{background:var(--text-3)}.spinner,.spin-ring{border:1.6px solid var(--ph-implementation);border-top-color:#0000;border-radius:50%;flex:none;width:12px;height:12px;animation:.8s linear infinite spin;display:inline-block}.shell{grid-template-rows:44px 1fr 28px;height:100%;display:grid}.shell-body{grid-template-columns:var(--sidebar-w) 1fr var(--inspector-w);min-height:0;display:grid}.shell.inspector-collapsed .shell-body{grid-template-columns:var(--sidebar-w) 1fr}.titlebar{border-bottom:1px solid var(--hairline);background:var(--panel);align-items:center;gap:9px;padding:0 14px;font-size:13px;display:flex}.tb-logo{flex:none;justify-content:center;align-items:center;display:inline-flex}.tb-app{color:var(--text);letter-spacing:.02em;font-weight:600}.wordmark{font-family:var(--mono);letter-spacing:-.25px;white-space:nowrap;font-size:13px;font-weight:600;line-height:1}.wordmark.is-lg{letter-spacing:-.5px;font-size:21px}.wordmark-run{color:var(--accent-hi)}.wordmark-castle{color:var(--text)}.tb-home:hover .wordmark-castle{color:var(--accent-hi)}.tb-arrow,.tb-dot{color:var(--text-4);flex:none}.tb-project{color:var(--text-2);text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.tb-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-drafts .triage-label>.triage-name{color:var(--text-4)}.triage-shipped .triage-label>.triage-name{color:var(--ph-shipped)}.feature-row{border-radius:var(--radius-sm);width:100%;transition:background var(--dur-1) var(--ease);align-items:center;display:flex;position:relative}.feature-row-main{cursor:pointer;text-align:left;background:0 0;border:none;flex-direction:column;flex:1;gap:3px;min-width:0;padding:6px 4px 7px 9px;display:flex}.feature-line{align-items:center;gap:8px;min-width:0;display:flex}.feature-line.is-meta{gap:7px}.feature-row:before{content:"";background:var(--accent);transform-origin:50%;width:2px;transition:transform var(--dur-2) var(--ease-out);border-radius:2px;position:absolute;top:6px;bottom:6px;left:1px;transform:scaleY(0)}.feature-row:hover,.feature-row.is-active{background:var(--panel-3)}.feature-row.is-active:before{transform:scaleY(1)}.feature-row.is-active .feature-title{color:var(--text)}.feature-row.is-dim{opacity:.55}.feature-row.is-dim:hover{opacity:.85}.project-pin{border-bottom:1px solid var(--hairline-soft);flex:none;padding:6px}.project-row{border-radius:var(--radius-sm);background:var(--panel-3);cursor:pointer;text-align:left;width:100%;min-height:32px;transition:background var(--dur-1) var(--ease), border-color var(--dur-1) var(--ease);border:1px solid #0000;align-items:center;gap:8px;padding:0 9px;display:flex}.project-row:hover{border-color:var(--hairline-strong)}.project-row.is-active{border-color:var(--accent-line);background:var(--accent-soft)}.project-row-mark{opacity:.85;align-items:center;display:flex}.project-row.is-active .project-row-mark{opacity:1}.project-row-name{min-width:0;color:var(--text-2);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:12.5px;overflow:hidden}.project-row.is-active .project-row-name{color:var(--text)}.project-row-kick{letter-spacing:.09em;text-transform:uppercase;color:var(--text-4);font-size:9.5px;font-weight:700}.project-row-live{color:var(--accent-hi);align-items:center;gap:5px;font-size:10.5px;display:inline-flex}.project-row-live .spin-ring{border-color:var(--accent);border-top-color:#0000;width:10px;height:10px}.row-actions{flex:none;padding-right:4px;position:relative}.row-actions-btn{color:var(--text-3);cursor:pointer;border-radius:var(--radius-sm);transition:background var(--dur-1) var(--ease), color var(--dur-1) var(--ease);background:0 0;border:none;padding:2px 5px;font-size:15px;line-height:1}.row-actions-btn:hover{background:var(--panel-3);color:var(--text)}.row-actions-menu{z-index:20;background:var(--panel-2);border:1px solid var(--border);border-radius:var(--radius-sm);flex-direction:column;min-width:128px;padding:4px;display:flex;position:absolute;top:calc(100% - 2px);right:4px;box-shadow:0 6px 20px -8px #0009}.row-actions-item{text-align:left;border-radius:var(--radius-sm);cursor:pointer;color:var(--text-2);transition:background var(--dur-1) var(--ease), color var(--dur-1) var(--ease);background:0 0;border:none;padding:5px 8px;font-size:12.5px}.row-actions-item:hover{background:var(--panel-3);color:var(--text)}.row-actions-item.is-danger{color:var(--danger)}.show-archived-toggle,.lane-expander{width:100%;color:var(--text-3);cursor:pointer;text-align:left;border-radius:var(--radius-sm);transition:background var(--dur-1) var(--ease), color var(--dur-1) var(--ease);background:0 0;border:none;margin-top:8px;padding:6px 9px;font-size:11.5px}.show-archived-toggle:hover,.lane-expander:hover{background:var(--panel-3);color:var(--text-2)}.feature-dot{opacity:.9;border-radius:3px;flex:none;width:8px;height:8px}.phase-bg-ideation{background:var(--ph-ideation)}.phase-bg-spec{background:var(--ph-spec)}.phase-bg-tickets{background:var(--ph-tickets)}.phase-bg-implementation{background:var(--ph-implementation)}.phase-bg-review{background:var(--ph-review)}.phase-bg-shipped{background:var(--ph-shipped)}.feature-draft-glyph{width:8px;color:var(--text-4);flex:none;font-size:11px;line-height:1}.feature-title{min-width:0;color:var(--text-2);text-overflow:ellipsis;white-space:nowrap;transition:color var(--dur-1);flex:1;font-size:12.5px;font-weight:550;overflow:hidden}.feature-slug{min-width:0;font-family:var(--mono);color:var(--text-3);text-overflow:ellipsis;white-space:nowrap;flex:0 auto;font-size:10.5px;overflow:hidden}.feature-progress{color:var(--text-3);flex:none;font-size:10.5px}.feature-chip{color:var(--text-3);flex:none;align-items:center;gap:4px;font-size:10.5px;display:flex}.feature-chip.is-needsMe{color:var(--needs)}.feature-chip.is-working{color:var(--ph-implementation)}.feature-chip.is-shipped{color:var(--ph-shipped)}.feature-chip.is-draft{color:var(--text-4)}.feature-chip .spin-ring{border-width:1.4px;width:9px;height:9px}.feature-line.is-meta .mini-map{margin-left:auto}.needs-dot{background:var(--needs);border-radius:50%;width:7px;height:7px}.needs-attention{background:var(--danger)}.needs-grill,.needs-burn,.needs-ship{background:var(--needs)}.mini-map{align-items:center;gap:2px;display:flex}.mini-seg{background:var(--text-4);width:6px;height:6px;transition:background var(--dur-2);border-radius:2px}.mini-seg.is-done{background:var(--text-3)}.mini-seg.is-current{background:var(--accent);box-shadow:0 0 0 2px #7c6cf638}.mini-seg.is-skipped{border:1px solid var(--text-4);background:0 0}.sidebar-foot{border-top:1px solid var(--hairline-soft);color:var(--text-4);padding:10px 12px;font-size:11px;line-height:1.5}.nf-form{border:1px solid var(--hairline);border-radius:var(--radius);background:var(--panel);animation:fadeUp var(--dur-2) var(--ease-out);flex-direction:column;gap:8px;margin:6px;padding:10px;display:flex}.workspace{background:var(--bg);flex-direction:column;min-width:0;min-height:0;display:flex;position:relative}.ws-empty{flex-direction:column;height:100%;display:flex;overflow-y:auto}.ws-empty-inner{min-height:100%;color:var(--text-3);flex-direction:column;justify-content:center;align-items:center;gap:12px;display:flex}.ws-empty-logo{opacity:.85;justify-content:center;align-items:center;display:flex}.ws-empty-title{color:var(--text-2);font-size:14px;font-weight:500}.ws-empty-sub{color:var(--text-3);text-align:center;max-width:40ch;font-size:12.5px}.ws-empty-actions{gap:10px;display:flex}.ws-empty-hint{color:var(--text-4);text-align:center;max-width:44ch;font-size:12px;line-height:1.5}.talk-door{color:var(--text-3);cursor:pointer;border-radius:var(--radius-sm);transition:color var(--dur-1) var(--ease);background:0 0;border:none;padding:2px 4px;font-size:12px}.talk-door:hover:not(:disabled){color:var(--accent-hi)}.talk-door:disabled{opacity:.5;cursor:default}.nf-actions-spacer{flex:1}.pw-tag{border-radius:var(--radius-pill);border:1px solid var(--accent-line);background:var(--accent-soft);height:18px;color:var(--accent-hi);letter-spacing:.09em;align-items:center;padding:0 8px;font-size:9.5px;font-weight:700;display:inline-flex}.ws-branch.is-static{cursor:default}.pw-consequence{color:var(--text-3);margin-top:8px;font-size:12px;line-height:1.5}.pw-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}.session-checkin-hint{color:var(--text-3);border-bottom:1px solid var(--hairline);padding:6px 12px;font-size:11.5px}.strip-done{flex:1;align-items:center;gap:9px;min-width:0;display:flex}.done-check{border:1px solid color-mix(in srgb, var(--ok) 50%, transparent);background:color-mix(in srgb, var(--ok) 18%, transparent);width:16px;height:16px;color:var(--ok);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:9px;display:flex}.done-txt{min-width:0;color:var(--text-2);white-space:nowrap;text-overflow:ellipsis;font-size:11.5px;overflow:hidden}.done-txt b{color:var(--text);font-weight:560}.strip-work-next{text-overflow:ellipsis;max-width:260px;overflow:hidden}.session-ended-card{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel-2);animation:fadeUp var(--dur-2) var(--ease-out);align-items:center;gap:12px;padding:14px 16px;display:flex}.session-ended-dot{background:var(--text-4);border-radius:50%;flex:none;width:8px;height:8px}.session-ended-main{flex:1;min-width:0}.session-ended-title{color:var(--text-2);font-size:13px;font-weight:500}.session-ended-sub{color:var(--text-3);margin-top:1px;font-size:12px}.session-ended-resume{flex:none}.doc-card{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel-2);width:100%;color:var(--text-3);cursor:pointer;text-align:left;transition:border-color var(--dur-1), background var(--dur-1);align-items:center;gap:9px;padding:11px 14px;font-size:12.5px;display:flex}.doc-card:hover{border-color:var(--hairline-strong);background:var(--panel-3)}.doc-card:hover .doc-card-open{color:var(--accent-hi)}.doc-card.is-empty{cursor:default}.doc-card.is-empty:hover{border-color:var(--hairline);background:var(--panel-2)}.doc-card-title{color:var(--text);font-weight:500}.doc-card-meta{font-family:var(--mono);color:var(--text-4);font-size:11px}.doc-card-hint{color:var(--text-3);font-size:12px}.doc-card-open{color:var(--text-3);transition:color var(--dur-1);align-items:center;gap:3px;margin-left:auto;font-size:12px;display:inline-flex}.spec-doc{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel-2);max-width:780px;padding:22px 26px}.spec-meta{font-family:var(--mono);color:var(--text-3);font-size:11px}.spec-body{font-family:var(--mono);color:var(--text);white-space:pre-wrap;word-break:break-word;margin:10px 0 0;font-size:12.5px;line-height:1.7}.mapdoc{border-top:1px solid var(--hairline-soft);margin-top:4px;padding-top:12px}.mapdoc-summary{letter-spacing:.09em;text-transform:uppercase;color:var(--text-3);cursor:pointer;padding:2px;font-size:10px}.mapdoc-summary:hover{color:var(--text-2)}.map-section{margin-top:12px}.map-section-title{font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--accent-hi);margin-bottom:6px;font-size:10.5px}.map-waypoints>.dim-line{border:1px dashed var(--hairline);border-radius:var(--radius-lg);text-align:center;padding:18px}.wp-group{margin-bottom:14px}.wp-group-title{font-family:var(--mono);letter-spacing:.06em;text-transform:uppercase;color:var(--text-3);margin-bottom:7px;font-size:10.5px}.wp-group-frontier .wp-group-title{color:var(--accent-hi)}.wp-group-claimed .wp-group-title{color:var(--drive)}details.wp-group-done{border-top:1px solid var(--hairline-soft);padding-top:12px}details.wp-group-done>summary{cursor:pointer;list-style:revert}.wp{border:1px solid var(--hairline);border-radius:var(--radius-sm);background:var(--panel-2);cursor:pointer;transition:border-color var(--dur-2) var(--ease-out);margin-bottom:6px;padding:9px 12px}.wp:hover{border-color:var(--hairline-strong)}.wp-frontier{border-color:var(--accent-line)}.wp-blocked{opacity:.55}.wp-claimed{border-color:color-mix(in srgb, var(--drive) 45%, var(--hairline))}.wp-done{opacity:.6}.wp-top{align-items:baseline;gap:9px;display:flex}.wp-caret{color:var(--text-4);transition:transform var(--dur-2) var(--ease-out);flex-shrink:0;font-size:9px}.wp.is-open .wp-caret{transform:rotate(90deg)}.wp-detail{border-top:1px solid var(--hairline-soft);cursor:default;flex-direction:column;gap:6px;margin-top:8px;padding-top:8px;display:flex}.wp-q{cursor:text}.wp-type{font-family:var(--mono);letter-spacing:.05em;text-transform:uppercase;color:var(--text-2);border:1px solid var(--hairline-strong);border-radius:var(--radius-sm);flex-shrink:0;padding:1px 6px;font-size:10px}.wp-title{color:var(--text);overflow-wrap:anywhere;flex:1;min-width:0;font-size:13px}.wp-blockers,.wp-lineage,.wp-resume{font-family:var(--mono);color:var(--text-3);font-size:11px}.wp-blockers{color:var(--needs)}.wp-resume{color:var(--drive)}.wp-detail .wp-summary{color:var(--text-3)}.wp-run-note{font-family:var(--mono);color:var(--drive);font-size:11px;font-style:italic}.wp-actions{align-items:center;gap:7px;margin-top:8px;display:flex}.wp-pulse{background:var(--drive);border-radius:50%;flex-shrink:0;width:7px;height:7px;animation:1.4s ease-in-out infinite pulse}.wp-confirm{border:1px solid color-mix(in srgb, var(--needs) 45%, var(--hairline));border-radius:var(--radius-sm);background:color-mix(in srgb, var(--needs) 7%, transparent);margin-top:8px;padding:9px}.wp-confirm-text{color:var(--text-2);margin-bottom:8px;font-size:11.5px;line-height:1.45}.wp-confirm-text b{color:var(--text);font-weight:600}.wp-confirm-actions{gap:7px;display:flex}.converge-resume{border:1px solid var(--hairline);border-radius:var(--radius);background:var(--panel-2);flex-wrap:wrap;align-items:center;gap:12px;margin-top:14px;padding:10px 14px;display:flex}.converge-resume-text{color:var(--text-2);font-size:12.5px}.ledger{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel-2);overflow:hidden}.ledger-row+.ledger-row{border-top:1px solid var(--hairline-soft)}.ledger-head{cursor:pointer;text-align:left;width:100%;transition:background var(--dur-1);background:0 0;border:none;align-items:center;gap:10px;padding:10px 14px;display:flex}.ledger-head:hover{background:var(--panel-3)}.lg-caret{color:var(--text-4);width:12px;transition:transform var(--dur-2) var(--ease);flex:none;align-items:center;display:inline-flex}.ledger-row.is-open .lg-caret{transform:rotate(90deg)}.lg-seq{color:var(--text-3);font-family:var(--mono);flex:none;width:22px;font-size:11.5px}.lg-title{min-width:0;color:var(--text);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;overflow:hidden}.lg-block{font-family:var(--mono);color:var(--needs);flex:none;font-size:10.5px}.ledger-head .chip-kind-review{flex:none}.lg-meta{flex:none;align-items:center;gap:8px;display:flex}.lg-commits{color:var(--text-2);font-size:11px}.ledger-detail{background:var(--panel-inset);border-top:1px solid var(--hairline-soft);animation:detailIn var(--dur-2) var(--ease-out);padding:2px 16px 16px 46px;overflow:hidden}.td-section{margin-top:12px}.td-heading{letter-spacing:.07em;text-transform:uppercase;color:var(--text-3);margin-bottom:4px;font-size:10.5px;font-weight:600}.td-body{color:var(--text);white-space:pre-wrap;word-break:break-word;text-wrap:pretty;max-width:640px;line-height:1.55}.td-list{margin:0;padding-left:0;list-style:none}.td-list li{color:var(--text-2);gap:8px;padding:2px 0;line-height:1.5;display:flex}.td-list li:before{content:"—";color:var(--text-4);flex:none}.td-edit-open{border:1px solid var(--hairline);border-radius:var(--radius);color:var(--text-3);cursor:pointer;transition:border-color var(--dur-1), color var(--dur-1);background:0 0;margin-top:12px;padding:3px 9px;font-family:inherit;font-size:11.5px}.td-edit-open:hover{border-color:var(--hairline-strong);color:var(--text-2)}.td-edit label.td-section{max-width:640px;display:block}.td-input{background:var(--panel-inset);border:1px solid var(--hairline);border-radius:var(--radius);width:100%;color:var(--text);transition:border-color var(--dur-1);outline:none;padding:7px 10px;font-family:inherit;font-size:12.5px;line-height:1.55}.td-input:focus{border-color:var(--accent)}.td-area{resize:vertical;min-height:68px}.td-edit-actions{justify-content:flex-end;gap:8px;max-width:640px;margin-top:14px;display:flex}.td-seams{flex-wrap:wrap;gap:6px;display:flex}.seam{font-family:var(--mono);color:var(--text-2);border:1px solid var(--hairline);background:var(--panel-2);border-radius:var(--radius-sm);padding:2px 7px;font-size:11px}.td-commits{flex-wrap:wrap;gap:6px;display:flex}.commit-sha{font-family:var(--mono);color:var(--ph-shipped);border:1px solid var(--hairline);cursor:pointer;transition:border-color var(--dur-1);background:0 0;border-radius:4px;padding:1px 6px;font-size:11px}.commit-sha:hover{border-color:var(--ph-shipped)}.td-error .td-heading{color:var(--danger)}.td-error-body{color:var(--danger);white-space:pre-wrap;word-break:break-word}.td-empty{font-family:var(--mono);color:var(--text-4);font-size:11.5px}.run-digest{margin-bottom:12px}.run-split{align-items:stretch;gap:14px;display:flex}.run-lanes-panel{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel-2);flex:2;align-self:flex-start;min-width:0;overflow:hidden}.panel-cap{border-bottom:1px solid var(--hairline-soft);letter-spacing:.07em;text-transform:uppercase;color:var(--text-3);padding:8px 12px;font-size:10.5px;font-weight:600}.run-lanes{flex-direction:column;gap:6px;padding:8px;display:flex}.lane{border:1px solid var(--hairline);border-left:2px solid var(--text-4);border-radius:var(--radius-sm);transition:border-color var(--dur-2), background var(--dur-2);padding:8px 10px}.lane.is-clickable{cursor:pointer}.lane.is-clickable:hover{border-color:var(--accent)}.lane.is-selected{background:var(--panel-inset);border-color:var(--accent)}.lane.status-burning{border-left-color:var(--ph-implementation);animation:1.7s ease-in-out infinite pulse}.lane.status-done{border-left-color:var(--ok)}.lane.status-failed{border-left-color:var(--danger)}.lane-head{align-items:center;gap:8px;display:flex}.lane-seq{color:var(--text-3);font-family:var(--mono);flex:none;font-size:11.5px}.lane-title{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:12.5px;overflow:hidden}.lane-head .chip-kind-review{flex:none}.lane-foot{justify-content:space-between;align-items:center;gap:8px;margin-top:6px;display:flex}.lane-commits{flex-wrap:wrap;gap:4px;display:flex}.lane-dur{color:var(--text-3);font-family:var(--mono);font-size:11px}.lane-error{color:var(--danger);font-family:var(--mono);text-overflow:ellipsis;white-space:nowrap;margin-top:5px;font-size:11px;overflow:hidden}.lane-conflict{border:1px solid color-mix(in srgb, var(--danger) 35%, var(--hairline));border-radius:var(--radius-sm);background:color-mix(in srgb, var(--danger) 6%, transparent);margin-top:6px;padding:7px 9px}.lane-conflict-head{color:var(--text-2);font-size:11.5px;line-height:1.45}.lane-conflict-head code{font-family:var(--mono);color:var(--text);font-size:11px}.lane-conflict-files{flex-direction:column;gap:2px;margin:6px 0 0;padding:0;list-style:none;display:flex}.lane-conflict-files li{font-family:var(--mono);color:var(--danger);text-overflow:ellipsis;white-space:nowrap;text-align:left;direction:rtl;font-size:11px;overflow:hidden}.lane-conflict .lane-error{margin-top:6px}.lane-actions{gap:6px;margin-top:6px;display:flex}.lane-btn{border:1px solid var(--hairline);color:var(--text-2);border-radius:var(--radius-pill);cursor:pointer;transition:color var(--dur-1), border-color var(--dur-1);background:0 0;padding:2px 8px;font-size:11px}.lane-btn:hover:not(:disabled){color:var(--text);border-color:var(--accent)}.lane-btn:disabled{opacity:.5;cursor:default}.lane-btn-danger:hover:not(:disabled){color:var(--danger);border-color:var(--danger)}.run-stream-panel{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel-inset);flex-direction:column;flex:3;min-width:0;height:clamp(320px,100dvh - 330px,1200px);display:flex;overflow:hidden}.panel-tabs{align-items:center;gap:4px;display:flex}.panel-tab{color:var(--text-3);letter-spacing:.07em;text-transform:uppercase;border-radius:var(--radius-pill);cursor:pointer;transition:color var(--dur-1), background var(--dur-1);background:0 0;border:none;padding:3px 10px;font-size:10.5px;font-weight:600}.panel-tab:hover{color:var(--text)}.panel-tab.is-active{color:var(--text);background:var(--panel-inset)}.panel-tab-ctx{color:var(--accent-hi);font-family:var(--mono);text-transform:none;letter-spacing:0;margin-left:6px}.agent-live-dot{background:var(--ph-implementation);border-radius:50%;width:8px;height:8px;animation:1.7s ease-in-out infinite pulse}.agent-body{font-family:var(--mono);flex:1;padding:12px 16px;font-size:12px;line-height:1.7;overflow-y:auto}.agent-trimmed{color:var(--text-4);text-align:center;padding-bottom:8px;font-size:11px}.agent-turn{animation:lineIn var(--dur-2) var(--ease-out);align-items:flex-start;gap:9px;margin-bottom:10px;display:flex}.agent-turn.is-tool{margin-bottom:6px}.agent-glyph{line-height:inherit;flex:none}.agent-glyph.is-text{color:var(--text-2)}.agent-glyph.is-tool{color:var(--ok)}.agent-prose{min-width:0;color:var(--text);white-space:pre-wrap;word-break:break-word;flex:1}.agent-toolline{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.agent-toolname{color:var(--text);font-weight:600}.agent-toolargs{color:var(--text-3)}.agent-live-row{color:var(--ph-implementation);align-items:center;gap:8px;margin-top:4px;display:flex}.agent-spinner{animation:1.2s linear infinite agentSpin;display:inline-block}.agent-live-label{color:var(--text-3);font-size:11.5px}.agent-cursor{color:var(--text-2);animation:1.1s step-end infinite cursorBlink}@keyframes agentSpin{to{transform:rotate(360deg)}}@keyframes cursorBlink{50%{opacity:0}}.agent-follow{background:var(--panel-2);margin-left:auto;display:block;position:sticky;bottom:6px}.stream-head{border-bottom:1px solid var(--hairline-soft);background:var(--panel-2);justify-content:space-between;align-items:center;padding:8px 12px;display:flex}.follow-pill{border:1px solid var(--accent);color:var(--accent-hi);border-radius:var(--radius-pill);cursor:pointer;animation:fadeUp var(--dur-2) var(--ease-out);background:0 0;padding:1px 10px;font-size:11px}.stream-body{font-family:var(--mono);flex:1;padding:10px 14px;font-size:11.5px;line-height:1.85;overflow-y:auto}.stream-line{animation:lineIn var(--dur-2) var(--ease-out);gap:10px;display:flex}.sl-time{color:var(--text-4);flex:0 0 42px}.sl-type{text-overflow:ellipsis;white-space:nowrap;color:var(--text-2);flex:0 0 118px;overflow:hidden}.sl-msg{min-width:0;color:var(--text-2);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.level-error .sl-type{color:var(--danger)}.level-ok .sl-type{color:var(--ok)}.level-active .sl-type{color:var(--ph-implementation)}.level-info .sl-type{color:var(--accent-hi)}.review-grid{grid-template-columns:1fr 1fr;gap:14px;max-width:1000px;display:grid}@media (width<=900px){.review-grid{grid-template-columns:1fr}}.review-card{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel-2);padding:14px 16px}.check-row{align-items:center;gap:10px;margin-top:11px;display:flex}.check-dot{border-radius:50%;flex:0 0 7px;width:7px;height:7px}.check-dot.is-ok{background:var(--ok)}.check-dot.is-warn{background:var(--warn,#d9a441)}.check-dot.is-danger{background:var(--danger)}.check-dot.is-idle{background:var(--text-3)}.check-k{font-family:var(--mono);color:var(--text);flex:none;width:92px;font-size:12px}.check-v{font-family:var(--mono);color:var(--text-3);font-size:11.5px}.review-foot{border-top:1px solid var(--hairline-soft);font-family:var(--mono);color:var(--text-2);margin-top:14px;padding-top:12px;font-size:11.5px}.drive-live{align-items:center;gap:9px;margin-top:12px;display:flex}.drive-pulse{background:var(--drive);border-radius:50%;width:8px;height:8px;animation:1.4s ease-in-out infinite pulse}.drive-label{color:var(--drive);font-size:12.5px;font-weight:600}.drive-loc{font-family:var(--mono);color:var(--text-2);font-size:11.5px}.drive-copy{color:var(--text-2);text-wrap:pretty;margin-top:12px;font-size:12.5px;line-height:1.55}.drive-stop-review{margin-top:12px}.conflict-card{border-color:color-mix(in srgb, var(--danger) 45%, var(--hairline));max-width:1000px}.conflict-files{flex-direction:column;gap:4px;margin:12px 0 0;padding:0;list-style:none;display:flex}.conflict-files li{font-family:var(--mono);color:var(--danger);border-radius:var(--radius-sm);background:color-mix(in srgb, var(--danger) 9%, transparent);padding:3px 8px;font-size:11.5px}.conflict-resolve{margin-top:14px}.drive-failure-card{border-color:color-mix(in srgb, var(--danger) 45%, var(--hairline));max-width:1000px}.drive-failure-fix{margin-top:14px}.drive-failure-output{max-height:220px;font-family:var(--mono);white-space:pre-wrap;color:var(--text-2);border-radius:var(--radius-sm);background:color-mix(in srgb, var(--danger) 9%, transparent);margin:12px 0 0;padding:10px 12px;font-size:11.5px;line-height:1.5;overflow:auto}.conflict-head{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.conflict-when{font-family:var(--mono);color:var(--text-3);font-size:11px}.drive-label.is-quiet{color:var(--text-2)}.review-body{flex-direction:column;gap:14px;display:flex}.drive-pane{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel-2);max-width:1000px;overflow:hidden}.drive-pane-strip{background:var(--panel);border-bottom:1px solid var(--hairline-soft);align-items:center;gap:10px;height:38px;padding:0 12px;display:flex}.drive-pane-kind{border-radius:var(--radius-pill);border:1px solid var(--drive-line,var(--accent-line));background:var(--accent-soft);height:18px;color:var(--drive);font-family:var(--mono);align-items:center;padding:0 8px;font-size:10.5px;display:inline-flex}.drive-pane-loc{font-family:var(--mono);color:var(--text-3);font-size:11.5px}.drive-pane-spacer{flex:1}.drive-open{font-family:var(--mono);color:var(--drive);border:1px solid color-mix(in srgb, var(--drive) 40%, var(--hairline));border-radius:var(--radius-pill);background:var(--accent-soft);padding:4px 10px;font-size:11.5px;font-weight:600;text-decoration:none}.drive-open:hover{border-color:var(--drive)}.drive-open-waiting{color:var(--text-3);border-color:var(--hairline);cursor:default;background:0 0;font-weight:500}.drive-pane-term{background:var(--bg);height:420px;min-height:260px;position:relative}.walkthrough-card{max-width:1000px;margin-top:14px}.walkthrough-video{border:1px solid var(--hairline);border-radius:var(--radius);background:#000;width:100%;margin-top:12px;display:block}.notes-card{max-width:1000px;margin-top:14px}.notes-form{align-items:center;gap:8px;margin-top:14px;display:flex}.notes-input{background:var(--panel-inset);border:1px solid var(--hairline);border-radius:var(--radius);min-width:0;height:32px;color:var(--text);transition:border-color var(--dur-1);outline:none;flex:1;padding:0 12px;font-family:inherit;font-size:12.5px}.notes-input:focus{border-color:var(--accent)}.notes-list{flex-direction:column;margin-top:12px;display:flex}.note-row{border-top:1px solid var(--hairline-soft);align-items:center;gap:10px;padding:7px 0;display:flex}.note-row:first-child{border-top:none}.note-check{accent-color:var(--accent);flex:0 0 13px;width:13px;height:13px}.note-frozen{text-align:center;width:13px;color:var(--text-3);flex:0 0 13px}.note-text{min-width:0;color:var(--text);text-wrap:pretty;flex:1;font-size:12.5px}.note-row.is-done .note-text{color:var(--text-3);text-decoration:line-through}.note-row.is-promoted .note-text{color:var(--text-2)}.note-ticket{text-overflow:ellipsis;white-space:nowrap;max-width:40%;font-family:var(--mono);color:var(--text-3);flex:0 auto;font-size:11px;overflow:hidden}.note-actions{opacity:0;transition:opacity var(--dur-1);flex:none;gap:4px;display:flex}.note-row:hover .note-actions,.note-row:focus-within .note-actions,.note-row.is-editing .note-actions{opacity:1}.shipped-hero{text-align:center;max-width:560px;animation:fadeUp var(--dur-3) var(--ease-out);margin:36px auto 0}.shipped-check{border:1px solid color-mix(in srgb, var(--ok) 45%, transparent);width:40px;height:40px;color:var(--ok);animation:popIn var(--dur-3) var(--ease-out);border-radius:50%;justify-content:center;align-items:center;margin:0 auto;font-size:17px;display:flex}.shipped-title{margin-top:14px;font-size:16px;font-weight:600}.shipped-meta{font-family:var(--mono);color:var(--text-2);align-items:center;gap:5px;margin-top:6px;font-size:12px;display:inline-flex}.shipped-sub{color:var(--text-3);margin-top:10px;font-size:12.5px;line-height:1.55}.shipped-body{flex-direction:column;gap:18px;display:flex}.shipped-session .grill-term{height:clamp(300px,100dvh - 420px,1200px)}.draft-body{flex-direction:column;gap:18px;max-width:640px;margin:0 auto;display:flex}.draft-hero{animation:fadeUp var(--dur-3) var(--ease-out);margin-top:28px}.draft-kick{letter-spacing:.09em;color:var(--text-4);align-items:center;gap:6px;font-size:10px;font-weight:700;display:flex}.draft-glyph{font-size:12px;line-height:1}.draft-title{margin-top:8px;font-size:16px;font-weight:600}.draft-oneliner{color:var(--text-2);margin-top:6px;font-size:13px;line-height:1.55}.draft-sub{color:var(--text-3);margin-top:12px;font-size:12.5px;line-height:1.55}.draft-brief.is-empty{color:var(--text-4)}.draft-advanced-summary{cursor:pointer;color:var(--text-3);-webkit-user-select:none;user-select:none;font-size:11.5px}.draft-advanced[open] .draft-advanced-summary{margin-bottom:8px}.tag.is-draft{color:var(--text-4)}.nf-overlay{flex:1;justify-content:center;align-items:center;padding:24px;display:flex}.nf-card{border:1px solid var(--hairline);border-radius:var(--radius-lg);background:var(--panel);width:540px;max-width:100%;animation:popIn var(--dur-3) var(--ease-out);padding:26px 28px}.nf-kick{letter-spacing:.09em;color:var(--accent-hi);font-size:11px;font-weight:700}.nf-h{margin-top:6px;font-size:16px;font-weight:600}.nf-sub{color:var(--text-2);margin-top:5px;font-size:12.5px;line-height:1.55}.nf-input{background:var(--panel-inset);border:1px solid var(--hairline);border-radius:var(--radius);width:100%;height:36px;color:var(--text);transition:border-color var(--dur-1);outline:none;margin-top:18px;padding:0 12px;font-family:inherit;font-size:13px}.nf-input:focus{border-color:var(--accent)}.nf-oneliner{height:32px;margin-top:8px;font-size:12.5px}.nf-textarea{resize:vertical;height:132px;margin-top:8px;padding:10px 12px;font-size:12.5px;line-height:1.55}.size-hint{color:var(--text-3);font-size:12px}.nf-base{flex-wrap:wrap;align-items:center;gap:10px;margin-top:16px;display:flex}.nf-base-label{color:var(--text);font-size:13px}.nf-base-select{background:var(--panel-inset);border:1px solid var(--hairline);border-radius:var(--radius);height:30px;color:var(--text);font-family:var(--mono);cursor:pointer;transition:border-color var(--dur-1);outline:none;padding:0 8px;font-size:11.5px}.nf-base-select:focus{border-color:var(--accent)}.nf-base-select:disabled{opacity:.5;cursor:default}.nf-branch{font-family:var(--mono);color:var(--text-3);margin-top:16px;font-size:11.5px}.nf-actions{justify-content:flex-end;gap:10px;margin-top:22px;display:flex}.nf-discard{border:1px solid color-mix(in srgb, var(--warn,#d9a441) 45%, var(--hairline));border-radius:var(--radius);background:color-mix(in srgb, var(--warn,#d9a441) 7%, var(--panel-2));align-items:center;gap:8px;margin-top:16px;padding:10px 12px;display:flex}.nf-discard-text{color:var(--text);font-size:12.5px}.nf-discard-spacer{flex:1}.nf-dupe{color:var(--warn,#d9a441);margin-top:8px;font-size:12px;line-height:1.5}.nf-advanced{margin-top:16px}.nf-advanced-summary{color:var(--text-2);cursor:pointer;-webkit-user-select:none;user-select:none;width:fit-content;font-size:12.5px}.nf-advanced-summary:hover{color:var(--text)}.nf-advanced[open] .nf-advanced-summary{color:var(--text);margin-bottom:4px}.nf-advanced .nf-base{margin-top:10px}.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}.sb-live-dot{background:var(--ok);border-radius:50%;flex:none;width:6px;height:6px}.sb-live.is-degraded{color:var(--warn,#d9a441)}.sb-live.is-degraded .sb-live-dot{background:var(--warn,#d9a441);animation:1.4s ease-in-out infinite pulse}.cmdk-backdrop{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:300;animation:backdropIn var(--dur-2) var(--ease-out);background:#04060a8c;justify-content:center;align-items:flex-start;padding:12vh 16px 16px;display:flex;position:fixed;inset:0}.cmdk{background:var(--panel);border:1px solid var(--hairline-strong);border-radius:var(--radius-lg);width:100%;max-width:560px;animation:cmdkIn var(--dur-2) var(--ease-out);overflow:hidden;box-shadow:0 24px 60px -20px #000c}.cmdk-input{border:none;border-bottom:1px solid var(--hairline);width:100%;height:46px;color:var(--text);background:0 0;outline:none;padding:0 16px;font-family:inherit;font-size:14px}.cmdk-input::placeholder{color:var(--text-3)}.cmdk-list{max-height:340px;padding:6px;overflow-y:auto}.cmdk-group-label{letter-spacing:.09em;text-transform:uppercase;color:var(--text-4);padding:8px 10px 4px;font-size:10px;font-weight:700}.cmdk-item{border-radius:var(--radius-sm);cursor:pointer;color:var(--text-2);align-items:center;gap:10px;padding:8px 10px;display:flex}.cmdk-item.is-active{background:var(--panel-3);color:var(--text)}.cmdk-item-glyph{width:16px;color:var(--text-3);flex:none;justify-content:center;align-items:center;display:inline-flex}.cmdk-item-label{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:13px;overflow:hidden}.cmdk-item-slug{font-family:var(--mono);color:var(--text-4);font-size:11px}.cmdk-item-hint{color:var(--text-4);font-size:11px}.cmdk-item-current{letter-spacing:.06em;text-transform:uppercase;color:var(--accent-hi);font-size:10px}.cmdk-empty{text-align:center;color:var(--text-3);padding:24px;font-size:13px}.cmdk-foot{border-top:1px solid var(--hairline);color:var(--text-4);align-items:center;gap:14px;padding:8px 14px;font-size:11px;display:flex}.cmdk-foot .kbd{font-size:10px}.md{font-family:var(--sans);color:var(--text-2);white-space:normal;font-size:11.5px;line-height:1.55}.md>:first-child{margin-top:0}.md>:last-child{margin-bottom:0}.md h1,.md h2,.md h3{color:var(--text);margin:12px 0 5px;font-weight:600;line-height:1.3}.md h1{letter-spacing:-.01em;font-size:14px}.md h2{font-size:12.5px}.md h3{color:var(--text-2);font-size:11.5px}.md p{margin:0 0 7px}.md ul,.md ol{margin:0 0 7px;padding-left:17px}.md li{margin-bottom:2.5px}.md li::marker{color:var(--text-4)}.md strong{color:var(--text);font-weight:600}.md em{color:var(--text-2)}.md a{color:var(--accent-hi);border-bottom:1px solid var(--accent-line);text-decoration:none}.md code{font-family:var(--mono);background:var(--panel-inset);border:1px solid var(--hairline-soft);color:var(--accent-hi);border-radius:3px;padding:.5px 4px;font-size:10.5px}.md pre{background:var(--panel-inset);border:1px solid var(--hairline-soft);border-radius:var(--radius-sm);margin:0 0 8px;padding:8px 10px;overflow-x:auto}.md pre code{color:var(--text-2);background:0 0;border:0;padding:0;font-size:10.5px}.md blockquote{border-left:2px solid var(--accent-line);color:var(--text-3);margin:0 0 8px;padding-left:10px}.md table{border-collapse:collapse;width:100%;margin:0 0 8px;font-size:11px}.md th,.md td{border:1px solid var(--hairline);text-align:left;padding:4px 7px}.md th{background:var(--panel);color:var(--text-2);font-weight:600}.md hr{border:0;border-top:1px solid var(--hairline);margin:10px 0}.md .contains-task-list{padding-left:2px;list-style:none}.md input[type=checkbox]{accent-color:var(--accent);vertical-align:-1px;margin-right:5px}.peek-backdrop{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);z-index:200;animation:backdropIn var(--dur-2) var(--ease-out);background:#030508b8;justify-content:center;align-items:flex-start;padding:8vh 16px 16px;display:flex;position:fixed;inset:0}.peek{background:var(--panel);border:1px solid var(--hairline-strong);border-radius:var(--radius-lg);width:100%;max-width:780px;max-height:82vh;animation:cmdkIn var(--dur-2) var(--ease-out);flex-direction:column;display:flex;overflow:hidden}.peek-head{border-bottom:1px solid var(--hairline);justify-content:space-between;align-items:center;padding:10px 14px;display:flex}.peek-path{color:var(--text-2);font-size:12px}.peek-close{color:var(--text-3);cursor:pointer;background:0 0;border:none;font-size:12px}.peek-close:hover{color:var(--text)}.peek-body{padding:14px 18px;overflow:auto}.peek-body .md{font-size:12.5px}.peek-pre{font-family:var(--mono);white-space:pre-wrap;word-break:break-word;color:var(--text);margin:0;font-size:12.5px;line-height:1.6}.peek.settings{max-width:620px}.settings-title{color:var(--text);font-size:13px;font-weight:600}.settings-body{flex-direction:column;gap:26px;display:flex}.settings-autosave{color:var(--text-3);border-left:2px solid var(--accent-line,var(--hairline));padding-left:10px;font-size:11.5px;line-height:1.55}.settings-section{flex-direction:column;gap:14px;display:flex}.settings-section-head{border-bottom:1px solid var(--hairline);align-items:baseline;gap:10px;padding-bottom:8px;display:flex}.settings-section-title{letter-spacing:.09em;text-transform:uppercase;color:var(--text-2);margin:0;font-size:11px;font-weight:700}.settings-section-hint{color:var(--text-4);font-size:11.5px}.settings-field{flex-direction:column;gap:5px;display:flex}.settings-field-head{align-items:center;gap:8px;display:flex}.settings-field-label{color:var(--text);font-size:12.5px}.settings-field.is-locked .settings-field-label{color:var(--text-2)}.settings-field-help{color:var(--text-4);font-size:11.5px;line-height:1.4}.settings-badge{letter-spacing:.04em;text-transform:uppercase;border:1px solid var(--hairline-strong);color:var(--text-3);border-radius:999px;padding:1px 6px;font-size:9.5px}.settings-badge.is-warn{color:var(--drive);border-color:color-mix(in srgb, var(--drive) 40%, transparent)}.settings-badge.is-override{color:var(--accent-hi);border-color:var(--accent-line)}.settings-badge.is-verified{color:var(--ok);border-color:color-mix(in srgb, var(--ok) 40%, transparent)}.settings-badge.is-unverified{color:var(--needs);border-color:color-mix(in srgb, var(--needs) 40%, transparent)}.settings-saving{color:var(--text-4);font-size:10.5px;font-style:italic}.settings-input{background:var(--panel-inset);border:1px solid var(--hairline);border-radius:var(--radius);width:100%;height:32px;color:var(--text);transition:border-color var(--dur-1);outline:none;padding:0 10px;font-family:inherit;font-size:12.5px}.settings-input:focus{border-color:var(--accent)}.settings-input:disabled{opacity:.6;cursor:progress}select.settings-input{cursor:pointer}.settings-textarea{resize:vertical;height:auto;min-height:32px;padding:7px 10px;line-height:1.5}.settings-readonly{background:var(--panel-inset);border:1px dashed var(--hairline);border-radius:var(--radius);min-height:32px;color:var(--text-2);align-items:center;padding:0 10px;font-size:12.5px;display:flex}.settings-field-note{color:var(--text-4);font-size:11px}.settings-field-error{color:var(--danger);font-size:11px}.settings-field-evidence,.prep-finding-evidence{color:var(--text-3);background:var(--panel-inset);border-left:2px solid var(--accent-line);border-radius:0 var(--radius) var(--radius) 0;white-space:pre-wrap;overflow-wrap:anywhere;padding:5px 7px;font-size:11px;line-height:1.45}.prep-stack{flex-direction:column;gap:18px;display:flex}.prep-stack .pw-frame{margin-bottom:0}.prep-warn{color:var(--text-2);background:color-mix(in srgb, var(--drive) 10%, transparent);border:1px solid color-mix(in srgb, var(--drive) 35%, transparent);border-radius:var(--radius);padding:7px 9px;font-size:11.5px;line-height:1.5}.prep-dryrun{border-radius:var(--radius);background:color-mix(in srgb, var(--drive) 10%, transparent);border:1px solid color-mix(in srgb, var(--drive) 35%, transparent);align-items:center;gap:9px;padding:8px 11px;display:flex}.prep-dryrun-label{color:var(--drive);font-size:12.5px;font-weight:600}.prep-dryrun-url{color:var(--text-2);font-size:11.5px}.prep-dryrun-waiting{color:var(--text-3)}.prep-dryrun-spacer{flex:1}.prep-cta{text-align:center;flex-direction:column;align-items:center;gap:12px;padding:40px 0 28px;display:flex}.prep-cta-logo{opacity:.85;display:flex}.prep-cta-title{color:var(--text-1);font-size:15px;font-weight:500}.prep-cta-sub{color:var(--text-3);max-width:52ch;font-size:12.5px;line-height:1.6}.prep-cta-open{flex-wrap:wrap;justify-content:center;gap:6px;max-width:56ch;margin:0;padding:0;list-style:none;display:flex}.prep-cta .prep-warn,.prep-cta .pw-frame{text-align:left;width:100%;max-width:62ch}.prep-cta-actions{align-items:center;gap:8px;display:flex}.prep-cta-open li{color:var(--text-3);border:1px solid var(--hairline);background:var(--panel-3);border-radius:999px;padding:3px 8px;font-size:11px}.prep-nudge{border:none;border-top:1px solid var(--hairline);width:100%;color:var(--text-3);text-align:left;cursor:pointer;transition:background var(--dur-1) var(--ease), color var(--dur-1) var(--ease);background:0 0;flex:none;align-items:center;gap:8px;padding:9px 12px;font-size:11.5px;display:flex}.prep-nudge:hover{background:var(--panel-3);color:var(--text-2)}.prep-nudge-dot{background:var(--drive);border-radius:50%;flex:none;width:7px;height:7px}.prep-nudge.is-done{color:var(--text-4)}.prep-nudge.is-done .prep-nudge-dot{box-shadow:inset 0 0 0 1px var(--text-4);background:0 0}.prep-nudge-text{flex:1;min-width:0}.prep-nudge-count{color:var(--text-4);white-space:nowrap;flex:none;font-size:10.5px}.prep-findings{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.prep-finding{flex-direction:column;gap:4px;display:flex}.prep-finding-head{align-items:baseline;gap:7px;display:flex}.prep-finding-key{color:var(--text-1);font-size:12px}.prep-finding-note{color:var(--text-4);font-size:11px}.prep-finding.is-stale .prep-finding-note{color:var(--drive)}.settings-clear{color:var(--text-3);cursor:pointer;text-underline-offset:2px;background:0 0;border:none;align-self:flex-start;margin-top:2px;padding:0;font-size:11px;text-decoration:underline}.settings-clear:hover:not(:disabled){color:var(--accent-hi)}.settings-clear:disabled{opacity:.5;cursor:default}.settings-combo{flex-direction:column;gap:6px;display:flex}.settings-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}}