portosaurus 0.14.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.

Potentially problematic release.


This version of portosaurus might be problematic. Click here for more details.

Files changed (64) hide show
  1. package/.vscode/snippets.code-snippets +79 -0
  2. package/AGENTS.md +37 -0
  3. package/GG/config.js +233 -0
  4. package/GG/package.json +14 -0
  5. package/GG/static/.nojekyll +0 -0
  6. package/GG/static/docusaurus-snippet.css +3 -0
  7. package/GG/static/img/icon-bg.png +0 -0
  8. package/GG/static/img/icon-old.png +0 -0
  9. package/GG/static/img/icon.png +0 -0
  10. package/GG/static/img/project-blank.png +0 -0
  11. package/GG/static/img/social-card.jpeg +0 -0
  12. package/LICENSE +674 -0
  13. package/README.md +57 -0
  14. package/bin/portosaurus.js +136 -0
  15. package/package.json +36 -0
  16. package/src/config/iconMappings.js +329 -0
  17. package/src/config/metaTags.js +240 -0
  18. package/src/config/prism.js +179 -0
  19. package/src/config/sidebar.js +20 -0
  20. package/src/configLoader.js +99 -0
  21. package/src/index.js +79 -0
  22. package/src/pages/index.js +98 -0
  23. package/src/pages/notes.js +88 -0
  24. package/src/pages/tasks.js +251 -0
  25. package/src/theme/components/AboutSection/index.js +67 -0
  26. package/src/theme/components/AboutSection/styles.module.css +492 -0
  27. package/src/theme/components/ContactSection/index.js +87 -0
  28. package/src/theme/components/ContactSection/styles.module.css +327 -0
  29. package/src/theme/components/ExperienceSection/index.js +25 -0
  30. package/src/theme/components/ExperienceSection/styles.module.css +180 -0
  31. package/src/theme/components/HeroSection/index.js +63 -0
  32. package/src/theme/components/HeroSection/styles.module.css +471 -0
  33. package/src/theme/components/NoteIndex/index.js +119 -0
  34. package/src/theme/components/NoteIndex/styles.module.css +143 -0
  35. package/src/theme/components/ProjectsSection/index.js +529 -0
  36. package/src/theme/components/ProjectsSection/styles.module.css +830 -0
  37. package/src/theme/components/ScrollToTop/index.js +98 -0
  38. package/src/theme/components/ScrollToTop/styles.module.css +96 -0
  39. package/src/theme/components/SocialLinks/index.js +129 -0
  40. package/src/theme/components/SocialLinks/styles.module.css +55 -0
  41. package/src/theme/components/Tooltip/index.js +30 -0
  42. package/src/theme/components/Tooltip/styles.module.css +92 -0
  43. package/src/theme/css/bootstrap.css +6 -0
  44. package/src/theme/css/catppuccin.css +632 -0
  45. package/src/theme/css/custom.css +186 -0
  46. package/src/theme/css/tasks.css +868 -0
  47. package/src/theme/staticLink/.nojekyll +0 -0
  48. package/src/theme/staticLink/docusaurus-snippet.css +3 -0
  49. package/src/theme/staticLink/img/icon-bg.png +0 -0
  50. package/src/theme/staticLink/img/icon-old.png +0 -0
  51. package/src/theme/staticLink/img/icon.png +0 -0
  52. package/src/theme/staticLink/img/project-blank.png +0 -0
  53. package/src/theme/staticLink/img/social-card.jpeg +0 -0
  54. package/src/utils/HashNavigation.js +250 -0
  55. package/src/utils/appVersion.js +27 -0
  56. package/src/utils/cssUtils.js +99 -0
  57. package/src/utils/filterEnabledItems.js +21 -0
  58. package/src/utils/generateFavicon.js +256 -0
  59. package/src/utils/generateRobotsTxt.js +97 -0
  60. package/src/utils/iconExtractor.js +159 -0
  61. package/src/utils/imageDownloader.js +88 -0
  62. package/src/utils/imageProcessor.js +134 -0
  63. package/src/utils/linkShortner.js +0 -0
  64. package/src/utils/updateTitle.js +107 -0
