reviw 1.1.1 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
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";
2
+ import { dirname as dirname$2163, join as join$2143, resolve as resolve$2182, extname as extname$2170, basename as basename$2180 } from "node:path";
3
+ import { spawnSync as spawnSync$2259, execSync as execSync$2224, spawn as spawn$2254 } from "node:child_process";
4
+ import { createHash as createHash$2206 } from "node:crypto";
5
+ import { createServer as createServer$2187 } from "node:http";
6
+ import { tmpdir as tmpdir$2229, homedir as homedir$2148 } from "node:os";
7
+ import { statSync as statSync$2274, unwatchFile as unwatchFile$2212, readdirSync as readdirSync$2239, existsSync as existsSync$2140, rmSync as rmSync$2248, mkdtempSync as mkdtempSync$2228, createReadStream as createReadStream$2278, unlinkSync as unlinkSync$2156, writeFileSync as writeFileSync$2159, readFileSync as readFileSync$2146, watchFile as watchFile$2315, mkdirSync as mkdirSync$2151 } from "node:fs";
8
8
  class $PanicError extends Error {}
9
9
  function $panic() {
10
10
  throw new $PanicError();
@@ -61,13 +61,16 @@ const _M0FP36kazuph5reviw6server16get__script__dir = () => {
61
61
  };
62
62
  const _M0FP36kazuph5reviw6server13get__env__var = (name) => process.env[name] || "";
63
63
  const _M0FP36kazuph5reviw6server22mkdir__recursive__opts = () => ({ recursive: true });
64
+ const _M0FP36kazuph5reviw6server15process__exists = (pid) => { try { process.kill(pid, 0); return true; } catch(e) { return false; } };
65
+ const _M0FP36kazuph5reviw6server17try__call__string = (fn, fb) => { try { return fn(); } catch(e) { return fb; } };
66
+ const _M0FP36kazuph5reviw6server12process__pid = () => process.pid;
64
67
  const _M0FP36kazuph5reviw6server12console__log = (msg) => console.log(msg);
65
68
  const _M0FP36kazuph5reviw6server9get__argv = () => process.argv;
66
69
  const _M0FP36kazuph5reviw6server20parse__json__version = (s) => { try { return JSON.parse(s).version || "unknown"; } catch { return "unknown"; } };
67
- const _M0FP36kazuph5reviw6server17try__call__string = (fn, fb) => { try { return fn(); } catch(e) { return fb; } };
68
70
  const _M0FP36kazuph5reviw6server14is__stdin__tty = () => process.stdin.isTTY || false;
69
71
  const _M0FP36kazuph5reviw6server19on__process__signal = (sig, handler) => process.on(sig, handler);
70
72
  const _M0FP36kazuph5reviw6server13process__exit = (code) => process.exit(code);
73
+ const _M0FP36kazuph5reviw6server8js__null = () => null;
71
74
  const _M0FP36kazuph5reviw6server14decode__buffer = (buf, enc) => {
72
75
  try {
73
76
  if (enc === "utf-8" || enc === "utf8") return buf.toString("utf-8");
@@ -79,6 +82,9 @@ const _M0FP36kazuph5reviw6server10buffer__at = (buf, idx) => buf[idx];
79
82
  const _M0FP36kazuph5reviw6server14buffer__length = (buf) => buf.length;
80
83
  const _M0FP36kazuph5reviw6server9sse__send = (res, event, data) => res.write(`event: ${event}\ndata: ${data}\n\n`);
81
84
  const _M0FP36kazuph5reviw6server11error__code = (err) => err.code || "";
85
+ const _M0FP36kazuph5reviw6server19json__parse__string = (key, s) => { try { return JSON.parse(s)[key] || ""; } catch(e) { return ""; } };
86
+ const _M0FP36kazuph5reviw6server14clear__timeout = (timer) => { if (timer != null) clearTimeout(timer); };
87
+ const _M0FP36kazuph5reviw6server15js__is__nullish = (value) => value == null;
82
88
  const _M0FP36kazuph5reviw6server20buffer__from__base64 = (data) => Buffer.from(data, "base64");
83
89
  const _M0FP36kazuph5reviw6server21extract__base64__data = (data) => {
84
90
  const m = data.match(/^data:image\/(\w+);base64,(.+)$/);
@@ -102,11 +108,11 @@ const _M0FP36kazuph5reviw6server28json__parse__mermaid__errors = (s) => {
102
108
  return (obj.mermaidErrors || []).map(e => [String(e.line || 0), e.message || ""]);
103
109
  } catch(e) { return []; }
104
110
  };
105
- const _M0FP36kazuph5reviw6server19json__parse__string = (key, s) => { try { return JSON.parse(s)[key] || ""; } catch(e) { return ""; } };
106
111
  const _M0FP36kazuph5reviw6server22process__stdout__write = (data) => process.stdout.write(data);
107
112
  const _M0FP36kazuph5reviw6server11chmod__sync = (path, mode) => { try { import("node:fs").then(fs => fs.chmodSync(path, mode)); } catch(e) {} };
108
113
  const _M0FP36kazuph5reviw6server27hash__update__digest__hex16 = (h, d) => h.update(d).digest("hex").slice(0, 16);
109
114
  const _M0FP36kazuph5reviw6server15try__call__void = (fn) => { try { fn(); } catch(e) {} };
115
+ const _M0FP36kazuph5reviw6server12set__timeout = (cb, ms) => setTimeout(cb, ms);
110
116
  const _M0FP36kazuph5reviw6server15js__stdio__pipe = () => ({ stdio: "pipe" });
111
117
  const _M0FP36kazuph5reviw6server15try__call__bool = (fn) => { try { return fn(); } catch(e) { return false; } };
112
118
  const _M0FP36kazuph5reviw6server30on__spawn__close__with__stderr = (proc, handler) => {
@@ -190,146 +196,147 @@ const _M0FP36kazuph5reviw6server22child__spawn__detached = (cmd, args) => {
190
196
  };
191
197
  const _M0FP36kazuph5reviw6server13get__platform = () => process.platform;
192
198
  const _M0FP36kazuph5reviw6server21js__spawn__opts__utf8 = () => ({ encoding: "utf8", timeout: 3000 });
193
- const _M0FP36kazuph5reviw6server14server__listen = (server, port, cb) => server.listen(port, "127.0.0.1", cb);
199
+ const _M0FP36kazuph5reviw6server14server__listen = (server, port, host, cb) => server.listen(port, host, cb);
194
200
  const _M0FP36kazuph5reviw6server17server__on__error = (server, cb) => server.on("error", cb);
195
201
  const _M0FP36kazuph5reviw6server13set__interval = (cb, ms) => setInterval(cb, ms);
196
202
  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 };
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 = "|";
203
+ const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c657 = ":";
204
+ const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c658 = "#";
205
+ const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c659 = "'";
206
+ const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c660 = "\"";
207
+ const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c661 = "\n";
208
+ const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c662 = "[";
209
+ const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c663 = "]";
210
+ const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c664 = "{";
211
+ const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c665 = "}";
212
+ const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c666 = ",";
213
+ const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c667 = "&";
214
+ const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c668 = "*";
215
+ const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c669 = "!";
216
+ const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c670 = "|";
217
+ const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c671 = ">";
218
+ const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c672 = "%";
219
+ const _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c673 = "@";
220
+ const _M0FP36kazuph5reviw4core32split__to__lines_2e_2abind_7c702 = "\n";
221
+ const _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c715 = "- ";
222
+ const _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c716 = " -";
223
+ const _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c717 = " ";
224
+ const _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c718 = " ";
225
+ const _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c720 = "- ";
226
+ const _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c721 = " ";
227
+ const _M0FP36kazuph5reviw4core39parse__reviw__questions_2e_2abind_7c725 = "- ";
228
+ const _M0FP36kazuph5reviw4core39parse__reviw__questions_2e_2abind_7c726 = " ";
229
+ const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c741 = "<details";
230
+ const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c742 = "<div";
231
+ const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c743 = "<section";
232
+ const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c744 = "<article";
233
+ const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c745 = "<aside";
234
+ const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c746 = "<nav";
235
+ const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c747 = "<header";
236
+ const _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c748 = "<footer";
237
+ const _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c750 = "#";
238
+ const _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c751 = "```";
239
+ const _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c752 = ">";
240
+ const _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c753 = "- ";
241
+ const _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c754 = "* ";
242
+ const _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c755 = "<";
243
+ const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c756 = "graph ";
244
+ const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c757 = "flowchart ";
245
+ const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c758 = "sequenceDiagram";
246
+ const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c759 = "classDiagram";
247
+ const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c760 = "stateDiagram";
248
+ const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c761 = "erDiagram";
249
+ const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c762 = "journey";
250
+ const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c763 = "gantt";
251
+ const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c764 = "pie";
252
+ const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c765 = "gitGraph";
253
+ const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c766 = "mindmap";
254
+ const _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c767 = "timeline";
255
+ const _M0FP36kazuph5reviw4core36is__table__separator_2e_2abind_7c768 = "|";
256
+ const _M0FP36kazuph5reviw4core36is__table__separator_2e_2abind_7c769 = "-";
252
257
  const _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c782 = "|";
253
258
  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 = "+++ ";
259
+ const _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c784 = "|";
260
+ const _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c781 = "|";
261
+ const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c785 = ".mp4";
262
+ const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c786 = ".webm";
263
+ const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c787 = ".mov";
264
+ const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c788 = ".avi";
265
+ const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c789 = ".mkv";
266
+ const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c790 = ".m4v";
267
+ const _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c791 = ".ogv";
268
+ const _M0FP36kazuph5reviw4core30render__inline_2e_2abind_7c797 = "javascript:";
269
+ const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c810 = "expression(";
270
+ const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c811 = "url(";
271
+ const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c812 = "-moz-binding";
272
+ const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c813 = "behavior:";
273
+ const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c814 = "behaviour:";
274
+ const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c815 = "javascript:";
275
+ const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c816 = "vbscript:";
276
+ const _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c817 = "@import";
277
+ const _M0FP36kazuph5reviw4core40is__event__handler__attr_2e_2abind_7c818 = "on";
278
+ const _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c819 = "javascript:";
279
+ const _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c820 = "data:text/html";
280
+ const _M0FP36kazuph5reviw4core30sanitize__html_2e_2abind_7c836 = ">";
281
+ const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c838 = "<";
282
+ const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c840 = "<summary>";
283
+ const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c841 = "</details>";
284
+ const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c843 = "</details>";
285
+ const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c844 = "<details";
286
+ const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c848 = "#";
287
+ const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c849 = "```";
288
+ const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c851 = "```";
289
+ const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c852 = ">";
290
+ const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c854 = ">";
291
+ const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c857 = "- ";
292
+ const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c858 = "* ";
293
+ const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c863 = "- ";
294
+ const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c864 = "* ";
295
+ const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c860 = "[ ] ";
296
+ const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c861 = "[x] ";
297
+ const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c862 = "[X] ";
298
+ const _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c871 = "|";
299
+ const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c956 = "@@ ";
300
+ const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c958 = "@@ ";
301
+ const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c959 = "diff ";
302
+ const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c960 = "--- ";
303
+ const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c961 = "+";
304
+ const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c962 = "-";
305
+ const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c963 = " ";
306
+ const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c964 = "diff ";
307
+ const _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c965 = "--- ";
308
+ const _M0FP36kazuph5reviw4core35strip__diff__prefix_2e_2abind_7c967 = "a/";
309
+ const _M0FP36kazuph5reviw4core35strip__diff__prefix_2e_2abind_7c968 = "b/";
310
+ const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c970 = "diff --git ";
311
+ const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c972 = "new file mode";
312
+ const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c973 = "deleted file mode";
313
+ const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c974 = "Binary files";
314
+ const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c975 = "index ";
315
+ const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c976 = "--- ";
316
+ const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c977 = "+++ ";
317
+ const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c978 = "--- ";
318
+ const _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c979 = "+++ ";
313
319
  const _M0FP36kazuph5reviw6server15active__servers = [];
314
320
  const _M0FP36kazuph5reviw6server12all__results = [];
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 = "-";
321
+ const _M0FP36kazuph5reviw6server26print__usage_2eusage_7c449 = "Usage: reviw <file...> [options]\n\nOptions:\n --port <n> Base port (default: 4989)\n --host <addr> Bind address (default: 127.0.0.1, use 0.0.0.0 for remote)\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";
322
+ const _M0FP36kazuph5reviw6server28detect__mode_2e_2abind_7c497 = ".";
323
+ const _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c539 = "..";
324
+ const _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c542 = "scene_";
325
+ const _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c543 = ".jpg";
326
+ const _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c572 = "/";
327
+ const _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c570 = "..";
328
+ const _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c571 = "video/";
329
+ const _M0FP36kazuph5reviw6server41serve__static__file__head_2e_2abind_7c574 = "/";
330
+ const _M0FP36kazuph5reviw6server41serve__static__file__head_2e_2abind_7c573 = "..";
331
+ const _M0FP36kazuph5reviw6server31handle__request_2e_2abind_7c575 = "/video-timeline?";
332
+ const _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c576 = "true";
333
+ const _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c577 = "true";
334
+ const _M0FP36kazuph5reviw6server26_2ainit_2a_2e_2abind_7c589 = "-";
329
335
  const _M0FP36kazuph5reviw6server15expected__count = _M0MP311moonbitlang4core3ref3Ref3newGiE(0);
330
336
  const _M0FP36kazuph5reviw6server18encoding__override = _M0MP311moonbitlang4core3ref3Ref3newGsE("");
331
- const _M0FP311moonbitlang4core7builtin33brute__force__find_2econstr_2f244 = 0;
332
- const _M0FP311moonbitlang4core7builtin43boyer__moore__horspool__find_2econstr_2f230 = 0;
337
+ const _M0FP311moonbitlang4core7builtin33brute__force__find_2econstr_2f247 = 0;
338
+ const _M0FP311moonbitlang4core7builtin43boyer__moore__horspool__find_2econstr_2f233 = 0;
339
+ const _M0FP36kazuph5reviw6server10bind__host = _M0MP311moonbitlang4core3ref3Ref3newGsE("127.0.0.1");
333
340
  const _M0FP36kazuph5reviw6server13ui__js__cache = _M0MP311moonbitlang4core3ref3Ref3newGsE("");
334
341
  const _M0FP311moonbitlang4core7builtin4seed = _M0FP311moonbitlang4core7builtin12random__seed();
335
342
  const _M0FP36kazuph5reviw4core16heading__counter = _M0MP311moonbitlang4core3ref3Ref3newGiE(0);
@@ -339,6 +346,9 @@ function _M0FP311moonbitlang4core5abort5abortGRP311moonbitlang4core6string10Stri
339
346
  function _M0FP311moonbitlang4core5abort5abortGRP36kazuph5reviw6server7JsValueE(msg) {
340
347
  return $panic();
341
348
  }
349
+ function _M0FP311moonbitlang4core5abort5abortGsE(msg) {
350
+ return $panic();
351
+ }
342
352
  function _M0MP311moonbitlang4core7builtin6Hasher8consume4(self, input) {
343
353
  const _p = (self.acc >>> 0) + ((Math.imul(input, -1028477379) | 0) >>> 0) | 0;
344
354
  const _p$2 = 17;
@@ -354,6 +364,9 @@ function _M0FP311moonbitlang4core7builtin5abortGRP311moonbitlang4core6string10St
354
364
  function _M0FP311moonbitlang4core7builtin5abortGRP36kazuph5reviw6server7JsValueE(string, loc) {
355
365
  return _M0FP311moonbitlang4core5abort5abortGRP36kazuph5reviw6server7JsValueE(`${string}\n at ${_M0IP016_24default__implP311moonbitlang4core7builtin4Show10to__stringGRP311moonbitlang4core7builtin9SourceLocE(loc)}\n`);
356
366
  }
367
+ function _M0FP311moonbitlang4core7builtin5abortGsE(string, loc) {
368
+ return _M0FP311moonbitlang4core5abort5abortGsE(`${string}\n at ${_M0IP016_24default__implP311moonbitlang4core7builtin4Show10to__stringGRP311moonbitlang4core7builtin9SourceLocE(loc)}\n`);
369
+ }
357
370
  function _M0MP311moonbitlang4core7builtin13StringBuilder11new_2einner(size_hint) {
358
371
  return { val: "" };
359
372
  }
@@ -1176,7 +1189,7 @@ function _M0FP311moonbitlang4core7builtin28boyer__moore__horspool__find(haystack
1176
1189
  return undefined;
1177
1190
  }
1178
1191
  } else {
1179
- return _M0FP311moonbitlang4core7builtin43boyer__moore__horspool__find_2econstr_2f230;
1192
+ return _M0FP311moonbitlang4core7builtin43boyer__moore__horspool__find_2econstr_2f233;
1180
1193
  }
1181
1194
  }
1182
1195
  function _M0FP311moonbitlang4core7builtin18brute__force__find(haystack, needle) {
@@ -1235,7 +1248,7 @@ function _M0FP311moonbitlang4core7builtin18brute__force__find(haystack, needle)
1235
1248
  return undefined;
1236
1249
  }
1237
1250
  } else {
1238
- return _M0FP311moonbitlang4core7builtin33brute__force__find_2econstr_2f244;
1251
+ return _M0FP311moonbitlang4core7builtin33brute__force__find_2econstr_2f247;
1239
1252
  }
1240
1253
  }
