@portosaur/theme 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.
Files changed (76) hide show
  1. package/README.md +13 -0
  2. package/assets/img/icon-old.png +0 -0
  3. package/assets/img/icon.png +0 -0
  4. package/assets/img/project-blank.png +0 -0
  5. package/assets/img/social-card.jpeg +0 -0
  6. package/assets/img/svg/icon-blog.svg +2 -0
  7. package/assets/img/svg/icon-close.svg +3 -0
  8. package/assets/img/svg/icon-dock.svg +4 -0
  9. package/assets/img/svg/icon-link.svg +5 -0
  10. package/assets/img/svg/icon-note.svg +2 -0
  11. package/assets/img/svg/icon-popup.svg +1 -0
  12. package/assets/img/svg/icon-save.svg +5 -0
  13. package/assets/img/svg/icon.svg +240 -0
  14. package/assets/img/svg/project-blank.svg +140 -0
  15. package/assets/sample-resume.pdf +0 -0
  16. package/package.json +41 -0
  17. package/plugins/README.md +8 -0
  18. package/src/index.d.ts +11 -0
  19. package/src/index.mjs +14 -0
  20. package/src/plugins/theme.mjs +13 -0
  21. package/theme/DocCategoryGeneratedIndexPage/index.jsx +15 -0
  22. package/theme/MDXComponents.jsx +19 -0
  23. package/theme/README.md +9 -0
  24. package/theme/Root.jsx +11 -0
  25. package/theme/components/AboutSection/index.jsx +264 -0
  26. package/theme/components/AboutSection/styles.module.css +309 -0
  27. package/theme/components/ContactSection/index.jsx +188 -0
  28. package/theme/components/ContactSection/styles.module.css +343 -0
  29. package/theme/components/ExperienceSection/index.jsx +119 -0
  30. package/theme/components/ExperienceSection/styles.module.css +183 -0
  31. package/theme/components/HeroSection/index.jsx +198 -0
  32. package/theme/components/HeroSection/styles.module.css +484 -0
  33. package/theme/components/NavArrow/index.jsx +124 -0
  34. package/theme/components/NavArrow/styles.module.css +107 -0
  35. package/theme/components/NoteIndex/index.jsx +182 -0
  36. package/theme/components/NoteIndex/styles.module.css +167 -0
  37. package/theme/components/Preview/components/FeedbackStates.jsx +200 -0
  38. package/theme/components/Preview/components/FileTabs.jsx +41 -0
  39. package/theme/components/Preview/components/PreviewContent.jsx +104 -0
  40. package/theme/components/Preview/components/PreviewHeader.jsx +411 -0
  41. package/theme/components/Preview/components/Triggers/Pv.jsx +253 -0
  42. package/theme/components/Preview/components/Triggers/SrcPv.jsx +55 -0
  43. package/theme/components/Preview/components/Triggers/index.jsx +2 -0
  44. package/theme/components/Preview/components/ViewerWindow.jsx +489 -0
  45. package/theme/components/Preview/hooks/useAdaptiveSizing.jsx +90 -0
  46. package/theme/components/Preview/hooks/useDeepLinkHash.jsx +24 -0
  47. package/theme/components/Preview/hooks/useDockLayout.jsx +86 -0
  48. package/theme/components/Preview/hooks/useFileFetch.jsx +38 -0
  49. package/theme/components/Preview/hooks/useTouchZoom.jsx +98 -0
  50. package/theme/components/Preview/index.jsx +3 -0
  51. package/theme/components/Preview/renderers/CodeRenderer.jsx +124 -0
  52. package/theme/components/Preview/renderers/ImageRenderer.jsx +74 -0
  53. package/theme/components/Preview/renderers/PdfRenderer.jsx +93 -0
  54. package/theme/components/Preview/renderers/WebRenderer.jsx +59 -0
  55. package/theme/components/Preview/state/index.jsx +177 -0
  56. package/theme/components/Preview/styles.module.css +776 -0
  57. package/theme/components/Preview/utils/index.jsx +62 -0
  58. package/theme/components/ProjectsSection/index.jsx +790 -0
  59. package/theme/components/ProjectsSection/styles.module.css +900 -0
  60. package/theme/components/SocialLinks/index.jsx +115 -0
  61. package/theme/components/SocialLinks/styles.module.css +57 -0
  62. package/theme/components/Tooltip/index.jsx +104 -0
  63. package/theme/components/Tooltip/styles.module.css +168 -0
  64. package/theme/config/iconMappings.jsx +427 -0
  65. package/theme/config/prism.jsx +72 -0
  66. package/theme/config/sidebar.jsx +11 -0
  67. package/theme/css/bootstrap.css +5 -0
  68. package/theme/css/catppuccin.css +618 -0
  69. package/theme/css/custom.css +253 -0
  70. package/theme/css/tasks.css +874 -0
  71. package/theme/hooks/useScrollReveal.jsx +20 -0
  72. package/theme/pages/index.jsx +104 -0
  73. package/theme/pages/notes.jsx +131 -0
  74. package/theme/pages/tasks.jsx +989 -0
  75. package/theme/utils/HashNavigation.jsx +185 -0
  76. package/theme/utils/updateTitle.jsx +65 -0
