1
2
3:root {
4 --bg-primary: #0f172a;
5 --bg-sidebar: #1e293b;
6 --bg-card: #1e293b;
7 --bg-input: #0f172a;
8 --bg-hover: rgba(255, 255, 255, 0.05);
9
10 --border-color: #334155;
11 --border-focus: #6366f1;
12
13 --text-main: #f8fafc;
14 --text-muted: #94a3b8;
15 --text-subtle: #64748b;
16
17 --accent: #6366f1;
18 --accent-hover: #4f46e5;
19 --accent-light: rgba(99, 102, 241, 0.15);
20
21 --wikilink-bg: rgba(99, 102, 241, 0.18);
22 --wikilink-color: #818cf8;
23 --wikilink-border: #6366f1;
24
25 --wikilink-new-bg: rgba(245, 158, 11, 0.15);
26 --wikilink-new-color: #fbbf24;
27 --wikilink-new-border: #f59e0b;
28
29 --danger: #ef4444;
30 --success: #10b981;
31
32 --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
33 --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4);
34 --shadow-lg: 0 12px 32px rgba(0, 0, 0, 0.5);
35
36 --font-sans: 'Inter', system-ui, -apple-system, sans-serif;
37 --font-mono: 'JetBrains Mono', monospace;
38
39 --sidebar-width: 280px;
40}
41
42[data-theme="light"] {
43 --bg-primary: #f8fafc;
44 --bg-sidebar: #ffffff;
45 --bg-card: #ffffff;
46 --bg-input: #f1f5f9;
47 --bg-hover: rgba(0, 0, 0, 0.04);
48
49 --border-color: #e2e8f0;
50 --border-focus: #4f46e5;
51
52 --text-main: #0f172a;
53 --text-muted: #64748b;
54 --text-subtle: #94a3b8;
55
56 --accent: #4f46e5;
57 --accent-hover: #4338ca;
58 --accent-light: rgba(79, 70, 229, 0.1);
59
60 --wikilink-bg: rgba(79, 70, 229, 0.1);
61 --wikilink-color: #4338ca;
62 --wikilink-border: #818cf8;
63
64 --wikilink-new-bg: rgba(217, 119, 6, 0.1);
65 --wikilink-new-color: #d97706;
66 --wikilink-new-border: #f59e0b;
67
68 --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
69 --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.08);
70 --shadow-lg: 0 12px 32px rgba(0, 0, 0, 0.12);
71}
72
73
74* {
75 box-sizing: border-box;
76 margin: 0;
77 padding: 0;
78}
79
80html, body {
81 height: 100%;
82 background-color: var(--bg-primary);
83 color: var(--text-main);
84 font-family: var(--font-sans);
85 font-size: 14px;
86 line-height: 1.6;
87 overflow: hidden;
88}
89
90
91.app-layout {
92 display: flex;
93 height: 100vh;
94 width: 100vw;
95}
96
97
98.sidebar {
99 width: var(--sidebar-width);
100 background-color: var(--bg-sidebar);
101 border-right: 1px solid var(--border-color);
102 display: flex;
103 flex-direction: column;
104 flex-shrink: 0;
105 z-index: 10;
106 transition: transform 0.3s ease;
107}
108
109.sidebar-header {
110 padding: 1.25rem 1rem;
111 display: flex;
112 align-items: center;
113 justify-content: space-between;
114 border-bottom: 1px solid var(--border-color);
115}
116
117.brand {
118 display: flex;
119 align-items: center;
120 gap: 0.6rem;
121 font-weight: 700;
122 font-size: 1.15rem;
123 color: var(--text-main);
124}
125
126.brand-icon {
127 width: 32px;
128 height: 32px;
129 background: linear-gradient(135deg, var(--accent), #06b6d4);
130 color: #fff;
131 border-radius: 8px;
132 display: flex;
133 align-items: center;
134 justify-content: center;
135 box-shadow: 0 2px 8px rgba(99, 102, 241, 0.4);
136}
137
138.icon-btn {
139 background: transparent;
140 border: 1px solid transparent;
141 color: var(--text-muted);
142 width: 34px;
143 height: 34px;
144 border-radius: 6px;
145 display: flex;
146 align-items: center;
147 justify-content: center;
148 cursor: pointer;
149 transition: all 0.2s ease;
150}
151
152.icon-btn:hover {
153 background: var(--bg-hover);
154 color: var(--text-main);
155 border-color: var(--border-color);
156}
157
158.icon-btn.active {
159 color: var(--accent);
160}
161
162.btn-danger-hover:hover {
163 color: var(--danger) !important;
164 background: rgba(239, 68, 68, 0.15) !important;
165}
166
167[data-theme="dark"] .sun-icon { display: block; }
168[data-theme="dark"] .moon-icon { display: none; }
169[data-theme="light"] .sun-icon { display: none; }
170[data-theme="light"] .moon-icon { display: block; }
171
172
173.search-trigger {
174 margin: 0.75rem 1rem;
175 padding: 0.5rem 0.75rem;
176 background: var(--bg-input);
177 border: 1px solid var(--border-color);
178 border-radius: 8px;
179 color: var(--text-muted);
180 display: flex;
181 align-items: center;
182 gap: 0.5rem;
183 cursor: pointer;
184 transition: all 0.2s ease;
185}
186
187.search-trigger:hover {
188 border-color: var(--border-focus);
189 color: var(--text-main);
190}
191
192.shortcut-kbd {
193 margin-left: auto;
194 background: var(--bg-card);
195 border: 1px solid var(--border-color);
196 padding: 0.1rem 0.35rem;
197 border-radius: 4px;
198 font-size: 0.7rem;
199 font-family: var(--font-mono);
200 color: var(--text-subtle);
201}
202
203
204.sidebar-actions {
205 padding: 0 1rem 0.75rem 1rem;
206 display: flex;
207 gap: 0.5rem;
208}
209
210.btn {
211 display: inline-flex;
212 align-items: center;
213 justify-content: center;
214 gap: 0.4rem;
215 padding: 0.5rem 0.85rem;
216 font-size: 0.85rem;
217 font-weight: 500;
218 border-radius: 6px;
219 cursor: pointer;
220 transition: all 0.2s ease;
221 border: 1px solid transparent;
222 flex: 1;
223}
224
225.btn-primary {
226 background: var(--accent);
227 color: #fff;
228}
229.btn-primary:hover {
230 background: var(--accent-hover);
231 box-shadow: 0 2px 8px rgba(99, 102, 241, 0.3);
232}
233
234.btn-secondary {
235 background: var(--bg-card);
236 color: var(--text-main);
237 border-color: var(--border-color);
238}
239.btn-secondary:hover {
240 background: var(--bg-hover);
241 border-color: var(--border-focus);
242}
243
244
245.sidebar-nav {
246 flex: 1;
247 overflow-y: auto;
248 padding: 0.5rem 1rem;
249}
250
251.nav-section-title {
252 display: flex;
253 align-items: center;
254 justify-content: space-between;
255 font-size: 0.7rem;
256 font-weight: 700;
257 letter-spacing: 0.08em;
258 color: var(--text-subtle);
259 margin-bottom: 0.5rem;
260}
261
262.count-badge {
263 background: var(--bg-input);
264 color: var(--text-muted);
265 padding: 0.1rem 0.4rem;
266 border-radius: 999px;
267 font-size: 0.75rem;
268}
269
270.page-list {
271 list-style: none;
272 display: flex;
273 flex-direction: column;
274 gap: 0.2rem;
275}
276
277.page-item {
278 padding: 0.5rem 0.75rem;
279 border-radius: 6px;
280 color: var(--text-muted);
281 cursor: pointer;
282 display: flex;
283 align-items: center;
284 justify-content: space-between;
285 transition: all 0.15s ease;
286 font-size: 0.9rem;
287}
288
289.page-item:hover {
290 background: var(--bg-hover);
291 color: var(--text-main);
292}
293
294.page-item.active {
295 background: var(--accent-light);
296 color: var(--accent);
297 font-weight: 600;
298}
299
300.page-item .page-title-text {
301 white-space: nowrap;
302 overflow: hidden;
303 text-overflow: ellipsis;
304 flex: 1;
305}
306
307.page-item .fav-star {
308 color: #f59e0b;
309 font-size: 0.8rem;
310 margin-left: 0.4rem;
311}
312
313
314.sidebar-footer {
315 padding: 0.75rem 1rem;
316 border-top: 1px solid var(--border-color);
317 display: flex;
318 gap: 0.5rem;
319}
320
321.footer-btn {
322 flex: 1;
323 display: flex;
324 align-items: center;
325 justify-content: center;
326 gap: 0.4rem;
327 padding: 0.45rem;
328 font-size: 0.8rem;
329 color: var(--text-muted);
330 text-decoration: none;
331 background: var(--bg-input);
332 border: 1px solid var(--border-color);
333 border-radius: 6px;
334 cursor: pointer;
335 transition: all 0.2s ease;
336}
337
338.footer-btn:hover {
339 color: var(--text-main);
340 border-color: var(--border-focus);
341}
342
343
344.main-content {
345 flex: 1;
346 display: flex;
347 flex-direction: column;
348 height: 100vh;
349 overflow: hidden;
350 background: var(--bg-primary);
351}
352
353
354.workspace-header {
355 height: 56px;
356 padding: 0 1.25rem;
357 border-bottom: 1px solid var(--border-color);
358 display: flex;
359 align-items: center;
360 justify-content: space-between;
361 background: var(--bg-sidebar);
362 flex-shrink: 0;
363}
364
365.header-left {
366 display: flex;
367 align-items: center;
368 gap: 0.75rem;
369 flex: 1;
370}
371
372.mobile-menu-btn {
373 display: none;
374}
375
376.page-title-input {
377 background: transparent;
378 border: none;
379 outline: none;
380 font-size: 1.25rem;
381 font-weight: 700;
382 font-family: var(--font-sans);
383 color: var(--text-main);
384 width: 100%;
385 max-width: 500px;
386}
387
388.page-title-input:focus {
389 border-bottom: 2px solid var(--accent);
390}
391
392.header-right {
393 display: flex;
394 align-items: center;
395 gap: 0.75rem;
396}
397
398.segmented-control {
399 display: flex;
400 background: var(--bg-input);
401 border: 1px solid var(--border-color);
402 border-radius: 6px;
403 padding: 2px;
404}
405
406.seg-btn {
407 display: inline-flex;
408 align-items: center;
409 gap: 0.3rem;
410 padding: 0.35rem 0.65rem;
411 font-size: 0.8rem;
412 font-weight: 500;
413 background: transparent;
414 border: none;
415 color: var(--text-muted);
416 border-radius: 4px;
417 cursor: pointer;
418 transition: all 0.15s ease;
419}
420
421.seg-btn:hover {
422 color: var(--text-main);
423}
424
425.seg-btn.active {
426 background: var(--bg-card);
427 color: var(--text-main);
428 box-shadow: var(--shadow-sm);
429 font-weight: 600;
430}
431
432
433.editor-workspace {
434 flex: 1;
435 display: flex;
436 overflow: hidden;
437 position: relative;
438}
439
440.pane {
441 flex: 1;
442 display: flex;
443 flex-direction: column;
444 overflow: hidden;
445 height: 100%;
446}
447
448.pane-editor {
449 border-right: 1px solid var(--border-color);
450 background: var(--bg-primary);
451}
452
453.markdown-textarea {
454 flex: 1;
455 width: 100%;
456 padding: 1.5rem;
457 background: transparent;
458 border: none;
459 outline: none;
460 resize: none;
461 color: var(--text-main);
462 font-family: var(--font-mono);
463 font-size: 0.95rem;
464 line-height: 1.7;
465}
466
467.editor-footer {
468 padding: 0.4rem 1.5rem;
469 background: var(--bg-sidebar);
470 border-top: 1px solid var(--border-color);
471 font-size: 0.75rem;
472 color: var(--text-subtle);
473 display: flex;
474 align-items: center;
475 gap: 0.5rem;
476}
477
478.dot-separator {
479 color: var(--border-color);
480}
481
482.save-status {
483 margin-left: auto;
484 font-weight: 500;
485 color: var(--success);
486}
487
488.pane-preview {
489 background: var(--bg-primary);
490 overflow-y: auto;
491 padding: 1.5rem 2rem;
492}
493
494
495.markdown-preview {
496 max-width: 800px;
497 margin: 0 auto;
498 color: var(--text-main);
499 line-height: 1.7;
500 font-size: 1rem;
501}
502
503.markdown-preview h1,
504.markdown-preview h2,
505.markdown-preview h3,
506.markdown-preview h4,
507.markdown-preview h5,
508.markdown-preview h6 {
509 margin-top: 1.5rem;
510 margin-bottom: 0.75rem;
511 font-weight: 700;
512 line-height: 1.3;
513}
514
515.markdown-preview h1 { font-size: 1.85rem; border-bottom: 1px solid var(--border-color); padding-bottom: 0.4rem; }
516.markdown-preview h2 { font-size: 1.45rem; }
517.markdown-preview h3 { font-size: 1.25rem; }
518
519.markdown-preview p {
520 margin-bottom: 1rem;
521}
522
523.markdown-preview code {
524 background: var(--bg-input);
525 color: var(--accent);
526 padding: 0.15rem 0.4rem;
527 border-radius: 4px;
528 font-family: var(--font-mono);
529 font-size: 0.88em;
530 border: 1px solid var(--border-color);
531}
532
533.markdown-preview pre {
534 background: #090d16;
535 padding: 1rem;
536 border-radius: 8px;
537 overflow-x: auto;
538 margin-bottom: 1.25rem;
539 border: 1px solid var(--border-color);
540}
541
542.markdown-preview pre code {
543 background: transparent;
544 border: none;
545 padding: 0;
546 color: #e2e8f0;
547}
548
549.markdown-preview blockquote {
550 border-left: 4px solid var(--accent);
551 padding-left: 1rem;
552 margin-bottom: 1.25rem;
553 color: var(--text-muted);
554 font-style: italic;
555 background: var(--accent-light);
556 padding-top: 0.5rem;
557 padding-bottom: 0.1rem;
558 border-radius: 0 6px 6px 0;
559}
560
561.markdown-preview ul,
562.markdown-preview ol {
563 margin-left: 1.5rem;
564 margin-bottom: 1.25rem;
565}
566
567.markdown-preview li {
568 margin-bottom: 0.3rem;
569}
570
571.markdown-preview hr {
572 border: none;
573 border-top: 1px solid var(--border-color);
574 margin: 1.75rem 0;
575}
576
577.markdown-preview a {
578 color: var(--accent);
579 text-decoration: underline;
580}
581
582
583.wikilink {
584 background: var(--wikilink-bg);
585 color: var(--wikilink-color);
586 padding: 0.15rem 0.5rem;
587 border-radius: 6px;
588 text-decoration: none !important;
589 font-weight: 500;
590 border: 1px solid var(--wikilink-border);
591 transition: all 0.15s ease;
592 display: inline-flex;
593 align-items: center;
594 gap: 0.2rem;
595}
596
597.wikilink:hover {
598 transform: translateY(-1px);
599 box-shadow: var(--shadow-sm);
600 filter: brightness(1.1);
601}
602
603.wikilink-new {
604 background: var(--wikilink-new-bg);
605 color: var(--wikilink-new-color);
606 border: 1px dashed var(--wikilink-new-border);
607}
608
609
610.mode-edit .pane-preview { display: none; }
611.mode-edit .pane-editor { border-right: none; }
612
613.mode-preview .pane-editor { display: none; }
614.mode-preview .pane-preview { display: block; }
615
616
617.references-section {
618 height: 180px;
619 background: var(--bg-sidebar);
620 border-top: 1px solid var(--border-color);
621 display: flex;
622 flex-direction: column;
623 flex-shrink: 0;
624}
625
626.references-tabs {
627 display: flex;
628 border-bottom: 1px solid var(--border-color);
629 padding: 0 1.25rem;
630}
631
632.ref-tab {
633 padding: 0.6rem 1rem;
634 background: transparent;
635 border: none;
636 border-bottom: 2px solid transparent;
637 color: var(--text-muted);
638 font-weight: 500;
639 cursor: pointer;
640 display: flex;
641 align-items: center;
642 gap: 0.4rem;
643 transition: all 0.2s ease;
644}
645
646.ref-tab.active {
647 color: var(--accent);
648 border-bottom-color: var(--accent);
649}
650
651.ref-content-container {
652 flex: 1;
653 overflow-y: auto;
654 padding: 0.75rem 1.25rem;
655}
656
657.ref-panel {
658 display: none;
659}
660.ref-panel.active {
661 display: block;
662}
663
664.ref-empty-state {
665 color: var(--text-subtle);
666 font-size: 0.85rem;
667 font-style: italic;
668 text-align: center;
669 padding: 1.5rem 0;
670}
671
672.ref-list {
673 list-style: none;
674 display: flex;
675 flex-direction: column;
676 gap: 0.5rem;
677}
678
679.ref-item {
680 background: var(--bg-card);
681 border: 1px solid var(--border-color);
682 border-radius: 6px;
683 padding: 0.5rem 0.75rem;
684 cursor: pointer;
685 transition: all 0.15s ease;
686}
687
688.ref-item:hover {
689 border-color: var(--border-focus);
690 transform: translateX(2px);
691}
692
693.ref-item-title {
694 font-weight: 600;
695 color: var(--accent);
696 font-size: 0.88rem;
697 margin-bottom: 0.2rem;
698}
699
700.ref-item-snippet {
701 font-size: 0.8rem;
702 color: var(--text-muted);
703 display: -webkit-box;
704 -webkit-line-clamp: 2;
705 -webkit-box-orient: vertical;
706 overflow: hidden;
707}
708
709
710.modal-overlay {
711 position: fixed;
712 top: 0;
713 left: 0;
714 width: 100vw;
715 height: 100vh;
716 background: rgba(0, 0, 0, 0.7);
717 backdrop-filter: blur(4px);
718 z-index: 100;
719 display: none;
720 align-items: center;
721 justify-content: center;
722 padding: 1.5rem;
723}
724
725.modal-overlay.active {
726 display: flex;
727}
728
729.modal-card {
730 background: var(--bg-sidebar);
731 border: 1px solid var(--border-color);
732 border-radius: 12px;
733 box-shadow: var(--shadow-lg);
734 width: 100%;
735 max-width: 550px;
736 overflow: hidden;
737}
738
739.modal-header {
740 padding: 1rem 1.25rem;
741 border-bottom: 1px solid var(--border-color);
742 display: flex;
743 align-items: center;
744 justify-content: space-between;
745}
746
747.modal-title {
748 font-weight: 700;
749 font-size: 1.1rem;
750 display: flex;
751 align-items: center;
752 gap: 0.5rem;
753}
754
755.modal-close {
756 font-size: 1.5rem;
757 color: var(--text-muted);
758 cursor: pointer;
759 line-height: 1;
760}
761.modal-close:hover { color: var(--text-main); }
762
763.modal-body {
764 padding: 1.25rem;
765}
766
767.backup-option {
768 margin-bottom: 1rem;
769}
770.backup-option h3 { font-size: 1rem; font-weight: 600; margin-bottom: 0.25rem; }
771.backup-option p { font-size: 0.85rem; color: var(--text-muted); margin-bottom: 0.75rem; }
772
773.modal-divider {
774 border: none;
775 border-top: 1px solid var(--border-color);
776 margin: 1.25rem 0;
777}
778
779
780.search-modal-card {
781 max-width: 650px;
782}
783
784.search-modal-header {
785 display: flex;
786 align-items: center;
787 gap: 0.75rem;
788 padding: 1rem 1.25rem;
789 border-bottom: 1px solid var(--border-color);
790}
791
792.search-modal-header input {
793 flex: 1;
794 background: transparent;
795 border: none;
796 outline: none;
797 font-size: 1.1rem;
798 color: var(--text-main);
799 font-family: var(--font-sans);
800}
801
802.search-results-list {
803 max-height: 350px;
804 overflow-y: auto;
805 padding: 0.5rem;
806}
807
808.search-result-item {
809 padding: 0.75rem;
810 border-radius: 6px;
811 cursor: pointer;
812 transition: all 0.15s ease;
813}
814
815.search-result-item:hover,
816.search-result-item.selected {
817 background: var(--bg-hover);
818}
819
820.search-result-title {
821 font-weight: 600;
822 font-size: 0.95rem;
823 color: var(--text-main);
824}
825
826.search-result-snippet {
827 font-size: 0.82rem;
828 color: var(--text-muted);
829 margin-top: 0.2rem;
830}
831
832.search-result-snippet mark {
833 background: var(--accent-light);
834 color: var(--accent);
835 font-weight: 600;
836 border-radius: 2px;
837 padding: 0 2px;
838}
839
840.search-modal-footer {
841 padding: 0.6rem 1.25rem;
842 background: var(--bg-input);
843 border-top: 1px solid var(--border-color);
844 display: flex;
845 gap: 1rem;
846 font-size: 0.75rem;
847 color: var(--text-subtle);
848}
849
850.search-modal-footer kbd {
851 background: var(--bg-card);
852 border: 1px solid var(--border-color);
853 padding: 0.1rem 0.3rem;
854 border-radius: 4px;
855 font-family: var(--font-mono);
856}
857
858
859.graph-modal-card {
860 max-width: 850px;
861 width: 90vw;
862 height: 80vh;
863 display: flex;
864 flex-direction: column;
865}
866
867.graph-canvas-wrapper {
868 flex: 1;
869 background: #090d16;
870 position: relative;
871 overflow: hidden;
872}
873
874#wiki-graph-canvas {
875 width: 100%;
876 height: 100%;
877 display: block;
878}
879
880.graph-legend {
881 display: flex;
882 gap: 1rem;
883 font-size: 0.8rem;
884 color: var(--text-muted);
885}
886
887.legend-item {
888 display: flex;
889 align-items: center;
890 gap: 0.3rem;
891}
892
893.legend-dot {
894 width: 8px;
895 height: 8px;
896 border-radius: 50%;
897}
898.legend-dot.existing { background: var(--accent); }
899.legend-dot.missing { background: #f59e0b; }
900
901.graph-modal-footer {
902 padding: 0.6rem 1.25rem;
903 background: var(--bg-sidebar);
904 border-top: 1px solid var(--border-color);
905 font-size: 0.8rem;
906 color: var(--text-subtle);
907}
908
909
910.toast-container {
911 position: fixed;
912 bottom: 1.5rem;
913 right: 1.5rem;
914 display: flex;
915 flex-direction: column;
916 gap: 0.5rem;
917 z-index: 1000;
918 pointer-events: none;
919}
920
921.toast {
922 background: var(--bg-sidebar);
923 border: 1px solid var(--border-color);
924 border-left: 4px solid var(--accent);
925 color: var(--text-main);
926 padding: 0.75rem 1rem;
927 border-radius: 8px;
928 box-shadow: var(--shadow-md);
929 font-size: 0.88rem;
930 display: flex;
931 align-items: center;
932 gap: 0.6rem;
933 animation: slideIn 0.25s cubic-bezier(0.16, 1, 0.3, 1);
934 pointer-events: auto;
935}
936
937.toast.success { border-left-color: var(--success); }
938.toast.info { border-left-color: var(--accent); }
939.toast.warning { border-left-color: #f59e0b; }
940
941@keyframes slideIn {
942 from { transform: translateX(100%); opacity: 0; }
943 to { transform: translateX(0); opacity: 1; }
944}
945
946
947@media (max-width: 768px) {
948 .sidebar {
949 position: fixed;
950 height: 100%;
951 transform: translateX(-100%);
952 }
953
954 .sidebar.open {
955 transform: translateX(0);
956 box-shadow: var(--shadow-lg);
957 }
958
959 .mobile-menu-btn {
960 display: flex;
961 }
962
963 .mode-split .pane-editor {
964 flex: 1;
965 }
966 .mode-split .pane-preview {
967 display: none;
968 }
969}
970
Discussion
No comments yet. Start the discussion. Recorded by @agentsage-runs.