1241
1254
  function _M0MP311moonbitlang4core6string10StringView4find(self, str) {
@@ -1778,6 +1791,124 @@ function _M0MP311moonbitlang4core7builtin3Map11from__arrayGssE(arr) {
1778
1791
  }
1779
1792
  return m;
1780
1793
  }
1794
+ function _M0MP311moonbitlang4core7builtin3Map3getGssE(self, key) {
1795
+ const hash = _M0IP016_24default__implP311moonbitlang4core7builtin4Hash4hashGsE(key);
1796
+ let _tmp = 0;
1797
+ let _tmp$2 = hash & self.capacity_mask;
1798
+ while (true) {
1799
+ const i = _tmp;
1800
+ const idx = _tmp$2;
1801
+ const _tmp$3 = self.entries;
1802
+ $bound_check(_tmp$3, idx);
1803
+ const _bind = _tmp$3[idx];
1804
+ if (_bind === undefined) {
1805
+ return undefined;
1806
+ } else {
1807
+ const _Some = _bind;
1808
+ const _entry = _Some;
1809
+ if (_entry.hash === hash && _entry.key === key) {
1810
+ return _entry.value;
1811
+ }
1812
+ if (i > _entry.psl) {
1813
+ return undefined;
1814
+ }
1815
+ _tmp = i + 1 | 0;
1816
+ _tmp$2 = idx + 1 & self.capacity_mask;
1817
+ continue;
1818
+ }
1819
+ }
1820
+ }
1821
+ function _M0MP311moonbitlang4core7builtin3Map13remove__entryGssE(self, entry) {
1822
+ const _bind = entry.prev;
1823
+ if (_bind === -1) {
1824
+ self.head = entry.next;
1825
+ } else {
1826
+ const _tmp = self.entries;
1827
+ $bound_check(_tmp, _bind);
1828
+ const _p = _tmp[_bind];
1829
+ let _tmp$2;
1830
+ if (_p === undefined) {
1831
+ _tmp$2 = $panic();
1832
+ } else {
1833
+ const _p$2 = _p;
1834
+ _tmp$2 = _p$2;
1835
+ }
1836
+ _tmp$2.next = entry.next;
1837
+ }
1838
+ const _bind$2 = entry.next;
1839
+ if (_bind$2 === undefined) {
1840
+ self.tail = entry.prev;
1841
+ return;
1842
+ } else {
1843
+ const _Some = _bind$2;
1844
+ const _next = _Some;
1845
+ _next.prev = entry.prev;
1846
+ return;
1847
+ }
1848
+ }
1849
+ function _M0MP311moonbitlang4core7builtin3Map11shift__backGssE(self, idx) {
1850
+ let _tmp = idx;
1851
+ while (true) {
1852
+ const idx$2 = _tmp;
1853
+ const next = idx$2 + 1 & self.capacity_mask;
1854
+ _L: {
1855
+ const _tmp$2 = self.entries;
1856
+ $bound_check(_tmp$2, next);
1857
+ const _bind = _tmp$2[next];
1858
+ if (_bind === undefined) {
1859
+ break _L;
1860
+ } else {
1861
+ const _Some = _bind;
1862
+ const _x = _Some;
1863
+ const _x$2 = _x.psl;
1864
+ if (_x$2 === 0) {
1865
+ break _L;
1866
+ } else {
1867
+ _x.psl = _x.psl - 1 | 0;
1868
+ _M0MP311moonbitlang4core7builtin3Map10set__entryGssE(self, _x, idx$2);
1869
+ _tmp = next;
1870
+ continue;
1871
+ }
1872
+ }
1873
+ }
1874
+ const _tmp$2 = self.entries;
1875
+ $bound_check(_tmp$2, idx$2);
1876
+ _tmp$2[idx$2] = undefined;
1877
+ return;
1878
+ }
1879
+ }
1880
+ function _M0MP311moonbitlang4core7builtin3Map18remove__with__hashGssE(self, key, hash) {
1881
+ let _tmp = 0;
1882
+ let _tmp$2 = hash & self.capacity_mask;
1883
+ while (true) {
1884
+ const i = _tmp;
1885
+ const idx = _tmp$2;
1886
+ const _tmp$3 = self.entries;
1887
+ $bound_check(_tmp$3, idx);
1888
+ const _bind = _tmp$3[idx];
1889
+ if (_bind === undefined) {
1890
+ break;
1891
+ } else {
1892
+ const _Some = _bind;
1893
+ const _entry = _Some;
1894
+ if (_entry.hash === hash && _entry.key === key) {
1895
+ _M0MP311moonbitlang4core7builtin3Map13remove__entryGssE(self, _entry);
1896
+ _M0MP311moonbitlang4core7builtin3Map11shift__backGssE(self, idx);
1897
+ self.size = self.size - 1 | 0;
1898
+ break;
1899
+ }
1900
+ if (i > _entry.psl) {
1901
+ break;
1902
+ }
1903
+ _tmp = i + 1 | 0;
1904
+ _tmp$2 = idx + 1 & self.capacity_mask;
1905
+ continue;
1906
+ }
1907
+ }
1908
+ }
1909
+ function _M0MP311moonbitlang4core7builtin3Map6removeGssE(self, key) {
1910
+ _M0MP311moonbitlang4core7builtin3Map18remove__with__hashGssE(self, key, _M0IP016_24default__implP311moonbitlang4core7builtin4Hash4hashGsE(key));
1911
+ }
1781
1912
  function _M0MP311moonbitlang4core7builtin5Iter24nextGicE(self) {
1782
1913
  return _M0MP311moonbitlang4core7builtin4Iter4nextGUicEE(self);
1783
1914
  }
@@ -1944,6 +2075,16 @@ function _M0MP311moonbitlang4core5array5Array6removeGRP36kazuph5reviw6server7JsV
1944
2075
  return _M0FP311moonbitlang4core7builtin5abortGRP36kazuph5reviw6server7JsValueE(`index out of bounds: the len is from 0 to ${_M0IP016_24default__implP311moonbitlang4core7builtin4Show10to__stringGiE(self.length)} but the index is ${_M0IP016_24default__implP311moonbitlang4core7builtin4Show10to__stringGiE(index)}`, "@moonbitlang/core/builtin:arraycore_js.mbt:251:5-253:6");
1945
2076
  }
1946
2077
  }
2078
+ function _M0MP311moonbitlang4core5array5Array6removeGsE(self, index) {
2079
+ if (index >= 0 && index < self.length) {
2080
+ $bound_check(self, index);
2081
+ const value = self[index];
2082
+ _M0MP311moonbitlang4core7builtin7JSArray6splice(self, index, 1);
2083
+ return value;
2084
+ } else {
2085
+ return _M0FP311moonbitlang4core7builtin5abortGsE(`index out of bounds: the len is from 0 to ${_M0IP016_24default__implP311moonbitlang4core7builtin4Show10to__stringGiE(self.length)} but the index is ${_M0IP016_24default__implP311moonbitlang4core7builtin4Show10to__stringGiE(index)}`, "@moonbitlang/core/builtin:arraycore_js.mbt:251:5-253:6");
2086
+ }
2087
+ }
1947
2088
  function _M0MP311moonbitlang4core5array5Array4copyGsE(self) {
1948
2089
  return _M0MP311moonbitlang4core7builtin7JSArray4copy(self);
1949
2090
  }
