reviw 1.1.0 → 1.1.1
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/dist/server/server.js +363 -267
- package/dist/ui/ui.js +84 -50
- package/package.json +1 -1
package/dist/server/server.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { dirname as dirname$
|
|
3
|
-
import { spawnSync as spawnSync$
|
|
4
|
-
import { createHash as createHash$
|
|
5
|
-
import { createServer as createServer$
|
|
6
|
-
import { tmpdir as tmpdir$
|
|
7
|
-
import { statSync as statSync$
|
|
2
|
+
import { dirname as dirname$2048, join as join$2031, resolve as resolve$2069, extname as extname$2057, basename as basename$2067 } from "node:path";
|
|
3
|
+
import { spawnSync as spawnSync$2139, execSync as execSync$2104, spawn as spawn$2134 } from "node:child_process";
|
|
4
|
+
import { createHash as createHash$2090 } from "node:crypto";
|
|
5
|
+
import { createServer as createServer$2074 } from "node:http";
|
|
6
|
+
import { tmpdir as tmpdir$2109, homedir as homedir$2036 } from "node:os";
|
|
7
|
+
import { statSync as statSync$2154, unwatchFile as unwatchFile$2096, readdirSync as readdirSync$2119, existsSync as existsSync$2028, rmSync as rmSync$2128, mkdtempSync as mkdtempSync$2108, createReadStream as createReadStream$2158, writeFileSync as writeFileSync$2042, unlinkSync as unlinkSync$2044, readFileSync as readFileSync$2034, watchFile as watchFile$2194, mkdirSync as mkdirSync$2039 } from "node:fs";
|
|
8
8
|
class $PanicError extends Error {}
|
|
9
9
|
function $panic() {
|
|
10
10
|
throw new $PanicError();
|
|
@@ -96,6 +96,12 @@ const _M0FP36kazuph5reviw6server21json__parse__comments = (s) => {
|
|
|
96
96
|
} catch(e) { return []; }
|
|
97
97
|
};
|
|
98
98
|
const _M0FP36kazuph5reviw6server19json__parse__images = (s) => { try { return JSON.parse(s).summaryImages || []; } catch(e) { return []; } };
|
|
99
|
+
const _M0FP36kazuph5reviw6server28json__parse__mermaid__errors = (s) => {
|
|
100
|
+
try {
|
|
101
|
+
const obj = JSON.parse(s);
|
|
102
|
+
return (obj.mermaidErrors || []).map(e => [String(e.line || 0), e.message || ""]);
|
|
103
|
+
} catch(e) { return []; }
|
|
104
|
+
};
|
|
99
105
|
const _M0FP36kazuph5reviw6server19json__parse__string = (key, s) => { try { return JSON.parse(s)[key] || ""; } catch(e) { return ""; } };
|
|
100
106
|
const _M0FP36kazuph5reviw6server22process__stdout__write = (data) => process.stdout.write(data);
|
|
101
107
|
const _M0FP36kazuph5reviw6server11chmod__sync = (path, mode) => { try { import("node:fs").then(fs => fs.chmodSync(path, mode)); } catch(e) {} };
|
|
@@ -188,138 +194,138 @@ const _M0FP36kazuph5reviw6server14server__listen = (server, port, cb) => server.
|
|
|
188
194
|
const _M0FP36kazuph5reviw6server17server__on__error = (server, cb) => server.on("error", cb);
|
|
189
195
|
const _M0FP36kazuph5reviw6server13set__interval = (cb, ms) => setInterval(cb, ms);
|
|
190
196
|
const _M0FP095_40moonbitlang_2fcore_2fbuiltin_2eStringBuilder_24as_24_40moonbitlang_2fcore_2fbuiltin_2eLogger = { method_0: _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string, method_1: _M0IP016_24default__implP311moonbitlang4core7builtin6Logger16write__substringGRP311moonbitlang4core7builtin13StringBuilderE, method_2: _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__view, method_3: _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__char };
|
|
191
|
-
const
|
|
192
|
-
const
|
|
193
|
-
const
|
|
194
|
-
const
|
|
195
|
-
const
|
|
196
|
-
const
|
|
197
|
-
const
|
|
198
|
-
const
|
|
199
|
-
const
|
|
200
|
-
const
|
|
201
|
-
const
|
|
202
|
-
const
|
|
203
|
-
const
|
|
204
|
-
const
|
|
205
|
-
const
|
|
206
|
-
const
|
|
207
|
-
const
|
|
208
|
-
const
|
|
209
|
-
const
|
|
210
|
-
const
|
|
211
|
-
const
|
|
212
|
-
const
|
|
213
|
-
const
|
|
214
|
-
const
|
|
215
|
-
const
|
|
216
|
-
const
|
|
217
|
-
const
|
|
218
|
-
const
|
|
219
|
-
const
|
|
220
|
-
const
|
|
221
|
-
const
|
|
222
|
-
const
|
|
223
|
-
const
|
|
224
|
-
const
|
|
225
|
-
const
|
|
226
|
-
const
|
|
227
|
-
const
|
|
228
|
-
const
|
|
229
|
-
const
|
|
230
|
-
const
|
|
231
|
-
const
|
|
232
|
-
const
|
|
233
|
-
const
|
|
234
|
-
const
|
|
235
|
-
const
|
|
236
|
-
const
|
|
237
|
-
const
|
|
238
|
-
const
|
|
239
|
-
const
|
|
240
|
-
const
|
|
241
|
-
const
|
|
242
|
-
const
|
|
243
|
-
const
|
|
244
|
-
const
|
|
245
|
-
const
|
|
246
|
-
const
|
|
247
|
-
const
|
|
248
|
-
const
|
|
249
|
-
const
|
|
250
|
-
const
|
|
251
|
-
const
|
|
252
|
-
const
|
|
253
|
-
const
|
|
254
|
-
const
|
|
255
|
-
const
|
|
256
|
-
const
|
|
257
|
-
const
|
|
258
|
-
const
|
|
259
|
-
const
|
|
260
|
-
const
|
|
261
|
-
const
|
|
262
|
-
const
|
|
263
|
-
const
|
|
264
|
-
const
|
|
265
|
-
const
|
|
266
|
-
const
|
|
267
|
-
const
|
|
268
|
-
const
|
|
269
|
-
const
|
|
270
|
-
const
|
|
271
|
-
const
|
|
272
|
-
const
|
|
273
|
-
const
|
|
274
|
-
const
|
|
275
|
-
const
|
|
276
|
-
const
|
|
277
|
-
const
|
|
278
|
-
const
|
|
279
|
-
const
|
|
280
|
-
const
|
|
281
|
-
const
|
|
282
|
-
const
|
|
283
|
-
const
|
|
284
|
-
const
|
|
285
|
-
const
|
|
286
|
-
const
|
|
287
|
-
const
|
|
288
|
-
const
|
|
289
|
-
const
|
|
290
|
-
const
|
|
291
|
-
const
|
|
292
|
-
const
|
|
293
|
-
const
|
|
294
|
-
const
|
|
295
|
-
const
|
|
296
|
-
const
|
|
297
|
-
const
|
|
298
|
-
const
|
|
299
|
-
const
|
|
300
|
-
const
|
|
301
|
-
const
|
|
302
|
-
const
|
|
303
|
-
const
|
|
304
|
-
const
|
|
305
|
-
const
|
|
306
|
-
const
|
|
197
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c656 = ":";
|
|
198
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c657 = "#";
|
|
199
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c658 = "'";
|
|
200
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c659 = "\"";
|
|
201
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c660 = "\n";
|
|
202
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c661 = "[";
|
|
203
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c662 = "]";
|
|
204
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c663 = "{";
|
|
205
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c664 = "}";
|
|
206
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c665 = ",";
|
|
207
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c666 = "&";
|
|
208
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c667 = "*";
|
|
209
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c668 = "!";
|
|
210
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c669 = "|";
|
|
211
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c670 = ">";
|
|
212
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c671 = "%";
|
|
213
|
+
const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c672 = "@";
|
|
214
|
+
const _M0FP36kazuph5reviw4core32split__to__lines_2e_2abind_7c701 = "\n";
|
|
215
|
+
const _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c714 = "- ";
|
|
216
|
+
const _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c715 = " -";
|
|
217
|
+
const _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c716 = " ";
|
|
218
|
+
const _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c717 = " ";
|
|
219
|
+
const _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c719 = "- ";
|
|
220
|
+
const _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c720 = " ";
|
|
221
|
+
const _M0FP36kazuph5reviw4core39parse__reviw__questions_2e_2abind_7c724 = "- ";
|
|
222
|
+
const _M0FP36kazuph5reviw4core39parse__reviw__questions_2e_2abind_7c725 = " ";
|
|
223
|
+
const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c740 = "<details";
|
|
224
|
+
const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c741 = "<div";
|
|
225
|
+
const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c742 = "<section";
|
|
226
|
+
const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c743 = "<article";
|
|
227
|
+
const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c744 = "<aside";
|
|
228
|
+
const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c745 = "<nav";
|
|
229
|
+
const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c746 = "<header";
|
|
230
|
+
const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c747 = "<footer";
|
|
231
|
+
const _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c749 = "#";
|
|
232
|
+
const _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c750 = "```";
|
|
233
|
+
const _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c751 = ">";
|
|
234
|
+
const _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c752 = "- ";
|
|
235
|
+
const _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c753 = "* ";
|
|
236
|
+
const _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c754 = "<";
|
|
237
|
+
const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c755 = "graph ";
|
|
238
|
+
const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c756 = "flowchart ";
|
|
239
|
+
const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c757 = "sequenceDiagram";
|
|
240
|
+
const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c758 = "classDiagram";
|
|
241
|
+
const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c759 = "stateDiagram";
|
|
242
|
+
const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c760 = "erDiagram";
|
|
243
|
+
const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c761 = "journey";
|
|
244
|
+
const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c762 = "gantt";
|
|
245
|
+
const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c763 = "pie";
|
|
246
|
+
const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c764 = "gitGraph";
|
|
247
|
+
const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c765 = "mindmap";
|
|
248
|
+
const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c766 = "timeline";
|
|
249
|
+
const _M0FP36kazuph5reviw4core36is__table__separator_2e_2abind_7c767 = "|";
|
|
250
|
+
const _M0FP36kazuph5reviw4core36is__table__separator_2e_2abind_7c768 = "-";
|
|
251
|
+
const _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c781 = "|";
|
|
252
|
+
const _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c782 = "|";
|
|
253
|
+
const _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c783 = "|";
|
|
254
|
+
const _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c780 = "|";
|
|
255
|
+
const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c784 = ".mp4";
|
|
256
|
+
const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c785 = ".webm";
|
|
257
|
+
const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c786 = ".mov";
|
|
258
|
+
const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c787 = ".avi";
|
|
259
|
+
const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c788 = ".mkv";
|
|
260
|
+
const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c789 = ".m4v";
|
|
261
|
+
const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c790 = ".ogv";
|
|
262
|
+
const _M0FP36kazuph5reviw4core30render__inline_2e_2abind_7c796 = "javascript:";
|
|
263
|
+
const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c809 = "expression(";
|
|
264
|
+
const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c810 = "url(";
|
|
265
|
+
const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c811 = "-moz-binding";
|
|
266
|
+
const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c812 = "behavior:";
|
|
267
|
+
const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c813 = "behaviour:";
|
|
268
|
+
const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c814 = "javascript:";
|
|
269
|
+
const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c815 = "vbscript:";
|
|
270
|
+
const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c816 = "@import";
|
|
271
|
+
const _M0FP36kazuph5reviw4core40is__event__handler__attr_2e_2abind_7c817 = "on";
|
|
272
|
+
const _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c818 = "javascript:";
|
|
273
|
+
const _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c819 = "data:text/html";
|
|
274
|
+
const _M0FP36kazuph5reviw4core30sanitize__html_2e_2abind_7c835 = ">";
|
|
275
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c837 = "<";
|
|
276
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c839 = "<summary>";
|
|
277
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c840 = "</details>";
|
|
278
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c842 = "</details>";
|
|
279
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c843 = "<details";
|
|
280
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c847 = "#";
|
|
281
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c848 = "```";
|
|
282
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c850 = "```";
|
|
283
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c851 = ">";
|
|
284
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c853 = ">";
|
|
285
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c856 = "- ";
|
|
286
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c857 = "* ";
|
|
287
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c862 = "- ";
|
|
288
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c863 = "* ";
|
|
289
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c859 = "[ ] ";
|
|
290
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c860 = "[x] ";
|
|
291
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c861 = "[X] ";
|
|
292
|
+
const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c870 = "|";
|
|
293
|
+
const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c955 = "@@ ";
|
|
294
|
+
const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c957 = "@@ ";
|
|
295
|
+
const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c958 = "diff ";
|
|
296
|
+
const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c959 = "--- ";
|
|
297
|
+
const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c960 = "+";
|
|
298
|
+
const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c961 = "-";
|
|
299
|
+
const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c962 = " ";
|
|
300
|
+
const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c963 = "diff ";
|
|
301
|
+
const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c964 = "--- ";
|
|
302
|
+
const _M0FP36kazuph5reviw4core35strip__diff__prefix_2e_2abind_7c966 = "a/";
|
|
303
|
+
const _M0FP36kazuph5reviw4core35strip__diff__prefix_2e_2abind_7c967 = "b/";
|
|
304
|
+
const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c969 = "diff --git ";
|
|
305
|
+
const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c971 = "new file mode";
|
|
306
|
+
const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c972 = "deleted file mode";
|
|
307
|
+
const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c973 = "Binary files";
|
|
308
|
+
const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c974 = "index ";
|
|
309
|
+
const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c975 = "--- ";
|
|
310
|
+
const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c976 = "+++ ";
|
|
311
|
+
const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c977 = "--- ";
|
|
312
|
+
const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c978 = "+++ ";
|
|
307
313
|
const _M0FP36kazuph5reviw6server15active__servers = [];
|
|
308
314
|
const _M0FP36kazuph5reviw6server12all__results = [];
|
|
309
|
-
const
|
|
310
|
-
const
|
|
311
|
-
const
|
|
312
|
-
const
|
|
313
|
-
const
|
|
314
|
-
const
|
|
315
|
-
const
|
|
316
|
-
const
|
|
317
|
-
const
|
|
318
|
-
const
|
|
319
|
-
const
|
|
320
|
-
const
|
|
321
|
-
const
|
|
322
|
-
const
|
|
315
|
+
const _M0FP36kazuph5reviw6server26print__usage_2eusage_7c409 = "Usage: reviw <file...> [options]\n\nOptions:\n --port <n> Base port (default: 4989)\n --no-open Don't open browser\n -e, --encoding <enc> Force encoding (e.g. shift-jis, euc-jp)\n -h, --help Show help\n -v, --version Show version\n\nSupported formats: CSV, TSV, Markdown, Diff, Plain text\nPipe stdin for diff: git diff | reviw";
|
|
316
|
+
const _M0FP36kazuph5reviw6server28detect__mode_2e_2abind_7c455 = ".";
|
|
317
|
+
const _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c488 = "..";
|
|
318
|
+
const _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c491 = "scene_";
|
|
319
|
+
const _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c492 = ".jpg";
|
|
320
|
+
const _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c521 = "/";
|
|
321
|
+
const _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c519 = "..";
|
|
322
|
+
const _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c520 = "video/";
|
|
323
|
+
const _M0FP36kazuph5reviw6server41serve__static__file__head_2e_2abind_7c523 = "/";
|
|
324
|
+
const _M0FP36kazuph5reviw6server41serve__static__file__head_2e_2abind_7c522 = "..";
|
|
325
|
+
const _M0FP36kazuph5reviw6server31handle__request_2e_2abind_7c524 = "/video-timeline?";
|
|
326
|
+
const _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c525 = "true";
|
|
327
|
+
const _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c526 = "true";
|
|
328
|
+
const _M0FP36kazuph5reviw6server26_2ainit_2a_2e_2abind_7c536 = "-";
|
|
323
329
|
const _M0FP36kazuph5reviw6server15expected__count = _M0MP311moonbitlang4core3ref3Ref3newGiE(0);
|
|
324
330
|
const _M0FP36kazuph5reviw6server18encoding__override = _M0MP311moonbitlang4core3ref3Ref3newGsE("");
|
|
325
331
|
const _M0FP311moonbitlang4core7builtin33brute__force__find_2econstr_2f244 = 0;
|
|
@@ -1432,6 +1438,9 @@ function _M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core13ReviwQ
|
|
|
1432
1438
|
function _M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core7CommentE(self, value) {
|
|
1433
1439
|
_M0MP311moonbitlang4core7builtin7JSArray4push(self, value);
|
|
1434
1440
|
}
|
|
1441
|
+
function _M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core12MermaidErrorE(self, value) {
|
|
1442
|
+
_M0MP311moonbitlang4core7builtin7JSArray4push(self, value);
|
|
1443
|
+
}
|
|
1435
1444
|
function _M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core12ReviewResultE(self, value) {
|
|
1436
1445
|
_M0MP311moonbitlang4core7builtin7JSArray4push(self, value);
|
|
1437
1446
|
}
|
|
@@ -1947,38 +1956,38 @@ function _M0MP311moonbitlang4core3ref3Ref3newGsE(x) {
|
|
|
1947
1956
|
function _M0MP311moonbitlang4core3ref3Ref3newGiE(x) {
|
|
1948
1957
|
return { val: x };
|
|
1949
1958
|
}
|
|
1950
|
-
function _M0IP36kazuph5reviw4core8FileModeP311moonbitlang4core7builtin2Eq5equal(
|
|
1951
|
-
switch (
|
|
1959
|
+
function _M0IP36kazuph5reviw4core8FileModeP311moonbitlang4core7builtin2Eq5equal(_x_570, _x_571) {
|
|
1960
|
+
switch (_x_570) {
|
|
1952
1961
|
case 0: {
|
|
1953
|
-
if (
|
|
1962
|
+
if (_x_571 === 0) {
|
|
1954
1963
|
return true;
|
|
1955
1964
|
} else {
|
|
1956
1965
|
return false;
|
|
1957
1966
|
}
|
|
1958
1967
|
}
|
|
1959
1968
|
case 1: {
|
|
1960
|
-
if (
|
|
1969
|
+
if (_x_571 === 1) {
|
|
1961
1970
|
return true;
|
|
1962
1971
|
} else {
|
|
1963
1972
|
return false;
|
|
1964
1973
|
}
|
|
1965
1974
|
}
|
|
1966
1975
|
case 2: {
|
|
1967
|
-
if (
|
|
1976
|
+
if (_x_571 === 2) {
|
|
1968
1977
|
return true;
|
|
1969
1978
|
} else {
|
|
1970
1979
|
return false;
|
|
1971
1980
|
}
|
|
1972
1981
|
}
|
|
1973
1982
|
case 3: {
|
|
1974
|
-
if (
|
|
1983
|
+
if (_x_571 === 3) {
|
|
1975
1984
|
return true;
|
|
1976
1985
|
} else {
|
|
1977
1986
|
return false;
|
|
1978
1987
|
}
|
|
1979
1988
|
}
|
|
1980
1989
|
default: {
|
|
1981
|
-
if (
|
|
1990
|
+
if (_x_571 === 4) {
|
|
1982
1991
|
return true;
|
|
1983
1992
|
} else {
|
|
1984
1993
|
return false;
|
|
@@ -1987,7 +1996,7 @@ function _M0IP36kazuph5reviw4core8FileModeP311moonbitlang4core7builtin2Eq5equal(
|
|
|
1987
1996
|
}
|
|
1988
1997
|
}
|
|
1989
1998
|
function _M0FP36kazuph5reviw4core20yaml__escape__string(s) {
|
|
1990
|
-
const needs_quote = _M0MP311moonbitlang4core6string6String8contains(s, { str:
|
|
1999
|
+
const needs_quote = _M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c656, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c656.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c657, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c657.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c658, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c658.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c659, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c659.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c660, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c660.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c661, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c661.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c662, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c662.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c663, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c663.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c664, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c664.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c665, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c665.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c666, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c666.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c667, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c667.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c668, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c668.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c669, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c669.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c670, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c670.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c671, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c671.length }) || _M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c672, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c672.length }))))))))))))))));
|
|
1991
2000
|
if (needs_quote) {
|
|
1992
2001
|
const buf = _M0MP311moonbitlang4core7builtin13StringBuilder11new_2einner(0);
|
|
1993
2002
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__char(buf, 39);
|
|
@@ -2078,6 +2087,28 @@ function _M0FP36kazuph5reviw4core16review__to__yaml(result) {
|
|
|
2078
2087
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core20yaml__escape__string(result.answers));
|
|
2079
2088
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__char(buf, 10);
|
|
2080
2089
|
}
|
|
2090
|
+
if (result.mermaid_errors.length > 0) {
|
|
2091
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "mermaid_errors:\n");
|
|
2092
|
+
const _arr$2 = result.mermaid_errors;
|
|
2093
|
+
const _len$2 = _arr$2.length;
|
|
2094
|
+
let _tmp$2 = 0;
|
|
2095
|
+
while (true) {
|
|
2096
|
+
const _i = _tmp$2;
|
|
2097
|
+
if (_i < _len$2) {
|
|
2098
|
+
const err = _arr$2[_i];
|
|
2099
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, " - line: ");
|
|
2100
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0MP311moonbitlang4core3int3Int18to__string_2einner(err.line, 10));
|
|
2101
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__char(buf, 10);
|
|
2102
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, " error: ");
|
|
2103
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core20yaml__escape__string(err.message));
|
|
2104
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__char(buf, 10);
|
|
2105
|
+
_tmp$2 = _i + 1 | 0;
|
|
2106
|
+
continue;
|
|
2107
|
+
} else {
|
|
2108
|
+
break;
|
|
2109
|
+
}
|
|
2110
|
+
}
|
|
2111
|
+
}
|
|
2081
2112
|
return buf.val;
|
|
2082
2113
|
}
|
|
2083
2114
|
function _M0FP36kazuph5reviw4core17reviews__to__yaml(results) {
|
|
@@ -2129,6 +2160,28 @@ function _M0FP36kazuph5reviw4core17reviews__to__yaml(results) {
|
|
|
2129
2160
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core20yaml__escape__string(result.answers));
|
|
2130
2161
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__char(buf, 10);
|
|
2131
2162
|
}
|
|
2163
|
+
if (result.mermaid_errors.length > 0) {
|
|
2164
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, " mermaid_errors:\n");
|
|
2165
|
+
const _arr$2 = result.mermaid_errors;
|
|
2166
|
+
const _len$3 = _arr$2.length;
|
|
2167
|
+
let _tmp$3 = 0;
|
|
2168
|
+
while (true) {
|
|
2169
|
+
const _i$2 = _tmp$3;
|
|
2170
|
+
if (_i$2 < _len$3) {
|
|
2171
|
+
const err = _arr$2[_i$2];
|
|
2172
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, " - line: ");
|
|
2173
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0MP311moonbitlang4core3int3Int18to__string_2einner(err.line, 10));
|
|
2174
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__char(buf, 10);
|
|
2175
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, " error: ");
|
|
2176
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core20yaml__escape__string(err.message));
|
|
2177
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__char(buf, 10);
|
|
2178
|
+
_tmp$3 = _i$2 + 1 | 0;
|
|
2179
|
+
continue;
|
|
2180
|
+
} else {
|
|
2181
|
+
break;
|
|
2182
|
+
}
|
|
2183
|
+
}
|
|
2184
|
+
}
|
|
2132
2185
|
_tmp = _i + 1 | 0;
|
|
2133
2186
|
continue;
|
|
2134
2187
|
} else {
|
|
@@ -2204,7 +2257,7 @@ function _M0FP36kazuph5reviw4core16parse__int__safe(s) {
|
|
|
2204
2257
|
}
|
|
2205
2258
|
function _M0FP36kazuph5reviw4core16split__to__lines(input) {
|
|
2206
2259
|
const result = [];
|
|
2207
|
-
const _it = _M0MP311moonbitlang4core6string6String5split(input, { str:
|
|
2260
|
+
const _it = _M0MP311moonbitlang4core6string6String5split(input, { str: _M0FP36kazuph5reviw4core32split__to__lines_2e_2abind_7c701, start: 0, end: _M0FP36kazuph5reviw4core32split__to__lines_2e_2abind_7c701.length });
|
|
2208
2261
|
while (true) {
|
|
2209
2262
|
const _bind = _M0MP311moonbitlang4core7builtin4Iter4nextGRP311moonbitlang4core6string10StringViewE(_it);
|
|
2210
2263
|
if (_bind === undefined) {
|
|
@@ -2305,12 +2358,12 @@ function _M0FP36kazuph5reviw4core4trim(s) {
|
|
|
2305
2358
|
return "";
|
|
2306
2359
|
}
|
|
2307
2360
|
const buf = _M0MP311moonbitlang4core7builtin13StringBuilder11new_2einner(0);
|
|
2308
|
-
const
|
|
2309
|
-
const
|
|
2310
|
-
let _tmp =
|
|
2361
|
+
const _start453 = start;
|
|
2362
|
+
const _end454 = end;
|
|
2363
|
+
let _tmp = _start453;
|
|
2311
2364
|
while (true) {
|
|
2312
2365
|
const i = _tmp;
|
|
2313
|
-
if (i <=
|
|
2366
|
+
if (i <= _end454) {
|
|
2314
2367
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__char(buf, _M0MP311moonbitlang4core5array5Array2atGcE(chars, i));
|
|
2315
2368
|
_tmp = i + 1 | 0;
|
|
2316
2369
|
continue;
|
|
@@ -2350,10 +2403,10 @@ function _M0FP36kazuph5reviw4core23parse__single__question(lines, start, end) {
|
|
|
2350
2403
|
if (i < end) {
|
|
2351
2404
|
const line = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
2352
2405
|
const trimmed = _M0FP36kazuph5reviw4core4trim(line);
|
|
2353
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(trimmed, { str:
|
|
2406
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(trimmed, { str: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c714, start: 0, end: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c714.length }) && _M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c715, start: 0, end: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c715.length })) {
|
|
2354
2407
|
break;
|
|
2355
2408
|
}
|
|
2356
|
-
if (trimmed.length === 0 || !_M0MP311moonbitlang4core6string6String11has__prefix(line, { str:
|
|
2409
|
+
if (trimmed.length === 0 || !_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c716, start: 0, end: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c716.length }) && !_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c717, start: 0, end: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c717.length })) {
|
|
2357
2410
|
break;
|
|
2358
2411
|
}
|
|
2359
2412
|
const content_colon = _M0FP36kazuph5reviw4core15index__of__char(trimmed, 58);
|
|
@@ -2378,7 +2431,7 @@ function _M0FP36kazuph5reviw4core23parse__single__question(lines, start, end) {
|
|
|
2378
2431
|
if (i < end) {
|
|
2379
2432
|
const opt_line = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
2380
2433
|
const opt_trimmed = _M0FP36kazuph5reviw4core4trim(opt_line);
|
|
2381
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(opt_trimmed, { str:
|
|
2434
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(opt_trimmed, { str: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c719, start: 0, end: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c719.length }) && _M0MP311moonbitlang4core6string6String11has__prefix(opt_line, { str: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c720, start: 0, end: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c720.length })) {
|
|
2382
2435
|
_M0MP311moonbitlang4core5array5Array4pushGsE(options, _M0FP36kazuph5reviw4core4trim(_M0FP36kazuph5reviw4core11safe__slice(opt_trimmed, 2)));
|
|
2383
2436
|
i = i + 1 | 0;
|
|
2384
2437
|
} else {
|
|
@@ -2418,12 +2471,12 @@ function _M0FP36kazuph5reviw4core23parse__reviw__questions(lines, start, end) {
|
|
|
2418
2471
|
if (i < end) {
|
|
2419
2472
|
const item_line = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
2420
2473
|
const trimmed = _M0FP36kazuph5reviw4core4trim(item_line);
|
|
2421
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(trimmed, { str:
|
|
2474
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(trimmed, { str: _M0FP36kazuph5reviw4core39parse__reviw__questions_2e_2abind_7c724, start: 0, end: _M0FP36kazuph5reviw4core39parse__reviw__questions_2e_2abind_7c724.length })) {
|
|
2422
2475
|
const q = _M0FP36kazuph5reviw4core23parse__single__question(lines, i, end);
|
|
2423
2476
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core13ReviwQuestionE(questions, q._0);
|
|
2424
2477
|
i = q._1;
|
|
2425
2478
|
} else {
|
|
2426
|
-
if (trimmed.length === 0 || !_M0MP311moonbitlang4core6string6String11has__prefix(item_line, { str:
|
|
2479
|
+
if (trimmed.length === 0 || !_M0MP311moonbitlang4core6string6String11has__prefix(item_line, { str: _M0FP36kazuph5reviw4core39parse__reviw__questions_2e_2abind_7c725, start: 0, end: _M0FP36kazuph5reviw4core39parse__reviw__questions_2e_2abind_7c725.length })) {
|
|
2427
2480
|
break;
|
|
2428
2481
|
} else {
|
|
2429
2482
|
i = i + 1 | 0;
|
|
@@ -2573,7 +2626,7 @@ function _M0FP36kazuph5reviw4core20is__horizontal__rule(line) {
|
|
|
2573
2626
|
}
|
|
2574
2627
|
function _M0FP36kazuph5reviw4core22is__html__block__start(line) {
|
|
2575
2628
|
const t = _M0FP36kazuph5reviw4core4trim(line);
|
|
2576
|
-
return _M0MP311moonbitlang4core6string6String11has__prefix(t, { str:
|
|
2629
|
+
return _M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c740, start: 0, end: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c740.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c741, start: 0, end: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c741.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c742, start: 0, end: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c742.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c743, start: 0, end: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c743.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c744, start: 0, end: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c744.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c745, start: 0, end: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c745.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c746, start: 0, end: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c746.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c747, start: 0, end: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c747.length })))))));
|
|
2577
2630
|
}
|
|
2578
2631
|
function _M0FP36kazuph5reviw4core23is__ordered__list__item(line) {
|
|
2579
2632
|
const chars = _M0MP311moonbitlang4core6string6String9to__array(line);
|
|
@@ -2592,15 +2645,15 @@ function _M0FP36kazuph5reviw4core23is__ordered__list__item(line) {
|
|
|
2592
2645
|
return i < (chars.length - 1 | 0) && (_M0MP311moonbitlang4core5array5Array2atGcE(chars, i) === 46 && _M0MP311moonbitlang4core5array5Array2atGcE(chars, i + 1 | 0) === 32);
|
|
2593
2646
|
}
|
|
2594
2647
|
function _M0FP36kazuph5reviw4core16is__block__start(line) {
|
|
2595
|
-
return _M0MP311moonbitlang4core6string6String11has__prefix(line, { str:
|
|
2648
|
+
return _M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c749, start: 0, end: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c749.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c750, start: 0, end: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c750.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c751, start: 0, end: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c751.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c752, start: 0, end: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c752.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c753, start: 0, end: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c753.length }) || (_M0FP36kazuph5reviw4core23is__ordered__list__item(line) || (_M0FP36kazuph5reviw4core20is__horizontal__rule(line) || _M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c754, start: 0, end: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c754.length }) && _M0FP36kazuph5reviw4core22is__html__block__start(line)))))));
|
|
2596
2649
|
}
|
|
2597
2650
|
function _M0FP36kazuph5reviw4core20is__mermaid__content(text) {
|
|
2598
2651
|
const t = _M0FP36kazuph5reviw4core4trim(text);
|
|
2599
|
-
return _M0MP311moonbitlang4core6string6String11has__prefix(t, { str:
|
|
2652
|
+
return _M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c755, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c755.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c756, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c756.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c757, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c757.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c758, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c758.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c759, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c759.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c760, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c760.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c761, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c761.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c762, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c762.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c763, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c763.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c764, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c764.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c765, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c765.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c766, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c766.length })))))))))));
|
|
2600
2653
|
}
|
|
2601
2654
|
function _M0FP36kazuph5reviw4core20is__table__separator(line) {
|
|
2602
2655
|
const t = _M0FP36kazuph5reviw4core4trim(line);
|
|
2603
|
-
if (!_M0MP311moonbitlang4core6string6String8contains(t, { str:
|
|
2656
|
+
if (!_M0MP311moonbitlang4core6string6String8contains(t, { str: _M0FP36kazuph5reviw4core36is__table__separator_2e_2abind_7c767, start: 0, end: _M0FP36kazuph5reviw4core36is__table__separator_2e_2abind_7c767.length }) || !_M0MP311moonbitlang4core6string6String8contains(t, { str: _M0FP36kazuph5reviw4core36is__table__separator_2e_2abind_7c768, start: 0, end: _M0FP36kazuph5reviw4core36is__table__separator_2e_2abind_7c768.length })) {
|
|
2604
2657
|
return false;
|
|
2605
2658
|
}
|
|
2606
2659
|
const chars = _M0MP311moonbitlang4core6string6String9to__array(t);
|
|
@@ -2655,8 +2708,8 @@ function _M0FP36kazuph5reviw4core18make__heading__key(text, counter) {
|
|
|
2655
2708
|
function _M0FP36kazuph5reviw4core17parse__table__row(line) {
|
|
2656
2709
|
const result = [];
|
|
2657
2710
|
const t = _M0FP36kazuph5reviw4core4trim(line);
|
|
2658
|
-
const inner = _M0MP311moonbitlang4core6string6String11has__prefix(t, { str:
|
|
2659
|
-
const _it = _M0MP311moonbitlang4core6string6String5split(inner, { str:
|
|
2711
|
+
const inner = _M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c781, start: 0, end: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c781.length }) && _M0MP311moonbitlang4core6string6String11has__suffix(t, { str: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c782, start: 0, end: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c782.length }) ? _M0FP36kazuph5reviw4core18safe__slice__range(t, 1, t.length - 1 | 0) : _M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c783, start: 0, end: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c783.length }) ? _M0FP36kazuph5reviw4core11safe__slice(t, 1) : t;
|
|
2712
|
+
const _it = _M0MP311moonbitlang4core6string6String5split(inner, { str: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c780, start: 0, end: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c780.length });
|
|
2660
2713
|
while (true) {
|
|
2661
2714
|
const _bind = _M0MP311moonbitlang4core7builtin4Iter4nextGRP311moonbitlang4core6string10StringViewE(_it);
|
|
2662
2715
|
if (_bind === undefined) {
|
|
@@ -2672,7 +2725,7 @@ function _M0FP36kazuph5reviw4core17parse__table__row(line) {
|
|
|
2672
2725
|
}
|
|
2673
2726
|
function _M0FP36kazuph5reviw4core14is__video__url(url) {
|
|
2674
2727
|
const lower = _M0MP311moonbitlang4core6string6String9to__lower(url);
|
|
2675
|
-
return _M0MP311moonbitlang4core6string6String11has__suffix(lower, { str:
|
|
2728
|
+
return _M0MP311moonbitlang4core6string6String11has__suffix(lower, { str: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c784, start: 0, end: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c784.length }) || (_M0MP311moonbitlang4core6string6String11has__suffix(lower, { str: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c785, start: 0, end: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c785.length }) || (_M0MP311moonbitlang4core6string6String11has__suffix(lower, { str: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c786, start: 0, end: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c786.length }) || (_M0MP311moonbitlang4core6string6String11has__suffix(lower, { str: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c787, start: 0, end: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c787.length }) || (_M0MP311moonbitlang4core6string6String11has__suffix(lower, { str: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c788, start: 0, end: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c788.length }) || (_M0MP311moonbitlang4core6string6String11has__suffix(lower, { str: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c789, start: 0, end: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c789.length }) || _M0MP311moonbitlang4core6string6String11has__suffix(lower, { str: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c790, start: 0, end: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c790.length }))))));
|
|
2676
2729
|
}
|
|
2677
2730
|
function _M0FP36kazuph5reviw4core14render__inline(text) {
|
|
2678
2731
|
const chars = _M0MP311moonbitlang4core6string6String9to__array(text);
|
|
@@ -2771,7 +2824,7 @@ function _M0FP36kazuph5reviw4core14render__inline(text) {
|
|
|
2771
2824
|
const link_text = _M0FP36kazuph5reviw4core18safe__slice__range(text, text_start, text_end);
|
|
2772
2825
|
const link_url = _M0FP36kazuph5reviw4core18safe__slice__range(text, url_start, url_end);
|
|
2773
2826
|
const lower_url = _M0MP311moonbitlang4core6string6String9to__lower(link_url);
|
|
2774
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(lower_url, { str:
|
|
2827
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(lower_url, { str: _M0FP36kazuph5reviw4core30render__inline_2e_2abind_7c796, start: 0, end: _M0FP36kazuph5reviw4core30render__inline_2e_2abind_7c796.length })) {
|
|
2775
2828
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core12escape__html(link_text));
|
|
2776
2829
|
} else {
|
|
2777
2830
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<a href=\"");
|
|
@@ -2968,18 +3021,18 @@ function _M0FP36kazuph5reviw4core17is__allowed__attr(name) {
|
|
|
2968
3021
|
}
|
|
2969
3022
|
function _M0FP36kazuph5reviw4core18is__dangerous__css(value) {
|
|
2970
3023
|
const lower = _M0MP311moonbitlang4core6string6String9to__lower(value);
|
|
2971
|
-
return _M0MP311moonbitlang4core6string6String8contains(lower, { str:
|
|
3024
|
+
return _M0MP311moonbitlang4core6string6String8contains(lower, { str: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c809, start: 0, end: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c809.length }) || (_M0MP311moonbitlang4core6string6String8contains(lower, { str: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c810, start: 0, end: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c810.length }) || (_M0MP311moonbitlang4core6string6String8contains(lower, { str: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c811, start: 0, end: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c811.length }) || (_M0MP311moonbitlang4core6string6String8contains(lower, { str: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c812, start: 0, end: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c812.length }) || (_M0MP311moonbitlang4core6string6String8contains(lower, { str: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c813, start: 0, end: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c813.length }) || (_M0MP311moonbitlang4core6string6String8contains(lower, { str: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c814, start: 0, end: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c814.length }) || (_M0MP311moonbitlang4core6string6String8contains(lower, { str: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c815, start: 0, end: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c815.length }) || _M0MP311moonbitlang4core6string6String8contains(lower, { str: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c816, start: 0, end: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c816.length })))))));
|
|
2972
3025
|
}
|
|
2973
3026
|
function _M0FP36kazuph5reviw4core24is__event__handler__attr(name) {
|
|
2974
|
-
return _M0MP311moonbitlang4core6string6String11has__prefix(name, { str:
|
|
3027
|
+
return _M0MP311moonbitlang4core6string6String11has__prefix(name, { str: _M0FP36kazuph5reviw4core40is__event__handler__attr_2e_2abind_7c817, start: 0, end: _M0FP36kazuph5reviw4core40is__event__handler__attr_2e_2abind_7c817.length });
|
|
2975
3028
|
}
|
|
2976
3029
|
function _M0FP36kazuph5reviw4core13is__safe__url(url) {
|
|
2977
3030
|
const lower = _M0MP311moonbitlang4core6string6String9to__lower(url);
|
|
2978
3031
|
const trimmed = _M0FP36kazuph5reviw4core4trim(lower);
|
|
2979
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(trimmed, { str:
|
|
3032
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(trimmed, { str: _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c818, start: 0, end: _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c818.length })) {
|
|
2980
3033
|
return false;
|
|
2981
3034
|
}
|
|
2982
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(trimmed, { str:
|
|
3035
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(trimmed, { str: _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c819, start: 0, end: _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c819.length })) {
|
|
2983
3036
|
return false;
|
|
2984
3037
|
}
|
|
2985
3038
|
return true;
|
|
@@ -3318,7 +3371,7 @@ function _M0FP36kazuph5reviw4core14sanitize__html(input) {
|
|
|
3318
3371
|
if (!_M0FP36kazuph5reviw4core16is__allowed__tag(tag_name) && tag_name.length > 0) {
|
|
3319
3372
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<");
|
|
3320
3373
|
const tag_content = _M0FP36kazuph5reviw4core18safe__slice__range(input, tag_start + 1 | 0, tag_end);
|
|
3321
|
-
const trimmed_content = _M0MP311moonbitlang4core6string6String11has__suffix(tag_content, { str:
|
|
3374
|
+
const trimmed_content = _M0MP311moonbitlang4core6string6String11has__suffix(tag_content, { str: _M0FP36kazuph5reviw4core30sanitize__html_2e_2abind_7c835, start: 0, end: _M0FP36kazuph5reviw4core30sanitize__html_2e_2abind_7c835.length }) ? _M0FP36kazuph5reviw4core18safe__slice__range(tag_content, 0, tag_content.length - 1 | 0) : tag_content;
|
|
3322
3375
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core12escape__html(trimmed_content));
|
|
3323
3376
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, ">");
|
|
3324
3377
|
i = tag_end;
|
|
@@ -3362,7 +3415,7 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3362
3415
|
i = i + 1 | 0;
|
|
3363
3416
|
continue;
|
|
3364
3417
|
}
|
|
3365
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str:
|
|
3418
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c837, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c837.length }) && _M0FP36kazuph5reviw4core22is__html__block__start(line)) {
|
|
3366
3419
|
const tag_name = _M0FP36kazuph5reviw4core24extract__html__tag__name(line);
|
|
3367
3420
|
if (tag_name === "details") {
|
|
3368
3421
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<details>\n");
|
|
@@ -3370,13 +3423,13 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3370
3423
|
while (true) {
|
|
3371
3424
|
if (i < len) {
|
|
3372
3425
|
const current = _M0FP36kazuph5reviw4core4trim(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i));
|
|
3373
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(current, { str:
|
|
3426
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(current, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c839, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c839.length })) {
|
|
3374
3427
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core14sanitize__html(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i)));
|
|
3375
3428
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "\n");
|
|
3376
3429
|
i = i + 1 | 0;
|
|
3377
3430
|
break;
|
|
3378
3431
|
} else {
|
|
3379
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(current, { str:
|
|
3432
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(current, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c840, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c840.length })) {
|
|
3380
3433
|
break;
|
|
3381
3434
|
}
|
|
3382
3435
|
}
|
|
@@ -3391,14 +3444,14 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3391
3444
|
while (true) {
|
|
3392
3445
|
if (i < len && depth > 0) {
|
|
3393
3446
|
const current = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
3394
|
-
if (_M0MP311moonbitlang4core6string6String8contains(current, { str:
|
|
3447
|
+
if (_M0MP311moonbitlang4core6string6String8contains(current, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c842, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c842.length })) {
|
|
3395
3448
|
depth = depth - 1 | 0;
|
|
3396
3449
|
if (depth === 0) {
|
|
3397
3450
|
i = i + 1 | 0;
|
|
3398
3451
|
break;
|
|
3399
3452
|
}
|
|
3400
3453
|
}
|
|
3401
|
-
if (_M0MP311moonbitlang4core6string6String8contains(current, { str:
|
|
3454
|
+
if (_M0MP311moonbitlang4core6string6String8contains(current, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c843, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c843.length })) {
|
|
3402
3455
|
depth = depth + 1 | 0;
|
|
3403
3456
|
}
|
|
3404
3457
|
_M0MP311moonbitlang4core5array5Array4pushGsE(inner_lines, current);
|
|
@@ -3443,7 +3496,7 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3443
3496
|
}
|
|
3444
3497
|
continue;
|
|
3445
3498
|
}
|
|
3446
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str:
|
|
3499
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c847, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c847.length })) {
|
|
3447
3500
|
const level = _M0FP36kazuph5reviw4core21count__heading__level(line);
|
|
3448
3501
|
if (level >= 1 && level <= 6) {
|
|
3449
3502
|
const content = _M0FP36kazuph5reviw4core4trim(_M0FP36kazuph5reviw4core11safe__slice(line, level + 1 | 0));
|
|
@@ -3469,13 +3522,14 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3469
3522
|
i = i + 1 | 0;
|
|
3470
3523
|
continue;
|
|
3471
3524
|
}
|
|
3472
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str:
|
|
3525
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c848, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c848.length })) {
|
|
3473
3526
|
const lang = _M0FP36kazuph5reviw4core4trim(_M0FP36kazuph5reviw4core11safe__slice(line, 3));
|
|
3527
|
+
const code_block_start_line = i + 1 | 0;
|
|
3474
3528
|
i = i + 1 | 0;
|
|
3475
3529
|
const code_buf = _M0MP311moonbitlang4core7builtin13StringBuilder11new_2einner(0);
|
|
3476
3530
|
let code_first = true;
|
|
3477
3531
|
while (true) {
|
|
3478
|
-
if (i < len && !_M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str:
|
|
3532
|
+
if (i < len && !_M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c850, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c850.length })) {
|
|
3479
3533
|
if (!code_first) {
|
|
3480
3534
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(code_buf, "\n");
|
|
3481
3535
|
}
|
|
@@ -3494,6 +3548,8 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3494
3548
|
if (lang === "mermaid" || _M0FP36kazuph5reviw4core20is__mermaid__content(code_text)) {
|
|
3495
3549
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<div class=\"mermaid-container\"><div class=\"mermaid\" data-source=\"");
|
|
3496
3550
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core12escape__html(code_text));
|
|
3551
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "\" data-source-line=\"");
|
|
3552
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0MP311moonbitlang4core3int3Int18to__string_2einner(code_block_start_line, 10));
|
|
3497
3553
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "\">");
|
|
3498
3554
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core12escape__html(code_text));
|
|
3499
3555
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</div><button class=\"mermaid-fullscreen-btn\" title=\"Fullscreen\">⛶</button></div>\n");
|
|
@@ -3510,10 +3566,10 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3510
3566
|
}
|
|
3511
3567
|
continue;
|
|
3512
3568
|
}
|
|
3513
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str:
|
|
3569
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c851, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c851.length })) {
|
|
3514
3570
|
const quote_lines = [];
|
|
3515
3571
|
while (true) {
|
|
3516
|
-
if (i < len && _M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str:
|
|
3572
|
+
if (i < len && _M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c853, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c853.length })) {
|
|
3517
3573
|
const content = _M0FP36kazuph5reviw4core4trim(_M0FP36kazuph5reviw4core11safe__slice(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), 1));
|
|
3518
3574
|
_M0MP311moonbitlang4core5array5Array4pushGsE(quote_lines, content);
|
|
3519
3575
|
i = i + 1 | 0;
|
|
@@ -3541,16 +3597,16 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3541
3597
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</blockquote>\n");
|
|
3542
3598
|
continue;
|
|
3543
3599
|
}
|
|
3544
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str:
|
|
3600
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c856, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c856.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c857, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c857.length })) {
|
|
3545
3601
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<ul>\n");
|
|
3546
3602
|
while (true) {
|
|
3547
|
-
if (i < len && (_M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str:
|
|
3603
|
+
if (i < len && (_M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c862, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c862.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c863, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c863.length }))) {
|
|
3548
3604
|
const item_text = _M0FP36kazuph5reviw4core11safe__slice(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), 2);
|
|
3549
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(item_text, { str:
|
|
3605
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(item_text, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c859, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c859.length })) {
|
|
3550
3606
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<li class=\"task-list-item\"><input type=\"checkbox\" disabled /> ");
|
|
3551
3607
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core14render__inline(_M0FP36kazuph5reviw4core11safe__slice(item_text, 4)));
|
|
3552
3608
|
} else {
|
|
3553
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(item_text, { str:
|
|
3609
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(item_text, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c860, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c860.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(item_text, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c861, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c861.length })) {
|
|
3554
3610
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<li class=\"task-list-item\"><input type=\"checkbox\" checked disabled /> ");
|
|
3555
3611
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core14render__inline(_M0FP36kazuph5reviw4core11safe__slice(item_text, 4)));
|
|
3556
3612
|
} else {
|
|
@@ -3607,7 +3663,7 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
|
|
|
3607
3663
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</tr>\n</thead>\n<tbody>\n");
|
|
3608
3664
|
i = i + 2 | 0;
|
|
3609
3665
|
while (true) {
|
|
3610
|
-
if (i < len && _M0MP311moonbitlang4core6string6String8contains(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str:
|
|
3666
|
+
if (i < len && _M0MP311moonbitlang4core6string6String8contains(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c870, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c870.length })) {
|
|
3611
3667
|
const cells = _M0FP36kazuph5reviw4core17parse__table__row(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i));
|
|
3612
3668
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<tr>\n");
|
|
3613
3669
|
const _len$2 = cells.length;
|
|
@@ -3674,11 +3730,11 @@ function _M0FP36kazuph5reviw4core15parse__markdown(input) {
|
|
|
3674
3730
|
let content_start = 0;
|
|
3675
3731
|
if (lines.length > 0 && _M0MP311moonbitlang4core5array5Array2atGsE(lines, 0) === "---") {
|
|
3676
3732
|
let end_idx = -1;
|
|
3677
|
-
const
|
|
3733
|
+
const _end472 = lines.length;
|
|
3678
3734
|
let _tmp = 1;
|
|
3679
3735
|
while (true) {
|
|
3680
3736
|
const i = _tmp;
|
|
3681
|
-
if (i <
|
|
3737
|
+
if (i < _end472) {
|
|
3682
3738
|
if (_M0MP311moonbitlang4core5array5Array2atGsE(lines, i) === "---") {
|
|
3683
3739
|
end_idx = i;
|
|
3684
3740
|
break;
|
|
@@ -3690,11 +3746,11 @@ function _M0FP36kazuph5reviw4core15parse__markdown(input) {
|
|
|
3690
3746
|
}
|
|
3691
3747
|
}
|
|
3692
3748
|
if (end_idx > 0) {
|
|
3693
|
-
const
|
|
3749
|
+
const _end477 = end_idx;
|
|
3694
3750
|
let _tmp$2 = 1;
|
|
3695
3751
|
while (true) {
|
|
3696
3752
|
const i = _tmp$2;
|
|
3697
|
-
if (i <
|
|
3753
|
+
if (i < _end477) {
|
|
3698
3754
|
const line = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
3699
3755
|
const colon = _M0FP36kazuph5reviw4core15index__of__char(line, 58);
|
|
3700
3756
|
if (colon >= 0) {
|
|
@@ -3714,12 +3770,12 @@ function _M0FP36kazuph5reviw4core15parse__markdown(input) {
|
|
|
3714
3770
|
}
|
|
3715
3771
|
}
|
|
3716
3772
|
const content_lines = [];
|
|
3717
|
-
const
|
|
3718
|
-
const
|
|
3719
|
-
let _tmp =
|
|
3773
|
+
const _start486 = content_start;
|
|
3774
|
+
const _end487 = lines.length;
|
|
3775
|
+
let _tmp = _start486;
|
|
3720
3776
|
while (true) {
|
|
3721
3777
|
const i = _tmp;
|
|
3722
|
-
if (i <
|
|
3778
|
+
if (i < _end487) {
|
|
3723
3779
|
_M0MP311moonbitlang4core5array5Array4pushGsE(content_lines, _M0MP311moonbitlang4core5array5Array2atGsE(lines, i));
|
|
3724
3780
|
_tmp = i + 1 | 0;
|
|
3725
3781
|
continue;
|
|
@@ -3869,7 +3925,7 @@ function _M0FP36kazuph5reviw4core26build__page__start_2einner(buf, filename, fil
|
|
|
3869
3925
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11/build/styles/github.min.css\" id=\"hljs-theme-light\">");
|
|
3870
3926
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<script src=\"https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11/build/highlight.min.js\"></script>");
|
|
3871
3927
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<style>");
|
|
3872
|
-
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "/* Dark theme (default) */\n:root {\n color-scheme: dark;\n --bg: #0f172a;\n --bg-gradient: radial-gradient(circle at 20% 20%, #1e293b 0%, #0b1224 35%, #0b1224 60%, #0f172a 100%);\n --panel: #111827;\n --panel-alpha: rgba(15, 23, 42, 0.9);\n --panel-solid: #0b1224;\n --card-bg: rgba(11, 18, 36, 0.95);\n --input-bg: rgba(15, 23, 42, 0.6);\n --border: #1f2937;\n --accent: #60a5fa;\n --accent-2: #f472b6;\n --text: #e5e7eb;\n --text-inverse: #0b1224;\n --muted: #94a3b8;\n --comment: #0f766e;\n --badge: #22c55e;\n --table-bg: rgba(15, 23, 42, 0.7);\n --row-even: rgba(30, 41, 59, 0.4);\n --row-odd: rgba(15, 23, 42, 0.2);\n --selected-bg: rgba(96,165,250,0.15);\n --hover-bg: rgba(96,165,250,0.08);\n --shadow-color: rgba(0,0,0,0.35);\n --code-bg: #1e293b;\n --error: #dc3545;\n}\n/* Light theme */\n[data-theme=\"light\"] {\n color-scheme: light;\n --bg: #f8fafc;\n --bg-gradient: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);\n --panel: #ffffff;\n --panel-alpha: rgba(255, 255, 255, 0.95);\n --panel-solid: #ffffff;\n --card-bg: rgba(255, 255, 255, 0.98);\n --input-bg: #f1f5f9;\n --border: #e2e8f0;\n --accent: #3b82f6;\n --accent-2: #ec4899;\n --text: #1e293b;\n --text-inverse: #ffffff;\n --muted: #64748b;\n --comment: #14b8a6;\n --badge: #22c55e;\n --table-bg: #ffffff;\n --row-even: #f8fafc;\n --row-odd: #ffffff;\n --selected-bg: rgba(59,130,246,0.12);\n --hover-bg: rgba(59,130,246,0.06);\n --shadow-color: rgba(0,0,0,0.1);\n --code-bg: #f1f5f9;\n --error: #dc3545;\n}\n* { box-sizing: border-box; }\nbody {\n margin: 0;\n font-family: \"Inter\", \"Hiragino Sans\", system-ui, -apple-system, sans-serif;\n background: var(--bg-gradient);\n color: var(--text);\n min-height: 100vh;\n transition: background 200ms ease, color 200ms ease;\n}\nheader {\n position: sticky;\n top: 0;\n z-index: 5;\n padding: 12px 16px;\n background: var(--panel-alpha);\n backdrop-filter: blur(8px);\n border-bottom: 1px solid var(--border);\n display: flex;\n gap: 12px;\n align-items: center;\n justify-content: space-between;\n transition: background 200ms ease, border-color 200ms ease;\n}\nheader .meta { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }\nheader .actions { display: flex; gap: 8px; align-items: center; }\nheader h1 { display: flex; flex-direction: column; margin: 0; line-height: 1.3; }\nheader h1 .title-path { font-size: 11px; font-weight: 400; color: var(--muted); }\nheader h1 .title-file { font-size: 16px; font-weight: 700; }\nheader .badge {\n background: var(--selected-bg);\n color: var(--text);\n padding: 6px 10px;\n border-radius: 8px;\n font-size: 12px;\n border: 1px solid var(--border);\n}\nheader button {\n background: linear-gradient(135deg, #38bdf8, #6366f1);\n color: var(--text-inverse);\n border: none;\n border-radius: 10px;\n padding: 10px 14px;\n font-weight: 700;\n cursor: pointer;\n box-shadow: 0 10px 30px var(--shadow-color);\n transition: transform 120ms ease, box-shadow 120ms ease;\n}\nheader button:hover { transform: translateY(-1px); box-shadow: 0 16px 36px var(--shadow-color); }\nheader button:active { transform: translateY(0); }\n/* Theme toggle button */\n.theme-toggle {\n background: var(--selected-bg);\n color: var(--text);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 8px 10px;\n font-size: 16px;\n cursor: pointer;\n transition: background 120ms ease, transform 120ms ease;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n height: 38px;\n}\n.theme-toggle:hover { background: var(--hover-bg); transform: scale(1.05); }\n\n.wrap { padding: 12px 16px 12px; }\n.toolbar {\n display: flex;\n gap: 12px;\n align-items: center;\n flex-wrap: wrap;\n margin: 10px 0 12px;\n color: var(--muted);\n font-size: 13px;\n}\n.toolbar button {\n background: rgba(96,165,250,0.12);\n color: var(--text);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 8px 10px;\n font-size: 13px;\n cursor: pointer;\n}\n.toolbar button:hover { background: rgba(96,165,250,0.2); }\n\n.table-box {\n background: var(--table-bg);\n border: 1px solid var(--border);\n border-radius: 12px;\n overflow: auto;\n max-height: calc(100vh - 110px);\n box-shadow: 0 20px 50px var(--shadow-color);\n transition: background 200ms ease, border-color 200ms ease;\n}\ntable {\n border-collapse: collapse;\n width: 100%;\n min-width: 540px;\n table-layout: fixed;\n}\nthead th {\n position: sticky;\n top: 0;\n z-index: 3;\n background: var(--panel-solid) !important;\n color: var(--muted);\n font-size: 12px;\n text-align: center;\n padding: 0;\n border-bottom: 1px solid var(--border);\n border-right: 1px solid var(--border);\n white-space: nowrap;\n transition: background 200ms ease;\n}\nthead th:not(.selected) {\n background: var(--panel-solid) !important;\n}\nthead th:first-child,\ntbody th {\n width: 28px;\n min-width: 28px;\n max-width: 28px;\n}\nthead th .th-inner {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n padding: 8px 6px;\n position: relative;\n height: 100%;\n}\nthead th.filtered .th-inner {\n background: linear-gradient(135deg, rgba(96,165,250,0.18), rgba(34,197,94,0.18));\n color: #e5e7eb;\n border-radius: 6px;\n box-shadow: inset 0 -1px 0 rgba(255,255,255,0.05);\n}\nthead th.filtered .th-inner::after {\n content: 'FILTER';\n font-size: 10px;\n color: #c7d2fe;\n background: rgba(99,102,241,0.24);\n border: 1px solid rgba(99,102,241,0.45);\n padding: 1px 6px;\n border-radius: 999px;\n position: absolute;\n bottom: 4px;\n right: 6px;\n}\n.resizer {\n position: absolute;\n right: 2px;\n top: 0;\n width: 6px;\n height: 100%;\n cursor: col-resize;\n user-select: none;\n touch-action: none;\n opacity: 0.6;\n}\n.resizer::after {\n content: '';\n position: absolute;\n top: 10%;\n bottom: 10%;\n left: 2px;\n width: 2px;\n background: rgba(96,165,250,0.6);\n border-radius: 2px;\n opacity: 0;\n transition: opacity 120ms ease;\n}\nthead th:hover .resizer::after { opacity: 1; }\n\n.freeze {\n position: sticky !important;\n background: var(--panel-solid);\n z-index: 4;\n}\n.freeze-row {\n position: sticky !important;\n background: var(--panel-solid);\n}\n.freeze-row.freeze {\n z-index: 6;\n}\nth.freeze-row {\n z-index: 6;\n}\ntbody th {\n position: sticky;\n left: 0;\n z-index: 2;\n background: var(--panel-solid);\n color: var(--muted);\n text-align: right;\n padding: 8px 10px;\n font-size: 12px;\n border-right: 1px solid var(--border);\n border-bottom: 1px solid var(--border);\n transition: background 200ms ease;\n}\ntd {\n padding: 10px 10px;\n border-bottom: 1px solid var(--border);\n border-right: 1px solid var(--border);\n background: var(--row-odd);\n color: var(--text);\n font-size: 13px;\n line-height: 1.45;\n cursor: pointer;\n transition: background 120ms ease, box-shadow 120ms ease;\n position: relative;\n white-space: pre-wrap;\n word-break: break-word;\n max-width: 320px;\n}\ntr:nth-child(even) td:not(.selected):not(.has-comment) { background: var(--row-even); }\ntd:hover:not(.selected) { background: var(--hover-bg); box-shadow: inset 0 0 0 1px rgba(96,165,250,0.25); }\ntd.has-comment { background: rgba(34,197,94,0.12); box-shadow: inset 0 0 0 1px rgba(34,197,94,0.35); }\ntd.selected, tbody th.selected { background: rgba(99,102,241,0.22) !important; box-shadow: inset 0 0 0 1px rgba(99,102,241,0.45); }\n.preview-highlight { background: rgba(167,139,250,0.18) !important; box-shadow: inset 0 0 0 2px rgba(139,92,246,0.35); border-radius: 4px; transition: background 150ms ease, box-shadow 150ms ease; padding-left: 8px; margin-left: -8px; }\nthead th.selected { background: #c7d2fe !important; box-shadow: inset 0 0 0 1px rgba(99,102,241,0.45); }\n[data-theme=\"dark\"] thead th.selected { background: #3730a3 !important; }\nbody.dragging { user-select: none; cursor: crosshair; }\nbody.dragging td, body.dragging tbody th { cursor: crosshair; }\ntbody th { cursor: pointer; }\ntd .dot {\n position: absolute;\n right: 6px;\n top: 6px;\n width: 8px;\n height: 8px;\n border-radius: 99px;\n background: var(--badge);\n box-shadow: 0 0 0 4px rgba(34,197,94,0.15);\n}\n.floating {\n position: absolute;\n z-index: 10;\n background: var(--panel-solid);\n border: 1px solid var(--border);\n border-radius: 12px;\n padding: 12px;\n width: min(420px, calc(100vw - 32px));\n box-shadow: 0 20px 40px var(--shadow-color);\n display: none;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.floating header {\n position: static;\n background: transparent;\n backdrop-filter: none;\n border: none;\n padding: 0 0 8px 0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.floating h2 { font-size: 14px; margin: 0; color: var(--text); }\n.floating button {\n margin-left: 8px;\n background: var(--accent);\n color: var(--text-inverse);\n border: 1px solid var(--accent);\n padding: 6px 10px;\n border-radius: 8px;\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n transition: background 120ms ease, opacity 120ms ease;\n}\n.floating button.icon-only {\n width: 32px;\n height: 32px;\n padding: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n line-height: 1;\n}\n.floating button:hover { opacity: 0.85; }\n.floating textarea {\n width: 100%;\n min-height: 110px;\n resize: vertical;\n border-radius: 8px;\n border: 1px solid var(--border);\n background: var(--input-bg);\n color: var(--text);\n padding: 10px;\n font-size: 13px;\n line-height: 1.4;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.floating textarea:focus {\n outline: none;\n border-color: var(--accent);\n}\n.floating .actions {\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n margin-top: 10px;\n}\n.floating .actions button.primary {\n background: linear-gradient(135deg, #22c55e, #16a34a);\n color: var(--text-inverse);\n border: none;\n font-weight: 700;\n box-shadow: 0 10px 30px rgba(22,163,74,0.35);\n}\n.comment-list {\n position: fixed;\n right: 14px;\n bottom: 14px;\n width: 320px;\n max-height: 60vh;\n overflow: auto;\n border: 1px solid var(--border);\n border-radius: 12px;\n background: var(--card-bg);\n box-shadow: 0 18px 40px var(--shadow-color);\n padding: 12px;\n backdrop-filter: blur(6px);\n transition: opacity 120ms ease, transform 120ms ease, background 200ms ease;\n}\n.comment-list h3 { margin: 0 0 8px 0; font-size: 13px; color: var(--muted); }\n.comment-list ol {\n margin: 0;\n padding-left: 18px;\n color: var(--text);\n font-size: 13px;\n line-height: 1.45;\n}\n.comment-list li { margin-bottom: 6px; }\n.comment-list .hint { color: var(--muted); font-size: 12px; }\n.pill { display: inline-flex; align-items: center; gap: 6px; padding: 4px 8px; border-radius: 999px; background: var(--selected-bg); border: 1px solid var(--border); font-size: 12px; color: var(--text); cursor: pointer; transition: background 150ms ease, border-color 150ms ease; }\n.pill:hover { background: var(--hover-bg); border-color: var(--accent); }\n.pill strong { color: var(--text); font-weight: 700; }\n.comment-list.collapsed {\n opacity: 0;\n pointer-events: none;\n transform: translateY(8px) scale(0.98);\n}\n.md-preview {\n background: var(--input-bg);\n border: 1px solid var(--border);\n border-radius: 12px;\n padding: 14px;\n margin-bottom: 12px;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.md-layout {\n display: flex;\n gap: 16px;\n align-items: stretch;\n margin-top: 8px;\n height: calc(100vh - 80px);\n}\n.md-left {\n flex: 1;\n min-width: 0;\n overflow-y: auto;\n overflow-x: auto;\n overscroll-behavior: contain;\n}\n.md-left .md-preview {\n max-height: none;\n}\n.md-right {\n flex: 1;\n min-width: 0;\n overflow-y: auto;\n overflow-x: auto;\n overscroll-behavior: contain;\n}\n.md-right .table-box {\n max-width: none;\n min-width: 0;\n max-height: none;\n overflow: visible;\n}\n/* Ensure thead is opaque in md-right to prevent content showing through */\n.md-right thead th {\n background: var(--panel-solid) !important;\n}\n.md-right thead th.selected {\n background: #c7d2fe !important;\n}\n[data-theme=\"dark\"] .md-right thead th {\n background: var(--panel-solid) !important;\n}\n[data-theme=\"dark\"] .md-right thead th.selected {\n background: #3730a3 !important;\n}\n\n/* === Media Sidebar === */\n.media-sidebar {\n display: flex;\n flex-shrink: 0;\n height: calc(100vh - 80px);\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n position: relative;\n z-index: 10;\n}\n.media-sidebar.hidden {\n display: none;\n}\n.media-sidebar-thumbs {\n width: 96px;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 8px;\n border-right: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n gap: 8px;\n background: var(--panel);\n scrollbar-width: thin;\n scrollbar-color: var(--border) transparent;\n}\n.media-sidebar-thumbs::-webkit-scrollbar {\n width: 4px;\n}\n.media-sidebar-thumbs::-webkit-scrollbar-track {\n background: transparent;\n}\n.media-sidebar-thumbs::-webkit-scrollbar-thumb {\n background: var(--border);\n border-radius: 4px;\n}\n.media-sidebar-thumb {\n width: 80px;\n height: 60px;\n border-radius: 6px;\n border: 2px solid var(--border);\n overflow: hidden;\n cursor: pointer;\n position: relative;\n flex-shrink: 0;\n background: var(--bg);\n transition: border-color 0.2s ease, transform 0.15s ease, box-shadow 0.2s ease;\n}\n.media-sidebar-thumb:hover {\n border-color: var(--accent);\n transform: scale(1.05);\n box-shadow: 0 2px 8px var(--shadow-color);\n}\n.media-sidebar-thumb.active {\n border-color: var(--accent);\n box-shadow: 0 0 0 2px var(--accent), 0 2px 8px var(--shadow-color);\n}\n.media-sidebar-thumb img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n}\n.media-sidebar-thumb svg {\n width: 100%;\n height: 100%;\n display: block;\n}\n.media-sidebar-thumb-video {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #000;\n}\n.media-sidebar-thumb-video video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n.media-sidebar-thumb-video::after {\n content: '';\n position: absolute;\n width: 24px;\n height: 24px;\n background: rgba(255,255,255,0.85);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.media-sidebar-thumb-video::before {\n content: '';\n position: absolute;\n z-index: 1;\n width: 0;\n height: 0;\n border-style: solid;\n border-width: 5px 0 5px 9px;\n border-color: transparent transparent transparent #000;\n margin-left: 2px;\n}\n.media-sidebar-thumb-mermaid {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n padding: 2px;\n background: var(--panel);\n overflow: hidden;\n}\n.media-sidebar-thumb-mermaid svg {\n width: 100% !important;\n height: 100% !important;\n max-width: 100%;\n max-height: 100%;\n display: block;\n}\n.media-sidebar-thumb-index {\n position: absolute;\n top: 2px;\n left: 2px;\n background: rgba(0,0,0,0.6);\n color: #fff;\n font-size: 9px;\n font-weight: 600;\n padding: 1px 4px;\n border-radius: 3px;\n line-height: 1.2;\n pointer-events: none;\n z-index: 1;\n}\n.media-sidebar-viewer {\n width: 0;\n overflow: hidden;\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n background: var(--bg);\n position: relative;\n}\n.media-sidebar-viewer.open {\n width: 45vw;\n overflow: hidden;\n padding: 16px;\n border-right: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n}\n.media-sidebar-viewer-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n padding-top: 32px;\n}\n.media-sidebar-viewer-content img {\n max-width: 100%;\n max-height: calc(100vh - 170px);\n object-fit: contain;\n border-radius: 8px;\n}\n.media-sidebar-viewer-content video {\n max-width: 100%;\n max-height: calc(100vh - 170px);\n border-radius: 8px;\n background: #000;\n}\n.media-sidebar-viewer-content .viewer-mermaid-wrap {\n width: 100%;\n overflow: auto;\n display: flex;\n justify-content: center;\n background: var(--panel);\n border-radius: 8px;\n padding: 16px;\n}\n.media-sidebar-viewer-content .viewer-mermaid-wrap svg {\n width: 100% !important;\n height: auto !important;\n max-height: calc(100vh - 200px);\n}\n\n/* === Sidebar Rich Viewer: Mermaid zoom/pan/minimap === */\n.sidebar-mermaid-controls {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 10px;\n background: var(--panel-alpha);\n border: 1px solid var(--border);\n border-radius: 8px;\n margin-bottom: 8px;\n width: 100%;\n box-sizing: border-box;\n}\n.sidebar-mermaid-controls button {\n background: var(--selected-bg);\n border: 1px solid var(--border);\n border-radius: 5px;\n padding: 4px 10px;\n cursor: pointer;\n color: var(--text);\n font-size: 13px;\n line-height: 1;\n transition: background 0.15s ease;\n}\n.sidebar-mermaid-controls button:hover { background: var(--hover-bg); }\n.sidebar-mermaid-controls .sidebar-zoom-info {\n font-size: 11px;\n color: var(--muted);\n min-width: 40px;\n text-align: center;\n user-select: none;\n}\n.sidebar-mermaid-viewport {\n width: 100%;\n flex: 1;\n overflow: hidden;\n position: relative;\n cursor: grab;\n background: var(--panel);\n border-radius: 8px;\n border: 1px solid var(--border);\n}\n.sidebar-mermaid-viewport:active { cursor: grabbing; }\n.sidebar-mermaid-wrapper {\n position: absolute;\n transform-origin: 0 0;\n}\n.sidebar-mermaid-wrapper svg {\n display: block;\n}\n.sidebar-minimap {\n position: absolute;\n bottom: 8px;\n right: 8px;\n width: 140px;\n height: 100px;\n background: var(--panel-alpha);\n border: 1px solid var(--border);\n border-radius: 6px;\n overflow: hidden;\n box-shadow: 0 2px 8px rgba(0,0,0,0.12);\n z-index: 3;\n}\n.sidebar-minimap-content {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 6px;\n}\n.sidebar-minimap-content svg {\n max-width: 100%;\n max-height: 100%;\n opacity: 0.6;\n}\n.sidebar-minimap-viewport {\n position: absolute;\n border: 2px solid var(--accent);\n background: rgba(102, 126, 234, 0.2);\n pointer-events: none;\n border-radius: 2px;\n}\n\n/* === Sidebar Rich Viewer: Image zoom/pan === */\n.sidebar-image-viewport {\n width: 100%;\n flex: 1;\n overflow: hidden;\n position: relative;\n cursor: grab;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.sidebar-image-viewport.panning { cursor: grabbing; }\n.sidebar-image-viewport img {\n transform-origin: 0 0;\n max-width: none !important;\n max-height: none !important;\n border-radius: 0 !important;\n user-select: none;\n -webkit-user-drag: none;\n}\n.sidebar-zoom-indicator {\n position: absolute;\n bottom: 10px;\n left: 50%;\n transform: translateX(-50%);\n background: rgba(0, 0, 0, 0.65);\n color: #fff;\n font-size: 11px;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n pointer-events: none;\n z-index: 3;\n backdrop-filter: blur(4px);\n transition: opacity 0.3s ease;\n user-select: none;\n}\n.sidebar-zoom-indicator.hidden { opacity: 0; }\n.sidebar-image-hint {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 11px;\n color: var(--muted);\n pointer-events: none;\n opacity: 0;\n transition: opacity 0.4s ease;\n text-align: center;\n z-index: 2;\n}\n\n/* === Sidebar Rich Viewer: Video container (timeline uses shared .video-timeline classes) === */\n.sidebar-video-container {\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: 0;\n}\n.sidebar-video-container video {\n width: 100%;\n border-radius: 8px 8px 0 0;\n background: #000;\n max-height: calc(100vh - 260px);\n}\n\n.media-sidebar-viewer-label {\n margin-top: 12px;\n font-size: 12px;\n color: var(--muted);\n text-align: center;\n word-break: break-all;\n}\n.media-sidebar-viewer-close {\n position: absolute;\n top: 8px;\n right: 8px;\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 6px;\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n color: var(--text);\n font-size: 14px;\n z-index: 2;\n transition: background 0.15s ease;\n}\n.media-sidebar-viewer-close:hover {\n background: var(--hover-bg);\n}\n.sidebar-viewer-settings-btn {\n position: absolute;\n top: 8px;\n right: 44px;\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 6px;\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n color: var(--text);\n font-size: 14px;\n z-index: 2;\n transition: background 0.15s ease;\n}\n.sidebar-viewer-settings-btn:hover {\n background: var(--hover-bg);\n}\n.sidebar-viewer-settings-btn + .video-settings-panel {\n position: absolute;\n top: 44px;\n right: 8px;\n}\n\n.media-sidebar-toggle {\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 6px 10px;\n cursor: pointer;\n color: var(--text);\n font-size: 14px;\n transition: background 0.15s ease, border-color 0.15s ease;\n display: none;\n}\n.media-sidebar-toggle.has-media {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n.media-sidebar-toggle:hover {\n background: var(--hover-bg);\n border-color: var(--accent);\n}\n.media-sidebar-toggle .toggle-count {\n font-size: 10px;\n font-weight: 700;\n background: var(--accent);\n color: var(--text-inverse);\n padding: 1px 5px;\n border-radius: 8px;\n line-height: 1.4;\n}\n.view-toggle {\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 6px 10px;\n cursor: pointer;\n color: var(--text);\n font-size: 14px;\n transition: background 0.15s ease, border-color 0.15s ease;\n}\n.view-toggle:hover { background: rgba(96,165,250,0.2); }\n.view-toggle.active { background: var(--accent); color: #fff; }\n@media (max-width: 1200px) {\n .media-sidebar-viewer.open {\n width: 40vw;\n }\n}\n@media (max-width: 900px) {\n .media-sidebar-thumbs {\n width: 72px;\n }\n .media-sidebar-thumb {\n width: 56px;\n height: 42px;\n }\n .media-sidebar-viewer.open {\n width: 35vw;\n }\n}\n@media (prefers-reduced-motion: reduce) {\n .media-sidebar,\n .media-sidebar-viewer,\n .media-sidebar-thumb {\n transition: none !important;\n }\n}\n\n.md-preview h1, .md-preview h2, .md-preview h3, .md-preview h4 {\n margin: 0.4em 0 0.2em;\n}\n/* Heading toggle feature */\n.md-preview .md-heading-toggle {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.md-preview .heading-toggle-icon {\n font-size: 0.6em;\n transition: transform 150ms ease;\n color: var(--muted);\n flex-shrink: 0;\n cursor: pointer;\n padding: 4px 8px;\n margin: -4px 0 -4px -8px;\n border-radius: 4px;\n}\n.md-preview .heading-toggle-icon:hover {\n background: var(--hover-bg);\n color: var(--accent);\n}\n.md-preview .md-heading-toggle.collapsed .heading-toggle-icon {\n transform: rotate(-90deg);\n}\n.md-preview details.heading-toggle {\n margin: 0.2em 0;\n}\n.md-preview details.heading-toggle > summary {\n list-style: none;\n cursor: pointer;\n}\n.md-preview details.heading-toggle > summary::-webkit-details-marker {\n display: none;\n}\n.md-preview details.heading-toggle:not([open]) > .toggle-content {\n display: none;\n}\n.md-preview .heading-section-content {\n /* Content wrapper for collapsible sections */\n}\n.md-preview .heading-section-content.hidden {\n display: none;\n}\n.md-preview p { margin: 0.3em 0; line-height: 1.5; }\n.md-preview img { max-width: 100%; height: auto; border-radius: 8px; }\n.md-preview video.video-preview { max-width: 100%; height: auto; border-radius: 8px; background: #000; }\n.md-preview table video.video-preview {\n display: block;\n width: 100%;\n height: auto;\n}\n.md-preview code { background: rgba(255,255,255,0.08); padding: 2px 4px; border-radius: 4px; }\n.md-preview pre {\n background: var(--code-bg);\n padding: 12px 16px;\n border-radius: 8px;\n overflow: auto;\n border: 1px solid var(--border);\n}\n.md-preview pre code {\n background: none;\n padding: 0;\n font-size: 13px;\n line-height: 1.5;\n}\n.md-preview pre code.hljs {\n background: transparent;\n padding: 0;\n}\n/* YAML Frontmatter table */\n.frontmatter-table {\n margin-bottom: 20px;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--border);\n background: var(--panel);\n}\n.frontmatter-table table {\n width: 100%;\n border-collapse: collapse;\n table-layout: fixed;\n}\n.frontmatter-table thead th {\n background: linear-gradient(135deg, rgba(147, 51, 234, 0.15), rgba(96, 165, 250, 0.15));\n color: var(--text);\n font-size: 12px;\n font-weight: 600;\n padding: 10px 16px;\n text-align: left;\n border-bottom: 1px solid var(--border);\n}\n.frontmatter-table tbody th {\n background: rgba(147, 51, 234, 0.08);\n color: #c084fc;\n font-weight: 500;\n font-size: 12px;\n padding: 8px 10px;\n text-align: left;\n border-bottom: 1px solid var(--border);\n vertical-align: top;\n}\n.frontmatter-table tbody td {\n padding: 8px 14px;\n font-size: 13px;\n border-bottom: 1px solid var(--border);\n word-break: break-word;\n}\n.frontmatter-table tbody tr:last-child th,\n.frontmatter-table tbody tr:last-child td {\n border-bottom: none;\n}\n.frontmatter-table .fm-tag {\n display: inline-block;\n background: rgba(96, 165, 250, 0.15);\n color: var(--accent);\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 11px;\n margin-right: 4px;\n margin-bottom: 4px;\n}\n.frontmatter-table pre {\n margin: 0;\n background: var(--code-bg);\n padding: 8px;\n border-radius: 4px;\n font-size: 11px;\n}\n/* Reviw questions preview cards */\n.reviw-questions-preview {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.reviw-q-card {\n background: var(--code-bg);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 10px 12px;\n}\n.reviw-q-card.resolved {\n border-left: 3px solid #22c55e;\n}\n.reviw-q-card.pending {\n border-left: 3px solid #f59e0b;\n}\n.reviw-q-header {\n font-size: 12px;\n color: var(--text-dim);\n margin-bottom: 4px;\n}\n.reviw-q-header strong {\n color: var(--accent);\n}\n.reviw-q-question {\n font-size: 13px;\n color: var(--text);\n margin-bottom: 6px;\n}\n.reviw-q-options {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n margin-bottom: 6px;\n}\n.reviw-q-answer {\n font-size: 12px;\n color: #22c55e;\n background: rgba(34, 197, 94, 0.1);\n padding: 4px 8px;\n border-radius: 4px;\n}\n[data-theme=\"light\"] .frontmatter-table tbody th {\n color: #7c3aed;\n}\n/* Table scroll container and indicator */\n.table-scroll-container {\n position: relative;\n margin: 16px 0;\n}\n.table-scroll-wrapper {\n overflow-x: auto;\n border-radius: 8px;\n}\n.scroll-hint {\n text-align: right;\n font-size: 12px;\n color: var(--accent);\n padding: 4px 8px;\n margin-bottom: 4px;\n opacity: 0;\n visibility: hidden;\n transition: opacity 200ms ease;\n}\n.table-scroll-container.can-scroll .scroll-hint {\n opacity: 0.8;\n visibility: visible;\n}\n.table-scroll-container.scrolled-end .scroll-hint {\n opacity: 0;\n visibility: hidden;\n}\n/* Markdown tables in preview */\n.md-preview table:not(.frontmatter-table table) {\n min-width: 100%;\n width: max-content;\n border-collapse: collapse;\n border: 1px solid var(--border);\n border-radius: 8px;\n}\n.md-preview table:not(.frontmatter-table table) th,\n.md-preview table:not(.frontmatter-table table) td {\n padding: 10px 16px;\n text-align: left;\n border-bottom: 1px solid var(--border);\n vertical-align: top;\n word-break: break-word;\n overflow-wrap: anywhere;\n width: auto;\n}\n/* Force equal column widths when colgroup is not specified */\n.md-preview table:not(.frontmatter-table table) colgroup ~ * th,\n.md-preview table:not(.frontmatter-table table) colgroup ~ * td {\n width: auto;\n}\n.md-preview table:not(.frontmatter-table table) td:has(video),\n.md-preview table:not(.frontmatter-table table) td:has(img) {\n padding: 4px;\n line-height: 0;\n}\n.md-preview table:not(.frontmatter-table table) td video,\n.md-preview table:not(.frontmatter-table table) td img {\n width: 100%;\n max-width: 100%;\n height: auto;\n}\n.md-preview table:not(.frontmatter-table table) th {\n background: var(--panel);\n font-weight: 600;\n font-size: 13px;\n}\n.md-preview table:not(.frontmatter-table table) td {\n font-size: 13px;\n}\n.md-preview table:not(.frontmatter-table table) tr:last-child td {\n border-bottom: none;\n}\n.md-preview table:not(.frontmatter-table table) tr:hover td {\n background: var(--hover-bg);\n}\n/* Source table (右ペイン) */\n.table-box table {\n table-layout: fixed;\n width: 100%;\n}\n.table-box th,\n.table-box td {\n word-break: break-word;\n min-width: 140px;\n}\n.table-box th:first-child,\n.table-box td:first-child {\n min-width: 320px;\n max-width: 480px;\n}\n/* Image fullscreen overlay */\n.image-fullscreen-overlay {\n position: fixed;\n inset: 0;\n background: var(--bg);\n z-index: 1001;\n display: none;\n flex-direction: column;\n}\n.image-fullscreen-overlay.visible {\n display: flex;\n}\n.image-fs-content {\n flex: 1;\n overflow: hidden;\n position: relative;\n cursor: grab;\n}\n.image-fs-content:active { cursor: grabbing; }\n.image-fs-content .image-fs-wrapper {\n position: absolute;\n transform-origin: 0 0;\n}\n.image-fs-content .image-fs-wrapper img {\n display: block;\n}\n/* Video fullscreen overlay */\n.video-fullscreen-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.95);\n z-index: 1001;\n display: none;\n justify-content: center;\n align-items: center;\n}\n.video-fullscreen-overlay.visible {\n display: flex;\n}\n.video-close-btn {\n position: absolute;\n top: 14px;\n right: 14px;\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.55);\n border: 1px solid rgba(255, 255, 255, 0.25);\n border-radius: 50%;\n cursor: pointer;\n color: #fff;\n font-size: 18px;\n z-index: 10;\n backdrop-filter: blur(4px);\n transition: background 120ms ease, transform 120ms ease;\n}\n.video-close-btn:hover {\n background: rgba(0, 0, 0, 0.75);\n transform: scale(1.04);\n}\n.video-container {\n width: 90vw;\n height: 90vh;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.video-container video {\n width: 100%;\n height: 100%;\n object-fit: contain;\n border-radius: 8px;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);\n}\n/* Video Timeline - shared base styles (used by both fullscreen and sidebar) */\n.video-timeline {\n background: rgba(0, 0, 0, 0.85);\n display: flex;\n overflow-x: auto;\n backdrop-filter: blur(8px);\n height: 80px;\n padding: 8px;\n gap: 4px;\n}\n.video-timeline::-webkit-scrollbar {\n height: 6px;\n}\n.video-timeline::-webkit-scrollbar-track {\n background: rgba(255, 255, 255, 0.1);\n border-radius: 3px;\n}\n.video-timeline::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.3);\n border-radius: 3px;\n}\n.video-timeline::-webkit-scrollbar-thumb:hover {\n background: rgba(255, 255, 255, 0.5);\n}\n/* Fullscreen-specific video timeline positioning */\n.video-container .video-timeline {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 5;\n}\n/* Sidebar-specific video timeline sizing */\n.sidebar-video-container .video-timeline {\n width: 100%;\n height: 72px;\n padding: 6px;\n gap: 3px;\n border-radius: 0 0 8px 8px;\n background: rgba(0, 0, 0, 0.88);\n}\n.sidebar-video-container .video-timeline::-webkit-scrollbar { height: 5px; }\n.sidebar-video-container .video-timeline::-webkit-scrollbar-track { background: rgba(255, 255, 255, 0.08); }\n.sidebar-video-container .video-timeline::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.25); }\n.sidebar-video-container .video-timeline::-webkit-scrollbar-thumb:hover { background: rgba(255, 255, 255, 0.4); }\n.timeline-thumb {\n height: 64px;\n cursor: pointer;\n border: 2px solid transparent;\n border-radius: 4px;\n flex-shrink: 0;\n transition: border-color 0.2s, transform 0.15s;\n opacity: 0.85;\n}\n.sidebar-video-container .timeline-thumb {\n height: 52px;\n opacity: 0.8;\n}\n.timeline-thumb:hover {\n border-color: rgba(59, 130, 246, 0.5);\n opacity: 1;\n transform: scale(1.05);\n}\n.timeline-thumb.active {\n border-color: #3b82f6;\n opacity: 1;\n box-shadow: 0 0 12px rgba(59, 130, 246, 0.5);\n}\n.sidebar-video-container .timeline-thumb.active {\n box-shadow: 0 0 8px rgba(59, 130, 246, 0.4);\n}\n.timeline-loading {\n color: rgba(255, 255, 255, 0.6);\n font-size: 12px;\n padding: 8px 12px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.sidebar-video-container .timeline-loading {\n font-size: 11px;\n padding: 6px 10px;\n gap: 6px;\n color: rgba(255, 255, 255, 0.5);\n}\n.timeline-loading::before {\n content: '';\n width: 14px;\n height: 14px;\n border: 2px solid rgba(255, 255, 255, 0.3);\n border-top-color: #3b82f6;\n border-radius: 50%;\n animation: timeline-spin 0.8s linear infinite;\n}\n.sidebar-video-container .timeline-loading::before {\n width: 12px;\n height: 12px;\n border-width: 2px;\n border-color: rgba(255, 255, 255, 0.25);\n border-top-color: #3b82f6;\n}\n@keyframes timeline-spin {\n to { transform: rotate(360deg); }\n}\n.timeline-time {\n position: absolute;\n bottom: 2px;\n right: 4px;\n font-size: 9px;\n color: #fff;\n background: rgba(0, 0, 0, 0.7);\n padding: 1px 4px;\n border-radius: 2px;\n pointer-events: none;\n}\n.sidebar-video-container .timeline-time {\n font-size: 8px;\n right: 3px;\n padding: 1px 3px;\n}\n.timeline-thumb-wrapper {\n position: relative;\n flex-shrink: 0;\n}\n/* Video threshold settings panel */\n.video-settings-btn {\n position: absolute;\n top: 14px;\n right: 64px;\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.55);\n border: 1px solid rgba(255, 255, 255, 0.25);\n border-radius: 50%;\n cursor: pointer;\n color: #fff;\n font-size: 18px;\n z-index: 10;\n backdrop-filter: blur(4px);\n transition: background 120ms ease, transform 120ms ease;\n}\n.video-settings-btn:hover {\n background: rgba(0, 0, 0, 0.75);\n transform: scale(1.04);\n}\n.video-settings-panel {\n position: absolute;\n top: 60px;\n right: 14px;\n background: rgba(0, 0, 0, 0.9);\n border: 1px solid rgba(255, 255, 255, 0.2);\n border-radius: 12px;\n padding: 16px;\n z-index: 15;\n min-width: 280px;\n display: none;\n backdrop-filter: blur(8px);\n}\n.video-settings-panel.visible {\n display: block;\n}\n.video-settings-panel h4 {\n margin: 0 0 8px;\n color: #fff;\n font-size: 14px;\n font-weight: 500;\n}\n.video-settings-desc {\n margin: 0 0 12px;\n color: rgba(255, 255, 255, 0.6);\n font-size: 11px;\n line-height: 1.4;\n}\n.video-settings-buttons {\n display: flex;\n gap: 6px;\n margin-bottom: 12px;\n}\n.video-settings-buttons button {\n flex: 1;\n padding: 8px 4px;\n border: 1px solid rgba(255, 255, 255, 0.2);\n border-radius: 6px;\n background: rgba(255, 255, 255, 0.1);\n color: rgba(255, 255, 255, 0.8);\n font-size: 11px;\n cursor: pointer;\n transition: all 120ms ease;\n}\n.video-settings-buttons button:hover {\n background: rgba(255, 255, 255, 0.2);\n border-color: rgba(255, 255, 255, 0.3);\n}\n.video-settings-buttons button.selected {\n background: #3b82f6;\n border-color: #3b82f6;\n color: #fff;\n}\n.video-settings-actions {\n display: flex;\n gap: 8px;\n margin-top: 8px;\n}\n.video-settings-actions button {\n flex: 1;\n padding: 8px 12px;\n border: none;\n border-radius: 6px;\n font-size: 12px;\n cursor: pointer;\n transition: background 120ms ease;\n}\n.video-settings-actions .reset-btn {\n background: rgba(255, 255, 255, 0.15);\n color: #fff;\n}\n.video-settings-actions .reset-btn:hover {\n background: rgba(255, 255, 255, 0.25);\n}\n/* Video Shortcuts Help */\n.video-shortcuts-help {\n opacity: 0.85;\n transition: opacity 0.2s;\n}\n.video-shortcuts-help:hover {\n opacity: 1;\n}\n.video-shortcuts-help .shortcuts-title {\n font-weight: 600;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 10px;\n color: rgba(255, 255, 255, 0.7);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.video-shortcuts-help .shortcuts-title::before {\n content: '\\u2328';\n font-size: 14px;\n}\n.video-shortcuts-help .shortcut-item {\n margin-bottom: 6px;\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n.video-shortcuts-help .shortcut-item:last-child {\n margin-bottom: 0;\n}\n.video-shortcuts-help kbd {\n display: inline-block;\n background: rgba(255, 255, 255, 0.15);\n border: 1px solid rgba(255, 255, 255, 0.25);\n border-radius: 4px;\n padding: 2px 6px;\n font-family: system-ui, -apple-system, sans-serif;\n font-size: 10px;\n font-weight: 500;\n min-width: 18px;\n text-align: center;\n margin-right: 2px;\n}\n/* Reviw Questions Modal */\n.reviw-questions-overlay {\n display: none;\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.8);\n z-index: 1100;\n justify-content: center;\n align-items: center;\n}\n.reviw-questions-overlay.visible {\n display: flex;\n}\n.reviw-questions-modal {\n background: var(--card-bg);\n border: 1px solid var(--border);\n border-radius: 16px;\n width: 90%;\n max-width: 600px;\n max-height: 80vh;\n display: flex;\n flex-direction: column;\n box-shadow: 0 25px 80px rgba(0, 0, 0, 0.5);\n}\n.reviw-questions-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n border-bottom: 1px solid var(--border);\n}\n.reviw-questions-header h2 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--text);\n}\n.reviw-questions-header h2 span {\n font-size: 14px;\n color: var(--text-dim);\n font-weight: 400;\n}\n.reviw-questions-close {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n color: var(--text-dim);\n font-size: 18px;\n cursor: pointer;\n border-radius: 8px;\n transition: all 150ms ease;\n}\n.reviw-questions-close:hover {\n background: var(--border);\n color: var(--text);\n}\n.reviw-questions-body {\n flex: 1;\n overflow-y: auto;\n padding: 16px 20px;\n}\n.reviw-questions-footer {\n padding: 12px 20px;\n border-top: 1px solid var(--border);\n display: flex;\n justify-content: flex-end;\n}\n.reviw-questions-later {\n padding: 8px 16px;\n border: 1px solid var(--border);\n background: transparent;\n color: var(--text-dim);\n border-radius: 8px;\n cursor: pointer;\n font-size: 13px;\n transition: all 150ms ease;\n}\n.reviw-questions-later:hover {\n background: var(--border);\n color: var(--text);\n}\n/* Question Item */\n.reviw-question-item {\n margin-bottom: 20px;\n padding-bottom: 20px;\n border-bottom: 1px solid var(--border);\n}\n.reviw-question-item:last-child {\n margin-bottom: 0;\n padding-bottom: 0;\n border-bottom: none;\n}\n.reviw-question-text {\n font-size: 14px;\n color: var(--text);\n margin-bottom: 12px;\n line-height: 1.5;\n}\n.reviw-question-options {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-bottom: 12px;\n}\n.reviw-question-option {\n padding: 8px 14px;\n border: 1px solid var(--border);\n background: transparent;\n color: var(--text);\n border-radius: 8px;\n cursor: pointer;\n font-size: 13px;\n transition: all 150ms ease;\n}\n.reviw-question-option:hover {\n border-color: var(--accent);\n background: rgba(96, 165, 250, 0.1);\n}\n.reviw-question-option.selected {\n border-color: var(--accent);\n background: var(--accent);\n color: var(--text-inverse);\n}\n.reviw-question-input {\n width: 100%;\n padding: 10px 12px;\n border: 1px solid var(--border);\n background: var(--input-bg);\n color: var(--text);\n border-radius: 8px;\n font-size: 13px;\n resize: vertical;\n min-height: 60px;\n}\n.reviw-question-input:focus {\n outline: none;\n border-color: var(--accent);\n}\n.reviw-question-input::placeholder {\n color: var(--text-dim);\n}\n.reviw-check-mark {\n color: #22c55e;\n font-weight: bold;\n}\n.reviw-question-item.answered {\n border-color: #22c55e;\n background: rgba(34, 197, 94, 0.05);\n}\n.reviw-question-submit {\n margin-top: 10px;\n padding: 8px 16px;\n border: none;\n background: var(--accent);\n color: var(--text-inverse);\n border-radius: 8px;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n transition: all 150ms ease;\n}\n.reviw-question-submit:hover {\n filter: brightness(1.1);\n}\n.reviw-question-submit:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n/* Resolved Section */\n.reviw-resolved-section {\n margin-top: 16px;\n border-top: 1px solid var(--border);\n padding-top: 12px;\n}\n.reviw-resolved-toggle {\n display: flex;\n align-items: center;\n gap: 8px;\n background: none;\n border: none;\n color: var(--text-dim);\n font-size: 13px;\n cursor: pointer;\n padding: 4px 0;\n}\n.reviw-resolved-toggle:hover {\n color: var(--text);\n}\n.reviw-resolved-toggle .arrow {\n transition: transform 150ms ease;\n}\n.reviw-resolved-toggle.open .arrow {\n transform: rotate(90deg);\n}\n.reviw-resolved-list {\n display: none;\n margin-top: 12px;\n}\n.reviw-resolved-list.visible {\n display: block;\n}\n.reviw-resolved-item {\n padding: 10px 12px;\n background: var(--input-bg);\n border-radius: 8px;\n margin-bottom: 8px;\n opacity: 0.7;\n}\n.reviw-resolved-item:last-child {\n margin-bottom: 0;\n}\n.reviw-resolved-q {\n font-size: 12px;\n color: var(--text-dim);\n margin-bottom: 4px;\n}\n.reviw-resolved-a {\n font-size: 13px;\n color: var(--text);\n}\n/* Notice Bar */\n.reviw-questions-bar {\n display: none;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n background: var(--accent);\n color: var(--text-inverse);\n padding: 8px 16px;\n font-size: 13px;\n z-index: 1050;\n justify-content: center;\n align-items: center;\n gap: 12px;\n}\n.reviw-questions-bar.visible {\n display: flex;\n}\n.reviw-questions-bar button {\n padding: 4px 12px;\n border: 1px solid rgba(255, 255, 255, 0.3);\n background: rgba(255, 255, 255, 0.1);\n color: var(--text-inverse);\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n transition: all 150ms ease;\n}\n.reviw-questions-bar button:hover {\n background: rgba(255, 255, 255, 0.2);\n}\n/* Adjust layout when bar is visible */\nbody.has-questions-bar header {\n top: 36px;\n}\nbody.has-questions-bar .toolbar,\nbody.has-questions-bar .table-wrap {\n margin-top: 36px;\n}\n/* Copy notification toast */\n.copy-toast {\n position: fixed;\n bottom: 60px;\n left: 50%;\n transform: translateX(-50%) translateY(20px);\n background: var(--accent);\n color: var(--text-inverse);\n padding: 8px 16px;\n border-radius: 8px;\n font-size: 13px;\n opacity: 0;\n pointer-events: none;\n transition: opacity 200ms ease, transform 200ms ease;\n z-index: 1000;\n}\n.copy-toast.visible {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n}\n@media (max-width: 960px) {\n .md-layout { flex-direction: column; }\n .md-left { max-width: 100%; flex: 1 1 0; min-height: 0; }\n .md-right { display: none; }\n .media-sidebar { display: none; }\n .media-sidebar-toggle { display: none !important; }\n}\n.md-layout.preview-only .md-right { display: none; }\n.md-layout.preview-only .md-left { flex: 1 1 0; min-height: 0; max-width: 100%; }\n.filter-menu {\n position: absolute;\n background: var(--panel-solid);\n border: 1px solid var(--border);\n border-radius: 10px;\n box-shadow: 0 14px 30px var(--shadow-color);\n padding: 8px;\n display: none;\n z-index: 12;\n width: 180px;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.filter-menu button {\n width: 100%;\n display: block;\n margin: 4px 0;\n padding: 8px 10px;\n background: var(--selected-bg);\n border: 1px solid var(--border);\n border-radius: 8px;\n color: var(--text);\n cursor: pointer;\n font-size: 13px;\n text-align: left;\n}\n.filter-menu button:hover { background: var(--hover-bg); }\n.modal-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0,0,0,0.6);\n display: none;\n align-items: center;\n justify-content: center;\n z-index: 100;\n}\n.modal-overlay.visible { display: flex; }\n/* Submit modal: top-right position, no blocking overlay */\n#submit-modal {\n background: transparent;\n pointer-events: none;\n align-items: flex-start;\n justify-content: flex-end;\n}\n#submit-modal.visible { display: flex; }\n#submit-modal .modal-dialog {\n pointer-events: auto;\n margin: 60px 20px 20px 20px; /* top margin avoids header button overlap */\n}\n.modal-dialog {\n background: var(--panel-solid);\n border: 1px solid var(--border);\n border-radius: 14px;\n padding: 20px;\n width: 90%;\n max-width: 480px;\n box-shadow: 0 20px 40px var(--shadow-color);\n transition: background 200ms ease, border-color 200ms ease;\n}\n.modal-dialog h3 { margin: 0 0 12px; font-size: 18px; color: var(--accent); }\n.modal-summary { color: var(--muted); font-size: 13px; margin-bottom: 12px; }\n.modal-dialog label { display: block; font-size: 13px; margin-bottom: 6px; color: var(--muted); }\n.modal-dialog textarea {\n width: 100%;\n min-height: 100px;\n background: var(--input-bg);\n border: 1px solid var(--border);\n border-radius: 8px;\n color: var(--text);\n padding: 10px;\n font-size: 14px;\n resize: vertical;\n box-sizing: border-box;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.modal-dialog textarea:focus { outline: none; border-color: var(--accent); }\n.modal-actions { display: flex; gap: 10px; justify-content: flex-end; margin-top: 16px; }\n.modal-actions button {\n padding: 8px 16px;\n border-radius: 8px;\n border: 1px solid var(--border);\n background: var(--selected-bg);\n color: var(--text);\n cursor: pointer;\n font-size: 14px;\n}\n.modal-actions button:hover { background: var(--hover-bg); }\n.modal-actions button.primary { background: var(--accent); color: var(--text-inverse); border-color: var(--accent); }\n.image-attach-area { margin: 12px 0; }\n.image-attach-area label { display: block; font-size: 12px; color: var(--muted); margin-bottom: 6px; }\n.image-attach-area.image-attach-small { margin: 8px 0; }\n.image-attach-area.image-attach-small label { font-size: 11px; }\n.image-preview-list { display: flex; flex-wrap: wrap; gap: 8px; min-height: 24px; }\n.image-preview-item { position: relative; }\n.image-preview-item img { max-width: 80px; max-height: 60px; border-radius: 4px; border: 1px solid var(--border); object-fit: cover; }\n.image-preview-item .remove-image { position: absolute; top: -6px; right: -6px; width: 18px; height: 18px; border-radius: 50%; background: var(--error, #ef4444); color: #fff; border: none; cursor: pointer; font-size: 12px; line-height: 1; display: flex; align-items: center; justify-content: center; }\n.image-preview-item .remove-image:hover { background: #dc2626; }\n.modal-actions button.primary:hover { background: #7dd3fc; }\n\n.modal-checkboxes { margin: 12px 0; }\n.modal-checkboxes label {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n font-size: 12px;\n color: var(--text);\n margin-bottom: 8px;\n cursor: pointer;\n}\n.modal-checkboxes input[type=\"checkbox\"] {\n margin-top: 2px;\n accent-color: var(--accent);\n}\n\nbody.dragging { user-select: none; cursor: crosshair; }\nbody.dragging .diff-line { cursor: crosshair; }\n@media (max-width: 840px) {\n header { flex-direction: column; align-items: flex-start; }\n .comment-list { width: calc(100% - 24px); right: 12px; }\n}\n/* Mermaid diagram styles */\n.mermaid-container {\n position: relative;\n margin: 16px 0;\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 16px;\n overflow: hidden;\n}\n.mermaid-container .mermaid {\n display: flex;\n justify-content: center;\n}\n.mermaid-container .mermaid svg {\n max-width: 100%;\n height: auto;\n cursor: pointer;\n pointer-events: auto;\n}\n.mermaid-fullscreen-btn {\n position: absolute;\n top: 8px;\n right: 8px;\n background: var(--selected-bg);\n border: 1px solid var(--border);\n border-radius: 6px;\n padding: 6px 10px;\n cursor: pointer;\n color: var(--text);\n font-size: 12px;\n z-index: 2;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n.mermaid-fullscreen-btn:hover { background: var(--hover-bg); }\n/* Fullscreen overlay */\n.fullscreen-overlay {\n position: fixed;\n inset: 0;\n background: var(--bg);\n z-index: 1000;\n display: none;\n flex-direction: column;\n}\n.fullscreen-overlay.visible { display: flex; }\n.fullscreen-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 20px;\n background: var(--panel-alpha);\n border-bottom: 1px solid var(--border);\n}\n.fullscreen-header h3 { margin: 0; font-size: 14px; }\n.fullscreen-controls { display: flex; gap: 8px; align-items: center; }\n.fullscreen-controls button {\n background: var(--selected-bg);\n border: 1px solid var(--border);\n border-radius: 6px;\n padding: 6px 12px;\n cursor: pointer;\n color: var(--text);\n font-size: 13px;\n}\n.fullscreen-controls button:hover { background: var(--hover-bg); }\n.fullscreen-controls .zoom-info { font-size: 12px; color: var(--muted); min-width: 50px; text-align: center; }\n.fullscreen-content {\n flex: 1;\n overflow: hidden;\n position: relative;\n cursor: grab;\n}\n.fullscreen-content:active { cursor: grabbing; }\n.fullscreen-content .mermaid-wrapper {\n position: absolute;\n transform-origin: 0 0;\n padding: 40px;\n}\n.fullscreen-content .mermaid svg {\n display: block;\n}\n/* Minimap */\n.minimap {\n position: absolute;\n top: 70px;\n right: 20px;\n width: 200px;\n height: 150px;\n background: var(--panel-alpha);\n border: 1px solid var(--border);\n border-radius: 8px;\n overflow: hidden;\n box-shadow: 0 4px 12px rgba(0,0,0,0.15);\n}\n.minimap-content {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 8px;\n}\n.minimap-content svg {\n max-width: 100%;\n max-height: 100%;\n opacity: 0.6;\n}\n.minimap-viewport {\n position: absolute;\n border: 2px solid var(--accent);\n background: rgba(102, 126, 234, 0.2);\n pointer-events: none;\n border-radius: 2px;\n}\n/* Error toast */\n.mermaid-error-toast {\n position: fixed;\n bottom: 20px;\n left: 50%;\n transform: translateX(-50%);\n background: var(--error);\n color: white;\n padding: 12px 24px;\n border-radius: 8px;\n font-size: 13px;\n max-width: 80%;\n z-index: 2000;\n display: none;\n box-shadow: 0 4px 12px rgba(0,0,0,0.3);\n white-space: pre-wrap;\n font-family: monospace;\n}\n.mermaid-error-toast.visible { display: block; }\n\n/* History Panel - Push layout */\nbody { transition: margin-right 0.25s ease; }\nbody.history-open { margin-right: 320px; }\nbody.history-open header { right: 320px; }\nheader { transition: right 0.25s ease; right: 0; }\n\n.history-toggle {\n background: var(--selected-bg);\n color: var(--text);\n border: 1px solid var(--border);\n border-radius: 6px;\n padding: 6px 8px;\n font-size: 14px;\n cursor: pointer;\n width: 34px;\n height: 34px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.history-toggle:hover { background: var(--border); }\n.history-panel {\n position: fixed;\n top: 0;\n right: 0;\n width: 320px;\n height: 100vh;\n background: var(--panel-solid);\n border-left: 1px solid var(--border);\n z-index: 90;\n transform: translateX(100%);\n transition: transform 0.25s ease;\n display: flex;\n flex-direction: column;\n}\n.history-panel.open { transform: translateX(0); }\n.history-panel-header {\n padding: 16px;\n border-bottom: 1px solid var(--border);\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.history-panel-header h3 { margin: 0; font-size: 14px; font-weight: 600; }\n.history-panel-close {\n background: transparent;\n border: none;\n color: var(--muted);\n cursor: pointer;\n font-size: 18px;\n padding: 4px;\n}\n.history-panel-close:hover { color: var(--text); }\n.history-panel-body {\n flex: 1;\n overflow-y: auto;\n padding: 12px;\n}\n.history-empty {\n color: var(--muted);\n font-size: 13px;\n text-align: center;\n padding: 40px 20px;\n}\n.history-date-group { margin-bottom: 16px; }\n.history-date {\n font-size: 11px;\n font-weight: 600;\n color: var(--muted);\n margin-bottom: 8px;\n text-transform: uppercase;\n}\n.history-item {\n background: var(--bg);\n border: 1px solid var(--border);\n border-radius: 6px;\n margin-bottom: 8px;\n overflow: hidden;\n}\n.history-item-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 10px;\n background: var(--selected-bg);\n cursor: pointer;\n}\n.history-item-header:hover { background: var(--hover-bg); }\n.history-item-file {\n font-size: 12px;\n font-weight: 600;\n color: var(--text);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 180px;\n}\n.history-item-time { font-size: 10px; color: var(--muted); }\n.history-item-body {\n display: none;\n padding: 10px;\n font-size: 12px;\n border-top: 1px solid var(--border);\n}\n.history-item.expanded .history-item-body { display: block; }\n.history-summary {\n color: var(--text);\n margin-bottom: 8px;\n padding-bottom: 8px;\n border-bottom: 1px solid var(--border);\n}\n.history-summary-label {\n font-size: 10px;\n font-weight: 600;\n color: var(--muted);\n margin-bottom: 4px;\n}\n.history-summary-text { white-space: pre-wrap; line-height: 1.4; }\n.history-comments-label {\n font-size: 10px;\n font-weight: 600;\n color: var(--muted);\n margin-bottom: 6px;\n}\n.history-comment {\n padding: 6px 0;\n border-bottom: 1px solid var(--border);\n}\n.history-comment:last-child { border-bottom: none; }\n.history-comment-line {\n font-size: 10px;\n color: var(--accent);\n font-weight: 600;\n margin-bottom: 2px;\n}\n.history-comment-quote {\n background: rgba(0, 0, 0, 0.3);\n border-left: 2px solid var(--accent);\n padding: 4px 8px;\n margin: 4px 0;\n font-family: 'SF Mono', Monaco, Consolas, monospace;\n font-size: 11px;\n color: var(--muted);\n white-space: pre-wrap;\n word-break: break-all;\n max-height: 80px;\n overflow-y: auto;\n}\n.history-comment-text {\n color: var(--text);\n line-height: 1.4;\n white-space: pre-wrap;\n}\n.history-badge {\n display: inline-block;\n background: var(--accent);\n color: var(--text-inverse);\n font-size: 10px;\n padding: 2px 6px;\n border-radius: 10px;\n margin-left: 6px;\n}\n/* Table scroll container */\n.table-container {\n overflow-x: auto;\n margin: 16px 0;\n border-radius: 8px;\n border: 1px solid var(--border);\n}\n.table-container table {\n margin: 0;\n border: none;\n border-radius: 0;\n}\n.table-container::-webkit-scrollbar {\n height: 6px;\n}\n.table-container::-webkit-scrollbar-track {\n background: var(--bg);\n border-radius: 3px;\n}\n.table-container::-webkit-scrollbar-thumb {\n background: var(--border);\n border-radius: 3px;\n}\n.table-container::-webkit-scrollbar-thumb:hover {\n background: var(--muted);\n}\n/* Media sidebar */\n.media-sidebar {\n display: flex;\n flex-shrink: 0;\n height: calc(100vh - 80px);\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n position: relative;\n z-index: 10;\n}\n.media-sidebar.hidden { display: none; }\n.media-sidebar-thumbs {\n width: 96px;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 8px;\n border-right: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n gap: 8px;\n background: var(--panel);\n scrollbar-width: thin;\n scrollbar-color: var(--border) transparent;\n}\n.media-sidebar-thumbs::-webkit-scrollbar { width: 4px; }\n.media-sidebar-thumbs::-webkit-scrollbar-track { background: transparent; }\n.media-sidebar-thumbs::-webkit-scrollbar-thumb { background: var(--border); border-radius: 4px; }\n.media-sidebar-thumb {\n width: 80px;\n height: 60px;\n border-radius: 6px;\n border: 2px solid var(--border);\n overflow: hidden;\n cursor: pointer;\n position: relative;\n flex-shrink: 0;\n background: var(--bg);\n transition: border-color 0.2s ease, transform 0.15s ease, box-shadow 0.2s ease;\n}\n.media-sidebar-thumb:hover { border-color: var(--accent); transform: scale(1.05); box-shadow: 0 2px 8px var(--shadow-color); }\n.media-sidebar-thumb.active { border-color: var(--accent); box-shadow: 0 0 0 2px var(--accent), 0 2px 8px var(--shadow-color); }\n.media-sidebar-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }\n.media-sidebar-thumb svg { width: 100%; height: 100%; display: block; }\n.media-sidebar-thumb-video {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #000;\n}\n.media-sidebar-thumb-video video { width: 100%; height: 100%; object-fit: cover; }\n.media-sidebar-thumb-video::after {\n content: '';\n position: absolute;\n width: 24px;\n height: 24px;\n background: rgba(255,255,255,0.85);\n border-radius: 50%;\n}\n.media-sidebar-thumb-video::before {\n content: '';\n position: absolute;\n z-index: 1;\n width: 0;\n height: 0;\n border-style: solid;\n border-width: 5px 0 5px 9px;\n border-color: transparent transparent transparent #000;\n margin-left: 2px;\n}\n.media-sidebar-thumb-mermaid {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n padding: 2px;\n background: var(--panel);\n overflow: hidden;\n}\n.media-sidebar-thumb-mermaid svg { width: 100% !important; height: 100% !important; max-width: 100%; max-height: 100%; display: block; }\n.media-sidebar-thumb-index {\n position: absolute;\n top: 2px;\n left: 2px;\n background: rgba(0,0,0,0.6);\n color: #fff;\n font-size: 9px;\n font-weight: 600;\n padding: 1px 4px;\n border-radius: 3px;\n line-height: 1.2;\n pointer-events: none;\n z-index: 1;\n}\n.media-sidebar-viewer {\n width: 0;\n overflow: hidden;\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n background: var(--bg);\n position: relative;\n}\n.media-sidebar-viewer.open {\n width: 45vw;\n overflow: hidden;\n padding: 16px;\n border-right: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n}\n.media-sidebar-viewer-close {\n position: absolute;\n top: 8px;\n right: 8px;\n z-index: 2;\n background: var(--selected-bg);\n border: 1px solid var(--border);\n color: var(--text);\n width: 28px;\n height: 28px;\n border-radius: 50%;\n cursor: pointer;\n font-size: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.media-sidebar-viewer-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n.media-sidebar-viewer-content img { max-width: 100%; max-height: calc(100vh - 140px); object-fit: contain; border-radius: 8px; }\n.media-sidebar-viewer-content video { max-width: 100%; max-height: calc(100vh - 140px); border-radius: 8px; background: #000; }\n.media-sidebar-viewer-label {\n margin-top: 8px;\n font-size: 12px;\n color: var(--muted);\n text-align: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n}\n.sidebar-zoom-indicator {\n position: absolute;\n bottom: 12px;\n right: 12px;\n background: rgba(0,0,0,0.7);\n color: #fff;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 11px;\n pointer-events: none;\n transition: opacity 0.3s ease;\n}\n.sidebar-zoom-indicator.hidden { opacity: 0; }\n.sidebar-mermaid-viewport { overflow: hidden; position: relative; cursor: grab; }\n.sidebar-mermaid-wrapper { position: absolute; left: 0; top: 0; transform-origin: 0 0; }\n.sidebar-video-container { width: 100%; }\n.sidebar-video-container video { width: 100%; max-height: calc(100vh - 200px); border-radius: 8px; background: #000; }\n/* Video timeline */\n.video-timeline {\n display: flex;\n gap: 8px;\n padding: 8px;\n overflow-x: auto;\n background: var(--panel);\n border-radius: 8px;\n margin-top: 8px;\n scrollbar-width: thin;\n scrollbar-color: var(--border) transparent;\n}\n.timeline-loading { color: var(--muted); font-size: 12px; padding: 8px; }\n.timeline-thumb-wrapper {\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n cursor: pointer;\n}\n.timeline-thumb {\n width: 80px;\n height: 60px;\n object-fit: cover;\n border-radius: 4px;\n border: 2px solid transparent;\n transition: border-color 0.2s ease;\n}\n.timeline-thumb.active { border-color: var(--accent); }\n.timeline-thumb:hover { border-color: var(--accent); opacity: 0.8; }\n.timeline-time { font-size: 10px; color: var(--muted); }\n/* Fullscreen overlay */\n.fullscreen-overlay {\n display: none;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0,0,0,0.9);\n z-index: 1000;\n flex-direction: column;\n}\n.fullscreen-overlay.visible { display: flex; }\n.fullscreen-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: rgba(0,0,0,0.8);\n border-bottom: 1px solid rgba(255,255,255,0.1);\n}\n.fullscreen-header h3 { margin: 0; color: #fff; font-size: 14px; }\n.fullscreen-controls { display: flex; gap: 6px; align-items: center; }\n.fullscreen-controls button {\n background: rgba(255,255,255,0.1);\n border: 1px solid rgba(255,255,255,0.2);\n color: #fff;\n padding: 6px 12px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n}\n.fullscreen-controls button:hover { background: rgba(255,255,255,0.2); }\n.fullscreen-controls .zoom-info { color: #fff; font-size: 12px; min-width: 40px; text-align: center; }");
|
|
3928
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "/* Dark theme (default) */\n:root {\n color-scheme: dark;\n --bg: #0f172a;\n --bg-gradient: radial-gradient(circle at 20% 20%, #1e293b 0%, #0b1224 35%, #0b1224 60%, #0f172a 100%);\n --panel: #111827;\n --panel-alpha: rgba(15, 23, 42, 0.9);\n --panel-solid: #0b1224;\n --card-bg: rgba(11, 18, 36, 0.95);\n --input-bg: rgba(15, 23, 42, 0.6);\n --border: #1f2937;\n --accent: #60a5fa;\n --accent-2: #f472b6;\n --text: #e5e7eb;\n --text-inverse: #0b1224;\n --muted: #94a3b8;\n --comment: #0f766e;\n --badge: #22c55e;\n --table-bg: rgba(15, 23, 42, 0.7);\n --row-even: rgba(30, 41, 59, 0.4);\n --row-odd: rgba(15, 23, 42, 0.2);\n --selected-bg: rgba(96,165,250,0.15);\n --hover-bg: rgba(96,165,250,0.08);\n --shadow-color: rgba(0,0,0,0.35);\n --code-bg: #1e293b;\n --error: #dc3545;\n}\n/* Light theme */\n[data-theme=\"light\"] {\n color-scheme: light;\n --bg: #f8fafc;\n --bg-gradient: linear-gradient(135deg, #f8fafc 0%, #e2e8f0 100%);\n --panel: #ffffff;\n --panel-alpha: rgba(255, 255, 255, 0.95);\n --panel-solid: #ffffff;\n --card-bg: rgba(255, 255, 255, 0.98);\n --input-bg: #f1f5f9;\n --border: #e2e8f0;\n --accent: #3b82f6;\n --accent-2: #ec4899;\n --text: #1e293b;\n --text-inverse: #ffffff;\n --muted: #64748b;\n --comment: #14b8a6;\n --badge: #22c55e;\n --table-bg: #ffffff;\n --row-even: #f8fafc;\n --row-odd: #ffffff;\n --selected-bg: rgba(59,130,246,0.12);\n --hover-bg: rgba(59,130,246,0.06);\n --shadow-color: rgba(0,0,0,0.1);\n --code-bg: #f1f5f9;\n --error: #dc3545;\n}\n* { box-sizing: border-box; }\nbody {\n margin: 0;\n font-family: \"Inter\", \"Hiragino Sans\", system-ui, -apple-system, sans-serif;\n background: var(--bg-gradient);\n color: var(--text);\n min-height: 100vh;\n transition: background 200ms ease, color 200ms ease;\n}\nheader {\n position: sticky;\n top: 0;\n z-index: 5;\n padding: 12px 16px;\n background: var(--panel-alpha);\n backdrop-filter: blur(8px);\n border-bottom: 1px solid var(--border);\n display: flex;\n gap: 12px;\n align-items: center;\n justify-content: space-between;\n transition: background 200ms ease, border-color 200ms ease;\n}\nheader .meta { display: flex; gap: 12px; align-items: center; flex-wrap: wrap; }\nheader .actions { display: flex; gap: 8px; align-items: center; }\nheader h1 { display: flex; flex-direction: column; margin: 0; line-height: 1.3; }\nheader h1 .title-path { font-size: 11px; font-weight: 400; color: var(--muted); }\nheader h1 .title-file { font-size: 16px; font-weight: 700; }\nheader .badge {\n background: var(--selected-bg);\n color: var(--text);\n padding: 6px 10px;\n border-radius: 8px;\n font-size: 12px;\n border: 1px solid var(--border);\n}\nheader button {\n background: linear-gradient(135deg, #38bdf8, #6366f1);\n color: var(--text-inverse);\n border: none;\n border-radius: 10px;\n padding: 10px 14px;\n font-weight: 700;\n cursor: pointer;\n box-shadow: 0 10px 30px var(--shadow-color);\n transition: transform 120ms ease, box-shadow 120ms ease;\n}\nheader button:hover { transform: translateY(-1px); box-shadow: 0 16px 36px var(--shadow-color); }\nheader button:active { transform: translateY(0); }\n/* Theme toggle button */\n.theme-toggle {\n background: var(--selected-bg);\n color: var(--text);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 8px 10px;\n font-size: 16px;\n cursor: pointer;\n transition: background 120ms ease, transform 120ms ease;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 38px;\n height: 38px;\n}\n.theme-toggle:hover { background: var(--hover-bg); transform: scale(1.05); }\n\n.wrap { padding: 12px 16px 12px; }\n.toolbar {\n display: flex;\n gap: 12px;\n align-items: center;\n flex-wrap: wrap;\n margin: 10px 0 12px;\n color: var(--muted);\n font-size: 13px;\n}\n.toolbar button {\n background: rgba(96,165,250,0.12);\n color: var(--text);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 8px 10px;\n font-size: 13px;\n cursor: pointer;\n}\n.toolbar button:hover { background: rgba(96,165,250,0.2); }\n\n.table-box {\n background: var(--table-bg);\n border: 1px solid var(--border);\n border-radius: 12px;\n overflow: auto;\n max-height: calc(100vh - 110px);\n box-shadow: 0 20px 50px var(--shadow-color);\n transition: background 200ms ease, border-color 200ms ease;\n}\ntable {\n border-collapse: collapse;\n width: 100%;\n min-width: 540px;\n table-layout: fixed;\n}\nthead th {\n position: sticky;\n top: 0;\n z-index: 3;\n background: var(--panel-solid) !important;\n color: var(--muted);\n font-size: 12px;\n text-align: center;\n padding: 0;\n border-bottom: 1px solid var(--border);\n border-right: 1px solid var(--border);\n white-space: nowrap;\n transition: background 200ms ease;\n}\nthead th:not(.selected) {\n background: var(--panel-solid) !important;\n}\nthead th:first-child,\ntbody th {\n width: 28px;\n min-width: 28px;\n max-width: 28px;\n}\nthead th .th-inner {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 4px;\n padding: 8px 6px;\n position: relative;\n height: 100%;\n}\nthead th.filtered .th-inner {\n background: linear-gradient(135deg, rgba(96,165,250,0.18), rgba(34,197,94,0.18));\n color: #e5e7eb;\n border-radius: 6px;\n box-shadow: inset 0 -1px 0 rgba(255,255,255,0.05);\n}\nthead th.filtered .th-inner::after {\n content: 'FILTER';\n font-size: 10px;\n color: #c7d2fe;\n background: rgba(99,102,241,0.24);\n border: 1px solid rgba(99,102,241,0.45);\n padding: 1px 6px;\n border-radius: 999px;\n position: absolute;\n bottom: 4px;\n right: 6px;\n}\n.resizer {\n position: absolute;\n right: 2px;\n top: 0;\n width: 6px;\n height: 100%;\n cursor: col-resize;\n user-select: none;\n touch-action: none;\n opacity: 0.6;\n}\n.resizer::after {\n content: '';\n position: absolute;\n top: 10%;\n bottom: 10%;\n left: 2px;\n width: 2px;\n background: rgba(96,165,250,0.6);\n border-radius: 2px;\n opacity: 0;\n transition: opacity 120ms ease;\n}\nthead th:hover .resizer::after { opacity: 1; }\n\n.freeze {\n position: sticky !important;\n background: var(--panel-solid);\n z-index: 4;\n}\n.freeze-row {\n position: sticky !important;\n background: var(--panel-solid);\n}\n.freeze-row.freeze {\n z-index: 6;\n}\nth.freeze-row {\n z-index: 6;\n}\ntbody th {\n position: sticky;\n left: 0;\n z-index: 2;\n background: var(--panel-solid);\n color: var(--muted);\n text-align: right;\n padding: 8px 10px;\n font-size: 12px;\n border-right: 1px solid var(--border);\n border-bottom: 1px solid var(--border);\n transition: background 200ms ease;\n}\ntd {\n padding: 10px 10px;\n border-bottom: 1px solid var(--border);\n border-right: 1px solid var(--border);\n background: var(--row-odd);\n color: var(--text);\n font-size: 13px;\n line-height: 1.45;\n cursor: pointer;\n transition: background 120ms ease, box-shadow 120ms ease;\n position: relative;\n white-space: pre-wrap;\n word-break: break-word;\n max-width: 320px;\n}\ntr:nth-child(even) td:not(.selected):not(.has-comment) { background: var(--row-even); }\ntd:hover:not(.selected) { background: var(--hover-bg); box-shadow: inset 0 0 0 1px rgba(96,165,250,0.25); }\ntd.has-comment { background: rgba(34,197,94,0.12); box-shadow: inset 0 0 0 1px rgba(34,197,94,0.35); }\ntd.selected, tbody th.selected { background: rgba(99,102,241,0.22) !important; box-shadow: inset 0 0 0 1px rgba(99,102,241,0.45); }\n.preview-highlight { background: rgba(167,139,250,0.18) !important; box-shadow: inset 0 0 0 2px rgba(139,92,246,0.35); border-radius: 4px; transition: background 150ms ease, box-shadow 150ms ease; padding-left: 8px; margin-left: -8px; }\nthead th.selected { background: #c7d2fe !important; box-shadow: inset 0 0 0 1px rgba(99,102,241,0.45); }\n[data-theme=\"dark\"] thead th.selected { background: #3730a3 !important; }\nbody.dragging { user-select: none; cursor: crosshair; }\nbody.dragging td, body.dragging tbody th { cursor: crosshair; }\ntbody th { cursor: pointer; }\ntd .dot {\n position: absolute;\n right: 6px;\n top: 6px;\n width: 8px;\n height: 8px;\n border-radius: 99px;\n background: var(--badge);\n box-shadow: 0 0 0 4px rgba(34,197,94,0.15);\n}\n.floating {\n position: absolute;\n z-index: 10;\n background: var(--panel-solid);\n border: 1px solid var(--border);\n border-radius: 12px;\n padding: 12px;\n width: min(420px, calc(100vw - 32px));\n box-shadow: 0 20px 40px var(--shadow-color);\n display: none;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.floating header {\n position: static;\n background: transparent;\n backdrop-filter: none;\n border: none;\n padding: 0 0 8px 0;\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.floating h2 { font-size: 14px; margin: 0; color: var(--text); }\n.floating button {\n margin-left: 8px;\n background: var(--accent);\n color: var(--text-inverse);\n border: 1px solid var(--accent);\n padding: 6px 10px;\n border-radius: 8px;\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n transition: background 120ms ease, opacity 120ms ease;\n}\n.floating button.icon-only {\n width: 32px;\n height: 32px;\n padding: 0;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n font-size: 14px;\n line-height: 1;\n}\n.floating button:hover { opacity: 0.85; }\n.floating textarea {\n width: 100%;\n min-height: 110px;\n resize: vertical;\n border-radius: 8px;\n border: 1px solid var(--border);\n background: var(--input-bg);\n color: var(--text);\n padding: 10px;\n font-size: 13px;\n line-height: 1.4;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.floating textarea:focus {\n outline: none;\n border-color: var(--accent);\n}\n.floating .actions {\n display: flex;\n gap: 8px;\n justify-content: flex-end;\n margin-top: 10px;\n}\n.floating .actions button.primary {\n background: linear-gradient(135deg, #22c55e, #16a34a);\n color: var(--text-inverse);\n border: none;\n font-weight: 700;\n box-shadow: 0 10px 30px rgba(22,163,74,0.35);\n}\n.comment-list {\n position: fixed;\n right: 14px;\n bottom: 14px;\n width: 320px;\n max-height: 60vh;\n overflow: auto;\n border: 1px solid var(--border);\n border-radius: 12px;\n background: var(--card-bg);\n box-shadow: 0 18px 40px var(--shadow-color);\n padding: 12px;\n backdrop-filter: blur(6px);\n transition: opacity 120ms ease, transform 120ms ease, background 200ms ease;\n}\n.comment-list h3 { margin: 0 0 8px 0; font-size: 13px; color: var(--muted); }\n.comment-list ol {\n margin: 0;\n padding-left: 18px;\n color: var(--text);\n font-size: 13px;\n line-height: 1.45;\n}\n.comment-list li { margin-bottom: 6px; }\n.comment-list .hint { color: var(--muted); font-size: 12px; }\n.pill { display: inline-flex; align-items: center; gap: 6px; padding: 4px 8px; border-radius: 999px; background: var(--selected-bg); border: 1px solid var(--border); font-size: 12px; color: var(--text); cursor: pointer; transition: background 150ms ease, border-color 150ms ease; }\n.pill:hover { background: var(--hover-bg); border-color: var(--accent); }\n.pill strong { color: var(--text); font-weight: 700; }\n.comment-list.collapsed {\n opacity: 0;\n pointer-events: none;\n transform: translateY(8px) scale(0.98);\n}\n.md-preview {\n background: var(--input-bg);\n border: 1px solid var(--border);\n border-radius: 12px;\n padding: 14px;\n margin-bottom: 12px;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.md-layout {\n display: flex;\n gap: 16px;\n align-items: stretch;\n margin-top: 8px;\n height: calc(100vh - 80px);\n}\n.md-left {\n flex: 1;\n min-width: 200px;\n overflow-y: auto;\n overflow-x: auto;\n overscroll-behavior: contain;\n}\n.md-left .md-preview {\n max-height: none;\n}\n.md-right {\n flex: 1;\n min-width: 0;\n overflow-y: auto;\n overflow-x: auto;\n overscroll-behavior: contain;\n}\n.md-right .table-box {\n max-width: none;\n min-width: 0;\n max-height: none;\n overflow: visible;\n}\n/* Ensure thead is opaque in md-right to prevent content showing through */\n.md-right thead th {\n background: var(--panel-solid) !important;\n}\n.md-right thead th.selected {\n background: #c7d2fe !important;\n}\n[data-theme=\"dark\"] .md-right thead th {\n background: var(--panel-solid) !important;\n}\n[data-theme=\"dark\"] .md-right thead th.selected {\n background: #3730a3 !important;\n}\n\n/* === Media Sidebar === */\n.media-sidebar {\n display: flex;\n flex-shrink: 0;\n height: calc(100vh - 80px);\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n position: relative;\n z-index: 10;\n max-width: 60%;\n}\n.media-sidebar.hidden {\n display: none;\n}\n.media-sidebar-thumbs {\n width: 96px;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 8px;\n border-right: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n gap: 8px;\n background: var(--panel);\n scrollbar-width: thin;\n scrollbar-color: var(--border) transparent;\n}\n.media-sidebar-thumbs::-webkit-scrollbar {\n width: 4px;\n}\n.media-sidebar-thumbs::-webkit-scrollbar-track {\n background: transparent;\n}\n.media-sidebar-thumbs::-webkit-scrollbar-thumb {\n background: var(--border);\n border-radius: 4px;\n}\n.media-sidebar-thumb {\n width: 80px;\n height: 60px;\n border-radius: 6px;\n border: 2px solid var(--border);\n overflow: hidden;\n cursor: pointer;\n position: relative;\n flex-shrink: 0;\n background: var(--bg);\n transition: border-color 0.2s ease, transform 0.15s ease, box-shadow 0.2s ease;\n}\n.media-sidebar-thumb:hover {\n border-color: var(--accent);\n transform: scale(1.05);\n box-shadow: 0 2px 8px var(--shadow-color);\n}\n.media-sidebar-thumb.active {\n border-color: var(--accent);\n box-shadow: 0 0 0 2px var(--accent), 0 2px 8px var(--shadow-color);\n}\n.media-sidebar-thumb img {\n width: 100%;\n height: 100%;\n object-fit: cover;\n display: block;\n}\n.media-sidebar-thumb svg {\n width: 100%;\n height: 100%;\n display: block;\n}\n.media-sidebar-thumb-video {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #000;\n}\n.media-sidebar-thumb-video video {\n width: 100%;\n height: 100%;\n object-fit: cover;\n}\n.media-sidebar-thumb-video::after {\n content: '';\n position: absolute;\n width: 24px;\n height: 24px;\n background: rgba(255,255,255,0.85);\n border-radius: 50%;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.media-sidebar-thumb-video::before {\n content: '';\n position: absolute;\n z-index: 1;\n width: 0;\n height: 0;\n border-style: solid;\n border-width: 5px 0 5px 9px;\n border-color: transparent transparent transparent #000;\n margin-left: 2px;\n}\n.media-sidebar-thumb-mermaid {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n padding: 2px;\n background: var(--panel);\n overflow: hidden;\n}\n.media-sidebar-thumb-mermaid svg {\n width: 100% !important;\n height: 100% !important;\n max-width: 100%;\n max-height: 100%;\n display: block;\n}\n.media-sidebar-thumb-index {\n position: absolute;\n top: 2px;\n left: 2px;\n background: rgba(0,0,0,0.6);\n color: #fff;\n font-size: 9px;\n font-weight: 600;\n padding: 1px 4px;\n border-radius: 3px;\n line-height: 1.2;\n pointer-events: none;\n z-index: 1;\n}\n.media-sidebar-viewer {\n width: 0;\n overflow: hidden;\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n background: var(--bg);\n position: relative;\n}\n.media-sidebar-viewer.open {\n width: 45vw;\n max-width: calc(100vw - 400px);\n overflow: hidden;\n padding: 16px;\n border-right: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n}\n.media-sidebar-viewer-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n padding-top: 32px;\n}\n.media-sidebar-viewer-content img {\n max-width: 100%;\n max-height: calc(100vh - 170px);\n object-fit: contain;\n border-radius: 8px;\n}\n.media-sidebar-viewer-content video {\n max-width: 100%;\n max-height: calc(100vh - 170px);\n border-radius: 8px;\n background: #000;\n}\n.media-sidebar-viewer-content .viewer-mermaid-wrap {\n width: 100%;\n overflow: auto;\n display: flex;\n justify-content: center;\n background: var(--panel);\n border-radius: 8px;\n padding: 16px;\n}\n.media-sidebar-viewer-content .viewer-mermaid-wrap svg {\n width: 100% !important;\n height: auto !important;\n max-height: calc(100vh - 200px);\n}\n\n/* === Sidebar Rich Viewer: Mermaid zoom/pan/minimap === */\n.sidebar-mermaid-controls {\n display: flex;\n align-items: center;\n gap: 6px;\n padding: 6px 10px;\n background: var(--panel-alpha);\n border: 1px solid var(--border);\n border-radius: 8px;\n margin-bottom: 8px;\n width: 100%;\n box-sizing: border-box;\n}\n.sidebar-mermaid-controls button {\n background: var(--selected-bg);\n border: 1px solid var(--border);\n border-radius: 5px;\n padding: 4px 10px;\n cursor: pointer;\n color: var(--text);\n font-size: 13px;\n line-height: 1;\n transition: background 0.15s ease;\n}\n.sidebar-mermaid-controls button:hover { background: var(--hover-bg); }\n.sidebar-mermaid-controls .sidebar-zoom-info {\n font-size: 11px;\n color: var(--muted);\n min-width: 40px;\n text-align: center;\n user-select: none;\n}\n.sidebar-mermaid-viewport {\n width: 100%;\n flex: 1;\n overflow: hidden;\n position: relative;\n cursor: grab;\n background: var(--panel);\n border-radius: 8px;\n border: 1px solid var(--border);\n}\n.sidebar-mermaid-viewport:active { cursor: grabbing; }\n.sidebar-mermaid-wrapper {\n position: absolute;\n transform-origin: 0 0;\n}\n.sidebar-mermaid-wrapper svg {\n display: block;\n}\n.sidebar-minimap {\n position: absolute;\n bottom: 8px;\n right: 8px;\n width: 140px;\n height: 100px;\n background: var(--panel-alpha);\n border: 1px solid var(--border);\n border-radius: 6px;\n overflow: hidden;\n box-shadow: 0 2px 8px rgba(0,0,0,0.12);\n z-index: 3;\n}\n.sidebar-minimap-content {\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 6px;\n}\n.sidebar-minimap-content svg {\n max-width: 100%;\n max-height: 100%;\n opacity: 0.6;\n}\n.sidebar-minimap-viewport {\n position: absolute;\n border: 2px solid var(--accent);\n background: rgba(102, 126, 234, 0.2);\n pointer-events: none;\n border-radius: 2px;\n}\n\n/* === Sidebar Rich Viewer: Image zoom/pan === */\n.sidebar-image-viewport {\n width: 100%;\n flex: 1;\n overflow: hidden;\n position: relative;\n cursor: grab;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.sidebar-image-viewport.panning { cursor: grabbing; }\n.sidebar-image-viewport img {\n transform-origin: 0 0;\n max-width: none !important;\n max-height: none !important;\n border-radius: 0 !important;\n user-select: none;\n -webkit-user-drag: none;\n}\n.sidebar-zoom-indicator {\n position: absolute;\n bottom: 10px;\n left: 50%;\n transform: translateX(-50%);\n background: rgba(0, 0, 0, 0.65);\n color: #fff;\n font-size: 11px;\n font-weight: 600;\n padding: 3px 10px;\n border-radius: 12px;\n pointer-events: none;\n z-index: 3;\n backdrop-filter: blur(4px);\n transition: opacity 0.3s ease;\n user-select: none;\n}\n.sidebar-zoom-indicator.hidden { opacity: 0; }\n.sidebar-image-hint {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n font-size: 11px;\n color: var(--muted);\n pointer-events: none;\n opacity: 0;\n transition: opacity 0.4s ease;\n text-align: center;\n z-index: 2;\n}\n\n/* === Sidebar Rich Viewer: Video container (timeline uses shared .video-timeline classes) === */\n.sidebar-video-container {\n width: 100%;\n display: flex;\n flex-direction: column;\n gap: 0;\n}\n.sidebar-video-container video {\n width: 100%;\n border-radius: 8px 8px 0 0;\n background: #000;\n max-height: calc(100vh - 260px);\n}\n\n.media-sidebar-viewer-label {\n margin-top: 12px;\n font-size: 12px;\n color: var(--muted);\n text-align: center;\n word-break: break-all;\n}\n.media-sidebar-viewer-close {\n position: absolute;\n top: 8px;\n right: 8px;\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 6px;\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n color: var(--text);\n font-size: 14px;\n z-index: 2;\n transition: background 0.15s ease;\n}\n.media-sidebar-viewer-close:hover {\n background: var(--hover-bg);\n}\n.sidebar-viewer-settings-btn {\n position: absolute;\n top: 8px;\n right: 44px;\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 6px;\n width: 28px;\n height: 28px;\n display: flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n color: var(--text);\n font-size: 14px;\n z-index: 2;\n transition: background 0.15s ease;\n}\n.sidebar-viewer-settings-btn:hover {\n background: var(--hover-bg);\n}\n.sidebar-viewer-settings-btn + .video-settings-panel {\n position: absolute;\n top: 44px;\n right: 8px;\n}\n\n.media-sidebar-toggle {\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 6px 10px;\n cursor: pointer;\n color: var(--text);\n font-size: 14px;\n transition: background 0.15s ease, border-color 0.15s ease;\n display: none;\n}\n.media-sidebar-toggle.has-media {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n}\n.media-sidebar-toggle:hover {\n background: var(--hover-bg);\n border-color: var(--accent);\n}\n.media-sidebar-toggle .toggle-count {\n font-size: 10px;\n font-weight: 700;\n background: var(--accent);\n color: var(--text-inverse);\n padding: 1px 5px;\n border-radius: 8px;\n line-height: 1.4;\n}\n.view-toggle {\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 6px 10px;\n cursor: pointer;\n color: var(--text);\n font-size: 14px;\n transition: background 0.15s ease, border-color 0.15s ease;\n}\n.view-toggle:hover { background: rgba(96,165,250,0.2); }\n.view-toggle.active { background: var(--accent); color: #fff; }\n@media (max-width: 1200px) {\n .media-sidebar-viewer.open {\n width: 40vw;\n max-width: calc(100vw - 350px);\n }\n}\n@media (max-width: 900px) {\n .media-sidebar-thumbs {\n width: 72px;\n }\n .media-sidebar-thumb {\n width: 56px;\n height: 42px;\n }\n .media-sidebar-viewer.open {\n width: 35vw;\n max-width: calc(100vw - 300px);\n }\n}\n@media (prefers-reduced-motion: reduce) {\n .media-sidebar,\n .media-sidebar-viewer,\n .media-sidebar-thumb {\n transition: none !important;\n }\n}\n\n.md-preview h1, .md-preview h2, .md-preview h3, .md-preview h4 {\n margin: 0.4em 0 0.2em;\n}\n/* Heading toggle feature */\n.md-preview .md-heading-toggle {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.md-preview .heading-toggle-icon {\n font-size: 0.6em;\n transition: transform 150ms ease;\n color: var(--muted);\n flex-shrink: 0;\n cursor: pointer;\n padding: 4px 8px;\n margin: -4px 0 -4px -8px;\n border-radius: 4px;\n}\n.md-preview .heading-toggle-icon:hover {\n background: var(--hover-bg);\n color: var(--accent);\n}\n.md-preview .md-heading-toggle.collapsed .heading-toggle-icon {\n transform: rotate(-90deg);\n}\n.md-preview details.heading-toggle {\n margin: 0.2em 0;\n}\n.md-preview details.heading-toggle > summary {\n list-style: none;\n cursor: pointer;\n}\n.md-preview details.heading-toggle > summary::-webkit-details-marker {\n display: none;\n}\n.md-preview details.heading-toggle:not([open]) > .toggle-content {\n display: none;\n}\n.md-preview .heading-section-content {\n /* Content wrapper for collapsible sections */\n}\n.md-preview .heading-section-content.hidden {\n display: none;\n}\n.md-preview p { margin: 0.3em 0; line-height: 1.5; }\n.md-preview img { max-width: 100%; height: auto; border-radius: 8px; }\n.md-preview video.video-preview { max-width: 100%; height: auto; border-radius: 8px; background: #000; }\n.md-preview table video.video-preview {\n display: block;\n width: 100%;\n height: auto;\n}\n.md-preview code { background: rgba(255,255,255,0.08); padding: 2px 4px; border-radius: 4px; }\n.md-preview pre {\n background: var(--code-bg);\n padding: 12px 16px;\n border-radius: 8px;\n overflow: auto;\n border: 1px solid var(--border);\n}\n.md-preview pre code {\n background: none;\n padding: 0;\n font-size: 13px;\n line-height: 1.5;\n}\n.md-preview pre code.hljs {\n background: transparent;\n padding: 0;\n}\n/* YAML Frontmatter table */\n.frontmatter-table {\n margin-bottom: 20px;\n border-radius: 8px;\n overflow: hidden;\n border: 1px solid var(--border);\n background: var(--panel);\n}\n.frontmatter-table table {\n width: 100%;\n border-collapse: collapse;\n table-layout: fixed;\n}\n.frontmatter-table thead th {\n background: linear-gradient(135deg, rgba(147, 51, 234, 0.15), rgba(96, 165, 250, 0.15));\n color: var(--text);\n font-size: 12px;\n font-weight: 600;\n padding: 10px 16px;\n text-align: left;\n border-bottom: 1px solid var(--border);\n}\n.frontmatter-table tbody th {\n background: rgba(147, 51, 234, 0.08);\n color: #c084fc;\n font-weight: 500;\n font-size: 12px;\n padding: 8px 10px;\n text-align: left;\n border-bottom: 1px solid var(--border);\n vertical-align: top;\n}\n.frontmatter-table tbody td {\n padding: 8px 14px;\n font-size: 13px;\n border-bottom: 1px solid var(--border);\n word-break: break-word;\n}\n.frontmatter-table tbody tr:last-child th,\n.frontmatter-table tbody tr:last-child td {\n border-bottom: none;\n}\n.frontmatter-table .fm-tag {\n display: inline-block;\n background: rgba(96, 165, 250, 0.15);\n color: var(--accent);\n padding: 2px 8px;\n border-radius: 12px;\n font-size: 11px;\n margin-right: 4px;\n margin-bottom: 4px;\n}\n.frontmatter-table pre {\n margin: 0;\n background: var(--code-bg);\n padding: 8px;\n border-radius: 4px;\n font-size: 11px;\n}\n/* Reviw questions preview cards */\n.reviw-questions-preview {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.reviw-q-card {\n background: var(--code-bg);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 10px 12px;\n}\n.reviw-q-card.resolved {\n border-left: 3px solid #22c55e;\n}\n.reviw-q-card.pending {\n border-left: 3px solid #f59e0b;\n}\n.reviw-q-header {\n font-size: 12px;\n color: var(--text-dim);\n margin-bottom: 4px;\n}\n.reviw-q-header strong {\n color: var(--accent);\n}\n.reviw-q-question {\n font-size: 13px;\n color: var(--text);\n margin-bottom: 6px;\n}\n.reviw-q-options {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n margin-bottom: 6px;\n}\n.reviw-q-answer {\n font-size: 12px;\n color: #22c55e;\n background: rgba(34, 197, 94, 0.1);\n padding: 4px 8px;\n border-radius: 4px;\n}\n[data-theme=\"light\"] .frontmatter-table tbody th {\n color: #7c3aed;\n}\n/* Table scroll container and indicator */\n.table-scroll-container {\n position: relative;\n margin: 16px 0;\n}\n.table-scroll-wrapper {\n overflow-x: auto;\n border-radius: 8px;\n}\n.scroll-hint {\n text-align: right;\n font-size: 12px;\n color: var(--accent);\n padding: 4px 8px;\n margin-bottom: 4px;\n opacity: 0;\n visibility: hidden;\n transition: opacity 200ms ease;\n}\n.table-scroll-container.can-scroll .scroll-hint {\n opacity: 0.8;\n visibility: visible;\n}\n.table-scroll-container.scrolled-end .scroll-hint {\n opacity: 0;\n visibility: hidden;\n}\n/* Markdown tables in preview */\n.md-preview table:not(.frontmatter-table table) {\n min-width: 100%;\n width: max-content;\n border-collapse: collapse;\n border: 1px solid var(--border);\n border-radius: 8px;\n}\n.md-preview table:not(.frontmatter-table table) th,\n.md-preview table:not(.frontmatter-table table) td {\n padding: 10px 16px;\n text-align: left;\n border-bottom: 1px solid var(--border);\n vertical-align: top;\n word-break: break-word;\n overflow-wrap: anywhere;\n width: auto;\n}\n/* Force equal column widths when colgroup is not specified */\n.md-preview table:not(.frontmatter-table table) colgroup ~ * th,\n.md-preview table:not(.frontmatter-table table) colgroup ~ * td {\n width: auto;\n}\n.md-preview table:not(.frontmatter-table table) td:has(video),\n.md-preview table:not(.frontmatter-table table) td:has(img) {\n padding: 4px;\n line-height: 0;\n}\n.md-preview table:not(.frontmatter-table table) td video,\n.md-preview table:not(.frontmatter-table table) td img {\n width: 100%;\n max-width: 100%;\n height: auto;\n}\n.md-preview table:not(.frontmatter-table table) th {\n background: var(--panel);\n font-weight: 600;\n font-size: 13px;\n}\n.md-preview table:not(.frontmatter-table table) td {\n font-size: 13px;\n}\n.md-preview table:not(.frontmatter-table table) tr:last-child td {\n border-bottom: none;\n}\n.md-preview table:not(.frontmatter-table table) tr:hover td {\n background: var(--hover-bg);\n}\n/* Source table (右ペイン) */\n.table-box table {\n table-layout: fixed;\n width: 100%;\n}\n.table-box th,\n.table-box td {\n word-break: break-word;\n min-width: 140px;\n}\n.table-box th:first-child,\n.table-box td:first-child {\n min-width: 320px;\n max-width: 480px;\n}\n/* Image fullscreen overlay */\n.image-fullscreen-overlay {\n position: fixed;\n inset: 0;\n background: var(--bg);\n z-index: 1001;\n display: none;\n flex-direction: column;\n}\n.image-fullscreen-overlay.visible {\n display: flex;\n}\n.image-fs-content {\n flex: 1;\n overflow: hidden;\n position: relative;\n cursor: grab;\n}\n.image-fs-content:active { cursor: grabbing; }\n.image-fs-content .image-fs-wrapper {\n position: absolute;\n transform-origin: 0 0;\n}\n.image-fs-content .image-fs-wrapper img {\n display: block;\n}\n/* Video fullscreen overlay */\n.video-fullscreen-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.95);\n z-index: 1001;\n display: none;\n justify-content: center;\n align-items: center;\n}\n.video-fullscreen-overlay.visible {\n display: flex;\n}\n.video-close-btn {\n position: absolute;\n top: 14px;\n right: 14px;\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.55);\n border: 1px solid rgba(255, 255, 255, 0.25);\n border-radius: 50%;\n cursor: pointer;\n color: #fff;\n font-size: 18px;\n z-index: 10;\n backdrop-filter: blur(4px);\n transition: background 120ms ease, transform 120ms ease;\n}\n.video-close-btn:hover {\n background: rgba(0, 0, 0, 0.75);\n transform: scale(1.04);\n}\n.video-container {\n width: 90vw;\n height: 90vh;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.video-container video {\n width: 100%;\n height: 100%;\n object-fit: contain;\n border-radius: 8px;\n box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);\n}\n/* Video Timeline - shared base styles (used by both fullscreen and sidebar) */\n.video-timeline {\n background: rgba(0, 0, 0, 0.85);\n display: flex;\n overflow-x: auto;\n backdrop-filter: blur(8px);\n height: 80px;\n padding: 8px;\n gap: 4px;\n}\n.video-timeline::-webkit-scrollbar {\n height: 6px;\n}\n.video-timeline::-webkit-scrollbar-track {\n background: rgba(255, 255, 255, 0.1);\n border-radius: 3px;\n}\n.video-timeline::-webkit-scrollbar-thumb {\n background: rgba(255, 255, 255, 0.3);\n border-radius: 3px;\n}\n.video-timeline::-webkit-scrollbar-thumb:hover {\n background: rgba(255, 255, 255, 0.5);\n}\n/* Fullscreen-specific video timeline positioning */\n.video-container .video-timeline {\n position: absolute;\n bottom: 0;\n left: 0;\n right: 0;\n z-index: 5;\n}\n/* Sidebar-specific video timeline sizing */\n.sidebar-video-container .video-timeline {\n width: 100%;\n height: 72px;\n padding: 6px;\n gap: 3px;\n border-radius: 0 0 8px 8px;\n background: rgba(0, 0, 0, 0.88);\n}\n.sidebar-video-container .video-timeline::-webkit-scrollbar { height: 5px; }\n.sidebar-video-container .video-timeline::-webkit-scrollbar-track { background: rgba(255, 255, 255, 0.08); }\n.sidebar-video-container .video-timeline::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, 0.25); }\n.sidebar-video-container .video-timeline::-webkit-scrollbar-thumb:hover { background: rgba(255, 255, 255, 0.4); }\n.timeline-thumb {\n height: 64px;\n cursor: pointer;\n border: 2px solid transparent;\n border-radius: 4px;\n flex-shrink: 0;\n transition: border-color 0.2s, transform 0.15s;\n opacity: 0.85;\n}\n.sidebar-video-container .timeline-thumb {\n height: 52px;\n opacity: 0.8;\n}\n.timeline-thumb:hover {\n border-color: rgba(59, 130, 246, 0.5);\n opacity: 1;\n transform: scale(1.05);\n}\n.timeline-thumb.active {\n border-color: #3b82f6;\n opacity: 1;\n box-shadow: 0 0 12px rgba(59, 130, 246, 0.5);\n}\n.sidebar-video-container .timeline-thumb.active {\n box-shadow: 0 0 8px rgba(59, 130, 246, 0.4);\n}\n.timeline-loading {\n color: rgba(255, 255, 255, 0.6);\n font-size: 12px;\n padding: 8px 12px;\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.sidebar-video-container .timeline-loading {\n font-size: 11px;\n padding: 6px 10px;\n gap: 6px;\n color: rgba(255, 255, 255, 0.5);\n}\n.timeline-loading::before {\n content: '';\n width: 14px;\n height: 14px;\n border: 2px solid rgba(255, 255, 255, 0.3);\n border-top-color: #3b82f6;\n border-radius: 50%;\n animation: timeline-spin 0.8s linear infinite;\n}\n.sidebar-video-container .timeline-loading::before {\n width: 12px;\n height: 12px;\n border-width: 2px;\n border-color: rgba(255, 255, 255, 0.25);\n border-top-color: #3b82f6;\n}\n@keyframes timeline-spin {\n to { transform: rotate(360deg); }\n}\n.timeline-time {\n position: absolute;\n bottom: 2px;\n right: 4px;\n font-size: 9px;\n color: #fff;\n background: rgba(0, 0, 0, 0.7);\n padding: 1px 4px;\n border-radius: 2px;\n pointer-events: none;\n}\n.sidebar-video-container .timeline-time {\n font-size: 8px;\n right: 3px;\n padding: 1px 3px;\n}\n.timeline-thumb-wrapper {\n position: relative;\n flex-shrink: 0;\n}\n/* Video threshold settings panel */\n.video-settings-btn {\n position: absolute;\n top: 14px;\n right: 64px;\n width: 40px;\n height: 40px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: rgba(0, 0, 0, 0.55);\n border: 1px solid rgba(255, 255, 255, 0.25);\n border-radius: 50%;\n cursor: pointer;\n color: #fff;\n font-size: 18px;\n z-index: 10;\n backdrop-filter: blur(4px);\n transition: background 120ms ease, transform 120ms ease;\n}\n.video-settings-btn:hover {\n background: rgba(0, 0, 0, 0.75);\n transform: scale(1.04);\n}\n.video-settings-panel {\n position: absolute;\n top: 60px;\n right: 14px;\n background: rgba(0, 0, 0, 0.9);\n border: 1px solid rgba(255, 255, 255, 0.2);\n border-radius: 12px;\n padding: 16px;\n z-index: 15;\n min-width: 280px;\n display: none;\n backdrop-filter: blur(8px);\n}\n.video-settings-panel.visible {\n display: block;\n}\n.video-settings-panel h4 {\n margin: 0 0 8px;\n color: #fff;\n font-size: 14px;\n font-weight: 500;\n}\n.video-settings-desc {\n margin: 0 0 12px;\n color: rgba(255, 255, 255, 0.6);\n font-size: 11px;\n line-height: 1.4;\n}\n.video-settings-buttons {\n display: flex;\n gap: 6px;\n margin-bottom: 12px;\n}\n.video-settings-buttons button {\n flex: 1;\n padding: 8px 4px;\n border: 1px solid rgba(255, 255, 255, 0.2);\n border-radius: 6px;\n background: rgba(255, 255, 255, 0.1);\n color: rgba(255, 255, 255, 0.8);\n font-size: 11px;\n cursor: pointer;\n transition: all 120ms ease;\n}\n.video-settings-buttons button:hover {\n background: rgba(255, 255, 255, 0.2);\n border-color: rgba(255, 255, 255, 0.3);\n}\n.video-settings-buttons button.selected {\n background: #3b82f6;\n border-color: #3b82f6;\n color: #fff;\n}\n.video-settings-actions {\n display: flex;\n gap: 8px;\n margin-top: 8px;\n}\n.video-settings-actions button {\n flex: 1;\n padding: 8px 12px;\n border: none;\n border-radius: 6px;\n font-size: 12px;\n cursor: pointer;\n transition: background 120ms ease;\n}\n.video-settings-actions .reset-btn {\n background: rgba(255, 255, 255, 0.15);\n color: #fff;\n}\n.video-settings-actions .reset-btn:hover {\n background: rgba(255, 255, 255, 0.25);\n}\n/* Video Shortcuts Help */\n.video-shortcuts-help {\n opacity: 0.85;\n transition: opacity 0.2s;\n}\n.video-shortcuts-help:hover {\n opacity: 1;\n}\n.video-shortcuts-help .shortcuts-title {\n font-weight: 600;\n font-size: 11px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n margin-bottom: 10px;\n color: rgba(255, 255, 255, 0.7);\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.video-shortcuts-help .shortcuts-title::before {\n content: '\\u2328';\n font-size: 14px;\n}\n.video-shortcuts-help .shortcut-item {\n margin-bottom: 6px;\n display: flex;\n align-items: center;\n gap: 4px;\n flex-wrap: wrap;\n}\n.video-shortcuts-help .shortcut-item:last-child {\n margin-bottom: 0;\n}\n.video-shortcuts-help kbd {\n display: inline-block;\n background: rgba(255, 255, 255, 0.15);\n border: 1px solid rgba(255, 255, 255, 0.25);\n border-radius: 4px;\n padding: 2px 6px;\n font-family: system-ui, -apple-system, sans-serif;\n font-size: 10px;\n font-weight: 500;\n min-width: 18px;\n text-align: center;\n margin-right: 2px;\n}\n/* Reviw Questions Modal */\n.reviw-questions-overlay {\n display: none;\n position: fixed;\n inset: 0;\n background: rgba(0, 0, 0, 0.8);\n z-index: 1100;\n justify-content: center;\n align-items: center;\n}\n.reviw-questions-overlay.visible {\n display: flex;\n}\n.reviw-questions-modal {\n background: var(--card-bg);\n border: 1px solid var(--border);\n border-radius: 16px;\n width: 90%;\n max-width: 600px;\n max-height: 80vh;\n display: flex;\n flex-direction: column;\n box-shadow: 0 25px 80px rgba(0, 0, 0, 0.5);\n}\n.reviw-questions-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 16px 20px;\n border-bottom: 1px solid var(--border);\n}\n.reviw-questions-header h2 {\n margin: 0;\n font-size: 16px;\n font-weight: 600;\n color: var(--text);\n}\n.reviw-questions-header h2 span {\n font-size: 14px;\n color: var(--text-dim);\n font-weight: 400;\n}\n.reviw-questions-close {\n width: 32px;\n height: 32px;\n border: none;\n background: transparent;\n color: var(--text-dim);\n font-size: 18px;\n cursor: pointer;\n border-radius: 8px;\n transition: all 150ms ease;\n}\n.reviw-questions-close:hover {\n background: var(--border);\n color: var(--text);\n}\n.reviw-questions-body {\n flex: 1;\n overflow-y: auto;\n padding: 16px 20px;\n}\n.reviw-questions-footer {\n padding: 12px 20px;\n border-top: 1px solid var(--border);\n display: flex;\n justify-content: flex-end;\n}\n.reviw-questions-later {\n padding: 8px 16px;\n border: 1px solid var(--border);\n background: transparent;\n color: var(--text-dim);\n border-radius: 8px;\n cursor: pointer;\n font-size: 13px;\n transition: all 150ms ease;\n}\n.reviw-questions-later:hover {\n background: var(--border);\n color: var(--text);\n}\n/* Question Item */\n.reviw-question-item {\n margin-bottom: 20px;\n padding-bottom: 20px;\n border-bottom: 1px solid var(--border);\n}\n.reviw-question-item:last-child {\n margin-bottom: 0;\n padding-bottom: 0;\n border-bottom: none;\n}\n.reviw-question-text {\n font-size: 14px;\n color: var(--text);\n margin-bottom: 12px;\n line-height: 1.5;\n}\n.reviw-question-options {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n margin-bottom: 12px;\n}\n.reviw-question-option {\n padding: 8px 14px;\n border: 1px solid var(--border);\n background: transparent;\n color: var(--text);\n border-radius: 8px;\n cursor: pointer;\n font-size: 13px;\n transition: all 150ms ease;\n}\n.reviw-question-option:hover {\n border-color: var(--accent);\n background: rgba(96, 165, 250, 0.1);\n}\n.reviw-question-option.selected {\n border-color: var(--accent);\n background: var(--accent);\n color: var(--text-inverse);\n}\n.reviw-question-input {\n width: 100%;\n padding: 10px 12px;\n border: 1px solid var(--border);\n background: var(--input-bg);\n color: var(--text);\n border-radius: 8px;\n font-size: 13px;\n resize: vertical;\n min-height: 60px;\n}\n.reviw-question-input:focus {\n outline: none;\n border-color: var(--accent);\n}\n.reviw-question-input::placeholder {\n color: var(--text-dim);\n}\n.reviw-check-mark {\n color: #22c55e;\n font-weight: bold;\n}\n.reviw-question-item.answered {\n border-color: #22c55e;\n background: rgba(34, 197, 94, 0.05);\n}\n.reviw-question-submit {\n margin-top: 10px;\n padding: 8px 16px;\n border: none;\n background: var(--accent);\n color: var(--text-inverse);\n border-radius: 8px;\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n transition: all 150ms ease;\n}\n.reviw-question-submit:hover {\n filter: brightness(1.1);\n}\n.reviw-question-submit:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n}\n/* Resolved Section */\n.reviw-resolved-section {\n margin-top: 16px;\n border-top: 1px solid var(--border);\n padding-top: 12px;\n}\n.reviw-resolved-toggle {\n display: flex;\n align-items: center;\n gap: 8px;\n background: none;\n border: none;\n color: var(--text-dim);\n font-size: 13px;\n cursor: pointer;\n padding: 4px 0;\n}\n.reviw-resolved-toggle:hover {\n color: var(--text);\n}\n.reviw-resolved-toggle .arrow {\n transition: transform 150ms ease;\n}\n.reviw-resolved-toggle.open .arrow {\n transform: rotate(90deg);\n}\n.reviw-resolved-list {\n display: none;\n margin-top: 12px;\n}\n.reviw-resolved-list.visible {\n display: block;\n}\n.reviw-resolved-item {\n padding: 10px 12px;\n background: var(--input-bg);\n border-radius: 8px;\n margin-bottom: 8px;\n opacity: 0.7;\n}\n.reviw-resolved-item:last-child {\n margin-bottom: 0;\n}\n.reviw-resolved-q {\n font-size: 12px;\n color: var(--text-dim);\n margin-bottom: 4px;\n}\n.reviw-resolved-a {\n font-size: 13px;\n color: var(--text);\n}\n/* Notice Bar */\n.reviw-questions-bar {\n display: none;\n position: fixed;\n top: 0;\n left: 0;\n right: 0;\n background: var(--accent);\n color: var(--text-inverse);\n padding: 8px 16px;\n font-size: 13px;\n z-index: 1050;\n justify-content: center;\n align-items: center;\n gap: 12px;\n}\n.reviw-questions-bar.visible {\n display: flex;\n}\n.reviw-questions-bar button {\n padding: 4px 12px;\n border: 1px solid rgba(255, 255, 255, 0.3);\n background: rgba(255, 255, 255, 0.1);\n color: var(--text-inverse);\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n transition: all 150ms ease;\n}\n.reviw-questions-bar button:hover {\n background: rgba(255, 255, 255, 0.2);\n}\n/* Adjust layout when bar is visible */\nbody.has-questions-bar header {\n top: 36px;\n}\nbody.has-questions-bar .toolbar,\nbody.has-questions-bar .table-wrap {\n margin-top: 36px;\n}\n/* Copy notification toast */\n.copy-toast {\n position: fixed;\n bottom: 60px;\n left: 50%;\n transform: translateX(-50%) translateY(20px);\n background: var(--accent);\n color: var(--text-inverse);\n padding: 8px 16px;\n border-radius: 8px;\n font-size: 13px;\n opacity: 0;\n pointer-events: none;\n transition: opacity 200ms ease, transform 200ms ease;\n z-index: 1000;\n}\n.copy-toast.visible {\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n}\n@media (max-width: 960px) {\n .md-layout { flex-direction: column; }\n .md-left { max-width: 100%; flex: 1 1 0; min-height: 0; }\n .md-right { display: none; }\n .media-sidebar { display: none; }\n .media-sidebar-toggle { display: none !important; }\n}\n.md-layout.preview-only .md-right { display: none; }\n.md-layout.preview-only .md-left { flex: 1 1 0; min-height: 0; max-width: 100%; }\n.filter-menu {\n position: absolute;\n background: var(--panel-solid);\n border: 1px solid var(--border);\n border-radius: 10px;\n box-shadow: 0 14px 30px var(--shadow-color);\n padding: 8px;\n display: none;\n z-index: 12;\n width: 180px;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.filter-menu button {\n width: 100%;\n display: block;\n margin: 4px 0;\n padding: 8px 10px;\n background: var(--selected-bg);\n border: 1px solid var(--border);\n border-radius: 8px;\n color: var(--text);\n cursor: pointer;\n font-size: 13px;\n text-align: left;\n}\n.filter-menu button:hover { background: var(--hover-bg); }\n.modal-overlay {\n position: fixed;\n inset: 0;\n background: rgba(0,0,0,0.6);\n display: none;\n align-items: center;\n justify-content: center;\n z-index: 100;\n}\n.modal-overlay.visible { display: flex; }\n/* Submit modal: top-right position, no blocking overlay */\n#submit-modal {\n background: transparent;\n pointer-events: none;\n align-items: flex-start;\n justify-content: flex-end;\n}\n#submit-modal.visible { display: flex; }\n#submit-modal .modal-dialog {\n pointer-events: auto;\n margin: 60px 20px 20px 20px; /* top margin avoids header button overlap */\n}\n.modal-dialog {\n background: var(--panel-solid);\n border: 1px solid var(--border);\n border-radius: 14px;\n padding: 20px;\n width: 90%;\n max-width: 480px;\n box-shadow: 0 20px 40px var(--shadow-color);\n transition: background 200ms ease, border-color 200ms ease;\n}\n.modal-dialog h3 { margin: 0 0 12px; font-size: 18px; color: var(--accent); }\n.modal-summary { color: var(--muted); font-size: 13px; margin-bottom: 12px; }\n.modal-dialog label { display: block; font-size: 13px; margin-bottom: 6px; color: var(--muted); }\n.modal-dialog textarea {\n width: 100%;\n min-height: 100px;\n background: var(--input-bg);\n border: 1px solid var(--border);\n border-radius: 8px;\n color: var(--text);\n padding: 10px;\n font-size: 14px;\n resize: vertical;\n box-sizing: border-box;\n transition: background 200ms ease, border-color 200ms ease;\n}\n.modal-dialog textarea:focus { outline: none; border-color: var(--accent); }\n.modal-actions { display: flex; gap: 10px; justify-content: flex-end; margin-top: 16px; }\n.modal-actions button {\n padding: 8px 16px;\n border-radius: 8px;\n border: 1px solid var(--border);\n background: var(--selected-bg);\n color: var(--text);\n cursor: pointer;\n font-size: 14px;\n}\n.modal-actions button:hover { background: var(--hover-bg); }\n.modal-actions button.primary { background: var(--accent); color: var(--text-inverse); border-color: var(--accent); }\n.image-attach-area { margin: 12px 0; }\n.image-attach-area label { display: block; font-size: 12px; color: var(--muted); margin-bottom: 6px; }\n.image-attach-area.image-attach-small { margin: 8px 0; }\n.image-attach-area.image-attach-small label { font-size: 11px; }\n.image-preview-list { display: flex; flex-wrap: wrap; gap: 8px; min-height: 24px; }\n.image-preview-item { position: relative; }\n.image-preview-item img { max-width: 80px; max-height: 60px; border-radius: 4px; border: 1px solid var(--border); object-fit: cover; }\n.image-preview-item .remove-image { position: absolute; top: -6px; right: -6px; width: 18px; height: 18px; border-radius: 50%; background: var(--error, #ef4444); color: #fff; border: none; cursor: pointer; font-size: 12px; line-height: 1; display: flex; align-items: center; justify-content: center; }\n.image-preview-item .remove-image:hover { background: #dc2626; }\n.modal-actions button.primary:hover { background: #7dd3fc; }\n\n.modal-checkboxes { margin: 12px 0; }\n.modal-checkboxes label {\n display: flex;\n align-items: flex-start;\n gap: 8px;\n font-size: 12px;\n color: var(--text);\n margin-bottom: 8px;\n cursor: pointer;\n}\n.modal-checkboxes input[type=\"checkbox\"] {\n margin-top: 2px;\n accent-color: var(--accent);\n}\n\nbody.dragging { user-select: none; cursor: crosshair; }\nbody.dragging .diff-line { cursor: crosshair; }\n@media (max-width: 840px) {\n header { flex-direction: column; align-items: flex-start; }\n .comment-list { width: calc(100% - 24px); right: 12px; }\n}\n/* Mermaid diagram styles */\n.mermaid-container {\n position: relative;\n margin: 16px 0;\n background: var(--panel);\n border: 1px solid var(--border);\n border-radius: 8px;\n padding: 16px;\n overflow: hidden;\n}\n.mermaid-container .mermaid {\n display: flex;\n justify-content: center;\n}\n.mermaid-container .mermaid svg {\n max-width: 100%;\n height: auto;\n cursor: pointer;\n pointer-events: auto;\n}\n.mermaid-error-banner {\n background: #fff3f3;\n color: #c33;\n border: 1px solid #e88;\n border-radius: 4px;\n padding: 6px 10px;\n margin-bottom: 8px;\n font-size: 12px;\n font-weight: 500;\n}\n[data-theme=\"dark\"] .mermaid-error-banner {\n background: #3a1a1a;\n color: #f88;\n border-color: #744;\n}\n.mermaid-fullscreen-btn {\n position: absolute;\n top: 8px;\n right: 8px;\n background: var(--selected-bg);\n border: 1px solid var(--border);\n border-radius: 6px;\n padding: 6px 10px;\n cursor: pointer;\n color: var(--text);\n font-size: 12px;\n z-index: 2;\n display: flex;\n align-items: center;\n gap: 4px;\n}\n.mermaid-fullscreen-btn:hover { background: var(--hover-bg); }\n/* Fullscreen overlay */\n.fullscreen-overlay {\n position: fixed;\n inset: 0;\n background: var(--bg);\n z-index: 1000;\n display: none;\n flex-direction: column;\n}\n.fullscreen-overlay.visible { display: flex; }\n.fullscreen-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 20px;\n background: var(--panel-alpha);\n border-bottom: 1px solid var(--border);\n}\n.fullscreen-header h3 { margin: 0; font-size: 14px; }\n.fullscreen-controls { display: flex; gap: 8px; align-items: center; }\n.fullscreen-controls button {\n background: var(--selected-bg);\n border: 1px solid var(--border);\n border-radius: 6px;\n padding: 6px 12px;\n cursor: pointer;\n color: var(--text);\n font-size: 13px;\n}\n.fullscreen-controls button:hover { background: var(--hover-bg); }\n.fullscreen-controls .zoom-info { font-size: 12px; color: var(--muted); min-width: 50px; text-align: center; }\n.fullscreen-content {\n flex: 1;\n overflow: hidden;\n position: relative;\n cursor: grab;\n}\n.fullscreen-content:active { cursor: grabbing; }\n.fullscreen-content .mermaid-wrapper {\n position: absolute;\n transform-origin: 0 0;\n padding: 40px;\n}\n.fullscreen-content .mermaid svg {\n display: block;\n}\n/* Minimap */\n.minimap {\n position: absolute;\n top: 70px;\n right: 20px;\n width: 200px;\n height: 150px;\n background: var(--panel-alpha);\n border: 1px solid var(--border);\n border-radius: 8px;\n overflow: hidden;\n box-shadow: 0 4px 12px rgba(0,0,0,0.15);\n}\n.minimap-content {\n width: 100%;\n height: 100%;\n box-sizing: border-box;\n display: flex;\n align-items: center;\n justify-content: center;\n padding: 8px;\n}\n.minimap-content svg {\n max-width: 100%;\n max-height: 100%;\n opacity: 0.6;\n}\n.minimap-viewport {\n position: absolute;\n border: 2px solid var(--accent);\n background: rgba(102, 126, 234, 0.2);\n pointer-events: none;\n border-radius: 2px;\n}\n/* Error toast */\n.mermaid-error-toast {\n position: fixed;\n bottom: 20px;\n left: 50%;\n transform: translateX(-50%);\n background: var(--error);\n color: white;\n padding: 12px 24px;\n border-radius: 8px;\n font-size: 13px;\n max-width: 80%;\n z-index: 2000;\n display: none;\n box-shadow: 0 4px 12px rgba(0,0,0,0.3);\n white-space: pre-wrap;\n font-family: monospace;\n}\n.mermaid-error-toast.visible { display: block; }\n\n/* History Panel - Push layout */\nbody { transition: margin-right 0.25s ease; }\nbody.history-open { margin-right: 320px; }\nbody.history-open header { right: 320px; }\nheader { transition: right 0.25s ease; right: 0; }\n\n.history-toggle {\n background: var(--selected-bg);\n color: var(--text);\n border: 1px solid var(--border);\n border-radius: 6px;\n padding: 6px 8px;\n font-size: 14px;\n cursor: pointer;\n width: 34px;\n height: 34px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.history-toggle:hover { background: var(--border); }\n.history-panel {\n position: fixed;\n top: 0;\n right: 0;\n width: 320px;\n height: 100vh;\n background: var(--panel-solid);\n border-left: 1px solid var(--border);\n z-index: 90;\n transform: translateX(100%);\n transition: transform 0.25s ease;\n display: flex;\n flex-direction: column;\n}\n.history-panel.open { transform: translateX(0); }\n.history-panel-header {\n padding: 16px;\n border-bottom: 1px solid var(--border);\n display: flex;\n justify-content: space-between;\n align-items: center;\n}\n.history-panel-header h3 { margin: 0; font-size: 14px; font-weight: 600; }\n.history-panel-close {\n background: transparent;\n border: none;\n color: var(--muted);\n cursor: pointer;\n font-size: 18px;\n padding: 4px;\n}\n.history-panel-close:hover { color: var(--text); }\n.history-panel-body {\n flex: 1;\n overflow-y: auto;\n padding: 12px;\n}\n.history-empty {\n color: var(--muted);\n font-size: 13px;\n text-align: center;\n padding: 40px 20px;\n}\n.history-date-group { margin-bottom: 16px; }\n.history-date {\n font-size: 11px;\n font-weight: 600;\n color: var(--muted);\n margin-bottom: 8px;\n text-transform: uppercase;\n}\n.history-item {\n background: var(--bg);\n border: 1px solid var(--border);\n border-radius: 6px;\n margin-bottom: 8px;\n overflow: hidden;\n}\n.history-item-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 8px 10px;\n background: var(--selected-bg);\n cursor: pointer;\n}\n.history-item-header:hover { background: var(--hover-bg); }\n.history-item-file {\n font-size: 12px;\n font-weight: 600;\n color: var(--text);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 180px;\n}\n.history-item-time { font-size: 10px; color: var(--muted); }\n.history-item-body {\n display: none;\n padding: 10px;\n font-size: 12px;\n border-top: 1px solid var(--border);\n}\n.history-item.expanded .history-item-body { display: block; }\n.history-summary {\n color: var(--text);\n margin-bottom: 8px;\n padding-bottom: 8px;\n border-bottom: 1px solid var(--border);\n}\n.history-summary-label {\n font-size: 10px;\n font-weight: 600;\n color: var(--muted);\n margin-bottom: 4px;\n}\n.history-summary-text { white-space: pre-wrap; line-height: 1.4; }\n.history-comments-label {\n font-size: 10px;\n font-weight: 600;\n color: var(--muted);\n margin-bottom: 6px;\n}\n.history-comment {\n padding: 6px 0;\n border-bottom: 1px solid var(--border);\n}\n.history-comment:last-child { border-bottom: none; }\n.history-comment-line {\n font-size: 10px;\n color: var(--accent);\n font-weight: 600;\n margin-bottom: 2px;\n}\n.history-comment-quote {\n background: rgba(0, 0, 0, 0.3);\n border-left: 2px solid var(--accent);\n padding: 4px 8px;\n margin: 4px 0;\n font-family: 'SF Mono', Monaco, Consolas, monospace;\n font-size: 11px;\n color: var(--muted);\n white-space: pre-wrap;\n word-break: break-all;\n max-height: 80px;\n overflow-y: auto;\n}\n.history-comment-text {\n color: var(--text);\n line-height: 1.4;\n white-space: pre-wrap;\n}\n.history-badge {\n display: inline-block;\n background: var(--accent);\n color: var(--text-inverse);\n font-size: 10px;\n padding: 2px 6px;\n border-radius: 10px;\n margin-left: 6px;\n}\n/* Table scroll container */\n.table-container {\n overflow-x: auto;\n margin: 16px 0;\n border-radius: 8px;\n border: 1px solid var(--border);\n}\n.table-container table {\n margin: 0;\n border: none;\n border-radius: 0;\n}\n.table-container::-webkit-scrollbar {\n height: 6px;\n}\n.table-container::-webkit-scrollbar-track {\n background: var(--bg);\n border-radius: 3px;\n}\n.table-container::-webkit-scrollbar-thumb {\n background: var(--border);\n border-radius: 3px;\n}\n.table-container::-webkit-scrollbar-thumb:hover {\n background: var(--muted);\n}\n/* Media sidebar */\n.media-sidebar {\n display: flex;\n flex-shrink: 0;\n height: calc(100vh - 80px);\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n position: relative;\n z-index: 10;\n max-width: 60%;\n}\n.media-sidebar.hidden { display: none; }\n.media-sidebar-thumbs {\n width: 96px;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 8px;\n border-right: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n gap: 8px;\n background: var(--panel);\n scrollbar-width: thin;\n scrollbar-color: var(--border) transparent;\n}\n.media-sidebar-thumbs::-webkit-scrollbar { width: 4px; }\n.media-sidebar-thumbs::-webkit-scrollbar-track { background: transparent; }\n.media-sidebar-thumbs::-webkit-scrollbar-thumb { background: var(--border); border-radius: 4px; }\n.media-sidebar-thumb {\n width: 80px;\n height: 60px;\n border-radius: 6px;\n border: 2px solid var(--border);\n overflow: hidden;\n cursor: pointer;\n position: relative;\n flex-shrink: 0;\n background: var(--bg);\n transition: border-color 0.2s ease, transform 0.15s ease, box-shadow 0.2s ease;\n}\n.media-sidebar-thumb:hover { border-color: var(--accent); transform: scale(1.05); box-shadow: 0 2px 8px var(--shadow-color); }\n.media-sidebar-thumb.active { border-color: var(--accent); box-shadow: 0 0 0 2px var(--accent), 0 2px 8px var(--shadow-color); }\n.media-sidebar-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }\n.media-sidebar-thumb svg { width: 100%; height: 100%; display: block; }\n.media-sidebar-thumb-video {\n position: relative;\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n background: #000;\n}\n.media-sidebar-thumb-video video { width: 100%; height: 100%; object-fit: cover; }\n.media-sidebar-thumb-video::after {\n content: '';\n position: absolute;\n width: 24px;\n height: 24px;\n background: rgba(255,255,255,0.85);\n border-radius: 50%;\n}\n.media-sidebar-thumb-video::before {\n content: '';\n position: absolute;\n z-index: 1;\n width: 0;\n height: 0;\n border-style: solid;\n border-width: 5px 0 5px 9px;\n border-color: transparent transparent transparent #000;\n margin-left: 2px;\n}\n.media-sidebar-thumb-mermaid {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n padding: 2px;\n background: var(--panel);\n overflow: hidden;\n}\n.media-sidebar-thumb-mermaid svg { width: 100% !important; height: 100% !important; max-width: 100%; max-height: 100%; display: block; }\n.media-sidebar-thumb-index {\n position: absolute;\n top: 2px;\n left: 2px;\n background: rgba(0,0,0,0.6);\n color: #fff;\n font-size: 9px;\n font-weight: 600;\n padding: 1px 4px;\n border-radius: 3px;\n line-height: 1.2;\n pointer-events: none;\n z-index: 1;\n}\n.media-sidebar-viewer {\n width: 0;\n overflow: hidden;\n transition: width 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n background: var(--bg);\n position: relative;\n}\n.media-sidebar-viewer.open {\n width: 45vw;\n max-width: calc(100vw - 400px);\n overflow: hidden;\n padding: 16px;\n border-right: 1px solid var(--border);\n display: flex;\n flex-direction: column;\n}\n.media-sidebar-viewer-close {\n position: absolute;\n top: 8px;\n right: 8px;\n z-index: 2;\n background: var(--selected-bg);\n border: 1px solid var(--border);\n color: var(--text);\n width: 28px;\n height: 28px;\n border-radius: 50%;\n cursor: pointer;\n font-size: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.media-sidebar-viewer-content {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n flex: 1;\n min-height: 0;\n overflow: hidden;\n}\n.media-sidebar-viewer-content img { max-width: 100%; max-height: calc(100vh - 140px); object-fit: contain; border-radius: 8px; }\n.media-sidebar-viewer-content video { max-width: 100%; max-height: calc(100vh - 140px); border-radius: 8px; background: #000; }\n.media-sidebar-viewer-label {\n margin-top: 8px;\n font-size: 12px;\n color: var(--muted);\n text-align: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n}\n.sidebar-zoom-indicator {\n position: absolute;\n bottom: 12px;\n right: 12px;\n background: rgba(0,0,0,0.7);\n color: #fff;\n padding: 4px 8px;\n border-radius: 4px;\n font-size: 11px;\n pointer-events: none;\n transition: opacity 0.3s ease;\n}\n.sidebar-zoom-indicator.hidden { opacity: 0; }\n.sidebar-mermaid-viewport { overflow: hidden; position: relative; cursor: grab; }\n.sidebar-mermaid-wrapper { position: absolute; left: 0; top: 0; transform-origin: 0 0; }\n.sidebar-video-container { width: 100%; }\n.sidebar-video-container video { width: 100%; max-height: calc(100vh - 200px); border-radius: 8px; background: #000; }\n/* Video timeline */\n.video-timeline {\n display: flex;\n gap: 8px;\n padding: 8px;\n overflow-x: auto;\n background: var(--panel);\n border-radius: 8px;\n margin-top: 8px;\n scrollbar-width: thin;\n scrollbar-color: var(--border) transparent;\n}\n.timeline-loading { color: var(--muted); font-size: 12px; padding: 8px; }\n.timeline-thumb-wrapper {\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n cursor: pointer;\n}\n.timeline-thumb {\n width: 80px;\n height: 60px;\n object-fit: cover;\n border-radius: 4px;\n border: 2px solid transparent;\n transition: border-color 0.2s ease;\n}\n.timeline-thumb.active { border-color: var(--accent); }\n.timeline-thumb:hover { border-color: var(--accent); opacity: 0.8; }\n.timeline-time { font-size: 10px; color: var(--muted); }\n/* Fullscreen overlay */\n.fullscreen-overlay {\n display: none;\n position: fixed;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background: rgba(0,0,0,0.9);\n z-index: 1000;\n flex-direction: column;\n}\n.fullscreen-overlay.visible { display: flex; }\n.fullscreen-header {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 12px 16px;\n background: rgba(0,0,0,0.8);\n border-bottom: 1px solid rgba(255,255,255,0.1);\n}\n.fullscreen-header h3 { margin: 0; color: #fff; font-size: 14px; }\n.fullscreen-controls { display: flex; gap: 6px; align-items: center; }\n.fullscreen-controls button {\n background: rgba(255,255,255,0.1);\n border: 1px solid rgba(255,255,255,0.2);\n color: #fff;\n padding: 6px 12px;\n border-radius: 6px;\n cursor: pointer;\n font-size: 12px;\n}\n.fullscreen-controls button:hover { background: rgba(255,255,255,0.2); }\n.fullscreen-controls .zoom-info { color: #fff; font-size: 12px; min-width: 40px; text-align: center; }\n@media (max-width: 960px) {\n .media-sidebar { display: none !important; }\n .media-sidebar-toggle { display: none !important; }\n}");
|
|
3873
3929
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</style></head><body>");
|
|
3874
3930
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<header><div class=\"meta\">");
|
|
3875
3931
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<h1>");
|
|
@@ -4133,15 +4189,38 @@ function _M0FP36kazuph5reviw4core21build__script__footer(buf, port, mode, filena
|
|
|
4133
4189
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<script src=\"https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.min.js\"></script>");
|
|
4134
4190
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<script>");
|
|
4135
4191
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "window.__mermaidErrors=[];");
|
|
4136
|
-
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "
|
|
4192
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "window.__collectMermaidErrors=async function(){");
|
|
4193
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "window.__mermaidErrors=[];");
|
|
4194
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "var divs=document.querySelectorAll('.mermaid');");
|
|
4195
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "for(var i=0;i<divs.length;i++){");
|
|
4196
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "var d=divs[i];");
|
|
4197
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "var noSvg=!d.querySelector('svg');");
|
|
4198
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "var errSvg=!!d.querySelector('.error-icon');");
|
|
4199
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "if(noSvg||errSvg){");
|
|
4200
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "var line=parseInt(d.getAttribute('data-source-line'))||0;");
|
|
4201
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "var src=d.getAttribute('data-source')||'';");
|
|
4202
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "var msg='Mermaid render failed';");
|
|
4203
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "try{await mermaid.parse(src);}catch(e){msg=e.message||String(e);}");
|
|
4204
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "console.error('[reviw] Mermaid error at line '+line+':',msg);");
|
|
4205
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "window.__mermaidErrors.push({line:line,message:msg,source:src});");
|
|
4206
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "var container=d.closest('.mermaid-container');");
|
|
4207
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "if(container&&!container.querySelector('.mermaid-error-banner')){");
|
|
4208
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "var banner=document.createElement('div');");
|
|
4209
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "banner.className='mermaid-error-banner';");
|
|
4210
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "banner.textContent='\\u26A0 Mermaid error (line '+line+'): '+msg;");
|
|
4211
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "container.prepend(banner);");
|
|
4212
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "}");
|
|
4213
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "}");
|
|
4214
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "}");
|
|
4215
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "};");
|
|
4137
4216
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "mermaid.initialize({startOnLoad:false,logLevel:0,theme:document.documentElement.getAttribute('data-theme')==='light'?'default':'dark',securityLevel:'loose'});");
|
|
4138
|
-
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "mermaid.run().catch(function(e){console.error('[reviw] Mermaid render error:',e);window.
|
|
4217
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "mermaid.run().then(function(){return window.__collectMermaidErrors();}).catch(function(e){console.error('[reviw] Mermaid render error:',e);return window.__collectMermaidErrors();});");
|
|
4139
4218
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "window.__reRenderMermaid=function(theme){");
|
|
4140
|
-
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "
|
|
4219
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "document.querySelectorAll('.mermaid-error-banner').forEach(function(b){b.remove();});");
|
|
4141
4220
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "mermaid.initialize({startOnLoad:false,logLevel:0,theme:theme!=='light'?'dark':'default',securityLevel:'loose'});");
|
|
4142
4221
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "var divs=document.querySelectorAll('.mermaid');");
|
|
4143
4222
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "divs.forEach(function(d){d.removeAttribute('data-processed');d.innerHTML=d.getAttribute('data-source');});");
|
|
4144
|
-
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "if(divs.length>0)mermaid.run({nodes:Array.from(divs)}).catch(function(e){console.error('[reviw] Mermaid render error:',e);window.
|
|
4223
|
+
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "if(divs.length>0)mermaid.run({nodes:Array.from(divs)}).then(function(){return window.__collectMermaidErrors();}).catch(function(e){console.error('[reviw] Mermaid render error:',e);return window.__collectMermaidErrors();});");
|
|
4145
4224
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "};");
|
|
4146
4225
|
_M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</script>");
|
|
4147
4226
|
}
|
|
@@ -4750,23 +4829,23 @@ function _M0FP36kazuph5reviw4core14collect__hunks(lines, start, len) {
|
|
|
4750
4829
|
while (true) {
|
|
4751
4830
|
if (i < len) {
|
|
4752
4831
|
const line = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
4753
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str:
|
|
4832
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c955, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c955.length })) {
|
|
4754
4833
|
const header = _M0FP36kazuph5reviw4core19parse__hunk__header(line);
|
|
4755
4834
|
const hunk_lines = [];
|
|
4756
4835
|
i = i + 1 | 0;
|
|
4757
4836
|
while (true) {
|
|
4758
4837
|
if (i < len) {
|
|
4759
4838
|
const l = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
4760
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str:
|
|
4839
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c957, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c957.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c958, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c958.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c959, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c959.length }))) {
|
|
4761
4840
|
break;
|
|
4762
4841
|
}
|
|
4763
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str:
|
|
4842
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c960, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c960.length })) {
|
|
4764
4843
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core8DiffLineE(hunk_lines, { kind: 1, content: _M0FP36kazuph5reviw4core11safe__slice(l, 1) });
|
|
4765
4844
|
} else {
|
|
4766
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str:
|
|
4845
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c961, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c961.length })) {
|
|
4767
4846
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core8DiffLineE(hunk_lines, { kind: 2, content: _M0FP36kazuph5reviw4core11safe__slice(l, 1) });
|
|
4768
4847
|
} else {
|
|
4769
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str:
|
|
4848
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c962, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c962.length })) {
|
|
4770
4849
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core8DiffLineE(hunk_lines, { kind: 0, content: _M0FP36kazuph5reviw4core11safe__slice(l, 1) });
|
|
4771
4850
|
} else {
|
|
4772
4851
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core8DiffLineE(hunk_lines, { kind: 0, content: l });
|
|
@@ -4781,7 +4860,7 @@ function _M0FP36kazuph5reviw4core14collect__hunks(lines, start, len) {
|
|
|
4781
4860
|
}
|
|
4782
4861
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core8DiffHunkE(hunks, { old_start: header._0, old_count: header._1, new_start: header._2, new_count: header._3, context: header._4, lines: hunk_lines });
|
|
4783
4862
|
} else {
|
|
4784
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str:
|
|
4863
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c963, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c963.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c964, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c964.length })) {
|
|
4785
4864
|
break;
|
|
4786
4865
|
} else {
|
|
4787
4866
|
i = i + 1 | 0;
|
|
@@ -4821,7 +4900,7 @@ function _M0FP36kazuph5reviw4core19extract__git__paths(line) {
|
|
|
4821
4900
|
}
|
|
4822
4901
|
}
|
|
4823
4902
|
function _M0FP36kazuph5reviw4core19strip__diff__prefix(path) {
|
|
4824
|
-
return _M0MP311moonbitlang4core6string6String11has__prefix(path, { str:
|
|
4903
|
+
return _M0MP311moonbitlang4core6string6String11has__prefix(path, { str: _M0FP36kazuph5reviw4core35strip__diff__prefix_2e_2abind_7c966, start: 0, end: _M0FP36kazuph5reviw4core35strip__diff__prefix_2e_2abind_7c966.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(path, { str: _M0FP36kazuph5reviw4core35strip__diff__prefix_2e_2abind_7c967, start: 0, end: _M0FP36kazuph5reviw4core35strip__diff__prefix_2e_2abind_7c967.length }) ? _M0FP36kazuph5reviw4core11safe__slice(path, 2) : path;
|
|
4825
4904
|
}
|
|
4826
4905
|
function _M0FP36kazuph5reviw4core11parse__diff(input) {
|
|
4827
4906
|
const files = [];
|
|
@@ -4831,7 +4910,7 @@ function _M0FP36kazuph5reviw4core11parse__diff(input) {
|
|
|
4831
4910
|
while (true) {
|
|
4832
4911
|
if (i < len) {
|
|
4833
4912
|
const line = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
4834
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str:
|
|
4913
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c969, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c969.length })) {
|
|
4835
4914
|
const paths = _M0FP36kazuph5reviw4core19extract__git__paths(line);
|
|
4836
4915
|
let is_new = false;
|
|
4837
4916
|
let is_deleted = false;
|
|
@@ -4840,19 +4919,19 @@ function _M0FP36kazuph5reviw4core11parse__diff(input) {
|
|
|
4840
4919
|
while (true) {
|
|
4841
4920
|
if (i < len) {
|
|
4842
4921
|
const l = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
|
|
4843
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str:
|
|
4922
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c971, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c971.length })) {
|
|
4844
4923
|
is_new = true;
|
|
4845
4924
|
i = i + 1 | 0;
|
|
4846
4925
|
} else {
|
|
4847
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str:
|
|
4926
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c972, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c972.length })) {
|
|
4848
4927
|
is_deleted = true;
|
|
4849
4928
|
i = i + 1 | 0;
|
|
4850
4929
|
} else {
|
|
4851
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str:
|
|
4930
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c973, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c973.length })) {
|
|
4852
4931
|
is_binary = true;
|
|
4853
4932
|
i = i + 1 | 0;
|
|
4854
4933
|
} else {
|
|
4855
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str:
|
|
4934
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c974, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c974.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c975, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c975.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c976, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c976.length }))) {
|
|
4856
4935
|
i = i + 1 | 0;
|
|
4857
4936
|
} else {
|
|
4858
4937
|
break;
|
|
@@ -4869,11 +4948,11 @@ function _M0FP36kazuph5reviw4core11parse__diff(input) {
|
|
|
4869
4948
|
i = result._1;
|
|
4870
4949
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core8DiffFileE(files, { old_path: paths._0, new_path: paths._1, is_new: is_new, is_deleted: is_deleted, is_binary: is_binary, hunks: result._0 });
|
|
4871
4950
|
} else {
|
|
4872
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str:
|
|
4951
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c977, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c977.length })) {
|
|
4873
4952
|
const old_path = _M0FP36kazuph5reviw4core19strip__diff__prefix(_M0FP36kazuph5reviw4core11safe__slice(line, 4));
|
|
4874
4953
|
let new_path = "";
|
|
4875
4954
|
i = i + 1 | 0;
|
|
4876
|
-
if (i < len && _M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str:
|
|
4955
|
+
if (i < len && _M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c978, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c978.length })) {
|
|
4877
4956
|
new_path = _M0FP36kazuph5reviw4core19strip__diff__prefix(_M0FP36kazuph5reviw4core11safe__slice(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), 4));
|
|
4878
4957
|
i = i + 1 | 0;
|
|
4879
4958
|
}
|
|
@@ -4994,13 +5073,13 @@ function _M0FP36kazuph5reviw4core21csv__data__from__flat(flat) {
|
|
|
4994
5073
|
}
|
|
4995
5074
|
}
|
|
4996
5075
|
function _M0FP36kazuph5reviw6server12exists__sync(_tmp) {
|
|
4997
|
-
return existsSync$
|
|
5076
|
+
return existsSync$2028(_tmp);
|
|
4998
5077
|
}
|
|
4999
5078
|
function _M0FP36kazuph5reviw6server10path__join(_tmp, _tmp$2) {
|
|
5000
|
-
return join$
|
|
5079
|
+
return join$2031(_tmp, _tmp$2);
|
|
5001
5080
|
}
|
|
5002
5081
|
function _M0FP36kazuph5reviw6server16read__file__sync(_tmp, _tmp$2) {
|
|
5003
|
-
return readFileSync$
|
|
5082
|
+
return readFileSync$2034(_tmp, _tmp$2);
|
|
5004
5083
|
}
|
|
5005
5084
|
function _M0FP36kazuph5reviw6server12load__ui__js() {
|
|
5006
5085
|
if (_M0FP36kazuph5reviw6server13ui__js__cache.val.length > 0) {
|
|
@@ -5018,7 +5097,7 @@ function _M0FP36kazuph5reviw6server12load__ui__js() {
|
|
|
5018
5097
|
}
|
|
5019
5098
|
}
|
|
5020
5099
|
function _M0FP36kazuph5reviw6server11os__homedir() {
|
|
5021
|
-
return homedir$
|
|
5100
|
+
return homedir$2036();
|
|
5022
5101
|
}
|
|
5023
5102
|
function _M0FP36kazuph5reviw6server9lock__dir() {
|
|
5024
5103
|
const override_dir = _M0FP36kazuph5reviw6server13get__env__var("REVIW_LOCK_DIR");
|
|
@@ -5029,7 +5108,7 @@ function _M0FP36kazuph5reviw6server10lock__path(port) {
|
|
|
5029
5108
|
return _M0FP36kazuph5reviw6server10path__join(dir, `${_M0IP016_24default__implP311moonbitlang4core7builtin4Show10to__stringGiE(port)}.lock`);
|
|
5030
5109
|
}
|
|
5031
5110
|
function _M0FP36kazuph5reviw6server11mkdir__sync(_tmp, _tmp$2) {
|
|
5032
|
-
return mkdirSync$
|
|
5111
|
+
return mkdirSync$2039(_tmp, _tmp$2);
|
|
5033
5112
|
}
|
|
5034
5113
|
function _M0FP36kazuph5reviw6server17ensure__lock__dir() {
|
|
5035
5114
|
const dir = _M0FP36kazuph5reviw6server9lock__dir();
|
|
@@ -5045,7 +5124,7 @@ function _M0FP36kazuph5reviw6server16is__port__locked(port) {
|
|
|
5045
5124
|
return _M0FP36kazuph5reviw6server12exists__sync(lp);
|
|
5046
5125
|
}
|
|
5047
5126
|
function _M0FP36kazuph5reviw6server17write__file__sync(_tmp, _tmp$2) {
|
|
5048
|
-
return writeFileSync$
|
|
5127
|
+
return writeFileSync$2042(_tmp, _tmp$2);
|
|
5049
5128
|
}
|
|
5050
5129
|
function _M0FP36kazuph5reviw6server11write__lock(port) {
|
|
5051
5130
|
_M0FP36kazuph5reviw6server17ensure__lock__dir();
|
|
@@ -5053,7 +5132,7 @@ function _M0FP36kazuph5reviw6server11write__lock(port) {
|
|
|
5053
5132
|
_M0FP36kazuph5reviw6server17write__file__sync(lp, _M0MP311moonbitlang4core3int3Int18to__string_2einner(port, 10));
|
|
5054
5133
|
}
|
|
5055
5134
|
function _M0FP36kazuph5reviw6server12unlink__sync(_tmp) {
|
|
5056
|
-
return unlinkSync$
|
|
5135
|
+
return unlinkSync$2044(_tmp);
|
|
5057
5136
|
}
|
|
5058
5137
|
function _M0FP36kazuph5reviw6server12remove__lock(port) {
|
|
5059
5138
|
const lp = _M0FP36kazuph5reviw6server10lock__path(port);
|
|
@@ -5083,7 +5162,7 @@ function _M0FP36kazuph5reviw6server21find__available__port(base) {
|
|
|
5083
5162
|
return base;
|
|
5084
5163
|
}
|
|
5085
5164
|
function _M0FP36kazuph5reviw6server13path__dirname(_tmp) {
|
|
5086
|
-
return dirname$
|
|
5165
|
+
return dirname$2048(_tmp);
|
|
5087
5166
|
}
|
|
5088
5167
|
function _M0FP36kazuph5reviw6server16read__file__safe(path) {
|
|
5089
5168
|
return _M0FP36kazuph5reviw6server17try__call__string(() => _M0FP36kazuph5reviw6server16read__file__sync(path, "utf-8"), "");
|
|
@@ -5132,17 +5211,17 @@ function _M0FP36kazuph5reviw6server11parse__port(s) {
|
|
|
5132
5211
|
return n === 0 ? 4989 : n;
|
|
5133
5212
|
}
|
|
5134
5213
|
function _M0FP36kazuph5reviw6server12print__usage() {
|
|
5135
|
-
_M0FP36kazuph5reviw6server12console__log(
|
|
5214
|
+
_M0FP36kazuph5reviw6server12console__log(_M0FP36kazuph5reviw6server26print__usage_2eusage_7c409);
|
|
5136
5215
|
}
|
|
5137
5216
|
function _M0FP36kazuph5reviw6server17read__stdin__sync() {
|
|
5138
5217
|
return _M0FP36kazuph5reviw6server16read__file__sync("/dev/stdin", "utf-8");
|
|
5139
5218
|
}
|
|
5140
5219
|
function _M0FP36kazuph5reviw6server13path__extname(_tmp) {
|
|
5141
|
-
return extname$
|
|
5220
|
+
return extname$2057(_tmp);
|
|
5142
5221
|
}
|
|
5143
5222
|
function _M0FP36kazuph5reviw6server12detect__mode(file_path) {
|
|
5144
5223
|
const ext = _M0FP36kazuph5reviw6server13path__extname(file_path);
|
|
5145
|
-
const ext_lower = _M0MP311moonbitlang4core6string6String11has__prefix(ext, { str:
|
|
5224
|
+
const ext_lower = _M0MP311moonbitlang4core6string6String11has__prefix(ext, { str: _M0FP36kazuph5reviw6server28detect__mode_2e_2abind_7c455, start: 0, end: _M0FP36kazuph5reviw6server28detect__mode_2e_2abind_7c455.length }) ? _M0MP311moonbitlang4core6string6String9to__lower(_M0FP36kazuph5reviw4core11safe__slice(ext, 1)) : _M0MP311moonbitlang4core6string6String9to__lower(ext);
|
|
5146
5225
|
return _M0MP36kazuph5reviw4core8FileMode15from__extension(ext_lower);
|
|
5147
5226
|
}
|
|
5148
5227
|
function _M0FP36kazuph5reviw6server16detect__encoding(buf) {
|
|
@@ -5240,7 +5319,7 @@ function _M0FP36kazuph5reviw6server16detect__encoding(buf) {
|
|
|
5240
5319
|
return "utf-8";
|
|
5241
5320
|
}
|
|
5242
5321
|
function _M0FP36kazuph5reviw6server18read__file__buffer(_tmp) {
|
|
5243
|
-
return readFileSync$
|
|
5322
|
+
return readFileSync$2034(_tmp);
|
|
5244
5323
|
}
|
|
5245
5324
|
function _M0FP36kazuph5reviw6server12decode__file(path, override_enc) {
|
|
5246
5325
|
const buf = _M0FP36kazuph5reviw6server18read__file__buffer(path);
|
|
@@ -5282,19 +5361,19 @@ function _M0FP36kazuph5reviw6server22load__and__build__html(ctx) {
|
|
|
5282
5361
|
return _M0FP36kazuph5reviw4core16build__csv__html(data, ctx.filename, ctx.port);
|
|
5283
5362
|
}
|
|
5284
5363
|
function _M0FP36kazuph5reviw6server14path__basename(_tmp) {
|
|
5285
|
-
return basename$
|
|
5364
|
+
return basename$2067(_tmp);
|
|
5286
5365
|
}
|
|
5287
5366
|
function _M0FP36kazuph5reviw6server13path__resolve(_tmp) {
|
|
5288
|
-
return resolve$
|
|
5367
|
+
return resolve$2069(_tmp);
|
|
5289
5368
|
}
|
|
5290
5369
|
function _M0FP36kazuph5reviw6server25http__create__server__raw(_tmp) {
|
|
5291
|
-
return createServer$
|
|
5370
|
+
return createServer$2074(_tmp);
|
|
5292
5371
|
}
|
|
5293
5372
|
function _M0FP36kazuph5reviw6server14create__server(handler) {
|
|
5294
5373
|
return _M0FP36kazuph5reviw6server25http__create__server__raw(handler);
|
|
5295
5374
|
}
|
|
5296
5375
|
function _M0FP36kazuph5reviw6server22write__file__sync__buf(_tmp, _tmp$2) {
|
|
5297
|
-
return writeFileSync$
|
|
5376
|
+
return writeFileSync$2042(_tmp, _tmp$2);
|
|
5298
5377
|
}
|
|
5299
5378
|
function _M0FP36kazuph5reviw6server16base64__to__file(data, dir, index) {
|
|
5300
5379
|
const ext = _M0FP36kazuph5reviw6server20extract__base64__ext(data);
|
|
@@ -5328,7 +5407,7 @@ function _M0FP36kazuph5reviw6server20ensure__history__dir() {
|
|
|
5328
5407
|
}
|
|
5329
5408
|
}
|
|
5330
5409
|
function _M0FP36kazuph5reviw6server20crypto__create__hash(_tmp) {
|
|
5331
|
-
return createHash$
|
|
5410
|
+
return createHash$2090(_tmp);
|
|
5332
5411
|
}
|
|
5333
5412
|
function _M0FP36kazuph5reviw6server14crypto__sha256(s) {
|
|
5334
5413
|
return _M0FP36kazuph5reviw6server27hash__update__digest__hex16(_M0FP36kazuph5reviw6server20crypto__create__hash("sha256"), s);
|
|
@@ -5387,7 +5466,7 @@ function _M0FP36kazuph5reviw6server13save__history(file_path, entry_json) {
|
|
|
5387
5466
|
_M0FP36kazuph5reviw6server11chmod__sync(hp, 384);
|
|
5388
5467
|
}
|
|
5389
5468
|
function _M0FP36kazuph5reviw6server13unwatch__file(_tmp) {
|
|
5390
|
-
return unwatchFile$
|
|
5469
|
+
return unwatchFile$2096(_tmp);
|
|
5391
5470
|
}
|
|
5392
5471
|
function _M0FP36kazuph5reviw6server14handle__submit(ctx, body) {
|
|
5393
5472
|
const summary = _M0FP36kazuph5reviw6server19json__parse__string("summary", body);
|
|
@@ -5409,7 +5488,24 @@ function _M0FP36kazuph5reviw6server14handle__submit(ctx, body) {
|
|
|
5409
5488
|
}
|
|
5410
5489
|
}
|
|
5411
5490
|
const answers = _M0FP36kazuph5reviw6server19json__parse__string("reviwAnswers", body);
|
|
5412
|
-
const
|
|
5491
|
+
const raw_merr = _M0FP36kazuph5reviw6server28json__parse__mermaid__errors(body);
|
|
5492
|
+
const mermaid_errors = [];
|
|
5493
|
+
const _len$2 = raw_merr.length;
|
|
5494
|
+
let _tmp$2 = 0;
|
|
5495
|
+
while (true) {
|
|
5496
|
+
const _i = _tmp$2;
|
|
5497
|
+
if (_i < _len$2) {
|
|
5498
|
+
const me = raw_merr[_i];
|
|
5499
|
+
if (me.length >= 2) {
|
|
5500
|
+
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core12MermaidErrorE(mermaid_errors, { line: _M0FP36kazuph5reviw4core16parse__int__safe(_M0MP311moonbitlang4core5array5Array2atGsE(me, 0)), message: _M0MP311moonbitlang4core5array5Array2atGsE(me, 1) });
|
|
5501
|
+
}
|
|
5502
|
+
_tmp$2 = _i + 1 | 0;
|
|
5503
|
+
continue;
|
|
5504
|
+
} else {
|
|
5505
|
+
break;
|
|
5506
|
+
}
|
|
5507
|
+
}
|
|
5508
|
+
const result = { file: ctx.filename, mode: ctx.mode, comments: comments, summary: summary, answers: answers, mermaid_errors: mermaid_errors };
|
|
5413
5509
|
_M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core12ReviewResultE(_M0FP36kazuph5reviw6server12all__results, result);
|
|
5414
5510
|
if (comments.length > 0 || summary.length > 0) {
|
|
5415
5511
|
const entry_buf = _M0MP311moonbitlang4core7builtin13StringBuilder11new_2einner(0);
|
|
@@ -5426,33 +5522,33 @@ function _M0FP36kazuph5reviw6server14handle__submit(ctx, body) {
|
|
|
5426
5522
|
}
|
|
5427
5523
|
const images = _M0FP36kazuph5reviw6server19json__parse__images(body);
|
|
5428
5524
|
const output_dir = _M0FP36kazuph5reviw6server10path__join(_M0FP36kazuph5reviw6server11os__homedir(), ".reviw/outputs");
|
|
5429
|
-
const _len$
|
|
5430
|
-
let _tmp$
|
|
5525
|
+
const _len$3 = images.length;
|
|
5526
|
+
let _tmp$3 = 0;
|
|
5431
5527
|
while (true) {
|
|
5432
|
-
const _i = _tmp$
|
|
5433
|
-
if (_i < _len$
|
|
5528
|
+
const _i = _tmp$3;
|
|
5529
|
+
if (_i < _len$3) {
|
|
5434
5530
|
const img = images[_i];
|
|
5435
5531
|
if (img.length > 0) {
|
|
5436
5532
|
_M0FP36kazuph5reviw6server16base64__to__file(img, output_dir, _i);
|
|
5437
5533
|
}
|
|
5438
|
-
_tmp$
|
|
5534
|
+
_tmp$3 = _i + 1 | 0;
|
|
5439
5535
|
continue;
|
|
5440
5536
|
} else {
|
|
5441
5537
|
break;
|
|
5442
5538
|
}
|
|
5443
5539
|
}
|
|
5444
5540
|
let comment_img_idx = images.length;
|
|
5445
|
-
const _len$
|
|
5446
|
-
let _tmp$
|
|
5541
|
+
const _len$4 = raw_comments.length;
|
|
5542
|
+
let _tmp$4 = 0;
|
|
5447
5543
|
while (true) {
|
|
5448
|
-
const _i = _tmp$
|
|
5449
|
-
if (_i < _len$
|
|
5544
|
+
const _i = _tmp$4;
|
|
5545
|
+
if (_i < _len$4) {
|
|
5450
5546
|
const c = raw_comments[_i];
|
|
5451
5547
|
if (c.length >= 5 && _M0MP311moonbitlang4core5array5Array2atGsE(c, 4).length > 0) {
|
|
5452
5548
|
_M0FP36kazuph5reviw6server16base64__to__file(_M0MP311moonbitlang4core5array5Array2atGsE(c, 4), output_dir, comment_img_idx);
|
|
5453
5549
|
comment_img_idx = comment_img_idx + 1 | 0;
|
|
5454
5550
|
}
|
|
5455
|
-
_tmp$
|
|
5551
|
+
_tmp$4 = _i + 1 | 0;
|
|
5456
5552
|
continue;
|
|
5457
5553
|
} else {
|
|
5458
5554
|
break;
|
|
@@ -5462,11 +5558,11 @@ function _M0FP36kazuph5reviw6server14handle__submit(ctx, body) {
|
|
|
5462
5558
|
if (_M0FP36kazuph5reviw6server12all__results.length >= _M0FP36kazuph5reviw6server15expected__count.val) {
|
|
5463
5559
|
const yaml = _M0FP36kazuph5reviw4core17reviews__to__yaml(_M0FP36kazuph5reviw6server12all__results);
|
|
5464
5560
|
_M0FP36kazuph5reviw6server22process__stdout__write(yaml);
|
|
5465
|
-
const _len$
|
|
5466
|
-
let _tmp$
|
|
5561
|
+
const _len$5 = _M0FP36kazuph5reviw6server15active__servers.length;
|
|
5562
|
+
let _tmp$5 = 0;
|
|
5467
5563
|
while (true) {
|
|
5468
|
-
const _i = _tmp$
|
|
5469
|
-
if (_i < _len$
|
|
5564
|
+
const _i = _tmp$5;
|
|
5565
|
+
if (_i < _len$5) {
|
|
5470
5566
|
const srv = _M0FP36kazuph5reviw6server15active__servers[_i];
|
|
5471
5567
|
const _p = srv.file_path;
|
|
5472
5568
|
const _p$2 = "<stdin>";
|
|
@@ -5474,7 +5570,7 @@ function _M0FP36kazuph5reviw6server14handle__submit(ctx, body) {
|
|
|
5474
5570
|
_M0FP36kazuph5reviw6server13unwatch__file(srv.file_path);
|
|
5475
5571
|
}
|
|
5476
5572
|
_M0FP36kazuph5reviw6server12remove__lock(srv.port);
|
|
5477
|
-
_tmp$
|
|
5573
|
+
_tmp$5 = _i + 1 | 0;
|
|
5478
5574
|
continue;
|
|
5479
5575
|
} else {
|
|
5480
5576
|
break;
|
|
@@ -5487,7 +5583,7 @@ function _M0FP36kazuph5reviw6server14handle__submit(ctx, body) {
|
|
|
5487
5583
|
}
|
|
5488
5584
|
}
|
|
5489
5585
|
function _M0FP36kazuph5reviw6server17child__exec__sync(_tmp, _tmp$2) {
|
|
5490
|
-
return execSync$
|
|
5586
|
+
return execSync$2104(_tmp, _tmp$2);
|
|
5491
5587
|
}
|
|
5492
5588
|
function _M0FP36kazuph5reviw6server15command__exists(cmd) {
|
|
5493
5589
|
return _M0FP36kazuph5reviw6server15try__call__bool(() => {
|
|
@@ -5540,10 +5636,10 @@ function _M0FP36kazuph5reviw6server19json__encode__value(s) {
|
|
|
5540
5636
|
return buf.val;
|
|
5541
5637
|
}
|
|
5542
5638
|
function _M0FP36kazuph5reviw6server17fs__mkdtemp__sync(_tmp) {
|
|
5543
|
-
return mkdtempSync$
|
|
5639
|
+
return mkdtempSync$2108(_tmp);
|
|
5544
5640
|
}
|
|
5545
5641
|
function _M0FP36kazuph5reviw6server10os__tmpdir() {
|
|
5546
|
-
return tmpdir$
|
|
5642
|
+
return tmpdir$2109();
|
|
5547
5643
|
}
|
|
5548
5644
|
function _M0FP36kazuph5reviw6server15make__temp__dir() {
|
|
5549
5645
|
return _M0FP36kazuph5reviw6server17fs__mkdtemp__sync(`${_M0FP36kazuph5reviw6server10os__tmpdir()}/reviw-`);
|
|
@@ -5552,13 +5648,13 @@ function _M0FP36kazuph5reviw6server18read__file__base64(path) {
|
|
|
5552
5648
|
return _M0FP36kazuph5reviw6server17try__call__string(() => _M0FP36kazuph5reviw6server15buf__to__base64(_M0FP36kazuph5reviw6server18read__file__buffer(path)), "");
|
|
5553
5649
|
}
|
|
5554
5650
|
function _M0FP36kazuph5reviw6server22fs__readdir__sync__raw(_tmp) {
|
|
5555
|
-
return readdirSync$
|
|
5651
|
+
return readdirSync$2119(_tmp);
|
|
5556
5652
|
}
|
|
5557
5653
|
function _M0FP36kazuph5reviw6server13readdir__sync(path) {
|
|
5558
5654
|
return _M0FP36kazuph5reviw6server24try__call__array__string(() => _M0FP36kazuph5reviw6server22fs__readdir__sync__raw(path));
|
|
5559
5655
|
}
|
|
5560
5656
|
function _M0FP36kazuph5reviw6server12fs__rm__sync(_tmp, _tmp$2) {
|
|
5561
|
-
return rmSync$
|
|
5657
|
+
return rmSync$2128(_tmp, _tmp$2);
|
|
5562
5658
|
}
|
|
5563
5659
|
function _M0FP36kazuph5reviw6server18rm__dir__recursive(path) {
|
|
5564
5660
|
_M0FP36kazuph5reviw6server15try__call__void(() => {
|
|
@@ -5566,13 +5662,13 @@ function _M0FP36kazuph5reviw6server18rm__dir__recursive(path) {
|
|
|
5566
5662
|
});
|
|
5567
5663
|
}
|
|
5568
5664
|
function _M0FP36kazuph5reviw6server12child__spawn(_tmp, _tmp$2, _tmp$3) {
|
|
5569
|
-
return spawn$
|
|
5665
|
+
return spawn$2134(_tmp, _tmp$2, _tmp$3);
|
|
5570
5666
|
}
|
|
5571
5667
|
function _M0FP36kazuph5reviw6server12spawn__async(cmd, args_json) {
|
|
5572
5668
|
return _M0FP36kazuph5reviw6server12child__spawn(cmd, _M0FP36kazuph5reviw6server15js__parse__json(args_json), _M0FP36kazuph5reviw6server21js__spawn__opts__pipe());
|
|
5573
5669
|
}
|
|
5574
5670
|
function _M0FP36kazuph5reviw6server18child__spawn__sync(_tmp, _tmp$2, _tmp$3) {
|
|
5575
|
-
return spawnSync$
|
|
5671
|
+
return spawnSync$2139(_tmp, _tmp$2, _tmp$3);
|
|
5576
5672
|
}
|
|
5577
5673
|
function _M0FP36kazuph5reviw6server19spawn__sync__stdout(cmd, args_json) {
|
|
5578
5674
|
return _M0FP36kazuph5reviw6server17try__call__string(() => _M0FP36kazuph5reviw6server15js__obj__stdout(_M0FP36kazuph5reviw6server18child__spawn__sync(cmd, _M0FP36kazuph5reviw6server15js__parse__json(args_json), _M0FP36kazuph5reviw6server27js__spawn__opts__utf8__pipe())), "");
|
|
@@ -5580,7 +5676,7 @@ function _M0FP36kazuph5reviw6server19spawn__sync__stdout(cmd, args_json) {
|
|
|
5580
5676
|
function _M0FP36kazuph5reviw6server23handle__video__timeline(ctx, url, res) {
|
|
5581
5677
|
const video_path = _M0FP36kazuph5reviw6server19parse__query__param(url, "path");
|
|
5582
5678
|
const scene_str = _M0FP36kazuph5reviw6server19parse__query__param(url, "scene");
|
|
5583
|
-
if (_M0MP311moonbitlang4core6string6String8contains(video_path, { str:
|
|
5679
|
+
if (_M0MP311moonbitlang4core6string6String8contains(video_path, { str: _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c488, start: 0, end: _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c488.length })) {
|
|
5584
5680
|
_M0FP36kazuph5reviw6server16res__write__head(res, 400, "text/plain");
|
|
5585
5681
|
_M0FP36kazuph5reviw6server8res__end(res, "Invalid path");
|
|
5586
5682
|
return undefined;
|
|
@@ -5625,7 +5721,7 @@ function _M0FP36kazuph5reviw6server23handle__video__timeline(ctx, url, res) {
|
|
|
5625
5721
|
const _i = _tmp;
|
|
5626
5722
|
if (_i < _len) {
|
|
5627
5723
|
const file = files[_i];
|
|
5628
|
-
if (_M0MP311moonbitlang4core6string6String11has__prefix(file, { str:
|
|
5724
|
+
if (_M0MP311moonbitlang4core6string6String11has__prefix(file, { str: _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c491, start: 0, end: _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c491.length }) && _M0MP311moonbitlang4core6string6String11has__suffix(file, { str: _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c492, start: 0, end: _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c492.length })) {
|
|
5629
5725
|
_M0MP311moonbitlang4core5array5Array4pushGsE(scene_files, file);
|
|
5630
5726
|
}
|
|
5631
5727
|
_tmp = _i + 1 | 0;
|
|
@@ -5786,13 +5882,13 @@ function _M0FP36kazuph5reviw6server9index__of(s, target) {
|
|
|
5786
5882
|
return -1;
|
|
5787
5883
|
}
|
|
5788
5884
|
function _M0FP36kazuph5reviw6server14fs__stat__sync(_tmp) {
|
|
5789
|
-
return statSync$
|
|
5885
|
+
return statSync$2154(_tmp);
|
|
5790
5886
|
}
|
|
5791
5887
|
function _M0FP36kazuph5reviw6server14is__file__sync(path) {
|
|
5792
5888
|
return _M0FP36kazuph5reviw6server18js__stat__is__file(_M0FP36kazuph5reviw6server14fs__stat__sync(path));
|
|
5793
5889
|
}
|
|
5794
5890
|
function _M0FP36kazuph5reviw6server30fs__create__read__stream__opts(_tmp, _tmp$2) {
|
|
5795
|
-
return createReadStream$
|
|
5891
|
+
return createReadStream$2158(_tmp, _tmp$2);
|
|
5796
5892
|
}
|
|
5797
5893
|
function _M0FP36kazuph5reviw6server17pipe__file__range(file_path, res, content_type, range_header) {
|
|
5798
5894
|
const stat = _M0FP36kazuph5reviw6server14fs__stat__sync(file_path);
|
|
@@ -5807,7 +5903,7 @@ function _M0FP36kazuph5reviw6server17pipe__file__range(file_path, res, content_t
|
|
|
5807
5903
|
_M0FP36kazuph5reviw6server8js__pipe(stream, res);
|
|
5808
5904
|
}
|
|
5809
5905
|
function _M0FP36kazuph5reviw6server24fs__create__read__stream(_tmp) {
|
|
5810
|
-
return createReadStream$
|
|
5906
|
+
return createReadStream$2158(_tmp);
|
|
5811
5907
|
}
|
|
5812
5908
|
function _M0FP36kazuph5reviw6server24pipe__file__to__response(file_path, res, content_type) {
|
|
5813
5909
|
const stat = _M0FP36kazuph5reviw6server14fs__stat__sync(file_path);
|
|
@@ -5820,8 +5916,8 @@ function _M0FP36kazuph5reviw6server24pipe__file__to__response(file_path, res, co
|
|
|
5820
5916
|
function _M0FP36kazuph5reviw6server19serve__static__file(ctx, url, req, res) {
|
|
5821
5917
|
const qmark = _M0FP36kazuph5reviw6server9index__of(url, 63);
|
|
5822
5918
|
const url_path = qmark >= 0 ? _M0FP36kazuph5reviw4core18safe__slice__range(url, 0, qmark) : url;
|
|
5823
|
-
const relative_path = _M0MP311moonbitlang4core6string6String11has__prefix(url_path, { str:
|
|
5824
|
-
if (_M0MP311moonbitlang4core6string6String8contains(relative_path, { str:
|
|
5919
|
+
const relative_path = _M0MP311moonbitlang4core6string6String11has__prefix(url_path, { str: _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c521, start: 0, end: _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c521.length }) ? _M0FP36kazuph5reviw4core11safe__slice(url_path, 1) : url_path;
|
|
5920
|
+
if (_M0MP311moonbitlang4core6string6String8contains(relative_path, { str: _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c519, start: 0, end: _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c519.length })) {
|
|
5825
5921
|
_M0FP36kazuph5reviw6server16res__write__head(res, 403, "text/plain");
|
|
5826
5922
|
_M0FP36kazuph5reviw6server8res__end(res, "Forbidden");
|
|
5827
5923
|
return undefined;
|
|
@@ -5838,7 +5934,7 @@ function _M0FP36kazuph5reviw6server19serve__static__file(ctx, url, req, res) {
|
|
|
5838
5934
|
if (_M0FP36kazuph5reviw6server12exists__sync(resolved_static) && _M0FP36kazuph5reviw6server14is__file__sync(resolved_static)) {
|
|
5839
5935
|
const ext = _M0MP311moonbitlang4core6string6String9to__lower(_M0FP36kazuph5reviw6server13path__extname(resolved_static));
|
|
5840
5936
|
const content_type = _M0FP36kazuph5reviw6server15get__mime__type(ext);
|
|
5841
|
-
const is_video = _M0MP311moonbitlang4core6string6String11has__prefix(content_type, { str:
|
|
5937
|
+
const is_video = _M0MP311moonbitlang4core6string6String11has__prefix(content_type, { str: _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c520, start: 0, end: _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c520.length });
|
|
5842
5938
|
const range = _M0FP36kazuph5reviw6server18req__range__header(req);
|
|
5843
5939
|
if (is_video && range.length > 0) {
|
|
5844
5940
|
_M0FP36kazuph5reviw6server17pipe__file__range(resolved_static, res, content_type, range);
|
|
@@ -5856,8 +5952,8 @@ function _M0FP36kazuph5reviw6server19serve__static__file(ctx, url, req, res) {
|
|
|
5856
5952
|
function _M0FP36kazuph5reviw6server25serve__static__file__head(ctx, url, res) {
|
|
5857
5953
|
const qmark = _M0FP36kazuph5reviw6server9index__of(url, 63);
|
|
5858
5954
|
const url_path = qmark >= 0 ? _M0FP36kazuph5reviw4core18safe__slice__range(url, 0, qmark) : url;
|
|
5859
|
-
const relative_path = _M0MP311moonbitlang4core6string6String11has__prefix(url_path, { str:
|
|
5860
|
-
if (_M0MP311moonbitlang4core6string6String8contains(relative_path, { str:
|
|
5955
|
+
const relative_path = _M0MP311moonbitlang4core6string6String11has__prefix(url_path, { str: _M0FP36kazuph5reviw6server41serve__static__file__head_2e_2abind_7c523, start: 0, end: _M0FP36kazuph5reviw6server41serve__static__file__head_2e_2abind_7c523.length }) ? _M0FP36kazuph5reviw4core11safe__slice(url_path, 1) : url_path;
|
|
5956
|
+
if (_M0MP311moonbitlang4core6string6String8contains(relative_path, { str: _M0FP36kazuph5reviw6server41serve__static__file__head_2e_2abind_7c522, start: 0, end: _M0FP36kazuph5reviw6server41serve__static__file__head_2e_2abind_7c522.length })) {
|
|
5861
5957
|
_M0FP36kazuph5reviw6server16res__write__head(res, 403, "text/plain");
|
|
5862
5958
|
_M0FP36kazuph5reviw6server8res__end(res, "");
|
|
5863
5959
|
return undefined;
|
|
@@ -5918,7 +6014,7 @@ function _M0FP36kazuph5reviw6server15handle__request(ctx, req, res) {
|
|
|
5918
6014
|
_M0FP36kazuph5reviw6server8res__end(res, history_json);
|
|
5919
6015
|
return;
|
|
5920
6016
|
} else {
|
|
5921
|
-
if (http_method === "GET" && _M0MP311moonbitlang4core6string6String11has__prefix(url, { str:
|
|
6017
|
+
if (http_method === "GET" && _M0MP311moonbitlang4core6string6String11has__prefix(url, { str: _M0FP36kazuph5reviw6server31handle__request_2e_2abind_7c524, start: 0, end: _M0FP36kazuph5reviw6server31handle__request_2e_2abind_7c524.length })) {
|
|
5922
6018
|
_M0FP36kazuph5reviw6server23handle__video__timeline(ctx, url, res);
|
|
5923
6019
|
return;
|
|
5924
6020
|
} else {
|
|
@@ -5989,13 +6085,13 @@ function _M0FP36kazuph5reviw6server28try__activate__existing__tab(url) {
|
|
|
5989
6085
|
}
|
|
5990
6086
|
const chrome_script = `set found to false\ntell application \"System Events\"\n if exists process \"Google Chrome\" then\n tell application \"Google Chrome\"\n set targetUrl to \"${url}\"\n repeat with w in windows\n set tabIndex to 1\n repeat with t in tabs of w\n if URL of t starts with targetUrl then\n set active tab index of w to tabIndex\n set index of w to 1\n activate\n set found to true\n exit repeat\n end if\n set tabIndex to tabIndex + 1\n end repeat\n if found then exit repeat\n end repeat\n end tell\n end if\nend tell\nfound`;
|
|
5991
6087
|
const chrome_result = _M0FP36kazuph5reviw6server19spawn__sync__result("osascript", `[\"-e\", ${_M0FP36kazuph5reviw6server19json__encode__value(chrome_script)}]`);
|
|
5992
|
-
if (_M0MP311moonbitlang4core6string6String8contains(chrome_result, { str:
|
|
6088
|
+
if (_M0MP311moonbitlang4core6string6String8contains(chrome_result, { str: _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c525, start: 0, end: _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c525.length })) {
|
|
5993
6089
|
_M0FP36kazuph5reviw6server12console__log(`Activated existing Chrome tab: ${url}`);
|
|
5994
6090
|
return true;
|
|
5995
6091
|
}
|
|
5996
6092
|
const safari_script = `set found to false\ntell application \"System Events\"\n if exists process \"Safari\" then\n tell application \"Safari\"\n set targetUrl to \"${url}\"\n repeat with w in windows\n repeat with t in tabs of w\n if URL of t starts with targetUrl then\n set current tab of w to t\n set index of w to 1\n activate\n set found to true\n exit repeat\n end if\n end repeat\n if found then exit repeat\n end repeat\n end tell\n end if\nend tell\nfound`;
|
|
5997
6093
|
const safari_result = _M0FP36kazuph5reviw6server19spawn__sync__result("osascript", `[\"-e\", ${_M0FP36kazuph5reviw6server19json__encode__value(safari_script)}]`);
|
|
5998
|
-
if (_M0MP311moonbitlang4core6string6String8contains(safari_result, { str:
|
|
6094
|
+
if (_M0MP311moonbitlang4core6string6String8contains(safari_result, { str: _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c526, start: 0, end: _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c526.length })) {
|
|
5999
6095
|
_M0FP36kazuph5reviw6server12console__log(`Activated existing Safari tab: ${url}`);
|
|
6000
6096
|
return true;
|
|
6001
6097
|
}
|
|
@@ -6071,7 +6167,7 @@ function _M0FP36kazuph5reviw6server19start__http__server(ctx, no_open) {
|
|
|
6071
6167
|
_M0FP36kazuph5reviw6server11try__listen(ctx, ctx.port, 0, no_open);
|
|
6072
6168
|
}
|
|
6073
6169
|
function _M0FP36kazuph5reviw6server11watch__file(_tmp, _tmp$2) {
|
|
6074
|
-
return watchFile$
|
|
6170
|
+
return watchFile$2194(_tmp, _tmp$2);
|
|
6075
6171
|
}
|
|
6076
6172
|
function _M0FP36kazuph5reviw6server19start__file__server(file_path, port, no_open) {
|
|
6077
6173
|
const resolved = _M0FP36kazuph5reviw6server13path__resolve(file_path);
|
|
@@ -6114,11 +6210,11 @@ function _M0FP36kazuph5reviw6server20start__stdin__server(content, port, no_open
|
|
|
6114
6210
|
(() => {
|
|
6115
6211
|
const argv = _M0FP36kazuph5reviw6server9get__argv();
|
|
6116
6212
|
const args = [];
|
|
6117
|
-
const
|
|
6213
|
+
const _end413 = argv.length;
|
|
6118
6214
|
let _tmp = 2;
|
|
6119
6215
|
while (true) {
|
|
6120
6216
|
const i = _tmp;
|
|
6121
|
-
if (i <
|
|
6217
|
+
if (i < _end413) {
|
|
6122
6218
|
_M0MP311moonbitlang4core5array5Array4pushGsE(args, _M0MP311moonbitlang4core5array5Array2atGsE(argv, i));
|
|
6123
6219
|
_tmp = i + 1 | 0;
|
|
6124
6220
|
continue;
|
|
@@ -6157,7 +6253,7 @@ function _M0FP36kazuph5reviw6server20start__stdin__server(content, port, no_open
|
|
|
6157
6253
|
_M0FP36kazuph5reviw6server18encoding__override.val = _M0MP311moonbitlang4core5array5Array2atGsE(args, i);
|
|
6158
6254
|
}
|
|
6159
6255
|
} else {
|
|
6160
|
-
if (!_M0MP311moonbitlang4core6string6String11has__prefix(arg, { str:
|
|
6256
|
+
if (!_M0MP311moonbitlang4core6string6String11has__prefix(arg, { str: _M0FP36kazuph5reviw6server26_2ainit_2a_2e_2abind_7c536, start: 0, end: _M0FP36kazuph5reviw6server26_2ainit_2a_2e_2abind_7c536.length })) {
|
|
6161
6257
|
_M0MP311moonbitlang4core5array5Array4pushGsE(files, arg);
|
|
6162
6258
|
}
|
|
6163
6259
|
}
|