runlist 0.96.0 → 0.97.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 (41) hide show
  1. package/README.md +170 -43
  2. package/assets/app/app.css +189 -3
  3. package/assets/app/app.mjs +49 -31
  4. package/assets/app/document-create.mjs +3 -2
  5. package/assets/app/document-lifecycle.mjs +17 -8
  6. package/assets/app/document-stages.mjs +3 -1
  7. package/assets/app/document-views.mjs +23 -1
  8. package/assets/app/editor-navigation.mjs +16 -23
  9. package/assets/app/filing-navigation.mjs +18 -16
  10. package/assets/app/git-changes.mjs +11 -2
  11. package/assets/app/index.html +34 -23
  12. package/assets/app/library-navigation.mjs +29 -16
  13. package/assets/app/record-navigation.mjs +68 -23
  14. package/assets/app/recovery-center.mjs +8 -7
  15. package/assets/app/settings.mjs +48 -10
  16. package/assets/app/template-editor.mjs +22 -12
  17. package/assets/app/transport.mjs +1 -2
  18. package/bin/runlist.mjs +64 -15
  19. package/package.json +1 -1
  20. package/plugins/runlist-codex/.codex-plugin/plugin.json +1 -1
  21. package/plugins/runlist-codex/skills/runlist/SKILL.md +3 -1
  22. package/src/app.mjs +9 -4
  23. package/src/baton.mjs +49 -11
  24. package/src/brief.mjs +145 -0
  25. package/src/commands.mjs +4 -3
  26. package/src/config.mjs +16 -26
  27. package/src/doctor.mjs +15 -0
  28. package/src/extractors.mjs +7 -14
  29. package/src/flags.mjs +5 -3
  30. package/src/hud.mjs +32 -63
  31. package/src/index.mjs +2 -0
  32. package/src/install.mjs +6 -4
  33. package/src/installation.mjs +117 -0
  34. package/src/new.mjs +27 -7
  35. package/src/prompt-handoff.mjs +132 -0
  36. package/src/prompts.mjs +112 -16
  37. package/src/section.mjs +46 -11
  38. package/src/show.mjs +132 -16
  39. package/src/template-store.mjs +16 -5
  40. package/src/update.mjs +7 -28
  41. package/src/util.mjs +7 -0
package/README.md CHANGED
@@ -26,6 +26,30 @@ same CLI. The npm package is `runlist`; existing `dotmd-cli` installs should be
26
26
  replaced with `runlist`. The Claude Code plugin is `runlist@runlist`. Legacy
27
27
  `dotmd.config.*` files, `DOTMD_*` variables and `.dotmd/` state keep working.
28
28
 
29
+ For local CLI review, run this from the source checkout:
30
+
31
+ ```bash
32
+ npm link --ignore-scripts
33
+ npm ls -g --depth=0 runlist # shows the checkout path when linked
34
+ ```
35
+
36
+ Now `rl`, `runlist`, and `dotmd` run directly from that checkout wherever this
37
+ Node installation is selected; source edits take effect immediately. npm globals
38
+ and links belong to each Node installation. If entering a repo switches Node
39
+ through NVM, link the checkout using that Node's npm too. Check
40
+ `command -v rl` and `npm ls -g --depth=0 runlist` inside the target repo.
41
+ A normal `npm install -g runlist` instead
42
+ installs a separate copy of the published package. Merely editing or pulling the
43
+ checkout does not update that copy. The version number alone cannot distinguish
44
+ an unreleased checkout from an installed release.
45
+
46
+ To leave local review and restore a released CLI, run
47
+ `npm install -g runlist@<version>` (replace `<version>` with the release wanted).
48
+ `rl update` also installs the published CLI, replacing the local link. Project
49
+ dependencies installed with `npm install -D` are separate again: project scripts
50
+ and `npx` can resolve those before the global CLI. Linking the CLI does not
51
+ rebuild the desktop app or refresh an agent plugin's installed files.
52
+
29
53
  If you installed the old package globally, remove it before installing the new
30
54
  one because both packages provide the same executable names:
31
55
 
@@ -47,8 +71,8 @@ controls are experimental; live retrieval depends on a compatible external
47
71
  provider. Local chat and push are deferred.
48
72
 
49
73
  <!-- runlist:release:start -->