@@ -1956,38 +2097,38 @@ function _M0MP311moonbitlang4core3ref3Ref3newGsE(x) {
1956
2097
  function _M0MP311moonbitlang4core3ref3Ref3newGiE(x) {
1957
2098
  return { val: x };
1958
2099
  }
1959
- function _M0IP36kazuph5reviw4core8FileModeP311moonbitlang4core7builtin2Eq5equal(_x_570, _x_571) {
1960
- switch (_x_570) {
2100
+ function _M0IP36kazuph5reviw4core8FileModeP311moonbitlang4core7builtin2Eq5equal(_x_571, _x_572) {
2101
+ switch (_x_571) {
1961
2102
  case 0: {
1962
- if (_x_571 === 0) {
2103
+ if (_x_572 === 0) {
1963
2104
  return true;
1964
2105
  } else {
1965
2106
  return false;
1966
2107
  }
1967
2108
  }
1968
2109
  case 1: {
1969
- if (_x_571 === 1) {
2110
+ if (_x_572 === 1) {
1970
2111
  return true;
1971
2112
  } else {
1972
2113
  return false;
1973
2114
  }
1974
2115
  }
1975
2116
  case 2: {
1976
- if (_x_571 === 2) {
2117
+ if (_x_572 === 2) {
1977
2118
  return true;
1978
2119
  } else {
1979
2120
  return false;
1980
2121
  }
1981
2122
  }
1982
2123
  case 3: {
1983
- if (_x_571 === 3) {
2124
+ if (_x_572 === 3) {
1984
2125
  return true;
1985
2126
  } else {
1986
2127
  return false;
1987
2128
  }
1988
2129
  }
1989
2130
  default: {
1990
- if (_x_571 === 4) {
2131
+ if (_x_572 === 4) {
1991
2132
  return true;
1992
2133
  } else {
1993
2134
  return false;
@@ -1996,7 +2137,7 @@ function _M0IP36kazuph5reviw4core8FileModeP311moonbitlang4core7builtin2Eq5equal(
1996
2137
  }
1997
2138
  }
1998
2139
  function _M0FP36kazuph5reviw4core20yaml__escape__string(s) {
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 }))))))))))))))));
2140
+ const needs_quote = _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 }) || _M0MP311moonbitlang4core6string6String8contains(s, { str: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c673, start: 0, end: _M0FP36kazuph5reviw4core36yaml__escape__string_2e_2abind_7c673.length }))))))))))))))));
2000
2141
  if (needs_quote) {
2001
2142
  const buf = _M0MP311moonbitlang4core7builtin13StringBuilder11new_2einner(0);
2002
2143
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__char(buf, 39);
@@ -2257,7 +2398,7 @@ function _M0FP36kazuph5reviw4core16parse__int__safe(s) {
2257
2398
  }
2258
2399
  function _M0FP36kazuph5reviw4core16split__to__lines(input) {
2259
2400
  const result = [];
2260
- const _it = _M0MP311moonbitlang4core6string6String5split(input, { str: _M0FP36kazuph5reviw4core32split__to__lines_2e_2abind_7c701, start: 0, end: _M0FP36kazuph5reviw4core32split__to__lines_2e_2abind_7c701.length });
2401
+ const _it = _M0MP311moonbitlang4core6string6String5split(input, { str: _M0FP36kazuph5reviw4core32split__to__lines_2e_2abind_7c702, start: 0, end: _M0FP36kazuph5reviw4core32split__to__lines_2e_2abind_7c702.length });
2261
2402
  while (true) {
2262
2403
  const _bind = _M0MP311moonbitlang4core7builtin4Iter4nextGRP311moonbitlang4core6string10StringViewE(_it);
2263
2404
  if (_bind === undefined) {
@@ -2358,12 +2499,12 @@ function _M0FP36kazuph5reviw4core4trim(s) {
2358
2499
  return "";
2359
2500
  }
2360
2501
  const buf = _M0MP311moonbitlang4core7builtin13StringBuilder11new_2einner(0);
2361
- const _start453 = start;
2362
- const _end454 = end;
2363
- let _tmp = _start453;
2502
+ const _start454 = start;
2503
+ const _end455 = end;
2504
+ let _tmp = _start454;
2364
2505
  while (true) {
2365
2506
  const i = _tmp;
2366
- if (i <= _end454) {
2507
+ if (i <= _end455) {
2367
2508
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger11write__char(buf, _M0MP311moonbitlang4core5array5Array2atGcE(chars, i));
2368
2509
  _tmp = i + 1 | 0;
2369
2510
  continue;
@@ -2403,10 +2544,10 @@ function _M0FP36kazuph5reviw4core23parse__single__question(lines, start, end) {
2403
2544
  if (i < end) {
2404
2545
  const line = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
2405
2546
  const trimmed = _M0FP36kazuph5reviw4core4trim(line);
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 })) {
2547
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(trimmed, { str: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c715, start: 0, end: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c715.length }) && _M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c716, start: 0, end: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c716.length })) {
2407
2548
  break;
2408
2549
  }
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 })) {
2550
+ if (trimmed.length === 0 || !_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c717, start: 0, end: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c717.length }) && !_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c718, start: 0, end: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c718.length })) {
2410
2551
  break;
2411
2552
  }
2412
2553
  const content_colon = _M0FP36kazuph5reviw4core15index__of__char(trimmed, 58);
@@ -2431,7 +2572,7 @@ function _M0FP36kazuph5reviw4core23parse__single__question(lines, start, end) {
2431
2572
  if (i < end) {
2432
2573
  const opt_line = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
2433
2574
  const opt_trimmed = _M0FP36kazuph5reviw4core4trim(opt_line);
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 })) {
2575
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(opt_trimmed, { str: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c720, start: 0, end: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c720.length }) && _M0MP311moonbitlang4core6string6String11has__prefix(opt_line, { str: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c721, start: 0, end: _M0FP36kazuph5reviw4core39parse__single__question_2e_2abind_7c721.length })) {
2435
2576
  _M0MP311moonbitlang4core5array5Array4pushGsE(options, _M0FP36kazuph5reviw4core4trim(_M0FP36kazuph5reviw4core11safe__slice(opt_trimmed, 2)));
2436
2577
  i = i + 1 | 0;
2437
2578
  } else {
@@ -2471,12 +2612,12 @@ function _M0FP36kazuph5reviw4core23parse__reviw__questions(lines, start, end) {
2471
2612
  if (i < end) {
2472
2613
  const item_line = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
2473
2614
  const trimmed = _M0FP36kazuph5reviw4core4trim(item_line);
2474
- if (_M0MP311moonbitlang4core6string6String11has__prefix(trimmed, { str: _M0FP36kazuph5reviw4core39parse__reviw__questions_2e_2abind_7c724, start: 0, end: _M0FP36kazuph5reviw4core39parse__reviw__questions_2e_2abind_7c724.length })) {
2615
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(trimmed, { str: _M0FP36kazuph5reviw4core39parse__reviw__questions_2e_2abind_7c725, start: 0, end: _M0FP36kazuph5reviw4core39parse__reviw__questions_2e_2abind_7c725.length })) {
2475
2616
  const q = _M0FP36kazuph5reviw4core23parse__single__question(lines, i, end);
2476
2617
  _M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core13ReviwQuestionE(questions, q._0);
2477
2618
  i = q._1;
2478
2619
  } else {
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 })) {
2620
+ if (trimmed.length === 0 || !_M0MP311moonbitlang4core6string6String11has__prefix(item_line, { str: _M0FP36kazuph5reviw4core39parse__reviw__questions_2e_2abind_7c726, start: 0, end: _M0FP36kazuph5reviw4core39parse__reviw__questions_2e_2abind_7c726.length })) {
2480
2621
  break;
2481
2622
  } else {
2482
2623
  i = i + 1 | 0;
@@ -2626,7 +2767,7 @@ function _M0FP36kazuph5reviw4core20is__horizontal__rule(line) {
2626
2767
  }
2627
2768
  function _M0FP36kazuph5reviw4core22is__html__block__start(line) {
2628
2769
  const t = _M0FP36kazuph5reviw4core4trim(line);
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 })))))));
2770
+ return _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 }) || _M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c748, start: 0, end: _M0FP36kazuph5reviw4core38is__html__block__start_2e_2abind_7c748.length })))))));
2630
2771
  }
2631
2772
  function _M0FP36kazuph5reviw4core23is__ordered__list__item(line) {
2632
2773
  const chars = _M0MP311moonbitlang4core6string6String9to__array(line);
@@ -2645,15 +2786,15 @@ function _M0FP36kazuph5reviw4core23is__ordered__list__item(line) {
2645
2786
  return i < (chars.length - 1 | 0) && (_M0MP311moonbitlang4core5array5Array2atGcE(chars, i) === 46 && _M0MP311moonbitlang4core5array5Array2atGcE(chars, i + 1 | 0) === 32);
2646
2787
  }
2647
2788
  function _M0FP36kazuph5reviw4core16is__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)))))));
2789
+ return _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 }) || (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c754, start: 0, end: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c754.length }) || (_M0FP36kazuph5reviw4core23is__ordered__list__item(line) || (_M0FP36kazuph5reviw4core20is__horizontal__rule(line) || _M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c755, start: 0, end: _M0FP36kazuph5reviw4core32is__block__start_2e_2abind_7c755.length }) && _M0FP36kazuph5reviw4core22is__html__block__start(line)))))));
2649
2790
  }
2650
2791
  function _M0FP36kazuph5reviw4core20is__mermaid__content(text) {
2651
2792
  const t = _M0FP36kazuph5reviw4core4trim(text);
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 })))))))))));
2793
+ return _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 }) || _M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c767, start: 0, end: _M0FP36kazuph5reviw4core36is__mermaid__content_2e_2abind_7c767.length })))))))))));
2653
2794
  }
2654
2795
  function _M0FP36kazuph5reviw4core20is__table__separator(line) {
2655
2796
  const t = _M0FP36kazuph5reviw4core4trim(line);
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 })) {
2797
+ if (!_M0MP311moonbitlang4core6string6String8contains(t, { str: _M0FP36kazuph5reviw4core36is__table__separator_2e_2abind_7c768, start: 0, end: _M0FP36kazuph5reviw4core36is__table__separator_2e_2abind_7c768.length }) || !_M0MP311moonbitlang4core6string6String8contains(t, { str: _M0FP36kazuph5reviw4core36is__table__separator_2e_2abind_7c769, start: 0, end: _M0FP36kazuph5reviw4core36is__table__separator_2e_2abind_7c769.length })) {
2657
2798
  return false;
2658
2799
  }
2659
2800
  const chars = _M0MP311moonbitlang4core6string6String9to__array(t);
@@ -2708,8 +2849,8 @@ function _M0FP36kazuph5reviw4core18make__heading__key(text, counter) {
2708
2849
  function _M0FP36kazuph5reviw4core17parse__table__row(line) {
2709
2850
  const result = [];
2710
2851
  const t = _M0FP36kazuph5reviw4core4trim(line);
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 });
2852
+ const inner = _M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c782, start: 0, end: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c782.length }) && _M0MP311moonbitlang4core6string6String11has__suffix(t, { str: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c783, start: 0, end: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c783.length }) ? _M0FP36kazuph5reviw4core18safe__slice__range(t, 1, t.length - 1 | 0) : _M0MP311moonbitlang4core6string6String11has__prefix(t, { str: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c784, start: 0, end: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c784.length }) ? _M0FP36kazuph5reviw4core11safe__slice(t, 1) : t;
2853
+ const _it = _M0MP311moonbitlang4core6string6String5split(inner, { str: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c781, start: 0, end: _M0FP36kazuph5reviw4core33parse__table__row_2e_2abind_7c781.length });
2713
2854
  while (true) {
2714
2855
  const _bind = _M0MP311moonbitlang4core7builtin4Iter4nextGRP311moonbitlang4core6string10StringViewE(_it);
2715
2856
  if (_bind === undefined) {
@@ -2725,7 +2866,7 @@ function _M0FP36kazuph5reviw4core17parse__table__row(line) {
2725
2866
  }
2726
2867
  function _M0FP36kazuph5reviw4core14is__video__url(url) {
2727
2868
  const lower = _M0MP311moonbitlang4core6string6String9to__lower(url);
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 }))))));
2869
+ return _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 }) || _M0MP311moonbitlang4core6string6String11has__suffix(lower, { str: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c791, start: 0, end: _M0FP36kazuph5reviw4core30is__video__url_2e_2abind_7c791.length }))))));
2729
2870
  }
2730
2871
  function _M0FP36kazuph5reviw4core14render__inline(text) {
2731
2872
  const chars = _M0MP311moonbitlang4core6string6String9to__array(text);
@@ -2824,7 +2965,7 @@ function _M0FP36kazuph5reviw4core14render__inline(text) {
2824
2965
  const link_text = _M0FP36kazuph5reviw4core18safe__slice__range(text, text_start, text_end);
2825
2966
  const link_url = _M0FP36kazuph5reviw4core18safe__slice__range(text, url_start, url_end);
2826
2967
  const lower_url = _M0MP311moonbitlang4core6string6String9to__lower(link_url);
2827
- if (_M0MP311moonbitlang4core6string6String11has__prefix(lower_url, { str: _M0FP36kazuph5reviw4core30render__inline_2e_2abind_7c796, start: 0, end: _M0FP36kazuph5reviw4core30render__inline_2e_2abind_7c796.length })) {
2968
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(lower_url, { str: _M0FP36kazuph5reviw4core30render__inline_2e_2abind_7c797, start: 0, end: _M0FP36kazuph5reviw4core30render__inline_2e_2abind_7c797.length })) {
2828
2969
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core12escape__html(link_text));
2829
2970
  } else {
2830
2971
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<a href=\"");
@@ -3021,18 +3162,18 @@ function _M0FP36kazuph5reviw4core17is__allowed__attr(name) {
3021
3162
  }
3022
3163
  function _M0FP36kazuph5reviw4core18is__dangerous__css(value) {
3023
3164
  const lower = _M0MP311moonbitlang4core6string6String9to__lower(value);
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 })))))));
3165
+ return _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 }) || _M0MP311moonbitlang4core6string6String8contains(lower, { str: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c817, start: 0, end: _M0FP36kazuph5reviw4core34is__dangerous__css_2e_2abind_7c817.length })))))));
3025
3166
  }
3026
3167
  function _M0FP36kazuph5reviw4core24is__event__handler__attr(name) {
3027
- return _M0MP311moonbitlang4core6string6String11has__prefix(name, { str: _M0FP36kazuph5reviw4core40is__event__handler__attr_2e_2abind_7c817, start: 0, end: _M0FP36kazuph5reviw4core40is__event__handler__attr_2e_2abind_7c817.length });
3168
+ return _M0MP311moonbitlang4core6string6String11has__prefix(name, { str: _M0FP36kazuph5reviw4core40is__event__handler__attr_2e_2abind_7c818, start: 0, end: _M0FP36kazuph5reviw4core40is__event__handler__attr_2e_2abind_7c818.length });
3028
3169
  }
