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.
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
- import { dirname as dirname$2025, join as join$2008, resolve as resolve$2046, extname as extname$2034, basename as basename$2044 } from "node:path";
3
- import { spawnSync as spawnSync$2114, execSync as execSync$2079, spawn as spawn$2109 } from "node:child_process";
4
- import { createHash as createHash$2066 } from "node:crypto";
5
- import { createServer as createServer$2051 } from "node:http";
6
- import { tmpdir as tmpdir$2084, homedir as homedir$2013 } from "node:os";
7
- import { statSync as statSync$2129, unwatchFile as unwatchFile$2072, readdirSync as readdirSync$2094, existsSync as existsSync$2005, rmSync as rmSync$2103, mkdtempSync as mkdtempSync$2083, createReadStream as createReadStream$2133, writeFileSync as writeFileSync$2019, unlinkSync as unlinkSync$2021, readFileSync as readFileSync$2011, watchFile as watchFile$2169, mkdirSync as mkdirSync$2016 } from "node:fs";
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 _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c639 = ":";
192
- const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c640 = "#";
193
- const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c641 = "'";
194
- const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c642 = "\"";
195
- const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c643 = "\n";
196
- const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c644 = "[";
197
- const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c645 = "]";
198
- const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c646 = "{";
199
- const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c647 = "}";
200
- const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c648 = ",";
201
- const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c649 = "&";
202
- const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c650 = "*";
203
- const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c651 = "!";
204
- const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c652 = "|";
205
- const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c653 = ">";
206
- const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c654 = "%";
207
- const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c655 = "@";
208
- const _M0FP36kazuph5reviw4core32split__to__lines_2e_2abind_7c680 = "\n";
209
- const _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c693 = "- ";
210
- const _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c694 = " -";
211
- const _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c695 = " ";
212
- const _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c696 = " ";
213
- const _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c698 = "- ";
214
- const _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c699 = " ";
215
- const _M0FP36kazuph5reviw4core39parse__reviw__questions_2e_2abind_7c703 = "- ";
216
- const _M0FP36kazuph5reviw4core39parse__reviw__questions_2e_2abind_7c704 = " ";
217
- const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c719 = "<details";
218
- const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c720 = "<div";
219
- const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c721 = "<section";
220
- const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c722 = "<article";
221
- const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c723 = "<aside";
222
- const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c724 = "<nav";
223
- const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c725 = "<header";
224
- const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c726 = "<footer";
225
- const _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c728 = "#";
226
- const _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c729 = "```";
227
- const _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c730 = ">";
228
- const _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c731 = "- ";
229
- const _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c732 = "* ";
230
- const _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c733 = "<";
231
- const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c734 = "graph ";
232
- const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c735 = "flowchart ";
233
- const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c736 = "sequenceDiagram";
234
- const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c737 = "classDiagram";
235
- const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c738 = "stateDiagram";
236
- const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c739 = "erDiagram";
237
- const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c740 = "journey";
238
- const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c741 = "gantt";
239
- const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c742 = "pie";
240
- const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c743 = "gitGraph";
241
- const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c744 = "mindmap";
242
- const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c745 = "timeline";
243
- const _M0FP36kazuph5reviw4core36is__table__separator_2e_2abind_7c746 = "|";
244
- const _M0FP36kazuph5reviw4core36is__table__separator_2e_2abind_7c747 = "-";
245
- const _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c760 = "|";
246
- const _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c761 = "|";
247
- const _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c762 = "|";
248
- const _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c759 = "|";
249
- const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c763 = ".mp4";
250
- const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c764 = ".webm";
251
- const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c765 = ".mov";
252
- const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c766 = ".avi";
253
- const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c767 = ".mkv";
254
- const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c768 = ".m4v";
255
- const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c769 = ".ogv";
256
- const _M0FP36kazuph5reviw4core30render__inline_2e_2abind_7c775 = "javascript:";
257
- const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c788 = "expression(";
258
- const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c789 = "url(";
259
- const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c790 = "-moz-binding";
260
- const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c791 = "behavior:";
261
- const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c792 = "behaviour:";
262
- const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c793 = "javascript:";
263
- const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c794 = "vbscript:";
264
- const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c795 = "@import";
265
- const _M0FP36kazuph5reviw4core40is__event__handler__attr_2e_2abind_7c796 = "on";
266
- const _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c797 = "javascript:";
267
- const _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c798 = "data:text/html";
268
- const _M0FP36kazuph5reviw4core30sanitize__html_2e_2abind_7c814 = ">";
269
- const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c816 = "<";
270
- const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c818 = "<summary>";
271
- const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c819 = "</details>";
272
- const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c821 = "</details>";
273
- const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c822 = "<details";
274
- const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c826 = "#";
275
- const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c827 = "```";
276
- const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c829 = "```";
277
- const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c830 = ">";
278
- const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c832 = ">";
279
- const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c835 = "- ";
280
- const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c836 = "* ";
281
- const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c841 = "- ";
282
- const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c842 = "* ";
283
- const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c838 = "[ ] ";
284
- const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c839 = "[x] ";
285
- const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c840 = "[X] ";
286
- const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c849 = "|";
287
- const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c934 = "@@ ";
288
- const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c936 = "@@ ";
289
- const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c937 = "diff ";
290
- const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c938 = "--- ";
291
- const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c939 = "+";
292
- const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c940 = "-";
293
- const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c941 = " ";
294
- const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c942 = "diff ";
295
- const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c943 = "--- ";
296
- const _M0FP36kazuph5reviw4core35strip__diff__prefix_2e_2abind_7c945 = "a/";
297
- const _M0FP36kazuph5reviw4core35strip__diff__prefix_2e_2abind_7c946 = "b/";
298
- const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c948 = "diff --git ";
299
- const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c950 = "new file mode";
300
- const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c951 = "deleted file mode";
301
- const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c952 = "Binary files";
302
- const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c953 = "index ";
303
- const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c954 = "--- ";
304
- const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c955 = "+++ ";
305
- const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c956 = "--- ";
306
- const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c957 = "+++ ";
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 _M0FP36kazuph5reviw6server26print__usage_2eusage_7c402 = "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";
310
- const _M0FP36kazuph5reviw6server28detect__mode_2e_2abind_7c448 = ".";
311
- const _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c479 = "..";
312
- const _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c482 = "scene_";
313
- const _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c483 = ".jpg";
314
- const _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c512 = "/";
315
- const _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c510 = "..";
316
- const _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c511 = "video/";
317
- const _M0FP36kazuph5reviw6server41serve__static__file__head_2e_2abind_7c514 = "/";
318
- const _M0FP36kazuph5reviw6server41serve__static__file__head_2e_2abind_7c513 = "..";
319
- const _M0FP36kazuph5reviw6server31handle__request_2e_2abind_7c515 = "/video-timeline?";
320
- const _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c516 = "true";
321
- const _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c517 = "true";
322
- const _M0FP36kazuph5reviw6server26_2ainit_2a_2e_2abind_7c527 = "-";
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(_x_561, _x_562) {
1951
- switch (_x_561) {
1959
+ function _M0IP36kazuph5reviw4core8FileModeP311moonbitlang4core7builtin2Eq5equal(_x_570, _x_571) {
1960
+ switch (_x_570) {
1952
1961
  case 0: {
1953
- if (_x_562 === 0) {
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 (_x_562 === 1) {
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 (_x_562 === 2) {
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 (_x_562 === 3) {
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 (_x_562 === 4) {
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: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c639, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c639.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c640, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c640.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c641, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c641.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c642, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c642.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c643, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c643.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c644, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c644.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c645, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c645.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c646, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c646.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c647, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c647.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c648, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c648.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c649, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c649.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c650, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c650.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c651, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c651.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c652, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c652.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c653, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c653.length }) || (_M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c654, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c654.length }) || _M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c655, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c655.length }))))))))))))))));
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: _M0FP36kazuph5reviw4core32split__to__lines_2e_2abind_7c680, start: 0, end: _M0FP36kazuph5reviw4core32split__to__lines_2e_2abind_7c680.length });
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 _start452 = start;
2309
- const _end453 = end;
2310
- let _tmp = _start452;
2361
+ const _start453 = start;
2362
+ const _end454 = end;
2363
+ let _tmp = _start453;
2311
2364
  while (true) {
2312
2365
  const i = _tmp;
2313
- if (i <= _end453) {
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: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c693, start: 0, end: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c693.length }) && _M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c694, start: 0, end: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c694.length })) {
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: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c695, start: 0, end: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c695.length }) && !_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c696, start: 0, end: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c696.length })) {
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: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c698, start: 0, end: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c698.length }) && _M0MP311moonbitlang4core6string6String11has__prefix(opt_line, { str: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c699, start: 0, end: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c699.length })) {
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: _M0FP36kazuph5reviw4core39parse__reviw__questions_2e_2abind_7c703, start: 0, end: _M0FP36kazuph5reviw4core39parse__reviw__questions_2e_2abind_7c703.length })) {
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: _M0FP36kazuph5reviw4core39parse__reviw__questions_2e_2abind_7c704, start: 0, end: _M0FP36kazuph5reviw4core39parse__reviw__questions_2e_2abind_7c704.length })) {
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: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c719, start: 0, end: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c719.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c720, start: 0, end: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c720.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c721, start: 0, end: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c721.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c722, start: 0, end: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c722.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c723, start: 0, end: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c723.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c724, start: 0, end: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c724.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c725, start: 0, end: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c725.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c726, start: 0, end: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c726.length })))))));
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: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c728, start: 0, end: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c728.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c729, start: 0, end: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c729.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c730, start: 0, end: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c730.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c731, start: 0, end: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c731.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c732, start: 0, end: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c732.length }) || (_M0FP36kazuph5reviw4core23is__ordered__list__item(line) || (_M0FP36kazuph5reviw4core20is__horizontal__rule(line) || _M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c733, start: 0, end: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c733.length }) && _M0FP36kazuph5reviw4core22is__html__block__start(line)))))));
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: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c734, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c734.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c735, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c735.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c736, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c736.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c737, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c737.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c738, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c738.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c739, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c739.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c740, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c740.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c741, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c741.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c742, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c742.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c743, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c743.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c744, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c744.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c745, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c745.length })))))))))));
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: _M0FP36kazuph5reviw4core36is__table__separator_2e_2abind_7c746, start: 0, end: _M0FP36kazuph5reviw4core36is__table__separator_2e_2abind_7c746.length }) || !_M0MP311moonbitlang4core6string6String8contains(t, { str: _M0FP36kazuph5reviw4core36is__table__separator_2e_2abind_7c747, start: 0, end: _M0FP36kazuph5reviw4core36is__table__separator_2e_2abind_7c747.length })) {
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: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c760, start: 0, end: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c760.length }) && _M0MP311moonbitlang4core6string6String11has__suffix(t, { str: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c761, start: 0, end: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c761.length }) ? _M0FP36kazuph5reviw4core18safe__slice__range(t, 1, t.length - 1 | 0) : _M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c762, start: 0, end: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c762.length }) ? _M0FP36kazuph5reviw4core11safe__slice(t, 1) : t;
2659
- const _it = _M0MP311moonbitlang4core6string6String5split(inner, { str: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c759, start: 0, end: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c759.length });
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: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c763, start: 0, end: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c763.length }) || (_M0MP311moonbitlang4core6string6String11has__suffix(lower, { str: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c764, start: 0, end: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c764.length }) || (_M0MP311moonbitlang4core6string6String11has__suffix(lower, { str: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c765, start: 0, end: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c765.length }) || (_M0MP311moonbitlang4core6string6String11has__suffix(lower, { str: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c766, start: 0, end: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c766.length }) || (_M0MP311moonbitlang4core6string6String11has__suffix(lower, { str: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c767, start: 0, end: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c767.length }) || (_M0MP311moonbitlang4core6string6String11has__suffix(lower, { str: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c768, start: 0, end: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c768.length }) || _M0MP311moonbitlang4core6string6String11has__suffix(lower, { str: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c769, start: 0, end: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c769.length }))))));
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: _M0FP36kazuph5reviw4core30render__inline_2e_2abind_7c775, start: 0, end: _M0FP36kazuph5reviw4core30render__inline_2e_2abind_7c775.length })) {
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: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c788, start: 0, end: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c788.length }) || (_M0MP311moonbitlang4core6string6String8contains(lower, { str: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c789, start: 0, end: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c789.length }) || (_M0MP311moonbitlang4core6string6String8contains(lower, { str: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c790, start: 0, end: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c790.length }) || (_M0MP311moonbitlang4core6string6String8contains(lower, { str: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c791, start: 0, end: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c791.length }) || (_M0MP311moonbitlang4core6string6String8contains(lower, { str: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c792, start: 0, end: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c792.length }) || (_M0MP311moonbitlang4core6string6String8contains(lower, { str: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c793, start: 0, end: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c793.length }) || (_M0MP311moonbitlang4core6string6String8contains(lower, { str: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c794, start: 0, end: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c794.length }) || _M0MP311moonbitlang4core6string6String8contains(lower, { str: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c795, start: 0, end: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c795.length })))))));
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: _M0FP36kazuph5reviw4core40is__event__handler__attr_2e_2abind_7c796, start: 0, end: _M0FP36kazuph5reviw4core40is__event__handler__attr_2e_2abind_7c796.length });
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: _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c797, start: 0, end: _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c797.length })) {
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: _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c798, start: 0, end: _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c798.length })) {
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, "&lt;");
3320
3373
  const tag_content = _M0FP36kazuph5reviw4core18safe__slice__range(input, tag_start + 1 | 0, tag_end);
