hdoc-tools 0.61.0 → 0.62.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +89 -75
- package/editor/dist/assets/index-Blewr90z.css +1 -1
- package/editor/dist/assets/index-BtxvGZHW.js +111 -111
- package/editor/dist/assets/spell.worker-sryEKmOj.js +13 -13
- package/editor/dist/index.html +14 -14
- package/hdoc-build-db.js +275 -275
- package/hdoc-build-embeddings.js +202 -202
- package/hdoc-build-pdf.js +232 -232
- package/hdoc-bump.js +125 -125
- package/hdoc-create.js +110 -110
- package/hdoc-db.js +114 -114
- package/hdoc-help.js +60 -60
- package/hdoc-install-browser.js +145 -145
- package/hdoc-mermaid.js +204 -204
- package/hdoc-module.js +1102 -1102
- package/hdoc-validate-config.js +355 -355
- package/hdoc-validate-interbook.js +321 -321
- package/hdoc-validate.js +1231 -1231
- package/hdoc-ver.js +45 -45
- package/package.json +12 -1
- package/templates/doc-header-non-git.html +19 -19
- package/templates/doc-header.html +26 -26
- package/templates/init/.github/workflows/hdocbuild_onpull.yml +16 -16
- package/templates/init/.github/workflows/hdocbuild_onpush.yml +15 -15
- package/templates/init/LICENSE +21 -21
- package/templates/init/README.md +9 -9
- package/templates/init/_hdocbook/index.md +4 -4
- package/templates/init/gitignore +8 -8
- package/templates/init/resources/README.md +2 -2
- package/templates/pdf/css/custom-block.css +90 -90
- package/templates/pdf/css/fonts.css +221 -221
- package/templates/pdf/css/hdocs-pdf.css +495 -495
- package/templates/pdf/css/vars.css +404 -404
- package/templates/pdf/template-footer.html +19 -19
- package/templates/pdf/template-header.html +37 -37
- package/templates/pdf/template.html +20 -20
- package/templates/pdf-header-non-git.html +12 -12
- package/templates/pdf-header.html +16 -16
- package/ui/content/invalid-hdocbook-json.html +6 -6
- package/ui/content/invalid-hdocbook-json.md +7 -7
- package/ui/css/theme-default/styles/components/content.css +124 -124
- package/ui/css/theme-default/styles/components/sidebar.css +182 -182
- package/ui/css/theme-default/styles/htldoc.layouts.css +310 -310
- package/ui/index.html +419 -419
package/LICENSE
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2022 Hornbill Docs
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2022 Hornbill Docs
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,75 +1,89 @@
|
|
|
1
|
-
# hdoc-tools
|
|
2
|
-
|
|
3
|
-
Hornbill HDocBook Development Support Tool.
|
|
4
|
-
|
|
5
|
-
## Usage
|
|
6
|
-
|
|
7
|
-
<code>hdoc argument switches</code>
|
|
8
|
-
|
|
9
|
-
## Arguments
|
|
10
|
-
|
|
11
|
-
The arguments available to this command-line tool are as follows.
|
|
12
|
-
|
|
13
|
-
### help
|
|
14
|
-
|
|
15
|
-
Outputs available arguments and switches.
|
|
16
|
-
|
|
17
|
-
### init
|
|
18
|
-
|
|
19
|
-
Initializes a new HDocBook project from a template, using runtime input variables.
|
|
20
|
-
|
|
21
|
-
### createDocs
|
|
22
|
-
|
|
23
|
-
Creates folder structure and markdown documents as defined in the HDocBook navigation item links
|
|
24
|
-
|
|
25
|
-
### stats
|
|
26
|
-
|
|
27
|
-
Returns statistics regarding the book you are working on:
|
|
28
|
-
|
|
29
|
-
- Document ID
|
|
30
|
-
- Version
|
|
31
|
-
- Title
|
|
32
|
-
- Description
|
|
33
|
-
- Public Source
|
|
34
|
-
- Total Book Word Count
|
|
35
|
-
- Number of Markdown Files in the Book
|
|
36
|
-
- Number of Static HTML Files in the Book
|
|
37
|
-
|
|
38
|
-
If the `-v` switch is provided, then more verbose output is output, which includes a list of each MD and HTML file found, the file sizes, and file-specific word count.
|
|
39
|
-
|
|
40
|
-
The book statistics do not include counts for any externally hosted content injected into the book content using the [[INCLUDE]] tags.
|
|
41
|
-
|
|
42
|
-
### build
|
|
43
|
-
|
|
44
|
-
Performs a local build of the book, validates the links and static content are present and correct and outputs as a ZIP file.
|
|
45
|
-
|
|
46
|
-
If the `-v` switch is provided, then a more verbose output is provided, which includes a list of all HTML files created and checked for embedded links and static content.
|
|
47
|
-
|
|
48
|
-
Use the `--set-version` argument to set the version number of the built book.
|
|
49
|
-
|
|
50
|
-
Use the `--no-color` argument to remove any color control characters from the output.
|
|
51
|
-
|
|
52
|
-
Use the `--no-links` argument to skip link output to CLI during validation.
|
|
53
|
-
|
|
54
|
-
### validate
|
|
55
|
-
|
|
56
|
-
Performs a minimum local build of the book, then validates the links and static content are present and correct.
|
|
57
|
-
|
|
58
|
-
If the `-v` switch is provided, then a more verbose output is provided, which includes a list of all HTML files created and checked for embedded links and static content.
|
|
59
|
-
|
|
60
|
-
Use the `--set-version` argument to set the version number of the built book.
|
|
61
|
-
|
|
62
|
-
Use the `--no-color` argument to remove any color control characters from the output.
|
|
63
|
-
|
|
64
|
-
Use the `--no-links` argument to skip link output to CLI during validation.
|
|
65
|
-
|
|
66
|
-
### serve
|
|
67
|
-
|
|
68
|
-
Starts a local web server on port 3000, serving the book content.
|
|
69
|
-
|
|
70
|
-
To preview the documentation in a browser, you can open a terminal window and run the dev preview server with the
|
|
71
|
-
command `hdoc serve` and in a local browser go to the URL `http://localhost:3000`
|
|
72
|
-
|
|
73
|
-
## Installation
|
|
74
|
-
|
|
75
|
-
> `npm install hdoc-tools -g`
|
|
1
|
+
# hdoc-tools
|
|
2
|
+
|
|
3
|
+
Hornbill HDocBook Development Support Tool.
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
<code>hdoc argument switches</code>
|
|
8
|
+
|
|
9
|
+
## Arguments
|
|
10
|
+
|
|
11
|
+
The arguments available to this command-line tool are as follows.
|
|
12
|
+
|
|
13
|
+
### help
|
|
14
|
+
|
|
15
|
+
Outputs available arguments and switches.
|
|
16
|
+
|
|
17
|
+
### init
|
|
18
|
+
|
|
19
|
+
Initializes a new HDocBook project from a template, using runtime input variables.
|
|
20
|
+
|
|
21
|
+
### createDocs
|
|
22
|
+
|
|
23
|
+
Creates folder structure and markdown documents as defined in the HDocBook navigation item links
|
|
24
|
+
|
|
25
|
+
### stats
|
|
26
|
+
|
|
27
|
+
Returns statistics regarding the book you are working on:
|
|
28
|
+
|
|
29
|
+
- Document ID
|
|
30
|
+
- Version
|
|
31
|
+
- Title
|
|
32
|
+
- Description
|
|
33
|
+
- Public Source
|
|
34
|
+
- Total Book Word Count
|
|
35
|
+
- Number of Markdown Files in the Book
|
|
36
|
+
- Number of Static HTML Files in the Book
|
|
37
|
+
|
|
38
|
+
If the `-v` switch is provided, then more verbose output is output, which includes a list of each MD and HTML file found, the file sizes, and file-specific word count.
|
|
39
|
+
|
|
40
|
+
The book statistics do not include counts for any externally hosted content injected into the book content using the [[INCLUDE]] tags.
|
|
41
|
+
|
|
42
|
+
### build
|
|
43
|
+
|
|
44
|
+
Performs a local build of the book, validates the links and static content are present and correct and outputs as a ZIP file.
|
|
45
|
+
|
|
46
|
+
If the `-v` switch is provided, then a more verbose output is provided, which includes a list of all HTML files created and checked for embedded links and static content.
|
|
47
|
+
|
|
48
|
+
Use the `--set-version` argument to set the version number of the built book.
|
|
49
|
+
|
|
50
|
+
Use the `--no-color` argument to remove any color control characters from the output.
|
|
51
|
+
|
|
52
|
+
Use the `--no-links` argument to skip link output to CLI during validation.
|
|
53
|
+
|
|
54
|
+
### validate
|
|
55
|
+
|
|
56
|
+
Performs a minimum local build of the book, then validates the links and static content are present and correct.
|
|
57
|
+
|
|
58
|
+
If the `-v` switch is provided, then a more verbose output is provided, which includes a list of all HTML files created and checked for embedded links and static content.
|
|
59
|
+
|
|
60
|
+
Use the `--set-version` argument to set the version number of the built book.
|
|
61
|
+
|
|
62
|
+
Use the `--no-color` argument to remove any color control characters from the output.
|
|
63
|
+
|
|
64
|
+
Use the `--no-links` argument to skip link output to CLI during validation.
|
|
65
|
+
|
|
66
|
+
### serve
|
|
67
|
+
|
|
68
|
+
Starts a local web server on port 3000, serving the book content.
|
|
69
|
+
|
|
70
|
+
To preview the documentation in a browser, you can open a terminal window and run the dev preview server with the
|
|
71
|
+
command `hdoc serve` and in a local browser go to the URL `http://localhost:3000`
|
|
72
|
+
|
|
73
|
+
## Installation
|
|
74
|
+
|
|
75
|
+
> `npm install hdoc-tools -g`
|
|
76
|
+
|
|
77
|
+
## Releasing
|
|
78
|
+
|
|
79
|
+
Releases are fully automated via GitHub Actions ([.github/workflows/release.yml](.github/workflows/release.yml)):
|
|
80
|
+
|
|
81
|
+
1. Add a `## [X.Y.Z]` section for the new version at the top of [CHANGELOG.md](CHANGELOG.md).
|
|
82
|
+
2. Bump `version` in [package.json](package.json) to match.
|
|
83
|
+
3. Push (or merge) to `main`.
|
|
84
|
+
|
|
85
|
+
The workflow detects the new version (no `vX.Y.Z` tag yet), publishes to npm using
|
|
86
|
+
trusted publishing (OIDC — no npm tokens), creates the git tag and GitHub Release with
|
|
87
|
+
the changelog section as notes, and announces the release in the Hornbill workspace.
|
|
88
|
+
Pushes to `main` without a version bump do nothing. Re-running a failed workflow is
|
|
89
|
+
safe — each step is guarded by what already exists on npm and in tags.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
:root{--bg:#fff;--bg-subtle:#f8fafc;--text:#1f2937;--text-muted:#6b7280;--text-faint:#9ca3af;--border:#e5e7eb;--accent:#2563eb;--accent-text:#1d4ed8;--accent-bg:#eff6ff;--hover:#f3f4f6;--code-bg:#f3f4f6;--draft:#b45309;--draft-bg:#fffbeb;--draft-border:#fde68a;--danger:#b91c1c;--danger-bg:#fef2f2;--danger-border:#fecaca;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;line-height:1.5}body{background:var(--bg);color:var(--text);margin:0}.toc,.toc .toc{margin:0;padding:0;list-style:none}.toc-item{margin:0}.toc-row{cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--text);border-radius:6px;align-items:center;gap:8px;padding:4px 8px;font-size:.92rem;line-height:1.3;display:flex}.toc-row:hover{background:var(--hover)}.toc-row.selected{background:var(--accent-bg);color:var(--accent-text);font-weight:500}.toc-caret{width:12px;color:var(--text-faint);text-align:center;flex:0 0 12px;font-size:.7rem}.toc-num{color:var(--text-faint);font-variant-numeric:tabular-nums;flex:none;min-width:28px;font-size:.78rem}.toc-row.selected .toc-num{color:var(--accent)}.toc-label{white-space:nowrap;text-overflow:ellipsis;flex:auto;overflow:hidden}.toc-untitled{color:var(--text-faint)}.toc-badge{text-transform:uppercase;letter-spacing:.05em;border-radius:999px;flex:none;padding:1px 6px;font-size:.62rem}.toc-badge.missing{color:var(--danger);background:var(--danger-bg);border:1px solid var(--danger-border)}.toc-rename{min-width:0;font:inherit;border:1px solid var(--accent);background:var(--bg);color:var(--text);border-radius:4px;outline:none;flex:auto;padding:1px 5px}.toc-draft-toggle{text-transform:uppercase;letter-spacing:.05em;cursor:pointer;border-radius:999px;flex:none;padding:1px 6px;font-family:inherit;font-size:.62rem}.toc-draft-toggle.on{color:var(--draft);background:var(--draft-bg);border:1px solid var(--draft-border);opacity:1}.toc-draft-toggle.off{color:var(--text-faint);border:1px solid var(--border);opacity:0;background:0 0;border-width:0;max-width:0;padding-left:0;padding-right:0;overflow:hidden}.toc-row:hover .toc-draft-toggle.off{opacity:.6;border-width:1px;max-width:56px;padding-left:6px;padding-right:6px}.toc-draft-toggle.off:hover{opacity:1}.toc-row .row-actions{opacity:0;flex:none;align-items:center;gap:1px;max-width:0;display:flex;overflow:hidden}.toc-row:hover .row-actions{opacity:1;max-width:140px}.toc-row .row-action{color:var(--text-faint);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:2px;display:inline-flex}.toc-row .row-action:hover{color:var(--text);background:var(--hover)}.toc-row .row-action.danger:hover{color:var(--danger);background:var(--danger-bg)}.toc .toc{padding-left:0}.toc-drag{text-align:center;width:12px;color:var(--text-faint);cursor:grab;opacity:0;touch-action:none;flex:none;font-size:.8rem;line-height:1}.toc-row:hover .toc-drag{opacity:.7}.toc-drag:active{cursor:grabbing}.toc-item.dragging{opacity:.5}.toc-item.dragging .toc-row{background:var(--accent-bg);outline:1px dashed var(--accent)}.toc-drag svg{display:block}.row-actions{opacity:0;flex:none;align-items:center;gap:1px;margin-left:4px;display:flex}.toc-row:hover .row-actions{opacity:1}.row-action{cursor:pointer;color:var(--text-muted);background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;padding:3px;display:flex}.row-action:hover{background:var(--hover);color:var(--text)}.row-action.danger:hover{background:var(--danger-bg);color:var(--danger)}.props-dialog{background:var(--bg);border-radius:10px;flex-direction:column;gap:12px;width:min(460px,92vw);padding:18px 20px;display:flex;box-shadow:0 10px 40px #00000040}.props-dialog h3{align-items:baseline;gap:8px;margin:0;font-size:1rem;display:flex}.props-dialog .pd-num{color:var(--text-faint);font-variant-numeric:tabular-nums;font-size:.8rem;font-weight:400}.pd-field{align-items:center;gap:10px;font-size:.85rem;display:flex}.pd-field>span{color:var(--text-muted);flex:0 0 56px}.pd-field input{border:1px solid var(--border);background:var(--bg);min-width:0;color:var(--text);font:inherit;border-radius:5px;flex:auto;padding:5px 9px;font-size:.85rem}.pd-field input:focus{border-color:var(--accent);outline:none}.pd-field input.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.8rem}.pd-check{color:var(--text);align-items:center;gap:8px;font-size:.85rem;display:flex}.pd-warn{color:var(--draft);margin:0;font-size:.76rem;line-height:1.35}.pd-actions{justify-content:flex-end;gap:8px;margin-top:4px;display:flex}.struct-toolbar{align-items:center;gap:6px;margin-bottom:10px;display:flex}.struct-toolbar button{font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--accent-text);cursor:pointer;border-radius:6px;padding:2px 8px;font-size:.78rem}.struct-toolbar button:hover:not(:disabled){background:var(--accent-bg)}.struct-toolbar button.danger{color:var(--danger)}.struct-toolbar button.danger:hover:not(:disabled){background:var(--danger-bg)}.struct-toolbar button:disabled{opacity:.4;cursor:default}.struct-ctx{color:var(--text-faint);white-space:nowrap;text-overflow:ellipsis;margin-left:auto;font-size:.74rem;overflow:hidden}.struct-inline{gap:6px;margin-bottom:10px;display:flex}.struct-inline input{min-width:0;font:inherit;border:1px solid var(--accent);border-radius:6px;flex:auto;padding:3px 7px;font-size:.84rem}.struct-inline button{font:inherit;border:1px solid var(--border);background:var(--bg);cursor:pointer;border-radius:6px;padding:3px 10px;font-size:.78rem}.page-picker{border:1px solid var(--border);background:var(--bg);border-radius:10px;flex-direction:column;width:min(560px,92vw);max-height:82vh;display:flex;overflow:hidden;box-shadow:0 10px 40px #00000040}.pp-head{background:var(--bg-subtle);border-bottom:1px solid var(--border);align-items:center;gap:10px;padding:8px 10px;font-size:.82rem;display:flex}.pp-toggle{color:var(--text-muted);align-items:center;gap:5px;display:flex}.pp-head .ghost{font:inherit;color:var(--text-muted);cursor:pointer;background:0 0;border:none;margin-left:auto;font-size:.78rem}.pp-list{max-height:240px;margin:0;padding:0;list-style:none;overflow:auto}.pp-list li{cursor:pointer;align-items:center;gap:8px;padding:5px 10px;font-size:.82rem;display:flex}.pp-list li:hover{background:var(--accent-bg)}.pp-file{text-overflow:ellipsis;white-space:nowrap;flex:auto;overflow:hidden}.pp-linked{text-transform:uppercase;color:var(--text-faint);border:1px solid var(--border);border-radius:999px;flex:none;padding:1px 6px;font-size:.6rem}.pp-empty{cursor:default!important}.pp-empty:hover{background:0 0!important}.pp-create{flex-direction:column;gap:8px;padding:10px;display:flex}.pp-field{align-items:center;gap:8px;font-size:.82rem;display:flex}.pp-field>span{color:var(--text-muted);flex:0 0 72px}.pp-field select,.pp-field input{border:1px solid var(--border);background:var(--bg);color:var(--accent-text);border-radius:4px;flex:auto;padding:4px 8px;font-size:.82rem}.pp-preview{margin:0;font-size:.78rem}.pp-preview code{color:var(--accent-text)}.pp-actions{justify-content:flex-end;display:flex}.pages-panel{font-size:.9rem}.pages-toolbar{align-items:center;gap:10px;margin-bottom:10px;display:flex}.pages-filter{color:var(--text-muted);cursor:pointer;align-items:center;gap:6px;font-size:.82rem;display:flex}.pages-actions{gap:6px;margin-left:auto;display:flex}.pages-actions button{font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--accent-text);cursor:pointer;border-radius:6px;padding:2px 8px;font-size:.78rem}.pages-actions button:hover{background:var(--accent-bg)}.pages-create{gap:6px;margin-bottom:10px;display:flex}.pages-create input{min-width:0;font:inherit;border:1px solid var(--accent);border-radius:6px;flex:auto;padding:3px 7px;font-size:.82rem}.pages-create button{font:inherit;border:1px solid var(--border);background:var(--bg);cursor:pointer;border-radius:6px;padding:3px 8px;font-size:.78rem}.pages-create button.ghost{color:var(--text-muted)}.pages-error{margin:6px 0}.fs,.fs .fs{margin:0;padding:0;list-style:none}.fs-row{cursor:pointer;white-space:nowrap;border-radius:6px;align-items:center;gap:6px;padding:3px 8px;display:flex}.fs-row:hover{background:var(--hover)}.fs-file.selected{background:var(--accent-bg);color:var(--accent-text);font-weight:500}.fs-caret{text-align:center;width:12px;color:var(--text-faint);flex:0 0 12px;font-size:.7rem}.fs-icon{flex:0 0 16px;width:16px;height:16px}.fs-icon.folder{fill:#f2c14e;stroke:#d9a93d;stroke-width:.6px;stroke-linejoin:round}.fs-icon.file{fill:none;stroke:var(--text-muted);stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round}.fs-icon.file .page{fill:#fff}.fs-icon.file .lines{stroke:var(--text-faint)}.fs-icon.image{fill:none;stroke:#3b82f6;stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round}.fs-icon.image .frame{fill:#eff6ff}.fs-icon.image .sun{fill:#3b82f6;stroke:none}.pages-hint{color:var(--text-faint);margin:0 0 8px;font-size:.72rem}.fs-row:hover .row-actions{opacity:1}.fs-file[draggable=true]{cursor:grab}.fs-row.drag-over{background:var(--accent-bg);outline:1px dashed var(--accent)}.fs-dir .fs-name{color:var(--text);font-weight:500}.fs-name{text-overflow:ellipsis;flex:auto;overflow:hidden}.fs-orphan{text-transform:uppercase;letter-spacing:.05em;color:var(--draft);background:var(--draft-bg);border:1px solid var(--draft-border);border-radius:999px;flex:none;padding:1px 6px;font-size:.6rem}.fs-del{color:var(--text-faint);cursor:pointer;opacity:0;background:0 0;border:none;flex:none;padding:0 2px;font-size:.8rem}.fs-row:hover .fs-del{opacity:.7}.fs-del:hover{color:var(--danger);opacity:1}.cm-lintRange-warning{-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;background-image:none;-webkit-text-decoration:underline wavy #dc2626;text-decoration:underline wavy #dc2626}.cm-lintRange-info{-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;background-image:none;-webkit-text-decoration:underline wavy #2563eb;text-decoration:underline wavy #2563eb}.cm-tooltip.cm-tooltip-lint{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:4px;font-size:.85rem;box-shadow:0 6px 24px #00000026}.cm-tooltip-lint .cm-diagnostic{border-left:3px solid #0000;padding:6px 10px}.cm-tooltip-lint .cm-diagnostic-warning{border-left-color:#dc2626}.cm-tooltip-lint .cm-diagnostic-info{border-left-color:#2563eb}.cm-diagnosticAction{background:var(--accent-bg);color:var(--accent-text);cursor:pointer;border:1px solid #dbeafe;border-radius:5px;margin:6px 6px 0 0;padding:2px 8px;font-size:.8rem;display:inline-block}.cm-diagnosticAction:hover{background:#dbeafe}.ai-overlay{z-index:40;background:#00000047;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.ai-panel{background:var(--bg);border:1px solid var(--border);resize:both;border-radius:10px;flex-direction:column;width:min(720px,92vw);min-width:360px;max-width:96vw;height:min(520px,80vh);min-height:240px;max-height:92vh;display:flex;overflow:hidden;box-shadow:0 12px 40px #00000040}.ai-head{border-bottom:1px solid var(--border);background:var(--bg-subtle);flex:none;align-items:center;gap:12px;padding:10px 14px;display:flex}.ai-title{font-size:.92rem;font-weight:600}.ai-status{color:var(--text-muted);margin-left:auto;font-size:.78rem}.ai-x{cursor:pointer;color:var(--text-muted);background:0 0;border:none;border-radius:6px;padding:2px 6px;font-size:.9rem}.ai-x:hover{background:var(--border);color:var(--text)}.ai-out{resize:none;min-height:0;color:var(--text);background:var(--bg);white-space:pre-wrap;border:none;outline:none;flex:auto;padding:14px 16px;font-family:ui-monospace,Consolas,Courier New,monospace;font-size:.86rem;line-height:1.55}.ai-error{color:var(--draft);flex:auto;margin:0;padding:16px;font-size:.86rem}.ai-actions{border-top:1px solid var(--border);background:var(--bg-subtle);flex:none;align-items:center;gap:10px;padding:10px 14px;display:flex}.ai-hint{color:var(--text-faint);flex:auto;font-size:.74rem}.ai-actions button{font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--text);cursor:pointer;border-radius:6px;padding:5px 14px;font-size:.82rem}.ai-actions button.primary{background:var(--accent);color:#fff;border-color:var(--accent)}.ai-actions button:disabled{opacity:.5;cursor:default}.ai-bar{align-items:center;gap:6px;display:flex}.ai-bar button{font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--text-muted);cursor:pointer;border-radius:6px;padding:3px 9px;font-size:.78rem}.ai-bar button:hover{color:var(--text);border-color:var(--accent)}.ai-bar button.ai-primary{color:var(--accent);border-color:var(--accent)}.page-editor{flex-direction:column;height:100%;min-height:0;display:flex}.pe-pad{padding:14px 16px}.pe-banner{background:var(--draft-bg);border-bottom:1px solid var(--draft-border);color:var(--draft);flex:none;align-items:center;gap:10px;padding:8px 14px;font-size:.85rem;display:flex}.pe-banner span{flex:auto}.pe-banner button{font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--text);cursor:pointer;border-radius:6px;padding:4px 10px;font-size:.8rem}.pe-banner button.primary{background:var(--accent);color:#fff;border-color:var(--accent)}.pe-toolbar{border-bottom:1px solid var(--border);background:var(--bg-subtle);flex:none;align-items:center;gap:12px;padding:8px 14px;display:flex}.pe-file{align-items:center;gap:8px;font-size:.9rem;display:flex}.pe-num{color:var(--text-faint);font-variant-numeric:tabular-nums}.pe-file code{color:var(--text-muted);font-size:.76rem}.pe-status{align-items:center;gap:12px;margin-left:auto;font-size:.8rem;display:flex}.pe-dirty{color:var(--draft)}.pe-save{background:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:6px;padding:5px 14px;font-size:.85rem}.pe-save:disabled{opacity:.5;cursor:default}.pe-split{flex:auto;min-height:0;display:flex}.pe-source{border-right:1px solid var(--border);flex:50%;min-width:0;display:flex}.cm-host{flex:auto;min-width:0;height:100%}.cm-host .cm-editor{height:100%}.cm-host .cm-scroller{font-family:ui-monospace,Consolas,Courier New,monospace;font-size:.86rem}.pe-preview{flex-direction:column;flex:50%;min-width:0;display:flex;overflow:hidden}.pe-frame{background:#fff;border:0;flex:auto;width:100%}.pe-preview-body{max-width:72ch;line-height:1.6}.pe-preview-body h1{margin:0 0 12px;font-size:1.7rem}.pe-preview-body h2{margin:24px 0 8px;font-size:1.3rem}.pe-preview-body h3{font-size:1.1rem}.pe-preview-body img{max-width:100%}.pe-preview-body pre{background:var(--code-bg);border-radius:6px;padding:12px 14px;overflow:auto}.pe-preview-body code{background:var(--code-bg);border-radius:4px;padding:1px 5px;font-size:.88em}.pe-preview-body pre code{background:0 0;padding:0}.pe-preview-body table{border-collapse:collapse}.pe-preview-body th,.pe-preview-body td{border:1px solid var(--border);padding:4px 10px}.pe-preview-body blockquote{border-left:3px solid var(--border);color:var(--text-muted);margin:12px 0;padding-left:14px}.modal-backdrop{z-index:50;background:#0f172a73;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.image-modal{background:var(--bg);border-radius:10px;flex-direction:column;width:min(680px,90vw);max-height:86vh;display:flex;overflow:hidden;box-shadow:0 10px 40px #00000040}.im-head{border-bottom:1px solid var(--border);align-items:center;padding:12px 16px;display:flex}.im-head strong{text-overflow:ellipsis;white-space:nowrap;flex:auto;overflow:hidden}.im-close{cursor:pointer;color:var(--text-muted);background:0 0;border:none;font-size:.95rem}.im-body{background:var(--bg-subtle);background-image:linear-gradient(45deg,#eceff3 25%,#0000 25%),linear-gradient(-45deg,#eceff3 25%,#0000 25%),linear-gradient(45deg,#0000 75%,#eceff3 75%),linear-gradient(-45deg,#0000 75%,#eceff3 75%);background-position:0 0,0 9px,9px -9px,-9px 0;background-size:18px 18px;flex:auto;justify-content:center;align-items:center;padding:16px;display:flex;overflow:auto}.im-body img{background:#fff;max-width:100%;max-height:60vh;box-shadow:0 1px 6px #00000026}.im-ref{background:var(--code-bg);white-space:nowrap;border-radius:6px;margin:12px 16px 0;padding:8px 10px;font-size:.78rem;overflow:auto}.im-actions{justify-content:flex-end;gap:8px;padding:12px 16px;display:flex}.im-actions button{font:inherit;border:1px solid var(--border);background:var(--bg);cursor:pointer;border-radius:6px;padding:6px 14px;font-size:.85rem}.im-actions button.primary{background:var(--accent);color:#fff;border-color:var(--accent)}.im-actions button:disabled{opacity:.5;cursor:default}.git-panel{background:var(--bg);flex:auto;min-width:0;display:flex;overflow:hidden}.git-scroll{flex:auto;max-width:900px;padding:20px 24px;overflow:auto}.git-panel h2{margin:0 0 4px;font-size:1.2rem}.git-sub{color:var(--text-muted);max-width:70ch;margin:0 0 16px;font-size:.85rem}.git-card{border:1px solid var(--border);background:var(--bg-subtle);border-radius:10px;margin-bottom:18px;padding:16px}.git-card h3{margin:0 0 12px;font-size:.95rem}.git-form{flex-wrap:wrap;gap:12px;display:flex}.git-form label,.git-block{color:var(--text-muted);flex-direction:column;flex:200px;gap:4px;font-size:.78rem;display:flex}.git-block{margin-top:12px}.git-form input,.git-block textarea{font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--text);border-radius:6px;padding:6px 8px;font-size:.85rem}.git-block textarea{resize:vertical;font-family:ui-monospace,Consolas,Courier New,monospace}.git-actions{align-items:center;gap:10px;margin-top:14px;display:flex}.git-actions button{font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--text);cursor:pointer;border-radius:6px;padding:6px 14px;font-size:.82rem}.git-actions button.primary{background:var(--accent);color:#fff;border-color:var(--accent)}.git-actions button:disabled{opacity:.5;cursor:default}.git-rate{color:var(--text-faint);font-size:.74rem}.git-error{color:var(--danger);margin:12px 0 0;font-size:.85rem}.git-ok{color:var(--accent-text);word-break:break-all;margin:12px 0 0;font-size:.85rem}.git-json,.git-filebody{background:var(--code-bg);white-space:pre-wrap;word-break:break-word;border-radius:6px;max-height:320px;margin:12px 0 0;padding:12px;font-size:.78rem;line-height:1.5;overflow:auto}.git-crumb{align-items:center;gap:10px;margin-bottom:8px;display:flex}.git-up{font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--text-muted);cursor:pointer;border-radius:6px;padding:2px 8px;font-size:.76rem}.git-list{margin:0;padding:0;list-style:none}.git-list li{border-bottom:1px solid var(--border)}.git-entry{text-align:left;width:100%;font:inherit;color:var(--text);cursor:pointer;background:0 0;border:none;padding:6px 4px;font-size:.85rem}.git-entry:hover{background:var(--accent-bg)}.git-entry.dir{font-weight:500}.git-top{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.git-whoami{color:var(--text-muted);white-space:nowrap;align-items:center;gap:12px;font-size:.8rem;display:flex}.git-or{margin:14px 0 6px}.git-tokenin{font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--text);border-radius:6px;flex:240px;padding:6px 8px;font-size:.85rem}.git-device{text-align:center;padding:8px 0}.git-usercode{letter-spacing:.25em;background:var(--code-bg);border-radius:8px;margin:8px auto;padding:12px;font-family:ui-monospace,Consolas,Courier New,monospace;font-size:1.8rem;font-weight:600;display:inline-block}.git-repo-name{font-weight:500;display:block}.git-repo-desc{color:var(--text-muted);white-space:nowrap;text-overflow:ellipsis;max-width:100%;margin-top:2px;font-size:.78rem;display:block;overflow:hidden}.git-ro{color:var(--text-faint);font-size:.72rem;font-weight:400}.git-tabs{border-bottom:1px solid var(--border);gap:4px;margin-bottom:16px;display:flex}.git-tabs button{font:inherit;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-1px;padding:8px 14px;font-size:.85rem}.git-tabs button:hover{color:var(--text)}.git-tabs button.active{color:var(--accent-text);border-bottom-color:var(--accent);font-weight:500}.git-section-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:8px;display:flex}.git-section-head h3{margin:0}.git-base{margin:0 0 10px;font-family:ui-monospace,Consolas,Courier New,monospace}.git-toggle{border:1px solid var(--border);border-radius:6px;gap:0;display:flex;overflow:hidden}.git-toggle button{font:inherit;background:var(--bg);color:var(--text-muted);cursor:pointer;border:none;padding:4px 10px;font-size:.76rem}.git-toggle button.active{background:var(--accent);color:#fff}.git-localrow{align-items:center;gap:12px;padding:8px 4px;display:flex}.git-localrow.active{background:var(--accent-bg);border-radius:6px;padding:8px}.git-open-badge{color:var(--accent-text);margin-left:8px;font-size:.7rem;font-weight:500}.git-localmain{flex:auto;min-width:0}.git-localactions{flex:none;gap:6px;display:flex}.git-localactions button{font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--text);cursor:pointer;border-radius:6px;padding:4px 12px;font-size:.78rem}.git-localactions button.primary{background:var(--accent);color:#fff;border-color:var(--accent)}.git-localactions button:disabled{opacity:.5;cursor:default}.git-pills{vertical-align:middle;gap:6px;margin-left:10px;display:inline-flex}.git-pill{background:var(--code-bg);color:var(--text-muted);border-radius:999px;padding:1px 7px;font-size:.7rem}.git-pill.up{color:#166534;background:#dcfce7}.git-pill.down{color:#854d0e;background:#fef9c3}.git-pill.dirty{color:#991b1b;background:#fee2e2}.git-syncmsg{color:var(--text-muted);margin-top:4px;font-size:.74rem;display:block}.git-cloned{color:var(--text-faint);font-size:.78rem}.app{flex-direction:column;height:100vh;display:flex}.app-header{border-bottom:1px solid var(--border);background:var(--bg);flex:none;align-items:center;gap:14px;padding:14px 20px;display:flex}.app-header h1{margin:0;font-size:1.15rem}.tag{letter-spacing:.08em;text-transform:uppercase;color:var(--accent-text);background:var(--accent-bg);border:1px solid #dbeafe;border-radius:999px;padding:2px 10px;font-size:.7rem;display:inline-block}.hint{color:var(--draft);margin-left:auto;font-size:.74rem}.app-body{flex:auto;min-height:0;display:flex}.activity-bar{background:var(--bg-subtle);border-right:1px solid var(--border);flex-direction:column;flex:0 0 52px;align-items:center;gap:4px;padding:8px 0;display:flex}.activity-bar .act{width:40px;height:40px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-left:2px solid #0000;border-radius:8px;justify-content:center;align-items:center;display:flex}.activity-bar .act:hover{color:var(--text);background:var(--bg)}.activity-bar .act.active{color:var(--accent-text);background:var(--accent-bg);border-left-color:var(--accent)}.panes{flex:auto;min-height:0;display:flex}.welcome{text-align:center;flex-direction:column;flex:auto;justify-content:center;align-items:center;gap:12px;padding:40px;display:flex}.welcome h2{margin:0;font-size:1.3rem}.welcome p{max-width:44ch;margin:0}.welcome-cta{background:var(--accent);color:#fff;font:inherit;cursor:pointer;border:none;border-radius:6px;margin-top:8px;padding:8px 18px;font-size:.9rem}.close-book{font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--text-muted);cursor:pointer;border-radius:6px;margin-left:auto;padding:4px 10px;font-size:.8rem}.close-book:hover{color:var(--text);border-color:var(--accent)}.pane{padding:14px 16px;overflow:auto}.toc-pane{border-right:1px solid var(--border);background:var(--bg-subtle);flex:0 0 360px}.pane-resizer{cursor:col-resize;z-index:5;background:0 0;flex:0 0 5px;margin:0 -2px}.pane-resizer:hover,.pane-resizer.resizing{background:var(--accent)}.app.resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}.detail-pane{background:var(--bg);flex-direction:column;flex:auto;min-height:0;padding:0;display:flex;overflow:hidden}.detail-scroll{padding:14px 16px;overflow:auto}.pane-title{text-transform:uppercase;letter-spacing:.08em;color:var(--text-muted);margin-bottom:10px;font-size:.72rem}.tabs{border-bottom:1px solid var(--border);gap:4px;margin-bottom:12px;display:flex}.tab{font:inherit;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-1px;padding:6px 12px;font-size:.82rem}.tab:hover{color:var(--text)}.tab.active{color:var(--accent-text);border-bottom-color:var(--accent);font-weight:500}.muted{color:var(--text-muted)}.err{color:var(--danger)}code{background:var(--code-bg);border-radius:4px;padding:1px 6px;font-size:.86em}.detail-num{color:var(--text-muted);font-variant-numeric:tabular-nums}.detail h2{margin:2px 0 16px}.detail-meta{grid-template-columns:90px 1fr;gap:8px 16px;margin:0;display:grid}.detail-meta dt{color:var(--text-muted);font-size:.85rem}.detail-meta dd{margin:0}.detail-foot{max-width:60ch;margin-top:24px}
|
|
1
|
+
:root{--bg:#fff;--bg-subtle:#f8fafc;--text:#1f2937;--text-muted:#6b7280;--text-faint:#9ca3af;--border:#e5e7eb;--accent:#2563eb;--accent-text:#1d4ed8;--accent-bg:#eff6ff;--hover:#f3f4f6;--code-bg:#f3f4f6;--draft:#b45309;--draft-bg:#fffbeb;--draft-border:#fde68a;--danger:#b91c1c;--danger-bg:#fef2f2;--danger-border:#fecaca;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;line-height:1.5}body{background:var(--bg);color:var(--text);margin:0}.toc,.toc .toc{margin:0;padding:0;list-style:none}.toc-item{margin:0}.toc-row{cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--text);border-radius:6px;align-items:center;gap:8px;padding:4px 8px;font-size:.92rem;line-height:1.3;display:flex}.toc-row:hover{background:var(--hover)}.toc-row.selected{background:var(--accent-bg);color:var(--accent-text);font-weight:500}.toc-caret{width:12px;color:var(--text-faint);text-align:center;flex:0 0 12px;font-size:.7rem}.toc-num{color:var(--text-faint);font-variant-numeric:tabular-nums;flex:none;min-width:28px;font-size:.78rem}.toc-row.selected .toc-num{color:var(--accent)}.toc-label{white-space:nowrap;text-overflow:ellipsis;flex:auto;overflow:hidden}.toc-untitled{color:var(--text-faint)}.toc-badge{text-transform:uppercase;letter-spacing:.05em;border-radius:999px;flex:none;padding:1px 6px;font-size:.62rem}.toc-badge.missing{color:var(--danger);background:var(--danger-bg);border:1px solid var(--danger-border)}.toc-rename{min-width:0;font:inherit;border:1px solid var(--accent);background:var(--bg);color:var(--text);border-radius:4px;outline:none;flex:auto;padding:1px 5px}.toc-draft-toggle{text-transform:uppercase;letter-spacing:.05em;cursor:pointer;border-radius:999px;flex:none;padding:1px 6px;font-family:inherit;font-size:.62rem}.toc-draft-toggle.on{color:var(--draft);background:var(--draft-bg);border:1px solid var(--draft-border);opacity:1}.toc-draft-toggle.off{color:var(--text-faint);border:1px solid var(--border);opacity:0;background:0 0;border-width:0;max-width:0;padding-left:0;padding-right:0;overflow:hidden}.toc-row:hover .toc-draft-toggle.off{opacity:.6;border-width:1px;max-width:56px;padding-left:6px;padding-right:6px}.toc-draft-toggle.off:hover{opacity:1}.toc-row .row-actions{opacity:0;flex:none;align-items:center;gap:1px;max-width:0;display:flex;overflow:hidden}.toc-row:hover .row-actions{opacity:1;max-width:140px}.toc-row .row-action{color:var(--text-faint);cursor:pointer;background:0 0;border:none;border-radius:4px;flex:none;justify-content:center;align-items:center;padding:2px;display:inline-flex}.toc-row .row-action:hover{color:var(--text);background:var(--hover)}.toc-row .row-action.danger:hover{color:var(--danger);background:var(--danger-bg)}.toc .toc{padding-left:0}.toc-drag{text-align:center;width:12px;color:var(--text-faint);cursor:grab;opacity:0;touch-action:none;flex:none;font-size:.8rem;line-height:1}.toc-row:hover .toc-drag{opacity:.7}.toc-drag:active{cursor:grabbing}.toc-item.dragging{opacity:.5}.toc-item.dragging .toc-row{background:var(--accent-bg);outline:1px dashed var(--accent)}.toc-drag svg{display:block}.row-actions{opacity:0;flex:none;align-items:center;gap:1px;margin-left:4px;display:flex}.toc-row:hover .row-actions{opacity:1}.row-action{cursor:pointer;color:var(--text-muted);background:0 0;border:none;border-radius:4px;justify-content:center;align-items:center;padding:3px;display:flex}.row-action:hover{background:var(--hover);color:var(--text)}.row-action.danger:hover{background:var(--danger-bg);color:var(--danger)}.props-dialog{background:var(--bg);border-radius:10px;flex-direction:column;gap:12px;width:min(460px,92vw);padding:18px 20px;display:flex;box-shadow:0 10px 40px #00000040}.props-dialog h3{align-items:baseline;gap:8px;margin:0;font-size:1rem;display:flex}.props-dialog .pd-num{color:var(--text-faint);font-variant-numeric:tabular-nums;font-size:.8rem;font-weight:400}.pd-field{align-items:center;gap:10px;font-size:.85rem;display:flex}.pd-field>span{color:var(--text-muted);flex:0 0 56px}.pd-field input{border:1px solid var(--border);background:var(--bg);min-width:0;color:var(--text);font:inherit;border-radius:5px;flex:auto;padding:5px 9px;font-size:.85rem}.pd-field input:focus{border-color:var(--accent);outline:none}.pd-field input.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.8rem}.pd-check{color:var(--text);align-items:center;gap:8px;font-size:.85rem;display:flex}.pd-warn{color:var(--draft);margin:0;font-size:.76rem;line-height:1.35}.pd-actions{justify-content:flex-end;gap:8px;margin-top:4px;display:flex}.struct-toolbar{align-items:center;gap:6px;margin-bottom:10px;display:flex}.struct-toolbar button{font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--accent-text);cursor:pointer;border-radius:6px;padding:2px 8px;font-size:.78rem}.struct-toolbar button:hover:not(:disabled){background:var(--accent-bg)}.struct-toolbar button.danger{color:var(--danger)}.struct-toolbar button.danger:hover:not(:disabled){background:var(--danger-bg)}.struct-toolbar button:disabled{opacity:.4;cursor:default}.struct-ctx{color:var(--text-faint);white-space:nowrap;text-overflow:ellipsis;margin-left:auto;font-size:.74rem;overflow:hidden}.struct-inline{gap:6px;margin-bottom:10px;display:flex}.struct-inline input{min-width:0;font:inherit;border:1px solid var(--accent);border-radius:6px;flex:auto;padding:3px 7px;font-size:.84rem}.struct-inline button{font:inherit;border:1px solid var(--border);background:var(--bg);cursor:pointer;border-radius:6px;padding:3px 10px;font-size:.78rem}.page-picker{border:1px solid var(--border);background:var(--bg);border-radius:10px;flex-direction:column;width:min(560px,92vw);max-height:82vh;display:flex;overflow:hidden;box-shadow:0 10px 40px #00000040}.pp-head{background:var(--bg-subtle);border-bottom:1px solid var(--border);align-items:center;gap:10px;padding:8px 10px;font-size:.82rem;display:flex}.pp-toggle{color:var(--text-muted);align-items:center;gap:5px;display:flex}.pp-head .ghost{font:inherit;color:var(--text-muted);cursor:pointer;background:0 0;border:none;margin-left:auto;font-size:.78rem}.pp-list{max-height:240px;margin:0;padding:0;list-style:none;overflow:auto}.pp-list li{cursor:pointer;align-items:center;gap:8px;padding:5px 10px;font-size:.82rem;display:flex}.pp-list li:hover{background:var(--accent-bg)}.pp-file{text-overflow:ellipsis;white-space:nowrap;flex:auto;overflow:hidden}.pp-linked{text-transform:uppercase;color:var(--text-faint);border:1px solid var(--border);border-radius:999px;flex:none;padding:1px 6px;font-size:.6rem}.pp-empty{cursor:default!important}.pp-empty:hover{background:0 0!important}.pp-create{flex-direction:column;gap:8px;padding:10px;display:flex}.pp-field{align-items:center;gap:8px;font-size:.82rem;display:flex}.pp-field>span{color:var(--text-muted);flex:0 0 72px}.pp-field select,.pp-field input{border:1px solid var(--border);background:var(--bg);color:var(--accent-text);border-radius:4px;flex:auto;padding:4px 8px;font-size:.82rem}.pp-preview{margin:0;font-size:.78rem}.pp-preview code{color:var(--accent-text)}.pp-actions{justify-content:flex-end;display:flex}.pages-panel{font-size:.9rem}.pages-toolbar{align-items:center;gap:10px;margin-bottom:10px;display:flex}.pages-filter{color:var(--text-muted);cursor:pointer;align-items:center;gap:6px;font-size:.82rem;display:flex}.pages-actions{gap:6px;margin-left:auto;display:flex}.pages-actions button{font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--accent-text);cursor:pointer;border-radius:6px;padding:2px 8px;font-size:.78rem}.pages-actions button:hover{background:var(--accent-bg)}.pages-create{gap:6px;margin-bottom:10px;display:flex}.pages-create input{min-width:0;font:inherit;border:1px solid var(--accent);border-radius:6px;flex:auto;padding:3px 7px;font-size:.82rem}.pages-create button{font:inherit;border:1px solid var(--border);background:var(--bg);cursor:pointer;border-radius:6px;padding:3px 8px;font-size:.78rem}.pages-create button.ghost{color:var(--text-muted)}.pages-error{margin:6px 0}.fs,.fs .fs{margin:0;padding:0;list-style:none}.fs-row{cursor:pointer;white-space:nowrap;border-radius:6px;align-items:center;gap:6px;padding:3px 8px;display:flex}.fs-row:hover{background:var(--hover)}.fs-file.selected{background:var(--accent-bg);color:var(--accent-text);font-weight:500}.fs-caret{text-align:center;width:12px;color:var(--text-faint);flex:0 0 12px;font-size:.7rem}.fs-icon{flex:0 0 16px;width:16px;height:16px}.fs-icon.folder{fill:#f2c14e;stroke:#d9a93d;stroke-width:.6px;stroke-linejoin:round}.fs-icon.file{fill:none;stroke:var(--text-muted);stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round}.fs-icon.file .page{fill:#fff}.fs-icon.file .lines{stroke:var(--text-faint)}.fs-icon.image{fill:none;stroke:#3b82f6;stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round}.fs-icon.image .frame{fill:#eff6ff}.fs-icon.image .sun{fill:#3b82f6;stroke:none}.pages-hint{color:var(--text-faint);margin:0 0 8px;font-size:.72rem}.fs-row:hover .row-actions{opacity:1}.fs-file[draggable=true]{cursor:grab}.fs-row.drag-over{background:var(--accent-bg);outline:1px dashed var(--accent)}.fs-dir .fs-name{color:var(--text);font-weight:500}.fs-name{text-overflow:ellipsis;flex:auto;overflow:hidden}.fs-orphan{text-transform:uppercase;letter-spacing:.05em;color:var(--draft);background:var(--draft-bg);border:1px solid var(--draft-border);border-radius:999px;flex:none;padding:1px 6px;font-size:.6rem}.fs-del{color:var(--text-faint);cursor:pointer;opacity:0;background:0 0;border:none;flex:none;padding:0 2px;font-size:.8rem}.fs-row:hover .fs-del{opacity:.7}.fs-del:hover{color:var(--danger);opacity:1}.cm-lintRange-warning{-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;background-image:none;-webkit-text-decoration:underline wavy #dc2626;text-decoration:underline wavy #dc2626}.cm-lintRange-info{-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none;background-image:none;-webkit-text-decoration:underline wavy #2563eb;text-decoration:underline wavy #2563eb}.cm-tooltip.cm-tooltip-lint{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:4px;font-size:.85rem;box-shadow:0 6px 24px #00000026}.cm-tooltip-lint .cm-diagnostic{border-left:3px solid #0000;padding:6px 10px}.cm-tooltip-lint .cm-diagnostic-warning{border-left-color:#dc2626}.cm-tooltip-lint .cm-diagnostic-info{border-left-color:#2563eb}.cm-diagnosticAction{background:var(--accent-bg);color:var(--accent-text);cursor:pointer;border:1px solid #dbeafe;border-radius:5px;margin:6px 6px 0 0;padding:2px 8px;font-size:.8rem;display:inline-block}.cm-diagnosticAction:hover{background:#dbeafe}.ai-overlay{z-index:40;background:#00000047;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.ai-panel{background:var(--bg);border:1px solid var(--border);resize:both;border-radius:10px;flex-direction:column;width:min(720px,92vw);min-width:360px;max-width:96vw;height:min(520px,80vh);min-height:240px;max-height:92vh;display:flex;overflow:hidden;box-shadow:0 12px 40px #00000040}.ai-head{border-bottom:1px solid var(--border);background:var(--bg-subtle);flex:none;align-items:center;gap:12px;padding:10px 14px;display:flex}.ai-title{font-size:.92rem;font-weight:600}.ai-status{color:var(--text-muted);margin-left:auto;font-size:.78rem}.ai-x{cursor:pointer;color:var(--text-muted);background:0 0;border:none;border-radius:6px;padding:2px 6px;font-size:.9rem}.ai-x:hover{background:var(--border);color:var(--text)}.ai-out{resize:none;min-height:0;color:var(--text);background:var(--bg);white-space:pre-wrap;border:none;outline:none;flex:auto;padding:14px 16px;font-family:ui-monospace,Consolas,Courier New,monospace;font-size:.86rem;line-height:1.55}.ai-error{color:var(--draft);flex:auto;margin:0;padding:16px;font-size:.86rem}.ai-actions{border-top:1px solid var(--border);background:var(--bg-subtle);flex:none;align-items:center;gap:10px;padding:10px 14px;display:flex}.ai-hint{color:var(--text-faint);flex:auto;font-size:.74rem}.ai-actions button{font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--text);cursor:pointer;border-radius:6px;padding:5px 14px;font-size:.82rem}.ai-actions button.primary{background:var(--accent);color:#fff;border-color:var(--accent)}.ai-actions button:disabled{opacity:.5;cursor:default}.ai-bar{align-items:center;gap:6px;display:flex}.ai-bar button{font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--text-muted);cursor:pointer;border-radius:6px;padding:3px 9px;font-size:.78rem}.ai-bar button:hover{color:var(--text);border-color:var(--accent)}.ai-bar button.ai-primary{color:var(--accent);border-color:var(--accent)}.page-editor{flex-direction:column;height:100%;min-height:0;display:flex}.pe-pad{padding:14px 16px}.pe-banner{background:var(--draft-bg);border-bottom:1px solid var(--draft-border);color:var(--draft);flex:none;align-items:center;gap:10px;padding:8px 14px;font-size:.85rem;display:flex}.pe-banner span{flex:auto}.pe-banner button{font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--text);cursor:pointer;border-radius:6px;padding:4px 10px;font-size:.8rem}.pe-banner button.primary{background:var(--accent);color:#fff;border-color:var(--accent)}.pe-toolbar{border-bottom:1px solid var(--border);background:var(--bg-subtle);flex:none;align-items:center;gap:12px;padding:8px 14px;display:flex}.pe-file{align-items:center;gap:8px;font-size:.9rem;display:flex}.pe-num{color:var(--text-faint);font-variant-numeric:tabular-nums}.pe-file code{color:var(--text-muted);font-size:.76rem}.pe-status{align-items:center;gap:12px;margin-left:auto;font-size:.8rem;display:flex}.pe-dirty{color:var(--draft)}.pe-save{background:var(--accent);color:#fff;cursor:pointer;border:none;border-radius:6px;padding:5px 14px;font-size:.85rem}.pe-save:disabled{opacity:.5;cursor:default}.pe-split{flex:auto;min-height:0;display:flex}.pe-source{border-right:1px solid var(--border);flex:50%;min-width:0;display:flex}.cm-host{flex:auto;min-width:0;height:100%}.cm-host .cm-editor{height:100%}.cm-host .cm-scroller{font-family:ui-monospace,Consolas,Courier New,monospace;font-size:.86rem}.pe-preview{flex-direction:column;flex:50%;min-width:0;display:flex;overflow:hidden}.pe-frame{background:#fff;border:0;flex:auto;width:100%}.pe-preview-body{max-width:72ch;line-height:1.6}.pe-preview-body h1{margin:0 0 12px;font-size:1.7rem}.pe-preview-body h2{margin:24px 0 8px;font-size:1.3rem}.pe-preview-body h3{font-size:1.1rem}.pe-preview-body img{max-width:100%}.pe-preview-body pre{background:var(--code-bg);border-radius:6px;padding:12px 14px;overflow:auto}.pe-preview-body code{background:var(--code-bg);border-radius:4px;padding:1px 5px;font-size:.88em}.pe-preview-body pre code{background:0 0;padding:0}.pe-preview-body table{border-collapse:collapse}.pe-preview-body th,.pe-preview-body td{border:1px solid var(--border);padding:4px 10px}.pe-preview-body blockquote{border-left:3px solid var(--border);color:var(--text-muted);margin:12px 0;padding-left:14px}.modal-backdrop{z-index:50;background:#0f172a73;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.image-modal{background:var(--bg);border-radius:10px;flex-direction:column;width:min(680px,90vw);max-height:86vh;display:flex;overflow:hidden;box-shadow:0 10px 40px #00000040}.im-head{border-bottom:1px solid var(--border);align-items:center;padding:12px 16px;display:flex}.im-head strong{text-overflow:ellipsis;white-space:nowrap;flex:auto;overflow:hidden}.im-close{cursor:pointer;color:var(--text-muted);background:0 0;border:none;font-size:.95rem}.im-body{background:var(--bg-subtle);background-image:linear-gradient(45deg,#eceff3 25%,#0000 25%),linear-gradient(-45deg,#eceff3 25%,#0000 25%),linear-gradient(45deg,#0000 75%,#eceff3 75%),linear-gradient(-45deg,#0000 75%,#eceff3 75%);background-position:0 0,0 9px,9px -9px,-9px 0;background-size:18px 18px;flex:auto;justify-content:center;align-items:center;padding:16px;display:flex;overflow:auto}.im-body img{background:#fff;max-width:100%;max-height:60vh;box-shadow:0 1px 6px #00000026}.im-ref{background:var(--code-bg);white-space:nowrap;border-radius:6px;margin:12px 16px 0;padding:8px 10px;font-size:.78rem;overflow:auto}.im-actions{justify-content:flex-end;gap:8px;padding:12px 16px;display:flex}.im-actions button{font:inherit;border:1px solid var(--border);background:var(--bg);cursor:pointer;border-radius:6px;padding:6px 14px;font-size:.85rem}.im-actions button.primary{background:var(--accent);color:#fff;border-color:var(--accent)}.im-actions button:disabled{opacity:.5;cursor:default}.git-panel{background:var(--bg);flex:auto;min-width:0;display:flex;overflow:hidden}.git-scroll{flex:auto;max-width:900px;padding:20px 24px;overflow:auto}.git-panel h2{margin:0 0 4px;font-size:1.2rem}.git-sub{color:var(--text-muted);max-width:70ch;margin:0 0 16px;font-size:.85rem}.git-card{border:1px solid var(--border);background:var(--bg-subtle);border-radius:10px;margin-bottom:18px;padding:16px}.git-card h3{margin:0 0 12px;font-size:.95rem}.git-form{flex-wrap:wrap;gap:12px;display:flex}.git-form label,.git-block{color:var(--text-muted);flex-direction:column;flex:200px;gap:4px;font-size:.78rem;display:flex}.git-block{margin-top:12px}.git-form input,.git-block textarea{font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--text);border-radius:6px;padding:6px 8px;font-size:.85rem}.git-block textarea{resize:vertical;font-family:ui-monospace,Consolas,Courier New,monospace}.git-actions{align-items:center;gap:10px;margin-top:14px;display:flex}.git-actions button{font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--text);cursor:pointer;border-radius:6px;padding:6px 14px;font-size:.82rem}.git-actions button.primary{background:var(--accent);color:#fff;border-color:var(--accent)}.git-actions button:disabled{opacity:.5;cursor:default}.git-rate{color:var(--text-faint);font-size:.74rem}.git-error{color:var(--danger);margin:12px 0 0;font-size:.85rem}.git-ok{color:var(--accent-text);word-break:break-all;margin:12px 0 0;font-size:.85rem}.git-json,.git-filebody{background:var(--code-bg);white-space:pre-wrap;word-break:break-word;border-radius:6px;max-height:320px;margin:12px 0 0;padding:12px;font-size:.78rem;line-height:1.5;overflow:auto}.git-crumb{align-items:center;gap:10px;margin-bottom:8px;display:flex}.git-up{font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--text-muted);cursor:pointer;border-radius:6px;padding:2px 8px;font-size:.76rem}.git-list{margin:0;padding:0;list-style:none}.git-list li{border-bottom:1px solid var(--border)}.git-entry{text-align:left;width:100%;font:inherit;color:var(--text);cursor:pointer;background:0 0;border:none;padding:6px 4px;font-size:.85rem}.git-entry:hover{background:var(--accent-bg)}.git-entry.dir{font-weight:500}.git-top{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.git-whoami{color:var(--text-muted);white-space:nowrap;align-items:center;gap:12px;font-size:.8rem;display:flex}.git-or{margin:14px 0 6px}.git-tokenin{font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--text);border-radius:6px;flex:240px;padding:6px 8px;font-size:.85rem}.git-device{text-align:center;padding:8px 0}.git-usercode{letter-spacing:.25em;background:var(--code-bg);border-radius:8px;margin:8px auto;padding:12px;font-family:ui-monospace,Consolas,Courier New,monospace;font-size:1.8rem;font-weight:600;display:inline-block}.git-repo-name{font-weight:500;display:block}.git-repo-desc{color:var(--text-muted);white-space:nowrap;text-overflow:ellipsis;max-width:100%;margin-top:2px;font-size:.78rem;display:block;overflow:hidden}.git-ro{color:var(--text-faint);font-size:.72rem;font-weight:400}.git-tabs{border-bottom:1px solid var(--border);gap:4px;margin-bottom:16px;display:flex}.git-tabs button{font:inherit;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-1px;padding:8px 14px;font-size:.85rem}.git-tabs button:hover{color:var(--text)}.git-tabs button.active{color:var(--accent-text);border-bottom-color:var(--accent);font-weight:500}.git-section-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:8px;display:flex}.git-section-head h3{margin:0}.git-base{margin:0 0 10px;font-family:ui-monospace,Consolas,Courier New,monospace}.git-toggle{border:1px solid var(--border);border-radius:6px;gap:0;display:flex;overflow:hidden}.git-toggle button{font:inherit;background:var(--bg);color:var(--text-muted);cursor:pointer;border:none;padding:4px 10px;font-size:.76rem}.git-toggle button.active{background:var(--accent);color:#fff}.git-localrow{align-items:center;gap:12px;padding:8px 4px;display:flex}.git-localrow.active{background:var(--accent-bg);border-radius:6px;padding:8px}.git-open-badge{color:var(--accent-text);margin-left:8px;font-size:.7rem;font-weight:500}.git-localmain{flex:auto;min-width:0}.git-localactions{flex:none;gap:6px;display:flex}.git-localactions button{font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--text);cursor:pointer;border-radius:6px;padding:4px 12px;font-size:.78rem}.git-localactions button.primary{background:var(--accent);color:#fff;border-color:var(--accent)}.git-localactions button:disabled{opacity:.5;cursor:default}.git-pills{vertical-align:middle;gap:6px;margin-left:10px;display:inline-flex}.git-pill{background:var(--code-bg);color:var(--text-muted);border-radius:999px;padding:1px 7px;font-size:.7rem}.git-pill.up{color:#166534;background:#dcfce7}.git-pill.down{color:#854d0e;background:#fef9c3}.git-pill.dirty{color:#991b1b;background:#fee2e2}.git-syncmsg{color:var(--text-muted);margin-top:4px;font-size:.74rem;display:block}.git-cloned{color:var(--text-faint);font-size:.78rem}.app{flex-direction:column;height:100vh;display:flex}.app-header{border-bottom:1px solid var(--border);background:var(--bg);flex:none;align-items:center;gap:14px;padding:14px 20px;display:flex}.app-header h1{margin:0;font-size:1.15rem}.tag{letter-spacing:.08em;text-transform:uppercase;color:var(--accent-text);background:var(--accent-bg);border:1px solid #dbeafe;border-radius:999px;padding:2px 10px;font-size:.7rem;display:inline-block}.hint{color:var(--draft);margin-left:auto;font-size:.74rem}.app-body{flex:auto;min-height:0;display:flex}.activity-bar{background:var(--bg-subtle);border-right:1px solid var(--border);flex-direction:column;flex:0 0 52px;align-items:center;gap:4px;padding:8px 0;display:flex}.activity-bar .act{width:40px;height:40px;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-left:2px solid #0000;border-radius:8px;justify-content:center;align-items:center;display:flex}.activity-bar .act:hover{color:var(--text);background:var(--bg)}.activity-bar .act.active{color:var(--accent-text);background:var(--accent-bg);border-left-color:var(--accent)}.panes{flex:auto;min-height:0;display:flex}.welcome{text-align:center;flex-direction:column;flex:auto;justify-content:center;align-items:center;gap:12px;padding:40px;display:flex}.welcome h2{margin:0;font-size:1.3rem}.welcome p{max-width:44ch;margin:0}.welcome-cta{background:var(--accent);color:#fff;font:inherit;cursor:pointer;border:none;border-radius:6px;margin-top:8px;padding:8px 18px;font-size:.9rem}.close-book{font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--text-muted);cursor:pointer;border-radius:6px;margin-left:auto;padding:4px 10px;font-size:.8rem}.close-book:hover{color:var(--text);border-color:var(--accent)}.pane{padding:14px 16px;overflow:auto}.toc-pane{border-right:1px solid var(--border);background:var(--bg-subtle);flex:0 0 360px}.pane-resizer{cursor:col-resize;z-index:5;background:0 0;flex:0 0 5px;margin:0 -2px}.pane-resizer:hover,.pane-resizer.resizing{background:var(--accent)}.app.resizing{cursor:col-resize;-webkit-user-select:none;user-select:none}.detail-pane{background:var(--bg);flex-direction:column;flex:auto;min-height:0;padding:0;display:flex;overflow:hidden}.detail-scroll{padding:14px 16px;overflow:auto}.pane-title{text-transform:uppercase;letter-spacing:.08em;color:var(--text-muted);margin-bottom:10px;font-size:.72rem}.tabs{border-bottom:1px solid var(--border);gap:4px;margin-bottom:12px;display:flex}.tab{font:inherit;color:var(--text-muted);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-1px;padding:6px 12px;font-size:.82rem}.tab:hover{color:var(--text)}.tab.active{color:var(--accent-text);border-bottom-color:var(--accent);font-weight:500}.muted{color:var(--text-muted)}.err{color:var(--danger)}code{background:var(--code-bg);border-radius:4px;padding:1px 6px;font-size:.86em}.detail-num{color:var(--text-muted);font-variant-numeric:tabular-nums}.detail h2{margin:2px 0 16px}.detail-meta{grid-template-columns:90px 1fr;gap:8px 16px;margin:0;display:grid}.detail-meta dt{color:var(--text-muted);font-size:.85rem}.detail-meta dd{margin:0}.detail-foot{max-width:60ch;margin-top:24px}
|