@@ -0,0 +1,830 @@
1
+
2
+ /* Animations */
3
+ @keyframes fadeIn {
4
+ from {
5
+ opacity: 0;
6
+ }
7
+ to {
8
+ opacity: 1;
9
+ }
10
+ }
11
+
12
+ @keyframes slideUp {
13
+ from {
14
+ opacity: 0;
15
+ transform: translateY(20px);
16
+ }
17
+ to {
18
+ opacity: 1;
19
+ transform: translateY(0);
20
+ }
21
+ }
22
+
23
+ .projectsSection {
24
+ scroll-margin-top: var(--ifm-scroll-margin-top);
25
+ min-height: calc(100vh - 60px);
26
+ margin-bottom: 0;
27
+ width: 100%;
28
+ padding: 1.5rem 0 5rem;
29
+ background-color: var(--ifm-background-color);
30
+ }
31
+
32
+ .projectsContainer {
33
+ max-width: 1200px;
34
+ margin: 0 auto;
35
+ padding: 0 1.5rem 2rem;
36
+ }
37
+
38
+ .projectsHeader {
39
+ text-align: center;
40
+ margin-bottom: 1.5rem;
41
+ }
42
+
43
+ .projectsTitle {
44
+ font-size: 2.5rem;
45
+ font-weight: 600;
46
+ color: var(--ifm-color-primary);
47
+ margin-bottom: 0.6rem;
48
+ animation: slideUp 0.5s ease-out forwards;
49
+ position: relative;
50
+ display: inline-block;
51
+ }
52
+
53
+ .projectsSubtitle {
54
+ font-size: 0.95rem;
55
+ color: var(--ifm-font-color-tertiary);
56
+ max-width: 600px;
57
+ margin: 0.4rem auto 0;
58
+ animation: slideUp 0.5s ease-out 0.2s forwards;
59
+ }
60
+
61
+ /* Carousel Styles */
62
+ .carouselContainer {
63
+ position: relative;
64
+ width: 100%;
65
+ margin: 0 auto;
66
+ padding: 0.75rem 2rem 0;
67
+ display: flex;
68
+ align-items: center;
69
+ }
70
+
71
+ .carouselWrapper {
72
+ width: 100%;
73
+ overflow: hidden;
74
+ margin-bottom: 35px;
75
+ }
76
+
77
+ .projectsCarousel {
78
+ width: 100%;
79
+ margin: 0 auto;
80
+ }
81
+
82
+ .carouselSlide {
83
+ padding: 4px 8px;
84
+ height: 100%;
85
+ }
86
+
87
+ .carouselCard {
88
+ position: relative;
89
+ display: flex;
90
+ flex-direction: column;
91
+ background-color: var(--ifm-card-background-color);
92
+ border-radius: 8px;
93
+ overflow: hidden;
94
+ box-shadow: 0 4px 6px rgba(var(--ifm-color-black-rgb), 0.1);
95
+ opacity: 0;
96
+ animation: fadeIn 0.5s ease-out forwards;
97
+ height: 100%;
98
+ transition: transform 0.3s ease, box-shadow 0.3s ease, border-color 0.3s ease;
99
+ border: 1px solid var(--ifm-shadow-color);
100
+ width: 100%;
101
+ }
102
+
103
+ .featuredCard {
104
+ border: 1.5px solid rgba(var(--ifm-color-primary-rgb), 0.7);
105
+ box-shadow: 0 5px 15px rgba(var(--ifm-color-black-rgb), 0.1);;
106
+ }
107
+
108
+ .featuredBadge {
109
+ position: absolute;
110
+ bottom: 10px;
111
+ right: 10px;
112
+ background-color: var(--ifm-color-primary);
113
+ color: var(--ifm-color-white);
114
+ width: 20px;
115
+ height: 20px;
116
+ border-radius: 50%;
117
+ display: flex;
118
+ align-items: center;
119
+ justify-content: center;
120
+ font-size: 0.65rem;
121
+ z-index: 5;
122
+ box-shadow: 0 2px 4px rgba(var(--ifm-color-black-rgb), 0.2);
123
+ top: auto;
124
+ }
125
+
126
+ .featuredBadge svg {
127
+ font-size: 10px;
128
+ }
129
+
130
+ .carouselCard:hover {
131
+ transform: scale(1.02);
132
+ border-color: var(--ifm-color-primary);
133
+ }
134
+
135
+ .featuredCard:hover {
136
+ border-width: 1.5px;
137
+ }
138
+
139
+ .projectImageContainer {
140
+ position: relative;
141
+ width: 100%;
142
+ padding-top: 62%;
143
+ overflow: hidden;
144
+ background-color: var(--ifm-shadow-color);
145
+ border-bottom-left-radius: 12px;
146
+ border-bottom-right-radius: 12px;
147
+ }
148
+
149
+ .projectImage {
150
+ position: absolute;
151
+ top: 0;
152
+ left: 0;
153
+ width: 100%;
154
+ height: 100%;
155
+ object-fit: cover;
156
+ transform: scale(1.05);
157
+ transition: transform 0.5s ease;
158
+ }
159
+
160
+ .carouselCard:hover .projectImage {
161
+ transform: scale(1.12);
162
+ }
163
+
164
+ /* Card content styling */
165
+ .projectContent {
166
+ padding: 0.8rem 1.5rem 0rem;
167
+ flex: 1;
168
+ display: flex;
169
+ flex-direction: column;
170
+ align-items: center;
171
+ text-align: center;
172
+ }
173
+
174
+ .projectStateBadge {
175
+ position: absolute;
176
+ top: 10px;
177
+ right: 10px;
178
+ z-index: 5;
179
+ display: flex;
180
+ align-items: center;
181
+ }
182
+
183
+ .projectStateLabel {
184
+ font-size: 0.65rem;
185
+ font-weight: 500;
186
+ padding: 1px 4px;
187
+ border-radius: 3px;
188
+ text-transform: uppercase;
189
+ letter-spacing: 0.5px;
190
+ color: var(--ifm-color-white);
191
+ }
192
+
193
+ /* Status colors */
194
+ .stateActive {
195
+ background-color: var(--ifm-color-green);
196
+ color: var(--ifm-color-black);
197
+ }
198
+
199
+ .stateCompleted {
200
+ background-color: var(--ifm-color-blue);
201
+ }
202
+
203
+ .stateMaintenance {
204
+ background-color: var(--ifm-color-yellow);
205
+ color: var(--ifm-color-text);
206
+ }
207
+
208
+ .statePaused {
209
+ background-color: var(--ifm-color-orange);
210
+ color: var(--ifm-color-black);
211
+ }
212
+
213
+ .stateArchived {
214
+ background-color: var(--ifm-color-gray);
215
+ }
216
+
217
+ .stateNA {
218
+ background-color: var(--ifm-color-info-dark);
219
+ color: var(--ifm-color-black);
220
+ }
221
+
222
+ .statePlanned {
223
+ background-color: var(--ifm-color-purple);
224
+ color: var(--ifm-color-black);
225
+ }
226
+
227
+ .projectTitle {
228
+ font-size: 1.7rem;
229
+ margin-bottom: 0.4rem;
230
+ color: var(--ifm-color-primary);
231
+ font-weight: 600;
232
+ line-height: 1.2;
233
+ }
234
+
235
+ .projectDescription {
236
+ color: var(--ifm-font-color-tertiary);
237
+ margin: 0.4rem 0;
238
+ font-size: 0.9rem;
239
+ line-height: 1.4;
240
+ }
241
+
242
+ /* Tags styling */
243
+ .projectTags {
244
+ display: flex;
245
+ flex-wrap: wrap;
246
+ gap: 0.25rem;
247
+ margin: 0.5rem 0 0.8rem;
248
+ opacity: 0.85;
249
+ justify-content: center;
250
+ }
251
+
252
+ .projectTag {
253
+ background-color: var(--ifm-shadow-color);
254
+ color: var(--ifm-font-color-secondary);
255
+ padding: 0.02rem 0.3rem;
256
+ padding-top: 0px;
257
+ border-radius: 40px;
258
+ font-size: 0.55rem;
259
+ font-weight: 400;
260
+ transition: background-color 0.2s ease;
261
+ border: 1px solid var(--ifm-color-gray-500);
262
+ margin: 0.05rem;
263
+ }
264
+
265
+ /* Links styling */
266
+ .projectLinks {
267
+ display: flex;
268
+ justify-content: center;
269
+ padding: 1.05rem 1.5rem 1.3rem;
270
+ gap: 0.8rem;
271
+ margin-top: auto;
272
+ }
273
+
274
+ .projectLink {
275
+ display: flex;
276
+ align-items: center;
277
+ gap: 0.35rem;
278
+ color: var(--ifm-font-color-tertiary);
279
+ text-decoration: none;
280
+ font-size: 0.8rem;
281
+ transition: all 0.2s ease;
282
+ padding: 0.35rem 0.7rem;
283
+ border-radius: 6px;
284
+ border: 1px solid var(--ifm-color-gray-500);
285
+ background-color: var(--ifm-shadow-color);
286
+ font-weight: 500;
287
+ white-space: nowrap;
288
+ box-shadow: 0 1px 3px rgba(var(--ifm-color-black), 0.05);
289
+ }
290
+
291
+ .projectLink:hover {
292
+ color: var(--ifm-color-primary);
293
+ background-color: var(--ifm-card-background-color);
294
+ transform: translateY(-2px);
295
+ box-shadow: 0 3px 7px rgba(var(--ifm-color-black), 0.08);
296
+ border-color: var(--ifm-color-primary);
297
+ text-decoration: none;
298
+ }
299
+
300
+ .projectLink:active {
301
+ transform: translateY(-1px);
302
+ box-shadow: 0 2px 5px rgba(var(--ifm-color-black), 0.06);
303
+ }
304
+
305
+ .projectLink svg {
306
+ font-size: 0.95rem;
307
+ transition: transform 0.2s ease;
308
+ color: var(--ifm-font-color-secondary);
309
+ }
310
+
311
+ .projectLink:hover svg {
312
+ transform: scale(1.08);
313
+ color: var(--ifm-color-primary);
314
+ }
315
+
316
+ /* Carousel control buttons */
317
+ .carouselControl {
318
+ position: absolute;
319
+ top: 50%;
320
+ transform: translateY(-50%);
321
+ width: 44px;
322
+ height: 44px;
323
+ border-radius: 50%;
324
+ background-color: var(--ifm-color-primary);
325
+ color: var(--ifm-color-white);
326
+ border: none;
327
+ display: flex;
328
+ align-items: center;
329
+ justify-content: center;
330
+ cursor: pointer;
331
+ z-index: 5;
332
+ transition: opacity 0.2s ease, background-color 0.2s ease;
333
+ padding: 0;
334
+ box-shadow: 0 2px 8px rgba(var(--ifm-color-black), 0.15);
335
+ }
336
+
337
+ .carouselControl svg {
338
+ width: 20px;
339
+ height: 20px;
340
+ fill: var(--ifm-color-white);
341
+ }
342
+
343
+ .carouselControl:hover {
344
+ transform: translateY(-50%) scale(1.1);
345
+ }
346
+
347
+ /* Disabled button style */
348
+ .disabledButton {
349
+ opacity: 0.5;
350
+ cursor: not-allowed;
351
+ }
352
+
353
+ .disabledButton:hover {
354
+ transform: translateY(-50%);
355
+ opacity: 0.5;
356
+ }
357
+
358
+ .prevButton {
359
+ left: -25px;
360
+ }
361
+
362
+ .nextButton {
363
+ right: -25px;
364
+ }
365
+
366
+ .noProjects {
367
+ text-align: center;
368
+ padding: 2rem;
369
+ color: var(--ifm-font-color-tertiary);
370
+ background-color: var(--ifm-shadow-color);
371
+ border-radius: 8px;
372
+ margin: 1rem 0;
373
+ }
374
+
375
+ :global(.slick-track) {
376
+ display: flex !important;
377
+ margin-left: 0 !important;
378
+ margin-right: 0 !important;
379
+ }
380
+
381
+ :global(.slick-slide) {
382
+ height: inherit !important;
383
+ float: none !important;
384
+ }
385
+
386
+ :global(.slick-slide > div) {
387
+ height: 100%;
388
+ margin: 0 0.2rem;
389
+ }
390
+
391
+ /* Hide default slick dots */
392
+ :global(.slick-dots) {
393
+ display: none !important;
394
+ }
395
+
396
+ /* Custom navigation dots styling */
397
+ .navDotsContainer {
398
+ display: flex;
399
+ align-items: center;
400
+ margin: 0;
401
+ padding: 0;
402
+ width: auto;
403
+ min-width: fit-content;
404
+ }
405
+
406
+ .dotsScrollContainer {
407
+ flex: 1;
408
+ overflow-x: auto;
409
+ overflow-y: hidden;
410
+ -webkit-overflow-scrolling: touch;
411
+ scrollbar-width: none;
412
+ -ms-overflow-style: none;
413
+ display: flex;
414
+ justify-content: center;
415
+ padding: 0.8rem 0;
416
+ max-width: 60vw;
417
+ scroll-padding: 0 20px;
418
+ margin: 0 5px;
419
+ position: relative;
420
+ }
421
+
422
+ .dotsScrollContainer::-webkit-scrollbar {
423
+ display: none;
424
+ }
425
+
426
+ .navDot {
427
+ width: 9px;
428
+ height: 9px;
429
+ border-radius: 50%;
430
+ background-color: var(--ifm-color-gray-500);
431
+ border: none;
432
+ margin: 0 6px;
433
+ cursor: pointer;
434
+ padding: 0;
435
+ transition: all 0.3s ease;
436
+ opacity: 0.7;
437
+ flex-shrink: 0;
438
+ min-width: 9px;
439
+ min-height: 9px;
440
+ }
441
+
442
+ .navDot:hover {
443
+ opacity: 1;
444
+ background-color: var(--ifm-color-primary-dark);
445
+ }
446
+
447
+ .activeDot {
448
+ background-color: var(--ifm-color-primary);
449
+ transform: scale(1.5);
450
+ opacity: 1;
451
+ box-shadow: 0 0 0 3px rgba(var(--ifm-color-primary-rgb), 0.4);
452
+ z-index: 5; /* Ensure active dot appears above others */
453
+ }
454
+
455
+ .dotsScrollContainer .navDot {
456
+ opacity: 0.8;
457
+ }
458
+
459
+ /* Center alignment for dots */
460
+ .centerDots {
461
+ display: flex !important;
462
+ justify-content: center !important;
463
+ text-align: center !important;
464
+ margin: 0 auto;
465
+ }
466
+
467
+ .scrollDots {
468
+ justify-content: flex-start;
469
+ flex-wrap: nowrap;
470
+ margin: 0;
471
+ }
472
+
473
+ .navigationControls {
474
+ display: flex;
475
+ justify-content: center;
476
+ align-items: center;
477
+ margin: 20px auto 10px;
478
+ width: 100%;
479
+ gap: 15px;
480
+ }
481
+
482
+ .desktopDotsContainer {
483
+ display: flex;
484
+ justify-content: center;
485
+ align-items: center;
486
+ margin: 15px 0 10px;
487
+ padding: 5px 0;
488
+ width: 100%;
489
+ }
490
+
491
+ /* Mobile bottom navigation - hidden on desktop */
492
+ .mobileNavigationControls {
493
+ display: none;
494
+ justify-content: space-between;
495
+ align-items: center;
496
+ margin: 20px auto 10px;
497
+ width: 100%;
498
+ gap: 5px;
499
+ }
500
+
501
+ /* Add a spacer to center the navigation buttons */
502
+ .mobileControlsSpacer {
503
+ flex: 1;
504
+ }
505
+
506
+ /* Responsive styles */
507
+ @media (max-width: 768px) {
508
+ .projectsSection {
509
+ scroll-margin-top: 70px;
510
+ min-height: calc(100vh);
511
+ padding: 1.5rem 0 4rem;
512
+ }
513
+
514
+ .projectsTitle {
515
+ font-size: 2.2rem;
516
+ }
517
+
518
+ .projectsSubtitle {
519
+ font-size: 0.9rem;
520
+ }
521
+
522
+ .projectsHeader {
523
+ margin-bottom: 2rem;
524
+ }
525
+
526
+ .carouselContainer {
527
+ padding: 0 0.5rem;
528
+ display: block;
529
+ }
530
+
531
+ .carouselControl {
532
+ width: 40px;
533
+ height: 40px;
534
+ }
535
+
536
+ .carouselControl svg {
537
+ width: 18px;
538
+ height: 18px;
539
+ }
540
+
541
+ .projectContent {
542
+ padding: 1.3rem 1.1rem 0rem;
543
+ }
544
+
545
+ .projectLinks {
546
+ padding: 0.8rem 1.1rem 1.3rem;
547
+ gap: 0.7rem;
548
+ }
549
+
550
+ .projectLinks {
551
+ padding: 0.8rem 1.1rem 1.3rem;
552
+ gap: 0.7rem;
553
+ }
554
+
555
+ .prevButton {
556
+ left: -20px;
557
+ }
558
+
559
+ .nextButton {
560
+ right: -20px;
561
+ }
562
+
563
+ :global(.slick-slide > div) {
564
+ margin: 0 0.3rem;
565
+ }
566
+
567
+ /* Hide desktop side buttons */
568
+ .desktopOnly {
569
+ display: none;
570
+ }
571
+
572
+ /* Hide desktop dots */
573
+ .desktopDotsContainer {
574
+ display: none;
575
+ }
576
+
577
+ /* Show mobile navigation */
578
+ .mobileNavigationControls {
579
+ display: flex;
580
+ justify-content: space-between;
581
+ align-items: center;
582
+ width: 100%;
583
+ }
584
+
585
+ .mobileNavigationControls .dotsScrollContainer {
586
+ display: flex;
587
+ justify-content: center;
588
+ }
589
+
590
+ .mobileNavigationControls .centerDots {
591
+ margin: 0 auto;
592
+ }
593
+
594
+ .mobileNavigationControls .carouselControl {
595
+ position: relative;
596
+ top: auto;
597
+ transform: none;
598
+ width: 40px;
599
+ height: 40px;
600
+ flex-shrink: 0;
601
+ z-index: 10;
602
+ }
603
+
604
+ .mobileNavigationControls .carouselControl:hover {
605
+ opacity: 1;
606
+ transform: none;
607
+ }
608
+
609
+ .mobileNavigationControls .disabledButton:hover {
610
+ opacity: 0.6;
611
+ transform: none;
612
+ }
613
+
614
+ .mobileNavigationControls .prevButton,
615
+ .mobileNavigationControls .nextButton {
616
+ left: auto;
617
+ right: auto;
618
+ }
619
+
620
+ .projectStateBadge {
621
+ top: 8px;
622
+ right: 8px;
623
+ }
624
+
625
+ .projectStateLabel {
626
+ font-size: 0.6rem;
627
+ padding: 1px 3px;
628
+ }
629
+
630
+ .mobileNavigationControls .dotsScrollContainer {
631
+ justify-content: flex-start;
632
+ padding-left: 10px;
633
+ min-height: 40px;
634
+ align-items: center;
635
+ }
636
+
637
+ .mobileNavigationControls .centerDots {
638
+ justify-content: center !important;
639
+ padding-left: 0;
640
+ }
641
+
642
+ .mobileNavigationControls .navDot:first-child {
643
+ margin-left: 2px;
644
+ }
645
+
646
+ .mobileNavigationControls .activeDot {
647
+ transform: scale(1.6);
648
+ opacity: 1;
649
+ box-shadow: 0 0 0 2px rgba(var(--ifm-color-primary-rgb), 0.5);
650
+ }
651
+ }
652
+
653
+ @media (max-width: 480px) {
654
+ .projectsSection {
655
+ scroll-margin-top: var(--ifm-scroll-margin-top-mobile);
656
+ padding: 1rem 0 3rem;
657
+ }
658
+
659
+ .projectsContainer {
660
+ padding-left: 1rem;
661
+ padding-right: 1rem;
662
+ }
663
+
664
+ .projectsTitle {
665
+ font-size: 1.9rem;
666
+ }
667
+
668
+ .projectsSubtitle {
669
+ font-size: 0.9rem;
670
+ max-width: 90%;
671
+ }
672
+
673
+ .projectsHeader {
674
+ margin-bottom: 1.5rem;
675
+ }
676
+
677
+ .carouselContainer {
678
+ padding: 0 0.1rem;
679
+ max-width: 100%;
680
+ }
681
+
682
+ .projectImageContainer {
683
+ padding-top: 62%;
684
+ }
685
+
686
+ .carouselControl {
687
+ width: 36px;
688
+ height: 36px;
689
+ }
690
+
691
+ .carouselControl svg {
692
+ width: 16px;
693
+ height: 16px;
694
+ }
695
+
696
+ .projectTitle {
697
+ font-size: 1.5rem;
698
+ }
699
+
700
+ .projectDescription {
701
+ font-size: 0.9rem;
702
+ margin-bottom: 0.4rem;
703
+ }
704
+
705
+ .projectContent {
706
+ padding: 1.2rem 1rem 0rem;
707
+ }
708
+
709
+ .projectLinks {
710
+ padding: 0.8rem 1rem 1.2rem;
711
+ flex-wrap: wrap;
712
+ justify-content: center;
713
+ gap: 0.6rem;
714
+ }
715
+
716
+ .projectTags {
717
+ margin: 0.2rem 0 0.5rem;
718
+ gap: 0.15rem;
719
+ }
720
+
721
+ .projectTag {
722
+ padding: 0.01rem 0.25rem;
723
+ font-size: 0.55rem;
724
+ }
725
+
726
+ .projectLinks {
727
+ padding: 0.8rem 1rem 1.2rem;
728
+ flex-wrap: wrap;
729
+ justify-content: center;
730
+ gap: 0.6rem;
731
+ }
732
+
733
+ .projectLink {
734
+ padding: 0.32rem 0.65rem;
735
+ font-size: 0.75rem;
736
+ flex: 0 1 auto;
737
+ justify-content: center;
738
+ min-width: 85px;
739
+ }
740
+
741
+ :global(.slick-slide) {
742
+ width: 100vw !important;
743
+ max-width: 550px;
744
+ margin: 0 auto;
745
+ }
746
+
747
+ :global(.slick-slide > div) {
748
+ margin: 0;
749
+ width: 100%;
750
+ }
751
+
752
+ :global(.slick-track) {
753
+ display: flex !important;
754
+ justify-content: center;
755
+ }
756
+
757
+ .carouselWrapper {
758
+ margin-bottom: 25px;
759
+ overflow: visible;
760
+ }
761
+
762
+ .prevButton {
763
+ left: -8px;
764
+ }
765
+
766
+ .nextButton {
767
+ right: -8px;
768
+ }
769
+
770
+ .dotsScrollContainer {
771
+ max-width: 45vw;
772
+ padding: 0.6rem 0;
773
+ }
774
+
775
+ .navDot {
776
+ width: 10px;
777
+ height: 10px;
778
+ min-width: 10px;
779
+ min-height: 10px;
780
+ margin: 0 5px;
781
+ }
782
+
783
+ .mobileNavigationControls .carouselControl {
784
+ width: 32px;
785
+ height: 32px;
786
+ min-width: 32px;
787
+ }
788
+
789
+ .projectStateBadge {
790
+ top: 6px;
791
+ right: 6px;
792
+ }
793
+
794
+ .projectStateLabel {
795
+ font-size: 0.55rem;
796
+ padding: 0px 3px;
797
+ letter-spacing: 0.3px;
798
+ }
799
+
800
+ .mobileNavigationControls .activeDot {
801
+ box-shadow: 0 0 0 1.5px rgba(var(--ifm-color-primary-rgb), 0.4);
802
+ transform: scale(1.5);
803
+ }
804
+ }
805
+
806
+ /* Accessibility */
807
+ @media (prefers-reduced-motion: reduce) {
808
+ .projectsTitle,
809
+ .projectsSubtitle {
810
+ animation: none !important;
811
+ transition: none !important;
812
+ }
813
+
814
+ .navDot,
815
+ .activeDot,
816
+ .carouselCard,
817
+ .projectImage,
818
+ .projectLink,
819
+ .carouselControl {
820
+ transition: none;
821
+ }
822
+
823
+ .carouselCard {
824
+ animation: none;
825
+ }
826
+
827
+ .projectStateLabel {
828
+ transition: none !important;
829
+ }
830
+ }