3321
- const trimmed_content = _M0MP311moonbitlang4core6string6String11has__suffix(tag_content, { str: _M0FP36kazuph5reviw4core30sanitize__html_2e_2abind_7c814, start: 0, end: _M0FP36kazuph5reviw4core30sanitize__html_2e_2abind_7c814.length }) ? _M0FP36kazuph5reviw4core18safe__slice__range(tag_content, 0, tag_content.length - 1 | 0) : tag_content;
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, "&gt;");
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: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c816, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c816.length }) && _M0FP36kazuph5reviw4core22is__html__block__start(line)) {
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: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c818, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c818.length })) {
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: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c819, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c819.length })) {
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: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c821, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c821.length })) {
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: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c822, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c822.length })) {
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: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c826, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c826.length })) {
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: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c827, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c827.length })) {
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: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c829, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c829.length })) {
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: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c830, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c830.length })) {
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: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c832, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c832.length })) {
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: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c835, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c835.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c836, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c836.length })) {
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: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c841, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c841.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c842, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c842.length }))) {
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: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c838, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c838.length })) {
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: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c839, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c839.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(item_text, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c840, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c840.length })) {
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: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c849, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c849.length })) {
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 _end471 = lines.length;
3733
+ const _end472 = lines.length;
3678
3734
  let _tmp = 1;
3679
3735
  while (true) {
3680
3736
  const i = _tmp;
3681
- if (i < _end471) {
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 _end476 = end_idx;
3749
+ const _end477 = end_idx;
3694
3750
  let _tmp$2 = 1;
3695
3751
  while (true) {
3696
3752
  const i = _tmp$2;
3697
- if (i < _end476) {
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 _start485 = content_start;
3718
- const _end486 = lines.length;
3719
- let _tmp = _start485;
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 < _end486) {
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, "mermaid.parseError=function(err,hash){var msg=err.message||err.str||String(err);console.error('[reviw] Mermaid parse error:',msg);window.__mermaidErrors.push({message:msg,hash:hash||null});};");
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.__mermaidErrors.push({message:e.message||String(e),source:''});});");
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, "window.__mermaidErrors=[];");
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.__mermaidErrors.push({message:e.message||String(e),source:''});});");
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: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c934, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c934.length })) {
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: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c936, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c936.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c937, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c937.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c938, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c938.length }))) {
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: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c939, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c939.length })) {
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: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c940, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c940.length })) {
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: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c941, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c941.length })) {
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: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c942, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c942.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c943, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c943.length })) {
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: _M0FP36kazuph5reviw4core35strip__diff__prefix_2e_2abind_7c945, start: 0, end: _M0FP36kazuph5reviw4core35strip__diff__prefix_2e_2abind_7c945.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(path, { str: _M0FP36kazuph5reviw4core35strip__diff__prefix_2e_2abind_7c946, start: 0, end: _M0FP36kazuph5reviw4core35strip__diff__prefix_2e_2abind_7c946.length }) ? _M0FP36kazuph5reviw4core11safe__slice(path, 2) : path;
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: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c948, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c948.length })) {
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: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c950, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c950.length })) {
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: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c951, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c951.length })) {
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: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c952, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c952.length })) {
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: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c953, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c953.length }) || (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c954, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c954.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c955, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c955.length }))) {
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: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c956, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c956.length })) {
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: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c957, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c957.length })) {
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$2005(_tmp);
5076
+ return existsSync$2028(_tmp);
4998
5077
  }
