granite-mem 0.1.8 → 0.1.9

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.
@@ -1,960 +1 @@
1
- /* ═══════════════════════════════════════
2
- GRANITE — Editorial Knowledge Interface
3
- ═══════════════════════════════════════ */
4
-
5
- *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; }
6
-
7
- :root {
8
- --bg-deep: #050507;
9
- --bg-0: #0a0a0d;
10
- --bg-1: #0f0f13;
11
- --bg-2: #151519;
12
- --bg-3: #1b1b20;
13
- --bg-hover: #1e1e24;
14
- --bg-active: #232329;
15
-
16
- --border: #1e1e25;
17
- --border-dim: #16161c;
18
-
19
- --text-0: #ededf0;
20
- --text-1: #a8a8b4;
21
- --text-2: #6b6b7a;
22
- --text-3: #5a5a68;
23
-
24
- --accent: #7c7fff;
25
- --accent-dim: rgba(124, 127, 255, 0.08);
26
- --accent-mid: rgba(124, 127, 255, 0.15);
27
- --accent-text:#a8aaff;
28
-
29
- --link: #8b8eff;
30
- --link-hover: #b0b2ff;
31
- --link-broken:#ef6b6b;
32
-
33
- --green: #5cd9a8;
34
- --green-dim: rgba(92, 217, 168, 0.08);
35
- --synthesis: #e0a0ff;
36
- --output: #ffb86c;
37
- --code-text: #c0c8d8;
38
-
39
- --font-sans: 'Instrument Sans', -apple-system, sans-serif;
40
- --font-mono: 'JetBrains Mono', 'SF Mono', monospace;
41
-
42
- --ease: cubic-bezier(0.16, 1, 0.3, 1);
43
- --ease-smooth:cubic-bezier(0.4, 0, 0.2, 1);
44
-
45
- --nav-w: 260px;
46
- --radius: 8px;
47
- --radius-sm: 5px;
48
- }
49
-
50
- html, body {
51
- height: 100%;
52
- font-family: var(--font-sans);
53
- background: var(--bg-deep);
54
- color: var(--text-1);
55
- font-size: 13px;
56
- line-height: 1.5;
57
- -webkit-font-smoothing: antialiased;
58
- overflow: hidden;
59
- }
60
-
61
- /* ═══ Focus ═══ */
62
- *:focus-visible {
63
- outline: 2px solid var(--accent);
64
- outline-offset: 2px;
65
- }
66
- button:focus-visible, .nav-btn:focus-visible, .type-pill:focus-visible, .note-item:focus-visible {
67
- outline: 2px solid var(--accent);
68
- outline-offset: -2px;
69
- border-radius: var(--radius-sm);
70
- }
71
- input:focus-visible, select:focus-visible, textarea:focus-visible {
72
- outline: none; /* handled by box-shadow */
73
- }
74
-
75
- /* ═══ Reduced motion ═══ */
76
- @media (prefers-reduced-motion: reduce) {
77
- *, *::before, *::after {
78
- animation-duration: 0.01ms !important;
79
- animation-iteration-count: 1 !important;
80
- transition-duration: 0.01ms !important;
81
- scroll-behavior: auto !important;
82
- }
83
- }
84
-
85
- ::selection { background: var(--accent-mid); color: var(--text-0); }
86
- ::-webkit-scrollbar { width: 3px; }
87
- ::-webkit-scrollbar-track { background: transparent; }
88
- ::-webkit-scrollbar-thumb { background: var(--border); border-radius: 2px; }
89
- ::-webkit-scrollbar-thumb:hover { background: var(--text-3); }
90
-
91
- /* ═══ Grain texture ═══ */
92
- #grain {
93
- position: fixed;
94
- inset: 0;
95
- z-index: 9999;
96
- pointer-events: none;
97
- opacity: 0.035;
98
- mix-blend-mode: overlay;
99
- }
100
-
101
- /* ═══ Layout ═══ */
102
- #app {
103
- display: flex;
104
- height: 100%;
105
- }
106
-
107
- /* ═══ NAVIGATION ═══ */
108
- #nav {
109
- width: var(--nav-w);
110
- min-width: var(--nav-w);
111
- height: 100%;
112
- display: flex;
113
- flex-direction: column;
114
- background: var(--bg-0);
115
- border-right: 1px solid var(--border-dim);
116
- z-index: 10;
117
- }
118
-
119
- .nav-brand {
120
- display: flex;
121
- align-items: center;
122
- gap: 8px;
123
- padding: 16px 18px 12px;
124
- color: var(--accent);
125
- font-size: 13px;
126
- font-weight: 600;
127
- letter-spacing: 0.04em;
128
- }
129
- .nav-brand svg { flex-shrink: 0; }
130
-
131
- .nav-actions {
132
- display: flex;
133
- flex-direction: column;
134
- gap: 1px;
135
- padding: 0 8px 10px;
136
- }
137
-
138
- .nav-btn {
139
- display: flex;
140
- align-items: center;
141
- gap: 8px;
142
- padding: 6px 10px;
143
- font-family: var(--font-sans);
144
- font-size: 12.5px;
145
- color: var(--text-2);
146
- background: none;
147
- border: none;
148
- border-radius: var(--radius-sm);
149
- cursor: pointer;
150
- transition: color 0.12s, background-color 0.12s;
151
- }
152
- .nav-btn:hover { color: var(--text-1); background: var(--bg-hover); }
153
- .nav-btn.active { color: var(--accent-text); background: var(--accent-dim); }
154
- .nav-btn span { flex: 1; text-align: left; }
155
- .nav-btn kbd {
156
- font-family: var(--font-sans);
157
- font-size: 10px;
158
- color: var(--text-3);
159
- background: var(--bg-2);
160
- border: 1px solid var(--border);
161
- border-radius: 3px;
162
- padding: 0 4px;
163
- line-height: 1.5;
164
- }
165
- .nav-btn svg { opacity: 0.5; flex-shrink: 0; }
166
- .nav-btn:hover svg { opacity: 0.8; }
167
-
168
- /* ── Type filters ── */
169
- #nav-note-list {
170
- flex: 1;
171
- display: flex;
172
- flex-direction: column;
173
- overflow: hidden;
174
- border-top: 1px solid var(--border-dim);
175
- }
176
-
177
- #type-filters {
178
- display: flex;
179
- gap: 4px;
180
- padding: 10px 12px 6px;
181
- flex-wrap: wrap;
182
- }
183
-
184
- .type-pill {
185
- padding: 2px 10px;
186
- font-family: var(--font-sans);
187
- font-size: 11px;
188
- font-weight: 500;
189
- border-radius: 20px;
190
- border: 1px solid transparent;
191
- background: none;
192
- color: var(--text-3);
193
- cursor: pointer;
194
- transition: color 0.12s, background-color 0.12s, border-color 0.12s;
195
- }
196
- .type-pill:hover { color: var(--text-2); }
197
- .type-pill.active {
198
- color: var(--accent-text);
199
- background: var(--accent-dim);
200
- border-color: var(--accent-mid);
201
- }
202
-
203
- /* ── Note list ── */
204
- #note-list {
205
- flex: 1;
206
- overflow-y: auto;
207
- padding: 4px 8px 12px;
208
- }
209
-
210
- .note-item {
211
- padding: 8px 10px;
212
- border-radius: var(--radius-sm);
213
- cursor: pointer;
214
- transition: background 0.1s;
215
- }
216
- .note-item:hover { background: var(--bg-hover); }
217
- .note-item.active { background: var(--bg-active); }
218
-
219
- .note-item-title {
220
- font-size: 13px;
221
- font-weight: 500;
222
- color: var(--text-0);
223
- line-height: 1.4;
224
- white-space: nowrap;
225
- overflow: hidden;
226
- text-overflow: ellipsis;
227
- }
228
-
229
- .note-item-meta {
230
- font-size: 11px;
231
- color: var(--text-3);
232
- display: flex;
233
- align-items: center;
234
- gap: 6px;
235
- margin-top: 1px;
236
- }
237
-
238
- .note-item-type {
239
- font-size: 10px;
240
- font-weight: 500;
241
- letter-spacing: 0.03em;
242
- text-transform: uppercase;
243
- }
244
- .note-item-type.note { color: var(--accent-text); }
245
- .note-item-type.source { color: var(--green); }
246
- .note-item-type.synthesis { color: var(--synthesis); }
247
- .note-item-type.output { color: var(--output); }
248
-
249
- .note-item-dot {
250
- width: 2px; height: 2px;
251
- border-radius: 50%;
252
- background: var(--text-3);
253
- }
254
-
255
- .note-item-snippet {
256
- font-size: 11px;
257
- color: var(--text-3);
258
- margin-top: 2px;
259
- line-height: 1.4;
260
- display: -webkit-box;
261
- -webkit-line-clamp: 2;
262
- -webkit-box-orient: vertical;
263
- overflow: hidden;
264
- }
265
- .note-item-snippet mark {
266
- background: var(--accent-dim);
267
- color: var(--accent-text);
268
- border-radius: 2px;
269
- padding: 0 1px;
270
- }
271
-
272
- /* ═══ MAIN ═══ */
273
- #main {
274
- flex: 1;
275
- display: flex;
276
- flex-direction: column;
277
- overflow: hidden;
278
- position: relative;
279
- background: var(--bg-deep);
280
- }
281
-
282
- /* ═══ NOTE VIEW ═══ */
283
- #note-view {
284
- display: none;
285
- flex: 1;
286
- overflow: hidden;
287
- }
288
-
289
- #note-scroll {
290
- height: 100%;
291
- overflow-y: auto;
292
- scroll-behavior: smooth;
293
- }
294
-
295
- #note-article {
296
- width: 100%;
297
- padding: 48px 56px 80px;
298
- }
299
- #note-article.animate {
300
- animation: noteEnter 0.5s var(--ease) both;
301
- }
302
-
303
- @keyframes noteEnter {
304
- from { opacity: 0; transform: translateY(12px); }
305
- to { opacity: 1; transform: translateY(0); }
306
- }
307
-
308
- #note-type-line {
309
- font-size: 10px;
310
- font-weight: 600;
311
- letter-spacing: 0.1em;
312
- text-transform: uppercase;
313
- color: var(--accent-text);
314
- margin-bottom: 10px;
315
- opacity: 0.7;
316
- }
317
-
318
- #note-title {
319
- font-family: var(--font-sans);
320
- font-size: clamp(26px, 3.5vw, 34px);
321
- font-weight: 700;
322
- color: var(--text-0);
323
- line-height: 1.2;
324
- letter-spacing: -0.03em;
325
- margin-bottom: 16px;
326
- }
327
-
328
- #note-meta {
329
- display: flex;
330
- align-items: center;
331
- gap: 10px;
332
- font-size: 12px;
333
- color: var(--text-3);
334
- padding-bottom: 32px;
335
- border-bottom: 1px solid var(--border-dim);
336
- }
337
-
338
- #note-tags { display: flex; gap: 5px; flex-wrap: wrap; }
339
- .tag {
340
- font-size: 11px;
341
- color: var(--text-2);
342
- padding: 1px 8px;
343
- border-radius: 3px;
344
- background: var(--bg-2);
345
- border: 1px solid var(--border);
346
- }
347
-
348
- /* ═══ NOTE BODY ═══ */
349
- #note-body {
350
- padding-top: 28px;
351
- animation: bodyEnter 0.6s var(--ease) 0.1s both;
352
- }
353
-
354
- @keyframes bodyEnter {
355
- from { opacity: 0; }
356
- to { opacity: 1; }
357
- }
358
-
359
- #note-body .md-h1 {
360
- font-family: var(--font-sans);
361
- font-size: 22px;
362
- font-weight: 700;
363
- color: var(--text-0);
364
- line-height: 1.3;
365
- margin: 36px 0 12px;
366
- letter-spacing: -0.02em;
367
- }
368
-
369
- #note-body .md-h2 {
370
- font-family: var(--font-sans);
371
- font-size: 18px;
372
- font-weight: 600;
373
- color: var(--text-0);
374
- line-height: 1.35;
375
- margin: 32px 0 10px;
376
- letter-spacing: -0.01em;
377
- }
378
-
379
- #note-body .md-h3 {
380
- font-family: var(--font-sans);
381
- font-size: 12px;
382
- font-weight: 600;
383
- color: var(--accent-text);
384
- text-transform: uppercase;
385
- letter-spacing: 0.06em;
386
- margin: 28px 0 8px;
387
- }
388
-
389
- #note-body .md-body {
390
- font-size: 14.5px;
391
- color: var(--text-1);
392
- line-height: 1.8;
393
- margin: 0 0 4px;
394
- }
395
-
396
- #note-body .md-list {
397
- padding-left: 20px;
398
- margin: 4px 0;
399
- }
400
- #note-body .md-list li {
401
- font-size: 14.5px;
402
- color: var(--text-1);
403
- line-height: 1.8;
404
- margin: 2px 0;
405
- }
406
- #note-body .md-list li::marker { color: var(--text-3); }
407
- #note-body ul.md-list { list-style-type: disc; }
408
- #note-body ul.md-list li::marker { font-size: 8px; }
409
-
410
- #note-body .md-blockquote {
411
- font-family: var(--font-sans);
412
- font-style: italic;
413
- font-size: 14px;
414
- color: var(--text-2);
415
- line-height: 1.75;
416
- margin: 16px 0;
417
- padding: 2px 0 2px 18px;
418
- border-left: 2px solid var(--border);
419
- }
420
-
421
- #note-body .code-block {
422
- margin: 16px 0;
423
- background: var(--bg-1);
424
- border: 1px solid var(--border);
425
- border-radius: 6px;
426
- position: relative;
427
- overflow: hidden;
428
- }
429
- #note-body .code-block .code-lang {
430
- position: absolute;
431
- top: 0; right: 0;
432
- font-family: var(--font-sans);
433
- font-size: 10px;
434
- font-weight: 500;
435
- color: var(--text-3);
436
- padding: 6px 12px;
437
- letter-spacing: 0.02em;
438
- }
439
- #note-body .code-block pre { padding: 16px; overflow-x: auto; }
440
- #note-body .code-block code {
441
- font-family: var(--font-mono);
442
- font-size: 12.5px;
443
- line-height: 1.6;
444
- color: var(--code-text);
445
- }
446
-
447
- #note-body .inline-code {
448
- font-family: var(--font-mono);
449
- font-size: 12px;
450
- color: var(--code-text);
451
- background: var(--bg-2);
452
- border: 1px solid var(--border);
453
- border-radius: 3px;
454
- padding: 1px 5px;
455
- }
456
-
457
- #note-body .md-hr {
458
- border: none;
459
- height: 1px;
460
- background: var(--border);
461
- margin: 32px 20%;
462
- }
463
-
464
- #note-body strong { font-weight: 600; color: var(--text-0); }
465
- #note-body em { font-style: italic; }
466
-
467
- #note-body .external-link {
468
- color: var(--text-2);
469
- text-decoration: underline;
470
- text-decoration-color: var(--border);
471
- text-underline-offset: 2px;
472
- transition: color 0.15s;
473
- }
474
- #note-body .external-link:hover { color: var(--text-1); text-decoration-color: var(--text-2); }
475
-
476
- /* ── Markdown table ── */
477
- #note-body .md-table-wrap {
478
- overflow-x: auto;
479
- margin: 16px 0;
480
- border-radius: 6px;
481
- }
482
- #note-body .md-table {
483
- margin: 0;
484
- width: 100%;
485
- border-collapse: collapse;
486
- font-size: 13px;
487
- }
488
- #note-body .md-table th,
489
- #note-body .md-table td {
490
- padding: 8px 12px;
491
- border: 1px solid var(--border);
492
- text-align: left;
493
- color: var(--text-1);
494
- }
495
- #note-body .md-table th {
496
- background: var(--bg-2);
497
- font-weight: 600;
498
- color: var(--text-0);
499
- font-size: 11px;
500
- text-transform: uppercase;
501
- letter-spacing: 0.04em;
502
- }
503
- #note-body .md-table td { background: var(--bg-1); }
504
- #note-body .md-table tr:hover td { background: var(--bg-2); }
505
-
506
- /* ═══ WIKILINKS ═══ */
507
- .wikilink {
508
- color: var(--link);
509
- text-decoration: none;
510
- border-bottom: 1px solid transparent;
511
- transition: color 0.15s, border-color 0.15s;
512
- cursor: pointer;
513
- }
514
- .wikilink:hover { color: var(--link-hover); border-bottom-color: var(--link-hover); }
515
-
516
- .wikilink-broken {
517
- color: var(--link-broken);
518
- border-bottom: 1px dashed rgba(239, 107, 107, 0.3);
519
- }
520
-
521
- #wikilink-preview {
522
- position: fixed;
523
- z-index: 200;
524
- width: 280px;
525
- background: var(--bg-2);
526
- border: 1px solid var(--border);
527
- border-radius: var(--radius);
528
- padding: 14px 16px;
529
- pointer-events: none;
530
- opacity: 0;
531
- transform: translateY(4px);
532
- transition: opacity 0.2s var(--ease), transform 0.2s var(--ease);
533
- box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255,255,255,0.02);
534
- }
535
- #wikilink-preview.visible { opacity: 1; transform: translateY(0); pointer-events: auto; }
536
- #wikilink-preview .preview-type {
537
- font-size: 10px; font-weight: 600;
538
- text-transform: uppercase; letter-spacing: 0.06em;
539
- color: var(--accent-text); margin-bottom: 4px;
540
- }
541
- #wikilink-preview .preview-title {
542
- font-family: var(--font-sans);
543
- font-size: 14px; font-weight: 600; color: var(--text-0);
544
- line-height: 1.3; margin-bottom: 8px;
545
- }
546
- #wikilink-preview .preview-snippet {
547
- font-size: 12px; color: var(--text-2);
548
- line-height: 1.5;
549
- display: -webkit-box; -webkit-line-clamp: 3;
550
- -webkit-box-orient: vertical; overflow: hidden;
551
- }
552
- #wikilink-preview .preview-tags {
553
- display: flex; gap: 4px; margin-top: 8px;
554
- }
555
- #wikilink-preview .preview-tags:empty { display: none; }
556
- #wikilink-preview .preview-tag {
557
- font-size: 10px; color: var(--text-3);
558
- padding: 1px 6px; border-radius: 3px;
559
- background: var(--bg-3); border: 1px solid var(--border);
560
- }
561
-
562
- /* ═══ BACKLINKS ═══ */
563
- #backlinks {
564
- display: none;
565
- margin-top: 48px;
566
- padding-top: 24px;
567
- border-top: 1px solid var(--border-dim);
568
- animation: bodyEnter 0.6s var(--ease) 0.2s both;
569
- }
570
-
571
- .backlinks-label {
572
- font-size: 11px;
573
- font-weight: 600;
574
- color: var(--text-3);
575
- text-transform: uppercase;
576
- letter-spacing: 0.06em;
577
- margin-bottom: 10px;
578
- }
579
- #backlinks-count { color: var(--text-2); }
580
-
581
- .backlink-item {
582
- padding: 8px 12px;
583
- margin: 2px 0;
584
- border-radius: var(--radius-sm);
585
- cursor: pointer;
586
- transition: background 0.1s;
587
- }
588
- .backlink-item:hover { background: var(--bg-hover); }
589
- .backlink-title {
590
- font-size: 13px;
591
- font-weight: 500;
592
- color: var(--link);
593
- display: flex; align-items: center; gap: 6px;
594
- }
595
- .backlink-arrow { font-size: 11px; color: var(--text-3); }
596
- .backlink-context {
597
- font-size: 11.5px; color: var(--text-3);
598
- margin-top: 2px; line-height: 1.5;
599
- }
600
-
601
- /* ═══ GRAPH ═══ */
602
- #graph-view {
603
- flex: 1;
604
- position: relative;
605
- overflow: hidden;
606
- }
607
- #graph-canvas {
608
- display: block; width: 100%; height: 100%;
609
- cursor: grab;
610
- }
611
- #graph-canvas:active { cursor: grabbing; }
612
-
613
- #graph-tooltip {
614
- position: fixed; z-index: 50;
615
- font-family: var(--font-sans);
616
- font-size: 12px; font-weight: 500;
617
- color: var(--text-0);
618
- background: var(--bg-2);
619
- border: 1px solid var(--border);
620
- border-radius: var(--radius-sm);
621
- padding: 4px 10px;
622
- pointer-events: none; opacity: 0;
623
- transition: opacity 0.12s;
624
- white-space: nowrap;
625
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
626
- }
627
-
628
- /* ═══ EMPTY STATE ═══ */
629
- #empty-state {
630
- flex: 1;
631
- display: flex;
632
- flex-direction: column;
633
- align-items: center;
634
- justify-content: center;
635
- gap: 10px;
636
- animation: fadeIn 0.8s var(--ease);
637
- }
638
-
639
- .empty-glyph {
640
- color: var(--text-3);
641
- margin-bottom: 4px;
642
- }
643
-
644
- .empty-title {
645
- font-family: var(--font-sans);
646
- font-size: 16px;
647
- font-weight: 500;
648
- color: var(--text-2);
649
- }
650
-
651
- .empty-shortcuts {
652
- font-size: 12px;
653
- color: var(--text-3);
654
- display: flex;
655
- align-items: center;
656
- gap: 8px;
657
- }
658
- .empty-shortcuts kbd {
659
- font-family: var(--font-sans);
660
- font-size: 10px;
661
- background: var(--bg-2);
662
- border: 1px solid var(--border);
663
- border-radius: 3px;
664
- padding: 1px 5px;
665
- }
666
- .empty-shortcuts .dot {
667
- width: 2px; height: 2px;
668
- border-radius: 50%;
669
- background: var(--text-3);
670
- }
671
-
672
- /* ═══ COMMAND BAR ═══ */
673
- .overlay {
674
- position: fixed;
675
- inset: 0;
676
- z-index: 100;
677
- display: flex;
678
- align-items: flex-start;
679
- justify-content: center;
680
- padding-top: 20vh;
681
- background: rgba(5, 5, 7, 0.7);
682
- backdrop-filter: blur(8px);
683
- animation: overlayIn 0.15s var(--ease);
684
- }
685
- .overlay.hidden { display: none; }
686
-
687
- @keyframes overlayIn {
688
- from { opacity: 0; }
689
- to { opacity: 1; }
690
- }
691
-
692
- #command-bar {
693
- width: 520px;
694
- max-width: 90vw;
695
- background: var(--bg-1);
696
- border: 1px solid var(--border);
697
- border-radius: 12px;
698
- overflow: hidden;
699
- box-shadow: 0 24px 80px rgba(0, 0, 0, 0.6), 0 0 0 1px rgba(255,255,255,0.03);
700
- animation: barIn 0.2s var(--ease);
701
- }
702
-
703
- @keyframes barIn {
704
- from { opacity: 0; transform: translateY(-8px) scale(0.98); }
705
- to { opacity: 1; transform: translateY(0) scale(1); }
706
- }
707
-
708
- .command-input-wrap {
709
- display: flex;
710
- align-items: center;
711
- gap: 10px;
712
- padding: 14px 16px;
713
- border-bottom: 1px solid var(--border-dim);
714
- }
715
- .command-icon { color: var(--text-3); flex-shrink: 0; }
716
-
717
- #command-input {
718
- flex: 1;
719
- background: none; border: none;
720
- color: var(--text-0);
721
- font-family: var(--font-sans);
722
- font-size: 15px;
723
- outline: none;
724
- }
725
- #command-input::placeholder { color: var(--text-3); }
726
-
727
- .command-kbd {
728
- font-family: var(--font-sans);
729
- font-size: 10px;
730
- color: var(--text-3);
731
- background: var(--bg-2);
732
- border: 1px solid var(--border);
733
- border-radius: 3px;
734
- padding: 1px 5px;
735
- }
736
-
737
- #command-results {
738
- max-height: 320px;
739
- overflow-y: auto;
740
- }
741
- #command-results:empty { display: none; }
742
-
743
- .command-result {
744
- display: flex;
745
- flex-direction: column;
746
- padding: 10px 16px;
747
- cursor: pointer;
748
- transition: background 0.08s;
749
- }
750
- .command-result:hover,
751
- .command-result.focused { background: var(--bg-hover); }
752
- .command-result-title {
753
- font-size: 14px;
754
- font-weight: 500;
755
- color: var(--text-0);
756
- }
757
- .command-result-meta {
758
- font-size: 11px;
759
- color: var(--text-3);
760
- margin-top: 1px;
761
- }
762
- .command-result-snippet {
763
- font-size: 12px;
764
- color: var(--text-2);
765
- margin-top: 3px;
766
- line-height: 1.4;
767
- }
768
- .command-result-snippet mark {
769
- background: var(--accent-dim);
770
- color: var(--accent-text);
771
- border-radius: 2px;
772
- padding: 0 1px;
773
- }
774
-
775
- /* ═══ CREATE DIALOG ═══ */
776
- #create-dialog {
777
- width: 480px;
778
- max-width: 90vw;
779
- background: var(--bg-1);
780
- border: 1px solid var(--border);
781
- border-radius: 12px;
782
- overflow: hidden;
783
- box-shadow: 0 24px 80px rgba(0, 0, 0, 0.6);
784
- animation: barIn 0.2s var(--ease);
785
- display: flex;
786
- flex-direction: column;
787
- }
788
-
789
- .create-header {
790
- display: flex;
791
- align-items: center;
792
- justify-content: space-between;
793
- padding: 14px 16px;
794
- font-size: 13px;
795
- font-weight: 600;
796
- color: var(--text-1);
797
- border-bottom: 1px solid var(--border-dim);
798
- }
799
-
800
- .icon-btn {
801
- width: 24px; height: 24px;
802
- display: flex; align-items: center; justify-content: center;
803
- color: var(--text-3);
804
- background: none; border: none;
805
- cursor: pointer; border-radius: var(--radius-sm);
806
- transition: color 0.12s, background-color 0.12s;
807
- }
808
- .icon-btn:hover { color: var(--text-1); background: var(--bg-hover); }
809
-
810
- .create-fields {
811
- padding: 16px;
812
- display: flex;
813
- flex-direction: column;
814
- gap: 12px;
815
- }
816
-
817
- .field-row {
818
- display: flex;
819
- flex-direction: column;
820
- gap: 4px;
821
- }
822
- .field-row label {
823
- font-size: 10px;
824
- font-weight: 600;
825
- color: var(--text-3);
826
- text-transform: uppercase;
827
- letter-spacing: 0.06em;
828
- }
829
- .field-row select,
830
- .field-row input {
831
- padding: 7px 10px;
832
- background: var(--bg-2);
833
- border: 1px solid var(--border);
834
- border-radius: var(--radius-sm);
835
- color: var(--text-0);
836
- font-family: var(--font-sans);
837
- font-size: 13px;
838
- outline: none;
839
- transition: border-color 0.15s;
840
- }
841
- .field-row select:focus,
842
- .field-row input:focus {
843
- border-color: var(--accent);
844
- box-shadow: 0 0 0 2px var(--accent-dim);
845
- }
846
- .field-row select {
847
- appearance: none;
848
- cursor: pointer;
849
- background-image: url("data:image/svg+xml,%3Csvg width='10' height='6' viewBox='0 0 10 6' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%236b6b7a' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E");
850
- background-repeat: no-repeat;
851
- background-position: right 10px center;
852
- padding-right: 28px;
853
- }
854
- .field-row select option { background: var(--bg-2); }
855
-
856
- .field-grow { flex: 1; }
857
- .field-grow textarea {
858
- width: 100%;
859
- min-height: 140px;
860
- padding: 10px;
861
- background: var(--bg-2);
862
- border: 1px solid var(--border);
863
- border-radius: var(--radius-sm);
864
- color: var(--text-0);
865
- font-family: var(--font-mono);
866
- font-size: 12.5px;
867
- line-height: 1.6;
868
- outline: none;
869
- resize: vertical;
870
- transition: border-color 0.15s;
871
- }
872
- .field-grow textarea:focus {
873
- border-color: var(--accent);
874
- box-shadow: 0 0 0 2px var(--accent-dim);
875
- }
876
- .field-grow textarea::placeholder { color: var(--text-3); }
877
-
878
- #create-submit {
879
- margin: 0 16px 16px;
880
- padding: 8px;
881
- background: var(--accent);
882
- color: var(--text-0);
883
- font-family: var(--font-sans);
884
- font-size: 13px;
885
- font-weight: 600;
886
- border: none;
887
- border-radius: var(--radius-sm);
888
- cursor: pointer;
889
- transition: opacity 0.12s, transform 0.08s;
890
- }
891
- #create-submit:hover { opacity: 0.9; }
892
- #create-submit:active { transform: scale(0.98); }
893
-
894
- /* ═══ ANIMATIONS ═══ */
895
- @keyframes fadeIn {
896
- from { opacity: 0; }
897
- to { opacity: 1; }
898
- }
899
-
900
- .hidden { display: none !important; }
901
-
902
- /* ═══ MOBILE HEADER ═══ */
903
- #mobile-header {
904
- display: none;
905
- align-items: center;
906
- justify-content: space-between;
907
- padding: 8px 12px;
908
- background: var(--bg-0);
909
- border-bottom: 1px solid var(--border-dim);
910
- z-index: 10;
911
- }
912
- #mobile-header .icon-btn {
913
- width: 40px; height: 40px;
914
- color: var(--text-2);
915
- }
916
- .mobile-brand {
917
- font-size: 13px;
918
- font-weight: 600;
919
- color: var(--accent);
920
- letter-spacing: 0.04em;
921
- }
922
-
923
- #nav-backdrop {
924
- position: fixed;
925
- inset: 0;
926
- background: rgba(5, 5, 7, 0.6);
927
- z-index: 15;
928
- opacity: 0;
929
- transition: opacity 0.2s var(--ease-smooth);
930
- }
931
- #nav-backdrop.visible { opacity: 1; }
932
- #nav-backdrop.hidden { display: none; }
933
-
934
- /* ═══ RESPONSIVE ═══ */
935
- @media (max-width: 768px) {
936
- #mobile-header { display: flex; }
937
-
938
- #nav {
939
- position: fixed;
940
- top: 0; left: 0; bottom: 0;
941
- width: 280px;
942
- z-index: 20;
943
- transform: translateX(-100%);
944
- transition: transform 0.25s var(--ease);
945
- box-shadow: none;
946
- }
947
- #nav.open {
948
- transform: translateX(0);
949
- box-shadow: 8px 0 30px rgba(0, 0, 0, 0.5);
950
- }
951
-
952
- #main { flex-direction: column; }
953
- #note-article { padding: 24px 20px 60px; }
954
-
955
- /* Touch targets */
956
- .nav-btn { padding: 10px 12px; min-height: 44px; }
957
- .type-pill { padding: 6px 14px; min-height: 36px; }
958
- .note-item { padding: 12px 12px; min-height: 44px; }
959
- .backlink-item { padding: 12px; min-height: 44px; }
960
- }
1
+ :root{--bg: #ece6dd;--bg-grad-top: #f0ebe4;--bg-grad-bottom: #e6dfd5;--panel: rgba(250, 247, 242, .62);--panel-strong: rgba(251, 248, 244, .82);--panel-dark: rgba(21, 18, 16, .7);--panel-raised: rgba(255, 255, 255, .24);--panel-quiet: rgba(255, 255, 255, .12);--ink: #1d1712;--ink-soft: #5f554b;--ink-faint: #887a6d;--ink-on-dark: rgba(255, 246, 236, .92);--ink-on-dark-soft:rgba(255, 236, 220, .58);--line: rgba(69, 53, 40, .14);--line-strong: rgba(69, 53, 40, .22);--line-on-dark: rgba(255, 236, 220, .08);--accent: #ba6844;--accent-soft: rgba(186, 104, 68, .1);--accent-deep: #945136;--accent-gradient: linear-gradient(135deg, #c16b47, #945136);--forest: #2e6b5b;--forest-soft: rgba(46, 107, 91, .12);--gold: #987b43;--gold-soft: rgba(152, 123, 67, .12);--violet: #735bb0;--violet-soft: rgba(113, 88, 170, .12);--broken: #9a7161;--graph-bg-1: #140f0d;--graph-bg-2: #181210;--graph-bg-3: #0f0b09;--shadow-sm: 0 2px 6px rgba(40, 28, 18, .06);--shadow: 0 18px 48px rgba(40, 28, 18, .08);--shadow-lg: 0 28px 80px rgba(40, 28, 18, .12);--radius-sm: 6px;--radius: 8px;--radius-md: 10px;--radius-lg: 12px;--radius-pill: 999px;--ease: cubic-bezier(.22, 1, .36, 1);--dur-fast: .12s;--dur: .16s;--dur-slow: .22s;--font-display: "Fraunces", Georgia, "Times New Roman", serif;--font-sans: "Manrope", system-ui, -apple-system, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, monospace}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0;height:100%;background:#140f0d;font-family:var(--font-sans);color:#fff8ef}body{overflow:hidden}button{font:inherit;color:inherit}.dirA{position:relative;width:100%;height:100vh;overflow:hidden;background:radial-gradient(circle at 18% 14%,rgba(214,154,118,.08),transparent 32%),radial-gradient(circle at 82% 82%,rgba(103,181,161,.06),transparent 34%),radial-gradient(circle at 50% 50%,#23181400 50%,#00000059),linear-gradient(135deg,#140f0d,#181210 42%,#0f0b09);color:#fff6eceb;font-family:var(--font-sans);isolation:isolate}.dirA:before{content:"";position:absolute;inset:0;pointer-events:none;z-index:1;background:linear-gradient(rgba(255,244,232,.02) 1px,transparent 1px),linear-gradient(90deg,rgba(255,244,232,.02) 1px,transparent 1px);background-size:140px 140px;mask-image:radial-gradient(circle at 50% 50%,black 40%,transparent 95%)}.dirA:after{content:"";position:absolute;inset:0;pointer-events:none;z-index:1;background-image:radial-gradient(1px 1px at 12% 22%,rgba(255,240,220,.5),transparent 100%),radial-gradient(1px 1px at 78% 18%,rgba(255,230,200,.35),transparent 100%),radial-gradient(1px 1px at 32% 78%,rgba(255,240,220,.4),transparent 100%),radial-gradient(1px 1px at 88% 64%,rgba(255,230,200,.35),transparent 100%),radial-gradient(1px 1px at 55% 42%,rgba(255,240,220,.3),transparent 100%),radial-gradient(1px 1px at 22% 58%,rgba(255,220,200,.3),transparent 100%),radial-gradient(1px 1px at 68% 88%,rgba(255,240,220,.4),transparent 100%)}.dirA-topbar{position:absolute;top:0;left:0;right:0;z-index:40;display:flex;align-items:center;gap:16px;padding:18px 24px;pointer-events:none}.dirA-topbar>*{pointer-events:auto}.dirA-brand{display:flex;align-items:center;gap:10px;padding:8px 14px 8px 10px;border-radius:10px;background:#1a1310b8;border:1px solid rgba(255,236,220,.09);backdrop-filter:blur(10px)}.dirA-brand-mark{width:28px;height:28px;display:grid;place-items:center;color:#f1c49e}.dirA-brand-name{font-family:var(--font-display);font-size:1.1rem;letter-spacing:-.03em;color:#fff8ef;line-height:1}.dirA-brand-sub{font-size:.54rem;text-transform:uppercase;letter-spacing:.16em;color:#ffecdc85;margin-top:3px}.dirA-search{flex:0 1 440px;display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:10px;background:#1a13109e;border:1px solid rgba(255,236,220,.09);backdrop-filter:blur(10px);color:#ffecdcb8;cursor:pointer;text-align:left;transition:background var(--dur) var(--ease),border-color var(--dur) var(--ease)}.dirA-search:hover{background:#1a1310d1;border-color:#ffecdc29}.dirA-search-text{flex:1;font-size:.86rem;color:#ffecdc80}.dirA-search .kbd,.dirA-footer .kbd{font-family:var(--font-mono);font-size:.58rem;padding:2px 7px;border-radius:999px;border:1px solid rgba(255,236,220,.12);background:#ffecdc0a;color:#ffecdcb3}.dirA-filters{display:flex;gap:4px;margin-left:auto;padding:5px;border-radius:10px;background:#1a13109e;border:1px solid rgba(255,236,220,.09);backdrop-filter:blur(10px);flex-wrap:wrap;max-width:48vw}.dirA-filter{appearance:none;border:none;background:transparent;padding:6px 11px;border-radius:8px;font-size:.62rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#ffecdc8a;cursor:pointer;transition:all .16s var(--ease);display:inline-flex;align-items:center;gap:6px}.dirA-filter:hover{color:#fff8ef}.dirA-filter.active{background:#ffecdc14;color:#fff8ef}.dirA-filter .dot{width:7px;height:7px;border-radius:999px;background:var(--tc, rgba(255,236,220,.5));box-shadow:0 0 8px var(--tc, transparent)}.dirA-title{position:absolute;left:28px;top:92px;z-index:15;pointer-events:none;max-width:420px}.dirA-title .eyebrow{font-size:.58rem;font-weight:800;letter-spacing:.2em;text-transform:uppercase;color:#ffecdc85}.dirA-title h1{margin:10px 0 0;font-family:var(--font-display);font-weight:500;font-size:3rem;letter-spacing:-.045em;line-height:.95;color:#fff8ef}.dirA-title h1 em{font-style:italic;font-weight:400;color:#d9a684}.dirA-title .sub{margin-top:14px;font-size:.85rem;line-height:1.55;color:#ffecdc99;max-width:34ch}.dirA-pulse{position:absolute;right:28px;top:94px;z-index:15;display:flex;gap:8px;pointer-events:none}.dirA-pulse-stat{min-width:78px;padding:9px 12px;border-radius:10px;background:#1a13108f;border:1px solid rgba(255,236,220,.08);backdrop-filter:blur(10px)}.dirA-pulse-stat .label{font-size:.5rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:#ffecdc80}.dirA-pulse-stat .value{margin-top:4px;font-family:var(--font-display);font-weight:500;font-size:1.4rem;letter-spacing:-.03em;color:#fff8ef;line-height:1}.dirA-stage{position:absolute;inset:0;z-index:5;cursor:grab;overflow:hidden;user-select:none;-webkit-user-select:none;background:radial-gradient(ellipse 70% 55% at 30% 40%,rgba(186,104,68,.1),transparent 70%),radial-gradient(ellipse 55% 45% at 72% 64%,rgba(113,88,170,.08),transparent 70%),radial-gradient(ellipse 50% 40% at 50% 80%,rgba(46,107,91,.07),transparent 70%)}.dirA-stage.dragging{cursor:grabbing}.dirA-canvas{position:absolute;inset:0;width:100%;height:100%;display:block;pointer-events:none}.dirA-labels{position:absolute;inset:0;pointer-events:none;z-index:2;font-family:var(--font-sans)}.dirA-lbl{position:absolute;font-size:10.5px;letter-spacing:.01em;color:#fff0dc8c;text-align:center;text-shadow:0 1px 3px rgba(20,14,8,.85),0 0 6px rgba(20,14,8,.6);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:color .16s ease}.dirA-lbl.hop1{color:#fff4e2eb;font-weight:500;font-size:11px}.dirA-lbl.active{color:#fff8ef;font-weight:600;font-size:12.5px;text-shadow:0 0 10px rgba(255,200,140,.6),0 1px 3px rgba(20,14,8,.9)}.dirA-zoom{position:absolute;right:28px;bottom:22px;z-index:15;display:flex;align-items:center;gap:4px;padding:6px;border-radius:10px;background:#1a1310ad;border:1px solid rgba(255,236,220,.08);backdrop-filter:blur(10px)}.dirA-zoom button{appearance:none;width:30px;height:30px;border:none;background:transparent;color:#ffecdcb3;font-family:var(--font-mono);font-size:.85rem;font-weight:700;cursor:pointer;border-radius:7px;transition:all .16s var(--ease)}.dirA-zoom button:hover{background:#ffecdc14;color:#fff8ef}.dirA-zoom .zoom-val{color:#ffecdc99;font-family:var(--font-mono);font-size:.66rem;padding:0 8px}.dirA-footer{position:absolute;left:28px;bottom:22px;z-index:15;display:flex;align-items:center;gap:14px;padding:8px 14px;border-radius:10px;background:#1a1310ad;border:1px solid rgba(255,236,220,.08);backdrop-filter:blur(10px);font-size:.62rem;color:#ffecdc9e}.dirA-footer .kbd{margin-right:5px}.dirA-footer .sep{width:3px;height:3px;border-radius:999px;background:#ffecdc40}.dirA-empty-hint{position:absolute;right:28px;top:50%;transform:translateY(-50%);z-index:30;width:min(360px,40vw);padding:26px 28px;border-radius:14px;border:1px solid rgba(255,236,220,.1);background:#1a1310c7;backdrop-filter:blur(12px);color:#ffecdcc7;text-align:center}.dirA-empty-hint[hidden]{display:none}.dirA-empty-hint h3{margin:0;font-family:var(--font-display);font-weight:500;font-size:1.6rem;letter-spacing:-.03em;color:#fff8ef}.dirA-empty-hint p{margin:10px 0 0;font-size:.82rem;line-height:1.55}.dirA-reader{position:absolute;top:88px;right:24px;bottom:72px;width:var(--reader-w, min(900px, 62vw));z-index:30;border-radius:16px;border:1px solid rgba(69,53,40,.14);background:linear-gradient(180deg,#faf6f1fa,#f5efe9f5);box-shadow:0 40px 120px #00000080,0 18px 48px #281c123d;color:#1d1712;display:flex;flex-direction:column;overflow:hidden;animation:dirA-reader-in .42s var(--ease) both}.dirA-reader[hidden]{display:none}@keyframes dirA-reader-in{0%{opacity:0;transform:translate(24px) scale(.98)}to{opacity:1;transform:translate(0) scale(1)}}.dirA-reader.resizing{transition:none;user-select:none}.dirA-reader.resizing *{cursor:col-resize!important}.dirA-reader-resizer{position:absolute;top:0;left:-3px;bottom:0;width:8px;cursor:col-resize;z-index:5}.dirA-reader-resizer:before{content:"";position:absolute;left:3px;top:50%;transform:translateY(-50%);width:2px;height:48px;border-radius:999px;background:#45352829;transition:all .16s var(--ease)}.dirA-reader-resizer:hover:before,.dirA-reader.resizing .dirA-reader-resizer:before{background:var(--accent);height:72px}.dirA-reader-progress{position:absolute;top:0;left:0;height:2px;width:0;background:var(--accent-gradient);z-index:10;transition:width 80ms linear}.dirA-reader-chrome{display:flex;align-items:center;justify-content:space-between;padding:12px 18px;border-bottom:1px solid rgba(69,53,40,.14);background:#ffffff57;backdrop-filter:blur(8px);position:relative;z-index:2}.dirA-reader-breadcrumb{display:flex;align-items:center;gap:5px;font-family:var(--font-mono);font-size:.64rem;color:var(--ink-faint);letter-spacing:.02em;overflow:hidden;min-width:0;flex:1}.dirA-reader-breadcrumb svg{flex:0 0 auto;color:var(--ink-faint)}.dirA-reader-breadcrumb .crumb{cursor:pointer;padding:3px 7px;border-radius:5px;color:var(--ink-faint);transition:all .16s var(--ease);overflow:hidden;white-space:nowrap;text-overflow:ellipsis;max-width:180px}.dirA-reader-breadcrumb .crumb:hover{color:var(--accent);background:#ba684414}.dirA-reader-breadcrumb .crumb.current{color:var(--ink);font-weight:700}.dirA-reader-breadcrumb .sep{color:var(--ink-faint);opacity:.5}.dirA-reader-nav{display:flex;gap:4px;align-items:center}.dirA-nav-btn{appearance:none;width:30px;height:30px;border-radius:8px;border:1px solid rgba(69,53,40,.14);background:#ffffff80;color:var(--ink-soft);cursor:pointer;display:grid;place-items:center;transition:all .16s var(--ease)}.dirA-nav-btn:hover{background:#ba684414;color:var(--accent);border-color:#ba68444d}.dirA-nav-btn.close{margin-left:8px}.dirA-reader-body{flex:1;overflow-y:auto;padding:36px 56px 56px;position:relative;scroll-behavior:smooth}.dirA-reader-kicker{display:flex;align-items:center;gap:10px;color:var(--ink-faint);font-size:.66rem;font-weight:800;letter-spacing:.18em;text-transform:uppercase}.dirA-reader-type{padding:4px 10px;border-radius:999px;font-size:.58rem;font-weight:800;letter-spacing:.14em}.dirA-reader-title{margin:14px 0 0;font-family:var(--font-display);font-weight:500;font-size:clamp(2.4rem,3.6vw,3.2rem);line-height:.98;letter-spacing:-.05em;color:var(--ink);text-wrap:balance}.dirA-reader-deck{margin:18px 0 0;max-width:52ch;font-family:var(--font-display);font-style:italic;font-weight:400;font-size:1.18rem;line-height:1.5;color:var(--ink-soft)}.dirA-reader-deck:empty{display:none}.dirA-reader-metaline{margin-top:22px;padding:12px 0;border-top:1px solid rgba(69,53,40,.14);border-bottom:1px solid rgba(69,53,40,.14);display:flex;align-items:center;gap:14px;flex-wrap:wrap;font-family:var(--font-mono);font-size:.7rem;color:var(--ink-faint)}.dirA-reader-metaline .slug{color:var(--accent)}.dirA-reader-metaline .tag{padding:2px 8px;border-radius:999px;background:var(--accent-soft);color:var(--accent);font-size:.68rem;font-weight:600}.dirA-reader-article{margin-top:28px;position:relative}.dirA-reader-article>.md-body:first-child:first-letter,.dirA-reader-article>.md-h2:first-child+.md-body:first-letter{font-family:var(--font-display);font-weight:500;font-size:4.2rem;line-height:.85;float:left;margin:6px 10px 0 0;color:var(--accent);letter-spacing:-.04em}.md-h1{font-family:var(--font-display);font-weight:500;font-size:2rem;line-height:1.04;margin:40px 0 16px;letter-spacing:-.03em;color:var(--ink)}.md-h2{font-family:var(--font-display);font-weight:500;font-size:1.72rem;line-height:1.08;margin:40px 0 16px;letter-spacing:-.03em;color:var(--ink)}.md-h3{font-family:var(--font-display);font-weight:500;font-size:1.22rem;line-height:1.2;margin:30px 0 12px;letter-spacing:-.02em;color:var(--ink)}.md-body{font-size:1.02rem;line-height:1.82;color:var(--ink-soft);margin:0}.md-body+.md-body{margin-top:14px}.md-body strong,.md-list strong{color:var(--ink)}.md-list{margin:12px 0 12px 22px;padding:0}.md-list li{margin:6px 0;color:var(--ink-soft);line-height:1.75}.md-list li::marker{color:var(--accent)}.md-hr{border:none;border-top:1px solid rgba(69,53,40,.14);margin:28px 0}.md-blockquote{margin:30px -16px;padding:22px 28px;border-left:3px solid var(--accent);background:linear-gradient(90deg,#fff6ebcc,#fff6eb4d);border-radius:0 10px 10px 0;font-family:var(--font-display);font-style:italic;font-size:1.24rem;line-height:1.5;color:var(--ink);position:relative}.md-blockquote:before{content:"\201c";position:absolute;top:-10px;left:12px;font-family:var(--font-display);font-size:4rem;color:#ba684440;line-height:1}.inline-code{font-family:var(--font-mono);padding:2px 7px;border-radius:6px;background:var(--accent-soft);color:#975033;font-size:.88em}.code-block{position:relative;margin:22px 0;padding:20px 22px;background:#191310;color:#ffecdce0;border-radius:10px;overflow-x:auto;font-family:var(--font-mono);font-size:.86rem;line-height:1.55}.code-block .code-lang{display:block;font-size:.58rem;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:#ffecdc73;margin-bottom:8px}.code-block pre{margin:0;white-space:pre}.code-block code{font:inherit}.md-table-wrap{overflow-x:auto;margin:22px 0;border-radius:10px;border:1px solid rgba(69,53,40,.14)}.md-table{width:100%;border-collapse:collapse;font-size:.92rem}.md-table th,.md-table td{padding:10px 14px;border-bottom:1px solid rgba(69,53,40,.14);text-align:left}.md-table th{font-weight:700;color:var(--ink);background:#ffffff80;font-size:.78rem;letter-spacing:.04em}.md-table td{color:var(--ink-soft)}.md-table tr:last-child td{border-bottom:none}.md-image{max-width:100%;border-radius:8px;margin:18px 0}.wikilink{text-decoration:none;font-weight:700;color:var(--accent);cursor:pointer;background-image:linear-gradient(transparent calc(100% - .08em),#ba684447 0);background-repeat:no-repeat;background-size:100% 100%;transition:background-size .16s var(--ease),color .16s var(--ease);padding:0 2px;border-radius:3px}.wikilink:hover{background-size:100% .22em;color:var(--accent-deep)}.wikilink-broken{color:var(--broken);border-bottom:1px dashed rgba(154,113,97,.4)}.external-link{color:var(--accent);text-decoration:underline;text-decoration-color:#ba684466;text-underline-offset:2px}.dirA-links-grid{margin-top:40px;padding-top:28px;border-top:1px solid rgba(69,53,40,.14);display:grid;gap:24px}.dirA-links-grid:empty{display:none}.dirA-links-section-label{color:var(--ink-faint);font-size:.64rem;font-weight:800;letter-spacing:.2em;text-transform:uppercase;display:flex;align-items:center;gap:10px}.dirA-links-section-label .count{padding:1px 8px;border-radius:999px;background:#ba684424;color:var(--accent);font-size:.66rem;letter-spacing:.05em}.dirA-links-list{display:grid;gap:10px;margin-top:14px}.dirA-linkcard{padding:14px 16px;border:1px solid rgba(69,53,40,.14);border-radius:10px;background:#fff6;cursor:pointer;transition:all .16s var(--ease);display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center;text-align:left}.dirA-linkcard:hover{background:#ffffffb3;border-color:#ba68444d;transform:translate(3px);box-shadow:0 4px 14px #281c1214}.dirA-linkcard-dot{width:10px;height:10px;border-radius:999px;flex:0 0 auto}.dirA-linkcard-title{color:var(--ink);font-weight:800;font-size:.94rem}.dirA-linkcard-deck{color:var(--ink-soft);font-size:.82rem;line-height:1.45;margin-top:3px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.dirA-linkcard-arrow{color:var(--accent);font-size:1.1rem;font-family:var(--font-display)}.wl-preview{position:fixed;z-index:200;width:340px;padding:16px 18px;border:1px solid rgba(69,53,40,.14);border-radius:12px;background:linear-gradient(180deg,#fbf7f2fa,#f6f1ecf5);box-shadow:0 24px 60px #00000073,0 10px 30px #281c1224;backdrop-filter:blur(10px);animation:wl-in .18s var(--ease) both;color:var(--ink);pointer-events:none}.wl-preview[hidden]{display:none}@keyframes wl-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.wl-preview-header{display:flex;align-items:center;justify-content:space-between;gap:10px}.wl-preview-type{padding:3px 9px;border-radius:999px;font-size:.56rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase}.wl-preview-meta{font-family:var(--font-mono);font-size:.64rem;color:var(--ink-faint);letter-spacing:.04em}.wl-preview-title{margin-top:10px;font-family:var(--font-display);font-size:1.26rem;line-height:1.1;color:var(--ink);letter-spacing:-.02em;font-weight:500}.wl-preview-snippet{margin-top:10px;color:var(--ink-soft);font-size:.86rem;line-height:1.55}.wl-preview-footer{margin-top:12px;padding-top:10px;border-top:1px solid rgba(69,53,40,.1)}.wl-preview-slug{font-family:var(--font-mono);font-size:.64rem;color:var(--accent);letter-spacing:.02em}.overlay{position:fixed;inset:0;z-index:300;display:flex;align-items:flex-start;justify-content:center;padding-top:14vh;background:#0e0a0885;backdrop-filter:blur(6px);animation:overlay-in .16s var(--ease) both}.overlay.hidden{display:none}@keyframes overlay-in{0%{opacity:0}to{opacity:1}}#command-bar{width:min(640px,90vw);border-radius:14px;border:1px solid rgba(255,236,220,.14);background:#1a1310eb;box-shadow:0 40px 120px #0000008c,0 12px 30px #00000059;overflow:hidden;animation:cmd-in .2s var(--ease) both}@keyframes cmd-in{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.command-input-wrap{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid rgba(255,236,220,.08);color:#ffecdcb8}.command-icon{flex:0 0 auto}#command-input{flex:1;background:transparent;border:none;outline:none;color:#fff8ef;font:inherit;font-size:.98rem}#command-input::placeholder{color:#ffecdc73}.command-kbd{font-family:var(--font-mono);font-size:.6rem;padding:2px 7px;border-radius:999px;border:1px solid rgba(255,236,220,.14);background:#ffecdc0a;color:#ffecdcb3}#command-results{max-height:50vh;overflow-y:auto}.command-result{display:flex;align-items:center;gap:12px;padding:12px 16px;border-bottom:1px solid rgba(255,236,220,.04);cursor:pointer;color:#ffecdcd1;transition:background .12s var(--ease)}.command-result:last-child{border-bottom:none}.command-result:hover,.command-result.active{background:#ffecdc0f}.command-result-dot{width:8px;height:8px;border-radius:999px;flex:0 0 auto}.command-result-body{flex:1;min-width:0}.command-result-title{font-weight:600;font-size:.92rem;color:#fff8ef;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.command-result-slug{font-family:var(--font-mono);font-size:.66rem;color:#ffecdc80;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.command-result-type{font-size:.58rem;font-weight:800;letter-spacing:.14em;text-transform:uppercase;padding:2px 8px;border-radius:999px;flex:0 0 auto}.command-empty{padding:20px 16px;text-align:center;color:#ffecdc80;font-size:.86rem}@media(max-width:1200px){.dirA-topbar{flex-wrap:wrap;row-gap:10px;padding:14px 18px}.dirA-search{flex:1 1 auto;min-width:240px}.dirA-filters{width:100%;margin-left:0;max-width:none;order:3;justify-content:flex-start;overflow-x:auto;flex-wrap:nowrap}.dirA-pulse{top:auto;bottom:80px;right:18px;flex-wrap:wrap}.dirA-title{left:18px;top:150px;max-width:300px}.dirA-title h1{font-size:2.2rem}.dirA-reader{top:160px;right:14px;bottom:64px}.dirA-empty-hint{top:auto;bottom:90px;right:18px;transform:none}}@media(max-width:820px){.dirA-topbar{padding:10px 14px;gap:10px}.dirA-brand-sub,.dirA-title{display:none}.dirA-pulse{right:14px;bottom:70px;gap:4px}.dirA-pulse-stat{min-width:58px;padding:6px 9px}.dirA-pulse-stat .value{font-size:1.1rem}.dirA-footer{font-size:.56rem;padding:6px 10px;gap:8px}.dirA-footer span:nth-child(n+5){display:none}.dirA-reader{inset:auto 10px 60px;width:auto!important;height:70vh}.dirA-reader-resizer{display:none}.dirA-reader-body{padding:24px 22px 40px}.dirA-empty-hint{inset:auto 14px 74px;transform:none;width:auto}}