pi-studio 0.5.13 → 0.5.14

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,1012 @@
1
+ * { box-sizing: border-box; }
2
+ html, body {
3
+ margin: 0;
4
+ height: 100%;
5
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
6
+ background: var(--bg);
7
+ color: var(--text);
8
+ }
9
+
10
+ body {
11
+ display: flex;
12
+ flex-direction: column;
13
+ min-height: 100%;
14
+ }
15
+
16
+ body > header {
17
+ border-bottom: 1px solid var(--border-muted);
18
+ padding: 12px 16px;
19
+ background: var(--panel);
20
+ display: flex;
21
+ flex-wrap: wrap;
22
+ gap: 12px;
23
+ align-items: center;
24
+ justify-content: space-between;
25
+ }
26
+
27
+ h1 {
28
+ margin: 0;
29
+ font-size: 18px;
30
+ font-weight: 600;
31
+ display: inline-flex;
32
+ align-items: baseline;
33
+ gap: 8px;
34
+ }
35
+
36
+ .app-logo {
37
+ color: var(--accent);
38
+ font-weight: 700;
39
+ font-size: 21px;
40
+ line-height: 1;
41
+ display: inline-block;
42
+ }
43
+
44
+ .app-subtitle {
45
+ font-size: 12px;
46
+ font-weight: 500;
47
+ color: var(--muted);
48
+ }
49
+
50
+ .controls {
51
+ display: flex;
52
+ gap: 8px;
53
+ align-items: center;
54
+ flex-wrap: wrap;
55
+ }
56
+
57
+ button, select, .file-label {
58
+ border: 1px solid var(--border-muted);
59
+ background: var(--panel);
60
+ color: var(--text);
61
+ border-radius: 8px;
62
+ padding: 8px 10px;
63
+ font-size: 13px;
64
+ transition: background-color 120ms ease, border-color 120ms ease;
65
+ }
66
+
67
+ button {
68
+ cursor: pointer;
69
+ }
70
+
71
+ button:not(:disabled):hover,
72
+ select:hover,
73
+ .file-label:hover {
74
+ background: var(--panel-2);
75
+ }
76
+
77
+ button:focus-visible,
78
+ select:focus-visible,
79
+ .file-label:focus-within {
80
+ outline: 2px solid var(--accent-soft-strong);
81
+ outline-offset: 1px;
82
+ }
83
+
84
+ button:disabled {
85
+ opacity: 0.6;
86
+ cursor: not-allowed;
87
+ }
88
+
89
+ #sendRunBtn,
90
+ #critiqueBtn {
91
+ min-width: 10rem;
92
+ display: inline-flex;
93
+ justify-content: center;
94
+ align-items: center;
95
+ }
96
+
97
+ #sendRunBtn:not(:disabled):not(.request-stop-active),
98
+ #loadResponseBtn:not(:disabled):not([hidden]) {
99
+ background: var(--accent);
100
+ border-color: var(--accent);
101
+ color: var(--accent-contrast);
102
+ font-weight: 600;
103
+ }
104
+
105
+ #sendRunBtn:not(:disabled):not(.request-stop-active):hover,
106
+ #loadResponseBtn:not(:disabled):not([hidden]):hover {
107
+ filter: brightness(0.95);
108
+ }
109
+
110
+ #sendRunBtn.request-stop-active,
111
+ #critiqueBtn.request-stop-active {
112
+ background: var(--error);
113
+ border-color: var(--error);
114
+ color: var(--error-contrast);
115
+ font-weight: 600;
116
+ }
117
+
118
+ #sendRunBtn.request-stop-active:not(:disabled):hover,
119
+ #critiqueBtn.request-stop-active:not(:disabled):hover {
120
+ filter: brightness(0.95);
121
+ }
122
+
123
+ .file-label {
124
+ cursor: pointer;
125
+ display: inline-flex;
126
+ align-items: center;
127
+ gap: 6px;
128
+ }
129
+
130
+ .file-label input {
131
+ display: none;
132
+ }
133
+
134
+ main {
135
+ flex: 1;
136
+ min-height: 0;
137
+ display: grid;
138
+ grid-template-columns: 1fr 1fr;
139
+ gap: 12px;
140
+ padding: 12px;
141
+ }
142
+
143
+ section {
144
+ border: 1px solid var(--border-muted);
145
+ border-radius: 10px;
146
+ background: var(--panel);
147
+ min-height: 0;
148
+ display: flex;
149
+ flex-direction: column;
150
+ overflow: hidden;
151
+ box-shadow: var(--panel-shadow);
152
+ }
153
+
154
+ section.pane-active {
155
+ border-color: var(--border);
156
+ }
157
+
158
+ body.pane-focus-left main,
159
+ body.pane-focus-right main {
160
+ grid-template-columns: 1fr;
161
+ }
162
+
163
+ body.pane-focus-left #rightPane,
164
+ body.pane-focus-right #leftPane {
165
+ display: none;
166
+ }
167
+
168
+ body.pane-focus-left #leftPane,
169
+ body.pane-focus-right #rightPane {
170
+ border-color: var(--border);
171
+ }
172
+
173
+ .section-header {
174
+ padding: 10px 12px;
175
+ border-bottom: 1px solid var(--border-muted);
176
+ background: var(--panel-2);
177
+ font-weight: 600;
178
+ font-size: 14px;
179
+ display: flex;
180
+ align-items: center;
181
+ justify-content: space-between;
182
+ gap: 8px;
183
+ flex-wrap: wrap;
184
+ }
185
+
186
+ .section-header-main {
187
+ display: inline-flex;
188
+ align-items: center;
189
+ min-width: 0;
190
+ }
191
+
192
+ .section-header-actions {
193
+ display: inline-flex;
194
+ align-items: center;
195
+ gap: 8px;
196
+ flex-wrap: wrap;
197
+ justify-content: flex-end;
198
+ }
199
+
200
+ .section-header-actions button {
201
+ padding: 6px 9px;
202
+ font-size: 12px;
203
+ border-radius: 7px;
204
+ }
205
+
206
+ .section-header select {
207
+ font-weight: 600;
208
+ font-size: 14px;
209
+ border: none;
210
+ border-radius: 4px;
211
+ background: inherit;
212
+ color: inherit;
213
+ cursor: pointer;
214
+ padding: 2px 4px;
215
+ margin: 0;
216
+ -webkit-appearance: menulist;
217
+ appearance: menulist;
218
+ }
219
+
220
+ .reference-meta {
221
+ padding: 8px 10px;
222
+ border-bottom: 1px solid var(--border-muted);
223
+ background: var(--panel-2);
224
+ }
225
+
226
+ textarea {
227
+ width: 100%;
228
+ border: 1px solid var(--border-muted);
229
+ border-radius: 8px;
230
+ background: var(--panel);
231
+ color: var(--text);
232
+ padding: 10px;
233
+ font-size: 13px;
234
+ line-height: 1.45;
235
+ tab-size: 2;
236
+ font-family: var(--font-mono);
237
+ resize: vertical;
238
+ }
239
+
240
+ .source-wrap {
241
+ padding: 10px;
242
+ border-bottom: 1px solid var(--border-muted);
243
+ display: flex;
244
+ flex-direction: column;
245
+ gap: 8px;
246
+ flex: 1 1 auto;
247
+ min-height: 0;
248
+ }
249
+
250
+ .source-meta {
251
+ display: flex;
252
+ align-items: center;
253
+ justify-content: space-between;
254
+ gap: 8px;
255
+ flex-wrap: wrap;
256
+ }
257
+
258
+ .badge-row {
259
+ display: inline-flex;
260
+ align-items: center;
261
+ gap: 6px;
262
+ flex-wrap: wrap;
263
+ }
264
+
265
+ .source-badge {
266
+ border: 1px solid var(--border-muted);
267
+ background: var(--panel);
268
+ border-radius: 999px;
269
+ padding: 4px 10px;
270
+ font-size: 12px;
271
+ color: var(--muted);
272
+ white-space: nowrap;
273
+ }
274
+
275
+ .sync-badge.sync {
276
+ border-color: var(--border-muted);
277
+ color: var(--muted);
278
+ opacity: 0.88;
279
+ }
280
+
281
+ .source-actions {
282
+ display: flex;
283
+ flex-direction: column;
284
+ gap: 6px;
285
+ align-items: stretch;
286
+ width: 100%;
287
+ }
288
+
289
+ .source-actions-row {
290
+ display: flex;
291
+ gap: 6px;
292
+ flex-wrap: wrap;
293
+ align-items: center;
294
+ min-width: 0;
295
+ }
296
+
297
+ .source-actions button,
298
+ .source-actions select {
299
+ padding: 6px 9px;
300
+ font-size: 12px;
301
+ }
302
+
303
+ .resource-dir-btn {
304
+ padding: 4px 10px;
305
+ font-size: 12px;
306
+ border: 1px solid var(--border-muted);
307
+ border-radius: 999px;
308
+ background: var(--card);
309
+ color: var(--fg-muted);
310
+ cursor: pointer;
311
+ white-space: nowrap;
312
+ font-family: inherit;
313
+ }
314
+ .resource-dir-btn:hover {
315
+ color: var(--fg);
316
+ border-color: var(--fg-muted);
317
+ }
318
+ .resource-dir-label {
319
+ cursor: pointer;
320
+ max-width: 300px;
321
+ overflow: hidden;
322
+ text-overflow: ellipsis;
323
+ white-space: nowrap;
324
+ }
325
+ .resource-dir-label:hover {
326
+ color: var(--fg);
327
+ border-color: var(--fg-muted);
328
+ }
329
+ .resource-dir-input-wrap {
330
+ display: none;
331
+ gap: 3px;
332
+ align-items: center;
333
+ }
334
+ .resource-dir-input-wrap.visible {
335
+ display: inline-flex;
336
+ }
337
+ .resource-dir-input-wrap input[type="text"] {
338
+ width: 260px;
339
+ padding: 2px 6px;
340
+ font-size: 11px;
341
+ border: 1px solid var(--border-muted);
342
+ border-radius: 4px;
343
+ background: var(--editor-bg);
344
+ color: var(--fg);
345
+ font-family: var(--font-mono);
346
+ }
347
+ .resource-dir-input-wrap button {
348
+ padding: 2px 6px;
349
+ font-size: 11px;
350
+ cursor: pointer;
351
+ }
352
+
353
+ .editor-highlight-wrap {
354
+ position: relative;
355
+ display: flex;
356
+ flex: 1 1 auto;
357
+ min-height: 0;
358
+ max-height: none;
359
+ border: 1px solid var(--border-muted);
360
+ border-radius: 8px;
361
+ background: var(--editor-bg);
362
+ overflow: hidden;
363
+ overscroll-behavior: none;
364
+ }
365
+
366
+ .editor-highlight {
367
+ position: absolute;
368
+ inset: 0;
369
+ margin: 0;
370
+ border: 0;
371
+ border-radius: 8px;
372
+ padding: 10px;
373
+ overflow: auto;
374
+ pointer-events: none;
375
+ white-space: pre-wrap;
376
+ word-break: normal;
377
+ overflow-wrap: break-word;
378
+ overscroll-behavior: none;
379
+ font-family: var(--font-mono);
380
+ font-size: 13px;
381
+ line-height: 1.45;
382
+ tab-size: 2;
383
+ color: var(--text);
384
+ background: transparent;
385
+ }
386
+
387
+ #sourceText {
388
+ position: relative;
389
+ z-index: 1;
390
+ flex: 1 1 auto;
391
+ min-height: 180px;
392
+ max-height: none;
393
+ border: 0;
394
+ border-radius: 0;
395
+ background: transparent;
396
+ resize: none;
397
+ outline: none;
398
+ overscroll-behavior: none;
399
+ }
400
+
401
+ #sourceText.highlight-active {
402
+ color: transparent;
403
+ -webkit-text-fill-color: transparent;
404
+ caret-color: var(--text);
405
+ background: transparent;
406
+ }
407
+
408
+ #sourceText.highlight-active::selection {
409
+ background: var(--accent-soft);
410
+ color: transparent;
411
+ -webkit-text-fill-color: transparent;
412
+ }
413
+
414
+ .hl-heading {
415
+ color: var(--md-heading);
416
+ font-weight: 700;
417
+ }
418
+
419
+ .hl-fence {
420
+ color: var(--muted);
421
+ }
422
+
423
+ .hl-code {
424
+ color: var(--md-code);
425
+ }
426
+
427
+ .hl-code-kw {
428
+ color: var(--syntax-keyword);
429
+ font-weight: 600;
430
+ }
431
+
432
+ .hl-code-str {
433
+ color: var(--syntax-string);
434
+ }
435
+
436
+ .hl-code-num {
437
+ color: var(--syntax-number);
438
+ }
439
+
440
+ .hl-code-com {
441
+ color: var(--syntax-comment);
442
+ font-style: normal;
443
+ }
444
+
445
+ .hl-code-var,
446
+ .hl-code-key {
447
+ color: var(--syntax-variable);
448
+ }
449
+
450
+ .hl-diff-add {
451
+ color: var(--ok);
452
+ background: rgba(46, 160, 67, 0.12);
453
+ display: inline-block;
454
+ width: 100%;
455
+ }
456
+
457
+ .hl-diff-del {
458
+ color: var(--error);
459
+ background: rgba(248, 81, 73, 0.12);
460
+ display: inline-block;
461
+ width: 100%;
462
+ }
463
+
464
+ .hl-list {
465
+ color: var(--md-list-bullet);
466
+ font-weight: 600;
467
+ }
468
+
469
+ .hl-quote {
470
+ color: var(--md-quote);
471
+ font-style: normal;
472
+ }
473
+
474
+ .hl-link {
475
+ color: var(--md-link);
476
+ text-decoration: underline;
477
+ }
478
+
479
+ .hl-url {
480
+ color: var(--md-link-url);
481
+ }
482
+
483
+ .hl-annotation {
484
+ color: var(--accent);
485
+ background: var(--accent-soft);
486
+ border: 0;
487
+ border-radius: 4px;
488
+ padding: 0;
489
+ box-shadow: inset 0 0 0 1px var(--marker-border);
490
+ }
491
+
492
+ .hl-annotation-muted {
493
+ color: var(--muted);
494
+ opacity: 0.65;
495
+ }
496
+
497
+ .annotation-preview-marker {
498
+ color: var(--accent);
499
+ background: var(--accent-soft);
500
+ border: 1px solid var(--marker-border);
501
+ border-radius: 4px;
502
+ padding: 0 4px;
503
+ }
504
+
505
+ #sourcePreview {
506
+ flex: 1 1 auto;
507
+ min-height: 0;
508
+ max-height: none;
509
+ border: 1px solid var(--border-muted);
510
+ border-radius: 8px;
511
+ background: var(--panel);
512
+ }
513
+
514
+ .panel-scroll {
515
+ position: relative;
516
+ min-height: 0;
517
+ overflow: auto;
518
+ padding: 12px;
519
+ line-height: 1.52;
520
+ font-size: 14px;
521
+ }
522
+
523
+ .rendered-markdown {
524
+ overflow-wrap: anywhere;
525
+ line-height: 1.58;
526
+ font-size: 15px;
527
+ }
528
+
529
+ .rendered-markdown h1,
530
+ .rendered-markdown h2,
531
+ .rendered-markdown h3,
532
+ .rendered-markdown h4,
533
+ .rendered-markdown h5,
534
+ .rendered-markdown h6 {
535
+ margin-top: 1.2em;
536
+ margin-bottom: 0.5em;
537
+ line-height: 1.25;
538
+ letter-spacing: -0.01em;
539
+ color: var(--md-heading);
540
+ }
541
+
542
+ .rendered-markdown h1 {
543
+ font-size: 1.6em;
544
+ border-bottom: 0;
545
+ padding-bottom: 0;
546
+ }
547
+
548
+ .rendered-markdown h2 {
549
+ font-size: 1.25em;
550
+ border-bottom: 0;
551
+ padding-bottom: 0;
552
+ }
553
+
554
+ .rendered-markdown #title-block-header {
555
+ text-align: center;
556
+ margin-bottom: 2em;
557
+ }
558
+ .rendered-markdown #title-block-header .title {
559
+ margin-bottom: 0.25em;
560
+ }
561
+ .rendered-markdown #title-block-header .author,
562
+ .rendered-markdown #title-block-header .date {
563
+ margin-bottom: 0.15em;
564
+ color: var(--fg-muted);
565
+ }
566
+ .rendered-markdown #title-block-header .abstract {
567
+ text-align: left;
568
+ margin-top: 1em;
569
+ }
570
+ .rendered-markdown #title-block-header .abstract-title {
571
+ font-weight: 600;
572
+ margin-bottom: 0.25em;
573
+ }
574
+
575
+ .rendered-markdown p,
576
+ .rendered-markdown ul,
577
+ .rendered-markdown ol,
578
+ .rendered-markdown blockquote,
579
+ .rendered-markdown table {
580
+ margin-top: 0;
581
+ margin-bottom: 1em;
582
+ }
583
+
584
+ .rendered-markdown li::marker {
585
+ color: var(--md-list-bullet);
586
+ }
587
+
588
+ .rendered-markdown a {
589
+ color: var(--md-link);
590
+ text-decoration: none;
591
+ }
592
+
593
+ .rendered-markdown a:hover {
594
+ text-decoration: underline;
595
+ }
596
+
597
+ .rendered-markdown a.uri,
598
+ .rendered-markdown .uri {
599
+ color: var(--md-link-url);
600
+ }
601
+
602
+ .rendered-markdown blockquote {
603
+ margin-left: 0;
604
+ padding: 0.2em 1em;
605
+ border-left: 0.25em solid var(--md-quote-border);
606
+ border-radius: 0 8px 8px 0;
607
+ background: var(--blockquote-bg);
608
+ color: var(--md-quote);
609
+ }
610
+
611
+ .rendered-markdown pre {
612
+ background: var(--panel-2);
613
+ border: 1px solid var(--md-codeblock-border);
614
+ border-radius: 8px;
615
+ padding: 12px 14px;
616
+ overflow: auto;
617
+ margin-top: 0;
618
+ margin-bottom: 1em;
619
+ }
620
+
621
+ .rendered-markdown code {
622
+ font-family: var(--font-mono);
623
+ font-size: 0.9em;
624
+ color: var(--md-code);
625
+ }
626
+
627
+ .rendered-markdown pre code {
628
+ color: var(--md-codeblock);
629
+ }
630
+
631
+ .rendered-markdown :not(pre) > code {
632
+ background: rgba(127, 127, 127, 0.13);
633
+ border: 1px solid var(--md-codeblock-border);
634
+ border-radius: 6px;
635
+ padding: 0.12em 0.35em;
636
+ }
637
+
638
+ .rendered-markdown code span.kw,
639
+ .rendered-markdown code span.cf,
640
+ .rendered-markdown code span.im {
641
+ color: var(--syntax-keyword);
642
+ font-weight: 600;
643
+ }
644
+
645
+ .rendered-markdown code span.dt {
646
+ color: var(--syntax-type);
647
+ font-weight: 600;
648
+ }
649
+
650
+ .rendered-markdown code span.fu,
651
+ .rendered-markdown code span.bu {
652
+ color: var(--syntax-function);
653
+ }
654
+
655
+ .rendered-markdown code span.va,
656
+ .rendered-markdown code span.ot {
657
+ color: var(--syntax-variable);
658
+ }
659
+
660
+ .rendered-markdown code span.st,
661
+ .rendered-markdown code span.ss,
662
+ .rendered-markdown code span.sc,
663
+ .rendered-markdown code span.ch {
664
+ color: var(--syntax-string);
665
+ }
666
+
667
+ .rendered-markdown code span.dv,
668
+ .rendered-markdown code span.bn,
669
+ .rendered-markdown code span.fl {
670
+ color: var(--syntax-number);
671
+ }
672
+
673
+ .rendered-markdown code span.co {
674
+ color: var(--syntax-comment);
675
+ font-style: italic;
676
+ }
677
+
678
+ .rendered-markdown code span.op {
679
+ color: var(--syntax-operator);
680
+ }
681
+
682
+ .rendered-markdown code span.pp,
683
+ .rendered-markdown code span.pu {
684
+ color: var(--syntax-punctuation);
685
+ }
686
+
687
+ .rendered-markdown code span.er,
688
+ .rendered-markdown code span.al {
689
+ color: var(--error);
690
+ font-weight: 600;
691
+ }
692
+
693
+ /* Diff-specific overrides for pandoc code blocks */
694
+ .rendered-markdown pre.sourceCode.diff code > span:has(> .va) {
695
+ color: var(--ok);
696
+ background: rgba(46, 160, 67, 0.12);
697
+ }
698
+ .rendered-markdown pre.sourceCode.diff code > span:has(> .st) {
699
+ color: var(--error);
700
+ background: rgba(248, 81, 73, 0.12);
701
+ }
702
+ .rendered-markdown pre.sourceCode.diff code > span:has(> .dt) {
703
+ color: var(--syntax-function);
704
+ }
705
+ .rendered-markdown pre.sourceCode.diff code > span:has(> .kw) {
706
+ color: var(--syntax-keyword);
707
+ }
708
+ .rendered-markdown pre.sourceCode.diff .va,
709
+ .rendered-markdown pre.sourceCode.diff .st,
710
+ .rendered-markdown pre.sourceCode.diff .dt,
711
+ .rendered-markdown pre.sourceCode.diff .kw {
712
+ color: inherit;
713
+ font-weight: inherit;
714
+ }
715
+
716
+ .rendered-markdown table {
717
+ border-collapse: collapse;
718
+ display: block;
719
+ max-width: 100%;
720
+ overflow: auto;
721
+ }
722
+
723
+ .rendered-markdown th,
724
+ .rendered-markdown td {
725
+ border: 1px solid var(--border-muted);
726
+ padding: 6px 12px;
727
+ }
728
+
729
+ .rendered-markdown thead th {
730
+ background: var(--panel-2);
731
+ }
732
+
733
+ .rendered-markdown tbody tr:nth-child(even) {
734
+ background: var(--table-alt-bg);
735
+ }
736
+
737
+ .rendered-markdown hr {
738
+ border: 0;
739
+ border-top: 1px solid var(--md-hr);
740
+ margin: 1.25em 0;
741
+ }
742
+
743
+ .rendered-markdown img {
744
+ max-width: 100%;
745
+ }
746
+
747
+ .rendered-markdown math[display="block"] {
748
+ display: block;
749
+ margin: 1em 0;
750
+ overflow-x: auto;
751
+ overflow-y: hidden;
752
+ }
753
+
754
+ .rendered-markdown .mermaid-container {
755
+ text-align: center;
756
+ margin: 1em 0;
757
+ overflow-x: auto;
758
+ }
759
+
760
+ .rendered-markdown .mermaid-container svg {
761
+ max-width: 100%;
762
+ height: auto;
763
+ }
764
+
765
+ .plain-markdown {
766
+ margin: 0;
767
+ white-space: pre-wrap;
768
+ word-break: break-word;
769
+ font-family: var(--font-mono);
770
+ font-size: 13px;
771
+ line-height: 1.5;
772
+ }
773
+
774
+ .response-markdown-highlight {
775
+ margin: 0;
776
+ white-space: pre-wrap;
777
+ word-break: break-word;
778
+ overflow-wrap: anywhere;
779
+ font-family: var(--font-mono);
780
+ font-size: 13px;
781
+ line-height: 1.5;
782
+ }
783
+
784
+ .preview-loading {
785
+ color: var(--muted);
786
+ font-style: italic;
787
+ }
788
+
789
+ .panel-scroll.preview-pending::after {
790
+ content: "Updating";
791
+ position: absolute;
792
+ top: 10px;
793
+ right: 12px;
794
+ color: var(--muted);
795
+ font-size: 10px;
796
+ line-height: 1.2;
797
+ letter-spacing: 0.01em;
798
+ pointer-events: none;
799
+ opacity: 0.64;
800
+ }
801
+
802
+ .preview-error {
803
+ color: var(--warn);
804
+ margin-bottom: 0.75em;
805
+ font-size: 12px;
806
+ }
807
+
808
+ .preview-warning {
809
+ color: var(--warn);
810
+ margin-top: 0.75em;
811
+ font-size: 12px;
812
+ font-style: italic;
813
+ }
814
+
815
+ .marker {
816
+ display: inline-block;
817
+ padding: 0 4px;
818
+ border-radius: 5px;
819
+ border: 1px solid var(--marker-border);
820
+ background: var(--marker-bg);
821
+ cursor: pointer;
822
+ user-select: none;
823
+ }
824
+
825
+ .marker.active,
826
+ .critique-id.active {
827
+ outline: 2px solid var(--accent);
828
+ outline-offset: 1px;
829
+ }
830
+
831
+ .critique-id {
832
+ cursor: pointer;
833
+ color: var(--accent);
834
+ font-weight: 600;
835
+ text-decoration: underline;
836
+ text-underline-offset: 2px;
837
+ }
838
+
839
+ .response-wrap {
840
+ border-top: 1px solid var(--border-muted);
841
+ padding: 10px;
842
+ display: flex;
843
+ flex-direction: column;
844
+ gap: 8px;
845
+ }
846
+
847
+ .response-actions {
848
+ display: flex;
849
+ flex-direction: column;
850
+ align-items: stretch;
851
+ gap: 8px;
852
+ }
853
+
854
+ .response-actions-row {
855
+ display: flex;
856
+ align-items: center;
857
+ gap: 8px;
858
+ flex-wrap: wrap;
859
+ min-width: 0;
860
+ }
861
+
862
+ .response-actions-row.history-row {
863
+ flex-wrap: nowrap;
864
+ overflow-x: auto;
865
+ padding-bottom: 2px;
866
+ scrollbar-width: thin;
867
+ }
868
+
869
+ .response-actions-row.history-row > * {
870
+ flex: 0 0 auto;
871
+ }
872
+
873
+ footer {
874
+ border-top: 1px solid var(--border-muted);
875
+ padding: 8px 12px;
876
+ color: var(--muted);
877
+ font-size: 12px;
878
+ min-height: 32px;
879
+ background: var(--panel);
880
+ display: grid;
881
+ grid-template-columns: minmax(0, 1fr) auto;
882
+ grid-template-areas:
883
+ "status status"
884
+ "meta hint";
885
+ column-gap: 12px;
886
+ row-gap: 3px;
887
+ align-items: start;
888
+ }
889
+
890
+ #statusLine {
891
+ grid-area: status;
892
+ display: inline-flex;
893
+ align-items: center;
894
+ gap: 0;
895
+ min-width: 0;
896
+ justify-self: start;
897
+ text-align: left;
898
+ }
899
+
900
+ #statusLine.with-spinner {
901
+ gap: 6px;
902
+ }
903
+
904
+ #statusSpinner {
905
+ width: 0;
906
+ max-width: 0;
907
+ overflow: hidden;
908
+ opacity: 0;
909
+ text-align: center;
910
+ color: var(--accent);
911
+ font-family: var(--font-mono);
912
+ flex: 0 0 auto;
913
+ transition: opacity 120ms ease;
914
+ }
915
+
916
+ #statusLine.with-spinner #statusSpinner {
917
+ width: 1.1em;
918
+ max-width: 1.1em;
919
+ opacity: 1;
920
+ }
921
+
922
+ #status {
923
+ min-width: 0;
924
+ white-space: nowrap;
925
+ overflow: hidden;
926
+ text-overflow: ellipsis;
927
+ text-align: left;
928
+ }
929
+
930
+ .footer-meta {
931
+ grid-area: meta;
932
+ justify-self: start;
933
+ color: var(--muted);
934
+ font-size: 11px;
935
+ text-align: left;
936
+ max-width: 100%;
937
+ display: inline-flex;
938
+ align-items: center;
939
+ gap: 8px;
940
+ min-width: 0;
941
+ }
942
+
943
+ .footer-meta-text {
944
+ min-width: 0;
945
+ white-space: nowrap;
946
+ overflow: hidden;
947
+ text-overflow: ellipsis;
948
+ }
949
+
950
+ .shortcut-hint {
951
+ grid-area: hint;
952
+ justify-self: end;
953
+ align-self: center;
954
+ color: var(--muted);
955
+ font-size: 11px;
956
+ white-space: nowrap;
957
+ text-align: right;
958
+ font-style: normal;
959
+ opacity: 0.9;
960
+ display: inline-flex;
961
+ align-items: center;
962
+ gap: 8px;
963
+ }
964
+
965
+ .footer-compact-btn {
966
+ padding: 4px 8px;
967
+ font-size: 11px;
968
+ line-height: 1.2;
969
+ border-radius: 999px;
970
+ border: 1px solid var(--border-muted);
971
+ background: var(--panel-2);
972
+ color: var(--text);
973
+ white-space: nowrap;
974
+ flex: 0 0 auto;
975
+ }
976
+
977
+ .footer-compact-btn:not(:disabled):hover {
978
+ background: var(--panel);
979
+ }
980
+
981
+ #status.error { color: var(--error); }
982
+ #status.warning { color: var(--warn); }
983
+ #status.success { color: var(--ok); }
984
+
985
+ @media (max-width: 980px) {
986
+ footer {
987
+ grid-template-columns: 1fr;
988
+ grid-template-areas:
989
+ "status"
990
+ "meta"
991
+ "hint";
992
+ }
993
+
994
+ .footer-meta {
995
+ justify-self: start;
996
+ max-width: 100%;
997
+ }
998
+
999
+ .shortcut-hint {
1000
+ justify-self: start;
1001
+ text-align: left;
1002
+ white-space: normal;
1003
+ flex-wrap: wrap;
1004
+ gap: 6px;
1005
+ }
1006
+ }
1007
+
1008
+ @media (max-width: 1080px) {
1009
+ main {
1010
+ grid-template-columns: 1fr;
1011
+ }
1012
+ }