4999
5078
  function _M0FP36kazuph5reviw6server10path__join(_tmp, _tmp$2) {
5000
- return join$2008(_tmp, _tmp$2);
5079
+ return join$2031(_tmp, _tmp$2);
5001
5080
  }
5002
5081
  function _M0FP36kazuph5reviw6server16read__file__sync(_tmp, _tmp$2) {
5003
- return readFileSync$2011(_tmp, _tmp$2);
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$2013();
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$2016(_tmp, _tmp$2);
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$2019(_tmp, _tmp$2);
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$2021(_tmp);
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$2025(_tmp);
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(_M0FP36kazuph5reviw6server26print__usage_2eusage_7c402);
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$2034(_tmp);
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: _M0FP36kazuph5reviw6server28detect__mode_2e_2abind_7c448, start: 0, end: _M0FP36kazuph5reviw6server28detect__mode_2e_2abind_7c448.length }) ? _M0MP311moonbitlang4core6string6String9to__lower(_M0FP36kazuph5reviw4core11safe__slice(ext, 1)) : _M0MP311moonbitlang4core6string6String9to__lower(ext);
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$2011(_tmp);
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$2044(_tmp);
5364
+ return basename$2067(_tmp);
5286
5365
  }
5287
5366
  function _M0FP36kazuph5reviw6server13path__resolve(_tmp) {
5288
- return resolve$2046(_tmp);
5367
+ return resolve$2069(_tmp);
5289
5368
  }
