@shiyuphan/follow-me 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/ui/style.css CHANGED
@@ -4,7 +4,7 @@
4
4
  --panel: #f6f7f9;
5
5
  --border: #d8dce2;
6
6
  --text: #1c2026;
7
- --muted: #6a7280;
7
+ --muted: #5f6774;
8
8
  --accent: #2459d6;
9
9
  --accent-text: #ffffff;
10
10
  --add-bg: #e3f6e8;
@@ -12,8 +12,24 @@
12
12
  --del-bg: #fde7e7;
13
13
  --del-text: #8a1c1c;
14
14
  --select-bg: #fff3c4;
15
+ --select-edge: #b38600;
15
16
  --comment-bg: #eef3ff;
17
+ --sev-blocker: #b42318;
18
+ --sev-major: #8a5300;
19
+ --sev-minor: #5f6774;
20
+ --question-bg: #eef1f4;
21
+ --question-edge: #5f6774;
22
+ --tok-comment: #5b6472;
23
+ --tok-keyword: #a8227e;
24
+ --tok-string: #8a4b08;
25
+ --tok-number: #00687d;
26
+ --tok-function: #1a4fc4;
27
+ --tok-type: #6b3fc0;
28
+ --tok-property: #3b5f8f;
29
+ --tok-tag: #b0261e;
16
30
  --font-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
31
+ --gutter: 9ch;
32
+ --sidebar: 300px;
17
33
  }
18
34
 
19
35
  @media (prefers-color-scheme: dark) {
@@ -30,7 +46,21 @@
30
46
  --del-bg: #3a1a1c;
31
47
  --del-text: #ff9b9b;
32
48
  --select-bg: #4a4012;
49
+ --select-edge: #e0b830;
33
50
  --comment-bg: #1b2538;
51
+ --sev-blocker: #ff9b9b;
52
+ --sev-major: #f0b64a;
53
+ --sev-minor: #9aa3b2;
54
+ --question-bg: #222831;
55
+ --question-edge: #8d96a5;
56
+ --tok-comment: #adb5c3;
57
+ --tok-keyword: #ff8fd6;
58
+ --tok-string: #f0c674;
59
+ --tok-number: #5fd8ee;
60
+ --tok-function: #8fb4ff;
61
+ --tok-type: #c3a6ff;
62
+ --tok-property: #9db7d8;
63
+ --tok-tag: #ff9a8f;
34
64
  }
35
65
  }
36
66
 
@@ -63,6 +93,23 @@ body {
63
93
  background: var(--panel);
64
94
  }
65
95
 
