papergod 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +244 -0
  3. package/ROADMAP.md +171 -0
  4. package/example/main.tex +360 -0
  5. package/frontend/src/components/ui/badge.jsx +5 -0
  6. package/frontend/src/components/ui/button.jsx +24 -0
  7. package/frontend/src/components/workbench.jsx +182 -0
  8. package/frontend/src/lib/utils.js +6 -0
  9. package/frontend/src/main.jsx +19 -0
  10. package/frontend/src/theme.css +256 -0
  11. package/frontend/vite.config.js +23 -0
  12. package/package.json +73 -0
  13. package/papergod-demo.png +0 -0
  14. package/public/app.js +5480 -0
  15. package/public/brand/papergod-logo.png +0 -0
  16. package/public/i18n.js +95 -0
  17. package/public/index.html +480 -0
  18. package/public/pdf-sentence-mapping.js +142 -0
  19. package/public/react/app.js +209 -0
  20. package/public/react/assets/addon-fit-YJmn1quW.js +12 -0
  21. package/public/react/assets/addon-web-links-BWjmmSgS.js +12 -0
  22. package/public/react/assets/main.css +32 -0
  23. package/public/react/assets/xterm-BqvuqXEL.js +27 -0
  24. package/public/style.css +1462 -0
  25. package/src/cli.js +128 -0
  26. package/src/server/agent-adapters.js +1240 -0
  27. package/src/server/agent-errors.js +105 -0
  28. package/src/server/agent-runtime.js +81 -0
  29. package/src/server/agent.js +173 -0
  30. package/src/server/app-version.js +86 -0
  31. package/src/server/change-history.js +114 -0
  32. package/src/server/document-structure.js +174 -0
  33. package/src/server/index.js +1442 -0
  34. package/src/server/latex-structure.js +344 -0
  35. package/src/server/latex.js +67 -0
  36. package/src/server/library-engine.js +193 -0
  37. package/src/server/library-files.js +134 -0
  38. package/src/server/literature-review.js +122 -0
  39. package/src/server/orchestration-engine.js +662 -0
  40. package/src/server/paragraph-analysis.js +300 -0
  41. package/src/server/project-resources.js +290 -0
  42. package/src/server/project-store.js +808 -0
  43. package/src/server/prompt-manifest.js +300 -0
  44. package/src/server/references.js +425 -0
  45. package/src/server/review-panel.js +263 -0
  46. package/src/server/revise-workflow.js +278 -0
  47. package/src/server/revision-engine.js +607 -0
  48. package/src/server/security.js +16 -0
  49. package/src/server/text-extraction.js +149 -0
  50. package/src/server/workspace-browser.js +49 -0
  51. package/src/server/workspace-registry.js +143 -0
  52. package/src/server/workspace-terminal.js +99 -0
  53. package/src/server/workspace.js +223 -0
  54. package/src/server/zotero.js +98 -0
