@davmash/bygone 0.9.8 → 0.10.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.
Files changed (68) hide show
  1. package/CHANGELOG.md +21 -1
  2. package/README.md +74 -1
  3. package/cli/commandSpec.js +2 -0
  4. package/cli/completions.js +3 -3
  5. package/cli/present.js +28 -10
  6. package/cli/tour.js +22 -1
  7. package/cli/tourExport.js +147 -0
  8. package/cli/tourFile.js +109 -4
  9. package/cli/tourHistory.js +31 -1
  10. package/completions/_bygone +1 -1
  11. package/completions/bygone +1 -1
  12. package/completions/bygone.fish +1 -1
  13. package/docs/change-tour-format.md +85 -68
  14. package/docs/explore.md +14 -3
  15. package/docs/generating-change-tours.md +84 -46
  16. package/docs/present.md +103 -14
  17. package/docs/product-surface.md +19 -8
  18. package/docs/sharing-tours.md +95 -0
  19. package/docs/visual-walkthrough/README.md +89 -0
  20. package/docs/visual-walkthrough/build-tour.mjs +54 -0
  21. package/docs/visual-walkthrough/capture-desktop.cjs +42 -0
  22. package/docs/visual-walkthrough/capture-desktop.mjs +21 -0
  23. package/docs/visual-walkthrough/captures.md +49 -0
  24. package/docs/visual-walkthrough/create-demo.mjs +57 -0
  25. package/docs/visual-walkthrough/deconstructed-demo.bygone +100 -0
  26. package/docs/visual-walkthrough/images/01-two-files.png +0 -0
  27. package/docs/visual-walkthrough/images/02-many-panels.png +0 -0
  28. package/docs/visual-walkthrough/images/03-directories.png +0 -0
  29. package/docs/visual-walkthrough/images/04-search.png +0 -0
  30. package/docs/visual-walkthrough/images/05-repository-history.png +0 -0
  31. package/docs/visual-walkthrough/images/06-file-history.png +0 -0
  32. package/docs/visual-walkthrough/images/07-branch-review.png +0 -0
  33. package/docs/visual-walkthrough/images/08-tour-reader.png +0 -0
  34. package/docs/visual-walkthrough/images/09-focused-step.png +0 -0
  35. package/docs/visual-walkthrough/images/10-deconstructed.png +0 -0
  36. package/docs/visual-walkthrough/images/11-exploration.png +0 -0
  37. package/docs/visual-walkthrough/images/12-authoring.png +0 -0
  38. package/docs/visual-walkthrough/images/13-export.png +0 -0
  39. package/docs/visual-walkthrough/images/14-vscode.png +0 -0
  40. package/docs/visual-walkthrough/images/15-cli.png +0 -0
  41. package/docs/visual-walkthrough/narrative.md +134 -0
  42. package/docs/visual-walkthrough/outline.md +52 -0
  43. package/docs/visual-walkthrough/walkthrough.bygone +340 -0
  44. package/docs/walkthrough.md +6 -101
  45. package/examples/bygone-history.bygone +11 -44
  46. package/examples/marker-focus.bygone +116 -0
  47. package/examples/navigation-lab.bygone.yaml +401 -336
  48. package/examples/tour-orientation.bygone +349 -0
  49. package/media/diff.worker.js +13 -3
  50. package/media/webview.css +1 -1
  51. package/media/webview.js +394 -319
  52. package/out/changeTour.js +865 -397
  53. package/out/deepLink.js +167 -0
  54. package/out/historyDirectory.js +66 -0
  55. package/out/standalone-main.js +20514 -16821
  56. package/out/tourCoverage.js +850 -386
  57. package/out/tourDocument.js +97 -0
  58. package/package.json +1 -1
  59. package/schemas/change-tour-source.schema.json +91 -64
  60. package/skills/pr-tour-guide/SKILL.md +144 -128
  61. package/skills/pr-tour-guide/references/expectations-and-feedback.md +57 -0
  62. package/standalone/index.html +10 -25
  63. package/web/export-bootstrap.js +62 -0
  64. package/web/export-licenses.txt +78 -0
  65. package/web/export-runtime.json +12 -0
  66. package/web/index.html +54 -47
  67. package/web/presenter.css +332 -178
  68. package/web/web-host.js +239 -137
package/web/presenter.css CHANGED
@@ -1,15 +1,19 @@
1
1
  :root {
2
2
  --tour-rail-width: 300px;
3
- --tour-accent-bright: #a99fff;
4
- --tour-surface: #11131a;
5
- --tour-border: rgba(255, 255, 255, 0.09);
6
- --tour-muted: rgba(232, 235, 246, 0.84);
7
- --tour-faint: rgba(232, 235, 246, 0.72);
8
- --tour-body: #eef1fa;
9
- --tour-body-font: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
10
3
  --tour-narrative-height: min(38vh, 360px);
11
4
  }
12
5
 
6
+ /* Tour-specific layout and prose inherit the shared window theme. */
7
+ body {
8
+ --tour-accent-bright: var(--bygone-accent);
9
+ --tour-surface: var(--bygone-surface);
10
+ --tour-border: var(--bygone-border);
11
+ --tour-muted: var(--bygone-muted);
12
+ --tour-faint: var(--bygone-muted);
13
+ --tour-body: var(--bygone-text);
14
+ --tour-body-font: var(--bygone-ui-font);
15
+ }
16
+
13
17
  .tour-mode-controls { display: grid; gap: 6px; margin: 12px 0; }
14
18
  .tour-mode-controls[hidden], .tour-mode-controls [hidden] { display: none; }
15
19
  .tour-mode-controls select { width: 100%; min-width: 0; padding: 6px; color: var(--tour-body); background: var(--tour-surface); border: 1px solid var(--tour-border); border-radius: 4px; font: inherit; }
@@ -26,70 +30,23 @@ body.tour-derived-mode #tour-narrative { display: none; }
26
30
  box-sizing: border-box;
27
31
  flex-direction: column;
28
32
  overflow: hidden;
29
- color: #f5f6fb;
33
+ color: var(--tour-body);
30
34
  border-right: 1px solid var(--tour-border);
31
35
  background: var(--tour-surface);
32
36
  box-shadow: 18px 0 45px rgba(0, 0, 0, 0.22);
33
- font: 12px var(--tour-body-font);
37
+ font: var(--bygone-ui-font-size) var(--tour-body-font);
34
38
  }
35
39
 
36
40
  .tour-shell[hidden] {
37
41
  display: none;
38
42
  }
39
43
 