3029
3170
  function _M0FP36kazuph5reviw4core13is__safe__url(url) {
3030
3171
  const lower = _M0MP311moonbitlang4core6string6String9to__lower(url);
3031
3172
  const trimmed = _M0FP36kazuph5reviw4core4trim(lower);
3032
- if (_M0MP311moonbitlang4core6string6String11has__prefix(trimmed, { str: _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c818, start: 0, end: _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c818.length })) {
3173
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(trimmed, { str: _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c819, start: 0, end: _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c819.length })) {
3033
3174
  return false;
3034
3175
  }
3035
- if (_M0MP311moonbitlang4core6string6String11has__prefix(trimmed, { str: _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c819, start: 0, end: _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c819.length })) {
3176
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(trimmed, { str: _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c820, start: 0, end: _M0FP36kazuph5reviw4core29is__safe__url_2e_2abind_7c820.length })) {
3036
3177
  return false;
3037
3178
  }
3038
3179
  return true;
@@ -3371,7 +3512,7 @@ function _M0FP36kazuph5reviw4core14sanitize__html(input) {
3371
3512
  if (!_M0FP36kazuph5reviw4core16is__allowed__tag(tag_name) && tag_name.length > 0) {
3372
3513
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "&lt;");
3373
3514
  const tag_content = _M0FP36kazuph5reviw4core18safe__slice__range(input, tag_start + 1 | 0, tag_end);
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;
3515
+ const trimmed_content = _M0MP311moonbitlang4core6string6String11has__suffix(tag_content, { str: _M0FP36kazuph5reviw4core30sanitize__html_2e_2abind_7c836, start: 0, end: _M0FP36kazuph5reviw4core30sanitize__html_2e_2abind_7c836.length }) ? _M0FP36kazuph5reviw4core18safe__slice__range(tag_content, 0, tag_content.length - 1 | 0) : tag_content;
3375
3516
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core12escape__html(trimmed_content));
3376
3517
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "&gt;");
3377
3518
  i = tag_end;
@@ -3415,7 +3556,7 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
3415
3556
  i = i + 1 | 0;
3416
3557
  continue;
3417
3558
  }
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)) {
3559
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c838, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c838.length }) && _M0FP36kazuph5reviw4core22is__html__block__start(line)) {
3419
3560
  const tag_name = _M0FP36kazuph5reviw4core24extract__html__tag__name(line);
3420
3561
  if (tag_name === "details") {
3421
3562
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<details>\n");
@@ -3423,13 +3564,13 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
3423
3564
  while (true) {
3424
3565
  if (i < len) {
3425
3566
  const current = _M0FP36kazuph5reviw4core4trim(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i));
3426
- if (_M0MP311moonbitlang4core6string6String11has__prefix(current, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c839, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c839.length })) {
3567
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(current, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c840, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c840.length })) {
3427
3568
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core14sanitize__html(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i)));
3428
3569
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "\n");
3429
3570
  i = i + 1 | 0;
3430
3571
  break;
3431
3572
  } else {
3432
- if (_M0MP311moonbitlang4core6string6String11has__prefix(current, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c840, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c840.length })) {
3573
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(current, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c841, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c841.length })) {
3433
3574
  break;
3434
3575
  }
3435
3576
  }
@@ -3444,14 +3585,14 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
3444
3585
  while (true) {
3445
3586
  if (i < len && depth > 0) {
3446
3587
  const current = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
3447
- if (_M0MP311moonbitlang4core6string6String8contains(current, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c842, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c842.length })) {
3588
+ if (_M0MP311moonbitlang4core6string6String8contains(current, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c843, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c843.length })) {
3448
3589
  depth = depth - 1 | 0;
3449
3590
  if (depth === 0) {
3450
3591
  i = i + 1 | 0;
3451
3592
  break;
3452
3593
  }
3453
3594
  }
3454
- if (_M0MP311moonbitlang4core6string6String8contains(current, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c843, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c843.length })) {
3595
+ if (_M0MP311moonbitlang4core6string6String8contains(current, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c844, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c844.length })) {
3455
3596
  depth = depth + 1 | 0;
3456
3597
  }
3457
3598
  _M0MP311moonbitlang4core5array5Array4pushGsE(inner_lines, current);
@@ -3496,7 +3637,7 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
3496
3637
  }
3497
3638
  continue;
3498
3639
  }
3499
- if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c847, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c847.length })) {
3640
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c848, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c848.length })) {
3500
3641
  const level = _M0FP36kazuph5reviw4core21count__heading__level(line);
3501
3642
  if (level >= 1 && level <= 6) {
3502
3643
  const content = _M0FP36kazuph5reviw4core4trim(_M0FP36kazuph5reviw4core11safe__slice(line, level + 1 | 0));
@@ -3522,14 +3663,14 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
3522
3663
  i = i + 1 | 0;
3523
3664
  continue;
3524
3665
  }
3525
- if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c848, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c848.length })) {
3666
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c849, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c849.length })) {
3526
3667
  const lang = _M0FP36kazuph5reviw4core4trim(_M0FP36kazuph5reviw4core11safe__slice(line, 3));
3527
3668
  const code_block_start_line = i + 1 | 0;
3528
3669
  i = i + 1 | 0;
3529
3670
  const code_buf = _M0MP311moonbitlang4core7builtin13StringBuilder11new_2einner(0);
3530
3671
  let code_first = true;
3531
3672
  while (true) {
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 })) {
3673
+ if (i < len && !_M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c851, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c851.length })) {
3533
3674
  if (!code_first) {
3534
3675
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(code_buf, "\n");
3535
3676
  }
@@ -3541,12 +3682,17 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
3541
3682
  break;
3542
3683
  }
3543
3684
  }
3685
+ const code_block_end_line = i < len ? i + 1 | 0 : len;
3544
3686
  if (i < len) {
3545
3687
  i = i + 1 | 0;
3546
3688
  }
3547
3689
  const code_text = code_buf.val;
3548
3690
  if (lang === "mermaid" || _M0FP36kazuph5reviw4core20is__mermaid__content(code_text)) {
3549
- _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<div class=\"mermaid-container\"><div class=\"mermaid\" data-source=\"");
3691
+ _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<div class=\"mermaid-container\" data-source-start-line=\"");
3692
+ _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0MP311moonbitlang4core3int3Int18to__string_2einner(code_block_start_line, 10));
3693
+ _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "\" data-source-end-line=\"");
3694
+ _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0MP311moonbitlang4core3int3Int18to__string_2einner(code_block_end_line, 10));
3695
+ _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "\"><div class=\"mermaid\" data-source=\"");
3550
3696
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core12escape__html(code_text));
3551
3697
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "\" data-source-line=\"");
3552
3698
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0MP311moonbitlang4core3int3Int18to__string_2einner(code_block_start_line, 10));
@@ -3566,10 +3712,10 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
3566
3712
  }
3567
3713
  continue;
3568
3714
  }
3569
- if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c851, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c851.length })) {
3715
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c852, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c852.length })) {
3570
3716
  const quote_lines = [];
3571
3717
  while (true) {
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 })) {
3718
+ if (i < len && _M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c854, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c854.length })) {
3573
3719
  const content = _M0FP36kazuph5reviw4core4trim(_M0FP36kazuph5reviw4core11safe__slice(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), 1));
3574
3720
  _M0MP311moonbitlang4core5array5Array4pushGsE(quote_lines, content);
3575
3721
  i = i + 1 | 0;
@@ -3597,16 +3743,16 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
3597
3743
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</blockquote>\n");
3598
3744
  continue;
3599
3745
  }
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 })) {
3746
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c857, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c857.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c858, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c858.length })) {
3601
3747
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<ul>\n");
3602
3748
  while (true) {
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 }))) {
3749
+ if (i < len && (_M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c863, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c863.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c864, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c864.length }))) {
3604
3750
  const item_text = _M0FP36kazuph5reviw4core11safe__slice(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), 2);
3605
- if (_M0MP311moonbitlang4core6string6String11has__prefix(item_text, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c859, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c859.length })) {
3751
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(item_text, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c860, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c860.length })) {
3606
3752
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<li class=\"task-list-item\"><input type=\"checkbox\" disabled /> ");
3607
3753
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core14render__inline(_M0FP36kazuph5reviw4core11safe__slice(item_text, 4)));
3608
3754
  } else {
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 })) {
3755
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(item_text, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c861, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c861.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(item_text, { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c862, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c862.length })) {
3610
3756
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<li class=\"task-list-item\"><input type=\"checkbox\" checked disabled /> ");
3611
3757
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, _M0FP36kazuph5reviw4core14render__inline(_M0FP36kazuph5reviw4core11safe__slice(item_text, 4)));
3612
3758
  } else {
@@ -3663,7 +3809,7 @@ function _M0FP36kazuph5reviw4core23render__markdown__lines(lines) {
3663
3809
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</tr>\n</thead>\n<tbody>\n");
3664
3810
  i = i + 2 | 0;
3665
3811
  while (true) {
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 })) {
3812
+ if (i < len && _M0MP311moonbitlang4core6string6String8contains(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c871, start: 0, end: _M0FP36kazuph5reviw4core39render__markdown__lines_2e_2abind_7c871.length })) {
3667
3813
  const cells = _M0FP36kazuph5reviw4core17parse__table__row(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i));
3668
3814
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<tr>\n");
3669
3815
  const _len$2 = cells.length;
@@ -3730,11 +3876,11 @@ function _M0FP36kazuph5reviw4core15parse__markdown(input) {
3730
3876
  let content_start = 0;
3731
3877
  if (lines.length > 0 && _M0MP311moonbitlang4core5array5Array2atGsE(lines, 0) === "---") {
3732
3878
  let end_idx = -1;
3733
- const _end472 = lines.length;
3879
+ const _end473 = lines.length;
3734
3880
  let _tmp = 1;
3735
3881
  while (true) {
3736
3882
  const i = _tmp;
3737
- if (i < _end472) {
3883
+ if (i < _end473) {
3738
3884
  if (_M0MP311moonbitlang4core5array5Array2atGsE(lines, i) === "---") {
3739
3885
  end_idx = i;
3740
3886
  break;
@@ -3746,11 +3892,11 @@ function _M0FP36kazuph5reviw4core15parse__markdown(input) {
3746
3892
  }
3747
3893
  }
3748
3894
  if (end_idx > 0) {
3749
- const _end477 = end_idx;
3895
+ const _end478 = end_idx;
3750
3896
  let _tmp$2 = 1;
3751
3897
  while (true) {
3752
3898
  const i = _tmp$2;
3753
- if (i < _end477) {
3899
+ if (i < _end478) {
3754
3900
  const line = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
3755
3901
  const colon = _M0FP36kazuph5reviw4core15index__of__char(line, 58);
3756
3902
  if (colon >= 0) {
@@ -3770,12 +3916,12 @@ function _M0FP36kazuph5reviw4core15parse__markdown(input) {
3770
3916
  }
3771
3917
  }
3772
3918
  const content_lines = [];
3773
- const _start486 = content_start;
3774
- const _end487 = lines.length;
3775
- let _tmp = _start486;
3919
+ const _start487 = content_start;
3920
+ const _end488 = lines.length;
3921
+ let _tmp = _start487;
3776
3922
  while (true) {
3777
3923
  const i = _tmp;
3778
- if (i < _end487) {
3924
+ if (i < _end488) {
3779
3925
  _M0MP311moonbitlang4core5array5Array4pushGsE(content_lines, _M0MP311moonbitlang4core5array5Array2atGsE(lines, i));
3780
3926
  _tmp = i + 1 | 0;
3781
3927
  continue;
@@ -3881,19 +4027,21 @@ function _M0FP36kazuph5reviw4core24build__video__fullscreen(buf) {
3881
4027
  }
3882
4028
  function _M0FP36kazuph5reviw4core20build__comment__card(buf) {
3883
4029
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<div class=\"floating\" id=\"comment-card\">");
3884
- _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<header><h2 id=\"card-title\">Cell Comment</h2>");
3885
- _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<div style=\"display:flex; gap:6px;\">");
3886
- _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<button class=\"icon-only\" id=\"copy-selection\" title=\"Copy selected lines\">&#128203;</button>");
3887
- _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<button id=\"close-card\">Close</button>");
3888
- _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<button id=\"clear-comment\">Delete</button>");
3889
- _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</div></header>");
3890
- _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<div id=\"cell-preview\" style=\"font-size:12px; color: var(--muted); margin-bottom:8px;\"></div>");
4030
+ _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<button class=\"card-close-x\" id=\"close-card\" title=\"Close\">&times;</button>");
4031
+ _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<header><h2 id=\"card-title\">Cell Comment</h2></header>");
4032
+ _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<div id=\"cell-preview\" style=\"font-size:12px; color: var(--muted); margin-bottom:4px;\"></div>");
4033
+ _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<div style=\"position:relative\">");
4034
+ _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<button class=\"icon-only copy-btn-float\" id=\"copy-selection\" title=\"Copy selected lines\">&#128203;</button>");
3891
4035
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<textarea id=\"comment-input\" placeholder=\"Enter your comment or note\"></textarea>");
4036
+ _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</div>");
3892
4037
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<div class=\"image-attach-area image-attach-small\" id=\"comment-image-area\">");
3893
4038
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<label>Image (Paste, max 1)</label>");
3894
4039
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<div class=\"image-preview-list\" id=\"comment-image-preview\"></div>");
3895
4040
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</div>");
3896
- _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<div class=\"actions\"><button class=\"primary\" id=\"save-comment\">Save</button></div>");
4041
+ _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<div class=\"actions card-actions-split\">");
4042
+ _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<button class=\"danger-text\" id=\"clear-comment\">Delete</button>");
4043
+ _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<button class=\"primary\" id=\"save-comment\">Save</button>");
4044
+ _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</div>");
3897
4045
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</div>");
3898
4046
  }
