@liduchuan/atlas-loop 0.0.0-stage → 0.1.1

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,1188 @@
1
+ :root {
2
+ --bg-canvas: #fafafa;
3
+ --bg-surface: #ffffff;
4
+ --bg-subtle: #f4f4f5;
5
+ --bg-hover: #e4e4e7;
6
+ --bg-active: #18181b;
7
+ --text-primary: #09090b;
8
+ --text-secondary: #52525b;
9
+ --text-muted: #71717a;
10
+ --text-inverse: #fafafa;
11
+ --border-subtle: #e4e4e7;
12
+ --border-strong: #d4d4d8;
13
+ --border-focus: #18181b;
14
+ --accent-warn-bg: #fafaf9;
15
+ --accent-warn-border: #d6d3d1;
16
+ --accent-warn-text: #78716c;
17
+ --accent-ok-dot: #15803d;
18
+ --accent-warn-dot: #b45309;
19
+ --shadow-xs: 0 1px 2px rgba(9, 9, 11, 0.04);
20
+ --shadow-sm: 0 2px 8px rgba(9, 9, 11, 0.06);
21
+ --shadow-md: 0 12px 32px rgba(9, 9, 11, 0.12);
22
+ --radius-sm: 6px;
23
+ --radius-md: 8px;
24
+ --radius-lg: 10px;
25
+ }
26
+
27
+ *,
28
+ *::before,
29
+ *::after {
30
+ box-sizing: border-box;
31
+ }
32
+
33
+ @media (pointer: fine) {
34
+ html {
35
+ overscroll-behavior: none;
36
+ }
37
+ }
38
+
39
+ html,
40
+ body,
41
+ #root {
42
+ margin: 0;
43
+ padding: 0;
44
+ width: 100%;
45
+ height: 100%;
46
+ overflow: hidden;
47
+ font-family: -apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", sans-serif;
48
+ font-size: 13px;
49
+ line-height: 1.5;
50
+ color: var(--text-primary);
51
+ background-color: var(--bg-canvas);
52
+ -webkit-font-smoothing: antialiased;
53
+ }
54
+
55
+ .sr-only {
56
+ position: absolute;
57
+ width: 1px;
58
+ height: 1px;
59
+ padding: 0;
60
+ margin: -1px;
61
+ overflow: hidden;
62
+ clip: rect(0, 0, 0, 0);
63
+ white-space: nowrap;
64
+ border: 0;
65
+ }
66
+
67
+ .atlas-skip-link {
68
+ position: absolute;
69
+ top: -48px;
70
+ left: 12px;
71
+ z-index: 999;
72
+ padding: 6px 12px;
73
+ background: var(--bg-active);
74
+ color: var(--text-inverse);
75
+ border-radius: var(--radius-sm);
76
+ text-decoration: none;
77
+ font-weight: 500;
78
+ }
79
+
80
+ .atlas-skip-link:focus-visible {
81
+ top: 12px;
82
+ }
83
+
84
+ button,
85
+ a,
86
+ input {
87
+ font-family: inherit;
88
+ touch-action: manipulation;
89
+ -webkit-tap-highlight-color: transparent;
90
+ }
91
+
92
+ button:focus-visible,
93
+ a:focus-visible,
94
+ input:focus-visible {
95
+ outline: 2px solid var(--border-focus);
96
+ outline-offset: 2px;
97
+ }
98
+
99
+ .atlas-shell-root {
100
+ display: flex;
101
+ flex-direction: column;
102
+ width: 100%;
103
+ height: 100%;
104
+ padding-top: env(safe-area-inset-top);
105
+ padding-bottom: env(safe-area-inset-bottom);
106
+ padding-left: env(safe-area-inset-left);
107
+ padding-right: env(safe-area-inset-right);
108
+ }
109
+
110
+ /* Top Header */
111
+ .atlas-topbar {
112
+ display: flex;
113
+ justify-content: space-between;
114
+ align-items: center;
115
+ gap: 16px;
116
+ padding: 10px 20px;
117
+ background: var(--bg-surface);
118
+ border-bottom: 1px solid var(--border-subtle);
119
+ flex-shrink: 0;
120
+ }
121
+
122
+ .atlas-topbar-left {
123
+ min-width: 0;
124
+ flex: 1;
125
+ }
126
+
127
+ .atlas-top-badges {
128
+ display: flex;
129
+ align-items: center;
130
+ gap: 6px;
131
+ margin-bottom: 2px;
132
+ flex-wrap: wrap;
133
+ }
134
+
135
+ .atlas-parent-link {
136
+ display: inline-flex;
137
+ align-items: center;
138
+ gap: 4px;
139
+ font-size: 11.5px;
140
+ font-weight: 500;
141
+ color: var(--text-primary);
142
+ background: var(--bg-subtle);
143
+ border: 1px solid var(--border-subtle);
144
+ padding: 1px 8px;
145
+ border-radius: var(--radius-sm);
146
+ text-decoration: none;
147
+ transition: background-color 140ms ease, border-color 140ms ease;
148
+ }
149
+
150
+ .atlas-parent-link:hover {
151
+ background: var(--bg-hover);
152
+ border-color: var(--border-strong);
153
+ }
154
+
155
+ .atlas-subject-badge,
156
+ .atlas-level-badge {
157
+ font-size: 11px;
158
+ font-weight: 500;
159
+ color: var(--text-secondary);
160
+ background: var(--bg-subtle);
161
+ border: 1px solid var(--border-subtle);
162
+ padding: 1px 7px;
163
+ border-radius: var(--radius-sm);
164
+ font-variant-numeric: tabular-nums;
165
+ }
166
+
167
+ .atlas-title-row {
168
+ display: flex;
169
+ align-items: baseline;
170
+ gap: 10px;
171
+ flex-wrap: wrap;
172
+ min-width: 0;
173
+ }
174
+
175
+ .atlas-main-title {
176
+ margin: 0;
177
+ font-size: 15px;
178
+ font-weight: 600;
179
+ letter-spacing: -0.01em;
180
+ line-height: 1.35;
181
+ text-wrap: balance;
182
+ }
183
+
184
+ .atlas-subtitle {
185
+ margin: 0;
186
+ font-size: 12px;
187
+ color: var(--text-muted);
188
+ text-wrap: pretty;
189
+ }
190
+
191
+ .atlas-topbar-right {
192
+ display: flex;
193
+ align-items: center;
194
+ gap: 8px;
195
+ flex-shrink: 0;
196
+ }
197
+
198
+ .atlas-model-pill {
199
+ font-size: 11.5px;
200
+ font-weight: 500;
201
+ color: var(--text-secondary);
202
+ background: var(--bg-subtle);
203
+ border: 1px solid var(--border-subtle);
204
+ padding: 4px 9px;
205
+ border-radius: var(--radius-sm);
206
+ font-variant-numeric: tabular-nums;
207
+ }
208
+
209
+ .atlas-scope-btn {
210
+ font-size: 11.5px;
211
+ font-weight: 500;
212
+ color: var(--text-primary);
213
+ background: var(--bg-surface);
214
+ border: 1px solid var(--border-strong);
215
+ padding: 4px 9px;
216
+ border-radius: var(--radius-sm);
217
+ cursor: pointer;
218
+ font-variant-numeric: tabular-nums;
219
+ transition: background-color 140ms ease, border-color 140ms ease;
220
+ }
221
+
222
+ .atlas-scope-btn:hover {
223
+ background: var(--bg-subtle);
224
+ }
225
+
226
+ /* Toolbar */
227
+ .atlas-toolbar-row {
228
+ display: flex;
229
+ justify-content: space-between;
230
+ align-items: center;
231
+ gap: 12px;
232
+ padding: 7px 20px;
233
+ background: var(--bg-surface);
234
+ border-bottom: 1px solid var(--border-subtle);
235
+ flex-shrink: 0;
236
+ flex-wrap: wrap;
237
+ }
238
+
239
+ .atlas-streams-bar {
240
+ display: flex;
241
+ align-items: center;
242
+ gap: 6px;
243
+ flex-wrap: wrap;
244
+ min-width: 0;
245
+ }
246
+
247
+ .atlas-stream-pill-group {
248
+ display: inline-flex;
249
+ align-items: center;
250
+ border: 1px solid var(--border-subtle);
251
+ border-radius: var(--radius-sm);
252
+ background: var(--bg-surface);
253
+ overflow: hidden;
254
+ }
255
+
256
+ .atlas-stream-pill-group.active {
257
+ border-color: var(--bg-active);
258
+ }
259
+
260
+ .atlas-stream-pill {
261
+ font-size: 12px;
262
+ font-weight: 500;
263
+ padding: 4px 10px;
264
+ border: 1px solid var(--border-subtle);
265
+ border-radius: var(--radius-sm);
266
+ background: var(--bg-surface);
267
+ color: var(--text-secondary);
268
+ cursor: pointer;
269
+ transition: background-color 140ms ease, color 140ms ease, border-color 140ms ease;
270
+ }
271
+
272
+ .atlas-stream-pill-group .atlas-stream-pill {
273
+ border: none;
274
+ border-radius: 0;
275
+ }
276
+
277
+ .atlas-stream-pill:hover {
278
+ background: var(--bg-subtle);
279
+ color: var(--text-primary);
280
+ }
281
+
282
+ .atlas-stream-pill.active {
283
+ background: var(--bg-active);
284
+ color: var(--text-inverse);
285
+ border-color: var(--bg-active);
286
+ }
287
+
288
+ .atlas-stream-help-btn {
289
+ width: 24px;
290
+ height: 26px;
291
+ border: none;
292
+ border-left: 1px solid var(--border-subtle);
293
+ background: var(--bg-subtle);
294
+ color: var(--text-secondary);
295
+ font-weight: 600;
296
+ font-size: 11.5px;
297
+ cursor: pointer;
298
+ display: inline-flex;
299
+ align-items: center;
300
+ justify-content: center;
301
+ transition: background-color 140ms ease, color 140ms ease;
302
+ }
303
+
304
+ .atlas-stream-help-btn:hover {
305
+ background: var(--bg-hover);
306
+ color: var(--text-primary);
307
+ }
308
+
309
+ .atlas-controls-group {
310
+ display: flex;
311
+ align-items: center;
312
+ gap: 8px;
313
+ flex-wrap: wrap;
314
+ }
315
+
316
+ .atlas-search-box {
317
+ position: relative;
318
+ }
319
+
320
+ .atlas-search-field {
321
+ display: flex;
322
+ align-items: center;
323
+ gap: 6px;
324
+ padding: 0 9px;
325
+ height: 28px;
326
+ border: 1px solid var(--border-subtle);
327
+ border-radius: var(--radius-sm);
328
+ background: var(--bg-canvas);
329
+ transition: border-color 140ms ease, background-color 140ms ease;
330
+ }
331
+
332
+ .atlas-search-field:focus-within {
333
+ background: var(--bg-surface);
334
+ border-color: var(--border-focus);
335
+ }
336
+
337
+ .atlas-search-icon {
338
+ color: var(--text-muted);
339
+ flex-shrink: 0;
340
+ }
341
+
342
+ .atlas-search-input {
343
+ width: 210px;
344
+ border: none;
345
+ background: transparent;
346
+ font-size: 12px;
347
+ color: var(--text-primary);
348
+ padding: 0;
349
+ }
350
+
351
+ .atlas-search-input:focus {
352
+ outline: none;
353
+ }
354
+
355
+ .atlas-search-input::placeholder {
356
+ color: var(--text-muted);
357
+ }
358
+
359
+ .atlas-search-dropdown {
360
+ position: absolute;
361
+ top: calc(100% + 4px);
362
+ right: 0;
363
+ width: 320px;
364
+ max-height: 300px;
365
+ overflow-y: auto;
366
+ overscroll-behavior: contain;
367
+ background: var(--bg-surface);
368
+ border: 1px solid var(--border-strong);
369
+ border-radius: var(--radius-md);
370
+ box-shadow: var(--shadow-md);
371
+ z-index: 60;
372
+ padding: 4px;
373
+ }
374
+
375
+ .atlas-search-item {
376
+ display: block;
377
+ width: 100%;
378
+ text-align: left;
379
+ padding: 6px 8px;
380
+ border: none;
381
+ background: transparent;
382
+ border-radius: var(--radius-sm);
383
+ cursor: pointer;
384
+ transition: background-color 120ms ease;
385
+ }
386
+
387
+ .atlas-search-item:hover {
388
+ background: var(--bg-subtle);
389
+ }
390
+
391
+ .atlas-search-item-title {
392
+ font-size: 12px;
393
+ font-weight: 600;
394
+ color: var(--text-primary);
395
+ display: flex;
396
+ align-items: center;
397
+ gap: 6px;
398
+ min-width: 0;
399
+ }
400
+
401
+ .atlas-search-item-sub {
402
+ font-size: 11px;
403
+ color: var(--text-muted);
404
+ margin-top: 2px;
405
+ overflow: hidden;
406
+ text-overflow: ellipsis;
407
+ white-space: nowrap;
408
+ }
409
+
410
+ .atlas-search-empty {
411
+ padding: 10px;
412
+ font-size: 12px;
413
+ color: var(--text-muted);
414
+ }
415
+
416
+ .atlas-canvas-btns {
417
+ display: inline-flex;
418
+ align-items: center;
419
+ gap: 4px;
420
+ flex-wrap: wrap;
421
+ }
422
+
423
+ .atlas-ctrl-btn {
424
+ display: inline-flex;
425
+ align-items: center;
426
+ gap: 5px;
427
+ height: 28px;
428
+ padding: 0 9px;
429
+ font-size: 12px;
430
+ font-weight: 500;
431
+ background: var(--bg-surface);
432
+ color: var(--text-secondary);
433
+ border: 1px solid var(--border-subtle);
434
+ border-radius: var(--radius-sm);
435
+ cursor: pointer;
436
+ transition: background-color 140ms ease, color 140ms ease, border-color 140ms ease;
437
+ }
438
+
439
+ .atlas-ctrl-btn:hover {
440
+ background: var(--bg-subtle);
441
+ color: var(--text-primary);
442
+ border-color: var(--border-strong);
443
+ }
444
+
445
+ .atlas-ctrl-btn.locked,
446
+ .atlas-ctrl-btn.active {
447
+ background: var(--bg-active);
448
+ color: var(--text-inverse);
449
+ border-color: var(--bg-active);
450
+ }
451
+
452
+ /* Recommended Learning Path */
453
+ .atlas-reading-bar {
454
+ display: flex;
455
+ align-items: center;
456
+ gap: 8px;
457
+ padding: 6px 20px;
458
+ background: var(--bg-canvas);
459
+ border-bottom: 1px solid var(--border-subtle);
460
+ overflow-x: auto;
461
+ flex-shrink: 0;
462
+ }
463
+
464
+ .atlas-reading-label {
465
+ font-size: 11.5px;
466
+ font-weight: 500;
467
+ color: var(--text-muted);
468
+ white-space: nowrap;
469
+ }
470
+
471
+ .atlas-reading-steps {
472
+ display: flex;
473
+ align-items: center;
474
+ gap: 4px;
475
+ }
476
+
477
+ .atlas-step-chip {
478
+ display: inline-flex;
479
+ align-items: center;
480
+ gap: 5px;
481
+ font-size: 11.5px;
482
+ font-weight: 500;
483
+ padding: 2px 8px;
484
+ border-radius: var(--radius-sm);
485
+ border: 1px solid transparent;
486
+ background: transparent;
487
+ color: var(--text-secondary);
488
+ cursor: pointer;
489
+ white-space: nowrap;
490
+ font-variant-numeric: tabular-nums;
491
+ transition: background-color 140ms ease, color 140ms ease, border-color 140ms ease;
492
+ }
493
+
494
+ .atlas-step-chip:hover {
495
+ background: var(--bg-surface);
496
+ border-color: var(--border-subtle);
497
+ color: var(--text-primary);
498
+ }
499
+
500
+ .atlas-step-chip.active {
501
+ background: var(--bg-surface);
502
+ border-color: var(--border-focus);
503
+ color: var(--text-primary);
504
+ font-weight: 600;
505
+ }
506
+
507
+ .atlas-step-num {
508
+ display: inline-flex;
509
+ align-items: center;
510
+ justify-content: center;
511
+ min-width: 16px;
512
+ height: 16px;
513
+ padding: 0 4px;
514
+ border-radius: 4px;
515
+ background: var(--bg-subtle);
516
+ color: var(--text-secondary);
517
+ font-size: 10.5px;
518
+ font-weight: 600;
519
+ }
520
+
521
+ .atlas-step-chip.active .atlas-step-num {
522
+ background: var(--bg-active);
523
+ color: var(--text-inverse);
524
+ }
525
+
526
+ /* Workspace & Canvas */
527
+ .atlas-main-workspace {
528
+ flex: 1;
529
+ min-height: 0;
530
+ display: flex;
531
+ position: relative;
532
+ width: 100%;
533
+ }
534
+
535
+ .atlas-canvas-container {
536
+ flex: 1;
537
+ height: 100%;
538
+ min-height: 400px;
539
+ position: relative;
540
+ background: var(--bg-canvas);
541
+ }
542
+
543
+ /* Node Card — Restrained Architectural Style */
544
+ .react-flow__node-atlasNode {
545
+ border-radius: var(--radius-lg) !important;
546
+ box-shadow: none !important;
547
+ }
548
+
549
+ .react-flow__node-atlasNode:focus,
550
+ .react-flow__node-atlasNode:focus-visible {
551
+ outline: none !important;
552
+ }
553
+
554
+ .react-flow__node-atlasNode:focus-visible .atlas-node {
555
+ outline: 2px solid var(--border-focus);
556
+ outline-offset: 2px;
557
+ }
558
+
559
+ .atlas-node {
560
+ background: var(--bg-surface);
561
+ border: 1px solid var(--border-subtle);
562
+ border-radius: var(--radius-lg);
563
+ padding: 11px 13px;
564
+ box-shadow: var(--shadow-xs);
565
+ display: flex;
566
+ flex-direction: column;
567
+ gap: 6px;
568
+ position: relative;
569
+ transition: border-color 140ms ease, box-shadow 140ms ease;
570
+ }
571
+
572
+ .atlas-node:hover {
573
+ border-color: var(--border-strong);
574
+ box-shadow: var(--shadow-sm);
575
+ }
576
+
577
+ .atlas-node-sub {
578
+ background: var(--bg-canvas);
579
+ border-style: dashed;
580
+ border-color: var(--border-strong);
581
+ }
582
+
583
+ .atlas-node-selected {
584
+ border-color: var(--border-focus) !important;
585
+ box-shadow: 0 0 0 1px var(--border-focus), var(--shadow-sm) !important;
586
+ }
587
+
588
+ .atlas-handle {
589
+ width: 6px !important;
590
+ height: 6px !important;
591
+ background: var(--border-strong) !important;
592
+ border: 1px solid var(--bg-surface) !important;
593
+ }
594
+
595
+ .atlas-node-header {
596
+ display: flex;
597
+ justify-content: space-between;
598
+ align-items: center;
599
+ gap: 6px;
600
+ }
601
+
602
+ .atlas-node-badges {
603
+ display: flex;
604
+ align-items: center;
605
+ gap: 5px;
606
+ flex-wrap: wrap;
607
+ min-width: 0;
608
+ }
609
+
610
+ .atlas-role-badge {
611
+ display: inline-flex;
612
+ align-items: center;
613
+ gap: 5px;
614
+ font-size: 10.5px;
615
+ font-weight: 500;
616
+ color: var(--text-secondary);
617
+ background: var(--bg-subtle);
618
+ border: 1px solid var(--border-subtle);
619
+ padding: 1px 6px;
620
+ border-radius: 4px;
621
+ }
622
+
623
+ .atlas-role-dot {
624
+ width: 6px;
625
+ height: 6px;
626
+ border-radius: 50%;
627
+ flex-shrink: 0;
628
+ }
629
+
630
+ .atlas-sub-pill {
631
+ font-size: 10px;
632
+ font-weight: 500;
633
+ padding: 1px 5px;
634
+ border-radius: 4px;
635
+ background: var(--bg-subtle);
636
+ color: var(--text-muted);
637
+ }
638
+
639
+ .atlas-unverified-pill {
640
+ font-size: 10px;
641
+ font-weight: 500;
642
+ padding: 1px 5px;
643
+ border-radius: 4px;
644
+ background: var(--accent-warn-bg);
645
+ color: var(--accent-warn-text);
646
+ border: 1px dashed var(--accent-warn-border);
647
+ }
648
+
649
+ .atlas-help-wrap {
650
+ position: relative;
651
+ flex-shrink: 0;
652
+ }
653
+
654
+ .atlas-help-btn {
655
+ width: 20px;
656
+ height: 20px;
657
+ border-radius: 50%;
658
+ border: 1px solid var(--border-strong);
659
+ background: var(--bg-surface);
660
+ color: var(--text-secondary);
661
+ font-size: 11.5px;
662
+ font-weight: 600;
663
+ line-height: 1;
664
+ display: inline-flex;
665
+ align-items: center;
666
+ justify-content: center;
667
+ cursor: pointer;
668
+ transition: background-color 140ms ease, color 140ms ease, border-color 140ms ease;
669
+ }
670
+
671
+ .atlas-help-btn:hover {
672
+ background: var(--bg-active);
673
+ border-color: var(--bg-active);
674
+ color: var(--text-inverse);
675
+ }
676
+
677
+ .atlas-help-tooltip {
678
+ position: absolute;
679
+ bottom: calc(100% + 7px);
680
+ right: 0;
681
+ width: 224px;
682
+ padding: 7px 9px;
683
+ background: var(--bg-active);
684
+ color: var(--text-inverse);
685
+ font-size: 11px;
686
+ line-height: 1.45;
687
+ border-radius: var(--radius-sm);
688
+ box-shadow: var(--shadow-md);
689
+ z-index: 100;
690
+ pointer-events: none;
691
+ text-wrap: pretty;
692
+ }
693
+
694
+ .atlas-node-body {
695
+ display: block;
696
+ width: 100%;
697
+ padding: 0;
698
+ margin: 0;
699
+ text-align: left;
700
+ color: inherit;
701
+ min-width: 0;
702
+ }
703
+
704
+ .atlas-node-title {
705
+ font-size: 13px;
706
+ font-weight: 600;
707
+ color: var(--text-primary);
708
+ line-height: 1.38;
709
+ overflow-wrap: break-word;
710
+ text-wrap: balance;
711
+ }
712
+
713
+ .atlas-node-summary {
714
+ margin-top: 3px;
715
+ font-size: 11.5px;
716
+ color: var(--text-muted);
717
+ line-height: 1.45;
718
+ display: -webkit-box;
719
+ -webkit-line-clamp: 2;
720
+ -webkit-box-orient: vertical;
721
+ overflow: hidden;
722
+ overflow-wrap: break-word;
723
+ }
724
+
725
+ .atlas-node-footer {
726
+ display: flex;
727
+ justify-content: space-between;
728
+ align-items: center;
729
+ margin-top: 2px;
730
+ padding-top: 6px;
731
+ border-top: 1px solid var(--border-subtle);
732
+ }
733
+
734
+ .atlas-expand-btn {
735
+ font-size: 11px;
736
+ font-weight: 500;
737
+ padding: 2px 7px;
738
+ border-radius: 4px;
739
+ border: 1px solid var(--border-subtle);
740
+ background: var(--bg-subtle);
741
+ color: var(--text-secondary);
742
+ cursor: pointer;
743
+ font-variant-numeric: tabular-nums;
744
+ transition: background-color 140ms ease, color 140ms ease, border-color 140ms ease;
745
+ }
746
+
747
+ .atlas-expand-btn:hover {
748
+ background: var(--bg-hover);
749
+ color: var(--text-primary);
750
+ }
751
+
752
+ .atlas-expand-btn.active {
753
+ background: var(--bg-active);
754
+ border-color: var(--bg-active);
755
+ color: var(--text-inverse);
756
+ }
757
+
758
+ .atlas-anchor-count {
759
+ font-size: 10.5px;
760
+ font-weight: 500;
761
+ color: var(--text-muted);
762
+ font-variant-numeric: tabular-nums;
763
+ }
764
+
765
+ /* Legend */
766
+ .atlas-legend-card {
767
+ position: absolute;
768
+ top: 12px;
769
+ left: 12px;
770
+ background: rgba(255, 255, 255, 0.96);
771
+ border: 1px solid var(--border-subtle);
772
+ border-radius: var(--radius-md);
773
+ padding: 10px 12px;
774
+ box-shadow: var(--shadow-sm);
775
+ z-index: 20;
776
+ display: flex;
777
+ flex-direction: column;
778
+ gap: 5px;
779
+ }
780
+
781
+ .atlas-legend-row {
782
+ display: flex;
783
+ align-items: center;
784
+ gap: 8px;
785
+ font-size: 11.5px;
786
+ color: var(--text-secondary);
787
+ }
788
+
789
+ .atlas-legend-swatch {
790
+ width: 7px;
791
+ height: 7px;
792
+ border-radius: 50%;
793
+ }
794
+
795
+ /* Right Inspector Drawer */
796
+ .atlas-inspector {
797
+ width: 380px;
798
+ max-width: 44vw;
799
+ height: 100%;
800
+ overflow-y: auto;
801
+ overflow-x: hidden;
802
+ overscroll-behavior: contain;
803
+ background: var(--bg-surface);
804
+ border-left: 1px solid var(--border-subtle);
805
+ padding: 16px 18px;
806
+ flex-shrink: 0;
807
+ }
808
+
809
+ .atlas-inspector-head {
810
+ display: flex;
811
+ justify-content: space-between;
812
+ align-items: flex-start;
813
+ gap: 10px;
814
+ margin-bottom: 10px;
815
+ }
816
+
817
+ .atlas-inspector-head-text {
818
+ min-width: 0;
819
+ }
820
+
821
+ .atlas-inspector-parent {
822
+ font-size: 11px;
823
+ color: var(--text-muted);
824
+ margin-bottom: 2px;
825
+ }
826
+
827
+ .atlas-inspector-title {
828
+ margin: 0;
829
+ font-size: 15px;
830
+ font-weight: 600;
831
+ line-height: 1.35;
832
+ text-wrap: balance;
833
+ overflow-wrap: break-word;
834
+ }
835
+
836
+ .atlas-icon-close {
837
+ padding: 4px 8px;
838
+ font-size: 11.5px;
839
+ font-weight: 500;
840
+ color: var(--text-secondary);
841
+ border: 1px solid var(--border-subtle);
842
+ border-radius: var(--radius-sm);
843
+ background: var(--bg-surface);
844
+ cursor: pointer;
845
+ flex-shrink: 0;
846
+ transition: background-color 140ms ease, color 140ms ease;
847
+ }
848
+
849
+ .atlas-icon-close:hover {
850
+ background: var(--bg-subtle);
851
+ color: var(--text-primary);
852
+ }
853
+
854
+ .atlas-conf-badge {
855
+ display: inline-flex;
856
+ align-items: center;
857
+ gap: 5px;
858
+ font-size: 11px;
859
+ font-weight: 500;
860
+ padding: 2px 7px;
861
+ border-radius: 4px;
862
+ background: var(--bg-subtle);
863
+ color: var(--text-secondary);
864
+ border: 1px solid var(--border-subtle);
865
+ }
866
+
867
+ .atlas-unverified-note {
868
+ margin: 6px 0 0 0;
869
+ font-size: 12px;
870
+ color: var(--text-secondary);
871
+ background: var(--bg-subtle);
872
+ border-left: 2px solid var(--accent-warn-dot);
873
+ padding: 6px 9px;
874
+ border-radius: 0 4px 4px 0;
875
+ }
876
+
877
+ .atlas-sec {
878
+ margin-top: 14px;
879
+ padding-top: 12px;
880
+ border-top: 1px solid var(--border-subtle);
881
+ }
882
+
883
+ .atlas-sec h4 {
884
+ margin: 0 0 5px 0;
885
+ font-size: 11.5px;
886
+ font-weight: 600;
887
+ color: var(--text-muted);
888
+ letter-spacing: 0.01em;
889
+ }
890
+
891
+ .atlas-sec p,
892
+ .atlas-kv {
893
+ margin: 0;
894
+ font-size: 12.5px;
895
+ line-height: 1.58;
896
+ color: var(--text-primary);
897
+ overflow-wrap: break-word;
898
+ text-wrap: pretty;
899
+ }
900
+
901
+ .atlas-kv + .atlas-kv {
902
+ margin-top: 6px;
903
+ }
904
+
905
+ .atlas-watchout-box {
906
+ background: var(--bg-canvas);
907
+ border: 1px solid var(--border-subtle);
908
+ border-radius: var(--radius-sm);
909
+ padding: 9px 11px;
910
+ }
911
+
912
+ .atlas-anchor-list {
913
+ display: flex;
914
+ flex-direction: column;
915
+ gap: 8px;
916
+ }
917
+
918
+ .atlas-anchor-card {
919
+ border: 1px solid var(--border-subtle);
920
+ border-radius: var(--radius-sm);
921
+ padding: 9px 10px;
922
+ background: var(--bg-canvas);
923
+ min-width: 0;
924
+ }
925
+
926
+ .atlas-anchor-label {
927
+ font-size: 11.5px;
928
+ font-weight: 600;
929
+ color: var(--text-primary);
930
+ margin-bottom: 4px;
931
+ }
932
+
933
+ .atlas-anchor-editor code {
934
+ display: block;
935
+ font-size: 11.5px;
936
+ color: var(--text-secondary);
937
+ word-break: break-all;
938
+ margin-bottom: 6px;
939
+ font-variant-numeric: tabular-nums;
940
+ }
941
+
942
+ .atlas-editor-btn {
943
+ display: inline-flex;
944
+ align-items: center;
945
+ padding: 4px 9px;
946
+ font-size: 11.5px;
947
+ font-weight: 500;
948
+ background: var(--bg-active);
949
+ color: var(--text-inverse);
950
+ border-radius: var(--radius-sm);
951
+ text-decoration: none;
952
+ transition: opacity 140ms ease;
953
+ }
954
+
955
+ .atlas-editor-btn:hover {
956
+ opacity: 0.88;
957
+ }
958
+
959
+ .atlas-editor-hint {
960
+ margin-top: 5px;
961
+ font-size: 11px;
962
+ color: var(--text-muted);
963
+ }
964
+
965
+ .atlas-anchor-snippet pre {
966
+ margin: 4px 0 6px 0;
967
+ padding: 8px 10px;
968
+ background: var(--bg-surface);
969
+ color: var(--text-primary);
970
+ border: 1px solid var(--border-subtle);
971
+ border-radius: var(--radius-sm);
972
+ font-size: 11.5px;
973
+ overflow-x: auto;
974
+ white-space: pre-wrap;
975
+ word-break: break-word;
976
+ }
977
+
978
+ .atlas-ext-link {
979
+ font-size: 12px;
980
+ color: var(--text-primary);
981
+ text-decoration: underline;
982
+ text-underline-offset: 2px;
983
+ word-break: break-all;
984
+ }
985
+
986
+ .atlas-source-cite {
987
+ font-size: 12px;
988
+ color: var(--text-secondary);
989
+ }
990
+
991
+ .atlas-open-dive-btn {
992
+ width: 100%;
993
+ padding: 8px 12px;
994
+ font-size: 12px;
995
+ font-weight: 500;
996
+ color: var(--text-primary);
997
+ background: var(--bg-subtle);
998
+ border: 1px solid var(--border-strong);
999
+ border-radius: var(--radius-sm);
1000
+ cursor: pointer;
1001
+ transition: background-color 140ms ease, border-color 140ms ease;
1002
+ }
1003
+
1004
+ .atlas-open-dive-btn:hover {
1005
+ background: var(--bg-hover);
1006
+ }
1007
+
1008
+ /* Modal */
1009
+ .atlas-modal-backdrop {
1010
+ position: fixed;
1011
+ inset: 0;
1012
+ background: rgba(9, 9, 11, 0.36);
1013
+ display: flex;
1014
+ align-items: center;
1015
+ justify-content: center;
1016
+ z-index: 200;
1017
+ padding: 24px;
1018
+ }
1019
+
1020
+ .atlas-modal {
1021
+ width: 660px;
1022
+ max-width: 92vw;
1023
+ max-height: 82vh;
1024
+ background: var(--bg-surface);
1025
+ border: 1px solid var(--border-subtle);
1026
+ border-radius: var(--radius-lg);
1027
+ box-shadow: var(--shadow-md);
1028
+ display: flex;
1029
+ flex-direction: column;
1030
+ overflow: hidden;
1031
+ }
1032
+
1033
+ .atlas-modal-header {
1034
+ display: flex;
1035
+ justify-content: space-between;
1036
+ align-items: flex-start;
1037
+ gap: 12px;
1038
+ padding: 14px 18px;
1039
+ border-bottom: 1px solid var(--border-subtle);
1040
+ }
1041
+
1042
+ .atlas-modal-kicker {
1043
+ font-size: 11px;
1044
+ font-weight: 500;
1045
+ color: var(--text-muted);
1046
+ margin-bottom: 2px;
1047
+ }
1048
+
1049
+ .atlas-modal-title {
1050
+ margin: 0;
1051
+ font-size: 15px;
1052
+ font-weight: 600;
1053
+ text-wrap: balance;
1054
+ }
1055
+
1056
+ .atlas-modal-tabs {
1057
+ display: flex;
1058
+ gap: 6px;
1059
+ padding: 8px 18px;
1060
+ background: var(--bg-canvas);
1061
+ border-bottom: 1px solid var(--border-subtle);
1062
+ }
1063
+
1064
+ .atlas-tab-btn {
1065
+ padding: 5px 11px;
1066
+ font-size: 12px;
1067
+ font-weight: 500;
1068
+ border-radius: var(--radius-sm);
1069
+ border: 1px solid transparent;
1070
+ background: transparent;
1071
+ color: var(--text-secondary);
1072
+ cursor: pointer;
1073
+ font-variant-numeric: tabular-nums;
1074
+ transition: background-color 140ms ease, color 140ms ease, border-color 140ms ease;
1075
+ }
1076
+
1077
+ .atlas-tab-btn:hover {
1078
+ color: var(--text-primary);
1079
+ background: var(--bg-subtle);
1080
+ }
1081
+
1082
+ .atlas-tab-btn.active {
1083
+ background: var(--bg-surface);
1084
+ border-color: var(--border-strong);
1085
+ color: var(--text-primary);
1086
+ box-shadow: var(--shadow-xs);
1087
+ }
1088
+
1089
+ .atlas-modal-body {
1090
+ padding: 16px 18px;
1091
+ overflow-y: auto;
1092
+ overscroll-behavior: contain;
1093
+ }
1094
+
1095
+ .atlas-prompt-list {
1096
+ display: flex;
1097
+ flex-direction: column;
1098
+ gap: 12px;
1099
+ }
1100
+
1101
+ .atlas-prompt-card {
1102
+ border: 1px solid var(--border-subtle);
1103
+ border-radius: var(--radius-md);
1104
+ padding: 12px 14px;
1105
+ background: var(--bg-canvas);
1106
+ }
1107
+
1108
+ .atlas-prompt-card-head {
1109
+ display: flex;
1110
+ justify-content: space-between;
1111
+ align-items: center;
1112
+ gap: 10px;
1113
+ margin-bottom: 8px;
1114
+ }
1115
+
1116
+ .atlas-prompt-pre {
1117
+ margin: 0;
1118
+ padding: 10px 12px;
1119
+ background: var(--bg-surface);
1120
+ border: 1px solid var(--border-subtle);
1121
+ border-radius: var(--radius-sm);
1122
+ font-size: 12px;
1123
+ line-height: 1.58;
1124
+ white-space: pre-wrap;
1125
+ word-break: break-word;
1126
+ color: var(--text-primary);
1127
+ }
1128
+
1129
+ .atlas-copy-btn {
1130
+ padding: 4px 10px;
1131
+ font-size: 11.5px;
1132
+ font-weight: 500;
1133
+ border-radius: var(--radius-sm);
1134
+ border: 1px solid var(--bg-active);
1135
+ background: var(--bg-active);
1136
+ color: var(--text-inverse);
1137
+ cursor: pointer;
1138
+ white-space: nowrap;
1139
+ transition: opacity 140ms ease, background-color 140ms ease, border-color 140ms ease;
1140
+ }
1141
+
1142
+ .atlas-copy-btn:hover {
1143
+ opacity: 0.88;
1144
+ }
1145
+
1146
+ .atlas-copy-btn.small {
1147
+ padding: 3px 8px;
1148
+ font-size: 11px;
1149
+ background: var(--bg-surface);
1150
+ color: var(--text-primary);
1151
+ border-color: var(--border-strong);
1152
+ }
1153
+
1154
+ .atlas-copy-btn.copied {
1155
+ background: var(--accent-ok-dot);
1156
+ border-color: var(--accent-ok-dot);
1157
+ color: var(--text-inverse);
1158
+ }
1159
+
1160
+ .atlas-hint-p {
1161
+ margin: 0 0 10px 0;
1162
+ font-size: 12px;
1163
+ color: var(--text-secondary);
1164
+ }
1165
+
1166
+ /* React Flow Overrides for Clean Restraint */
1167
+ .react-flow__edge-textbg {
1168
+ rx: 4;
1169
+ ry: 4;
1170
+ }
1171
+
1172
+ .react-flow__minimap {
1173
+ background-color: var(--bg-surface) !important;
1174
+ border: 1px solid var(--border-subtle) !important;
1175
+ border-radius: var(--radius-md) !important;
1176
+ box-shadow: var(--shadow-xs) !important;
1177
+ }
1178
+
1179
+ @media (prefers-reduced-motion: reduce) {
1180
+ *,
1181
+ *::before,
1182
+ *::after {
1183
+ animation-duration: 0.01ms !important;
1184
+ animation-iteration-count: 1 !important;
1185
+ transition-duration: 0.01ms !important;
1186
+ scroll-behavior: auto !important;
1187
+ }
1188
+ }