vplan 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,789 @@
1
+ :root {
2
+ --vp-bg: #fbfbfa;
3
+ --vp-surface: #f3f3f1;
4
+ --vp-surface-2: #ececea;
5
+ --vp-text: #1a1a1c;
6
+ --vp-muted: #5f5f66;
7
+ --vp-faint: #8a8a90;
8
+ --vp-border: #e4e4e1;
9
+ --vp-border-strong: #d6d6d2;
10
+ --vp-accent: #1a1a1c;
11
+ --vp-on-accent: #fbfbfa;
12
+ --vp-done: #15803d;
13
+ --vp-modify: #b45309;
14
+ --vp-risk: #b91c1c;
15
+ --vp-move: #0e7490;
16
+ --vp-risk-tint: #fbf1f1;
17
+ --vp-risk-border: #eed3d3;
18
+ --vp-warn: #92660b;
19
+ --vp-warn-tint: #fbf4e0;
20
+ --vp-warn-border: #ecdcb4;
21
+ --vp-question: #2f6fed;
22
+ --vp-question-tint: #eef3fe;
23
+ --vp-question-border: #d4e0fb;
24
+ --vp-note: #7c3aed;
25
+ --vp-note-tint: #f6f2fe;
26
+ --vp-note-border: #e4d8fb;
27
+ --vp-decision: #0d9488;
28
+ --vp-decision-tint: #ecfbf7;
29
+ --vp-decision-border: #c2ebe2;
30
+ --vp-ease: cubic-bezier(0.25, 1, 0.5, 1);
31
+ --vp-font: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
32
+ --vp-mono: "SF Mono", ui-monospace, "JetBrains Mono", Menlo, Consolas, monospace;
33
+ }
34
+
35
+ @media (prefers-color-scheme: dark) {
36
+ :root {
37
+ --vp-bg: #161618;
38
+ --vp-surface: #1e1e21;
39
+ --vp-surface-2: #26262a;
40
+ --vp-text: #e9e9e6;
41
+ --vp-muted: #a1a1a8;
42
+ --vp-faint: #74747b;
43
+ --vp-border: #2b2b2f;
44
+ --vp-border-strong: #3a3a3f;
45
+ --vp-accent: #e9e9e6;
46
+ --vp-on-accent: #161618;
47
+ --vp-done: #45c97a;
48
+ --vp-modify: #d99a3a;
49
+ --vp-risk: #ef8f8f;
50
+ --vp-move: #38b6cf;
51
+ --vp-risk-tint: #241a1c;
52
+ --vp-risk-border: #43292c;
53
+ --vp-warn: #e3b54f;
54
+ --vp-warn-tint: #2a2310;
55
+ --vp-warn-border: #463a1b;
56
+ --vp-question: #7aa2ff;
57
+ --vp-question-tint: #161d2e;
58
+ --vp-question-border: #2b3a5e;
59
+ --vp-note: #b794f6;
60
+ --vp-note-tint: #1d1830;
61
+ --vp-note-border: #362a52;
62
+ --vp-decision: #2dd4bf;
63
+ --vp-decision-tint: #0e2421;
64
+ --vp-decision-border: #1d433c;
65
+ }
66
+ }
67
+
68
+ * {
69
+ box-sizing: border-box;
70
+ }
71
+
72
+ body {
73
+ margin: 0;
74
+ background: var(--vp-bg);
75
+ color: var(--vp-text);
76
+ font-family: var(--vp-font);
77
+ font-size: 16px;
78
+ line-height: 1.6;
79
+ -webkit-font-smoothing: antialiased;
80
+ }
81
+
82
+ .vp-shell {
83
+ max-width: 800px;
84
+ margin: 0 auto;
85
+ min-height: 100dvh;
86
+ padding: 3rem 1.5rem 6rem;
87
+ }
88
+
89
+ .vp-main {
90
+ min-width: 0;
91
+ counter-reset: vp-phase;
92
+ }
93
+
94
+ .vp-main > h1:first-child {
95
+ font-size: 1.9rem;
96
+ font-weight: 650;
97
+ letter-spacing: -0.025em;
98
+ text-wrap: balance;
99
+ margin: 0 0 1.75rem;
100
+ padding-bottom: 1rem;
101
+ border-bottom: 1px solid var(--vp-border);
102
+ }
103
+
104
+ .vp-main h2 {
105
+ font-size: 1.15rem;
106
+ font-weight: 600;
107
+ letter-spacing: -0.012em;
108
+ text-wrap: balance;
109
+ margin: 2.25rem 0 0.5rem;
110
+ }
111
+
112
+ .vp-main h3 {
113
+ text-wrap: balance;
114
+ }
115
+
116
+ .vp-main p {
117
+ text-wrap: pretty;
118
+ }
119
+
120
+ .vp-main a {
121
+ color: var(--vp-accent);
122
+ text-decoration-color: var(--vp-border-strong);
123
+ text-underline-offset: 2px;
124
+ }
125
+
126
+ :focus-visible {
127
+ outline: 2px solid var(--vp-accent);
128
+ outline-offset: 2px;
129
+ border-radius: 3px;
130
+ }
131
+
132
+ /* Inline code only; fenced code blocks are owned by Expressive Code. */
133
+ .vp-main :not(pre) > code {
134
+ font-family: var(--vp-mono);
135
+ font-size: 0.84em;
136
+ background: var(--vp-surface);
137
+ border: 1px solid var(--vp-border);
138
+ padding: 0.08em 0.34em;
139
+ border-radius: 5px;
140
+ }
141
+
142
+ /* Expressive Code frame fits the page rhythm */
143
+ .vp-main .expressive-code {
144
+ margin: 1.25rem 0;
145
+ }
146
+
147
+ /* Flatten Expressive Code's editor-tab title into a plain filename header bar.
148
+ EC injects its own <style> in the body, so the .vp-main prefix wins the cascade. */
149
+ .vp-main .expressive-code .frame.has-title .header {
150
+ display: flex;
151
+ align-items: center;
152
+ border-bottom: 1px solid var(--vp-border);
153
+ }
154
+
155
+ .vp-main .expressive-code .frame.has-title .header .title {
156
+ position: static;
157
+ margin: 0;
158
+ padding: 0.5rem 1rem;
159
+ border: none;
160
+ border-radius: 0;
161
+ background: transparent;
162
+ color: var(--vp-muted);
163
+ font-size: 0.74rem;
164
+ font-weight: 500;
165
+ letter-spacing: 0.01em;
166
+ }
167
+
168
+ .vp-main .expressive-code .frame.has-title .header .title::before,
169
+ .vp-main .expressive-code .frame.has-title .header .title::after {
170
+ display: none;
171
+ }
172
+
173
+ /* Phase: a numbered vertical-timeline step */
174
+ .vp-phase {
175
+ counter-increment: vp-phase;
176
+ display: grid;
177
+ grid-template-columns: 36px 1fr;
178
+ column-gap: 1.15rem;
179
+ padding-bottom: 1.85rem;
180
+ }
181
+
182
+ .vp-phase__rail {
183
+ position: relative;
184
+ display: flex;
185
+ justify-content: center;
186
+ }
187
+
188
+ .vp-phase__node {
189
+ position: relative;
190
+ z-index: 1;
191
+ flex: 0 0 auto;
192
+ width: 34px;
193
+ height: 34px;
194
+ border-radius: 999px;
195
+ border: 1.5px solid var(--vp-border-strong);
196
+ background: var(--vp-bg);
197
+ color: var(--vp-muted);
198
+ display: flex;
199
+ align-items: center;
200
+ justify-content: center;
201
+ font-weight: 650;
202
+ font-size: 0.92rem;
203
+ font-variant-numeric: tabular-nums;
204
+ }
205
+
206
+ .vp-phase__node::before {
207
+ content: counter(vp-phase);
208
+ }
209
+
210
+ /* connector line from this node down to the next step */
211
+ .vp-phase:not(:last-of-type) .vp-phase__rail::after {
212
+ content: "";
213
+ position: absolute;
214
+ top: 34px;
215
+ bottom: -1.85rem;
216
+ left: 50%;
217
+ transform: translateX(-50%);
218
+ width: 1.5px;
219
+ background: var(--vp-border);
220
+ }
221
+
222
+ .vp-phase[data-status="active"] .vp-phase__node {
223
+ border-color: var(--vp-accent);
224
+ background: var(--vp-accent);
225
+ color: var(--vp-on-accent);
226
+ }
227
+
228
+ .vp-phase[data-status="done"] .vp-phase__node {
229
+ border-color: var(--vp-done);
230
+ background: var(--vp-done);
231
+ color: #ffffff;
232
+ }
233
+
234
+ .vp-phase__content {
235
+ min-width: 0;
236
+ padding-top: 0.15rem;
237
+ }
238
+
239
+ .vp-phase__head {
240
+ display: flex;
241
+ align-items: center;
242
+ gap: 0.65rem;
243
+ min-height: 34px;
244
+ }
245
+
246
+ .vp-phase__title {
247
+ margin: 0;
248
+ font-weight: 600;
249
+ font-size: 1.12rem;
250
+ letter-spacing: -0.012em;
251
+ }
252
+
253
+ .vp-phase__badge {
254
+ font-size: 0.66rem;
255
+ font-weight: 600;
256
+ text-transform: uppercase;
257
+ letter-spacing: 0.04em;
258
+ padding: 0.12rem 0.5rem;
259
+ border-radius: 6px;
260
+ border: 1px solid var(--vp-border);
261
+ color: var(--vp-muted);
262
+ }
263
+
264
+ .vp-phase[data-status="active"] .vp-phase__badge {
265
+ color: var(--vp-text);
266
+ border-color: var(--vp-border-strong);
267
+ }
268
+
269
+ .vp-phase[data-status="done"] .vp-phase__badge {
270
+ color: var(--vp-done);
271
+ border-color: var(--vp-done);
272
+ }
273
+
274
+ .vp-phase__body > :first-child {
275
+ margin-top: 0.4rem;
276
+ }
277
+
278
+ /* Callout: flat tint + full border, never a side stripe */
279
+ .vp-callout {
280
+ border: 1px solid var(--vp-border);
281
+ border-radius: 10px;
282
+ padding: 0.85rem 1.1rem;
283
+ margin: 1.15rem 0;
284
+ background: var(--vp-surface);
285
+ }
286
+
287
+ .vp-callout[data-type="note"] {
288
+ background: var(--vp-note-tint);
289
+ border-color: var(--vp-note-border);
290
+ }
291
+
292
+ .vp-callout[data-type="decision"] {
293
+ background: var(--vp-decision-tint);
294
+ border-color: var(--vp-decision-border);
295
+ }
296
+
297
+ .vp-callout[data-type="risk"] {
298
+ background: var(--vp-risk-tint);
299
+ border-color: var(--vp-risk-border);
300
+ }
301
+
302
+ .vp-callout[data-type="warn"] {
303
+ background: var(--vp-warn-tint);
304
+ border-color: var(--vp-warn-border);
305
+ }
306
+
307
+ .vp-callout__label {
308
+ display: flex;
309
+ align-items: center;
310
+ gap: 0.35rem;
311
+ font-size: 0.68rem;
312
+ font-weight: 600;
313
+ text-transform: uppercase;
314
+ letter-spacing: 0.05em;
315
+ color: var(--vp-muted);
316
+ margin-bottom: 0.3rem;
317
+ }
318
+
319
+ .vp-callout[data-type="note"] .vp-callout__label {
320
+ color: var(--vp-note);
321
+ }
322
+
323
+ .vp-callout[data-type="decision"] .vp-callout__label {
324
+ color: var(--vp-decision);
325
+ }
326
+
327
+ .vp-callout[data-type="risk"] .vp-callout__label {
328
+ color: var(--vp-risk);
329
+ }
330
+
331
+ .vp-callout[data-type="warn"] .vp-callout__label {
332
+ color: var(--vp-warn);
333
+ }
334
+
335
+ .vp-callout__body > :first-child {
336
+ margin-top: 0;
337
+ }
338
+ .vp-callout__body > :last-child {
339
+ margin-bottom: 0;
340
+ }
341
+
342
+ /* FileTree */
343
+ .vp-filetree {
344
+ list-style: none;
345
+ margin: 1.15rem 0;
346
+ padding: 0.4rem 0.5rem;
347
+ border: 1px solid var(--vp-border);
348
+ border-radius: 10px;
349
+ background: var(--vp-surface);
350
+ font-family: var(--vp-mono);
351
+ font-size: 0.84rem;
352
+ }
353
+
354
+ .vp-filetree__row {
355
+ display: flex;
356
+ align-items: center;
357
+ gap: 0.65rem;
358
+ padding: 0.22rem 0.45rem;
359
+ }
360
+
361
+ .vp-filetree__marker {
362
+ display: inline-flex;
363
+ align-items: center;
364
+ flex: 0 0 auto;
365
+ }
366
+
367
+ .vp-filetree__folder {
368
+ color: var(--vp-faint);
369
+ flex: 0 0 auto;
370
+ }
371
+
372
+ .vp-filetree__row[data-change="add"] .vp-filetree__marker {
373
+ color: var(--vp-done);
374
+ }
375
+ .vp-filetree__row[data-change="modify"] .vp-filetree__marker {
376
+ color: var(--vp-modify);
377
+ }
378
+ .vp-filetree__row[data-change="delete"] .vp-filetree__marker {
379
+ color: var(--vp-risk);
380
+ }
381
+ .vp-filetree__row[data-change="move"] .vp-filetree__marker {
382
+ color: var(--vp-move);
383
+ }
384
+
385
+ .vp-filetree__row--dir {
386
+ padding-top: 0.3rem;
387
+ }
388
+
389
+ .vp-filetree__dir {
390
+ color: var(--vp-muted);
391
+ font-weight: 600;
392
+ }
393
+
394
+ .vp-filetree__name {
395
+ color: var(--vp-text);
396
+ }
397
+
398
+ .vp-filetree__change {
399
+ margin-left: auto;
400
+ font-size: 0.68rem;
401
+ color: var(--vp-faint);
402
+ text-transform: uppercase;
403
+ letter-spacing: 0.05em;
404
+ }
405
+
406
+ /* Chart */
407
+ .vp-chart {
408
+ margin: 1.25rem 0;
409
+ padding: 1rem 1rem 0.5rem;
410
+ border: 1px solid var(--vp-border);
411
+ border-radius: 10px;
412
+ background: var(--vp-surface);
413
+ }
414
+
415
+ .vp-chart__title {
416
+ font-weight: 600;
417
+ margin-bottom: 0.85rem;
418
+ font-size: 0.9rem;
419
+ }
420
+
421
+ .vp-chart__legend {
422
+ list-style: none;
423
+ margin: 0.5rem 0 0;
424
+ padding: 0;
425
+ display: flex;
426
+ flex-wrap: wrap;
427
+ justify-content: center;
428
+ gap: 0.35rem 1.1rem;
429
+ font-size: 0.82rem;
430
+ }
431
+
432
+ .vp-chart__legend-item {
433
+ display: flex;
434
+ align-items: center;
435
+ gap: 0.4rem;
436
+ }
437
+
438
+ .vp-chart__swatch {
439
+ width: 10px;
440
+ height: 10px;
441
+ border-radius: 3px;
442
+ flex: 0 0 auto;
443
+ }
444
+
445
+ .vp-chart__legend-value {
446
+ color: var(--vp-muted);
447
+ font-variant-numeric: tabular-nums;
448
+ }
449
+
450
+ /* Questions: open questions for the reader. Neutral card like the other list cards,
451
+ with blue kept only as the accent on the icon, title, and numbers. */
452
+ .vp-questions {
453
+ border: 1px solid var(--vp-border);
454
+ background: var(--vp-surface);
455
+ border-radius: 10px;
456
+ padding: 0.85rem 1.1rem;
457
+ margin: 1.4rem 0;
458
+ }
459
+
460
+ .vp-questions__head {
461
+ display: flex;
462
+ align-items: center;
463
+ gap: 0.6rem;
464
+ margin-bottom: 0.6rem;
465
+ }
466
+
467
+ /* The header icon shares a fixed-width column with the item numbers below, so the
468
+ title and every question text line up on the same left edge. */
469
+ .vp-questions__icon {
470
+ flex: 0 0 auto;
471
+ width: 1.15rem;
472
+ display: inline-flex;
473
+ align-items: center;
474
+ justify-content: center;
475
+ color: var(--vp-question);
476
+ }
477
+
478
+ .vp-questions__title {
479
+ font-weight: 600;
480
+ font-size: 0.9rem;
481
+ color: var(--vp-text);
482
+ }
483
+
484
+ .vp-questions__list {
485
+ list-style: none;
486
+ margin: 0;
487
+ padding: 0;
488
+ display: flex;
489
+ flex-direction: column;
490
+ gap: 0.5rem;
491
+ }
492
+
493
+ .vp-questions__item {
494
+ display: flex;
495
+ align-items: baseline;
496
+ gap: 0.6rem;
497
+ }
498
+
499
+ .vp-questions__num {
500
+ flex: 0 0 auto;
501
+ width: 1.15rem;
502
+ text-align: center;
503
+ color: var(--vp-question);
504
+ font-weight: 700;
505
+ font-size: 0.85rem;
506
+ font-variant-numeric: tabular-nums;
507
+ }
508
+
509
+ .vp-questions__text {
510
+ color: var(--vp-text);
511
+ }
512
+
513
+ /* Compare */
514
+ .vp-compare {
515
+ display: grid;
516
+ grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
517
+ gap: 0.85rem;
518
+ margin: 1.25rem 0;
519
+ }
520
+
521
+ .vp-compare__card {
522
+ border: 1px solid var(--vp-border);
523
+ border-radius: 10px;
524
+ padding: 1rem;
525
+ background: var(--vp-surface);
526
+ }
527
+
528
+ .vp-compare__card[data-pick="true"] {
529
+ border-color: var(--vp-border-strong);
530
+ background: var(--vp-bg);
531
+ }
532
+
533
+ .vp-compare__name {
534
+ font-weight: 600;
535
+ display: flex;
536
+ align-items: center;
537
+ gap: 0.5rem;
538
+ margin-bottom: 0.7rem;
539
+ }
540
+
541
+ .vp-compare__pick {
542
+ font-size: 0.62rem;
543
+ font-weight: 600;
544
+ text-transform: uppercase;
545
+ letter-spacing: 0.05em;
546
+ color: var(--vp-muted);
547
+ background: var(--vp-surface-2);
548
+ border: 1px solid var(--vp-border);
549
+ border-radius: 5px;
550
+ padding: 0.1rem 0.42rem;
551
+ }
552
+
553
+ .vp-compare__pros,
554
+ .vp-compare__cons {
555
+ list-style: none;
556
+ margin: 0.3rem 0;
557
+ padding: 0;
558
+ font-size: 0.9rem;
559
+ }
560
+
561
+ .vp-compare__pros li,
562
+ .vp-compare__cons li {
563
+ display: flex;
564
+ align-items: flex-start;
565
+ gap: 0.45rem;
566
+ color: var(--vp-text);
567
+ margin: 0.25rem 0;
568
+ }
569
+
570
+ .vp-compare__pro {
571
+ flex: 0 0 auto;
572
+ margin-top: 0.12rem;
573
+ color: var(--vp-done);
574
+ }
575
+
576
+ .vp-compare__con {
577
+ flex: 0 0 auto;
578
+ margin-top: 0.12rem;
579
+ color: var(--vp-risk);
580
+ }
581
+
582
+ /* Checklist */
583
+ .vp-checklist {
584
+ margin: 1.25rem 0;
585
+ padding: 0.85rem 1.1rem;
586
+ border: 1px solid var(--vp-border);
587
+ border-radius: 10px;
588
+ background: var(--vp-surface);
589
+ }
590
+
591
+ .vp-checklist__title {
592
+ font-size: 0.68rem;
593
+ font-weight: 600;
594
+ text-transform: uppercase;
595
+ letter-spacing: 0.05em;
596
+ color: var(--vp-muted);
597
+ margin-bottom: 0.55rem;
598
+ }
599
+
600
+ .vp-checklist__list {
601
+ list-style: none;
602
+ margin: 0;
603
+ padding: 0;
604
+ display: flex;
605
+ flex-direction: column;
606
+ gap: 0.45rem;
607
+ }
608
+
609
+ .vp-checklist__item {
610
+ display: flex;
611
+ align-items: flex-start;
612
+ gap: 0.55rem;
613
+ }
614
+
615
+ /* Center the 17px icon within the first text line (1lh = the line height). */
616
+ .vp-checklist__check,
617
+ .vp-checklist__box {
618
+ flex: 0 0 auto;
619
+ margin-top: calc((1lh - 17px) / 2);
620
+ }
621
+
622
+ .vp-checklist__check {
623
+ color: var(--vp-done);
624
+ }
625
+
626
+ .vp-checklist__box {
627
+ color: var(--vp-faint);
628
+ }
629
+
630
+ .vp-checklist__text {
631
+ color: var(--vp-text);
632
+ }
633
+
634
+ .vp-checklist__item[data-done="true"] .vp-checklist__text {
635
+ color: var(--vp-muted);
636
+ text-decoration: line-through;
637
+ }
638
+
639
+ /* Mermaid */
640
+ .vp-mermaid {
641
+ margin: 1.4rem 0;
642
+ text-align: center;
643
+ }
644
+
645
+ /* Scale wide diagrams to the column instead of clipping past it. */
646
+ .vp-mermaid svg {
647
+ max-width: 100%;
648
+ height: auto;
649
+ }
650
+
651
+ .vp-mermaid--error {
652
+ text-align: left;
653
+ color: var(--vp-risk);
654
+ white-space: pre-wrap;
655
+ }
656
+
657
+ /* Chart canvas sizing (ResponsiveContainer fills 100% of these) */
658
+ .vp-chart__canvas {
659
+ height: 250px;
660
+ }
661
+ .vp-chart__canvas[data-type="pie"] {
662
+ height: 230px;
663
+ }
664
+
665
+ /* Fullscreen affordance for code blocks, diagrams, and charts */
666
+ .vp-expandable {
667
+ position: relative;
668
+ }
669
+
670
+ /* Scoped under .vp-expandable so it outranks Expressive Code's `.expressive-code
671
+ button` reset (specificity 0,1,1) on the code-block button. */
672
+ .vp-expandable > .vp-expand-btn {
673
+ position: absolute;
674
+ top: 0.5rem;
675
+ right: 0.5rem;
676
+ z-index: 3;
677
+ display: inline-flex;
678
+ align-items: center;
679
+ justify-content: center;
680
+ width: 28px;
681
+ height: 28px;
682
+ padding: 0;
683
+ border: 1px solid var(--vp-border);
684
+ border-radius: 7px;
685
+ background: var(--vp-bg);
686
+ color: var(--vp-muted);
687
+ cursor: pointer;
688
+ opacity: 0;
689
+ transition:
690
+ opacity 120ms var(--vp-ease),
691
+ color 120ms var(--vp-ease),
692
+ border-color 120ms var(--vp-ease);
693
+ }
694
+
695
+ .vp-expandable:hover > .vp-expand-btn,
696
+ .vp-expandable > .vp-expand-btn:focus-visible {
697
+ opacity: 1;
698
+ }
699
+
700
+ .vp-expandable > .vp-expand-btn:hover {
701
+ color: var(--vp-text);
702
+ border-color: var(--vp-border-strong);
703
+ }
704
+
705
+ .vp-expandable:fullscreen {
706
+ margin: 0;
707
+ padding: 0;
708
+ overflow: hidden;
709
+ background: var(--vp-bg);
710
+ cursor: grab;
711
+ }
712
+
713
+ /* The pan/zoom content layer: absolute, transformed from its top-left corner. */
714
+ .vp-expandable:fullscreen .vp-fs-content {
715
+ position: absolute;
716
+ top: 0;
717
+ left: 0;
718
+ transform-origin: 0 0;
719
+ will-change: transform;
720
+ }
721
+
722
+ /* In fullscreen the corner button is replaced by the control toolbar. */
723
+ .vp-expandable:fullscreen > .vp-expand-btn {
724
+ display: none;
725
+ }
726
+
727
+ .vp-fs-toolbar {
728
+ position: fixed;
729
+ top: 1rem;
730
+ right: 1rem;
731
+ z-index: 10;
732
+ display: flex;
733
+ align-items: center;
734
+ gap: 0.15rem;
735
+ padding: 0.25rem;
736
+ border: 1px solid var(--vp-border);
737
+ border-radius: 9px;
738
+ background: var(--vp-surface);
739
+ }
740
+
741
+ .vp-fs-toolbar .vp-fs-btn {
742
+ display: inline-flex;
743
+ align-items: center;
744
+ justify-content: center;
745
+ height: 30px;
746
+ min-width: 30px;
747
+ padding: 0 0.4rem;
748
+ border: none;
749
+ border-radius: 6px;
750
+ background: transparent;
751
+ color: var(--vp-muted);
752
+ font: inherit;
753
+ font-size: 0.78rem;
754
+ font-variant-numeric: tabular-nums;
755
+ cursor: pointer;
756
+ transition:
757
+ background 120ms var(--vp-ease),
758
+ color 120ms var(--vp-ease);
759
+ }
760
+
761
+ .vp-fs-toolbar .vp-fs-btn:hover {
762
+ background: var(--vp-surface-2);
763
+ color: var(--vp-text);
764
+ }
765
+
766
+ .vp-fs-toolbar .vp-fs-close {
767
+ margin-left: 0.2rem;
768
+ border-left: 1px solid var(--vp-border);
769
+ border-radius: 0 6px 6px 0;
770
+ }
771
+
772
+ /* In fullscreen the content renders at its natural size; the pan/zoom transform
773
+ scales it. The fit-on-open computes the scale that fills the viewport. */
774
+ .vp-mermaid:fullscreen .vp-mermaid__svg svg {
775
+ max-width: none;
776
+ width: auto;
777
+ height: auto;
778
+ }
779
+
780
+ .vp-chart:fullscreen .vp-chart__canvas {
781
+ width: 900px;
782
+ height: 520px;
783
+ }
784
+
785
+ @media (prefers-reduced-motion: reduce) {
786
+ .vp-expand-btn {
787
+ transition: none;
788
+ }
789
+ }