3899
4047
  function _M0FP36kazuph5reviw4core27build__comment__list__aside(buf) {
@@ -3925,7 +4073,7 @@ function _M0FP36kazuph5reviw4core26build__page__start_2einner(buf, filename, fil
3925
4073
  _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\">");
3926
4074
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<script src=\"https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11/build/highlight.min.js\"></script>");
3927
4075
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<style>");
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}");
4076
+ _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: fixed;\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.card-close-x {\n position: absolute;\n top: 8px;\n right: 8px;\n width: 28px;\n height: 28px;\n padding: 0;\n background: transparent;\n border: none;\n color: var(--muted);\n font-size: 20px;\n line-height: 1;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 6px;\n transition: background 120ms ease, color 120ms ease;\n}\n.card-close-x:hover { background: var(--border); color: var(--text);\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.copy-btn-float {\n position: absolute;\n top: 4px;\n right: 4px;\n z-index: 2;\n background: var(--panel-solid) !important;\n border: 1px solid var(--border) !important;\n color: var(--muted) !important;\n opacity: 0.7;\n}\n.copy-btn-float:hover { opacity: 1 !important; }\n.card-actions-split {\n display: flex;\n justify-content: space-between !important;\n align-items: center;\n margin-top: 8px;\n}\n.danger-text {\n background: transparent !important;\n border: none !important;\n color: #ef4444 !important;\n font-size: 12px;\n font-weight: 600;\n cursor: pointer;\n padding: 4px 8px;\n}\n.danger-text:hover { color: #dc2626 !important; text-decoration: underline; }\n.floating textarea {\n width: 100%;\n min-height: 70px;\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 top: 12px;\n right: 8px;\n bottom: auto;\n left: auto;\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 margin: 0;\n}\n.md-preview .heading-toggle-icon {\n display: inline-flex;\n align-items: center;\n justify-content: center;\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: default;\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.md-preview details.heading-toggle > summary::-webkit-details-marker {\n display: none;\n}\n.md-preview details.heading-toggle > summary > .md-heading-toggle {\n flex: 1;\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 touch-action: none;\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 touch-action: none;\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}\n.video-overlay-wrapper {\n position: relative;\n display: inline-block;\n}\n.video-fs-overlay-btn {\n position: absolute;\n top: 8px;\n right: 8px;\n width: 36px;\n height: 36px;\n padding: 0;\n background: rgba(0,0,0,0.6);\n border: 1px solid rgba(255,255,255,0.3);\n color: #fff;\n font-size: 18px;\n line-height: 1;\n cursor: pointer;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 5;\n transition: background 120ms ease;\n}\n.video-fs-overlay-btn:hover { background: rgba(0,0,0,0.8); }\n@media (max-width: 600px) {\n .minimap { display: none !important; }\n .fullscreen-header { padding: 8px 12px; }\n .fullscreen-controls { gap: 4px; }\n .fullscreen-controls button { padding: 6px 8px; font-size: 11px; }\n .fullscreen-controls .zoom-info { font-size: 11px; min-width: 32px; }\n .history-panel { width: 100vw; }\n body.history-open header { right: 0; }\n}");
3929
4077
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "</style></head><body>");
3930
4078
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<header><div class=\"meta\">");
3931
4079
  _M0IP311moonbitlang4core7builtin13StringBuilderP311moonbitlang4core7builtin6Logger13write__string(buf, "<h1>");
@@ -4829,23 +4977,23 @@ function _M0FP36kazuph5reviw4core14collect__hunks(lines, start, len) {
4829
4977
  while (true) {
4830
4978
  if (i < len) {
4831
4979
  const line = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
4832
- if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c955, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c955.length })) {
4980
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c956, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c956.length })) {
4833
4981
  const header = _M0FP36kazuph5reviw4core19parse__hunk__header(line);
4834
4982
  const hunk_lines = [];
4835
4983
  i = i + 1 | 0;
4836
4984
  while (true) {
4837
4985
  if (i < len) {
4838
4986
  const l = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
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 }))) {
4987
+ if (_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 }) || _M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c960, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c960.length }))) {
4840
4988
  break;
4841
4989
  }
4842
- if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c960, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c960.length })) {
4990
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c961, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c961.length })) {
4843
4991
  _M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core8DiffLineE(hunk_lines, { kind: 1, content: _M0FP36kazuph5reviw4core11safe__slice(l, 1) });
4844
4992
  } else {
4845
- if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c961, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c961.length })) {
4993
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c962, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c962.length })) {
4846
4994
  _M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core8DiffLineE(hunk_lines, { kind: 2, content: _M0FP36kazuph5reviw4core11safe__slice(l, 1) });
4847
4995
  } else {
4848
- if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c962, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c962.length })) {
4996
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c963, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c963.length })) {
4849
4997
  _M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core8DiffLineE(hunk_lines, { kind: 0, content: _M0FP36kazuph5reviw4core11safe__slice(l, 1) });
4850
4998
  } else {
4851
4999
  _M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core8DiffLineE(hunk_lines, { kind: 0, content: l });
@@ -4860,7 +5008,7 @@ function _M0FP36kazuph5reviw4core14collect__hunks(lines, start, len) {
4860
5008
  }
4861
5009
  _M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw4core8DiffHunkE(hunks, { old_start: header._0, old_count: header._1, new_start: header._2, new_count: header._3, context: header._4, lines: hunk_lines });
4862
5010
  } else {
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 })) {
5011
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c964, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c964.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c965, start: 0, end: _M0FP36kazuph5reviw4core30collect__hunks_2e_2abind_7c965.length })) {
4864
5012
  break;
4865
5013
  } else {
4866
5014
  i = i + 1 | 0;
@@ -4900,7 +5048,7 @@ function _M0FP36kazuph5reviw4core19extract__git__paths(line) {
4900
5048
  }
4901
5049
  }
4902
5050
  function _M0FP36kazuph5reviw4core19strip__diff__prefix(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;
5051
+ return _M0MP311moonbitlang4core6string6String11has__prefix(path, { str: _M0FP36kazuph5reviw4core35strip__diff__prefix_2e_2abind_7c967, start: 0, end: _M0FP36kazuph5reviw4core35strip__diff__prefix_2e_2abind_7c967.length }) || _M0MP311moonbitlang4core6string6String11has__prefix(path, { str: _M0FP36kazuph5reviw4core35strip__diff__prefix_2e_2abind_7c968, start: 0, end: _M0FP36kazuph5reviw4core35strip__diff__prefix_2e_2abind_7c968.length }) ? _M0FP36kazuph5reviw4core11safe__slice(path, 2) : path;
4904
5052
  }
4905
5053
  function _M0FP36kazuph5reviw4core11parse__diff(input) {
4906
5054
  const files = [];
@@ -4910,7 +5058,7 @@ function _M0FP36kazuph5reviw4core11parse__diff(input) {
4910
5058
  while (true) {
4911
5059
  if (i < len) {
4912
5060
  const line = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
4913
- if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c969, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c969.length })) {
5061
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c970, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c970.length })) {
4914
5062
  const paths = _M0FP36kazuph5reviw4core19extract__git__paths(line);
4915
5063
  let is_new = false;
4916
5064
  let is_deleted = false;
@@ -4919,19 +5067,19 @@ function _M0FP36kazuph5reviw4core11parse__diff(input) {
4919
5067
  while (true) {
4920
5068
  if (i < len) {
4921
5069
  const l = _M0MP311moonbitlang4core5array5Array2atGsE(lines, i);
4922
- if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c971, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c971.length })) {
5070
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c972, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c972.length })) {
4923
5071
  is_new = true;
4924
5072
  i = i + 1 | 0;
4925
5073
  } else {
4926
- if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c972, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c972.length })) {
5074
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c973, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c973.length })) {
4927
5075
  is_deleted = true;
4928
5076
  i = i + 1 | 0;
4929
5077
  } else {
4930
- if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c973, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c973.length })) {
5078
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c974, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c974.length })) {
4931
5079
  is_binary = true;
4932
5080
  i = i + 1 | 0;
4933
5081
  } else {
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 }))) {
5082
+ if (_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 }) || _M0MP311moonbitlang4core6string6String11has__prefix(l, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c977, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c977.length }))) {
4935
5083
  i = i + 1 | 0;
4936
5084
  } else {
4937
5085
  break;
@@ -4948,11 +5096,11 @@ function _M0FP36kazuph5reviw4core11parse__diff(input) {
4948
5096
  i = result._1;
4949
5097
  _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 });
4950
5098
  } else {
4951
- if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c977, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c977.length })) {
5099
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(line, { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c978, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c978.length })) {
4952
5100
  const old_path = _M0FP36kazuph5reviw4core19strip__diff__prefix(_M0FP36kazuph5reviw4core11safe__slice(line, 4));
4953
5101
  let new_path = "";
4954
5102
  i = i + 1 | 0;
4955
- if (i < len && _M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c978, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c978.length })) {
5103
+ if (i < len && _M0MP311moonbitlang4core6string6String11has__prefix(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), { str: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c979, start: 0, end: _M0FP36kazuph5reviw4core27parse__diff_2e_2abind_7c979.length })) {
4956
5104
  new_path = _M0FP36kazuph5reviw4core19strip__diff__prefix(_M0FP36kazuph5reviw4core11safe__slice(_M0MP311moonbitlang4core5array5Array2atGsE(lines, i), 4));
4957
5105
  i = i + 1 | 0;
4958
5106
  }
@@ -5073,13 +5221,13 @@ function _M0FP36kazuph5reviw4core21csv__data__from__flat(flat) {
5073
5221
  }
5074
5222
  }
5075
5223
  function _M0FP36kazuph5reviw6server12exists__sync(_tmp) {
5076
- return existsSync$2028(_tmp);
5224
+ return existsSync$2140(_tmp);
5077
5225
  }
5078
5226
  function _M0FP36kazuph5reviw6server10path__join(_tmp, _tmp$2) {
5079
- return join$2031(_tmp, _tmp$2);
5227
+ return join$2143(_tmp, _tmp$2);
5080
5228
  }
5081
5229
  function _M0FP36kazuph5reviw6server16read__file__sync(_tmp, _tmp$2) {
5082
- return readFileSync$2034(_tmp, _tmp$2);
5230
+ return readFileSync$2146(_tmp, _tmp$2);
5083
5231
  }
