@davmash/bygone 0.9.7 → 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 +30 -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 +86 -67
  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 +20515 -16822
  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 +337 -176
  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,67 +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 {
923
- margin: 0 0 9px;
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;
924
900
  }
925
901
 
926
- .tour-step-context > summary {
902
+ .tour-scene-header {
903
+ position: sticky;
904
+ top: 0;
905
+ z-index: 2;
927
906
  display: flex;
928
- align-items: center;
929
- min-width: 0;
930
- gap: 6px;
931
- padding: 4px 0;
932
- overflow-wrap: anywhere;
933
- color: var(--tour-muted);
934
- font-size: 13px;
935
- line-height: 1.4;
936
- cursor: pointer;
937
- list-style: none;
938
- }
939
-
940
- .tour-step-context > summary::before {
941
- color: var(--tour-faint);
942
- content: "▸";
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);
943
912
  }
944
913
 
945
- .tour-step-context[open] > summary::before {
946
- content: "▾";
947
- }
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); }
948
923
 
949
- .tour-step-context > summary::-webkit-details-marker {
950
- display: none;
924
+ .tour-scene-context { flex: 0 0 auto; }
925
+ .tour-scene-context > summary {
926
+ display: flex;
927
+ align-items: center;
928
+ justify-content: center;
929
+ width: 28px;
930
+ height: 28px;
931
+ color: var(--tour-body);
932
+ background: var(--tour-surface);
933
+ cursor: pointer;
934
+ list-style: none;
935
+ border-radius: 4px;
951
936
  }
952
-
953
- .tour-step-context > summary::marker {
937
+ .tour-scene-header:not(.is-stuck) .tour-scene-context { visibility: hidden; }
938
+ .tour-scene-context > summary::before {
954
939
  content: "";
955
- }
956
-
957
- .tour-step-context > summary:hover,
958
- .tour-step-context > summary:focus-visible {
959
- color: #fff;
960
- }
961
-
962
- .tour-step-context > summary:focus-visible {
963
- outline: 2px solid var(--tour-accent-bright);
964
- outline-offset: 2px;
965
- }
966
-
967
- .tour-step-context-body {
968
- margin: 2px 0 8px;
969
- padding: 7px 0 3px 12px;
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;
958
+ max-height: calc(var(--tour-reading-viewport, 200px) / 2);
959
+ overflow-y: auto;
960
+ overscroll-behavior: contain;
961
+ padding: 12px 14px;
970
962
  color: var(--tour-muted);
971
- 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);
972
966
  font-size: 13px;
973
967
  line-height: 1.45;
974
968
  }
975
969
 
976
- .tour-step-context-body .tour-narrative-summary,
977
- .tour-step-context-body .tour-narrative-bullets,
978
- .tour-step-context-body .tour-narrative-tags,
979
- .tour-step-context-body .tour-narrative-takeaway {
980
- color: inherit;
981
- }
982
-
983
970
  .tour-step-requirement {
984
971
  display: flex;
985
972
  flex-wrap: wrap;
@@ -992,7 +979,7 @@ body.tour-derived-mode .tour-narrative-resizer {
992
979
 
993
980
  .tour-requirement-chip {
994
981
  padding: 1px 6px;
995
- border: 1px solid rgba(166, 140, 255, 0.34);
982
+ border: 1px solid var(--bygone-accent-subtle);
996
983
  border-radius: 9px;
997
984
  color: var(--tour-body);
998
985
  font-size: 12px;
@@ -1020,7 +1007,7 @@ body.tour-derived-mode .tour-narrative-resizer {
1020
1007
  margin-top: 7px;
1021
1008
  padding-top: 7px;
1022
1009
  color: var(--tour-faint);
1023
- border-top: 1px solid rgba(166, 140, 255, 0.2);
1010
+ border-top: 1px solid var(--bygone-accent-subtle);
1024
1011
  font-family: var(--vscode-editor-font-family, monospace);
1025
1012
  }
1026
1013
 
@@ -1049,18 +1036,18 @@ body.tour-derived-mode .tour-narrative-resizer {
1049
1036
  flex: none;
1050
1037
  padding: 4px 8px;
1051
1038
  color: var(--tour-accent-bright);
1052
- border: 1px solid rgba(169, 159, 255, 0.35);
1039
+ border: 1px solid color-mix(in srgb, var(--tour-accent-bright) 35%, transparent);
1053
1040
  border-radius: 5px;
1054
- background: rgba(169, 159, 255, 0.07);
1041
+ background: color-mix(in srgb, var(--tour-accent-bright) 7%, transparent);
1055
1042
  cursor: pointer;
1056
1043
  font: inherit;
1057
1044
  }
1058
1045
 
1059
1046
  .tour-show-in-code:hover,
1060
1047
  .tour-show-in-code:focus-visible {
1061
- color: #fff;
1062
- border-color: rgba(169, 159, 255, 0.7);
1063
- 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);
1064
1051
  outline: none;
1065
1052
  }
1066
1053
 
@@ -1074,6 +1061,7 @@ body.tour-derived-mode .tour-narrative-resizer {
1074
1061
  .tour-narrative-content {
1075
1062
  flex: 1 1 auto;
1076
1063
  min-height: 0;
1064
+ overflow-anchor: none;
1077
1065
  overflow-x: hidden;
1078
1066
  overflow-y: auto;
1079
1067
  padding-right: 8px;
@@ -1082,7 +1070,7 @@ body.tour-derived-mode .tour-narrative-resizer {
1082
1070
  .tour-audio-settings > summary, .tour-details > summary {
1083
1071
  cursor: pointer; color: var(--tour-muted); padding: 5px 0; line-height: 1.5;
1084
1072
  }
1085
- .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); }
1086
1074
  .tour-audio-settings > summary:focus-visible,
1087
1075
  .tour-details > summary:focus-visible { outline: 2px solid var(--tour-accent-bright); outline-offset: 2px; }
1088
1076
  .tour-audio-settings > summary[hidden] { display: none; }
@@ -1104,18 +1092,46 @@ body.tour-derived-mode .tour-narrative-resizer {
1104
1092
  .tour-narration-dock #tour-listen {
1105
1093
  display: inline-flex;
1106
1094
  align-items: center;
1095
+ justify-content: center;
1096
+ flex: 0 0 auto;
1107
1097
  gap: 5px;
1108
1098
  color: var(--tour-accent-bright);
1109
1099
  }
1100
+ .tour-narration-dock #tour-listen-label { min-width: 7ch; }
1110
1101
  .tour-narration-dock #tour-listen svg { width: 12px; height: 12px; fill: currentColor; }
1111
1102
  .tour-narration-dock #tour-narration { flex-shrink: 0; }
1112
1103
  .tour-narration-dock #tour-narration-voice { max-width: 150px; }
1113
1104
  .tour-narration-dock .tour-narration-status {
1105
+ flex: 0 0 28ch;
1106
+ width: 28ch;
1114
1107
  min-width: 0;
1115
- white-space: normal;
1116
- 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;
1117
1114
  }
1118
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; }
1119
1135
  .tour-details .tour-source { display: inline-block; margin-top: 8px; }
1120
1136
  .tour-details .tour-source[hidden] { display: none; }
1121
1137
  .tour-files[hidden],
@@ -1127,7 +1143,7 @@ body.tour-derived-mode .tour-narrative-resizer {
1127
1143
  }
1128
1144
 
1129
1145
  .tour-outline-group.has-active {
1130
- border-left-color: rgba(169, 159, 255, 0.58);
1146
+ border-left-color: color-mix(in srgb, var(--tour-accent-bright) 58%, transparent);
1131
1147
  }
1132
1148
 
1133
1149
  .tour-outline-heading {
@@ -1151,8 +1167,8 @@ body.tour-derived-mode .tour-narrative-resizer {
1151
1167
 
1152
1168
  .tour-outline-toggle:hover,
1153
1169
  .tour-outline-toggle:focus-visible {
1154
- color: #fff;
1155
- background: rgba(255, 255, 255, 0.045);
1170
+ color: var(--tour-body);
1171
+ background: var(--bygone-hover);
1156
1172
  }
1157
1173
 
1158
1174
  .tour-outline-toggle:focus-visible {
@@ -1187,8 +1203,8 @@ body.tour-derived-mode .tour-narrative-resizer {
1187
1203
  cursor: pointer;
1188
1204
  overflow-wrap: anywhere;
1189
1205
  }
1190
- .tour-outline-step:hover { background: rgba(255,255,255,.05); }
1191
- .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); }
1192
1208
  .tour-outline-step:focus-visible { outline: 2px solid var(--tour-accent-bright); outline-offset: 1px; }
1193
1209
 
1194
1210
  .tour-chapter-link {
@@ -1208,12 +1224,12 @@ body.tour-derived-mode .tour-narrative-resizer {
1208
1224
  }
1209
1225
 
1210
1226
  .tour-chapter-link:hover {
1211
- background: rgba(255, 255, 255, 0.045);
1227
+ background: var(--bygone-hover);
1212
1228
  }
1213
1229
 
1214
1230
  .tour-chapter-link.is-active,
1215
1231
  .tour-scene.is-active {
1216
- border-left-color: rgba(169, 159, 255, 0.72);
1232
+ border-left-color: var(--bygone-accent-strong);
1217
1233
  }
1218
1234
 
1219
1235
  .tour-chapter-link:focus-visible {
@@ -1243,16 +1259,35 @@ body.tour-derived-mode .tour-narrative-resizer {
1243
1259
  .tour-mode-tabs { display: flex; flex-wrap: wrap; gap: 5px; }
1244
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; }
1245
1261
  .tour-mode-tabs button:hover { border-color: var(--tour-accent-bright); }
1246
- .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); }
1247
1263
  .tour-mode-tabs button:focus-visible { outline: 2px solid var(--tour-accent-bright); outline-offset: 2px; }
1248
1264
  .tour-mode-description { margin: 2px 0; color: var(--tour-muted); font-size: 12px; line-height: 1.45; overflow-wrap: anywhere; }
1249
1265
  .tour-evidence-controls { display: grid; gap: 6px; }
1250
1266
  .tour-evidence-controls[hidden] { display: none; }
1251
- .tour-evidence-actions { display: flex; flex-wrap: wrap; gap: 6px; }
1252
- .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; }
1253
- .tour-evidence-actions button:hover { border-color: var(--tour-accent-bright); }
1254
- .tour-evidence-actions button:disabled { opacity: .5; cursor: default; }
1255
- #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; }
1256
1291
  body.tour-derived-mode .tour-search { display: none; }
1257
1292
  body.tour-derived-mode .tour-overview { flex-shrink: 0; }
1258
1293
  body.tour-derived-mode .tour-shell { overflow-y: auto; }
@@ -1264,7 +1299,7 @@ body.tour-derived-mode .tour-shell { overflow-y: auto; }
1264
1299
  flex-wrap: wrap;
1265
1300
  gap: 8px;
1266
1301
  padding-block: 8px;
1267
- font: 12px var(--tour-body-font);
1302
+ font: var(--bygone-ui-font-size) var(--tour-body-font);
1268
1303
  color: var(--tour-muted);
1269
1304
  }
1270
1305
  .tour-directory-breadcrumb[hidden],
@@ -1280,7 +1315,7 @@ body.tour-directory-file-open #file-info { display: none; }
1280
1315
  font: inherit;
1281
1316
  cursor: pointer;
1282
1317
  }
1283
- .tour-directory-breadcrumb button:hover { background: rgba(255, 255, 255, 0.07); }
1318
+ .tour-directory-breadcrumb button:hover { background: var(--bygone-hover); }
1284
1319
  .tour-directory-breadcrumb button:focus-visible { outline: 2px solid var(--tour-accent-bright); }
1285
1320
  .tour-directory-file { overflow-wrap: anywhere; color: var(--tour-body); }
1286
1321
  .tour-directory-narration-context { margin-left: auto; color: var(--tour-faint); }
@@ -1293,7 +1328,6 @@ body.tour-directory-file-open #file-info { display: none; }
1293
1328
 
1294
1329
  .tour-overview h1 { margin-bottom: 6px; font-size: 18px; }
1295
1330
  .tour-mode-controls { margin: 8px 0 0; }
1296
- .tour-review-toggle { margin-top: 8px; }
1297
1331
  .tour-details { margin-top: 8px; }
1298
1332
 
1299
1333
  .tour-navigator-tabs {
@@ -1318,8 +1352,9 @@ body.tour-directory-file-open #file-info { display: none; }
1318
1352
  cursor: pointer;
1319
1353
  }
1320
1354
 
1321
- .tour-navigator-tabs button:hover { background: rgba(255, 255, 255, 0.05); }
1322
- .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); }
1323
1358
  .tour-navigator-tabs button:focus-visible { outline: 2px solid var(--tour-accent-bright); outline-offset: 1px; }
