concept-atlas-dense-explain 0.1.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.
@@ -0,0 +1,2425 @@
1
+ @charset "UTF-8";
2
+
3
+ /* ==========================================================================
4
+ THEME VARIABLES & DESIGN SYSTEM (Editorial / Knowledge Atlas Style)
5
+ ========================================================================== */
6
+
7
+ :root,
8
+ [data-theme="dark"] {
9
+ --theme-mode: "dark";
10
+
11
+ /* Background layers - deep indigo slate for high-tech monograph feel */
12
+ --bg-canvas: #090d16;
13
+ --bg-surface: #0f172a;
14
+ --bg-card: #151f32;
15
+ --bg-card-hover: #1c2a44;
16
+ --bg-subtle: #1e293b;
17
+ --bg-highlight: rgba(56, 189, 248, 0.08);
18
+
19
+ /* Borders & Dividers */
20
+ --border-subtle: rgba(255, 255, 255, 0.08);
21
+ --border-medium: rgba(255, 255, 255, 0.14);
22
+ --border-strong: rgba(255, 255, 255, 0.24);
23
+ --border-accent: rgba(99, 102, 241, 0.4);
24
+
25
+ /* Typography Colors */
26
+ --text-primary: #f8fafc;
27
+ --text-secondary: #cbd5e1;
28
+ --text-muted: #94a3b8;
29
+ --text-dim: #64748b;
30
+ --text-accent: #38bdf8;
31
+
32
+ /* Accent & Category Semantic Tones */
33
+ --primary: #6366f1;
34
+ --primary-light: #818cf8;
35
+ --primary-glow: rgba(99, 102, 241, 0.25);
36
+
37
+ --accent-cyan: #06b6d4;
38
+ --accent-emerald: #10b981;
39
+ --accent-amber: #f59e0b;
40
+ --accent-rose: #f43f5e;
41
+ --accent-purple: #a855f7;
42
+
43
+ /* Code & Syntax */
44
+ --code-bg: #060911;
45
+ --code-text: #34d399;
46
+ --code-border: rgba(255, 255, 255, 0.1);
47
+
48
+ /* Shadows & Depth */
49
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.4);
50
+ --shadow-md: 0 4px 16px -2px rgba(0, 0, 0, 0.5), 0 2px 6px -1px rgba(0, 0, 0, 0.4);
51
+ --shadow-lg: 0 10px 30px -4px rgba(0, 0, 0, 0.6), 0 4px 12px -2px rgba(0, 0, 0, 0.4);
52
+ --shadow-glow: 0 0 20px rgba(99, 102, 241, 0.2);
53
+
54
+ /* Knowledge Badge & Callouts */
55
+ --callout-info-bg: rgba(56, 189, 248, 0.08);
56
+ --callout-info-border: #38bdf8;
57
+ --callout-warn-bg: rgba(245, 158, 11, 0.08);
58
+ --callout-warn-border: #f59e0b;
59
+ --callout-danger-bg: rgba(244, 63, 94, 0.08);
60
+ --callout-danger-border: #f43f5e;
61
+ --callout-success-bg: rgba(16, 185, 129, 0.08);
62
+ --callout-success-border: #10b981;
63
+
64
+ /* Graph background grid */
65
+ --graph-grid: radial-gradient(circle, rgba(255, 255, 255, 0.06) 1px, transparent 1px);
66
+ }
67
+
68
+ [data-theme="light"] {
69
+ --theme-mode: "light";
70
+
71
+ /* Background layers - warm parchment & crisp editorial paper */
72
+ --bg-canvas: #f6f7f9;
73
+ --bg-surface: #ffffff;
74
+ --bg-card: #ffffff;
75
+ --bg-card-hover: #f1f5f9;
76
+ --bg-subtle: #f8fafc;
77
+ --bg-highlight: rgba(37, 99, 235, 0.06);
78
+
79
+ /* Borders & Dividers */
80
+ --border-subtle: rgba(0, 0, 0, 0.06);
81
+ --border-medium: rgba(0, 0, 0, 0.12);
82
+ --border-strong: rgba(0, 0, 0, 0.2);
83
+ --border-accent: rgba(79, 70, 229, 0.35);
84
+
85
+ /* Typography Colors */
86
+ --text-primary: #0f172a;
87
+ --text-secondary: #334155;
88
+ --text-muted: #64748b;
89
+ --text-dim: #94a3b8;
90
+ --text-accent: #2563eb;
91
+
92
+ /* Accent & Category Semantic Tones */
93
+ --primary: #4f46e5;
94
+ --primary-light: #6366f1;
95
+ --primary-glow: rgba(79, 70, 229, 0.18);
96
+
97
+ --accent-cyan: #0891b2;
98
+ --accent-emerald: #059669;
99
+ --accent-amber: #d97706;
100
+ --accent-rose: #e11d48;
101
+ --accent-purple: #9333ea;
102
+
103
+ /* Code & Syntax */
104
+ --code-bg: #1e293b;
105
+ --code-text: #38bdf8;
106
+ --code-border: rgba(0, 0, 0, 0.08);
107
+
108
+ /* Shadows & Depth */
109
+ --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.05);
110
+ --shadow-md: 0 4px 16px -2px rgba(15, 23, 42, 0.08), 0 2px 6px -1px rgba(15, 23, 42, 0.04);
111
+ --shadow-lg: 0 12px 32px -4px rgba(15, 23, 42, 0.12), 0 4px 12px -2px rgba(15, 23, 42, 0.06);
112
+ --shadow-glow: 0 0 20px rgba(79, 70, 229, 0.12);
113
+
114
+ /* Knowledge Badge & Callouts */
115
+ --callout-info-bg: #eff6ff;
116
+ --callout-info-border: #3b82f6;
117
+ --callout-warn-bg: #fffbeb;
118
+ --callout-warn-border: #f59e0b;
119
+ --callout-danger-bg: #fff1f2;
120
+ --callout-danger-border: #f43f5e;
121
+ --callout-success-bg: #ecfdf5;
122
+ --callout-success-border: #10b981;
123
+
124
+ /* Graph background grid */
125
+ --graph-grid: radial-gradient(circle, rgba(0, 0, 0, 0.07) 1px, transparent 1px);
126
+ }
127
+
128
+ /* ==========================================================================
129
+ RESET & BASE TYPOGRAPHY
130
+ ========================================================================== */
131
+
132
+ * {
133
+ box-sizing: border-box;
134
+ margin: 0;
135
+ padding: 0;
136
+ }
137
+
138
+ html, body {
139
+ height: 100%;
140
+ background: var(--bg-canvas);
141
+ color: var(--text-primary);
142
+ font-family: 'Plus Jakarta Sans', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Noto Sans SC", sans-serif;
143
+ font-size: 14px;
144
+ line-height: 1.6;
145
+ letter-spacing: -0.01em;
146
+ overflow: hidden;
147
+ transition: background-color 0.3s ease, color 0.3s ease;
148
+ -webkit-font-smoothing: antialiased;
149
+ -moz-osx-font-smoothing: grayscale;
150
+ }
151
+
152
+ /* Editorial Title Font Styling */
153
+ h1, h2, h3, .hero-title, .brand-title {
154
+ font-family: 'Lora', 'Noto Serif SC', Georgia, serif;
155
+ }
156
+
157
+ button, input, select {
158
+ font: inherit;
159
+ color: inherit;
160
+ }
161
+
162
+ button {
163
+ cursor: pointer;
164
+ border: none;
165
+ background: transparent;
166
+ outline: none;
167
+ }
168
+
169
+ button:focus-visible, a:focus-visible, [role="button"]:focus-visible {
170
+ outline: 2px solid var(--accent-cyan);
171
+ outline-offset: 3px;
172
+ }
173
+
174
+ .global-search { position: relative; display: flex; align-items: center; gap: 7px; min-width: 220px; margin-left: auto; color: var(--text-muted, #94a3b8); }
175
+ .global-search input { width: 100%; border: 1px solid var(--line-subtle, rgba(148,163,184,.24)); border-radius: 8px; background: var(--surface-soft, rgba(15,23,42,.3)); color: inherit; padding: 7px 28px 7px 28px; }
176
+ .global-search > svg { position: absolute; left: 9px; pointer-events: none; }
177
+ .global-search > button { position: absolute; right: 5px; border: 0; background: transparent; color: inherit; padding: 3px; }
178
+ .global-search-results { position: absolute; z-index: 20; top: calc(100% + 6px); left: 0; right: 0; padding: 5px; border: 1px solid var(--line-subtle, rgba(148,163,184,.24)); border-radius: 10px; background: var(--surface-strong, #111827); box-shadow: 0 12px 30px rgba(0,0,0,.24); }
179
+ .global-search-results button { display: grid; gap: 2px; width: 100%; border: 0; border-radius: 7px; background: transparent; color: var(--text-primary, #e2e8f0); text-align: left; padding: 8px; }
180
+ .global-search-results button:hover { background: rgba(148,163,184,.12); }
181
+ .global-search-results small { color: var(--text-muted, #94a3b8); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
182
+
183
+ /* Optional semantic layout primitives */
184
+ .semantic-stack { display: flex; flex-direction: column; }
185
+ .semantic-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); }
186
+ .semantic-split { display: grid; grid-template-columns: var(--split-ratio, 1fr 1fr); align-items: start; }
187
+ .gap-sm { gap: 8px; } .gap-md { gap: 16px; } .gap-lg { gap: 28px; }
188
+ .semantic-tabs details { border-bottom: 1px solid var(--border-subtle); padding: 8px 0; }
189
+ .semantic-tabs summary { cursor: pointer; font-weight: 700; color: var(--text-primary); }
190
+ .mermaid-tools { display: inline-flex; align-items: center; gap: 5px; }
191
+ .mermaid-tools button { width: 22px; height: 22px; border: 1px solid var(--border-medium); border-radius: 4px; background: var(--bg-subtle); font-weight: 700; }
192
+ .mermaid-tools button:hover { color: var(--primary); border-color: var(--primary); }
193
+ .mermaid-canvas { overflow: hidden; min-height: 120px; display: grid; place-items: center; cursor: grab; }
194
+ .mermaid-canvas-inner { display: inline-block; min-width: 100%; transform-origin: center center; transition: transform .15s ease; }
195
+
196
+ /* Scrollbar beautification */
197
+ ::-webkit-scrollbar {
198
+ width: 6px;
199
+ height: 6px;
200
+ }
201
+
202
+ ::-webkit-scrollbar-track {
203
+ background: transparent;
204
+ }
205
+
206
+ ::-webkit-scrollbar-thumb {
207
+ background: var(--border-medium);
208
+ border-radius: 4px;
209
+ }
210
+
211
+ ::-webkit-scrollbar-thumb:hover {
212
+ background: var(--border-strong);
213
+ }
214
+
215
+ /* ==========================================================================
216
+ APP CONTAINER & HEADER
217
+ ========================================================================== */
218
+
219
+ .app-container {
220
+ display: flex;
221
+ flex-direction: column;
222
+ height: 100vh;
223
+ width: 100vw;
224
+ background: var(--bg-canvas);
225
+ }
226
+
227
+ /* Header */
228
+ .app-header {
229
+ height: 60px;
230
+ display: flex;
231
+ align-items: center;
232
+ justify-content: space-between;
233
+ padding: 0 24px;
234
+ background: var(--bg-surface);
235
+ border-bottom: 1px solid var(--border-medium);
236
+ z-index: 30;
237
+ box-shadow: var(--shadow-sm);
238
+ transition: background-color 0.3s ease, border-color 0.3s ease;
239
+ }
240
+
241
+ .brand-section {
242
+ display: flex;
243
+ align-items: center;
244
+ gap: 14px;
245
+ }
246
+
247
+ .brand-logo-badge {
248
+ display: flex;
249
+ align-items: center;
250
+ justify-content: center;
251
+ width: 32px;
252
+ height: 32px;
253
+ border-radius: 8px;
254
+ background: linear-gradient(135deg, var(--primary) 0%, #38bdf8 100%);
255
+ color: #fff;
256
+ box-shadow: var(--shadow-glow);
257
+ }
258
+
259
+ .brand-text-wrap {
260
+ display: flex;
261
+ align-items: baseline;
262
+ gap: 10px;
263
+ }
264
+
265
+ .brand-title {
266
+ font-size: 16px;
267
+ font-weight: 700;
268
+ letter-spacing: 0.02em;
269
+ color: var(--text-primary);
270
+ display: flex;
271
+ align-items: center;
272
+ }
273
+
274
+ .brand-doc-title {
275
+ font-size: 13px;
276
+ font-weight: 500;
277
+ color: var(--text-muted);
278
+ border-left: 1px solid var(--border-medium);
279
+ padding-left: 12px;
280
+ max-width: 300px;
281
+ white-space: nowrap;
282
+ overflow: hidden;
283
+ text-overflow: ellipsis;
284
+ }
285
+
286
+ .header-controls {
287
+ display: flex;
288
+ align-items: center;
289
+ gap: 12px;
290
+ }
291
+
292
+ /* View switcher tabs */
293
+ .view-tabs {
294
+ display: flex;
295
+ gap: 4px;
296
+ background: var(--bg-canvas);
297
+ padding: 4px;
298
+ border-radius: 10px;
299
+ border: 1px solid var(--border-subtle);
300
+ }
301
+
302
+ .view-tab {
303
+ display: flex;
304
+ align-items: center;
305
+ gap: 7px;
306
+ padding: 6px 14px;
307
+ border-radius: 7px;
308
+ font-size: 13px;
309
+ font-weight: 600;
310
+ color: var(--text-muted);
311
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
312
+ }
313
+
314
+ .view-tab:hover {
315
+ color: var(--text-primary);
316
+ background: rgba(125, 125, 125, 0.08);
317
+ }
318
+
319
+ .view-tab.active {
320
+ background: var(--bg-surface);
321
+ color: var(--primary);
322
+ box-shadow: var(--shadow-sm);
323
+ border: 1px solid var(--border-medium);
324
+ }
325
+
326
+ /* Theme Toggle Button */
327
+ .theme-toggle-btn {
328
+ display: flex;
329
+ align-items: center;
330
+ justify-content: center;
331
+ width: 36px;
332
+ height: 36px;
333
+ border-radius: 9px;
334
+ background: var(--bg-canvas);
335
+ border: 1px solid var(--border-medium);
336
+ color: var(--text-secondary);
337
+ transition: all 0.2s ease;
338
+ }
339
+
340
+ .theme-toggle-btn:hover {
341
+ color: var(--text-primary);
342
+ border-color: var(--primary);
343
+ background: var(--bg-highlight);
344
+ transform: translateY(-1px);
345
+ }
346
+
347
+ /* Viewport Area */
348
+ .app-main {
349
+ flex: 1;
350
+ min-height: 0;
351
+ position: relative;
352
+ }
353
+
354
+ .app-toolbar {
355
+ position: absolute;
356
+ top: 14px;
357
+ right: 18px;
358
+ z-index: 100;
359
+ display: flex;
360
+ align-items: center;
361
+ gap: 8px;
362
+ padding: 5px;
363
+ border: 1px solid var(--border-medium);
364
+ border-radius: 10px;
365
+ background: color-mix(in srgb, var(--bg-surface) 92%, transparent);
366
+ box-shadow: var(--shadow-md);
367
+ backdrop-filter: blur(10px);
368
+ }
369
+
370
+ .app-toolbar .view-tabs {
371
+ padding: 2px;
372
+ }
373
+
374
+ .app-toolbar .view-tab {
375
+ padding: 5px 10px;
376
+ font-size: 11px;
377
+ }
378
+
379
+ .app-toolbar .theme-toggle-btn {
380
+ display: grid;
381
+ place-items: center;
382
+ width: 28px;
383
+ height: 28px;
384
+ border-radius: 6px;
385
+ color: var(--text-muted);
386
+ }
387
+
388
+ .app-toolbar .theme-toggle-btn:hover {
389
+ color: var(--text-primary);
390
+ background: var(--bg-card-hover);
391
+ }
392
+
393
+ /* ==========================================================================
394
+ NODE EXPLORER (3-COLUMN EDITORIAL KNOWLEDGE LAYOUT)
395
+ ========================================================================== */
396
+
397
+ .node-explorer-layout {
398
+ display: grid;
399
+ grid-template-columns: 280px 1fr 340px;
400
+ height: 100%;
401
+ min-height: 0;
402
+ }
403
+
404
+ .explorer-side {
405
+ background: var(--bg-surface);
406
+ overflow-y: auto;
407
+ padding: 24px 18px;
408
+ transition: background-color 0.3s ease;
409
+ }
410
+
411
+ .left-side {
412
+ border-right: 1px solid var(--border-medium);
413
+ }
414
+
415
+ .right-side {
416
+ border-left: 1px solid var(--border-medium);
417
+ }
418
+
419
+ .side-section {
420
+ margin-bottom: 28px;
421
+ }
422
+
423
+ .compact-tree {
424
+ margin-top: 8px;
425
+ margin-bottom: 0;
426
+ border-top: 1px solid var(--border-subtle);
427
+ padding-top: 12px;
428
+ }
429
+
430
+ .compact-tree > summary {
431
+ list-style: none;
432
+ cursor: pointer;
433
+ margin-bottom: 0;
434
+ }
435
+
436
+ .compact-tree > summary::-webkit-details-marker { display: none; }
437
+ .compact-tree > summary::after {
438
+ content: '+';
439
+ margin-left: auto;
440
+ color: var(--text-dim);
441
+ font-size: 13px;
442
+ }
443
+ .compact-tree[open] > summary { margin-bottom: 12px; }
444
+ .compact-tree[open] > summary::after { content: '−'; }
445
+
446
+ .side-label {
447
+ display: flex;
448
+ align-items: center;
449
+ gap: 6px;
450
+ font-size: 11px;
451
+ font-weight: 700;
452
+ color: var(--text-dim);
453
+ text-transform: uppercase;
454
+ letter-spacing: 0.08em;
455
+ margin-bottom: 12px;
456
+ }
457
+
458
+ .side-label::before {
459
+ content: "";
460
+ display: inline-block;
461
+ width: 4px;
462
+ height: 12px;
463
+ background: var(--primary);
464
+ border-radius: 2px;
465
+ }
466
+
467
+ /* Left: Breadcrumbs Tree */
468
+ .ancestor-breadcrumbs {
469
+ display: flex;
470
+ flex-direction: column;
471
+ gap: 6px;
472
+ position: relative;
473
+ padding-left: 14px;
474
+ }
475
+
476
+ .ancestor-breadcrumbs::before {
477
+ content: "";
478
+ position: absolute;
479
+ left: 4px;
480
+ top: 10px;
481
+ bottom: 10px;
482
+ width: 2px;
483
+ background: var(--border-medium);
484
+ }
485
+
486
+ .breadcrumb-node {
487
+ display: flex;
488
+ align-items: center;
489
+ gap: 8px;
490
+ padding: 7px 10px;
491
+ border-radius: 8px;
492
+ cursor: pointer;
493
+ color: var(--text-secondary);
494
+ font-size: 13px;
495
+ transition: all 0.15s ease;
496
+ background: transparent;
497
+ border: 1px solid transparent;
498
+ }
499
+
500
+ .breadcrumb-node:hover {
501
+ background: var(--bg-subtle);
502
+ color: var(--text-primary);
503
+ border-color: var(--border-subtle);
504
+ }
505
+
506
+ .breadcrumb-node.active {
507
+ background: var(--bg-highlight);
508
+ color: var(--primary);
509
+ font-weight: 600;
510
+ border-color: var(--border-accent);
511
+ }
512
+
513
+ .bc-level-pill {
514
+ font-size: 10px;
515
+ font-weight: 700;
516
+ padding: 1px 6px;
517
+ border-radius: 4px;
518
+ border: 1px solid;
519
+ font-family: monospace;
520
+ }
521
+
522
+ .bc-title {
523
+ flex: 1;
524
+ white-space: nowrap;
525
+ overflow: hidden;
526
+ text-overflow: ellipsis;
527
+ }
528
+
529
+ .bc-arrow {
530
+ color: var(--text-dim);
531
+ }
532
+
533
+ .back-parent-btn {
534
+ display: flex;
535
+ align-items: center;
536
+ gap: 8px;
537
+ width: 100%;
538
+ padding: 9px 12px;
539
+ border-radius: 8px;
540
+ background: var(--bg-subtle);
541
+ border: 1px solid var(--border-medium);
542
+ color: var(--text-secondary);
543
+ font-size: 12px;
544
+ font-weight: 600;
545
+ transition: all 0.2s ease;
546
+ }
547
+
548
+ .back-parent-btn:hover {
549
+ background: var(--bg-highlight);
550
+ color: var(--primary);
551
+ border-color: var(--primary);
552
+ }
553
+
554
+ /* Sibling List */
555
+ .sibling-list {
556
+ display: flex;
557
+ flex-direction: column;
558
+ gap: 4px;
559
+ }
560
+
561
+ .sibling-btn {
562
+ display: flex;
563
+ align-items: center;
564
+ gap: 9px;
565
+ padding: 7px 10px;
566
+ border-radius: 7px;
567
+ text-align: left;
568
+ color: var(--text-secondary);
569
+ font-size: 12px;
570
+ font-weight: 500;
571
+ transition: all 0.15s ease;
572
+ }
573
+
574
+ .sibling-btn:hover {
575
+ background: var(--bg-subtle);
576
+ color: var(--text-primary);
577
+ transform: translateX(2px);
578
+ }
579
+
580
+ .sib-dot {
581
+ width: 6px;
582
+ height: 6px;
583
+ border-radius: 50%;
584
+ flex-shrink: 0;
585
+ }
586
+
587
+ .sib-title {
588
+ flex: 1;
589
+ white-space: nowrap;
590
+ overflow: hidden;
591
+ text-overflow: ellipsis;
592
+ }
593
+
594
+ .sib-lvl {
595
+ font-size: 10px;
596
+ font-weight: 600;
597
+ color: var(--text-dim);
598
+ font-family: monospace;
599
+ }
600
+
601
+ /* Navigation Hierarchy Tree */
602
+ .concept-nav-tree {
603
+ display: flex;
604
+ flex-direction: column;
605
+ gap: 2px;
606
+ }
607
+
608
+ .tree-node-item {
609
+ display: flex;
610
+ flex-direction: column;
611
+ }
612
+
613
+ .tree-node-btn {
614
+ display: flex;
615
+ align-items: center;
616
+ gap: 7px;
617
+ padding: 6px 10px;
618
+ border-radius: 6px;
619
+ text-align: left;
620
+ color: var(--text-secondary);
621
+ font-size: 12px;
622
+ transition: all 0.15s;
623
+ position: relative;
624
+ }
625
+
626
+ .tree-node-btn:hover {
627
+ background: var(--bg-subtle);
628
+ color: var(--text-primary);
629
+ }
630
+
631
+ .tree-node-btn.active {
632
+ background: var(--bg-highlight);
633
+ color: var(--primary);
634
+ font-weight: 600;
635
+ }
636
+
637
+ .tree-node-btn.active::before {
638
+ content: "";
639
+ position: absolute;
640
+ left: 0;
641
+ top: 4px;
642
+ bottom: 4px;
643
+ width: 3px;
644
+ background: var(--primary);
645
+ border-radius: 0 2px 2px 0;
646
+ }
647
+
648
+ .node-bullet {
649
+ width: 6px;
650
+ height: 6px;
651
+ border-radius: 50%;
652
+ flex-shrink: 0;
653
+ }
654
+
655
+ .tree-title {
656
+ flex: 1;
657
+ white-space: nowrap;
658
+ overflow: hidden;
659
+ text-overflow: ellipsis;
660
+ }
661
+
662
+ .tree-level {
663
+ font-size: 10px;
664
+ font-weight: 600;
665
+ color: var(--text-dim);
666
+ font-family: monospace;
667
+ }
668
+
669
+ /* ==========================================================================
670
+ MIDDLE COLUMN: KNOWLEDGE HERO & ARTICLE EXPLANATION
671
+ ========================================================================== */
672
+
673
+ .explorer-center {
674
+ background: var(--bg-canvas);
675
+ overflow-y: auto;
676
+ padding: 32px 40px;
677
+ transition: background-color 0.3s ease;
678
+ }
679
+
680
+ .center-scrollable {
681
+ max-width: 860px;
682
+ margin: 0 auto;
683
+ }
684
+
685
+ /* Toolbar */
686
+ .center-toolbar {
687
+ display: flex;
688
+ align-items: center;
689
+ justify-content: space-between;
690
+ margin-bottom: 24px;
691
+ padding-bottom: 14px;
692
+ border-bottom: 1px solid var(--border-medium);
693
+ }
694
+
695
+ .node-id-tag {
696
+ font-size: 11px;
697
+ font-weight: 600;
698
+ color: var(--text-dim);
699
+ font-family: 'Fira Code', monospace;
700
+ letter-spacing: 0.04em;
701
+ }
702
+
703
+ .node-id-tag code {
704
+ color: var(--primary-light);
705
+ background: var(--bg-surface);
706
+ padding: 3px 8px;
707
+ border-radius: 6px;
708
+ border: 1px solid var(--border-subtle);
709
+ }
710
+
711
+ .level-indicators {
712
+ display: flex;
713
+ gap: 5px;
714
+ }
715
+
716
+ .level-pill {
717
+ padding: 4px 9px;
718
+ border-radius: 6px;
719
+ font-size: 11px;
720
+ font-weight: 700;
721
+ background: var(--bg-surface);
722
+ color: var(--text-dim);
723
+ border: 1px solid var(--border-medium);
724
+ transition: all 0.2s ease;
725
+ }
726
+
727
+ .level-pill:hover {
728
+ border-color: var(--text-muted);
729
+ color: var(--text-primary);
730
+ }
731
+
732
+ .level-pill.active {
733
+ background: var(--primary);
734
+ color: #fff;
735
+ border-color: var(--primary);
736
+ box-shadow: var(--shadow-sm);
737
+ }
738
+
739
+ .view-graph-btn {
740
+ display: flex;
741
+ align-items: center;
742
+ gap: 6px;
743
+ padding: 6px 14px;
744
+ border-radius: 8px;
745
+ background: var(--bg-surface);
746
+ border: 1px solid var(--border-medium);
747
+ color: var(--primary);
748
+ font-size: 12px;
749
+ font-weight: 600;
750
+ box-shadow: var(--shadow-sm);
751
+ transition: all 0.2s ease;
752
+ }
753
+
754
+ .view-graph-btn:hover {
755
+ background: var(--primary);
756
+ color: #fff;
757
+ border-color: var(--primary);
758
+ transform: translateY(-1px);
759
+ }
760
+
761
+ /* HERO EXPLANATORY CARD */
762
+ .concept-hero-card {
763
+ background: var(--bg-surface);
764
+ border: 1px solid var(--border-medium);
765
+ border-radius: 16px;
766
+ padding: 32px 36px;
767
+ margin-bottom: 28px;
768
+ box-shadow: var(--shadow-md);
769
+ position: relative;
770
+ overflow: hidden;
771
+ }
772
+
773
+ .concept-hero-card::after {
774
+ content: "";
775
+ position: absolute;
776
+ top: 0;
777
+ left: 0;
778
+ right: 0;
779
+ height: 4px;
780
+ background: linear-gradient(90deg, var(--primary) 0%, #38bdf8 50%, #34d399 100%);
781
+ }
782
+
783
+ .hero-level-banner {
784
+ display: flex;
785
+ align-items: center;
786
+ gap: 10px;
787
+ font-size: 12px;
788
+ font-weight: 700;
789
+ letter-spacing: 0.04em;
790
+ margin-bottom: 14px;
791
+ }
792
+
793
+ .hero-level-banner .badge {
794
+ background: var(--bg-highlight);
795
+ padding: 4px 10px;
796
+ border-radius: 6px;
797
+ border: 1px solid var(--border-accent);
798
+ }
799
+
800
+ .hero-title {
801
+ font-size: 32px;
802
+ font-weight: 800;
803
+ color: var(--text-primary);
804
+ line-height: 1.25;
805
+ margin-bottom: 14px;
806
+ letter-spacing: -0.02em;
807
+ }
808
+
809
+ .hero-summary {
810
+ font-size: 16px;
811
+ color: var(--text-secondary);
812
+ line-height: 1.7;
813
+ margin-bottom: 24px;
814
+ font-family: 'Lora', Georgia, serif;
815
+ font-style: italic;
816
+ }
817
+
818
+ .hero-meta-chips {
819
+ display: flex;
820
+ flex-wrap: wrap;
821
+ gap: 10px;
822
+ margin-bottom: 24px;
823
+ }
824
+
825
+ .meta-chip {
826
+ display: flex;
827
+ align-items: center;
828
+ gap: 8px;
829
+ background: var(--bg-canvas);
830
+ border: 1px solid var(--border-medium);
831
+ padding: 6px 12px;
832
+ border-radius: 8px;
833
+ font-size: 12px;
834
+ }
835
+
836
+ .chip-label {
837
+ font-weight: 700;
838
+ color: var(--text-dim);
839
+ font-size: 11px;
840
+ text-transform: uppercase;
841
+ letter-spacing: 0.05em;
842
+ }
843
+
844
+ .chip-value {
845
+ color: var(--text-primary);
846
+ font-weight: 500;
847
+ }
848
+
849
+ /* Local Flow Ribbon (Upstream -> Focus -> Downstream) */
850
+ .local-flow-ribbon {
851
+ display: flex;
852
+ align-items: stretch;
853
+ gap: 12px;
854
+ background: var(--bg-canvas);
855
+ border: 1px solid var(--border-medium);
856
+ padding: 16px;
857
+ border-radius: 12px;
858
+ }
859
+
860
+ .flow-box {
861
+ flex: 1;
862
+ display: flex;
863
+ flex-direction: column;
864
+ justify-content: center;
865
+ gap: 4px;
866
+ padding: 12px 14px;
867
+ background: var(--bg-surface);
868
+ border: 1px solid var(--border-medium);
869
+ border-radius: 8px;
870
+ font-size: 12px;
871
+ transition: all 0.2s ease;
872
+ }
873
+
874
+ button.flow-box {
875
+ text-align: left;
876
+ }
877
+
878
+ .flow-box.current-focus {
879
+ border-color: var(--primary);
880
+ background: var(--bg-highlight);
881
+ box-shadow: var(--shadow-glow);
882
+ }
883
+
884
+ .flow-box.clickable:hover {
885
+ background: var(--bg-subtle);
886
+ border-color: var(--primary);
887
+ transform: translateY(-2px);
888
+ }
889
+
890
+ .flow-box.disabled {
891
+ opacity: 0.6;
892
+ cursor: default;
893
+ }
894
+
895
+ .box-type {
896
+ font-size: 10px;
897
+ font-weight: 700;
898
+ color: var(--text-dim);
899
+ text-transform: uppercase;
900
+ letter-spacing: 0.06em;
901
+ }
902
+
903
+ .box-title {
904
+ font-weight: 700;
905
+ color: var(--text-primary);
906
+ white-space: nowrap;
907
+ overflow: hidden;
908
+ text-overflow: ellipsis;
909
+ font-size: 13px;
910
+ }
911
+
912
+ .flow-arrow {
913
+ display: flex;
914
+ align-items: center;
915
+ color: var(--text-dim);
916
+ font-size: 16px;
917
+ }
918
+
919
+ .flow-node-list {
920
+ display: flex;
921
+ flex-direction: column;
922
+ gap: 4px;
923
+ margin-top: 6px;
924
+ }
925
+
926
+ .flow-node-link {
927
+ display: flex;
928
+ align-items: center;
929
+ justify-content: space-between;
930
+ gap: 6px;
931
+ width: 100%;
932
+ padding: 4px 6px;
933
+ border-radius: 4px;
934
+ color: var(--text-secondary);
935
+ font-size: 12px;
936
+ font-weight: 500;
937
+ background: var(--bg-canvas);
938
+ border: 1px solid var(--border-subtle);
939
+ transition: all 0.15s ease;
940
+ }
941
+
942
+ .flow-node-link:hover {
943
+ color: var(--primary);
944
+ border-color: var(--primary);
945
+ background: var(--bg-surface);
946
+ }
947
+
948
+ /* ==========================================================================
949
+ CONTENT BLOCKS (Editorial Monograph Structure)
950
+ ========================================================================== */
951
+
952
+ .content-blocks {
953
+ display: flex;
954
+ flex-direction: column;
955
+ gap: 14px;
956
+ }
957
+
958
+ .node-block {
959
+ background: var(--bg-surface);
960
+ border: 1px solid var(--border-medium);
961
+ border-radius: 12px;
962
+ padding: 24px 28px;
963
+ box-shadow: var(--shadow-sm);
964
+ transition: all 0.2s ease;
965
+ }
966
+
967
+ .node-block:hover {
968
+ border-color: var(--border-strong);
969
+ }
970
+
971
+ .node-block.highlight-warn {
972
+ border-left: 4px solid var(--accent-rose);
973
+ background: var(--callout-danger-bg);
974
+ }
975
+
976
+ .block-head {
977
+ display: flex;
978
+ align-items: baseline;
979
+ justify-content: space-between;
980
+ margin-bottom: 14px;
981
+ border-bottom: 1px solid var(--border-subtle);
982
+ padding-bottom: 10px;
983
+ }
984
+
985
+ .block-head h2 {
986
+ font-size: 18px;
987
+ font-weight: 700;
988
+ color: var(--text-primary);
989
+ letter-spacing: -0.01em;
990
+ }
991
+
992
+ .block-head small {
993
+ font-size: 12px;
994
+ color: var(--text-dim);
995
+ font-weight: 500;
996
+ }
997
+
998
+ .block-body {
999
+ color: var(--text-secondary);
1000
+ font-size: 14px;
1001
+ line-height: 1.8;
1002
+ }
1003
+
1004
+ .impl-lang {
1005
+ font-size: 11px;
1006
+ font-weight: 700;
1007
+ font-family: 'Fira Code', monospace;
1008
+ text-transform: uppercase;
1009
+ background: var(--bg-canvas);
1010
+ padding: 3px 8px;
1011
+ border-radius: 6px;
1012
+ color: var(--primary);
1013
+ border: 1px solid var(--border-medium);
1014
+ }
1015
+
1016
+ .code-block {
1017
+ background: var(--code-bg);
1018
+ padding: 18px 20px;
1019
+ border-radius: 10px;
1020
+ overflow-x: auto;
1021
+ font-family: "Fira Code", monospace;
1022
+ font-size: 13px;
1023
+ line-height: 1.6;
1024
+ color: var(--code-text);
1025
+ border: 1px solid var(--code-border);
1026
+ box-shadow: inset 0 2px 8px rgba(0, 0, 0, 0.2);
1027
+ }
1028
+
1029
+ .example-item, .counterexample-item {
1030
+ margin-top: 12px;
1031
+ padding: 14px 18px;
1032
+ border-radius: 8px;
1033
+ background: var(--bg-canvas);
1034
+ border: 1px solid var(--border-medium);
1035
+ }
1036
+
1037
+ .ex-title {
1038
+ font-weight: 700;
1039
+ color: var(--accent-emerald);
1040
+ margin-bottom: 6px;
1041
+ font-size: 13px;
1042
+ }
1043
+
1044
+ .cex-title {
1045
+ font-weight: 700;
1046
+ color: var(--accent-rose);
1047
+ margin-bottom: 6px;
1048
+ font-size: 13px;
1049
+ }
1050
+
1051
+ /* Subnode Grid for Drill-down */
1052
+ .subnodes-grid {
1053
+ display: grid;
1054
+ grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
1055
+ gap: 14px;
1056
+ margin-top: 14px;
1057
+ }
1058
+
1059
+ .subnode-card {
1060
+ background: var(--bg-canvas);
1061
+ border: 1px solid var(--border-medium);
1062
+ border-radius: 10px;
1063
+ padding: 18px;
1064
+ cursor: pointer;
1065
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
1066
+ display: flex;
1067
+ flex-direction: column;
1068
+ }
1069
+
1070
+ .subnode-card:hover {
1071
+ border-color: var(--primary);
1072
+ background: var(--bg-surface);
1073
+ transform: translateY(-3px);
1074
+ box-shadow: var(--shadow-md);
1075
+ }
1076
+
1077
+ .sn-header {
1078
+ display: flex;
1079
+ justify-content: space-between;
1080
+ align-items: center;
1081
+ margin-bottom: 8px;
1082
+ }
1083
+
1084
+ .sn-level {
1085
+ font-size: 11px;
1086
+ font-weight: 800;
1087
+ font-family: monospace;
1088
+ }
1089
+
1090
+ .sn-arrow {
1091
+ color: var(--text-dim);
1092
+ transition: transform 0.2s;
1093
+ }
1094
+
1095
+ .subnode-card:hover .sn-arrow {
1096
+ color: var(--primary);
1097
+ transform: translate(2px, -2px);
1098
+ }
1099
+
1100
+ .sn-title {
1101
+ font-size: 15px;
1102
+ font-weight: 700;
1103
+ color: var(--text-primary);
1104
+ margin-bottom: 6px;
1105
+ }
1106
+
1107
+ .sn-summary {
1108
+ font-size: 12px;
1109
+ color: var(--text-muted);
1110
+ line-height: 1.5;
1111
+ flex: 1;
1112
+ }
1113
+
1114
+ /* ==========================================================================
1115
+ RIGHT COLUMN: CONTEXT INSPECTOR & LOCAL GRAPH LINKS
1116
+ ========================================================================== */
1117
+
1118
+ .inspector-container {
1119
+ display: flex;
1120
+ flex-direction: column;
1121
+ gap: 24px;
1122
+ }
1123
+
1124
+ .inspector-head {
1125
+ padding-bottom: 12px;
1126
+ border-bottom: 1px solid var(--border-medium);
1127
+ }
1128
+
1129
+ .insp-title {
1130
+ font-size: 14px;
1131
+ font-weight: 700;
1132
+ color: var(--text-primary);
1133
+ }
1134
+
1135
+ .insp-sub {
1136
+ font-size: 11px;
1137
+ color: var(--text-dim);
1138
+ margin-top: 2px;
1139
+ }
1140
+
1141
+ .insp-group {
1142
+ display: flex;
1143
+ flex-direction: column;
1144
+ gap: 10px;
1145
+ }
1146
+
1147
+ .insp-label {
1148
+ font-size: 11px;
1149
+ font-weight: 700;
1150
+ color: var(--text-dim);
1151
+ text-transform: uppercase;
1152
+ letter-spacing: 0.08em;
1153
+ }
1154
+
1155
+ .insp-pill-list {
1156
+ list-style: none;
1157
+ display: flex;
1158
+ flex-wrap: wrap;
1159
+ gap: 6px;
1160
+ }
1161
+
1162
+ .insp-pill {
1163
+ font-size: 12px;
1164
+ font-weight: 500;
1165
+ padding: 5px 12px;
1166
+ border-radius: 6px;
1167
+ background: var(--bg-canvas);
1168
+ border: 1px solid var(--border-medium);
1169
+ color: var(--text-secondary);
1170
+ }
1171
+
1172
+ .prereq-pill {
1173
+ border-left: 3px solid var(--accent-amber);
1174
+ }
1175
+
1176
+ .boundary-card {
1177
+ background: var(--bg-canvas);
1178
+ border: 1px solid var(--border-medium);
1179
+ padding: 12px 14px;
1180
+ border-radius: 8px;
1181
+ font-size: 12px;
1182
+ }
1183
+
1184
+ .b-title {
1185
+ font-weight: 700;
1186
+ color: var(--accent-amber);
1187
+ margin-bottom: 4px;
1188
+ }
1189
+
1190
+ .b-content {
1191
+ color: var(--text-secondary);
1192
+ line-height: 1.5;
1193
+ }
1194
+
1195
+ .relation-links {
1196
+ display: flex;
1197
+ flex-direction: column;
1198
+ gap: 8px;
1199
+ }
1200
+
1201
+ .relation-link-card {
1202
+ background: var(--bg-canvas);
1203
+ border: 1px solid var(--border-medium);
1204
+ border-radius: 8px;
1205
+ padding: 12px 14px;
1206
+ cursor: pointer;
1207
+ transition: all 0.2s ease;
1208
+ }
1209
+
1210
+ .relation-link-card:hover {
1211
+ background: var(--bg-surface);
1212
+ border-color: var(--primary);
1213
+ transform: translateX(3px);
1214
+ box-shadow: var(--shadow-sm);
1215
+ }
1216
+
1217
+ .rel-type-tag {
1218
+ display: inline-block;
1219
+ font-size: 10px;
1220
+ font-weight: 700;
1221
+ border-radius: 4px;
1222
+ border: 1px solid;
1223
+ padding: 2px 7px;
1224
+ margin-bottom: 6px;
1225
+ }
1226
+
1227
+ .rel-target {
1228
+ display: flex;
1229
+ align-items: center;
1230
+ justify-content: space-between;
1231
+ font-size: 13px;
1232
+ font-weight: 600;
1233
+ color: var(--text-primary);
1234
+ }
1235
+
1236
+ .rel-desc {
1237
+ font-size: 11px;
1238
+ color: var(--text-muted);
1239
+ margin-top: 4px;
1240
+ line-height: 1.4;
1241
+ }
1242
+
1243
+ .glossary-dl dt {
1244
+ font-weight: 700;
1245
+ color: var(--primary);
1246
+ font-size: 12px;
1247
+ margin-top: 8px;
1248
+ }
1249
+
1250
+ .glossary-dl dd {
1251
+ color: var(--text-secondary);
1252
+ font-size: 12px;
1253
+ margin-bottom: 10px;
1254
+ line-height: 1.5;
1255
+ }
1256
+
1257
+ /* ==========================================================================
1258
+ GLOBAL RELATION GRAPH VIEW
1259
+ ========================================================================== */
1260
+
1261
+ .relation-graph-layout {
1262
+ display: grid;
1263
+ grid-template-columns: 1fr 360px;
1264
+ height: 100%;
1265
+ position: relative;
1266
+ }
1267
+
1268
+ .graph-main {
1269
+ position: relative;
1270
+ height: 100%;
1271
+ background: var(--bg-canvas);
1272
+ background-image: var(--graph-grid);
1273
+ background-size: 24px 24px;
1274
+ overflow: hidden;
1275
+ }
1276
+
1277
+ .graph-control-bar {
1278
+ position: absolute;
1279
+ top: 20px;
1280
+ left: 20px;
1281
+ right: 20px;
1282
+ z-index: 10;
1283
+ display: flex;
1284
+ align-items: center;
1285
+ gap: 12px;
1286
+ pointer-events: auto;
1287
+ }
1288
+
1289
+ .graph-mode-switch {
1290
+ display: flex;
1291
+ gap: 2px;
1292
+ padding: 3px;
1293
+ background: var(--bg-surface);
1294
+ border: 1px solid var(--border-medium);
1295
+ border-radius: 8px;
1296
+ box-shadow: var(--shadow-sm);
1297
+ }
1298
+
1299
+ .graph-mode-switch button {
1300
+ padding: 5px 10px;
1301
+ border-radius: 5px;
1302
+ color: var(--text-dim);
1303
+ font-size: 11px;
1304
+ font-weight: 700;
1305
+ white-space: nowrap;
1306
+ }
1307
+
1308
+ .graph-mode-switch button:hover {
1309
+ color: var(--text-primary);
1310
+ }
1311
+
1312
+ .graph-mode-switch button.active {
1313
+ color: #fff;
1314
+ background: var(--primary);
1315
+ }
1316
+
1317
+ .search-box {
1318
+ display: flex;
1319
+ align-items: center;
1320
+ gap: 10px;
1321
+ background: var(--bg-surface);
1322
+ border: 1px solid var(--border-medium);
1323
+ padding: 8px 14px;
1324
+ border-radius: 10px;
1325
+ width: 260px;
1326
+ box-shadow: var(--shadow-sm);
1327
+ transition: all 0.2s ease;
1328
+ }
1329
+
1330
+ .search-box:focus-within {
1331
+ border-color: var(--primary);
1332
+ box-shadow: var(--shadow-glow);
1333
+ }
1334
+
1335
+ .search-box input {
1336
+ background: transparent;
1337
+ border: none;
1338
+ outline: none;
1339
+ width: 100%;
1340
+ color: var(--text-primary);
1341
+ font-size: 13px;
1342
+ }
1343
+
1344
+ .search-icon {
1345
+ color: var(--text-dim);
1346
+ }
1347
+
1348
+ .filter-group {
1349
+ display: flex;
1350
+ align-items: center;
1351
+ gap: 8px;
1352
+ background: var(--bg-surface);
1353
+ border: 1px solid var(--border-medium);
1354
+ padding: 7px 12px;
1355
+ border-radius: 10px;
1356
+ font-size: 12px;
1357
+ box-shadow: var(--shadow-sm);
1358
+ }
1359
+
1360
+ .filter-group select {
1361
+ background: transparent;
1362
+ border: none;
1363
+ outline: none;
1364
+ color: var(--text-primary);
1365
+ font-size: 12px;
1366
+ font-weight: 500;
1367
+ cursor: pointer;
1368
+ }
1369
+
1370
+ .filter-group select option {
1371
+ background: var(--bg-surface);
1372
+ color: var(--text-primary);
1373
+ }
1374
+
1375
+ .filter-label {
1376
+ color: var(--text-dim);
1377
+ font-weight: 600;
1378
+ }
1379
+
1380
+ .graph-legend-ribbon {
1381
+ position: absolute;
1382
+ bottom: 20px;
1383
+ left: 20px;
1384
+ display: flex;
1385
+ align-items: center;
1386
+ gap: 14px;
1387
+ background: var(--bg-surface);
1388
+ backdrop-filter: blur(12px);
1389
+ border: 1px solid var(--border-medium);
1390
+ padding: 8px 18px;
1391
+ border-radius: 30px;
1392
+ font-size: 11px;
1393
+ box-shadow: var(--shadow-md);
1394
+ }
1395
+
1396
+ .legend-title {
1397
+ color: var(--text-dim);
1398
+ font-weight: 700;
1399
+ text-transform: uppercase;
1400
+ letter-spacing: 0.05em;
1401
+ }
1402
+
1403
+ .legend-items {
1404
+ display: flex;
1405
+ gap: 12px;
1406
+ }
1407
+
1408
+ .legend-item {
1409
+ display: flex;
1410
+ align-items: center;
1411
+ gap: 5px;
1412
+ color: var(--text-secondary);
1413
+ }
1414
+
1415
+ .legend-dot {
1416
+ width: 8px;
1417
+ height: 8px;
1418
+ border-radius: 50%;
1419
+ }
1420
+
1421
+ .graph-svg {
1422
+ width: 100%;
1423
+ height: 100%;
1424
+ cursor: grab;
1425
+ }
1426
+
1427
+ .graph-svg:active {
1428
+ cursor: grabbing;
1429
+ }
1430
+
1431
+ /* SVG paths are open strokes; disabling the default fill prevents the
1432
+ browser from closing them into grey polygons between connected nodes. */
1433
+ .graph-edge {
1434
+ fill: none;
1435
+ stroke-linecap: round;
1436
+ stroke-linejoin: round;
1437
+ }
1438
+
1439
+ .graph-edge-label {
1440
+ pointer-events: none;
1441
+ }
1442
+
1443
+ /* ==========================================================================
1444
+ CONCEPT DRAFT CANVAS
1445
+ ========================================================================== */
1446
+
1447
+ .explorer-center {
1448
+ min-width: 0;
1449
+ overflow: hidden;
1450
+ padding: 16px 20px 20px;
1451
+ background:
1452
+ linear-gradient(rgba(56, 189, 248, 0.025) 1px, transparent 1px),
1453
+ linear-gradient(90deg, rgba(56, 189, 248, 0.025) 1px, transparent 1px),
1454
+ var(--bg-canvas);
1455
+ background-size: 28px 28px;
1456
+ }
1457
+
1458
+ .center-scrollable {
1459
+ width: 100%;
1460
+ max-width: none;
1461
+ height: 100%;
1462
+ display: flex;
1463
+ flex-direction: column;
1464
+ }
1465
+
1466
+ .center-toolbar {
1467
+ flex: 0 0 auto;
1468
+ gap: 10px;
1469
+ min-height: 24px;
1470
+ margin-bottom: 4px;
1471
+ padding-bottom: 4px;
1472
+ border-bottom: 0;
1473
+ }
1474
+
1475
+ .draft-floating-tools {
1476
+ position: fixed;
1477
+ right: 10px;
1478
+ bottom: 10px;
1479
+ z-index: 5;
1480
+ display: flex;
1481
+ align-items: center;
1482
+ gap: 8px;
1483
+ padding: 5px;
1484
+ border: 1px solid var(--border-medium);
1485
+ border-radius: 9px;
1486
+ background: color-mix(in srgb, var(--bg-surface) 92%, transparent);
1487
+ box-shadow: var(--shadow-sm);
1488
+ backdrop-filter: blur(8px);
1489
+ opacity: 0.62;
1490
+ transition: opacity 0.2s ease, transform 0.2s ease;
1491
+ }
1492
+
1493
+ .draft-floating-tools:hover,
1494
+ .draft-floating-tools:focus-within {
1495
+ opacity: 1;
1496
+ transform: translateY(-2px);
1497
+ }
1498
+
1499
+ @media (max-width: 900px) {
1500
+ .app-toolbar {
1501
+ right: 10px;
1502
+ }
1503
+
1504
+ .draft-floating-tools {
1505
+ top: auto;
1506
+ right: 8px;
1507
+ bottom: 8px;
1508
+ }
1509
+ }
1510
+
1511
+ .draft-floating-tools .view-graph-btn {
1512
+ margin: 0;
1513
+ padding: 5px 9px;
1514
+ }
1515
+
1516
+ .draft-zoom-controls {
1517
+ display: flex;
1518
+ align-items: center;
1519
+ gap: 3px;
1520
+ padding: 3px;
1521
+ border: 1px solid var(--border-medium);
1522
+ border-radius: 8px;
1523
+ background: var(--bg-surface);
1524
+ box-shadow: var(--shadow-sm);
1525
+ color: var(--text-muted);
1526
+ font-size: 10px;
1527
+ font-weight: 700;
1528
+ }
1529
+
1530
+ .draft-zoom-controls button {
1531
+ display: grid;
1532
+ place-items: center;
1533
+ width: 24px;
1534
+ height: 24px;
1535
+ border-radius: 5px;
1536
+ color: var(--text-muted);
1537
+ }
1538
+
1539
+ .draft-zoom-controls button:hover {
1540
+ color: var(--text-primary);
1541
+ background: var(--bg-card-hover);
1542
+ }
1543
+
1544
+ .draft-zoom-controls span {
1545
+ min-width: 36px;
1546
+ text-align: center;
1547
+ }
1548
+
1549
+ .draft-viewport {
1550
+ flex: 1 1 auto;
1551
+ min-height: 0;
1552
+ position: relative;
1553
+ overflow: hidden;
1554
+ padding: 12px 10px 40px;
1555
+ scrollbar-gutter: stable both-edges;
1556
+ cursor: grab;
1557
+ touch-action: none;
1558
+ }
1559
+
1560
+ .draft-viewport:active {
1561
+ cursor: grabbing;
1562
+ }
1563
+
1564
+ .draft-viewport.is-dragging,
1565
+ .draft-viewport.is-dragging * {
1566
+ user-select: none !important;
1567
+ }
1568
+
1569
+ .draft-board {
1570
+ min-width: 980px;
1571
+ min-height: 100%;
1572
+ position: relative;
1573
+ transform-origin: top left;
1574
+ padding: 4px 8px 28px;
1575
+ user-select: none;
1576
+ }
1577
+
1578
+ .draft-board .node-block,
1579
+ .draft-board .inline-inspector {
1580
+ user-select: text;
1581
+ }
1582
+
1583
+ .draft-board .concept-hero-card {
1584
+ margin-bottom: 18px;
1585
+ padding: 22px 26px;
1586
+ border-radius: 7px 12px 8px 10px;
1587
+ border-style: solid;
1588
+ box-shadow: 3px 4px 0 rgba(15, 23, 42, 0.12), var(--shadow-sm);
1589
+ }
1590
+
1591
+ .draft-board .hero-title {
1592
+ font-size: 28px;
1593
+ }
1594
+
1595
+ .draft-board .hero-meta-chips {
1596
+ margin-bottom: 0;
1597
+ }
1598
+
1599
+ .draft-board .content-blocks {
1600
+ display: grid;
1601
+ grid-template-columns: repeat(3, minmax(250px, 1fr));
1602
+ align-items: start;
1603
+ gap: 12px;
1604
+ }
1605
+
1606
+ .hierarchy-strip {
1607
+ position: relative;
1608
+ display: flex;
1609
+ flex-direction: column;
1610
+ gap: 6px;
1611
+ flex: 0 0 auto;
1612
+ width: 100%;
1613
+ min-height: 38px;
1614
+ margin: 0 0 10px;
1615
+ padding: 0 2px 8px;
1616
+ border-bottom: 1px solid var(--border-medium);
1617
+ }
1618
+
1619
+ .hierarchy-strip-main, .hierarchy-strip-children { display: flex; align-items: center; gap: 8px; min-width: 0; }
1620
+ .hierarchy-strip-main { min-height: 30px; }
1621
+ .hierarchy-strip-label { flex: 0 0 auto; color: var(--text-dim); font-size: 10px; font-weight: 700; letter-spacing: .04em; }
1622
+
1623
+ .hierarchy-strip-path,
1624
+ .hierarchy-strip-children {
1625
+ display: flex;
1626
+ align-items: center;
1627
+ gap: 2px;
1628
+ }
1629
+
1630
+ .hierarchy-strip-path {
1631
+ min-width: 0;
1632
+ flex: 1 1 auto;
1633
+ overflow: hidden;
1634
+ }
1635
+
1636
+ .hierarchy-strip-path button,
1637
+ .hierarchy-strip-path strong,
1638
+ .hierarchy-strip-children button,
1639
+ .hierarchy-strip-empty {
1640
+ display: inline-flex;
1641
+ align-items: center;
1642
+ gap: 4px;
1643
+ min-height: 26px;
1644
+ padding: 3px 6px;
1645
+ border-radius: 5px;
1646
+ color: var(--text-secondary);
1647
+ font-size: 11px;
1648
+ }
1649
+
1650
+ .hierarchy-strip-path button:hover,
1651
+ .hierarchy-strip-children button:hover {
1652
+ background: var(--bg-card-hover);
1653
+ color: var(--text-primary);
1654
+ }
1655
+
1656
+ .hierarchy-strip-path span {
1657
+ color: var(--text-dim);
1658
+ font-family: 'Fira Code', monospace;
1659
+ font-size: 9px;
1660
+ }
1661
+
1662
+ .hierarchy-strip-path strong {
1663
+ border: 1px solid var(--border-accent);
1664
+ background: var(--bg-highlight);
1665
+ color: var(--text-primary);
1666
+ }
1667
+
1668
+ .hierarchy-strip-children {
1669
+ padding-left: 0;
1670
+ }
1671
+
1672
+ .hierarchy-child-scroll { display: flex; gap: 5px; overflow-x: auto; min-width: 0; }
1673
+
1674
+ .hierarchy-strip-children button {
1675
+ border: 1px solid var(--border-subtle);
1676
+ background: var(--bg-canvas);
1677
+ color: var(--text-accent);
1678
+ }
1679
+
1680
+ .hierarchy-strip-children .hierarchy-parent-link {
1681
+ border: 0;
1682
+ background: transparent;
1683
+ color: var(--text-muted);
1684
+ }
1685
+
1686
+ .hierarchy-strip-empty {
1687
+ color: var(--text-dim);
1688
+ font-style: italic;
1689
+ }
1690
+
1691
+ .hierarchy-navigator {
1692
+ margin: 0 0 16px;
1693
+ padding: 8px 10px;
1694
+ border-top: 1px solid var(--border-subtle);
1695
+ border-bottom: 1px solid var(--border-subtle);
1696
+ background: color-mix(in srgb, var(--bg-surface) 84%, var(--primary) 16%);
1697
+ }
1698
+
1699
+ .hierarchy-nav-label {
1700
+ margin-bottom: 6px;
1701
+ color: var(--text-dim);
1702
+ font-family: 'Fira Code', monospace;
1703
+ font-size: 9px;
1704
+ font-weight: 700;
1705
+ letter-spacing: 0.08em;
1706
+ text-transform: uppercase;
1707
+ }
1708
+
1709
+ .hierarchy-nav-track {
1710
+ display: flex;
1711
+ align-items: stretch;
1712
+ gap: 8px;
1713
+ }
1714
+
1715
+ .hierarchy-nav-node,
1716
+ .hierarchy-nav-current,
1717
+ .hierarchy-nav-children {
1718
+ display: flex;
1719
+ flex: 1;
1720
+ min-width: 0;
1721
+ flex-direction: column;
1722
+ justify-content: center;
1723
+ padding: 7px 9px;
1724
+ border: 1px solid var(--border-subtle);
1725
+ border-radius: 6px;
1726
+ background: var(--bg-canvas);
1727
+ text-align: left;
1728
+ }
1729
+
1730
+ .hierarchy-nav-node:hover:not(:disabled) {
1731
+ border-color: var(--primary-light);
1732
+ background: var(--bg-card-hover);
1733
+ }
1734
+
1735
+ .hierarchy-nav-node small,
1736
+ .hierarchy-nav-current small,
1737
+ .hierarchy-nav-children small {
1738
+ margin-bottom: 2px;
1739
+ color: var(--text-dim);
1740
+ font-size: 9px;
1741
+ font-weight: 800;
1742
+ }
1743
+
1744
+ .hierarchy-nav-node span,
1745
+ .hierarchy-nav-current span,
1746
+ .hierarchy-nav-children > span {
1747
+ overflow: hidden;
1748
+ color: var(--text-primary);
1749
+ font-size: 11px;
1750
+ font-weight: 700;
1751
+ text-overflow: ellipsis;
1752
+ white-space: nowrap;
1753
+ }
1754
+
1755
+ .hierarchy-nav-current {
1756
+ flex: 0 0 130px;
1757
+ border-color: var(--border-accent);
1758
+ background: var(--bg-highlight);
1759
+ }
1760
+
1761
+ .hierarchy-nav-arrow {
1762
+ align-self: center;
1763
+ flex: 0 0 auto;
1764
+ color: var(--text-dim);
1765
+ }
1766
+
1767
+ .hierarchy-nav-children.is-disabled,
1768
+ .hierarchy-nav-node.is-disabled {
1769
+ opacity: 0.5;
1770
+ }
1771
+
1772
+ .hierarchy-child-links {
1773
+ display: flex;
1774
+ flex-wrap: wrap;
1775
+ gap: 4px;
1776
+ }
1777
+
1778
+ .hierarchy-child-links button {
1779
+ display: inline-flex;
1780
+ align-items: center;
1781
+ gap: 3px;
1782
+ max-width: 100%;
1783
+ padding: 2px 5px;
1784
+ border: 1px solid var(--border-subtle);
1785
+ border-radius: 4px;
1786
+ color: var(--text-accent);
1787
+ font-size: 10px;
1788
+ }
1789
+
1790
+ .hierarchy-child-links button:hover {
1791
+ border-color: var(--primary-light);
1792
+ background: var(--bg-card-hover);
1793
+ }
1794
+
1795
+ .draft-board .node-block {
1796
+ min-width: 0;
1797
+ padding: 16px 17px;
1798
+ border-radius: 8px 11px 7px 10px;
1799
+ box-shadow: 2px 3px 0 rgba(15, 23, 42, 0.09), var(--shadow-sm);
1800
+ }
1801
+
1802
+ .draft-board .node-block:nth-child(3n) {
1803
+ transform: rotate(-0.2deg);
1804
+ }
1805
+
1806
+ .draft-board .node-block:nth-child(3n + 1) {
1807
+ transform: rotate(0.15deg);
1808
+ }
1809
+
1810
+ .draft-board .drill-down-section,
1811
+ .draft-board .custom-section {
1812
+ grid-column: auto;
1813
+ justify-self: start;
1814
+ width: fit-content;
1815
+ max-width: 100%;
1816
+ min-width: 0;
1817
+ }
1818
+
1819
+ .draft-board .custom-section:has(.semantic-widget-absolute) {
1820
+ position: static;
1821
+ width: 0;
1822
+ height: 0;
1823
+ min-height: 0;
1824
+ padding: 0;
1825
+ border: 0;
1826
+ overflow: visible;
1827
+ box-shadow: none;
1828
+ }
1829
+
1830
+ .node-explorer-layout {
1831
+ grid-template-columns: 220px minmax(0, 1fr);
1832
+ }
1833
+
1834
+ .node-explorer-layout .right-side {
1835
+ display: none;
1836
+ }
1837
+
1838
+ .inline-inspector {
1839
+ margin-top: 18px;
1840
+ padding: 18px 20px;
1841
+ border: 1px dashed var(--border-strong);
1842
+ border-radius: 10px 7px 11px 8px;
1843
+ background: color-mix(in srgb, var(--bg-surface) 86%, var(--primary) 14%);
1844
+ box-shadow: 2px 3px 0 rgba(15, 23, 42, 0.08);
1845
+ }
1846
+
1847
+ .inline-inspector-head {
1848
+ display: flex;
1849
+ align-items: end;
1850
+ justify-content: space-between;
1851
+ gap: 16px;
1852
+ margin-bottom: 14px;
1853
+ padding-bottom: 10px;
1854
+ border-bottom: 1px solid var(--border-subtle);
1855
+ }
1856
+
1857
+ .inline-inspector-head h2 {
1858
+ margin-top: 2px;
1859
+ font-size: 18px;
1860
+ color: var(--text-primary);
1861
+ }
1862
+
1863
+ .inline-inspector-count {
1864
+ color: var(--text-dim);
1865
+ font-size: 11px;
1866
+ white-space: nowrap;
1867
+ }
1868
+
1869
+ .inline-inspector-grid {
1870
+ display: grid;
1871
+ grid-template-columns: repeat(4, minmax(180px, 1fr));
1872
+ gap: 14px;
1873
+ }
1874
+
1875
+ .inline-note-block {
1876
+ min-width: 0;
1877
+ }
1878
+
1879
+ .inline-note-block > .insp-label {
1880
+ display: block;
1881
+ margin-bottom: 8px;
1882
+ }
1883
+
1884
+ .inline-pill-flow {
1885
+ display: flex;
1886
+ flex-wrap: wrap;
1887
+ gap: 6px;
1888
+ }
1889
+
1890
+ .inline-boundary {
1891
+ display: flex;
1892
+ flex-direction: column;
1893
+ gap: 3px;
1894
+ padding: 8px 10px;
1895
+ border-left: 2px solid var(--accent-amber);
1896
+ background: var(--bg-canvas);
1897
+ color: var(--text-secondary);
1898
+ font-size: 11px;
1899
+ }
1900
+
1901
+ .inline-boundary + .inline-boundary {
1902
+ margin-top: 6px;
1903
+ }
1904
+
1905
+ .inline-boundary b {
1906
+ color: var(--accent-amber);
1907
+ font-size: 11px;
1908
+ }
1909
+
1910
+ .relation-column {
1911
+ display: flex;
1912
+ flex-direction: column;
1913
+ gap: 6px;
1914
+ }
1915
+
1916
+ .inline-relation {
1917
+ display: block;
1918
+ width: 100%;
1919
+ padding: 7px 8px;
1920
+ border: 1px solid var(--border-subtle);
1921
+ border-radius: 6px;
1922
+ background: var(--bg-canvas);
1923
+ text-align: left;
1924
+ }
1925
+
1926
+ .inline-relation:hover {
1927
+ border-color: var(--primary-light);
1928
+ background: var(--bg-card-hover);
1929
+ }
1930
+
1931
+ .inline-relation-type {
1932
+ display: block;
1933
+ margin-bottom: 2px;
1934
+ font-size: 10px;
1935
+ font-weight: 800;
1936
+ }
1937
+
1938
+ .inline-relation-main {
1939
+ display: flex;
1940
+ align-items: center;
1941
+ justify-content: space-between;
1942
+ gap: 6px;
1943
+ color: var(--text-primary);
1944
+ font-size: 12px;
1945
+ }
1946
+
1947
+ .inline-relation small {
1948
+ display: block;
1949
+ margin-top: 3px;
1950
+ color: var(--text-dim);
1951
+ font-size: 10px;
1952
+ line-height: 1.45;
1953
+ }
1954
+
1955
+ /* High-density MDX widgets */
1956
+ .semantic-mermaid,
1957
+ .semantic-relation-map,
1958
+ .semantic-insight,
1959
+ .semantic-note-grid {
1960
+ min-width: 0;
1961
+ }
1962
+
1963
+ .draft-board .custom-section {
1964
+ padding: 12px 14px;
1965
+ }
1966
+
1967
+ /* Layout primitives are orchestration layers, not another card around their children. */
1968
+ .draft-board .custom-section:has(.semantic-grid),
1969
+ .draft-board .custom-section:has(.semantic-split),
1970
+ .draft-board .custom-section:has(.semantic-stack) {
1971
+ padding: 0;
1972
+ border: 0;
1973
+ background: transparent;
1974
+ box-shadow: none;
1975
+ width: 100%;
1976
+ }
1977
+
1978
+ .draft-board .semantic-grid,
1979
+ .draft-board .semantic-split {
1980
+ width: 100%;
1981
+ align-items: stretch;
1982
+ }
1983
+ .draft-board .semantic-grid { grid-template-columns: minmax(0, 1.35fr) minmax(250px, .9fr); }
1984
+
1985
+ .draft-board .semantic-grid > .semantic-mermaid,
1986
+ .draft-board .semantic-grid > .semantic-relation-map {
1987
+ width: 100% !important;
1988
+ max-width: none;
1989
+ margin: 0;
1990
+ padding: 14px 16px;
1991
+ border: 1px solid var(--border-medium);
1992
+ border-radius: 10px;
1993
+ background: var(--bg-surface);
1994
+ box-shadow: var(--shadow-sm);
1995
+ }
1996
+
1997
+ .semantic-relation-path {
1998
+ width: 100%;
1999
+ margin: 0 0 14px;
2000
+ padding: 14px 16px;
2001
+ border: 1px solid var(--border-medium);
2002
+ border-radius: 10px;
2003
+ background: var(--bg-surface);
2004
+ box-shadow: var(--shadow-sm);
2005
+ }
2006
+ .relation-path-steps { display: flex; align-items: stretch; overflow-x: auto; padding: 2px 0 4px; }
2007
+ .relation-path-node { flex: 1 0 150px; min-width: 150px; padding: 10px 12px; border: 1px solid var(--border-medium); border-top: 3px solid var(--accent-cyan); border-radius: 8px; background: var(--bg-card); }
2008
+ .relation-path-node.tone-success { border-top-color: var(--accent-emerald); }
2009
+ .relation-path-node.tone-warning { border-top-color: var(--accent-amber); }
2010
+ .relation-path-node.tone-danger { border-top-color: var(--accent-rose); }
2011
+ .relation-path-kicker, .relation-path-node strong, .relation-path-node small { display: block; }
2012
+ .relation-path-kicker { color: var(--text-dim); font: 700 10px 'Fira Code', monospace; margin-bottom: 4px; }
2013
+ .relation-path-node strong { color: var(--text-primary); font-size: 13px; }
2014
+ .relation-path-node small { margin-top: 4px; color: var(--text-muted); font-size: 11px; }
2015
+ .relation-path-edge { flex: 0 0 72px; display: grid; place-items: center; position: relative; color: var(--text-accent); font: 700 10px 'Fira Code', monospace; }
2016
+ .relation-path-edge::before { content: ''; position: absolute; left: 4px; right: 4px; top: 50%; border-top: 1px dashed var(--border-strong); }
2017
+ .relation-path-edge span { z-index: 1; padding: 2px 4px; background: var(--bg-surface); }
2018
+
2019
+ .draft-board .semantic-mermaid,
2020
+ .draft-board .semantic-relation-map {
2021
+ width: fit-content;
2022
+ max-width: 100%;
2023
+ overflow: visible;
2024
+ }
2025
+
2026
+ .draft-board .semantic-insight,
2027
+ .draft-board .semantic-note-grid {
2028
+ width: fit-content;
2029
+ max-width: 100%;
2030
+ }
2031
+
2032
+ .semantic-widget-head {
2033
+ display: flex;
2034
+ align-items: center;
2035
+ justify-content: space-between;
2036
+ gap: 8px;
2037
+ margin-bottom: 8px;
2038
+ color: var(--text-primary);
2039
+ font-size: 11px;
2040
+ font-weight: 800;
2041
+ }
2042
+
2043
+ .semantic-widget-head code {
2044
+ color: var(--text-dim);
2045
+ font-family: 'Fira Code', monospace;
2046
+ font-size: 9px;
2047
+ }
2048
+
2049
+ .mermaid-canvas {
2050
+ min-height: 100px;
2051
+ overflow: auto;
2052
+ padding: 4px;
2053
+ max-width: 100%;
2054
+ min-width: 0;
2055
+ }
2056
+
2057
+ .mermaid-canvas svg {
2058
+ max-width: none;
2059
+ min-width: 100%;
2060
+ height: auto;
2061
+ }
2062
+
2063
+ .mermaid-error {
2064
+ margin: 0;
2065
+ color: var(--accent-rose);
2066
+ font-size: 11px;
2067
+ white-space: pre-wrap;
2068
+ }
2069
+
2070
+ .relation-map-grid {
2071
+ display: grid;
2072
+ gap: 5px;
2073
+ }
2074
+
2075
+ .relation-map-row {
2076
+ display: grid;
2077
+ grid-template-columns: minmax(90px, 1fr) auto minmax(90px, 1fr);
2078
+ gap: 8px;
2079
+ align-items: center;
2080
+ padding: 6px 8px;
2081
+ border-bottom: 1px solid var(--border-subtle);
2082
+ font-size: 11px;
2083
+ }
2084
+
2085
+ .relation-map-source { color: var(--text-secondary); }
2086
+ .relation-map-target { color: var(--text-accent); font-weight: 700; }
2087
+ .relation-map-arrow { color: var(--accent-amber); font-family: 'Fira Code', monospace; font-size: 10px; }
2088
+ .relation-map-row small { grid-column: 1 / -1; color: var(--text-dim); }
2089
+
2090
+ .semantic-insight {
2091
+ padding: 12px 14px;
2092
+ border-left: 3px solid var(--primary-light);
2093
+ background: var(--bg-highlight);
2094
+ }
2095
+
2096
+ .insight-kicker { margin-bottom: 4px; color: var(--text-accent); font-size: 11px; font-weight: 800; }
2097
+ .insight-body { color: var(--text-secondary); font-size: 12px; line-height: 1.55; }
2098
+ .insight-warn { border-color: var(--accent-amber); background: var(--callout-warn-bg); }
2099
+ .insight-warn .insight-kicker { color: var(--accent-amber); }
2100
+ .insight-success { border-color: var(--accent-emerald); background: var(--callout-success-bg); }
2101
+ .insight-success .insight-kicker { color: var(--accent-emerald); }
2102
+
2103
+ .semantic-note-grid {
2104
+ display: grid;
2105
+ grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
2106
+ gap: 8px;
2107
+ }
2108
+
2109
+ .semantic-note {
2110
+ min-height: 54px;
2111
+ padding: 8px 10px;
2112
+ border: 1px solid var(--border-subtle);
2113
+ border-radius: 4px 8px 5px 7px;
2114
+ background: var(--bg-card);
2115
+ box-shadow: 2px 2px 0 rgba(15, 23, 42, 0.08);
2116
+ }
2117
+
2118
+ .semantic-note strong,
2119
+ .semantic-note span { display: block; }
2120
+ .semantic-note strong { margin-bottom: 4px; color: var(--text-primary); font-size: 11px; }
2121
+ .semantic-note span { color: var(--text-secondary); font-size: 11px; line-height: 1.45; }
2122
+
2123
+ @media (max-width: 1120px) {
2124
+ .node-explorer-layout {
2125
+ grid-template-columns: 190px minmax(0, 1fr);
2126
+ }
2127
+
2128
+ .draft-board .content-blocks {
2129
+ grid-template-columns: repeat(2, minmax(250px, 1fr));
2130
+ }
2131
+
2132
+ .draft-board .drill-down-section,
2133
+ .draft-board .custom-section {
2134
+ grid-column: auto;
2135
+ }
2136
+
2137
+ .inline-inspector-grid {
2138
+ grid-template-columns: repeat(2, minmax(180px, 1fr));
2139
+ }
2140
+ }
2141
+
2142
+ @media (max-width: 760px) {
2143
+ .node-explorer-layout { display: block; overflow-y: auto; }
2144
+ .explorer-side { max-height: none; border: 0; }
2145
+ .left-side { display: none; }
2146
+ .explorer-center { padding: 16px 12px 18px; }
2147
+ .hierarchy-strip { width: 100%; top: 4px; }
2148
+ .draft-board { min-width: 0; }
2149
+ .semantic-split { grid-template-columns: 1fr; }
2150
+ .draft-board .semantic-grid { grid-template-columns: 1fr; }
2151
+ .draft-board .content-blocks {
2152
+ grid-template-columns: minmax(0, 1fr);
2153
+ }
2154
+ }
2155
+
2156
+ @media (max-width: 760px) {
2157
+ .relation-graph-layout { display: flex; flex-direction: column; }
2158
+ .graph-main { min-height: 62vh; }
2159
+ .graph-side-panel { max-height: 38vh; border-left: 0; border-top: 1px solid var(--border-medium); padding: 16px; }
2160
+ .graph-control-bar { left: 10px; right: 10px; top: 10px; flex-wrap: wrap; gap: 6px; }
2161
+ .graph-control-bar .filter-group { display: none; }
2162
+ .graph-legend-ribbon { display: none; }
2163
+ }
2164
+
2165
+ .graph-side-panel {
2166
+ background: var(--bg-surface);
2167
+ border-left: 1px solid var(--border-medium);
2168
+ padding: 28px 24px;
2169
+ overflow-y: auto;
2170
+ box-shadow: var(--shadow-lg);
2171
+ transition: background-color 0.3s ease;
2172
+ }
2173
+
2174
+ .graph-inspector {
2175
+ display: flex;
2176
+ flex-direction: column;
2177
+ gap: 16px;
2178
+ }
2179
+
2180
+ .panel-badge {
2181
+ font-size: 11px;
2182
+ font-weight: 800;
2183
+ text-transform: uppercase;
2184
+ letter-spacing: 0.06em;
2185
+ }
2186
+
2187
+ .panel-node-title {
2188
+ font-size: 22px;
2189
+ font-weight: 800;
2190
+ color: var(--text-primary);
2191
+ line-height: 1.3;
2192
+ }
2193
+
2194
+ .panel-summary {
2195
+ font-size: 14px;
2196
+ color: var(--text-secondary);
2197
+ line-height: 1.6;
2198
+ }
2199
+
2200
+ .jump-explorer-btn {
2201
+ display: flex;
2202
+ align-items: center;
2203
+ justify-content: center;
2204
+ gap: 8px;
2205
+ width: 100%;
2206
+ padding: 12px;
2207
+ border-radius: 10px;
2208
+ background: var(--primary);
2209
+ color: #fff;
2210
+ font-weight: 700;
2211
+ font-size: 13px;
2212
+ box-shadow: var(--shadow-sm);
2213
+ transition: all 0.2s ease;
2214
+ }
2215
+
2216
+ .jump-explorer-btn:hover {
2217
+ background: var(--primary-light);
2218
+ box-shadow: var(--shadow-glow);
2219
+ transform: translateY(-1px);
2220
+ }
2221
+
2222
+ .panel-divider {
2223
+ height: 1px;
2224
+ background: var(--border-medium);
2225
+ margin: 6px 0;
2226
+ }
2227
+
2228
+ .panel-section .section-title {
2229
+ font-size: 11px;
2230
+ font-weight: 700;
2231
+ color: var(--text-dim);
2232
+ text-transform: uppercase;
2233
+ letter-spacing: 0.08em;
2234
+ margin-bottom: 12px;
2235
+ }
2236
+
2237
+ .panel-rel-list {
2238
+ display: flex;
2239
+ flex-direction: column;
2240
+ gap: 8px;
2241
+ }
2242
+
2243
+ .panel-rel-card {
2244
+ background: var(--bg-canvas);
2245
+ border: 1px solid var(--border-medium);
2246
+ border-radius: 8px;
2247
+ padding: 12px;
2248
+ cursor: pointer;
2249
+ transition: all 0.15s ease;
2250
+ }
2251
+
2252
+ .panel-rel-card:hover {
2253
+ border-color: var(--primary);
2254
+ background: var(--bg-subtle);
2255
+ transform: translateX(2px);
2256
+ }
2257
+
2258
+ .rel-card-header {
2259
+ display: flex;
2260
+ justify-content: space-between;
2261
+ align-items: center;
2262
+ font-size: 10px;
2263
+ margin-bottom: 4px;
2264
+ }
2265
+
2266
+ .rel-tag {
2267
+ font-weight: 700;
2268
+ }
2269
+
2270
+ .rel-dir {
2271
+ color: var(--text-dim);
2272
+ }
2273
+
2274
+ .rel-target-title {
2275
+ font-size: 13px;
2276
+ font-weight: 600;
2277
+ color: var(--text-primary);
2278
+ }
2279
+
2280
+ .rel-target-desc {
2281
+ font-size: 11px;
2282
+ color: var(--text-muted);
2283
+ margin-top: 4px;
2284
+ }
2285
+
2286
+ .io-capsule {
2287
+ background: var(--bg-canvas);
2288
+ border: 1px solid var(--border-medium);
2289
+ padding: 12px 14px;
2290
+ border-radius: 8px;
2291
+ font-size: 12px;
2292
+ display: flex;
2293
+ flex-direction: column;
2294
+ gap: 8px;
2295
+ }
2296
+
2297
+ .empty-inspector {
2298
+ display: flex;
2299
+ flex-direction: column;
2300
+ align-items: center;
2301
+ justify-content: center;
2302
+ height: 320px;
2303
+ color: var(--text-dim);
2304
+ text-align: center;
2305
+ gap: 14px;
2306
+ font-size: 13px;
2307
+ padding: 0 20px;
2308
+ }
2309
+
2310
+ .empty-subtext {
2311
+ font-size: 12px;
2312
+ color: var(--text-dim);
2313
+ font-style: italic;
2314
+ padding: 6px 0;
2315
+ }
2316
+
2317
+ /* ==========================================================================
2318
+ SEMANTIC PRESENTATION COMPONENTS (Matrix, Compare, Callouts)
2319
+ ========================================================================== */
2320
+
2321
+ .semantic-learning-objectives,
2322
+ .semantic-key-question,
2323
+ .semantic-evidence,
2324
+ .semantic-invariant,
2325
+ .semantic-failure-mode {
2326
+ border: 1px solid var(--line-subtle, rgba(148, 163, 184, .24));
2327
+ border-radius: 12px;
2328
+ padding: 12px 14px;
2329
+ background: var(--surface-soft, rgba(15, 23, 42, .28));
2330
+ }
2331
+
2332
+ .semantic-learning-objectives ul { margin: 8px 0 0; padding-left: 20px; }
2333
+ .semantic-learning-objectives li { margin: 4px 0; }
2334
+ .semantic-key-question { display: flex; align-items: baseline; gap: 10px; border-color: rgba(56, 189, 248, .35); }
2335
+ .semantic-key-question strong { color: var(--text-primary, #e2e8f0); }
2336
+ .semantic-evidence { display: grid; gap: 7px; border-color: rgba(52, 211, 153, .3); }
2337
+ .evidence-command { overflow-x: auto; color: #a7f3d0; }
2338
+ .evidence-observes { color: var(--text-secondary, #cbd5e1); }
2339
+ .semantic-invariant { border-color: rgba(129, 140, 248, .35); }
2340
+ .semantic-invariant > div:last-child { margin-top: 6px; }
2341
+ .semantic-failure-mode { border-color: rgba(251, 146, 60, .38); }
2342
+ .semantic-failure-mode dl { display: grid; grid-template-columns: auto 1fr; gap: 5px 12px; margin: 8px 0 0; }
2343
+ .semantic-failure-mode dt { color: var(--text-muted, #94a3b8); font-size: .8rem; }
2344
+ .semantic-failure-mode dd { margin: 0; }
2345
+ .failure-details { margin-top: 10px; }
2346
+ .semantic-tradeoff { border: 1px solid rgba(250, 204, 21, .3); border-radius: 12px; padding: 12px 14px; background: var(--surface-soft, rgba(15,23,42,.24)); }
2347
+ .tradeoff-options { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 10px; margin-top: 8px; }
2348
+ .tradeoff-option { display: grid; gap: 4px; padding: 9px; border-radius: 8px; background: rgba(148,163,184,.08); }
2349
+ .tradeoff-option span { color: var(--text-secondary, #cbd5e1); font-size: .86rem; }
2350
+ .tradeoff-option b { color: var(--text-muted, #94a3b8); font-size: .72rem; margin-right: 5px; }
2351
+
2352
+ .semantic-callout {
2353
+ padding: 16px 20px;
2354
+ border-radius: 10px;
2355
+ margin: 14px 0;
2356
+ background: var(--callout-info-bg);
2357
+ border-left: 4px solid var(--callout-info-border);
2358
+ }
2359
+
2360
+ .semantic-callout.callout-warn {
2361
+ border-left-color: var(--callout-warn-border);
2362
+ background: var(--callout-warn-bg);
2363
+ }
2364
+
2365
+ .semantic-callout.callout-danger {
2366
+ border-left-color: var(--callout-danger-border);
2367
+ background: var(--callout-danger-bg);
2368
+ }
2369
+
2370
+ .callout-title {
2371
+ font-weight: 700;
2372
+ margin-bottom: 6px;
2373
+ color: var(--text-primary);
2374
+ font-size: 14px;
2375
+ }
2376
+
2377
+ .callout-content {
2378
+ color: var(--text-secondary);
2379
+ font-size: 13px;
2380
+ line-height: 1.6;
2381
+ }
2382
+
2383
+ .semantic-decision-matrix, .semantic-compare-table {
2384
+ overflow-x: auto;
2385
+ margin-top: 14px;
2386
+ border-radius: 10px;
2387
+ border: 1px solid var(--border-medium);
2388
+ background: var(--bg-canvas);
2389
+ }
2390
+
2391
+ .matrix-title {
2392
+ padding: 12px 16px;
2393
+ font-weight: 700;
2394
+ font-size: 13px;
2395
+ color: var(--text-primary);
2396
+ border-bottom: 1px solid var(--border-medium);
2397
+ background: var(--bg-surface);
2398
+ }
2399
+
2400
+ .semantic-decision-matrix table, .semantic-compare-table table {
2401
+ width: 100%;
2402
+ border-collapse: collapse;
2403
+ font-size: 13px;
2404
+ }
2405
+
2406
+ .semantic-decision-matrix th, .semantic-compare-table th {
2407
+ background: var(--bg-surface);
2408
+ padding: 10px 14px;
2409
+ border-bottom: 1px solid var(--border-medium);
2410
+ border-right: 1px solid var(--border-subtle);
2411
+ text-align: left;
2412
+ font-weight: 700;
2413
+ color: var(--text-primary);
2414
+ }
2415
+
2416
+ .semantic-decision-matrix td, .semantic-compare-table td {
2417
+ padding: 10px 14px;
2418
+ border-bottom: 1px solid var(--border-subtle);
2419
+ border-right: 1px solid var(--border-subtle);
2420
+ color: var(--text-secondary);
2421
+ }
2422
+
2423
+ .semantic-decision-matrix tr:last-child td, .semantic-compare-table tr:last-child td {
2424
+ border-bottom: none;
2425
+ }