@lemoncat7/dsh-knowledge 0.6.0-alpha.6

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 (76) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +184 -0
  3. package/cordis.patch.yml +12 -0
  4. package/docs/architecture.md +107 -0
  5. package/docs/document-knowledge-design.zh-CN.md +329 -0
  6. package/docs/requirements.md +86 -0
  7. package/lib/api.d.ts +4 -0
  8. package/lib/api.d.ts.map +1 -0
  9. package/lib/api.js +497 -0
  10. package/lib/api.js.map +1 -0
  11. package/lib/client.js +420 -0
  12. package/lib/client.js.map +7 -0
  13. package/lib/config.d.ts +38 -0
  14. package/lib/config.d.ts.map +1 -0
  15. package/lib/config.js +84 -0
  16. package/lib/config.js.map +1 -0
  17. package/lib/connection.d.ts +15 -0
  18. package/lib/connection.d.ts.map +1 -0
  19. package/lib/connection.js +95 -0
  20. package/lib/connection.js.map +1 -0
  21. package/lib/control.d.ts +26 -0
  22. package/lib/control.d.ts.map +1 -0
  23. package/lib/control.js +149 -0
  24. package/lib/control.js.map +1 -0
  25. package/lib/domain.d.ts +207 -0
  26. package/lib/domain.d.ts.map +1 -0
  27. package/lib/domain.js +122 -0
  28. package/lib/domain.js.map +1 -0
  29. package/lib/extraction.d.ts +27 -0
  30. package/lib/extraction.d.ts.map +1 -0
  31. package/lib/extraction.js +367 -0
  32. package/lib/extraction.js.map +1 -0
  33. package/lib/index.d.ts +15 -0
  34. package/lib/index.d.ts.map +1 -0
  35. package/lib/index.js +198 -0
  36. package/lib/index.js.map +1 -0
  37. package/lib/local-provider.d.ts +60 -0
  38. package/lib/local-provider.d.ts.map +1 -0
  39. package/lib/local-provider.js +1096 -0
  40. package/lib/local-provider.js.map +1 -0
  41. package/lib/provider-router.d.ts +19 -0
  42. package/lib/provider-router.d.ts.map +1 -0
  43. package/lib/provider-router.js +83 -0
  44. package/lib/provider-router.js.map +1 -0
  45. package/lib/provider.d.ts +38 -0
  46. package/lib/provider.d.ts.map +1 -0
  47. package/lib/provider.js +2 -0
  48. package/lib/provider.js.map +1 -0
  49. package/lib/recall.d.ts +8 -0
  50. package/lib/recall.d.ts.map +1 -0
  51. package/lib/recall.js +76 -0
  52. package/lib/recall.js.map +1 -0
  53. package/lib/remote-provider.d.ts +51 -0
  54. package/lib/remote-provider.d.ts.map +1 -0
  55. package/lib/remote-provider.js +216 -0
  56. package/lib/remote-provider.js.map +1 -0
  57. package/lib/retrieval.d.ts +35 -0
  58. package/lib/retrieval.d.ts.map +1 -0
  59. package/lib/retrieval.js +206 -0
  60. package/lib/retrieval.js.map +1 -0
  61. package/lib/runtime.d.ts +147 -0
  62. package/lib/runtime.d.ts.map +1 -0
  63. package/lib/runtime.js +26 -0
  64. package/lib/runtime.js.map +1 -0
  65. package/lib/tools.d.ts +6 -0
  66. package/lib/tools.d.ts.map +1 -0
  67. package/lib/tools.js +99 -0
  68. package/lib/tools.js.map +1 -0
  69. package/lib/web.d.ts +3 -0
  70. package/lib/web.d.ts.map +1 -0
  71. package/lib/web.js +71 -0
  72. package/lib/web.js.map +1 -0
  73. package/package.json +79 -0
  74. package/web/app.js +1686 -0
  75. package/web/index.html +19 -0
  76. package/web/styles.css +786 -0
