@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/README.md +3 -3
- package/lib/client.js +1765 -1725
- package/lib/index.js +234 -106
- package/lib/types/assets.d.ts +2 -2
- package/lib/types/client/locales.d.ts +0 -1
- package/lib/types/client/panel/ChapterWorkbench.d.ts +69 -0
- package/lib/types/client/panel/NovelPanel.d.ts +0 -1
- package/lib/types/client/panel/WorkspaceView.d.ts +51 -0
- package/lib/types/client/panel/home-model.d.ts +53 -0
- package/lib/types/engine.d.ts +9 -1
- package/lib/types/index.d.ts +5 -1
- package/lib/types/protocol.d.ts +5 -1
- package/package.json +2 -2
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
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/
|
|
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.
|
|
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
|
-
|
|
52825
|
-
|
|
52826
|
-
|
|
52827
|
-
|
|
52828
|
-
|
|
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
|
-
*
|
|
52834
|
-
* 而 NAV_GROUPS 里已经躺着 lucide 图标 + 按创作阶段归类的分组 ——
|
|
52835
|
-
* 一套被设计好、写过、注释里解释清楚的东西从未被渲染,被临时字形替掉了。
|
|
52836
|
-
* 现在统一到 lucide 图标语汇。
|
|
52586
|
+
* ## 为什么要抽
|
|
52837
52587
|
*
|
|
52838
|
-
*
|
|
52839
|
-
*
|
|
52840
|
-
* `
|
|
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
|
-
/**
|
|
52843
|
-
|
|
52844
|
-
|
|
52845
|
-
|
|
52846
|
-
|
|
52847
|
-
|
|
52848
|
-
|
|
52849
|
-
|
|
52850
|
-
|
|
52851
|
-
|
|
52852
|
-
|
|
52853
|
-
|
|
52854
|
-
|
|
52855
|
-
|
|
52856
|
-
|
|
52857
|
-
|
|
52858
|
-
|
|
52859
|
-
|
|
52860
|
-
|
|
52861
|
-
|
|
52862
|
-
|
|
52863
|
-
|
|
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
|
-
|
|
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
|
-
|
|
56134
|
-
|
|
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
|
-
})
|
|
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
|
-
|
|
56510
|
-
|
|
56511
|
-
|
|
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"
|
|
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.
|
|
59788
|
-
|
|
59789
|
-
|
|
59790
|
-
|
|
59791
|
-
|
|
59792
|
-
|
|
59793
|
-
|
|
59794
|
-
|
|
59795
|
-
|
|
59796
|
-
|
|
59797
|
-
|
|
59798
|
-
|
|
59799
|
-
|
|
59800
|
-
|
|
59801
|
-
|
|
59802
|
-
|
|
59803
|
-
|
|
59804
|
-
|
|
59805
|
-
|
|
59806
|
-
|
|
59807
|
-
|
|
59808
|
-
|
|
59809
|
-
|
|
59810
|
-
|
|
59811
|
-
|
|
59812
|
-
|
|
59813
|
-
|
|
59814
|
-
|
|
59815
|
-
|
|
59816
|
-
|
|
59817
|
-
|
|
59818
|
-
|
|
59819
|
-
|
|
59820
|
-
|
|
59821
|
-
|
|
59822
|
-
|
|
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"
|
|
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: "待审",
|