@waterwx/dsh-novel-forge 2.5.0 → 2.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/client.js CHANGED
@@ -316,6 +316,56 @@ window.__ModuleLoader__.load({
316
316
  body: JSON.stringify(withBookIdBody(payload))
317
317
  }));
318
318
  }
319
+ /**
320
+ * 统一的 NDJSON 流读取(任务流 / 助手 / 改编重写三处共用)。
321
+ *
322
+ * 收掉两个旧坑:
323
+ * 1. 流结束时 `buffer` 里最后一行若没有换行符会被丢掉——丢的恰好常是 done/error 帧;
324
+ * 2. 旧的 streamJob / adaptRewriteStream 不带 bookId,切书并发时会打到全局 active 书。
325
+ *
326
+ * @param path 路由。
327
+ * @param payload 请求体(自动注入当前书 bookId)。
328
+ * @param onFrame 每帧回调。
329
+ * @param errorLabel 无响应体时的错误前缀。
330
+ */
331
+ async function streamNdjson(path, payload, onFrame, errorLabel) {
332
+ const response = await fetch(path, {
333
+ method: "POST",
334
+ headers: { "content-type": "application/json" },
335
+ body: JSON.stringify(withBookIdBody(payload))
336
+ });
337
+ if (!response.ok) {
338
+ await readJson(response);
339
+ return;
340
+ }
341
+ if (response.body === null) throw new NovelApiError(`${errorLabel}: no response body`);
342
+ const reader = response.body.getReader();
343
+ const decoder = new TextDecoder();
344
+ let buffer = "";
345
+ const emit = (line) => {
346
+ const trimmed = line.trim();
347
+ if (trimmed === "") return;
348
+ let frame;
349
+ try {
350
+ frame = JSON.parse(trimmed);
351
+ } catch {
352
+ return;
353
+ }
354
+ onFrame(frame);
355
+ const message = frame.message;
356
+ if (frame.type === "error" && typeof message === "string") throw new NovelApiError(message);
357
+ };
358
+ for (;;) {
359
+ const { done, value } = await reader.read();
360
+ if (done) break;
361
+ buffer += decoder.decode(value, { stream: true });
362
+ const lines = buffer.split("\n");
363
+ buffer = lines.pop() ?? "";
364
+ for (const line of lines) emit(line);
365
+ }
366
+ buffer += decoder.decode();
367
+ if (buffer.trim() !== "") emit(buffer);
368
+ }
319
369
  /** The browser half's only data entry point. */
320
370
  var NovelApi = class {
321
371
  async status() {
@@ -714,37 +764,7 @@ window.__ModuleLoader__.load({
714
764
  * @param onFrame - receives every frame as it lands.
715
765
  */
716
766
  async streamJob(path, payload, onFrame) {
717
- const response = await fetch(path, {
718
- method: "POST",
719
- headers: { "content-type": "application/json" },
720
- body: JSON.stringify(payload)
721
- });
722
- if (!response.ok) {
723
- await readJson(response);
724
- return;
725
- }
726
- if (response.body === null) throw new NovelApiError("job: no response body");
727
- const reader = response.body.getReader();
728
- const decoder = new TextDecoder();
729
- let buffer = "";
730
- for (;;) {
731
- const { done, value } = await reader.read();
732
- if (done) break;
733
- buffer += decoder.decode(value, { stream: true });
734
- const lines = buffer.split("\n");
735
- buffer = lines.pop() ?? "";
736
- for (const line of lines) {
737
- if (line.trim() === "") continue;
738
- let frame;
739
- try {
740
- frame = JSON.parse(line);
741
- } catch {
742
- continue;
743
- }
744
- onFrame(frame);
745
- if (frame.type === "error") throw new NovelApiError(frame.message);
746
- }
747
- }
767
+ await streamNdjson(path, payload, onFrame, "job");
748
768
  }
749
769
  /** Generate one chapter. */
750
770
  async generate(chapterNo, skipReview, onFrame) {
@@ -779,37 +799,7 @@ window.__ModuleLoader__.load({
779
799
  }
780
800
  /** Run one assistant turn (NDJSON stream). */
781
801
  async assistant(message, onFrame) {
782
- const response = await fetch(NOVEL_API.assistant, {
783
- method: "POST",
784
- headers: { "content-type": "application/json" },
785
- body: JSON.stringify(withBookIdBody({ message }))
786
- });
787
- if (!response.ok) {
788
- await readJson(response);
789
- return;
790
- }
791
- if (response.body === null) throw new NovelApiError("assistant: no response body");
792
- const reader = response.body.getReader();
793
- const decoder = new TextDecoder();
794
- let buffer = "";
795
- for (;;) {
796
- const { done, value } = await reader.read();
797
- if (done) break;
798
- buffer += decoder.decode(value, { stream: true });
799
- const lines = buffer.split("\n");
800
- buffer = lines.pop() ?? "";
801
- for (const line of lines) {
802
- if (line.trim() === "") continue;
803
- let frame;
804
- try {
805
- frame = JSON.parse(line);
806
- } catch {
807
- continue;
808
- }
809
- onFrame(frame);
810
- if (frame.type === "error") throw new NovelApiError(frame.message);
811
- }
812
- }
802
+ await streamNdjson(NOVEL_API.assistant, { message }, onFrame, "assistant");
813
803
  }
814
804
  /** 张力曲线:数据 + 规则核对。 */
815
805
  async tension() {
@@ -995,37 +985,7 @@ window.__ModuleLoader__.load({
995
985
  }
996
986
  /** 改编模式:rewrite 逐章重写(NDJSON 流式进度,支持分段 startNo/endNo)。 */
997
987
  async adaptRewriteStream(req, onFrame) {
998
- const response = await fetch(NOVEL_API.adaptRewriteStream, {
999
- method: "POST",
1000
- headers: { "content-type": "application/json" },
1001
- body: JSON.stringify(req)
1002
- });
1003
- if (!response.ok) {
1004
- await readJson(response);
1005
- return;
1006
- }
1007
- if (response.body === null) throw new NovelApiError("adapt rewrite: no response body");
1008
- const reader = response.body.getReader();
1009
- const decoder = new TextDecoder();
1010
- let buffer = "";
1011
- for (;;) {
1012
- const { done, value } = await reader.read();
1013
- if (done) break;
1014
- buffer += decoder.decode(value, { stream: true });
1015
- const lines = buffer.split("\n");
1016
- buffer = lines.pop() ?? "";
1017
- for (const line of lines) {
1018
- if (line.trim() === "") continue;
1019
- let frame;
1020
- try {
1021
- frame = JSON.parse(line);
1022
- } catch {
1023
- continue;
1024
- }
1025
- onFrame(frame);
1026
- if (frame.type === "error") throw new NovelApiError(frame.message);
1027
- }
1028
- }
988
+ await streamNdjson(NOVEL_API.adaptRewriteStream, req, onFrame, "adapt rewrite");
1029
989
  }
1030
990
  /** 主题自定义背景:上传图片,服务端存盘并返回可访问 URL。 */
1031
991
  async themeBackgroundUpload(dataUrl) {
@@ -1033,56 +993,6 @@ window.__ModuleLoader__.load({
1033
993
  }
1034
994
  };
1035
995
  //#endregion
1036
- //#region src/strip-headings.ts
1037
- /**
1038
- * 章节正文的标题剥离(唯一实现)。
1039
- *
1040
- * ## 为什么要抽
1041
- *
1042
- * 全项目有 21 处散落着「把正文里的 markdown 标题剥掉」,写成
1043
- * `body.replace(/^#\s+.*$/m, '')`。这个写法**只删第一行**——
1044
- * `String.replace` 无 `g` 修饰符时只替换第一个匹配,而 `m` 只影响 `^` 的语义
1045
- * (让它匹配每一行的行首),**不控制替换次数**。于是同一份代码库里
1046
- * 两种写法并存:
1047
- *
1048
- * `replace(/^#.*$/gm, '')` → 所有标题行都剥掉(正确)
1049
- * `replace(/^#\s+.*$/m, '')` → 只剥掉首行标题(漏)
1050
- *
1051
- * 漏掉的后果不是报错:
1052
- * - 送进 LLM 的正文里夹着 `# 中间插入的标题`,模型会以为那是结构指令;
1053
- * - diff 视图把标题当正文段落,段落 LCS 完全对不齐,作者看到满屏红绿。
1054
- *
1055
- * 现在只有一个实现,行为统一为「剥掉所有 markdown 标题行」,
1056
- * 且**跳过围栏代码块**——否则 ```sh 里的 `# 这是注释` 会被当成标题剥掉,
1057
- * 代码示例凭空少一行。
1058
- */
1059
- /** 围栏代码块的起止行。 */
1060
- const FENCE$1 = /^\s{0,3}(?:```|~~~)/;
1061
- /**
1062
- * 剥掉正文里的 markdown 标题行。
1063
- *
1064
- * 保留其他内容原样(含行内空白),调用方自行再 `trim()`。
1065
- * 判为标题:行首 1-6 个 `#` + 空白 + 内容。`#tag` 这类无空白的行首井号
1066
- * **不**算标题(那是标签,不是标题)。围栏代码块内的行一律不动。
1067
- *
1068
- * @param body - 原始正文。
1069
- * @returns 去掉标题行后的正文。
1070
- */
1071
- function stripChapterHeadings(body) {
1072
- const out = [];
1073
- let inFence = false;
1074
- for (const line of body.split(/\r?\n/)) {
1075
- if (FENCE$1.test(line)) {
1076
- inFence = !inFence;
1077
- out.push(line);
1078
- continue;
1079
- }
1080
- if (!inFence && /^#{1,6}\s+\S/.test(line)) continue;
1081
- out.push(line);
1082
- }
1083
- return out.join("\n").trim();
1084
- }
1085
- //#endregion
1086
996
  //#region src/client/panel/outline-markdown.ts
1087
997
  /**
1088
998
  * 中文序号小标题:`一、` `二、` … `十、` `十一、` `二十三、`。
@@ -1103,7 +1013,7 @@ window.__ModuleLoader__.load({
1103
1013
  /** 分隔线。 */
1104
1014
  const HR = /^\s{0,3}(?:---+|\*\*\*+|___+)\s*$/;
1105
1015
  /** 围栏代码块。 */
1106
- const FENCE = /^\s{0,3}```\s*([A-Za-z0-9_+-]*)\s*$/;
1016
+ const FENCE$1 = /^\s{0,3}```\s*([A-Za-z0-9_+-]*)\s*$/;
1107
1017
  /** 表格分隔行:`| --- | :--- |`。 */
1108
1018
  const TABLE_SEP = /^\s*\|?\s*:?-{2,}:?\s*(\|\s*:?-{2,}:?\s*)*\|?\s*$/;
1109
1019
  /** 顶格书名:整行被《》包住(如 `《还债疯了》`)。 */
@@ -1258,7 +1168,7 @@ window.__ModuleLoader__.load({
1258
1168
  };
1259
1169
  for (let idx = 0; idx < lines.length; idx++) {
1260
1170
  const line = lines[idx].replace(/\s+$/, "");
1261
- const fence = FENCE.exec(line);
1171
+ const fence = FENCE$1.exec(line);
1262
1172
  if (fence !== null) {
1263
1173
  flushPara();
1264
1174
  flushList();
@@ -1266,7 +1176,7 @@ window.__ModuleLoader__.load({
1266
1176
  const body = [];
1267
1177
  let j = idx + 1;
1268
1178
  for (; j < lines.length; j++) {
1269
- if (FENCE.test(lines[j].replace(/\s+$/, ""))) break;
1179
+ if (FENCE$1.test(lines[j].replace(/\s+$/, ""))) break;
1270
1180
  body.push(lines[j]);
1271
1181
  }
1272
1182
  blocks.push({
@@ -1404,763 +1314,29 @@ window.__ModuleLoader__.load({
1404
1314
  };
1405
1315
  }
1406
1316
  //#endregion
1407
- //#region \0dsh-css:src/client/panel/panel.module.css.mjs
1408
- const css = ":root{--nf-font:-apple-system, BlinkMacSystemFont, \"SF Pro Text\", \"PingFang SC\", \"Hiragino Sans GB\", \"Microsoft YaHei\", \"Segoe UI\", Roboto, \"Helvetica Neue\", sans-serif;--nf-font-mono:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--nf-font-display:\"Noto Serif SC\", \"Source Han Serif SC\", \"Songti SC\", SimSun, \"Times New Roman\", serif;--nf-measure:720px;--nf-space-section:48px;--nf-fs-10:10px;--nf-fs-12:12px;--nf-fs-14:14px;--nf-fs-16:16px;--nf-fs-18:18px;--nf-fs-20:20px;--nf-fs-22:22px;--nf-fs-24:24px;--nf-fs-34:34px;--nf-fs-42:42px;--nf-fs-display:24px;--nf-fs-title:16px;--nf-r:12px;--nf-r-sm:8px;--nf-r-lg:16px;--nf-space:16px;--nf-space-lg:24px;--nf-fs-body:13px;--nf-fs-meta:12px;--nf-fs-caption:11px;--nf-fs-notice:12px;--nf-fs-notice-strong:13px;--nf-lh-body:1.65;--nf-lh-title:1.3;--nf-icon-s:14px;--nf-icon-m:16px;--nf-icon-l:18px;--nf-icon-xl:22px;--nf-space-2:2px;--nf-space-4:4px;--nf-space-6:6px;--nf-space-8:8px;--nf-space-10:10px;--nf-space-12:12px;--nf-space-14:14px;--nf-space-16:16px;--nf-space-18:18px;--nf-space-20:20px;--nf-space-24:24px;--nf-space-28:28px;--nf-space-30:30px;--nf-space-36:36px;--nf-space-40:40px;--nf-space-48:48px;--nf-space-32:32px;--nf-radius-2:2px;--nf-radius-4:4px;--nf-radius-6:6px;--nf-radius-8:8px;--nf-radius-10:10px;--nf-radius-12:12px;--nf-radius-14:14px;--nf-radius-16:16px;--nf-radius-20:20px;--nf-radius-22:22px;--nf-radius-999:999px;--nf-ctrl-s:28px;--nf-ctrl-m:32px;--nf-ctrl-l:38px;--nf-container-pad:20px 22px;--nf-container-gap:var(--nf-space-14,14px);--nf-card-pad:20px 22px;--nf-nav-pad:16px 12px 14px;--nf-focus-w:2px;--nf-focus-offset:2px;--nf-focus-radius:var(--nf-radius-6,6px);--nf-z-panel:60;--nf-z-float:80;--nf-z-modal:100;--nf-z-chip:2147480000;--nf-dur-fast:.12s;--nf-dur-base:.15s;--nf-dur-slow:.28s;--nf-ease-out:cubic-bezier(.32, .72, 0, 1)}.jbF1yq_entry{align-items:center;gap:var(--nf-space-8,8px);width:100%;padding:var(--nf-space-8,8px) var(--nf-space-12,12px);color:var(--dsw-alias-label-primary,#1f1f23);cursor:pointer;text-align:left;border-radius:var(--nf-radius-6,6px);transition:background var(--nf-dur-base,.15s) ease;background:0 0;border:none;font-size:14px;display:flex}body[data-ds-dark-theme] .jbF1yq_entry{color:var(--dsw-alias-label-primary,#ececf1)}.jbF1yq_entry:hover{background:var(--dsw-alias-interactive-bg-hover,#7f7f7f1f)}.jbF1yq_entry[data-active]{background:var(--dsw-alias-interactive-bg-active,#7f7f7f33)}.jbF1yq_entryIcon{flex-shrink:0;justify-content:center;align-items:center;width:20px;height:20px;display:inline-flex}.jbF1yq_entryLabel{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}[data-pane=conversation],[class*=centerCol]{position:relative}.jbF1yq_view{z-index:var(--nf-z-panel,60);color-scheme:light;font-family:var(--nf-font);--nf-bg:#f6f3ec;--nf-bg-raise:#fcfaf6;--nf-bg-inset:#efe9dc;--nf-bg-deep:#e9e2d4;--nf-line:#26221b24;--nf-line-2:#26221b0f;--nf-border:#26221b24;--nf-border-2:#26221b47;--nf-border-strong:#26221b4d;--nf-text:#26221b;--nf-text-1:#453e33;--nf-text-2:#6f665a;--nf-text-2-alpha:#6f665ab3;--nf-text-3:#726858;--nf-muted:var(--nf-text-3);--nf-muted-line:var(--nf-border);--nf-accent:#a63e2a;--nf-accent-hover:#8c3321;--nf-accent-soft:#a63e2a1f;--nf-accent-fg:#fdf3ee;--nf-seal:#a63e2a;--nf-seal-soft:#a63e2a1f;--nf-ai-soft:#c07c2221;--nf-human-soft:#2f6fa31f;--nf-ok:#5f9656;--nf-bad:#b94a41;--nf-hover:#26221b0d;--nf-success:#4f8750;--nf-error:#e5484d;--nf-danger:var(--nf-error);--nf-success-ink:#1b7a3a;--nf-success-ink-soft:#1b7a3a1a;--nf-error-ink:#b3271f;--nf-error-ink-soft:#b3271f1a;--nf-warn-ink:#8a5a00;--nf-warn-ink-soft:#8a5a001a;--nf-info-ink:#3c5b8a;--nf-info-ink-soft:#3c5b8a1a;--nf-toast-ok:var(--nf-success);--nf-warn:#aa741d;--nf-info:#4a6fa5;--nf-ai:#c07c22;--nf-human:#2f6fa3;--nf-idle:#cfc6b5;--nf-paper-grid:#26221b0d;--nf-shadow:0 1px 3px #1f1e1c0d, 0 12px 32px #1f1e1c12;--nf-shadow-lg:0 4px 12px #1f1e1c0f, 0 20px 48px #1f1e1c1c;--nf-card-shadow:0 2px 6px #1f1e1c0d, 0 14px 38px #1f1e1c1a;--nf-card-shadow-hover:0 4px 10px #1f1e1c12, 0 22px 52px #1f1e1c26;--nf-glass-face:var(--nf-bg-raise);--nf-glass-core:none;--nf-glass-sheen:transparent;--nf-glass-border:#a0917d47;--nf-glass-inset:#fff6;--nf-glass-noise:none;--nf-card-radius:16px;--nf-card-blur:0px;--nf-card-saturate:100%;--nf-card-brightness:1;--nf-card-sheen:transparent;--nf-card-border:1px solid #a0917d4d;--nf-ctrl-radius:12px;--nf-ctrl-bg:var(--nf-bg-raise);--nf-ctrl-border:1px solid #d6cbbad9;--nf-ctrl-sheen:#fffcf473;--nf-ctrl-caret:var(--nf-accent);--nf-glass-bg-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cfilter id='p'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 0.72 0 0 0 0 0.66 0 0 0 0 0.56 0 0 0 0.06 0'/%3E%3C/filter%3E%3Crect width='240' height='240' filter='url(%23p)'/%3E%3C/svg%3E\");background:var(--nf-bg);color:var(--nf-text);display:none;position:absolute;inset:0;overflow:auto;container:jbF1yq_nfpanel/inline-size}.jbF1yq_panel[data-nf-mode=dark],body[data-ds-dark-theme] .jbF1yq_panel:not([data-nf-mode]),.jbF1yq_view:has(>.jbF1yq_panel[data-nf-mode=dark]),body[data-ds-dark-theme] .jbF1yq_view:not(:has(>.jbF1yq_panel[data-nf-mode=light])){color-scheme:dark;--nf-bg:#17140f;--nf-bg-raise:#201c16;--nf-bg-inset:#2a241c;--nf-bg-deep:#100e0a;--nf-line:#f2e9dc1f;--nf-line-2:#f2e9dc0d;--nf-border:#f2e9dc1f;--nf-border-2:#f2e9dc2e;--nf-border-strong:#f2e9dc3d;--nf-text:#eee7da;--nf-text-1:#d3cab6;--nf-text-2:#b3a78f;--nf-text-2-alpha:#b3a78fb3;--nf-text-3:#9d927b;--nf-muted:var(--nf-text-3);--nf-muted-line:var(--nf-border);--nf-accent:#c0492d;--nf-accent-hover:#d95a3a;--nf-accent-soft:#c14a2e24;--nf-accent-fg:#fdf3ee;--nf-seal:#c0492d;--nf-seal-soft:#c14a2e24;--nf-ai-soft:#d98a2b1f;--nf-human-soft:#4aa3d91f;--nf-ok:#79b372;--nf-warn:#aa741d;--nf-bad:#d95753;--nf-hover:#f2e9dc0f;--nf-success:#83b87d;--nf-error:#d95753;--nf-danger:var(--nf-error);--nf-success-ink:#86c47f;--nf-success-ink-soft:#86c47f21;--nf-error-ink:#e8837e;--nf-error-ink-soft:#e8837e21;--nf-warn-ink:#edb44a;--nf-warn-ink-soft:#edb44a21;--nf-info-ink:#8aabd8;--nf-info-ink-soft:#8aabd821;--nf-toast-ok:var(--nf-success);--nf-info:#6b8fc7;--nf-ai:#d98a2b;--nf-human:#4aa3d9;--nf-idle:#5c5344;--nf-paper-grid:#f2e9dc0d;--nf-shadow:0 1px 2px #00000073, 0 10px 30px #00000073;--nf-shadow-lg:0 4px 12px #00000073, 0 20px 48px #0000008c;--nf-card-shadow:0 2px 6px #0000006b, 0 14px 38px #0000007a;--nf-card-shadow-hover:0 4px 10px #00000070, 0 22px 52px #00000094;--nf-glass-face:var(--nf-bg-raise);--nf-glass-core:none;--nf-glass-sheen:transparent;--nf-glass-border:#f2e9dc24;--nf-glass-inset:#ffffff0f;--nf-glass-noise:none;--nf-card-radius:16px;--nf-card-blur:0px;--nf-card-saturate:100%;--nf-card-brightness:1;--nf-card-border:1px solid #f2e9dc1f;--nf-card-sheen:transparent;--nf-glass-bg-image:none;--nf-ctrl-radius:12px;--nf-ctrl-bg:var(--nf-bg-raise);--nf-ctrl-border:1px solid #f2e9dc29;--nf-ctrl-sheen:#ffffff2e;--nf-ctrl-caret:var(--nf-accent)}html[data-dsh-novelforge-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) .jbF1yq_view{display:block}.jbF1yq_panel{min-width:0;height:100%;font-size:var(--nf-fs-14,14px);flex-direction:column;line-height:1.6;display:flex;position:relative;overflow:hidden}.jbF1yq_panelTop{flex-direction:column;flex:none;gap:12px;padding:16px 22px 0;display:flex}.jbF1yq_panelHead,.jbF1yq_topNav{border:1px solid var(--nf-line,var(--nf-border));border-radius:var(--nf-r-lg,16px);flex-wrap:wrap;align-items:center;padding:13px 16px;display:flex}.jbF1yq_panelHead{background:color-mix(in srgb, var(--nf-bg-deep,var(--nf-bg)) 92%, transparent);backdrop-filter:blur(12px);box-shadow:var(--nf-shadow,none);gap:12px}.jbF1yq_topNav{background:var(--nf-bg-raise);gap:16px}.jbF1yq_brand{cursor:pointer;user-select:none;align-items:center;gap:10px;min-width:0;display:flex}.jbF1yq_brandLogo{background:var(--nf-bg-inset,var(--nf-bg));border:1px solid var(--nf-line,var(--nf-border));width:32px;height:32px;font-family:var(--nf-font-display,Georgia, \"Songti SC\", SimSun, serif);font-weight:700;font-size:var(--nf-fs-16,16px);color:var(--nf-accent);border-radius:9px;flex:none;place-items:center;display:grid}.jbF1yq_brandText{flex-direction:column;min-width:0;display:flex}.jbF1yq_brandName{font-family:var(--nf-font-display,Georgia, \"Songti SC\", SimSun, serif);letter-spacing:0;color:var(--nf-text);white-space:nowrap;font-size:17px;font-weight:400;line-height:1.3}.jbF1yq_brandSub{font-size:var(--nf-fs-caption,11px);color:var(--nf-text-3,var(--nf-text-2,var(--nf-text)));white-space:nowrap;text-overflow:ellipsis;max-width:340px;overflow:hidden}.jbF1yq_headSpacer{flex:1}.jbF1yq_headChip{width:26px;height:26px;font-size:var(--nf-fs-12,12px);color:var(--nf-text-2,var(--nf-text));border:1px solid var(--nf-line,var(--nf-border));border-radius:var(--nf-r,12px);cursor:pointer;background:0 0;flex:none;place-items:center;display:grid}.jbF1yq_headChip:hover{background:var(--nf-bg-inset,var(--nf-bg-raise));color:var(--nf-text)}.jbF1yq_topNavLabel{font-size:var(--nf-fs-caption,11px);letter-spacing:.14em;text-transform:uppercase;color:var(--nf-text-3,var(--nf-text-2,var(--nf-text)));white-space:nowrap;margin:0 8px 0 2px}.jbF1yq_topNavBtn{font-size:var(--nf-fs-meta,12px);color:var(--nf-text-2);white-space:nowrap;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:8px;align-items:center;gap:6px;padding:5px 10px;transition:background .12s,color .12s,border-color .12s;display:inline-flex}.jbF1yq_topNavBtn:hover{background:var(--nf-hover);color:var(--nf-text)}.jbF1yq_topNavBtn.jbF1yq_active,.jbF1yq_topNavActive{background:var(--nf-ai-soft);border-color:color-mix(in srgb, var(--nf-ai) 40%, transparent);color:var(--nf-ai)}.jbF1yq_topNavNi{font-size:var(--nf-fs-12,12px);opacity:.85}.jbF1yq_topNavBadge{font-family:var(--nf-mono,monospace);font-size:var(--nf-fs-10,10px);background:var(--nf-bg-inset,var(--nf-bg-raise));border:1px solid var(--nf-border-2,var(--nf-border));color:var(--nf-text-2,var(--nf-text));border-radius:99px;padding:0 5px}.jbF1yq_topNavActive .jbF1yq_topNavBadge,.jbF1yq_topNavBtn.jbF1yq_active .jbF1yq_topNavBadge{background:color-mix(in srgb, var(--nf-ai) 14%, transparent);color:var(--nf-ai);border-color:#0000}.jbF1yq_topNavSpacer{flex:1}.jbF1yq_drawerScrim{z-index:60;background:#0f0a0673;animation:.18s jbF1yq_nfFadeIn;position:absolute;inset:0}@keyframes jbF1yq_nfFadeIn{0%{opacity:0}to{opacity:1}}.jbF1yq_contentDrawer{background:var(--nf-bg-raise,var(--nf-bg));border-left:1px solid var(--nf-border-strong,var(--nf-border));z-index:62;flex-direction:column;width:min(760px,92vw);animation:.22s jbF1yq_nfDrawerIn;display:flex;position:absolute;top:0;bottom:0;right:0;box-shadow:-18px 0 40px #0f0a062e}.jbF1yq_contentDrawer.jbF1yq_drawerMax{width:100%}.jbF1yq_contentDrawerBody{flex:1;min-height:0;padding:14px 16px;overflow-y:auto}@keyframes jbF1yq_nfDrawerIn{0%{opacity:0;transform:translate(28px)}to{opacity:1;transform:none}}.jbF1yq_wbIndexRow{align-items:center;gap:var(--nf-space-8);width:100%;padding:var(--nf-space-8) var(--nf-space-10);margin-bottom:var(--nf-space-4);border:1px solid var(--nf-border);border-radius:var(--nf-radius-6);background:var(--nf-bg);cursor:pointer;text-align:left;font-size:var(--nf-fs-14);color:var(--nf-text);display:flex}.jbF1yq_wbIndexRow:hover{border-color:var(--nf-border-strong,var(--nf-border));background:var(--nf-bg-inset,var(--nf-bg-raise))}.jbF1yq_wbIndexTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.jbF1yq_wbIndexVol{font-size:var(--nf-fs-12);letter-spacing:.06em;color:var(--nf-text-3,var(--nf-text-2));margin:var(--nf-space-10) 0 var(--nf-space-4);font-weight:600}.jbF1yq_drawerHead{background:var(--nf-bg-deep,var(--nf-bg));border-bottom:1px solid var(--nf-border-strong,var(--nf-border));flex:none;align-items:center;gap:8px;padding:10px 12px 10px 18px;display:flex}.jbF1yq_drawerTitle{font-size:var(--nf-fs-14,14px);color:var(--nf-text);white-space:nowrap;text-overflow:ellipsis;font-weight:600;overflow:hidden}.jbF1yq_drawerSpacer{flex:1}.jbF1yq_drawerHeadBtn{width:26px;height:26px;font-size:var(--nf-fs-12,12px);color:var(--nf-text-2,var(--nf-text));border:1px solid var(--nf-border-2,var(--nf-border));border-radius:var(--nf-radius-sm,8px);cursor:pointer;background:0 0;flex:none;place-items:center;display:grid}.jbF1yq_drawerHeadBtn:hover{background:var(--nf-bg-inset,var(--nf-bg-raise));color:var(--nf-text)}.jbF1yq_brandEn{font-size:var(--nf-fs-caption,11px);letter-spacing:.08em;color:var(--nf-text-3,var(--nf-text-2,var(--nf-text)));white-space:nowrap;font-weight:400}.jbF1yq_panel:before{content:\"\";z-index:0;pointer-events:none;background:linear-gradient(rgba(0, 0, 0, calc(var(--nf-glass-bg-dim,0) / 100)), rgba(0, 0, 0, calc(var(--nf-glass-bg-dim,0) / 100))), var(--nf-glass-bg-image,none) center / cover no-repeat;position:absolute;inset:0}.jbF1yq_panelTitle{font-size:var(--nf-fs-16,16px);letter-spacing:.2px;align-items:center;gap:var(--nf-space-8,8px);margin:0;font-weight:700;display:flex}.jbF1yq_panelTitle:before{content:\"\";border-radius:var(--nf-radius-2,2px);background:linear-gradient(180deg, var(--nf-accent), var(--nf-info));width:4px;height:16px}.jbF1yq_iconButton{cursor:pointer;font-size:var(--nf-fs-16,16px);color:var(--nf-text-2);padding:var(--nf-space-4,4px) var(--nf-space-10,9px);border-radius:var(--nf-radius-10,9px);transition:background var(--nf-dur-base,.15s) ease, color var(--nf-dur-base,.15s) ease, transform var(--nf-dur-fast,.12s) ease;background:0 0;border:none}.jbF1yq_iconButton:hover{background:var(--nf-hover);color:var(--nf-text);transform:translateY(-1px)}.jbF1yq_tab{padding:var(--nf-space-8,7px) var(--nf-space-14,13px);cursor:pointer;border-radius:var(--nf-radius-8,8px) var(--nf-radius-8,8px) 0 0;font-size:var(--nf-fs-14,13.5px);color:var(--nf-text-2);transition:color var(--nf-dur-base,.15s) ease, background var(--nf-dur-base,.15s) ease;background:0 0;border:none;font-weight:500;position:relative}.jbF1yq_tab:hover{color:var(--nf-text);background:var(--nf-hover)}.jbF1yq_tab[data-active]{color:var(--nf-accent);font-weight:600}.jbF1yq_tab[data-active]:after{content:\"\";border-radius:var(--nf-radius-2,2px) var(--nf-radius-2,2px) 0 0;background:var(--nf-accent);height:2.5px;position:absolute;bottom:-1px;left:10px;right:10px}.jbF1yq_panelContent{min-width:0;padding:var(--nf-container-pad,20px 22px);gap:var(--nf-container-gap,14px);z-index:1;flex-direction:column;flex:1;display:flex;position:relative;overflow:auto}.jbF1yq_panelContent>*{flex-shrink:0}.jbF1yq_pageHeader{justify-content:space-between;align-items:center;gap:var(--nf-space-14,14px);border-bottom:1px solid var(--nf-line-2,var(--nf-border));background:var(--nf-bg-deep);border-radius:var(--nf-r,12px) var(--nf-r,12px) 0 0;flex-wrap:wrap;margin:0;padding:14px 18px;display:flex}.jbF1yq_pageHeaderMain{min-width:0}.jbF1yq_pageHeaderEyebrow{font-size:var(--nf-fs-caption,11px);letter-spacing:.14em;text-transform:uppercase;color:var(--nf-text-3);align-items:center;gap:var(--nf-space-6);display:flex}.jbF1yq_pageHeaderTitle{font-family:var(--nf-font-display,Georgia, \"Songti SC\", SimSun, serif);font-size:var(--nf-fs-display,22px);line-height:var(--nf-lh-title,1.3);color:var(--nf-text);align-items:center;gap:var(--nf-space-8);font-weight:700;display:flex}.jbF1yq_pageHeaderSub{font-size:var(--nf-fs-meta,12px);color:var(--nf-text-2);max-width:var(--nf-measure,720px);line-height:var(--nf-lh-body,1.65);margin-top:var(--nf-space-2)}.jbF1yq_pageHeaderActions{gap:var(--nf-space-8);flex-wrap:wrap;align-items:center;display:flex}.jbF1yq_numSerif{font-family:var(--nf-font-display,Georgia, \"Songti SC\", SimSun, serif);font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\";font-weight:700}.jbF1yq_tabular{font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\"}.jbF1yq_docsSurface{background-image:repeating-linear-gradient(0deg, transparent 0, transparent 27px, var(--nf-paper-grid) 27px, var(--nf-paper-grid) 28px);background-blend-mode:normal;background-color:#0000;background-size:100% 28px}.jbF1yq_aiTag{font-family:var(--nf-font-mono,ui-monospace, monospace);letter-spacing:.08em;color:var(--nf-ai,var(--nf-accent));border:1px solid color-mix(in srgb, var(--nf-ai,var(--nf-accent)) 38%, transparent);vertical-align:middle;background:color-mix(in srgb, var(--nf-ai,var(--nf-accent)) 9%, transparent);border-radius:4px;align-items:center;margin-left:6px;padding:0 4px;font-size:9px;line-height:1.4;display:inline-flex}.jbF1yq_panelContent[data-tab=overview]>*,.jbF1yq_panelContent[data-tab=blurb]>*,.jbF1yq_panelContent[data-tab=settings]>*,.jbF1yq_panelContent[data-tab=director]>*,.jbF1yq_panelContent[data-tab=breakdown]>*,.jbF1yq_panelContent[data-tab=plotlines]>*{width:100%;max-width:calc(var(--nf-measure,720px) + 48px);margin-inline:auto}.jbF1yq_panelBody{z-index:1;flex:1;min-height:0;display:flex;position:relative}.jbF1yq_panelNav{align-self:stretch;gap:var(--nf-space-6,6px);width:216px;padding:var(--nf-nav-pad,16px 12px 14px);border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-16,18px);background:var(--nf-glass-face);box-shadow:var(--nf-shadow), inset 0 1px 0 var(--nf-glass-sheen);transition:width var(--nf-dur-base,.15s) ease;flex-direction:column;flex:none;margin:10px 0 10px 12px;display:flex;overflow-y:auto}.jbF1yq_navSpacer{flex:1;min-height:8px}.jbF1yq_navAbout{align-items:center;gap:var(--nf-space-8,8px);flex-direction:row;flex:none;display:flex}.jbF1yq_navAboutRow{justify-content:space-between;align-items:center;gap:var(--nf-space-4,4px);cursor:pointer;font-size:var(--nf-fs-12,11px);color:var(--nf-text-3);padding:var(--nf-space-4,4px) var(--nf-space-6,6px);border-radius:var(--nf-radius-8,8px);transition:color var(--nf-dur-base,.15s) ease, background var(--nf-dur-base,.15s) ease;text-align:left;white-space:nowrap;background:0 0;border:none;display:flex}.jbF1yq_navAboutRow:hover{color:var(--nf-text);background:var(--nf-hover)}.jbF1yq_navAboutUpdate{background:var(--nf-accent-soft);color:var(--nf-accent);cursor:pointer;font-size:var(--nf-fs-12,10.5px);padding:var(--nf-space-4,4px) var(--nf-space-6,6px);border-radius:var(--nf-radius-8,8px);text-align:left;white-space:nowrap;border:none;font-weight:600}.jbF1yq_navAboutUpdate:hover{color:var(--nf-accent-hover)}@keyframes jbF1yq_navBadgePulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.8)}}.jbF1yq_navTitle{cursor:pointer;align-items:center;gap:var(--nf-space-10,10px);padding:var(--nf-space-2,2px) var(--nf-space-6,6px) var(--nf-space-12,12px);border-bottom:1px solid var(--nf-border);flex:none;min-width:0;margin-bottom:6px;display:flex}.jbF1yq_navTitleLogo{border-radius:var(--nf-radius-10,10px);background:linear-gradient(145deg, var(--nf-accent), var(--nf-accent-hover));width:34px;height:34px;color:var(--nf-accent-fg);font-weight:800;font-size:var(--nf-fs-14,15px);box-shadow:0 6px 16px var(--nf-accent-soft);flex:none;justify-content:center;align-items:center;display:flex}.jbF1yq_navTitleName{font-weight:700;font-size:var(--nf-fs-14,15px);letter-spacing:.2px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.jbF1yq_navTitleBook{font-size:var(--nf-fs-12,11px);color:var(--nf-text-3);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.jbF1yq_panelNavCollapsed .jbF1yq_navTitle{padding:var(--nf-space-2,2px) 0 var(--nf-space-10,10px);justify-content:center}.jbF1yq_panelNavCollapsed .jbF1yq_navTitleLogo{width:32px;height:var(--nf-ctrl-m,32px)}.jbF1yq_card{border:1px solid var(--nf-border);gap:var(--nf-space-10,10px);background:var(--nf-bg-deep);min-width:0;transition:border-color var(--nf-dur-base,.15s) ease;border-radius:12px;flex-direction:column;padding:13px 14px;display:flex;position:relative}.jbF1yq_card:hover{border-color:var(--nf-border-strong)}.jbF1yq_cardTitle{font-size:var(--nf-fs-14,14px);color:var(--nf-text);align-items:center;gap:var(--nf-space-8,8px);margin:0;font-weight:650;display:flex}.jbF1yq_cardTitleLg{font-size:var(--nf-fs-16,16px);font-weight:650}.jbF1yq_button{align-items:center;gap:var(--nf-space-6,6px);border:1px solid var(--nf-line,var(--nf-border));background:var(--nf-bg-inset);color:var(--nf-text-2);border-radius:var(--nf-r-sm,8px);cursor:pointer;font-size:var(--nf-fs-meta,12px);transition:background var(--nf-dur-base,.15s) ease, border-color var(--nf-dur-base,.15s) ease, color var(--nf-dur-base,.15s) ease;white-space:nowrap;padding:5px 11px;font-weight:500;display:inline-flex}.jbF1yq_button:hover:not([disabled]){background:var(--nf-hover);border-color:var(--nf-border-strong);transform:translateY(-1px)}.jbF1yq_button:active:not([disabled]){transform:translateY(0)scale(.97)}.jbF1yq_button[disabled]{opacity:.45;cursor:not-allowed}.jbF1yq_buttonPrimary{border-color:var(--nf-accent);background:var(--nf-accent);color:var(--nf-accent-fg);border-radius:var(--nf-r-sm,8px);font-weight:700}.jbF1yq_buttonPrimary:hover:not([disabled]){background:var(--nf-accent-hover);border-color:var(--nf-accent-hover)}.jbF1yq_buttonDanger{border-color:var(--nf-error);color:var(--nf-error)}.jbF1yq_buttonDanger:hover:not([disabled]){background:#ff3b301a}.jbF1yq_buttonSmall{font-size:var(--nf-fs-caption,11px);border-radius:var(--nf-r-sm,8px);padding:3px 9px}.jbF1yq_field{gap:var(--nf-space-6,5px);flex-direction:column;display:flex}.jbF1yq_fieldLabel{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);font-weight:500}.jbF1yq_input{border:1px solid var(--nf-line,var(--nf-border));background:var(--nf-bg-inset);color:var(--nf-text);color-scheme:light;border-radius:var(--nf-r-sm,8px);font-size:var(--nf-fs-meta,12px);box-sizing:border-box;width:100%;transition:border-color var(--nf-dur-base,.15s) ease;padding:7px 10px}body[data-ds-dark-theme] .jbF1yq_input,.jbF1yq_panel[data-nf-mode=dark] .jbF1yq_input{color-scheme:dark}.jbF1yq_panel[data-nf-mode=light] .jbF1yq_input{color-scheme:light}select.jbF1yq_input{cursor:pointer;-webkit-appearance:none;appearance:none;background-image:linear-gradient(45deg, transparent 50%, var(--nf-ctrl-caret,var(--nf-text-3)) 50%), linear-gradient(135deg, var(--nf-ctrl-caret,var(--nf-text-3)) 50%, transparent 50%);background-position:calc(100% - 18px),calc(100% - 12px);background-repeat:no-repeat;background-size:6px 6px,6px 6px;padding-right:30px}.jbF1yq_input option{color:var(--nf-text);background:var(--nf-bg-raise);font-size:var(--nf-fs-14,15px)}.jbF1yq_input:focus,.jbF1yq_textarea:focus{border-color:var(--nf-accent);box-shadow:0 0 0 3px var(--nf-accent-soft);outline:none}.jbF1yq_input::placeholder,.jbF1yq_textarea::placeholder{color:var(--nf-text-3)}.jbF1yq_textarea{border:var(--nf-ctrl-border,1px solid var(--nf-border-strong));background:var(--nf-ctrl-bg,var(--nf-bg-inset));color:var(--nf-text);border-radius:var(--nf-ctrl-radius,12px);padding:var(--nf-space-10,9px) var(--nf-space-12,11px);font-size:var(--nf-fs-14,13px);box-sizing:border-box;resize:vertical;width:100%;min-height:200px;transition:border-color var(--nf-dur-base,.15s) ease, box-shadow var(--nf-dur-base,.15s) ease;font-family:inherit;line-height:1.7}.jbF1yq_row{align-items:center;gap:var(--nf-space-8,8px);flex-wrap:wrap;display:flex}.jbF1yq_chapterList{gap:var(--nf-space-8,8px);flex-direction:column;display:flex}.jbF1yq_chapter{align-items:center;gap:var(--nf-space-10,10px);padding:var(--nf-space-10,9px) var(--nf-space-12,12px);border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);background:var(--nf-bg);transition:border-color var(--nf-dur-base,.15s) ease, box-shadow var(--nf-dur-base,.15s) ease, transform var(--nf-dur-fast,.12s) ease;display:flex}.jbF1yq_chapter:hover{border-color:var(--nf-border-strong);box-shadow:var(--nf-shadow)}.jbF1yq_chapterFocus{animation:.9s ease-in-out 3 jbF1yq_chapterFocusPulse;border-color:var(--nf-accent)!important;box-shadow:0 0 0 3px color-mix(in srgb, var(--nf-accent) 35%, transparent)!important}@keyframes jbF1yq_chapterFocusPulse{0%,to{background:var(--nf-bg)}50%{background:color-mix(in srgb, var(--nf-accent) 18%, var(--nf-bg))}}.jbF1yq_chapterMain{flex:1;min-width:0}.jbF1yq_chapterTitle{font-weight:600;font-size:var(--nf-fs-14,13px);align-items:center;gap:var(--nf-space-8,8px);color:var(--nf-text);display:flex}.jbF1yq_chapter:hover .jbF1yq_chapterActions{opacity:1}.jbF1yq_badge{font-size:var(--nf-fs-12,11px);padding:var(--nf-space-2,2px) var(--nf-space-10,9px);border-radius:var(--nf-radius-999,999px);white-space:nowrap;letter-spacing:.2px;border:1px solid;font-weight:600}.jbF1yq_badgePending{color:var(--nf-info);border-color:var(--nf-info);background:color-mix(in srgb, var(--nf-info) 10%, transparent)}.jbF1yq_badgeGenerating{color:var(--nf-accent);border-color:var(--nf-accent);background:color-mix(in srgb, var(--nf-accent) 12%, transparent);animation:1.2s ease-in-out infinite jbF1yq_pulse}.jbF1yq_badgeWritten{color:var(--nf-warn);border-color:var(--nf-warn);background:color-mix(in srgb, var(--nf-warn) 10%, transparent)}.jbF1yq_badgeRejected{color:var(--nf-error);border-color:var(--nf-error);background:color-mix(in srgb, var(--nf-error) 10%, transparent)}.jbF1yq_badgeDone{color:var(--nf-success);border-color:var(--nf-success);background:color-mix(in srgb, var(--nf-success) 10%, transparent)}.jbF1yq_badgeError{color:var(--nf-error);border-color:var(--nf-error);background:color-mix(in srgb, var(--nf-error) 10%, transparent)}.jbF1yq_reviewBox{border:1px solid var(--nf-border-strong);border-radius:var(--nf-radius-12);padding:var(--nf-space-14) var(--nf-space-16);background:var(--nf-bg-inset);gap:var(--nf-space-10);font-size:var(--nf-fs-14);flex-direction:column;line-height:1.7;display:flex}.jbF1yq_chapterPreview{background-image:repeating-linear-gradient(0deg, transparent 0, transparent 27px, var(--nf-paper-grid) 27px, var(--nf-paper-grid) 28px);background-color:var(--nf-bg-raise);border:1px solid var(--nf-border);border-radius:var(--nf-radius-12);padding:var(--nf-space-20) var(--nf-space-24);font-family:var(--nf-font-display);color:var(--nf-text);white-space:pre-wrap;word-wrap:break-word;max-height:600px;margin:0;font-size:15px;line-height:2;overflow:auto}.jbF1yq_chatScroll{gap:var(--nf-space-10,10px);min-height:0;padding:var(--nf-space-14,14px);border:1px solid var(--nf-border);border-radius:var(--nf-radius-12,12px);background:var(--nf-bg-inset);flex-direction:column;flex:1;display:flex;overflow-y:auto}.jbF1yq_chatBubbleUser{background:linear-gradient(180deg, var(--nf-accent), var(--nf-accent-hover));max-width:72%;color:var(--nf-accent-fg);border-radius:var(--nf-radius-14,14px) var(--nf-radius-14,14px) var(--nf-radius-4,4px) var(--nf-radius-14,14px);padding:var(--nf-space-10,9px) var(--nf-space-14,14px);font-size:var(--nf-fs-14,13px);box-shadow:0 2px 6px color-mix(in srgb, var(--nf-accent) 32%, transparent);align-self:flex-end}.jbF1yq_chatBubbleAssistant{background:var(--nf-bg-raise);max-width:92%;color:var(--nf-text);border:1px solid var(--nf-border);border-radius:var(--nf-radius-14,14px) var(--nf-radius-14,14px) var(--nf-radius-14,14px) var(--nf-radius-4,4px);padding:var(--nf-space-10,9px) var(--nf-space-14,14px);font-size:var(--nf-fs-14,13px);box-shadow:var(--nf-shadow);align-self:flex-start}.jbF1yq_chatRole{font-size:var(--nf-fs-12,11px);color:var(--nf-text-3);margin-bottom:3px;font-weight:600}.jbF1yq_toolLive{padding:var(--nf-space-8,8px) var(--nf-space-10,10px);border-radius:var(--nf-radius-8,8px);background:var(--nf-bg-inset);border:1px dashed var(--nf-border-strong);font-size:var(--nf-fs-12,12px);white-space:pre-wrap;word-break:break-all;color:var(--nf-text-2);max-height:180px;margin-top:6px;line-height:1.7;overflow-y:auto}.jbF1yq_assistantStatus{padding:var(--nf-space-6,6px) var(--nf-space-12,12px);border-radius:var(--nf-radius-999,999px);font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);background:var(--nf-bg-inset);border:1px solid var(--nf-border);align-items:center;gap:var(--nf-space-6,6px);flex:none;margin-top:6px;display:flex}.jbF1yq_assistantStatusBusy{color:var(--nf-accent);border-color:var(--nf-accent);background:var(--nf-accent-soft);font-weight:600}.jbF1yq_toolSteps{gap:var(--nf-space-4,4px);flex-direction:column;margin-top:6px;display:flex}.jbF1yq_toolStep{align-items:center;gap:var(--nf-space-8,8px);padding:var(--nf-space-6,5px) var(--nf-space-10,10px);border-radius:var(--nf-radius-8,8px);font-size:var(--nf-fs-12,12px);background:var(--nf-bg-inset);border:1px solid var(--nf-border);display:flex}.jbF1yq_toolStepActive{border-color:var(--nf-accent);background:var(--nf-accent-soft)}.jbF1yq_toolStepError{border-color:var(--nf-error);background:color-mix(in srgb, var(--nf-error) 8%, transparent)}.jbF1yq_toolStepIcon{font-size:var(--nf-fs-14,13px);flex:none}.jbF1yq_toolStepName{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-weight:600;overflow:hidden}.jbF1yq_toolStepStatus{color:var(--nf-text-2);font-size:var(--nf-fs-12,11px);flex:none}.jbF1yq_toolStepActive .jbF1yq_toolStepStatus{color:var(--nf-accent)}.jbF1yq_toolStepError .jbF1yq_toolStepStatus{color:var(--nf-error)}.jbF1yq_toolStepDetail{width:100%;color:var(--nf-error);font-size:var(--nf-fs-12,11px);word-break:break-all}.jbF1yq_progress{border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);padding:var(--nf-space-10,10px) var(--nf-space-14,14px);font-size:var(--nf-fs-12,12px);white-space:pre-wrap;word-break:break-all;min-height:60px;max-height:220px;color:var(--nf-text-2);font-family:var(--nf-font-mono);background:var(--nf-bg-inset);line-height:1.8;overflow:auto}.jbF1yq_progressLine{color:var(--nf-text-2);opacity:.9}.jbF1yq_progressLineLive{color:var(--nf-accent);align-items:center;gap:var(--nf-space-8,8px);font-weight:600;display:flex}.jbF1yq_progressBar{border-radius:var(--nf-radius-999,999px);background:var(--nf-border);flex:none;width:110px;height:6px;display:inline-block;overflow:hidden}.jbF1yq_progressBarFill{border-radius:var(--nf-radius-4,3px);background:var(--nf-accent);height:100%;transition:width var(--nf-dur-slow,.28s) ease;display:block}.jbF1yq_busyRow{justify-content:space-between;align-items:center;gap:var(--nf-space-12,12px);flex-wrap:wrap;display:flex}.jbF1yq_liveText{font-size:var(--nf-fs-12,12px);font-variant-numeric:tabular-nums;color:var(--nf-text-2)}.jbF1yq_bigProgressBar{border-radius:var(--nf-radius-999,999px);background:var(--nf-border);height:8px;margin-top:10px;overflow:hidden}.jbF1yq_bigProgressBarFill{border-radius:var(--nf-radius-999,999px);background:linear-gradient(90deg, var(--nf-accent), var(--nf-accent-2,var(--nf-accent)));height:100%;transition:width var(--nf-dur-slow,.28s) ease;display:block}.jbF1yq_diffLegend{align-items:center;gap:var(--nf-space-14,14px);font-size:var(--nf-fs-12,12px);flex-wrap:wrap;margin:6px 0 8px;display:flex}.jbF1yq_legendOld{color:var(--nf-error);font-weight:700}.jbF1yq_legendNew{color:var(--nf-success);font-weight:700}.jbF1yq_onlyChanges{align-items:center;gap:var(--nf-space-4,4px);color:var(--nf-text-2);cursor:pointer;margin-left:auto;display:inline-flex}.jbF1yq_diffList{border:1px solid var(--nf-border);border-radius:var(--nf-radius-8,8px);background:var(--nf-bg-inset);min-height:0;padding:var(--nf-space-10,10px) var(--nf-space-12,12px);gap:var(--nf-space-8,8px);font-size:var(--nf-fs-14,13px);flex-direction:column;flex:1;line-height:1.7;display:flex;overflow-y:auto}.jbF1yq_diffSame{border:1px dashed var(--nf-border);border-radius:var(--nf-radius-6,6px);padding:var(--nf-space-6,6px) var(--nf-space-10,10px);color:var(--nf-text-2);opacity:.85}.jbF1yq_diffSame summary{cursor:pointer;font-size:var(--nf-fs-12,12px);user-select:none}.jbF1yq_diffSameBody{white-space:pre-wrap;margin-top:6px}.jbF1yq_diffChange{border:1px solid var(--nf-border);border-radius:var(--nf-radius-8,8px);grid-template-columns:1fr 1fr;display:grid;overflow:hidden}.jbF1yq_diffColumn{gap:var(--nf-space-6,6px);min-width:0;padding:var(--nf-space-8,8px) var(--nf-space-10,10px);flex-direction:column;display:flex}.jbF1yq_diffColumn:first-child{border-right:1px solid var(--nf-border)}.jbF1yq_diffTagOld,.jbF1yq_diffTagNew{font-size:var(--nf-fs-12,11px);border-radius:var(--nf-radius-4,4px);padding:var(--nf-space-2,1px) var(--nf-space-8,7px);letter-spacing:.5px;flex:none;align-self:flex-start;font-weight:700}.jbF1yq_diffTagOld{color:var(--nf-error);background:color-mix(in srgb, var(--nf-error) 16%, transparent);border:1px solid color-mix(in srgb, var(--nf-error) 45%, transparent)}.jbF1yq_diffTagNew{color:var(--nf-success);background:color-mix(in srgb, var(--nf-success) 16%, transparent);border:1px solid color-mix(in srgb, var(--nf-success) 45%, transparent)}.jbF1yq_diffOld{color:var(--nf-error);white-space:pre-wrap;text-decoration:line-through;text-decoration-color:color-mix(in srgb, var(--nf-error) 55%, transparent)}.jbF1yq_diffNew{color:var(--nf-success);white-space:pre-wrap;font-weight:500}.jbF1yq_diffDel{gap:var(--nf-space-4,4px);padding:var(--nf-space-6,6px) var(--nf-space-10,10px);border-radius:var(--nf-radius-6,6px);border:1px solid color-mix(in srgb, var(--nf-error) 35%, transparent);background:color-mix(in srgb, var(--nf-error) 7%, transparent);flex-direction:column;display:flex}.jbF1yq_diffAdd{gap:var(--nf-space-4,4px);padding:var(--nf-space-6,6px) var(--nf-space-10,10px);border-radius:var(--nf-radius-6,6px);border:1px solid color-mix(in srgb, var(--nf-success) 35%, transparent);background:color-mix(in srgb, var(--nf-success) 7%, transparent);flex-direction:column;display:flex}.jbF1yq_diffText{white-space:pre-wrap}.jbF1yq_diffDel .jbF1yq_diffText{color:var(--nf-error);text-decoration:line-through;text-decoration-color:color-mix(in srgb, var(--nf-error) 50%, transparent)}.jbF1yq_diffAdd .jbF1yq_diffText{color:var(--nf-success)}.jbF1yq_wsPage{gap:var(--nf-space-10,10px);flex-direction:column;flex:1;min-height:0;display:flex}.jbF1yq_wsPageHeader{align-items:center;gap:var(--nf-space-8,8px);flex-wrap:wrap;flex:none;display:flex}.jbF1yq_wsAppliedBanner{align-items:center;gap:var(--nf-space-8,8px);padding:var(--nf-space-8,8px) var(--nf-space-12,12px);border:1px solid var(--nf-success);border-radius:var(--nf-radius-10,10px);background:color-mix(in srgb, var(--nf-success) 8%, transparent);font-size:var(--nf-fs-12,12px);flex-wrap:wrap;flex:none;font-weight:600;display:flex}.jbF1yq_wsColumns{gap:var(--nf-space-14,14px);flex:1;grid-template-columns:minmax(0,1fr) minmax(0,1fr);min-height:0;display:grid}.jbF1yq_wsColumn{gap:var(--nf-space-8,8px);flex-direction:column;min-width:0;min-height:0;display:flex}.jbF1yq_wsEditor{resize:vertical;min-height:0;font-family:var(--nf-font);font-size:var(--nf-fs-14,13px);white-space:pre-wrap;flex:1;line-height:1.75}.jbF1yq_wsSelected{border:1px solid var(--nf-accent);border-radius:var(--nf-radius-6,6px);padding:var(--nf-space-6,6px) var(--nf-space-10,10px);background:color-mix(in srgb, var(--nf-accent) 8%, transparent);max-height:120px;overflow:auto}.jbF1yq_wsSelectedText{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);white-space:pre-wrap;margin-top:4px}.jbF1yq_wsPreview{border:1px solid var(--nf-border);border-radius:var(--nf-radius-8,8px);padding:var(--nf-space-8,8px) var(--nf-space-10,10px);gap:var(--nf-space-8,8px);background:var(--nf-bg-inset);flex-direction:column;display:flex}.jbF1yq_wsPreviewText{min-height:0;font-size:var(--nf-fs-14,13px);white-space:pre-wrap;color:var(--nf-text);flex:1;margin:0;line-height:1.7;overflow:auto}.jbF1yq_assetGroups{gap:var(--nf-space-14,14px);flex-direction:column;display:flex}.jbF1yq_assetGroup{gap:var(--nf-space-10,10px);flex-direction:column;display:flex}.jbF1yq_assetGroupHeader{color:var(--nf-accent);border-bottom:1px solid var(--nf-glass-border);align-items:center;gap:8px;padding-bottom:2px;font-size:14px;font-weight:600;display:flex}.jbF1yq_outlineDocWrap{gap:var(--nf-space-12,12px);flex-direction:column;display:flex}.jbF1yq_outlineToc{padding:var(--nf-space-8) var(--nf-space-10);border:1px solid var(--nf-border);background:var(--nf-bg-inset);border-radius:10px;flex-wrap:wrap;gap:4px 8px;display:flex}.jbF1yq_outlineTocItem{font:inherit;cursor:pointer;color:var(--nf-text-2);background:0 0;border:none;border-radius:6px;padding:2px 6px;font-size:12.5px}.jbF1yq_outlineTocItem:hover{background:var(--nf-hover);color:var(--nf-text)}.jbF1yq_outlineTocL1{color:var(--nf-text);font-weight:700}.jbF1yq_outlineTocL2{padding-left:8px}.jbF1yq_outlineTocL3{padding-left:16px;font-size:12px}.jbF1yq_outlineDoc{background-image:repeating-linear-gradient(0deg, transparent 0, transparent 27px, var(--nf-paper-grid) 27px, var(--nf-paper-grid) 28px);background-color:var(--nf-bg-raise);border:1px solid var(--nf-border);border-radius:var(--nf-radius-12);padding:var(--nf-space-20) var(--nf-space-24);font-family:var(--nf-font-display);color:var(--nf-text);user-select:text;max-height:640px;font-size:15px;line-height:28px;overflow:auto}.jbF1yq_outlineH{font-family:var(--nf-font-display);margin:var(--nf-space-16,16px) 0 var(--nf-space-6,6px);scroll-margin-top:var(--nf-space-14,14px);line-height:1.3}.jbF1yq_outlineH1{font-size:22px;font-weight:700}.jbF1yq_outlineH2{font-size:18px;font-weight:700}.jbF1yq_outlineH3{font-size:15px;font-weight:600}.jbF1yq_outlineH4{color:var(--nf-text-2);font-size:14px;font-weight:600}.jbF1yq_outlineP{margin:0 0 var(--nf-space-10,10px);white-space:pre-wrap;text-indent:2em}.jbF1yq_outlineHr{border:none;border-top:1px solid var(--nf-border-strong);margin:var(--nf-space-14,14px) 0}.jbF1yq_outlineList{margin:0 0 var(--nf-space-10,10px);padding-left:1.6em;list-style-position:outside}.jbF1yq_outlineList .jbF1yq_outlineList{margin:var(--nf-space-4,4px) 0 0}.jbF1yq_outlineLi{margin:0 0 var(--nf-space-4,4px);text-indent:0}.jbF1yq_outlineLi::marker{color:var(--nf-text-2)}.jbF1yq_outlineQuote{margin:0 0 var(--nf-space-10,10px);padding:var(--nf-space-6,6px) var(--nf-space-12,12px);border-left:3px solid var(--nf-border-strong);background:var(--nf-bg-inset);color:var(--nf-text-2);border-radius:0 var(--nf-radius-8,8px) var(--nf-radius-8,8px) 0}.jbF1yq_outlineCodeBlock{margin:0 0 var(--nf-space-10,10px);padding:var(--nf-space-10,10px) var(--nf-space-12,12px);background:var(--nf-bg-inset);border:1px solid var(--nf-border);border-radius:var(--nf-radius-8,8px);font-family:var(--nf-font-mono,ui-monospace, monospace);font-size:12.5px;line-height:1.6;position:relative;overflow-x:auto}.jbF1yq_outlineCodeLang{letter-spacing:.06em;text-transform:uppercase;color:var(--nf-text-2);font-size:10px;position:absolute;top:4px;right:8px}.jbF1yq_outlineCode{font-family:var(--nf-font-mono,ui-monospace, monospace);background:var(--nf-bg-inset);border:1px solid var(--nf-border);border-radius:4px;padding:1px 5px;font-size:.92em}.jbF1yq_outlineTableWrap{margin:0 0 var(--nf-space-10,10px);overflow-x:auto}.jbF1yq_outlineTable{border-collapse:collapse;width:100%;font-size:13px}.jbF1yq_outlineTable th,.jbF1yq_outlineTable td{border:1px solid var(--nf-border);padding:var(--nf-space-6,6px) var(--nf-space-8,8px);text-align:left;vertical-align:top}.jbF1yq_outlineTable th{background:var(--nf-bg-inset);color:var(--nf-text);font-weight:600}.jbF1yq_outlineVol{border:1px solid var(--nf-border);border-radius:var(--nf-radius-12);overflow:hidden}.jbF1yq_outlineVolSummary{cursor:pointer;padding:var(--nf-space-10,10px) var(--nf-space-16,16px);font-weight:700;font-family:var(--nf-font-display);background:var(--nf-bg-inset);color:var(--nf-text)}.jbF1yq_outlineEdit{min-height:240px}.jbF1yq_card>summary{cursor:pointer;list-style:none}.jbF1yq_card>summary::-webkit-details-marker{display:none}.jbF1yq_card>summary:before{content:\"▸ \";color:var(--nf-text-3)}.jbF1yq_card[open]>summary:before{content:\"▾ \"}.jbF1yq_assistantFloat{z-index:80;border:1px solid var(--nf-border);border-radius:var(--nf-radius-16,16px);background:var(--nf-bg-raise);box-shadow:var(--nf-shadow-lg);flex-direction:column;min-width:320px;min-height:220px;display:flex;position:absolute;overflow:hidden}.jbF1yq_assistantFloatHeader{justify-content:space-between;align-items:center;gap:var(--nf-space-8,8px);padding:var(--nf-space-8,8px) var(--nf-space-10,10px) var(--nf-space-8,8px) var(--nf-space-14,14px);cursor:grab;user-select:none;font-size:var(--nf-fs-14,13px);border-bottom:1px solid var(--nf-border);background:var(--nf-bg-inset);flex:none;font-weight:600;display:flex}.jbF1yq_assistantFloatHeader:active{cursor:grabbing}.jbF1yq_assistantFloatBody{min-height:0;padding:var(--nf-space-10,10px);flex:1;display:flex;overflow:hidden}.jbF1yq_assistantFloatBody>*{flex:1;min-width:0}.jbF1yq_assistantResize{cursor:nwse-resize;background:linear-gradient(135deg, transparent 0 55%, var(--nf-border-strong) 55% 62%, transparent 62%) no-repeat 4px 4px / 12px 12px;width:20px;height:20px;position:absolute;bottom:0;right:0}.jbF1yq_coverPreview{border:1px solid var(--nf-border);border-radius:var(--nf-radius-12,12px);background:var(--nf-bg-inset);flex:none;justify-content:center;align-items:center;width:150px;height:200px;display:flex;overflow:hidden}.jbF1yq_coverPreview img{object-fit:contain;width:100%;height:100%;display:block}.jbF1yq_coverPlaceholder{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3)}.jbF1yq_subPage{background:var(--nf-bg-raise);border:1px solid var(--nf-border);border-radius:16px;flex-direction:column;flex:1;min-height:0;margin:16px 22px 22px;display:flex;overflow:hidden}.jbF1yq_subPageHead{border-bottom:1px solid var(--nf-border);background:var(--nf-bg-deep,var(--nf-bg));flex-wrap:wrap;flex:none;align-items:center;gap:14px;padding:14px 18px;display:flex}.jbF1yq_subPageBack{font-size:var(--nf-fs-meta,12px);color:var(--nf-text-3);border:1px solid var(--nf-border);white-space:nowrap;cursor:pointer;border-radius:7px;padding:3px 10px}.jbF1yq_subPageTitle{font-family:var(--nf-font-display,Georgia, \"Songti SC\", SimSun, serif);font-size:var(--nf-fs-display,22px);font-weight:700;line-height:1.2}.jbF1yq_subPageMeta{font-size:var(--nf-fs-meta,12px);color:var(--nf-text-2);line-height:1.4}.jbF1yq_subPageActions{flex-wrap:wrap;align-items:center;gap:8px;margin-left:auto;display:flex}.jbF1yq_subPageBody{flex-direction:column;flex:1;gap:14px;min-height:0;padding:16px 18px;display:flex;overflow:auto}.jbF1yq_shelfToolbar{background:var(--nf-bg-inset);border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);flex-wrap:wrap;align-items:center;gap:10px;padding:10px 12px;display:flex}.jbF1yq_shelfToolbar .jbF1yq_input{max-width:260px}.jbF1yq_shelfToolbarExtra{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:6px;margin-left:auto;display:flex}.jbF1yq_shelfStatGrid{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;display:grid}.jbF1yq_shelfStatCard[data-active=\"\"]{background:color-mix(in srgb, var(--nf-ai) 14%, transparent);border-color:color-mix(in srgb, var(--nf-ai) 42%, transparent)}.jbF1yq_shelfStatCard[data-active=\"\"] span,.jbF1yq_shelfStatCard[data-active=\"\"] b{color:var(--nf-ai)}.jbF1yq_shelfStatCard{background:var(--nf-bg-inset);border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);cursor:pointer;justify-content:space-between;align-items:center;gap:10px;min-width:0;padding:8px 10px;display:flex}.jbF1yq_shelfStatCard span{font-size:var(--nf-fs-caption,11px);color:var(--nf-text-2);white-space:nowrap}.jbF1yq_shelfStatCard b{font-family:var(--nf-font-display,Georgia, \"Songti SC\", SimSun, serif);color:var(--nf-text);font-variant-numeric:tabular-nums;font-size:18px;font-weight:700}.jbF1yq_shelfStatCard[data-active=\"\"]{border-color:var(--nf-ai);background:color-mix(in srgb, var(--nf-ai) 12%, transparent)}@container jbF1yq_nfpanel (width<=760px){.jbF1yq_shelfStatGrid{grid-template-columns:repeat(2,minmax(0,1fr))}}.jbF1yq_authorHome{z-index:1;flex-direction:column;flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.jbF1yq_authorTopNav{align-items:center;gap:var(--nf-space-16,16px);border:1px solid var(--nf-line,var(--nf-border));border-radius:var(--nf-r-lg,16px);background:var(--nf-bg-raise);flex-wrap:wrap;flex:none;margin:16px 22px 0;padding:13px 16px;display:flex}.jbF1yq_authorTopNav .jbF1yq_navTitle{align-items:center;gap:var(--nf-space-10,10px);border-bottom:none;flex:none;min-width:0;margin:0;padding:0;display:flex}.jbF1yq_authorTopNav .jbF1yq_navTitleLogo{background:var(--nf-bg-inset);border:1px solid var(--nf-line,var(--nf-border));width:32px;height:32px;font-family:var(--nf-font-display,Georgia, \"Songti SC\", SimSun, serif);font-weight:700;font-size:var(--nf-fs-16,16px);color:var(--nf-accent);border-radius:9px}.jbF1yq_authorTopNav .jbF1yq_navTitleName{font-family:var(--nf-font-display,Georgia, \"Songti SC\", SimSun, serif);letter-spacing:0;font-size:17px;font-weight:400}.jbF1yq_authorTopNav .jbF1yq_navTitleBook{font-size:var(--nf-fs-caption,11px);color:var(--nf-text-3)}.jbF1yq_authorTopNav .jbF1yq_navGroup{align-items:center;gap:var(--nf-space-4,4px);display:flex}.jbF1yq_authorTopNav .jbF1yq_navGroupLabel{padding:0 var(--nf-space-6,6px);font-size:var(--nf-fs-12,12px);letter-spacing:.12em}.jbF1yq_authorTopNav .jbF1yq_navTab{width:auto;padding:var(--nf-space-8,8px) var(--nf-space-10,10px)}.jbF1yq_authorTopNav .jbF1yq_navSpacer{flex:1}.jbF1yq_authorTopNav .jbF1yq_navAbout{border-left:1px solid var(--nf-border);padding-left:var(--nf-space-12,12px);margin:0}.jbF1yq_authorTopNav .jbF1yq_navAboutRow{align-items:center;gap:var(--nf-space-6,6px);display:inline-flex}.jbF1yq_authorContent{flex-direction:column;flex:1;min-width:0;display:flex;overflow:hidden}.jbF1yq_authorNav{background:var(--nf-bg-raise);border:1px solid var(--nf-line,var(--nf-border));border-radius:var(--nf-r,12px);flex-wrap:wrap;flex:none;align-items:center;gap:4px;margin:14px 22px 0;padding:8px 10px;display:flex}.jbF1yq_authorTopTabs{flex-wrap:wrap;flex:none;align-items:center;gap:6px;display:flex}.jbF1yq_authorNavBtn{font-size:var(--nf-fs-meta,12px);color:var(--nf-text-2);white-space:nowrap;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:8px;padding:5px 10px;transition:background .12s,color .12s,border-color .12s}.jbF1yq_authorNavBtn:hover{background:var(--nf-hover);color:var(--nf-text)}.jbF1yq_authorNavBtn[data-active]{background:var(--nf-ai-soft);border-color:color-mix(in srgb, var(--nf-ai) 40%, transparent);color:var(--nf-ai)}.jbF1yq_authorPageBodyFlow{gap:var(--nf-space-20,20px);flex-direction:column;flex:1;min-height:0;padding:0;display:flex;overflow:visible}.jbF1yq_authorPageHeader{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:14px;display:flex}.jbF1yq_noticeError{background:color-mix(in srgb, var(--nf-error) 14%, transparent);color:var(--nf-error);border:1px solid var(--nf-error);border-radius:10px;padding:10px 14px}.jbF1yq_noticeSuccess{background:color-mix(in srgb, var(--nf-accent) 14%, transparent);color:var(--nf-accent);border:1px solid var(--nf-accent);border-radius:10px;flex-wrap:wrap;align-items:center;gap:10px;padding:10px 14px;display:flex}.jbF1yq_rowEnd{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.jbF1yq_assetFilterChip{border:1px solid var(--nf-glass-border);color:var(--nf-text);cursor:pointer;background:0 0;border-radius:999px;padding:4px 10px}.jbF1yq_assetFilterChipActive{background:var(--nf-accent);color:var(--nf-accent-fg);border-color:#0000}.jbF1yq_assetEditor{gap:var(--nf-space-12,12px);padding:var(--nf-space-16,16px);border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-14,14px);background:var(--nf-glass-face);flex-direction:column;display:flex}.jbF1yq_assetEditorRow{gap:var(--nf-space-12,12px);flex-wrap:wrap;display:flex}.jbF1yq_assetLabel{color:var(--nf-muted,var(--nf-text-2));flex-direction:column;flex:1;gap:4px;min-width:180px;font-size:12.5px;display:flex}.jbF1yq_assetTextarea{resize:vertical;min-height:160px;font-family:inherit}.jbF1yq_assetGrid{gap:var(--nf-space-14,14px);grid-template-columns:repeat(auto-fill,minmax(300px,1fr));display:grid}.jbF1yq_assetCard{border:1px solid var(--nf-glass-border);background:var(--nf-glass-face);box-shadow:var(--nf-shadow), inset 0 1px 0 var(--nf-glass-sheen);border-radius:14px;flex-direction:column;gap:8px;padding:14px;display:flex}.jbF1yq_assetCardTop{justify-content:space-between;align-items:center;gap:8px;display:flex}.jbF1yq_assetKind{font-size:12.5px;font-weight:600}.jbF1yq_assetCardName{font-weight:600}.jbF1yq_assetCardContent{white-space:pre-wrap;color:var(--nf-text);max-height:150px;font-size:13.5px;overflow:auto}.jbF1yq_assetCardFooter{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.jbF1yq_iconBtn{color:var(--nf-text);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:8px;justify-content:center;align-items:center;padding:4px;display:inline-flex}.jbF1yq_iconBtn:hover{background:#0000000f}.jbF1yq_adaptInputCard{border:1px solid var(--nf-glass-border);background:var(--nf-glass-face);border-radius:14px;flex-direction:column;gap:12px;padding:16px;display:flex}.jbF1yq_adaptTextarea{resize:vertical;min-height:220px}.jbF1yq_adaptResult{flex-direction:column;gap:14px;display:flex}.jbF1yq_adaptOutline{background:var(--nf-glass-face);border:1px solid var(--nf-glass-border);border-radius:12px;padding:10px 14px}.jbF1yq_adaptMatrix{grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px;display:grid}.jbF1yq_dimCard{border:1px solid var(--nf-glass-border);background:var(--nf-glass-face);border-radius:14px;flex-direction:column;gap:8px;padding:14px;display:flex}.jbF1yq_dimCardHead{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.jbF1yq_dimTitle{font-weight:600}.jbF1yq_dimCurrent{white-space:pre-wrap;font-size:13.5px}.jbF1yq_dimCardSelected{border-color:var(--nf-accent);box-shadow:0 0 0 1px var(--nf-accent)}.jbF1yq_dimEdit{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.jbF1yq_adaptOutlinePre{white-space:pre-wrap;max-height:260px;margin:0;font-family:inherit;font-size:13.5px;overflow:auto}.jbF1yq_adaptProposal{border:1px solid var(--nf-glass-border);background:var(--nf-glass-face);border-radius:14px;flex-direction:column;gap:8px;padding:14px;display:flex}.jbF1yq_adaptTable{border-collapse:collapse;width:100%;font-size:13.5px}.jbF1yq_adaptTable th,.jbF1yq_adaptTable td{border:1px solid var(--nf-glass-border);text-align:left;padding:6px 8px}.jbF1yq_adaptImpacts{flex-direction:column;gap:4px;display:flex}.jbF1yq_adaptImpact{font-size:13.5px}.jbF1yq_adaptTableScroll{overflow-x:auto}.jbF1yq_adaptCell{width:100%;min-width:90px}.jbF1yq_adaptRules{flex-direction:column;gap:10px;display:flex}.jbF1yq_adaptRule{border:1px solid var(--nf-glass-border);background:var(--nf-glass-face);border-radius:12px;flex-direction:column;gap:6px;padding:10px 12px;display:flex}.jbF1yq_adaptRuleRow{align-items:center;gap:8px;display:flex}.jbF1yq_progressTotalBar .jbF1yq_meta{color:var(--nf-text);justify-content:center;align-items:center;font-size:12px;font-weight:600;display:flex;position:absolute;inset:0}.jbF1yq_shelfHero .jbF1yq_panelTitle{font-size:var(--nf-fs-22,22px);letter-spacing:.3px}.jbF1yq_shelfSearch{max-width:260px}.jbF1yq_shelfEmpty{justify-content:center;align-items:center;gap:var(--nf-space-10,10px);padding:var(--nf-space-40,40px) var(--nf-space-20,20px);border:1px dashed var(--nf-border-strong);border-radius:var(--nf-radius-16,16px);background:var(--nf-bg-raise);text-align:center;flex-direction:column;flex:1;display:flex}.jbF1yq_shelfEmptyIcon{font-size:var(--nf-fs-42,42px)}.jbF1yq_shelfEmptyTitle{font-size:var(--nf-fs-16,16px);font-weight:700}.jbF1yq_shelfGrid{gap:var(--nf-container-gap,14px);grid-template-columns:repeat(auto-fill,minmax(190px,1fr));align-content:start;display:grid}.jbF1yq_panel{--nf-container-pad:20px 22px;--nf-container-gap:var(--nf-space-14,14px);--nf-card-pad:20px 22px;--nf-nav-pad:16px 12px 14px}.jbF1yq_panel[data-nf-density=compact]{--nf-container-pad:12px 14px;--nf-container-gap:var(--nf-space-8,8px);--nf-card-pad:12px 14px;--nf-nav-pad:8px 8px;--nf-ctrl-s:26px;--nf-ctrl-m:30px;--nf-ctrl-l:35px;--nf-fs-18:16px;--nf-fs-16:14px;--nf-fs-14:13px;--nf-fs-body:13px;--nf-fs-title:14px;--nf-fs-display:20px;--nf-lh-body:1.5;--nf-lh-title:1.3;--nf-card-radius:8px;--nf-ctrl-radius:6px}.jbF1yq_panel[data-nf-density=spacious]{--nf-container-pad:24px 28px;--nf-container-gap:var(--nf-space-18,18px);--nf-card-pad:22px 26px;--nf-nav-pad:18px 14px;--nf-ctrl-s:30px;--nf-ctrl-m:34px;--nf-ctrl-l:41px;--nf-fs-18:20px;--nf-fs-16:17px;--nf-fs-14:15px;--nf-fs-body:14px;--nf-fs-title:17px;--nf-fs-display:26px;--nf-lh-body:1.8;--nf-lh-title:1.45;--nf-card-radius:14px;--nf-ctrl-radius:10px}.jbF1yq_panel[data-nf-mode=light]{color-scheme:light;--nf-bg:#f6f3ec;--nf-bg-raise:#fcfaf6;--nf-bg-inset:#efe9dc;--nf-bg-deep:#e9e2d4;--nf-line:#26221b24;--nf-line-2:#26221b0f;--nf-border:#26221b24;--nf-border-2:#26221b47;--nf-border-strong:#26221b4d;--nf-text:#26221b;--nf-text-1:#453e33;--nf-text-2:#6f665a;--nf-text-2-alpha:#6f665ab8;--nf-text-3:#726858;--nf-muted:var(--nf-text-3);--nf-muted-line:var(--nf-border);--nf-accent:#a63e2a;--nf-accent-hover:#8c3321;--nf-accent-soft:#a63e2a24;--nf-accent-fg:#fdf3ee;--nf-hover:#26221b0d;--nf-success:#4f8750;--nf-error:#b94a41;--nf-danger:var(--nf-error);--nf-success-ink:#1b7a3a;--nf-success-ink-soft:#1b7a3a1a;--nf-error-ink:#b3271f;--nf-error-ink-soft:#b3271f1a;--nf-warn-ink:#8a5a00;--nf-warn-ink-soft:#8a5a001a;--nf-info-ink:#3c5b8a;--nf-info-ink-soft:#3c5b8a1a;--nf-toast-ok:var(--nf-success);--nf-warn:#c98a1f;--nf-info:#4a6fa5;--nf-ai:#c07c22;--nf-human:#2f6fa3;--nf-idle:#cfc6b5;--nf-shadow:0 1px 3px #0000000f, 0 12px 32px #00000014;--nf-shadow-lg:0 4px 12px #00000012, 0 20px 48px #0000001f;--nf-card-shadow:0 2px 6px #0000000f, 0 14px 38px #00000024;--nf-card-shadow-hover:0 4px 10px #00000014, 0 22px 52px #0003;--nf-glass-face:var(--nf-bg-raise);--nf-glass-core:none;--nf-glass-sheen:transparent;--nf-glass-border:#a0917d47;--nf-glass-inset:#fff6}.jbF1yq_panel[data-nf-mode=dark]{color-scheme:dark;--nf-bg:#17140f;--nf-bg-raise:#201c16;--nf-bg-inset:#2a241c;--nf-bg-deep:#100e0a;--nf-line:#f2e9dc1f;--nf-line-2:#f2e9dc0d;--nf-border:#f2e9dc1f;--nf-border-2:#f2e9dc2e;--nf-border-strong:#f2e9dc3d;--nf-text:#eee7da;--nf-text-1:#d3cab6;--nf-text-2:#c9beab;--nf-text-2-alpha:#c9beabb3;--nf-text-3:#a89d86;--nf-muted:var(--nf-text-3);--nf-muted-line:var(--nf-border);--nf-accent:#a63e2a;--nf-accent-hover:#b4472c;--nf-accent-soft:#a63e2a2e;--nf-accent-fg:#fdf3ee;--nf-hover:#f2e9dc0f;--nf-success:#83b87d;--nf-error:#d95753;--nf-danger:var(--nf-error);--nf-success-ink:#86c47f;--nf-success-ink-soft:#86c47f21;--nf-error-ink:#e8837e;--nf-error-ink-soft:#e8837e21;--nf-warn-ink:#edb44a;--nf-warn-ink-soft:#edb44a21;--nf-info-ink:#8aabd8;--nf-info-ink-soft:#8aabd821;--nf-toast-ok:var(--nf-success);--nf-warn:#e3ad49;--nf-info:#6b8fc7;--nf-ai:#d98a2b;--nf-human:#4aa3d9;--nf-idle:#5c5344;--nf-shadow:0 1px 2px #00000059, 0 10px 30px #0006;--nf-shadow-lg:0 4px 12px #0006, 0 20px 48px #0000008c;--nf-card-shadow:0 2px 6px #00000059, 0 14px 38px #00000073;--nf-card-shadow-hover:0 4px 10px #0006, 0 22px 52px #0000008c;--nf-glass-face:var(--nf-bg-raise);--nf-glass-core:none;--nf-glass-sheen:transparent;--nf-glass-border:#f2e9dc24;--nf-glass-inset:#ffffff0f}.jbF1yq_bookCard{border:1px solid var(--nf-border);background:var(--nf-bg-inset);cursor:pointer;min-width:0;transition:border-color var(--nf-dur-base,.15s) ease, transform var(--nf-dur-fast,.12s) ease, box-shadow var(--nf-dur-base,.15s) ease;border-radius:12px;flex-direction:column;gap:10px;padding:12px;display:flex}.jbF1yq_bookCard:hover{border-color:var(--nf-accent);box-shadow:var(--nf-shadow-lg);transform:translateY(-2px)}.jbF1yq_bookCardActive{border-color:var(--nf-accent);box-shadow:0 0 0 3px var(--nf-accent-soft)}.jbF1yq_bookCardCover{aspect-ratio:3/4;background:var(--nf-bg-inset);border:1px solid var(--nf-border);border-radius:10px;flex:none;justify-content:center;align-items:center;width:100%;display:flex;position:relative;overflow:hidden}.jbF1yq_bookCardCover img{object-fit:cover;width:100%;height:100%;transition:transform var(--nf-dur-slow,.28s) ease;display:block}.jbF1yq_bookCard:hover .jbF1yq_bookCardCover img{transform:scale(1.06)}.jbF1yq_bookCardCover:after{content:\"\";border-radius:inherit;pointer-events:none;opacity:0;transition:opacity var(--nf-dur-slow,.28s) ease;background:linear-gradient(#0000 55%,#00000047);position:absolute;inset:0}.jbF1yq_bookCard:hover .jbF1yq_bookCardCover:after{opacity:1}.jbF1yq_bookCardCoverFallback{justify-content:center;align-items:center;gap:var(--nf-space-6,6px);background:radial-gradient(400px 200px at 80% -20%, color-mix(in srgb, var(--nf-accent) 25%, transparent), transparent 70%), linear-gradient(155deg, var(--nf-bg-inset), color-mix(in srgb, var(--nf-accent) 10%, var(--nf-bg-inset)));flex-direction:column;width:100%;height:100%;display:flex}.jbF1yq_bookCardCoverTitle{font-size:var(--nf-fs-22,22px);color:var(--nf-accent);letter-spacing:2px;font-weight:800}.jbF1yq_bookCardBody{gap:var(--nf-space-6,5px);flex-direction:column;flex:1;min-width:0;display:flex}.jbF1yq_bookCardTitleRow{justify-content:space-between;align-items:center;gap:var(--nf-space-6,6px);display:flex}.jbF1yq_bookCardName{font-weight:700;font-size:var(--nf-fs-14,13.5px);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.jbF1yq_bookCardBlurb{-webkit-line-clamp:2;-webkit-box-orient:vertical;min-height:34px;display:-webkit-box;overflow:hidden}.jbF1yq_bookCardMetaRow{justify-content:space-between;align-items:center;gap:var(--nf-space-6,6px);flex-wrap:wrap;display:flex}.jbF1yq_bookCardProgressBar{border-radius:var(--nf-radius-999,999px);background:var(--nf-border);height:6px;overflow:hidden;box-shadow:inset 0 1px 2px #0000001f}.jbF1yq_bookCardProgressFill{border-radius:var(--nf-radius-999,999px);background:linear-gradient(90deg, var(--nf-info), var(--nf-accent));height:100%;transition:width var(--nf-dur-slow,.28s) ease;display:block}.jbF1yq_createBookInner{align-self:center;gap:var(--nf-space-12,12px);flex-direction:column;width:min(520px,100%);display:flex}.jbF1yq_ideaCard{gap:var(--nf-space-8,8px);border:1px dashed var(--nf-border-strong);border-radius:var(--nf-radius-14,14px);padding:var(--nf-space-10,10px) var(--nf-space-12,12px);background:color-mix(in srgb, var(--nf-accent) 3%, transparent);flex-direction:column;display:flex}.jbF1yq_ideaToggle{align-items:center;gap:var(--nf-space-6,6px);color:var(--nf-accent);font-size:var(--nf-fs-14,13px);cursor:pointer;text-align:left;background:0 0;border:none;padding:0;font-weight:700;display:flex}.jbF1yq_ideaCandidate{gap:var(--nf-space-6,6px);border:1px solid var(--nf-border);border-radius:var(--nf-radius-12,12px);padding:var(--nf-space-10,10px) var(--nf-space-12,12px);background:var(--nf-bg);flex-direction:column;display:flex}.jbF1yq_progressLineDone{color:var(--nf-success);font-weight:600}.jbF1yq_progressLineError{color:var(--nf-error);font-weight:600}.jbF1yq_meta{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);opacity:.9}.jbF1yq_genreDesc{-webkit-line-clamp:2;-webkit-box-orient:vertical;max-width:560px;display:-webkit-box;overflow:hidden}.jbF1yq_fileList{gap:var(--nf-space-4,3px);font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);opacity:.9;word-break:break-all;flex-direction:column;display:flex}.jbF1yq_panelContent::-webkit-scrollbar,.jbF1yq_chatScroll::-webkit-scrollbar,.jbF1yq_chapterPreview::-webkit-scrollbar,.jbF1yq_progress::-webkit-scrollbar,.jbF1yq_toolLive::-webkit-scrollbar{width:8px;height:8px}.jbF1yq_panelContent::-webkit-scrollbar-thumb,.jbF1yq_chatScroll::-webkit-scrollbar-thumb,.jbF1yq_chapterPreview::-webkit-scrollbar-thumb,.jbF1yq_progress::-webkit-scrollbar-thumb,.jbF1yq_toolLive::-webkit-scrollbar-thumb{background:var(--nf-border-strong);border-radius:var(--nf-radius-4,4px)}.jbF1yq_panelContent::-webkit-scrollbar-thumb:hover,.jbF1yq_chatScroll::-webkit-scrollbar-thumb:hover,.jbF1yq_chapterPreview::-webkit-scrollbar-thumb:hover,.jbF1yq_progress::-webkit-scrollbar-thumb:hover,.jbF1yq_toolLive::-webkit-scrollbar-thumb:hover{background:var(--nf-text-3)}@keyframes jbF1yq_pulse{0%,to{opacity:1}50%{opacity:.45}}@keyframes jbF1yq_fadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.jbF1yq_card{animation:jbF1yq_fadeIn var(--nf-dur-base,.15s) ease}.jbF1yq_bookshelf{align-items:center;gap:var(--nf-space-10,10px);padding:var(--nf-space-8,8px) var(--nf-space-14,14px);border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-16,16px);background:var(--nf-glass-face);box-shadow:var(--nf-shadow), inset 0 1px 0 var(--nf-glass-sheen);z-index:1;flex-wrap:wrap;flex-shrink:0;margin:10px 12px 0;display:flex;position:relative}.jbF1yq_dropzone{border:2px dashed var(--nf-border-strong);border-radius:var(--nf-radius-10,10px);padding:var(--nf-space-18,18px) var(--nf-space-14,14px);text-align:center;font-size:var(--nf-fs-14,13px);color:var(--nf-text-2);cursor:pointer;transition:border-color var(--nf-dur-base,.15s) ease, background var(--nf-dur-base,.15s) ease;align-items:center;gap:var(--nf-space-6,6px);flex-direction:column;display:flex}.jbF1yq_dropzone:hover,.jbF1yq_dropzoneActive{border-color:var(--nf-accent);background:var(--nf-accent-soft);color:var(--nf-accent)}.jbF1yq_dropzoneIcon{font-size:var(--nf-fs-22,22px);line-height:1}.jbF1yq_bookCardActions{align-items:center;gap:var(--nf-space-6,6px);padding-top:var(--nf-space-8,8px);margin-top:auto;display:flex}.jbF1yq_bookCardActions .jbF1yq_button{flex:1;justify-content:center}.jbF1yq_readerView{transition:background var(--nf-dur-base,.15s) ease, color var(--nf-dur-base,.15s) ease;flex-direction:column;display:flex;position:absolute;inset:0;overflow:hidden}.jbF1yq_readerHeader{align-items:center;gap:var(--nf-space-8,8px);padding:var(--nf-space-8,8px) var(--nf-space-12,12px);border-bottom:1px solid;flex-wrap:wrap;flex:none;display:flex}.jbF1yq_readerTitle{font-weight:700;font-size:var(--nf-fs-14,14px)}.jbF1yq_readerSeg{align-items:center;gap:var(--nf-space-2,2px);border-radius:var(--nf-radius-8,8px);display:flex;overflow:hidden}.jbF1yq_readerSegBtn{font-size:var(--nf-fs-12,12px);padding:var(--nf-space-4,3px) var(--nf-space-8,8px);border-radius:var(--nf-radius-6,6px);cursor:pointer;opacity:.75;background:0 0;border:none}.jbF1yq_readerSegBtn:hover,.jbF1yq_readerSegActive{opacity:1}.jbF1yq_readerBody{flex:1;align-items:stretch;min-height:0;display:flex}.jbF1yq_readerSidebar{width:220px;min-width:220px;padding:var(--nf-space-8,8px) var(--nf-space-6,6px) var(--nf-space-24,24px);scrollbar-width:thin;gap:var(--nf-space-10,10px);border-right:1px solid;flex-direction:column;flex:none;display:flex;overflow-y:auto}.jbF1yq_readerGroup{gap:var(--nf-space-2,1px);flex-direction:column;display:flex}.jbF1yq_readerGroupTitle{align-items:center;gap:var(--nf-space-6,6px);width:100%;font-size:var(--nf-fs-12,12px);padding:var(--nf-space-6,6px) var(--nf-space-8,8px) var(--nf-space-4,4px);opacity:.9;cursor:pointer;text-align:left;border-radius:var(--nf-radius-6,6px);background:0 0;border:none;font-weight:700;display:flex}.jbF1yq_readerGroupTitle:hover{opacity:1;background:#8080801f}.jbF1yq_readerGroupArrow{font-size:var(--nf-fs-12,12px);text-align:center;flex:none;width:12px}.jbF1yq_readerGroupCount{font-size:var(--nf-fs-12,11px);opacity:.6;padding-right:var(--nf-space-2,2px);flex:none;margin-left:auto;font-weight:400}.jbF1yq_readerItem{align-items:center;gap:var(--nf-space-6,6px);border-radius:var(--nf-radius-8,8px);font-size:var(--nf-fs-12,12px);text-align:left;padding:var(--nf-space-4,4px) var(--nf-space-8,8px);cursor:pointer;opacity:.8;transition:opacity var(--nf-dur-base,.15s) ease, background var(--nf-dur-base,.15s) ease;background:0 0;border:1px solid;min-width:0;display:flex}.jbF1yq_readerItem:hover{opacity:1}.jbF1yq_readerItemActive{opacity:1;font-weight:700}.jbF1yq_readerItemNo{text-align:right;opacity:.75;flex:none;min-width:26px;font-weight:700}.jbF1yq_readerItemTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.jbF1yq_readerItemBadge{font-size:var(--nf-fs-12,11px);flex:none}.jbF1yq_readerMain{min-height:0;padding:var(--nf-space-20,20px) var(--nf-space-16,16px) var(--nf-space-48,48px);scrollbar-width:thin;flex:1;justify-content:center;display:flex;overflow-y:auto}.jbF1yq_readerArticle{gap:var(--nf-space-12,12px);flex-direction:column;width:100%;display:flex}.jbF1yq_readerChapterTitle{font-size:var(--nf-fs-24,24px);letter-spacing:1px;margin:0;font-weight:800}.jbF1yq_readerChapterMeta{align-items:center;gap:var(--nf-space-8,8px);font-size:var(--nf-fs-12,12px);display:flex}.jbF1yq_readerText{text-align:justify;letter-spacing:.02em}.jbF1yq_readerPara{text-indent:2em;margin:0 0 .85em}.jbF1yq_readerFoot{justify-content:space-between;align-items:center;gap:var(--nf-space-8,8px);padding-top:var(--nf-space-12,12px);border-top:1px dashed;margin-top:12px;display:flex}.jbF1yq_readerLoading,.jbF1yq_readerError{padding:var(--nf-space-32,32px) 0;font-size:var(--nf-fs-14,13px);opacity:.7;align-self:center}.jbF1yq_readerError{color:var(--nf-error)}.jbF1yq_importModalOverlay{z-index:1000;backdrop-filter:blur(4px);padding:var(--nf-space-24,24px);background:#00000073;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.jbF1yq_importModal{gap:var(--nf-space-12,12px);border:1px solid var(--nf-border-strong);border-radius:var(--nf-radius-16,16px);width:min(520px,100%);max-height:85vh;padding:var(--nf-card-pad,20px 22px);background:var(--nf-bg-raise);box-shadow:var(--nf-shadow-lg);flex-direction:column;display:flex;overflow:auto}.jbF1yq_importModalHead{justify-content:space-between;align-items:center;gap:var(--nf-space-10,10px);display:flex}.jbF1yq_importModalTabs{gap:var(--nf-space-8,8px);display:flex}.jbF1yq_importModalTabs .jbF1yq_button{flex:1}.jbF1yq_importModalBody{gap:var(--nf-space-10,10px);flex-direction:column;display:flex}.jbF1yq_importField{gap:var(--nf-space-6,5px);font-size:var(--nf-fs-14,13px);color:var(--nf-text-2);flex-direction:column;display:flex}.jbF1yq_importHint{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);line-height:1.5}.jbF1yq_importError{border:1px solid color-mix(in srgb, var(--nf-danger,#e5484d) 55%, transparent);border-radius:var(--nf-radius-10,10px);padding:var(--nf-space-8,8px) var(--nf-space-10,10px);font-size:var(--nf-fs-12,12.5px);color:var(--nf-danger,#e5484d);background:color-mix(in srgb, var(--nf-danger,#e5484d) 10%, transparent);white-space:pre-wrap;word-break:break-all}.jbF1yq_importResult{gap:var(--nf-space-4,4px);border:1px solid color-mix(in srgb, var(--nf-ok,#46a758) 45%, transparent);border-radius:var(--nf-radius-10,10px);padding:var(--nf-space-10,10px) var(--nf-space-12,12px);font-size:var(--nf-fs-14,13px);background:color-mix(in srgb, var(--nf-ok,#46a758) 9%, transparent);word-break:break-all;flex-direction:column;display:flex}.jbF1yq_importModalActions{justify-content:flex-end;gap:var(--nf-space-8,8px);display:flex}.jbF1yq_settingsDrawerOverlay{z-index:1000;background:#00000073;animation:.16s jbF1yq_nfFadeIn;position:fixed;inset:0}.jbF1yq_settingsDrawer{background:var(--nf-bg-raise,var(--nf-bg));border-left:1px solid var(--nf-border);flex-direction:column;width:min(560px,94vw);animation:.2s jbF1yq_nfSlideInRight;display:flex;position:absolute;top:0;bottom:0;right:0;box-shadow:-18px 0 48px #00000059}@keyframes jbF1yq_nfSlideInRight{0%{opacity:0;transform:translate(24px)}to{opacity:1;transform:translate(0)}}.jbF1yq_settingsDrawerHead{padding:var(--nf-space-12) var(--nf-space-16);border-bottom:1px solid var(--nf-border);flex:none;justify-content:space-between;align-items:center;display:flex}.jbF1yq_settingsDrawerBody{flex:1;min-height:0;overflow-y:auto}.jbF1yq_importFileInfo{align-items:center;gap:var(--nf-space-8,8px);font-size:var(--nf-fs-14,13px);color:var(--nf-text-1);flex-wrap:wrap;display:flex}.jbF1yq_importPreview{gap:var(--nf-space-4,4px);border:1px solid var(--nf-border-strong);border-radius:var(--nf-radius-10,10px);padding:var(--nf-space-10,10px) var(--nf-space-12,12px);font-size:var(--nf-fs-14,13px);background:var(--nf-bg-inset);flex-direction:column;display:flex}.jbF1yq_importPreviewList{padding-left:var(--nf-space-18,18px);gap:var(--nf-space-2,2px);font-size:var(--nf-fs-12,12.5px);color:var(--nf-text-2);flex-direction:column;max-height:140px;margin:0;display:flex;overflow:auto}.jbF1yq_settingsCard{min-width:0;max-width:100%}.jbF1yq_settingsCard>*{min-width:0}.jbF1yq_settingsCard .jbF1yq_card{width:100%;min-width:0;max-width:100%}.jbF1yq_settingsCard .jbF1yq_fieldLabel{white-space:nowrap;text-overflow:ellipsis;max-width:100%;min-height:18px;line-height:18px;overflow:hidden}.jbF1yq_settingsCard .jbF1yq_row{align-items:flex-start}.jbF1yq_settingsCard+.jbF1yq_settingsCard{flex:none;min-height:auto}.jbF1yq_switch{border-radius:var(--nf-radius-999,999px);border:1px solid var(--nf-border-strong);background:var(--nf-bg-inset);cursor:pointer;width:42px;height:24px;transition:background var(--nf-dur-base,.15s) ease, border-color var(--nf-dur-base,.15s) ease;flex:none;padding:0;position:relative}.jbF1yq_view :is(button,[href],input,select,textarea,summary,[tabindex]):focus-visible,.jbF1yq_entry:focus-visible,.jbF1yq_runChip:focus-visible,.jbF1yq_view [role=button]:focus-visible,.jbF1yq_view [role=tab]:focus-visible,.jbF1yq_view [role=menuitem]:focus-visible,.jbF1yq_view [role=option]:focus-visible{outline:var(--nf-focus-w,2px) solid var(--nf-accent);outline-offset:var(--nf-focus-offset,2px)}.jbF1yq_view :is(input,textarea,select):focus-visible{border-color:var(--nf-accent)}.jbF1yq_view [data-nf-danger]:focus-visible{outline-color:var(--nf-error)}@media (prefers-reduced-motion:reduce){:root{--nf-dur-fast:.01ms;--nf-dur-base:.01ms;--nf-dur-slow:.01ms}.jbF1yq_view,.jbF1yq_view *,.jbF1yq_view :before,.jbF1yq_view :after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}:root{--nf-chip-bg:#ffffffd1;--nf-chip-border:#3c3c4329;--nf-chip-fg:#1c1c1e;--nf-chip-shadow:0 2px 12px #0000001f;--nf-chip-running:#00b85c;--nf-chip-paused:#b45309;--nf-chip-done:#0284c7;--nf-chip-stopped:#64748b;--nf-chip-error:#dc2626;--nf-streaming:#d16a92}body[data-ds-dark-theme]{--nf-chip-bg:#1c1c1ed1;--nf-chip-border:#ffffff24;--nf-chip-fg:#f2f2f7;--nf-chip-shadow:0 2px 12px #00000073;--nf-chip-running:#35d07a;--nf-chip-paused:#f0ac82;--nf-chip-done:#5cb3e8;--nf-chip-stopped:#98989d;--nf-chip-error:#ff6b60;--nf-streaming:#e891b5}.jbF1yq_runChip{top:calc(max(var(--dsh-frame-top-clearance,0px), var(--dsh-windows-titlebar-height,0px)) + 12px);z-index:var(--nf-z-chip,2147480000);align-items:center;gap:var(--nf-space-6,6px);max-width:360px;padding:5px var(--nf-space-12,12px);border:1px solid var(--nf-chip-border);border-radius:var(--nf-radius-999,999px);font-family:var(--nf-font);font-size:var(--nf-fs-12,12px);color:var(--nf-chip-fg);background:var(--nf-chip-bg);box-shadow:var(--nf-chip-shadow);backdrop-filter:blur(6px);cursor:pointer;user-select:none;touch-action:none;white-space:nowrap;transition:border-color var(--nf-dur-base,.15s) ease, box-shadow var(--nf-dur-base,.15s) ease;font-weight:600;display:none;position:fixed;right:14px}.jbF1yq_runChip[data-visible=true]{display:flex}.jbF1yq_runChip:hover{border-color:var(--nf-chip-running);box-shadow:var(--nf-chip-shadow), 0 0 0 3px color-mix(in srgb, var(--nf-chip-running) 18%, transparent)}.jbF1yq_runChipText{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.jbF1yq_runChipDot{background:var(--nf-chip-stopped);border-radius:50%;flex:none;width:7px;height:7px}.jbF1yq_runChip[data-status=running] .jbF1yq_runChipDot{background:var(--nf-chip-running)}.jbF1yq_runChip[data-status=paused] .jbF1yq_runChipDot{background:var(--nf-chip-paused)}.jbF1yq_runChip[data-status=done] .jbF1yq_runChipDot{background:var(--nf-chip-done)}.jbF1yq_runChip[data-status=error] .jbF1yq_runChipDot{background:var(--nf-chip-error)}@keyframes jbF1yq_nfChipPulse{0%,to{opacity:1}50%{opacity:.35}}.jbF1yq_runChip[data-status=running] .jbF1yq_runChipDot{animation:1.4s ease-in-out infinite jbF1yq_nfChipPulse}@media (prefers-reduced-motion:reduce){.jbF1yq_runChipDot{animation:none!important}}.jbF1yq_lfPill{font-size:var(--nf-fs-10,10px);border-radius:var(--nf-radius-999,999px);color:var(--nf-text-2);background:var(--nf-bg-inset);white-space:nowrap;padding:1px 7px;font-weight:600}.jbF1yq_lfPill[data-phase=streaming]{color:var(--nf-streaming);background:color-mix(in srgb, var(--nf-streaming) 16%, transparent)}.jbF1yq_lfPill[data-phase=completed]{color:var(--nf-success);background:color-mix(in srgb, var(--nf-success) 16%, transparent)}.jbF1yq_lfPill[data-phase=failed]{color:var(--nf-error);background:color-mix(in srgb, var(--nf-error) 18%, transparent)}.jbF1yq_lfDot{background:var(--nf-text-3);border-radius:50%;flex:none;width:6px;height:6px}.jbF1yq_lfDot[data-size=lg]{width:7px;height:7px}.jbF1yq_lfDot[data-state=streaming]{background:var(--nf-streaming)}.jbF1yq_lfDot[data-state=completed],.jbF1yq_lfDot[data-state=ok]{background:var(--nf-success)}.jbF1yq_lfDot[data-state=failed]{background:var(--nf-error)}.jbF1yq_emptyState{justify-content:center;align-items:center;gap:var(--nf-space-10,10px);padding:var(--nf-space-32,32px) var(--nf-space-20,20px);text-align:center;flex-direction:column;display:flex}.jbF1yq_emptyStateIcon{font-size:var(--nf-fs-34,34px);line-height:1}.jbF1yq_emptyStateTitle{font-size:var(--nf-fs-14,14px);color:var(--nf-text);font-weight:600}.jbF1yq_emptyStateHint{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);max-width:340px;line-height:1.5}.jbF1yq_emptyState[data-compact=true]{padding:var(--nf-space-16,16px) var(--nf-space-12,12px);gap:var(--nf-space-6,6px)}.jbF1yq_emptyState[data-compact=true] .jbF1yq_emptyStateIcon{font-size:var(--nf-fs-20,20px)}.jbF1yq_emptyState[data-compact=true] .jbF1yq_emptyStateTitle{font-size:var(--nf-fs-12,12px)}.jbF1yq_emptyState[data-compact=true] .jbF1yq_emptyStateHint{font-size:var(--nf-fs-12,12px);max-width:280px}@keyframes jbF1yq_nfSkeletonShimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.jbF1yq_pillNav{gap:var(--nf-space-8,8px);flex-wrap:wrap;display:flex;position:relative}.jbF1yq_pillNavSliding .jbF1yq_pillNavPill[data-active]{color:var(--nf-accent);background:0 0;border-color:#0000;font-weight:600}.jbF1yq_pillNavSlider{background:color-mix(in srgb, var(--nf-accent) 14%, transparent);border:1px solid color-mix(in srgb, var(--nf-accent) 55%, transparent);transition:transform var(--nf-dur-base,.15s) ease, width var(--nf-dur-base,.15s) ease;pointer-events:none;border-radius:999px;position:absolute;top:0;bottom:0;left:0}@media (prefers-reduced-motion:reduce){.jbF1yq_pillNavSlider{transition:none}}.jbF1yq_pillNavPill{border:1px solid var(--nf-border);background:var(--nf-bg-inset);color:var(--nf-text-2);border-radius:var(--nf-radius-999,999px);font-size:var(--nf-fs-12,12px);cursor:pointer;transition:border-color var(--nf-dur-base,.15s) ease, color var(--nf-dur-base,.15s) ease, background var(--nf-dur-base,.15s) ease;padding:5px 14px;font-weight:600}.jbF1yq_pillNavPill:hover{border-color:var(--nf-border-strong);color:var(--nf-text)}.jbF1yq_pillNavPill[data-active]{background:color-mix(in srgb, var(--nf-accent) 14%, transparent);border-color:color-mix(in srgb, var(--nf-accent) 42%, transparent);color:var(--nf-text)}.jbF1yq_assistantFloat[data-top]{z-index:82;box-shadow:var(--nf-shadow-lg), 0 0 0 1px color-mix(in srgb, var(--nf-accent) 22%, transparent)}.jbF1yq_assistantFloatHeader:focus-visible{outline:var(--nf-focus-w,2px) solid var(--nf-accent);outline-offset:-2px}.jbF1yq_view h1,.jbF1yq_view h2{font-family:var(--nf-font-display);letter-spacing:-.3px;font-weight:400;line-height:1.25}.jbF1yq_eyebrow{font-size:var(--nf-fs-10,10px);letter-spacing:.16em;text-transform:uppercase;color:var(--nf-accent);font-weight:600}.jbF1yq_titleBlock{gap:var(--nf-space-2,2px);flex-direction:column;display:flex}.jbF1yq_runLog{border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);background:var(--nf-bg-inset);min-height:120px;padding:var(--nf-space-10,10px) var(--nf-space-12,12px);gap:var(--nf-space-2,2px);font-size:var(--nf-fs-12,12px);font-variant-numeric:tabular-nums;flex-direction:column;flex:1;line-height:1.6;display:flex;overflow-y:auto}.jbF1yq_runLogLine{gap:var(--nf-space-8,8px);opacity:.88;display:flex}.jbF1yq_runLogTime{color:var(--nf-text-3);flex:none}.jbF1yq_tnum,.jbF1yq_statCardDValue,.jbF1yq_statCardDDetail,.jbF1yq_progressLine,.jbF1yq_liveText{font-variant-numeric:tabular-nums}.jbF1yq_chapterPreview,.jbF1yq_reviewBox{max-width:var(--nf-measure,720px);width:100%;margin-inline:auto}.jbF1yq_view textarea{max-width:var(--nf-measure,720px)}.jbF1yq_planMaster{grid-template-columns:264px minmax(0,1fr);align-items:stretch;height:clamp(480px,100vh - 250px,1200px);display:grid}.jbF1yq_planTree{background:color-mix(in srgb, var(--nf-border) 10%, transparent);border-right:1px solid var(--nf-border);padding:var(--nf-space-12,12px) var(--nf-space-10,10px) var(--nf-space-12,12px) var(--nf-space-14,14px);gap:var(--nf-space-2,2px);flex-direction:column;display:flex;overflow:auto}.jbF1yq_planTreeSearch{margin-bottom:var(--nf-space-6,6px);flex:none}.jbF1yq_planTreeVolGroup{display:block}.jbF1yq_planTreeVol{align-items:center;gap:var(--nf-space-6,6px);padding:var(--nf-space-8,8px) var(--nf-space-4,4px) var(--nf-space-4,4px);cursor:pointer;font-size:var(--nf-fs-12,12px);color:var(--nf-muted,var(--nf-text-2));user-select:none;background:linear-gradient(color-mix(in srgb, var(--nf-border) 10%, transparent), color-mix(in srgb, var(--nf-border) 10%, transparent)), var(--nf-glass-face);z-index:1;font-weight:600;display:flex;position:sticky;top:0}.jbF1yq_planTreeVolMeta{font-variant-numeric:tabular-nums;opacity:.75;margin-left:auto}.jbF1yq_planTreeRow{align-items:center;gap:var(--nf-space-6,6px);width:100%;padding:var(--nf-space-6,6px) var(--nf-space-8,8px);border-radius:var(--nf-radius-8,8px);color:var(--nf-text);cursor:pointer;text-align:left;font-size:var(--nf-fs-14,13px);transition:background var(--nf-dur-fast,.12s) ease, border-color var(--nf-dur-fast,.12s) ease;background:0 0;border:1px solid #0000;display:flex}.jbF1yq_planTreeRow:hover{background:color-mix(in srgb, var(--nf-accent) 10%, transparent)}.jbF1yq_planTreeRow[data-active]{background:color-mix(in srgb, var(--nf-accent) 16%, var(--nf-glass-face));border-color:var(--nf-accent)}.jbF1yq_planTreeRowNo{font-variant-numeric:tabular-nums;color:var(--nf-muted,var(--nf-text-2));font-size:var(--nf-fs-12,12px);text-align:right;flex:none;min-width:2ch}.jbF1yq_planTreeRowTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.jbF1yq_planDot{border-radius:50%;flex:none;width:8px;height:8px}.jbF1yq_planDetail{gap:var(--nf-space-10,10px);min-width:0;padding:var(--nf-space-14,14px) var(--nf-space-14,14px) var(--nf-space-12,12px) var(--nf-space-14,14px);flex-direction:column;display:flex}.jbF1yq_planDetailEmpty{border:1px dashed var(--nf-glass-border);border-radius:var(--nf-radius-14,14px);flex:1;justify-content:center;align-items:center;display:flex}.jbF1yq_planDetailBody{flex:1;min-height:0;overflow:auto}.jbF1yq_planDetailTitle{font-family:var(--nf-font-display,inherit);font-size:var(--nf-fs-20,20px);color:var(--nf-text);letter-spacing:.01em;font-weight:400;line-height:1.3}.jbF1yq_planBeats{gap:var(--nf-space-8,8px);padding:var(--nf-space-12,12px) var(--nf-space-14,14px);border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-14,14px);background:var(--nf-glass-face);max-width:var(--nf-measure,720px);flex-direction:column;display:flex}.jbF1yq_planBeatsLabel{font-size:var(--nf-fs-12,12px);letter-spacing:.06em;color:var(--nf-muted,var(--nf-text-2));font-weight:600}.jbF1yq_planDetailBar{gap:var(--nf-space-6,6px);border-top:1px solid var(--nf-glass-border);padding-top:var(--nf-space-10,10px);flex-wrap:wrap;display:flex}@container jbF1yq_nfpanel (width<=900px){.jbF1yq_planMaster{grid-template-columns:1fr;height:auto;min-height:480px}.jbF1yq_planTree{border-right:none;border-bottom:1px solid var(--nf-glass-border);padding-right:var(--nf-space-14,14px);padding-bottom:var(--nf-space-10,10px);max-height:300px}}.jbF1yq_t2Master{grid-template-columns:200px minmax(0,1fr);min-height:320px;display:grid}.jbF1yq_t2Rail{background:color-mix(in srgb, var(--nf-border) 10%, transparent);border-right:1px solid var(--nf-border);padding:var(--nf-space-12,12px) var(--nf-space-10,10px);gap:var(--nf-space-4,4px);flex-direction:column;display:flex}.jbF1yq_t2RailHead{font-size:var(--nf-fs-14,14px);padding:var(--nf-space-4,4px) var(--nf-space-6,6px) var(--nf-space-10,10px);font-weight:650}.jbF1yq_t2RailBtn{align-items:center;gap:var(--nf-space-8,8px);padding:var(--nf-space-6,6px) var(--nf-space-8,8px);border-radius:var(--nf-radius-8,8px);color:var(--nf-text);cursor:pointer;text-align:left;width:100%;font-size:var(--nf-fs-14,13px);transition:background var(--nf-dur-fast,.12s) ease, border-color var(--nf-dur-fast,.12s) ease;background:0 0;border:1px solid #0000;display:flex}.jbF1yq_t2RailBtn:hover{background:color-mix(in srgb, var(--nf-accent) 10%, transparent)}.jbF1yq_t2RailBtn[data-active]{background:color-mix(in srgb, var(--nf-accent) 16%, var(--nf-glass-face));border-color:var(--nf-accent);color:var(--nf-accent);font-weight:600}.jbF1yq_t2RailSep{background:var(--nf-glass-border);height:1px;margin:var(--nf-space-8,8px) 0}.jbF1yq_t2RailMeta{gap:var(--nf-space-6,6px);padding:0 var(--nf-space-6,6px);font-size:var(--nf-fs-12,12px);color:var(--nf-muted,var(--nf-text-2));flex-direction:column;line-height:1.5;display:flex}.jbF1yq_t2Content{padding:var(--nf-space-16,16px) var(--nf-space-20,20px);gap:var(--nf-space-14,14px);flex-direction:column;min-width:0;display:flex}@container jbF1yq_nfpanel (width<=900px){.jbF1yq_t2Master{grid-template-columns:1fr}.jbF1yq_t2Rail{border-right:none;border-bottom:1px solid var(--nf-glass-border)}}.jbF1yq_view .jbF1yq_button,.jbF1yq_view .jbF1yq_buttonPrimary,.jbF1yq_view .jbF1yq_buttonSmall,.jbF1yq_view .jbF1yq_iconButton,.jbF1yq_view .jbF1yq_pillNavPill,.jbF1yq_view .jbF1yq_segTab{transition-property:color,background,border-color,box-shadow,transform,opacity;transition-duration:var(--nf-dur-fast,.12s);transition-timing-function:cubic-bezier(.2,.8,.2,1)}.jbF1yq_view .jbF1yq_button:active,.jbF1yq_view .jbF1yq_buttonPrimary:active,.jbF1yq_view .jbF1yq_buttonSmall:active,.jbF1yq_view .jbF1yq_iconButton:active{transform:scale(.96)}.jbF1yq_card{transition:border-color var(--nf-dur-base,.15s) ease, transform var(--nf-dur-base,.15s) cubic-bezier(.2, .8, .2, 1), box-shadow var(--nf-dur-base,.15s) ease}.jbF1yq_card:hover{border-color:var(--nf-border-strong);transform:translateY(-1px)}@keyframes jbF1yq_nfViewIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}html[data-dsh-novelforge-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) .jbF1yq_view{animation:jbF1yq_nfViewIn var(--nf-dur-slow,.28s) cubic-bezier(.2, .8, .2, 1)}:root{--nf-toast-bg:#faf9f5f5;--nf-toast-border:#a0917d66;--nf-toast-fg:#1f1e1c}body[data-ds-dark-theme]{--nf-toast-bg:#181c22f5;--nf-toast-border:#ffffff29;--nf-toast-fg:#e8eaed}.jbF1yq_nfToastHost{z-index:var(--nf-z-chip,2147480000);pointer-events:none;flex-direction:column;align-items:center;gap:8px;display:flex;position:fixed;bottom:26px;left:50%;transform:translate(-50%)}.jbF1yq_nfToast{border:1px solid var(--nf-toast-border);background:var(--nf-toast-bg);max-width:440px;color:var(--nf-toast-fg);font-family:var(--nf-font);font-size:var(--nf-fs-12,12.5px);border-radius:12px;align-items:center;gap:8px;padding:10px 18px;font-weight:600;animation:.3s cubic-bezier(.2,.9,.3,1.15) jbF1yq_nfToastIn;display:flex;box-shadow:0 12px 40px #00000040}.jbF1yq_nfToast[data-kind=done]{border-color:color-mix(in srgb, var(--nf-toast-ok,#2ec27e) 45%, var(--nf-toast-border))}.jbF1yq_nfToast[data-kind=error]{border-color:color-mix(in srgb, #dc2626 45%, var(--nf-toast-border))}.jbF1yq_nfToast .jbF1yq_nfToastTick{flex:none;font-weight:700}.jbF1yq_nfToast[data-kind=done] .jbF1yq_nfToastTick{color:var(--nf-toast-ok,#2ec27e)}.jbF1yq_nfToast[data-kind=error] .jbF1yq_nfToastTick{color:#ef4444}.jbF1yq_nfToast.jbF1yq_nfToastOut{opacity:0;transition:opacity .3s,transform .3s;transform:translateY(8px)}@keyframes jbF1yq_nfToastIn{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}.jbF1yq_cmdMask{z-index:90;backdrop-filter:blur(4px);background:#08090b6b;justify-content:center;align-items:flex-start;padding-top:12vh;animation:.16s jbF1yq_nfFadeIn;display:flex;position:absolute;inset:0}.jbF1yq_cmdBox{border:1px solid var(--nf-border-strong);border-radius:var(--nf-radius-16,16px);background:var(--nf-bg-raise);width:min(540px,92%);max-height:62vh;box-shadow:var(--nf-shadow-lg);flex-direction:column;animation:.22s cubic-bezier(.2,.9,.3,1.12) jbF1yq_nfCmdPop;display:flex;overflow:hidden}.jbF1yq_cmdInput{width:100%;color:var(--nf-text);font-family:var(--nf-font);font-size:var(--nf-fs-14,14px);padding:var(--nf-space-14,14px) var(--nf-space-16,16px);border:none;border-bottom:1px solid var(--nf-border);background:0 0;outline:none}.jbF1yq_cmdInput::placeholder{color:var(--nf-text-3)}.jbF1yq_cmdList{padding:var(--nf-space-6,6px);margin:0;list-style:none;overflow:auto}.jbF1yq_cmdItem{align-items:center;gap:var(--nf-space-10,10px);padding:var(--nf-space-8,8px) var(--nf-space-12,12px);border-radius:var(--nf-radius-10,10px);font-size:var(--nf-fs-12,12.5px);color:var(--nf-text-2);cursor:pointer;display:flex}.jbF1yq_cmdItem .jbF1yq_cmdIcon{font-size:var(--nf-fs-14,14px);flex:none}.jbF1yq_cmdItem b{color:var(--nf-text);font-weight:600}.jbF1yq_cmdItem .jbF1yq_cmdHint{font-size:var(--nf-fs-10,10px);color:var(--nf-text-3);margin-left:auto}.jbF1yq_cmdItem[data-active]{background:var(--nf-accent-soft);color:var(--nf-text)}.jbF1yq_cmdEmpty{padding:var(--nf-space-20,20px);text-align:center;color:var(--nf-text-3);font-size:var(--nf-fs-12,12.5px)}@keyframes jbF1yq_nfCmdPop{0%{opacity:0;transform:translateY(-8px)scale(.97)}to{opacity:1;transform:none}}.jbF1yq_wfStage{--wf-bg:var(--nf-bg);--wf-bg2:var(--nf-bg-raise);--wf-bg3:var(--nf-bg-inset);--wf-bg4:var(--nf-bg-deep,var(--nf-bg-inset));--wf-line:var(--nf-border);--wf-line2:var(--nf-border-strong);--wf-text:var(--nf-text);--wf-dim:var(--nf-text-2);--wf-faint:var(--nf-text-3);--wf-ai:var(--nf-ai,#d98a2b);--wf-human:var(--nf-human,#4aa3d9);--wf-ok:var(--nf-success);--wf-warn:var(--nf-warn);--wf-bad:var(--nf-error);--wf-idle:var(--nf-idle,#5c5344);--wf-serif:var(--nf-font-display,Georgia, \"Songti SC\", SimSun, serif);--wf-ui:var(--nf-font,\"Segoe UI\", \"PingFang SC\", \"Microsoft YaHei\", sans-serif);--wf-mono:var(--nf-font-mono,\"Cascadia Mono\", Consolas, \"SF Mono\", ui-monospace, monospace);background:var(--wf-bg2);border:1px solid var(--wf-line);color:var(--wf-text);font-family:var(--wf-ui);-webkit-font-smoothing:antialiased;border-radius:16px;font-size:14px;line-height:1.6;position:relative;overflow:hidden}.jbF1yq_wfStage button{font-family:inherit}.jbF1yq_wfTop{background:var(--nf-bg-deep,var(--nf-bg));border-bottom:1px solid var(--wf-line2);flex-wrap:wrap;align-items:center;gap:14px;padding:12px 18px;display:flex}.jbF1yq_wfBook{font-family:var(--wf-serif);white-space:nowrap;text-overflow:ellipsis;max-width:38vw;font-size:22px;line-height:1.2;overflow:hidden}.jbF1yq_wfProg{color:var(--wf-dim);white-space:nowrap;align-items:baseline;gap:6px;font-size:12.5px;display:flex}.jbF1yq_wfProgBig{font-family:var(--wf-serif);color:var(--wf-ok);font-size:22px;line-height:1.1}.jbF1yq_wfProgRest{color:var(--wf-dim)}.jbF1yq_wfPill{border:1px solid var(--wf-line);color:var(--wf-dim);background:var(--wf-bg2);white-space:nowrap;border-radius:99px;align-items:center;gap:6px;padding:3px 10px;font-size:12px;display:inline-flex}.jbF1yq_wfPillDot{border-radius:50%;flex:none;width:7px;height:7px;display:inline-block}.jbF1yq_wfLiveChip{color:var(--wf-ai);border-color:#d98a2b66}.jbF1yq_wfTopRight{flex-wrap:wrap;align-items:center;gap:8px;margin-left:auto;display:flex}.jbF1yq_wfSep{background:var(--wf-line);flex:none;width:1px;height:16px;margin:0 4px}.jbF1yq_wfTool{color:var(--wf-dim);border:1px solid var(--wf-line);cursor:pointer;white-space:nowrap;background:0 0;border-radius:7px;padding:3px 11px;font-size:12.5px;transition:border-color .15s,color .15s}.jbF1yq_wfTool:hover{border-color:var(--wf-line);color:var(--wf-text)}.jbF1yq_wfToolBlue{color:var(--nf-human);border-color:#4aa3d959}.jbF1yq_wfToolAmber{color:var(--nf-ai);border-color:#d98a2b66}.jbF1yq_wfMetrics{gap:var(--nf-space-8,8px);grid-template-columns:repeat(4,minmax(0,1fr));margin:14px 18px 0;display:grid}.jbF1yq_wfMetric{background:var(--nf-bg-inset);border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);min-width:0;padding:9px 11px}.jbF1yq_wfMetric span{font-size:var(--nf-fs-caption,11px);color:var(--nf-text-2);white-space:nowrap;display:block}.jbF1yq_wfMetric b{font-family:var(--nf-font-display,Georgia, \"Songti SC\", SimSun, serif);color:var(--nf-text);font-variant-numeric:tabular-nums;font-size:20px;font-weight:700}.jbF1yq_wfMetric small{font-size:var(--nf-fs-caption,11px);color:var(--nf-text-3);white-space:nowrap;text-overflow:ellipsis;margin-top:1px;display:block;overflow:hidden}@container jbF1yq_nfpanel (width<=760px){.jbF1yq_wfMetrics{grid-template-columns:repeat(2,minmax(0,1fr))}}.jbF1yq_wfBody{grid-template-columns:minmax(0,1fr) 380px;display:grid}@container jbF1yq_nfpanel (width<=1080px){.jbF1yq_wfBody{grid-template-columns:minmax(0,1fr)}}.jbF1yq_wfColA{flex-direction:column;gap:16px;min-width:0;padding:16px 18px;display:flex}.jbF1yq_wfColB{border-left:1px solid var(--wf-line2);flex-direction:column;gap:16px;min-width:0;padding:16px 18px;display:flex}@container jbF1yq_nfpanel (width<=1080px){.jbF1yq_wfColB{border-left:none}}.jbF1yq_wfRail{border:1px solid var(--wf-line2);background:var(--wf-bg3);border-radius:10px;grid-template-columns:repeat(6,1fr);gap:4px;padding:5px;display:grid}.jbF1yq_wfRs{text-align:center;background:var(--wf-bg4);color:var(--wf-faint);cursor:pointer;border:1px solid #0000;border-radius:7px;min-width:0;padding:6px 2px;font-size:12px;transition:transform .12s,filter .12s;position:relative}.jbF1yq_wfRs:hover:not(:disabled){filter:brightness(1.15);transform:translateY(-1px)}.jbF1yq_wfRs:disabled{cursor:default;opacity:.8}.jbF1yq_wfRsNo{font-family:var(--wf-mono);opacity:.7;font-size:9px;line-height:1.2;display:block}.jbF1yq_wfRsName{color:inherit;white-space:nowrap;text-overflow:ellipsis;font-size:12.5px;font-weight:600;line-height:1.4;display:block;overflow:hidden}.jbF1yq_wfRsChk{font-family:var(--wf-mono);color:inherit;white-space:nowrap;text-overflow:ellipsis;font-size:10px;font-weight:700;line-height:1.3;display:block;overflow:hidden}.jbF1yq_wfDone{color:var(--wf-ok);background:#79b3721f}.jbF1yq_wfNow{color:var(--nf-ai);background:#d98a2b1f;border-color:#e0a03c80}@container jbF1yq_nfpanel (width<=760px){.jbF1yq_wfRail{grid-template-columns:repeat(3,1fr)}}.jbF1yq_wfEmpty{border:1px dashed var(--wf-line);background:var(--wf-bg3);color:var(--wf-dim);border-radius:12px;padding:18px 20px;font-size:12.5px;line-height:1.8}.jbF1yq_wfCmd{background:#4aa3d912;border:1px solid #4c9ed966;border-radius:14px;align-items:center;gap:16px;min-width:0;padding:13px 16px;display:flex;position:relative}.jbF1yq_wfQt{flex-direction:column;flex:none;gap:2px;display:flex}.jbF1yq_wfQtTone{color:var(--wf-dim);letter-spacing:.06em;text-transform:uppercase;font-size:12.5px}.jbF1yq_wfQt b{color:var(--nf-human);font-size:14px;line-height:1.4}.jbF1yq_wfCmdReason{min-width:0;color:var(--wf-faint);flex:1;font-size:12.5px;line-height:1.6}.jbF1yq_wfCmdBtn{background:var(--wf-human);color:#06202e;cursor:pointer;white-space:nowrap;border:none;border-radius:9px;flex:none;padding:9px 18px;font-size:13.5px;font-weight:700;transition:filter .15s;box-shadow:0 6px 20px #4aa3d94d}.jbF1yq_wfCmdBtn:hover:not(:disabled){filter:brightness(1.1)}.jbF1yq_wfCmdBtn:disabled{opacity:.45;cursor:not-allowed}.jbF1yq_wfCard2{grid-template-columns:1.2fr 1fr;gap:14px;display:grid}@container jbF1yq_nfpanel (width<=1080px){.jbF1yq_wfCard2{grid-template-columns:minmax(0,1fr)}}.jbF1yq_wfBox{border:1px solid var(--wf-line2);background:var(--wf-bg3);border-radius:12px;min-width:0;padding:13px 14px;position:relative}.jbF1yq_wfBoxH{letter-spacing:.14em;text-transform:uppercase;color:var(--wf-faint);align-items:center;gap:7px;margin:0 0 9px;font-size:12px;font-weight:700;line-height:1.4;display:flex}.jbF1yq_wfDot{border-radius:50%;flex:none;width:7px;height:7px;display:inline-block}.jbF1yq_wfRow{border-bottom:1px solid var(--wf-line2);align-items:center;gap:10px;padding:5px 0;font-size:12.5px;display:flex}.jbF1yq_wfRow:last-child{border-bottom:none}.jbF1yq_wfCn{font-family:var(--wf-mono);color:var(--wf-dim);white-space:nowrap;flex:none;min-width:58px}.jbF1yq_wfSt{border-radius:4px;flex:none;padding:1px 6px;font-size:12px}.jbF1yq_wfStRev{color:var(--nf-warn);background:#e3a52e26}.jbF1yq_wfStFix{color:var(--nf-error);background:#d9575326}.jbF1yq_wfStFail{color:var(--nf-error);background:#d957532e}.jbF1yq_wfDs{color:var(--wf-faint);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.jbF1yq_wfAct{color:var(--nf-human);cursor:pointer;white-space:nowrap;opacity:.45;background:0 0;border:1px solid #4aa3d959;border-radius:6px;flex:none;padding:2px 9px;font-size:12px;transition:background .12s,opacity .12s}.jbF1yq_wfRow:hover .jbF1yq_wfAct,.jbF1yq_wfAct:focus-visible{opacity:1}.jbF1yq_wfRow:hover .jbF1yq_wfDs{color:var(--wf-dim)}.jbF1yq_wfRow{transition:background .1s}.jbF1yq_wfAct:hover{background:#4aa3d91f}.jbF1yq_wfSmallFoot{color:var(--wf-faint);flex-wrap:wrap;align-items:center;gap:10px;margin-top:8px;font-size:12px;line-height:1.7;display:flex}.jbF1yq_wfFeedBox{min-width:0}.jbF1yq_wfFeedList{flex-direction:column;min-width:0;display:flex}.jbF1yq_wfFi{border-bottom:1px solid var(--wf-line2);align-items:baseline;gap:10px;min-width:0;padding:6px 0;font-size:12.5px;display:flex}.jbF1yq_wfFi:last-child{border-bottom:none}.jbF1yq_wfFdot{background:var(--wf-idle);opacity:.9;border-radius:50%;flex:none;align-self:center;width:6px;height:6px}.jbF1yq_wfFdotOk{background:var(--wf-ok)}.jbF1yq_wfFdotErr{background:var(--wf-bad)}.jbF1yq_wfFt{color:var(--wf-dim);white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.jbF1yq_wfDrawerBox{min-width:0}.jbF1yq_wfDrawerToggle{color:var(--wf-dim);border:1px solid var(--wf-line);cursor:pointer;background:0 0;border-radius:5px;margin-left:auto;padding:1px 8px;font-size:12px}.jbF1yq_wfDrawerToggle:hover{color:var(--wf-text);border-color:var(--wf-line)}.jbF1yq_wfDrawerList{grid-template-columns:1fr 1fr;gap:6px;display:grid}@container jbF1yq_nfpanel (width<=560px){.jbF1yq_wfDrawerList{grid-template-columns:1fr}}.jbF1yq_wfDl{background:var(--wf-bg3);border:1px solid var(--wf-line2);color:var(--wf-dim);text-align:left;cursor:pointer;border-radius:8px;padding:8px 10px;font-size:12.5px;transition:border-color .12s,transform .12s;position:relative}.jbF1yq_wfDl:hover{border-color:#d98a2b73;transform:translateY(-1px)}.jbF1yq_wfDlName{color:var(--wf-text);font-weight:600;display:block}.jbF1yq_wfDlDi{color:var(--wf-faint);font-size:10px;font-family:var(--wf-mono);margin-top:2px;display:block}.jbF1yq_wfDlDim{opacity:.6}.jbF1yq_wfDlDim .jbF1yq_wfDlName{color:var(--wf-dim)}.jbF1yq_wfAccentBlue{border-color:#4c9ed959}.jbF1yq_wfAccentAmber{border-color:#d98a2b59}.jbF1yq_wfHint{color:var(--wf-dim);margin-bottom:8px;font-size:12.5px;line-height:1.7}.jbF1yq_wfEmpty2{color:var(--wf-faint);padding:2px 0 4px;font-size:12.5px;line-height:1.7;display:block}.jbF1yq_wfPreview{color:var(--wf-faint);border:1px dashed #4aa3d94d;border-radius:9px;flex-direction:column;gap:4px;margin-bottom:8px;padding:9px 11px;font-size:12px;display:flex}.jbF1yq_wfPreviewName{color:var(--wf-text);font-size:12.5px;font-weight:600}.jbF1yq_wfPreviewLine{line-height:1.7}.jbF1yq_wfPreviewActs{gap:8px;margin-top:3px;display:flex}.jbF1yq_wfConsole{font-family:var(--wf-mono);color:var(--wf-dim);background:var(--wf-bg3);border:1px solid var(--wf-line2);border-radius:9px;min-width:0;margin-bottom:8px;padding:9px 12px;font-size:12px;line-height:1.9}.jbF1yq_wfConRow{white-space:nowrap;align-items:center;gap:8px;min-width:0;display:flex}.jbF1yq_wfConOk{color:var(--wf-ok);font-weight:600}.jbF1yq_wfConErr{color:var(--nf-error)}.jbF1yq_wfLiveMark{color:var(--wf-ai);flex:none;animation:1s ease-in-out infinite jbF1yq_wfBlink}.jbF1yq_wfConTxt{text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.jbF1yq_wfConBar{background:var(--wf-idle);border-radius:99px;flex:none;width:110px;height:4px;overflow:hidden}.jbF1yq_wfConBar i{background:var(--wf-ai);border-radius:99px;height:100%;display:block}.jbF1yq_wfOpsRow{flex-wrap:wrap;gap:8px;display:flex}.jbF1yq_wfOpsBtn{color:var(--wf-dim);border:1px solid var(--wf-line2);cursor:pointer;white-space:nowrap;background:0 0;border-radius:7px;padding:5px 11px;font-size:12.5px;transition:border-color .12s,color .12s}.jbF1yq_wfOpsBtn:hover:not(:disabled){color:var(--wf-text);border-color:var(--wf-line)}.jbF1yq_wfOpsBtn:disabled{opacity:.4;cursor:not-allowed}.jbF1yq_wfOpsBtnMain{color:var(--nf-ai);background:#d98a2b1f;border-color:#d98a2b73}.jbF1yq_wfConsoleNote{color:var(--wf-ai);margin-top:8px;font-size:12px;line-height:1.6}.jbF1yq_wfCoord{color:var(--wf-dim);font-size:12.5px;line-height:1.9}.jbF1yq_wfCoord b{color:var(--wf-text);font-weight:600}.jbF1yq_wfCoordStuck{color:var(--nf-error);margin-top:4px}@keyframes jbF1yq_wfBlink{0%,to{opacity:.35}50%{opacity:1}}@container jbF1yq_nfpanel (width<=1080px){.jbF1yq_wfBook{max-width:70%}}@container jbF1yq_nfpanel (width<=760px){.jbF1yq_wfRsName{font-size:12px}.jbF1yq_wfProg{display:none}.jbF1yq_wfTopRight{margin-left:0}.jbF1yq_wfPsLab{font-size:10px}.jbF1yq_wfCmd{flex-wrap:wrap}}.jbF1yq_wfStage button:focus-visible,.jbF1yq_wfStage a:focus-visible{outline:1px solid var(--nf-ai);outline-offset:2px}.jbF1yq_chWork{flex-direction:column;flex:1;min-height:0;display:flex}.jbF1yq_chWorkBar{align-items:center;gap:var(--nf-space-10,10px);padding:var(--nf-space-10,10px) var(--nf-space-14,14px);border-bottom:1px solid var(--nf-border);background:var(--nf-bg-raise);flex-wrap:wrap;display:flex}.jbF1yq_chWorkTitle{font-family:var(--nf-font-display,inherit);font-size:var(--nf-fs-20,20px);color:var(--nf-text);font-weight:400;line-height:1.3}.jbF1yq_chWorkActions{align-items:center;gap:var(--nf-space-8,8px);flex-wrap:wrap;margin-left:auto;display:flex}.jbF1yq_chWorkGrid{flex:1;grid-template-columns:260px minmax(0,1fr) minmax(0,1fr);min-height:0;display:grid}.jbF1yq_chWorkSideHead{align-items:center;gap:var(--nf-space-8,8px);min-width:0;display:flex}.jbF1yq_chWorkSideHead>:first-child{flex:1;min-width:0}.jbF1yq_chWorkAside,.jbF1yq_chWorkSide{gap:var(--nf-space-10,10px);min-width:0;min-height:0;padding:var(--nf-space-12,12px);flex-direction:column;display:flex}.jbF1yq_chWorkAside{border-right:1px solid var(--nf-border)}.jbF1yq_chWorkSide{border-left:1px solid var(--nf-border)}.jbF1yq_chWorkAsideTitle{font-size:var(--nf-fs-12,12px);letter-spacing:.08em;color:var(--nf-muted,var(--nf-text-2));font-weight:600}.jbF1yq_chWorkAsideBody{gap:var(--nf-space-10,10px);min-height:0;padding:var(--nf-space-12,12px) var(--nf-space-14,14px);border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-14,14px);background:var(--nf-glass-face);flex-direction:column;flex:1;display:flex;overflow:auto}.jbF1yq_chWorkMain{flex-direction:column;min-width:0;min-height:0;display:flex}.jbF1yq_chWorkToolbar{padding:var(--nf-space-8,8px) var(--nf-space-16,16px);border-bottom:1px solid var(--nf-border);align-items:center;display:flex}.jbF1yq_chWorkText{min-height:0;padding:var(--nf-space-20,20px) var(--nf-space-24,24px);background-color:var(--nf-bg-raise);background-image:repeating-linear-gradient(0deg, transparent 0, transparent 27px, var(--nf-paper-grid) 27px, var(--nf-paper-grid) 28px);font-family:var(--nf-font-display);color:var(--nf-text-2);white-space:pre-wrap;word-break:break-word;flex:1;margin:0;line-height:28px;overflow:auto}.jbF1yq_chWorkSideBody{gap:var(--nf-space-10,10px);flex-direction:column;flex:1;min-height:0;display:flex;overflow:auto}.jbF1yq_chWorkToolActions{align-items:center;gap:var(--nf-space-8,8px);margin-left:auto;display:flex}.jbF1yq_chWorkDraftBar{gap:var(--nf-space-6,6px);padding:var(--nf-space-10,10px) var(--nf-space-12,12px);border:1px solid color-mix(in srgb, var(--nf-warn,var(--nf-seal)) 45%, transparent);border-radius:var(--nf-radius-14,14px);background:var(--nf-glass-face);flex-direction:column;flex-shrink:0;display:flex}.jbF1yq_chWorkPickBar{align-items:center;gap:var(--nf-space-8,8px);flex-wrap:wrap;display:flex}.jbF1yq_chWorkPickBtns{align-items:center;gap:var(--nf-space-6,6px);margin-left:auto;display:flex}.jbF1yq_chWorkSideBody input[type=checkbox]{accent-color:var(--nf-seal,var(--nf-accent));cursor:pointer;flex-shrink:0}.jbF1yq_chWorkSideFoot{gap:var(--nf-space-8,8px);padding:var(--nf-space-10,10px) var(--nf-space-12,12px);border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-14,14px);background:var(--nf-glass-face);flex-direction:column;flex-shrink:0;display:flex}.jbF1yq_chWorkFootRow{gap:var(--nf-space-8,8px);flex-wrap:wrap;display:flex}.jbF1yq_panelHidden{display:none}@container jbF1yq_nfpanel (width<=900px){.jbF1yq_chWorkGrid{grid-template-columns:220px minmax(0,1fr)}.jbF1yq_chWorkSide{border-left:none;border-top:1px solid var(--nf-border);grid-column:1/-1}}@container jbF1yq_nfpanel (width<=820px){.jbF1yq_chWorkGrid{grid-template-columns:minmax(0,1fr)}.jbF1yq_chWorkAside{border-right:none;border-bottom:1px solid var(--nf-border)}}.jbF1yq_noticeBar{align-items:flex-start;gap:var(--nf-space-8,8px);padding:var(--nf-space-8,8px) var(--nf-space-10,10px);border:1px solid var(--nf-border);border-radius:var(--nf-ctrl-radius,8px);font-size:var(--nf-fs-notice,12px);line-height:var(--nf-lh-body,1.55);display:flex}.jbF1yq_noticeIcon{width:16px;height:16px;font-size:var(--nf-fs-14,14px);border-radius:50%;flex:none;place-items:center;margin-top:1px;font-weight:700;display:inline-grid}.jbF1yq_noticeBody{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.jbF1yq_noticeText{font-weight:600}.jbF1yq_noticeDetail{font-weight:400;font-size:var(--nf-fs-14,14px);opacity:.9}.jbF1yq_noticeActions{align-items:center;gap:var(--nf-space-6,6px);flex:none;display:flex}.jbF1yq_noticeBtn{font-size:var(--nf-fs-14,14px);color:inherit;cursor:pointer;transition:background var(--nf-dur-base,.12s) var(--nf-ease-out,ease);background:0 0;border:1px solid;border-radius:6px;flex:none;padding:2px 9px}.jbF1yq_noticeBtn:hover{background:#7f7f7f24}.jbF1yq_noticeBtn:disabled{opacity:.55;cursor:default}.jbF1yq_notice-ok{color:var(--nf-success-ink);background:var(--nf-success-ink-soft);border-color:color-mix(in srgb, var(--nf-success-ink) 34%, transparent)}.jbF1yq_notice-info{color:var(--nf-info-ink);background:var(--nf-info-ink-soft);border-color:color-mix(in srgb, var(--nf-info-ink) 34%, transparent)}.jbF1yq_notice-warn{color:var(--nf-warn-ink);background:var(--nf-warn-ink-soft);border-color:color-mix(in srgb, var(--nf-warn-ink) 34%, transparent)}.jbF1yq_notice-error{color:var(--nf-error-ink);background:var(--nf-error-ink-soft);border-color:color-mix(in srgb, var(--nf-error-ink) 40%, transparent)}.jbF1yq_noticeIcon{color:inherit}.jbF1yq_confirmOverlay{z-index:90;background:color-mix(in srgb, var(--nf-bg-deep,#100e0a) 62%, transparent);backdrop-filter:blur(2px);justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.jbF1yq_confirmCard{gap:var(--nf-space-10,10px);width:min(460px,94vw);max-height:min(86vh,720px);padding:var(--nf-space-16,16px);background:var(--nf-bg);border:1px solid var(--nf-border);border-radius:var(--nf-card-radius,12px);box-shadow:var(--nf-shadow-lg,0 20px 48px #00000047);animation:jbF1yq_nfConfirmIn var(--nf-dur-base,.14s) var(--nf-ease-out,ease) both;flex-direction:column;display:flex;overflow-y:auto}@keyframes jbF1yq_nfConfirmIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.jbF1yq_confirmHead{align-items:flex-start;gap:var(--nf-space-10,10px);display:flex}.jbF1yq_confirmIcon{width:26px;height:26px;font-size:var(--nf-fs-14,14px);border-radius:8px;flex:none;place-items:center;font-weight:700;display:grid}.jbF1yq_confirmTitle{font-family:var(--nf-font-display,Georgia, \"Songti SC\", SimSun, serif);font-size:var(--nf-fs-title,16px);color:var(--nf-text);font-weight:700;line-height:1.35}.jbF1yq_confirmBody{gap:var(--nf-space-8,8px);flex-direction:column;display:flex}.jbF1yq_confirmText{font-size:var(--nf-fs-14,14px);line-height:var(--nf-lh-body,1.6);color:var(--nf-text-2)}.jbF1yq_confirmList{padding:var(--nf-space-8,8px) var(--nf-space-12,12px);font-size:var(--nf-fs-14,14px);color:var(--nf-text-2);background:var(--nf-bg-inset);border-radius:8px;margin:0;line-height:1.65;list-style:outside}.jbF1yq_confirmList li+li{margin-top:2px}.jbF1yq_confirmAssurance{padding:var(--nf-space-8,8px) var(--nf-space-10,10px);font-size:var(--nf-fs-14,14px);color:var(--nf-info-ink);background:var(--nf-info-ink-soft);border:1px solid color-mix(in srgb, var(--nf-info-ink) 28%, transparent);border-radius:8px;line-height:1.55}.jbF1yq_confirmPhraseRow{flex-direction:column;gap:4px;display:flex}.jbF1yq_confirmPhraseHint{font-size:var(--nf-fs-14,14px);color:var(--nf-text-3)}.jbF1yq_confirmPhraseInput{font-family:var(--nf-mono,ui-monospace, monospace);font-size:var(--nf-fs-14,14px);border:1px solid var(--nf-border-strong);background:var(--nf-bg-raise);color:var(--nf-text);border-radius:8px;padding:7px 10px}.jbF1yq_confirmAckRow{align-items:flex-start;gap:var(--nf-space-8,8px);font-size:var(--nf-fs-14,14px);color:var(--nf-text-2);cursor:pointer;line-height:1.5;display:flex}.jbF1yq_confirmAckRow input{flex:none;margin-top:2px}.jbF1yq_confirmActions{justify-content:flex-end;align-items:center;gap:var(--nf-space-8,8px);padding-top:var(--nf-space-4,4px);display:flex}.jbF1yq_confirmGo[data-tone=danger]{border-color:var(--nf-error-ink);color:#fff;background:var(--nf-error-ink)}.jbF1yq_confirmGo[data-tone=danger]:hover:not(:disabled){filter:brightness(1.08)}.jbF1yq_confirmGo[data-tone=warn]{border-color:var(--nf-warn-ink);color:#fff;background:var(--nf-warn-ink)}.jbF1yq_confirmGo[data-tone=warn]:hover:not(:disabled){filter:brightness(1.08)}.jbF1yq_confirmGo[data-tone=info]{border-color:var(--nf-accent);color:var(--nf-accent-fg);background:var(--nf-accent)}.jbF1yq_confirmGo[data-tone=info]:hover:not(:disabled){filter:brightness(1.08)}.jbF1yq_confirmGo:disabled{opacity:.5;cursor:default}.jbF1yq_wfMetricWide{grid-column:span 1}.jbF1yq_wfMetricSpark{align-items:center;gap:var(--nf-space-8,8px);min-width:0;margin-top:6px;display:flex}.jbF1yq_wfMetricSpark svg{flex:none;width:132px;height:26px;overflow:visible}.jbF1yq_wfMetricSparkNote{min-width:0;font-size:var(--nf-fs-notice,12px);color:var(--nf-text-3);white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}@container jbF1yq_nfpanel (width<=560px){.jbF1yq_wfMetricSpark svg{display:none}}.jbF1yq_cardHead{justify-content:space-between;align-items:center;gap:var(--nf-space-8,8px);flex-wrap:wrap;min-width:0;display:flex}.jbF1yq_cardHeadLeft{align-items:baseline;gap:var(--nf-space-8,8px);flex-wrap:wrap;min-width:0;display:flex}.jbF1yq_cardHeadNote{font-size:var(--nf-fs-14,14px);color:var(--nf-text-3);text-overflow:ellipsis;min-width:0;overflow:hidden}.jbF1yq_cardHeadCount{color:var(--nf-text-3);font-weight:500}.jbF1yq_cardHeadActions{align-items:center;gap:var(--nf-space-6,6px);flex-wrap:wrap;flex:none;justify-content:flex-end;display:flex}.jbF1yq_rowBetween{justify-content:space-between}.jbF1yq_rowBetweenWrap{flex-wrap:wrap}.jbF1yq_rowBetweenBaseline{align-items:baseline}.jbF1yq_rowEnd{justify-content:flex-end}.jbF1yq_drawerTitle{align-items:center;gap:7px;min-width:0;display:flex}.jbF1yq_drawerTitleNi{color:var(--nf-text-3);flex:none;align-items:center;display:inline-flex}.jbF1yq_topNavNi{align-items:center;display:inline-flex}.jbF1yq_topNavNi>svg,.jbF1yq_drawerTitleNi>svg{stroke-width:1.75px;width:1em;height:1em}.jbF1yq_wfRailWrap{margin:var(--nf-space-14,14px) var(--nf-space-18,18px) 0;overscroll-behavior-x:contain;scrollbar-width:thin;overflow-x:auto}.jbF1yq_wfRailWrap>.jbF1yq_wfRail{min-width:520px;margin:0}.jbF1yq_topNavMenu{align-items:center;display:inline-flex;position:relative}.jbF1yq_topNavChevron{opacity:.65;margin-left:1px;font-size:12px;line-height:1}.jbF1yq_topNavMenuPanel{z-index:5;border:1px solid var(--nf-line,var(--nf-border));border-radius:var(--nf-r,12px);background:var(--nf-bg-raise);flex-direction:column;min-width:188px;padding:7px;display:flex;position:absolute;top:calc(100% + 8px);right:0;box-shadow:0 14px 30px #26221b24}.jbF1yq_topNavMenuHint{color:var(--nf-text-3,var(--nf-text-2));font-size:var(--nf-fs-caption,11px);letter-spacing:.08em;padding:5px 9px 6px}.jbF1yq_topNavMenuItem{border-radius:var(--nf-r-sm,8px);width:100%;min-height:32px;color:var(--nf-text-2);font-size:var(--nf-fs-meta,12px);text-align:left;cursor:pointer;background:0 0;border:1px solid #0000;align-items:center;gap:8px;padding:6px 9px;display:flex}.jbF1yq_topNavMenuItem:hover,.jbF1yq_topNavMenuItemActive{border-color:color-mix(in srgb, var(--nf-ai) 30%, transparent);background:var(--nf-ai-soft);color:var(--nf-ai)}.jbF1yq_topNavMenuItem .jbF1yq_topNavBadge{margin-left:auto}.jbF1yq_worldIntro,.jbF1yq_worldSection,.jbF1yq_timelineSurface{gap:var(--nf-space-12,12px)}.jbF1yq_worldNote{max-width:var(--nf-measure,720px);color:var(--nf-text-2);font-size:var(--nf-fs-meta,12px);line-height:var(--nf-lh-body,1.65);padding:8px 10px}.jbF1yq_worldSection .jbF1yq_cardHead{border-bottom:1px solid var(--nf-line-2,var(--nf-border));padding-bottom:8px}.jbF1yq_timelineIssues{border:1px solid color-mix(in srgb, var(--nf-warn) 45%, var(--nf-border));border-radius:var(--nf-radius-8,8px);padding:var(--nf-space-8,8px);background:color-mix(in srgb, var(--nf-warn) 7%, var(--nf-bg-inset))}.jbF1yq_timelineEvents{gap:var(--nf-space-12,12px);border-top:1px solid var(--nf-line-2,var(--nf-border));flex-direction:column;max-height:52vh;padding:4px 8px 8px;display:flex;overflow-y:auto}.jbF1yq_timelineChapter{padding-top:4px}.jbF1yq_timelineChapterEvents{gap:var(--nf-space-4,4px);flex-direction:column;display:flex}.jbF1yq_timelineEvent{border-bottom:1px solid var(--nf-line-2,var(--nf-border));font-size:var(--nf-fs-meta,12px);line-height:var(--nf-lh-body,1.65);transition:background var(--nf-dur-base,.15s) ease;padding:7px 4px}.jbF1yq_timelineEvent:hover{background:color-mix(in srgb, var(--nf-bg-inset) 72%, transparent)}.jbF1yq_runSurface{background:var(--nf-bg-raise)}.jbF1yq_runSurface .jbF1yq_runLog{border-color:var(--nf-line-2,var(--nf-border));background:var(--nf-bg-deep)}.jbF1yq_runSurface .jbF1yq_bigProgressBar{margin-top:2px}.jbF1yq_chWorkSurface,.jbF1yq_chWorkMainSurface{background:var(--nf-bg)}.jbF1yq_chWorkBarStack{background:var(--nf-bg-deep)}.jbF1yq_chWorkAsideSurface,.jbF1yq_chWorkSideSurface{background:var(--nf-bg-raise)}.jbF1yq_shelfSearchWrap{flex:220px;align-items:center;min-width:min(100%,220px);display:flex;position:relative}@container jbF1yq_nfpanel (width<=760px){.jbF1yq_shelfSearchWrap{flex-basis:100%}}.jbF1yq_runLogDetails{flex:1;min-height:0}.jbF1yq_runLogDetails>summary{cursor:pointer;list-style:none}.jbF1yq_runLogDetails>summary::-webkit-details-marker{display:none}.jbF1yq_runLogDetails>summary:before{content:\"▸\";margin-right:var(--nf-space-4,4px);color:var(--nf-text-3);transition:transform .16s;display:inline-block}.jbF1yq_runLogDetails[open]>summary:before{transform:rotate(90deg)}.jbF1yq_authorStrip{gap:var(--nf-space-8,8px);padding:var(--nf-space-12,12px) var(--nf-space-14,14px);border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-14,14px);background:var(--nf-glass-face);flex-direction:column;flex-shrink:0;display:flex}.jbF1yq_authorStripMain{gap:var(--nf-space-2,2px);flex-direction:column;min-width:0;display:flex}.jbF1yq_authorStripMain>b{font-family:var(--nf-font-display,inherit);font-size:var(--nf-fs-16,16px);color:var(--nf-text);font-weight:400;line-height:1.4}.jbF1yq_authorStripStats{gap:var(--nf-space-16,16px);font-size:var(--nf-fs-12,12px);font-variant-numeric:tabular-nums;flex-wrap:wrap;display:flex}.jbF1yq_authorStripStats>span{align-items:baseline;gap:var(--nf-space-4,4px);display:flex}.jbF1yq_authorStripStats b{font-size:var(--nf-fs-16,16px);color:var(--nf-text);font-weight:600}.jbF1yq_authorStripStats i{color:var(--nf-text-3);font-style:normal}.jbF1yq_authorStripStats>span[data-tone=bad] b,.jbF1yq_authorStripStats>span[data-tone=bad] i{color:var(--nf-error-ink)}.jbF1yq_authorStripStats>span[data-tone=warn] b,.jbF1yq_authorStripStats>span[data-tone=warn] i{color:var(--nf-warn-ink)}.jbF1yq_runQueue{gap:var(--nf-space-8,8px);flex-direction:column;flex-shrink:0;display:flex}.jbF1yq_runQueueHead{align-items:center;gap:var(--nf-space-10,10px);display:flex}.jbF1yq_runQueueHead>:first-child{flex:1;min-width:0}.jbF1yq_runQueueList{border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);flex-direction:column;display:flex;overflow:hidden}.jbF1yq_runQueueRow{align-items:center;gap:var(--nf-space-10,10px);padding:var(--nf-space-6,6px) var(--nf-space-12,12px);font-size:var(--nf-fs-12,12px);border-bottom:1px solid var(--nf-border);background:0 0;grid-template-columns:68px minmax(0,1fr) auto 68px 84px 76px auto;display:grid}.jbF1yq_runQueueRow:last-child{border-bottom:none}.jbF1yq_runQueueRow:hover{background:var(--nf-bg-inset)}.jbF1yq_runQueueRow[data-current=\"1\"]{background:color-mix(in srgb, var(--nf-ai) 12%, transparent)}.jbF1yq_runQueueNo{color:var(--nf-text-3);font-variant-numeric:tabular-nums;white-space:nowrap}.jbF1yq_runQueueTitle{color:var(--nf-text);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.jbF1yq_runQueueMeta{color:var(--nf-text-3);font-variant-numeric:tabular-nums;white-space:nowrap}.jbF1yq_runQueueMeta[data-tone=bad]{color:var(--nf-error-ink)}.jbF1yq_runQueueActions{justify-content:flex-end;display:flex}.jbF1yq_runQueueActions button{opacity:.75}.jbF1yq_runQueueRow:hover .jbF1yq_runQueueActions button{opacity:1}@container jbF1yq_nfpanel (width<=820px){.jbF1yq_runQueueRow{row-gap:var(--nf-space-4,4px);grid-template-columns:62px minmax(0,1fr) auto}.jbF1yq_runQueueActions{grid-column:3;justify-content:flex-end}}.jbF1yq_planGroups{gap:var(--nf-space-12,12px);flex-direction:column;display:flex}.jbF1yq_planGroup{gap:var(--nf-space-6,6px);padding-bottom:var(--nf-space-10,10px);border-bottom:1px solid var(--nf-line-2,var(--nf-border));flex-direction:column;display:flex}.jbF1yq_planGroup:last-child{border-bottom:none;padding-bottom:0}.jbF1yq_planGroupHead{align-items:center;gap:var(--nf-space-6,6px);display:flex}.jbF1yq_planGroupTitle{font-size:var(--nf-fs-12,12px);letter-spacing:.06em;color:var(--nf-muted,var(--nf-text-2));font-weight:600}.jbF1yq_planGroupSpacer{flex:1;min-width:0}.jbF1yq_planGroupText{font-size:var(--nf-fs-12,12px);color:var(--nf-text);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;line-height:1.7}.jbF1yq_planBeatLines{gap:var(--nf-space-2,2px);flex-direction:column;display:flex}.jbF1yq_planBeatLine{font-size:var(--nf-fs-12,12px);color:var(--nf-text);line-height:1.7}.jbF1yq_planBeatRole{color:var(--nf-accent)}.jbF1yq_planListWrap{gap:var(--nf-space-4,4px);flex-direction:column;display:flex}.jbF1yq_planListLabel{font-size:var(--nf-fs-10,10px);letter-spacing:.08em;color:var(--nf-muted,var(--nf-text-2))}.jbF1yq_planList{gap:var(--nf-space-2,2px);flex-direction:column;margin:0;padding-left:1.2em;display:flex}.jbF1yq_planListItem{font-size:var(--nf-fs-12,12px);color:var(--nf-text);line-height:1.6}.jbF1yq_planOpTag{margin-right:var(--nf-space-4,4px);padding:0 var(--nf-space-6,6px);background:var(--nf-accent-soft);color:var(--nf-accent);font-size:var(--nf-fs-10,10px);border-radius:999px;display:inline-block}.jbF1yq_planGroupEmpty{gap:var(--nf-space-4,4px);flex-direction:column;display:flex}.jbF1yq_planGroupEmptyTitle{font-size:var(--nf-fs-12,12px);color:var(--nf-text)}.jbF1yq_planGroupEmptyHint{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);line-height:1.5}.jbF1yq_planGroupEdit,.jbF1yq_planEditField{gap:var(--nf-space-4,4px);flex-direction:column;display:flex}.jbF1yq_planGroupEdit{gap:var(--nf-space-8,8px)}.jbF1yq_planEditActions{gap:var(--nf-space-6,6px);flex-wrap:wrap;display:flex}.jbF1yq_wfStOk{--st:var(--wf-ok)}.jbF1yq_wfStGen{--st:var(--wf-ai)}.jbF1yq_wfStPend{--st:var(--wf-idle)}.jbF1yq_wfStErr{--st:var(--nf-error-ink)}.jbF1yq_wfPs.jbF1yq_wfStPend{background-image:linear-gradient(180deg, var(--st-band) 0 6px, transparent 6px), repeating-linear-gradient(45deg, color-mix(in srgb, var(--st-band) 80%, transparent) 0 6px, transparent 6px 12px)}.jbF1yq_chWorkBarStack{gap:var(--nf-space-8,8px);padding:var(--nf-space-10,10px) var(--nf-space-14,14px);border-bottom:1px solid var(--nf-border);flex-direction:column;display:flex}.jbF1yq_chWorkBarRow{align-items:center;gap:var(--nf-space-10,10px);flex-wrap:wrap;min-width:0;display:flex}.jbF1yq_chWorkBarRow .jbF1yq_chWorkTitle{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.jbF1yq_chWorkGrid.jbF1yq_chWorkGridFocus{grid-template-columns:minmax(0,1fr)}.jbF1yq_chWorkMainFocus{grid-column:1/-1}.jbF1yq_chWorkGridFocus .jbF1yq_chWorkAside,.jbF1yq_chWorkGridFocus .jbF1yq_chWorkSide{display:none}.jbF1yq_chWorkMainFocus .jbF1yq_chWorkText{width:100%;max-width:var(--nf-measure,720px);margin:0 auto}.jbF1yq_reviewIssues{gap:var(--nf-space-8,8px);flex-direction:column;display:flex}.jbF1yq_reviewIssue{align-items:flex-start;gap:var(--nf-space-8,8px);padding:var(--nf-space-8,8px) var(--nf-space-10,10px);border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);background:var(--nf-bg-inset);cursor:pointer;display:flex}.jbF1yq_reviewIssue[data-sev=high]{border-color:color-mix(in srgb, var(--nf-error) 42%, transparent)}.jbF1yq_reviewIssue[data-sev=medium]{border-color:color-mix(in srgb, var(--nf-warn) 42%, transparent)}.jbF1yq_reviewIssue[data-on=\"1\"]{background:color-mix(in srgb, var(--nf-accent) 7%, var(--nf-bg-inset))}.jbF1yq_reviewIssueBody{gap:var(--nf-space-2,2px);flex-direction:column;min-width:0;display:flex}.jbF1yq_reviewIssueHead{align-items:center;gap:var(--nf-space-6,6px);flex-wrap:wrap;display:flex}.jbF1yq_reviewIssueSev{font-size:var(--nf-fs-12,12px);padding:0 var(--nf-space-6,6px);border:1px solid;border-radius:999px;font-weight:600;line-height:1.5}.jbF1yq_reviewIssue[data-sev=high] .jbF1yq_reviewIssueSev{color:var(--nf-error-ink)}.jbF1yq_reviewIssue[data-sev=medium] .jbF1yq_reviewIssueSev{color:var(--nf-warn-ink)}.jbF1yq_reviewIssue[data-sev=low] .jbF1yq_reviewIssueSev{color:var(--nf-info-ink)}.jbF1yq_reviewIssueDim{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3)}.jbF1yq_reviewIssueItem{font-size:var(--nf-fs-14,14px);color:var(--nf-text);line-height:1.55}.jbF1yq_reviewIssueFix{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);line-height:1.55}.jbF1yq_reviewIssueExcerpt{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);line-height:1.5}.jbF1yq_reviewIssuePick{margin-top:var(--nf-space-2,2px);padding-top:var(--nf-space-4,4px);border-top:1px solid var(--nf-line-2,var(--nf-border));font-size:var(--nf-fs-12,12px);letter-spacing:.04em;color:var(--nf-muted,var(--nf-text-2))}.jbF1yq_chWorkSkeleton{gap:var(--nf-space-12,12px);min-height:0;padding:var(--nf-space-20,20px) var(--nf-space-24,24px);background-color:var(--nf-bg-raise);flex-direction:column;flex:1;display:flex;overflow:hidden}.jbF1yq_skeletonLine{background:linear-gradient(90deg, var(--nf-bg-inset) 0%, color-mix(in srgb, var(--nf-text-3) 22%, var(--nf-bg-inset)) 50%, var(--nf-bg-inset) 100%);background-size:200% 100%;border-radius:6px;height:12px;animation:1.4s ease-in-out infinite jbF1yq_nfSkeletonSweep}@media (prefers-reduced-motion:reduce){.jbF1yq_skeletonLine{animation:none}}.jbF1yq_homeHero{gap:var(--nf-space-28,28px);padding:var(--nf-space-32,32px);border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-14,14px);background:linear-gradient(116deg, var(--nf-bg-raise), var(--nf-bg-inset));grid-template-columns:minmax(0,1fr) minmax(220px,30%);display:grid}.jbF1yq_homeHeroMain{gap:var(--nf-space-8,8px);flex-direction:column;min-width:0;display:flex}.jbF1yq_homeHeroKicker{align-items:center;gap:var(--nf-space-8,8px);font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);flex-wrap:wrap;display:flex}.jbF1yq_homeHeroKicker b{color:var(--nf-seal);letter-spacing:.06em;font-weight:500}.jbF1yq_homeHeroTitle{font-family:var(--nf-font-display);font-size:var(--nf-fs-34,34px);color:var(--nf-text);margin:0;font-weight:400;line-height:1.35}.jbF1yq_homeHeroWhy{max-width:62ch;font-size:var(--nf-fs-14,14px);color:var(--nf-text-2);margin:0;line-height:1.7}.jbF1yq_homeHeroActs{align-items:center;gap:var(--nf-space-10,10px);margin-top:var(--nf-space-20,20px);flex-wrap:wrap;display:flex}.jbF1yq_homeHeroCta{border-radius:var(--nf-radius-10,10px);padding:var(--nf-space-10,10px) var(--nf-space-20,20px);background:var(--nf-seal);color:var(--nf-accent-fg);font-size:var(--nf-fs-14,14px);cursor:pointer;border:none;font-weight:600;transition:filter .15s}.jbF1yq_homeHeroCta:hover:not(:disabled){filter:brightness(1.08)}.jbF1yq_homeHeroCta:disabled{opacity:.5;cursor:not-allowed}.jbF1yq_homeHeroAlt{border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);padding:var(--nf-space-10,10px) var(--nf-space-16,16px);color:var(--nf-text-2);font-size:var(--nf-fs-14,14px);cursor:pointer;background:0 0}.jbF1yq_homeHeroAlt:hover{color:var(--nf-text);border-color:var(--nf-line-2)}.jbF1yq_homeHeroMeta{gap:var(--nf-space-16,16px);margin-top:var(--nf-space-4,4px);font-size:var(--nf-fs-12,12px);flex-wrap:wrap;display:flex}.jbF1yq_homeHeroMeta>span{align-items:baseline;gap:var(--nf-space-4,4px);color:var(--nf-text-3);display:flex}.jbF1yq_homeHeroMeta i{font-style:normal}.jbF1yq_homeHeroMeta b{color:var(--nf-text-2);font-variant-numeric:tabular-nums;font-weight:600}.jbF1yq_homeHeroMeta>span[data-tone=bad] b{color:var(--nf-error-ink)}.jbF1yq_homeHeroMeta>span[data-tone=warn] b{color:var(--nf-warn-ink)}.jbF1yq_homeHeroMeta>span[data-tone=ok] b{color:var(--nf-success-ink)}.jbF1yq_homeHeroSide{gap:var(--nf-space-14,14px);padding-left:var(--nf-space-20,20px);border-left:1px solid var(--nf-border);flex-direction:column;min-width:0;display:flex}.jbF1yq_homeHeroSealRow{align-items:center;gap:var(--nf-space-12,12px);display:flex}.jbF1yq_homeHeroSeal{justify-content:center;align-items:center;gap:var(--nf-space-2,2px);border:1px solid color-mix(in srgb, var(--nf-seal) 55%, transparent);border-radius:var(--nf-radius-10,10px);width:62px;height:62px;color:var(--nf-seal);text-align:center;flex-direction:column;flex:none;display:flex}.jbF1yq_homeHeroSeal b{font-family:var(--nf-font-display);font-size:var(--nf-fs-22,22px);font-weight:500;line-height:1}.jbF1yq_homeHeroSeal span{font-size:var(--nf-fs-10,10px);color:var(--nf-text-3);line-height:1.2}.jbF1yq_homeHeroStage{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);line-height:1.5}.jbF1yq_homeHeroBatch{gap:var(--nf-space-6,6px);flex-direction:column;display:flex}.jbF1yq_homeHeroBatchHead{justify-content:space-between;align-items:baseline;gap:var(--nf-space-8,8px);font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);display:flex}.jbF1yq_homeHeroBatchHead b{font-size:var(--nf-fs-20,20px);color:var(--nf-text);font-variant-numeric:tabular-nums}.jbF1yq_homeHeroBatchBar{background:var(--nf-bg-inset);border-radius:3px;height:6px;overflow:hidden}.jbF1yq_homeHeroBatchFill{transform-origin:0;background:var(--nf-seal);height:100%;transition:transform .3s}.jbF1yq_homeHeroBatchCap{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);line-height:1.55}.jbF1yq_homeHeroNodes{gap:var(--nf-space-8,8px);padding-top:var(--nf-space-12,12px);border-top:1px solid var(--nf-border);grid-template-columns:repeat(auto-fit,minmax(78px,1fr));display:grid}.jbF1yq_homeHeroNode{gap:var(--nf-space-2,2px);min-width:0;font-size:var(--nf-fs-12,12px);flex-direction:column;display:flex}.jbF1yq_homeHeroNode span{color:var(--nf-text-3)}.jbF1yq_homeHeroNode b{color:var(--nf-text-2);text-overflow:ellipsis;white-space:nowrap;font-weight:500;line-height:1.4;overflow:hidden}.jbF1yq_homeHeroNode[data-tone=done] b{color:var(--nf-text-3)}.jbF1yq_homeHeroNode[data-tone=now] span{color:var(--nf-seal)}.jbF1yq_homeHeroNode[data-tone=now] b{color:var(--nf-text)}.jbF1yq_inbox{gap:var(--nf-space-10,10px);padding:var(--nf-space-12,12px) var(--nf-space-14,14px);border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-14,14px);background:var(--nf-glass-face);flex-direction:column;display:flex}.jbF1yq_inboxHead{align-items:baseline;gap:var(--nf-space-10,10px);display:flex}.jbF1yq_inboxTitle{font-size:var(--nf-fs-14,14px);color:var(--nf-text);font-weight:600}.jbF1yq_inboxCount{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);font-variant-numeric:tabular-nums}.jbF1yq_inboxAll{color:var(--nf-info-ink);font-size:var(--nf-fs-12,12px);cursor:pointer;background:0 0;border:none;margin-left:auto}.jbF1yq_inboxEmpty{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);line-height:1.6}.jbF1yq_inboxList{gap:var(--nf-space-8,8px);flex-direction:column;display:flex}.jbF1yq_inboxItem{align-items:flex-start;gap:var(--nf-space-8,8px);padding:var(--nf-space-8,8px) var(--nf-space-10,10px);border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);background:var(--nf-bg-inset);display:flex}.jbF1yq_inboxItem[data-tone=high]{border-color:color-mix(in srgb, var(--nf-error) 40%, transparent)}.jbF1yq_inboxItem[data-tone=warn]{border-color:color-mix(in srgb, var(--nf-warn) 38%, transparent)}.jbF1yq_inboxBadge{padding:0 var(--nf-space-6,6px);font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);border:1px solid;border-radius:999px;flex:none;line-height:1.6}.jbF1yq_inboxItem[data-tone=high] .jbF1yq_inboxBadge{color:var(--nf-error-ink)}.jbF1yq_inboxItem[data-tone=warn] .jbF1yq_inboxBadge{color:var(--nf-warn-ink)}.jbF1yq_inboxItem[data-tone=info] .jbF1yq_inboxBadge{color:var(--nf-info-ink)}.jbF1yq_inboxBody{gap:var(--nf-space-2,2px);flex-direction:column;flex:1;min-width:0;display:flex}.jbF1yq_inboxItemTitle{font-size:var(--nf-fs-14,14px);color:var(--nf-text);line-height:1.5}.jbF1yq_inboxSource{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3)}.jbF1yq_inboxDetail{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);line-height:1.55}.jbF1yq_inboxAct{border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);padding:var(--nf-space-4,4px) var(--nf-space-10,10px);color:var(--nf-text-2);font-size:var(--nf-fs-12,12px);cursor:pointer;white-space:nowrap;background:0 0;flex:none}.jbF1yq_inboxAct:hover{color:var(--nf-text);border-color:var(--nf-line-2)}.jbF1yq_inboxMore{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);padding-left:var(--nf-space-4,4px)}.jbF1yq_cabinetSnapshot{gap:var(--nf-space-8,8px);flex-direction:column;display:flex}.jbF1yq_cabinetCard{gap:var(--nf-space-4,4px);padding:var(--nf-space-10,10px) var(--nf-space-12,12px);border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);background:var(--nf-bg-inset);flex-direction:column;display:flex}.jbF1yq_cabinetCardHead{align-items:baseline;gap:var(--nf-space-6,6px);font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);display:flex}.jbF1yq_cabinetCardHead b{color:var(--nf-text-2);font-weight:600}.jbF1yq_cabinetCardBody{font-size:var(--nf-fs-14,14px);color:var(--nf-text);line-height:1.6}.jbF1yq_cabinetCardMeta{justify-content:space-between;gap:var(--nf-space-8,8px);font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);font-variant-numeric:tabular-nums;display:flex}.jbF1yq_cabinetCardMeta span[data-tone=ok]{color:var(--nf-success-ink)}.jbF1yq_cabinetCardMeta span[data-tone=warn]{color:var(--nf-warn-ink)}.jbF1yq_cabinetCardEmpty{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);line-height:1.6}.jbF1yq_wfCard1{gap:var(--nf-space-14,14px);grid-template-columns:minmax(0,1fr);display:grid}.jbF1yq_cabinetAll{gap:var(--nf-space-4,4px);margin-top:var(--nf-space-8,8px);flex-direction:column;display:flex}.jbF1yq_cabinetAll>summary{cursor:pointer;font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);list-style:none}.jbF1yq_cabinetAll>summary::-webkit-details-marker{display:none}.jbF1yq_cabinetAll>summary:before{content:\"▸\";margin-right:var(--nf-space-4,4px);transition:transform .16s;display:inline-block}.jbF1yq_cabinetAll[open]>summary:before{transform:rotate(90deg)}@container jbF1yq_nfpanel (width<=760px){.jbF1yq_homeHero{grid-template-columns:minmax(0,1fr)}.jbF1yq_homeHeroSide{padding-left:0;padding-top:var(--nf-space-14,14px);border-left:none;border-top:1px solid var(--nf-border)}}@container jbF1yq_nfpanel (width<=820px){.jbF1yq_homeHeroTitle{font-size:var(--nf-fs-22,22px)}.jbF1yq_inboxItem{flex-wrap:wrap}.jbF1yq_inboxAct{margin-left:auto}}.jbF1yq_contentDrawer.jbF1yq_drawerNarrow{width:min(420px,92vw)}.jbF1yq_cabinetDrawer{gap:var(--nf-space-12,12px);flex-direction:column;display:flex}.jbF1yq_wfFtime{color:var(--nf-text-3);font-size:var(--nf-fs-12,12px);font-variant-numeric:tabular-nums;white-space:nowrap;flex:none;margin-left:auto}.jbF1yq_readingCol{max-width:var(--nf-measure,720px);line-height:1.8}.jbF1yq_assetConflicts{gap:var(--nf-space-6,6px);margin-top:var(--nf-space-8,8px);flex-direction:column;display:flex}.jbF1yq_assetConflict{align-items:flex-start;gap:var(--nf-space-8,8px);padding:var(--nf-space-8,8px) var(--nf-space-10,10px);border:1px solid color-mix(in srgb, var(--nf-warn) 40%, transparent);border-radius:var(--nf-radius-10,10px);background:var(--nf-bg-inset);display:flex}.jbF1yq_assetConflictIcon{color:var(--nf-warn-ink);flex:none;font-weight:700}.jbF1yq_assetConflictText{min-width:0;font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);flex:1;line-height:1.6}.jbF1yq_assetConflictFix{border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);padding:var(--nf-space-4,4px) var(--nf-space-10,10px);color:var(--nf-text-2);font-size:var(--nf-fs-12,12px);cursor:pointer;white-space:nowrap;background:0 0;flex:none}.jbF1yq_assetConflictFix:hover:not(:disabled){color:var(--nf-text);border-color:var(--nf-line-2)}.jbF1yq_assetConflictFix:disabled{opacity:.5;cursor:not-allowed}.jbF1yq_skeletonBlock{gap:var(--nf-space-12,12px);padding:var(--nf-space-16,16px) 0;flex-direction:column;display:flex}.jbF1yq_homeHero{grid-template-columns:minmax(0,1fr) minmax(230px,290px);gap:20px;min-height:0;padding:14px 18px}.jbF1yq_homeHero:before{opacity:.38;width:56px;height:56px;top:12px;right:16px}.jbF1yq_homeHero:after{width:220px;height:220px;bottom:-96px;right:-40px}.jbF1yq_homeHeroKicker{gap:8px}.jbF1yq_homeHeroTitle{max-width:46ch;margin:4px 0 0;font-size:clamp(20px,1.9vw,28px);line-height:1.28}.jbF1yq_homeHeroWhy{-webkit-line-clamp:2;-webkit-box-orient:vertical;max-width:66ch;margin:6px 0 0;font-size:13px;line-height:1.6;display:-webkit-box;overflow:hidden}.jbF1yq_homeHeroActs{margin-top:12px}.jbF1yq_homeHeroMeta{gap:14px;margin-top:8px}.jbF1yq_homeHeroSide{justify-content:flex-start;gap:6px;padding:0 0 0 18px}.jbF1yq_homeHeroSealRow{align-items:center;margin-bottom:2px}.jbF1yq_homeHeroStage{font-size:10px;line-height:1.4}.jbF1yq_homeHeroNodes{grid-template-columns:repeat(auto-fit,minmax(62px,1fr));gap:8px;margin-top:6px;padding-top:8px}.jbF1yq_homeHeroNode b{margin-bottom:2px}@container jbF1yq_nfpanel (width<=1080px){.jbF1yq_homeHeroSide{border-top:1px solid color-mix(in srgb, var(--nf-ai) 22%, var(--nf-line));border-left:none;flex-direction:row;justify-content:space-between;align-items:center;gap:14px;padding:10px 0 0}.jbF1yq_homeHeroSealRow{margin-bottom:0}.jbF1yq_homeHeroNodes{border-top:none;margin-top:0;padding-top:0}.jbF1yq_homeHeroNodes:before{display:none}}@media (pointer:coarse){.jbF1yq_view .jbF1yq_panel :is(.jbF1yq_button,.jbF1yq_buttonSmall,.jbF1yq_iconButton,.jbF1yq_iconBtn,.jbF1yq_topNavBtn,.jbF1yq_cmdItem,.jbF1yq_pillNavPill,.jbF1yq_assetFilterChip){position:relative}.jbF1yq_view .jbF1yq_panel :is(.jbF1yq_button,.jbF1yq_buttonSmall,.jbF1yq_iconButton,.jbF1yq_iconBtn,.jbF1yq_topNavBtn,.jbF1yq_cmdItem,.jbF1yq_pillNavPill,.jbF1yq_assetFilterChip):after,.jbF1yq_runChip:after{content:\"\";pointer-events:auto;width:max(100%,44px);height:max(100%,44px);position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}}.jbF1yq_homeHero{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:16px;padding:10px 14px}.jbF1yq_homeHeroMain{flex-flow:wrap;align-items:center;gap:10px 12px;max-width:none}.jbF1yq_homeHeroKicker{flex:none}.jbF1yq_homeHeroTitle{flex:none;max-width:none;margin:0;font-size:19px;line-height:1.3}.jbF1yq_homeHeroWhy{-webkit-line-clamp:1;max-width:30ch;margin:0;font-size:12px;line-height:1.5}.jbF1yq_homeHeroActs{gap:8px;margin:0}.jbF1yq_homeHeroCta{padding:7px 14px;font-size:13px}.jbF1yq_homeHeroAlt{padding:7px 12px;font-size:13px}.jbF1yq_homeHeroMeta{gap:12px;margin:0 0 0 4px;font-size:11px}.jbF1yq_homeHeroSeal{width:36px;height:36px;box-shadow:none}.jbF1yq_homeHeroSeal b{font-size:15px}.jbF1yq_homeHeroSeal span{font-size:9px}.jbF1yq_homeHeroStage{letter-spacing:.08em;font-size:10px}.jbF1yq_homeHeroBatch{flex:none;gap:3px;width:132px}.jbF1yq_homeHeroBatchHead{margin:0}.jbF1yq_homeHeroBatchHead b{font-size:15px}.jbF1yq_homeHeroBatchBar{height:4px}.jbF1yq_homeHeroBatchCap{font-size:9px;line-height:1.3}.jbF1yq_homeHeroNodes{border-top:none;border-left:1px solid var(--nf-line-2);grid-template-columns:repeat(3,auto);gap:10px;margin:0;padding:0 0 0 14px}.jbF1yq_homeHeroNodes:before{display:none}.jbF1yq_homeHeroNode b{margin:0;font-size:10px}.jbF1yq_homeHeroNode span{font-size:9px}@container jbF1yq_nfpanel (width<=1080px){.jbF1yq_homeHero{grid-template-columns:minmax(0,1fr);gap:8px}.jbF1yq_homeHeroSide{border-top:1px solid var(--nf-line-2);flex-wrap:wrap;gap:10px 14px;padding:8px 0 0}.jbF1yq_homeHeroNodes{border-left:none;padding-left:0}}.jbF1yq_inbox{gap:var(--nf-space-10,10px)}.jbF1yq_inboxList{gap:var(--nf-space-8,8px);grid-template-columns:repeat(auto-fill,minmax(300px,1fr));align-items:start;max-height:46vh;display:grid;overflow-y:auto}.jbF1yq_inboxItem{min-width:0}@container jbF1yq_nfpanel (width<=820px){.jbF1yq_inboxList{grid-template-columns:minmax(0,1fr)}}.jbF1yq_homeHeroPool{grid-column:1/-1;align-items:center;gap:12px;min-width:0;display:flex}.jbF1yq_heroPoolBar{flex:auto;gap:2px;min-width:0;display:flex}.jbF1yq_heroPoolMeta{color:var(--nf-text-3);letter-spacing:.02em;flex-wrap:wrap;flex:none;gap:10px;font-size:11px;display:flex}.jbF1yq_heroPoolLegend{align-items:center;gap:4px;display:inline-flex}.jbF1yq_heroPoolLegend i{background:var(--nf-bg-inset);border-radius:2px;width:7px;height:7px}.jbF1yq_heroPoolLegend[data-st=ok] i{background:var(--nf-success,#4f8750)}.jbF1yq_heroPoolLegend[data-st=rev] i{background:var(--nf-human,#2f6fa3)}.jbF1yq_heroPoolLegend[data-st=fix] i{background:var(--nf-seal,#a63e2a)}.jbF1yq_heroPoolLegend[data-st=gen] i{background:var(--nf-ai,#c07c22)}.jbF1yq_heroPoolLegend[data-st=pend] i{background:color-mix(in srgb, var(--nf-text-3,#726858) 40%, transparent)}.jbF1yq_heroPoolLegend[data-st=err] i{background:var(--nf-error-ink,#a63e2a)}.jbF1yq_heroPoolEmpty{color:var(--nf-text-3);font-size:12px}.jbF1yq_wfMetrics{border:1px solid var(--nf-line);border-radius:var(--nf-radius-10,10px);background:0 0;align-items:stretch;gap:0;padding:0;display:flex;overflow:hidden}.jbF1yq_wfMetric{border:none;border-left:1px solid var(--nf-line);min-width:0;box-shadow:none;background:0 0;border-radius:0;flex:1 1 0;padding:9px 14px}.jbF1yq_wfMetric:first-child{border-left:none}.jbF1yq_wfMetric>span{color:var(--nf-text-3);letter-spacing:.02em;font-size:11px}.jbF1yq_wfMetric>b{font-family:var(--nf-font-display);font-variant-numeric:tabular-nums;font-size:22px;line-height:1.25}.jbF1yq_wfMetric>small{color:var(--nf-text-3);font-size:10px}.jbF1yq_wfMetricWide{flex:1.15 1 0}.jbF1yq_wfMetricSpark{margin-top:1px}.jbF1yq_heroPoolBar{justify-content:flex-start}.jbF1yq_wfMetric>b[data-bad=yes]{color:var(--nf-error-ink,#a63e2a)}@container jbF1yq_nfpanel (width<=1180px){.jbF1yq_wfMetrics{flex-wrap:wrap}.jbF1yq_wfMetric{border-left:1px solid var(--nf-line);flex:28%}.jbF1yq_wfMetric:nth-child(4n+1){border-left:none}}.jbF1yq_wfMetric>b[data-word=yes]{color:var(--nf-text-3);font-family:var(--nf-font);font-size:15px}.jbF1yq_homeHeroMain{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:\"jbF1yq_kicker jbF1yq_kicker\"\"jbF1yq_title jbF1yq_acts\"\"jbF1yq_why jbF1yq_why\"\"jbF1yq_meta jbF1yq_meta\";align-items:center;gap:3px 18px;max-width:none;display:grid}.jbF1yq_homeHeroKicker{grid-area:jbF1yq_kicker;margin-bottom:2px}.jbF1yq_homeHeroTitle{letter-spacing:.01em;grid-area:jbF1yq_title;margin:0;font-size:23px;line-height:1.25}.jbF1yq_homeHeroActs{grid-area:jbF1yq_acts;gap:8px;margin:0}.jbF1yq_homeHeroWhy{-webkit-line-clamp:2;grid-area:jbF1yq_why;max-width:62ch;margin:1px 0 0;font-size:12.5px;line-height:1.5}.jbF1yq_homeHeroMeta{border-top:1px solid var(--nf-line);grid-area:jbF1yq_meta;gap:14px;margin:7px 0 0;padding-top:7px;font-size:11px}.jbF1yq_homeHeroSide{flex-direction:row;align-items:center;gap:14px;padding:0 0 0 18px}.jbF1yq_homeHeroSealRow{gap:10px;margin:0}.jbF1yq_heroPoolBar{gap:5px}.jbF1yq_heroPoolGroup{background:var(--nf-bg-inset);cursor:pointer;border:none;border-radius:2px;flex:1 1 0;gap:1px;min-width:6px;height:15px;padding:0;display:flex;overflow:hidden}.jbF1yq_heroPoolGroup:hover{filter:brightness(1.12)}.jbF1yq_heroPoolGroup[data-now=yes]{height:21px;box-shadow:inset 0 2px 0 var(--nf-seal,#a63e2a)}.jbF1yq_heroPoolSeg{background:var(--nf-bg-inset);flex:1 1 0;min-width:1px}.jbF1yq_heroPoolSeg[data-st=ok]{background:var(--nf-success,#4f8750)}.jbF1yq_heroPoolSeg[data-st=rev]{background:var(--nf-human,#2f6fa3)}.jbF1yq_heroPoolSeg[data-st=fix]{background:var(--nf-seal,#a63e2a)}.jbF1yq_heroPoolSeg[data-st=gen]{background:var(--nf-ai,#c07c22)}.jbF1yq_heroPoolSeg[data-st=pend]{background:color-mix(in srgb, var(--nf-text-3,#726858) 40%, transparent)}.jbF1yq_heroPoolSeg[data-st=err]{background:var(--nf-error-ink,#a63e2a)}.jbF1yq_heroPoolDone{color:var(--nf-text-3);letter-spacing:.02em;align-items:baseline;gap:5px;font-size:12px;display:inline-flex}.jbF1yq_heroPoolDone b{color:var(--nf-text-2);font-family:var(--nf-font-display);font-variant-numeric:tabular-nums;font-size:15px;font-weight:500}.jbF1yq_heroPoolDoneSep{color:var(--nf-line-2)}.jbF1yq_inboxList{max-height:46vh;display:block;overflow-y:auto}.jbF1yq_inboxItem{border:none;border-top:1px solid var(--nf-line);background:0 0;border-radius:0;grid-template-columns:auto minmax(0,1fr) auto;align-items:start;gap:10px;padding:9px 4px;display:grid}.jbF1yq_inboxItem:first-of-type{border-top:none}.jbF1yq_inboxItem:hover{background:color-mix(in srgb, var(--nf-text-3,#726858) 5%, transparent)}.jbF1yq_inboxBody{flex-direction:column;gap:2px;min-width:0;display:flex}.jbF1yq_inboxActs{flex-direction:column;flex:none;align-items:flex-end;gap:6px;display:flex}.jbF1yq_inboxMoreBtn{color:var(--nf-text-3);cursor:pointer;background:0 0;border:none;padding:0;font-size:11px}.jbF1yq_inboxMoreBtn:hover{color:var(--nf-text)}.jbF1yq_inboxItem[data-open=yes] .jbF1yq_inboxItemTitle{-webkit-line-clamp:unset;display:block;overflow:visible}.jbF1yq_inboxItemTitle[data-clamp=yes],.jbF1yq_inboxDetail[data-clamp=yes]{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.jbF1yq_inboxItem{align-items:center;padding:5px 4px}.jbF1yq_inboxBody{flex-direction:row;align-items:baseline;gap:8px;min-width:0}.jbF1yq_inboxItemTitle{white-space:nowrap;text-overflow:ellipsis;flex:0 auto;min-width:0;overflow:hidden}.jbF1yq_inboxItemTitle[data-open=yes]{white-space:normal}.jbF1yq_inboxSource{flex:none}.jbF1yq_inboxDetail{flex-basis:100%;display:none}.jbF1yq_inboxDetail[data-open=yes]{display:block}.jbF1yq_inboxActs{flex-direction:row;align-items:center;gap:8px}.jbF1yq_inboxItem:has(.jbF1yq_inboxDetail[data-open=yes]){align-items:start}.jbF1yq_inboxList{max-height:50vh}.jbF1yq_wfFeedList{max-height:12vh;overflow-y:auto}.jbF1yq_inbox{min-width:0}.jbF1yq_wfBody{align-items:start}";
1409
- const tagId = "@waterwx/dsh-novel-forge/panel.module.css";
1410
- if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
1411
- const tag = document.createElement("style");
1412
- tag.dataset.plugin = "@waterwx/dsh-novel-forge";
1413
- tag.dataset.pluginCss = tagId;
1414
- tag.textContent = css;
1415
- document.head.appendChild(tag);
1416
- }
1417
- var panel_module_css_default = {
1418
- "wfOpsRow": "jbF1yq_wfOpsRow",
1419
- "cmdBox": "jbF1yq_cmdBox",
1420
- "wfDlName": "jbF1yq_wfDlName",
1421
- "t2Rail": "jbF1yq_t2Rail",
1422
- "wfFtime": "jbF1yq_wfFtime",
1423
- "wfCmdReason": "jbF1yq_wfCmdReason",
1424
- "wfFdotErr": "jbF1yq_wfFdotErr",
1425
- "wfConOk": "jbF1yq_wfConOk",
1426
- "buttonPrimary": "jbF1yq_buttonPrimary",
1427
- "timelineEvent": "jbF1yq_timelineEvent",
1428
- "heroPoolGroup": "jbF1yq_heroPoolGroup",
1429
- "dimCardSelected": "jbF1yq_dimCardSelected",
1430
- "nfpanel": "jbF1yq_nfpanel",
1431
- "chWorkAside": "jbF1yq_chWorkAside",
1432
- "adaptImpacts": "jbF1yq_adaptImpacts",
1433
- "chWorkBarStack": "jbF1yq_chWorkBarStack",
1434
- "outlineH4": "jbF1yq_outlineH4",
1435
- "outlineCodeBlock": "jbF1yq_outlineCodeBlock",
1436
- "adaptMatrix": "jbF1yq_adaptMatrix",
1437
- "panelHidden": "jbF1yq_panelHidden",
1438
- "wfCn": "jbF1yq_wfCn",
1439
- "subPageTitle": "jbF1yq_subPageTitle",
1440
- "planTreeVolMeta": "jbF1yq_planTreeVolMeta",
1441
- "pulse": "jbF1yq_pulse",
1442
- "nfToastOut": "jbF1yq_nfToastOut",
1443
- "chWorkAsideTitle": "jbF1yq_chWorkAsideTitle",
1444
- "runQueueHead": "jbF1yq_runQueueHead",
1445
- "assistantStatusBusy": "jbF1yq_assistantStatusBusy",
1446
- "navSpacer": "jbF1yq_navSpacer",
1447
- "bookCardCoverFallback": "jbF1yq_bookCardCoverFallback",
1448
- "planListItem": "jbF1yq_planListItem",
1449
- "heroPoolLegend": "jbF1yq_heroPoolLegend",
1450
- "wfLiveChip": "jbF1yq_wfLiveChip",
1451
- "heroPoolEmpty": "jbF1yq_heroPoolEmpty",
1452
- "entry": "jbF1yq_entry",
1453
- "wfQt": "jbF1yq_wfQt",
1454
- "drawerTitleNi": "jbF1yq_drawerTitleNi",
1455
- "cabinetDrawer": "jbF1yq_cabinetDrawer",
1456
- "wfStage": "jbF1yq_wfStage",
1457
- "drawerNarrow": "jbF1yq_drawerNarrow",
1458
- "navAboutUpdate": "jbF1yq_navAboutUpdate",
1459
- "reviewIssueItem": "jbF1yq_reviewIssueItem",
1460
- "outlineH": "jbF1yq_outlineH",
1461
- "wfSep": "jbF1yq_wfSep",
1462
- "authorStrip": "jbF1yq_authorStrip",
1463
- "reviewIssueBody": "jbF1yq_reviewIssueBody",
1464
- "skeletonBlock": "jbF1yq_skeletonBlock",
1465
- "wfSt": "jbF1yq_wfSt",
1466
- "topNavNi": "jbF1yq_topNavNi",
1467
- "rowBetweenBaseline": "jbF1yq_rowBetweenBaseline",
1468
- "planBeatLines": "jbF1yq_planBeatLines",
1469
- "reviewIssueDim": "jbF1yq_reviewIssueDim",
1470
- "cabinetCardHead": "jbF1yq_cabinetCardHead",
1471
- "topNav": "jbF1yq_topNav",
1472
- "title": "jbF1yq_title",
1473
- "cabinetCardEmpty": "jbF1yq_cabinetCardEmpty",
1474
- "readerTitle": "jbF1yq_readerTitle",
1475
- "entryLabel": "jbF1yq_entryLabel",
1476
- "authorNav": "jbF1yq_authorNav",
1477
- "noticeSuccess": "jbF1yq_noticeSuccess",
1478
- "bookCardProgressFill": "jbF1yq_bookCardProgressFill",
1479
- "wfBoxH": "jbF1yq_wfBoxH",
1480
- "cmdItem": "jbF1yq_cmdItem",
1481
- "wsEditor": "jbF1yq_wsEditor",
1482
- "wfPsLab": "jbF1yq_wfPsLab",
1483
- "homeHeroTitle": "jbF1yq_homeHeroTitle",
1484
- "importFileInfo": "jbF1yq_importFileInfo",
1485
- "pageHeader": "jbF1yq_pageHeader",
1486
- "planEditActions": "jbF1yq_planEditActions",
1487
- "reviewIssue": "jbF1yq_reviewIssue",
1488
- "toolStepDetail": "jbF1yq_toolStepDetail",
1489
- "entryIcon": "jbF1yq_entryIcon",
1490
- "nfFadeIn": "jbF1yq_nfFadeIn",
1491
- "assetGrid": "jbF1yq_assetGrid",
1492
- "readerFoot": "jbF1yq_readerFoot",
1493
- "planDetailBar": "jbF1yq_planDetailBar",
1494
- "contentDrawerBody": "jbF1yq_contentDrawerBody",
1495
- "kicker": "jbF1yq_kicker",
1496
- "wsPage": "jbF1yq_wsPage",
1497
- "outlineCodeLang": "jbF1yq_outlineCodeLang",
1498
- "chWorkPickBtns": "jbF1yq_chWorkPickBtns",
1499
- "wfBody": "jbF1yq_wfBody",
1500
- "homeHeroStage": "jbF1yq_homeHeroStage",
1501
- "wfBlink": "jbF1yq_wfBlink",
1502
- "chWorkSideBody": "jbF1yq_chWorkSideBody",
1503
- "nfToastHost": "jbF1yq_nfToastHost",
1504
- "chWorkMainFocus": "jbF1yq_chWorkMainFocus",
1505
- "diffOld": "jbF1yq_diffOld",
1506
- "inboxDetail": "jbF1yq_inboxDetail",
1507
- "nfViewIn": "jbF1yq_nfViewIn",
1508
- "chWorkMainSurface": "jbF1yq_chWorkMainSurface",
1509
- "confirmList": "jbF1yq_confirmList",
1510
- "wfToolAmber": "jbF1yq_wfToolAmber",
1511
- "genreDesc": "jbF1yq_genreDesc",
1512
- "bookCardName": "jbF1yq_bookCardName",
1513
- "active": "jbF1yq_active",
1514
- "confirmAckRow": "jbF1yq_confirmAckRow",
1515
- "nfToastIn": "jbF1yq_nfToastIn",
1516
- "heroPoolDoneSep": "jbF1yq_heroPoolDoneSep",
1517
- "bookCardCoverTitle": "jbF1yq_bookCardCoverTitle",
1518
- "homeHeroBatchBar": "jbF1yq_homeHeroBatchBar",
1519
- "outlineToc": "jbF1yq_outlineToc",
1520
- "bookCardBody": "jbF1yq_bookCardBody",
1521
- "diffTagNew": "jbF1yq_diffTagNew",
1522
- "authorNavBtn": "jbF1yq_authorNavBtn",
1523
- "adaptCell": "jbF1yq_adaptCell",
1524
- "lfDot": "jbF1yq_lfDot",
1525
- "planGroupEmptyHint": "jbF1yq_planGroupEmptyHint",
1526
- "wfFdotOk": "jbF1yq_wfFdotOk",
1527
- "inboxSource": "jbF1yq_inboxSource",
1528
- "panelNavCollapsed": "jbF1yq_panelNavCollapsed",
1529
- "toolStep": "jbF1yq_toolStep",
1530
- "legendNew": "jbF1yq_legendNew",
1531
- "assistantFloat": "jbF1yq_assistantFloat",
1532
- "bookCardCover": "jbF1yq_bookCardCover",
1533
- "readerView": "jbF1yq_readerView",
1534
- "readerText": "jbF1yq_readerText",
1535
- "drawerHeadBtn": "jbF1yq_drawerHeadBtn",
1536
- "t2Content": "jbF1yq_t2Content",
1537
- "chWorkSideFoot": "jbF1yq_chWorkSideFoot",
1538
- "chWorkFootRow": "jbF1yq_chWorkFootRow",
1539
- "readerItemTitle": "jbF1yq_readerItemTitle",
1540
- "drawerTitle": "jbF1yq_drawerTitle",
1541
- "topNavActive": "jbF1yq_topNavActive",
1542
- "wfStGen": "jbF1yq_wfStGen",
1543
- "noticeBar": "jbF1yq_noticeBar",
1544
- "chWorkToolActions": "jbF1yq_chWorkToolActions",
1545
- "timelineChapterEvents": "jbF1yq_timelineChapterEvents",
1546
- "legendOld": "jbF1yq_legendOld",
1547
- "planGroup": "jbF1yq_planGroup",
1548
- "shelfSearchWrap": "jbF1yq_shelfSearchWrap",
1549
- "cmdHint": "jbF1yq_cmdHint",
1550
- "wfCoordStuck": "jbF1yq_wfCoordStuck",
1551
- "chapterTitle": "jbF1yq_chapterTitle",
1552
- "importError": "jbF1yq_importError",
1553
- "statCardDDetail": "jbF1yq_statCardDDetail",
1554
- "outlineQuote": "jbF1yq_outlineQuote",
1555
- "diffNew": "jbF1yq_diffNew",
1556
- "noticeActions": "jbF1yq_noticeActions",
1557
- "outlineTocL1": "jbF1yq_outlineTocL1",
1558
- "notice-error": "jbF1yq_notice-error",
1559
- "assetEditor": "jbF1yq_assetEditor",
1560
- "wsPreview": "jbF1yq_wsPreview",
1561
- "emptyStateTitle": "jbF1yq_emptyStateTitle",
1562
- "planTree": "jbF1yq_planTree",
1563
- "chatBubbleUser": "jbF1yq_chatBubbleUser",
1564
- "adaptRule": "jbF1yq_adaptRule",
1565
- "planTreeRowTitle": "jbF1yq_planTreeRowTitle",
1566
- "adaptOutline": "jbF1yq_adaptOutline",
1567
- "noticeBtn": "jbF1yq_noticeBtn",
1568
- "bookCardTitleRow": "jbF1yq_bookCardTitleRow",
1569
- "readerHeader": "jbF1yq_readerHeader",
1570
- "ideaCard": "jbF1yq_ideaCard",
1571
- "confirmBody": "jbF1yq_confirmBody",
1572
- "readerSegBtn": "jbF1yq_readerSegBtn",
1573
- "tabular": "jbF1yq_tabular",
1574
- "fileList": "jbF1yq_fileList",
1575
- "topNavMenuItem": "jbF1yq_topNavMenuItem",
1576
- "diffSameBody": "jbF1yq_diffSameBody",
1577
- "shelfEmpty": "jbF1yq_shelfEmpty",
1578
- "outlineEdit": "jbF1yq_outlineEdit",
1579
- "wfProg": "jbF1yq_wfProg",
1580
- "rowBetweenWrap": "jbF1yq_rowBetweenWrap",
1581
- "dimCurrent": "jbF1yq_dimCurrent",
1582
- "confirmPhraseInput": "jbF1yq_confirmPhraseInput",
1583
- "runQueueActions": "jbF1yq_runQueueActions",
1584
- "planTreeVol": "jbF1yq_planTreeVol",
1585
- "wfRs": "jbF1yq_wfRs",
1586
- "badgeRejected": "jbF1yq_badgeRejected",
1587
- "readerSegActive": "jbF1yq_readerSegActive",
1588
- "wfAccentAmber": "jbF1yq_wfAccentAmber",
1589
- "homeHeroSeal": "jbF1yq_homeHeroSeal",
1590
- "bookCardActions": "jbF1yq_bookCardActions",
1591
- "runChip": "jbF1yq_runChip",
1592
- "topNavMenuItemActive": "jbF1yq_topNavMenuItemActive",
1593
- "wfStErr": "jbF1yq_wfStErr",
1594
- "runLogDetails": "jbF1yq_runLogDetails",
1595
- "onlyChanges": "jbF1yq_onlyChanges",
1596
- "authorStripMain": "jbF1yq_authorStripMain",
1597
- "outlineTocItem": "jbF1yq_outlineTocItem",
1598
- "topNavMenuHint": "jbF1yq_topNavMenuHint",
1599
- "wfPs": "jbF1yq_wfPs",
1600
- "wfRsName": "jbF1yq_wfRsName",
1601
- "homeHeroNodes": "jbF1yq_homeHeroNodes",
1602
- "wfRsNo": "jbF1yq_wfRsNo",
1603
- "chWorkSkeleton": "jbF1yq_chWorkSkeleton",
1604
- "badgeDone": "jbF1yq_badgeDone",
1605
- "cmdIcon": "jbF1yq_cmdIcon",
1606
- "wfNow": "jbF1yq_wfNow",
1607
- "planBeatsLabel": "jbF1yq_planBeatsLabel",
1608
- "chWorkBarRow": "jbF1yq_chWorkBarRow",
1609
- "planListLabel": "jbF1yq_planListLabel",
1610
- "confirmCard": "jbF1yq_confirmCard",
1611
- "coverPlaceholder": "jbF1yq_coverPlaceholder",
1612
- "runQueueTitle": "jbF1yq_runQueueTitle",
1613
- "wfStOk": "jbF1yq_wfStOk",
1614
- "runLogTime": "jbF1yq_runLogTime",
1615
- "inboxItemTitle": "jbF1yq_inboxItemTitle",
1616
- "noticeText": "jbF1yq_noticeText",
1617
- "homeHeroPool": "jbF1yq_homeHeroPool",
1618
- "outlineDoc": "jbF1yq_outlineDoc",
1619
- "worldSection": "jbF1yq_worldSection",
1620
- "cardHead": "jbF1yq_cardHead",
1621
- "dimCard": "jbF1yq_dimCard",
1622
- "settingsDrawerHead": "jbF1yq_settingsDrawerHead",
1623
- "wfDlDi": "jbF1yq_wfDlDi",
1624
- "wfMetricWide": "jbF1yq_wfMetricWide",
1625
- "cabinetSnapshot": "jbF1yq_cabinetSnapshot",
1626
- "wfRail": "jbF1yq_wfRail",
1627
- "assetConflictText": "jbF1yq_assetConflictText",
1628
- "nfToastTick": "jbF1yq_nfToastTick",
1629
- "wfCoord": "jbF1yq_wfCoord",
1630
- "assetTextarea": "jbF1yq_assetTextarea",
1631
- "planDetailEmpty": "jbF1yq_planDetailEmpty",
1632
- "contentDrawer": "jbF1yq_contentDrawer",
1633
- "noticeError": "jbF1yq_noticeError",
1634
- "subPageBody": "jbF1yq_subPageBody",
1635
- "nfSkeletonSweep": "jbF1yq_nfSkeletonSweep",
1636
- "chapter": "jbF1yq_chapter",
1637
- "wfEmpty": "jbF1yq_wfEmpty",
1638
- "topNavBadge": "jbF1yq_topNavBadge",
1639
- "wfCmdBtn": "jbF1yq_wfCmdBtn",
1640
- "wfFdot": "jbF1yq_wfFdot",
1641
- "wfMetricSpark": "jbF1yq_wfMetricSpark",
1642
- "topNavMenu": "jbF1yq_topNavMenu",
1643
- "timelineIssues": "jbF1yq_timelineIssues",
1644
- "chapterList": "jbF1yq_chapterList",
1645
- "wsColumn": "jbF1yq_wsColumn",
1646
- "inboxBody": "jbF1yq_inboxBody",
1647
- "confirmGo": "jbF1yq_confirmGo",
1648
- "assetEditorRow": "jbF1yq_assetEditorRow",
1649
- "ideaCandidate": "jbF1yq_ideaCandidate",
1650
- "outlineH3": "jbF1yq_outlineH3",
1651
- "shelfToolbarExtra": "jbF1yq_shelfToolbarExtra",
1652
- "bookCardActive": "jbF1yq_bookCardActive",
1653
- "navAboutRow": "jbF1yq_navAboutRow",
1654
- "drawerSpacer": "jbF1yq_drawerSpacer",
1655
- "planMaster": "jbF1yq_planMaster",
1656
- "chWorkSurface": "jbF1yq_chWorkSurface",
1657
- "buttonDanger": "jbF1yq_buttonDanger",
1658
- "navTitleName": "jbF1yq_navTitleName",
1659
- "nfCmdPop": "jbF1yq_nfCmdPop",
1660
- "wfOpsBtnMain": "jbF1yq_wfOpsBtnMain",
1661
- "dimCardHead": "jbF1yq_dimCardHead",
1662
- "wbIndexTitle": "jbF1yq_wbIndexTitle",
1663
- "worldNote": "jbF1yq_worldNote",
1664
- "aiTag": "jbF1yq_aiTag",
1665
- "chapterMain": "jbF1yq_chapterMain",
1666
- "brandLogo": "jbF1yq_brandLogo",
1667
- "shelfToolbar": "jbF1yq_shelfToolbar",
1668
- "topNavBtn": "jbF1yq_topNavBtn",
1669
- "toolStepStatus": "jbF1yq_toolStepStatus",
1670
- "outlineP": "jbF1yq_outlineP",
1671
- "inboxEmpty": "jbF1yq_inboxEmpty",
1672
- "importHint": "jbF1yq_importHint",
1673
- "noticeBody": "jbF1yq_noticeBody",
1674
- "homeHero": "jbF1yq_homeHero",
1675
- "homeHeroMeta": "jbF1yq_homeHeroMeta",
1676
- "inboxCount": "jbF1yq_inboxCount",
1677
- "planGroupEdit": "jbF1yq_planGroupEdit",
1678
- "readingCol": "jbF1yq_readingCol",
1679
- "planTreeSearch": "jbF1yq_planTreeSearch",
1680
- "readerBody": "jbF1yq_readerBody",
1681
- "card": "jbF1yq_card",
1682
- "wfConTxt": "jbF1yq_wfConTxt",
1683
- "planBeats": "jbF1yq_planBeats",
1684
- "inboxItem": "jbF1yq_inboxItem",
1685
- "assetCardName": "jbF1yq_assetCardName",
1686
- "adaptTable": "jbF1yq_adaptTable",
1687
- "reviewIssueHead": "jbF1yq_reviewIssueHead",
1688
- "authorHome": "jbF1yq_authorHome",
1689
- "planGroupHead": "jbF1yq_planGroupHead",
1690
- "toolStepError": "jbF1yq_toolStepError",
1691
- "assetKind": "jbF1yq_assetKind",
1692
- "badge": "jbF1yq_badge",
1693
- "readerLoading": "jbF1yq_readerLoading",
1694
- "field": "jbF1yq_field",
1695
- "outlineTocL2": "jbF1yq_outlineTocL2",
1696
- "chWorkGridFocus": "jbF1yq_chWorkGridFocus",
1697
- "pillNav": "jbF1yq_pillNav",
1698
- "planDetailBody": "jbF1yq_planDetailBody",
1699
- "button": "jbF1yq_button",
1700
- "assetCardFooter": "jbF1yq_assetCardFooter",
1701
- "wfBox": "jbF1yq_wfBox",
1702
- "wfHint": "jbF1yq_wfHint",
1703
- "wfMetricSparkNote": "jbF1yq_wfMetricSparkNote",
1704
- "inboxAll": "jbF1yq_inboxAll",
1705
- "wfBook": "jbF1yq_wfBook",
1706
- "diffAdd": "jbF1yq_diffAdd",
1707
- "runQueueNo": "jbF1yq_runQueueNo",
1708
- "row": "jbF1yq_row",
1709
- "progressBar": "jbF1yq_progressBar",
1710
- "assetLabel": "jbF1yq_assetLabel",
1711
- "chatScroll": "jbF1yq_chatScroll",
1712
- "textarea": "jbF1yq_textarea",
1713
- "planDot": "jbF1yq_planDot",
1714
- "homeHeroKicker": "jbF1yq_homeHeroKicker",
1715
- "wfDl": "jbF1yq_wfDl",
1716
- "homeHeroWhy": "jbF1yq_homeHeroWhy",
1717
- "assetCardTop": "jbF1yq_assetCardTop",
1718
- "drawerHead": "jbF1yq_drawerHead",
1719
- "wfRsChk": "jbF1yq_wfRsChk",
1720
- "nfSkeletonShimmer": "jbF1yq_nfSkeletonShimmer",
1721
- "homeHeroBatch": "jbF1yq_homeHeroBatch",
1722
- "adaptRules": "jbF1yq_adaptRules",
1723
- "timelineSurface": "jbF1yq_timelineSurface",
1724
- "authorStripStats": "jbF1yq_authorStripStats",
1725
- "progressLine": "jbF1yq_progressLine",
1726
- "wfPill": "jbF1yq_wfPill",
1727
- "bookCardMetaRow": "jbF1yq_bookCardMetaRow",
1728
- "wfTopRight": "jbF1yq_wfTopRight",
1729
- "assistantFloatHeader": "jbF1yq_assistantFloatHeader",
1730
- "emptyState": "jbF1yq_emptyState",
1731
- "shelfStatGrid": "jbF1yq_shelfStatGrid",
1732
- "pillNavPill": "jbF1yq_pillNavPill",
1733
- "reviewIssues": "jbF1yq_reviewIssues",
1734
- "settingsDrawerOverlay": "jbF1yq_settingsDrawerOverlay",
1735
- "cmdMask": "jbF1yq_cmdMask",
1736
- "wsColumns": "jbF1yq_wsColumns",
1737
- "adaptProposal": "jbF1yq_adaptProposal",
1738
- "inboxBadge": "jbF1yq_inboxBadge",
1739
- "chatRole": "jbF1yq_chatRole",
1740
- "adaptInputCard": "jbF1yq_adaptInputCard",
1741
- "wfAct": "jbF1yq_wfAct",
1742
- "homeHeroMain": "jbF1yq_homeHeroMain",
1743
- "cardTitleLg": "jbF1yq_cardTitleLg",
1744
- "t2Master": "jbF1yq_t2Master",
1745
- "outlineTable": "jbF1yq_outlineTable",
1746
- "pageHeaderEyebrow": "jbF1yq_pageHeaderEyebrow",
1747
- "runChipDot": "jbF1yq_runChipDot",
1748
- "chWork": "jbF1yq_chWork",
1749
- "wfStRev": "jbF1yq_wfStRev",
1750
- "toolLive": "jbF1yq_toolLive",
1751
- "subPage": "jbF1yq_subPage",
1752
- "chapterActions": "jbF1yq_chapterActions",
1753
- "rowEnd": "jbF1yq_rowEnd",
1754
- "toolSteps": "jbF1yq_toolSteps",
1755
- "navTitle": "jbF1yq_navTitle",
1756
- "readerMain": "jbF1yq_readerMain",
1757
- "wfSmallFoot": "jbF1yq_wfSmallFoot",
1758
- "heroPoolMeta": "jbF1yq_heroPoolMeta",
1759
- "chWorkSideHead": "jbF1yq_chWorkSideHead",
1760
- "chapterPreview": "jbF1yq_chapterPreview",
1761
- "dropzone": "jbF1yq_dropzone",
1762
- "chWorkToolbar": "jbF1yq_chWorkToolbar",
1763
- "wsPreviewText": "jbF1yq_wsPreviewText",
1764
- "wsSelectedText": "jbF1yq_wsSelectedText",
1765
- "wfTool": "jbF1yq_wfTool",
1766
- "authorPageHeader": "jbF1yq_authorPageHeader",
1767
- "shelfHero": "jbF1yq_shelfHero",
1768
- "panel": "jbF1yq_panel",
1769
- "dropzoneIcon": "jbF1yq_dropzoneIcon",
1770
- "runChipText": "jbF1yq_runChipText",
1771
- "badgeError": "jbF1yq_badgeError",
1772
- "chWorkAsideSurface": "jbF1yq_chWorkAsideSurface",
1773
- "navGroupLabel": "jbF1yq_navGroupLabel",
1774
- "numSerif": "jbF1yq_numSerif",
1775
- "pageHeaderMain": "jbF1yq_pageHeaderMain",
1776
- "settingsCard": "jbF1yq_settingsCard",
1777
- "navTab": "jbF1yq_navTab",
1778
- "progressLineDone": "jbF1yq_progressLineDone",
1779
- "wfStFix": "jbF1yq_wfStFix",
1780
- "homeHeroSealRow": "jbF1yq_homeHeroSealRow",
1781
- "adaptResult": "jbF1yq_adaptResult",
1782
- "outlineTocL3": "jbF1yq_outlineTocL3",
1783
- "adaptTextarea": "jbF1yq_adaptTextarea",
1784
- "readerPara": "jbF1yq_readerPara",
1785
- "brandEn": "jbF1yq_brandEn",
1786
- "readerGroup": "jbF1yq_readerGroup",
1787
- "notice-warn": "jbF1yq_notice-warn",
1788
- "inboxHead": "jbF1yq_inboxHead",
1789
- "heroPoolBar": "jbF1yq_heroPoolBar",
1790
- "input": "jbF1yq_input",
1791
- "diffSame": "jbF1yq_diffSame",
1792
- "toolStepActive": "jbF1yq_toolStepActive",
1793
- "panelHead": "jbF1yq_panelHead",
1794
- "shelfEmptyIcon": "jbF1yq_shelfEmptyIcon",
1795
- "wfConBar": "jbF1yq_wfConBar",
1796
- "importModalOverlay": "jbF1yq_importModalOverlay",
1797
- "settingsDrawerBody": "jbF1yq_settingsDrawerBody",
1798
- "planBeatRole": "jbF1yq_planBeatRole",
1799
- "inboxAct": "jbF1yq_inboxAct",
1800
- "iconBtn": "jbF1yq_iconBtn",
1801
- "wbIndexVol": "jbF1yq_wbIndexVol",
1802
- "confirmPhraseHint": "jbF1yq_confirmPhraseHint",
1803
- "bookshelf": "jbF1yq_bookshelf",
1804
- "subPageBack": "jbF1yq_subPageBack",
1805
- "planTreeRow": "jbF1yq_planTreeRow",
1806
- "wfMetrics": "jbF1yq_wfMetrics",
1807
- "drawerMax": "jbF1yq_drawerMax",
1808
- "topNavMenuPanel": "jbF1yq_topNavMenuPanel",
1809
- "wfConsole": "jbF1yq_wfConsole",
1810
- "dropzoneActive": "jbF1yq_dropzoneActive",
1811
- "authorContent": "jbF1yq_authorContent",
1812
- "confirmOverlay": "jbF1yq_confirmOverlay",
1813
- "diffDel": "jbF1yq_diffDel",
1814
- "outlineH1": "jbF1yq_outlineH1",
1815
- "shelfGrid": "jbF1yq_shelfGrid",
1816
- "assetCardContent": "jbF1yq_assetCardContent",
1817
- "readerSidebar": "jbF1yq_readerSidebar",
1818
- "cmdEmpty": "jbF1yq_cmdEmpty",
1819
- "badgeWritten": "jbF1yq_badgeWritten",
1820
- "chWorkTitle": "jbF1yq_chWorkTitle",
1821
- "assistantStatus": "jbF1yq_assistantStatus",
1822
- "cmdList": "jbF1yq_cmdList",
1823
- "runSurface": "jbF1yq_runSurface",
1824
- "navBadgePulse": "jbF1yq_navBadgePulse",
1825
- "planList": "jbF1yq_planList",
1826
- "wfDrawerBox": "jbF1yq_wfDrawerBox",
1827
- "fadeIn": "jbF1yq_fadeIn",
1828
- "docsSurface": "jbF1yq_docsSurface",
1829
- "fieldLabel": "jbF1yq_fieldLabel",
1830
- "wfRow": "jbF1yq_wfRow",
1831
- "wfPreviewName": "jbF1yq_wfPreviewName",
1832
- "wfConRow": "jbF1yq_wfConRow",
1833
- "confirmTitle": "jbF1yq_confirmTitle",
1834
- "homeHeroAlt": "jbF1yq_homeHeroAlt",
1835
- "eyebrow": "jbF1yq_eyebrow",
1836
- "homeHeroNode": "jbF1yq_homeHeroNode",
1837
- "assistantFloatBody": "jbF1yq_assistantFloatBody",
1838
- "authorPageBodyFlow": "jbF1yq_authorPageBodyFlow",
1839
- "notice-info": "jbF1yq_notice-info",
1840
- "reviewIssueSev": "jbF1yq_reviewIssueSev",
1841
- "pillNavSliding": "jbF1yq_pillNavSliding",
1842
- "brandSub": "jbF1yq_brandSub",
1843
- "chWorkGrid": "jbF1yq_chWorkGrid",
1844
- "liveText": "jbF1yq_liveText",
1845
- "wfPreviewActs": "jbF1yq_wfPreviewActs",
1846
- "brand": "jbF1yq_brand",
1847
- "runLog": "jbF1yq_runLog",
1848
- "wfPillDot": "jbF1yq_wfPillDot",
1849
- "planGroupTitle": "jbF1yq_planGroupTitle",
1850
- "diffText": "jbF1yq_diffText",
1851
- "cardHeadCount": "jbF1yq_cardHeadCount",
1852
- "assistantResize": "jbF1yq_assistantResize",
1853
- "planDetailTitle": "jbF1yq_planDetailTitle",
1854
- "tnum": "jbF1yq_tnum",
1855
- "cmdInput": "jbF1yq_cmdInput",
1856
- "progressLineLive": "jbF1yq_progressLineLive",
1857
- "wfPreview": "jbF1yq_wfPreview",
1858
- "planGroupText": "jbF1yq_planGroupText",
1859
- "readerArticle": "jbF1yq_readerArticle",
1860
- "inboxMore": "jbF1yq_inboxMore",
1861
- "assetConflicts": "jbF1yq_assetConflicts",
1862
- "assetConflictIcon": "jbF1yq_assetConflictIcon",
1863
- "reviewBox": "jbF1yq_reviewBox",
1864
- "pillNavSlider": "jbF1yq_pillNavSlider",
1865
- "panelTop": "jbF1yq_panelTop",
1866
- "titleBlock": "jbF1yq_titleBlock",
1867
- "confirmAssurance": "jbF1yq_confirmAssurance",
1868
- "wfPreviewLine": "jbF1yq_wfPreviewLine",
1869
- "planEditField": "jbF1yq_planEditField",
1870
- "wfQtTone": "jbF1yq_wfQtTone",
1871
- "inboxList": "jbF1yq_inboxList",
1872
- "outlineCode": "jbF1yq_outlineCode",
1873
- "lfPill": "jbF1yq_lfPill",
1874
- "wfConErr": "jbF1yq_wfConErr",
1875
- "chWorkActions": "jbF1yq_chWorkActions",
1876
- "chWorkAsideBody": "jbF1yq_chWorkAsideBody",
1877
- "homeHeroSide": "jbF1yq_homeHeroSide",
1878
- "runQueueList": "jbF1yq_runQueueList",
1879
- "t2RailSep": "jbF1yq_t2RailSep",
1880
- "nfToast": "jbF1yq_nfToast",
1881
- "wfAccentBlue": "jbF1yq_wfAccentBlue",
1882
- "reviewIssuePick": "jbF1yq_reviewIssuePick",
1883
- "homeHeroBatchFill": "jbF1yq_homeHeroBatchFill",
1884
- "inboxActs": "jbF1yq_inboxActs",
1885
- "wfRailWrap": "jbF1yq_wfRailWrap",
1886
- "chWorkText": "jbF1yq_chWorkText",
1887
- "wfColA": "jbF1yq_wfColA",
1888
- "tab": "jbF1yq_tab",
1889
- "assetGroups": "jbF1yq_assetGroups",
1890
- "bookCardProgressBar": "jbF1yq_bookCardProgressBar",
1891
- "wfProgBig": "jbF1yq_wfProgBig",
1892
- "noticeDetail": "jbF1yq_noticeDetail",
1893
- "authorTopNav": "jbF1yq_authorTopNav",
1894
- "confirmHead": "jbF1yq_confirmHead",
1895
- "cardHeadActions": "jbF1yq_cardHeadActions",
1896
- "subPageHead": "jbF1yq_subPageHead",
1897
- "readerChapterTitle": "jbF1yq_readerChapterTitle",
1898
- "topNavChevron": "jbF1yq_topNavChevron",
1899
- "wfCard1": "jbF1yq_wfCard1",
1900
- "cabinetCardMeta": "jbF1yq_cabinetCardMeta",
1901
- "confirmText": "jbF1yq_confirmText",
1902
- "assetConflictFix": "jbF1yq_assetConflictFix",
1903
- "inboxTitle": "jbF1yq_inboxTitle",
1904
- "pageHeaderTitle": "jbF1yq_pageHeaderTitle",
1905
- "assetCard": "jbF1yq_assetCard",
1906
- "wfColB": "jbF1yq_wfColB",
1907
- "brandText": "jbF1yq_brandText",
1908
- "topNavSpacer": "jbF1yq_topNavSpacer",
1909
- "emptyStateIcon": "jbF1yq_emptyStateIcon",
1910
- "panelBody": "jbF1yq_panelBody",
1911
- "progressTotalBar": "jbF1yq_progressTotalBar",
1912
- "wfDlDim": "jbF1yq_wfDlDim",
1913
- "planGroupSpacer": "jbF1yq_planGroupSpacer",
1914
- "cabinetCardBody": "jbF1yq_cabinetCardBody",
1915
- "chWorkSide": "jbF1yq_chWorkSide",
1916
- "chWorkBar": "jbF1yq_chWorkBar",
1917
- "planOpTag": "jbF1yq_planOpTag",
1918
- "wfStPend": "jbF1yq_wfStPend",
1919
- "importPreview": "jbF1yq_importPreview",
1920
- "emptyStateHint": "jbF1yq_emptyStateHint",
1921
- "rowBetween": "jbF1yq_rowBetween",
1922
- "outlineList": "jbF1yq_outlineList",
1923
- "runQueueRow": "jbF1yq_runQueueRow",
1924
- "heroPoolSeg": "jbF1yq_heroPoolSeg",
1925
- "importResult": "jbF1yq_importResult",
1926
- "importModalHead": "jbF1yq_importModalHead",
1927
- "confirmIcon": "jbF1yq_confirmIcon",
1928
- "diffList": "jbF1yq_diffList",
1929
- "wfMetric": "jbF1yq_wfMetric",
1930
- "homeHeroBatchCap": "jbF1yq_homeHeroBatchCap",
1931
- "nfSlideInRight": "jbF1yq_nfSlideInRight",
1932
- "wfDs": "jbF1yq_wfDs",
1933
- "reviewIssueFix": "jbF1yq_reviewIssueFix",
1934
- "wsPageHeader": "jbF1yq_wsPageHeader",
1935
- "readerItemBadge": "jbF1yq_readerItemBadge",
1936
- "wbIndexRow": "jbF1yq_wbIndexRow",
1937
- "settingsDrawer": "jbF1yq_settingsDrawer",
1938
- "readerSeg": "jbF1yq_readerSeg",
1939
- "iconButton": "jbF1yq_iconButton",
1940
- "wfLiveMark": "jbF1yq_wfLiveMark",
1941
- "skeletonLine": "jbF1yq_skeletonLine",
1942
- "headSpacer": "jbF1yq_headSpacer",
1943
- "navAbout": "jbF1yq_navAbout",
1944
- "importPreviewList": "jbF1yq_importPreviewList",
1945
- "toolStepName": "jbF1yq_toolStepName",
1946
- "nfChipPulse": "jbF1yq_nfChipPulse",
1947
- "importModalActions": "jbF1yq_importModalActions",
1948
- "assetFilterChip": "jbF1yq_assetFilterChip",
1949
- "importField": "jbF1yq_importField",
1950
- "importModal": "jbF1yq_importModal",
1951
- "dimEdit": "jbF1yq_dimEdit",
1952
- "nfDrawerIn": "jbF1yq_nfDrawerIn",
1953
- "runLogLine": "jbF1yq_runLogLine",
1954
- "wfToolBlue": "jbF1yq_wfToolBlue",
1955
- "chWorkSideSurface": "jbF1yq_chWorkSideSurface",
1956
- "adaptTableScroll": "jbF1yq_adaptTableScroll",
1957
- "pageHeaderActions": "jbF1yq_pageHeaderActions",
1958
- "navTitleBook": "jbF1yq_navTitleBook",
1959
- "planDetail": "jbF1yq_planDetail",
1960
- "wfDrawerList": "jbF1yq_wfDrawerList",
1961
- "chatBubbleAssistant": "jbF1yq_chatBubbleAssistant",
1962
- "planGroupEmptyTitle": "jbF1yq_planGroupEmptyTitle",
1963
- "cabinetCard": "jbF1yq_cabinetCard",
1964
- "panelTitle": "jbF1yq_panelTitle",
1965
- "meta": "jbF1yq_meta",
1966
- "cardHeadNote": "jbF1yq_cardHeadNote",
1967
- "readerItemActive": "jbF1yq_readerItemActive",
1968
- "acts": "jbF1yq_acts",
1969
- "badgePending": "jbF1yq_badgePending",
1970
- "panelContent": "jbF1yq_panelContent",
1971
- "outlineVolSummary": "jbF1yq_outlineVolSummary",
1972
- "bookCardBlurb": "jbF1yq_bookCardBlurb",
1973
- "wfFt": "jbF1yq_wfFt",
1974
- "wfTop": "jbF1yq_wfTop",
1975
- "chWorkMain": "jbF1yq_chWorkMain",
1976
- "brandName": "jbF1yq_brandName",
1977
- "diffChange": "jbF1yq_diffChange",
1978
- "badgeGenerating": "jbF1yq_badgeGenerating",
1979
- "authorTopTabs": "jbF1yq_authorTopTabs",
1980
- "headChip": "jbF1yq_headChip",
1981
- "panelNav": "jbF1yq_panelNav",
1982
- "bigProgressBarFill": "jbF1yq_bigProgressBarFill",
1983
- "chWorkDraftBar": "jbF1yq_chWorkDraftBar",
1984
- "navGroup": "jbF1yq_navGroup",
1985
- "wsAppliedBanner": "jbF1yq_wsAppliedBanner",
1986
- "timelineChapter": "jbF1yq_timelineChapter",
1987
- "importModalBody": "jbF1yq_importModalBody",
1988
- "busyRow": "jbF1yq_busyRow",
1989
- "inboxMoreBtn": "jbF1yq_inboxMoreBtn",
1990
- "wfFeedBox": "jbF1yq_wfFeedBox",
1991
- "readerError": "jbF1yq_readerError",
1992
- "diffLegend": "jbF1yq_diffLegend",
1993
- "shelfEmptyTitle": "jbF1yq_shelfEmptyTitle",
1994
- "segTab": "jbF1yq_segTab",
1995
- "cardTitle": "jbF1yq_cardTitle",
1996
- "wfCard2": "jbF1yq_wfCard2",
1997
- "diffTagOld": "jbF1yq_diffTagOld",
1998
- "readerChapterMeta": "jbF1yq_readerChapterMeta",
1999
- "navTitleLogo": "jbF1yq_navTitleLogo",
2000
- "diffColumn": "jbF1yq_diffColumn",
2001
- "chapterFocus": "jbF1yq_chapterFocus",
2002
- "wsSelected": "jbF1yq_wsSelected",
2003
- "chapterFocusPulse": "jbF1yq_chapterFocusPulse",
2004
- "assetFilterChipActive": "jbF1yq_assetFilterChipActive",
2005
- "switch": "jbF1yq_switch",
2006
- "wfDone": "jbF1yq_wfDone",
2007
- "noticeIcon": "jbF1yq_noticeIcon",
2008
- "confirmActions": "jbF1yq_confirmActions",
2009
- "cardHeadLeft": "jbF1yq_cardHeadLeft",
2010
- "createBookInner": "jbF1yq_createBookInner",
2011
- "outlineHr": "jbF1yq_outlineHr",
2012
- "nfConfirmIn": "jbF1yq_nfConfirmIn",
2013
- "homeHeroBatchHead": "jbF1yq_homeHeroBatchHead",
2014
- "t2RailBtn": "jbF1yq_t2RailBtn",
2015
- "heroPoolDone": "jbF1yq_heroPoolDone",
2016
- "importModalTabs": "jbF1yq_importModalTabs",
2017
- "reviewIssueExcerpt": "jbF1yq_reviewIssueExcerpt",
2018
- "wfCmd": "jbF1yq_wfCmd",
2019
- "outlineVol": "jbF1yq_outlineVol",
2020
- "dimTitle": "jbF1yq_dimTitle",
2021
- "adaptRuleRow": "jbF1yq_adaptRuleRow",
2022
- "planTreeRowNo": "jbF1yq_planTreeRowNo",
2023
- "assetGroupHeader": "jbF1yq_assetGroupHeader",
2024
- "wfConsoleNote": "jbF1yq_wfConsoleNote",
2025
- "assetGroup": "jbF1yq_assetGroup",
2026
- "buttonSmall": "jbF1yq_buttonSmall",
2027
- "subPageMeta": "jbF1yq_subPageMeta",
2028
- "progressLineError": "jbF1yq_progressLineError",
2029
- "readerItemNo": "jbF1yq_readerItemNo",
2030
- "wfFi": "jbF1yq_wfFi",
2031
- "runQueue": "jbF1yq_runQueue",
2032
- "ideaToggle": "jbF1yq_ideaToggle",
2033
- "t2RailHead": "jbF1yq_t2RailHead",
2034
- "planListWrap": "jbF1yq_planListWrap",
2035
- "planTreeVolGroup": "jbF1yq_planTreeVolGroup",
2036
- "pageHeaderSub": "jbF1yq_pageHeaderSub",
2037
- "wfProgRest": "jbF1yq_wfProgRest",
2038
- "readerItem": "jbF1yq_readerItem",
2039
- "wfFeedList": "jbF1yq_wfFeedList",
2040
- "assetConflict": "jbF1yq_assetConflict",
2041
- "planGroups": "jbF1yq_planGroups",
2042
- "notice-ok": "jbF1yq_notice-ok",
2043
- "bigProgressBar": "jbF1yq_bigProgressBar",
2044
- "planGroupEmpty": "jbF1yq_planGroupEmpty",
2045
- "statCardDValue": "jbF1yq_statCardDValue",
2046
- "toolStepIcon": "jbF1yq_toolStepIcon",
2047
- "runQueueMeta": "jbF1yq_runQueueMeta",
2048
- "coverPreview": "jbF1yq_coverPreview",
2049
- "worldIntro": "jbF1yq_worldIntro",
2050
- "subPageActions": "jbF1yq_subPageActions",
2051
- "readerGroupCount": "jbF1yq_readerGroupCount",
2052
- "wfDot": "jbF1yq_wfDot",
2053
- "homeHeroActs": "jbF1yq_homeHeroActs",
2054
- "outlineH2": "jbF1yq_outlineH2",
2055
- "wfEmpty2": "jbF1yq_wfEmpty2",
2056
- "timelineEvents": "jbF1yq_timelineEvents",
2057
- "view": "jbF1yq_view",
2058
- "wfDrawerToggle": "jbF1yq_wfDrawerToggle",
2059
- "inbox": "jbF1yq_inbox",
2060
- "outlineLi": "jbF1yq_outlineLi",
2061
- "outlineTableWrap": "jbF1yq_outlineTableWrap",
2062
- "adaptImpact": "jbF1yq_adaptImpact",
2063
- "bookCard": "jbF1yq_bookCard",
2064
- "readerGroupTitle": "jbF1yq_readerGroupTitle",
2065
- "planBeatLine": "jbF1yq_planBeatLine",
2066
- "why": "jbF1yq_why",
2067
- "confirmPhraseRow": "jbF1yq_confirmPhraseRow",
2068
- "homeHeroCta": "jbF1yq_homeHeroCta",
2069
- "wfOpsBtn": "jbF1yq_wfOpsBtn",
2070
- "progress": "jbF1yq_progress",
2071
- "adaptOutlinePre": "jbF1yq_adaptOutlinePre",
2072
- "shelfStatCard": "jbF1yq_shelfStatCard",
2073
- "readerGroupArrow": "jbF1yq_readerGroupArrow",
2074
- "t2RailMeta": "jbF1yq_t2RailMeta",
2075
- "cabinetAll": "jbF1yq_cabinetAll",
2076
- "wfStFail": "jbF1yq_wfStFail",
2077
- "chWorkPickBar": "jbF1yq_chWorkPickBar",
2078
- "progressBarFill": "jbF1yq_progressBarFill",
2079
- "drawerScrim": "jbF1yq_drawerScrim",
2080
- "shelfSearch": "jbF1yq_shelfSearch",
2081
- "outlineDocWrap": "jbF1yq_outlineDocWrap",
2082
- "topNavLabel": "jbF1yq_topNavLabel"
2083
- };
2084
- //#endregion
2085
- //#region src/client/panel/status-badge.ts
2086
- /**
2087
- * 章节状态徽章的**唯一映射表**。
2088
- *
2089
- * ## 为什么必须共享
2090
- *
2091
- * 之前 `statusBadge` 在两处各写一份,且**映射不一致**:
2092
- *
2093
- * | 状态 | NovelPanel(工作台) | ReaderView(阅读器) |
2094
- * |---|---|---|
2095
- * | rejected | `badgeRejected` 红 | `badgePending` 灰 |
2096
- * | error | `badgeError` 红 | `badgePending` 灰 |
2097
- *
2098
- * 也就是说:作者在阅读器里看自己被驳回的稿子,徽章是**灰色**的,看着像"还没写";
2099
- * 切回工作台同一章却是**红色**。同一部书、同一个状态、两种颜色——
2100
- * 这类不一致最难排查,因为它不会报错,只会让作者怀疑自己记错了。
2101
- *
2102
- * ## 为什么把「语义」和「样式类名」分开
2103
- *
2104
- * {@link statusTone} 是**纯数据**(可直接单测断言),CSS module 类名只在运行时
2105
- * 解析。若把 `css.badgeRejected` 写进那张表,测试就得拉起整个 CSS module 加载链,
2106
- * 于是「验证映射一致」这件最该被守住的事反而没法离线测。
2107
- */
2108
- /** 各状态对应的色调。文案走 i18n(`tt`),故不在此表内。 */
2109
- const TONE_BY_STATUS = {
2110
- pending: "pending",
2111
- generating: "active",
2112
- written: "written",
2113
- reviewing: "active",
2114
- approved: "done",
2115
- rejected: "rejected",
2116
- error: "error"
2117
- };
2118
- /** 色调 → CSS module 类名(两处界面共用同一份,不再各写一遍)。 */
2119
- const BADGE_CLASS = {
2120
- pending: panel_module_css_default.badgePending,
2121
- active: panel_module_css_default.badgeGenerating,
2122
- written: panel_module_css_default.badgeWritten,
2123
- done: panel_module_css_default.badgeDone,
2124
- rejected: panel_module_css_default.badgeRejected,
2125
- error: panel_module_css_default.badgeError
2126
- };
2127
- /**
2128
- * 取某章状态的色调。
2129
- *
2130
- * 未知状态一律按 `error` 处理:显式失败优于静默伪装成"正常/待写"。
2131
- * 状态集合由 protocol 定义并可能扩展,所以这里不能写死穷尽分支。
2132
- */
2133
- function statusTone(status) {
2134
- return TONE_BY_STATUS[status] ?? "error";
2135
- }
2136
- /** 取某章状态的徽章类名。 */
2137
- function statusBadgeClass(status) {
2138
- return BADGE_CLASS[statusTone(status)];
2139
- }
2140
- //#endregion
2141
- //#region src/client/panel/storage-parse.ts
2142
- /**
2143
- * localStorage 值的解析 / 校验(纯函数,零依赖,可离线单测)。
2144
- *
2145
- * ## 为什么单独成文件
2146
- *
2147
- * `usePersistentState.ts` 需要 React,而本插件的测试环境是 node
2148
- * (vitest.config.ts `environment: 'node'`,无 jsdom),import React 会直接失败。
2149
- * 但这个模块真正容易出错的地方**不在 hook 本身**(`useState` + `useCallback`
2150
- * 是标准写法),而在**校验逻辑**:一旦校验写漏,脏数据会被写进 localStorage,
2151
- * 之后每次启动都读到它,且没有恢复路径——作者只能手动清缓存。
2152
- *
2153
- * 所以把校验做成零依赖的纯函数,让「最容易错的部分」可以完整验证。
2154
- */
2155
- /**
2156
- * 受枚举约束的字符串。
2157
- *
2158
- * @param raw - localStorage 里的原始字符串。
2159
- * @param allowed - 合法值集合。
2160
- * @returns 合法则返回该值;否则 undefined(调用方应回落默认值)。
2161
- */
2162
- function parseEnum(raw, allowed) {
2163
- return allowed.includes(raw) ? raw : void 0;
1317
+ //#region src/client/panel/storage-parse.ts
1318
+ /**
1319
+ * localStorage 值的解析 / 校验(纯函数,零依赖,可离线单测)。
1320
+ *
1321
+ * ## 为什么单独成文件
1322
+ *
1323
+ * `usePersistentState.ts` 需要 React,而本插件的测试环境是 node
1324
+ * (vitest.config.ts `environment: 'node'`,无 jsdom),import React 会直接失败。
1325
+ * 但这个模块真正容易出错的地方**不在 hook 本身**(`useState` + `useCallback`
1326
+ * 是标准写法),而在**校验逻辑**:一旦校验写漏,脏数据会被写进 localStorage,
1327
+ * 之后每次启动都读到它,且没有恢复路径——作者只能手动清缓存。
1328
+ *
1329
+ * 所以把校验做成零依赖的纯函数,让「最容易错的部分」可以完整验证。
1330
+ */
1331
+ /**
1332
+ * 受枚举约束的字符串。
1333
+ *
1334
+ * @param raw - localStorage 里的原始字符串。
1335
+ * @param allowed - 合法值集合。
1336
+ * @returns 合法则返回该值;否则 undefined(调用方应回落默认值)。
1337
+ */
1338
+ function parseEnum(raw, allowed) {
1339
+ return allowed.includes(raw) ? raw : void 0;
2164
1340
  }
2165
1341
  /**
2166
1342
  * 受上下界约束的整数。
@@ -2313,7 +1489,6 @@ window.__ModuleLoader__.load({
2313
1489
  "plan.pending": "待生成",
2314
1490
  "plan.generating": "生成中",
2315
1491
  "plan.written": "待审稿",
2316
- "plan.reviewing": "审稿中",
2317
1492
  "plan.approved": "已通过",
2318
1493
  "plan.rejected": "待修订",
2319
1494
  "plan.error": "失败",
@@ -2512,7 +1687,7 @@ window.__ModuleLoader__.load({
2512
1687
  * See the LICENSE file in the root directory of this source tree.
2513
1688
  */
2514
1689
  //#endregion
2515
- //#region src/client/panel/ReasoningSection.tsx
1690
+ //#region \0dsh-css:src/client/panel/panel.module.css.mjs
2516
1691
  var import_lucide_react = (/* @__PURE__ */ __commonJSMin(((exports) => {
2517
1692
  var react$1 = require("react");
2518
1693
  const hasA11yProp = (props) => {
@@ -37656,6 +36831,687 @@ window.__ModuleLoader__.load({
37656
36831
  exports.Wand2 = WandSparkles;
37657
36832
  exports.X = X;
37658
36833
  })))();
36834
+ const css = ":root{--nf-font:-apple-system, BlinkMacSystemFont, \"SF Pro Text\", \"PingFang SC\", \"Hiragino Sans GB\", \"Microsoft YaHei\", \"Segoe UI\", Roboto, \"Helvetica Neue\", sans-serif;--nf-font-mono:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--nf-font-display:\"Noto Serif SC\", \"Source Han Serif SC\", \"Songti SC\", SimSun, \"Times New Roman\", serif;--nf-measure:720px;--nf-space-section:48px;--nf-fs-10:10px;--nf-fs-12:12px;--nf-fs-14:14px;--nf-fs-16:16px;--nf-fs-18:18px;--nf-fs-20:20px;--nf-fs-22:22px;--nf-fs-24:24px;--nf-fs-34:34px;--nf-fs-42:42px;--nf-fs-display:24px;--nf-fs-title:16px;--nf-r:12px;--nf-r-sm:8px;--nf-r-lg:16px;--nf-space:16px;--nf-space-lg:24px;--nf-fs-body:13px;--nf-fs-meta:12px;--nf-fs-caption:11px;--nf-fs-notice:12px;--nf-fs-notice-strong:13px;--nf-lh-body:1.65;--nf-lh-title:1.3;--nf-icon-s:14px;--nf-icon-m:16px;--nf-icon-l:18px;--nf-icon-xl:22px;--nf-space-2:2px;--nf-space-4:4px;--nf-space-6:6px;--nf-space-8:8px;--nf-space-10:10px;--nf-space-12:12px;--nf-space-14:14px;--nf-space-16:16px;--nf-space-18:18px;--nf-space-20:20px;--nf-space-24:24px;--nf-space-28:28px;--nf-space-30:30px;--nf-space-36:36px;--nf-space-40:40px;--nf-space-48:48px;--nf-space-32:32px;--nf-radius-2:2px;--nf-radius-4:4px;--nf-radius-6:6px;--nf-radius-8:8px;--nf-radius-10:10px;--nf-radius-12:12px;--nf-radius-14:14px;--nf-radius-16:16px;--nf-radius-20:20px;--nf-radius-22:22px;--nf-radius-999:999px;--nf-ctrl-s:28px;--nf-ctrl-m:32px;--nf-ctrl-l:38px;--nf-container-pad:20px 22px;--nf-container-gap:var(--nf-space-14,14px);--nf-card-pad:20px 22px;--nf-nav-pad:16px 12px 14px;--nf-focus-w:2px;--nf-focus-offset:2px;--nf-focus-radius:var(--nf-radius-6,6px);--nf-z-panel:60;--nf-z-float:80;--nf-z-modal:100;--nf-z-chip:2147480000;--nf-dur-fast:.12s;--nf-dur-base:.15s;--nf-dur-slow:.28s;--nf-ease-out:cubic-bezier(.32, .72, 0, 1)}.jbF1yq_entry{align-items:center;gap:var(--nf-space-8,8px);width:100%;padding:var(--nf-space-8,8px) var(--nf-space-12,12px);color:var(--dsw-alias-label-primary,#1f1f23);cursor:pointer;text-align:left;border-radius:var(--nf-radius-6,6px);transition:background var(--nf-dur-base,.15s) ease;background:0 0;border:none;font-size:14px;display:flex}body[data-ds-dark-theme] .jbF1yq_entry{color:var(--dsw-alias-label-primary,#ececf1)}.jbF1yq_entry:hover{background:var(--dsw-alias-interactive-bg-hover,#7f7f7f1f)}.jbF1yq_entry[data-active]{background:var(--dsw-alias-interactive-bg-active,#7f7f7f33)}.jbF1yq_entryIcon{flex-shrink:0;justify-content:center;align-items:center;width:20px;height:20px;display:inline-flex}.jbF1yq_entryLabel{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}[data-pane=conversation],[class*=centerCol]{position:relative}.jbF1yq_view{z-index:var(--nf-z-panel,60);color-scheme:light;font-family:var(--nf-font);--nf-bg:#f6f3ec;--nf-bg-raise:#fcfaf6;--nf-bg-inset:#efe9dc;--nf-bg-deep:#e9e2d4;--nf-line:#26221b24;--nf-line-2:#26221b0f;--nf-border:#26221b24;--nf-border-2:#26221b47;--nf-border-strong:#26221b4d;--nf-text:#26221b;--nf-text-1:#453e33;--nf-text-2:#6f665a;--nf-text-2-alpha:#6f665ab3;--nf-text-3:#726858;--nf-muted:var(--nf-text-3);--nf-muted-line:var(--nf-border);--nf-accent:#a63e2a;--nf-accent-hover:#8c3321;--nf-accent-soft:#a63e2a1f;--nf-accent-fg:#fdf3ee;--nf-seal:#a63e2a;--nf-seal-soft:#a63e2a1f;--nf-ai-soft:#c07c2221;--nf-human-soft:#2f6fa31f;--nf-ok:#5f9656;--nf-bad:#b94a41;--nf-hover:#26221b0d;--nf-success:#4f8750;--nf-error:#e5484d;--nf-danger:var(--nf-error);--nf-success-ink:#1b7a3a;--nf-success-ink-soft:#1b7a3a1a;--nf-error-ink:#b3271f;--nf-error-ink-soft:#b3271f1a;--nf-warn-ink:#8a5a00;--nf-warn-ink-soft:#8a5a001a;--nf-info-ink:#3c5b8a;--nf-info-ink-soft:#3c5b8a1a;--nf-toast-ok:var(--nf-success);--nf-warn:#aa741d;--nf-info:#4a6fa5;--nf-ai:#c07c22;--nf-human:#2f6fa3;--nf-idle:#cfc6b5;--nf-paper-grid:#26221b0d;--nf-shadow:0 1px 3px #1f1e1c0d, 0 12px 32px #1f1e1c12;--nf-shadow-lg:0 4px 12px #1f1e1c0f, 0 20px 48px #1f1e1c1c;--nf-card-shadow:0 2px 6px #1f1e1c0d, 0 14px 38px #1f1e1c1a;--nf-card-shadow-hover:0 4px 10px #1f1e1c12, 0 22px 52px #1f1e1c26;--nf-glass-face:var(--nf-bg-raise);--nf-glass-core:none;--nf-glass-sheen:transparent;--nf-glass-border:#a0917d47;--nf-glass-inset:#fff6;--nf-glass-noise:none;--nf-card-radius:16px;--nf-card-blur:0px;--nf-card-saturate:100%;--nf-card-brightness:1;--nf-card-sheen:transparent;--nf-card-border:1px solid #a0917d4d;--nf-ctrl-radius:12px;--nf-ctrl-bg:var(--nf-bg-raise);--nf-ctrl-border:1px solid #d6cbbad9;--nf-ctrl-sheen:#fffcf473;--nf-ctrl-caret:var(--nf-accent);--nf-glass-bg-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cfilter id='p'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='matrix' values='0 0 0 0 0.72 0 0 0 0 0.66 0 0 0 0 0.56 0 0 0 0.06 0'/%3E%3C/filter%3E%3Crect width='240' height='240' filter='url(%23p)'/%3E%3C/svg%3E\");background:var(--nf-bg);color:var(--nf-text);display:none;position:absolute;inset:0;overflow:auto;container:jbF1yq_nfpanel/inline-size}.jbF1yq_panel[data-nf-mode=dark],body[data-ds-dark-theme] .jbF1yq_panel:not([data-nf-mode]),.jbF1yq_view:has(>.jbF1yq_panel[data-nf-mode=dark]),body[data-ds-dark-theme] .jbF1yq_view:not(:has(>.jbF1yq_panel[data-nf-mode=light])){color-scheme:dark;--nf-bg:#17140f;--nf-bg-raise:#201c16;--nf-bg-inset:#2a241c;--nf-bg-deep:#100e0a;--nf-line:#f2e9dc1f;--nf-line-2:#f2e9dc0d;--nf-border:#f2e9dc1f;--nf-border-2:#f2e9dc2e;--nf-border-strong:#f2e9dc3d;--nf-text:#eee7da;--nf-text-1:#d3cab6;--nf-text-2:#b3a78f;--nf-text-2-alpha:#b3a78fb3;--nf-text-3:#9d927b;--nf-muted:var(--nf-text-3);--nf-muted-line:var(--nf-border);--nf-accent:#c0492d;--nf-accent-hover:#d95a3a;--nf-accent-soft:#c14a2e24;--nf-accent-fg:#fdf3ee;--nf-seal:#c0492d;--nf-seal-soft:#c14a2e24;--nf-ai-soft:#d98a2b1f;--nf-human-soft:#4aa3d91f;--nf-ok:#79b372;--nf-warn:#aa741d;--nf-bad:#d95753;--nf-hover:#f2e9dc0f;--nf-success:#83b87d;--nf-error:#d95753;--nf-danger:var(--nf-error);--nf-success-ink:#86c47f;--nf-success-ink-soft:#86c47f21;--nf-error-ink:#e8837e;--nf-error-ink-soft:#e8837e21;--nf-warn-ink:#edb44a;--nf-warn-ink-soft:#edb44a21;--nf-info-ink:#8aabd8;--nf-info-ink-soft:#8aabd821;--nf-toast-ok:var(--nf-success);--nf-info:#6b8fc7;--nf-ai:#d98a2b;--nf-human:#4aa3d9;--nf-idle:#5c5344;--nf-paper-grid:#f2e9dc0d;--nf-shadow:0 1px 2px #00000073, 0 10px 30px #00000073;--nf-shadow-lg:0 4px 12px #00000073, 0 20px 48px #0000008c;--nf-card-shadow:0 2px 6px #0000006b, 0 14px 38px #0000007a;--nf-card-shadow-hover:0 4px 10px #00000070, 0 22px 52px #00000094;--nf-glass-face:var(--nf-bg-raise);--nf-glass-core:none;--nf-glass-sheen:transparent;--nf-glass-border:#f2e9dc24;--nf-glass-inset:#ffffff0f;--nf-glass-noise:none;--nf-card-radius:16px;--nf-card-blur:0px;--nf-card-saturate:100%;--nf-card-brightness:1;--nf-card-border:1px solid #f2e9dc1f;--nf-card-sheen:transparent;--nf-glass-bg-image:none;--nf-ctrl-radius:12px;--nf-ctrl-bg:var(--nf-bg-raise);--nf-ctrl-border:1px solid #f2e9dc29;--nf-ctrl-sheen:#ffffff2e;--nf-ctrl-caret:var(--nf-accent)}html[data-dsh-novelforge-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) .jbF1yq_view{display:block}.jbF1yq_panel{min-width:0;height:100%;font-size:var(--nf-fs-14,14px);flex-direction:column;line-height:1.6;display:flex;position:relative;overflow:hidden}.jbF1yq_panelTop{flex-direction:column;flex:none;gap:12px;padding:16px 22px 0;display:flex}.jbF1yq_panelHead,.jbF1yq_topNav{border:1px solid var(--nf-line,var(--nf-border));border-radius:var(--nf-r-lg,16px);flex-wrap:wrap;align-items:center;padding:13px 16px;display:flex}.jbF1yq_panelHead{background:color-mix(in srgb, var(--nf-bg-deep,var(--nf-bg)) 92%, transparent);backdrop-filter:blur(12px);box-shadow:var(--nf-shadow,none);gap:12px}.jbF1yq_topNav{background:var(--nf-bg-raise);gap:16px}.jbF1yq_brand{cursor:pointer;user-select:none;align-items:center;gap:10px;min-width:0;display:flex}.jbF1yq_brandLogo{background:var(--nf-bg-inset,var(--nf-bg));border:1px solid var(--nf-line,var(--nf-border));width:32px;height:32px;font-family:var(--nf-font-display,Georgia, \"Songti SC\", SimSun, serif);font-weight:700;font-size:var(--nf-fs-16,16px);color:var(--nf-accent);border-radius:9px;flex:none;place-items:center;display:grid}.jbF1yq_brandText{flex-direction:column;min-width:0;display:flex}.jbF1yq_brandName{font-family:var(--nf-font-display,Georgia, \"Songti SC\", SimSun, serif);letter-spacing:0;color:var(--nf-text);white-space:nowrap;font-size:17px;font-weight:400;line-height:1.3}.jbF1yq_brandSub{font-size:var(--nf-fs-caption,11px);color:var(--nf-text-3,var(--nf-text-2,var(--nf-text)));white-space:nowrap;text-overflow:ellipsis;max-width:340px;overflow:hidden}.jbF1yq_headSpacer{flex:1}.jbF1yq_headChip{width:26px;height:26px;font-size:var(--nf-fs-12,12px);color:var(--nf-text-2,var(--nf-text));border:1px solid var(--nf-line,var(--nf-border));border-radius:var(--nf-r,12px);cursor:pointer;background:0 0;flex:none;place-items:center;display:grid}.jbF1yq_headChip:hover{background:var(--nf-bg-inset,var(--nf-bg-raise));color:var(--nf-text)}.jbF1yq_topNavLabel{font-size:var(--nf-fs-caption,11px);letter-spacing:.14em;text-transform:uppercase;color:var(--nf-text-3,var(--nf-text-2,var(--nf-text)));white-space:nowrap;margin:0 8px 0 2px}.jbF1yq_topNavBtn{font-size:var(--nf-fs-meta,12px);color:var(--nf-text-2);white-space:nowrap;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:8px;align-items:center;gap:6px;padding:5px 10px;transition:background .12s,color .12s,border-color .12s;display:inline-flex}.jbF1yq_topNavBtn:hover{background:var(--nf-hover);color:var(--nf-text)}.jbF1yq_topNavBtn.jbF1yq_active,.jbF1yq_topNavActive{background:var(--nf-ai-soft);border-color:color-mix(in srgb, var(--nf-ai) 40%, transparent);color:var(--nf-ai)}.jbF1yq_topNavNi{font-size:var(--nf-fs-12,12px);opacity:.85}.jbF1yq_topNavBadge{font-family:var(--nf-mono,monospace);font-size:var(--nf-fs-10,10px);background:var(--nf-bg-inset,var(--nf-bg-raise));border:1px solid var(--nf-border-2,var(--nf-border));color:var(--nf-text-2,var(--nf-text));border-radius:99px;padding:0 5px}.jbF1yq_topNavActive .jbF1yq_topNavBadge,.jbF1yq_topNavBtn.jbF1yq_active .jbF1yq_topNavBadge{background:color-mix(in srgb, var(--nf-ai) 14%, transparent);color:var(--nf-ai);border-color:#0000}.jbF1yq_topNavSpacer{flex:1}.jbF1yq_drawerScrim{z-index:60;background:#0f0a0673;animation:.18s jbF1yq_nfFadeIn;position:absolute;inset:0}@keyframes jbF1yq_nfFadeIn{0%{opacity:0}to{opacity:1}}.jbF1yq_contentDrawer{background:var(--nf-bg-raise,var(--nf-bg));border-left:1px solid var(--nf-border-strong,var(--nf-border));z-index:62;flex-direction:column;width:min(760px,92vw);animation:.22s jbF1yq_nfDrawerIn;display:flex;position:absolute;top:0;bottom:0;right:0;box-shadow:-18px 0 40px #0f0a062e}.jbF1yq_contentDrawer.jbF1yq_drawerMax{width:100%}.jbF1yq_contentDrawerBody{flex:1;min-height:0;padding:14px 16px;overflow-y:auto}@keyframes jbF1yq_nfDrawerIn{0%{opacity:0;transform:translate(28px)}to{opacity:1;transform:none}}.jbF1yq_wbIndexRow{align-items:center;gap:var(--nf-space-8);width:100%;padding:var(--nf-space-8) var(--nf-space-10);margin-bottom:var(--nf-space-4);border:1px solid var(--nf-border);border-radius:var(--nf-radius-6);background:var(--nf-bg);cursor:pointer;text-align:left;font-size:var(--nf-fs-14);color:var(--nf-text);display:flex}.jbF1yq_wbIndexRow:hover{border-color:var(--nf-border-strong,var(--nf-border));background:var(--nf-bg-inset,var(--nf-bg-raise))}.jbF1yq_wbIndexTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.jbF1yq_wbIndexVol{font-size:var(--nf-fs-12);letter-spacing:.06em;color:var(--nf-text-3,var(--nf-text-2));margin:var(--nf-space-10) 0 var(--nf-space-4);font-weight:600}.jbF1yq_drawerHead{background:var(--nf-bg-deep,var(--nf-bg));border-bottom:1px solid var(--nf-border-strong,var(--nf-border));flex:none;align-items:center;gap:8px;padding:10px 12px 10px 18px;display:flex}.jbF1yq_drawerTitle{font-size:var(--nf-fs-14,14px);color:var(--nf-text);white-space:nowrap;text-overflow:ellipsis;font-weight:600;overflow:hidden}.jbF1yq_drawerSpacer{flex:1}.jbF1yq_drawerHeadBtn{width:26px;height:26px;font-size:var(--nf-fs-12,12px);color:var(--nf-text-2,var(--nf-text));border:1px solid var(--nf-border-2,var(--nf-border));border-radius:var(--nf-radius-sm,8px);cursor:pointer;background:0 0;flex:none;place-items:center;display:grid}.jbF1yq_drawerHeadBtn:hover{background:var(--nf-bg-inset,var(--nf-bg-raise));color:var(--nf-text)}.jbF1yq_brandEn{font-size:var(--nf-fs-caption,11px);letter-spacing:.08em;color:var(--nf-text-3,var(--nf-text-2,var(--nf-text)));white-space:nowrap;font-weight:400}.jbF1yq_panel:before{content:\"\";z-index:0;pointer-events:none;background:linear-gradient(rgba(0, 0, 0, calc(var(--nf-glass-bg-dim,0) / 100)), rgba(0, 0, 0, calc(var(--nf-glass-bg-dim,0) / 100))), var(--nf-glass-bg-image,none) center / cover no-repeat;position:absolute;inset:0}.jbF1yq_panelTitle{font-size:var(--nf-fs-16,16px);letter-spacing:.2px;align-items:center;gap:var(--nf-space-8,8px);margin:0;font-weight:700;display:flex}.jbF1yq_panelTitle:before{content:\"\";border-radius:var(--nf-radius-2,2px);background:linear-gradient(180deg, var(--nf-accent), var(--nf-info));width:4px;height:16px}.jbF1yq_iconButton{cursor:pointer;font-size:var(--nf-fs-16,16px);color:var(--nf-text-2);padding:var(--nf-space-4,4px) var(--nf-space-10,9px);border-radius:var(--nf-radius-10,9px);transition:background var(--nf-dur-base,.15s) ease, color var(--nf-dur-base,.15s) ease, transform var(--nf-dur-fast,.12s) ease;background:0 0;border:none}.jbF1yq_iconButton:hover{background:var(--nf-hover);color:var(--nf-text);transform:translateY(-1px)}.jbF1yq_tab{padding:var(--nf-space-8,7px) var(--nf-space-14,13px);cursor:pointer;border-radius:var(--nf-radius-8,8px) var(--nf-radius-8,8px) 0 0;font-size:var(--nf-fs-14,13.5px);color:var(--nf-text-2);transition:color var(--nf-dur-base,.15s) ease, background var(--nf-dur-base,.15s) ease;background:0 0;border:none;font-weight:500;position:relative}.jbF1yq_tab:hover{color:var(--nf-text);background:var(--nf-hover)}.jbF1yq_tab[data-active]{color:var(--nf-accent);font-weight:600}.jbF1yq_tab[data-active]:after{content:\"\";border-radius:var(--nf-radius-2,2px) var(--nf-radius-2,2px) 0 0;background:var(--nf-accent);height:2.5px;position:absolute;bottom:-1px;left:10px;right:10px}.jbF1yq_panelContent{min-width:0;padding:var(--nf-container-pad,20px 22px);gap:var(--nf-container-gap,14px);z-index:1;flex-direction:column;flex:1;display:flex;position:relative;overflow:auto}.jbF1yq_panelContent>*{flex-shrink:0}.jbF1yq_pageHeader{justify-content:space-between;align-items:center;gap:var(--nf-space-14,14px);border-bottom:1px solid var(--nf-line-2,var(--nf-border));background:var(--nf-bg-deep);border-radius:var(--nf-r,12px) var(--nf-r,12px) 0 0;flex-wrap:wrap;margin:0;padding:14px 18px;display:flex}.jbF1yq_pageHeaderMain{min-width:0}.jbF1yq_pageHeaderEyebrow{font-size:var(--nf-fs-caption,11px);letter-spacing:.14em;text-transform:uppercase;color:var(--nf-text-3);align-items:center;gap:var(--nf-space-6);display:flex}.jbF1yq_pageHeaderTitle{font-family:var(--nf-font-display,Georgia, \"Songti SC\", SimSun, serif);font-size:var(--nf-fs-display,22px);line-height:var(--nf-lh-title,1.3);color:var(--nf-text);align-items:center;gap:var(--nf-space-8);font-weight:700;display:flex}.jbF1yq_pageHeaderSub{font-size:var(--nf-fs-meta,12px);color:var(--nf-text-2);max-width:var(--nf-measure,720px);line-height:var(--nf-lh-body,1.65);margin-top:var(--nf-space-2)}.jbF1yq_pageHeaderActions{gap:var(--nf-space-8);flex-wrap:wrap;align-items:center;display:flex}.jbF1yq_numSerif{font-family:var(--nf-font-display,Georgia, \"Songti SC\", SimSun, serif);font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\";font-weight:700}.jbF1yq_tabular{font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\"}.jbF1yq_docsSurface{background-image:repeating-linear-gradient(0deg, transparent 0, transparent 27px, var(--nf-paper-grid) 27px, var(--nf-paper-grid) 28px);background-blend-mode:normal;background-color:#0000;background-size:100% 28px}.jbF1yq_aiTag{font-family:var(--nf-font-mono,ui-monospace, monospace);letter-spacing:.08em;color:var(--nf-ai,var(--nf-accent));border:1px solid color-mix(in srgb, var(--nf-ai,var(--nf-accent)) 38%, transparent);vertical-align:middle;background:color-mix(in srgb, var(--nf-ai,var(--nf-accent)) 9%, transparent);border-radius:4px;align-items:center;margin-left:6px;padding:0 4px;font-size:9px;line-height:1.4;display:inline-flex}.jbF1yq_panelContent[data-tab=overview]>*,.jbF1yq_panelContent[data-tab=blurb]>*,.jbF1yq_panelContent[data-tab=settings]>*,.jbF1yq_panelContent[data-tab=director]>*,.jbF1yq_panelContent[data-tab=breakdown]>*,.jbF1yq_panelContent[data-tab=plotlines]>*{width:100%;max-width:calc(var(--nf-measure,720px) + 48px);margin-inline:auto}.jbF1yq_panelBody{z-index:1;flex:1;min-height:0;display:flex;position:relative}.jbF1yq_panelNav{align-self:stretch;gap:var(--nf-space-6,6px);width:216px;padding:var(--nf-nav-pad,16px 12px 14px);border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-16,18px);background:var(--nf-glass-face);box-shadow:var(--nf-shadow), inset 0 1px 0 var(--nf-glass-sheen);transition:width var(--nf-dur-base,.15s) ease;flex-direction:column;flex:none;margin:10px 0 10px 12px;display:flex;overflow-y:auto}.jbF1yq_navSpacer{flex:1;min-height:8px}.jbF1yq_navAbout{align-items:center;gap:var(--nf-space-8,8px);flex-direction:row;flex:none;display:flex}.jbF1yq_navAboutRow{justify-content:space-between;align-items:center;gap:var(--nf-space-4,4px);cursor:pointer;font-size:var(--nf-fs-12,11px);color:var(--nf-text-3);padding:var(--nf-space-4,4px) var(--nf-space-6,6px);border-radius:var(--nf-radius-8,8px);transition:color var(--nf-dur-base,.15s) ease, background var(--nf-dur-base,.15s) ease;text-align:left;white-space:nowrap;background:0 0;border:none;display:flex}.jbF1yq_navAboutRow:hover{color:var(--nf-text);background:var(--nf-hover)}.jbF1yq_navAboutUpdate{background:var(--nf-accent-soft);color:var(--nf-accent);cursor:pointer;font-size:var(--nf-fs-12,10.5px);padding:var(--nf-space-4,4px) var(--nf-space-6,6px);border-radius:var(--nf-radius-8,8px);text-align:left;white-space:nowrap;border:none;font-weight:600}.jbF1yq_navAboutUpdate:hover{color:var(--nf-accent-hover)}@keyframes jbF1yq_navBadgePulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.8)}}.jbF1yq_navTitle{cursor:pointer;align-items:center;gap:var(--nf-space-10,10px);padding:var(--nf-space-2,2px) var(--nf-space-6,6px) var(--nf-space-12,12px);border-bottom:1px solid var(--nf-border);flex:none;min-width:0;margin-bottom:6px;display:flex}.jbF1yq_navTitleLogo{border-radius:var(--nf-radius-10,10px);background:linear-gradient(145deg, var(--nf-accent), var(--nf-accent-hover));width:34px;height:34px;color:var(--nf-accent-fg);font-weight:800;font-size:var(--nf-fs-14,15px);box-shadow:0 6px 16px var(--nf-accent-soft);flex:none;justify-content:center;align-items:center;display:flex}.jbF1yq_navTitleName{font-weight:700;font-size:var(--nf-fs-14,15px);letter-spacing:.2px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.jbF1yq_navTitleBook{font-size:var(--nf-fs-12,11px);color:var(--nf-text-3);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.jbF1yq_panelNavCollapsed .jbF1yq_navTitle{padding:var(--nf-space-2,2px) 0 var(--nf-space-10,10px);justify-content:center}.jbF1yq_panelNavCollapsed .jbF1yq_navTitleLogo{width:32px;height:var(--nf-ctrl-m,32px)}.jbF1yq_card{border:1px solid var(--nf-border);gap:var(--nf-space-10,10px);background:var(--nf-bg-deep);min-width:0;transition:border-color var(--nf-dur-base,.15s) ease;border-radius:12px;flex-direction:column;padding:13px 14px;display:flex;position:relative}.jbF1yq_card:hover{border-color:var(--nf-border-strong)}.jbF1yq_cardTitle{font-size:var(--nf-fs-14,14px);color:var(--nf-text);align-items:center;gap:var(--nf-space-8,8px);margin:0;font-weight:650;display:flex}.jbF1yq_cardTitleLg{font-size:var(--nf-fs-16,16px);font-weight:650}.jbF1yq_button{align-items:center;gap:var(--nf-space-6,6px);border:1px solid var(--nf-line,var(--nf-border));background:var(--nf-bg-inset);color:var(--nf-text-2);border-radius:var(--nf-r-sm,8px);cursor:pointer;font-size:var(--nf-fs-meta,12px);transition:background var(--nf-dur-base,.15s) ease, border-color var(--nf-dur-base,.15s) ease, color var(--nf-dur-base,.15s) ease;white-space:nowrap;padding:5px 11px;font-weight:500;display:inline-flex}.jbF1yq_button:hover:not([disabled]){background:var(--nf-hover);border-color:var(--nf-border-strong);transform:translateY(-1px)}.jbF1yq_button:active:not([disabled]){transform:translateY(0)scale(.97)}.jbF1yq_button[disabled]{opacity:.45;cursor:not-allowed}.jbF1yq_buttonPrimary{border-color:var(--nf-accent);background:var(--nf-accent);color:var(--nf-accent-fg);border-radius:var(--nf-r-sm,8px);font-weight:700}.jbF1yq_buttonPrimary:hover:not([disabled]){background:var(--nf-accent-hover);border-color:var(--nf-accent-hover)}.jbF1yq_buttonDanger{border-color:var(--nf-error);color:var(--nf-error)}.jbF1yq_buttonDanger:hover:not([disabled]){background:#ff3b301a}.jbF1yq_buttonSmall{font-size:var(--nf-fs-caption,11px);border-radius:var(--nf-r-sm,8px);padding:3px 9px}.jbF1yq_field{gap:var(--nf-space-6,5px);flex-direction:column;display:flex}.jbF1yq_fieldLabel{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);font-weight:500}.jbF1yq_input{border:1px solid var(--nf-line,var(--nf-border));background:var(--nf-bg-inset);color:var(--nf-text);color-scheme:light;border-radius:var(--nf-r-sm,8px);font-size:var(--nf-fs-meta,12px);box-sizing:border-box;width:100%;transition:border-color var(--nf-dur-base,.15s) ease;padding:7px 10px}body[data-ds-dark-theme] .jbF1yq_input,.jbF1yq_panel[data-nf-mode=dark] .jbF1yq_input{color-scheme:dark}.jbF1yq_panel[data-nf-mode=light] .jbF1yq_input{color-scheme:light}select.jbF1yq_input{cursor:pointer;-webkit-appearance:none;appearance:none;background-image:linear-gradient(45deg, transparent 50%, var(--nf-ctrl-caret,var(--nf-text-3)) 50%), linear-gradient(135deg, var(--nf-ctrl-caret,var(--nf-text-3)) 50%, transparent 50%);background-position:calc(100% - 18px),calc(100% - 12px);background-repeat:no-repeat;background-size:6px 6px,6px 6px;padding-right:30px}.jbF1yq_input option{color:var(--nf-text);background:var(--nf-bg-raise);font-size:var(--nf-fs-14,15px)}.jbF1yq_input:focus,.jbF1yq_textarea:focus{border-color:var(--nf-accent);box-shadow:0 0 0 3px var(--nf-accent-soft);outline:none}.jbF1yq_input::placeholder,.jbF1yq_textarea::placeholder{color:var(--nf-text-3)}.jbF1yq_textarea{border:var(--nf-ctrl-border,1px solid var(--nf-border-strong));background:var(--nf-ctrl-bg,var(--nf-bg-inset));color:var(--nf-text);border-radius:var(--nf-ctrl-radius,12px);padding:var(--nf-space-10,9px) var(--nf-space-12,11px);font-size:var(--nf-fs-14,13px);box-sizing:border-box;resize:vertical;width:100%;min-height:200px;transition:border-color var(--nf-dur-base,.15s) ease, box-shadow var(--nf-dur-base,.15s) ease;font-family:inherit;line-height:1.7}.jbF1yq_row{align-items:center;gap:var(--nf-space-8,8px);flex-wrap:wrap;display:flex}.jbF1yq_chapterList{gap:var(--nf-space-8,8px);flex-direction:column;display:flex}.jbF1yq_chapter{align-items:center;gap:var(--nf-space-10,10px);padding:var(--nf-space-10,9px) var(--nf-space-12,12px);border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);background:var(--nf-bg);transition:border-color var(--nf-dur-base,.15s) ease, box-shadow var(--nf-dur-base,.15s) ease, transform var(--nf-dur-fast,.12s) ease;display:flex}.jbF1yq_chapter:hover{border-color:var(--nf-border-strong);box-shadow:var(--nf-shadow)}.jbF1yq_chapterFocus{animation:.9s ease-in-out 3 jbF1yq_chapterFocusPulse;border-color:var(--nf-accent)!important;box-shadow:0 0 0 3px color-mix(in srgb, var(--nf-accent) 35%, transparent)!important}@keyframes jbF1yq_chapterFocusPulse{0%,to{background:var(--nf-bg)}50%{background:color-mix(in srgb, var(--nf-accent) 18%, var(--nf-bg))}}.jbF1yq_chapterMain{flex:1;min-width:0}.jbF1yq_chapterTitle{font-weight:600;font-size:var(--nf-fs-14,13px);align-items:center;gap:var(--nf-space-8,8px);color:var(--nf-text);display:flex}.jbF1yq_chapter:hover .jbF1yq_chapterActions{opacity:1}.jbF1yq_badge{font-size:var(--nf-fs-12,11px);padding:var(--nf-space-2,2px) var(--nf-space-10,9px);border-radius:var(--nf-radius-999,999px);white-space:nowrap;letter-spacing:.2px;border:1px solid;font-weight:600}.jbF1yq_badgePending{color:var(--nf-info);border-color:var(--nf-info);background:color-mix(in srgb, var(--nf-info) 10%, transparent)}.jbF1yq_badgeGenerating{color:var(--nf-accent);border-color:var(--nf-accent);background:color-mix(in srgb, var(--nf-accent) 12%, transparent);animation:1.2s ease-in-out infinite jbF1yq_pulse}.jbF1yq_badgeWritten{color:var(--nf-warn);border-color:var(--nf-warn);background:color-mix(in srgb, var(--nf-warn) 10%, transparent)}.jbF1yq_badgeRejected{color:var(--nf-error);border-color:var(--nf-error);background:color-mix(in srgb, var(--nf-error) 10%, transparent)}.jbF1yq_badgeDone{color:var(--nf-success);border-color:var(--nf-success);background:color-mix(in srgb, var(--nf-success) 10%, transparent)}.jbF1yq_badgeError{color:var(--nf-error);border-color:var(--nf-error);background:color-mix(in srgb, var(--nf-error) 10%, transparent)}.jbF1yq_reviewBox{border:1px solid var(--nf-border-strong);border-radius:var(--nf-radius-12);padding:var(--nf-space-14) var(--nf-space-16);background:var(--nf-bg-inset);gap:var(--nf-space-10);font-size:var(--nf-fs-14);flex-direction:column;line-height:1.7;display:flex}.jbF1yq_chapterPreview{background-image:repeating-linear-gradient(0deg, transparent 0, transparent 27px, var(--nf-paper-grid) 27px, var(--nf-paper-grid) 28px);background-color:var(--nf-bg-raise);border:1px solid var(--nf-border);border-radius:var(--nf-radius-12);padding:var(--nf-space-20) var(--nf-space-24);font-family:var(--nf-font-display);color:var(--nf-text);white-space:pre-wrap;word-wrap:break-word;max-height:600px;margin:0;font-size:15px;line-height:2;overflow:auto}.jbF1yq_chatScroll{gap:var(--nf-space-10,10px);min-height:0;padding:var(--nf-space-14,14px);border:1px solid var(--nf-border);border-radius:var(--nf-radius-12,12px);background:var(--nf-bg-inset);flex-direction:column;flex:1;display:flex;overflow-y:auto}.jbF1yq_chatBubbleUser{background:linear-gradient(180deg, var(--nf-accent), var(--nf-accent-hover));max-width:72%;color:var(--nf-accent-fg);border-radius:var(--nf-radius-14,14px) var(--nf-radius-14,14px) var(--nf-radius-4,4px) var(--nf-radius-14,14px);padding:var(--nf-space-10,9px) var(--nf-space-14,14px);font-size:var(--nf-fs-14,13px);box-shadow:0 2px 6px color-mix(in srgb, var(--nf-accent) 32%, transparent);align-self:flex-end}.jbF1yq_chatBubbleAssistant{background:var(--nf-bg-raise);max-width:92%;color:var(--nf-text);border:1px solid var(--nf-border);border-radius:var(--nf-radius-14,14px) var(--nf-radius-14,14px) var(--nf-radius-14,14px) var(--nf-radius-4,4px);padding:var(--nf-space-10,9px) var(--nf-space-14,14px);font-size:var(--nf-fs-14,13px);box-shadow:var(--nf-shadow);align-self:flex-start}.jbF1yq_chatRole{font-size:var(--nf-fs-12,11px);color:var(--nf-text-3);margin-bottom:3px;font-weight:600}.jbF1yq_toolLive{padding:var(--nf-space-8,8px) var(--nf-space-10,10px);border-radius:var(--nf-radius-8,8px);background:var(--nf-bg-inset);border:1px dashed var(--nf-border-strong);font-size:var(--nf-fs-12,12px);white-space:pre-wrap;word-break:break-all;color:var(--nf-text-2);max-height:180px;margin-top:6px;line-height:1.7;overflow-y:auto}.jbF1yq_assistantStatus{padding:var(--nf-space-6,6px) var(--nf-space-12,12px);border-radius:var(--nf-radius-999,999px);font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);background:var(--nf-bg-inset);border:1px solid var(--nf-border);align-items:center;gap:var(--nf-space-6,6px);flex:none;margin-top:6px;display:flex}.jbF1yq_assistantStatusBusy{color:var(--nf-accent);border-color:var(--nf-accent);background:var(--nf-accent-soft);font-weight:600}.jbF1yq_toolSteps{gap:var(--nf-space-4,4px);flex-direction:column;margin-top:6px;display:flex}.jbF1yq_toolStep{align-items:center;gap:var(--nf-space-8,8px);padding:var(--nf-space-6,5px) var(--nf-space-10,10px);border-radius:var(--nf-radius-8,8px);font-size:var(--nf-fs-12,12px);background:var(--nf-bg-inset);border:1px solid var(--nf-border);display:flex}.jbF1yq_toolStepActive{border-color:var(--nf-accent);background:var(--nf-accent-soft)}.jbF1yq_toolStepError{border-color:var(--nf-error);background:color-mix(in srgb, var(--nf-error) 8%, transparent)}.jbF1yq_toolStepIcon{font-size:var(--nf-fs-14,13px);flex:none}.jbF1yq_toolStepName{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-weight:600;overflow:hidden}.jbF1yq_toolStepStatus{color:var(--nf-text-2);font-size:var(--nf-fs-12,11px);flex:none}.jbF1yq_toolStepActive .jbF1yq_toolStepStatus{color:var(--nf-accent)}.jbF1yq_toolStepError .jbF1yq_toolStepStatus{color:var(--nf-error)}.jbF1yq_toolStepDetail{width:100%;color:var(--nf-error);font-size:var(--nf-fs-12,11px);word-break:break-all}.jbF1yq_progress{border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);padding:var(--nf-space-10,10px) var(--nf-space-14,14px);font-size:var(--nf-fs-12,12px);white-space:pre-wrap;word-break:break-all;min-height:60px;max-height:220px;color:var(--nf-text-2);font-family:var(--nf-font-mono);background:var(--nf-bg-inset);line-height:1.8;overflow:auto}.jbF1yq_progressLine{color:var(--nf-text-2);opacity:.9}.jbF1yq_progressLineLive{color:var(--nf-accent);align-items:center;gap:var(--nf-space-8,8px);font-weight:600;display:flex}.jbF1yq_progressBar{border-radius:var(--nf-radius-999,999px);background:var(--nf-border);flex:none;width:110px;height:6px;display:inline-block;overflow:hidden}.jbF1yq_progressBarFill{border-radius:var(--nf-radius-4,3px);background:var(--nf-accent);height:100%;transition:width var(--nf-dur-slow,.28s) ease;display:block}.jbF1yq_busyRow{justify-content:space-between;align-items:center;gap:var(--nf-space-12,12px);flex-wrap:wrap;display:flex}.jbF1yq_liveText{font-size:var(--nf-fs-12,12px);font-variant-numeric:tabular-nums;color:var(--nf-text-2)}.jbF1yq_bigProgressBar{border-radius:var(--nf-radius-999,999px);background:var(--nf-border);height:8px;margin-top:10px;overflow:hidden}.jbF1yq_bigProgressBarFill{border-radius:var(--nf-radius-999,999px);background:linear-gradient(90deg, var(--nf-accent), var(--nf-accent-2,var(--nf-accent)));height:100%;transition:width var(--nf-dur-slow,.28s) ease;display:block}.jbF1yq_diffLegend{align-items:center;gap:var(--nf-space-14,14px);font-size:var(--nf-fs-12,12px);flex-wrap:wrap;margin:6px 0 8px;display:flex}.jbF1yq_legendOld{color:var(--nf-error);font-weight:700}.jbF1yq_legendNew{color:var(--nf-success);font-weight:700}.jbF1yq_onlyChanges{align-items:center;gap:var(--nf-space-4,4px);color:var(--nf-text-2);cursor:pointer;margin-left:auto;display:inline-flex}.jbF1yq_diffList{border:1px solid var(--nf-border);border-radius:var(--nf-radius-8,8px);background:var(--nf-bg-inset);min-height:0;padding:var(--nf-space-10,10px) var(--nf-space-12,12px);gap:var(--nf-space-8,8px);font-size:var(--nf-fs-14,13px);flex-direction:column;flex:1;line-height:1.7;display:flex;overflow-y:auto}.jbF1yq_diffSame{border:1px dashed var(--nf-border);border-radius:var(--nf-radius-6,6px);padding:var(--nf-space-6,6px) var(--nf-space-10,10px);color:var(--nf-text-2);opacity:.85}.jbF1yq_diffSame summary{cursor:pointer;font-size:var(--nf-fs-12,12px);user-select:none}.jbF1yq_diffSameBody{white-space:pre-wrap;margin-top:6px}.jbF1yq_diffChange{border:1px solid var(--nf-border);border-radius:var(--nf-radius-8,8px);grid-template-columns:1fr 1fr;display:grid;overflow:hidden}.jbF1yq_diffColumn{gap:var(--nf-space-6,6px);min-width:0;padding:var(--nf-space-8,8px) var(--nf-space-10,10px);flex-direction:column;display:flex}.jbF1yq_diffColumn:first-child{border-right:1px solid var(--nf-border)}.jbF1yq_diffTagOld,.jbF1yq_diffTagNew{font-size:var(--nf-fs-12,11px);border-radius:var(--nf-radius-4,4px);padding:var(--nf-space-2,1px) var(--nf-space-8,7px);letter-spacing:.5px;flex:none;align-self:flex-start;font-weight:700}.jbF1yq_diffTagOld{color:var(--nf-error);background:color-mix(in srgb, var(--nf-error) 16%, transparent);border:1px solid color-mix(in srgb, var(--nf-error) 45%, transparent)}.jbF1yq_diffTagNew{color:var(--nf-success);background:color-mix(in srgb, var(--nf-success) 16%, transparent);border:1px solid color-mix(in srgb, var(--nf-success) 45%, transparent)}.jbF1yq_diffOld{color:var(--nf-error);white-space:pre-wrap;text-decoration:line-through;text-decoration-color:color-mix(in srgb, var(--nf-error) 55%, transparent)}.jbF1yq_diffNew{color:var(--nf-success);white-space:pre-wrap;font-weight:500}.jbF1yq_diffDel{gap:var(--nf-space-4,4px);padding:var(--nf-space-6,6px) var(--nf-space-10,10px);border-radius:var(--nf-radius-6,6px);border:1px solid color-mix(in srgb, var(--nf-error) 35%, transparent);background:color-mix(in srgb, var(--nf-error) 7%, transparent);flex-direction:column;display:flex}.jbF1yq_diffAdd{gap:var(--nf-space-4,4px);padding:var(--nf-space-6,6px) var(--nf-space-10,10px);border-radius:var(--nf-radius-6,6px);border:1px solid color-mix(in srgb, var(--nf-success) 35%, transparent);background:color-mix(in srgb, var(--nf-success) 7%, transparent);flex-direction:column;display:flex}.jbF1yq_diffText{white-space:pre-wrap}.jbF1yq_diffDel .jbF1yq_diffText{color:var(--nf-error);text-decoration:line-through;text-decoration-color:color-mix(in srgb, var(--nf-error) 50%, transparent)}.jbF1yq_diffAdd .jbF1yq_diffText{color:var(--nf-success)}.jbF1yq_wsPage{gap:var(--nf-space-10,10px);flex-direction:column;flex:1;min-height:0;display:flex}.jbF1yq_wsPageHeader{align-items:center;gap:var(--nf-space-8,8px);flex-wrap:wrap;flex:none;display:flex}.jbF1yq_wsAppliedBanner{align-items:center;gap:var(--nf-space-8,8px);padding:var(--nf-space-8,8px) var(--nf-space-12,12px);border:1px solid var(--nf-success);border-radius:var(--nf-radius-10,10px);background:color-mix(in srgb, var(--nf-success) 8%, transparent);font-size:var(--nf-fs-12,12px);flex-wrap:wrap;flex:none;font-weight:600;display:flex}.jbF1yq_wsColumns{gap:var(--nf-space-14,14px);flex:1;grid-template-columns:minmax(0,1fr) minmax(0,1fr);min-height:0;display:grid}.jbF1yq_wsColumn{gap:var(--nf-space-8,8px);flex-direction:column;min-width:0;min-height:0;display:flex}.jbF1yq_wsEditor{resize:vertical;min-height:0;font-family:var(--nf-font);font-size:var(--nf-fs-14,13px);white-space:pre-wrap;flex:1;line-height:1.75}.jbF1yq_wsSelected{border:1px solid var(--nf-accent);border-radius:var(--nf-radius-6,6px);padding:var(--nf-space-6,6px) var(--nf-space-10,10px);background:color-mix(in srgb, var(--nf-accent) 8%, transparent);max-height:120px;overflow:auto}.jbF1yq_wsSelectedText{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);white-space:pre-wrap;margin-top:4px}.jbF1yq_wsPreview{border:1px solid var(--nf-border);border-radius:var(--nf-radius-8,8px);padding:var(--nf-space-8,8px) var(--nf-space-10,10px);gap:var(--nf-space-8,8px);background:var(--nf-bg-inset);flex-direction:column;display:flex}.jbF1yq_wsPreviewText{min-height:0;font-size:var(--nf-fs-14,13px);white-space:pre-wrap;color:var(--nf-text);flex:1;margin:0;line-height:1.7;overflow:auto}.jbF1yq_assetGroups{gap:var(--nf-space-14,14px);flex-direction:column;display:flex}.jbF1yq_assetGroup{gap:var(--nf-space-10,10px);flex-direction:column;display:flex}.jbF1yq_assetGroupHeader{color:var(--nf-accent);border-bottom:1px solid var(--nf-glass-border);align-items:center;gap:8px;padding-bottom:2px;font-size:14px;font-weight:600;display:flex}.jbF1yq_outlineDocWrap{gap:var(--nf-space-12,12px);flex-direction:column;display:flex}.jbF1yq_outlineToc{padding:var(--nf-space-8) var(--nf-space-10);border:1px solid var(--nf-border);background:var(--nf-bg-inset);border-radius:10px;flex-wrap:wrap;gap:4px 8px;display:flex}.jbF1yq_outlineTocItem{font:inherit;cursor:pointer;color:var(--nf-text-2);background:0 0;border:none;border-radius:6px;padding:2px 6px;font-size:12.5px}.jbF1yq_outlineTocItem:hover{background:var(--nf-hover);color:var(--nf-text)}.jbF1yq_outlineTocL1{color:var(--nf-text);font-weight:700}.jbF1yq_outlineTocL2{padding-left:8px}.jbF1yq_outlineTocL3{padding-left:16px;font-size:12px}.jbF1yq_outlineDoc{background-image:repeating-linear-gradient(0deg, transparent 0, transparent 27px, var(--nf-paper-grid) 27px, var(--nf-paper-grid) 28px);background-color:var(--nf-bg-raise);border:1px solid var(--nf-border);border-radius:var(--nf-radius-12);padding:var(--nf-space-20) var(--nf-space-24);font-family:var(--nf-font-display);color:var(--nf-text);user-select:text;max-height:640px;font-size:15px;line-height:28px;overflow:auto}.jbF1yq_outlineH{font-family:var(--nf-font-display);margin:var(--nf-space-16,16px) 0 var(--nf-space-6,6px);scroll-margin-top:var(--nf-space-14,14px);line-height:1.3}.jbF1yq_outlineH1{font-size:22px;font-weight:700}.jbF1yq_outlineH2{font-size:18px;font-weight:700}.jbF1yq_outlineH3{font-size:15px;font-weight:600}.jbF1yq_outlineH4{color:var(--nf-text-2);font-size:14px;font-weight:600}.jbF1yq_outlineP{margin:0 0 var(--nf-space-10,10px);white-space:pre-wrap;text-indent:2em}.jbF1yq_outlineHr{border:none;border-top:1px solid var(--nf-border-strong);margin:var(--nf-space-14,14px) 0}.jbF1yq_outlineList{margin:0 0 var(--nf-space-10,10px);padding-left:1.6em;list-style-position:outside}.jbF1yq_outlineList .jbF1yq_outlineList{margin:var(--nf-space-4,4px) 0 0}.jbF1yq_outlineLi{margin:0 0 var(--nf-space-4,4px);text-indent:0}.jbF1yq_outlineLi::marker{color:var(--nf-text-2)}.jbF1yq_outlineQuote{margin:0 0 var(--nf-space-10,10px);padding:var(--nf-space-6,6px) var(--nf-space-12,12px);border-left:3px solid var(--nf-border-strong);background:var(--nf-bg-inset);color:var(--nf-text-2);border-radius:0 var(--nf-radius-8,8px) var(--nf-radius-8,8px) 0}.jbF1yq_outlineCodeBlock{margin:0 0 var(--nf-space-10,10px);padding:var(--nf-space-10,10px) var(--nf-space-12,12px);background:var(--nf-bg-inset);border:1px solid var(--nf-border);border-radius:var(--nf-radius-8,8px);font-family:var(--nf-font-mono,ui-monospace, monospace);font-size:12.5px;line-height:1.6;position:relative;overflow-x:auto}.jbF1yq_outlineCodeLang{letter-spacing:.06em;text-transform:uppercase;color:var(--nf-text-2);font-size:10px;position:absolute;top:4px;right:8px}.jbF1yq_outlineCode{font-family:var(--nf-font-mono,ui-monospace, monospace);background:var(--nf-bg-inset);border:1px solid var(--nf-border);border-radius:4px;padding:1px 5px;font-size:.92em}.jbF1yq_outlineTableWrap{margin:0 0 var(--nf-space-10,10px);overflow-x:auto}.jbF1yq_outlineTable{border-collapse:collapse;width:100%;font-size:13px}.jbF1yq_outlineTable th,.jbF1yq_outlineTable td{border:1px solid var(--nf-border);padding:var(--nf-space-6,6px) var(--nf-space-8,8px);text-align:left;vertical-align:top}.jbF1yq_outlineTable th{background:var(--nf-bg-inset);color:var(--nf-text);font-weight:600}.jbF1yq_outlineVol{border:1px solid var(--nf-border);border-radius:var(--nf-radius-12);overflow:hidden}.jbF1yq_outlineVolSummary{cursor:pointer;padding:var(--nf-space-10,10px) var(--nf-space-16,16px);font-weight:700;font-family:var(--nf-font-display);background:var(--nf-bg-inset);color:var(--nf-text)}.jbF1yq_outlineEdit{min-height:240px}.jbF1yq_card>summary{cursor:pointer;list-style:none}.jbF1yq_card>summary::-webkit-details-marker{display:none}.jbF1yq_card>summary:before{content:\"▸ \";color:var(--nf-text-3)}.jbF1yq_card[open]>summary:before{content:\"▾ \"}.jbF1yq_assistantFloat{z-index:80;border:1px solid var(--nf-border);border-radius:var(--nf-radius-16,16px);background:var(--nf-bg-raise);box-shadow:var(--nf-shadow-lg);flex-direction:column;min-width:320px;min-height:220px;display:flex;position:absolute;overflow:hidden}.jbF1yq_assistantFloatHeader{justify-content:space-between;align-items:center;gap:var(--nf-space-8,8px);padding:var(--nf-space-8,8px) var(--nf-space-10,10px) var(--nf-space-8,8px) var(--nf-space-14,14px);cursor:grab;user-select:none;font-size:var(--nf-fs-14,13px);border-bottom:1px solid var(--nf-border);background:var(--nf-bg-inset);flex:none;font-weight:600;display:flex}.jbF1yq_assistantFloatHeader:active{cursor:grabbing}.jbF1yq_assistantFloatBody{min-height:0;padding:var(--nf-space-10,10px);flex:1;display:flex;overflow:hidden}.jbF1yq_assistantFloatBody>*{flex:1;min-width:0}.jbF1yq_assistantResize{cursor:nwse-resize;background:linear-gradient(135deg, transparent 0 55%, var(--nf-border-strong) 55% 62%, transparent 62%) no-repeat 4px 4px / 12px 12px;width:20px;height:20px;position:absolute;bottom:0;right:0}.jbF1yq_coverPreview{border:1px solid var(--nf-border);border-radius:var(--nf-radius-12,12px);background:var(--nf-bg-inset);flex:none;justify-content:center;align-items:center;width:150px;height:200px;display:flex;overflow:hidden}.jbF1yq_coverPreview img{object-fit:contain;width:100%;height:100%;display:block}.jbF1yq_coverPlaceholder{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3)}.jbF1yq_subPage{background:var(--nf-bg-raise);border:1px solid var(--nf-border);border-radius:16px;flex-direction:column;flex:1;min-height:0;margin:16px 22px 22px;display:flex;overflow:hidden}.jbF1yq_subPageHead{border-bottom:1px solid var(--nf-border);background:var(--nf-bg-deep,var(--nf-bg));flex-wrap:wrap;flex:none;align-items:center;gap:14px;padding:14px 18px;display:flex}.jbF1yq_subPageBack{font-size:var(--nf-fs-meta,12px);color:var(--nf-text-3);border:1px solid var(--nf-border);white-space:nowrap;cursor:pointer;border-radius:7px;padding:3px 10px}.jbF1yq_subPageTitle{font-family:var(--nf-font-display,Georgia, \"Songti SC\", SimSun, serif);font-size:var(--nf-fs-display,22px);font-weight:700;line-height:1.2}.jbF1yq_subPageMeta{font-size:var(--nf-fs-meta,12px);color:var(--nf-text-2);line-height:1.4}.jbF1yq_subPageActions{flex-wrap:wrap;align-items:center;gap:8px;margin-left:auto;display:flex}.jbF1yq_subPageBody{flex-direction:column;flex:1;gap:14px;min-height:0;padding:16px 18px;display:flex;overflow:auto}.jbF1yq_shelfToolbar{background:var(--nf-bg-inset);border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);flex-wrap:wrap;align-items:center;gap:10px;padding:10px 12px;display:flex}.jbF1yq_shelfToolbar .jbF1yq_input{max-width:260px}.jbF1yq_shelfToolbarExtra{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:6px;margin-left:auto;display:flex}.jbF1yq_shelfStatGrid{grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;display:grid}.jbF1yq_shelfStatCard[data-active=\"\"]{background:color-mix(in srgb, var(--nf-ai) 14%, transparent);border-color:color-mix(in srgb, var(--nf-ai) 42%, transparent)}.jbF1yq_shelfStatCard[data-active=\"\"] span,.jbF1yq_shelfStatCard[data-active=\"\"] b{color:var(--nf-ai)}.jbF1yq_shelfStatCard{background:var(--nf-bg-inset);border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);cursor:pointer;justify-content:space-between;align-items:center;gap:10px;min-width:0;padding:8px 10px;display:flex}.jbF1yq_shelfStatCard span{font-size:var(--nf-fs-caption,11px);color:var(--nf-text-2);white-space:nowrap}.jbF1yq_shelfStatCard b{font-family:var(--nf-font-display,Georgia, \"Songti SC\", SimSun, serif);color:var(--nf-text);font-variant-numeric:tabular-nums;font-size:18px;font-weight:700}.jbF1yq_shelfStatCard[data-active=\"\"]{border-color:var(--nf-ai);background:color-mix(in srgb, var(--nf-ai) 12%, transparent)}@container jbF1yq_nfpanel (width<=760px){.jbF1yq_shelfStatGrid{grid-template-columns:repeat(2,minmax(0,1fr))}}.jbF1yq_authorHome{z-index:1;flex-direction:column;flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.jbF1yq_authorTopNav{align-items:center;gap:var(--nf-space-16,16px);border:1px solid var(--nf-line,var(--nf-border));border-radius:var(--nf-r-lg,16px);background:var(--nf-bg-raise);flex-wrap:wrap;flex:none;margin:16px 22px 0;padding:13px 16px;display:flex}.jbF1yq_authorTopNav .jbF1yq_navTitle{align-items:center;gap:var(--nf-space-10,10px);border-bottom:none;flex:none;min-width:0;margin:0;padding:0;display:flex}.jbF1yq_authorTopNav .jbF1yq_navTitleLogo{background:var(--nf-bg-inset);border:1px solid var(--nf-line,var(--nf-border));width:32px;height:32px;font-family:var(--nf-font-display,Georgia, \"Songti SC\", SimSun, serif);font-weight:700;font-size:var(--nf-fs-16,16px);color:var(--nf-accent);border-radius:9px}.jbF1yq_authorTopNav .jbF1yq_navTitleName{font-family:var(--nf-font-display,Georgia, \"Songti SC\", SimSun, serif);letter-spacing:0;font-size:17px;font-weight:400}.jbF1yq_authorTopNav .jbF1yq_navTitleBook{font-size:var(--nf-fs-caption,11px);color:var(--nf-text-3)}.jbF1yq_authorTopNav .jbF1yq_navGroup{align-items:center;gap:var(--nf-space-4,4px);display:flex}.jbF1yq_authorTopNav .jbF1yq_navGroupLabel{padding:0 var(--nf-space-6,6px);font-size:var(--nf-fs-12,12px);letter-spacing:.12em}.jbF1yq_authorTopNav .jbF1yq_navTab{width:auto;padding:var(--nf-space-8,8px) var(--nf-space-10,10px)}.jbF1yq_authorTopNav .jbF1yq_navSpacer{flex:1}.jbF1yq_authorTopNav .jbF1yq_navAbout{border-left:1px solid var(--nf-border);padding-left:var(--nf-space-12,12px);margin:0}.jbF1yq_authorTopNav .jbF1yq_navAboutRow{align-items:center;gap:var(--nf-space-6,6px);display:inline-flex}.jbF1yq_authorContent{flex-direction:column;flex:1;min-width:0;display:flex;overflow:hidden}.jbF1yq_authorNav{background:var(--nf-bg-raise);border:1px solid var(--nf-line,var(--nf-border));border-radius:var(--nf-r,12px);flex-wrap:wrap;flex:none;align-items:center;gap:4px;margin:14px 22px 0;padding:8px 10px;display:flex}.jbF1yq_authorTopTabs{flex-wrap:wrap;flex:none;align-items:center;gap:6px;display:flex}.jbF1yq_authorNavBtn{font-size:var(--nf-fs-meta,12px);color:var(--nf-text-2);white-space:nowrap;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:8px;padding:5px 10px;transition:background .12s,color .12s,border-color .12s}.jbF1yq_authorNavBtn:hover{background:var(--nf-hover);color:var(--nf-text)}.jbF1yq_authorNavBtn[data-active]{background:var(--nf-ai-soft);border-color:color-mix(in srgb, var(--nf-ai) 40%, transparent);color:var(--nf-ai)}.jbF1yq_authorPageBodyFlow{gap:var(--nf-space-20,20px);flex-direction:column;flex:1;min-height:0;padding:0;display:flex;overflow:visible}.jbF1yq_authorPageHeader{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:14px;display:flex}.jbF1yq_noticeError{background:color-mix(in srgb, var(--nf-error) 14%, transparent);color:var(--nf-error);border:1px solid var(--nf-error);border-radius:10px;padding:10px 14px}.jbF1yq_noticeSuccess{background:color-mix(in srgb, var(--nf-accent) 14%, transparent);color:var(--nf-accent);border:1px solid var(--nf-accent);border-radius:10px;flex-wrap:wrap;align-items:center;gap:10px;padding:10px 14px;display:flex}.jbF1yq_rowEnd{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.jbF1yq_assetFilterChip{border:1px solid var(--nf-glass-border);color:var(--nf-text);cursor:pointer;background:0 0;border-radius:999px;padding:4px 10px}.jbF1yq_assetFilterChipActive{background:var(--nf-accent);color:var(--nf-accent-fg);border-color:#0000}.jbF1yq_assetEditor{gap:var(--nf-space-12,12px);padding:var(--nf-space-16,16px);border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-14,14px);background:var(--nf-glass-face);flex-direction:column;display:flex}.jbF1yq_assetEditorRow{gap:var(--nf-space-12,12px);flex-wrap:wrap;display:flex}.jbF1yq_assetLabel{color:var(--nf-muted,var(--nf-text-2));flex-direction:column;flex:1;gap:4px;min-width:180px;font-size:12.5px;display:flex}.jbF1yq_assetTextarea{resize:vertical;min-height:160px;font-family:inherit}.jbF1yq_assetGrid{gap:var(--nf-space-14,14px);grid-template-columns:repeat(auto-fill,minmax(300px,1fr));display:grid}.jbF1yq_assetCard{border:1px solid var(--nf-glass-border);background:var(--nf-glass-face);box-shadow:var(--nf-shadow), inset 0 1px 0 var(--nf-glass-sheen);border-radius:14px;flex-direction:column;gap:8px;padding:14px;display:flex}.jbF1yq_assetCardTop{justify-content:space-between;align-items:center;gap:8px;display:flex}.jbF1yq_assetKind{font-size:12.5px;font-weight:600}.jbF1yq_assetCardName{font-weight:600}.jbF1yq_assetCardContent{white-space:pre-wrap;color:var(--nf-text);max-height:150px;font-size:13.5px;overflow:auto}.jbF1yq_assetCardFooter{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.jbF1yq_iconBtn{color:var(--nf-text);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:8px;justify-content:center;align-items:center;padding:4px;display:inline-flex}.jbF1yq_iconBtn:hover{background:#0000000f}.jbF1yq_adaptInputCard{border:1px solid var(--nf-glass-border);background:var(--nf-glass-face);border-radius:14px;flex-direction:column;gap:12px;padding:16px;display:flex}.jbF1yq_adaptTextarea{resize:vertical;min-height:220px}.jbF1yq_adaptResult{flex-direction:column;gap:14px;display:flex}.jbF1yq_adaptOutline{background:var(--nf-glass-face);border:1px solid var(--nf-glass-border);border-radius:12px;padding:10px 14px}.jbF1yq_adaptMatrix{grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px;display:grid}.jbF1yq_dimCard{border:1px solid var(--nf-glass-border);background:var(--nf-glass-face);border-radius:14px;flex-direction:column;gap:8px;padding:14px;display:flex}.jbF1yq_dimCardHead{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.jbF1yq_dimTitle{font-weight:600}.jbF1yq_dimCurrent{white-space:pre-wrap;font-size:13.5px}.jbF1yq_dimCardSelected{border-color:var(--nf-accent);box-shadow:0 0 0 1px var(--nf-accent)}.jbF1yq_dimEdit{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.jbF1yq_adaptOutlinePre{white-space:pre-wrap;max-height:260px;margin:0;font-family:inherit;font-size:13.5px;overflow:auto}.jbF1yq_adaptProposal{border:1px solid var(--nf-glass-border);background:var(--nf-glass-face);border-radius:14px;flex-direction:column;gap:8px;padding:14px;display:flex}.jbF1yq_adaptTable{border-collapse:collapse;width:100%;font-size:13.5px}.jbF1yq_adaptTable th,.jbF1yq_adaptTable td{border:1px solid var(--nf-glass-border);text-align:left;padding:6px 8px}.jbF1yq_adaptImpacts{flex-direction:column;gap:4px;display:flex}.jbF1yq_adaptImpact{font-size:13.5px}.jbF1yq_adaptTableScroll{overflow-x:auto}.jbF1yq_adaptCell{width:100%;min-width:90px}.jbF1yq_adaptRules{flex-direction:column;gap:10px;display:flex}.jbF1yq_adaptRule{border:1px solid var(--nf-glass-border);background:var(--nf-glass-face);border-radius:12px;flex-direction:column;gap:6px;padding:10px 12px;display:flex}.jbF1yq_adaptRuleRow{align-items:center;gap:8px;display:flex}.jbF1yq_progressTotalBar .jbF1yq_meta{color:var(--nf-text);justify-content:center;align-items:center;font-size:12px;font-weight:600;display:flex;position:absolute;inset:0}.jbF1yq_shelfHero .jbF1yq_panelTitle{font-size:var(--nf-fs-22,22px);letter-spacing:.3px}.jbF1yq_shelfSearch{max-width:260px}.jbF1yq_shelfEmpty{justify-content:center;align-items:center;gap:var(--nf-space-10,10px);padding:var(--nf-space-40,40px) var(--nf-space-20,20px);border:1px dashed var(--nf-border-strong);border-radius:var(--nf-radius-16,16px);background:var(--nf-bg-raise);text-align:center;flex-direction:column;flex:1;display:flex}.jbF1yq_shelfEmptyIcon{font-size:var(--nf-fs-42,42px)}.jbF1yq_shelfEmptyTitle{font-size:var(--nf-fs-16,16px);font-weight:700}.jbF1yq_shelfGrid{gap:var(--nf-container-gap,14px);grid-template-columns:repeat(auto-fill,minmax(190px,1fr));align-content:start;display:grid}.jbF1yq_panel{--nf-container-pad:20px 22px;--nf-container-gap:var(--nf-space-14,14px);--nf-card-pad:20px 22px;--nf-nav-pad:16px 12px 14px}.jbF1yq_panel[data-nf-density=compact]{--nf-container-pad:12px 14px;--nf-container-gap:var(--nf-space-8,8px);--nf-card-pad:12px 14px;--nf-nav-pad:8px 8px;--nf-ctrl-s:26px;--nf-ctrl-m:30px;--nf-ctrl-l:35px;--nf-fs-18:16px;--nf-fs-16:14px;--nf-fs-14:13px;--nf-fs-body:13px;--nf-fs-title:14px;--nf-fs-display:20px;--nf-lh-body:1.5;--nf-lh-title:1.3;--nf-card-radius:8px;--nf-ctrl-radius:6px}.jbF1yq_panel[data-nf-density=spacious]{--nf-container-pad:24px 28px;--nf-container-gap:var(--nf-space-18,18px);--nf-card-pad:22px 26px;--nf-nav-pad:18px 14px;--nf-ctrl-s:30px;--nf-ctrl-m:34px;--nf-ctrl-l:41px;--nf-fs-18:20px;--nf-fs-16:17px;--nf-fs-14:15px;--nf-fs-body:14px;--nf-fs-title:17px;--nf-fs-display:26px;--nf-lh-body:1.8;--nf-lh-title:1.45;--nf-card-radius:14px;--nf-ctrl-radius:10px}.jbF1yq_panel[data-nf-mode=light]{color-scheme:light;--nf-bg:#f6f3ec;--nf-bg-raise:#fcfaf6;--nf-bg-inset:#efe9dc;--nf-bg-deep:#e9e2d4;--nf-line:#26221b24;--nf-line-2:#26221b0f;--nf-border:#26221b24;--nf-border-2:#26221b47;--nf-border-strong:#26221b4d;--nf-text:#26221b;--nf-text-1:#453e33;--nf-text-2:#6f665a;--nf-text-2-alpha:#6f665ab8;--nf-text-3:#726858;--nf-muted:var(--nf-text-3);--nf-muted-line:var(--nf-border);--nf-accent:#a63e2a;--nf-accent-hover:#8c3321;--nf-accent-soft:#a63e2a24;--nf-accent-fg:#fdf3ee;--nf-hover:#26221b0d;--nf-success:#4f8750;--nf-error:#b94a41;--nf-danger:var(--nf-error);--nf-success-ink:#1b7a3a;--nf-success-ink-soft:#1b7a3a1a;--nf-error-ink:#b3271f;--nf-error-ink-soft:#b3271f1a;--nf-warn-ink:#8a5a00;--nf-warn-ink-soft:#8a5a001a;--nf-info-ink:#3c5b8a;--nf-info-ink-soft:#3c5b8a1a;--nf-toast-ok:var(--nf-success);--nf-warn:#c98a1f;--nf-info:#4a6fa5;--nf-ai:#c07c22;--nf-human:#2f6fa3;--nf-idle:#cfc6b5;--nf-shadow:0 1px 3px #0000000f, 0 12px 32px #00000014;--nf-shadow-lg:0 4px 12px #00000012, 0 20px 48px #0000001f;--nf-card-shadow:0 2px 6px #0000000f, 0 14px 38px #00000024;--nf-card-shadow-hover:0 4px 10px #00000014, 0 22px 52px #0003;--nf-glass-face:var(--nf-bg-raise);--nf-glass-core:none;--nf-glass-sheen:transparent;--nf-glass-border:#a0917d47;--nf-glass-inset:#fff6}.jbF1yq_panel[data-nf-mode=dark]{color-scheme:dark;--nf-bg:#17140f;--nf-bg-raise:#201c16;--nf-bg-inset:#2a241c;--nf-bg-deep:#100e0a;--nf-line:#f2e9dc1f;--nf-line-2:#f2e9dc0d;--nf-border:#f2e9dc1f;--nf-border-2:#f2e9dc2e;--nf-border-strong:#f2e9dc3d;--nf-text:#eee7da;--nf-text-1:#d3cab6;--nf-text-2:#c9beab;--nf-text-2-alpha:#c9beabb3;--nf-text-3:#a89d86;--nf-muted:var(--nf-text-3);--nf-muted-line:var(--nf-border);--nf-accent:#a63e2a;--nf-accent-hover:#b4472c;--nf-accent-soft:#a63e2a2e;--nf-accent-fg:#fdf3ee;--nf-hover:#f2e9dc0f;--nf-success:#83b87d;--nf-error:#d95753;--nf-danger:var(--nf-error);--nf-success-ink:#86c47f;--nf-success-ink-soft:#86c47f21;--nf-error-ink:#e8837e;--nf-error-ink-soft:#e8837e21;--nf-warn-ink:#edb44a;--nf-warn-ink-soft:#edb44a21;--nf-info-ink:#8aabd8;--nf-info-ink-soft:#8aabd821;--nf-toast-ok:var(--nf-success);--nf-warn:#e3ad49;--nf-info:#6b8fc7;--nf-ai:#d98a2b;--nf-human:#4aa3d9;--nf-idle:#5c5344;--nf-shadow:0 1px 2px #00000059, 0 10px 30px #0006;--nf-shadow-lg:0 4px 12px #0006, 0 20px 48px #0000008c;--nf-card-shadow:0 2px 6px #00000059, 0 14px 38px #00000073;--nf-card-shadow-hover:0 4px 10px #0006, 0 22px 52px #0000008c;--nf-glass-face:var(--nf-bg-raise);--nf-glass-core:none;--nf-glass-sheen:transparent;--nf-glass-border:#f2e9dc24;--nf-glass-inset:#ffffff0f}.jbF1yq_bookCard{border:1px solid var(--nf-border);background:var(--nf-bg-inset);cursor:pointer;min-width:0;transition:border-color var(--nf-dur-base,.15s) ease, transform var(--nf-dur-fast,.12s) ease, box-shadow var(--nf-dur-base,.15s) ease;border-radius:12px;flex-direction:column;gap:10px;padding:12px;display:flex}.jbF1yq_bookCard:hover{border-color:var(--nf-accent);box-shadow:var(--nf-shadow-lg);transform:translateY(-2px)}.jbF1yq_bookCardActive{border-color:var(--nf-accent);box-shadow:0 0 0 3px var(--nf-accent-soft)}.jbF1yq_bookCardCover{aspect-ratio:3/4;background:var(--nf-bg-inset);border:1px solid var(--nf-border);border-radius:10px;flex:none;justify-content:center;align-items:center;width:100%;display:flex;position:relative;overflow:hidden}.jbF1yq_bookCardCover img{object-fit:cover;width:100%;height:100%;transition:transform var(--nf-dur-slow,.28s) ease;display:block}.jbF1yq_bookCard:hover .jbF1yq_bookCardCover img{transform:scale(1.06)}.jbF1yq_bookCardCover:after{content:\"\";border-radius:inherit;pointer-events:none;opacity:0;transition:opacity var(--nf-dur-slow,.28s) ease;background:linear-gradient(#0000 55%,#00000047);position:absolute;inset:0}.jbF1yq_bookCard:hover .jbF1yq_bookCardCover:after{opacity:1}.jbF1yq_bookCardCoverFallback{justify-content:center;align-items:center;gap:var(--nf-space-6,6px);background:radial-gradient(400px 200px at 80% -20%, color-mix(in srgb, var(--nf-accent) 25%, transparent), transparent 70%), linear-gradient(155deg, var(--nf-bg-inset), color-mix(in srgb, var(--nf-accent) 10%, var(--nf-bg-inset)));flex-direction:column;width:100%;height:100%;display:flex}.jbF1yq_bookCardCoverTitle{font-size:var(--nf-fs-22,22px);color:var(--nf-accent);letter-spacing:2px;font-weight:800}.jbF1yq_bookCardBody{gap:var(--nf-space-6,5px);flex-direction:column;flex:1;min-width:0;display:flex}.jbF1yq_bookCardTitleRow{justify-content:space-between;align-items:center;gap:var(--nf-space-6,6px);display:flex}.jbF1yq_bookCardName{font-weight:700;font-size:var(--nf-fs-14,13.5px);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.jbF1yq_bookCardBlurb{-webkit-line-clamp:2;-webkit-box-orient:vertical;min-height:34px;display:-webkit-box;overflow:hidden}.jbF1yq_bookCardMetaRow{justify-content:space-between;align-items:center;gap:var(--nf-space-6,6px);flex-wrap:wrap;display:flex}.jbF1yq_bookCardProgressBar{border-radius:var(--nf-radius-999,999px);background:var(--nf-border);height:6px;overflow:hidden;box-shadow:inset 0 1px 2px #0000001f}.jbF1yq_bookCardProgressFill{border-radius:var(--nf-radius-999,999px);background:linear-gradient(90deg, var(--nf-info), var(--nf-accent));height:100%;transition:width var(--nf-dur-slow,.28s) ease;display:block}.jbF1yq_createBookInner{align-self:center;gap:var(--nf-space-12,12px);flex-direction:column;width:min(520px,100%);display:flex}.jbF1yq_ideaCard{gap:var(--nf-space-8,8px);border:1px dashed var(--nf-border-strong);border-radius:var(--nf-radius-14,14px);padding:var(--nf-space-10,10px) var(--nf-space-12,12px);background:color-mix(in srgb, var(--nf-accent) 3%, transparent);flex-direction:column;display:flex}.jbF1yq_ideaToggle{align-items:center;gap:var(--nf-space-6,6px);color:var(--nf-accent);font-size:var(--nf-fs-14,13px);cursor:pointer;text-align:left;background:0 0;border:none;padding:0;font-weight:700;display:flex}.jbF1yq_ideaCandidate{gap:var(--nf-space-6,6px);border:1px solid var(--nf-border);border-radius:var(--nf-radius-12,12px);padding:var(--nf-space-10,10px) var(--nf-space-12,12px);background:var(--nf-bg);flex-direction:column;display:flex}.jbF1yq_progressLineDone{color:var(--nf-success);font-weight:600}.jbF1yq_progressLineError{color:var(--nf-error);font-weight:600}.jbF1yq_meta{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);opacity:.9}.jbF1yq_genreDesc{-webkit-line-clamp:2;-webkit-box-orient:vertical;max-width:560px;display:-webkit-box;overflow:hidden}.jbF1yq_fileList{gap:var(--nf-space-4,3px);font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);opacity:.9;word-break:break-all;flex-direction:column;display:flex}.jbF1yq_panelContent::-webkit-scrollbar,.jbF1yq_chatScroll::-webkit-scrollbar,.jbF1yq_chapterPreview::-webkit-scrollbar,.jbF1yq_progress::-webkit-scrollbar,.jbF1yq_toolLive::-webkit-scrollbar{width:8px;height:8px}.jbF1yq_panelContent::-webkit-scrollbar-thumb,.jbF1yq_chatScroll::-webkit-scrollbar-thumb,.jbF1yq_chapterPreview::-webkit-scrollbar-thumb,.jbF1yq_progress::-webkit-scrollbar-thumb,.jbF1yq_toolLive::-webkit-scrollbar-thumb{background:var(--nf-border-strong);border-radius:var(--nf-radius-4,4px)}.jbF1yq_panelContent::-webkit-scrollbar-thumb:hover,.jbF1yq_chatScroll::-webkit-scrollbar-thumb:hover,.jbF1yq_chapterPreview::-webkit-scrollbar-thumb:hover,.jbF1yq_progress::-webkit-scrollbar-thumb:hover,.jbF1yq_toolLive::-webkit-scrollbar-thumb:hover{background:var(--nf-text-3)}@keyframes jbF1yq_pulse{0%,to{opacity:1}50%{opacity:.45}}@keyframes jbF1yq_fadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.jbF1yq_card{animation:jbF1yq_fadeIn var(--nf-dur-base,.15s) ease}.jbF1yq_bookshelf{align-items:center;gap:var(--nf-space-10,10px);padding:var(--nf-space-8,8px) var(--nf-space-14,14px);border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-16,16px);background:var(--nf-glass-face);box-shadow:var(--nf-shadow), inset 0 1px 0 var(--nf-glass-sheen);z-index:1;flex-wrap:wrap;flex-shrink:0;margin:10px 12px 0;display:flex;position:relative}.jbF1yq_dropzone{border:2px dashed var(--nf-border-strong);border-radius:var(--nf-radius-10,10px);padding:var(--nf-space-18,18px) var(--nf-space-14,14px);text-align:center;font-size:var(--nf-fs-14,13px);color:var(--nf-text-2);cursor:pointer;transition:border-color var(--nf-dur-base,.15s) ease, background var(--nf-dur-base,.15s) ease;align-items:center;gap:var(--nf-space-6,6px);flex-direction:column;display:flex}.jbF1yq_dropzone:hover,.jbF1yq_dropzoneActive{border-color:var(--nf-accent);background:var(--nf-accent-soft);color:var(--nf-accent)}.jbF1yq_dropzoneIcon{font-size:var(--nf-fs-22,22px);line-height:1}.jbF1yq_bookCardActions{align-items:center;gap:var(--nf-space-6,6px);padding-top:var(--nf-space-8,8px);margin-top:auto;display:flex}.jbF1yq_bookCardActions .jbF1yq_button{flex:1;justify-content:center}.jbF1yq_readerView{transition:background var(--nf-dur-base,.15s) ease, color var(--nf-dur-base,.15s) ease;flex-direction:column;display:flex;position:absolute;inset:0;overflow:hidden}.jbF1yq_readerHeader{align-items:center;gap:var(--nf-space-8,8px);padding:var(--nf-space-8,8px) var(--nf-space-12,12px);border-bottom:1px solid;flex-wrap:wrap;flex:none;display:flex}.jbF1yq_readerTitle{font-weight:700;font-size:var(--nf-fs-14,14px)}.jbF1yq_readerSeg{align-items:center;gap:var(--nf-space-2,2px);border-radius:var(--nf-radius-8,8px);display:flex;overflow:hidden}.jbF1yq_readerSegBtn{font-size:var(--nf-fs-12,12px);padding:var(--nf-space-4,3px) var(--nf-space-8,8px);border-radius:var(--nf-radius-6,6px);cursor:pointer;opacity:.75;background:0 0;border:none}.jbF1yq_readerSegBtn:hover,.jbF1yq_readerSegActive{opacity:1}.jbF1yq_readerBody{flex:1;align-items:stretch;min-height:0;display:flex}.jbF1yq_readerSidebar{width:220px;min-width:220px;padding:var(--nf-space-8,8px) var(--nf-space-6,6px) var(--nf-space-24,24px);scrollbar-width:thin;gap:var(--nf-space-10,10px);border-right:1px solid;flex-direction:column;flex:none;display:flex;overflow-y:auto}.jbF1yq_readerGroup{gap:var(--nf-space-2,1px);flex-direction:column;display:flex}.jbF1yq_readerGroupTitle{align-items:center;gap:var(--nf-space-6,6px);width:100%;font-size:var(--nf-fs-12,12px);padding:var(--nf-space-6,6px) var(--nf-space-8,8px) var(--nf-space-4,4px);opacity:.9;cursor:pointer;text-align:left;border-radius:var(--nf-radius-6,6px);background:0 0;border:none;font-weight:700;display:flex}.jbF1yq_readerGroupTitle:hover{opacity:1;background:#8080801f}.jbF1yq_readerGroupArrow{font-size:var(--nf-fs-12,12px);text-align:center;flex:none;width:12px}.jbF1yq_readerGroupCount{font-size:var(--nf-fs-12,11px);opacity:.6;padding-right:var(--nf-space-2,2px);flex:none;margin-left:auto;font-weight:400}.jbF1yq_readerItem{align-items:center;gap:var(--nf-space-6,6px);border-radius:var(--nf-radius-8,8px);font-size:var(--nf-fs-12,12px);text-align:left;padding:var(--nf-space-4,4px) var(--nf-space-8,8px);cursor:pointer;opacity:.8;transition:opacity var(--nf-dur-base,.15s) ease, background var(--nf-dur-base,.15s) ease;background:0 0;border:1px solid;min-width:0;display:flex}.jbF1yq_readerItem:hover{opacity:1}.jbF1yq_readerItemActive{opacity:1;font-weight:700}.jbF1yq_readerItemNo{text-align:right;opacity:.75;flex:none;min-width:26px;font-weight:700}.jbF1yq_readerItemTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.jbF1yq_readerItemBadge{font-size:var(--nf-fs-12,11px);flex:none}.jbF1yq_readerMain{min-height:0;padding:var(--nf-space-20,20px) var(--nf-space-16,16px) var(--nf-space-48,48px);scrollbar-width:thin;flex:1;justify-content:center;display:flex;overflow-y:auto}.jbF1yq_readerArticle{gap:var(--nf-space-12,12px);flex-direction:column;width:100%;display:flex}.jbF1yq_readerChapterTitle{font-size:var(--nf-fs-24,24px);letter-spacing:1px;margin:0;font-weight:800}.jbF1yq_readerChapterMeta{align-items:center;gap:var(--nf-space-8,8px);font-size:var(--nf-fs-12,12px);display:flex}.jbF1yq_readerText{text-align:justify;letter-spacing:.02em}.jbF1yq_readerPara{text-indent:2em;margin:0 0 .85em}.jbF1yq_readerFoot{justify-content:space-between;align-items:center;gap:var(--nf-space-8,8px);padding-top:var(--nf-space-12,12px);border-top:1px dashed;margin-top:12px;display:flex}.jbF1yq_readerLoading,.jbF1yq_readerError{padding:var(--nf-space-32,32px) 0;font-size:var(--nf-fs-14,13px);opacity:.7;align-self:center}.jbF1yq_readerError{color:var(--nf-error)}.jbF1yq_importModalOverlay{z-index:1000;backdrop-filter:blur(4px);padding:var(--nf-space-24,24px);background:#00000073;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.jbF1yq_importModal{gap:var(--nf-space-12,12px);border:1px solid var(--nf-border-strong);border-radius:var(--nf-radius-16,16px);width:min(520px,100%);max-height:85vh;padding:var(--nf-card-pad,20px 22px);background:var(--nf-bg-raise);box-shadow:var(--nf-shadow-lg);flex-direction:column;display:flex;overflow:auto}.jbF1yq_importModalHead{justify-content:space-between;align-items:center;gap:var(--nf-space-10,10px);display:flex}.jbF1yq_importModalTabs{gap:var(--nf-space-8,8px);display:flex}.jbF1yq_importModalTabs .jbF1yq_button{flex:1}.jbF1yq_importModalBody{gap:var(--nf-space-10,10px);flex-direction:column;display:flex}.jbF1yq_importField{gap:var(--nf-space-6,5px);font-size:var(--nf-fs-14,13px);color:var(--nf-text-2);flex-direction:column;display:flex}.jbF1yq_importHint{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);line-height:1.5}.jbF1yq_importError{border:1px solid color-mix(in srgb, var(--nf-danger,#e5484d) 55%, transparent);border-radius:var(--nf-radius-10,10px);padding:var(--nf-space-8,8px) var(--nf-space-10,10px);font-size:var(--nf-fs-12,12.5px);color:var(--nf-danger,#e5484d);background:color-mix(in srgb, var(--nf-danger,#e5484d) 10%, transparent);white-space:pre-wrap;word-break:break-all}.jbF1yq_importResult{gap:var(--nf-space-4,4px);border:1px solid color-mix(in srgb, var(--nf-ok,#46a758) 45%, transparent);border-radius:var(--nf-radius-10,10px);padding:var(--nf-space-10,10px) var(--nf-space-12,12px);font-size:var(--nf-fs-14,13px);background:color-mix(in srgb, var(--nf-ok,#46a758) 9%, transparent);word-break:break-all;flex-direction:column;display:flex}.jbF1yq_importModalActions{justify-content:flex-end;gap:var(--nf-space-8,8px);display:flex}.jbF1yq_settingsDrawerOverlay{z-index:1000;background:#00000073;animation:.16s jbF1yq_nfFadeIn;position:fixed;inset:0}.jbF1yq_settingsDrawer{background:var(--nf-bg-raise,var(--nf-bg));border-left:1px solid var(--nf-border);flex-direction:column;width:min(560px,94vw);animation:.2s jbF1yq_nfSlideInRight;display:flex;position:absolute;top:0;bottom:0;right:0;box-shadow:-18px 0 48px #00000059}@keyframes jbF1yq_nfSlideInRight{0%{opacity:0;transform:translate(24px)}to{opacity:1;transform:translate(0)}}.jbF1yq_settingsDrawerHead{padding:var(--nf-space-12) var(--nf-space-16);border-bottom:1px solid var(--nf-border);flex:none;justify-content:space-between;align-items:center;display:flex}.jbF1yq_settingsDrawerBody{flex:1;min-height:0;overflow-y:auto}.jbF1yq_importFileInfo{align-items:center;gap:var(--nf-space-8,8px);font-size:var(--nf-fs-14,13px);color:var(--nf-text-1);flex-wrap:wrap;display:flex}.jbF1yq_importPreview{gap:var(--nf-space-4,4px);border:1px solid var(--nf-border-strong);border-radius:var(--nf-radius-10,10px);padding:var(--nf-space-10,10px) var(--nf-space-12,12px);font-size:var(--nf-fs-14,13px);background:var(--nf-bg-inset);flex-direction:column;display:flex}.jbF1yq_importPreviewList{padding-left:var(--nf-space-18,18px);gap:var(--nf-space-2,2px);font-size:var(--nf-fs-12,12.5px);color:var(--nf-text-2);flex-direction:column;max-height:140px;margin:0;display:flex;overflow:auto}.jbF1yq_settingsCard{min-width:0;max-width:100%}.jbF1yq_settingsCard>*{min-width:0}.jbF1yq_settingsCard .jbF1yq_card{width:100%;min-width:0;max-width:100%}.jbF1yq_settingsCard .jbF1yq_fieldLabel{white-space:nowrap;text-overflow:ellipsis;max-width:100%;min-height:18px;line-height:18px;overflow:hidden}.jbF1yq_settingsCard .jbF1yq_row{align-items:flex-start}.jbF1yq_settingsCard+.jbF1yq_settingsCard{flex:none;min-height:auto}.jbF1yq_switch{border-radius:var(--nf-radius-999,999px);border:1px solid var(--nf-border-strong);background:var(--nf-bg-inset);cursor:pointer;width:42px;height:24px;transition:background var(--nf-dur-base,.15s) ease, border-color var(--nf-dur-base,.15s) ease;flex:none;padding:0;position:relative}.jbF1yq_view :is(button,[href],input,select,textarea,summary,[tabindex]):focus-visible,.jbF1yq_entry:focus-visible,.jbF1yq_runChip:focus-visible,.jbF1yq_view [role=button]:focus-visible,.jbF1yq_view [role=tab]:focus-visible,.jbF1yq_view [role=menuitem]:focus-visible,.jbF1yq_view [role=option]:focus-visible{outline:var(--nf-focus-w,2px) solid var(--nf-accent);outline-offset:var(--nf-focus-offset,2px)}.jbF1yq_view :is(input,textarea,select):focus-visible{border-color:var(--nf-accent)}.jbF1yq_view [data-nf-danger]:focus-visible{outline-color:var(--nf-error)}@media (prefers-reduced-motion:reduce){:root{--nf-dur-fast:.01ms;--nf-dur-base:.01ms;--nf-dur-slow:.01ms}.jbF1yq_view,.jbF1yq_view *,.jbF1yq_view :before,.jbF1yq_view :after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}:root{--nf-chip-bg:#ffffffd1;--nf-chip-border:#3c3c4329;--nf-chip-fg:#1c1c1e;--nf-chip-shadow:0 2px 12px #0000001f;--nf-chip-running:#00b85c;--nf-chip-paused:#b45309;--nf-chip-done:#0284c7;--nf-chip-stopped:#64748b;--nf-chip-error:#dc2626;--nf-streaming:#d16a92}body[data-ds-dark-theme]{--nf-chip-bg:#1c1c1ed1;--nf-chip-border:#ffffff24;--nf-chip-fg:#f2f2f7;--nf-chip-shadow:0 2px 12px #00000073;--nf-chip-running:#35d07a;--nf-chip-paused:#f0ac82;--nf-chip-done:#5cb3e8;--nf-chip-stopped:#98989d;--nf-chip-error:#ff6b60;--nf-streaming:#e891b5}.jbF1yq_runChip{top:calc(max(var(--dsh-frame-top-clearance,0px), var(--dsh-windows-titlebar-height,0px)) + 12px);z-index:var(--nf-z-chip,2147480000);align-items:center;gap:var(--nf-space-6,6px);max-width:360px;padding:5px var(--nf-space-12,12px);border:1px solid var(--nf-chip-border);border-radius:var(--nf-radius-999,999px);font-family:var(--nf-font);font-size:var(--nf-fs-12,12px);color:var(--nf-chip-fg);background:var(--nf-chip-bg);box-shadow:var(--nf-chip-shadow);backdrop-filter:blur(6px);cursor:pointer;user-select:none;touch-action:none;white-space:nowrap;transition:border-color var(--nf-dur-base,.15s) ease, box-shadow var(--nf-dur-base,.15s) ease;font-weight:600;display:none;position:fixed;right:14px}.jbF1yq_runChip[data-visible=true]{display:flex}.jbF1yq_runChip:hover{border-color:var(--nf-chip-running);box-shadow:var(--nf-chip-shadow), 0 0 0 3px color-mix(in srgb, var(--nf-chip-running) 18%, transparent)}.jbF1yq_runChipText{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.jbF1yq_runChipDot{background:var(--nf-chip-stopped);border-radius:50%;flex:none;width:7px;height:7px}.jbF1yq_runChip[data-status=running] .jbF1yq_runChipDot{background:var(--nf-chip-running)}.jbF1yq_runChip[data-status=paused] .jbF1yq_runChipDot{background:var(--nf-chip-paused)}.jbF1yq_runChip[data-status=done] .jbF1yq_runChipDot{background:var(--nf-chip-done)}.jbF1yq_runChip[data-status=error] .jbF1yq_runChipDot{background:var(--nf-chip-error)}@keyframes jbF1yq_nfChipPulse{0%,to{opacity:1}50%{opacity:.35}}.jbF1yq_runChip[data-status=running] .jbF1yq_runChipDot{animation:1.4s ease-in-out infinite jbF1yq_nfChipPulse}@media (prefers-reduced-motion:reduce){.jbF1yq_runChipDot{animation:none!important}}.jbF1yq_lfPill{font-size:var(--nf-fs-10,10px);border-radius:var(--nf-radius-999,999px);color:var(--nf-text-2);background:var(--nf-bg-inset);white-space:nowrap;padding:1px 7px;font-weight:600}.jbF1yq_lfPill[data-phase=streaming]{color:var(--nf-streaming);background:color-mix(in srgb, var(--nf-streaming) 16%, transparent)}.jbF1yq_lfPill[data-phase=completed]{color:var(--nf-success);background:color-mix(in srgb, var(--nf-success) 16%, transparent)}.jbF1yq_lfPill[data-phase=failed]{color:var(--nf-error);background:color-mix(in srgb, var(--nf-error) 18%, transparent)}.jbF1yq_lfDot{background:var(--nf-text-3);border-radius:50%;flex:none;width:6px;height:6px}.jbF1yq_lfDot[data-size=lg]{width:7px;height:7px}.jbF1yq_lfDot[data-state=streaming]{background:var(--nf-streaming)}.jbF1yq_lfDot[data-state=completed],.jbF1yq_lfDot[data-state=ok]{background:var(--nf-success)}.jbF1yq_lfDot[data-state=failed]{background:var(--nf-error)}.jbF1yq_emptyState{justify-content:center;align-items:center;gap:var(--nf-space-10,10px);padding:var(--nf-space-32,32px) var(--nf-space-20,20px);text-align:center;flex-direction:column;display:flex}.jbF1yq_emptyStateIcon{font-size:var(--nf-fs-34,34px);line-height:1}.jbF1yq_emptyStateTitle{font-size:var(--nf-fs-14,14px);color:var(--nf-text);font-weight:600}.jbF1yq_emptyStateHint{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);max-width:340px;line-height:1.5}.jbF1yq_emptyState[data-compact=true]{padding:var(--nf-space-16,16px) var(--nf-space-12,12px);gap:var(--nf-space-6,6px)}.jbF1yq_emptyState[data-compact=true] .jbF1yq_emptyStateIcon{font-size:var(--nf-fs-20,20px)}.jbF1yq_emptyState[data-compact=true] .jbF1yq_emptyStateTitle{font-size:var(--nf-fs-12,12px)}.jbF1yq_emptyState[data-compact=true] .jbF1yq_emptyStateHint{font-size:var(--nf-fs-12,12px);max-width:280px}@keyframes jbF1yq_nfSkeletonShimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.jbF1yq_pillNav{gap:var(--nf-space-8,8px);flex-wrap:wrap;display:flex;position:relative}.jbF1yq_pillNavSliding .jbF1yq_pillNavPill[data-active]{color:var(--nf-accent);background:0 0;border-color:#0000;font-weight:600}.jbF1yq_pillNavSlider{background:color-mix(in srgb, var(--nf-accent) 14%, transparent);border:1px solid color-mix(in srgb, var(--nf-accent) 55%, transparent);transition:transform var(--nf-dur-base,.15s) ease, width var(--nf-dur-base,.15s) ease;pointer-events:none;border-radius:999px;position:absolute;top:0;bottom:0;left:0}@media (prefers-reduced-motion:reduce){.jbF1yq_pillNavSlider{transition:none}}.jbF1yq_pillNavPill{border:1px solid var(--nf-border);background:var(--nf-bg-inset);color:var(--nf-text-2);border-radius:var(--nf-radius-999,999px);font-size:var(--nf-fs-12,12px);cursor:pointer;transition:border-color var(--nf-dur-base,.15s) ease, color var(--nf-dur-base,.15s) ease, background var(--nf-dur-base,.15s) ease;padding:5px 14px;font-weight:600}.jbF1yq_pillNavPill:hover{border-color:var(--nf-border-strong);color:var(--nf-text)}.jbF1yq_pillNavPill[data-active]{background:color-mix(in srgb, var(--nf-accent) 14%, transparent);border-color:color-mix(in srgb, var(--nf-accent) 42%, transparent);color:var(--nf-text)}.jbF1yq_assistantFloat[data-top]{z-index:82;box-shadow:var(--nf-shadow-lg), 0 0 0 1px color-mix(in srgb, var(--nf-accent) 22%, transparent)}.jbF1yq_assistantFloatHeader:focus-visible{outline:var(--nf-focus-w,2px) solid var(--nf-accent);outline-offset:-2px}.jbF1yq_view h1,.jbF1yq_view h2{font-family:var(--nf-font-display);letter-spacing:-.3px;font-weight:400;line-height:1.25}.jbF1yq_eyebrow{font-size:var(--nf-fs-10,10px);letter-spacing:.16em;text-transform:uppercase;color:var(--nf-accent);font-weight:600}.jbF1yq_titleBlock{gap:var(--nf-space-2,2px);flex-direction:column;display:flex}.jbF1yq_runLog{border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);background:var(--nf-bg-inset);min-height:120px;padding:var(--nf-space-10,10px) var(--nf-space-12,12px);gap:var(--nf-space-2,2px);font-size:var(--nf-fs-12,12px);font-variant-numeric:tabular-nums;flex-direction:column;flex:1;line-height:1.6;display:flex;overflow-y:auto}.jbF1yq_runLogLine{gap:var(--nf-space-8,8px);opacity:.88;display:flex}.jbF1yq_runLogTime{color:var(--nf-text-3);flex:none}.jbF1yq_tnum,.jbF1yq_statCardDValue,.jbF1yq_statCardDDetail,.jbF1yq_progressLine,.jbF1yq_liveText{font-variant-numeric:tabular-nums}.jbF1yq_chapterPreview,.jbF1yq_reviewBox{max-width:var(--nf-measure,720px);width:100%;margin-inline:auto}.jbF1yq_view textarea{max-width:var(--nf-measure,720px)}.jbF1yq_planMaster{grid-template-columns:264px minmax(0,1fr);align-items:stretch;height:clamp(480px,100vh - 250px,1200px);display:grid}.jbF1yq_planTree{background:color-mix(in srgb, var(--nf-border) 10%, transparent);border-right:1px solid var(--nf-border);padding:var(--nf-space-12,12px) var(--nf-space-10,10px) var(--nf-space-12,12px) var(--nf-space-14,14px);gap:var(--nf-space-2,2px);flex-direction:column;display:flex;overflow:auto}.jbF1yq_planTreeSearch{margin-bottom:var(--nf-space-6,6px);flex:none}.jbF1yq_planTreeVolGroup{display:block}.jbF1yq_planTreeVol{align-items:center;gap:var(--nf-space-6,6px);padding:var(--nf-space-8,8px) var(--nf-space-4,4px) var(--nf-space-4,4px);cursor:pointer;font-size:var(--nf-fs-12,12px);color:var(--nf-muted,var(--nf-text-2));user-select:none;background:linear-gradient(color-mix(in srgb, var(--nf-border) 10%, transparent), color-mix(in srgb, var(--nf-border) 10%, transparent)), var(--nf-glass-face);z-index:1;font-weight:600;display:flex;position:sticky;top:0}.jbF1yq_planTreeVolMeta{font-variant-numeric:tabular-nums;opacity:.75;margin-left:auto}.jbF1yq_planTreeRow{align-items:center;gap:var(--nf-space-6,6px);width:100%;padding:var(--nf-space-6,6px) var(--nf-space-8,8px);border-radius:var(--nf-radius-8,8px);color:var(--nf-text);cursor:pointer;text-align:left;font-size:var(--nf-fs-14,13px);transition:background var(--nf-dur-fast,.12s) ease, border-color var(--nf-dur-fast,.12s) ease;background:0 0;border:1px solid #0000;display:flex}.jbF1yq_planTreeRow:hover{background:color-mix(in srgb, var(--nf-accent) 10%, transparent)}.jbF1yq_planTreeRow[data-active]{background:color-mix(in srgb, var(--nf-accent) 16%, var(--nf-glass-face));border-color:var(--nf-accent)}.jbF1yq_planTreeRowNo{font-variant-numeric:tabular-nums;color:var(--nf-muted,var(--nf-text-2));font-size:var(--nf-fs-12,12px);text-align:right;flex:none;min-width:2ch}.jbF1yq_planTreeRowTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.jbF1yq_planDot{border-radius:50%;flex:none;width:8px;height:8px}.jbF1yq_planDetail{gap:var(--nf-space-10,10px);min-width:0;padding:var(--nf-space-14,14px) var(--nf-space-14,14px) var(--nf-space-12,12px) var(--nf-space-14,14px);flex-direction:column;display:flex}.jbF1yq_planDetailEmpty{border:1px dashed var(--nf-glass-border);border-radius:var(--nf-radius-14,14px);flex:1;justify-content:center;align-items:center;display:flex}.jbF1yq_planDetailBody{flex:1;min-height:0;overflow:auto}.jbF1yq_planDetailTitle{font-family:var(--nf-font-display,inherit);font-size:var(--nf-fs-20,20px);color:var(--nf-text);letter-spacing:.01em;font-weight:400;line-height:1.3}.jbF1yq_planBeats{gap:var(--nf-space-8,8px);padding:var(--nf-space-12,12px) var(--nf-space-14,14px);border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-14,14px);background:var(--nf-glass-face);max-width:var(--nf-measure,720px);flex-direction:column;display:flex}.jbF1yq_planBeatsLabel{font-size:var(--nf-fs-12,12px);letter-spacing:.06em;color:var(--nf-muted,var(--nf-text-2));font-weight:600}.jbF1yq_planDetailBar{gap:var(--nf-space-6,6px);border-top:1px solid var(--nf-glass-border);padding-top:var(--nf-space-10,10px);flex-wrap:wrap;display:flex}@container jbF1yq_nfpanel (width<=900px){.jbF1yq_planMaster{grid-template-columns:1fr;height:auto;min-height:480px}.jbF1yq_planTree{border-right:none;border-bottom:1px solid var(--nf-glass-border);padding-right:var(--nf-space-14,14px);padding-bottom:var(--nf-space-10,10px);max-height:300px}}.jbF1yq_t2Master{grid-template-columns:200px minmax(0,1fr);min-height:320px;display:grid}.jbF1yq_t2Rail{background:color-mix(in srgb, var(--nf-border) 10%, transparent);border-right:1px solid var(--nf-border);padding:var(--nf-space-12,12px) var(--nf-space-10,10px);gap:var(--nf-space-4,4px);flex-direction:column;display:flex}.jbF1yq_t2RailHead{font-size:var(--nf-fs-14,14px);padding:var(--nf-space-4,4px) var(--nf-space-6,6px) var(--nf-space-10,10px);font-weight:650}.jbF1yq_t2RailBtn{align-items:center;gap:var(--nf-space-8,8px);padding:var(--nf-space-6,6px) var(--nf-space-8,8px);border-radius:var(--nf-radius-8,8px);color:var(--nf-text);cursor:pointer;text-align:left;width:100%;font-size:var(--nf-fs-14,13px);transition:background var(--nf-dur-fast,.12s) ease, border-color var(--nf-dur-fast,.12s) ease;background:0 0;border:1px solid #0000;display:flex}.jbF1yq_t2RailBtn:hover{background:color-mix(in srgb, var(--nf-accent) 10%, transparent)}.jbF1yq_t2RailBtn[data-active]{background:color-mix(in srgb, var(--nf-accent) 16%, var(--nf-glass-face));border-color:var(--nf-accent);color:var(--nf-accent);font-weight:600}.jbF1yq_t2RailSep{background:var(--nf-glass-border);height:1px;margin:var(--nf-space-8,8px) 0}.jbF1yq_t2RailMeta{gap:var(--nf-space-6,6px);padding:0 var(--nf-space-6,6px);font-size:var(--nf-fs-12,12px);color:var(--nf-muted,var(--nf-text-2));flex-direction:column;line-height:1.5;display:flex}.jbF1yq_t2Content{padding:var(--nf-space-16,16px) var(--nf-space-20,20px);gap:var(--nf-space-14,14px);flex-direction:column;min-width:0;display:flex}@container jbF1yq_nfpanel (width<=900px){.jbF1yq_t2Master{grid-template-columns:1fr}.jbF1yq_t2Rail{border-right:none;border-bottom:1px solid var(--nf-glass-border)}}.jbF1yq_view .jbF1yq_button,.jbF1yq_view .jbF1yq_buttonPrimary,.jbF1yq_view .jbF1yq_buttonSmall,.jbF1yq_view .jbF1yq_iconButton,.jbF1yq_view .jbF1yq_pillNavPill,.jbF1yq_view .jbF1yq_segTab{transition-property:color,background,border-color,box-shadow,transform,opacity;transition-duration:var(--nf-dur-fast,.12s);transition-timing-function:cubic-bezier(.2,.8,.2,1)}.jbF1yq_view .jbF1yq_button:active,.jbF1yq_view .jbF1yq_buttonPrimary:active,.jbF1yq_view .jbF1yq_buttonSmall:active,.jbF1yq_view .jbF1yq_iconButton:active{transform:scale(.96)}.jbF1yq_card{transition:border-color var(--nf-dur-base,.15s) ease, transform var(--nf-dur-base,.15s) cubic-bezier(.2, .8, .2, 1), box-shadow var(--nf-dur-base,.15s) ease}.jbF1yq_card:hover{border-color:var(--nf-border-strong);transform:translateY(-1px)}@keyframes jbF1yq_nfViewIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}html[data-dsh-novelforge-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) .jbF1yq_view{animation:jbF1yq_nfViewIn var(--nf-dur-slow,.28s) cubic-bezier(.2, .8, .2, 1)}:root{--nf-toast-bg:#faf9f5f5;--nf-toast-border:#a0917d66;--nf-toast-fg:#1f1e1c}body[data-ds-dark-theme]{--nf-toast-bg:#181c22f5;--nf-toast-border:#ffffff29;--nf-toast-fg:#e8eaed}.jbF1yq_nfToastHost{z-index:var(--nf-z-chip,2147480000);pointer-events:none;flex-direction:column;align-items:center;gap:8px;display:flex;position:fixed;bottom:26px;left:50%;transform:translate(-50%)}.jbF1yq_nfToast{border:1px solid var(--nf-toast-border);background:var(--nf-toast-bg);max-width:440px;color:var(--nf-toast-fg);font-family:var(--nf-font);font-size:var(--nf-fs-12,12.5px);border-radius:12px;align-items:center;gap:8px;padding:10px 18px;font-weight:600;animation:.3s cubic-bezier(.2,.9,.3,1.15) jbF1yq_nfToastIn;display:flex;box-shadow:0 12px 40px #00000040}.jbF1yq_nfToast[data-kind=done]{border-color:color-mix(in srgb, var(--nf-toast-ok,#2ec27e) 45%, var(--nf-toast-border))}.jbF1yq_nfToast[data-kind=error]{border-color:color-mix(in srgb, #dc2626 45%, var(--nf-toast-border))}.jbF1yq_nfToast .jbF1yq_nfToastTick{flex:none;font-weight:700}.jbF1yq_nfToast[data-kind=done] .jbF1yq_nfToastTick{color:var(--nf-toast-ok,#2ec27e)}.jbF1yq_nfToast[data-kind=error] .jbF1yq_nfToastTick{color:#ef4444}.jbF1yq_nfToast.jbF1yq_nfToastOut{opacity:0;transition:opacity .3s,transform .3s;transform:translateY(8px)}@keyframes jbF1yq_nfToastIn{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}.jbF1yq_cmdMask{z-index:90;backdrop-filter:blur(4px);background:#08090b6b;justify-content:center;align-items:flex-start;padding-top:12vh;animation:.16s jbF1yq_nfFadeIn;display:flex;position:absolute;inset:0}.jbF1yq_cmdBox{border:1px solid var(--nf-border-strong);border-radius:var(--nf-radius-16,16px);background:var(--nf-bg-raise);width:min(540px,92%);max-height:62vh;box-shadow:var(--nf-shadow-lg);flex-direction:column;animation:.22s cubic-bezier(.2,.9,.3,1.12) jbF1yq_nfCmdPop;display:flex;overflow:hidden}.jbF1yq_cmdInput{width:100%;color:var(--nf-text);font-family:var(--nf-font);font-size:var(--nf-fs-14,14px);padding:var(--nf-space-14,14px) var(--nf-space-16,16px);border:none;border-bottom:1px solid var(--nf-border);background:0 0;outline:none}.jbF1yq_cmdInput::placeholder{color:var(--nf-text-3)}.jbF1yq_cmdList{padding:var(--nf-space-6,6px);margin:0;list-style:none;overflow:auto}.jbF1yq_cmdItem{align-items:center;gap:var(--nf-space-10,10px);padding:var(--nf-space-8,8px) var(--nf-space-12,12px);border-radius:var(--nf-radius-10,10px);font-size:var(--nf-fs-12,12.5px);color:var(--nf-text-2);cursor:pointer;display:flex}.jbF1yq_cmdItem .jbF1yq_cmdIcon{font-size:var(--nf-fs-14,14px);flex:none}.jbF1yq_cmdItem b{color:var(--nf-text);font-weight:600}.jbF1yq_cmdItem .jbF1yq_cmdHint{font-size:var(--nf-fs-10,10px);color:var(--nf-text-3);margin-left:auto}.jbF1yq_cmdItem[data-active]{background:var(--nf-accent-soft);color:var(--nf-text)}.jbF1yq_cmdEmpty{padding:var(--nf-space-20,20px);text-align:center;color:var(--nf-text-3);font-size:var(--nf-fs-12,12.5px)}@keyframes jbF1yq_nfCmdPop{0%{opacity:0;transform:translateY(-8px)scale(.97)}to{opacity:1;transform:none}}.jbF1yq_wfStage{--wf-bg:var(--nf-bg);--wf-bg2:var(--nf-bg-raise);--wf-bg3:var(--nf-bg-inset);--wf-bg4:var(--nf-bg-deep,var(--nf-bg-inset));--wf-line:var(--nf-border);--wf-line2:var(--nf-border-strong);--wf-text:var(--nf-text);--wf-dim:var(--nf-text-2);--wf-faint:var(--nf-text-3);--wf-ai:var(--nf-ai,#d98a2b);--wf-human:var(--nf-human,#4aa3d9);--wf-ok:var(--nf-success);--wf-warn:var(--nf-warn);--wf-bad:var(--nf-error);--wf-idle:var(--nf-idle,#5c5344);--wf-serif:var(--nf-font-display,Georgia, \"Songti SC\", SimSun, serif);--wf-ui:var(--nf-font,\"Segoe UI\", \"PingFang SC\", \"Microsoft YaHei\", sans-serif);--wf-mono:var(--nf-font-mono,\"Cascadia Mono\", Consolas, \"SF Mono\", ui-monospace, monospace);background:var(--wf-bg2);border:1px solid var(--wf-line);color:var(--wf-text);font-family:var(--wf-ui);-webkit-font-smoothing:antialiased;border-radius:16px;font-size:14px;line-height:1.6;position:relative;overflow:hidden}.jbF1yq_wfStage button{font-family:inherit}.jbF1yq_wfTop{background:var(--nf-bg-deep,var(--nf-bg));border-bottom:1px solid var(--wf-line2);flex-wrap:wrap;align-items:center;gap:14px;padding:12px 18px;display:flex}.jbF1yq_wfBook{font-family:var(--wf-serif);white-space:nowrap;text-overflow:ellipsis;max-width:38vw;font-size:22px;line-height:1.2;overflow:hidden}.jbF1yq_wfProg{color:var(--wf-dim);white-space:nowrap;align-items:baseline;gap:6px;font-size:12.5px;display:flex}.jbF1yq_wfProgBig{font-family:var(--wf-serif);color:var(--wf-ok);font-size:22px;line-height:1.1}.jbF1yq_wfProgRest{color:var(--wf-dim)}.jbF1yq_wfPill{border:1px solid var(--wf-line);color:var(--wf-dim);background:var(--wf-bg2);white-space:nowrap;border-radius:99px;align-items:center;gap:6px;padding:3px 10px;font-size:12px;display:inline-flex}.jbF1yq_wfPillDot{border-radius:50%;flex:none;width:7px;height:7px;display:inline-block}.jbF1yq_wfLiveChip{color:var(--wf-ai);border-color:#d98a2b66}.jbF1yq_wfTopRight{flex-wrap:wrap;align-items:center;gap:8px;margin-left:auto;display:flex}.jbF1yq_wfSep{background:var(--wf-line);flex:none;width:1px;height:16px;margin:0 4px}.jbF1yq_wfTool{color:var(--wf-dim);border:1px solid var(--wf-line);cursor:pointer;white-space:nowrap;background:0 0;border-radius:7px;padding:3px 11px;font-size:12.5px;transition:border-color .15s,color .15s}.jbF1yq_wfTool:hover{border-color:var(--wf-line);color:var(--wf-text)}.jbF1yq_wfToolBlue{color:var(--nf-human);border-color:#4aa3d959}.jbF1yq_wfToolAmber{color:var(--nf-ai);border-color:#d98a2b66}.jbF1yq_wfMetrics{gap:var(--nf-space-8,8px);grid-template-columns:repeat(4,minmax(0,1fr));margin:14px 18px 0;display:grid}.jbF1yq_wfMetric{background:var(--nf-bg-inset);border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);min-width:0;padding:9px 11px}.jbF1yq_wfMetric span{font-size:var(--nf-fs-caption,11px);color:var(--nf-text-2);white-space:nowrap;display:block}.jbF1yq_wfMetric b{font-family:var(--nf-font-display,Georgia, \"Songti SC\", SimSun, serif);color:var(--nf-text);font-variant-numeric:tabular-nums;font-size:20px;font-weight:700}.jbF1yq_wfMetric small{font-size:var(--nf-fs-caption,11px);color:var(--nf-text-3);white-space:nowrap;text-overflow:ellipsis;margin-top:1px;display:block;overflow:hidden}@container jbF1yq_nfpanel (width<=760px){.jbF1yq_wfMetrics{grid-template-columns:repeat(2,minmax(0,1fr))}}.jbF1yq_wfBody{grid-template-columns:minmax(0,1fr) 380px;display:grid}@container jbF1yq_nfpanel (width<=1080px){.jbF1yq_wfBody{grid-template-columns:minmax(0,1fr)}}.jbF1yq_wfColA{flex-direction:column;gap:16px;min-width:0;padding:16px 18px;display:flex}.jbF1yq_wfColB{border-left:1px solid var(--wf-line2);flex-direction:column;gap:16px;min-width:0;padding:16px 18px;display:flex}@container jbF1yq_nfpanel (width<=1080px){.jbF1yq_wfColB{border-left:none}}.jbF1yq_wfRail{border:1px solid var(--wf-line2);background:var(--wf-bg3);border-radius:10px;grid-template-columns:repeat(6,1fr);gap:4px;padding:5px;display:grid}.jbF1yq_wfRs{text-align:center;background:var(--wf-bg4);color:var(--wf-faint);cursor:pointer;border:1px solid #0000;border-radius:7px;min-width:0;padding:6px 2px;font-size:12px;transition:transform .12s,filter .12s;position:relative}.jbF1yq_wfRs:hover:not(:disabled){filter:brightness(1.15);transform:translateY(-1px)}.jbF1yq_wfRs:disabled{cursor:default;opacity:.8}.jbF1yq_wfRsNo{font-family:var(--wf-mono);opacity:.7;font-size:9px;line-height:1.2;display:block}.jbF1yq_wfRsName{color:inherit;white-space:nowrap;text-overflow:ellipsis;font-size:12.5px;font-weight:600;line-height:1.4;display:block;overflow:hidden}.jbF1yq_wfRsChk{font-family:var(--wf-mono);color:inherit;white-space:nowrap;text-overflow:ellipsis;font-size:10px;font-weight:700;line-height:1.3;display:block;overflow:hidden}.jbF1yq_wfDone{color:var(--wf-ok);background:#79b3721f}.jbF1yq_wfNow{color:var(--nf-ai);background:#d98a2b1f;border-color:#e0a03c80}@container jbF1yq_nfpanel (width<=760px){.jbF1yq_wfRail{grid-template-columns:repeat(3,1fr)}}.jbF1yq_wfEmpty{border:1px dashed var(--wf-line);background:var(--wf-bg3);color:var(--wf-dim);border-radius:12px;padding:18px 20px;font-size:12.5px;line-height:1.8}.jbF1yq_wfCmd{background:#4aa3d912;border:1px solid #4c9ed966;border-radius:14px;align-items:center;gap:16px;min-width:0;padding:13px 16px;display:flex;position:relative}.jbF1yq_wfQt{flex-direction:column;flex:none;gap:2px;display:flex}.jbF1yq_wfQtTone{color:var(--wf-dim);letter-spacing:.06em;text-transform:uppercase;font-size:12.5px}.jbF1yq_wfQt b{color:var(--nf-human);font-size:14px;line-height:1.4}.jbF1yq_wfCmdReason{min-width:0;color:var(--wf-faint);flex:1;font-size:12.5px;line-height:1.6}.jbF1yq_wfCmdBtn{background:var(--wf-human);color:#06202e;cursor:pointer;white-space:nowrap;border:none;border-radius:9px;flex:none;padding:9px 18px;font-size:13.5px;font-weight:700;transition:filter .15s;box-shadow:0 6px 20px #4aa3d94d}.jbF1yq_wfCmdBtn:hover:not(:disabled){filter:brightness(1.1)}.jbF1yq_wfCmdBtn:disabled{opacity:.45;cursor:not-allowed}.jbF1yq_wfCard2{grid-template-columns:1.2fr 1fr;gap:14px;display:grid}@container jbF1yq_nfpanel (width<=1080px){.jbF1yq_wfCard2{grid-template-columns:minmax(0,1fr)}}.jbF1yq_wfBox{border:1px solid var(--wf-line2);background:var(--wf-bg3);border-radius:12px;min-width:0;padding:13px 14px;position:relative}.jbF1yq_wfBoxH{letter-spacing:.14em;text-transform:uppercase;color:var(--wf-faint);align-items:center;gap:7px;margin:0 0 9px;font-size:12px;font-weight:700;line-height:1.4;display:flex}.jbF1yq_wfDot{border-radius:50%;flex:none;width:7px;height:7px;display:inline-block}.jbF1yq_wfRow{border-bottom:1px solid var(--wf-line2);align-items:center;gap:10px;padding:5px 0;font-size:12.5px;display:flex}.jbF1yq_wfRow:last-child{border-bottom:none}.jbF1yq_wfCn{font-family:var(--wf-mono);color:var(--wf-dim);white-space:nowrap;flex:none;min-width:58px}.jbF1yq_wfSt{border-radius:4px;flex:none;padding:1px 6px;font-size:12px}.jbF1yq_wfStRev{color:var(--nf-warn);background:#e3a52e26}.jbF1yq_wfStFix{color:var(--nf-error);background:#d9575326}.jbF1yq_wfStFail{color:var(--nf-error);background:#d957532e}.jbF1yq_wfDs{color:var(--wf-faint);text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.jbF1yq_wfAct{color:var(--nf-human);cursor:pointer;white-space:nowrap;opacity:.45;background:0 0;border:1px solid #4aa3d959;border-radius:6px;flex:none;padding:2px 9px;font-size:12px;transition:background .12s,opacity .12s}.jbF1yq_wfRow:hover .jbF1yq_wfAct,.jbF1yq_wfAct:focus-visible{opacity:1}.jbF1yq_wfRow:hover .jbF1yq_wfDs{color:var(--wf-dim)}.jbF1yq_wfRow{transition:background .1s}.jbF1yq_wfAct:hover{background:#4aa3d91f}.jbF1yq_wfSmallFoot{color:var(--wf-faint);flex-wrap:wrap;align-items:center;gap:10px;margin-top:8px;font-size:12px;line-height:1.7;display:flex}.jbF1yq_wfFeedBox{min-width:0}.jbF1yq_wfFeedList{flex-direction:column;min-width:0;display:flex}.jbF1yq_wfFi{border-bottom:1px solid var(--wf-line2);align-items:baseline;gap:10px;min-width:0;padding:6px 0;font-size:12.5px;display:flex}.jbF1yq_wfFi:last-child{border-bottom:none}.jbF1yq_wfFdot{background:var(--wf-idle);opacity:.9;border-radius:50%;flex:none;align-self:center;width:6px;height:6px}.jbF1yq_wfFdotOk{background:var(--wf-ok)}.jbF1yq_wfFdotErr{background:var(--wf-bad)}.jbF1yq_wfFt{color:var(--wf-dim);white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.jbF1yq_wfDrawerBox{min-width:0}.jbF1yq_wfDrawerToggle{color:var(--wf-dim);border:1px solid var(--wf-line);cursor:pointer;background:0 0;border-radius:5px;margin-left:auto;padding:1px 8px;font-size:12px}.jbF1yq_wfDrawerToggle:hover{color:var(--wf-text);border-color:var(--wf-line)}.jbF1yq_wfDrawerList{grid-template-columns:1fr 1fr;gap:6px;display:grid}@container jbF1yq_nfpanel (width<=560px){.jbF1yq_wfDrawerList{grid-template-columns:1fr}}.jbF1yq_wfDl{background:var(--wf-bg3);border:1px solid var(--wf-line2);color:var(--wf-dim);text-align:left;cursor:pointer;border-radius:8px;padding:8px 10px;font-size:12.5px;transition:border-color .12s,transform .12s;position:relative}.jbF1yq_wfDl:hover{border-color:#d98a2b73;transform:translateY(-1px)}.jbF1yq_wfDlName{color:var(--wf-text);font-weight:600;display:block}.jbF1yq_wfDlDi{color:var(--wf-faint);font-size:10px;font-family:var(--wf-mono);margin-top:2px;display:block}.jbF1yq_wfDlDim{opacity:.6}.jbF1yq_wfDlDim .jbF1yq_wfDlName{color:var(--wf-dim)}.jbF1yq_wfAccentBlue{border-color:#4c9ed959}.jbF1yq_wfAccentAmber{border-color:#d98a2b59}.jbF1yq_wfHint{color:var(--wf-dim);margin-bottom:8px;font-size:12.5px;line-height:1.7}.jbF1yq_wfEmpty2{color:var(--wf-faint);padding:2px 0 4px;font-size:12.5px;line-height:1.7;display:block}.jbF1yq_wfPreview{color:var(--wf-faint);border:1px dashed #4aa3d94d;border-radius:9px;flex-direction:column;gap:4px;margin-bottom:8px;padding:9px 11px;font-size:12px;display:flex}.jbF1yq_wfPreviewName{color:var(--wf-text);font-size:12.5px;font-weight:600}.jbF1yq_wfPreviewLine{line-height:1.7}.jbF1yq_wfPreviewActs{gap:8px;margin-top:3px;display:flex}.jbF1yq_wfConsole{font-family:var(--wf-mono);color:var(--wf-dim);background:var(--wf-bg3);border:1px solid var(--wf-line2);border-radius:9px;min-width:0;margin-bottom:8px;padding:9px 12px;font-size:12px;line-height:1.9}.jbF1yq_wfConRow{white-space:nowrap;align-items:center;gap:8px;min-width:0;display:flex}.jbF1yq_wfConOk{color:var(--wf-ok);font-weight:600}.jbF1yq_wfConErr{color:var(--nf-error)}.jbF1yq_wfLiveMark{color:var(--wf-ai);flex:none;animation:1s ease-in-out infinite jbF1yq_wfBlink}.jbF1yq_wfConTxt{text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.jbF1yq_wfConBar{background:var(--wf-idle);border-radius:99px;flex:none;width:110px;height:4px;overflow:hidden}.jbF1yq_wfConBar i{background:var(--wf-ai);border-radius:99px;height:100%;display:block}.jbF1yq_wfOpsRow{flex-wrap:wrap;gap:8px;display:flex}.jbF1yq_wfOpsBtn{color:var(--wf-dim);border:1px solid var(--wf-line2);cursor:pointer;white-space:nowrap;background:0 0;border-radius:7px;padding:5px 11px;font-size:12.5px;transition:border-color .12s,color .12s}.jbF1yq_wfOpsBtn:hover:not(:disabled){color:var(--wf-text);border-color:var(--wf-line)}.jbF1yq_wfOpsBtn:disabled{opacity:.4;cursor:not-allowed}.jbF1yq_wfOpsBtnMain{color:var(--nf-ai);background:#d98a2b1f;border-color:#d98a2b73}.jbF1yq_wfConsoleNote{color:var(--wf-ai);margin-top:8px;font-size:12px;line-height:1.6}.jbF1yq_wfCoord{color:var(--wf-dim);font-size:12.5px;line-height:1.9}.jbF1yq_wfCoord b{color:var(--wf-text);font-weight:600}.jbF1yq_wfCoordStuck{color:var(--nf-error);margin-top:4px}@keyframes jbF1yq_wfBlink{0%,to{opacity:.35}50%{opacity:1}}@container jbF1yq_nfpanel (width<=1080px){.jbF1yq_wfBook{max-width:70%}}@container jbF1yq_nfpanel (width<=760px){.jbF1yq_wfRsName{font-size:12px}.jbF1yq_wfProg{display:none}.jbF1yq_wfTopRight{margin-left:0}.jbF1yq_wfPsLab{font-size:10px}.jbF1yq_wfCmd{flex-wrap:wrap}}.jbF1yq_wfStage button:focus-visible,.jbF1yq_wfStage a:focus-visible{outline:1px solid var(--nf-ai);outline-offset:2px}.jbF1yq_chWork{flex-direction:column;flex:1;min-height:0;display:flex}.jbF1yq_chWorkBar{align-items:center;gap:var(--nf-space-10,10px);padding:var(--nf-space-10,10px) var(--nf-space-14,14px);border-bottom:1px solid var(--nf-border);background:var(--nf-bg-raise);flex-wrap:wrap;display:flex}.jbF1yq_chWorkTitle{font-family:var(--nf-font-display,inherit);font-size:var(--nf-fs-20,20px);color:var(--nf-text);font-weight:400;line-height:1.3}.jbF1yq_chWorkActions{align-items:center;gap:var(--nf-space-8,8px);flex-wrap:wrap;margin-left:auto;display:flex}.jbF1yq_chWorkGrid{flex:1;grid-template-columns:260px minmax(0,1fr) minmax(0,1fr);min-height:0;display:grid}.jbF1yq_chWorkSideHead{align-items:center;gap:var(--nf-space-8,8px);min-width:0;display:flex}.jbF1yq_chWorkSideHead>:first-child{flex:1;min-width:0}.jbF1yq_chWorkAside,.jbF1yq_chWorkSide{gap:var(--nf-space-10,10px);min-width:0;min-height:0;padding:var(--nf-space-12,12px);flex-direction:column;display:flex}.jbF1yq_chWorkAside{border-right:1px solid var(--nf-border)}.jbF1yq_chWorkSide{border-left:1px solid var(--nf-border)}.jbF1yq_chWorkAsideTitle{font-size:var(--nf-fs-12,12px);letter-spacing:.08em;color:var(--nf-muted,var(--nf-text-2));font-weight:600}.jbF1yq_chWorkAsideBody{gap:var(--nf-space-10,10px);min-height:0;padding:var(--nf-space-12,12px) var(--nf-space-14,14px);border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-14,14px);background:var(--nf-glass-face);flex-direction:column;flex:1;display:flex;overflow:auto}.jbF1yq_chWorkMain{flex-direction:column;min-width:0;min-height:0;display:flex}.jbF1yq_chWorkToolbar{padding:var(--nf-space-8,8px) var(--nf-space-16,16px);border-bottom:1px solid var(--nf-border);align-items:center;display:flex}.jbF1yq_chWorkText{min-height:0;padding:var(--nf-space-20,20px) var(--nf-space-24,24px);background-color:var(--nf-bg-raise);background-image:repeating-linear-gradient(0deg, transparent 0, transparent 27px, var(--nf-paper-grid) 27px, var(--nf-paper-grid) 28px);font-family:var(--nf-font-display);color:var(--nf-text-2);white-space:pre-wrap;word-break:break-word;flex:1;margin:0;line-height:28px;overflow:auto}.jbF1yq_chWorkSideBody{gap:var(--nf-space-10,10px);flex-direction:column;flex:1;min-height:0;display:flex;overflow:auto}.jbF1yq_chWorkToolActions{align-items:center;gap:var(--nf-space-8,8px);margin-left:auto;display:flex}.jbF1yq_chWorkDraftBar{gap:var(--nf-space-6,6px);padding:var(--nf-space-10,10px) var(--nf-space-12,12px);border:1px solid color-mix(in srgb, var(--nf-warn,var(--nf-seal)) 45%, transparent);border-radius:var(--nf-radius-14,14px);background:var(--nf-glass-face);flex-direction:column;flex-shrink:0;display:flex}.jbF1yq_chWorkPickBar{align-items:center;gap:var(--nf-space-8,8px);flex-wrap:wrap;display:flex}.jbF1yq_chWorkPickBtns{align-items:center;gap:var(--nf-space-6,6px);margin-left:auto;display:flex}.jbF1yq_chWorkSideBody input[type=checkbox]{accent-color:var(--nf-seal,var(--nf-accent));cursor:pointer;flex-shrink:0}.jbF1yq_chWorkSideFoot{gap:var(--nf-space-8,8px);padding:var(--nf-space-10,10px) var(--nf-space-12,12px);border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-14,14px);background:var(--nf-glass-face);flex-direction:column;flex-shrink:0;display:flex}.jbF1yq_chWorkFootRow{gap:var(--nf-space-8,8px);flex-wrap:wrap;display:flex}.jbF1yq_panelHidden{display:none}@container jbF1yq_nfpanel (width<=900px){.jbF1yq_chWorkGrid{grid-template-columns:220px minmax(0,1fr)}.jbF1yq_chWorkSide{border-left:none;border-top:1px solid var(--nf-border);grid-column:1/-1}}@container jbF1yq_nfpanel (width<=820px){.jbF1yq_chWorkGrid{grid-template-columns:minmax(0,1fr)}.jbF1yq_chWorkAside{border-right:none;border-bottom:1px solid var(--nf-border)}}.jbF1yq_noticeBar{align-items:flex-start;gap:var(--nf-space-8,8px);padding:var(--nf-space-8,8px) var(--nf-space-10,10px);border:1px solid var(--nf-border);border-radius:var(--nf-ctrl-radius,8px);font-size:var(--nf-fs-notice,12px);line-height:var(--nf-lh-body,1.55);display:flex}.jbF1yq_noticeIcon{width:16px;height:16px;font-size:var(--nf-fs-14,14px);border-radius:50%;flex:none;place-items:center;margin-top:1px;font-weight:700;display:inline-grid}.jbF1yq_noticeBody{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.jbF1yq_noticeText{font-weight:600}.jbF1yq_noticeDetail{font-weight:400;font-size:var(--nf-fs-14,14px);opacity:.9}.jbF1yq_noticeActions{align-items:center;gap:var(--nf-space-6,6px);flex:none;display:flex}.jbF1yq_noticeBtn{font-size:var(--nf-fs-14,14px);color:inherit;cursor:pointer;transition:background var(--nf-dur-base,.12s) var(--nf-ease-out,ease);background:0 0;border:1px solid;border-radius:6px;flex:none;padding:2px 9px}.jbF1yq_noticeBtn:hover{background:#7f7f7f24}.jbF1yq_noticeBtn:disabled{opacity:.55;cursor:default}.jbF1yq_notice-ok{color:var(--nf-success-ink);background:var(--nf-success-ink-soft);border-color:color-mix(in srgb, var(--nf-success-ink) 34%, transparent)}.jbF1yq_notice-info{color:var(--nf-info-ink);background:var(--nf-info-ink-soft);border-color:color-mix(in srgb, var(--nf-info-ink) 34%, transparent)}.jbF1yq_notice-warn{color:var(--nf-warn-ink);background:var(--nf-warn-ink-soft);border-color:color-mix(in srgb, var(--nf-warn-ink) 34%, transparent)}.jbF1yq_notice-error{color:var(--nf-error-ink);background:var(--nf-error-ink-soft);border-color:color-mix(in srgb, var(--nf-error-ink) 40%, transparent)}.jbF1yq_noticeIcon{color:inherit}.jbF1yq_confirmOverlay{z-index:90;background:color-mix(in srgb, var(--nf-bg-deep,#100e0a) 62%, transparent);backdrop-filter:blur(2px);justify-content:center;align-items:center;padding:20px;display:flex;position:fixed;inset:0}.jbF1yq_confirmCard{gap:var(--nf-space-10,10px);width:min(460px,94vw);max-height:min(86vh,720px);padding:var(--nf-space-16,16px);background:var(--nf-bg);border:1px solid var(--nf-border);border-radius:var(--nf-card-radius,12px);box-shadow:var(--nf-shadow-lg,0 20px 48px #00000047);animation:jbF1yq_nfConfirmIn var(--nf-dur-base,.14s) var(--nf-ease-out,ease) both;flex-direction:column;display:flex;overflow-y:auto}@keyframes jbF1yq_nfConfirmIn{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}.jbF1yq_confirmHead{align-items:flex-start;gap:var(--nf-space-10,10px);display:flex}.jbF1yq_confirmIcon{width:26px;height:26px;font-size:var(--nf-fs-14,14px);border-radius:8px;flex:none;place-items:center;font-weight:700;display:grid}.jbF1yq_confirmTitle{font-family:var(--nf-font-display,Georgia, \"Songti SC\", SimSun, serif);font-size:var(--nf-fs-title,16px);color:var(--nf-text);font-weight:700;line-height:1.35}.jbF1yq_confirmBody{gap:var(--nf-space-8,8px);flex-direction:column;display:flex}.jbF1yq_confirmText{font-size:var(--nf-fs-14,14px);line-height:var(--nf-lh-body,1.6);color:var(--nf-text-2)}.jbF1yq_confirmList{padding:var(--nf-space-8,8px) var(--nf-space-12,12px);font-size:var(--nf-fs-14,14px);color:var(--nf-text-2);background:var(--nf-bg-inset);border-radius:8px;margin:0;line-height:1.65;list-style:outside}.jbF1yq_confirmList li+li{margin-top:2px}.jbF1yq_confirmAssurance{padding:var(--nf-space-8,8px) var(--nf-space-10,10px);font-size:var(--nf-fs-14,14px);color:var(--nf-info-ink);background:var(--nf-info-ink-soft);border:1px solid color-mix(in srgb, var(--nf-info-ink) 28%, transparent);border-radius:8px;line-height:1.55}.jbF1yq_confirmPhraseRow{flex-direction:column;gap:4px;display:flex}.jbF1yq_confirmPhraseHint{font-size:var(--nf-fs-14,14px);color:var(--nf-text-3)}.jbF1yq_confirmPhraseInput{font-family:var(--nf-mono,ui-monospace, monospace);font-size:var(--nf-fs-14,14px);border:1px solid var(--nf-border-strong);background:var(--nf-bg-raise);color:var(--nf-text);border-radius:8px;padding:7px 10px}.jbF1yq_confirmAckRow{align-items:flex-start;gap:var(--nf-space-8,8px);font-size:var(--nf-fs-14,14px);color:var(--nf-text-2);cursor:pointer;line-height:1.5;display:flex}.jbF1yq_confirmAckRow input{flex:none;margin-top:2px}.jbF1yq_confirmActions{justify-content:flex-end;align-items:center;gap:var(--nf-space-8,8px);padding-top:var(--nf-space-4,4px);display:flex}.jbF1yq_confirmGo[data-tone=danger]{border-color:var(--nf-error-ink);color:#fff;background:var(--nf-error-ink)}.jbF1yq_confirmGo[data-tone=danger]:hover:not(:disabled){filter:brightness(1.08)}.jbF1yq_confirmGo[data-tone=warn]{border-color:var(--nf-warn-ink);color:#fff;background:var(--nf-warn-ink)}.jbF1yq_confirmGo[data-tone=warn]:hover:not(:disabled){filter:brightness(1.08)}.jbF1yq_confirmGo[data-tone=info]{border-color:var(--nf-accent);color:var(--nf-accent-fg);background:var(--nf-accent)}.jbF1yq_confirmGo[data-tone=info]:hover:not(:disabled){filter:brightness(1.08)}.jbF1yq_confirmGo:disabled{opacity:.5;cursor:default}.jbF1yq_wfMetricWide{grid-column:span 1}.jbF1yq_wfMetricSpark{align-items:center;gap:var(--nf-space-8,8px);min-width:0;margin-top:6px;display:flex}.jbF1yq_wfMetricSpark svg{flex:none;width:132px;height:26px;overflow:visible}.jbF1yq_wfMetricSparkNote{min-width:0;font-size:var(--nf-fs-notice,12px);color:var(--nf-text-3);white-space:nowrap;text-overflow:ellipsis;flex:1;overflow:hidden}@container jbF1yq_nfpanel (width<=560px){.jbF1yq_wfMetricSpark svg{display:none}}.jbF1yq_cardHead{justify-content:space-between;align-items:center;gap:var(--nf-space-8,8px);flex-wrap:wrap;min-width:0;display:flex}.jbF1yq_cardHeadLeft{align-items:baseline;gap:var(--nf-space-8,8px);flex-wrap:wrap;min-width:0;display:flex}.jbF1yq_cardHeadNote{font-size:var(--nf-fs-14,14px);color:var(--nf-text-3);text-overflow:ellipsis;min-width:0;overflow:hidden}.jbF1yq_cardHeadCount{color:var(--nf-text-3);font-weight:500}.jbF1yq_cardHeadActions{align-items:center;gap:var(--nf-space-6,6px);flex-wrap:wrap;flex:none;justify-content:flex-end;display:flex}.jbF1yq_rowBetween{justify-content:space-between}.jbF1yq_rowBetweenWrap{flex-wrap:wrap}.jbF1yq_rowBetweenBaseline{align-items:baseline}.jbF1yq_rowEnd{justify-content:flex-end}.jbF1yq_drawerTitle{align-items:center;gap:7px;min-width:0;display:flex}.jbF1yq_drawerTitleNi{color:var(--nf-text-3);flex:none;align-items:center;display:inline-flex}.jbF1yq_topNavNi{align-items:center;display:inline-flex}.jbF1yq_topNavNi>svg,.jbF1yq_drawerTitleNi>svg{stroke-width:1.75px;width:1em;height:1em}.jbF1yq_wfRailWrap{margin:var(--nf-space-14,14px) var(--nf-space-18,18px) 0;overscroll-behavior-x:contain;scrollbar-width:thin;overflow-x:auto}.jbF1yq_wfRailWrap>.jbF1yq_wfRail{min-width:520px;margin:0}.jbF1yq_topNavMenu{align-items:center;display:inline-flex;position:relative}.jbF1yq_topNavChevron{opacity:.65;margin-left:1px;font-size:12px;line-height:1}.jbF1yq_topNavMenuPanel{z-index:5;border:1px solid var(--nf-line,var(--nf-border));border-radius:var(--nf-r,12px);background:var(--nf-bg-raise);flex-direction:column;min-width:188px;padding:7px;display:flex;position:absolute;top:calc(100% + 8px);right:0;box-shadow:0 14px 30px #26221b24}.jbF1yq_topNavMenuHint{color:var(--nf-text-3,var(--nf-text-2));font-size:var(--nf-fs-caption,11px);letter-spacing:.08em;padding:5px 9px 6px}.jbF1yq_topNavMenuItem{border-radius:var(--nf-r-sm,8px);width:100%;min-height:32px;color:var(--nf-text-2);font-size:var(--nf-fs-meta,12px);text-align:left;cursor:pointer;background:0 0;border:1px solid #0000;align-items:center;gap:8px;padding:6px 9px;display:flex}.jbF1yq_topNavMenuItem:hover,.jbF1yq_topNavMenuItemActive{border-color:color-mix(in srgb, var(--nf-ai) 30%, transparent);background:var(--nf-ai-soft);color:var(--nf-ai)}.jbF1yq_topNavMenuItem .jbF1yq_topNavBadge{margin-left:auto}.jbF1yq_worldIntro,.jbF1yq_worldSection,.jbF1yq_timelineSurface{gap:var(--nf-space-12,12px)}.jbF1yq_worldNote{max-width:var(--nf-measure,720px);color:var(--nf-text-2);font-size:var(--nf-fs-meta,12px);line-height:var(--nf-lh-body,1.65);padding:8px 10px}.jbF1yq_worldSection .jbF1yq_cardHead{border-bottom:1px solid var(--nf-line-2,var(--nf-border));padding-bottom:8px}.jbF1yq_timelineIssues{border:1px solid color-mix(in srgb, var(--nf-warn) 45%, var(--nf-border));border-radius:var(--nf-radius-8,8px);padding:var(--nf-space-8,8px);background:color-mix(in srgb, var(--nf-warn) 7%, var(--nf-bg-inset))}.jbF1yq_timelineEvents{gap:var(--nf-space-12,12px);border-top:1px solid var(--nf-line-2,var(--nf-border));flex-direction:column;max-height:52vh;padding:4px 8px 8px;display:flex;overflow-y:auto}.jbF1yq_timelineChapter{padding-top:4px}.jbF1yq_timelineChapterEvents{gap:var(--nf-space-4,4px);flex-direction:column;display:flex}.jbF1yq_timelineEvent{border-bottom:1px solid var(--nf-line-2,var(--nf-border));font-size:var(--nf-fs-meta,12px);line-height:var(--nf-lh-body,1.65);transition:background var(--nf-dur-base,.15s) ease;padding:7px 4px}.jbF1yq_timelineEvent:hover{background:color-mix(in srgb, var(--nf-bg-inset) 72%, transparent)}.jbF1yq_runSurface{background:var(--nf-bg-raise)}.jbF1yq_runSurface .jbF1yq_runLog{border-color:var(--nf-line-2,var(--nf-border));background:var(--nf-bg-deep)}.jbF1yq_runSurface .jbF1yq_bigProgressBar{margin-top:2px}.jbF1yq_chWorkSurface,.jbF1yq_chWorkMainSurface{background:var(--nf-bg)}.jbF1yq_chWorkBarStack{background:var(--nf-bg-deep)}.jbF1yq_chWorkAsideSurface,.jbF1yq_chWorkSideSurface{background:var(--nf-bg-raise)}.jbF1yq_shelfSearchWrap{flex:220px;align-items:center;min-width:min(100%,220px);display:flex;position:relative}@container jbF1yq_nfpanel (width<=760px){.jbF1yq_shelfSearchWrap{flex-basis:100%}}.jbF1yq_runLogDetails{flex:1;min-height:0}.jbF1yq_runLogDetails>summary{cursor:pointer;list-style:none}.jbF1yq_runLogDetails>summary::-webkit-details-marker{display:none}.jbF1yq_runLogDetails>summary:before{content:\"▸\";margin-right:var(--nf-space-4,4px);color:var(--nf-text-3);transition:transform .16s;display:inline-block}.jbF1yq_runLogDetails[open]>summary:before{transform:rotate(90deg)}.jbF1yq_authorStrip{gap:var(--nf-space-8,8px);padding:var(--nf-space-12,12px) var(--nf-space-14,14px);border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-14,14px);background:var(--nf-glass-face);flex-direction:column;flex-shrink:0;display:flex}.jbF1yq_authorStripMain{gap:var(--nf-space-2,2px);flex-direction:column;min-width:0;display:flex}.jbF1yq_authorStripMain>b{font-family:var(--nf-font-display,inherit);font-size:var(--nf-fs-16,16px);color:var(--nf-text);font-weight:400;line-height:1.4}.jbF1yq_authorStripStats{gap:var(--nf-space-16,16px);font-size:var(--nf-fs-12,12px);font-variant-numeric:tabular-nums;flex-wrap:wrap;display:flex}.jbF1yq_authorStripStats>span{align-items:baseline;gap:var(--nf-space-4,4px);display:flex}.jbF1yq_authorStripStats b{font-size:var(--nf-fs-16,16px);color:var(--nf-text);font-weight:600}.jbF1yq_authorStripStats i{color:var(--nf-text-3);font-style:normal}.jbF1yq_authorStripStats>span[data-tone=bad] b,.jbF1yq_authorStripStats>span[data-tone=bad] i{color:var(--nf-error-ink)}.jbF1yq_authorStripStats>span[data-tone=warn] b,.jbF1yq_authorStripStats>span[data-tone=warn] i{color:var(--nf-warn-ink)}.jbF1yq_runQueue{gap:var(--nf-space-8,8px);flex-direction:column;flex-shrink:0;display:flex}.jbF1yq_runQueueHead{align-items:center;gap:var(--nf-space-10,10px);display:flex}.jbF1yq_runQueueHead>:first-child{flex:1;min-width:0}.jbF1yq_runQueueList{border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);flex-direction:column;display:flex;overflow:hidden}.jbF1yq_runQueueRow{align-items:center;gap:var(--nf-space-10,10px);padding:var(--nf-space-6,6px) var(--nf-space-12,12px);font-size:var(--nf-fs-12,12px);border-bottom:1px solid var(--nf-border);background:0 0;grid-template-columns:68px minmax(0,1fr) auto 68px 84px 76px auto;display:grid}.jbF1yq_runQueueRow:last-child{border-bottom:none}.jbF1yq_runQueueRow:hover{background:var(--nf-bg-inset)}.jbF1yq_runQueueRow[data-current=\"1\"]{background:color-mix(in srgb, var(--nf-ai) 12%, transparent)}.jbF1yq_runQueueNo{color:var(--nf-text-3);font-variant-numeric:tabular-nums;white-space:nowrap}.jbF1yq_runQueueTitle{color:var(--nf-text);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.jbF1yq_runQueueMeta{color:var(--nf-text-3);font-variant-numeric:tabular-nums;white-space:nowrap}.jbF1yq_runQueueMeta[data-tone=bad]{color:var(--nf-error-ink)}.jbF1yq_runQueueActions{justify-content:flex-end;display:flex}.jbF1yq_runQueueActions button{opacity:.75}.jbF1yq_runQueueRow:hover .jbF1yq_runQueueActions button{opacity:1}@container jbF1yq_nfpanel (width<=820px){.jbF1yq_runQueueRow{row-gap:var(--nf-space-4,4px);grid-template-columns:62px minmax(0,1fr) auto}.jbF1yq_runQueueActions{grid-column:3;justify-content:flex-end}}.jbF1yq_planGroups{gap:var(--nf-space-12,12px);flex-direction:column;display:flex}.jbF1yq_planGroup{gap:var(--nf-space-6,6px);padding-bottom:var(--nf-space-10,10px);border-bottom:1px solid var(--nf-line-2,var(--nf-border));flex-direction:column;display:flex}.jbF1yq_planGroup:last-child{border-bottom:none;padding-bottom:0}.jbF1yq_planGroupHead{align-items:center;gap:var(--nf-space-6,6px);display:flex}.jbF1yq_planGroupTitle{font-size:var(--nf-fs-12,12px);letter-spacing:.06em;color:var(--nf-muted,var(--nf-text-2));font-weight:600}.jbF1yq_planGroupSpacer{flex:1;min-width:0}.jbF1yq_planGroupText{font-size:var(--nf-fs-12,12px);color:var(--nf-text);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;line-height:1.7}.jbF1yq_planBeatLines{gap:var(--nf-space-2,2px);flex-direction:column;display:flex}.jbF1yq_planBeatLine{font-size:var(--nf-fs-12,12px);color:var(--nf-text);line-height:1.7}.jbF1yq_planBeatRole{color:var(--nf-accent)}.jbF1yq_planListWrap{gap:var(--nf-space-4,4px);flex-direction:column;display:flex}.jbF1yq_planListLabel{font-size:var(--nf-fs-10,10px);letter-spacing:.08em;color:var(--nf-muted,var(--nf-text-2))}.jbF1yq_planList{gap:var(--nf-space-2,2px);flex-direction:column;margin:0;padding-left:1.2em;display:flex}.jbF1yq_planListItem{font-size:var(--nf-fs-12,12px);color:var(--nf-text);line-height:1.6}.jbF1yq_planOpTag{margin-right:var(--nf-space-4,4px);padding:0 var(--nf-space-6,6px);background:var(--nf-accent-soft);color:var(--nf-accent);font-size:var(--nf-fs-10,10px);border-radius:999px;display:inline-block}.jbF1yq_planGroupEmpty{gap:var(--nf-space-4,4px);flex-direction:column;display:flex}.jbF1yq_planGroupEmptyTitle{font-size:var(--nf-fs-12,12px);color:var(--nf-text)}.jbF1yq_planGroupEmptyHint{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);line-height:1.5}.jbF1yq_planGroupEdit,.jbF1yq_planEditField{gap:var(--nf-space-4,4px);flex-direction:column;display:flex}.jbF1yq_planGroupEdit{gap:var(--nf-space-8,8px)}.jbF1yq_planEditActions{gap:var(--nf-space-6,6px);flex-wrap:wrap;display:flex}.jbF1yq_wfStOk{--st:var(--wf-ok)}.jbF1yq_wfStGen{--st:var(--wf-ai)}.jbF1yq_wfStPend{--st:var(--wf-idle)}.jbF1yq_wfStErr{--st:var(--nf-error-ink)}.jbF1yq_wfPs.jbF1yq_wfStPend{background-image:linear-gradient(180deg, var(--st-band) 0 6px, transparent 6px), repeating-linear-gradient(45deg, color-mix(in srgb, var(--st-band) 80%, transparent) 0 6px, transparent 6px 12px)}.jbF1yq_chWorkBarStack{gap:var(--nf-space-8,8px);padding:var(--nf-space-10,10px) var(--nf-space-14,14px);border-bottom:1px solid var(--nf-border);flex-direction:column;display:flex}.jbF1yq_chWorkBarRow{align-items:center;gap:var(--nf-space-10,10px);flex-wrap:wrap;min-width:0;display:flex}.jbF1yq_chWorkBarRow .jbF1yq_chWorkTitle{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.jbF1yq_chWorkGrid.jbF1yq_chWorkGridFocus{grid-template-columns:minmax(0,1fr)}.jbF1yq_chWorkMainFocus{grid-column:1/-1}.jbF1yq_chWorkGridFocus .jbF1yq_chWorkAside,.jbF1yq_chWorkGridFocus .jbF1yq_chWorkSide{display:none}.jbF1yq_chWorkMainFocus .jbF1yq_chWorkText{width:100%;max-width:var(--nf-measure,720px);margin:0 auto}.jbF1yq_reviewIssues{gap:var(--nf-space-8,8px);flex-direction:column;display:flex}.jbF1yq_reviewIssue{align-items:flex-start;gap:var(--nf-space-8,8px);padding:var(--nf-space-8,8px) var(--nf-space-10,10px);border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);background:var(--nf-bg-inset);cursor:pointer;display:flex}.jbF1yq_reviewIssue[data-sev=high]{border-color:color-mix(in srgb, var(--nf-error) 42%, transparent)}.jbF1yq_reviewIssue[data-sev=medium]{border-color:color-mix(in srgb, var(--nf-warn) 42%, transparent)}.jbF1yq_reviewIssue[data-on=\"1\"]{background:color-mix(in srgb, var(--nf-accent) 7%, var(--nf-bg-inset))}.jbF1yq_reviewIssueBody{gap:var(--nf-space-2,2px);flex-direction:column;min-width:0;display:flex}.jbF1yq_reviewIssueHead{align-items:center;gap:var(--nf-space-6,6px);flex-wrap:wrap;display:flex}.jbF1yq_reviewIssueSev{font-size:var(--nf-fs-12,12px);padding:0 var(--nf-space-6,6px);border:1px solid;border-radius:999px;font-weight:600;line-height:1.5}.jbF1yq_reviewIssue[data-sev=high] .jbF1yq_reviewIssueSev{color:var(--nf-error-ink)}.jbF1yq_reviewIssue[data-sev=medium] .jbF1yq_reviewIssueSev{color:var(--nf-warn-ink)}.jbF1yq_reviewIssue[data-sev=low] .jbF1yq_reviewIssueSev{color:var(--nf-info-ink)}.jbF1yq_reviewIssueDim{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3)}.jbF1yq_reviewIssueItem{font-size:var(--nf-fs-14,14px);color:var(--nf-text);line-height:1.55}.jbF1yq_reviewIssueFix{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);line-height:1.55}.jbF1yq_reviewIssueExcerpt{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);line-height:1.5}.jbF1yq_reviewIssuePick{margin-top:var(--nf-space-2,2px);padding-top:var(--nf-space-4,4px);border-top:1px solid var(--nf-line-2,var(--nf-border));font-size:var(--nf-fs-12,12px);letter-spacing:.04em;color:var(--nf-muted,var(--nf-text-2))}.jbF1yq_chWorkSkeleton{gap:var(--nf-space-12,12px);min-height:0;padding:var(--nf-space-20,20px) var(--nf-space-24,24px);background-color:var(--nf-bg-raise);flex-direction:column;flex:1;display:flex;overflow:hidden}.jbF1yq_skeletonLine{background:linear-gradient(90deg, var(--nf-bg-inset) 0%, color-mix(in srgb, var(--nf-text-3) 22%, var(--nf-bg-inset)) 50%, var(--nf-bg-inset) 100%);background-size:200% 100%;border-radius:6px;height:12px;animation:1.4s ease-in-out infinite jbF1yq_nfSkeletonSweep}@media (prefers-reduced-motion:reduce){.jbF1yq_skeletonLine{animation:none}}.jbF1yq_homeHero{gap:var(--nf-space-28,28px);padding:var(--nf-space-32,32px);border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-14,14px);background:linear-gradient(116deg, var(--nf-bg-raise), var(--nf-bg-inset));grid-template-columns:minmax(0,1fr) minmax(220px,30%);display:grid}.jbF1yq_homeHeroMain{gap:var(--nf-space-8,8px);flex-direction:column;min-width:0;display:flex}.jbF1yq_homeHeroKicker{align-items:center;gap:var(--nf-space-8,8px);font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);flex-wrap:wrap;display:flex}.jbF1yq_homeHeroKicker b{color:var(--nf-seal);letter-spacing:.06em;font-weight:500}.jbF1yq_homeHeroTitle{font-family:var(--nf-font-display);font-size:var(--nf-fs-34,34px);color:var(--nf-text);margin:0;font-weight:400;line-height:1.35}.jbF1yq_homeHeroWhy{max-width:62ch;font-size:var(--nf-fs-14,14px);color:var(--nf-text-2);margin:0;line-height:1.7}.jbF1yq_homeHeroActs{align-items:center;gap:var(--nf-space-10,10px);margin-top:var(--nf-space-20,20px);flex-wrap:wrap;display:flex}.jbF1yq_homeHeroCta{border-radius:var(--nf-radius-10,10px);padding:var(--nf-space-10,10px) var(--nf-space-20,20px);background:var(--nf-seal);color:var(--nf-accent-fg);font-size:var(--nf-fs-14,14px);cursor:pointer;border:none;font-weight:600;transition:filter .15s}.jbF1yq_homeHeroCta:hover:not(:disabled){filter:brightness(1.08)}.jbF1yq_homeHeroCta:disabled{opacity:.5;cursor:not-allowed}.jbF1yq_homeHeroAlt{border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);padding:var(--nf-space-10,10px) var(--nf-space-16,16px);color:var(--nf-text-2);font-size:var(--nf-fs-14,14px);cursor:pointer;background:0 0}.jbF1yq_homeHeroAlt:hover{color:var(--nf-text);border-color:var(--nf-line-2)}.jbF1yq_homeHeroMeta{gap:var(--nf-space-16,16px);margin-top:var(--nf-space-4,4px);font-size:var(--nf-fs-12,12px);flex-wrap:wrap;display:flex}.jbF1yq_homeHeroMeta>span{align-items:baseline;gap:var(--nf-space-4,4px);color:var(--nf-text-3);display:flex}.jbF1yq_homeHeroMeta i{font-style:normal}.jbF1yq_homeHeroMeta b{color:var(--nf-text-2);font-variant-numeric:tabular-nums;font-weight:600}.jbF1yq_homeHeroMeta>span[data-tone=bad] b{color:var(--nf-error-ink)}.jbF1yq_homeHeroMeta>span[data-tone=warn] b{color:var(--nf-warn-ink)}.jbF1yq_homeHeroMeta>span[data-tone=ok] b{color:var(--nf-success-ink)}.jbF1yq_homeHeroSide{gap:var(--nf-space-14,14px);padding-left:var(--nf-space-20,20px);border-left:1px solid var(--nf-border);flex-direction:column;min-width:0;display:flex}.jbF1yq_homeHeroSealRow{align-items:center;gap:var(--nf-space-12,12px);display:flex}.jbF1yq_homeHeroSeal{justify-content:center;align-items:center;gap:var(--nf-space-2,2px);border:1px solid color-mix(in srgb, var(--nf-seal) 55%, transparent);border-radius:var(--nf-radius-10,10px);width:62px;height:62px;color:var(--nf-seal);text-align:center;flex-direction:column;flex:none;display:flex}.jbF1yq_homeHeroSeal b{font-family:var(--nf-font-display);font-size:var(--nf-fs-22,22px);font-weight:500;line-height:1}.jbF1yq_homeHeroSeal span{font-size:var(--nf-fs-10,10px);color:var(--nf-text-3);line-height:1.2}.jbF1yq_homeHeroStage{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);line-height:1.5}.jbF1yq_homeHeroBatch{gap:var(--nf-space-6,6px);flex-direction:column;display:flex}.jbF1yq_homeHeroBatchHead{justify-content:space-between;align-items:baseline;gap:var(--nf-space-8,8px);font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);display:flex}.jbF1yq_homeHeroBatchHead b{font-size:var(--nf-fs-20,20px);color:var(--nf-text);font-variant-numeric:tabular-nums}.jbF1yq_homeHeroBatchBar{background:var(--nf-bg-inset);border-radius:3px;height:6px;overflow:hidden}.jbF1yq_homeHeroBatchFill{transform-origin:0;background:var(--nf-seal);height:100%;transition:transform .3s}.jbF1yq_homeHeroBatchCap{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);line-height:1.55}.jbF1yq_homeHeroNodes{gap:var(--nf-space-8,8px);padding-top:var(--nf-space-12,12px);border-top:1px solid var(--nf-border);grid-template-columns:repeat(auto-fit,minmax(78px,1fr));display:grid}.jbF1yq_homeHeroNode{gap:var(--nf-space-2,2px);min-width:0;font-size:var(--nf-fs-12,12px);flex-direction:column;display:flex}.jbF1yq_homeHeroNode span{color:var(--nf-text-3)}.jbF1yq_homeHeroNode b{color:var(--nf-text-2);text-overflow:ellipsis;white-space:nowrap;font-weight:500;line-height:1.4;overflow:hidden}.jbF1yq_homeHeroNode[data-tone=done] b{color:var(--nf-text-3)}.jbF1yq_homeHeroNode[data-tone=now] span{color:var(--nf-seal)}.jbF1yq_homeHeroNode[data-tone=now] b{color:var(--nf-text)}.jbF1yq_inbox{gap:var(--nf-space-10,10px);padding:var(--nf-space-12,12px) var(--nf-space-14,14px);border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-14,14px);background:var(--nf-glass-face);flex-direction:column;display:flex}.jbF1yq_inboxHead{align-items:baseline;gap:var(--nf-space-10,10px);display:flex}.jbF1yq_inboxTitle{font-size:var(--nf-fs-14,14px);color:var(--nf-text);font-weight:600}.jbF1yq_inboxCount{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);font-variant-numeric:tabular-nums}.jbF1yq_inboxAll{color:var(--nf-info-ink);font-size:var(--nf-fs-12,12px);cursor:pointer;background:0 0;border:none;margin-left:auto}.jbF1yq_inboxEmpty{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);line-height:1.6}.jbF1yq_inboxList{gap:var(--nf-space-8,8px);flex-direction:column;display:flex}.jbF1yq_inboxItem{align-items:flex-start;gap:var(--nf-space-8,8px);padding:var(--nf-space-8,8px) var(--nf-space-10,10px);border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);background:var(--nf-bg-inset);display:flex}.jbF1yq_inboxItem[data-tone=high]{border-color:color-mix(in srgb, var(--nf-error) 40%, transparent)}.jbF1yq_inboxItem[data-tone=warn]{border-color:color-mix(in srgb, var(--nf-warn) 38%, transparent)}.jbF1yq_inboxBadge{padding:0 var(--nf-space-6,6px);font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);border:1px solid;border-radius:999px;flex:none;line-height:1.6}.jbF1yq_inboxItem[data-tone=high] .jbF1yq_inboxBadge{color:var(--nf-error-ink)}.jbF1yq_inboxItem[data-tone=warn] .jbF1yq_inboxBadge{color:var(--nf-warn-ink)}.jbF1yq_inboxItem[data-tone=info] .jbF1yq_inboxBadge{color:var(--nf-info-ink)}.jbF1yq_inboxBody{gap:var(--nf-space-2,2px);flex-direction:column;flex:1;min-width:0;display:flex}.jbF1yq_inboxItemTitle{font-size:var(--nf-fs-14,14px);color:var(--nf-text);line-height:1.5}.jbF1yq_inboxSource{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3)}.jbF1yq_inboxDetail{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);line-height:1.55}.jbF1yq_inboxAct{border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);padding:var(--nf-space-4,4px) var(--nf-space-10,10px);color:var(--nf-text-2);font-size:var(--nf-fs-12,12px);cursor:pointer;white-space:nowrap;background:0 0;flex:none}.jbF1yq_inboxAct:hover{color:var(--nf-text);border-color:var(--nf-line-2)}.jbF1yq_inboxMore{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);padding-left:var(--nf-space-4,4px)}.jbF1yq_cabinetSnapshot{gap:var(--nf-space-8,8px);flex-direction:column;display:flex}.jbF1yq_cabinetCard{gap:var(--nf-space-4,4px);padding:var(--nf-space-10,10px) var(--nf-space-12,12px);border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);background:var(--nf-bg-inset);flex-direction:column;display:flex}.jbF1yq_cabinetCardHead{align-items:baseline;gap:var(--nf-space-6,6px);font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);display:flex}.jbF1yq_cabinetCardHead b{color:var(--nf-text-2);font-weight:600}.jbF1yq_cabinetCardBody{font-size:var(--nf-fs-14,14px);color:var(--nf-text);line-height:1.6}.jbF1yq_cabinetCardMeta{justify-content:space-between;gap:var(--nf-space-8,8px);font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);font-variant-numeric:tabular-nums;display:flex}.jbF1yq_cabinetCardMeta span[data-tone=ok]{color:var(--nf-success-ink)}.jbF1yq_cabinetCardMeta span[data-tone=warn]{color:var(--nf-warn-ink)}.jbF1yq_cabinetCardEmpty{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);line-height:1.6}.jbF1yq_wfCard1{gap:var(--nf-space-14,14px);grid-template-columns:minmax(0,1fr);display:grid}.jbF1yq_cabinetAll{gap:var(--nf-space-4,4px);margin-top:var(--nf-space-8,8px);flex-direction:column;display:flex}.jbF1yq_cabinetAll>summary{cursor:pointer;font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);list-style:none}.jbF1yq_cabinetAll>summary::-webkit-details-marker{display:none}.jbF1yq_cabinetAll>summary:before{content:\"▸\";margin-right:var(--nf-space-4,4px);transition:transform .16s;display:inline-block}.jbF1yq_cabinetAll[open]>summary:before{transform:rotate(90deg)}@container jbF1yq_nfpanel (width<=760px){.jbF1yq_homeHero{grid-template-columns:minmax(0,1fr)}.jbF1yq_homeHeroSide{padding-left:0;padding-top:var(--nf-space-14,14px);border-left:none;border-top:1px solid var(--nf-border)}}@container jbF1yq_nfpanel (width<=820px){.jbF1yq_homeHeroTitle{font-size:var(--nf-fs-22,22px)}.jbF1yq_inboxItem{flex-wrap:wrap}.jbF1yq_inboxAct{margin-left:auto}}.jbF1yq_contentDrawer.jbF1yq_drawerNarrow{width:min(420px,92vw)}.jbF1yq_cabinetDrawer{gap:var(--nf-space-12,12px);flex-direction:column;display:flex}.jbF1yq_wfFtime{color:var(--nf-text-3);font-size:var(--nf-fs-12,12px);font-variant-numeric:tabular-nums;white-space:nowrap;flex:none;margin-left:auto}.jbF1yq_readingCol{max-width:var(--nf-measure,720px);line-height:1.8}.jbF1yq_assetConflicts{gap:var(--nf-space-6,6px);margin-top:var(--nf-space-8,8px);flex-direction:column;display:flex}.jbF1yq_assetConflict{align-items:flex-start;gap:var(--nf-space-8,8px);padding:var(--nf-space-8,8px) var(--nf-space-10,10px);border:1px solid color-mix(in srgb, var(--nf-warn) 40%, transparent);border-radius:var(--nf-radius-10,10px);background:var(--nf-bg-inset);display:flex}.jbF1yq_assetConflictIcon{color:var(--nf-warn-ink);flex:none;font-weight:700}.jbF1yq_assetConflictText{min-width:0;font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);flex:1;line-height:1.6}.jbF1yq_assetConflictFix{border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);padding:var(--nf-space-4,4px) var(--nf-space-10,10px);color:var(--nf-text-2);font-size:var(--nf-fs-12,12px);cursor:pointer;white-space:nowrap;background:0 0;flex:none}.jbF1yq_assetConflictFix:hover:not(:disabled){color:var(--nf-text);border-color:var(--nf-line-2)}.jbF1yq_assetConflictFix:disabled{opacity:.5;cursor:not-allowed}.jbF1yq_skeletonBlock{gap:var(--nf-space-12,12px);padding:var(--nf-space-16,16px) 0;flex-direction:column;display:flex}.jbF1yq_homeHero{grid-template-columns:minmax(0,1fr) minmax(230px,290px);gap:20px;min-height:0;padding:14px 18px}.jbF1yq_homeHero:before{opacity:.38;width:56px;height:56px;top:12px;right:16px}.jbF1yq_homeHero:after{width:220px;height:220px;bottom:-96px;right:-40px}.jbF1yq_homeHeroKicker{gap:8px}.jbF1yq_homeHeroTitle{max-width:46ch;margin:4px 0 0;font-size:clamp(20px,1.9vw,28px);line-height:1.28}.jbF1yq_homeHeroWhy{-webkit-line-clamp:2;-webkit-box-orient:vertical;max-width:66ch;margin:6px 0 0;font-size:13px;line-height:1.6;display:-webkit-box;overflow:hidden}.jbF1yq_homeHeroActs{margin-top:12px}.jbF1yq_homeHeroMeta{gap:14px;margin-top:8px}.jbF1yq_homeHeroSide{justify-content:flex-start;gap:6px;padding:0 0 0 18px}.jbF1yq_homeHeroSealRow{align-items:center;margin-bottom:2px}.jbF1yq_homeHeroStage{font-size:10px;line-height:1.4}.jbF1yq_homeHeroNodes{grid-template-columns:repeat(auto-fit,minmax(62px,1fr));gap:8px;margin-top:6px;padding-top:8px}.jbF1yq_homeHeroNode b{margin-bottom:2px}@container jbF1yq_nfpanel (width<=1080px){.jbF1yq_homeHeroSide{border-top:1px solid color-mix(in srgb, var(--nf-ai) 22%, var(--nf-line));border-left:none;flex-direction:row;justify-content:space-between;align-items:center;gap:14px;padding:10px 0 0}.jbF1yq_homeHeroSealRow{margin-bottom:0}.jbF1yq_homeHeroNodes{border-top:none;margin-top:0;padding-top:0}.jbF1yq_homeHeroNodes:before{display:none}}@media (pointer:coarse){.jbF1yq_view .jbF1yq_panel :is(.jbF1yq_button,.jbF1yq_buttonSmall,.jbF1yq_iconButton,.jbF1yq_iconBtn,.jbF1yq_topNavBtn,.jbF1yq_cmdItem,.jbF1yq_pillNavPill,.jbF1yq_assetFilterChip){position:relative}.jbF1yq_view .jbF1yq_panel :is(.jbF1yq_button,.jbF1yq_buttonSmall,.jbF1yq_iconButton,.jbF1yq_iconBtn,.jbF1yq_topNavBtn,.jbF1yq_cmdItem,.jbF1yq_pillNavPill,.jbF1yq_assetFilterChip):after,.jbF1yq_runChip:after{content:\"\";pointer-events:auto;width:max(100%,44px);height:max(100%,44px);position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}}.jbF1yq_homeHero{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:16px;padding:10px 14px}.jbF1yq_homeHeroMain{flex-flow:wrap;align-items:center;gap:10px 12px;max-width:none}.jbF1yq_homeHeroKicker{flex:none}.jbF1yq_homeHeroTitle{flex:none;max-width:none;margin:0;font-size:19px;line-height:1.3}.jbF1yq_homeHeroWhy{-webkit-line-clamp:1;max-width:30ch;margin:0;font-size:12px;line-height:1.5}.jbF1yq_homeHeroActs{gap:8px;margin:0}.jbF1yq_homeHeroCta{padding:7px 14px;font-size:13px}.jbF1yq_homeHeroAlt{padding:7px 12px;font-size:13px}.jbF1yq_homeHeroMeta{gap:12px;margin:0 0 0 4px;font-size:11px}.jbF1yq_homeHeroSeal{width:36px;height:36px;box-shadow:none}.jbF1yq_homeHeroSeal b{font-size:15px}.jbF1yq_homeHeroSeal span{font-size:9px}.jbF1yq_homeHeroStage{letter-spacing:.08em;font-size:10px}.jbF1yq_homeHeroBatch{flex:none;gap:3px;width:132px}.jbF1yq_homeHeroBatchHead{margin:0}.jbF1yq_homeHeroBatchHead b{font-size:15px}.jbF1yq_homeHeroBatchBar{height:4px}.jbF1yq_homeHeroBatchCap{font-size:9px;line-height:1.3}.jbF1yq_homeHeroNodes{border-top:none;border-left:1px solid var(--nf-line-2);grid-template-columns:repeat(3,auto);gap:10px;margin:0;padding:0 0 0 14px}.jbF1yq_homeHeroNodes:before{display:none}.jbF1yq_homeHeroNode b{margin:0;font-size:10px}.jbF1yq_homeHeroNode span{font-size:9px}@container jbF1yq_nfpanel (width<=1080px){.jbF1yq_homeHero{grid-template-columns:minmax(0,1fr);gap:8px}.jbF1yq_homeHeroSide{border-top:1px solid var(--nf-line-2);flex-wrap:wrap;gap:10px 14px;padding:8px 0 0}.jbF1yq_homeHeroNodes{border-left:none;padding-left:0}}.jbF1yq_inbox{gap:var(--nf-space-10,10px)}.jbF1yq_inboxList{gap:var(--nf-space-8,8px);grid-template-columns:repeat(auto-fill,minmax(300px,1fr));align-items:start;max-height:46vh;display:grid;overflow-y:auto}.jbF1yq_inboxItem{min-width:0}@container jbF1yq_nfpanel (width<=820px){.jbF1yq_inboxList{grid-template-columns:minmax(0,1fr)}}.jbF1yq_homeHeroPool{grid-column:1/-1;align-items:center;gap:12px;min-width:0;display:flex}.jbF1yq_heroPoolBar{flex:auto;gap:2px;min-width:0;display:flex}.jbF1yq_heroPoolMeta{color:var(--nf-text-3);letter-spacing:.02em;flex-wrap:wrap;flex:none;gap:10px;font-size:11px;display:flex}.jbF1yq_heroPoolLegend{align-items:center;gap:4px;display:inline-flex}.jbF1yq_heroPoolLegend i{background:var(--nf-bg-inset);border-radius:2px;width:7px;height:7px}.jbF1yq_heroPoolLegend[data-st=ok] i{background:var(--nf-success,#4f8750)}.jbF1yq_heroPoolLegend[data-st=rev] i{background:var(--nf-human,#2f6fa3)}.jbF1yq_heroPoolLegend[data-st=fix] i{background:var(--nf-seal,#a63e2a)}.jbF1yq_heroPoolLegend[data-st=gen] i{background:var(--nf-ai,#c07c22)}.jbF1yq_heroPoolLegend[data-st=pend] i{background:color-mix(in srgb, var(--nf-text-3,#726858) 40%, transparent)}.jbF1yq_heroPoolLegend[data-st=err] i{background:var(--nf-error-ink,#a63e2a)}.jbF1yq_heroPoolEmpty{color:var(--nf-text-3);font-size:12px}.jbF1yq_wfMetrics{border:1px solid var(--nf-line);border-radius:var(--nf-radius-10,10px);background:0 0;align-items:stretch;gap:0;padding:0;display:flex;overflow:hidden}.jbF1yq_wfMetric{border:none;border-left:1px solid var(--nf-line);min-width:0;box-shadow:none;background:0 0;border-radius:0;flex:1 1 0;padding:9px 14px}.jbF1yq_wfMetric:first-child{border-left:none}.jbF1yq_wfMetric>span{color:var(--nf-text-3);letter-spacing:.02em;font-size:11px}.jbF1yq_wfMetric>b{font-family:var(--nf-font-display);font-variant-numeric:tabular-nums;font-size:22px;line-height:1.25}.jbF1yq_wfMetric>small{color:var(--nf-text-3);font-size:10px}.jbF1yq_wfMetricWide{flex:1.15 1 0}.jbF1yq_wfMetricSpark{margin-top:1px}.jbF1yq_heroPoolBar{justify-content:flex-start}.jbF1yq_wfMetric>b[data-bad=yes]{color:var(--nf-error-ink,#a63e2a)}@container jbF1yq_nfpanel (width<=1180px){.jbF1yq_wfMetrics{flex-wrap:wrap}.jbF1yq_wfMetric{border-left:1px solid var(--nf-line);flex:28%}.jbF1yq_wfMetric:nth-child(4n+1){border-left:none}}.jbF1yq_wfMetric>b[data-word=yes]{color:var(--nf-text-3);font-family:var(--nf-font);font-size:15px}.jbF1yq_homeHeroMain{grid-template-columns:minmax(0,1fr) auto;grid-template-areas:\"jbF1yq_kicker jbF1yq_kicker\"\"jbF1yq_title jbF1yq_acts\"\"jbF1yq_why jbF1yq_why\"\"jbF1yq_meta jbF1yq_meta\";align-items:center;gap:3px 18px;max-width:none;display:grid}.jbF1yq_homeHeroKicker{grid-area:jbF1yq_kicker;margin-bottom:2px}.jbF1yq_homeHeroTitle{letter-spacing:.01em;grid-area:jbF1yq_title;margin:0;font-size:23px;line-height:1.25}.jbF1yq_homeHeroActs{grid-area:jbF1yq_acts;gap:8px;margin:0}.jbF1yq_homeHeroWhy{-webkit-line-clamp:2;grid-area:jbF1yq_why;max-width:62ch;margin:1px 0 0;font-size:12.5px;line-height:1.5}.jbF1yq_homeHeroMeta{border-top:1px solid var(--nf-line);grid-area:jbF1yq_meta;gap:14px;margin:7px 0 0;padding-top:7px;font-size:11px}.jbF1yq_homeHeroSide{flex-direction:row;align-items:center;gap:14px;padding:0 0 0 18px}.jbF1yq_homeHeroSealRow{gap:10px;margin:0}.jbF1yq_heroPoolBar{gap:5px}.jbF1yq_heroPoolGroup{background:var(--nf-bg-inset);cursor:pointer;border:none;border-radius:2px;flex:1 1 0;gap:1px;min-width:6px;height:15px;padding:0;display:flex;overflow:hidden}.jbF1yq_heroPoolGroup:hover{filter:brightness(1.12)}.jbF1yq_heroPoolGroup[data-now=yes]{height:21px;box-shadow:inset 0 2px 0 var(--nf-seal,#a63e2a)}.jbF1yq_heroPoolSeg{background:var(--nf-bg-inset);flex:1 1 0;min-width:1px}.jbF1yq_heroPoolSeg[data-st=ok]{background:var(--nf-success,#4f8750)}.jbF1yq_heroPoolSeg[data-st=rev]{background:var(--nf-human,#2f6fa3)}.jbF1yq_heroPoolSeg[data-st=fix]{background:var(--nf-seal,#a63e2a)}.jbF1yq_heroPoolSeg[data-st=gen]{background:var(--nf-ai,#c07c22)}.jbF1yq_heroPoolSeg[data-st=pend]{background:color-mix(in srgb, var(--nf-text-3,#726858) 40%, transparent)}.jbF1yq_heroPoolSeg[data-st=err]{background:var(--nf-error-ink,#a63e2a)}.jbF1yq_heroPoolDone{color:var(--nf-text-3);letter-spacing:.02em;align-items:baseline;gap:5px;font-size:12px;display:inline-flex}.jbF1yq_heroPoolDone b{color:var(--nf-text-2);font-family:var(--nf-font-display);font-variant-numeric:tabular-nums;font-size:15px;font-weight:500}.jbF1yq_heroPoolDoneSep{color:var(--nf-line-2)}.jbF1yq_inboxList{max-height:46vh;display:block;overflow-y:auto}.jbF1yq_inboxItem{border:none;border-top:1px solid var(--nf-line);background:0 0;border-radius:0;grid-template-columns:auto minmax(0,1fr) auto;align-items:start;gap:10px;padding:9px 4px;display:grid}.jbF1yq_inboxItem:first-of-type{border-top:none}.jbF1yq_inboxItem:hover{background:color-mix(in srgb, var(--nf-text-3,#726858) 5%, transparent)}.jbF1yq_inboxBody{flex-direction:column;gap:2px;min-width:0;display:flex}.jbF1yq_inboxActs{flex-direction:column;flex:none;align-items:flex-end;gap:6px;display:flex}.jbF1yq_inboxMoreBtn{color:var(--nf-text-3);cursor:pointer;background:0 0;border:none;padding:0;font-size:11px}.jbF1yq_inboxMoreBtn:hover{color:var(--nf-text)}.jbF1yq_inboxItem[data-open=yes] .jbF1yq_inboxItemTitle{-webkit-line-clamp:unset;display:block;overflow:visible}.jbF1yq_inboxItemTitle[data-clamp=yes],.jbF1yq_inboxDetail[data-clamp=yes]{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.jbF1yq_inboxItem{align-items:center;padding:5px 4px}.jbF1yq_inboxBody{flex-direction:row;align-items:baseline;gap:8px;min-width:0}.jbF1yq_inboxItemTitle{white-space:nowrap;text-overflow:ellipsis;flex:0 auto;min-width:0;overflow:hidden}.jbF1yq_inboxItemTitle[data-open=yes]{white-space:normal}.jbF1yq_inboxSource{flex:none}.jbF1yq_inboxDetail{flex-basis:100%;display:none}.jbF1yq_inboxDetail[data-open=yes]{display:block}.jbF1yq_inboxActs{flex-direction:row;align-items:center;gap:8px}.jbF1yq_inboxItem:has(.jbF1yq_inboxDetail[data-open=yes]){align-items:start}.jbF1yq_inboxList{max-height:50vh}.jbF1yq_wfFeedList{max-height:12vh;overflow-y:auto}.jbF1yq_inbox{min-width:0}.jbF1yq_wfBody{align-items:start}";
36835
+ const tagId = "@waterwx/dsh-novel-forge/panel.module.css";
36836
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
36837
+ const tag = document.createElement("style");
36838
+ tag.dataset.plugin = "@waterwx/dsh-novel-forge";
36839
+ tag.dataset.pluginCss = tagId;
36840
+ tag.textContent = css;
36841
+ document.head.appendChild(tag);
36842
+ }
36843
+ var panel_module_css_default = {
36844
+ "progressLineDone": "jbF1yq_progressLineDone",
36845
+ "wfStErr": "jbF1yq_wfStErr",
36846
+ "wfBlink": "jbF1yq_wfBlink",
36847
+ "toolStepName": "jbF1yq_toolStepName",
36848
+ "reviewIssueDim": "jbF1yq_reviewIssueDim",
36849
+ "homeHeroNodes": "jbF1yq_homeHeroNodes",
36850
+ "nfCmdPop": "jbF1yq_nfCmdPop",
36851
+ "wfTopRight": "jbF1yq_wfTopRight",
36852
+ "planGroups": "jbF1yq_planGroups",
36853
+ "cardHeadActions": "jbF1yq_cardHeadActions",
36854
+ "lfDot": "jbF1yq_lfDot",
36855
+ "chWorkGridFocus": "jbF1yq_chWorkGridFocus",
36856
+ "reviewIssueBody": "jbF1yq_reviewIssueBody",
36857
+ "chWorkAsideTitle": "jbF1yq_chWorkAsideTitle",
36858
+ "pageHeaderTitle": "jbF1yq_pageHeaderTitle",
36859
+ "reviewIssuePick": "jbF1yq_reviewIssuePick",
36860
+ "inboxTitle": "jbF1yq_inboxTitle",
36861
+ "inboxItemTitle": "jbF1yq_inboxItemTitle",
36862
+ "wfToolAmber": "jbF1yq_wfToolAmber",
36863
+ "assetLabel": "jbF1yq_assetLabel",
36864
+ "chWorkSideSurface": "jbF1yq_chWorkSideSurface",
36865
+ "wfCard2": "jbF1yq_wfCard2",
36866
+ "wfMetricSpark": "jbF1yq_wfMetricSpark",
36867
+ "wfTool": "jbF1yq_wfTool",
36868
+ "assistantFloatHeader": "jbF1yq_assistantFloatHeader",
36869
+ "progressLineLive": "jbF1yq_progressLineLive",
36870
+ "active": "jbF1yq_active",
36871
+ "toolLive": "jbF1yq_toolLive",
36872
+ "worldIntro": "jbF1yq_worldIntro",
36873
+ "homeHeroTitle": "jbF1yq_homeHeroTitle",
36874
+ "bookCard": "jbF1yq_bookCard",
36875
+ "noticeSuccess": "jbF1yq_noticeSuccess",
36876
+ "chWorkToolbar": "jbF1yq_chWorkToolbar",
36877
+ "homeHeroBatchHead": "jbF1yq_homeHeroBatchHead",
36878
+ "toolStep": "jbF1yq_toolStep",
36879
+ "wfCmdBtn": "jbF1yq_wfCmdBtn",
36880
+ "genreDesc": "jbF1yq_genreDesc",
36881
+ "noticeActions": "jbF1yq_noticeActions",
36882
+ "inboxMore": "jbF1yq_inboxMore",
36883
+ "wsPreview": "jbF1yq_wsPreview",
36884
+ "readerItemNo": "jbF1yq_readerItemNo",
36885
+ "readerArticle": "jbF1yq_readerArticle",
36886
+ "adaptTable": "jbF1yq_adaptTable",
36887
+ "navGroupLabel": "jbF1yq_navGroupLabel",
36888
+ "assetGroup": "jbF1yq_assetGroup",
36889
+ "adaptOutlinePre": "jbF1yq_adaptOutlinePre",
36890
+ "wfDlDim": "jbF1yq_wfDlDim",
36891
+ "topNavMenu": "jbF1yq_topNavMenu",
36892
+ "assistantStatus": "jbF1yq_assistantStatus",
36893
+ "notice-error": "jbF1yq_notice-error",
36894
+ "chWorkMainSurface": "jbF1yq_chWorkMainSurface",
36895
+ "outlineLi": "jbF1yq_outlineLi",
36896
+ "headSpacer": "jbF1yq_headSpacer",
36897
+ "chatBubbleUser": "jbF1yq_chatBubbleUser",
36898
+ "adaptTextarea": "jbF1yq_adaptTextarea",
36899
+ "brandEn": "jbF1yq_brandEn",
36900
+ "settingsDrawerOverlay": "jbF1yq_settingsDrawerOverlay",
36901
+ "wfConErr": "jbF1yq_wfConErr",
36902
+ "homeHeroMeta": "jbF1yq_homeHeroMeta",
36903
+ "cmdEmpty": "jbF1yq_cmdEmpty",
36904
+ "wfTop": "jbF1yq_wfTop",
36905
+ "wfQtTone": "jbF1yq_wfQtTone",
36906
+ "bookshelf": "jbF1yq_bookshelf",
36907
+ "confirmText": "jbF1yq_confirmText",
36908
+ "outlineP": "jbF1yq_outlineP",
36909
+ "readerMain": "jbF1yq_readerMain",
36910
+ "inboxAll": "jbF1yq_inboxAll",
36911
+ "inboxList": "jbF1yq_inboxList",
36912
+ "kicker": "jbF1yq_kicker",
36913
+ "acts": "jbF1yq_acts",
36914
+ "outlineVol": "jbF1yq_outlineVol",
36915
+ "wfStage": "jbF1yq_wfStage",
36916
+ "notice-warn": "jbF1yq_notice-warn",
36917
+ "assetCardFooter": "jbF1yq_assetCardFooter",
36918
+ "authorPageBodyFlow": "jbF1yq_authorPageBodyFlow",
36919
+ "homeHeroBatchCap": "jbF1yq_homeHeroBatchCap",
36920
+ "planDetailBar": "jbF1yq_planDetailBar",
36921
+ "topNavMenuItemActive": "jbF1yq_topNavMenuItemActive",
36922
+ "noticeText": "jbF1yq_noticeText",
36923
+ "nfToastOut": "jbF1yq_nfToastOut",
36924
+ "importResult": "jbF1yq_importResult",
36925
+ "importPreviewList": "jbF1yq_importPreviewList",
36926
+ "homeHeroBatchBar": "jbF1yq_homeHeroBatchBar",
36927
+ "pillNavPill": "jbF1yq_pillNavPill",
36928
+ "cardHead": "jbF1yq_cardHead",
36929
+ "wfStFail": "jbF1yq_wfStFail",
36930
+ "rowBetweenBaseline": "jbF1yq_rowBetweenBaseline",
36931
+ "homeHeroNode": "jbF1yq_homeHeroNode",
36932
+ "inboxHead": "jbF1yq_inboxHead",
36933
+ "chWorkSurface": "jbF1yq_chWorkSurface",
36934
+ "planGroupEmptyHint": "jbF1yq_planGroupEmptyHint",
36935
+ "heroPoolDone": "jbF1yq_heroPoolDone",
36936
+ "ideaToggle": "jbF1yq_ideaToggle",
36937
+ "assetCardTop": "jbF1yq_assetCardTop",
36938
+ "diffAdd": "jbF1yq_diffAdd",
36939
+ "brandName": "jbF1yq_brandName",
36940
+ "shelfEmpty": "jbF1yq_shelfEmpty",
36941
+ "wfAccentAmber": "jbF1yq_wfAccentAmber",
36942
+ "navSpacer": "jbF1yq_navSpacer",
36943
+ "runQueueList": "jbF1yq_runQueueList",
36944
+ "bookCardCover": "jbF1yq_bookCardCover",
36945
+ "lfPill": "jbF1yq_lfPill",
36946
+ "fadeIn": "jbF1yq_fadeIn",
36947
+ "emptyStateIcon": "jbF1yq_emptyStateIcon",
36948
+ "noticeError": "jbF1yq_noticeError",
36949
+ "readerLoading": "jbF1yq_readerLoading",
36950
+ "coverPlaceholder": "jbF1yq_coverPlaceholder",
36951
+ "assetEditorRow": "jbF1yq_assetEditorRow",
36952
+ "runQueueHead": "jbF1yq_runQueueHead",
36953
+ "assistantFloatBody": "jbF1yq_assistantFloatBody",
36954
+ "adaptTableScroll": "jbF1yq_adaptTableScroll",
36955
+ "readerItemBadge": "jbF1yq_readerItemBadge",
36956
+ "cabinetCardBody": "jbF1yq_cabinetCardBody",
36957
+ "inboxMoreBtn": "jbF1yq_inboxMoreBtn",
36958
+ "rowEnd": "jbF1yq_rowEnd",
36959
+ "wfFeedList": "jbF1yq_wfFeedList",
36960
+ "inboxCount": "jbF1yq_inboxCount",
36961
+ "badge": "jbF1yq_badge",
36962
+ "diffOld": "jbF1yq_diffOld",
36963
+ "settingsCard": "jbF1yq_settingsCard",
36964
+ "pillNavSlider": "jbF1yq_pillNavSlider",
36965
+ "cardTitle": "jbF1yq_cardTitle",
36966
+ "wfAccentBlue": "jbF1yq_wfAccentBlue",
36967
+ "adaptRule": "jbF1yq_adaptRule",
36968
+ "wfSmallFoot": "jbF1yq_wfSmallFoot",
36969
+ "planGroupEmptyTitle": "jbF1yq_planGroupEmptyTitle",
36970
+ "dimCardSelected": "jbF1yq_dimCardSelected",
36971
+ "wfConTxt": "jbF1yq_wfConTxt",
36972
+ "outlineDocWrap": "jbF1yq_outlineDocWrap",
36973
+ "wfBody": "jbF1yq_wfBody",
36974
+ "navTitleBook": "jbF1yq_navTitleBook",
36975
+ "chatScroll": "jbF1yq_chatScroll",
36976
+ "topNavMenuHint": "jbF1yq_topNavMenuHint",
36977
+ "wsColumns": "jbF1yq_wsColumns",
36978
+ "drawerTitle": "jbF1yq_drawerTitle",
36979
+ "outlineTocL2": "jbF1yq_outlineTocL2",
36980
+ "subPageHead": "jbF1yq_subPageHead",
36981
+ "progressLine": "jbF1yq_progressLine",
36982
+ "wsSelected": "jbF1yq_wsSelected",
36983
+ "importFileInfo": "jbF1yq_importFileInfo",
36984
+ "wfProg": "jbF1yq_wfProg",
36985
+ "topNav": "jbF1yq_topNav",
36986
+ "wfBook": "jbF1yq_wfBook",
36987
+ "outlineEdit": "jbF1yq_outlineEdit",
36988
+ "chWorkDraftBar": "jbF1yq_chWorkDraftBar",
36989
+ "pageHeaderSub": "jbF1yq_pageHeaderSub",
36990
+ "outlineHr": "jbF1yq_outlineHr",
36991
+ "confirmAssurance": "jbF1yq_confirmAssurance",
36992
+ "wfStOk": "jbF1yq_wfStOk",
36993
+ "cabinetCard": "jbF1yq_cabinetCard",
36994
+ "outlineCode": "jbF1yq_outlineCode",
36995
+ "cabinetDrawer": "jbF1yq_cabinetDrawer",
36996
+ "inboxAct": "jbF1yq_inboxAct",
36997
+ "planBeatRole": "jbF1yq_planBeatRole",
36998
+ "outlineCodeBlock": "jbF1yq_outlineCodeBlock",
36999
+ "wfFtime": "jbF1yq_wfFtime",
37000
+ "diffLegend": "jbF1yq_diffLegend",
37001
+ "readerError": "jbF1yq_readerError",
37002
+ "wfConBar": "jbF1yq_wfConBar",
37003
+ "notice-ok": "jbF1yq_notice-ok",
37004
+ "confirmPhraseRow": "jbF1yq_confirmPhraseRow",
37005
+ "timelineIssues": "jbF1yq_timelineIssues",
37006
+ "outlineH": "jbF1yq_outlineH",
37007
+ "readerGroupArrow": "jbF1yq_readerGroupArrow",
37008
+ "wfConsole": "jbF1yq_wfConsole",
37009
+ "noticeBody": "jbF1yq_noticeBody",
37010
+ "heroPoolSeg": "jbF1yq_heroPoolSeg",
37011
+ "chWorkGrid": "jbF1yq_chWorkGrid",
37012
+ "wsColumn": "jbF1yq_wsColumn",
37013
+ "importError": "jbF1yq_importError",
37014
+ "assetGroupHeader": "jbF1yq_assetGroupHeader",
37015
+ "navTitleName": "jbF1yq_navTitleName",
37016
+ "subPageTitle": "jbF1yq_subPageTitle",
37017
+ "adaptMatrix": "jbF1yq_adaptMatrix",
37018
+ "chWorkSkeleton": "jbF1yq_chWorkSkeleton",
37019
+ "importModalTabs": "jbF1yq_importModalTabs",
37020
+ "authorStripStats": "jbF1yq_authorStripStats",
37021
+ "why": "jbF1yq_why",
37022
+ "wfDrawerBox": "jbF1yq_wfDrawerBox",
37023
+ "runChipText": "jbF1yq_runChipText",
37024
+ "drawerScrim": "jbF1yq_drawerScrim",
37025
+ "chWorkActions": "jbF1yq_chWorkActions",
37026
+ "topNavMenuPanel": "jbF1yq_topNavMenuPanel",
37027
+ "shelfToolbar": "jbF1yq_shelfToolbar",
37028
+ "planGroup": "jbF1yq_planGroup",
37029
+ "subPageMeta": "jbF1yq_subPageMeta",
37030
+ "topNavLabel": "jbF1yq_topNavLabel",
37031
+ "diffText": "jbF1yq_diffText",
37032
+ "importHint": "jbF1yq_importHint",
37033
+ "assetGroups": "jbF1yq_assetGroups",
37034
+ "headChip": "jbF1yq_headChip",
37035
+ "ideaCard": "jbF1yq_ideaCard",
37036
+ "emptyState": "jbF1yq_emptyState",
37037
+ "progressTotalBar": "jbF1yq_progressTotalBar",
37038
+ "wfHint": "jbF1yq_wfHint",
37039
+ "adaptResult": "jbF1yq_adaptResult",
37040
+ "createBookInner": "jbF1yq_createBookInner",
37041
+ "assetEditor": "jbF1yq_assetEditor",
37042
+ "planTreeVolGroup": "jbF1yq_planTreeVolGroup",
37043
+ "navTitleLogo": "jbF1yq_navTitleLogo",
37044
+ "adaptInputCard": "jbF1yq_adaptInputCard",
37045
+ "wfPreviewName": "jbF1yq_wfPreviewName",
37046
+ "shelfSearchWrap": "jbF1yq_shelfSearchWrap",
37047
+ "planGroupHead": "jbF1yq_planGroupHead",
37048
+ "planBeatLine": "jbF1yq_planBeatLine",
37049
+ "chWorkMainFocus": "jbF1yq_chWorkMainFocus",
37050
+ "inboxEmpty": "jbF1yq_inboxEmpty",
37051
+ "wfMetricSparkNote": "jbF1yq_wfMetricSparkNote",
37052
+ "progressLineError": "jbF1yq_progressLineError",
37053
+ "toolStepActive": "jbF1yq_toolStepActive",
37054
+ "panelBody": "jbF1yq_panelBody",
37055
+ "authorContent": "jbF1yq_authorContent",
37056
+ "runQueueMeta": "jbF1yq_runQueueMeta",
37057
+ "iconButton": "jbF1yq_iconButton",
37058
+ "badgeRejected": "jbF1yq_badgeRejected",
37059
+ "navAbout": "jbF1yq_navAbout",
37060
+ "readerHeader": "jbF1yq_readerHeader",
37061
+ "planDetailTitle": "jbF1yq_planDetailTitle",
37062
+ "tnum": "jbF1yq_tnum",
37063
+ "assetConflictIcon": "jbF1yq_assetConflictIcon",
37064
+ "wfDs": "jbF1yq_wfDs",
37065
+ "toolStepIcon": "jbF1yq_toolStepIcon",
37066
+ "outlineH1": "jbF1yq_outlineH1",
37067
+ "bookCardTitleRow": "jbF1yq_bookCardTitleRow",
37068
+ "outlineList": "jbF1yq_outlineList",
37069
+ "wfColA": "jbF1yq_wfColA",
37070
+ "chWorkToolActions": "jbF1yq_chWorkToolActions",
37071
+ "wbIndexRow": "jbF1yq_wbIndexRow",
37072
+ "outlineToc": "jbF1yq_outlineToc",
37073
+ "wfAct": "jbF1yq_wfAct",
37074
+ "importModal": "jbF1yq_importModal",
37075
+ "planDetailEmpty": "jbF1yq_planDetailEmpty",
37076
+ "t2RailHead": "jbF1yq_t2RailHead",
37077
+ "reviewIssue": "jbF1yq_reviewIssue",
37078
+ "adaptRules": "jbF1yq_adaptRules",
37079
+ "wfMetrics": "jbF1yq_wfMetrics",
37080
+ "authorPageHeader": "jbF1yq_authorPageHeader",
37081
+ "topNavBtn": "jbF1yq_topNavBtn",
37082
+ "diffSameBody": "jbF1yq_diffSameBody",
37083
+ "buttonSmall": "jbF1yq_buttonSmall",
37084
+ "wfFi": "jbF1yq_wfFi",
37085
+ "shelfStatGrid": "jbF1yq_shelfStatGrid",
37086
+ "diffTagOld": "jbF1yq_diffTagOld",
37087
+ "chWorkBar": "jbF1yq_chWorkBar",
37088
+ "planDot": "jbF1yq_planDot",
37089
+ "brandSub": "jbF1yq_brandSub",
37090
+ "pageHeaderEyebrow": "jbF1yq_pageHeaderEyebrow",
37091
+ "chapter": "jbF1yq_chapter",
37092
+ "chWorkMain": "jbF1yq_chWorkMain",
37093
+ "timelineEvents": "jbF1yq_timelineEvents",
37094
+ "outlineQuote": "jbF1yq_outlineQuote",
37095
+ "entry": "jbF1yq_entry",
37096
+ "wsPage": "jbF1yq_wsPage",
37097
+ "runQueueRow": "jbF1yq_runQueueRow",
37098
+ "bookCardMetaRow": "jbF1yq_bookCardMetaRow",
37099
+ "wfCoordStuck": "jbF1yq_wfCoordStuck",
37100
+ "bookCardName": "jbF1yq_bookCardName",
37101
+ "reviewIssueHead": "jbF1yq_reviewIssueHead",
37102
+ "readerSegActive": "jbF1yq_readerSegActive",
37103
+ "runLogTime": "jbF1yq_runLogTime",
37104
+ "wfEmpty": "jbF1yq_wfEmpty",
37105
+ "panelNav": "jbF1yq_panelNav",
37106
+ "noticeBar": "jbF1yq_noticeBar",
37107
+ "wfDone": "jbF1yq_wfDone",
37108
+ "homeHeroCta": "jbF1yq_homeHeroCta",
37109
+ "runChip": "jbF1yq_runChip",
37110
+ "readerView": "jbF1yq_readerView",
37111
+ "buttonPrimary": "jbF1yq_buttonPrimary",
37112
+ "planDetailBody": "jbF1yq_planDetailBody",
37113
+ "planGroupText": "jbF1yq_planGroupText",
37114
+ "emptyStateTitle": "jbF1yq_emptyStateTitle",
37115
+ "reviewIssueSev": "jbF1yq_reviewIssueSev",
37116
+ "drawerNarrow": "jbF1yq_drawerNarrow",
37117
+ "wfDrawerList": "jbF1yq_wfDrawerList",
37118
+ "planGroupTitle": "jbF1yq_planGroupTitle",
37119
+ "tab": "jbF1yq_tab",
37120
+ "heroPoolEmpty": "jbF1yq_heroPoolEmpty",
37121
+ "cmdMask": "jbF1yq_cmdMask",
37122
+ "progressBarFill": "jbF1yq_progressBarFill",
37123
+ "wfRsNo": "jbF1yq_wfRsNo",
37124
+ "planTree": "jbF1yq_planTree",
37125
+ "navGroup": "jbF1yq_navGroup",
37126
+ "adaptOutline": "jbF1yq_adaptOutline",
37127
+ "shelfHero": "jbF1yq_shelfHero",
37128
+ "contentDrawer": "jbF1yq_contentDrawer",
37129
+ "wfDlDi": "jbF1yq_wfDlDi",
37130
+ "ideaCandidate": "jbF1yq_ideaCandidate",
37131
+ "wfFdotOk": "jbF1yq_wfFdotOk",
37132
+ "liveText": "jbF1yq_liveText",
37133
+ "runLogLine": "jbF1yq_runLogLine",
37134
+ "planDetail": "jbF1yq_planDetail",
37135
+ "planGroupEdit": "jbF1yq_planGroupEdit",
37136
+ "skeletonBlock": "jbF1yq_skeletonBlock",
37137
+ "contentDrawerBody": "jbF1yq_contentDrawerBody",
37138
+ "navTitle": "jbF1yq_navTitle",
37139
+ "badgeWritten": "jbF1yq_badgeWritten",
37140
+ "settingsDrawerHead": "jbF1yq_settingsDrawerHead",
37141
+ "confirmHead": "jbF1yq_confirmHead",
37142
+ "subPageActions": "jbF1yq_subPageActions",
37143
+ "shelfStatCard": "jbF1yq_shelfStatCard",
37144
+ "wfOpsBtnMain": "jbF1yq_wfOpsBtnMain",
37145
+ "navTab": "jbF1yq_navTab",
37146
+ "chapterFocus": "jbF1yq_chapterFocus",
37147
+ "coverPreview": "jbF1yq_coverPreview",
37148
+ "readerBody": "jbF1yq_readerBody",
37149
+ "cardHeadLeft": "jbF1yq_cardHeadLeft",
37150
+ "rowBetween": "jbF1yq_rowBetween",
37151
+ "wfColB": "jbF1yq_wfColB",
37152
+ "importPreview": "jbF1yq_importPreview",
37153
+ "topNavMenuItem": "jbF1yq_topNavMenuItem",
37154
+ "assetFilterChipActive": "jbF1yq_assetFilterChipActive",
37155
+ "dropzone": "jbF1yq_dropzone",
37156
+ "planTreeRowNo": "jbF1yq_planTreeRowNo",
37157
+ "authorStripMain": "jbF1yq_authorStripMain",
37158
+ "homeHeroSealRow": "jbF1yq_homeHeroSealRow",
37159
+ "readerSegBtn": "jbF1yq_readerSegBtn",
37160
+ "topNavActive": "jbF1yq_topNavActive",
37161
+ "field": "jbF1yq_field",
37162
+ "readerItemTitle": "jbF1yq_readerItemTitle",
37163
+ "nfConfirmIn": "jbF1yq_nfConfirmIn",
37164
+ "planTreeRowTitle": "jbF1yq_planTreeRowTitle",
37165
+ "drawerTitleNi": "jbF1yq_drawerTitleNi",
37166
+ "reviewBox": "jbF1yq_reviewBox",
37167
+ "wsAppliedBanner": "jbF1yq_wsAppliedBanner",
37168
+ "bookCardCoverFallback": "jbF1yq_bookCardCoverFallback",
37169
+ "chWorkFootRow": "jbF1yq_chWorkFootRow",
37170
+ "confirmPhraseInput": "jbF1yq_confirmPhraseInput",
37171
+ "authorStrip": "jbF1yq_authorStrip",
37172
+ "homeHeroAlt": "jbF1yq_homeHeroAlt",
37173
+ "wfNow": "jbF1yq_wfNow",
37174
+ "heroPoolMeta": "jbF1yq_heroPoolMeta",
37175
+ "cardTitleLg": "jbF1yq_cardTitleLg",
37176
+ "planGroupSpacer": "jbF1yq_planGroupSpacer",
37177
+ "entryLabel": "jbF1yq_entryLabel",
37178
+ "wbIndexTitle": "jbF1yq_wbIndexTitle",
37179
+ "readerChapterTitle": "jbF1yq_readerChapterTitle",
37180
+ "importModalActions": "jbF1yq_importModalActions",
37181
+ "settingsDrawerBody": "jbF1yq_settingsDrawerBody",
37182
+ "noticeDetail": "jbF1yq_noticeDetail",
37183
+ "t2Content": "jbF1yq_t2Content",
37184
+ "planTreeVol": "jbF1yq_planTreeVol",
37185
+ "cmdHint": "jbF1yq_cmdHint",
37186
+ "chWorkSideFoot": "jbF1yq_chWorkSideFoot",
37187
+ "heroPoolBar": "jbF1yq_heroPoolBar",
37188
+ "homeHeroKicker": "jbF1yq_homeHeroKicker",
37189
+ "wsPageHeader": "jbF1yq_wsPageHeader",
37190
+ "eyebrow": "jbF1yq_eyebrow",
37191
+ "cabinetAll": "jbF1yq_cabinetAll",
37192
+ "reviewIssueFix": "jbF1yq_reviewIssueFix",
37193
+ "chapterPreview": "jbF1yq_chapterPreview",
37194
+ "assetTextarea": "jbF1yq_assetTextarea",
37195
+ "wfStPend": "jbF1yq_wfStPend",
37196
+ "subPageBody": "jbF1yq_subPageBody",
37197
+ "navAboutUpdate": "jbF1yq_navAboutUpdate",
37198
+ "confirmGo": "jbF1yq_confirmGo",
37199
+ "readerItemActive": "jbF1yq_readerItemActive",
37200
+ "bookCardActions": "jbF1yq_bookCardActions",
37201
+ "planTreeRow": "jbF1yq_planTreeRow",
37202
+ "timelineEvent": "jbF1yq_timelineEvent",
37203
+ "wfOpsBtn": "jbF1yq_wfOpsBtn",
37204
+ "homeHeroBatch": "jbF1yq_homeHeroBatch",
37205
+ "confirmIcon": "jbF1yq_confirmIcon",
37206
+ "pulse": "jbF1yq_pulse",
37207
+ "timelineChapter": "jbF1yq_timelineChapter",
37208
+ "wfPreview": "jbF1yq_wfPreview",
37209
+ "nfDrawerIn": "jbF1yq_nfDrawerIn",
37210
+ "bigProgressBarFill": "jbF1yq_bigProgressBarFill",
37211
+ "assetCardName": "jbF1yq_assetCardName",
37212
+ "runChipDot": "jbF1yq_runChipDot",
37213
+ "navAboutRow": "jbF1yq_navAboutRow",
37214
+ "homeHeroMain": "jbF1yq_homeHeroMain",
37215
+ "adaptRuleRow": "jbF1yq_adaptRuleRow",
37216
+ "cabinetCardHead": "jbF1yq_cabinetCardHead",
37217
+ "dimCard": "jbF1yq_dimCard",
37218
+ "numSerif": "jbF1yq_numSerif",
37219
+ "authorTopTabs": "jbF1yq_authorTopTabs",
37220
+ "assistantResize": "jbF1yq_assistantResize",
37221
+ "progress": "jbF1yq_progress",
37222
+ "docsSurface": "jbF1yq_docsSurface",
37223
+ "adaptCell": "jbF1yq_adaptCell",
37224
+ "confirmList": "jbF1yq_confirmList",
37225
+ "outlineTable": "jbF1yq_outlineTable",
37226
+ "assetConflict": "jbF1yq_assetConflict",
37227
+ "shelfSearch": "jbF1yq_shelfSearch",
37228
+ "outlineH3": "jbF1yq_outlineH3",
37229
+ "planTreeSearch": "jbF1yq_planTreeSearch",
37230
+ "iconBtn": "jbF1yq_iconBtn",
37231
+ "dimTitle": "jbF1yq_dimTitle",
37232
+ "wfEmpty2": "jbF1yq_wfEmpty2",
37233
+ "cabinetCardMeta": "jbF1yq_cabinetCardMeta",
37234
+ "inbox": "jbF1yq_inbox",
37235
+ "importField": "jbF1yq_importField",
37236
+ "inboxBody": "jbF1yq_inboxBody",
37237
+ "wsSelectedText": "jbF1yq_wsSelectedText",
37238
+ "assetCard": "jbF1yq_assetCard",
37239
+ "readerPara": "jbF1yq_readerPara",
37240
+ "cmdItem": "jbF1yq_cmdItem",
37241
+ "nfFadeIn": "jbF1yq_nfFadeIn",
37242
+ "outlineH2": "jbF1yq_outlineH2",
37243
+ "assetGrid": "jbF1yq_assetGrid",
37244
+ "badgeError": "jbF1yq_badgeError",
37245
+ "cmdList": "jbF1yq_cmdList",
37246
+ "wfFdot": "jbF1yq_wfFdot",
37247
+ "chatRole": "jbF1yq_chatRole",
37248
+ "wfProgRest": "jbF1yq_wfProgRest",
37249
+ "wfDlName": "jbF1yq_wfDlName",
37250
+ "skeletonLine": "jbF1yq_skeletonLine",
37251
+ "badgePending": "jbF1yq_badgePending",
37252
+ "diffDel": "jbF1yq_diffDel",
37253
+ "readerText": "jbF1yq_readerText",
37254
+ "bookCardActive": "jbF1yq_bookCardActive",
37255
+ "shelfEmptyTitle": "jbF1yq_shelfEmptyTitle",
37256
+ "planBeatsLabel": "jbF1yq_planBeatsLabel",
37257
+ "legendNew": "jbF1yq_legendNew",
37258
+ "tabular": "jbF1yq_tabular",
37259
+ "confirmActions": "jbF1yq_confirmActions",
37260
+ "emptyStateHint": "jbF1yq_emptyStateHint",
37261
+ "readerGroup": "jbF1yq_readerGroup",
37262
+ "wfStRev": "jbF1yq_wfStRev",
37263
+ "nfSkeletonSweep": "jbF1yq_nfSkeletonSweep",
37264
+ "fileList": "jbF1yq_fileList",
37265
+ "textarea": "jbF1yq_textarea",
37266
+ "wfFt": "jbF1yq_wfFt",
37267
+ "homeHeroBatchFill": "jbF1yq_homeHeroBatchFill",
37268
+ "settingsDrawer": "jbF1yq_settingsDrawer",
37269
+ "nfViewIn": "jbF1yq_nfViewIn",
37270
+ "planOpTag": "jbF1yq_planOpTag",
37271
+ "toolStepStatus": "jbF1yq_toolStepStatus",
37272
+ "nfToastHost": "jbF1yq_nfToastHost",
37273
+ "confirmOverlay": "jbF1yq_confirmOverlay",
37274
+ "brand": "jbF1yq_brand",
37275
+ "readerItem": "jbF1yq_readerItem",
37276
+ "readerFoot": "jbF1yq_readerFoot",
37277
+ "assetFilterChip": "jbF1yq_assetFilterChip",
37278
+ "wfConOk": "jbF1yq_wfConOk",
37279
+ "outlineTocItem": "jbF1yq_outlineTocItem",
37280
+ "chWorkSide": "jbF1yq_chWorkSide",
37281
+ "noticeBtn": "jbF1yq_noticeBtn",
37282
+ "notice-info": "jbF1yq_notice-info",
37283
+ "confirmBody": "jbF1yq_confirmBody",
37284
+ "importModalBody": "jbF1yq_importModalBody",
37285
+ "row": "jbF1yq_row",
37286
+ "outlineTocL1": "jbF1yq_outlineTocL1",
37287
+ "planListItem": "jbF1yq_planListItem",
37288
+ "runSurface": "jbF1yq_runSurface",
37289
+ "authorNav": "jbF1yq_authorNav",
37290
+ "adaptImpact": "jbF1yq_adaptImpact",
37291
+ "rowBetweenWrap": "jbF1yq_rowBetweenWrap",
37292
+ "runQueueActions": "jbF1yq_runQueueActions",
37293
+ "cmdInput": "jbF1yq_cmdInput",
37294
+ "authorTopNav": "jbF1yq_authorTopNav",
37295
+ "wfCn": "jbF1yq_wfCn",
37296
+ "aiTag": "jbF1yq_aiTag",
37297
+ "button": "jbF1yq_button",
37298
+ "wfOpsRow": "jbF1yq_wfOpsRow",
37299
+ "confirmPhraseHint": "jbF1yq_confirmPhraseHint",
37300
+ "heroPoolLegend": "jbF1yq_heroPoolLegend",
37301
+ "wfToolBlue": "jbF1yq_wfToolBlue",
37302
+ "t2RailBtn": "jbF1yq_t2RailBtn",
37303
+ "wfRail": "jbF1yq_wfRail",
37304
+ "bookCardProgressBar": "jbF1yq_bookCardProgressBar",
37305
+ "runLog": "jbF1yq_runLog",
37306
+ "chapterActions": "jbF1yq_chapterActions",
37307
+ "cmdBox": "jbF1yq_cmdBox",
37308
+ "wfFeedBox": "jbF1yq_wfFeedBox",
37309
+ "drawerHeadBtn": "jbF1yq_drawerHeadBtn",
37310
+ "chWork": "jbF1yq_chWork",
37311
+ "planGroupEmpty": "jbF1yq_planGroupEmpty",
37312
+ "busyRow": "jbF1yq_busyRow",
37313
+ "diffChange": "jbF1yq_diffChange",
37314
+ "outlineTocL3": "jbF1yq_outlineTocL3",
37315
+ "panelTitle": "jbF1yq_panelTitle",
37316
+ "timelineSurface": "jbF1yq_timelineSurface",
37317
+ "outlineTableWrap": "jbF1yq_outlineTableWrap",
37318
+ "inboxItem": "jbF1yq_inboxItem",
37319
+ "wsEditor": "jbF1yq_wsEditor",
37320
+ "panelHead": "jbF1yq_panelHead",
37321
+ "panel": "jbF1yq_panel",
37322
+ "diffNew": "jbF1yq_diffNew",
37323
+ "subPage": "jbF1yq_subPage",
37324
+ "wfLiveChip": "jbF1yq_wfLiveChip",
37325
+ "wfRow": "jbF1yq_wfRow",
37326
+ "panelHidden": "jbF1yq_panelHidden",
37327
+ "outlineH4": "jbF1yq_outlineH4",
37328
+ "drawerMax": "jbF1yq_drawerMax",
37329
+ "diffSame": "jbF1yq_diffSame",
37330
+ "planEditActions": "jbF1yq_planEditActions",
37331
+ "cmdIcon": "jbF1yq_cmdIcon",
37332
+ "runQueueNo": "jbF1yq_runQueueNo",
37333
+ "chWorkSideHead": "jbF1yq_chWorkSideHead",
37334
+ "onlyChanges": "jbF1yq_onlyChanges",
37335
+ "adaptProposal": "jbF1yq_adaptProposal",
37336
+ "shelfEmptyIcon": "jbF1yq_shelfEmptyIcon",
37337
+ "input": "jbF1yq_input",
37338
+ "wfRsName": "jbF1yq_wfRsName",
37339
+ "reviewIssueExcerpt": "jbF1yq_reviewIssueExcerpt",
37340
+ "wfMetricWide": "jbF1yq_wfMetricWide",
37341
+ "wfDrawerToggle": "jbF1yq_wfDrawerToggle",
37342
+ "planList": "jbF1yq_planList",
37343
+ "wfBoxH": "jbF1yq_wfBoxH",
37344
+ "wfQt": "jbF1yq_wfQt",
37345
+ "drawerSpacer": "jbF1yq_drawerSpacer",
37346
+ "noticeIcon": "jbF1yq_noticeIcon",
37347
+ "topNavChevron": "jbF1yq_topNavChevron",
37348
+ "chWorkText": "jbF1yq_chWorkText",
37349
+ "brandLogo": "jbF1yq_brandLogo",
37350
+ "chWorkPickBar": "jbF1yq_chWorkPickBar",
37351
+ "assetConflicts": "jbF1yq_assetConflicts",
37352
+ "readerSeg": "jbF1yq_readerSeg",
37353
+ "importModalOverlay": "jbF1yq_importModalOverlay",
37354
+ "planBeats": "jbF1yq_planBeats",
37355
+ "wfLiveMark": "jbF1yq_wfLiveMark",
37356
+ "nfToastTick": "jbF1yq_nfToastTick",
37357
+ "statCardDValue": "jbF1yq_statCardDValue",
37358
+ "chWorkAsideSurface": "jbF1yq_chWorkAsideSurface",
37359
+ "buttonDanger": "jbF1yq_buttonDanger",
37360
+ "assetKind": "jbF1yq_assetKind",
37361
+ "topNavBadge": "jbF1yq_topNavBadge",
37362
+ "navBadgePulse": "jbF1yq_navBadgePulse",
37363
+ "bookCardProgressFill": "jbF1yq_bookCardProgressFill",
37364
+ "pillNavSliding": "jbF1yq_pillNavSliding",
37365
+ "wfRsChk": "jbF1yq_wfRsChk",
37366
+ "wfCoord": "jbF1yq_wfCoord",
37367
+ "wfStFix": "jbF1yq_wfStFix",
37368
+ "wfPsLab": "jbF1yq_wfPsLab",
37369
+ "chWorkPickBtns": "jbF1yq_chWorkPickBtns",
37370
+ "chWorkBarStack": "jbF1yq_chWorkBarStack",
37371
+ "cabinetCardEmpty": "jbF1yq_cabinetCardEmpty",
37372
+ "pageHeaderActions": "jbF1yq_pageHeaderActions",
37373
+ "homeHeroActs": "jbF1yq_homeHeroActs",
37374
+ "meta": "jbF1yq_meta",
37375
+ "chatBubbleAssistant": "jbF1yq_chatBubbleAssistant",
37376
+ "wfConRow": "jbF1yq_wfConRow",
37377
+ "confirmCard": "jbF1yq_confirmCard",
37378
+ "confirmAckRow": "jbF1yq_confirmAckRow",
37379
+ "wfBox": "jbF1yq_wfBox",
37380
+ "wfSt": "jbF1yq_wfSt",
37381
+ "homeHeroPool": "jbF1yq_homeHeroPool",
37382
+ "chapterTitle": "jbF1yq_chapterTitle",
37383
+ "wfDl": "jbF1yq_wfDl",
37384
+ "wfPillDot": "jbF1yq_wfPillDot",
37385
+ "nfSkeletonShimmer": "jbF1yq_nfSkeletonShimmer",
37386
+ "panelNavCollapsed": "jbF1yq_panelNavCollapsed",
37387
+ "legendOld": "jbF1yq_legendOld",
37388
+ "inboxSource": "jbF1yq_inboxSource",
37389
+ "diffColumn": "jbF1yq_diffColumn",
37390
+ "reviewIssueItem": "jbF1yq_reviewIssueItem",
37391
+ "t2Rail": "jbF1yq_t2Rail",
37392
+ "wfMetric": "jbF1yq_wfMetric",
37393
+ "pageHeader": "jbF1yq_pageHeader",
37394
+ "chWorkTitle": "jbF1yq_chWorkTitle",
37395
+ "chWorkAsideBody": "jbF1yq_chWorkAsideBody",
37396
+ "planListLabel": "jbF1yq_planListLabel",
37397
+ "shelfToolbarExtra": "jbF1yq_shelfToolbarExtra",
37398
+ "reviewIssues": "jbF1yq_reviewIssues",
37399
+ "nfpanel": "jbF1yq_nfpanel",
37400
+ "bigProgressBar": "jbF1yq_bigProgressBar",
37401
+ "brandText": "jbF1yq_brandText",
37402
+ "subPageBack": "jbF1yq_subPageBack",
37403
+ "diffTagNew": "jbF1yq_diffTagNew",
37404
+ "wfFdotErr": "jbF1yq_wfFdotErr",
37405
+ "homeHeroStage": "jbF1yq_homeHeroStage",
37406
+ "wbIndexVol": "jbF1yq_wbIndexVol",
37407
+ "bookCardCoverTitle": "jbF1yq_bookCardCoverTitle",
37408
+ "outlineVolSummary": "jbF1yq_outlineVolSummary",
37409
+ "wfDot": "jbF1yq_wfDot",
37410
+ "titleBlock": "jbF1yq_titleBlock",
37411
+ "bookCardBlurb": "jbF1yq_bookCardBlurb",
37412
+ "readerChapterMeta": "jbF1yq_readerChapterMeta",
37413
+ "inboxDetail": "jbF1yq_inboxDetail",
37414
+ "wfSep": "jbF1yq_wfSep",
37415
+ "timelineChapterEvents": "jbF1yq_timelineChapterEvents",
37416
+ "confirmTitle": "jbF1yq_confirmTitle",
37417
+ "topNavSpacer": "jbF1yq_topNavSpacer",
37418
+ "dimCurrent": "jbF1yq_dimCurrent",
37419
+ "fieldLabel": "jbF1yq_fieldLabel",
37420
+ "dimCardHead": "jbF1yq_dimCardHead",
37421
+ "chapterList": "jbF1yq_chapterList",
37422
+ "planMaster": "jbF1yq_planMaster",
37423
+ "statCardDDetail": "jbF1yq_statCardDDetail",
37424
+ "runQueue": "jbF1yq_runQueue",
37425
+ "assetConflictText": "jbF1yq_assetConflictText",
37426
+ "entryIcon": "jbF1yq_entryIcon",
37427
+ "planEditField": "jbF1yq_planEditField",
37428
+ "wfStGen": "jbF1yq_wfStGen",
37429
+ "wfRs": "jbF1yq_wfRs",
37430
+ "wfPreviewLine": "jbF1yq_wfPreviewLine",
37431
+ "panelContent": "jbF1yq_panelContent",
37432
+ "chWorkBarRow": "jbF1yq_chWorkBarRow",
37433
+ "readerSidebar": "jbF1yq_readerSidebar",
37434
+ "cardHeadCount": "jbF1yq_cardHeadCount",
37435
+ "wfPs": "jbF1yq_wfPs",
37436
+ "drawerHead": "jbF1yq_drawerHead",
37437
+ "outlineDoc": "jbF1yq_outlineDoc",
37438
+ "cardHeadNote": "jbF1yq_cardHeadNote",
37439
+ "authorNavBtn": "jbF1yq_authorNavBtn",
37440
+ "dropzoneActive": "jbF1yq_dropzoneActive",
37441
+ "homeHeroSide": "jbF1yq_homeHeroSide",
37442
+ "topNavNi": "jbF1yq_topNavNi",
37443
+ "readerGroupTitle": "jbF1yq_readerGroupTitle",
37444
+ "wfCmdReason": "jbF1yq_wfCmdReason",
37445
+ "adaptImpacts": "jbF1yq_adaptImpacts",
37446
+ "wfRailWrap": "jbF1yq_wfRailWrap",
37447
+ "worldNote": "jbF1yq_worldNote",
37448
+ "readerTitle": "jbF1yq_readerTitle",
37449
+ "heroPoolGroup": "jbF1yq_heroPoolGroup",
37450
+ "assistantFloat": "jbF1yq_assistantFloat",
37451
+ "homeHeroWhy": "jbF1yq_homeHeroWhy",
37452
+ "wfCard1": "jbF1yq_wfCard1",
37453
+ "wfPreviewActs": "jbF1yq_wfPreviewActs",
37454
+ "toolStepError": "jbF1yq_toolStepError",
37455
+ "chapterMain": "jbF1yq_chapterMain",
37456
+ "progressBar": "jbF1yq_progressBar",
37457
+ "view": "jbF1yq_view",
37458
+ "toolStepDetail": "jbF1yq_toolStepDetail",
37459
+ "planTreeVolMeta": "jbF1yq_planTreeVolMeta",
37460
+ "authorHome": "jbF1yq_authorHome",
37461
+ "segTab": "jbF1yq_segTab",
37462
+ "pageHeaderMain": "jbF1yq_pageHeaderMain",
37463
+ "bookCardBody": "jbF1yq_bookCardBody",
37464
+ "pillNav": "jbF1yq_pillNav",
37465
+ "homeHero": "jbF1yq_homeHero",
37466
+ "cabinetSnapshot": "jbF1yq_cabinetSnapshot",
37467
+ "readingCol": "jbF1yq_readingCol",
37468
+ "badgeGenerating": "jbF1yq_badgeGenerating",
37469
+ "shelfGrid": "jbF1yq_shelfGrid",
37470
+ "nfToast": "jbF1yq_nfToast",
37471
+ "wfConsoleNote": "jbF1yq_wfConsoleNote",
37472
+ "assetCardContent": "jbF1yq_assetCardContent",
37473
+ "chWorkAside": "jbF1yq_chWorkAside",
37474
+ "nfSlideInRight": "jbF1yq_nfSlideInRight",
37475
+ "chapterFocusPulse": "jbF1yq_chapterFocusPulse",
37476
+ "assistantStatusBusy": "jbF1yq_assistantStatusBusy",
37477
+ "dimEdit": "jbF1yq_dimEdit",
37478
+ "importModalHead": "jbF1yq_importModalHead",
37479
+ "switch": "jbF1yq_switch",
37480
+ "t2RailMeta": "jbF1yq_t2RailMeta",
37481
+ "wfProgBig": "jbF1yq_wfProgBig",
37482
+ "inboxActs": "jbF1yq_inboxActs",
37483
+ "t2Master": "jbF1yq_t2Master",
37484
+ "inboxBadge": "jbF1yq_inboxBadge",
37485
+ "wfCmd": "jbF1yq_wfCmd",
37486
+ "toolSteps": "jbF1yq_toolSteps",
37487
+ "badgeDone": "jbF1yq_badgeDone",
37488
+ "homeHeroSeal": "jbF1yq_homeHeroSeal",
37489
+ "outlineCodeLang": "jbF1yq_outlineCodeLang",
37490
+ "nfToastIn": "jbF1yq_nfToastIn",
37491
+ "diffList": "jbF1yq_diffList",
37492
+ "chWorkSideBody": "jbF1yq_chWorkSideBody",
37493
+ "runQueueTitle": "jbF1yq_runQueueTitle",
37494
+ "readerGroupCount": "jbF1yq_readerGroupCount",
37495
+ "title": "jbF1yq_title",
37496
+ "runLogDetails": "jbF1yq_runLogDetails",
37497
+ "wfPill": "jbF1yq_wfPill",
37498
+ "panelTop": "jbF1yq_panelTop",
37499
+ "planListWrap": "jbF1yq_planListWrap",
37500
+ "heroPoolDoneSep": "jbF1yq_heroPoolDoneSep",
37501
+ "assetConflictFix": "jbF1yq_assetConflictFix",
37502
+ "wsPreviewText": "jbF1yq_wsPreviewText",
37503
+ "t2RailSep": "jbF1yq_t2RailSep",
37504
+ "card": "jbF1yq_card",
37505
+ "worldSection": "jbF1yq_worldSection",
37506
+ "dropzoneIcon": "jbF1yq_dropzoneIcon",
37507
+ "planBeatLines": "jbF1yq_planBeatLines",
37508
+ "nfChipPulse": "jbF1yq_nfChipPulse"
37509
+ };
37510
+ //#endregion
37511
+ //#region src/client/panel/ReasoningSection.tsx
37512
+ /**
37513
+ * 推理强度(思考强度)独立容器:写作类/分析类两个 reasoningEffort 下拉。
37514
+ */
37659
37515
  const REASONING_OPTIONS = [
37660
37516
  "off",
37661
37517
  "low",
@@ -43640,8 +43496,10 @@ window.__ModuleLoader__.load({
43640
43496
  reviewModel: configDraft.reviewModel,
43641
43497
  auditModel: configDraft.auditModel,
43642
43498
  fallbackModel: configDraft.fallbackModel ?? "",
43499
+ fallbackMaxTokens: configDraft.fallbackMaxTokens ?? 0,
43643
43500
  autoTimeline: configDraft.autoTimeline ?? true,
43644
43501
  reasoningEffort: configDraft.reasoningEffort ?? "off",
43502
+ analysisReasoning: configDraft.analysisReasoning ?? "low",
43645
43503
  chapterChars: configDraft.chapterChars,
43646
43504
  maxTokens: configDraft.maxTokens,
43647
43505
  reviewPassScore: configDraft.reviewPassScore,
@@ -43823,6 +43681,30 @@ window.__ModuleLoader__.load({
43823
43681
  }, m))]
43824
43682
  })]
43825
43683
  }),
43684
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
43685
+ className: panel_module_css_default.field,
43686
+ children: [
43687
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("label", {
43688
+ className: panel_module_css_default.fieldLabel,
43689
+ children: "备用模型的输出上限(tokens,0 = 沿用主模型预算)"
43690
+ }),
43691
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
43692
+ className: panel_module_css_default.input,
43693
+ type: "number",
43694
+ min: 0,
43695
+ step: 1e3,
43696
+ value: configDraft.fallbackMaxTokens ?? 0,
43697
+ onChange: (e) => setConfigDraft({
43698
+ ...configDraft,
43699
+ fallbackMaxTokens: Number(e.target.value) || 0
43700
+ })
43701
+ }),
43702
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
43703
+ className: panel_module_css_default.meta,
43704
+ children: "只影响换到备用模型之后的长文调用(正文 / 改写 / 润色)。模型能力表不含上下文窗口数据,所以这里不猜、按备用模型的实际输出上限填;0 表示沿用主模型预算。"
43705
+ })
43706
+ ]
43707
+ }),
43826
43708
  /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
43827
43709
  className: panel_module_css_default.meta,
43828
43710
  children: "只对可重试的失败生效:用户取消、参数错误不会切换;正文生成只在「一个字都没产出」时才换模型重试,避免重复生成。"
@@ -45530,7 +45412,7 @@ window.__ModuleLoader__.load({
45530
45412
  * 作者级首页容器:书架页左侧导航 + 内容区。
45531
45413
  * 导航复用工作区 .panelNav 玻璃卡片样式(同款),导航项为作者级:书架/改编/资产库/全局资产库/AI 进度/设置。
45532
45414
  */
45533
- const PLUGIN_VERSION = "2.5.0";
45415
+ const PLUGIN_VERSION = "2.5.1";
45534
45416
  /** GitHub 仓库地址(关于区块点击跳转)。 */
45535
45417
  const REPO_URL = "https://github.com/watersxya/dsh-novel-forge";
45536
45418
  /**
@@ -46107,6 +45989,62 @@ window.__ModuleLoader__.load({
46107
45989
  return bits.join(" · ");
46108
45990
  }
46109
45991
  //#endregion
45992
+ //#region src/client/panel/status-badge.ts
45993
+ /**
45994
+ * 章节状态徽章的**唯一映射表**。
45995
+ *
45996
+ * ## 为什么必须共享
45997
+ *
45998
+ * 之前 `statusBadge` 在两处各写一份,且**映射不一致**:
45999
+ *
46000
+ * | 状态 | NovelPanel(工作台) | ReaderView(阅读器) |
46001
+ * |---|---|---|
46002
+ * | rejected | `badgeRejected` 红 | `badgePending` 灰 |
46003
+ * | error | `badgeError` 红 | `badgePending` 灰 |
46004
+ *
46005
+ * 也就是说:作者在阅读器里看自己被驳回的稿子,徽章是**灰色**的,看着像"还没写";
46006
+ * 切回工作台同一章却是**红色**。同一部书、同一个状态、两种颜色——
46007
+ * 这类不一致最难排查,因为它不会报错,只会让作者怀疑自己记错了。
46008
+ *
46009
+ * ## 为什么把「语义」和「样式类名」分开
46010
+ *
46011
+ * {@link statusTone} 是**纯数据**(可直接单测断言),CSS module 类名只在运行时
46012
+ * 解析。若把 `css.badgeRejected` 写进那张表,测试就得拉起整个 CSS module 加载链,
46013
+ * 于是「验证映射一致」这件最该被守住的事反而没法离线测。
46014
+ */
46015
+ /** 各状态对应的色调。文案走 i18n(`tt`),故不在此表内。 */
46016
+ const TONE_BY_STATUS = {
46017
+ pending: "pending",
46018
+ generating: "active",
46019
+ written: "written",
46020
+ reviewing: "active",
46021
+ approved: "done",
46022
+ rejected: "rejected",
46023
+ error: "error"
46024
+ };
46025
+ /** 色调 → CSS module 类名(两处界面共用同一份,不再各写一遍)。 */
46026
+ const BADGE_CLASS = {
46027
+ pending: panel_module_css_default.badgePending,
46028
+ active: panel_module_css_default.badgeGenerating,
46029
+ written: panel_module_css_default.badgeWritten,
46030
+ done: panel_module_css_default.badgeDone,
46031
+ rejected: panel_module_css_default.badgeRejected,
46032
+ error: panel_module_css_default.badgeError
46033
+ };
46034
+ /**
46035
+ * 取某章状态的色调。
46036
+ *
46037
+ * 未知状态一律按 `error` 处理:显式失败优于静默伪装成"正常/待写"。
46038
+ * 状态集合由 protocol 定义并可能扩展,所以这里不能写死穷尽分支。
46039
+ */
46040
+ function statusTone(status) {
46041
+ return TONE_BY_STATUS[status] ?? "error";
46042
+ }
46043
+ /** 取某章状态的徽章类名。 */
46044
+ function statusBadgeClass(status) {
46045
+ return BADGE_CLASS[statusTone(status)];
46046
+ }
46047
+ //#endregion
46110
46048
  //#region src/client/panel/ReaderView.tsx
46111
46049
  /**
46112
46050
  * 阅读页:沉浸式章节阅读(纯只读,零 LLM 消耗)。
@@ -47197,67 +47135,6 @@ window.__ModuleLoader__.load({
47197
47135
  });
47198
47136
  }
47199
47137
  //#endregion
47200
- //#region src/client/panel/ReviewIssueCard.tsx
47201
- /** 严重度的作者口径文案(与 Severity 类型一一对应)。 */
47202
- const SEV_LABEL = {
47203
- high: "高优",
47204
- medium: "中",
47205
- low: "低"
47206
- };
47207
- function ReviewIssueCard({ issue, dimensionLabel, checked, onToggle, disabled }) {
47208
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
47209
- className: panel_module_css_default.reviewIssue,
47210
- "data-sev": issue.severity,
47211
- "data-on": checked ? "1" : void 0,
47212
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
47213
- type: "checkbox",
47214
- checked,
47215
- disabled: disabled === true,
47216
- onChange: (e) => {
47217
- onToggle(e.target.checked);
47218
- },
47219
- "aria-label": `${SEV_LABEL[issue.severity] ?? issue.severity}问题:${issue.item}`
47220
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
47221
- className: panel_module_css_default.reviewIssueBody,
47222
- children: [
47223
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
47224
- className: panel_module_css_default.reviewIssueHead,
47225
- children: [
47226
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
47227
- className: panel_module_css_default.reviewIssueSev,
47228
- children: SEV_LABEL[issue.severity] ?? issue.severity
47229
- }),
47230
- dimensionLabel !== void 0 && dimensionLabel !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
47231
- className: panel_module_css_default.reviewIssueDim,
47232
- children: dimensionLabel
47233
- }),
47234
- issue.ruleName !== void 0 && issue.ruleName !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
47235
- className: panel_module_css_default.reviewIssueDim,
47236
- children: issue.ruleName
47237
- })
47238
- ]
47239
- }),
47240
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
47241
- className: panel_module_css_default.reviewIssueItem,
47242
- children: issue.item
47243
- }),
47244
- issue.suggestion !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
47245
- className: panel_module_css_default.reviewIssueFix,
47246
- children: ["建议:", issue.suggestion]
47247
- }),
47248
- issue.excerpt !== void 0 && issue.excerpt !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
47249
- className: panel_module_css_default.reviewIssueExcerpt,
47250
- children: ["原文:", issue.excerpt]
47251
- }),
47252
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
47253
- className: panel_module_css_default.reviewIssuePick,
47254
- children: "纳入本轮修订"
47255
- })
47256
- ]
47257
- })]
47258
- });
47259
- }
47260
- //#endregion
47261
47138
  //#region src/client/panel/HomeHero.tsx
47262
47139
  function HomeHero({ kicker, seal, sealNote, stageLabel, action, secondary, busy, busyLabel, meta, batch, nodes, children }) {
47263
47140
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
@@ -52663,259 +52540,164 @@ window.__ModuleLoader__.load({
52663
52540
  style: { gap: "var(--nf-space-4)" },
52664
52541
  children: items.map((e) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
52665
52542
  className: `${panel_module_css_default.row}`,
52666
- style: {
52667
- gap: 4,
52668
- border: "1px solid var(--nf-border)",
52669
- borderRadius: 6,
52670
- padding: "2px 6px"
52671
- },
52672
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
52673
- style: { fontSize: "var(--nf-fs-12)" },
52674
- children: e.name
52675
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
52676
- type: "button",
52677
- className: panel_module_css_default.iconBtn,
52678
- title: "从名字库移除",
52679
- "aria-label": `移除 ${e.name}`,
52680
- disabled: busy,
52681
- onClick: () => {
52682
- discard(e.id);
52683
- },
52684
- children: "×"
52685
- })]
52686
- }, e.id))
52687
- })]
52688
- }, spec.id);
52689
- })
52690
- ]
52691
- })
52692
- ]
52693
- });
52694
- }
52695
- function specLabel(id) {
52696
- return NAME_CATEGORIES.find((c) => c.id === id)?.label ?? "名字";
52697
- }
52698
- function specHint(id) {
52699
- return NAME_CATEGORIES.find((c) => c.id === id)?.hint ?? "";
52700
- }
52701
- function specPlaceholder(id) {
52702
- return NAME_CATEGORIES.find((c) => c.id === id)?.placeholder ?? "";
52703
- }
52704
- //#endregion
52705
- //#region src/client/panel/NovelPanel.tsx
52706
- /**
52707
- * The novel-forge workbench panel: tabs — 工作流 (guided pipeline), 大纲
52708
- * (outline), 章节 (chapter plan + per-chapter write/review/rewrite/polish),
52709
- * 设定库 (story bible), 伏笔 (foreshadows), 设置 (config). Generation and
52710
- * review streams land in the progress console.
52711
- */
52712
- /** One progress console line. */
52713
- /** 相对时间(最近活动用):刚刚 / N 分钟前 / N 小时前 / N 天前。 */
52714
- function relTime(ms) {
52715
- const diff = Date.now() - ms;
52716
- if (!Number.isFinite(diff) || diff < 0) return "";
52717
- const min = Math.floor(diff / 6e4);
52718
- if (min < 1) return "刚刚";
52719
- if (min < 60) return String(min) + " 分钟前";
52720
- const hr = Math.floor(min / 60);
52721
- if (hr < 24) return String(hr) + " 小时前";
52722
- return String(Math.floor(hr / 24)) + " 天前";
52723
- }
52724
- /** ⌘K 跳转映射:内容已搬进右滑抽屉的 tab → 抽屉 id(不在表内的走底座/浮窗分支)。 */
52725
- const CMD_DRAWER_OF = {
52726
- plan: "write",
52727
- book: "setup",
52728
- assets: "assets",
52729
- overview: "overview",
52730
- blurb: "blurb",
52731
- plotlines: "plotlines",
52732
- director: "director",
52733
- knowledge: "knowledge",
52734
- run: "run",
52735
- breakdown: "breakdown"
52736
- };
52737
- /**
52738
- * 全局信息架构分组(方案 §5):总编台 / 写作 / 设定 / 工具 四类,按作者真实流程排。
52739
- *
52740
- * 两个刻意的设计:
52741
- * 1. **AI 不与写作、设定并列**。AI 助手 / AI 进度是贯穿所有阶段的能力,
52742
- * 所以它们是顶栏快捷入口 + 命令面板的两条独立命令,而不是一个叫「AI 协同」的分类
52743
- * ——把 AI 单列成业务分类,会让「在哪找到 AI」变成第二个问题。
52744
- * 2. 这份表**只喂给 ⌘K 命令面板**(左/侧导航的 DOM 早已被顶栏 + 抽屉取代,
52745
- * panelNav / navGroup 那套类名现在是死 CSS)。
52746
- */
52747
- const NAV_GROUPS = [
52748
- {
52749
- id: "dashboard",
52750
- label: "总编台",
52751
- items: [{
52752
- id: "workflow",
52753
- label: tt("tab.workflow"),
52754
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.GitBranch, { size: 18 })
52755
- }]
52756
- },
52757
- {
52758
- id: "write",
52759
- label: "写作",
52760
- items: [{
52761
- id: "plan",
52762
- label: tt("tab.plan"),
52763
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.BookMarked, { size: 18 })
52764
- }, {
52765
- id: "run",
52766
- label: "生产单",
52767
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Factory, { size: 18 })
52768
- }]
52769
- },
52770
- {
52771
- id: "setup",
52772
- label: "设定",
52773
- items: [
52774
- {
52775
- id: "overview",
52776
- label: tt("tab.overview"),
52777
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.FileText, { size: 18 })
52778
- },
52779
- {
52780
- id: "book",
52781
- label: "本书设定",
52782
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Library, { size: 18 })
52783
- },
52784
- {
52785
- id: "plotlines",
52786
- label: "长线管理",
52787
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.ScrollText, { size: 18 })
52788
- }
52789
- ]
52790
- },
52791
- {
52792
- id: "tools",
52793
- label: "工具",
52794
- collapsible: true,
52795
- items: [
52796
- {
52797
- id: "knowledge",
52798
- label: "知识库",
52799
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.BookOpen, { size: 18 })
52800
- },
52801
- {
52802
- id: "breakdown",
52803
- label: "拆书分析",
52804
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Search, { size: 18 })
52805
- },
52806
- {
52807
- id: "director",
52808
- label: "自动编辑",
52809
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Brain, { size: 18 })
52810
- },
52811
- {
52812
- id: "assets",
52813
- label: "创作资产",
52814
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Folder, { size: 18 })
52815
- },
52816
- {
52817
- id: "blurb",
52818
- label: "简介 / 封面",
52819
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Book, { size: 18 })
52820
- }
52543
+ style: {
52544
+ gap: 4,
52545
+ border: "1px solid var(--nf-border)",
52546
+ borderRadius: 6,
52547
+ padding: "2px 6px"
52548
+ },
52549
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
52550
+ style: { fontSize: "var(--nf-fs-12)" },
52551
+ children: e.name
52552
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
52553
+ type: "button",
52554
+ className: panel_module_css_default.iconBtn,
52555
+ title: "从名字库移除",
52556
+ "aria-label": `移除 ${e.name}`,
52557
+ disabled: busy,
52558
+ onClick: () => {
52559
+ discard(e.id);
52560
+ },
52561
+ children: "×"
52562
+ })]
52563
+ }, e.id))
52564
+ })]
52565
+ }, spec.id);
52566
+ })
52567
+ ]
52568
+ })
52821
52569
  ]
52822
- }
52823
- ];
52824
- /** Settings tab — pinned to the bottom of the nav rail. */
52825
- const SETTINGS_TAB = {
52826
- id: "settings",
52827
- label: tt("tab.settings"),
52828
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Settings, { size: 18 })
52829
- };
52570
+ });
52571
+ }
52572
+ function specLabel(id) {
52573
+ return NAME_CATEGORIES.find((c) => c.id === id)?.label ?? "名字";
52574
+ }
52575
+ function specHint(id) {
52576
+ return NAME_CATEGORIES.find((c) => c.id === id)?.hint ?? "";
52577
+ }
52578
+ function specPlaceholder(id) {
52579
+ return NAME_CATEGORIES.find((c) => c.id === id)?.placeholder ?? "";
52580
+ }
52581
+ //#endregion
52582
+ //#region src/strip-headings.ts
52830
52583
  /**
52831
- * 顶栏导航与抽屉标题的图标语汇。
52584
+ * 章节正文的标题剥离(唯一实现)。
52832
52585
  *
52833
- * 修订(设计专属性):此前顶栏用 5 个 Unicode 字形(▣ ✎ ❖ ▦ ⚙),
52834
- * 而 NAV_GROUPS 里已经躺着 lucide 图标 + 按创作阶段归类的分组 ——
52835
- * 一套被设计好、写过、注释里解释清楚的东西从未被渲染,被临时字形替掉了。
52836
- * 现在统一到 lucide 图标语汇。
52586
+ * ## 为什么要抽
52837
52587
  *
52838
- * 归类与排序按方案 §5 的四类:**总编台 → 写作(含生产单)→ 设定 → 工具**,
52839
- * AI 助手 / AI 进度是横切能力(顶栏右侧快捷入口),不作为并列的业务分类。
52840
- * `title` 说明每个入口到底做什么(原来只有 3 个字,看不出边界)。
52588
+ * 全项目有 21 处散落着「把正文里的 markdown 标题剥掉」,写成
52589
+ * `body.replace(/^#\s+.*$/m, '')`。这个写法**只删第一行**——
52590
+ * `String.replace` 无 `g` 修饰符时只替换第一个匹配,而 `m` 只影响 `^` 的语义
52591
+ * (让它匹配每一行的行首),**不控制替换次数**。于是同一份代码库里
52592
+ * 两种写法并存:
52593
+ *
52594
+ * `replace(/^#.*$/gm, '')` → 所有标题行都剥掉(正确)
52595
+ * `replace(/^#\s+.*$/m, '')` → 只剥掉首行标题(漏)
52596
+ *
52597
+ * 漏掉的后果不是报错:
52598
+ * - 送进 LLM 的正文里夹着 `# 中间插入的标题`,模型会以为那是结构指令;
52599
+ * - diff 视图把标题当正文段落,段落 LCS 完全对不齐,作者看到满屏红绿。
52600
+ *
52601
+ * 现在只有一个实现,行为统一为「剥掉所有 markdown 标题行」,
52602
+ * 且**跳过围栏代码块**——否则 ```sh 里的 `# 这是注释` 会被当成标题剥掉,
52603
+ * 代码示例凭空少一行。
52841
52604
  */
52842
- /** 抽屉标题元数据:图标 + 文案。原先用 Unicode 字形(✎❖▦⚙⌘⚲…),
52843
- * 在无 ligature 的字体里退化成豆腐块,且与顶栏已改用的 lucide 不是一套语言。 */
52844
- const DRAWER_META = {
52845
- write: {
52846
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.BookMarked, { size: 14 }),
52847
- label: "写作 · 章节索引"
52848
- },
52849
- setup: {
52850
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.BookOpen, { size: 14 }),
52851
- label: "设定 · 道藏"
52852
- },
52853
- assets: {
52854
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Folder, { size: 14 }),
52855
- label: "资产 · 创作素材库"
52856
- },
52857
- cabinet: {
52858
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Library, { size: 14 }),
52859
- label: "资料侧柜 · 本书此刻"
52860
- },
52861
- params: {
52862
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Settings, { size: 14 }),
52863
- label: "写作参数 · 设置"
52864
- },
52865
- overview: {
52866
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.FileText, { size: 14 }),
52867
- label: "总纲 / 大纲"
52868
- },
52869
- blurb: {
52870
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Book, { size: 14 }),
52871
- label: "简介 / 封面"
52872
- },
52873
- plotlines: {
52874
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.GitBranch, { size: 14 }),
52875
- label: "剧情线 · 伏笔"
52876
- },
52877
- director: {
52878
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Brain, { size: 14 }),
52879
- label: "自动编辑"
52880
- },
52881
- knowledge: {
52882
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Library, { size: 14 }),
52883
- label: "知识库"
52884
- },
52885
- run: {
52886
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Factory, { size: 14 }),
52887
- label: "生产单"
52888
- },
52889
- breakdown: {
52890
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Search, { size: 14 }),
52891
- label: "拆书分析"
52892
- },
52893
- timeline: {
52894
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.ScrollText, { size: 14 }),
52895
- label: "故事时间线"
52896
- },
52897
- tension: {
52898
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.BarChart3, { size: 14 }),
52899
- label: "张力曲线"
52900
- },
52901
- style: {
52902
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Sparkles, { size: 14 }),
52903
- label: "风格 · 目标卡/漂移"
52904
- },
52905
- promptSlots: {
52906
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.ListTree, { size: 14 }),
52907
- label: "提示词槽位"
52908
- },
52909
- nameForge: {
52910
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Tag, { size: 14 }),
52911
- label: "取名"
52912
- },
52913
- fallback: {
52914
- icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.FileText, { size: 14 }),
52915
- label: "详情"
52605
+ /** 围栏代码块的起止行。 */
52606
+ const FENCE = /^\s{0,3}(?:```|~~~)/;
52607
+ /**
52608
+ * 剥掉正文里的 markdown 标题行。
52609
+ *
52610
+ * 保留其他内容原样(含行内空白),调用方自行再 `trim()`。
52611
+ * 判为标题:行首 1-6 个 `#` + 空白 + 内容。`#tag` 这类无空白的行首井号
52612
+ * **不**算标题(那是标签,不是标题)。围栏代码块内的行一律不动。
52613
+ *
52614
+ * @param body - 原始正文。
52615
+ * @returns 去掉标题行后的正文。
52616
+ */
52617
+ function stripChapterHeadings(body) {
52618
+ const out = [];
52619
+ let inFence = false;
52620
+ for (const line of body.split(/\r?\n/)) {
52621
+ if (FENCE.test(line)) {
52622
+ inFence = !inFence;
52623
+ out.push(line);
52624
+ continue;
52625
+ }
52626
+ if (!inFence && /^#{1,6}\s+\S/.test(line)) continue;
52627
+ out.push(line);
52916
52628
  }
52629
+ return out.join("\n").trim();
52630
+ }
52631
+ //#endregion
52632
+ //#region src/client/panel/ReviewIssueCard.tsx
52633
+ /** 严重度的作者口径文案(与 Severity 类型一一对应)。 */
52634
+ const SEV_LABEL = {
52635
+ high: "高优",
52636
+ medium: "中",
52637
+ low: "低"
52917
52638
  };
52918
- /** 审稿维度中文名(审稿问题按维度标注展示)。 */
52639
+ function ReviewIssueCard({ issue, dimensionLabel, checked, onToggle, disabled }) {
52640
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
52641
+ className: panel_module_css_default.reviewIssue,
52642
+ "data-sev": issue.severity,
52643
+ "data-on": checked ? "1" : void 0,
52644
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
52645
+ type: "checkbox",
52646
+ checked,
52647
+ disabled: disabled === true,
52648
+ onChange: (e) => {
52649
+ onToggle(e.target.checked);
52650
+ },
52651
+ "aria-label": `${SEV_LABEL[issue.severity] ?? issue.severity}问题:${issue.item}`
52652
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
52653
+ className: panel_module_css_default.reviewIssueBody,
52654
+ children: [
52655
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
52656
+ className: panel_module_css_default.reviewIssueHead,
52657
+ children: [
52658
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
52659
+ className: panel_module_css_default.reviewIssueSev,
52660
+ children: SEV_LABEL[issue.severity] ?? issue.severity
52661
+ }),
52662
+ dimensionLabel !== void 0 && dimensionLabel !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
52663
+ className: panel_module_css_default.reviewIssueDim,
52664
+ children: dimensionLabel
52665
+ }),
52666
+ issue.ruleName !== void 0 && issue.ruleName !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
52667
+ className: panel_module_css_default.reviewIssueDim,
52668
+ children: issue.ruleName
52669
+ })
52670
+ ]
52671
+ }),
52672
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
52673
+ className: panel_module_css_default.reviewIssueItem,
52674
+ children: issue.item
52675
+ }),
52676
+ issue.suggestion !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
52677
+ className: panel_module_css_default.reviewIssueFix,
52678
+ children: ["建议:", issue.suggestion]
52679
+ }),
52680
+ issue.excerpt !== void 0 && issue.excerpt !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
52681
+ className: panel_module_css_default.reviewIssueExcerpt,
52682
+ children: ["原文:", issue.excerpt]
52683
+ }),
52684
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
52685
+ className: panel_module_css_default.reviewIssuePick,
52686
+ children: "纳入本轮修订"
52687
+ })
52688
+ ]
52689
+ })]
52690
+ });
52691
+ }
52692
+ //#endregion
52693
+ //#region src/client/panel/ChapterWorkbench.tsx
52694
+ /**
52695
+ * 章节工作台(独立全页):左「本章计划」/ 中正文 / 右「对比·审稿·复盘·历史版本」。
52696
+ *
52697
+ * 从 NovelPanel.tsx 抽出(2026-10 重构):它是全页视图,不该继续挂在 6000+ 行的
52698
+ * 主组件里;全部输入走 props,内部只持自己的页签/筛选/勾选状态。
52699
+ */
52700
+ /** 审稿维度中文名(工作台与主面板共用)。 */
52919
52701
  const REVIEW_DIM_ZH = {
52920
52702
  character: "人设",
52921
52703
  setting: "设定",
@@ -52927,38 +52709,9 @@ window.__ModuleLoader__.load({
52927
52709
  presentation: "呈现",
52928
52710
  compliance: "合规"
52929
52711
  };
52930
- /** Whether any chapter is being generated right now. */
52931
- function anyGenerating(chapters) {
52932
- return (chapters ?? []).some((c) => c.status === "generating" || c.status === "reviewing");
52933
- }
52934
- /** Status badge class + label. 映射与阅读器共用 status-badge.ts,避免两处漂移。 */
52935
- /** 文案按**具体状态**取(generating 与 reviewing 同色但文案不同)。
52936
- * 用Record<ChapterStatus, …> 而非 Record<string, …>:漏登记某个状态会编译报错,
52937
- * 而 Record<string> 会静默退化成 undefined,文案直接消失。 */
52938
- /** 悬浮窗位置/尺寸的键名与默认值。放模块作用域:hook 的 fallback 每次渲染
52939
- * 若是新对象,虽不影响正确性(只在挂载时读一次),但会让调试时的引用比较失效。 */
52940
- const POS_KEYS = ["x", "y"];
52941
- const SIZE_KEYS = ["w", "h"];
52942
- const PROGRESS_POS_DEFAULT = {
52943
- x: 60,
52944
- y: 120
52945
- };
52946
- const PROGRESS_SIZE_DEFAULT = {
52947
- w: 460,
52948
- h: 420
52949
- };
52950
- const ASSISTANT_POS_DEFAULT = {
52951
- x: 260,
52952
- y: 60
52953
- };
52954
- const ASSISTANT_SIZE_DEFAULT = {
52955
- w: 420,
52956
- h: 460
52957
- };
52958
52712
  const STATUS_LABEL_KEY = {
52959
52713
  pending: "plan.pending",
52960
52714
  generating: "plan.generating",
52961
- reviewing: "plan.reviewing",
52962
52715
  written: "plan.written",
52963
52716
  approved: "plan.approved",
52964
52717
  rejected: "plan.rejected",
@@ -53851,17 +53604,730 @@ window.__ModuleLoader__.load({
53851
53604
  children: footActions
53852
53605
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
53853
53606
  className: panel_module_css_default.meta,
53854
- children: tab === "review" ? "修订 / 去AI味 / 重新生成都会先进工作区预览,确认后才写回原稿。" : tab === "diff" ? "草稿只有一份,新一轮修订会直接覆盖它。应用后原稿自动备份 .bak,放弃则原稿一字不动。" : "复盘只读取已落盘正文,不重新生成正文。"
53855
- })]
53856
- })
53857
- ]
53858
- })
53859
- ]
53607
+ children: tab === "review" ? "修订 / 去AI味 / 重新生成都会先进工作区预览,确认后才写回原稿。" : tab === "diff" ? "草稿只有一份,新一轮修订会直接覆盖它。应用后原稿自动备份 .bak,放弃则原稿一字不动。" : "复盘只读取已落盘正文,不重新生成正文。"
53608
+ })]
53609
+ })
53610
+ ]
53611
+ })
53612
+ ]
53613
+ })
53614
+ ]
53615
+ });
53616
+ }
53617
+ //#endregion
53618
+ //#region src/client/panel/home-model.ts
53619
+ /**
53620
+ * 单次遍历统计全书章节。
53621
+ * @param chapters 全书章节计划(顺序无关,按数组顺序输出 charSeries)。
53622
+ */
53623
+ function computeChapterStats(chapters) {
53624
+ let done = 0;
53625
+ let pending = 0;
53626
+ let approved = 0;
53627
+ let reviewPending = 0;
53628
+ let totalChars = 0;
53629
+ let writingNow;
53630
+ const charSeries = [];
53631
+ for (const c of chapters) {
53632
+ const s = c.status;
53633
+ if (s === "approved" || s === "written" || s === "rejected") done++;
53634
+ if (s === "pending" || s === "error") pending++;
53635
+ if (s === "approved") approved++;
53636
+ if (s === "rejected" || s === "written") reviewPending++;
53637
+ if (s === "generating") writingNow = c;
53638
+ const ch = c.chars ?? 0;
53639
+ totalChars += ch;
53640
+ charSeries.push({
53641
+ no: c.no,
53642
+ chars: ch,
53643
+ approved: s === "approved"
53644
+ });
53645
+ }
53646
+ return {
53647
+ done,
53648
+ pending,
53649
+ approved,
53650
+ reviewPending,
53651
+ totalChars,
53652
+ writingNow,
53653
+ charSeries
53654
+ };
53655
+ }
53656
+ /**
53657
+ * 创作旅程 6 阶段(大纲 → 设定 → 卷计划 → 章节计划 → 正文 → 审稿)。
53658
+ *
53659
+ * 「完成」的判定只看项目真实数据,不参考 UI 当前所在页;否则作者在
53660
+ * 「总纲」页多停留一会儿,旅程条就会自己变。
53661
+ *
53662
+ * @param project 当前书(undefined = 没有书)。
53663
+ * @param chapters 章节计划。
53664
+ * @param approvedCount 已过审章数(来自 {@link computeChapterStats})。
53665
+ */
53666
+ function computeJourneyStages(project, chapters, approvedCount) {
53667
+ return [
53668
+ {
53669
+ id: "outline",
53670
+ label: "大纲",
53671
+ done: project !== void 0
53672
+ },
53673
+ {
53674
+ id: "bible",
53675
+ label: "设定",
53676
+ done: project?.bible !== void 0
53677
+ },
53678
+ {
53679
+ id: "volumes",
53680
+ label: "卷计划",
53681
+ done: project?.volumes !== void 0
53682
+ },
53683
+ {
53684
+ id: "plan",
53685
+ label: "章节计划",
53686
+ done: chapters.length > 0
53687
+ },
53688
+ {
53689
+ id: "write",
53690
+ label: "正文",
53691
+ done: chapters.some((c) => (c.chars ?? 0) > 0)
53692
+ },
53693
+ {
53694
+ id: "review",
53695
+ label: "审稿",
53696
+ done: approvedCount > 0
53697
+ }
53698
+ ];
53699
+ }
53700
+ //#endregion
53701
+ //#region src/client/panel/WorkspaceView.tsx
53702
+ /** 工作区全页:左栏原文(可选中局部目标)+ 右栏指令 / 预览 / 应用。 */
53703
+ function WorkspaceView({ workspace, onWorkspaceChange, onClose, onGotoChapter, backTo, editorFontSize, onEditorFontSizeChange, editorRef, selected, onCaptureSelection, checkReport, checked, onCheckedChange, showDiff, onShowDiffChange, resultMode, busy, onReviseByReport, onRewrite, onPolish, onSave, onCheck, onDiscardDraft }) {
53704
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
53705
+ className: panel_module_css_default.wsPage,
53706
+ children: [
53707
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
53708
+ className: panel_module_css_default.wsPageHeader,
53709
+ children: [
53710
+ workspace.applied === true ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
53711
+ type: "button",
53712
+ className: `${panel_module_css_default.button} ${panel_module_css_default.buttonSmall} ${panel_module_css_default.buttonPrimary}`,
53713
+ onClick: () => {
53714
+ const no = workspace.no;
53715
+ onClose();
53716
+ onGotoChapter(no);
53717
+ },
53718
+ title: "关闭工作区,返回章节页并定位到本章(滚动 + 高亮);有未保存修改会先确认",
53719
+ children: "← 返回章节页"
53720
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
53721
+ type: "button",
53722
+ className: `${panel_module_css_default.button} ${panel_module_css_default.buttonSmall}`,
53723
+ onClick: onClose,
53724
+ title: `${backTo};有未保存的修改会先确认(服务端草稿不受影响)`,
53725
+ children: ["← ", backTo]
53726
+ }),
53727
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
53728
+ className: panel_module_css_default.cardTitle,
53729
+ children: [
53730
+ "第 ",
53731
+ workspace.no,
53732
+ " 章《",
53733
+ workspace.title,
53734
+ "》"
53735
+ ]
53736
+ }),
53737
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
53738
+ className: panel_module_css_default.meta,
53739
+ children: [workspace.original.length, " 字"]
53740
+ }),
53741
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
53742
+ style: {
53743
+ display: "flex",
53744
+ gap: "var(--nf-space-4)",
53745
+ alignItems: "center",
53746
+ marginLeft: "auto"
53747
+ },
53748
+ children: [
53749
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
53750
+ type: "button",
53751
+ className: panel_module_css_default.iconButton,
53752
+ title: "减小字号",
53753
+ "aria-label": "减小字号",
53754
+ onClick: () => {
53755
+ onEditorFontSizeChange(editorFontSize - 1);
53756
+ },
53757
+ children: "A−"
53758
+ }),
53759
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
53760
+ className: panel_module_css_default.meta,
53761
+ children: [editorFontSize, "px"]
53762
+ }),
53763
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
53764
+ type: "button",
53765
+ className: panel_module_css_default.iconButton,
53766
+ title: "增大字号",
53767
+ "aria-label": "增大字号",
53768
+ onClick: () => {
53769
+ onEditorFontSizeChange(editorFontSize + 1);
53770
+ },
53771
+ children: "A+"
53772
+ }),
53773
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
53774
+ type: "button",
53775
+ className: panel_module_css_default.iconButton,
53776
+ title: backTo,
53777
+ "aria-label": backTo,
53778
+ onClick: onClose,
53779
+ children: "×"
53780
+ })
53781
+ ]
53782
+ })
53783
+ ]
53784
+ }),
53785
+ workspace.applied === true && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
53786
+ className: panel_module_css_default.wsAppliedBanner,
53787
+ children: [
53788
+ "已采纳第 ",
53789
+ workspace.no,
53790
+ " 章新稿(",
53791
+ workspace.original.length,
53792
+ " 字)· 原稿已自动备份 .bak",
53793
+ checkReport !== null ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
53794
+ style: { color: checkReport.passed ? "var(--nf-success)" : "var(--nf-error)" },
53795
+ children: [
53796
+ " · ",
53797
+ "修订时审查:",
53798
+ checkReport.score,
53799
+ " 分 — ",
53800
+ checkReport.passed ? "通过 ✓" : "未通过,可继续勾选意见修订"
53801
+ ]
53802
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
53803
+ className: panel_module_css_default.meta,
53804
+ children: [" · ", "需要结论?点「 AI 审查」查看"]
53805
+ })
53806
+ ]
53807
+ }),
53808
+ workspace.applied !== true && resultMode && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
53809
+ className: panel_module_css_default.wsAppliedBanner,
53810
+ style: {
53811
+ borderColor: "var(--nf-accent)",
53812
+ background: "color-mix(in srgb, var(--nf-accent) 8%, transparent)"
53813
+ },
53814
+ children: [
53815
+ "修订完成,请查看草稿对比",
53816
+ checkReport !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
53817
+ style: { color: checkReport.passed ? "var(--nf-success)" : "var(--nf-error)" },
53818
+ children: [
53819
+ " · ",
53820
+ "草稿审查:",
53821
+ checkReport.score,
53822
+ " 分 — ",
53823
+ checkReport.passed ? "通过 ✓" : "未通过,可勾选意见继续修订"
53824
+ ]
53825
+ }),
53826
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
53827
+ className: panel_module_css_default.meta,
53828
+ children: [" · ", "满意后点「 应用并保存」落盘"]
53829
+ })
53830
+ ]
53831
+ }),
53832
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
53833
+ className: panel_module_css_default.wsColumns,
53834
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
53835
+ className: panel_module_css_default.wsColumn,
53836
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
53837
+ className: panel_module_css_default.meta,
53838
+ children: [
53839
+ "原文(",
53840
+ workspace.original.length,
53841
+ " 字)— 在正文中选中文字可作为「修订选中」的局部目标"
53842
+ ]
53843
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
53844
+ ref: editorRef,
53845
+ className: `${panel_module_css_default.textarea} ${panel_module_css_default.wsEditor}`,
53846
+ style: { fontSize: editorFontSize },
53847
+ value: workspace.original,
53848
+ onChange: (e) => {
53849
+ onWorkspaceChange({
53850
+ ...workspace,
53851
+ original: e.target.value
53852
+ });
53853
+ },
53854
+ onMouseUp: onCaptureSelection,
53855
+ onKeyUp: onCaptureSelection,
53856
+ onSelect: onCaptureSelection,
53857
+ spellCheck: false
53858
+ })]
53859
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
53860
+ className: panel_module_css_default.wsColumn,
53861
+ children: [
53862
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
53863
+ className: panel_module_css_default.meta,
53864
+ style: { fontWeight: 600 },
53865
+ children: "修正指令"
53866
+ }),
53867
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
53868
+ className: panel_module_css_default.textarea,
53869
+ style: { minHeight: 60 },
53870
+ placeholder: "输入修正要求,例如:压缩冗余、加强冲突、这段对话更口语化…(可留空)",
53871
+ value: workspace.instruction,
53872
+ onChange: (e) => {
53873
+ onWorkspaceChange({
53874
+ ...workspace,
53875
+ instruction: e.target.value
53876
+ });
53877
+ }
53878
+ }),
53879
+ selected !== "" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
53880
+ className: panel_module_css_default.wsSelected,
53881
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
53882
+ className: panel_module_css_default.meta,
53883
+ children: "当前选中内容(将用于精准修订)"
53884
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
53885
+ className: panel_module_css_default.wsSelectedText,
53886
+ children: selected
53887
+ })]
53888
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
53889
+ className: panel_module_css_default.meta,
53890
+ children: "未选中内容时仅支持整章润色/修订。"
53891
+ }),
53892
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
53893
+ className: panel_module_css_default.row,
53894
+ children: [
53895
+ checkReport !== null && checkReport.issues.length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
53896
+ type: "button",
53897
+ className: `${panel_module_css_default.button} ${panel_module_css_default.buttonSmall}`,
53898
+ disabled: busy || checked.length === 0,
53899
+ onClick: () => {
53900
+ onReviseByReport();
53901
+ },
53902
+ title: "修订下方勾选的意见(整章重写);产出草稿后自动附带一次 AI 审查",
53903
+ children: [
53904
+ "修订已选 ",
53905
+ checked.length,
53906
+ " 条"
53907
+ ]
53908
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
53909
+ type: "button",
53910
+ className: `${panel_module_css_default.button} ${panel_module_css_default.buttonSmall}`,
53911
+ disabled: busy || workspace.instruction.trim() === "",
53912
+ onClick: () => {
53913
+ onRewrite(true);
53914
+ },
53915
+ title: "按指令框内容整章修订",
53916
+ children: "整章修订"
53917
+ }),
53918
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
53919
+ type: "button",
53920
+ className: `${panel_module_css_default.button} ${panel_module_css_default.buttonSmall}`,
53921
+ disabled: busy,
53922
+ onClick: () => {
53923
+ onPolish();
53924
+ },
53925
+ children: "去AI味润色"
53926
+ }),
53927
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
53928
+ type: "button",
53929
+ className: `${panel_module_css_default.button} ${panel_module_css_default.buttonSmall} ${panel_module_css_default.buttonPrimary}`,
53930
+ disabled: busy || workspace.original.trim().length < 50,
53931
+ onClick: () => {
53932
+ onSave();
53933
+ },
53934
+ title: "有草稿则应用草稿,无草稿则保存当前编辑;沿用审查结论或自动审稿,落盘后原地显示结果",
53935
+ children: "应用并保存"
53936
+ }),
53937
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
53938
+ type: "button",
53939
+ className: `${panel_module_css_default.button} ${panel_module_css_default.buttonSmall}`,
53940
+ disabled: busy || selected === "",
53941
+ onClick: () => {
53942
+ onRewrite(false);
53943
+ },
53944
+ title: "只修订在左栏选中的文字片段",
53945
+ children: "修订选中"
53946
+ }),
53947
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
53948
+ type: "button",
53949
+ className: `${panel_module_css_default.button} ${panel_module_css_default.buttonSmall}`,
53950
+ disabled: busy || workspace.original.trim().length < 50,
53951
+ onClick: () => {
53952
+ onCheck();
53953
+ },
53954
+ title: "对当前正文跑一次 AI 审查(不落盘)",
53955
+ children: "AI 审查"
53956
+ }),
53957
+ workspace.draft !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
53958
+ type: "button",
53959
+ className: `${panel_module_css_default.button} ${panel_module_css_default.buttonSmall}`,
53960
+ disabled: busy,
53961
+ onClick: () => {
53962
+ onDiscardDraft(workspace.no);
53963
+ },
53964
+ title: "放弃草稿,保留原稿",
53965
+ children: "↩ 放弃草稿"
53966
+ })
53967
+ ]
53968
+ }),
53969
+ checkReport !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
53970
+ className: panel_module_css_default.wsPreview,
53971
+ style: { borderColor: checkReport.passed ? "var(--nf-success)" : "var(--nf-warn)" },
53972
+ children: [
53973
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
53974
+ className: panel_module_css_default.busyRow,
53975
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
53976
+ className: panel_module_css_default.meta,
53977
+ style: { fontWeight: 600 },
53978
+ children: "审查结果"
53979
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
53980
+ style: { color: checkReport.passed ? "var(--nf-success)" : "var(--nf-error)" },
53981
+ children: [
53982
+ checkReport.score,
53983
+ " 分 — ",
53984
+ checkReport.passed ? "通过" : "未通过"
53985
+ ]
53986
+ })]
53987
+ }),
53988
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
53989
+ className: panel_module_css_default.meta,
53990
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { children: "总评:" }), checkReport.verdict]
53991
+ }),
53992
+ checkReport.issues.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
53993
+ style: {
53994
+ margin: 0,
53995
+ paddingLeft: "var(--nf-space-16)",
53996
+ display: "flex",
53997
+ flexDirection: "column",
53998
+ gap: "var(--nf-space-4)",
53999
+ fontSize: editorFontSize - 1,
54000
+ maxHeight: "45vh",
54001
+ overflowY: "auto"
54002
+ },
54003
+ children: checkReport.issues.map((issue, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
54004
+ style: {
54005
+ color: severityColor(issue.severity),
54006
+ display: "flex",
54007
+ gap: "var(--nf-space-6)",
54008
+ alignItems: "flex-start"
54009
+ },
54010
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
54011
+ type: "checkbox",
54012
+ style: { marginTop: "var(--nf-space-2)" },
54013
+ checked: checked.includes(i),
54014
+ onChange: (e) => {
54015
+ onCheckedChange((prev) => e.target.checked ? [...prev, i] : prev.filter((x) => x !== i));
54016
+ },
54017
+ title: "勾选后由「按意见修订」一起修订"
54018
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [
54019
+ "[",
54020
+ issue.severity,
54021
+ issue.dimension !== void 0 ? ` · ${REVIEW_DIM_ZH[issue.dimension] ?? issue.dimension}` : "",
54022
+ "] ",
54023
+ issue.item,
54024
+ issue.suggestion !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
54025
+ style: { color: "var(--nf-text-2)" },
54026
+ children: [" → ", issue.suggestion]
54027
+ })
54028
+ ] })]
54029
+ }, i))
54030
+ }),
54031
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
54032
+ className: panel_module_css_default.meta,
54033
+ children: checkReport.passed ? "当前意见:已通过。勾选想微调的问题点「按意见修订」,或直接「 应用并保存」。" : "意见只读不落盘;勾选要修的问题点「 按意见修订」一键修订(默认已勾 high),满意后点「 应用并保存」写入文件(原稿自动备份 .bak)。"
54034
+ })
54035
+ ]
54036
+ }),
54037
+ workspace.draft !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
54038
+ className: panel_module_css_default.wsPreview,
54039
+ style: {
54040
+ flex: 1,
54041
+ minHeight: 0
54042
+ },
54043
+ children: [
54044
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
54045
+ className: panel_module_css_default.busyRow,
54046
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
54047
+ className: panel_module_css_default.meta,
54048
+ children: [
54049
+ "优化预览(",
54050
+ workspace.draft.length,
54051
+ " 字)"
54052
+ ]
54053
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
54054
+ style: {
54055
+ display: "flex",
54056
+ gap: "var(--nf-space-8)"
54057
+ },
54058
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
54059
+ type: "button",
54060
+ className: `${panel_module_css_default.button} ${panel_module_css_default.buttonSmall}`,
54061
+ onClick: () => {
54062
+ onShowDiffChange(!showDiff);
54063
+ },
54064
+ children: showDiff ? "显示文本" : "查看对比"
54065
+ })
54066
+ })]
54067
+ }),
54068
+ showDiff ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DiffList, {
54069
+ original: workspace.original,
54070
+ draft: workspace.draft,
54071
+ fontSize: editorFontSize
54072
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("pre", {
54073
+ className: panel_module_css_default.wsPreviewText,
54074
+ style: { fontSize: editorFontSize },
54075
+ children: workspace.draft
54076
+ }),
54077
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
54078
+ className: panel_module_css_default.meta,
54079
+ children: "满意后点上方「 应用并保存」落盘(原稿自动备份 .bak);不满意可继续修订。"
54080
+ })
54081
+ ]
54082
+ })
54083
+ ]
54084
+ })]
53860
54085
  })
53861
54086
  ]
53862
54087
  });
53863
54088
  }
53864
- /** The novel-forge panel. */
54089
+ //#endregion
54090
+ //#region src/client/panel/NovelPanel.tsx
54091
+ /**
54092
+ * The novel-forge workbench panel: tabs — 工作流 (guided pipeline), 大纲
54093
+ * (outline), 章节 (chapter plan + per-chapter write/review/rewrite/polish),
54094
+ * 设定库 (story bible), 伏笔 (foreshadows), 设置 (config). Generation and
54095
+ * review streams land in the progress console.
54096
+ */
54097
+ /** One progress console line. */
54098
+ /** 相对时间(最近活动用):刚刚 / N 分钟前 / N 小时前 / N 天前。 */
54099
+ function relTime(ms) {
54100
+ const diff = Date.now() - ms;
54101
+ if (!Number.isFinite(diff) || diff < 0) return "";
54102
+ const min = Math.floor(diff / 6e4);
54103
+ if (min < 1) return "刚刚";
54104
+ if (min < 60) return String(min) + " 分钟前";
54105
+ const hr = Math.floor(min / 60);
54106
+ if (hr < 24) return String(hr) + " 小时前";
54107
+ return String(Math.floor(hr / 24)) + " 天前";
54108
+ }
54109
+ /** ⌘K 跳转映射:内容已搬进右滑抽屉的 tab → 抽屉 id(不在表内的走底座/浮窗分支)。 */
54110
+ const CMD_DRAWER_OF = {
54111
+ plan: "write",
54112
+ book: "setup",
54113
+ assets: "assets",
54114
+ overview: "overview",
54115
+ blurb: "blurb",
54116
+ plotlines: "plotlines",
54117
+ director: "director",
54118
+ knowledge: "knowledge",
54119
+ run: "run",
54120
+ breakdown: "breakdown"
54121
+ };
54122
+ /**
54123
+ * 全局信息架构分组(方案 §5):总编台 / 写作 / 设定 / 工具 四类,按作者真实流程排。
54124
+ *
54125
+ * 两个刻意的设计:
54126
+ * 1. **AI 不与写作、设定并列**。AI 助手 / AI 进度是贯穿所有阶段的能力,
54127
+ * 所以它们是顶栏快捷入口 + 命令面板的两条独立命令,而不是一个叫「AI 协同」的分类
54128
+ * ——把 AI 单列成业务分类,会让「在哪找到 AI」变成第二个问题。
54129
+ * 2. 这份表**只喂给 ⌘K 命令面板**(左/侧导航的 DOM 早已被顶栏 + 抽屉取代,
54130
+ * panelNav / navGroup 那套类名现在是死 CSS)。
54131
+ */
54132
+ const NAV_GROUPS = [
54133
+ {
54134
+ id: "dashboard",
54135
+ label: "总编台",
54136
+ items: [{
54137
+ id: "workflow",
54138
+ label: tt("tab.workflow"),
54139
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.GitBranch, { size: 18 })
54140
+ }]
54141
+ },
54142
+ {
54143
+ id: "write",
54144
+ label: "写作",
54145
+ items: [{
54146
+ id: "plan",
54147
+ label: tt("tab.plan"),
54148
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.BookMarked, { size: 18 })
54149
+ }, {
54150
+ id: "run",
54151
+ label: "生产单",
54152
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Factory, { size: 18 })
54153
+ }]
54154
+ },
54155
+ {
54156
+ id: "setup",
54157
+ label: "设定",
54158
+ items: [
54159
+ {
54160
+ id: "overview",
54161
+ label: tt("tab.overview"),
54162
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.FileText, { size: 18 })
54163
+ },
54164
+ {
54165
+ id: "book",
54166
+ label: "本书设定",
54167
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Library, { size: 18 })
54168
+ },
54169
+ {
54170
+ id: "plotlines",
54171
+ label: "长线管理",
54172
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.ScrollText, { size: 18 })
54173
+ }
54174
+ ]
54175
+ },
54176
+ {
54177
+ id: "tools",
54178
+ label: "工具",
54179
+ collapsible: true,
54180
+ items: [
54181
+ {
54182
+ id: "knowledge",
54183
+ label: "知识库",
54184
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.BookOpen, { size: 18 })
54185
+ },
54186
+ {
54187
+ id: "breakdown",
54188
+ label: "拆书分析",
54189
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Search, { size: 18 })
54190
+ },
54191
+ {
54192
+ id: "director",
54193
+ label: "自动编辑",
54194
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Brain, { size: 18 })
54195
+ },
54196
+ {
54197
+ id: "assets",
54198
+ label: "创作资产",
54199
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Folder, { size: 18 })
54200
+ },
54201
+ {
54202
+ id: "blurb",
54203
+ label: "简介 / 封面",
54204
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Book, { size: 18 })
54205
+ }
54206
+ ]
54207
+ }
54208
+ ];
54209
+ /** Settings tab — pinned to the bottom of the nav rail. */
54210
+ const SETTINGS_TAB = {
54211
+ id: "settings",
54212
+ label: tt("tab.settings"),
54213
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Settings, { size: 18 })
54214
+ };
54215
+ /**
54216
+ * 顶栏导航与抽屉标题的图标语汇。
54217
+ *
54218
+ * 修订(设计专属性):此前顶栏用 5 个 Unicode 字形(▣ ✎ ❖ ▦ ⚙),
54219
+ * 而 NAV_GROUPS 里已经躺着 lucide 图标 + 按创作阶段归类的分组 ——
54220
+ * 一套被设计好、写过、注释里解释清楚的东西从未被渲染,被临时字形替掉了。
54221
+ * 现在统一到 lucide 图标语汇。
54222
+ *
54223
+ * 归类与排序按方案 §5 的四类:**总编台 → 写作(含生产单)→ 设定 → 工具**,
54224
+ * AI 助手 / AI 进度是横切能力(顶栏右侧快捷入口),不作为并列的业务分类。
54225
+ * `title` 说明每个入口到底做什么(原来只有 3 个字,看不出边界)。
54226
+ */
54227
+ /** 抽屉标题元数据:图标 + 文案。原先用 Unicode 字形(✎❖▦⚙⌘⚲…),
54228
+ * 在无 ligature 的字体里退化成豆腐块,且与顶栏已改用的 lucide 不是一套语言。 */
54229
+ const DRAWER_META = {
54230
+ write: {
54231
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.BookMarked, { size: 14 }),
54232
+ label: "写作 · 章节索引"
54233
+ },
54234
+ setup: {
54235
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.BookOpen, { size: 14 }),
54236
+ label: "设定 · 道藏"
54237
+ },
54238
+ assets: {
54239
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Folder, { size: 14 }),
54240
+ label: "资产 · 创作素材库"
54241
+ },
54242
+ cabinet: {
54243
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Library, { size: 14 }),
54244
+ label: "资料侧柜 · 本书此刻"
54245
+ },
54246
+ params: {
54247
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Settings, { size: 14 }),
54248
+ label: "写作参数 · 设置"
54249
+ },
54250
+ overview: {
54251
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.FileText, { size: 14 }),
54252
+ label: "总纲 / 大纲"
54253
+ },
54254
+ blurb: {
54255
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Book, { size: 14 }),
54256
+ label: "简介 / 封面"
54257
+ },
54258
+ plotlines: {
54259
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.GitBranch, { size: 14 }),
54260
+ label: "剧情线 · 伏笔"
54261
+ },
54262
+ director: {
54263
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Brain, { size: 14 }),
54264
+ label: "自动编辑"
54265
+ },
54266
+ knowledge: {
54267
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Library, { size: 14 }),
54268
+ label: "知识库"
54269
+ },
54270
+ run: {
54271
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Factory, { size: 14 }),
54272
+ label: "生产单"
54273
+ },
54274
+ breakdown: {
54275
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Search, { size: 14 }),
54276
+ label: "拆书分析"
54277
+ },
54278
+ timeline: {
54279
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.ScrollText, { size: 14 }),
54280
+ label: "故事时间线"
54281
+ },
54282
+ tension: {
54283
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.BarChart3, { size: 14 }),
54284
+ label: "张力曲线"
54285
+ },
54286
+ style: {
54287
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Sparkles, { size: 14 }),
54288
+ label: "风格 · 目标卡/漂移"
54289
+ },
54290
+ promptSlots: {
54291
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.ListTree, { size: 14 }),
54292
+ label: "提示词槽位"
54293
+ },
54294
+ nameForge: {
54295
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Tag, { size: 14 }),
54296
+ label: "取名"
54297
+ },
54298
+ fallback: {
54299
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.FileText, { size: 14 }),
54300
+ label: "详情"
54301
+ }
54302
+ };
54303
+ /** Whether any chapter is being generated right now. */
54304
+ function anyGenerating(chapters) {
54305
+ return (chapters ?? []).some((c) => c.status === "generating");
54306
+ }
54307
+ /** Status badge class + label. 映射与阅读器共用 status-badge.ts,避免两处漂移。 */
54308
+ /** 文案按**具体状态**取(generating 与 reviewing 同色但文案不同)。
54309
+ * 用Record<ChapterStatus, …> 而非 Record<string, …>:漏登记某个状态会编译报错,
54310
+ * 而 Record<string> 会静默退化成 undefined,文案直接消失。 */
54311
+ /** 悬浮窗位置/尺寸的键名与默认值。放模块作用域:hook 的 fallback 每次渲染
54312
+ * 若是新对象,虽不影响正确性(只在挂载时读一次),但会让调试时的引用比较失效。 */
54313
+ const POS_KEYS = ["x", "y"];
54314
+ const SIZE_KEYS = ["w", "h"];
54315
+ const PROGRESS_POS_DEFAULT = {
54316
+ x: 60,
54317
+ y: 120
54318
+ };
54319
+ const PROGRESS_SIZE_DEFAULT = {
54320
+ w: 460,
54321
+ h: 420
54322
+ };
54323
+ const ASSISTANT_POS_DEFAULT = {
54324
+ x: 260,
54325
+ y: 60
54326
+ };
54327
+ const ASSISTANT_SIZE_DEFAULT = {
54328
+ w: 420,
54329
+ h: 460
54330
+ };
53865
54331
  function NovelPanel({ controller, api }) {
53866
54332
  const [activeTab, setActiveTab] = (0, react.useState)("workflow");
53867
54333
  const [config, setConfig] = (0, react.useState)(null);
@@ -54009,8 +54475,6 @@ window.__ModuleLoader__.load({
54009
54475
  (0, react.useEffect)(() => {
54010
54476
  if (auditStatus?.status === "running" || auditStatus?.status === "error" || auditIssues !== null) setRightDrawer((prev) => prev === null || prev === "cabinet" ? "cabinet" : prev);
54011
54477
  }, [auditStatus?.status, auditIssues]);
54012
- /** 角色卡(从事实库聚合)。 */
54013
- const [, setCharCards] = (0, react.useState)(null);
54014
54478
  /** 世界观规则编辑草稿(bible tab,每行一条)。 */
54015
54479
  const [worldRulesDraft, setWorldRulesDraft] = (0, react.useState)("");
54016
54480
  /** 小说简介编辑草稿。 */
@@ -54093,8 +54557,6 @@ window.__ModuleLoader__.load({
54093
54557
  const [plotlineHealth, setPlotlineHealth] = (0, react.useState)(null);
54094
54558
  /** 剧情方案(null = 未运行)。 */
54095
54559
  const [plotlinePlan, setPlotlinePlan] = (0, react.useState)(null);
54096
- /** npm 最新版本(更新检测;null = 未检测/检测失败)。 */
54097
- const [, setNpmLatest] = (0, react.useState)(null);
54098
54560
  /** 活动输出容器:自动滚动锚点(有新活动时跟随到底部)。 */
54099
54561
  const progressEndRef = (0, react.useRef)(null);
54100
54562
  (0, react.useEffect)(() => {
@@ -54103,16 +54565,6 @@ window.__ModuleLoader__.load({
54103
54565
  block: "nearest"
54104
54566
  });
54105
54567
  }, [progress]);
54106
- /** 后台检测 npm 最新版本(失败静默,不打扰)。 */
54107
- (0, react.useEffect)(() => {
54108
- let cancelled = false;
54109
- fetch("https://registry.npmjs.org/@waterwx%2Fdsh-novel-forge").then((response) => response.json()).then((data) => {
54110
- if (!cancelled && data["dist-tags"]?.latest !== void 0) setNpmLatest(data["dist-tags"].latest);
54111
- }).catch(() => {});
54112
- return () => {
54113
- cancelled = true;
54114
- };
54115
- }, []);
54116
54568
  /** AI 助手悬浮窗:是否打开。 */
54117
54569
  const [assistantOpen, setAssistantOpen] = (0, react.useState)(false);
54118
54570
  /** 顶部导航右滑抽屉:写作/设定/资产/参数/工具页 = 内容抽屉。null = 常驻总编台。资料侧柜走总编台内嵌格,不再有独立滑出层。 */
@@ -54505,8 +54957,6 @@ window.__ModuleLoader__.load({
54505
54957
  setAuditStatus(status.audit ?? null);
54506
54958
  setStage(status.stage ?? null);
54507
54959
  setProject(status.project ?? null);
54508
- if (status.project?.roleStatus !== void 0) setCharCards(status.project.roleStatus);
54509
- else setCharCards(null);
54510
54960
  setGeneratedFiles(status.generatedFiles);
54511
54961
  const withDraft = status.project?.chapters.find((c) => c.pendingDraft !== void 0 && c.pendingDraft !== "");
54512
54962
  setDraftNo(withDraft?.no ?? null);
@@ -54543,7 +54993,6 @@ window.__ModuleLoader__.load({
54543
54993
  setExpandedChapter(null);
54544
54994
  setProgress([]);
54545
54995
  setAuditIssues(null);
54546
- setCharCards(null);
54547
54996
  await refresh(false, true);
54548
54997
  if (seq !== activateSeq.current) return;
54549
54998
  await refreshShelf();
@@ -54728,7 +55177,6 @@ window.__ModuleLoader__.load({
54728
55177
  setError("");
54729
55178
  try {
54730
55179
  const result = await api.charactersRefresh();
54731
- setCharCards(result.cards);
54732
55180
  setProject((prev) => prev === null ? prev : {
54733
55181
  ...prev,
54734
55182
  roleStatus: result.cards,
@@ -56130,16 +56578,15 @@ window.__ModuleLoader__.load({
56130
56578
  setError("");
56131
56579
  try {
56132
56580
  const result = await api.exportBook(format, scope);
56133
- setNotice(tt("settings.exported", {
56134
- file: result.file,
56135
- chars: result.chars,
56136
- chapters: result.chapters
56137
- }));
56138
- pushProgress(tt("settings.exported", {
56581
+ const skipped = result.skipped ?? [];
56582
+ const base = tt("settings.exported", {
56139
56583
  file: result.file,
56140
56584
  chars: result.chars,
56141
56585
  chapters: result.chapters
56142
- }), "done");
56586
+ });
56587
+ const msg = skipped.length > 0 ? `${base};跳过 ${skipped.length} 章(正文文件缺失或为空):第${skipped.join("、")}章` : base;
56588
+ setNotice(msg);
56589
+ pushProgress(msg, "done");
56143
56590
  } catch (err) {
56144
56591
  setError(err.message);
56145
56592
  } finally {
@@ -56267,39 +56714,7 @@ window.__ModuleLoader__.load({
56267
56714
  * 走 5 遍。改法要点不只是省循环,还要 `useMemo`——`chapters` 来自
56268
56715
  * `project?.chapters ?? []`,每次 project 变化都是新数组,不 memo 等于白算。
56269
56716
  */
56270
- const chapterStats = (0, react.useMemo)(() => {
56271
- let done = 0;
56272
- let pending = 0;
56273
- let approved = 0;
56274
- let reviewPending = 0;
56275
- let totalChars = 0;
56276
- let writingNow;
56277
- const charSeries = [];
56278
- for (const c of chapters) {
56279
- const s = c.status;
56280
- if (s === "approved" || s === "written" || s === "rejected") done++;
56281
- if (s === "pending" || s === "error") pending++;
56282
- if (s === "approved") approved++;
56283
- if (s === "rejected" || s === "written") reviewPending++;
56284
- if (s === "generating" || s === "reviewing") writingNow = c;
56285
- const ch = c.chars ?? 0;
56286
- totalChars += ch;
56287
- charSeries.push({
56288
- no: c.no,
56289
- chars: ch,
56290
- approved: s === "approved"
56291
- });
56292
- }
56293
- return {
56294
- done,
56295
- pending,
56296
- approved,
56297
- reviewPending,
56298
- totalChars,
56299
- writingNow,
56300
- charSeries
56301
- };
56302
- }, [chapters]);
56717
+ const chapterStats = (0, react.useMemo)(() => computeChapterStats(chapters), [chapters]);
56303
56718
  const doneCount = chapterStats.done;
56304
56719
  const pendingCount = chapterStats.pending;
56305
56720
  const bible = project?.bible;
@@ -56504,38 +56919,11 @@ window.__ModuleLoader__.load({
56504
56919
  }
56505
56920
  ];
56506
56921
  /** 创作旅程 6 阶段(完成/当前/未到)。 */
56507
- const journeyStages = [
56508
- {
56509
- id: "outline",
56510
- label: "大纲",
56511
- done: project !== null
56512
- },
56513
- {
56514
- id: "bible",
56515
- label: "设定",
56516
- done: bible !== void 0
56517
- },
56518
- {
56519
- id: "volumes",
56520
- label: "卷计划",
56521
- done: volumes !== void 0
56522
- },
56523
- {
56524
- id: "plan",
56525
- label: "章节计划",
56526
- done: chapters.length > 0
56527
- },
56528
- {
56529
- id: "write",
56530
- label: "正文",
56531
- done: chapters.some((c) => (c.chars ?? 0) > 0)
56532
- },
56533
- {
56534
- id: "review",
56535
- label: "审稿",
56536
- done: approvedCount > 0
56537
- }
56538
- ];
56922
+ const journeyStages = (0, react.useMemo)(() => computeJourneyStages(project ?? void 0, chapters, chapterStats.approved), [
56923
+ project,
56924
+ chapters,
56925
+ chapterStats.approved
56926
+ ]);
56539
56927
  const currentStageId = journeyStages.find((s) => !s.done)?.id;
56540
56928
  /** 创作时间线阶段点击 → 跳转对应 tab。 */
56541
56929
  const jumpToStage = (id) => {
@@ -56982,7 +57370,7 @@ window.__ModuleLoader__.load({
56982
57370
  };
56983
57371
  }, [chapters]);
56984
57372
  /** hero 聚焦的章:优先「等你处置」的章,其次正在生成的,再次下一章待写的。 */
56985
- const heroFocus = chapters.find((c) => c.status === "written" || c.status === "rejected") ?? chapters.find((c) => c.status === "generating" || c.status === "reviewing") ?? chapters.find((c) => c.status === "pending") ?? chapters[chapters.length - 1];
57373
+ const heroFocus = chapters.find((c) => c.status === "written" || c.status === "rejected") ?? chapters.find((c) => c.status === "generating") ?? chapters.find((c) => c.status === "pending") ?? chapters[chapters.length - 1];
56986
57374
  /** hero 眉标:第 N 章 · 标题;没有章节时退回书名。 */
56987
57375
  const heroKicker = heroFocus !== void 0 ? "第 " + String(heroFocus.no) + " 章" + (heroFocus.title !== "" ? " · " + heroFocus.title : "") : project?.bookName ?? "";
56988
57376
  /** hero meta 行:只放**能真算出来**的事实(不放 demo 里那种没有数据源的日环比/耗时预估)。 */
@@ -57076,7 +57464,6 @@ window.__ModuleLoader__.load({
57076
57464
  setExpandedChapter(null);
57077
57465
  setProgress([]);
57078
57466
  setAuditIssues(null);
57079
- setCharCards(null);
57080
57467
  await refresh(false, true);
57081
57468
  await refreshShelf();
57082
57469
  setViewMode("workspace");
@@ -59784,389 +60171,42 @@ window.__ModuleLoader__.load({
59784
60171
  })]
59785
60172
  })
59786
60173
  }),
59787
- workspace !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
59788
- className: panel_module_css_default.wsPage,
59789
- children: [
59790
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
59791
- className: panel_module_css_default.wsPageHeader,
59792
- children: [
59793
- workspace.applied === true ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
59794
- type: "button",
59795
- className: `${panel_module_css_default.button} ${panel_module_css_default.buttonSmall} ${panel_module_css_default.buttonPrimary}`,
59796
- onClick: () => {
59797
- const no = workspace.no;
59798
- closeWorkspace();
59799
- gotoChapter(no);
59800
- },
59801
- title: "关闭工作区,返回章节页并定位到本章(滚动 + 高亮);有未保存修改会先确认",
59802
- children: "← 返回章节页"
59803
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
59804
- type: "button",
59805
- className: `${panel_module_css_default.button} ${panel_module_css_default.buttonSmall}`,
59806
- onClick: closeWorkspace,
59807
- title: `${wsBackTo};有未保存的修改会先确认(服务端草稿不受影响)`,
59808
- children: ["← ", wsBackTo]
59809
- }),
59810
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
59811
- className: panel_module_css_default.cardTitle,
59812
- children: [
59813
- "第 ",
59814
- workspace.no,
59815
- " 章《",
59816
- workspace.title,
59817
- "》"
59818
- ]
59819
- }),
59820
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
59821
- className: panel_module_css_default.meta,
59822
- children: [workspace.original.length, " 字"]
59823
- }),
59824
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
59825
- style: {
59826
- display: "flex",
59827
- gap: "var(--nf-space-4)",
59828
- alignItems: "center",
59829
- marginLeft: "auto"
59830
- },
59831
- children: [
59832
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
59833
- type: "button",
59834
- className: panel_module_css_default.iconButton,
59835
- title: "减小字号",
59836
- "aria-label": "减小字号",
59837
- onClick: () => {
59838
- changeEditorFontSize(editorFontSize - 1);
59839
- },
59840
- children: "A−"
59841
- }),
59842
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
59843
- className: panel_module_css_default.meta,
59844
- children: [editorFontSize, "px"]
59845
- }),
59846
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
59847
- type: "button",
59848
- className: panel_module_css_default.iconButton,
59849
- title: "增大字号",
59850
- "aria-label": "增大字号",
59851
- onClick: () => {
59852
- changeEditorFontSize(editorFontSize + 1);
59853
- },
59854
- children: "A+"
59855
- }),
59856
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
59857
- type: "button",
59858
- className: panel_module_css_default.iconButton,
59859
- title: wsBackTo,
59860
- "aria-label": wsBackTo,
59861
- onClick: closeWorkspace,
59862
- children: "×"
59863
- })
59864
- ]
59865
- })
59866
- ]
59867
- }),
59868
- workspace.applied === true && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
59869
- className: panel_module_css_default.wsAppliedBanner,
59870
- children: [
59871
- "已采纳第 ",
59872
- workspace.no,
59873
- " 章新稿(",
59874
- workspace.original.length,
59875
- " 字)· 原稿已自动备份 .bak",
59876
- wsCheckReport !== null ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
59877
- style: { color: wsCheckReport.passed ? "var(--nf-success)" : "var(--nf-error)" },
59878
- children: [
59879
- " · ",
59880
- "修订时审查:",
59881
- wsCheckReport.score,
59882
- " 分 — ",
59883
- wsCheckReport.passed ? "通过 ✓" : "未通过,可继续勾选意见修订"
59884
- ]
59885
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
59886
- className: panel_module_css_default.meta,
59887
- children: [" · ", "需要结论?点「 AI 审查」查看"]
59888
- })
59889
- ]
59890
- }),
59891
- workspace.applied !== true && wsResultMode && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
59892
- className: panel_module_css_default.wsAppliedBanner,
59893
- style: {
59894
- borderColor: "var(--nf-accent)",
59895
- background: "color-mix(in srgb, var(--nf-accent) 8%, transparent)"
59896
- },
59897
- children: [
59898
- "修订完成,请查看草稿对比",
59899
- wsCheckReport !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
59900
- style: { color: wsCheckReport.passed ? "var(--nf-success)" : "var(--nf-error)" },
59901
- children: [
59902
- " · ",
59903
- "草稿审查:",
59904
- wsCheckReport.score,
59905
- " 分 — ",
59906
- wsCheckReport.passed ? "通过 ✓" : "未通过,可勾选意见继续修订"
59907
- ]
59908
- }),
59909
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
59910
- className: panel_module_css_default.meta,
59911
- children: [" · ", "满意后点「 应用并保存」落盘"]
59912
- })
59913
- ]
59914
- }),
59915
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
59916
- className: panel_module_css_default.wsColumns,
59917
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
59918
- className: panel_module_css_default.wsColumn,
59919
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
59920
- className: panel_module_css_default.meta,
59921
- children: [
59922
- "原文(",
59923
- workspace.original.length,
59924
- " 字)— 在正文中选中文字可作为「修订选中」的局部目标"
59925
- ]
59926
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
59927
- ref: wsEditorRef,
59928
- className: `${panel_module_css_default.textarea} ${panel_module_css_default.wsEditor}`,
59929
- style: { fontSize: editorFontSize },
59930
- value: workspace.original,
59931
- onChange: (e) => {
59932
- setWorkspace({
59933
- ...workspace,
59934
- original: e.target.value
59935
- });
59936
- },
59937
- onMouseUp: captureWsSelection,
59938
- onKeyUp: captureWsSelection,
59939
- onSelect: captureWsSelection,
59940
- spellCheck: false
59941
- })]
59942
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
59943
- className: panel_module_css_default.wsColumn,
59944
- children: [
59945
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
59946
- className: panel_module_css_default.meta,
59947
- style: { fontWeight: 600 },
59948
- children: "修正指令"
59949
- }),
59950
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
59951
- className: panel_module_css_default.textarea,
59952
- style: { minHeight: 60 },
59953
- placeholder: "输入修正要求,例如:压缩冗余、加强冲突、这段对话更口语化…(可留空)",
59954
- value: workspace.instruction,
59955
- onChange: (e) => {
59956
- setWorkspace({
59957
- ...workspace,
59958
- instruction: e.target.value
59959
- });
59960
- }
59961
- }),
59962
- wsSelected !== "" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
59963
- className: panel_module_css_default.wsSelected,
59964
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
59965
- className: panel_module_css_default.meta,
59966
- children: "当前选中内容(将用于精准修订)"
59967
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
59968
- className: panel_module_css_default.wsSelectedText,
59969
- children: wsSelected
59970
- })]
59971
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
59972
- className: panel_module_css_default.meta,
59973
- children: "未选中内容时仅支持整章润色/修订。"
59974
- }),
59975
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
59976
- className: panel_module_css_default.row,
59977
- children: [
59978
- wsCheckReport !== null && wsCheckReport.issues.length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
59979
- type: "button",
59980
- className: `${panel_module_css_default.button} ${panel_module_css_default.buttonSmall}`,
59981
- disabled: busy || wsChecked.length === 0,
59982
- onClick: () => {
59983
- handleWsReviseByReport();
59984
- },
59985
- title: "修订下方勾选的意见(整章重写);产出草稿后自动附带一次 AI 审查",
59986
- children: [
59987
- "修订已选 ",
59988
- wsChecked.length,
59989
- " 条"
59990
- ]
59991
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
59992
- type: "button",
59993
- className: `${panel_module_css_default.button} ${panel_module_css_default.buttonSmall}`,
59994
- disabled: busy || workspace.instruction.trim() === "",
59995
- onClick: () => {
59996
- handleWsRewrite(true);
59997
- },
59998
- title: "按指令框内容整章修订",
59999
- children: "整章修订"
60000
- }),
60001
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
60002
- type: "button",
60003
- className: `${panel_module_css_default.button} ${panel_module_css_default.buttonSmall}`,
60004
- disabled: busy,
60005
- onClick: () => {
60006
- handleWsPolish();
60007
- },
60008
- children: "去AI味润色"
60009
- }),
60010
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
60011
- type: "button",
60012
- className: `${panel_module_css_default.button} ${panel_module_css_default.buttonSmall} ${panel_module_css_default.buttonPrimary}`,
60013
- disabled: busy || workspace.original.trim().length < 50,
60014
- onClick: () => {
60015
- handleWsSave();
60016
- },
60017
- title: "有草稿则应用草稿,无草稿则保存当前编辑;沿用审查结论或自动审稿,落盘后原地显示结果",
60018
- children: "应用并保存"
60019
- }),
60020
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
60021
- type: "button",
60022
- className: `${panel_module_css_default.button} ${panel_module_css_default.buttonSmall}`,
60023
- disabled: busy || wsSelected === "",
60024
- onClick: () => {
60025
- handleWsRewrite(false);
60026
- },
60027
- title: "只修订在左栏选中的文字片段",
60028
- children: "修订选中"
60029
- }),
60030
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
60031
- type: "button",
60032
- className: `${panel_module_css_default.button} ${panel_module_css_default.buttonSmall}`,
60033
- disabled: busy || workspace.original.trim().length < 50,
60034
- onClick: () => {
60035
- handleWsCheck();
60036
- },
60037
- title: "对当前正文跑一次 AI 审查(不落盘)",
60038
- children: "AI 审查"
60039
- }),
60040
- workspace.draft !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
60041
- type: "button",
60042
- className: `${panel_module_css_default.button} ${panel_module_css_default.buttonSmall}`,
60043
- disabled: busy,
60044
- onClick: () => {
60045
- handleDraftDiscard(workspace.no);
60046
- },
60047
- title: "放弃草稿,保留原稿",
60048
- children: "↩ 放弃草稿"
60049
- })
60050
- ]
60051
- }),
60052
- wsCheckReport !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
60053
- className: panel_module_css_default.wsPreview,
60054
- style: { borderColor: wsCheckReport.passed ? "var(--nf-success)" : "var(--nf-warn)" },
60055
- children: [
60056
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
60057
- className: panel_module_css_default.busyRow,
60058
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
60059
- className: panel_module_css_default.meta,
60060
- style: { fontWeight: 600 },
60061
- children: "审查结果"
60062
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
60063
- style: { color: wsCheckReport.passed ? "var(--nf-success)" : "var(--nf-error)" },
60064
- children: [
60065
- wsCheckReport.score,
60066
- " 分 — ",
60067
- wsCheckReport.passed ? "通过" : "未通过"
60068
- ]
60069
- })]
60070
- }),
60071
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
60072
- className: panel_module_css_default.meta,
60073
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { children: "总评:" }), wsCheckReport.verdict]
60074
- }),
60075
- wsCheckReport.issues.length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
60076
- style: {
60077
- margin: 0,
60078
- paddingLeft: "var(--nf-space-16)",
60079
- display: "flex",
60080
- flexDirection: "column",
60081
- gap: "var(--nf-space-4)",
60082
- fontSize: editorFontSize - 1,
60083
- maxHeight: "45vh",
60084
- overflowY: "auto"
60085
- },
60086
- children: wsCheckReport.issues.map((issue, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
60087
- style: {
60088
- color: severityColor(issue.severity),
60089
- display: "flex",
60090
- gap: "var(--nf-space-6)",
60091
- alignItems: "flex-start"
60092
- },
60093
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
60094
- type: "checkbox",
60095
- style: { marginTop: "var(--nf-space-2)" },
60096
- checked: wsChecked.includes(i),
60097
- onChange: (e) => {
60098
- setWsChecked((prev) => e.target.checked ? [...prev, i] : prev.filter((x) => x !== i));
60099
- },
60100
- title: "勾选后由「按意见修订」一起修订"
60101
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [
60102
- "[",
60103
- issue.severity,
60104
- issue.dimension !== void 0 ? ` · ${REVIEW_DIM_ZH[issue.dimension] ?? issue.dimension}` : "",
60105
- "] ",
60106
- issue.item,
60107
- issue.suggestion !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
60108
- style: { color: "var(--nf-text-2)" },
60109
- children: [" → ", issue.suggestion]
60110
- })
60111
- ] })]
60112
- }, i))
60113
- }),
60114
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
60115
- className: panel_module_css_default.meta,
60116
- children: wsCheckReport.passed ? "当前意见:已通过。勾选想微调的问题点「按意见修订」,或直接「 应用并保存」。" : "意见只读不落盘;勾选要修的问题点「 按意见修订」一键修订(默认已勾 high),满意后点「 应用并保存」写入文件(原稿自动备份 .bak)。"
60117
- })
60118
- ]
60119
- }),
60120
- workspace.draft !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
60121
- className: panel_module_css_default.wsPreview,
60122
- style: {
60123
- flex: 1,
60124
- minHeight: 0
60125
- },
60126
- children: [
60127
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
60128
- className: panel_module_css_default.busyRow,
60129
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
60130
- className: panel_module_css_default.meta,
60131
- children: [
60132
- "优化预览(",
60133
- workspace.draft.length,
60134
- " 字)"
60135
- ]
60136
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
60137
- style: {
60138
- display: "flex",
60139
- gap: "var(--nf-space-8)"
60140
- },
60141
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
60142
- type: "button",
60143
- className: `${panel_module_css_default.button} ${panel_module_css_default.buttonSmall}`,
60144
- onClick: () => {
60145
- setWsShowDiff((v) => !v);
60146
- },
60147
- children: wsShowDiff ? "显示文本" : "查看对比"
60148
- })
60149
- })]
60150
- }),
60151
- wsShowDiff ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(DiffList, {
60152
- original: workspace.original,
60153
- draft: workspace.draft,
60154
- fontSize: editorFontSize
60155
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("pre", {
60156
- className: panel_module_css_default.wsPreviewText,
60157
- style: { fontSize: editorFontSize },
60158
- children: workspace.draft
60159
- }),
60160
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
60161
- className: panel_module_css_default.meta,
60162
- children: "满意后点上方「 应用并保存」落盘(原稿自动备份 .bak);不满意可继续修订。"
60163
- })
60164
- ]
60165
- })
60166
- ]
60167
- })]
60168
- })
60169
- ]
60174
+ workspace !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(WorkspaceView, {
60175
+ workspace,
60176
+ onWorkspaceChange: (next) => setWorkspace(next),
60177
+ onClose: closeWorkspace,
60178
+ onGotoChapter: (no) => gotoChapter(no),
60179
+ backTo: wsBackTo,
60180
+ editorFontSize,
60181
+ onEditorFontSizeChange: changeEditorFontSize,
60182
+ editorRef: wsEditorRef,
60183
+ selected: wsSelected,
60184
+ onCaptureSelection: captureWsSelection,
60185
+ checkReport: wsCheckReport,
60186
+ checked: wsChecked,
60187
+ onCheckedChange: setWsChecked,
60188
+ showDiff: wsShowDiff,
60189
+ onShowDiffChange: setWsShowDiff,
60190
+ resultMode: wsResultMode,
60191
+ busy,
60192
+ onReviseByReport: () => {
60193
+ handleWsReviseByReport();
60194
+ },
60195
+ onRewrite: (whole) => {
60196
+ handleWsRewrite(whole);
60197
+ },
60198
+ onPolish: () => {
60199
+ handleWsPolish();
60200
+ },
60201
+ onSave: () => {
60202
+ handleWsSave();
60203
+ },
60204
+ onCheck: () => {
60205
+ handleWsCheck();
60206
+ },
60207
+ onDiscardDraft: (no) => {
60208
+ handleDraftDiscard(no);
60209
+ }
60170
60210
  }),
60171
60211
  workspace === null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [activeTab === "workflow" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_jsx_runtime.Fragment, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
60172
60212
  className: panel_module_css_default.wfStage,
@@ -60264,7 +60304,7 @@ window.__ModuleLoader__.load({
60264
60304
  className: panel_module_css_default.heroPoolEmpty,
60265
60305
  children: "生产线还是空的 —— 卷计划立好后,这里会长出整本书的工件。"
60266
60306
  });
60267
- const bucketOf = (s) => s === "approved" ? "ok" : s === "written" ? "rev" : s === "rejected" ? "fix" : s === "generating" || s === "reviewing" ? "gen" : s === "error" ? "err" : "pend";
60307
+ const bucketOf = (s) => s === "approved" ? "ok" : s === "written" ? "rev" : s === "rejected" ? "fix" : s === "generating" ? "gen" : s === "error" ? "err" : "pend";
60268
60308
  const labelOf = {
60269
60309
  ok: "已过审",
60270
60310
  rev: "待审",