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.
Files changed (137) hide show
  1. package/bin/yamlover.js +199 -112
  2. package/dist/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  3. package/dist/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  4. package/dist/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  5. package/dist/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  6. package/dist/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  7. package/dist/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  8. package/dist/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  9. package/dist/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  10. package/dist/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  11. package/dist/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  12. package/dist/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  13. package/dist/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  14. package/dist/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  15. package/dist/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  16. package/dist/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  17. package/dist/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  18. package/dist/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  19. package/dist/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  20. package/dist/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  21. package/dist/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  22. package/dist/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  23. package/dist/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  24. package/dist/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  25. package/dist/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  26. package/dist/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  27. package/dist/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  28. package/dist/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  29. package/dist/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  30. package/dist/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  31. package/dist/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  32. package/dist/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  33. package/dist/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  34. package/dist/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  35. package/dist/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  36. package/dist/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  37. package/dist/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  38. package/dist/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  39. package/dist/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  40. package/dist/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  41. package/dist/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  42. package/dist/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  43. package/dist/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  44. package/dist/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  45. package/dist/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  46. package/dist/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  47. package/dist/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  48. package/dist/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  49. package/dist/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  50. package/dist/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  51. package/dist/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  52. package/dist/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  53. package/dist/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  54. package/dist/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  55. package/dist/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  56. package/dist/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  57. package/dist/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  58. package/dist/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  59. package/dist/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  60. package/dist/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  61. package/dist/client/assets/_commonjs-dynamic-modules-TDtrdbi3.js +1 -0
  62. package/dist/client/assets/decoded-CFkcuQ1f.js +1 -0
  63. package/dist/client/assets/djvu-B3wuFWwI.js +1 -0
  64. package/dist/client/assets/docx-putHYXzO.js +230 -0
  65. package/dist/client/assets/heic-oIxhIbIW.js +66 -0
  66. package/dist/client/assets/imagemap-CUKUIcGe.js +1 -0
  67. package/dist/client/assets/index-CQ3TGVSx.js +617 -0
  68. package/dist/client/assets/index-wTjOzmSY.css +1 -0
  69. package/dist/client/assets/map-CZS083CS.js +1 -0
  70. package/dist/client/assets/paged-CjxSuuik.js +1 -0
  71. package/dist/client/assets/panzoom-C7OuIIda.js +4 -0
  72. package/dist/client/assets/panzoom-CIGW-MKW.css +1 -0
  73. package/dist/client/assets/pdf-Dz3gUx0B.js +12 -0
  74. package/dist/client/assets/pdf-m5e3jsV4.css +1 -0
  75. package/dist/client/assets/pdf.worker.min-qwK7q_zL.mjs +28 -0
  76. package/dist/client/assets/psd-C8yNwHFw.js +11 -0
  77. package/dist/client/assets/spreadsheet-DBv7aqoN.js +38 -0
  78. package/dist/client/assets/tiff-73RKtIux.js +1 -0
  79. package/{index.html → dist/client/index.html} +2 -1
  80. package/package.json +18 -21
  81. package/src/client/App.tsx +0 -424
  82. package/src/client/NodeView.tsx +0 -422
  83. package/src/client/TaskStrip.tsx +0 -34
  84. package/src/client/Tree.tsx +0 -97
  85. package/src/client/api.ts +0 -213
  86. package/src/client/icons.ts +0 -91
  87. package/src/client/links.tsx +0 -108
  88. package/src/client/live.ts +0 -42
  89. package/src/client/main.tsx +0 -10
  90. package/src/client/paste-html.ts +0 -228
  91. package/src/client/paste-links.ts +0 -42
  92. package/src/client/paths.ts +0 -139
  93. package/src/client/render.tsx +0 -339
  94. package/src/client/renderers/annotate.tsx +0 -641
  95. package/src/client/renderers/asciidoc.tsx +0 -36
  96. package/src/client/renderers/chapter.tsx +0 -142
  97. package/src/client/renderers/csv.tsx +0 -234
  98. package/src/client/renderers/decoded.tsx +0 -72
  99. package/src/client/renderers/djvu.tsx +0 -271
  100. package/src/client/renderers/djvuWorker.ts +0 -99
  101. package/src/client/renderers/doc.tsx +0 -40
  102. package/src/client/renderers/docx.tsx +0 -49
  103. package/src/client/renderers/epub.tsx +0 -147
  104. package/src/client/renderers/explorer.tsx +0 -294
  105. package/src/client/renderers/fb2.tsx +0 -149
  106. package/src/client/renderers/headings.ts +0 -69
  107. package/src/client/renderers/heic.tsx +0 -23
  108. package/src/client/renderers/imagemap.tsx +0 -170
  109. package/src/client/renderers/kml.ts +0 -46
  110. package/src/client/renderers/latex.tsx +0 -37
  111. package/src/client/renderers/map.tsx +0 -205
  112. package/src/client/renderers/marklower.tsx +0 -120
  113. package/src/client/renderers/markup.tsx +0 -64
  114. package/src/client/renderers/media.tsx +0 -19
  115. package/src/client/renderers/paged.ts +0 -137
  116. package/src/client/renderers/panzoom.ts +0 -101
  117. package/src/client/renderers/pdf.tsx +0 -316
  118. package/src/client/renderers/plaintext.tsx +0 -120
  119. package/src/client/renderers/plantuml.tsx +0 -83
  120. package/src/client/renderers/psd.tsx +0 -25
  121. package/src/client/renderers/registry.tsx +0 -411
  122. package/src/client/renderers/rtf.tsx +0 -210
  123. package/src/client/renderers/spreadsheet.tsx +0 -105
  124. package/src/client/renderers/tag.tsx +0 -113
  125. package/src/client/renderers/text.tsx +0 -42
  126. package/src/client/renderers/tiff.tsx +0 -33
  127. package/src/client/styles.css +0 -1212
  128. package/src/client/vendor/README.md +0 -30
  129. package/src/client/vite-env.d.ts +0 -31
  130. package/src/server/api.ts +0 -147
  131. package/src/server/embed.ts +0 -187
  132. package/src/server/engine-api.ts +0 -1563
  133. package/src/server/gitignore.ts +0 -81
  134. package/src/server/node-kind.ts +0 -61
  135. package/src/server/tasks.ts +0 -83
  136. package/src/server/yamlover.ts +0 -1133
  137. /package/{src/client/vendor/djvu.js → dist/client/assets/djvu-Ci0lFKxE.js} +0 -0
@@ -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
- }