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,471 @@
1
+ /* Animations */
2
+ @keyframes fadeIn {
3
+ from { opacity: 0; }
4
+ to { opacity: 1; }
5
+ }
6
+
7
+ @keyframes slideUp {
8
+ from {
9
+ opacity: 0;
10
+ transform: translateY(20px);
11
+ }
12
+ to {
13
+ opacity: 1;
14
+ transform: translateY(0);
15
+ }
16
+ }
17
+
18
+ @keyframes slideInLeft {
19
+ from {
20
+ opacity: 0;
21
+ transform: translateX(-30px);
22
+ }
23
+ to {
24
+ opacity: 1;
25
+ transform: translateX(0);
26
+ }
27
+ }
28
+
29
+ @keyframes slideInRight {
30
+ from {
31
+ opacity: 0;
32
+ transform: translateX(30px);
33
+ }
34
+ to {
35
+ opacity: 1;
36
+ transform: translateX(0);
37
+ }
38
+ }
39
+
40
+ @keyframes gentleAppear {
41
+ from {
42
+ opacity: 0;
43
+ transform: scale(0.96);
44
+ }
45
+ to {
46
+ opacity: 1;
47
+ transform: scale(1);
48
+ }
49
+ }
50
+
51
+
52
+ /* Base layout */
53
+ .hero {
54
+ display: flex;
55
+ justify-content: center;
56
+ align-items: center;
57
+ min-height: calc(100vh - 60px);
58
+ font-family: var(--ifm-font-family-base);
59
+ animation: fadeIn 0.8s ease-in-out;
60
+ padding: 2rem 0;
61
+ }
62
+
63
+ .container {
64
+ display: flex;
65
+ flex-direction: row;
66
+ align-items: center;
67
+ max-width: 1300px;
68
+ width: 90%;
69
+ margin: 0 auto;
70
+ margin-bottom: 2rem;
71
+ padding: 0 2rem;
72
+ }
73
+
74
+ /* Left section */
75
+ .leftSection {
76
+ flex: 1;
77
+ text-align: left;
78
+ padding-right: 3rem;
79
+ padding-left: 1rem;
80
+ animation: slideInLeft 0.8s ease-out 0.2s both;
81
+ }
82
+
83
+ .intro {
84
+ font-size: 1.1rem;
85
+ font-weight: 500;
86
+ color: var(--ifm-font-color-tertiary);
87
+ font-family: var(--ifm-font-family-base);
88
+ margin-bottom: 0.2rem;
89
+ animation: slideUp 0.6s ease-out 0.4s both;
90
+ }
91
+
92
+ .title {
93
+ font-size: 4.5rem;
94
+ font-weight: 600;
95
+ margin: 0.2rem 0;
96
+ color: var(--ifm-color-primary);
97
+ font-family: var(--ifm-font-family-base);
98
+ animation: slideUp 0.6s ease-out 0.6s both;
99
+ transition: all 0.3s ease;
100
+ position: relative;
101
+ display: inline-block;
102
+ line-height: 1.2;
103
+ }
104
+
105
+ .title:hover {
106
+ color: var(--ifm-color-primary);
107
+ transform: translateY(-2px);
108
+ }
109
+
110
+ .title::after {
111
+ content: '';
112
+ position: absolute;
113
+ width: 0;
114
+ height: 3px;
115
+ bottom: 0;
116
+ left: 0;
117
+ background-color: var(--ifm-color-primary);
118
+ transition: width 0.3s ease;
119
+ }
120
+
121
+ .title:hover::after {
122
+ width: 100%;
123
+ }
124
+
125
+ .titleComma {
126
+ font-size: 1.1rem;
127
+ font-weight: 500;
128
+ color: var(--ifm-font-color-tertiary);
129
+ font-family: var(--ifm-font-family-base);
130
+ margin-left: 0.1rem;
131
+ margin-right: 0.5rem;
132
+ animation: slideUp 0.6s ease-out 0.6s both;
133
+ }
134
+
135
+ /* Subtitle section */
136
+ .subtitleWrapper {
137
+ display: flex;
138
+ align-items: baseline;
139
+ flex-wrap: wrap;
140
+ animation: slideUp 0.6s ease-out 0.8s both;
141
+ }
142
+
143
+ .subtitle {
144
+ font-size: 1.2rem;
145
+ font-weight: 400;
146
+ color: var(--ifm-font-color-tertiary);
147
+ font-family: var(--ifm-font-family-base);
148
+ margin-right: 0.5rem;
149
+ }
150
+
151
+ .profession {
152
+ font-size: 2.9rem;
153
+ font-weight: 550;
154
+ color: var(--ctp-lavender);
155
+ font-family: var(--ifm-font-family-base);
156
+ margin: 0;
157
+ position: relative;
158
+ display: inline-block;
159
+ transition: all 0.3s ease;
160
+ }
161
+
162
+ .profession:hover {
163
+ transform: translateY(-2px);
164
+ }
165
+
166
+ .profession::after {
167
+ content: '';
168
+ position: absolute;
169
+ width: 0;
170
+ height: 3px;
171
+ bottom: 0;
172
+ left: 0;
173
+ background-color: var(--ctp-lavender);
174
+ transition: width 0.3s ease;
175
+ }
176
+
177
+ .profession:hover::after {
178
+ width: 100%;
179
+ }
180
+
181
+ .description {
182
+ margin-top: 1.5rem;
183
+ font-size: 1.1rem;
184
+ line-height: 1.7;
185
+ color: var(--ifm-font-color-tertiary);
186
+ max-width: 600px;
187
+ font-family: var(--ifm-font-family-base);
188
+ text-align: left;
189
+ animation: slideUp 0.6s ease-out 1s both;
190
+ }
191
+
192
+ /* Action row styling */
193
+ .actionRow {
194
+ display: flex;
195
+ align-items: center;
196
+ margin-top: 2.5rem;
197
+ animation: slideUp 0.6s ease-out 1.2s both;
198
+ }
199
+
200
+ .cta {
201
+ margin-top: 0;
202
+ margin-right: 1.8rem;
203
+ display: flex;
204
+ align-items: center;
205
+ }
206
+
207
+ .ctaButton {
208
+ display: inline-block;
209
+ padding: 0.5rem 1.2rem;
210
+ font-size: 0.95rem;
211
+ font-weight: 500;
212
+ text-decoration: none;
213
+ color: var(--ifm-background-color);
214
+ background-color: var(--ifm-color-primary);
215
+ border-radius: 4px;
216
+ transition: all 0.3s ease, transform 0.2s ease;
217
+ border: 2px solid var(--ifm-color-primary);
218
+ cursor: pointer;
219
+ outline: none;
220
+ box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
221
+ }
222
+
223
+ .ctaButton:hover {
224
+ background-color: transparent;
225
+ color: var(--ifm-color-primary);
226
+ transform: translateY(-3px) scale(1.02);
227
+ box-shadow: 0 6px 15px rgba(0, 0, 0, 0.15);
228
+ text-decoration: none;
229
+ }
230
+
231
+ .ctaButton:active {
232
+ transform: translateY(-2px);
233
+ }
234
+
235
+ .ctaButton:focus {
236
+ box-shadow: 0 0 0 3px rgba(var(--ifm-color-primary-rgb), 0.3);
237
+ }
238
+
239
+ /* Right section - Profile image */
240
+ .rightSection {
241
+ flex: 1;
242
+ display: flex;
243
+ justify-content: flex-end;
244
+ margin-top: 0;
245
+ padding-right: 2rem;
246
+ animation: slideInRight 0.8s ease-out 0.3s both;
247
+ }
248
+
249
+ .profilePic {
250
+ height: 270px;
251
+ border-radius: 20%;
252
+ object-fit: cover;
253
+ box-shadow: 0 10px 25px var(--ifm-shadow-color);
254
+ margin-top: -30px;
255
+ margin-right: 2rem;
256
+ transition: transform 0.5s ease, box-shadow 0.5s ease;
257
+ animation: gentleAppear 0.8s ease-out both;
258
+ will-change: transform;
259
+ position: relative;
260
+ }
261
+
262
+ .profilePic:hover {
263
+ transform: scale(1.04) translateY(-8px);
264
+ box-shadow: 0 15px 30px var(--ifm-shadow-color);
265
+ }
266
+
267
+ /* Responsive styles for sections */
268
+ @media (max-width: 768px) {
269
+
270
+ .intro {
271
+ animation: slideUp 0.6s ease-out 0.4s both;
272
+ }
273
+
274
+ .hero {
275
+ min-height: 100vh;
276
+ padding: 1rem 0 3rem;
277
+ display: flex;
278
+ align-items: center;
279
+ justify-content: center;
280
+ box-sizing: border-box;
281
+ }
282
+
283
+ .container {
284
+ flex-direction: column-reverse;
285
+ align-items: center;
286
+ text-align: center;
287
+ width: 90%;
288
+ max-width: 500px;
289
+ height: 100%;
290
+ padding: 0;
291
+ }
292
+
293
+ .rightSection {
294
+ animation: fadeIn 0.8s ease-out both;
295
+ padding-right: 0;
296
+ justify-content: center;
297
+ margin-bottom: 0;
298
+ margin-top: -0.5rem;
299
+ width: 100%;
300
+ }
301
+
302
+ .profilePic {
303
+ animation: gentleAppear 0.7s ease-out both;
304
+ height: 180px;
305
+ margin-top: -20px;
306
+ margin-bottom: 1.2rem;
307
+ margin-right: 0;
308
+ box-shadow: 0 8px 20px var(--ifm-shadow-color);
309
+ }
310
+
311
+ .profilePic:hover {
312
+ transform: scale(1.03);
313
+ box-shadow: 0 6px 15px var(--ifm-shadow-color);
314
+ }
315
+
316
+ .leftSection {
317
+ animation: fadeIn 0.8s ease-out 0.3s both;
318
+ padding-right: 0;
319
+ padding-left: 0;
320
+ width: 100%;
321
+ margin-top: 1rem;
322
+ margin-bottom: 0;
323
+ display: flex;
324
+ flex-direction: column;
325
+ align-items: center;
326
+ }
327
+
328
+ .title {
329
+ animation: slideUp 0.6s ease-out 0.5s both;
330
+ font-size: 3rem;
331
+ margin: 0.2rem 0;
332
+ }
333
+
334
+ .titleComma {
335
+ font-size: 0.9rem;
336
+ animation: slideUp 0.6s ease-out 0.5s both;
337
+ }
338
+
339
+ .subtitleWrapper {
340
+ animation: slideUp 0.6s ease-out 0.6s both;
341
+ justify-content: center;
342
+ margin: 0.2rem 0;
343
+ }
344
+
345
+ .description {
346
+ animation: slideUp 0.6s ease-out 0.7s both;
347
+ margin: 1.2rem auto 0;
348
+ max-width: 95%;
349
+ font-size: 1rem;
350
+ padding: 0;
351
+ text-align: center;
352
+ line-height: 1.5;
353
+ }
354
+
355
+ .actionRow {
356
+ animation: slideUp 0.6s ease-out 0.8s both;
357
+ flex-direction: column;
358
+ align-items: center;
359
+ margin-top: 1.5rem;
360
+ width: 100%;
361
+ }
362
+
363
+ .subtitle {
364
+ font-size: 1.2rem;
365
+ margin-right: 0.4rem;
366
+ }
367
+
368
+ .profession {
369
+ font-size: 2rem;
370
+ }
371
+
372
+ .cta {
373
+ margin-right: 0;
374
+ margin-bottom: 1.2rem;
375
+ width: 100%;
376
+ justify-content: center;
377
+ }
378
+
379
+ /* Social icons in center */
380
+ .socialIcons {
381
+ margin: 0;
382
+ width: 100%;
383
+ justify-content: center;
384
+ height: auto;
385
+ padding-bottom: 0.5rem;
386
+ }
387
+
388
+ .socialIcons a {
389
+ margin: 0 1rem;
390
+ }
391
+
392
+ .socialLink svg {
393
+ width: 25px;
394
+ height: 25px;
395
+ }
396
+
397
+ }
398
+
399
+ /* Responsive styles for mobile devices */
400
+ @media (max-width: 480px) {
401
+
402
+ .hero {
403
+ min-height: calc(100vh);
404
+ padding: 0.5rem 0 2rem;
405
+ }
406
+
407
+ .rightSection {
408
+ margin-top: -2.0rem;
409
+ margin-bottom: 0;
410
+ }
411
+
412
+ .profilePic {
413
+ animation: gentleAppear 0.6s ease-out both;
414
+ height: 160px;
415
+ margin-top: -25px;
416
+ margin-bottom: 1.5rem;
417
+ box-shadow: 0 6px 15px var(--ifm-shadow-color);
418
+ }
419
+
420
+ .title {
421
+ font-size: 2.3rem;
422
+ animation: slideUp 0.5s ease-out 0.3s both;
423
+ }
424
+
425
+ .titleComma {
426
+ font-size: 0.8rem;
427
+ animation: slideUp 0.5s ease-out 0.3s both;
428
+ }
429
+
430
+ .subtitle {
431
+ font-size: 1rem;
432
+ margin-right: 0.3rem;
433
+ }
434
+
435
+ .profession {
436
+ font-size: 1.5rem;
437
+ }
438
+
439
+ .description {
440
+ animation: slideUp 0.5s ease-out 0.5s both;
441
+ margin: 0.7rem auto 0;
442
+ margin-top: 0.5rem;
443
+ max-width: 92%;
444
+ line-height: 1.4;
445
+ font-size: 0.9rem;
446
+ }
447
+
448
+ .actionRow {
449
+ animation: slideUp 0.5s ease-out 0.6s both;
450
+ }
451
+
452
+ .ctaButton {
453
+ padding: 0.4rem 1rem;
454
+ font-size: 0.85rem;
455
+ }
456
+
457
+ .socialLink svg {
458
+ width: 22px;
459
+ height: 22px;
460
+ }
461
+ }
462
+
463
+ /* Consolidated Accessibility */
464
+ @media (prefers-reduced-motion: reduce) {
465
+ .hero, .leftSection, .rightSection, .profilePic,
466
+ .intro, .title, .titleComma, .subtitleWrapper, .description,
467
+ .actionRow, .socialIcons a {
468
+ animation: none !important;
469
+ transition: none !important;
470
+ }
471
+ }
@@ -0,0 +1,119 @@
1
+
2
+ import Link from '@docusaurus/Link';
3
+ import useBaseUrl from '@docusaurus/useBaseUrl';
4
+ import { usePluginData } from '@docusaurus/useGlobalData';
5
+ import { iconMap } from '@site/src/config/iconMappings';
6
+ import DocCardList from '@theme/DocCardList';
7
+
8
+ import { FaBook } from 'react-icons/fa';
9
+ import styles from './styles.module.css';
10
+
11
+
12
+
13
+ function indexNotes() {
14
+ const context = require.context(`@site/notes`, true, /index\.mdx?$|\.mdx?$/);
15
+
16
+ return context.keys()
17
+ .filter(path => {
18
+
19
+ // Skip root index file
20
+ if (path === './index.md' || path === './index.mdx') {
21
+ return false;
22
+ }
23
+
24
+ const pathParts = path.split('/');
25
+ const isTopLevelFile = pathParts.length === 2 && !path.match(/index\.mdx?$/);
26
+ const isTopLevelDir = pathParts.length === 3 && path.match(/index\.mdx?$/);
27
+
28
+ // Keep only top-level files & dirs
29
+ return isTopLevelFile || isTopLevelDir;
30
+
31
+ }).map(path => {
32
+ const pathParts = path.split('/');
33
+ const isTopLevelFile = pathParts.length === 2;
34
+
35
+ // Extract directory or filename
36
+ const slug = isTopLevelFile
37
+ ? path.replace('./', '').replace(/\.mdx?$/, '')
38
+ : pathParts[1];
39
+
40
+ const { frontMatter } = context(path);
41
+
42
+ const title = frontMatter.title || slug.charAt(0).toUpperCase() + slug.slice(1);
43
+ const language = frontMatter.language
44
+ ? frontMatter.language.toLowerCase().replace(/ /g, "").replace(/[\s-]/g, "")
45
+ : slug.toLowerCase() || title.toLowerCase();
46
+ const position = frontMatter.sidebar_position || 999;
47
+
48
+ return {
49
+ title,
50
+ language,
51
+ link: slug,
52
+ position
53
+ };
54
+
55
+ }).sort((a, b) => a.position - b.position);
56
+ }
57
+
58
+
59
+ export default function NoteCards({ buttonText = 'Open Note' }) {
60
+ const notes = indexNotes();
61
+ const { path: docsBasePath } = usePluginData('docusaurus-plugin-content-docs');
62
+
63
+ return (
64
+ <div className={styles.notesGrid} role="list" aria-label="Notes collection"> {
65
+ notes.map(({ title, language, link }, index) => {
66
+
67
+ const noteUrl = useBaseUrl(`${docsBasePath}/${link}`);
68
+ const { icon: Icon = FaBook, color = 'var(--ifm-color-primary)' } = iconMap[language] || iconMap[title.toLowerCase()] || {};
69
+
70
+ return (
71
+ <div
72
+ key={title}
73
+ className={`${styles.noteCard} note-card`}
74
+ style={{ '--card-index': index }}
75
+ role="listitem"
76
+ id={`note-${link}`}
77
+ >
78
+ <div
79
+ className={styles.noteIcon}
80
+ style={{ color }}
81
+ aria-hidden="true"
82
+ >
83
+ <Icon />
84
+ </div>
85
+ <h3 className={styles.noteTitle}>{title}</h3>
86
+ <Link
87
+ className="button button--primary"
88
+ to={noteUrl}
89
+ aria-label={`Open ${title} note`}
90
+ >
91
+ {buttonText}
92
+ </Link>
93
+ </div>
94
+ );
95
+ })}
96
+ </div>
97
+ );
98
+ }
99
+
100
+
101
+ // List Topics inside Individual Notes
102
+ export function TopicList({
103
+ description = 'Click on the links below to explore the topics.',
104
+ style = {
105
+ marginTop: '-2.5rem',
106
+ marginBottom: '2.5rem',
107
+ textAlign: 'center'
108
+ }
109
+ }) {
110
+ return (
111
+ <>
112
+ <p
113
+ style={style}
114
+ dangerouslySetInnerHTML={{__html: description}} // Well we are giving it only HTML :)
115
+ />
116
+ <DocCardList/>
117
+ </>
118
+ );
119
+ }
@@ -0,0 +1,143 @@
1
+ @keyframes fadeIn {
2
+ from {
3
+ opacity: 0;
4
+ transform: translateY(20px);
5
+ }
6
+ to {
7
+ opacity: 1;
8
+ transform: translateY(0);
9
+ }
10
+ }
11
+
12
+
13
+ .notesGrid {
14
+ display: flex;
15
+ flex-wrap: wrap;
16
+ gap: 1.5rem;
17
+ justify-content: center;
18
+ margin: 2rem 0;
19
+ }
20
+
21
+ .noteCard {
22
+ width: 200px;
23
+ overflow: hidden;
24
+ border-radius: 8px;
25
+ text-align: center;
26
+ padding: 1.2rem;
27
+ background-color: var(--ifm-card-background-color);
28
+ opacity: 0;
29
+ transition: transform 0.3s ease, scale 0.3s ease;
30
+ animation: fadeIn 0.5s ease-out forwards;
31
+ animation-delay: calc(0.2s + (var(--card-index, 0) * 0.1s));
32
+ }
33
+
34
+ .noteCard:hover {
35
+ transform: translateY(-5px);
36
+ scale: 1.05;
37
+ }
38
+
39
+ .noteIcon {
40
+ font-size: 69px;
41
+ margin-bottom: -1rem;
42
+ transition: transform 0.2s ease;
43
+ }
44
+
45
+ .noteCard:hover .noteIcon {
46
+ transform: scale(1.1);
47
+ }
48
+
49
+ .noteTitle {
50
+ margin-bottom: 1.8rem;
51
+ color: var(--ifm-font-color-base);
52
+ font-size: 1.8rem;
53
+ font-weight: 600;
54
+ }
55
+
56
+ @media (max-width: 768px) {
57
+ .noteCard {
58
+ width: 150px;
59
+ padding: 0.8rem;
60
+ }
61
+
62
+ .noteIcon {
63
+ font-size: 45px;
64
+ margin-bottom: -0.8rem;
65
+ }
66
+
67
+ .noteTitle {
68
+ font-size: 1.3rem;
69
+ margin-bottom: 1.5rem;
70
+ }
71
+ }
72
+
73
+ @media (max-width: 480px) {
74
+ .notesGrid {
75
+ gap: 0.8rem;
76
+ margin: 1.2rem 0;
77
+ }
78
+
79
+ .noteCard {
80
+ width: 100%;
81
+ max-width: 300px;
82
+ padding: 0.5rem 1rem;
83
+ display: flex;
84
+ flex-direction: row;
85
+ align-items: center;
86
+ text-align: left;
87
+ border-radius: 10px;
88
+ transition: transform 0.3s ease, background-color 0.3s ease;
89
+ }
90
+
91
+ .noteCard:hover {
92
+ transform: none;
93
+ scale: 1;
94
+ }
95
+
96
+ .noteCard:hover .noteIcon {
97
+ transform: none;
98
+ }
99
+
100
+ .noteCard:active {
101
+ transform: scale(0.98);
102
+ background-color: var(--ifm-hover-overlay);
103
+ }
104
+
105
+ .noteIcon {
106
+ font-size: 35px;
107
+ margin-bottom: 0;
108
+ margin-right: 0.8rem;
109
+ flex-shrink: 0;
110
+ position: relative;
111
+ top: 4px;
112
+ }
113
+
114
+ .noteTitle {
115
+ font-size: 1.1rem;
116
+ margin-bottom: 0;
117
+ flex: 1;
118
+ }
119
+
120
+ .noteCard > a {
121
+ margin-left: auto;
122
+ padding: 0.35rem 0.7rem;
123
+ font-size: 0.85rem;
124
+ border-radius: 5px;
125
+ }
126
+
127
+ .noteCard:active .noteIcon {
128
+ transform: scale(1.1);
129
+ }
130
+ }
131
+
132
+ @media (prefers-reduced-motion: reduce) {
133
+ .noteCard {
134
+ animation: none !important;
135
+ opacity: 1;
136
+ transition: none !important;
137
+ }
138
+
139
+ .noteIcon {
140
+ transition: none !important;
141
+ }
142
+ }
143
+