@lmctl-ai/lmctl 0.2.437 → 0.2.438

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,1852 +0,0 @@
1
- :root {
2
- color-scheme: light;
3
- font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
4
- --bg: #f7f7f4;
5
- --panel: #ffffff;
6
- --panel-2: #efeee9;
7
- --ink: #1f2723;
8
- --muted: #64706a;
9
- --line: #d7d8d2;
10
- --accent: #2e7d6b;
11
- --accent-2: #315f9d;
12
- --warn: #b4771f;
13
- --bad: #ba3d3d;
14
- --good: #2f7d4f;
15
- }
16
-
17
- * {
18
- box-sizing: border-box;
19
- }
20
-
21
- [hidden] {
22
- display: none !important;
23
- }
24
-
25
- html,
26
- body {
27
- height: 100%;
28
- margin: 0;
29
- }
30
-
31
- /* min-height, not height: pages that now render a .session-header as a sibling
32
- of #app (device/admin-usage) would otherwise force #app to exactly 100% of
33
- the viewport ON TOP OF the header's own height, overflowing the page. */
34
- #app {
35
- min-height: 100%;
36
- }
37
-
38
- body {
39
- background: var(--bg);
40
- color: var(--ink);
41
- }
42
-
43
- button,
44
- select,
45
- input,
46
- textarea {
47
- font: inherit;
48
- }
49
-
50
- button {
51
- border: 1px solid var(--line);
52
- background: var(--panel);
53
- color: var(--ink);
54
- border-radius: 6px;
55
- min-height: 32px;
56
- padding: 0 10px;
57
- cursor: pointer;
58
- }
59
-
60
- button:hover {
61
- border-color: var(--accent);
62
- }
63
-
64
- button[data-active="true"] {
65
- background: var(--accent);
66
- border-color: var(--accent);
67
- color: white;
68
- }
69
-
70
- .app-shell {
71
- display: grid;
72
- grid-template-columns: 280px minmax(0, 1fr) 340px;
73
- grid-template-rows: minmax(0, 1fr) 220px;
74
- height: 100%;
75
- min-width: 960px;
76
- }
77
-
78
- .runtime-shell {
79
- display: grid;
80
- grid-template-rows: 56px minmax(0, 1fr);
81
- height: 100%;
82
- min-width: 0;
83
- }
84
-
85
- .top-tabs {
86
- align-items: center;
87
- background: var(--panel);
88
- border-bottom: 1px solid var(--line);
89
- display: flex;
90
- justify-content: space-between;
91
- padding: 0 16px;
92
- }
93
-
94
- .top-tabs > div {
95
- display: flex;
96
- flex-direction: column;
97
- gap: 2px;
98
- }
99
-
100
- .top-tabs span,
101
- .muted {
102
- color: var(--muted);
103
- font-size: 13px;
104
- }
105
-
106
- .top-tabs nav {
107
- display: flex;
108
- gap: 8px;
109
- overflow-x: auto;
110
- padding: 6px 0;
111
- }
112
-
113
- .top-tab {
114
- min-width: 92px;
115
- }
116
-
117
- .two-column {
118
- display: grid;
119
- grid-template-columns: 300px minmax(0, 1fr);
120
- min-height: 0;
121
- }
122
-
123
- .left-panel {
124
- background: var(--panel);
125
- border-right: 1px solid var(--line);
126
- overflow: auto;
127
- padding: 16px;
128
- }
129
-
130
- .left-panel h2,
131
- .panel-header h2,
132
- .manager-drawer h2 {
133
- font-size: 18px;
134
- margin: 0 0 6px;
135
- }
136
-
137
- .console-impersonation-banner {
138
- background: #fff3dc;
139
- border: 1px solid var(--warn);
140
- border-left: 4px solid var(--warn);
141
- border-radius: 8px;
142
- display: grid;
143
- gap: 10px;
144
- margin: 12px 16px 0;
145
- padding: 12px;
146
- }
147
-
148
- .impersonation-banner-message {
149
- color: #5f3f00;
150
- margin: 0;
151
- font-weight: 700;
152
- }
153
-
154
- .impersonation-banner-actions {
155
- display: flex;
156
- gap: 8px;
157
- align-items: center;
158
- }
159
-
160
-
161
- .list-button {
162
- display: block;
163
- height: auto;
164
- margin-bottom: 8px;
165
- padding: 10px;
166
- text-align: left;
167
- width: 100%;
168
- }
169
-
170
- .list-button strong,
171
- .list-button span {
172
- display: block;
173
- }
174
-
175
- .list-button span {
176
- color: var(--muted);
177
- font-size: 12px;
178
- line-height: 1.4;
179
- margin-top: 4px;
180
- }
181
-
182
- .chat-panel,
183
- .project-shell {
184
- min-height: 0;
185
- overflow: hidden;
186
- }
187
-
188
- .chat-panel {
189
- display: grid;
190
- grid-template-rows: auto minmax(0, 1fr) auto;
191
- padding: 16px;
192
- }
193
-
194
- .panel-header,
195
- .workspace-heading {
196
- align-items: flex-start;
197
- display: flex;
198
- gap: 12px;
199
- justify-content: space-between;
200
- }
201
-
202
- .context-pill {
203
- background: #e7f0ec;
204
- border: 1px solid rgba(46, 125, 107, 0.24);
205
- border-radius: 999px;
206
- color: var(--accent);
207
- font-size: 12px;
208
- max-width: 460px;
209
- overflow-wrap: anywhere;
210
- padding: 6px 10px;
211
- }
212
-
213
- .workspace-layout,
214
- .admin-layout {
215
- height: 100%;
216
- }
217
-
218
- .project-shell {
219
- display: grid;
220
- grid-template-columns: minmax(0, 1fr) auto;
221
- min-width: 0;
222
- }
223
-
224
- .project-panel {
225
- display: grid;
226
- grid-template-rows: auto 38vh minmax(0, 1fr) auto;
227
- min-width: 0;
228
- min-height: 0;
229
- overflow: hidden;
230
- padding: 16px;
231
- }
232
-
233
- .project-graph {
234
- border: 1px solid var(--line);
235
- border-radius: 8px;
236
- margin-top: 12px;
237
- min-height: 260px;
238
- }
239
-
240
- .history-panel {
241
- display: grid;
242
- gap: 14px;
243
- grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
244
- min-height: 0;
245
- overflow: hidden;
246
- padding: 14px 0;
247
- }
248
-
249
- .project-shell[data-manager-open="true"] .history-panel {
250
- grid-template-columns: minmax(0, 1fr);
251
- }
252
-
253
- .history-panel > div,
254
- .chat-history {
255
- min-height: 0;
256
- overflow: auto;
257
- }
258
-
259
- .chat-message {
260
- background: var(--panel);
261
- border: 1px solid var(--line);
262
- border-radius: 8px;
263
- margin-bottom: 10px;
264
- padding: 10px 12px;
265
- }
266
-
267
- .chat-message[data-role="system"],
268
- .chat-message[data-role="event"] {
269
- background: #f1f0ea;
270
- }
271
-
272
- .chat-message header {
273
- align-items: center;
274
- display: flex;
275
- gap: 10px;
276
- justify-content: space-between;
277
- }
278
-
279
- .chat-message header span,
280
- .chat-message small {
281
- color: var(--muted);
282
- font-size: 12px;
283
- }
284
-
285
- .chat-message p {
286
- line-height: 1.45;
287
- margin: 8px 0 0;
288
- }
289
-
290
- .composer {
291
- align-items: flex-end;
292
- background: var(--panel);
293
- border: 1px solid var(--line);
294
- border-radius: 8px;
295
- display: grid;
296
- gap: 10px;
297
- grid-template-columns: minmax(0, 1fr) auto;
298
- padding: 12px;
299
- }
300
-
301
- .composer label,
302
- .composer span,
303
- .composer textarea {
304
- display: block;
305
- width: 100%;
306
- }
307
-
308
- .composer span {
309
- color: var(--muted);
310
- font-size: 12px;
311
- margin-bottom: 6px;
312
- }
313
-
314
- .composer textarea {
315
- border: 1px solid var(--line);
316
- border-radius: 6px;
317
- min-height: 72px;
318
- padding: 10px;
319
- resize: vertical;
320
- }
321
-
322
- .manager-drawer {
323
- background: var(--panel);
324
- border-left: 1px solid var(--line);
325
- display: grid;
326
- grid-template-rows: auto minmax(0, 1fr) auto;
327
- padding: 16px;
328
- width: 380px;
329
- }
330
-
331
- .compact-event {
332
- grid-template-columns: 160px 130px minmax(220px, 1fr);
333
- font-size: 12px;
334
- min-width: 540px;
335
- }
336
-
337
- .playback-status {
338
- align-self: center;
339
- color: var(--muted);
340
- font-size: 12px;
341
- padding: 0 4px;
342
- }
343
-
344
- .sidebar,
345
- .details,
346
- .timeline {
347
- background: var(--panel);
348
- border-color: var(--line);
349
- }
350
-
351
- .sidebar {
352
- border-right: 1px solid var(--line);
353
- overflow: auto;
354
- padding: 16px;
355
- }
356
-
357
- .graph-region {
358
- position: relative;
359
- overflow: hidden;
360
- background:
361
- linear-gradient(var(--line) 1px, transparent 1px),
362
- linear-gradient(90deg, var(--line) 1px, transparent 1px);
363
- background-color: #fbfbf8;
364
- background-size: 28px 28px;
365
- }
366
-
367
- .static-graph {
368
- max-width: 100%;
369
- width: 100% !important;
370
- }
371
-
372
- .static-graph-inner {
373
- min-width: max-content;
374
- }
375
-
376
- .details {
377
- border-left: 1px solid var(--line);
378
- overflow: auto;
379
- padding: 16px;
380
- }
381
-
382
- .timeline {
383
- grid-column: 1 / -1;
384
- border-top: 1px solid var(--line);
385
- overflow: hidden;
386
- display: grid;
387
- grid-template-columns: 420px minmax(0, 1fr);
388
- }
389
-
390
- .section-title {
391
- font-size: 12px;
392
- color: var(--muted);
393
- text-transform: uppercase;
394
- letter-spacing: 0;
395
- margin: 0 0 10px;
396
- }
397
-
398
- .template-button,
399
- .run-button {
400
- width: 100%;
401
- text-align: left;
402
- display: block;
403
- margin-bottom: 8px;
404
- padding: 10px;
405
- height: auto;
406
- }
407
-
408
- .template-button strong,
409
- .run-button strong {
410
- display: block;
411
- font-size: 14px;
412
- }
413
-
414
- .template-button span,
415
- .run-button span {
416
- color: var(--muted);
417
- display: block;
418
- font-size: 12px;
419
- line-height: 1.4;
420
- margin-top: 4px;
421
- }
422
-
423
- .toolbar {
424
- position: absolute;
425
- top: 12px;
426
- left: 12px;
427
- z-index: 5;
428
- display: flex;
429
- gap: 8px;
430
- background: rgba(255, 255, 255, 0.9);
431
- border: 1px solid var(--line);
432
- border-radius: 8px;
433
- padding: 8px;
434
- }
435
-
436
- .graph-content {
437
- position: absolute;
438
- inset: 0;
439
- transform-origin: 0 0;
440
- }
441
-
442
- .edge-layer {
443
- position: absolute;
444
- inset: 0;
445
- overflow: visible;
446
- pointer-events: none;
447
- }
448
-
449
- .edge-path {
450
- fill: none;
451
- stroke: #8b9690;
452
- stroke-width: 2;
453
- }
454
-
455
- .edge-path[data-back-edge="true"] {
456
- stroke-dasharray: 6 5;
457
- opacity: 0.45;
458
- }
459
-
460
- .edge-path[data-status="active"] {
461
- stroke: var(--accent-2);
462
- stroke-width: 3;
463
- }
464
-
465
- .edge-path[data-status="traversed"] {
466
- stroke: var(--good);
467
- stroke-width: 3;
468
- }
469
-
470
- .edge-path[data-status="failed"] {
471
- stroke: var(--bad);
472
- stroke-width: 3;
473
- }
474
-
475
- .node {
476
- position: absolute;
477
- width: 190px;
478
- min-height: 54px;
479
- border: 2px solid var(--line);
480
- border-radius: 8px;
481
- background: var(--panel);
482
- box-shadow: 0 6px 18px rgba(31, 39, 35, 0.08);
483
- padding: 14px 14px;
484
- cursor: pointer;
485
- overflow: visible;
486
- }
487
-
488
- .node[data-selected="true"] {
489
- outline: 3px solid rgba(46, 125, 107, 0.24);
490
- border-color: var(--accent);
491
- }
492
-
493
- .node[data-visual-state="not-reached"] {
494
- background: #f4f4f0;
495
- color: #737d78;
496
- border-color: #d7d8d2;
497
- }
498
-
499
- .node[data-visual-state="work-in-progress"] {
500
- background: #e9f1fb;
501
- border-color: var(--accent-2);
502
- }
503
-
504
- .node[data-visual-state="done"] {
505
- background: #e9f5ed;
506
- border-color: var(--good);
507
- }
508
-
509
- .node[data-status="failed"] {
510
- background: #f8e8e8;
511
- border-color: var(--bad);
512
- }
513
-
514
- .node[data-visual-state="human-escalation"] {
515
- background: #fff2dc;
516
- border-color: var(--warn);
517
- border-radius: 999px;
518
- }
519
-
520
- .node[data-emphasis="human"],
521
- .node[data-emphasis="review"] {
522
- box-shadow: 0 0 0 2px rgba(46, 125, 107, .16), 0 12px 24px rgba(31, 39, 35, .1);
523
- }
524
-
525
- .node[data-status="skipped"] {
526
- opacity: 0.72;
527
- }
528
-
529
- .node[data-visual-state="work-in-progress"]::after {
530
- animation: pulse-star 1.1s ease-in-out infinite;
531
- color: var(--accent-2);
532
- content: "✦";
533
- font-size: 22px;
534
- line-height: 1;
535
- position: absolute;
536
- right: -10px;
537
- top: -12px;
538
- }
539
-
540
- .node-title {
541
- font-weight: 650;
542
- font-size: 14px;
543
- overflow-wrap: anywhere;
544
- }
545
-
546
- @keyframes pulse-star {
547
- 0%, 100% { transform: scale(0.75) rotate(-8deg); opacity: 0.65; }
548
- 50% { transform: scale(1.28) rotate(8deg); opacity: 1; }
549
- }
550
-
551
- @media (max-width: 1099px) {
552
- html,
553
- body,
554
- #app {
555
- min-width: 0;
556
- overflow-x: hidden;
557
- }
558
-
559
- .runtime-shell {
560
- grid-template-rows: auto minmax(0, 1fr);
561
- }
562
-
563
- .top-tabs {
564
- align-items: stretch;
565
- flex-direction: column;
566
- gap: 8px;
567
- padding: 10px 12px;
568
- }
569
-
570
- .top-tabs nav {
571
- width: 100%;
572
- }
573
-
574
- .top-tab {
575
- flex: 0 0 auto;
576
- }
577
-
578
- .two-column {
579
- grid-template-columns: 1fr;
580
- grid-template-rows: auto minmax(0, 1fr);
581
- overflow: auto;
582
- }
583
-
584
- .left-panel {
585
- border-bottom: 1px solid var(--line);
586
- border-right: 0;
587
- max-height: none;
588
- }
589
-
590
- .project-shell {
591
- display: block;
592
- overflow: visible;
593
- }
594
-
595
- .project-panel {
596
- grid-template-rows: auto 320px auto auto;
597
- overflow: visible;
598
- }
599
-
600
- .history-panel {
601
- grid-template-columns: 1fr;
602
- }
603
-
604
- .manager-drawer {
605
- bottom: 0;
606
- box-shadow: 0 -12px 40px rgba(31, 39, 35, 0.18);
607
- left: 0;
608
- max-height: 86vh;
609
- overflow: auto;
610
- position: fixed;
611
- right: 0;
612
- top: auto;
613
- width: auto;
614
- z-index: 20;
615
- }
616
- }
617
-
618
- @media (max-width: 560px) {
619
- .left-panel,
620
- .project-panel,
621
- .chat-panel,
622
- .manager-drawer {
623
- padding: 12px;
624
- }
625
-
626
- .panel-header {
627
- display: block;
628
- }
629
-
630
- .context-pill {
631
- display: inline-block;
632
- margin-top: 8px;
633
- max-width: 100%;
634
- }
635
-
636
- .project-panel {
637
- grid-template-rows: auto 300px auto auto;
638
- }
639
-
640
- .composer {
641
- grid-template-columns: 1fr;
642
- }
643
-
644
- .toolbar {
645
- flex-wrap: wrap;
646
- max-width: calc(100% - 24px);
647
- }
648
-
649
- .graph-region {
650
- overflow: auto;
651
- }
652
- }
653
-
654
- .badge {
655
- border-radius: 999px;
656
- background: var(--panel-2);
657
- color: var(--muted);
658
- font-size: 11px;
659
- padding: 2px 7px;
660
- }
661
-
662
- .badge[data-kind="entry"] {
663
- background: rgba(46, 125, 107, 0.12);
664
- color: var(--accent);
665
- }
666
-
667
- .field {
668
- margin-bottom: 14px;
669
- }
670
-
671
- .field dt {
672
- color: var(--muted);
673
- font-size: 12px;
674
- margin-bottom: 4px;
675
- }
676
-
677
- .field dd {
678
- margin: 0;
679
- overflow-wrap: anywhere;
680
- }
681
-
682
- pre {
683
- white-space: pre-wrap;
684
- overflow-wrap: anywhere;
685
- background: #272d2a;
686
- color: #f5f2e9;
687
- border-radius: 8px;
688
- padding: 10px;
689
- font-size: 12px;
690
- }
691
-
692
- .playback {
693
- padding: 16px;
694
- border-right: 1px solid var(--line);
695
- overflow: auto;
696
- }
697
-
698
- .playback-controls {
699
- display: flex;
700
- gap: 8px;
701
- flex-wrap: wrap;
702
- align-items: center;
703
- }
704
-
705
- .events {
706
- overflow: auto;
707
- padding: 12px 16px;
708
- }
709
-
710
- .event-row {
711
- border-bottom: 1px solid var(--line);
712
- padding: 8px 0;
713
- display: grid;
714
- grid-template-columns: 180px 150px minmax(0, 1fr);
715
- gap: 12px;
716
- font-size: 13px;
717
- }
718
-
719
- .event-row[data-active="true"] {
720
- background: rgba(46, 125, 107, 0.08);
721
- }
722
-
723
- .event-row span {
724
- overflow-wrap: anywhere;
725
- }
726
-
727
- .state-message {
728
- margin: 18px;
729
- padding: 16px;
730
- border: 1px solid var(--line);
731
- border-radius: 8px;
732
- background: var(--panel);
733
- }
734
-
735
- .state-message.compact {
736
- margin: 0;
737
- }
738
-
739
- .muted {
740
- color: var(--muted);
741
- margin: 0;
742
- }
743
-
744
- .login-shell {
745
- align-items: center;
746
- display: grid;
747
- min-height: 100%;
748
- padding: 24px;
749
- }
750
-
751
- .auth-entry-switch {
752
- display: flex;
753
- gap: 10px;
754
- justify-content: center;
755
- margin: 0 auto 14px;
756
- }
757
-
758
- .auth-entry-switch button {
759
- min-width: 120px;
760
- }
761
-
762
- .login-card {
763
- background: var(--panel);
764
- border: 1px solid var(--line);
765
- border-radius: 8px;
766
- display: grid;
767
- gap: 18px;
768
- margin: 0 auto;
769
- max-width: 420px;
770
- padding: 28px;
771
- width: min(100%, 420px);
772
- }
773
-
774
- .login-card h1,
775
- .l2-topbar h1,
776
- .l2-panel-title h2,
777
- .prompt-header h2 {
778
- letter-spacing: 0;
779
- margin: 0;
780
- }
781
-
782
- .login-card label,
783
- .prompt-form label {
784
- display: grid;
785
- gap: 6px;
786
- }
787
-
788
- .login-card input,
789
- .prompt-form textarea {
790
- background: var(--panel);
791
- border: 1px solid var(--line);
792
- border-radius: 6px;
793
- color: var(--ink);
794
- min-width: 0;
795
- padding: 10px 12px;
796
- }
797
-
798
- .login-card button,
799
- .prompt-form button {
800
- background: var(--accent);
801
- border-color: var(--accent);
802
- color: white;
803
- }
804
-
805
- .login-card button:disabled,
806
- .prompt-form button:disabled,
807
- .prompt-form textarea:disabled {
808
- cursor: not-allowed;
809
- opacity: 0.55;
810
- }
811
-
812
- .form-error {
813
- color: var(--bad);
814
- min-height: 20px;
815
- margin: 0;
816
- }
817
-
818
- .form-hint {
819
- color: var(--muted);
820
- font-size: 0.85em;
821
- margin: -8px 0 0;
822
- }
823
-
824
- .form-notice {
825
- color: var(--ink);
826
- margin: 0;
827
- }
828
-
829
- .form-switch {
830
- color: var(--muted);
831
- margin: 0;
832
- text-align: center;
833
- }
834
-
835
- .oauth-button {
836
- align-items: center;
837
- background: var(--panel);
838
- border: 1px solid var(--line);
839
- border-radius: 6px;
840
- color: var(--ink);
841
- cursor: pointer;
842
- display: flex;
843
- font: inherit;
844
- gap: 8px;
845
- justify-content: center;
846
- padding: 10px 12px;
847
- width: 100%;
848
- }
849
-
850
- .oauth-button:hover:not(:disabled) {
851
- border-color: var(--accent);
852
- }
853
-
854
- .oauth-button:disabled {
855
- cursor: not-allowed;
856
- opacity: 0.55;
857
- }
858
-
859
- .console-admin-tools {
860
- background: var(--panel);
861
- border: 1px solid var(--line);
862
- border-radius: 8px;
863
- display: grid;
864
- gap: 14px;
865
- margin: 18px 0 0;
866
- padding: 18px;
867
- }
868
-
869
- .console-admin-tools h2 {
870
- margin: 0;
871
- }
872
-
873
- .console-admin-tools-search {
874
- align-items: end;
875
- display: flex;
876
- flex-wrap: wrap;
877
- gap: 10px;
878
- }
879
-
880
- .console-admin-tools-search label {
881
- display: grid;
882
- flex: 1 1 240px;
883
- gap: 6px;
884
- }
885
-
886
- .console-admin-tools-search input {
887
- background: var(--panel);
888
- border: 1px solid var(--line);
889
- border-radius: 6px;
890
- color: var(--ink);
891
- min-width: 0;
892
- padding: 10px 12px;
893
- }
894
-
895
- .console-admin-tools-search button {
896
- background: var(--accent);
897
- border-color: var(--accent);
898
- color: white;
899
- }
900
-
901
- .console-admin-tools-search button:disabled {
902
- cursor: not-allowed;
903
- opacity: 0.55;
904
- }
905
-
906
- .console-admin-tools-result {
907
- overflow-x: auto;
908
- }
909
-
910
- .admin-tools-table {
911
- border-collapse: collapse;
912
- margin-top: 10px;
913
- width: 100%;
914
- }
915
-
916
- .admin-tools-table th,
917
- .admin-tools-table td {
918
- border-bottom: 1px solid var(--line);
919
- padding: 8px 10px;
920
- text-align: left;
921
- vertical-align: top;
922
- }
923
-
924
- .admin-tools-table th {
925
- font-size: 12px;
926
- letter-spacing: 0.02em;
927
- text-transform: uppercase;
928
- }
929
-
930
- .admin-tools-table button:disabled {
931
- cursor: not-allowed;
932
- opacity: 0.55;
933
- }
934
-
935
- .home-shell {
936
- align-items: start;
937
- display: grid;
938
- gap: 14px;
939
- margin: 0 auto;
940
- max-width: 860px;
941
- padding: 18px 18px 28px;
942
- }
943
-
944
- .session-header {
945
- align-items: center;
946
- display: flex;
947
- flex-wrap: wrap;
948
- gap: 10px;
949
- justify-content: space-between;
950
- padding: 14px 18px;
951
- }
952
-
953
- .session-header-actions {
954
- display: flex;
955
- flex-wrap: wrap;
956
- gap: 8px;
957
- }
958
-
959
- .session-header-user {
960
- margin: 0;
961
- }
962
-
963
- .session-header-action {
964
- align-items: center;
965
- background: var(--panel);
966
- border: 1px solid var(--line);
967
- border-radius: 999px;
968
- color: var(--ink);
969
- display: inline-flex;
970
- justify-content: center;
971
- min-height: 34px;
972
- padding: 0 12px;
973
- text-decoration: none;
974
- }
975
-
976
- .session-header-action:hover {
977
- border-color: var(--accent);
978
- }
979
-
980
- .session-header-logout {
981
- background: var(--accent);
982
- border-color: var(--accent);
983
- color: white;
984
- }
985
-
986
- .home-hero {
987
- display: grid;
988
- gap: 6px;
989
- }
990
-
991
- .home-panel {
992
- background: var(--panel);
993
- border: 1px solid var(--line);
994
- border-radius: 8px;
995
- padding: 12px 14px;
996
- }
997
-
998
- .home-tools,
999
- .home-how-to {
1000
- display: grid;
1001
- gap: 8px;
1002
- list-style: none;
1003
- margin: 8px 0 0;
1004
- padding: 0;
1005
- }
1006
-
1007
- .home-tool {
1008
- border: 1px solid var(--line);
1009
- border-radius: 8px;
1010
- color: inherit;
1011
- display: grid;
1012
- gap: 2px;
1013
- padding: 10px 12px;
1014
- text-decoration: none;
1015
- }
1016
-
1017
- .home-tool:hover {
1018
- border-color: var(--accent);
1019
- }
1020
-
1021
- .home-tool span {
1022
- color: var(--muted);
1023
- font-size: 13px;
1024
- }
1025
-
1026
- .home-actions {
1027
- display: flex;
1028
- flex-wrap: wrap;
1029
- gap: 8px;
1030
- }
1031
-
1032
- .home-action {
1033
- align-items: center;
1034
- background: var(--panel);
1035
- border: 1px solid var(--line);
1036
- border-radius: 999px;
1037
- color: var(--ink);
1038
- display: inline-flex;
1039
- min-height: 34px;
1040
- padding: 0 12px;
1041
- text-decoration: none;
1042
- }
1043
-
1044
- .home-action:hover {
1045
- border-color: var(--accent);
1046
- }
1047
-
1048
- .device-code-display {
1049
- background: #f4f8f6;
1050
- border: 1px solid rgba(46, 125, 107, 0.28);
1051
- border-radius: 8px;
1052
- display: grid;
1053
- gap: 8px;
1054
- padding: 14px;
1055
- text-align: center;
1056
- }
1057
-
1058
- .device-code-display span {
1059
- color: var(--muted);
1060
- font-size: 12px;
1061
- }
1062
-
1063
- .device-code-display strong {
1064
- color: var(--ink);
1065
- font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
1066
- font-size: 26px;
1067
- overflow-wrap: anywhere;
1068
- }
1069
-
1070
- .form-divider {
1071
- align-items: center;
1072
- color: var(--muted);
1073
- display: grid;
1074
- gap: 10px;
1075
- grid-template-columns: 1fr auto 1fr;
1076
- margin: 0;
1077
- }
1078
-
1079
- .form-divider::before,
1080
- .form-divider::after {
1081
- background: var(--line);
1082
- content: "";
1083
- height: 1px;
1084
- }
1085
-
1086
- .link-button {
1087
- background: none;
1088
- border: none;
1089
- color: var(--accent);
1090
- cursor: pointer;
1091
- font: inherit;
1092
- padding: 0;
1093
- text-decoration: underline;
1094
- }
1095
-
1096
- .link-button:disabled {
1097
- cursor: not-allowed;
1098
- opacity: 0.55;
1099
- }
1100
-
1101
- .l2-shell {
1102
- display: grid;
1103
- grid-template-rows: auto auto minmax(0, 1fr);
1104
- height: 100%;
1105
- min-width: 0;
1106
- }
1107
-
1108
- .l2-topbar {
1109
- align-items: center;
1110
- background: var(--panel);
1111
- border-bottom: 1px solid var(--line);
1112
- display: flex;
1113
- gap: 16px;
1114
- justify-content: space-between;
1115
- padding: 12px 16px;
1116
- }
1117
-
1118
- .l2-session {
1119
- align-items: center;
1120
- display: flex;
1121
- gap: 10px;
1122
- min-width: 0;
1123
- }
1124
-
1125
- .l2-session > span:first-child {
1126
- max-width: 260px;
1127
- overflow: hidden;
1128
- text-overflow: ellipsis;
1129
- white-space: nowrap;
1130
- }
1131
-
1132
- .l2-status {
1133
- background: #fff8e8;
1134
- border-bottom: 1px solid #ead7ab;
1135
- color: #6a4b12;
1136
- padding: 8px 16px;
1137
- }
1138
-
1139
- .quota-banner {
1140
- align-items: center;
1141
- background: #fceeee;
1142
- border-bottom: 1px solid rgba(186, 61, 61, 0.32);
1143
- color: #742323;
1144
- display: flex;
1145
- gap: 12px;
1146
- justify-content: space-between;
1147
- padding: 8px 16px;
1148
- }
1149
-
1150
- .quota-banner button {
1151
- border-color: rgba(186, 61, 61, 0.35);
1152
- }
1153
-
1154
- .device-access-overlay {
1155
- align-items: flex-start;
1156
- background: rgba(17, 24, 39, 0.45);
1157
- display: flex;
1158
- inset: 0;
1159
- justify-content: center;
1160
- overflow: auto;
1161
- padding: 48px 16px;
1162
- position: fixed;
1163
- z-index: 50;
1164
- }
1165
-
1166
- .device-access-card {
1167
- background: var(--panel);
1168
- border: 1px solid var(--line);
1169
- border-radius: 12px;
1170
- box-shadow: 0 12px 40px rgba(17, 24, 39, 0.25);
1171
- display: grid;
1172
- gap: 14px;
1173
- max-width: 560px;
1174
- padding: 20px;
1175
- width: 100%;
1176
- }
1177
-
1178
- .device-field {
1179
- display: grid;
1180
- gap: 6px;
1181
- }
1182
-
1183
- .device-field > span {
1184
- font-weight: 600;
1185
- }
1186
-
1187
- .device-field-row {
1188
- align-items: center;
1189
- display: flex;
1190
- gap: 8px;
1191
- }
1192
-
1193
- .device-field-row input {
1194
- flex: 1 1 auto;
1195
- font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
1196
- min-width: 0;
1197
- }
1198
-
1199
- .device-caption {
1200
- color: var(--muted, #555);
1201
- font-size: 0.9em;
1202
- }
1203
-
1204
- .device-caption code,
1205
- .device-access-card code {
1206
- word-break: break-all;
1207
- }
1208
-
1209
- .device-actions {
1210
- display: flex;
1211
- gap: 8px;
1212
- }
1213
-
1214
- .device-regenerate {
1215
- border-top: 1px solid var(--line);
1216
- display: grid;
1217
- gap: 10px;
1218
- padding-top: 14px;
1219
- }
1220
-
1221
- .l2-body {
1222
- display: grid;
1223
- grid-template-columns: 320px minmax(0, 1fr);
1224
- min-height: 0;
1225
- }
1226
-
1227
- .l2-left,
1228
- .l2-main {
1229
- min-width: 0;
1230
- overflow: auto;
1231
- padding: 16px;
1232
- }
1233
-
1234
- .l2-left {
1235
- background: var(--panel);
1236
- border-right: 1px solid var(--line);
1237
- }
1238
-
1239
- .l2-panel-title,
1240
- .prompt-header {
1241
- align-items: flex-start;
1242
- display: flex;
1243
- gap: 12px;
1244
- justify-content: space-between;
1245
- margin-bottom: 14px;
1246
- }
1247
-
1248
- .project-selector-list {
1249
- display: grid;
1250
- gap: 8px;
1251
- }
1252
-
1253
- .project-selector-item {
1254
- align-items: flex-start;
1255
- border-radius: 8px;
1256
- display: grid;
1257
- gap: 4px;
1258
- justify-items: start;
1259
- min-height: 56px;
1260
- padding: 10px;
1261
- text-align: left;
1262
- width: 100%;
1263
- }
1264
-
1265
- .project-selector-item small {
1266
- color: var(--muted);
1267
- overflow-wrap: anywhere;
1268
- }
1269
-
1270
- .project-prompt {
1271
- background: var(--panel);
1272
- border: 1px solid var(--line);
1273
- border-radius: 8px;
1274
- display: grid;
1275
- gap: 16px;
1276
- min-height: 100%;
1277
- padding: 16px;
1278
- }
1279
-
1280
- .prompt-form {
1281
- display: grid;
1282
- gap: 10px;
1283
- }
1284
-
1285
- .prompt-results {
1286
- display: grid;
1287
- gap: 10px;
1288
- }
1289
-
1290
- .prompt-result {
1291
- border: 1px solid var(--line);
1292
- border-radius: 8px;
1293
- padding: 12px;
1294
- }
1295
-
1296
- .prompt-result > div {
1297
- align-items: center;
1298
- display: flex;
1299
- gap: 10px;
1300
- justify-content: space-between;
1301
- }
1302
-
1303
- .prompt-result time {
1304
- color: var(--muted);
1305
- font-size: 12px;
1306
- }
1307
-
1308
- .prompt-result[data-status="error"] {
1309
- border-color: rgba(186, 61, 61, 0.45);
1310
- }
1311
-
1312
- /* DX-2 Item 1 — paused runs (engine __paused__ / member attention_needed)
1313
- * get a distinct yellow border + banner block so the operator sees the
1314
- * escalation instead of staring at a "pending" status forever. */
1315
- .prompt-result[data-status="paused"] {
1316
- background: rgba(214, 158, 46, 0.06);
1317
- border-color: rgba(214, 158, 46, 0.55);
1318
- }
1319
-
1320
- .paused-banner {
1321
- background: rgba(214, 158, 46, 0.12);
1322
- border-left: 3px solid rgba(214, 158, 46, 0.8);
1323
- border-radius: 4px;
1324
- color: #604200;
1325
- font-size: 13px;
1326
- margin: 8px 0 6px;
1327
- padding: 8px 10px;
1328
- }
1329
-
1330
- .paused-banner .paused-step {
1331
- margin: 0 0 4px;
1332
- }
1333
-
1334
- .paused-banner .paused-step code {
1335
- background: rgba(214, 158, 46, 0.18);
1336
- border-radius: 3px;
1337
- padding: 1px 5px;
1338
- }
1339
-
1340
- .paused-banner .paused-members {
1341
- list-style: disc inside;
1342
- margin: 4px 0 0;
1343
- padding: 0;
1344
- }
1345
-
1346
- /* DX-3 fixup — live-viz progress block. Replaces the DX-3 v1 linear
1347
- * `<progress>` bar (deleted this commit) with a per-step viz: a
1348
- * tier-colored header label + one row per completed step (green
1349
- * check + actual duration) + the current step row (yellow/red
1350
- * border + subtle pulsing animation when the step has overrun its
1351
- * estimate).
1352
- */
1353
- .live-viz {
1354
- margin: 8px 0 10px;
1355
- border-radius: 6px;
1356
- border: 1px solid var(--panel-2);
1357
- background: var(--panel-1, var(--panel-2));
1358
- padding: 6px 10px;
1359
- }
1360
-
1361
- .live-viz-header {
1362
- font-size: 12px;
1363
- font-weight: 500;
1364
- color: var(--muted);
1365
- padding: 2px 0 4px;
1366
- }
1367
-
1368
- .live-viz-header[data-tier="warn"] {
1369
- color: var(--warn);
1370
- }
1371
-
1372
- .live-viz-header[data-tier="bad"] {
1373
- color: var(--bad);
1374
- }
1375
-
1376
- .live-viz-steps {
1377
- list-style: none;
1378
- margin: 4px 0 0;
1379
- padding: 0;
1380
- display: flex;
1381
- flex-direction: column;
1382
- gap: 2px;
1383
- }
1384
-
1385
- .step-row {
1386
- display: grid;
1387
- grid-template-columns: 14px 1fr auto;
1388
- gap: 6px;
1389
- align-items: center;
1390
- font-size: 12px;
1391
- padding: 3px 6px;
1392
- border-radius: 4px;
1393
- border-left: 3px solid transparent;
1394
- }
1395
-
1396
- .step-row.completed {
1397
- color: var(--muted);
1398
- border-left-color: var(--ok, #2ea043);
1399
- }
1400
-
1401
- .step-row.completed .step-icon {
1402
- color: var(--ok, #2ea043);
1403
- }
1404
-
1405
- .step-row.failed {
1406
- color: var(--bad);
1407
- border-left-color: var(--bad);
1408
- }
1409
-
1410
- .step-row.failed .step-icon {
1411
- color: var(--bad);
1412
- }
1413
-
1414
- .step-row.current {
1415
- border-left-color: var(--accent);
1416
- background: var(--panel-2);
1417
- }
1418
-
1419
- .step-row.current.pulse-ok {
1420
- border-left-color: var(--accent);
1421
- }
1422
-
1423
- .step-row.current.pulse-warn {
1424
- border-left-color: var(--warn);
1425
- animation: live-viz-pulse 1.6s ease-in-out infinite;
1426
- }
1427
-
1428
- .step-row.current.pulse-bad {
1429
- border-left-color: var(--bad);
1430
- animation: live-viz-pulse 1.1s ease-in-out infinite;
1431
- }
1432
-
1433
- .step-row.current.pulse-paused {
1434
- border-left-color: var(--warn);
1435
- }
1436
-
1437
- .step-row.current .step-icon {
1438
- color: var(--accent);
1439
- }
1440
-
1441
- .step-row .step-name {
1442
- overflow: hidden;
1443
- text-overflow: ellipsis;
1444
- white-space: nowrap;
1445
- }
1446
-
1447
- .step-row .step-duration,
1448
- .step-row .step-progress,
1449
- .step-row .step-error {
1450
- color: var(--muted);
1451
- font-variant-numeric: tabular-nums;
1452
- font-size: 11px;
1453
- }
1454
-
1455
- .step-row .step-attention {
1456
- grid-column: 1 / -1;
1457
- color: var(--warn);
1458
- font-size: 11px;
1459
- padding-left: 20px;
1460
- }
1461
-
1462
- @keyframes live-viz-pulse {
1463
- 0%, 100% { opacity: 1; }
1464
- 50% { opacity: 0.65; }
1465
- }
1466
-
1467
- @media (max-width: 760px) {
1468
- .l2-topbar,
1469
- .l2-session,
1470
- .l2-panel-title,
1471
- .prompt-header {
1472
- align-items: stretch;
1473
- flex-direction: column;
1474
- }
1475
-
1476
- .l2-body {
1477
- grid-template-columns: 1fr;
1478
- }
1479
-
1480
- .l2-left {
1481
- border-bottom: 1px solid var(--line);
1482
- border-right: 0;
1483
- }
1484
- }
1485
-
1486
- /* TXL-ui — admin transaction-log page */
1487
- .txl-page {
1488
- display: grid;
1489
- gap: 14px;
1490
- padding: 16px;
1491
- }
1492
-
1493
- .txl-form {
1494
- display: flex;
1495
- flex-wrap: wrap;
1496
- gap: 10px;
1497
- align-items: flex-end;
1498
- background: var(--panel);
1499
- border: 1px solid var(--line);
1500
- border-radius: 8px;
1501
- padding: 12px;
1502
- }
1503
-
1504
- .txl-form label {
1505
- display: grid;
1506
- gap: 4px;
1507
- }
1508
-
1509
- .txl-form label span {
1510
- color: var(--muted);
1511
- font-size: 12px;
1512
- }
1513
-
1514
- .txl-form input {
1515
- border: 1px solid var(--line);
1516
- border-radius: 6px;
1517
- padding: 4px 8px;
1518
- min-height: 32px;
1519
- }
1520
-
1521
- .txl-status {
1522
- color: var(--muted);
1523
- min-height: 18px;
1524
- }
1525
-
1526
- .txl-status-bad {
1527
- color: var(--bad);
1528
- }
1529
-
1530
- .txl-chips {
1531
- display: flex;
1532
- flex-wrap: wrap;
1533
- gap: 8px;
1534
- }
1535
-
1536
- .txl-chip {
1537
- border: 1px solid var(--line);
1538
- border-radius: 999px;
1539
- padding: 4px 10px;
1540
- background: var(--panel);
1541
- }
1542
-
1543
- .txl-chip-complete { border-color: var(--good); }
1544
- .txl-chip-stuck { border-color: var(--warn); }
1545
- .txl-chip-dropped { border-color: var(--bad); }
1546
- .txl-chip-fnf { border-color: var(--line); }
1547
-
1548
- .txl-window {
1549
- margin: 4px 0 0;
1550
- }
1551
-
1552
- .txl-table {
1553
- border-collapse: collapse;
1554
- width: 100%;
1555
- }
1556
-
1557
- .txl-table th,
1558
- .txl-table td {
1559
- border: 1px solid var(--line);
1560
- padding: 6px 8px;
1561
- text-align: left;
1562
- vertical-align: top;
1563
- font-size: 13px;
1564
- }
1565
-
1566
- .txl-table thead th {
1567
- background: var(--panel-2);
1568
- }
1569
-
1570
- .txl-row {
1571
- cursor: pointer;
1572
- }
1573
-
1574
- .txl-row:hover {
1575
- background: var(--panel-2);
1576
- }
1577
-
1578
- .txl-row-dropped td {
1579
- border-color: var(--bad);
1580
- }
1581
-
1582
- .txl-row-stuck td {
1583
- border-color: var(--warn);
1584
- }
1585
-
1586
- .txl-detail-card {
1587
- background: var(--panel);
1588
- border: 1px solid var(--line);
1589
- border-radius: 8px;
1590
- padding: 12px;
1591
- }
1592
-
1593
- .txl-detail-head {
1594
- display: flex;
1595
- align-items: center;
1596
- justify-content: space-between;
1597
- margin-bottom: 8px;
1598
- }
1599
-
1600
- .txl-detail-body {
1601
- background: var(--panel-2);
1602
- border-radius: 6px;
1603
- max-height: 400px;
1604
- overflow: auto;
1605
- padding: 8px;
1606
- white-space: pre-wrap;
1607
- word-break: break-all;
1608
- }
1609
-
1610
- .admin-nav-link {
1611
- align-items: center;
1612
- background: var(--panel);
1613
- border: 1px solid var(--line);
1614
- border-radius: 6px;
1615
- color: var(--ink);
1616
- display: inline-flex;
1617
- min-height: 32px;
1618
- padding: 0 10px;
1619
- text-decoration: none;
1620
- }
1621
-
1622
- .admin-nav-link:hover {
1623
- border-color: var(--accent);
1624
- }
1625
-
1626
- .usage-progress-track {
1627
- background: var(--panel-2);
1628
- border: 1px solid var(--line);
1629
- border-radius: 999px;
1630
- height: 12px;
1631
- margin-bottom: 4px;
1632
- overflow: hidden;
1633
- width: min(280px, 100%);
1634
- }
1635
-
1636
- .usage-progress-fill {
1637
- border-radius: 999px;
1638
- height: 100%;
1639
- min-width: 4px;
1640
- }
1641
-
1642
- .usage-progress-fill[data-usage-tone="green"] {
1643
- background: var(--good);
1644
- }
1645
-
1646
- .usage-progress-fill[data-usage-tone="amber"] {
1647
- background: var(--warn);
1648
- }
1649
-
1650
- .usage-progress-fill[data-usage-tone="red"] {
1651
- background: var(--bad);
1652
- }
1653
-
1654
- .usage-page th,
1655
- .usage-page td,
1656
- .admin-usage-table th,
1657
- .admin-usage-table td {
1658
- border: 1px solid var(--line);
1659
- padding: 6px 8px;
1660
- text-align: left;
1661
- vertical-align: top;
1662
- font-size: 13px;
1663
- }
1664
-
1665
- .usage-tier-badge {
1666
- border-radius: 999px;
1667
- display: inline-block;
1668
- font-size: 12px;
1669
- padding: 4px 8px;
1670
- }
1671
-
1672
- .admin-usage-controls {
1673
- align-items: flex-end;
1674
- display: flex;
1675
- gap: 8px;
1676
- margin-bottom: 8px;
1677
- }
1678
-
1679
- .admin-usage-config {
1680
- border: 1px solid var(--line);
1681
- margin-bottom: 10px;
1682
- padding: 10px;
1683
- }
1684
-
1685
- .admin-usage-config-form {
1686
- align-items: center;
1687
- display: flex;
1688
- gap: 8px;
1689
- flex-wrap: wrap;
1690
- }
1691
-
1692
- .admin-usage-config-form label {
1693
- display: grid;
1694
- gap: 4px;
1695
- }
1696
-
1697
- .admin-usage-controls label {
1698
- display: grid;
1699
- gap: 4px;
1700
- }
1701
-
1702
- .admin-usage-controls input {
1703
- max-width: 170px;
1704
- }
1705
-
1706
- .admin-usage-services {
1707
- margin: 0;
1708
- padding-left: 18px;
1709
- }
1710
-
1711
- .admin-usage-services li {
1712
- list-style: square;
1713
- }
1714
-
1715
- .admin-usage-tier-row,
1716
- .admin-usage-limit-row {
1717
- align-items: start;
1718
- display: grid;
1719
- gap: 6px;
1720
- }
1721
-
1722
- .mail-mailbox-nav {
1723
- display: flex;
1724
- flex-wrap: wrap;
1725
- gap: 8px;
1726
- margin-bottom: 12px;
1727
- }
1728
-
1729
- .mail-message-host {
1730
- display: grid;
1731
- gap: 12px;
1732
- margin-bottom: 16px;
1733
- }
1734
-
1735
- .mail-thread {
1736
- background: var(--panel);
1737
- border: 1px solid var(--line);
1738
- border-radius: 8px;
1739
- display: grid;
1740
- gap: 12px;
1741
- padding: 14px;
1742
- }
1743
-
1744
- .mail-message-half {
1745
- display: grid;
1746
- gap: 4px;
1747
- }
1748
-
1749
- .mail-message-half p {
1750
- white-space: pre-wrap;
1751
- }
1752
-
1753
- .mail-messages {
1754
- display: grid;
1755
- gap: 8px;
1756
- list-style: none;
1757
- margin: 0;
1758
- padding: 0;
1759
- }
1760
-
1761
- .mail-message-row {
1762
- background: var(--panel);
1763
- border: 1px solid var(--line);
1764
- border-radius: 8px;
1765
- cursor: pointer;
1766
- display: block;
1767
- padding: 10px 12px;
1768
- text-align: left;
1769
- width: 100%;
1770
- }
1771
-
1772
- .mail-message-row:hover {
1773
- border-color: var(--accent);
1774
- }
1775
-
1776
- .mail-thread-view {
1777
- display: grid;
1778
- gap: 12px;
1779
- }
1780
-
1781
- .mail-compose {
1782
- border-top: 1px solid var(--line);
1783
- display: grid;
1784
- gap: 10px;
1785
- padding-top: 16px;
1786
- }
1787
-
1788
- .mail-compose label {
1789
- display: grid;
1790
- gap: 6px;
1791
- }
1792
-
1793
- .mail-compose input,
1794
- .mail-compose textarea {
1795
- background: var(--panel);
1796
- border: 1px solid var(--line);
1797
- border-radius: 6px;
1798
- color: var(--ink);
1799
- min-width: 0;
1800
- padding: 10px 12px;
1801
- }
1802
-
1803
- .mail-compose textarea {
1804
- min-height: 80px;
1805
- }
1806
-
1807
- .mail-compose button {
1808
- background: var(--accent);
1809
- border-color: var(--accent);
1810
- color: white;
1811
- justify-self: start;
1812
- }
1813
-
1814
- .running-devices {
1815
- display: grid;
1816
- gap: 12px;
1817
- list-style: none;
1818
- margin: 0;
1819
- padding: 0;
1820
- }
1821
-
1822
- .running-device {
1823
- background: var(--panel);
1824
- border: 1px solid var(--line);
1825
- border-radius: 8px;
1826
- padding: 14px;
1827
- }
1828
-
1829
- .running-device pre {
1830
- background: var(--panel-2);
1831
- border-radius: 6px;
1832
- max-height: 320px;
1833
- overflow: auto;
1834
- padding: 8px;
1835
- white-space: pre-wrap;
1836
- word-break: break-word;
1837
- }
1838
-
1839
- .sites-list {
1840
- display: grid;
1841
- gap: 10px;
1842
- list-style: none;
1843
- margin: 0;
1844
- padding: 0;
1845
- }
1846
-
1847
- .site-row {
1848
- background: var(--panel);
1849
- border: 1px solid var(--line);
1850
- border-radius: 8px;
1851
- padding: 12px;
1852
- }