5290
5369
  function _M0FP36kazuph5reviw6server25http__create__server__raw(_tmp) {
5291
- return createServer$2051(_tmp);
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$2019(_tmp, _tmp$2);
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$2066(_tmp);
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$2072(_tmp);
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 result = { file: ctx.filename, mode: ctx.mode, comments: comments, summary: summary, answers: answers };
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$2 = images.length;
5430
- let _tmp$2 = 0;
5525
+ const _len$3 = images.length;
5526
+ let _tmp$3 = 0;
5431
5527
  while (true) {
5432
- const _i = _tmp$2;
5433
- if (_i < _len$2) {
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$2 = _i + 1 | 0;
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$3 = raw_comments.length;
5446
- let _tmp$3 = 0;
5541
+ const _len$4 = raw_comments.length;
5542
+ let _tmp$4 = 0;
5447
5543
  while (true) {
5448
- const _i = _tmp$3;
5449
- if (_i < _len$3) {
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$3 = _i + 1 | 0;
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$4 = _M0FP36kazuph5reviw6server15active__servers.length;
5466
- let _tmp$4 = 0;
5561
+ const _len$5 = _M0FP36kazuph5reviw6server15active__servers.length;
5562
+ let _tmp$5 = 0;
5467
5563
  while (true) {
5468
- const _i = _tmp$4;
5469
- if (_i < _len$4) {
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$4 = _i + 1 | 0;
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$2079(_tmp, _tmp$2);
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$2083(_tmp);
5639
+ return mkdtempSync$2108(_tmp);
5544
5640
  }
5545
5641
  function _M0FP36kazuph5reviw6server10os__tmpdir() {
5546
- return tmpdir$2084();
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$2094(_tmp);
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$2103(_tmp, _tmp$2);
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$2109(_tmp, _tmp$2, _tmp$3);
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$2114(_tmp, _tmp$2, _tmp$3);
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: _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c479, start: 0, end: _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c479.length })) {
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: _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c482, start: 0, end: _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c482.length }) && _M0MP311moonbitlang4core6string6String11has__suffix(file, { str: _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c483, start: 0, end: _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c483.length })) {
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$2129(_tmp);
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$2133(_tmp, _tmp$2);
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$2133(_tmp);
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: _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c512, start: 0, end: _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c512.length }) ? _M0FP36kazuph5reviw4core11safe__slice(url_path, 1) : url_path;
5824
- if (_M0MP311moonbitlang4core6string6String8contains(relative_path, { str: _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c510, start: 0, end: _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c510.length })) {
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: _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c511, start: 0, end: _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c511.length });
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: _M0FP36kazuph5reviw6server41serve__static__file__head_2e_2abind_7c514, start: 0, end: _M0FP36kazuph5reviw6server41serve__static__file__head_2e_2abind_7c514.length }) ? _M0FP36kazuph5reviw4core11safe__slice(url_path, 1) : url_path;
5860
- if (_M0MP311moonbitlang4core6string6String8contains(relative_path, { str: _M0FP36kazuph5reviw6server41serve__static__file__head_2e_2abind_7c513, start: 0, end: _M0FP36kazuph5reviw6server41serve__static__file__head_2e_2abind_7c513.length })) {
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: _M0FP36kazuph5reviw6server31handle__request_2e_2abind_7c515, start: 0, end: _M0FP36kazuph5reviw6server31handle__request_2e_2abind_7c515.length })) {
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: _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c516, start: 0, end: _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c516.length })) {
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: _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c517, start: 0, end: _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c517.length })) {
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$2169(_tmp, _tmp$2);
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 _end406 = argv.length;
6213
+ const _end413 = argv.length;
6118
6214
  let _tmp = 2;
6119
6215
  while (true) {
6120
6216
  const i = _tmp;
6121
- if (i < _end406) {
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: _M0FP36kazuph5reviw6server26_2ainit_2a_2e_2abind_7c527, start: 0, end: _M0FP36kazuph5reviw6server26_2ainit_2a_2e_2abind_7c527.length })) {
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
  }