@musnows/scriverse 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/README.en.md +13 -4
  2. package/README.md +13 -4
  3. package/dist/ai.js +3548 -0
  4. package/dist/ai.js.map +1 -0
  5. package/dist/app.js +1079 -0
  6. package/dist/app.js.map +1 -0
  7. package/dist/cli-core.js +147 -20
  8. package/dist/cli-core.js.map +1 -1
  9. package/dist/credential-vault.js +40 -0
  10. package/dist/credential-vault.js.map +1 -0
  11. package/dist/database.js +1220 -0
  12. package/dist/database.js.map +1 -0
  13. package/dist/docx-security.js +184 -0
  14. package/dist/docx-security.js.map +1 -0
  15. package/dist/domain.js +21 -0
  16. package/dist/domain.js.map +1 -0
  17. package/dist/errors.js +16 -0
  18. package/dist/errors.js.map +1 -0
  19. package/dist/http-logging.js +76 -0
  20. package/dist/http-logging.js.map +1 -0
  21. package/dist/image-captcha.js +173 -0
  22. package/dist/image-captcha.js.map +1 -0
  23. package/dist/image-metadata.js +128 -0
  24. package/dist/image-metadata.js.map +1 -0
  25. package/dist/import-security.js +46 -0
  26. package/dist/import-security.js.map +1 -0
  27. package/dist/logger.js +110 -0
  28. package/dist/logger.js.map +1 -0
  29. package/dist/parser.js +223 -0
  30. package/dist/parser.js.map +1 -0
  31. package/dist/public/ai-context-meter.js +10 -0
  32. package/dist/public/ai-conversation.js +3 -0
  33. package/dist/public/ai-mentions.js +55 -0
  34. package/dist/public/ai-message-actions.js +27 -0
  35. package/dist/public/ai-message-meta.js +15 -0
  36. package/dist/public/ai-message-time.js +23 -0
  37. package/dist/public/ai-prompt-keyboard.js +3 -0
  38. package/dist/public/app.js +4435 -0
  39. package/dist/public/character-profile.d.ts +9 -0
  40. package/dist/public/character-profile.js +65 -0
  41. package/dist/public/character-version.d.ts +2 -0
  42. package/dist/public/character-version.js +31 -0
  43. package/dist/public/entity-version.js +34 -0
  44. package/dist/public/icon.svg +10 -0
  45. package/dist/public/index.html +547 -0
  46. package/dist/public/line-number-layout.js +15 -0
  47. package/dist/public/markdown.js +199 -0
  48. package/dist/public/model-config.d.ts +17 -0
  49. package/dist/public/model-config.js +57 -0
  50. package/dist/public/page-route.d.ts +11 -0
  51. package/dist/public/page-route.js +81 -0
  52. package/dist/public/relationship-graph.js +2017 -0
  53. package/dist/public/site.webmanifest +17 -0
  54. package/dist/public/styles.css +1441 -0
  55. package/dist/public/text-formatting.d.ts +2 -0
  56. package/dist/public/text-formatting.js +20 -0
  57. package/dist/public/theme-init.js +8 -0
  58. package/dist/public/theme.js +13 -0
  59. package/dist/public/whitespace-visualization.js +20 -0
  60. package/dist/request-context.js +16 -0
  61. package/dist/request-context.js.map +1 -0
  62. package/dist/security.js +247 -0
  63. package/dist/security.js.map +1 -0
  64. package/dist/server-runtime.js +90 -0
  65. package/dist/server-runtime.js.map +1 -0
  66. package/dist/server.js +26 -0
  67. package/dist/server.js.map +1 -0
  68. package/dist/store.js +2568 -0
  69. package/dist/store.js.map +1 -0
  70. package/dist/user-auth.js +515 -0
  71. package/dist/user-auth.js.map +1 -0
  72. package/dist/utils.js +67 -0
  73. package/dist/utils.js.map +1 -0
  74. package/package.json +4 -9