package/web/styles.css ADDED
@@ -0,0 +1,786 @@
1
+ :root {
2
+ color-scheme: light dark;
3
+ font-family: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
4
+ font-size: 16px;
5
+ --bg: #f5f6f8;
6
+ --surface: #ffffff;
7
+ --surface-raised: #ffffff;
8
+ --surface-soft: #f0f2f5;
9
+ --surface-hover: #f5f7fa;
10
+ --text: #17191d;
11
+ --text-secondary: #545a65;
12
+ --text-tertiary: #777f8c;
13
+ --border: #dfe3e8;
14
+ --border-strong: #cbd1d9;
15
+ --accent: #335cff;
16
+ --accent-hover: #2449df;
17
+ --accent-soft: #e9eeff;
18
+ --success: #18794e;
19
+ --success-soft: #e8f5ee;
20
+ --warning: #986800;
21
+ --warning-soft: #fff4cf;
22
+ --danger: #c9343a;
23
+ --danger-soft: #fdebec;
24
+ --shadow: 0 12px 32px rgb(20 25 35 / 8%);
25
+ --radius: 14px;
26
+ --sidebar-width: 236px;
27
+ }
28
+
29
+ @media (prefers-color-scheme: dark) {
30
+ :root {
31
+ --bg: #111318;
32
+ --surface: #191c22;
33
+ --surface-raised: #20242c;
34
+ --surface-soft: #252a33;
35
+ --surface-hover: #262b34;
36
+ --text: #f4f6f8;
37
+ --text-secondary: #b9c0ca;
38
+ --text-tertiary: #929ba8;
39
+ --border: #303640;
40
+ --border-strong: #424a57;
41
+ --accent: #7894ff;
42
+ --accent-hover: #92a8ff;
43
+ --accent-soft: #242f58;
44
+ --success: #62c596;
45
+ --success-soft: #163a2a;
46
+ --warning: #e7bc62;
47
+ --warning-soft: #423414;
48
+ --danger: #ff858a;
49
+ --danger-soft: #4b2227;
50
+ --shadow: 0 16px 40px rgb(0 0 0 / 28%);
51
+ }
52
+ }
53
+
54
+ * { box-sizing: border-box; }
55
+
56
+ html, body { min-height: 100%; }
57
+
58
+ body {
59
+ margin: 0;
60
+ background: var(--bg);
61
+ color: var(--text);
62
+ font-size: 14px;
63
+ line-height: 1.5;
64
+ text-rendering: optimizeLegibility;
65
+ }
66
+
67
+ button, input, select, textarea { font: inherit; }
68
+
69
+ button, select, input[type="checkbox"], input[type="range"] { cursor: pointer; }
70
+
71
+ button:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible, [tabindex]:focus-visible {
72
+ outline: 3px solid color-mix(in srgb, var(--accent) 36%, transparent);
73
+ outline-offset: 2px;
74
+ }
75
+
76
+ button:disabled { cursor: not-allowed; opacity: .56; }
77
+
78
+ .visually-hidden {
79
+ position: absolute;
80
+ width: 1px;
81
+ height: 1px;
82
+ padding: 0;
83
+ margin: -1px;
84
+ overflow: hidden;
85
+ clip: rect(0, 0, 0, 0);
86
+ white-space: nowrap;
87
+ border: 0;
88
+ }
89
+
90
+ .login-page {
91
+ min-height: 100vh;
92
+ min-height: 100dvh;
93
+ display: grid;
94
+ place-items: center;
95
+ padding: 28px;
96
+ background:
97
+ radial-gradient(circle at 18% 8%, color-mix(in srgb, var(--accent) 12%, transparent), transparent 36%),
98
+ var(--bg);
99
+ }
100
+
101
+ .login-card {
102
+ width: min(100%, 420px);
103
+ border: 1px solid var(--border);
104
+ border-radius: 20px;
105
+ padding: 32px;
106
+ background: var(--surface-raised);
107
+ box-shadow: var(--shadow);
108
+ }
109
+
110
+ .brand-mark {
111
+ display: grid;
112
+ place-items: center;
113
+ width: 40px;
114
+ height: 40px;
115
+ border-radius: 12px;
116
+ background: var(--accent);
117
+ color: #fff;
118
+ font-size: 18px;
119
+ font-weight: 700;
120
+ letter-spacing: -.04em;
121
+ }
122
+
123
+ .login-card h1 { margin: 22px 0 6px; font-size: 25px; line-height: 1.25; letter-spacing: -.02em; }
124
+ .login-card > p { margin: 0 0 24px; color: var(--text-secondary); }
125
+
126
+ .field { display: grid; gap: 7px; }
127
+ .field + .field { margin-top: 16px; }
128
+ .field label { color: var(--text-secondary); font-size: 13px; font-weight: 600; }
129
+ .field-hint { color: var(--text-tertiary); font-size: 12px; }
130
+
131
+ .input, .select, .textarea {
132
+ width: 100%;
133
+ border: 1px solid var(--border-strong);
134
+ border-radius: 9px;
135
+ padding: 9px 11px;
136
+ background: var(--surface);
137
+ color: var(--text);
138
+ transition: border-color .15s ease, box-shadow .15s ease;
139
+ }
140
+
141
+ .input, .select { min-height: 40px; }
142
+ .textarea { min-height: 132px; resize: vertical; }
143
+ .input::placeholder, .textarea::placeholder { color: var(--text-tertiary); }
144
+ .input:focus, .select:focus, .textarea:focus { border-color: var(--accent); }
145
+
146
+ .login-error { min-height: 21px; margin: 10px 0 0; color: var(--danger); font-size: 13px; }
147
+
148
+ .button {
149
+ min-height: 38px;
150
+ border: 1px solid var(--border-strong);
151
+ border-radius: 9px;
152
+ padding: 7px 13px;
153
+ background: var(--surface);
154
+ color: var(--text);
155
+ font-weight: 600;
156
+ white-space: nowrap;
157
+ transition: background .15s ease, border-color .15s ease, transform .08s ease;
158
+ }
159
+
160
+ .button:hover:not(:disabled) { background: var(--surface-hover); border-color: var(--text-tertiary); }
161
+ .button:active:not(:disabled) { transform: translateY(1px); }
162
+ .button.primary { border-color: var(--accent); background: var(--accent); color: #fff; }
163
+ .button.primary:hover:not(:disabled) { border-color: var(--accent-hover); background: var(--accent-hover); }
164
+ .button.danger { border-color: color-mix(in srgb, var(--danger) 40%, var(--border)); color: var(--danger); }
165
+ .button.danger:hover:not(:disabled) { background: var(--danger-soft); }
166
+ .button.ghost { border-color: transparent; background: transparent; color: var(--text-secondary); }
167
+ .button.small { min-height: 31px; padding: 4px 9px; font-size: 12px; }
168
+ .login-card .button { width: 100%; margin-top: 20px; }
169
+
170
+ .app-shell { min-height: 100vh; min-height: 100dvh; display: grid; grid-template-columns: var(--sidebar-width) 8px minmax(0, 1fr); }
171
+
172
+ .sidebar {
173
+ position: sticky;
174
+ top: 0;
175
+ height: 100vh;
176
+ height: 100dvh;
177
+ display: flex;
178
+ flex-direction: column;
179
+ padding: 22px 14px 16px;
180
+ background: color-mix(in srgb, var(--surface) 92%, transparent);
181
+ }
182
+
183
+ .brand { display: flex; align-items: center; gap: 11px; padding: 0 8px 24px; }
184
+ .brand .brand-mark { width: 34px; height: 34px; border-radius: 10px; font-size: 15px; }
185
+ .brand-copy { min-width: 0; }
186
+ .brand strong { display: block; font-size: 14px; }
187
+ .brand span { display: block; color: var(--text-tertiary); font-size: 11px; }
188
+
189
+ .nav { display: grid; gap: 4px; }
190
+ .nav-button {
191
+ width: 100%;
192
+ min-height: 42px;
193
+ display: flex;
194
+ align-items: center;
195
+ gap: 11px;
196
+ border: 0;
197
+ border-radius: 10px;
198
+ padding: 8px 11px;
199
+ background: transparent;
200
+ color: var(--text-secondary);
201
+ text-align: left;
202
+ font-weight: 600;
203
+ }
204
+ .nav-button:hover { background: var(--surface-hover); color: var(--text); }
205
+ .nav-button[aria-current="page"] { background: var(--accent-soft); color: var(--accent); }
206
+ .nav-icon { width: 20px; text-align: center; font-size: 15px; }
207
+ .nav-count { margin-left: auto; min-width: 24px; border-radius: 999px; padding: 1px 7px; background: var(--surface-soft); color: var(--text-secondary); font-size: 11px; text-align: center; }
208
+ .nav-button[aria-current="page"] .nav-count { background: color-mix(in srgb, var(--accent) 12%, var(--surface)); color: var(--accent); }
209
+
210
+ .sidebar-footer { margin-top: auto; display: grid; gap: 8px; border-top: 1px solid var(--border); padding: 14px 8px 0; }
211
+ .connection { display: flex; align-items: center; gap: 8px; color: var(--text-tertiary); font-size: 12px; }
212
+ .status-dot { width: 8px; height: 8px; flex: none; border-radius: 50%; background: var(--success); }
213
+ .sidebar-footer .button { justify-self: start; }
214
+
215
+ .app-sidebar-resizer,
216
+ .column-resizer {
217
+ position: relative;
218
+ z-index: 12;
219
+ width: 8px;
220
+ min-width: 8px;
221
+ cursor: col-resize;
222
+ touch-action: none;
223
+ background: var(--border);
224
+ outline-offset: -2px;
225
+ }
226
+ .app-sidebar-resizer {
227
+ position: sticky;
228
+ top: 0;
229
+ height: 100vh;
230
+ height: 100dvh;
231
+ }
232
+ .app-sidebar-resizer::before,
233
+ .column-resizer::before {
234
+ content: "";
235
+ position: absolute;
236
+ inset: 0 -3px;
237
+ }
238
+ .app-sidebar-resizer span,
239
+ .column-resizer span {
240
+ position: absolute;
241
+ top: 50%;
242
+ left: 50%;
243
+ width: 18px;
244
+ height: 38px;
245
+ display: grid;
246
+ place-items: center;
247
+ border: 1px solid var(--border-strong);
248
+ border-radius: 999px;
249
+ background: var(--surface-raised);
250
+ color: var(--text-tertiary);
251
+ font-size: 17px;
252
+ line-height: 1;
253
+ opacity: 1;
254
+ box-shadow: 0 2px 8px rgb(20 25 35 / 9%);
255
+ transform: translate(-50%, -50%);
256
+ transition: opacity .15s ease, background .15s ease;
257
+ }
258
+ .app-sidebar-resizer:hover span,
259
+ .app-sidebar-resizer:focus-visible span,
260
+ .app-sidebar-resizer.is-dragging span,
261
+ .column-resizer:hover span,
262
+ .column-resizer:focus-visible span,
263
+ .column-resizer.is-dragging span { opacity: 1; border-color: var(--accent); background: var(--accent); color: #fff; }
264
+ .app-sidebar-resizer:hover,
265
+ .app-sidebar-resizer.is-dragging,
266
+ .column-resizer:hover,
267
+ .column-resizer.is-dragging { background: color-mix(in srgb, var(--accent) 30%, var(--border)); }
268
+
269
+ .main { min-width: 0; grid-column: 3; }
270
+ .topbar {
271
+ position: sticky;
272
+ top: 0;
273
+ z-index: 10;
274
+ min-height: 72px;
275
+ display: flex;
276
+ align-items: center;
277
+ justify-content: space-between;
278
+ gap: 18px;
279
+ border-bottom: 1px solid var(--border);
280
+ padding: 14px clamp(20px, 4vw, 52px);
281
+ background: color-mix(in srgb, var(--bg) 89%, transparent);
282
+ backdrop-filter: blur(18px);
283
+ }
284
+ .topbar h1 { margin: 0; font-size: 20px; line-height: 1.25; letter-spacing: -.02em; }
285
+ .topbar p { margin: 3px 0 0; color: var(--text-tertiary); font-size: 12px; }
286
+ .topbar-title { display: flex; align-items: center; gap: 12px; }
287
+ .mobile-menu { display: none; }
288
+ .topbar-actions { display: flex; align-items: center; gap: 8px; }
289
+ .pane-toggle-group {
290
+ flex: none;
291
+ display: inline-flex;
292
+ align-items: center;
293
+ gap: 2px;
294
+ border: 1px solid var(--border);
295
+ border-radius: 9px;
296
+ padding: 2px;
297
+ background: color-mix(in srgb, var(--surface-soft) 72%, transparent);
298
+ }
299
+ .pane-toggle-button {
300
+ width: 30px;
301
+ min-width: 30px;
302
+ height: 30px;
303
+ min-height: 30px;
304
+ display: inline-grid;
305
+ place-items: center;
306
+ border: 0;
307
+ border-radius: 7px;
308
+ padding: 0;
309
+ background: transparent;
310
+ color: var(--text-tertiary);
311
+ }
312
+ .pane-toggle-button:hover { background: var(--surface-hover); color: var(--text); }
313
+ .pane-toggle-button[aria-pressed="true"] {
314
+ background: var(--surface-raised);
315
+ color: var(--text);
316
+ box-shadow: 0 1px 4px rgb(20 25 35 / 10%);
317
+ }
318
+ .pane-icon {
319
+ position: relative;
320
+ width: 17px;
321
+ height: 14px;
322
+ display: block;
323
+ overflow: hidden;
324
+ border: 1.5px solid currentColor;
325
+ border-radius: 3.5px;
326
+ }
327
+ .pane-icon-main::before,
328
+ .pane-icon-library::before {
329
+ content: "";
330
+ position: absolute;
331
+ inset: 0 auto 0 0;
332
+ width: 5px;
333
+ border-right: 1px solid currentColor;
334
+ background: currentColor;
335
+ opacity: .22;
336
+ }
337
+ .pane-icon-library::after,
338
+ .pane-icon-document::before {
339
+ content: "";
340
+ position: absolute;
341
+ top: 0;
342
+ bottom: 0;
343
+ left: 10px;
344
+ border-left: 1px solid currentColor;
345
+ }
346
+ .pane-icon-document::before { left: 5px; box-shadow: 5px 0 0 currentColor; }
347
+ .pane-icon-document::after {
348
+ content: "";
349
+ position: absolute;
350
+ inset: 0 auto 0 6px;
351
+ width: 4px;
352
+ background: currentColor;
353
+ opacity: .18;
354
+ }
355
+
356
+ .page { width: min(100%, 1240px); margin: 0 auto; padding: 30px clamp(20px, 4vw, 52px) 56px; }
357
+
358
+ .section-heading { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; margin-bottom: 16px; }
359
+ .section-heading h2 { margin: 0; font-size: 16px; }
360
+ .section-heading p { margin: 4px 0 0; color: var(--text-tertiary); font-size: 12px; }
361
+
362
+ .metrics { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; margin-bottom: 30px; }
363
+ .metric { min-width: 0; border: 1px solid var(--border); border-radius: var(--radius); padding: 18px; background: var(--surface); }
364
+ .metric-label { display: flex; align-items: center; justify-content: space-between; gap: 8px; color: var(--text-secondary); font-size: 12px; font-weight: 600; }
365
+ .metric-value { display: block; margin-top: 8px; font-size: 27px; line-height: 1.15; font-weight: 700; font-variant-numeric: tabular-nums; letter-spacing: -.03em; }
366
+ .metric-detail { margin-top: 7px; color: var(--text-tertiary); font-size: 11px; }
367
+
368
+ .dashboard-grid { display: grid; grid-template-columns: minmax(0, 1.35fr) minmax(300px, .85fr); gap: 18px; }
369
+ .panel { min-width: 0; border: 1px solid var(--border); border-radius: var(--radius); background: var(--surface); }
370
+ .panel-header { display: flex; align-items: center; justify-content: space-between; gap: 14px; border-bottom: 1px solid var(--border); padding: 15px 17px; }
371
+ .panel-header h2, .panel-header h3 { margin: 0; font-size: 14px; }
372
+ .panel-body { padding: 8px; }
373
+
374
+ .bases-page { display: grid; gap: 34px; }
375
+ .base-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
376
+ .base-card {
377
+ min-width: 0;
378
+ display: flex;
379
+ flex-direction: column;
380
+ gap: 12px;
381
+ border: 1px solid var(--border);
382
+ border-radius: var(--radius);
383
+ padding: 17px;
384
+ background: var(--surface);
385
+ }
386
+ .base-card.is-archived { opacity: .72; }
387
+ .base-card-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
388
+ .base-card h3 { margin: 0; font-size: 15px; }
389
+ .base-card small { display: block; overflow: hidden; margin-top: 3px; color: var(--text-tertiary); text-overflow: ellipsis; white-space: nowrap; }
390
+ .base-description { display: grid; gap: 3px; }
391
+ .base-description strong { color: var(--text-tertiary); font-size: 10px; text-transform: uppercase; letter-spacing: .06em; }
392
+ .base-description p { margin: 0; color: var(--text-secondary); }
393
+ .base-instructions { display: grid; gap: 3px; border-left: 2px solid var(--accent); padding-left: 10px; color: var(--text-secondary); font-size: 12px; }
394
+ .base-instructions strong { color: var(--text-tertiary); font-size: 10px; text-transform: uppercase; letter-spacing: .06em; }
395
+ .base-model { display: flex; flex-wrap: wrap; align-items: center; gap: 7px; color: var(--text-secondary); font-size: 12px; }
396
+ .base-model strong { color: var(--text-tertiary); font-size: 10px; text-transform: uppercase; letter-spacing: .06em; }
397
+ .base-card-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 5px; margin-top: auto; padding-top: 3px; }
398
+ .archived-bases { margin-top: 16px; }
399
+ .archived-bases summary { margin-bottom: 12px; color: var(--text-secondary); cursor: pointer; font-weight: 600; }
400
+ .mount-section { min-width: 0; }
401
+ .mount-context { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; margin-bottom: 14px; }
402
+ .context-pill { min-width: 0; display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 9px; border: 1px solid var(--border); border-radius: 10px; padding: 10px 12px; background: var(--surface-soft); }
403
+ .context-pill strong { color: var(--text-secondary); }
404
+ .context-pill span { overflow: hidden; color: var(--text-tertiary); text-overflow: ellipsis; white-space: nowrap; }
405
+ .context-warning { border: 1px solid color-mix(in srgb, var(--warning) 30%, var(--border)); border-radius: 10px; padding: 11px 13px; background: var(--warning-soft); color: var(--warning); font-size: 12px; }
406
+ .mount-manager { overflow: clip; border: 1px solid var(--border); border-radius: var(--radius); background: var(--surface); }
407
+ .mount-manager-toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; border-bottom: 1px solid var(--border); padding: 12px; }
408
+ .mount-search { min-width: 220px; }
409
+ .mount-manager-toolbar > .select { width: auto; min-width: 130px; }
410
+ .mount-target-line { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: 9px; border-bottom: 1px solid var(--border); padding: 9px 14px; background: var(--surface-soft); color: var(--text-secondary); font-size: 12px; }
411
+ .mount-target-line code { overflow: hidden; color: var(--text-tertiary); font: inherit; text-overflow: ellipsis; white-space: nowrap; }
412
+ .mount-table { max-height: min(54vh, 620px); overflow: auto; }
413
+ .mount-list-row { min-width: 0; display: grid; grid-template-columns: 28px minmax(0, 1fr) auto; align-items: center; gap: 11px; border-bottom: 1px solid var(--border); padding: 12px 14px; transition: background .15s ease; }
414
+ .mount-list-row:last-child { border-bottom: 0; }
415
+ .mount-list-row:hover { background: var(--surface-hover); }
416
+ .mount-list-row.is-selected { background: var(--accent-soft); box-shadow: inset 3px 0 0 var(--accent); }
417
+ .mount-select { width: 28px; height: 28px; display: grid; place-items: center; cursor: pointer; }
418
+ .mount-select input { width: 16px; height: 16px; accent-color: var(--accent); }
419
+ .mount-list-main { min-width: 0; }
420
+ .mount-list-title { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
421
+ .mount-list-main p { overflow: hidden; margin: 4px 0 0; color: var(--text-secondary); font-size: 12px; text-overflow: ellipsis; white-space: nowrap; }
422
+ .mount-list-meta { margin-top: 4px; color: var(--text-tertiary); font-size: 11px; }
423
+ .mount-bulk-bar { position: sticky; bottom: 0; z-index: 2; display: flex; align-items: center; justify-content: space-between; gap: 12px; border-top: 1px solid var(--border-strong); padding: 10px 12px; background: color-mix(in srgb, var(--surface-raised) 94%, transparent); backdrop-filter: blur(14px); }
424
+ .mount-bulk-bar > strong { font-size: 12px; }
425
+ .mount-bulk-actions { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 6px; }
426
+ .mount-delete { display: flex; align-items: center; justify-content: space-between; gap: 12px; border-top: 1px solid var(--border); padding-top: 14px; }
427
+ .selection-summary { border: 1px solid var(--border); border-radius: 9px; padding: 11px 12px; background: var(--surface-soft); }
428
+ .selection-summary p { margin: 5px 0 0; color: var(--text-secondary); font-size: 12px; }
429
+ .delete-base-confirmation { margin-top: 16px; }
430
+ .check-option span { display: grid; gap: 2px; }
431
+ .check-option small { color: var(--text-tertiary); font-size: 11px; font-weight: 400; }
432
+
433
+ .toolbar { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin-bottom: 16px; }
434
+ .search-box { position: relative; flex: 1 1 280px; }
435
+ .search-box .input { padding-left: 37px; }
436
+ .search-symbol { position: absolute; top: 50%; left: 13px; transform: translateY(-50%); color: var(--text-tertiary); pointer-events: none; }
437
+ .toolbar .select { width: auto; min-width: 132px; }
438
+
439
+ .document-page { min-width: 0; }
440
+ .document-page-toolbar {
441
+ display: flex;
442
+ align-items: center;
443
+ gap: 10px;
444
+ margin-bottom: 14px;
445
+ }
446
+ .document-global-search { min-width: 220px; }
447
+ .compact-library-picker,
448
+ .mobile-document-picker { display: none; }
449
+ .document-browser {
450
+ min-width: 0;
451
+ height: clamp(600px, calc(100dvh - 188px), 860px);
452
+ display: grid;
453
+ grid-template-columns: min(var(--library-width, 220px), 28%) 8px min(var(--document-list-width, 280px), 34%) 8px minmax(320px, 1fr);
454
+ overflow: hidden;
455
+ border: 1px solid var(--border);
456
+ border-radius: 16px;
457
+ background: var(--surface);
458
+ box-shadow: 0 10px 32px rgb(20 25 35 / 5%);
459
+ }
460
+ .knowledge-library-column,
461
+ .document-list-column {
462
+ min-width: 0;
463
+ display: flex;
464
+ flex-direction: column;
465
+ background: color-mix(in srgb, var(--surface-soft) 45%, var(--surface));
466
+ }
467
+ .document-list-column { background: var(--surface); }
468
+ .is-resizing-columns,
469
+ .is-resizing-columns * { cursor: col-resize !important; user-select: none !important; }
470
+ .column-header {
471
+ min-height: 63px;
472
+ display: flex;
473
+ align-items: center;
474
+ justify-content: space-between;
475
+ gap: 8px;
476
+ border-bottom: 1px solid var(--border);
477
+ padding: 11px 13px;
478
+ }
479
+ .column-header > div { min-width: 0; }
480
+ .column-header h2 { margin: 0; overflow: hidden; font-size: 13px; text-overflow: ellipsis; white-space: nowrap; }
481
+ .column-header span { display: block; margin-top: 2px; color: var(--text-tertiary); font-size: 11px; }
482
+ .library-list,
483
+ .document-list { min-height: 0; flex: 1; overflow: auto; padding: 7px; outline-offset: -3px; }
484
+ .library-row,
485
+ .document-row {
486
+ position: relative;
487
+ width: 100%;
488
+ min-height: 54px;
489
+ display: grid;
490
+ grid-template-columns: auto minmax(0, 1fr) auto;
491
+ align-items: center;
492
+ gap: 9px;
493
+ border: 0;
494
+ border-radius: 9px;
495
+ padding: 8px 9px;
496
+ background: transparent;
497
+ color: var(--text);
498
+ text-align: left;
499
+ }
500
+ .library-row:hover,
501
+ .document-row:hover { background: var(--surface-hover); }
502
+ .library-row[aria-selected="true"],
503
+ .document-row[aria-selected="true"] {
504
+ background: var(--accent-soft);
505
+ color: var(--text);
506
+ box-shadow: inset 3px 0 0 var(--accent);
507
+ }
508
+ .library-dot { width: 9px; height: 9px; border-radius: 50%; background: var(--accent); box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 12%, transparent); }
509
+ .library-row-copy,
510
+ .document-row-copy { min-width: 0; }
511
+ .library-row-copy strong,
512
+ .document-row-copy strong,
513
+ .library-row-copy small,
514
+ .document-row-copy small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
515
+ .library-row-copy strong,
516
+ .document-row-copy strong { font-size: 12px; }
517
+ .library-row-copy small,
518
+ .document-row-copy small { margin-top: 2px; color: var(--text-tertiary); font-size: 10px; font-weight: 400; }
519
+ .library-count,
520
+ .document-entry-count { min-width: 22px; color: var(--text-tertiary); font-size: 10px; text-align: center; font-variant-numeric: tabular-nums; }
521
+ .document-icon { width: 22px; color: var(--accent); font-size: 16px; text-align: center; }
522
+ .column-footer { border-top: 1px solid var(--border); padding: 8px; }
523
+ .document-empty { display: grid; min-height: 180px; place-items: center; padding: 20px; color: var(--text-tertiary); font-size: 12px; text-align: center; }
524
+ .document-reader { min-width: 0; min-height: 0; display: grid; grid-template-rows: auto minmax(0, 1fr) auto; background: var(--surface); }
525
+ .document-reader-empty { place-items: center; display: grid; padding: 30px; color: var(--text-tertiary); text-align: center; }
526
+ .document-reader-empty strong { color: var(--text-secondary); }
527
+ .document-reader-empty p { margin: 5px 0 0; }
528
+ .reader-toolbar {
529
+ min-height: 63px;
530
+ display: flex;
531
+ align-items: center;
532
+ justify-content: space-between;
533
+ gap: 12px;
534
+ border-bottom: 1px solid var(--border);
535
+ padding: 9px 16px;
536
+ }
537
+ .reader-title { min-width: 0; }
538
+ .reader-title span,
539
+ .reader-title strong { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
540
+ .reader-title span { color: var(--text-tertiary); font-size: 10px; }
541
+ .reader-title strong { margin-top: 2px; font-size: 12px; }
542
+ .reader-actions { display: flex; align-items: center; gap: 7px; }
543
+ .markdown-document {
544
+ min-width: 0;
545
+ overflow: auto;
546
+ padding: clamp(28px, 5vw, 64px) clamp(28px, 7vw, 84px) 72px;
547
+ font-size: 15px;
548
+ line-height: 1.75;
549
+ }
550
+ .markdown-document > * { max-width: 760px; margin-right: auto; margin-left: auto; }
551
+ .markdown-document h1 { margin-top: 0; margin-bottom: 28px; font-size: clamp(25px, 3vw, 34px); line-height: 1.2; letter-spacing: -.035em; }
552
+ .markdown-document h2 { margin-top: 38px; margin-bottom: 11px; padding-bottom: 8px; border-bottom: 1px solid var(--border); font-size: 19px; line-height: 1.3; letter-spacing: -.02em; }
553
+ .markdown-document h3 { margin-top: 28px; margin-bottom: 8px; font-size: 16px; }
554
+ .markdown-document p { margin-top: 0; margin-bottom: 16px; color: var(--text-secondary); white-space: pre-wrap; overflow-wrap: anywhere; }
555
+ .markdown-document blockquote { margin-top: 0; margin-bottom: 22px; border-left: 3px solid var(--accent); border-radius: 0 8px 8px 0; padding: 10px 14px; background: var(--accent-soft); color: var(--text-secondary); }
556
+ .markdown-document ul { margin-top: 0; margin-bottom: 18px; padding-left: 23px; color: var(--text-secondary); }
557
+ .markdown-document pre { overflow: auto; border: 1px solid var(--border); border-radius: 10px; padding: 14px; background: var(--surface-soft); font-size: 12px; line-height: 1.6; }
558
+ .markdown-metadata { display: block; margin-top: -7px; margin-bottom: 22px; color: var(--text-tertiary); font-size: 11px; }
559
+ .reader-footer { display: flex; justify-content: space-between; gap: 12px; border-top: 1px solid var(--border); padding: 8px 16px; color: var(--text-tertiary); font-size: 10px; }
560
+
561
+ .list { display: grid; gap: 8px; }
562
+ .list-row {
563
+ min-width: 0;
564
+ display: grid;
565
+ grid-template-columns: minmax(0, 1fr) auto;
566
+ gap: 14px;
567
+ border-radius: 10px;
568
+ padding: 12px;
569
+ transition: background .15s ease;
570
+ }
571
+ .list-row:hover { background: var(--surface-hover); }
572
+ .list-main { min-width: 0; }
573
+ .list-title { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
574
+ .list-title strong { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
575
+ .list-summary { display: -webkit-box; overflow: hidden; margin: 5px 0 0; color: var(--text-secondary); font-size: 13px; -webkit-box-orient: vertical; -webkit-line-clamp: 2; }
576
+ .list-meta { display: flex; flex-wrap: wrap; gap: 6px 12px; margin-top: 7px; color: var(--text-tertiary); font-size: 11px; }
577
+ .list-actions { display: flex; align-items: flex-start; gap: 4px; }
578
+
579
+ .badge { display: inline-flex; align-items: center; gap: 5px; min-height: 21px; border-radius: 6px; padding: 2px 7px; background: var(--surface-soft); color: var(--text-secondary); font-size: 11px; font-weight: 600; white-space: nowrap; }
580
+ .badge.accent { background: var(--accent-soft); color: var(--accent); }
581
+ .badge.success { background: var(--success-soft); color: var(--success); }
582
+ .badge.warning { background: var(--warning-soft); color: var(--warning); }
583
+ .badge.danger { background: var(--danger-soft); color: var(--danger); }
584
+
585
+ .card-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
586
+ .knowledge-card { min-width: 0; display: flex; flex-direction: column; border: 1px solid var(--border); border-radius: var(--radius); padding: 17px; background: var(--surface); }
587
+ .knowledge-card:hover { border-color: var(--border-strong); box-shadow: 0 5px 20px rgb(20 25 35 / 5%); }
588
+ .knowledge-card h3 { margin: 11px 0 7px; font-size: 15px; line-height: 1.4; }
589
+ .knowledge-card p { display: -webkit-box; overflow: hidden; margin: 0; color: var(--text-secondary); line-height: 1.65; -webkit-box-orient: vertical; -webkit-line-clamp: 3; }
590
+ .card-top, .card-footer { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
591
+ .card-footer { margin-top: auto; padding-top: 16px; }
592
+ .card-actions { display: flex; gap: 4px; }
593
+ .tag-row { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 12px; }
594
+ .tag { border-radius: 5px; padding: 2px 6px; background: var(--surface-soft); color: var(--text-tertiary); font-size: 10px; }
595
+
596
+ .tabs { display: inline-flex; gap: 3px; border-radius: 10px; padding: 3px; background: var(--surface-soft); }
597
+ .tab { min-height: 33px; border: 0; border-radius: 7px; padding: 5px 12px; background: transparent; color: var(--text-secondary); font-size: 12px; font-weight: 600; }
598
+ .tab[aria-selected="true"] { background: var(--surface); color: var(--text); box-shadow: 0 1px 4px rgb(0 0 0 / 7%); }
599
+
600
+ .candidate-list { display: grid; gap: 13px; }
601
+ .candidate { border: 1px solid var(--border); border-radius: var(--radius); background: var(--surface); }
602
+ .candidate-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 14px; padding: 17px 18px 12px; }
603
+ .candidate-header h3 { margin: 8px 0 0; font-size: 15px; }
604
+ .candidate-body { display: grid; grid-template-columns: minmax(0, 1fr) minmax(240px, .55fr); gap: 20px; padding: 0 18px 17px; }
605
+ .candidate-content { margin: 0; color: var(--text-secondary); white-space: pre-wrap; }
606
+ .candidate-reason { border-left: 2px solid var(--border-strong); padding-left: 13px; color: var(--text-secondary); font-size: 12px; }
607
+ .candidate-reason strong { display: block; margin-bottom: 5px; color: var(--text-tertiary); font-size: 10px; text-transform: uppercase; letter-spacing: .08em; }
608
+ .candidate-target { display: block; margin-bottom: 13px; border-radius: 7px; padding: 7px 9px; background: var(--accent-soft); color: var(--accent); font-weight: 600; }
609
+ .candidate-footer { display: flex; align-items: center; justify-content: space-between; gap: 14px; border-top: 1px solid var(--border); padding: 11px 18px; background: var(--surface-hover); }
610
+ .candidate-footer small { color: var(--text-tertiary); }
611
+ .candidate-footer div { display: flex; gap: 7px; }
612
+
613
+ .empty-state { display: grid; place-items: center; min-height: 230px; border: 1px dashed var(--border-strong); border-radius: var(--radius); padding: 28px; text-align: center; }
614
+ .empty-state strong { font-size: 15px; }
615
+ .empty-state p { max-width: 420px; margin: 7px 0 0; color: var(--text-tertiary); }
616
+ .empty-state .button { margin-top: 16px; }
617
+
618
+ .loading { display: grid; place-items: center; min-height: 240px; color: var(--text-tertiary); }
619
+ .spinner { width: 22px; height: 22px; border: 2px solid var(--border); border-top-color: var(--accent); border-radius: 50%; animation: spin .8s linear infinite; }
620
+ @keyframes spin { to { transform: rotate(360deg); } }
621
+
622
+ .error-state { border: 1px solid color-mix(in srgb, var(--danger) 30%, var(--border)); border-radius: var(--radius); padding: 18px; background: var(--danger-soft); color: var(--danger); }
623
+ .error-state p { margin: 0 0 12px; }
624
+
625
+ .token-list { display: grid; gap: 8px; }
626
+ .token-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 14px; align-items: center; border-bottom: 1px solid var(--border); padding: 13px 6px; }
627
+ .token-row:last-child { border-bottom: 0; }
628
+ .token-row strong { display: block; }
629
+ .token-row small { color: var(--text-tertiary); }
630
+ .permissions { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 6px; }
631
+
632
+ .dialog-backdrop { position: fixed; inset: 0; z-index: 100; display: grid; place-items: center; padding: 20px; background: rgb(8 10 15 / 52%); backdrop-filter: blur(4px); }
633
+ .dialog {
634
+ width: min(100%, 640px);
635
+ max-height: min(88vh, 820px);
636
+ display: flex;
637
+ flex-direction: column;
638
+ border: 1px solid var(--border-strong);
639
+ border-radius: 18px;
640
+ background: var(--surface-raised);
641
+ box-shadow: 0 28px 80px rgb(0 0 0 / 24%);
642
+ }
643
+ .dialog.narrow { width: min(100%, 460px); }
644
+ .dialog-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; border-bottom: 1px solid var(--border); padding: 18px 20px; }
645
+ .dialog-header h2 { margin: 0; font-size: 17px; }
646
+ .dialog-header p { margin: 4px 0 0; color: var(--text-tertiary); font-size: 12px; }
647
+ .dialog-body { overflow: auto; padding: 20px; }
648
+ .dialog-footer { display: flex; justify-content: flex-end; gap: 8px; border-top: 1px solid var(--border); padding: 13px 20px; }
649
+ .form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
650
+ .form-grid .span-2 { grid-column: 1 / -1; }
651
+ .range-row { display: flex; align-items: center; gap: 10px; }
652
+ .range-row input { flex: 1; }
653
+ .range-value { min-width: 42px; text-align: right; font-variant-numeric: tabular-nums; }
654
+ .layout-editor { display: grid; gap: 18px; }
655
+ .layout-visibility { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
656
+ .layout-range-label { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
657
+ .layout-range-label label { color: var(--text-secondary); font-size: 13px; font-weight: 600; }
658
+ .layout-editor input[type="range"] { width: 100%; accent-color: var(--accent); }
659
+ .layout-editor-note { display: flex; align-items: center; justify-content: space-between; gap: 16px; border-top: 1px solid var(--border); padding-top: 14px; color: var(--text-tertiary); font-size: 12px; }
660
+ .check-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
661
+ .check-option { display: flex; align-items: center; gap: 8px; border: 1px solid var(--border); border-radius: 8px; padding: 9px; }
662
+
663
+ .history { display: grid; gap: 12px; }
664
+ .history-item { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 12px; }
665
+ .history-line { position: relative; display: flex; justify-content: center; width: 18px; }
666
+ .history-line::before { content: ""; position: absolute; top: 19px; bottom: -20px; width: 1px; background: var(--border); }
667
+ .history-item:last-child .history-line::before { display: none; }
668
+ .history-dot { width: 9px; height: 9px; margin-top: 6px; border: 2px solid var(--surface); border-radius: 50%; background: var(--accent); box-shadow: 0 0 0 1px var(--accent); }
669
+ .history-content { min-width: 0; }
670
+ .history-content strong { display: block; }
671
+ .history-content small { color: var(--text-tertiary); }
672
+ .history-content p { margin: 5px 0 0; color: var(--text-secondary); }
673
+
674
+ .secret-box { border: 1px solid color-mix(in srgb, var(--warning) 35%, var(--border)); border-radius: 10px; padding: 13px; background: var(--warning-soft); }
675
+ .secret-box strong { color: var(--warning); }
676
+ .secret-value { display: flex; gap: 8px; margin-top: 9px; }
677
+ .secret-value code { min-width: 0; flex: 1; overflow-wrap: anywhere; border-radius: 7px; padding: 8px; background: var(--surface); color: var(--text); }
678
+
679
+ .toast-region { position: fixed; right: 20px; bottom: 20px; z-index: 200; display: grid; gap: 8px; pointer-events: none; }
680
+ .toast { max-width: 360px; border: 1px solid var(--border-strong); border-radius: 11px; padding: 11px 14px; background: var(--surface-raised); color: var(--text); box-shadow: var(--shadow); animation: toast-in .18s ease-out; }
681
+ .toast.error { border-color: color-mix(in srgb, var(--danger) 45%, var(--border)); color: var(--danger); }
682
+ @keyframes toast-in { from { opacity: 0; transform: translateY(7px); } }
683
+
684
+ @media (max-width: 980px) {
685
+ .metrics { grid-template-columns: repeat(2, minmax(0, 1fr)); }
686
+ .dashboard-grid { grid-template-columns: 1fr; }
687
+ .candidate-body { grid-template-columns: 1fr; }
688
+ .mount-manager-toolbar .tabs { width: 100%; }
689
+ .document-browser { grid-template-columns: min(var(--document-list-width, 280px), 42%) 8px minmax(0, 1fr); }
690
+ .knowledge-library-column { display: none; }
691
+ .column-resizer[data-column="library"] { display: none; }
692
+ .compact-library-picker { display: block; width: min(220px, 28vw); }
693
+ .document-pane-toggles .pane-toggle-button[data-pane="library"] { display: none; }
694
+ }
695
+
696
+ @media (min-width: 981px) {
697
+ .document-browser[data-library-hidden="true"] .knowledge-library-column,
698
+ .document-browser[data-library-hidden="true"] .column-resizer[data-column="library"],
699
+ .document-browser[data-document-list-hidden="true"] .document-list-column,
700
+ .document-browser[data-document-list-hidden="true"] .column-resizer[data-column="documentList"] { display: none; }
701
+ .document-browser[data-library-hidden="true"][data-document-list-hidden="false"] { grid-template-columns: min(var(--document-list-width, 280px), 34%) 8px minmax(320px, 1fr); }
702
+ .document-browser[data-library-hidden="false"][data-document-list-hidden="true"] { grid-template-columns: min(var(--library-width, 220px), 28%) 8px minmax(320px, 1fr); }
703
+ .document-browser[data-library-hidden="true"][data-document-list-hidden="true"] { grid-template-columns: minmax(320px, 1fr); }
704
+ }
705
+
706
+ @media (min-width: 761px) and (max-width: 980px) {
707
+ .document-browser[data-document-list-hidden="true"] { grid-template-columns: minmax(320px, 1fr); }
708
+ .document-browser[data-document-list-hidden="true"] .document-list-column,
709
+ .document-browser[data-document-list-hidden="true"] .column-resizer[data-column="documentList"] { display: none; }
710
+ }
711
+
712
+ @media (min-width: 761px) {
713
+ .app-shell[data-sidebar-hidden="true"] { grid-template-columns: 0 0 minmax(0, 1fr); }
714
+ .app-shell[data-sidebar-hidden="true"] > .sidebar,
715
+ .app-shell[data-sidebar-hidden="true"] > .app-sidebar-resizer { display: none; }
716
+ }
717
+
718
+ @media (max-width: 760px) {
719
+ :root { --sidebar-width: 0px; }
720
+ .app-shell { display: block; }
721
+ .app-sidebar-resizer { display: none; }
722
+ .pane-toggle-button[data-pane="main"],
723
+ .document-pane-toggles { display: none; }
724
+ .sidebar { position: fixed; z-index: 40; width: min(82vw, 270px); transform: translateX(-105%); box-shadow: var(--shadow); transition: transform .2s ease; }
725
+ .app-shell[data-menu-open="true"] .sidebar { transform: translateX(0); }
726
+ .app-shell[data-menu-open="true"]::after { content: ""; position: fixed; inset: 0; z-index: 30; background: rgb(0 0 0 / 35%); }
727
+ .mobile-menu { display: inline-grid; place-items: center; }
728
+ .topbar { min-height: 64px; padding: 10px 16px; }
729
+ .topbar-title { gap: 10px; }
730
+ .topbar h1 { font-size: 17px; }
731
+ .topbar p { display: none; }
732
+ .page { padding: 22px 16px 42px; }
733
+ .document-page-toolbar { flex-wrap: wrap; }
734
+ .document-page-toolbar .search-box { flex-basis: 100%; }
735
+ .document-browser { height: calc(100dvh - 210px); grid-template-columns: 1fr; }
736
+ .document-list-column { display: none; }
737
+ .column-resizer { display: none; }
738
+ .reader-toolbar { padding: 9px 12px; }
739
+ .reader-title { display: none; }
740
+ .mobile-document-picker { display: block; min-width: 0; flex: 1; }
741
+ .markdown-document { padding: 28px 22px 60px; }
742
+ .card-grid { grid-template-columns: 1fr; }
743
+ .base-grid { grid-template-columns: 1fr; }
744
+ .mount-target-line { grid-template-columns: auto minmax(0, 1fr); }
745
+ .mount-target-line .field-hint { grid-column: 1 / -1; }
746
+ .mount-list-row { grid-template-columns: 28px minmax(0, 1fr); }
747
+ .mount-list-row > .button { grid-column: 2; justify-self: start; }
748
+ .mount-bulk-bar { align-items: stretch; flex-direction: column; }
749
+ .mount-bulk-actions { justify-content: stretch; }
750
+ .mount-bulk-actions .button { flex: 1 1 auto; }
751
+ .candidate-header, .candidate-footer { align-items: flex-start; flex-direction: column; }
752
+ .candidate-footer { gap: 9px; }
753
+ .layout-editor-note { align-items: flex-start; flex-direction: column; }
754
+ .layout-visibility { grid-template-columns: 1fr; }
755
+ }
756
+
757
+ @media (max-width: 520px) {
758
+ body { font-size: 13px; }
759
+ .login-page { padding: 16px; }
760
+ .login-card { padding: 24px; }
761
+ .metrics { grid-template-columns: 1fr 1fr; gap: 9px; }
762
+ .metric { padding: 14px; }
763
+ .metric-value { font-size: 23px; }
764
+ .toolbar { align-items: stretch; }
765
+ .toolbar .select { min-width: 0; flex: 1; }
766
+ .topbar-actions .button:not(.primary) { display: none; }
767
+ .topbar-actions .button.primary { width: 38px; overflow: hidden; padding: 0; font-size: 0; }
768
+ .topbar-actions .button.primary::before { content: "+"; font-size: 18px; }
769
+ .form-grid { grid-template-columns: 1fr; }
770
+ .form-grid .span-2 { grid-column: auto; }
771
+ .mount-context { grid-template-columns: 1fr; }
772
+ .mount-delete { align-items: stretch; flex-direction: column; }
773
+ .dialog-backdrop { align-items: end; padding: 0; }
774
+ .dialog, .dialog.narrow { width: 100%; max-height: 94vh; border-radius: 18px 18px 0 0; }
775
+ .secret-value { flex-direction: column; }
776
+ .reader-actions .badge { display: none; }
777
+ .reader-footer { flex-direction: column; gap: 2px; }
778
+ }
779
+
780
+ @media (prefers-reduced-motion: reduce) {
781
+ *, *::before, *::after { scroll-behavior: auto !important; animation-duration: .01ms !important; transition-duration: .01ms !important; }
782
+ }
783
+
784
+ @media (forced-colors: active) {
785
+ .status-dot, .history-dot { forced-color-adjust: none; }
786
+ }