@@ -0,0 +1,1462 @@
1
+ * { margin: 0; padding: 0; box-sizing: border-box; }
2
+
3
+ :root {
4
+ --sidebar-w: 260px;
5
+ --right-w: 420px;
6
+ --header-h: 40px;
7
+ --border: #2a2a3a;
8
+ --bg-dark: #1e1e2e;
9
+ --bg-panel: #252535;
10
+ --bg-input: #2e2e42;
11
+ --text: #cdd6f4;
12
+ --text-dim: #7f849c;
13
+ --accent: #89b4fa;
14
+ --accent-hover: #74c7ec;
15
+ --success: #a6e3a1;
16
+ --error: #f38ba8;
17
+ --warn: #fab387;
18
+ --badge-style: #cba6f7;
19
+ --badge-grammar: #f9e2af;
20
+ --badge-structure: #89b4fa;
21
+ }
22
+
23
+ body {
24
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
25
+ background: var(--bg-dark);
26
+ color: var(--text);
27
+ overflow: hidden;
28
+ height: 100vh;
29
+ }
30
+
31
+ #app {
32
+ display: grid;
33
+ grid-template-columns: var(--sidebar-w) 1fr var(--right-w);
34
+ grid-template-rows: var(--header-h) 1fr;
35
+ height: 100vh;
36
+ }
37
+
38
+ #header {
39
+ grid-column: 1 / -1;
40
+ display: flex;
41
+ align-items: center;
42
+ padding: 0 16px;
43
+ background: var(--bg-panel);
44
+ border-bottom: 1px solid var(--border);
45
+ gap: 16px;
46
+ }
47
+
48
+ .logo { font-weight: 700; font-size: 15px; color: var(--accent); }
49
+
50
+ .header-button {
51
+ border: 1px solid var(--border);
52
+ border-radius: 4px;
53
+ background: var(--bg-input);
54
+ color: var(--text);
55
+ padding: 4px 9px;
56
+ font-size: 11px;
57
+ cursor: pointer;
58
+ }
59
+ .header-button:hover { border-color: var(--accent); }
60
+
61
+ #status {
62
+ margin-left: auto;
63
+ font-size: 12px;
64
+ padding: 2px 8px;
65
+ border-radius: 4px;
66
+ transition: opacity .3s;
67
+ }
68
+ #status.success { color: var(--success); }
69
+ #status.error { color: var(--error); }
70
+
71
+ #sidebar {
72
+ background: var(--bg-panel);
73
+ border-right: 1px solid var(--border);
74
+ overflow-y: auto;
75
+ padding: 8px;
76
+ }
77
+
78
+ #sidebar h3 {
79
+ font-size: 11px;
80
+ text-transform: uppercase;
81
+ letter-spacing: 0.05em;
82
+ color: var(--text-dim);
83
+ margin-bottom: 0;
84
+ }
85
+
86
+ #navigator-tabs { display: grid; grid-template-columns: 1fr 1fr; gap: 3px; margin: 0 4px 12px; padding: 3px; border: 1px solid var(--border); border-radius: 7px; background: var(--bg-input); }
87
+ #navigator-tabs button { border: 0; border-radius: 5px; padding: 7px; color: var(--text-dim); background: transparent; font-size: 10px; font-weight: 700; cursor: pointer; }
88
+ #navigator-tabs button.active { color: var(--text); background: var(--bg-panel); box-shadow: 0 1px 3px rgba(0,0,0,.12); }
89
+ .navigator-panel { min-height: 0; overflow: auto; }
90
+ .tool-group { display: grid; gap: 4px; padding: 8px 8px 0; }
91
+ .tool-group + .tool-group { margin-top: 8px; padding-top: 12px; border-top: 1px solid var(--border); }
92
+ .tool-group-title { padding: 0 2px 4px; color: var(--text-dim); font-size: 8px; font-weight: 700; text-transform: uppercase; letter-spacing: .07em; }
93
+ .tool-group button { display: flex; align-items: center; gap: 7px; border: 1px solid var(--border); border-radius: 6px; padding: 8px 9px; color: var(--text); background: var(--bg-panel); text-align: left; font-size: 10px; cursor: pointer; }
94
+ .tool-group button:hover { border-color: var(--accent); }
95
+ .tool-group button svg { flex: none; color: var(--text-dim); }
96
+ .tool-group button:hover svg { color: var(--accent); }
97
+
98
+ #active-workspace-name { max-width: 180px; overflow: hidden; padding-left: 8px; color: var(--text-dim); border-left: 1px solid var(--border); font-size: 10px; font-weight: 500; text-overflow: ellipsis; white-space: nowrap; }
99
+
100
+ #workspace-manager-dialog { width: min(720px, 94vw); }
101
+ .workspace-manager-body { display: grid; gap: 14px; padding: 16px; overflow-y: auto; }
102
+ #workspace-current-card { display: grid; gap: 4px; padding: 12px; border: 1px solid #bfdbfe; border-radius: 8px; background: #f8fbff; }
103
+ #workspace-current-card > span { color: #2563eb; font-size: 9px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; }
104
+ #workspace-current-card strong { color: var(--text); font-size: 13px; }
105
+ #workspace-current-card code { overflow: hidden; color: var(--text-dim); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
106
+ #workspace-list { display: grid; gap: 6px; max-height: 290px; overflow-y: auto; }
107
+ .workspace-list-item { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 10px; align-items: center; padding: 10px 11px; border: 1px solid var(--border); border-radius: 7px; background: #fff; }
108
+ .workspace-list-item.active { border-color: #bfdbfe; background: #f8fbff; }
109
+ .workspace-list-copy { min-width: 0; }
110
+ .workspace-list-copy strong, .workspace-list-copy code { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
111
+ .workspace-list-copy strong { color: var(--text); font-size: 11px; }
112
+ .workspace-list-copy code { margin-top: 3px; color: var(--text-dim); font-size: 8px; }
113
+ .workspace-list-item button { padding: 6px 9px; border: 1px solid var(--border); border-radius: 6px; color: var(--text); background: #fff; font-size: 9px; cursor: pointer; }
114
+ .workspace-list-item button:hover { border-color: var(--accent); }
115
+ .workspace-list-item button:disabled { color: var(--text-dim); cursor: default; }
116
+ #workspace-add-form { display: grid; gap: 7px; padding-top: 13px; border-top: 1px solid var(--border); }
117
+ #workspace-add-form label { color: var(--text); font-size: 11px; font-weight: 650; }
118
+ #workspace-add-form > p { margin: 0; color: var(--text-dim); font-size: 9px; line-height: 1.5; }
119
+ .workspace-path-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 7px; }
120
+ .workspace-path-row input { min-width: 0; padding: 8px 9px; border: 1px solid var(--border); border-radius: 6px; font: 10px/1.4 ui-monospace, SFMono-Regular, Menlo, monospace; }
121
+ .workspace-path-row button, #workspace-add { padding: 8px 11px; border: 1px solid var(--border); border-radius: 6px; font-size: 10px; cursor: pointer; }
122
+ #workspace-add { justify-self: start; border-color: var(--accent); color: #fff; background: var(--accent); }
123
+ #workspace-manager-note.error { color: #b91c1c; }
124
+ #workspace-manager-note.success { color: #166534; }
125
+ #workspace-browser { overflow: hidden; border: 1px solid var(--border); border-radius: 7px; background: var(--bg-panel); }
126
+ .workspace-browser-head { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: 6px; align-items: center; padding: 7px; border-bottom: 1px solid var(--border); }
127
+ .workspace-browser-head code { overflow: hidden; color: var(--text-dim); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
128
+ .workspace-browser-head button { padding: 5px 8px; border: 1px solid var(--border); border-radius: 5px; color: var(--text); background: var(--bg-input); font-size: 9px; cursor: pointer; }
129
+ #workspace-browser-list { max-height: 220px; overflow-y: auto; padding: 5px; }
130
+ .workspace-browser-entry { display: grid; grid-template-columns: 18px minmax(0, 1fr) auto; gap: 6px; align-items: center; width: 100%; padding: 7px 8px; border: 0; border-radius: 5px; color: var(--text); background: transparent; text-align: left; font-size: 10px; cursor: pointer; }
131
+ .workspace-browser-entry:hover { background: var(--bg-input); }
132
+ .workspace-browser-entry span:nth-child(2) { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
133
+ .workspace-browser-entry small { color: var(--text-dim); font-size: 8px; }
134
+
135
+ #terminal-dialog { width: min(980px, 96vw); height: min(680px, 90vh); }
136
+ .terminal-header-actions { display: flex; align-items: center; gap: 6px; }
137
+ .terminal-header-actions #terminal-stop { padding: 6px 9px; border: 1px solid var(--border); border-radius: 6px; color: var(--text-dim); background: transparent; font-size: 9px; }
138
+ #terminal-screen { flex: 1; min-height: 0; padding: 10px; overflow: hidden; background: #101114; }
139
+ #terminal-screen .xterm { height: 100%; }
140
+
141
+ #references-dialog { width: min(1120px, 97vw); height: min(780px, 94vh); }
142
+ .references-toolbar { display: grid; grid-template-columns: minmax(240px, 1fr) auto auto auto; gap: 7px; padding: 10px 14px; border-bottom: 1px solid var(--border); background: var(--bg-input); }
143
+ .references-toolbar input, .references-toolbar button, .references-sources input, .references-sources select, .references-sources button, #references-add-setup { min-width: 0; padding: 7px 9px; border: 1px solid var(--border); border-radius: 6px; color: var(--text); background: var(--bg-panel); font: 10px/1.35 inherit; }
144
+ .references-toolbar button, .references-sources button, #references-add-setup { cursor: pointer; }
145
+ .references-toolbar button.primary { border-color: var(--accent); color: #fff; background: var(--accent); }
146
+ .references-body { display: grid; grid-template-columns: 330px minmax(0, 1fr); flex: 1; min-height: 0; }
147
+ .references-sources { overflow-y: auto; padding: 13px; border-right: 1px solid var(--border); background: var(--bg-input); }
148
+ .references-sources section { display: grid; gap: 7px; padding: 11px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg-panel); }
149
+ .references-sources section + section { margin-top: 10px; }
150
+ .references-sources h3 { margin: 0; color: var(--text); font-size: 11px; }
151
+ .references-sources p { margin: 0; color: var(--text-dim); font-size: 9px; line-height: 1.5; }
152
+ #references-folder-form { display: grid; gap: 6px; }
153
+ .reference-folder-path-row, .zotero-search-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 6px; }
154
+ .reference-folder { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 5px; align-items: center; padding: 6px 7px; border-radius: 5px; background: var(--bg-input); }
155
+ .reference-folder code { overflow: hidden; color: var(--text-dim); font-size: 8px; text-overflow: ellipsis; white-space: nowrap; }
156
+ .reference-folder button { padding: 2px 6px; border: 0; background: transparent; }
157
+ .reference-source-heading, .references-summary, .reference-card-head, .reference-meta, .reference-actions { display: flex; align-items: center; gap: 7px; }
158
+ .reference-source-heading { justify-content: space-between; }
159
+ #zotero-status { color: var(--text-dim); font-size: 8px; }
160
+ #zotero-status.connected { color: #166534; }
161
+ #zotero-status.error { color: #b91c1c; }
162
+ #zotero-results { display: grid; gap: 5px; max-height: 260px; overflow-y: auto; }
163
+ .zotero-result { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 7px; padding: 7px; border: 1px solid var(--border); border-radius: 6px; }
164
+ .zotero-result strong, .zotero-result p, .zotero-result code { display: block; overflow: hidden; margin: 0; font-size: 8px; text-overflow: ellipsis; white-space: nowrap; }
165
+ .zotero-result strong { font-size: 9px; }
166
+ .zotero-result p, .zotero-result code { margin-top: 2px; color: var(--text-dim); }
167
+ .references-library { min-width: 0; overflow-y: auto; padding: 13px; background: var(--bg-panel); }
168
+ .references-summary { justify-content: space-between; margin-bottom: 9px; color: var(--text-dim); font-size: 9px; }
169
+ #references-list { display: grid; gap: 7px; }
170
+ .reference-card { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: 9px; align-items: start; padding: 10px; border: 1px solid var(--border); border-radius: 8px; background: #fff; }
171
+ .reference-card.needs-review { border-color: #fed7aa; }
172
+ .reference-select { padding-top: 2px; }
173
+ .reference-copy { min-width: 0; }
174
+ .reference-card-head { justify-content: space-between; align-items: flex-start; }
175
+ .reference-card-head strong { overflow: hidden; color: var(--text); font-size: 11px; line-height: 1.35; text-overflow: ellipsis; white-space: nowrap; }
176
+ .reference-status { flex: none; padding: 2px 5px; border-radius: 999px; color: #166534; background: #dcfce7; font-size: 7px; text-transform: uppercase; }
177
+ .needs-review .reference-status { color: #9a3412; background: #ffedd5; }
178
+ .reference-copy > p { overflow: hidden; margin: 4px 0; color: var(--text-dim); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
179
+ .reference-meta { flex-wrap: wrap; color: var(--text-dim); font-size: 8px; }
180
+ .reference-meta code { color: #1d4ed8; }
181
+ .reference-actions { align-items: stretch; flex-direction: column; }
182
+ .reference-actions button { padding: 5px 8px; border: 1px solid var(--border); border-radius: 5px; color: var(--text); background: var(--bg-panel); font-size: 8px; cursor: pointer; }
183
+ .reference-actions label { color: var(--text-dim); font-size: 8px; white-space: nowrap; }
184
+ #references-check-result { margin-bottom: 8px; padding: 9px; border: 1px solid #bfdbfe; border-radius: 7px; color: var(--text); background: #eff6ff; font-size: 9px; }
185
+ #references-check-result p { margin: 3px 0 0; color: var(--text-dim); }
186
+ #references-add-setup { margin-bottom: 8px; }
187
+ #references-note { min-height: 30px; padding: 8px 14px; border-top: 1px solid var(--border); color: var(--text-dim); font-size: 9px; }
188
+ #references-note.success { color: #166534; }
189
+ #references-note.error { color: #b91c1c; }
190
+
191
+ @media (max-width: 780px) {
192
+ .references-toolbar { grid-template-columns: 1fr 1fr; }
193
+ .references-toolbar input { grid-column: 1 / -1; }
194
+ .references-body { grid-template-columns: 1fr; overflow-y: auto; }
195
+ .references-sources { overflow: visible; border-right: 0; border-bottom: 1px solid var(--border); }
196
+ .references-library { overflow: visible; }
197
+ }
198
+ #terminal-status { padding: 6px 10px; color: var(--text-dim); border-top: 1px solid var(--border); font-size: 9px; }
199
+ .tool-files-heading { margin-top: 8px; }
200
+
201
+ .sidebar-heading {
202
+ min-height: 24px;
203
+ display: flex;
204
+ align-items: center;
205
+ justify-content: space-between;
206
+ margin-bottom: 5px;
207
+ }
208
+
209
+ .outline-heading { margin-top: 16px; border-top: 1px solid var(--border); padding-top: 12px; }
210
+
211
+ #sync-outline {
212
+ border: 0;
213
+ background: transparent;
214
+ color: var(--text-dim);
215
+ cursor: pointer;
216
+ font-size: 16px;
217
+ }
218
+ #sync-outline:hover { color: var(--accent); }
219
+
220
+ #file-tree { list-style: none; }
221
+
222
+ #file-tree li {
223
+ padding: 6px 10px;
224
+ border-radius: 4px;
225
+ cursor: pointer;
226
+ font-size: 13px;
227
+ font-family: 'SF Mono', 'Fira Code', monospace;
228
+ transition: background .15s;
229
+ }
230
+
231
+ #file-tree li:hover { background: var(--bg-input); }
232
+ #file-tree li.active { background: var(--accent); color: var(--bg-dark); }
233
+
234
+ #outline-tree {
235
+ font-size: 12px;
236
+ overflow: auto;
237
+ padding-bottom: 16px;
238
+ }
239
+
240
+ .outline-empty { color: var(--text-dim); padding: 8px; }
241
+ .outline-document, .outline-node {
242
+ display: block;
243
+ width: 100%;
244
+ border: 0;
245
+ background: transparent;
246
+ color: var(--text);
247
+ text-align: left;
248
+ padding: 5px 7px;
249
+ border-radius: 4px;
250
+ cursor: pointer;
251
+ overflow: hidden;
252
+ text-overflow: ellipsis;
253
+ white-space: nowrap;
254
+ }
255
+ .outline-document { color: var(--accent); font-weight: 600; }
256
+ .outline-node:hover, .outline-document:hover { background: var(--bg-input); }
257
+ .outline-node.selected, .outline-document.selected { background: #39405c; color: #fff; }
258
+ .outline-heading-node { position: relative; font-weight: 500; }
259
+ .outline-heading-node::before {
260
+ content: '';
261
+ position: absolute;
262
+ left: 7px;
263
+ top: 50%;
264
+ width: 4px;
265
+ height: 4px;
266
+ border-radius: 50%;
267
+ background: currentColor;
268
+ opacity: .35;
269
+ transform: translateY(-50%);
270
+ }
271
+ .outline-heading-node.level-1 { padding-left: 18px; }
272
+ .outline-heading-node.level-2 { padding-left: 30px; font-weight: 400; }
273
+ .outline-heading-node.level-2::before { left: 19px; }
274
+ .outline-heading-node.level-3 { padding-left: 42px; font-weight: 400; color: var(--text-dim); }
275
+ .outline-heading-node.level-3::before { left: 31px; }
276
+ .outline-heading-node.level-4 { padding-left: 54px; color: var(--text-dim); }
277
+ .outline-heading-node.level-4::before { left: 43px; }
278
+ .outline-heading-node.level-5, .outline-heading-node.level-6 { padding-left: 66px; color: var(--text-dim); }
279
+ .outline-heading-node.level-5::before, .outline-heading-node.level-6::before { left: 55px; }
280
+
281
+ #editor-panel {
282
+ display: flex;
283
+ flex-direction: column;
284
+ overflow: hidden;
285
+ }
286
+
287
+ #editor-toolbar {
288
+ display: flex;
289
+ align-items: center;
290
+ gap: 8px;
291
+ padding: 6px 12px;
292
+ background: var(--bg-panel);
293
+ border-bottom: 1px solid var(--border);
294
+ }
295
+
296
+ #current-file {
297
+ font-size: 13px;
298
+ font-family: monospace;
299
+ color: var(--text-dim);
300
+ flex: 1;
301
+ }
302
+
303
+ #workspace-view-switch {
304
+ display: flex;
305
+ padding: 2px;
306
+ border: 1px solid var(--border);
307
+ border-radius: 5px;
308
+ background: var(--bg-dark);
309
+ }
310
+
311
+ #editor-toolbar #workspace-view-switch .view-tab {
312
+ padding: 3px 10px;
313
+ border: 0;
314
+ background: transparent;
315
+ color: var(--text-dim);
316
+ }
317
+
318
+ #editor-toolbar #workspace-view-switch .view-tab:hover:not(:disabled) {
319
+ border: 0;
320
+ background: var(--bg-input);
321
+ color: var(--text);
322
+ }
323
+
324
+ #editor-toolbar #workspace-view-switch .view-tab.active {
325
+ background: var(--accent);
326
+ color: var(--bg-dark);
327
+ }
328
+
329
+ #editor-toolbar button {
330
+ padding: 4px 14px;
331
+ border: 1px solid var(--border);
332
+ border-radius: 4px;
333
+ background: var(--bg-input);
334
+ color: var(--text);
335
+ font-size: 12px;
336
+ cursor: pointer;
337
+ transition: background .15s, border-color .15s;
338
+ }
339
+
340
+ #editor-toolbar button:hover { background: var(--accent); color: var(--bg-dark); border-color: var(--accent); }
341
+ #editor-toolbar button:disabled { opacity: .4; cursor: not-allowed; }
342
+
343
+ #editor { display: none; }
344
+
345
+ #workspace-view {
346
+ flex: 1;
347
+ display: flex;
348
+ min-height: 0;
349
+ overflow: hidden;
350
+ }
351
+
352
+ .workspace-pane {
353
+ flex: 1;
354
+ min-width: 0;
355
+ min-height: 0;
356
+ }
357
+
358
+ #source-view {
359
+ display: flex;
360
+ overflow: hidden;
361
+ }
362
+
363
+ .CodeMirror {
364
+ flex: 1;
365
+ height: 100% !important;
366
+ font-size: 13px;
367
+ line-height: 1.5;
368
+ background: var(--bg-dark);
369
+ color: var(--text);
370
+ }
371
+ .CodeMirror-gutters { background: var(--bg-panel); border-right: 1px solid var(--border); }
372
+
373
+ #right-panel {
374
+ display: flex;
375
+ flex-direction: column;
376
+ border-left: 1px solid var(--border);
377
+ overflow: hidden;
378
+ }
379
+
380
+ #preview-panel {
381
+ display: flex;
382
+ flex-direction: column;
383
+ position: relative;
384
+ background: #181824;
385
+ overflow: hidden;
386
+ }
387
+
388
+ #ai-header {
389
+ padding: 9px 13px;
390
+ font-size: 13px;
391
+ text-transform: uppercase;
392
+ letter-spacing: 0.05em;
393
+ color: var(--text-dim);
394
+ background: var(--bg-panel);
395
+ border-bottom: 1px solid var(--border);
396
+ }
397
+
398
+ #ai-header { display: flex; justify-content: space-between; }
399
+ #agent-provider-quick { max-width: 165px; border: 1px solid var(--border); border-radius: 999px; padding: 5px 26px 5px 10px; color: var(--accent); background: var(--bg-input); font-size: 11px; font-weight: 700; cursor: pointer; }
400
+
401
+ #pdf-preview {
402
+ flex: 1;
403
+ width: 100%;
404
+ min-height: 0;
405
+ overflow: auto;
406
+ padding: 14px 16px 28px;
407
+ scrollbar-gutter: stable;
408
+ }
409
+
410
+ .pdf-page {
411
+ position: relative;
412
+ display: block;
413
+ width: fit-content;
414
+ max-width: none;
415
+ overflow: clip;
416
+ margin: 0 auto 14px;
417
+ line-height: 0;
418
+ background: #fff;
419
+ box-shadow: 0 2px 10px rgba(0, 0, 0, .28);
420
+ }
421
+
422
+ .pdf-text-layer, .history-pdf-text-layer { position: absolute; z-index: 2; inset: 0; overflow: clip; line-height: 1; text-size-adjust: none; transform-origin: 0 0; }
423
+ .pdf-text-layer :is(span, br), .history-pdf-text-layer :is(span, br) { position: absolute; color: transparent; white-space: pre; cursor: pointer; transform-origin: 0 0; }
424
+ .pdf-text-layer ::selection { background: rgba(37, 99, 235, .3); }
425
+ .pdf-scope-highlight { position: absolute; z-index: 1; pointer-events: none; border-radius: 2px; background: rgba(37, 99, 235, .22); box-shadow: inset 0 -2px rgba(37, 99, 235, .5); transition: background .08s ease; }
426
+ .pdf-scope-highlight.pdf-hover-highlight { background: rgba(14, 165, 233, .2); box-shadow: inset 0 -2px rgba(14, 165, 233, .5), 0 0 0 1px rgba(14, 165, 233, .16); }
427
+ .pdf-scope-highlight.pdf-active-highlight { background: rgba(37, 99, 235, .28); box-shadow: inset 0 -2px rgba(37, 99, 235, .72), 0 0 0 1px rgba(37, 99, 235, .18); }
428
+ .pdf-scope-highlight.pdf-recent-highlight { background: rgba(250, 204, 21, .24); box-shadow: inset 0 -2px rgba(202, 138, 4, .5), 0 0 0 1px rgba(234, 179, 8, .16); }
429
+ .pdf-scope-highlight.scope-word { background: rgba(245, 158, 11, .28); box-shadow: inset 0 -2px rgba(217, 119, 6, .55); }
430
+ .pdf-scope-highlight.scope-paragraph { background: rgba(14, 165, 233, .13); box-shadow: inset 0 -1px rgba(2, 132, 199, .28); }
431
+ .pdf-position-marker { position: absolute; z-index: 3; width: 14px; height: 14px; margin: -7px 0 0 -7px; border: 3px solid #fff; border-radius: 50%; background: var(--accent); box-shadow: 0 0 0 2px rgba(37, 99, 235, .45); pointer-events: none; }
432
+
433
+ .pdf-menu { position: fixed; z-index: 210; }
434
+ #pdf-scope-menu { display: flex; flex-direction: column; gap: 3px; min-width: 176px; padding: 6px; border: 1px solid var(--border); border-radius: 9px; background: var(--bg-dark); box-shadow: 0 16px 45px rgba(0, 0, 0, .35); }
435
+ #pdf-scope-menu button { display: flex; align-items: center; gap: 8px; width: 100%; padding: 8px 11px; border: 0; border-radius: 6px; color: var(--text); background: transparent; font-size: 11px; text-align: left; cursor: pointer; }
436
+ #pdf-scope-menu button:hover { background: var(--bg-input); color: var(--accent); }
437
+ #pdf-scope-menu .pdf-menu-secondary { margin-top: 3px; padding-top: 10px; border-top: 1px solid var(--border); border-radius: 0 0 6px 6px; color: var(--accent); font-weight: 650; }
438
+ #pdf-edit-menu { width: min(370px, calc(100vw - 24px)); padding: 12px; border: 1px solid var(--border); border-radius: 9px; color: var(--text); background: var(--bg-dark); box-shadow: 0 16px 45px rgba(0,0,0,.25); }
439
+ #pdf-edit-quote { max-height: 82px; overflow: auto; margin: 10px 0; padding: 8px; border-left: 3px solid var(--accent); color: var(--text-dim); background: var(--bg-input); font-size: 10px; line-height: 1.45; }
440
+ #pdf-edit-comment { width: 100%; padding: 8px; border: 1px solid var(--border); border-radius: 6px; color: var(--text); background: var(--bg-input); resize: vertical; }
441
+ .pdf-edit-actions { display: flex; justify-content: flex-end; gap: 6px; margin-top: 8px; }
442
+ .pdf-edit-actions button { border: 1px solid var(--border); border-radius: 6px; padding: 6px 9px; color: var(--text); background: var(--bg-input); cursor: pointer; }
443
+ .pdf-edit-actions button.primary { color: #fff; border-color: var(--accent); background: var(--accent); }
444
+
445
+ #modification-intent-module { min-height: 0; }
446
+ #prompt-management-module { display: grid; grid-template-rows: auto auto minmax(150px, 1fr) auto; flex: 1 1 auto; min-height: 0; gap: 12px; }
447
+ #prompt-management-module > .ai-module-head { margin-bottom: 0; }
448
+ #modification-intent-module { border: 1px solid var(--border); border-radius: 7px; background: var(--bg-input); }
449
+ #modification-intent-module > summary { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 11px; color: var(--text); cursor: pointer; font-size: 12px; font-weight: 650; list-style: none; }
450
+ #modification-intent-module > summary::-webkit-details-marker { display: none; }
451
+ #modification-intent-module > summary::after { content: '›'; color: var(--text-dim); transform: rotate(90deg); transition: transform .15s ease; }
452
+ #modification-intent-module[open] > summary::after { transform: rotate(-90deg); }
453
+ #modification-intent-module > summary #modification-intent-count { margin-left: auto; }
454
+ #modification-intent-module #modification-intent-list { padding: 0 8px 8px; }
455
+ #temporary-prompt-module { display: grid; grid-template-rows: auto minmax(120px, 1fr); min-height: 0; gap: 7px; }
456
+ .prompt-management-label { display: flex; align-items: center; justify-content: space-between; color: var(--text); font-size: 12px; }
457
+ .prompt-management-label span { color: var(--text-dim); font-size: 10px; }
458
+ #prompt-preview-open { width: 100%; min-height: 34px; justify-content: center; font-size: 11px; }
459
+ #modification-intent-count { color: var(--accent); font-size: 11px; }
460
+ #modification-intent-list { display: grid; gap: 6px; max-height: 220px; overflow: auto; }
461
+ .modification-intent { padding: 8px; border: 1px solid var(--border); border-radius: 7px; background: var(--bg-input); }
462
+ .modification-intent-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 5px; }
463
+ .modification-intent-scope { color: var(--accent); font-size: 9px; font-weight: 750; text-transform: uppercase; }
464
+ .modification-intent-remove { border: 0; color: var(--text-dim); background: transparent; cursor: pointer; font-size: 10px; }
465
+ .modification-intent blockquote { max-height: 46px; overflow: hidden; margin: 0 0 5px; color: var(--text-dim); font-size: 9px; line-height: 1.35; }
466
+ .modification-intent textarea { width: 100%; min-height: 48px; padding: 6px; border: 1px solid var(--border); border-radius: 5px; color: var(--text); background: var(--bg-panel); font-size: 10px; resize: vertical; }
467
+ #ai-invoke-intent-count { min-width: 20px; padding: 1px 6px; border-radius: 999px; color: #18181b; background: #fff; font-size: 10px; }
468
+
469
+ .pdf-page canvas {
470
+ display: block;
471
+ max-width: 100%;
472
+ height: auto;
473
+ }
474
+
475
+ #preview-placeholder {
476
+ position: absolute;
477
+ inset: 0;
478
+ display: grid;
479
+ align-items: center;
480
+ justify-content: center;
481
+ background: #181824;
482
+ color: var(--text-dim);
483
+ font-size: 13px;
484
+ }
485
+
486
+ #preview-placeholder.hidden { display: none; }
487
+
488
+ #ai-panel {
489
+ flex: 1;
490
+ display: flex;
491
+ flex-direction: column;
492
+ min-height: 0;
493
+ }
494
+
495
+ #ai-module-list {
496
+ flex: 1 1 auto;
497
+ display: flex;
498
+ flex-direction: column;
499
+ min-height: 0;
500
+ overflow-y: auto;
501
+ background: var(--bg-panel);
502
+ }
503
+
504
+ .ai-module {
505
+ padding: 13px;
506
+ border-bottom: 1px solid var(--border);
507
+ }
508
+
509
+ .ai-module-head {
510
+ display: flex;
511
+ align-items: center;
512
+ justify-content: space-between;
513
+ gap: 8px;
514
+ margin-bottom: 7px;
515
+ }
516
+
517
+ .ai-module-head > div { display: flex; align-items: center; gap: 8px; }
518
+ .ai-module-head strong { font-size: 13px; }
519
+ .ai-module-head > span, #agent-config-summary, #prompt-context-meta { color: var(--text-dim); font-size: 11px; line-height: 1.45; }
520
+ .module-index {
521
+ display: inline-grid; place-items: center; width: 20px; height: 20px; border-radius: 50%;
522
+ background: var(--bg-input); color: var(--accent); font-size: 10px; font-weight: 700;
523
+ }
524
+ .ai-module-head button, #context-definition-editor button {
525
+ border: 1px solid var(--border); border-radius: 4px; background: var(--bg-input); color: var(--text-dim);
526
+ padding: 3px 7px; font-size: 9px; cursor: pointer;
527
+ }
528
+ .ai-module-head button:hover, #context-definition-editor button:hover { border-color: var(--accent); color: var(--text); }
529
+
530
+ #agent-config-summary { color: var(--accent); }
531
+ #prompt-context-meta { margin: 3px 0 5px; }
532
+ #prompt-context-excerpt {
533
+ max-height: 54px; overflow: hidden; white-space: pre-wrap; color: var(--text-dim); background: var(--bg-dark);
534
+ border-radius: 4px; padding: 6px; font: 9px/1.45 'SF Mono', monospace;
535
+ mask-image: linear-gradient(to bottom, #000 65%, transparent 100%);
536
+ }
537
+ #context-definition-editor { margin-top: 7px; }
538
+ #context-definition-editor summary { color: var(--text-dim); font-size: 9px; cursor: pointer; }
539
+ #context-definition-editor label { display: block; color: var(--text-dim); font-size: 8px; text-transform: uppercase; margin: 6px 0 2px; }
540
+ #context-definition-editor textarea, #temporary-prompt-module textarea {
541
+ width: 100%; resize: vertical; border: 1px solid var(--border); border-radius: 6px;
542
+ background: var(--bg-input); color: var(--text); padding: 9px 10px; font: 12px/1.5 inherit;
543
+ }
544
+ #temporary-prompt-module textarea { height: 100%; min-height: 120px; resize: none; }
545
+
546
+ .invoke-module { flex: 0 0 auto; display: flex; flex-direction: column; gap: 7px; align-items: stretch; }
547
+ #ai-invoke {
548
+ width: 100%; min-height: 42px; border: 1px solid var(--accent); border-radius: 6px; background: var(--accent);
549
+ color: var(--bg-dark); font-size: 14px; font-weight: 700; cursor: pointer;
550
+ }
551
+ #ai-invoke:hover { background: var(--accent-hover); }
552
+ #ai-invoke:disabled { opacity: .45; cursor: wait; }
553
+
554
+ #context-panel {
555
+ padding: 8px;
556
+ background: var(--bg-panel);
557
+ border-bottom: 1px solid var(--border);
558
+ }
559
+
560
+ #context-title {
561
+ color: var(--accent);
562
+ font-size: 12px;
563
+ font-weight: 600;
564
+ margin-bottom: 7px;
565
+ white-space: nowrap;
566
+ overflow: hidden;
567
+ text-overflow: ellipsis;
568
+ }
569
+
570
+ #context-panel label {
571
+ display: block;
572
+ color: var(--text-dim);
573
+ font-size: 10px;
574
+ text-transform: uppercase;
575
+ margin: 5px 0 3px;
576
+ }
577
+
578
+ #context-panel textarea {
579
+ width: 100%;
580
+ resize: vertical;
581
+ min-height: 38px;
582
+ max-height: 100px;
583
+ border: 1px solid var(--border);
584
+ border-radius: 4px;
585
+ padding: 5px 7px;
586
+ background: var(--bg-input);
587
+ color: var(--text);
588
+ font: 11px/1.35 inherit;
589
+ }
590
+
591
+ .context-actions { display: flex; gap: 6px; margin-top: 7px; }
592
+ .context-actions button {
593
+ padding: 4px 8px;
594
+ border: 1px solid var(--border);
595
+ border-radius: 4px;
596
+ background: var(--bg-input);
597
+ color: var(--text-dim);
598
+ font-size: 10px;
599
+ cursor: pointer;
600
+ }
601
+ .context-actions button:first-child { color: var(--success); }
602
+ .context-actions button:hover { border-color: var(--accent); color: var(--text); }
603
+ #library-selection-status { margin-left: auto; align-self: center; font-size: 10px; color: var(--warn); }
604
+ .hidden { display: none !important; }
605
+
606
+ #ai-input-area {
607
+ display: flex;
608
+ gap: 6px;
609
+ padding: 8px;
610
+ background: var(--bg-panel);
611
+ border-bottom: 1px solid var(--border);
612
+ }
613
+
614
+ #ai-prompt {
615
+ flex: 1;
616
+ padding: 6px 10px;
617
+ border: 1px solid var(--border);
618
+ border-radius: 4px;
619
+ background: var(--bg-input);
620
+ color: var(--text);
621
+ font-size: 12px;
622
+ outline: none;
623
+ }
624
+
625
+ #ai-prompt:focus { border-color: var(--accent); }
626
+
627
+ #ai-submit, #ai-generate {
628
+ padding: 6px 14px;
629
+ border: none;
630
+ border-radius: 4px;
631
+ background: var(--accent);
632
+ color: var(--bg-dark);
633
+ font-size: 12px;
634
+ font-weight: 600;
635
+ cursor: pointer;
636
+ }
637
+
638
+ #ai-submit:hover { background: var(--accent-hover); }
639
+ #ai-generate { background: var(--bg-input); color: var(--accent); border: 1px solid var(--border); white-space: nowrap; }
640
+ #ai-generate:hover { border-color: var(--accent); }
641
+
642
+ #ai-suggestions { display: none; }
643
+
644
+ .compact-overlay {
645
+ position: fixed; inset: 0; z-index: 160; display: grid; place-items: center;
646
+ padding: 24px; background: rgba(8, 8, 15, .76);
647
+ }
648
+ .compact-dialog {
649
+ width: min(760px, 96vw); max-height: min(780px, 94vh); display: flex; flex-direction: column;
650
+ background: var(--bg-dark); border: 1px solid var(--border); border-radius: 8px; overflow: hidden;
651
+ box-shadow: 0 18px 55px rgba(0, 0, 0, .48);
652
+ }
653
+ .compact-dialog-body { display: grid; grid-template-columns: 1.15fr 1fr; min-height: 0; overflow: auto; }
654
+ #agent-provider-list { padding: 14px; border-right: 1px solid var(--border); }
655
+ .agent-provider-card { position: relative; display: block; width: 100%; padding: 9px; border: 1px solid var(--border); border-radius: 5px; background: var(--bg-panel); color: var(--text); margin-bottom: 7px; text-align: left; cursor: pointer; transition: border-color .15s ease, background .15s ease, box-shadow .15s ease, transform .15s ease; }
656
+ .agent-provider-card:hover { border-color: var(--accent); transform: translateY(-1px); }
657
+ .agent-provider-card:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
658
+ .agent-provider-card.selected { border-color: var(--accent); background: var(--bg-input); box-shadow: 0 0 0 1px var(--accent); }
659
+ .agent-provider-card.active::before { content: ''; position: absolute; inset: 8px auto 8px -1px; width: 3px; border-radius: 0 3px 3px 0; background: var(--success); }
660
+ .agent-provider-card .provider-card-head { display: flex; justify-content: space-between; gap: 8px; }
661
+ .agent-provider-card strong { font-size: 11px; }
662
+ .agent-provider-card span { color: var(--text-dim); font-size: 8px; text-transform: uppercase; }
663
+ .agent-provider-card .provider-card-details { display: block; color: var(--text-dim); font-size: 9px; line-height: 1.4; margin-top: 5px; }
664
+ .agent-provider-card .available { color: var(--success); }
665
+ .agent-provider-card .attention { color: var(--warn); }
666
+ .agent-provider-card .provider-use { display: inline-block; margin-top: 6px; color: var(--success); font-size: 8px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; }
667
+ .agent-provider-card .provider-action { display: inline-block; margin-top: 6px; color: var(--accent); font-size: 8px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; }
668
+ #agent-config-form { padding: 14px; }
669
+ #agent-config-form label { display: block; color: var(--text-dim); font-size: 8px; text-transform: uppercase; margin: 8px 0 3px; }
670
+ #agent-config-form input, #agent-config-form select, #agent-config-form textarea {
671
+ width: 100%; border: 1px solid var(--border); border-radius: 4px; background: var(--bg-input); color: var(--text); padding: 7px; font: 10px/1.4 inherit;
672
+ }
673
+ #agent-config-form p { min-height: 28px; color: var(--text-dim); font-size: 9px; line-height: 1.4; margin: 8px 0; }
674
+ #agent-config-note.success { color: var(--success); }
675
+ #agent-config-note.warning { color: var(--warn); }
676
+ #agent-config-note.error { color: var(--error); }
677
+ #agent-config-form button { border: 1px solid var(--border); border-radius: 4px; padding: 8px; background: var(--bg-input); color: var(--text); font-weight: 700; cursor: pointer; }
678
+ #agent-config-form button:disabled { cursor: wait; opacity: .65; }
679
+ .agent-config-actions { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 7px; }
680
+ #agent-config-form .agent-config-actions button.primary { border-color: var(--accent); background: var(--accent); color: var(--bg-dark); }
681
+ .agent-advanced-settings { margin-top: 12px; border-top: 1px solid var(--border); }
682
+ .agent-advanced-settings > summary { padding: 11px 2px; color: var(--text-dim); cursor: pointer; font-size: 9px; font-weight: 700; }
683
+ .agent-advanced-grid { padding: 0 2px 4px; }
684
+ #agent-config-form #agent-config-login { border-color: color-mix(in srgb, var(--warn) 55%, var(--border)); color: var(--warn); }
685
+ .agent-activity { flex: 0 0 auto; border-top: 1px solid var(--border); background: var(--bg-panel); }
686
+ #agent-activity-toggle { display: grid; grid-template-columns: 7px minmax(0, 1fr) auto auto; align-items: center; gap: 8px; width: 100%; padding: 9px 11px 7px; border: 0; color: var(--text-dim); background: transparent; text-align: left; cursor: pointer; }
687
+ #agent-activity-toggle:hover { background: var(--bg-input); }
688
+ .agent-activity-heading { display: grid; min-width: 0; gap: 1px; }
689
+ #agent-activity-label { overflow: hidden; color: var(--text); font-size: 11px; font-weight: 700; text-overflow: ellipsis; white-space: nowrap; }
690
+ #agent-activity-subtitle { overflow: hidden; color: var(--text-dim); font-size: 9px; line-height: 1.35; text-overflow: ellipsis; white-space: nowrap; }
691
+ #agent-activity-elapsed { color: var(--text-dim); font: 10px/1.2 'SF Mono', monospace; }
692
+ .agent-activity-detail-hint { color: var(--accent); font-size: 9px; font-weight: 650; white-space: nowrap; }
693
+ .agent-activity-dot { width: 6px; height: 6px; border-radius: 50%; background: #71717a; }
694
+ .agent-activity.running .agent-activity-dot { background: var(--accent); animation: activity-pulse 1.2s ease-in-out infinite; }
695
+ .agent-activity.complete .agent-activity-dot { background: var(--success); }
696
+ .agent-activity.error .agent-activity-dot { background: var(--error); }
697
+ @keyframes activity-pulse { 50% { opacity: .35; } }
698
+ #agent-activity-panel { padding: 0 11px 8px; }
699
+ #agent-activity-stages { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); margin: 0; padding: 0; list-style: none; }
700
+ #agent-activity-stages li { position: relative; display: grid; justify-items: center; gap: 4px; min-width: 0; color: var(--text-dim); font-size: 9px; text-align: center; }
701
+ #agent-activity-stages li::before { content: ''; position: absolute; top: 3px; right: 50%; left: -50%; height: 1px; background: var(--border); }
702
+ #agent-activity-stages li:first-child::before { display: none; }
703
+ .activity-stage-index { position: relative; z-index: 1; display: block; width: 7px; height: 7px; border: 1px solid var(--border); border-radius: 50%; background: var(--bg-panel); }
704
+ #agent-activity-stages li.active { color: var(--accent); font-weight: 700; }
705
+ #agent-activity-stages li.active .activity-stage-index { border-color: var(--accent); background: var(--accent); }
706
+ #agent-activity-stages li.complete { color: var(--success); }
707
+ #agent-activity-stages li.complete .activity-stage-index { border-color: var(--success); background: var(--success); }
708
+ #agent-activity-stages li.complete::before { background: color-mix(in srgb, var(--success) 55%, var(--border)); }
709
+ .agent-activity-result { margin-top: 7px; padding: 7px 8px; border-radius: 5px; font-size: 9px; line-height: 1.4; }
710
+ .agent-activity-result.success { color: var(--success); background: color-mix(in srgb, var(--success) 7%, transparent); }
711
+ .agent-activity-result.error { color: var(--error); background: color-mix(in srgb, var(--error) 7%, transparent); }
712
+ .agent-activity-actions { display: flex; justify-content: flex-end; gap: 5px; margin-top: 6px; }
713
+ .agent-activity-actions button { border: 0; padding: 3px 4px; color: var(--text-dim); background: transparent; font-size: 8px; cursor: pointer; }
714
+ .agent-activity-actions button:hover { color: var(--text); }
715
+ #agent-activity-details { margin-right: auto; color: var(--accent); }
716
+ #agent-activity-details-dialog { width: min(1100px, 96vw); height: min(780px, 92vh); }
717
+ .agent-activity-details-body { min-height: 0; flex: 1; padding: 14px; background: #111116; }
718
+ #agent-activity-details-log { width: 100%; height: 100%; overflow: auto; margin: 0; padding: 18px; border: 1px solid #30303b; border-radius: 8px; color: #e4e4e7; background: #18181f; white-space: pre-wrap; overflow-wrap: anywhere; font: 11px/1.65 'SF Mono', ui-monospace, monospace; }
719
+ .prompt-dialog { width: min(900px, 96vw); max-height: 90vh; overflow: auto; }
720
+ .prompt-dialog > h3 { margin: 12px 16px 6px; color: var(--text-dim); font-size: 10px; text-transform: uppercase; letter-spacing: .08em; }
721
+ #prompt-preview-content, #prompt-preview-manifest { overflow: auto; max-height: 32vh; margin: 0; padding: 16px; color: var(--text); background: #171722; white-space: pre-wrap; overflow-wrap: anywhere; font: 10px/1.55 'SF Mono', monospace; }
722
+ .prompt-manifest-details { border-top: 1px solid var(--border); }
723
+ .prompt-manifest-details summary { padding: 12px 16px; color: var(--accent); cursor: pointer; font-size: 10px; font-weight: 700; }
724
+ .confirm-dialog { width: min(520px, 94vw); }
725
+ .confirm-dialog-body { padding: 18px; }
726
+ .confirm-dialog-body > p { color: var(--text-dim); font-size: 11px; line-height: 1.5; }
727
+ .confirm-actions { display: flex; justify-content: flex-end; gap: 8px; margin-top: 18px; }
728
+ .confirm-actions button { border: 1px solid var(--border); border-radius: 4px; background: var(--bg-input); color: var(--text); padding: 7px 16px; cursor: pointer; }
729
+ .confirm-actions button.primary { border-color: var(--accent); background: var(--accent); color: var(--bg-dark); font-weight: 700; }
730
+
731
+ #sentence-reader-dialog { width: min(780px, 94vw); }
732
+ .sentence-reader-header { display: flex; align-items: center; justify-content: space-between; padding: 16px 18px; border-bottom: 1px solid var(--border); }
733
+ .sentence-reader-header h2 { margin: 0; font-size: 17px; }
734
+ .sentence-reader-header p { margin: 4px 0 0; color: var(--text-dim); font-size: 10px; }
735
+ .sentence-reader-header > button { border: 0; color: var(--text-dim); background: transparent; font-size: 22px; cursor: pointer; }
736
+ .sentence-reader-body { padding: 20px; }
737
+ .sentence-reader-help { margin: 0 0 14px; color: var(--text-dim); font-size: 11px; line-height: 1.5; }
738
+ #sentence-reader-text { min-height: 150px; padding: 28px; border: 1px solid var(--border); border-radius: 10px; color: var(--text); background: #fff; font: 24px/1.85 Georgia, 'Times New Roman', serif; outline: none; }
739
+ #sentence-reader-text:focus { border-color: #93c5fd; box-shadow: 0 0 0 3px var(--ring); }
740
+ .sentence-reader-word { display: inline; margin: 0; padding: 1px 2px; border: 0; border-radius: 4px; color: inherit; background: transparent; font: inherit; cursor: pointer; }
741
+ .sentence-reader-word:hover { color: #1d4ed8; background: #eff6ff; }
742
+ .sentence-reader-word.selected { color: #1d4ed8; background: #dbeafe; box-shadow: 0 0 0 1px #93c5fd; }
743
+ #sentence-reader-selection { margin: 10px 0 14px; color: var(--accent); font-size: 11px; }
744
+ .sentence-reader-body label { display: block; margin-bottom: 5px; color: var(--text-dim); font-size: 10px; font-weight: 600; }
745
+ #sentence-reader-comment { width: 100%; resize: vertical; padding: 10px; border: 1px solid var(--border); border-radius: 7px; color: var(--text); background: var(--bg-input); font: 12px/1.5 inherit; }
746
+ #sentence-reader-comment:focus { border-color: #93c5fd; box-shadow: 0 0 0 3px var(--ring); outline: none; }
747
+ .sentence-reader-actions { display: grid; grid-template-columns: auto auto 1fr; gap: 8px; margin-top: 14px; }
748
+ .sentence-reader-actions button { min-height: 36px; padding: 8px 12px; border: 1px solid var(--border); border-radius: 7px; color: var(--text); background: #fff; cursor: pointer; }
749
+ .sentence-reader-actions button:disabled { opacity: .4; cursor: default; }
750
+ .sentence-reader-actions button.primary { justify-self: end; color: #fff; border-color: var(--accent); background: var(--accent); }
751
+
752
+ #change-history-dialog { width: min(1240px, 97vw); height: min(880px, 94vh); display: flex; flex-direction: column; }
753
+ .change-history-header-actions { display: flex; align-items: center; gap: 6px; }
754
+ .change-history-header-actions button:first-child { width: auto; padding: 5px 9px; border: 1px solid var(--border); border-radius: 6px; font-size: 10px; }
755
+ #change-history-body { display: grid; grid-template-columns: 280px minmax(0, 1fr); flex: 1; min-height: 0; }
756
+ #change-history-list { overflow-y: auto; padding: 10px; border-right: 1px solid var(--border); background: #fafafa; }
757
+ .change-history-item { display: block; width: 100%; margin-bottom: 6px; padding: 10px; border: 1px solid transparent; border-radius: 7px; color: var(--text); background: transparent; text-align: left; cursor: pointer; }
758
+ .change-history-item:hover { background: #f4f4f5; }
759
+ .change-history-item.selected { border-color: #bfdbfe; background: #eff6ff; }
760
+ .change-history-item-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; }
761
+ .change-history-item strong { overflow: hidden; font-size: 11px; line-height: 1.4; text-overflow: ellipsis; white-space: nowrap; }
762
+ .change-history-item em { padding: 2px 5px; border-radius: 999px; color: #1d4ed8; background: #dbeafe; font-size: 8px; font-style: normal; }
763
+ .change-history-item > span:last-child { display: block; margin-top: 5px; color: var(--text-dim); font-size: 9px; }
764
+ .change-history-notice { margin: 12px 4px; color: var(--text-dim); font-size: 9px; line-height: 1.5; }
765
+ #change-history-detail { overflow-y: auto; padding: 18px; background: #fff; }
766
+ .change-history-empty { padding: 28px 14px; color: var(--text-dim); text-align: center; }
767
+ .change-history-empty strong { color: var(--text); font-size: 12px; }
768
+ .change-history-empty p { margin-top: 6px; font-size: 10px; line-height: 1.5; }
769
+ .change-history-detail-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 18px; }
770
+ .change-history-detail-head > div > span { color: var(--accent); font-size: 9px; font-weight: 600; text-transform: uppercase; }
771
+ .change-history-detail-head h3 { margin: 4px 0; color: var(--text); font-size: 17px; }
772
+ .change-history-detail-head p { color: var(--text-dim); font-size: 10px; }
773
+ #change-history-rollback { padding: 7px 10px; border: 1px solid #fecaca; border-radius: 6px; color: #b91c1c; background: #fff; font-size: 10px; cursor: pointer; }
774
+ .change-history-version-actions { display: flex; align-items: center; gap: 7px; }
775
+ #change-history-restore { padding: 7px 11px; border: 1px solid var(--accent); border-radius: 6px; color: #fff; background: var(--accent); font-size: 10px; cursor: pointer; }
776
+ #change-history-restore:disabled { opacity: .5; cursor: wait; }
777
+ .change-history-safety { margin: 14px 0; padding: 9px 10px; border-radius: 6px; color: #71717a; background: #f4f4f5; font-size: 9px; line-height: 1.5; }
778
+ .change-history-safety.current { color: #166534; background: #f0fdf4; }
779
+ .change-history-preview { margin-bottom: 14px; overflow: hidden; border: 1px solid var(--border); border-radius: 8px; background: #f4f4f5; }
780
+ .change-history-section-title { display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 8px 10px; border-bottom: 1px solid var(--border); background: #fff; }
781
+ .change-history-section-title > div:first-child { display: grid; gap: 3px; }
782
+ .change-history-section-title strong { color: var(--text); font-size: 10px; }
783
+ .change-history-section-title span { color: var(--text-dim); font-size: 9px; }
784
+ .history-diff-controls { display: flex; align-items: center; gap: 5px; }
785
+ .history-diff-controls button { min-width: 26px; min-height: 25px; padding: 3px 7px; border: 1px solid var(--border); border-radius: 5px; color: var(--text); background: #fff; font-size: 9px; cursor: pointer; }
786
+ .history-diff-controls > strong { min-width: 38px; color: var(--text-dim); font-size: 9px; text-align: center; }
787
+ .history-legend { display: inline-flex; align-items: center; gap: 4px; }
788
+ .history-legend::before { content: ''; width: 7px; height: 7px; border-radius: 2px; }
789
+ .history-legend.added::before { background: #22c55e; }
790
+ .history-legend.modified::before { background: #f59e0b; }
791
+ .history-legend.deleted::before { background: #ef4444; }
792
+ #history-pdf-viewport { position: relative; height: 560px; overflow: auto; padding: 18px 42px 28px; background: #e5e7eb; scrollbar-gutter: stable; }
793
+ #history-pdf-pages { min-height: 100%; }
794
+ #history-pdf-placeholder { padding: 80px 20px; color: var(--text-dim); font-size: 11px; line-height: 1.5; text-align: center; }
795
+ .history-pdf-page { overflow: visible; }
796
+ .history-pdf-mark { position: absolute; z-index: 4; display: block; min-width: 2px; min-height: 2px; padding: 0; border: 0; border-radius: 2px; cursor: pointer; transition: background .12s ease, box-shadow .12s ease; }
797
+ .history-pdf-added { background: rgba(34, 197, 94, .42); box-shadow: inset 0 -2px rgba(21, 128, 61, .95), 0 0 0 1px rgba(22, 163, 74, .3); }
798
+ .history-pdf-modified { background: rgba(245, 158, 11, .46); box-shadow: inset 0 -2px rgba(180, 83, 9, .95), 0 0 0 1px rgba(217, 119, 6, .3); }
799
+ .history-pdf-mark:hover, .history-pdf-mark.active { box-shadow: inset 0 0 0 2px #2563eb, 0 0 0 2px rgba(255, 255, 255, .85); }
800
+ .history-pdf-delete-pin { position: absolute; z-index: 5; right: 7px; min-width: 25px; height: 21px; padding: 0 5px; border: 1px solid #dc2626; border-radius: 999px; color: #fff; background: #dc2626; font-size: 9px; font-weight: 700; line-height: 19px; cursor: pointer; box-shadow: 0 1px 3px rgba(0, 0, 0, .2); }
801
+ .history-pdf-delete-pin.active { outline: 3px solid rgba(37, 99, 235, .4); outline-offset: 2px; }
802
+ .history-pdf-change-pin { position: absolute; z-index: 5; right: 7px; min-width: 27px; height: 21px; padding: 0 5px; border: 1px solid transparent; border-radius: 999px; color: #fff; font-size: 9px; font-weight: 750; line-height: 19px; cursor: pointer; box-shadow: 0 1px 4px rgba(0, 0, 0, .24); }
803
+ .history-pin-added { border-color: #15803d; background: #16a34a; }
804
+ .history-pin-modified { border-color: #b45309; background: #d97706; }
805
+ .history-pdf-change-pin.active { outline: 3px solid rgba(37, 99, 235, .45); outline-offset: 2px; }
806
+ .history-marks-hidden :is(.history-pdf-mark, .history-pdf-delete-pin, .history-pdf-change-pin) { display: none; }
807
+ #history-change-card { margin: 0; padding: 11px 13px; border-top: 1px solid var(--border); background: #fff; font-size: 10px; line-height: 1.5; }
808
+ .history-change-card-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 7px; }
809
+ .history-change-card-head strong { color: var(--text); }
810
+ .history-change-card-head span { color: var(--text-dim); font-size: 9px; }
811
+ #history-change-card > div:not(.history-change-card-head) { display: grid; grid-template-columns: 52px minmax(0, 1fr); gap: 7px; margin-top: 5px; }
812
+ #history-change-card label { color: var(--text-dim); font-size: 8px; font-weight: 700; text-transform: uppercase; }
813
+ #history-change-card del, #history-change-card ins { max-height: 92px; overflow: auto; padding: 4px 6px; border-radius: 4px; white-space: pre-wrap; text-decoration: none; font: 9px/1.45 'SF Mono', monospace; }
814
+ #history-change-card del { color: #991b1b; background: #fef2f2; }
815
+ #history-change-card ins { color: #166534; background: #f0fdf4; }
816
+ #history-change-card p { margin-top: 7px; color: var(--text-dim); }
817
+ .change-history-source { border: 1px solid var(--border); border-radius: 7px; background: #fff; }
818
+ .change-history-source > summary { padding: 10px 12px; color: var(--text); font-size: 10px; font-weight: 600; cursor: pointer; }
819
+ .change-history-source[open] > summary { border-bottom: 1px solid var(--border); }
820
+ .change-history-source .change-history-diffs { padding: 12px; }
821
+ .change-history-diffs { display: grid; gap: 12px; }
822
+ .change-history-diff { overflow: hidden; border: 1px solid var(--border); border-radius: 7px; }
823
+ .change-history-diff > header { display: flex; align-items: center; justify-content: space-between; padding: 7px 9px; background: #fafafa; border-bottom: 1px solid var(--border); }
824
+ .change-history-diff > header strong { color: var(--text-dim); font-size: 9px; }
825
+ .history-open-source { border: 0; color: var(--accent); background: transparent; font-size: 9px; cursor: pointer; }
826
+ .history-diff-columns { display: grid; grid-template-columns: 1fr 1fr; }
827
+ .history-diff-columns section + section { border-left: 1px solid var(--border); }
828
+ .history-diff-columns span { display: block; padding: 6px 9px; color: var(--text-dim); background: #fafafa; font-size: 8px; font-weight: 700; text-transform: uppercase; }
829
+ .history-diff-columns pre { min-height: 72px; max-height: 260px; overflow: auto; margin: 0; padding: 10px; color: #991b1b; background: #fef2f2; white-space: pre-wrap; overflow-wrap: anywhere; font: 10px/1.5 'SF Mono', monospace; }
830
+ .history-diff-columns section:last-child pre { color: #166534; background: #f0fdf4; }
831
+ .change-history-diff > p { margin: 0; padding: 8px 10px; color: var(--text-dim); border-top: 1px solid var(--border); font-size: 9px; line-height: 1.5; }
832
+ @media (max-width: 760px) {
833
+ #change-history-body { grid-template-columns: 1fr; overflow-y: auto; }
834
+ #change-history-list { max-height: 210px; border-right: 0; border-bottom: 1px solid var(--border); }
835
+ #change-history-detail { overflow: visible; }
836
+ .history-diff-columns { grid-template-columns: 1fr; }
837
+ .history-diff-columns section + section { border-left: 0; border-top: 1px solid var(--border); }
838
+ }
839
+
840
+ #focus-annotation-overlay {
841
+ position: fixed; inset: 0; z-index: 155; display: grid; place-items: center;
842
+ padding: 18px; background: rgba(8, 8, 15, .78);
843
+ }
844
+ #focus-annotation-dialog {
845
+ width: min(1480px, 98vw); height: min(900px, 96vh); display: flex; flex-direction: column;
846
+ background: var(--bg-dark); border: 1px solid var(--border); border-radius: 8px; overflow: hidden;
847
+ box-shadow: 0 22px 65px rgba(0, 0, 0, .52);
848
+ }
849
+ .focus-header-status { display: flex; align-items: center; gap: 12px; }
850
+ #focus-annotation-progress { color: var(--text-dim); font-size: 9px; }
851
+ #focus-annotation-body { display: grid; grid-template-columns: 245px minmax(360px, 1fr) minmax(390px, 1fr); flex: 1; min-height: 0; }
852
+ #focus-outline-column, #focus-paragraph-column, #focus-sentence-column { min-width: 0; min-height: 0; overflow-y: auto; }
853
+ #focus-outline-column, #focus-paragraph-column { border-right: 1px solid var(--border); }
854
+ .focus-column-heading {
855
+ position: sticky; top: 0; z-index: 2; display: flex; flex-direction: column; gap: 2px;
856
+ padding: 10px 12px; background: var(--bg-panel); border-bottom: 1px solid var(--border);
857
+ }
858
+ .focus-column-heading span { color: var(--accent); font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; }
859
+ .focus-column-heading small { color: var(--text-dim); font-size: 9px; }
860
+ #focus-section-tree { padding: 9px; }
861
+ .focus-section-branch { margin-bottom: 6px; }
862
+ .focus-section-button, .focus-paragraph-button {
863
+ width: 100%; border: 0; border-radius: 4px; background: transparent; color: var(--text); text-align: left; cursor: pointer;
864
+ }
865
+ .focus-section-button { padding: 7px 8px; font-size: 11px; font-weight: 600; }
866
+ .focus-section-button:hover, .focus-section-button.active { background: var(--bg-input); color: var(--accent); }
867
+ .focus-paragraph-branches { margin-left: 12px; padding-left: 7px; border-left: 1px solid var(--border); }
868
+ .focus-paragraph-button { padding: 5px 7px; color: var(--text-dim); font-size: 9px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
869
+ .focus-paragraph-button:hover, .focus-paragraph-button.active { color: var(--text); background: #343448; }
870
+ .focus-navigation { display: grid; grid-template-columns: 1fr auto 1fr; gap: 6px; padding: 9px 12px; }
871
+ .focus-navigation button, .focus-prompt-editor button {
872
+ border: 1px solid var(--border); border-radius: 4px; background: var(--bg-input); color: var(--text); padding: 6px 8px; font-size: 9px; cursor: pointer;
873
+ }
874
+ .focus-navigation button:last-child { text-align: right; }
875
+ .focus-navigation button:disabled { opacity: .35; cursor: default; }
876
+ .focus-reading-text {
877
+ margin: 4px 12px 12px; padding: 16px; border: 1px solid var(--border); border-radius: 6px;
878
+ background: #20202e; color: var(--text); font: 14px/1.75 Georgia, 'Times New Roman', serif; white-space: pre-wrap;
879
+ }
880
+ #focus-paragraph-text { min-height: 180px; }
881
+ .sentence-reading-text { min-height: 100px; margin-top: 10px; border-color: #3b4965; }
882
+ .focus-prompt-editor { margin: 0 12px 14px; padding-top: 12px; border-top: 1px solid var(--border); }
883
+ .focus-prompt-editor label { display: block; color: var(--accent); font-size: 9px; font-weight: 700; text-transform: uppercase; margin: 7px 0 4px; }
884
+ .focus-prompt-editor p { color: var(--text-dim); font-size: 9px; line-height: 1.4; margin-bottom: 7px; }
885
+ .focus-prompt-editor textarea, .focus-prompt-editor input {
886
+ width: 100%; border: 1px solid var(--border); border-radius: 4px; background: var(--bg-input); color: var(--text);
887
+ padding: 8px; font: 10px/1.5 inherit; resize: vertical;
888
+ }
889
+ .focus-prompt-editor button.primary { width: 100%; margin-top: 8px; border-color: var(--accent); background: var(--accent); color: var(--bg-dark); font-weight: 700; }
890
+ #focus-sentence-list { max-height: 285px; overflow-y: auto; padding: 9px 12px; border-bottom: 1px solid var(--border); }
891
+ .focus-sentence-card {
892
+ width: 100%; display: grid; grid-template-columns: 24px 1fr; gap: 7px; align-items: start;
893
+ border: 1px solid var(--border); border-radius: 5px; background: var(--bg-panel); color: var(--text-dim);
894
+ text-align: left; padding: 7px; margin-bottom: 6px; font: 10px/1.45 inherit; cursor: pointer;
895
+ }
896
+ .focus-sentence-card span { display: grid; place-items: center; width: 22px; height: 22px; border-radius: 50%; background: var(--bg-input); color: var(--accent); font-size: 9px; }
897
+ .focus-sentence-card:hover, .focus-sentence-card.active { border-color: var(--accent); color: var(--text); }
898
+
899
+ @media (max-width: 1050px) {
900
+ #focus-annotation-body { grid-template-columns: 190px 1fr 1fr; }
901
+ }
902
+ @media (max-width: 780px) {
903
+ #focus-annotation-dialog { height: 96vh; overflow-y: auto; }
904
+ #focus-annotation-body { display: block; overflow: visible; }
905
+ #focus-outline-column, #focus-paragraph-column, #focus-sentence-column { overflow: visible; border-right: 0; border-bottom: 1px solid var(--border); }
906
+ }
907
+
908
+ @media (max-width: 680px) {
909
+ .compact-dialog-body { grid-template-columns: 1fr; }
910
+ #agent-provider-list { border-right: 0; border-bottom: 1px solid var(--border); }
911
+ }
912
+
913
+ #library-usage {
914
+ padding: 6px 9px;
915
+ border-bottom: 1px solid var(--border);
916
+ background: #202738;
917
+ color: var(--text-dim);
918
+ font-size: 10px;
919
+ line-height: 1.4;
920
+ }
921
+ #library-usage strong { color: var(--text); }
922
+
923
+ #paragraph-draft {
924
+ margin: 8px;
925
+ padding: 10px;
926
+ border: 1px solid var(--success);
927
+ border-radius: 6px;
928
+ background: #203128;
929
+ font-size: 11px;
930
+ line-height: 1.5;
931
+ }
932
+ #paragraph-draft .draft-label { color: var(--success); font-weight: 600; margin-bottom: 5px; }
933
+ #paragraph-draft .draft-text { white-space: pre-wrap; }
934
+ #paragraph-draft .actions { display: flex; gap: 6px; margin-top: 8px; }
935
+ #paragraph-draft button { border: 1px solid var(--border); border-radius: 4px; padding: 4px 9px; cursor: pointer; }
936
+ #paragraph-draft .insert-draft { background: var(--success); color: var(--bg-dark); }
937
+
938
+ .suggestion {
939
+ background: var(--bg-input);
940
+ border: 1px solid var(--border);
941
+ border-radius: 6px;
942
+ padding: 10px;
943
+ margin-bottom: 8px;
944
+ }
945
+
946
+ .suggestion .badge {
947
+ display: inline-block;
948
+ font-size: 10px;
949
+ font-weight: 600;
950
+ text-transform: uppercase;
951
+ padding: 1px 6px;
952
+ border-radius: 3px;
953
+ margin-bottom: 6px;
954
+ }
955
+ .badge.style { background: var(--badge-style); color: var(--bg-dark); }
956
+ .badge.grammar { background: var(--badge-grammar); color: var(--bg-dark); }
957
+ .badge.structure { background: var(--badge-structure); color: var(--bg-dark); }
958
+ .badge.content, .badge.method, .badge.evidence { background: var(--accent); color: var(--bg-dark); }
959
+ .badge.citation, .badge.other { background: var(--warn); color: var(--bg-dark); }
960
+
961
+ @media (max-width: 1050px) {
962
+ :root { --sidebar-w: 220px; --right-w: 360px; }
963
+ }
964
+
965
+ #library-overlay {
966
+ position: fixed;
967
+ inset: 0;
968
+ z-index: 100;
969
+ display: flex;
970
+ justify-content: flex-end;
971
+ background: rgba(8, 8, 15, .68);
972
+ }
973
+
974
+ #review-overlay {
975
+ position: fixed;
976
+ inset: 0;
977
+ z-index: 110;
978
+ display: flex;
979
+ justify-content: flex-end;
980
+ background: rgba(8, 8, 15, .72);
981
+ }
982
+
983
+ #review-drawer {
984
+ width: min(1180px, 97vw);
985
+ height: 100vh;
986
+ background: var(--bg-dark);
987
+ border-left: 1px solid var(--border);
988
+ box-shadow: -12px 0 35px rgba(0, 0, 0, .35);
989
+ display: flex;
990
+ flex-direction: column;
991
+ }
992
+
993
+ #review-workflow-tabs {
994
+ display: flex;
995
+ gap: 4px;
996
+ padding: 8px 14px 0;
997
+ background: var(--bg-panel);
998
+ border-bottom: 1px solid var(--border);
999
+ }
1000
+
1001
+ #review-workflow-tabs button {
1002
+ border: 0;
1003
+ border-bottom: 2px solid transparent;
1004
+ background: transparent;
1005
+ color: var(--text-dim);
1006
+ padding: 7px 12px 8px;
1007
+ font-size: 11px;
1008
+ cursor: pointer;
1009
+ }
1010
+
1011
+ #review-workflow-tabs button:hover { color: var(--text); }
1012
+ #review-workflow-tabs button.active { color: var(--accent); border-bottom-color: var(--accent); }
1013
+
1014
+ .review-body { display: grid; grid-template-columns: 280px 1fr; flex: 1; min-height: 0; }
1015
+ .review-inputs { padding: 14px; border-right: 1px solid var(--border); overflow-y: auto; }
1016
+ .review-inputs form + form { border-top: 1px solid var(--border); margin-top: 20px; padding-top: 18px; }
1017
+ .review-inputs h3, .review-section h3 { font-size: 13px; margin-bottom: 4px; }
1018
+ .review-inputs .helper { color: var(--text-dim); font-size: 10px; line-height: 1.4; margin-bottom: 8px; }
1019
+ .review-inputs input, .review-inputs textarea, .review-inputs select, #revision-title-input, .change-after {
1020
+ width: 100%; border: 1px solid var(--border); border-radius: 4px; background: var(--bg-input);
1021
+ color: var(--text); padding: 7px 9px; font: 11px/1.4 inherit; resize: vertical; margin: 4px 0;
1022
+ }
1023
+ .review-row { display: flex; gap: 6px; align-items: center; }
1024
+ .review-inputs button, .review-workspace button {
1025
+ border: 1px solid var(--border); border-radius: 4px; background: var(--bg-input); color: var(--text);
1026
+ padding: 6px 9px; font-size: 11px; cursor: pointer;
1027
+ }
1028
+ .review-inputs button.primary, .review-workspace button.primary { background: var(--accent); border-color: var(--accent); color: var(--bg-dark); font-weight: 600; }
1029
+ .review-inputs form > button { width: 100%; margin-top: 6px; }
1030
+ .review-workspace { overflow-y: auto; padding: 14px; }
1031
+ .review-section + .review-section { margin-top: 18px; }
1032
+ .review-section-head, .revision-head, .annotation-head, .change-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
1033
+ .review-section-head { border-bottom: 1px solid var(--border); padding-bottom: 8px; margin-bottom: 9px; }
1034
+ .review-section-head span, .revision-head span { color: var(--text-dim); font-size: 10px; }
1035
+ #revision-title-input { width: 170px; margin: 0; }
1036
+ .annotation-item, .revision-card { border: 1px solid var(--border); border-radius: 6px; background: var(--bg-panel); padding: 10px; margin-bottom: 8px; }
1037
+ .annotation-head { justify-content: flex-start; }
1038
+ .annotation-head .locate-annotation { margin-left: auto; padding: 3px 7px; }
1039
+ .annotation-item .badge { padding: 2px 6px; border-radius: 3px; font-size: 9px; text-transform: uppercase; }
1040
+ .severity { color: var(--warn); font-size: 10px; }
1041
+ .review-status { font-size: 9px; padding: 2px 5px; border-radius: 8px; border: 1px solid var(--border); color: var(--accent); }
1042
+ .review-status.resolved { color: var(--success); }
1043
+ .review-status.rejected { color: var(--error); }
1044
+ .review-status.deferred { color: var(--warn); }
1045
+ .annotation-body, .change-reason { font-size: 11px; line-height: 1.45; margin: 7px 0; }
1046
+ .annotation-item blockquote, .change-before { padding: 6px 8px; border-left: 2px solid var(--accent); background: var(--bg-dark); color: var(--text-dim); font: 10px/1.4 'SF Mono', monospace; white-space: pre-wrap; }
1047
+ .unanchored, .suggested-fix, .change-relations, .recovery-point { color: var(--text-dim); font-size: 10px; margin-top: 6px; }
1048
+ .suggested-fix { color: var(--success); }
1049
+ .revision-card { padding: 0; overflow: hidden; }
1050
+ .revision-head { padding: 10px; background: #29293a; }
1051
+ .revision-head h4 { font-size: 12px; margin-bottom: 3px; }
1052
+ .revision-head > div:last-child { display: flex; gap: 6px; }
1053
+ .revision-head .rollback-revision { color: var(--warn); }
1054
+ .recovery-point { margin: 8px 10px 0; color: var(--success); }
1055
+ .revision-changes { padding: 10px; }
1056
+ .revision-change { border: 1px solid var(--border); border-radius: 5px; padding: 9px; margin-bottom: 8px; }
1057
+ .revision-change.status-accepted { border-color: var(--success); }
1058
+ .revision-change.status-rejected { opacity: .62; }
1059
+ .revision-change.status-deferred { border-color: var(--warn); }
1060
+ .change-head span { color: var(--text-dim); font-size: 9px; text-transform: uppercase; }
1061
+ .revision-change label { color: var(--text-dim); display: block; font-size: 9px; text-transform: uppercase; margin: 6px 0 3px; }
1062
+ .change-after { min-height: 55px; }
1063
+ .change-relations { color: var(--warn); }
1064
+ .change-actions { display: flex; gap: 6px; margin-top: 7px; }
1065
+ .change-actions button.accept { color: var(--success); border-color: var(--success); }
1066
+ .review-workspace button:disabled { opacity: .4; cursor: not-allowed; }
1067
+
1068
+ @media (max-width: 780px) {
1069
+ .review-body { grid-template-columns: 1fr; overflow-y: auto; }
1070
+ .review-inputs { border-right: 0; border-bottom: 1px solid var(--border); overflow: visible; }
1071
+ .review-workspace { overflow: visible; }
1072
+ }
1073
+
1074
+ #peer-review-overlay {
1075
+ position: fixed; inset: 0; z-index: 120; display: flex; justify-content: flex-end;
1076
+ background: rgba(8, 8, 15, .74);
1077
+ }
1078
+ #peer-review-drawer {
1079
+ width: min(1180px, 97vw); height: 100vh; background: var(--bg-dark); border-left: 1px solid var(--border);
1080
+ box-shadow: -12px 0 35px rgba(0, 0, 0, .4); display: flex; flex-direction: column;
1081
+ }
1082
+ .peer-review-body { display: grid; grid-template-columns: 350px 1fr; flex: 1; min-height: 0; }
1083
+ .panel-builder { padding: 14px; border-right: 1px solid var(--border); overflow-y: auto; }
1084
+ .panel-results { padding: 14px; overflow-y: auto; }
1085
+ .panel-builder > h3 { font-size: 13px; margin-bottom: 8px; }
1086
+ .panel-builder > label { display: block; color: var(--text-dim); font-size: 9px; text-transform: uppercase; margin: 8px 0 3px; }
1087
+ .panel-builder > input, .panel-builder > select, .custom-builder input, .custom-builder select, .custom-builder textarea,
1088
+ .reviewer-draft textarea, .rubric-draft input, .rubric-draft textarea {
1089
+ width: 100%; border: 1px solid var(--border); border-radius: 4px; background: var(--bg-input); color: var(--text);
1090
+ padding: 6px 8px; font: 11px/1.4 inherit; resize: vertical;
1091
+ }
1092
+ .builder-heading { display: flex; justify-content: space-between; align-items: center; margin: 16px 0 7px; }
1093
+ .builder-heading h3 { font-size: 12px; }
1094
+ .builder-heading span { color: var(--text-dim); font-size: 9px; }
1095
+ .panel-builder button, .panel-results button, .custom-builder button {
1096
+ border: 1px solid var(--border); border-radius: 4px; background: var(--bg-input); color: var(--text); padding: 5px 8px; font-size: 10px; cursor: pointer;
1097
+ }
1098
+ .panel-builder button.primary, .panel-results button.primary { background: var(--accent); color: var(--bg-dark); border-color: var(--accent); font-weight: 600; }
1099
+ #create-panel { width: 100%; margin-top: 12px; padding: 8px; }
1100
+ .reviewer-draft, .rubric-draft { padding: 8px; border: 1px solid var(--border); border-radius: 5px; background: var(--bg-panel); margin-bottom: 6px; }
1101
+ .reviewer-draft > div, .rubric-draft > div { display: flex; align-items: center; gap: 6px; }
1102
+ .reviewer-draft strong { flex: 1; font-size: 11px; }
1103
+ .reviewer-draft span { color: var(--accent); font-size: 9px; text-transform: uppercase; }
1104
+ .reviewer-draft p { color: var(--text-dim); font-size: 9px; line-height: 1.4; margin: 5px 0; }
1105
+ .reviewer-draft textarea { font-size: 10px; }
1106
+ .reviewer-draft .remove-reviewer, .rubric-draft .remove-rubric { color: var(--error); border: 0; background: transparent; }
1107
+ .rubric-draft .rubric-title { flex: 1; }
1108
+ .rubric-draft .rubric-weight { width: 55px; }
1109
+ .rubric-draft textarea { margin-top: 5px; font-size: 10px; }
1110
+ .custom-builder { border: 1px dashed var(--border); border-radius: 5px; padding: 7px; margin-top: 8px; }
1111
+ .custom-builder summary { color: var(--accent); font-size: 10px; cursor: pointer; }
1112
+ .custom-builder input, .custom-builder select, .custom-builder textarea { margin-top: 6px; }
1113
+ .custom-builder button { width: 100%; margin-top: 6px; }
1114
+ .peer-review-card { border: 1px solid var(--border); border-radius: 7px; overflow: hidden; background: var(--bg-panel); margin-bottom: 10px; }
1115
+ .peer-review-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 11px; background: #29293a; }
1116
+ .peer-review-head h4 { font-size: 13px; margin-bottom: 3px; }
1117
+ .peer-review-head span { color: var(--text-dim); font-size: 9px; }
1118
+ .peer-synthesis { margin: 10px; padding: 10px; border: 1px solid var(--accent); border-radius: 5px; background: #202a3b; }
1119
+ .peer-synthesis h4 { color: var(--accent); font-size: 12px; text-transform: capitalize; }
1120
+ .peer-synthesis > p { font-size: 10px; line-height: 1.4; margin: 5px 0; }
1121
+ .synthesis-counts { display: flex; gap: 7px; margin: 7px 0; }
1122
+ .synthesis-counts span { padding: 3px 6px; border-radius: 8px; background: var(--bg-input); color: var(--text-dim); font-size: 9px; }
1123
+ .consensus-item, .conflict-item { font-size: 9px; line-height: 1.4; padding: 4px 0; }
1124
+ .consensus-item { color: var(--success); }
1125
+ .conflict-item { color: var(--warn); }
1126
+ .peer-report { border-top: 1px solid var(--border); padding: 0 10px 9px; }
1127
+ .peer-report summary { display: flex; justify-content: space-between; gap: 8px; cursor: pointer; padding: 9px 0; }
1128
+ .peer-report summary strong { font-size: 11px; }
1129
+ .peer-report summary span { color: var(--text-dim); font-size: 9px; }
1130
+ .report-summary, .report-error { font-size: 10px; color: var(--text-dim); margin-bottom: 7px; }
1131
+ .report-error { color: var(--error); }
1132
+ .peer-finding { padding: 8px; margin: 5px 0; border: 1px solid var(--border); border-radius: 5px; background: var(--bg-dark); }
1133
+ .peer-finding.strength { border-left: 2px solid var(--success); }
1134
+ .peer-finding.concern { border-left: 2px solid var(--warn); }
1135
+ .peer-finding-head { display: flex; gap: 6px; align-items: center; }
1136
+ .finding-kind { font-size: 9px; color: var(--warn); text-transform: uppercase; }
1137
+ .peer-finding.strength .finding-kind { color: var(--success); }
1138
+ .peer-finding .badge { font-size: 8px; padding: 2px 5px; border-radius: 3px; }
1139
+ .finding-reviewer { color: var(--text-dim); font-size: 9px; margin-left: auto; }
1140
+ .peer-finding .locate-peer-item { padding: 2px 5px; }
1141
+ .peer-finding p { font-size: 10px; line-height: 1.45; margin: 6px 0; }
1142
+ .peer-finding blockquote { padding: 5px 7px; border-left: 2px solid var(--accent); color: var(--text-dim); font: 9px/1.4 monospace; background: #181824; }
1143
+
1144
+ @media (max-width: 850px) {
1145
+ .peer-review-body { grid-template-columns: 1fr; overflow-y: auto; }
1146
+ .panel-builder { border-right: 0; border-bottom: 1px solid var(--border); overflow: visible; }
1147
+ .panel-results { overflow: visible; }
1148
+ }
1149
+
1150
+ .self-revise-body { display: grid; grid-template-columns: 310px 1fr; flex: 1; min-height: 0; }
1151
+ .self-revise-actions { border-right: 1px solid var(--border); padding: 14px; overflow-y: auto; }
1152
+ .self-revise-actions section { padding-bottom: 16px; margin-bottom: 16px; border-bottom: 1px solid var(--border); }
1153
+ .self-revise-actions h3 { font-size: 12px; margin-bottom: 5px; }
1154
+ .self-revise-actions p { color: var(--text-dim); font-size: 10px; line-height: 1.45; margin-bottom: 8px; }
1155
+ .self-revise-actions textarea { width: 100%; resize: vertical; border: 1px solid var(--border); border-radius: 4px; background: var(--bg-input); color: var(--text); padding: 7px; font: 11px/1.4 inherit; }
1156
+ .self-revise-actions button, .self-revise-workspace button {
1157
+ border: 1px solid var(--border); border-radius: 4px; background: var(--bg-input); color: var(--text); padding: 6px 9px; font-size: 10px; cursor: pointer; margin: 2px 0;
1158
+ }
1159
+ .self-revise-actions button.primary, .self-revise-workspace button.primary { background: var(--accent); color: var(--bg-dark); border-color: var(--accent); font-weight: 600; }
1160
+ #generate-paper, #download-workflow-export { width: 100%; margin-top: 7px; }
1161
+ #generation-resource-status { color: var(--warn); font-size: 9px; margin-top: 5px; }
1162
+ #paper-generation-preview { margin-top: 9px; padding: 8px; border: 1px solid var(--success); border-radius: 5px; background: #203128; }
1163
+ #paper-generation-preview strong { color: var(--success); font-size: 10px; }
1164
+ #paper-generation-preview p { margin: 4px 0; }
1165
+ #paper-generation-preview pre { max-height: 230px; overflow: auto; padding: 6px; background: var(--bg-dark); color: var(--text-dim); font: 8px/1.35 monospace; white-space: pre-wrap; }
1166
+ #paper-generation-preview button { width: 100%; margin-top: 6px; }
1167
+ .self-revise-workspace { padding: 14px; overflow-y: auto; }
1168
+ .self-revision-card { border: 1px solid var(--border); border-radius: 7px; background: var(--bg-panel); overflow: hidden; margin-bottom: 10px; }
1169
+ .self-revision-head { display: flex; justify-content: space-between; align-items: center; gap: 8px; padding: 10px; background: #29293a; }
1170
+ .self-revision-head h4 { font-size: 12px; margin-bottom: 3px; }
1171
+ .self-revision-head span { color: var(--text-dim); font-size: 9px; }
1172
+ .self-revision-head > div:last-child { display: flex; gap: 5px; flex-wrap: wrap; justify-content: flex-end; }
1173
+ .verification { margin: 8px 10px; padding: 6px 8px; border-radius: 4px; font-size: 10px; }
1174
+ .verification.complete { color: var(--success); border: 1px solid var(--success); background: #203128; }
1175
+ .verification.incomplete { color: var(--warn); border: 1px solid var(--warn); background: #382c24; }
1176
+ .verification p { margin-top: 4px; color: var(--error); }
1177
+ .response-letter-form { margin: 10px; padding: 10px; border: 1px solid var(--border); border-radius: 5px; background: var(--bg-dark); }
1178
+ .response-letter-form h5 { color: var(--accent); font-size: 12px; margin-bottom: 6px; }
1179
+ .response-letter-form label { display: block; color: var(--text-dim); font-size: 8px; text-transform: uppercase; margin: 6px 0 3px; }
1180
+ .response-letter-form textarea { width: 100%; resize: vertical; border: 1px solid var(--border); border-radius: 4px; background: var(--bg-input); color: var(--text); padding: 6px; font: 10px/1.4 inherit; }
1181
+ .response-item { margin: 8px 0; padding: 8px; border-top: 1px solid var(--border); }
1182
+ .response-item > div { display: flex; justify-content: space-between; gap: 8px; }
1183
+ .response-item strong { font-size: 10px; }
1184
+ .response-item span { color: var(--text-dim); font-size: 8px; }
1185
+ .response-item blockquote { margin: 5px 0; padding: 5px 7px; border-left: 2px solid var(--warn); color: var(--text-dim); font-size: 9px; line-height: 1.4; }
1186
+ .save-response-letter { width: 100%; }
1187
+ .change-list { margin: 10px; border: 1px solid var(--border); border-radius: 5px; padding: 8px; }
1188
+ .change-list summary { color: var(--accent); font-size: 10px; cursor: pointer; }
1189
+ .change-list article { border-top: 1px solid var(--border); padding: 7px 0; margin-top: 6px; }
1190
+ .change-list article > strong { font-size: 9px; }
1191
+ .change-list article > span { color: var(--text-dim); font-size: 8px; float: right; }
1192
+ .change-list article > p { color: var(--text-dim); font-size: 9px; margin: 4px 0; }
1193
+ .mini-diff { display: grid; grid-template-columns: 1fr 1fr; gap: 5px; font: 8px/1.35 monospace; }
1194
+ .mini-diff del, .mini-diff ins { padding: 5px; background: #181824; white-space: pre-wrap; text-decoration: none; }
1195
+ .mini-diff del { color: var(--error); }
1196
+ .mini-diff ins { color: var(--success); }
1197
+ .history-heading { margin-top: 20px; }
1198
+ .history-event { display: grid; grid-template-columns: 85px 1fr auto; gap: 9px; align-items: center; padding: 7px 9px; border-bottom: 1px solid var(--border); }
1199
+ .history-type { color: var(--accent); font-size: 8px; text-transform: uppercase; }
1200
+ .history-event strong { font-size: 10px; }
1201
+ .history-event p { color: var(--text-dim); font-size: 8px; margin-top: 2px; }
1202
+ .history-event time { color: var(--text-dim); font-size: 8px; }
1203
+
1204
+ @media (max-width: 850px) {
1205
+ .self-revise-body { grid-template-columns: 1fr; overflow-y: auto; }
1206
+ .self-revise-actions { border-right: 0; border-bottom: 1px solid var(--border); overflow: visible; }
1207
+ .self-revise-workspace { overflow: visible; }
1208
+ }
1209
+
1210
+ #library-drawer {
1211
+ width: min(820px, 92vw);
1212
+ height: 100vh;
1213
+ background: var(--bg-dark);
1214
+ border-left: 1px solid var(--border);
1215
+ box-shadow: -12px 0 35px rgba(0, 0, 0, .35);
1216
+ display: flex;
1217
+ flex-direction: column;
1218
+ }
1219
+
1220
+ .library-header {
1221
+ display: flex;
1222
+ justify-content: space-between;
1223
+ align-items: center;
1224
+ padding: 16px 20px;
1225
+ background: var(--bg-panel);
1226
+ border-bottom: 1px solid var(--border);
1227
+ }
1228
+ .library-header h2 { font-size: 17px; color: var(--accent); }
1229
+ .library-header p { color: var(--text-dim); font-size: 11px; margin-top: 3px; }
1230
+ .library-header button { border: 0; background: transparent; color: var(--text); font-size: 28px; cursor: pointer; }
1231
+
1232
+ .library-toolbar {
1233
+ display: flex;
1234
+ gap: 8px;
1235
+ padding: 10px 14px;
1236
+ border-bottom: 1px solid var(--border);
1237
+ background: var(--bg-panel);
1238
+ }
1239
+ .library-toolbar select, .library-toolbar input, #library-form input, #library-form textarea {
1240
+ border: 1px solid var(--border);
1241
+ border-radius: 4px;
1242
+ background: var(--bg-input);
1243
+ color: var(--text);
1244
+ padding: 7px 9px;
1245
+ font: 12px inherit;
1246
+ }
1247
+ .library-toolbar input { flex: 1; }
1248
+ .library-toolbar button, #library-form button, .library-item button, .candidate-item button {
1249
+ border: 1px solid var(--border);
1250
+ border-radius: 4px;
1251
+ background: var(--bg-input);
1252
+ color: var(--text);
1253
+ padding: 6px 9px;
1254
+ font-size: 11px;
1255
+ cursor: pointer;
1256
+ }
1257
+
1258
+ .library-body { display: grid; grid-template-columns: 290px 1fr; flex: 1; min-height: 0; }
1259
+ #library-form { padding: 14px; border-right: 1px solid var(--border); overflow-y: auto; }
1260
+ #library-form h3 { font-size: 13px; margin-bottom: 10px; }
1261
+ #library-form label { display: block; color: var(--text-dim); font-size: 10px; text-transform: uppercase; margin: 9px 0 4px; }
1262
+ #library-form input, #library-form textarea { width: 100%; resize: vertical; }
1263
+ #library-form .primary { width: 100%; margin-top: 14px; color: var(--bg-dark); background: var(--accent); border-color: var(--accent); font-weight: 600; }
1264
+ .library-results-column { overflow-y: auto; padding: 12px; }
1265
+ .library-item, .candidate-item { border: 1px solid var(--border); border-radius: 6px; padding: 10px; margin-bottom: 8px; background: var(--bg-panel); }
1266
+ .library-item-head { display: flex; align-items: center; gap: 7px; }
1267
+ .library-item-head strong { flex: 1; font-size: 12px; }
1268
+ .library-item p, .candidate-item p { color: var(--text-dim); font-size: 11px; line-height: 1.4; margin-top: 6px; white-space: pre-wrap; word-break: break-word; }
1269
+ .library-item .tags { color: var(--warn); font-size: 10px; margin-top: 6px; }
1270
+ .library-item button.delete { color: var(--error); }
1271
+ #library-candidates { border-bottom: 1px solid var(--border); margin-bottom: 12px; padding-bottom: 8px; }
1272
+ #library-candidates h3 { font-size: 12px; color: var(--success); margin-bottom: 8px; }
1273
+ .candidate-item { border-style: dashed; }
1274
+
1275
+ .suggestion .desc { font-size: 12px; margin-bottom: 8px; line-height: 1.4; }
1276
+
1277
+ .suggestion .diff {
1278
+ font-family: 'SF Mono', 'Fira Code', monospace;
1279
+ font-size: 11px;
1280
+ line-height: 1.5;
1281
+ margin-bottom: 8px;
1282
+ padding: 6px;
1283
+ background: var(--bg-dark);
1284
+ border-radius: 4px;
1285
+ white-space: pre-wrap;
1286
+ word-break: break-word;
1287
+ }
1288
+
1289
+ .diff del { color: var(--error); text-decoration: line-through; }
1290
+ .diff ins { color: var(--success); text-decoration: none; }
1291
+
1292
+ .suggestion .actions {
1293
+ display: flex;
1294
+ gap: 6px;
1295
+ }
1296
+
1297
+ .suggestion .actions button {
1298
+ padding: 4px 12px;
1299
+ border: 1px solid var(--border);
1300
+ border-radius: 4px;
1301
+ font-size: 11px;
1302
+ cursor: pointer;
1303
+ transition: background .15s;
1304
+ }
1305
+
1306
+ .suggestion .actions .accept {
1307
+ background: var(--success);
1308
+ color: var(--bg-dark);
1309
+ border-color: var(--success);
1310
+ }
1311
+ .suggestion .actions .accept:hover { opacity: .85; }
1312
+
1313
+ .suggestion .actions .reject {
1314
+ background: transparent;
1315
+ color: var(--text-dim);
1316
+ }
1317
+ .suggestion .actions .reject:hover { color: var(--error); border-color: var(--error); }
1318
+
1319
+ /* ===== Agent orchestration canvas ===== */
1320
+ #orchestration-overlay { position: fixed; inset: 0; z-index: 170; display: grid; place-items: center; padding: 18px; background: rgba(8, 8, 15, .78); }
1321
+ #orchestration-dialog { width: min(1440px, 97vw); height: min(880px, 95vh); display: flex; flex-direction: column; background: var(--bg-dark); border: 1px solid var(--border); border-radius: 9px; overflow: hidden; box-shadow: 0 18px 55px rgba(0, 0, 0, .5); }
1322
+ .orch-header-actions { display: flex; align-items: center; gap: 7px; }
1323
+ .orch-header-actions select { border: 1px solid var(--border); border-radius: 5px; background: var(--bg-input); color: var(--text); padding: 6px 8px; font-size: 10px; min-width: 200px; }
1324
+ .orch-header-actions button { border: 1px solid var(--border); border-radius: 5px; background: var(--bg-input); color: var(--text); padding: 6px 10px; font-size: 10px; cursor: pointer; }
1325
+ .orch-header-actions button:hover { border-color: var(--accent); }
1326
+ #orchestration-body { display: grid; grid-template-columns: 168px minmax(0, 1fr) 300px; flex: 1; min-height: 0; }
1327
+ #orchestration-palette { display: flex; flex-direction: column; gap: 7px; padding: 12px; border-right: 1px solid var(--border); overflow-y: auto; }
1328
+ #orchestration-palette h3 { margin: 0 0 4px; font-size: 10px; text-transform: uppercase; letter-spacing: .06em; color: var(--text-dim); }
1329
+ #orchestration-palette button { border: 1px solid var(--border); border-radius: 5px; background: var(--bg-input); color: var(--text); padding: 8px 9px; font-size: 10px; text-align: left; cursor: pointer; }
1330
+ #orchestration-palette button:hover { border-color: var(--accent); }
1331
+ #orchestration-palette button.active { border-color: var(--accent); background: var(--accent); color: var(--bg-dark); font-weight: 700; }
1332
+ #orchestration-palette hr { border: 0; border-top: 1px solid var(--border); margin: 4px 0; }
1333
+ .orch-hint { color: var(--text-dim); font-size: 9px; line-height: 1.5; margin: 4px 0 0; }
1334
+ #orchestration-canvas-wrap { display: flex; flex-direction: column; min-width: 0; min-height: 0; }
1335
+ #orchestration-canvas { position: relative; flex: 1; min-height: 0; overflow: hidden; background: #16161f; background-image: radial-gradient(circle, #262636 1px, transparent 1px); background-size: 22px 22px; }
1336
+ #orchestration-edges { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }
1337
+ #orchestration-nodes { position: absolute; inset: 0; }
1338
+ .orch-node { position: absolute; width: 196px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg-panel); color: var(--text); box-shadow: 0 4px 14px rgba(0, 0, 0, .35); cursor: grab; user-select: none; transition: box-shadow .15s ease, border-color .15s ease; }
1339
+ .orch-node:hover { box-shadow: 0 6px 20px rgba(0, 0, 0, .5); }
1340
+ .orch-node.selected { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent), 0 6px 20px rgba(0, 0, 0, .5); }
1341
+ .orch-node.dragging { cursor: grabbing; opacity: .92; }
1342
+ .orch-node-head { display: flex; align-items: center; gap: 6px; padding: 7px 9px; border-bottom: 1px solid var(--border); }
1343
+ .orch-node-dot { width: 8px; height: 8px; border-radius: 50%; background: #a1a1aa; flex: none; }
1344
+ .orch-node-title { font-size: 10px; font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1; }
1345
+ .orch-node-kind { font-size: 8px; text-transform: uppercase; letter-spacing: .05em; color: var(--text-dim); }
1346
+ .orch-node-body { padding: 7px 9px 8px; }
1347
+ .orch-node-meta { font-size: 9px; color: var(--text-dim); line-height: 1.45; }
1348
+ .orch-node-status { font-size: 9px; font-weight: 700; margin-top: 5px; }
1349
+ .orch-node-actions { display: flex; gap: 6px; margin-top: 7px; }
1350
+ .orch-node-actions button { flex: 1; border: 1px solid var(--border); border-radius: 5px; background: var(--bg-input); color: var(--text); padding: 5px 4px; font-size: 9px; cursor: pointer; }
1351
+ .orch-node-actions button.approve { border-color: var(--success); color: var(--success); }
1352
+ .orch-node-actions button.reject { border-color: var(--error); color: var(--error); }
1353
+ .orch-node.orch-idle { border-style: dashed; }
1354
+ .orch-node.orch-running { border-color: var(--accent); }
1355
+ .orch-node.orch-running .orch-node-dot { background: var(--accent); animation: activity-pulse 1.2s ease-in-out infinite; }
1356
+ .orch-node.orch-complete { border-color: var(--success); }
1357
+ .orch-node.orch-complete .orch-node-dot { background: var(--success); }
1358
+ .orch-node.orch-failed { border-color: var(--error); }
1359
+ .orch-node.orch-failed .orch-node-dot { background: var(--error); }
1360
+ .orch-node.orch-waiting { border-color: #cba6f7; }
1361
+ .orch-node.orch-waiting .orch-node-dot { background: #cba6f7; animation: activity-pulse 1.2s ease-in-out infinite; }
1362
+ .orch-node.orch-skipped { opacity: .5; border-style: dashed; }
1363
+ .orch-node.orch-gate { background: linear-gradient(160deg, #2a2438, var(--bg-panel)); }
1364
+ #orchestration-statusbar { display: flex; align-items: center; gap: 10px; padding: 9px 12px; border-top: 1px solid var(--border); background: var(--bg-panel); }
1365
+ .orch-status { font-size: 10px; font-weight: 700; padding: 4px 9px; border-radius: 20px; border: 1px solid var(--border); color: var(--text-dim); }
1366
+ .orch-status.running { color: var(--accent); border-color: var(--accent); }
1367
+ .orch-status.complete { color: var(--success); border-color: var(--success); }
1368
+ .orch-status.failed { color: var(--error); border-color: var(--error); }
1369
+ .orch-status.cancelled { color: var(--warn); border-color: var(--warn); }
1370
+ #orchestration-status-detail { flex: 1; color: var(--text-dim); font-size: 9px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1371
+ .orch-status-actions { display: flex; gap: 7px; }
1372
+ .orch-status-actions button { border: 1px solid var(--border); border-radius: 5px; background: var(--bg-input); color: var(--text); padding: 6px 12px; font-size: 10px; font-weight: 700; cursor: pointer; }
1373
+ .orch-status-actions button.primary { border-color: var(--accent); background: var(--accent); color: var(--bg-dark); }
1374
+ .orch-status-actions button:disabled { opacity: .5; cursor: not-allowed; }
1375
+ #orchestration-inspector { display: flex; flex-direction: column; min-height: 0; border-left: 1px solid var(--border); }
1376
+ .orch-inspector-head { padding: 11px 12px; border-bottom: 1px solid var(--border); }
1377
+ .orch-inspector-head h3 { margin: 0; font-size: 10px; text-transform: uppercase; letter-spacing: .06em; color: var(--text-dim); }
1378
+ .orch-inspector-head span { display: block; color: var(--text-dim); font-size: 9px; margin-top: 3px; }
1379
+ #orchestration-inspector-body { flex: 1; overflow-y: auto; padding: 11px 12px; }
1380
+ .orch-inspector-empty { color: var(--text-dim); font-size: 10px; line-height: 1.5; }
1381
+ .orch-inspector-section { margin-bottom: 11px; }
1382
+ .orch-inspector-section label { display: block; color: var(--text-dim); font-size: 8px; text-transform: uppercase; letter-spacing: .05em; margin: 0 0 3px; }
1383
+ .orch-inspector-section input, .orch-inspector-section select, .orch-inspector-section textarea {
1384
+ width: 100%; border: 1px solid var(--border); border-radius: 4px; background: var(--bg-input); color: var(--text); padding: 6px; font: 10px/1.4 inherit; box-sizing: border-box;
1385
+ }
1386
+ .orch-inspector-section textarea { resize: vertical; min-height: 52px; }
1387
+ .orch-inspector-output { border: 1px solid var(--border); border-radius: 5px; background: #16161f; padding: 7px; font-size: 9px; color: var(--text-dim); line-height: 1.5; white-space: pre-wrap; word-break: break-word; max-height: 150px; overflow-y: auto; }
1388
+ .orch-inspector-actions { display: flex; gap: 7px; margin-top: 11px; }
1389
+ .orch-inspector-actions button { flex: 1; border: 1px solid var(--border); border-radius: 5px; background: var(--bg-input); color: var(--text); padding: 7px; font-size: 10px; font-weight: 700; cursor: pointer; }
1390
+ .orch-inspector-actions button.primary { border-color: var(--accent); background: var(--accent); color: var(--bg-dark); }
1391
+ .orch-gate-decision { font-size: 10px; font-weight: 700; padding: 4px 8px; border-radius: 5px; border: 1px solid var(--border); }
1392
+ .orch-gate-decision.pending { color: #cba6f7; border-color: #cba6f7; }
1393
+ .orch-gate-decision.approved { color: var(--success); border-color: var(--success); }
1394
+ .orch-gate-decision.rejected { color: var(--error); border-color: var(--error); }
1395
+ #orchestration-note { padding: 8px 12px; border-top: 1px solid var(--border); color: var(--text-dim); font-size: 10px; min-height: 14px; }
1396
+ #orchestration-note.error { color: var(--error); }
1397
+ #orchestration-note.success { color: var(--success); }
1398
+ .orch-canvas-empty { position: absolute; inset: 0; display: grid; place-items: center; color: var(--text-dim); font-size: 12px; }
1399
+
1400
+ /* ===== Paragraph analysis ===== */
1401
+ .analysis-dialog { width: min(1100px, 96vw); height: min(820px, 94vh); }
1402
+ #analysis-body { display: grid; grid-template-columns: 250px minmax(0, 1fr); flex: 1; min-height: 0; }
1403
+ #analysis-sidebar { padding: 12px; border-right: 1px solid var(--border); overflow-y: auto; }
1404
+ #analysis-sidebar h3 { margin: 0 0 8px; font-size: 10px; text-transform: uppercase; letter-spacing: .06em; color: var(--text-dim); }
1405
+ #analysis-target-list { display: flex; flex-direction: column; gap: 5px; }
1406
+ .analysis-target { display: block; width: 100%; text-align: left; border: 1px solid var(--border); border-radius: 5px; background: var(--bg-input); color: var(--text); padding: 7px 8px; font-size: 9px; cursor: pointer; line-height: 1.4; }
1407
+ .analysis-target:hover { border-color: var(--accent); }
1408
+ .analysis-target.active { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent); }
1409
+ .analysis-target small { display: block; color: var(--text-dim); font-size: 8px; margin-top: 2px; }
1410
+ #analysis-main { padding: 13px 15px; overflow-y: auto; }
1411
+ .analysis-section { margin-bottom: 16px; }
1412
+ .analysis-section-head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; margin-bottom: 8px; }
1413
+ .analysis-section-head h3 { margin: 0; font-size: 11px; color: var(--text); }
1414
+ .analysis-section-head span { color: var(--text-dim); font-size: 9px; }
1415
+ #analysis-chart { border: 1px solid var(--border); border-radius: 6px; background: #16161f; padding: 10px; overflow-x: auto; }
1416
+ #analysis-chart svg { display: block; }
1417
+ #analysis-stats { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 7px; }
1418
+ .analysis-stat { border: 1px solid var(--border); border-radius: 6px; background: var(--bg-input); padding: 8px 10px; }
1419
+ .analysis-stat .stat-value { font-size: 15px; font-weight: 700; color: var(--accent); }
1420
+ .analysis-stat .stat-label { font-size: 8px; text-transform: uppercase; letter-spacing: .05em; color: var(--text-dim); margin-top: 2px; }
1421
+ .analysis-stat .stat-hint { font-size: 8px; color: var(--text-dim); margin-top: 3px; line-height: 1.35; }
1422
+ #analysis-verdict { border: 1px solid var(--border); border-left-width: 3px; border-radius: 6px; padding: 10px 12px; margin-bottom: 15px; background: var(--bg-panel); }
1423
+ #analysis-verdict.varied { border-left-color: var(--success); }
1424
+ #analysis-verdict.uniform { border-left-color: var(--warn); }
1425
+ #analysis-verdict.highly-uniform { border-left-color: var(--error); }
1426
+ #analysis-verdict strong { font-size: 11px; }
1427
+ #analysis-verdict p { margin: 4px 0 0; font-size: 9px; color: var(--text-dim); line-height: 1.5; }
1428
+ .analysis-formulas summary { cursor: pointer; color: var(--accent); font-size: 10px; }
1429
+ .analysis-formula { border: 1px solid var(--border); border-radius: 5px; padding: 7px 9px; margin-top: 7px; background: var(--bg-input); }
1430
+ .analysis-formula code { display: block; font-family: ui-monospace, Consolas, monospace; font-size: 10px; color: var(--accent); margin-bottom: 3px; white-space: pre-wrap; }
1431
+ .analysis-formula .formula-name { font-size: 9px; font-weight: 700; }
1432
+ .analysis-formula .formula-desc { font-size: 8px; color: var(--text-dim); margin-top: 2px; line-height: 1.4; }
1433
+ #analysis-note { min-height: 14px; color: var(--text-dim); font-size: 10px; }
1434
+ #analysis-note.error { color: var(--error); }
1435
+ .outline-analyze { margin-left: 6px; padding: 1px 5px; border: 1px solid var(--border); border-radius: 4px; background: var(--bg-input); color: var(--text-dim); font-size: 10px; cursor: pointer; line-height: 1.3; flex: none; }
1436
+ .outline-analyze:hover { border-color: var(--accent); color: var(--accent); }
1437
+ .references-review-row { display: flex; gap: 8px; padding: 0 14px 10px; }
1438
+ .references-review-row input { flex: 1; border: 1px solid var(--border); border-radius: 5px; background: var(--bg-input); color: var(--text); padding: 7px 9px; font: 10px/1.4 inherit; }
1439
+ .references-review-row button { border: 1px solid var(--border); border-radius: 5px; background: var(--bg-input); color: var(--text); padding: 7px 12px; font-size: 10px; font-weight: 700; cursor: pointer; white-space: nowrap; }
1440
+ .references-review-row button:hover { border-color: var(--accent); }
1441
+ #references-review-result { border: 1px solid var(--border); border-left-width: 3px; border-left-color: var(--accent); border-radius: 6px; background: var(--bg-panel); padding: 10px 12px; margin: 0 14px 10px; }
1442
+ #references-review-result h4 { margin: 0 0 6px; font-size: 10px; text-transform: uppercase; letter-spacing: .05em; color: var(--text-dim); }
1443
+ #references-review-result blockquote { margin: 0; font-size: 10px; line-height: 1.55; color: var(--text); white-space: pre-wrap; }
1444
+ #references-review-result .helper { font-size: 9px; color: var(--text-dim); margin: 7px 0 0; line-height: 1.45; }
1445
+ #references-review-result .review-draft-actions { display: flex; gap: 7px; margin-top: 9px; }
1446
+ #references-review-result .review-draft-actions button { border: 1px solid var(--border); border-radius: 5px; background: var(--bg-input); color: var(--text); padding: 6px 12px; font-size: 10px; font-weight: 700; cursor: pointer; }
1447
+ #references-review-result .review-draft-actions button.primary { border-color: var(--accent); background: var(--accent); color: var(--bg-dark); }
1448
+ #pdf-extract-row { display: flex; gap: 8px; padding: 0 14px 10px; align-items: center; }
1449
+ #pdf-extract-row select { flex: 1; border: 1px solid var(--border); border-radius: 5px; background: var(--bg-input); color: var(--text); padding: 7px 9px; font: 10px/1.4 inherit; }
1450
+ #pdf-extract-row button { border: 1px solid var(--border); border-radius: 5px; background: var(--bg-input); color: var(--text); padding: 7px 12px; font-size: 10px; font-weight: 700; cursor: pointer; white-space: nowrap; }
1451
+ #pdf-extract-row button.primary { border-color: var(--accent); background: var(--accent); color: var(--bg-dark); }
1452
+ #pdf-extract-row button:disabled { opacity: .55; cursor: wait; }
1453
+ .pdf-scope-highlight.scope-outline { background: rgba(166, 227, 161, .22); box-shadow: inset 0 -2px rgba(166, 227, 161, .55); animation: outline-fade 2.2s ease-out forwards; }
1454
+ @keyframes outline-fade { 0% { background: rgba(166, 227, 161, .5); } 100% { background: rgba(166, 227, 161, .16); } }
1455
+ .agent-model-picker { position: relative; }
1456
+ .agent-model-dropdown { position: absolute; z-index: 30; top: calc(100% + 3px); left: 0; right: 0; max-height: 220px; overflow-y: auto; border: 1px solid var(--border); border-radius: 6px; background: var(--bg-dark); box-shadow: 0 10px 28px rgba(0, 0, 0, .4); padding: 4px; }
1457
+ .agent-model-option { display: flex; align-items: center; justify-content: space-between; gap: 8px; width: 100%; padding: 6px 8px; border: 0; border-radius: 4px; background: transparent; color: var(--text); font-size: 10px; text-align: left; cursor: pointer; }
1458
+ .agent-model-option:hover { background: var(--bg-input); }
1459
+ .agent-model-option.selected { background: var(--bg-input); color: var(--accent); }
1460
+ .agent-model-option .agent-model-id { font-family: ui-monospace, Consolas, monospace; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1461
+ .agent-model-option .agent-model-ctx { color: var(--text-dim); font-size: 9px; flex: none; }
1462
+ .agent-model-empty { padding: 6px 8px; color: var(--text-dim); font-size: 10px; }