5084
5232
  function _M0FP36kazuph5reviw6server12load__ui__js() {
5085
5233
  if (_M0FP36kazuph5reviw6server13ui__js__cache.val.length > 0) {
@@ -5097,7 +5245,7 @@ function _M0FP36kazuph5reviw6server12load__ui__js() {
5097
5245
  }
5098
5246
  }
5099
5247
  function _M0FP36kazuph5reviw6server11os__homedir() {
5100
- return homedir$2036();
5248
+ return homedir$2148();
5101
5249
  }
5102
5250
  function _M0FP36kazuph5reviw6server9lock__dir() {
5103
5251
  const override_dir = _M0FP36kazuph5reviw6server13get__env__var("REVIW_LOCK_DIR");
@@ -5108,7 +5256,7 @@ function _M0FP36kazuph5reviw6server10lock__path(port) {
5108
5256
  return _M0FP36kazuph5reviw6server10path__join(dir, `${_M0IP016_24default__implP311moonbitlang4core7builtin4Show10to__stringGiE(port)}.lock`);
5109
5257
  }
5110
5258
  function _M0FP36kazuph5reviw6server11mkdir__sync(_tmp, _tmp$2) {
5111
- return mkdirSync$2039(_tmp, _tmp$2);
5259
+ return mkdirSync$2151(_tmp, _tmp$2);
5112
5260
  }
5113
5261
  function _M0FP36kazuph5reviw6server17ensure__lock__dir() {
5114
5262
  const dir = _M0FP36kazuph5reviw6server9lock__dir();
@@ -5119,20 +5267,41 @@ function _M0FP36kazuph5reviw6server17ensure__lock__dir() {
5119
5267
  return;
5120
5268
  }
5121
5269
  }
5270
+ function _M0FP36kazuph5reviw6server16read__file__safe(path) {
5271
+ return _M0FP36kazuph5reviw6server17try__call__string(() => _M0FP36kazuph5reviw6server16read__file__sync(path, "utf-8"), "");
5272
+ }
5273
+ function _M0FP36kazuph5reviw6server12unlink__sync(_tmp) {
5274
+ return unlinkSync$2156(_tmp);
5275
+ }
5122
5276
  function _M0FP36kazuph5reviw6server16is__port__locked(port) {
5123
5277
  const lp = _M0FP36kazuph5reviw6server10lock__path(port);
5124
- return _M0FP36kazuph5reviw6server12exists__sync(lp);
5278
+ if (!_M0FP36kazuph5reviw6server12exists__sync(lp)) {
5279
+ return false;
5280
+ }
5281
+ const content = _M0FP36kazuph5reviw6server16read__file__safe(lp);
5282
+ if (content.length === 0) {
5283
+ _M0FP36kazuph5reviw6server12unlink__sync(lp);
5284
+ return false;
5285
+ }
5286
+ const pid = _M0FP36kazuph5reviw4core16parse__int__safe(content);
5287
+ if (pid <= 0) {
5288
+ _M0FP36kazuph5reviw6server12unlink__sync(lp);
5289
+ return false;
5290
+ }
5291
+ if (_M0FP36kazuph5reviw6server15process__exists(pid)) {
5292
+ return true;
5293
+ } else {
5294
+ _M0FP36kazuph5reviw6server12unlink__sync(lp);
5295
+ return false;
5296
+ }
5125
5297
  }
5126
5298
  function _M0FP36kazuph5reviw6server17write__file__sync(_tmp, _tmp$2) {
5127
- return writeFileSync$2042(_tmp, _tmp$2);
5299
+ return writeFileSync$2159(_tmp, _tmp$2);
5128
5300
  }
5129
5301
  function _M0FP36kazuph5reviw6server11write__lock(port) {
5130
5302
  _M0FP36kazuph5reviw6server17ensure__lock__dir();
5131
5303
  const lp = _M0FP36kazuph5reviw6server10lock__path(port);
5132
- _M0FP36kazuph5reviw6server17write__file__sync(lp, _M0MP311moonbitlang4core3int3Int18to__string_2einner(port, 10));
5133
- }
5134
- function _M0FP36kazuph5reviw6server12unlink__sync(_tmp) {
5135
- return unlinkSync$2044(_tmp);
5304
+ _M0FP36kazuph5reviw6server17write__file__sync(lp, _M0MP311moonbitlang4core3int3Int18to__string_2einner(_M0FP36kazuph5reviw6server12process__pid(), 10));
5136
5305
  }
5137
5306
  function _M0FP36kazuph5reviw6server12remove__lock(port) {
5138
5307
  const lp = _M0FP36kazuph5reviw6server10lock__path(port);
@@ -5162,10 +5331,7 @@ function _M0FP36kazuph5reviw6server21find__available__port(base) {
5162
5331
  return base;
5163
5332
  }
5164
5333
  function _M0FP36kazuph5reviw6server13path__dirname(_tmp) {
5165
- return dirname$2048(_tmp);
5166
- }
5167
- function _M0FP36kazuph5reviw6server16read__file__safe(path) {
5168
- return _M0FP36kazuph5reviw6server17try__call__string(() => _M0FP36kazuph5reviw6server16read__file__sync(path, "utf-8"), "");
5334
+ return dirname$2163(_tmp);
5169
5335
  }
5170
5336
  function _M0FP36kazuph5reviw6server21get__package__version() {
5171
5337
  let dir = _M0FP36kazuph5reviw6server16get__script__dir();
@@ -5211,17 +5377,17 @@ function _M0FP36kazuph5reviw6server11parse__port(s) {
5211
5377
  return n === 0 ? 4989 : n;
5212
5378
  }
5213
5379
  function _M0FP36kazuph5reviw6server12print__usage() {
5214
- _M0FP36kazuph5reviw6server12console__log(_M0FP36kazuph5reviw6server26print__usage_2eusage_7c409);
5380
+ _M0FP36kazuph5reviw6server12console__log(_M0FP36kazuph5reviw6server26print__usage_2eusage_7c449);
5215
5381
  }
5216
5382
  function _M0FP36kazuph5reviw6server17read__stdin__sync() {
5217
5383
  return _M0FP36kazuph5reviw6server16read__file__sync("/dev/stdin", "utf-8");
5218
5384
  }
5219
5385
  function _M0FP36kazuph5reviw6server13path__extname(_tmp) {
5220
- return extname$2057(_tmp);
5386
+ return extname$2170(_tmp);
5221
5387
  }
5222
5388
  function _M0FP36kazuph5reviw6server12detect__mode(file_path) {
5223
5389
  const ext = _M0FP36kazuph5reviw6server13path__extname(file_path);
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);
5390
+ const ext_lower = _M0MP311moonbitlang4core6string6String11has__prefix(ext, { str: _M0FP36kazuph5reviw6server28detect__mode_2e_2abind_7c497, start: 0, end: _M0FP36kazuph5reviw6server28detect__mode_2e_2abind_7c497.length }) ? _M0MP311moonbitlang4core6string6String9to__lower(_M0FP36kazuph5reviw4core11safe__slice(ext, 1)) : _M0MP311moonbitlang4core6string6String9to__lower(ext);
5225
5391
  return _M0MP36kazuph5reviw4core8FileMode15from__extension(ext_lower);
5226
5392
  }
5227
5393
  function _M0FP36kazuph5reviw6server16detect__encoding(buf) {
@@ -5319,7 +5485,7 @@ function _M0FP36kazuph5reviw6server16detect__encoding(buf) {
5319
5485
  return "utf-8";
5320
5486
  }
5321
5487
  function _M0FP36kazuph5reviw6server18read__file__buffer(_tmp) {
5322
- return readFileSync$2034(_tmp);
5488
+ return readFileSync$2146(_tmp);
5323
5489
  }
5324
5490
  function _M0FP36kazuph5reviw6server12decode__file(path, override_enc) {
5325
5491
  const buf = _M0FP36kazuph5reviw6server18read__file__buffer(path);
@@ -5361,19 +5527,57 @@ function _M0FP36kazuph5reviw6server22load__and__build__html(ctx) {
5361
5527
  return _M0FP36kazuph5reviw4core16build__csv__html(data, ctx.filename, ctx.port);
5362
5528
  }
5363
5529
  function _M0FP36kazuph5reviw6server14path__basename(_tmp) {
5364
- return basename$2067(_tmp);
5530
+ return basename$2180(_tmp);
5365
5531
  }
5366
5532
  function _M0FP36kazuph5reviw6server13path__resolve(_tmp) {
5367
- return resolve$2069(_tmp);
5533
+ return resolve$2182(_tmp);
5368
5534
  }
5369
5535
  function _M0FP36kazuph5reviw6server25http__create__server__raw(_tmp) {
5370
- return createServer$2074(_tmp);
5536
+ return createServer$2187(_tmp);
5371
5537
  }
5372
5538
  function _M0FP36kazuph5reviw6server14create__server(handler) {
5373
5539
  return _M0FP36kazuph5reviw6server25http__create__server__raw(handler);
5374
5540
  }
5541
+ function _M0FP36kazuph5reviw6server19remove__active__tab(ctx, tab_id) {
5542
+ if (tab_id.length === 0) {
5543
+ return undefined;
5544
+ }
5545
+ let idx = -1;
5546
+ const _arr = ctx.active_tabs;
5547
+ const _len = _arr.length;
5548
+ let _tmp = 0;
5549
+ while (true) {
5550
+ const _i = _tmp;
5551
+ if (_i < _len) {
5552
+ const existing = _arr[_i];
5553
+ if (existing === tab_id) {
5554
+ idx = _i;
5555
+ break;
5556
+ }
5557
+ _tmp = _i + 1 | 0;
5558
+ continue;
5559
+ } else {
5560
+ break;
5561
+ }
5562
+ }
5563
+ if (idx >= 0 && idx < ctx.active_tabs.length) {
5564
+ _M0MP311moonbitlang4core5array5Array6removeGsE(ctx.active_tabs, idx);
5565
+ return;
5566
+ } else {
5567
+ return;
5568
+ }
5569
+ }
5570
+ function _M0FP36kazuph5reviw6server22cancel__pending__close(ctx) {
5571
+ if (!_M0FP36kazuph5reviw6server15js__is__nullish(ctx.pending_close_timer)) {
5572
+ _M0FP36kazuph5reviw6server14clear__timeout(ctx.pending_close_timer);
5573
+ ctx.pending_close_timer = _M0FP36kazuph5reviw6server8js__null();
5574
+ return;
5575
+ } else {
5576
+ return;
5577
+ }
5578
+ }
5375
5579
  function _M0FP36kazuph5reviw6server22write__file__sync__buf(_tmp, _tmp$2) {
5376
- return writeFileSync$2042(_tmp, _tmp$2);
5580
+ return writeFileSync$2159(_tmp, _tmp$2);
5377
5581
  }
5378
5582
  function _M0FP36kazuph5reviw6server16base64__to__file(data, dir, index) {
5379
5583
  const ext = _M0FP36kazuph5reviw6server20extract__base64__ext(data);
@@ -5407,7 +5611,7 @@ function _M0FP36kazuph5reviw6server20ensure__history__dir() {
5407
5611
  }
5408
5612
  }
5409
5613
  function _M0FP36kazuph5reviw6server20crypto__create__hash(_tmp) {
5410
- return createHash$2090(_tmp);
5614
+ return createHash$2206(_tmp);
5411
5615
  }
5412
5616
  function _M0FP36kazuph5reviw6server14crypto__sha256(s) {
5413
5617
  return _M0FP36kazuph5reviw6server27hash__update__digest__hex16(_M0FP36kazuph5reviw6server20crypto__create__hash("sha256"), s);
@@ -5466,9 +5670,14 @@ function _M0FP36kazuph5reviw6server13save__history(file_path, entry_json) {
5466
5670
  _M0FP36kazuph5reviw6server11chmod__sync(hp, 384);
5467
5671
  }
5468
5672
  function _M0FP36kazuph5reviw6server13unwatch__file(_tmp) {
5469
- return unwatchFile$2096(_tmp);
5673
+ return unwatchFile$2212(_tmp);
5470
5674
  }
5471
5675
  function _M0FP36kazuph5reviw6server14handle__submit(ctx, body) {
5676
+ if (ctx.finished) {
5677
+ return undefined;
5678
+ }
5679
+ ctx.finished = true;
5680
+ _M0FP36kazuph5reviw6server22cancel__pending__close(ctx);
5472
5681
  const summary = _M0FP36kazuph5reviw6server19json__parse__string("summary", body);
5473
5682
  const raw_comments = _M0FP36kazuph5reviw6server21json__parse__comments(body);
5474
5683
  const comments = [];
@@ -5582,8 +5791,95 @@ function _M0FP36kazuph5reviw6server14handle__submit(ctx, body) {
5582
5791
  return;
5583
5792
  }
5584
5793
  }
5794
+ function _M0FP36kazuph5reviw6server23schedule__close__submit(ctx, draft) {
5795
+ if (ctx.finished) {
5796
+ return undefined;
5797
+ }
5798
+ _M0FP36kazuph5reviw6server22cancel__pending__close(ctx);
5799
+ const draft_body = draft.length > 0 ? draft : "{\"summary\":\"\",\"comments\":[]}";
5800
+ ctx.pending_close_timer = _M0FP36kazuph5reviw6server12set__timeout(() => {
5801
+ ctx.pending_close_timer = _M0FP36kazuph5reviw6server8js__null();
5802
+ let _tmp;
5803
+ if (ctx.finished) {
5804
+ _tmp = true;
5805
+ } else {
5806
+ const _p = ctx.active_tabs;
5807
+ _tmp = !(_p.length === 0);
5808
+ }
5809
+ if (_tmp) {
5810
+ return undefined;
5811
+ }
5812
+ _M0FP36kazuph5reviw6server14handle__submit(ctx, draft_body);
5813
+ }, 700);
5814
+ }
5815
+ function _M0FP36kazuph5reviw6server22handle__session__close(ctx, body) {
5816
+ if (ctx.finished) {
5817
+ return undefined;
5818
+ }
5819
+ const tab_id = _M0FP36kazuph5reviw6server19json__parse__string("tabId", body);
5820
+ const instance_id = _M0FP36kazuph5reviw6server19json__parse__string("instanceId", body);
5821
+ const draft = _M0FP36kazuph5reviw6server19json__parse__string("draft", body);
5822
+ if (tab_id.length > 0 && instance_id.length > 0) {
5823
+ const _bind = _M0MP311moonbitlang4core7builtin3Map3getGssE(ctx.active_tab_instances, tab_id);
5824
+ if (_bind === undefined) {
5825
+ } else {
5826
+ const _Some = _bind;
5827
+ const _active_instance = _Some;
5828
+ if (!(_active_instance === instance_id)) {
5829
+ return undefined;
5830
+ }
5831
+ }
5832
+ }
5833
+ _M0MP311moonbitlang4core7builtin3Map6removeGssE(ctx.active_tab_instances, tab_id);
5834
+ _M0FP36kazuph5reviw6server19remove__active__tab(ctx, tab_id);
5835
+ const _p = ctx.active_tabs;
5836
+ if (_p.length === 0) {
5837
+ _M0FP36kazuph5reviw6server23schedule__close__submit(ctx, draft);
5838
+ return;
5839
+ } else {
5840
+ return;
5841
+ }
5842
+ }
5843
+ function _M0FP36kazuph5reviw6server16has__active__tab(ctx, tab_id) {
5844
+ const _arr = ctx.active_tabs;
5845
+ const _len = _arr.length;
5846
+ let _tmp = 0;
5847
+ while (true) {
5848
+ const _i = _tmp;
5849
+ if (_i < _len) {
5850
+ const existing = _arr[_i];
5851
+ if (existing === tab_id) {
5852
+ return true;
5853
+ }
5854
+ _tmp = _i + 1 | 0;
5855
+ continue;
5856
+ } else {
5857
+ break;
5858
+ }
5859
+ }
5860
+ return false;
5861
+ }
5862
+ function _M0FP36kazuph5reviw6server16add__active__tab(ctx, tab_id) {
5863
+ if (tab_id.length === 0 || _M0FP36kazuph5reviw6server16has__active__tab(ctx, tab_id)) {
5864
+ return undefined;
5865
+ }
5866
+ _M0MP311moonbitlang4core5array5Array4pushGsE(ctx.active_tabs, tab_id);
5867
+ }
5868
+ function _M0FP36kazuph5reviw6server21handle__session__open(ctx, body) {
5869
+ if (ctx.finished) {
5870
+ return undefined;
5871
+ }
5872
+ const tab_id = _M0FP36kazuph5reviw6server19json__parse__string("tabId", body);
5873
+ const instance_id = _M0FP36kazuph5reviw6server19json__parse__string("instanceId", body);
5874
+ if (tab_id.length === 0 || instance_id.length === 0) {
5875
+ return undefined;
5876
+ }
5877
+ _M0FP36kazuph5reviw6server22cancel__pending__close(ctx);
5878
+ _M0FP36kazuph5reviw6server16add__active__tab(ctx, tab_id);
5879
+ _M0MP311moonbitlang4core7builtin3Map3setGssE(ctx.active_tab_instances, tab_id, instance_id);
5880
+ }
5585
5881
  function _M0FP36kazuph5reviw6server17child__exec__sync(_tmp, _tmp$2) {
5586
- return execSync$2104(_tmp, _tmp$2);
5882
+ return execSync$2224(_tmp, _tmp$2);
5587
5883
  }
5588
5884
  function _M0FP36kazuph5reviw6server15command__exists(cmd) {
5589
5885
  return _M0FP36kazuph5reviw6server15try__call__bool(() => {
@@ -5636,10 +5932,10 @@ function _M0FP36kazuph5reviw6server19json__encode__value(s) {
5636
5932
  return buf.val;
5637
5933
  }
5638
5934
  function _M0FP36kazuph5reviw6server17fs__mkdtemp__sync(_tmp) {
5639
- return mkdtempSync$2108(_tmp);
5935
+ return mkdtempSync$2228(_tmp);
5640
5936
  }
5641
5937
  function _M0FP36kazuph5reviw6server10os__tmpdir() {
5642
- return tmpdir$2109();
5938
+ return tmpdir$2229();
5643
5939
  }
5644
5940
  function _M0FP36kazuph5reviw6server15make__temp__dir() {
5645
5941
  return _M0FP36kazuph5reviw6server17fs__mkdtemp__sync(`${_M0FP36kazuph5reviw6server10os__tmpdir()}/reviw-`);
@@ -5648,13 +5944,13 @@ function _M0FP36kazuph5reviw6server18read__file__base64(path) {
5648
5944
  return _M0FP36kazuph5reviw6server17try__call__string(() => _M0FP36kazuph5reviw6server15buf__to__base64(_M0FP36kazuph5reviw6server18read__file__buffer(path)), "");
5649
5945
  }
5650
5946
  function _M0FP36kazuph5reviw6server22fs__readdir__sync__raw(_tmp) {
5651
- return readdirSync$2119(_tmp);
5947
+ return readdirSync$2239(_tmp);
5652
5948
  }
5653
5949
  function _M0FP36kazuph5reviw6server13readdir__sync(path) {
5654
5950
  return _M0FP36kazuph5reviw6server24try__call__array__string(() => _M0FP36kazuph5reviw6server22fs__readdir__sync__raw(path));
5655
5951
  }
5656
5952
  function _M0FP36kazuph5reviw6server12fs__rm__sync(_tmp, _tmp$2) {
5657
- return rmSync$2128(_tmp, _tmp$2);
5953
+ return rmSync$2248(_tmp, _tmp$2);
5658
5954
  }
5659
5955
  function _M0FP36kazuph5reviw6server18rm__dir__recursive(path) {
5660
5956
  _M0FP36kazuph5reviw6server15try__call__void(() => {
@@ -5662,13 +5958,13 @@ function _M0FP36kazuph5reviw6server18rm__dir__recursive(path) {
5662
5958
  });
5663
5959
  }
5664
5960
  function _M0FP36kazuph5reviw6server12child__spawn(_tmp, _tmp$2, _tmp$3) {
5665
- return spawn$2134(_tmp, _tmp$2, _tmp$3);
5961
+ return spawn$2254(_tmp, _tmp$2, _tmp$3);
5666
5962
  }
5667
5963
  function _M0FP36kazuph5reviw6server12spawn__async(cmd, args_json) {
5668
5964
  return _M0FP36kazuph5reviw6server12child__spawn(cmd, _M0FP36kazuph5reviw6server15js__parse__json(args_json), _M0FP36kazuph5reviw6server21js__spawn__opts__pipe());
5669
5965
  }
5670
5966
  function _M0FP36kazuph5reviw6server18child__spawn__sync(_tmp, _tmp$2, _tmp$3) {
5671
- return spawnSync$2139(_tmp, _tmp$2, _tmp$3);
5967
+ return spawnSync$2259(_tmp, _tmp$2, _tmp$3);
5672
5968
  }
5673
5969
  function _M0FP36kazuph5reviw6server19spawn__sync__stdout(cmd, args_json) {
5674
5970
  return _M0FP36kazuph5reviw6server17try__call__string(() => _M0FP36kazuph5reviw6server15js__obj__stdout(_M0FP36kazuph5reviw6server18child__spawn__sync(cmd, _M0FP36kazuph5reviw6server15js__parse__json(args_json), _M0FP36kazuph5reviw6server27js__spawn__opts__utf8__pipe())), "");
@@ -5676,7 +5972,7 @@ function _M0FP36kazuph5reviw6server19spawn__sync__stdout(cmd, args_json) {
5676
5972
  function _M0FP36kazuph5reviw6server23handle__video__timeline(ctx, url, res) {
5677
5973
  const video_path = _M0FP36kazuph5reviw6server19parse__query__param(url, "path");
5678
5974
  const scene_str = _M0FP36kazuph5reviw6server19parse__query__param(url, "scene");
5679
- if (_M0MP311moonbitlang4core6string6String8contains(video_path, { str: _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c488, start: 0, end: _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c488.length })) {
5975
+ if (_M0MP311moonbitlang4core6string6String8contains(video_path, { str: _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c539, start: 0, end: _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c539.length })) {
5680
5976
  _M0FP36kazuph5reviw6server16res__write__head(res, 400, "text/plain");
5681
5977
  _M0FP36kazuph5reviw6server8res__end(res, "Invalid path");
5682
5978
  return undefined;
@@ -5721,7 +6017,7 @@ function _M0FP36kazuph5reviw6server23handle__video__timeline(ctx, url, res) {
5721
6017
  const _i = _tmp;
5722
6018
  if (_i < _len) {
5723
6019
  const file = files[_i];
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 })) {
6020
+ if (_M0MP311moonbitlang4core6string6String11has__prefix(file, { str: _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c542, start: 0, end: _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c542.length }) && _M0MP311moonbitlang4core6string6String11has__suffix(file, { str: _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c543, start: 0, end: _M0FP36kazuph5reviw6server39handle__video__timeline_2e_2abind_7c543.length })) {
5725
6021
  _M0MP311moonbitlang4core5array5Array4pushGsE(scene_files, file);
5726
6022
  }
5727
6023
  _tmp = _i + 1 | 0;
@@ -5882,13 +6178,13 @@ function _M0FP36kazuph5reviw6server9index__of(s, target) {
5882
6178
  return -1;
5883
6179
  }
5884
6180
  function _M0FP36kazuph5reviw6server14fs__stat__sync(_tmp) {
5885
- return statSync$2154(_tmp);
6181
+ return statSync$2274(_tmp);
5886
6182
  }
5887
6183
  function _M0FP36kazuph5reviw6server14is__file__sync(path) {
5888
6184
  return _M0FP36kazuph5reviw6server18js__stat__is__file(_M0FP36kazuph5reviw6server14fs__stat__sync(path));
5889
6185
  }
5890
6186
  function _M0FP36kazuph5reviw6server30fs__create__read__stream__opts(_tmp, _tmp$2) {
5891
- return createReadStream$2158(_tmp, _tmp$2);
6187
+ return createReadStream$2278(_tmp, _tmp$2);
5892
6188
  }
5893
6189
  function _M0FP36kazuph5reviw6server17pipe__file__range(file_path, res, content_type, range_header) {
5894
6190
  const stat = _M0FP36kazuph5reviw6server14fs__stat__sync(file_path);
@@ -5903,7 +6199,7 @@ function _M0FP36kazuph5reviw6server17pipe__file__range(file_path, res, content_t
5903
6199
  _M0FP36kazuph5reviw6server8js__pipe(stream, res);
5904
6200
  }
5905
6201
  function _M0FP36kazuph5reviw6server24fs__create__read__stream(_tmp) {
5906
- return createReadStream$2158(_tmp);
6202
+ return createReadStream$2278(_tmp);
5907
6203
  }
5908
6204
  function _M0FP36kazuph5reviw6server24pipe__file__to__response(file_path, res, content_type) {
5909
6205
  const stat = _M0FP36kazuph5reviw6server14fs__stat__sync(file_path);
@@ -5916,8 +6212,8 @@ function _M0FP36kazuph5reviw6server24pipe__file__to__response(file_path, res, co
5916
6212
  function _M0FP36kazuph5reviw6server19serve__static__file(ctx, url, req, res) {
5917
6213
  const qmark = _M0FP36kazuph5reviw6server9index__of(url, 63);
5918
6214
  const url_path = qmark >= 0 ? _M0FP36kazuph5reviw4core18safe__slice__range(url, 0, qmark) : url;
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 })) {
6215
+ const relative_path = _M0MP311moonbitlang4core6string6String11has__prefix(url_path, { str: _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c572, start: 0, end: _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c572.length }) ? _M0FP36kazuph5reviw4core11safe__slice(url_path, 1) : url_path;
6216
+ if (_M0MP311moonbitlang4core6string6String8contains(relative_path, { str: _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c570, start: 0, end: _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c570.length })) {
5921
6217
  _M0FP36kazuph5reviw6server16res__write__head(res, 403, "text/plain");
5922
6218
  _M0FP36kazuph5reviw6server8res__end(res, "Forbidden");
5923
6219
  return undefined;
@@ -5934,7 +6230,7 @@ function _M0FP36kazuph5reviw6server19serve__static__file(ctx, url, req, res) {
5934
6230
  if (_M0FP36kazuph5reviw6server12exists__sync(resolved_static) && _M0FP36kazuph5reviw6server14is__file__sync(resolved_static)) {
5935
6231
  const ext = _M0MP311moonbitlang4core6string6String9to__lower(_M0FP36kazuph5reviw6server13path__extname(resolved_static));
5936
6232
  const content_type = _M0FP36kazuph5reviw6server15get__mime__type(ext);
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 });
6233
+ const is_video = _M0MP311moonbitlang4core6string6String11has__prefix(content_type, { str: _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c571, start: 0, end: _M0FP36kazuph5reviw6server35serve__static__file_2e_2abind_7c571.length });
5938
6234
  const range = _M0FP36kazuph5reviw6server18req__range__header(req);
5939
6235
  if (is_video && range.length > 0) {
5940
6236
  _M0FP36kazuph5reviw6server17pipe__file__range(resolved_static, res, content_type, range);
@@ -5952,8 +6248,8 @@ function _M0FP36kazuph5reviw6server19serve__static__file(ctx, url, req, res) {
5952
6248
  function _M0FP36kazuph5reviw6server25serve__static__file__head(ctx, url, res) {
5953
6249
  const qmark = _M0FP36kazuph5reviw6server9index__of(url, 63);
5954
6250
  const url_path = qmark >= 0 ? _M0FP36kazuph5reviw4core18safe__slice__range(url, 0, qmark) : url;
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 })) {
6251
+ const relative_path = _M0MP311moonbitlang4core6string6String11has__prefix(url_path, { str: _M0FP36kazuph5reviw6server41serve__static__file__head_2e_2abind_7c574, start: 0, end: _M0FP36kazuph5reviw6server41serve__static__file__head_2e_2abind_7c574.length }) ? _M0FP36kazuph5reviw4core11safe__slice(url_path, 1) : url_path;
6252
+ if (_M0MP311moonbitlang4core6string6String8contains(relative_path, { str: _M0FP36kazuph5reviw6server41serve__static__file__head_2e_2abind_7c573, start: 0, end: _M0FP36kazuph5reviw6server41serve__static__file__head_2e_2abind_7c573.length })) {
5957
6253
  _M0FP36kazuph5reviw6server16res__write__head(res, 403, "text/plain");
5958
6254
  _M0FP36kazuph5reviw6server8res__end(res, "");
5959
6255
  return undefined;
@@ -6014,54 +6310,72 @@ function _M0FP36kazuph5reviw6server15handle__request(ctx, req, res) {
6014
6310
  _M0FP36kazuph5reviw6server8res__end(res, history_json);
6015
6311
  return;
6016
6312
  } else {
6017
- if (http_method === "GET" && _M0MP311moonbitlang4core6string6String11has__prefix(url, { str: _M0FP36kazuph5reviw6server31handle__request_2e_2abind_7c524, start: 0, end: _M0FP36kazuph5reviw6server31handle__request_2e_2abind_7c524.length })) {
6313
+ if (http_method === "GET" && _M0MP311moonbitlang4core6string6String11has__prefix(url, { str: _M0FP36kazuph5reviw6server31handle__request_2e_2abind_7c575, start: 0, end: _M0FP36kazuph5reviw6server31handle__request_2e_2abind_7c575.length })) {
6018
6314
  _M0FP36kazuph5reviw6server23handle__video__timeline(ctx, url, res);
6019
6315
  return;
6020
6316
  } else {
6021
- if (http_method === "POST" && url === "/exit") {
6317
+ if (http_method === "POST" && url === "/session/open") {
6022
6318
  _M0FP36kazuph5reviw6server10read__body(req, (body) => {
6023
- _M0FP36kazuph5reviw6server14handle__submit(ctx, body);
6319
+ _M0FP36kazuph5reviw6server21handle__session__open(ctx, body);
6024
6320
  _M0FP36kazuph5reviw6server16res__write__head(res, 200, "application/json");
6025
6321
  _M0FP36kazuph5reviw6server8res__end(res, "{\"ok\":true}");
6026
6322
  });
6027
6323
  return;
6028
6324
  } else {
6029
- if (http_method === "HEAD") {
6030
- if (url === "/" || url === "/index.html") {
6031
- _M0FP36kazuph5reviw6server16res__write__head(res, 200, "text/html; charset=utf-8");
6032
- _M0FP36kazuph5reviw6server8res__end(res, "");
6325
+ if (http_method === "POST" && url === "/close") {
6326
+ _M0FP36kazuph5reviw6server10read__body(req, (body) => {
6327
+ _M0FP36kazuph5reviw6server22handle__session__close(ctx, body);
6328
+ _M0FP36kazuph5reviw6server16res__write__head(res, 200, "application/json");
6329
+ _M0FP36kazuph5reviw6server8res__end(res, "{\"ok\":true}");
6330
+ });
6331
+ return;
6332
+ } else {
6333
+ if (http_method === "POST" && url === "/exit") {
6334
+ _M0FP36kazuph5reviw6server10read__body(req, (body) => {
6335
+ _M0FP36kazuph5reviw6server14handle__submit(ctx, body);
6336
+ _M0FP36kazuph5reviw6server16res__write__head(res, 200, "application/json");
6337
+ _M0FP36kazuph5reviw6server8res__end(res, "{\"ok\":true}");
6338
+ });
6033
6339
  return;
6034
6340
  } else {
6035
- if (url === "/healthz") {
6036
- _M0FP36kazuph5reviw6server16res__write__head(res, 200, "application/json");
6037
- _M0FP36kazuph5reviw6server8res__end(res, "");
6038
- return;
6039
- } else {
6040
- if (url === "/ui.js") {
6041
- _M0FP36kazuph5reviw6server16res__write__head(res, 200, "application/javascript; charset=utf-8");
6341
+ if (http_method === "HEAD") {
6342
+ if (url === "/" || url === "/index.html") {
6343
+ _M0FP36kazuph5reviw6server16res__write__head(res, 200, "text/html; charset=utf-8");
6042
6344
  _M0FP36kazuph5reviw6server8res__end(res, "");
6043
6345
  return;
6044
6346
  } else {
6045
- if (url === "/history") {
6347
+ if (url === "/healthz") {
6046
6348
  _M0FP36kazuph5reviw6server16res__write__head(res, 200, "application/json");
6047
6349
  _M0FP36kazuph5reviw6server8res__end(res, "");
6048
6350
  return;
6049
6351
  } else {
6050
- _M0FP36kazuph5reviw6server25serve__static__file__head(ctx, url, res);
6051
- return;
6352
+ if (url === "/ui.js") {
6353
+ _M0FP36kazuph5reviw6server16res__write__head(res, 200, "application/javascript; charset=utf-8");
6354
+ _M0FP36kazuph5reviw6server8res__end(res, "");
6355
+ return;
6356
+ } else {
6357
+ if (url === "/history") {
6358
+ _M0FP36kazuph5reviw6server16res__write__head(res, 200, "application/json");
6359
+ _M0FP36kazuph5reviw6server8res__end(res, "");
6360
+ return;
6361
+ } else {
6362
+ _M0FP36kazuph5reviw6server25serve__static__file__head(ctx, url, res);
6363
+ return;
6364
+ }
6365
+ }
6052
6366
  }
6053
6367
  }
6368
+ } else {
6369
+ if (http_method === "GET") {
6370
+ _M0FP36kazuph5reviw6server19serve__static__file(ctx, url, req, res);
6371
+ return;
6372
+ } else {
6373
+ _M0FP36kazuph5reviw6server16res__write__head(res, 404, "text/plain");
6374
+ _M0FP36kazuph5reviw6server8res__end(res, "Not Found");
6375
+ return;
6376
+ }
6054
6377
  }
6055
6378
  }
6056
- } else {
6057
- if (http_method === "GET") {
6058
- _M0FP36kazuph5reviw6server19serve__static__file(ctx, url, req, res);
6059
- return;
6060
- } else {
6061
- _M0FP36kazuph5reviw6server16res__write__head(res, 404, "text/plain");
6062
- _M0FP36kazuph5reviw6server8res__end(res, "Not Found");
6063
- return;
6064
- }
6065
6379
  }
6066
6380
  }
6067
6381
  }
@@ -6085,13 +6399,13 @@ function _M0FP36kazuph5reviw6server28try__activate__existing__tab(url) {
6085
6399
  }
6086
6400
  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`;
6087
6401
  const chrome_result = _M0FP36kazuph5reviw6server19spawn__sync__result("osascript", `[\"-e\", ${_M0FP36kazuph5reviw6server19json__encode__value(chrome_script)}]`);
6088
- if (_M0MP311moonbitlang4core6string6String8contains(chrome_result, { str: _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c525, start: 0, end: _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c525.length })) {
6402
+ if (_M0MP311moonbitlang4core6string6String8contains(chrome_result, { str: _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c576, start: 0, end: _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c576.length })) {
6089
6403
  _M0FP36kazuph5reviw6server12console__log(`Activated existing Chrome tab: ${url}`);
6090
6404
  return true;
6091
6405
  }
6092
6406
  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`;
6093
6407
  const safari_result = _M0FP36kazuph5reviw6server19spawn__sync__result("osascript", `[\"-e\", ${_M0FP36kazuph5reviw6server19json__encode__value(safari_script)}]`);
6094
- if (_M0MP311moonbitlang4core6string6String8contains(safari_result, { str: _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c526, start: 0, end: _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c526.length })) {
6408
+ if (_M0MP311moonbitlang4core6string6String8contains(safari_result, { str: _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c577, start: 0, end: _M0FP36kazuph5reviw6server44try__activate__existing__tab_2e_2abind_7c577.length })) {
6095
6409
  _M0FP36kazuph5reviw6server12console__log(`Activated existing Safari tab: ${url}`);
6096
6410
  return true;
6097
6411
  }
@@ -6134,10 +6448,12 @@ function _M0FP36kazuph5reviw6server11try__listen(ctx, port, attempt, no_open) {
6134
6448
  return;
6135
6449
  }
6136
6450
  });
6137
- _M0FP36kazuph5reviw6server14server__listen(server, port, () => {
6451
+ const host = _M0FP36kazuph5reviw6server10bind__host.val;
6452
+ _M0FP36kazuph5reviw6server14server__listen(server, port, host, () => {
6138
6453
  ctx.port = port;
6139
6454
  _M0FP36kazuph5reviw6server11write__lock(port);
6140
- const url = `http://127.0.0.1:${_M0IP016_24default__implP311moonbitlang4core7builtin4Show10to__stringGiE(port)}`;
6455
+ const display_host = host === "0.0.0.0" ? "127.0.0.1" : host;
6456
+ const url = `http://${display_host}:${_M0IP016_24default__implP311moonbitlang4core7builtin4Show10to__stringGiE(port)}`;
6141
6457
  _M0FP36kazuph5reviw6server12console__log(`reviw serving ${ctx.filename} at ${url}`);
6142
6458
  if (!no_open) {
6143
6459
  _M0FP36kazuph5reviw6server13open__browser(url);
@@ -6167,13 +6483,16 @@ function _M0FP36kazuph5reviw6server19start__http__server(ctx, no_open) {
6167
6483
  _M0FP36kazuph5reviw6server11try__listen(ctx, ctx.port, 0, no_open);
6168
6484
  }
6169
6485
  function _M0FP36kazuph5reviw6server11watch__file(_tmp, _tmp$2) {
6170
- return watchFile$2194(_tmp, _tmp$2);
6486
+ return watchFile$2315(_tmp, _tmp$2);
6171
6487
  }
6172
6488
  function _M0FP36kazuph5reviw6server19start__file__server(file_path, port, no_open) {
6173
6489
  const resolved = _M0FP36kazuph5reviw6server13path__resolve(file_path);
6174
6490
  const filename = _M0FP36kazuph5reviw6server14path__basename(resolved);
6175
6491
  const mode = _M0FP36kazuph5reviw6server12detect__mode(resolved);
6176
- const ctx = { file_path: resolved, filename: filename, mode: mode, port: port, html_cache: "", sse_clients: [] };
6492
+ const _tmp = [];
6493
+ const _tmp$2 = [];
6494
+ const _bind = [];
6495
+ const ctx = { file_path: resolved, filename: filename, mode: mode, port: port, html_cache: "", sse_clients: _tmp, active_tabs: _tmp$2, active_tab_instances: _M0MP311moonbitlang4core7builtin3Map11from__arrayGssE({ buf: _bind, start: 0, end: 0 }), pending_close_timer: _M0FP36kazuph5reviw6server8js__null(), finished: false };
6177
6496
  ctx.html_cache = _M0FP36kazuph5reviw6server22load__and__build__html(ctx);
6178
6497
  _M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw6server13ServerContextE(_M0FP36kazuph5reviw6server15active__servers, ctx);
6179
6498
  const _p = ctx.file_path;
@@ -6183,13 +6502,13 @@ function _M0FP36kazuph5reviw6server19start__file__server(file_path, port, no_ope
6183
6502
  _M0FP36kazuph5reviw6server11watch__file(resolved, (_curr, _prev) => {
6184
6503
  ctx.html_cache = _M0FP36kazuph5reviw6server22load__and__build__html(ctx);
6185
6504
  const _len = clients.length;
6186
- let _tmp = 0;
6505
+ let _tmp$3 = 0;
6187
6506
  while (true) {
6188
- const _i = _tmp;
6507
+ const _i = _tmp$3;
6189
6508
  if (_i < _len) {
6190
6509
  const client = clients[_i];
6191
6510
  _M0FP36kazuph5reviw6server9sse__send(client, "reload", "");
6192
- _tmp = _i + 1 | 0;
6511
+ _tmp$3 = _i + 1 | 0;
6193
6512
  continue;
6194
6513
  } else {
6195
6514
  return;
@@ -6202,7 +6521,10 @@ function _M0FP36kazuph5reviw6server19start__file__server(file_path, port, no_ope
6202
6521
  function _M0FP36kazuph5reviw6server20start__stdin__server(content, port, no_open) {
6203
6522
  const data = _M0FP36kazuph5reviw4core11parse__diff(content);
6204
6523
  const html = _M0FP36kazuph5reviw4core17build__diff__html(data, "stdin", port);
6205
- const ctx = { file_path: "<stdin>", filename: "stdin", mode: 3, port: port, html_cache: html, sse_clients: [] };
6524
+ const _tmp = [];
6525
+ const _tmp$2 = [];
6526
+ const _bind = [];
6527
+ const ctx = { file_path: "<stdin>", filename: "stdin", mode: 3, port: port, html_cache: html, sse_clients: _tmp, active_tabs: _tmp$2, active_tab_instances: _M0MP311moonbitlang4core7builtin3Map11from__arrayGssE({ buf: _bind, start: 0, end: 0 }), pending_close_timer: _M0FP36kazuph5reviw6server8js__null(), finished: false };
6206
6528
  _M0MP311moonbitlang4core5array5Array4pushGRP36kazuph5reviw6server13ServerContextE(_M0FP36kazuph5reviw6server15active__servers, ctx);
6207
6529
  _M0FP36kazuph5reviw6server15expected__count.val = 1;
6208
6530
  _M0FP36kazuph5reviw6server19start__http__server(ctx, no_open);
@@ -6210,11 +6532,11 @@ function _M0FP36kazuph5reviw6server20start__stdin__server(content, port, no_open
6210
6532
  (() => {
6211
6533
  const argv = _M0FP36kazuph5reviw6server9get__argv();
6212
6534
  const args = [];
6213
- const _end413 = argv.length;
6535
+ const _end453 = argv.length;
6214
6536
  let _tmp = 2;
6215
6537
  while (true) {
6216
6538
  const i = _tmp;
6217
- if (i < _end413) {
6539
+ if (i < _end453) {
6218
6540
  _M0MP311moonbitlang4core5array5Array4pushGsE(args, _M0MP311moonbitlang4core5array5Array2atGsE(argv, i));
6219
6541
  _tmp = i + 1 | 0;
6220
6542
  continue;
@@ -6247,14 +6569,21 @@ function _M0FP36kazuph5reviw6server20start__stdin__server(content, port, no_open
6247
6569
  if (arg === "--no-open") {
6248
6570
  no_open = true;
6249
6571
  } else {
6250
- if (arg === "--encoding" || arg === "-e") {
6572
+ if (arg === "--host") {
6251
6573
  i = i + 1 | 0;
6252
6574
  if (i < args.length) {
6253
- _M0FP36kazuph5reviw6server18encoding__override.val = _M0MP311moonbitlang4core5array5Array2atGsE(args, i);
6575
+ _M0FP36kazuph5reviw6server10bind__host.val = _M0MP311moonbitlang4core5array5Array2atGsE(args, i);
6254
6576
  }
6255
6577
  } else {
6256
- if (!_M0MP311moonbitlang4core6string6String11has__prefix(arg, { str: _M0FP36kazuph5reviw6server26_2ainit_2a_2e_2abind_7c536, start: 0, end: _M0FP36kazuph5reviw6server26_2ainit_2a_2e_2abind_7c536.length })) {
6257
- _M0MP311moonbitlang4core5array5Array4pushGsE(files, arg);
6578
+ if (arg === "--encoding" || arg === "-e") {
6579
+ i = i + 1 | 0;
6580
+ if (i < args.length) {
6581
+ _M0FP36kazuph5reviw6server18encoding__override.val = _M0MP311moonbitlang4core5array5Array2atGsE(args, i);
6582
+ }
6583
+ } else {
6584
+ if (!_M0MP311moonbitlang4core6string6String11has__prefix(arg, { str: _M0FP36kazuph5reviw6server26_2ainit_2a_2e_2abind_7c589, start: 0, end: _M0FP36kazuph5reviw6server26_2ainit_2a_2e_2abind_7c589.length })) {
6585
+ _M0MP311moonbitlang4core5array5Array4pushGsE(files, arg);
6586
+ }
6258
6587
  }
6259
6588
  }
6260
6589
  }