@@ -0,0 +1,776 @@
1
+ :root {
2
+ --pv-backdrop-bg: rgba(var(--ifm-color-emphasis-900-rgb), 0.1);
3
+ --pv-popup-shadow: 0 20px 50px rgba(var(--ifm-color-emphasis-900-rgb), 0.3);
4
+ --pv-popup-width: min(900px, 90vw);
5
+ --pv-popup-height: min(700px, 85vh);
6
+ --pv-popup-radius: var(--ifm-global-radius, 16px);
7
+ }
8
+
9
+ @keyframes fadeIn {
10
+ from {
11
+ opacity: 0;
12
+ transform: scale(0.98) translateY(10px);
13
+ }
14
+ to {
15
+ opacity: 1;
16
+ transform: scale(1) translateY(0);
17
+ }
18
+ }
19
+
20
+ @keyframes slideUp {
21
+ from {
22
+ transform: translateY(100%);
23
+ }
24
+ to {
25
+ transform: translateY(0);
26
+ }
27
+ }
28
+
29
+ @keyframes spin {
30
+ 0% {
31
+ transform: rotate(0deg);
32
+ }
33
+ 100% {
34
+ transform: rotate(360deg);
35
+ }
36
+ }
37
+
38
+ .loading {
39
+ height: 100%;
40
+ width: 100%;
41
+ display: flex;
42
+ flex-direction: column;
43
+ align-items: center;
44
+ justify-content: center;
45
+ gap: 20px;
46
+ }
47
+
48
+ .loadingIcon {
49
+ display: flex;
50
+ align-items: center;
51
+ justify-content: center;
52
+ }
53
+
54
+ .loadingText {
55
+ text-align: center;
56
+ }
57
+
58
+ .loadingText p {
59
+ margin: 0;
60
+ font-weight: 600;
61
+ font-size: 1rem;
62
+ color: var(--ifm-font-color-base);
63
+ }
64
+
65
+ .loadingText span {
66
+ display: block;
67
+ margin-top: 4px;
68
+ font-size: 0.85rem;
69
+ color: var(--ifm-color-primary);
70
+ opacity: 0.8;
71
+ }
72
+
73
+ .spinner {
74
+ width: 36px;
75
+ height: 36px;
76
+ border: 3px solid
77
+ color-mix(in srgb, var(--ifm-color-primary), transparent 80%);
78
+ border-top-color: var(--ifm-color-primary);
79
+ border-radius: 50%;
80
+ animation: spin 0.9s cubic-bezier(0.4, 0, 0.2, 1) infinite;
81
+ }
82
+
83
+ .spinnerSmall {
84
+ width: 14px;
85
+ height: 14px;
86
+ border: 2px solid currentColor;
87
+ border-right-color: transparent;
88
+ border-bottom-color: transparent;
89
+ border-radius: 50%;
90
+ animation: spin 0.8s linear infinite;
91
+ }
92
+
93
+ /* --- Foundation: The Preview System --- */
94
+ .previewSystem {
95
+ position: fixed;
96
+ inset: 0;
97
+ z-index: 2000;
98
+ pointer-events: none;
99
+ font-family: var(--ifm-font-family-base);
100
+ }
101
+
102
+ .modeDock {
103
+ z-index: 90;
104
+ }
105
+
106
+ .windowFrame {
107
+ pointer-events: auto;
108
+ display: flex;
109
+ flex-direction: column;
110
+ background: var(--ifm-background-surface-color);
111
+ box-shadow: var(--ifm-global-shadow-lw);
112
+ transition:
113
+ background 0.3s ease,
114
+ border 0.3s ease,
115
+ box-shadow 0.3s ease;
116
+ z-index: 10;
117
+ border: 1px solid var(--ifm-color-emphasis-200);
118
+ }
119
+
120
+ .modePip .windowFrame,
121
+ .modePeek .windowFrame {
122
+ overflow: hidden;
123
+ }
124
+
125
+ [data-theme="dark"] .windowFrame {
126
+ background: var(--ifm-background-surface-color);
127
+ backdrop-filter: blur(20px);
128
+ border: 1px solid var(--ifm-color-emphasis-200);
129
+ box-shadow: var(--ifm-global-shadow-lw);
130
+ }
131
+
132
+ /* --- Modes (visual-only — react-rnd handles positioning for floating/dock) --- */
133
+ .modePip .windowFrame {
134
+ border-radius: 12px;
135
+ }
136
+
137
+ .modeDock .windowFrame {
138
+ box-shadow: none;
139
+ border-radius: 0;
140
+ border: none;
141
+ border-left: 1px solid var(--ifm-toc-border-color);
142
+ border-right: none;
143
+ border-bottom: none;
144
+ transition:
145
+ border-left-color 0.2s ease,
146
+ box-shadow 0.2s ease,
147
+ transform 0.4s cubic-bezier(0.16, 1, 0.3, 1);
148
+ }
149
+
150
+ .modeDock .windowFrame.windowInteracting {
151
+ border-left: 2px solid var(--ifm-color-primary);
152
+ box-shadow: -4px 0 12px -4px rgba(var(--ifm-color-primary-rgb), 0.3);
153
+ }
154
+
155
+ .modePip .windowFrame {
156
+ border-radius: 12px;
157
+ overflow: hidden;
158
+ }
159
+
160
+ .modeFull .windowFrame {
161
+ position: absolute;
162
+ inset: 0;
163
+ width: 100vw;
164
+ height: 100vh;
165
+ border-radius: 0;
166
+ border: none;
167
+ z-index: 2000;
168
+ }
169
+
170
+ .fullFrame {
171
+ border-radius: 0 !important;
172
+ border: none !important;
173
+ }
174
+
175
+ .modePeek .windowFrame {
176
+ position: absolute;
177
+ bottom: 0;
178
+ left: 0;
179
+ right: 0;
180
+ width: 100vw;
181
+ height: var(--mobile-peek-height, 50vh);
182
+ border-radius: 0;
183
+ border-top: 1px solid var(--ifm-toc-border-color);
184
+ }
185
+
186
+ .previewBackdrop {
187
+ position: absolute;
188
+ inset: 0;
189
+ background: var(--pv-backdrop-bg);
190
+ backdrop-filter: blur(2px);
191
+ -webkit-backdrop-filter: blur(2px);
192
+ z-index: 5;
193
+ cursor: pointer;
194
+ pointer-events: auto;
195
+ }
196
+
197
+ .modePopup .windowFrame {
198
+ position: absolute;
199
+ top: 50%;
200
+ left: 50%;
201
+ /* transform removed to allow framer-motion full control over centering animation */
202
+ width: var(--pv-popup-width);
203
+ height: var(--pv-popup-height);
204
+ border-radius: var(--pv-popup-radius);
205
+ box-shadow: var(--pv-popup-shadow);
206
+ overflow: hidden;
207
+ z-index: 10;
208
+ }
209
+
210
+ @media (max-width: 1024px) {
211
+ .modePopup .windowFrame {
212
+ width: 95vw;
213
+ height: 90vh;
214
+ }
215
+ }
216
+
217
+ /* --- Window Components: Header & Drag --- */
218
+ .dragHandleWrapper {
219
+ cursor: grab;
220
+ user-select: none;
221
+ background: var(--ifm-footer-background-color);
222
+ border-bottom: none; /* Removed to avoid double border with tabs */
223
+ flex-shrink: 0;
224
+ position: relative;
225
+ }
226
+
227
+ .dragHandleWrapper:active {
228
+ cursor: grabbing;
229
+ }
230
+
231
+ .modeDock .dragHandleWrapper {
232
+ padding-top: var(--ifm-navbar-height, 60px);
233
+ cursor: default;
234
+ }
235
+
236
+ .modeDock .dragHandleWrapper:active {
237
+ cursor: default;
238
+ }
239
+
240
+ .revealHeader {
241
+ position: absolute;
242
+ top: 0;
243
+ left: 0;
244
+ right: 0;
245
+ height: var(--ifm-navbar-height, 60px);
246
+ display: flex;
247
+ align-items: center;
248
+ justify-content: center;
249
+ padding: 0 20px;
250
+ opacity: 0.9;
251
+ pointer-events: none;
252
+ }
253
+
254
+ .revealHeader .popupTitle {
255
+ flex: none; /* Don't expand so centering works */
256
+ justify-content: center;
257
+ }
258
+
259
+ .modePip .revealHeader,
260
+ .modePeek .revealHeader {
261
+ display: none;
262
+ }
263
+
264
+ .popupHeader {
265
+ padding: 8px 16px;
266
+ display: flex;
267
+ justify-content: space-between;
268
+ align-items: center;
269
+ min-height: 44px;
270
+ }
271
+
272
+ .headerLeft {
273
+ display: flex;
274
+ align-items: center;
275
+ gap: 12px;
276
+ min-width: 0;
277
+ flex: 1;
278
+ margin-right: 20px;
279
+ }
280
+
281
+ .popupTitle {
282
+ margin: 0;
283
+ font-size: 0.95rem;
284
+ font-weight: 600;
285
+ display: flex;
286
+ align-items: center;
287
+ gap: 4px;
288
+ min-width: 0;
289
+ overflow: hidden;
290
+ flex: 1;
291
+ }
292
+
293
+ .primaryText {
294
+ color: var(--ifm-color-primary);
295
+ font-weight: 900 !important;
296
+ text-transform: uppercase;
297
+ font-size: 1.1rem;
298
+ letter-spacing: 0.15em;
299
+ }
300
+
301
+ .baseTitleText {
302
+ color: var(--ifm-font-color-base);
303
+ font-family: var(--ifm-font-family-base);
304
+ font-size: 0.9rem;
305
+ font-weight: 600;
306
+ white-space: nowrap;
307
+ overflow: hidden;
308
+ text-overflow: ellipsis;
309
+ display: block;
310
+ flex: 1;
311
+ min-width: 0;
312
+ }
313
+
314
+ /* Original Premium Button Styles */
315
+ .headerControls {
316
+ display: flex;
317
+ align-items: center;
318
+ gap: 6px;
319
+ flex-shrink: 0;
320
+ }
321
+
322
+ .headerAction {
323
+ background-color: var(--ifm-color-primary);
324
+ color: var(--ifm-button-color) !important;
325
+ font-size: 0.75rem;
326
+ font-weight: 600;
327
+ padding: 0 10px;
328
+ height: 28px;
329
+ border-radius: 6px;
330
+ text-decoration: none !important;
331
+ display: flex;
332
+ align-items: center;
333
+ justify-content: center;
334
+ gap: 6px;
335
+ transition: all 0.2s ease;
336
+ border: none;
337
+ cursor: pointer;
338
+ }
339
+
340
+ @media (max-width: 768px) {
341
+ .btnText {
342
+ display: none;
343
+ }
344
+ }
345
+
346
+ .headerAction:hover {
347
+ opacity: 0.9;
348
+ transform: translateY(-1px);
349
+ box-shadow: 0 4px 12px rgba(var(--ifm-color-primary-rgb), 0.3);
350
+ }
351
+
352
+ .headerActionDisabled {
353
+ opacity: 0.7;
354
+ cursor: not-allowed;
355
+ }
356
+
357
+ .headerActionDisabled:hover {
358
+ opacity: 0.7;
359
+ transform: none;
360
+ box-shadow: none;
361
+ }
362
+
363
+ .headerActionClose {
364
+ background-color: var(--ifm-color-danger);
365
+ }
366
+
367
+ .headerActionClose:hover {
368
+ box-shadow: 0 4px 12px rgba(var(--ifm-color-danger-rgb), 0.3);
369
+ }
370
+
371
+ .headerIcon {
372
+ width: 16px;
373
+ height: 16px;
374
+ stroke-width: 2.5;
375
+ }
376
+ .headerIconSmall {
377
+ width: 15px;
378
+ height: 15px;
379
+ stroke-width: 2.5;
380
+ }
381
+
382
+ /* Zoom Component */
383
+ .zoomVal {
384
+ background: var(--ifm-color-emphasis-200);
385
+ color: var(--ifm-color-emphasis-800);
386
+ border: none;
387
+ border-radius: var(--ifm-global-radius);
388
+ font-size: 0.75rem;
389
+ font-weight: 800;
390
+ height: 28px;
391
+ padding: 0 10px;
392
+ display: flex;
393
+ align-items: center;
394
+ gap: 6px;
395
+ cursor: pointer;
396
+ transition: all 0.2s;
397
+ }
398
+
399
+ .zoomVal:hover {
400
+ background: var(--ifm-color-emphasis-200);
401
+ color: var(--ifm-color-primary);
402
+ }
403
+
404
+ .zoomMenu {
405
+ position: absolute;
406
+ top: calc(100% + 8px);
407
+ right: 0;
408
+ background: var(--ifm-background-surface-color);
409
+ border: none;
410
+ border-radius: var(--ifm-global-radius);
411
+ box-shadow: var(--ifm-global-shadow-md);
412
+ padding: 6px;
413
+ z-index: 1000;
414
+ min-width: 120px;
415
+ }
416
+
417
+ .zoomDropdown {
418
+ position: relative;
419
+ }
420
+
421
+ .zoomMenuItem {
422
+ display: block;
423
+ width: 100%;
424
+ padding: 8px 12px;
425
+ background: transparent;
426
+ border: none;
427
+ border-radius: 4px;
428
+ color: var(--ifm-font-color-base);
429
+ font-size: 0.8rem;
430
+ font-weight: 500;
431
+ cursor: pointer;
432
+ text-align: left;
433
+ transition: all 0.2s ease;
434
+ }
435
+
436
+ .zoomMenuItem:hover {
437
+ background: rgba(var(--ifm-color-primary-rgb), 0.05);
438
+ color: var(--ifm-color-primary);
439
+ }
440
+
441
+ .zoomMenuItemActive {
442
+ background: var(--ifm-color-primary) !important;
443
+ color: var(--ifm-button-color) !important;
444
+ font-weight: 600;
445
+ }
446
+
447
+ /* Tabs */
448
+ .tabs {
449
+ display: flex;
450
+ gap: 4px;
451
+ padding: 0 16px;
452
+ background: var(--ifm-background-surface-color);
453
+ border-top: 1px solid var(--ifm-toc-border-color);
454
+ border-bottom: 1px solid var(--ifm-toc-border-color);
455
+ overflow-x: auto;
456
+ scrollbar-width: none;
457
+ flex-shrink: 0;
458
+ z-index: 10;
459
+ }
460
+
461
+ .tab {
462
+ padding: 10px 16px;
463
+ font-size: 0.8rem;
464
+ font-weight: 500;
465
+ cursor: pointer;
466
+ border: none;
467
+ background: none;
468
+ color: var(--ifm-font-color-base);
469
+ opacity: 0.6;
470
+ border-bottom: 2px solid transparent;
471
+ transition: all 0.2s;
472
+ white-space: nowrap;
473
+ }
474
+
475
+ .tab:hover {
476
+ opacity: 1;
477
+ background: rgba(var(--ifm-color-primary-rgb), 0.05);
478
+ color: var(--ifm-color-primary);
479
+ }
480
+
481
+ .activeTab {
482
+ opacity: 1;
483
+ color: var(--ifm-color-primary);
484
+ border-bottom-color: var(--ifm-color-primary);
485
+ }
486
+
487
+ /* Content Area */
488
+ .windowContent {
489
+ display: flex;
490
+ flex-direction: column;
491
+ flex: 1;
492
+ min-height: 0;
493
+ }
494
+
495
+ .popupBody {
496
+ flex: 1;
497
+ overflow: auto;
498
+ position: relative;
499
+ display: flex;
500
+ flex-direction: column;
501
+ outline: none; /* Focusable for Vimium */
502
+ }
503
+
504
+ .isGrabbable {
505
+ cursor: grab;
506
+ }
507
+
508
+ .isText {
509
+ cursor: text;
510
+ }
511
+
512
+ .isPanning:not(.isText) {
513
+ cursor: grabbing !important;
514
+ }
515
+
516
+ .isPanning:not(.isText) * {
517
+ cursor: grabbing !important;
518
+ }
519
+
520
+ /* --- Media Views --- */
521
+ .imageView {
522
+ display: flex;
523
+ align-items: safe center;
524
+ justify-content: safe center;
525
+ flex: 1;
526
+ min-height: 0;
527
+ overflow: auto;
528
+ position: relative; /* Ensure loader stays contained */
529
+ }
530
+
531
+ .imageScrollArea {
532
+ display: flex;
533
+ align-items: center;
534
+ justify-content: center;
535
+ width: calc(100% * var(--zoom, 1));
536
+ height: calc(100% * var(--zoom, 1));
537
+ min-width: calc(100% * var(--zoom, 1));
538
+ min-height: calc(100% * var(--zoom, 1));
539
+ padding: var(--ifm-spacing-md);
540
+ box-sizing: border-box;
541
+ flex-shrink: 0;
542
+ }
543
+
544
+ .image {
545
+ width: 100%;
546
+ height: 100%;
547
+ object-fit: contain;
548
+ display: block;
549
+ border-radius: var(--ifm-global-radius);
550
+ box-shadow: var(--ifm-global-shadow-md);
551
+ }
552
+
553
+ .pdfView {
554
+ flex: 1;
555
+ padding: 4px;
556
+ background: var(--ifm-background-color);
557
+ position: relative;
558
+ display: flex;
559
+ flex-direction: column;
560
+ align-items: safe center;
561
+ }
562
+
563
+ .pdfPage {
564
+ margin-bottom: 4px;
565
+ margin-left: auto;
566
+ margin-right: auto;
567
+ box-shadow: var(--ifm-global-shadow-md);
568
+ animation: fadeIn 0.4s ease-out;
569
+ }
570
+
571
+ .webView {
572
+ flex: 1;
573
+ display: flex;
574
+ flex-direction: column;
575
+ position: relative;
576
+ min-height: 0;
577
+ height: 100%;
578
+ }
579
+ .webFrame {
580
+ flex: 1;
581
+ border: none;
582
+ background: var(--ifm-background-surface-color);
583
+ width: 100%;
584
+ height: 100%;
585
+ display: block;
586
+ }
587
+
588
+ .errorState {
589
+ flex: 1;
590
+ display: flex;
591
+ flex-direction: column;
592
+ align-items: center;
593
+ justify-content: center;
594
+ padding: 60px;
595
+ text-align: center;
596
+ }
597
+
598
+ .btnText {
599
+ font-family: var(--ifm-font-family-base);
600
+ }
601
+
602
+ /* Triggers */
603
+ .previewContainer {
604
+ display: inline-flex;
605
+ vertical-align: baseline;
606
+ }
607
+ .previewTrigger {
608
+ color: var(--ifm-link-color);
609
+ cursor: pointer;
610
+ text-decoration: underline dashed;
611
+ text-decoration-color: color-mix(
612
+ in srgb,
613
+ var(--ifm-link-color),
614
+ transparent 40%
615
+ );
616
+ text-decoration-thickness: 1px;
617
+ text-underline-offset: 4px;
618
+ transition: all 0.2s ease;
619
+ }
620
+ .previewTrigger:hover {
621
+ text-decoration: underline solid;
622
+ text-decoration-color: var(--ifm-link-hover-color);
623
+ text-decoration-thickness: 1px;
624
+ }
625
+
626
+ .activeTrigger {
627
+ color: var(--ifm-color-primary-lightest) !important;
628
+ font-weight: 700 !important;
629
+ text-decoration: underline !important;
630
+ text-decoration-thickness: 2px !important;
631
+ text-underline-offset: 4px !important;
632
+ }
633
+
634
+ .noUnderline {
635
+ text-decoration: none !important;
636
+ }
637
+
638
+ .sourceFooter {
639
+ margin: 2rem 0 1rem;
640
+ padding-top: 1.2rem;
641
+ border-top: 1px solid var(--ifm-color-emphasis-200);
642
+ font-size: 0.85rem;
643
+ color: var(--ifm-font-color-secondary);
644
+ }
645
+
646
+ .sourceFooterLabel {
647
+ font-weight: 700;
648
+ color: var(--ifm-font-color-base);
649
+ margin-right: 8px;
650
+ }
651
+
652
+ /* --- react-rnd wrapper --- */
653
+ .rndWrapper {
654
+ pointer-events: auto;
655
+ display: flex;
656
+ flex-direction: column;
657
+ }
658
+
659
+ .modePip .rndWrapper {
660
+ border-radius: 12px;
661
+ box-shadow: var(--ifm-global-shadow-lw);
662
+ }
663
+
664
+ .modeDock .rndWrapper {
665
+ border-left: none;
666
+ }
667
+
668
+ /* --- Mobile Peek Handle --- */
669
+ .peekHandle {
670
+ display: none;
671
+ }
672
+
673
+ .modePeek .windowFrame {
674
+ border-radius: 0;
675
+ border: none;
676
+ border-top: 1px solid var(--ifm-color-emphasis-400);
677
+ box-shadow: 0 -10px 40px rgba(var(--ifm-color-emphasis-900-rgb), 0.15);
678
+ transition:
679
+ border-top-color 0.2s ease,
680
+ box-shadow 0.2s ease;
681
+ }
682
+
683
+ .modePeek .windowFrame.windowInteracting {
684
+ border-top: 2px solid var(--ifm-color-primary);
685
+ box-shadow: 0 -4px 12px -4px rgba(var(--ifm-color-primary-rgb), 0.4);
686
+ }
687
+
688
+ /* --- Iframe Loading Overlay --- */
689
+ .iframeLoadingOverlay {
690
+ position: absolute;
691
+ inset: 0;
692
+ display: flex;
693
+ flex-direction: column;
694
+ align-items: center;
695
+ justify-content: center;
696
+ gap: 12px;
697
+ background: var(--ifm-background-color);
698
+ z-index: 5;
699
+ }
700
+
701
+ /* --- Error / Feedback UI --- */
702
+ .errorIcon {
703
+ font-size: 2.5rem;
704
+ margin-bottom: 12px;
705
+ }
706
+
707
+ .errorMsg {
708
+ font-size: 0.85rem;
709
+ opacity: 0.7;
710
+ margin-top: 4px;
711
+ }
712
+
713
+ .errorActions {
714
+ display: flex;
715
+ gap: 10px;
716
+ margin-top: 16px;
717
+ }
718
+
719
+ .retryButton {
720
+ background: var(--ifm-color-primary);
721
+ color: var(--ifm-button-color);
722
+ border: none;
723
+ border-radius: var(--ifm-global-radius);
724
+ padding: 8px 20px;
725
+ font-weight: 600;
726
+ font-size: 0.85rem;
727
+ cursor: pointer;
728
+ transition: opacity 0.2s;
729
+ }
730
+ .retryButton:hover {
731
+ opacity: 0.85;
732
+ }
733
+
734
+ .visitButton {
735
+ background: var(--ifm-color-emphasis-200);
736
+ color: var(--ifm-font-color-base);
737
+ border: none;
738
+ border-radius: var(--ifm-global-radius);
739
+ padding: 8px 20px;
740
+ font-weight: 600;
741
+ font-size: 0.85rem;
742
+ cursor: pointer;
743
+ text-decoration: none;
744
+ transition: opacity 0.2s;
745
+ }
746
+ .visitButton:hover {
747
+ opacity: 0.85;
748
+ }
749
+
750
+ /* --- Global Layout Hooks (when docked) --- */
751
+ :global(body.pv-dock-active) :global(.main-wrapper) {
752
+ padding-right: var(--pv-dock-width, 400px);
753
+ transition: padding-right 0.3s cubic-bezier(0.16, 1, 0.3, 1);
754
+ }
755
+
756
+ :global(body.pv-dock-active) :global(.col.col--3),
757
+ :global(body.pv-dock-active) :global(.theme-doc-toc-desktop),
758
+ :global(body.pv-dock-active) :global(.table-of-contents) {
759
+ display: none !important;
760
+ }
761
+
762
+ /* Ensure the main content column expands and doesn't hit a max-width cap when docked */
763
+ :global(body.pv-dock-active) :global(.docItemCol_VOVn) {
764
+ max-width: none !important;
765
+ flex: 1 !important;
766
+ }
767
+
768
+ :global(body.pv-dock-active) :global(.container.docItemWrapperEnhanced_JWYK) {
769
+ max-width: none !important;
770
+ }
771
+
772
+ /* --- Global Layout Hooks (when peeking on mobile/tablet) --- */
773
+ :global(body.pv-peek-active) :global(.main-wrapper) {
774
+ padding-bottom: var(--mobile-peek-height, 50vh);
775
+ transition: padding-bottom 0.3s cubic-bezier(0.16, 1, 0.3, 1);
776
+ }