@seqyuan/ennote 0.14.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/out/404.html +1 -1
  2. package/out/__next.__PAGE__.txt +3 -3
  3. package/out/__next._full.txt +13 -13
  4. package/out/__next._head.txt +4 -4
  5. package/out/__next._index.txt +7 -7
  6. package/out/__next._tree.txt +2 -2
  7. package/out/_next/static/chunks/0pzgp1v~.454n.css +1 -0
  8. package/out/_next/static/chunks/0qpe-en7gygy..js +1 -0
  9. package/out/_next/static/chunks/0upcnmb.rkk-u.js +8 -0
  10. package/out/_not-found/__next._full.txt +12 -12
  11. package/out/_not-found/__next._head.txt +4 -4
  12. package/out/_not-found/__next._index.txt +7 -7
  13. package/out/_not-found/__next._not-found.__PAGE__.txt +2 -2
  14. package/out/_not-found/__next._not-found.txt +3 -3
  15. package/out/_not-found/__next._tree.txt +2 -2
  16. package/out/_not-found.html +1 -1
  17. package/out/_not-found.txt +12 -12
  18. package/out/graphs/__next._full.txt +13 -13
  19. package/out/graphs/__next._head.txt +4 -4
  20. package/out/graphs/__next._index.txt +7 -7
  21. package/out/graphs/__next._tree.txt +2 -2
  22. package/out/graphs/__next.graphs.__PAGE__.txt +3 -3
  23. package/out/graphs/__next.graphs.txt +3 -3
  24. package/out/graphs.html +1 -1
  25. package/out/graphs.txt +13 -13
  26. package/out/heroes/__next._full.txt +13 -13
  27. package/out/heroes/__next._head.txt +4 -4
  28. package/out/heroes/__next._index.txt +7 -7
  29. package/out/heroes/__next._tree.txt +2 -2
  30. package/out/heroes/__next.heroes.__PAGE__.txt +3 -3
  31. package/out/heroes/__next.heroes.txt +3 -3
  32. package/out/heroes.html +1 -1
  33. package/out/heroes.txt +13 -13
  34. package/out/index.html +2 -2
  35. package/out/index.txt +13 -13
  36. package/package.json +1 -1
  37. package/skills/generative-canvas/SKILL.md +121 -0
  38. package/skills/generative-canvas/skill.json +7 -0
  39. package/out/_next/static/chunks/06_y.lv_svbtb.css +0 -1
  40. package/out/_next/static/chunks/083xw1nubbiw6.js +0 -1
  41. package/out/_next/static/chunks/0u~0j2k3ooiya.js +0 -8
  42. /package/out/_next/static/{g1rJaZRqv7r0ZY4hnAnlq → NNcQQusKb3xj-mW5pnt-E}/_buildManifest.js +0 -0
  43. /package/out/_next/static/{g1rJaZRqv7r0ZY4hnAnlq → NNcQQusKb3xj-mW5pnt-E}/_clientMiddlewareManifest.js +0 -0
  44. /package/out/_next/static/{g1rJaZRqv7r0ZY4hnAnlq → NNcQQusKb3xj-mW5pnt-E}/_ssgManifest.js +0 -0
