dsh-cuigengji-plugin 0.4.2 → 0.4.4

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.
Files changed (67) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +1 -1
  3. package/cordis.patch.yml +3 -3
  4. package/docs/CHANGELOG.md +15 -0
  5. package/docs/agent-installation.md +19 -12
  6. package/docs/architecture.md +74 -74
  7. package/docs/desktop-migration-20260930.md +26 -26
  8. package/docs/development.md +7 -3
  9. package/docs/getting-started.md +17 -7
  10. package/docs/layout-progress.md +31 -31
  11. package/docs/market-listing.md +5 -3
  12. package/docs/npm-publishing.md +35 -11
  13. package/docs/package-name-migration.md +3 -3
  14. package/docs/planning-board.md +44 -44
  15. package/docs/presets.md +24 -24
  16. package/docs/release-process.md +45 -10
  17. package/docs/tavern-compatibility-audit-20261001.md +109 -109
  18. package/docs/test-report.md +139 -129
  19. package/docs/upgrade.md +3 -1
  20. package/docs/usage-review.md +13 -13
  21. package/lib/client.js +19 -14
  22. package/package.json +19 -14
  23. package/skills/cuigengji-maintenance/SKILL.md +2 -2
  24. package/src/adapters/dsh/prompt.js +36 -36
  25. package/src/adapters/dsh/rpc.js +96 -96
  26. package/src/adapters/dsh/skills.js +17 -17
  27. package/src/adapters/mcp/actions.js +6 -6
  28. package/src/adapters/mcp/client.js +172 -172
  29. package/src/adapters/mcp/server.js +40 -40
  30. package/src/application/bindings/session.js +72 -72
  31. package/src/application/queries/context.js +15 -15
  32. package/src/application/store.js +412 -412
  33. package/src/client/features/chapters/clipboard.ts +27 -27
  34. package/src/client/features/chapters/history.ts +11 -11
  35. package/src/client/features/chapters/index.jsx +118 -118
  36. package/src/client/features/chapters/sync.ts +155 -155
  37. package/src/client/features/chapters/useChapterSync.ts +39 -39
  38. package/src/client/features/context/index.jsx +22 -22
  39. package/src/client/features/memory/index.jsx +73 -73
  40. package/src/client/features/planning/Decorations.tsx +1 -1
  41. package/src/client/features/planning/Pages.tsx +11 -11
  42. package/src/client/features/planning/data.js +16 -16
  43. package/src/client/index.tsx +130 -130
  44. package/src/client/launcher.tsx +78 -78
  45. package/src/client/shared/creation.tsx +34 -34
  46. package/src/client/shared/detail-page.tsx +61 -61
  47. package/src/client/shared/drafts.js +17 -17
  48. package/src/client/shared/evidence.jsx +11 -11
  49. package/src/client/shared/groups.tsx +34 -34
  50. package/src/client/shared/preferences.tsx +104 -104
  51. package/src/client/shared/select-style.ts +25 -25
  52. package/src/client/shared/state.js +95 -95
  53. package/src/client/shared/ui.jsx +19 -19
  54. package/src/client/shared/workspace.tsx +11 -11
  55. package/src/client/style.ts +274 -274
  56. package/src/client/visual.ts +190 -190
  57. package/src/contracts/actions.js +19 -19
  58. package/src/contracts/planning.ts +52 -52
  59. package/src/domain/manuscript.ts +4 -4
  60. package/src/domain/planning/index.ts +113 -113
  61. package/src/domain/planning/model.ts +59 -59
  62. package/src/domain/preset/index.js +89 -89
  63. package/src/index.js +91 -91
  64. package/src/infrastructure/migrations/legacy.js +96 -96
  65. package/src/infrastructure/migrations/tavern.js +78 -78
  66. package/src/infrastructure/persistence/atomic-store.ts +80 -80
  67. package/src/infrastructure/persistence/project-layout.ts +1 -1
@@ -1,276 +1,276 @@
1
- import {visualStyles} from './visual.ts';
2
- import {selectStyles} from './shared/select-style.ts';
1
+ import {visualStyles} from './visual.ts';
2
+ import {selectStyles} from './shared/select-style.ts';
3
3
  import {graphStyles} from './shared/graph-style.ts';
4
4
  import {managementStyles} from './shared/management-style.ts';
