@lemoncat7/dsh-knowledge 0.7.3 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/README.md +16 -15
  2. package/cordis.patch.yml +0 -1
  3. package/docs/architecture.md +37 -19
  4. package/docs/document-knowledge-design.zh-CN.md +2 -2
  5. package/docs/requirements.md +9 -5
  6. package/lib/api.js +5 -1
  7. package/lib/api.js.map +1 -1
  8. package/lib/client.d.ts +6 -0
  9. package/lib/client.d.ts.map +1 -0
  10. package/lib/client.js +207 -170
  11. package/lib/client.js.map +3 -3
  12. package/lib/config.d.ts +2 -0
  13. package/lib/config.d.ts.map +1 -1
  14. package/lib/config.js +5 -3
  15. package/lib/config.js.map +1 -1
  16. package/lib/documents/markdown.d.ts +33 -0
  17. package/lib/documents/markdown.d.ts.map +1 -0
  18. package/lib/documents/markdown.js +91 -0
  19. package/lib/documents/markdown.js.map +1 -0
  20. package/lib/documents/path.d.ts +4 -0
  21. package/lib/documents/path.d.ts.map +1 -0
  22. package/lib/documents/path.js +11 -0
  23. package/lib/documents/path.js.map +1 -0
  24. package/lib/documents/store.d.ts +32 -0
  25. package/lib/documents/store.d.ts.map +1 -0
  26. package/lib/documents/store.js +272 -0
  27. package/lib/documents/store.js.map +1 -0
  28. package/lib/domain.d.ts +2 -0
  29. package/lib/domain.d.ts.map +1 -1
  30. package/lib/domain.js +6 -0
  31. package/lib/domain.js.map +1 -1
  32. package/lib/extraction.d.ts.map +1 -1
  33. package/lib/extraction.js +210 -73
  34. package/lib/extraction.js.map +1 -1
  35. package/lib/index.d.ts +1 -1
  36. package/lib/index.d.ts.map +1 -1
  37. package/lib/index.js +4 -4
  38. package/lib/index.js.map +1 -1
  39. package/lib/local-provider.d.ts +2 -0
  40. package/lib/local-provider.d.ts.map +1 -1
  41. package/lib/local-provider.js +145 -79
  42. package/lib/local-provider.js.map +1 -1
  43. package/lib/recall.d.ts +7 -2
  44. package/lib/recall.d.ts.map +1 -1
  45. package/lib/recall.js +46 -30
  46. package/lib/recall.js.map +1 -1
  47. package/lib/retrieval.d.ts +14 -4
  48. package/lib/retrieval.d.ts.map +1 -1
  49. package/lib/retrieval.js +133 -25
  50. package/lib/retrieval.js.map +1 -1
  51. package/lib/theme-bridge.d.ts +23 -0
  52. package/lib/theme-bridge.d.ts.map +1 -0
  53. package/lib/theme-bridge.js +72 -0
  54. package/lib/theme-bridge.js.map +1 -0
  55. package/lib/tools.d.ts.map +1 -1
  56. package/lib/tools.js +165 -7
  57. package/lib/tools.js.map +1 -1
  58. package/lib/web-markdown-preview.d.ts +3 -0
  59. package/lib/web-markdown-preview.d.ts.map +1 -0
  60. package/lib/web-markdown-preview.js +24 -0
  61. package/lib/web-markdown-preview.js.map +1 -0
  62. package/lib/web.d.ts.map +1 -1
  63. package/lib/web.js +1 -0
  64. package/lib/web.js.map +1 -1
  65. package/package.json +16 -3
  66. package/web/app.js +326 -359
  67. package/web/index.html +1 -0
  68. package/web/markdown-preview.js +72 -0
  69. package/web/styles.css +177 -200
package/web/styles.css CHANGED
@@ -179,9 +179,9 @@ button:disabled { cursor: not-allowed; opacity: .56; }
179
179
  height: 100dvh;
180
180
  display: flex;
181
181
  flex-direction: column;
182
- padding: 15px 10px 12px;
182
+ padding: 16px 12px 12px;
183
183
  border-right: 1px solid color-mix(in srgb, var(--border) 72%, transparent);
184
- background: color-mix(in srgb, var(--surface) 92%, var(--bg));
184
+ background: color-mix(in srgb, var(--surface) 88%, var(--bg));
185
185
  }
186
186
 
187
187
  .brand { display: flex; align-items: center; min-height: 49px; padding: 2px 10px 13px; }
@@ -189,7 +189,7 @@ button:disabled { cursor: not-allowed; opacity: .56; }
189
189
  .brand strong { display: block; margin-top: 1px; font-size: 16px; line-height: 1.2; font-weight: 680; letter-spacing: -.02em; }
190
190
  .brand span { display: block; color: var(--text-tertiary); font-size: 9px; font-weight: 650; letter-spacing: .075em; text-transform: uppercase; }
191
191
 
192
- .nav { display: grid; gap: 12px; }
192
+ .nav { display: grid; gap: 14px; }
193
193
  .nav-group { display: grid; gap: 2px; }
194
194
  .nav-group + .nav-group { border-top: 1px solid color-mix(in srgb, var(--border) 72%, transparent); padding-top: 10px; }
195
195
  .nav-group-label { padding: 0 10px 4px; color: var(--text-tertiary); font-size: 10px; font-weight: 600; letter-spacing: .025em; }