@@ -0,0 +1,121 @@
1
+ # Generative Canvas
2
+
3
+ A **widget** is an HTML page the reader sees live in the conversation: an SVG
4
+ diagram, an interactive chart, a calculator, a parameter explorer. Unlike a
5
+ `static_html` artifact it may run scripts — inside an isolated frame with no
6
+ network, no cookies and no access to the Workspace.
7
+
8
+ Use it when the answer is a picture the user should be able to poke at. Do not use
9
+ it for ordinary prose, tables, or files.
10
+
11
+ ## How to publish one
12
+
13
+ 1. Write the page into the Workspace with `write` (or generate it with a script and
14
+ `publish_artifact` the result):
15
+
16
+ ```
17
+ write({ path: "/workspace/canvas.html", content: "<!doctype html>…" })
18
+ ```
19
+
20
+ 2. Publish it, naming the kind:
21
+
22
+ ```
23
+ publish_artifact({ path: "/workspace/canvas.html", kind: "widget" })
24
+ ```
25
+
26
+ `kind: "widget"` is required. Without it an `.html` file is published as
27
+ `static_html`, which is sanitized into a script-free document — your SVG and your
28
+ script would both disappear.
29
+
30
+ ## Hard limits
31
+
32
+ | Limit | Value | Why |
33
+ |---|---|---|
34
+ | Size | **128 KiB** | it travels to phones over a bounded channel; this is not a document download |
35
+ | Extension | `.html` / `.htm`, UTF-8, starts with a tag | classification |
36
+ | Scripts | inline, or from `cdnjs.cloudflare.com`, `cdn.jsdelivr.net`, `unpkg.com`, `esm.sh` | the only allowed hosts |
37
+ | Network | **none** — no `fetch`, no `XHR`, no WebSocket, no remote images | the frame is sandboxed |
38
+ | Images | inline SVG, `data:` or `blob:` | remote `img` is blocked on purpose |
39
+ | `eval` / `new Function` | blocked | no `unsafe-eval` |
40
+ | Width | 320–900 px, fluid | the frame is a message, not a screen |
41
+ | Height | measured and reported; capped at 900 px in the timeline | beyond that it scrolls inside the frame |
42
+
43
+ If a widget needs data, **you** read it and inline a bounded snapshot:
44
+
45
+ ```
46
+ read({ path: "/workspace/markers.csv" }) → embed at most a few hundred rows
47
+ ```
48
+
49
+ A widget cannot read anything itself. Inlining is also what makes it auditable: the
50
+ published bytes carry the data that produced the picture.
51
+
52
+ ## Structure
53
+
54
+ ```html
55
+ <!doctype html>
56
+ <style>
57
+ .card { background: var(--color-background-secondary); color: var(--color-text-primary);
58
+ border: 1px solid var(--color-border-secondary); border-radius: var(--radius-md); }
59
+ </style>
60
+ <div class="card">
61
+ <svg viewBox="0 0 640 320" width="100%" height="320">…</svg>
62
+ </div>
63
+ <script>
64
+ // runs after the markup; keep it at the end
65
+ </script>
66
+ ```
67
+
68
+ Rules of thumb:
69
+
70
+ - **Self-contained first.** Inline SVG and inline CSS beat a CDN. Use Chart.js (from
71
+ `cdnjs.cloudflare.com`) only when a real chart is needed, and never a chart library
72
+ for something four `<rect>`s can draw.
73
+ - **Never fix a pixel width.** Use `width="100%"` and a `viewBox`; the frame is
74
+ narrow on a phone.
75
+ - **Put `<script>` at the very end.** Scripts before the content delay the first
76
+ paint and the height report.
77
+ - **Stay under a few hundred DOM nodes.** A canvas that repaints constantly will
78
+ visibly cost a phone battery.
79
+
80
+ ## Theme
81
+
82
+ The frame receives these CSS custom properties, already resolved for the current
83
+ light/dark theme. Use them instead of literal colors so the widget belongs to the
84
+ app:
85
+
86
+ | Property | Use |
87
+ |---|---|
88
+ | `--color-background-primary` / `-secondary` / `-tertiary` | page, card, inset |
89
+ | `--color-text-primary` / `-secondary` / `-tertiary` | headings, body, captions |
90
+ | `--color-border-primary` / `-secondary` / `-tertiary` | box edges |
91
+ | `--color-accent` | the one thing to look at |
92
+ | `--color-background-success` / `-warning` / `-danger` / `-info` | status fills |
93
+ | `--color-text-success` / `-warning` / `-danger` / `-info` | status text |
94
+ | `--color-chart-1` … `--color-chart-6` | categorical series |
95
+ | `--font-sans` / `--font-mono` | typography |
96
+ | `--radius-sm` / `-md` / `-lg` | corners |
97
+
98
+ Body text at 14 px, captions no smaller than 11 px. The theme can change while the
99
+ widget is on screen; anything styled with these properties follows automatically.
100
+
101
+ ## Picking a form
102
+
103
+ | The question is about | Draw |
104
+ |---|---|
105
+ | a process, pipeline, or decision path | flowchart: boxes, arrows, one decision shape |
106
+ | change over time | line chart, or a timeline with labelled events |
107
+ | composition, proportions | stacked bar or a small multiple; a pie only for two or three parts |
108
+ | ranking | sorted horizontal bars, labels at the left |
109
+ | relationships | node-link diagram, at most ~15 nodes |
110
+ | a comparison of two things | two matching columns with the same rows |
111
+
112
+ Every widget needs a caption inside the page saying what it shows and in what
113
+ units. A picture with no units is decoration.
114
+
115
+ ## Failure is visible
116
+
117
+ A script that throws, or a dependency that cannot load, degrades the widget in
118
+ place: the reader sees the drawing plus a notice and a link to the source. Nothing
119
+ you publish can break the conversation, the panel, or a later message. That is a
120
+ safety net, not a licence — publish a page you have reasoned about, not one that
121
+ might hang.
@@ -0,0 +1,7 @@
1
+ {
2
+ "id": "generative-canvas",
3
+ "version": "0.1.0",
4
+ "description": "Publish an interactive HTML canvas (SVG diagram, chart, calculator) as a widget artifact",
5
+ "prompt": "SKILL.md",
6
+ "allowedTools": ["read", "write", "publish_artifact", "ls", "grep", "find"]
7
+ }
@@ -1 +0,0 @@
1
- ::view-transition-old(root){mix-blend-mode:normal;animation:none}::view-transition-new(root){mix-blend-mode:normal;animation:none}::view-transition-old(root){z-index:1}::view-transition-new(root){z-index:2}*{box-sizing:border-box;margin:0;padding:0}html,body{background:var(--bg);height:100%;color:var(--text);overscroll-behavior:none;margin:0;padding:0}body{font-family:var(--font-sans);font-size:var(--text-base);height:100dvh;line-height:1.55}button,input,textarea,select{font:inherit}button,summary,label{-webkit-tap-highlight-color:transparent}button:focus-visible,summary:focus-visible,textarea:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}button:disabled{cursor:default}::selection{background:var(--bg-selected)}::-webkit-scrollbar{width:4px;height:4px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}::-webkit-scrollbar-thumb:hover{background:var(--text-dim)}.resize-handle{background:0 0}.resize-handle:before{content:"";position:absolute;inset:0}.resize-handle-line{background:0 0;width:1px;height:100%;transition:background-color .15s}.resize-handle:hover .resize-handle-line,.resize-handle.resize-handle-dragging .resize-handle-line{background:var(--accent)}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.app-shell{background:var(--bg);height:100dvh;display:flex;overflow:hidden}.sidebar-container{background:var(--bg-panel);border-right:1px solid var(--border);z-index:var(--layer-drawer);flex-direction:column;flex-shrink:0;display:flex}.sidebar-overlay-backdrop{z-index:var(--layer-drawer-backdrop);opacity:0;pointer-events:none;background:#0006;transition:opacity .25s;position:fixed;inset:0}.sidebar-overlay-backdrop[data-open=true]{opacity:1;pointer-events:auto}.workspace-content{flex-direction:column;flex:1;min-width:0;display:flex;overflow:hidden}.app-topbar{border-bottom:1px solid var(--border);background:var(--bg);flex-shrink:0;align-items:center;gap:8px;height:48px;padding:0 8px;display:flex}.topbar-title-area{flex:1;align-items:center;gap:7px;min-width:0;display:flex}.topbar-title-group{align-items:center;gap:6px;min-width:0;display:flex}.topbar-title-input{box-sizing:border-box;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-panel);width:min(360px,34vw);height:28px;color:var(--text);font-size:var(--text-md);outline:none;padding:0 8px;font-weight:500}.topbar-session-title{text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:min(420px,36vw);color:var(--text);font-size:var(--text-base);font-weight:600;line-height:1.2;overflow:hidden}.topbar-title-edit{border-radius:var(--radius-xs);width:24px;height:24px;color:var(--text-dim);cursor:pointer;background:0 0;border:none;flex:none;place-items:center;padding:0;display:grid}.topbar-title-edit:hover{color:var(--text);background:var(--bg-hover)}.topbar-project-sep{color:var(--text-dim);font-size:var(--text-sm);flex-shrink:0}.topbar-project-crumb{text-overflow:ellipsis;white-space:nowrap;min-width:0;max-width:min(280px,24vw);color:var(--text-muted);font-size:var(--text-sm);line-height:1.2;overflow:hidden}.branch-control{flex:none;position:relative}.branch-trigger{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-panel);height:32px;color:var(--text-muted);font-size:var(--text-sm);cursor:pointer;align-items:center;gap:6px;padding:0 9px;font-weight:500;line-height:1;display:inline-flex}.branch-trigger:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.branch-trigger:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.branch-trigger:disabled{opacity:.5;cursor:default}.branch-trigger small{border-radius:var(--radius-full);background:var(--bg-selected);min-width:16px;height:16px;color:var(--text-muted);font-size:var(--text-xs);place-items:center;padding:0 4px;font-weight:600;display:inline-grid}.branch-menu{z-index:var(--layer-branch-menu);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg);width:250px;box-shadow:var(--elevation-2);padding:4px;position:absolute;top:calc(100% + 6px);right:0}.branch-menu button{border-radius:var(--radius-sm);width:100%;min-height:40px;color:var(--text);text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:8px;padding:7px 8px;display:flex}.branch-menu button:hover{background:var(--bg-hover)}.branch-menu button>span{flex-direction:column;flex:1;min-width:0;display:flex}.branch-menu strong{font-size:var(--text-sm);font-weight:500}.branch-menu small{color:var(--text-muted);font-size:var(--text-xs)}.right-panel-back-button{border:0;border-bottom:1px solid var(--border);background:var(--bg-panel);min-height:38px;color:var(--text-muted);cursor:pointer;font-size:var(--text-sm);text-align:left;align-items:center;gap:7px;padding:0 10px;display:none}.right-panel-back-button:hover{color:var(--text);background:var(--bg-hover)}@media (max-width:640px){.right-panel-back-button{display:flex}}@media (min-width:641px){.sidebar-overlay-backdrop{display:none!important}.sidebar-container{transition:width .2s,min-width .2s;position:relative;overflow:hidden}.sidebar-container.sidebar-closed{visibility:hidden;pointer-events:none;transition:width .2s,min-width .2s,visibility 0s linear .2s;border-right:none!important;width:0!important;min-width:0!important}.sidebar-container>*{width:100%;min-width:180px}}.right-panel-container{background:var(--bg);border-left:1px solid var(--border);flex-direction:column;display:flex}.right-panel-body{flex:1;min-height:0;overflow:hidden}.right-panel-channel-slot{flex-direction:column;height:100%;min-height:0;display:flex}.right-panel-channel-slot[hidden]{display:none}.right-panel-pane-strips,.right-panel-panes{min-width:0;display:flex}.right-panel-pane-strips>*{flex:50%;min-width:0}.right-panel-panes{height:100%;min-height:0;display:flex}.right-panel-pane{flex-direction:column;flex:1 1 0;min-width:0;min-height:0;display:flex;overflow:hidden}.right-panel-pane>*{flex:auto;min-height:0}.right-panel-panes.is-split{padding-right:28px}.right-panel-panes.is-split .right-panel-pane+.right-panel-pane{border-left:1px solid var(--border)}.right-panel-strip{flex:none;align-items:stretch;min-width:0;display:flex}.right-panel-strip>[role=tablist]{flex:auto;min-width:0}.right-panel-strip-action{border:none;border-left:1px solid var(--border);background:var(--bg-panel);width:26px;color:var(--text-dim);cursor:pointer;flex:none;justify-content:center;align-items:center;display:flex}.right-panel-strip-action:hover{color:var(--text);background:var(--bg-hover)}.right-panel-strip-action[aria-pressed=true]{color:var(--accent)}.right-panel-launcher{flex-direction:column;gap:8px;padding:20px 16px;display:flex}.right-panel-launcher-hint{color:var(--text-dim);font-size:var(--text-sm);margin:0 0 4px;line-height:1.5}.right-panel-launcher-card{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-panel);color:var(--text);font-size:var(--text-sm);text-align:left;cursor:pointer;align-items:center;gap:9px;padding:9px 11px;display:flex}.right-panel-launcher-card:hover{background:var(--bg-hover)}.right-panel-launcher-card svg{color:var(--text-muted)}.right-panel-tools{flex-direction:column;height:100%;min-height:0;display:flex}.right-panel-summary{color:var(--text-dim);font-size:var(--text-xs);margin-top:auto;padding:0 16px 12px}@media (min-width:641px){.right-panel-container{flex-shrink:0;transition:width .2s,min-width .2s;overflow:hidden}.right-panel-container.right-panel-closed{border-left:none!important;width:0!important;min-width:0!important;display:none!important}}@media (min-width:641px) and (max-width:960px){.right-panel-container{z-index:var(--layer-mobile-panel);inset:0;border-left:none!important;width:100%!important;min-width:0!important;max-width:none!important;position:fixed!important}.right-panel-container.right-panel-closed{width:0!important;display:none!important}.right-panel-container.right-panel-open{display:flex!important}.right-panel-back-button{display:flex}[aria-label="Resize right panel"]{display:none!important}}@media (max-width:640px){.sidebar-container{max-width:85vw;transition:transform .25s,box-shadow .25s;top:0;bottom:0;left:0;width:min(280px,85vw)!important;min-width:0!important;position:fixed!important}.sidebar-container.sidebar-open{transform:translate(0);box-shadow:4px 0 20px #00000026}.sidebar-container.sidebar-closed{box-shadow:none;pointer-events:none;transform:translate(-100%)}.right-panel-container{z-index:var(--layer-mobile-panel);inset:0;position:fixed!important}.right-panel-container.right-panel-open{width:100%!important;min-width:0!important}.right-panel-container.right-panel-closed{border-left:none!important;width:0!important;min-width:0!important;display:none!important}.resize-handle{display:none!important}.app-topbar{flex-wrap:nowrap;min-height:52px;align-items:center!important;gap:6px!important;height:52px!important;padding:6px 8px!important}.topbar-project-crumb{display:none!important}.branch-trigger>span{display:none}.branch-trigger{padding:0 8px}}.sidebar-sessions{min-height:0;overflow-y:auto}.icon-command{border:1px solid var(--border);border-radius:var(--radius-sm);width:32px;height:32px;color:var(--text-muted);cursor:pointer;background:0 0;flex:0 0 32px;place-items:center;padding:0;display:inline-grid}.icon-command:not(:disabled):hover{background:var(--bg-hover);color:var(--text);border-color:var(--text-dim)}.icon-command:disabled,.icon-command.is-disabled{opacity:.42;cursor:default}.sidebar-settings{margin-top:auto}.session-list{margin:0;padding:0;list-style:none}.navigation-close{margin-left:auto;display:none}.sidebar-project-group{margin-bottom:2px}.sidebar-project-group>div:nth-child(2){margin:0 6px}.sidebar-archived-toggle{border-radius:var(--radius-sm);width:100%;color:var(--text-dim);cursor:pointer;font-size:var(--text-xs);background:0 0;border:0;align-items:center;gap:5px;margin:2px 0 6px;padding:5px 10px;font-weight:600;display:flex}.sidebar-archived-toggle:hover{background:var(--bg-hover);color:var(--text-muted)}.sidebar-empty{color:var(--text-dim);font-size:var(--text-xs);padding:14px 12px;line-height:1.45}.chat-area{background:var(--bg);flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.error-bar{background:var(--danger-soft);color:var(--danger);font-size:var(--text-md);flex-shrink:0;justify-content:space-between;align-items:center;gap:12px;padding:7px 16px;display:flex}.error-bar button{color:currentColor;cursor:pointer;background:0 0;border:0;place-items:center;display:grid}.recovery-bar{border-bottom:1px solid var(--border);background:var(--bg-panel);color:var(--text-muted);font-size:var(--text-xs);flex-shrink:0;justify-content:space-between;align-items:center;gap:16px;padding:8px 18px;display:flex}.recovery-bar span{overflow-wrap:anywhere;align-items:baseline;gap:7px;min-width:0;display:flex}.recovery-bar strong{color:var(--text)}.recovery-bar.is-blocked strong{color:var(--warning)}.recovery-bar button{border:1px solid var(--text-dim);border-radius:var(--radius-xs);background:var(--bg);height:28px;color:var(--text);cursor:pointer;font-size:var(--text-xs);flex:none;padding:0 11px;font-weight:700}.recovery-bar button:hover:not(:disabled){background:var(--bg-hover)}.recovery-bar button:disabled{opacity:.55;cursor:default}.chat-scroll-region{flex:1;min-height:0;display:flex;position:relative}.messages{overscroll-behavior:contain;flex:1;min-height:0;overflow-y:auto}.chat-jump-latest{z-index:var(--layer-sticky);border:1px solid var(--border);border-radius:var(--radius-full);background:color-mix(in srgb, var(--bg) 94%, transparent);color:var(--text-muted);box-shadow:var(--shadow-menu);font-size:var(--text-sm);cursor:pointer;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);align-items:center;gap:6px;padding:6px 12px;transition:color .12s,border-color .12s;display:inline-flex;position:absolute;bottom:12px;left:50%;transform:translate(-50%)}.chat-jump-latest:hover{color:var(--text);border-color:var(--text-dim)}.chat-jump-latest[data-new=true]{color:var(--accent);border-color:color-mix(in srgb, var(--accent) 40%, var(--border))}.conversation-viewport{width:min(100%,920px);min-height:100%;margin:0 auto;padding:22px 28px 36px}.conversation-list{flex-direction:column;gap:0;display:flex}.conversation-turn{flex-direction:column;gap:18px;padding:0 0 36px;display:flex}.conversation-turn+.conversation-turn{padding-top:2px}.user-row{flex-direction:column;justify-content:flex-end;align-items:flex-end;gap:4px;display:flex}.user-message{overflow-wrap:anywhere;border:1px solid color-mix(in srgb, var(--border) 78%, var(--accent));border-radius:var(--radius-sm);background:var(--user-bg);max-width:min(76%,680px);color:var(--text);padding:10px 13px}.collapsible-message-body{min-width:0}.collapsible-message[data-collapsed=true] .collapsible-message-body{max-height:260px;overflow:hidden;-webkit-mask-image:linear-gradient(#000 72%,#0000 100%);mask-image:linear-gradient(#000 72%,#0000 100%)}.collapsible-message-toggle{color:var(--accent);font-size:var(--text-xs);cursor:pointer;background:0 0;border:0;margin:6px 0 0 auto;padding:0;font-weight:600;display:block}.collapsible-message-toggle:hover{text-decoration:underline}.collapsible-message-toggle:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px;border-radius:var(--radius-xs)}.agent-flow{flex-direction:column;gap:16px;min-width:0;padding-left:18px;display:flex}.assistant-step{min-width:0;color:var(--text)}.assistant-step[data-continuation=true]{margin-top:-8px}.assistant-step[data-variant=commentary] .markdown-body{color:var(--text-muted)}.assistant-step>.message-actions{margin-top:8px}.message-actions{flex-shrink:0;align-items:center;gap:2px;display:inline-flex}.message-clock{color:var(--text-dim);font:var(--text-xs)/1 var(--font-mono)}.message-action{border-radius:var(--radius-xs);width:22px;height:22px;color:var(--text-dim);cursor:pointer;background:0 0;border:none;place-items:center;display:inline-grid;position:relative}.message-action:before{content:"";position:absolute;inset:-5px}.message-action:hover{background:var(--bg-panel);color:var(--text)}.message-action:disabled{opacity:.35;cursor:not-allowed}.message-action:disabled:hover{color:var(--text-dim);background:0 0}.assistant-speaker{min-height:24px;color:var(--text-muted);font-size:var(--text-xs);align-items:center;gap:5px;margin-bottom:5px;display:flex}.assistant-speaker>span{border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--bg-panel);place-items:center;width:20px;height:20px;display:grid}.assistant-speaker strong{color:var(--text);font:700 var(--text-xs) var(--font-mono)}.assistant-speaker small{border:1px solid var(--border);border-radius:var(--radius-xs);color:var(--text-dim);font-size:var(--text-xs);text-transform:uppercase;padding:1px 4px}.assistant-speaker small.assistant-model{text-transform:none;font-family:var(--font-mono);color:var(--text-muted)}.markdown-body{overflow-wrap:anywhere;min-width:0;font-size:var(--text-base);color:var(--text);word-break:break-word;line-height:1.7}.markdown-body>:first-child{margin-top:0}.markdown-body>:last-child{margin-bottom:0}.markdown-body p{margin:0 0 8px}.markdown-body p:last-child{margin-bottom:0}.markdown-body ul,.markdown-body ol,.markdown-body blockquote,.markdown-body pre,.markdown-body table{margin:0 0 12px}.markdown-body ul,.markdown-body ol{padding-left:22px}.markdown-body li+li{margin-top:3px}.markdown-body h1,.markdown-body h2,.markdown-body h3,.markdown-body h4{font-size:var(--text-lg);letter-spacing:0;margin:20px 0 8px;font-weight:600;line-height:1.35}.markdown-body h1{font-size:var(--text-xl)}.markdown-body h2{font-size:var(--text-lg)}.markdown-body a{color:var(--accent);text-underline-offset:2px;text-decoration-thickness:1px}.markdown-body blockquote{border-left:2px solid var(--text-dim);color:var(--text-muted);padding-left:12px}.markdown-body code{border-radius:var(--radius-xs);background:var(--code-surface);font:.9em var(--font-mono);padding:1px 4px}.markdown-body pre{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--code-surface);max-width:100%;padding:12px;overflow:auto}.markdown-body pre code{font-size:var(--text-sm);background:0 0;padding:0}.markdown-body table{border-collapse:collapse;max-width:100%;display:block;overflow-x:auto}.markdown-body th,.markdown-body td{border:1px solid var(--border);text-align:left;padding:6px 9px}.markdown-body th{background:var(--bg-panel)}.markdown-body hr{border:none;border-top:1px solid var(--border);margin:10px 0}.thinking-block{border-left:2px solid var(--border);color:var(--text-muted)}.thinking-block>summary{color:var(--text-muted);cursor:pointer;font-size:var(--text-sm);align-items:center;gap:6px;padding:3px 8px;list-style:none;display:inline-flex}.thinking-block>summary::-webkit-details-marker{display:none}.thinking-block[open]>summary{color:var(--text)}.thinking-content{white-space:pre-wrap;max-height:280px;font-size:var(--text-sm);padding:8px 10px 4px;overflow-y:auto}.image-reference,.image-description{color:var(--text-muted);font-size:var(--text-sm)}.image-reference{align-items:center;gap:6px;display:flex}.image-description>summary{cursor:pointer}.image-description>div{white-space:pre-wrap;padding:8px 0}.tool-batch{border-top:1px solid var(--border);border-bottom:1px solid var(--border);background:var(--tool-bg);min-width:0}.tool-batch-summary{width:100%;min-height:38px;color:var(--text-muted);font:inherit;font-size:var(--text-xs);text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:8px;padding:7px 10px;display:flex}.tool-batch-summary:hover{background:var(--bg-hover)}.tool-batch-summary:focus-visible{outline:2px solid var(--focus-ring);outline-offset:-2px}.tool-batch-chevron{color:var(--text-dim);flex:none;transition:transform .12s}.tool-batch[data-open=true] .tool-batch-chevron{transform:rotate(90deg)}.tool-batch-title{color:var(--text);flex:none;font-weight:700}.tool-batch-now{min-width:0;color:var(--text-dim);font-family:var(--font-mono);text-overflow:ellipsis;white-space:nowrap;flex:auto;overflow:hidden}.tool-batch-failed{color:var(--danger);flex:none;font-weight:700}.tool-batch-body[hidden]{display:none}.tool-batch-heading{min-height:32px;color:var(--text-muted);font-size:var(--text-xs);align-items:center;gap:7px;padding:6px 10px;font-weight:700;display:flex}.tool-activity-list,.tool-activity-entry+.tool-activity-entry{border-top:1px solid var(--border)}.tool-activity>summary{cursor:pointer;grid-template-columns:24px minmax(0,1fr) auto 86px;align-items:center;gap:8px;min-height:42px;padding:6px 10px;list-style:none;display:grid}.tool-activity>summary::-webkit-details-marker{display:none}.tool-activity>summary:hover{background:var(--bg-hover)}.tool-icon{color:var(--accent);place-items:center;display:grid}.tool-summary{align-items:baseline;gap:7px;min-width:0;display:flex}.tool-summary strong{font-size:var(--text-sm);flex:none}.tool-target{min-width:0;color:var(--text-muted);font:var(--text-xs) var(--font-mono);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.tool-detail{color:var(--text-dim);font-size:var(--text-xs);flex:none}.tool-risk{color:var(--text-muted);font-size:var(--text-xs)}.tool-state{color:var(--text-muted);font-size:var(--text-xs);justify-content:flex-end;align-items:center;gap:5px;display:inline-flex}.tool-activity[data-risk=local_write] .tool-icon,.tool-activity[data-state=completed] .tool-state{color:var(--success)}.tool-activity[data-risk=shell] .tool-icon,.tool-activity[data-state=pending] .tool-state,.tool-activity[data-state=running] .tool-state{color:var(--warning)}.tool-activity[data-risk=external] .tool-icon{color:var(--accent)}.tool-activity[data-risk=delegation] .tool-icon{color:var(--warning)}.tool-activity[data-risk=sensitive] .tool-icon,.tool-activity[data-state=failed] .tool-state,.tool-activity[data-state=rejected] .tool-state,.tool-activity[data-state=interrupted] .tool-state{color:var(--danger)}.tool-activity-details{padding:0 10px 9px 42px}.tool-detail-disclosure{border-top:1px solid var(--border)}.tool-detail-disclosure>summary{color:var(--text-muted);cursor:pointer;font-size:var(--text-xs);padding:6px 0;font-weight:700}.tool-detail-disclosure pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:260px;color:var(--text-muted);font:var(--text-xs)/1.5 var(--font-mono);margin:0 0 8px;overflow:auto}.nested-activity{border-top:1px solid var(--border);background:color-mix(in srgb, var(--tool-bg) 82%, var(--bg))}.nested-activity>summary{min-height:34px;color:var(--text-muted);cursor:pointer;font-size:var(--text-xs);justify-content:space-between;align-items:center;gap:10px;padding:6px 10px 6px 42px;list-style:none;display:flex}.nested-activity>summary::-webkit-details-marker{display:none}.nested-activity>summary:hover{background:var(--bg-hover)}.nested-activity>summary>span{align-items:center;gap:6px;min-width:0;display:inline-flex}.nested-activity>summary>span:first-child{color:var(--text);font-weight:700}.nested-activity-body{border-top:1px solid var(--border)}.nested-activity-state,.nested-activity-error{min-height:42px;color:var(--text-muted);font:var(--text-xs) var(--font-mono);align-items:center;padding:8px 10px 8px 42px;display:flex}.nested-activity-error{color:var(--danger);justify-content:space-between}.nested-activity-error button{border:1px solid var(--border);border-radius:var(--radius-xs);width:28px;height:28px;color:var(--text-muted);cursor:pointer;background:0 0;place-items:center;padding:0;display:grid}.child-run-list+.child-run-list{border-top:1px solid var(--border)}.child-run-row{grid-template-columns:24px minmax(0,1fr) 92px;align-items:center;gap:8px;min-height:42px;padding:6px 10px 6px 42px;display:grid}.child-run-row+.child-run-row{border-top:1px solid var(--border)}.child-run-icon{color:var(--text-dim);place-items:center;display:grid}.child-run-identity{align-items:baseline;gap:7px;min-width:0;display:flex}.child-run-identity strong,.child-run-identity span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.child-run-identity strong{color:var(--text);font-size:var(--text-xs)}.child-run-identity span{color:var(--text-muted);font:var(--text-xs) var(--font-mono)}.child-run-status{color:var(--text-muted);font-size:var(--text-xs);justify-content:flex-end;align-items:center;gap:5px;display:inline-flex}.child-run-row[data-state=running] .child-run-status,.child-run-row[data-state=queued] .child-run-status,.child-run-row[data-state=approval] .child-run-status{color:var(--warning)}.child-run-row[data-state=completed] .child-run-status{color:var(--success)}.child-run-row[data-state=failed] .child-run-status,.child-run-row[data-state=interrupted] .child-run-status,.child-run-row[data-state=cancelled] .child-run-status,.child-run-row[data-state=blocked] .child-run-status{color:var(--danger)}.child-run-activity{text-overflow:ellipsis;white-space:nowrap;max-width:120px;font-style:italic;overflow:hidden}.child-run-error-code{border:1px solid var(--border);border-radius:var(--radius-full);font-size:var(--text-xs);padding:0 5px}.child-run-result{min-width:0;color:var(--text-muted);font-size:var(--text-xs);grid-column:2/4;padding:1px 0 5px}.child-run-result>summary{cursor:pointer;font-weight:700}.child-run-result>div{white-space:pre-wrap;overflow-wrap:anywhere;padding-top:5px;line-height:1.45}.delegation-task-list{flex-direction:column;gap:4px;padding:4px 0;display:flex}.delegation-task{min-width:0;font-size:var(--text-xs);align-items:baseline;gap:8px;display:flex}.delegation-task-name{color:var(--text);font-weight:600}.delegation-task-role{color:var(--text-muted);font:var(--text-xs) var(--font-mono)}.delegation-task-depends{color:var(--text-dim);font-size:var(--text-xs)}.delegation-task-depends:before{content:"→ "}.child-run-actions{justify-content:flex-end;align-items:center;gap:6px;display:inline-flex}.child-run-retry,.child-run-approve,.child-run-reject{border:1px solid var(--border);border-radius:var(--radius-sm);min-width:22px;height:22px;color:var(--text-dim);cursor:pointer;font-size:var(--text-xs);background:0 0;justify-content:center;align-items:center;gap:4px;padding:0 4px;display:inline-flex}.child-run-retry:hover{color:var(--accent);border-color:color-mix(in srgb, var(--accent) 55%, var(--border))}.child-run-approve{color:var(--success)}.child-run-reject{color:var(--danger)}.child-run-approve:hover,.child-run-reject:hover{border-color:currentColor}.generation-history{border-top:1px solid var(--border);font-size:var(--text-xs)}.generation-history>summary{color:var(--text-muted);cursor:pointer;align-items:center;gap:6px;padding:5px 10px 5px 42px;font-weight:700;display:flex}.generation-history>summary:hover{background:var(--bg-hover)}.generation-history-body{padding:2px 10px 7px 42px}.generation-row{grid-template-columns:minmax(90px,auto) minmax(0,1fr) auto;align-items:baseline;gap:8px;padding:3px 0;display:grid}.generation-row+.generation-row{border-top:1px dashed var(--border)}.generation-row strong{color:var(--text);font-size:var(--text-xs)}.generation-row span{color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.generation-row time{color:var(--text-dim);font:var(--text-xs) var(--font-mono)}.generation-status-tag{border-radius:var(--radius-sm);background:var(--bg-hover);color:var(--text-muted);padding:0 5px;display:inline-block}.generation-status-tag[data-status=settled]{color:var(--success)}.generation-status-tag[data-status=failed],.generation-status-tag[data-status=cancelled]{color:var(--danger)}.generation-status-tag[data-status=awaiting_authorization]{color:var(--warning)}.generation-detail{color:var(--text-muted);padding:3px 0 5px 10px}.generation-detail ul{margin:3px 0 0;padding-left:16px}.child-run-reused{color:var(--success);font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.04em}.delegation-approval-banner{border-top:1px solid var(--border);color:var(--warning);font-size:var(--text-xs);justify-content:space-between;align-items:center;gap:8px;padding:6px 10px 6px 42px;display:flex}.delegation-approval-banner .banner-actions{gap:6px;display:inline-flex}.delegation-group-actions{border-bottom:1px solid var(--border);min-height:34px;color:var(--text-muted);font-size:var(--text-xs);justify-content:space-between;align-items:center;gap:8px;padding:5px 10px 5px 42px;display:flex}.delegation-group-actions button{align-items:center;gap:4px;display:inline-flex}.tool-artifact-results{border-top:1px solid var(--border)}.artifact-result{background:var(--bg);min-width:0}.artifact-result+.artifact-result{border-top:1px solid var(--border)}.artifact-result-header{grid-template-columns:22px minmax(120px,1fr) minmax(120px,auto) 30px;align-items:center;gap:8px;min-height:40px;padding:5px 10px;display:grid}.artifact-result-icon{color:var(--accent);place-items:center;display:grid}.artifact-result-name{min-width:0;color:var(--text);font-size:var(--text-sm);text-overflow:ellipsis;white-space:nowrap;font-weight:700;overflow:hidden}.artifact-result-meta{min-width:0;color:var(--text-muted);font:var(--text-xs) var(--font-mono);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.artifact-download{border-radius:var(--radius-xs);width:30px;height:30px;color:var(--text-muted);border:1px solid #0000;place-items:center;text-decoration:none;display:grid}.artifact-download:hover,.artifact-download:focus-visible{border-color:var(--border);background:var(--bg-hover);color:var(--text)}.artifact-preview-state{border-top:1px solid var(--border);min-height:76px;color:var(--text-muted);font:var(--text-xs) var(--font-mono);place-items:center;padding:12px;display:grid}.artifact-preview-state.is-error{color:var(--danger)}.artifact-image-preview{border-top:1px solid var(--border);background:var(--bg-panel);min-height:180px;margin:0;padding:12px;position:relative;overflow:auto}.artifact-image-preview img{object-fit:contain;width:auto;max-width:100%;height:auto;max-height:min(620px,65vh);margin:0 auto;display:block}.artifact-image-preview figcaption{background:var(--bg);color:var(--text-dim);font:var(--text-xs) var(--font-mono);padding:2px 5px;position:absolute;bottom:6px;right:8px}.artifact-table-preview{border-top:1px solid var(--border);min-width:0}.artifact-sheet-control{border-bottom:1px solid var(--border);min-height:34px;color:var(--text-muted);font-size:var(--text-xs);align-items:center;gap:8px;padding:5px 10px;font-weight:700;display:flex}.artifact-sheet-control select{border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--bg-panel);min-width:0;max-width:260px;height:24px;color:var(--text);font:var(--text-xs) var(--font-mono)}.artifact-table-scroll{overscroll-behavior:contain;outline:none;max-height:420px;overflow:auto}.artifact-table-scroll:focus-visible{box-shadow:inset 0 0 0 2px var(--focus-ring)}.artifact-table-scroll table{table-layout:fixed;border-collapse:collapse;width:max-content;min-width:100%;font:var(--text-xs) var(--font-mono)}.artifact-table-scroll th,.artifact-table-scroll td{border-right:1px solid var(--border);border-bottom:1px solid var(--border);text-align:left;text-overflow:ellipsis;white-space:nowrap;width:160px;max-width:240px;padding:6px 8px;overflow:hidden}.artifact-table-scroll th{z-index:1;background:var(--bg);color:var(--text-muted);font-weight:700;position:sticky;top:0}.artifact-table-scroll tbody tr:nth-child(2n){background:var(--bg-panel)}.artifact-preview-limit{min-height:28px;color:var(--warning);font-size:var(--text-xs);align-items:center;padding:4px 10px;display:flex}.artifact-html-preview{border:0;border-top:1px solid var(--border);background:#fff;width:100%;height:min(460px,58vh);display:block}.artifact-text-preview{border-top:1px solid var(--border)}.artifact-text-preview pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:360px;color:var(--text-muted);font:var(--text-xs)/1.5 var(--font-mono);margin:0;padding:10px;overflow:auto}.artifact-text-preview span{border-top:1px solid var(--border);min-height:28px;color:var(--warning);font-size:var(--text-xs);padding:6px 10px;display:block}.steer-message{border-right:2px solid var(--warning);max-width:76%;color:var(--text-muted);font-size:var(--text-sm);align-items:flex-start;gap:7px;margin-left:auto;padding:7px 10px;display:flex}.run-status{min-height:28px;color:var(--text-muted);font-size:var(--text-xs);align-items:center;gap:7px;display:flex}.run-status [role=status]{align-items:center;gap:7px;min-width:0;display:inline-flex}.run-status-metrics{color:var(--text-dim);font-variant-numeric:tabular-nums;margin-left:auto}.run-status.is-active{color:var(--accent)}.run-status.is-waiting{color:var(--warning)}.status-spin{animation:1.2s linear infinite status-spin}@keyframes status-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion:reduce){.status-spin{animation:none}}.checkpoint-separator{grid-template-columns:1fr auto 1fr;align-items:center;gap:10px;margin:0 0 30px;display:grid}.checkpoint-line{background:var(--border);height:1px}.checkpoint-separator details{max-width:min(520px,70vw);color:var(--text-muted);font-size:var(--text-xs);text-align:center}.checkpoint-separator summary{cursor:pointer;align-items:center;gap:6px;list-style:none;display:inline-flex}.checkpoint-separator summary span{color:var(--text-dim)}.checkpoint-separator details>div{white-space:pre-wrap;text-align:left;padding-top:8px}.checkpoint-identity{color:var(--text-dim);font-variant-numeric:tabular-nums;flex-wrap:wrap;gap:10px;padding-top:6px;display:flex}.history-control{justify-content:center;min-height:34px;margin:0 0 24px;display:flex}.history-control button{border:1px solid var(--border);border-radius:var(--radius-xs);color:var(--text-muted);cursor:pointer;font:var(--text-xs) var(--font-mono);background:0 0;padding:5px 10px}.history-control button:not(:disabled):hover{border-color:var(--text-dim);color:var(--text)}.history-control button:disabled{opacity:.55}.history-state{color:var(--text-muted);font-size:var(--text-sm);text-align:center;padding:36px 12px}.history-state-error{color:var(--danger)}.history-empty{min-height:52vh;color:var(--text-muted);text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:3px;display:flex}.history-empty strong{color:var(--text);font-size:var(--text-md)}.history-empty span{font-size:var(--text-sm)}.project-menu{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);max-height:280px;z-index:var(--layer-popover-raised);position:absolute;overflow:hidden auto;box-shadow:0 6px 20px #0000001a}.sidebar-project-menu{top:calc(100% + 4px);left:10px;right:10px}.workspace-chip-menu{width:248px;bottom:calc(100% + 4px);left:0}.approval-panel{border-top:1px solid color-mix(in srgb, var(--warning) 45%, var(--border));background:var(--warning-soft)}.approval-heading,.approval-item-title,.approval-actions{justify-content:space-between;align-items:center;gap:12px;display:flex}.approval-heading{padding:10px}.approval-heading>div{align-items:baseline;gap:9px;min-width:0;display:flex}.approval-heading strong{color:var(--warning);font-size:var(--text-sm)}.approval-heading span{color:var(--text-muted);font-size:var(--text-xs)}.approval-waiting{font-family:var(--font-mono);color:var(--warning)!important}.approval-items{border-top:1px solid color-mix(in srgb, var(--warning) 30%, var(--border))}.approval-item{border-bottom:1px solid color-mix(in srgb, var(--warning) 24%, var(--border));padding:9px 10px}.approval-item-title code{color:var(--text);font-weight:700}.approval-item-title span{color:var(--warning);font-size:var(--text-xs)}.approval-item-title span[data-risk=local_write]{color:var(--success)}.approval-item-title span[data-risk=external]{color:var(--accent)}.approval-item-title span[data-risk=delegation]{color:var(--warning)}.approval-item pre{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--text-muted);font:var(--text-xs)/1.45 var(--font-mono);margin-top:5px;overflow-x:auto}.approval-delegations{border-top:1px solid color-mix(in srgb, var(--warning) 24%, var(--border));margin-top:7px}.approval-delegation{grid-template-columns:22px minmax(0,1fr) auto;align-items:start;gap:8px;min-height:48px;padding:7px 0;display:grid}.approval-delegation+.approval-delegation{border-top:1px solid color-mix(in srgb, var(--warning) 20%, var(--border))}.approval-delegation-icon{color:var(--warning);place-items:center;padding-top:2px;display:grid}.approval-delegation-copy{grid-template-columns:auto minmax(0,1fr);gap:1px 7px;min-width:0;display:grid}.approval-delegation-copy strong{color:var(--text);font-size:var(--text-xs)}.approval-delegation-copy>span{color:var(--text-muted);font:var(--text-xs) var(--font-mono);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.approval-delegation-copy small{color:var(--text-muted);font-size:var(--text-xs);overflow-wrap:anywhere;grid-column:1/3;line-height:1.4}.approval-delegation-budget{color:var(--text-dim);font:var(--text-xs) var(--font-mono);white-space:nowrap}.approval-actions{justify-content:flex-end;padding:10px}.approval-actions button,.command-button{border:1px solid var(--accent);border-radius:var(--radius-sm);background:var(--accent);min-height:34px;color:var(--content-inverse);cursor:pointer;justify-content:center;align-items:center;gap:7px;padding:6px 12px;font-weight:700;display:inline-flex}.approval-actions button.secondary-btn{border-color:var(--text-dim);background:var(--bg);color:var(--text)}.approval-actions button:disabled,.command-button:disabled{opacity:.45;cursor:default}.hero-target-picker{flex:none;position:relative}.hero-target-trigger{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-panel);max-width:190px;height:27px;color:var(--text);font:700 var(--text-xs) var(--font-mono);cursor:pointer;grid-template-columns:14px minmax(38px,auto) 12px;align-items:center;gap:4px;padding:0 7px;display:grid}.hero-target-trigger span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.hero-target-trigger:disabled{opacity:.5;cursor:default}.hero-target-menu{z-index:var(--layer-popover);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-panel);width:min(290px,100vw - 24px);padding:5px;position:absolute;bottom:calc(100% + 5px);left:0;box-shadow:0 8px 24px #00000047}.hero-target-menu>label{border-bottom:1px solid var(--border);height:31px;color:var(--text-dim);grid-template-columns:18px 1fr;align-items:center;padding:0 6px;display:grid}.hero-target-menu input{width:100%;min-width:0;color:var(--text);font-size:var(--text-xs);background:0 0;border:0;outline:0}.hero-target-menu [role=listbox]{max-height:240px;padding-top:4px;overflow-y:auto}.hero-target-menu [role=option]{border-radius:var(--radius-xs);width:100%;min-height:42px;color:var(--text);text-align:left;cursor:pointer;background:0 0;border:0;grid-template-columns:22px minmax(0,1fr) 14px;align-items:center;gap:7px;padding:5px 7px;display:grid}.hero-target-menu [role=option]:hover,.hero-target-menu [role=option][aria-selected=true]{background:var(--bg-selected)}.hero-target-menu [role=option]>span:nth-child(2){flex-direction:column;min-width:0;display:flex}.hero-target-menu strong,.hero-target-menu small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.hero-target-menu strong{font-size:var(--text-xs)}.hero-target-menu small{color:var(--text-muted);font-size:var(--text-xs)}.hero-target-swatch{border:1px solid var(--border);border-radius:var(--radius-xs);place-items:center;width:22px;height:22px;display:grid}.hero-target-empty{min-height:54px;color:var(--text-dim);font-size:var(--text-xs);place-items:center;display:grid}.composer-drop-zone{z-index:30;border:2px dashed color-mix(in srgb, var(--accent) 45%, var(--border));border-radius:var(--radius-sm);background:color-mix(in srgb, var(--bg) 90%, var(--accent));color:var(--accent);font-size:var(--text-md);justify-content:center;align-items:center;gap:8px;font-weight:700;animation:.15s ease-out drop-zone-in;display:flex;position:absolute;inset:4px}.composer-attachments{box-sizing:border-box;flex-wrap:wrap;align-items:flex-end;gap:6px;width:min(100%,920px);margin:0 auto;padding:6px 28px 2px;display:flex}.composer-image-preview{flex-shrink:0;position:relative}.composer-image-preview img{object-fit:cover;border-radius:var(--radius-sm);border:1px solid var(--border);width:56px;height:56px;display:block}.composer-image-preview button{background:var(--bg-panel);border:1px solid var(--border);cursor:pointer;width:16px;height:16px;color:var(--text-muted);border-radius:50%;justify-content:center;align-items:center;padding:0;display:flex;position:absolute;top:-4px;right:-4px}.composer-image-preview button:hover{color:var(--text)}.composer-attachment{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius-sm);flex:none;align-items:center;gap:6px;max-width:200px;padding:5px 10px 5px 7px;display:flex;position:relative}.composer-attachment-icon{font-size:var(--text-base);flex-shrink:0;line-height:1}.composer-attachment-body{flex:1;min-width:0}.composer-attachment-name{text-overflow:ellipsis;white-space:nowrap;font-size:var(--text-xs);color:var(--text);line-height:1.3;display:block;overflow:hidden}.composer-attachment-meta{font-size:var(--text-xs);color:var(--text-dim);line-height:1.3;display:block}.composer-attachment button{background:var(--bg-hover);cursor:pointer;width:14px;height:14px;color:var(--text-dim);border:none;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;padding:0;display:flex;position:relative}.composer-attachment button:before{content:"";position:absolute;inset:-9px}.composer-attachment button:hover{color:var(--text)}.file-command{position:relative}.file-command input{display:none}.prompt-command-menu{background:var(--bg-panel);border:1px solid var(--border);border-radius:var(--radius-sm);z-index:50;max-height:260px;margin-bottom:4px;position:absolute;bottom:100%;left:0;right:0;overflow-y:auto;box-shadow:0 4px 16px #0000001f}.prompt-command-menu ul{margin:0;padding:4px;list-style:none}.prompt-command-menu li{border-radius:var(--radius-sm);cursor:pointer;flex-wrap:wrap;align-items:baseline;gap:4px 8px;padding:6px 10px;transition:background .1s;display:flex}.prompt-command-menu li:hover,.prompt-command-menu li.active{background:var(--bg-selected)}.pcm-name{font-weight:600;font-family:var(--font-mono);color:var(--accent);font-size:.88em}.pcm-hint{color:var(--text-dim);font-size:.82em;font-family:var(--font-mono)}.pcm-desc{width:100%;color:var(--text-dim);text-overflow:ellipsis;white-space:nowrap;font-size:.82em;overflow:hidden}.composer-status{color:var(--text-dim);padding:2px 12px 6px;font-size:.82em}.composer-status.diag-warning{color:var(--warning)}.settings-overlay{z-index:60;background:#0000006b;place-items:center;padding:24px;display:grid;position:fixed;inset:0}.settings-tab-section{padding:22px 24px 36px}.settings-tab-section>header{margin-bottom:18px}.settings-tab-section>header h2{font-size:var(--text-lg);margin-bottom:4px}.settings-tab-section header p{max-width:740px;color:var(--text-muted);font-size:var(--text-sm);line-height:1.5}.settings-section{border-bottom:1px solid var(--border);padding:20px 24px}.settings-section h2{font-size:var(--text-base);letter-spacing:0;margin-bottom:12px}.settings-form{align-items:end;gap:10px;max-width:1080px;display:grid}.settings-form label{color:var(--text-muted);font-size:var(--text-xs);flex-direction:column;gap:4px;font-weight:700;display:flex}.settings-form input,.settings-form select,.settings-form textarea{border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--bg-panel);min-width:0;height:34px;color:var(--text);font:var(--text-sm) var(--font-mono);padding:6px 8px}.settings-form textarea{resize:vertical;height:68px}.settings-form button,.secondary-btn{border:1px solid var(--accent);border-radius:var(--radius-xs);background:var(--accent);min-height:34px;color:var(--content-inverse);cursor:pointer;padding:6px 12px;font-weight:700}.settings-form button:disabled,.secondary-btn:disabled{opacity:.45;cursor:default}.secondary-btn{color:var(--accent);background:0 0}.settings-toggles{flex-flow:wrap;align-items:center;gap:14px;min-height:34px;display:flex}.settings-toggles label{color:var(--text);flex-direction:row;align-items:center;font-weight:400}.settings-toggles input{width:14px;height:14px}.settings-list{border-top:1px solid var(--border);max-width:1080px;margin-top:14px}.settings-row{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:16px;min-height:48px;display:flex}.settings-row>div{flex-direction:column;min-width:0;display:flex}.settings-row strong,.settings-row span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.settings-row span{color:var(--text-muted);font-size:var(--text-sm)}.settings-row .provider-controls{flex-flow:wrap;align-items:center;gap:6px}.settings-row .provider-controls code{color:var(--text-dim);font:var(--text-xs) var(--font-mono)}.settings-row .provider-diagnostic{padding:6px 0 2px}.settings-row .diagnostic-summary{font-size:var(--text-xs);align-items:center;gap:6px;display:inline-flex}.settings-row .diagnostic-summary.diagnostic-ready{color:var(--success)}.settings-row .diagnostic-summary.diagnostic-failed{color:var(--danger)}.settings-row .diagnostic-failure{color:var(--danger);font-size:var(--text-xs)}.settings-empty{color:var(--text-dim);font-size:var(--text-xs);padding:10px 12px}.settings-row .provider-settings-row{align-items:flex-start}.settings-list .provider-settings-row{flex-wrap:wrap}.heroes-settings{grid-template-columns:260px minmax(0,1fr);height:100%;min-height:0;display:grid}.heroes-master{border-right:1px solid var(--border);background:var(--bg-panel);flex-direction:column;min-width:0;min-height:0;display:flex}.heroes-master>header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:10px;min-height:58px;padding:10px 12px;display:flex}.heroes-master>header>div{min-width:0}.heroes-master h2{font-size:var(--text-lg);margin:0}.heroes-master header span{color:var(--text-dim);font-size:var(--text-xs);margin-top:2px;display:block}.heroes-filterbar{border-bottom:1px solid var(--border);gap:7px;padding:9px;display:grid}.heroes-filterbar>label{border:1px solid var(--border);border-radius:var(--radius-xs);min-width:0;height:32px;color:var(--text-dim);background:var(--bg);grid-template-columns:18px 1fr;align-items:center;padding:0 7px;display:grid}.heroes-filterbar input{width:100%;min-width:0;color:var(--text);font-size:var(--text-sm);background:0 0;border:0;outline:0}.heroes-status-toggle{border:1px solid var(--border);border-radius:var(--radius-xs);grid-template-columns:1fr 1fr;height:28px;display:grid;overflow:hidden}.heroes-status-toggle button{border:0;border-right:1px solid var(--border);color:var(--text-muted);font-size:var(--text-xs);cursor:pointer;background:0 0}.heroes-status-toggle button:last-child{border-right:0}.heroes-status-toggle button[aria-pressed=true]{background:var(--bg-selected);color:var(--text);font-weight:700}.hero-create-form{border-bottom:1px solid var(--border);gap:6px;padding:9px;display:grid}.hero-create-form input,.hero-create-form select{border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--bg);width:100%;min-width:0;height:32px;color:var(--text);font-size:var(--text-sm);padding:5px 7px}.heroes-list{flex:1;min-height:0;padding:5px;overflow-y:auto}.role-file-candidates{border-bottom:1px solid var(--border);margin-bottom:5px;padding-bottom:5px}.role-file-candidates>header{justify-content:space-between;align-items:center;height:28px;padding:0 7px;display:flex}.role-file-candidates>header span{color:var(--text-muted);font-size:var(--text-xs);text-transform:uppercase;margin:0;font-weight:700}.role-file-candidates>header em{color:var(--text-dim);font-size:var(--text-xs);font-style:normal}.role-file-candidate{border-radius:var(--radius-xs);min-height:48px;color:var(--text-muted);grid-template-columns:18px minmax(0,1fr) auto;align-items:start;gap:5px;padding:6px 7px;display:grid}.role-file-candidate:hover{background:var(--bg-hover)}.role-file-candidate>svg{color:var(--accent);margin-top:2px}.role-file-candidate.invalid>svg{color:var(--danger)}.role-file-candidate>span{flex-direction:column;min-width:0;display:flex}.role-file-candidate strong,.role-file-candidate small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.role-file-candidate strong{color:var(--text);font:600 var(--text-xs) var(--font-mono)}.role-file-candidate small{color:var(--text-dim);font-size:var(--text-xs);line-height:1.45}.role-file-candidate .role-file-diagnostic{color:var(--danger);align-items:center;gap:3px;display:flex}.role-file-candidate>.settings-btn{min-height:24px;font-size:var(--text-xs);padding:3px 6px}.role-file-published{color:var(--success);font-size:var(--text-xs);white-space:nowrap;align-items:center;gap:2px;font-style:normal;display:flex}.heroes-empty{min-height:90px;color:var(--text-dim);font-size:var(--text-xs);place-items:center;display:grid}.role-list-item{border-radius:var(--radius-xs);width:100%;min-height:60px;color:var(--text);text-align:left;cursor:pointer;background:0 0;border:0;grid-template-columns:25px minmax(0,1fr) auto;align-items:start;gap:7px;padding:8px;display:grid}.role-list-item:hover{background:var(--bg-hover)}.role-list-item.selected{background:var(--bg-selected);box-shadow:inset 2px 0 0 var(--accent)}.role-list-icon{border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--bg);place-items:center;width:24px;height:24px;display:grid}.role-list-item>span:nth-child(2){flex-direction:column;min-width:0;display:flex}.role-list-item strong,.role-list-item small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.role-list-item strong{font-size:var(--text-sm)}.role-list-item small{color:var(--text-muted);font-size:var(--text-xs);line-height:1.45}.role-list-item em{color:var(--text-dim);font-size:var(--text-xs);font-style:normal}.heroes-detail{min-width:0;min-height:0;overflow-y:auto}.heroes-detail-empty{min-height:100%;color:var(--text-dim);font-size:var(--text-sm);place-content:center;justify-items:center;gap:8px;display:grid}.role-editor{min-height:100%}.role-editor-commandbar{z-index:2;border-bottom:1px solid var(--border);background:var(--bg);justify-content:space-between;align-items:center;gap:12px;min-height:48px;padding:7px 12px;display:flex;position:sticky;top:0}.role-editor-version{min-width:0;font-size:var(--text-xs);align-items:center;gap:7px;display:flex}.role-editor-version span:last-child{color:var(--warning)}.hero-color-swatch{border:1px solid color-mix(in srgb, currentColor 30%, transparent);border-radius:2px;flex:none;width:11px;height:11px}.role-editor-actions{flex-flow:wrap;justify-content:flex-end;gap:5px;display:flex}.role-file-source{border-bottom:1px solid var(--border);background:var(--bg-panel);color:var(--text-muted);grid-template-columns:18px minmax(0,1fr) auto;align-items:center;gap:7px;padding:8px 14px;display:grid}.role-file-source>svg{color:var(--accent)}.role-file-source>span{flex-direction:column;min-width:0;display:flex}.role-file-source strong,.role-file-source small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.role-file-source strong{color:var(--text);font-size:var(--text-xs)}.role-file-source small{color:var(--text-dim);font:var(--text-xs) var(--font-mono)}.role-file-source em{color:var(--text-dim);font-size:var(--text-xs);white-space:nowrap;font-style:normal}.role-validation,.role-version-strip{border-bottom:1px solid var(--border);font-size:var(--text-xs);flex-direction:column;gap:3px;padding:9px 14px;display:flex}.role-validation.valid{color:var(--success);background:color-mix(in srgb, var(--success) 7%, transparent)}.role-validation.invalid{color:var(--danger);background:color-mix(in srgb, var(--danger) 7%, transparent)}.role-version-strip{color:var(--text-muted);flex-flow:wrap}.role-version-strip span{padding-right:12px}.role-editor-sections{border:0;min-width:0;margin:0;padding:0}.role-editor-sections[disabled]{color:inherit}.role-editor-sections[disabled] :is(input,select,textarea,button){cursor:default;opacity:.72}.role-editor-sections>section{border-bottom:1px solid var(--border);padding:16px 18px}.role-editor-sections section>header{margin-bottom:10px}.role-editor-sections h3{font-size:var(--text-sm);margin:0}.role-field-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:9px;display:grid}.role-field-grid .wide{grid-column:span 2}.role-field-grid label,.model-runtime-control label,.role-number-field,.role-prompt-field,.role-segmented-row label{min-width:0;color:var(--text-muted);font-size:var(--text-xs);flex-direction:column;gap:4px;font-weight:700;display:flex}.role-field-grid input,.model-runtime-control select,.role-number-field input,.role-prompt-field textarea,.role-segmented-row input,.role-segmented-row select{border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--bg-panel);width:100%;min-width:0;height:33px;color:var(--text);font:var(--text-xs) var(--font-mono);padding:5px 7px}.hero-color-field{border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--bg-panel);grid-template-columns:34px 1fr;align-items:center;height:33px;display:grid;overflow:hidden}.hero-color-field input{border:0;width:34px;height:31px;padding:3px}.hero-color-field span{color:var(--text-muted);font:var(--text-xs) var(--font-mono);padding-left:6px}.model-runtime-control{grid-template-columns:minmax(180px,1fr) minmax(140px,.5fr);gap:9px;max-width:620px;display:grid}.role-number-field{width:160px;margin-top:9px}.role-prompt-field textarea{resize:vertical;height:150px;line-height:1.5}.role-segmented-row{grid-template-columns:repeat(3,minmax(130px,1fr));gap:9px;max-width:760px;display:grid}.role-tool-grid{grid-template-columns:repeat(auto-fill,minmax(135px,1fr));gap:6px 12px;margin-top:11px;display:grid}.role-tool-grid label{color:var(--text-muted);font:var(--text-xs) var(--font-mono)}.role-tool-grid input{vertical-align:middle;width:14px;height:14px}.role-editor-saved-state{color:var(--text-dim);font-size:var(--text-xs);padding:12px 18px 24px;display:block}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}@keyframes drop-zone-in{0%{opacity:0;transform:scale(.97)}to{opacity:1;transform:scale(1)}}@media (max-width:900px){.conversation-viewport{padding-inline:22px}}@media (max-width:640px){.navigation-close{display:inline-grid}.conversation-viewport{padding:16px 12px 26px}.conversation-turn{gap:14px;padding-bottom:28px}.user-message{max-width:88%}.agent-flow{gap:13px;padding-left:4px}.tool-activity>summary{grid-template-columns:22px minmax(0,1fr) 72px;gap:6px;padding-inline:7px}.tool-risk{display:none}.tool-summary{flex-direction:column;gap:0;line-height:1.35}.tool-detail{display:none}.tool-state{font-size:var(--text-xs)}.tool-activity-details,.nested-activity>summary,.nested-activity-state,.nested-activity-error,.delegation-group-actions{padding-left:35px}.child-run-row{grid-template-columns:20px minmax(0,1fr) 76px;padding-left:35px}.child-run-identity{flex-direction:column;align-items:flex-start;gap:0;line-height:1.35}.child-run-status{font-size:var(--text-xs)}.approval-delegation{grid-template-columns:20px minmax(0,1fr)}.approval-delegation-budget{grid-column:2}.checkpoint-separator{gap:7px}.checkpoint-separator details{max-width:78vw}.checkpoint-separator summary span{display:none}.artifact-result-header{grid-template-columns:20px minmax(0,1fr) 30px;padding-inline:7px}.artifact-result-meta{white-space:normal;overflow-wrap:anywhere;grid-area:2/2;padding-bottom:5px}.artifact-download{grid-area:1/3/span 2}.artifact-image-preview{min-height:140px;padding:8px}.approval-heading>div{flex-direction:column;align-items:flex-start;gap:1px}.approval-actions{grid-template-columns:1fr 1fr;display:grid}.approval-actions button{width:100%}.composer-config-panel{width:min(280px,100vw - 16px)}.command-button{min-width:50px;padding-inline:10px}.command-button span{display:none}.settings-overlay{padding:0}.settings-tab-section{padding:18px 14px 30px}.heroes-settings{grid-template-rows:minmax(180px,36%) minmax(0,1fr);grid-template-columns:1fr}.heroes-master{border-right:0;border-bottom:1px solid var(--border)}.heroes-master>header{min-height:48px}.role-field-grid{grid-template-columns:1fr 1fr}.role-field-grid .wide{grid-column:span 2}.role-editor-commandbar{flex-direction:column;align-items:flex-start}.role-editor-actions{justify-content:flex-start;width:100%}.model-runtime-control,.role-segmented-row{grid-template-columns:1fr}.role-editor-sections>section{padding:14px}.templates-diag-banner{border-radius:var(--radius-sm);flex-direction:column;gap:4px;margin-bottom:14px;padding:8px 10px;display:flex}.templates-diag{align-items:flex-start;gap:6px;font-size:.81em;line-height:1.3;display:flex}.templates-diag.diag-warn{color:var(--warning)}.templates-diag.diag-info{color:var(--text-dim)}.templates-diag-icon{flex-shrink:0;margin-top:1px}.templates-diag-msg code{background:var(--bg-selected);border-radius:var(--radius-xs);padding:1px 4px;font-size:.92em}.templates-empty{color:var(--text-dim);margin:6px 0 14px;font-size:.85em}.templates-empty code{background:var(--bg-hover);border-radius:var(--radius-xs);padding:1px 5px;font-size:.92em}.templates-section-header{align-items:center;gap:8px;margin:16px 0 8px;display:flex}.templates-section-header h3{flex:1;margin:0;font-size:.95em;font-weight:600}.templates-list{flex-direction:column;gap:4px;margin:0 0 14px;padding:0;list-style:none;display:flex}.template-row{border-radius:var(--radius-sm);background:var(--bg-panel);flex-wrap:wrap;align-items:baseline;gap:4px 10px;padding:7px 10px;display:flex}.template-row.invalid{opacity:.7}.template-name{font-weight:600;font-family:var(--font-mono);color:var(--accent);font-size:.85em}.template-hint{color:var(--text-dim);font-size:.8em;font-family:var(--font-mono)}.template-source{border-radius:var(--radius-xs);background:var(--bg-selected);color:var(--text-dim);text-transform:uppercase;letter-spacing:.04em;padding:1px 6px;font-size:.72em}.template-desc{width:100%;color:var(--text-dim);font-size:.82em}.template-desc.diag-text{color:var(--warning)}.template-actions{gap:4px;margin-left:auto;display:flex}.template-actions .settings-btn{padding:3px 8px;font-size:.78em}.template-confirm{color:var(--text);align-items:center;gap:6px;font-size:.78em;display:flex}.template-confirm .settings-btn{padding:3px 8px;font-size:.78em}.template-manual-cleanup{color:var(--text-dim);font-size:.78em;font-style:italic}.template-edit-form{border-radius:var(--radius-sm);background:var(--bg);border:1px solid var(--border);flex-direction:column;gap:8px;width:100%;padding:8px;display:flex}.template-edit-form label{color:var(--text-dim);flex-direction:column;gap:3px;font-size:.8em;display:flex}.template-edit-form input,.template-edit-form textarea{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);color:var(--text);padding:5px 8px;font-size:.88em}.template-edit-form textarea{resize:vertical;min-height:60px;font-family:var(--font-mono);font-size:.82em}.template-edit-readonly{color:var(--text-dim);padding:4px 0;font-size:.85em}.template-form-actions{gap:6px;display:flex}.settings-btn{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);color:var(--text);cursor:pointer;align-items:center;gap:4px;padding:5px 11px;font-size:.82em;font-weight:600;display:inline-flex}.settings-btn:hover:not(:disabled){background:var(--bg-hover)}.settings-btn:disabled{opacity:.5;cursor:default}.settings-btn.primary{background:var(--accent);color:var(--content-inverse);border-color:var(--accent)}.settings-btn.primary:hover:not(:disabled){background:var(--accent-hover)}.settings-btn.danger{border-color:var(--danger);color:var(--danger)}.settings-btn.danger:hover:not(:disabled){background:color-mix(in srgb, var(--danger) 10%, transparent)}.template-body-preview{border-radius:var(--radius-sm);background:var(--bg);border:1px solid var(--border);width:100%;margin-top:6px;padding:8px}.template-body-preview pre{font-size:.8em;font-family:var(--font-mono);white-space:pre-wrap;color:var(--text);margin:0 0 6px;overflow-x:auto}}.file-tree-panel,.file-viewer{background:var(--bg);flex-direction:column;height:100%;min-height:0;display:flex;overflow:hidden}.file-tree-header{border-bottom:1px solid var(--border);background:var(--bg-panel);flex:none;padding:7px 10px}.file-tree-heading{font-size:var(--text-md);font-weight:700}.file-tree-path{color:var(--text-dim);font:var(--text-xs) var(--font-mono);text-overflow:ellipsis;white-space:nowrap;margin-top:1px;overflow:hidden}.file-filter{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);height:28px;color:var(--text-dim);align-items:center;gap:6px;margin-top:7px;padding:0 7px;display:flex}.file-filter:focus-within{border-color:var(--focus-ring)}.file-filter input{width:100%;min-width:0;color:var(--text);font-size:var(--text-xs);background:0 0;border:0;outline:0}.file-tree-list{flex:1;min-height:0;padding:4px 0 8px;overflow-y:auto}.file-tree-row{align-items:center;min-width:0;padding-right:4px;display:flex}.file-tree-row:hover{background:var(--bg-hover)}.file-tree-main{min-width:0;height:28px;color:var(--text);cursor:pointer;text-align:left;background:0 0;border:0;flex:1;align-items:center;gap:6px;padding:0 4px 0 0;display:flex}.file-tree-icon{flex:none;display:flex}.file-tree-name{min-width:0;color:var(--text-muted);font:var(--text-xs) var(--font-mono);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.file-tree-size,.file-tree-loading{color:var(--text-dim);font:var(--text-xs) var(--font-mono);flex:none}.file-tree-actions{flex:none;gap:2px;margin-left:auto;display:flex}.file-tree-action{border-radius:var(--radius-xs);width:22px;height:22px;color:var(--text-dim);cursor:pointer;background:0 0;border:1px solid #0000;place-items:center;padding:0;display:grid}.file-tree-action:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.file-tree-action:disabled{cursor:default;color:var(--text-dim);opacity:.5}.file-tree-row-editing{background:var(--bg-selected)}.file-tree-editor{border:1px solid var(--accent);border-radius:var(--radius-xs);background:var(--bg-panel);min-width:0;height:22px;color:var(--text);font:var(--text-xs) var(--font-mono);flex:1;padding:0 4px}.file-tree-error-mark{background:var(--danger);width:14px;height:14px;color:var(--bg);font:700 var(--text-xs) var(--font-mono);text-align:center;border-radius:50%;flex:none;line-height:14px}.file-preview-action{border-radius:var(--radius-xs);opacity:0;width:24px;height:24px;color:var(--text-dim);cursor:pointer;background:0 0;border:0;flex:0 0 24px;place-items:center;padding:0;display:grid}.file-tree-row:hover .file-preview-action,.file-preview-action:focus-visible{opacity:1}.file-tree-row{cursor:pointer}.file-tree-row:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.file-tree-row[aria-selected=true]{background:var(--bg-selected)}.file-tree-main{cursor:inherit}.file-tree-menu-backdrop{z-index:var(--layer-popover);background:0 0;position:fixed;inset:0}.file-tree-menu{z-index:var(--layer-menu);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-panel);min-width:180px;box-shadow:var(--shadow-menu);flex-direction:column;padding:4px;display:flex;position:fixed}.file-tree-menu button{border-radius:var(--radius-xs);color:var(--text);font-size:var(--text-xs);text-align:left;cursor:pointer;background:0 0;border:0;align-items:center;gap:6px;padding:6px 8px;display:flex}.file-tree-menu button:hover{background:var(--bg-hover)}.file-preview-action:hover{background:var(--bg-selected);color:var(--text)}.file-tree-state,.file-tree-inline-error{color:var(--text-dim);font-size:var(--text-xs);overflow-wrap:anywhere;padding:10px}.file-tree-empty{height:100%;color:var(--text-dim);font-size:var(--text-xs);text-align:center;place-items:center;padding:18px;display:grid}.file-tree-state.is-error,.file-tree-inline-error{color:var(--danger)}.file-tree-inline-error{border-radius:var(--radius-xs);background:var(--danger-soft);margin:2px 8px 5px}.file-viewer-status{border-bottom:1px solid var(--border);background:var(--bg-panel);min-height:34px;color:var(--text-dim);font-size:var(--text-xs);flex:none;align-items:center;gap:8px;padding:4px 9px;display:flex}.file-viewer-type{border-radius:var(--radius-xs);background:var(--accent-soft);max-width:110px;color:var(--accent);font:700 var(--text-xs) var(--font-mono);text-overflow:ellipsis;text-transform:uppercase;white-space:nowrap;padding:1px 5px;overflow:hidden}.file-viewer-path{min-width:0;font-family:var(--font-mono);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.file-viewer-download{border-radius:var(--radius-xs);width:24px;height:24px;color:var(--text-muted);place-items:center;display:grid}.file-viewer-download:hover{background:var(--bg-hover);color:var(--text)}.file-viewer-body{flex:1;min-height:0;overflow:auto}.file-viewer-empty{min-height:100%;color:var(--text-dim);font-size:var(--text-sm);text-align:center;justify-content:center;align-items:center;gap:8px;padding:20px;display:flex}.file-viewer-empty.is-error{color:var(--danger)}.file-markdown{width:min(100%,860px);margin:0 auto;padding:22px 26px 48px}.file-code{background:var(--bg);min-width:max-content;min-height:100%}.file-code .shiki{min-width:max-content;min-height:100%;font:var(--text-sm)/1.55 var(--font-mono);margin:0;padding:14px 16px 40px;background:0 0!important}.file-code .shiki span{color:var(--shiki-light)}html.dark .file-code .shiki span{color:var(--shiki-dark)}.file-code-plain{min-width:max-content;min-height:100%;color:var(--text);background:var(--bg);font:var(--text-sm)/1.55 var(--font-mono);tab-size:2;margin:0;padding:14px 16px 40px}.file-image-stage{background:var(--bg-panel);justify-content:center;align-items:flex-start;min-width:100%;min-height:100%;padding:16px;display:flex}.file-image-stage img{object-fit:contain;max-width:100%;height:auto;box-shadow:0 2px 8px #00000024}.file-pdf{background:var(--bg-panel);border:0;width:100%;height:100%;min-height:520px}.file-preview-window{z-index:var(--layer-preview);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);flex-direction:column;min-width:360px;min-height:260px;display:flex;position:fixed;overflow:hidden;box-shadow:0 22px 70px #0000003d}.file-preview-titlebar{border-bottom:1px solid var(--border);background:var(--bg-panel);cursor:move;-webkit-user-select:none;user-select:none;touch-action:none;flex:0 0 38px;justify-content:space-between;align-items:center;gap:8px;height:38px;padding-left:10px;display:flex}.file-preview-titlebar>span{min-width:0;font-size:var(--text-xs);text-overflow:ellipsis;white-space:nowrap;font-weight:700;overflow:hidden}.file-preview-window-actions{align-items:center;height:100%;display:flex}.file-preview-window-actions button{width:32px;height:100%;color:var(--text-muted);cursor:pointer;background:0 0;border:0;place-items:center;padding:0;display:grid}.file-preview-window-actions button:hover{background:var(--bg-hover);color:var(--text)}.file-preview-content{flex:1;min-height:0;overflow:hidden}.file-preview-resize{cursor:nwse-resize;touch-action:none;width:18px;height:18px;position:absolute;bottom:0;right:0}.file-preview-resize:after{content:"";border-right:1px solid var(--text-dim);border-bottom:1px solid var(--text-dim);width:7px;height:7px;position:absolute;bottom:4px;right:4px}.spin{animation:1s linear infinite spin}@media (max-width:640px){.file-preview-window{border:0;border-radius:0;min-width:0;min-height:0;width:100%!important;height:100dvh!important;inset:0!important}.file-preview-resize{display:none}.file-markdown{padding:18px 14px 38px}.composer-attachments{padding-inline:12px}.composer-image-preview img{width:48px;height:48px}}.background-delegation-strip{border-top:1px solid var(--border);border-bottom:1px solid var(--border);background:color-mix(in srgb, var(--tool-bg) 82%, var(--bg));padding:4px 12px}.background-delegation-header{width:100%;color:var(--text-muted);font:inherit;font-size:var(--text-xs);letter-spacing:.02em;cursor:pointer;text-align:left;background:0 0;border:0;align-items:center;gap:8px;padding:2px 0 4px;font-weight:700;display:flex}.background-delegation-header>span:first-child{color:var(--text);align-items:center;gap:5px;display:inline-flex}.background-delegation-header>span:last-child{color:var(--text-muted);margin-left:auto;font-weight:400}.delivery-spinner{animation:1s linear infinite delivery-spin}@keyframes delivery-spin{to{transform:rotate(360deg)}}.delivery-list{flex-direction:column;display:flex}.delivery-row{font-size:var(--text-xs);grid-template-columns:18px minmax(110px,auto) minmax(0,1fr);align-items:center;gap:8px;padding:4px 0;display:grid}.delivery-row+.delivery-row{border-top:1px dashed var(--border)}.delivery-icon{color:var(--warning);place-items:center;display:grid}.delivery-row[data-delivery-status=resume_completed] .delivery-icon,.delivery-row[data-delivery-status=consumed_by_parent] .delivery-icon{color:var(--success)}.delivery-identity{flex-direction:column;min-width:0;display:flex}.delivery-identity strong{color:var(--text);font-size:var(--text-xs)}.delivery-identity span{color:var(--text-muted);font-size:var(--text-xs);text-transform:capitalize}.delivery-summary{min-width:0;color:var(--text-muted);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}@media (max-width:640px){.delivery-row{grid-template-columns:18px minmax(0,1fr)}.delivery-summary{white-space:normal;grid-column:2}}.flow-check-command{text-transform:none;text-overflow:ellipsis;white-space:nowrap;max-width:340px;font-family:var(--font-mono,monospace);overflow:hidden}.flow-check-actions{justify-content:flex-end;gap:6px;display:flex}.flow-check-actions .secondary-btn{font-size:var(--text-xs);padding:2px 10px}.flow-check-approve{color:var(--success)}.flow-check-reject{color:var(--danger)}@media (max-width:640px){.flow-check-command{max-width:100%}.flow-check-actions{grid-column:2;justify-content:flex-start}}.attention-panel{position:relative}.attention-bell{border:1px solid var(--border);border-radius:var(--radius-sm);width:30px;height:30px;color:var(--text-dim);cursor:pointer;background:0 0;justify-content:center;align-items:center;display:inline-flex;position:relative}.attention-bell:hover{color:var(--text);border-color:var(--border-strong,var(--border))}.attention-badge{border-radius:var(--radius-sm);background:var(--danger);min-width:16px;height:16px;color:var(--content-inverse);font-size:var(--text-xs);place-items:center;padding:0 4px;font-weight:700;display:grid;position:absolute;top:-5px;right:-6px}.attention-popover{z-index:var(--layer-popover);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);width:min(340px,100vw - 40px);position:absolute;top:38px;left:0;box-shadow:0 8px 30px #0000002e}.attention-popover-header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;padding:8px 12px;display:flex}.attention-popover-header strong{color:var(--text);font-size:var(--text-sm)}.attention-popover-header span{color:var(--text-muted);font-size:var(--text-xs)}.attention-list{max-height:320px;padding:4px;overflow-y:auto}.attention-empty{color:var(--text-muted);font-size:var(--text-xs);text-align:center;padding:14px 10px}.attention-row{border-radius:var(--radius-sm);grid-template-columns:18px minmax(0,1fr) auto;align-items:center;gap:8px;padding:7px 8px;display:grid}.attention-row+.attention-row{margin-top:2px}.attention-row:hover{background:var(--bg-hover)}.attention-icon{color:var(--warning);place-items:center;display:grid}.attention-row[data-kind=delegation_failed] .attention-icon{color:var(--danger)}.attention-main{text-align:left;cursor:pointer;background:0 0;border:none;flex-direction:column;gap:1px;min-width:0;display:flex}.attention-main strong{color:var(--text);font-size:var(--text-xs)}.attention-main span{color:var(--text-muted);font-size:var(--text-xs);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.attention-dismiss{border-radius:var(--radius-sm);width:22px;height:22px;color:var(--text-dim);cursor:pointer;background:0 0;border:1px solid #0000;place-items:center;display:grid}.attention-dismiss:hover{color:var(--danger);border-color:var(--border)}.attention-action-tag{border-radius:var(--radius-sm);background:var(--bg-hover);color:var(--warning);font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.03em;padding:1px 6px}@media (max-width:640px){.attention-popover{width:calc(100vw - 24px);left:12px}}.follow-up-dialog{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);flex-direction:column;gap:8px;margin:6px 10px 6px 42px;padding:10px;display:flex}.follow-up-header{justify-content:space-between;align-items:center;gap:8px;display:flex}.follow-up-header span{color:var(--text);font-size:var(--text-xs);align-items:center;gap:6px;font-weight:700;display:inline-flex}.follow-up-close{border-radius:var(--radius-sm);width:22px;height:22px;color:var(--text-dim);cursor:pointer;background:0 0;border:1px solid #0000;place-items:center;display:grid}.follow-up-close:hover{color:var(--text);border-color:var(--border)}.follow-up-meta{color:var(--text-muted);font-size:var(--text-xs);align-items:baseline;gap:8px;display:flex}.follow-up-meta strong{color:var(--text)}.follow-up-input{resize:vertical;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);width:100%;color:var(--text);font:var(--text-sm) var(--font-mono);padding:8px}.follow-up-input:focus{outline:2px solid color-mix(in srgb, var(--accent) 45%, transparent);outline-offset:-1px}.follow-up-error{color:var(--warning);font-size:var(--text-xs)}.follow-up-actions{justify-content:flex-end;display:flex}.follow-up-submit{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-hover);color:var(--text);font-size:var(--text-xs);cursor:pointer;align-items:center;gap:5px;padding:6px 12px;font-weight:700;display:inline-flex}.follow-up-submit:disabled{opacity:.5;cursor:default}.follow-up-submit:not(:disabled):hover{border-color:var(--accent);color:var(--accent)}@media (max-width:640px){.follow-up-dialog{margin-left:12px;margin-right:12px}}.compaction-prompt-bar{border-top:1px solid var(--border);border-bottom:1px solid var(--border);background:color-mix(in srgb, var(--tool-bg) 82%, var(--bg));flex-direction:column;gap:6px;padding:6px 12px;display:flex}.compaction-prompt-header{color:var(--text);font-size:var(--text-xs);letter-spacing:.02em;justify-content:space-between;align-items:center;gap:8px;font-weight:700;display:flex}.compaction-prompt-header span{align-items:center;gap:5px;display:inline-flex}.compaction-prompt-body{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.compaction-prompt-body input{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);min-width:180px;color:var(--text);font-size:var(--text-sm);flex:1;padding:5px 8px}.compaction-prompt-body input:focus{outline:2px solid color-mix(in srgb, var(--accent) 45%, transparent);outline-offset:-1px}.compaction-prompt-actions{gap:6px;display:flex}.compaction-prompt-actions .secondary-btn{font-size:var(--text-xs);padding:4px 10px}.compaction-prompt-confirm{border-radius:var(--radius-sm);background:var(--accent);color:var(--content-inverse);font-size:var(--text-xs);cursor:pointer;border:none;padding:4px 12px}.compaction-prompt-confirm:disabled{opacity:.5;cursor:default}.project-create-overlay{z-index:var(--layer-menu);background:#00000059;place-items:center;display:grid;position:fixed;inset:0}.project-create-dialog{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-md);flex-direction:column;gap:10px;width:min(420px,100vw - 32px);padding:14px;display:flex;box-shadow:0 12px 40px #0000002e}.project-create-header{justify-content:space-between;align-items:center;gap:8px;display:flex}.project-create-header span{color:var(--text);font-size:var(--text-sm);align-items:center;gap:6px;font-weight:700;display:inline-flex}.project-create-form{flex-direction:column;gap:10px;display:flex}.project-create-form label{font-size:var(--text-xs);color:var(--text-muted);flex-direction:column;gap:3px;font-weight:600;display:flex}.project-create-form input{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);color:var(--text);font-size:var(--text-sm);padding:6px 8px}.project-create-form input:focus{outline:2px solid color-mix(in srgb, var(--accent) 45%, transparent);outline-offset:-1px}.project-create-form small{color:var(--text-dim);font-weight:400;font-size:var(--text-xs)}.project-create-error{color:var(--danger);font-size:var(--text-xs)}.project-create-actions{justify-content:flex-end;gap:8px;display:flex}.project-create-actions .secondary-btn{font-size:var(--text-xs);padding:5px 12px}.project-create-submit{border-radius:var(--radius-sm);background:var(--accent);color:var(--content-inverse);font-size:var(--text-xs);cursor:pointer;border:none;padding:5px 14px}.project-create-submit:disabled{opacity:.5;cursor:default}@media (max-width:640px){.project-create-dialog{width:calc(100vw - 24px)}}.role-skill-picker{flex-direction:column;gap:6px;margin-top:10px;display:flex}.role-skill-search{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-panel);color:var(--text-muted);align-items:center;gap:6px;padding:0 8px;display:flex}.role-skill-search input{min-width:0;color:var(--text);font-size:var(--text-xs);background:0 0;border:none;outline:none;flex:1;padding:6px 0}.role-skill-count{color:var(--text-dim);font-size:var(--text-xs)}.role-skill-error{color:var(--danger);font-size:var(--text-xs)}.role-skill-empty{color:var(--text-dim);font-size:var(--text-xs);padding:4px 0}.role-skill-list{border:1px solid var(--border);border-radius:var(--radius-sm);flex-direction:column;gap:3px;max-height:220px;padding:4px;display:flex;overflow-y:auto}.role-skill-row{border-radius:var(--radius-xs);align-items:center;gap:8px;padding:4px 6px;display:flex}.role-skill-row.is-bound{background:color-mix(in srgb, var(--bg-selected) 60%, transparent)}.role-skill-check{cursor:pointer;flex:1;align-items:center;gap:6px;min-width:0;display:flex}.role-skill-check input{accent-color:var(--accent)}.role-skill-name{font-size:var(--text-xs);color:var(--text);white-space:nowrap;font-weight:600}.role-skill-desc{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--text-muted);font-size:var(--text-xs);flex:1;overflow:hidden}.role-skill-source{font-size:var(--text-xs);color:var(--text-dim);border:1px solid var(--border);border-radius:var(--radius-sm);flex-shrink:0;padding:0 6px}.role-skill-mode{font-size:var(--text-xs);border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--bg);color:var(--text);flex-shrink:0;padding:1px 4px}.workspace-page-header{border-bottom:1px solid var(--border);background:var(--bg);flex:none;align-items:center;min-height:66px;padding:10px 20px;display:flex}.workspace-page-header h1{font-size:var(--text-xl);margin:0;line-height:1.3}.workspace-page-header p{color:var(--text-muted);font-size:var(--text-xs);margin:3px 0 0;line-height:1.4}.workspace-page-body{flex:1;min-width:0;min-height:0;overflow:hidden}.settings-view{background:var(--bg);flex-direction:column;flex:1;min-width:0;min-height:0;display:flex;overflow:hidden}.settings-view-back{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-panel);color:var(--text-muted);font-size:var(--text-sm);cursor:pointer;align-items:center;gap:6px;margin-left:auto;padding:6px 12px;font-weight:500;display:inline-flex}.settings-view-back:hover{color:var(--text);background:var(--bg-hover)}.workspace-page-error{margin:8px 12px 0}.workspace-page-error button{width:32px;height:32px;color:inherit;cursor:pointer;background:0 0;border:0;place-items:center;display:grid}.workspace-mobile-menu{display:none}.graph-workspace{flex-direction:column;width:100%;min-width:0;height:100%;min-height:0;display:flex;overflow:hidden}.graph-tabs-row{border-bottom:1px solid var(--border);background:var(--bg-panel);flex:none;align-items:stretch;min-height:48px;display:flex}.graph-tabs{scrollbar-width:thin;flex:1;min-width:0;display:flex;overflow-x:auto}.graph-tab{border:0;border-right:1px solid var(--border);min-width:116px;max-width:220px;min-height:48px;color:var(--text-muted);cursor:pointer;font-size:var(--text-sm);background:0 0;justify-content:center;align-items:center;gap:7px;padding:0 14px;display:flex;position:relative}.graph-tab span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.graph-tab svg{color:var(--danger);flex:none}.graph-tab:hover{background:var(--bg-hover);color:var(--text)}.graph-tab[aria-selected=true]{background:var(--bg);color:var(--text);font-weight:700}.graph-tab[aria-selected=true]:after{background:var(--accent);content:"";height:2px;position:absolute;bottom:-1px;left:10px;right:10px}.graph-add-tab{border:0;border-left:1px solid var(--border);background:var(--bg-panel);width:48px;min-width:48px;min-height:48px;color:var(--accent);cursor:pointer;place-items:center;display:grid}.graph-add-tab:hover{background:var(--bg-hover)}.graph-create-strip{border-bottom:1px solid var(--border);background:var(--bg-panel);flex:none;align-items:end;gap:8px;min-height:66px;padding:8px 12px;display:flex}.graph-create-strip label{color:var(--text-muted);font-size:var(--text-xs);gap:3px;font-weight:700;display:grid}.graph-create-strip input{border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--bg);width:min(220px,26vw);height:34px;color:var(--text);padding:5px 8px}.graph-create-strip button,.graph-welcome button{border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--bg);min-height:34px;color:var(--text);cursor:pointer;align-items:center;gap:6px;padding:0 11px;display:inline-flex}.graph-create-strip button:nth-last-child(2),.graph-welcome button{border-color:var(--accent);background:var(--accent);color:var(--content-inverse)}.graph-mobile-segments{display:none}.graph-loading,.graph-welcome{min-height:100%;color:var(--text-muted);place-content:center;justify-items:center;gap:8px;display:grid}.graph-welcome h2{color:var(--text);font-size:var(--text-lg);margin:2px 0 0}.graph-welcome p{font-size:var(--text-sm);margin:0 0 8px}.graph-document{flex-direction:column;flex:1;min-width:0;min-height:0;display:flex}.graph-document-header{border-bottom:1px solid var(--border);flex:none;justify-content:space-between;align-items:center;gap:12px;min-height:58px;padding:8px 16px;display:flex}.graph-document-header>div:first-child{grid-template-columns:auto auto;align-items:baseline;column-gap:8px;min-width:0;display:grid}.graph-document-header span{color:var(--text-dim);font-size:var(--text-xs);text-transform:uppercase;grid-column:1/-1;font-weight:700}.graph-document-header h2{font-size:var(--text-lg);margin:0}.graph-document-header code{color:var(--text-muted);font-size:var(--text-xs)}.graph-save-state{min-height:30px;color:var(--success);font-size:var(--text-xs);align-items:center;gap:5px;display:inline-flex}.graph-save-state.is-saving{color:var(--text-muted)}.graph-document-actions{align-items:center;gap:8px;display:flex}.graph-document-actions>span{color:var(--text-dim);font:var(--text-xs) var(--font-mono)}.graph-document-actions button{border-radius:var(--radius-xs);background:var(--accent);min-height:36px;color:var(--content-inverse);cursor:pointer;font-size:var(--text-xs);border:0;padding:0 11px;font-weight:700}.graph-document-actions button:disabled{opacity:.45;cursor:default}.graph-editor-view{flex:1;grid-template-rows:auto minmax(260px,1fr);grid-template-columns:minmax(0,1fr) 310px;min-width:0;min-height:0;display:grid;overflow:auto}.graph-tasks-pane{border-bottom:1px solid var(--border);grid-area:1/1;min-width:0}.graph-dependencies-pane{grid-area:2/1;min-width:0}.graph-builder-pane{border-left:1px solid var(--border);background:var(--bg-panel);flex-direction:column;grid-area:1/2/span 2;min-width:0;min-height:0;display:flex}.graph-section-heading{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:10px;min-height:58px;padding:8px 14px;display:flex}.graph-section-heading span{color:var(--text);font-size:var(--text-sm);font-weight:700}.graph-section-heading p{color:var(--text-muted);font-size:var(--text-xs);margin:2px 0 0}.graph-section-heading button{border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--bg);min-height:36px;color:var(--text);cursor:pointer;font-size:var(--text-xs);align-items:center;gap:5px;padding:0 9px;display:inline-flex}.graph-add-task{border-bottom:1px solid var(--border);background:var(--bg-panel);grid-template-columns:minmax(110px,.7fr) minmax(160px,1fr) auto;gap:7px;padding:9px 14px;display:grid}.graph-add-task input{border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--bg);min-width:0;height:36px;color:var(--text);padding:5px 8px}.graph-add-task button{border-radius:var(--radius-xs);background:var(--accent);min-height:36px;color:var(--content-inverse);cursor:pointer;border:0;padding:0 12px}.graph-task-list{padding:8px 12px 13px}.graph-task{border-bottom:1px solid var(--border)}.graph-task:first-child{border-top:1px solid var(--border)}.graph-task-summary{width:100%;min-height:52px;color:var(--text);text-align:left;cursor:pointer;background:0 0;border:0;grid-template-columns:22px minmax(0,1fr) minmax(120px,auto);align-items:center;gap:7px;padding:5px 9px;display:grid}.graph-task-summary:hover{background:var(--bg-hover)}.graph-task-summary>span{flex-direction:column;min-width:0;display:flex}.graph-task-summary strong,.graph-task-summary code,.graph-task-summary small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.graph-task-summary strong{font-size:var(--text-sm)}.graph-task-summary code{color:var(--text-dim);font-size:var(--text-xs)}.graph-task-summary small{color:var(--text-muted);font:var(--text-xs) var(--font-mono);text-align:right}.graph-task-form{border-top:1px solid var(--border);background:var(--bg-panel);grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding:12px 38px 16px;display:grid}.graph-task-form>label,.graph-task-form details label{min-width:0;color:var(--text-muted);font-size:var(--text-xs);gap:4px;font-weight:700;display:grid}.graph-task-form input,.graph-task-form select,.graph-task-form textarea{border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--bg);width:100%;min-width:0;height:36px;color:var(--text);font-size:var(--text-xs);outline:0;padding:6px 8px}.graph-task-form input:focus,.graph-task-form select:focus,.graph-task-form textarea:focus{border-color:var(--accent)}.graph-task-form label>span{color:var(--text-dim);font-size:var(--text-xs);font-weight:400}.graph-execution-mode{border:1px solid var(--border);border-radius:var(--radius-xs);grid-template-columns:1fr 1fr;align-self:end;display:grid;overflow:hidden}.graph-execution-mode button{border:0;border-right:1px solid var(--border);background:var(--bg);min-height:36px;color:var(--text-muted);cursor:pointer;font-size:var(--text-xs)}.graph-execution-mode button:last-child{border-right:0}.graph-execution-mode button[aria-pressed=true]{background:var(--bg-selected);color:var(--text);font-weight:700}.graph-task-goal{grid-column:1/-1}.graph-task-form .graph-task-goal textarea{resize:vertical;height:96px;line-height:1.45}.graph-task-form details{grid-column:1/-1;padding-top:3px}.graph-task-form details summary{min-height:36px;color:var(--text-muted);cursor:pointer;font-size:var(--text-xs)}.graph-task-remove{border:1px solid var(--danger);border-radius:var(--radius-xs);min-height:36px;color:var(--danger);cursor:pointer;font-size:var(--text-xs);background:0 0;justify-self:start;align-items:center;gap:6px;padding:0 9px;display:inline-flex}.graph-empty-state{min-height:90px;color:var(--text-dim);font-size:var(--text-xs);text-align:center;place-items:center;padding:18px;display:grid}.graph-dependency-editor{min-width:0;padding:12px 14px 20px}.graph-levels{border-bottom:1px solid var(--border);align-items:center;gap:8px;min-width:0;padding:2px 0 14px;display:flex;overflow-x:auto}.graph-level{flex:none;align-items:center;gap:8px;display:flex}.graph-level-label{color:var(--text-dim);font-size:var(--text-xs);text-transform:uppercase;font-weight:700}.graph-level>div{gap:5px;display:flex}.graph-level button{border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--bg-panel);min-height:36px;color:var(--text);cursor:pointer;font-size:var(--text-xs);padding:0 9px}.graph-level button:hover{border-color:var(--accent)}.graph-dependency-list{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:0 16px;padding-top:8px;display:grid}.graph-dependency-list fieldset{border:0;border-bottom:1px solid var(--border);min-width:0;padding:9px 0}.graph-dependency-list legend{color:var(--text);font-size:var(--text-xs);padding:0;font-weight:700}.graph-dependency-list fieldset>div{flex-wrap:wrap;gap:3px 12px;margin-top:5px;display:flex}.graph-dependency-list label{min-height:32px;color:var(--text-muted);font-size:var(--text-xs);cursor:pointer;align-items:center;gap:5px;display:inline-flex}.graph-dependency-list input{width:15px;height:15px;accent-color:var(--accent)}.graph-builder-empty{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:7px;min-height:calc(100% - 58px);padding:24px 16px;display:flex}.graph-builder-empty strong{font-size:var(--text-sm)}.graph-builder-empty p{max-width:230px;color:var(--text-muted);font-size:var(--text-xs);margin:0 0 10px;line-height:1.5}.graph-builder-empty textarea{resize:vertical;border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--bg);width:100%;min-height:92px;color:var(--text);font-size:var(--text-xs);padding:8px}.graph-builder-empty button{border-radius:var(--radius-xs);background:var(--accent);width:100%;min-height:38px;color:var(--content-inverse);border:0}.graph-builder-empty :disabled{opacity:.5}.graph-builder-content{flex-direction:column;flex:1;min-height:0;display:flex}.graph-builder-model{border-bottom:1px solid var(--border);color:var(--text-muted);font-size:var(--text-xs);gap:3px;padding:9px 10px;font-weight:700;display:grid}.graph-builder-model select{border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--bg);width:100%;min-height:34px;color:var(--text);font-size:var(--text-xs);padding:4px 7px}.graph-builder-messages{flex:1;min-height:120px;padding:10px;overflow-y:auto}.graph-builder-loading,.graph-builder-intro{min-height:120px;color:var(--text-muted);font-size:var(--text-xs);text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:6px;display:flex}.graph-builder-intro p{max-width:230px;margin:0;line-height:1.5}.graph-builder-message{margin-bottom:9px}.graph-builder-message>span{color:var(--text-dim);font-size:var(--text-xs);text-transform:uppercase;font-weight:700}.graph-builder-message p{border-left:2px solid var(--border);color:var(--text);font-size:var(--text-xs);white-space:pre-wrap;margin:2px 0 0;padding:7px 8px;line-height:1.5}.graph-builder-message.is-user p{border-left-color:var(--accent);background:var(--bg-selected)}.graph-builder-proposal{border:1px solid var(--success);border-radius:var(--radius-sm);background:color-mix(in srgb, var(--success) 5%, var(--bg));margin:0 10px 9px;padding:9px}.graph-builder-proposal.is-invalid{border-color:var(--danger);background:color-mix(in srgb, var(--danger) 5%, var(--bg))}.graph-builder-proposal header{color:var(--success);align-items:center;gap:5px;display:flex}.graph-builder-proposal.is-invalid header{color:var(--danger)}.graph-builder-proposal header strong{font-size:var(--text-xs)}.graph-builder-proposal header span{color:var(--text-dim);font-size:var(--text-xs);margin-left:auto}.graph-builder-proposal>p{color:var(--text);font-size:var(--text-xs);margin:7px 0;line-height:1.45}.graph-builder-proposal ul{gap:2px;margin:0 0 8px;padding:0;list-style:none;display:grid}.graph-builder-proposal li{color:var(--text-muted);font-size:var(--text-xs)}.graph-builder-proposal li code{color:var(--accent)}.graph-builder-diagnostic{color:var(--danger);font-size:var(--text-xs);margin:6px 0;line-height:1.4}.graph-builder-proposal button{border-radius:var(--radius-xs);background:var(--accent);width:100%;min-height:36px;color:var(--content-inverse);cursor:pointer;font-size:var(--text-xs);border:0;font-weight:700}.graph-builder-proposal button:disabled{opacity:.45;cursor:default}.graph-builder-composer{padding:9px 10px max(9px, env(safe-area-inset-bottom));border-top:1px solid var(--border);background:var(--bg);grid-template-columns:minmax(0,1fr) 44px;gap:6px;display:grid}.graph-builder-composer textarea{resize:none;border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--bg-panel);min-width:0;min-height:70px;color:var(--text);font-size:var(--text-xs);outline:0;padding:7px 8px;line-height:1.45}.graph-builder-composer textarea:focus{border-color:var(--accent)}.graph-builder-composer button{border-radius:var(--radius-xs);background:var(--accent);width:44px;min-height:44px;color:var(--content-inverse);cursor:pointer;border:0;align-self:end;place-items:center;display:grid}.graph-builder-composer button:disabled{opacity:.45;cursor:default}@media (max-width:760px){.workspace-page-header{min-height:62px;padding:max(8px, env(safe-area-inset-top)) 14px 8px 58px}.workspace-page-header p{max-width:270px}.workspace-mobile-menu{z-index:var(--layer-chrome);top:max(9px, env(safe-area-inset-top));border:1px solid var(--border);border-radius:var(--radius-sm);background:color-mix(in srgb, var(--bg) 88%, transparent);width:44px;height:44px;color:var(--text);cursor:pointer;-webkit-backdrop-filter:blur(18px)saturate(130%);backdrop-filter:blur(18px)saturate(130%);place-items:center;display:grid;position:fixed;left:9px}.workspace-page-content{height:100dvh}.graph-tabs-row,.graph-tab,.graph-add-tab{min-height:50px}.graph-create-strip{flex-direction:column;align-items:stretch;padding:10px 12px}.graph-create-strip input{width:100%;min-height:44px}.graph-create-strip button{min-height:44px}.graph-mobile-segments{border-bottom:1px solid var(--border);background:var(--bg-panel);grid-template-columns:repeat(3,1fr);min-height:46px;padding:5px 8px;display:grid}.graph-mobile-segments button{border-radius:var(--radius-xs);min-height:36px;color:var(--text-muted);cursor:pointer;font-size:var(--text-xs);text-transform:capitalize;background:0 0;border:0;font-weight:700}.graph-mobile-segments button[aria-selected=true]{background:var(--bg-selected);color:var(--text)}.graph-document-header{min-height:54px;padding-inline:12px}.graph-editor-view{padding-bottom:env(safe-area-inset-bottom);display:block;overflow-y:auto}.graph-editor-view.is-tasks :is(.graph-dependencies-pane,.graph-builder-pane),.graph-editor-view.is-graph :is(.graph-tasks-pane,.graph-builder-pane),.graph-editor-view.is-build :is(.graph-tasks-pane,.graph-dependencies-pane){display:none}.graph-builder-pane{border-left:0;min-height:calc(100% - 1px)}.graph-section-heading{min-height:54px;padding-inline:12px}.graph-section-heading button{min-height:44px}.graph-task-list{padding-inline:8px}.graph-task-summary{grid-template-columns:22px minmax(0,1fr);min-height:56px}.graph-task-summary small{text-align:left;grid-column:2}.graph-task-form{grid-template-columns:1fr;padding:12px 12px 16px 37px}.graph-task-goal,.graph-task-form details{grid-column:1}.graph-task-form input,.graph-task-form select,.graph-task-form textarea,.graph-execution-mode button,.graph-task-remove{min-height:44px}.graph-add-task{grid-template-columns:1fr;padding-inline:8px}.graph-add-task input,.graph-add-task button,.graph-level button{min-height:44px}.graph-dependency-list{grid-template-columns:1fr}.graph-dependency-list label{min-height:44px}}@media (prefers-reduced-transparency:reduce){.workspace-mobile-menu{-webkit-backdrop-filter:none;backdrop-filter:none;background:var(--bg)}}.hero-conflict-state{color:var(--danger);font-size:var(--text-sm);font-weight:600}.hero-conflict-dialog{z-index:30;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--border);grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:1px;display:grid;position:absolute;inset:52px 12px 12px;overflow:hidden}.hero-conflict-dialog>div{background:var(--bg);flex-direction:column;min-width:0;display:flex}.hero-conflict-dialog header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;min-height:44px;padding:0 12px;display:flex}.hero-conflict-dialog pre{color:var(--text-muted);font:var(--text-xs)/1.55 var(--font-mono);white-space:pre-wrap;overflow-wrap:anywhere;flex:1;margin:0;padding:12px;overflow:auto}@media (max-width:640px){.hero-conflict-dialog{grid-template-rows:minmax(0,1fr) minmax(0,1fr);grid-template-columns:1fr;inset:52px 8px 8px}}@media (prefers-contrast:more){.graph-task,.graph-tab{border-color:currentColor}.graph-section-heading p,.graph-task-summary small,.workspace-page-header p{color:var(--text)}}.global-heroes{grid-template-columns:278px minmax(0,1fr);width:100%;height:100%;min-height:0;display:grid}.global-heroes-list{border-right:1px solid var(--border);background:var(--bg-panel);flex-direction:column;min-width:0;min-height:0;display:flex}.global-heroes-list>header{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:8px;min-height:58px;padding:8px 10px 8px 13px;display:flex}.global-heroes-list>header>div{flex-direction:column;min-width:0;display:flex}.global-heroes-list>header strong{font-size:var(--text-sm)}.global-heroes-list>header span{color:var(--text-muted);font-size:var(--text-xs)}.global-heroes-list>header button{border-radius:var(--radius-xs);width:44px;height:44px;color:var(--accent);cursor:pointer;background:0 0;border:0;place-items:center;display:grid}.global-hero-create{border-bottom:1px solid var(--border);gap:6px;padding:8px 10px;display:grid}.global-hero-create input{border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--bg);width:100%;min-height:36px;color:var(--text);padding:5px 8px}.global-hero-create button{border-radius:var(--radius-xs);background:var(--accent);min-height:36px;color:var(--content-inverse);cursor:pointer;border:0}.global-hero-search{border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--bg);min-height:42px;color:var(--text-dim);grid-template-columns:18px minmax(0,1fr);align-items:center;gap:5px;margin:8px;padding:0 8px;display:grid}.global-hero-search input{min-width:0;color:var(--text);font-size:var(--text-xs);background:0 0;border:0;outline:0}.global-heroes-list [role=listbox]{flex:1;min-height:0;padding:0 6px 8px;overflow-y:auto}.global-heroes-list [role=option]{border-radius:var(--radius-xs);width:100%;min-height:56px;color:var(--text);cursor:pointer;text-align:left;background:0 0;border:0;grid-template-columns:24px minmax(0,1fr) 16px;align-items:center;gap:7px;padding:6px 8px;display:grid}.global-heroes-list [role=option]:hover{background:var(--bg-hover)}.global-heroes-list [role=option][aria-selected=true]{background:var(--bg-selected);box-shadow:inset 2px 0 var(--accent)}.global-heroes-list [role=option]>span{flex-direction:column;min-width:0;display:flex}.global-heroes-list [role=option] :is(strong,code,small){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.global-heroes-list [role=option] strong{font-size:var(--text-xs)}.global-heroes-list [role=option] code{color:var(--text-dim);font-size:var(--text-xs)}.global-heroes-list [role=option] small{color:var(--danger);font-size:var(--text-xs)}.global-hero-detail{min-width:0;min-height:0;overflow-y:auto}.global-hero-commandbar{z-index:3;border-bottom:1px solid var(--border);background:var(--bg);grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:10px;min-height:58px;padding:7px 14px;display:grid;position:sticky;top:0}.global-hero-commandbar>div{flex-direction:column;min-width:0;display:flex}.global-hero-commandbar strong,.global-hero-commandbar code{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.global-hero-commandbar strong{font-size:var(--text-md)}.global-hero-commandbar code{color:var(--text-dim);font-size:var(--text-xs)}.global-hero-command-actions{align-items:center;gap:8px;display:flex}.global-hero-command-actions>span{color:var(--success);font-size:var(--text-xs);align-items:center;gap:5px;display:inline-flex}.global-hero-command-actions>span.is-saving{color:var(--text-muted)}.global-hero-command-actions button{border-radius:var(--radius-xs);background:var(--accent);min-height:36px;color:var(--content-inverse);cursor:pointer;font-size:var(--text-xs);border:0;padding:0 11px;font-weight:700}.global-hero-command-actions button:disabled{opacity:.5;cursor:default}.global-hero-back{display:none}.global-hero-form>section{border-bottom:1px solid var(--border);padding:16px 18px}.global-hero-form h3{font-size:var(--text-sm);margin:0 0 10px}.global-hero-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:9px;display:grid}.global-hero-grid label,.global-hero-prompt{min-width:0;color:var(--text-muted);font-size:var(--text-xs);gap:4px;font-weight:700;display:grid}.global-hero-grid label.wide{grid-column:span 2}.global-hero-grid input,.global-hero-grid select,.global-hero-prompt textarea{border:1px solid var(--border);border-radius:var(--radius-xs);background:var(--bg-panel);width:100%;min-width:0;min-height:36px;color:var(--text);font-size:var(--text-xs);outline:0;padding:6px 8px}.global-hero-grid input:focus,.global-hero-grid select:focus,.global-hero-prompt textarea:focus{border-color:var(--accent)}.global-hero-prompt textarea{resize:vertical;min-height:180px;line-height:1.5}.global-hero-grid .global-hero-modes{min-width:0;color:var(--text-muted);font-size:var(--text-xs);gap:5px;font-weight:700;display:grid}.global-hero-modes>div{flex-wrap:wrap;gap:5px 14px;margin-top:2px;display:flex}.global-hero-grid .global-hero-mode{color:var(--text);font-size:var(--text-xs);align-items:center;gap:5px;font-weight:500;display:inline-flex}.global-hero-grid .global-hero-mode input{width:16px;height:16px;min-height:16px}.global-hero-hint{color:var(--text-dim);font-size:var(--text-xs);margin:2px 0 0;font-weight:400;line-height:1.4}@media (max-width:760px){.global-heroes{display:block}.global-heroes-list,.global-hero-detail{border:0;width:100%;height:100%}.global-heroes.has-selection .global-heroes-list,.global-heroes:not(.has-selection) .global-hero-detail{display:none}.global-hero-search,.global-hero-create input,.global-hero-create button{min-height:44px}.global-heroes-list [role=option]{min-height:60px}.global-hero-commandbar{grid-template-columns:auto minmax(0,1fr) auto;min-height:58px;padding:5px 8px}.global-hero-back{min-height:44px;color:var(--text);cursor:pointer;background:0 0;border:0;align-items:center;gap:4px;padding:0 7px;display:inline-flex}.global-hero-grid{grid-template-columns:1fr}.global-hero-grid label.wide{grid-column:1}.global-hero-grid input,.global-hero-grid select{min-height:44px}.global-hero-form>section{padding:14px 12px}}
@@ -1 +0,0 @@
1
- (globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,27437,18929,426,e=>{"use strict";var t=e.i(18050),o=e.i(71645);let s="ennote-locale";function n(){try{let e=window.localStorage.getItem(s);if("en"===e||"zh-CN"===e)return e}catch{}return"en"}function r(e){try{window.localStorage.setItem(s,e)}catch{}}function i(e){"u">typeof document&&(document.documentElement.lang=e)}e.s(["LOCALES",0,["en","zh-CN"],"applyLocaleAttribute",0,i,"readLocale",0,n,"writeLocale",0,r],18929);let a={en:{"general.title":"General","general.desc":"Appearance and workspace-level preferences.","general.appearance":"Appearance","general.permission":"Default permission","general.permission.desc":"Permission preset applied to newly created sessions.","general.language":"Language","language.en":"English","language.zh":"中文","sidebar.aria":"Projects and sessions","sidebar.newChat":"New Chat","sidebar.newChatAria":"New chat","sidebar.selectProjectFirst":"Select a project first","sidebar.heroes":"Heroes","sidebar.graphs":"Graphs","sidebar.searchSessions":"Search sessions","sidebar.search":"Search","sidebar.clearSearch":"Clear search","sidebar.sessions":"Sessions","sidebar.workspaces":"Workspaces","sidebar.refresh":"Refresh sessions","sidebar.loadingSessions":"Loading sessions…","sidebar.chooseProject":"Choose a project to start.","sidebar.newProject":"New Project","sidebar.settings":"Settings","sidebar.collapse":"Collapse sidebar","sidebar.expand":"Expand sidebar","sidebar.openNav":"Open navigation","sidebar.collapseNav":"Collapse navigation","sidebar.closeNav":"Close navigation","sidebar.selectProject":"Select project","sidebar.selectProjectEllipsis":"Select project…","sidebar.unknown":"Unknown","sidebar.noProjects":"No projects yet","sidebar.addProject":"Add project…","sidebar.addWorkspace":"Add workspace","sidebar.pin":"Pin project","sidebar.unpin":"Unpin project","sidebar.loading":"Loading…","sidebar.noSessions":"No sessions yet.","sidebar.noSessionsMatch":"No sessions match","sidebar.showArchived":"Show archived sessions","sidebar.hideArchived":"Hide archived sessions","sidebar.noArchived":"No archived sessions.","sidebar.chat":"chat","sidebar.chats":"chats","sidebar.rename":"Rename","sidebar.deleteProject":"Delete project","sidebar.renameProject":"Rename project","sidebar.renameSession":"Rename session","sidebar.newSession":"New session","sidebar.deleteProjectTitle":"Delete {name}?","sidebar.deleteProjectBody":"The project is removed from the sidebar. Its workspace folder and session data stay on disk.","sidebar.deleteProjectConfirm":"Delete","sidebar.cancel":"Cancel","sidebar.save":"Save","sidebar.archive":"Archive session","sidebar.restore":"Restore session","time.now":"now","time.minutes":"min","time.hours":"h","time.days":"d","time.months":"mo","time.years":"y","composer.dropFiles":"Drop images or text files","composer.picker":"Insert","composer.insert":"Insert a hero, graph, skill, or file","picker.selected":"selected","picker.filter":"Filter…","picker.expand":"Expand group","picker.collapse":"Collapse group","picker.readOnly":"read-only","picker.empty":"Nothing matches.","picker.actions":"Actions","picker.heroes":"Heroes","picker.graphs":"Graphs","picker.skills":"Skills","picker.templates":"Templates","picker.boundSkills":"Loaded by a Hero","composer.targets":"Addressed targets","composer.removeHero":"Remove hero","composer.removeGraph":"Remove graph","composer.removeSkill":"Remove skill","composer.hint.resizeAria":"Resize message input","composer.attachedFiles":"Attached files","composer.removeImage":"Remove image","composer.remove":"Remove","composer.configureRun":"Configure run","composer.runConfiguration":"Run configuration","composer.target":"Target","composer.permission":"Permission","composer.attach":"Attach","composer.attachFiles":"Attach files","composer.attachImage":"Attach image","composer.compactContext":"Compact context","composer.placeholderCompacting":"Context compaction in progress","composer.placeholderSteer":"Steer the agent… (Enter)","composer.placeholderNoSession":"Choose a workspace to start","composer.placeholderWelcome":"Describe what you want to build… / commands, @ files or sessions","composer.placeholderDefault":"Type a message…","composer.answerQuestionFirst":"Answer the question above before sending another message","run.status.waitingAnswer":"Waiting for your answer","run.status.waitingApproval":"Waiting for approval","run.status.waitingDelegation":"Waiting for delegation approval","run.status.waitingChildren":"Delegated heroes are working…","run.status.running":"Running…","run.status.runningTool":"Running: {detail}…","run.status.reconnecting":"Reconnecting","run.status.steering":"Steering…","run.status.cancelled":"Cancelled","run.status.compacting":"Compacting context…","run.status.compactionQueued":"Compaction queued…","run.status.compactionRetryWait":"Retrying compaction in {detail} ms…","run.status.compactionRetry":"Retrying compaction…","run.status.checkpointReady":"Context checkpoint ready","run.status.answerSubmitted":"Answer submitted. Resuming…","run.status.approvalGranted":"Approval granted. Resuming…","run.status.approvalRejected":"Approval rejected. Resuming…","run.status.resuming":"Resuming…","run.status.modelRetry":"Retrying model in {detail} ms…","run.status.preparingContext":"Preparing context…","run.status.preparingRunContext":"Preparing current run context…","run.status.compactingRun":"Compacting current run context…","run.status.runCompactionRetry":"Retrying run compaction in {detail} ms…","run.status.runContextCompacted":"Current run context compacted","run.status.runCompactionSkipped":"Run compaction skipped","run.status.usingCheckpoint":"Using context checkpoint…","run.status.recoveringTool":"Recovering truncated tool call…","run.status.outputTruncated":"Model output truncated","run.status.usingModel":"Using {detail}…","run.status.describingImage":"Describing image…","run.status.imageReady":"Image description ready","run.status.completed":"Completed","run.status.interrupted":"Interrupted","run.status.sending":"Sending…","run.status.uploadingImage":"Uploading image…","run.status.cache":"cache {count}","run.status.answerQuestionFirst":"Answer the question before sending another message","graph.title":"Graph runs","graph.running":"{count} running","graph.emptySession":"Select a session to see its graph runs.","graph.emptyRuns":"No graph runs in this session yet.","graph.loadFailed":"Failed to load graph tasks","graph.unnamed":"Graph run","graph.tasks":"{done}/{total} tasks","graph.loadingTasks":"Loading tasks…","graph.noTasks":"No task checkpoints.","graph.stateLabel":"state: {state}","graph.tokens":"tokens: {count}","graph.justNow":"just now","graph.minutesAgo":"{count}m ago","graph.node.pending":"Pending","graph.node.running":"Running","graph.node.completed":"Done","graph.node.failed":"Failed","graph.node.blocked":"Blocked","graph.node.cancelled":"Cancelled","graph.node.interrupted":"Interrupted","graph.flow.pending":"Pending","graph.flow.running":"Running","graph.flow.completed":"Completed","graph.flow.failed":"Failed","graph.flow.cancelled":"Cancelled","graph.flow.convergence_exceeded":"Convergence exceeded","graph.flow.budget_exceeded":"Budget exceeded","delegation.mode.background":"background","delegation.mode.blocking":"blocking","delegation.handle.active":"active","delegation.handle.completed":"completed","delegation.handle.cancelled":"cancelled","delegation.handle.settled":"settled","delegation.handle.pending":"pending","delegation.handle.consumed_by_parent":"consumed by parent","delegation.handle.notified":"notified","delegation.handle.resume_queued":"resume queued","delegation.handle.resume_completed":"resume completed","delegation.completion":"Background delegation · generation {generation}","composer.messageAria":"Message the agent","composer.steerAria":"Steer the agent","composer.queueFollowUp":"Queue follow-up","composer.followUp":"Follow-up","composer.runContext":"Run configuration","composer.attachMenu":"Attachments and compaction","composer.queue.title":"Queued","composer.queue.aria":"Queued messages","composer.queue.count":"{count} queued","composer.queue.expand":"Expand queued messages","composer.queue.collapse":"Collapse queued messages","composer.queue.edit":"Edit queued message","composer.queue.steer":"Steer now","composer.queue.remove":"Remove queued message","composer.send":"Send","composer.stopRun":"Stop run","composer.modelSelect.triggerFallback":"Select model","composer.modelSelect.selectAria":"Select model","composer.modelSelect.aria":"Select model, current {model}","composer.modelSelect.ariaEffort":"Select model, current {model}, reasoning effort {effort}","composer.modelSelect.menu":"Model and reasoning effort","composer.modelSelect.model":"Model","composer.modelSelect.effort":"Effort","composer.modelSelect.emptyModels":"No models available.","composer.modelSelect.emptyEfforts":"This model provides no reasoning effort levels.","composer.permissionMode":"Permission mode","composer.heroTarget":"Hero target","composer.frozenForRun":"is frozen for this run","permission.discuss":"Read-only","permission.discuss.description":"Read-only tools pass. Writing files, running commands, and fetching the web are refused.","permission.ask":"Ask","permission.ask.description":"Read-only tools pass. Every other tool waits for your approval.","permission.auto":"Auto","permission.auto.description":"Everything the policy allows runs without asking you first.","composer.policyUnavailable":"Policy unavailable","composer.expanding":"Expanding prompt…","composer.queued":"Queued","composer.thinking.default":"Default","composer.thinking.low":"Low reasoning","composer.thinking.medium":"Medium reasoning","composer.thinking.high":"High reasoning","context.aria":"{percent} of context used","context.used":"of context used","context.system":"System prompt","context.hero":"Hero","context.rules":"Project rules","context.skills":"Skills","context.tools":"Tools","context.reminders":"Reminders","context.conversation":"Conversation","context.other":"Other","context.messages":"Messages","checkpoint.promptVersion":"Summary contract","checkpoint.contract":"Digest","inspector.noRun":"Send a message to inspect the prompt the model receives.","inspector.loading":"Loading the frozen run prompt…","inspector.run":"Run","inspector.frozen":"Frozen before the first model request. Nothing here is re-derived from current settings.","inspector.unrecorded":"This run did not record its prompt composition, so there is nothing to show.","inspector.selectedSkills":"Skills you attached","inspector.composition":"Prompt composition","inspector.sections":"{count} sections","inspector.prompt":"Frozen prompt text","inspector.sectionsDigest":"Sections","inspector.composedDigest":"Composed","inspector.baseDigest":"Base prompt","inspector.transcript":"Private run transcript","inspector.transcriptNote":"The model-visible messages this run generated, kept for intact resume. Run-private: it is never part of the conversation timeline.","inspector.transcriptEmpty":"This run generated no transcript rows.","inspector.transcriptPrivate":"private","inspector.transcriptThinking":"Reasoning","inspector.transcriptCall":"Call","inspector.transcriptResult":"Result","inspector.transcriptError":"Error","inspector.transcriptImage":"Image {width}×{height}","inspector.transcriptUnknown":"Unrecognized block: {type}","inspector.transcriptOlder":"Load older messages","inspector.mcp":"MCP servers","inspector.mcpNone":"No MCP server was frozen for this run.","inspector.mcpUnavailable":"unavailable","inspector.mcpRequired":"required","inspector.mcpTools":"{count} tools","inspector.mcpProtocol":"protocol","inspector.mcpInstructions":"Instructions from the server","inspector.skillCatalog":"Skill catalog","inspector.catalog.materialized":"materialized","inspector.catalog.disabled":"skipped, read denied by the frozen tool policy","stats.section":"Session figures","stats.counts":"{turns} turns · {steps} steps","stats.llm":"LLM {duration}","stats.toolCall":"Tool call {duration}","stats.ttftAverage":"TTFT avg {duration}","stats.tokensPerSecond":"{throughput} tok/s","stats.cacheHit":"Cache hit {percent}%","stats.tokens":"Input {input} tok · Output {output} tok",copy:"Copy",copied:"Copied","message.branch":"Branch into a new conversation","message.branchUnavailable":"Available only on the last message of a completed turn","message.ranFor":"Ran for {duration}","message.ttft":"TTFT {seconds}s","message.tokensPerSecond":"{tps} tok/s","duration.seconds":"{seconds}s","duration.minutes":"{minutes}m{seconds}s","directory.title":"Select Workspace Directory","directory.home":"Home","directory.path":"Workspace directory path","directory.editPath":"Edit path","directory.newFolder":"New folder","directory.folderName":"Folder name","directory.createIn":'New folder in "{name}"',"directory.untitledFolder":"Untitled folder","directory.create":"Create","directory.cancel":"Cancel","directory.open":"Open","directory.opening":"Opening…","directory.loading":"Loading…","directory.truncated":"Too many folders to list; only the beginning is shown.","directory.showHidden":"Show hidden files","directory.roots":"Browse roots","empty.project.title":"Choose a project to start","empty.project.body":"Sessions, files, and runs are scoped per project. Choose or create a project from the top-left.","empty.project.choose":"Choose project…","empty.session.title":"Start a new conversation","empty.session.body":"No session selected in this project. Start a new conversation or pick one from the sidebar.","empty.session.create":"New session","empty.session.hint":"or choose an existing session on the left","empty.noModel":"No model configured — open Settings to add a provider and model.","welcome.headline":"Into the Unknown","welcome.preview":"Preview","settings.models.title":"Models","settings.models.intro":"Enter your API keys to use models from the following providers.","settings.models.edit":"Edit","settings.models.editProvider":"Edit {provider}","settings.models.remove":"Delete","settings.models.removeProvider":"Delete {provider}","settings.context.removeOverride":"Remove override {index}","settings.models.deleteTitle":"Delete {provider}?","settings.models.deleteDescription":"Deleting {provider} removes its configuration. Any credential it uses is managed elsewhere and will be kept.","settings.models.deleteDescriptionWithCredential":"Deleting {provider} removes its configuration and stored API key.","settings.models.deleteConfirm":"Delete {provider}","settings.models.deleting":"Deleting {provider}…","settings.models.add":"Add provider","settings.models.provider":"Provider","settings.models.close":"Close","settings.models.cancel":"Cancel","settings.models.apply":"Apply","settings.models.applying":"Applying…","settings.models.savedProvider":"Saved {provider}.","settings.models.credentialConfigured":"API key configured","settings.models.credentialMissing":"API key missing","settings.models.readOnly":"The settings document is read-only in this deployment.","settings.models.loadFailed":"Loading the provider directory failed","settings.models.conflict":"Someone else changed these settings while this card was open. Close it and reopen to edit the current values.","settings.models.retry":"Retry","settings.models.keyInput":"API key","settings.models.keyPlaceholder":"Enter your API key","settings.models.keyPlaceholderNative":"Enter an API key, or leave blank to use environment authentication","settings.models.keyStored":"Configured — enter a new value to replace","settings.models.keyEnvLocked":"Provided by the launch environment (read-only)","settings.models.customized":"Customized settings","settings.models.baseUrl":"Base URL","settings.models.baseUrlDefault":"Provider default","settings.models.models":"Models","settings.models.modelsInherited":"Using the adapter defaults","settings.models.modelsCustomized":"Customized model catalog","settings.models.resetModels":"Restore defaults","settings.models.model":"Model","settings.models.modelId":"Model ID","settings.models.modelName":"Display name","settings.models.modelNamePlaceholder":"Uses the model ID when empty","settings.models.contextWindow":"Context window","settings.models.contextWindowPlaceholder":"Uses the provider default","settings.models.maxTokens":"Max output tokens","settings.models.maxTokensPlaceholder":"Uses the provider default","settings.models.modelAdvanced":"Capacities","settings.models.addModel":"Add model","settings.models.removeModel":"Delete model","settings.models.modelsEmpty":"No models will be shown in the selector. Unlisted IDs can still be sent directly.","settings.models.keyBlank":"Enter the API key, or leave the field empty to keep the stored one.","settings.models.keyBlankNew":"Enter the API key, or leave the field empty if this provider authenticates another way.","settings.models.keyIllegalCharacters":"This API key is not in a valid format. Please check it.","settings.models.modelIdRequired":"Model ID is required.","settings.models.modelIdDuplicate":"Model ID must be unique.","settings.models.modelNameInvalid":"Display name cannot be empty.","settings.models.modelContextInvalid":"Context window must be a positive count, like 131072, 256K, or 1M.","settings.models.modelMaxTokensInvalid":"Max output tokens must be a positive count, like 8192, 64K, or 1M.","settings.models.advancedHint":"Other fields live in models.json; edit that file directly.","settings.models.modelCapacityInvalid":"A capacity must be a number, optionally suffixed K or M.","settings.models.modelDuplicate":"Each model ID may appear once.","settings.models.modelContextWindow":"Context window","settings.models.modelMaxTokens":"Max output tokens","settings.models.fetchModels":"Fetch available models","settings.models.fetching":"Asking the provider…","settings.models.fetchNeedsBaseUrl":"Enter the base URL first, then fetch.","settings.models.fetchEmpty":"The provider listed no models. Add them by hand.","settings.models.fetchTitle":"Choose models to add","settings.models.fetchDescription":"These are the models this provider has available. Choose the ones to add.","settings.models.fetchAdopt":"Add selected","settings.models.fetchSelectAll":"Select all","settings.models.fetchDeselectAll":"Deselect all","settings.models.customAdd":"Add a custom provider","settings.models.customTitle":"Custom provider","settings.models.customTag":"Custom","settings.models.customRoute":"Provider ID","settings.models.customRouteHint":"Lowercase identifier, starting with a letter, that uniquely names this provider in requests and as its credential name.","settings.models.customRouteInvalid":"Start with a lowercase letter; then lowercase letters, digits, and dashes.","settings.models.customRouteTaken":"A provider already uses this ID.","settings.models.customDisplayName":"Display name","settings.models.customApi":"API protocol","settings.models.customApiUnset":"Not selected","settings.models.customNeedsBaseUrl":"A custom provider needs a base URL.","settings.models.customNeedsModels":"A custom provider needs at least one model.","settings.models.create":"Create provider","settings.models.creating":"Creating…","settings.search.placeholder":"Search settings…","settings.search.aria":"Search settings","settings.search.clear":"Clear search","settings.search.empty":"No settings match “{query}”.","settings.status.saving":"Saving…","settings.status.saved":"Saved","settings.status.failed":"Save failed","conversation.toolBatch.ariaOne":"Tool batch with 1 action","conversation.toolBatch.ariaMany":"Tool batch with {count} actions","conversation.toolBatch.titleOne":"Tool activity","conversation.toolBatch.titleMany":"{count} tool activities","conversation.toolBatch.running":"Running {tool}…","conversation.toolBatch.failed":"{count} failed","conversation.toolBatch.pendingOne":"Pending tool activity","conversation.toolBatch.pendingMany":"{count} pending tool activities","conversation.approval.required":"Approval required","conversation.approval.panelAria":"Tool approval required","conversation.approval.delegationRequired":"Delegation approval required","conversation.approval.waiting":"Waiting","conversation.approval.batchOne":"Batch {iteration} · 1 action","conversation.approval.batchMany":"Batch {iteration} · {count} actions","conversation.approval.remember":"Remember for {scope} in this session","conversation.approval.rejectBatch":"Reject batch","conversation.approval.rejecting":"Rejecting…","conversation.approval.approveBatch":"Approve batch","conversation.approval.approving":"Approving…","conversation.approval.skills":"skills","conversation.approval.after":"after","conversation.approval.modelCalls":"model","conversation.approval.toolCalls":"tool","conversation.question.title":"A question for you","conversation.question.waiting":"The run is paused until you answer.","conversation.question.submitted":"Answer submitted.","conversation.question.multiHint":"Select one or more.","conversation.question.other":"Other","conversation.question.otherPlaceholder":"Type your answer","conversation.question.answered":"Answer","conversation.question.submit":"Submit answer","conversation.question.submitting":"Submitting…","conversation.tool.risk.readOnly":"Read only","conversation.tool.risk.localWrite":"Local write","conversation.tool.risk.shell":"Shell","conversation.tool.risk.external":"External","conversation.tool.risk.delegation":"Delegation","conversation.tool.risk.sensitive":"Sensitive","conversation.tool.state.done":"Done","conversation.tool.state.pending":"Pending","conversation.tool.state.running":"Running","conversation.tool.state.rejected":"Rejected","conversation.tool.state.interrupted":"Interrupted","conversation.tool.state.failed":"Failed","conversation.tool.arguments":"Arguments","conversation.tool.result":"Result","conversation.tool.errorOutput":"Error output","conversation.tool.noOutput":"No output","conversation.tool.noArguments":"No arguments recorded.","conversation.tool.incompleteArguments":"Arguments were incomplete.","conversation.tool.after":"after {names}","conversation.thinking.reasoning":"Reasoning","conversation.attention.title":"Attention","conversation.attention.aria":"Attention ({count})","conversation.attention.pending":"{count} pending","conversation.attention.empty":"Nothing needs attention.","conversation.attention.retryBudget":"Retry budget increase awaits approval","conversation.attention.approvalRequired":"Approval required","conversation.attention.needsInput":"Delegated task needs your input","conversation.attention.completed":"Background delegation completed","conversation.attention.failed":"Background delegation failed","conversation.attention.dismiss":"Dismiss","conversation.attention.action":"action","conversation.attention.questionOne":"1 question","conversation.attention.questionMany":"{count} questions","conversation.attention.actionAnswerQuestion":"Answer question","conversation.attention.actionToolApproval":"Review tool call","conversation.attention.actionDelegationApproval":"Review delegation","conversation.attention.actionDelegationInput":"Provide input","conversation.chat.runInterrupted":"Run interrupted","conversation.chat.runFailed":"Run failed","conversation.chat.retry":"Retry","conversation.chat.retrying":"Retrying…","conversation.chat.attemptRetryable":"Attempt {attempt} can be retried safely.","conversation.chat.loadEarlier":"Load earlier messages","conversation.chat.loadingEarlier":"Loading earlier messages…","conversation.chat.loading":"Loading conversation…","conversation.chat.historyUnavailable":"Conversation history unavailable: {message}","conversation.chat.newConversation":"New conversation","conversation.chat.startHint":"Start with a question, file, or analysis task.","conversation.chat.dismissError":"Dismiss error","conversation.chat.recovery.sideEffect":"Retry is unavailable because tools may have changed external state.","conversation.chat.recovery.projectedOutput":"Retry is unavailable because this attempt already committed output.","conversation.chat.recovery.activeRun":"Another run is active.","conversation.chat.recovery.notActive":"This attempt is no longer on the active branch.","selection.quote":"Quote in composer","selection.copy":"Copy","selection.copied":"Copied","selection.explain":"Explain","selection.explainPrompt":"Explain this passage:","selection.source.chat":"Conversation","selection.aria":"Selection actions","message.expand":"Show full message","message.collapse":"Collapse message","conversation.rail.aria":"Conversation turns","conversation.rail.turn":"Turn {index}","conversation.rail.goTo":"Go to turn {index}: {label}","conversation.jumpLatest":"Jump to latest","conversation.newMessages":"New messages","conversation.compaction.aria":"Create context checkpoint","conversation.compaction.title":"Create context checkpoint","conversation.compaction.cancel":"Cancel","conversation.compaction.placeholder":"Optional focus for the checkpoint…","conversation.compaction.creating":"Creating…","conversation.compaction.confirm":"Create checkpoint","conversation.delegation.background":"Background delegation","conversation.delegation.active":"{count} active","conversation.delegation.settled":"all settled","conversation.delegation.running":"running in background…","rightPanel.files":"Files","rightPanel.graphs":"Graphs","rightPanel.status":"Status","rightPanel.pin":"Pin this channel","rightPanel.unpin":"Unpin this channel","rightPanel.close":"Close {name}","rightPanel.add":"Add a channel","rightPanel.launcherHint":"Choose a channel to show beside the conversation.","rightPanel.showNavigator":"Show the file navigator","rightPanel.hideNavigator":"Hide the file navigator","rightPanel.resizeNavigator":"Resize the file navigator","rightPanel.runsCount":"{count} runs","rightPanel.needsAttention":"Waiting for you"},"zh-CN":{"general.title":"通用","general.desc":"外观与工作区偏好设置。","general.appearance":"外观","general.permission":"默认权限","general.permission.desc":"应用于新建会话的权限预设。","general.language":"语言","language.en":"English","language.zh":"中文","sidebar.aria":"项目与会话","sidebar.newChat":"新对话","sidebar.newChatAria":"新对话","sidebar.selectProjectFirst":"请先选择项目","sidebar.heroes":"英雄","sidebar.graphs":"图谱","sidebar.searchSessions":"搜索会话","sidebar.search":"搜索","sidebar.clearSearch":"清除搜索","sidebar.sessions":"会话","sidebar.workspaces":"工作区","sidebar.refresh":"刷新会话","sidebar.loadingSessions":"加载会话中…","sidebar.chooseProject":"选择一个项目开始。","sidebar.newProject":"新建项目","sidebar.settings":"设置","sidebar.collapse":"收起侧边栏","sidebar.expand":"展开侧边栏","sidebar.openNav":"打开导航","sidebar.collapseNav":"收起导航","sidebar.closeNav":"关闭导航","sidebar.selectProject":"选择项目","sidebar.selectProjectEllipsis":"选择项目…","sidebar.unknown":"未知","sidebar.noProjects":"暂无项目","sidebar.addProject":"添加项目…","sidebar.addWorkspace":"添加工作区","sidebar.pin":"固定项目","sidebar.unpin":"取消固定","sidebar.loading":"加载中…","sidebar.noSessions":"暂无会话。","sidebar.noSessionsMatch":"没有匹配的会话","sidebar.showArchived":"显示已归档会话","sidebar.hideArchived":"隐藏已归档会话","sidebar.noArchived":"无已归档会话。","sidebar.chat":"个会话","sidebar.chats":"个会话","sidebar.rename":"重命名","sidebar.deleteProject":"删除项目","sidebar.renameProject":"重命名项目","sidebar.renameSession":"重命名会话","sidebar.newSession":"新建会话","sidebar.deleteProjectTitle":"删除 {name}?","sidebar.deleteProjectBody":"项目将从侧边栏移除。其工作区文件夹和会话数据仍保留在磁盘上。","sidebar.deleteProjectConfirm":"删除","sidebar.cancel":"取消","sidebar.save":"保存","sidebar.archive":"归档会话","sidebar.restore":"恢复会话","time.now":"刚刚","time.minutes":"分钟","time.hours":"小时","time.days":"天","time.months":"个月","time.years":"年","composer.dropFiles":"拖放图片或文本文件","composer.picker":"插入","composer.insert":"插入英雄、图谱、技能或文件","picker.selected":"已选","picker.filter":"筛选…","picker.expand":"展开分组","picker.collapse":"折叠分组","picker.readOnly":"只读","picker.empty":"没有匹配项。","picker.actions":"动作","picker.heroes":"英雄","picker.graphs":"图谱","picker.skills":"技能","picker.templates":"模板","picker.boundSkills":"由英雄加载","composer.targets":"本轮寻址","composer.removeHero":"移除英雄","composer.removeGraph":"移除图谱","composer.removeSkill":"移除技能","composer.hint.resizeAria":"调整输入框高度","composer.attachedFiles":"已附加文件","composer.removeImage":"移除图片","composer.remove":"移除","composer.configureRun":"配置运行","composer.runConfiguration":"运行配置","composer.target":"目标","composer.permission":"权限","composer.attach":"附加","composer.attachFiles":"附加文件","composer.attachImage":"附加图片","composer.compactContext":"压缩上下文","composer.placeholderCompacting":"正在压缩上下文","composer.placeholderSteer":"引导 Agent…(回车)","composer.placeholderNoSession":"选择一个工作区开始","composer.placeholderWelcome":"描述你想要构建的内容… / 调用指令 @ 文件或对话","composer.placeholderDefault":"输入消息…","composer.answerQuestionFirst":"请先回答上方的问题,再发送新消息","run.status.waitingAnswer":"等待你的回答","run.status.waitingApproval":"等待审批","run.status.waitingDelegation":"等待委托审批","run.status.waitingChildren":"委托的角色正在工作…","run.status.running":"运行中…","run.status.runningTool":"正在运行 {detail}…","run.status.reconnecting":"正在重连","run.status.steering":"正在引导…","run.status.cancelled":"已取消","run.status.compacting":"正在压缩上下文…","run.status.compactionQueued":"上下文压缩已排队…","run.status.compactionRetryWait":"{detail} 毫秒后重试压缩…","run.status.compactionRetry":"正在重试压缩…","run.status.checkpointReady":"上下文检查点已就绪","run.status.answerSubmitted":"回答已提交,正在恢复…","run.status.approvalGranted":"已批准,正在恢复…","run.status.approvalRejected":"已拒绝,正在恢复…","run.status.resuming":"正在恢复…","run.status.modelRetry":"{detail} 毫秒后重试模型…","run.status.preparingContext":"正在准备上下文…","run.status.preparingRunContext":"正在准备本轮上下文…","run.status.compactingRun":"正在压缩本轮上下文…","run.status.runCompactionRetry":"{detail} 毫秒后重试本轮压缩…","run.status.runContextCompacted":"本轮上下文已压缩","run.status.runCompactionSkipped":"已跳过本轮压缩","run.status.usingCheckpoint":"正在使用上下文检查点…","run.status.recoveringTool":"正在恢复被截断的工具调用…","run.status.outputTruncated":"模型输出被截断","run.status.usingModel":"正在使用 {detail}…","run.status.describingImage":"正在描述图片…","run.status.imageReady":"图片描述已就绪","run.status.completed":"已完成","run.status.interrupted":"已中断","run.status.sending":"正在发送…","run.status.uploadingImage":"正在上传图片…","run.status.cache":"缓存 {count}","run.status.answerQuestionFirst":"请先回答该问题,再发送其他消息","graph.title":"图运行","graph.running":"{count} 个进行中","graph.emptySession":"选择一个会话以查看它的图运行。","graph.emptyRuns":"这个会话还没有图运行。","graph.loadFailed":"图任务加载失败","graph.unnamed":"图运行","graph.tasks":"{done}/{total} 个任务","graph.loadingTasks":"正在加载任务…","graph.noTasks":"没有任务检查点。","graph.stateLabel":"状态:{state}","graph.tokens":"token:{count}","graph.justNow":"刚刚","graph.minutesAgo":"{count} 分钟前","graph.node.pending":"等待","graph.node.running":"运行中","graph.node.completed":"完成","graph.node.failed":"失败","graph.node.blocked":"阻塞","graph.node.cancelled":"已取消","graph.node.interrupted":"已中断","graph.flow.pending":"等待","graph.flow.running":"运行中","graph.flow.completed":"已完成","graph.flow.failed":"失败","graph.flow.cancelled":"已取消","graph.flow.convergence_exceeded":"超过收敛轮次","graph.flow.budget_exceeded":"超过预算","delegation.mode.background":"后台","delegation.mode.blocking":"阻塞","delegation.handle.active":"进行中","delegation.handle.completed":"已完成","delegation.handle.cancelled":"已取消","delegation.handle.settled":"已结束","delegation.handle.pending":"待消费","delegation.handle.consumed_by_parent":"父会话已消费","delegation.handle.notified":"已通知","delegation.handle.resume_queued":"已排队续跑","delegation.handle.resume_completed":"续跑完成","delegation.completion":"后台委托 · 第 {generation} 代","composer.messageAria":"给 Agent 发消息","composer.steerAria":"引导 Agent","composer.queueFollowUp":"排队追问","composer.followUp":"追问","composer.runContext":"运行配置","composer.attachMenu":"附件与上下文压缩","composer.queue.title":"待发送","composer.queue.aria":"待发送消息","composer.queue.count":"{count} 条待发送","composer.queue.expand":"展开待发送消息","composer.queue.collapse":"收起待发送消息","composer.queue.edit":"编辑待发送消息","composer.queue.steer":"立即引导","composer.queue.remove":"移除待发送消息","composer.send":"发送","composer.stopRun":"停止运行","composer.modelSelect.triggerFallback":"选择模型","composer.modelSelect.selectAria":"选择模型","composer.modelSelect.aria":"选择模型,当前 {model}","composer.modelSelect.ariaEffort":"选择模型,当前 {model},推理等级 {effort}","composer.modelSelect.menu":"模型与推理等级","composer.modelSelect.model":"模型","composer.modelSelect.effort":"推理等级","composer.modelSelect.emptyModels":"没有可用的模型。","composer.modelSelect.emptyEfforts":"当前模型未提供推理等级。","composer.permissionMode":"权限模式","composer.heroTarget":"英雄目标","composer.frozenForRun":"已为本轮运行冻结","permission.discuss":"只读","permission.discuss.description":"只读工具直接放行;写文件、执行命令、联网抓取一律拒绝。","permission.ask":"逐项审批","permission.ask.description":"只读工具直接放行;其余工具逐个等你批准。","permission.auto":"全部放行","permission.auto.description":"策略允许的工具全部直接执行,不再询问。","composer.policyUnavailable":"策略不可用","composer.expanding":"正在展开提示词…","composer.queued":"排队","composer.thinking.default":"默认","composer.thinking.low":"低强度推理","composer.thinking.medium":"中等推理","composer.thinking.high":"高强度推理","context.aria":"上下文已用 {percent}","context.used":"上下文已用","context.system":"系统提示词","context.hero":"英雄","context.rules":"项目规则","context.skills":"技能","context.tools":"工具","context.reminders":"运行时提醒","context.conversation":"对话","context.other":"其他","context.messages":"对话消息","checkpoint.promptVersion":"摘要契约版本","checkpoint.contract":"契约摘要","inspector.noRun":"发送一条消息后,可在此查看模型实际收到的提示词。","inspector.loading":"正在读取本次 Run 冻结的提示词…","inspector.run":"Run","inspector.frozen":"在首次模型请求前冻结。此处内容不会根据当前设置重新推导。","inspector.unrecorded":"该 Run 未记录提示词组成,无可显示内容。","inspector.selectedSkills":"你附加的技能","inspector.composition":"提示词组成","inspector.sections":"共 {count} 段","inspector.prompt":"冻结的提示词全文","inspector.sectionsDigest":"组成","inspector.composedDigest":"全文","inspector.baseDigest":"基础提示词","inspector.transcript":"Run 私有 transcript","inspector.transcriptNote":"本 Run 生成的模型可见消息,用于完整恢复。属 Run 私有,不会进入对话时间线。","inspector.transcriptEmpty":"该 Run 未产生 transcript 记录。","inspector.transcriptPrivate":"私有","inspector.transcriptThinking":"推理","inspector.transcriptCall":"调用","inspector.transcriptResult":"结果","inspector.transcriptError":"错误","inspector.transcriptImage":"图片 {width}×{height}","inspector.transcriptUnknown":"未识别的块:{type}","inspector.transcriptOlder":"加载更早的消息","inspector.mcp":"MCP 服务器","inspector.mcpNone":"该 Run 未冻结任何 MCP 服务器。","inspector.mcpUnavailable":"不可用","inspector.mcpRequired":"必需","inspector.mcpTools":"{count} 个工具","inspector.mcpProtocol":"协议","inspector.mcpInstructions":"服务器声明的工作说明","inspector.skillCatalog":"Skill 目录","inspector.catalog.materialized":"已物化","inspector.catalog.disabled":"已跳过(冻结的工具策略禁止 read)","stats.section":"会话统计","stats.counts":"{turns} 轮 · {steps} 步","stats.llm":"LLM {duration}","stats.toolCall":"工具调用 {duration}","stats.ttftAverage":"首 token 平均 {duration}","stats.tokensPerSecond":"{throughput} tok/s","stats.cacheHit":"缓存命中 {percent}%","stats.tokens":"输入 {input} tok · 输出 {output} tok",copy:"复制",copied:"已复制","message.branch":"在新对话中分支","message.branchUnavailable":"仅可从已完成轮次的最后一条消息分支","message.ranFor":"用时 {duration}","message.ttft":"首 token {seconds}秒","message.tokensPerSecond":"{tps} tok/s","duration.seconds":"{seconds}秒","duration.minutes":"{minutes}分{seconds}秒","directory.title":"选择工作区目录","directory.home":"主目录","directory.path":"工作区目录路径","directory.editPath":"编辑路径","directory.newFolder":"新建文件夹","directory.folderName":"文件夹名称","directory.createIn":'在"{name}"中新建文件夹',"directory.untitledFolder":"未命名文件夹","directory.create":"创建","directory.cancel":"取消","directory.open":"打开","directory.opening":"正在打开…","directory.loading":"加载中…","directory.truncated":"文件夹过多,仅显示开头部分。","directory.showHidden":"显示隐藏文件","directory.roots":"浏览根目录","empty.project.title":"选择一个项目开始","empty.project.body":"会话、文件和运行记录都按项目隔离。从左上角选择或新建项目。","empty.project.choose":"选择项目…","empty.session.title":"开始一段新对话","empty.session.body":"当前项目下没有选中的会话。新建一个会话开始对话。","empty.session.create":"新建会话","empty.session.hint":"或从左侧选择已有会话","empty.noModel":"尚未配置模型 — 打开设置添加 provider 和模型。","welcome.headline":"探索未至之境","welcome.preview":"预览版","settings.models.title":"模型","settings.models.intro":"填入各提供方的 API 密钥即可使用其模型。","settings.models.edit":"编辑","settings.models.editProvider":"编辑 {provider}","settings.models.remove":"删除","settings.models.removeProvider":"删除 {provider}","settings.context.removeOverride":"移除覆盖项 {index}","settings.models.deleteTitle":"删除 {provider}?","settings.models.deleteDescription":"删除 {provider} 会移除其配置;其使用的凭证(如有)由其他位置管理,将会保留。","settings.models.deleteDescriptionWithCredential":"删除 {provider} 会移除其配置和存储的 API 密钥。","settings.models.deleteConfirm":"删除 {provider}","settings.models.deleting":"正在删除 {provider}…","settings.models.add":"添加提供方","settings.models.provider":"提供方","settings.models.close":"关闭","settings.models.cancel":"取消","settings.models.apply":"保存","settings.models.applying":"保存中…","settings.models.savedProvider":"已保存 {provider}。","settings.models.credentialConfigured":"API 密钥已配置","settings.models.credentialMissing":"API 密钥缺失","settings.models.readOnly":"当前部署的设置文档为只读。","settings.models.loadFailed":"加载提供方目录失败","settings.models.conflict":"这张卡片打开期间,这些设置已被其他地方改动。请关闭后重新打开,在当前值上编辑。","settings.models.retry":"重试","settings.models.keyInput":"API 密钥","settings.models.keyPlaceholder":"输入 API 密钥","settings.models.keyPlaceholderNative":"输入 API 密钥,或留空使用环境认证","settings.models.keyStored":"已配置——输入新值可替换","settings.models.keyEnvLocked":"由启动环境提供(只读)","settings.models.customized":"自定义设置","settings.models.baseUrl":"API 地址","settings.models.baseUrlDefault":"提供方默认","settings.models.models":"模型目录","settings.models.modelsInherited":"正在使用适配器默认模型","settings.models.modelsCustomized":"已自定义模型目录","settings.models.resetModels":"恢复默认模型","settings.models.model":"模型","settings.models.modelId":"模型 ID","settings.models.modelName":"显示名称","settings.models.modelNamePlaceholder":"留空时使用模型 ID","settings.models.contextWindow":"上下文窗口","settings.models.contextWindowPlaceholder":"使用提供方默认值","settings.models.maxTokens":"最大输出 token 数","settings.models.maxTokensPlaceholder":"使用提供方默认值","settings.models.modelAdvanced":"容量","settings.models.addModel":"添加模型","settings.models.removeModel":"删除模型","settings.models.modelsEmpty":"模型选择器中将不显示任何模型;目录外 ID 仍可直接发送。","settings.models.keyBlank":"请输入 API 密钥;留空则保持已存储的密钥。","settings.models.keyBlankNew":"请输入 API 密钥;若该提供方以其他方式鉴权,可以留空。","settings.models.keyIllegalCharacters":"该 API 密钥格式错误,请检查。","settings.models.modelIdRequired":"模型 ID 不能为空。","settings.models.modelIdDuplicate":"模型 ID 不能重复。","settings.models.modelNameInvalid":"显示名称不能为空。","settings.models.modelContextInvalid":"上下文窗口必须是正数,例如 131072、256K 或 1M。","settings.models.modelMaxTokensInvalid":"最大输出 token 数必须是正数,例如 8192、64K 或 1M。","settings.models.advancedHint":"其余字段位于 models.json 中,请直接编辑该文件。","settings.models.modelCapacityInvalid":"容量需为数字,可加 K 或 M 后缀。","settings.models.modelDuplicate":"每个模型 ID 只能出现一次。","settings.models.modelContextWindow":"上下文窗口","settings.models.modelMaxTokens":"最大输出 token","settings.models.fetchModels":"获取可用模型","settings.models.fetching":"正在询问提供方…","settings.models.fetchNeedsBaseUrl":"请先填写 API 地址,再获取。","settings.models.fetchEmpty":"该提供方没有列出任何模型,请手动添加。","settings.models.fetchTitle":"选择要添加的模型","settings.models.fetchDescription":"以下是模型提供方的可用模型,勾选要添加的模型。","settings.models.fetchAdopt":"添加所选","settings.models.fetchSelectAll":"全选","settings.models.fetchDeselectAll":"取消全选","settings.models.customAdd":"添加自定义提供方","settings.models.customTitle":"自定义提供方","settings.models.customTag":"自定义","settings.models.customRoute":"Provider ID","settings.models.customRouteHint":"以小写字母开头的标识,在请求中唯一标识该提供方,并用于派生凭据名。","settings.models.customRouteInvalid":"需以小写字母开头,之后可用小写字母、数字和短横线。","settings.models.customRouteTaken":"已有提供方使用了这个 ID。","settings.models.customDisplayName":"显示名称","settings.models.customApi":"API 协议","settings.models.customApiUnset":"未选择","settings.models.customNeedsBaseUrl":"自定义提供方需要填写 API 地址。","settings.models.customNeedsModels":"自定义提供方至少需要一个模型。","settings.models.create":"创建提供方","settings.models.creating":"创建中…","settings.search.placeholder":"搜索设置…","settings.search.aria":"搜索设置","settings.search.clear":"清除搜索","settings.search.empty":"没有匹配“{query}”的设置。","settings.status.saving":"保存中…","settings.status.saved":"已保存","settings.status.failed":"保存失败","conversation.toolBatch.ariaOne":"包含 1 个操作的工具批次","conversation.toolBatch.ariaMany":"包含 {count} 个操作的工具批次","conversation.toolBatch.titleOne":"工具活动","conversation.toolBatch.titleMany":"{count} 个工具活动","conversation.toolBatch.running":"正在运行 {tool}…","conversation.toolBatch.failed":"{count} 个失败","conversation.toolBatch.pendingOne":"待处理的工具操作","conversation.toolBatch.pendingMany":"{count} 个待处理工具操作","conversation.approval.required":"需要审批","conversation.approval.panelAria":"需要工具审批","conversation.approval.delegationRequired":"需要委托审批","conversation.approval.waiting":"等待中","conversation.approval.batchOne":"第 {iteration} 批 · 1 个操作","conversation.approval.batchMany":"第 {iteration} 批 · {count} 个操作","conversation.approval.remember":"在本会话中记住对 {scope} 的授权","conversation.approval.rejectBatch":"拒绝本批","conversation.approval.rejecting":"拒绝中…","conversation.approval.approveBatch":"批准本批","conversation.approval.approving":"批准中…","conversation.approval.skills":"技能","conversation.approval.after":"依赖","conversation.approval.modelCalls":"模型","conversation.approval.toolCalls":"工具","conversation.question.title":"需要你确认","conversation.question.waiting":"回答后继续运行。","conversation.question.submitted":"回答已提交。","conversation.question.multiHint":"可多选。","conversation.question.other":"其他","conversation.question.otherPlaceholder":"输入答案","conversation.question.answered":"回答","conversation.question.submit":"提交回答","conversation.question.submitting":"提交中…","conversation.tool.risk.readOnly":"只读","conversation.tool.risk.localWrite":"本地写入","conversation.tool.risk.shell":"Shell","conversation.tool.risk.external":"外部","conversation.tool.risk.delegation":"委托","conversation.tool.risk.sensitive":"敏感","conversation.tool.state.done":"完成","conversation.tool.state.pending":"等待中","conversation.tool.state.running":"运行中","conversation.tool.state.rejected":"已拒绝","conversation.tool.state.interrupted":"已中断","conversation.tool.state.failed":"失败","conversation.tool.arguments":"参数","conversation.tool.result":"结果","conversation.tool.errorOutput":"错误输出","conversation.tool.noOutput":"无输出","conversation.tool.noArguments":"未记录参数。","conversation.tool.incompleteArguments":"参数不完整。","conversation.tool.after":"依赖 {names}","conversation.thinking.reasoning":"推理过程","conversation.attention.title":"待处理","conversation.attention.aria":"待处理({count})","conversation.attention.pending":"{count} 项待处理","conversation.attention.empty":"暂无需要处理的事项。","conversation.attention.retryBudget":"重试预算增加待审批","conversation.attention.approvalRequired":"需要审批","conversation.attention.needsInput":"委托任务需要你的输入","conversation.attention.completed":"后台委托已完成","conversation.attention.failed":"后台委托失败","conversation.attention.dismiss":"忽略","conversation.attention.action":"操作","conversation.attention.questionOne":"1 个问题","conversation.attention.questionMany":"{count} 个问题","conversation.attention.actionAnswerQuestion":"回答问题","conversation.attention.actionToolApproval":"查看工具调用","conversation.attention.actionDelegationApproval":"查看委托","conversation.attention.actionDelegationInput":"提供输入","conversation.chat.runInterrupted":"运行已中断","conversation.chat.runFailed":"运行失败","conversation.chat.retry":"重试","conversation.chat.retrying":"重试中…","conversation.chat.attemptRetryable":"第 {attempt} 次尝试可以安全重试。","conversation.chat.loadEarlier":"加载更早消息","conversation.chat.loadingEarlier":"正在加载更早消息…","conversation.chat.loading":"正在加载会话…","conversation.chat.historyUnavailable":"会话历史不可用:{message}","conversation.chat.newConversation":"新会话","conversation.chat.startHint":"输入问题、文件或分析任务开始。","conversation.chat.dismissError":"关闭错误","conversation.chat.recovery.sideEffect":"无法重试:工具可能已改变外部状态。","conversation.chat.recovery.projectedOutput":"无法重试:本次尝试已经提交输出。","conversation.chat.recovery.activeRun":"另一个运行正在进行。","conversation.chat.recovery.notActive":"本次尝试已不在活动分支上。","selection.quote":"引用到输入框","selection.copy":"复制","selection.copied":"已复制","selection.explain":"解释","selection.explainPrompt":"请解释这段内容:","selection.source.chat":"对话","selection.aria":"选区操作","message.expand":"展开全文","message.collapse":"收起","conversation.rail.aria":"对话轮次","conversation.rail.turn":"第 {index} 轮","conversation.rail.goTo":"跳到第 {index} 轮:{label}","conversation.jumpLatest":"回到最新","conversation.newMessages":"有新消息","conversation.compaction.aria":"创建上下文检查点","conversation.compaction.title":"创建上下文检查点","conversation.compaction.cancel":"取消","conversation.compaction.placeholder":"可选的检查点关注点…","conversation.compaction.creating":"创建中…","conversation.compaction.confirm":"创建检查点","conversation.delegation.background":"后台委托","conversation.delegation.active":"{count} 个进行中","conversation.delegation.settled":"全部已结束","conversation.delegation.running":"后台运行中…","rightPanel.files":"文件","rightPanel.graphs":"图谱","rightPanel.status":"状态","rightPanel.pin":"固定此通道","rightPanel.unpin":"取消固定此通道","rightPanel.close":"关闭 {name}","rightPanel.add":"添加通道","rightPanel.launcherHint":"选择一个要显示在对话旁的通道。","rightPanel.showNavigator":"显示文件导航","rightPanel.hideNavigator":"隐藏文件导航","rightPanel.resizeNavigator":"调整文件导航宽度","rightPanel.runsCount":"{count} 个运行","rightPanel.needsAttention":"等待你处理"}};function c(e,t,o){let s=a[e]?.[t]??a.en[t]??t;return o?s.replace(/\{(\w+)\}/g,(e,t)=>Object.hasOwn(o,t)?String(o[t]):e):s}e.s(["translate",0,c],426);let l=(0,o.createContext)({locale:"en",setLocale:()=>{}});function d(){return(0,o.useContext)(l)}e.s(["LocaleProvider",0,function({children:e}){let[s,a]=(0,o.useState)(()=>n()),c=(0,o.useCallback)(e=>{a(e),r(e),i(e)},[]);(0,o.useEffect)(()=>{i(s)},[s]);let d=(0,o.useMemo)(()=>({locale:s,setLocale:c}),[s,c]);return(0,t.jsx)(l.Provider,{value:d,children:e})},"useLocale",0,d,"useT",0,function(){let{locale:e}=d();return(0,o.useCallback)((t,o)=>c(e,t,o),[e])}],27437)},9323,e=>{"use strict";let t="ennote:worker-generation-changed",o=null,s=0,n=new Set;class r extends Error{constructor(){super("Worker restarted; discarding data from the previous connection"),this.name="WorkerGenerationChangedError"}}class i extends Error{constructor(){super("The Worker is unreachable. Ennote is read-only until it returns."),this.name="WorkerUnreachableError"}}let a="unknown",c=new Set;function l(e){if(a!==e)for(let t of(a=e,c))t()}let d="X-Ennote-Worker-Instance";function p(){return u??=h().finally(()=>{u=null})}let u=null;function m(){return"unreachable"!==a&&l("unknown"),"unknown"}function g(){return l("unreachable"),"unreachable"}async function h(){let e;try{e=await fetch(f("/v1/health/live"),{method:"GET",cache:"no-store",signal:function(){if("function"==typeof AbortSignal.timeout)return AbortSignal.timeout(3e3)}()})}catch(t){let e;return"TimeoutError"===(e=t?.name)||"AbortError"===e?m():g()}return e.headers.has(d)?(l("reachable"),"reachable"):502===e.status||504===e.status?g():(401===e.status||e.status,m())}let v=null,y=new Set(["GET","HEAD","OPTIONS"]);function f(e){return e.startsWith("/api/worker/")?e:`/api/worker${e}`}async function k(e,c){var l=c;if("unreachable"===a&&!y.has((l?.method??"GET").toUpperCase()))throw new i;let p=s,u=await fetch(f(e),c);return function(e,i){let a=e.headers.get(d);if(a){if(null===o)o=a;else if(o!==a)throw n.has(a)||(n.add(o),o=a,s+=1,window.dispatchEvent(new CustomEvent(t,{detail:{instanceId:a,generation:s}}))),new r}if(i!==s)throw new r}(u,p),u}async function b(e,t){let o=await k(e,t),s=await o.json().catch(()=>({}));if(!o.ok||s.error)throw Error(s.error?.message??`HTTP ${o.status}`);return s.data}async function w(e,t,o){let s,n,r=new Headers(o?.headers);r.has("Accept")||r.set("Accept","text/event-stream");let i=await k(e,{...o,headers:r});if(!i.ok)throw Error(await C(i));let a=i.body?.getReader();if(!a)throw Error("Worker event stream has no response body");let c=new TextDecoder,l="",d=[],p=e=>{let o=e.endsWith("\r")?e.slice(0,-1):e;if(o.startsWith("id:"))s=o.slice(3).trim();else if(o.startsWith("event:"))n=o.slice(6).trim();else if(o.startsWith("data:"))d.push(o.slice(5).trimStart());else if(""===o){if(d.length>0)try{t({id:s,event:n,data:JSON.parse(d.join("\n"))})}catch{}s=void 0,n=void 0,d=[]}};try{for(;;){let{done:e,value:t}=await a.read();if(e)break;let o=(l+=c.decode(t,{stream:!0})).split("\n");for(let e of(l=o.pop()??"",o))p(e)}(l+=c.decode())&&p(l),d.length>0&&p("")}finally{a.releaseLock()}}async function C(e){let t=await e.json().catch(()=>({}));return t.error?.message??`HTTP ${e.status}`}e.s(["WORKER_GENERATION_CHANGED_EVENT",0,t,"apiEventStream",0,w,"apiFetch",0,b,"apiResponse",0,k,"getWorkerReachability",0,function(){return a},"probeWorkerReachability",0,p,"subscribeWorkerReachability",0,function(e){return c.add(e),function(){if(v)return;let e={timer:void 0};v=e;let t=async()=>{try{await p()}catch{}finally{v===e&&(e.timer=setTimeout(()=>{t()},"unreachable"===a?5e3:2e4))}};t()}(),()=>{c.delete(e),0===c.size&&v&&(clearTimeout(v.timer),v=null)}},"workerAPIPath",0,f])},85026,19172,51761,e=>{"use strict";var t=e.i(18050),o=e.i(71645),s=e.i(9323);function n(e){return null!=e&&!e.activeLeafMessageId}e.s(["isBlankSession",0,n],19172);let r="ennote-selected-project";function i(e){try{let t=localStorage.getItem(e);return t&&t.length>0?t:null}catch{return null}}function a(e,t){try{t?localStorage.setItem(e,t):localStorage.removeItem(e)}catch{}}function c(e){if(0===e.length)return;let t=e[0],o=Date.parse(t.updatedAt)||Date.parse(t.createdAt)||0;for(let s of e.slice(1)){let e=Date.parse(s.updatedAt)||Date.parse(s.createdAt)||0;e>o&&(t=s,o=e)}return t.id}async function l(e,t){let o=(t.some(t=>t.projectId===e)?t.filter(t=>t.projectId===e):await (0,s.apiFetch)(`/v1/projects/${encodeURIComponent(e)}/sessions?status=active`)).find(n);if(o)return o;let r=await (0,s.apiFetch)(`/v1/projects/${encodeURIComponent(e)}/sessions`,{method:"POST",body:JSON.stringify({title:"New Chat"})});if(!r?.id)throw Error("Failed to create session");return r}e.s(["SELECTED_PROJECT_KEY",0,r,"SELECTED_SESSION_KEY",0,"ennote-selected-session","readStoredId",0,i,"recentProjectId",0,c,"reuseOrCreateBlankSession",0,l,"writeStoredId",0,a],51761);let d="ennote-pinned-projects",p=(0,o.createContext)(null);e.s(["WorkspaceProvider",0,function({children:e}){let[n,l]=(0,o.useState)([]),[u,m]=(0,o.useState)(!1),[g,h]=(0,o.useState)(null),[v,y]=(0,o.useState)(!1),[f,k]=(0,o.useState)(void 0),[b,w]=(0,o.useState)(!1),[C,S]=(0,o.useState)(!1),[P,A]=(0,o.useState)(new Map),[R,x]=(0,o.useState)(()=>{try{let e=localStorage.getItem(d),t=e?JSON.parse(e):[];return Array.isArray(t)?t.filter(e=>"string"==typeof e):[]}catch{return[]}});(0,o.useEffect)(()=>{(0,s.apiFetch)("/v1/projects").then(e=>{l(e),h(t=>{let o,s=t&&e.some(e=>e.id===t)?t:(o=i(r))&&e.some(e=>e.id===o)?o:c(e)??null;return a(r,s),s})}).catch(()=>{}).finally(()=>m(!0))},[]);let I=(0,o.useCallback)(e=>{y(!1),h(e),a(r,e)},[]),T=(0,o.useCallback)(e=>{k(e),y(!0)},[]),j=(0,o.useCallback)(()=>{y(!1),k(void 0)},[]),E=(0,o.useCallback)(()=>{S(!1),w(!0)},[]),D=(0,o.useCallback)(async(e,t)=>{S(!0);try{let o=await (0,s.apiFetch)("/v1/projects",{method:"POST",body:JSON.stringify({name:e,hostPath:t})});w(!1),o.workspace&&A(e=>new Map(e).set(o.project.id,o.workspace)),l(await (0,s.apiFetch)("/v1/projects")),I(o.project.id)}finally{S(!1)}},[I]),N=(0,o.useCallback)(()=>{C||w(!1)},[C]),q=(0,o.useCallback)(e=>{x(t=>{let o=t.includes(e)?t.filter(t=>t!==e):[...t,e];try{localStorage.setItem(d,JSON.stringify(o))}catch{}return o})},[]),M=(0,o.useCallback)(async(e,t)=>{let o=await (0,s.apiFetch)(`/v1/projects/${encodeURIComponent(e)}`,{method:"PATCH",body:JSON.stringify({name:t})});l(t=>t.map(t=>t.id===e?o:t))},[]),O=(0,o.useCallback)(async e=>{await (0,s.apiFetch)(`/v1/projects/${encodeURIComponent(e)}`,{method:"DELETE"}),l(t=>t.filter(t=>t.id!==e)),A(t=>{let o=new Map(t);return o.delete(e),o}),x(t=>t.filter(t=>t!==e)),h(t=>t!==e?t:(a(r,null),null))},[]),F=(0,o.useCallback)(e=>P.get(e),[P]);return(0,t.jsx)(p.Provider,{value:{projects:n,projectsReady:u,selectedProject:g,switchProject:I,createProjectOpen:b,openCreateProject:E,confirmCreateProject:D,cancelCreateProject:N,createProjectBusy:C,settingsOpen:v,settingsTab:f,openSettings:T,closeSettings:j,pinnedProjectIds:R,togglePinProject:q,renameProject:M,deleteProject:O,workspaceFor:F},children:e})},"pinnedProjectsStorageKey",0,d,"useWorkspace",0,function(){let e=(0,o.useContext)(p);if(!e)throw Error("useWorkspace must be used inside <WorkspaceProvider>");return e}],85026)}]);