40
- .tour-review-toggle,
41
- .tour-review button {
42
- border: 1px solid var(--tour-border);
43
- border-radius: 6px;
44
- padding: 7px 10px;
45
- color: var(--tour-body);
46
- background: rgba(255, 255, 255, 0.06);
47
- font: inherit;
48
- cursor: pointer;
49
- }
50
-
51
- .tour-review-toggle { margin-top: 12px; }
52
- .tour-review-toggle:hover, .tour-review button:hover { border-color: var(--tour-accent-bright); }
53
- .tour-review-toggle:focus-visible, .tour-review button:focus-visible { outline: 2px solid var(--tour-accent-bright); outline-offset: 2px; }
54
- .tour-review[hidden], .tour-review-toggle[hidden] { display: none; }
55
-
56
- .tour-review {
57
- position: fixed;
58
- top: 16px;
59
- right: 16px;
60
- z-index: 160;
61
- display: flex;
62
- flex-direction: column;
63
- box-sizing: border-box;
64
- width: min(480px, calc(100vw - var(--tour-rail-width) - 32px));
65
- max-height: calc(100vh - 32px);
66
- border: 1px solid var(--tour-border);
67
- border-radius: 10px;
68
- background: var(--tour-surface);
69
- color: var(--tour-body);
70
- box-shadow: 0 12px 48px rgba(0, 0, 0, 0.5);
71
- font: 13px/1.5 var(--tour-body-font);
72
- }
73
-
74
- .tour-review-heading { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 14px 18px; border-bottom: 1px solid var(--tour-border); }
75
- .tour-review-heading h2 { margin: 0; font-size: 18px; }
76
- .tour-review-content { overflow-y: auto; padding: 0 18px 18px; min-height: 0; overflow-wrap: anywhere; }
77
- .tour-review-content h3 { color: var(--tour-accent-bright); font-size: 13px; margin: 22px 0 10px; }
78
- .tour-review-item { border-top: 1px solid var(--tour-border); padding: 12px 0; }
79
- .tour-review-item h4 { font-size: 14px; margin: 0 0 6px; }
80
- .tour-review-item p { margin: 6px 0 10px; white-space: pre-wrap; }
81
- .tour-review-provenance, .tour-review-range, .tour-review-next { color: var(--tour-muted); }
82
- .tour-review-range { font-size: 12px; }
83
- .tour-review-evidence { display: block; width: 100%; text-align: left; margin: 6px 0; overflow-wrap: anywhere; }
84
- #tour-review-status:empty { display: none; }
85
- #tour-review-status { margin: 0; padding: 12px 18px; border-top: 1px solid var(--tour-border); }
86
-
87
44
  .tour-sidebar-hide,
88
45
  .tour-sidebar-show {
89
46
  border: 1px solid var(--tour-border);
90
47
  border-radius: 6px;
91
- background: rgba(255, 255, 255, 0.07);
92
- color: #f5f6fb;
48
+ background: var(--bygone-hover);
49
+ color: var(--tour-body);
93
50
  cursor: pointer;
94
51
  font: inherit;
95
52
  }
@@ -133,7 +90,7 @@ body.tour-derived-mode #tour-narrative { display: none; }
133
90
  .tour-sidebar-resizer:hover,
134
91
  .tour-sidebar-resizer:focus-visible,
135
92
  body.is-resizing-tour-sidebar .tour-sidebar-resizer {
136
- background: rgba(169, 159, 255, 0.75);
93
+ background: color-mix(in srgb, var(--tour-accent-bright) 75%, transparent);
137
94
  outline: none;
138
95
  }
139
96
 
@@ -195,7 +152,7 @@ body.tour-mode #container {
195
152
 
196
153
  .tour-overview h1 > button#tour-title:hover,
197
154
  .tour-overview h1 > button#tour-title:focus-visible {
198
- color: #fff;
155
+ color: var(--tour-body);
199
156
  }
200
157
 
201
158
  .tour-overview h1 > button#tour-title:focus-visible {
@@ -204,13 +161,13 @@ body.tour-mode #container {
204
161
  }
205
162
 
206
163
  .tour-overview h1 > button#tour-title.is-active {
207
- border-left-color: rgba(169, 159, 255, 0.72);
164
+ border-left-color: var(--bygone-accent-strong);
208
165
  }
209
166
 
210
167
  .tour-source {
211
168
  display: inline-block;
212
169
  margin-bottom: 10px;
213
- color: #bcb5ff;
170
+ color: var(--tour-accent-bright);
214
171
  text-decoration: none;
215
172
  }
216
173
 
@@ -219,7 +176,7 @@ body.tour-mode #container {
219
176
  }
220
177
 
221
178
  .tour-source:hover {
222
- color: #fff;
179
+ color: var(--tour-body);
223
180
  }
224
181
 
225
182
  .tour-meta {
@@ -318,16 +275,16 @@ body.tour-mode #container {
318
275
  min-width: 0;
319
276
  box-sizing: border-box;
320
277
  padding: 6px 8px;
321
- color: #f5f6fb;
278
+ color: var(--tour-body);
322
279
  border: 1px solid var(--tour-border);
323
280
  border-radius: 5px;
324
- background: rgba(255, 255, 255, 0.055);
281
+ background: var(--bygone-hover);
325
282
  font: inherit;
326
283
  }
327
284
 
328
285
  .tour-search input:focus,
329
286
  .tour-search select:focus {
330
- border-color: rgba(169, 159, 255, 0.7);
287
+ border-color: color-mix(in srgb, var(--tour-accent-bright) 70%, transparent);
331
288
  outline: none;
332
289
  }
333
290
 
@@ -348,7 +305,7 @@ body.tour-mode #container {
348
305
  display: grid;
349
306
  min-width: 0;
350
307
  padding: 6px 8px;
351
- color: #e5e7f0;
308
+ color: var(--tour-body);
352
309
  border: 1px solid transparent;
353
310
  border-radius: 5px;
354
311
  background: transparent;
@@ -358,8 +315,8 @@ body.tour-mode #container {
358
315
 
359
316
  .tour-search-result:hover,
360
317
  .tour-search-result:focus-visible {
361
- border-color: rgba(169, 159, 255, 0.28);
362
- background: rgba(255, 255, 255, 0.055);
318
+ border-color: var(--bygone-accent-subtle);
319
+ background: var(--bygone-hover);
363
320
  outline: none;
364
321
  }
365
322
 
@@ -370,7 +327,7 @@ body.tour-mode #container {
370
327
  white-space: nowrap;
371
328
  }
372
329
 
