portosaurus 2.0.2 → 2.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 (91) hide show
  1. package/bin/portosaurus.mjs +14 -327
  2. package/package.json +16 -11
  3. package/src/cli/build.mjs +43 -0
  4. package/src/cli/dev.mjs +31 -0
  5. package/src/cli/init.mjs +135 -0
  6. package/src/cli/serve.mjs +30 -0
  7. package/src/core/buildDocuConfig.mjs +664 -0
  8. package/src/core/{themePlugin.mjs → plugins/themePlugin.mjs} +1 -1
  9. package/src/template/.github/workflows/deploy.yml +52 -0
  10. package/src/template/.nojekyll +0 -0
  11. package/src/template/README.md +58 -0
  12. package/src/template/blog/authors.yml +1 -1
  13. package/src/template/blog/welcome.md +1 -1
  14. package/src/template/config.js +40 -23
  15. package/src/template/package.json +20 -0
  16. package/src/template/static/img/svg/icon-blog.svg +2 -0
  17. package/src/template/static/img/svg/icon-note.svg +2 -0
  18. package/src/{components → theme/components}/AboutSection/index.js +22 -13
  19. package/src/{components → theme/components}/AboutSection/styles.module.css +59 -48
  20. package/src/{components → theme/components}/ContactSection/index.js +31 -24
  21. package/src/{components → theme/components}/ContactSection/styles.module.css +31 -26
  22. package/src/{components → theme/components}/ExperienceSection/index.js +12 -7
  23. package/src/{components → theme/components}/ExperienceSection/styles.module.css +23 -20
  24. package/src/{components → theme/components}/HeroSection/index.js +9 -11
  25. package/src/{components → theme/components}/HeroSection/styles.module.css +44 -32
  26. package/src/{components → theme/components}/NoteIndex/index.js +10 -3
  27. package/src/{components → theme/components}/Preview/components/PreviewHeader.js +14 -8
  28. package/src/{components → theme/components}/Preview/components/Triggers/Pv.js +32 -7
  29. package/src/{components → theme/components}/Preview/components/Triggers/SrcPv.js +1 -5
  30. package/src/theme/components/Preview/index.js +3 -0
  31. package/src/{components → theme/components}/ProjectsSection/index.js +279 -224
  32. package/src/{components → theme/components}/ProjectsSection/styles.module.css +21 -17
  33. package/src/{components → theme/components}/ScrollToTop/index.js +18 -21
  34. package/src/{components → theme/components}/ScrollToTop/styles.module.css +10 -9
  35. package/src/theme/components/SocialLinks/index.js +125 -0
  36. package/src/{components → theme/components}/SocialLinks/styles.module.css +9 -7
  37. package/src/{components → theme/components}/Tooltip/index.js +4 -1
  38. package/src/theme/config/iconMappings.js +465 -0
  39. package/src/theme/config/metaTags.js +239 -0
  40. package/src/theme/config/prism.js +179 -0
  41. package/src/theme/config/sidebar.js +17 -0
  42. package/src/{css → theme/css}/bootstrap.css +0 -1
  43. package/src/theme/css/catppuccin.css +618 -0
  44. package/src/{css → theme/css}/custom.css +3 -9
  45. package/src/{css → theme/css}/tasks.css +43 -37
  46. package/src/theme/{MDXComponents.js → overrides/MDXComponents.js} +3 -3
  47. package/src/theme/{Root.js → overrides/Root.js} +2 -4
  48. package/src/{pages → theme/pages}/index.js +23 -39
  49. package/src/theme/pages/notes.js +83 -0
  50. package/src/{pages → theme/pages}/tasks.js +115 -56
  51. package/src/{core/client-utils → theme/utils}/HashNavigation.js +60 -49
  52. package/src/{core/client-utils → theme/utils}/updateTitle.js +21 -25
  53. package/src/{core/build-utils → utils/build}/cssUtils.mjs +5 -3
  54. package/src/{core/build-utils → utils/build}/generateFavicon.mjs +44 -12
  55. package/src/{core/build-utils → utils/build}/generateRobotsTxt.mjs +4 -3
  56. package/src/{core/build-utils → utils/build}/iconExtractor.mjs +7 -3
  57. package/src/utils/build/imageDownloader.mjs +159 -0
  58. package/src/{core/build-utils → utils/build}/imageProcessor.mjs +5 -6
  59. package/src/utils/helpers.mjs +153 -0
  60. package/src/utils/logger.mjs +53 -0
  61. package/src/utils/packageManager.mjs +88 -0
  62. package/src/components/Preview/index.js +0 -3
  63. package/src/components/SocialLinks/index.js +0 -130
  64. package/src/config/iconMappings.js +0 -329
  65. package/src/config/metaTags.js +0 -240
  66. package/src/config/prism.js +0 -179
  67. package/src/config/sidebar.js +0 -20
  68. package/src/core/build-utils/imageDownloader.mjs +0 -98
  69. package/src/core/createDocuConf.mjs +0 -490
  70. package/src/core/defaults.mjs +0 -67
  71. package/src/core/logger.mjs +0 -17
  72. package/src/core/packageManager.mjs +0 -72
  73. package/src/css/catppuccin.css +0 -632
  74. package/src/pages/notes.js +0 -87
  75. /package/src/template/notes/{welcome.md → welcome.mdx} +0 -0
  76. /package/src/{components → theme/components}/NoteIndex/styles.module.css +0 -0
  77. /package/src/{components → theme/components}/Preview/components/FeedbackStates.js +0 -0
  78. /package/src/{components → theme/components}/Preview/components/FileTabs.js +0 -0
  79. /package/src/{components → theme/components}/Preview/components/Triggers/index.js +0 -0
  80. /package/src/{components → theme/components}/Preview/components/ViewerWindow.js +0 -0
  81. /package/src/{components → theme/components}/Preview/hooks/useDeepLinkHash.js +0 -0
  82. /package/src/{components → theme/components}/Preview/hooks/useDockLayout.js +0 -0
  83. /package/src/{components → theme/components}/Preview/hooks/useFileFetch.js +0 -0
  84. /package/src/{components → theme/components}/Preview/renderers/CodeRenderer.js +0 -0
  85. /package/src/{components → theme/components}/Preview/renderers/ImageRenderer.js +0 -0
  86. /package/src/{components → theme/components}/Preview/renderers/PdfRenderer.js +0 -0
  87. /package/src/{components → theme/components}/Preview/renderers/WebRenderer.js +0 -0
  88. /package/src/{components → theme/components}/Preview/state/index.js +0 -0
  89. /package/src/{components → theme/components}/Preview/styles.module.css +0 -0
  90. /package/src/{components → theme/components}/Preview/utils/index.js +0 -0
  91. /package/src/{components → theme/components}/Tooltip/styles.module.css +0 -0
