@freeway-hub/web-agent 0.0.0-stage → 1.0.4

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,1631 @@
1
+ /*
2
+ * Global UI design tokens and base element styling shared by all MCP tool apps. It establishes color, spacing, typography, and accessibility-friendly defaults.
3
+ */
4
+ :root {
5
+ color-scheme: light dark;
6
+
7
+ /* Spec variables with light-dark() fallbacks (following customer-segmentation pattern).
8
+ When a host provides --color-* via applyHostStyleVariables, the var() picks it up;
9
+ otherwise the light-dark() fallback keeps the UI legible. */
10
+ --bg: transparent;
11
+ --panel: var(--color-background-primary, light-dark(#ffffff, #1e1e2e));
12
+ --panel-subtle: var(--color-background-tertiary, light-dark(#f5f5f5, #2a2a3c));
13
+ --panel-muted: var(--color-background-tertiary, light-dark(#f5f5f5, #2a2a3c));
14
+ --text: var(--color-text-primary, light-dark(#1a1a2e, #e4e4ef));
15
+ --text-secondary: var(--color-text-secondary, light-dark(#4a4a5a, #a0a0b8));
16
+ --muted: var(--color-text-tertiary, light-dark(#94a3b8, #64748b));
17
+ --border: var(--color-border-primary, light-dark(#e2e8f0, #334155));
18
+ --accent: var(--color-text-info, light-dark(#2563eb, #60a5fa));
19
+ --accent-hover: var(--color-text-info, var(--accent));
20
+ --accent-soft: var(--color-background-info, var(--panel-subtle));
21
+ --focus-ring: var(--color-border-primary, var(--accent));
22
+ --shadow-sm: var(--shadow-sm, none);
23
+ --success-bg: var(--color-background-success, var(--panel-subtle));
24
+ --success-border: var(--color-border-success, var(--border));
25
+ --success-text: var(--color-text-success, light-dark(#059669, #34d399));
26
+ --error-bg: var(--color-background-danger, var(--panel-subtle));
27
+ --error-border: var(--color-border-danger, var(--border));
28
+ --error-text: var(--color-text-danger, light-dark(#dc2626, #f87171));
29
+ --warning-bg: var(--color-background-warning, var(--panel-subtle));
30
+ --warning-border: var(--color-border-warning, var(--border));
31
+ --warning-text: var(--color-text-warning, light-dark(#d97706, #fbbf24));
32
+ }
33
+
34
+ html {
35
+ background: var(--bg);
36
+ }
37
+
38
+ * {
39
+ box-sizing: border-box;
40
+ }
41
+
42
+ body {
43
+ margin: 0;
44
+ background: var(--bg);
45
+ color: var(--text);
46
+ font-family: var(--font-sans, system-ui, sans-serif);
47
+ max-height: 32px;
48
+ overflow: hidden;
49
+ }
50
+
51
+ body.dc-ready {
52
+ max-height: none;
53
+ overflow: auto;
54
+ overflow: clip;
55
+ }
56
+
57
+ #app {
58
+ min-height: 0;
59
+ }
60
+
61
+ .shell {
62
+ max-width: none;
63
+ margin: 0;
64
+ padding: 6px;
65
+ }
66
+
67
+ .tool-shell.collapsed .panel {
68
+ display: none;
69
+ }
70
+
71
+ .hidden {
72
+ display: none !important;
73
+ }
74
+
75
+
76
+ .compact-row {
77
+ display: flex;
78
+ align-items: center;
79
+ gap: 6px;
80
+ padding: 6px 2px;
81
+ font-size: 13px;
82
+ color: var(--muted);
83
+ line-height: 1;
84
+ user-select: none;
85
+ }
86
+
87
+ .compact-row--ready {
88
+ cursor: pointer;
89
+ border-radius: 8px;
90
+ transition: color 150ms ease;
91
+ }
92
+
93
+ .compact-row--ready:hover {
94
+ color: var(--text-secondary);
95
+ }
96
+
97
+ .compact-row--ready:hover .compact-chevron {
98
+ color: var(--text-secondary);
99
+ }
100
+
101
+ .compact-chevron {
102
+ width: 14px;
103
+ height: 14px;
104
+ fill: currentColor;
105
+ color: var(--muted);
106
+ flex-shrink: 0;
107
+ transition: transform 200ms ease, color 150ms ease;
108
+ }
109
+
110
+ .tool-shell.expanded .compact-chevron {
111
+ transform: rotate(90deg);
112
+ }
113
+
114
+ .compact-label {
115
+ color: inherit;
116
+ }
117
+
118
+ .compact-filename {
119
+ color: var(--text);
120
+ font-weight: 600;
121
+ }
122
+
123
+ .compact-row--ready .compact-label::after {
124
+ content: ' · ';
125
+ }
126
+
127
+ .compact-row--loading {
128
+ animation: fade-pulse 1.5s ease-in-out infinite;
129
+ }
130
+
131
+ @keyframes fade-pulse {
132
+ 0%,
133
+ 100% {
134
+ opacity: 0.5;
135
+ }
136
+
137
+ 50% {
138
+ opacity: 1;
139
+ }
140
+ }
141
+
142
+
143
+ /*
144
+ * App-specific styling for File Preview — tuned to blend with Claude's UI.
145
+ */
146
+ :root {
147
+ --code-bg: var(--panel);
148
+ --code-text: var(--color-text-primary, var(--text));
149
+ --hljs-keyword: light-dark(#8b5cf6, #a78bfa);
150
+ --hljs-string: var(--color-text-success, light-dark(#059669, #34d399));
151
+ --hljs-comment: var(--color-text-tertiary, light-dark(#94a3b8, #64748b));
152
+ --hljs-type: var(--color-text-info, light-dark(#0f766e, #5eead4));
153
+ --hljs-number: var(--color-text-warning, light-dark(#b45309, #fbbf24));
154
+ --hljs-attr: var(--color-text-info, light-dark(#2563eb, #60a5fa));
155
+ --hljs-built-in: light-dark(#6366f1, #818cf8);
156
+ --hljs-tag: var(--color-text-info, light-dark(#0ea5a8, #67e8f9));
157
+ --content-height: 920px;
158
+ --markdown-text: var(--text);
159
+ --markdown-muted: var(--text-secondary);
160
+ --inline-code-bg: var(--panel-subtle);
161
+ --inline-code-border: var(--border);
162
+ --inline-code-text: var(--text);
163
+ --notice-bg: var(--panel-subtle);
164
+ --notice-border: var(--border);
165
+ --notice-text: var(--text-secondary);
166
+ --toc-rail-width: 320px;
167
+ }
168
+
169
+ /* ── Panel (Claude-style card) ── */
170
+
171
+ .panel {
172
+ margin-top: 6px;
173
+ border: 1px solid color-mix(in srgb, var(--border) 50%, transparent);
174
+ border-radius: 16px;
175
+ background: var(--panel);
176
+ overflow: hidden;
177
+ }
178
+
179
+ /* Panel background comes directly from host --color-background-primary.
180
+ No dark-mode adjustment — the host provides the correct color. */
181
+
182
+ .tool-shell.collapsed .panel { display: none; }
183
+
184
+ /* When the host hides the summary row (hideSummaryRow: true), it means the host
185
+ provides its own outer frame/card. Strip inner chrome so only content remains. */
186
+ html:has(.fullscreen) {
187
+ height: 100%;
188
+ }
189
+
190
+ html:has(.fullscreen) body {
191
+ height: 100%;
192
+ display: flex;
193
+ flex-direction: column;
194
+ }
195
+
196
+ html:has(.fullscreen) #app {
197
+ flex: 1;
198
+ display: flex;
199
+ flex-direction: column;
200
+ }
201
+
202
+ .tool-shell.fullscreen {
203
+ flex: 1;
204
+ display: flex;
205
+ flex-direction: column;
206
+ }
207
+
208
+ .tool-shell.fullscreen .panel {
209
+ margin-top: 0;
210
+ border: none;
211
+ border-radius: 0;
212
+ flex: 1;
213
+ display: flex;
214
+ flex-direction: column;
215
+ }
216
+
217
+ .tool-shell.fullscreen {
218
+ --content-height: 89vh;
219
+ }
220
+
221
+ .tool-shell.fullscreen .panel-content-wrapper {
222
+ flex: 1;
223
+ }
224
+
225
+ .tool-shell.host-framed .compact-row { display: none; }
226
+ .tool-shell.host-framed .panel {
227
+ margin-top: 0;
228
+ border: none;
229
+ border-radius: 0;
230
+ background: transparent;
231
+ }
232
+ .tool-shell.host-framed .panel-breadcrumb { display: none; }
233
+ .tool-shell.host-framed .panel-footer { display: none; }
234
+ .tool-shell.host-framed .panel { position: relative; }
235
+ .tool-shell.host-framed .panel-topbar {
236
+ position: absolute;
237
+ top: 0;
238
+ right: 0;
239
+ z-index: 10;
240
+ width: auto;
241
+ opacity: 0;
242
+ transition: opacity 0.2s ease 1.5s;
243
+ pointer-events: none;
244
+ padding: 4px 8px;
245
+ gap: 6px;
246
+ background: var(--panel);
247
+ border-radius: 0 0 0 var(--border-radius-md, 6px);
248
+ box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1);
249
+ }
250
+ .tool-shell.host-framed .panel:hover .panel-topbar,
251
+ .tool-shell.host-framed .panel:focus-within .panel-topbar {
252
+ opacity: 1;
253
+ pointer-events: auto;
254
+ transition: opacity 0.2s ease;
255
+ }
256
+ .tool-shell.host-framed .panel-content-wrapper { max-height: none; overflow: hidden; }
257
+ .tool-shell.host-framed .image-content { background: transparent; }
258
+
259
+ /* ── Top bar ── */
260
+
261
+ .panel-topbar {
262
+ display: flex;
263
+ flex-wrap: nowrap;
264
+ align-items: center;
265
+ gap: 12px;
266
+ padding: 10px 16px;
267
+ border-bottom: 1px solid color-mix(in srgb, var(--border) 40%, transparent);
268
+ overflow: visible;
269
+ }
270
+
271
+ .panel-breadcrumb {
272
+ font-size: 13px;
273
+ color: var(--text-secondary);
274
+ direction: rtl;
275
+ text-align: left;
276
+ white-space: nowrap;
277
+ overflow: hidden;
278
+ text-overflow: ellipsis;
279
+ flex: 0 1 auto;
280
+ max-width: 50%;
281
+ min-width: 0;
282
+ }
283
+
284
+ .breadcrumb-sep {
285
+ color: color-mix(in srgb, var(--muted) 50%, transparent);
286
+ margin: 0 2px;
287
+ }
288
+
289
+ .panel-topbar-actions {
290
+ display: flex;
291
+ flex-wrap: nowrap;
292
+ align-items: center;
293
+ gap: 4px;
294
+ flex: 0 0 auto;
295
+ margin-left: auto;
296
+ }
297
+
298
+ .panel-action {
299
+ font-size: 13px;
300
+ font-weight: 500;
301
+ color: var(--muted);
302
+ background: none;
303
+ border: none;
304
+ border-radius: 8px;
305
+ padding: 5px 12px;
306
+ cursor: pointer;
307
+ white-space: nowrap;
308
+ transition: color 150ms ease, background 150ms ease;
309
+ line-height: 1.4;
310
+ font-family: inherit;
311
+ display: inline-flex;
312
+ align-items: center;
313
+ gap: 5px;
314
+ }
315
+
316
+ .panel-action:hover {
317
+ color: var(--text);
318
+ background: var(--panel-subtle);
319
+ }
320
+
321
+ .panel-action--primary {
322
+ color: var(--text);
323
+ background: color-mix(in srgb, var(--panel-subtle) 72%, var(--border) 28%);
324
+ }
325
+
326
+ .panel-action--primary:hover {
327
+ background: color-mix(in srgb, var(--panel-subtle) 58%, var(--border) 42%);
328
+ }
329
+
330
+ .panel-action:disabled {
331
+ opacity: 0.35;
332
+ cursor: not-allowed;
333
+ }
334
+
335
+ .panel-action svg { flex-shrink: 0; opacity: 0.7; }
336
+
337
+ .panel-action[title] {
338
+ position: relative;
339
+ }
340
+
341
+ .panel-action[title]::after {
342
+ content: attr(title);
343
+ position: absolute;
344
+ bottom: -28px;
345
+ left: 50%;
346
+ transform: translateX(-50%);
347
+ padding: 3px 8px;
348
+ border-radius: 6px;
349
+ background: var(--panel);
350
+ color: var(--text);
351
+ font-size: 11px;
352
+ font-weight: 400;
353
+ white-space: nowrap;
354
+ pointer-events: none;
355
+ opacity: 0;
356
+ transition: opacity 150ms ease;
357
+ z-index: 10;
358
+ box-shadow: 0 2px 8px rgba(0,0,0,0.25);
359
+ }
360
+
361
+ .panel-action[title]:hover::after {
362
+ opacity: 1;
363
+ }
364
+ .panel-action:hover svg { opacity: 1; }
365
+
366
+ /* ── Footer ── */
367
+
368
+ .panel-footer {
369
+ display: flex;
370
+ align-items: center;
371
+ justify-content: space-between;
372
+ padding: 8px 16px;
373
+ border-top: 1px solid color-mix(in srgb, var(--border) 40%, transparent);
374
+ font-size: 12px;
375
+ color: var(--muted);
376
+ letter-spacing: 0.01em;
377
+ }
378
+
379
+ .footer-comment-btn {
380
+ margin-left: auto;
381
+ }
382
+
383
+ /* ── Selection hint (floating tooltip near selection) ── */
384
+
385
+ .selection-hint {
386
+ position: absolute;
387
+ z-index: 10;
388
+ padding: 4px 10px;
389
+ font-size: 11px;
390
+ color: var(--text-secondary);
391
+ background: var(--panel);
392
+ border: 1px solid color-mix(in srgb, var(--border) 50%, transparent);
393
+ border-radius: 6px;
394
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.12);
395
+ white-space: nowrap;
396
+ pointer-events: none;
397
+ opacity: 0;
398
+ transition: opacity 150ms ease;
399
+ }
400
+
401
+ .selection-hint.visible {
402
+ opacity: 1;
403
+ }
404
+
405
+ /* ── Content areas ── */
406
+
407
+ .panel-content-wrapper {
408
+ max-height: var(--content-height);
409
+ overflow: auto;
410
+ position: relative;
411
+ }
412
+
413
+ .panel-content {
414
+ min-height: 0;
415
+ }
416
+
417
+ .source-content .code-viewer { height: 100%; overflow: auto; }
418
+ .html-content .html-rendered-frame { min-height: 300px; height: var(--content-height); }
419
+ .markdown-content { overflow: auto; padding: 0 4px 0 0; }
420
+
421
+ .markdown-content--workspace {
422
+ padding: 0;
423
+ overflow: visible;
424
+ }
425
+
426
+ .markdown-workspace {
427
+ display: flex;
428
+ background: transparent;
429
+ }
430
+
431
+ .markdown-workspace--edit {
432
+ min-height: min(70vh, 880px);
433
+ }
434
+
435
+ .markdown-workspace--with-toc {
436
+ align-items: stretch;
437
+ }
438
+
439
+ .markdown-workspace-main {
440
+ flex: 1 1 auto;
441
+ min-width: 0;
442
+ padding-left: 18px;
443
+ }
444
+
445
+ .markdown-workspace-main--editor {
446
+ display: flex;
447
+ min-height: min(70vh, 880px);
448
+ }
449
+
450
+ .markdown-editor-shell {
451
+ display: grid;
452
+ gap: 14px;
453
+ width: 100%;
454
+ padding: 20px;
455
+ position: relative;
456
+ }
457
+
458
+ .markdown-editor-mode-toggle {
459
+ position: relative;
460
+ display: inline-grid;
461
+ grid-template-columns: repeat(2, minmax(0, 1fr));
462
+ align-items: center;
463
+ gap: 4px;
464
+ padding: 3px 4.5px 3px 3px;
465
+ border-radius: 999px;
466
+ background: color-mix(in srgb, var(--panel-subtle) 72%, transparent);
467
+ border: 1px solid color-mix(in srgb, var(--border) 45%, transparent);
468
+ }
469
+
470
+ .markdown-editor-mode-toggle-indicator {
471
+ position: absolute;
472
+ top: 3px;
473
+ bottom: 3px;
474
+ left: 3px;
475
+ width: calc(50% - 3.5px);
476
+ border-radius: 999px;
477
+ background: color-mix(in srgb, var(--panel) 96%, transparent);
478
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.08);
479
+ transition: transform 220ms cubic-bezier(0.22, 1, 0.36, 1), box-shadow 220ms ease, background-color 220ms ease;
480
+ pointer-events: none;
481
+ }
482
+
483
+ .markdown-editor-mode-toggle-indicator--markdown {
484
+ transform: translateX(calc(100% + 2.5px));
485
+ }
486
+
487
+ .markdown-editor-mode-option {
488
+ position: relative;
489
+ z-index: 1;
490
+ border: none;
491
+ background: transparent;
492
+ color: var(--text-secondary);
493
+ min-width: 0;
494
+ height: 32px;
495
+ padding: 0 12px;
496
+ border-radius: 999px;
497
+ display: inline-flex;
498
+ align-items: center;
499
+ justify-content: center;
500
+ gap: 6px;
501
+ font: inherit;
502
+ font-size: 12px;
503
+ cursor: pointer;
504
+ transition: color 180ms ease, opacity 180ms ease, transform 220ms cubic-bezier(0.22, 1, 0.36, 1);
505
+ }
506
+
507
+ .markdown-editor-mode-option.is-active {
508
+ color: var(--text);
509
+ transform: translateY(-0.5px);
510
+ }
511
+
512
+ .markdown-editor-mode-option span {
513
+ white-space: nowrap;
514
+ transition: opacity 180ms ease;
515
+ }
516
+
517
+ .markdown-editor-mode-option:not(.is-active) {
518
+ opacity: 0.82;
519
+ }
520
+
521
+ .markdown-editor-mode-option.is-active svg,
522
+ .markdown-editor-mode-option.is-active span {
523
+ opacity: 1;
524
+ }
525
+
526
+ .markdown-editor-pane {
527
+ display: flex;
528
+ flex-direction: column;
529
+ min-height: min(70vh, 840px);
530
+ overflow: visible;
531
+ background: transparent;
532
+ }
533
+
534
+ .markdown-editor-pane--raw {
535
+ max-width: none;
536
+ }
537
+
538
+ .markdown-editor-pane--markdown {
539
+ max-width: none;
540
+ }
541
+
542
+ .markdown-editor-context-menu {
543
+ display: flex;
544
+ flex-wrap: wrap;
545
+ align-items: center;
546
+ gap: 6px;
547
+ padding: 6px;
548
+ background: #171717;
549
+ border: 1px solid color-mix(in srgb, var(--border) 34%, transparent);
550
+ border-radius: 10px;
551
+ position: absolute;
552
+ z-index: 20;
553
+ box-shadow: 0 12px 32px rgba(0, 0, 0, 0.28);
554
+ }
555
+
556
+ .markdown-editor-context-menu[hidden] {
557
+ display: none;
558
+ }
559
+
560
+ .markdown-format-button {
561
+ border: none;
562
+ background: transparent;
563
+ color: rgba(255, 255, 255, 0.9);
564
+ border-radius: 6px;
565
+ width: 32px;
566
+ height: 32px;
567
+ padding: 0;
568
+ font: inherit;
569
+ font-size: 13px;
570
+ cursor: pointer;
571
+ white-space: nowrap;
572
+ display: inline-flex;
573
+ align-items: center;
574
+ justify-content: center;
575
+ }
576
+
577
+ .markdown-format-button:hover {
578
+ background: rgba(255, 255, 255, 0.14);
579
+ }
580
+
581
+ .markdown-format-button--swatch {
582
+ padding: 0;
583
+ }
584
+
585
+ .markdown-format-size {
586
+ display: inline-flex;
587
+ align-items: center;
588
+ justify-content: center;
589
+ height: 32px;
590
+ border-radius: 6px;
591
+ overflow: hidden;
592
+ background: rgba(255, 255, 255, 0.08);
593
+ }
594
+
595
+ .markdown-format-size select {
596
+ height: 32px;
597
+ border: none;
598
+ background: transparent;
599
+ color: rgba(255, 255, 255, 0.9);
600
+ padding: 0 8px;
601
+ font: inherit;
602
+ font-size: 12px;
603
+ outline: none;
604
+ }
605
+
606
+ .markdown-format-sep {
607
+ width: 1px;
608
+ height: 20px;
609
+ background: rgba(255, 255, 255, 0.14);
610
+ }
611
+
612
+ .markdown-link-modal {
613
+ position: fixed;
614
+ inset: 0;
615
+ display: flex;
616
+ align-items: center;
617
+ justify-content: center;
618
+ background: transparent;
619
+ z-index: 30;
620
+ }
621
+
622
+ .markdown-link-modal[hidden] {
623
+ display: none;
624
+ }
625
+
626
+ .markdown-link-modal-card {
627
+ width: min(420px, calc(100% - 32px));
628
+ background: var(--panel);
629
+ border: 1px solid color-mix(in srgb, var(--border) 45%, transparent);
630
+ border-radius: 14px;
631
+ padding: 14px;
632
+ box-shadow: 0 18px 44px rgba(15, 23, 42, 0.22);
633
+ }
634
+
635
+ .markdown-link-mode-tabs {
636
+ display: inline-flex;
637
+ gap: 6px;
638
+ margin-bottom: 12px;
639
+ }
640
+
641
+ .markdown-link-mode-tab {
642
+ border: 1px solid color-mix(in srgb, var(--border) 55%, transparent);
643
+ background: transparent;
644
+ color: var(--text-secondary);
645
+ border-radius: 999px;
646
+ padding: 7px 12px;
647
+ font: inherit;
648
+ font-size: 12px;
649
+ cursor: pointer;
650
+ }
651
+
652
+ .markdown-link-mode-tab.is-active {
653
+ color: var(--text);
654
+ background: color-mix(in srgb, var(--panel-subtle) 72%, var(--border) 28%);
655
+ }
656
+
657
+ .markdown-link-modal-label {
658
+ display: block;
659
+ margin-bottom: 8px;
660
+ font-size: 12px;
661
+ font-weight: 600;
662
+ color: var(--text-secondary);
663
+ }
664
+
665
+ .markdown-link-modal-input {
666
+ width: 100%;
667
+ border: 1px solid color-mix(in srgb, var(--border) 60%, transparent);
668
+ border-radius: 10px;
669
+ padding: 10px 12px;
670
+ font: inherit;
671
+ font-size: 13px;
672
+ color: var(--text);
673
+ background: color-mix(in srgb, var(--panel-subtle) 68%, transparent);
674
+ }
675
+
676
+ .markdown-link-modal-select {
677
+ appearance: none;
678
+ }
679
+
680
+ .markdown-link-results {
681
+ display: flex;
682
+ flex-direction: column;
683
+ gap: 6px;
684
+ max-height: 160px;
685
+ overflow: auto;
686
+ margin: 10px 0 12px;
687
+ }
688
+
689
+ .markdown-link-results-empty {
690
+ padding: 10px 12px;
691
+ font-size: 12px;
692
+ color: var(--text-secondary);
693
+ border: 1px dashed color-mix(in srgb, var(--border) 45%, transparent);
694
+ border-radius: 10px;
695
+ }
696
+
697
+ .markdown-link-result {
698
+ display: flex;
699
+ flex-direction: column;
700
+ align-items: flex-start;
701
+ gap: 4px;
702
+ width: 100%;
703
+ border: 1px solid color-mix(in srgb, var(--border) 45%, transparent);
704
+ background: transparent;
705
+ border-radius: 10px;
706
+ padding: 10px 12px;
707
+ cursor: pointer;
708
+ text-align: left;
709
+ }
710
+
711
+ .markdown-link-result.is-active {
712
+ background: color-mix(in srgb, var(--panel-subtle) 72%, var(--border) 28%);
713
+ }
714
+
715
+ .markdown-link-result-title {
716
+ font-size: 13px;
717
+ color: var(--text);
718
+ }
719
+
720
+ .markdown-link-result-path {
721
+ font-size: 11px;
722
+ color: var(--text-secondary);
723
+ }
724
+
725
+ .markdown-link-modal-actions {
726
+ display: flex;
727
+ justify-content: flex-end;
728
+ gap: 8px;
729
+ margin-top: 12px;
730
+ }
731
+
732
+ .markdown-link-modal-button {
733
+ border: 1px solid color-mix(in srgb, var(--border) 50%, transparent);
734
+ background: transparent;
735
+ color: var(--text-secondary);
736
+ border-radius: 10px;
737
+ padding: 8px 12px;
738
+ font: inherit;
739
+ font-size: 13px;
740
+ cursor: pointer;
741
+ }
742
+
743
+ .markdown-link-modal-button--primary {
744
+ color: var(--text);
745
+ background: color-mix(in srgb, var(--panel-subtle) 72%, var(--border) 28%);
746
+ }
747
+
748
+ .markdown-editor-copy-button {
749
+ display: inline-flex;
750
+ align-items: center;
751
+ gap: 5px;
752
+ background: none;
753
+ border: none;
754
+ border-radius: 8px;
755
+ padding: 5px 12px;
756
+ font-size: 13px;
757
+ font-weight: 500;
758
+ color: var(--muted);
759
+ cursor: pointer;
760
+ white-space: nowrap;
761
+ transition: color 150ms ease, background 150ms ease;
762
+ line-height: 1.4;
763
+ font-family: inherit;
764
+ }
765
+
766
+ .markdown-editor-copy-button span {
767
+ white-space: nowrap;
768
+ }
769
+
770
+ .markdown-editor-copy-button:hover {
771
+ color: var(--text);
772
+ }
773
+
774
+ .markdown-editor-copy-button[data-status="Copied!"] {
775
+ color: var(--text);
776
+ }
777
+
778
+ .markdown-editor-copy-button[data-status="Copy failed"] {
779
+ color: #b91c1c;
780
+ }
781
+
782
+ .panel-save-status {
783
+ padding: 4px 10px;
784
+ border-radius: 999px;
785
+ font-size: 12px;
786
+ font-weight: 400;
787
+ color: var(--muted);
788
+ background: none;
789
+ white-space: nowrap;
790
+ pointer-events: none;
791
+ line-height: 1;
792
+ }
793
+
794
+ .panel-save-status--saving {
795
+ color: var(--text);
796
+ }
797
+
798
+ .panel-save-status--saved {
799
+ color: var(--muted);
800
+ opacity: 0.7;
801
+ }
802
+
803
+ .panel-save-status--pending {
804
+ color: var(--muted);
805
+ }
806
+
807
+ .panel-topbar .markdown-editor-mode-toggle {
808
+ margin-left: 2px;
809
+ }
810
+
811
+ .markdown-toc-shell {
812
+ flex: 0 0 var(--toc-rail-width);
813
+ width: var(--toc-rail-width);
814
+ border-right: 1px solid color-mix(in srgb, var(--border) 18%, transparent);
815
+ background: color-mix(in srgb, var(--panel-subtle) 90%, transparent);
816
+ padding: 18px 14px 18px 16px;
817
+ display: flex;
818
+ flex-direction: column;
819
+ align-self: flex-start;
820
+ position: sticky;
821
+ top: 12px;
822
+ max-height: calc(100vh - 120px);
823
+ overflow: visible;
824
+ transition: flex-basis 0.2s ease, width 0.2s ease, padding 0.2s ease;
825
+ }
826
+
827
+ .markdown-toc-header {
828
+ display: flex;
829
+ align-items: center;
830
+ justify-content: space-between;
831
+ margin-bottom: 12px;
832
+ min-height: 20px;
833
+ }
834
+
835
+ .markdown-toc-title {
836
+ font-size: 11px;
837
+ font-weight: 700;
838
+ letter-spacing: 0.08em;
839
+ text-transform: uppercase;
840
+ color: var(--text-secondary);
841
+ }
842
+
843
+ .document-outline-toggle {
844
+ border: none;
845
+ background: transparent;
846
+ color: var(--text-secondary);
847
+ cursor: pointer;
848
+ width: 24px;
849
+ height: 24px;
850
+ padding: 0;
851
+ border-radius: 6px;
852
+ display: flex;
853
+ align-items: center;
854
+ justify-content: center;
855
+ flex-shrink: 0;
856
+ opacity: 0.5;
857
+ transition: opacity 0.15s, background 0.15s;
858
+ }
859
+ .document-outline-toggle:hover {
860
+ opacity: 1;
861
+ background: color-mix(in srgb, var(--border) 20%, transparent);
862
+ }
863
+
864
+ .markdown-toc-collapsed {
865
+ flex: 0 0 44px !important;
866
+ width: 44px !important;
867
+ padding: 12px 6px !important;
868
+ overflow: hidden;
869
+ background: transparent !important;
870
+ border-right: none !important;
871
+ }
872
+ .markdown-toc-collapsed .markdown-toc-header {
873
+ justify-content: center;
874
+ }
875
+ .markdown-toc-collapsed .markdown-toc-title,
876
+ .markdown-toc-collapsed .markdown-toc-nav {
877
+ display: none;
878
+ }
879
+ .markdown-toc-collapsed .document-outline-toggle {
880
+ width: 30px;
881
+ height: 30px;
882
+ border: 1px solid color-mix(in srgb, var(--border) 50%, transparent);
883
+ border-radius: 8px;
884
+ opacity: 0.7;
885
+ }
886
+
887
+ .markdown-toc-nav {
888
+ display: flex;
889
+ flex-direction: column;
890
+ gap: 4px;
891
+ overflow: auto;
892
+ min-height: 0;
893
+ }
894
+
895
+ .markdown-toc-link {
896
+ border: none;
897
+ background: transparent;
898
+ color: var(--text-secondary);
899
+ text-align: left;
900
+ font: inherit;
901
+ font-size: 13px;
902
+ line-height: 1.35;
903
+ padding: 6px 8px;
904
+ border-radius: 8px;
905
+ cursor: pointer;
906
+ }
907
+
908
+ .markdown-toc-link[data-level="2"] { padding-left: 16px; }
909
+ .markdown-toc-link[data-level="3"] { padding-left: 24px; }
910
+ .markdown-toc-link[data-level="4"] { padding-left: 32px; }
911
+ .markdown-toc-link[data-level="5"] { padding-left: 40px; }
912
+ .markdown-toc-link[data-level="6"] { padding-left: 48px; }
913
+
914
+ .markdown-toc-link:hover {
915
+ color: var(--text);
916
+ background: color-mix(in srgb, var(--panel) 72%, transparent);
917
+ }
918
+
919
+ .markdown-toc-link.is-active {
920
+ color: var(--text);
921
+ background: color-mix(in srgb, var(--panel) 82%, var(--border) 18%);
922
+ }
923
+
924
+ .markdown-link-popover {
925
+ position: absolute;
926
+ z-index: 10;
927
+ display: flex;
928
+ align-items: center;
929
+ gap: 2px;
930
+ background: var(--panel);
931
+ border: 1px solid var(--border);
932
+ border-radius: 8px;
933
+ padding: 4px;
934
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.25);
935
+ }
936
+ .markdown-link-popover[hidden] { display: none; }
937
+ .markdown-link-popover-btn {
938
+ border: none;
939
+ background: transparent;
940
+ color: var(--text-secondary);
941
+ cursor: pointer;
942
+ width: 28px;
943
+ height: 28px;
944
+ padding: 0;
945
+ border-radius: 6px;
946
+ display: flex;
947
+ align-items: center;
948
+ justify-content: center;
949
+ }
950
+ .markdown-link-popover-btn:hover {
951
+ color: var(--text);
952
+ background: color-mix(in srgb, var(--border) 30%, transparent);
953
+ }
954
+
955
+ .markdown-editor-root {
956
+ flex: 1 1 auto;
957
+ min-height: 0;
958
+ padding: 0;
959
+ position: relative;
960
+ }
961
+
962
+ .markdown-editor-surface {
963
+ flex: 1 1 auto;
964
+ min-height: min(70vh, 760px);
965
+ outline: none;
966
+ }
967
+
968
+ .markdown-editor-surface--markdown {
969
+ max-width: none;
970
+ margin: 0;
971
+ padding: 22px 24px 28px;
972
+ }
973
+
974
+ .markdown-editor-textarea {
975
+ width: 100%;
976
+ min-height: min(70vh, 760px);
977
+ border: 0;
978
+ border-radius: 0;
979
+ background: transparent;
980
+ color: var(--text);
981
+ font-family: var(--font-mono, ui-monospace, monospace);
982
+ font-size: 14px;
983
+ line-height: 1.65;
984
+ padding: 18px 20px 24px;
985
+ resize: none;
986
+ overflow: hidden;
987
+ outline: none;
988
+ }
989
+
990
+ .markdown-editor-textarea:focus {
991
+ box-shadow: none;
992
+ }
993
+
994
+ .image-content {
995
+ display: flex;
996
+ align-items: center;
997
+ justify-content: center;
998
+ background: linear-gradient(135deg, color-mix(in oklab, var(--panel) 86%, var(--panel-muted) 14%), var(--panel));
999
+ padding: 16px;
1000
+ }
1001
+
1002
+ .image-preview {
1003
+ width: 100%;
1004
+ max-width: 920px;
1005
+ display: flex;
1006
+ align-items: center;
1007
+ justify-content: center;
1008
+ }
1009
+
1010
+ .image-preview img {
1011
+ max-width: 100%;
1012
+ max-height: var(--content-height);
1013
+ object-fit: contain;
1014
+ border-radius: 8px;
1015
+ border: 1px solid var(--border);
1016
+ background: var(--panel);
1017
+ }
1018
+
1019
+ .notice {
1020
+ background: var(--notice-bg);
1021
+ color: var(--notice-text);
1022
+ padding: 10px 16px;
1023
+ font-size: 13px;
1024
+ }
1025
+
1026
+ /* ── Load-more banners ── */
1027
+
1028
+ .load-lines-banner {
1029
+ display: block;
1030
+ width: 100%;
1031
+ padding: 8px 16px;
1032
+ font-size: 12px;
1033
+ font-family: inherit;
1034
+ color: var(--text-secondary);
1035
+ background: color-mix(in srgb, var(--panel-muted) 40%, transparent);
1036
+ border: none;
1037
+ cursor: pointer;
1038
+ text-align: center;
1039
+ transition: color 150ms ease, background 150ms ease;
1040
+ }
1041
+
1042
+ #load-before {
1043
+ border-bottom: 1px solid color-mix(in srgb, var(--border) 30%, transparent);
1044
+ }
1045
+
1046
+ #load-after {
1047
+ border-top: 1px solid color-mix(in srgb, var(--border) 30%, transparent);
1048
+ }
1049
+
1050
+ .load-lines-banner:hover {
1051
+ color: var(--text-secondary);
1052
+ background: var(--panel-muted);
1053
+ }
1054
+
1055
+ .load-lines-banner:disabled {
1056
+ opacity: 0.5;
1057
+ cursor: not-allowed;
1058
+ }
1059
+
1060
+ /* ── Code viewer ── */
1061
+
1062
+ .code-viewer {
1063
+ background: transparent;
1064
+ color: var(--code-text);
1065
+ overflow-x: auto;
1066
+ padding: 12px 0;
1067
+ margin: 0;
1068
+ font-family: var(--font-mono, ui-monospace, monospace);
1069
+ line-height: 1.5;
1070
+ font-size: 13px;
1071
+ white-space: pre;
1072
+ border: 0;
1073
+ border-radius: 0;
1074
+ }
1075
+
1076
+ .code-table {
1077
+ border-collapse: collapse;
1078
+ border-spacing: 0;
1079
+ width: 100%;
1080
+ }
1081
+
1082
+ .code-line {
1083
+ transition: background 80ms ease;
1084
+ }
1085
+
1086
+ .code-line:hover {
1087
+ background: color-mix(in srgb, var(--panel-muted) 50%, transparent);
1088
+ }
1089
+
1090
+ .code-line.selected {
1091
+ background: color-mix(in srgb, var(--border) 40%, transparent);
1092
+ }
1093
+
1094
+ .code-line.selected:hover {
1095
+ background: color-mix(in srgb, var(--border) 55%, transparent);
1096
+ }
1097
+
1098
+ .line-num {
1099
+ padding: 0 12px 0 18px;
1100
+ text-align: right;
1101
+ color: var(--muted);
1102
+ opacity: 0.5;
1103
+ user-select: none;
1104
+ cursor: pointer;
1105
+ vertical-align: top;
1106
+ white-space: nowrap;
1107
+ font-size: 12px;
1108
+ min-width: 2.5em;
1109
+ transition: opacity 120ms ease;
1110
+ }
1111
+
1112
+ .line-num:hover {
1113
+ opacity: 1;
1114
+ color: var(--text-secondary);
1115
+ }
1116
+
1117
+ .code-line.selected .line-num {
1118
+ opacity: 0.8;
1119
+ }
1120
+
1121
+ .line-content {
1122
+ padding: 0 18px 0 8px;
1123
+ white-space: pre;
1124
+ width: 100%;
1125
+ }
1126
+
1127
+ .code-viewer .hljs {
1128
+ display: block;
1129
+ background: transparent;
1130
+ color: inherit;
1131
+ }
1132
+
1133
+ /* ── Syntax tokens ── */
1134
+
1135
+ .hljs-comment, .hljs-quote { color: var(--hljs-comment); }
1136
+ .hljs-keyword, .hljs-selector-tag, .hljs-name, .hljs-section,
1137
+ .hljs-selector-id, .hljs-selector-class, .hljs-doctag, .hljs-regexp { color: var(--hljs-keyword); }
1138
+ .hljs-string, .hljs-template-tag, .hljs-template-variable, .hljs-variable { color: var(--hljs-string); }
1139
+ .hljs-type, .hljs-params, .hljs-variable.language_ { color: var(--hljs-type); }
1140
+
1141
+ .hljs-number, .hljs-literal, .hljs-symbol, .hljs-bullet { color: var(--hljs-number); }
1142
+ .hljs-attr, .hljs-attribute, .hljs-property { color: var(--hljs-attr); }
1143
+ .hljs-built_in, .hljs-built-in { color: var(--hljs-built-in); }
1144
+ .hljs-tag, .hljs-selector-pseudo, .hljs-selector-attr { color: var(--hljs-tag); }
1145
+ .hljs-title, .hljs-title.class_, .hljs-title.function_,
1146
+ .hljs-meta, .hljs-meta .hljs-keyword, .hljs-subst,
1147
+ .hljs-punctuation, .hljs-operator { color: inherit; }
1148
+
1149
+ /* ── Markdown (typographic, airy, Medium-inspired) ── */
1150
+
1151
+ .markdown h1, .markdown h2, .markdown h3 { letter-spacing: -.015em; }
1152
+ .markdown p { margin: 1em 0; }
1153
+ .markdown ul, .markdown ol { margin: .8em 0; padding-left: 1.4rem; }
1154
+
1155
+ .markdown-doc {
1156
+ max-width: 720px;
1157
+ margin: 0 auto;
1158
+ padding: 32px 28px 36px;
1159
+ line-height: 1.8;
1160
+ color: var(--markdown-text);
1161
+ font-size: 16px;
1162
+ background: transparent;
1163
+ border: 0;
1164
+ border-radius: 0;
1165
+ }
1166
+
1167
+ .markdown-doc h1 {
1168
+ margin: 0 0 24px;
1169
+ font-size: 28px;
1170
+ font-weight: 600;
1171
+ line-height: 1.25;
1172
+ letter-spacing: -0.02em;
1173
+ color: var(--markdown-text);
1174
+ }
1175
+
1176
+ .markdown-doc h2 {
1177
+ margin: 36px 0 16px;
1178
+ font-size: 22px;
1179
+ font-weight: 600;
1180
+ line-height: 1.3;
1181
+ letter-spacing: -0.01em;
1182
+ color: var(--markdown-text);
1183
+ }
1184
+
1185
+ .markdown-doc h3 {
1186
+ margin: 28px 0 12px;
1187
+ font-size: 18px;
1188
+ font-weight: 600;
1189
+ line-height: 1.35;
1190
+ color: var(--markdown-text);
1191
+ }
1192
+
1193
+ .markdown-doc p {
1194
+ font-size: 15px;
1195
+ line-height: 1.75;
1196
+ color: var(--markdown-muted);
1197
+ margin: 0 0 1.2em;
1198
+ }
1199
+
1200
+ .markdown-doc li {
1201
+ font-size: 15px;
1202
+ line-height: 1.7;
1203
+ color: var(--markdown-muted);
1204
+ margin-bottom: 0.3em;
1205
+ }
1206
+
1207
+ .markdown-doc ul, .markdown-doc ol {
1208
+ margin: 8px 0 20px;
1209
+ padding-left: 1.3em;
1210
+ }
1211
+
1212
+ .markdown-doc blockquote {
1213
+ margin: 20px 0;
1214
+ padding: 2px 0 2px 20px;
1215
+ border-left: 3px solid color-mix(in srgb, var(--border) 70%, transparent);
1216
+ color: var(--markdown-muted);
1217
+ font-style: italic;
1218
+ }
1219
+
1220
+ .markdown-doc hr {
1221
+ border: none;
1222
+ border-top: 1px solid color-mix(in srgb, var(--border) 40%, transparent);
1223
+ margin: 32px 0;
1224
+ }
1225
+
1226
+ .markdown-doc img {
1227
+ max-width: 100%;
1228
+ border-radius: 8px;
1229
+ margin: 16px 0;
1230
+ }
1231
+
1232
+ .markdown-doc code:not(.hljs) {
1233
+ font-family: var(--font-mono, ui-monospace, monospace);
1234
+ font-size: .9em;
1235
+ background: var(--inline-code-bg);
1236
+ color: var(--inline-code-text);
1237
+ border: 1px solid var(--inline-code-border);
1238
+ border-radius: 6px;
1239
+ padding: 2px 6px;
1240
+ }
1241
+
1242
+ .markdown-doc .code-viewer {
1243
+ margin: 14px 0;
1244
+ border: 1px solid color-mix(in srgb, var(--border) 50%, transparent);
1245
+ border-radius: 10px;
1246
+ }
1247
+
1248
+ .markdown-doc a {
1249
+ color: inherit;
1250
+ text-decoration: underline;
1251
+ text-decoration-color: color-mix(in srgb, var(--text-secondary) 45%, transparent);
1252
+ text-underline-offset: 0.18em;
1253
+ }
1254
+
1255
+ .markdown-doc a:hover {
1256
+ text-decoration-color: currentcolor;
1257
+ }
1258
+
1259
+ /* ── HTML frame ── */
1260
+
1261
+ .html-rendered-frame {
1262
+ width: 100%;
1263
+ border: 0;
1264
+ border-radius: 0;
1265
+ background: var(--panel);
1266
+ display: block;
1267
+ overflow: hidden;
1268
+ }
1269
+
1270
+ /* ── Responsive ── */
1271
+
1272
+ @media (max-width: 720px) {
1273
+ .markdown-workspace {
1274
+ flex-direction: column;
1275
+ }
1276
+ .markdown-workspace--edit {
1277
+ min-height: auto;
1278
+ }
1279
+ .markdown-workspace--with-toc {
1280
+ background: transparent;
1281
+ }
1282
+ .markdown-editor-shell {
1283
+ padding: 12px;
1284
+ }
1285
+ .markdown-toc-shell {
1286
+ position: static;
1287
+ top: auto;
1288
+ max-height: none;
1289
+ overflow: visible;
1290
+ align-self: stretch;
1291
+ width: 100% !important;
1292
+ flex-basis: auto !important;
1293
+ border-right: none;
1294
+ border-bottom: 1px solid color-mix(in srgb, var(--border) 45%, transparent);
1295
+ }
1296
+ .markdown-toc-collapsed .markdown-toc-title,
1297
+ .markdown-toc-collapsed .markdown-toc-nav {
1298
+ display: flex;
1299
+ }
1300
+ .document-outline-toggle {
1301
+ display: none;
1302
+ }
1303
+ .markdown-workspace-main {
1304
+ padding-left: 0;
1305
+ }
1306
+ .markdown-toc-nav {
1307
+ max-height: 40vh;
1308
+ }
1309
+ .markdown-editor-root {
1310
+ padding: 0;
1311
+ }
1312
+ .markdown-editor-textarea {
1313
+ min-height: 58vh;
1314
+ padding: 14px;
1315
+ }
1316
+ .markdown-editor-surface--markdown {
1317
+ padding: 16px;
1318
+ }
1319
+ .markdown-doc { padding: 16px; }
1320
+ .markdown-doc h1 { font-size: 27px; }
1321
+ .markdown-doc h2 { font-size: 22px; }
1322
+ .markdown-doc h3 { font-size: 18px; }
1323
+ .markdown-doc p, .markdown-doc li { font-size: 15px; }
1324
+ }
1325
+
1326
+ /* ── Directory tree ── */
1327
+
1328
+ .directory-content {
1329
+ padding: 12px 16px;
1330
+ font-family: var(--font-mono, ui-monospace, monospace);
1331
+ font-size: 13px;
1332
+ line-height: 1.6;
1333
+ }
1334
+
1335
+ .dir-tree {
1336
+ display: flex;
1337
+ flex-direction: column;
1338
+ }
1339
+
1340
+ .dir-entry, .dir-entry-group {
1341
+ display: flex;
1342
+ flex-direction: column;
1343
+ }
1344
+
1345
+ .dir-row {
1346
+ display: flex;
1347
+ align-items: center;
1348
+ gap: 4px;
1349
+ padding: 2px 6px;
1350
+ border-radius: 4px;
1351
+ cursor: pointer;
1352
+ user-select: none;
1353
+ }
1354
+
1355
+ .dir-row:hover {
1356
+ background: color-mix(in srgb, var(--text) 8%, transparent);
1357
+ }
1358
+
1359
+ .dir-row-file:active {
1360
+ background: color-mix(in srgb, var(--text) 14%, transparent);
1361
+ }
1362
+
1363
+ .dir-row.dir-loading {
1364
+ opacity: 0.5;
1365
+ pointer-events: none;
1366
+ }
1367
+
1368
+ .dir-children {
1369
+ padding-left: 20px;
1370
+ border-left: 1px solid color-mix(in srgb, var(--border) 40%, transparent);
1371
+ margin-left: 11px;
1372
+ }
1373
+
1374
+ .dir-children.dir-collapsed {
1375
+ display: none;
1376
+ }
1377
+
1378
+ .dir-chevron {
1379
+ display: inline-block;
1380
+ width: 14px;
1381
+ text-align: center;
1382
+ font-size: 10px;
1383
+ color: var(--secondary);
1384
+ flex-shrink: 0;
1385
+ transition: transform 0.15s ease;
1386
+ }
1387
+
1388
+ .dir-icon, .file-icon {
1389
+ font-size: 14px;
1390
+ flex-shrink: 0;
1391
+ }
1392
+
1393
+ .dir-name {
1394
+ font-weight: 600;
1395
+ color: var(--text);
1396
+ }
1397
+
1398
+ .dir-name-denied {
1399
+ color: var(--secondary);
1400
+ text-decoration: line-through;
1401
+ }
1402
+
1403
+ .file-name {
1404
+ color: var(--secondary);
1405
+ }
1406
+
1407
+ .dir-row-file:hover .file-name {
1408
+ color: var(--text);
1409
+ }
1410
+
1411
+ .dir-empty {
1412
+ color: var(--secondary);
1413
+ font-style: italic;
1414
+ padding: 4px 6px;
1415
+ }
1416
+
1417
+ .dir-row-warning {
1418
+ cursor: default;
1419
+ opacity: 0.7;
1420
+ font-style: italic;
1421
+ font-size: 12px;
1422
+ }
1423
+
1424
+ .dir-row-warning:hover {
1425
+ background: none;
1426
+ }
1427
+
1428
+ .dir-load-more {
1429
+ cursor: pointer;
1430
+ }
1431
+
1432
+ .dir-load-more:hover {
1433
+ background: color-mix(in srgb, var(--text) 8%, transparent) !important;
1434
+ opacity: 1;
1435
+ }
1436
+
1437
+ .dir-load-more:hover .dir-warning-text {
1438
+ text-decoration: underline;
1439
+ }
1440
+
1441
+ .dir-warning-text {
1442
+ color: var(--secondary);
1443
+ }
1444
+
1445
+ .dir-back-btn {
1446
+ flex-shrink: 0;
1447
+ margin-right: 4px;
1448
+ font-weight: 600;
1449
+ }
1450
+
1451
+ .dir-open-btn {
1452
+ margin-left: 6px;
1453
+ padding: 0 4px;
1454
+ border: none;
1455
+ background: none;
1456
+ cursor: pointer;
1457
+ font-size: 13px;
1458
+ opacity: 0;
1459
+ flex-shrink: 0;
1460
+ border-radius: 3px;
1461
+ pointer-events: none;
1462
+ transition: opacity 0.1s ease;
1463
+ }
1464
+
1465
+ .dir-open-btn:hover {
1466
+ background: color-mix(in srgb, var(--text) 10%, transparent);
1467
+ }
1468
+
1469
+ .dir-row-folder:hover .dir-open-btn {
1470
+ opacity: 0.6;
1471
+ pointer-events: auto;
1472
+ }
1473
+
1474
+ .dir-row-folder:hover .dir-open-btn:hover {
1475
+ opacity: 1;
1476
+ }
1477
+
1478
+ /* === File-changed-on-disk conflict modal === */
1479
+
1480
+ .md-conflict-modal[hidden] {
1481
+ display: none;
1482
+ }
1483
+
1484
+ .md-conflict-modal {
1485
+ position: fixed;
1486
+ inset: 0;
1487
+ background: rgba(0, 0, 0, 0.42);
1488
+ display: grid;
1489
+ place-items: center;
1490
+ z-index: 50;
1491
+ padding: 16px;
1492
+ box-sizing: border-box;
1493
+ }
1494
+
1495
+ .md-conflict-card {
1496
+ width: min(480px, 100%);
1497
+ max-height: min(80vh, 560px);
1498
+ background: var(--panel);
1499
+ color: var(--text);
1500
+ border: 1px solid var(--border);
1501
+ border-radius: 10px;
1502
+ box-shadow: 0 12px 32px rgba(0, 0, 0, 0.28);
1503
+ padding: 0;
1504
+ display: flex;
1505
+ flex-direction: column;
1506
+ overflow: hidden;
1507
+ }
1508
+
1509
+ .md-conflict-header {
1510
+ display: flex;
1511
+ align-items: center;
1512
+ justify-content: space-between;
1513
+ padding: 14px 16px 10px;
1514
+ border-bottom: 1px solid color-mix(in srgb, var(--border) 50%, transparent);
1515
+ }
1516
+
1517
+ .md-conflict-header h3 {
1518
+ margin: 0;
1519
+ font-size: 14px;
1520
+ font-weight: 600;
1521
+ color: var(--text);
1522
+ }
1523
+
1524
+ .md-conflict-close {
1525
+ display: inline-flex;
1526
+ align-items: center;
1527
+ justify-content: center;
1528
+ width: 24px;
1529
+ height: 24px;
1530
+ padding: 0;
1531
+ background: transparent;
1532
+ border: none;
1533
+ border-radius: 4px;
1534
+ color: var(--text-secondary);
1535
+ cursor: pointer;
1536
+ transition: background-color 120ms ease, color 120ms ease;
1537
+ }
1538
+
1539
+ .md-conflict-close:hover {
1540
+ background: var(--panel-subtle);
1541
+ color: var(--text);
1542
+ }
1543
+
1544
+ .md-conflict-close svg {
1545
+ width: 16px;
1546
+ height: 16px;
1547
+ }
1548
+
1549
+ .md-conflict-body {
1550
+ padding: 14px 16px;
1551
+ overflow-y: auto;
1552
+ font-size: 13px;
1553
+ line-height: 1.5;
1554
+ color: var(--text);
1555
+ }
1556
+
1557
+ .md-conflict-body p {
1558
+ margin: 0 0 10px;
1559
+ }
1560
+
1561
+ .md-conflict-body p:last-of-type {
1562
+ margin-bottom: 8px;
1563
+ }
1564
+
1565
+ .md-conflict-body ul {
1566
+ margin: 0 0 4px;
1567
+ padding-left: 20px;
1568
+ color: var(--text-secondary);
1569
+ }
1570
+
1571
+ .md-conflict-body li {
1572
+ margin-bottom: 4px;
1573
+ }
1574
+
1575
+ .md-conflict-filename {
1576
+ font-family: var(--font-mono, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);
1577
+ font-weight: 600;
1578
+ word-break: break-all;
1579
+ }
1580
+
1581
+ .md-conflict-footer {
1582
+ display: flex;
1583
+ justify-content: flex-end;
1584
+ gap: 8px;
1585
+ padding: 12px 16px 14px;
1586
+ border-top: 1px solid color-mix(in srgb, var(--border) 50%, transparent);
1587
+ background: color-mix(in srgb, var(--panel-subtle) 50%, transparent);
1588
+ }
1589
+
1590
+ .md-conflict-btn {
1591
+ appearance: none;
1592
+ font: inherit;
1593
+ font-size: 13px;
1594
+ font-weight: 500;
1595
+ padding: 7px 14px;
1596
+ border-radius: 6px;
1597
+ cursor: pointer;
1598
+ border: 1px solid var(--border);
1599
+ background: var(--panel);
1600
+ color: var(--text);
1601
+ transition: background-color 120ms ease, border-color 120ms ease, color 120ms ease;
1602
+ }
1603
+
1604
+ .md-conflict-btn:hover {
1605
+ background: var(--panel-subtle);
1606
+ }
1607
+
1608
+ .md-conflict-btn:focus-visible {
1609
+ outline: 2px solid var(--accent, #4a8cff);
1610
+ outline-offset: 2px;
1611
+ }
1612
+
1613
+ .md-conflict-btn--secondary {
1614
+ color: var(--text-secondary);
1615
+ }
1616
+
1617
+ .md-conflict-btn--secondary:hover {
1618
+ color: var(--text);
1619
+ border-color: color-mix(in srgb, var(--border) 80%, var(--text) 20%);
1620
+ }
1621
+
1622
+ .md-conflict-btn--primary {
1623
+ background: var(--accent, #4a8cff);
1624
+ color: #fff;
1625
+ border-color: color-mix(in srgb, var(--accent, #4a8cff) 85%, black 15%);
1626
+ }
1627
+
1628
+ .md-conflict-btn--primary:hover {
1629
+ background: color-mix(in srgb, var(--accent, #4a8cff) 88%, black 12%);
1630
+ }
1631
+