@@ -0,0 +1,1441 @@
1
+ :root {
2
+ --ink: #25231f;
3
+ --muted: #746f65;
4
+ --paper: #f7f4ed;
5
+ --paper-deep: #eee9df;
6
+ --panel: #fbfaf6;
7
+ --line: #d9d2c5;
8
+ --accent: #8b3d2c;
9
+ --accent-dark: #6e2e21;
10
+ --green: #5e765c;
11
+ --shadow: 0 18px 50px rgba(49, 42, 32, 0.12);
12
+ --surface: #fffefa;
13
+ --surface-soft: rgba(255,255,255,.48);
14
+ --surface-strong: rgba(255,254,250,.94);
15
+ --row-active: #ebe4d8;
16
+ --surface-hover: #dfd6c7;
17
+ --app-glow: rgba(255,255,255,.95);
18
+ --toast-bg: #25231f;
19
+ --toast-fg: #fffefa;
20
+ --toast-error-bg: #6e2e21;
21
+ --toast-error-fg: #fffefa;
22
+ --font-latin: "SFMono-Regular", "SF Mono", Menlo, Monaco, Consolas, "Liberation Mono";
23
+ --font-cjk: "PingFang SC", "Microsoft YaHei", "Noto Sans CJK SC", "Heiti SC";
24
+ --editor-font-size: 17px;
25
+ --editor-line-height: 1.55;
26
+ --left-panel-width: 280px;
27
+ --ai-panel-width: 360px;
28
+ font-family: var(--font-latin), var(--font-cjk), monospace, sans-serif;
29
+ line-height: 1.5;
30
+ color: var(--ink);
31
+ background: var(--paper);
32
+ }
33
+
34
+ .auth-pending .app-shell { visibility: hidden; }
35
+ .auth-view { position: fixed; inset: 0; z-index: 1000; display: grid; place-items: center; align-content: safe center; padding: 24px; overflow-y: auto; overscroll-behavior: contain; background: radial-gradient(circle at 18% 16%, color-mix(in srgb, var(--accent) 14%, transparent), transparent 34%), var(--paper); }
36
+ .auth-view.hidden { display: none; }
37
+ .auth-card { box-sizing: border-box; width: min(440px, 100%); padding: 34px; border: 1px solid var(--line); border-radius: 12px; background: var(--surface); box-shadow: var(--shadow); }
38
+ .auth-brand { display: flex; align-items: center; gap: 10px; margin-bottom: 34px; }
39
+ .auth-brand div { display: grid; }
40
+ .auth-brand small { color: var(--muted); }
41
+ .auth-card h1 { margin: 8px 0; font-size: 30px; }
42
+ .auth-card > p { color: var(--muted); line-height: 1.6; }
43
+ .auth-tabs {
44
+ display: grid;
45
+ grid-template-columns: 1fr 1fr;
46
+ gap: 0;
47
+ margin: 24px 0 18px;
48
+ padding: 3px;
49
+ overflow: hidden;
50
+ border: 1px solid color-mix(in srgb, var(--accent) 38%, var(--line));
51
+ border-radius: 9px;
52
+ background: var(--paper-deep);
53
+ box-shadow: inset 0 1px 0 color-mix(in srgb, var(--surface) 65%, transparent);
54
+ }
55
+ .auth-tabs button {
56
+ position: relative;
57
+ z-index: 0;
58
+ min-height: 42px;
59
+ border: 0;
60
+ border-radius: 6px;
61
+ background: transparent;
62
+ color: var(--muted);
63
+ cursor: pointer;
64
+ font-size: 14px;
65
+ font-weight: 600;
66
+ letter-spacing: .04em;
67
+ transition: background .16s ease, color .16s ease, box-shadow .16s ease, transform .16s ease;
68
+ }
69
+ .auth-tabs button + button::before {
70
+ position: absolute;
71
+ top: 10px;
72
+ bottom: 10px;
73
+ left: -3px;
74
+ width: 1px;
75
+ background: var(--line);
76
+ content: "";
77
+ }
78
+ .auth-tabs button:not([aria-selected="true"]):hover { background: color-mix(in srgb, var(--surface) 62%, transparent); color: var(--ink); }
79
+ .auth-tabs button[aria-selected="true"] {
80
+ z-index: 1;
81
+ background: color-mix(in srgb, var(--accent) 18%, var(--surface));
82
+ color: var(--accent-dark);
83
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--accent) 58%, transparent), 0 2px 7px color-mix(in srgb, var(--accent) 18%, transparent);
84
+ font-weight: 750;
85
+ }
86
+ .auth-tabs button[aria-selected="true"]::after {
87
+ position: absolute;
88
+ right: 24%;
89
+ bottom: 5px;
90
+ left: 24%;
91
+ height: 3px;
92
+ border-radius: 999px;
93
+ background: var(--accent);
94
+ content: "";
95
+ }
96
+ .auth-tabs button:focus-visible { z-index: 2; outline: 2px solid color-mix(in srgb, var(--accent) 82%, white); outline-offset: -2px; }
97
+ .auth-form { display: grid; gap: 16px; }
98
+ .auth-form label { display: grid; gap: 8px; color: var(--muted); font-size: 13px; }
99
+ .auth-form input {
100
+ width: 100%;
101
+ min-height: 46px;
102
+ padding: 12px 14px;
103
+ border: 1px solid var(--line);
104
+ border-radius: 7px;
105
+ background: var(--paper-deep);
106
+ font-size: 15px;
107
+ line-height: 1.4;
108
+ }
109
+ .auth-form input:focus {
110
+ border-color: color-mix(in srgb, var(--accent) 55%, var(--line));
111
+ box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent);
112
+ }
113
+ .password-field { position: relative; display: block; }
114
+ .password-field input { padding-right: 62px; }
115
+ .password-toggle {
116
+ position: absolute;
117
+ top: 50%;
118
+ right: 8px;
119
+ display: grid;
120
+ min-width: 36px;
121
+ min-height: 30px;
122
+ padding: 5px 7px;
123
+ place-items: center;
124
+ transform: translateY(-50%);
125
+ border: 1px solid color-mix(in srgb, var(--line) 82%, transparent);
126
+ border-radius: 5px;
127
+ background: color-mix(in srgb, var(--surface) 72%, transparent);
128
+ color: var(--accent-dark);
129
+ cursor: pointer;
130
+ font-size: 12px;
131
+ font-weight: 650;
132
+ }
133
+ .password-toggle svg { width: 18px; height: 18px; fill: none; stroke: currentColor; stroke-linecap: round; stroke-linejoin: round; stroke-width: 1.9; }
134
+ .password-toggle:hover { border-color: color-mix(in srgb, var(--accent) 52%, var(--line)); background: color-mix(in srgb, var(--accent) 12%, var(--surface)); }
135
+ .password-toggle:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
136
+ .auth-form .primary-button {
137
+ width: 100%;
138
+ min-height: 46px;
139
+ margin-top: 4px;
140
+ padding: 12px 16px;
141
+ border-radius: 7px;
142
+ font-size: 15px;
143
+ font-weight: 600;
144
+ }
145
+ .auth-form small { color: var(--muted); line-height: 1.5; font-size: 12px; }
146
+ .auth-captcha { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 10px; align-items: end; }
147
+ .auth-captcha label { margin: 0; }
148
+ .auth-captcha-image {
149
+ display: inline-flex;
150
+ align-items: center;
151
+ justify-content: center;
152
+ min-width: 148px;
153
+ min-height: 46px;
154
+ padding: 0;
155
+ border: 1px solid var(--line);
156
+ border-radius: 7px;
157
+ background: var(--paper-deep);
158
+ cursor: pointer;
159
+ }
160
+ .auth-captcha-image img { display: block; width: 148px; height: 48px; border-radius: 6px; }
161
+ .auth-captcha-hint { margin: -8px 0 0; color: var(--muted); font-size: 12px; line-height: 1.4; }
162
+ .auth-error { min-height: 20px; margin: 14px 0 0 !important; color: var(--accent-dark) !important; }
163
+
164
+ :root[data-theme="dark"] {
165
+ --ink: #e8e2d8;
166
+ --muted: #aaa398;
167
+ --paper: #171714;
168
+ --paper-deep: #26231f;
169
+ --panel: #1d1c19;
170
+ --line: #3f3a33;
171
+ --accent: #bd6550;
172
+ --accent-dark: #e08a72;
173
+ --green: #89a985;
174
+ --shadow: 0 18px 50px rgba(0,0,0,.38);
175
+ --surface: #24221e;
176
+ --surface-soft: rgba(48,45,39,.74);
177
+ --surface-strong: rgba(38,35,30,.96);
178
+ --row-active: #332d27;
179
+ --surface-hover: #3a342d;
180
+ --app-glow: rgba(98,82,66,.18);
181
+ --toast-bg: #ece6dc;
182
+ --toast-fg: #171714;
183
+ --toast-error-bg: #e08a72;
184
+ --toast-error-fg: #171714;
185
+ color-scheme: dark;
186
+ }
187
+
188
+ * { box-sizing: border-box; }
189
+
190
+ html, body { width: 100%; height: 100%; margin: 0; overflow: hidden; }
191
+
192
+ button, input, textarea, select { font: inherit; color: inherit; }
193
+ button { cursor: pointer; }
194
+
195
+ .app-shell {
196
+ display: grid;
197
+ grid-template-columns: var(--left-panel-width) minmax(480px, 1fr) var(--ai-panel-width);
198
+ grid-template-rows: 64px minmax(0, 1fr);
199
+ width: 100vw;
200
+ height: 100vh;
201
+ background:
202
+ radial-gradient(circle at 50% -20%, var(--app-glow), transparent 45%),
203
+ var(--paper);
204
+ }
205
+
206
+ .topbar {
207
+ grid-column: 1 / -1;
208
+ display: grid;
209
+ grid-template-columns: var(--left-panel-width) 1fr auto;
210
+ align-items: center;
211
+ border-bottom: 1px solid var(--line);
212
+ background: var(--panel);
213
+ z-index: 5;
214
+ }
215
+
216
+ .brand-block { display: flex; align-items: center; gap: 11px; padding: 0 20px; border: 0; background: transparent; text-align: left; }
217
+ .brand-mark { display: grid; place-items: center; width: 34px; height: 34px; color: #fff; background: var(--accent); border-radius: 3px; font-weight: 700; }
218
+ .brand-block strong, .brand-block small { display: block; }
219
+ .brand-block strong { font-size: 16px; letter-spacing: .16em; }
220
+ .brand-block small { color: var(--muted); font-size: 10px; margin-top: 2px; }
221
+ .work-meta { font-size: 13px; color: var(--muted); padding-left: 26px; }
222
+ .top-actions { display: flex; justify-content: flex-end; gap: 10px; align-items: center; padding-right: 18px; }
223
+ .theme-toggle, .settings-button, .topbar-icon-button {
224
+ display: grid;
225
+ flex: 0 0 34px;
226
+ place-items: center;
227
+ width: 34px;
228
+ height: 34px;
229
+ padding: 0;
230
+ border: 1px solid var(--line);
231
+ border-radius: 50%;
232
+ background: transparent;
233
+ color: var(--muted);
234
+ }
235
+ .theme-toggle:hover, .theme-toggle:focus-visible,
236
+ .settings-button:hover, .settings-button:focus-visible, .settings-button[aria-current="page"],
237
+ .topbar-icon-button:hover, .topbar-icon-button:focus-visible {
238
+ border-color: var(--accent);
239
+ color: var(--accent-dark);
240
+ background: var(--paper-deep);
241
+ outline: none;
242
+ }
243
+ .topbar-icon-button:disabled {
244
+ cursor: not-allowed;
245
+ opacity: .42;
246
+ border-color: var(--line);
247
+ color: var(--muted);
248
+ background: transparent;
249
+ }
250
+ .theme-icon, .settings-icon, .topbar-icon {
251
+ width: 17px;
252
+ height: 17px;
253
+ fill: none;
254
+ stroke: currentColor;
255
+ stroke-width: 1.7;
256
+ stroke-linecap: round;
257
+ stroke-linejoin: round;
258
+ }
259
+ .theme-icon-sun { display: none; }
260
+ :root[data-theme="dark"] .theme-icon-moon { display: none; }
261
+ :root[data-theme="dark"] .theme-icon-sun { display: block; }
262
+ .account-button { display: flex; align-items: center; gap: 7px; min-width: 0; height: 34px; padding: 3px 9px 3px 3px; border: 1px solid var(--line); border-radius: 18px; background: transparent; color: var(--text); }
263
+ .user-avatar { position: relative; display: inline-grid; flex: 0 0 auto; place-items: center; width: 36px; height: 36px; overflow: hidden; border-radius: 50%; background: var(--accent); color: white; font-size: 13px; font-weight: 650; line-height: 1; }
264
+ .user-avatar img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
265
+ .user-avatar-fallback { display: grid; width: 100%; height: 100%; place-items: center; }
266
+ .account-button > .account-avatar { width: 26px; height: 26px; font-size: 11px; }
267
+ .account-button > span:last-child { max-width: 100px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 11px; }
268
+ .account-menu { position: absolute; z-index: 80; top: 48px; right: 84px; display: grid; min-width: 180px; gap: 4px; padding: 12px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface); box-shadow: var(--shadow); }
269
+ .account-menu.hidden { display: none; }
270
+ .account-menu small { margin-bottom: 8px; color: var(--muted); }
271
+ .account-menu button { min-height: 30px; padding: 6px 9px; border: 1px solid var(--line); border-radius: 4px; background: transparent; color: var(--muted); text-align: left; font-size: 10px; }
272
+ .account-menu button:hover, .account-menu button:focus-visible { border-color: var(--accent); background: var(--paper-deep); color: var(--accent-dark); outline: none; }
273
+
274
+ .onboarding-dialog {
275
+ position: fixed;
276
+ inset: 0;
277
+ width: 100vw;
278
+ max-width: none;
279
+ height: 100dvh;
280
+ max-height: none;
281
+ margin: 0;
282
+ padding: 0;
283
+ overflow: hidden;
284
+ border: 0;
285
+ background: transparent;
286
+ color: var(--ink);
287
+ }
288
+ .onboarding-dialog::backdrop { background: transparent; }
289
+ .onboarding-spotlight {
290
+ position: absolute;
291
+ z-index: 1;
292
+ border: 2px solid color-mix(in srgb, var(--accent) 88%, white);
293
+ border-radius: 10px;
294
+ background: transparent;
295
+ box-shadow: 0 0 0 9999px rgba(20,18,16,.7), 0 0 0 5px color-mix(in srgb, var(--accent) 22%, transparent), 0 10px 28px rgba(0,0,0,.28);
296
+ pointer-events: none;
297
+ transition: left .22s ease, top .22s ease, width .22s ease, height .22s ease;
298
+ }
299
+ .onboarding-popover {
300
+ --onboarding-arrow-offset: 40px;
301
+ position: absolute;
302
+ z-index: 2;
303
+ display: grid;
304
+ width: min(370px, calc(100vw - 28px));
305
+ overflow: visible;
306
+ border: 1px solid color-mix(in srgb, var(--accent) 36%, var(--line));
307
+ border-radius: 12px;
308
+ background: var(--surface);
309
+ box-shadow: 0 24px 70px rgba(20,18,16,.28);
310
+ animation: onboarding-popover-in .18s ease both;
311
+ }
312
+ .onboarding-popover::before { position: absolute; width: 14px; height: 14px; background: var(--surface); content: ""; transform: rotate(45deg); }
313
+ .onboarding-popover[data-placement="right"]::before { top: calc(var(--onboarding-arrow-offset) - 7px); left: -8px; border-bottom: 1px solid color-mix(in srgb, var(--accent) 36%, var(--line)); border-left: 1px solid color-mix(in srgb, var(--accent) 36%, var(--line)); }
314
+ .onboarding-popover[data-placement="left"]::before { top: calc(var(--onboarding-arrow-offset) - 7px); right: -8px; border-top: 1px solid color-mix(in srgb, var(--accent) 36%, var(--line)); border-right: 1px solid color-mix(in srgb, var(--accent) 36%, var(--line)); }
315
+ .onboarding-popover[data-placement="bottom"]::before { top: -8px; left: calc(var(--onboarding-arrow-offset) - 7px); border-top: 1px solid color-mix(in srgb, var(--accent) 36%, var(--line)); border-left: 1px solid color-mix(in srgb, var(--accent) 36%, var(--line)); }
316
+ .onboarding-popover[data-placement="top"]::before { bottom: -8px; left: calc(var(--onboarding-arrow-offset) - 7px); border-right: 1px solid color-mix(in srgb, var(--accent) 36%, var(--line)); border-bottom: 1px solid color-mix(in srgb, var(--accent) 36%, var(--line)); }
317
+ .onboarding-popover-header { display: flex; align-items: center; justify-content: space-between; gap: 18px; padding: 14px 18px 10px; border-bottom: 1px solid var(--line); }
318
+ .onboarding-popover-header > span { color: var(--accent-dark); font: 10px/1 var(--font-latin), monospace; letter-spacing: .08em; }
319
+ .onboarding-skip { min-height: 30px; padding: 5px 10px; border: 1px solid var(--line); border-radius: 16px; background: transparent; color: var(--muted); font-size: 10px; }
320
+ .onboarding-skip:hover, .onboarding-skip:focus-visible { border-color: var(--accent); background: var(--paper-deep); color: var(--accent-dark); outline: none; }
321
+ .onboarding-popover-body { padding: 18px 20px 20px; }
322
+ .onboarding-popover-body h2 { margin: 7px 0 10px; font-size: 22px; font-weight: 620; line-height: 1.3; }
323
+ .onboarding-popover-body h2:focus { outline: none; }
324
+ .onboarding-popover-body p { margin: 0; color: var(--muted); font-size: 12px; line-height: 1.75; }
325
+ .onboarding-popover-footer { display: flex; justify-content: space-between; gap: 10px; padding: 12px 18px 16px; border-top: 1px solid var(--line); }
326
+ .onboarding-popover-footer button { min-width: 94px; min-height: 36px; }
327
+ .onboarding-popover-footer button:disabled { cursor: default; opacity: .4; }
328
+ @keyframes onboarding-popover-in { from { opacity: 0; transform: translateY(5px); } to { opacity: 1; transform: translateY(0); } }
329
+
330
+ .left-panel, .ai-panel { position: relative; min-height: 0; background: var(--panel); }
331
+ .left-panel { border-right: 1px solid var(--line); padding: 18px 14px 16px; overflow-y: auto; }
332
+ .ai-panel { border-left: 1px solid var(--line); display: flex; flex-direction: column; padding: 18px; min-width: 0; }
333
+ .panel-collapse-button { z-index: 8; flex: 0 0 auto; width: 24px; height: 24px; padding: 0; border: 1px solid var(--line); border-radius: 4px; background: var(--panel); color: var(--muted); font-size: 18px; line-height: 1; }
334
+ .ai-heading #ai-panel-toggle { flex-basis: 30px; width: 30px; height: 30px; }
335
+ .panel-resize-handle { position: absolute; z-index: 7; top: 0; bottom: 0; width: 7px; cursor: col-resize; touch-action: none; }
336
+ .left-panel > .panel-resize-handle { right: 0; }.ai-panel > .panel-resize-handle { left: 0; }
337
+ .panel-resize-handle::after { content: ""; position: absolute; top: 0; bottom: 0; left: 3px; width: 1px; background: transparent; transition: background .14s ease; }
338
+ .panel-resize-handle:hover::after, .panel-resize-handle:focus-visible::after, body.is-panel-resizing .panel-resize-handle::after { background: var(--accent); }
339
+ body.is-panel-resizing { cursor: col-resize; user-select: none; }
340
+ .app-shell.left-panel-collapsed { --left-panel-width: 42px !important; }.app-shell.ai-panel-collapsed { --ai-panel-width: 42px !important; }
341
+ .app-shell.left-panel-collapsed .left-panel, .app-shell.ai-panel-collapsed .ai-panel { padding: 0; overflow: hidden; }
342
+ .app-shell.left-panel-collapsed .left-panel > :not(.left-actions), .app-shell.ai-panel-collapsed .ai-panel > :not(.ai-heading) { display: none; }
343
+ .app-shell.left-panel-collapsed .left-actions, .app-shell.ai-panel-collapsed .ai-heading { display: flex; justify-content: center; padding: 8px 0; border: 0; }
344
+ .app-shell.left-panel-collapsed .left-actions > :not(.left-primary-actions), .app-shell.left-panel-collapsed .left-primary-actions > :not(.panel-collapse-button), .app-shell.ai-panel-collapsed .ai-heading > :not(.panel-collapse-button) { display: none; }
345
+ .app-shell.left-panel-collapsed .left-primary-actions { display: flex; justify-content: center; }
346
+ .app-shell.left-panel-collapsed .panel-heading { display: none; }
347
+ .app-shell.left-panel-collapsed .brand-block { padding: 0 4px; }.app-shell.left-panel-collapsed .brand-block > div { display: none; }
348
+ .main-panel { min-width: 0; min-height: 0; overflow: hidden; }
349
+ .app-shell.shelf-mode { grid-template-columns: 1fr; }
350
+ .app-shell.shelf-mode .topbar { grid-template-columns: 280px 1fr auto; }
351
+ .app-shell.shelf-mode .left-panel, .app-shell.shelf-mode .ai-panel { display: none; }
352
+ .app-shell.shelf-mode .save-state { display: none; }
353
+ .app-shell.shelf-mode .main-panel { grid-column: 1 / -1; }
354
+
355
+ .shelf-view { height: 100%; overflow-y: auto; padding: 48px clamp(32px, 7vw, 110px) 90px; }
356
+ .shelf-header { display: flex; align-items: flex-end; justify-content: space-between; gap: 30px; max-width: 1400px; margin: 0 auto 38px; }
357
+ .shelf-header h1 { margin: 0 0 10px; font-size: clamp(30px, 4vw, 52px); font-weight: 560; letter-spacing: -.04em; }
358
+ .shelf-header p { margin: 0; color: var(--muted); }
359
+ .settings-hub-header { align-items: center; }
360
+ .settings-hub-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; max-width: 1000px; margin: 0 auto; }
361
+ .settings-hub-card { display: grid; grid-template-columns: 48px minmax(0, 1fr); grid-template-rows: auto auto; gap: 4px 14px; align-items: center; min-height: 128px; padding: 22px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-soft); text-align: left; }
362
+ .settings-hub-card:hover, .settings-hub-card:focus-visible { border-color: var(--accent); background: var(--paper-deep); box-shadow: var(--shadow); transform: translateY(-2px); }
363
+ .settings-hub-card:disabled { cursor: not-allowed; opacity: .42; box-shadow: none; transform: none; }
364
+ .settings-card-mark { display: grid; grid-row: 1 / 3; place-items: center; width: 48px; height: 48px; border: 1px solid var(--line); border-radius: 50%; color: var(--accent-dark); background: var(--surface); font-size: 14px; font-weight: 700; }
365
+ .settings-hub-card strong { align-self: end; font-size: 16px; }
366
+ .settings-hub-card small { align-self: start; color: var(--muted); font-size: 10px; line-height: 1.5; }
367
+ .settings-work-note { max-width: 1000px; margin: 18px auto 0; color: var(--muted); font-size: 11px; }
368
+ .access-dialog-body { display: grid; gap: 16px; padding: 18px 24px 22px; }
369
+ .access-list { display: grid; gap: 8px; max-height: min(52vh, 480px); overflow: auto; padding: 0; }
370
+ .access-row {
371
+ display: grid;
372
+ grid-template-columns: minmax(0, 1fr) auto auto;
373
+ align-items: center;
374
+ gap: 12px;
375
+ padding: 12px 14px;
376
+ border: 1px solid var(--line);
377
+ border-radius: 7px;
378
+ background: var(--surface-soft);
379
+ }
380
+ .access-person { display: flex; align-items: center; gap: 10px; min-width: 0; }
381
+ .access-avatar { width: 34px; height: 34px; font-size: 12px; }
382
+ .access-person-copy { display: grid; gap: 3px; min-width: 0; }
383
+ .access-row strong {
384
+ overflow: hidden;
385
+ color: var(--ink);
386
+ font-size: 13px;
387
+ font-weight: 600;
388
+ line-height: 1.35;
389
+ text-overflow: ellipsis;
390
+ white-space: nowrap;
391
+ }
392
+ .access-row small { color: var(--muted); font-size: 11px; line-height: 1.4; }
393
+ .access-row > span {
394
+ color: var(--muted);
395
+ font-size: 11px;
396
+ white-space: nowrap;
397
+ }
398
+ .access-row select {
399
+ min-width: 118px;
400
+ min-height: 34px;
401
+ padding: 6px 10px;
402
+ border: 1px solid var(--line);
403
+ border-radius: 4px;
404
+ background: var(--surface);
405
+ color: var(--ink);
406
+ font-size: 12px;
407
+ }
408
+ .access-row button {
409
+ min-height: 34px;
410
+ padding: 6px 12px;
411
+ border: 1px solid var(--line);
412
+ border-radius: 4px;
413
+ background: var(--surface);
414
+ color: var(--muted);
415
+ font-size: 12px;
416
+ white-space: nowrap;
417
+ }
418
+ .access-row button:hover:not(:disabled), .access-row button:focus-visible:not(:disabled) {
419
+ border-color: var(--accent);
420
+ color: var(--accent-dark);
421
+ outline: none;
422
+ }
423
+ .access-row button:disabled, .access-row select:disabled {
424
+ cursor: not-allowed;
425
+ opacity: .46;
426
+ }
427
+ .member-invite-form { display: grid; grid-template-columns: minmax(0, 1fr) minmax(130px, .3fr) auto; align-items: end; gap: 10px; margin: 0; }
428
+ .member-invite-form label { display: grid; gap: 6px; color: var(--muted); font-size: 11px; }
429
+ .member-invite-form select {
430
+ width: 100%;
431
+ min-height: 38px;
432
+ padding: 9px 10px;
433
+ border: 1px solid var(--line);
434
+ border-radius: 4px;
435
+ background: var(--surface);
436
+ color: var(--ink);
437
+ font-size: 13px;
438
+ }
439
+ .member-invite-form .primary-button { min-height: 38px; white-space: nowrap; }
440
+ .app-shell.view-only-mode:not(.shelf-mode) { grid-template-columns: var(--left-panel-width) minmax(480px, 1fr); }
441
+ .app-shell.view-only-mode:not(.shelf-mode) .ai-panel { display: none; }
442
+ .app-shell.view-only-mode:not(.shelf-mode) .left-primary-actions .file-button,
443
+ .app-shell.view-only-mode:not(.shelf-mode) #new-volume-button,
444
+ .app-shell.view-only-mode:not(.shelf-mode) #new-chapter-button,
445
+ .app-shell.view-only-mode:not(.shelf-mode) #module-create-button,
446
+ .app-shell.view-only-mode:not(.shelf-mode) [data-work-settings],
447
+ .app-shell.view-only-mode:not(.shelf-mode) [data-module="tasks"],
448
+ .app-shell.view-only-mode:not(.shelf-mode) [data-module="ai-settings"],
449
+ .app-shell.view-only-mode:not(.shelf-mode) #tidy-blank-lines-button,
450
+ .app-shell.view-only-mode:not(.shelf-mode) #save-button { display: none !important; }
451
+ .app-shell.view-only-mode:not(.shelf-mode) .left-primary-actions { justify-content: flex-end; }
452
+ .app-shell.view-only-mode:not(.shelf-mode) #chapter-title[readonly],
453
+ .app-shell.view-only-mode:not(.shelf-mode) #chapter-content[readonly] { cursor: default; }
454
+ body.work-viewer-mode [data-setting-status],
455
+ body.work-viewer-mode [data-edit-setting],
456
+ body.work-viewer-mode [data-edit-character],
457
+ body.work-viewer-mode [data-edit-race],
458
+ body.work-viewer-mode [data-edit-organization],
459
+ body.work-viewer-mode [data-edit-timeline-track],
460
+ body.work-viewer-mode [data-add-event-track],
461
+ body.work-viewer-mode [data-edit-event],
462
+ body.work-viewer-mode [data-split-event],
463
+ body.work-viewer-mode [data-event-select],
464
+ body.work-viewer-mode #create-timeline-track,
465
+ body.work-viewer-mode #merge-events,
466
+ body.work-viewer-mode [data-edit-foreshadow],
467
+ body.work-viewer-mode [data-edit-outline],
468
+ body.work-viewer-mode [data-edit-relationship],
469
+ body.work-viewer-mode [data-review-id],
470
+ body.work-viewer-mode .task-auto-run-panel,
471
+ body.work-viewer-mode [data-run-task],
472
+ body.work-viewer-mode [data-cancel-task],
473
+ body.work-viewer-mode [data-restore-version],
474
+ body.work-viewer-mode [data-entity-version-restore],
475
+ body.work-viewer-mode [data-character-restore],
476
+ body.work-viewer-mode [data-item-list-add],
477
+ body.work-viewer-mode [data-item-list-remove],
478
+ body.work-viewer-mode [data-structured-list-add],
479
+ body.work-viewer-mode [data-structured-list-remove],
480
+ body.work-viewer-mode .character-editor-actions { display: none !important; }
481
+ .search-form { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: end; gap: 10px; margin: 0; }
482
+ .search-form label { display: grid; gap: 6px; color: var(--muted); font-size: 11px; }
483
+ .search-form input {
484
+ width: 100%;
485
+ min-height: 38px;
486
+ padding: 9px 10px;
487
+ border: 1px solid var(--line);
488
+ border-radius: 4px;
489
+ background: var(--surface);
490
+ color: var(--ink);
491
+ font-size: 13px;
492
+ }
493
+ .search-form .primary-button { min-height: 38px; white-space: nowrap; }
494
+ .search-results { display: grid; gap: 8px; max-height: min(52vh, 480px); overflow: auto; }
495
+ .search-results-empty, .search-results-status {
496
+ margin: 0;
497
+ padding: 28px 12px;
498
+ border: 1px dashed var(--line);
499
+ border-radius: 7px;
500
+ color: var(--muted);
501
+ font-size: 12px;
502
+ text-align: center;
503
+ }
504
+ .search-result {
505
+ display: grid;
506
+ gap: 6px;
507
+ width: 100%;
508
+ padding: 12px 14px;
509
+ border: 1px solid var(--line);
510
+ border-radius: 7px;
511
+ background: var(--surface-soft);
512
+ text-align: left;
513
+ }
514
+ .search-result:hover, .search-result:focus-visible {
515
+ border-color: var(--accent);
516
+ background: var(--paper-deep);
517
+ outline: none;
518
+ }
519
+ .search-result-meta {
520
+ display: flex;
521
+ align-items: center;
522
+ justify-content: space-between;
523
+ gap: 10px;
524
+ color: var(--muted);
525
+ font-size: 11px;
526
+ }
527
+ .search-result strong {
528
+ overflow: hidden;
529
+ color: var(--ink);
530
+ font-size: 13px;
531
+ font-weight: 600;
532
+ text-overflow: ellipsis;
533
+ white-space: nowrap;
534
+ }
535
+ .search-result p {
536
+ margin: 0;
537
+ color: var(--muted);
538
+ font-size: 12px;
539
+ line-height: 1.55;
540
+ display: -webkit-box;
541
+ overflow: hidden;
542
+ -webkit-line-clamp: 2;
543
+ -webkit-box-orient: vertical;
544
+ }
545
+ .work-access-field { display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 14px; border: 1px solid var(--line); border-radius: 5px; background: var(--surface-soft); }
546
+ .work-access-field > div { display: grid; gap: 4px; min-width: 0; }
547
+ .work-access-field strong { color: var(--ink); font-size: 12px; }
548
+ .work-access-field small { color: var(--muted); font-size: 10px; line-height: 1.5; }
549
+ .work-access-field .ghost-button { flex: 0 0 auto; white-space: nowrap; }
550
+ .account-dialog { width: min(640px, 92vw); overflow: hidden; }
551
+ .account-settings-body { display: grid; gap: 16px; max-height: calc(88vh - 86px); overflow-y: auto; padding: 20px 24px 24px; }
552
+ .account-settings-section { padding: 18px; border: 1px solid var(--line); border-radius: 7px; background: var(--surface-soft); }
553
+ .account-settings-section-header { display: grid; gap: 4px; }
554
+ .account-settings-section-header h3 { margin: 0; font-size: 15px; font-weight: 600; }
555
+ .account-settings-section-header p { margin: 0; color: var(--muted); font-size: 10px; line-height: 1.55; }
556
+ .avatar-settings { display: grid; grid-template-columns: 76px minmax(0, 1fr); gap: 5px 14px; align-items: center; margin-top: 16px; padding: 14px; border: 1px solid var(--line); border-radius: 6px; background: var(--surface); }
557
+ .profile-avatar-preview { grid-row: 1 / 3; width: 76px; height: 76px; border: 2px solid color-mix(in srgb, var(--line) 72%, transparent); font-size: 26px; }
558
+ .avatar-settings-copy { display: grid; gap: 5px; min-width: 0; }
559
+ .avatar-settings-copy strong { color: var(--ink); font-size: 12px; }
560
+ .avatar-settings-copy small { color: var(--muted); font-size: 10px; line-height: 1.5; }
561
+ .avatar-settings-actions { display: flex; flex-wrap: wrap; gap: 8px; }
562
+ .avatar-settings-actions button { min-height: 32px; padding: 6px 11px; font-size: 11px; }
563
+ .avatar-settings-actions button:disabled { cursor: wait; opacity: .5; }
564
+ .account-settings-form { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: end; gap: 12px; margin-top: 16px; }
565
+ .account-settings-form label { display: grid; min-width: 0; gap: 6px; color: var(--muted); font-size: 11px; }
566
+ .account-settings-form input { width: 100%; min-height: 38px; padding: 9px 10px; background: var(--surface); font-size: 12px; }
567
+ .account-settings-form .primary-button { min-height: 38px; white-space: nowrap; }
568
+ .password-settings-form { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) auto; }
569
+ .api-key-settings { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 12px; margin-top: 16px; }
570
+ .api-key-settings > p { margin: 0; color: var(--muted); font-size: 11px; line-height: 1.6; }
571
+ .api-key-result { grid-column: 1 / -1; display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: end; gap: 10px; }
572
+ .api-key-result.hidden { display: none; }
573
+ .api-key-result label { display: grid; gap: 6px; color: var(--muted); font-size: 11px; }
574
+ .api-key-result input { width: 100%; min-height: 38px; padding: 9px 10px; background: var(--surface); font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 11px; }
575
+ .api-key-result button { min-height: 38px; }
576
+ .book-access-badge { display: inline-flex; width: fit-content; margin-top: 7px; padding: 2px 7px; border-radius: 10px; background: var(--paper-deep); color: var(--accent-dark); font-size: 9px; }
577
+ .book-shelf { display: grid; grid-template-columns: repeat(auto-fill, minmax(205px, 1fr)); gap: clamp(22px, 3vw, 38px); max-width: 1400px; margin: 0 auto; }
578
+ .book-card { position: relative; min-width: 0; border: 0; background: transparent; text-align: left; }
579
+ .book-open { width: 100%; padding: 0; border: 0; background: transparent; text-align: left; }
580
+ .book-cover { position: relative; display: grid; place-items: center; aspect-ratio: 3 / 4.25; overflow: hidden; border-radius: 8px 13px 13px 8px; background: linear-gradient(145deg, #a96350, #612d27); color: rgba(255,255,255,.9); box-shadow: 0 20px 34px rgba(62,39,29,.18), inset 9px 0 0 rgba(0,0,0,.08); transition: transform .2s ease, box-shadow .2s ease; }
581
+ .book-cover::after { content: ""; position: absolute; inset: 0 auto 0 9px; width: 1px; background: rgba(255,255,255,.2); }
582
+ .book-open:hover .book-cover, .book-open:focus-visible .book-cover { transform: translateY(-6px) rotateY(-2deg); box-shadow: 0 28px 44px rgba(62,39,29,.24), inset 9px 0 0 rgba(0,0,0,.08); }
583
+ .book-cover-fallback { font-size: clamp(46px, 6vw, 74px); font-weight: 700; opacity: .75; }
584
+ .book-cover img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
585
+ .book-info { display: grid; gap: 7px; padding: 15px 4px 0; padding-right: 40px; }
586
+ .book-info strong { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 16px; }
587
+ .book-info small, .book-info > span { color: var(--muted); font-size: 10px; }
588
+ .book-info > span { overflow: hidden; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; line-height: 1.4; }
589
+ .book-card-settings {
590
+ position: absolute;
591
+ right: 2px;
592
+ bottom: 2px;
593
+ z-index: 1;
594
+ min-height: 0;
595
+ padding: 2px 6px;
596
+ border: 1px solid var(--line);
597
+ border-radius: 3px;
598
+ background: var(--surface);
599
+ color: var(--muted);
600
+ font-size: 9px;
601
+ line-height: 1.2;
602
+ opacity: .28;
603
+ transition: opacity .18s ease, color .18s ease, border-color .18s ease;
604
+ }
605
+ .book-card:hover .book-card-settings,
606
+ .book-card:focus-within .book-card-settings,
607
+ .book-card-settings:focus-visible {
608
+ opacity: 1;
609
+ }
610
+ .book-card-settings:hover,
611
+ .book-card-settings:focus-visible {
612
+ color: var(--ink);
613
+ border-color: var(--accent);
614
+ }
615
+ .work-cover-field {
616
+ display: grid;
617
+ grid-template-columns: 72px minmax(0, 1fr);
618
+ gap: 12px 14px;
619
+ align-items: center;
620
+ padding: 14px;
621
+ border: 1px solid var(--line);
622
+ border-radius: 5px;
623
+ background: var(--surface-soft);
624
+ }
625
+ .work-cover-copy { grid-column: 2; display: grid; gap: 4px; min-width: 0; }
626
+ .work-cover-copy strong { color: var(--ink); font-size: 12px; }
627
+ .work-cover-copy small { color: var(--muted); font-size: 10px; line-height: 1.5; }
628
+ .work-cover-preview {
629
+ grid-row: 1 / 3;
630
+ grid-column: 1;
631
+ display: grid;
632
+ place-items: center;
633
+ width: 72px;
634
+ aspect-ratio: 3 / 4.25;
635
+ overflow: hidden;
636
+ border: 1px dashed var(--line);
637
+ border-radius: 4px;
638
+ background: var(--surface);
639
+ color: var(--muted);
640
+ font-size: 9px;
641
+ text-align: center;
642
+ }
643
+ .work-cover-preview.has-cover { border-style: solid; }
644
+ .work-cover-preview img { width: 100%; height: 100%; object-fit: cover; }
645
+ .work-cover-actions { grid-column: 2; display: flex; flex-wrap: wrap; gap: 8px; }
646
+ .work-cover-actions .ghost-button { min-height: 32px; padding: 6px 11px; font-size: 11px; }
647
+ .book-add-card { display: grid; place-items: center; align-content: center; aspect-ratio: 3 / 4.25; min-height: 280px; border: 1px dashed #b8ad9c; border-radius: 8px; color: var(--muted); }
648
+ .book-add-card span { display: grid; place-items: center; width: 58px; height: 58px; margin-bottom: 15px; border: 1px solid var(--line); border-radius: 50%; font-size: 34px; color: var(--accent); }
649
+ .book-add-card strong { color: var(--ink); margin-bottom: 8px; }
650
+ .book-add-card small { max-width: 160px; text-align: center; line-height: 1.5; }
651
+ .book-add-card:hover { border-color: var(--accent); background: var(--surface-soft); }
652
+
653
+ select, input, textarea { border: 1px solid var(--line); background: var(--surface); border-radius: 5px; outline: none; }
654
+ select:focus, input:focus, textarea:focus { border-color: #a77768; box-shadow: 0 0 0 3px rgba(139,61,44,.08); }
655
+ .left-actions { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 8px; margin: 0 0 15px; }
656
+ .left-primary-actions { display: flex; grid-column: 1 / -1; width: 100%; align-items: center; gap: 8px; }
657
+ .left-primary-actions .file-button { flex: 1 1 auto; width: auto; min-width: 0; }
658
+ .left-primary-actions #left-panel-toggle { flex: 0 0 30px; width: 30px; height: 30px; }
659
+ .file-button, .secondary-button { display: grid; place-items: center; min-height: 30px; border: 1px solid var(--line); border-radius: 4px; font-size: 11px; background: transparent; }
660
+ .file-button { container-type: inline-size; overflow: hidden; white-space: nowrap; }
661
+ .import-file-label-compact, .import-file-label-short { display: none; }
662
+ @container (max-width: 120px) {
663
+ .import-file-label-full { display: none; }
664
+ .import-file-label-compact { display: inline; }
665
+ }
666
+ @container (max-width: 88px) {
667
+ .import-file-label-compact { display: none; }
668
+ .import-file-label-short { display: inline; }
669
+ }
670
+ .file-button input { display: none; }
671
+ .module-nav { display: grid; grid-template-columns: repeat(2, 1fr); gap: 3px; padding: 8px 0 14px; border-bottom: 1px solid var(--line); }
672
+ .module-nav button { border: 0; background: transparent; text-align: left; padding: 7px 9px; color: var(--muted); font-size: 12px; border-radius: 3px; }
673
+ .module-nav button.active, .module-nav button:hover { background: var(--paper-deep); color: var(--ink); }
674
+ .module-nav .ai-analysis-entry { background: color-mix(in srgb, var(--accent) 10%, transparent); color: var(--accent-dark); font-weight: 650; }
675
+ #module-more-button { grid-column: 1 / -1; color: var(--accent-dark); text-align: center; }
676
+ .panel-heading { display: flex; align-items: center; gap: 8px; padding: 15px 7px 9px; color: var(--muted); font-size: 11px; letter-spacing: .08em; text-transform: uppercase; }
677
+ .panel-heading #chapter-count { margin-left: auto; }
678
+ .novel-tree { font-size: 13px; }
679
+ .empty-copy { color: var(--muted); padding: 14px 7px; line-height: 1.5; }
680
+ .volume-node { margin-bottom: 8px; }
681
+ .volume-title { display: flex; width: 100%; min-width: 0; align-items: center; justify-content: space-between; padding: 7px; border: 0; background: transparent; color: var(--muted); font-size: 11px; letter-spacing: .05em; text-align: left; }
682
+ .volume-title::before { content: ""; width: 4px; height: 4px; border: solid var(--muted); border-width: 0 1px 1px 0; transform: rotate(45deg); margin-right: 8px; }
683
+ .volume-node.is-collapsed .volume-title::before { transform: rotate(-45deg); }
684
+ .volume-title span:first-child { flex: 1; }
685
+ .volume-chapters { display: block; }
686
+ .volume-node.is-collapsed .volume-chapters { display: none; }
687
+ .chapter-node { display: grid; grid-template-columns: minmax(0, 1fr) max-content; gap: 8px; width: 100%; padding: 9px 10px 9px 20px; border: 0; background: transparent; border-radius: 4px; text-align: left; font-size: 12px; }
688
+ .chapter-node:hover, .chapter-node.active { background: var(--row-active); }
689
+ .chapter-node.active { color: var(--accent-dark); font-weight: 700; }
690
+ .chapter-node > span:first-child { min-width: 0; overflow-wrap: anywhere; line-height: 1.45; white-space: normal; }
691
+ .chapter-node-meta { display: flex; flex: none; align-items: center; gap: 5px; margin-left: auto; overflow: visible; white-space: nowrap; }
692
+ .chapter-node small { color: var(--muted); font-size: 9px; }
693
+ .chapter-type-badge { max-width: 58px; overflow: hidden; padding: 2px 5px; border-radius: 9px; background: rgba(139,61,44,.1); color: var(--accent-dark); font-size: 8px; font-style: normal; text-overflow: ellipsis; white-space: nowrap; }
694
+
695
+ .ghost-button, .primary-button { border-radius: 4px; padding: 8px 13px; font-size: 12px; }
696
+ .ghost-button { border: 1px solid var(--line); background: transparent; }
697
+ .primary-button { border: 1px solid var(--accent); background: var(--accent); color: #fff; }
698
+ .primary-button:hover { background: var(--accent-dark); }
699
+ .full-button { width: 100%; padding: 10px; }
700
+ .save-state { color: var(--green); font-size: 11px; min-width: 44px; }
701
+
702
+ .welcome-view { height: 100%; display: grid; align-content: center; max-width: 850px; margin: 0 auto; padding: 50px; }
703
+ .eyebrow { display: block; color: var(--accent); font-size: 10px; letter-spacing: .2em; text-transform: uppercase; margin-bottom: 8px; }
704
+ .welcome-view h1 { font-size: clamp(34px, 4vw, 58px); font-weight: 500; line-height: 1.26; margin: 0 0 24px; letter-spacing: -.03em; }
705
+ .welcome-view > p { max-width: 600px; color: var(--muted); line-height: 1.6; font-size: 15px; }
706
+ .welcome-view > .primary-button { width: fit-content; margin-top: 16px; padding: 12px 20px; }
707
+ .welcome-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; margin-top: 55px; background: var(--line); border: 1px solid var(--line); }
708
+ .welcome-grid article { background: var(--paper); padding: 18px; }
709
+ .welcome-grid b, .welcome-grid span { display: block; }
710
+ .welcome-grid b { font-size: 13px; margin-bottom: 8px; }
711
+ .welcome-grid span { color: var(--muted); font-size: 11px; line-height: 1.5; }
712
+
713
+ .hidden { display: none !important; }
714
+ .editor-view { container-name: editor-workspace; container-type: inline-size; display: grid; grid-template-rows: auto minmax(0, 1fr); height: 100%; }
715
+ .editor-toolbar { display: grid; grid-template-areas: "path path" "title actions"; grid-template-columns: minmax(0, 1fr) auto; align-items: flex-end; column-gap: 20px; row-gap: 6px; padding: 25px 7% 18px; border-bottom: 1px solid var(--line); }
716
+ #chapter-path { grid-area: path; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
717
+ .chapter-title { grid-area: title; display: block; width: 100%; min-width: 0; border: 0; border-radius: 0; background: transparent; font-size: 27px; padding: 0; }
718
+ .chapter-title:focus { box-shadow: none; border-bottom: 1px solid var(--accent); }
719
+ .editor-actions { grid-area: actions; display: flex; align-items: center; gap: 10px; }
720
+ .chapter-stats { color: var(--muted); font-size: 11px; }
721
+ @container editor-workspace (max-width: 720px) {
722
+ .editor-toolbar { grid-template-areas: "path" "title" "actions"; grid-template-columns: minmax(0, 1fr); gap: 12px; padding-inline: 6%; }
723
+ .chapter-title { min-height: 36px; }
724
+ .editor-actions { justify-content: flex-end; flex-wrap: wrap; }
725
+ .chapter-stats { display: none; }
726
+ }
727
+ .editor-body { display: flex; min-height: 0; flex-direction: column; }
728
+ .chapter-editor-frame { position: relative; display: grid; grid-template-columns: 38px minmax(0, 1fr); flex: 1 1 auto; width: 100%; min-height: 0; margin: 0; overflow: hidden; }
729
+ .chapter-line-numbers { position: relative; z-index: 2; grid-column: 1; grid-row: 1; min-height: 0; overflow: visible; border-right: 1px solid var(--line); background: linear-gradient(to right, transparent, rgba(143,132,116,.04)); color: var(--muted); font-family: var(--font-latin), monospace; font-size: clamp(11px, calc(var(--editor-font-size) * .72), 14px); line-height: 1.2; user-select: none; }
730
+ #chapter-line-numbers-inner { position: absolute; top: 32px; left: 0; right: 0; will-change: transform; }
731
+ .chapter-line-number { position: absolute; left: 0; box-sizing: border-box; display: flex; width: 100%; align-items: flex-start; justify-content: center; padding: 0 3px; border: 0; background: transparent; color: inherit; font: inherit; font-variant-numeric: tabular-nums; text-align: center; cursor: pointer; }
732
+ .chapter-line-number:hover { background: rgba(139,61,44,.08); color: var(--accent-dark); }
733
+ .chapter-line-number.is-line-selected { background: rgba(139,61,44,.16); color: var(--accent-dark); font-weight: 700; }
734
+ .chapter-line-number.is-line-selected::after { content: ""; position: absolute; top: 0; left: 100%; width: 100vw; height: 100%; background: rgba(139,61,44,.085); box-shadow: inset 3px 0 rgba(139,61,44,.28); pointer-events: none; }
735
+ .chapter-content { position: relative; z-index: 1; grid-column: 2; grid-row: 1; resize: none; width: 100%; height: 100%; min-height: 0; margin: 0; padding: 32px 36px 72px; border: 0; background: transparent; border-radius: 0; font-size: var(--editor-font-size); line-height: var(--editor-line-height); letter-spacing: .01em; overflow-wrap: break-word; }
736
+ .chapter-content:focus { box-shadow: none; }
737
+ .chapter-whitespace-overlay { position: relative; z-index: 2; grid-column: 2; grid-row: 1; width: 100%; height: 100%; overflow: hidden; opacity: 0; pointer-events: none; }
738
+ .chapter-whitespace-overlay.is-visible { opacity: 1; }
739
+ #chapter-whitespace-inner { box-sizing: border-box; min-height: 100%; color: transparent; white-space: pre-wrap; will-change: transform; }
740
+ .chapter-space-marker { position: relative; color: transparent; }
741
+ .chapter-space-marker::after { content: "·"; position: absolute; inset: 0; color: color-mix(in srgb, var(--muted) 62%, transparent); font-family: var(--font-latin), monospace; text-align: center; }
742
+ .chapter-space-marker.ideographic-space::after { content: "□"; color: color-mix(in srgb, var(--accent) 58%, transparent); font-size: .62em; line-height: 1.7; }
743
+ .chapter-space-marker.tab::after { content: "→"; color: color-mix(in srgb, var(--muted) 72%, transparent); font-size: .72em; line-height: 1.65; text-align: left; }
744
+ .chapter-line-measure { position: absolute; z-index: -1; top: 0; left: 38px; visibility: hidden; white-space: pre-wrap; overflow-wrap: break-word; pointer-events: none; }
745
+ .chapter-line-measure > div { display: block; }
746
+ .chapter-insight { margin: 14px 7% 0; padding: 13px 16px; border: 1px solid var(--line); border-left: 3px solid var(--accent); background: var(--surface-soft); color: var(--muted); font-size: 11px; line-height: 1.5; }
747
+ .chapter-insight strong { color: var(--ink); margin-right: 8px; }
748
+
749
+ .module-view { height: 100%; overflow-y: auto; padding: 42px 6%; }
750
+ .module-header { display: flex; justify-content: space-between; align-items: flex-end; padding-bottom: 24px; border-bottom: 1px solid var(--line); }
751
+ .module-header h1 { margin: 0 0 8px; font-weight: 500; font-size: 34px; }
752
+ .module-header p { margin: 0; color: var(--muted); font-size: 13px; }
753
+ .module-content { padding: 24px 0 80px; }
754
+ .card-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 13px; }
755
+ .record-card { position: relative; border: 1px solid var(--line); background: var(--surface-soft); padding: 18px; min-height: 130px; border-radius: 4px; }
756
+ .record-card h3 { font-size: 16px; margin: 5px 0 10px; font-weight: 600; }
757
+ .record-card p { color: var(--muted); font-size: 12px; line-height: 1.55; margin: 0; white-space: pre-wrap; }
758
+ .record-card small { color: var(--accent); font-size: 9px; letter-spacing: .1em; text-transform: uppercase; }
759
+ .character-card { cursor: pointer; }
760
+ .character-card:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
761
+ .card-actions { display: flex; gap: 6px; margin-top: 15px; }
762
+ .card-actions button { border: 1px solid var(--line); background: transparent; border-radius: 3px; font-size: 10px; padding: 5px 8px; }
763
+ .card-actions .primary-button { border-color: var(--accent); background: var(--accent); color: #fff; padding: 8px 13px; font-size: 12px; }
764
+ .card-actions .primary-button:hover, .card-actions .primary-button:focus-visible { background: var(--accent-dark); }
765
+ .provider-card-grid { grid-template-columns: repeat(auto-fit, minmax(min(100%, 420px), 1fr)); }
766
+ .provider-card { min-width: 0; }
767
+ .provider-card p, .provider-card .model-pill { overflow-wrap: anywhere; word-break: break-word; }
768
+ .provider-models { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
769
+ .provider-card .model-pill { max-width: 100%; margin: 0; border: 0; text-align: left; white-space: normal; cursor: pointer; }
770
+ .provider-card .model-pill:hover, .provider-card .model-pill:focus-visible { background: var(--surface-hover); color: var(--ink); }
771
+ .provider-card .card-actions { flex-wrap: wrap; }
772
+ .pill { display: inline-block; padding: 3px 7px; margin: 0 4px 4px 0; border-radius: 12px; background: var(--paper-deep); color: var(--muted); font-size: 9px; }
773
+ .organization-links { display: flex; flex-wrap: wrap; gap: 5px; align-items: center; margin: 8px 0 6px; }.organization-links b { color: var(--muted); font-size: 9px; font-weight: 500; }.organization-links .pill { margin: 0; }.organization-empty { color: var(--muted); font-size: 9px; }.organization-pill { color: var(--accent-dark); background: rgba(139,61,44,.1); }.organization-settings { margin: 10px 0 6px; }.organization-members { margin-top: 9px !important; }.relationship-keyword { white-space: nowrap; }
774
+ .race-settings { display: flex; flex-wrap: wrap; gap: 5px; margin: 10px 0 6px; }.race-settings .pill { margin: 0; }.race-members { margin-top: 9px !important; }
775
+ .config-section { margin-top: 28px; padding-top: 24px; border-top: 1px solid var(--line); }
776
+ .config-section:first-child { margin-top: 0; padding-top: 0; border-top: 0; }
777
+ .platform-system-prompt-section { margin-bottom: 36px; }
778
+ .task-auto-run-panel {
779
+ display: grid;
780
+ gap: 12px;
781
+ margin-bottom: 22px;
782
+ padding: 14px;
783
+ border: 1px solid var(--line);
784
+ border-radius: 5px;
785
+ background: var(--surface-soft);
786
+ }
787
+ .task-auto-run-copy { display: grid; gap: 4px; }
788
+ .task-auto-run-copy strong { font-size: 13px; }
789
+ .task-auto-run-copy small { color: var(--muted); font-size: 10px; line-height: 1.5; }
790
+ .task-auto-run-controls {
791
+ display: flex;
792
+ flex-wrap: wrap;
793
+ align-items: end;
794
+ gap: 10px 12px;
795
+ }
796
+ .task-auto-run-controls label {
797
+ display: grid;
798
+ gap: 4px;
799
+ color: var(--muted);
800
+ font-size: 10px;
801
+ }
802
+ .task-auto-run-controls input[type="number"] {
803
+ width: 88px;
804
+ min-height: 32px;
805
+ padding: 6px 8px;
806
+ font-size: 12px;
807
+ }
808
+ .task-auto-run-controls .checkbox-field {
809
+ align-self: center;
810
+ margin: 0;
811
+ }
812
+ .task-auto-run-meta { margin: 0; color: var(--muted); font-size: 10px; }
813
+ .task-row-actions { display: flex; flex-wrap: wrap; gap: 6px; }
814
+ .task-detail { display: grid; gap: 12px; }
815
+ .task-detail p, .task-detail div { margin: 0; font-size: 12px; line-height: 1.55; }
816
+ .task-detail ul { margin: 6px 0 0; padding-left: 18px; }
817
+ .task-detail-result {
818
+ max-height: 220px;
819
+ overflow: auto;
820
+ margin: 6px 0 0;
821
+ padding: 10px;
822
+ border: 1px solid var(--line);
823
+ border-radius: 4px;
824
+ background: var(--surface);
825
+ font-size: 10px;
826
+ white-space: pre-wrap;
827
+ }
828
+ .config-section-header { display: flex; align-items: flex-end; justify-content: space-between; margin-bottom: 14px; }
829
+ .config-section-header h2 { margin: 0 0 6px; font-size: 18px; font-weight: 600; }
830
+ .config-section-header p { margin: 0; color: var(--muted); font-size: 11px; }
831
+ .ai-agent-tools { display: grid; gap: 8px; }
832
+ .ai-agent-tools label { display: grid; grid-template-columns: 18px minmax(0, 1fr); gap: 8px; align-items: start; color: var(--muted); font-size: 11px; line-height: 1.45; }
833
+ .ai-agent-tools input { width: auto; margin-top: 2px; }
834
+ .ai-agent-tools strong { color: var(--ink); font-size: 12px; font-weight: 600; }
835
+ .ai-agent-tools small { display: block; margin-top: 2px; font-size: 10px; }
836
+ .default-model-select { min-width: 260px; padding: 7px 9px; font-size: 11px; }
837
+ .empty-state { padding: 70px 30px; text-align: center; color: var(--muted); border: 1px dashed var(--line); }
838
+ .empty-state b { display: block; color: var(--ink); margin-bottom: 8px; }
839
+ .timeline-list { position: relative; margin-left: 15px; border-left: 1px solid var(--line); }
840
+ .timeline-item { position: relative; padding: 0 0 28px 25px; }
841
+ .timeline-item::before { content: ""; position: absolute; left: -5px; top: 5px; width: 9px; height: 9px; border-radius: 50%; background: var(--accent); box-shadow: 0 0 0 5px var(--paper); }
842
+ .timeline-item h3 { margin: 4px 0 7px; }
843
+ .timeline-item p { margin: 0; color: var(--muted); font-size: 12px; line-height: 1.55; }
844
+ .table-list { width: 100%; border-collapse: collapse; font-size: 12px; }
845
+ .table-list th, .table-list td { padding: 12px 10px; border-bottom: 1px solid var(--line); text-align: left; vertical-align: top; }
846
+ .table-list th { color: var(--muted); font-weight: 400; font-size: 10px; text-transform: uppercase; letter-spacing: .1em; }
847
+ .danger-text { color: var(--accent); }
848
+ .timeline-tools { display: flex; justify-content: flex-end; gap: 8px; margin-bottom: 12px; }
849
+ .timeline-select { position: absolute; left: -33px; top: 0; }
850
+ .timeline-kanban { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(290px, 340px); gap: 14px; align-items: start; overflow-x: auto; padding: 3px 2px 18px; scroll-snap-type: x proximity; }
851
+ .timeline-lane { display: flex; max-height: calc(100vh - 250px); min-height: 420px; flex-direction: column; overflow: hidden; border: 1px solid var(--line); border-radius: 7px; background: color-mix(in srgb, var(--paper-deep) 42%, transparent); scroll-snap-align: start; }
852
+ .timeline-lane > header { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; padding: 14px 14px 10px; border-bottom: 1px solid var(--line); }
853
+ .timeline-lane > header h3 { margin: 3px 0 0; font-size: 16px; }.timeline-lane > header small { color: var(--accent); font-size: 9px; }
854
+ .timeline-track-menu { border: 1px solid var(--line); border-radius: 3px; padding: 5px 7px; background: transparent; font-size: 9px; }
855
+ .timeline-track-actions { display: flex; gap: 5px; }
856
+ .timeline-track-description { min-height: 40px; margin: 0; padding: 9px 14px; color: var(--muted); font-size: 10px; line-height: 1.45; }
857
+ .timeline-lane-events { display: grid; gap: 9px; align-content: start; flex: 1; overflow-y: auto; padding: 8px; }
858
+ .timeline-kanban-card { padding: 12px; border: 1px solid var(--line); border-radius: 5px; background: var(--panel); box-shadow: 0 5px 16px rgba(49,42,32,.06); }
859
+ .timeline-kanban-card h4 { margin: 8px 0 6px; font-size: 14px; }.timeline-kanban-card p { margin: 0; color: var(--muted); font-size: 11px; line-height: 1.5; }.timeline-kanban-card > span { display: block; margin-top: 7px; color: var(--muted); font-size: 9px; }
860
+ .timeline-card-meta { display: flex; gap: 7px; align-items: center; }.timeline-card-meta small { color: var(--accent); font-size: 9px; }
861
+ .timeline-lane-empty { padding: 34px 12px; border: 1px dashed var(--line); color: var(--muted); text-align: center; font-size: 10px; }
862
+ .timeline-add-event { margin: 8px; padding: 8px; border: 1px dashed var(--line); border-radius: 4px; background: transparent; color: var(--muted); font-size: 10px; }
863
+ .relationship-map-card { margin-bottom: 28px; overflow: hidden; border: 1px solid var(--line); border-radius: 6px; background: var(--surface-soft); }
864
+ .relationship-map-toolbar { display: flex; align-items: center; gap: 18px; padding: 13px 16px; border-bottom: 1px solid var(--line); }
865
+ .relationship-map-toolbar > div:first-child { display: grid; gap: 3px; }
866
+ .relationship-map-toolbar strong { font-size: 13px; }
867
+ .relationship-map-toolbar small { color: var(--muted); font-size: 9px; }
868
+ .relationship-map-toolbar .relationship-map-actions { display: flex; gap: 7px; margin-left: auto; }
869
+ .relationship-map-actions button { white-space: nowrap; }
870
+ .relationship-galaxy-button { display: inline-flex; align-items: center; gap: 6px; }
871
+ .relationship-galaxy-icon { width: 14px; height: 14px; flex: 0 0 auto; fill: none; stroke: currentColor; stroke-width: 1.55; stroke-linecap: round; stroke-linejoin: round; }
872
+ .relationship-map-legend { display: flex; flex-wrap: wrap; gap: 10px; }
873
+ .relationship-map-legend span { display: flex; align-items: center; gap: 4px; color: var(--muted); font-size: 9px; }
874
+ .relationship-map-legend i, .galaxy-legend i, .galaxy-detail li i { width: 8px; height: 8px; border-radius: 50%; background: #9aa5b5; }
875
+ .relationship-map-legend i.family, .galaxy-legend i.family, .galaxy-detail li i.family { background: #43e39a; }
876
+ .relationship-map-legend i.social, .galaxy-legend i.social, .galaxy-detail li i.social { background: #438cff; }
877
+ .relationship-map-legend i.emotional, .galaxy-legend i.emotional, .galaxy-detail li i.emotional { background: #ff5f69; }
878
+ .relationship-map-legend i.conflict, .galaxy-legend i.conflict, .galaxy-detail li i.conflict { background: #ffad42; }
879
+ .relationship-mindmap { position: relative; width: 100%; height: 490px; overflow: hidden; background: radial-gradient(circle at center, var(--surface), color-mix(in srgb, var(--paper-deep) 22%, transparent)); }
880
+ .relationship-mindmap-stage { position: absolute; inset: 0; width: 100%; height: 100%; transform-origin: 0 0; }
881
+ .relationship-mindmap svg { position: absolute; inset: 0; width: 100%; height: 100%; }
882
+ .mind-edge-hit { fill: none; stroke: transparent; stroke-width: 16px; pointer-events: stroke; cursor: pointer; }
883
+ .mind-edge-hit:focus-visible { outline: none; stroke: rgba(139,61,44,.16); }
884
+ .mind-edge { fill: none; stroke-width: var(--edge-width); opacity: var(--edge-opacity); pointer-events: none; transition: opacity .15s ease, stroke-width .15s ease, filter .15s ease; }
885
+ .mind-edge.family { stroke: #3e9b73; }.mind-edge.social { stroke: #3c70a8; }.mind-edge.emotional { stroke: #af5263; }.mind-edge.conflict { stroke: #c37535; }.mind-edge.uncertain { stroke: #8a857b; stroke-dasharray: 3 5; }
886
+ .mind-edge.is-pending { stroke-dasharray: 7 5; }.mind-edge.is-dimmed { opacity: .08; }.mind-edge.is-highlighted { opacity: .92; stroke-width: 3; }
887
+ .mind-edge.is-edge-selected { opacity: 1; stroke-width: 4; filter: drop-shadow(0 0 3px rgba(139,61,44,.45)); }
888
+ .mind-edge-label { fill: var(--muted); font-size: 10px; paint-order: stroke; stroke: var(--paper); stroke-width: 4px; pointer-events: none; transition: opacity .15s ease, fill .15s ease; }
889
+ .mind-edge-label.is-secondary-label { opacity: 0; }.mind-edge-label.is-dimmed { opacity: .05; }.mind-edge-label.is-edge-selected { opacity: 1; fill: var(--ink); font-weight: 700; }
890
+ .relationship-map-card.is-expanded .mind-edge-label { font-size: 14px; stroke-width: 6px; }
891
+ .mind-node { position: absolute; width: 96px; min-height: 40px; transform: translate(-50%, -50%); padding: 7px 9px; border: 1px solid var(--line); border-radius: 22px; background: var(--surface); box-shadow: 0 6px 18px rgba(0,0,0,.14); font-size: 10px; cursor: grab; touch-action: none; z-index: 2; transition: opacity .15s ease, transform .15s ease, box-shadow .15s ease; }
892
+ .mind-node:hover, .mind-node:focus-visible, .mind-node.is-selected { transform: translate(-50%, -50%) scale(1.08); border-color: var(--accent); box-shadow: 0 8px 23px rgba(139,61,44,.16); }
893
+ .mind-node.is-locked { box-shadow: 0 0 0 2px rgba(94,118,92,.2), 0 6px 18px rgba(49,42,32,.1); }.mind-node.is-dimmed { opacity: .16; }
894
+ .mind-node.is-edge-endpoint { opacity: 1; transform: translate(-50%, -50%) scale(1.1); border-color: var(--accent); box-shadow: 0 0 0 3px rgba(139,61,44,.16), 0 9px 26px rgba(139,61,44,.2); }
895
+ .mind-node.is-dragging { cursor: grabbing; z-index: 4; transition: none; }
896
+ .mindmap-more { position: absolute; right: 14px; bottom: 12px; border: 1px solid var(--line); border-radius: 15px; padding: 6px 10px; background: var(--surface-strong); color: var(--muted); font-size: 9px; }
897
+ .mind-edge-detail { position: absolute; z-index: 5; left: 16px; right: 16px; bottom: 14px; display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 10px; align-items: start; padding: 10px 12px; border: 1px solid var(--line); border-radius: 5px; background: var(--surface-strong); box-shadow: var(--shadow); font-size: 11px; }
898
+ .mind-edge-detail b { white-space: nowrap; }.mind-edge-detail span { color: var(--muted); line-height: 1.55; }
899
+ .relationship-empty-note { margin-top: -12px; padding: 12px 14px; border: 1px dashed var(--line); color: var(--muted); font-size: 11px; }
900
+ .relationship-map-dialog { position: relative; width: min(1400px, 96vw); max-width: none; height: min(900px, 92vh); max-height: none; padding: 0; border: 1px solid var(--line); border-radius: 7px; background: var(--panel); box-shadow: var(--shadow); }
901
+ .relationship-map-dialog::backdrop { background: rgba(34,30,25,.52); backdrop-filter: blur(3px); }
902
+ .relationship-map-floating-close { position: absolute; z-index: 6; top: 25px; right: 25px; width: 34px; height: 34px; border: 1px solid var(--line); border-radius: 50%; background: var(--surface-strong); color: var(--ink); font-size: 20px; }
903
+ .relationship-map-expanded-host { height: 100%; padding: 18px; }
904
+ .relationship-map-expanded-host .relationship-map-card { height: 100%; margin: 0; }
905
+ .relationship-map-expanded-host .relationship-map-toolbar { padding-right: 72px; }
906
+ .relationship-map-expanded-host .relationship-mindmap { height: calc(100% - 67px); min-height: 0; }
907
+ .relationship-network-card { border-color: #1c1c24; background: #12121a; box-shadow: none; }
908
+ .relationship-network-card .relationship-map-toolbar { min-height: 58px; border-color: #1c1c24; background: #12121a; color: #e8e8ef; }
909
+ .relationship-network-card .relationship-map-toolbar small { color: #7a7a88; }
910
+ .relationship-network-card .relationship-map-actions button { border-color: #2a2a36; background: transparent; color: #a8a8b4; }
911
+ .relationship-network-card .relationship-map-actions button:hover, .relationship-network-card .relationship-map-actions button:focus-visible { border-color: #4a4a58; background: #1a1a24; color: #f0f0f5; }
912
+ .relationship-network { height: min(68vh, 650px); min-height: 520px; contain: layout paint style; touch-action: none; cursor: grab; background: #12121a; }
913
+ .relationship-network.is-panning { cursor: grabbing; }
914
+ .relationship-network-stage { contain: layout paint style; will-change: transform; }
915
+ .relationship-network-stage.is-view-animating { transition: transform .34s cubic-bezier(.22,.78,.3,1); }
916
+ .relationship-network svg { overflow: visible; }
917
+ .relationship-network .mind-edge-hit {
918
+ stroke-width: 14px;
919
+ outline: none;
920
+ }
921
+ .relationship-network .mind-edge-hit:focus,
922
+ .relationship-network .mind-edge-hit:focus-visible {
923
+ outline: none;
924
+ stroke: transparent;
925
+ }
926
+ .relationship-network .mind-edge,
927
+ .relationship-network .obsidian-edge { stroke: rgba(255,255,255,.26); stroke-width: 1px; opacity: 1; transition: opacity .12s ease, stroke .12s ease; }
928
+ .relationship-network .mind-edge.family,
929
+ .relationship-network .mind-edge.social,
930
+ .relationship-network .mind-edge.emotional,
931
+ .relationship-network .mind-edge.conflict,
932
+ .relationship-network .mind-edge.uncertain { stroke: rgba(255,255,255,.26); stroke-dasharray: none; }
933
+ .relationship-network .mind-edge.is-pending { stroke: rgba(255,255,255,.18); stroke-dasharray: 4 6; }
934
+ .relationship-network .mind-edge.is-dimmed { opacity: .06; }
935
+ .relationship-network .mind-edge.is-highlighted { stroke: rgba(255,255,255,.72); stroke-width: 1.35px; opacity: 1; }
936
+ .relationship-network .mind-edge.is-edge-selected { stroke: rgba(220,220,235,.88); stroke-width: 1.6px; opacity: 1; }
937
+ .relationship-network .mind-edge-label {
938
+ fill: rgba(230,230,240,.88);
939
+ stroke: #12121a;
940
+ stroke-width: 2.5px;
941
+ font-size: 7px;
942
+ font-weight: 400;
943
+ letter-spacing: .01em;
944
+ opacity: 1;
945
+ paint-order: stroke;
946
+ }
947
+ .relationship-map-card.is-expanded .relationship-network .mind-edge-label {
948
+ font-size: 8px;
949
+ stroke-width: 3px;
950
+ }
951
+ .relationship-network .mind-node,
952
+ .relationship-network .obsidian-node {
953
+ width: var(--node-size);
954
+ height: var(--node-size);
955
+ min-height: 0;
956
+ padding: 0;
957
+ border: 0;
958
+ border-radius: 50%;
959
+ background: var(--node-color, #8b9099);
960
+ color: rgba(245,245,250,.88);
961
+ box-shadow: 0 0 8px var(--node-glow, rgba(139,144,153,.42));
962
+ font-family: "SF Pro Text", "Segoe UI", "Helvetica Neue", sans-serif;
963
+ font-size: 9px;
964
+ font-weight: 400;
965
+ line-height: 1;
966
+ transition: opacity .12s ease, transform .12s ease, box-shadow .12s ease;
967
+ will-change: left, top;
968
+ }
969
+ .relationship-network .mind-node span {
970
+ position: absolute;
971
+ left: 50%;
972
+ top: calc(100% + 4px);
973
+ display: block;
974
+ width: max-content;
975
+ max-width: 96px;
976
+ overflow: hidden;
977
+ transform: translateX(-50%);
978
+ text-overflow: ellipsis;
979
+ white-space: nowrap;
980
+ pointer-events: none;
981
+ color: rgba(235,235,245,.78);
982
+ font-size: 9px;
983
+ font-weight: 400;
984
+ letter-spacing: .01em;
985
+ text-shadow: 0 1px 2px rgba(0,0,0,.65);
986
+ }
987
+ .relationship-network .mind-node:hover,
988
+ .relationship-network .mind-node:focus-visible,
989
+ .relationship-network .mind-node.is-hovered {
990
+ transform: translate(-50%, -50%) scale(1.28);
991
+ outline: none;
992
+ z-index: 6;
993
+ box-shadow: 0 0 10px rgba(255,255,255,.5), 0 0 18px var(--node-glow, rgba(139,144,153,.55));
994
+ }
995
+ .relationship-network .mind-node:hover span,
996
+ .relationship-network .mind-node:focus-visible span,
997
+ .relationship-network .mind-node.is-hovered span,
998
+ .relationship-network .mind-node.is-selected span,
999
+ .relationship-network .mind-node.is-related span,
1000
+ .relationship-network .mind-node.is-edge-endpoint span { color: rgba(255,255,255,.95); }
1001
+ .relationship-network .mind-node.is-selected {
1002
+ transform: translate(-50%, -50%) scale(1.32);
1003
+ z-index: 5;
1004
+ box-shadow: 0 0 10px rgba(255,255,255,.55), 0 0 20px var(--node-glow, rgba(139,144,153,.6));
1005
+ }
1006
+ .relationship-network .mind-node.is-related { opacity: 1; }
1007
+ .relationship-network .mind-node.is-dimmed { opacity: .14; box-shadow: none; }
1008
+ .relationship-network .mind-node.is-isolated { opacity: .28; }
1009
+ .relationship-network .mind-node.is-edge-endpoint {
1010
+ opacity: 1;
1011
+ transform: translate(-50%, -50%) scale(1.3);
1012
+ box-shadow: 0 0 10px rgba(255,255,255,.5), 0 0 18px var(--node-glow, rgba(139,144,153,.55));
1013
+ }
1014
+ .relationship-network[data-interaction="dragging"] .mind-edge,
1015
+ .relationship-network[data-interaction="dragging"] .mind-node,
1016
+ .relationship-network[data-interaction="panning"] .mind-edge,
1017
+ .relationship-network[data-interaction="panning"] .mind-node {
1018
+ transition: none !important;
1019
+ }
1020
+ .relationship-network[data-interaction="dragging"] .mind-node:not(.is-dragging):not(.is-drag-neighbor) {
1021
+ pointer-events: none;
1022
+ }
1023
+ .relationship-network[data-interaction="dragging"] .mind-node:not(.is-dragging):not(.is-drag-neighbor):not(.is-related):not(.is-selected) {
1024
+ box-shadow: none;
1025
+ }
1026
+ .relationship-network .mind-node.is-dragging {
1027
+ cursor: grabbing;
1028
+ transform: translate(-50%, -50%) scale(1.36);
1029
+ transition: none;
1030
+ z-index: 8;
1031
+ will-change: left, top;
1032
+ box-shadow: 0 0 10px rgba(255,255,255,.6), 0 0 18px var(--node-glow, rgba(139,144,153,.6));
1033
+ }
1034
+ .relationship-network .mind-node.is-drag-neighbor {
1035
+ opacity: 1;
1036
+ z-index: 3;
1037
+ will-change: left, top;
1038
+ }
1039
+ .relationship-network .mind-node.is-settling { animation: relationship-node-settle .18s ease-out; }
1040
+ .relationship-network-focus, .relationship-network-help { position: absolute; z-index: 6; color: #7a7a88; pointer-events: none; }
1041
+ .relationship-network-focus { top: 14px; left: 16px; display: grid; gap: 3px; }
1042
+ .relationship-network-focus strong { color: #c8c8d4; font-size: 10px; font-weight: 500; }
1043
+ .relationship-network-focus span { color: #6a6a78; font-size: 9px; }
1044
+ .relationship-network-help { left: 16px; bottom: 13px; font-size: 9px; }
1045
+ .relationship-network .mind-edge-detail { left: 50%; right: auto; bottom: 38px; width: min(680px, calc(100% - 40px)); transform: translateX(-50%); border-color: #2a2a36; background: rgba(18,18,26,.94); color: #e2e2ea; box-shadow: none; }
1046
+ .relationship-network .mind-edge-detail span { color: #9a9aa8; }
1047
+ .relationship-map-expanded-host .relationship-network { height: calc(100% - 63px); min-height: 0; }
1048
+ .relationship-map-dialog { background: #12121a; border-color: #1c1c24; }
1049
+ .relationship-map-expanded-host { background: #12121a; }
1050
+ @keyframes relationship-node-settle { from { transform: translate(-50%, -50%) scale(1.36); } to { transform: translate(-50%, -50%) scale(1.32); } }
1051
+ @media (prefers-reduced-motion: reduce) { .relationship-network .mind-node, .relationship-network-stage { transition-duration: .01ms; animation-duration: .01ms; } }
1052
+
1053
+ .outline-summary { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; margin-bottom: 32px; }
1054
+ .outline-summary article { display: grid; padding: 17px; border: 1px solid var(--line); background: var(--surface-soft); }
1055
+ .outline-summary strong { font-size: 26px; }.outline-summary span { color: var(--muted); font-size: 10px; }
1056
+ .planning-section + .planning-section { margin-top: 42px; }.section-title { display: flex; justify-content: space-between; margin-bottom: 15px; }.section-title h2 { margin: 0; font-size: 21px; }
1057
+ .foreshadow-card.is-overdue { border-color: #b55743; box-shadow: inset 3px 0 #b55743; }.foreshadow-links { margin-top: 13px; }
1058
+ .outline-list { display: grid; gap: 8px; }.outline-row { display: grid; grid-template-columns: minmax(150px, 1.1fr) repeat(3, minmax(130px, 1fr)) auto; gap: 16px; align-items: start; padding: 15px; border: 1px solid var(--line); background: var(--surface-soft); }
1059
+ .outline-row small { color: var(--accent); font-size: 9px; }.outline-row h3 { margin: 4px 0 0; font-size: 14px; }.outline-row b { font-size: 10px; }.outline-row p { margin: 5px 0 0; color: var(--muted); font-size: 10px; line-height: 1.45; white-space: pre-wrap; }
1060
+ .outline-row.is-complete { opacity: .66; }.outline-actions { display: grid; gap: 7px; justify-items: end; }.outline-actions span { color: var(--accent); font-size: 9px; }.outline-actions button { border: 1px solid var(--line); background: transparent; border-radius: 3px; padding: 5px 8px; font-size: 9px; }
1061
+
1062
+ .galaxy-dialog { width: 100vw; max-width: none; height: 100dvh; max-height: none; margin: 0; padding: 0; border: 0; background: #05070d; color: #eef6ff; }
1063
+ .galaxy-dialog::backdrop { background: #05070d; }.galaxy-shell { position: relative; width: 100%; height: 100%; overflow: hidden; touch-action: none; background: #05070d; cursor: grab; contain: strict; }
1064
+ .galaxy-shell.is-rotating-camera { cursor: grabbing; }.galaxy-background, .galaxy-graph, .galaxy-node-layer { position: absolute; inset: 0; width: 100%; height: 100%; }.galaxy-background { opacity: 1; transition: opacity .2s ease; }.galaxy-background.hidden-stars { opacity: .96; }
1065
+ .galaxy-graph { z-index: 2; }.galaxy-node-layer { z-index: 3; pointer-events: none; }
1066
+ .galaxy-node { --node-size: 12px; position: absolute; left: 0; top: 0; display: grid; grid-template-rows: var(--node-size) auto; justify-items: center; align-items: start; gap: 5px; padding: 8px; border: 0; background: transparent; color: #edf7ff; cursor: grab; touch-action: none; pointer-events: auto; transform-origin: center; opacity: var(--depth-opacity, 1); will-change: transform, opacity; }
1067
+ .galaxy-node i { width: var(--node-size); height: var(--node-size); border-radius: 50%; background: radial-gradient(circle at 34% 30%, #fff 0 7%, color-mix(in srgb, var(--node-color) 54%, #fff) 19%, var(--node-color) 51%, color-mix(in srgb, var(--node-color) 52%, #07101f) 100%); box-shadow: 0 0 4px rgba(255,255,255,.88), 0 0 calc(7px + var(--node-glow) * 11px) var(--node-color), 0 0 calc(15px + var(--node-glow) * 25px) color-mix(in srgb, var(--node-color) 72%, transparent); filter: brightness(var(--node-brightness)); transition: filter .18s ease, box-shadow .18s ease; }.galaxy-node span { opacity: 0; max-width: 150px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; padding: 3px 6px; border-radius: 4px; background: rgba(5,7,13,.68); font-size: 10px; text-align: center; text-shadow: 0 1px 3px #000; transition: opacity .14s ease; }
1068
+ .galaxy-node.show-label span, .galaxy-node:hover span, .galaxy-node:focus-visible span, .galaxy-node.is-selected span, .galaxy-node.is-related span, .galaxy-node.is-edge-endpoint span { opacity: 1; }.galaxy-node.is-selected i { background: #fff4bd; box-shadow: 0 0 5px #fff, 0 0 18px #ffc86b, 0 0 42px rgba(255,173,66,.82); }.galaxy-node.is-related i { background: #d8f4ff; box-shadow: 0 0 4px #fff, 0 0 15px #438cff, 0 0 28px rgba(67,140,255,.56); }.galaxy-node.is-edge-endpoint i { background: #fff; box-shadow: 0 0 6px #fff, 0 0 22px #6fcaff, 0 0 48px rgba(67,140,255,.92); }.galaxy-node.is-dimmed { opacity: .16; }.galaxy-node.is-selected, .galaxy-node.is-related, .galaxy-node.is-edge-endpoint { z-index: 2; }
1069
+ .galaxy-node.is-dragging { cursor: grabbing; z-index: 6; }
1070
+ .galaxy-close { position: fixed; z-index: 8; top: 22px; right: 25px; width: 42px; height: 42px; border: 1px solid rgba(255,255,255,.22); border-radius: 50%; background: rgba(5,7,13,.62); color: #fff; font-size: 25px; }
1071
+ .galaxy-stats { position: fixed; z-index: 7; left: 22px; bottom: 20px; color: rgba(235,245,255,.82); font-size: 11px; }
1072
+ .galaxy-controls { position: fixed; z-index: 7; right: 23px; top: 50%; display: grid; width: 128px; gap: 7px; transform: translateY(-50%); padding: 10px; border: 1px solid rgba(255,255,255,.12); border-radius: 8px; background: rgba(5,7,13,.66); backdrop-filter: blur(12px); }
1073
+ .galaxy-controls button { border: 1px solid rgba(255,255,255,.14); border-radius: 5px; padding: 7px; background: rgba(255,255,255,.05); color: #dcecff; font-size: 9px; }
1074
+ .galaxy-legend { position: fixed; z-index: 7; right: 22px; bottom: 18px; display: grid; grid-template-columns: 1fr 1fr; gap: 7px 12px; margin: 0; padding: 11px; list-style: none; border: 1px solid rgba(255,255,255,.12); border-radius: 7px; background: rgba(5,7,13,.66); color: rgba(235,245,255,.8); font-size: 9px; }.galaxy-legend li { display: flex; align-items: center; gap: 5px; }
1075
+ .galaxy-detail { position: fixed; z-index: 7; left: 22px; top: 22px; width: min(300px, 30vw); max-height: 55vh; overflow: auto; padding: 15px; border: 1px solid rgba(255,255,255,.14); border-radius: 8px; background: rgba(5,7,13,.74); backdrop-filter: blur(14px); }.galaxy-detail strong, .galaxy-detail small { display: block; }.galaxy-detail strong { font-size: 18px; }.galaxy-detail small, .galaxy-detail p { color: rgba(220,235,250,.65); font-size: 9px; }.galaxy-detail ul { display: grid; gap: 7px; padding: 0; list-style: none; font-size: 9px; }.galaxy-detail li { display: flex; align-items: center; gap: 6px; }
1076
+ .sr-only { position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }
1077
+
1078
+ .ai-heading { display: flex; align-items: center; gap: 8px; padding-bottom: 17px; border-bottom: 1px solid var(--line); }
1079
+ .ai-heading > div { display: flex; gap: 8px; align-items: center; }
1080
+ .ai-heading small { margin-left: auto; color: var(--muted); font-size: 10px; }
1081
+ .status-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--green); box-shadow: 0 0 0 3px rgba(94,118,92,.14); }
1082
+ .ai-conversation-toolbar { display: grid; grid-template-columns: minmax(0, 1fr) auto auto; gap: 5px; align-items: center; padding: 10px 0; }
1083
+ .ai-conversation-toolbar > span { min-width: 0; overflow: hidden; color: var(--muted); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
1084
+ .ai-conversation-toolbar button { padding: 5px 7px; border: 1px solid var(--line); border-radius: 4px; background: transparent; color: var(--muted); font-size: 9px; }
1085
+ .ai-conversation-toolbar button:hover, .ai-conversation-toolbar button[aria-expanded="true"] { background: var(--paper-deep); color: var(--ink); }
1086
+ .ai-history-dialog-body { min-height: min(360px, 55vh); max-height: 65vh; overflow-y: auto; padding: 18px 24px 24px; }
1087
+ .ai-history-list { display: grid; gap: 8px; }
1088
+ .ai-history-item { display: grid; gap: 5px; width: 100%; min-width: 0; padding: 14px 16px; border: 1px solid var(--line); border-radius: 5px; background: var(--surface-soft); text-align: left; }
1089
+ .ai-history-item:hover { border-color: var(--accent); background: var(--paper-deep); }
1090
+ .ai-history-item.is-active { border-color: color-mix(in srgb, var(--accent) 58%, var(--line)); background: var(--row-active); box-shadow: inset 3px 0 var(--accent); }
1091
+ .ai-history-item strong, .ai-history-item small { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1092
+ .ai-history-item strong { font-size: 14px; font-weight: 600; }.ai-history-item small { color: var(--muted); font-size: 10px; }
1093
+ .ai-history-empty { margin: 0; padding: 48px 12px; color: var(--muted); font-size: 12px; text-align: center; }
1094
+ .field-label { display: grid; gap: 6px; color: var(--muted); font-size: 10px; margin: 14px 0 10px; }
1095
+ .field-label select { padding: 8px; font-size: 12px; }
1096
+ .book-summary-context-percent-field { width: min(100%, 280px); }
1097
+ .context-compact-threshold-field { width: min(100%, 280px); }
1098
+ .book-summary-context-percent-field input, .context-compact-threshold-field input { min-height: 40px; padding: 8px 12px; font-size: 15px; font-family: var(--font-latin), monospace; }
1099
+ .field-label textarea {
1100
+ width: 100%;
1101
+ min-height: 140px;
1102
+ padding: 12px 14px;
1103
+ color: var(--ink);
1104
+ font-size: 14px;
1105
+ line-height: 1.65;
1106
+ resize: vertical;
1107
+ }
1108
+ .quick-actions { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; }
1109
+ .quick-actions button { border: 1px solid var(--line); background: transparent; border-radius: 3px; padding: 7px; color: var(--muted); font-size: 10px; }
1110
+ .quick-actions button:hover { color: var(--ink); background: var(--paper-deep); }
1111
+ .ai-feed { flex: 1; min-height: 0; overflow-y: auto; margin: 16px -5px; padding: 0 5px; }
1112
+ .assistant-message, .user-message { position: relative; margin-bottom: 12px; padding: 12px 13px; border-radius: 5px; font-size: 12px; line-height: 1.55; }
1113
+ .assistant-message { background: var(--paper-deep); }
1114
+ .assistant-message.has-message-actions, .user-message.has-message-actions { margin-bottom: 42px; }
1115
+ .user-message { margin-left: 24px; background: var(--accent); color: #fff; }
1116
+ .assistant-message > .message-heading, .user-message > .message-heading { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 5px; opacity: .65; font-size: 9px; }
1117
+ .message-heading > span { letter-spacing: .12em; }.message-heading time { flex: 0 0 auto; font-variant-numeric: tabular-nums; letter-spacing: .03em; }
1118
+ .message-body { min-width: 0; overflow-wrap: anywhere; }
1119
+ .message-card-actions { position: absolute; right: 0; bottom: -31px; display: flex; align-items: center; gap: 12px; height: 24px; }
1120
+ .message-card-actions button { display: inline-flex; align-items: center; gap: 4px; min-width: 0; padding: 3px 2px; border: 0; background: transparent; color: var(--muted); font-size: 9px; }
1121
+ .message-card-actions button:hover, .message-card-actions button:focus-visible { color: var(--accent-dark); }
1122
+ .message-action-icon { width: 14px; height: 14px; fill: none; stroke: currentColor; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
1123
+ .message-body > :first-child { margin-top: 0; }.message-body > :last-child { margin-bottom: 0; }
1124
+ .message-body p { margin: 0 0 10px; white-space: normal; }
1125
+ .message-body h1, .message-body h2, .message-body h3, .message-body h4 { margin: 14px 0 7px; color: inherit; line-height: 1.35; }
1126
+ .message-body h1 { font-size: 17px; }.message-body h2 { font-size: 15px; }.message-body h3, .message-body h4 { font-size: 13px; }
1127
+ .message-body ul, .message-body ol { margin: 7px 0 11px; padding-left: 21px; }.message-body li { margin: 4px 0; }
1128
+ .message-body li.markdown-depth-1 { margin-left: 14px; }.message-body li.markdown-depth-2 { margin-left: 28px; }.message-body li.markdown-depth-3 { margin-left: 42px; }
1129
+ .message-body blockquote { margin: 9px 0; padding: 6px 9px; border-left: 3px solid currentColor; background: rgba(255,255,255,.35); opacity: .82; }
1130
+ .message-body pre { max-width: 100%; overflow-x: auto; margin: 9px 0; padding: 9px 10px; border-radius: 4px; background: #292724; color: #f6f1e7; font: 10px/1.55 var(--font-latin), monospace; white-space: pre; }
1131
+ .message-body code { padding: 1px 4px; border-radius: 3px; background: rgba(49,42,32,.1); font-family: var(--font-latin), monospace; font-size: .9em; }.message-body pre code { padding: 0; background: transparent; color: inherit; }
1132
+ .message-body .markdown-table-scroll { max-width: 100%; overflow-x: auto; margin: 9px 0; border: 1px solid var(--line); border-radius: 4px; overscroll-behavior-inline: contain; scrollbar-color: var(--muted) var(--surface-soft); scrollbar-gutter: stable; scrollbar-width: thin; }
1133
+ .message-body .markdown-table-scroll::-webkit-scrollbar { height: 8px; }.message-body .markdown-table-scroll::-webkit-scrollbar-track { background: var(--surface-soft); }.message-body .markdown-table-scroll::-webkit-scrollbar-thumb { border-radius: 4px; background: var(--muted); }
1134
+ .message-body .markdown-table-scroll:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
1135
+ .message-body .markdown-table-scroll table { width: max-content; min-width: 100%; border-collapse: collapse; }
1136
+ .message-body .markdown-table-scroll th, .message-body .markdown-table-scroll td { padding: 7px 9px; border-right: 1px solid var(--line); border-bottom: 1px solid var(--line); overflow-wrap: normal; white-space: nowrap; }
1137
+ .message-body .markdown-table-scroll th:last-child, .message-body .markdown-table-scroll td:last-child { border-right: 0; }
1138
+ .message-body .markdown-table-scroll tbody tr:last-child td { border-bottom: 0; }
1139
+ .message-body .markdown-table-scroll th { background: var(--surface-soft); font-weight: 600; }
1140
+ .message-body .markdown-table-scroll .markdown-align-left { text-align: left; }.message-body .markdown-table-scroll .markdown-align-center { text-align: center; }.message-body .markdown-table-scroll .markdown-align-right { text-align: right; }
1141
+ .message-body a { color: var(--accent-dark); text-decoration: underline; text-underline-offset: 2px; }.user-message .message-body a { color: inherit; }
1142
+ .message-body hr { margin: 12px 0; border: 0; border-top: 1px solid currentColor; opacity: .22; }
1143
+ .message-meta { margin-top: 8px; color: var(--muted); font-size: 9px; }
1144
+ .ai-process-details { margin: 0 0 10px; overflow: hidden; border: 1px solid var(--line); border-radius: 5px; background: color-mix(in srgb, var(--surface-soft) 82%, transparent); }
1145
+ .ai-process-details > summary { display: flex; align-items: center; justify-content: space-between; gap: 9px; padding: 8px 10px; color: var(--muted); cursor: pointer; font-size: 10px; list-style: none; }
1146
+ .ai-process-details > summary::-webkit-details-marker { display: none; }
1147
+ .ai-process-details > summary::before { content: ""; width: 6px; height: 6px; flex: 0 0 auto; border: 1px solid currentColor; border-radius: 50%; }
1148
+ .is-streaming .ai-process-details[open] > summary::before { background: var(--accent); animation: ai-process-pulse 1.2s ease-in-out infinite; }
1149
+ .ai-process-details > summary > span { flex: 1 1 auto; color: var(--ink); font-weight: 600; }
1150
+ .ai-process-details > summary > small { flex: 0 0 auto; font: 9px/1.4 var(--font-latin), monospace; }
1151
+ .ai-process-details[open] > summary { border-bottom: 1px solid var(--line); }
1152
+ .ai-process-list { display: grid; gap: 7px; padding: 9px; }
1153
+ .ai-process-step { display: grid; min-width: 0; gap: 5px; }
1154
+ .ai-process-step > small { color: var(--muted); font: 8px/1.4 var(--font-latin), monospace; }
1155
+ .ai-process-step-body { max-height: 220px; overflow: auto; padding: 8px 9px; border-left: 2px solid color-mix(in srgb, var(--accent) 46%, var(--line)); background: var(--paper-deep); color: var(--muted); font-size: 10px; }
1156
+ .ai-process-intermediate-step .ai-process-step-body { border-left-color: var(--muted); }
1157
+ .ai-process-tool-step { padding-top: 1px; }
1158
+ @keyframes ai-process-pulse { 0%, 100% { opacity: .45; transform: scale(.8); } 50% { opacity: 1; transform: scale(1); } }
1159
+ @media (prefers-reduced-motion: reduce) { .is-streaming .ai-process-details[open] > summary::before { animation: none; } }
1160
+ .ai-tool-call-list { display: grid; gap: 5px; margin-top: 10px; }
1161
+ .ai-tool-call-summary { display: flex; align-items: center; justify-content: space-between; width: 100%; min-width: 0; padding: 7px 9px; border: 1px solid var(--line); border-radius: 4px; background: var(--surface-soft); color: var(--muted); font: 9px/1.4 var(--font-latin), monospace; text-align: left; }
1162
+ .ai-tool-call-summary::after { content: "查看详情"; flex: 0 0 auto; margin-left: 8px; color: var(--accent-dark); }
1163
+ .ai-tool-call-summary:hover, .ai-tool-call-summary:focus-visible { border-color: color-mix(in srgb, var(--accent) 55%, var(--line)); background: var(--surface); color: var(--ink); }
1164
+ .ai-tool-call-summary.is-failed { border-color: color-mix(in srgb, var(--accent) 55%, var(--line)); color: var(--accent-dark); }
1165
+ .ai-tool-call-dialog { width: min(720px, 92vw); }
1166
+ .ai-tool-call-detail { display: grid; grid-template-columns: minmax(0, 1fr); gap: 16px; padding: 18px 24px 24px; }
1167
+ .ai-tool-call-info { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px 18px; margin: 0; padding: 12px; border: 1px solid var(--line); border-radius: 5px; background: var(--surface-soft); }
1168
+ .ai-tool-call-info > div { min-width: 0; }
1169
+ .ai-tool-call-info dt { margin-bottom: 4px; color: var(--muted); font-size: 9px; }
1170
+ .ai-tool-call-info dd { min-width: 0; margin: 0; color: var(--ink); font-size: 11px; line-height: 1.5; overflow-wrap: anywhere; }
1171
+ .ai-tool-call-info code, .ai-tool-call-info time { font-family: var(--font-latin), monospace; }
1172
+ .ai-tool-call-description { grid-column: 1 / -1; }
1173
+ .ai-tool-call-detail section { min-width: 0; }
1174
+ .ai-tool-call-detail h3 { margin: 0 0 7px; color: var(--muted); font-size: 10px; font-weight: 600; }
1175
+ .ai-tool-call-detail pre { min-height: 120px; max-height: 32vh; overflow: auto; margin: 0; padding: 12px; border: 1px solid var(--line); border-radius: 5px; background: var(--paper-deep); color: var(--ink); font: 10px/1.55 var(--font-latin), monospace; white-space: pre-wrap; word-break: break-word; }
1176
+ .ai-tool-call-detail section:last-child pre { min-height: 180px; }
1177
+ @media (max-width: 680px) { .ai-tool-call-info { grid-template-columns: minmax(0, 1fr); }.ai-tool-call-description { grid-column: auto; }.ai-tool-call-detail pre { min-height: 100px; max-height: 26vh; }.ai-tool-call-detail section:last-child pre { min-height: 140px; } }
1178
+ .guard-card { margin-top: 10px; padding: 9px 10px; border: 1px solid var(--line); border-left: 3px solid var(--green); border-radius: 4px; background: var(--surface-soft); }
1179
+ .guard-card.warning { border-left-color: #c07b31; }.guard-card.failed { border-left-color: var(--accent); }
1180
+ .guard-card strong { display: block; margin-bottom: 5px; font-size: 10px; }.guard-card p { margin: 4px 0; color: var(--muted); font-size: 9px; line-height: 1.45; }.guard-card p b { color: var(--ink); }
1181
+ .message-actions { display: flex; gap: 7px; margin-top: 10px; }
1182
+ .message-actions button { border: 1px solid rgba(139,61,44,.25); background: var(--surface); color: var(--accent-dark); font-size: 10px; padding: 5px 8px; border-radius: 3px; }
1183
+ .prompt-box { border-top: 1px solid var(--line); padding-top: 12px; }
1184
+ .ai-context-warning { display: grid; gap: 9px; margin-bottom: 9px; padding: 10px; border: 1px solid color-mix(in srgb, #bf6a35 58%, var(--line)); border-radius: 5px; background: color-mix(in srgb, #bf6a35 10%, var(--surface)); }
1185
+ .ai-context-warning.hidden { display: none; }
1186
+ .ai-context-warning strong { display: block; color: var(--ink); font-size: 11px; }
1187
+ .ai-context-warning p { margin: 3px 0 0; color: var(--muted); font-size: 9px; line-height: 1.5; }
1188
+ .ai-context-warning > div:last-child { display: flex; flex-wrap: wrap; gap: 6px; }
1189
+ .ai-context-warning button { padding: 5px 7px; border: 1px solid var(--line); border-radius: 4px; background: var(--surface); color: var(--muted); font-size: 9px; }
1190
+ .ai-context-warning button:first-child { border-color: var(--accent); background: var(--accent); color: #fff; }
1191
+ .ai-context-warning button:hover, .ai-context-warning button:focus-visible { border-color: var(--accent); color: var(--accent-dark); }
1192
+ .ai-context-warning button:first-child:hover, .ai-context-warning button:first-child:focus-visible { background: var(--accent-dark); color: #fff; }
1193
+ .prompt-options { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; margin-bottom: 7px; }
1194
+ .prompt-options select { padding: 6px; color: var(--muted); font-size: 10px; }
1195
+ .prompt-model-field { margin: 0 0 7px; }
1196
+ .prompt-model-field select { padding: 6px; color: var(--muted); font-size: 10px; }
1197
+ .prompt-composer { position: relative; }
1198
+ .ai-mention-menu { position: absolute; z-index: 20; left: 0; right: 0; bottom: calc(100% + 6px); max-height: 230px; overflow-y: auto; padding: 6px; border: 1px solid var(--line); border-radius: 6px; background: var(--panel); box-shadow: 0 12px 34px rgba(49,42,32,.18); }
1199
+ .ai-mention-option { display: grid; grid-template-columns: 34px minmax(0, 1fr); gap: 8px; width: 100%; padding: 7px 8px; border: 0; border-radius: 4px; background: transparent; text-align: left; }
1200
+ .ai-mention-option:hover, .ai-mention-option:focus-visible { background: var(--paper-deep); }
1201
+ .ai-mention-option small { color: var(--accent); font-size: 8px; }
1202
+ .ai-mention-option strong { overflow: hidden; font-size: 10px; font-weight: 500; text-overflow: ellipsis; white-space: nowrap; }
1203
+ .ai-mention-empty { margin: 0; padding: 10px; color: var(--muted); font-size: 10px; text-align: center; }
1204
+ .ai-prompt { display: block; width: 100%; min-height: 104px; margin: 0; padding: 10px 10px 44px; overflow-y: auto; border: 1px solid var(--line); border-radius: 4px; background: var(--surface); color: var(--ink); font-size: 12px; line-height: 1.45; white-space: pre-wrap; word-break: break-word; cursor: text; }
1205
+ .ai-prompt:empty::before { color: var(--muted); content: attr(data-placeholder); pointer-events: none; }
1206
+ .ai-prompt:focus { border-color: #a77768; box-shadow: 0 0 0 3px rgba(167,119,104,.12); outline: 0; }
1207
+ .ai-prompt-reference { display: inline-flex; align-items: center; gap: 4px; max-width: 100%; margin: 0 2px; padding: 2px 4px 2px 7px; border: 1px solid color-mix(in srgb, var(--accent) 48%, var(--line)); border-radius: 999px; background: color-mix(in srgb, var(--accent) 13%, var(--paper)); color: var(--accent-dark); font-size: 10px; line-height: 1.25; vertical-align: baseline; }
1208
+ .ai-prompt-reference > span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1209
+ .ai-prompt-reference button { width: 16px; height: 16px; padding: 0; border: 0; border-radius: 50%; background: transparent; color: inherit; font: 14px/1 var(--font-latin), monospace; }
1210
+ .ai-prompt-reference button:hover, .ai-prompt-reference button:focus-visible { background: color-mix(in srgb, var(--accent) 16%, transparent); color: var(--accent); }
1211
+ .prompt-composer-actions { position: absolute; right: 8px; bottom: 8px; display: flex; gap: 6px; align-items: center; }
1212
+ .ai-context-meter { --context-usage: 0; --context-meter-color: var(--green); position: relative; display: grid; flex: 0 0 32px; place-items: center; width: 32px; height: 32px; overflow: visible; border: 0; border-radius: 50%; background: conic-gradient(var(--context-meter-color) calc(var(--context-usage) * 1%), rgba(143,132,116,.2) 0); color: var(--ink); font-family: var(--font-latin); line-height: 1; }
1213
+ .ai-context-meter::before { content: ""; position: absolute; inset: 3px; border-radius: 50%; background: var(--paper); box-shadow: inset 0 0 0 1px rgba(143,132,116,.12); }
1214
+ .ai-context-meter::after { content: attr(data-tooltip); position: absolute; z-index: 30; right: 0; bottom: calc(100% + 8px); width: max-content; max-width: 220px; padding: 6px 8px; border: 1px solid rgba(255,255,255,.1); border-radius: 4px; background: #292724; color: #fff; font: 10px/1.35 var(--font-latin), monospace; white-space: nowrap; box-shadow: 0 6px 18px rgba(49,42,32,.25); opacity: 0; pointer-events: none; transform: translateY(3px); transition: opacity .12s ease, transform .12s ease; }
1215
+ .ai-context-meter:hover::after, .ai-context-meter:focus-visible::after { opacity: 1; transform: translateY(0); }
1216
+ .ai-context-meter b { position: relative; z-index: 1; font-size: 9px; font-weight: 600; }.ai-context-meter.is-warning { --context-meter-color: #bf6a35; }.ai-context-meter.is-danger { --context-meter-color: #ad463c; }.ai-context-meter.is-empty { opacity: .62; }
1217
+ .ai-send-button { min-width: 54px; height: 32px; padding: 0 11px; border: 0; border-radius: 4px; background: var(--accent); color: #fff; font-size: 10px; font-weight: 600; box-shadow: 0 4px 12px rgba(139,61,44,.2); }
1218
+ .ai-send-button:hover { background: var(--accent-dark); }.ai-send-button:disabled { cursor: wait; opacity: .62; }
1219
+ .ai-citations { display: grid; gap: 6px; max-height: 190px; overflow-y: auto; margin-bottom: 8px; }
1220
+ .ai-citation-card { display: grid; grid-template-columns: minmax(0, 1fr) auto; border: 1px solid var(--line); border-radius: 5px; background: var(--paper); overflow: hidden; }
1221
+ .ai-citation-main { min-width: 0; padding: 8px 9px; border: 0; background: transparent; text-align: left; }
1222
+ .ai-citation-main strong, .ai-citation-main small, .ai-citation-main span { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
1223
+ .ai-citation-main strong { font-size: 10px; }.ai-citation-main small { margin-top: 2px; color: var(--accent); font-size: 8px; }.ai-citation-main span { margin-top: 4px; color: var(--muted); font-size: 9px; }
1224
+ .ai-citation-remove { width: 30px; border: 0; border-left: 1px solid var(--line); background: transparent; color: var(--muted); }
1225
+ .ai-citation-card pre { display: none; grid-column: 1 / -1; max-height: 160px; overflow: auto; margin: 0; padding: 9px; border-top: 1px solid var(--line); background: var(--surface); font: 10px/1.55 var(--font-cjk), sans-serif; white-space: pre-wrap; }
1226
+ .ai-citation-card.is-expanded pre { display: block; }
1227
+ .message-citations { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 7px; }.message-citations span { padding: 3px 6px; border: 1px solid currentColor; border-radius: 10px; font-size: 8px; opacity: .75; }
1228
+
1229
+ .toast-region { position: fixed; inset: auto 24px 24px auto; z-index: 2147483647; display: grid; max-width: calc(100vw - 48px); margin: 0; padding: 0; gap: 8px; overflow: visible; border: 0; background: transparent; color: inherit; pointer-events: none; }
1230
+ .toast-region[data-position="top-right"] { top: 78px; bottom: auto; }
1231
+ .toast-region[data-position="bottom-right"] { top: auto; bottom: 24px; }
1232
+ .toast { max-width: 360px; background: var(--toast-bg); color: var(--toast-fg); padding: 11px 15px; border-radius: 4px; box-shadow: var(--shadow); font-size: 12px; animation: toast-appear-top .18s ease; }
1233
+ .toast-region[data-position="bottom-right"] .toast { animation-name: toast-appear-bottom; }
1234
+ .toast.error { background: var(--toast-error-bg); color: var(--toast-error-fg); }
1235
+ .chapter-type-menu { position: fixed; z-index: 80; width: 176px; padding: 10px; border: 1px solid var(--line); border-radius: 6px; background: var(--panel); box-shadow: 0 14px 38px rgba(49,42,32,.22); }
1236
+ .chapter-type-menu strong { display: block; overflow: hidden; margin: 0 2px 8px; color: var(--muted); font-size: 9px; text-overflow: ellipsis; white-space: nowrap; }
1237
+ .chapter-type-menu > div { display: grid; gap: 3px; }
1238
+ .chapter-type-menu button { border: 0; border-radius: 3px; padding: 7px 8px; background: transparent; text-align: left; font-size: 11px; }
1239
+ .chapter-type-menu button:hover, .chapter-type-menu button.active { background: var(--paper-deep); color: var(--accent-dark); }
1240
+ .line-citation-menu { position: fixed; z-index: 82; display: grid; min-width: 230px; padding: 8px; border: 1px solid var(--line); border-radius: 6px; background: var(--panel); box-shadow: 0 14px 38px rgba(49,42,32,.22); }
1241
+ .line-citation-menu strong { padding: 5px 7px 8px; color: var(--muted); font-size: 9px; }
1242
+ .line-citation-menu button { border: 0; border-radius: 4px; padding: 8px; background: transparent; text-align: left; font-size: 11px; }.line-citation-menu button:hover { background: var(--paper-deep); color: var(--accent-dark); }
1243
+ @keyframes toast-appear-top { from { opacity: 0; transform: translateY(-7px); } }
1244
+ @keyframes toast-appear-bottom { from { opacity: 0; transform: translateY(7px); } }
1245
+
1246
+ .dialog { width: min(570px, 92vw); max-height: 88vh; border: 1px solid var(--line); border-radius: 5px; padding: 0; background: var(--panel); box-shadow: var(--shadow); }
1247
+ .wide-dialog { width: min(800px, 92vw); }
1248
+ .dialog::backdrop { background: rgba(34,30,25,.42); backdrop-filter: blur(3px); }
1249
+ .dialog-header { display: flex; justify-content: space-between; align-items: flex-start; padding: 22px 24px 16px; border-bottom: 1px solid var(--line); }
1250
+ .dialog-header h2 { margin: 0; font-size: 23px; font-weight: 500; }
1251
+ .dialog-close {
1252
+ display: grid;
1253
+ place-items: center;
1254
+ width: 34px;
1255
+ height: 34px;
1256
+ padding: 0;
1257
+ border: 1px solid transparent;
1258
+ border-radius: 50%;
1259
+ background: transparent;
1260
+ color: var(--muted);
1261
+ font-size: 21px;
1262
+ line-height: 1;
1263
+ }
1264
+ .dialog-close:hover, .dialog-close:focus-visible {
1265
+ border-color: var(--line);
1266
+ background: var(--paper-deep);
1267
+ color: var(--accent-dark);
1268
+ outline: none;
1269
+ }
1270
+ .dialog-fields { display: grid; gap: 14px; padding: 22px 24px; max-height: 58vh; overflow-y: auto; }
1271
+ .dialog-fields label { display: grid; gap: 6px; color: var(--muted); font-size: 11px; }
1272
+ .dialog-fields input, .dialog-fields textarea, .dialog-fields select { width: 100%; padding: 9px 10px; font-size: 13px; }
1273
+ .dialog-fields textarea { resize: vertical; min-height: 90px; line-height: 1.6; }
1274
+ .form-field { display: grid; gap: 6px; color: var(--muted); font-size: 11px; }
1275
+ .item-list-rows { display: grid; gap: 7px; }
1276
+ .item-list-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 7px; }
1277
+ .item-list-row button, .item-list-add { border: 1px solid var(--line); border-radius: 4px; background: var(--panel); color: var(--muted); font-size: 10px; }
1278
+ .item-list-row button { padding: 0 10px; }
1279
+ .item-list-add { justify-self: start; padding: 7px 11px; }
1280
+ .structured-list-field > small { color: var(--muted); font-size: 9px; line-height: 1.5; }
1281
+ .structured-list-rows { display: grid; gap: 9px; }
1282
+ .structured-list-row { display: grid; gap: 7px; padding: 10px; border: 1px solid var(--line); border-radius: 4px; background: var(--surface-soft); }
1283
+ .key-value-list-row { grid-template-columns: minmax(120px, .42fr) minmax(0, 1fr) auto; }
1284
+ .section-list-row { grid-template-columns: minmax(0, 1fr) auto; }
1285
+ .section-list-row textarea { grid-column: 1 / -1; min-height: 130px; }
1286
+ .structured-list-row button { grid-column: -2 / -1; grid-row: 1; border: 1px solid var(--line); border-radius: 4px; padding: 0 10px; background: var(--panel); color: var(--muted); font-size: 10px; }
1287
+ .character-identity { color: var(--ink) !important; font-weight: 600; }
1288
+ .character-species { display: flex; align-items: center; gap: 7px; margin-top: 10px; color: var(--muted); font-size: 10px; }
1289
+ .character-detail-list { display: grid; gap: 5px; margin: 12px 0; }
1290
+ .character-detail-list div { display: grid; grid-template-columns: minmax(70px, .42fr) minmax(0, 1fr); gap: 8px; font-size: 10px; }
1291
+ .character-detail-list dt { color: var(--muted); }
1292
+ .character-detail-list dd { margin: 0; overflow-wrap: anywhere; }
1293
+ .character-summary { display: -webkit-box; overflow: hidden; -webkit-box-orient: vertical; -webkit-line-clamp: 4; white-space: normal !important; }
1294
+ .character-section-count { display: block; margin-top: 8px; color: var(--accent-dark); }
1295
+ .chip-picker { display: flex; flex-wrap: wrap; gap: 7px; max-height: 190px; overflow-y: auto; padding: 9px; border: 1px solid var(--line); border-radius: 4px; background: var(--surface-soft); }
1296
+ .dialog-fields .member-chip { position: relative; display: inline-flex !important; width: auto; cursor: pointer; }
1297
+ .member-chip input { position: absolute; width: 1px !important; height: 1px; opacity: 0; }
1298
+ .member-chip span { display: inline-flex; align-items: center; min-height: 30px; padding: 5px 10px; border: 1px solid var(--line); border-radius: 16px; background: var(--panel); color: var(--muted); font-size: 10px; transition: background .14s ease, border-color .14s ease, color .14s ease; }
1299
+ .member-chip input:checked + span { border-color: var(--accent); background: var(--accent); color: #fff; }
1300
+ .member-chip input:focus-visible + span { outline: 2px solid var(--accent); outline-offset: 2px; }
1301
+ .checkbox-field { display: flex !important; align-items: center; grid-template-columns: 18px 1fr; }
1302
+ .checkbox-field input { width: auto; }
1303
+ .dialog-actions { display: flex; justify-content: flex-end; gap: 8px; padding: 14px 24px 20px; }
1304
+ .dialog-actions .reset-button { margin-right: auto; }
1305
+ .character-editor-dialog { width: min(1180px, 96vw); height: min(820px, 94vh); max-width: none; max-height: none; padding: 0; overflow: hidden; border: 1px solid var(--line); border-radius: 7px; background: var(--panel); color: var(--ink); box-shadow: var(--shadow); }
1306
+ .character-editor-dialog::backdrop { background: rgba(34,30,25,.48); backdrop-filter: blur(3px); }
1307
+ .character-editor-dialog > form { display: grid; grid-template-rows: auto minmax(0, 1fr) auto; width: 100%; height: 100%; }
1308
+ .character-editor-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 20px; padding: 20px 22px 16px; border-bottom: 1px solid var(--line); }
1309
+ .character-editor-header h2, .character-editor-header h3 { margin: 0; }
1310
+ .character-editor-title-row { display: flex; align-items: center; gap: 10px; margin-top: 3px; }
1311
+ .character-editor-title-row h2 { font-size: 24px; font-weight: 600; }
1312
+ .character-version-badge { display: inline-flex; align-items: center; min-height: 22px; padding: 2px 8px; border: 1px solid var(--line); border-radius: 12px; background: var(--paper-deep); color: var(--accent-dark); font: 10px/1 var(--font-latin), monospace; }
1313
+ .character-editor-header-actions { display: flex; align-items: center; gap: 8px; }
1314
+ .character-editor-header-actions .ghost-button { min-height: 34px; }
1315
+ .character-editor-header-actions .ghost-button:disabled { cursor: not-allowed; opacity: .46; }
1316
+ .character-editor-workspace { display: grid; grid-template-columns: 190px minmax(0, 1fr); min-height: 0; }
1317
+ .character-editor-workspace.history-open { grid-template-columns: 180px minmax(0, 1fr) 320px; }
1318
+ .character-editor-nav { display: flex; min-width: 0; flex-direction: column; gap: 5px; padding: 18px 12px; border-right: 1px solid var(--line); background: var(--surface-soft); }
1319
+ .character-editor-nav button { display: grid; gap: 3px; width: 100%; padding: 11px 12px; border: 0; border-radius: 5px; background: transparent; color: var(--muted); text-align: left; font-size: 12px; }
1320
+ .character-editor-nav button small { overflow: hidden; color: var(--muted); font-size: 9px; font-weight: 400; text-overflow: ellipsis; white-space: nowrap; }
1321
+ .character-editor-nav button:hover { background: var(--paper-deep); color: var(--ink); }
1322
+ .character-editor-nav button[aria-selected="true"] { background: var(--row-active); color: var(--accent-dark); font-weight: 600; box-shadow: inset 3px 0 var(--accent); }
1323
+ .character-editor-fields { min-width: 0; overflow-y: auto; padding: 24px clamp(20px, 3vw, 38px) 32px; }
1324
+ .character-editor-section { display: grid; gap: 22px; }
1325
+ .character-editor-section > header { display: flex; align-items: end; justify-content: space-between; gap: 24px; padding-bottom: 14px; border-bottom: 1px solid var(--line); }
1326
+ .character-editor-section > header h3 { margin: 2px 0 0; font-size: 21px; }
1327
+ .character-editor-section > header p { max-width: 430px; margin: 0; color: var(--muted); font-size: 10px; line-height: 1.55; text-align: right; }
1328
+ .character-editor-section-fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 17px 20px; }
1329
+ .character-editor-section-fields > label, .character-editor-section-fields > .form-field { display: grid; align-content: start; gap: 7px; color: var(--muted); font-size: 11px; }
1330
+ .character-editor-section-fields > label:has(textarea), .character-editor-section-fields > .structured-list-field, .character-editor-section-fields > .chip-field, .character-editor-field-help { grid-column: 1 / -1; }
1331
+ .character-editor-section-fields input, .character-editor-section-fields textarea, .character-editor-section-fields select { width: 100%; padding: 10px 11px; border: 1px solid var(--line); border-radius: 4px; background: var(--surface); font-size: 13px; }
1332
+ .character-editor-section-fields textarea { min-height: 120px; resize: vertical; line-height: 1.65; }
1333
+ .character-editor-section-fields .section-list-row textarea { min-height: 180px; }
1334
+ .character-editor-section-fields .member-chip { position: relative; display: inline-flex; width: auto; cursor: pointer; }
1335
+ .character-editor-section-fields .item-list-row button, .character-editor-section-fields .structured-list-row button { min-width: 54px; }
1336
+ .character-editor-empty-field { display: grid; align-content: start; gap: 7px; color: var(--muted); font-size: 11px; }
1337
+ .character-editor-empty-field span { padding: 11px; border: 1px dashed var(--line); border-radius: 4px; font-size: 10px; }
1338
+ .character-editor-field-help { margin: -8px 0 0; color: var(--muted); font-size: 9px; }
1339
+ .character-history-panel { min-width: 0; overflow-y: auto; border-left: 1px solid var(--line); background: var(--surface-soft); }
1340
+ .character-history-heading { position: sticky; z-index: 2; top: 0; display: flex; align-items: flex-start; justify-content: space-between; padding: 18px 16px 14px; border-bottom: 1px solid var(--line); background: var(--panel); }
1341
+ .character-history-heading h3 { margin: 2px 0 0; font-size: 16px; }
1342
+ .character-history-heading button { width: 28px; height: 28px; padding: 0; border: 0; background: transparent; color: var(--muted); font-size: 20px; }
1343
+ .character-history-list { display: grid; gap: 10px; padding: 12px; }
1344
+ .character-history-empty { margin: 0; padding: 22px 10px; color: var(--muted); font-size: 10px; text-align: center; }
1345
+ .character-version-card { display: grid; gap: 9px; padding: 12px; border: 1px solid var(--line); border-radius: 5px; background: var(--panel); }
1346
+ .character-version-card.is-current { border-color: color-mix(in srgb, var(--accent) 60%, var(--line)); box-shadow: inset 3px 0 var(--accent); }
1347
+ .character-version-card-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px; }
1348
+ .character-version-card-heading > div { display: flex; align-items: center; gap: 6px; }
1349
+ .character-version-card-heading strong { color: var(--accent-dark); font-size: 13px; }
1350
+ .character-version-card-heading span, .character-version-card-heading time { color: var(--muted); font-size: 8px; }
1351
+ .character-version-card p { margin: 0; color: var(--ink); font-size: 10px; line-height: 1.5; overflow-wrap: anywhere; }
1352
+ .character-version-changes { display: flex; flex-wrap: wrap; gap: 4px; }
1353
+ .character-version-changes span { padding: 2px 6px; border-radius: 10px; background: var(--paper-deep); color: var(--muted); font-size: 8px; }
1354
+ .character-version-card > button { justify-self: end; padding: 6px 8px; border: 1px solid var(--line); border-radius: 4px; background: transparent; color: var(--muted); font-size: 9px; }
1355
+ .character-version-card > button:not(:disabled):hover { border-color: var(--accent); color: var(--accent-dark); }
1356
+ .character-version-card > button.is-confirming { border-color: var(--accent); background: var(--accent); color: #fff; }
1357
+ .character-version-card > button:disabled { cursor: default; opacity: .68; }
1358
+ .character-editor-actions { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: end; gap: 22px; padding: 14px 22px 18px; border-top: 1px solid var(--line); background: var(--panel); }
1359
+ .character-editor-actions > label { display: grid; gap: 5px; color: var(--muted); font-size: 10px; }
1360
+ .character-editor-actions input { width: 100%; padding: 9px 10px; border: 1px solid var(--line); border-radius: 4px; background: var(--surface); font-size: 12px; }
1361
+ .character-editor-actions > div { display: flex; gap: 8px; }
1362
+ .character-editor-actions button { min-height: 36px; }
1363
+ .appearance-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; padding: 22px 24px; }
1364
+ .appearance-grid label { display: grid; gap: 6px; color: var(--muted); font-size: 11px; }
1365
+ .appearance-grid select { width: 100%; padding: 9px 10px; font-size: 13px; }
1366
+ .font-preview { grid-column: 1 / -1; padding: 16px; border: 1px solid var(--line); border-radius: 4px; background: var(--paper); }
1367
+ .font-preview strong, .font-preview span { display: block; }
1368
+ .font-preview strong { margin-bottom: 8px; font-size: 17px; }
1369
+ .font-preview span { color: var(--muted); }
1370
+ .font-preview span + span { margin-top: .55em; }
1371
+ .versions-list { padding: 18px 24px 28px; max-height: 65vh; overflow: auto; }
1372
+ .version-row { display: grid; grid-template-columns: 75px 1fr auto; gap: 14px; padding: 14px 0; border-bottom: 1px solid var(--line); align-items: start; }
1373
+ .version-row p { margin: 0; color: var(--muted); font-size: 11px; white-space: pre-wrap; max-height: 70px; overflow: hidden; }
1374
+ .entity-history-list { display: grid; gap: 10px; padding: 18px 24px 28px; max-height: 65vh; overflow: auto; }
1375
+ .entity-version-card { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 8px 18px; padding: 14px; border: 1px solid var(--line); border-radius: 5px; background: var(--surface-soft); }
1376
+ .entity-version-card.is-current { border-color: color-mix(in srgb, var(--accent) 60%, var(--line)); box-shadow: inset 3px 0 var(--accent); }
1377
+ .entity-version-card header { display: flex; align-items: center; gap: 8px; min-width: 0; }
1378
+ .entity-version-card header strong { color: var(--accent-dark); font-size: 13px; }
1379
+ .entity-version-card header span, .entity-version-card time { color: var(--muted); font-size: 9px; }
1380
+ .entity-version-card time { justify-self: end; }
1381
+ .entity-version-card p { grid-column: 1 / -1; margin: 0; color: var(--ink); font-size: 11px; line-height: 1.55; overflow-wrap: anywhere; }
1382
+ .entity-version-card small { align-self: center; color: var(--muted); font-size: 9px; }
1383
+ .entity-version-card > button { justify-self: end; padding: 6px 9px; border: 1px solid var(--line); border-radius: 4px; background: transparent; color: var(--muted); font-size: 9px; }
1384
+ .entity-version-card > button:not(:disabled):hover { border-color: var(--accent); color: var(--accent-dark); }
1385
+ .entity-version-card > button.is-confirming { border-color: var(--accent); background: var(--accent); color: #fff; }
1386
+ .entity-version-card > button:disabled { cursor: default; opacity: .68; }
1387
+ .entity-history-empty { margin: 0; padding: 28px 12px; color: var(--muted); font-size: 11px; text-align: center; }
1388
+ .relationship-table .relationship-actions { white-space: nowrap; }
1389
+ .relationship-table .relationship-actions button + button { margin-left: 5px; }
1390
+
1391
+ @media (max-width: 540px) {
1392
+ .member-invite-form { grid-template-columns: minmax(0, 1fr); }
1393
+ .onboarding-popover { width: calc(100vw - 24px); }
1394
+ .onboarding-popover-header { padding-inline: 15px; }
1395
+ .onboarding-popover-body { padding: 16px 17px 18px; }
1396
+ .onboarding-popover-body h2 { font-size: 19px; }
1397
+ .onboarding-popover-footer { padding-inline: 15px; }
1398
+ }
1399
+
1400
+ @media (max-width: 1100px) {
1401
+ .left-panel { padding-inline: 10px; }
1402
+ .ai-panel { padding-inline: 14px; }
1403
+ .editor-toolbar { grid-template-areas: "path" "title" "actions"; grid-template-columns: minmax(0, 1fr); gap: 12px; padding-inline: 6%; }
1404
+ .editor-actions { justify-content: flex-end; flex-wrap: wrap; }
1405
+ .outline-row { grid-template-columns: 1fr 1fr; }.outline-actions { justify-items: start; }
1406
+ .character-editor-workspace, .character-editor-workspace.history-open { grid-template-columns: 150px minmax(0, 1fr); }
1407
+ .character-editor-workspace.history-open .character-history-panel { position: absolute; z-index: 3; top: 0; right: 0; bottom: 0; width: min(340px, 44vw); box-shadow: -12px 0 32px rgba(49,42,32,.16); }
1408
+ .character-editor-workspace { position: relative; }
1409
+ }
1410
+
1411
+ @media (max-width: 850px) {
1412
+ .top-actions .ghost-button:not(.settings-button) { display: none; }
1413
+ .book-shelf { grid-template-columns: repeat(3, minmax(180px, 1fr)); }
1414
+ .settings-hub-grid { grid-template-columns: 1fr; }
1415
+ .character-editor-dialog { width: 98vw; height: 96vh; }
1416
+ .character-editor-workspace, .character-editor-workspace.history-open { grid-template-columns: minmax(0, 1fr); grid-template-rows: auto minmax(0, 1fr); }
1417
+ .character-editor-nav { flex-direction: row; overflow-x: auto; padding: 8px 10px; border-right: 0; border-bottom: 1px solid var(--line); }
1418
+ .character-editor-nav button { flex: 0 0 130px; }
1419
+ .character-editor-nav button[aria-selected="true"] { box-shadow: inset 0 -3px var(--accent); }
1420
+ .character-editor-section-fields { grid-template-columns: minmax(0, 1fr); }
1421
+ .character-editor-section-fields > label, .character-editor-section-fields > .form-field, .character-editor-field-help { grid-column: 1; }
1422
+ .character-editor-section > header { align-items: flex-start; flex-direction: column; gap: 7px; }
1423
+ .character-editor-section > header p { text-align: left; }
1424
+ .character-editor-actions { grid-template-columns: minmax(0, 1fr); gap: 10px; }
1425
+ .character-editor-actions > div { justify-content: flex-end; }
1426
+ .character-editor-workspace.history-open .character-history-panel { width: min(360px, 86vw); }
1427
+ }
1428
+
1429
+ @media (max-width: 640px) {
1430
+ .ai-history-dialog-body { min-height: min(360px, 62vh); padding: 12px 14px 18px; }
1431
+ .account-settings-body { padding: 16px; }
1432
+ .account-settings-section { padding: 15px; }
1433
+ .account-settings-form, .password-settings-form, .api-key-settings, .api-key-result { grid-template-columns: minmax(0, 1fr); }
1434
+ .avatar-settings { grid-template-columns: 64px minmax(0, 1fr); }
1435
+ .profile-avatar-preview { width: 64px; height: 64px; }
1436
+ .account-settings-form .primary-button { width: 100%; }
1437
+ }
1438
+
1439
+ @media (prefers-reduced-motion: reduce) {
1440
+ *, *::before, *::after { scroll-behavior: auto !important; animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }
1441
+ }