@@ -1,17 +1,19 @@
1
1
  import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
2
- import { iconMap } from "@site/src/config/iconMappings";
2
+ import { iconMap } from "../../config/iconMappings";
3
3
  import { FaQuestionCircle } from "react-icons/fa";
4
- import styles from './styles.module.css';
4
+ import styles from "./styles.module.css";
5
5
 
6
6
  const sortEmail = (links) => {
7
7
  return [...links].sort((a, b) => {
8
- const isEmailA = a.url?.startsWith('mailto:') ||
9
- a.icon?.toLowerCase().includes('email') ||
10
- a.name?.toLowerCase().includes('email');
8
+ const isEmailA =
9
+ a.url?.startsWith("mailto:") ||
10
+ a.icon?.toLowerCase().includes("email") ||
11
+ a.name?.toLowerCase().includes("email");
11
12
 
12
- const isEmailB = b.url?.startsWith('mailto:') ||
13
- b.icon?.toLowerCase().includes('email') ||
14
- b.name?.toLowerCase().includes('email');
13
+ const isEmailB =
14
+ b.url?.startsWith("mailto:") ||
15
+ b.icon?.toLowerCase().includes("email") ||
16
+ b.name?.toLowerCase().includes("email");
15
17
 
16
18
  if (isEmailA && !isEmailB) return -1;
17
19
  if (!isEmailA && isEmailB) return 1;
@@ -24,31 +26,40 @@ export default function ContactSection({ id, className, title, subtitle }) {
24
26
  const { siteConfig } = useDocusaurusContext();
25
27
  const { customFields } = siteConfig;
26
28
  let socialLinks = customFields.socialLinks.links || [];
27
-
29
+
28
30
  socialLinks = sortEmail(socialLinks);
29
31
 
30
32
  return (
31
- <div id={id} className={`${styles.contactSection} ${className || ''}`} role="region" aria-label="Contact section">
33
+ <div
34
+ id={id}
35
+ className={`${styles.contactSection} ${className || ""}`}
36
+ role="region"
37
+ aria-label="Contact section"
38
+ >
32
39
  <div className={styles.contactContainer}>
33
40
  <div className={styles.contactHeader}>
34
- <h2 className={styles.contactTitle}>
35
- {title || "Get In Touch"}
36
- </h2>
41
+ <h2 className={styles.contactTitle}>{title || "Get In Touch"}</h2>
37
42
  <p className={styles.contactSubtitle}>
38
- {subtitle || "Feel free to reach out for collaborations, questions, or just to say hello!"}
43
+ {subtitle ||
44
+ "Feel free to reach out for collaborations, questions, or just to say hello!"}
39
45
  </p>
40
46
  </div>
41
-
47
+
42
48
  {/* SocialCard */}
43
49
  <div className={styles.gridWrapper}>
44
- <div className={styles.socialGrid} role="list" aria-label="Social media and contact links">
50
+ <div
51
+ className={styles.socialGrid}
52
+ role="list"
53
+ aria-label="Social media and contact links"
54
+ >
45
55
  {socialLinks.map((social, index) => {
46
56
  const iconData = iconMap[social.icon] || {};
47
-
57
+
48
58
  const name = social.name || "?";
49
59
  const Icon = iconData.icon || FaQuestionCircle;
50
60
  const iconColor = iconData.color || "var(--ifm-color-primary)";
51
- const description = name === "?" ? "" : (social.desc || `Connect with me on ${name}`);
61
+ const description =
62
+ name === "?" ? "" : social.desc || `Connect with me on ${name}`;
52
63
  const url = social.url;
53
64
 
54
65
  return (
@@ -70,12 +81,8 @@ export default function ContactSection({ id, className, title, subtitle }) {
70
81
  <Icon aria-hidden="true" />
71
82
  </div>
72
83
  )}
73
- <h3 className={styles.socialTitle}>
74
- {name}
75
- </h3>
76
- <p className={styles.socialDesc}>
77
- {description}
78
- </p>
84
+ <h3 className={styles.socialTitle}>{name}</h3>
85
+ <p className={styles.socialDesc}>{description}</p>
79
86
  </a>
80
87
  );
81
88
  })}
@@ -1,13 +1,12 @@
1
-
2
1
  /* Animations */
3
2
  @keyframes slideUp {
4
- from {
3
+ from {
5
4
  opacity: 0;
6
- transform: translateY(20px);
5
+ transform: translateY(20px);
7
6
  }
8
- to {
7
+ to {
9
8
  opacity: 1;
10
- transform: translateY(0);
9
+ transform: translateY(0);
11
10
  }
12
11
  }
13
12
 
@@ -22,7 +21,6 @@
22
21
  }
23
22
  }
24
23
 
25
-
26
24
  /* Contact Section styles */
27
25
  .contactSection {
28
26
  scroll-margin-top: var(--ifm-scroll-margin-top);
@@ -70,7 +68,6 @@
70
68
  animation: slideUp 0.5s ease-out 0.2s forwards;
71
69
  }
72
70
 
73
-
74
71
  /* SocialCard */
75
72
  .gridWrapper {
76
73
  display: flex;
@@ -98,7 +95,10 @@
98
95
  padding: 1.3rem 1.2rem;
99
96
  background-color: var(--ifm-card-background-color);
100
97
  opacity: 0;
101
- transition: transform 0.3s ease, box-shadow 0.3s ease, background-color 0.3s ease;
98
+ transition:
99
+ transform 0.3s ease,
100
+ box-shadow 0.3s ease,
101
+ background-color 0.3s ease;
102
102
  animation: fadeIn 0.5s ease-out forwards;
103
103
  animation-delay: calc(0.1s + (var(--card-index, 0) * 0.1s));
104
104
  box-shadow: var(--ifm-global-shadow-lw);
@@ -122,7 +122,7 @@
122
122
  }
123
123
 
124
124
  .socialCard::after {
125
- content: '';
125
+ content: "";
126
126
  position: absolute;
127
127
  bottom: 0;
128
128
  left: 0;
@@ -140,7 +140,9 @@
140
140
  font-size: 3.5rem;
141
141
  margin-bottom: 0.3rem;
142
142
  color: var(--ifm-color-primary);
143
- transition: color 0.3s ease, transform 0.3s ease;
143
+ transition:
144
+ color 0.3s ease,
145
+ transform 0.3s ease;
144
146
  }
145
147
 
146
148
  .socialCard:hover .socialIcon {
@@ -160,7 +162,7 @@
160
162
  }
161
163
 
162
164
  .socialTitle::after {
163
- content: '';
165
+ content: "";
164
166
  position: absolute;
165
167
  bottom: 0;
166
168
  left: 50%;
@@ -181,7 +183,8 @@
181
183
  width: 100%;
182
184
  }
183
185
 
184
- .socialTitle:hover, .socialDesc:hover {
186
+ .socialTitle:hover,
187
+ .socialDesc:hover {
185
188
  text-decoration: none;
186
189
  }
187
190
 
@@ -190,7 +193,7 @@
190
193
  .socialCard {
191
194
  width: 140px;
192
195
  }
193
-
196
+
194
197
  .socialGrid {
195
198
  gap: 1.1rem;
196
199
  }
@@ -200,7 +203,7 @@
200
203
  .socialCard {
201
204
  width: 150px;
202
205
  }
203
-
206
+
204
207
  .socialGrid {
205
208
  gap: 1rem;
206
209
  max-width: 100%;
@@ -212,43 +215,43 @@
212
215
  scroll-margin-top: 70px;
213
216
  padding: 0.5rem 0 4rem;
214
217
  }
215
-
218
+
216
219
  .contactContainer {
217
220
  padding: 0;
218
221
  }
219
-
222
+
220
223
  .contactHeader {
221
224
  margin-bottom: 1.2rem;
222
225
  margin-top: 0rem;
223
226
  }
224
-
227
+
225
228
  .contactTitle {
226
229
  font-size: 2.2rem;
227
230
  }
228
-
231
+
229
232
  .contactSubtitle {
230
233
  font-size: 0.9rem;
231
234
  }
232
-
235
+
233
236
  .socialCard {
234
237
  width: 150px;
235
238
  min-height: 150px;
236
239
  padding: 1.2rem 1.2rem;
237
240
  }
238
-
241
+
239
242
  .socialIcon {
240
243
  font-size: 3rem;
241
244
  margin-bottom: 0.25rem;
242
245
  }
243
-
246
+
244
247
  .socialTitle {
245
248
  font-size: 1.5rem;
246
249
  }
247
-
250
+
248
251
  .socialGrid {
249
252
  padding: 0 1rem;
250
253
  }
251
-
254
+
252
255
  .gridWrapper {
253
256
  margin-top: 1rem;
254
257
  }
@@ -259,7 +262,7 @@
259
262
  scroll-margin-top: var(--ifm-scroll-margin-top-mobile);
260
263
  padding: 0rem 0 3rem;
261
264
  }
262
-
265
+
263
266
  .contactContainer {
264
267
  padding: 0;
265
268
  }
@@ -300,7 +303,7 @@
300
303
  top: 1.5px;
301
304
  }
302
305
 
303
- .socialTitle,
306
+ .socialTitle,
304
307
  .socialDesc,
305
308
  .socialCard::after {
306
309
  display: none;
@@ -316,7 +319,9 @@
316
319
  }
317
320
 
318
321
  @media (prefers-reduced-motion: reduce) {
319
- .contactTitle, .contactSubtitle, .socialCard {
322
+ .contactTitle,
323
+ .contactSubtitle,
324
+ .socialCard {
320
325
  animation: none !important;
321
326
  transition: none !important;
322
327
  }
@@ -1,22 +1,27 @@
1
- import styles from './styles.module.css';
1
+ import styles from "./styles.module.css";
2
2
 
3
3
  export default function ExperienceSection({ id, className, title, subtitle }) {
4
4
  return (
5
- <div id={id} className={`${styles.experienceSection} ${className || ''}`} role="region" aria-label="Experience section">
5
+ <div
6
+ id={id}
7
+ className={`${styles.experienceSection} ${className || ""}`}
8
+ role="region"
9
+ aria-label="Experience section"
10
+ >
6
11
  <div className={styles.experienceContainer}>
7
12
  <div className={styles.experienceHeader}>
8
- <h2 className={styles.experienceTitle}>
9
- {title || "Experience"}
10
- </h2>
13
+ <h2 className={styles.experienceTitle}>{title || "Experience"}</h2>
11
14
  <p className={styles.experienceSubtitle}>
12
15
  {subtitle || "My professional journey and work experience"}
13
16
  </p>
14
17
  </div>
15
-
18
+
16
19
  <div className={styles.noticeWrapper}>
17
20
  <div className={styles.noticeBox} role="status" aria-live="polite">
18
21
  <p className={styles.noticeText}>Coming Soon!</p>
19
- <p className={styles.noticeDesc}>This section is under construction.</p>
22
+ <p className={styles.noticeDesc}>
23
+ This section is under construction.
24
+ </p>
20
25
  </div>
21
26
  </div>
22
27
  </div>
@@ -1,4 +1,3 @@
1
-
2
1
  .experienceSection {
3
2
  scroll-margin-top: var(--ifm-scroll-margin-top);
4
3
  min-height: calc(100vh - 45px);
@@ -60,7 +59,9 @@
60
59
  border: 1px solid var(--ifm-color-emphasis-300);
61
60
  animation: fadeIn 0.5s ease-out 0.3s forwards;
62
61
  opacity: 0;
63
- transition: transform 0.3s ease, background-color 0.3s ease;
62
+ transition:
63
+ transform 0.3s ease,
64
+ background-color 0.3s ease;
64
65
  width: 100%;
65
66
  max-width: 600px;
66
67
  }
@@ -85,13 +86,13 @@
85
86
 
86
87
  /* Animations */
87
88
  @keyframes slideUp {
88
- from {
89
+ from {
89
90
  opacity: 0;
90
- transform: translateY(20px);
91
+ transform: translateY(20px);
91
92
  }
92
- to {
93
+ to {
93
94
  opacity: 1;
94
- transform: translateY(0);
95
+ transform: translateY(0);
95
96
  }
96
97
  }
97
98
 
@@ -112,24 +113,24 @@
112
113
  scroll-margin-top: 70px;
113
114
  padding: 0.5rem 0 4rem;
114
115
  }
115
-
116
+
116
117
  .experienceContainer {
117
118
  padding: 0 1.5rem;
118
119
  }
119
-
120
+
120
121
  .experienceHeader {
121
122
  margin-bottom: 1.5rem;
122
- margin-top: -2.5rem;
123
+ margin-top: -2.5rem;
123
124
  }
124
-
125
+
125
126
  .experienceTitle {
126
127
  font-size: 2.2rem;
127
128
  }
128
-
129
+
129
130
  .experienceSubtitle {
130
131
  font-size: 0.9rem;
131
132
  }
132
-
133
+
133
134
  .noticeText {
134
135
  font-size: 1.8rem;
135
136
  }
@@ -140,40 +141,42 @@
140
141
  scroll-margin-top: var(--ifm-scroll-margin-top-mobile);
141
142
  padding: 0rem 0 3rem;
142
143
  }
143
-
144
+
144
145
  .experienceContainer {
145
146
  padding: 0 1rem;
146
147
  }
147
-
148
+
148
149
  .experienceHeader {
149
150
  margin-bottom: 1.2rem;
150
151
  margin-top: -2rem;
151
152
  }
152
-
153
+
153
154
  .experienceTitle {
154
155
  font-size: 1.9rem;
155
156
  }
156
-
157
+
157
158
  .experienceSubtitle {
158
159
  font-size: 0.9rem;
159
160
  max-width: 90%;
160
161
  }
161
-
162
+
162
163
  .noticeText {
163
164
  font-size: 1.5rem;
164
165
  }
165
-
166
+
166
167
  .noticeDesc {
167
168
  font-size: 0.9rem;
168
169
  }
169
170
  }
170
171
 
171
172
  @media (prefers-reduced-motion: reduce) {
172
- .experienceTitle, .experienceSubtitle, .noticeBox {
173
+ .experienceTitle,
174
+ .experienceSubtitle,
175
+ .noticeBox {
173
176
  animation: none !important;
174
177
  transition: none !important;
175
178
  }
176
-
179
+
177
180
  .noticeBox {
178
181
  opacity: 1;
179
182
  }
@@ -1,6 +1,6 @@
1
1
  import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
2
- import SocialLinks from "@site/src/components/SocialLinks/index.js";
3
- import styles from './styles.module.css';
2
+ import SocialLinks from "../SocialLinks/index.js";
3
+ import styles from "./styles.module.css";
4
4
 
5
5
  export default function HeroSection({ id, className }) {
6
6
  const { siteConfig } = useDocusaurusContext();
@@ -16,10 +16,10 @@ export default function HeroSection({ id, className }) {
16
16
 
17
17
  return (
18
18
  <div
19
- className={`${styles.hero} ${className || ''}`}
20
- id={id}
21
- role="region"
22
- aria-label="Hero section"
19
+ className={`${styles.hero} ${className || ""}`}
20
+ id={id}
21
+ role="region"
22
+ aria-label="Hero section"
23
23
  >
24
24
  <div className={styles.container}>
25
25
  <div className={styles.leftSection}>
@@ -33,17 +33,15 @@ export default function HeroSection({ id, className }) {
33
33
  <h2 className={styles.profession}>{profession}</h2>
34
34
  <span className={styles.subtitle}>.</span>
35
35
  </div>
36
- <p className={styles.description}>
37
- {description}
38
- </p>
36
+ <p className={styles.description}>{description}</p>
39
37
  <div className={styles.actionRow}>
40
38
  <div className={styles.cta}>
41
- <a
39
+ <a
42
40
  href="#about"
43
41
  className={styles.ctaButton}
44
42
  aria-label="Learn more about me"
45
43
  >
46
- {learnMoreButtonText}
44
+ {learnMoreButtonText}
47
45
  </a>
48
46
  </div>
49
47
  <SocialLinks />
@@ -1,17 +1,21 @@
1
1
  /* Animations */
2
2
  @keyframes fadeIn {
3
- from { opacity: 0; }
4
- to { opacity: 1; }
3
+ from {
4
+ opacity: 0;
5
+ }
6
+ to {
7
+ opacity: 1;
8
+ }
5
9
  }
6
10
 
7
11
  @keyframes slideUp {
8
- from {
12
+ from {
9
13
  opacity: 0;
10
- transform: translateY(20px);
14
+ transform: translateY(20px);
11
15
  }
12
- to {
16
+ to {
13
17
  opacity: 1;
14
- transform: translateY(0);
18
+ transform: translateY(0);
15
19
  }
16
20
  }
17
21
 
@@ -48,7 +52,6 @@
48
52
  }
49
53
  }
50
54
 
51
-
52
55
  /* Base layout */
53
56
  .hero {
54
57
  display: flex;
@@ -68,7 +71,7 @@
68
71
  width: 90%;
69
72
  margin: 0 auto;
70
73
  margin-bottom: 2rem;
71
- padding: 0 2rem;
74
+ padding: 0 2rem;
72
75
  }
73
76
 
74
77
  /* Left section */
@@ -76,7 +79,7 @@
76
79
  flex: 1;
77
80
  text-align: left;
78
81
  padding-right: 3rem;
79
- padding-left: 1rem;
82
+ padding-left: 1rem;
80
83
  animation: slideInLeft 0.8s ease-out 0.2s both;
81
84
  }
82
85
 
@@ -108,7 +111,7 @@
108
111
  }
109
112
 
110
113
  .title::after {
111
- content: '';
114
+ content: "";
112
115
  position: absolute;
113
116
  width: 0;
114
117
  height: 3px;
@@ -164,7 +167,7 @@
164
167
  }
165
168
 
166
169
  .profession::after {
167
- content: '';
170
+ content: "";
168
171
  position: absolute;
169
172
  width: 0;
170
173
  height: 3px;
@@ -207,13 +210,15 @@
207
210
  .ctaButton {
208
211
  display: inline-block;
209
212
  padding: 0.5rem 1.2rem;
210
- font-size: 0.95rem;
213
+ font-size: 0.95rem;
211
214
  font-weight: 500;
212
215
  text-decoration: none;
213
216
  color: var(--ifm-background-color);
214
217
  background-color: var(--ifm-color-primary);
215
218
  border-radius: var(--ifm-global-radius);
216
- transition: all 0.3s ease, transform 0.2s ease;
219
+ transition:
220
+ all 0.3s ease,
221
+ transform 0.2s ease;
217
222
  border: 2px solid var(--ifm-color-primary);
218
223
  cursor: pointer;
219
224
  outline: none;
@@ -242,18 +247,20 @@
242
247
  display: flex;
243
248
  justify-content: flex-end;
244
249
  margin-top: 0;
245
- padding-right: 2rem;
250
+ padding-right: 2rem;
246
251
  animation: slideInRight 0.8s ease-out 0.3s both;
247
252
  }
248
253
 
249
254
  .profilePic {
250
- height: 270px;
255
+ height: 270px;
251
256
  border-radius: 20%;
252
257
  object-fit: cover;
253
258
  box-shadow: 0 10px 25px var(--ifm-shadow-color);
254
259
  margin-top: -30px;
255
- margin-right: 2rem;
256
- transition: transform 0.5s ease, box-shadow 0.5s ease;
260
+ margin-right: 2rem;
261
+ transition:
262
+ transform 0.5s ease,
263
+ box-shadow 0.5s ease;
257
264
  animation: gentleAppear 0.8s ease-out both;
258
265
  will-change: transform;
259
266
  position: relative;
@@ -266,7 +273,6 @@
266
273
 
267
274
  /* Responsive styles for sections */
268
275
  @media (max-width: 768px) {
269
-
270
276
  .intro {
271
277
  animation: slideUp 0.6s ease-out 0.4s both;
272
278
  }
@@ -393,19 +399,17 @@
393
399
  width: 25px;
394
400
  height: 25px;
395
401
  }
396
-
397
402
  }
398
403
 
399
404
  /* Responsive styles for mobile devices */
400
405
  @media (max-width: 480px) {
401
-
402
406
  .hero {
403
407
  min-height: calc(100vh);
404
408
  padding: 0.5rem 0 2rem;
405
409
  }
406
410
 
407
411
  .rightSection {
408
- margin-top: -2.0rem;
412
+ margin-top: -2rem;
409
413
  margin-bottom: 0;
410
414
  }
411
415
 
@@ -417,8 +421,8 @@
417
421
  box-shadow: 0 6px 15px var(--ifm-shadow-color);
418
422
  }
419
423
 
420
- .title {
421
- font-size: 2.3rem;
424
+ .title {
425
+ font-size: 2.3rem;
422
426
  animation: slideUp 0.5s ease-out 0.3s both;
423
427
  }
424
428
 
@@ -427,13 +431,13 @@
427
431
  animation: slideUp 0.5s ease-out 0.3s both;
428
432
  }
429
433
 
430
- .subtitle {
431
- font-size: 1rem;
432
- margin-right: 0.3rem;
434
+ .subtitle {
435
+ font-size: 1rem;
436
+ margin-right: 0.3rem;
433
437
  }
434
438
 
435
- .profession {
436
- font-size: 1.5rem;
439
+ .profession {
440
+ font-size: 1.5rem;
437
441
  }
438
442
 
439
443
  .description {
@@ -462,10 +466,18 @@
462
466
 
463
467
  /* Consolidated Accessibility */
464
468
  @media (prefers-reduced-motion: reduce) {
465
- .hero, .leftSection, .rightSection, .profilePic,
466
- .intro, .title, .titleComma, .subtitleWrapper, .description,
467
- .actionRow, .socialIcons a {
469
+ .hero,
470
+ .leftSection,
471
+ .rightSection,
472
+ .profilePic,
473
+ .intro,
474
+ .title,
475
+ .titleComma,
476
+ .subtitleWrapper,
477
+ .description,
478
+ .actionRow,
479
+ .socialIcons a {
468
480
  animation: none !important;
469
481
  transition: none !important;
470
482
  }
471
- }
483
+ }
@@ -2,9 +2,9 @@ import { useRef, useState, useEffect } from "react";
2
2
  import Link from "@docusaurus/Link";
3
3
  import useBaseUrl from "@docusaurus/useBaseUrl";
4
4
  import { usePluginData } from "@docusaurus/useGlobalData";
5
- import { iconMap } from "@site/src/config/iconMappings.js";
5
+ import { iconMap } from "../../config/iconMappings.js";
6
6
  import DocCardList from "@theme/DocCardList";
7
- import Tooltip from "@site/src/components/Tooltip/index.js";
7
+ import Tooltip from "../Tooltip/index.js";
8
8
 
9
9
  import { FaBook } from "react-icons/fa";
10
10
  import styles from "./styles.module.css";
@@ -85,7 +85,14 @@ function NoteCard({
85
85
  }}
86
86
  >
87
87
  <strong style={{ fontSize: "0.95em" }}>{title}</strong>
88
- <span style={{ fontSize: "0.85em", opacity: 0.85, fontWeight: 400, textAlign: "left" }}>
88
+ <span
89
+ style={{
90
+ fontSize: "0.85em",
91
+ opacity: 0.85,
92
+ fontWeight: 400,
93
+ textAlign: "left",
94
+ }}
95
+ >
89
96
  {description}
90
97
  </span>
91
98
  </span>