@jay-framework/aiditor 0.18.4 → 0.19.1

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.
@@ -1 +1,1350 @@
1
- /* AIditor page: styles live inline in page.jay-html for POC parity with aditor-poc. */
1
+ /* AIditor page styles mirrored inline in page.jay-html for reliable dev rendering.
2
+ Keep in sync when editing; plugin route also loads this file from dist/. */
3
+
4
+ :root {
5
+ --harmony-bg-workspace: #eef0f4;
6
+ --harmony-bg-surface: #ffffff;
7
+ --harmony-bg-subtle: #f7f8fa;
8
+ --harmony-bg-hover: #f0f2f5;
9
+ --harmony-border: #dfe3eb;
10
+ --harmony-border-strong: #c5cdd8;
11
+ --harmony-primary: #116dff;
12
+ --harmony-primary-hover: #0d5ee0;
13
+ --harmony-primary-soft: rgba(17, 109, 255, 0.1);
14
+ --harmony-text: #162d3d;
15
+ --harmony-text-secondary: #5a6b7d;
16
+ --harmony-text-muted: #8f9bb0;
17
+ --harmony-danger: #e84c3d;
18
+ --harmony-danger-soft: #fef2f1;
19
+ --harmony-success: #00a862;
20
+ --harmony-success-soft: #e8f8f0;
21
+ --harmony-warning: #f5a623;
22
+ --harmony-warning-soft: #fff8e6;
23
+ --harmony-shadow-sm: 0 1px 4px rgba(22, 45, 61, 0.06);
24
+ --harmony-shadow-md: 0 4px 24px rgba(22, 45, 61, 0.1);
25
+ --harmony-shadow-lg: 0 8px 40px rgba(22, 45, 61, 0.12);
26
+ --harmony-radius-sm: 6px;
27
+ --harmony-radius-md: 10px;
28
+ --harmony-radius-lg: 16px;
29
+ --harmony-radius-pill: 999px;
30
+ --harmony-sidebar-width: 52px;
31
+ --harmony-global-bar-height: 52px;
32
+ --harmony-secondary-bar-height: 44px;
33
+ --harmony-font: 'Madefor', 'Helvetica Neue', Helvetica, Arial, sans-serif;
34
+ --harmony-mono: ui-monospace, 'SF Mono', 'Cascadia Code', Consolas, monospace;
35
+ }
36
+
37
+ *, *::before, *::after { box-sizing: border-box; }
38
+
39
+ html, body {
40
+ margin: 0;
41
+ padding: 0;
42
+ height: 100%;
43
+ background: var(--harmony-bg-workspace);
44
+ color: var(--harmony-text);
45
+ font-family: var(--harmony-font);
46
+ -webkit-font-smoothing: antialiased;
47
+ }
48
+
49
+ /* ── Setup screen ── */
50
+ .setup-screen {
51
+ height: 100vh;
52
+ display: flex;
53
+ flex-direction: column;
54
+ align-items: center;
55
+ justify-content: center;
56
+ background: var(--harmony-bg-workspace);
57
+ gap: 10px;
58
+ }
59
+ .setup-title { margin: 0 0 4px; font-size: 28px; font-weight: 600; color: var(--harmony-text); }
60
+ .setup-desc { margin: 0 0 20px; font-size: 14px; color: var(--harmony-text-secondary); }
61
+ .setup-form { display: flex; flex-direction: column; gap: 6px; width: 360px; }
62
+ .setup-label { font-size: 12px; color: var(--harmony-text-secondary); margin-top: 8px; }
63
+ .setup-input {
64
+ background: var(--harmony-bg-surface);
65
+ color: var(--harmony-text);
66
+ border: 1px solid var(--harmony-border);
67
+ border-radius: var(--harmony-radius-sm);
68
+ padding: 10px 14px;
69
+ font-size: 13px;
70
+ outline: none;
71
+ font-family: var(--harmony-mono);
72
+ width: 100%;
73
+ }
74
+ .setup-input:focus { border-color: var(--harmony-primary); box-shadow: 0 0 0 3px var(--harmony-primary-soft); }
75
+ .setup-hint { margin: 2px 0 0; font-size: 11px; color: var(--harmony-text-muted); }
76
+ .setup-btn {
77
+ margin-top: 16px;
78
+ background: var(--harmony-primary);
79
+ color: #fff;
80
+ border: none;
81
+ border-radius: var(--harmony-radius-pill);
82
+ padding: 10px 24px;
83
+ font-size: 14px;
84
+ font-weight: 600;
85
+ cursor: pointer;
86
+ align-self: flex-start;
87
+ }
88
+ .setup-btn:hover { background: var(--harmony-primary-hover); }
89
+ .setup-btn:disabled { opacity: 0.45; cursor: not-allowed; }
90
+ .bootstrap-msg { max-width: 420px; text-align: center; line-height: 1.45; color: var(--harmony-danger); }
91
+
92
+ /* ── Root layout ── */
93
+ .root {
94
+ display: flex;
95
+ height: 100vh;
96
+ overflow: hidden;
97
+ flex-direction: column;
98
+ background: var(--harmony-bg-workspace);
99
+ }
100
+
101
+ /* ── Top bar (single line) ── */
102
+ .editor-topbar {
103
+ flex-shrink: 0;
104
+ display: flex;
105
+ align-items: center;
106
+ justify-content: space-between;
107
+ gap: 20px;
108
+ height: 56px;
109
+ padding: 0 24px;
110
+ background: var(--harmony-bg-surface);
111
+ border-bottom: 1px solid var(--harmony-border);
112
+ z-index: 40;
113
+ }
114
+ .editor-topbar-left {
115
+ display: flex;
116
+ align-items: center;
117
+ gap: 12px;
118
+ min-width: 0;
119
+ flex: 1;
120
+ }
121
+ .editor-topbar-right {
122
+ display: flex;
123
+ align-items: center;
124
+ gap: 10px;
125
+ flex-shrink: 0;
126
+ }
127
+
128
+ /* ── Main stage + floating annotate dock ── */
129
+ .editor-stage {
130
+ flex: 1;
131
+ display: flex;
132
+ flex-direction: column;
133
+ min-height: 0;
134
+ overflow: hidden;
135
+ position: relative;
136
+ background: var(--harmony-bg-workspace);
137
+ }
138
+
139
+ .canvas-workspace {
140
+ flex: 1;
141
+ display: flex;
142
+ flex-direction: column;
143
+ min-height: 0;
144
+ padding: 20px 28px 72px;
145
+ overflow: hidden;
146
+ }
147
+
148
+ .canvas-window {
149
+ flex: 1;
150
+ display: flex;
151
+ flex-direction: column;
152
+ min-height: 0;
153
+ max-width: 1280px;
154
+ width: 100%;
155
+ margin: 0 auto;
156
+ background: var(--harmony-bg-surface);
157
+ border: 1px solid var(--harmony-border);
158
+ border-radius: var(--harmony-radius-lg);
159
+ box-shadow: var(--harmony-shadow-md);
160
+ overflow: hidden;
161
+ }
162
+
163
+ .canvas-chrome {
164
+ flex-shrink: 0;
165
+ display: flex;
166
+ align-items: center;
167
+ gap: 12px;
168
+ padding: 10px 16px;
169
+ background: var(--harmony-bg-subtle);
170
+ border-bottom: 1px solid var(--harmony-border);
171
+ }
172
+ .canvas-chrome-left { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
173
+ .canvas-chrome-right { display: flex; align-items: center; gap: 4px; flex-shrink: 0; margin-left: auto; }
174
+ .canvas-page-badge {
175
+ font-size: 12px;
176
+ font-weight: 600;
177
+ color: var(--harmony-text-secondary);
178
+ white-space: nowrap;
179
+ }
180
+
181
+ /* Floating annotation toolbar — centered at bottom of canvas stage */
182
+ .annotate-dock {
183
+ position: absolute;
184
+ bottom: 20px;
185
+ left: 50%;
186
+ transform: translateX(-50%);
187
+ z-index: 60;
188
+ display: flex;
189
+ align-items: center;
190
+ gap: 2px;
191
+ padding: 5px 8px;
192
+ background: var(--harmony-bg-surface);
193
+ border: 1px solid var(--harmony-border);
194
+ border-radius: var(--harmony-radius-pill);
195
+ box-shadow: 0 6px 28px rgba(22, 45, 61, 0.14), 0 2px 6px rgba(22, 45, 61, 0.06);
196
+ pointer-events: auto;
197
+ }
198
+ .annotate-dock-label {
199
+ font-size: 12px;
200
+ font-weight: 600;
201
+ color: var(--harmony-text-secondary);
202
+ padding: 0 8px 0 4px;
203
+ white-space: nowrap;
204
+ border-right: 1px solid var(--harmony-border);
205
+ margin-right: 4px;
206
+ }
207
+
208
+ /* ── Global top bar aliases (legacy class names) ── */
209
+ .harmony-global-bar {
210
+ flex-shrink: 0;
211
+ display: flex;
212
+ align-items: center;
213
+ justify-content: space-between;
214
+ gap: 20px;
215
+ height: 56px;
216
+ padding: 0 24px;
217
+ background: var(--harmony-bg-surface);
218
+ border-bottom: 1px solid var(--harmony-border);
219
+ }
220
+ .harmony-global-left {
221
+ display: flex;
222
+ align-items: center;
223
+ gap: 12px;
224
+ min-width: 0;
225
+ flex: 1;
226
+ }
227
+ .harmony-global-spacer { display: none; }
228
+ .harmony-global-right {
229
+ display: flex;
230
+ align-items: center;
231
+ gap: 10px;
232
+ flex-shrink: 0;
233
+ }
234
+ .harmony-page-select-wrap {
235
+ display: flex;
236
+ align-items: center;
237
+ gap: 8px;
238
+ min-width: 0;
239
+ }
240
+ .harmony-page-label {
241
+ font-size: 13px;
242
+ font-weight: 600;
243
+ color: var(--harmony-text-secondary);
244
+ white-space: nowrap;
245
+ }
246
+ .harmony-path-select {
247
+ display: flex;
248
+ align-items: center;
249
+ gap: 8px;
250
+ min-width: 0;
251
+ }
252
+
253
+ .aiditor-logo {
254
+ font-size: 17px;
255
+ font-weight: 700;
256
+ letter-spacing: -0.3px;
257
+ color: var(--harmony-text);
258
+ flex-shrink: 0;
259
+ font-family: var(--harmony-font);
260
+ }
261
+ .aiditor-logo-ai { color: var(--harmony-primary); }
262
+
263
+ .aiditor-dropdown {
264
+ min-width: 180px;
265
+ max-width: 320px;
266
+ background: var(--harmony-bg-surface);
267
+ color: var(--harmony-text);
268
+ border: 1px solid var(--harmony-border);
269
+ border-radius: var(--harmony-radius-sm);
270
+ padding: 7px 32px 7px 12px;
271
+ font-size: 13px;
272
+ font-family: var(--harmony-mono);
273
+ cursor: pointer;
274
+ outline: none;
275
+ appearance: none;
276
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%235a6b7d' d='M3 4.5L6 8l3-3.5H3z'/%3E%3C/svg%3E");
277
+ background-repeat: no-repeat;
278
+ background-position: right 10px center;
279
+ }
280
+ .aiditor-dropdown:focus {
281
+ border-color: var(--harmony-primary);
282
+ box-shadow: 0 0 0 3px var(--harmony-primary-soft);
283
+ }
284
+ .aiditor-dropdown option { background: #fff; color: var(--harmony-text); }
285
+ .harmony-page-select { flex: 1; min-width: 160px; }
286
+ .preview-path-select { flex: 1; min-width: 0; max-width: 400px; }
287
+ .path-select-row { display: flex; align-items: center; gap: 8px; width: 100%; }
288
+ .params-loading-hint { font-size: 11px; color: var(--harmony-text-muted); white-space: nowrap; flex-shrink: 0; }
289
+
290
+ /* Harmony buttons */
291
+ .harmony-btn-primary {
292
+ background: var(--harmony-primary);
293
+ color: #fff;
294
+ border: none;
295
+ border-radius: var(--harmony-radius-pill);
296
+ padding: 7px 16px;
297
+ font-size: 13px;
298
+ font-weight: 600;
299
+ cursor: pointer;
300
+ flex-shrink: 0;
301
+ white-space: nowrap;
302
+ }
303
+ .harmony-btn-primary:hover { background: var(--harmony-primary-hover); }
304
+ .harmony-btn-primary:disabled { opacity: 0.5; cursor: not-allowed; }
305
+
306
+ .harmony-btn-secondary {
307
+ background: var(--harmony-bg-surface);
308
+ color: var(--harmony-text);
309
+ border: 1px solid var(--harmony-border);
310
+ border-radius: var(--harmony-radius-pill);
311
+ padding: 7px 14px;
312
+ font-size: 13px;
313
+ font-weight: 500;
314
+ cursor: pointer;
315
+ flex-shrink: 0;
316
+ white-space: nowrap;
317
+ }
318
+ .harmony-btn-secondary:hover { background: var(--harmony-bg-hover); border-color: var(--harmony-border-strong); }
319
+ .harmony-btn-secondary:disabled { opacity: 0.5; cursor: not-allowed; }
320
+
321
+ .add-page-open-btn { /* inherits harmony-btn-primary */ }
322
+ .add-page-from-brief-btn { /* inherits harmony-btn-secondary */ }
323
+ .project-settings-btn { /* inherits harmony-btn-secondary */ }
324
+
325
+ .harmony-editor-body,
326
+ .harmony-sidebar,
327
+ .harmony-secondary-bar { display: none !important; }
328
+ .harmony-workspace { display: contents; }
329
+ .preview-visual-tools { display: flex; flex-shrink: 0; gap: 2px; align-items: center; }
330
+
331
+ .visual-tool-btn {
332
+ background: transparent;
333
+ color: var(--harmony-text-secondary);
334
+ border: none;
335
+ border-radius: var(--harmony-radius-sm);
336
+ padding: 7px 10px;
337
+ font-size: 12px;
338
+ cursor: pointer;
339
+ line-height: 1;
340
+ display: inline-flex;
341
+ align-items: center;
342
+ justify-content: center;
343
+ min-width: 34px;
344
+ min-height: 34px;
345
+ }
346
+ .visual-tool-btn:hover { background: var(--harmony-bg-hover); color: var(--harmony-text); }
347
+ .visual-tool-on {
348
+ background: var(--harmony-primary-soft) !important;
349
+ color: var(--harmony-primary) !important;
350
+ }
351
+ .tool-group-sep {
352
+ width: 1px;
353
+ background: var(--harmony-border);
354
+ align-self: stretch;
355
+ margin: 0 4px;
356
+ flex-shrink: 0;
357
+ }
358
+
359
+ /* Canvas aliases */
360
+ .harmony-canvas-area,
361
+ .canvas-workspace {
362
+ flex: 1;
363
+ display: flex;
364
+ flex-direction: column;
365
+ min-height: 0;
366
+ padding: 20px 28px 72px;
367
+ gap: 10px;
368
+ overflow: hidden;
369
+ }
370
+ .harmony-canvas-window,
371
+ .canvas-window {
372
+ flex: 1;
373
+ display: flex;
374
+ flex-direction: column;
375
+ min-height: 0;
376
+ background: var(--harmony-bg-surface);
377
+ border: 1px solid var(--harmony-border);
378
+ border-radius: var(--harmony-radius-lg);
379
+ box-shadow: var(--harmony-shadow-md);
380
+ overflow: hidden;
381
+ }
382
+
383
+ .harmony-canvas-chrome {
384
+ flex-shrink: 0;
385
+ display: flex;
386
+ align-items: center;
387
+ gap: 12px;
388
+ padding: 10px 16px;
389
+ background: var(--harmony-bg-subtle);
390
+ border-bottom: 1px solid var(--harmony-border);
391
+ }
392
+ .harmony-canvas-chrome-left { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
393
+ .harmony-canvas-page-badge {
394
+ font-size: 12px;
395
+ font-weight: 600;
396
+ color: var(--harmony-text-secondary);
397
+ background: var(--harmony-bg-surface);
398
+ border: 1px solid var(--harmony-border);
399
+ border-radius: var(--harmony-radius-sm);
400
+ padding: 4px 10px;
401
+ }
402
+ .harmony-url-bar-wrap { flex: 1; min-width: 0; }
403
+ .url-bar-wrap { flex: 1; min-width: 200px; }
404
+ .url-bar {
405
+ font-size: 12px;
406
+ font-family: var(--harmony-mono);
407
+ color: var(--harmony-text-secondary);
408
+ background: var(--harmony-bg-surface);
409
+ border: 1px solid var(--harmony-border);
410
+ border-radius: var(--harmony-radius-sm);
411
+ padding: 7px 12px;
412
+ word-break: break-all;
413
+ }
414
+
415
+ .preview-loading { font-size: 13px; color: var(--harmony-text-muted); }
416
+ .preview-error {
417
+ font-size: 13px;
418
+ color: var(--harmony-danger);
419
+ background: var(--harmony-danger-soft);
420
+ border-radius: var(--harmony-radius-sm);
421
+ padding: 10px 12px;
422
+ border: 1px solid rgba(232, 76, 61, 0.2);
423
+ }
424
+
425
+ /* isolation: Chrome Element Capture requires a stacking context on the capture target */
426
+ .preview-frame-wrap {
427
+ flex: 1;
428
+ min-height: 0;
429
+ border: none;
430
+ border-radius: 0;
431
+ overflow: visible;
432
+ background: var(--harmony-bg-surface);
433
+ position: relative;
434
+ isolation: isolate;
435
+ }
436
+ .harmony-canvas-content { flex: 1; }
437
+ .preview-frame { width: 100%; height: 100%; min-height: 360px; border: none; display: block; }
438
+ .preview-frame-tablet { align-self: center; width: 768px; max-width: 100%; }
439
+ .preview-frame-mobile { align-self: center; width: 390px; max-width: 100%; }
440
+
441
+ /* ── Visual annotations ── */
442
+ .visual-overlay { position: absolute; inset: 0; z-index: 2; }
443
+ .visual-overlay-none { pointer-events: none; }
444
+ .point-marker {
445
+ position: absolute;
446
+ width: 14px;
447
+ height: 14px;
448
+ margin: -7px 0 0 -7px;
449
+ border-radius: 50%;
450
+ background: var(--harmony-primary);
451
+ border: 2px solid #fff;
452
+ box-shadow: var(--harmony-shadow-sm);
453
+ }
454
+ .point-marker-idx {
455
+ position: absolute;
456
+ left: 10px;
457
+ top: -18px;
458
+ min-width: 16px;
459
+ height: 16px;
460
+ padding: 0 4px;
461
+ border-radius: 4px;
462
+ background: var(--harmony-primary);
463
+ color: #fff;
464
+ font-size: 10px;
465
+ font-weight: 700;
466
+ line-height: 16px;
467
+ text-align: center;
468
+ pointer-events: none;
469
+ }
470
+ .area-rect {
471
+ position: absolute;
472
+ border: 2px dashed var(--harmony-primary);
473
+ background: var(--harmony-primary-soft);
474
+ pointer-events: none;
475
+ }
476
+ .area-marker-idx {
477
+ position: absolute;
478
+ left: 4px;
479
+ top: 4px;
480
+ min-width: 18px;
481
+ height: 18px;
482
+ padding: 0 5px;
483
+ border-radius: 4px;
484
+ background: var(--harmony-primary);
485
+ color: #fff;
486
+ font-size: 10px;
487
+ font-weight: 700;
488
+ line-height: 18px;
489
+ text-align: center;
490
+ pointer-events: none;
491
+ z-index: 1;
492
+ }
493
+ .area-rect-draft { border-style: solid; border-color: var(--harmony-primary); background: var(--harmony-primary-soft); }
494
+ .arrow-pending-dot {
495
+ position: absolute;
496
+ width: 10px;
497
+ height: 10px;
498
+ margin: -5px 0 0 -5px;
499
+ border-radius: 50%;
500
+ background: var(--harmony-primary);
501
+ border: 2px solid #fff;
502
+ box-shadow: var(--harmony-shadow-sm);
503
+ pointer-events: none;
504
+ }
505
+ .arrow-svg { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; }
506
+ .arrow-svg line { stroke: var(--harmony-primary); stroke-width: 2; marker-end: url(#aiditor-arrowhead); }
507
+ .arrow-end-pin {
508
+ position: absolute;
509
+ width: 22px;
510
+ height: 22px;
511
+ margin: -11px 0 0 -11px;
512
+ border-radius: 50%;
513
+ background: var(--harmony-primary);
514
+ color: #fff;
515
+ border: 2px solid #fff;
516
+ box-shadow: var(--harmony-shadow-sm);
517
+ font-size: 11px;
518
+ font-weight: 700;
519
+ display: flex;
520
+ align-items: center;
521
+ justify-content: center;
522
+ pointer-events: none;
523
+ z-index: 3;
524
+ }
525
+ .visual-popovers { position: absolute; inset: 0; z-index: 4; pointer-events: none; }
526
+ .visual-popover {
527
+ position: absolute;
528
+ width: 280px;
529
+ max-width: min(280px, calc(100% - 16px));
530
+ max-height: min(560px, calc(100vh - 96px));
531
+ display: flex;
532
+ flex-direction: column;
533
+ gap: 8px;
534
+ padding: 12px 14px;
535
+ background: var(--harmony-bg-surface);
536
+ border: 1px solid var(--harmony-border);
537
+ border-radius: var(--harmony-radius-md);
538
+ box-shadow: var(--harmony-shadow-lg);
539
+ box-sizing: border-box;
540
+ transform: translate(10px, 10px);
541
+ pointer-events: auto;
542
+ overflow-y: auto;
543
+ overflow-x: hidden;
544
+ min-height: 0;
545
+ }
546
+ .visual-popover-flip-x { transform: translate(calc(-100% - 14px), 10px); }
547
+ .visual-popover-flip-y { transform: translate(10px, calc(-100% - 14px)); }
548
+ .visual-popover-flip-x.visual-popover-flip-y { transform: translate(calc(-100% - 14px), calc(-100% - 14px)); }
549
+ .visual-annotation-row-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
550
+ .visual-annotation-kind { font-size: 11px; color: var(--harmony-primary); font-weight: 600; }
551
+ .visual-annotation-actions { display: flex; gap: 6px; flex-shrink: 0; }
552
+ .visual-annotation-remove {
553
+ background: transparent;
554
+ color: var(--harmony-text-muted);
555
+ border: 1px solid var(--harmony-border);
556
+ border-radius: var(--harmony-radius-sm);
557
+ padding: 4px 8px;
558
+ font-size: 11px;
559
+ cursor: pointer;
560
+ }
561
+ .visual-annotation-remove:hover { color: var(--harmony-danger); border-color: var(--harmony-danger); }
562
+ .visual-annotation-run {
563
+ background: var(--harmony-primary);
564
+ color: #fff;
565
+ border: none;
566
+ border-radius: var(--harmony-radius-sm);
567
+ padding: 4px 10px;
568
+ font-size: 11px;
569
+ font-weight: 600;
570
+ cursor: pointer;
571
+ }
572
+ .visual-annotation-run:hover { background: var(--harmony-primary-hover); }
573
+ .visual-annotation-run:disabled { opacity: 0.45; cursor: not-allowed; }
574
+ .visual-annotation-instruction {
575
+ width: 100%;
576
+ min-height: 48px;
577
+ resize: vertical;
578
+ background: var(--harmony-bg-surface);
579
+ color: var(--harmony-text);
580
+ border: 1px solid var(--harmony-border);
581
+ border-radius: var(--harmony-radius-sm);
582
+ padding: 6px 8px;
583
+ font-size: 12px;
584
+ font-family: inherit;
585
+ outline: none;
586
+ }
587
+ .visual-annotation-instruction:focus { border-color: var(--harmony-primary); box-shadow: 0 0 0 3px var(--harmony-primary-soft); }
588
+ .visual-annotation-files { display: flex; flex-direction: column; gap: 6px; margin-top: 4px; }
589
+ .visual-attach-row { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
590
+ .visual-attach-btn {
591
+ background: var(--harmony-bg-subtle);
592
+ color: var(--harmony-text-secondary);
593
+ border: 1px solid var(--harmony-border);
594
+ border-radius: var(--harmony-radius-sm);
595
+ padding: 4px 8px;
596
+ font-size: 11px;
597
+ cursor: pointer;
598
+ }
599
+ .visual-attach-btn:hover { border-color: var(--harmony-primary); color: var(--harmony-primary); }
600
+ .visual-attachment-chips { display: flex; flex-wrap: wrap; gap: 6px; }
601
+ .visual-attachment-chip {
602
+ display: inline-flex;
603
+ align-items: center;
604
+ gap: 6px;
605
+ max-width: 100%;
606
+ background: var(--harmony-bg-subtle);
607
+ border: 1px solid var(--harmony-border);
608
+ border-radius: var(--harmony-radius-sm);
609
+ padding: 4px 6px;
610
+ font-size: 11px;
611
+ color: var(--harmony-text-secondary);
612
+ }
613
+ .visual-attachment-thumb { width: 36px; height: 36px; object-fit: cover; border-radius: 4px; flex-shrink: 0; background: var(--harmony-bg-hover); }
614
+ .visual-attachment-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 160px; }
615
+ .visual-attachment-remove-file { background: transparent; border: none; color: var(--harmony-text-muted); cursor: pointer; font-size: 14px; line-height: 1; padding: 0 4px; }
616
+ .visual-attachment-remove-file:hover { color: var(--harmony-danger); }
617
+ .file-input-hidden { display: none; }
618
+ .visual-error { font-size: 12px; color: var(--harmony-danger); }
619
+ .visual-submit-error { font-size: 12px; color: var(--harmony-danger); margin: 0; padding: 0 2px; }
620
+ .visual-submit-progress { font-size: 12px; color: var(--harmony-primary); margin: 0; padding: 0 2px; }
621
+
622
+ .video-record-btn { border-color: var(--harmony-primary) !important; color: var(--harmony-primary) !important; }
623
+ .video-record-active { animation: pulse-rec 1.2s ease-in-out infinite; }
624
+ @keyframes pulse-rec { 0%,100% { opacity: 1; } 50% { opacity: 0.55; } }
625
+
626
+ /* ── Bottom agent panel ── */
627
+ .bottom-panel {
628
+ flex-shrink: 0;
629
+ display: flex;
630
+ flex-direction: column;
631
+ background: var(--harmony-bg-surface);
632
+ border-top: 1px solid var(--harmony-border);
633
+ min-height: 32px;
634
+ max-height: 80vh;
635
+ height: 200px;
636
+ box-shadow: 0 -2px 12px rgba(22, 45, 61, 0.06);
637
+ }
638
+ .bottom-panel-collapsed { max-height: 32px; overflow: hidden; }
639
+ .bottom-panel-resize { height: 4px; cursor: ns-resize; background: transparent; flex-shrink: 0; }
640
+ .bottom-panel-resize:hover, .bottom-panel-resize:active { background: var(--harmony-primary); }
641
+ .bottom-panel-header {
642
+ display: flex;
643
+ align-items: center;
644
+ gap: 8px;
645
+ padding: 6px 16px;
646
+ flex-shrink: 0;
647
+ cursor: pointer;
648
+ user-select: none;
649
+ background: var(--harmony-bg-subtle);
650
+ }
651
+ .bottom-panel-title {
652
+ font-size: 11px;
653
+ font-weight: 600;
654
+ color: var(--harmony-text-secondary);
655
+ text-transform: uppercase;
656
+ letter-spacing: 0.5px;
657
+ }
658
+ .bottom-panel-running {
659
+ display: inline-block;
660
+ width: 8px;
661
+ height: 8px;
662
+ border-radius: 50%;
663
+ background: var(--harmony-success);
664
+ animation: pulse-dot 1.2s ease-in-out infinite;
665
+ margin-left: 4px;
666
+ }
667
+ @keyframes pulse-dot { 0%,100% { opacity: 1; } 50% { opacity: 0.3; } }
668
+ .bottom-panel-toggle { background: none; border: none; color: var(--harmony-text-muted); font-size: 14px; cursor: pointer; padding: 0 4px; line-height: 1; }
669
+ .bottom-panel-toggle:hover { color: var(--harmony-text); }
670
+ .bottom-panel-spacer { flex: 1; }
671
+ .bottom-panel-clear { background: none; border: none; color: var(--harmony-text-muted); font-size: 11px; cursor: pointer; padding: 2px 6px; }
672
+ .bottom-panel-clear:hover { color: var(--harmony-text); }
673
+ .output-panel {
674
+ overflow-y: auto;
675
+ padding: 8px 16px;
676
+ font-family: var(--harmony-mono);
677
+ font-size: 12px;
678
+ line-height: 1.5;
679
+ white-space: pre-wrap;
680
+ word-break: break-word;
681
+ flex: 1;
682
+ min-height: 0;
683
+ background: var(--harmony-bg-surface);
684
+ }
685
+ .chunk { color: var(--harmony-text); }
686
+ .chunk-status { color: var(--harmony-text-muted); font-style: italic; }
687
+ .chunk-tool { color: var(--harmony-primary); }
688
+ .chunk-error { color: var(--harmony-danger); }
689
+ .chunk-thinking { color: var(--harmony-text-muted); font-style: italic; }
690
+ .chunk-result { color: var(--harmony-success); }
691
+ .chunk-user { color: var(--harmony-text); }
692
+ .chunk-user-prefix { color: var(--harmony-text-muted); }
693
+ .agent-chat-row {
694
+ display: flex;
695
+ gap: 8px;
696
+ padding: 8px 16px;
697
+ border-top: 1px solid var(--harmony-border);
698
+ flex-shrink: 0;
699
+ align-items: flex-end;
700
+ background: var(--harmony-bg-subtle);
701
+ }
702
+ .agent-chat-input {
703
+ flex: 1;
704
+ min-height: 32px;
705
+ max-height: 96px;
706
+ resize: none;
707
+ background: var(--harmony-bg-surface);
708
+ color: var(--harmony-text);
709
+ border: 1px solid var(--harmony-border);
710
+ border-radius: var(--harmony-radius-sm);
711
+ padding: 6px 10px;
712
+ font-family: var(--harmony-font);
713
+ font-size: 12px;
714
+ line-height: 1.4;
715
+ }
716
+ .agent-chat-input:focus { outline: none; border-color: var(--harmony-primary); box-shadow: 0 0 0 3px var(--harmony-primary-soft); }
717
+ .agent-chat-input:disabled { opacity: 0.6; cursor: not-allowed; }
718
+ .agent-chat-send {
719
+ background: var(--harmony-primary);
720
+ color: #fff;
721
+ border: none;
722
+ border-radius: var(--harmony-radius-pill);
723
+ padding: 6px 16px;
724
+ font-size: 12px;
725
+ font-weight: 600;
726
+ cursor: pointer;
727
+ flex-shrink: 0;
728
+ height: 32px;
729
+ }
730
+ .agent-chat-send:hover:not(:disabled) { background: var(--harmony-primary-hover); }
731
+ .agent-chat-send:disabled { opacity: 0.45; cursor: not-allowed; }
732
+
733
+ .file-link { color: var(--harmony-primary); text-decoration: underline; cursor: pointer; }
734
+ .file-link:hover { color: var(--harmony-primary-hover); }
735
+ .chunk-tool-prefix { color: var(--harmony-primary); }
736
+
737
+ /* ── Result banner ── */
738
+ .add-page-result-slot { flex-shrink: 0; }
739
+ .add-page-result-banner {
740
+ margin: 0 24px 8px;
741
+ padding: 10px 14px;
742
+ border-radius: var(--harmony-radius-md);
743
+ font-size: 12px;
744
+ display: flex;
745
+ flex-wrap: wrap;
746
+ align-items: center;
747
+ gap: 10px;
748
+ }
749
+ .add-page-result-success { background: var(--harmony-success-soft); border: 1px solid rgba(0, 168, 98, 0.25); color: var(--harmony-success); }
750
+ .add-page-result-failed { background: var(--harmony-danger-soft); border: 1px solid rgba(232, 76, 61, 0.25); color: var(--harmony-danger); }
751
+ .add-page-result-actions { display: flex; gap: 8px; margin-left: auto; }
752
+ .add-page-result-btn {
753
+ background: var(--harmony-bg-surface);
754
+ color: var(--harmony-text-secondary);
755
+ border: 1px solid var(--harmony-border);
756
+ border-radius: var(--harmony-radius-sm);
757
+ padding: 4px 10px;
758
+ font-size: 11px;
759
+ cursor: pointer;
760
+ }
761
+ .add-page-result-btn:hover { background: var(--harmony-bg-hover); color: var(--harmony-text); }
762
+
763
+ /* ── Modals & overlays ── */
764
+ .file-preview-overlay {
765
+ position: fixed;
766
+ inset: 0;
767
+ z-index: 200;
768
+ background: rgba(22, 45, 61, 0.45);
769
+ display: flex;
770
+ align-items: center;
771
+ justify-content: center;
772
+ padding: 20px;
773
+ box-sizing: border-box;
774
+ }
775
+ .file-preview-panel {
776
+ background: var(--harmony-bg-surface);
777
+ border: 1px solid var(--harmony-border);
778
+ border-radius: var(--harmony-radius-lg);
779
+ width: min(900px, 96vw);
780
+ max-height: 90vh;
781
+ display: flex;
782
+ flex-direction: column;
783
+ overflow: hidden;
784
+ box-shadow: var(--harmony-shadow-lg);
785
+ }
786
+ .file-preview-header {
787
+ display: flex;
788
+ align-items: center;
789
+ gap: 8px;
790
+ padding: 12px 16px;
791
+ border-bottom: 1px solid var(--harmony-border);
792
+ flex-shrink: 0;
793
+ background: var(--harmony-bg-subtle);
794
+ }
795
+ .file-preview-title {
796
+ font-size: 12px;
797
+ color: var(--harmony-text);
798
+ font-family: var(--harmony-mono);
799
+ overflow: hidden;
800
+ text-overflow: ellipsis;
801
+ white-space: nowrap;
802
+ flex: 1;
803
+ }
804
+ .file-preview-close { background: none; border: none; color: var(--harmony-text-muted); font-size: 18px; cursor: pointer; padding: 0 4px; line-height: 1; flex-shrink: 0; }
805
+ .file-preview-close:hover { color: var(--harmony-text); }
806
+ .file-preview-body { flex: 1; overflow: auto; padding: 16px; min-height: 0; }
807
+ .file-preview-text { font-family: var(--harmony-mono); font-size: 12px; line-height: 1.5; color: var(--harmony-text); white-space: pre-wrap; word-break: break-word; margin: 0; }
808
+ .file-preview-image { max-width: 100%; max-height: 70vh; display: block; margin: 0 auto; }
809
+ .file-preview-loading { color: var(--harmony-text-muted); font-style: italic; font-size: 12px; }
810
+
811
+ .video-review-overlay, .snapshot-overlay {
812
+ position: fixed;
813
+ inset: 0;
814
+ z-index: 200;
815
+ background: rgba(22, 45, 61, 0.45);
816
+ display: flex;
817
+ align-items: center;
818
+ justify-content: center;
819
+ padding: 20px;
820
+ box-sizing: border-box;
821
+ }
822
+ .video-review-panel, .snapshot-panel {
823
+ background: var(--harmony-bg-surface);
824
+ border: 1px solid var(--harmony-border);
825
+ border-radius: var(--harmony-radius-lg);
826
+ width: min(1100px, 96vw);
827
+ max-height: 94vh;
828
+ display: flex;
829
+ flex-direction: column;
830
+ gap: 10px;
831
+ padding: 14px 16px;
832
+ overflow: auto;
833
+ box-shadow: var(--harmony-shadow-lg);
834
+ }
835
+ .snapshot-panel { width: min(1200px, 96vw); overflow: hidden; }
836
+ .video-review-header, .snapshot-header { display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; }
837
+ .video-review-title, .snapshot-title { font-size: 15px; font-weight: 600; color: var(--harmony-text); margin: 0; }
838
+ .video-review-meta { font-size: 12px; color: var(--harmony-text-muted); }
839
+ .video-review-tools, .snapshot-tools { display: flex; flex-wrap: wrap; gap: 4px; align-items: center; }
840
+ .video-review-transport { display: flex; align-items: center; gap: 10px; width: 100%; }
841
+ .video-play-pause-btn {
842
+ flex-shrink: 0;
843
+ width: 40px;
844
+ height: 36px;
845
+ border-radius: var(--harmony-radius-sm);
846
+ border: 1px solid var(--harmony-border);
847
+ background: var(--harmony-bg-subtle);
848
+ color: var(--harmony-text);
849
+ font-size: 16px;
850
+ line-height: 1;
851
+ cursor: pointer;
852
+ }
853
+ .video-play-pause-btn:hover { background: var(--harmony-bg-hover); border-color: var(--harmony-primary); }
854
+ .video-timeline-wrap { display: flex; flex-direction: column; gap: 6px; flex: 1; min-width: 0; }
855
+ .video-timeline { width: 100%; accent-color: var(--harmony-primary); }
856
+ .video-timeline-markers { position: relative; height: 10px; margin: 0 2px; }
857
+ .video-timeline-marker {
858
+ position: absolute;
859
+ top: 0;
860
+ width: 10px;
861
+ margin-left: -5px;
862
+ height: 10px;
863
+ background: var(--harmony-primary);
864
+ border-radius: 1px;
865
+ transform: translateX(-50%);
866
+ cursor: pointer;
867
+ }
868
+ .video-review-actions, .snapshot-footer { display: flex; gap: 10px; justify-content: flex-end; flex-wrap: wrap; margin-top: 4px; }
869
+ .video-review-secondary, .snapshot-secondary {
870
+ background: var(--harmony-bg-surface);
871
+ color: var(--harmony-text);
872
+ border: 1px solid var(--harmony-border);
873
+ border-radius: var(--harmony-radius-pill);
874
+ padding: 8px 16px;
875
+ font-size: 13px;
876
+ cursor: pointer;
877
+ }
878
+ .video-review-secondary:hover, .snapshot-secondary:hover { background: var(--harmony-bg-hover); }
879
+ .video-review-primary, .snapshot-primary {
880
+ background: var(--harmony-primary);
881
+ color: #fff;
882
+ border: none;
883
+ border-radius: var(--harmony-radius-pill);
884
+ padding: 8px 18px;
885
+ font-size: 13px;
886
+ font-weight: 600;
887
+ cursor: pointer;
888
+ }
889
+ .video-review-primary:hover, .snapshot-primary:hover { background: var(--harmony-primary-hover); }
890
+ .video-review-primary:disabled, .snapshot-primary:disabled { opacity: 0.45; cursor: not-allowed; }
891
+ .snapshot-close { background: none; border: none; color: var(--harmony-text-muted); font-size: 18px; cursor: pointer; padding: 0 4px; line-height: 1; }
892
+ .snapshot-close:hover { color: var(--harmony-text); }
893
+ .snapshot-body { display: flex; gap: 14px; flex: 1; min-height: 0; overflow: hidden; }
894
+ .snapshot-capture-area {
895
+ flex: 2;
896
+ min-width: 0;
897
+ position: relative;
898
+ display: flex;
899
+ align-items: center;
900
+ justify-content: center;
901
+ background: var(--harmony-bg-subtle);
902
+ border-radius: var(--harmony-radius-md);
903
+ overflow: hidden;
904
+ border: 1px solid var(--harmony-border);
905
+ }
906
+ .snapshot-img { max-width: 100%; max-height: 100%; object-fit: contain; display: block; user-select: none; -webkit-user-drag: none; }
907
+ .snapshot-img-overlay { position: absolute; inset: 0; z-index: 2; }
908
+ .snapshot-img-overlay-none { pointer-events: none; }
909
+ .snapshot-annotations-panel { flex: 1; min-width: 220px; max-width: 340px; display: flex; flex-direction: column; gap: 8px; overflow-y: auto; }
910
+ .snapshot-annotation-card {
911
+ background: var(--harmony-bg-subtle);
912
+ border: 1px solid var(--harmony-border);
913
+ border-radius: var(--harmony-radius-md);
914
+ padding: 10px 12px;
915
+ display: flex;
916
+ flex-direction: column;
917
+ gap: 6px;
918
+ }
919
+ .snapshot-annotation-card-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
920
+ .snapshot-annotation-kind { font-size: 11px; color: var(--harmony-primary); font-weight: 600; }
921
+ .snapshot-annotation-remove {
922
+ background: transparent;
923
+ color: var(--harmony-text-muted);
924
+ border: 1px solid var(--harmony-border);
925
+ border-radius: var(--harmony-radius-sm);
926
+ padding: 4px 8px;
927
+ font-size: 11px;
928
+ cursor: pointer;
929
+ }
930
+ .snapshot-annotation-remove:hover { color: var(--harmony-danger); border-color: var(--harmony-danger); }
931
+ .snapshot-empty-hint { color: var(--harmony-text-muted); font-size: 12px; font-style: italic; padding: 8px 0; }
932
+ .snapshot-discard-confirm { display: flex; align-items: center; gap: 10px; font-size: 13px; color: var(--harmony-danger); }
933
+ .snapshot-discard-confirm-msg { flex: 1; }
934
+
935
+ /* ── Add Page slideover ── */
936
+ .add-page-overlay {
937
+ position: fixed;
938
+ inset: 0;
939
+ z-index: 300;
940
+ background: rgba(22, 45, 61, 0.35);
941
+ display: flex;
942
+ justify-content: flex-end;
943
+ }
944
+ .project-settings-overlay {
945
+ position: fixed;
946
+ inset: 0;
947
+ z-index: 350;
948
+ background: rgba(22, 45, 61, 0.4);
949
+ display: flex;
950
+ align-items: center;
951
+ justify-content: center;
952
+ padding: 24px;
953
+ box-sizing: border-box;
954
+ }
955
+ .project-settings-dialog {
956
+ background: var(--harmony-bg-surface);
957
+ border: 1px solid var(--harmony-border);
958
+ border-radius: var(--harmony-radius-lg);
959
+ width: min(520px, 100%);
960
+ max-height: min(80vh, 640px);
961
+ display: flex;
962
+ flex-direction: column;
963
+ overflow: hidden;
964
+ box-shadow: var(--harmony-shadow-lg);
965
+ }
966
+ .project-settings-header {
967
+ display: flex;
968
+ align-items: center;
969
+ justify-content: space-between;
970
+ padding: 14px 16px;
971
+ border-bottom: 1px solid var(--harmony-border);
972
+ background: var(--harmony-bg-subtle);
973
+ }
974
+ .project-settings-title { font-size: 14px; font-weight: 600; color: var(--harmony-text); }
975
+ .project-settings-close { background: none; border: none; color: var(--harmony-text-muted); font-size: 20px; cursor: pointer; line-height: 1; }
976
+ .project-settings-body { padding: 14px 16px; overflow: auto; display: flex; flex-direction: column; gap: 12px; }
977
+ .add-page-slideover {
978
+ width: min(480px, 100vw);
979
+ height: 100%;
980
+ background: var(--harmony-bg-surface);
981
+ border-left: 1px solid var(--harmony-border);
982
+ display: flex;
983
+ flex-direction: column;
984
+ box-shadow: var(--harmony-shadow-lg);
985
+ position: relative;
986
+ }
987
+ .add-page-header {
988
+ display: flex;
989
+ align-items: center;
990
+ gap: 8px;
991
+ padding: 14px 16px;
992
+ border-bottom: 1px solid var(--harmony-border);
993
+ flex-shrink: 0;
994
+ background: var(--harmony-bg-subtle);
995
+ }
996
+ .add-page-title { font-size: 14px; font-weight: 600; color: var(--harmony-text); flex: 1; }
997
+ .add-page-close { background: none; border: none; color: var(--harmony-text-muted); font-size: 20px; cursor: pointer; line-height: 1; padding: 0 4px; }
998
+ .add-page-close:hover { color: var(--harmony-text); }
999
+ .add-page-body { flex: 1; overflow: auto; padding: 14px 16px; display: flex; flex-direction: column; gap: 16px; }
1000
+ .add-page-section-label { font-size: 11px; font-weight: 600; color: var(--harmony-text-muted); text-transform: uppercase; letter-spacing: 0.4px; margin-bottom: 6px; }
1001
+ .add-page-section-header-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 6px; }
1002
+ .add-page-section-header-row .add-page-section-label { margin-bottom: 0; flex: 1; }
1003
+ .add-page-fill-from-image-btn {
1004
+ background: var(--harmony-bg-subtle);
1005
+ color: var(--harmony-primary);
1006
+ border: 1px solid var(--harmony-border);
1007
+ border-radius: var(--harmony-radius-sm);
1008
+ padding: 4px 10px;
1009
+ font-size: 11px;
1010
+ font-weight: 600;
1011
+ cursor: pointer;
1012
+ flex-shrink: 0;
1013
+ }
1014
+ .add-page-fill-from-image-btn:hover { background: var(--harmony-primary-soft); }
1015
+ .add-page-fill-from-image-btn:disabled { opacity: 0.45; cursor: not-allowed; }
1016
+ .add-page-suggested-route {
1017
+ display: flex;
1018
+ flex-wrap: wrap;
1019
+ align-items: center;
1020
+ gap: 8px;
1021
+ background: var(--harmony-bg-subtle);
1022
+ border: 1px solid var(--harmony-border);
1023
+ border-radius: var(--harmony-radius-sm);
1024
+ padding: 8px 10px;
1025
+ font-size: 12px;
1026
+ color: var(--harmony-text-secondary);
1027
+ margin-bottom: 8px;
1028
+ }
1029
+ .add-page-suggested-route code { font-family: var(--harmony-mono); color: var(--harmony-primary); }
1030
+ .add-page-brief-fill-popover {
1031
+ position: absolute;
1032
+ inset: 0;
1033
+ z-index: 10;
1034
+ background: rgba(22, 45, 61, 0.4);
1035
+ display: flex;
1036
+ align-items: center;
1037
+ justify-content: center;
1038
+ padding: 16px;
1039
+ box-sizing: border-box;
1040
+ }
1041
+ .add-page-brief-fill-panel {
1042
+ background: var(--harmony-bg-surface);
1043
+ border: 1px solid var(--harmony-border);
1044
+ border-radius: var(--harmony-radius-md);
1045
+ width: min(420px, 100%);
1046
+ max-height: 90%;
1047
+ overflow: auto;
1048
+ padding: 14px 16px;
1049
+ display: flex;
1050
+ flex-direction: column;
1051
+ gap: 10px;
1052
+ box-shadow: var(--harmony-shadow-lg);
1053
+ }
1054
+ .add-page-brief-fill-header { display: flex; align-items: center; justify-content: space-between; gap: 8px; }
1055
+ .add-page-brief-fill-title { font-size: 13px; font-weight: 600; color: var(--harmony-text); }
1056
+ .add-page-brief-fill-context {
1057
+ width: 100%;
1058
+ min-height: 64px;
1059
+ background: var(--harmony-bg-surface);
1060
+ color: var(--harmony-text);
1061
+ border: 1px solid var(--harmony-border);
1062
+ border-radius: var(--harmony-radius-sm);
1063
+ padding: 8px;
1064
+ font-size: 12px;
1065
+ font-family: var(--harmony-mono);
1066
+ resize: vertical;
1067
+ box-sizing: border-box;
1068
+ }
1069
+ .add-page-brief-fill-dropzone {
1070
+ border: 1px dashed var(--harmony-border-strong);
1071
+ border-radius: var(--harmony-radius-md);
1072
+ padding: 14px;
1073
+ text-align: center;
1074
+ color: var(--harmony-text-muted);
1075
+ font-size: 12px;
1076
+ cursor: pointer;
1077
+ }
1078
+ .add-page-brief-fill-dropzone-disabled { opacity: 0.45; cursor: not-allowed; pointer-events: none; }
1079
+ .add-page-brief-fill-context:disabled { opacity: 0.6; cursor: not-allowed; }
1080
+ .add-page-brief-fill-dropzone:focus { outline: none; border-color: var(--harmony-primary); box-shadow: 0 0 0 3px var(--harmony-primary-soft); }
1081
+ .add-page-brief-fill-thumbs { display: flex; flex-wrap: wrap; gap: 8px; }
1082
+ .add-page-brief-fill-thumb {
1083
+ position: relative;
1084
+ width: 72px;
1085
+ height: 72px;
1086
+ border-radius: var(--harmony-radius-sm);
1087
+ overflow: hidden;
1088
+ border: 1px solid var(--harmony-border);
1089
+ background: var(--harmony-bg-subtle);
1090
+ }
1091
+ .add-page-brief-fill-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
1092
+ .add-page-brief-fill-thumb-remove {
1093
+ position: absolute;
1094
+ top: 2px;
1095
+ right: 2px;
1096
+ background: rgba(22, 45, 61, 0.7);
1097
+ color: #fff;
1098
+ border: none;
1099
+ border-radius: 3px;
1100
+ width: 18px;
1101
+ height: 18px;
1102
+ font-size: 12px;
1103
+ line-height: 1;
1104
+ cursor: pointer;
1105
+ padding: 0;
1106
+ }
1107
+ .add-page-brief-fill-actions { display: flex; gap: 8px; justify-content: flex-end; margin-top: 4px; }
1108
+ .add-page-route-row { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
1109
+ .add-page-route-input {
1110
+ flex: 1;
1111
+ min-width: 160px;
1112
+ background: var(--harmony-bg-surface);
1113
+ color: var(--harmony-text);
1114
+ border: 1px solid var(--harmony-border);
1115
+ border-radius: var(--harmony-radius-sm);
1116
+ padding: 8px 10px;
1117
+ font-size: 13px;
1118
+ font-family: var(--harmony-mono);
1119
+ box-sizing: border-box;
1120
+ }
1121
+ .add-page-route-input:focus { border-color: var(--harmony-primary); outline: none; box-shadow: 0 0 0 3px var(--harmony-primary-soft); }
1122
+ .add-page-route-badge { font-size: 10px; color: var(--harmony-primary); background: var(--harmony-primary-soft); padding: 2px 8px; border-radius: 4px; }
1123
+ .add-page-field-error { font-size: 12px; color: var(--harmony-danger); margin-top: 4px; }
1124
+ .add-page-hint { font-size: 12px; color: var(--harmony-text-muted); margin-top: 4px; }
1125
+ .add-page-textarea {
1126
+ width: 100%;
1127
+ min-height: 120px;
1128
+ background: var(--harmony-bg-surface);
1129
+ color: var(--harmony-text);
1130
+ border: 1px solid var(--harmony-border);
1131
+ border-radius: var(--harmony-radius-sm);
1132
+ padding: 10px;
1133
+ font-size: 12px;
1134
+ font-family: var(--harmony-mono);
1135
+ resize: vertical;
1136
+ box-sizing: border-box;
1137
+ outline: none;
1138
+ }
1139
+ .add-page-textarea:focus { border-color: var(--harmony-primary); box-shadow: 0 0 0 3px var(--harmony-primary-soft); }
1140
+ .add-page-dropzone {
1141
+ border: 1px dashed var(--harmony-border-strong);
1142
+ border-radius: var(--harmony-radius-md);
1143
+ padding: 16px;
1144
+ text-align: center;
1145
+ color: var(--harmony-text-muted);
1146
+ font-size: 12px;
1147
+ }
1148
+ .add-page-chips { display: flex; flex-direction: column; gap: 6px; margin-top: 8px; }
1149
+ .add-page-chip {
1150
+ display: flex;
1151
+ align-items: center;
1152
+ gap: 8px;
1153
+ background: var(--harmony-bg-subtle);
1154
+ border: 1px solid var(--harmony-border);
1155
+ border-radius: var(--harmony-radius-sm);
1156
+ padding: 6px 8px;
1157
+ font-size: 11px;
1158
+ }
1159
+ .add-page-chip-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--harmony-text-secondary); }
1160
+ .add-page-chip-path { font-size: 10px; color: var(--harmony-text-muted); font-family: var(--harmony-mono); }
1161
+ .add-page-chip select { background: var(--harmony-bg-surface); color: var(--harmony-text); border: 1px solid var(--harmony-border); border-radius: 4px; font-size: 11px; padding: 2px 4px; }
1162
+ .add-page-chip-remove { background: none; border: none; color: var(--harmony-text-muted); cursor: pointer; font-size: 14px; padding: 0 4px; }
1163
+ .add-page-chip-remove:hover { color: var(--harmony-danger); }
1164
+ .add-page-plugins {
1165
+ border: 1px solid var(--harmony-border);
1166
+ border-radius: var(--harmony-radius-md);
1167
+ padding: 10px;
1168
+ margin-top: 8px;
1169
+ display: flex;
1170
+ flex-direction: column;
1171
+ gap: 12px;
1172
+ max-height: 320px;
1173
+ overflow: auto;
1174
+ }
1175
+ .add-menu-panel.add-page-plugins,
1176
+ .annotation-add-menu-panel.add-menu-panel {
1177
+ max-height: min(320px, 42vh);
1178
+ overflow: hidden;
1179
+ gap: 8px;
1180
+ min-height: 0;
1181
+ display: flex;
1182
+ flex-direction: column;
1183
+ }
1184
+ .add-menu-panel .add-page-plugins-zone-title { flex-shrink: 0; }
1185
+ .add-menu-panel .add-menu-panel-attached { flex: 0 1 auto; min-height: 0; max-height: 120px; overflow-y: auto; overflow-x: hidden; -webkit-overflow-scrolling: touch; }
1186
+ .add-menu-panel .add-page-plugin-chips { margin-top: 0; }
1187
+ .add-menu-panel .add-page-btn,
1188
+ .add-menu-panel .add-page-manage-link,
1189
+ .add-menu-panel .add-page-hint,
1190
+ .add-menu-panel .add-page-field-error,
1191
+ .add-menu-panel .add-menu-route-params,
1192
+ .add-menu-panel .add-page-suggested-route,
1193
+ .add-menu-panel .add-menu-route-confirm { flex-shrink: 0; }
1194
+ .add-menu-panel .add-menu-popover { flex-shrink: 0; min-height: 180px; max-height: min(240px, 36vh); margin-top: 4px; }
1195
+ .add-menu-panel .add-menu-nav { min-height: 140px; }
1196
+ .add-page-plugins-zone-title { font-size: 11px; font-weight: 600; color: var(--harmony-text-secondary); text-transform: uppercase; letter-spacing: 0.04em; margin-bottom: 4px; }
1197
+ .add-page-plugin-row { display: flex; align-items: center; gap: 8px; padding: 4px 0; font-size: 11px; border-bottom: 1px solid var(--harmony-border); }
1198
+ .add-page-plugin-row:last-child { border-bottom: none; }
1199
+ .add-page-plugin-label { flex: 1; color: var(--harmony-text-secondary); }
1200
+ .add-page-plugin-btn {
1201
+ background: var(--harmony-bg-subtle);
1202
+ color: var(--harmony-text-secondary);
1203
+ border: 1px solid var(--harmony-border);
1204
+ border-radius: var(--harmony-radius-sm);
1205
+ padding: 2px 8px;
1206
+ font-size: 10px;
1207
+ cursor: pointer;
1208
+ }
1209
+ .add-page-plugin-btn:hover { background: var(--harmony-bg-hover); color: var(--harmony-text); }
1210
+ .add-page-plugin-btn:disabled { opacity: 0.45; cursor: not-allowed; }
1211
+ .add-page-plugin-btn-primary { background: var(--harmony-primary); color: #fff; border-color: var(--harmony-primary); }
1212
+ .add-page-setup-ok { color: var(--harmony-success); font-size: 10px; }
1213
+ .add-page-setup-warn { color: var(--harmony-warning); font-size: 10px; }
1214
+ .add-page-setup-error { color: var(--harmony-danger); font-size: 10px; }
1215
+ .add-page-plugin-contract { padding-left: 0; font-size: 11px; color: var(--harmony-text-muted); display: flex; flex-direction: column; gap: 4px; margin-top: 6px; }
1216
+ .add-page-plugin-contract-row { display: flex; align-items: center; gap: 8px; padding: 4px 0; border-bottom: 1px solid var(--harmony-border); }
1217
+ .add-page-plugin-contract-row:last-child { border-bottom: none; }
1218
+ .add-page-plugin-contract-name { flex: 1; color: var(--harmony-text-secondary); font-size: 11px; }
1219
+ .add-page-plugin-contract-added { font-size: 10px; color: var(--harmony-success); }
1220
+ .add-page-plugin-chips { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 4px; }
1221
+ .add-page-plugin-chip {
1222
+ background: var(--harmony-bg-subtle);
1223
+ border: 1px solid var(--harmony-border);
1224
+ border-radius: var(--harmony-radius-sm);
1225
+ padding: 2px 6px;
1226
+ font-size: 10px;
1227
+ color: var(--harmony-text-secondary);
1228
+ display: flex;
1229
+ align-items: center;
1230
+ gap: 4px;
1231
+ }
1232
+ .add-page-plugin-chip-remove { background: none; border: none; color: var(--harmony-text-muted); cursor: pointer; padding: 0 2px; }
1233
+ .add-page-plugins-warn { font-size: 11px; color: var(--harmony-warning); margin-top: 4px; }
1234
+ .add-page-install-live { font-size: 11px; color: var(--harmony-text-muted); }
1235
+ .add-page-local-plugin-form { display: flex; flex-direction: column; gap: 6px; margin-top: 8px; padding-top: 8px; border-top: 1px solid var(--harmony-border); }
1236
+ .add-page-local-plugin-form input {
1237
+ background: var(--harmony-bg-surface);
1238
+ color: var(--harmony-text);
1239
+ border: 1px solid var(--harmony-border);
1240
+ border-radius: var(--harmony-radius-sm);
1241
+ padding: 4px 6px;
1242
+ font-size: 11px;
1243
+ }
1244
+ .add-page-plugin-picker {
1245
+ width: 100%;
1246
+ background: var(--harmony-bg-surface);
1247
+ color: var(--harmony-text);
1248
+ border: 1px solid var(--harmony-border);
1249
+ border-radius: var(--harmony-radius-sm);
1250
+ font-size: 12px;
1251
+ padding: 6px 8px;
1252
+ margin-top: 6px;
1253
+ }
1254
+ .add-page-manage-link { font-size: 11px; color: var(--harmony-primary); cursor: pointer; margin-top: 6px; background: none; border: none; padding: 0; text-align: left; }
1255
+ .annotation-binding { margin-top: 6px; border-top: 1px solid var(--harmony-border); padding-top: 6px; }
1256
+ .annotation-add-menu { margin-top: 6px; border-top: 1px solid var(--harmony-border); padding-top: 6px; }
1257
+ .annotation-add-menu-toggle { background: none; border: none; color: var(--harmony-primary); font-size: 11px; cursor: pointer; padding: 0; text-align: left; }
1258
+ .annotation-add-menu-panel { display: flex; flex-direction: column; gap: 6px; margin-top: 6px; font-size: 11px; color: var(--harmony-text-secondary); }
1259
+ .change-request-add-menu { margin-top: 8px; padding: 10px 12px; border: 1px solid var(--harmony-border); border-radius: var(--harmony-radius-md); background: var(--harmony-bg-subtle); }
1260
+ .add-menu-route-params { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-top: 4px; }
1261
+ .add-menu-popover {
1262
+ border: 1px solid var(--harmony-border);
1263
+ border-radius: var(--harmony-radius-sm);
1264
+ padding: 8px;
1265
+ background: var(--harmony-bg-subtle);
1266
+ margin-top: 6px;
1267
+ display: flex;
1268
+ flex-direction: column;
1269
+ gap: 6px;
1270
+ min-height: 0;
1271
+ max-width: 100%;
1272
+ max-height: min(320px, 50vh);
1273
+ overflow: hidden;
1274
+ }
1275
+ .add-menu-popover-header {
1276
+ display: flex;
1277
+ justify-content: space-between;
1278
+ align-items: center;
1279
+ font-size: 11px;
1280
+ font-weight: 600;
1281
+ color: var(--harmony-text-secondary);
1282
+ border-bottom: 1px solid var(--harmony-border);
1283
+ padding-bottom: 4px;
1284
+ margin-bottom: 4px;
1285
+ flex-shrink: 0;
1286
+ }
1287
+ .add-menu-popover-header button { background: none; border: none; color: var(--harmony-text-muted); font-size: 14px; cursor: pointer; padding: 0 4px; }
1288
+ .add-menu-popover-header button:hover { color: var(--harmony-text); }
1289
+ .add-menu-nav { display: flex; flex-direction: column; gap: 4px; flex: 1; min-height: 0; overflow-y: auto; overflow-x: hidden; padding-right: 2px; -webkit-overflow-scrolling: touch; }
1290
+ .add-menu-nav-row { display: contents; }
1291
+ .add-menu-nav-btn {
1292
+ background: var(--harmony-bg-surface);
1293
+ color: var(--harmony-text-secondary);
1294
+ border: 1px solid var(--harmony-border);
1295
+ border-radius: var(--harmony-radius-sm);
1296
+ padding: 4px 8px;
1297
+ font-size: 11px;
1298
+ cursor: pointer;
1299
+ text-align: left;
1300
+ }
1301
+ .add-menu-nav-btn:hover { background: var(--harmony-bg-hover); color: var(--harmony-text); border-color: var(--harmony-primary); }
1302
+ .add-menu-item-btn {
1303
+ background: var(--harmony-primary);
1304
+ color: #fff;
1305
+ border: none;
1306
+ border-radius: var(--harmony-radius-sm);
1307
+ padding: 4px 8px;
1308
+ font-size: 11px;
1309
+ cursor: pointer;
1310
+ text-align: left;
1311
+ }
1312
+ .add-menu-item-btn:hover { background: var(--harmony-primary-hover); }
1313
+ .annotation-binding-preview { font-size: 10px; color: var(--harmony-success); margin: 0; }
1314
+ .annotation-binding-panel label { display: flex; flex-direction: column; gap: 2px; }
1315
+ .annotation-binding-panel select { background: var(--harmony-bg-surface); color: var(--harmony-text); border: 1px solid var(--harmony-border); border-radius: 4px; font-size: 11px; }
1316
+ .annotation-binding-scope-row { display: flex; gap: 10px; flex-wrap: wrap; }
1317
+ .annotation-binding-install {
1318
+ background: var(--harmony-primary);
1319
+ color: #fff;
1320
+ border: none;
1321
+ border-radius: var(--harmony-radius-sm);
1322
+ padding: 4px 8px;
1323
+ font-size: 10px;
1324
+ cursor: pointer;
1325
+ align-self: flex-start;
1326
+ }
1327
+ .add-page-footer { display: flex; gap: 8px; padding: 12px 16px; border-top: 1px solid var(--harmony-border); flex-shrink: 0; background: var(--harmony-bg-subtle); }
1328
+ .add-page-btn { flex: 1; padding: 10px; border-radius: var(--harmony-radius-pill); font-size: 13px; font-weight: 600; cursor: pointer; border: 1px solid var(--harmony-border); }
1329
+ .add-page-btn-cancel { background: var(--harmony-bg-surface); color: var(--harmony-text-secondary); }
1330
+ .add-page-btn-primary { background: var(--harmony-primary); color: #fff; border-color: var(--harmony-primary); }
1331
+ .add-page-btn-primary:disabled { opacity: 0.45; cursor: not-allowed; }
1332
+ .add-page-hidden-file { display: none; }
1333
+
1334
+ /* Legacy class aliases (kept for compatibility) */
1335
+ .main-panel { flex: 1; display: flex; flex-direction: column; min-height: 0; overflow: hidden; }
1336
+ .main-top-bar { display: none; }
1337
+ .preview-stack { display: contents; }
1338
+ .preview-url-row { display: none; }
1339
+ .reset-btn {
1340
+ background: var(--harmony-bg-surface);
1341
+ border: 1px solid var(--harmony-border);
1342
+ color: var(--harmony-text-secondary);
1343
+ cursor: pointer;
1344
+ font-size: 14px;
1345
+ padding: 8px 12px;
1346
+ border-radius: var(--harmony-radius-pill);
1347
+ line-height: 1;
1348
+ }
1349
+ .reset-btn:hover { color: var(--harmony-text); border-color: var(--harmony-border-strong); }
1350
+ .route-picker-stack { display: contents; }