373
- .tour-search-location { color: #fff; font-weight: 650; }
330
+ .tour-search-location { color: var(--tour-body); font-weight: 650; }
374
331
  .tour-search-preview { margin-top: 2px; color: var(--tour-muted); font-family: var(--vscode-editor-font-family, monospace); }
375
332
 
376
333
  .tour-narrative {
@@ -387,11 +344,11 @@ body.tour-mode #container {
387
344
  flex-direction: column;
388
345
  overflow: hidden;
389
346
  padding: 12px 24px 16px;
390
- color: #f5f6fb;
347
+ color: var(--tour-body);
391
348
  border-bottom: 1px solid var(--tour-border);
392
- background: #151821;
349
+ background: var(--bygone-surface-raised);
393
350
  scrollbar-gutter: stable;
394
- font: 12px var(--tour-body-font);
351
+ font: var(--bygone-ui-font-size) var(--tour-body-font);
395
352
  }
396
353
 
397
354
  .tour-narrative[hidden] {
@@ -412,7 +369,7 @@ body.tour-mode #container {
412
369
  .tour-narrative-resizer:hover,
413
370
  .tour-narrative-resizer:focus-visible,
414
371
  body.is-resizing-tour-narrative .tour-narrative-resizer {
415
- background: rgba(169, 159, 255, 0.75);
372
+ background: color-mix(in srgb, var(--tour-accent-bright) 75%, transparent);
416
373
  outline: none;
417
374
  }
418
375
 
@@ -423,6 +380,7 @@ body.tour-derived-mode .tour-narrative-resizer {
423
380
 
424
381
  .tour-narrative-toolbar {
425
382
  display: flex;
383
+ flex-wrap: wrap;
426
384
  min-width: 0;
427
385
  gap: 12px;
428
386
  align-items: center;
@@ -433,6 +391,17 @@ body.tour-derived-mode .tour-narrative-resizer {
433
391
  background: rgba(255, 255, 255, 0.025);
434
392
  }
435
393
 
394
+ .tour-navigation {
395
+ display: flex;
396
+ flex: 0 0 auto;
397
+ gap: 6px;
398
+ white-space: nowrap;
399
+ }
400
+
401
+ .tour-narrative-toolbar .tour-navigation button {
402
+ color: var(--tour-body);
403
+ }
404
+
436
405
  .tour-narrative-toolbar button {
437
406
  padding: 5px 9px;
438
407
  color: var(--tour-muted);
@@ -446,14 +415,14 @@ body.tour-derived-mode .tour-narrative-resizer {
446
415
  .tour-narrative-toolbar button:hover:not(:disabled),
447
416
  .tour-narrative-toolbar button:focus-visible,
448
417
  .tour-narrative-toolbar button[aria-pressed="true"] {
449
- color: #fff;
450
- border-color: rgba(169, 159, 255, 0.55);
451
- background: rgba(169, 159, 255, 0.13);
418
+ color: var(--tour-body);
419
+ border-color: color-mix(in srgb, var(--tour-accent-bright) 55%, transparent);
420
+ background: var(--bygone-selection);
452
421
  }
453
422
 
454
423
  .tour-narrative-toolbar button:focus-visible {
455
424
  outline: none;
456
- box-shadow: 0 0 0 2px rgba(128, 117, 255, 0.28);
425
+ box-shadow: 0 0 0 2px var(--bygone-accent-subtle);
457
426
  }
458
427
 
459
428
  .tour-narrative-toolbar button:disabled {
@@ -534,10 +503,10 @@ body.tour-derived-mode .tour-narrative-resizer {
534
503
  .tour-narration-transport button:hover:not(:disabled),
535
504
  .tour-narration-transport button:focus-visible,
536
505
  .tour-narration-controls select:focus-visible {
537
- color: #fff;
506
+ color: var(--tour-body);
538
507
  outline: none;
539
- background: rgba(169, 159, 255, 0.13);
540
- box-shadow: inset 0 0 0 1px rgba(169, 159, 255, 0.55);
508
+ background: var(--bygone-selection);
509
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--tour-accent-bright) 55%, transparent);
541
510
  }
542
511
 
543
512
  .tour-narration-transport button:disabled,
@@ -572,8 +541,8 @@ body.tour-derived-mode .tour-narrative-resizer {
572
541
  }
573
542
 
574
543
  .tour-narration-segment.is-speaking.is-paused {
575
- background: rgba(169, 159, 255, 0.16);
576
- box-shadow: inset 0 -2px 0 rgba(169, 159, 255, 0.72);
544
+ background: color-mix(in srgb, var(--tour-accent-bright) 16%, transparent);
545
+ box-shadow: inset 0 -2px 0 var(--bygone-accent-strong);
577
546
  }
578
547
 
579
548
  .tour-breadcrumb {
@@ -606,7 +575,7 @@ body.tour-derived-mode .tour-narrative-resizer {
606
575
  margin-left: auto;
607
576
  padding: 2px 6px;
608
577
  color: var(--tour-accent-bright);
609
- border: 1px solid rgba(169, 159, 255, 0.28);
578
+ border: 1px solid var(--bygone-accent-subtle);
610
579
  border-radius: 4px;
611
580
  background: transparent;
612
581
  cursor: pointer;
@@ -616,7 +585,7 @@ body.tour-derived-mode .tour-narrative-resizer {
616
585
  }
617
586
 
618
587
  .tour-return-focus[hidden] { display: none; }
619
- .tour-return-focus:hover { color: #fff; background: rgba(169, 159, 255, 0.1); }
588
+ .tour-return-focus:hover { color: var(--tour-body); background: color-mix(in srgb, var(--tour-accent-bright) 10%, transparent); }
620
589
 
621
590
  .tour-scenes {
622
591
  flex: 1;
@@ -634,7 +603,7 @@ body.tour-derived-mode .tour-narrative-resizer {
634
603
  gap: 7px;
635
604
  align-items: start;
636
605
  padding: 6px 9px;
637
- color: #e5e7f0;
606
+ color: var(--tour-body);
638
607
  border: 1px solid transparent;
639
608
  border-radius: 6px;
640
609
  background: transparent;
@@ -642,11 +611,11 @@ body.tour-derived-mode .tour-narrative-resizer {
642
611
  cursor: pointer;
643
612
  }
644
613
 
645
- .tour-file:hover:not(:disabled) { background: rgba(255, 255, 255, 0.045); }
614
+ .tour-file:hover:not(:disabled) { background: var(--bygone-hover); }
646
615
 
647
616
  .tour-file.is-active {
648
- border-color: rgba(128, 117, 255, 0.4);
649
- background: rgba(101, 83, 255, 0.14);
617
+ border-color: var(--bygone-accent-subtle);
618
+ background: var(--bygone-selection);
650
619
  }
651
620
 
652
621
  .tour-file:disabled { opacity: 0.62; cursor: default; }
@@ -686,7 +655,7 @@ body.tour-derived-mode .tour-narrative-resizer {
686
655
  }
687
656
 
688
657
  .tour-file-path {
689
- color: #f5f6fb;
658
+ color: var(--tour-body);
690
659
  font-family: var(--vscode-editor-font-family, monospace);
691
660
  }
692
661
 
@@ -701,11 +670,11 @@ body.tour-derived-mode .tour-narrative-resizer {
701
670
  box-sizing: border-box;
702
671
  display: grid;
703
672
  width: 100%;
704
- grid-template-columns: 24px minmax(0, 1fr);
673
+ grid-template-columns: minmax(0, 1fr);
705
674
  gap: 7px;
706
675
  align-items: start;
707
676
  padding: 9px 10px;
708
- color: #e5e7f0;
677
+ color: var(--tour-body);
709
678
  border: 1px solid transparent;
710
679
  border-left-width: 2px;
711
680
  border-radius: 7px;
@@ -715,7 +684,7 @@ body.tour-derived-mode .tour-narrative-resizer {
715
684
  }
716
685
 
717
686
  .tour-scene:hover {
718
- background: rgba(255, 255, 255, 0.045);
687
+ background: var(--bygone-hover);
719
688
  }
720
689
 
721
690
  .tour-scene-number {
@@ -738,7 +707,7 @@ body.tour-derived-mode .tour-narrative-resizer {
738
707
 
739
708
  .tour-scene-title {
740
709
  margin-bottom: 3px;
741
- color: #fff;
710
+ color: var(--tour-body);
742
711
  font-weight: 650;
743
712
  }
744
713
 
@@ -820,7 +789,7 @@ body.tour-derived-mode .tour-narrative-resizer {
820
789
  }
821
790
 
822
791
  .tour-reading-item.is-active {
823
- border-left-color: rgba(169, 159, 255, 0.72);
792
+ border-left-color: var(--bygone-accent-strong);
824
793
  }
825
794
 
826
795
  .tour-reading-item h1,
@@ -832,7 +801,7 @@ body.tour-derived-mode .tour-narrative-resizer {
832
801
  }
833
802
 
834
803
  .tour-reading-item[data-reading-kind="title"] h1 {
835
- color: #fff;
804
+ color: var(--tour-body);
836
805
  font-size: 22px;
837
806
  font-weight: 750;
838
807
  }
@@ -844,14 +813,14 @@ body.tour-derived-mode .tour-narrative-resizer {
844
813
  }
845
814
 
846
815
  .tour-reading-item[data-reading-kind="scene"] h2 {
847
- color: #fff;
816
+ color: var(--tour-body);
848
817
  font-size: 20px;
849
818
  font-weight: 700;
850
819
  }
851
820
 
852
821
  .tour-reading-item[data-reading-kind="step"] h3,
853
822
  .tour-reading-item .tour-step-title {
854
- color: #fff;
823
+ color: var(--tour-body);
855
824
  font-size: 18px;
856
825
  font-weight: 700;
857
826
  }
@@ -860,6 +829,11 @@ body.tour-derived-mode .tour-narrative-resizer {
860
829
  min-height: max(0px, var(--tour-reading-viewport, 0px));
861
830
  }
862
831
 
832
+ .tour-reading-item[data-reading-kind="title"],
833
+ .tour-reading-item[data-reading-kind="chapter"] {
834
+ min-height: var(--tour-bookend-viewport, 0px);
835
+ }
836
+
863
837
  .tour-narrative-chapter {
864
838
  margin-bottom: 5px;
865
839
  color: var(--tour-accent-bright);
@@ -908,7 +882,7 @@ body.tour-derived-mode .tour-narrative-resizer {
908
882
  box-sizing: border-box;
909
883
  padding: 8px 11px 8px 13px;
910
884
  color: var(--tour-body);
911
- border-left: 2px solid rgba(128, 117, 255, 0.28);
885
+ border-left: 2px solid var(--bygone-accent-subtle);
912
886
  background: rgba(255, 255, 255, 0.015);
913
887
  }
914
888
 
@@ -919,73 +893,80 @@ body.tour-derived-mode .tour-narrative-resizer {
919
893
 
920
894
  .tour-step-body { margin: 8px 0 0; max-width: 85ch; color: var(--tour-body); font-size: 15px; line-height: 1.6; }
921
895
 
922
- .tour-step-context {
896
+ /* One heading stays with the entire scene, including its steps. */
897
+ .tour-reading-item.tour-scene-group {
898
+ padding: 0;
899
+ border-left: 0;
900
+ }
901
+
902
+ .tour-scene-header {
923
903
  position: sticky;
924
904
  top: 0;
925
- z-index: 1;
926
- margin: 0 0 9px;
927
- background: #151821;
905
+ z-index: 2;
906
+ display: flex;
907
+ align-items: flex-start;
908
+ gap: 8px;
909
+ padding: 9px 12px 8px 14px;
910
+ border-left: 2px solid transparent;
911
+ background: var(--bygone-surface-raised);
928
912
  }
929
913
 
930
- .tour-step-context > summary {
914
+ .tour-scene-header.is-stuck { box-shadow: 0 1px var(--tour-border); }
915
+ .tour-scene-header .tour-scene-heading { flex: 1; min-width: 0; margin: 0; }
916
+ .tour-scene-title-toggle { padding: 0; border: 0; background: none; color: inherit; font: inherit; text-align: left; cursor: pointer; }
917
+ .tour-scene-title-toggle:disabled { opacity: 1; cursor: text; }
918
+ .tour-scene-title-toggle:focus-visible { outline: 2px solid var(--tour-accent-bright); }
919
+ .tour-scene-overview { padding: 0 12px 11px 14px; border-left: 2px solid transparent; }
920
+ .tour-scene-group.is-active > .tour-scene-header,
921
+ .tour-scene-group.is-active > .tour-scene-overview { border-left-color: var(--bygone-accent-strong); }
922
+ .tour-scene-group:last-child > .tour-reading-item:last-child { min-height: var(--tour-reading-viewport, 0px); }
923
+
924
+ .tour-scene-context { flex: 0 0 auto; }
925
+ .tour-scene-context > summary {
931
926
  display: flex;
932
927
  align-items: center;
933
- min-width: 0;
934
- gap: 6px;
935
- padding: 4px 0;
936
- overflow-wrap: anywhere;
937
- color: var(--tour-muted);
938
- font-size: 13px;
939
- line-height: 1.4;
928
+ justify-content: center;
929
+ width: 28px;
930
+ height: 28px;
931
+ color: var(--tour-body);
932
+ background: var(--tour-surface);
940
933
  cursor: pointer;
941
934
  list-style: none;
935
+ border-radius: 4px;
942
936
  }
943
-
944
- .tour-step-context > summary::before {
945
- color: var(--tour-faint);
946
- content: "▸";
947
- }
948
-
949
- .tour-step-context[open] > summary::before {
950
- content: "▾";
951
- }
952
-
953
- .tour-step-context > summary::-webkit-details-marker {
954
- display: none;
955
- }
956
-
957
- .tour-step-context > summary::marker {
937
+ .tour-scene-header:not(.is-stuck) .tour-scene-context { visibility: hidden; }
938
+ .tour-scene-context > summary::before {
958
939
  content: "";
959
- }
960
-
961
- .tour-step-context > summary:hover,
962
- .tour-step-context > summary:focus-visible {
963
- color: #fff;
964
- }
965
-
966
- .tour-step-context > summary:focus-visible {
967
- outline: 2px solid var(--tour-accent-bright);
968
- outline-offset: 2px;
969
- }
970
-
971
- .tour-step-context-body {
940
+ width: 7px;
941
+ height: 7px;
942
+ border-right: 2px solid currentColor;
943
+ border-bottom: 2px solid currentColor;
944
+ transform: rotate(-45deg);
945
+ }
946
+ .tour-scene-context[open] > summary::before { transform: rotate(45deg); }
947
+ .tour-scene-context > summary::-webkit-details-marker { display: none; }
948
+ .tour-scene-context > summary::marker { content: ""; }
949
+ .tour-scene-context > summary:hover { color: var(--tour-body); background: var(--tour-surface); }
950
+ .tour-scene-context > summary:focus-visible { outline: 2px solid var(--tour-accent-bright); }
951
+
952
+ .tour-scene-context-body {
953
+ position: absolute;
954
+ top: 100%;
955
+ left: 2px;
956
+ right: 0;
957
+ box-sizing: border-box;
972
958
  max-height: calc(var(--tour-reading-viewport, 200px) / 2);
973
959
  overflow-y: auto;
974
- margin: 2px 0 8px;
975
- padding: 7px 0 3px 12px;
960
+ overscroll-behavior: contain;
961
+ padding: 12px 14px;
976
962
  color: var(--tour-muted);
977
- border-left: 1px solid rgba(169, 159, 255, 0.28);
963
+ border: 1px solid var(--tour-border);
964
+ background: var(--bygone-surface-raised);
965
+ box-shadow: 0 5px 12px rgba(0, 0, 0, .25);
978
966
  font-size: 13px;
979
967
  line-height: 1.45;
980
968
  }
981
969
 
982
- .tour-step-context-body .tour-narrative-summary,
983
- .tour-step-context-body .tour-narrative-bullets,
984
- .tour-step-context-body .tour-narrative-tags,
985
- .tour-step-context-body .tour-narrative-takeaway {
986
- color: inherit;
987
- }
988
-
989
970
  .tour-step-requirement {
990
971
  display: flex;
991
972
  flex-wrap: wrap;
@@ -998,7 +979,7 @@ body.tour-derived-mode .tour-narrative-resizer {
998
979
 
999
980
  .tour-requirement-chip {
1000
981
  padding: 1px 6px;
1001
- border: 1px solid rgba(166, 140, 255, 0.34);
982
+ border: 1px solid var(--bygone-accent-subtle);
1002
983
  border-radius: 9px;
1003
984
  color: var(--tour-body);
1004
985
  font-size: 12px;
@@ -1026,7 +1007,7 @@ body.tour-derived-mode .tour-narrative-resizer {
1026
1007
  margin-top: 7px;
1027
1008
  padding-top: 7px;
1028
1009
  color: var(--tour-faint);
1029
- border-top: 1px solid rgba(166, 140, 255, 0.2);
1010
+ border-top: 1px solid var(--bygone-accent-subtle);
1030
1011
  font-family: var(--vscode-editor-font-family, monospace);
1031
1012
  }
1032
1013
 
@@ -1055,18 +1036,18 @@ body.tour-derived-mode .tour-narrative-resizer {
1055
1036
  flex: none;
1056
1037
  padding: 4px 8px;
1057
1038
  color: var(--tour-accent-bright);
1058
- border: 1px solid rgba(169, 159, 255, 0.35);
1039
+ border: 1px solid color-mix(in srgb, var(--tour-accent-bright) 35%, transparent);
1059
1040
  border-radius: 5px;
1060
- background: rgba(169, 159, 255, 0.07);
1041
+ background: color-mix(in srgb, var(--tour-accent-bright) 7%, transparent);
1061
1042
  cursor: pointer;
1062
1043
  font: inherit;
1063
1044
  }
1064
1045
 
1065
1046
  .tour-show-in-code:hover,
1066
1047
  .tour-show-in-code:focus-visible {
1067
- color: #fff;
1068
- border-color: rgba(169, 159, 255, 0.7);
1069
- background: rgba(169, 159, 255, 0.14);
1048
+ color: var(--tour-body);
1049
+ border-color: color-mix(in srgb, var(--tour-accent-bright) 70%, transparent);
1050
+ background: color-mix(in srgb, var(--tour-accent-bright) 14%, transparent);
1070
1051
  outline: none;
1071
1052
  }
1072
1053
 
@@ -1089,7 +1070,7 @@ body.tour-derived-mode .tour-narrative-resizer {
1089
1070
  .tour-audio-settings > summary, .tour-details > summary {
1090
1071
  cursor: pointer; color: var(--tour-muted); padding: 5px 0; line-height: 1.5;
1091
1072
  }
1092
- .tour-audio-settings > summary:hover, .tour-details > summary:hover { color: #fff; }
1073
+ .tour-audio-settings > summary:hover, .tour-details > summary:hover { color: var(--tour-body); }
1093
1074
  .tour-audio-settings > summary:focus-visible,
1094
1075
  .tour-details > summary:focus-visible { outline: 2px solid var(--tour-accent-bright); outline-offset: 2px; }
1095
1076
  .tour-audio-settings > summary[hidden] { display: none; }
@@ -1111,18 +1092,46 @@ body.tour-derived-mode .tour-narrative-resizer {
1111
1092
  .tour-narration-dock #tour-listen {
1112
1093
  display: inline-flex;
1113
1094
  align-items: center;
1095
+ justify-content: center;
1096
+ flex: 0 0 auto;
1114
1097
  gap: 5px;
1115
1098
  color: var(--tour-accent-bright);
1116
1099
  }
1100
+ .tour-narration-dock #tour-listen-label { min-width: 7ch; }
1117
1101
  .tour-narration-dock #tour-listen svg { width: 12px; height: 12px; fill: currentColor; }
1118
1102
  .tour-narration-dock #tour-narration { flex-shrink: 0; }
1119
1103
  .tour-narration-dock #tour-narration-voice { max-width: 150px; }
1120
1104
  .tour-narration-dock .tour-narration-status {
1105
+ flex: 0 0 28ch;
1106
+ width: 28ch;
1121
1107
  min-width: 0;
1122
- white-space: normal;
1123
- overflow-wrap: anywhere;
1108
+ padding-inline: 4px;
1109
+ box-sizing: border-box;
1110
+ white-space: nowrap;
1111
+ overflow: hidden;
1112
+ text-overflow: ellipsis;
1113
+ font-variant-numeric: tabular-nums;
1124
1114
  }
1125
1115
  .tour-details { margin-top: 10px; font-size: 12px; }
1116
+ .tour-details[open] { max-height: 50vh; overflow-y: auto; padding-right: 6px; }
1117
+ #tour-audience { border-top: 1px solid var(--tour-border); margin-top: 12px; line-height: 1.55; overflow-wrap: anywhere; }
1118
+ #tour-audience h2 { font-size: 13px; margin: 14px 0 6px; }
1119
+ #tour-audience p { margin: 6px 0; }
1120
+ #tour-audience summary { cursor: pointer; padding: 5px 0; }
1121
+ #tour-audience dt { color: var(--tour-muted); margin-top: 6px; }
1122
+ #tour-audience dd { margin: 0; }
1123
+ .tour-feedback-actions { display: flex; flex-wrap: wrap; gap: 6px; }
1124
+ .tour-feedback-dialog { box-sizing: border-box; width: min(620px, calc(100vw - 32px)); max-height: calc(100vh - 32px); overflow: auto; color: var(--tour-body); background: var(--tour-surface); border: 1px solid var(--tour-border); border-radius: 8px; padding: 24px; }
1125
+ .tour-feedback-dialog::backdrop { background: rgb(0 0 0 / 55%); }
1126
+ .tour-feedback-dialog h2 { font-size: 20px; margin: 0; }
1127
+ .tour-feedback-dialog p { line-height: 1.5; }
1128
+ .tour-feedback-dialog label { display: block; margin-bottom: 6px; }
1129
+ .tour-feedback-dialog textarea { box-sizing: border-box; width: 100%; color: var(--tour-body); background: var(--tour-surface); border: 1px solid var(--tour-border); padding: 8px; font: inherit; resize: vertical; }
1130
+ .tour-feedback-dialog details { margin: 12px 0; }
1131
+ .tour-feedback-dialog summary { cursor: pointer; }
1132
+ .tour-feedback-dialog pre { white-space: pre-wrap; overflow-wrap: anywhere; max-height: 220px; overflow: auto; font-size: 12px; }
1133
+ .tour-feedback-dialog button { color: var(--tour-body); background: var(--tour-surface); border: 1px solid var(--tour-border); border-radius: 4px; padding: 7px 12px; cursor: pointer; }
1134
+ .tour-feedback-dialog :focus-visible, #tour-audience summary:focus-visible { outline: 2px solid var(--tour-accent-bright); outline-offset: 2px; }
1126
1135
  .tour-details .tour-source { display: inline-block; margin-top: 8px; }
1127
1136
  .tour-details .tour-source[hidden] { display: none; }
1128
1137
  .tour-files[hidden],
@@ -1134,7 +1143,7 @@ body.tour-derived-mode .tour-narrative-resizer {
1134
1143
  }
1135
1144
 
1136
1145
  .tour-outline-group.has-active {
1137
- border-left-color: rgba(169, 159, 255, 0.58);
1146
+ border-left-color: color-mix(in srgb, var(--tour-accent-bright) 58%, transparent);
1138
1147
  }
1139
1148
 
1140
1149
  .tour-outline-heading {
@@ -1158,8 +1167,8 @@ body.tour-derived-mode .tour-narrative-resizer {
1158
1167
 
1159
1168
  .tour-outline-toggle:hover,
1160
1169
  .tour-outline-toggle:focus-visible {
1161
- color: #fff;
1162
- background: rgba(255, 255, 255, 0.045);
1170
+ color: var(--tour-body);
1171
+ background: var(--bygone-hover);
1163
1172
  }
1164
1173
 
1165
1174
  .tour-outline-toggle:focus-visible {
@@ -1194,8 +1203,8 @@ body.tour-derived-mode .tour-narrative-resizer {
1194
1203
  cursor: pointer;
1195
1204
  overflow-wrap: anywhere;
1196
1205
  }
1197
- .tour-outline-step:hover { background: rgba(255,255,255,.05); }
1198
- .tour-outline-step.is-active { border-left-color: rgba(169,159,255,.72); }
1206
+ .tour-outline-step:hover { background: var(--bygone-hover); }
1207
+ .tour-outline-step.is-active { border-left-color: var(--bygone-accent-strong); }
1199
1208
  .tour-outline-step:focus-visible { outline: 2px solid var(--tour-accent-bright); outline-offset: 1px; }
1200
1209
 
1201
1210
  .tour-chapter-link {
@@ -1215,12 +1224,12 @@ body.tour-derived-mode .tour-narrative-resizer {
1215
1224
  }
1216
1225
 
1217
1226
  .tour-chapter-link:hover {
1218
- background: rgba(255, 255, 255, 0.045);
1227
+ background: var(--bygone-hover);
1219
1228
  }
1220
1229
 
1221
1230
  .tour-chapter-link.is-active,
1222
1231
  .tour-scene.is-active {
1223
- border-left-color: rgba(169, 159, 255, 0.72);
1232
+ border-left-color: var(--bygone-accent-strong);
1224
1233
  }
1225
1234
 
1226
1235
  .tour-chapter-link:focus-visible {
@@ -1250,16 +1259,35 @@ body.tour-derived-mode .tour-narrative-resizer {
1250
1259
  .tour-mode-tabs { display: flex; flex-wrap: wrap; gap: 5px; }
1251
1260
  .tour-mode-tabs button { padding: 5px 8px; border: 1px solid var(--tour-border); border-radius: 5px; background: var(--tour-surface); color: var(--tour-body); font: inherit; font-size: 12px; cursor: pointer; }
1252
1261
  .tour-mode-tabs button:hover { border-color: var(--tour-accent-bright); }
1253
- .tour-mode-tabs button.is-active { color: #fff; border-color: var(--tour-accent-bright); background: rgba(169, 159, 255, 0.13); }
1262
+ .tour-mode-tabs button.is-active { color: var(--tour-body); border-color: var(--tour-accent-bright); background: var(--bygone-selection); }
1254
1263
  .tour-mode-tabs button:focus-visible { outline: 2px solid var(--tour-accent-bright); outline-offset: 2px; }
1255
1264
  .tour-mode-description { margin: 2px 0; color: var(--tour-muted); font-size: 12px; line-height: 1.45; overflow-wrap: anywhere; }
1256
1265
  .tour-evidence-controls { display: grid; gap: 6px; }
1257
1266
  .tour-evidence-controls[hidden] { display: none; }
1258
- .tour-evidence-actions { display: flex; flex-wrap: wrap; gap: 6px; }
1259
- .tour-evidence-actions button { padding: 5px 8px; border: 1px solid var(--tour-border); border-radius: 5px; background: var(--tour-surface); color: var(--tour-body); font: inherit; font-size: 12px; cursor: pointer; }
1260
- .tour-evidence-actions button:hover { border-color: var(--tour-accent-bright); }
1261
- .tour-evidence-actions button:disabled { opacity: .5; cursor: default; }
1262
- #tour-compare-scope { font-size: 12px; overflow-wrap: anywhere; }
1267
+ .tour-selection-toolbar { display: flex; align-items: center; gap: 6px; min-width: 0; }
1268
+ .tour-selection-summary { display: grid; gap: 3px; flex: 1; min-width: 0; }
1269
+ .tour-selection-count { color: var(--tour-body); font-size: 12px; font-weight: 600; }
1270
+ .tour-selection-hint { color: var(--tour-muted); font-size: 12px; line-height: 1.4; }
1271
+ .tour-evidence-controls button,
1272
+ .tour-selection-more > summary { border: 1px solid transparent; border-radius: 6px; color: var(--tour-body); font: inherit; font-size: 12px; cursor: pointer; }
1273
+ .tour-evidence-controls button:focus-visible,
1274
+ .tour-selection-more > summary:focus-visible { outline: 2px solid var(--tour-accent-bright); outline-offset: 2px; }
1275
+ .tour-evidence-controls button:disabled { opacity: .45; cursor: default; }
1276
+ .tour-evidence-controls .tour-selection-apply { padding: 6px 11px; background: var(--bygone-selection); color: var(--tour-accent-bright); border-color: color-mix(in srgb, var(--tour-accent-bright) 35%, transparent); font-weight: 600; }
1277
+ .tour-evidence-controls .tour-selection-apply:not(:disabled):hover { border-color: var(--tour-accent-bright); }
1278
+ .tour-selection-more { position: relative; flex: 0 0 auto; }
1279
+ .tour-selection-more > summary { display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; list-style: none; }
1280
+ .tour-selection-more > summary::-webkit-details-marker { display: none; }
1281
+ .tour-selection-more > summary svg { width: 18px; height: 18px; fill: currentColor; }
1282
+ .tour-selection-more > summary:hover,
1283
+ .tour-selection-more[open] > summary { background: var(--bygone-hover); }
1284
+ .tour-selection-menu { position: absolute; z-index: 20; top: calc(100% + 6px); right: 0; width: 208px; padding: 4px; border: 1px solid var(--tour-border); border-radius: 8px; background: var(--tour-surface); box-shadow: 0 6px 20px #0003; }
1285
+ .tour-selection-menu button { display: block; width: 100%; padding: 8px; background: transparent; text-align: left; }
1286
+ .tour-selection-menu button[hidden] { display: none; }
1287
+ .tour-selection-menu button:not(:disabled):hover { background: var(--bygone-hover); }
1288
+ .tour-selection-menu button span { display: block; margin-top: 3px; color: var(--tour-muted); font-size: 12px; }
1289
+ .tour-selection-menu hr { margin: 4px; border: 0; border-top: 1px solid var(--tour-border); }
1290
+ .tour-comparison-scope { color: var(--tour-muted); font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
1263
1291
  body.tour-derived-mode .tour-search { display: none; }
1264
1292
  body.tour-derived-mode .tour-overview { flex-shrink: 0; }
1265
1293
  body.tour-derived-mode .tour-shell { overflow-y: auto; }
@@ -1271,7 +1299,7 @@ body.tour-derived-mode .tour-shell { overflow-y: auto; }
1271
1299
  flex-wrap: wrap;
1272
1300
  gap: 8px;
1273
1301
  padding-block: 8px;
1274
- font: 12px var(--tour-body-font);
1302
+ font: var(--bygone-ui-font-size) var(--tour-body-font);
1275
1303
  color: var(--tour-muted);
1276
1304
  }
1277
1305
  .tour-directory-breadcrumb[hidden],
@@ -1287,7 +1315,7 @@ body.tour-directory-file-open #file-info { display: none; }
1287
1315
  font: inherit;
1288
1316
  cursor: pointer;
1289
1317
  }
1290
- .tour-directory-breadcrumb button:hover { background: rgba(255, 255, 255, 0.07); }
1318
+ .tour-directory-breadcrumb button:hover { background: var(--bygone-hover); }
1291
1319
  .tour-directory-breadcrumb button:focus-visible { outline: 2px solid var(--tour-accent-bright); }
1292
1320
  .tour-directory-file { overflow-wrap: anywhere; color: var(--tour-body); }
1293
1321
  .tour-directory-narration-context { margin-left: auto; color: var(--tour-faint); }
@@ -1300,7 +1328,6 @@ body.tour-directory-file-open #file-info { display: none; }
1300
1328
 
1301
1329
  .tour-overview h1 { margin-bottom: 6px; font-size: 18px; }
1302
1330
  .tour-mode-controls { margin: 8px 0 0; }
1303
- .tour-review-toggle { margin-top: 8px; }
1304
1331
  .tour-details { margin-top: 8px; }
1305
1332
 
1306
1333
  .tour-navigator-tabs {
@@ -1325,8 +1352,9 @@ body.tour-directory-file-open #file-info { display: none; }
1325
1352
  cursor: pointer;
1326
1353
  }
1327
1354
 
1328
- .tour-navigator-tabs button:hover { background: rgba(255, 255, 255, 0.05); }
1329
- .tour-navigator-tabs button.is-active { color: #fff; border-color: var(--tour-border); background: rgba(169, 159, 255, 0.13); }
1355
+ .tour-navigator-tabs button:disabled { opacity: 0.4; cursor: default; }
1356
+ .tour-navigator-tabs button:not(:disabled):hover { background: var(--bygone-hover); }
1357
+ .tour-navigator-tabs button.is-active { color: var(--tour-body); border-color: var(--tour-border); background: var(--bygone-selection); }
1330
1358
  .tour-navigator-tabs button:focus-visible { outline: 2px solid var(--tour-accent-bright); outline-offset: 1px; }
1331
1359
 
1332
1360
  .tour-navigator-content,
@@ -1342,7 +1370,7 @@ body.tour-directory-file-open #file-info { display: none; }
1342
1370
  .tour-navigator-panel[hidden] { display: none; }
1343
1371
  .tour-search-disclosure { flex: 0 0 auto; border-bottom: 1px solid var(--tour-border); }
1344
1372
  .tour-search-disclosure > summary { padding: 8px 12px; color: var(--tour-muted); cursor: pointer; }
1345
- .tour-search-disclosure > summary:hover { color: #fff; }
1373
+ .tour-search-disclosure > summary:hover { color: var(--tour-body); }
1346
1374
  .tour-search-disclosure > summary:focus-visible { outline: 2px solid var(--tour-accent-bright); outline-offset: -2px; }
1347
1375
  .tour-search-disclosure .tour-search { border-bottom: 0; }
1348
1376
  .tour-scenes, .tour-files { min-height: 0; }
@@ -1399,6 +1427,7 @@ body.tour-directory-file-open #file-info { display: none; }
1399
1427
  .tour-narrative-toolbar { gap: 6px; }
1400
1428
  .tour-narration-controls select { max-width: 150px; }
1401
1429
  .tour-narration-status { width: 100%; margin-left: 0; text-align: left; }
1430
+ .tour-narration-dock .tour-narration-status { flex-basis: 100%; width: 100%; }
1402
1431
 
1403
1432
  body.tour-mode #container {
1404
1433
  width: 100vw;
@@ -1425,3 +1454,128 @@ body.tour-directory-file-open #file-info { display: none; }
1425
1454
  border-radius: 2px;
1426
1455
  background: var(--bygone-tour-range-color, #a99bf5);
1427
1456
  }
1457
+
1458
+ .tour-copy-location {
1459
+ display: inline-flex;
1460
+ align-items: center;
1461
+ justify-content: center;
1462
+ width: 24px;
1463
+ height: 24px;
1464
+ margin-inline-start: 6px;
1465
+ padding: 3px;
1466
+ vertical-align: middle;
1467
+ color: inherit;
1468
+ background: transparent;
1469
+ border: 0;
1470
+ border-radius: 4px;
1471
+ opacity: 0;
1472
+ pointer-events: none;
1473
+ cursor: pointer;
1474
+ }
1475
+ .tour-reading-item :is(h1, h2, h3):is(:hover, :focus-within) .tour-copy-location,
1476
+ .tour-copy-location.is-copied { opacity: .75; pointer-events: auto; }
1477
+ .tour-copy-location:hover,
1478
+ .tour-copy-location:focus-visible { opacity: 1; background: var(--tour-surface); }
1479
+ .tour-copy-location:focus-visible { outline: 2px solid var(--vscode-focusBorder, #68a9ef); }
1480
+ .tour-copy-location svg { width: 16px; height: 16px; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
1481
+ .tour-link-check, .tour-copy-location.is-copied .tour-link-chain { display: none; }
1482
+ .tour-copy-location.is-copied .tour-link-check { display: block; }
1483
+ @media (hover: none) { .tour-copy-location { opacity: .75; pointer-events: auto; } }
1484
+ .tour-link-target { outline: 2px solid var(--vscode-focusBorder, #68a9ef); outline-offset: -2px; }
1485
+ .export-notice { padding: 10px; font-size: 12px; }
1486
+
1487
+ .export-host #refresh-session,
1488
+ .export-host [data-dir-add-side],
1489
+ .export-host [data-dir-remove-side] { display: none !important; }
1490
+
1491
+ .export-host .multi-pane-actions { display: none !important; }
1492
+
1493
+ /* Image steps replace the evidence workspace; the reading document stays live. */
1494
+ body.tour-image-active #container > #header,
1495
+ body.tour-image-active #container > #diff-workspace { display: none; }
1496
+ .tour-image-evidence {
1497
+ display: flex;
1498
+ flex: 1;
1499
+ flex-direction: column;
1500
+ min-width: 0;
1501
+ min-height: 0;
1502
+ margin: 0;
1503
+ padding: 12px;
1504
+ gap: 10px;
1505
+ overflow: hidden;
1506
+ }
1507
+ .tour-image-evidence figcaption { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
1508
+ .tour-image-evidence img { display: block; min-height: 0; width: 100%; flex: 1; object-fit: contain; }
1509
+ .tour-image-evidence button, .tour-image-dialog button {
1510
+ flex: none;
1511
+ padding: 6px 12px;
1512
+ color: var(--tour-body);
1513
+ background: var(--bygone-hover);
1514
+ border: 1px solid var(--tour-border);
1515
+ border-radius: 4px;
1516
+ font: inherit;
1517
+ cursor: pointer;
1518
+ }
1519
+ .tour-image-dialog {
1520
+ max-width: 96vw;
1521
+ max-height: 96vh;
1522
+ padding: 12px;
1523
+ color: var(--tour-body);
1524
+ background: var(--tour-surface);
1525
+ border: 1px solid var(--tour-border);
1526
+ }
1527
+ .tour-image-dialog::backdrop { background: rgba(0, 0, 0, .8); }
1528
+ .tour-image-dialog button { display: block; margin: 0 0 10px auto; }
1529
+ .tour-image-dialog img { display: block; max-width: 90vw; max-height: 84vh; object-fit: contain; }
1530
+
1531
+ /* The shared view tabs occupy one row above the existing panel stack. */
1532
+ :root { --workspace-toolbar-height: 0px; }
1533
+ #workspace-view { display: contents; }
1534
+ #tour-mode-controls {
1535
+ position: fixed;
1536
+ inset: 0 0 auto;
1537
+ z-index: 145;
1538
+ margin: 0;
1539
+ background: var(--tour-surface);
1540
+ }
1541
+ .tour-shell { top: var(--workspace-toolbar-height); }
1542
+ .tour-sidebar-show { top: calc(var(--workspace-toolbar-height) + 14px); }
1543
+ .tour-narrative { top: var(--workspace-toolbar-height); }
1544
+ .tour-narrative-resizer { top: calc(var(--workspace-toolbar-height) + var(--tour-narrative-height) - 4px); }
1545
+ body.tour-mode #container {
1546
+ position: fixed;
1547
+ top: calc(var(--workspace-toolbar-height) + var(--tour-narrative-height));
1548
+ height: calc(100vh - var(--workspace-toolbar-height) - var(--tour-narrative-height));
1549
+ margin-top: 0;
1550
+ }
1551
+ #workspace-view > .workspace-empty-view {
1552
+ position: fixed;
1553
+ inset: var(--workspace-toolbar-height) 0 0 var(--tour-rail-width);
1554
+ box-sizing: border-box;
1555
+ background: var(--tour-surface);
1556
+ }
1557
+ body.workspace-empty-tour #container { display: none; }
1558
+ @media (max-width: 720px) {
1559
+ .tour-shell { height: calc(100vh - var(--workspace-toolbar-height)); }
1560
+ }
1561
+ /* Bookends and chapter passages have no evidence. Keep the reading geometry
1562
+ stable while scrolling across scene boundaries; hide stale renderer content. */
1563
+ body.tour-discussion #container { visibility: hidden; pointer-events: none; }
1564
+ .tour-scene-orientation { color: var(--tour-muted); font-size: 0.9em; overflow-wrap: anywhere; }
1565
+ .tour-overview-purpose { font-weight: 600; }
1566
+ .tour-passage-title { overflow-wrap: anywhere; }
1567
+
1568
+ .tour-route { list-style: none; padding-left: 0; }
1569
+ .tour-route > li { padding-left: 0; margin: 0 0 1em; }
1570
+ .tour-route-link { color: var(--tour-accent-bright); background: none; border: 0; padding: 0; font: inherit; font-weight: 600; text-align: left; cursor: pointer; }
1571
+ .tour-route-number { color: var(--tour-muted); font-variant-numeric: tabular-nums; }
1572
+ .tour-route-link:hover { text-decoration: underline; }
1573
+ .tour-route-link:focus-visible { outline: 2px solid currentColor; outline-offset: 3px; }
1574
+ .tour-step-orientation { color: var(--tour-muted); font-size: 0.9em; overflow-wrap: anywhere; }
1575
+
1576
+ /* Bookends use the space otherwise reserved for code; evidence keeps its saved split. */
1577
+ body.tour-bookend.tour-discussion:not(.tour-derived-mode) #tour-narrative { height: calc(100vh - var(--workspace-toolbar-height)) !important; }
1578
+ body.tour-bookend.tour-discussion #tour-narrative-resizer { display: none; }
1579
+
1580
+ .tour-route-chapter { margin-top: 1.5em; }
1581
+ .tour-route-chapter > .tour-route { margin-top: 1em; padding-left: 1em; border-left: 2px solid var(--tour-border); }