@@ -223,8 +223,7 @@ button:disabled { cursor: not-allowed; opacity: .56; }
223
223
  .status-dot { width: 6px; height: 6px; flex: none; border-radius: 50%; background: var(--success); box-shadow: 0 0 0 2px color-mix(in srgb, var(--success) 12%, transparent); }
224
224
  .sidebar-footer .button { justify-self: start; }
225
225
 
226
- .app-sidebar-resizer,
227
- .column-resizer {
226
+ .app-sidebar-resizer {
228
227
  position: relative;
229
228
  z-index: 12;
230
229
  width: 6px;
@@ -240,16 +239,13 @@ button:disabled { cursor: not-allowed; opacity: .56; }
240
239
  height: 100vh;
241
240
  height: 100dvh;
242
241
  }
243
- .app-sidebar-resizer::before,
244
- .column-resizer::before {
242
+ .app-sidebar-resizer::before {
245
243
  content: "";
246
244
  position: absolute;
247
245
  inset: 0 -7px;
248
246
  }
249
- .app-sidebar-resizer::after,
250
- .column-resizer::after { content: ""; position: absolute; inset: 0 auto 0 50%; width: 1px; background: var(--border); transform: translateX(-50%); }
251
- .app-sidebar-resizer span,
252
- .column-resizer span {
247
+ .app-sidebar-resizer::after { content: ""; position: absolute; inset: 0 auto 0 50%; width: 1px; background: var(--border); transform: translateX(-50%); }
248
+ .app-sidebar-resizer span {
253
249
  position: absolute;
254
250
  top: 50%;
255
251
  left: 50%;
@@ -270,15 +266,9 @@ button:disabled { cursor: not-allowed; opacity: .56; }
270
266
  }
271
267
  .app-sidebar-resizer:hover span,
272
268
  .app-sidebar-resizer:focus-visible span,
273
- .app-sidebar-resizer.is-dragging span,
274
- .column-resizer:hover span,
275
- .column-resizer:focus-visible span,
276
- .column-resizer.is-dragging span { opacity: 1; background: var(--accent); }
269
+ .app-sidebar-resizer.is-dragging span { opacity: 1; background: var(--accent); }
277
270
  .app-sidebar-resizer:hover,
278
- .app-sidebar-resizer.is-dragging,
279
- .column-resizer:hover,
280
- .column-resizer.is-dragging { background: color-mix(in srgb, var(--accent) 8%, transparent); }
281
- .column-resizer:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
271
+ .app-sidebar-resizer.is-dragging { background: color-mix(in srgb, var(--accent) 8%, transparent); }
282
272
  .main { min-width: 0; grid-column: 3; }
283
273
  .topbar {
284
274
  position: sticky;
@@ -299,36 +289,6 @@ button:disabled { cursor: not-allowed; opacity: .56; }
299
289
  .topbar-title { display: flex; align-items: center; gap: 12px; }
300
290
  .mobile-menu { display: none; }
301
291
  .topbar-actions { display: flex; align-items: center; gap: 8px; }
302
- .document-column-controls {
303
- flex: none;
304
- display: inline-flex;
305
- align-items: center;
306
- gap: 2px;
307
- border: 1px solid var(--border);
308
- border-radius: 9px;
309
- padding: 2px;
310
- background: color-mix(in srgb, var(--surface-soft) 72%, transparent);
311
- }
312
- .document-column-controls-label { padding: 0 7px 0 8px; color: var(--text-tertiary); font-size: 10px; font-weight: 550; }
313
- .document-column-control {
314
- min-height: 30px;
315
- border: 0;
316
- border-radius: 7px;
317
- padding: 5px 10px;
318
- background: transparent;
319
- color: var(--text-tertiary);
320
- font-size: 11px;
321
- font-weight: 600;
322
- white-space: nowrap;
323
- transition: background .14s ease, color .14s ease, box-shadow .14s ease;
324
- }
325
- .document-column-control:hover { background: var(--surface-hover); color: var(--text); }
326
- .document-column-control:active { transform: translateY(1px); }
327
- .document-column-control[aria-pressed="true"] {
328
- background: var(--surface-raised);
329
- color: var(--text);
330
- box-shadow: 0 1px 4px rgb(20 25 35 / 9%);
331
- }
332
292
  .pane-toggle-group {
333
293
  flex: none;
334
294
  display: inline-flex;
@@ -352,6 +312,7 @@ button:disabled { cursor: not-allowed; opacity: .56; }
352
312
  background: transparent;
353
313
  color: var(--text-tertiary);
354
314
  }
315
+ .pane-toggle-button[data-pane="library"] { display: none; }
355
316
  .pane-toggle-button:hover { background: var(--surface-hover); color: var(--text); }
356
317
  .pane-toggle-button[aria-pressed="true"] {
357
318
  background: var(--surface-raised);
@@ -397,6 +358,17 @@ button:disabled { cursor: not-allowed; opacity: .56; }
397
358
  }
398
359
 
399
360
  .page { width: min(100%, 1440px); margin: 0 auto; padding: 28px clamp(18px, 3vw, 38px) 64px; }
361
+ .app-shell[data-view="entries"] .topbar { min-height: 68px; padding-block: 11px; }
362
+ .app-shell[data-view="entries"] .topbar h1 { font-size: 19px; }
363
+ .app-shell[data-view="entries"] .page {
364
+ width: 100%;
365
+ max-width: none;
366
+ padding: 16px clamp(14px, 2vw, 24px) 22px;
367
+ }
368
+ .app-shell[data-view="entries"] .note-workspace {
369
+ height: calc(100dvh - 148px);
370
+ min-height: 520px;
371
+ }
400
372
 
401
373
  .section-heading { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; margin-bottom: 16px; }
402
374
  .section-heading h2 { margin: 0; font-size: 16px; }
@@ -461,11 +433,19 @@ button:disabled { cursor: not-allowed; opacity: .56; }
461
433
  .knowledge-base-toolbar { display: flex; align-items: center; gap: 16px; margin-bottom: 14px; }
462
434
  .base-search { max-width: 560px; }
463
435
  .base-result-summary { margin-left: auto; color: var(--text-tertiary); font-size: 12px; white-space: nowrap; }
464
- .base-grid { display: grid; overflow: hidden; border: 1px solid var(--border); border-radius: var(--radius); background: var(--surface); }
436
+ .base-grid {
437
+ display: grid;
438
+ grid-template-columns: minmax(210px, .85fr) minmax(240px, 1.25fr) minmax(170px, .7fr) 244px;
439
+ overflow: hidden;
440
+ border: 1px solid var(--border);
441
+ border-radius: var(--radius);
442
+ background: var(--surface);
443
+ }
465
444
  .base-card {
466
445
  min-width: 0;
446
+ grid-column: 1 / -1;
467
447
  display: grid;
468
- grid-template-columns: minmax(210px, .85fr) minmax(240px, 1.25fr) minmax(170px, .7fr) auto;
448
+ grid-template-columns: subgrid;
469
449
  grid-template-rows: auto auto;
470
450
  align-items: center;
471
451
  gap: 8px 22px;
@@ -477,13 +457,14 @@ button:disabled { cursor: not-allowed; opacity: .56; }
477
457
  .base-card:last-child { border-bottom: 0; }
478
458
  .base-card:hover { background: var(--surface-hover); }
479
459
  .base-card.is-archived { opacity: .78; }
480
- .base-card-header { grid-column: 1; grid-row: 1 / span 2; display: flex; align-items: center; justify-content: space-between; gap: 12px; }
460
+ .base-card-header { min-width: 0; grid-column: 1; grid-row: 1 / span 2; display: flex; align-items: center; justify-content: space-between; gap: 12px; }
481
461
  .base-card-identity { min-width: 0; display: flex; align-items: center; gap: 11px; }
482
462
  .base-card-identity > div { min-width: 0; }
463
+ .base-card-header > .badge { flex: none; }
483
464
  .base-symbol { width: 38px; height: 38px; flex: none; display: grid; place-items: center; border-radius: 11px; background: var(--accent-soft); color: var(--accent); font-size: 14px; font-weight: 700; }
484
465
  .base-card h3 { overflow: hidden; margin: 0; font-size: 14px; text-overflow: ellipsis; white-space: nowrap; }
485
466
  .base-card small { display: block; overflow: hidden; margin-top: 3px; color: var(--text-tertiary); text-overflow: ellipsis; white-space: nowrap; }
486
- .base-description { grid-column: 2; grid-row: 1; display: -webkit-box; overflow: hidden; margin: 0; color: var(--text-secondary); font-size: 13px; line-height: 1.45; -webkit-box-orient: vertical; -webkit-line-clamp: 2; }
467
+ .base-description { min-height: 38px; grid-column: 2; grid-row: 1; display: -webkit-box; overflow: hidden; margin: 0; color: var(--text-secondary); font-size: 13px; line-height: 1.45; -webkit-box-orient: vertical; -webkit-line-clamp: 2; }
487
468
  .base-card-tags { grid-column: 2; grid-row: 2; display: flex; flex-wrap: wrap; gap: 5px; }
488
469
  .base-card-meta { grid-column: 3; grid-row: 1 / span 2; display: grid; gap: 7px; color: var(--text-secondary); font-size: 11px; }
489
470
  .base-card-meta span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
@@ -530,129 +511,109 @@ button:disabled { cursor: not-allowed; opacity: .56; }
530
511
  .search-symbol { position: absolute; top: 50%; left: 12px; width: 18px; height: 18px; transform: translateY(-50%); color: var(--text-tertiary); pointer-events: none; }
531
512
  .toolbar .select { width: auto; min-width: 132px; }
532
513
 
533
- .document-page { min-width: 0; }
534
- .document-page-toolbar {
535
- display: flex;
536
- align-items: center;
537
- gap: 10px;
538
- margin-bottom: 14px;
539
- }
540
- .document-global-search { min-width: 240px; max-width: 620px; }
541
- .document-toolbar-actions { margin-left: auto; display: flex; align-items: center; gap: 8px; }
542
514
  .legacy-entries-toolbar { justify-content: space-between; }
543
- .compact-library-picker,
544
- .mobile-document-picker { display: none; }
545
- .document-browser {
515
+ .note-workspace {
546
516
  min-width: 0;
547
- height: clamp(600px, calc(100dvh - 188px), 860px);
517
+ height: clamp(600px, calc(100dvh - 188px), 960px);
548
518
  display: grid;
549
- grid-template-columns: min(var(--library-width, 220px), 28%) 6px min(var(--document-list-width, 280px), 34%) 6px minmax(320px, 1fr);
519
+ grid-template-columns: clamp(240px, 24vw, 320px) minmax(0, 1fr);
550
520
  overflow: hidden;
551
521
  border: 1px solid var(--border);
552
- border-radius: 16px;
522
+ border-radius: 14px;
553
523
  background: var(--surface);
554
- box-shadow: 0 10px 32px rgb(20 25 35 / 5%);
555
- }
556
- .knowledge-library-column,
557
- .document-list-column {
558
- min-width: 0;
559
- display: flex;
560
- flex-direction: column;
561
- background: color-mix(in srgb, var(--surface-soft) 45%, var(--surface));
562
- }
563
- .document-list-column { background: var(--surface); }
564
- .is-resizing-columns,
565
- .is-resizing-columns * { cursor: col-resize !important; user-select: none !important; }
566
- .column-header {
567
- min-height: 63px;
568
- display: flex;
569
- align-items: center;
570
- justify-content: space-between;
571
- gap: 8px;
572
- border-bottom: 1px solid var(--border);
573
- padding: 11px 13px;
574
- }
575
- .column-header > div { min-width: 0; }
576
- .column-header h2 { margin: 0; overflow: hidden; font-size: 14px; text-overflow: ellipsis; white-space: nowrap; }
577
- .column-header span { display: block; margin-top: 2px; color: var(--text-tertiary); font-size: 11px; }
578
- .library-list,
579
- .document-list { min-height: 0; flex: 1; overflow: auto; padding: 7px; outline-offset: -3px; }
580
- .library-row,
581
- .document-row {
582
- position: relative;
524
+ box-shadow: 0 14px 38px color-mix(in srgb, var(--text) 5%, transparent);
525
+ }
526
+ .note-tree-panel { min-width: 0; display: grid; grid-template-rows: auto auto minmax(0, 1fr) auto; border-right: 1px solid var(--border); background: color-mix(in srgb, var(--surface-soft) 55%, var(--surface)); }
527
+ .note-tree-scrim { display: none; }
528
+ .note-tree-header { min-height: 58px; display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 11px 12px 8px 16px; }
529
+ .note-tree-header h2 { margin: 0; font-size: 14px; letter-spacing: -.01em; }
530
+ .note-tree-header span { display: block; margin-top: 1px; color: var(--text-tertiary); font-size: 10px; }
531
+ .note-add-button { width: 30px; min-width: 30px; min-height: 30px; padding: 0; font-size: 18px; font-weight: 400; }
532
+ .note-tree-search-wrap { position: relative; padding: 5px 10px 9px; }
533
+ .note-tree-search-wrap .search-symbol { left: 20px; }
534
+ .note-tree-search { width: 100%; height: 34px; border: 1px solid transparent; border-radius: 8px; padding: 6px 10px 6px 34px; background: color-mix(in srgb, var(--surface) 72%, transparent); color: var(--text); outline: none; }
535
+ .note-tree-search:focus { border-color: color-mix(in srgb, var(--accent) 45%, var(--border)); background: var(--surface); }
536
+ .note-tree { min-height: 0; overflow: auto; padding: 3px 8px 12px; }
537
+ .note-tree-group + .note-tree-group { margin-top: 3px; }
538
+ .note-tree-base, .note-tree-document, .note-tree-new { width: 100%; display: flex; align-items: center; border: 0; background: transparent; color: var(--text-secondary); text-align: left; }
539
+ .note-tree-base { min-height: 34px; gap: 7px; border-radius: 7px; padding: 5px 7px; font-weight: 620; }
540
+ .note-tree-base:hover, .note-tree-document:hover, .note-tree-new:hover { background: var(--surface-hover); color: var(--text); }
541
+ .tree-disclosure { width: 7px; height: 7px; flex: none; border-right: 1.5px solid currentColor; border-bottom: 1.5px solid currentColor; transform: rotate(-45deg); transition: transform .16s ease; }
542
+ .note-tree-group[data-expanded="true"] .tree-disclosure { transform: rotate(45deg) translate(-1px, -1px); }
543
+ .tree-folder-icon { position: relative; width: 16px; height: 12px; flex: none; border: 1.4px solid currentColor; border-radius: 3px; opacity: .76; }
544
+ .tree-folder-icon::before { content: ""; position: absolute; left: 1px; top: -4px; width: 7px; height: 4px; border: 1.4px solid currentColor; border-bottom: 0; border-radius: 3px 3px 0 0; background: inherit; }
545
+ .tree-base-name { min-width: 0; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
546
+ .tree-count { min-width: 20px; color: var(--text-tertiary); font-size: 10px; font-variant-numeric: tabular-nums; text-align: right; }
547
+ .note-tree-documents { display: grid; gap: 1px; margin: 1px 0 5px 18px; padding-left: 10px; border-left: 1px solid color-mix(in srgb, var(--border-strong) 55%, transparent); }
548
+ .note-tree-document { position: relative; min-height: 38px; gap: 8px; border-radius: 7px; padding: 5px 8px; }
549
+ .note-tree-document[aria-current="page"] { background: color-mix(in srgb, var(--accent) 9%, var(--surface)); color: var(--text); box-shadow: inset 2px 0 0 color-mix(in srgb, var(--accent) 72%, transparent); }
550
+ .tree-document-icon { width: 12px; height: 15px; flex: none; border: 1.2px solid currentColor; border-radius: 2px; opacity: .62; }
551
+ .tree-document-copy { min-width: 0; }
552
+ .tree-document-copy strong, .tree-document-copy small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
553
+ .tree-document-copy strong { font-size: 12px; font-weight: 540; }
554
+ .tree-document-copy small { margin-top: 1px; color: var(--text-tertiary); font-size: 9px; }
555
+ .note-tree-new { min-height: 30px; gap: 7px; border-radius: 7px; padding: 4px 8px; color: var(--text-tertiary); font-size: 11px; }
556
+ .note-tree-footer { border-top: 1px solid var(--border); padding: 8px 11px; }
557
+ .note-tree-empty { padding: 28px 12px; color: var(--text-tertiary); font-size: 12px; text-align: center; }
558
+ .note-editor { min-width: 0; min-height: 0; display: grid; grid-template-rows: auto minmax(0, 1fr) auto; background: var(--surface); }
559
+ .note-editor-empty { place-items: center; display: grid; padding: 32px; }
560
+ .note-empty-content { max-width: 360px; text-align: center; }
561
+ .note-empty-content h3 { margin: 16px 0 5px; font-size: 17px; }
562
+ .note-empty-content p { margin: 0 0 18px; color: var(--text-tertiary); }
563
+ .empty-document-mark { display: inline-block; width: 38px; height: 47px; border: 1.5px solid var(--border-strong); border-radius: 5px; background: linear-gradient(var(--border), var(--border)) 9px 13px / 19px 1px no-repeat, linear-gradient(var(--border), var(--border)) 9px 20px / 15px 1px no-repeat; }
564
+ .note-editor-toolbar { min-height: 58px; display: flex; align-items: center; justify-content: space-between; gap: 14px; border-bottom: 1px solid var(--border); padding: 9px 14px 9px 20px; }
565
+ .note-breadcrumb { min-width: 0; display: flex; align-items: center; gap: 7px; overflow: hidden; color: var(--text-tertiary); font-size: 11px; white-space: nowrap; }
566
+ .note-breadcrumb strong { overflow: hidden; color: var(--text-secondary); font-weight: 560; text-overflow: ellipsis; }
567
+ .note-editor-actions { display: flex; align-items: center; gap: 6px; }
568
+ .editor-save-status { margin-right: 4px; color: var(--text-tertiary); font-size: 10px; white-space: nowrap; }
569
+ .note-mode-switch { display: inline-flex; gap: 2px; border: 1px solid var(--border); border-radius: 8px; padding: 2px; background: var(--surface-soft); }
570
+ .note-mode-switch button { min-width: 48px; min-height: 28px; border: 0; border-radius: 6px; padding: 4px 9px; background: transparent; color: var(--text-tertiary); font-size: 11px; font-weight: 600; }
571
+ .note-mode-switch button:hover { color: var(--text); }
572
+ .note-mode-switch button[aria-selected="true"] { background: var(--surface-raised); color: var(--text); box-shadow: 0 1px 3px color-mix(in srgb, var(--text) 10%, transparent); }
573
+ .note-editor-scroll { min-height: 0; overflow: auto; container-type: inline-size; }
574
+ .note-paper {
583
575
  width: 100%;
584
- min-height: 60px;
585
- display: grid;
586
- grid-template-columns: auto minmax(0, 1fr) auto;
587
- align-items: center;
588
- gap: 9px;
589
- border: 0;
590
- border-radius: 9px;
591
- padding: 8px 9px;
592
- background: transparent;
593
- color: var(--text);
594
- text-align: left;
595
- }
596
- .library-row:hover,
597
- .document-row:hover { background: var(--surface-hover); }
598
- .library-row[aria-selected="true"],
599
- .document-row[aria-selected="true"] {
600
- background: var(--accent-soft);
601
- color: var(--text);
602
- box-shadow: inset 3px 0 0 var(--accent);
603
- }
604
- .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); }
605
- .library-row-copy,
606
- .document-row-copy { min-width: 0; }
607
- .library-row-copy strong,
608
- .document-row-copy strong,
609
- .library-row-copy small,
610
- .document-row-copy small { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
611
- .library-row-copy strong,
612
- .document-row-copy strong { font-size: 13px; }
613
- .library-row-copy small,
614
- .document-row-copy small { margin-top: 2px; color: var(--text-tertiary); font-size: 10px; font-weight: 400; }
615
- .library-count,
616
- .document-entry-count { min-width: 22px; color: var(--text-tertiary); font-size: 10px; text-align: center; font-variant-numeric: tabular-nums; }
617
- .document-icon { width: 22px; color: var(--accent); font-size: 16px; text-align: center; }
618
- .column-footer { border-top: 1px solid var(--border); padding: 8px; }
619
- .document-empty { display: grid; min-height: 180px; place-items: center; padding: 20px; color: var(--text-tertiary); font-size: 12px; text-align: center; }
620
- .document-reader { min-width: 0; min-height: 0; display: grid; grid-template-rows: auto minmax(0, 1fr) auto; background: var(--surface); }
621
- .document-reader-empty { place-items: center; display: grid; padding: 30px; color: var(--text-tertiary); text-align: center; }
622
- .document-reader-empty strong { color: var(--text-secondary); }
623
- .document-reader-empty p { margin: 5px 0 0; }
624
- .reader-toolbar {
625
- min-height: 63px;
626
- display: flex;
627
- align-items: center;
628
- justify-content: space-between;
629
- gap: 12px;
630
- border-bottom: 1px solid var(--border);
631
- padding: 9px 16px;
632
- }
633
- .reader-title { min-width: 0; }
634
- .reader-title span,
635
- .reader-title strong { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
636
- .reader-title span { color: var(--text-tertiary); font-size: 10px; }
637
- .reader-title strong { margin-top: 2px; font-size: 12px; }
638
- .reader-actions { display: flex; align-items: center; gap: 7px; }
639
- .markdown-document {
640
- min-width: 0;
641
- overflow: auto;
642
- padding: clamp(28px, 5vw, 64px) clamp(28px, 7vw, 84px) 72px;
643
- font-size: 15px;
644
- line-height: 1.75;
645
- }
646
- .markdown-document > * { max-width: 760px; margin-right: auto; margin-left: auto; }
647
- .markdown-document h1 { margin-top: 0; margin-bottom: 28px; font-size: clamp(25px, 3vw, 34px); line-height: 1.2; letter-spacing: -.035em; }
648
- .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; }
649
- .markdown-document h3 { margin-top: 28px; margin-bottom: 8px; font-size: 16px; }
650
- .markdown-document p { margin-top: 0; margin-bottom: 16px; color: var(--text-secondary); white-space: pre-wrap; overflow-wrap: anywhere; }
651
- .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); }
652
- .markdown-document ul { margin-top: 0; margin-bottom: 18px; padding-left: 23px; color: var(--text-secondary); }
653
- .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; }
654
- .markdown-metadata { display: block; margin-top: -7px; margin-bottom: 22px; color: var(--text-tertiary); font-size: 11px; }
655
- .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; }
576
+ min-height: 100%;
577
+ margin: 0;
578
+ padding: clamp(34px, 5cqi, 72px) max(clamp(24px, 6cqi, 84px), calc((100% - 1120px) / 2)) 90px;
579
+ }
580
+ .note-title-input { width: 100%; border: 0; padding: 0; background: transparent; color: var(--text); font-size: clamp(27px, 3.4vw, 40px); font-weight: 720; line-height: 1.18; letter-spacing: -.038em; outline: none; }
581
+ .note-title-input::placeholder { color: color-mix(in srgb, var(--text-tertiary) 62%, transparent); }
582
+ .note-preview-title { margin: 0; color: var(--text); font-size: clamp(27px, 3.4cqi, 40px); font-weight: 720; line-height: 1.18; letter-spacing: -.038em; overflow-wrap: anywhere; }
583
+ .note-document-meta { display: flex; flex-wrap: wrap; gap: 7px 16px; margin: 14px 0 30px; color: var(--text-tertiary); font-size: 10px; }
584
+ .note-body-editor { width: 100%; min-height: 420px; border: 0; padding: 0 0 80px; resize: none; overflow: hidden; background: transparent; color: var(--text-secondary); font-family: inherit; font-size: 15px; line-height: 1.82; outline: none; }
585
+ .note-body-editor::placeholder { color: color-mix(in srgb, var(--text-tertiary) 70%, transparent); }
586
+ .markdown-preview { min-height: 420px; padding-bottom: 80px; color: var(--text-secondary); font-size: 15px; line-height: 1.78; overflow-wrap: anywhere; }
587
+ .markdown-preview.is-empty { color: var(--text-tertiary); }
588
+ .markdown-preview > :first-child { margin-top: 0; }
589
+ .markdown-preview > :last-child { margin-bottom: 0; }
590
+ .markdown-preview h1, .markdown-preview h2, .markdown-preview h3, .markdown-preview h4 { color: var(--text); line-height: 1.3; letter-spacing: -.018em; }
591
+ .markdown-preview h1 { margin: 1.8em 0 .65em; font-size: 1.75em; }
592
+ .markdown-preview h2 { margin: 1.7em 0 .6em; font-size: 1.4em; }
593
+ .markdown-preview h3 { margin: 1.5em 0 .5em; font-size: 1.16em; }
594
+ .markdown-preview h4 { margin: 1.35em 0 .45em; font-size: 1em; }
595
+ .markdown-preview p, .markdown-preview ul, .markdown-preview ol, .markdown-preview blockquote { margin: .85em 0; }
596
+ .markdown-preview ul, .markdown-preview ol { padding-left: 1.55em; }
597
+ .markdown-preview li + li { margin-top: .28em; }
598
+ .markdown-preview a { color: var(--accent); text-decoration-thickness: 1px; text-underline-offset: 3px; }
599
+ .markdown-preview a:hover { color: var(--accent-hover); }
600
+ .markdown-preview blockquote { border-left: 3px solid color-mix(in srgb, var(--accent) 35%, var(--border)); padding: .1em 0 .1em 1em; color: var(--text-tertiary); }
601
+ .markdown-preview code, .markdown-preview pre { font-family: ui-monospace, "SFMono-Regular", Consolas, "Liberation Mono", monospace; }
602
+ .markdown-preview :not(pre) > code { border: 1px solid var(--border); border-radius: 5px; padding: .12em .35em; background: var(--surface-soft); color: var(--text); font-size: .9em; }
603
+ .markdown-preview pre { overflow: auto; margin: 1.15em 0; border: 1px solid var(--border); border-radius: 10px; padding: 14px 16px; background: var(--surface-soft); color: var(--text); font-size: 13px; line-height: 1.65; tab-size: 2; }
604
+ .markdown-preview pre code { font: inherit; }
605
+ .markdown-preview table { width: 100%; margin: 1.15em 0; border-collapse: collapse; font-size: 13px; }
606
+ .markdown-preview th, .markdown-preview td { border-bottom: 1px solid var(--border); padding: 9px 11px; text-align: left; vertical-align: top; }
607
+ .markdown-preview th { color: var(--text); font-weight: 650; }
608
+ .markdown-preview hr { height: 1px; margin: 2em 0; border: 0; background: var(--border); }
609
+ .markdown-preview img { max-width: 100%; height: auto; border-radius: 10px; }
610
+ .note-inspector { min-height: 48px; display: flex; align-items: center; gap: 16px; border-top: 1px solid var(--border); padding: 7px 16px; background: color-mix(in srgb, var(--surface-soft) 35%, var(--surface)); }
611
+ .note-inspector label { display: flex; align-items: center; gap: 7px; color: var(--text-tertiary); font-size: 10px; }
612
+ .note-inspector input, .note-meta-select { height: 30px; border: 1px solid transparent; border-radius: 6px; padding: 4px 7px; background: transparent; color: var(--text-secondary); outline: none; }
613
+ .note-inspector input:focus, .note-meta-select:focus { border-color: var(--border-strong); background: var(--surface); }
614
+ .note-tags-field { min-width: 0; flex: 1; }
615
+ .note-tags-field input { width: min(100%, 360px); }
616
+ .note-format-hint { margin-left: auto; color: var(--text-tertiary); font-size: 9px; white-space: nowrap; }
656
617
 
657
618
  .list { display: grid; gap: 8px; }
658
619
  .list-row {
@@ -753,6 +714,22 @@ button:disabled { cursor: not-allowed; opacity: .56; }
753
714
  box-shadow: 0 28px 80px rgb(0 0 0 / 24%);
754
715
  }
755
716
  .dialog.narrow { width: min(100%, 460px); }
717
+ .dialog-backdrop.sheet-backdrop {
718
+ place-items: stretch end;
719
+ padding: 0;
720
+ background: rgb(8 10 15 / 22%);
721
+ backdrop-filter: none;
722
+ }
723
+ .dialog.sheet {
724
+ width: min(560px, 100vw);
725
+ max-height: 100dvh;
726
+ height: 100dvh;
727
+ border-width: 0 0 0 1px;
728
+ border-radius: 0;
729
+ box-shadow: -22px 0 64px rgb(0 0 0 / 18%);
730
+ animation: sheet-enter .2s cubic-bezier(.2, .8, .2, 1);
731
+ }
732
+ @keyframes sheet-enter { from { opacity: .75; transform: translateX(18px); } }
756
733
  .dialog-header { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; border-bottom: 1px solid var(--border); padding: 18px 20px; }
757
734
  .dialog-header h2 { margin: 0; font-size: 17px; }
758
735
  .dialog-header p { margin: 4px 0 0; color: var(--text-tertiary); font-size: 12px; }
@@ -789,14 +766,13 @@ button:disabled { cursor: not-allowed; opacity: .56; }
789
766
  .dashboard-grid { grid-template-columns: 1fr; }
790
767
  .candidate-body { grid-template-columns: 1fr; }
791
768
  .mount-manager-toolbar .tabs { width: 100%; }
792
- .document-browser { grid-template-columns: min(var(--document-list-width, 280px), 42%) 6px minmax(0, 1fr); }
793
- .knowledge-library-column { display: none; }
794
- .column-resizer[data-column="library"] { display: none; }
795
- .compact-library-picker { display: block; width: min(220px, 28vw); }
769
+ .note-workspace { grid-template-columns: minmax(210px, 30%) minmax(0, 1fr); }
770
+ .note-paper { padding-inline: clamp(28px, 6cqi, 62px); }
796
771
  }
