@waterwx/dsh-novel-forge 1.9.0 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/client.js CHANGED
@@ -122,6 +122,8 @@ window.__ModuleLoader__.load({
122
122
  runStatus: "/api/dsh-novel-forge/run/status",
123
123
  config: "/api/dsh-novel-forge/config",
124
124
  openFolder: "/api/dsh-novel-forge/open-folder",
125
+ /** 插件自更新:在 DSH profile 目录拉取最新 npm 版(下载后需重启 DSH 生效)。 */
126
+ pluginUpdate: "/api/dsh-novel-forge/plugin/update",
125
127
  /** 作者资产库/总数据:读取个人跨书资产(笔法/红线/套路/角色模板/世界观模板)。 */
126
128
  authorAssets: "/api/dsh-novel-forge/author-assets",
127
129
  /** 作者资产库:新增/更新一条资产(upsert by id)。 */
@@ -136,6 +138,14 @@ window.__ModuleLoader__.load({
136
138
  adaptPropose: "/api/dsh-novel-forge/adapt/propose",
137
139
  /** 改编模式:执行术语替换(全局替换 + 命中统计 + 改编文本预览)。 */
138
140
  adaptExecute: "/api/dsh-novel-forge/adapt/execute",
141
+ /** 改编模式:保存改编全文为新书(原书保留,登记书架)。 */
142
+ adaptSave: "/api/dsh-novel-forge/adapt/save",
143
+ /** 改编模式:从源全文 + 编辑后方案提炼新书资料并保存为「待写新书」。 */
144
+ adaptMaterialize: "/api/dsh-novel-forge/adapt/materialize",
145
+ /** 改编模式:rewrite 逐章重写(NDJSON 流式进度)。 */
146
+ adaptRewriteStream: "/api/dsh-novel-forge/adapt/rewrite-stream",
147
+ /** 改编模式:把预览/微调后的新书资料写入并登记书架。 */
148
+ adaptMaterializeSave: "/api/dsh-novel-forge/adapt/materialize-save",
139
149
  /** 主题自定义背景:上传图片(POST,存盘并返回服务端 URL)。 */
140
150
  themeBackgroundUpload: "/api/dsh-novel-forge/theme/background",
141
151
  /** 主题自定义背景:读取已上传文件(GET prefix,/theme/background/<name>)。 */
@@ -356,6 +366,10 @@ window.__ModuleLoader__.load({
356
366
  body: "{}"
357
367
  });
358
368
  }
369
+ /** 插件自更新:在 DSH profile 目录拉取最新 npm 版(需重启 DSH 生效)。 */
370
+ async pluginUpdate() {
371
+ return postJson(NOVEL_API.pluginUpdate, {});
372
+ }
359
373
  /** 书架快照。 */
360
374
  async bookshelf() {
361
375
  return readJson(await fetch(NOVEL_API.bookshelf));
@@ -698,6 +712,52 @@ window.__ModuleLoader__.load({
698
712
  async adaptExecute(req) {
699
713
  return postJson(NOVEL_API.adaptExecute, req);
700
714
  }
715
+ /** 改编模式 P3:保存改编全文为新书(原书保留,登记书架)。 */
716
+ async adaptSave(req) {
717
+ return postJson(NOVEL_API.adaptSave, req);
718
+ }
719
+ /** 改编模式 P4:从源全文 + 编辑后方案提炼新书资料并保存为「待写新书」。 */
720
+ async adaptMaterialize(req) {
721
+ return postJson(NOVEL_API.adaptMaterialize, req);
722
+ }
723
+ /** 改编模式:保存预览/微调后的新书资料为新书(原书保留,登记书架)。 */
724
+ async adaptMaterializeSave(req) {
725
+ return postJson(NOVEL_API.adaptMaterializeSave, req);
726
+ }
727
+ /** 改编模式:rewrite 逐章重写(NDJSON 流式进度,支持分段 startNo/endNo)。 */
728
+ async adaptRewriteStream(req, onFrame) {
729
+ const response = await fetch(NOVEL_API.adaptRewriteStream, {
730
+ method: "POST",
731
+ headers: { "content-type": "application/json" },
732
+ body: JSON.stringify(req)
733
+ });
734
+ if (!response.ok) {
735
+ await readJson(response);
736
+ return;
737
+ }
738
+ if (response.body === null) throw new NovelApiError("adapt rewrite: no response body");
739
+ const reader = response.body.getReader();
740
+ const decoder = new TextDecoder();
741
+ let buffer = "";
742
+ for (;;) {
743
+ const { done, value } = await reader.read();
744
+ if (done) break;
745
+ buffer += decoder.decode(value, { stream: true });
746
+ const lines = buffer.split("\n");
747
+ buffer = lines.pop() ?? "";
748
+ for (const line of lines) {
749
+ if (line.trim() === "") continue;
750
+ let frame;
751
+ try {
752
+ frame = JSON.parse(line);
753
+ } catch {
754
+ continue;
755
+ }
756
+ onFrame(frame);
757
+ if (frame.type === "error") throw new NovelApiError(frame.message);
758
+ }
759
+ }
760
+ }
701
761
  /** 主题自定义背景:上传图片,服务端存盘并返回可访问 URL。 */
702
762
  async themeBackgroundUpload(dataUrl) {
703
763
  return postJson(NOVEL_API.themeBackgroundUpload, { dataUrl });
@@ -2693,7 +2753,7 @@ window.__ModuleLoader__.load({
2693
2753
  key: "uoisry"
2694
2754
  }]
2695
2755
  ]);
2696
- createLucideIcon("arrow-left", [["path", {
2756
+ const ArrowLeft = createLucideIcon("arrow-left", [["path", {
2697
2757
  d: "m12 19-7-7 7-7",
2698
2758
  key: "1l729n"
2699
2759
  }], ["path", {
@@ -2746,7 +2806,7 @@ window.__ModuleLoader__.load({
2746
2806
  key: "nzette"
2747
2807
  }]
2748
2808
  ]);
2749
- createLucideIcon("arrow-right", [["path", {
2809
+ const ArrowRight = createLucideIcon("arrow-right", [["path", {
2750
2810
  d: "M5 12h14",
2751
2811
  key: "1ays0h"
2752
2812
  }], ["path", {
@@ -13499,7 +13559,7 @@ window.__ModuleLoader__.load({
13499
13559
  key: "r45zd0"
13500
13560
  }]
13501
13561
  ]);
13502
- createLucideIcon("file-down", [
13562
+ const FileDown = createLucideIcon("file-down", [
13503
13563
  ["path", {
13504
13564
  d: "M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",
13505
13565
  key: "1oefj6"
@@ -26301,7 +26361,7 @@ window.__ModuleLoader__.load({
26301
26361
  key: "t51u73"
26302
26362
  }]
26303
26363
  ]);
26304
- createLucideIcon("save", [
26364
+ const Save = createLucideIcon("save", [
26305
26365
  ["path", {
26306
26366
  d: "M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z",
26307
26367
  key: "1c8476"
@@ -35391,6 +35451,8 @@ window.__ModuleLoader__.load({
35391
35451
  key: "durymu"
35392
35452
  }]
35393
35453
  ]);
35454
+ exports.ArrowLeft = ArrowLeft;
35455
+ exports.ArrowRight = ArrowRight;
35394
35456
  exports.BarChart3 = ChartColumn;
35395
35457
  exports.BookMarked = BookMarked;
35396
35458
  exports.BookOpen = BookOpen;
@@ -35400,6 +35462,7 @@ window.__ModuleLoader__.load({
35400
35462
  exports.Clapperboard = Clapperboard;
35401
35463
  exports.Download = Download;
35402
35464
  exports.Factory = Factory;
35465
+ exports.FileDown = FileDown;
35403
35466
  exports.FileText = FileText;
35404
35467
  exports.Folder = Folder;
35405
35468
  exports.Image = Image;
@@ -35415,6 +35478,7 @@ window.__ModuleLoader__.load({
35415
35478
  exports.Plus = Plus;
35416
35479
  exports.RefreshCw = RefreshCw;
35417
35480
  exports.RotateCcw = RotateCcw;
35481
+ exports.Save = Save;
35418
35482
  exports.ScrollText = ScrollText;
35419
35483
  exports.Search = Search;
35420
35484
  exports.Settings = Settings;
@@ -35425,7 +35489,7 @@ window.__ModuleLoader__.load({
35425
35489
  exports.Wrench = Wrench;
35426
35490
  exports.X = X;
35427
35491
  })))();
35428
- const css = ".zE6uZW_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);background:0 0;border:none;font-size:14px;transition:background .15s;display:flex}body[data-ds-dark-theme] .zE6uZW_entry{color:var(--dsw-alias-label-primary,#ececf1)}.zE6uZW_entry:hover{background:var(--dsw-alias-interactive-bg-hover,#7f7f7f1f)}.zE6uZW_entry[data-active]{background:var(--dsw-alias-interactive-bg-active,#7f7f7f33)}.zE6uZW_entryIcon{flex-shrink:0;justify-content:center;align-items:center;width:20px;height:20px;display:inline-flex}.zE6uZW_entryLabel{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}[data-pane=conversation]{position:relative}.zE6uZW_view{z-index:60;color-scheme:light;--nf-font:-apple-system, BlinkMacSystemFont, \"SF Pro Display\", \"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-bg:#f2f2f7db;--nf-bg-raise:#ffffffb8;--nf-bg-inset:#7676801f;--nf-border:#3c3c4329;--nf-border-strong:#3c3c4352;--nf-text:#1c1c1e;--nf-text-2:#3c3c43;--nf-text-2-alpha:#3c3c43ad;--nf-text-3:#8e8e93;--nf-accent:#00b85c;--nf-accent-hover:#00a04e;--nf-accent-soft:#00b85c1f;--nf-accent-fg:#fff;--nf-hover:#0000000d;--nf-success:#34c759;--nf-error:#ff3b30;--nf-warn:#ff9500;--nf-info:#00b85c;--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:linear-gradient(180deg, #fff6 0%, #ffffff4d 26%, #ffffff3d 52%, #fff3 78%, #ffffff2e 100%);--nf-glass-core:radial-gradient(60% 40% at 30% 0%, #fff9 0%, #fff3 42%, #fff0 78%);--nf-glass-sheen:#ffffff8c;--nf-glass-border:#ffffff80;--nf-glass-inset:#fff6;--nf-glass-orb-a:#00b85c3d;--nf-glass-orb-b:#78a0ff33;--nf-glass-noise:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23n)'/%3E%3C/svg%3E\");--nf-card-radius:20px;--nf-card-blur:26px;--nf-card-saturate:170%;--nf-card-brightness:1.04;--nf-card-sheen:#ffffff80;--nf-card-border:1px solid #ffffff59;--nf-ctrl-radius:14px;--nf-ctrl-bg:var(--nf-bg-raise);--nf-ctrl-border:1px solid #ffffffb3;--nf-ctrl-sheen:#ffffff80;--nf-ctrl-caret:var(--nf-accent);--nf-glass-bg-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1600' height='1000'%3E%3Cdefs%3E%3Cfilter id='b' x='-20%25' y='-20%25' width='140%25' height='140%25'%3E%3CfeGaussianBlur stdDeviation='110'/%3E%3C/filter%3E%3C/defs%3E%3Cg filter='url(%23b)'%3E%3Ccircle cx='300' cy='180' r='420' fill='%2335d07a' fill-opacity='0.62'/%3E%3Ccircle cx='1240' cy='260' r='470' fill='%233aa7ff' fill-opacity='0.58'/%3E%3Ccircle cx='900' cy='860' r='470' fill='%2340cfc0' fill-opacity='0.5'/%3E%3Ccircle cx='1500' cy='820' r='330' fill='%23ff9fb0' fill-opacity='0.4'/%3E%3Ccircle cx='600' cy='620' r='260' fill='%23b06ef0' fill-opacity='0.42'/%3E%3Ccircle cx='180' cy='600' r='220' fill='%23ffd166' fill-opacity='0.36'/%3E%3C/g%3E%3C/svg%3E\");background:var(--nf-bg);backdrop-filter:blur(30px)saturate(170%)brightness(1.04);color:var(--nf-text);--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-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-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;font-family:-apple-system,BlinkMacSystemFont,SF Pro Display,SF Pro Text,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Roboto,Helvetica Neue,sans-serif;display:none;position:absolute;inset:0;overflow:auto}.zE6uZW_panel[data-nf-mode=dark],body[data-ds-dark-theme] .zE6uZW_panel:not([data-nf-mode]),.zE6uZW_view:has(>.zE6uZW_panel[data-nf-mode=dark]),body[data-ds-dark-theme] .zE6uZW_view:not(:has(>.zE6uZW_panel[data-nf-mode=light])){color-scheme:dark;--nf-bg:#0a0b0ddb;--nf-bg-raise:#1c1c1ec7;--nf-bg-inset:#7676802e;--nf-border:#ffffff1f;--nf-border-strong:#ffffff47;--nf-text:#f2f2f7;--nf-text-2:#d1d1d6;--nf-text-2-alpha:#d1d1d6b8;--nf-text-3:#8e8e93;--nf-accent:#35d07a;--nf-accent-hover:#5ce695;--nf-accent-soft:#35d07a33;--nf-accent-fg:#062b18;--nf-hover:#ffffff17;--nf-success:#30d158;--nf-error:#ff453a;--nf-warn:#ff9f0a;--nf-info:#35d07a;--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:linear-gradient(180deg, #3e424a85 0%, #363a4275 26%, #30343c66 52%, #2a2e365c 78%, #262a3257 100%);--nf-glass-core:radial-gradient(60% 40% at 30% 0%, #ffffff38 0%, #ffffff14 42%, #fff0 78%);--nf-glass-sheen:#ffffff3d;--nf-glass-border:#ffffff24;--nf-glass-inset:#ffffff14;--nf-glass-orb-a:#00ca525c;--nf-glass-orb-b:#78a0ff47;--nf-glass-noise:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23n)'/%3E%3C/svg%3E\");--nf-card-radius:20px;--nf-card-blur:28px;--nf-card-saturate:165%;--nf-card-brightness:1;--nf-card-border:1px solid #ffffff24;--nf-card-sheen:#ffffff38;--nf-glass-bg-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1600' height='1000'%3E%3Cdefs%3E%3Cfilter id='b' x='-20%25' y='-20%25' width='140%25' height='140%25'%3E%3CfeGaussianBlur stdDeviation='110'/%3E%3C/filter%3E%3C/defs%3E%3Cg filter='url(%23b)'%3E%3Ccircle cx='300' cy='180' r='420' fill='%231a9f4d' fill-opacity='0.44'/%3E%3Ccircle cx='1240' cy='260' r='470' fill='%23268bd6' fill-opacity='0.40'/%3E%3Ccircle cx='900' cy='860' r='470' fill='%232a9e94' fill-opacity='0.36'/%3E%3Ccircle cx='1500' cy='820' r='330' fill='%23e07a94' fill-opacity='0.30'/%3E%3Ccircle cx='600' cy='620' r='260' fill='%238c5bd6' fill-opacity='0.32'/%3E%3C/g%3E%3C/svg%3E\");--nf-ctrl-radius:14px;--nf-ctrl-bg:var(--nf-bg-raise);--nf-ctrl-border:1px solid #ffffff2e;--nf-ctrl-sheen:#fff3;--nf-ctrl-caret:var(--nf-accent)}html[data-dsh-novelforge-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) .zE6uZW_view{display:block}.zE6uZW_panel[data-nf-theme=macos],body[data-ds-dark-theme] .zE6uZW_panel[data-nf-mode=light][data-nf-theme=macos]{--nf-bg:#f5f6f8eb;--nf-bg-raise:#ffffffc7;--nf-bg-inset:#7676801a;--nf-border:#3c3c4324;--nf-border-strong:#3c3c434d;--nf-text:#1d1d1f;--nf-text-2:#3a3a3c;--nf-text-2-alpha:#3a3a3cb3;--nf-text-3:#86868b;--nf-accent:#007aff;--nf-accent-hover:#0071e3;--nf-accent-soft:#007aff1f;--nf-accent-fg:#fff;--nf-hover:#0000000a;--nf-info:#5856d6;--nf-shadow:0 1px 3px #0000000d, 0 10px 28px #00000012;--nf-shadow-lg:0 4px 12px #0000000f, 0 18px 44px #0000001c;--nf-card-shadow:0 2px 6px #0000000d, 0 12px 34px #00000017;--nf-card-shadow-hover:0 4px 10px #00000012, 0 20px 48px #00000024;--nf-glass-face:#ffffffb3;--nf-glass-core:transparent;--nf-glass-sheen:#fffc;--nf-glass-border:#ffffffe6;--nf-glass-inset:#fff9;--nf-glass-orb-a:#007aff14;--nf-glass-orb-b:#5856d612;--nf-glass-noise:none;--nf-card-radius:12px;--nf-card-blur:42px;--nf-card-saturate:150%;--nf-card-border:1px solid var(--nf-border);--nf-card-sheen:#ffffff59;--nf-ctrl-radius:8px;--nf-ctrl-bg:var(--nf-bg-raise);--nf-ctrl-border:1px solid var(--nf-border-strong);--nf-ctrl-sheen:#ffffff59;--nf-ctrl-caret:var(--nf-accent)}.zE6uZW_panel[data-nf-mode=dark][data-nf-theme=macos],body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=macos]:not([data-nf-mode]){--nf-bg:#1c1c1ee6;--nf-bg-raise:#2c2c2ed1;--nf-bg-inset:#7676802e;--nf-border:#ffffff1f;--nf-border-strong:#ffffff42;--nf-text:#f5f5f7;--nf-text-2:#d1d1d6;--nf-text-2-alpha:#d1d1d6b3;--nf-text-3:#98989d;--nf-accent:#0a84ff;--nf-accent-hover:#3a9bff;--nf-accent-soft:#0a84ff33;--nf-accent-fg:#fff;--nf-hover:#ffffff0f;--nf-info:#bf5af2;--nf-shadow:0 1px 2px #0006, 0 10px 30px #00000073;--nf-shadow-lg:0 4px 12px #00000073, 0 18px 44px #0009;--nf-card-shadow:0 2px 6px #0006, 0 14px 38px #00000080;--nf-card-shadow-hover:0 4px 10px #00000073, 0 22px 52px #0009;--nf-glass-face:#2c2c2ed9;--nf-glass-core:transparent;--nf-glass-sheen:#fff3;--nf-glass-border:#ffffff2e;--nf-glass-inset:#ffffff0f;--nf-glass-orb-a:#0a84ff29;--nf-glass-orb-b:#bf5af214;--nf-glass-noise:none}.zE6uZW_panel[data-nf-theme=macos] .zE6uZW_button{border:1px solid var(--nf-border-strong);background:color-mix(in srgb, var(--nf-bg-raise) 82%, #fff);box-shadow:0 1px 1px #0000000a,inset 0 1px #fff9}.zE6uZW_panel[data-nf-theme=macos] .zE6uZW_buttonPrimary{background:linear-gradient(180deg, color-mix(in srgb, var(--nf-accent) 90%, #fff), var(--nf-accent));color:var(--nf-accent-fg);box-shadow:0 1px 3px color-mix(in srgb, var(--nf-accent) 45%, transparent), inset 0 1px 0 #ffffff59;border-color:#0000}.zE6uZW_panel[data-nf-theme=macos] .zE6uZW_input,.zE6uZW_panel[data-nf-theme=macos] .zE6uZW_textarea{border:1px solid var(--nf-border-strong);background:var(--nf-bg-raise)}.zE6uZW_panel[data-nf-theme=macos] .zE6uZW_input:focus,.zE6uZW_panel[data-nf-theme=macos] .zE6uZW_textarea:focus{border-color:var(--nf-accent);box-shadow:0 0 0 3px var(--nf-accent-soft)}.zE6uZW_panel[data-nf-theme=neumorph]{--nf-card-radius:20px;--nf-card-blur:0px;--nf-card-saturate:100%;--nf-card-border:none;--nf-card-sheen:#fff0;--nf-ctrl-radius:10px;--nf-ctrl-bg:var(--nf-bg-inset);--nf-ctrl-border:none;--nf-ctrl-sheen:#fff0;--nf-ctrl-caret:var(--nf-text-3);--nf-glass-bg-image:none}body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=neumorph]{--nf-bg:#e4e9f2;--nf-bg-raise:#e4e9f2;--nf-bg-inset:#d9dfe8;--nf-border:#8c9baf59;--nf-border-strong:#78879e80;--nf-text:#3a4250;--nf-text-2:#5b6472;--nf-text-2-alpha:#465060b3;--nf-text-3:#8b94a3;--nf-hover:#5a697d14;--nf-shadow:4px 4px 10px #a3b1c68c, -4px -4px 10px #ffffffd9;--nf-shadow-lg:6px 6px 14px #a3b1c699, -6px -6px 14px #ffffffe6;--nf-card-shadow:9px 9px 18px #a3b1c68c, -9px -9px 18px #ffffffd9;--nf-card-shadow-hover:12px 12px 24px #a3b1c6a6, -12px -12px 24px #fffffff2;--nf-glass-face:#e4e9f2;--nf-glass-core:transparent;--nf-glass-sheen:#fff0;--nf-glass-border:#a3b1c666;--nf-glass-inset:#d9dfe8;--nf-glass-orb-a:transparent;--nf-glass-orb-b:transparent;--nf-glass-noise:none}.zE6uZW_panel[data-nf-mode=dark][data-nf-theme=neumorph],body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=neumorph]:not([data-nf-mode]){--nf-bg:#2b2f36;--nf-bg-raise:#2b2f36;--nf-bg-inset:#25292f;--nf-border:#0a0c1080;--nf-border-strong:#080a0e99;--nf-text:#d6dae1;--nf-text-2:#a8aeb8;--nf-text-2-alpha:#a8aeb8b3;--nf-text-3:#757c88;--nf-hover:#ffffff0d;--nf-shadow:4px 4px 10px #00000080, -4px -4px 10px #6068763d;--nf-shadow-lg:6px 6px 14px #0000008c, -6px -6px 14px #60687642;--nf-card-shadow:9px 9px 18px #00000080, -9px -9px 18px #6068763d;--nf-card-shadow-hover:12px 12px 24px #0009, -12px -12px 24px #60687647;--nf-glass-face:#2b2f36;--nf-glass-core:transparent;--nf-glass-sheen:#fff0;--nf-glass-border:#0c0e1273;--nf-glass-inset:#25292f;--nf-glass-orb-a:transparent;--nf-glass-orb-b:transparent;--nf-glass-noise:none}.zE6uZW_panel[data-nf-theme=clay]{--nf-card-radius:28px;--nf-card-blur:0px;--nf-card-saturate:100%;--nf-card-brightness:1;--nf-card-border:1px solid #fff9;--nf-card-sheen:#ffffffd9;--nf-ctrl-radius:16px;--nf-ctrl-bg:var(--nf-bg-raise);--nf-ctrl-border:1px solid #ffffff8c;--nf-ctrl-sheen:#ffffffb3;--nf-ctrl-caret:var(--nf-accent);--nf-glass-bg-image:none}body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=clay],.zE6uZW_panel[data-nf-mode=light][data-nf-theme=clay]{--nf-bg:#f2eae0;--nf-bg-raise:#efe4d6;--nf-bg-inset:#e6d8c6;--nf-border:#78604829;--nf-border-strong:#78604847;--nf-text:#3a3330;--nf-text-2:#5a4f48;--nf-text-2-alpha:#5a4f48b3;--nf-text-3:#9a8c80;--nf-accent:#e08a5c;--nf-accent-hover:#d67a4a;--nf-accent-soft:#e08a5c29;--nf-accent-fg:#fff;--nf-hover:#78604814;--nf-success:#7fae6a;--nf-error:#c96b63;--nf-warn:#d9a660;--nf-info:#e08a5c;--nf-shadow:0 8px 16px -6px #5a463247, inset 0 6px 10px #ffffff8c, inset 0 -6px 10px #7860481f;--nf-shadow-lg:0 16px 28px -10px #5a463257, inset 0 6px 10px #ffffff8c, inset 0 -6px 10px #78604824;--nf-card-shadow:0 16px 28px -10px #5a463257, inset 0 -8px 12px #78604824, inset 0 8px 12px #fff9;--nf-card-shadow-hover:0 22px 36px -12px #5a463261, inset 0 -8px 12px #78604829, inset 0 8px 12px #ffffffb3;--nf-glass-face:#efe4d6;--nf-glass-core:transparent;--nf-glass-sheen:#ffffffd9;--nf-glass-border:#fff9;--nf-glass-inset:#e6d8c6;--nf-glass-orb-a:transparent;--nf-glass-orb-b:transparent;--nf-glass-noise:none}.zE6uZW_panel[data-nf-mode=dark][data-nf-theme=clay],body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=clay]:not([data-nf-mode]){--nf-bg:#2a2522;--nf-bg-raise:#37302b;--nf-bg-inset:#2f2925;--nf-border:#ffffff14;--nf-border-strong:#ffffff2e;--nf-text:#efe9e3;--nf-text-2:#c7beb5;--nf-text-2-alpha:#c7beb5b3;--nf-text-3:#8a8078;--nf-accent:#e69a6c;--nf-accent-hover:#f0ac82;--nf-accent-soft:#e69a6c33;--nf-accent-fg:#241b16;--nf-hover:#ffffff0f;--nf-success:#9cba82;--nf-error:#d98f86;--nf-warn:#d9a660;--nf-info:#e69a6c;--nf-shadow:0 8px 16px -6px #0000008c, inset 0 6px 10px #ffffff1f, inset 0 -6px 10px #00000059;--nf-shadow-lg:0 16px 28px -10px #0000009e, inset 0 6px 10px #ffffff1f, inset 0 -6px 10px #0006;--nf-card-shadow:0 16px 28px -10px #0000009e, inset 0 -8px 12px #0006, inset 0 8px 12px #ffffff24;--nf-card-shadow-hover:0 22px 36px -12px #000000ad, inset 0 -8px 12px #00000070, inset 0 8px 12px #ffffff2e;--nf-glass-face:#37302b;--nf-glass-core:transparent;--nf-glass-sheen:#ffffff29;--nf-glass-border:#ffffff29;--nf-glass-inset:#2f2925;--nf-glass-orb-a:transparent;--nf-glass-orb-b:transparent;--nf-glass-noise:none}.zE6uZW_panel[data-nf-theme=clay] .zE6uZW_input,.zE6uZW_panel[data-nf-theme=clay] .zE6uZW_textarea{background:var(--nf-bg-inset);border-color:var(--nf-border-strong);box-shadow:inset 3px 3px 7px #78604824,inset -3px -3px 7px #ffffff80}body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=clay] .zE6uZW_button{background:linear-gradient(#f6ecdf,#eee0cf);border-color:#fff9;box-shadow:0 8px 16px -6px #5a463259,inset 0 3px 4px #fffc,inset 0 -3px 5px #78604833}body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=clay] .zE6uZW_button:hover:not([disabled]){box-shadow:0 12px 22px -8px #5a46326b,inset 0 3px 4px #ffffffd9,inset 0 -3px 5px #78604838}body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=clay] .zE6uZW_buttonPrimary{color:var(--nf-accent-fg);background:linear-gradient(#eda178,#e08a5c);border-color:#0000;box-shadow:0 8px 16px -6px #e08a5c8c,inset 0 3px 4px #ffffff80,inset 0 -3px 5px #9646284d}.zE6uZW_panel[data-nf-mode=dark][data-nf-theme=clay] .zE6uZW_button,body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=clay]:not([data-nf-mode]) .zE6uZW_button{background:linear-gradient(#403731,#332c27);border-color:#ffffff29;box-shadow:0 8px 16px -6px #0000008c,inset 0 3px 4px #ffffff24,inset 0 -3px 5px #0006}.zE6uZW_panel[data-nf-mode=dark][data-nf-theme=clay] .zE6uZW_button:hover:not([disabled]),body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=clay]:not([data-nf-mode]) .zE6uZW_button:hover:not([disabled]){box-shadow:0 12px 22px -8px #0009,inset 0 3px 4px #ffffff29,inset 0 -3px 5px #00000070}.zE6uZW_panel[data-nf-mode=dark][data-nf-theme=clay] .zE6uZW_buttonPrimary,body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=clay]:not([data-nf-mode]) .zE6uZW_buttonPrimary{color:var(--nf-accent-fg);background:linear-gradient(#f0ac82,#d67a4a);border-color:#0000;box-shadow:0 8px 16px -6px #e69a6c80,inset 0 3px 4px #fff6,inset 0 -3px 5px #7832144d}.zE6uZW_panel[data-nf-mode=dark][data-nf-theme=clay] .zE6uZW_input,.zE6uZW_panel[data-nf-mode=dark][data-nf-theme=clay] .zE6uZW_textarea,body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=clay]:not([data-nf-mode]) .zE6uZW_input,body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=clay]:not([data-nf-mode]) .zE6uZW_textarea{box-shadow:inset 3px 3px 7px #00000073,inset -3px -3px 7px #ffffff14}body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_input,body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_textarea{background:var(--nf-bg-inset);border-color:#0000;box-shadow:inset 3px 3px 7px #a3b1c68c,inset -3px -3px 7px #ffffffe6}body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_input:focus,body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_textarea:focus{border-color:var(--nf-accent);box-shadow:inset 2px 2px 6px #a3b1c680, inset -2px -2px 6px #ffffffd9, 0 0 0 3px var(--nf-accent-soft)}body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_input,body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_textarea{background:var(--nf-bg-inset);border-color:#0000;box-shadow:inset 3px 3px 7px #0000008c,inset -3px -3px 7px #6068763d}body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_input:focus,body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_textarea:focus{border-color:var(--nf-accent);box-shadow:inset 2px 2px 6px #00000080, inset -2px -2px 6px #60687638, 0 0 0 3px var(--nf-accent-soft)}body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_button{background:var(--nf-bg-raise);border-color:#0000;box-shadow:5px 5px 10px #a3b1c68c,-5px -5px 10px #ffffffe6}body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_button:hover:not([disabled]){background:var(--nf-bg-raise);border-color:#0000;box-shadow:7px 7px 14px #a3b1c699,-7px -7px 14px #fffffff2}body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_button:active:not([disabled]){box-shadow:inset 3px 3px 7px #a3b1c68c,inset -3px -3px 7px #ffffffe6}body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_buttonPrimary{background:linear-gradient(#00c563,#00a952);box-shadow:5px 5px 10px #a3b1c699,-5px -5px 10px #ffffffd9}body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_button{background:var(--nf-bg-raise);border-color:#0000;box-shadow:5px 5px 10px #00000080,-5px -5px 10px #6068763d}body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_button:hover:not([disabled]){background:var(--nf-bg-raise);border-color:#0000;box-shadow:7px 7px 14px #0000008c,-7px -7px 14px #60687642}body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_button:active:not([disabled]){box-shadow:inset 3px 3px 7px #0000008c,inset -3px -3px 7px #6068763d}body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_buttonPrimary{background:linear-gradient(#3ddc86,#27b96a);box-shadow:5px 5px 10px #00000080,-5px -5px 10px #6068763d}.zE6uZW_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}.zE6uZW_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, radial-gradient(46% 36% at 18% 12%, var(--nf-glass-orb-a), transparent 70%), radial-gradient(52% 42% at 88% 22%, var(--nf-glass-orb-b), transparent 72%), radial-gradient(120% 95% at 50% 42%, transparent 55%, #0202031a 100%);position:absolute;inset:0}.zE6uZW_panel[data-nf-theme=macos]{--nf-glass-bg-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1600' height='1000'%3E%3Cdefs%3E%3Cfilter id='b' x='-20%25' y='-20%25' width='140%25' height='140%25'%3E%3CfeGaussianBlur stdDeviation='140'/%3E%3C/filter%3E%3C/defs%3E%3Cg filter='url(%23b)'%3E%3Ccircle cx='320' cy='220' r='320' fill='%230a84ff' fill-opacity='0.34'/%3E%3Ccircle cx='1180' cy='320' r='360' fill='%237f5af0' fill-opacity='0.30'/%3E%3Ccircle cx='920' cy='820' r='380' fill='%2340cfc0' fill-opacity='0.26'/%3E%3Ccircle cx='1460' cy='820' r='260' fill='%23ff9fb0' fill-opacity='0.18'/%3E%3C/g%3E%3C/svg%3E\")}.zE6uZW_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}.zE6uZW_panelTitle:before{content:\"\";border-radius:var(--nf-radius-2,2px);background:linear-gradient(180deg, var(--nf-accent), var(--nf-info));width:4px;height:16px}.zE6uZW_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);background:0 0;border:none;transition:background .15s,color .15s,transform .1s}.zE6uZW_iconButton:hover{background:var(--nf-hover);color:var(--nf-text);transform:translateY(-1px)}.zE6uZW_tabBar{gap:var(--nf-space-2,2px);padding:var(--nf-space-8,8px) var(--nf-space-14,14px) 0;border-bottom:1px solid var(--nf-border);background:var(--nf-bg-raise);z-index:4;flex-shrink:0;display:flex;position:sticky;top:45px}.zE6uZW_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);background:0 0;border:none;font-weight:500;transition:color .15s,background .15s;position:relative}.zE6uZW_tab:hover{color:var(--nf-text);background:var(--nf-hover)}.zE6uZW_tab[data-active]{color:var(--nf-accent);font-weight:600}.zE6uZW_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}.zE6uZW_panelContent{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}.zE6uZW_panelBody{z-index:1;flex:1;min-height:0;display:flex;position:relative}.zE6uZW_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);backdrop-filter:blur(28px)saturate(175%);flex-direction:column;flex:none;margin:10px 0 10px 12px;transition:width .18s;display:flex;overflow-y:auto}.zE6uZW_panelNavCollapsed{width:52px;padding:var(--nf-space-10,10px) var(--nf-space-6,6px)}.zE6uZW_navGroup{gap:var(--nf-space-6,6px);flex-direction:column;display:flex}.zE6uZW_navGroupLabel{font-size:var(--nf-fs-12,12px);letter-spacing:.8px;text-transform:uppercase;color:var(--nf-text-3);padding:var(--nf-space-12,12px) var(--nf-space-10,10px) var(--nf-space-6,6px);user-select:none;font-weight:600}.zE6uZW_navGroupSep{background:var(--nf-border);height:1px;margin:6px 8px 4px}.zE6uZW_navSpacer{flex:1;min-height:8px}.zE6uZW_navAbout{gap:var(--nf-space-4,4px);padding:var(--nf-space-8,8px) var(--nf-space-6,6px) var(--nf-space-4,4px);border-top:1px solid var(--nf-border);flex-direction:column;flex:none;margin-top:4px;display:flex}.zE6uZW_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);text-align:left;white-space:nowrap;background:0 0;border:none;transition:color .15s,background .15s;display:flex}.zE6uZW_navAboutRow:hover{color:var(--nf-text);background:var(--nf-hover)}.zE6uZW_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}.zE6uZW_navAboutUpdate:hover{color:var(--nf-accent-hover)}.zE6uZW_panelNavCollapsed .zE6uZW_navAbout{padding:var(--nf-space-6,6px) var(--nf-space-2,2px) var(--nf-space-2,2px);align-items:center}.zE6uZW_panelNavCollapsed .zE6uZW_navAboutRow{padding:var(--nf-space-4,4px) 0;justify-content:center;width:100%}.zE6uZW_navTabBadge{min-width:18px;height:18px;padding:0 var(--nf-space-6,5px);border-radius:var(--nf-radius-999,999px);background:var(--nf-accent);color:#fff;font-size:var(--nf-fs-12,10.5px);text-align:center;flex:none;margin-left:auto;font-weight:700;line-height:18px;display:inline-block}.zE6uZW_panelNavCollapsed .zE6uZW_navTabBadge{min-width:18px;height:18px;line-height:18px;font-size:var(--nf-fs-12,9px);padding:0 var(--nf-space-6,5px);position:absolute;top:2px;right:2px}.zE6uZW_navTabBadgeDanger{background:var(--nf-error)}.zE6uZW_navTabBadgeWarn{background:var(--nf-warn)}.zE6uZW_navTabBadgeDone{background:var(--nf-success)}.zE6uZW_navTabBadgeLive{background:var(--nf-success);animation:1.2s ease-in-out infinite zE6uZW_navBadgePulse}@keyframes zE6uZW_navBadgePulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.8)}}.zE6uZW_navTab{align-items:center;gap:var(--nf-space-10,10px);cursor:pointer;border-radius:var(--nf-radius-10,10px);width:100%;padding:var(--nf-space-12,11px) var(--nf-space-12,12px);font-size:var(--nf-fs-14,14px);color:var(--nf-text-2-alpha,var(--nf-text-2));text-align:left;white-space:nowrap;background:0 0;border:1px solid #0000;font-weight:500;transition:color .15s,background .15s,border-color .15s,box-shadow .15s;display:flex;position:relative}.zE6uZW_panelNavCollapsed .zE6uZW_navTab{padding:var(--nf-space-8,8px) 0;justify-content:center}.zE6uZW_navTab:hover{color:var(--nf-text);background:var(--nf-hover)}.zE6uZW_navTab[data-active]{color:var(--nf-accent);background:color-mix(in srgb, var(--nf-text) 8%, transparent);border-color:color-mix(in srgb, var(--nf-text) 16%, transparent);box-shadow:inset 0 1px 0 color-mix(in srgb, var(--nf-text) 6%, transparent);font-weight:600}.zE6uZW_navTab[data-active] .zE6uZW_navTabIcon{color:var(--nf-accent)}.zE6uZW_navTabIcon{text-align:center;width:22px;height:22px;font-size:var(--nf-fs-16,17px);flex:none;justify-content:center;align-items:center;line-height:1;display:inline-flex}.zE6uZW_navTabLabel{text-overflow:ellipsis;overflow:hidden}.zE6uZW_navTitle{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}.zE6uZW_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}.zE6uZW_navTitleName{font-weight:700;font-size:var(--nf-fs-14,15px);letter-spacing:.2px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.zE6uZW_navTitleBook{font-size:var(--nf-fs-12,11px);color:var(--nf-text-3);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.zE6uZW_panelNavCollapsed .zE6uZW_navTitle{padding:var(--nf-space-2,2px) 0 var(--nf-space-10,10px);justify-content:center}.zE6uZW_panelNavCollapsed .zE6uZW_navTitleLogo{width:32px;height:var(--nf-ctrl-m,32px)}.zE6uZW_navActions{gap:var(--nf-space-6,6px);padding-top:var(--nf-space-8,8px);border-top:1px solid var(--nf-border);flex:none;margin-top:8px;display:flex}.zE6uZW_navActionBtn{border:1px solid var(--nf-border);color:var(--nf-text-2);cursor:pointer;border-radius:var(--nf-radius-10,10px);height:var(--nf-ctrl-m,32px);font-size:var(--nf-fs-14,14px);background:0 0;flex:1;justify-content:center;align-items:center;line-height:1;transition:background .15s,color .15s,border-color .15s;display:inline-flex}.zE6uZW_navActionBtn:hover{background:var(--nf-hover);color:var(--nf-text);border-color:var(--nf-border-strong)}.zE6uZW_panelNavCollapsed .zE6uZW_navActions{flex-direction:column;align-items:stretch}.zE6uZW_bookSwitch{align-items:center;gap:var(--nf-space-8,8px);padding:var(--nf-space-10,9px);border-radius:var(--nf-radius-12,12px);background:var(--nf-bg-inset);border:1px solid var(--nf-border);cursor:pointer;text-align:left;font:inherit;color:var(--nf-text);flex:none;min-width:0;margin-top:4px;transition:background .15s,border-color .15s;display:flex}.zE6uZW_bookSwitch:hover{background:var(--nf-hover);border-color:var(--nf-border-strong)}.zE6uZW_bookSwitchCover{border-radius:var(--nf-radius-6,5px);background:linear-gradient(160deg, var(--nf-accent), color-mix(in srgb, var(--nf-accent) 45%, #000));width:26px;height:34px;color:var(--nf-accent-fg);font-size:var(--nf-fs-12,11px);flex:none;justify-content:center;align-items:center;font-weight:700;display:flex}.zE6uZW_bookSwitchName{font-size:var(--nf-fs-12,12.5px);text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.zE6uZW_bookSwitchMeta{font-size:var(--nf-fs-12,11px);color:var(--nf-text-3);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.zE6uZW_bookSwitchArrow{color:var(--nf-text-3);font-size:var(--nf-fs-12,12px);flex:none;margin-left:auto}.zE6uZW_statRowD{gap:var(--nf-space-12,12px);grid-template-columns:repeat(auto-fit,minmax(150px,1fr));display:grid}.zE6uZW_statCardD{justify-content:space-between;align-items:flex-start;gap:var(--nf-space-10,10px);padding:var(--nf-space-14,14px) var(--nf-space-16,16px);border-radius:var(--nf-radius-16,16px);background:var(--nf-bg-inset);border:1px solid var(--nf-border);min-width:0;display:flex}.zE6uZW_statCardDLabel{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3)}.zE6uZW_statCardDValue{font-size:var(--nf-fs-22,22px);color:var(--nf-text);margin-top:2px;font-weight:700}.zE6uZW_statCardDUnit{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);font-weight:400}.zE6uZW_statCardDDetail{font-size:var(--nf-fs-12,11.5px);color:var(--nf-text-3);text-overflow:ellipsis;white-space:nowrap;margin-top:2px;overflow:hidden}.zE6uZW_statCardDDown{color:var(--nf-error)}.zE6uZW_statCardDIcon{width:38px;height:var(--nf-ctrl-l,38px);border-radius:var(--nf-radius-12,12px);font-size:var(--nf-fs-18,18px);background:var(--nf-accent-soft);flex:none;justify-content:center;align-items:center;display:flex}.zE6uZW_statCardDIconRed{background:color-mix(in srgb, var(--nf-error) 13%, transparent)}.zE6uZW_tlBar{gap:var(--nf-space-6,6px);margin-top:8px;display:flex}.zE6uZW_tlSeg{gap:var(--nf-space-4,4px);cursor:pointer;min-width:0;font:inherit;background:0 0;border:none;flex-direction:column;flex:1;padding:0;display:flex}.zE6uZW_tlSegTrack{border-radius:var(--nf-radius-999,999px);background:var(--nf-hover);border:1px solid var(--nf-border);height:8px;overflow:hidden}.zE6uZW_tlSegFill{border-radius:var(--nf-radius-999,999px);background:var(--nf-accent);width:100%;height:100%;display:block}.zE6uZW_tlSegTodo .zE6uZW_tlSegFill{opacity:0}.zE6uZW_tlSegTodo .zE6uZW_tlSegTrack{background:0 0}.zE6uZW_tlSegCurrent .zE6uZW_tlSegTrack{border-color:var(--nf-accent);box-shadow:0 0 0 2px var(--nf-accent-soft)}.zE6uZW_tlSegCurrent .zE6uZW_tlSegFill{opacity:.45}.zE6uZW_tlSegLabel{font-size:var(--nf-fs-12,10.5px);color:var(--nf-text-3);text-align:center;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.zE6uZW_tlSegDone .zE6uZW_tlSegLabel{color:var(--nf-accent);font-weight:600}.zE6uZW_tlSeg:hover .zE6uZW_tlSegTrack{border-color:var(--nf-border-strong)}.zE6uZW_card{border:var(--nf-card-border,1px solid var(--nf-glass-border));border-radius:var(--nf-card-radius,22px);padding:var(--nf-card-pad,20px 22px);gap:var(--nf-space-10,10px);background:var(--nf-glass-face);box-shadow:var(--nf-card-shadow), inset 0 1.5px 0 var(--nf-card-sheen,var(--nf-glass-sheen)), inset 0 -1px 0 #ffffff1a;backdrop-filter:blur(var(--nf-card-blur,30px)) saturate(var(--nf-card-saturate,180%)) brightness(var(--nf-card-brightness,1.06));flex-direction:column;transition:transform .22s,box-shadow .22s;display:flex;position:relative}.zE6uZW_card:before{content:\"\";border-radius:inherit;pointer-events:none;background:var(--nf-glass-core), linear-gradient(90deg, transparent, var(--nf-card-sheen,var(--nf-glass-sheen)), transparent) no-repeat 10% 0 / 80% 1px, linear-gradient(156deg, #ffffff42 0%, #fff0 55%);z-index:0;position:absolute;inset:0}.zE6uZW_card:after{content:\"\";border-radius:inherit;pointer-events:none;background:var(--nf-glass-noise);opacity:.06;z-index:0;position:absolute;inset:0}.zE6uZW_card:hover{box-shadow:var(--nf-card-shadow-hover), inset 0 1.5px 0 var(--nf-card-sheen,var(--nf-glass-sheen)), inset 0 -1px 0 #ffffff40;transform:translateY(-3px)}.zE6uZW_card>*{z-index:1;position:relative}.zE6uZW_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}.zE6uZW_button{border:1px solid var(--nf-ctrl-border,var(--nf-border-strong));background:var(--nf-ctrl-bg,var(--nf-bg-inset));color:var(--nf-text);padding:var(--nf-space-8,7px) var(--nf-space-16,15px);border-radius:var(--nf-ctrl-radius,10px);cursor:pointer;font-size:var(--nf-fs-14,13px);box-shadow:inset 0 1px 0 var(--nf-ctrl-sheen,#ffffff17);white-space:nowrap;font-weight:500;transition:background .15s,border-color .15s,transform .1s,box-shadow .15s}.zE6uZW_button:hover:not([disabled]){background:var(--nf-hover);border-color:var(--nf-border-strong);transform:translateY(-1px)}.zE6uZW_button:active:not([disabled]){transform:translateY(0)scale(.97)}.zE6uZW_button[disabled]{opacity:.45;cursor:not-allowed}.zE6uZW_buttonPrimary{background:linear-gradient(180deg, color-mix(in srgb, var(--nf-accent) 88%, #fff), var(--nf-accent));color:var(--nf-accent-fg);border-radius:var(--nf-radius-10,10px);box-shadow:0 2px 10px color-mix(in srgb, var(--nf-accent) 45%, transparent), 0 0 0 .5px color-mix(in srgb, var(--nf-accent) 30%, transparent), inset 0 1px 0 #ffffff73;border-color:#0000}.zE6uZW_buttonPrimary:hover:not([disabled]){background:linear-gradient(180deg, var(--nf-accent-hover), color-mix(in srgb, var(--nf-accent-hover) 85%, #000));box-shadow:0 12px 30px color-mix(in srgb, var(--nf-accent) 50%, transparent), 0 0 0 .5px color-mix(in srgb, var(--nf-accent) 30%, transparent), inset 0 1px 0 #ffffff73;border-color:#0000;transform:translateY(-1px)}.zE6uZW_buttonDanger{border-color:var(--nf-error);color:var(--nf-error)}.zE6uZW_buttonDanger:hover:not([disabled]){background:#ff3b301a}.zE6uZW_buttonSmall{padding:var(--nf-space-4,4px) var(--nf-space-10,10px);font-size:var(--nf-fs-12,12px);border-radius:var(--nf-ctrl-radius,8px)}.zE6uZW_field{gap:var(--nf-space-6,5px);flex-direction:column;display:flex}.zE6uZW_fieldLabel{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);font-weight:500}.zE6uZW_input{border:var(--nf-ctrl-border,1px solid var(--nf-border-strong));background:var(--nf-ctrl-bg,var(--nf-bg-inset));color:var(--nf-text);color-scheme:light;border-radius:var(--nf-ctrl-radius,12px);padding:var(--nf-space-8,7px) var(--nf-space-12,11px);font-size:var(--nf-fs-14,13px);box-sizing:border-box;width:100%;box-shadow:inset 0 1px 0 var(--nf-ctrl-sheen,#ffffff17);transition:border-color .15s,box-shadow .15s}body[data-ds-dark-theme] .zE6uZW_input,.zE6uZW_panel[data-nf-mode=dark] .zE6uZW_input{color-scheme:dark}.zE6uZW_panel[data-nf-mode=light] .zE6uZW_input,body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_input{color-scheme:light}select.zE6uZW_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}.zE6uZW_input option{color:var(--nf-text);background:var(--nf-bg-raise);font-size:var(--nf-fs-14,15px)}.zE6uZW_input:focus,.zE6uZW_textarea:focus{border-color:var(--nf-accent);box-shadow:0 0 0 3px var(--nf-accent-soft);outline:none}.zE6uZW_input::placeholder,.zE6uZW_textarea::placeholder{color:var(--nf-text-3)}.zE6uZW_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;font-family:inherit;line-height:1.7;transition:border-color .15s,box-shadow .15s}.zE6uZW_row{align-items:center;gap:var(--nf-space-8,8px);flex-wrap:wrap;display:flex}.zE6uZW_spaceBetween{justify-content:space-between}.zE6uZW_chapterList{gap:var(--nf-space-8,8px);flex-direction:column;display:flex}.zE6uZW_volumeGroup{gap:var(--nf-space-6,6px);flex-direction:column;display:flex}.zE6uZW_volumeGroupHeader{align-items:center;gap:var(--nf-space-8,8px);padding:var(--nf-space-6,6px) var(--nf-space-10,10px);border-radius:var(--nf-radius-10,10px);background:var(--nf-bg-inset);border:1px solid var(--nf-border);cursor:pointer;user-select:none;font-size:var(--nf-fs-14,13px);transition:border-color .15s;display:flex}.zE6uZW_volumeGroupHeader:hover{border-color:var(--nf-accent)}.zE6uZW_volumeGroupToggle{font-size:var(--nf-fs-12,11px);color:var(--nf-text-2);flex:none}.zE6uZW_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 .15s,box-shadow .15s,transform .1s;display:flex}.zE6uZW_chapter:hover{border-color:var(--nf-border-strong);box-shadow:var(--nf-shadow)}.zE6uZW_chapterFocus{animation:.9s ease-in-out 3 zE6uZW_chapterFocusPulse;border-color:var(--nf-accent)!important;box-shadow:0 0 0 3px color-mix(in srgb, var(--nf-accent) 35%, transparent)!important}@keyframes zE6uZW_chapterFocusPulse{0%,to{background:var(--nf-bg)}50%{background:color-mix(in srgb, var(--nf-accent) 18%, var(--nf-bg))}}.zE6uZW_chapterNum{min-width:28px;height:var(--nf-ctrl-s,28px);padding:0 var(--nf-space-8,8px);border-radius:var(--nf-radius-8,8px);background:var(--nf-bg-inset);border:1px solid var(--nf-border);font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);flex-shrink:0;justify-content:center;align-items:center;font-weight:700;display:inline-flex}.zE6uZW_chapterMain{flex:1;min-width:0}.zE6uZW_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}.zE6uZW_chapterBeats{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);opacity:.85;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.zE6uZW_chapterActions{gap:var(--nf-space-4,4px);opacity:.85;flex-shrink:0;transition:opacity .15s;display:flex}.zE6uZW_chapter:hover .zE6uZW_chapterActions{opacity:1}.zE6uZW_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}.zE6uZW_badgePending{color:var(--nf-info);border-color:var(--nf-info);background:color-mix(in srgb, var(--nf-info) 10%, transparent)}.zE6uZW_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 zE6uZW_pulse}.zE6uZW_badgeWritten{color:var(--nf-warn);border-color:var(--nf-warn);background:color-mix(in srgb, var(--nf-warn) 10%, transparent)}.zE6uZW_badgeRejected{color:var(--nf-error);border-color:var(--nf-error);background:color-mix(in srgb, var(--nf-error) 10%, transparent)}.zE6uZW_badgeDone{color:var(--nf-success);border-color:var(--nf-success);background:color-mix(in srgb, var(--nf-success) 10%, transparent)}.zE6uZW_badgeError{color:var(--nf-error);border-color:var(--nf-error);background:color-mix(in srgb, var(--nf-error) 10%, transparent)}.zE6uZW_reviewBox{border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);padding:var(--nf-space-10,10px) var(--nf-space-12,12px);background:var(--nf-bg-inset);gap:var(--nf-space-6,6px);font-size:var(--nf-fs-12,12.5px);flex-direction:column;display:flex}.zE6uZW_chapterPreview{white-space:pre-wrap;word-break:break-all;max-height:320px;font-size:var(--nf-fs-12,12.5px);color:var(--nf-text);background:var(--nf-bg-inset);border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);padding:var(--nf-space-10,10px) var(--nf-space-12,12px);margin:0;font-family:inherit;line-height:1.8;overflow:auto}.zE6uZW_chatScroll{gap:var(--nf-space-10,10px);min-height:240px;max-height:480px;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}.zE6uZW_chatBubbleUser{background:linear-gradient(180deg, var(--nf-accent), var(--nf-accent-hover));max-width:90%;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);align-self:flex-end;box-shadow:0 2px 6px #4d6bfe33}.zE6uZW_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}.zE6uZW_chatRole{font-size:var(--nf-fs-12,11px);color:var(--nf-text-3);margin-bottom:3px;font-weight:600}.zE6uZW_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}.zE6uZW_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}.zE6uZW_assistantStatusBusy{color:var(--nf-accent);border-color:var(--nf-accent);background:var(--nf-accent-soft);font-weight:600}.zE6uZW_toolSteps{gap:var(--nf-space-4,4px);flex-direction:column;margin-top:6px;display:flex}.zE6uZW_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}.zE6uZW_toolStepActive{border-color:var(--nf-accent);background:var(--nf-accent-soft)}.zE6uZW_toolStepError{border-color:var(--nf-error);background:color-mix(in srgb, var(--nf-error) 8%, transparent)}.zE6uZW_toolStepIcon{font-size:var(--nf-fs-14,13px);flex:none}.zE6uZW_toolStepName{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-weight:600;overflow:hidden}.zE6uZW_toolStepStatus{color:var(--nf-text-2);font-size:var(--nf-fs-12,11px);flex:none}.zE6uZW_toolStepActive .zE6uZW_toolStepStatus{color:var(--nf-accent)}.zE6uZW_toolStepError .zE6uZW_toolStepStatus{color:var(--nf-error)}.zE6uZW_toolStepDetail{width:100%;color:var(--nf-error);font-size:var(--nf-fs-12,11px);word-break:break-all}.zE6uZW_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}.zE6uZW_progressLine{color:var(--nf-text-2);opacity:.9}.zE6uZW_progressLineLive{color:var(--nf-accent);align-items:center;gap:var(--nf-space-8,8px);font-weight:600;display:flex}.zE6uZW_progressBar{border-radius:var(--nf-radius-999,999px);background:var(--nf-border);flex:none;width:110px;height:6px;display:inline-block;overflow:hidden}.zE6uZW_progressBarFill{border-radius:var(--nf-radius-4,3px);background:var(--nf-accent);height:100%;transition:width .3s;display:block}.zE6uZW_busyRow{justify-content:space-between;align-items:center;gap:var(--nf-space-12,12px);flex-wrap:wrap;display:flex}.zE6uZW_liveText{font-size:var(--nf-fs-12,12px);font-variant-numeric:tabular-nums;color:var(--nf-text-2)}.zE6uZW_bigProgressBar{border-radius:var(--nf-radius-999,999px);background:var(--nf-border);height:8px;margin-top:10px;overflow:hidden}.zE6uZW_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 .3s;display:block}.zE6uZW_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}.zE6uZW_legendOld{color:var(--nf-error);font-weight:700}.zE6uZW_legendNew{color:var(--nf-success);font-weight:700}.zE6uZW_onlyChanges{align-items:center;gap:var(--nf-space-4,4px);color:var(--nf-text-2);cursor:pointer;margin-left:auto;display:inline-flex}.zE6uZW_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}.zE6uZW_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}.zE6uZW_diffSame summary{cursor:pointer;font-size:var(--nf-fs-12,12px);user-select:none}.zE6uZW_diffSameBody{white-space:pre-wrap;margin-top:6px}.zE6uZW_diffChange{border:1px solid var(--nf-border);border-radius:var(--nf-radius-8,8px);grid-template-columns:1fr 1fr;display:grid;overflow:hidden}.zE6uZW_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}.zE6uZW_diffColumn:first-child{border-right:1px solid var(--nf-border)}.zE6uZW_diffTagOld,.zE6uZW_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}.zE6uZW_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)}.zE6uZW_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)}.zE6uZW_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)}.zE6uZW_diffNew{color:var(--nf-success);white-space:pre-wrap;font-weight:500}.zE6uZW_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}.zE6uZW_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}.zE6uZW_diffText{white-space:pre-wrap}.zE6uZW_diffDel .zE6uZW_diffText{color:var(--nf-error);text-decoration:line-through;text-decoration-color:color-mix(in srgb, var(--nf-error) 50%, transparent)}.zE6uZW_diffAdd .zE6uZW_diffText{color:var(--nf-success)}.zE6uZW_wsPage{gap:var(--nf-space-10,10px);flex-direction:column;flex:1;min-height:0;display:flex}.zE6uZW_wsPageHeader{align-items:center;gap:var(--nf-space-8,8px);flex-wrap:wrap;flex:none;display:flex}.zE6uZW_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}.zE6uZW_wsColumns{gap:var(--nf-space-14,14px);flex:1;grid-template-columns:minmax(0,1fr) minmax(0,1fr);min-height:0;display:grid}.zE6uZW_wsColumn{gap:var(--nf-space-8,8px);flex-direction:column;min-width:0;min-height:0;display:flex}.zE6uZW_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}.zE6uZW_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}.zE6uZW_wsSelectedText{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);white-space:pre-wrap;margin-top:4px}.zE6uZW_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}.zE6uZW_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}.zE6uZW_assetGrid{gap:var(--nf-space-10,10px);grid-template-columns:repeat(auto-fit,minmax(150px,1fr));display:grid}.zE6uZW_assetGroups{gap:var(--nf-space-14,14px);flex-direction:column;display:flex}.zE6uZW_assetGroup{gap:var(--nf-space-10,10px);flex-direction:column;display:flex}.zE6uZW_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}.zE6uZW_assetStat{border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-14,14px);padding:var(--nf-space-10,10px) var(--nf-space-12,12px);gap:var(--nf-space-4,4px);background:var(--nf-glass-face);box-shadow:var(--nf-card-shadow), inset 0 1px 0 var(--nf-glass-sheen);backdrop-filter:blur(30px)saturate(180%);flex-direction:column;transition:transform .22s,box-shadow .22s;display:flex}.zE6uZW_assetStat:hover{box-shadow:var(--nf-card-shadow-hover), inset 0 1px 0 var(--nf-glass-sheen);transform:translateY(-3px)}.zE6uZW_assetStatLabel{font-size:var(--nf-fs-12,11px);color:var(--nf-text-2);opacity:.9}.zE6uZW_assetStatValue{font-size:var(--nf-fs-14,15px);color:var(--nf-text);font-weight:700;line-height:1.2}.zE6uZW_assetStatDetail{font-size:var(--nf-fs-12,11px);color:var(--nf-text-2);opacity:.85;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.zE6uZW_dashHero{border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-22,22px);padding:var(--nf-card-pad,20px 22px);background:var(--nf-glass-face);box-shadow:var(--nf-card-shadow), inset 0 1.5px 0 var(--nf-glass-sheen), inset 0 -1px 0 #ffffff40;backdrop-filter:blur(30px)saturate(180%);gap:var(--nf-space-14,14px);flex-direction:column;transition:transform .22s,box-shadow .22s;display:flex;position:relative}.zE6uZW_dashHero:before{content:\"\";border-radius:inherit;pointer-events:none;background:radial-gradient(46% 40% at 92% -10%, color-mix(in srgb, var(--nf-accent) 13%, transparent), transparent 62%), var(--nf-glass-core), linear-gradient(90deg, transparent, var(--nf-glass-sheen), transparent) no-repeat 10% 0 / 80% 1px, linear-gradient(156deg, #ffffff42 0%, #fff0 55%);z-index:0;position:absolute;inset:0}.zE6uZW_dashHero:after{content:\"\";border-radius:inherit;pointer-events:none;background:var(--nf-glass-noise);opacity:.06;z-index:0;position:absolute;inset:0}.zE6uZW_dashHero:hover{box-shadow:var(--nf-card-shadow-hover), inset 0 1.5px 0 var(--nf-glass-sheen), inset 0 -1px 0 #ffffff40;transform:translateY(-3px)}.zE6uZW_dashHero>*{z-index:1;position:relative}.zE6uZW_dashHeroEyebrow{align-items:center;gap:var(--nf-space-6,6px);font-size:var(--nf-fs-14,13px);color:var(--nf-accent);font-weight:600;display:inline-flex}.zE6uZW_dashHeroSparkle{font-size:var(--nf-fs-14,14px)}.zE6uZW_dashHeroTitle{gap:var(--nf-space-2,2px);flex-direction:column;display:flex}.zE6uZW_dashHeroBook{font-size:var(--nf-fs-24,24px);letter-spacing:-.3px;margin:0;font-weight:700;line-height:1.25}.zE6uZW_dashHeroAction{align-items:center;gap:var(--nf-space-12,12px);border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-14,14px);background:var(--nf-glass-inset);box-shadow:inset 0 1px 0 var(--nf-glass-sheen);padding:var(--nf-space-10,10px) var(--nf-space-14,14px);display:flex}.zE6uZW_dashHeroArrow{width:28px;height:var(--nf-ctrl-s,28px);background:var(--nf-accent);color:#fff;font-size:var(--nf-fs-14,14px);border-radius:50%;flex:none;justify-content:center;align-items:center;display:inline-flex}.zE6uZW_dashHeroActionBody{gap:var(--nf-space-2,2px);flex-direction:column;flex:1;min-width:0;display:flex}.zE6uZW_dashHeroActionTitle{font-size:var(--nf-fs-14,14px);font-weight:600}.zE6uZW_dashJourney{gap:var(--nf-space-6,6px);flex-direction:column;display:flex}.zE6uZW_dashJourneyBar{border-radius:var(--nf-radius-999,999px);background:var(--nf-border);height:6px;overflow:hidden}.zE6uZW_dashJourneyFill{border-radius:var(--nf-radius-999,999px);background:linear-gradient(90deg, var(--nf-info), var(--nf-accent));height:100%;transition:width .4s;display:block}.zE6uZW_dashJourneyStages{gap:var(--nf-space-4,4px);grid-template-columns:repeat(6,minmax(0,1fr));display:grid}.zE6uZW_dashStage{align-items:center;gap:var(--nf-space-4,3px);font-size:var(--nf-fs-12,11px);color:var(--nf-text-3);text-align:center;white-space:nowrap;flex-direction:column;display:flex}.zE6uZW_dashStageDot{border:1px solid var(--nf-border-strong,var(--nf-text-3));width:18px;height:18px;font-size:var(--nf-fs-12,10px);background:var(--nf-bg-base);border-radius:50%;justify-content:center;align-items:center;display:inline-flex}.zE6uZW_dashStageDone{color:var(--nf-text-2)}.zE6uZW_dashStageDone .zE6uZW_dashStageDot{background:var(--nf-success);border-color:var(--nf-success);color:#fff}.zE6uZW_dashStageCurrent{color:var(--nf-accent);font-weight:600}.zE6uZW_dashStageCurrent .zE6uZW_dashStageDot{border-color:var(--nf-accent);color:var(--nf-accent);box-shadow:0 0 0 3px color-mix(in srgb, var(--nf-accent) 18%, transparent)}.zE6uZW_dashFacts{gap:var(--nf-space-8,8px);border-top:1px solid var(--nf-border);padding-top:var(--nf-space-12,12px);grid-template-columns:repeat(4,minmax(0,1fr));display:grid}.zE6uZW_dashFact{gap:var(--nf-space-2,2px);flex-direction:column;min-width:0;display:flex}.zE6uZW_dashFact b{font-size:var(--nf-fs-14,13px);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.zE6uZW_dashGrid{gap:var(--nf-space-14,14px);grid-template-columns:minmax(0,3fr) minmax(0,2fr);align-items:start;display:grid}.zE6uZW_todoItem{align-items:center;gap:var(--nf-space-10,10px);border-radius:var(--nf-radius-8,8px);padding:var(--nf-space-8,8px) var(--nf-space-12,12px);font-size:var(--nf-fs-12,12.5px);border:1px solid var(--nf-border);display:flex}.zE6uZW_todoDanger{border-color:color-mix(in srgb, var(--nf-error) 40%, transparent);background:color-mix(in srgb, var(--nf-error) 8%, transparent)}.zE6uZW_todoWarning{border-color:color-mix(in srgb, var(--nf-warn) 40%, transparent);background:color-mix(in srgb, var(--nf-warn) 8%, transparent)}.zE6uZW_todoInfo{border-color:color-mix(in srgb, var(--nf-info) 40%, transparent);background:color-mix(in srgb, var(--nf-info) 7%, transparent)}.zE6uZW_todoText{gap:var(--nf-space-2,2px);flex-direction:column;flex:1;min-width:0;display:flex}.zE6uZW_outlineReadonly{padding:var(--nf-space-12,12px) var(--nf-space-14,14px);border:1px solid var(--nf-border);border-radius:var(--nf-radius-12,12px);background:var(--nf-bg-inset);font-size:var(--nf-fs-12,12.5px);white-space:pre-wrap;user-select:text;max-height:480px;margin:0;line-height:1.8;overflow:auto}.zE6uZW_bookCreateOutline{gap:var(--nf-space-6,6px);flex-direction:column;align-items:flex-start;display:flex}.zE6uZW_assistantFloat{z-index:80;border:1px solid var(--nf-border);border-radius:var(--nf-radius-16,16px);background:var(--nf-bg-raise);backdrop-filter:blur(24px)saturate(180%);box-shadow:var(--nf-shadow-lg);flex-direction:column;min-width:320px;min-height:220px;display:flex;position:absolute;overflow:hidden}.zE6uZW_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}.zE6uZW_assistantFloatHeader:active{cursor:grabbing}.zE6uZW_assistantFloatBody{min-height:0;padding:var(--nf-space-10,10px);flex:1;display:flex;overflow:hidden}.zE6uZW_assistantFloatBody>*{flex:1;min-width:0}.zE6uZW_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}.zE6uZW_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}.zE6uZW_coverPreview img{object-fit:contain;width:100%;height:100%;display:block}.zE6uZW_coverPlaceholder{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3)}.zE6uZW_shelfView{min-height:0;padding:var(--nf-container-pad,20px 22px);gap:var(--nf-container-gap,14px);flex-direction:column;flex:1;display:flex;overflow:auto}.zE6uZW_authorHome{z-index:1;flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.zE6uZW_authorRail{border-right:1px solid var(--nf-glass-border);background:var(--nf-glass-face);flex-direction:column;flex-shrink:0;gap:4px;width:180px;padding:14px 10px;display:flex}.zE6uZW_authorRailTitle{color:var(--nf-accent);align-items:center;gap:8px;padding:4px 8px 12px;font-weight:600;display:flex}.zE6uZW_authorRailBtn{color:var(--nf-text);cursor:pointer;text-align:left;background:0 0;border:1px solid #0000;border-radius:10px;align-items:center;gap:10px;width:100%;padding:8px 12px;font-size:14px;display:flex}.zE6uZW_authorRailBtn:hover{background:color-mix(in srgb, var(--nf-accent) 12%, transparent);color:var(--nf-text)}.zE6uZW_authorRailBtnActive{background:color-mix(in srgb, var(--nf-accent) 16%, var(--nf-glass-face));border-color:var(--nf-accent);color:var(--nf-accent);box-shadow:inset 0 0 0 1px var(--nf-accent);font-weight:600}.zE6uZW_authorRailAbout{padding:8px 12px}.zE6uZW_authorContent{flex-direction:column;flex:1;min-width:0;display:flex;overflow:hidden}.zE6uZW_authorPageBody{padding:var(--nf-container-pad,20px 22px);flex-direction:column;flex:1;gap:14px;min-height:0;display:flex;overflow:auto}.zE6uZW_authorPageHeader{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:14px;display:flex}.zE6uZW_authorPageHero{gap:var(--nf-space-12,12px);padding:var(--nf-card-pad,20px 22px);border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-22,22px);background:var(--nf-glass-face);box-shadow:var(--nf-shadow), inset 0 1.5px 0 var(--nf-glass-sheen);backdrop-filter:blur(26px)saturate(175%);flex-direction:column;display:flex}.zE6uZW_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}.zE6uZW_rowEnd{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.zE6uZW_assetFilterBar{flex-wrap:wrap;gap:8px;display:flex}.zE6uZW_assetFilterChip{border:1px solid var(--nf-glass-border);color:var(--nf-text);cursor:pointer;background:0 0;border-radius:999px;padding:4px 10px}.zE6uZW_assetFilterChipActive{background:var(--nf-accent);color:#fff;border-color:#0000}.zE6uZW_assetEditor{border:1px solid var(--nf-glass-border);background:var(--nf-glass-face);border-radius:14px;flex-direction:column;gap:12px;padding:16px;display:flex}.zE6uZW_assetEditorRow{flex-wrap:wrap;gap:12px;display:flex}.zE6uZW_assetLabel{color:var(--nf-muted);flex-direction:column;flex:1;gap:4px;min-width:180px;font-size:12px;display:flex}.zE6uZW_assetTextarea{resize:vertical;min-height:160px;font-family:inherit}.zE6uZW_assetGrid{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px;display:grid}.zE6uZW_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}.zE6uZW_assetCardTop{justify-content:space-between;align-items:center;gap:8px;display:flex}.zE6uZW_assetKind{font-size:12px;font-weight:600}.zE6uZW_assetCardName{font-weight:600}.zE6uZW_assetCardContent{white-space:pre-wrap;color:var(--nf-text);max-height:150px;font-size:13px;overflow:auto}.zE6uZW_assetCardFooter{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.zE6uZW_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}.zE6uZW_iconBtn:hover{background:#0000000f}.zE6uZW_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}.zE6uZW_adaptTextarea{resize:vertical;min-height:220px}.zE6uZW_adaptResult{flex-direction:column;gap:14px;display:flex}.zE6uZW_adaptOutline{background:var(--nf-glass-face);border:1px solid var(--nf-glass-border);border-radius:12px;padding:10px 14px}.zE6uZW_adaptMatrix{grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px;display:grid}.zE6uZW_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}.zE6uZW_dimCardHead{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.zE6uZW_dimTitle{font-weight:600}.zE6uZW_dimCurrent{white-space:pre-wrap;font-size:13px}.zE6uZW_dimCardSelected{border-color:var(--nf-accent);box-shadow:0 0 0 1px var(--nf-accent)}.zE6uZW_dimEdit{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.zE6uZW_adaptOutlinePre{white-space:pre-wrap;max-height:260px;margin:0;font-family:inherit;font-size:13px;overflow:auto}.zE6uZW_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}.zE6uZW_adaptTable{border-collapse:collapse;width:100%;font-size:13px}.zE6uZW_adaptTable th,.zE6uZW_adaptTable td{border:1px solid var(--nf-glass-border);text-align:left;padding:6px 8px}.zE6uZW_adaptImpacts{flex-direction:column;gap:4px;display:flex}.zE6uZW_adaptImpact{font-size:13px}.zE6uZW_progressOverview{grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;display:grid}.zE6uZW_progressOverviewCard{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:4px;padding:14px;display:flex}.zE6uZW_progressOverviewNum{color:var(--nf-accent);font-size:24px;font-weight:700}.zE6uZW_progressTotalBar{background:var(--nf-glass-face);border:1px solid var(--nf-glass-border);border-radius:999px;height:14px;position:relative;overflow:hidden}.zE6uZW_progressTotalFill{background:linear-gradient(90deg, var(--nf-accent), var(--nf-info));border-radius:999px;height:100%;position:absolute;inset:0 auto 0 0}.zE6uZW_progressTotalBar .zE6uZW_meta{color:var(--nf-text);justify-content:center;align-items:center;font-size:11px;font-weight:600;display:flex;position:absolute;inset:0}.zE6uZW_progressBookList{flex-direction:column;gap:12px;display:flex}.zE6uZW_progressBook{border:1px solid var(--nf-glass-border);background:var(--nf-glass-face);border-radius:14px;flex-direction:column;gap:8px;padding:14px;display:flex}.zE6uZW_progressBookActive{border-color:var(--nf-accent);box-shadow:0 0 0 1px var(--nf-accent)}.zE6uZW_progressBookHead{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.zE6uZW_progressBookName{font-weight:600}.zE6uZW_progressLive{color:var(--nf-accent);font-weight:600}.zE6uZW_progressBookBar{background:var(--nf-glass-face-hover,#0000000d);border-radius:999px;height:8px;overflow:hidden}.zE6uZW_progressBookFill{background:var(--nf-accent);border-radius:999px;height:100%}.zE6uZW_shelfHeader{gap:var(--nf-space-10,10px);flex-direction:column;display:flex}.zE6uZW_shelfHero{gap:var(--nf-space-14,14px);padding:var(--nf-card-pad,20px 22px);border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-22,22px);background:var(--nf-glass-face);box-shadow:var(--nf-shadow), inset 0 1.5px 0 var(--nf-glass-sheen);flex-direction:column;display:flex}.zE6uZW_shelfHero .zE6uZW_panelTitle{font-size:var(--nf-fs-22,22px);letter-spacing:.3px}.zE6uZW_shelfTitleRow{justify-content:space-between;align-items:center;gap:var(--nf-space-10,10px);flex-wrap:wrap;display:flex}.zE6uZW_shelfToolbar{align-items:center;gap:var(--nf-space-10,10px);flex-wrap:wrap;display:flex}.zE6uZW_shelfSearch{flex:1;min-width:180px;max-width:320px}.zE6uZW_shelfStats{gap:var(--nf-space-10,10px);grid-template-columns:repeat(auto-fit,minmax(120px,1fr));display:grid}.zE6uZW_shelfStat{justify-content:space-between;align-items:baseline;gap:var(--nf-space-8,8px);padding:var(--nf-space-10,10px) var(--nf-space-14,14px);border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-14,14px);background:var(--nf-glass-face);box-shadow:var(--nf-shadow), inset 0 1px 0 var(--nf-glass-sheen);cursor:pointer;user-select:none;transition:border-color .15s,background .15s,box-shadow .15s,transform .1s;display:flex}.zE6uZW_shelfStat:hover{border-color:var(--nf-accent);transform:translateY(-1px)}.zE6uZW_shelfStatActive{border-color:var(--nf-accent);background:var(--nf-accent-soft);box-shadow:0 0 0 2px var(--nf-accent-soft), var(--nf-shadow)}.zE6uZW_shelfStat b{font-size:var(--nf-fs-20,20px);color:var(--nf-accent);font-weight:800}.zE6uZW_shelfStat span{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2)}.zE6uZW_shelfFilters{gap:var(--nf-space-2,2px);padding:var(--nf-space-4,3px);border:1px solid var(--nf-border);border-radius:var(--nf-radius-999,999px);background:var(--nf-bg-inset);display:inline-flex}.zE6uZW_shelfFilter{color:var(--nf-text-2);font-size:var(--nf-fs-12,12.5px);padding:var(--nf-space-6,5px) var(--nf-space-12,12px);border-radius:var(--nf-radius-999,999px);cursor:pointer;align-items:center;gap:var(--nf-space-6,5px);white-space:nowrap;background:0 0;border:none;font-weight:600;transition:background .15s,color .15s,box-shadow .15s;display:inline-flex}.zE6uZW_shelfFilter:hover{color:var(--nf-text)}.zE6uZW_shelfFilterActive{background:linear-gradient(135deg, var(--nf-accent), var(--nf-accent-hover));color:var(--nf-accent-fg);box-shadow:0 3px 12px color-mix(in srgb, var(--nf-accent) 40%, transparent)}.zE6uZW_shelfFilterCount{font-size:var(--nf-fs-12,10.5px);opacity:.8;background:color-mix(in srgb, currentColor 14%, transparent);border-radius:var(--nf-radius-999,999px);padding:0 var(--nf-space-6,6px)}.zE6uZW_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);backdrop-filter:blur(24px)saturate(180%);text-align:center;flex-direction:column;flex:1;display:flex}.zE6uZW_shelfEmptyIcon{font-size:var(--nf-fs-42,42px)}.zE6uZW_shelfEmptyTitle{font-size:var(--nf-fs-16,16px);font-weight:700}.zE6uZW_shelfGrid{gap:var(--nf-container-gap,14px);grid-template-columns:repeat(auto-fill,minmax(190px,1fr));align-content:start;display:grid}.zE6uZW_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}.zE6uZW_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}.zE6uZW_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}.zE6uZW_panel[data-nf-mode=light]{color-scheme:light;--nf-bg:#f2f2f7db;--nf-bg-raise:#ffffffb8;--nf-bg-inset:#7676801f;--nf-border:#3c3c4329;--nf-border-strong:#3c3c4352;--nf-text:#1c1c1e;--nf-text-2:#3c3c43;--nf-text-2-alpha:#3c3c43ad;--nf-text-3:#8e8e93;--nf-accent:#00b85c;--nf-accent-hover:#00a04e;--nf-accent-soft:#00b85c1f;--nf-accent-fg:#fff;--nf-hover:#0000000d;--nf-success:#34c759;--nf-error:#ff3b30;--nf-warn:#ff9500;--nf-info:#00b85c;--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:linear-gradient(180deg, #f6f7f9 0%, #f0f2f5 26%, #e9ebef 52%, #e0e3e8 78%, #d6d9df 100%);--nf-glass-core:radial-gradient(30% 24% at 36% 28%, #ffffff80 0%, #ffffff38 45%, #fff0 78%);--nf-glass-sheen:#ffffff8c;--nf-glass-border:#ffffffa6;--nf-glass-inset:#ffffff8c;--nf-glass-orb-a:#00b85c2e;--nf-glass-orb-b:#78a0ff21}.zE6uZW_panel[data-nf-mode=dark]{color-scheme:dark;--nf-bg:#0a0b0ddb;--nf-bg-raise:#1c1c1ec7;--nf-bg-inset:#7676802e;--nf-border:#ffffff1f;--nf-border-strong:#ffffff47;--nf-text:#f2f2f7;--nf-text-2:#d1d1d6;--nf-text-2-alpha:#d1d1d6b8;--nf-text-3:#8e8e93;--nf-accent:#35d07a;--nf-accent-hover:#5ce695;--nf-accent-soft:#35d07a33;--nf-accent-fg:#062b18;--nf-hover:#ffffff17;--nf-success:#30d158;--nf-error:#ff453a;--nf-warn:#ff9f0a;--nf-info:#35d07a;--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:linear-gradient(180deg, #70747a6b 0%, #60646a6b 26%, #52555a6b 52%, #44474c6b 78%, #383a3f6b 100%);--nf-glass-core:radial-gradient(30% 24% at 36% 28%, #ffffff42 0%, #ffffff1a 45%, #fff0 78%);--nf-glass-sheen:#ffffff42;--nf-glass-border:#ffffff24;--nf-glass-inset:#ffffff12;--nf-glass-orb-a:#00ca5247;--nf-glass-orb-b:#bec8d71a}.zE6uZW_panel[data-nf-mode=dark][data-nf-theme=macos]{--nf-bg:#1c1c1ee6;--nf-bg-raise:#2c2c2ed1;--nf-bg-inset:#7676802e;--nf-border:#ffffff1f;--nf-border-strong:#ffffff42;--nf-text:#f5f5f7;--nf-text-2:#d1d1d6;--nf-text-2-alpha:#d1d1d6b3;--nf-text-3:#98989d;--nf-accent:#0a84ff;--nf-accent-hover:#3a9bff;--nf-accent-soft:#0a84ff33;--nf-accent-fg:#fff;--nf-hover:#ffffff0f;--nf-info:#bf5af2;--nf-shadow:0 1px 2px #0006, 0 10px 30px #00000073;--nf-shadow-lg:0 4px 12px #00000073, 0 18px 44px #0009;--nf-card-shadow:0 2px 6px #0006, 0 14px 38px #00000080;--nf-card-shadow-hover:0 4px 10px #00000073, 0 22px 52px #0009;--nf-glass-face:#2c2c2ed9;--nf-glass-core:transparent;--nf-glass-sheen:#fff3;--nf-glass-border:#ffffff2e;--nf-glass-inset:#ffffff0f;--nf-glass-orb-a:#0a84ff29;--nf-glass-orb-b:#bf5af214;--nf-glass-noise:none}.zE6uZW_panel[data-nf-mode=dark][data-nf-theme=neumorph]{--nf-bg:#2b2f36;--nf-bg-raise:#2b2f36;--nf-bg-inset:#25292f;--nf-border:#0a0c1080;--nf-border-strong:#080a0e99;--nf-text:#d6dae1;--nf-text-2:#a8aeb8;--nf-text-2-alpha:#a8aeb8b3;--nf-text-3:#757c88;--nf-hover:#ffffff0d;--nf-shadow:4px 4px 10px #00000080, -4px -4px 10px #6068763d;--nf-shadow-lg:6px 6px 14px #0000008c, -6px -6px 14px #60687642;--nf-card-shadow:9px 9px 18px #00000080, -9px -9px 18px #6068763d;--nf-card-shadow-hover:12px 12px 24px #0009, -12px -12px 24px #60687647;--nf-glass-face:#2b2f36;--nf-glass-core:transparent;--nf-glass-sheen:#fff0;--nf-glass-border:#0c0e1273;--nf-glass-inset:#25292f;--nf-glass-orb-a:transparent;--nf-glass-orb-b:transparent;--nf-glass-noise:none}.zE6uZW_panel[data-nf-mode=light][data-nf-theme=neumorph]{--nf-bg:#e4e9f2;--nf-bg-raise:#e4e9f2;--nf-bg-inset:#d9dfe8;--nf-border:#8c9baf59;--nf-border-strong:#78879e80;--nf-text:#3a4250;--nf-text-2:#5b6472;--nf-text-2-alpha:#465060b3;--nf-text-3:#8b94a3;--nf-hover:#5a697d14;--nf-shadow:4px 4px 10px #a3b1c68c, -4px -4px 10px #ffffffd9;--nf-shadow-lg:6px 6px 14px #a3b1c699, -6px -6px 14px #ffffffe6;--nf-card-shadow:9px 9px 18px #a3b1c68c, -9px -9px 18px #ffffffd9;--nf-card-shadow-hover:12px 12px 24px #a3b1c6a6, -12px -12px 24px #fffffff2;--nf-glass-face:#e4e9f2;--nf-glass-core:transparent;--nf-glass-sheen:#fff0;--nf-glass-border:#a3b1c666;--nf-glass-inset:#d9dfe8;--nf-glass-orb-a:transparent;--nf-glass-orb-b:transparent;--nf-glass-noise:none}.zE6uZW_bookCard{gap:var(--nf-space-8,8px);border:1px solid var(--nf-border);border-radius:var(--nf-radius-16,16px);padding:var(--nf-space-12,12px);background:var(--nf-bg-raise);backdrop-filter:blur(24px)saturate(180%);box-shadow:var(--nf-shadow);cursor:pointer;flex-direction:column;transition:border-color .15s,transform .1s,box-shadow .15s;display:flex}.zE6uZW_bookCard:hover{border-color:var(--nf-accent);box-shadow:var(--nf-shadow-lg);transform:translateY(-2px)}.zE6uZW_bookCardActive{border-color:var(--nf-accent);box-shadow:0 0 0 3px var(--nf-accent-soft)}.zE6uZW_bookCardCover{aspect-ratio:3/4;border-radius:var(--nf-radius-12,12px);background:var(--nf-bg-inset);border:1px solid var(--nf-border);flex:none;justify-content:center;align-items:center;display:flex;position:relative;overflow:hidden}.zE6uZW_bookCardCover img{object-fit:cover;width:100%;height:100%;transition:transform .35s;display:block}.zE6uZW_bookCard:hover .zE6uZW_bookCardCover img{transform:scale(1.06)}.zE6uZW_bookCardCover:after{content:\"\";border-radius:inherit;pointer-events:none;opacity:0;background:linear-gradient(#0000 55%,#00000047);transition:opacity .25s;position:absolute;inset:0}.zE6uZW_bookCard:hover .zE6uZW_bookCardCover:after{opacity:1}.zE6uZW_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}.zE6uZW_bookCardCoverTitle{font-size:var(--nf-fs-22,22px);color:var(--nf-accent);letter-spacing:2px;font-weight:800}.zE6uZW_bookCardBody{gap:var(--nf-space-6,5px);flex-direction:column;flex:1;min-width:0;display:flex}.zE6uZW_bookCardTitleRow{justify-content:space-between;align-items:center;gap:var(--nf-space-6,6px);display:flex}.zE6uZW_bookCardName{font-weight:700;font-size:var(--nf-fs-14,13.5px);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.zE6uZW_bookCardBlurb{-webkit-line-clamp:2;-webkit-box-orient:vertical;min-height:34px;display:-webkit-box;overflow:hidden}.zE6uZW_bookCardMetaRow{justify-content:space-between;align-items:center;gap:var(--nf-space-6,6px);flex-wrap:wrap;display:flex}.zE6uZW_bookCardProgressBar{border-radius:var(--nf-radius-999,999px);background:var(--nf-border);height:6px;overflow:hidden;box-shadow:inset 0 1px 2px #0000001f}.zE6uZW_bookCardProgressFill{border-radius:var(--nf-radius-999,999px);background:linear-gradient(90deg, var(--nf-info), var(--nf-accent));height:100%;transition:width .3s;display:block}.zE6uZW_bookAddCard{justify-content:center;align-items:center;gap:var(--nf-space-8,8px);text-align:center;color:var(--nf-text-2);border-style:dashed;min-height:260px;transition:border-color .15s,color .15s,background .15s,transform .15s}.zE6uZW_bookAddCard:hover{border-color:var(--nf-accent);background:var(--nf-accent-soft);color:var(--nf-accent);transform:translateY(-2px)}.zE6uZW_bookAddIcon{font-size:var(--nf-fs-34,34px);color:var(--nf-accent);line-height:1;transition:transform .15s}.zE6uZW_bookAddCard:hover .zE6uZW_bookAddIcon{transform:scale(1.12)}.zE6uZW_bookCreateCard{border-color:var(--nf-accent);min-height:260px}.zE6uZW_createBookView{min-height:0;padding:var(--nf-container-pad,20px 22px);gap:var(--nf-container-gap,14px);flex-direction:column;flex:1;display:flex;overflow:auto}.zE6uZW_createBookTop{align-items:center;display:flex}.zE6uZW_createBookCard{align-self:center;gap:var(--nf-space-12,12px);border:1px solid var(--nf-border);border-radius:var(--nf-radius-20,20px);width:min(520px,100%);padding:var(--nf-card-pad,20px 22px);background:var(--nf-bg-raise);backdrop-filter:blur(24px)saturate(180%);box-shadow:var(--nf-shadow-lg);flex-direction:column;display:flex}.zE6uZW_createBookIcon{font-size:var(--nf-fs-34,34px);line-height:1}.zE6uZW_createBookTitle{font-size:var(--nf-fs-22,22px);letter-spacing:-.3px;margin:0;font-weight:800}.zE6uZW_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}.zE6uZW_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}.zE6uZW_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}.zE6uZW_progressLineDone{color:var(--nf-success);font-weight:600}.zE6uZW_progressLineError{color:var(--nf-error);font-weight:600}.zE6uZW_meta{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);opacity:.9}.zE6uZW_genreDesc{-webkit-line-clamp:2;-webkit-box-orient:vertical;max-width:560px;display:-webkit-box;overflow:hidden}.zE6uZW_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}.zE6uZW_panelContent::-webkit-scrollbar,.zE6uZW_chatScroll::-webkit-scrollbar,.zE6uZW_chapterPreview::-webkit-scrollbar,.zE6uZW_progress::-webkit-scrollbar,.zE6uZW_toolLive::-webkit-scrollbar{width:8px;height:8px}.zE6uZW_panelContent::-webkit-scrollbar-thumb,.zE6uZW_chatScroll::-webkit-scrollbar-thumb,.zE6uZW_chapterPreview::-webkit-scrollbar-thumb,.zE6uZW_progress::-webkit-scrollbar-thumb,.zE6uZW_toolLive::-webkit-scrollbar-thumb{background:var(--nf-border-strong);border-radius:var(--nf-radius-4,4px)}.zE6uZW_panelContent::-webkit-scrollbar-thumb:hover,.zE6uZW_chatScroll::-webkit-scrollbar-thumb:hover,.zE6uZW_chapterPreview::-webkit-scrollbar-thumb:hover,.zE6uZW_progress::-webkit-scrollbar-thumb:hover,.zE6uZW_toolLive::-webkit-scrollbar-thumb:hover{background:var(--nf-text-3)}.zE6uZW_workflowList{flex-direction:column;gap:0;display:flex}.zE6uZW_workflowRow{align-items:flex-start;gap:var(--nf-space-12,12px);padding:var(--nf-space-8,8px) var(--nf-space-4,4px);display:flex;position:relative}.zE6uZW_workflowRow:before{content:\"\";background:var(--nf-border);width:2px;position:absolute;top:34px;bottom:-8px;left:13px}.zE6uZW_workflowRow:last-child:before{display:none}.zE6uZW_workflowDot{width:28px;height:var(--nf-ctrl-s,28px);font-size:var(--nf-fs-12,12px);border:2px solid var(--nf-border-strong);background:var(--nf-bg-raise);color:var(--nf-text-2);z-index:1;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-weight:700;display:inline-flex}.zE6uZW_workflowDotDone{border-color:var(--nf-success);background:color-mix(in srgb, var(--nf-success) 15%, var(--nf-bg-raise));color:var(--nf-success)}.zE6uZW_workflowDotActive{border-color:var(--nf-accent);background:var(--nf-accent);color:var(--nf-accent-fg);box-shadow:0 0 0 4px var(--nf-accent-soft)}.zE6uZW_workflowBody{gap:var(--nf-space-4,4px);min-width:0;padding-top:var(--nf-space-2,2px);flex-direction:column;flex:1;display:flex}.zE6uZW_workflowLabel{font-size:var(--nf-fs-14,13px);color:var(--nf-text);font-weight:600}.zE6uZW_workflowHint{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2)}@keyframes zE6uZW_pulse{0%,to{opacity:1}50%{opacity:.45}}@keyframes zE6uZW_fadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.zE6uZW_card{animation:.2s zE6uZW_fadeIn}.zE6uZW_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);backdrop-filter:blur(26px)saturate(175%);z-index:1;flex-wrap:wrap;flex-shrink:0;margin:10px 12px 0;display:flex;position:relative}.zE6uZW_bookshelfLabel{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);letter-spacing:1px;flex-shrink:0;font-weight:700}.zE6uZW_bookshelfList{align-items:center;gap:var(--nf-space-6,6px);flex-wrap:wrap;flex:1;min-width:0;display:flex}.zE6uZW_bookChip{align-items:center;gap:var(--nf-space-6,6px);padding:var(--nf-space-4,4px) var(--nf-space-8,8px) var(--nf-space-4,4px) var(--nf-space-10,10px);border:1px solid var(--nf-border);border-radius:var(--nf-radius-999,999px);background:var(--nf-bg-inset);cursor:pointer;font-size:var(--nf-fs-12,12px);max-width:220px;transition:border-color .15s,background .15s;display:flex}.zE6uZW_bookChip:hover{border-color:var(--nf-border-strong)}.zE6uZW_bookChipActive{border-color:var(--nf-accent);background:var(--nf-accent-soft);color:var(--nf-accent)}.zE6uZW_bookChipName{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.zE6uZW_bookChipMeta{font-size:var(--nf-fs-12,11px);opacity:.7;white-space:nowrap}.zE6uZW_bookChipRemove{color:var(--nf-text-3);cursor:pointer;font-size:var(--nf-fs-14,13px);padding:0 var(--nf-space-2,2px);border-radius:var(--nf-radius-4,4px);background:0 0;border:none;line-height:1}.zE6uZW_bookChipRemove:hover{color:var(--nf-error)}.zE6uZW_bookAdd{border:1px dashed var(--nf-border-strong);color:var(--nf-text-2);cursor:pointer;font-size:var(--nf-fs-12,12px);padding:var(--nf-space-4,4px) var(--nf-space-12,12px);border-radius:var(--nf-radius-999,999px);background:0 0;transition:border-color .15s,color .15s}.zE6uZW_bookAdd:hover{border-color:var(--nf-accent);color:var(--nf-accent)}.zE6uZW_bookCreateForm{align-items:center;gap:var(--nf-space-6,6px);display:flex}.zE6uZW_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;align-items:center;gap:var(--nf-space-6,6px);flex-direction:column;transition:border-color .15s,background .15s;display:flex}.zE6uZW_dropzone:hover,.zE6uZW_dropzoneActive{border-color:var(--nf-accent);background:var(--nf-accent-soft);color:var(--nf-accent)}.zE6uZW_dropzoneIcon{font-size:var(--nf-fs-22,22px);line-height:1}.zE6uZW_bookCardActions{align-items:center;gap:var(--nf-space-6,6px);padding-top:var(--nf-space-8,8px);margin-top:auto;display:flex}.zE6uZW_bookCardActions .zE6uZW_button{flex:1;justify-content:center}.zE6uZW_readerView{flex-direction:column;transition:background .2s,color .2s;display:flex;position:absolute;inset:0;overflow:hidden}.zE6uZW_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}.zE6uZW_readerTitle{font-weight:700;font-size:var(--nf-fs-14,14px)}.zE6uZW_readerSeg{align-items:center;gap:var(--nf-space-2,2px);border-radius:var(--nf-radius-8,8px);display:flex;overflow:hidden}.zE6uZW_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}.zE6uZW_readerSegBtn:hover,.zE6uZW_readerSegActive{opacity:1}.zE6uZW_readerBody{flex:1;align-items:stretch;min-height:0;display:flex}.zE6uZW_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}.zE6uZW_readerGroup{gap:var(--nf-space-2,1px);flex-direction:column;display:flex}.zE6uZW_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}.zE6uZW_readerGroupTitle:hover{opacity:1;background:#8080801f}.zE6uZW_readerGroupArrow{font-size:var(--nf-fs-12,10px);text-align:center;flex:none;width:12px}.zE6uZW_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}.zE6uZW_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;background:0 0;border:1px solid;min-width:0;transition:opacity .15s,background .15s;display:flex}.zE6uZW_readerItem:hover{opacity:1}.zE6uZW_readerItemActive{opacity:1;font-weight:700}.zE6uZW_readerItemNo{text-align:right;opacity:.75;flex:none;min-width:26px;font-weight:700}.zE6uZW_readerItemTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.zE6uZW_readerItemBadge{font-size:var(--nf-fs-12,11px);flex:none}.zE6uZW_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}.zE6uZW_readerArticle{gap:var(--nf-space-12,12px);flex-direction:column;width:100%;display:flex}.zE6uZW_readerChapterTitle{font-size:var(--nf-fs-24,24px);letter-spacing:1px;margin:0;font-weight:800}.zE6uZW_readerChapterMeta{align-items:center;gap:var(--nf-space-8,8px);font-size:var(--nf-fs-12,12px);display:flex}.zE6uZW_readerText{text-align:justify;letter-spacing:.02em}.zE6uZW_readerPara{text-indent:2em;margin:0 0 .85em}.zE6uZW_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}.zE6uZW_readerLoading,.zE6uZW_readerError{padding:var(--nf-space-32,32px) 0;font-size:var(--nf-fs-14,13px);opacity:.7;align-self:center}.zE6uZW_readerError{color:var(--nf-error)}.zE6uZW_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}.zE6uZW_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);backdrop-filter:blur(28px)saturate(180%);box-shadow:var(--nf-shadow-lg);flex-direction:column;display:flex;overflow:auto}.zE6uZW_importModalHead{justify-content:space-between;align-items:center;gap:var(--nf-space-10,10px);display:flex}.zE6uZW_importModalTabs{gap:var(--nf-space-8,8px);display:flex}.zE6uZW_importModalTabs .zE6uZW_button{flex:1}.zE6uZW_importModalBody{gap:var(--nf-space-10,10px);flex-direction:column;display:flex}.zE6uZW_importField{gap:var(--nf-space-6,5px);font-size:var(--nf-fs-14,13px);color:var(--nf-text-2);flex-direction:column;display:flex}.zE6uZW_importHint{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);line-height:1.5}.zE6uZW_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}.zE6uZW_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}.zE6uZW_importModalActions{justify-content:flex-end;gap:var(--nf-space-8,8px);display:flex}.zE6uZW_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}.zE6uZW_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}.zE6uZW_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}.zE6uZW_settingsCard .zE6uZW_fieldLabel{white-space:nowrap;text-overflow:ellipsis;max-width:100%;min-height:18px;line-height:18px;overflow:hidden}.zE6uZW_settingsCard .zE6uZW_row{align-items:flex-start}.zE6uZW_helpTipText{width:280px;max-width:70vw;padding:var(--nf-space-10,10px) var(--nf-space-12,12px);border-radius:var(--nf-radius-10,10px);background:var(--nf-bg-raise);border:1px solid var(--nf-border-strong);box-shadow:var(--nf-shadow-lg);font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);white-space:normal;z-index:20;text-align:left;pointer-events:none;font-weight:400;line-height:1.7;display:none;position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%)}.zE6uZW_helpTip:hover .zE6uZW_helpTipText,.zE6uZW_helpTip:focus .zE6uZW_helpTipText,.zE6uZW_helpTip:focus-within .zE6uZW_helpTipText{display:block}.zE6uZW_settingsCard+.zE6uZW_settingsCard{flex:1;min-height:0}.zE6uZW_switch{border-radius:var(--nf-radius-999,999px);border:1px solid var(--nf-border-strong);background:var(--nf-bg-inset);cursor:pointer;flex:none;width:42px;height:24px;padding:0;transition:background .18s,border-color .18s;position:relative}.zE6uZW_switchKnob{background:#fff;border-radius:50%;width:16px;height:16px;transition:transform .18s;position:absolute;top:3px;left:3px;box-shadow:0 1px 3px #0000004d}.zE6uZW_switchOn{background:var(--nf-accent);border-color:var(--nf-accent)}.zE6uZW_switchOn .zE6uZW_switchKnob{transform:translate(18px)}.zE6uZW_panel[data-nf-theme=neumorph]:not([data-nf-mode=dark]),body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=neumorph][data-nf-mode=light]{--nf-glass-face:color-mix(in srgb, #e4e9f2, transparent calc(100% - var(--nf-glass-opacity,100%)));--nf-bg-raise:color-mix(in srgb, #e4e9f2, transparent calc(100% - var(--nf-glass-opacity,100%)))}.zE6uZW_panel[data-nf-mode=dark][data-nf-theme=neumorph],body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=neumorph]:not([data-nf-mode]){--nf-glass-face:color-mix(in srgb, #2b2f36, transparent calc(100% - var(--nf-glass-opacity,100%)));--nf-bg-raise:color-mix(in srgb, #2b2f36, transparent calc(100% - var(--nf-glass-opacity,100%)))}.zE6uZW_panel[data-nf-theme=clay]:not([data-nf-mode=dark]),body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=clay][data-nf-mode=light]{--nf-glass-face:color-mix(in srgb, #efe4d6, transparent calc(100% - var(--nf-glass-opacity,100%)));--nf-bg-raise:color-mix(in srgb, #efe4d6, transparent calc(100% - var(--nf-glass-opacity,100%)))}.zE6uZW_panel[data-nf-mode=dark][data-nf-theme=clay],body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=clay]:not([data-nf-mode]){--nf-glass-face:color-mix(in srgb, #37302b, transparent calc(100% - var(--nf-glass-opacity,100%)));--nf-bg-raise:color-mix(in srgb, #37302b, transparent calc(100% - var(--nf-glass-opacity,100%)))}";
35492
+ const css = ".zE6uZW_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);background:0 0;border:none;font-size:14px;transition:background .15s;display:flex}body[data-ds-dark-theme] .zE6uZW_entry{color:var(--dsw-alias-label-primary,#ececf1)}.zE6uZW_entry:hover{background:var(--dsw-alias-interactive-bg-hover,#7f7f7f1f)}.zE6uZW_entry[data-active]{background:var(--dsw-alias-interactive-bg-active,#7f7f7f33)}.zE6uZW_entryIcon{flex-shrink:0;justify-content:center;align-items:center;width:20px;height:20px;display:inline-flex}.zE6uZW_entryLabel{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}[data-pane=conversation]{position:relative}.zE6uZW_view{z-index:60;color-scheme:light;--nf-font:-apple-system, BlinkMacSystemFont, \"SF Pro Display\", \"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-bg:#f2f2f7db;--nf-bg-raise:#ffffffb8;--nf-bg-inset:#7676801f;--nf-border:#3c3c4329;--nf-border-strong:#3c3c4352;--nf-text:#1c1c1e;--nf-text-2:#3c3c43;--nf-text-2-alpha:#3c3c43ad;--nf-text-3:#8e8e93;--nf-accent:#00b85c;--nf-accent-hover:#00a04e;--nf-accent-soft:#00b85c1f;--nf-accent-fg:#fff;--nf-hover:#0000000d;--nf-success:#34c759;--nf-error:#ff3b30;--nf-warn:#ff9500;--nf-info:#00b85c;--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:linear-gradient(180deg, #fff6 0%, #ffffff4d 26%, #ffffff3d 52%, #fff3 78%, #ffffff2e 100%);--nf-glass-core:radial-gradient(60% 40% at 30% 0%, #fff9 0%, #fff3 42%, #fff0 78%);--nf-glass-sheen:#ffffff8c;--nf-glass-border:#ffffff80;--nf-glass-inset:#fff6;--nf-glass-orb-a:#00b85c3d;--nf-glass-orb-b:#78a0ff33;--nf-glass-noise:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23n)'/%3E%3C/svg%3E\");--nf-card-radius:20px;--nf-card-blur:26px;--nf-card-saturate:170%;--nf-card-brightness:1.04;--nf-card-sheen:#ffffff80;--nf-card-border:1px solid #ffffff59;--nf-ctrl-radius:14px;--nf-ctrl-bg:var(--nf-bg-raise);--nf-ctrl-border:1px solid #ffffffb3;--nf-ctrl-sheen:#ffffff80;--nf-ctrl-caret:var(--nf-accent);--nf-glass-bg-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1600' height='1000'%3E%3Cdefs%3E%3Cfilter id='b' x='-20%25' y='-20%25' width='140%25' height='140%25'%3E%3CfeGaussianBlur stdDeviation='110'/%3E%3C/filter%3E%3C/defs%3E%3Cg filter='url(%23b)'%3E%3Ccircle cx='300' cy='180' r='420' fill='%2335d07a' fill-opacity='0.62'/%3E%3Ccircle cx='1240' cy='260' r='470' fill='%233aa7ff' fill-opacity='0.58'/%3E%3Ccircle cx='900' cy='860' r='470' fill='%2340cfc0' fill-opacity='0.5'/%3E%3Ccircle cx='1500' cy='820' r='330' fill='%23ff9fb0' fill-opacity='0.4'/%3E%3Ccircle cx='600' cy='620' r='260' fill='%23b06ef0' fill-opacity='0.42'/%3E%3Ccircle cx='180' cy='600' r='220' fill='%23ffd166' fill-opacity='0.36'/%3E%3C/g%3E%3C/svg%3E\");background:var(--nf-bg);backdrop-filter:blur(30px)saturate(170%)brightness(1.04);color:var(--nf-text);--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-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-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;font-family:-apple-system,BlinkMacSystemFont,SF Pro Display,SF Pro Text,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Segoe UI,Roboto,Helvetica Neue,sans-serif;display:none;position:absolute;inset:0;overflow:auto}.zE6uZW_panel[data-nf-mode=dark],body[data-ds-dark-theme] .zE6uZW_panel:not([data-nf-mode]),.zE6uZW_view:has(>.zE6uZW_panel[data-nf-mode=dark]),body[data-ds-dark-theme] .zE6uZW_view:not(:has(>.zE6uZW_panel[data-nf-mode=light])){color-scheme:dark;--nf-bg:#0a0b0ddb;--nf-bg-raise:#1c1c1ec7;--nf-bg-inset:#7676802e;--nf-border:#ffffff1f;--nf-border-strong:#ffffff47;--nf-text:#f2f2f7;--nf-text-2:#d1d1d6;--nf-text-2-alpha:#d1d1d6b8;--nf-text-3:#8e8e93;--nf-accent:#35d07a;--nf-accent-hover:#5ce695;--nf-accent-soft:#35d07a33;--nf-accent-fg:#062b18;--nf-hover:#ffffff17;--nf-success:#30d158;--nf-error:#ff453a;--nf-warn:#ff9f0a;--nf-info:#35d07a;--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:linear-gradient(180deg, #3e424a85 0%, #363a4275 26%, #30343c66 52%, #2a2e365c 78%, #262a3257 100%);--nf-glass-core:radial-gradient(60% 40% at 30% 0%, #ffffff38 0%, #ffffff14 42%, #fff0 78%);--nf-glass-sheen:#ffffff3d;--nf-glass-border:#ffffff24;--nf-glass-inset:#ffffff14;--nf-glass-orb-a:#00ca525c;--nf-glass-orb-b:#78a0ff47;--nf-glass-noise:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='180' height='180' filter='url(%23n)'/%3E%3C/svg%3E\");--nf-card-radius:20px;--nf-card-blur:28px;--nf-card-saturate:165%;--nf-card-brightness:1;--nf-card-border:1px solid #ffffff24;--nf-card-sheen:#ffffff38;--nf-glass-bg-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1600' height='1000'%3E%3Cdefs%3E%3Cfilter id='b' x='-20%25' y='-20%25' width='140%25' height='140%25'%3E%3CfeGaussianBlur stdDeviation='110'/%3E%3C/filter%3E%3C/defs%3E%3Cg filter='url(%23b)'%3E%3Ccircle cx='300' cy='180' r='420' fill='%231a9f4d' fill-opacity='0.44'/%3E%3Ccircle cx='1240' cy='260' r='470' fill='%23268bd6' fill-opacity='0.40'/%3E%3Ccircle cx='900' cy='860' r='470' fill='%232a9e94' fill-opacity='0.36'/%3E%3Ccircle cx='1500' cy='820' r='330' fill='%23e07a94' fill-opacity='0.30'/%3E%3Ccircle cx='600' cy='620' r='260' fill='%238c5bd6' fill-opacity='0.32'/%3E%3C/g%3E%3C/svg%3E\");--nf-ctrl-radius:14px;--nf-ctrl-bg:var(--nf-bg-raise);--nf-ctrl-border:1px solid #ffffff2e;--nf-ctrl-sheen:#fff3;--nf-ctrl-caret:var(--nf-accent)}html[data-dsh-novelforge-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) .zE6uZW_view{display:block}.zE6uZW_panel[data-nf-theme=macos],body[data-ds-dark-theme] .zE6uZW_panel[data-nf-mode=light][data-nf-theme=macos]{--nf-bg:#f5f6f8eb;--nf-bg-raise:#ffffffc7;--nf-bg-inset:#7676801a;--nf-border:#3c3c4324;--nf-border-strong:#3c3c434d;--nf-text:#1d1d1f;--nf-text-2:#3a3a3c;--nf-text-2-alpha:#3a3a3cb3;--nf-text-3:#86868b;--nf-accent:#007aff;--nf-accent-hover:#0071e3;--nf-accent-soft:#007aff1f;--nf-accent-fg:#fff;--nf-hover:#0000000a;--nf-info:#5856d6;--nf-shadow:0 1px 3px #0000000d, 0 10px 28px #00000012;--nf-shadow-lg:0 4px 12px #0000000f, 0 18px 44px #0000001c;--nf-card-shadow:0 2px 6px #0000000d, 0 12px 34px #00000017;--nf-card-shadow-hover:0 4px 10px #00000012, 0 20px 48px #00000024;--nf-glass-face:#ffffffb3;--nf-glass-core:transparent;--nf-glass-sheen:#fffc;--nf-glass-border:#ffffffe6;--nf-glass-inset:#fff9;--nf-glass-orb-a:#007aff14;--nf-glass-orb-b:#5856d612;--nf-glass-noise:none;--nf-card-radius:12px;--nf-card-blur:42px;--nf-card-saturate:150%;--nf-card-border:1px solid var(--nf-border);--nf-card-sheen:#ffffff59;--nf-ctrl-radius:8px;--nf-ctrl-bg:var(--nf-bg-raise);--nf-ctrl-border:1px solid var(--nf-border-strong);--nf-ctrl-sheen:#ffffff59;--nf-ctrl-caret:var(--nf-accent)}.zE6uZW_panel[data-nf-mode=dark][data-nf-theme=macos],body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=macos]:not([data-nf-mode]){--nf-bg:#1c1c1ee6;--nf-bg-raise:#2c2c2ed1;--nf-bg-inset:#7676802e;--nf-border:#ffffff1f;--nf-border-strong:#ffffff42;--nf-text:#f5f5f7;--nf-text-2:#d1d1d6;--nf-text-2-alpha:#d1d1d6b3;--nf-text-3:#98989d;--nf-accent:#0a84ff;--nf-accent-hover:#3a9bff;--nf-accent-soft:#0a84ff33;--nf-accent-fg:#fff;--nf-hover:#ffffff0f;--nf-info:#bf5af2;--nf-shadow:0 1px 2px #0006, 0 10px 30px #00000073;--nf-shadow-lg:0 4px 12px #00000073, 0 18px 44px #0009;--nf-card-shadow:0 2px 6px #0006, 0 14px 38px #00000080;--nf-card-shadow-hover:0 4px 10px #00000073, 0 22px 52px #0009;--nf-glass-face:#2c2c2ed9;--nf-glass-core:transparent;--nf-glass-sheen:#fff3;--nf-glass-border:#ffffff2e;--nf-glass-inset:#ffffff0f;--nf-glass-orb-a:#0a84ff29;--nf-glass-orb-b:#bf5af214;--nf-glass-noise:none}.zE6uZW_panel[data-nf-theme=macos] .zE6uZW_button{border:1px solid var(--nf-border-strong);background:color-mix(in srgb, var(--nf-bg-raise) 82%, #fff);box-shadow:0 1px 1px #0000000a,inset 0 1px #fff9}.zE6uZW_panel[data-nf-theme=macos] .zE6uZW_buttonPrimary{background:linear-gradient(180deg, color-mix(in srgb, var(--nf-accent) 90%, #fff), var(--nf-accent));color:var(--nf-accent-fg);box-shadow:0 1px 3px color-mix(in srgb, var(--nf-accent) 45%, transparent), inset 0 1px 0 #ffffff59;border-color:#0000}.zE6uZW_panel[data-nf-theme=macos] .zE6uZW_input,.zE6uZW_panel[data-nf-theme=macos] .zE6uZW_textarea{border:1px solid var(--nf-border-strong);background:var(--nf-bg-raise)}.zE6uZW_panel[data-nf-theme=macos] .zE6uZW_input:focus,.zE6uZW_panel[data-nf-theme=macos] .zE6uZW_textarea:focus{border-color:var(--nf-accent);box-shadow:0 0 0 3px var(--nf-accent-soft)}.zE6uZW_panel[data-nf-theme=neumorph]{--nf-card-radius:20px;--nf-card-blur:0px;--nf-card-saturate:100%;--nf-card-border:none;--nf-card-sheen:#fff0;--nf-ctrl-radius:10px;--nf-ctrl-bg:var(--nf-bg-inset);--nf-ctrl-border:none;--nf-ctrl-sheen:#fff0;--nf-ctrl-caret:var(--nf-text-3);--nf-glass-bg-image:none}body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=neumorph]{--nf-bg:#e4e9f2;--nf-bg-raise:#e4e9f2;--nf-bg-inset:#d9dfe8;--nf-border:#8c9baf59;--nf-border-strong:#78879e80;--nf-text:#3a4250;--nf-text-2:#5b6472;--nf-text-2-alpha:#465060b3;--nf-text-3:#8b94a3;--nf-hover:#5a697d14;--nf-shadow:4px 4px 10px #a3b1c68c, -4px -4px 10px #ffffffd9;--nf-shadow-lg:6px 6px 14px #a3b1c699, -6px -6px 14px #ffffffe6;--nf-card-shadow:9px 9px 18px #a3b1c68c, -9px -9px 18px #ffffffd9;--nf-card-shadow-hover:12px 12px 24px #a3b1c6a6, -12px -12px 24px #fffffff2;--nf-glass-face:#e4e9f2;--nf-glass-core:transparent;--nf-glass-sheen:#fff0;--nf-glass-border:#a3b1c666;--nf-glass-inset:#d9dfe8;--nf-glass-orb-a:transparent;--nf-glass-orb-b:transparent;--nf-glass-noise:none}.zE6uZW_panel[data-nf-mode=dark][data-nf-theme=neumorph],body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=neumorph]:not([data-nf-mode]){--nf-bg:#2b2f36;--nf-bg-raise:#2b2f36;--nf-bg-inset:#25292f;--nf-border:#0a0c1080;--nf-border-strong:#080a0e99;--nf-text:#d6dae1;--nf-text-2:#a8aeb8;--nf-text-2-alpha:#a8aeb8b3;--nf-text-3:#757c88;--nf-hover:#ffffff0d;--nf-shadow:4px 4px 10px #00000080, -4px -4px 10px #6068763d;--nf-shadow-lg:6px 6px 14px #0000008c, -6px -6px 14px #60687642;--nf-card-shadow:9px 9px 18px #00000080, -9px -9px 18px #6068763d;--nf-card-shadow-hover:12px 12px 24px #0009, -12px -12px 24px #60687647;--nf-glass-face:#2b2f36;--nf-glass-core:transparent;--nf-glass-sheen:#fff0;--nf-glass-border:#0c0e1273;--nf-glass-inset:#25292f;--nf-glass-orb-a:transparent;--nf-glass-orb-b:transparent;--nf-glass-noise:none}.zE6uZW_panel[data-nf-theme=clay]{--nf-card-radius:28px;--nf-card-blur:0px;--nf-card-saturate:100%;--nf-card-brightness:1;--nf-card-border:1px solid #fff9;--nf-card-sheen:#ffffffd9;--nf-ctrl-radius:16px;--nf-ctrl-bg:var(--nf-bg-raise);--nf-ctrl-border:1px solid #ffffff8c;--nf-ctrl-sheen:#ffffffb3;--nf-ctrl-caret:var(--nf-accent);--nf-glass-bg-image:none}body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=clay],.zE6uZW_panel[data-nf-mode=light][data-nf-theme=clay]{--nf-bg:#f2eae0;--nf-bg-raise:#efe4d6;--nf-bg-inset:#e6d8c6;--nf-border:#78604829;--nf-border-strong:#78604847;--nf-text:#3a3330;--nf-text-2:#5a4f48;--nf-text-2-alpha:#5a4f48b3;--nf-text-3:#9a8c80;--nf-accent:#e08a5c;--nf-accent-hover:#d67a4a;--nf-accent-soft:#e08a5c29;--nf-accent-fg:#fff;--nf-hover:#78604814;--nf-success:#7fae6a;--nf-error:#c96b63;--nf-warn:#d9a660;--nf-info:#e08a5c;--nf-shadow:0 8px 16px -6px #5a463247, inset 0 6px 10px #ffffff8c, inset 0 -6px 10px #7860481f;--nf-shadow-lg:0 16px 28px -10px #5a463257, inset 0 6px 10px #ffffff8c, inset 0 -6px 10px #78604824;--nf-card-shadow:0 16px 28px -10px #5a463257, inset 0 -8px 12px #78604824, inset 0 8px 12px #fff9;--nf-card-shadow-hover:0 22px 36px -12px #5a463261, inset 0 -8px 12px #78604829, inset 0 8px 12px #ffffffb3;--nf-glass-face:#efe4d6;--nf-glass-core:transparent;--nf-glass-sheen:#ffffffd9;--nf-glass-border:#fff9;--nf-glass-inset:#e6d8c6;--nf-glass-orb-a:transparent;--nf-glass-orb-b:transparent;--nf-glass-noise:none}.zE6uZW_panel[data-nf-mode=dark][data-nf-theme=clay],body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=clay]:not([data-nf-mode]){--nf-bg:#2a2522;--nf-bg-raise:#37302b;--nf-bg-inset:#2f2925;--nf-border:#ffffff14;--nf-border-strong:#ffffff2e;--nf-text:#efe9e3;--nf-text-2:#c7beb5;--nf-text-2-alpha:#c7beb5b3;--nf-text-3:#8a8078;--nf-accent:#e69a6c;--nf-accent-hover:#f0ac82;--nf-accent-soft:#e69a6c33;--nf-accent-fg:#241b16;--nf-hover:#ffffff0f;--nf-success:#9cba82;--nf-error:#d98f86;--nf-warn:#d9a660;--nf-info:#e69a6c;--nf-shadow:0 8px 16px -6px #0000008c, inset 0 6px 10px #ffffff1f, inset 0 -6px 10px #00000059;--nf-shadow-lg:0 16px 28px -10px #0000009e, inset 0 6px 10px #ffffff1f, inset 0 -6px 10px #0006;--nf-card-shadow:0 16px 28px -10px #0000009e, inset 0 -8px 12px #0006, inset 0 8px 12px #ffffff24;--nf-card-shadow-hover:0 22px 36px -12px #000000ad, inset 0 -8px 12px #00000070, inset 0 8px 12px #ffffff2e;--nf-glass-face:#37302b;--nf-glass-core:transparent;--nf-glass-sheen:#ffffff29;--nf-glass-border:#ffffff29;--nf-glass-inset:#2f2925;--nf-glass-orb-a:transparent;--nf-glass-orb-b:transparent;--nf-glass-noise:none}.zE6uZW_panel[data-nf-theme=clay] .zE6uZW_input,.zE6uZW_panel[data-nf-theme=clay] .zE6uZW_textarea{background:var(--nf-bg-inset);border-color:var(--nf-border-strong);box-shadow:inset 3px 3px 7px #78604824,inset -3px -3px 7px #ffffff80}body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=clay] .zE6uZW_button{background:linear-gradient(#f6ecdf,#eee0cf);border-color:#fff9;box-shadow:0 8px 16px -6px #5a463259,inset 0 3px 4px #fffc,inset 0 -3px 5px #78604833}body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=clay] .zE6uZW_button:hover:not([disabled]){box-shadow:0 12px 22px -8px #5a46326b,inset 0 3px 4px #ffffffd9,inset 0 -3px 5px #78604838}body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=clay] .zE6uZW_buttonPrimary{color:var(--nf-accent-fg);background:linear-gradient(#eda178,#e08a5c);border-color:#0000;box-shadow:0 8px 16px -6px #e08a5c8c,inset 0 3px 4px #ffffff80,inset 0 -3px 5px #9646284d}.zE6uZW_panel[data-nf-mode=dark][data-nf-theme=clay] .zE6uZW_button,body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=clay]:not([data-nf-mode]) .zE6uZW_button{background:linear-gradient(#403731,#332c27);border-color:#ffffff29;box-shadow:0 8px 16px -6px #0000008c,inset 0 3px 4px #ffffff24,inset 0 -3px 5px #0006}.zE6uZW_panel[data-nf-mode=dark][data-nf-theme=clay] .zE6uZW_button:hover:not([disabled]),body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=clay]:not([data-nf-mode]) .zE6uZW_button:hover:not([disabled]){box-shadow:0 12px 22px -8px #0009,inset 0 3px 4px #ffffff29,inset 0 -3px 5px #00000070}.zE6uZW_panel[data-nf-mode=dark][data-nf-theme=clay] .zE6uZW_buttonPrimary,body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=clay]:not([data-nf-mode]) .zE6uZW_buttonPrimary{color:var(--nf-accent-fg);background:linear-gradient(#f0ac82,#d67a4a);border-color:#0000;box-shadow:0 8px 16px -6px #e69a6c80,inset 0 3px 4px #fff6,inset 0 -3px 5px #7832144d}.zE6uZW_panel[data-nf-mode=dark][data-nf-theme=clay] .zE6uZW_input,.zE6uZW_panel[data-nf-mode=dark][data-nf-theme=clay] .zE6uZW_textarea,body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=clay]:not([data-nf-mode]) .zE6uZW_input,body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=clay]:not([data-nf-mode]) .zE6uZW_textarea{box-shadow:inset 3px 3px 7px #00000073,inset -3px -3px 7px #ffffff14}body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_input,body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_textarea{background:var(--nf-bg-inset);border-color:#0000;box-shadow:inset 3px 3px 7px #a3b1c68c,inset -3px -3px 7px #ffffffe6}body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_input:focus,body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_textarea:focus{border-color:var(--nf-accent);box-shadow:inset 2px 2px 6px #a3b1c680, inset -2px -2px 6px #ffffffd9, 0 0 0 3px var(--nf-accent-soft)}body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_input,body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_textarea{background:var(--nf-bg-inset);border-color:#0000;box-shadow:inset 3px 3px 7px #0000008c,inset -3px -3px 7px #6068763d}body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_input:focus,body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_textarea:focus{border-color:var(--nf-accent);box-shadow:inset 2px 2px 6px #00000080, inset -2px -2px 6px #60687638, 0 0 0 3px var(--nf-accent-soft)}body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_button{background:var(--nf-bg-raise);border-color:#0000;box-shadow:5px 5px 10px #a3b1c68c,-5px -5px 10px #ffffffe6}body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_button:hover:not([disabled]){background:var(--nf-bg-raise);border-color:#0000;box-shadow:7px 7px 14px #a3b1c699,-7px -7px 14px #fffffff2}body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_button:active:not([disabled]){box-shadow:inset 3px 3px 7px #a3b1c68c,inset -3px -3px 7px #ffffffe6}body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_buttonPrimary{background:linear-gradient(#00c563,#00a952);box-shadow:5px 5px 10px #a3b1c699,-5px -5px 10px #ffffffd9}body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_button{background:var(--nf-bg-raise);border-color:#0000;box-shadow:5px 5px 10px #00000080,-5px -5px 10px #6068763d}body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_button:hover:not([disabled]){background:var(--nf-bg-raise);border-color:#0000;box-shadow:7px 7px 14px #0000008c,-7px -7px 14px #60687642}body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_button:active:not([disabled]){box-shadow:inset 3px 3px 7px #0000008c,inset -3px -3px 7px #6068763d}body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_buttonPrimary{background:linear-gradient(#3ddc86,#27b96a);box-shadow:5px 5px 10px #00000080,-5px -5px 10px #6068763d}.zE6uZW_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}.zE6uZW_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, radial-gradient(46% 36% at 18% 12%, var(--nf-glass-orb-a), transparent 70%), radial-gradient(52% 42% at 88% 22%, var(--nf-glass-orb-b), transparent 72%), radial-gradient(120% 95% at 50% 42%, transparent 55%, #0202031a 100%);position:absolute;inset:0}.zE6uZW_panel[data-nf-theme=macos]{--nf-glass-bg-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='1600' height='1000'%3E%3Cdefs%3E%3Cfilter id='b' x='-20%25' y='-20%25' width='140%25' height='140%25'%3E%3CfeGaussianBlur stdDeviation='140'/%3E%3C/filter%3E%3C/defs%3E%3Cg filter='url(%23b)'%3E%3Ccircle cx='320' cy='220' r='320' fill='%230a84ff' fill-opacity='0.34'/%3E%3Ccircle cx='1180' cy='320' r='360' fill='%237f5af0' fill-opacity='0.30'/%3E%3Ccircle cx='920' cy='820' r='380' fill='%2340cfc0' fill-opacity='0.26'/%3E%3Ccircle cx='1460' cy='820' r='260' fill='%23ff9fb0' fill-opacity='0.18'/%3E%3C/g%3E%3C/svg%3E\")}.zE6uZW_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}.zE6uZW_panelTitle:before{content:\"\";border-radius:var(--nf-radius-2,2px);background:linear-gradient(180deg, var(--nf-accent), var(--nf-info));width:4px;height:16px}.zE6uZW_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);background:0 0;border:none;transition:background .15s,color .15s,transform .1s}.zE6uZW_iconButton:hover{background:var(--nf-hover);color:var(--nf-text);transform:translateY(-1px)}.zE6uZW_tabBar{gap:var(--nf-space-2,2px);padding:var(--nf-space-8,8px) var(--nf-space-14,14px) 0;border-bottom:1px solid var(--nf-border);background:var(--nf-bg-raise);z-index:4;flex-shrink:0;display:flex;position:sticky;top:45px}.zE6uZW_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);background:0 0;border:none;font-weight:500;transition:color .15s,background .15s;position:relative}.zE6uZW_tab:hover{color:var(--nf-text);background:var(--nf-hover)}.zE6uZW_tab[data-active]{color:var(--nf-accent);font-weight:600}.zE6uZW_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}.zE6uZW_panelContent{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}.zE6uZW_panelBody{z-index:1;flex:1;min-height:0;display:flex;position:relative}.zE6uZW_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);backdrop-filter:blur(28px)saturate(175%);flex-direction:column;flex:none;margin:10px 0 10px 12px;transition:width .18s;display:flex;overflow-y:auto}.zE6uZW_panelNavCollapsed{width:52px;padding:var(--nf-space-10,10px) var(--nf-space-6,6px)}.zE6uZW_navGroup{gap:var(--nf-space-6,6px);flex-direction:column;display:flex}.zE6uZW_navGroupLabel{font-size:var(--nf-fs-12,12px);letter-spacing:.8px;text-transform:uppercase;color:var(--nf-text-3);padding:var(--nf-space-12,12px) var(--nf-space-10,10px) var(--nf-space-6,6px);user-select:none;font-weight:600}.zE6uZW_navGroupSep{background:var(--nf-border);height:1px;margin:6px 8px 4px}.zE6uZW_navSpacer{flex:1;min-height:8px}.zE6uZW_navAbout{gap:var(--nf-space-4,4px);padding:var(--nf-space-8,8px) var(--nf-space-6,6px) var(--nf-space-4,4px);border-top:1px solid var(--nf-border);flex-direction:column;flex:none;margin-top:4px;display:flex}.zE6uZW_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);text-align:left;white-space:nowrap;background:0 0;border:none;transition:color .15s,background .15s;display:flex}.zE6uZW_navAboutRow:hover{color:var(--nf-text);background:var(--nf-hover)}.zE6uZW_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}.zE6uZW_navAboutUpdate:hover{color:var(--nf-accent-hover)}.zE6uZW_panelNavCollapsed .zE6uZW_navAbout{padding:var(--nf-space-6,6px) var(--nf-space-2,2px) var(--nf-space-2,2px);align-items:center}.zE6uZW_panelNavCollapsed .zE6uZW_navAboutRow{padding:var(--nf-space-4,4px) 0;justify-content:center;width:100%}.zE6uZW_navTabBadge{min-width:18px;height:18px;padding:0 var(--nf-space-6,5px);border-radius:var(--nf-radius-999,999px);background:var(--nf-accent);color:#fff;font-size:var(--nf-fs-12,10.5px);text-align:center;flex:none;margin-left:auto;font-weight:700;line-height:18px;display:inline-block}.zE6uZW_panelNavCollapsed .zE6uZW_navTabBadge{min-width:18px;height:18px;line-height:18px;font-size:var(--nf-fs-12,9px);padding:0 var(--nf-space-6,5px);position:absolute;top:2px;right:2px}.zE6uZW_navTabBadgeDanger{background:var(--nf-error)}.zE6uZW_navTabBadgeWarn{background:var(--nf-warn)}.zE6uZW_navTabBadgeDone{background:var(--nf-success)}.zE6uZW_navTabBadgeLive{background:var(--nf-success);animation:1.2s ease-in-out infinite zE6uZW_navBadgePulse}.zE6uZW_navTabDot{width:7px;height:7px;margin-left:var(--nf-space-4,4px);background:var(--nf-success);border-radius:50%;animation:1.2s ease-in-out infinite zE6uZW_navBadgePulse;display:inline-block}@keyframes zE6uZW_navBadgePulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.8)}}.zE6uZW_navTab{align-items:center;gap:var(--nf-space-10,10px);cursor:pointer;border-radius:var(--nf-radius-10,10px);width:100%;padding:var(--nf-space-12,11px) var(--nf-space-12,12px);font-size:var(--nf-fs-14,14px);color:var(--nf-text-2-alpha,var(--nf-text-2));text-align:left;white-space:nowrap;background:0 0;border:1px solid #0000;font-weight:500;transition:color .15s,background .15s,border-color .15s,box-shadow .15s;display:flex;position:relative}.zE6uZW_panelNavCollapsed .zE6uZW_navTab{padding:var(--nf-space-8,8px) 0;justify-content:center}.zE6uZW_navTab:hover{color:var(--nf-text);background:var(--nf-hover)}.zE6uZW_navTab[data-active]{color:var(--nf-accent);background:color-mix(in srgb, var(--nf-text) 8%, transparent);border-color:color-mix(in srgb, var(--nf-text) 16%, transparent);box-shadow:inset 0 1px 0 color-mix(in srgb, var(--nf-text) 6%, transparent);font-weight:600}.zE6uZW_navTab[data-active] .zE6uZW_navTabIcon{color:var(--nf-accent)}.zE6uZW_navTabIcon{text-align:center;width:22px;height:22px;font-size:var(--nf-fs-16,17px);flex:none;justify-content:center;align-items:center;line-height:1;display:inline-flex}.zE6uZW_navTabLabel{text-overflow:ellipsis;overflow:hidden}.zE6uZW_navTitle{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}.zE6uZW_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}.zE6uZW_navTitleName{font-weight:700;font-size:var(--nf-fs-14,15px);letter-spacing:.2px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.zE6uZW_navTitleBook{font-size:var(--nf-fs-12,11px);color:var(--nf-text-3);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.zE6uZW_panelNavCollapsed .zE6uZW_navTitle{padding:var(--nf-space-2,2px) 0 var(--nf-space-10,10px);justify-content:center}.zE6uZW_panelNavCollapsed .zE6uZW_navTitleLogo{width:32px;height:var(--nf-ctrl-m,32px)}.zE6uZW_navActions{gap:var(--nf-space-6,6px);padding-top:var(--nf-space-8,8px);border-top:1px solid var(--nf-border);flex:none;margin-top:8px;display:flex}.zE6uZW_navActionBtn{border:1px solid var(--nf-border);color:var(--nf-text-2);cursor:pointer;border-radius:var(--nf-radius-10,10px);height:var(--nf-ctrl-m,32px);font-size:var(--nf-fs-14,14px);background:0 0;flex:1;justify-content:center;align-items:center;line-height:1;transition:background .15s,color .15s,border-color .15s;display:inline-flex}.zE6uZW_navActionBtn:hover{background:var(--nf-hover);color:var(--nf-text);border-color:var(--nf-border-strong)}.zE6uZW_panelNavCollapsed .zE6uZW_navActions{flex-direction:column;align-items:stretch}.zE6uZW_bookSwitch{align-items:center;gap:var(--nf-space-8,8px);padding:var(--nf-space-10,9px);border-radius:var(--nf-radius-12,12px);background:var(--nf-bg-inset);border:1px solid var(--nf-border);cursor:pointer;text-align:left;font:inherit;color:var(--nf-text);flex:none;min-width:0;margin-top:4px;transition:background .15s,border-color .15s;display:flex}.zE6uZW_bookSwitch:hover{background:var(--nf-hover);border-color:var(--nf-border-strong)}.zE6uZW_bookSwitchCover{border-radius:var(--nf-radius-6,5px);background:linear-gradient(160deg, var(--nf-accent), color-mix(in srgb, var(--nf-accent) 45%, #000));width:26px;height:34px;color:var(--nf-accent-fg);font-size:var(--nf-fs-12,11px);flex:none;justify-content:center;align-items:center;font-weight:700;display:flex}.zE6uZW_bookSwitchName{font-size:var(--nf-fs-12,12.5px);text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.zE6uZW_bookSwitchMeta{font-size:var(--nf-fs-12,11px);color:var(--nf-text-3);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.zE6uZW_bookSwitchArrow{color:var(--nf-text-3);font-size:var(--nf-fs-12,12px);flex:none;margin-left:auto}.zE6uZW_statRowD{gap:var(--nf-space-12,12px);grid-template-columns:repeat(auto-fit,minmax(150px,1fr));display:grid}.zE6uZW_statCardD{justify-content:space-between;align-items:flex-start;gap:var(--nf-space-10,10px);padding:var(--nf-space-14,14px) var(--nf-space-16,16px);border-radius:var(--nf-radius-16,16px);background:var(--nf-bg-inset);border:1px solid var(--nf-border);min-width:0;display:flex}.zE6uZW_statCardDLabel{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3)}.zE6uZW_statCardDValue{font-size:var(--nf-fs-22,22px);color:var(--nf-text);margin-top:2px;font-weight:700}.zE6uZW_statCardDUnit{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);font-weight:400}.zE6uZW_statCardDDetail{font-size:var(--nf-fs-12,11.5px);color:var(--nf-text-3);text-overflow:ellipsis;white-space:nowrap;margin-top:2px;overflow:hidden}.zE6uZW_statCardDDown{color:var(--nf-error)}.zE6uZW_statCardDIcon{width:38px;height:var(--nf-ctrl-l,38px);border-radius:var(--nf-radius-12,12px);font-size:var(--nf-fs-18,18px);background:var(--nf-accent-soft);flex:none;justify-content:center;align-items:center;display:flex}.zE6uZW_statCardDIconRed{background:color-mix(in srgb, var(--nf-error) 13%, transparent)}.zE6uZW_tlBar{gap:var(--nf-space-6,6px);margin-top:8px;display:flex}.zE6uZW_tlSeg{gap:var(--nf-space-4,4px);cursor:pointer;min-width:0;font:inherit;background:0 0;border:none;flex-direction:column;flex:1;padding:0;display:flex}.zE6uZW_tlSegTrack{border-radius:var(--nf-radius-999,999px);background:var(--nf-hover);border:1px solid var(--nf-border);height:8px;overflow:hidden}.zE6uZW_tlSegFill{border-radius:var(--nf-radius-999,999px);background:var(--nf-accent);width:100%;height:100%;display:block}.zE6uZW_tlSegTodo .zE6uZW_tlSegFill{opacity:0}.zE6uZW_tlSegTodo .zE6uZW_tlSegTrack{background:0 0}.zE6uZW_tlSegCurrent .zE6uZW_tlSegTrack{border-color:var(--nf-accent);box-shadow:0 0 0 2px var(--nf-accent-soft)}.zE6uZW_tlSegCurrent .zE6uZW_tlSegFill{opacity:.45}.zE6uZW_tlSegLabel{font-size:var(--nf-fs-12,10.5px);color:var(--nf-text-3);text-align:center;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.zE6uZW_tlSegDone .zE6uZW_tlSegLabel{color:var(--nf-accent);font-weight:600}.zE6uZW_tlSeg:hover .zE6uZW_tlSegTrack{border-color:var(--nf-border-strong)}.zE6uZW_card{border:var(--nf-card-border,1px solid var(--nf-glass-border));border-radius:var(--nf-card-radius,22px);padding:var(--nf-card-pad,20px 22px);gap:var(--nf-space-10,10px);background:var(--nf-glass-face);box-shadow:var(--nf-card-shadow), inset 0 1.5px 0 var(--nf-card-sheen,var(--nf-glass-sheen)), inset 0 -1px 0 #ffffff1a;backdrop-filter:blur(var(--nf-card-blur,30px)) saturate(var(--nf-card-saturate,180%)) brightness(var(--nf-card-brightness,1.06));flex-direction:column;transition:transform .22s,box-shadow .22s;display:flex;position:relative}.zE6uZW_card:before{content:\"\";border-radius:inherit;pointer-events:none;background:var(--nf-glass-core), linear-gradient(90deg, transparent, var(--nf-card-sheen,var(--nf-glass-sheen)), transparent) no-repeat 10% 0 / 80% 1px, linear-gradient(156deg, #ffffff42 0%, #fff0 55%);z-index:0;position:absolute;inset:0}.zE6uZW_card:after{content:\"\";border-radius:inherit;pointer-events:none;background:var(--nf-glass-noise);opacity:.06;z-index:0;position:absolute;inset:0}.zE6uZW_card:hover{box-shadow:var(--nf-card-shadow-hover), inset 0 1.5px 0 var(--nf-card-sheen,var(--nf-glass-sheen)), inset 0 -1px 0 #ffffff40;transform:translateY(-3px)}.zE6uZW_card>*{z-index:1;position:relative}.zE6uZW_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}.zE6uZW_button{border:1px solid var(--nf-ctrl-border,var(--nf-border-strong));background:var(--nf-ctrl-bg,var(--nf-bg-inset));color:var(--nf-text);padding:var(--nf-space-8,7px) var(--nf-space-16,15px);border-radius:var(--nf-ctrl-radius,10px);cursor:pointer;font-size:var(--nf-fs-14,13px);box-shadow:inset 0 1px 0 var(--nf-ctrl-sheen,#ffffff17);white-space:nowrap;font-weight:500;transition:background .15s,border-color .15s,transform .1s,box-shadow .15s}.zE6uZW_button:hover:not([disabled]){background:var(--nf-hover);border-color:var(--nf-border-strong);transform:translateY(-1px)}.zE6uZW_button:active:not([disabled]){transform:translateY(0)scale(.97)}.zE6uZW_button[disabled]{opacity:.45;cursor:not-allowed}.zE6uZW_buttonPrimary{background:linear-gradient(180deg, color-mix(in srgb, var(--nf-accent) 88%, #fff), var(--nf-accent));color:var(--nf-accent-fg);border-radius:var(--nf-radius-10,10px);box-shadow:0 2px 10px color-mix(in srgb, var(--nf-accent) 45%, transparent), 0 0 0 .5px color-mix(in srgb, var(--nf-accent) 30%, transparent), inset 0 1px 0 #ffffff73;border-color:#0000}.zE6uZW_buttonPrimary:hover:not([disabled]){background:linear-gradient(180deg, var(--nf-accent-hover), color-mix(in srgb, var(--nf-accent-hover) 85%, #000));box-shadow:0 12px 30px color-mix(in srgb, var(--nf-accent) 50%, transparent), 0 0 0 .5px color-mix(in srgb, var(--nf-accent) 30%, transparent), inset 0 1px 0 #ffffff73;border-color:#0000;transform:translateY(-1px)}.zE6uZW_buttonDanger{border-color:var(--nf-error);color:var(--nf-error)}.zE6uZW_buttonDanger:hover:not([disabled]){background:#ff3b301a}.zE6uZW_buttonSmall{padding:var(--nf-space-4,4px) var(--nf-space-10,10px);font-size:var(--nf-fs-12,12px);border-radius:var(--nf-ctrl-radius,8px)}.zE6uZW_field{gap:var(--nf-space-6,5px);flex-direction:column;display:flex}.zE6uZW_fieldLabel{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);font-weight:500}.zE6uZW_input{border:var(--nf-ctrl-border,1px solid var(--nf-border-strong));background:var(--nf-ctrl-bg,var(--nf-bg-inset));color:var(--nf-text);color-scheme:light;border-radius:var(--nf-ctrl-radius,12px);padding:var(--nf-space-8,7px) var(--nf-space-12,11px);font-size:var(--nf-fs-14,13px);box-sizing:border-box;width:100%;box-shadow:inset 0 1px 0 var(--nf-ctrl-sheen,#ffffff17);transition:border-color .15s,box-shadow .15s}body[data-ds-dark-theme] .zE6uZW_input,.zE6uZW_panel[data-nf-mode=dark] .zE6uZW_input{color-scheme:dark}.zE6uZW_panel[data-nf-mode=light] .zE6uZW_input,body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=neumorph] .zE6uZW_input{color-scheme:light}select.zE6uZW_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}.zE6uZW_input option{color:var(--nf-text);background:var(--nf-bg-raise);font-size:var(--nf-fs-14,15px)}.zE6uZW_input:focus,.zE6uZW_textarea:focus{border-color:var(--nf-accent);box-shadow:0 0 0 3px var(--nf-accent-soft);outline:none}.zE6uZW_input::placeholder,.zE6uZW_textarea::placeholder{color:var(--nf-text-3)}.zE6uZW_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;font-family:inherit;line-height:1.7;transition:border-color .15s,box-shadow .15s}.zE6uZW_row{align-items:center;gap:var(--nf-space-8,8px);flex-wrap:wrap;display:flex}.zE6uZW_spaceBetween{justify-content:space-between}.zE6uZW_chapterList{gap:var(--nf-space-8,8px);flex-direction:column;display:flex}.zE6uZW_volumeGroup{gap:var(--nf-space-6,6px);flex-direction:column;display:flex}.zE6uZW_volumeGroupHeader{align-items:center;gap:var(--nf-space-8,8px);padding:var(--nf-space-6,6px) var(--nf-space-10,10px);border-radius:var(--nf-radius-10,10px);background:var(--nf-bg-inset);border:1px solid var(--nf-border);cursor:pointer;user-select:none;font-size:var(--nf-fs-14,13px);transition:border-color .15s;display:flex}.zE6uZW_volumeGroupHeader:hover{border-color:var(--nf-accent)}.zE6uZW_volumeGroupToggle{font-size:var(--nf-fs-12,11px);color:var(--nf-text-2);flex:none}.zE6uZW_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 .15s,box-shadow .15s,transform .1s;display:flex}.zE6uZW_chapter:hover{border-color:var(--nf-border-strong);box-shadow:var(--nf-shadow)}.zE6uZW_chapterFocus{animation:.9s ease-in-out 3 zE6uZW_chapterFocusPulse;border-color:var(--nf-accent)!important;box-shadow:0 0 0 3px color-mix(in srgb, var(--nf-accent) 35%, transparent)!important}@keyframes zE6uZW_chapterFocusPulse{0%,to{background:var(--nf-bg)}50%{background:color-mix(in srgb, var(--nf-accent) 18%, var(--nf-bg))}}.zE6uZW_chapterNum{min-width:28px;height:var(--nf-ctrl-s,28px);padding:0 var(--nf-space-8,8px);border-radius:var(--nf-radius-8,8px);background:var(--nf-bg-inset);border:1px solid var(--nf-border);font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);flex-shrink:0;justify-content:center;align-items:center;font-weight:700;display:inline-flex}.zE6uZW_chapterMain{flex:1;min-width:0}.zE6uZW_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}.zE6uZW_chapterBeats{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);opacity:.85;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.zE6uZW_chapterActions{gap:var(--nf-space-4,4px);opacity:.85;flex-shrink:0;transition:opacity .15s;display:flex}.zE6uZW_chapter:hover .zE6uZW_chapterActions{opacity:1}.zE6uZW_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}.zE6uZW_badgePending{color:var(--nf-info);border-color:var(--nf-info);background:color-mix(in srgb, var(--nf-info) 10%, transparent)}.zE6uZW_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 zE6uZW_pulse}.zE6uZW_badgeWritten{color:var(--nf-warn);border-color:var(--nf-warn);background:color-mix(in srgb, var(--nf-warn) 10%, transparent)}.zE6uZW_badgeRejected{color:var(--nf-error);border-color:var(--nf-error);background:color-mix(in srgb, var(--nf-error) 10%, transparent)}.zE6uZW_badgeDone{color:var(--nf-success);border-color:var(--nf-success);background:color-mix(in srgb, var(--nf-success) 10%, transparent)}.zE6uZW_badgeError{color:var(--nf-error);border-color:var(--nf-error);background:color-mix(in srgb, var(--nf-error) 10%, transparent)}.zE6uZW_reviewBox{border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);padding:var(--nf-space-10,10px) var(--nf-space-12,12px);background:var(--nf-bg-inset);gap:var(--nf-space-6,6px);font-size:var(--nf-fs-12,12.5px);flex-direction:column;display:flex}.zE6uZW_chapterPreview{white-space:pre-wrap;word-break:break-all;max-height:320px;font-size:var(--nf-fs-12,12.5px);color:var(--nf-text);background:var(--nf-bg-inset);border:1px solid var(--nf-border);border-radius:var(--nf-radius-10,10px);padding:var(--nf-space-10,10px) var(--nf-space-12,12px);margin:0;font-family:inherit;line-height:1.8;overflow:auto}.zE6uZW_chatScroll{gap:var(--nf-space-10,10px);min-height:240px;max-height:480px;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}.zE6uZW_chatBubbleUser{background:linear-gradient(180deg, var(--nf-accent), var(--nf-accent-hover));max-width:90%;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);align-self:flex-end;box-shadow:0 2px 6px #4d6bfe33}.zE6uZW_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}.zE6uZW_chatRole{font-size:var(--nf-fs-12,11px);color:var(--nf-text-3);margin-bottom:3px;font-weight:600}.zE6uZW_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}.zE6uZW_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}.zE6uZW_assistantStatusBusy{color:var(--nf-accent);border-color:var(--nf-accent);background:var(--nf-accent-soft);font-weight:600}.zE6uZW_toolSteps{gap:var(--nf-space-4,4px);flex-direction:column;margin-top:6px;display:flex}.zE6uZW_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}.zE6uZW_toolStepActive{border-color:var(--nf-accent);background:var(--nf-accent-soft)}.zE6uZW_toolStepError{border-color:var(--nf-error);background:color-mix(in srgb, var(--nf-error) 8%, transparent)}.zE6uZW_toolStepIcon{font-size:var(--nf-fs-14,13px);flex:none}.zE6uZW_toolStepName{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-weight:600;overflow:hidden}.zE6uZW_toolStepStatus{color:var(--nf-text-2);font-size:var(--nf-fs-12,11px);flex:none}.zE6uZW_toolStepActive .zE6uZW_toolStepStatus{color:var(--nf-accent)}.zE6uZW_toolStepError .zE6uZW_toolStepStatus{color:var(--nf-error)}.zE6uZW_toolStepDetail{width:100%;color:var(--nf-error);font-size:var(--nf-fs-12,11px);word-break:break-all}.zE6uZW_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}.zE6uZW_progressLine{color:var(--nf-text-2);opacity:.9}.zE6uZW_progressLineLive{color:var(--nf-accent);align-items:center;gap:var(--nf-space-8,8px);font-weight:600;display:flex}.zE6uZW_progressBar{border-radius:var(--nf-radius-999,999px);background:var(--nf-border);flex:none;width:110px;height:6px;display:inline-block;overflow:hidden}.zE6uZW_progressBarFill{border-radius:var(--nf-radius-4,3px);background:var(--nf-accent);height:100%;transition:width .3s;display:block}.zE6uZW_busyRow{justify-content:space-between;align-items:center;gap:var(--nf-space-12,12px);flex-wrap:wrap;display:flex}.zE6uZW_liveText{font-size:var(--nf-fs-12,12px);font-variant-numeric:tabular-nums;color:var(--nf-text-2)}.zE6uZW_bigProgressBar{border-radius:var(--nf-radius-999,999px);background:var(--nf-border);height:8px;margin-top:10px;overflow:hidden}.zE6uZW_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 .3s;display:block}.zE6uZW_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}.zE6uZW_legendOld{color:var(--nf-error);font-weight:700}.zE6uZW_legendNew{color:var(--nf-success);font-weight:700}.zE6uZW_onlyChanges{align-items:center;gap:var(--nf-space-4,4px);color:var(--nf-text-2);cursor:pointer;margin-left:auto;display:inline-flex}.zE6uZW_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}.zE6uZW_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}.zE6uZW_diffSame summary{cursor:pointer;font-size:var(--nf-fs-12,12px);user-select:none}.zE6uZW_diffSameBody{white-space:pre-wrap;margin-top:6px}.zE6uZW_diffChange{border:1px solid var(--nf-border);border-radius:var(--nf-radius-8,8px);grid-template-columns:1fr 1fr;display:grid;overflow:hidden}.zE6uZW_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}.zE6uZW_diffColumn:first-child{border-right:1px solid var(--nf-border)}.zE6uZW_diffTagOld,.zE6uZW_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}.zE6uZW_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)}.zE6uZW_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)}.zE6uZW_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)}.zE6uZW_diffNew{color:var(--nf-success);white-space:pre-wrap;font-weight:500}.zE6uZW_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}.zE6uZW_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}.zE6uZW_diffText{white-space:pre-wrap}.zE6uZW_diffDel .zE6uZW_diffText{color:var(--nf-error);text-decoration:line-through;text-decoration-color:color-mix(in srgb, var(--nf-error) 50%, transparent)}.zE6uZW_diffAdd .zE6uZW_diffText{color:var(--nf-success)}.zE6uZW_wsPage{gap:var(--nf-space-10,10px);flex-direction:column;flex:1;min-height:0;display:flex}.zE6uZW_wsPageHeader{align-items:center;gap:var(--nf-space-8,8px);flex-wrap:wrap;flex:none;display:flex}.zE6uZW_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}.zE6uZW_wsColumns{gap:var(--nf-space-14,14px);flex:1;grid-template-columns:minmax(0,1fr) minmax(0,1fr);min-height:0;display:grid}.zE6uZW_wsColumn{gap:var(--nf-space-8,8px);flex-direction:column;min-width:0;min-height:0;display:flex}.zE6uZW_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}.zE6uZW_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}.zE6uZW_wsSelectedText{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);white-space:pre-wrap;margin-top:4px}.zE6uZW_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}.zE6uZW_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}.zE6uZW_assetGrid{gap:var(--nf-space-10,10px);grid-template-columns:repeat(auto-fit,minmax(150px,1fr));display:grid}.zE6uZW_assetGroups{gap:var(--nf-space-14,14px);flex-direction:column;display:flex}.zE6uZW_assetGroup{gap:var(--nf-space-10,10px);flex-direction:column;display:flex}.zE6uZW_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}.zE6uZW_assetStat{border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-14,14px);padding:var(--nf-space-10,10px) var(--nf-space-12,12px);gap:var(--nf-space-4,4px);background:var(--nf-glass-face);box-shadow:var(--nf-card-shadow), inset 0 1px 0 var(--nf-glass-sheen);backdrop-filter:blur(30px)saturate(180%);flex-direction:column;transition:transform .22s,box-shadow .22s;display:flex}.zE6uZW_assetStat:hover{box-shadow:var(--nf-card-shadow-hover), inset 0 1px 0 var(--nf-glass-sheen);transform:translateY(-3px)}.zE6uZW_assetStatLabel{font-size:var(--nf-fs-12,11px);color:var(--nf-text-2);opacity:.9}.zE6uZW_assetStatValue{font-size:var(--nf-fs-14,15px);color:var(--nf-text);font-weight:700;line-height:1.2}.zE6uZW_assetStatDetail{font-size:var(--nf-fs-12,11px);color:var(--nf-text-2);opacity:.85;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.zE6uZW_dashHero{border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-22,22px);padding:var(--nf-card-pad,20px 22px);background:var(--nf-glass-face);box-shadow:var(--nf-card-shadow), inset 0 1.5px 0 var(--nf-glass-sheen), inset 0 -1px 0 #ffffff40;backdrop-filter:blur(30px)saturate(180%);gap:var(--nf-space-14,14px);flex-direction:column;transition:transform .22s,box-shadow .22s;display:flex;position:relative}.zE6uZW_dashHero:before{content:\"\";border-radius:inherit;pointer-events:none;background:radial-gradient(46% 40% at 92% -10%, color-mix(in srgb, var(--nf-accent) 13%, transparent), transparent 62%), var(--nf-glass-core), linear-gradient(90deg, transparent, var(--nf-glass-sheen), transparent) no-repeat 10% 0 / 80% 1px, linear-gradient(156deg, #ffffff42 0%, #fff0 55%);z-index:0;position:absolute;inset:0}.zE6uZW_dashHero:after{content:\"\";border-radius:inherit;pointer-events:none;background:var(--nf-glass-noise);opacity:.06;z-index:0;position:absolute;inset:0}.zE6uZW_dashHero:hover{box-shadow:var(--nf-card-shadow-hover), inset 0 1.5px 0 var(--nf-glass-sheen), inset 0 -1px 0 #ffffff40;transform:translateY(-3px)}.zE6uZW_dashHero>*{z-index:1;position:relative}.zE6uZW_dashHeroEyebrow{align-items:center;gap:var(--nf-space-6,6px);font-size:var(--nf-fs-14,13px);color:var(--nf-accent);font-weight:600;display:inline-flex}.zE6uZW_dashHeroSparkle{font-size:var(--nf-fs-14,14px)}.zE6uZW_dashHeroTitle{gap:var(--nf-space-2,2px);flex-direction:column;display:flex}.zE6uZW_dashHeroBook{font-size:var(--nf-fs-24,24px);letter-spacing:-.3px;margin:0;font-weight:700;line-height:1.25}.zE6uZW_dashHeroAction{align-items:center;gap:var(--nf-space-12,12px);border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-14,14px);background:var(--nf-glass-inset);box-shadow:inset 0 1px 0 var(--nf-glass-sheen);padding:var(--nf-space-10,10px) var(--nf-space-14,14px);display:flex}.zE6uZW_dashHeroArrow{width:28px;height:var(--nf-ctrl-s,28px);background:var(--nf-accent);color:#fff;font-size:var(--nf-fs-14,14px);border-radius:50%;flex:none;justify-content:center;align-items:center;display:inline-flex}.zE6uZW_dashHeroActionBody{gap:var(--nf-space-2,2px);flex-direction:column;flex:1;min-width:0;display:flex}.zE6uZW_dashHeroActionTitle{font-size:var(--nf-fs-14,14px);font-weight:600}.zE6uZW_dashJourney{gap:var(--nf-space-6,6px);flex-direction:column;display:flex}.zE6uZW_dashJourneyBar{border-radius:var(--nf-radius-999,999px);background:var(--nf-border);height:6px;overflow:hidden}.zE6uZW_dashJourneyFill{border-radius:var(--nf-radius-999,999px);background:linear-gradient(90deg, var(--nf-info), var(--nf-accent));height:100%;transition:width .4s;display:block}.zE6uZW_dashJourneyStages{gap:var(--nf-space-4,4px);grid-template-columns:repeat(6,minmax(0,1fr));display:grid}.zE6uZW_dashStage{align-items:center;gap:var(--nf-space-4,3px);font-size:var(--nf-fs-12,11px);color:var(--nf-text-3);text-align:center;white-space:nowrap;flex-direction:column;display:flex}.zE6uZW_dashStageDot{border:1px solid var(--nf-border-strong,var(--nf-text-3));width:18px;height:18px;font-size:var(--nf-fs-12,10px);background:var(--nf-bg-base);border-radius:50%;justify-content:center;align-items:center;display:inline-flex}.zE6uZW_dashStageDone{color:var(--nf-text-2)}.zE6uZW_dashStageDone .zE6uZW_dashStageDot{background:var(--nf-success);border-color:var(--nf-success);color:#fff}.zE6uZW_dashStageCurrent{color:var(--nf-accent);font-weight:600}.zE6uZW_dashStageCurrent .zE6uZW_dashStageDot{border-color:var(--nf-accent);color:var(--nf-accent);box-shadow:0 0 0 3px color-mix(in srgb, var(--nf-accent) 18%, transparent)}.zE6uZW_dashFacts{gap:var(--nf-space-8,8px);border-top:1px solid var(--nf-border);padding-top:var(--nf-space-12,12px);grid-template-columns:repeat(4,minmax(0,1fr));display:grid}.zE6uZW_dashFact{gap:var(--nf-space-2,2px);flex-direction:column;min-width:0;display:flex}.zE6uZW_dashFact b{font-size:var(--nf-fs-14,13px);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.zE6uZW_dashGrid{gap:var(--nf-space-14,14px);grid-template-columns:minmax(0,3fr) minmax(0,2fr);align-items:start;display:grid}.zE6uZW_todoItem{align-items:center;gap:var(--nf-space-10,10px);border-radius:var(--nf-radius-8,8px);padding:var(--nf-space-8,8px) var(--nf-space-12,12px);font-size:var(--nf-fs-12,12.5px);border:1px solid var(--nf-border);display:flex}.zE6uZW_todoDanger{border-color:color-mix(in srgb, var(--nf-error) 40%, transparent);background:color-mix(in srgb, var(--nf-error) 8%, transparent)}.zE6uZW_todoWarning{border-color:color-mix(in srgb, var(--nf-warn) 40%, transparent);background:color-mix(in srgb, var(--nf-warn) 8%, transparent)}.zE6uZW_todoInfo{border-color:color-mix(in srgb, var(--nf-info) 40%, transparent);background:color-mix(in srgb, var(--nf-info) 7%, transparent)}.zE6uZW_todoText{gap:var(--nf-space-2,2px);flex-direction:column;flex:1;min-width:0;display:flex}.zE6uZW_outlineReadonly{padding:var(--nf-space-12,12px) var(--nf-space-14,14px);border:1px solid var(--nf-border);border-radius:var(--nf-radius-12,12px);background:var(--nf-bg-inset);font-size:var(--nf-fs-12,12.5px);white-space:pre-wrap;user-select:text;max-height:480px;margin:0;line-height:1.8;overflow:auto}.zE6uZW_bookCreateOutline{gap:var(--nf-space-6,6px);flex-direction:column;align-items:flex-start;display:flex}.zE6uZW_assistantFloat{z-index:80;border:1px solid var(--nf-border);border-radius:var(--nf-radius-16,16px);background:var(--nf-bg-raise);backdrop-filter:blur(24px)saturate(180%);box-shadow:var(--nf-shadow-lg);flex-direction:column;min-width:320px;min-height:220px;display:flex;position:absolute;overflow:hidden}.zE6uZW_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}.zE6uZW_assistantFloatHeader:active{cursor:grabbing}.zE6uZW_assistantFloatBody{min-height:0;padding:var(--nf-space-10,10px);flex:1;display:flex;overflow:hidden}.zE6uZW_assistantFloatBody>*{flex:1;min-width:0}.zE6uZW_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}.zE6uZW_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}.zE6uZW_coverPreview img{object-fit:contain;width:100%;height:100%;display:block}.zE6uZW_coverPlaceholder{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3)}.zE6uZW_shelfView{min-height:0;padding:var(--nf-container-pad,20px 22px);gap:var(--nf-container-gap,14px);flex-direction:column;flex:1;display:flex;overflow:auto}.zE6uZW_authorHome{z-index:1;flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.zE6uZW_authorRail{border-right:1px solid var(--nf-glass-border);background:var(--nf-glass-face);flex-direction:column;flex-shrink:0;gap:4px;width:180px;padding:14px 10px;display:flex}.zE6uZW_authorRailTitle{color:var(--nf-accent);align-items:center;gap:8px;padding:4px 8px 12px;font-weight:600;display:flex}.zE6uZW_authorRailBtn{color:var(--nf-text);cursor:pointer;text-align:left;background:0 0;border:1px solid #0000;border-radius:10px;align-items:center;gap:10px;width:100%;padding:8px 12px;font-size:14px;display:flex}.zE6uZW_authorRailBtn:hover{background:color-mix(in srgb, var(--nf-accent) 12%, transparent);color:var(--nf-text)}.zE6uZW_authorRailBtnActive{background:color-mix(in srgb, var(--nf-accent) 16%, var(--nf-glass-face));border-color:var(--nf-accent);color:var(--nf-accent);box-shadow:inset 0 0 0 1px var(--nf-accent);font-weight:600}.zE6uZW_authorRailAbout{padding:8px 12px}.zE6uZW_authorContent{flex-direction:column;flex:1;min-width:0;display:flex;overflow:hidden}.zE6uZW_authorPageBody{padding:var(--nf-container-pad,20px 22px);flex-direction:column;flex:1;gap:14px;min-height:0;display:flex;overflow:auto}.zE6uZW_authorPageHeader{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:14px;display:flex}.zE6uZW_authorPageHero{gap:var(--nf-space-12,12px);padding:var(--nf-card-pad,20px 22px);border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-22,22px);background:var(--nf-glass-face);box-shadow:var(--nf-shadow), inset 0 1.5px 0 var(--nf-glass-sheen);backdrop-filter:blur(26px)saturate(175%);flex-direction:column;display:flex}.zE6uZW_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}.zE6uZW_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}.zE6uZW_rowEnd{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.zE6uZW_assetFilterBar{flex-wrap:wrap;gap:8px;display:flex}.zE6uZW_assetFilterChip{border:1px solid var(--nf-glass-border);color:var(--nf-text);cursor:pointer;background:0 0;border-radius:999px;padding:4px 10px}.zE6uZW_assetFilterChipActive{background:var(--nf-accent);color:#fff;border-color:#0000}.zE6uZW_assetEditor{border:1px solid var(--nf-glass-border);background:var(--nf-glass-face);border-radius:14px;flex-direction:column;gap:12px;padding:16px;display:flex}.zE6uZW_assetEditorRow{flex-wrap:wrap;gap:12px;display:flex}.zE6uZW_assetLabel{color:var(--nf-muted);flex-direction:column;flex:1;gap:4px;min-width:180px;font-size:12px;display:flex}.zE6uZW_assetTextarea{resize:vertical;min-height:160px;font-family:inherit}.zE6uZW_assetGrid{grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px;display:grid}.zE6uZW_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}.zE6uZW_assetCardTop{justify-content:space-between;align-items:center;gap:8px;display:flex}.zE6uZW_assetKind{font-size:12px;font-weight:600}.zE6uZW_assetCardName{font-weight:600}.zE6uZW_assetCardContent{white-space:pre-wrap;color:var(--nf-text);max-height:150px;font-size:13px;overflow:auto}.zE6uZW_assetCardFooter{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.zE6uZW_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}.zE6uZW_iconBtn:hover{background:#0000000f}.zE6uZW_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}.zE6uZW_adaptTextarea{resize:vertical;min-height:220px}.zE6uZW_adaptResult{flex-direction:column;gap:14px;display:flex}.zE6uZW_adaptOutline{background:var(--nf-glass-face);border:1px solid var(--nf-glass-border);border-radius:12px;padding:10px 14px}.zE6uZW_adaptMatrix{grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px;display:grid}.zE6uZW_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}.zE6uZW_dimCardHead{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.zE6uZW_dimTitle{font-weight:600}.zE6uZW_dimCurrent{white-space:pre-wrap;font-size:13px}.zE6uZW_dimCardSelected{border-color:var(--nf-accent);box-shadow:0 0 0 1px var(--nf-accent)}.zE6uZW_dimEdit{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.zE6uZW_adaptOutlinePre{white-space:pre-wrap;max-height:260px;margin:0;font-family:inherit;font-size:13px;overflow:auto}.zE6uZW_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}.zE6uZW_adaptTable{border-collapse:collapse;width:100%;font-size:13px}.zE6uZW_adaptTable th,.zE6uZW_adaptTable td{border:1px solid var(--nf-glass-border);text-align:left;padding:6px 8px}.zE6uZW_adaptImpacts{flex-direction:column;gap:4px;display:flex}.zE6uZW_adaptImpact{font-size:13px}.zE6uZW_adaptTableScroll{overflow-x:auto}.zE6uZW_adaptCell{width:100%;min-width:90px}.zE6uZW_adaptRules{flex-direction:column;gap:10px;display:flex}.zE6uZW_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}.zE6uZW_adaptRuleRow{align-items:center;gap:8px;display:flex}.zE6uZW_progressOverview{grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;display:grid}.zE6uZW_progressOverviewCard{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:4px;padding:14px;display:flex}.zE6uZW_progressOverviewNum{color:var(--nf-accent);font-size:24px;font-weight:700}.zE6uZW_progressTotalBar{background:var(--nf-glass-face);border:1px solid var(--nf-glass-border);border-radius:999px;height:14px;position:relative;overflow:hidden}.zE6uZW_progressTotalFill{background:linear-gradient(90deg, var(--nf-accent), var(--nf-info));border-radius:999px;height:100%;position:absolute;inset:0 auto 0 0}.zE6uZW_progressTotalBar .zE6uZW_meta{color:var(--nf-text);justify-content:center;align-items:center;font-size:11px;font-weight:600;display:flex;position:absolute;inset:0}.zE6uZW_progressBookList{flex-direction:column;gap:12px;display:flex}.zE6uZW_progressBook{border:1px solid var(--nf-glass-border);background:var(--nf-glass-face);border-radius:14px;flex-direction:column;gap:8px;padding:14px;display:flex}.zE6uZW_progressBookActive{border-color:var(--nf-accent);box-shadow:0 0 0 1px var(--nf-accent)}.zE6uZW_progressBookHead{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.zE6uZW_progressBookName{font-weight:600}.zE6uZW_progressLive{color:var(--nf-accent);font-weight:600}.zE6uZW_progressBookBar{background:var(--nf-glass-face-hover,#0000000d);border-radius:999px;height:8px;overflow:hidden}.zE6uZW_progressBookFill{background:var(--nf-accent);border-radius:999px;height:100%}.zE6uZW_shelfHeader{gap:var(--nf-space-10,10px);flex-direction:column;display:flex}.zE6uZW_shelfHero{gap:var(--nf-space-14,14px);padding:var(--nf-card-pad,20px 22px);border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-22,22px);background:var(--nf-glass-face);box-shadow:var(--nf-shadow), inset 0 1.5px 0 var(--nf-glass-sheen);flex-direction:column;display:flex}.zE6uZW_shelfHero .zE6uZW_panelTitle{font-size:var(--nf-fs-22,22px);letter-spacing:.3px}.zE6uZW_shelfTitleRow{justify-content:space-between;align-items:center;gap:var(--nf-space-10,10px);flex-wrap:wrap;display:flex}.zE6uZW_shelfToolbar{align-items:center;gap:var(--nf-space-10,10px);flex-wrap:wrap;display:flex}.zE6uZW_shelfSearch{flex:1;min-width:180px;max-width:320px}.zE6uZW_shelfStats{gap:var(--nf-space-10,10px);grid-template-columns:repeat(auto-fit,minmax(120px,1fr));display:grid}.zE6uZW_shelfStat{justify-content:space-between;align-items:baseline;gap:var(--nf-space-8,8px);padding:var(--nf-space-10,10px) var(--nf-space-14,14px);border:1px solid var(--nf-glass-border);border-radius:var(--nf-radius-14,14px);background:var(--nf-glass-face);box-shadow:var(--nf-shadow), inset 0 1px 0 var(--nf-glass-sheen);cursor:pointer;user-select:none;transition:border-color .15s,background .15s,box-shadow .15s,transform .1s;display:flex}.zE6uZW_shelfStat:hover{border-color:var(--nf-accent);transform:translateY(-1px)}.zE6uZW_shelfStatActive{border-color:var(--nf-accent);background:var(--nf-accent-soft);box-shadow:0 0 0 2px var(--nf-accent-soft), var(--nf-shadow)}.zE6uZW_shelfStat b{font-size:var(--nf-fs-20,20px);color:var(--nf-accent);font-weight:800}.zE6uZW_shelfStat span{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2)}.zE6uZW_shelfFilters{gap:var(--nf-space-2,2px);padding:var(--nf-space-4,3px);border:1px solid var(--nf-border);border-radius:var(--nf-radius-999,999px);background:var(--nf-bg-inset);display:inline-flex}.zE6uZW_shelfFilter{color:var(--nf-text-2);font-size:var(--nf-fs-12,12.5px);padding:var(--nf-space-6,5px) var(--nf-space-12,12px);border-radius:var(--nf-radius-999,999px);cursor:pointer;align-items:center;gap:var(--nf-space-6,5px);white-space:nowrap;background:0 0;border:none;font-weight:600;transition:background .15s,color .15s,box-shadow .15s;display:inline-flex}.zE6uZW_shelfFilter:hover{color:var(--nf-text)}.zE6uZW_shelfFilterActive{background:linear-gradient(135deg, var(--nf-accent), var(--nf-accent-hover));color:var(--nf-accent-fg);box-shadow:0 3px 12px color-mix(in srgb, var(--nf-accent) 40%, transparent)}.zE6uZW_shelfFilterCount{font-size:var(--nf-fs-12,10.5px);opacity:.8;background:color-mix(in srgb, currentColor 14%, transparent);border-radius:var(--nf-radius-999,999px);padding:0 var(--nf-space-6,6px)}.zE6uZW_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);backdrop-filter:blur(24px)saturate(180%);text-align:center;flex-direction:column;flex:1;display:flex}.zE6uZW_shelfEmptyIcon{font-size:var(--nf-fs-42,42px)}.zE6uZW_shelfEmptyTitle{font-size:var(--nf-fs-16,16px);font-weight:700}.zE6uZW_shelfGrid{gap:var(--nf-container-gap,14px);grid-template-columns:repeat(auto-fill,minmax(190px,1fr));align-content:start;display:grid}.zE6uZW_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}.zE6uZW_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}.zE6uZW_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}.zE6uZW_panel[data-nf-mode=light]{color-scheme:light;--nf-bg:#f2f2f7db;--nf-bg-raise:#ffffffb8;--nf-bg-inset:#7676801f;--nf-border:#3c3c4329;--nf-border-strong:#3c3c4352;--nf-text:#1c1c1e;--nf-text-2:#3c3c43;--nf-text-2-alpha:#3c3c43ad;--nf-text-3:#8e8e93;--nf-accent:#00b85c;--nf-accent-hover:#00a04e;--nf-accent-soft:#00b85c1f;--nf-accent-fg:#fff;--nf-hover:#0000000d;--nf-success:#34c759;--nf-error:#ff3b30;--nf-warn:#ff9500;--nf-info:#00b85c;--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:linear-gradient(180deg, #f6f7f9 0%, #f0f2f5 26%, #e9ebef 52%, #e0e3e8 78%, #d6d9df 100%);--nf-glass-core:radial-gradient(30% 24% at 36% 28%, #ffffff80 0%, #ffffff38 45%, #fff0 78%);--nf-glass-sheen:#ffffff8c;--nf-glass-border:#ffffffa6;--nf-glass-inset:#ffffff8c;--nf-glass-orb-a:#00b85c2e;--nf-glass-orb-b:#78a0ff21}.zE6uZW_panel[data-nf-mode=dark]{color-scheme:dark;--nf-bg:#0a0b0ddb;--nf-bg-raise:#1c1c1ec7;--nf-bg-inset:#7676802e;--nf-border:#ffffff1f;--nf-border-strong:#ffffff47;--nf-text:#f2f2f7;--nf-text-2:#d1d1d6;--nf-text-2-alpha:#d1d1d6b8;--nf-text-3:#8e8e93;--nf-accent:#35d07a;--nf-accent-hover:#5ce695;--nf-accent-soft:#35d07a33;--nf-accent-fg:#062b18;--nf-hover:#ffffff17;--nf-success:#30d158;--nf-error:#ff453a;--nf-warn:#ff9f0a;--nf-info:#35d07a;--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:linear-gradient(180deg, #70747a6b 0%, #60646a6b 26%, #52555a6b 52%, #44474c6b 78%, #383a3f6b 100%);--nf-glass-core:radial-gradient(30% 24% at 36% 28%, #ffffff42 0%, #ffffff1a 45%, #fff0 78%);--nf-glass-sheen:#ffffff42;--nf-glass-border:#ffffff24;--nf-glass-inset:#ffffff12;--nf-glass-orb-a:#00ca5247;--nf-glass-orb-b:#bec8d71a}.zE6uZW_panel[data-nf-mode=dark][data-nf-theme=macos]{--nf-bg:#1c1c1ee6;--nf-bg-raise:#2c2c2ed1;--nf-bg-inset:#7676802e;--nf-border:#ffffff1f;--nf-border-strong:#ffffff42;--nf-text:#f5f5f7;--nf-text-2:#d1d1d6;--nf-text-2-alpha:#d1d1d6b3;--nf-text-3:#98989d;--nf-accent:#0a84ff;--nf-accent-hover:#3a9bff;--nf-accent-soft:#0a84ff33;--nf-accent-fg:#fff;--nf-hover:#ffffff0f;--nf-info:#bf5af2;--nf-shadow:0 1px 2px #0006, 0 10px 30px #00000073;--nf-shadow-lg:0 4px 12px #00000073, 0 18px 44px #0009;--nf-card-shadow:0 2px 6px #0006, 0 14px 38px #00000080;--nf-card-shadow-hover:0 4px 10px #00000073, 0 22px 52px #0009;--nf-glass-face:#2c2c2ed9;--nf-glass-core:transparent;--nf-glass-sheen:#fff3;--nf-glass-border:#ffffff2e;--nf-glass-inset:#ffffff0f;--nf-glass-orb-a:#0a84ff29;--nf-glass-orb-b:#bf5af214;--nf-glass-noise:none}.zE6uZW_panel[data-nf-mode=dark][data-nf-theme=neumorph]{--nf-bg:#2b2f36;--nf-bg-raise:#2b2f36;--nf-bg-inset:#25292f;--nf-border:#0a0c1080;--nf-border-strong:#080a0e99;--nf-text:#d6dae1;--nf-text-2:#a8aeb8;--nf-text-2-alpha:#a8aeb8b3;--nf-text-3:#757c88;--nf-hover:#ffffff0d;--nf-shadow:4px 4px 10px #00000080, -4px -4px 10px #6068763d;--nf-shadow-lg:6px 6px 14px #0000008c, -6px -6px 14px #60687642;--nf-card-shadow:9px 9px 18px #00000080, -9px -9px 18px #6068763d;--nf-card-shadow-hover:12px 12px 24px #0009, -12px -12px 24px #60687647;--nf-glass-face:#2b2f36;--nf-glass-core:transparent;--nf-glass-sheen:#fff0;--nf-glass-border:#0c0e1273;--nf-glass-inset:#25292f;--nf-glass-orb-a:transparent;--nf-glass-orb-b:transparent;--nf-glass-noise:none}.zE6uZW_panel[data-nf-mode=light][data-nf-theme=neumorph]{--nf-bg:#e4e9f2;--nf-bg-raise:#e4e9f2;--nf-bg-inset:#d9dfe8;--nf-border:#8c9baf59;--nf-border-strong:#78879e80;--nf-text:#3a4250;--nf-text-2:#5b6472;--nf-text-2-alpha:#465060b3;--nf-text-3:#8b94a3;--nf-hover:#5a697d14;--nf-shadow:4px 4px 10px #a3b1c68c, -4px -4px 10px #ffffffd9;--nf-shadow-lg:6px 6px 14px #a3b1c699, -6px -6px 14px #ffffffe6;--nf-card-shadow:9px 9px 18px #a3b1c68c, -9px -9px 18px #ffffffd9;--nf-card-shadow-hover:12px 12px 24px #a3b1c6a6, -12px -12px 24px #fffffff2;--nf-glass-face:#e4e9f2;--nf-glass-core:transparent;--nf-glass-sheen:#fff0;--nf-glass-border:#a3b1c666;--nf-glass-inset:#d9dfe8;--nf-glass-orb-a:transparent;--nf-glass-orb-b:transparent;--nf-glass-noise:none}.zE6uZW_bookCard{gap:var(--nf-space-8,8px);border:1px solid var(--nf-border);border-radius:var(--nf-radius-16,16px);padding:var(--nf-space-12,12px);background:var(--nf-bg-raise);backdrop-filter:blur(24px)saturate(180%);box-shadow:var(--nf-shadow);cursor:pointer;flex-direction:column;transition:border-color .15s,transform .1s,box-shadow .15s;display:flex}.zE6uZW_bookCard:hover{border-color:var(--nf-accent);box-shadow:var(--nf-shadow-lg);transform:translateY(-2px)}.zE6uZW_bookCardActive{border-color:var(--nf-accent);box-shadow:0 0 0 3px var(--nf-accent-soft)}.zE6uZW_bookCardCover{aspect-ratio:3/4;border-radius:var(--nf-radius-12,12px);background:var(--nf-bg-inset);border:1px solid var(--nf-border);flex:none;justify-content:center;align-items:center;display:flex;position:relative;overflow:hidden}.zE6uZW_bookCardCover img{object-fit:cover;width:100%;height:100%;transition:transform .35s;display:block}.zE6uZW_bookCard:hover .zE6uZW_bookCardCover img{transform:scale(1.06)}.zE6uZW_bookCardCover:after{content:\"\";border-radius:inherit;pointer-events:none;opacity:0;background:linear-gradient(#0000 55%,#00000047);transition:opacity .25s;position:absolute;inset:0}.zE6uZW_bookCard:hover .zE6uZW_bookCardCover:after{opacity:1}.zE6uZW_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}.zE6uZW_bookCardCoverTitle{font-size:var(--nf-fs-22,22px);color:var(--nf-accent);letter-spacing:2px;font-weight:800}.zE6uZW_bookCardBody{gap:var(--nf-space-6,5px);flex-direction:column;flex:1;min-width:0;display:flex}.zE6uZW_bookCardTitleRow{justify-content:space-between;align-items:center;gap:var(--nf-space-6,6px);display:flex}.zE6uZW_bookCardName{font-weight:700;font-size:var(--nf-fs-14,13.5px);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.zE6uZW_bookCardBlurb{-webkit-line-clamp:2;-webkit-box-orient:vertical;min-height:34px;display:-webkit-box;overflow:hidden}.zE6uZW_bookCardMetaRow{justify-content:space-between;align-items:center;gap:var(--nf-space-6,6px);flex-wrap:wrap;display:flex}.zE6uZW_bookCardProgressBar{border-radius:var(--nf-radius-999,999px);background:var(--nf-border);height:6px;overflow:hidden;box-shadow:inset 0 1px 2px #0000001f}.zE6uZW_bookCardProgressFill{border-radius:var(--nf-radius-999,999px);background:linear-gradient(90deg, var(--nf-info), var(--nf-accent));height:100%;transition:width .3s;display:block}.zE6uZW_bookAddCard{justify-content:center;align-items:center;gap:var(--nf-space-8,8px);text-align:center;color:var(--nf-text-2);border-style:dashed;min-height:260px;transition:border-color .15s,color .15s,background .15s,transform .15s}.zE6uZW_bookAddCard:hover{border-color:var(--nf-accent);background:var(--nf-accent-soft);color:var(--nf-accent);transform:translateY(-2px)}.zE6uZW_bookAddIcon{font-size:var(--nf-fs-34,34px);color:var(--nf-accent);line-height:1;transition:transform .15s}.zE6uZW_bookAddCard:hover .zE6uZW_bookAddIcon{transform:scale(1.12)}.zE6uZW_bookCreateCard{border-color:var(--nf-accent);min-height:260px}.zE6uZW_createBookView{min-height:0;padding:var(--nf-container-pad,20px 22px);gap:var(--nf-container-gap,14px);flex-direction:column;flex:1;display:flex;overflow:auto}.zE6uZW_createBookTop{align-items:center;display:flex}.zE6uZW_createBookCard{align-self:center;gap:var(--nf-space-12,12px);border:1px solid var(--nf-border);border-radius:var(--nf-radius-20,20px);width:min(520px,100%);padding:var(--nf-card-pad,20px 22px);background:var(--nf-bg-raise);backdrop-filter:blur(24px)saturate(180%);box-shadow:var(--nf-shadow-lg);flex-direction:column;display:flex}.zE6uZW_createBookIcon{font-size:var(--nf-fs-34,34px);line-height:1}.zE6uZW_createBookTitle{font-size:var(--nf-fs-22,22px);letter-spacing:-.3px;margin:0;font-weight:800}.zE6uZW_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}.zE6uZW_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}.zE6uZW_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}.zE6uZW_progressLineDone{color:var(--nf-success);font-weight:600}.zE6uZW_progressLineError{color:var(--nf-error);font-weight:600}.zE6uZW_meta{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);opacity:.9}.zE6uZW_genreDesc{-webkit-line-clamp:2;-webkit-box-orient:vertical;max-width:560px;display:-webkit-box;overflow:hidden}.zE6uZW_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}.zE6uZW_panelContent::-webkit-scrollbar,.zE6uZW_chatScroll::-webkit-scrollbar,.zE6uZW_chapterPreview::-webkit-scrollbar,.zE6uZW_progress::-webkit-scrollbar,.zE6uZW_toolLive::-webkit-scrollbar{width:8px;height:8px}.zE6uZW_panelContent::-webkit-scrollbar-thumb,.zE6uZW_chatScroll::-webkit-scrollbar-thumb,.zE6uZW_chapterPreview::-webkit-scrollbar-thumb,.zE6uZW_progress::-webkit-scrollbar-thumb,.zE6uZW_toolLive::-webkit-scrollbar-thumb{background:var(--nf-border-strong);border-radius:var(--nf-radius-4,4px)}.zE6uZW_panelContent::-webkit-scrollbar-thumb:hover,.zE6uZW_chatScroll::-webkit-scrollbar-thumb:hover,.zE6uZW_chapterPreview::-webkit-scrollbar-thumb:hover,.zE6uZW_progress::-webkit-scrollbar-thumb:hover,.zE6uZW_toolLive::-webkit-scrollbar-thumb:hover{background:var(--nf-text-3)}.zE6uZW_workflowList{flex-direction:column;gap:0;display:flex}.zE6uZW_workflowRow{align-items:flex-start;gap:var(--nf-space-12,12px);padding:var(--nf-space-8,8px) var(--nf-space-4,4px);display:flex;position:relative}.zE6uZW_workflowRow:before{content:\"\";background:var(--nf-border);width:2px;position:absolute;top:34px;bottom:-8px;left:13px}.zE6uZW_workflowRow:last-child:before{display:none}.zE6uZW_workflowDot{width:28px;height:var(--nf-ctrl-s,28px);font-size:var(--nf-fs-12,12px);border:2px solid var(--nf-border-strong);background:var(--nf-bg-raise);color:var(--nf-text-2);z-index:1;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-weight:700;display:inline-flex}.zE6uZW_workflowDotDone{border-color:var(--nf-success);background:color-mix(in srgb, var(--nf-success) 15%, var(--nf-bg-raise));color:var(--nf-success)}.zE6uZW_workflowDotActive{border-color:var(--nf-accent);background:var(--nf-accent);color:var(--nf-accent-fg);box-shadow:0 0 0 4px var(--nf-accent-soft)}.zE6uZW_workflowBody{gap:var(--nf-space-4,4px);min-width:0;padding-top:var(--nf-space-2,2px);flex-direction:column;flex:1;display:flex}.zE6uZW_workflowLabel{font-size:var(--nf-fs-14,13px);color:var(--nf-text);font-weight:600}.zE6uZW_workflowHint{font-size:var(--nf-fs-12,12px);color:var(--nf-text-2)}@keyframes zE6uZW_pulse{0%,to{opacity:1}50%{opacity:.45}}@keyframes zE6uZW_fadeIn{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.zE6uZW_card{animation:.2s zE6uZW_fadeIn}.zE6uZW_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);backdrop-filter:blur(26px)saturate(175%);z-index:1;flex-wrap:wrap;flex-shrink:0;margin:10px 12px 0;display:flex;position:relative}.zE6uZW_bookshelfLabel{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);letter-spacing:1px;flex-shrink:0;font-weight:700}.zE6uZW_bookshelfList{align-items:center;gap:var(--nf-space-6,6px);flex-wrap:wrap;flex:1;min-width:0;display:flex}.zE6uZW_bookChip{align-items:center;gap:var(--nf-space-6,6px);padding:var(--nf-space-4,4px) var(--nf-space-8,8px) var(--nf-space-4,4px) var(--nf-space-10,10px);border:1px solid var(--nf-border);border-radius:var(--nf-radius-999,999px);background:var(--nf-bg-inset);cursor:pointer;font-size:var(--nf-fs-12,12px);max-width:220px;transition:border-color .15s,background .15s;display:flex}.zE6uZW_bookChip:hover{border-color:var(--nf-border-strong)}.zE6uZW_bookChipActive{border-color:var(--nf-accent);background:var(--nf-accent-soft);color:var(--nf-accent)}.zE6uZW_bookChipName{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.zE6uZW_bookChipMeta{font-size:var(--nf-fs-12,11px);opacity:.7;white-space:nowrap}.zE6uZW_bookChipRemove{color:var(--nf-text-3);cursor:pointer;font-size:var(--nf-fs-14,13px);padding:0 var(--nf-space-2,2px);border-radius:var(--nf-radius-4,4px);background:0 0;border:none;line-height:1}.zE6uZW_bookChipRemove:hover{color:var(--nf-error)}.zE6uZW_bookAdd{border:1px dashed var(--nf-border-strong);color:var(--nf-text-2);cursor:pointer;font-size:var(--nf-fs-12,12px);padding:var(--nf-space-4,4px) var(--nf-space-12,12px);border-radius:var(--nf-radius-999,999px);background:0 0;transition:border-color .15s,color .15s}.zE6uZW_bookAdd:hover{border-color:var(--nf-accent);color:var(--nf-accent)}.zE6uZW_bookCreateForm{align-items:center;gap:var(--nf-space-6,6px);display:flex}.zE6uZW_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;align-items:center;gap:var(--nf-space-6,6px);flex-direction:column;transition:border-color .15s,background .15s;display:flex}.zE6uZW_dropzone:hover,.zE6uZW_dropzoneActive{border-color:var(--nf-accent);background:var(--nf-accent-soft);color:var(--nf-accent)}.zE6uZW_dropzoneIcon{font-size:var(--nf-fs-22,22px);line-height:1}.zE6uZW_bookCardActions{align-items:center;gap:var(--nf-space-6,6px);padding-top:var(--nf-space-8,8px);margin-top:auto;display:flex}.zE6uZW_bookCardActions .zE6uZW_button{flex:1;justify-content:center}.zE6uZW_readerView{flex-direction:column;transition:background .2s,color .2s;display:flex;position:absolute;inset:0;overflow:hidden}.zE6uZW_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}.zE6uZW_readerTitle{font-weight:700;font-size:var(--nf-fs-14,14px)}.zE6uZW_readerSeg{align-items:center;gap:var(--nf-space-2,2px);border-radius:var(--nf-radius-8,8px);display:flex;overflow:hidden}.zE6uZW_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}.zE6uZW_readerSegBtn:hover,.zE6uZW_readerSegActive{opacity:1}.zE6uZW_readerBody{flex:1;align-items:stretch;min-height:0;display:flex}.zE6uZW_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}.zE6uZW_readerGroup{gap:var(--nf-space-2,1px);flex-direction:column;display:flex}.zE6uZW_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}.zE6uZW_readerGroupTitle:hover{opacity:1;background:#8080801f}.zE6uZW_readerGroupArrow{font-size:var(--nf-fs-12,10px);text-align:center;flex:none;width:12px}.zE6uZW_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}.zE6uZW_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;background:0 0;border:1px solid;min-width:0;transition:opacity .15s,background .15s;display:flex}.zE6uZW_readerItem:hover{opacity:1}.zE6uZW_readerItemActive{opacity:1;font-weight:700}.zE6uZW_readerItemNo{text-align:right;opacity:.75;flex:none;min-width:26px;font-weight:700}.zE6uZW_readerItemTitle{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.zE6uZW_readerItemBadge{font-size:var(--nf-fs-12,11px);flex:none}.zE6uZW_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}.zE6uZW_readerArticle{gap:var(--nf-space-12,12px);flex-direction:column;width:100%;display:flex}.zE6uZW_readerChapterTitle{font-size:var(--nf-fs-24,24px);letter-spacing:1px;margin:0;font-weight:800}.zE6uZW_readerChapterMeta{align-items:center;gap:var(--nf-space-8,8px);font-size:var(--nf-fs-12,12px);display:flex}.zE6uZW_readerText{text-align:justify;letter-spacing:.02em}.zE6uZW_readerPara{text-indent:2em;margin:0 0 .85em}.zE6uZW_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}.zE6uZW_readerLoading,.zE6uZW_readerError{padding:var(--nf-space-32,32px) 0;font-size:var(--nf-fs-14,13px);opacity:.7;align-self:center}.zE6uZW_readerError{color:var(--nf-error)}.zE6uZW_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}.zE6uZW_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);backdrop-filter:blur(28px)saturate(180%);box-shadow:var(--nf-shadow-lg);flex-direction:column;display:flex;overflow:auto}.zE6uZW_importModalHead{justify-content:space-between;align-items:center;gap:var(--nf-space-10,10px);display:flex}.zE6uZW_importModalTabs{gap:var(--nf-space-8,8px);display:flex}.zE6uZW_importModalTabs .zE6uZW_button{flex:1}.zE6uZW_importModalBody{gap:var(--nf-space-10,10px);flex-direction:column;display:flex}.zE6uZW_importField{gap:var(--nf-space-6,5px);font-size:var(--nf-fs-14,13px);color:var(--nf-text-2);flex-direction:column;display:flex}.zE6uZW_importHint{font-size:var(--nf-fs-12,12px);color:var(--nf-text-3);line-height:1.5}.zE6uZW_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}.zE6uZW_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}.zE6uZW_importModalActions{justify-content:flex-end;gap:var(--nf-space-8,8px);display:flex}.zE6uZW_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}.zE6uZW_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}.zE6uZW_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}.zE6uZW_settingsCard .zE6uZW_fieldLabel{white-space:nowrap;text-overflow:ellipsis;max-width:100%;min-height:18px;line-height:18px;overflow:hidden}.zE6uZW_settingsCard .zE6uZW_row{align-items:flex-start}.zE6uZW_helpTipText{width:280px;max-width:70vw;padding:var(--nf-space-10,10px) var(--nf-space-12,12px);border-radius:var(--nf-radius-10,10px);background:var(--nf-bg-raise);border:1px solid var(--nf-border-strong);box-shadow:var(--nf-shadow-lg);font-size:var(--nf-fs-12,12px);color:var(--nf-text-2);white-space:normal;z-index:20;text-align:left;pointer-events:none;font-weight:400;line-height:1.7;display:none;position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%)}.zE6uZW_helpTip:hover .zE6uZW_helpTipText,.zE6uZW_helpTip:focus .zE6uZW_helpTipText,.zE6uZW_helpTip:focus-within .zE6uZW_helpTipText{display:block}.zE6uZW_settingsCard+.zE6uZW_settingsCard{flex:1;min-height:0}.zE6uZW_switch{border-radius:var(--nf-radius-999,999px);border:1px solid var(--nf-border-strong);background:var(--nf-bg-inset);cursor:pointer;flex:none;width:42px;height:24px;padding:0;transition:background .18s,border-color .18s;position:relative}.zE6uZW_switchKnob{background:#fff;border-radius:50%;width:16px;height:16px;transition:transform .18s;position:absolute;top:3px;left:3px;box-shadow:0 1px 3px #0000004d}.zE6uZW_switchOn{background:var(--nf-accent);border-color:var(--nf-accent)}.zE6uZW_switchOn .zE6uZW_switchKnob{transform:translate(18px)}.zE6uZW_panel[data-nf-theme=neumorph]:not([data-nf-mode=dark]),body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=neumorph][data-nf-mode=light]{--nf-glass-face:color-mix(in srgb, #e4e9f2, transparent calc(100% - var(--nf-glass-opacity,100%)));--nf-bg-raise:color-mix(in srgb, #e4e9f2, transparent calc(100% - var(--nf-glass-opacity,100%)))}.zE6uZW_panel[data-nf-mode=dark][data-nf-theme=neumorph],body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=neumorph]:not([data-nf-mode]){--nf-glass-face:color-mix(in srgb, #2b2f36, transparent calc(100% - var(--nf-glass-opacity,100%)));--nf-bg-raise:color-mix(in srgb, #2b2f36, transparent calc(100% - var(--nf-glass-opacity,100%)))}.zE6uZW_panel[data-nf-theme=clay]:not([data-nf-mode=dark]),body:not([data-ds-dark-theme]) .zE6uZW_panel[data-nf-theme=clay][data-nf-mode=light]{--nf-glass-face:color-mix(in srgb, #efe4d6, transparent calc(100% - var(--nf-glass-opacity,100%)));--nf-bg-raise:color-mix(in srgb, #efe4d6, transparent calc(100% - var(--nf-glass-opacity,100%)))}.zE6uZW_panel[data-nf-mode=dark][data-nf-theme=clay],body[data-ds-dark-theme] .zE6uZW_panel[data-nf-theme=clay]:not([data-nf-mode]){--nf-glass-face:color-mix(in srgb, #37302b, transparent calc(100% - var(--nf-glass-opacity,100%)));--nf-bg-raise:color-mix(in srgb, #37302b, transparent calc(100% - var(--nf-glass-opacity,100%)))}";
35429
35493
  const tagId = "@waterwx/dsh-novel-forge/panel.module.css";
35430
35494
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
35431
35495
  const tag = document.createElement("style");
@@ -35435,356 +35499,363 @@ window.__ModuleLoader__.load({
35435
35499
  document.head.appendChild(tag);
35436
35500
  }
35437
35501
  var panel_module_css_default = {
35438
- "diffAdd": "zE6uZW_diffAdd",
35439
- "progressOverviewCard": "zE6uZW_progressOverviewCard",
35440
- "toolStep": "zE6uZW_toolStep",
35441
- "volumeGroupHeader": "zE6uZW_volumeGroupHeader",
35442
- "authorRail": "zE6uZW_authorRail",
35443
- "rowEnd": "zE6uZW_rowEnd",
35444
- "readerSidebar": "zE6uZW_readerSidebar",
35445
- "readerItemTitle": "zE6uZW_readerItemTitle",
35446
- "importFileInfo": "zE6uZW_importFileInfo",
35447
- "authorRailBtn": "zE6uZW_authorRailBtn",
35448
- "adaptOutlinePre": "zE6uZW_adaptOutlinePre",
35449
- "switchOn": "zE6uZW_switchOn",
35450
- "progressLineLive": "zE6uZW_progressLineLive",
35451
- "dashHeroTitle": "zE6uZW_dashHeroTitle",
35452
- "bookSwitchCover": "zE6uZW_bookSwitchCover",
35453
- "shelfStats": "zE6uZW_shelfStats",
35454
- "wsSelectedText": "zE6uZW_wsSelectedText",
35455
- "chatBubbleUser": "zE6uZW_chatBubbleUser",
35502
+ "bookshelf": "zE6uZW_bookshelf",
35503
+ "badge": "zE6uZW_badge",
35504
+ "adaptImpacts": "zE6uZW_adaptImpacts",
35505
+ "readerHeader": "zE6uZW_readerHeader",
35506
+ "readerItem": "zE6uZW_readerItem",
35507
+ "importPreview": "zE6uZW_importPreview",
35508
+ "noticeSuccess": "zE6uZW_noticeSuccess",
35456
35509
  "badgeError": "zE6uZW_badgeError",
35457
- "progressLive": "zE6uZW_progressLive",
35510
+ "progressBookBar": "zE6uZW_progressBookBar",
35511
+ "settingsCard": "zE6uZW_settingsCard",
35512
+ "helpTipText": "zE6uZW_helpTipText",
35513
+ "shelfStats": "zE6uZW_shelfStats",
35514
+ "dropzoneIcon": "zE6uZW_dropzoneIcon",
35515
+ "tlSegTrack": "zE6uZW_tlSegTrack",
35516
+ "readerGroup": "zE6uZW_readerGroup",
35517
+ "assetStatDetail": "zE6uZW_assetStatDetail",
35518
+ "authorPageHero": "zE6uZW_authorPageHero",
35519
+ "readerGroupArrow": "zE6uZW_readerGroupArrow",
35520
+ "assetCardFooter": "zE6uZW_assetCardFooter",
35521
+ "workflowBody": "zE6uZW_workflowBody",
35458
35522
  "readerBody": "zE6uZW_readerBody",
35459
- "dashStageDot": "zE6uZW_dashStageDot",
35460
- "assistantFloat": "zE6uZW_assistantFloat",
35461
- "importError": "zE6uZW_importError",
35462
- "adaptResult": "zE6uZW_adaptResult",
35463
- "bookshelfLabel": "zE6uZW_bookshelfLabel",
35464
- "bookChipRemove": "zE6uZW_bookChipRemove",
35465
- "importField": "zE6uZW_importField",
35466
- "tlBar": "zE6uZW_tlBar",
35467
- "bookCardName": "zE6uZW_bookCardName",
35468
- "bookCardCover": "zE6uZW_bookCardCover",
35469
- "toolLive": "zE6uZW_toolLive",
35470
- "shelfHeader": "zE6uZW_shelfHeader",
35471
- "view": "zE6uZW_view",
35523
+ "readerGroupCount": "zE6uZW_readerGroupCount",
35524
+ "readerMain": "zE6uZW_readerMain",
35525
+ "dimEdit": "zE6uZW_dimEdit",
35526
+ "importModalActions": "zE6uZW_importModalActions",
35527
+ "importPreviewList": "zE6uZW_importPreviewList",
35528
+ "bookSwitchMeta": "zE6uZW_bookSwitchMeta",
35529
+ "busyRow": "zE6uZW_busyRow",
35472
35530
  "bookAdd": "zE6uZW_bookAdd",
35531
+ "readerItemActive": "zE6uZW_readerItemActive",
35532
+ "readerChapterTitle": "zE6uZW_readerChapterTitle",
35533
+ "panelNav": "zE6uZW_panelNav",
35534
+ "wsPage": "zE6uZW_wsPage",
35535
+ "wsColumn": "zE6uZW_wsColumn",
35536
+ "iconButton": "zE6uZW_iconButton",
35537
+ "chatRole": "zE6uZW_chatRole",
35538
+ "progress": "zE6uZW_progress",
35539
+ "navActionBtn": "zE6uZW_navActionBtn",
35473
35540
  "diffChange": "zE6uZW_diffChange",
35474
- "navBadgePulse": "zE6uZW_navBadgePulse",
35475
- "badgePending": "zE6uZW_badgePending",
35476
- "assistantStatusBusy": "zE6uZW_assistantStatusBusy",
35477
- "readerPara": "zE6uZW_readerPara",
35478
- "chapterFocus": "zE6uZW_chapterFocus",
35479
- "badgeDone": "zE6uZW_badgeDone",
35480
- "dashHero": "zE6uZW_dashHero",
35481
- "bookshelf": "zE6uZW_bookshelf",
35482
- "importModalOverlay": "zE6uZW_importModalOverlay",
35483
- "importHint": "zE6uZW_importHint",
35484
- "workflowBody": "zE6uZW_workflowBody",
35485
- "outlineReadonly": "zE6uZW_outlineReadonly",
35486
- "progressBookFill": "zE6uZW_progressBookFill",
35487
- "bookChipActive": "zE6uZW_bookChipActive",
35488
- "bookChipName": "zE6uZW_bookChipName",
35489
- "createBookView": "zE6uZW_createBookView",
35490
- "diffNew": "zE6uZW_diffNew",
35491
- "dashHeroSparkle": "zE6uZW_dashHeroSparkle",
35541
+ "wsSelected": "zE6uZW_wsSelected",
35542
+ "bookSwitchCover": "zE6uZW_bookSwitchCover",
35543
+ "dashHeroArrow": "zE6uZW_dashHeroArrow",
35544
+ "panelBody": "zE6uZW_panelBody",
35545
+ "buttonSmall": "zE6uZW_buttonSmall",
35546
+ "chapterFocusPulse": "zE6uZW_chapterFocusPulse",
35547
+ "assistantFloat": "zE6uZW_assistantFloat",
35548
+ "assetCard": "zE6uZW_assetCard",
35492
35549
  "assetLabel": "zE6uZW_assetLabel",
35493
- "assetCardContent": "zE6uZW_assetCardContent",
35494
- "readerFoot": "zE6uZW_readerFoot",
35495
- "workflowDot": "zE6uZW_workflowDot",
35496
- "dashFacts": "zE6uZW_dashFacts",
35497
- "ideaCandidate": "zE6uZW_ideaCandidate",
35498
- "workflowDotActive": "zE6uZW_workflowDotActive",
35499
- "bookCardActions": "zE6uZW_bookCardActions",
35500
- "liveText": "zE6uZW_liveText",
35501
- "pulse": "zE6uZW_pulse",
35502
- "diffSame": "zE6uZW_diffSame",
35503
- "fieldLabel": "zE6uZW_fieldLabel",
35504
- "diffList": "zE6uZW_diffList",
35505
- "navGroupLabel": "zE6uZW_navGroupLabel",
35506
- "assetGroup": "zE6uZW_assetGroup",
35507
- "assistantFloatHeader": "zE6uZW_assistantFloatHeader",
35508
- "dimCurrent": "zE6uZW_dimCurrent",
35509
- "progressBookHead": "zE6uZW_progressBookHead",
35510
- "diffLegend": "zE6uZW_diffLegend",
35511
- "noticeError": "zE6uZW_noticeError",
35512
- "bookCreateCard": "zE6uZW_bookCreateCard",
35513
- "readerTitle": "zE6uZW_readerTitle",
35514
- "bookSwitchMeta": "zE6uZW_bookSwitchMeta",
35515
- "statCardD": "zE6uZW_statCardD",
35516
- "wsColumns": "zE6uZW_wsColumns",
35517
- "adaptTextarea": "zE6uZW_adaptTextarea",
35518
- "diffTagOld": "zE6uZW_diffTagOld",
35519
- "statRowD": "zE6uZW_statRowD",
35520
- "tlSegFill": "zE6uZW_tlSegFill",
35521
- "diffOld": "zE6uZW_diffOld",
35522
- "workflowHint": "zE6uZW_workflowHint",
35523
- "navTitleName": "zE6uZW_navTitleName",
35550
+ "shelfFilterCount": "zE6uZW_shelfFilterCount",
35551
+ "bookCardCoverFallback": "zE6uZW_bookCardCoverFallback",
35552
+ "importModalTabs": "zE6uZW_importModalTabs",
35553
+ "navTabLabel": "zE6uZW_navTabLabel",
35554
+ "card": "zE6uZW_card",
35555
+ "view": "zE6uZW_view",
35556
+ "entryLabel": "zE6uZW_entryLabel",
35557
+ "dashJourneyFill": "zE6uZW_dashJourneyFill",
35558
+ "dashHeroAction": "zE6uZW_dashHeroAction",
35559
+ "authorPageHeader": "zE6uZW_authorPageHeader",
35560
+ "importModalBody": "zE6uZW_importModalBody",
35561
+ "bookCardName": "zE6uZW_bookCardName",
35562
+ "readerItemNo": "zE6uZW_readerItemNo",
35563
+ "navAbout": "zE6uZW_navAbout",
35564
+ "navAboutUpdate": "zE6uZW_navAboutUpdate",
35565
+ "readerItemBadge": "zE6uZW_readerItemBadge",
35566
+ "createBookTitle": "zE6uZW_createBookTitle",
35567
+ "workflowLabel": "zE6uZW_workflowLabel",
35568
+ "navTabBadgeDanger": "zE6uZW_navTabBadgeDanger",
35569
+ "assetCardTop": "zE6uZW_assetCardTop",
35570
+ "authorRail": "zE6uZW_authorRail",
35571
+ "importFileInfo": "zE6uZW_importFileInfo",
35572
+ "legendNew": "zE6uZW_legendNew",
35573
+ "bookChipMeta": "zE6uZW_bookChipMeta",
35524
35574
  "chapterPreview": "zE6uZW_chapterPreview",
35575
+ "statRowD": "zE6uZW_statRowD",
35576
+ "button": "zE6uZW_button",
35577
+ "createBookIcon": "zE6uZW_createBookIcon",
35578
+ "shelfGrid": "zE6uZW_shelfGrid",
35579
+ "dashFact": "zE6uZW_dashFact",
35580
+ "bookAddIcon": "zE6uZW_bookAddIcon",
35581
+ "progressBook": "zE6uZW_progressBook",
35525
35582
  "toolStepActive": "zE6uZW_toolStepActive",
35583
+ "assistantResize": "zE6uZW_assistantResize",
35584
+ "progressLineError": "zE6uZW_progressLineError",
35585
+ "pulse": "zE6uZW_pulse",
35586
+ "diffOld": "zE6uZW_diffOld",
35587
+ "tab": "zE6uZW_tab",
35588
+ "wsAppliedBanner": "zE6uZW_wsAppliedBanner",
35589
+ "dashStage": "zE6uZW_dashStage",
35590
+ "navBadgePulse": "zE6uZW_navBadgePulse",
35591
+ "wsPreviewText": "zE6uZW_wsPreviewText",
35526
35592
  "progressBarFill": "zE6uZW_progressBarFill",
35527
35593
  "wsPreview": "zE6uZW_wsPreview",
35594
+ "toolStepDetail": "zE6uZW_toolStepDetail",
35595
+ "entryIcon": "zE6uZW_entryIcon",
35596
+ "volumeGroupToggle": "zE6uZW_volumeGroupToggle",
35597
+ "diffAdd": "zE6uZW_diffAdd",
35598
+ "shelfStat": "zE6uZW_shelfStat",
35599
+ "readerGroupTitle": "zE6uZW_readerGroupTitle",
35600
+ "helpTip": "zE6uZW_helpTip",
35601
+ "importModal": "zE6uZW_importModal",
35602
+ "statCardDIconRed": "zE6uZW_statCardDIconRed",
35603
+ "shelfFilterActive": "zE6uZW_shelfFilterActive",
35604
+ "dropzone": "zE6uZW_dropzone",
35605
+ "importHint": "zE6uZW_importHint",
35528
35606
  "assetStatValue": "zE6uZW_assetStatValue",
35529
- "dashGrid": "zE6uZW_dashGrid",
35530
- "shelfGrid": "zE6uZW_shelfGrid",
35531
- "entry": "zE6uZW_entry",
35532
- "progressLineDone": "zE6uZW_progressLineDone",
35533
- "shelfFilterCount": "zE6uZW_shelfFilterCount",
35534
- "fadeIn": "zE6uZW_fadeIn",
35535
- "statCardDIcon": "zE6uZW_statCardDIcon",
35536
- "readerText": "zE6uZW_readerText",
35537
- "navTitleBook": "zE6uZW_navTitleBook",
35538
- "readerLoading": "zE6uZW_readerLoading",
35539
- "importPreview": "zE6uZW_importPreview",
35540
- "buttonDanger": "zE6uZW_buttonDanger",
35541
- "diffColumn": "zE6uZW_diffColumn",
35542
- "wsPreviewText": "zE6uZW_wsPreviewText",
35543
- "chatRole": "zE6uZW_chatRole",
35544
- "chapterBeats": "zE6uZW_chapterBeats",
35545
- "bookCreateOutline": "zE6uZW_bookCreateOutline",
35546
- "volumeGroup": "zE6uZW_volumeGroup",
35547
- "assistantResize": "zE6uZW_assistantResize",
35548
- "panelTitle": "zE6uZW_panelTitle",
35549
- "progressBook": "zE6uZW_progressBook",
35550
- "readerChapterTitle": "zE6uZW_readerChapterTitle",
35551
- "statCardDUnit": "zE6uZW_statCardDUnit",
35552
- "readerError": "zE6uZW_readerError",
35553
- "bookChip": "zE6uZW_bookChip",
35607
+ "adaptResult": "zE6uZW_adaptResult",
35554
35608
  "dropzoneActive": "zE6uZW_dropzoneActive",
35555
- "iconButton": "zE6uZW_iconButton",
35556
- "toolStepName": "zE6uZW_toolStepName",
35557
35609
  "navGroupSep": "zE6uZW_navGroupSep",
35558
- "readerSegBtn": "zE6uZW_readerSegBtn",
35610
+ "reviewBox": "zE6uZW_reviewBox",
35611
+ "readerView": "zE6uZW_readerView",
35612
+ "dashJourney": "zE6uZW_dashJourney",
35613
+ "adaptTableScroll": "zE6uZW_adaptTableScroll",
35614
+ "shelfSearch": "zE6uZW_shelfSearch",
35615
+ "assetStatLabel": "zE6uZW_assetStatLabel",
35616
+ "toolStep": "zE6uZW_toolStep",
35617
+ "navTabBadge": "zE6uZW_navTabBadge",
35618
+ "statCardDValue": "zE6uZW_statCardDValue",
35619
+ "badgeWritten": "zE6uZW_badgeWritten",
35620
+ "assetCardName": "zE6uZW_assetCardName",
35621
+ "shelfFilters": "zE6uZW_shelfFilters",
35622
+ "readerItemTitle": "zE6uZW_readerItemTitle",
35623
+ "dashJourneyStages": "zE6uZW_dashJourneyStages",
35624
+ "shelfEmpty": "zE6uZW_shelfEmpty",
35625
+ "readerLoading": "zE6uZW_readerLoading",
35626
+ "adaptOutline": "zE6uZW_adaptOutline",
35627
+ "navTabIcon": "zE6uZW_navTabIcon",
35628
+ "readerSeg": "zE6uZW_readerSeg",
35629
+ "todoItem": "zE6uZW_todoItem",
35630
+ "readerTitle": "zE6uZW_readerTitle",
35631
+ "statCardDDetail": "zE6uZW_statCardDDetail",
35632
+ "progressOverviewNum": "zE6uZW_progressOverviewNum",
35633
+ "diffSameBody": "zE6uZW_diffSameBody",
35634
+ "adaptCell": "zE6uZW_adaptCell",
35635
+ "textarea": "zE6uZW_textarea",
35559
35636
  "bigProgressBarFill": "zE6uZW_bigProgressBarFill",
35637
+ "onlyChanges": "zE6uZW_onlyChanges",
35638
+ "authorContent": "zE6uZW_authorContent",
35639
+ "assetFilterChip": "zE6uZW_assetFilterChip",
35640
+ "assetGroups": "zE6uZW_assetGroups",
35641
+ "tabBar": "zE6uZW_tabBar",
35642
+ "bookCardActive": "zE6uZW_bookCardActive",
35643
+ "readerError": "zE6uZW_readerError",
35644
+ "navTabBadgeWarn": "zE6uZW_navTabBadgeWarn",
35645
+ "progressBar": "zE6uZW_progressBar",
35646
+ "tlSegDone": "zE6uZW_tlSegDone",
35647
+ "toolStepName": "zE6uZW_toolStepName",
35648
+ "diffNew": "zE6uZW_diffNew",
35649
+ "shelfTitleRow": "zE6uZW_shelfTitleRow",
35650
+ "navActions": "zE6uZW_navActions",
35651
+ "diffList": "zE6uZW_diffList",
35652
+ "tlBar": "zE6uZW_tlBar",
35653
+ "assetStat": "zE6uZW_assetStat",
35654
+ "liveText": "zE6uZW_liveText",
35655
+ "assetTextarea": "zE6uZW_assetTextarea",
35656
+ "bookshelfLabel": "zE6uZW_bookshelfLabel",
35657
+ "adaptMatrix": "zE6uZW_adaptMatrix",
35658
+ "progressLine": "zE6uZW_progressLine",
35659
+ "shelfToolbar": "zE6uZW_shelfToolbar",
35660
+ "bookChip": "zE6uZW_bookChip",
35661
+ "progressOverview": "zE6uZW_progressOverview",
35560
35662
  "bookCardBody": "zE6uZW_bookCardBody",
35561
- "authorRailAbout": "zE6uZW_authorRailAbout",
35562
- "readerHeader": "zE6uZW_readerHeader",
35563
- "createBookTitle": "zE6uZW_createBookTitle",
35564
- "statCardDValue": "zE6uZW_statCardDValue",
35565
- "todoText": "zE6uZW_todoText",
35566
- "dashStageCurrent": "zE6uZW_dashStageCurrent",
35567
- "progressBookList": "zE6uZW_progressBookList",
35568
- "bookCardCoverTitle": "zE6uZW_bookCardCoverTitle",
35569
- "bookCardBlurb": "zE6uZW_bookCardBlurb",
35570
- "ideaToggle": "zE6uZW_ideaToggle",
35571
- "readerItem": "zE6uZW_readerItem",
35663
+ "chatBubbleUser": "zE6uZW_chatBubbleUser",
35664
+ "shelfFilter": "zE6uZW_shelfFilter",
35665
+ "chapter": "zE6uZW_chapter",
35666
+ "panelContent": "zE6uZW_panelContent",
35667
+ "shelfHero": "zE6uZW_shelfHero",
35668
+ "progressOverviewCard": "zE6uZW_progressOverviewCard",
35572
35669
  "fileList": "zE6uZW_fileList",
35573
35670
  "badgeRejected": "zE6uZW_badgeRejected",
35574
- "dashJourneyFill": "zE6uZW_dashJourneyFill",
35575
- "dashJourneyStages": "zE6uZW_dashJourneyStages",
35576
- "assetFilterBar": "zE6uZW_assetFilterBar",
35577
- "assetKind": "zE6uZW_assetKind",
35578
- "dashHeroBook": "zE6uZW_dashHeroBook",
35579
- "shelfFilters": "zE6uZW_shelfFilters",
35580
- "shelfFilter": "zE6uZW_shelfFilter",
35581
- "shelfStatActive": "zE6uZW_shelfStatActive",
35671
+ "assetGrid": "zE6uZW_assetGrid",
35672
+ "adaptInputCard": "zE6uZW_adaptInputCard",
35673
+ "input": "zE6uZW_input",
35674
+ "diffTagOld": "zE6uZW_diffTagOld",
35582
35675
  "shelfEmptyIcon": "zE6uZW_shelfEmptyIcon",
35583
- "shelfFilterActive": "zE6uZW_shelfFilterActive",
35676
+ "bookSwitchName": "zE6uZW_bookSwitchName",
35677
+ "row": "zE6uZW_row",
35678
+ "authorRailBtn": "zE6uZW_authorRailBtn",
35679
+ "importField": "zE6uZW_importField",
35680
+ "bookCardCoverTitle": "zE6uZW_bookCardCoverTitle",
35681
+ "volumeGroup": "zE6uZW_volumeGroup",
35584
35682
  "createBookTop": "zE6uZW_createBookTop",
35683
+ "chapterNum": "zE6uZW_chapterNum",
35684
+ "adaptOutlinePre": "zE6uZW_adaptOutlinePre",
35685
+ "readerFoot": "zE6uZW_readerFoot",
35686
+ "chapterBeats": "zE6uZW_chapterBeats",
35687
+ "dashStageDot": "zE6uZW_dashStageDot",
35688
+ "workflowDotActive": "zE6uZW_workflowDotActive",
35689
+ "diffColumn": "zE6uZW_diffColumn",
35690
+ "badgePending": "zE6uZW_badgePending",
35691
+ "switch": "zE6uZW_switch",
35692
+ "importResult": "zE6uZW_importResult",
35693
+ "adaptTable": "zE6uZW_adaptTable",
35694
+ "statCardDDown": "zE6uZW_statCardDDown",
35695
+ "bookCreateForm": "zE6uZW_bookCreateForm",
35696
+ "dashStageDone": "zE6uZW_dashStageDone",
35697
+ "chapterMain": "zE6uZW_chapterMain",
35698
+ "bookCreateOutline": "zE6uZW_bookCreateOutline",
35585
35699
  "bookSwitchArrow": "zE6uZW_bookSwitchArrow",
35586
- "shelfTitleRow": "zE6uZW_shelfTitleRow",
35587
- "bookshelfList": "zE6uZW_bookshelfList",
35588
- "navAbout": "zE6uZW_navAbout",
35589
- "progressTotalFill": "zE6uZW_progressTotalFill",
35590
- "navTitle": "zE6uZW_navTitle",
35700
+ "readerPara": "zE6uZW_readerPara",
35701
+ "assetFilterBar": "zE6uZW_assetFilterBar",
35702
+ "chapterActions": "zE6uZW_chapterActions",
35591
35703
  "chatBubbleAssistant": "zE6uZW_chatBubbleAssistant",
35592
- "assetStatLabel": "zE6uZW_assetStatLabel",
35593
- "dashHeroArrow": "zE6uZW_dashHeroArrow",
35594
- "shelfHero": "zE6uZW_shelfHero",
35595
- "adaptInputCard": "zE6uZW_adaptInputCard",
35596
- "shelfStat": "zE6uZW_shelfStat",
35597
- "ideaCard": "zE6uZW_ideaCard",
35598
- "readerSeg": "zE6uZW_readerSeg",
35599
- "spaceBetween": "zE6uZW_spaceBetween",
35600
- "readerItemBadge": "zE6uZW_readerItemBadge",
35601
- "shelfView": "zE6uZW_shelfView",
35602
- "switch": "zE6uZW_switch",
35603
- "navTitleLogo": "zE6uZW_navTitleLogo",
35604
- "importModalTabs": "zE6uZW_importModalTabs",
35704
+ "assetFilterChipActive": "zE6uZW_assetFilterChipActive",
35705
+ "cardTitle": "zE6uZW_cardTitle",
35706
+ "navTabBadgeLive": "zE6uZW_navTabBadgeLive",
35707
+ "progressLineLive": "zE6uZW_progressLineLive",
35708
+ "dashHero": "zE6uZW_dashHero",
35709
+ "dashFacts": "zE6uZW_dashFacts",
35710
+ "bookCardTitleRow": "zE6uZW_bookCardTitleRow",
35711
+ "bookCardMetaRow": "zE6uZW_bookCardMetaRow",
35712
+ "diffSame": "zE6uZW_diffSame",
35713
+ "assetGroup": "zE6uZW_assetGroup",
35714
+ "assetKind": "zE6uZW_assetKind",
35715
+ "bookCreateCard": "zE6uZW_bookCreateCard",
35716
+ "ideaCandidate": "zE6uZW_ideaCandidate",
35717
+ "diffTagNew": "zE6uZW_diffTagNew",
35718
+ "assetGroupHeader": "zE6uZW_assetGroupHeader",
35719
+ "progressLineDone": "zE6uZW_progressLineDone",
35720
+ "panelTitle": "zE6uZW_panelTitle",
35721
+ "dimCard": "zE6uZW_dimCard",
35722
+ "wsPageHeader": "zE6uZW_wsPageHeader",
35723
+ "panelNavCollapsed": "zE6uZW_panelNavCollapsed",
35724
+ "navGroup": "zE6uZW_navGroup",
35725
+ "adaptRuleRow": "zE6uZW_adaptRuleRow",
35726
+ "progressTotalFill": "zE6uZW_progressTotalFill",
35727
+ "progressBookActive": "zE6uZW_progressBookActive",
35605
35728
  "assetEditorRow": "zE6uZW_assetEditorRow",
35606
- "navTabBadgeDanger": "zE6uZW_navTabBadgeDanger",
35607
- "reviewBox": "zE6uZW_reviewBox",
35608
- "toolSteps": "zE6uZW_toolSteps",
35609
- "todoInfo": "zE6uZW_todoInfo",
35610
- "dimTitle": "zE6uZW_dimTitle",
35729
+ "dimCardHead": "zE6uZW_dimCardHead",
35730
+ "navGroupLabel": "zE6uZW_navGroupLabel",
35611
35731
  "field": "zE6uZW_field",
35612
- "assistantStatus": "zE6uZW_assistantStatus",
35613
- "adaptProposal": "zE6uZW_adaptProposal",
35614
- "legendOld": "zE6uZW_legendOld",
35615
- "navActions": "zE6uZW_navActions",
35616
- "volumeGroupToggle": "zE6uZW_volumeGroupToggle",
35617
- "settingsCard": "zE6uZW_settingsCard",
35618
- "dimCard": "zE6uZW_dimCard",
35732
+ "progressTotalBar": "zE6uZW_progressTotalBar",
35733
+ "dashHeroActionTitle": "zE6uZW_dashHeroActionTitle",
35734
+ "bookChipActive": "zE6uZW_bookChipActive",
35735
+ "progressLive": "zE6uZW_progressLive",
35736
+ "navTabDot": "zE6uZW_navTabDot",
35737
+ "statCardDLabel": "zE6uZW_statCardDLabel",
35738
+ "navTitle": "zE6uZW_navTitle",
35619
35739
  "toolStepStatus": "zE6uZW_toolStepStatus",
35620
- "wsAppliedBanner": "zE6uZW_wsAppliedBanner",
35621
- "buttonSmall": "zE6uZW_buttonSmall",
35740
+ "dimCardSelected": "zE6uZW_dimCardSelected",
35741
+ "meta": "zE6uZW_meta",
35742
+ "readerSegBtn": "zE6uZW_readerSegBtn",
35743
+ "switchOn": "zE6uZW_switchOn",
35744
+ "fieldLabel": "zE6uZW_fieldLabel",
35745
+ "navTitleLogo": "zE6uZW_navTitleLogo",
35746
+ "navTabBadgeDone": "zE6uZW_navTabBadgeDone",
35747
+ "todoWarning": "zE6uZW_todoWarning",
35748
+ "bookshelfList": "zE6uZW_bookshelfList",
35749
+ "readerSegActive": "zE6uZW_readerSegActive",
35750
+ "dashStageCurrent": "zE6uZW_dashStageCurrent",
35751
+ "navTab": "zE6uZW_navTab",
35752
+ "toolStepIcon": "zE6uZW_toolStepIcon",
35753
+ "bookAddCard": "zE6uZW_bookAddCard",
35754
+ "authorPageBody": "zE6uZW_authorPageBody",
35755
+ "bookCardProgressBar": "zE6uZW_bookCardProgressBar",
35622
35756
  "buttonPrimary": "zE6uZW_buttonPrimary",
35623
- "diffDel": "zE6uZW_diffDel",
35624
- "assetFilterChip": "zE6uZW_assetFilterChip",
35625
- "switchKnob": "zE6uZW_switchKnob",
35626
- "tlSegLabel": "zE6uZW_tlSegLabel",
35627
- "navActionBtn": "zE6uZW_navActionBtn",
35628
- "bookAddIcon": "zE6uZW_bookAddIcon",
35629
- "chapterMain": "zE6uZW_chapterMain",
35630
- "workflowLabel": "zE6uZW_workflowLabel",
35631
- "tlSegDone": "zE6uZW_tlSegDone",
35757
+ "shelfHeader": "zE6uZW_shelfHeader",
35758
+ "importError": "zE6uZW_importError",
35759
+ "todoText": "zE6uZW_todoText",
35760
+ "chapterFocus": "zE6uZW_chapterFocus",
35761
+ "toolLive": "zE6uZW_toolLive",
35762
+ "wsColumns": "zE6uZW_wsColumns",
35763
+ "bookCardActions": "zE6uZW_bookCardActions",
35764
+ "readerSidebar": "zE6uZW_readerSidebar",
35765
+ "tlSeg": "zE6uZW_tlSeg",
35766
+ "badgeDone": "zE6uZW_badgeDone",
35767
+ "bookSwitch": "zE6uZW_bookSwitch",
35768
+ "workflowDot": "zE6uZW_workflowDot",
35769
+ "tlSegCurrent": "zE6uZW_tlSegCurrent",
35770
+ "buttonDanger": "zE6uZW_buttonDanger",
35771
+ "shelfStatActive": "zE6uZW_shelfStatActive",
35772
+ "bookCardProgressFill": "zE6uZW_bookCardProgressFill",
35773
+ "workflowHint": "zE6uZW_workflowHint",
35632
35774
  "assistantFloatBody": "zE6uZW_assistantFloatBody",
35633
- "input": "zE6uZW_input",
35634
- "diffText": "zE6uZW_diffText",
35635
- "dashStage": "zE6uZW_dashStage",
35775
+ "importModalOverlay": "zE6uZW_importModalOverlay",
35776
+ "switchKnob": "zE6uZW_switchKnob",
35777
+ "dashHeroEyebrow": "zE6uZW_dashHeroEyebrow",
35778
+ "tlSegTodo": "zE6uZW_tlSegTodo",
35779
+ "adaptProposal": "zE6uZW_adaptProposal",
35780
+ "diffLegend": "zE6uZW_diffLegend",
35781
+ "navAboutRow": "zE6uZW_navAboutRow",
35636
35782
  "coverPlaceholder": "zE6uZW_coverPlaceholder",
35637
- "statCardDDown": "zE6uZW_statCardDDown",
35638
- "bigProgressBar": "zE6uZW_bigProgressBar",
35639
- "onlyChanges": "zE6uZW_onlyChanges",
35640
- "assetGroupHeader": "zE6uZW_assetGroupHeader",
35641
- "todoItem": "zE6uZW_todoItem",
35642
- "assetFilterChipActive": "zE6uZW_assetFilterChipActive",
35643
- "assetCard": "zE6uZW_assetCard",
35644
- "shelfEmptyTitle": "zE6uZW_shelfEmptyTitle",
35645
- "readerGroupArrow": "zE6uZW_readerGroupArrow",
35646
- "busyRow": "zE6uZW_busyRow",
35647
- "shelfToolbar": "zE6uZW_shelfToolbar",
35648
- "bookCardTitleRow": "zE6uZW_bookCardTitleRow",
35649
- "card": "zE6uZW_card",
35783
+ "navTitleBook": "zE6uZW_navTitleBook",
35784
+ "navTitleName": "zE6uZW_navTitleName",
35785
+ "readerChapterMeta": "zE6uZW_readerChapterMeta",
35786
+ "coverPreview": "zE6uZW_coverPreview",
35787
+ "ideaToggle": "zE6uZW_ideaToggle",
35788
+ "bookChipName": "zE6uZW_bookChipName",
35789
+ "authorRailBtnActive": "zE6uZW_authorRailBtnActive",
35790
+ "tlSegFill": "zE6uZW_tlSegFill",
35791
+ "volumeGroupHeader": "zE6uZW_volumeGroupHeader",
35792
+ "adaptRules": "zE6uZW_adaptRules",
35793
+ "wsSelectedText": "zE6uZW_wsSelectedText",
35794
+ "navSpacer": "zE6uZW_navSpacer",
35795
+ "progressBookHead": "zE6uZW_progressBookHead",
35796
+ "assistantStatusBusy": "zE6uZW_assistantStatusBusy",
35797
+ "assistantFloatHeader": "zE6uZW_assistantFloatHeader",
35650
35798
  "chapterTitle": "zE6uZW_chapterTitle",
35651
- "adaptMatrix": "zE6uZW_adaptMatrix",
35652
- "dimCardHead": "zE6uZW_dimCardHead",
35653
- "bookAddCard": "zE6uZW_bookAddCard",
35654
- "createBookCard": "zE6uZW_createBookCard",
35655
- "importModalActions": "zE6uZW_importModalActions",
35656
- "workflowRow": "zE6uZW_workflowRow",
35657
- "adaptOutline": "zE6uZW_adaptOutline",
35658
- "diffSameBody": "zE6uZW_diffSameBody",
35799
+ "toolSteps": "zE6uZW_toolSteps",
35659
35800
  "authorRailTitle": "zE6uZW_authorRailTitle",
35660
- "panelContent": "zE6uZW_panelContent",
35661
- "navAboutRow": "zE6uZW_navAboutRow",
35662
- "panelNav": "zE6uZW_panelNav",
35663
- "chapterFocusPulse": "zE6uZW_chapterFocusPulse",
35664
- "entryIcon": "zE6uZW_entryIcon",
35665
- "toolStepError": "zE6uZW_toolStepError",
35666
- "progress": "zE6uZW_progress",
35667
- "tab": "zE6uZW_tab",
35668
- "dashHeroAction": "zE6uZW_dashHeroAction",
35669
- "todoDanger": "zE6uZW_todoDanger",
35670
- "dimEdit": "zE6uZW_dimEdit",
35671
- "adaptImpact": "zE6uZW_adaptImpact",
35672
- "progressOverview": "zE6uZW_progressOverview",
35673
- "tlSegCurrent": "zE6uZW_tlSegCurrent",
35674
- "bookCardMetaRow": "zE6uZW_bookCardMetaRow",
35675
- "dropzoneIcon": "zE6uZW_dropzoneIcon",
35676
- "statCardDDetail": "zE6uZW_statCardDDetail",
35677
- "dashFact": "zE6uZW_dashFact",
35678
- "navTabBadgeLive": "zE6uZW_navTabBadgeLive",
35679
- "readerArticle": "zE6uZW_readerArticle",
35680
- "toolStepIcon": "zE6uZW_toolStepIcon",
35681
- "progressTotalBar": "zE6uZW_progressTotalBar",
35682
- "wsColumn": "zE6uZW_wsColumn",
35683
- "dashJourney": "zE6uZW_dashJourney",
35684
- "chapterNum": "zE6uZW_chapterNum",
35685
- "progressBookActive": "zE6uZW_progressBookActive",
35686
- "navTabBadgeDone": "zE6uZW_navTabBadgeDone",
35687
- "dashHeroActionBody": "zE6uZW_dashHeroActionBody",
35688
- "shelfSearch": "zE6uZW_shelfSearch",
35689
- "bookCardActive": "zE6uZW_bookCardActive",
35690
- "assetCardFooter": "zE6uZW_assetCardFooter",
35691
- "tlSeg": "zE6uZW_tlSeg",
35692
- "navTabBadgeWarn": "zE6uZW_navTabBadgeWarn",
35693
- "authorRailBtnActive": "zE6uZW_authorRailBtnActive",
35694
- "genreDesc": "zE6uZW_genreDesc",
35695
- "wsEditor": "zE6uZW_wsEditor",
35696
- "progressLineError": "zE6uZW_progressLineError",
35697
- "importModal": "zE6uZW_importModal",
35698
- "readerItemNo": "zE6uZW_readerItemNo",
35699
- "navAboutUpdate": "zE6uZW_navAboutUpdate",
35700
- "tlSegTodo": "zE6uZW_tlSegTodo",
35701
- "authorContent": "zE6uZW_authorContent",
35702
- "row": "zE6uZW_row",
35703
- "authorPageBody": "zE6uZW_authorPageBody",
35704
- "readerView": "zE6uZW_readerView",
35705
- "assetCardName": "zE6uZW_assetCardName",
35706
- "navTabBadge": "zE6uZW_navTabBadge",
35707
- "dashHeroEyebrow": "zE6uZW_dashHeroEyebrow",
35708
- "readerItemActive": "zE6uZW_readerItemActive",
35709
- "assetStatDetail": "zE6uZW_assetStatDetail",
35710
- "chapterActions": "zE6uZW_chapterActions",
35711
- "statCardDIconRed": "zE6uZW_statCardDIconRed",
35712
- "panel": "zE6uZW_panel",
35713
- "textarea": "zE6uZW_textarea",
35714
- "wsPageHeader": "zE6uZW_wsPageHeader",
35715
- "dashJourneyBar": "zE6uZW_dashJourneyBar",
35716
- "panelBody": "zE6uZW_panelBody",
35717
- "meta": "zE6uZW_meta",
35718
- "navTabLabel": "zE6uZW_navTabLabel",
35719
- "chapterList": "zE6uZW_chapterList",
35720
- "badge": "zE6uZW_badge",
35721
- "assetGroups": "zE6uZW_assetGroups",
35722
- "todoWarning": "zE6uZW_todoWarning",
35801
+ "progressBookName": "zE6uZW_progressBookName",
35802
+ "createBookCard": "zE6uZW_createBookCard",
35803
+ "ideaCard": "zE6uZW_ideaCard",
35804
+ "dimTitle": "zE6uZW_dimTitle",
35805
+ "dashHeroSparkle": "zE6uZW_dashHeroSparkle",
35806
+ "chatScroll": "zE6uZW_chatScroll",
35807
+ "dashHeroTitle": "zE6uZW_dashHeroTitle",
35723
35808
  "assetEditor": "zE6uZW_assetEditor",
35724
- "progressBookBar": "zE6uZW_progressBookBar",
35725
- "dropzone": "zE6uZW_dropzone",
35726
- "readerGroupTitle": "zE6uZW_readerGroupTitle",
35727
- "readerGroupCount": "zE6uZW_readerGroupCount",
35728
- "legendNew": "zE6uZW_legendNew",
35729
- "diffTagNew": "zE6uZW_diffTagNew",
35730
- "cardTitle": "zE6uZW_cardTitle",
35731
- "shelfEmpty": "zE6uZW_shelfEmpty",
35732
- "statCardDLabel": "zE6uZW_statCardDLabel",
35733
- "readerMain": "zE6uZW_readerMain",
35734
- "importPreviewList": "zE6uZW_importPreviewList",
35735
- "dashHeroActionTitle": "zE6uZW_dashHeroActionTitle",
35736
- "bookCard": "zE6uZW_bookCard",
35809
+ "chapterList": "zE6uZW_chapterList",
35810
+ "statCardDUnit": "zE6uZW_statCardDUnit",
35737
35811
  "workflowList": "zE6uZW_workflowList",
35738
- "bookCreateForm": "zE6uZW_bookCreateForm",
35739
- "navTabIcon": "zE6uZW_navTabIcon",
35740
- "navSpacer": "zE6uZW_navSpacer",
35741
- "navGroup": "zE6uZW_navGroup",
35742
- "workflowDotDone": "zE6uZW_workflowDotDone",
35743
- "wsSelected": "zE6uZW_wsSelected",
35744
- "progressBookName": "zE6uZW_progressBookName",
35745
- "assetCardTop": "zE6uZW_assetCardTop",
35746
- "progressOverviewNum": "zE6uZW_progressOverviewNum",
35747
- "adaptTable": "zE6uZW_adaptTable",
35748
- "bookSwitch": "zE6uZW_bookSwitch",
35749
- "entryLabel": "zE6uZW_entryLabel",
35750
- "adaptImpacts": "zE6uZW_adaptImpacts",
35751
- "bookCardCoverFallback": "zE6uZW_bookCardCoverFallback",
35812
+ "noticeError": "zE6uZW_noticeError",
35813
+ "fadeIn": "zE6uZW_fadeIn",
35814
+ "tlSegLabel": "zE6uZW_tlSegLabel",
35815
+ "shelfView": "zE6uZW_shelfView",
35816
+ "readerArticle": "zE6uZW_readerArticle",
35817
+ "todoInfo": "zE6uZW_todoInfo",
35752
35818
  "importModalHead": "zE6uZW_importModalHead",
35753
- "badgeGenerating": "zE6uZW_badgeGenerating",
35754
- "badgeWritten": "zE6uZW_badgeWritten",
35755
- "createBookIcon": "zE6uZW_createBookIcon",
35756
- "tlSegTrack": "zE6uZW_tlSegTrack",
35757
- "toolStepDetail": "zE6uZW_toolStepDetail",
35758
- "bookSwitchName": "zE6uZW_bookSwitchName",
35759
- "assetGrid": "zE6uZW_assetGrid",
35760
- "panelNavCollapsed": "zE6uZW_panelNavCollapsed",
35761
- "authorPageHero": "zE6uZW_authorPageHero",
35762
- "chapter": "zE6uZW_chapter",
35763
- "chatScroll": "zE6uZW_chatScroll",
35819
+ "assistantStatus": "zE6uZW_assistantStatus",
35820
+ "adaptTextarea": "zE6uZW_adaptTextarea",
35821
+ "progressBookList": "zE6uZW_progressBookList",
35822
+ "diffText": "zE6uZW_diffText",
35823
+ "outlineReadonly": "zE6uZW_outlineReadonly",
35764
35824
  "iconBtn": "zE6uZW_iconBtn",
35765
- "navTab": "zE6uZW_navTab",
35766
- "bookCardProgressFill": "zE6uZW_bookCardProgressFill",
35767
- "bookChipMeta": "zE6uZW_bookChipMeta",
35768
- "readerSegActive": "zE6uZW_readerSegActive",
35769
- "bookCardProgressBar": "zE6uZW_bookCardProgressBar",
35770
- "readerGroup": "zE6uZW_readerGroup",
35771
- "readerChapterMeta": "zE6uZW_readerChapterMeta",
35772
- "dimCardSelected": "zE6uZW_dimCardSelected",
35773
- "tabBar": "zE6uZW_tabBar",
35774
- "button": "zE6uZW_button",
35775
- "progressLine": "zE6uZW_progressLine",
35776
- "dashStageDone": "zE6uZW_dashStageDone",
35777
- "importModalBody": "zE6uZW_importModalBody",
35778
- "assetTextarea": "zE6uZW_assetTextarea",
35779
- "helpTip": "zE6uZW_helpTip",
35825
+ "workflowDotDone": "zE6uZW_workflowDotDone",
35826
+ "entry": "zE6uZW_entry",
35827
+ "dashHeroActionBody": "zE6uZW_dashHeroActionBody",
35828
+ "dashJourneyBar": "zE6uZW_dashJourneyBar",
35829
+ "genreDesc": "zE6uZW_genreDesc",
35830
+ "workflowRow": "zE6uZW_workflowRow",
35831
+ "bookCardBlurb": "zE6uZW_bookCardBlurb",
35832
+ "progressBookFill": "zE6uZW_progressBookFill",
35833
+ "adaptRule": "zE6uZW_adaptRule",
35834
+ "createBookView": "zE6uZW_createBookView",
35835
+ "bookChipRemove": "zE6uZW_bookChipRemove",
35836
+ "readerText": "zE6uZW_readerText",
35837
+ "toolStepError": "zE6uZW_toolStepError",
35838
+ "shelfEmptyTitle": "zE6uZW_shelfEmptyTitle",
35839
+ "spaceBetween": "zE6uZW_spaceBetween",
35840
+ "bookCard": "zE6uZW_bookCard",
35841
+ "diffDel": "zE6uZW_diffDel",
35842
+ "assetCardContent": "zE6uZW_assetCardContent",
35843
+ "panel": "zE6uZW_panel",
35844
+ "todoDanger": "zE6uZW_todoDanger",
35845
+ "statCardDIcon": "zE6uZW_statCardDIcon",
35846
+ "wsEditor": "zE6uZW_wsEditor",
35847
+ "dashGrid": "zE6uZW_dashGrid",
35780
35848
  "authorHome": "zE6uZW_authorHome",
35781
- "progressBar": "zE6uZW_progressBar",
35782
- "importResult": "zE6uZW_importResult",
35783
- "helpTipText": "zE6uZW_helpTipText",
35784
- "wsPage": "zE6uZW_wsPage",
35785
- "authorPageHeader": "zE6uZW_authorPageHeader",
35786
- "coverPreview": "zE6uZW_coverPreview",
35787
- "assetStat": "zE6uZW_assetStat"
35849
+ "badgeGenerating": "zE6uZW_badgeGenerating",
35850
+ "authorRailAbout": "zE6uZW_authorRailAbout",
35851
+ "rowEnd": "zE6uZW_rowEnd",
35852
+ "adaptImpact": "zE6uZW_adaptImpact",
35853
+ "dimCurrent": "zE6uZW_dimCurrent",
35854
+ "legendOld": "zE6uZW_legendOld",
35855
+ "statCardD": "zE6uZW_statCardD",
35856
+ "bookCardCover": "zE6uZW_bookCardCover",
35857
+ "bigProgressBar": "zE6uZW_bigProgressBar",
35858
+ "dashHeroBook": "zE6uZW_dashHeroBook"
35788
35859
  };
35789
35860
  //#endregion
35790
35861
  //#region src/client/panel/ModelManager.tsx
@@ -38145,7 +38216,8 @@ window.__ModuleLoader__.load({
38145
38216
  //#endregion
38146
38217
  //#region src/client/panel/AdaptModeView.tsx
38147
38218
  /**
38148
- * 改编模式:P0 分析 → P1 改编方案(勾选/填新值→映射表/规则/影响) → P2 术语替换执行。
38219
+ * 改编模式 · 分步向导(上传全文主线):
38220
+ * ① 导入全文 → ② 设定卡片/可改范围 → ③ 确认改编维度 → ④ 编辑改编方案 → ⑤ 提炼新书资料 → ⑥ 保存并开始写书。
38149
38221
  */
38150
38222
  const MUTABILITY_LABEL = {
38151
38223
  locked: "🔒 建议保留",
@@ -38166,12 +38238,53 @@ window.__ModuleLoader__.load({
38166
38238
  medium: "中风险",
38167
38239
  low: "低风险"
38168
38240
  };
38169
- function AdaptModeView({ api }) {
38241
+ const SCOPE_LABEL = {
38242
+ name: "人名",
38243
+ realm: "境界/体系",
38244
+ faction: "势力/组织",
38245
+ term: "术语",
38246
+ other: "其他"
38247
+ };
38248
+ const STEPS = [
38249
+ {
38250
+ n: 1,
38251
+ label: "导入全文"
38252
+ },
38253
+ {
38254
+ n: 2,
38255
+ label: "设定卡片"
38256
+ },
38257
+ {
38258
+ n: 3,
38259
+ label: "确认改编维度"
38260
+ },
38261
+ {
38262
+ n: 4,
38263
+ label: "编辑改编方案"
38264
+ },
38265
+ {
38266
+ n: 5,
38267
+ label: "提炼新书资料"
38268
+ },
38269
+ {
38270
+ n: 6,
38271
+ label: "保存并开始写书"
38272
+ }
38273
+ ];
38274
+ function AdaptModeView({ api, onOpenBook }) {
38275
+ const [step, setStep] = (0, react.useState)(1);
38170
38276
  const [text, setText] = (0, react.useState)("");
38171
38277
  const [result, setResult] = (0, react.useState)(null);
38172
38278
  const [edits, setEdits] = (0, react.useState)({});
38173
38279
  const [proposal, setProposal] = (0, react.useState)(null);
38174
38280
  const [executed, setExecuted] = (0, react.useState)(null);
38281
+ const [saved, setSaved] = (0, react.useState)(null);
38282
+ const [materialized, setMaterialized] = (0, react.useState)(null);
38283
+ const [savedMaterialized, setSavedMaterialized] = (0, react.useState)(null);
38284
+ const [chapterCount, setChapterCount] = (0, react.useState)(30);
38285
+ const [rewriteStart, setRewriteStart] = (0, react.useState)(1);
38286
+ const [rewriteEnd, setRewriteEnd] = (0, react.useState)(0);
38287
+ const [rewriteProgress, setRewriteProgress] = (0, react.useState)(null);
38175
38288
  const [busy, setBusy] = (0, react.useState)(false);
38176
38289
  const [busyLabel, setBusyLabel] = (0, react.useState)("");
38177
38290
  const [error, setError] = (0, react.useState)("");
@@ -38196,6 +38309,8 @@ window.__ModuleLoader__.load({
38196
38309
  setError("");
38197
38310
  setProposal(null);
38198
38311
  setExecuted(null);
38312
+ setSaved(null);
38313
+ setMaterialized(null);
38199
38314
  try {
38200
38315
  const res = await api.adaptAnalyze(text);
38201
38316
  setResult(res);
@@ -38205,6 +38320,7 @@ window.__ModuleLoader__.load({
38205
38320
  target: d.candidates?.[0] ?? ""
38206
38321
  };
38207
38322
  setEdits(next);
38323
+ setStep(2);
38208
38324
  } catch (err) {
38209
38325
  setError(err.message);
38210
38326
  } finally {
@@ -38246,6 +38362,8 @@ window.__ModuleLoader__.load({
38246
38362
  setBusyLabel("生成改编方案…");
38247
38363
  setError("");
38248
38364
  setExecuted(null);
38365
+ setSaved(null);
38366
+ setMaterialized(null);
38249
38367
  try {
38250
38368
  const res = await api.adaptPropose({
38251
38369
  text,
@@ -38253,6 +38371,7 @@ window.__ModuleLoader__.load({
38253
38371
  dimensions: result.dimensions
38254
38372
  });
38255
38373
  setProposal(res.proposal);
38374
+ setStep(4);
38256
38375
  } catch (err) {
38257
38376
  setError(err.message);
38258
38377
  } finally {
@@ -38260,6 +38379,59 @@ window.__ModuleLoader__.load({
38260
38379
  setBusyLabel("");
38261
38380
  }
38262
38381
  };
38382
+ const patchMapping = (idx, patch) => {
38383
+ setProposal((prev) => prev === null ? prev : {
38384
+ ...prev,
38385
+ mappings: prev.mappings.map((m, i) => i === idx ? {
38386
+ ...m,
38387
+ ...patch
38388
+ } : m)
38389
+ });
38390
+ };
38391
+ const addMapping = () => {
38392
+ setProposal((prev) => prev === null ? prev : {
38393
+ ...prev,
38394
+ mappings: [...prev.mappings, {
38395
+ source: "",
38396
+ target: "",
38397
+ scope: "other",
38398
+ note: ""
38399
+ }]
38400
+ });
38401
+ };
38402
+ const removeMapping = (idx) => {
38403
+ setProposal((prev) => prev === null ? prev : {
38404
+ ...prev,
38405
+ mappings: prev.mappings.filter((_, i) => i !== idx)
38406
+ });
38407
+ };
38408
+ const patchRule = (key, idx, value) => {
38409
+ setProposal((prev) => prev === null ? prev : {
38410
+ ...prev,
38411
+ rules: {
38412
+ ...prev.rules,
38413
+ [key]: prev.rules[key].map((s, i) => i === idx ? value : s)
38414
+ }
38415
+ });
38416
+ };
38417
+ const addRule = (key) => {
38418
+ setProposal((prev) => prev === null ? prev : {
38419
+ ...prev,
38420
+ rules: {
38421
+ ...prev.rules,
38422
+ [key]: [...prev.rules[key], ""]
38423
+ }
38424
+ });
38425
+ };
38426
+ const removeRule = (key, idx) => {
38427
+ setProposal((prev) => prev === null ? prev : {
38428
+ ...prev,
38429
+ rules: {
38430
+ ...prev.rules,
38431
+ [key]: prev.rules[key].filter((_, i) => i !== idx)
38432
+ }
38433
+ });
38434
+ };
38263
38435
  const execute = async () => {
38264
38436
  if (proposal === null || proposal.mappings.length === 0) {
38265
38437
  setError("请先生成改编方案");
@@ -38268,6 +38440,7 @@ window.__ModuleLoader__.load({
38268
38440
  setBusy(true);
38269
38441
  setBusyLabel("执行术语替换…");
38270
38442
  setError("");
38443
+ setSaved(null);
38271
38444
  try {
38272
38445
  const res = await api.adaptExecute({
38273
38446
  text,
@@ -38282,32 +38455,236 @@ window.__ModuleLoader__.load({
38282
38455
  setBusyLabel("");
38283
38456
  }
38284
38457
  };
38285
- const downloadAdapted = () => {
38458
+ const executeRewrite = async () => {
38459
+ if (proposal === null || proposal.mappings.length === 0) {
38460
+ setError("请先生成改编方案");
38461
+ return;
38462
+ }
38463
+ setBusy(true);
38464
+ setBusyLabel("深度改写(重写引擎)…");
38465
+ setError("");
38466
+ setSaved(null);
38467
+ setExecuted(null);
38468
+ setRewriteProgress(null);
38469
+ try {
38470
+ await api.adaptRewriteStream({
38471
+ text,
38472
+ mappings: proposal.mappings,
38473
+ rules: proposal.rules,
38474
+ mode: "rewrite",
38475
+ startNo: rewriteStart,
38476
+ endNo: rewriteEnd
38477
+ }, (frame) => {
38478
+ if (frame.type === "progress") {
38479
+ setRewriteProgress({
38480
+ completed: frame.completed,
38481
+ total: frame.total,
38482
+ no: frame.no,
38483
+ title: frame.title
38484
+ });
38485
+ setBusyLabel("深度改写中:第 " + frame.completed + "/" + frame.total + " 章…");
38486
+ } else if (frame.type === "done") {
38487
+ setExecuted(frame.result);
38488
+ setRewriteProgress(null);
38489
+ } else if (frame.type === "error") {
38490
+ setError(frame.message);
38491
+ setRewriteProgress(null);
38492
+ }
38493
+ });
38494
+ } catch (err) {
38495
+ setError(err.message);
38496
+ setRewriteProgress(null);
38497
+ } finally {
38498
+ setBusy(false);
38499
+ setBusyLabel("");
38500
+ }
38501
+ };
38502
+ const saveBook = async () => {
38286
38503
  if (executed === null) return;
38287
- const blob = new Blob([executed.adaptedText], { type: "text/markdown;charset=utf-8" });
38504
+ setBusy(true);
38505
+ setBusyLabel("保存为改编新书…");
38506
+ setError("");
38507
+ setSaved(null);
38508
+ try {
38509
+ const base = result?.bookName !== void 0 && result.bookName !== "" ? result.bookName + "·改编版" : "改编版";
38510
+ const res = await api.adaptSave({
38511
+ text: executed.adaptedText,
38512
+ bookName: base,
38513
+ outline: result?.outline
38514
+ });
38515
+ setSaved(res);
38516
+ } catch (err) {
38517
+ setError(err.message);
38518
+ } finally {
38519
+ setBusy(false);
38520
+ setBusyLabel("");
38521
+ }
38522
+ };
38523
+ const materializeBook = async () => {
38524
+ if (proposal === null || proposal.mappings.length === 0) {
38525
+ setError("方案缺少映射条目,请至少保留一条");
38526
+ return;
38527
+ }
38528
+ if (result === null || text.trim().length < 200) {
38529
+ setError("请先完成分析");
38530
+ return;
38531
+ }
38532
+ setBusy(true);
38533
+ setBusyLabel("提炼新书资料…");
38534
+ setError("");
38535
+ setMaterialized(null);
38536
+ setSavedMaterialized(null);
38537
+ try {
38538
+ const base = result.bookName !== "" ? result.bookName + "·改编版" : "改编版";
38539
+ const res = await api.adaptMaterialize({
38540
+ text,
38541
+ bookName: base,
38542
+ outline: result.outline,
38543
+ proposal,
38544
+ chapterCount
38545
+ });
38546
+ setMaterialized(res);
38547
+ setStep(6);
38548
+ } catch (err) {
38549
+ setError(err.message);
38550
+ } finally {
38551
+ setBusy(false);
38552
+ setBusyLabel("");
38553
+ }
38554
+ };
38555
+ const patchMaterial = (patch) => {
38556
+ setMaterialized((prev) => prev === null ? prev : {
38557
+ ...prev,
38558
+ ...patch
38559
+ });
38560
+ };
38561
+ const patchBibleList = (key, idx, value) => {
38562
+ setMaterialized((prev) => prev === null ? prev : {
38563
+ ...prev,
38564
+ bible: {
38565
+ ...prev.bible,
38566
+ [key]: prev.bible[key].map((s, i) => i === idx ? value : s)
38567
+ }
38568
+ });
38569
+ };
38570
+ const addBibleList = (key) => {
38571
+ setMaterialized((prev) => prev === null ? prev : {
38572
+ ...prev,
38573
+ bible: {
38574
+ ...prev.bible,
38575
+ [key]: [...prev.bible[key], ""]
38576
+ }
38577
+ });
38578
+ };
38579
+ const removeBibleList = (key, idx) => {
38580
+ setMaterialized((prev) => prev === null ? prev : {
38581
+ ...prev,
38582
+ bible: {
38583
+ ...prev.bible,
38584
+ [key]: prev.bible[key].filter((_, i) => i !== idx)
38585
+ }
38586
+ });
38587
+ };
38588
+ const patchRoleName = (idx, value) => {
38589
+ setMaterialized((prev) => prev === null ? prev : {
38590
+ ...prev,
38591
+ roles: prev.roles.map((r, i) => i === idx ? {
38592
+ ...r,
38593
+ name: value
38594
+ } : r)
38595
+ });
38596
+ };
38597
+ const patchVolume = (idx, patch) => {
38598
+ setMaterialized((prev) => prev === null ? prev : {
38599
+ ...prev,
38600
+ volumes: prev.volumes.map((v, i) => i === idx ? {
38601
+ ...v,
38602
+ ...patch
38603
+ } : v)
38604
+ });
38605
+ };
38606
+ const saveMaterialized = async () => {
38607
+ if (materialized === null) return;
38608
+ setBusy(true);
38609
+ setBusyLabel("保存新书…");
38610
+ setError("");
38611
+ setSavedMaterialized(null);
38612
+ try {
38613
+ const res = await api.adaptMaterializeSave({
38614
+ bookName: materialized.bookName,
38615
+ outputDir: materialized.outputDir,
38616
+ outline: materialized.outline,
38617
+ bible: materialized.bible,
38618
+ roles: materialized.roles,
38619
+ world: materialized.world,
38620
+ volumes: materialized.volumes,
38621
+ chapters: materialized.chapters
38622
+ });
38623
+ setSavedMaterialized(res);
38624
+ setMaterialized((prev) => prev === null ? prev : {
38625
+ ...prev,
38626
+ book: res.book
38627
+ });
38628
+ } catch (err) {
38629
+ setError(err.message);
38630
+ } finally {
38631
+ setBusy(false);
38632
+ setBusyLabel("");
38633
+ }
38634
+ };
38635
+ const downloadFile = (ext) => {
38636
+ if (executed === null) return;
38637
+ const blob = new Blob([executed.adaptedText], { type: ext === "md" ? "text/markdown;charset=utf-8" : "text/plain;charset=utf-8" });
38288
38638
  const url = URL.createObjectURL(blob);
38289
38639
  const a = document.createElement("a");
38290
38640
  a.href = url;
38291
- a.download = result?.bookName !== void 0 && result.bookName !== "" ? result.bookName + "·改编版.md" : "改编版.md";
38641
+ a.download = (result?.bookName !== void 0 && result.bookName !== "" ? result.bookName + "·改编版" : "改编版") + "." + ext;
38292
38642
  a.click();
38293
38643
  URL.revokeObjectURL(url);
38294
38644
  };
38645
+ const canGo = (n) => {
38646
+ if (n === 1) return true;
38647
+ if (n === 2 || n === 3) return result !== null;
38648
+ if (n === 4) return selectedDims.length > 0;
38649
+ if (n === 5) return proposal !== null && proposal.mappings.length > 0;
38650
+ if (n === 6) return materialized !== null;
38651
+ return false;
38652
+ };
38295
38653
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38296
38654
  className: panel_module_css_default.authorPageBody,
38297
38655
  children: [
38298
38656
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38299
38657
  className: panel_module_css_default.card + " " + panel_module_css_default.settingsCard,
38300
- style: { gap: "var(--nf-space-6)" },
38658
+ style: { gap: "var(--nf-space-10)" },
38301
38659
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
38302
38660
  className: panel_module_css_default.panelTitle,
38303
38661
  style: { margin: 0 },
38304
38662
  children: "🎬 改编模式"
38305
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
38306
- className: panel_module_css_default.meta,
38307
- children: "上传全文 → 分析可改范围 → 勾选/填新值 → 生成映射表 → 术语替换执行。"
38663
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
38664
+ style: {
38665
+ display: "flex",
38666
+ flexWrap: "wrap",
38667
+ gap: 6
38668
+ },
38669
+ children: STEPS.map((s) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
38670
+ type: "button",
38671
+ className: panel_module_css_default.button + " " + panel_module_css_default.buttonSmall + (step === s.n ? " " + panel_module_css_default.buttonPrimary : ""),
38672
+ disabled: !canGo(s.n),
38673
+ onClick: () => setStep(s.n),
38674
+ title: canGo(s.n) ? "第 " + s.n + " 步:" + s.label : "需先完成前置步骤",
38675
+ children: [
38676
+ s.n,
38677
+ ". ",
38678
+ s.label
38679
+ ]
38680
+ }, s.n))
38308
38681
  })]
38309
38682
  }),
38310
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38683
+ error !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
38684
+ className: panel_module_css_default.noticeError,
38685
+ children: error
38686
+ }),
38687
+ step === 1 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38311
38688
  className: panel_module_css_default.adaptInputCard,
38312
38689
  children: [
38313
38690
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
@@ -38315,7 +38692,7 @@ window.__ModuleLoader__.load({
38315
38692
  style: { justifyContent: "space-between" },
38316
38693
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
38317
38694
  className: panel_module_css_default.meta,
38318
- children: "粘贴全文,或上传 txt/md 文件"
38695
+ children: "① 粘贴全文,或上传 txt/md 文件"
38319
38696
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
38320
38697
  type: "button",
38321
38698
  className: panel_module_css_default.button + " " + panel_module_css_default.buttonSmall,
@@ -38369,28 +38746,7 @@ window.__ModuleLoader__.load({
38369
38746
  })
38370
38747
  ]
38371
38748
  }),
38372
- error !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
38373
- className: panel_module_css_default.noticeError,
38374
- children: error
38375
- }),
38376
- result === null ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38377
- className: panel_module_css_default.shelfEmpty,
38378
- style: { minHeight: 160 },
38379
- children: [
38380
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
38381
- className: panel_module_css_default.shelfEmptyIcon,
38382
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.FileText, { size: 30 })
38383
- }),
38384
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
38385
- className: panel_module_css_default.shelfEmptyTitle,
38386
- children: "等待分析"
38387
- }),
38388
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
38389
- className: panel_module_css_default.meta,
38390
- children: "分析会读取全文并提炼「原文设定卡片」与「可改范围矩阵」。"
38391
- })
38392
- ]
38393
- }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38749
+ step === 2 && result !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38394
38750
  className: panel_module_css_default.adaptResult,
38395
38751
  children: [
38396
38752
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
@@ -38399,7 +38755,7 @@ window.__ModuleLoader__.load({
38399
38755
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("h3", {
38400
38756
  style: { margin: 0 },
38401
38757
  children: [
38402
- "《",
38758
+ "② 《",
38403
38759
  result.bookName,
38404
38760
  "》 · ",
38405
38761
  result.chapters,
@@ -38417,10 +38773,74 @@ window.__ModuleLoader__.load({
38417
38773
  children: result.outline
38418
38774
  })]
38419
38775
  }),
38776
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
38777
+ className: panel_module_css_default.adaptMatrix,
38778
+ children: result.dimensions.map((d, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38779
+ className: panel_module_css_default.dimCard,
38780
+ children: [
38781
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38782
+ className: panel_module_css_default.dimCardHead,
38783
+ children: [
38784
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
38785
+ className: panel_module_css_default.dimTitle,
38786
+ children: d.title
38787
+ }),
38788
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
38789
+ className: panel_module_css_default.badge,
38790
+ style: { color: MUTABILITY_CLS[d.mutability] ?? "var(--nf-muted)" },
38791
+ children: MUTABILITY_LABEL[d.mutability] ?? d.mutability
38792
+ }),
38793
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
38794
+ className: panel_module_css_default.meta,
38795
+ children: ["风险:", RISK_LABEL[d.risk] ?? d.risk]
38796
+ })
38797
+ ]
38798
+ }),
38799
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38800
+ className: panel_module_css_default.dimCurrent,
38801
+ children: [
38802
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { children: "当前值" }),
38803
+ ":",
38804
+ d.current
38805
+ ]
38806
+ }),
38807
+ d.evidence !== void 0 && d.evidence !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38808
+ className: panel_module_css_default.meta,
38809
+ children: ["证据:", d.evidence]
38810
+ }),
38811
+ (d.candidates ?? []).length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38812
+ className: panel_module_css_default.meta,
38813
+ children: ["候选:", (d.candidates ?? []).join(" / ")]
38814
+ }),
38815
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38816
+ className: panel_module_css_default.meta,
38817
+ children: ["影响:", d.impact]
38818
+ })
38819
+ ]
38820
+ }, d.key + "-" + i))
38821
+ }),
38822
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
38823
+ className: panel_module_css_default.rowEnd,
38824
+ style: { justifyContent: "flex-end" },
38825
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
38826
+ type: "button",
38827
+ className: panel_module_css_default.button + " " + panel_module_css_default.buttonPrimary,
38828
+ onClick: () => setStep(3),
38829
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.ArrowRight, {
38830
+ size: 14,
38831
+ style: { verticalAlign: -2 }
38832
+ }), " 下一步:③ 确认改编维度"]
38833
+ })
38834
+ })
38835
+ ]
38836
+ }),
38837
+ step === 3 && result !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38838
+ className: panel_module_css_default.adaptResult,
38839
+ children: [
38420
38840
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38421
38841
  className: panel_module_css_default.authorPageHeader,
38422
38842
  style: { alignItems: "center" },
38423
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { children: "可改范围矩阵(勾选要改 + 填新值)" }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
38843
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { children: "③ 确认改编维度(勾选要改 + 填新值)" }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
38424
38844
  type: "button",
38425
38845
  className: panel_module_css_default.button + " " + panel_module_css_default.buttonPrimary,
38426
38846
  onClick: () => {
@@ -38477,28 +38897,21 @@ window.__ModuleLoader__.load({
38477
38897
  }),
38478
38898
  d.mutability !== "locked" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38479
38899
  className: panel_module_css_default.dimEdit,
38480
- children: [
38481
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
38482
- type: "checkbox",
38483
- checked: enabled,
38484
- onChange: (e2) => setEdit(d.key, { enabled: e2.target.checked })
38485
- }),
38486
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
38487
- className: panel_module_css_default.input,
38488
- value: target,
38489
- disabled: !enabled,
38490
- placeholder: "改为什么?",
38491
- onChange: (e2) => setEdit(d.key, { target: e2.target.value })
38492
- }),
38493
- (d.candidates ?? []).length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
38494
- className: panel_module_css_default.meta,
38495
- children: ["候选:", (d.candidates ?? []).join(" / ")]
38496
- })
38497
- ]
38900
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
38901
+ type: "checkbox",
38902
+ checked: enabled,
38903
+ onChange: (e2) => setEdit(d.key, { enabled: e2.target.checked })
38904
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
38905
+ className: panel_module_css_default.input,
38906
+ value: target,
38907
+ disabled: !enabled,
38908
+ placeholder: "改为什么?",
38909
+ onChange: (e2) => setEdit(d.key, { target: e2.target.value })
38910
+ })]
38498
38911
  }),
38499
- d.evidence !== void 0 && d.evidence !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38912
+ (d.candidates ?? []).length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38500
38913
  className: panel_module_css_default.meta,
38501
- children: ["证据:", d.evidence]
38914
+ children: ["候选:", (d.candidates ?? []).join(" / ")]
38502
38915
  }),
38503
38916
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38504
38917
  className: panel_module_css_default.meta,
@@ -38508,116 +38921,571 @@ window.__ModuleLoader__.load({
38508
38921
  }, d.key + "-" + i);
38509
38922
  })
38510
38923
  }),
38511
- proposal !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38512
- className: panel_module_css_default.adaptProposal,
38924
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
38925
+ className: panel_module_css_default.rowEnd,
38926
+ style: { justifyContent: "space-between" },
38927
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
38928
+ type: "button",
38929
+ className: panel_module_css_default.button,
38930
+ onClick: () => setStep(2),
38931
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.ArrowLeft, {
38932
+ size: 13,
38933
+ style: { verticalAlign: -2 }
38934
+ }), " 上一步"]
38935
+ })
38936
+ })
38937
+ ]
38938
+ }),
38939
+ step === 4 && proposal !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38940
+ className: panel_module_css_default.adaptProposal,
38941
+ children: [
38942
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38943
+ className: panel_module_css_default.authorPageHeader,
38944
+ style: { alignItems: "center" },
38945
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { children: "④ 编辑改编方案(映射/规则可增删改)" }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
38946
+ type: "button",
38947
+ className: panel_module_css_default.button + " " + panel_module_css_default.buttonPrimary,
38948
+ onClick: () => setStep(5),
38949
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.ArrowRight, {
38950
+ size: 14,
38951
+ style: { verticalAlign: -2 }
38952
+ }), " 下一步:⑤ 提炼新书资料"]
38953
+ })]
38954
+ }),
38955
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h4", {
38956
+ style: { margin: "10px 0 4px" },
38957
+ children: "映射表"
38958
+ }),
38959
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
38960
+ className: panel_module_css_default.adaptTableScroll,
38961
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("table", {
38962
+ className: panel_module_css_default.adaptTable,
38963
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("thead", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("tr", { children: [
38964
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", { children: "原值" }),
38965
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", { children: "新值" }),
38966
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", { children: "范围" }),
38967
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", { children: "说明" }),
38968
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", {})
38969
+ ] }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("tbody", { children: proposal.mappings.map((m, idx) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("tr", { children: [
38970
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
38971
+ className: panel_module_css_default.input + " " + panel_module_css_default.adaptCell,
38972
+ value: m.source,
38973
+ placeholder: "原值",
38974
+ onChange: (e) => patchMapping(idx, { source: e.target.value })
38975
+ }) }),
38976
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
38977
+ className: panel_module_css_default.input + " " + panel_module_css_default.adaptCell,
38978
+ value: m.target,
38979
+ placeholder: "新值",
38980
+ onChange: (e) => patchMapping(idx, { target: e.target.value })
38981
+ }) }),
38982
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("select", {
38983
+ className: panel_module_css_default.input + " " + panel_module_css_default.adaptCell,
38984
+ value: m.scope,
38985
+ onChange: (e) => patchMapping(idx, { scope: e.target.value }),
38986
+ children: Object.keys(SCOPE_LABEL).map((s) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
38987
+ value: s,
38988
+ children: SCOPE_LABEL[s]
38989
+ }, s))
38990
+ }) }),
38991
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
38992
+ className: panel_module_css_default.input + " " + panel_module_css_default.adaptCell,
38993
+ value: m.note ?? "",
38994
+ placeholder: "说明",
38995
+ onChange: (e) => patchMapping(idx, { note: e.target.value })
38996
+ }) }),
38997
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
38998
+ type: "button",
38999
+ className: panel_module_css_default.iconBtn,
39000
+ onClick: () => removeMapping(idx),
39001
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Trash2, { size: 14 })
39002
+ }) })
39003
+ ] }, idx)) })]
39004
+ })
39005
+ }),
39006
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
39007
+ className: panel_module_css_default.rowEnd,
39008
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
39009
+ type: "button",
39010
+ className: panel_module_css_default.button + " " + panel_module_css_default.buttonSmall,
39011
+ onClick: addMapping,
39012
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Plus, {
39013
+ size: 13,
39014
+ style: { verticalAlign: -2 }
39015
+ }), " 加一条映射"]
39016
+ })
39017
+ }),
39018
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h4", {
39019
+ style: { margin: "10px 0 4px" },
39020
+ children: "改编规则"
39021
+ }),
39022
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
39023
+ className: panel_module_css_default.adaptRules,
38513
39024
  children: [
38514
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38515
- className: panel_module_css_default.authorPageHeader,
38516
- style: { alignItems: "center" },
38517
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { children: "改编方案" }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
39025
+ "preserve",
39026
+ "change",
39027
+ "constraints"
39028
+ ].map((key) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
39029
+ className: panel_module_css_default.adaptRule,
39030
+ children: [
39031
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { children: key === "preserve" ? "📌 保留" : key === "change" ? "✏️ 允许变" : "🚫 红线" }),
39032
+ proposal.rules[key].map((s, idx) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
39033
+ className: panel_module_css_default.adaptRuleRow,
39034
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
39035
+ className: panel_module_css_default.input,
39036
+ value: s,
39037
+ onChange: (e) => patchRule(key, idx, e.target.value)
39038
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
39039
+ type: "button",
39040
+ className: panel_module_css_default.iconBtn,
39041
+ onClick: () => removeRule(key, idx),
39042
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Trash2, { size: 13 })
39043
+ })]
39044
+ }, idx)),
39045
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
38518
39046
  type: "button",
38519
- className: panel_module_css_default.button + " " + panel_module_css_default.buttonPrimary,
38520
- onClick: () => {
38521
- execute();
38522
- },
38523
- disabled: busy,
39047
+ className: panel_module_css_default.button + " " + panel_module_css_default.buttonSmall,
39048
+ onClick: () => addRule(key),
39049
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Plus, {
39050
+ size: 12,
39051
+ style: { verticalAlign: -2 }
39052
+ }), " 加一条"]
39053
+ })
39054
+ ]
39055
+ }, key))
39056
+ }),
39057
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h4", {
39058
+ style: { margin: "10px 0 4px" },
39059
+ children: "联动影响"
39060
+ }),
39061
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
39062
+ className: panel_module_css_default.adaptImpacts,
39063
+ children: proposal.impacts.map((im, i3) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
39064
+ className: panel_module_css_default.adaptImpact,
39065
+ children: [
39066
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("b", {
39067
+ style: { color: im.risk === "high" ? "var(--nf-error)" : im.risk === "medium" ? "var(--nf-warn)" : "var(--nf-info)" },
38524
39068
  children: [
38525
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Play, {
38526
- size: 13,
38527
- style: { verticalAlign: -2 }
38528
- }),
38529
- " ",
38530
- busy && busyLabel === "执行术语替换…" ? "执行中…" : "执行改编(术语替换)"
39069
+ "[",
39070
+ RISK_LABEL[im.risk] ?? im.risk,
39071
+ "]"
38531
39072
  ]
38532
- })]
38533
- }),
38534
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h4", {
38535
- style: { margin: "10px 0 4px" },
38536
- children: "映射表"
38537
- }),
38538
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("table", {
38539
- className: panel_module_css_default.adaptTable,
38540
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("thead", { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("tr", { children: [
38541
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", { children: "原值" }),
38542
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", { children: "新值" }),
38543
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("th", { children: "范围" })
38544
- ] }) }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("tbody", { children: proposal.mappings.map((m, i2) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("tr", { children: [
38545
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", { children: m.source }),
38546
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", { children: m.target }),
38547
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("td", { children: m.scope })
38548
- ] }, i2)) })]
38549
- }),
38550
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h4", {
38551
- style: { margin: "10px 0 4px" },
38552
- children: "改编规则"
38553
- }),
38554
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38555
- className: panel_module_css_default.meta,
38556
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { children: "保留:" }), proposal.rules.preserve.join(";") || "—"]
38557
- }),
39073
+ }),
39074
+ " ",
39075
+ im.item,
39076
+ ":",
39077
+ im.detail,
39078
+ im.chapters !== void 0 && im.chapters.length > 0 ? "(章:" + im.chapters.join(",") + ")" : ""
39079
+ ]
39080
+ }, i3))
39081
+ }),
39082
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", {
39083
+ className: panel_module_css_default.adaptOutline,
39084
+ children: [
39085
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("summary", { children: "快速路径:仅术语替换 / 深度改写(重写引擎)(可选)" }),
38558
39086
  /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38559
- className: panel_module_css_default.meta,
38560
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { children: "允许变:" }), proposal.rules.change.join(";") || "—"]
39087
+ className: panel_module_css_default.rowEnd,
39088
+ style: {
39089
+ gap: 8,
39090
+ flexWrap: "wrap"
39091
+ },
39092
+ children: [
39093
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
39094
+ type: "button",
39095
+ className: panel_module_css_default.button,
39096
+ onClick: () => {
39097
+ execute();
39098
+ },
39099
+ disabled: busy,
39100
+ children: [
39101
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Play, {
39102
+ size: 13,
39103
+ style: { verticalAlign: -2 }
39104
+ }),
39105
+ " ",
39106
+ busy && busyLabel === "执行术语替换…" ? "执行中…" : "执行术语替换"
39107
+ ]
39108
+ }),
39109
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
39110
+ type: "button",
39111
+ className: panel_module_css_default.button + " " + panel_module_css_default.buttonPrimary,
39112
+ onClick: () => {
39113
+ executeRewrite();
39114
+ },
39115
+ disabled: busy,
39116
+ children: [
39117
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Wand2, {
39118
+ size: 13,
39119
+ style: { verticalAlign: -2 }
39120
+ }),
39121
+ " ",
39122
+ busy && busyLabel === "深度改写(重写引擎)…" ? "改写中…" : "深度改写(重写引擎)"
39123
+ ]
39124
+ }),
39125
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
39126
+ className: panel_module_css_default.meta,
39127
+ children: "起始"
39128
+ }),
39129
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
39130
+ type: "number",
39131
+ className: panel_module_css_default.input + " " + panel_module_css_default.adaptCell,
39132
+ style: { width: 64 },
39133
+ value: rewriteStart,
39134
+ onChange: (e) => setRewriteStart(Math.max(1, Math.min(Number(e.target.value) || 1, 5e3)))
39135
+ }),
39136
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
39137
+ className: panel_module_css_default.meta,
39138
+ children: "至"
39139
+ }),
39140
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
39141
+ type: "number",
39142
+ className: panel_module_css_default.input + " " + panel_module_css_default.adaptCell,
39143
+ style: { width: 64 },
39144
+ value: rewriteEnd,
39145
+ onChange: (e) => setRewriteEnd(Math.max(0, Math.min(Number(e.target.value) || 0, 5e3)))
39146
+ }),
39147
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
39148
+ className: panel_module_css_default.meta,
39149
+ children: "章(0=到末尾)"
39150
+ })
39151
+ ]
38561
39152
  }),
38562
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
39153
+ rewriteProgress !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38563
39154
  className: panel_module_css_default.meta,
38564
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { children: "红线:" }), proposal.rules.constraints.join(";") || "—"]
38565
- }),
38566
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h4", {
38567
- style: { margin: "10px 0 4px" },
38568
- children: "联动影响"
39155
+ children: [
39156
+ "⏳ 改写中:第 ",
39157
+ rewriteProgress.completed,
39158
+ "/",
39159
+ rewriteProgress.total,
39160
+ " 章(当前:第 ",
39161
+ rewriteProgress.no,
39162
+ " 章《",
39163
+ rewriteProgress.title,
39164
+ "》)"
39165
+ ]
38569
39166
  }),
38570
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
38571
- className: panel_module_css_default.adaptImpacts,
38572
- children: proposal.impacts.map((im, i3) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38573
- className: panel_module_css_default.adaptImpact,
39167
+ executed !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
39168
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
39169
+ className: panel_module_css_default.meta,
39170
+ children: executed.mode === "rewrite" ? "重写完成:" + (executed.rewritten ?? []).length + " 章;保留原章:" + ((executed.skipped ?? []).join("、") || "无") : "命中:" + (executed.hits.filter((h) => h.count > 0).map((h) => h.source + "→" + h.target + "×" + h.count).join(",") || "无命中")
39171
+ }),
39172
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
39173
+ className: panel_module_css_default.rowEnd,
39174
+ style: {
39175
+ gap: 8,
39176
+ flexWrap: "wrap"
39177
+ },
38574
39178
  children: [
38575
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("b", {
38576
- style: { color: im.risk === "high" ? "var(--nf-error)" : im.risk === "medium" ? "var(--nf-warn)" : "var(--nf-info)" },
38577
- children: [
38578
- "[",
38579
- RISK_LABEL[im.risk] ?? im.risk,
38580
- "]"
38581
- ]
39179
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
39180
+ type: "button",
39181
+ className: panel_module_css_default.button + " " + panel_module_css_default.buttonSmall,
39182
+ onClick: () => downloadFile("md"),
39183
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.FileDown, {
39184
+ size: 13,
39185
+ style: { verticalAlign: -2 }
39186
+ }), " 下载 .md"]
38582
39187
  }),
38583
- " ",
38584
- im.item,
38585
- ":",
38586
- im.detail,
38587
- im.chapters !== void 0 && im.chapters.length > 0 ? `(章:${im.chapters.join(",")})` : ""
39188
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
39189
+ type: "button",
39190
+ className: panel_module_css_default.button + " " + panel_module_css_default.buttonSmall,
39191
+ onClick: () => downloadFile("txt"),
39192
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Download, {
39193
+ size: 13,
39194
+ style: { verticalAlign: -2 }
39195
+ }), " 下载 .txt"]
39196
+ }),
39197
+ executed.mode === "rewrite" ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
39198
+ type: "button",
39199
+ className: panel_module_css_default.button + " " + panel_module_css_default.buttonSmall,
39200
+ onClick: () => {
39201
+ setText(executed.adaptedText);
39202
+ setExecuted(null);
39203
+ setSaved(null);
39204
+ setStep(5);
39205
+ },
39206
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Wand2, {
39207
+ size: 13,
39208
+ style: { verticalAlign: -2 }
39209
+ }), " 用改写结果继续提炼新书"]
39210
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
39211
+ type: "button",
39212
+ className: panel_module_css_default.button + " " + panel_module_css_default.buttonSmall,
39213
+ onClick: () => {
39214
+ saveBook();
39215
+ },
39216
+ disabled: busy,
39217
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Save, {
39218
+ size: 13,
39219
+ style: { verticalAlign: -2 }
39220
+ }), " 保存为新书(改写全文)"]
39221
+ })] }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
39222
+ type: "button",
39223
+ className: panel_module_css_default.button + " " + panel_module_css_default.buttonSmall,
39224
+ onClick: () => {
39225
+ saveBook();
39226
+ },
39227
+ disabled: busy,
39228
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Save, {
39229
+ size: 13,
39230
+ style: { verticalAlign: -2 }
39231
+ }), " 保存为新书(全文替换)"]
39232
+ })
38588
39233
  ]
38589
- }, i3))
39234
+ }),
39235
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", {
39236
+ className: panel_module_css_default.adaptOutline,
39237
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("summary", { children: [executed.mode === "rewrite" ? "改写后正文预览" : "替换后正文预览", "(点击展开)"] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("pre", {
39238
+ className: panel_module_css_default.adaptOutlinePre,
39239
+ children: executed.adaptedText.slice(0, 8e3)
39240
+ })]
39241
+ })
39242
+ ] }),
39243
+ saved !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
39244
+ className: panel_module_css_default.noticeSuccess,
39245
+ children: [
39246
+ "✅ 已保存为新书《",
39247
+ saved.bookName,
39248
+ "》(",
39249
+ saved.chapters,
39250
+ " 章)。原书未改动。",
39251
+ onOpenBook !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
39252
+ type: "button",
39253
+ className: panel_module_css_default.button + " " + panel_module_css_default.buttonSmall,
39254
+ onClick: () => onOpenBook(saved.book.id),
39255
+ children: "打开新书"
39256
+ })
39257
+ ]
39258
+ }),
39259
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
39260
+ className: panel_module_css_default.meta,
39261
+ children: "提示:「深度改写」逐章 LLM 重写(耗额度,适合结构性改编);「仅替换」更快但只换词。若想生成「待写新书」,请在上方继续「⑤ 提炼新书资料」;点「用改写结果继续提炼新书」则让提炼基于改写后正文。"
38590
39262
  })
38591
39263
  ]
38592
39264
  }),
38593
- executed !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38594
- className: panel_module_css_default.adaptProposal,
39265
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
39266
+ className: panel_module_css_default.rowEnd,
39267
+ style: { justifyContent: "space-between" },
39268
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
39269
+ type: "button",
39270
+ className: panel_module_css_default.button,
39271
+ onClick: () => setStep(3),
39272
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.ArrowLeft, {
39273
+ size: 13,
39274
+ style: { verticalAlign: -2 }
39275
+ }), " 上一步"]
39276
+ })
39277
+ })
39278
+ ]
39279
+ }),
39280
+ step === 5 && proposal !== null && result !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
39281
+ className: panel_module_css_default.adaptProposal,
39282
+ children: [
39283
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
39284
+ className: panel_module_css_default.authorPageHeader,
39285
+ style: { alignItems: "center" },
39286
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { children: "⑤ 提炼新书资料(预览,暂不保存)" }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
39287
+ type: "button",
39288
+ className: panel_module_css_default.button + " " + panel_module_css_default.buttonPrimary,
39289
+ onClick: () => {
39290
+ materializeBook();
39291
+ },
39292
+ disabled: busy,
39293
+ children: [
39294
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Wand2, {
39295
+ size: 14,
39296
+ style: { verticalAlign: -2 }
39297
+ }),
39298
+ " ",
39299
+ busy && busyLabel === "提炼新书资料…" ? "提炼中…" : "提炼新书资料(预览)"
39300
+ ]
39301
+ })]
39302
+ }),
39303
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
39304
+ className: panel_module_css_default.meta,
38595
39305
  children: [
38596
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
38597
- className: panel_module_css_default.authorPageHeader,
38598
- style: { alignItems: "center" },
38599
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { children: "改编结果(术语替换)" }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
39306
+ "将基于编辑后的映射/规则,从源文提炼:改编后总纲、设定圣经(道藏)、角色库、大世界、卷计划、章节计划。生成后到第⑥步可微调,确认后再保存为《",
39307
+ result.bookName,
39308
+ "·改编版》的待写新书(章节为 pending,随后可在小说工坊逐章生成)。"
39309
+ ]
39310
+ }),
39311
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
39312
+ className: panel_module_css_default.rowEnd,
39313
+ style: { gap: 8 },
39314
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
39315
+ className: panel_module_css_default.meta,
39316
+ children: "拟规划章节数"
39317
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
39318
+ type: "number",
39319
+ className: panel_module_css_default.input + " " + panel_module_css_default.adaptCell,
39320
+ style: { width: 90 },
39321
+ value: chapterCount,
39322
+ onChange: (e) => setChapterCount(Math.max(1, Math.min(Number(e.target.value) || 30, 500)))
39323
+ })]
39324
+ }),
39325
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
39326
+ className: panel_module_css_default.rowEnd,
39327
+ style: { justifyContent: "space-between" },
39328
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
39329
+ type: "button",
39330
+ className: panel_module_css_default.button,
39331
+ onClick: () => setStep(4),
39332
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.ArrowLeft, {
39333
+ size: 13,
39334
+ style: { verticalAlign: -2 }
39335
+ }), " 上一步"]
39336
+ })
39337
+ })
39338
+ ]
39339
+ }),
39340
+ step === 6 && materialized !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
39341
+ className: panel_module_css_default.adaptProposal,
39342
+ children: [
39343
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
39344
+ className: panel_module_css_default.authorPageHeader,
39345
+ style: { alignItems: "center" },
39346
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { children: "⑥ 预览与微调(保存为新书)" }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
39347
+ type: "button",
39348
+ className: panel_module_css_default.button + " " + panel_module_css_default.buttonPrimary,
39349
+ onClick: () => {
39350
+ saveMaterialized();
39351
+ },
39352
+ disabled: busy || savedMaterialized !== null,
39353
+ children: [
39354
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Save, {
39355
+ size: 14,
39356
+ style: { verticalAlign: -2 }
39357
+ }),
39358
+ " ",
39359
+ busy ? "保存中…" : "保存为新书"
39360
+ ]
39361
+ })]
39362
+ }),
39363
+ savedMaterialized !== null && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
39364
+ className: panel_module_css_default.noticeSuccess,
39365
+ children: [
39366
+ "✅ 已保存为新书《",
39367
+ savedMaterialized.bookName,
39368
+ "》(",
39369
+ savedMaterialized.chapters,
39370
+ " 章待写)。原书未改动。",
39371
+ onOpenBook !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
39372
+ type: "button",
39373
+ className: panel_module_css_default.button + " " + panel_module_css_default.buttonSmall,
39374
+ onClick: () => onOpenBook(savedMaterialized.book.id),
39375
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.BookOpen, {
39376
+ size: 14,
39377
+ style: { verticalAlign: -2 }
39378
+ }), " 打开新书开始编写"]
39379
+ })
39380
+ ]
39381
+ }),
39382
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
39383
+ className: panel_module_css_default.meta,
39384
+ children: "可微调以下资料后再保存:总纲、道藏、角色名、卷计划。保存后即为「待写新书」,可到小说工坊逐章生成。"
39385
+ }),
39386
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h4", {
39387
+ style: { margin: "10px 0 4px" },
39388
+ children: "改编后总纲"
39389
+ }),
39390
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
39391
+ className: panel_module_css_default.input + " " + panel_module_css_default.adaptTextarea,
39392
+ value: materialized.outline,
39393
+ onChange: (e) => patchMaterial({ outline: e.target.value })
39394
+ }),
39395
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h4", {
39396
+ style: { margin: "10px 0 4px" },
39397
+ children: "设定圣经(道藏)"
39398
+ }),
39399
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
39400
+ className: panel_module_css_default.adaptRules,
39401
+ children: [
39402
+ "worldRules",
39403
+ "redLines",
39404
+ "style"
39405
+ ].map((key) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
39406
+ className: panel_module_css_default.adaptRule,
39407
+ children: [
39408
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { children: key === "worldRules" ? "🌍 世界观规则" : key === "redLines" ? "🚫 红线" : "✒️ 风格" }),
39409
+ materialized.bible[key].map((s, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
39410
+ className: panel_module_css_default.adaptRuleRow,
39411
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
39412
+ className: panel_module_css_default.input,
39413
+ value: s,
39414
+ onChange: (e) => patchBibleList(key, i, e.target.value)
39415
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
39416
+ type: "button",
39417
+ className: panel_module_css_default.iconBtn,
39418
+ onClick: () => removeBibleList(key, i),
39419
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Trash2, { size: 13 })
39420
+ })]
39421
+ }, i)),
39422
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
38600
39423
  type: "button",
38601
39424
  className: panel_module_css_default.button + " " + panel_module_css_default.buttonSmall,
38602
- onClick: downloadAdapted,
38603
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Download, {
38604
- size: 13,
39425
+ onClick: () => addBibleList(key),
39426
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Plus, {
39427
+ size: 12,
38605
39428
  style: { verticalAlign: -2 }
38606
- }), " 下载改编版"]
38607
- })]
38608
- }),
38609
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
39429
+ }), " 加一条"]
39430
+ })
39431
+ ]
39432
+ }, key))
39433
+ }),
39434
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h4", {
39435
+ style: { margin: "10px 0 4px" },
39436
+ children: "角色库(可改名)"
39437
+ }),
39438
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
39439
+ className: panel_module_css_default.adaptRules,
39440
+ children: materialized.roles.map((r, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
39441
+ className: panel_module_css_default.adaptRuleRow,
39442
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
39443
+ className: panel_module_css_default.input,
39444
+ value: r.name,
39445
+ onChange: (e) => patchRoleName(i, e.target.value)
39446
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
38610
39447
  className: panel_module_css_default.meta,
38611
- children: ["命中:", executed.hits.filter((h) => h.count > 0).map((h) => h.source + "→" + h.target + "×" + h.count).join(",") || "无命中"]
38612
- }),
38613
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", {
38614
- className: panel_module_css_default.adaptOutline,
38615
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("summary", { children: "改编正文预览(点击展开)" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("pre", {
38616
- className: panel_module_css_default.adaptOutlinePre,
38617
- children: executed.adaptedText.slice(0, 8e3)
38618
- })]
38619
- })
38620
- ]
39448
+ children: r.identity.slice(0, 40)
39449
+ })]
39450
+ }, i))
39451
+ }),
39452
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h4", {
39453
+ style: { margin: "10px 0 4px" },
39454
+ children: "卷计划"
39455
+ }),
39456
+ materialized.volumes.map((v, i) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
39457
+ className: panel_module_css_default.adaptRuleRow,
39458
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
39459
+ className: panel_module_css_default.input,
39460
+ value: v.title,
39461
+ onChange: (e) => patchVolume(i, { title: e.target.value }),
39462
+ style: { width: "40%" }
39463
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
39464
+ className: panel_module_css_default.input,
39465
+ value: v.summary,
39466
+ onChange: (e) => patchVolume(i, { summary: e.target.value })
39467
+ })]
39468
+ }, i)),
39469
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h4", {
39470
+ style: { margin: "10px 0 4px" },
39471
+ children: "章节计划(只读;可回第⑤步改章节数重新提炼)"
39472
+ }),
39473
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
39474
+ className: panel_module_css_default.meta,
39475
+ children: materialized.chapters.map((c) => "第" + c.no + "章 " + c.title).join("、") || "—"
39476
+ }),
39477
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
39478
+ className: panel_module_css_default.rowEnd,
39479
+ style: { justifyContent: "space-between" },
39480
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
39481
+ type: "button",
39482
+ className: panel_module_css_default.button,
39483
+ onClick: () => setStep(5),
39484
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.ArrowLeft, {
39485
+ size: 13,
39486
+ style: { verticalAlign: -2 }
39487
+ }), " 上一步"]
39488
+ })
38621
39489
  })
38622
39490
  ]
38623
39491
  })
@@ -38637,6 +39505,7 @@ window.__ModuleLoader__.load({
38637
39505
  genre: "题材",
38638
39506
  roleTemplate: "角色模板",
38639
39507
  worldTemplate: "世界观模板",
39508
+ plotBeat: "剧情桥段",
38640
39509
  custom: "自定义"
38641
39510
  };
38642
39511
  const KIND_OPTIONS = Object.keys(KIND_LABELS);
@@ -38647,6 +39516,7 @@ window.__ModuleLoader__.load({
38647
39516
  genre: "var(--nf-info)",
38648
39517
  roleTemplate: "var(--nf-accent)",
38649
39518
  worldTemplate: "var(--nf-warn)",
39519
+ plotBeat: "var(--nf-accent)",
38650
39520
  custom: "var(--nf-muted)"
38651
39521
  };
38652
39522
  /** 计算资产的分组(分类):题材按顶层题材名('/' 之前),其余按类型。 */
@@ -38804,7 +39674,7 @@ window.__ModuleLoader__.load({
38804
39674
  importDefaults();
38805
39675
  },
38806
39676
  disabled: busy,
38807
- title: "把书架里所有书的写作资产/角色 + 内置题材/反AI/风格模板/推进模式批量导入",
39677
+ title: "把书架里所有书的写作资产/角色批量沉淀到作者资产库(内置库请到全局写作资产库浏览/套用)",
38808
39678
  children: "导入默认资产"
38809
39679
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
38810
39680
  type: "button",
@@ -39029,6 +39899,334 @@ window.__ModuleLoader__.load({
39029
39899
  });
39030
39900
  }
39031
39901
  //#endregion
39902
+ //#region src/client/panel/GlobalAssetLibraryView.tsx
39903
+ /**
39904
+ * 全局写作资产库:只读浏览插件内置的公共资产(题材/反AI规则/风格模板/推进模式)。
39905
+ * 内置库为固定内容;实际绑定到某本书在「创作资产」页。
39906
+ */
39907
+ function GlobalAssetLibraryView({ api }) {
39908
+ const [data, setData] = (0, react.useState)(null);
39909
+ const [error, setError] = (0, react.useState)("");
39910
+ const [tab, setTab] = (0, react.useState)("genre");
39911
+ (0, react.useEffect)(() => {
39912
+ let cancelled = false;
39913
+ (async () => {
39914
+ try {
39915
+ const res = await api.assets();
39916
+ if (!cancelled) setData(res);
39917
+ } catch (err) {
39918
+ if (!cancelled) setError(err.message);
39919
+ }
39920
+ })();
39921
+ return () => {
39922
+ cancelled = true;
39923
+ };
39924
+ }, [api]);
39925
+ const renderGenreDescendants = (children, depth) => children.map((c) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
39926
+ style: {
39927
+ paddingLeft: depth * 12,
39928
+ marginTop: 2
39929
+ },
39930
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
39931
+ className: panel_module_css_default.meta,
39932
+ children: [
39933
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("b", { children: c.name }),
39934
+ ":",
39935
+ c.description
39936
+ ]
39937
+ }), (c.children ?? []).length > 0 && renderGenreDescendants(c.children ?? [], depth + 1)]
39938
+ }, c.name));
39939
+ const renderGenre = (nodes) => nodes.map((n) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
39940
+ className: panel_module_css_default.assetCard,
39941
+ children: [
39942
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
39943
+ className: panel_module_css_default.assetCardName,
39944
+ children: n.name
39945
+ }),
39946
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
39947
+ className: panel_module_css_default.meta,
39948
+ children: n.description
39949
+ }),
39950
+ (n.children ?? []).length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
39951
+ style: { marginTop: 6 },
39952
+ children: renderGenreDescendants(n.children ?? [], 0)
39953
+ })
39954
+ ]
39955
+ }, n.name));
39956
+ const renderAntiAi = (rules) => rules.map((r) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
39957
+ className: panel_module_css_default.assetCard,
39958
+ children: [
39959
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
39960
+ className: panel_module_css_default.assetCardTop,
39961
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
39962
+ className: panel_module_css_default.assetKind,
39963
+ style: { color: "var(--nf-warn)" },
39964
+ children: "反AI"
39965
+ })
39966
+ }),
39967
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
39968
+ className: panel_module_css_default.assetCardName,
39969
+ children: r.name
39970
+ }),
39971
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
39972
+ className: panel_module_css_default.assetCardContent,
39973
+ children: [
39974
+ "避免:",
39975
+ r.avoid,
39976
+ r.fix !== "" ? "\n修正:" + r.fix : ""
39977
+ ]
39978
+ }),
39979
+ (r.detectPatterns ?? []).length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
39980
+ className: panel_module_css_default.meta,
39981
+ children: ["命中模式:", (r.detectPatterns ?? []).join("、")]
39982
+ })
39983
+ ]
39984
+ }, r.name));
39985
+ const renderStyle = (templates) => templates.map((t) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
39986
+ className: panel_module_css_default.assetCard,
39987
+ children: [
39988
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
39989
+ className: panel_module_css_default.assetCardTop,
39990
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
39991
+ className: panel_module_css_default.assetKind,
39992
+ style: { color: "var(--nf-info)" },
39993
+ children: t.category
39994
+ })
39995
+ }),
39996
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
39997
+ className: panel_module_css_default.assetCardName,
39998
+ children: t.name
39999
+ }),
40000
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
40001
+ className: panel_module_css_default.meta,
40002
+ children: t.description
40003
+ }),
40004
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40005
+ className: panel_module_css_default.assetCardContent,
40006
+ children: [
40007
+ "适用:",
40008
+ (t.applicableGenres ?? []).join("、"),
40009
+ t.proseRules.length > 0 ? "\n叙述:" + t.proseRules.join(";") : "",
40010
+ t.dialogueRules.length > 0 ? "\n台词:" + t.dialogueRules.join(";") : "",
40011
+ t.languageRules.length > 0 ? "\n语言:" + t.languageRules.join(";") : "",
40012
+ t.rhythmRules.length > 0 ? "\n节奏:" + t.rhythmRules.join(";") : ""
40013
+ ]
40014
+ })
40015
+ ]
40016
+ }, t.key));
40017
+ const renderProgression = (modes) => modes.map((m) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40018
+ className: panel_module_css_default.assetCard,
40019
+ children: [
40020
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
40021
+ className: panel_module_css_default.assetCardTop,
40022
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
40023
+ className: panel_module_css_default.assetKind,
40024
+ style: { color: "var(--nf-accent)" },
40025
+ children: m.primary ? "主模式" : "辅助"
40026
+ })
40027
+ }),
40028
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
40029
+ className: panel_module_css_default.assetCardName,
40030
+ children: m.name
40031
+ }),
40032
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40033
+ className: panel_module_css_default.meta,
40034
+ children: ["驱动:", m.driver]
40035
+ }),
40036
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40037
+ className: panel_module_css_default.assetCardContent,
40038
+ children: [
40039
+ "期待:",
40040
+ m.readerExpectation,
40041
+ m.payoffs.length > 0 ? "\n兑现:" + m.payoffs.join(";") : "",
40042
+ m.risks.length > 0 ? "\n风险:" + m.risks.join(";") : ""
40043
+ ]
40044
+ })
40045
+ ]
40046
+ }, m.name));
40047
+ const renderPlotBeat = (beats) => beats.map((b) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40048
+ className: panel_module_css_default.assetCard,
40049
+ children: [
40050
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
40051
+ className: panel_module_css_default.assetCardTop,
40052
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
40053
+ className: panel_module_css_default.assetKind,
40054
+ style: { color: "var(--nf-accent)" },
40055
+ children: b.category
40056
+ })
40057
+ }),
40058
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
40059
+ className: panel_module_css_default.assetCardName,
40060
+ children: b.name
40061
+ }),
40062
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
40063
+ className: panel_module_css_default.meta,
40064
+ children: b.summary
40065
+ }),
40066
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40067
+ className: panel_module_css_default.assetCardContent,
40068
+ children: [
40069
+ "位置:",
40070
+ b.position,
40071
+ (b.preconditions ?? []).length > 0 ? "\n前置:" + b.preconditions.join(";") : "",
40072
+ (b.payoffSource ?? []).length > 0 ? "\n爽点:" + b.payoffSource.join(";") : "",
40073
+ (b.combos ?? []).length > 0 ? "\n组合:" + b.combos.join(";") : "",
40074
+ (b.taboos ?? []).length > 0 ? "\n禁忌:" + b.taboos.join(";") : ""
40075
+ ]
40076
+ })
40077
+ ]
40078
+ }, b.key));
40079
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40080
+ className: panel_module_css_default.authorPageBody,
40081
+ children: [
40082
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40083
+ className: panel_module_css_default.authorPageHero,
40084
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
40085
+ className: panel_module_css_default.authorPageHeader,
40086
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
40087
+ className: panel_module_css_default.panelTitle,
40088
+ style: { margin: 0 },
40089
+ children: "🎨 全局写作资产库"
40090
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
40091
+ className: panel_module_css_default.meta,
40092
+ children: "内置题材基底库 / 反AI规则库 / 风格模板 / 推进模式 / 剧情桥段库(跨书)——插件自带、只读。"
40093
+ })] })
40094
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40095
+ className: panel_module_css_default.assetFilterBar,
40096
+ children: [
40097
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
40098
+ type: "button",
40099
+ className: panel_module_css_default.assetFilterChip + (tab === "genre" ? " " + panel_module_css_default.assetFilterChipActive : ""),
40100
+ onClick: () => setTab("genre"),
40101
+ children: ["题材 ", (data?.genreLibrary ?? []).length]
40102
+ }),
40103
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
40104
+ type: "button",
40105
+ className: panel_module_css_default.assetFilterChip + (tab === "antiAi" ? " " + panel_module_css_default.assetFilterChipActive : ""),
40106
+ onClick: () => setTab("antiAi"),
40107
+ children: ["反AI规则 ", (data?.antiAiLibrary ?? []).length]
40108
+ }),
40109
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
40110
+ type: "button",
40111
+ className: panel_module_css_default.assetFilterChip + (tab === "style" ? " " + panel_module_css_default.assetFilterChipActive : ""),
40112
+ onClick: () => setTab("style"),
40113
+ children: ["风格模板 ", (data?.styleTemplates ?? []).length]
40114
+ }),
40115
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
40116
+ type: "button",
40117
+ className: panel_module_css_default.assetFilterChip + (tab === "progression" ? " " + panel_module_css_default.assetFilterChipActive : ""),
40118
+ onClick: () => setTab("progression"),
40119
+ children: ["推进模式 ", (data?.progressionLibrary ?? []).length]
40120
+ }),
40121
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
40122
+ type: "button",
40123
+ className: panel_module_css_default.assetFilterChip + (tab === "plotBeat" ? " " + panel_module_css_default.assetFilterChipActive : ""),
40124
+ onClick: () => setTab("plotBeat"),
40125
+ children: ["剧情桥段 ", (data?.plotBeatLibrary ?? []).length]
40126
+ })
40127
+ ]
40128
+ })]
40129
+ }),
40130
+ error !== "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
40131
+ className: panel_module_css_default.noticeError,
40132
+ children: error
40133
+ }),
40134
+ data === null ? /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40135
+ className: panel_module_css_default.shelfEmpty,
40136
+ style: { minHeight: 160 },
40137
+ children: [
40138
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
40139
+ className: panel_module_css_default.shelfEmptyIcon,
40140
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Info, { size: 30 })
40141
+ }),
40142
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
40143
+ className: panel_module_css_default.shelfEmptyTitle,
40144
+ children: "加载中…"
40145
+ }),
40146
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
40147
+ className: panel_module_css_default.meta,
40148
+ children: "正在读取全局内置资产库。"
40149
+ })
40150
+ ]
40151
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40152
+ className: panel_module_css_default.assetGroups,
40153
+ children: [
40154
+ tab === "genre" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40155
+ className: panel_module_css_default.assetGroup,
40156
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40157
+ className: panel_module_css_default.assetGroupHeader,
40158
+ children: ["题材基底库 ", /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
40159
+ className: panel_module_css_default.meta,
40160
+ children: "树形 / 只读"
40161
+ })]
40162
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
40163
+ className: panel_module_css_default.assetGrid,
40164
+ children: renderGenre(data.genreLibrary)
40165
+ })]
40166
+ }),
40167
+ tab === "antiAi" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40168
+ className: panel_module_css_default.assetGroup,
40169
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40170
+ className: panel_module_css_default.assetGroupHeader,
40171
+ children: ["反AI规则库 ", /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
40172
+ className: panel_module_css_default.meta,
40173
+ children: "只读 / 可在书内复制为自定义"
40174
+ })]
40175
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
40176
+ className: panel_module_css_default.assetGrid,
40177
+ children: renderAntiAi(data.antiAiLibrary)
40178
+ })]
40179
+ }),
40180
+ tab === "style" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40181
+ className: panel_module_css_default.assetGroup,
40182
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40183
+ className: panel_module_css_default.assetGroupHeader,
40184
+ children: ["风格模板 ", /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
40185
+ className: panel_module_css_default.meta,
40186
+ children: "只读 / 可在书内一键绑定"
40187
+ })]
40188
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
40189
+ className: panel_module_css_default.assetGrid,
40190
+ children: renderStyle(data.styleTemplates)
40191
+ })]
40192
+ }),
40193
+ tab === "progression" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40194
+ className: panel_module_css_default.assetGroup,
40195
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40196
+ className: panel_module_css_default.assetGroupHeader,
40197
+ children: ["推进模式 ", /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
40198
+ className: panel_module_css_default.meta,
40199
+ children: "只读"
40200
+ })]
40201
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
40202
+ className: panel_module_css_default.assetGrid,
40203
+ children: renderProgression(data.progressionLibrary)
40204
+ })]
40205
+ }),
40206
+ tab === "plotBeat" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40207
+ className: panel_module_css_default.assetGroup,
40208
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40209
+ className: panel_module_css_default.assetGroupHeader,
40210
+ children: ["剧情桥段库 ", /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
40211
+ className: panel_module_css_default.meta,
40212
+ children: "只读 / 可收藏或导入作者库"
40213
+ })]
40214
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
40215
+ className: panel_module_css_default.assetGrid,
40216
+ children: renderPlotBeat(data.plotBeatLibrary)
40217
+ })]
40218
+ })
40219
+ ]
40220
+ }),
40221
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
40222
+ className: panel_module_css_default.meta,
40223
+ style: { marginTop: 10 },
40224
+ children: "提示:内置库为插件自带、只读。想要在书里使用,请进入某本书的「创作资产」页绑定为项目资产,或在「作者资产库」里「导入默认资产」沉淀成可复用的个人条目。"
40225
+ })
40226
+ ]
40227
+ });
40228
+ }
40229
+ //#endregion
39032
40230
  //#region src/client/panel/ProgressConsole.tsx
39033
40231
  /**
39034
40232
  * 共享「AI 进度」实时控制台:当前任务大进度条 + 全量活动日志。
@@ -40185,7 +41383,9 @@ window.__ModuleLoader__.load({
40185
41383
  * 作者级首页容器:书架页左侧导航 + 内容区。
40186
41384
  * 导航复用工作区 .panelNav 玻璃卡片样式(同款),导航项为作者级:书架/改编/资产库/全局资产库/AI 进度/设置。
40187
41385
  */
40188
- const PLUGIN_VERSION$1 = "1.9.0";
41386
+ const PLUGIN_VERSION$1 = "1.10.0";
41387
+ /** GitHub 仓库地址(关于区块点击跳转)。 */
41388
+ const REPO_URL$1 = "https://github.com/watersxya/dsh-novel-forge";
40189
41389
  const NAV_ITEMS = [
40190
41390
  {
40191
41391
  id: "shelf",
@@ -40218,150 +41418,329 @@ window.__ModuleLoader__.load({
40218
41418
  hint: "书架级聚合进度"
40219
41419
  }
40220
41420
  ];
40221
- function Placeholder({ title, hint }) {
40222
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40223
- className: panel_module_css_default.authorPageBody,
40224
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40225
- className: panel_module_css_default.card + " " + panel_module_css_default.settingsCard,
40226
- style: { gap: "var(--nf-space-6)" },
40227
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("h2", {
40228
- className: panel_module_css_default.panelTitle,
40229
- style: { margin: 0 },
40230
- children: title
40231
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
40232
- className: panel_module_css_default.meta,
40233
- children: hint
40234
- })]
40235
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40236
- className: panel_module_css_default.shelfEmpty,
40237
- style: { minHeight: 160 },
40238
- children: [
40239
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
40240
- className: panel_module_css_default.shelfEmptyIcon,
40241
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Info, { size: 30 })
40242
- }),
40243
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
40244
- className: panel_module_css_default.shelfEmptyTitle,
40245
- children: "此入口为占位"
40246
- }),
40247
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
40248
- className: panel_module_css_default.meta,
40249
- children: "后续版本实现。当前「全局写作资产库」可进入某本书「创作资产」页查看内置题材库/反AI规则库/风格模板;「设置」为独立设置页。"
40250
- })
40251
- ]
40252
- })]
40253
- });
40254
- }
40255
41421
  function AuthorHome({ api, shelf, onOpenBook, onReadBook, onAddBook, onImportBook, onOpenSettings, onTheme, onBackground, onOpacity, adaptEnabled, progress, busy, busyLabel, liveBar, onClearProgress }) {
40256
41422
  const [nav, setNav] = (0, react.useState)("shelf");
41423
+ const [updating, setUpdating] = (0, react.useState)(false);
41424
+ const [progressOpen, setProgressOpen] = (0, react.useState)(false);
41425
+ const [progressPos, setProgressPos] = (0, react.useState)(() => {
41426
+ try {
41427
+ const raw = window.localStorage.getItem("dsh-novel-forge.home.progress.float");
41428
+ if (raw !== null) {
41429
+ const p = JSON.parse(raw);
41430
+ return {
41431
+ x: typeof p.x === "number" ? p.x : 60,
41432
+ y: typeof p.y === "number" ? p.y : 120
41433
+ };
41434
+ }
41435
+ } catch {}
41436
+ return {
41437
+ x: 60,
41438
+ y: 120
41439
+ };
41440
+ });
41441
+ const [progressSize, setProgressSize] = (0, react.useState)(() => {
41442
+ try {
41443
+ const raw = window.localStorage.getItem("dsh-novel-forge.home.progress.size");
41444
+ if (raw !== null) {
41445
+ const p = JSON.parse(raw);
41446
+ return {
41447
+ w: typeof p.w === "number" ? p.w : 460,
41448
+ h: typeof p.h === "number" ? p.h : 420
41449
+ };
41450
+ }
41451
+ } catch {}
41452
+ return {
41453
+ w: 460,
41454
+ h: 420
41455
+ };
41456
+ });
41457
+ const dragState = (0, react.useRef)(null);
41458
+ (0, react.useEffect)(() => {
41459
+ try {
41460
+ window.localStorage.setItem("dsh-novel-forge.home.progress.float", JSON.stringify(progressPos));
41461
+ window.localStorage.setItem("dsh-novel-forge.home.progress.size", JSON.stringify(progressSize));
41462
+ } catch {}
41463
+ }, [progressPos, progressSize]);
41464
+ (0, react.useEffect)(() => {
41465
+ const onMove = (e) => {
41466
+ const s = dragState.current;
41467
+ if (s === null) return;
41468
+ if (s.type === "move") setProgressPos({
41469
+ x: Math.max(-340, Math.min(s.origX + e.clientX - s.startX, 3e3)),
41470
+ y: Math.max(0, Math.min(s.origY + e.clientY - s.startY, 3e3))
41471
+ });
41472
+ else setProgressSize({
41473
+ w: Math.max(320, Math.min(s.origW + e.clientX - s.startX, 1400)),
41474
+ h: Math.max(220, Math.min(s.origH + e.clientY - s.startY, 1200))
41475
+ });
41476
+ };
41477
+ const onUp = () => {
41478
+ dragState.current = null;
41479
+ };
41480
+ window.addEventListener("mousemove", onMove);
41481
+ window.addEventListener("mouseup", onUp);
41482
+ return () => {
41483
+ window.removeEventListener("mousemove", onMove);
41484
+ window.removeEventListener("mouseup", onUp);
41485
+ };
41486
+ }, []);
41487
+ /** npm 最新版本(更新检测;null = 未检测/检测失败)。 */
41488
+ const [npmLatest, setNpmLatest] = (0, react.useState)(null);
41489
+ (0, react.useEffect)(() => {
41490
+ let cancelled = false;
41491
+ (async () => {
41492
+ try {
41493
+ const r = await fetch("https://registry.npmjs.org/@waterwx%2Fdsh-novel-forge/latest");
41494
+ if (!r.ok) return;
41495
+ const data = await r.json();
41496
+ if (!cancelled && typeof data.version === "string") setNpmLatest(data.version);
41497
+ } catch {}
41498
+ })();
41499
+ return () => {
41500
+ cancelled = true;
41501
+ };
41502
+ }, []);
41503
+ const doUpdate = async () => {
41504
+ setUpdating(true);
41505
+ try {
41506
+ const res = await api.pluginUpdate();
41507
+ window.alert(res.message);
41508
+ } catch (err) {
41509
+ window.alert("更新失败:" + (err.message ?? String(err)));
41510
+ } finally {
41511
+ setUpdating(false);
41512
+ }
41513
+ };
40257
41514
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40258
41515
  className: panel_module_css_default.authorHome,
40259
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("nav", {
40260
- className: panel_module_css_default.panelNav,
40261
- "aria-label": "作者级导航",
40262
- children: [
40263
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40264
- className: panel_module_css_default.navTitle,
40265
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
40266
- className: panel_module_css_default.navTitleLogo,
40267
- children: "书"
40268
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40269
- style: { minWidth: 0 },
41516
+ children: [
41517
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("nav", {
41518
+ className: panel_module_css_default.panelNav,
41519
+ "aria-label": "作者级导航",
41520
+ children: [
41521
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
41522
+ className: panel_module_css_default.navTitle,
40270
41523
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
40271
- className: panel_module_css_default.navTitleName,
40272
- children: "小说工坊"
40273
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
40274
- className: panel_module_css_default.navTitleBook,
40275
- children: "作者级 · 跨书"
41524
+ className: panel_module_css_default.navTitleLogo,
41525
+ children: "书"
41526
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
41527
+ style: { minWidth: 0 },
41528
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
41529
+ className: panel_module_css_default.navTitleName,
41530
+ children: "小说工坊"
41531
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
41532
+ className: panel_module_css_default.navTitleBook,
41533
+ children: "作者级 · 跨书"
41534
+ })]
40276
41535
  })]
40277
- })]
40278
- }),
40279
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40280
- className: panel_module_css_default.navGroup,
40281
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
40282
- className: panel_module_css_default.navGroupLabel,
40283
- children: "作者"
40284
- }), NAV_ITEMS.filter((item) => item.id !== "adapt" || adaptEnabled).map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
41536
+ }),
41537
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
41538
+ className: panel_module_css_default.navGroup,
41539
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
41540
+ className: panel_module_css_default.navGroupLabel,
41541
+ children: "作者"
41542
+ }), NAV_ITEMS.filter((item) => item.id !== "adapt" || adaptEnabled).map((item) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
41543
+ type: "button",
41544
+ role: "tab",
41545
+ "aria-selected": nav === item.id,
41546
+ "data-active": nav === item.id ? "" : void 0,
41547
+ className: panel_module_css_default.navTab,
41548
+ title: item.hint,
41549
+ onClick: () => {
41550
+ if (item.id === "progress") {
41551
+ setProgressOpen((o) => !o);
41552
+ return;
41553
+ }
41554
+ setNav(item.id);
41555
+ },
41556
+ children: [
41557
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
41558
+ className: panel_module_css_default.navTabIcon,
41559
+ children: item.icon
41560
+ }),
41561
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
41562
+ className: panel_module_css_default.navTabLabel,
41563
+ children: item.label
41564
+ }),
41565
+ item.id === "progress" && busy === true && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { className: panel_module_css_default.navTabDot })
41566
+ ]
41567
+ }, item.id))]
41568
+ }),
41569
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: panel_module_css_default.navSpacer }),
41570
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
40285
41571
  type: "button",
40286
41572
  role: "tab",
40287
- "aria-selected": nav === item.id,
40288
- "data-active": nav === item.id ? "" : void 0,
41573
+ "aria-selected": nav === "settings",
41574
+ "data-active": nav === "settings" ? "" : void 0,
40289
41575
  className: panel_module_css_default.navTab,
40290
- title: item.hint,
40291
- onClick: () => setNav(item.id),
41576
+ title: "设置",
41577
+ onClick: () => setNav("settings"),
40292
41578
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
40293
41579
  className: panel_module_css_default.navTabIcon,
40294
- children: item.icon
41580
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Settings, { size: 18 })
40295
41581
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
40296
41582
  className: panel_module_css_default.navTabLabel,
40297
- children: item.label
41583
+ children: "设置"
41584
+ })]
41585
+ }),
41586
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
41587
+ className: panel_module_css_default.navAbout,
41588
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
41589
+ type: "button",
41590
+ className: panel_module_css_default.navAboutRow,
41591
+ title: "打开 GitHub 仓库",
41592
+ onClick: () => {
41593
+ window.open(REPO_URL$1, "_blank", "noopener");
41594
+ },
41595
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: ["ℹ️ v", PLUGIN_VERSION$1] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
41596
+ className: panel_module_css_default.meta,
41597
+ children: "GitHub ↗"
41598
+ })]
41599
+ }), npmLatest !== null && npmLatest !== PLUGIN_VERSION$1 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
41600
+ type: "button",
41601
+ className: panel_module_css_default.navAboutUpdate,
41602
+ title: "点击自动更新(下载最新 npm 版,完成后请重启 DSH)",
41603
+ disabled: updating,
41604
+ onClick: () => {
41605
+ doUpdate();
41606
+ },
41607
+ children: updating ? "🔄 更新中…" : `🔄 更新到 v${npmLatest}`
40298
41608
  })]
40299
- }, item.id))]
40300
- }),
40301
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", { className: panel_module_css_default.navSpacer }),
40302
- /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
40303
- type: "button",
40304
- role: "tab",
40305
- "aria-selected": nav === "settings",
40306
- "data-active": nav === "settings" ? "" : void 0,
40307
- className: panel_module_css_default.navTab,
40308
- title: "设置",
40309
- onClick: () => setNav("settings"),
40310
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
40311
- className: panel_module_css_default.navTabIcon,
40312
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Settings, { size: 18 })
40313
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
40314
- className: panel_module_css_default.navTabLabel,
40315
- children: "设置"
40316
- })]
40317
- }),
40318
- /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
40319
- className: panel_module_css_default.navAbout,
40320
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
40321
- className: panel_module_css_default.navAboutRow,
40322
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [
40323
- "ℹ️ v",
40324
- PLUGIN_VERSION$1,
40325
- " · 改编/资产库"
40326
- ] })
40327
41609
  })
40328
- })
40329
- ]
40330
- }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
40331
- className: panel_module_css_default.authorContent,
40332
- children: [
40333
- nav === "shelf" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ShelfView, {
40334
- api,
40335
- shelf,
40336
- onOpenBook,
40337
- onReadBook,
40338
- onAddBook,
40339
- onImportBook
40340
- }),
40341
- nav === "adapt" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AdaptModeView, { api }),
40342
- nav === "assets" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AuthorAssetsView, { api }),
40343
- nav === "library" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Placeholder, {
40344
- title: "🎨 全局写作资产库",
40345
- hint: "内置题材基底库 / 反AI规则库 / 风格模板 / 推进模式(跨书)"
40346
- }),
40347
- nav === "progress" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
40348
- className: panel_module_css_default.authorPageBody,
40349
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProgressConsole, {
40350
- progress: progress ?? [],
40351
- busy: busy ?? false,
40352
- busyLabel: busyLabel ?? "",
40353
- liveBar: liveBar ?? null,
40354
- onClear: () => onClearProgress?.()
41610
+ ]
41611
+ }),
41612
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
41613
+ className: panel_module_css_default.authorContent,
41614
+ children: [
41615
+ nav === "shelf" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ShelfView, {
41616
+ api,
41617
+ shelf,
41618
+ onOpenBook,
41619
+ onReadBook,
41620
+ onAddBook,
41621
+ onImportBook
41622
+ }),
41623
+ nav === "adapt" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AdaptModeView, {
41624
+ api,
41625
+ onOpenBook
41626
+ }),
41627
+ nav === "assets" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AuthorAssetsView, { api }),
41628
+ nav === "library" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(GlobalAssetLibraryView, { api }),
41629
+ nav === "settings" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SettingsView, {
41630
+ api,
41631
+ onTheme,
41632
+ onBackground,
41633
+ onOpacity
40355
41634
  })
40356
- }),
40357
- nav === "settings" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SettingsView, {
40358
- api,
40359
- onTheme,
40360
- onBackground,
40361
- onOpacity
40362
- })
40363
- ]
40364
- })]
41635
+ ]
41636
+ }),
41637
+ progressOpen && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
41638
+ className: panel_module_css_default.assistantFloat,
41639
+ style: {
41640
+ left: progressPos.x,
41641
+ top: progressPos.y,
41642
+ width: progressSize.w,
41643
+ height: progressSize.h
41644
+ },
41645
+ children: [
41646
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
41647
+ className: panel_module_css_default.assistantFloatHeader,
41648
+ onMouseDown: (e) => {
41649
+ e.preventDefault();
41650
+ dragState.current = {
41651
+ type: "move",
41652
+ startX: e.clientX,
41653
+ startY: e.clientY,
41654
+ origX: progressPos.x,
41655
+ origY: progressPos.y,
41656
+ origW: progressSize.w,
41657
+ origH: progressSize.h
41658
+ };
41659
+ },
41660
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", { children: [
41661
+ "📊 AI 进度",
41662
+ busy && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
41663
+ style: { color: "var(--nf-accent)" },
41664
+ children: " 🟢 任务进行中"
41665
+ }),
41666
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
41667
+ className: panel_module_css_default.meta,
41668
+ children: "(拖动标题栏移动 · 右下角拉大小)"
41669
+ })
41670
+ ] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
41671
+ style: {
41672
+ display: "flex",
41673
+ alignItems: "center",
41674
+ gap: "var(--nf-space-4)"
41675
+ },
41676
+ children: [(progress ?? []).length > 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
41677
+ type: "button",
41678
+ className: `${panel_module_css_default.button} ${panel_module_css_default.buttonSmall}`,
41679
+ onClick: onClearProgress,
41680
+ title: "清空活动记录",
41681
+ children: "清空"
41682
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
41683
+ type: "button",
41684
+ className: panel_module_css_default.iconButton,
41685
+ title: "关闭",
41686
+ "aria-label": "关闭AI进度",
41687
+ onClick: () => setProgressOpen(false),
41688
+ children: "×"
41689
+ })]
41690
+ })]
41691
+ }),
41692
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
41693
+ className: panel_module_css_default.assistantFloatBody,
41694
+ style: {
41695
+ padding: "var(--nf-space-10)",
41696
+ display: "flex",
41697
+ flexDirection: "column",
41698
+ gap: "var(--nf-space-8)",
41699
+ overflow: "hidden",
41700
+ flex: 1,
41701
+ minHeight: 0
41702
+ },
41703
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
41704
+ style: {
41705
+ flex: 1,
41706
+ minHeight: 0,
41707
+ display: "flex",
41708
+ flexDirection: "column"
41709
+ },
41710
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ProgressConsole, {
41711
+ progress: progress ?? [],
41712
+ busy: busy ?? false,
41713
+ busyLabel: busyLabel ?? "",
41714
+ liveBar: liveBar ?? null,
41715
+ onClear: () => onClearProgress?.()
41716
+ })
41717
+ })
41718
+ }),
41719
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
41720
+ style: {
41721
+ width: 14,
41722
+ height: 14,
41723
+ position: "absolute",
41724
+ right: 0,
41725
+ bottom: 0,
41726
+ cursor: "nwse-resize"
41727
+ },
41728
+ onMouseDown: (e) => {
41729
+ e.preventDefault();
41730
+ dragState.current = {
41731
+ type: "resize",
41732
+ startX: e.clientX,
41733
+ startY: e.clientY,
41734
+ origX: progressPos.x,
41735
+ origY: progressPos.y,
41736
+ origW: progressSize.w,
41737
+ origH: progressSize.h
41738
+ };
41739
+ }
41740
+ })
41741
+ ]
41742
+ })
41743
+ ]
40365
41744
  });
40366
41745
  }
40367
41746
  //#endregion
@@ -48270,7 +49649,7 @@ window.__ModuleLoader__.load({
48270
49649
  icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(import_lucide_react.Sparkles, { size: 16 })
48271
49650
  }
48272
49651
  ];
48273
- const PLUGIN_VERSION = "1.9.0";
49652
+ const PLUGIN_VERSION = "1.10.0";
48274
49653
  /** GitHub 仓库地址(关于区块点击跳转)。 */
48275
49654
  const REPO_URL = "https://github.com/watersxya/dsh-novel-forge";
48276
49655
  /** Whether any chapter is being generated right now. */