96
+ .banner {
97
+ display: flex;
98
+ align-items: center;
99
+ gap: 12px;
100
+ padding: 6px 16px;
101
+ border-bottom: 1px solid var(--border);
102
+ background: var(--comment-bg);
103
+ }
104
+
105
+ .banner[hidden] {
106
+ display: none;
107
+ }
108
+
109
+ .banner span {
110
+ flex: 1;
111
+ }
112
+
66
113
  .sessions {
67
114
  display: flex;
68
115
  gap: 8px;
@@ -83,21 +130,6 @@ body {
83
130
  text-decoration: none;
84
131
  }
85
132
 
86
- body.index {
87
- display: block;
88
- height: auto;
89
- padding: 16px 24px;
90
- }
91
-
92
- .session-index {
93
- padding-left: 18px;
94
- }
95
-
96
- .session-index a {
97
- color: var(--accent);
98
- font-weight: 600;
99
- }
100
-
101
133
  .status {
102
134
  margin-left: auto;
103
135
  color: var(--del-text);
@@ -133,55 +165,81 @@ button.link {
133
165
  .layout {
134
166
  flex: 1;
135
167
  display: grid;
136
- grid-template-columns: 300px 1fr;
168
+ grid-template-columns: var(--sidebar) minmax(0, 1fr) auto;
137
169
  min-height: 0;
138
170
  }
139
171
 
140
- .sidebar {
172
+ .diagram-panel {
173
+ width: 380px;
141
174
  display: flex;
142
175
  flex-direction: column;
143
- border-right: 1px solid var(--border);
176
+ border-left: 1px solid var(--border);
144
177
  background: var(--panel);
145
178
  min-height: 0;
146
179
  }
147
180
 
148
- .commit-list {
149
- list-style: none;
150
- margin: 0;
151
- padding: 0;
152
- overflow-y: auto;
153
- flex: 1;
181
+ .diagram-panel[hidden] {
182
+ display: none;
183
+ }
184
+
185
+ .diagram-panel.collapsed {
186
+ width: auto;
154
187
  }
155
188
 
156
- .commit-list li {
189
+ .diagram-head {
157
190
  display: flex;
191
+ align-items: center;
158
192
  gap: 8px;
159
193
  padding: 8px 12px;
160
- cursor: pointer;
161
- border-left: 3px solid transparent;
194
+ font-size: 13px;
195
+ overflow: hidden;
196
+ white-space: nowrap;
162
197
  }
163
198
 
164
- .commit-list li:hover {
165
- background: var(--bg);
199
+ #diagram-toggle::before {
200
+ content: "▾ ";
166
201
  }
167
202
 
168
- .commit-list li.selected {
169
- background: var(--bg);
170
- border-left-color: var(--accent);
171
- font-weight: 600;
203
+ .diagram-panel.collapsed #diagram-toggle::before {
204
+ content: "◂ ";
172
205
  }
173
206
 
174
- .commit-list .index {
175
- color: var(--muted);
176
- min-width: 2ch;
177
- text-align: right;
207
+ .diagram-body {
208
+ flex: 1;
209
+ overflow: auto;
210
+ padding: 8px 12px 16px;
178
211
  }
179
212
 
180
- .commit-list .title {
213
+ .diagram-panel.collapsed .diagram-body,
214
+ .diagram-panel.collapsed #diagram-from {
215
+ display: none;
216
+ }
217
+
218
+ .diagram-body svg {
219
+ max-width: 100%;
220
+ height: auto;
221
+ }
222
+
223
+ .diagram-error {
224
+ color: var(--del-text);
225
+ white-space: pre-wrap;
226
+ font-size: 12px;
227
+ }
228
+
229
+ .sidebar {
230
+ display: flex;
231
+ flex-direction: column;
232
+ border-right: 1px solid var(--border);
233
+ background: var(--panel);
234
+ min-height: 0;
235
+ }
236
+
237
+ .commit-list {
238
+ list-style: none;
239
+ margin: 0;
240
+ padding: 0;
241
+ overflow-y: auto;
181
242
  flex: 1;
182
- overflow: hidden;
183
- text-overflow: ellipsis;
184
- white-space: nowrap;
185
243
  }
186
244
 
187
245
  .badge {
@@ -202,11 +260,127 @@ button.link {
202
260
  padding: 16px 24px 64px;
203
261
  }
204
262
 
205
- .commit-head h2 {
206
- margin: 0 0 4px;
263
+ .stage {
264
+ position: sticky;
265
+ top: -16px;
266
+ z-index: 2;
267
+ margin: -16px -24px 8px;
268
+ padding: 10px 24px 8px;
269
+ background: var(--bg);
270
+ border-bottom: 1px solid var(--border);
271
+ }
272
+
273
+ .stage h2 {
274
+ margin: 0;
275
+ font-size: 15px;
276
+ overflow: hidden;
277
+ text-overflow: ellipsis;
278
+ white-space: nowrap;
279
+ }
280
+
281
+ .stage h2:focus {
282
+ outline: none;
283
+ }
284
+
285
+ .stage .part {
286
+ font-weight: 400;
287
+ color: var(--muted);
288
+ }
289
+
290
+ .play {
291
+ display: inline-flex;
292
+ align-items: center;
293
+ justify-content: center;
294
+ gap: 6px;
295
+ width: 92px;
296
+ }
297
+
298
+ .play .icon {
299
+ width: 1.2em;
300
+ font-size: 12px;
301
+ text-align: center;
302
+ }
303
+
304
+ .steps,
305
+ .strip {
306
+ margin: 0;
307
+ padding: 0;
308
+ border: none;
309
+ min-inline-size: 0;
310
+ }
311
+
312
+ .steps {
313
+ display: flex;
314
+ gap: 4px;
315
+ }
316
+
317
+ .strip {
318
+ flex: 1 1 160px;
319
+ min-width: 120px;
320
+ display: flex;
321
+ gap: 3px;
322
+ height: 14px;
323
+ }
324
+
325
+ .strip .seg {
326
+ position: relative;
327
+ flex-basis: 0;
328
+ min-width: 6px;
329
+ padding: 0;
330
+ border: none;
331
+ border-radius: 3px;
332
+ background: var(--border);
333
+ overflow: hidden;
334
+ }
335
+
336
+ .strip .seg.here {
337
+ outline: 1px solid var(--accent);
338
+ }
339
+
340
+ .strip .fill {
341
+ position: absolute;
342
+ inset: 0 auto 0 0;
343
+ background: var(--accent);
344
+ }
345
+
346
+ .keys {
347
+ border: 1px solid var(--border);
348
+ border-radius: 8px;
349
+ background: var(--bg);
350
+ color: var(--text);
351
+ padding: 16px 20px;
352
+ min-width: 360px;
353
+ }
354
+
355
+ .keys::backdrop {
356
+ background: rgb(0 0 0 / 0.3);
357
+ }
358
+
359
+ .keys h2 {
360
+ margin: 0 0 8px;
207
361
  font-size: 16px;
208
362
  }
209
363
 
364
+ .keys dl {
365
+ display: grid;
366
+ grid-template-columns: auto 1fr;
367
+ gap: 6px 16px;
368
+ margin: 0 0 12px;
369
+ }
370
+
371
+ .keys dd {
372
+ margin: 0;
373
+ }
374
+
375
+ kbd {
376
+ font: 12px var(--font-mono);
377
+ padding: 1px 5px;
378
+ border: 1px solid var(--border);
379
+ border-bottom-width: 2px;
380
+ border-radius: 4px;
381
+ background: var(--panel);
382
+ }
383
+
210
384
  .message {
211
385
  font-family: var(--font-mono);
212
386
  white-space: pre-wrap;
@@ -271,25 +445,52 @@ button.link {
271
445
  }
272
446
 
273
447
  .dl .gutter {
274
- width: 4ch;
275
- text-align: right;
276
- padding-right: 6px;
448
+ position: relative;
449
+ display: flex;
450
+ flex: none;
451
+ width: var(--gutter);
277
452
  color: var(--muted);
278
453
  user-select: none;
279
454
  }
280
455
 
456
+ .dl .ln {
457
+ width: 50%;
458
+ padding-right: 6px;
459
+ text-align: right;
460
+ }
461
+
462
+ .add-comment {
463
+ position: absolute;
464
+ left: 0;
465
+ top: 0;
466
+ width: 1.6em;
467
+ height: 1.5em;
468
+ padding: 0;
469
+ border: none;
470
+ border-radius: 4px;
471
+ background: var(--accent);
472
+ color: var(--accent-text);
473
+ font: 600 12px / 1.5em var(--font-mono);
474
+ text-align: center;
475
+ opacity: 0;
476
+ }
477
+
478
+ .dl.mine:hover .add-comment,
479
+ .dl.mine:focus-within .add-comment,
480
+ .dl.mine:focus .add-comment {
481
+ opacity: 1;
482
+ }
483
+
484
+ .narration.notice {
485
+ border-left-color: var(--select-edge);
486
+ background: var(--select-bg);
487
+ }
488
+
281
489
  .dl .op {
282
490
  width: 2ch;
283
491
  user-select: none;
284
492
  }
285
493
 
286
- .dl .label {
287
- margin-left: 12px;
288
- font-size: 11px;
289
- color: var(--muted);
290
- font-style: italic;
291
- }
292
-
293
494
  .dl.add.mine {
294
495
  background: var(--add-bg);
295
496
  color: var(--add-text);
@@ -300,19 +501,35 @@ button.link {
300
501
  color: var(--del-text);
301
502
  }
302
503
 
303
- .dl.other {
304
- opacity: 0.4;
504
+ .dl.mine {
505
+ cursor: pointer;
305
506
  }
306
507
 
307
- .dl.mine.pickable {
308
- cursor: pointer;
508
+ .fold {
509
+ display: block;
510
+ width: 100%;
511
+ padding: 1px 10px 1px calc(var(--gutter) + 2ch);
512
+ border: none;
513
+ border-radius: 0;
514
+ border-block: 1px dashed var(--border);
515
+ background: var(--panel);
516
+ color: var(--muted);
517
+ font: inherit;
518
+ text-align: left;
309
519
  }
310
520
 
311
- .dl.picked {
312
- outline: 2px solid var(--accent);
313
- outline-offset: -2px;
521
+ .fold:hover {
522
+ color: var(--accent);
523
+ }
524
+
525
+ .unit-head .scope {
526
+ color: var(--text);
527
+ }
528
+
529
+ .dl.mine.picked {
314
530
  background: var(--select-bg);
315
531
  color: var(--text);
532
+ box-shadow: inset 3px 0 0 var(--select-edge);
316
533
  }
317
534
 
318
535
  .comments {
@@ -357,11 +574,24 @@ textarea {
357
574
  margin-top: 4px;
358
575
  }
359
576
 
577
+ .box .hint {
578
+ align-self: center;
579
+ color: var(--muted);
580
+ font-size: 12px;
581
+ }
582
+
583
+ .diff .box {
584
+ margin: 4px 10px 8px calc(var(--gutter) + 2ch);
585
+ font-family: system-ui, sans-serif;
586
+ }
587
+
360
588
  .done {
361
589
  position: fixed;
362
590
  inset: 0;
363
- display: grid;
364
- place-items: center;
591
+ z-index: 10;
592
+ display: flex;
593
+ align-items: center;
594
+ justify-content: center;
365
595
  background: var(--bg);
366
596
  font-size: 16px;
367
597
  padding: 24px;
@@ -381,9 +611,10 @@ textarea {
381
611
 
382
612
  .player {
383
613
  display: flex;
384
- flex-wrap: wrap;
614
+ flex-wrap: nowrap;
385
615
  align-items: center;
386
- gap: 8px 12px;
616
+ gap: 12px;
617
+ white-space: nowrap;
387
618
  padding: 6px 16px;
388
619
  border-bottom: 1px solid var(--border);
389
620
  background: var(--panel);
@@ -416,51 +647,685 @@ select:disabled {
416
647
  cursor: default;
417
648
  }
418
649
 
419
- .caption {
420
- flex: 1 1 320px;
421
- margin: 0;
650
+ .narration {
651
+ margin: 8px 0;
652
+ padding: 8px 14px;
653
+ border-left: 3px solid var(--accent);
654
+ border-radius: 0 6px 6px 0;
655
+ background: var(--comment-bg);
656
+ font:
657
+ 15px / 1.5 system-ui,
658
+ sans-serif;
659
+ white-space: pre-wrap;
660
+ }
661
+
662
+ .diff .narration {
663
+ margin: 6px 10px;
664
+ }
665
+
666
+ .narration.label {
667
+ border-left-color: var(--border);
668
+ background: var(--panel);
669
+ color: var(--muted);
670
+ font-size: 13px;
671
+ }
672
+
673
+ /* Every token colour keeps 4.5:1 on the page, the add and remove tints and the picked tint. */
674
+ .tok-comment {
675
+ color: var(--tok-comment);
422
676
  font-style: italic;
423
- color: var(--text);
677
+ }
678
+
679
+ .tok-keyword {
680
+ color: var(--tok-keyword);
681
+ }
682
+
683
+ .tok-string {
684
+ color: var(--tok-string);
685
+ }
686
+
687
+ .tok-number {
688
+ color: var(--tok-number);
689
+ }
690
+
691
+ .tok-function {
692
+ color: var(--tok-function);
693
+ }
694
+
695
+ .tok-type {
696
+ color: var(--tok-type);
697
+ }
698
+
699
+ .tok-property {
700
+ color: var(--tok-property);
701
+ }
702
+
703
+ .tok-tag {
704
+ color: var(--tok-tag);
424
705
  }
425
706
 
426
707
  .dl.pending {
427
708
  display: none;
428
709
  }
429
710
 
430
- .dl.gone {
431
- opacity: 0;
432
- max-height: 0;
433
- overflow: hidden;
434
- transition:
435
- opacity 0.5s ease,
436
- max-height 0.3s ease 0.5s;
711
+ .dl.del .text {
712
+ text-decoration: line-through;
437
713
  }
438
714
 
439
- .dl.current {
440
- outline: 2px solid var(--accent);
441
- outline-offset: -2px;
442
- animation: type-in 0.25s steps(16, end);
715
+ .dl.in-chunk,
716
+ .unit.in-chunk .card {
717
+ box-shadow: inset 3px 0 0 var(--accent);
718
+ animation: reveal 0.2s ease-out;
443
719
  }
444
720
 
445
- .dl.gone.current {
446
- opacity: 0.45;
447
- max-height: 2em;
448
- text-decoration: line-through;
721
+ .ph {
722
+ padding: 0 10px 0 calc(var(--gutter) + 2ch);
723
+ color: var(--muted);
724
+ font-style: italic;
725
+ background: var(--panel);
726
+ }
727
+
728
+ .ph.in-chunk {
729
+ box-shadow: inset 3px 0 0 var(--accent);
730
+ }
731
+
732
+ .countdown {
733
+ margin: 6px 0 0;
734
+ color: var(--muted);
735
+ font-size: 13px;
736
+ }
737
+
738
+ .countdown .bar {
739
+ display: block;
740
+ height: 2px;
741
+ margin-top: 4px;
742
+ background: var(--accent);
743
+ transform-origin: left;
744
+ animation: countdown linear forwards;
745
+ }
746
+
747
+ .countdown.paused .bar {
748
+ animation-play-state: paused;
749
+ }
750
+
751
+ @keyframes reveal {
752
+ from {
753
+ opacity: 0;
754
+ }
755
+ to {
756
+ opacity: 1;
757
+ }
449
758
  }
450
759
 
451
- @keyframes type-in {
760
+ @keyframes countdown {
452
761
  from {
453
- clip-path: inset(0 100% 0 0);
762
+ transform: scaleX(1);
454
763
  }
455
764
  to {
456
- clip-path: inset(0 0 0 0);
765
+ transform: scaleX(0);
457
766
  }
458
767
  }
459
768
 
460
769
  @media (prefers-reduced-motion: reduce) {
461
- .dl.current,
462
- .dl.gone {
770
+ .dl.in-chunk,
771
+ .unit.in-chunk .card {
463
772
  animation: none;
464
- transition: none;
465
773
  }
466
774
  }
775
+
776
+ :focus-visible {
777
+ outline: 2px solid var(--accent);
778
+ outline-offset: -2px;
779
+ }
780
+
781
+ .status.error::before {
782
+ content: "⚠ ";
783
+ }
784
+
785
+ body.index {
786
+ display: block;
787
+ height: auto;
788
+ min-height: 100vh;
789
+ padding: 0;
790
+ }
791
+
792
+ .index-main {
793
+ max-width: 880px;
794
+ margin: 0 auto;
795
+ padding: 24px;
796
+ }
797
+
798
+ .index-main h1 {
799
+ font-size: 20px;
800
+ margin: 8px 0 16px;
801
+ }
802
+
803
+ .session-index {
804
+ list-style: none;
805
+ margin: 0;
806
+ padding: 0;
807
+ border: 1px solid var(--border);
808
+ border-radius: 8px;
809
+ }
810
+
811
+ .session-index li {
812
+ display: grid;
813
+ grid-template-columns: 1fr auto;
814
+ gap: 2px 16px;
815
+ padding: 12px 16px;
816
+ border-top: 1px solid var(--border);
817
+ }
818
+
819
+ .session-index li:first-child {
820
+ border-top: none;
821
+ }
822
+
823
+ .session-index .session {
824
+ color: var(--text);
825
+ font-weight: 600;
826
+ text-decoration: none;
827
+ }
828
+
829
+ .session-index .branch {
830
+ color: var(--accent);
831
+ }
832
+
833
+ .session-index .session:hover .branch {
834
+ text-decoration: underline;
835
+ }
836
+
837
+ .session-index .path {
838
+ grid-column: 1 / -1;
839
+ font: 12px var(--font-mono);
840
+ }
841
+
842
+ .mode {
843
+ justify-self: end;
844
+ padding: 0 8px;
845
+ border-radius: 10px;
846
+ font-size: 12px;
847
+ background: var(--comment-bg);
848
+ color: var(--text);
849
+ }
850
+
851
+ .empty {
852
+ margin-top: 15vh;
853
+ text-align: center;
854
+ }
855
+
856
+ .empty a,
857
+ .done-card a {
858
+ color: var(--accent);
859
+ }
860
+
861
+ .empty code,
862
+ .done-card code {
863
+ font-family: var(--font-mono);
864
+ background: var(--panel);
865
+ padding: 1px 6px;
866
+ border-radius: 4px;
867
+ }
868
+
869
+ .done-card {
870
+ width: min(520px, 100%);
871
+ padding: 24px 28px;
872
+ border: 1px solid var(--border);
873
+ border-radius: 10px;
874
+ background: var(--panel);
875
+ text-align: left;
876
+ }
877
+
878
+ .done-card h1 {
879
+ margin: 0 0 4px;
880
+ font-size: 20px;
881
+ }
882
+
883
+ .done-card h1:focus {
884
+ outline: none;
885
+ }
886
+
887
+ .done-card p {
888
+ margin: 8px 0;
889
+ }
890
+
891
+ .done-card .next {
892
+ display: flex;
893
+ align-items: center;
894
+ gap: 8px;
895
+ }
896
+
897
+ #confirm-end .row {
898
+ display: flex;
899
+ gap: 8px;
900
+ }
901
+
902
+ .commit-row {
903
+ display: flex;
904
+ align-items: flex-start;
905
+ gap: 8px;
906
+ width: 100%;
907
+ padding: 6px 12px;
908
+ border: none;
909
+ border-left: 3px solid transparent;
910
+ border-radius: 0;
911
+ background: none;
912
+ color: inherit;
913
+ text-align: left;
914
+ }
915
+
916
+ .commit-row:hover,
917
+ .commit-list li.selected .commit-row {
918
+ background: var(--bg);
919
+ }
920
+
921
+ .commit-list li.selected .commit-row {
922
+ border-left-color: var(--accent);
923
+ }
924
+
925
+ .commit-list .title {
926
+ flex: 1;
927
+ min-width: 0;
928
+ white-space: normal;
929
+ overflow-wrap: anywhere;
930
+ font-size: 13px;
931
+ line-height: 1.35;
932
+ display: -webkit-box;
933
+ -webkit-box-orient: vertical;
934
+ -webkit-line-clamp: 2;
935
+ line-clamp: 2;
936
+ overflow: hidden;
937
+ }
938
+
939
+ .commit-list li.selected .title {
940
+ -webkit-line-clamp: unset;
941
+ line-clamp: none;
942
+ }
943
+
944
+ .commit-list .index,
945
+ .commit-list .mark,
946
+ .commit-list .badge {
947
+ line-height: 1.35;
948
+ margin-top: 1px;
949
+ }
950
+
951
+ .commit-list .index {
952
+ color: var(--muted);
953
+ min-width: 2ch;
954
+ text-align: right;
955
+ font-size: 13px;
956
+ }
957
+
958
+ .commit-list .mark {
959
+ color: var(--accent);
960
+ font-size: 12px;
961
+ }
962
+
963
+ .commits-toggle,
964
+ .rail-tip {
965
+ display: none;
966
+ }
967
+
968
+ @media (max-width: 1199px) {
969
+ :root {
970
+ --sidebar: 240px;
971
+ }
972
+
973
+ .diagram-panel {
974
+ width: 300px;
975
+ }
976
+ }
977
+
978
+ /* Below 900px the sidebar is a rail of numbers; the stage header carries the title. */
979
+ @media (max-width: 899px) {
980
+ :root {
981
+ --sidebar: 56px;
982
+ }
983
+
984
+ .sidebar {
985
+ position: relative;
986
+ z-index: 3;
987
+ }
988
+
989
+ .commits-toggle {
990
+ display: block;
991
+ margin: 6px 4px;
992
+ padding: 2px 0;
993
+ font-size: 11px;
994
+ }
995
+
996
+ .sidebar:not(.open) .commit-row {
997
+ flex-direction: column;
998
+ align-items: center;
999
+ gap: 2px;
1000
+ padding: 6px 0;
1001
+ }
1002
+
1003
+ .sidebar:not(.open) .commit-list .title {
1004
+ position: absolute;
1005
+ width: 1px;
1006
+ height: 1px;
1007
+ overflow: hidden;
1008
+ clip-path: inset(50%);
1009
+ }
1010
+
1011
+ .sidebar:not(.open) .commit-list .index {
1012
+ text-align: center;
1013
+ }
1014
+
1015
+ .sidebar:not(.open) .plan-note,
1016
+ .sidebar:not(.open) .answers {
1017
+ display: none;
1018
+ }
1019
+
1020
+ .sidebar.open {
1021
+ width: 300px;
1022
+ box-shadow: 4px 0 16px rgb(0 0 0 / 0.15);
1023
+ }
1024
+
1025
+ .rail-tip:not([hidden]) {
1026
+ display: block;
1027
+ position: fixed;
1028
+ z-index: 20;
1029
+ max-width: 320px;
1030
+ padding: 4px 8px;
1031
+ border-radius: 4px;
1032
+ background: var(--text);
1033
+ color: var(--bg);
1034
+ font-size: 13px;
1035
+ pointer-events: none;
1036
+ }
1037
+ }
1038
+
1039
+ .comment.question {
1040
+ background: var(--question-bg);
1041
+ box-shadow: inset 3px 0 0 var(--question-edge);
1042
+ }
1043
+
1044
+ .reply {
1045
+ margin: 6px 0 0 14px;
1046
+ padding: 4px 10px;
1047
+ border-left: 2px solid var(--border);
1048
+ }
1049
+
1050
+ .reply.agent {
1051
+ border-left-color: var(--accent);
1052
+ }
1053
+
1054
+ .reply .said {
1055
+ white-space: pre-wrap;
1056
+ }
1057
+
1058
+ .reply-diagram {
1059
+ overflow-x: auto;
1060
+ margin: 6px 0;
1061
+ }
1062
+
1063
+ .reply-diagram svg {
1064
+ max-width: 100%;
1065
+ height: auto;
1066
+ }
1067
+
1068
+ .kind {
1069
+ display: flex;
1070
+ gap: 4px;
1071
+ margin-bottom: 4px;
1072
+ }
1073
+
1074
+ .kind button[aria-pressed="true"] {
1075
+ background: var(--accent);
1076
+ border-color: var(--accent);
1077
+ color: var(--accent-text);
1078
+ }
1079
+
1080
+ .badge.question {
1081
+ background: var(--question-bg);
1082
+ color: var(--text);
1083
+ box-shadow: inset 0 0 0 1px var(--question-edge);
1084
+ }
1085
+
1086
+ .answers {
1087
+ border-top: 1px solid var(--border);
1088
+ padding: 8px 12px;
1089
+ max-height: 45%;
1090
+ overflow-y: auto;
1091
+ }
1092
+
1093
+ .answers[hidden] {
1094
+ display: none;
1095
+ }
1096
+
1097
+ .answer-row {
1098
+ display: block;
1099
+ width: 100%;
1100
+ margin-top: 4px;
1101
+ text-align: left;
1102
+ font-size: 13px;
1103
+ overflow: hidden;
1104
+ text-overflow: ellipsis;
1105
+ white-space: nowrap;
1106
+ }
1107
+
1108
+ .answer-row.done {
1109
+ color: var(--muted);
1110
+ }
1111
+
1112
+ .answer {
1113
+ margin: 8px 10px;
1114
+ padding: 8px 12px;
1115
+ border-radius: 6px;
1116
+ background: var(--comment-bg);
1117
+ box-shadow: inset 3px 0 0 var(--accent);
1118
+ }
1119
+
1120
+ .answer .said {
1121
+ white-space: pre-wrap;
1122
+ }
1123
+
1124
+ .answer .meta {
1125
+ margin-top: 6px;
1126
+ color: var(--muted);
1127
+ font-size: 12px;
1128
+ }
1129
+
1130
+ .answer-actions {
1131
+ display: flex;
1132
+ gap: 8px;
1133
+ margin-top: 8px;
1134
+ }
1135
+
1136
+ .answer.resolved {
1137
+ display: flex;
1138
+ justify-content: space-between;
1139
+ align-items: center;
1140
+ color: var(--muted);
1141
+ background: none;
1142
+ box-shadow: none;
1143
+ padding: 2px 12px;
1144
+ }
1145
+
1146
+ .answers .answer {
1147
+ margin: 6px 0;
1148
+ }
1149
+
1150
+ .quote {
1151
+ margin: 6px 0;
1152
+ padding: 4px 8px;
1153
+ overflow-x: auto;
1154
+ font: 12px / 1.5 var(--font-mono);
1155
+ background: var(--panel);
1156
+ border-radius: 4px;
1157
+ }
1158
+
1159
+ .concern {
1160
+ margin: 6px 10px 8px;
1161
+ padding: 8px 12px;
1162
+ border-radius: 6px;
1163
+ background: var(--panel);
1164
+ border: 1px dashed var(--border);
1165
+ border-left: 4px solid var(--sev, var(--sev-minor));
1166
+ font-family: system-ui, sans-serif;
1167
+ white-space: normal;
1168
+ }
1169
+
1170
+ .diff .concern {
1171
+ margin-left: calc(var(--gutter) + 2ch);
1172
+ max-width: 70ch;
1173
+ }
1174
+
1175
+ .concern.sev-blocker {
1176
+ --sev: var(--sev-blocker);
1177
+ }
1178
+
1179
+ .concern.sev-major {
1180
+ --sev: var(--sev-major);
1181
+ }
1182
+
1183
+ .concern.sev-minor {
1184
+ --sev: var(--sev-minor);
1185
+ }
1186
+
1187
+ .concern.kept {
1188
+ border-style: solid;
1189
+ }
1190
+
1191
+ .concern.pending {
1192
+ display: none;
1193
+ }
1194
+
1195
+ .concern.dismissed {
1196
+ display: flex;
1197
+ justify-content: space-between;
1198
+ gap: 12px;
1199
+ color: var(--muted);
1200
+ border-left-color: var(--border);
1201
+ padding: 2px 12px;
1202
+ }
1203
+
1204
+ .concern-head {
1205
+ display: flex;
1206
+ align-items: center;
1207
+ gap: 8px;
1208
+ font-size: 12px;
1209
+ }
1210
+
1211
+ .concern .who {
1212
+ font-weight: 600;
1213
+ }
1214
+
1215
+ .concern .chip {
1216
+ padding: 0 8px;
1217
+ border: 1px solid var(--sev);
1218
+ border-radius: 10px;
1219
+ color: var(--sev);
1220
+ font-weight: 600;
1221
+ }
1222
+
1223
+ .concern .kind-tag,
1224
+ .concern .verdict {
1225
+ color: var(--muted);
1226
+ }
1227
+
1228
+ .concern .said {
1229
+ margin: 4px 0;
1230
+ }
1231
+
1232
+ .concern .said.mine {
1233
+ color: var(--muted);
1234
+ }
1235
+
1236
+ .concern-actions {
1237
+ display: flex;
1238
+ align-items: center;
1239
+ gap: 8px;
1240
+ margin-top: 6px;
1241
+ }
1242
+
1243
+ .concern .sev-pick {
1244
+ margin-left: auto;
1245
+ color: var(--muted);
1246
+ font-size: 12px;
1247
+ }
1248
+
1249
+ .concern .box {
1250
+ margin: 6px 0;
1251
+ }
1252
+
1253
+ .concern textarea {
1254
+ min-height: 40px;
1255
+ }
1256
+
1257
+ .dl.flagged .gutter::after {
1258
+ content: "";
1259
+ position: absolute;
1260
+ right: 0;
1261
+ top: 3px;
1262
+ bottom: 3px;
1263
+ width: 3px;
1264
+ border-radius: 2px;
1265
+ background: var(--flag);
1266
+ }
1267
+
1268
+ .dl.flag-blocker {
1269
+ --flag: var(--sev-blocker);
1270
+ }
1271
+
1272
+ .dl.flag-major {
1273
+ --flag: var(--sev-major);
1274
+ }
1275
+
1276
+ .dl.flag-minor {
1277
+ --flag: var(--sev-minor);
1278
+ }
1279
+
1280
+ .dot {
1281
+ flex: none;
1282
+ width: 9px;
1283
+ height: 9px;
1284
+ margin-top: 6px;
1285
+ border-radius: 50%;
1286
+ background: var(--sev-minor);
1287
+ }
1288
+
1289
+ .dot.sev-blocker {
1290
+ background: var(--sev-blocker);
1291
+ }
1292
+
1293
+ .dot.sev-major {
1294
+ background: var(--sev-major);
1295
+ }
1296
+
1297
+ .to-decide {
1298
+ color: var(--sev-major);
1299
+ }
1300
+
1301
+ .kind select {
1302
+ margin-left: auto;
1303
+ }
1304
+
1305
+ .done-card.wide {
1306
+ width: min(820px, 100%);
1307
+ }
1308
+
1309
+ .report-head {
1310
+ display: flex;
1311
+ align-items: center;
1312
+ gap: 10px;
1313
+ margin-bottom: 6px;
1314
+ }
1315
+
1316
+ .report-head button {
1317
+ margin-left: auto;
1318
+ }
1319
+
1320
+ .report {
1321
+ margin: 0;
1322
+ max-height: 38vh;
1323
+ overflow: auto;
1324
+ padding: 10px 12px;
1325
+ border: 1px solid var(--border);
1326
+ border-radius: 6px;
1327
+ background: var(--bg);
1328
+ font: 12.5px / 1.5 var(--font-mono);
1329
+ text-align: left;
1330
+ white-space: pre-wrap;
1331
+ }