797
772
 
798
773
  @media (max-width: 1180px) {
799
- .base-card { grid-template-columns: minmax(0, 1fr) auto; grid-template-rows: auto auto auto auto; gap: 7px 18px; }
774
+ .base-grid { grid-template-columns: minmax(0, 1fr) 190px; }
775
+ .base-card { grid-template-rows: auto auto auto auto; gap: 7px 18px; }
800
776
  .base-card-header { grid-column: 1; grid-row: 1; }
801
777
  .base-description { grid-column: 1; grid-row: 2; }
802
778
  .base-card-tags { grid-column: 1; grid-row: 3; }
@@ -805,20 +781,6 @@ button:disabled { cursor: not-allowed; opacity: .56; }
805
781
  .base-card-actions { grid-column: 2; grid-row: 1 / span 4; max-width: 170px; }
806
782
  }
807
783
 
808
- @media (min-width: 981px) {
809
- .document-browser[data-library-hidden="true"] .knowledge-library-column,
810
- .document-browser[data-document-list-hidden="true"] .document-list-column { display: none; }
811
- .document-browser[data-library-hidden="true"][data-document-list-hidden="false"] { grid-template-columns: min(var(--document-list-width, 280px), 34%) 6px minmax(320px, 1fr); }
812
- .document-browser[data-library-hidden="false"][data-document-list-hidden="true"] { grid-template-columns: min(var(--library-width, 220px), 28%) 6px minmax(320px, 1fr); }
813
- .document-browser[data-library-hidden="true"][data-document-list-hidden="true"] { grid-template-columns: minmax(320px, 1fr); }
814
- }
815
-
816
- @media (min-width: 761px) and (max-width: 980px) {
817
- .document-column-control[data-column="library"] { display: none; }
818
- .document-browser[data-document-list-hidden="true"] { grid-template-columns: minmax(320px, 1fr); }
819
- .document-browser[data-document-list-hidden="true"] .document-list-column { display: none; }
820
- }
821
-
822
784
  @media (min-width: 761px) {
823
785
  .app-shell[data-sidebar-hidden="true"] { grid-template-columns: 0 0 minmax(0, 1fr); }
824
786
  .app-shell[data-sidebar-hidden="true"] > .sidebar,
@@ -830,7 +792,7 @@ button:disabled { cursor: not-allowed; opacity: .56; }
830
792
  .app-shell { display: block; }
831
793
  .app-sidebar-resizer { display: none; }
832
794
  .pane-toggle-button[data-pane="main"] { display: none; }
833
- .document-column-controls { display: none; }
795
+ .pane-toggle-button[data-pane="library"] { display: inline-grid; }
834
796
  .sidebar { position: fixed; z-index: 40; width: min(82vw, 270px); transform: translateX(-105%); box-shadow: var(--shadow); transition: transform .2s ease; }
835
797
  .app-shell[data-menu-open="true"] .sidebar { transform: translateX(0); }
836
798
  .app-shell[data-menu-open="true"]::after { content: ""; position: fixed; inset: 0; z-index: 30; background: rgb(0 0 0 / 35%); }
@@ -847,21 +809,36 @@ button:disabled { cursor: not-allowed; opacity: .56; }
847
809
  .knowledge-base-toolbar { align-items: stretch; flex-direction: column; gap: 8px; }
848
810
  .base-search { max-width: none; }
849
811
  .base-result-summary { margin-left: 0; }
850
- .document-page-toolbar { flex-wrap: wrap; }
851
- .document-page-toolbar .search-box { flex-basis: 100%; }
852
- .document-toolbar-actions { margin-left: 0; }
853
812
  .skeleton-grid { grid-template-columns: 1fr; }
854
813
  .skeleton-block { height: 96px; }
855
- .document-browser { height: calc(100dvh - 210px); grid-template-columns: 1fr; }
856
- .document-list-column { display: none; }
857
- .column-resizer { display: none; }
858
- .reader-toolbar { padding: 9px 12px; }
859
- .reader-title { display: none; }
860
- .mobile-document-picker { display: block; min-width: 0; flex: 1; }
861
- .markdown-document { padding: 28px 22px 60px; }
814
+ .note-workspace { position: relative; height: calc(100dvh - 178px); grid-template-columns: minmax(0, 1fr); }
815
+ .note-tree-panel {
816
+ position: absolute;
817
+ inset: 0 auto 0 0;
818
+ z-index: 4;
819
+ width: min(82%, 300px);
820
+ border-right-color: var(--border-strong);
821
+ box-shadow: 16px 0 36px color-mix(in srgb, var(--text) 14%, transparent);
822
+ transform: translateX(-104%);
823
+ transition: transform .18s cubic-bezier(.2, .8, .2, 1);
824
+ }
825
+ .note-workspace[data-tree-open="true"] .note-tree-panel { transform: translateX(0); }
826
+ .note-tree-scrim { position: absolute; inset: 0; z-index: 3; display: block; border: 0; padding: 0; background: color-mix(in srgb, var(--text) 14%, transparent); }
827
+ .note-editor { grid-column: 1; }
828
+ .note-tree-header { padding-left: 11px; }
829
+ .note-tree-header span, .tree-document-copy small, .tree-count { display: none; }
830
+ .note-editor-toolbar { align-items: flex-start; padding: 8px 10px 8px 14px; }
831
+ .note-breadcrumb { display: none; }
832
+ .note-editor-actions { width: 100%; justify-content: flex-end; }
833
+ .note-mode-switch { margin-right: auto; }
834
+ .note-paper { padding: 32px 24px 60px; }
835
+ .note-title-input { font-size: 26px; }
836
+ .note-inspector { align-items: stretch; flex-direction: column; gap: 5px; padding: 8px 12px; }
837
+ .note-inspector label { justify-content: space-between; }
838
+ .note-tags-field input { width: 100%; }
839
+ .note-format-hint { display: none; }
862
840
  .card-grid { grid-template-columns: 1fr; }
863
841
  .base-grid { grid-template-columns: 1fr; }
864
- .base-card { grid-template-columns: minmax(0, 1fr); }
865
842
  .base-card-header, .base-description, .base-card-tags, .base-card-meta, .base-card-actions { grid-column: 1; }
866
843
  .base-card-header { grid-row: 1; }
867
844
  .base-description { grid-row: 2; }