yamlover 0.3.4 → 0.3.6
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/bin/yamlover.js +199 -112
- package/dist/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/dist/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/dist/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/dist/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/dist/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/dist/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/dist/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/dist/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/dist/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/dist/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/dist/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/dist/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/dist/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/dist/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/dist/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/dist/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/dist/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/dist/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/dist/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/dist/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/dist/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/dist/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/dist/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/dist/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/dist/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/dist/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/dist/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/dist/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/dist/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/dist/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/dist/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/dist/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/dist/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/dist/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/dist/client/assets/_commonjs-dynamic-modules-TDtrdbi3.js +1 -0
- package/dist/client/assets/decoded-CFkcuQ1f.js +1 -0
- package/dist/client/assets/djvu-B3wuFWwI.js +1 -0
- package/dist/client/assets/docx-putHYXzO.js +230 -0
- package/dist/client/assets/heic-oIxhIbIW.js +66 -0
- package/dist/client/assets/imagemap-CUKUIcGe.js +1 -0
- package/dist/client/assets/index-CQ3TGVSx.js +617 -0
- package/dist/client/assets/index-wTjOzmSY.css +1 -0
- package/dist/client/assets/map-CZS083CS.js +1 -0
- package/dist/client/assets/paged-CjxSuuik.js +1 -0
- package/dist/client/assets/panzoom-C7OuIIda.js +4 -0
- package/dist/client/assets/panzoom-CIGW-MKW.css +1 -0
- package/dist/client/assets/pdf-Dz3gUx0B.js +12 -0
- package/dist/client/assets/pdf-m5e3jsV4.css +1 -0
- package/dist/client/assets/pdf.worker.min-qwK7q_zL.mjs +28 -0
- package/dist/client/assets/psd-C8yNwHFw.js +11 -0
- package/dist/client/assets/spreadsheet-DBv7aqoN.js +38 -0
- package/dist/client/assets/tiff-73RKtIux.js +1 -0
- package/{index.html → dist/client/index.html} +2 -1
- package/package.json +18 -21
- package/src/client/App.tsx +0 -424
- package/src/client/NodeView.tsx +0 -422
- package/src/client/TaskStrip.tsx +0 -34
- package/src/client/Tree.tsx +0 -97
- package/src/client/api.ts +0 -213
- package/src/client/icons.ts +0 -91
- package/src/client/links.tsx +0 -108
- package/src/client/live.ts +0 -42
- package/src/client/main.tsx +0 -10
- package/src/client/paste-html.ts +0 -228
- package/src/client/paste-links.ts +0 -42
- package/src/client/paths.ts +0 -139
- package/src/client/render.tsx +0 -339
- package/src/client/renderers/annotate.tsx +0 -641
- package/src/client/renderers/asciidoc.tsx +0 -36
- package/src/client/renderers/chapter.tsx +0 -142
- package/src/client/renderers/csv.tsx +0 -234
- package/src/client/renderers/decoded.tsx +0 -72
- package/src/client/renderers/djvu.tsx +0 -271
- package/src/client/renderers/djvuWorker.ts +0 -99
- package/src/client/renderers/doc.tsx +0 -40
- package/src/client/renderers/docx.tsx +0 -49
- package/src/client/renderers/epub.tsx +0 -147
- package/src/client/renderers/explorer.tsx +0 -294
- package/src/client/renderers/fb2.tsx +0 -149
- package/src/client/renderers/headings.ts +0 -69
- package/src/client/renderers/heic.tsx +0 -23
- package/src/client/renderers/imagemap.tsx +0 -170
- package/src/client/renderers/kml.ts +0 -46
- package/src/client/renderers/latex.tsx +0 -37
- package/src/client/renderers/map.tsx +0 -205
- package/src/client/renderers/marklower.tsx +0 -120
- package/src/client/renderers/markup.tsx +0 -64
- package/src/client/renderers/media.tsx +0 -19
- package/src/client/renderers/paged.ts +0 -137
- package/src/client/renderers/panzoom.ts +0 -101
- package/src/client/renderers/pdf.tsx +0 -316
- package/src/client/renderers/plaintext.tsx +0 -120
- package/src/client/renderers/plantuml.tsx +0 -83
- package/src/client/renderers/psd.tsx +0 -25
- package/src/client/renderers/registry.tsx +0 -411
- package/src/client/renderers/rtf.tsx +0 -210
- package/src/client/renderers/spreadsheet.tsx +0 -105
- package/src/client/renderers/tag.tsx +0 -113
- package/src/client/renderers/text.tsx +0 -42
- package/src/client/renderers/tiff.tsx +0 -33
- package/src/client/styles.css +0 -1212
- package/src/client/vendor/README.md +0 -30
- package/src/client/vite-env.d.ts +0 -31
- package/src/server/api.ts +0 -147
- package/src/server/embed.ts +0 -187
- package/src/server/engine-api.ts +0 -1563
- package/src/server/gitignore.ts +0 -81
- package/src/server/node-kind.ts +0 -61
- package/src/server/tasks.ts +0 -83
- package/src/server/yamlover.ts +0 -1133
- /package/{src/client/vendor/djvu.js → dist/client/assets/djvu-Ci0lFKxE.js} +0 -0
package/src/client/styles.css
DELETED
|
@@ -1,1212 +0,0 @@
|
|
|
1
|
-
:root {
|
|
2
|
-
--bg: #1e1e2e;
|
|
3
|
-
--bg-alt: #181825;
|
|
4
|
-
--panel: #24273a;
|
|
5
|
-
--line: #363a4f;
|
|
6
|
-
--fg: #cad3f5;
|
|
7
|
-
--dim: #8087a2;
|
|
8
|
-
--accent: #8aadf4;
|
|
9
|
-
--key: #91d7e3;
|
|
10
|
-
--string: #a6da95;
|
|
11
|
-
--number: #f5a97f;
|
|
12
|
-
--bool: #c6a0f6;
|
|
13
|
-
--null: #ed8796;
|
|
14
|
-
--sel: #363a4f;
|
|
15
|
-
--font: ui-monospace, "SF Mono", "JetBrains Mono", "Fira Code", Menlo, Consolas, monospace;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
* {
|
|
19
|
-
box-sizing: border-box;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
html,
|
|
23
|
-
body,
|
|
24
|
-
#root {
|
|
25
|
-
height: 100%;
|
|
26
|
-
margin: 0;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
body {
|
|
30
|
-
background: var(--bg);
|
|
31
|
-
color: var(--fg);
|
|
32
|
-
font-family: var(--font);
|
|
33
|
-
/* base reading size — TOC labels, breadcrumb, and rendered prose all inherit it.
|
|
34
|
-
14px sits closer to the larger default size of the PDF/DjVu page renderers. */
|
|
35
|
-
font-size: 14px;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
.app {
|
|
39
|
-
display: flex;
|
|
40
|
-
flex-direction: column;
|
|
41
|
-
height: 100vh;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/* --- top bar / breadcrumbs ------------------------------------------------ */
|
|
45
|
-
.topbar {
|
|
46
|
-
display: flex;
|
|
47
|
-
align-items: center;
|
|
48
|
-
gap: 16px;
|
|
49
|
-
padding: 8px 14px;
|
|
50
|
-
background: var(--bg-alt);
|
|
51
|
-
border-bottom: 1px solid var(--line);
|
|
52
|
-
flex: 0 0 auto;
|
|
53
|
-
}
|
|
54
|
-
.crumbs {
|
|
55
|
-
display: flex;
|
|
56
|
-
align-items: center;
|
|
57
|
-
flex-wrap: wrap;
|
|
58
|
-
min-height: 1.3em; /* keep the bar from collapsing before the head loads */
|
|
59
|
-
}
|
|
60
|
-
.crumb {
|
|
61
|
-
color: var(--fg);
|
|
62
|
-
text-decoration: none;
|
|
63
|
-
}
|
|
64
|
-
.crumb:hover {
|
|
65
|
-
color: var(--accent);
|
|
66
|
-
text-decoration: underline;
|
|
67
|
-
}
|
|
68
|
-
.crumb-sep {
|
|
69
|
-
color: var(--dim);
|
|
70
|
-
margin: 0 6px;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
/* --- long-running server tasks (indexing, hashing, …) ---------------------- */
|
|
74
|
-
.task-strip {
|
|
75
|
-
margin-left: auto; /* park the chips at the topbar's right edge */
|
|
76
|
-
display: flex;
|
|
77
|
-
align-items: center;
|
|
78
|
-
gap: 12px;
|
|
79
|
-
min-width: 0;
|
|
80
|
-
}
|
|
81
|
-
.task-chip {
|
|
82
|
-
display: inline-flex;
|
|
83
|
-
flex-direction: column;
|
|
84
|
-
gap: 3px;
|
|
85
|
-
max-width: 320px;
|
|
86
|
-
font-size: 12px;
|
|
87
|
-
color: var(--dim);
|
|
88
|
-
}
|
|
89
|
-
.task-chip.error {
|
|
90
|
-
color: var(--null);
|
|
91
|
-
}
|
|
92
|
-
.task-label {
|
|
93
|
-
white-space: nowrap;
|
|
94
|
-
overflow: hidden;
|
|
95
|
-
text-overflow: ellipsis;
|
|
96
|
-
}
|
|
97
|
-
.task-counts {
|
|
98
|
-
color: var(--fg);
|
|
99
|
-
}
|
|
100
|
-
.task-bar {
|
|
101
|
-
display: block;
|
|
102
|
-
height: 3px;
|
|
103
|
-
border-radius: 2px;
|
|
104
|
-
background: var(--line);
|
|
105
|
-
overflow: hidden;
|
|
106
|
-
position: relative;
|
|
107
|
-
}
|
|
108
|
-
.task-bar-fill {
|
|
109
|
-
display: block;
|
|
110
|
-
height: 100%;
|
|
111
|
-
background: var(--accent);
|
|
112
|
-
transition: width 0.2s ease;
|
|
113
|
-
}
|
|
114
|
-
.task-chip.done .task-bar-fill {
|
|
115
|
-
background: var(--string);
|
|
116
|
-
}
|
|
117
|
-
.task-chip.error .task-bar-fill {
|
|
118
|
-
background: var(--null);
|
|
119
|
-
width: 100%;
|
|
120
|
-
}
|
|
121
|
-
.task-bar-fill.indeterminate {
|
|
122
|
-
width: 40%;
|
|
123
|
-
position: absolute;
|
|
124
|
-
animation: task-sweep 1.2s ease-in-out infinite;
|
|
125
|
-
}
|
|
126
|
-
@keyframes task-sweep {
|
|
127
|
-
0% { left: -40%; }
|
|
128
|
-
100% { left: 100%; }
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
/* --- body split ----------------------------------------------------------- */
|
|
132
|
-
.body {
|
|
133
|
-
display: flex;
|
|
134
|
-
flex: 1 1 auto;
|
|
135
|
-
min-height: 0;
|
|
136
|
-
}
|
|
137
|
-
.pane {
|
|
138
|
-
height: 100%;
|
|
139
|
-
overflow: auto; /* LHS and RHS scroll independently */
|
|
140
|
-
}
|
|
141
|
-
.left {
|
|
142
|
-
flex: 0 0 auto;
|
|
143
|
-
background: var(--panel);
|
|
144
|
-
border-right: 1px solid var(--line);
|
|
145
|
-
padding: 8px 0;
|
|
146
|
-
}
|
|
147
|
-
.right {
|
|
148
|
-
flex: 1 1 auto;
|
|
149
|
-
padding: 14px 18px;
|
|
150
|
-
}
|
|
151
|
-
/* programmatically focused on TOC click (so the keyboard drives the viewer) — no focus ring */
|
|
152
|
-
.right:focus {
|
|
153
|
-
outline: none;
|
|
154
|
-
}
|
|
155
|
-
.splitter {
|
|
156
|
-
flex: 0 0 5px;
|
|
157
|
-
cursor: col-resize;
|
|
158
|
-
background: var(--line);
|
|
159
|
-
}
|
|
160
|
-
.splitter:hover {
|
|
161
|
-
background: var(--accent);
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
/* --- tree ----------------------------------------------------------------- */
|
|
165
|
-
.tree-row {
|
|
166
|
-
display: flex;
|
|
167
|
-
align-items: center;
|
|
168
|
-
gap: 4px;
|
|
169
|
-
padding: 1px 8px 1px 0;
|
|
170
|
-
white-space: nowrap;
|
|
171
|
-
}
|
|
172
|
-
.tree-row.selected {
|
|
173
|
-
background: var(--sel);
|
|
174
|
-
}
|
|
175
|
-
.tree-label {
|
|
176
|
-
cursor: pointer;
|
|
177
|
-
}
|
|
178
|
-
.tree-label:hover {
|
|
179
|
-
color: var(--accent);
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
/* type/format icon */
|
|
183
|
-
.icon {
|
|
184
|
-
display: inline-block;
|
|
185
|
-
width: 1.6em;
|
|
186
|
-
text-align: center;
|
|
187
|
-
flex: 0 0 auto;
|
|
188
|
-
font-size: 12px;
|
|
189
|
-
}
|
|
190
|
-
.t-struct {
|
|
191
|
-
color: var(--key);
|
|
192
|
-
}
|
|
193
|
-
.t-str {
|
|
194
|
-
color: var(--string);
|
|
195
|
-
}
|
|
196
|
-
.t-num {
|
|
197
|
-
color: var(--number);
|
|
198
|
-
}
|
|
199
|
-
.t-bool {
|
|
200
|
-
color: var(--bool);
|
|
201
|
-
}
|
|
202
|
-
.t-null {
|
|
203
|
-
color: var(--null);
|
|
204
|
-
}
|
|
205
|
-
.t-bin,
|
|
206
|
-
.t-fmt {
|
|
207
|
-
color: var(--dim);
|
|
208
|
-
}
|
|
209
|
-
/* binary type glyph: the bits "0110" boxed into a little square (the TOC icon and
|
|
210
|
-
the explorer grid render the same mark) */
|
|
211
|
-
.icon.binsq,
|
|
212
|
-
.dirview-icon.binsq {
|
|
213
|
-
width: auto;
|
|
214
|
-
font-family: var(--mono, monospace);
|
|
215
|
-
font-size: 6px;
|
|
216
|
-
font-weight: 700;
|
|
217
|
-
line-height: 1;
|
|
218
|
-
border: 1px solid currentColor;
|
|
219
|
-
border-radius: 2px;
|
|
220
|
-
padding: 2px 2px;
|
|
221
|
-
}
|
|
222
|
-
.dirview-icon.binsq {
|
|
223
|
-
flex: none;
|
|
224
|
-
margin: 0 2px; /* keep the label column roughly aligned with the 22px emoji icons */
|
|
225
|
-
}
|
|
226
|
-
.toggle {
|
|
227
|
-
display: inline-flex;
|
|
228
|
-
align-items: center;
|
|
229
|
-
justify-content: center;
|
|
230
|
-
width: 20px;
|
|
231
|
-
height: 20px;
|
|
232
|
-
background: none;
|
|
233
|
-
border: none;
|
|
234
|
-
color: var(--dim);
|
|
235
|
-
cursor: pointer;
|
|
236
|
-
padding: 0;
|
|
237
|
-
flex: 0 0 auto;
|
|
238
|
-
}
|
|
239
|
-
.toggle .chevron {
|
|
240
|
-
font-size: 20px;
|
|
241
|
-
font-weight: 700;
|
|
242
|
-
line-height: 1;
|
|
243
|
-
transition: transform 0.12s ease;
|
|
244
|
-
}
|
|
245
|
-
.toggle.open .chevron {
|
|
246
|
-
transform: rotate(90deg);
|
|
247
|
-
}
|
|
248
|
-
.toggle.loading {
|
|
249
|
-
opacity: 0.4;
|
|
250
|
-
}
|
|
251
|
-
.toggle:hover {
|
|
252
|
-
color: var(--accent);
|
|
253
|
-
}
|
|
254
|
-
.toggle.leaf {
|
|
255
|
-
cursor: default;
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
-
/* --- node view ------------------------------------------------------------ */
|
|
259
|
-
.nodehead {
|
|
260
|
-
display: flex;
|
|
261
|
-
align-items: center;
|
|
262
|
-
justify-content: flex-start; /* dock chips + tabs to the LEFT (text is left-aligned) */
|
|
263
|
-
flex-wrap: wrap;
|
|
264
|
-
gap: 8px 12px;
|
|
265
|
-
border-bottom: 1px solid var(--line);
|
|
266
|
-
padding-bottom: 8px;
|
|
267
|
-
margin-bottom: 10px;
|
|
268
|
-
}
|
|
269
|
-
/* separates the type/format chips from the representation tabs in the node bar */
|
|
270
|
-
.bar-sep {
|
|
271
|
-
color: var(--dim);
|
|
272
|
-
opacity: 0.5;
|
|
273
|
-
user-select: none;
|
|
274
|
-
}
|
|
275
|
-
/* the markdown/asciidoc reading-width control, beside its renderer tab; red when invalid */
|
|
276
|
-
.markup-width {
|
|
277
|
-
width: 5ch;
|
|
278
|
-
background: var(--bg-alt);
|
|
279
|
-
color: var(--fg);
|
|
280
|
-
border: 1px solid var(--line);
|
|
281
|
-
border-radius: 4px;
|
|
282
|
-
padding: 2px 4px;
|
|
283
|
-
font: inherit;
|
|
284
|
-
font-family: var(--font);
|
|
285
|
-
font-size: 12px;
|
|
286
|
-
text-align: right;
|
|
287
|
-
}
|
|
288
|
-
.markup-width.invalid {
|
|
289
|
-
border-color: #f38ba8;
|
|
290
|
-
color: #f38ba8;
|
|
291
|
-
}
|
|
292
|
-
.nodemeta {
|
|
293
|
-
display: flex;
|
|
294
|
-
align-items: center;
|
|
295
|
-
gap: 8px;
|
|
296
|
-
flex-wrap: wrap;
|
|
297
|
-
}
|
|
298
|
-
.nodepath {
|
|
299
|
-
color: var(--accent);
|
|
300
|
-
}
|
|
301
|
-
.tag {
|
|
302
|
-
font-size: 11px;
|
|
303
|
-
padding: 1px 7px;
|
|
304
|
-
border: 1px solid var(--line);
|
|
305
|
-
border-radius: 10px;
|
|
306
|
-
color: var(--fg);
|
|
307
|
-
}
|
|
308
|
-
.tag.dim {
|
|
309
|
-
color: var(--dim);
|
|
310
|
-
}
|
|
311
|
-
.nodedesc {
|
|
312
|
-
color: var(--dim);
|
|
313
|
-
margin: 0 0 12px;
|
|
314
|
-
font-style: italic;
|
|
315
|
-
}
|
|
316
|
-
.tabs {
|
|
317
|
-
display: flex;
|
|
318
|
-
gap: 4px;
|
|
319
|
-
}
|
|
320
|
-
.tab {
|
|
321
|
-
background: none;
|
|
322
|
-
border: 1px solid var(--line);
|
|
323
|
-
color: var(--dim);
|
|
324
|
-
padding: 2px 10px;
|
|
325
|
-
border-radius: 4px;
|
|
326
|
-
cursor: pointer;
|
|
327
|
-
font-family: var(--font);
|
|
328
|
-
font-size: 12px;
|
|
329
|
-
}
|
|
330
|
-
.tab.active {
|
|
331
|
-
color: var(--bg);
|
|
332
|
-
background: var(--accent);
|
|
333
|
-
border-color: var(--accent);
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
/* --- code ----------------------------------------------------------------- */
|
|
337
|
-
.code {
|
|
338
|
-
margin: 0;
|
|
339
|
-
white-space: pre-wrap;
|
|
340
|
-
word-break: break-word;
|
|
341
|
-
line-height: 1.55;
|
|
342
|
-
font-family: var(--font);
|
|
343
|
-
}
|
|
344
|
-
.code.raw {
|
|
345
|
-
color: var(--fg);
|
|
346
|
-
}
|
|
347
|
-
.k {
|
|
348
|
-
color: var(--key);
|
|
349
|
-
}
|
|
350
|
-
.s {
|
|
351
|
-
color: var(--string);
|
|
352
|
-
}
|
|
353
|
-
.n {
|
|
354
|
-
color: var(--number);
|
|
355
|
-
}
|
|
356
|
-
.b {
|
|
357
|
-
color: var(--bool);
|
|
358
|
-
}
|
|
359
|
-
.null {
|
|
360
|
-
color: var(--null);
|
|
361
|
-
}
|
|
362
|
-
.punct {
|
|
363
|
-
color: var(--dim);
|
|
364
|
-
}
|
|
365
|
-
.c {
|
|
366
|
-
color: var(--dim);
|
|
367
|
-
font-style: italic;
|
|
368
|
-
}
|
|
369
|
-
.descend {
|
|
370
|
-
color: var(--accent);
|
|
371
|
-
text-decoration: none;
|
|
372
|
-
border-bottom: 1px dashed var(--accent);
|
|
373
|
-
cursor: pointer;
|
|
374
|
-
}
|
|
375
|
-
.descend:hover {
|
|
376
|
-
background: var(--sel);
|
|
377
|
-
}
|
|
378
|
-
/* an external (off-tree) marklower link — solid underline marks it leaves the app */
|
|
379
|
-
.extlink {
|
|
380
|
-
color: var(--accent);
|
|
381
|
-
text-decoration: underline;
|
|
382
|
-
cursor: pointer;
|
|
383
|
-
}
|
|
384
|
-
.extlink:hover {
|
|
385
|
-
background: var(--sel);
|
|
386
|
-
}
|
|
387
|
-
/* divider between the relations panel and the value, in the data views */
|
|
388
|
-
.reldiv {
|
|
389
|
-
border: none;
|
|
390
|
-
border-top: 1px solid var(--border, var(--dim));
|
|
391
|
-
margin: 8px 0;
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
/* --- chapter renderer (x-yamlover-chapter) -------------------------------- */
|
|
395
|
-
.chapter {
|
|
396
|
-
line-height: 1.65;
|
|
397
|
-
max-width: 70ch;
|
|
398
|
-
}
|
|
399
|
-
.chapter-title {
|
|
400
|
-
font-size: 22px;
|
|
401
|
-
font-weight: 700;
|
|
402
|
-
margin: 0 0 4px;
|
|
403
|
-
color: var(--fg);
|
|
404
|
-
}
|
|
405
|
-
.chapter-subtitle {
|
|
406
|
-
margin: 0 0 18px;
|
|
407
|
-
color: var(--dim);
|
|
408
|
-
font-style: italic;
|
|
409
|
-
}
|
|
410
|
-
.chapter-prose {
|
|
411
|
-
margin: 0 0 14px;
|
|
412
|
-
white-space: pre-wrap;
|
|
413
|
-
word-break: break-word;
|
|
414
|
-
}
|
|
415
|
-
.chapter-link {
|
|
416
|
-
font-size: 15px;
|
|
417
|
-
font-weight: 600;
|
|
418
|
-
margin: 18px 0 8px;
|
|
419
|
-
}
|
|
420
|
-
.chapter-link a {
|
|
421
|
-
border-bottom-width: 0;
|
|
422
|
-
}
|
|
423
|
-
|
|
424
|
-
/* a numbered chunk: an index gutter (linking to the chunk's own node) + body.
|
|
425
|
-
Align the index to the top, not the baseline: a replaced element (image /
|
|
426
|
-
diagram) has its baseline at its *bottom* edge, which would drop the index
|
|
427
|
-
below the object — flex-start keeps it at the body's top-left for prose and
|
|
428
|
-
media alike. */
|
|
429
|
-
.chunk {
|
|
430
|
-
display: flex;
|
|
431
|
-
gap: 12px;
|
|
432
|
-
align-items: flex-start;
|
|
433
|
-
scroll-margin-top: 12px; /* a chunk targeted via #/chunks[n] isn't flush to the top */
|
|
434
|
-
}
|
|
435
|
-
a.chunk-index {
|
|
436
|
-
text-decoration: none;
|
|
437
|
-
}
|
|
438
|
-
.chunk-index {
|
|
439
|
-
flex: 0 0 auto;
|
|
440
|
-
min-width: 2.2em; /* fits the § prefix + a digit, keeps the gutter right-aligned */
|
|
441
|
-
text-align: right;
|
|
442
|
-
font-variant-numeric: tabular-nums;
|
|
443
|
-
font-size: 12px;
|
|
444
|
-
color: var(--dim);
|
|
445
|
-
user-select: none;
|
|
446
|
-
border-bottom-width: 0;
|
|
447
|
-
}
|
|
448
|
-
a.chunk-index:hover {
|
|
449
|
-
color: var(--accent);
|
|
450
|
-
}
|
|
451
|
-
.chunk-body {
|
|
452
|
-
flex: 1 1 auto;
|
|
453
|
-
min-width: 0;
|
|
454
|
-
}
|
|
455
|
-
/* an image / diagram chunk sits flush with its index: drop the standalone-view
|
|
456
|
-
top padding so the object's top-left corner meets the gutter (the index) */
|
|
457
|
-
.chunk-body .filemedia {
|
|
458
|
-
padding-top: 0;
|
|
459
|
-
}
|
|
460
|
-
/* full-page media reused inline as a chunk: cap the heights that otherwise fill
|
|
461
|
-
the viewport (the standalone html iframe / pdf page), so a chapter body stays
|
|
462
|
-
readable when it interleaves an HTML or PDF chunk */
|
|
463
|
-
.chunk-body .filehtml {
|
|
464
|
-
height: 340px;
|
|
465
|
-
}
|
|
466
|
-
.chunk-body .filepdf {
|
|
467
|
-
height: auto; /* a chapter-embedded pdf is capped, not the full-viewport frame */
|
|
468
|
-
max-height: 460px;
|
|
469
|
-
overflow: auto;
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
.error {
|
|
473
|
-
color: var(--null);
|
|
474
|
-
padding: 12px;
|
|
475
|
-
}
|
|
476
|
-
.loading {
|
|
477
|
-
color: var(--dim);
|
|
478
|
-
padding: 12px;
|
|
479
|
-
}
|
|
480
|
-
/* a full-window hint shown while dragging file(s) over the page (drop = upload). pointer-events:
|
|
481
|
-
none so the drag/drop events still reach the document listeners underneath. */
|
|
482
|
-
.drop-overlay {
|
|
483
|
-
position: fixed;
|
|
484
|
-
inset: 0;
|
|
485
|
-
z-index: 2000;
|
|
486
|
-
display: flex;
|
|
487
|
-
align-items: center;
|
|
488
|
-
justify-content: center;
|
|
489
|
-
pointer-events: none;
|
|
490
|
-
background: rgba(24, 24, 37, 0.55);
|
|
491
|
-
border: 3px dashed var(--accent);
|
|
492
|
-
color: var(--fg);
|
|
493
|
-
font-size: 18px;
|
|
494
|
-
letter-spacing: 0.02em;
|
|
495
|
-
}
|
|
496
|
-
/* transient paste/upload status, pinned to the corner of the right pane */
|
|
497
|
-
.paste-toast {
|
|
498
|
-
position: fixed;
|
|
499
|
-
bottom: 16px;
|
|
500
|
-
right: 16px;
|
|
501
|
-
z-index: 1000;
|
|
502
|
-
padding: 8px 14px;
|
|
503
|
-
background: var(--panel);
|
|
504
|
-
color: var(--fg);
|
|
505
|
-
border: 1px solid var(--accent);
|
|
506
|
-
border-radius: 6px;
|
|
507
|
-
font-size: 13px;
|
|
508
|
-
box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
|
|
509
|
-
}
|
|
510
|
-
|
|
511
|
-
/* ---- file renderers: image / html / pdf / djvu / markup ------------------ */
|
|
512
|
-
.filemedia {
|
|
513
|
-
padding: 12px 0;
|
|
514
|
-
overflow: auto;
|
|
515
|
-
max-width: 900px; /* don't span the whole pane (001) */
|
|
516
|
-
}
|
|
517
|
-
/* PDF / DjVu are a stable scroll VIEWPORT (like the Leaflet map), so ctrl/alt-wheel zoom enlarges
|
|
518
|
-
the pages and they scroll in BOTH axes within the frame — never clipped to a fixed-width column. */
|
|
519
|
-
.filepdf,
|
|
520
|
-
.filedjvu {
|
|
521
|
-
padding: 12px;
|
|
522
|
-
overflow: auto;
|
|
523
|
-
height: calc(100vh - 160px);
|
|
524
|
-
min-height: 360px;
|
|
525
|
-
}
|
|
526
|
-
/* focused on mount so the keyboard scrolls the document — no focus ring on the scroller */
|
|
527
|
-
.filepdf:focus,
|
|
528
|
-
.filedjvu:focus {
|
|
529
|
-
outline: none;
|
|
530
|
-
}
|
|
531
|
-
.fileimage {
|
|
532
|
-
/* keep the image's own aspect ratio — never stretch (007) */
|
|
533
|
-
max-width: 100%;
|
|
534
|
-
max-height: 80vh;
|
|
535
|
-
width: auto;
|
|
536
|
-
height: auto;
|
|
537
|
-
object-fit: contain;
|
|
538
|
-
display: block;
|
|
539
|
-
margin: 0 0 12px; /* left-aligned, like every other resource (004) */
|
|
540
|
-
background: #fff;
|
|
541
|
-
}
|
|
542
|
-
/* a PlantUML diagram is an SVG on a white card, padded so it doesn't crowd the edges */
|
|
543
|
-
.fileimage.plantuml {
|
|
544
|
-
max-height: none; /* let a tall diagram grow; the pane scrolls */
|
|
545
|
-
padding: 12px;
|
|
546
|
-
border: 1px solid var(--border, #313244);
|
|
547
|
-
border-radius: 6px;
|
|
548
|
-
}
|
|
549
|
-
.filehtml {
|
|
550
|
-
width: 100%;
|
|
551
|
-
height: calc(100vh - 120px);
|
|
552
|
-
border: 1px solid var(--border, #313244);
|
|
553
|
-
background: #fff;
|
|
554
|
-
}
|
|
555
|
-
.filepdf .react-pdf__Page,
|
|
556
|
-
.djvu-page-wrap {
|
|
557
|
-
margin: 0 0 12px; /* left-aligned (004) */
|
|
558
|
-
box-shadow: 0 1px 6px rgba(0, 0, 0, 0.4);
|
|
559
|
-
}
|
|
560
|
-
/* a DjVu page: a positioned wrapper (sized inline to the display width) holding the decoded page
|
|
561
|
-
<canvas>, its OCR text layer (selectable), the marquee overlay, and the annotation region divs */
|
|
562
|
-
.djvu-page-wrap {
|
|
563
|
-
position: relative;
|
|
564
|
-
}
|
|
565
|
-
.djvu-page {
|
|
566
|
-
display: block;
|
|
567
|
-
width: 100%;
|
|
568
|
-
max-width: none;
|
|
569
|
-
background: #fff;
|
|
570
|
-
}
|
|
571
|
-
/* a not-yet-decoded page (windowed rendering) — fills the wrapper's estimated height */
|
|
572
|
-
.djvu-placeholder {
|
|
573
|
-
width: 100%;
|
|
574
|
-
height: 100%;
|
|
575
|
-
display: flex;
|
|
576
|
-
align-items: center;
|
|
577
|
-
justify-content: center;
|
|
578
|
-
background: #fff;
|
|
579
|
-
color: #888;
|
|
580
|
-
font-size: 12px;
|
|
581
|
-
}
|
|
582
|
-
/* OCR text layer: transparent positioned spans over the page → native browser text selection */
|
|
583
|
-
.djvu-textlayer {
|
|
584
|
-
position: absolute;
|
|
585
|
-
inset: 0;
|
|
586
|
-
z-index: 2;
|
|
587
|
-
overflow: hidden;
|
|
588
|
-
line-height: 1;
|
|
589
|
-
}
|
|
590
|
-
.djvu-textlayer span {
|
|
591
|
-
position: absolute;
|
|
592
|
-
color: transparent;
|
|
593
|
-
white-space: pre;
|
|
594
|
-
transform-origin: 0 0;
|
|
595
|
-
cursor: text;
|
|
596
|
-
}
|
|
597
|
-
|
|
598
|
-
/* rendered Markdown / AsciiDoc body */
|
|
599
|
-
.markup {
|
|
600
|
-
line-height: 1.55;
|
|
601
|
-
word-break: break-word;
|
|
602
|
-
max-width: 72ch; /* a readable measure — don't run the full pane width (001) */
|
|
603
|
-
padding-left: 1.6rem; /* a gutter to hold the per-heading `§` anchors (like a chunk's) */
|
|
604
|
-
}
|
|
605
|
-
.markup :first-child {
|
|
606
|
-
margin-top: 0;
|
|
607
|
-
}
|
|
608
|
-
.markup h1,
|
|
609
|
-
.markup h2,
|
|
610
|
-
.markup h3 {
|
|
611
|
-
color: var(--fg);
|
|
612
|
-
margin: 18px 0 8px;
|
|
613
|
-
}
|
|
614
|
-
/* a heading targeted via #slug isn't flush to the top (mirrors .chunk); relative
|
|
615
|
-
so its `§` anchor can sit in the left gutter (like a chunk's index) */
|
|
616
|
-
.markup :is(h1, h2, h3, h4, h5, h6) {
|
|
617
|
-
position: relative;
|
|
618
|
-
scroll-margin-top: 12px;
|
|
619
|
-
}
|
|
620
|
-
.markup a {
|
|
621
|
-
color: var(--accent);
|
|
622
|
-
}
|
|
623
|
-
/* the per-heading `§` fragment anchor: a marker right-aligned in the left gutter,
|
|
624
|
-
matching a chapter chunk's §N index (same 12px size and `--dim` colour, accent on
|
|
625
|
-
hover). A fixed rem offset (not em) so every heading level lines up in the same
|
|
626
|
-
gutter instead of scaling with its font size. */
|
|
627
|
-
.markup .header-anchor {
|
|
628
|
-
position: absolute;
|
|
629
|
-
left: -1.6rem;
|
|
630
|
-
width: 1.6rem;
|
|
631
|
-
box-sizing: border-box;
|
|
632
|
-
padding-right: 0.45rem; /* the gap before the heading text */
|
|
633
|
-
text-align: right;
|
|
634
|
-
font-size: 12px; /* a constant size, not the heading's, so all gutters match (= .chunk-index) */
|
|
635
|
-
font-weight: normal;
|
|
636
|
-
line-height: inherit;
|
|
637
|
-
color: var(--dim);
|
|
638
|
-
text-decoration: none;
|
|
639
|
-
user-select: none;
|
|
640
|
-
}
|
|
641
|
-
.markup :is(h1, h2, h3, h4, h5, h6):hover .header-anchor,
|
|
642
|
-
.markup .header-anchor:hover {
|
|
643
|
-
color: var(--accent);
|
|
644
|
-
}
|
|
645
|
-
.markup code {
|
|
646
|
-
font-family: var(--mono, monospace);
|
|
647
|
-
background: var(--bg-alt);
|
|
648
|
-
padding: 1px 4px;
|
|
649
|
-
border-radius: 3px;
|
|
650
|
-
}
|
|
651
|
-
.markup pre {
|
|
652
|
-
background: var(--bg-alt);
|
|
653
|
-
padding: 10px;
|
|
654
|
-
border-radius: 4px;
|
|
655
|
-
overflow: auto;
|
|
656
|
-
}
|
|
657
|
-
.markup pre code {
|
|
658
|
-
background: none;
|
|
659
|
-
padding: 0;
|
|
660
|
-
}
|
|
661
|
-
.markup img {
|
|
662
|
-
max-width: 100%;
|
|
663
|
-
}
|
|
664
|
-
.markup blockquote {
|
|
665
|
-
border-left: 3px solid var(--border, #313244);
|
|
666
|
-
margin: 10px 0;
|
|
667
|
-
padding-left: 12px;
|
|
668
|
-
color: var(--dim);
|
|
669
|
-
}
|
|
670
|
-
|
|
671
|
-
/* ---- csv / tsv table renderer -------------------------------------------- */
|
|
672
|
-
/* the CSV parsing controls (separator + header), inline in the node bar beside the
|
|
673
|
-
renderer tab — like the markdown/asciidoc width input */
|
|
674
|
-
.csv-toolbar {
|
|
675
|
-
display: inline-flex;
|
|
676
|
-
gap: 12px;
|
|
677
|
-
align-items: center;
|
|
678
|
-
color: var(--dim);
|
|
679
|
-
font-size: 12px;
|
|
680
|
-
}
|
|
681
|
-
|
|
682
|
-
/* plain text, shown verbatim (no markup, no re-flow) */
|
|
683
|
-
.plaintext {
|
|
684
|
-
margin: 0;
|
|
685
|
-
white-space: pre-wrap;
|
|
686
|
-
word-break: break-word;
|
|
687
|
-
font-family: var(--font);
|
|
688
|
-
font-size: 13px;
|
|
689
|
-
line-height: 1.55;
|
|
690
|
-
color: var(--fg);
|
|
691
|
-
}
|
|
692
|
-
/* a node-bar selector beside a renderer's tab (plaintext encoding, explorer view) */
|
|
693
|
-
.enc-control {
|
|
694
|
-
display: inline-flex;
|
|
695
|
-
align-items: center;
|
|
696
|
-
gap: 4px;
|
|
697
|
-
color: var(--dim);
|
|
698
|
-
font-size: 12px;
|
|
699
|
-
}
|
|
700
|
-
.enc-control select {
|
|
701
|
-
background: var(--bg-alt);
|
|
702
|
-
color: var(--fg);
|
|
703
|
-
border: 1px solid var(--border, #313244);
|
|
704
|
-
border-radius: 4px;
|
|
705
|
-
padding: 2px 4px;
|
|
706
|
-
font: inherit;
|
|
707
|
-
font-family: var(--font);
|
|
708
|
-
}
|
|
709
|
-
.csv-toolbar label {
|
|
710
|
-
display: inline-flex;
|
|
711
|
-
align-items: center;
|
|
712
|
-
gap: 4px;
|
|
713
|
-
}
|
|
714
|
-
.csv-toolbar select {
|
|
715
|
-
background: var(--bg-alt);
|
|
716
|
-
color: var(--fg);
|
|
717
|
-
border: 1px solid var(--border, #313244);
|
|
718
|
-
border-radius: 4px;
|
|
719
|
-
padding: 2px 4px;
|
|
720
|
-
font: inherit;
|
|
721
|
-
font-family: var(--font);
|
|
722
|
-
}
|
|
723
|
-
.csv-scroll {
|
|
724
|
-
overflow: auto;
|
|
725
|
-
max-width: 100%;
|
|
726
|
-
}
|
|
727
|
-
.csv-table {
|
|
728
|
-
border-collapse: collapse;
|
|
729
|
-
font-size: 13px;
|
|
730
|
-
}
|
|
731
|
-
.csv-table th,
|
|
732
|
-
.csv-table td {
|
|
733
|
-
border: 1px solid var(--border, #313244);
|
|
734
|
-
padding: 3px 8px;
|
|
735
|
-
text-align: left;
|
|
736
|
-
vertical-align: top;
|
|
737
|
-
white-space: pre-wrap;
|
|
738
|
-
}
|
|
739
|
-
.csv-table thead th {
|
|
740
|
-
position: sticky;
|
|
741
|
-
top: 0;
|
|
742
|
-
background: var(--bg-alt);
|
|
743
|
-
color: var(--fg);
|
|
744
|
-
font-weight: 600;
|
|
745
|
-
}
|
|
746
|
-
.csv-table tbody tr:nth-child(even) {
|
|
747
|
-
background: rgba(255, 255, 255, 0.025); /* faint zebra striping */
|
|
748
|
-
}
|
|
749
|
-
.csv-empty {
|
|
750
|
-
color: var(--dim);
|
|
751
|
-
}
|
|
752
|
-
|
|
753
|
-
/* ---- spreadsheet (xls/xlsx) sheet tabs ----------------------------------- */
|
|
754
|
-
.sheet-tabs {
|
|
755
|
-
display: flex;
|
|
756
|
-
flex-wrap: wrap;
|
|
757
|
-
gap: 4px;
|
|
758
|
-
margin: 4px 0 12px;
|
|
759
|
-
}
|
|
760
|
-
.sheet-tab {
|
|
761
|
-
background: var(--bg-alt);
|
|
762
|
-
color: var(--dim);
|
|
763
|
-
border: 1px solid var(--border, #313244);
|
|
764
|
-
border-radius: 4px;
|
|
765
|
-
padding: 2px 10px;
|
|
766
|
-
font: inherit;
|
|
767
|
-
font-family: var(--font);
|
|
768
|
-
font-size: 12px;
|
|
769
|
-
cursor: pointer;
|
|
770
|
-
}
|
|
771
|
-
.sheet-tab.active {
|
|
772
|
-
color: var(--fg);
|
|
773
|
-
border-color: var(--accent);
|
|
774
|
-
}
|
|
775
|
-
.sheet-tab:hover {
|
|
776
|
-
color: var(--fg);
|
|
777
|
-
}
|
|
778
|
-
|
|
779
|
-
/* ---- kml / kmz map renderer (Leaflet) ------------------------------------ */
|
|
780
|
-
.filemap {
|
|
781
|
-
width: 100%;
|
|
782
|
-
height: calc(100vh - 160px);
|
|
783
|
-
min-height: 360px;
|
|
784
|
-
border: 1px solid var(--border, #313244);
|
|
785
|
-
border-radius: 6px;
|
|
786
|
-
}
|
|
787
|
-
/* a map embedded inline as a chapter chunk: cap the height so the page stays readable */
|
|
788
|
-
.chunk-body .filemap.chunk-map {
|
|
789
|
-
height: 380px;
|
|
790
|
-
}
|
|
791
|
-
/* annotations: the per-material action bar + the inline highlight mark */
|
|
792
|
-
.annotate-bar {
|
|
793
|
-
display: flex;
|
|
794
|
-
align-items: center;
|
|
795
|
-
gap: 10px;
|
|
796
|
-
margin-bottom: 10px;
|
|
797
|
-
}
|
|
798
|
-
.annotate-count {
|
|
799
|
-
color: var(--dim);
|
|
800
|
-
font-size: 12px;
|
|
801
|
-
}
|
|
802
|
-
/* the floating menu raised by a text selection: a color palette + copy + cancel */
|
|
803
|
-
.annotate-menu {
|
|
804
|
-
position: fixed;
|
|
805
|
-
z-index: 1000; /* above Leaflet panes (≤700) so it floats over an image/map selection */
|
|
806
|
-
display: flex;
|
|
807
|
-
flex-wrap: wrap; /* swatches+tools on the first row; recents and the tag-path input wrap below */
|
|
808
|
-
align-items: center;
|
|
809
|
-
gap: 6px;
|
|
810
|
-
padding: 5px 7px;
|
|
811
|
-
max-width: 280px;
|
|
812
|
-
background: var(--bg-alt);
|
|
813
|
-
border: 1px solid var(--line);
|
|
814
|
-
border-radius: 6px;
|
|
815
|
-
box-shadow: 0 4px 14px rgba(0, 0, 0, 0.3);
|
|
816
|
-
}
|
|
817
|
-
.annotate-palette {
|
|
818
|
-
display: flex;
|
|
819
|
-
gap: 4px;
|
|
820
|
-
}
|
|
821
|
-
.annotate-swatch {
|
|
822
|
-
width: 18px;
|
|
823
|
-
height: 18px;
|
|
824
|
-
padding: 0;
|
|
825
|
-
border-radius: 50%;
|
|
826
|
-
border: 1px solid rgba(0, 0, 0, 0.3);
|
|
827
|
-
cursor: pointer;
|
|
828
|
-
}
|
|
829
|
-
.annotate-swatch.sel {
|
|
830
|
-
outline: 2px solid var(--fg); /* the pre-selected / last-used color */
|
|
831
|
-
outline-offset: 1px;
|
|
832
|
-
}
|
|
833
|
-
.annotate-tool {
|
|
834
|
-
display: inline-flex;
|
|
835
|
-
align-items: center;
|
|
836
|
-
justify-content: center;
|
|
837
|
-
min-width: 26px;
|
|
838
|
-
height: 24px;
|
|
839
|
-
background: var(--bg);
|
|
840
|
-
border: 1px solid var(--line);
|
|
841
|
-
color: var(--fg);
|
|
842
|
-
font: inherit;
|
|
843
|
-
font-size: 15px;
|
|
844
|
-
line-height: 1;
|
|
845
|
-
padding: 0 6px;
|
|
846
|
-
border-radius: 5px;
|
|
847
|
-
cursor: pointer;
|
|
848
|
-
}
|
|
849
|
-
.annotate-tool:hover {
|
|
850
|
-
border-color: var(--dim);
|
|
851
|
-
}
|
|
852
|
-
/* the explicit ✓ confirm (commit) and 🗑 discard/delete — clearly distinct, accent-tinted */
|
|
853
|
-
.annotate-tool.ok {
|
|
854
|
-
color: #a6e3a1;
|
|
855
|
-
border-color: rgba(166, 227, 161, 0.5);
|
|
856
|
-
}
|
|
857
|
-
.annotate-tool.ok:hover {
|
|
858
|
-
background: rgba(166, 227, 161, 0.18);
|
|
859
|
-
border-color: #a6e3a1;
|
|
860
|
-
}
|
|
861
|
-
.annotate-tool.danger {
|
|
862
|
-
color: #f38ba8;
|
|
863
|
-
border-color: rgba(243, 139, 168, 0.5);
|
|
864
|
-
}
|
|
865
|
-
.annotate-tool.danger:hover {
|
|
866
|
-
background: rgba(243, 139, 168, 0.18);
|
|
867
|
-
border-color: #f38ba8;
|
|
868
|
-
}
|
|
869
|
-
/* the recently applied NAMED tags — a row of small badges below the swatches */
|
|
870
|
-
.annotate-recents {
|
|
871
|
-
flex-basis: 100%;
|
|
872
|
-
display: flex;
|
|
873
|
-
flex-wrap: wrap;
|
|
874
|
-
gap: 4px;
|
|
875
|
-
}
|
|
876
|
-
.annotate-recents .tagtag,
|
|
877
|
-
.annotate-suggest .tagtag {
|
|
878
|
-
border: 0;
|
|
879
|
-
font: inherit;
|
|
880
|
-
font-size: 11px;
|
|
881
|
-
cursor: pointer;
|
|
882
|
-
}
|
|
883
|
-
/* the assigned / pre-selected tag, framed EXACTLY like the selected color swatch: a ring with a
|
|
884
|
-
gap (the swatch's outline-offset). The ring cannot live on .tagtag itself: filter is applied
|
|
885
|
-
BEFORE clip-path on the same element, so the luggage-tag clip would cut it away. On the
|
|
886
|
-
unclipped WRAPPER the child is clipped first; then a first round of hard offset drop-shadows
|
|
887
|
-
in the MENU BACKGROUND color grows the silhouette by 1px (the gap), and a second round in
|
|
888
|
-
the foreground color rings that — gap + ring, both following the actual tag shape. */
|
|
889
|
-
.annotate-recents .tagframe,
|
|
890
|
-
.annotate-suggest .tagframe {
|
|
891
|
-
display: inline-flex;
|
|
892
|
-
}
|
|
893
|
-
.annotate-recents .tagframe.sel,
|
|
894
|
-
.annotate-suggest .tagframe.sel {
|
|
895
|
-
filter:
|
|
896
|
-
drop-shadow(1px 0 0 var(--bg-alt))
|
|
897
|
-
drop-shadow(-1px 0 0 var(--bg-alt))
|
|
898
|
-
drop-shadow(0 1px 0 var(--bg-alt))
|
|
899
|
-
drop-shadow(0 -1px 0 var(--bg-alt))
|
|
900
|
-
drop-shadow(1.5px 0 0 var(--fg))
|
|
901
|
-
drop-shadow(-1.5px 0 0 var(--fg))
|
|
902
|
-
drop-shadow(0 1.5px 0 var(--fg))
|
|
903
|
-
drop-shadow(0 -1.5px 0 var(--fg));
|
|
904
|
-
}
|
|
905
|
-
/* apply ANY tag by its node path (Enter commits) */
|
|
906
|
-
.annotate-taginput {
|
|
907
|
-
flex-basis: 100%;
|
|
908
|
-
min-width: 0;
|
|
909
|
-
padding: 3px 6px;
|
|
910
|
-
background: var(--bg);
|
|
911
|
-
border: 1px solid var(--line);
|
|
912
|
-
border-radius: 5px;
|
|
913
|
-
color: var(--fg);
|
|
914
|
-
font: inherit;
|
|
915
|
-
font-size: 12px;
|
|
916
|
-
}
|
|
917
|
-
.annotate-taginput:focus {
|
|
918
|
-
outline: none;
|
|
919
|
-
border-color: var(--dim);
|
|
920
|
-
}
|
|
921
|
-
/* the typeahead: the path input plus a suggestion list below it, spanning the menu width */
|
|
922
|
-
.annotate-typeahead {
|
|
923
|
-
flex-basis: 100%;
|
|
924
|
-
min-width: 0;
|
|
925
|
-
position: relative;
|
|
926
|
-
}
|
|
927
|
-
.annotate-typeahead .annotate-taginput {
|
|
928
|
-
width: 100%;
|
|
929
|
-
box-sizing: border-box;
|
|
930
|
-
}
|
|
931
|
-
/* matched named tags as badges (the highlighted one rings via .tagframe.sel) */
|
|
932
|
-
.annotate-suggest {
|
|
933
|
-
display: flex;
|
|
934
|
-
flex-wrap: wrap;
|
|
935
|
-
gap: 4px;
|
|
936
|
-
margin-top: 5px;
|
|
937
|
-
max-height: 132px;
|
|
938
|
-
overflow-y: auto;
|
|
939
|
-
}
|
|
940
|
-
/* a region annotation drawn over a PDF page (the image overlay uses a Leaflet rectangle) */
|
|
941
|
-
.pdf-page {
|
|
942
|
-
position: relative;
|
|
943
|
-
}
|
|
944
|
-
/* a far-from-viewport page not yet mounted (windowed rendering) — keeps the scroll height */
|
|
945
|
-
.pdf-placeholder {
|
|
946
|
-
background: #fff;
|
|
947
|
-
opacity: 0.06;
|
|
948
|
-
}
|
|
949
|
-
/* Zoom is a CSS transform on .pdf-content (scales the rendered pages with NO re-raster → no
|
|
950
|
-
blink). The transformed content is taken out of flow, so .pdf-sizer reserves its scaled
|
|
951
|
-
footprint to keep the scroll height correct. */
|
|
952
|
-
.pdf-sizer {
|
|
953
|
-
position: relative;
|
|
954
|
-
}
|
|
955
|
-
.pdf-content {
|
|
956
|
-
position: absolute;
|
|
957
|
-
top: 0;
|
|
958
|
-
left: 0;
|
|
959
|
-
}
|
|
960
|
-
|
|
961
|
-
/* drag-marquee overlay for pages with no usable text layer (scanned/pathological PDF, or a DjVu
|
|
962
|
-
with no OCR) — above the text layer (z 2), below the editable region divs so saved regions
|
|
963
|
-
stay clickable */
|
|
964
|
-
.pdf-marquee,
|
|
965
|
-
.djvu-marquee {
|
|
966
|
-
position: absolute;
|
|
967
|
-
inset: 0;
|
|
968
|
-
z-index: 3;
|
|
969
|
-
cursor: crosshair;
|
|
970
|
-
user-select: none;
|
|
971
|
-
}
|
|
972
|
-
.pdf-region,
|
|
973
|
-
.djvu-region {
|
|
974
|
-
position: absolute;
|
|
975
|
-
box-sizing: border-box;
|
|
976
|
-
/* above the text layer (z 2) and the marquee overlay (z 3) so a saved region is the topmost
|
|
977
|
-
element at its rectangle — otherwise a text-layer span or the marquee swallows the click and
|
|
978
|
-
the edit/delete menu never opens */
|
|
979
|
-
z-index: 4;
|
|
980
|
-
border: 2px solid #f9e2af;
|
|
981
|
-
background: rgba(249, 226, 175, 0.18);
|
|
982
|
-
pointer-events: none; /* the live preview must not block selecting text under it */
|
|
983
|
-
}
|
|
984
|
-
.pdf-region.editable,
|
|
985
|
-
.djvu-region.editable {
|
|
986
|
-
pointer-events: auto; /* a saved region is clickable → the edit menu */
|
|
987
|
-
cursor: pointer;
|
|
988
|
-
}
|
|
989
|
-
mark.yo-annotation {
|
|
990
|
-
/* background-color + border-bottom-color are set inline from the annotation's selector.color
|
|
991
|
-
(fallbacks here for marks saved before colors existed) */
|
|
992
|
-
background-color: rgba(249, 226, 175, 0.30); /* a soft highlight; the note rides in the title tooltip */
|
|
993
|
-
color: inherit;
|
|
994
|
-
border-bottom: 2px solid #f9e2af;
|
|
995
|
-
border-radius: 2px;
|
|
996
|
-
cursor: help;
|
|
997
|
-
}
|
|
998
|
-
|
|
999
|
-
/* the pan/zoom image viewer reuses the map container; its backdrop is the page background, so a
|
|
1000
|
-
picture panned/zoomed past the edges sits on the same canvas as the rest of the page. The
|
|
1001
|
-
compound `.leaflet-container` selector overrides Leaflet's own default gray (#ddd) backdrop. */
|
|
1002
|
-
.fileimagemap,
|
|
1003
|
-
.fileimagemap.leaflet-container {
|
|
1004
|
-
background: var(--bg);
|
|
1005
|
-
}
|
|
1006
|
-
/* a view where plain-drag SELECTS (image/map full view): the crosshair signals "drag to annotate";
|
|
1007
|
-
hold ctrl/alt to pan. The live rubber-band + saved region rectangles carry their highlight color
|
|
1008
|
-
inline (Leaflet path options); a saved region shows a help cursor for its note tooltip. */
|
|
1009
|
-
.yo-selectable.leaflet-container {
|
|
1010
|
-
cursor: crosshair;
|
|
1011
|
-
}
|
|
1012
|
-
.leaflet-interactive.yo-region {
|
|
1013
|
-
cursor: pointer; /* click a region → the edit menu (recolor / delete) */
|
|
1014
|
-
}
|
|
1015
|
-
/* Leaflet popups carry the feature's (often HTML) KML description */
|
|
1016
|
-
.map-popup-desc {
|
|
1017
|
-
margin-top: 4px;
|
|
1018
|
-
max-height: 200px;
|
|
1019
|
-
overflow: auto;
|
|
1020
|
-
}
|
|
1021
|
-
|
|
1022
|
-
/* ---- legacy .doc download fallback --------------------------------------- */
|
|
1023
|
-
.office-fallback {
|
|
1024
|
-
max-width: 60ch;
|
|
1025
|
-
line-height: 1.55;
|
|
1026
|
-
color: var(--fg);
|
|
1027
|
-
}
|
|
1028
|
-
.office-fallback a.descend {
|
|
1029
|
-
color: var(--accent);
|
|
1030
|
-
}
|
|
1031
|
-
|
|
1032
|
-
/* ---- fb2 ebook renderer -------------------------------------------------- */
|
|
1033
|
-
.fb2-body {
|
|
1034
|
-
font-family: var(--mono, monospace);
|
|
1035
|
-
}
|
|
1036
|
-
.fb2-cover {
|
|
1037
|
-
max-width: 320px;
|
|
1038
|
-
max-height: 60vh;
|
|
1039
|
-
display: block;
|
|
1040
|
-
margin: 0 0 18px;
|
|
1041
|
-
box-shadow: 0 1px 8px rgba(0, 0, 0, 0.5);
|
|
1042
|
-
}
|
|
1043
|
-
.fb2-body .fb2-title {
|
|
1044
|
-
font-size: 17px;
|
|
1045
|
-
font-weight: 700;
|
|
1046
|
-
color: var(--fg);
|
|
1047
|
-
margin: 22px 0 10px;
|
|
1048
|
-
}
|
|
1049
|
-
.fb2-body .fb2-subtitle {
|
|
1050
|
-
font-weight: 600;
|
|
1051
|
-
margin: 14px 0 8px;
|
|
1052
|
-
}
|
|
1053
|
-
.fb2-body .fb2-cite {
|
|
1054
|
-
font-style: italic;
|
|
1055
|
-
}
|
|
1056
|
-
.fb2-body .fb2-poem {
|
|
1057
|
-
margin: 12px 0;
|
|
1058
|
-
padding-left: 16px;
|
|
1059
|
-
font-style: italic;
|
|
1060
|
-
}
|
|
1061
|
-
.fb2-body .fb2-stanza {
|
|
1062
|
-
margin: 8px 0;
|
|
1063
|
-
}
|
|
1064
|
-
.fb2-body .fb2-text-author {
|
|
1065
|
-
text-align: right;
|
|
1066
|
-
color: var(--dim);
|
|
1067
|
-
font-style: italic;
|
|
1068
|
-
}
|
|
1069
|
-
.fb2-body .fb2-img {
|
|
1070
|
-
max-width: 100%;
|
|
1071
|
-
display: block;
|
|
1072
|
-
margin: 12px 0;
|
|
1073
|
-
}
|
|
1074
|
-
|
|
1075
|
-
/* ---- epub ebook renderer ------------------------------------------------- */
|
|
1076
|
-
.epub-body img {
|
|
1077
|
-
max-width: 100%;
|
|
1078
|
-
height: auto;
|
|
1079
|
-
}
|
|
1080
|
-
.epub-body .epub-doc + .epub-doc {
|
|
1081
|
-
margin-top: 24px;
|
|
1082
|
-
padding-top: 24px;
|
|
1083
|
-
border-top: 1px solid var(--line);
|
|
1084
|
-
}
|
|
1085
|
-
|
|
1086
|
-
/* ---- explorer renderer: a file-manager icon grid of a node's members, uplinks
|
|
1087
|
-
(the `..` parent and upstream `*`/`~` sources) leading it. Also the tag page
|
|
1088
|
-
(the materials filed under the tag, its description in the header). ---- */
|
|
1089
|
-
.dirhead {
|
|
1090
|
-
padding: 14px 8px 0;
|
|
1091
|
-
}
|
|
1092
|
-
.dirview {
|
|
1093
|
-
display: flex;
|
|
1094
|
-
flex-wrap: wrap;
|
|
1095
|
-
align-content: flex-start;
|
|
1096
|
-
gap: 6px;
|
|
1097
|
-
padding: 12px 8px;
|
|
1098
|
-
}
|
|
1099
|
-
.dirview-item {
|
|
1100
|
-
display: flex;
|
|
1101
|
-
align-items: center;
|
|
1102
|
-
gap: 8px;
|
|
1103
|
-
width: 210px;
|
|
1104
|
-
padding: 5px 8px;
|
|
1105
|
-
border-radius: 6px;
|
|
1106
|
-
color: var(--fg);
|
|
1107
|
-
text-decoration: none;
|
|
1108
|
-
border-bottom: 0; /* override the global link underline */
|
|
1109
|
-
cursor: pointer;
|
|
1110
|
-
}
|
|
1111
|
-
.dirview-item:hover {
|
|
1112
|
-
background: var(--panel);
|
|
1113
|
-
}
|
|
1114
|
-
/* keyboard selection (roving focus — arrows walk, Enter opens) */
|
|
1115
|
-
.dirview-item:focus {
|
|
1116
|
-
outline: none;
|
|
1117
|
-
background: var(--panel);
|
|
1118
|
-
box-shadow: 0 0 0 2px var(--accent) inset;
|
|
1119
|
-
}
|
|
1120
|
-
.dirview-icon {
|
|
1121
|
-
flex: none;
|
|
1122
|
-
width: 22px;
|
|
1123
|
-
text-align: center;
|
|
1124
|
-
}
|
|
1125
|
-
.dirview-label {
|
|
1126
|
-
white-space: nowrap;
|
|
1127
|
-
overflow: hidden;
|
|
1128
|
-
text-overflow: ellipsis;
|
|
1129
|
-
font-size: 13px;
|
|
1130
|
-
}
|
|
1131
|
-
.dirview-label .val {
|
|
1132
|
-
color: var(--dim);
|
|
1133
|
-
}
|
|
1134
|
-
/* an uplink (a relation: `..`, an upstream ref/tag) — the way OUT, drawn apart */
|
|
1135
|
-
.dirview-up {
|
|
1136
|
-
border: 1px dashed var(--line);
|
|
1137
|
-
color: var(--dim);
|
|
1138
|
-
}
|
|
1139
|
-
.dirview-up:hover {
|
|
1140
|
-
border-color: var(--accent);
|
|
1141
|
-
}
|
|
1142
|
-
.dirview-empty {
|
|
1143
|
-
color: var(--dim);
|
|
1144
|
-
font-style: italic;
|
|
1145
|
-
}
|
|
1146
|
-
/* large icons (the default view): tiles, the icon above a centered label */
|
|
1147
|
-
.dirview.dirview-lg {
|
|
1148
|
-
gap: 10px;
|
|
1149
|
-
}
|
|
1150
|
-
.dirview-lg .dirview-item {
|
|
1151
|
-
flex-direction: column;
|
|
1152
|
-
justify-content: flex-start;
|
|
1153
|
-
width: 120px;
|
|
1154
|
-
padding: 10px 6px 8px;
|
|
1155
|
-
gap: 7px;
|
|
1156
|
-
text-align: center;
|
|
1157
|
-
}
|
|
1158
|
-
.dirview-lg .dirview-icon {
|
|
1159
|
-
width: auto;
|
|
1160
|
-
font-size: 36px;
|
|
1161
|
-
line-height: 1;
|
|
1162
|
-
}
|
|
1163
|
-
.dirview-lg .dirview-icon.binsq {
|
|
1164
|
-
font-size: 11px;
|
|
1165
|
-
padding: 6px 5px;
|
|
1166
|
-
margin: 9px 0; /* keep tile icon rows level with the 36px glyphs */
|
|
1167
|
-
}
|
|
1168
|
-
.dirview-lg .dirview-label {
|
|
1169
|
-
max-width: 100%;
|
|
1170
|
-
white-space: normal;
|
|
1171
|
-
overflow-wrap: anywhere;
|
|
1172
|
-
display: -webkit-box;
|
|
1173
|
-
-webkit-line-clamp: 2; /* a long name wraps to two lines, then ellipsizes */
|
|
1174
|
-
-webkit-box-orient: vertical;
|
|
1175
|
-
}
|
|
1176
|
-
|
|
1177
|
-
/* tag references shown in a node's header bar: a colored luggage-tag shape — one
|
|
1178
|
-
end rectangular, the other a triangular point with a punched hole. The color is
|
|
1179
|
-
a stable hash of the tag name (see tagColor). */
|
|
1180
|
-
.tagtag {
|
|
1181
|
-
position: relative;
|
|
1182
|
-
display: inline-block;
|
|
1183
|
-
color: #fff;
|
|
1184
|
-
font-size: 11px;
|
|
1185
|
-
line-height: 1.45;
|
|
1186
|
-
padding: 1px 9px 1px 17px; /* extra left clears the point + hole */
|
|
1187
|
-
text-decoration: none;
|
|
1188
|
-
border-bottom: 0; /* override the global link underline */
|
|
1189
|
-
cursor: pointer;
|
|
1190
|
-
white-space: nowrap;
|
|
1191
|
-
clip-path: polygon(11px 0, 100% 0, 100% 100%, 11px 100%, 0 50%);
|
|
1192
|
-
}
|
|
1193
|
-
.tagtag::before {
|
|
1194
|
-
content: "";
|
|
1195
|
-
position: absolute;
|
|
1196
|
-
left: 4px;
|
|
1197
|
-
top: 50%;
|
|
1198
|
-
width: 4px;
|
|
1199
|
-
height: 4px;
|
|
1200
|
-
margin-top: -2px;
|
|
1201
|
-
border-radius: 50%;
|
|
1202
|
-
background: var(--bg); /* the bar behind shows through — a punched hole */
|
|
1203
|
-
}
|
|
1204
|
-
.tagtag:hover {
|
|
1205
|
-
filter: brightness(1.18);
|
|
1206
|
-
}
|
|
1207
|
-
.tagdesc {
|
|
1208
|
-
text-align: left;
|
|
1209
|
-
color: var(--dim);
|
|
1210
|
-
font-style: italic;
|
|
1211
|
-
margin: 8px 0 0;
|
|
1212
|
-
}
|