@waterwx/dsh-novel-forge 1.1.2 → 1.1.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.
- package/README.md +10 -0
- package/lib/client.js +4413 -2428
- package/lib/client.js.map +1 -1
- package/lib/index.js +926 -37
- package/lib/index.js.map +1 -1
- package/lib/types/client/api.d.ts +11 -0
- package/lib/types/client/locales.d.ts +46 -2
- package/lib/types/client/panel/NovelPanel.d.ts +1 -1
- package/lib/types/engine.d.ts +19 -1
- package/lib/types/index.d.ts +2 -0
- package/lib/types/protocol.d.ts +131 -0
- package/package.json +1 -1
- package/src/assistant.ts +59 -36
- package/src/client/api.ts +20 -0
- package/src/client/locales.ts +92 -4
- package/src/client/panel/AssetsTab.tsx +7 -7
- package/src/client/panel/NovelPanel.tsx +1139 -152
- package/src/client/panel/panel.module.css +398 -57
- package/src/engine.ts +378 -0
- package/src/index.ts +6 -0
- package/src/protocol.ts +135 -0
- package/src/routes.ts +295 -0
|
@@ -63,8 +63,11 @@ body[data-ds-dark-theme] .entry {
|
|
|
63
63
|
inset: 0;
|
|
64
64
|
overflow: auto;
|
|
65
65
|
color-scheme: light;
|
|
66
|
-
|
|
67
|
-
|
|
66
|
+
/* 统一 iOS 字体栈:SF Pro + 苹方/冬青黑体中文回退,Windows 回落微软雅黑 */
|
|
67
|
+
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;
|
|
68
|
+
--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;
|
|
69
|
+
--nf-font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
70
|
+
/* iOS light palette (Liquid-Glass green, frosted translucency) */
|
|
68
71
|
--nf-bg: rgba(242, 242, 247, 0.86);
|
|
69
72
|
--nf-bg-raise: rgba(255, 255, 255, 0.72);
|
|
70
73
|
--nf-bg-inset: rgba(118, 118, 128, 0.12);
|
|
@@ -74,17 +77,28 @@ body[data-ds-dark-theme] .entry {
|
|
|
74
77
|
--nf-text-2: #3c3c43;
|
|
75
78
|
--nf-text-2-alpha: rgba(60, 60, 67, 0.68);
|
|
76
79
|
--nf-text-3: #8e8e93;
|
|
77
|
-
--nf-accent: #
|
|
78
|
-
--nf-accent-hover: #
|
|
79
|
-
--nf-accent-soft: rgba(0,
|
|
80
|
+
--nf-accent: #00b85c;
|
|
81
|
+
--nf-accent-hover: #00a04e;
|
|
82
|
+
--nf-accent-soft: rgba(0, 184, 92, 0.12);
|
|
80
83
|
--nf-accent-fg: #ffffff;
|
|
81
84
|
--nf-hover: rgba(0, 0, 0, 0.05);
|
|
82
85
|
--nf-success: #34c759;
|
|
83
86
|
--nf-error: #ff3b30;
|
|
84
87
|
--nf-warn: #ff9500;
|
|
85
|
-
--nf-info: #
|
|
88
|
+
--nf-info: #00b85c;
|
|
86
89
|
--nf-shadow: 0 1px 3px rgba(0, 0, 0, 0.06), 0 12px 32px rgba(0, 0, 0, 0.08);
|
|
87
90
|
--nf-shadow-lg: 0 4px 12px rgba(0, 0, 0, 0.07), 0 20px 48px rgba(0, 0, 0, 0.12);
|
|
91
|
+
--nf-card-shadow: 0 2px 6px rgba(0, 0, 0, 0.06), 0 14px 38px rgba(0, 0, 0, 0.14);
|
|
92
|
+
--nf-card-shadow-hover: 0 4px 10px rgba(0, 0, 0, 0.08), 0 22px 52px rgba(0, 0, 0, 0.20);
|
|
93
|
+
/* Liquid Glass: vertical glass face + soft top-left core + sheen border */
|
|
94
|
+
--nf-glass-face: linear-gradient(180deg, #f6f7f9 0%, #f0f2f5 26%, #e9ebef 52%, #e0e3e8 78%, #d6d9df 100%);
|
|
95
|
+
--nf-glass-core: radial-gradient(30% 24% at 36% 28%, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0.22) 45%, rgba(255, 255, 255, 0) 78%);
|
|
96
|
+
--nf-glass-sheen: rgba(255, 255, 255, 0.55);
|
|
97
|
+
--nf-glass-border: rgba(255, 255, 255, 0.65);
|
|
98
|
+
--nf-glass-inset: rgba(255, 255, 255, 0.55);
|
|
99
|
+
--nf-glass-orb-a: rgba(0, 184, 92, 0.14);
|
|
100
|
+
--nf-glass-orb-b: rgba(120, 160, 255, 0.10);
|
|
101
|
+
--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");
|
|
88
102
|
background: var(--nf-bg);
|
|
89
103
|
/* Frosted glass: blur whatever is behind the panel (the chat dialog),
|
|
90
104
|
* so translucency shows a soft blur instead of readable content. */
|
|
@@ -95,8 +109,8 @@ body[data-ds-dark-theme] .entry {
|
|
|
95
109
|
|
|
96
110
|
body[data-ds-dark-theme] .view {
|
|
97
111
|
color-scheme: dark;
|
|
98
|
-
/* iOS dark palette */
|
|
99
|
-
--nf-bg: rgba(
|
|
112
|
+
/* iOS dark palette — near-black canvas with green Liquid-Glass accents */
|
|
113
|
+
--nf-bg: rgba(10, 11, 13, 0.86);
|
|
100
114
|
--nf-bg-raise: rgba(28, 28, 30, 0.78);
|
|
101
115
|
--nf-bg-inset: rgba(118, 118, 128, 0.18);
|
|
102
116
|
--nf-border: rgba(255, 255, 255, 0.12);
|
|
@@ -105,23 +119,195 @@ body[data-ds-dark-theme] .view {
|
|
|
105
119
|
--nf-text-2: #d1d1d6;
|
|
106
120
|
--nf-text-2-alpha: rgba(209, 209, 214, 0.72);
|
|
107
121
|
--nf-text-3: #8e8e93;
|
|
108
|
-
--nf-accent: #
|
|
109
|
-
--nf-accent-hover: #
|
|
110
|
-
--nf-accent-soft: rgba(
|
|
111
|
-
--nf-accent-fg: #
|
|
122
|
+
--nf-accent: #35d07a;
|
|
123
|
+
--nf-accent-hover: #5ce695;
|
|
124
|
+
--nf-accent-soft: rgba(53, 208, 122, 0.2);
|
|
125
|
+
--nf-accent-fg: #062b18;
|
|
112
126
|
--nf-hover: rgba(255, 255, 255, 0.09);
|
|
113
127
|
--nf-success: #30d158;
|
|
114
128
|
--nf-error: #ff453a;
|
|
115
129
|
--nf-warn: #ff9f0a;
|
|
116
|
-
--nf-info: #
|
|
130
|
+
--nf-info: #35d07a;
|
|
117
131
|
--nf-shadow: 0 1px 2px rgba(0, 0, 0, 0.35), 0 10px 30px rgba(0, 0, 0, 0.4);
|
|
118
132
|
--nf-shadow-lg: 0 4px 12px rgba(0, 0, 0, 0.4), 0 20px 48px rgba(0, 0, 0, 0.55);
|
|
133
|
+
--nf-card-shadow: 0 2px 6px rgba(0, 0, 0, 0.35), 0 14px 38px rgba(0, 0, 0, 0.45);
|
|
134
|
+
--nf-card-shadow-hover: 0 4px 10px rgba(0, 0, 0, 0.4), 0 22px 52px rgba(0, 0, 0, 0.55);
|
|
135
|
+
/* Liquid Glass (dark): translucent charcoal glass face + soft bright core */
|
|
136
|
+
--nf-glass-face: linear-gradient(180deg, rgba(112, 116, 122, 0.42) 0%, rgba(96, 100, 106, 0.42) 26%, rgba(82, 85, 90, 0.42) 52%, rgba(68, 71, 76, 0.42) 78%, rgba(56, 58, 63, 0.42) 100%);
|
|
137
|
+
--nf-glass-core: radial-gradient(30% 24% at 36% 28%, rgba(255, 255, 255, 0.26) 0%, rgba(255, 255, 255, 0.10) 45%, rgba(255, 255, 255, 0) 78%);
|
|
138
|
+
--nf-glass-sheen: rgba(255, 255, 255, 0.26);
|
|
139
|
+
--nf-glass-border: rgba(255, 255, 255, 0.14);
|
|
140
|
+
--nf-glass-inset: rgba(255, 255, 255, 0.07);
|
|
141
|
+
--nf-glass-orb-a: rgba(0, 202, 82, 0.20);
|
|
142
|
+
--nf-glass-orb-b: rgba(190, 200, 215, 0.07);
|
|
143
|
+
--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");
|
|
119
144
|
}
|
|
120
145
|
|
|
121
146
|
html[data-dsh-novelforge-active]:not([data-dsh-taskboard-active]):not([data-dsh-ssh-active]) .view {
|
|
122
147
|
display: block;
|
|
123
148
|
}
|
|
124
149
|
|
|
150
|
+
/* ------------------------------------------------------------ themes
|
|
151
|
+
* 'liquid' (default): iOS Liquid Glass, green accent — set on .view above.
|
|
152
|
+
* 'classic': original frosted iOS look, blue accent — overrides below.
|
|
153
|
+
*/
|
|
154
|
+
.panel[data-nf-theme='classic'] {
|
|
155
|
+
--nf-accent: #007aff;
|
|
156
|
+
--nf-accent-hover: #0071e3;
|
|
157
|
+
--nf-accent-soft: rgba(0, 122, 255, 0.12);
|
|
158
|
+
--nf-accent-fg: #ffffff;
|
|
159
|
+
--nf-info: #5856d6;
|
|
160
|
+
--nf-glass-face: var(--nf-bg-raise);
|
|
161
|
+
--nf-glass-core: transparent;
|
|
162
|
+
--nf-glass-sheen: rgba(255, 255, 255, 0);
|
|
163
|
+
--nf-glass-border: var(--nf-border);
|
|
164
|
+
--nf-glass-inset: var(--nf-bg-inset);
|
|
165
|
+
--nf-glass-orb-a: transparent;
|
|
166
|
+
--nf-glass-orb-b: transparent;
|
|
167
|
+
--nf-glass-noise: none;
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
body[data-ds-dark-theme] .panel[data-nf-theme='classic'] {
|
|
171
|
+
--nf-accent: #0a84ff;
|
|
172
|
+
--nf-accent-hover: #3a9bff;
|
|
173
|
+
--nf-accent-soft: rgba(10, 132, 255, 0.2);
|
|
174
|
+
--nf-accent-fg: #ffffff;
|
|
175
|
+
--nf-info: #bf5af2;
|
|
176
|
+
--nf-glass-face: var(--nf-bg-raise);
|
|
177
|
+
--nf-glass-core: transparent;
|
|
178
|
+
--nf-glass-sheen: rgba(255, 255, 255, 0);
|
|
179
|
+
--nf-glass-border: var(--nf-border);
|
|
180
|
+
--nf-glass-inset: var(--nf-bg-inset);
|
|
181
|
+
--nf-glass-orb-a: transparent;
|
|
182
|
+
--nf-glass-orb-b: transparent;
|
|
183
|
+
--nf-glass-noise: none;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/* ------------------------------------------------------------
|
|
187
|
+
* 'neumorph': Neumorphism (dual-shadow soft UI).
|
|
188
|
+
* Light variant in light mode; a dark dual-shadow variant in dark
|
|
189
|
+
* mode so switching always has a visible effect.
|
|
190
|
+
* ------------------------------------------------------------ */
|
|
191
|
+
body:not([data-ds-dark-theme]) .panel[data-nf-theme='neumorph'] {
|
|
192
|
+
--nf-bg: #e4e9f2;
|
|
193
|
+
--nf-bg-raise: #e4e9f2;
|
|
194
|
+
--nf-bg-inset: #d9dfe8;
|
|
195
|
+
--nf-border: rgba(140, 155, 175, 0.35);
|
|
196
|
+
--nf-border-strong: rgba(120, 135, 158, 0.5);
|
|
197
|
+
--nf-text: #3a4250;
|
|
198
|
+
--nf-text-2: #5b6472;
|
|
199
|
+
--nf-text-2-alpha: rgba(70, 80, 96, 0.7);
|
|
200
|
+
--nf-text-3: #8b94a3;
|
|
201
|
+
--nf-hover: rgba(90, 105, 125, 0.08);
|
|
202
|
+
--nf-shadow: 4px 4px 10px rgba(163, 177, 198, 0.55), -4px -4px 10px rgba(255, 255, 255, 0.85);
|
|
203
|
+
--nf-shadow-lg: 6px 6px 14px rgba(163, 177, 198, 0.6), -6px -6px 14px rgba(255, 255, 255, 0.9);
|
|
204
|
+
--nf-card-shadow: 9px 9px 18px rgba(163, 177, 198, 0.55), -9px -9px 18px rgba(255, 255, 255, 0.85);
|
|
205
|
+
--nf-card-shadow-hover: 12px 12px 24px rgba(163, 177, 198, 0.65), -12px -12px 24px rgba(255, 255, 255, 0.95);
|
|
206
|
+
--nf-glass-face: #e4e9f2;
|
|
207
|
+
--nf-glass-core: transparent;
|
|
208
|
+
--nf-glass-sheen: rgba(255, 255, 255, 0);
|
|
209
|
+
--nf-glass-border: rgba(163, 177, 198, 0.4);
|
|
210
|
+
--nf-glass-inset: #d9dfe8;
|
|
211
|
+
--nf-glass-orb-a: transparent;
|
|
212
|
+
--nf-glass-orb-b: transparent;
|
|
213
|
+
--nf-glass-noise: none;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
body[data-ds-dark-theme] .panel[data-nf-theme='neumorph'] {
|
|
217
|
+
--nf-bg: #2b2f36;
|
|
218
|
+
--nf-bg-raise: #2b2f36;
|
|
219
|
+
--nf-bg-inset: #25292f;
|
|
220
|
+
--nf-border: rgba(10, 12, 16, 0.5);
|
|
221
|
+
--nf-border-strong: rgba(8, 10, 14, 0.6);
|
|
222
|
+
--nf-text: #d6dae1;
|
|
223
|
+
--nf-text-2: #a8aeb8;
|
|
224
|
+
--nf-text-2-alpha: rgba(168, 174, 184, 0.7);
|
|
225
|
+
--nf-text-3: #757c88;
|
|
226
|
+
--nf-hover: rgba(255, 255, 255, 0.05);
|
|
227
|
+
--nf-shadow: 4px 4px 10px rgba(0, 0, 0, 0.5), -4px -4px 10px rgba(96, 104, 118, 0.24);
|
|
228
|
+
--nf-shadow-lg: 6px 6px 14px rgba(0, 0, 0, 0.55), -6px -6px 14px rgba(96, 104, 118, 0.26);
|
|
229
|
+
--nf-card-shadow: 9px 9px 18px rgba(0, 0, 0, 0.5), -9px -9px 18px rgba(96, 104, 118, 0.24);
|
|
230
|
+
--nf-card-shadow-hover: 12px 12px 24px rgba(0, 0, 0, 0.6), -12px -12px 24px rgba(96, 104, 118, 0.28);
|
|
231
|
+
--nf-glass-face: #2b2f36;
|
|
232
|
+
--nf-glass-core: transparent;
|
|
233
|
+
--nf-glass-sheen: rgba(255, 255, 255, 0);
|
|
234
|
+
--nf-glass-border: rgba(12, 14, 18, 0.45);
|
|
235
|
+
--nf-glass-inset: #25292f;
|
|
236
|
+
--nf-glass-orb-a: transparent;
|
|
237
|
+
--nf-glass-orb-b: transparent;
|
|
238
|
+
--nf-glass-noise: none;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
/* Neumorphic inset inputs (sunken). */
|
|
242
|
+
body:not([data-ds-dark-theme]) .panel[data-nf-theme='neumorph'] .input,
|
|
243
|
+
body:not([data-ds-dark-theme]) .panel[data-nf-theme='neumorph'] .textarea {
|
|
244
|
+
background: var(--nf-bg-inset);
|
|
245
|
+
border-color: transparent;
|
|
246
|
+
box-shadow: inset 3px 3px 7px rgba(163, 177, 198, 0.55), inset -3px -3px 7px rgba(255, 255, 255, 0.9);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
body:not([data-ds-dark-theme]) .panel[data-nf-theme='neumorph'] .input:focus,
|
|
250
|
+
body:not([data-ds-dark-theme]) .panel[data-nf-theme='neumorph'] .textarea:focus {
|
|
251
|
+
border-color: var(--nf-accent);
|
|
252
|
+
box-shadow: inset 2px 2px 6px rgba(163, 177, 198, 0.5), inset -2px -2px 6px rgba(255, 255, 255, 0.85), 0 0 0 3px var(--nf-accent-soft);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
body[data-ds-dark-theme] .panel[data-nf-theme='neumorph'] .input,
|
|
256
|
+
body[data-ds-dark-theme] .panel[data-nf-theme='neumorph'] .textarea {
|
|
257
|
+
background: var(--nf-bg-inset);
|
|
258
|
+
border-color: transparent;
|
|
259
|
+
box-shadow: inset 3px 3px 7px rgba(0, 0, 0, 0.55), inset -3px -3px 7px rgba(96, 104, 118, 0.24);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
body[data-ds-dark-theme] .panel[data-nf-theme='neumorph'] .input:focus,
|
|
263
|
+
body[data-ds-dark-theme] .panel[data-nf-theme='neumorph'] .textarea:focus {
|
|
264
|
+
border-color: var(--nf-accent);
|
|
265
|
+
box-shadow: inset 2px 2px 6px rgba(0, 0, 0, 0.5), inset -2px -2px 6px rgba(96, 104, 118, 0.22), 0 0 0 3px var(--nf-accent-soft);
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
/* Neumorphic raised buttons. */
|
|
269
|
+
body:not([data-ds-dark-theme]) .panel[data-nf-theme='neumorph'] .button {
|
|
270
|
+
border-color: transparent;
|
|
271
|
+
background: var(--nf-bg-raise);
|
|
272
|
+
box-shadow: 5px 5px 10px rgba(163, 177, 198, 0.55), -5px -5px 10px rgba(255, 255, 255, 0.9);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
body:not([data-ds-dark-theme]) .panel[data-nf-theme='neumorph'] .button:hover:not([disabled]) {
|
|
276
|
+
background: var(--nf-bg-raise);
|
|
277
|
+
border-color: transparent;
|
|
278
|
+
box-shadow: 7px 7px 14px rgba(163, 177, 198, 0.6), -7px -7px 14px rgba(255, 255, 255, 0.95);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
body:not([data-ds-dark-theme]) .panel[data-nf-theme='neumorph'] .button:active:not([disabled]) {
|
|
282
|
+
box-shadow: inset 3px 3px 7px rgba(163, 177, 198, 0.55), inset -3px -3px 7px rgba(255, 255, 255, 0.9);
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
body:not([data-ds-dark-theme]) .panel[data-nf-theme='neumorph'] .buttonPrimary {
|
|
286
|
+
background: linear-gradient(180deg, #00c563, #00a952);
|
|
287
|
+
box-shadow: 5px 5px 10px rgba(163, 177, 198, 0.6), -5px -5px 10px rgba(255, 255, 255, 0.85);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
body[data-ds-dark-theme] .panel[data-nf-theme='neumorph'] .button {
|
|
291
|
+
border-color: transparent;
|
|
292
|
+
background: var(--nf-bg-raise);
|
|
293
|
+
box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.5), -5px -5px 10px rgba(96, 104, 118, 0.24);
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
body[data-ds-dark-theme] .panel[data-nf-theme='neumorph'] .button:hover:not([disabled]) {
|
|
297
|
+
background: var(--nf-bg-raise);
|
|
298
|
+
border-color: transparent;
|
|
299
|
+
box-shadow: 7px 7px 14px rgba(0, 0, 0, 0.55), -7px -7px 14px rgba(96, 104, 118, 0.26);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
body[data-ds-dark-theme] .panel[data-nf-theme='neumorph'] .button:active:not([disabled]) {
|
|
303
|
+
box-shadow: inset 3px 3px 7px rgba(0, 0, 0, 0.55), inset -3px -3px 7px rgba(96, 104, 118, 0.24);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
body[data-ds-dark-theme] .panel[data-nf-theme='neumorph'] .buttonPrimary {
|
|
307
|
+
background: linear-gradient(180deg, #3ddc86, #27b96a);
|
|
308
|
+
box-shadow: 5px 5px 10px rgba(0, 0, 0, 0.5), -5px -5px 10px rgba(96, 104, 118, 0.24);
|
|
309
|
+
}
|
|
310
|
+
|
|
125
311
|
/* ------------------------------------------------------------ panel shell */
|
|
126
312
|
|
|
127
313
|
.panel {
|
|
@@ -132,20 +318,37 @@ html[data-dsh-novelforge-active]:not([data-dsh-taskboard-active]):not([data-dsh-
|
|
|
132
318
|
font-size: 14px;
|
|
133
319
|
line-height: 1.6;
|
|
134
320
|
position: relative;
|
|
321
|
+
overflow: hidden;
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
/* Liquid-Glass backdrop: colored orbs + vignette behind the frosted cards. */
|
|
325
|
+
.panel::before {
|
|
326
|
+
content: '';
|
|
327
|
+
position: absolute;
|
|
328
|
+
inset: 0;
|
|
329
|
+
z-index: 0;
|
|
330
|
+
pointer-events: none;
|
|
331
|
+
background:
|
|
332
|
+
radial-gradient(46% 36% at 18% 12%, var(--nf-glass-orb-a), transparent 70%),
|
|
333
|
+
radial-gradient(52% 42% at 88% 22%, var(--nf-glass-orb-b), transparent 72%),
|
|
334
|
+
radial-gradient(120% 95% at 50% 42%, transparent 55%, rgba(2, 2, 3, 0.10) 100%);
|
|
135
335
|
}
|
|
136
336
|
|
|
137
337
|
.panelHeader {
|
|
138
338
|
display: flex;
|
|
139
339
|
align-items: center;
|
|
140
340
|
justify-content: space-between;
|
|
141
|
-
|
|
142
|
-
|
|
341
|
+
margin: 10px 12px 0;
|
|
342
|
+
padding: 10px 16px;
|
|
343
|
+
border: 1px solid var(--nf-glass-border);
|
|
344
|
+
border-radius: 18px;
|
|
143
345
|
flex-shrink: 0;
|
|
144
|
-
background: var(--nf-
|
|
145
|
-
-
|
|
146
|
-
backdrop-filter: blur(
|
|
346
|
+
background: var(--nf-glass-face);
|
|
347
|
+
box-shadow: var(--nf-shadow), inset 0 1px 0 var(--nf-glass-sheen);
|
|
348
|
+
-webkit-backdrop-filter: blur(28px) saturate(175%);
|
|
349
|
+
backdrop-filter: blur(28px) saturate(175%);
|
|
147
350
|
position: sticky;
|
|
148
|
-
top:
|
|
351
|
+
top: 10px;
|
|
149
352
|
z-index: 5;
|
|
150
353
|
}
|
|
151
354
|
|
|
@@ -238,6 +441,8 @@ html[data-dsh-novelforge-active]:not([data-dsh-taskboard-active]):not([data-dsh-
|
|
|
238
441
|
display: flex;
|
|
239
442
|
flex-direction: column;
|
|
240
443
|
gap: 14px;
|
|
444
|
+
position: relative;
|
|
445
|
+
z-index: 1;
|
|
241
446
|
}
|
|
242
447
|
|
|
243
448
|
/* ------------------------------------------- body: left nav + content */
|
|
@@ -246,19 +451,25 @@ html[data-dsh-novelforge-active]:not([data-dsh-taskboard-active]):not([data-dsh-
|
|
|
246
451
|
flex: 1;
|
|
247
452
|
min-height: 0;
|
|
248
453
|
display: flex;
|
|
454
|
+
position: relative;
|
|
455
|
+
z-index: 1;
|
|
249
456
|
}
|
|
250
457
|
|
|
251
458
|
.panelNav {
|
|
252
459
|
flex: none;
|
|
460
|
+
align-self: flex-start;
|
|
253
461
|
width: 142px;
|
|
254
462
|
display: flex;
|
|
255
463
|
flex-direction: column;
|
|
256
|
-
gap:
|
|
464
|
+
gap: 4px;
|
|
465
|
+
margin: 10px 0 10px 12px;
|
|
257
466
|
padding: 10px 8px;
|
|
258
|
-
border
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
467
|
+
border: 1px solid var(--nf-glass-border);
|
|
468
|
+
border-radius: 16px;
|
|
469
|
+
background: var(--nf-glass-face);
|
|
470
|
+
box-shadow: var(--nf-shadow), inset 0 1px 0 var(--nf-glass-sheen);
|
|
471
|
+
-webkit-backdrop-filter: blur(28px) saturate(175%);
|
|
472
|
+
backdrop-filter: blur(28px) saturate(175%);
|
|
262
473
|
overflow-y: auto;
|
|
263
474
|
transition: width 0.18s ease;
|
|
264
475
|
}
|
|
@@ -271,7 +482,7 @@ html[data-dsh-novelforge-active]:not([data-dsh-taskboard-active]):not([data-dsh-
|
|
|
271
482
|
.navGroup {
|
|
272
483
|
display: flex;
|
|
273
484
|
flex-direction: column;
|
|
274
|
-
gap:
|
|
485
|
+
gap: 4px;
|
|
275
486
|
}
|
|
276
487
|
|
|
277
488
|
.navGroupLabel {
|
|
@@ -280,7 +491,7 @@ html[data-dsh-novelforge-active]:not([data-dsh-taskboard-active]):not([data-dsh-
|
|
|
280
491
|
letter-spacing: 0.6px;
|
|
281
492
|
text-transform: uppercase;
|
|
282
493
|
color: var(--nf-text-3);
|
|
283
|
-
padding:
|
|
494
|
+
padding: 8px 10px 3px;
|
|
284
495
|
user-select: none;
|
|
285
496
|
}
|
|
286
497
|
|
|
@@ -293,6 +504,7 @@ html[data-dsh-novelforge-active]:not([data-dsh-taskboard-active]):not([data-dsh-
|
|
|
293
504
|
.navSpacer {
|
|
294
505
|
flex: 1;
|
|
295
506
|
min-height: 8px;
|
|
507
|
+
/* 导航卡片不再拉满全高(align-self: flex-start),此占位仅保留最小间距 */
|
|
296
508
|
}
|
|
297
509
|
|
|
298
510
|
/* 导航底部:关于(版本 + GitHub + 更新) */
|
|
@@ -456,7 +668,19 @@ html[data-dsh-novelforge-active]:not([data-dsh-taskboard-active]):not([data-dsh-
|
|
|
456
668
|
text-overflow: ellipsis;
|
|
457
669
|
}
|
|
458
670
|
|
|
459
|
-
/*
|
|
671
|
+
/* 顶栏副标题行:书名 + 进度摘要(iOS 大标题下方副标题) */
|
|
672
|
+
.panelSubtitle {
|
|
673
|
+
display: flex;
|
|
674
|
+
align-items: center;
|
|
675
|
+
gap: 8px;
|
|
676
|
+
font-size: 12px;
|
|
677
|
+
color: var(--nf-text-2);
|
|
678
|
+
padding: 0 4px 2px;
|
|
679
|
+
min-width: 0;
|
|
680
|
+
flex-wrap: wrap;
|
|
681
|
+
white-space: nowrap;
|
|
682
|
+
}
|
|
683
|
+
|
|
460
684
|
.headerProgress {
|
|
461
685
|
font-size: 12px;
|
|
462
686
|
font-weight: 400;
|
|
@@ -464,7 +688,7 @@ html[data-dsh-novelforge-active]:not([data-dsh-taskboard-active]):not([data-dsh-
|
|
|
464
688
|
display: inline-flex;
|
|
465
689
|
align-items: center;
|
|
466
690
|
gap: 6px;
|
|
467
|
-
margin-left:
|
|
691
|
+
margin-left: 0;
|
|
468
692
|
white-space: nowrap;
|
|
469
693
|
}
|
|
470
694
|
|
|
@@ -484,17 +708,60 @@ html[data-dsh-novelforge-active]:not([data-dsh-taskboard-active]):not([data-dsh-
|
|
|
484
708
|
/* ------------------------------------------------------------ cards */
|
|
485
709
|
|
|
486
710
|
.card {
|
|
487
|
-
|
|
488
|
-
border
|
|
711
|
+
position: relative;
|
|
712
|
+
border: 1px solid var(--nf-glass-border);
|
|
713
|
+
border-radius: 22px;
|
|
489
714
|
padding: 16px 18px;
|
|
490
715
|
display: flex;
|
|
491
716
|
flex-direction: column;
|
|
492
717
|
gap: 10px;
|
|
493
|
-
background: var(--nf-
|
|
494
|
-
box-shadow:
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
718
|
+
background: var(--nf-glass-face);
|
|
719
|
+
box-shadow:
|
|
720
|
+
var(--nf-card-shadow),
|
|
721
|
+
inset 0 1.5px 0 var(--nf-glass-sheen),
|
|
722
|
+
inset 0 -1px 0 rgba(255, 255, 255, 0.25);
|
|
723
|
+
-webkit-backdrop-filter: blur(30px) saturate(180%);
|
|
724
|
+
backdrop-filter: blur(30px) saturate(180%);
|
|
725
|
+
transition: transform 0.22s ease, box-shadow 0.22s ease;
|
|
726
|
+
}
|
|
727
|
+
|
|
728
|
+
/* Liquid-Glass surface: bright core highlight + hairline sheen. */
|
|
729
|
+
.card::before {
|
|
730
|
+
content: '';
|
|
731
|
+
position: absolute;
|
|
732
|
+
inset: 0;
|
|
733
|
+
border-radius: inherit;
|
|
734
|
+
pointer-events: none;
|
|
735
|
+
background:
|
|
736
|
+
var(--nf-glass-core),
|
|
737
|
+
linear-gradient(90deg, transparent, var(--nf-glass-sheen), transparent) no-repeat 10% 0 / 80% 1px,
|
|
738
|
+
linear-gradient(156deg, rgba(255, 255, 255, 0.26) 0%, rgba(255, 255, 255, 0) 55%);
|
|
739
|
+
z-index: 0;
|
|
740
|
+
}
|
|
741
|
+
|
|
742
|
+
/* Subtle grain, barely visible. */
|
|
743
|
+
.card::after {
|
|
744
|
+
content: '';
|
|
745
|
+
position: absolute;
|
|
746
|
+
inset: 0;
|
|
747
|
+
border-radius: inherit;
|
|
748
|
+
pointer-events: none;
|
|
749
|
+
background: var(--nf-glass-noise);
|
|
750
|
+
opacity: 0.06;
|
|
751
|
+
z-index: 0;
|
|
752
|
+
}
|
|
753
|
+
|
|
754
|
+
.card:hover {
|
|
755
|
+
transform: translateY(-3px);
|
|
756
|
+
box-shadow:
|
|
757
|
+
var(--nf-card-shadow-hover),
|
|
758
|
+
inset 0 1.5px 0 var(--nf-glass-sheen),
|
|
759
|
+
inset 0 -1px 0 rgba(255, 255, 255, 0.25);
|
|
760
|
+
}
|
|
761
|
+
|
|
762
|
+
.card > * {
|
|
763
|
+
position: relative;
|
|
764
|
+
z-index: 1;
|
|
498
765
|
}
|
|
499
766
|
|
|
500
767
|
.cardTitle {
|
|
@@ -540,7 +807,7 @@ html[data-dsh-novelforge-active]:not([data-dsh-taskboard-active]):not([data-dsh-
|
|
|
540
807
|
border-color: transparent;
|
|
541
808
|
background: linear-gradient(180deg, color-mix(in srgb, var(--nf-accent) 88%, #ffffff), var(--nf-accent));
|
|
542
809
|
color: var(--nf-accent-fg);
|
|
543
|
-
box-shadow: 0 2px
|
|
810
|
+
box-shadow: 0 2px 10px color-mix(in srgb, var(--nf-accent) 45%, transparent), 0 0 0 0.5px color-mix(in srgb, var(--nf-accent) 30%, transparent);
|
|
544
811
|
}
|
|
545
812
|
|
|
546
813
|
.buttonPrimary:hover:not([disabled]) {
|
|
@@ -973,7 +1240,7 @@ html[data-dsh-novelforge-active]:not([data-dsh-taskboard-active]):not([data-dsh-
|
|
|
973
1240
|
white-space: pre-wrap;
|
|
974
1241
|
word-break: break-all;
|
|
975
1242
|
color: var(--nf-text-2);
|
|
976
|
-
font-family:
|
|
1243
|
+
font-family: var(--nf-font-mono);
|
|
977
1244
|
background: var(--nf-bg-inset);
|
|
978
1245
|
line-height: 1.8;
|
|
979
1246
|
}
|
|
@@ -1070,7 +1337,8 @@ html[data-dsh-novelforge-active]:not([data-dsh-taskboard-active]):not([data-dsh-
|
|
|
1070
1337
|
}
|
|
1071
1338
|
|
|
1072
1339
|
.diffList {
|
|
1073
|
-
|
|
1340
|
+
flex: 1;
|
|
1341
|
+
min-height: 0;
|
|
1074
1342
|
overflow-y: auto;
|
|
1075
1343
|
border: 1px solid var(--nf-border);
|
|
1076
1344
|
border-radius: 8px;
|
|
@@ -1193,11 +1461,29 @@ html[data-dsh-novelforge-active]:not([data-dsh-taskboard-active]):not([data-dsh-
|
|
|
1193
1461
|
color: var(--nf-success);
|
|
1194
1462
|
}
|
|
1195
1463
|
|
|
1196
|
-
/*
|
|
1464
|
+
/* Chapter editor page: full-bleed, flex-fills the content pane (no card box). */
|
|
1465
|
+
.wsPage {
|
|
1466
|
+
display: flex;
|
|
1467
|
+
flex-direction: column;
|
|
1468
|
+
flex: 1;
|
|
1469
|
+
min-height: 0;
|
|
1470
|
+
gap: 10px;
|
|
1471
|
+
}
|
|
1472
|
+
|
|
1473
|
+
.wsPageHeader {
|
|
1474
|
+
display: flex;
|
|
1475
|
+
align-items: center;
|
|
1476
|
+
gap: 8px;
|
|
1477
|
+
flex: none;
|
|
1478
|
+
flex-wrap: wrap;
|
|
1479
|
+
}
|
|
1480
|
+
|
|
1197
1481
|
.wsColumns {
|
|
1198
1482
|
display: grid;
|
|
1199
1483
|
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
|
|
1200
1484
|
gap: 14px;
|
|
1485
|
+
flex: 1;
|
|
1486
|
+
min-height: 0;
|
|
1201
1487
|
}
|
|
1202
1488
|
|
|
1203
1489
|
.wsColumn {
|
|
@@ -1205,13 +1491,14 @@ html[data-dsh-novelforge-active]:not([data-dsh-taskboard-active]):not([data-dsh-
|
|
|
1205
1491
|
flex-direction: column;
|
|
1206
1492
|
gap: 8px;
|
|
1207
1493
|
min-width: 0;
|
|
1494
|
+
min-height: 0;
|
|
1208
1495
|
}
|
|
1209
1496
|
|
|
1210
1497
|
.wsEditor {
|
|
1211
1498
|
flex: 1;
|
|
1212
|
-
min-height:
|
|
1499
|
+
min-height: 0;
|
|
1213
1500
|
resize: vertical;
|
|
1214
|
-
font-family:
|
|
1501
|
+
font-family: var(--nf-font);
|
|
1215
1502
|
font-size: 13px;
|
|
1216
1503
|
line-height: 1.75;
|
|
1217
1504
|
white-space: pre-wrap;
|
|
@@ -1245,7 +1532,8 @@ html[data-dsh-novelforge-active]:not([data-dsh-taskboard-active]):not([data-dsh-
|
|
|
1245
1532
|
|
|
1246
1533
|
.wsPreviewText {
|
|
1247
1534
|
margin: 0;
|
|
1248
|
-
|
|
1535
|
+
flex: 1;
|
|
1536
|
+
min-height: 0;
|
|
1249
1537
|
overflow: auto;
|
|
1250
1538
|
font-size: 13px;
|
|
1251
1539
|
line-height: 1.7;
|
|
@@ -1261,13 +1549,14 @@ html[data-dsh-novelforge-active]:not([data-dsh-taskboard-active]):not([data-dsh-
|
|
|
1261
1549
|
}
|
|
1262
1550
|
|
|
1263
1551
|
.assetStat {
|
|
1264
|
-
border: 1px solid var(--nf-border);
|
|
1265
|
-
border-radius:
|
|
1552
|
+
border: 1px solid var(--nf-glass-border);
|
|
1553
|
+
border-radius: 14px;
|
|
1266
1554
|
padding: 10px 12px;
|
|
1267
1555
|
display: flex;
|
|
1268
1556
|
flex-direction: column;
|
|
1269
1557
|
gap: 4px;
|
|
1270
|
-
background: var(--nf-
|
|
1558
|
+
background: var(--nf-glass-inset);
|
|
1559
|
+
box-shadow: inset 0 1px 0 var(--nf-glass-sheen);
|
|
1271
1560
|
}
|
|
1272
1561
|
|
|
1273
1562
|
.assetStatLabel {
|
|
@@ -1295,16 +1584,60 @@ html[data-dsh-novelforge-active]:not([data-dsh-taskboard-active]):not([data-dsh-
|
|
|
1295
1584
|
/* ------------------------------------------------ dashboard (workflow tab) */
|
|
1296
1585
|
|
|
1297
1586
|
.dashHero {
|
|
1298
|
-
|
|
1299
|
-
border
|
|
1587
|
+
position: relative;
|
|
1588
|
+
border: 1px solid var(--nf-glass-border);
|
|
1589
|
+
border-radius: 22px;
|
|
1300
1590
|
padding: 18px 20px;
|
|
1301
|
-
background:
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1591
|
+
background: var(--nf-glass-face);
|
|
1592
|
+
box-shadow:
|
|
1593
|
+
var(--nf-card-shadow),
|
|
1594
|
+
inset 0 1.5px 0 var(--nf-glass-sheen),
|
|
1595
|
+
inset 0 -1px 0 rgba(255, 255, 255, 0.25);
|
|
1596
|
+
-webkit-backdrop-filter: blur(30px) saturate(180%);
|
|
1597
|
+
backdrop-filter: blur(30px) saturate(180%);
|
|
1305
1598
|
display: flex;
|
|
1306
1599
|
flex-direction: column;
|
|
1307
1600
|
gap: 14px;
|
|
1601
|
+
transition: transform 0.22s ease, box-shadow 0.22s ease;
|
|
1602
|
+
}
|
|
1603
|
+
|
|
1604
|
+
/* Same Liquid-Glass surface as .card: bright core + hairline + green tint. */
|
|
1605
|
+
.dashHero::before {
|
|
1606
|
+
content: '';
|
|
1607
|
+
position: absolute;
|
|
1608
|
+
inset: 0;
|
|
1609
|
+
border-radius: inherit;
|
|
1610
|
+
pointer-events: none;
|
|
1611
|
+
background:
|
|
1612
|
+
radial-gradient(46% 40% at 92% -10%, color-mix(in srgb, var(--nf-accent) 13%, transparent), transparent 62%),
|
|
1613
|
+
var(--nf-glass-core),
|
|
1614
|
+
linear-gradient(90deg, transparent, var(--nf-glass-sheen), transparent) no-repeat 10% 0 / 80% 1px,
|
|
1615
|
+
linear-gradient(156deg, rgba(255, 255, 255, 0.26) 0%, rgba(255, 255, 255, 0) 55%);
|
|
1616
|
+
z-index: 0;
|
|
1617
|
+
}
|
|
1618
|
+
|
|
1619
|
+
.dashHero::after {
|
|
1620
|
+
content: '';
|
|
1621
|
+
position: absolute;
|
|
1622
|
+
inset: 0;
|
|
1623
|
+
border-radius: inherit;
|
|
1624
|
+
pointer-events: none;
|
|
1625
|
+
background: var(--nf-glass-noise);
|
|
1626
|
+
opacity: 0.06;
|
|
1627
|
+
z-index: 0;
|
|
1628
|
+
}
|
|
1629
|
+
|
|
1630
|
+
.dashHero:hover {
|
|
1631
|
+
transform: translateY(-3px);
|
|
1632
|
+
box-shadow:
|
|
1633
|
+
var(--nf-card-shadow-hover),
|
|
1634
|
+
inset 0 1.5px 0 var(--nf-glass-sheen),
|
|
1635
|
+
inset 0 -1px 0 rgba(255, 255, 255, 0.25);
|
|
1636
|
+
}
|
|
1637
|
+
|
|
1638
|
+
.dashHero > * {
|
|
1639
|
+
position: relative;
|
|
1640
|
+
z-index: 1;
|
|
1308
1641
|
}
|
|
1309
1642
|
|
|
1310
1643
|
.dashHeroEyebrow {
|
|
@@ -1338,9 +1671,10 @@ html[data-dsh-novelforge-active]:not([data-dsh-taskboard-active]):not([data-dsh-
|
|
|
1338
1671
|
display: flex;
|
|
1339
1672
|
align-items: center;
|
|
1340
1673
|
gap: 12px;
|
|
1341
|
-
border: 1px solid var(--nf-border);
|
|
1342
|
-
border-radius:
|
|
1343
|
-
background:
|
|
1674
|
+
border: 1px solid var(--nf-glass-border);
|
|
1675
|
+
border-radius: 14px;
|
|
1676
|
+
background: var(--nf-glass-inset);
|
|
1677
|
+
box-shadow: inset 0 1px 0 var(--nf-glass-sheen);
|
|
1344
1678
|
padding: 10px 14px;
|
|
1345
1679
|
}
|
|
1346
1680
|
|
|
@@ -1978,11 +2312,18 @@ html[data-dsh-novelforge-active]:not([data-dsh-taskboard-active]):not([data-dsh-
|
|
|
1978
2312
|
display: flex;
|
|
1979
2313
|
align-items: center;
|
|
1980
2314
|
gap: 10px;
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
2315
|
+
margin: 10px 12px 0;
|
|
2316
|
+
padding: 8px 14px;
|
|
2317
|
+
border: 1px solid var(--nf-glass-border);
|
|
2318
|
+
border-radius: 16px;
|
|
2319
|
+
background: var(--nf-glass-face);
|
|
2320
|
+
box-shadow: var(--nf-shadow), inset 0 1px 0 var(--nf-glass-sheen);
|
|
2321
|
+
-webkit-backdrop-filter: blur(26px) saturate(175%);
|
|
2322
|
+
backdrop-filter: blur(26px) saturate(175%);
|
|
1984
2323
|
flex-shrink: 0;
|
|
1985
2324
|
flex-wrap: wrap;
|
|
2325
|
+
position: relative;
|
|
2326
|
+
z-index: 1;
|
|
1986
2327
|
}
|
|
1987
2328
|
|
|
1988
2329
|
.bookshelfLabel {
|