ralphflow 0.5.0 → 0.5.2

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.
@@ -0,0 +1,2140 @@
1
+ :root {
2
+ --bg: #0d1117;
3
+ --bg-surface: #161b22;
4
+ --bg-hover: #1c2128;
5
+ --bg-active: #21262d;
6
+ --border: #30363d;
7
+ --text: #e6edf3;
8
+ --text-dim: #8b949e;
9
+ --text-muted: #484f58;
10
+ --accent: #58a6ff;
11
+ --green: #3fb950;
12
+ --blue: #58a6ff;
13
+ --yellow: #d29922;
14
+ --red: #f85149;
15
+ --purple: #bc8cff;
16
+ --mono: 'SF Mono', 'Cascadia Code', 'Fira Code', 'JetBrains Mono', monospace;
17
+ --sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', Helvetica, Arial, sans-serif;
18
+ --radius: 6px;
19
+ }
20
+
21
+ * { margin: 0; padding: 0; box-sizing: border-box; }
22
+
23
+ body {
24
+ font-family: var(--sans);
25
+ background: var(--bg);
26
+ color: var(--text);
27
+ height: 100vh;
28
+ display: flex;
29
+ flex-direction: column;
30
+ overflow: hidden;
31
+ }
32
+
33
+ /* Header */
34
+ .header {
35
+ display: flex;
36
+ align-items: center;
37
+ justify-content: space-between;
38
+ padding: 12px 20px;
39
+ border-bottom: 1px solid var(--border);
40
+ background: var(--bg-surface);
41
+ flex-shrink: 0;
42
+ }
43
+ .header h1 {
44
+ font-size: 15px;
45
+ font-weight: 600;
46
+ letter-spacing: -0.3px;
47
+ }
48
+ .header .host {
49
+ font-family: var(--mono);
50
+ font-size: 12px;
51
+ color: var(--text-dim);
52
+ }
53
+
54
+ /* Main layout */
55
+ .main {
56
+ display: flex;
57
+ flex: 1;
58
+ overflow: hidden;
59
+ }
60
+
61
+ /* Sidebar */
62
+ .sidebar {
63
+ width: 240px;
64
+ border-right: 1px solid var(--border);
65
+ background: var(--bg-surface);
66
+ overflow-y: auto;
67
+ flex-shrink: 0;
68
+ }
69
+ .sidebar-section {
70
+ padding: 12px 0;
71
+ }
72
+ .sidebar-label {
73
+ padding: 0 16px;
74
+ font-size: 11px;
75
+ font-weight: 600;
76
+ text-transform: uppercase;
77
+ letter-spacing: 0.5px;
78
+ color: var(--text-dim);
79
+ margin-bottom: 4px;
80
+ }
81
+ .sidebar-item {
82
+ display: block;
83
+ padding: 6px 16px;
84
+ font-size: 13px;
85
+ color: var(--text-dim);
86
+ cursor: pointer;
87
+ border-left: 2px solid transparent;
88
+ transition: background 0.1s;
89
+ }
90
+ .sidebar-item:hover { background: var(--bg-hover); color: var(--text); }
91
+ .sidebar-item.active {
92
+ background: var(--bg-active);
93
+ color: var(--text);
94
+ border-left-color: var(--accent);
95
+ }
96
+ .sidebar-item.app-item {
97
+ font-weight: 600;
98
+ color: var(--text);
99
+ padding: 8px 16px;
100
+ }
101
+ .sidebar-item.loop-item { padding-left: 32px; font-size: 12px; }
102
+ .sidebar-item .badge {
103
+ font-size: 10px;
104
+ font-family: var(--mono);
105
+ padding: 1px 6px;
106
+ border-radius: 10px;
107
+ margin-left: 6px;
108
+ background: var(--bg-hover);
109
+ color: var(--text-dim);
110
+ }
111
+ .sidebar-progress {
112
+ padding: 2px 16px 6px;
113
+ display: flex;
114
+ align-items: center;
115
+ gap: 6px;
116
+ }
117
+ .sidebar-progress-bar {
118
+ flex: 1;
119
+ height: 3px;
120
+ background: var(--border);
121
+ border-radius: 2px;
122
+ overflow: hidden;
123
+ }
124
+ .sidebar-progress-fill {
125
+ height: 100%;
126
+ background: var(--green);
127
+ border-radius: 2px;
128
+ transition: width 0.3s;
129
+ }
130
+ .sidebar-progress-text {
131
+ font-size: 10px;
132
+ font-family: var(--mono);
133
+ color: var(--text-muted);
134
+ min-width: 28px;
135
+ text-align: right;
136
+ }
137
+
138
+ /* Content */
139
+ .content {
140
+ flex: 1;
141
+ overflow-y: auto;
142
+ padding: 24px 32px;
143
+ }
144
+ .content-empty {
145
+ display: flex;
146
+ align-items: center;
147
+ justify-content: center;
148
+ height: 100%;
149
+ color: var(--text-muted);
150
+ font-size: 14px;
151
+ }
152
+
153
+ /* App header */
154
+ .app-header { margin-bottom: 24px; }
155
+ .app-header h2 {
156
+ font-size: 20px;
157
+ font-weight: 600;
158
+ margin-bottom: 4px;
159
+ }
160
+ .app-type-badge {
161
+ display: inline-block;
162
+ font-family: var(--mono);
163
+ font-size: 11px;
164
+ color: var(--purple);
165
+ background: rgba(188, 140, 255, 0.1);
166
+ padding: 2px 8px;
167
+ border-radius: 4px;
168
+ margin-right: 8px;
169
+ }
170
+ .app-desc {
171
+ color: var(--text-dim);
172
+ font-size: 13px;
173
+ margin-top: 6px;
174
+ }
175
+
176
+ /* Pipeline view */
177
+ .pipeline {
178
+ display: flex;
179
+ align-items: center;
180
+ gap: 0;
181
+ margin-bottom: 28px;
182
+ padding: 16px 0;
183
+ }
184
+ .pipeline-node {
185
+ display: flex;
186
+ flex-direction: column;
187
+ align-items: center;
188
+ gap: 6px;
189
+ cursor: pointer;
190
+ padding: 12px 20px;
191
+ border-radius: var(--radius);
192
+ border: 1px solid var(--border);
193
+ background: var(--bg-surface);
194
+ transition: border-color 0.15s, background 0.15s;
195
+ min-width: 120px;
196
+ }
197
+ .pipeline-node:hover { border-color: var(--text-dim); }
198
+ .pipeline-node.selected { border-color: var(--accent); background: rgba(88, 166, 255, 0.05); }
199
+ .pipeline-node .node-name { font-size: 12px; font-weight: 600; }
200
+ .pipeline-node .node-status {
201
+ font-family: var(--mono);
202
+ font-size: 10px;
203
+ padding: 2px 8px;
204
+ border-radius: 10px;
205
+ }
206
+ .pipeline-node .node-status.complete { background: rgba(63,185,80,0.15); color: var(--green); }
207
+ .pipeline-node .node-status.running { background: rgba(88,166,255,0.15); color: var(--blue); }
208
+ .pipeline-node .node-status.pending { background: rgba(139,148,158,0.1); color: var(--text-muted); }
209
+ .pipeline-node .node-status-row {
210
+ display: flex;
211
+ align-items: center;
212
+ gap: 6px;
213
+ }
214
+ .pipeline-node .node-model-sep {
215
+ color: var(--text-muted);
216
+ font-size: 10px;
217
+ }
218
+ .pipeline-node .node-model {
219
+ font-family: var(--mono);
220
+ font-size: 9px;
221
+ color: var(--text-dim);
222
+ }
223
+ .pipeline-node .node-model-default {
224
+ font-style: italic;
225
+ opacity: 0.6;
226
+ }
227
+ .pipeline-node .node-progress {
228
+ display: flex;
229
+ flex-direction: column;
230
+ align-items: center;
231
+ gap: 4px;
232
+ width: 100%;
233
+ margin-top: 2px;
234
+ }
235
+ .pipeline-node .node-progress-text {
236
+ font-family: var(--mono);
237
+ font-size: 9px;
238
+ color: var(--text-muted);
239
+ }
240
+ .pipeline-node .node-progress-bar {
241
+ width: 100%;
242
+ height: 4px;
243
+ background: var(--border);
244
+ border-radius: 2px;
245
+ overflow: hidden;
246
+ }
247
+ .pipeline-node .node-progress-fill {
248
+ height: 100%;
249
+ background: var(--green);
250
+ border-radius: 2px;
251
+ transition: width 0.3s;
252
+ }
253
+ .pipeline-connector {
254
+ width: 32px;
255
+ height: 2px;
256
+ background: var(--border);
257
+ flex-shrink: 0;
258
+ transition: background 0.3s;
259
+ }
260
+ .pipeline-connector.complete {
261
+ background: var(--green);
262
+ }
263
+ .pipeline-connector-wrap {
264
+ display: flex;
265
+ flex-direction: column;
266
+ align-items: center;
267
+ gap: 2px;
268
+ flex-shrink: 0;
269
+ }
270
+ .pipeline-connector-wrap .connector-file {
271
+ font-family: var(--mono);
272
+ font-size: 8px;
273
+ color: var(--text-muted);
274
+ white-space: nowrap;
275
+ max-width: 80px;
276
+ overflow: hidden;
277
+ text-overflow: ellipsis;
278
+ }
279
+ .pipeline-node .node-io {
280
+ display: flex;
281
+ gap: 4px;
282
+ flex-wrap: wrap;
283
+ justify-content: center;
284
+ max-width: 140px;
285
+ }
286
+ .pipeline-node .node-io-label {
287
+ font-family: var(--mono);
288
+ font-size: 8px;
289
+ color: var(--text-muted);
290
+ padding: 1px 5px;
291
+ border-radius: 3px;
292
+ background: rgba(139,148,158,0.08);
293
+ white-space: nowrap;
294
+ }
295
+ .pipeline-node .node-io-in .node-io-label {
296
+ color: var(--blue);
297
+ background: rgba(88,166,255,0.08);
298
+ }
299
+ .pipeline-node .node-io-out .node-io-label {
300
+ color: var(--green);
301
+ background: rgba(63,185,80,0.08);
302
+ }
303
+
304
+ /* Section */
305
+ .section {
306
+ margin-bottom: 24px;
307
+ }
308
+ .section-title {
309
+ font-size: 11px;
310
+ font-weight: 600;
311
+ text-transform: uppercase;
312
+ letter-spacing: 0.5px;
313
+ color: var(--text-dim);
314
+ margin-bottom: 12px;
315
+ }
316
+
317
+ /* Loop detail */
318
+ .loop-meta {
319
+ display: grid;
320
+ grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
321
+ gap: 12px;
322
+ margin-bottom: 16px;
323
+ }
324
+ .meta-card {
325
+ padding: 12px;
326
+ background: var(--bg-surface);
327
+ border: 1px solid var(--border);
328
+ border-radius: var(--radius);
329
+ }
330
+ .meta-label {
331
+ font-size: 11px;
332
+ color: var(--text-dim);
333
+ margin-bottom: 4px;
334
+ }
335
+ .meta-value {
336
+ font-family: var(--mono);
337
+ font-size: 13px;
338
+ }
339
+
340
+ /* Progress bar */
341
+ .progress-bar {
342
+ height: 6px;
343
+ background: var(--bg-active);
344
+ border-radius: 3px;
345
+ overflow: hidden;
346
+ margin-top: 8px;
347
+ }
348
+ .progress-fill {
349
+ height: 100%;
350
+ background: var(--green);
351
+ border-radius: 3px;
352
+ transition: width 0.3s ease;
353
+ }
354
+
355
+ /* Agent table */
356
+ .agent-table {
357
+ width: 100%;
358
+ border-collapse: collapse;
359
+ font-size: 12px;
360
+ font-family: var(--mono);
361
+ }
362
+ .agent-table th {
363
+ text-align: left;
364
+ padding: 8px 12px;
365
+ border-bottom: 1px solid var(--border);
366
+ color: var(--text-dim);
367
+ font-weight: 500;
368
+ font-size: 11px;
369
+ }
370
+ .agent-table td {
371
+ padding: 8px 12px;
372
+ border-bottom: 1px solid var(--border);
373
+ color: var(--text);
374
+ }
375
+ .agent-table tr:hover td { background: var(--bg-hover); }
376
+
377
+ /* Editor */
378
+ .editor-wrap {
379
+ position: relative;
380
+ }
381
+ .editor {
382
+ width: 100%;
383
+ min-height: 300px;
384
+ background: var(--bg-surface);
385
+ border: 1px solid var(--border);
386
+ border-radius: var(--radius);
387
+ color: var(--text);
388
+ font-family: var(--mono);
389
+ font-size: 13px;
390
+ line-height: 1.6;
391
+ padding: 16px;
392
+ resize: vertical;
393
+ outline: none;
394
+ tab-size: 2;
395
+ }
396
+ .editor:focus { border-color: var(--accent); }
397
+ .editor-actions {
398
+ display: flex;
399
+ gap: 8px;
400
+ margin-top: 8px;
401
+ align-items: center;
402
+ }
403
+ .btn {
404
+ font-family: var(--sans);
405
+ font-size: 12px;
406
+ font-weight: 500;
407
+ padding: 6px 14px;
408
+ border-radius: var(--radius);
409
+ border: 1px solid var(--border);
410
+ cursor: pointer;
411
+ transition: background 0.1s, border-color 0.1s;
412
+ background: var(--bg-surface);
413
+ color: var(--text);
414
+ }
415
+ .btn:hover { background: var(--bg-hover); border-color: var(--text-dim); }
416
+ .btn-primary {
417
+ background: var(--accent);
418
+ color: #000;
419
+ border-color: var(--accent);
420
+ }
421
+ .btn-primary:hover { background: #79c0ff; }
422
+ .btn-danger {
423
+ background: transparent;
424
+ color: var(--red);
425
+ border-color: var(--red);
426
+ }
427
+ .btn-danger:hover { background: rgba(248, 81, 73, 0.15); }
428
+ .btn-muted {
429
+ background: transparent;
430
+ color: var(--text-dim);
431
+ border-color: var(--border);
432
+ }
433
+ .btn-muted:hover { background: var(--bg-hover); color: var(--text); }
434
+ .btn:disabled { opacity: 0.5; cursor: default; }
435
+ .dirty-indicator {
436
+ font-size: 11px;
437
+ color: var(--yellow);
438
+ }
439
+ .save-ok {
440
+ font-size: 11px;
441
+ color: var(--green);
442
+ }
443
+
444
+ /* Three-panel layout */
445
+ .panel-grid {
446
+ display: grid;
447
+ grid-template-columns: 40fr 60fr;
448
+ gap: 16px;
449
+ min-height: 0;
450
+ }
451
+ .panel-col-left {
452
+ display: flex;
453
+ flex-direction: column;
454
+ gap: 16px;
455
+ min-height: 0;
456
+ }
457
+ .panel {
458
+ background: var(--bg-surface);
459
+ border: 1px solid var(--border);
460
+ border-radius: var(--radius);
461
+ display: flex;
462
+ flex-direction: column;
463
+ }
464
+ .panel-header {
465
+ padding: 10px 16px;
466
+ font-size: 11px;
467
+ font-weight: 600;
468
+ text-transform: uppercase;
469
+ letter-spacing: 0.5px;
470
+ color: var(--text-dim);
471
+ border-bottom: 1px solid var(--border);
472
+ flex-shrink: 0;
473
+ }
474
+ .panel-body {
475
+ padding: 16px;
476
+ overflow-y: auto;
477
+ flex: 1;
478
+ min-height: 0;
479
+ }
480
+ .panel-interactive {
481
+ flex-shrink: 0;
482
+ }
483
+ .panel-interactive .panel-body {
484
+ display: flex;
485
+ align-items: center;
486
+ gap: 8px;
487
+ padding: 12px 16px;
488
+ color: var(--text-muted);
489
+ font-size: 12px;
490
+ }
491
+ .panel-interactive .bell-icon {
492
+ font-size: 14px;
493
+ opacity: 0.5;
494
+ }
495
+ .panel-progress {
496
+ flex: 1;
497
+ min-height: 0;
498
+ }
499
+ .panel-edit {
500
+ min-height: 0;
501
+ max-height: calc(100vh - 200px);
502
+ }
503
+ .panel-edit .panel-body {
504
+ display: flex;
505
+ flex-direction: column;
506
+ }
507
+ .panel-edit .editor {
508
+ flex: 1;
509
+ min-height: 60vh;
510
+ }
511
+
512
+ /* Edit tabs */
513
+ .edit-tabs {
514
+ display: flex;
515
+ border-bottom: 1px solid var(--border);
516
+ flex-shrink: 0;
517
+ }
518
+ .edit-tab {
519
+ padding: 10px 16px;
520
+ font-family: var(--sans);
521
+ font-size: 12px;
522
+ font-weight: 500;
523
+ color: var(--text-dim);
524
+ background: none;
525
+ border: none;
526
+ border-bottom: 2px solid transparent;
527
+ cursor: pointer;
528
+ transition: color 0.1s, border-color 0.1s;
529
+ }
530
+ .edit-tab:hover { color: var(--text); }
531
+ .edit-tab.active {
532
+ color: var(--text);
533
+ border-bottom-color: var(--accent);
534
+ }
535
+
536
+ /* Model selector */
537
+ .model-selector-wrap {
538
+ display: flex;
539
+ align-items: center;
540
+ gap: 8px;
541
+ margin-left: auto;
542
+ padding: 4px 12px;
543
+ }
544
+ .model-selector-wrap label {
545
+ font-size: 11px;
546
+ color: var(--text-dim);
547
+ white-space: nowrap;
548
+ }
549
+ .model-selector {
550
+ font-family: var(--mono);
551
+ font-size: 11px;
552
+ color: var(--text);
553
+ background: var(--bg);
554
+ border: 1px solid var(--border);
555
+ border-radius: var(--radius);
556
+ padding: 4px 8px;
557
+ cursor: pointer;
558
+ outline: none;
559
+ }
560
+ .model-selector:hover { border-color: var(--text-dim); }
561
+ .model-selector:focus { border-color: var(--accent); }
562
+ .model-save-ok {
563
+ font-size: 11px;
564
+ color: var(--green);
565
+ opacity: 0;
566
+ transition: opacity 0.2s;
567
+ }
568
+ .model-save-ok.visible { opacity: 1; }
569
+
570
+ /* Prompt mode toggle */
571
+ .prompt-mode-toggle {
572
+ display: flex;
573
+ gap: 0;
574
+ margin-bottom: 12px;
575
+ border: 1px solid var(--border);
576
+ border-radius: var(--radius);
577
+ overflow: hidden;
578
+ width: fit-content;
579
+ }
580
+ .prompt-mode-btn {
581
+ padding: 6px 16px;
582
+ font-family: var(--sans);
583
+ font-size: 12px;
584
+ font-weight: 500;
585
+ color: var(--text-dim);
586
+ background: var(--bg);
587
+ border: none;
588
+ cursor: pointer;
589
+ transition: all 0.15s;
590
+ }
591
+ .prompt-mode-btn:not(:last-child) {
592
+ border-right: 1px solid var(--border);
593
+ }
594
+ .prompt-mode-btn:hover { color: var(--text); background: var(--bg-hover); }
595
+ .prompt-mode-btn.active {
596
+ color: var(--text);
597
+ background: var(--bg-active);
598
+ }
599
+
600
+ /* Markdown preview */
601
+ .prompt-preview {
602
+ flex: 1;
603
+ min-height: 60vh;
604
+ background: var(--bg-surface);
605
+ border: 1px solid var(--border);
606
+ border-radius: var(--radius);
607
+ color: var(--text);
608
+ font-family: var(--sans);
609
+ font-size: 14px;
610
+ line-height: 1.7;
611
+ padding: 24px 28px;
612
+ overflow: auto;
613
+ }
614
+ .prompt-preview h1 { font-size: 22px; font-weight: 600; margin: 24px 0 12px; color: var(--text); border-bottom: 1px solid var(--border); padding-bottom: 8px; }
615
+ .prompt-preview h1:first-child { margin-top: 0; }
616
+ .prompt-preview h2 { font-size: 18px; font-weight: 600; margin: 20px 0 10px; color: var(--text); }
617
+ .prompt-preview h3 { font-size: 15px; font-weight: 600; margin: 16px 0 8px; color: var(--text); }
618
+ .prompt-preview h4 { font-size: 13px; font-weight: 600; margin: 14px 0 6px; color: var(--text-dim); text-transform: uppercase; letter-spacing: 0.5px; }
619
+ .prompt-preview p { margin: 0 0 12px; }
620
+ .prompt-preview ul, .prompt-preview ol { margin: 0 0 12px; padding-left: 24px; }
621
+ .prompt-preview li { margin: 4px 0; }
622
+ .prompt-preview li.task-done { color: var(--text-dim); text-decoration: line-through; }
623
+ .prompt-preview code {
624
+ font-family: var(--mono);
625
+ font-size: 12px;
626
+ background: var(--bg);
627
+ border: 1px solid var(--border);
628
+ border-radius: 3px;
629
+ padding: 2px 6px;
630
+ }
631
+ .prompt-preview pre {
632
+ background: var(--bg);
633
+ border: 1px solid var(--border);
634
+ border-radius: var(--radius);
635
+ padding: 14px 16px;
636
+ margin: 0 0 12px;
637
+ overflow-x: auto;
638
+ }
639
+ .prompt-preview pre code {
640
+ background: none;
641
+ border: none;
642
+ padding: 0;
643
+ font-size: 13px;
644
+ line-height: 1.5;
645
+ }
646
+ .prompt-preview blockquote {
647
+ border-left: 3px solid var(--accent);
648
+ padding: 4px 16px;
649
+ margin: 0 0 12px;
650
+ color: var(--text-dim);
651
+ background: var(--bg);
652
+ border-radius: 0 var(--radius) var(--radius) 0;
653
+ }
654
+ .prompt-preview hr {
655
+ border: none;
656
+ border-top: 1px solid var(--border);
657
+ margin: 16px 0;
658
+ }
659
+ .prompt-preview strong { font-weight: 600; color: var(--text); }
660
+ .prompt-preview em { font-style: italic; }
661
+ .prompt-preview table {
662
+ width: 100%;
663
+ border-collapse: collapse;
664
+ margin: 0 0 12px;
665
+ font-size: 13px;
666
+ }
667
+ .prompt-preview th, .prompt-preview td {
668
+ border: 1px solid var(--border);
669
+ padding: 8px 12px;
670
+ text-align: left;
671
+ }
672
+ .prompt-preview th {
673
+ background: var(--bg);
674
+ font-weight: 600;
675
+ font-size: 12px;
676
+ text-transform: uppercase;
677
+ letter-spacing: 0.3px;
678
+ color: var(--text-dim);
679
+ }
680
+ .prompt-preview a { color: var(--accent); text-decoration: none; }
681
+ .prompt-preview a:hover { text-decoration: underline; }
682
+
683
+ /* Read-only code viewer */
684
+ .code-viewer {
685
+ width: 100%;
686
+ flex: 1;
687
+ min-height: 200px;
688
+ background: var(--bg);
689
+ border: 1px solid var(--border);
690
+ border-radius: var(--radius);
691
+ color: var(--text);
692
+ font-family: var(--mono);
693
+ font-size: 13px;
694
+ line-height: 1.6;
695
+ padding: 16px;
696
+ overflow: auto;
697
+ white-space: pre-wrap;
698
+ word-wrap: break-word;
699
+ margin: 0;
700
+ }
701
+
702
+ /* Tracker viewer */
703
+ .tracker-viewer {
704
+ background: var(--bg-surface);
705
+ border: 1px solid var(--border);
706
+ border-radius: var(--radius);
707
+ padding: 16px;
708
+ font-family: var(--mono);
709
+ font-size: 13px;
710
+ line-height: 1.7;
711
+ max-height: 400px;
712
+ overflow-y: auto;
713
+ white-space: pre-wrap;
714
+ word-wrap: break-word;
715
+ }
716
+ .panel-progress .tracker-viewer {
717
+ border: none;
718
+ border-radius: 0;
719
+ max-height: none;
720
+ padding: 0;
721
+ margin-top: 16px;
722
+ }
723
+ .tracker-viewer h1, .tracker-viewer h2, .tracker-viewer h3 {
724
+ font-family: var(--sans);
725
+ margin: 12px 0 6px;
726
+ }
727
+ .tracker-viewer h1 { font-size: 16px; }
728
+ .tracker-viewer h2 { font-size: 14px; }
729
+ .tracker-viewer h3 { font-size: 13px; }
730
+ .tracker-viewer .cb-done { color: var(--green); }
731
+ .tracker-viewer .cb-todo { color: var(--text-muted); }
732
+ .tracker-viewer table {
733
+ border-collapse: collapse;
734
+ margin: 8px 0;
735
+ width: 100%;
736
+ }
737
+ .tracker-viewer th, .tracker-viewer td {
738
+ border: 1px solid var(--border);
739
+ padding: 4px 10px;
740
+ text-align: left;
741
+ font-size: 12px;
742
+ }
743
+ .tracker-viewer th { background: var(--bg-active); color: var(--text-dim); }
744
+
745
+ /* Status bar */
746
+ .statusbar {
747
+ display: flex;
748
+ align-items: center;
749
+ gap: 16px;
750
+ padding: 6px 20px;
751
+ border-top: 1px solid var(--border);
752
+ background: var(--bg-surface);
753
+ font-size: 11px;
754
+ color: var(--text-dim);
755
+ flex-shrink: 0;
756
+ }
757
+ .status-dot {
758
+ display: inline-block;
759
+ width: 7px;
760
+ height: 7px;
761
+ border-radius: 50%;
762
+ margin-right: 4px;
763
+ }
764
+ .status-dot.connected { background: var(--green); }
765
+ .status-dot.disconnected { background: var(--red); }
766
+ .status-dot.connecting { background: var(--yellow); }
767
+
768
+ /* New App button */
769
+ .new-app-btn {
770
+ display: flex;
771
+ align-items: center;
772
+ gap: 6px;
773
+ width: calc(100% - 24px);
774
+ margin: 8px 12px 4px;
775
+ padding: 6px 12px;
776
+ font-family: var(--sans);
777
+ font-size: 12px;
778
+ font-weight: 500;
779
+ color: var(--text-dim);
780
+ background: transparent;
781
+ border: 1px dashed var(--border);
782
+ border-radius: var(--radius);
783
+ cursor: pointer;
784
+ transition: background 0.1s, color 0.1s, border-color 0.1s;
785
+ }
786
+ .new-app-btn:hover {
787
+ background: var(--bg-hover);
788
+ color: var(--text);
789
+ border-color: var(--text-dim);
790
+ }
791
+
792
+ /* Modal overlay */
793
+ .modal-overlay {
794
+ position: fixed;
795
+ inset: 0;
796
+ background: rgba(0, 0, 0, 0.6);
797
+ display: flex;
798
+ align-items: center;
799
+ justify-content: center;
800
+ z-index: 1000;
801
+ }
802
+ .modal {
803
+ background: var(--bg-surface);
804
+ border: 1px solid var(--border);
805
+ border-radius: 8px;
806
+ width: 420px;
807
+ max-width: 90vw;
808
+ box-shadow: 0 16px 48px rgba(0, 0, 0, 0.4);
809
+ }
810
+ .modal-header {
811
+ display: flex;
812
+ align-items: center;
813
+ justify-content: space-between;
814
+ padding: 16px 20px;
815
+ border-bottom: 1px solid var(--border);
816
+ }
817
+ .modal-header h3 {
818
+ font-size: 14px;
819
+ font-weight: 600;
820
+ }
821
+ .modal-close {
822
+ background: none;
823
+ border: none;
824
+ color: var(--text-dim);
825
+ font-size: 18px;
826
+ cursor: pointer;
827
+ padding: 0 4px;
828
+ line-height: 1;
829
+ }
830
+ .modal-close:hover { color: var(--text); }
831
+ .modal-body {
832
+ padding: 20px;
833
+ }
834
+
835
+ /* Form elements */
836
+ .form-group {
837
+ margin-bottom: 16px;
838
+ }
839
+ .form-label {
840
+ display: block;
841
+ font-size: 12px;
842
+ font-weight: 500;
843
+ color: var(--text-dim);
844
+ margin-bottom: 6px;
845
+ }
846
+ .form-select, .form-input {
847
+ width: 100%;
848
+ padding: 8px 12px;
849
+ font-family: var(--sans);
850
+ font-size: 13px;
851
+ color: var(--text);
852
+ background: var(--bg);
853
+ border: 1px solid var(--border);
854
+ border-radius: var(--radius);
855
+ outline: none;
856
+ }
857
+ .form-select:focus, .form-input:focus {
858
+ border-color: var(--accent);
859
+ }
860
+ .form-select option {
861
+ background: var(--bg);
862
+ color: var(--text);
863
+ }
864
+ .form-error {
865
+ font-size: 12px;
866
+ color: var(--red);
867
+ margin-top: 12px;
868
+ }
869
+ .form-warning {
870
+ font-size: 12px;
871
+ color: var(--yellow);
872
+ margin-top: 12px;
873
+ }
874
+
875
+ /* Next-steps view */
876
+ .next-steps-success {
877
+ display: flex;
878
+ align-items: center;
879
+ gap: 8px;
880
+ font-size: 13px;
881
+ color: var(--green);
882
+ margin-bottom: 16px;
883
+ }
884
+ .next-steps-label {
885
+ font-size: 12px;
886
+ color: var(--text-dim);
887
+ margin-bottom: 8px;
888
+ }
889
+ .cmd-item {
890
+ display: flex;
891
+ align-items: center;
892
+ gap: 8px;
893
+ margin-bottom: 8px;
894
+ background: var(--bg);
895
+ border: 1px solid var(--border);
896
+ border-radius: var(--radius);
897
+ padding: 8px 12px;
898
+ font-family: var(--mono);
899
+ font-size: 12px;
900
+ color: var(--text);
901
+ }
902
+ .cmd-text {
903
+ flex: 1;
904
+ overflow-x: auto;
905
+ white-space: nowrap;
906
+ }
907
+ .cmd-copy {
908
+ background: none;
909
+ border: 1px solid var(--border);
910
+ border-radius: 4px;
911
+ color: var(--text-dim);
912
+ font-family: var(--sans);
913
+ font-size: 11px;
914
+ padding: 2px 8px;
915
+ cursor: pointer;
916
+ flex-shrink: 0;
917
+ transition: background 0.1s, color 0.1s;
918
+ }
919
+ .cmd-copy:hover { background: var(--bg-hover); color: var(--text); }
920
+
921
+ .modal-footer {
922
+ padding: 12px 20px;
923
+ border-top: 1px solid var(--border);
924
+ display: flex;
925
+ justify-content: flex-end;
926
+ gap: 8px;
927
+ }
928
+
929
+ /* Notification list in interactive panel */
930
+ .panel-interactive.has-notifs .panel-body {
931
+ display: block;
932
+ padding: 8px;
933
+ max-height: 240px;
934
+ overflow-y: auto;
935
+ color: var(--text);
936
+ }
937
+ .notif-card {
938
+ display: flex;
939
+ align-items: flex-start;
940
+ gap: 8px;
941
+ padding: 8px 10px;
942
+ background: var(--bg);
943
+ border: 1px solid var(--border);
944
+ border-radius: var(--radius);
945
+ margin-bottom: 6px;
946
+ font-size: 12px;
947
+ }
948
+ .notif-card:last-child { margin-bottom: 0; }
949
+ .notif-time {
950
+ color: var(--text-dim);
951
+ font-family: var(--mono);
952
+ font-size: 11px;
953
+ flex-shrink: 0;
954
+ white-space: nowrap;
955
+ }
956
+ .notif-msg {
957
+ flex: 1;
958
+ color: var(--text);
959
+ word-break: break-word;
960
+ }
961
+ .notif-dismiss {
962
+ background: none;
963
+ border: none;
964
+ color: var(--text-muted);
965
+ font-size: 16px;
966
+ cursor: pointer;
967
+ padding: 0 2px;
968
+ line-height: 1;
969
+ flex-shrink: 0;
970
+ }
971
+ .notif-dismiss:hover { color: var(--red); }
972
+
973
+ /* Decision section in interactive panel */
974
+ .interactive-section-header {
975
+ font-size: 10px;
976
+ font-weight: 600;
977
+ text-transform: uppercase;
978
+ letter-spacing: 0.5px;
979
+ color: var(--text-dim);
980
+ padding: 8px 10px 4px;
981
+ }
982
+ .decision-group {
983
+ margin-bottom: 4px;
984
+ }
985
+ .decision-group-header {
986
+ display: flex;
987
+ align-items: center;
988
+ gap: 6px;
989
+ padding: 5px 10px;
990
+ font-size: 11px;
991
+ font-weight: 600;
992
+ color: var(--text-dim);
993
+ cursor: pointer;
994
+ border-radius: var(--radius);
995
+ user-select: none;
996
+ }
997
+ .decision-group-header:hover {
998
+ background: var(--bg-hover);
999
+ color: var(--text);
1000
+ }
1001
+ .decision-group-header .group-chevron {
1002
+ font-size: 9px;
1003
+ transition: transform 0.15s;
1004
+ flex-shrink: 0;
1005
+ }
1006
+ .decision-group-header .group-chevron.expanded {
1007
+ transform: rotate(90deg);
1008
+ }
1009
+ .decision-group-header .group-label {
1010
+ flex: 1;
1011
+ overflow: hidden;
1012
+ text-overflow: ellipsis;
1013
+ white-space: nowrap;
1014
+ }
1015
+ .decision-group-header .group-count {
1016
+ font-size: 10px;
1017
+ font-family: var(--mono);
1018
+ padding: 1px 5px;
1019
+ border-radius: 8px;
1020
+ background: var(--purple);
1021
+ color: #000;
1022
+ font-weight: 600;
1023
+ flex-shrink: 0;
1024
+ }
1025
+ .decision-group-body {
1026
+ padding-left: 12px;
1027
+ }
1028
+ .decision-group-body.collapsed {
1029
+ display: none;
1030
+ }
1031
+ .decision-card {
1032
+ display: flex;
1033
+ flex-direction: column;
1034
+ gap: 3px;
1035
+ padding: 7px 10px;
1036
+ background: var(--bg);
1037
+ border: 1px solid var(--border);
1038
+ border-left: 3px solid var(--purple);
1039
+ border-radius: var(--radius);
1040
+ margin-bottom: 4px;
1041
+ font-size: 12px;
1042
+ }
1043
+ .decision-card:last-child { margin-bottom: 0; }
1044
+ .decision-card-top {
1045
+ display: flex;
1046
+ align-items: flex-start;
1047
+ gap: 6px;
1048
+ }
1049
+ .decision-card-top .decision-time {
1050
+ color: var(--text-dim);
1051
+ font-family: var(--mono);
1052
+ font-size: 10px;
1053
+ flex-shrink: 0;
1054
+ white-space: nowrap;
1055
+ }
1056
+ .decision-card-top .decision-agent {
1057
+ color: var(--purple);
1058
+ font-family: var(--mono);
1059
+ font-size: 10px;
1060
+ flex-shrink: 0;
1061
+ }
1062
+ .decision-card-top .decision-dismiss {
1063
+ background: none;
1064
+ border: none;
1065
+ color: var(--text-muted);
1066
+ font-size: 14px;
1067
+ cursor: pointer;
1068
+ padding: 0 2px;
1069
+ line-height: 1;
1070
+ flex-shrink: 0;
1071
+ margin-left: auto;
1072
+ }
1073
+ .decision-card-top .decision-dismiss:hover { color: var(--red); }
1074
+ .decision-summary {
1075
+ font-weight: 600;
1076
+ color: var(--text);
1077
+ font-size: 12px;
1078
+ }
1079
+ .decision-reasoning {
1080
+ color: var(--text-dim);
1081
+ font-size: 11px;
1082
+ font-style: italic;
1083
+ }
1084
+
1085
+ /* Sidebar notification badge */
1086
+ .notif-badge {
1087
+ font-size: 10px;
1088
+ font-family: var(--mono);
1089
+ padding: 1px 6px;
1090
+ border-radius: 10px;
1091
+ margin-left: 6px;
1092
+ background: var(--accent);
1093
+ color: #000;
1094
+ font-weight: 600;
1095
+ }
1096
+ .decision-badge {
1097
+ font-size: 10px;
1098
+ font-family: var(--mono);
1099
+ padding: 1px 6px;
1100
+ border-radius: 10px;
1101
+ margin-left: 4px;
1102
+ background: var(--purple);
1103
+ color: #000;
1104
+ font-weight: 600;
1105
+ }
1106
+
1107
+ /* App-level tabs (Loops / Archives) */
1108
+ .app-tabs {
1109
+ display: flex;
1110
+ gap: 0;
1111
+ border-bottom: 1px solid var(--border);
1112
+ margin-bottom: 24px;
1113
+ }
1114
+ .app-tab {
1115
+ padding: 10px 20px;
1116
+ font-family: var(--sans);
1117
+ font-size: 13px;
1118
+ font-weight: 500;
1119
+ color: var(--text-dim);
1120
+ background: none;
1121
+ border: none;
1122
+ border-bottom: 2px solid transparent;
1123
+ cursor: pointer;
1124
+ transition: color 0.1s, border-color 0.1s;
1125
+ }
1126
+ .app-tab:hover { color: var(--text); }
1127
+ .app-tab.active {
1128
+ color: var(--text);
1129
+ border-bottom-color: var(--accent);
1130
+ }
1131
+
1132
+ /* Archive timeline */
1133
+ .archive-timeline {
1134
+ display: flex;
1135
+ flex-direction: column;
1136
+ gap: 12px;
1137
+ }
1138
+ .archive-empty {
1139
+ text-align: center;
1140
+ padding: 48px 24px;
1141
+ color: var(--text-muted);
1142
+ font-size: 14px;
1143
+ }
1144
+ .archive-empty-icon {
1145
+ font-size: 32px;
1146
+ margin-bottom: 12px;
1147
+ opacity: 0.4;
1148
+ }
1149
+ .archive-card {
1150
+ background: var(--bg-surface);
1151
+ border: 1px solid var(--border);
1152
+ border-radius: var(--radius);
1153
+ overflow: hidden;
1154
+ transition: border-color 0.15s;
1155
+ }
1156
+ .archive-card:hover { border-color: var(--text-dim); }
1157
+ .archive-card.expanded { border-color: var(--accent); }
1158
+ .archive-card-header {
1159
+ display: flex;
1160
+ align-items: center;
1161
+ justify-content: space-between;
1162
+ padding: 14px 16px;
1163
+ cursor: pointer;
1164
+ transition: background 0.1s;
1165
+ }
1166
+ .archive-card-header:hover { background: var(--bg-hover); }
1167
+ .archive-card-date {
1168
+ font-family: var(--mono);
1169
+ font-size: 13px;
1170
+ font-weight: 600;
1171
+ color: var(--text);
1172
+ }
1173
+ .archive-card-stats {
1174
+ display: flex;
1175
+ gap: 12px;
1176
+ font-size: 12px;
1177
+ color: var(--text-dim);
1178
+ }
1179
+ .archive-card-stat {
1180
+ display: flex;
1181
+ align-items: center;
1182
+ gap: 4px;
1183
+ }
1184
+ .archive-card-stat .stat-val {
1185
+ font-family: var(--mono);
1186
+ color: var(--text);
1187
+ }
1188
+ .archive-card-chevron {
1189
+ font-size: 12px;
1190
+ color: var(--text-muted);
1191
+ transition: transform 0.2s;
1192
+ margin-left: 12px;
1193
+ }
1194
+ .archive-card.expanded .archive-card-chevron {
1195
+ transform: rotate(90deg);
1196
+ }
1197
+
1198
+ /* Archive file browser */
1199
+ .archive-files {
1200
+ border-top: 1px solid var(--border);
1201
+ max-height: 400px;
1202
+ overflow-y: auto;
1203
+ }
1204
+ .archive-file-item {
1205
+ display: flex;
1206
+ align-items: center;
1207
+ gap: 8px;
1208
+ padding: 8px 16px;
1209
+ font-family: var(--mono);
1210
+ font-size: 12px;
1211
+ color: var(--text-dim);
1212
+ cursor: pointer;
1213
+ transition: background 0.1s;
1214
+ border-bottom: 1px solid var(--border);
1215
+ }
1216
+ .archive-file-item:last-child { border-bottom: none; }
1217
+ .archive-file-item:hover { background: var(--bg-hover); color: var(--text); }
1218
+ .archive-file-item.active { background: var(--bg-active); color: var(--accent); }
1219
+ .archive-file-icon { opacity: 0.5; font-size: 11px; }
1220
+
1221
+ /* Archive file viewer (inline) */
1222
+ .archive-file-viewer {
1223
+ border-top: 1px solid var(--border);
1224
+ display: flex;
1225
+ flex-direction: column;
1226
+ max-height: 500px;
1227
+ }
1228
+ .archive-file-viewer-header {
1229
+ display: flex;
1230
+ align-items: center;
1231
+ justify-content: space-between;
1232
+ padding: 8px 16px;
1233
+ background: var(--bg-active);
1234
+ font-family: var(--mono);
1235
+ font-size: 12px;
1236
+ color: var(--text-dim);
1237
+ flex-shrink: 0;
1238
+ }
1239
+ .archive-file-viewer-close {
1240
+ background: none;
1241
+ border: none;
1242
+ color: var(--text-muted);
1243
+ font-size: 16px;
1244
+ cursor: pointer;
1245
+ padding: 0 4px;
1246
+ line-height: 1;
1247
+ }
1248
+ .archive-file-viewer-close:hover { color: var(--text); }
1249
+ .archive-file-content {
1250
+ flex: 1;
1251
+ overflow: auto;
1252
+ padding: 16px;
1253
+ font-family: var(--mono);
1254
+ font-size: 13px;
1255
+ line-height: 1.6;
1256
+ white-space: pre-wrap;
1257
+ word-wrap: break-word;
1258
+ background: var(--bg);
1259
+ color: var(--text);
1260
+ }
1261
+
1262
+ /* Templates page */
1263
+ .templates-header {
1264
+ display: flex;
1265
+ align-items: center;
1266
+ justify-content: space-between;
1267
+ margin-bottom: 24px;
1268
+ }
1269
+ .templates-header h2 { font-size: 20px; font-weight: 600; }
1270
+ .template-grid {
1271
+ display: grid;
1272
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
1273
+ gap: 12px;
1274
+ }
1275
+ .template-card {
1276
+ background: var(--bg-surface);
1277
+ border: 1px solid var(--border);
1278
+ border-radius: var(--radius);
1279
+ padding: 16px;
1280
+ transition: border-color 0.15s;
1281
+ }
1282
+ .template-card:hover { border-color: var(--text-dim); }
1283
+ .template-card-header {
1284
+ display: flex;
1285
+ align-items: center;
1286
+ justify-content: space-between;
1287
+ margin-bottom: 8px;
1288
+ }
1289
+ .template-card-name { font-size: 14px; font-weight: 600; }
1290
+ .template-card-type {
1291
+ font-family: var(--mono);
1292
+ font-size: 10px;
1293
+ padding: 2px 8px;
1294
+ border-radius: 10px;
1295
+ }
1296
+ .template-card-type.built-in { background: rgba(88,166,255,0.1); color: var(--blue); }
1297
+ .template-card-type.custom { background: rgba(63,185,80,0.1); color: var(--green); }
1298
+ .template-card-desc { font-size: 12px; color: var(--text-dim); margin-bottom: 8px; }
1299
+ .template-card-meta {
1300
+ display: flex;
1301
+ align-items: center;
1302
+ justify-content: space-between;
1303
+ font-size: 11px;
1304
+ color: var(--text-muted);
1305
+ }
1306
+
1307
+ /* Template detail/preview page */
1308
+ .detail-pipeline {
1309
+ display: flex;
1310
+ align-items: center;
1311
+ gap: 0;
1312
+ overflow-x: auto;
1313
+ padding: 8px 0;
1314
+ }
1315
+ .detail-loops {
1316
+ display: flex;
1317
+ flex-direction: column;
1318
+ gap: 16px;
1319
+ }
1320
+ .detail-loop-card {
1321
+ background: var(--bg-surface);
1322
+ border: 1px solid var(--border);
1323
+ border-radius: var(--radius);
1324
+ padding: 20px;
1325
+ transition: border-color 0.3s;
1326
+ }
1327
+ .detail-loop-card.highlighted {
1328
+ border-color: var(--accent);
1329
+ box-shadow: 0 0 0 1px var(--accent);
1330
+ }
1331
+ .detail-loop-header {
1332
+ display: flex;
1333
+ align-items: center;
1334
+ justify-content: space-between;
1335
+ margin-bottom: 12px;
1336
+ }
1337
+ .detail-loop-header h3 {
1338
+ font-size: 15px;
1339
+ font-weight: 600;
1340
+ }
1341
+ .detail-loop-index {
1342
+ font-family: var(--mono);
1343
+ font-size: 11px;
1344
+ color: var(--text-muted);
1345
+ }
1346
+ .detail-loop-meta {
1347
+ display: grid;
1348
+ grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
1349
+ gap: 8px;
1350
+ margin-bottom: 16px;
1351
+ }
1352
+ .detail-meta-item {
1353
+ display: flex;
1354
+ flex-direction: column;
1355
+ gap: 2px;
1356
+ }
1357
+ .detail-meta-label {
1358
+ font-size: 11px;
1359
+ font-weight: 600;
1360
+ color: var(--text-muted);
1361
+ text-transform: uppercase;
1362
+ letter-spacing: 0.5px;
1363
+ }
1364
+ .detail-meta-value {
1365
+ font-size: 13px;
1366
+ color: var(--text);
1367
+ }
1368
+ .detail-prompt-section {
1369
+ border-top: 1px solid var(--border);
1370
+ padding-top: 12px;
1371
+ }
1372
+ .detail-prompt-header {
1373
+ display: flex;
1374
+ align-items: center;
1375
+ justify-content: space-between;
1376
+ margin-bottom: 8px;
1377
+ }
1378
+ .detail-prompt-actions {
1379
+ display: flex;
1380
+ align-items: center;
1381
+ gap: 8px;
1382
+ }
1383
+ .detail-prompt-editor {
1384
+ width: 100%;
1385
+ min-height: 200px;
1386
+ max-height: 500px;
1387
+ resize: vertical;
1388
+ font-family: var(--mono);
1389
+ font-size: 12px;
1390
+ line-height: 1.5;
1391
+ background: var(--bg);
1392
+ color: var(--text);
1393
+ border: 1px solid var(--border);
1394
+ border-radius: var(--radius);
1395
+ padding: 12px;
1396
+ }
1397
+ .detail-prompt-editor:focus {
1398
+ outline: none;
1399
+ border-color: var(--accent);
1400
+ }
1401
+ .detail-prompt-editor.readonly {
1402
+ color: var(--text-dim);
1403
+ cursor: default;
1404
+ }
1405
+
1406
+ /* Template creation wizard */
1407
+ .wizard-progress {
1408
+ display: flex;
1409
+ align-items: center;
1410
+ gap: 0;
1411
+ margin-bottom: 28px;
1412
+ padding: 0 4px;
1413
+ }
1414
+ .wizard-progress-step {
1415
+ display: flex;
1416
+ align-items: center;
1417
+ gap: 6px;
1418
+ white-space: nowrap;
1419
+ }
1420
+ .wizard-step-dot {
1421
+ width: 24px;
1422
+ height: 24px;
1423
+ border-radius: 50%;
1424
+ display: flex;
1425
+ align-items: center;
1426
+ justify-content: center;
1427
+ font-size: 12px;
1428
+ font-weight: 600;
1429
+ background: var(--bg-surface);
1430
+ border: 1px solid var(--border);
1431
+ color: var(--text-dim);
1432
+ transition: all 0.2s;
1433
+ }
1434
+ .wizard-progress-step.active .wizard-step-dot {
1435
+ background: var(--accent);
1436
+ border-color: var(--accent);
1437
+ color: var(--bg);
1438
+ }
1439
+ .wizard-progress-step.done .wizard-step-dot {
1440
+ background: var(--green);
1441
+ border-color: var(--green);
1442
+ color: var(--bg);
1443
+ }
1444
+ .wizard-step-label {
1445
+ font-size: 12px;
1446
+ color: var(--text-dim);
1447
+ }
1448
+ .wizard-progress-step.active .wizard-step-label {
1449
+ color: var(--text);
1450
+ font-weight: 500;
1451
+ }
1452
+ .wizard-progress-line {
1453
+ flex: 1;
1454
+ height: 1px;
1455
+ background: var(--border);
1456
+ margin: 0 12px;
1457
+ transition: background 0.2s;
1458
+ }
1459
+ .wizard-progress-line.done {
1460
+ background: var(--green);
1461
+ }
1462
+ .wizard-content {
1463
+ max-width: 640px;
1464
+ }
1465
+ .wizard-step-card {
1466
+ background: var(--bg-surface);
1467
+ border: 1px solid var(--border);
1468
+ border-radius: var(--radius);
1469
+ padding: 20px;
1470
+ margin-bottom: 16px;
1471
+ }
1472
+ .wizard-question {
1473
+ font-size: 16px;
1474
+ font-weight: 600;
1475
+ margin-bottom: 8px;
1476
+ }
1477
+ .wizard-description-ref {
1478
+ border-left: 3px solid var(--accent);
1479
+ padding: 8px 12px;
1480
+ margin-bottom: 16px;
1481
+ background: rgba(99, 102, 241, 0.06);
1482
+ border-radius: 0 6px 6px 0;
1483
+ }
1484
+ .wizard-description-ref-label {
1485
+ font-size: 10px;
1486
+ text-transform: uppercase;
1487
+ letter-spacing: 0.5px;
1488
+ color: var(--accent);
1489
+ font-weight: 600;
1490
+ }
1491
+ .wizard-description-ref p {
1492
+ margin: 4px 0 0;
1493
+ font-size: 13px;
1494
+ color: var(--text-secondary);
1495
+ line-height: 1.5;
1496
+ font-style: italic;
1497
+ }
1498
+ .wizard-hint {
1499
+ font-size: 13px;
1500
+ color: var(--text-dim);
1501
+ line-height: 1.5;
1502
+ margin-bottom: 16px;
1503
+ }
1504
+ .wizard-textarea {
1505
+ width: 100%;
1506
+ min-height: 100px;
1507
+ background: var(--bg);
1508
+ border: 1px solid var(--border);
1509
+ border-radius: var(--radius);
1510
+ color: var(--text);
1511
+ font-family: var(--sans);
1512
+ font-size: 14px;
1513
+ padding: 12px;
1514
+ resize: vertical;
1515
+ line-height: 1.6;
1516
+ }
1517
+ .wizard-textarea:focus {
1518
+ outline: none;
1519
+ border-color: var(--accent);
1520
+ }
1521
+ .wizard-loops-list {
1522
+ display: flex;
1523
+ flex-direction: column;
1524
+ gap: 8px;
1525
+ }
1526
+ .wizard-loop-row {
1527
+ display: flex;
1528
+ align-items: flex-start;
1529
+ gap: 8px;
1530
+ }
1531
+ .wizard-loop-number {
1532
+ width: 24px;
1533
+ height: 32px;
1534
+ display: flex;
1535
+ align-items: center;
1536
+ justify-content: center;
1537
+ font-size: 12px;
1538
+ font-weight: 600;
1539
+ color: var(--text-dim);
1540
+ flex-shrink: 0;
1541
+ margin-top: 1px;
1542
+ }
1543
+ .wizard-loop-fields {
1544
+ flex: 1;
1545
+ display: flex;
1546
+ gap: 8px;
1547
+ }
1548
+ .wizard-loop-fields .form-input {
1549
+ flex: 1;
1550
+ }
1551
+ .wizard-loop-name { max-width: 180px; }
1552
+ .wizard-loop-remove {
1553
+ width: 28px;
1554
+ height: 32px;
1555
+ display: flex;
1556
+ align-items: center;
1557
+ justify-content: center;
1558
+ background: none;
1559
+ border: none;
1560
+ color: var(--text-dim);
1561
+ font-size: 16px;
1562
+ cursor: pointer;
1563
+ border-radius: var(--radius);
1564
+ flex-shrink: 0;
1565
+ }
1566
+ .wizard-loop-remove:hover { color: var(--red); background: rgba(248,81,73,0.1); }
1567
+ .wizard-pipeline-preview {
1568
+ display: flex;
1569
+ align-items: center;
1570
+ gap: 0;
1571
+ overflow-x: auto;
1572
+ padding: 8px 0;
1573
+ }
1574
+ .wizard-preview-node {
1575
+ background: var(--bg);
1576
+ border: 1px solid var(--border);
1577
+ border-radius: var(--radius);
1578
+ padding: 10px 16px;
1579
+ display: flex;
1580
+ flex-direction: column;
1581
+ align-items: center;
1582
+ gap: 4px;
1583
+ min-width: 100px;
1584
+ text-align: center;
1585
+ }
1586
+ .wizard-preview-node.multi-agent { border-color: var(--accent); }
1587
+ .wizard-preview-node .minimap-label { font-size: 12px; font-weight: 500; }
1588
+ .wizard-preview-stages { font-size: 10px; color: var(--text-dim); }
1589
+ .wizard-preview-badge {
1590
+ font-size: 9px;
1591
+ padding: 1px 6px;
1592
+ border-radius: 8px;
1593
+ background: rgba(136,98,255,0.15);
1594
+ color: var(--accent);
1595
+ font-weight: 500;
1596
+ }
1597
+ .wizard-preview-connector {
1598
+ display: flex;
1599
+ flex-direction: column;
1600
+ align-items: center;
1601
+ gap: 2px;
1602
+ margin: 0 4px;
1603
+ }
1604
+ .wizard-preview-empty {
1605
+ font-size: 13px;
1606
+ color: var(--text-dim);
1607
+ font-style: italic;
1608
+ padding: 12px 0;
1609
+ }
1610
+ .wizard-cli-command {
1611
+ background: var(--bg);
1612
+ border: 1px solid var(--border);
1613
+ border-radius: var(--radius);
1614
+ padding: 12px;
1615
+ font-family: var(--mono);
1616
+ font-size: 12px;
1617
+ color: var(--text);
1618
+ white-space: pre-wrap;
1619
+ word-break: break-all;
1620
+ margin-bottom: 12px;
1621
+ max-height: 200px;
1622
+ overflow-y: auto;
1623
+ }
1624
+ .wizard-actions-row {
1625
+ display: flex;
1626
+ gap: 8px;
1627
+ }
1628
+ .wizard-option {
1629
+ margin-bottom: 16px;
1630
+ }
1631
+ .wizard-option:last-child { margin-bottom: 0; }
1632
+ .wizard-option-header {
1633
+ display: flex;
1634
+ align-items: center;
1635
+ justify-content: space-between;
1636
+ margin-bottom: 4px;
1637
+ }
1638
+ .wizard-option-label {
1639
+ font-size: 13px;
1640
+ font-weight: 500;
1641
+ }
1642
+ .wizard-option-desc {
1643
+ font-size: 12px;
1644
+ color: var(--text-dim);
1645
+ margin-bottom: 8px;
1646
+ }
1647
+ .wizard-sub-options {
1648
+ display: flex;
1649
+ gap: 12px;
1650
+ margin-top: 8px;
1651
+ padding-left: 4px;
1652
+ }
1653
+ .wizard-sub-options .form-group { margin-bottom: 0; }
1654
+ .wizard-nav {
1655
+ display: flex;
1656
+ align-items: center;
1657
+ justify-content: space-between;
1658
+ margin-top: 8px;
1659
+ padding-top: 16px;
1660
+ border-top: 1px solid var(--border);
1661
+ max-width: 640px;
1662
+ }
1663
+
1664
+ /* Template builder */
1665
+ .template-builder { max-width: none; display: grid; grid-template-columns: 280px 1fr; grid-template-rows: auto auto auto; gap: 0 20px; }
1666
+ .builder-col-overview { grid-column: 1; grid-row: 1 / 4; }
1667
+ .builder-col-config { grid-column: 2; grid-row: 1; }
1668
+ .builder-col-prompt { grid-column: 2; grid-row: 2; }
1669
+ .builder-col-actions { grid-column: 1 / -1; grid-row: 3; }
1670
+ .builder-section { margin-bottom: 24px; }
1671
+ .builder-section-title {
1672
+ font-size: 13px;
1673
+ font-weight: 600;
1674
+ margin-bottom: 12px;
1675
+ color: var(--text);
1676
+ }
1677
+ .loop-card {
1678
+ background: var(--bg-surface);
1679
+ border: 1px solid var(--border);
1680
+ border-radius: var(--radius);
1681
+ padding: 16px;
1682
+ }
1683
+ .loop-card-header {
1684
+ display: flex;
1685
+ align-items: center;
1686
+ gap: 8px;
1687
+ margin-bottom: 12px;
1688
+ }
1689
+ .loop-card-title { font-size: 13px; font-weight: 600; flex: 1; }
1690
+ .loop-card-remove {
1691
+ background: none;
1692
+ border: none;
1693
+ color: var(--text-muted);
1694
+ font-size: 16px;
1695
+ cursor: pointer;
1696
+ padding: 0 4px;
1697
+ line-height: 1;
1698
+ }
1699
+ .loop-card-remove:hover { color: var(--red); }
1700
+ .loop-card-grid {
1701
+ display: grid;
1702
+ grid-template-columns: 1fr 1fr;
1703
+ gap: 12px;
1704
+ }
1705
+ .loop-card-grid .form-group { margin-bottom: 0; }
1706
+ .loop-card-full { grid-column: 1 / -1; }
1707
+ .stage-tags {
1708
+ display: flex;
1709
+ flex-wrap: wrap;
1710
+ gap: 6px;
1711
+ padding: 6px 8px;
1712
+ background: var(--bg);
1713
+ border: 1px solid var(--border);
1714
+ border-radius: var(--radius);
1715
+ min-height: 36px;
1716
+ align-items: center;
1717
+ cursor: text;
1718
+ }
1719
+ .stage-tags:focus-within { border-color: var(--accent); }
1720
+ .stage-tag {
1721
+ display: flex;
1722
+ align-items: center;
1723
+ gap: 4px;
1724
+ font-family: var(--mono);
1725
+ font-size: 11px;
1726
+ padding: 2px 8px;
1727
+ background: rgba(88,166,255,0.1);
1728
+ color: var(--accent);
1729
+ border-radius: 4px;
1730
+ }
1731
+ .stage-tag-remove {
1732
+ background: none;
1733
+ border: none;
1734
+ color: var(--text-muted);
1735
+ font-size: 14px;
1736
+ cursor: pointer;
1737
+ padding: 0 2px;
1738
+ line-height: 1;
1739
+ }
1740
+ .stage-tag-remove:hover { color: var(--red); }
1741
+ .stage-tags input {
1742
+ border: none;
1743
+ background: none;
1744
+ color: var(--text);
1745
+ font-family: var(--sans);
1746
+ font-size: 13px;
1747
+ outline: none;
1748
+ min-width: 80px;
1749
+ flex: 1;
1750
+ }
1751
+ .multi-agent-fields {
1752
+ margin-top: 8px;
1753
+ padding: 12px;
1754
+ background: var(--bg);
1755
+ border: 1px solid var(--border);
1756
+ border-radius: var(--radius);
1757
+ }
1758
+ .toggle-wrap { display: flex; align-items: center; gap: 8px; }
1759
+ .toggle-input { accent-color: var(--accent); }
1760
+ .toggle-label { font-size: 12px; color: var(--text-dim); }
1761
+ .yaml-preview-section { margin-top: 24px; }
1762
+ .yaml-preview {
1763
+ background: var(--bg);
1764
+ border: 1px solid var(--border);
1765
+ border-radius: var(--radius);
1766
+ padding: 16px;
1767
+ font-family: var(--mono);
1768
+ font-size: 12px;
1769
+ line-height: 1.6;
1770
+ color: var(--text);
1771
+ white-space: pre-wrap;
1772
+ word-wrap: break-word;
1773
+ max-height: 400px;
1774
+ overflow-y: auto;
1775
+ }
1776
+ .builder-actions { display: flex; gap: 8px; margin-top: 20px; }
1777
+ .optional-toggle {
1778
+ font-size: 12px;
1779
+ color: var(--accent);
1780
+ background: none;
1781
+ border: none;
1782
+ cursor: pointer;
1783
+ padding: 0;
1784
+ margin-top: 8px;
1785
+ }
1786
+ .optional-toggle:hover { text-decoration: underline; }
1787
+ /* Stage cards in builder */
1788
+ .stages-section {
1789
+ margin-top: 16px;
1790
+ border-top: 1px solid var(--border);
1791
+ padding-top: 16px;
1792
+ }
1793
+ .stage-card-header {
1794
+ display: flex;
1795
+ align-items: center;
1796
+ gap: 8px;
1797
+ margin-bottom: 8px;
1798
+ }
1799
+ .stage-card-number {
1800
+ display: flex;
1801
+ align-items: center;
1802
+ justify-content: center;
1803
+ width: 22px;
1804
+ height: 22px;
1805
+ border-radius: 50%;
1806
+ background: rgba(88,166,255,0.1);
1807
+ color: var(--accent);
1808
+ font-size: 11px;
1809
+ font-weight: 600;
1810
+ flex-shrink: 0;
1811
+ }
1812
+ .stage-card-header .stage-name-input {
1813
+ flex: 1;
1814
+ font-weight: 500;
1815
+ }
1816
+ .stage-card-remove {
1817
+ background: none;
1818
+ border: none;
1819
+ color: var(--text-muted);
1820
+ font-size: 16px;
1821
+ cursor: pointer;
1822
+ padding: 0 4px;
1823
+ line-height: 1;
1824
+ }
1825
+ .stage-card-remove:hover { color: var(--red); }
1826
+ .stage-desc-input {
1827
+ min-height: 48px;
1828
+ resize: vertical;
1829
+ font-size: 12px !important;
1830
+ line-height: 1.5;
1831
+ }
1832
+ .add-stage-btn {
1833
+ font-size: 12px;
1834
+ padding: 8px 0;
1835
+ width: 100%;
1836
+ border-style: dashed !important;
1837
+ margin-top: 4px;
1838
+ }
1839
+ /* Form hints and field notes */
1840
+ .form-hint {
1841
+ font-size: 11px;
1842
+ color: var(--text-muted);
1843
+ font-weight: 400;
1844
+ margin-left: 4px;
1845
+ }
1846
+ .form-field-note {
1847
+ font-size: 11px;
1848
+ color: var(--text-muted);
1849
+ margin-top: 4px;
1850
+ line-height: 1.4;
1851
+ }
1852
+ .form-field-note code {
1853
+ font-size: 10px;
1854
+ background: var(--bg-active);
1855
+ padding: 1px 4px;
1856
+ border-radius: 3px;
1857
+ font-family: var(--mono);
1858
+ }
1859
+ /* YAML preview toggle */
1860
+ .yaml-toggle {
1861
+ display: flex;
1862
+ align-items: center;
1863
+ gap: 6px;
1864
+ font-size: 13px;
1865
+ font-weight: 600;
1866
+ color: var(--text-dim);
1867
+ background: none;
1868
+ border: none;
1869
+ cursor: pointer;
1870
+ padding: 0;
1871
+ margin-bottom: 8px;
1872
+ }
1873
+ .yaml-toggle:hover { color: var(--text); }
1874
+ .yaml-toggle-icon {
1875
+ display: inline-block;
1876
+ transition: transform 0.15s;
1877
+ font-size: 16px;
1878
+ }
1879
+ /* Prompt generate card */
1880
+ .prompt-generate-card {
1881
+ text-align: center;
1882
+ padding: 24px 16px;
1883
+ background: var(--bg-surface);
1884
+ border: 1px solid var(--border);
1885
+ border-radius: var(--radius);
1886
+ }
1887
+ .prompt-generate-info {
1888
+ color: var(--text-dim);
1889
+ font-size: 13px;
1890
+ margin-bottom: 16px;
1891
+ line-height: 1.5;
1892
+ }
1893
+ .optional-fields {
1894
+ margin-top: 12px;
1895
+ padding-top: 12px;
1896
+ border-top: 1px solid var(--border);
1897
+ }
1898
+ .prompt-section {
1899
+ margin-top: 12px;
1900
+ padding-top: 12px;
1901
+ border-top: 1px solid var(--border);
1902
+ }
1903
+ .prompt-textarea {
1904
+ width: 100%;
1905
+ min-height: 160px;
1906
+ max-height: 400px;
1907
+ margin-top: 8px;
1908
+ padding: 12px;
1909
+ background: var(--bg);
1910
+ border: 1px solid var(--border);
1911
+ border-radius: var(--radius);
1912
+ color: var(--text);
1913
+ font-family: var(--mono);
1914
+ font-size: 12px;
1915
+ line-height: 1.6;
1916
+ resize: vertical;
1917
+ box-sizing: border-box;
1918
+ }
1919
+ .prompt-textarea:focus { border-color: var(--accent); outline: none; }
1920
+ .prompt-textarea::placeholder { color: var(--text-muted); }
1921
+
1922
+ /* Prompt Config Form */
1923
+ .prompt-config-form { margin-top: 8px; }
1924
+ .prompt-config-section {
1925
+ background: var(--bg-surface);
1926
+ border: 1px solid var(--border);
1927
+ border-radius: var(--radius);
1928
+ padding: 16px;
1929
+ margin-bottom: 12px;
1930
+ }
1931
+ .prompt-config-section-title {
1932
+ font-size: 12px;
1933
+ font-weight: 600;
1934
+ color: var(--text);
1935
+ margin-bottom: 12px;
1936
+ }
1937
+ .prompt-config-grid {
1938
+ display: grid;
1939
+ grid-template-columns: 1fr 1fr;
1940
+ gap: 12px;
1941
+ }
1942
+ .prompt-config-grid .form-group { margin-bottom: 0; }
1943
+ .prompt-config-readonly {
1944
+ font-size: 12px;
1945
+ color: var(--text-muted);
1946
+ padding: 8px 12px;
1947
+ background: var(--bg);
1948
+ border: 1px solid var(--border);
1949
+ border-radius: var(--radius);
1950
+ }
1951
+ .stage-config-card {
1952
+ background: var(--bg);
1953
+ border: 1px solid var(--border);
1954
+ border-radius: var(--radius);
1955
+ padding: 14px;
1956
+ margin-bottom: 10px;
1957
+ }
1958
+ .stage-config-header {
1959
+ display: flex;
1960
+ align-items: center;
1961
+ gap: 8px;
1962
+ margin-bottom: 10px;
1963
+ }
1964
+ .stage-config-name {
1965
+ font-family: var(--mono);
1966
+ font-size: 12px;
1967
+ color: var(--accent);
1968
+ padding: 2px 8px;
1969
+ background: rgba(88,166,255,0.1);
1970
+ border-radius: 4px;
1971
+ }
1972
+ .stage-config-index {
1973
+ font-size: 11px;
1974
+ color: var(--text-muted);
1975
+ }
1976
+ .capability-grid {
1977
+ display: grid;
1978
+ grid-template-columns: 1fr 1fr;
1979
+ gap: 6px;
1980
+ margin-top: 8px;
1981
+ }
1982
+ .capability-item {
1983
+ display: flex;
1984
+ align-items: flex-start;
1985
+ gap: 8px;
1986
+ padding: 6px 8px;
1987
+ border-radius: 4px;
1988
+ cursor: pointer;
1989
+ transition: background 0.1s;
1990
+ }
1991
+ .capability-item:hover { background: var(--bg-surface); }
1992
+ .capability-item input { margin-top: 2px; accent-color: var(--accent); flex-shrink: 0; }
1993
+ .capability-item-text { display: flex; flex-direction: column; gap: 1px; }
1994
+ .capability-item-label { font-size: 12px; color: var(--text); }
1995
+ .capability-item-desc { font-size: 10px; color: var(--text-muted); }
1996
+ .generate-prompt-btn {
1997
+ width: 100%;
1998
+ padding: 10px;
1999
+ font-size: 13px;
2000
+ font-weight: 600;
2001
+ margin-top: 4px;
2002
+ }
2003
+
2004
+ /* Prompt toolbar (Regenerate button row) */
2005
+ .prompt-toolbar {
2006
+ display: flex;
2007
+ gap: 8px;
2008
+ margin-top: 8px;
2009
+ }
2010
+
2011
+ /* Builder pipeline minimap */
2012
+ .builder-minimap {
2013
+ display: flex;
2014
+ align-items: center;
2015
+ gap: 0;
2016
+ padding: 12px 0;
2017
+ overflow-x: auto;
2018
+ position: sticky;
2019
+ top: 0;
2020
+ z-index: 10;
2021
+ background: var(--bg);
2022
+ margin-bottom: 4px;
2023
+ }
2024
+ .builder-minimap-node {
2025
+ display: flex;
2026
+ flex-direction: column;
2027
+ align-items: center;
2028
+ gap: 4px;
2029
+ cursor: pointer;
2030
+ padding: 8px 14px;
2031
+ border-radius: var(--radius);
2032
+ border: 1px solid var(--border);
2033
+ background: var(--bg-surface);
2034
+ transition: border-color 0.15s, background 0.15s, box-shadow 0.15s;
2035
+ min-width: 80px;
2036
+ flex-shrink: 0;
2037
+ }
2038
+ .builder-minimap-node:hover { border-color: var(--text-dim); }
2039
+ .builder-minimap-node.active {
2040
+ border-color: var(--accent);
2041
+ background: rgba(88, 166, 255, 0.05);
2042
+ box-shadow: 0 0 0 1px var(--accent);
2043
+ }
2044
+ .builder-minimap-node .minimap-label {
2045
+ font-size: 11px;
2046
+ font-weight: 600;
2047
+ color: var(--text);
2048
+ white-space: nowrap;
2049
+ max-width: 100px;
2050
+ overflow: hidden;
2051
+ text-overflow: ellipsis;
2052
+ }
2053
+ .builder-minimap-node .minimap-index {
2054
+ font-family: var(--mono);
2055
+ font-size: 9px;
2056
+ color: var(--text-muted);
2057
+ }
2058
+ .builder-minimap-connector {
2059
+ display: flex;
2060
+ flex-direction: column;
2061
+ align-items: center;
2062
+ justify-content: center;
2063
+ flex-shrink: 0;
2064
+ min-width: 24px;
2065
+ gap: 2px;
2066
+ }
2067
+ .builder-minimap-connector-line {
2068
+ width: 100%;
2069
+ height: 2px;
2070
+ background: repeating-linear-gradient(90deg, var(--text-muted) 0, var(--text-muted) 4px, transparent 4px, transparent 8px);
2071
+ background-size: 16px 2px;
2072
+ animation: connector-flow 1s linear infinite;
2073
+ }
2074
+ @keyframes connector-flow {
2075
+ 0% { background-position: 0 0; }
2076
+ 100% { background-position: 16px 0; }
2077
+ }
2078
+ .builder-minimap-connector-file {
2079
+ font-size: 9px;
2080
+ color: var(--accent);
2081
+ white-space: nowrap;
2082
+ max-width: 80px;
2083
+ overflow: hidden;
2084
+ text-overflow: ellipsis;
2085
+ line-height: 1;
2086
+ }
2087
+ .minimap-io {
2088
+ display: flex;
2089
+ gap: 3px;
2090
+ align-items: center;
2091
+ max-width: 100px;
2092
+ }
2093
+ .minimap-io-label {
2094
+ font-size: 10px;
2095
+ white-space: nowrap;
2096
+ overflow: hidden;
2097
+ text-overflow: ellipsis;
2098
+ max-width: 80px;
2099
+ line-height: 1;
2100
+ font-weight: 500;
2101
+ }
2102
+ .minimap-io-in .minimap-io-label { color: var(--blue); }
2103
+ .minimap-io-out .minimap-io-label { color: var(--green); }
2104
+ .minimap-io-arrow {
2105
+ font-size: 9px;
2106
+ flex-shrink: 0;
2107
+ }
2108
+ .minimap-io-in .minimap-io-arrow { color: var(--blue); }
2109
+ .minimap-io-out .minimap-io-arrow { color: var(--green); }
2110
+ .builder-minimap-add {
2111
+ display: flex;
2112
+ align-items: center;
2113
+ justify-content: center;
2114
+ cursor: pointer;
2115
+ padding: 8px 12px;
2116
+ border-radius: var(--radius);
2117
+ border: 1px dashed var(--border);
2118
+ background: transparent;
2119
+ color: var(--text-muted);
2120
+ font-size: 13px;
2121
+ font-weight: 600;
2122
+ transition: border-color 0.15s, color 0.15s;
2123
+ flex-shrink: 0;
2124
+ min-width: 40px;
2125
+ }
2126
+ .builder-minimap-add:hover {
2127
+ border-color: var(--accent);
2128
+ color: var(--accent);
2129
+ }
2130
+ /* Drag-and-drop reordering */
2131
+ .builder-minimap-node[draggable="true"] { cursor: grab; }
2132
+ .builder-minimap-node[draggable="true"]:active { cursor: grabbing; }
2133
+ .builder-minimap-node.dragging {
2134
+ opacity: 0.4;
2135
+ border-style: dashed;
2136
+ }
2137
+ .builder-minimap-node.drag-over {
2138
+ border-color: var(--accent);
2139
+ box-shadow: 0 0 0 1px var(--accent);
2140
+ }