1324
1359
 
1325
1360
  .tour-navigator-content,
@@ -1335,7 +1370,7 @@ body.tour-directory-file-open #file-info { display: none; }
1335
1370
  .tour-navigator-panel[hidden] { display: none; }
1336
1371
  .tour-search-disclosure { flex: 0 0 auto; border-bottom: 1px solid var(--tour-border); }
1337
1372
  .tour-search-disclosure > summary { padding: 8px 12px; color: var(--tour-muted); cursor: pointer; }
1338
- .tour-search-disclosure > summary:hover { color: #fff; }
1373
+ .tour-search-disclosure > summary:hover { color: var(--tour-body); }
1339
1374
  .tour-search-disclosure > summary:focus-visible { outline: 2px solid var(--tour-accent-bright); outline-offset: -2px; }
1340
1375
  .tour-search-disclosure .tour-search { border-bottom: 0; }
1341
1376
  .tour-scenes, .tour-files { min-height: 0; }
@@ -1392,6 +1427,7 @@ body.tour-directory-file-open #file-info { display: none; }
1392
1427
  .tour-narrative-toolbar { gap: 6px; }
1393
1428
  .tour-narration-controls select { max-width: 150px; }
1394
1429
  .tour-narration-status { width: 100%; margin-left: 0; text-align: left; }
1430
+ .tour-narration-dock .tour-narration-status { flex-basis: 100%; width: 100%; }
1395
1431
 
1396
1432
  body.tour-mode #container {
1397
1433
  width: 100vw;
@@ -1418,3 +1454,128 @@ body.tour-directory-file-open #file-info { display: none; }
1418
1454
  border-radius: 2px;
1419
1455
  background: var(--bygone-tour-range-color, #a99bf5);
1420
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); }