5
- import {transferStyles} from './features/transfer/style.ts';
6
- import {welcomeStyles} from './features/welcome/style.ts';
7
- import {batchStyles} from './shared/batch-style.ts';
8
- import {navigationStyles} from './shared/navigation-style.ts';
9
- export const styles = `
10
- .cuigengji { color:var(--dsw-alias-label-primary,#252936); font-family:var(--dsw-font-family,system-ui,-apple-system,"Segoe UI","Microsoft YaHei",sans-serif); font-size:13px; padding:14px; height:100%; overflow:auto; box-sizing:border-box; }
11
- .cuigengji * { box-sizing:border-box; }
12
-
13
-
14
- .cuigengji p { line-height:1.7; }
15
- .cuigengji button,.cuigengji input,.cuigengji select,.cuigengji textarea { font:inherit; color:inherit; border:1px solid var(--dsw-alias-border-l1,#dde0e6); background:var(--dsw-alias-button-floating-fill,transparent); border-radius:8px; padding:7px 11px; }
16
-
17
- .cuigengji button:disabled { opacity:.5; cursor:default; }
18
- .cuigengji button:focus-visible,.cuigengji input:focus-visible,.cuigengji textarea:focus-visible,.cuigengji select:focus-visible { outline:2px solid var(--dsw-focus-ring-color,#4d6bfe); outline-offset:2px; }
19
- .cuigengji [aria-selected=true],.cuigengji .selected { border-color:var(--dsw-alias-state-business-primary,#4d6bfe); background:color-mix(in srgb,var(--dsw-alias-state-business-primary,#4d6bfe) 10%,transparent); }
20
- .cuigengji label { display:grid; gap:5px; margin:10px 0; }
21
- .cuigengji textarea { width:100%; min-height:130px; resize:vertical; line-height:1.85; }
22
- .cuigengji .prose { min-height:360px; }
23
- .cuigengji .row { display:flex; gap:7px; align-items:center; flex-wrap:wrap; margin:8px 0; }
24
- .cuigengji .row>* { min-width:0; }
25
-
26
- .cuigengji .muted { opacity:.7; font-size:12px; }
27
-
28
- .cuigengji .notice.error { border-left-color:#c64e42; }
29
- .cuigengji .list { display:grid; gap:0; }
30
-
31
- .cuigengji .split { display:grid; grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr)); gap:12px; }
32
- .cuigengji pre { white-space:pre-wrap; overflow-wrap:anywhere; font:inherit; line-height:1.75; max-height:420px; overflow:auto; border:1px solid var(--dsw-alias-border-l1,#8886); padding:10px; }
33
- .cuigengji svg { width:100%; max-height:300px; border:1px solid var(--dsw-alias-border-l1,#8886); border-radius:5px; }
34
- .cuigengji svg text { fill:currentColor; font-size:11px; }
35
- .cuigengji svg line { stroke:var(--dsw-alias-border-l1,#999); stroke-width:2; }
36
- .cuigengji svg circle { fill:var(--dsw-alias-button-floating-fill,#777); stroke:var(--dsw-alias-state-business-primary,#4d6bfe); stroke-width:2; }
37
- .cuigengji svg g { cursor:pointer; }
38
- .cuigengji summary { cursor:pointer; padding:8px 0; }
39
- .cuigengji .grow { flex:1; }
40
- .cuigengji .editor-fields { border:0; padding:0; margin:0; min-width:0; }
41
- .cuigengji-dialog::backdrop { background:#0008; }
42
- .cuigengji.cuigengji-dialog { margin:auto; height:fit-content; max-height:90vh; width:min(420px,calc(100% - 36px)); padding:16px; border:1px solid var(--dsw-alias-border-l1,#8886); border-radius:8px; background:var(--dsw-alias-bg-base,#fff); box-shadow:0 12px 40px #0005; }
43
- .cuigengji-dialog p { margin:0 0 12px; white-space:pre-wrap; }
44
- .cuigengji-dialog input { width:100%; }
45
-
46
- /* Workbench layout follows the panel width, including DSH full-screen mode. */
47
- .cuigengji:not(dialog) { container-type:inline-size; display:flex; flex-direction:column; padding:0; font-size:14px; min-height:0; height:100%; overflow:hidden; background:var(--dsw-alias-bg-base,#fff); }
48
- .cuigengji .workbench-header { flex:none; padding:8px 16px 0; border-bottom:1px solid var(--dsw-alias-border-l1,#8884); }
49
- .cuigengji .eyebrow { font-size:12px; color:var(--dsw-alias-label-secondary,#737780); letter-spacing:.04em; }
50
- .cuigengji .identity { padding-bottom:4px; }
51
- .cuigengji .compact { margin:4px 0; }
52
- .cuigengji .book-picker { font-size:16px; font-weight:600; border:0; padding-left:0; background:transparent; width:1px; }
53
- .cuigengji nav { display:flex; gap:4px; flex-wrap:nowrap; margin:0; padding:0; border:0; }
54
- .cuigengji nav button { flex:1; border:0; border-bottom:2px solid transparent; border-radius:0; padding:12px 6px; background:transparent; color:var(--dsw-alias-label-secondary,#737780); }
55
- .cuigengji nav button.selected { border-bottom-color:var(--dsw-alias-state-business-primary,#4d6bfe); color:var(--dsw-alias-state-business-primary,#4d6bfe); }
56
- .cuigengji h2 { font-size:18px; margin:8px 0 12px; line-height:1.4; overflow-wrap:anywhere; }
57
- .cuigengji h3 { font-size:16px; margin:16px 0 8px; }
58
- .cuigengji button { cursor:pointer; min-height:36px; }
59
- .cuigengji .primary { background:var(--dsw-alias-state-business-primary,#4d6bfe); border-color:transparent; color:var(--dsw-alias-label-on-color,#fff); font-weight:600; }
60
- .cuigengji .danger,.cuigengji .error-text { color:var(--dsw-alias-state-error-primary,#bf443a); }
61
- .cuigengji .workbench-body { flex:1; min-height:0; display:flex; flex-direction:column; overflow:hidden; }
62
- .cuigengji .page { padding:20px 16px; overflow:auto; flex:1; min-height:0; }
63
- .cuigengji .empty { padding:24px 16px; color:var(--dsw-alias-label-secondary,#737780); line-height:1.8; }
64
- .cuigengji .menu { position:relative; }
65
- .cuigengji .menu>summary { cursor:pointer; list-style:none; padding:8px; min-height:36px; font-size:13px; border-radius:6px; }
66
- .cuigengji .menu[open]>summary { background:var(--dsw-alias-bg-layer-1,#f1f2f5); }
67
- .cuigengji .menu-panel { position:absolute; right:0; top:100%; z-index:20; width:180px; padding:8px; border:1px solid var(--dsw-alias-border-l1,#ddd); border-radius:8px; background:var(--dsw-alias-bg-base,#fff); box-shadow:0 8px 24px #0002; max-height:65vh; overflow:auto; }
68
- .cuigengji .menu-panel button { display:block; width:100%; text-align:left; margin:2px 0; }
69
- .cuigengji .settings-panel { width:min(300px,76vw); }
70
- .cuigengji .chapter-workspace { flex:1; display:flex; min-width:0; min-height:0; overflow:hidden; }
71
- .cuigengji .chapter-directory { position:relative; width:100%; min-height:0; padding:16px; overflow:auto; overscroll-behavior:none; background:color-mix(in srgb,var(--dsw-alias-label-primary,#252936) 2%,var(--dsw-alias-bg-base,#fff)); }
72
- .cuigengji .chapter-directory h2 { font-size:16px; }
73
- .cuigengji .search { width:100%; }
74
- .cuigengji .directory-options { margin:8px 0; font-size:12px; color:var(--dsw-alias-label-secondary,#737780); }
75
- .cuigengji .volume-group { margin-top:16px; }
76
- .cuigengji .chapter-item { display:flex; align-items:center; gap:12px; width:100%; border:0; margin:4px 0; text-align:left; background:transparent; padding:12px 10px; line-height:1.5; }
77
- .cuigengji .chapter-item>span { flex:1; overflow-wrap:anywhere; }
78
- .cuigengji .chapter-item small { color:var(--dsw-alias-label-secondary,#737780); white-space:nowrap; font-size:11px; font-variant-numeric:tabular-nums; }
79
- .cuigengji .chapter-item.selected { background:color-mix(in srgb,var(--dsw-alias-state-business-primary,#4d6bfe) 12%,transparent); }
80
- .cuigengji .chapter-main { flex:1; min-width:0; min-height:0; display:flex; flex-direction:column; }
81
- .cuigengji .show-editor .chapter-directory,.cuigengji .show-directory .chapter-main { display:none; }
82
-
83
- .cuigengji .editor-heading { flex:none; padding:12px 16px; border-bottom:1px solid var(--dsw-alias-border-l1,#8883); }
84
- .cuigengji .editor-heading h2 { margin:2px 0 0; font-size:22px; font-weight:600; letter-spacing:.02em; }
85
- .cuigengji .editor-scroll { flex:1; min-height:0; overflow:auto; padding:28px 24px; scrollbar-gutter:stable; }
86
- .cuigengji .segmented { display:flex; border:0; background:color-mix(in srgb,var(--dsw-alias-label-primary,#252936) 5%,var(--dsw-alias-bg-base,#fff)); border-radius:8px; padding:3px; gap:2px; }
87
- .cuigengji .segmented button { border:0; background:transparent; min-height:30px; padding:4px 10px; }
88
- .cuigengji .segmented button[aria-pressed=true] { background:var(--dsw-alias-bg-base,#fff); box-shadow:0 1px 3px #0001; font-weight:600; }
89
- .cuigengji .inline-field { display:flex; align-items:center; gap:6px; margin:0 0 0 auto; font-size:12px; }
90
- .cuigengji .inline-field select { padding:4px; }
91
- .cuigengji .binding-line { font-size:12px; color:var(--dsw-alias-label-secondary,#737780); margin-top:8px; }
92
- .cuigengji .binding-line button { min-height:28px; padding:3px 6px; font-size:12px; }
93
- .cuigengji .manuscript { display:block; max-width:36em; width:100%; margin:0 auto; line-height:2; white-space:pre-wrap; overflow-wrap:anywhere; font-family:inherit; }
94
- .cuigengji textarea.manuscript { min-height:55vh; resize:vertical; padding:16px; font-size:16px; border-color:transparent; background:transparent; }
95
-
96
- .cuigengji article.manuscript { padding:16px 16px 32px; min-height:180px; }
97
- .cuigengji .reading-text { max-width:720px; margin:auto; font-size:16px; line-height:1.85; overflow-wrap:anywhere; }
98
- .cuigengji .reading-text p { white-space:pre-wrap; }
99
- .cuigengji .savebar { flex:none; display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:12px; padding:12px 16px; border-top:1px solid var(--dsw-alias-border-l1,#8884); background:var(--dsw-alias-bg-base,#fff); }
100
- .cuigengji .savebar button { white-space:nowrap; }
101
- .cuigengji .savebar span { font-size:12px; }
102
- .cuigengji .history { max-width:720px; margin:24px auto 0; border-top:1px solid var(--dsw-alias-border-l1,#8884); }
103
- .cuigengji .history-item { padding:12px 0; border-bottom:1px solid var(--dsw-alias-border-l1,#8883); }
104
-
105
- .cuigengji .card { border:0; border-bottom:1px solid var(--dsw-alias-border-l1,#8883); border-radius:0; padding:16px 0; margin:0 0 16px; }
106
- .cuigengji .list button { text-align:left; padding:12px 8px; border:0; border-bottom:1px solid var(--dsw-alias-border-l1,#8883); border-radius:0; background:transparent; overflow-wrap:anywhere; }
107
- .cuigengji .sticky-actions { position:sticky; bottom:-20px; margin:16px -16px 0; z-index:2; }
108
- .cuigengji .source-row { padding:10px 0; border-bottom:1px solid var(--dsw-alias-border-l1,#8883); }
109
- .cuigengji input:not([type=checkbox]),.cuigengji select { max-width:100%; }
110
- .cuigengji .notice { padding:10px; border:1px solid var(--dsw-alias-border-l1,#8886); border-left:3px solid var(--dsw-alias-state-business-primary,#4d6bfe); margin:8px 16px; white-space:pre-wrap; flex:none; }
111
- .cuigengji .notice button { margin:6px; }
112
- .cuigengji .page .notice,.cuigengji .editor-scroll .notice { margin:8px 0; }
113
- @container (min-width:760px) {
114
- .cuigengji .chapter-directory { display:block!important; width:252px; flex:none; border-right:1px solid var(--dsw-alias-border-l1,#8884); }
115
- .cuigengji .chapter-main { display:flex!important; }
116
- .cuigengji .directory-back { display:none; }
117
- .cuigengji .editor-heading,.cuigengji .savebar { padding-left:24px; padding-right:24px; }
118
- .cuigengji .page { padding:24px; }
119
- .cuigengji .sticky-actions {bottom:-24px; margin-left:-24px; margin-right:-24px;}
120
- }
121
- @media (pointer:coarse) { .cuigengji button,.cuigengji summary { min-height:44px; } }
122
-
123
- .cuigengji .module-heading { padding:12px 16px; border-bottom:1px solid var(--dsw-alias-border-l1,#8884); flex:none; }
124
- .cuigengji .planning-workspace { position:relative; flex:1; min-height:0; display:flex; flex-direction:column; }
125
- .cuigengji .planning-columns { display:flex; flex:1; min-height:0; }
126
- .cuigengji .planning-overview { flex:1; min-width:0; display:flex; flex-direction:column; }
127
- .cuigengji .planning-list { overflow:auto; padding:16px; }
128
- .cuigengji .planning-canvas-scroll { flex:1; min-height:0; overflow:auto; background:radial-gradient(circle,#8884 1px,transparent 1px); background-size:20px 20px; }
129
- .cuigengji .planning-canvas { position:relative; }
130
- .cuigengji svg.planning-lines { position:absolute; inset:0; max-height:none; border:0; width:100%; height:100%; overflow:visible; pointer-events:none; }
131
- .cuigengji .planning-lines path { stroke:var(--dsw-alias-label-secondary,#889); stroke-width:1.5; }
132
-
133
- .cuigengji .planning-card.selected { outline:2px solid var(--dsw-focus-ring-color,#4d6bfe); }
134
- .cuigengji .planning-card.connect-source { outline:2px solid var(--dsw-focus-ring-color,#4d6bfe); box-shadow:0 0 0 4px #4d6bfe33; }
135
- .cuigengji .planning-lines .edge-hit { stroke:transparent; stroke-width:18; pointer-events:stroke; cursor:pointer; }
136
- .cuigengji .planning-lines .edge-selected path:not(.edge-hit) { stroke:var(--dsw-focus-ring-color,#4d6bfe); stroke-width:3; }
137
- .cuigengji .planning-lines .edge-hit:focus { outline:none; stroke:#4d6bfe44; }
138
- .cuigengji .prose-tools { display:flex; align-items:center; gap:8px; margin:8px 0; flex-wrap:wrap; }
139
- .cuigengji .planning-title { display:block; font-weight:600; border:0; background:none; text-align:left; width:100%; overflow-wrap:anywhere; }
140
- .cuigengji .planning-card p { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; margin:3px 0; font-size:12px; }
141
- .cuigengji .group-filter { display:flex; gap:6px; overflow:auto; padding:4px 0; scrollbar-width:thin; }
142
- .cuigengji .group-filter button { white-space:nowrap; border:1px solid var(--dsw-alias-border-l1,#8884); border-radius:999px; padding:5px 10px; background:transparent; }
143
- .cuigengji .group-filter button[aria-pressed=true] { background:var(--dsw-alias-bg-layer-1,#eef0f5); border-color:var(--dsw-focus-ring-color,#4d6bfe); font-weight:600; }
144
- .cuigengji .drag-handle { cursor:grab; touch-action:none; font-size:11px; opacity:.7; }
145
- .cuigengji .canvas-tools { padding:0 12px; flex:none; }
146
- .cuigengji .planning-history { position:absolute; inset:0; z-index:30; background:var(--dsw-alias-bg-base,#fff); }
147
- .cuigengji .preset-layout { display:flex; gap:16px; min-height:0; }
148
- .cuigengji .preset-list { width:220px; flex:none; }
149
- .cuigengji .preset-editor { flex:1; min-width:0; }
150
- .cuigengji .preset-list button { display:block; width:100%; text-align:left; margin-bottom:0; border:0; border-bottom:1px solid var(--dsw-alias-border-l1,#8883); border-radius:0; padding:12px 8px; overflow-wrap:anywhere; }
151
- .cuigengji .source-row button { margin-left:8px; }
152
- @container(max-width:599px) { .cuigengji .preset-layout {display:block;} .cuigengji .preset-list {width:100%;} .cuigengji .preset-list.is-selected {display:none;} }
153
-
154
- .cuigengji .planning-directory { display:none; width:160px; flex:none; overflow:auto; padding:12px; border-right:1px solid var(--dsw-alias-border-l1,#8883); }
155
- .cuigengji .planning-directory button { border:0; text-align:left; background:none; width:100%; overflow-wrap:anywhere; }
156
- @container(min-width:1000px) { .cuigengji .planning-directory {display:block;} }
157
-
158
- .cuigengji .memory-layout { display:flex; gap:20px; }
159
- .cuigengji .memory-overview { flex:1; min-width:0; }
160
-
161
- .cuigengji .editor-shell { flex:1; min-height:0; display:flex; flex-direction:column; position:relative; }
162
- .cuigengji .history-panel { position:absolute; inset:0; background:var(--dsw-alias-bg-base,#fff); z-index:10; overflow:auto; padding:16px; }
163
-
164
- .cuigengji .planning-card .planning-title { display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; max-height:56px; }
165
- .cuigengji .planning-card { position:absolute; width:220px; min-height:120px; border:1px solid var(--dsw-alias-border-l1,#8886); border-radius:10px; padding:10px; background:var(--dsw-alias-bg-base,#fff); box-shadow:0 2px 8px #0001; height:145px; }
166
-
167
- .cuigengji .planning-branch { padding-left:12px; border-left:1px solid var(--dsw-alias-border-l1,#8883); }
168
- .cuigengji .planning-directory summary { overflow-wrap:anywhere; }
169
- .cuigengji .planning-directory [aria-current=true] { font-weight:700; background:var(--dsw-alias-bg-layer-1,#eef0f5); }
170
- .cuigengji .planning-reading pre,.cuigengji .planning-history pre { white-space:pre-wrap; overflow-wrap:anywhere; }
171
-
172
- .cuigengji .header-row { flex-wrap:nowrap; gap:4px; }
173
- .cuigengji .header-row .book-picker { min-width:0; text-overflow:ellipsis; }
174
- .cuigengji .section-fold { padding:12px 0; margin:0 0 16px; border-bottom:1px solid var(--dsw-alias-border-l1,#8883); }
175
- .cuigengji .section-fold>summary { font-weight:600; }
176
- .cuigengji .action-list span { display:block; font-size:12px; color:var(--dsw-alias-label-secondary,#737780); margin-top:4px; }
177
- .cuigengji .volume-toggle { border:0; background:none; text-align:left; padding:6px 0; overflow-wrap:anywhere; }
178
- .cuigengji .volume-toggle small { font-weight:400; opacity:.7; margin-left:4px; }
179
- .cuigengji .return-strip { padding:4px 16px; flex:none; border-bottom:1px solid var(--dsw-alias-border-l1,#8883); }
180
- .cuigengji .return-strip button { border:0; background:none; font-size:12px; }
181
- .cuigengji input[type=file] { width:100%; min-width:0; }
182
- .cuigengji .status-badge { display:inline-block; padding:2px 0; border-radius:6px; background:none; font-size:12px; margin-left:6px; color:var(--dsw-alias-label-secondary,#737780); }
183
- .cuigengji .planning-reading pre { border:0; padding:0; max-height:none; font-size:16px; }
184
- .cuigengji .planning-list .card { padding:12px 0; }
185
- .cuigengji .breadcrumbs { font-size:12px; }
186
- .cuigengji .breadcrumbs button { border:0; background:none; padding:4px; min-height:28px; overflow-wrap:anywhere; }
187
- .cuigengji .canvas-tools .menu { margin-left:auto; }
188
- .cuigengji .menu>summary.primary { background:var(--dsw-alias-state-business-primary,#4d6bfe); color:var(--dsw-alias-label-on-color,#fff); padding:8px 12px; }
189
- @container(max-width:399px){.cuigengji .page,.cuigengji .editor-scroll {padding:16px 12px;}.cuigengji .workbench-header,.cuigengji .module-heading{padding-left:12px;padding-right:12px;}.cuigengji .preset-list{width:100%;}}
190
- @media(pointer:coarse){.cuigengji button,.cuigengji summary{min-height:44px;}}
191
-
192
- .cuigengji .list button.selected,.cuigengji .preset-list button.selected {background:color-mix(in srgb,var(--dsw-alias-state-business-primary,#4d6bfe) 10%,transparent);font-weight:600;}
193
- .cuigengji .memory-detail .section-fold,.cuigengji .memory-detail .card {margin-top:12px;}
194
- .cuigengji .icon-button { border:0; background:transparent; min-width:32px; padding:4px 8px; font-size:18px; }
195
- .cuigengji .directory-heading { flex-wrap:nowrap; }
196
- .cuigengji .directory-collapsed .chapter-directory { width:48px; padding-left:6px; padding-right:6px; }
197
- .cuigengji .directory-collapsed .chapter-directory > :not(.directory-heading) { display:none; }
198
- .cuigengji .directory-collapsed .directory-heading h2 { display:none; }
199
- .cuigengji .directory-collapsed .directory-heading { display:flex; flex-direction:column; gap:4px; }
200
- .cuigengji .directory-collapsed .directory-heading .grow { display:none; }
201
- @container(max-width:759px) {
202
- .cuigengji .directory-collapsed .chapter-directory { display:none; }
203
- .cuigengji .directory-collapsed.show-directory .chapter-directory { display:block; width:100%; }
204
- }
205
-
206
- .cuigengji .group-toolbar {display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:8px 0;}
207
- .cuigengji .group-description {flex-basis:100%;margin:0;}
208
- .cuigengji .group-toolbar label {max-width:240px;margin:0;}
209
- .cuigengji .selectable-entry {display:flex;align-items:center;gap:8px;}
210
- .cuigengji .selectable-entry > button {flex:1;min-width:0;text-align:left;}
211
- .cuigengji .planning-group-frame {position:absolute;border:1px solid color-mix(in srgb,#4d6bfe 28%,transparent);border-radius:12px;background:color-mix(in srgb,#4d6bfe 3%,transparent);pointer-events:none;}
212
- .cuigengji .planning-group-frame > button {pointer-events:auto;position:relative;z-index:1;margin:2px 6px;padding:4px 8px;background:transparent;border:0;font-weight:600;}
213
- .cuigengji .planning-lines {pointer-events:none;}
214
- .cuigengji .planning-directory details > button {display:block;width:100%;text-align:left;margin:4px 0;}
215
-
216
- /* Keep navigation quiet and give the document the largest share of the panel. */
217
- .cuigengji .workbench-header {padding-top:6px;}
218
- .cuigengji .page {padding-top:16px;}
219
- .cuigengji .module-heading {padding-top:8px;padding-bottom:10px;}
220
- .cuigengji .module-heading > .muted {margin:4px 0 10px;}
221
- .cuigengji .row > h2 {margin:0;}
222
- .cuigengji .menu-panel button {border:0;background:transparent;}
223
- .cuigengji button:not(:disabled):hover,.cuigengji .menu>summary:hover {background:var(--dsw-alias-bg-layer-1,#f0f2f7);}
224
- .cuigengji button.primary:hover {background:var(--dsw-alias-state-business-primary,#4d6bfe);filter:brightness(.95);}
225
- .cuigengji .memory-detail article.manuscript {min-height:0;padding-bottom:16px;}
226
- .cuigengji .memory-overview .segmented {width:fit-content;max-width:100%;}
227
- .cuigengji .planning-list .card {margin-bottom:0;padding:10px 0;}
228
- .cuigengji .planning-list .card > p:empty {display:none;}
229
- .cuigengji .prose-tools {margin:0 0 8px;}
230
- .cuigengji .prose-tools button {min-height:30px;padding:4px 8px;font-size:12px;}
231
- .cuigengji .editor-heading {padding-top:16px;padding-bottom:12px;}
232
- .cuigengji .preset-layout {margin-top:12px;}
233
- .cuigengji .directory-collapsed .directory-heading > .primary {display:none;}
234
-
235
- /* One stable toolbar; document actions never float among the paragraphs. */
236
- .cuigengji nav button.selected {background:transparent;font-weight:600;}
237
- .cuigengji .chapter-title-row {gap:12px;margin:0 0 16px;flex-wrap:nowrap;}
238
- .cuigengji .chapter-title {min-width:0;}
239
- .cuigengji .chapter-toolbar {display:flex;align-items:center;gap:12px;flex-wrap:wrap;}
240
- .cuigengji .chapter-toolbar .prose-tools {margin:0;gap:4px;}
241
- .cuigengji .chapter-toolbar .prose-tools button {min-height:36px;font-size:13px;padding:7px 10px;}
242
- .cuigengji .quiet-button,.cuigengji .directory-back {border-color:transparent;background:transparent;}
243
- .cuigengji .chapter-main .editor-scroll.is-editing {display:block;}
244
- .cuigengji .chapter-main textarea.manuscript {display:block;min-height:240px;resize:none;overflow:hidden;border:0;border-radius:0;background:transparent;box-shadow:none;}
245
- .cuigengji .chapter-main textarea.manuscript:focus-visible {outline:none;box-shadow:none;}
246
- .cuigengji .chapter-main .savebar {flex-wrap:nowrap;gap:8px;}
247
- .cuigengji .chapter-main .savebar > div {flex:1;min-width:0;font-size:12px;line-height:1.6;}
248
- .cuigengji .chapter-main .savebar > div > span {display:block;}
249
- .cuigengji .auto-savebar {padding-top:8px;padding-bottom:8px;}
250
- .cuigengji .auto-savebar > div {display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;}
251
- .cuigengji .history-session {border-bottom:1px solid var(--dsw-alias-border-l1,#dde0e6);}
252
- .cuigengji .flow-context {display:flex;align-items:flex-start;gap:8px;margin:16px 0 24px;padding:12px;background:var(--dsw-alias-bg-layer-1,#f6f7fa);border-radius:8px;}
253
- .cuigengji .flow-context > div {flex:1;min-width:0;}
254
- .cuigengji .flow-context small {display:block;color:var(--dsw-alias-label-secondary,#737780);margin-bottom:6px;}
255
- .cuigengji .flow-context strong {display:block;overflow-wrap:anywhere;}
256
- .cuigengji .flow-context button {display:block;width:100%;text-align:left;border:0;background:transparent;font-size:12px;padding:4px;overflow-wrap:anywhere;}
257
- .cuigengji .flow-context p {font-size:12px;color:var(--dsw-alias-label-secondary,#737780);margin:4px 0;}
258
- .cuigengji .planning-state {display:block;font-size:11px;color:var(--dsw-alias-label-secondary,#737780);margin:8px 0 0;}
259
- .cuigengji .planning-state.state-selected {color:var(--dsw-alias-state-business-primary,#4d6bfe);}
260
- .cuigengji .planning-state.state-dropped {text-decoration:line-through;}
261
- .cuigengji .chapter-toolbar .inline-field {gap:4px;white-space:nowrap;}
262
- .cuigengji .chapter-toolbar .inline-field select {border-color:transparent;}
263
- .cuigengji .chapter-title-row .menu>summary {font-size:20px;line-height:20px;}
264
- .cuigengji .directory-heading {margin:0 0 16px;gap:4px;}
265
- .cuigengji .directory-heading h2 {margin:0;}
266
- @container(max-width:759px) {
267
- .cuigengji .chapter-directory .directory-heading > .icon-button {display:none;}
268
- .cuigengji .directory-collapsed.show-directory .chapter-directory {padding:16px;}
269
- .cuigengji .directory-collapsed.show-directory .chapter-directory > :not(.directory-heading) {display:block;}
270
- .cuigengji .directory-collapsed.show-directory .directory-heading {flex-direction:row;}
271
- .cuigengji .directory-collapsed.show-directory .directory-heading h2,.cuigengji .directory-collapsed.show-directory .directory-heading > .primary {display:block;}
272
- .cuigengji .chapter-main .editor-scroll {padding:20px 12px;}
273
- .cuigengji .chapter-main .manuscript {padding-left:8px;padding-right:8px;}
274
- .cuigengji .chapter-toolbar {gap:8px;}
275
- }
276
- ` + visualStyles + selectStyles + graphStyles + managementStyles + transferStyles + welcomeStyles + batchStyles + navigationStyles;
5
+ import {transferStyles} from './features/transfer/style.ts';
6
+ import {welcomeStyles} from './features/welcome/style.ts';
7
+ import {batchStyles} from './shared/batch-style.ts';
8
+ import {navigationStyles} from './shared/navigation-style.ts';
9
+ export const styles = `
10
+ .cuigengji { color:var(--dsw-alias-label-primary,#252936); font-family:var(--dsw-font-family,system-ui,-apple-system,"Segoe UI","Microsoft YaHei",sans-serif); font-size:13px; padding:14px; height:100%; overflow:auto; box-sizing:border-box; }
11
+ .cuigengji * { box-sizing:border-box; }
12
+
13
+
14
+ .cuigengji p { line-height:1.7; }
15
+ .cuigengji button,.cuigengji input,.cuigengji select,.cuigengji textarea { font:inherit; color:inherit; border:1px solid var(--dsw-alias-border-l1,#dde0e6); background:var(--dsw-alias-button-floating-fill,transparent); border-radius:8px; padding:7px 11px; }
16
+
17
+ .cuigengji button:disabled { opacity:.5; cursor:default; }
18
+ .cuigengji button:focus-visible,.cuigengji input:focus-visible,.cuigengji textarea:focus-visible,.cuigengji select:focus-visible { outline:2px solid var(--dsw-focus-ring-color,#4d6bfe); outline-offset:2px; }
19
+ .cuigengji [aria-selected=true],.cuigengji .selected { border-color:var(--dsw-alias-state-business-primary,#4d6bfe); background:color-mix(in srgb,var(--dsw-alias-state-business-primary,#4d6bfe) 10%,transparent); }
20
+ .cuigengji label { display:grid; gap:5px; margin:10px 0; }
21
+ .cuigengji textarea { width:100%; min-height:130px; resize:vertical; line-height:1.85; }
22
+ .cuigengji .prose { min-height:360px; }
23
+ .cuigengji .row { display:flex; gap:7px; align-items:center; flex-wrap:wrap; margin:8px 0; }
24
+ .cuigengji .row>* { min-width:0; }
25
+
26
+ .cuigengji .muted { opacity:.7; font-size:12px; }
27
+
28
+ .cuigengji .notice.error { border-left-color:#c64e42; }
29
+ .cuigengji .list { display:grid; gap:0; }
30
+
31
+ .cuigengji .split { display:grid; grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr)); gap:12px; }
32
+ .cuigengji pre { white-space:pre-wrap; overflow-wrap:anywhere; font:inherit; line-height:1.75; max-height:420px; overflow:auto; border:1px solid var(--dsw-alias-border-l1,#8886); padding:10px; }
33
+ .cuigengji svg { width:100%; max-height:300px; border:1px solid var(--dsw-alias-border-l1,#8886); border-radius:5px; }
34
+ .cuigengji svg text { fill:currentColor; font-size:11px; }
35
+ .cuigengji svg line { stroke:var(--dsw-alias-border-l1,#999); stroke-width:2; }
36
+ .cuigengji svg circle { fill:var(--dsw-alias-button-floating-fill,#777); stroke:var(--dsw-alias-state-business-primary,#4d6bfe); stroke-width:2; }
37
+ .cuigengji svg g { cursor:pointer; }
38
+ .cuigengji summary { cursor:pointer; padding:8px 0; }
39
+ .cuigengji .grow { flex:1; }
40
+ .cuigengji .editor-fields { border:0; padding:0; margin:0; min-width:0; }
41
+ .cuigengji-dialog::backdrop { background:#0008; }
42
+ .cuigengji.cuigengji-dialog { margin:auto; height:fit-content; max-height:90vh; width:min(420px,calc(100% - 36px)); padding:16px; border:1px solid var(--dsw-alias-border-l1,#8886); border-radius:8px; background:var(--dsw-alias-bg-base,#fff); box-shadow:0 12px 40px #0005; }
43
+ .cuigengji-dialog p { margin:0 0 12px; white-space:pre-wrap; }
44
+ .cuigengji-dialog input { width:100%; }
45
+
46
+ /* Workbench layout follows the panel width, including DSH full-screen mode. */
47
+ .cuigengji:not(dialog) { container-type:inline-size; display:flex; flex-direction:column; padding:0; font-size:14px; min-height:0; height:100%; overflow:hidden; background:var(--dsw-alias-bg-base,#fff); }
48
+ .cuigengji .workbench-header { flex:none; padding:8px 16px 0; border-bottom:1px solid var(--dsw-alias-border-l1,#8884); }
49
+ .cuigengji .eyebrow { font-size:12px; color:var(--dsw-alias-label-secondary,#737780); letter-spacing:.04em; }
50
+ .cuigengji .identity { padding-bottom:4px; }
51
+ .cuigengji .compact { margin:4px 0; }
52
+ .cuigengji .book-picker { font-size:16px; font-weight:600; border:0; padding-left:0; background:transparent; width:1px; }
53
+ .cuigengji nav { display:flex; gap:4px; flex-wrap:nowrap; margin:0; padding:0; border:0; }
54
+ .cuigengji nav button { flex:1; border:0; border-bottom:2px solid transparent; border-radius:0; padding:12px 6px; background:transparent; color:var(--dsw-alias-label-secondary,#737780); }
55
+ .cuigengji nav button.selected { border-bottom-color:var(--dsw-alias-state-business-primary,#4d6bfe); color:var(--dsw-alias-state-business-primary,#4d6bfe); }
56
+ .cuigengji h2 { font-size:18px; margin:8px 0 12px; line-height:1.4; overflow-wrap:anywhere; }
57
+ .cuigengji h3 { font-size:16px; margin:16px 0 8px; }
58
+ .cuigengji button { cursor:pointer; min-height:36px; }
59
+ .cuigengji .primary { background:var(--dsw-alias-state-business-primary,#4d6bfe); border-color:transparent; color:var(--dsw-alias-label-on-color,#fff); font-weight:600; }
60
+ .cuigengji .danger,.cuigengji .error-text { color:var(--dsw-alias-state-error-primary,#bf443a); }
61
+ .cuigengji .workbench-body { flex:1; min-height:0; display:flex; flex-direction:column; overflow:hidden; }
62
+ .cuigengji .page { padding:20px 16px; overflow:auto; flex:1; min-height:0; }
63
+ .cuigengji .empty { padding:24px 16px; color:var(--dsw-alias-label-secondary,#737780); line-height:1.8; }
64
+ .cuigengji .menu { position:relative; }
65
+ .cuigengji .menu>summary { cursor:pointer; list-style:none; padding:8px; min-height:36px; font-size:13px; border-radius:6px; }
66
+ .cuigengji .menu[open]>summary { background:var(--dsw-alias-bg-layer-1,#f1f2f5); }
67
+ .cuigengji .menu-panel { position:absolute; right:0; top:100%; z-index:20; width:180px; padding:8px; border:1px solid var(--dsw-alias-border-l1,#ddd); border-radius:8px; background:var(--dsw-alias-bg-base,#fff); box-shadow:0 8px 24px #0002; max-height:65vh; overflow:auto; }
68
+ .cuigengji .menu-panel button { display:block; width:100%; text-align:left; margin:2px 0; }
69
+ .cuigengji .settings-panel { width:min(300px,76vw); }
70
+ .cuigengji .chapter-workspace { flex:1; display:flex; min-width:0; min-height:0; overflow:hidden; }
71
+ .cuigengji .chapter-directory { position:relative; width:100%; min-height:0; padding:16px; overflow:auto; overscroll-behavior:none; background:color-mix(in srgb,var(--dsw-alias-label-primary,#252936) 2%,var(--dsw-alias-bg-base,#fff)); }
72
+ .cuigengji .chapter-directory h2 { font-size:16px; }
73
+ .cuigengji .search { width:100%; }
74
+ .cuigengji .directory-options { margin:8px 0; font-size:12px; color:var(--dsw-alias-label-secondary,#737780); }
75
+ .cuigengji .volume-group { margin-top:16px; }
76
+ .cuigengji .chapter-item { display:flex; align-items:center; gap:12px; width:100%; border:0; margin:4px 0; text-align:left; background:transparent; padding:12px 10px; line-height:1.5; }
77
+ .cuigengji .chapter-item>span { flex:1; overflow-wrap:anywhere; }
78
+ .cuigengji .chapter-item small { color:var(--dsw-alias-label-secondary,#737780); white-space:nowrap; font-size:11px; font-variant-numeric:tabular-nums; }
79
+ .cuigengji .chapter-item.selected { background:color-mix(in srgb,var(--dsw-alias-state-business-primary,#4d6bfe) 12%,transparent); }
80
+ .cuigengji .chapter-main { flex:1; min-width:0; min-height:0; display:flex; flex-direction:column; }
81
+ .cuigengji .show-editor .chapter-directory,.cuigengji .show-directory .chapter-main { display:none; }
82
+
83
+ .cuigengji .editor-heading { flex:none; padding:12px 16px; border-bottom:1px solid var(--dsw-alias-border-l1,#8883); }
84
+ .cuigengji .editor-heading h2 { margin:2px 0 0; font-size:22px; font-weight:600; letter-spacing:.02em; }
85
+ .cuigengji .editor-scroll { flex:1; min-height:0; overflow:auto; padding:28px 24px; scrollbar-gutter:stable; }
86
+ .cuigengji .segmented { display:flex; border:0; background:color-mix(in srgb,var(--dsw-alias-label-primary,#252936) 5%,var(--dsw-alias-bg-base,#fff)); border-radius:8px; padding:3px; gap:2px; }
87
+ .cuigengji .segmented button { border:0; background:transparent; min-height:30px; padding:4px 10px; }
88
+ .cuigengji .segmented button[aria-pressed=true] { background:var(--dsw-alias-bg-base,#fff); box-shadow:0 1px 3px #0001; font-weight:600; }
89
+ .cuigengji .inline-field { display:flex; align-items:center; gap:6px; margin:0 0 0 auto; font-size:12px; }
90
+ .cuigengji .inline-field select { padding:4px; }
91
+ .cuigengji .binding-line { font-size:12px; color:var(--dsw-alias-label-secondary,#737780); margin-top:8px; }
92
+ .cuigengji .binding-line button { min-height:28px; padding:3px 6px; font-size:12px; }
93
+ .cuigengji .manuscript { display:block; max-width:36em; width:100%; margin:0 auto; line-height:2; white-space:pre-wrap; overflow-wrap:anywhere; font-family:inherit; }
94
+ .cuigengji textarea.manuscript { min-height:55vh; resize:vertical; padding:16px; font-size:16px; border-color:transparent; background:transparent; }
95
+
96
+ .cuigengji article.manuscript { padding:16px 16px 32px; min-height:180px; }
97
+ .cuigengji .reading-text { max-width:720px; margin:auto; font-size:16px; line-height:1.85; overflow-wrap:anywhere; }
98
+ .cuigengji .reading-text p { white-space:pre-wrap; }
99
+ .cuigengji .savebar { flex:none; display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:12px; padding:12px 16px; border-top:1px solid var(--dsw-alias-border-l1,#8884); background:var(--dsw-alias-bg-base,#fff); }
100
+ .cuigengji .savebar button { white-space:nowrap; }
101
+ .cuigengji .savebar span { font-size:12px; }
102
+ .cuigengji .history { max-width:720px; margin:24px auto 0; border-top:1px solid var(--dsw-alias-border-l1,#8884); }
103
+ .cuigengji .history-item { padding:12px 0; border-bottom:1px solid var(--dsw-alias-border-l1,#8883); }
104
+
105
+ .cuigengji .card { border:0; border-bottom:1px solid var(--dsw-alias-border-l1,#8883); border-radius:0; padding:16px 0; margin:0 0 16px; }
106
+ .cuigengji .list button { text-align:left; padding:12px 8px; border:0; border-bottom:1px solid var(--dsw-alias-border-l1,#8883); border-radius:0; background:transparent; overflow-wrap:anywhere; }
107
+ .cuigengji .sticky-actions { position:sticky; bottom:-20px; margin:16px -16px 0; z-index:2; }
108
+ .cuigengji .source-row { padding:10px 0; border-bottom:1px solid var(--dsw-alias-border-l1,#8883); }
109
+ .cuigengji input:not([type=checkbox]),.cuigengji select { max-width:100%; }
110
+ .cuigengji .notice { padding:10px; border:1px solid var(--dsw-alias-border-l1,#8886); border-left:3px solid var(--dsw-alias-state-business-primary,#4d6bfe); margin:8px 16px; white-space:pre-wrap; flex:none; }
111
+ .cuigengji .notice button { margin:6px; }
112
+ .cuigengji .page .notice,.cuigengji .editor-scroll .notice { margin:8px 0; }
113
+ @container (min-width:760px) {
114
+ .cuigengji .chapter-directory { display:block!important; width:252px; flex:none; border-right:1px solid var(--dsw-alias-border-l1,#8884); }
115
+ .cuigengji .chapter-main { display:flex!important; }
116
+ .cuigengji .directory-back { display:none; }
117
+ .cuigengji .editor-heading,.cuigengji .savebar { padding-left:24px; padding-right:24px; }
118
+ .cuigengji .page { padding:24px; }
119
+ .cuigengji .sticky-actions {bottom:-24px; margin-left:-24px; margin-right:-24px;}
120
+ }
121
+ @media (pointer:coarse) { .cuigengji button,.cuigengji summary { min-height:44px; } }
122
+
123
+ .cuigengji .module-heading { padding:12px 16px; border-bottom:1px solid var(--dsw-alias-border-l1,#8884); flex:none; }
124
+ .cuigengji .planning-workspace { position:relative; flex:1; min-height:0; display:flex; flex-direction:column; }
125
+ .cuigengji .planning-columns { display:flex; flex:1; min-height:0; }
126
+ .cuigengji .planning-overview { flex:1; min-width:0; display:flex; flex-direction:column; }
127
+ .cuigengji .planning-list { overflow:auto; padding:16px; }
128
+ .cuigengji .planning-canvas-scroll { flex:1; min-height:0; overflow:auto; background:radial-gradient(circle,#8884 1px,transparent 1px); background-size:20px 20px; }
129
+ .cuigengji .planning-canvas { position:relative; }
130
+ .cuigengji svg.planning-lines { position:absolute; inset:0; max-height:none; border:0; width:100%; height:100%; overflow:visible; pointer-events:none; }
131
+ .cuigengji .planning-lines path { stroke:var(--dsw-alias-label-secondary,#889); stroke-width:1.5; }
132
+
133
+ .cuigengji .planning-card.selected { outline:2px solid var(--dsw-focus-ring-color,#4d6bfe); }
134
+ .cuigengji .planning-card.connect-source { outline:2px solid var(--dsw-focus-ring-color,#4d6bfe); box-shadow:0 0 0 4px #4d6bfe33; }
135
+ .cuigengji .planning-lines .edge-hit { stroke:transparent; stroke-width:18; pointer-events:stroke; cursor:pointer; }
136
+ .cuigengji .planning-lines .edge-selected path:not(.edge-hit) { stroke:var(--dsw-focus-ring-color,#4d6bfe); stroke-width:3; }
137
+ .cuigengji .planning-lines .edge-hit:focus { outline:none; stroke:#4d6bfe44; }
138
+ .cuigengji .prose-tools { display:flex; align-items:center; gap:8px; margin:8px 0; flex-wrap:wrap; }
139
+ .cuigengji .planning-title { display:block; font-weight:600; border:0; background:none; text-align:left; width:100%; overflow-wrap:anywhere; }
140
+ .cuigengji .planning-card p { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; margin:3px 0; font-size:12px; }
141
+ .cuigengji .group-filter { display:flex; gap:6px; overflow:auto; padding:4px 0; scrollbar-width:thin; }
142
+ .cuigengji .group-filter button { white-space:nowrap; border:1px solid var(--dsw-alias-border-l1,#8884); border-radius:999px; padding:5px 10px; background:transparent; }
143
+ .cuigengji .group-filter button[aria-pressed=true] { background:var(--dsw-alias-bg-layer-1,#eef0f5); border-color:var(--dsw-focus-ring-color,#4d6bfe); font-weight:600; }
144
+ .cuigengji .drag-handle { cursor:grab; touch-action:none; font-size:11px; opacity:.7; }
145
+ .cuigengji .canvas-tools { padding:0 12px; flex:none; }
146
+ .cuigengji .planning-history { position:absolute; inset:0; z-index:30; background:var(--dsw-alias-bg-base,#fff); }
147
+ .cuigengji .preset-layout { display:flex; gap:16px; min-height:0; }
148
+ .cuigengji .preset-list { width:220px; flex:none; }
149
+ .cuigengji .preset-editor { flex:1; min-width:0; }
150
+ .cuigengji .preset-list button { display:block; width:100%; text-align:left; margin-bottom:0; border:0; border-bottom:1px solid var(--dsw-alias-border-l1,#8883); border-radius:0; padding:12px 8px; overflow-wrap:anywhere; }
151
+ .cuigengji .source-row button { margin-left:8px; }
152
+ @container(max-width:599px) { .cuigengji .preset-layout {display:block;} .cuigengji .preset-list {width:100%;} .cuigengji .preset-list.is-selected {display:none;} }
153
+
154
+ .cuigengji .planning-directory { display:none; width:160px; flex:none; overflow:auto; padding:12px; border-right:1px solid var(--dsw-alias-border-l1,#8883); }
155
+ .cuigengji .planning-directory button { border:0; text-align:left; background:none; width:100%; overflow-wrap:anywhere; }
156
+ @container(min-width:1000px) { .cuigengji .planning-directory {display:block;} }
157
+
158
+ .cuigengji .memory-layout { display:flex; gap:20px; }
159
+ .cuigengji .memory-overview { flex:1; min-width:0; }
160
+
161
+ .cuigengji .editor-shell { flex:1; min-height:0; display:flex; flex-direction:column; position:relative; }
162
+ .cuigengji .history-panel { position:absolute; inset:0; background:var(--dsw-alias-bg-base,#fff); z-index:10; overflow:auto; padding:16px; }
163
+
164
+ .cuigengji .planning-card .planning-title { display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; max-height:56px; }
165
+ .cuigengji .planning-card { position:absolute; width:220px; min-height:120px; border:1px solid var(--dsw-alias-border-l1,#8886); border-radius:10px; padding:10px; background:var(--dsw-alias-bg-base,#fff); box-shadow:0 2px 8px #0001; height:145px; }
166
+
167
+ .cuigengji .planning-branch { padding-left:12px; border-left:1px solid var(--dsw-alias-border-l1,#8883); }
168
+ .cuigengji .planning-directory summary { overflow-wrap:anywhere; }
169
+ .cuigengji .planning-directory [aria-current=true] { font-weight:700; background:var(--dsw-alias-bg-layer-1,#eef0f5); }
170
+ .cuigengji .planning-reading pre,.cuigengji .planning-history pre { white-space:pre-wrap; overflow-wrap:anywhere; }
171
+
172
+ .cuigengji .header-row { flex-wrap:nowrap; gap:4px; }
173
+ .cuigengji .header-row .book-picker { min-width:0; text-overflow:ellipsis; }
174
+ .cuigengji .section-fold { padding:12px 0; margin:0 0 16px; border-bottom:1px solid var(--dsw-alias-border-l1,#8883); }
175
+ .cuigengji .section-fold>summary { font-weight:600; }
176
+ .cuigengji .action-list span { display:block; font-size:12px; color:var(--dsw-alias-label-secondary,#737780); margin-top:4px; }
177
+ .cuigengji .volume-toggle { border:0; background:none; text-align:left; padding:6px 0; overflow-wrap:anywhere; }
178
+ .cuigengji .volume-toggle small { font-weight:400; opacity:.7; margin-left:4px; }
179
+ .cuigengji .return-strip { padding:4px 16px; flex:none; border-bottom:1px solid var(--dsw-alias-border-l1,#8883); }
180
+ .cuigengji .return-strip button { border:0; background:none; font-size:12px; }
181
+ .cuigengji input[type=file] { width:100%; min-width:0; }
182
+ .cuigengji .status-badge { display:inline-block; padding:2px 0; border-radius:6px; background:none; font-size:12px; margin-left:6px; color:var(--dsw-alias-label-secondary,#737780); }
183
+ .cuigengji .planning-reading pre { border:0; padding:0; max-height:none; font-size:16px; }
184
+ .cuigengji .planning-list .card { padding:12px 0; }
185
+ .cuigengji .breadcrumbs { font-size:12px; }
186
+ .cuigengji .breadcrumbs button { border:0; background:none; padding:4px; min-height:28px; overflow-wrap:anywhere; }
187
+ .cuigengji .canvas-tools .menu { margin-left:auto; }
188
+ .cuigengji .menu>summary.primary { background:var(--dsw-alias-state-business-primary,#4d6bfe); color:var(--dsw-alias-label-on-color,#fff); padding:8px 12px; }
189
+ @container(max-width:399px){.cuigengji .page,.cuigengji .editor-scroll {padding:16px 12px;}.cuigengji .workbench-header,.cuigengji .module-heading{padding-left:12px;padding-right:12px;}.cuigengji .preset-list{width:100%;}}
190
+ @media(pointer:coarse){.cuigengji button,.cuigengji summary{min-height:44px;}}
191
+
192
+ .cuigengji .list button.selected,.cuigengji .preset-list button.selected {background:color-mix(in srgb,var(--dsw-alias-state-business-primary,#4d6bfe) 10%,transparent);font-weight:600;}
193
+ .cuigengji .memory-detail .section-fold,.cuigengji .memory-detail .card {margin-top:12px;}
194
+ .cuigengji .icon-button { border:0; background:transparent; min-width:32px; padding:4px 8px; font-size:18px; }
195
+ .cuigengji .directory-heading { flex-wrap:nowrap; }
196
+ .cuigengji .directory-collapsed .chapter-directory { width:48px; padding-left:6px; padding-right:6px; }
197
+ .cuigengji .directory-collapsed .chapter-directory > :not(.directory-heading) { display:none; }
198
+ .cuigengji .directory-collapsed .directory-heading h2 { display:none; }
199
+ .cuigengji .directory-collapsed .directory-heading { display:flex; flex-direction:column; gap:4px; }
200
+ .cuigengji .directory-collapsed .directory-heading .grow { display:none; }
201
+ @container(max-width:759px) {
202
+ .cuigengji .directory-collapsed .chapter-directory { display:none; }
203
+ .cuigengji .directory-collapsed.show-directory .chapter-directory { display:block; width:100%; }
204
+ }
205
+
206
+ .cuigengji .group-toolbar {display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin:8px 0;}
207
+ .cuigengji .group-description {flex-basis:100%;margin:0;}
208
+ .cuigengji .group-toolbar label {max-width:240px;margin:0;}
209
+ .cuigengji .selectable-entry {display:flex;align-items:center;gap:8px;}
210
+ .cuigengji .selectable-entry > button {flex:1;min-width:0;text-align:left;}
211
+ .cuigengji .planning-group-frame {position:absolute;border:1px solid color-mix(in srgb,#4d6bfe 28%,transparent);border-radius:12px;background:color-mix(in srgb,#4d6bfe 3%,transparent);pointer-events:none;}
212
+ .cuigengji .planning-group-frame > button {pointer-events:auto;position:relative;z-index:1;margin:2px 6px;padding:4px 8px;background:transparent;border:0;font-weight:600;}
213
+ .cuigengji .planning-lines {pointer-events:none;}
214
+ .cuigengji .planning-directory details > button {display:block;width:100%;text-align:left;margin:4px 0;}
215
+
216
+ /* Keep navigation quiet and give the document the largest share of the panel. */
217
+ .cuigengji .workbench-header {padding-top:6px;}
218
+ .cuigengji .page {padding-top:16px;}
219
+ .cuigengji .module-heading {padding-top:8px;padding-bottom:10px;}
220
+ .cuigengji .module-heading > .muted {margin:4px 0 10px;}
221
+ .cuigengji .row > h2 {margin:0;}
222
+ .cuigengji .menu-panel button {border:0;background:transparent;}
223
+ .cuigengji button:not(:disabled):hover,.cuigengji .menu>summary:hover {background:var(--dsw-alias-bg-layer-1,#f0f2f7);}
224
+ .cuigengji button.primary:hover {background:var(--dsw-alias-state-business-primary,#4d6bfe);filter:brightness(.95);}
225
+ .cuigengji .memory-detail article.manuscript {min-height:0;padding-bottom:16px;}
226
+ .cuigengji .memory-overview .segmented {width:fit-content;max-width:100%;}
227
+ .cuigengji .planning-list .card {margin-bottom:0;padding:10px 0;}
228
+ .cuigengji .planning-list .card > p:empty {display:none;}
229
+ .cuigengji .prose-tools {margin:0 0 8px;}
230
+ .cuigengji .prose-tools button {min-height:30px;padding:4px 8px;font-size:12px;}
231
+ .cuigengji .editor-heading {padding-top:16px;padding-bottom:12px;}
232
+ .cuigengji .preset-layout {margin-top:12px;}
233
+ .cuigengji .directory-collapsed .directory-heading > .primary {display:none;}
234
+
235
+ /* One stable toolbar; document actions never float among the paragraphs. */
236
+ .cuigengji nav button.selected {background:transparent;font-weight:600;}
237
+ .cuigengji .chapter-title-row {gap:12px;margin:0 0 16px;flex-wrap:nowrap;}
238
+ .cuigengji .chapter-title {min-width:0;}
239
+ .cuigengji .chapter-toolbar {display:flex;align-items:center;gap:12px;flex-wrap:wrap;}
240
+ .cuigengji .chapter-toolbar .prose-tools {margin:0;gap:4px;}
241
+ .cuigengji .chapter-toolbar .prose-tools button {min-height:36px;font-size:13px;padding:7px 10px;}
242
+ .cuigengji .quiet-button,.cuigengji .directory-back {border-color:transparent;background:transparent;}
243
+ .cuigengji .chapter-main .editor-scroll.is-editing {display:block;}
244
+ .cuigengji .chapter-main textarea.manuscript {display:block;min-height:240px;resize:none;overflow:hidden;border:0;border-radius:0;background:transparent;box-shadow:none;}
245
+ .cuigengji .chapter-main textarea.manuscript:focus-visible {outline:none;box-shadow:none;}
246
+ .cuigengji .chapter-main .savebar {flex-wrap:nowrap;gap:8px;}
247
+ .cuigengji .chapter-main .savebar > div {flex:1;min-width:0;font-size:12px;line-height:1.6;}
248
+ .cuigengji .chapter-main .savebar > div > span {display:block;}
249
+ .cuigengji .auto-savebar {padding-top:8px;padding-bottom:8px;}
250
+ .cuigengji .auto-savebar > div {display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;}
251
+ .cuigengji .history-session {border-bottom:1px solid var(--dsw-alias-border-l1,#dde0e6);}
252
+ .cuigengji .flow-context {display:flex;align-items:flex-start;gap:8px;margin:16px 0 24px;padding:12px;background:var(--dsw-alias-bg-layer-1,#f6f7fa);border-radius:8px;}
253
+ .cuigengji .flow-context > div {flex:1;min-width:0;}
254
+ .cuigengji .flow-context small {display:block;color:var(--dsw-alias-label-secondary,#737780);margin-bottom:6px;}
255
+ .cuigengji .flow-context strong {display:block;overflow-wrap:anywhere;}
256
+ .cuigengji .flow-context button {display:block;width:100%;text-align:left;border:0;background:transparent;font-size:12px;padding:4px;overflow-wrap:anywhere;}
257
+ .cuigengji .flow-context p {font-size:12px;color:var(--dsw-alias-label-secondary,#737780);margin:4px 0;}
258
+ .cuigengji .planning-state {display:block;font-size:11px;color:var(--dsw-alias-label-secondary,#737780);margin:8px 0 0;}
259
+ .cuigengji .planning-state.state-selected {color:var(--dsw-alias-state-business-primary,#4d6bfe);}
260
+ .cuigengji .planning-state.state-dropped {text-decoration:line-through;}
261
+ .cuigengji .chapter-toolbar .inline-field {gap:4px;white-space:nowrap;}
262
+ .cuigengji .chapter-toolbar .inline-field select {border-color:transparent;}
263
+ .cuigengji .chapter-title-row .menu>summary {font-size:20px;line-height:20px;}
264
+ .cuigengji .directory-heading {margin:0 0 16px;gap:4px;}
265
+ .cuigengji .directory-heading h2 {margin:0;}
266
+ @container(max-width:759px) {
267
+ .cuigengji .chapter-directory .directory-heading > .icon-button {display:none;}
268
+ .cuigengji .directory-collapsed.show-directory .chapter-directory {padding:16px;}
269
+ .cuigengji .directory-collapsed.show-directory .chapter-directory > :not(.directory-heading) {display:block;}
270
+ .cuigengji .directory-collapsed.show-directory .directory-heading {flex-direction:row;}
271
+ .cuigengji .directory-collapsed.show-directory .directory-heading h2,.cuigengji .directory-collapsed.show-directory .directory-heading > .primary {display:block;}
272
+ .cuigengji .chapter-main .editor-scroll {padding:20px 12px;}
273
+ .cuigengji .chapter-main .manuscript {padding-left:8px;padding-right:8px;}
274
+ .cuigengji .chapter-toolbar {gap:8px;}
275
+ }
276
+ ` + visualStyles + selectStyles + graphStyles + managementStyles + transferStyles + welcomeStyles + batchStyles + navigationStyles;