50
- CLI and desktop release version: **0.96.0**.
51
- [Mac installer and release notes](https://github.com/reowens/runlist/releases/tag/desktop-v0.96.0).
74
+ CLI and desktop release version: **0.97.0**.
75
+ [Mac installer and release notes](https://github.com/reowens/runlist/releases/tag/desktop-v0.97.0).
52
76
  Normal product releases publish both components; an installed Mac app is updated with rollback after it has quit.
53
77
  <!-- runlist:release:end -->
54
78
 
@@ -59,33 +83,72 @@ npm package alone does not download an app onto a machine without one.
59
83
  Earlier development packages and their qualification results are historical;
60
84
  see the [desktop validation record](desktop/VALIDATION.md).
61
85
 
62
- Deferred work awaiting selection:
63
-
64
- 1. Expand local-commit qualification to process filters, broader clean-filter
65
- command profiles, Windows, Linux x64/other Git versions and additional signing profiles.
66
- Configured commit hooks and noninteractive SSH/OpenPGP signing are supported
67
- in current source on the qualified macOS/Linux combinations. Push is deferred.
68
- 2. Optional grepmax live retrieval/coverage qualification is parked: the owner
69
- reports a watcher issue requiring a reboot. The last check saw gmax 0.26.65
70
- ready, but its installed bridge/daemon lacked Runlist's required document-search
71
- contract. Watcher recovery and compatibility must be verified before live
72
- qualification resumes; preserve the existing safety hold. See the
73
- current status and resume gates.
74
- The compatibility plan
75
- now has steps 1–4 passing against gmax 0.26.66 source and an extracted local
76
- npm candidate, including the actual private helper. Deployment and live
77
- checks remain separate gates.
78
- Large-checkout inventory,
79
- unavailable-state memory/latency and bridge cleanup have terminal evidence.
80
- The Runlist GUI/backend adapter and guarded protocol fixtures are included
81
- in GUI 0.94.0-rc.1. External provider deployment and successful live retrieval
82
- remain unverified. Optional local model chat is deferred.
83
- 3. Complete native plan lifecycle, legacy migration,
84
- settings/diagnostics. GUI yardstick and Filing reports are delivered in
85
- 0.94.0-rc.1. Stage filters/groups and guarded Stage editing are also delivered.
86
- 4. Finish platform qualification: a terminal-ready Windows host, Linux x64 and
87
- older distributions, real-version upgrades, fresh/minimum-version and Intel
88
- Macs, plus native rendering, focus, accessibility and whole-window memory.
86
+ **Current desktop improvements:** the workspace uses quieter navigation, a clear
87
+ back-to-list action, readable text and fewer routine banners. Document pins and
88
+ record drafts persist locally; failed searches clear stale results and offer
89
+ Retry. File options, raw Markdown editing and advanced settings stay available
90
+ through their disclosures.
91
+
92
+ Read-only installation checks now explain the active source:
93
+
94
+ ```bash
95
+ rl doctor --project --json # CLI launcher/Node scope, source identity, project and desktop copies
96
+ rl install --json # host copies plus the same installation report
97
+ rl update --check # versions, source comparison and what an update replaces
98
+ rl doctor --prompts --json # parent-link findings; no consumption or repair
99
+ ```
100
+
101
+ Engine fingerprints cover shared source inputs, excluding private documents,
102
+ state, runtime binaries and the release version label. A matching fingerprint
103
+ compares engine code, not signatures, native rendering or runtime qualification.
104
+ Host source, cache and registry copies are labelled separately; a cache entry
105
+ alone does not prove which copy a running host has loaded. No package manager or
106
+ host command runs to produce the `doctor --project` installation report.
107
+
108
+ **0.96.1 is published and installed locally**, including the desktop usability,
109
+ draft recovery, handoff and failed-status-preview confirmation fixes. The Mac
110
+ installer is signed, notarized and verified; installation retained the previous
111
+ app for rollback. Open it with `rl desktop`. See the
112
+ [release validation](desktop/VALIDATION.md#current-mac-release--2026-10-21)
113
+ for checks and evidence. Full-app dialog accessibility remains an open finding;
114
+ fresh/minimum-host and controlled whole-app performance qualification remain
115
+ follow-up work.
116
+
117
+ Verify an installed Mac app without opening it:
118
+
119
+ ```bash
120
+ node desktop/scripts/check-installed.mjs
121
+ ```
122
+
123
+ The checker prints the installed version and selected test source. It uses this
124
+ checkout when its version and engine fingerprint match; otherwise it searches
125
+ local frozen sources under `desktop/releases/*/source`. For a snapshot stored
126
+ elsewhere, pass `--source /path/to/matching/source`. A missing match stops the
127
+ check before running tests. Tests use the installed helper/runtime with networking
128
+ denied and create no app window.
129
+
130
+ Parent-link diagnostics support a
131
+ bounded handoff reconciliation:
132
+ record completed results in durable plans before explicitly archiving the
133
+ selected prompts. Historical nested-archive origin recovery stays deferred until
134
+ a concrete case needs it.
135
+
136
+ Remaining product work:
137
+
138
+ 1. Resolve full-app dialog accessibility and extend native offline, fresh/minimum-Mac
139
+ installation/upgrade/recovery and whole-app performance qualification.
140
+ 2. Finish the broader native-plan, identity/migration, history/verification,
141
+ scoped-relationship and advanced settings/diagnostics contracts. Reviewed
142
+ legacy plan status/archive operations already ship.
143
+ 3. Qualify additional local-commit filter, hook, signing and platform profiles.
144
+ Push remains deferred.
145
+ 4. Deploy and qualify an exact optional grepmax provider against an existing
146
+ index, after the separately recorded watcher/resource hold is resolved.
147
+ Compatibility fixtures pass; successful live retrieval remains unverified.
148
+ Local model chat remains deferred.
149
+ 5. Complete post-release agent-workflow measurement and assess the installed
150
+ OpenCode prompt-hook API. A Rust engine migration remains planned pending
151
+ performance evidence.
89
152
 
90
153
  The current Mac installer is linked in the release-version section above.
91
154
  CLI and desktop include the optional product yardstick.
@@ -493,7 +556,7 @@ reference repairs, history and index updates. The review checks source, claims,
493
556
  configuration and destination again before publishing. Save or discard drafts
494
557
  first. Claimed sources and native plan lifecycle operations are unavailable;
495
558
  native flags and decisions use their domain actions instead. Moves retain
496
- browser pins and heading bookmarks. Lost acknowledgements can be inspected and
559
+ browser pins. Lost acknowledgements can be inspected and
497
560
  retried through the retained operation ID. An interrupted runner stays uncertain
498
561
  until inspected; acknowledging its outcome records that uncertainty without
499
562
  replaying the operation. Retained CLI transactions must be repaired first.
@@ -568,28 +631,37 @@ shows loaded document roots, exclusions, status rules and where changes live.
568
631
  Repository configuration remains editable in its source or through the CLI;
569
632
  this panel displays its effective rules.
570
633
 
571
- **Appearance** in the header offers Light, Dark, and System. The browser remembers
634
+ **Appearance** in the Workspace menu offers Light, Dark, and System. The browser remembers
572
635
  your choice across reloads and shares it with other tabs at the same local app
573
636
  address. System follows your OS appearance, including live changes. The theme
574
637
  covers the library, inline editor, source, diffs, section tools, and templates.
575
638
 
576
- **Sections** provides a searchable heading outline, heading bookmarks, and section
577
- insertion. Command/Ctrl+Shift+J focuses section search; Alt+Page Up/Down moves
578
- between headings. Stars save bookmarks for this checkout and file in the current
579
- browser. Inline heading renames update their bookmarks; removed or unmatched
580
- headings stay visible as unavailable bookmarks.
581
-
582
- **Templates** in the sidebar opens the doc, plan, and prompt scaffolds with
583
- Markdown editing, an example preview, and a diff before saving. Template drafts
584
- stay in browser storage. Saves use revision checks and write the repository's
585
- `runlist.templates.json`; ordinary `runlist new` commands consume these overrides.
586
- Existing documents are unaffected. Keep `{{title}}`, `{{body}}`, and the managed
639
+ **Details** provides a searchable heading outline, file information, and section
640
+ insertion. Command/Ctrl+Shift+J opens section search; Alt+Page Up/Down moves
641
+ between headings. Select a heading to jump to that section.
642
+
643
+ **Templates** in the sidebar opens doc and plan scaffolds and the prompt wrapper.
644
+ The editor also includes **Resume draft** and **Subagent draft**. All
645
+ support Markdown editing, an example preview, and a diff before saving. Template
646
+ drafts stay in browser storage. Saves use revision checks and write the repository's
647
+ `runlist.templates.json`. Document overrides are used by ordinary `runlist new`
648
+ commands; draft outlines are used by `runlist baton --template` and
649
+ `runlist baton --subagent --template`. Saving a draft outline does not change the
650
+ prompt wrapper or replace the repository's `templates.prompt.baton` instructions,
651
+ which are shown beside the outline. Existing documents are unaffected.
652
+ For document scaffolds, keep `{{title}}`, `{{body}}`, and the managed
587
653
  `{{status}}`/`{{date}}` metadata placeholders; `{{version}}` is also available.
588
654
  Authored complete bodies and explicit plan variants retain their existing CLI
589
655
  behavior. JavaScript templates from `runlist.config.mjs` can be inspected without
590
656
  executing them. Built-in types can receive a Markdown override; custom JavaScript
591
657
  types remain editable in that config file. The template file can be committed
592
- with Git; bookmarks and draft recovery remain local.
658
+ with Git; document pins and draft recovery remain local. The subagent outline keeps
659
+ `parent_prompt: {{parent_prompt}}`; the CLI fills it from `--parent` or
660
+ `RUNLIST_PARENT_PROMPT`. Resume outlines have no required placeholders.
661
+ Drafts use the `handoff:resume` and `handoff:subagent` keys inside `templates`;
662
+ repository document types named `resume` or `subagent` remain separate.
663
+ The installed desktop bundles its own engine: an npm link updates CLI and
664
+ `rl app`, while desktop changes need a new desktop build/install.
593
665
 
594
666
  The renderer covers headings, paragraphs, lists/tasks, tables, quotes, fenced
595
667
  code, and safe links. Authored HTML is displayed as text; unsupported syntax
@@ -645,6 +717,12 @@ Use `runlist set <status> [<file>]` for lifecycle changes rather than editing a
645
717
  runs lifecycle hooks, repairs references after moves, and synchronizes the
646
718
  index.
647
719
 
720
+ Ordinary status changes, including `paused`, keep the document in its current
721
+ folder. Archiving still moves it into `archived/`. Repositories that want
722
+ status-based moves can opt in with `lifecycle.filedStatuses` (for example,
723
+ `{ paused: 'held' }`) or a rich status's `filed` setting. Existing files are
724
+ not relocated when this default changes.
725
+
648
726
  For unfinished session work, save the handoff and release the owned plan in one
649
727
  operation:
650
728
 
@@ -659,6 +737,55 @@ plan. A child owning a dedicated plan can pass that plan with `--subagent`.
659
737
  Existing prompts keep their names. See `runlist baton --help` for prefix and
660
738
  replacement checks.
661
739
 
740
+ To associate a child handoff with its parent, use
741
+ `runlist baton --subagent review --parent resume-session-name @/tmp/review.md`.
742
+ This saves `parent_prompt: resume-session-name`; the parent can be saved later.
743
+ `rl prompts` collapses children into a `[+ N subagent prompts]` count on
744
+ the matching `resume-*` prompt's line. Use `rl prompts --verbose` to expand their names
745
+ and target plans. Existing `subagent-*`, `agent-*`
746
+ and `session-*` names also group when they share the parent's name stem (the
747
+ longest match wins). Children without a visible parent share a separate count.
748
+ Grouping preserves consumption order and the `[NEXT]` marker; JSON stays flat.
749
+
750
+ Handoffs have editable draft outlines:
751
+
752
+ ```bash
753
+ rl baton --template > /tmp/resume.md
754
+ rl baton --subagent --template --parent resume-session-name > /tmp/review.md
755
+ # Fill Task, State, Next, Evidence, and Boundaries, then save:
756
+ rl baton --subagent review @/tmp/review.md
757
+ ```
758
+
759
+ The parent travels in the draft's frontmatter, so it need not be repeated on
760
+ save. A launcher can also pass `RUNLIST_PARENT_PROMPT=resume-session-name` into
761
+ the child's environment. An explicit `--parent` wins; replacement keeps an
762
+ existing link when no new parent is supplied. Unlinked legacy saves warn with
763
+ the repair command. Template generation reads the checkout's saved Markdown
764
+ settings without executing JavaScript configuration or writing session state.
765
+ The built-in resume outline covers current work, next action, decisions and
766
+ waiting items, durable evidence, and authorization boundaries. The child outline
767
+ adds its bounded task, completion state and explicit parent. **Templates** in the
768
+ current source edits both outlines; the prompt wrapper remains a separate setting.
769
+ With the default archive layout, reopening a consumed parent with
770
+ `rl prompts show docs/prompts/archived/resume-name.md`
771
+ also shows children still pending at its former live location. Older archives
772
+ that flattened nested folders may have lost that location; historical recovery
773
+ is not inferred from similar names.
774
+
775
+ Link existing children without rewriting their handoff, archiving it, or
776
+ changing its timestamps:
777
+
778
+ ```bash
779
+ rl prompts link subagent-review subagent-checks --parent resume-session-name
780
+ ```
781
+
782
+ The parent must already be a pending resume prompt. Use `--dry-run` to review
783
+ the links first. Showing or consuming a parent lists its pending child handoffs
784
+ and how to inspect them; each child stays pending until explicitly consumed or
785
+ archived. A completed child should name the result for the parent to record,
786
+ with commits, verification, and a durable repository record. A temporary
787
+ scratch path alone is not a durable handoff.
788
+
662
789
  Baton refuses when a handoff for the same work is already pending, so one piece
663
790
  of work never has two resume prompts. Inspect the pending handoff with
664
791
  `runlist prompts show <slug>`. Keep it if current; if stale, pass `--replace`
@@ -95,17 +95,17 @@
95
95
  @media(max-width:1120px){.workspace{grid-template-columns:220px minmax(400px,1fr)}.evidence{grid-column:2;border-left:0;border-top:1px solid var(--line)}.evidence #flags{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px}.file-info{max-width:700px}.markdown{padding:30px}.document-toolbar{padding:19px 24px}.view-tabs{padding:0 24px;gap:15px}.identity{display:none}}
96
96
  @media(max-width:740px){.app-header{height:58px;padding:0 16px;gap:17px}.checkout{font-size:11px;padding-left:16px}#disconnect{font-size:11px;padding:6px;margin-left:auto}#notice{padding:9px 16px}.workspace{display:block}.sidebar{display:none;max-height:50vh;overflow:auto;border-right:0;border-bottom:1px solid var(--line);padding:18px}.sidebar.open{display:block}.sidebar-footer{display:none}.document-toolbar{padding:16px;flex-wrap:wrap;gap:10px}.document-name{flex-basis:calc(100% - 70px)}#toggle-plans{display:block;font-size:11px}.document-actions{margin-left:auto}.view-tabs{padding:0 16px;gap:15px;flex-wrap:wrap;height:auto;min-height:50px}.view-tabs button{font-size:11px}.draft-status{width:100%;padding-bottom:9px;text-align:left}.markdown{padding:24px 22px 50px;font-size:13px}.markdown h1{font-size:29px}.markdown h2{font-size:23px}.editing,.reviewing,.source-view{padding:22px 16px}.editor-caption{align-items:start}.editor-caption span:last-child{max-width:160px;text-align:right}textarea{padding:15px;font-size:11px;min-height:50vh}.evidence{padding:24px 22px}.evidence #flags{display:block}.save-bar{flex-wrap:wrap}.save-bar>div{flex-basis:100%}.conflict{margin:16px;padding:17px}.conflict-columns{display:block}.inline-note{margin:16px 16px 0}.empty{padding:45px 24px}.connect-panel{margin-top:45px}}
97
97
  /* The document itself is the editing surface. Block controls appear on intent. */
98
- .editing{padding:0 0 30px}.inline-editor-hint{display:flex;align-items:center;justify-content:space-between;gap:10px;max-width:850px;margin:0 auto;padding:15px 46px 0;color:var(--subtle);font-size:11px}.inline-editor-hint kbd{font:inherit;background:var(--code);border:1px solid var(--line);border-radius:3px;padding:0 4px}.block-document{padding-top:22px}.doc-block{position:relative;margin:7px 0;min-width:0}.doc-block .block-text{outline:none;border-radius:3px;min-height:1.85em;white-space:pre-wrap;cursor:text;overflow-wrap:anywhere}.doc-block .block-text:focus{background:var(--focus-surface);box-shadow:0 0 0 1px var(--focus-line)}.doc-block .block-text:empty:before{content:attr(data-placeholder);color:var(--subtle);pointer-events:none}.block-handle{position:absolute;left:-30px;top:1px;width:24px;height:26px;padding:0;border:0;background:transparent;color:var(--subtle);opacity:0;font-size:20px;font-weight:400;z-index:1}.doc-block:hover>.block-handle,.doc-block:focus-within>.block-handle,.block-handle:focus-visible{opacity:1}.block-h1{margin:10px 0 28px}.block-h2{margin:36px 0 16px}.block-h3{margin:24px 0 10px}.doc-block h1,.doc-block h2,.doc-block h3,.doc-block h4,.doc-block h5,.doc-block h6{margin:0;min-height:1.3em!important}.block-h1 .block-handle{top:8px}.block-h2 .block-handle{top:4px}.block-bullet,.block-number,.block-task{display:flex;align-items:flex-start;gap:11px;margin:5px 0}.block-marker{flex:none;min-width:18px;color:var(--marker);line-height:1.85}.block-number .block-marker{font-size:.95em}.block-task input{width:16px;height:16px;min-width:16px;margin:7px 0 0;accent-color:var(--green);cursor:pointer}.block-task .block-text,.block-bullet .block-text,.block-number .block-text{flex:1;min-width:0}.block-task:has(input:checked)>.block-text{color:var(--subtle);text-decoration-color:var(--subtle)}.block-quote{padding:4px 16px;border-left:3px solid var(--quote-line);margin:20px 0;color:var(--muted)}.block-code pre{margin:16px 0!important;white-space:pre;overflow:auto;min-height:3em!important}.source-block summary{color:var(--muted);font-size:11px;cursor:pointer;margin:5px 0 14px}.source-block textarea{min-height:150px;font-size:12px}.locked-block{border-top:1px solid var(--line);margin-top:40px;padding-top:12px;color:var(--muted)}.locked-block>.block-handle{display:none}.block-lock-label{font-size:10px;font-family:Inter,sans-serif;color:var(--subtle)}.append-block{display:block;padding:10px 0;border:0;background:transparent;color:var(--subtle);font-size:12px;font-weight:400;margin-top:20px}.append-block:hover{color:var(--green);background:none}.editing>.editor-footer{position:sticky;bottom:0;z-index:5;background:var(--footer);border-top:1px solid var(--line);padding:12px 30px;margin:0;backdrop-filter:blur(8px)}#markdown-fallback{padding:25px 30px}.block-format{position:fixed;z-index:30;display:flex;gap:2px;border:1px solid var(--line);background:var(--raised);box-shadow:0 4px 18px var(--shadow);padding:4px;border-radius:7px}.block-format button{border:0;padding:7px 10px;border-radius:4px;font-size:12px}.block-menu{position:fixed;z-index:31;width:248px;max-height:420px;overflow:auto;border:1px solid var(--line);background:var(--raised);box-shadow:0 6px 24px var(--shadow);border-radius:8px;padding:6px}.block-menu-title{font-size:9px;letter-spacing:1px;color:var(--subtle);padding:8px 10px}.block-menu button{display:block;width:100%;text-align:left;border:0;padding:7px 10px;white-space:normal;font-size:12px}.block-menu button.selected{background:var(--hover)}.block-menu small{display:block;color:var(--subtle);font-size:10px;margin-top:2px}.block-menu p{font-size:12px;padding:8px}.block-text a{cursor:text}.block-text[contenteditable=false]{cursor:default}
98
+ .editing{padding:0 0 30px}.inline-editor-hint{display:flex;align-items:center;justify-content:flex-end;gap:10px;max-width:850px;margin:0 auto;padding:15px 46px 0;color:var(--subtle);font-size:11px}.inline-editor-hint kbd{font:inherit;background:var(--code);border:1px solid var(--line);border-radius:3px;padding:0 4px}.block-document{padding-top:22px}.doc-block{position:relative;margin:7px 0;min-width:0}.doc-block .block-text{outline:none;border-radius:3px;min-height:1.85em;white-space:pre-wrap;cursor:text;overflow-wrap:anywhere}.doc-block .block-text:focus{background:var(--focus-surface);box-shadow:0 0 0 1px var(--focus-line)}.doc-block .block-text:empty:before{content:attr(data-placeholder);color:var(--subtle);pointer-events:none}.block-handle{position:absolute;left:-30px;top:1px;width:24px;height:26px;padding:0;border:0;background:transparent;color:var(--subtle);opacity:0;font-size:20px;font-weight:400;z-index:1}.doc-block:hover>.block-handle,.doc-block:focus-within>.block-handle,.block-handle:focus-visible{opacity:1}.block-h1{margin:10px 0 28px}.block-h2{margin:36px 0 16px}.block-h3{margin:24px 0 10px}.doc-block h1,.doc-block h2,.doc-block h3,.doc-block h4,.doc-block h5,.doc-block h6{margin:0;min-height:1.3em!important}.block-h1 .block-handle{top:8px}.block-h2 .block-handle{top:4px}.block-bullet,.block-number,.block-task{display:flex;align-items:flex-start;gap:11px;margin:5px 0}.block-marker{flex:none;min-width:18px;color:var(--marker);line-height:1.85}.block-number .block-marker{font-size:.95em}.block-task input{width:16px;height:16px;min-width:16px;margin:7px 0 0;accent-color:var(--green);cursor:pointer}.block-task .block-text,.block-bullet .block-text,.block-number .block-text{flex:1;min-width:0}.block-task:has(input:checked)>.block-text{color:var(--subtle);text-decoration-color:var(--subtle)}.block-quote{padding:4px 16px;border-left:3px solid var(--quote-line);margin:20px 0;color:var(--muted)}.block-code pre{margin:16px 0!important;white-space:pre;overflow:auto;min-height:3em!important}.source-block summary{color:var(--muted);font-size:11px;cursor:pointer;margin:5px 0 14px}.source-block textarea{min-height:150px;font-size:12px}.locked-block{border-top:1px solid var(--line);margin-top:40px;padding-top:12px;color:var(--muted)}.locked-block>.block-handle{display:none}.block-lock-label{font-size:10px;font-family:Inter,sans-serif;color:var(--subtle)}.append-block{display:block;padding:10px 0;border:0;background:transparent;color:var(--subtle);font-size:12px;font-weight:400;margin-top:20px}.append-block:hover{color:var(--green);background:none}.editing>.editor-footer{position:sticky;bottom:0;z-index:5;background:var(--footer);border-top:1px solid var(--line);padding:12px 30px;margin:0;backdrop-filter:blur(8px)}#markdown-fallback{padding:25px 30px}.block-format{position:fixed;z-index:30;display:flex;gap:2px;border:1px solid var(--line);background:var(--raised);box-shadow:0 4px 18px var(--shadow);padding:4px;border-radius:7px}.block-format button{border:0;padding:7px 10px;border-radius:4px;font-size:12px}.block-menu{position:fixed;z-index:31;width:248px;max-height:420px;overflow:auto;border:1px solid var(--line);background:var(--raised);box-shadow:0 6px 24px var(--shadow);border-radius:8px;padding:6px}.block-menu-title{font-size:9px;letter-spacing:1px;color:var(--subtle);padding:8px 10px}.block-menu button{display:block;width:100%;text-align:left;border:0;padding:7px 10px;white-space:normal;font-size:12px}.block-menu button.selected{background:var(--hover)}.block-menu small{display:block;color:var(--subtle);font-size:10px;margin-top:2px}.block-menu p{font-size:12px;padding:8px}.block-text a{cursor:text}.block-text[contenteditable=false]{cursor:default}
99
99
  @media(max-width:740px){.editing{padding:0 0 16px}.inline-editor-hint{padding:12px 22px 0;align-items:start;font-size:10px}.inline-editor-hint>span{max-width:170px}.inline-editor-hint button{font-size:10px;padding:3px}.block-document{padding-left:32px;padding-right:22px;padding-top:20px}.block-handle{left:-27px;opacity:.65}.editing>.editor-footer{padding:10px 16px}.block-menu{max-height:50vh}.block-format button{padding:8px}.block-task input{margin-top:5px}#markdown-fallback{padding:20px 16px}}
100
100
 
101
101
  /* Section tools stay beside the document, including while writing. */
102
102
  .template-launch{display:flex;flex-direction:column;width:100%;text-align:left;margin-top:20px;border-top:1px solid var(--line);padding:16px 8px}.template-launch span{font-size:12px;color:var(--muted);margin-top:3px}
103
- .section-navigation{position:static;padding-bottom:20px}.section-navigation .sidebar-label{display:flex;align-items:center;gap:8px}.section-navigation .search{width:100%;margin:12px 0}.section-navigation #outline{max-height:40vh;overflow:auto;overscroll-behavior:contain}.outline-row{display:flex;align-items:center;flex-wrap:wrap;border-radius:5px;min-height:34px}.outline-row:hover{background:var(--hover)}.section-link{flex:1;min-width:0;text-align:left;font-size:12px;line-height:1.5;padding:7px 4px 7px calc(4px + (var(--heading-level) - 1)*9px);overflow:hidden;text-overflow:ellipsis}.section-link[aria-current="true"]{color:var(--green);font-weight:650;background:var(--selected);border-radius:5px}.section-bookmark{padding:5px 7px;font-size:16px;color:var(--muted)}.section-bookmark[aria-pressed="true"]{color:var(--caution)}.outline-row small{width:100%;padding-left:6px;color:var(--muted);font-size:11px}.bookmark-heading{margin-top:24px}.navigation-keys{font-size:11px;line-height:1.8;color:var(--muted);margin-top:20px}#add-section{margin-top:10px}#close-outline{display:none}#toggle-outline{margin-left:auto}.file-evidence{border-top:1px solid var(--line);padding-top:20px}.file-evidence>summary{font-size:11px;font-weight:650;letter-spacing:.08em;cursor:pointer;color:var(--muted);margin-bottom:18px}.evidence .muted{font-size:12px}.block-row{scroll-margin-top:240px}
103
+ .section-navigation{position:static;padding-bottom:20px}.section-navigation .sidebar-label{display:flex;align-items:center;gap:8px}.section-navigation .search{width:100%;margin:12px 0}.section-navigation #outline{max-height:40vh;overflow:auto;overscroll-behavior:contain}.outline-row{display:flex;align-items:center;flex-wrap:wrap;border-radius:5px;min-height:34px}.outline-row:hover{background:var(--hover)}.section-link{flex:1;min-width:0;text-align:left;font-size:12px;line-height:1.5;padding:7px 4px 7px calc(4px + (var(--heading-level) - 1)*9px);overflow:hidden;text-overflow:ellipsis}.section-link[aria-current="true"]{color:var(--green);font-weight:650;background:var(--selected);border-radius:5px}.navigation-keys{font-size:11px;line-height:1.8;color:var(--muted);margin-top:20px}#add-section{margin-top:10px}#close-outline{display:none}#toggle-outline{margin-left:auto}.file-evidence{border-top:1px solid var(--line);padding-top:20px}.file-evidence>summary{font-size:11px;font-weight:650;letter-spacing:.08em;cursor:pointer;color:var(--muted);margin-bottom:18px}.evidence .muted{font-size:12px}.block-row{scroll-margin-top:240px}
104
104
  .template-dialog{border:1px solid var(--line);border-radius:12px;width:min(1080px,calc(100vw - 48px));max-height:90vh;padding:0;box-shadow:0 24px 100px var(--shadow);color:var(--text);background:var(--panel)}.template-dialog::backdrop{background:var(--backdrop)}.template-header{display:flex;align-items:center;justify-content:space-between;padding:24px 30px;border-bottom:1px solid var(--line)}.template-header h2{margin:0;font-size:25px;font-family:Georgia,serif}.template-header p{margin:7px 0 0;font-size:13px;color:var(--muted)}.template-header>button{font-size:25px}.template-layout{display:grid;grid-template-columns:170px minmax(0,1fr);min-height:560px}.template-layout>nav{padding:20px 12px;border-right:1px solid var(--line)}.template-layout>nav button{display:block;width:100%;text-align:left;padding:12px;border-radius:6px}.template-layout>nav button.active{background:var(--selected);color:var(--green);font-weight:650}.template-detail{padding:24px 30px;min-width:0}.template-heading{display:flex;align-items:center;justify-content:space-between;gap:20px}.template-heading h3{font-size:19px;margin:0;text-transform:capitalize}.template-detail>p,.template-detail .muted{font-size:12px;line-height:1.7}.template-tabs{display:flex;gap:8px;margin:22px 0 10px}.template-tabs [aria-pressed="true"]{background:var(--selected);color:var(--green)}.template-detail textarea{box-sizing:border-box;width:100%;min-height:300px;max-height:45vh;resize:vertical;border:1px solid var(--line);border-radius:6px;background:var(--raised);padding:18px;line-height:1.65;font:12px/1.65 ui-monospace,monospace;color:var(--text)}.template-detail pre{white-space:pre-wrap;overflow-wrap:anywhere;font-size:12px}.template-detail .markdown{padding:18px;background:var(--raised);border:1px solid var(--line);border-radius:6px;max-height:45vh;overflow:auto}.template-actions{display:flex;gap:8px;flex-wrap:wrap;margin:18px 0 10px}#template-feedback{font-size:13px;padding:10px 0;min-height:20px}#template-feedback.error{color:var(--error-text)}.template-dialog details{margin:15px 0}.template-dialog summary{cursor:pointer;font-size:12px}.template-dialog #template-diff{max-height:250px;overflow:auto}
105
105
  @media(max-width:1120px){.section-navigation{position:static}#toggle-outline{display:block}.evidence.outline-open{display:block!important;position:fixed;inset:110px 18px 18px auto;width:300px;max-width:calc(100vw - 36px);z-index:20;overflow:auto;background:var(--panel);box-shadow:0 12px 60px var(--shadow);border:1px solid var(--line);border-radius:10px;padding:22px;box-sizing:border-box}.outline-open #close-outline{display:block;margin-left:auto}.outline-open .file-evidence{display:none}.outline-open #outline{max-height:45vh}}
106
106
  @media(max-width:740px){.template-dialog{width:calc(100vw - 20px);max-height:95vh}.template-header{padding:18px}.template-layout{grid-template-columns:1fr}.template-layout>nav{display:flex;gap:8px;overflow:auto;border-right:0;border-bottom:1px solid var(--line);padding:10px}.template-layout>nav button{width:auto;white-space:nowrap}.template-detail{padding:18px}.template-heading{align-items:flex-start;flex-direction:column;gap:5px}.template-detail textarea{min-height:250px}.view-tabs #toggle-outline{padding-left:8px;padding-right:8px}.section-navigation{padding-top:10px}}
107
107
  .template-header{position:sticky;top:0;z-index:2;background:var(--panel)}
108
- .document-pin{border:0;font-size:20px;padding:4px}.document-pin[aria-pressed=true]{color:var(--caution)}.document-connections{padding-bottom:20px;border-bottom:1px solid var(--line);margin-bottom:20px}.document-connections summary{font-size:11px;color:var(--muted);cursor:pointer;margin:8px 0}.connection-link{width:100%;display:block;text-align:left;font-size:11px;line-height:1.5;padding:7px 4px}.connection-link:hover{background:var(--selected)}.saved-document{display:flex;align-items:center;gap:2px}.saved-document>.plan{flex:1;min-width:0}.saved-document>.small{border:0;padding:5px;font-size:16px;color:var(--muted)}
108
+ .document-pin{border:0;font-size:12px;padding:6px 8px}.document-pin[aria-pressed=true]{color:var(--caution)}.document-connections{padding-bottom:20px;border-bottom:1px solid var(--line);margin-bottom:20px}.document-connections summary{font-size:11px;color:var(--muted);cursor:pointer;margin:8px 0}.connection-link{width:100%;display:block;text-align:left;font-size:11px;line-height:1.5;padding:7px 4px}.connection-link:hover{background:var(--selected)}.saved-document{display:flex;align-items:center;gap:2px}.saved-document>.plan{flex:1;min-width:0}.saved-document>.small{border:0;padding:5px;font-size:16px;color:var(--muted)}
109
109
  #library-home{border:0;background:transparent;padding:0;border-radius:0}#library-home:hover{color:var(--green)}.library-start .document-pin{display:none}
110
110
 
111
111
  /* Navigation names the destinations; the main area holds their contents. */
@@ -281,3 +281,189 @@ input[type=checkbox]{accent-color:var(--green)}
281
281
  .filing-home h1{font-size:30px;font-weight:580}.filing-home>p{font-size:13px;line-height:1.7}.filing-controls{display:flex;align-items:end;flex-wrap:wrap;gap:16px;margin:24px 0}.filing-controls label{display:grid;gap:8px;font-size:12px;color:var(--muted)}.filing-controls label:first-child{flex:1;min-width:180px}.filing-controls input,.filing-controls select{font:inherit;color:var(--text);background:var(--input);border:1px solid var(--line);border-radius:5px;padding:10px;box-sizing:border-box;width:100%}.filing-totals{display:flex;gap:12px 22px;flex-wrap:wrap;font-size:12px;line-height:1.8}.filing-totals details{flex-basis:100%;overflow-wrap:anywhere}.filing-totals summary{cursor:pointer}.filing-layout{display:grid;grid-template-columns:minmax(220px,1fr) minmax(250px,1.2fr);gap:26px;margin:18px 0}.filing-list,.filing-detail{min-width:0}.filing-plan{display:grid;gap:8px;text-align:left;width:100%;padding:16px;border-bottom:1px solid var(--line);border-radius:0;white-space:normal;overflow-wrap:anywhere;font-size:12px;line-height:1.6}.filing-plan strong{font-size:14px;font-weight:550}.filing-plan[aria-pressed="true"]{background:var(--code);box-shadow:inset 3px 0 var(--text)}.filing-detail{border-left:1px solid var(--line);padding-left:26px;overflow-wrap:anywhere}.filing-detail h2{font-size:19px;font-weight:550}.filing-detail p{font-size:12px;line-height:1.8}.filing-home-row{border-top:1px solid var(--line);padding:18px 0}.filing-home-row h3{font:12px/1.7 ui-monospace,monospace;overflow-wrap:anywhere}.filing-pagination{display:flex;gap:12px}.source-location{display:block;background:var(--code);color:var(--text);outline:2px solid var(--line);scroll-margin-top:180px}
282
282
  @media(max-width:740px){.yardstick-dialog{padding:18px;max-height:90vh}.filing-layout{grid-template-columns:1fr;gap:16px}.filing-detail{border-left:0;border-top:1px solid var(--line);padding:20px 0 0}.filing-controls label{width:100%}.yardstick-summary{padding:12px}.yardstick-actions button{white-space:normal}}
283
283
  .yardstick-reviewed-comparison{margin:20px 0;padding-bottom:18px;border-bottom:1px solid var(--line);font-size:13px;line-height:1.7}.yardstick-reviewed-comparison h3{font-size:12px;color:var(--muted);margin:16px 0 4px}.yardstick-reviewed-comparison p{white-space:pre-wrap;overflow-wrap:anywhere}
284
+
285
+ /* A quiet workspace: browse first, reveal supporting tools on request. */
286
+ .app-header{gap:20px;flex-wrap:nowrap}
287
+ .app-header .checkout{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
288
+ .header-actions{display:flex;align-items:center;gap:10px;flex-shrink:0}
289
+ .workspace-menu{position:relative;font-size:12px}
290
+ .workspace-menu>summary{cursor:pointer;list-style:none;padding:9px 12px;border-radius:6px;color:var(--muted)}
291
+ .workspace-menu>summary::-webkit-details-marker{display:none}
292
+ .workspace-menu>summary::after{content:'⌄';margin-left:8px}
293
+ .workspace-menu>summary:hover,.workspace-menu[open]>summary{background:var(--hover);color:var(--text)}
294
+ .workspace-menu-content{position:absolute;right:0;top:calc(100% + 10px);z-index:30;width:290px;padding:16px;background:var(--raised);border:1px solid var(--line);border-radius:9px;box-shadow:0 8px 30px var(--shadow)}
295
+ .menu-heading{font-size:11px;font-weight:650;margin-bottom:8px}
296
+ .workspace-menu .identity{display:block;font-size:12px;margin:0 0 12px}
297
+ .workspace-menu .desktop-location{padding:0;margin:0 0 8px;border:0;white-space:normal;overflow-wrap:anywhere;font-size:11px}
298
+ .workspace-menu-content>button{display:block;width:100%;text-align:left;font-size:12px;padding:10px 8px}
299
+ .workspace-menu .theme-control{justify-content:space-between;border-top:1px solid var(--line);margin-top:10px;padding-top:14px}
300
+ .workspace-menu .theme-control>span{display:block;font-size:12px}
301
+ #notice{background:var(--main);color:var(--muted);line-height:16px;min-height:32px}
302
+ #notice.error{background:var(--error-bg);color:var(--error-text)}
303
+ .workspace,.workspace.library-start{grid-template-columns:216px minmax(0,1fr);min-height:calc(100vh - 64px)}
304
+ .sidebar{padding:26px 12px 18px;gap:24px;position:sticky;top:64px;height:calc(100vh - 64px);align-self:start}
305
+ .sidebar #plan-count{display:none}
306
+ .sidebar-group>.sidebar-label{margin:0 10px 12px;letter-spacing:1px}
307
+ .sidebar-group .record-kinds{border:0;margin:0;padding:0}
308
+ .sidebar-group .record-kinds+nav{margin-top:3px}
309
+ .sidebar .template-launch{border:0;border-radius:6px;padding:9px 12px}
310
+ .sidebar-footer{font-size:11px;padding:15px 12px 0}
311
+ .library-local .plan-location{display:none}
312
+ .library-home{max-width:1240px;padding:42px 44px 28px}
313
+ .library-heading{margin-bottom:28px}
314
+ .library-heading h1{font-size:32px}
315
+ .library-heading p{font-size:13px;max-width:560px}
316
+ .library-controls{gap:12px}
317
+ .library-controls .search{padding:12px 14px}
318
+ .library-controls select{padding:11px 12px}
319
+ .library-filters{margin:14px 0 0}
320
+ .library-filters>summary{padding:6px 0;max-width:100%;line-height:1.6}
321
+ .library-filters[open]{border-bottom:1px solid var(--line);padding-bottom:16px;margin-bottom:8px}
322
+ .search-options{display:flex;align-items:center;flex-wrap:wrap;gap:12px 20px;padding:16px 0 4px}
323
+ .filter-section-label{font-size:11px;color:var(--muted)}
324
+ .filter-fields{border:0;padding:16px 0}
325
+ .saved-views{flex-wrap:wrap;margin:8px 0 0}
326
+ .saved-views select{font:inherit;padding:7px 10px;border:1px solid var(--line);border-radius:5px}
327
+ .library-pagination{padding:16px 0}
328
+ #plans .plan{padding-top:17px;padding-bottom:17px}
329
+ #plans .plan-name{font-size:14px;font-weight:600}
330
+ #plans .plan-location{font-size:11px;font-weight:400;margin-top:5px}
331
+ #plans .plan-stage{font-weight:400}
332
+ .evidence{display:none}
333
+ .evidence.outline-open{display:block}
334
+ #close-outline{display:block;margin-left:auto}
335
+ .outline-open .file-evidence{display:block}
336
+ .document-toolbar{gap:10px}
337
+ #doc-title{font-size:14px}
338
+ .view-tabs{gap:20px}
339
+ .view-tabs .draft-status{margin-left:0}
340
+ .view-tabs #toggle-outline{border:1px solid var(--line);border-radius:5px;padding:6px 10px;margin-left:auto;color:var(--text)}
341
+ .view-tabs #toggle-outline[aria-expanded=true]{background:var(--selected);border-color:var(--quote-line)}
342
+ @media(min-width:1121px){
343
+ .document-toolbar{top:64px}
344
+ .view-tabs{top:136px}
345
+ }
346
+ @media(min-width:1200px){
347
+ .workspace:has(.evidence.outline-open):not(.library-start){grid-template-columns:216px minmax(0,1fr) 270px}
348
+ .evidence.outline-open{position:sticky;top:64px;max-height:calc(100vh - 64px);padding:25px 18px}
349
+ }
350
+ @media(max-width:1199px){
351
+ .evidence.outline-open{position:fixed;inset:110px 18px 18px auto;width:300px;max-width:calc(100vw - 36px);z-index:20;overflow:auto;background:var(--panel);box-shadow:0 12px 60px var(--shadow);border:1px solid var(--line);border-radius:10px;padding:22px;max-height:none}
352
+ .library-home{padding:32px 28px}
353
+ }
354
+ @media(max-width:740px){
355
+ .app-header{height:auto;min-height:64px;padding:12px 16px;gap:12px;flex-wrap:wrap;position:relative;z-index:10}
356
+ .app-header .brand{font-size:19px;padding:0;border:0}
357
+ .app-header .checkout{max-width:none;font-size:11px}
358
+ .header-actions{flex-basis:100%;gap:8px}
359
+ .header-actions #quick-open{flex:1;text-align:left}
360
+ .header-actions button{font-size:12px;padding:8px 10px}
361
+ .workspace-menu-content{width:min(290px,calc(100vw - 32px))}
362
+ .workspace,.workspace.library-start{display:block}
363
+ .sidebar{position:static;height:auto;max-height:65vh}
364
+ .sidebar .library-local{flex:none}
365
+ .library-home{padding:26px 20px}
366
+ .library-heading h1{font-size:29px}
367
+ .library-controls .search{flex-basis:100%}
368
+ .library-controls select{flex:1}
369
+ .filter-fields{grid-template-columns:1fr}
370
+ .search-options{align-items:start;flex-direction:column;gap:12px}
371
+ .saved-views select{max-width:100%}
372
+ .document-toolbar .document-name{flex-basis:100%;order:1}
373
+ .document-toolbar #pin-document{margin-left:auto}
374
+ .document-toolbar #doc-status,.document-toolbar #lifecycle-open,.document-toolbar .document-actions{order:2}
375
+ .document-toolbar .document-actions button{font-size:12px;padding:8px 10px}
376
+ .library-start .document-toolbar .document-name{order:0;flex-basis:auto}
377
+ .document-view-tabs{gap:14px}
378
+ .view-tabs{gap:12px;align-items:center}
379
+ .view-tabs #toggle-outline{margin-left:0;font-size:11px}
380
+ .view-tabs .draft-status{margin:0;padding-bottom:10px}
381
+ }
382
+ #undo:disabled{display:none}
383
+ .document-stage-fields{display:block;font-size:12px;padding:12px 30px;margin-bottom:0}
384
+ .document-stage-fields>summary{cursor:pointer;color:var(--muted);width:fit-content;line-height:1.6}
385
+ .stage-controls{display:flex;align-items:center;flex-wrap:wrap;gap:10px;padding-top:14px}
386
+ .stage-controls>label{font-weight:600}
387
+ .stage-controls>select{max-width:100%;font:inherit;border:1px solid var(--line);border-radius:5px;padding:8px}
388
+ .stage-controls>p{flex-basis:100%;margin:0;font-size:11px;line-height:1.6}
389
+
390
+ /* Feedback appears only when there is something to report. */
391
+ #notice{position:fixed;inset:auto 20px 80px auto;z-index:40;max-width:min(620px,calc(100vw - 40px));min-height:0;padding:10px 14px;border:1px solid var(--line);border-radius:6px;background:var(--raised);box-shadow:0 4px 18px var(--shadow)}
392
+ #notice:empty,.draft-status:empty,.sidebar-footer:empty{display:none}
393
+ .save-bar{justify-content:flex-end}
394
+
395
+ /* Sticky layers follow their measured heights, including wrapped titles/notices. */
396
+ :root{--app-header-height:64px;--workspace-top:64px;--document-toolbar-height:72px;--document-tabs-height:53px}
397
+ .app-header{height:auto;min-height:64px;padding-top:12px;padding-bottom:12px;flex-wrap:wrap}
398
+ .document-toolbar{flex-wrap:wrap}
399
+ #doc-title{overflow-wrap:anywhere}
400
+ .view-tabs{height:auto;min-height:53px;flex-wrap:wrap}
401
+ .document-view-tabs{flex-wrap:wrap}
402
+ .sidebar{top:var(--workspace-top);height:calc(100vh - var(--workspace-top))}
403
+ .workspace,.workspace.library-start{min-height:calc(100vh - var(--workspace-top))}
404
+ @media(min-width:1121px){
405
+ .document-toolbar{top:var(--workspace-top)}
406
+ .view-tabs{top:calc(var(--workspace-top) + var(--document-toolbar-height))}
407
+ .conflict,.source-location{scroll-margin-top:calc(var(--workspace-top) + var(--document-toolbar-height) + var(--document-tabs-height) + 16px)}
408
+ }
409
+ @media(min-width:1200px){.evidence.outline-open{top:var(--workspace-top);max-height:calc(100vh - var(--workspace-top))}}
410
+ .changes-home.changes-empty .changes-layout{display:block}
411
+ .changes-home.changes-empty .changes-files{width:100%}
412
+ @media(max-width:740px){.sidebar{position:static;height:auto;max-height:65vh}}
413
+
414
+ @media(min-width:741px){.document-name{flex:1 1 320px}}
415
+
416
+ #create-file-options>summary{cursor:pointer;color:var(--muted);font-size:12px;padding:8px 0}
417
+ #create-file-options>.create-fields{margin-top:12px}
418
+ .view-tabs button:disabled{color:var(--subtle);cursor:default}
419
+
420
+ /* Reading hierarchy: clear navigation, readable labels, and quieter metadata. */
421
+ :root{font-size:15px;--muted:#58645c;--subtle:#667168}
422
+ :root[data-theme="dark"]{--muted:#bac4bc;--subtle:#aab6ad}
423
+ .small{font-size:13px}
424
+ .checkout{font-size:14px}
425
+ .sidebar .sidebar-label{font-size:11px;letter-spacing:1px}
426
+ .library-kinds button{font-size:15px;padding:11px 12px}
427
+ .library-kinds button>span:last-child{font-size:13px}
428
+ .sidebar .template-launch{font-size:14px}
429
+ .library-heading p{font-size:15px;line-height:1.65}
430
+ .library-columns{font-size:12px}
431
+ #plans .plan-name{font-size:16px}
432
+ #plans .plan-location,.plan-type,.plan-meta,.plan-updated{font-size:13px}
433
+ .library-local .plan-name{font-size:14px}
434
+ .document-toolbar{display:block;padding:18px 30px}
435
+ .document-navigation{display:flex;align-items:center;gap:12px;margin-bottom:16px}
436
+ .document-back{background:var(--selected);border:1px solid var(--quote-line);color:var(--text);font-size:14px;font-weight:650;padding:9px 13px;min-height:40px;white-space:normal;text-align:left}
437
+ .document-back:hover{background:var(--hover);border-color:var(--green)}
438
+ .document-heading{display:flex;align-items:center;flex-wrap:wrap;gap:14px 24px}
439
+ .document-heading .document-name{flex:1 1 320px;order:0}
440
+ #doc-title{font-size:18px;line-height:1.45}
441
+ #doc-path{font-size:12px;line-height:1.6;margin-top:5px}
442
+ .document-controls{display:flex;align-items:center;flex-wrap:wrap;gap:10px}
443
+ .document-controls .document-actions{margin-left:0}
444
+ .document-controls button,.document-pin{font-size:14px}
445
+ .status-badge{font-size:12px}
446
+ .view-tabs button,.view-tabs #toggle-outline{font-size:14px}
447
+ .draft-status{font-size:12px}
448
+ .markdown{font-size:16px;line-height:1.85;max-width:900px}
449
+ .markdown table{font-size:14px}
450
+ .diff{font-size:13px;line-height:1.8}
451
+ .source-view pre,.conflict pre,#repair-evidence{font-size:13px}
452
+ textarea{font-size:14px}
453
+ .settings-fields label,.lifecycle-dialog label,.create-fields label{font-size:14px}
454
+ #notice{font-size:14px;line-height:1.6}
455
+ @media(max-width:740px){
456
+ .document-toolbar{padding:16px 20px}
457
+ .document-navigation{flex-wrap:wrap;margin-bottom:14px}
458
+ .document-back{font-size:14px}
459
+ .document-heading .document-name{flex-basis:100%;order:0}
460
+ .document-heading .document-controls{order:1;gap:8px}
461
+ .document-toolbar #pin-document{margin-left:0}
462
+ #doc-title{font-size:17px}
463
+ .view-tabs{gap:12px}
464
+ .view-tabs button,.view-tabs #toggle-outline{font-size:14px}
465
+ .markdown{font-size:16px}
466
+ .header-actions button{font-size:14px}
467
+ .library-start .document-navigation{margin:0}
468
+ .library-start #back-library,.library-start .document-heading{display:none}
469
+ }