sexyjekyll-theme 1.0.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 (83) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +82 -0
  3. data/LICENSE +21 -0
  4. data/README.de.md +276 -0
  5. data/README.es.md +276 -0
  6. data/README.fr.md +276 -0
  7. data/README.it.md +219 -0
  8. data/README.md +276 -0
  9. data/_includes/critical-css.html +4 -0
  10. data/_includes/footer.html +81 -0
  11. data/_includes/head.html +88 -0
  12. data/_includes/nav.html +21 -0
  13. data/_includes/related-posts.html +75 -0
  14. data/_includes/social-icon.html +98 -0
  15. data/_includes/structured-data-article.html +55 -0
  16. data/_includes/structured-data-breadcrumb.html +28 -0
  17. data/_includes/structured-data-person.html +82 -0
  18. data/_includes/structured-data-website.html +23 -0
  19. data/_layouts/blog.html +101 -0
  20. data/_layouts/category.html +66 -0
  21. data/_layouts/contact.html +26 -0
  22. data/_layouts/default.html +13 -0
  23. data/_layouts/home.html +30 -0
  24. data/_layouts/llms.txt +34 -0
  25. data/_layouts/post.html +99 -0
  26. data/_plugins/auto_related_posts.rb +153 -0
  27. data/_plugins/category_generator.rb +27 -0
  28. data/_plugins/llms_txt_generator.rb +45 -0
  29. data/_plugins/localized_date.rb +52 -0
  30. data/assets/bg.jpeg +0 -0
  31. data/assets/bg.webp +0 -0
  32. data/assets/debug/blocco.png +0 -0
  33. data/assets/debug/categorie.jpeg +0 -0
  34. data/assets/debug/categorie.png +0 -0
  35. data/assets/debug/codice.png +0 -0
  36. data/assets/debug/contrasto.jpeg +0 -0
  37. data/assets/debug/dipendenze.png +0 -0
  38. data/assets/debug/h1.png +0 -0
  39. data/assets/debug/pagespeed.png +0 -0
  40. data/assets/debug/ricerca.png +0 -0
  41. data/assets/debug/richieste.png +0 -0
  42. data/assets/favicon/android-icon-144x144.png +0 -0
  43. data/assets/favicon/android-icon-192x192.png +0 -0
  44. data/assets/favicon/android-icon-36x36.png +0 -0
  45. data/assets/favicon/android-icon-48x48.png +0 -0
  46. data/assets/favicon/android-icon-72x72.png +0 -0
  47. data/assets/favicon/android-icon-96x96.png +0 -0
  48. data/assets/favicon/apple-icon-114x114.png +0 -0
  49. data/assets/favicon/apple-icon-120x120.png +0 -0
  50. data/assets/favicon/apple-icon-144x144.png +0 -0
  51. data/assets/favicon/apple-icon-152x152.png +0 -0
  52. data/assets/favicon/apple-icon-180x180.png +0 -0
  53. data/assets/favicon/apple-icon-57x57.png +0 -0
  54. data/assets/favicon/apple-icon-60x60.png +0 -0
  55. data/assets/favicon/apple-icon-72x72.png +0 -0
  56. data/assets/favicon/apple-icon-76x76.png +0 -0
  57. data/assets/favicon/apple-icon-precomposed.png +0 -0
  58. data/assets/favicon/apple-icon.png +0 -0
  59. data/assets/favicon/favicon-16x16.png +0 -0
  60. data/assets/favicon/favicon-32x32.png +0 -0
  61. data/assets/favicon/favicon-96x96.png +0 -0
  62. data/assets/favicon/favicon.ico +0 -0
  63. data/assets/favicon/ms-icon-144x144.png +0 -0
  64. data/assets/favicon/ms-icon-150x150.png +0 -0
  65. data/assets/favicon/ms-icon-310x310.png +0 -0
  66. data/assets/favicon/ms-icon-70x70.png +0 -0
  67. data/assets/images/aiact.jpeg +0 -0
  68. data/assets/images/aiethics.jpeg +0 -0
  69. data/assets/images/green.jpeg +0 -0
  70. data/assets/images/jekyll.webp +0 -0
  71. data/assets/images/parenting.jpeg +0 -0
  72. data/assets/images/seo-generativo.jpeg +0 -0
  73. data/assets/images/upskilling-ai.jpeg +0 -0
  74. data/assets/pic.jpeg +0 -0
  75. data/assets/screens/screen.jpeg +0 -0
  76. data/assets/screens/screen2.jpeg +0 -0
  77. data/css/animations.css +404 -0
  78. data/css/style.css +2250 -0
  79. data/css/syntax-dark.css +157 -0
  80. data/css/syntax-light.css +157 -0
  81. data/js/main.js +706 -0
  82. data/js/simple-jekyll-search.min.js +6 -0
  83. metadata +254 -0
data/css/style.css ADDED
@@ -0,0 +1,2250 @@
1
+ /* =======================
2
+ CSS Variables & Reset
3
+ ======================= */
4
+ /* Updated: 2025-10-15 */
5
+
6
+ :root {
7
+ /* Dark Mode Palette (Default) */
8
+ --bg-primary: #0f0f23;
9
+ --bg-secondary: rgba(20, 20, 40, 0.7);
10
+ --bg-elevated: rgba(30, 30, 60, 0.8);
11
+ --text-primary: #ffffff;
12
+ --text-secondary: #e0e0ff;
13
+ --text-tertiary: #a0a0d0;
14
+ --nav-bg: rgba(15, 15, 35, 0.6);
15
+
16
+ /* Vibrant Colors */
17
+ --color-purple: #a855f7;
18
+ --color-pink: #ec4899;
19
+ --color-blue: #3b82f6;
20
+ --color-cyan: #06b6d4;
21
+ --color-orange: #f97316;
22
+ --color-yellow: #facc15;
23
+
24
+ /* Accent */
25
+ --accent: #a855f7;
26
+ --accent-hover: #c084fc;
27
+ --border: rgba(168, 85, 247, 0.2);
28
+
29
+ /* Typography - Modern & Clean */
30
+ --font-heading: 'Sora', system-ui, sans-serif;
31
+ --font-body: 'Plus Jakarta Sans', system-ui, sans-serif;
32
+
33
+ /* Spacing */
34
+ --spacing-xs: 0.5rem;
35
+ --spacing-sm: 1rem;
36
+ --spacing-md: 1.5rem;
37
+ --spacing-lg: 2rem;
38
+ --spacing-xl: 3rem;
39
+ --spacing-2xl: 4rem;
40
+ --spacing-3xl: 6rem;
41
+
42
+ /* Border Radius */
43
+ --radius-sm: 0.5rem;
44
+ --radius-md: 1rem;
45
+ --radius-lg: 1.5rem;
46
+ --radius-xl: 2rem;
47
+ --radius-full: 9999px;
48
+
49
+ /* Transitions */
50
+ --transition-fast: 0.15s cubic-bezier(0.4, 0, 0.2, 1);
51
+ --transition-base: 0.3s cubic-bezier(0.4, 0, 0.2, 1);
52
+ --transition-slow: 0.5s cubic-bezier(0.4, 0, 0.2, 1);
53
+ }
54
+
55
+
56
+ /* Reset */
57
+ *, *::before, *::after {
58
+ box-sizing: border-box;
59
+ margin: 0;
60
+ padding: 0;
61
+ }
62
+
63
+ html {
64
+ scroll-behavior: smooth;
65
+ -webkit-font-smoothing: antialiased;
66
+ -moz-osx-font-smoothing: grayscale;
67
+ }
68
+
69
+ body {
70
+ font-family: var(--font-body);
71
+ background-color: var(--bg-primary);
72
+ background-image: url('/assets/bg.webp');
73
+ background-size: cover;
74
+ background-position: center;
75
+ background-repeat: no-repeat;
76
+ background-attachment: fixed;
77
+ color: var(--text-primary);
78
+ line-height: 1.7;
79
+ font-size: 18px;
80
+ overflow-x: hidden;
81
+ position: relative;
82
+ }
83
+
84
+ /* Fix per API deprecata H1UserAgentFontSizeInSection */
85
+ h1 {
86
+ font-size: inherit;
87
+ }
88
+
89
+ section h1 {
90
+ font-size: clamp(3rem, 8vw, 6rem);
91
+ }
92
+
93
+ /* Accessibility: Respect reduced motion preference */
94
+ @media (prefers-reduced-motion: reduce) {
95
+ *, *::before, *::after {
96
+ animation-duration: 0.01ms !important;
97
+ animation-iteration-count: 1 !important;
98
+ transition-duration: 0.01ms !important;
99
+ scroll-behavior: auto !important;
100
+ }
101
+ }
102
+
103
+ /* =======================
104
+ Skip to Content Link (Accessibility)
105
+ ======================= */
106
+
107
+ .skip-to-content {
108
+ position: absolute;
109
+ top: -100px;
110
+ left: 50%;
111
+ transform: translateX(-50%);
112
+ z-index: 10000;
113
+ background: linear-gradient(135deg, var(--color-purple) 0%, var(--color-pink) 100%);
114
+ color: #ffffff;
115
+ padding: 1rem 2rem;
116
+ text-decoration: none;
117
+ font-weight: 700;
118
+ font-size: 1.1rem;
119
+ border-radius: var(--radius-md);
120
+ box-shadow: 0 10px 40px rgba(168, 85, 247, 0.6);
121
+ transition: top var(--transition-base);
122
+ font-family: var(--font-heading);
123
+ white-space: nowrap;
124
+ }
125
+
126
+ .skip-to-content:focus {
127
+ top: var(--spacing-md);
128
+ outline: 3px solid var(--color-cyan);
129
+ outline-offset: 3px;
130
+ }
131
+
132
+ /* =======================
133
+ Navigation (Sticky)
134
+ ======================= */
135
+
136
+ .nav {
137
+ position: sticky;
138
+ top: 0;
139
+ left: 0;
140
+ right: 0;
141
+ z-index: 1000;
142
+ background: var(--nav-bg);
143
+ backdrop-filter: blur(20px) saturate(180%);
144
+ border-bottom: 1px solid var(--border);
145
+ transition: all var(--transition-base);
146
+ box-shadow: 0 4px 30px rgba(0, 0, 0, 0.15);
147
+ }
148
+
149
+ .nav-container {
150
+ max-width: 1400px;
151
+ margin: 0 auto;
152
+ padding: 1.5rem var(--spacing-lg);
153
+ display: flex;
154
+ justify-content: space-between;
155
+ align-items: center;
156
+ }
157
+
158
+ .nav-logo {
159
+ font-family: var(--font-heading);
160
+ font-size: 2rem;
161
+ font-weight: 800;
162
+ background: linear-gradient(135deg, var(--color-purple) 0%, var(--color-pink) 100%);
163
+ -webkit-background-clip: text;
164
+ -webkit-text-fill-color: transparent;
165
+ background-clip: text;
166
+ text-decoration: none;
167
+ transition: transform var(--transition-base);
168
+ display: inline-flex;
169
+ align-items: center;
170
+ }
171
+
172
+ .nav-logo:hover {
173
+ transform: scale(1.05);
174
+ }
175
+
176
+ .nav-logo-image {
177
+ height: 2.5rem;
178
+ width: auto;
179
+ max-width: 12rem;
180
+ object-fit: contain;
181
+ display: block;
182
+ border-radius: 50%;
183
+ }
184
+
185
+ .nav-links {
186
+ display: flex;
187
+ gap: var(--spacing-xl);
188
+ }
189
+
190
+ .nav-link {
191
+ color: var(--text-secondary);
192
+ text-decoration: none;
193
+ font-weight: 600;
194
+ font-size: 1.1rem;
195
+ transition: all var(--transition-base);
196
+ position: relative;
197
+ padding: 0.5rem 0;
198
+ }
199
+
200
+ .nav-link:hover {
201
+ color: var(--text-primary);
202
+ }
203
+
204
+ .nav-link::after {
205
+ content: '';
206
+ position: absolute;
207
+ bottom: 0;
208
+ left: 0;
209
+ width: 0;
210
+ height: 3px;
211
+ background: linear-gradient(90deg, var(--color-purple), var(--color-pink));
212
+ transition: width var(--transition-base);
213
+ border-radius: var(--radius-full);
214
+ }
215
+
216
+ .nav-link:hover::after,
217
+ .nav-link.active::after {
218
+ width: 100%;
219
+ }
220
+
221
+ /* =======================
222
+ Hero Section
223
+ ======================= */
224
+
225
+ .hero {
226
+ min-height: 100vh;
227
+ display: flex;
228
+ align-items: center;
229
+ justify-content: center;
230
+ padding: var(--spacing-3xl) var(--spacing-lg);
231
+ position: relative;
232
+ }
233
+
234
+ .hero-container {
235
+ max-width: 1100px;
236
+ margin: 0 auto;
237
+ width: 100%;
238
+ }
239
+
240
+ .hero-content {
241
+ text-align: center;
242
+ }
243
+
244
+ .hero-title {
245
+ font-size: clamp(3rem, 8vw, 6rem);
246
+ margin-bottom: var(--spacing-xl);
247
+ }
248
+
249
+ .hero-name {
250
+ display: block;
251
+ font-family: var(--font-heading);
252
+ font-size: clamp(3rem, 8vw, 6rem);
253
+ font-weight: 800;
254
+ line-height: 1.1;
255
+ margin-bottom: var(--spacing-md);
256
+ background: linear-gradient(135deg, var(--color-purple) 0%, var(--color-pink) 50%, var(--color-cyan) 100%);
257
+ -webkit-background-clip: text;
258
+ -webkit-text-fill-color: transparent;
259
+ background-clip: text;
260
+ letter-spacing: -0.02em;
261
+ }
262
+
263
+ .hero-role {
264
+ display: block;
265
+ font-family: var(--font-heading);
266
+ font-size: clamp(1.5rem, 4vw, 2.5rem);
267
+ font-weight: 700;
268
+ color: var(--text-secondary);
269
+ margin-bottom: var(--spacing-sm);
270
+ letter-spacing: -0.01em;
271
+ }
272
+
273
+ .hero-subtitle {
274
+ font-size: clamp(1.2rem, 3vw, 1.8rem);
275
+ color: var(--text-secondary);
276
+ margin-bottom: var(--spacing-md);
277
+ font-weight: 500;
278
+ }
279
+
280
+ .company-link {
281
+ color: var(--color-cyan);
282
+ text-decoration: none;
283
+ font-weight: 700;
284
+ transition: all var(--transition-base);
285
+ position: relative;
286
+ }
287
+
288
+ .company-link:hover {
289
+ color: var(--color-pink);
290
+ text-shadow: 0 0 20px rgba(236, 72, 153, 0.5);
291
+ }
292
+
293
+ .hero-tagline {
294
+ font-size: clamp(1rem, 2.5vw, 1.4rem);
295
+ color: var(--text-tertiary);
296
+ margin-bottom: var(--spacing-xl);
297
+ font-style: italic;
298
+ font-weight: 400;
299
+ }
300
+
301
+ .hero-description {
302
+ font-size: clamp(1.2rem, 2.5vw, 1.6rem);
303
+ color: var(--text-secondary);
304
+ line-height: 1.8;
305
+ max-width: 800px;
306
+ margin: 0 auto var(--spacing-2xl);
307
+ font-weight: 500;
308
+ }
309
+
310
+ .hero-cta {
311
+ display: flex;
312
+ justify-content: center;
313
+ gap: var(--spacing-md);
314
+ margin-top: var(--spacing-2xl);
315
+ }
316
+
317
+ /* =======================
318
+ Buttons
319
+ ======================= */
320
+
321
+ .btn {
322
+ display: inline-block;
323
+ padding: 1.2rem 3rem;
324
+ border-radius: var(--radius-full);
325
+ font-weight: 700;
326
+ font-size: 1.2rem;
327
+ text-decoration: none;
328
+ transition: all var(--transition-base);
329
+ cursor: pointer;
330
+ border: none;
331
+ font-family: var(--font-heading);
332
+ letter-spacing: 0.02em;
333
+ }
334
+
335
+ .btn-primary {
336
+ background: linear-gradient(135deg, var(--color-purple) 0%, var(--color-pink) 100%);
337
+ color: var(--text-primary);
338
+ box-shadow: 0 10px 40px rgba(168, 85, 247, 0.4);
339
+ }
340
+
341
+ .btn-primary:hover {
342
+ background: linear-gradient(135deg, var(--color-pink) 0%, var(--color-purple) 100%);
343
+ transform: translateY(-3px) scale(1.05);
344
+ box-shadow: 0 15px 50px rgba(236, 72, 153, 0.6);
345
+ }
346
+
347
+ /* =======================
348
+ About Section
349
+ ======================= */
350
+
351
+ .about {
352
+ padding: var(--spacing-3xl) var(--spacing-lg);
353
+ backdrop-filter: blur(10px);
354
+ position: relative;
355
+ }
356
+
357
+ .about-container {
358
+ max-width: 1000px;
359
+ margin: 0 auto;
360
+ }
361
+
362
+ .section-title {
363
+ font-family: var(--font-heading);
364
+ font-size: clamp(2.5rem, 5vw, 4rem);
365
+ font-weight: 800;
366
+ margin-bottom: var(--spacing-2xl);
367
+ text-align: center;
368
+ background: linear-gradient(135deg, var(--text-primary) 0%, var(--text-secondary) 100%);
369
+ -webkit-background-clip: text;
370
+ -webkit-text-fill-color: transparent;
371
+ background-clip: text;
372
+ letter-spacing: -0.02em;
373
+ }
374
+
375
+ /* About Profile Image */
376
+ .about-profile {
377
+ display: flex;
378
+ justify-content: center;
379
+ margin-bottom: var(--spacing-3xl);
380
+ }
381
+
382
+ .profile-image-wrapper {
383
+ position: relative;
384
+ width: 250px;
385
+ height: 250px;
386
+ display: flex;
387
+ align-items: center;
388
+ justify-content: center;
389
+ }
390
+
391
+ .profile-image {
392
+ width: 100%;
393
+ height: 100%;
394
+ border-radius: 50%;
395
+ object-fit: cover;
396
+ position: relative;
397
+ z-index: 2;
398
+ box-shadow: 0 20px 60px rgba(168, 85, 247, 0.4);
399
+ transition: all var(--transition-base);
400
+ border: 4px solid transparent;
401
+ background:
402
+ linear-gradient(var(--bg-primary), var(--bg-primary)) padding-box,
403
+ linear-gradient(135deg, var(--color-purple), var(--color-pink), var(--color-cyan)) border-box;
404
+ }
405
+
406
+ .profile-image-wrapper:hover .profile-image {
407
+ transform: scale(1.05);
408
+ box-shadow: 0 25px 80px rgba(168, 85, 247, 0.6);
409
+ }
410
+
411
+ .profile-ring {
412
+ position: absolute;
413
+ top: -20px;
414
+ left: -20px;
415
+ right: -20px;
416
+ bottom: -20px;
417
+ border-radius: 50%;
418
+ background: linear-gradient(135deg, var(--color-purple), var(--color-pink), var(--color-cyan));
419
+ opacity: 0.15;
420
+ z-index: 1;
421
+ animation: pulse-ring 3s ease-in-out infinite;
422
+ }
423
+
424
+ @keyframes pulse-ring {
425
+ 0%, 100% {
426
+ transform: scale(1);
427
+ opacity: 0.15;
428
+ }
429
+ 50% {
430
+ transform: scale(1.1);
431
+ opacity: 0.25;
432
+ }
433
+ }
434
+
435
+ .about-text {
436
+ display: flex;
437
+ flex-direction: column;
438
+ gap: var(--spacing-xl);
439
+ }
440
+
441
+ .about-text p {
442
+ font-size: clamp(1.2rem, 2.5vw, 1.5rem);
443
+ color: var(--text-secondary);
444
+ line-height: 1.9;
445
+ font-weight: 500;
446
+ padding: var(--spacing-lg);
447
+ background: rgba(255, 255, 255, 0.03);
448
+ border-radius: var(--radius-lg);
449
+ border: 1px solid rgba(168, 85, 247, 0.1);
450
+ transition: all var(--transition-base);
451
+ }
452
+
453
+ .about-text p:hover {
454
+ background: rgba(255, 255, 255, 0.05);
455
+ border-color: rgba(168, 85, 247, 0.3);
456
+ transform: translateY(-3px);
457
+ }
458
+
459
+ .about-text h2 {
460
+ font-family: var(--font-heading);
461
+ font-size: clamp(1.6rem, 3vw, 2rem);
462
+ font-weight: 700;
463
+ color: var(--text-primary);
464
+ margin-top: var(--spacing-xl);
465
+ margin-bottom: var(--spacing-md);
466
+ background: linear-gradient(135deg, var(--color-purple), var(--color-pink));
467
+ -webkit-background-clip: text;
468
+ -webkit-text-fill-color: transparent;
469
+ background-clip: text;
470
+ }
471
+
472
+ /* =======================
473
+ Contact Section
474
+ ======================= */
475
+
476
+ .contact {
477
+ padding: var(--spacing-3xl) var(--spacing-lg);
478
+ position: relative;
479
+ }
480
+
481
+ .contact-container {
482
+ max-width: 1000px;
483
+ margin: 0 auto;
484
+ text-align: center;
485
+ }
486
+
487
+ .contact-description {
488
+ font-size: clamp(1.2rem, 2.5vw, 1.5rem);
489
+ color: var(--text-secondary);
490
+ line-height: 1.9;
491
+ max-width: 800px;
492
+ margin: 0 auto var(--spacing-2xl);
493
+ font-weight: 500;
494
+ }
495
+
496
+ .contact-links {
497
+ display: grid;
498
+ grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
499
+ gap: var(--spacing-lg);
500
+ max-width: 900px;
501
+ margin: 0 auto;
502
+ }
503
+
504
+ .contact-link {
505
+ display: flex;
506
+ align-items: center;
507
+ justify-content: center;
508
+ gap: var(--spacing-md);
509
+ padding: var(--spacing-lg) var(--spacing-xl);
510
+ background: rgba(255, 255, 255, 0.05);
511
+ border: 2px solid var(--border);
512
+ border-radius: var(--radius-lg);
513
+ color: var(--text-primary);
514
+ text-decoration: none;
515
+ font-weight: 700;
516
+ font-size: 1.1rem;
517
+ transition: all var(--transition-base);
518
+ backdrop-filter: blur(10px);
519
+ }
520
+
521
+ .contact-link:hover {
522
+ background: linear-gradient(135deg, rgba(168, 85, 247, 0.2) 0%, rgba(236, 72, 153, 0.2) 100%);
523
+ border-color: var(--color-purple);
524
+ transform: translateY(-5px) scale(1.03);
525
+ box-shadow: 0 15px 40px rgba(168, 85, 247, 0.3);
526
+ }
527
+
528
+ .contact-icon {
529
+ width: 28px;
530
+ height: 28px;
531
+ transition: transform var(--transition-base);
532
+ }
533
+
534
+ .contact-link:hover .contact-icon {
535
+ transform: scale(1.2) rotate(5deg);
536
+ }
537
+
538
+ /* =======================
539
+ Footer
540
+ ======================= */
541
+
542
+ .footer {
543
+ padding: var(--spacing-3xl) var(--spacing-lg) var(--spacing-xl);
544
+ background: var(--nav-bg);
545
+ border-top: 1px solid var(--border);
546
+ backdrop-filter: blur(10px);
547
+ margin-top: var(--spacing-3xl);
548
+ }
549
+
550
+ .footer-container {
551
+ max-width: 1400px;
552
+ margin: 0 auto;
553
+ }
554
+
555
+ .footer-grid {
556
+ display: grid;
557
+ grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
558
+ gap: var(--spacing-2xl);
559
+ margin-bottom: var(--spacing-2xl);
560
+ padding-bottom: var(--spacing-2xl);
561
+ border-bottom: 1px solid var(--border);
562
+ }
563
+
564
+ .footer-section {
565
+ display: flex;
566
+ flex-direction: column;
567
+ gap: var(--spacing-md);
568
+ }
569
+
570
+ .footer-title {
571
+ font-family: var(--font-heading);
572
+ font-size: 1rem;
573
+ font-weight: 700;
574
+ color: var(--text-primary);
575
+ margin: 0;
576
+ text-transform: uppercase;
577
+ letter-spacing: 0.05em;
578
+ }
579
+
580
+ .footer-description {
581
+ color: var(--text-secondary);
582
+ font-size: 0.9rem;
583
+ line-height: 1.6;
584
+ margin: 0;
585
+ }
586
+
587
+ .footer-links {
588
+ list-style: none;
589
+ padding: 0;
590
+ margin: 0;
591
+ display: flex;
592
+ flex-direction: column;
593
+ gap: var(--spacing-sm);
594
+ }
595
+
596
+ .footer-links a {
597
+ color: var(--text-secondary);
598
+ text-decoration: none;
599
+ font-size: 0.9rem;
600
+ transition: color var(--transition-base);
601
+ }
602
+
603
+ .footer-links a:hover {
604
+ color: var(--color-purple);
605
+ }
606
+
607
+ .footer-contact-list {
608
+ list-style: none;
609
+ padding: 0;
610
+ margin: 0;
611
+ display: flex;
612
+ flex-direction: column;
613
+ gap: var(--spacing-sm);
614
+ }
615
+
616
+ .footer-contact-link {
617
+ display: flex;
618
+ align-items: center;
619
+ gap: var(--spacing-sm);
620
+ color: var(--text-secondary);
621
+ text-decoration: none;
622
+ font-size: 0.9rem;
623
+ transition: color var(--transition-base);
624
+ padding: var(--spacing-xs) 0;
625
+ }
626
+
627
+ .contact-icon {
628
+ display: inline-flex;
629
+ align-items: center;
630
+ justify-content: center;
631
+ flex-shrink: 0;
632
+ width: 18px;
633
+ height: 18px;
634
+ }
635
+
636
+ .contact-icon svg {
637
+ width: 18px;
638
+ height: 18px;
639
+ flex-shrink: 0;
640
+ }
641
+
642
+ .contact-label {
643
+ color: var(--text-secondary);
644
+ }
645
+
646
+ .footer-contact-link:hover {
647
+ color: var(--color-purple);
648
+ }
649
+
650
+ .footer-contact-link:hover .contact-label {
651
+ color: var(--color-purple);
652
+ }
653
+
654
+ .footer-bottom {
655
+ display: flex;
656
+ justify-content: space-between;
657
+ align-items: center;
658
+ flex-wrap: wrap;
659
+ gap: var(--spacing-md);
660
+ }
661
+
662
+ .footer-license {
663
+ display: flex;
664
+ align-items: center;
665
+ gap: var(--spacing-sm);
666
+ color: var(--text-tertiary);
667
+ font-size: 0.875rem;
668
+ }
669
+
670
+ .cc-license {
671
+ display: flex;
672
+ align-items: center;
673
+ gap: var(--spacing-xs);
674
+ color: var(--text-secondary);
675
+ text-decoration: none;
676
+ padding: 0.4rem 0.8rem;
677
+ border-radius: var(--radius-md);
678
+ background: var(--bg-secondary);
679
+ border: 1px solid var(--border);
680
+ transition: all var(--transition-base);
681
+ }
682
+
683
+ .cc-license:hover {
684
+ background: var(--bg-elevated);
685
+ border-color: var(--color-purple);
686
+ color: var(--color-purple);
687
+ }
688
+
689
+ .separator {
690
+ color: var(--text-tertiary);
691
+ }
692
+
693
+ .footer-tagline {
694
+ color: var(--text-tertiary);
695
+ font-size: 0.875rem;
696
+ margin: 0;
697
+ }
698
+
699
+ @media (max-width: 768px) {
700
+ .footer-grid {
701
+ grid-template-columns: 1fr;
702
+ gap: var(--spacing-xl);
703
+ }
704
+
705
+ .footer-bottom {
706
+ flex-direction: column;
707
+ text-align: center;
708
+ }
709
+
710
+ .footer-license {
711
+ flex-direction: column;
712
+ }
713
+ }
714
+
715
+ /* =======================
716
+ Responsive Design
717
+ ======================= */
718
+
719
+ @media (max-width: 768px) {
720
+ :root {
721
+ --spacing-lg: 1.5rem;
722
+ --spacing-xl: 2.5rem;
723
+ --spacing-2xl: 3.5rem;
724
+ --spacing-3xl: 5rem;
725
+ }
726
+
727
+ body {
728
+ font-size: 16px;
729
+ }
730
+
731
+ .nav-container {
732
+ padding: 1.25rem var(--spacing-md);
733
+ }
734
+
735
+ .nav-logo {
736
+ font-size: 1.6rem;
737
+ }
738
+
739
+ .nav-logo-image {
740
+ height: 2rem;
741
+ max-width: 10rem;
742
+ }
743
+
744
+ .nav-links {
745
+ gap: var(--spacing-lg);
746
+ }
747
+
748
+ .nav-link {
749
+ font-size: 1rem;
750
+ }
751
+
752
+ .hero {
753
+ padding: var(--spacing-2xl) var(--spacing-md);
754
+ min-height: calc(100vh - 70px);
755
+ }
756
+
757
+ .hero-cta {
758
+ flex-direction: column;
759
+ align-items: center;
760
+ }
761
+
762
+ .btn {
763
+ width: 100%;
764
+ max-width: 320px;
765
+ padding: 1rem 2rem;
766
+ font-size: 1.1rem;
767
+ }
768
+
769
+ .contact-links {
770
+ grid-template-columns: 1fr;
771
+ gap: var(--spacing-md);
772
+ }
773
+
774
+ .profile-image-wrapper {
775
+ width: 180px;
776
+ height: 180px;
777
+ }
778
+
779
+ .profile-ring {
780
+ top: -15px;
781
+ left: -15px;
782
+ right: -15px;
783
+ bottom: -15px;
784
+ }
785
+ }
786
+
787
+ @media (max-width: 480px) {
788
+ .nav-links {
789
+ gap: var(--spacing-md);
790
+ }
791
+
792
+ .nav-link {
793
+ font-size: 0.95rem;
794
+ }
795
+
796
+ .nav-logo {
797
+ font-size: 1.4rem;
798
+ }
799
+
800
+ .nav-logo-image {
801
+ height: 1.8rem;
802
+ max-width: 8rem;
803
+ }
804
+ }
805
+
806
+ /* =======================
807
+ Blog Section
808
+ ======================= */
809
+
810
+ .blog-section {
811
+ min-height: 100vh;
812
+ padding: calc(var(--spacing-3xl) + 80px) var(--spacing-lg) var(--spacing-3xl);
813
+ position: relative;
814
+ }
815
+
816
+ .blog-container {
817
+ max-width: 1200px;
818
+ margin: 0 auto;
819
+ }
820
+
821
+ .blog-header {
822
+ text-align: center;
823
+ margin-bottom: var(--spacing-3xl);
824
+ }
825
+
826
+ .blog-description {
827
+ font-size: clamp(1.2rem, 2.5vw, 1.5rem);
828
+ color: var(--text-secondary);
829
+ max-width: 700px;
830
+ margin: 0 auto;
831
+ line-height: 1.8;
832
+ font-weight: 500;
833
+ }
834
+
835
+ .blog-posts {
836
+ display: grid;
837
+ gap: var(--spacing-xl);
838
+ }
839
+
840
+ .blog-post-card {
841
+ background: rgba(255, 255, 255, 0.03);
842
+ border: 1px solid var(--border);
843
+ border-radius: var(--radius-lg);
844
+ padding: var(--spacing-xl);
845
+ transition: all var(--transition-base);
846
+ backdrop-filter: blur(10px);
847
+ }
848
+
849
+ .blog-post-card:hover {
850
+ background: rgba(255, 255, 255, 0.05);
851
+ border-color: rgba(168, 85, 247, 0.4);
852
+ transform: translateY(-5px);
853
+ box-shadow: 0 20px 60px rgba(168, 85, 247, 0.2);
854
+ }
855
+
856
+ .post-date {
857
+ display: inline-block;
858
+ color: var(--text-tertiary);
859
+ font-size: 0.95rem;
860
+ font-weight: 600;
861
+ text-transform: uppercase;
862
+ letter-spacing: 0.05em;
863
+ margin-bottom: var(--spacing-sm);
864
+ }
865
+
866
+ .post-card-title {
867
+ font-family: var(--font-heading);
868
+ font-size: clamp(1.8rem, 3vw, 2.5rem);
869
+ font-weight: 700;
870
+ margin-bottom: var(--spacing-md);
871
+ line-height: 1.3;
872
+ letter-spacing: -0.02em;
873
+ }
874
+
875
+ .post-card-title a {
876
+ color: var(--text-primary);
877
+ text-decoration: none;
878
+ transition: color var(--transition-base);
879
+ background: linear-gradient(135deg, var(--color-purple), var(--color-pink));
880
+ -webkit-background-clip: text;
881
+ -webkit-text-fill-color: transparent;
882
+ background-clip: text;
883
+ }
884
+
885
+ .post-card-title a:hover {
886
+ opacity: 0.8;
887
+ }
888
+
889
+ .post-card-excerpt {
890
+ color: var(--text-secondary);
891
+ font-size: 1.1rem;
892
+ line-height: 1.8;
893
+ margin-bottom: var(--spacing-lg);
894
+ font-weight: 400;
895
+ }
896
+
897
+ .post-card-footer {
898
+ display: flex;
899
+ justify-content: space-between;
900
+ align-items: center;
901
+ gap: var(--spacing-md);
902
+ flex-wrap: wrap;
903
+ margin-top: var(--spacing-lg);
904
+ padding-top: var(--spacing-lg);
905
+ border-top: 1px solid rgba(168, 85, 247, 0.1);
906
+ }
907
+
908
+ .post-categories {
909
+ display: flex;
910
+ gap: var(--spacing-sm);
911
+ flex-wrap: wrap;
912
+ }
913
+
914
+ .post-category {
915
+ display: inline-block;
916
+ padding: 0.4rem 1rem;
917
+ background: rgba(168, 85, 247, 0.25);
918
+ color: #e9d5ff;
919
+ border-radius: var(--radius-full);
920
+ font-size: 0.85rem;
921
+ font-weight: 700;
922
+ text-transform: uppercase;
923
+ letter-spacing: 0.05em;
924
+ border: 1px solid rgba(168, 85, 247, 0.4);
925
+ }
926
+
927
+ .read-more {
928
+ color: #a5f3fc;
929
+ text-decoration: none;
930
+ font-weight: 700;
931
+ font-size: 1rem;
932
+ transition: all var(--transition-base);
933
+ display: inline-flex;
934
+ align-items: center;
935
+ gap: 0.5rem;
936
+ }
937
+
938
+ .read-more:hover {
939
+ color: #fecdd3;
940
+ transform: translateX(5px);
941
+ }
942
+
943
+ /* =======================
944
+ Single Post
945
+ ======================= */
946
+
947
+ /* Post Hero Section (Full-screen cover image) */
948
+ .post-hero {
949
+ position: relative;
950
+ min-height: 100vh;
951
+ display: flex;
952
+ align-items: center;
953
+ justify-content: center;
954
+ background-size: cover;
955
+ background-position: center;
956
+ background-repeat: no-repeat;
957
+ background-attachment: fixed;
958
+ }
959
+
960
+ .post-hero-overlay {
961
+ position: absolute;
962
+ top: 0;
963
+ left: 0;
964
+ width: 100%;
965
+ height: 100%;
966
+ background: linear-gradient(
967
+ 180deg,
968
+ rgba(15, 15, 35, 0.7) 0%,
969
+ rgba(15, 15, 35, 0.85) 50%,
970
+ rgba(15, 15, 35, 0.95) 100%
971
+ );
972
+ z-index: 1;
973
+ }
974
+
975
+ .post-hero-content {
976
+ position: relative;
977
+ z-index: 2;
978
+ text-align: center;
979
+ padding: var(--spacing-xl);
980
+ max-width: 1200px;
981
+ margin: 0 auto;
982
+ }
983
+
984
+ .post-hero-date {
985
+ display: block;
986
+ text-align: center;
987
+ color: rgba(255, 255, 255, 0.9);
988
+ font-size: 1rem;
989
+ font-weight: 600;
990
+ text-transform: uppercase;
991
+ letter-spacing: 0.1em;
992
+ text-shadow: 0 2px 8px rgba(0, 0, 0, 0.5);
993
+ margin-bottom: var(--spacing-md);
994
+ }
995
+
996
+ .post-hero-categories {
997
+ display: flex;
998
+ gap: var(--spacing-xs);
999
+ flex-wrap: wrap;
1000
+ justify-content: center;
1001
+ margin-bottom: var(--spacing-xl);
1002
+ }
1003
+
1004
+ .post-hero-category {
1005
+ display: inline-block;
1006
+ padding: 0.5rem 1rem;
1007
+ background: rgba(255, 255, 255, 0.15);
1008
+ backdrop-filter: blur(10px);
1009
+ color: #ffffff;
1010
+ border-radius: var(--radius-full);
1011
+ font-size: 0.85rem;
1012
+ font-weight: 700;
1013
+ text-transform: uppercase;
1014
+ letter-spacing: 0.05em;
1015
+ border: 1px solid rgba(255, 255, 255, 0.3);
1016
+ text-shadow: 0 2px 8px rgba(0, 0, 0, 0.5);
1017
+ transition: all var(--transition-base);
1018
+ }
1019
+
1020
+ .post-hero-category:hover {
1021
+ background: rgba(255, 255, 255, 0.25);
1022
+ transform: translateY(-2px);
1023
+ }
1024
+
1025
+ .post-hero-reading-time {
1026
+ display: block;
1027
+ text-align: center;
1028
+ color: rgba(255, 255, 255, 0.85);
1029
+ font-size: 0.95rem;
1030
+ font-weight: 500;
1031
+ text-shadow: 0 2px 8px rgba(0, 0, 0, 0.5);
1032
+ margin-bottom: 0;
1033
+ }
1034
+
1035
+ .post-hero-title {
1036
+ font-family: var(--font-heading);
1037
+ font-size: clamp(3rem, 8vw, 6rem);
1038
+ font-weight: 800;
1039
+ line-height: 1.1;
1040
+ margin-bottom: var(--spacing-lg);
1041
+ background: linear-gradient(135deg, #ffffff 0%, var(--color-purple) 50%, var(--color-pink) 100%);
1042
+ -webkit-background-clip: text;
1043
+ -webkit-text-fill-color: transparent;
1044
+ background-clip: text;
1045
+ letter-spacing: -0.02em;
1046
+ text-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
1047
+ }
1048
+
1049
+ .post-hero-subtitle {
1050
+ font-size: clamp(1.3rem, 3vw, 2rem);
1051
+ color: #ffffff;
1052
+ font-weight: 600;
1053
+ line-height: 1.5;
1054
+ max-width: 900px;
1055
+ margin: 0 auto var(--spacing-md);
1056
+ text-shadow: 0 2px 10px rgba(0, 0, 0, 0.5);
1057
+ }
1058
+
1059
+ /* Post content adjustments */
1060
+ .post {
1061
+ min-height: 100vh;
1062
+ padding: calc(var(--spacing-3xl) + 80px) var(--spacing-lg) var(--spacing-3xl);
1063
+ }
1064
+
1065
+ .post-container {
1066
+ max-width: 900px;
1067
+ margin: 0 auto;
1068
+ }
1069
+
1070
+ .post-header {
1071
+ text-align: center;
1072
+ margin-bottom: var(--spacing-3xl);
1073
+ padding-bottom: var(--spacing-xl);
1074
+ border-bottom: 2px solid var(--border);
1075
+ }
1076
+
1077
+ .post-header .post-date {
1078
+ display: block;
1079
+ text-align: center;
1080
+ margin-bottom: var(--spacing-md);
1081
+ font-size: 0.95rem;
1082
+ color: var(--text-tertiary);
1083
+ font-weight: 500;
1084
+ letter-spacing: 0.05em;
1085
+ text-transform: uppercase;
1086
+ }
1087
+
1088
+ .post-header .post-categories {
1089
+ display: flex;
1090
+ justify-content: center;
1091
+ align-items: center;
1092
+ gap: var(--spacing-sm);
1093
+ margin-bottom: var(--spacing-lg);
1094
+ flex-wrap: wrap;
1095
+ }
1096
+
1097
+ .post-title {
1098
+ font-family: var(--font-heading);
1099
+ font-size: clamp(2.5rem, 5vw, 4rem);
1100
+ font-weight: 800;
1101
+ line-height: 1.2;
1102
+ margin-bottom: var(--spacing-md);
1103
+ background: linear-gradient(135deg, var(--color-purple), var(--color-pink), var(--color-cyan));
1104
+ -webkit-background-clip: text;
1105
+ -webkit-text-fill-color: transparent;
1106
+ background-clip: text;
1107
+ letter-spacing: -0.02em;
1108
+ }
1109
+
1110
+ .post-subtitle {
1111
+ font-size: clamp(1.2rem, 2.5vw, 1.6rem);
1112
+ color: var(--text-secondary);
1113
+ font-weight: 600;
1114
+ line-height: 1.6;
1115
+ max-width: 700px;
1116
+ margin: 0 auto;
1117
+ }
1118
+
1119
+ .post-content {
1120
+ color: var(--text-secondary);
1121
+ font-size: 1.2rem;
1122
+ line-height: 1.9;
1123
+ font-weight: 400;
1124
+ }
1125
+
1126
+ .post-content h2 {
1127
+ font-family: var(--font-heading);
1128
+ font-size: clamp(1.8rem, 4vw, 2.5rem);
1129
+ font-weight: 700;
1130
+ color: var(--text-primary);
1131
+ margin: var(--spacing-2xl) 0 var(--spacing-lg);
1132
+ line-height: 1.3;
1133
+ letter-spacing: -0.01em;
1134
+ }
1135
+
1136
+ .post-content h3 {
1137
+ font-family: var(--font-heading);
1138
+ font-size: clamp(1.4rem, 3vw, 1.8rem);
1139
+ font-weight: 600;
1140
+ color: var(--text-primary);
1141
+ margin: var(--spacing-xl) 0 var(--spacing-md);
1142
+ line-height: 1.4;
1143
+ }
1144
+
1145
+ .post-content p {
1146
+ margin-bottom: var(--spacing-lg);
1147
+ }
1148
+
1149
+ .post-content strong {
1150
+ color: var(--text-primary);
1151
+ font-weight: 700;
1152
+ }
1153
+
1154
+ .post-content em {
1155
+ color: var(--text-tertiary);
1156
+ font-style: italic;
1157
+ }
1158
+
1159
+ .post-content a {
1160
+ color: var(--color-cyan);
1161
+ text-decoration: none;
1162
+ font-weight: 600;
1163
+ transition: all var(--transition-base);
1164
+ border-bottom: 2px solid transparent;
1165
+ }
1166
+
1167
+ .post-content a:hover {
1168
+ color: var(--color-pink);
1169
+ border-bottom-color: var(--color-pink);
1170
+ }
1171
+
1172
+ /* External Link Icon */
1173
+ .post-content a .external-link-icon {
1174
+ display: inline-block;
1175
+ margin-left: 0.25rem;
1176
+ font-size: 0.85em;
1177
+ opacity: 0.7;
1178
+ transition: all var(--transition-base);
1179
+ vertical-align: super;
1180
+ font-style: normal;
1181
+ line-height: 0;
1182
+ }
1183
+
1184
+ .post-content a:hover .external-link-icon {
1185
+ opacity: 1;
1186
+ transform: translate(2px, -2px);
1187
+ }
1188
+
1189
+ .post-content ul,
1190
+ .post-content ol {
1191
+ margin: var(--spacing-lg) 0;
1192
+ padding-left: var(--spacing-xl);
1193
+ }
1194
+
1195
+ .post-content li {
1196
+ margin-bottom: var(--spacing-md);
1197
+ line-height: 1.8;
1198
+ }
1199
+
1200
+ .post-content blockquote {
1201
+ margin: var(--spacing-xl) 0;
1202
+ padding: var(--spacing-lg) var(--spacing-xl);
1203
+ background: rgba(255, 255, 255, 0.03);
1204
+ border-left: 4px solid var(--color-purple);
1205
+ border-radius: var(--radius-md);
1206
+ font-style: italic;
1207
+ color: var(--text-tertiary);
1208
+ }
1209
+
1210
+ .post-content code {
1211
+ background: rgba(255, 255, 255, 0.1);
1212
+ padding: 0.2rem 0.5rem;
1213
+ border-radius: var(--radius-sm);
1214
+ font-family: 'SF Mono', 'Monaco', 'Inconsolata', 'Fira Code', 'Consolas', 'Courier New', monospace;
1215
+ font-size: 0.9em;
1216
+ color: var(--color-cyan);
1217
+ }
1218
+
1219
+ .post-content pre {
1220
+ background: rgba(0, 0, 0, 0.4);
1221
+ padding: var(--spacing-lg);
1222
+ border-radius: var(--radius-md);
1223
+ overflow-x: auto;
1224
+ margin: var(--spacing-xl) 0;
1225
+ border: none;
1226
+ box-shadow: 0 8px 30px rgba(0, 0, 0, 0.3);
1227
+ position: relative;
1228
+ }
1229
+
1230
+ .post-content pre code {
1231
+ background: none;
1232
+ padding: 0;
1233
+ color: inherit;
1234
+ font-size: 0.95rem;
1235
+ line-height: 1.6;
1236
+ }
1237
+
1238
+ /* Syntax highlighting wrapper */
1239
+ .highlight {
1240
+ margin: var(--spacing-xl) 0;
1241
+ border-radius: var(--radius-md);
1242
+ overflow: hidden;
1243
+ box-shadow: 0 8px 30px rgba(0, 0, 0, 0.3);
1244
+ border: none;
1245
+ background: rgba(0, 0, 0, 0.4);
1246
+ transition: all var(--transition-base);
1247
+ }
1248
+
1249
+ .highlight:hover {
1250
+ box-shadow: 0 12px 40px rgba(168, 85, 247, 0.2);
1251
+ }
1252
+
1253
+ .highlight pre {
1254
+ margin: 0;
1255
+ padding: var(--spacing-lg);
1256
+ border: none;
1257
+ box-shadow: none;
1258
+ background: transparent;
1259
+ }
1260
+
1261
+ .post-footer {
1262
+ margin-top: var(--spacing-3xl);
1263
+ padding-top: var(--spacing-2xl);
1264
+ border-top: 2px solid var(--border);
1265
+ }
1266
+
1267
+ .post-author {
1268
+ text-align: center;
1269
+ margin-bottom: var(--spacing-2xl);
1270
+ }
1271
+
1272
+ .author-info {
1273
+ max-width: 600px;
1274
+ margin: 0 auto;
1275
+ }
1276
+
1277
+ .author-name {
1278
+ font-family: var(--font-heading);
1279
+ font-size: 1.4rem;
1280
+ font-weight: 700;
1281
+ color: var(--text-primary);
1282
+ margin-bottom: var(--spacing-sm);
1283
+ }
1284
+
1285
+ .author-bio {
1286
+ color: var(--text-secondary);
1287
+ font-size: 1rem;
1288
+ line-height: 1.7;
1289
+ }
1290
+
1291
+ .post-navigation {
1292
+ display: grid;
1293
+ grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
1294
+ gap: var(--spacing-lg);
1295
+ margin-bottom: var(--spacing-2xl);
1296
+ }
1297
+
1298
+ .nav-post {
1299
+ display: flex;
1300
+ flex-direction: column;
1301
+ gap: var(--spacing-sm);
1302
+ padding: var(--spacing-lg);
1303
+ background: rgba(255, 255, 255, 0.03);
1304
+ border: 1px solid var(--border);
1305
+ border-radius: var(--radius-lg);
1306
+ text-decoration: none;
1307
+ transition: all var(--transition-base);
1308
+ }
1309
+
1310
+ .nav-post:hover {
1311
+ background: rgba(255, 255, 255, 0.05);
1312
+ border-color: rgba(168, 85, 247, 0.4);
1313
+ transform: translateY(-3px);
1314
+ }
1315
+
1316
+ .nav-label {
1317
+ color: var(--text-tertiary);
1318
+ font-size: 0.9rem;
1319
+ font-weight: 600;
1320
+ text-transform: uppercase;
1321
+ letter-spacing: 0.05em;
1322
+ }
1323
+
1324
+ .nav-title {
1325
+ color: var(--text-primary);
1326
+ font-family: var(--font-heading);
1327
+ font-size: 1.1rem;
1328
+ font-weight: 600;
1329
+ line-height: 1.4;
1330
+ }
1331
+
1332
+ .nav-prev .nav-title::before {
1333
+ content: '← ';
1334
+ color: #e9d5ff;
1335
+ }
1336
+
1337
+ .nav-next {
1338
+ text-align: right;
1339
+ }
1340
+
1341
+ .nav-next .nav-title::after {
1342
+ content: ' →';
1343
+ color: #fbcfe8;
1344
+ }
1345
+
1346
+ .back-to-blog {
1347
+ text-align: center;
1348
+ }
1349
+
1350
+ .btn-secondary {
1351
+ background: rgba(255, 255, 255, 0.05);
1352
+ color: var(--text-primary);
1353
+ border: 2px solid var(--border);
1354
+ }
1355
+
1356
+ .btn-secondary:hover {
1357
+ background: rgba(168, 85, 247, 0.15);
1358
+ border-color: var(--color-purple);
1359
+ transform: translateY(-3px);
1360
+ box-shadow: 0 10px 30px rgba(168, 85, 247, 0.3);
1361
+ }
1362
+
1363
+ /* =======================
1364
+ Blog Responsive
1365
+ ======================= */
1366
+
1367
+ @media (max-width: 768px) {
1368
+ .blog-section,
1369
+ .post {
1370
+ padding: calc(var(--spacing-2xl) + 70px) var(--spacing-md) var(--spacing-2xl);
1371
+ }
1372
+
1373
+ .blog-post-card {
1374
+ padding: var(--spacing-lg);
1375
+ }
1376
+
1377
+ .post-card-footer {
1378
+ flex-direction: column;
1379
+ align-items: flex-start;
1380
+ }
1381
+
1382
+ .post-navigation {
1383
+ grid-template-columns: 1fr;
1384
+ }
1385
+
1386
+ .nav-next {
1387
+ text-align: left;
1388
+ }
1389
+
1390
+ .post-content {
1391
+ font-size: 1.1rem;
1392
+ }
1393
+
1394
+ /* Hero responsive adjustments */
1395
+ .post-hero {
1396
+ background-attachment: scroll;
1397
+ }
1398
+
1399
+ .post-hero-content {
1400
+ padding: var(--spacing-lg) var(--spacing-md);
1401
+ }
1402
+
1403
+ .post-hero-date {
1404
+ font-size: 0.85rem;
1405
+ margin-bottom: var(--spacing-sm);
1406
+ }
1407
+
1408
+ .post-hero-categories {
1409
+ margin-bottom: var(--spacing-lg);
1410
+ }
1411
+
1412
+ .post-hero-category {
1413
+ font-size: 0.75rem;
1414
+ padding: 0.4rem 0.8rem;
1415
+ }
1416
+
1417
+ .post-hero-subtitle {
1418
+ margin-bottom: var(--spacing-sm);
1419
+ }
1420
+
1421
+ .post-hero-reading-time {
1422
+ font-size: 0.85rem;
1423
+ margin-bottom: 0;
1424
+ }
1425
+
1426
+ .post-hero-title {
1427
+ font-size: clamp(2rem, 6vw, 3.5rem);
1428
+ }
1429
+
1430
+ .post-hero-subtitle {
1431
+ font-size: clamp(1rem, 2.5vw, 1.4rem);
1432
+ }
1433
+ }
1434
+
1435
+ /* =======================
1436
+ Utility Classes
1437
+ ======================= */
1438
+
1439
+ /* =======================
1440
+ Pagination
1441
+ ======================= */
1442
+
1443
+ .pagination {
1444
+ display: flex;
1445
+ justify-content: center;
1446
+ align-items: center;
1447
+ gap: var(--spacing-md);
1448
+ margin-top: var(--spacing-2xl);
1449
+ padding: var(--spacing-xl) 0;
1450
+ }
1451
+
1452
+ .pagination-pages {
1453
+ display: flex;
1454
+ gap: var(--spacing-sm);
1455
+ }
1456
+
1457
+ .pagination-link {
1458
+ padding: var(--spacing-sm) var(--spacing-md);
1459
+ background: rgba(255, 255, 255, 0.05);
1460
+ border: 2px solid var(--border);
1461
+ border-radius: var(--radius-md);
1462
+ color: var(--text-primary);
1463
+ text-decoration: none;
1464
+ font-weight: 600;
1465
+ font-size: 0.95rem;
1466
+ transition: all var(--transition-base);
1467
+ backdrop-filter: blur(10px);
1468
+ min-width: 44px;
1469
+ text-align: center;
1470
+ }
1471
+
1472
+ .pagination-link:hover:not(.disabled):not(.pagination-current) {
1473
+ background: linear-gradient(135deg, rgba(168, 85, 247, 0.15) 0%, rgba(236, 72, 153, 0.15) 100%);
1474
+ border-color: var(--color-purple);
1475
+ transform: translateY(-2px);
1476
+ }
1477
+
1478
+ .pagination-current {
1479
+ background: linear-gradient(135deg, var(--color-purple) 0%, var(--color-pink) 100%);
1480
+ border-color: var(--color-purple);
1481
+ color: white;
1482
+ }
1483
+
1484
+ .pagination-link.disabled {
1485
+ opacity: 0.3;
1486
+ cursor: not-allowed;
1487
+ }
1488
+
1489
+ .pagination-prev,
1490
+ .pagination-next {
1491
+ min-width: 100px;
1492
+ }
1493
+
1494
+ @media (max-width: 768px) {
1495
+ .pagination {
1496
+ flex-wrap: wrap;
1497
+ gap: var(--spacing-sm);
1498
+ }
1499
+
1500
+ .pagination-prev,
1501
+ .pagination-next {
1502
+ min-width: 80px;
1503
+ font-size: 0.9rem;
1504
+ }
1505
+
1506
+ .pagination-link {
1507
+ min-width: 38px;
1508
+ padding: var(--spacing-xs) var(--spacing-sm);
1509
+ font-size: 0.9rem;
1510
+ }
1511
+ }
1512
+
1513
+ /* =======================
1514
+ Related Posts
1515
+ ======================= */
1516
+
1517
+ .related-posts {
1518
+ margin: var(--spacing-2xl) 0;
1519
+ padding: var(--spacing-xl) 0;
1520
+ border-top: 1px solid var(--border);
1521
+ border-bottom: 1px solid var(--border);
1522
+ }
1523
+
1524
+ .related-posts-title {
1525
+ font-family: var(--font-heading);
1526
+ font-size: 1.75rem;
1527
+ font-weight: 700;
1528
+ color: var(--text-primary);
1529
+ margin-bottom: var(--spacing-lg);
1530
+ text-align: center;
1531
+ }
1532
+
1533
+ .related-posts-grid {
1534
+ display: grid;
1535
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
1536
+ gap: var(--spacing-lg);
1537
+ margin-top: var(--spacing-lg);
1538
+ }
1539
+
1540
+ .related-post-card {
1541
+ background: var(--bg-secondary);
1542
+ border: 1px solid var(--border);
1543
+ border-radius: var(--radius-lg);
1544
+ padding: var(--spacing-lg);
1545
+ transition: all var(--transition-base);
1546
+ backdrop-filter: blur(10px);
1547
+ }
1548
+
1549
+ .related-post-card:hover {
1550
+ transform: translateY(-4px);
1551
+ border-color: var(--color-purple);
1552
+ background: var(--bg-elevated);
1553
+ box-shadow: 0 8px 24px rgba(168, 85, 247, 0.2);
1554
+ }
1555
+
1556
+ .related-post-date {
1557
+ display: block;
1558
+ font-size: 0.875rem;
1559
+ color: var(--text-tertiary);
1560
+ margin-bottom: var(--spacing-xs);
1561
+ font-family: var(--font-body);
1562
+ }
1563
+
1564
+ .related-post-categories {
1565
+ display: flex;
1566
+ flex-wrap: wrap;
1567
+ gap: var(--spacing-xs);
1568
+ margin-bottom: var(--spacing-sm);
1569
+ }
1570
+
1571
+ .related-post-category {
1572
+ font-size: 0.75rem;
1573
+ padding: 0.25rem 0.75rem;
1574
+ background: linear-gradient(135deg, rgba(168, 85, 247, 0.2) 0%, rgba(236, 72, 153, 0.2) 100%);
1575
+ border: 1px solid var(--border);
1576
+ border-radius: var(--radius-full);
1577
+ color: var(--text-secondary);
1578
+ font-weight: 600;
1579
+ text-transform: lowercase;
1580
+ font-family: var(--font-body);
1581
+ }
1582
+
1583
+ .related-post-title {
1584
+ font-family: var(--font-heading);
1585
+ font-size: 1.25rem;
1586
+ font-weight: 700;
1587
+ margin: var(--spacing-sm) 0;
1588
+ line-height: 1.4;
1589
+ }
1590
+
1591
+ .related-post-title a {
1592
+ color: var(--text-primary);
1593
+ text-decoration: none;
1594
+ background: linear-gradient(135deg, var(--color-purple) 0%, var(--color-pink) 100%);
1595
+ background-clip: text;
1596
+ -webkit-background-clip: text;
1597
+ -webkit-text-fill-color: transparent;
1598
+ transition: opacity var(--transition-fast);
1599
+ }
1600
+
1601
+ .related-post-title a:hover {
1602
+ opacity: 0.8;
1603
+ }
1604
+
1605
+ .related-post-subtitle {
1606
+ font-size: 0.9375rem;
1607
+ color: var(--text-tertiary);
1608
+ line-height: 1.6;
1609
+ margin-top: var(--spacing-sm);
1610
+ font-family: var(--font-body);
1611
+ }
1612
+
1613
+ @media (max-width: 768px) {
1614
+ .related-posts {
1615
+ margin: var(--spacing-xl) 0;
1616
+ padding: var(--spacing-lg) 0;
1617
+ }
1618
+
1619
+ .related-posts-title {
1620
+ font-size: 1.5rem;
1621
+ }
1622
+
1623
+ .related-posts-grid {
1624
+ grid-template-columns: 1fr;
1625
+ gap: var(--spacing-md);
1626
+ }
1627
+
1628
+ .related-post-card {
1629
+ padding: var(--spacing-md);
1630
+ }
1631
+
1632
+ .related-post-title {
1633
+ font-size: 1.125rem;
1634
+ }
1635
+ }
1636
+
1637
+ /* =======================
1638
+ Categories
1639
+ ======================= */
1640
+
1641
+ .category-breadcrumb {
1642
+ display: flex;
1643
+ align-items: center;
1644
+ justify-content: center;
1645
+ gap: var(--spacing-sm);
1646
+ margin-bottom: var(--spacing-lg);
1647
+ font-size: 1rem;
1648
+ }
1649
+
1650
+ .breadcrumb-link {
1651
+ color: var(--text-secondary);
1652
+ text-decoration: none;
1653
+ font-weight: 600;
1654
+ transition: color var(--transition-base);
1655
+ }
1656
+
1657
+ .breadcrumb-link:hover {
1658
+ color: var(--color-purple);
1659
+ }
1660
+
1661
+ .breadcrumb-separator {
1662
+ color: var(--text-tertiary);
1663
+ }
1664
+
1665
+ .categories-grid {
1666
+ display: grid;
1667
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
1668
+ gap: var(--spacing-xl);
1669
+ margin-bottom: var(--spacing-3xl);
1670
+ }
1671
+
1672
+ @media (max-width: 768px) {
1673
+ .categories-grid {
1674
+ grid-template-columns: 1fr !important;
1675
+ gap: var(--spacing-md);
1676
+ }
1677
+
1678
+ .category-card {
1679
+ padding: var(--spacing-md);
1680
+ }
1681
+
1682
+ .blog-section {
1683
+ padding-left: var(--spacing-md);
1684
+ padding-right: var(--spacing-md);
1685
+ }
1686
+ }
1687
+
1688
+ .category-card {
1689
+ background: var(--bg-secondary);
1690
+ border: 1px solid var(--border);
1691
+ border-radius: var(--radius-lg);
1692
+ padding: var(--spacing-xl);
1693
+ transition: all var(--transition-base);
1694
+ backdrop-filter: blur(10px);
1695
+ text-decoration: none;
1696
+ display: flex;
1697
+ flex-direction: column;
1698
+ gap: var(--spacing-lg);
1699
+ }
1700
+
1701
+ .category-card:hover {
1702
+ transform: translateY(-5px);
1703
+ border-color: var(--color-purple);
1704
+ background: var(--bg-elevated);
1705
+ box-shadow: 0 10px 40px rgba(168, 85, 247, 0.3);
1706
+ }
1707
+
1708
+ .category-card-header {
1709
+ display: flex;
1710
+ justify-content: space-between;
1711
+ align-items: flex-start;
1712
+ gap: var(--spacing-md);
1713
+ }
1714
+
1715
+ .category-card-title {
1716
+ font-family: var(--font-heading);
1717
+ font-size: 1.5rem;
1718
+ font-weight: 700;
1719
+ color: var(--text-primary);
1720
+ background: linear-gradient(135deg, var(--color-purple), var(--color-pink));
1721
+ -webkit-background-clip: text;
1722
+ -webkit-text-fill-color: transparent;
1723
+ background-clip: text;
1724
+ margin: 0;
1725
+ }
1726
+
1727
+ .category-count {
1728
+ background: rgba(168, 85, 247, 0.2);
1729
+ color: var(--color-purple);
1730
+ padding: 0.4rem 0.8rem;
1731
+ border-radius: var(--radius-full);
1732
+ font-size: 0.875rem;
1733
+ font-weight: 700;
1734
+ white-space: nowrap;
1735
+ }
1736
+
1737
+ .category-card-preview {
1738
+ display: flex;
1739
+ flex-direction: column;
1740
+ gap: var(--spacing-sm);
1741
+ }
1742
+
1743
+ .category-post-preview {
1744
+ display: flex;
1745
+ justify-content: space-between;
1746
+ align-items: baseline;
1747
+ gap: var(--spacing-sm);
1748
+ padding: var(--spacing-sm) 0;
1749
+ border-bottom: 1px solid rgba(168, 85, 247, 0.1);
1750
+ }
1751
+
1752
+ .category-post-preview:last-child {
1753
+ border-bottom: none;
1754
+ }
1755
+
1756
+ .preview-title {
1757
+ color: var(--text-secondary);
1758
+ font-size: 0.95rem;
1759
+ font-weight: 500;
1760
+ flex: 1;
1761
+ overflow: hidden;
1762
+ text-overflow: ellipsis;
1763
+ white-space: nowrap;
1764
+ }
1765
+
1766
+ .preview-date {
1767
+ color: var(--text-tertiary);
1768
+ font-size: 0.85rem;
1769
+ font-weight: 500;
1770
+ }
1771
+
1772
+ .back-to-categories {
1773
+ text-align: center;
1774
+ margin-top: var(--spacing-2xl);
1775
+ }
1776
+
1777
+ .no-posts {
1778
+ text-align: center;
1779
+ padding: var(--spacing-3xl);
1780
+ color: var(--text-tertiary);
1781
+ }
1782
+
1783
+ .no-posts p {
1784
+ font-size: 1.2rem;
1785
+ }
1786
+
1787
+ @media (max-width: 768px) {
1788
+ .categories-grid {
1789
+ gap: var(--spacing-lg);
1790
+ }
1791
+
1792
+ .category-card {
1793
+ padding: var(--spacing-lg);
1794
+ }
1795
+
1796
+ .category-card-header {
1797
+ flex-direction: column;
1798
+ align-items: flex-start;
1799
+ gap: var(--spacing-xs);
1800
+ }
1801
+
1802
+ .category-card-title {
1803
+ font-size: 1.25rem;
1804
+ }
1805
+
1806
+ .category-post-preview {
1807
+ flex-direction: column;
1808
+ align-items: flex-start;
1809
+ gap: var(--spacing-xs);
1810
+ }
1811
+
1812
+ .preview-title {
1813
+ white-space: normal;
1814
+ line-height: 1.4;
1815
+ }
1816
+
1817
+ .preview-date {
1818
+ font-size: 0.8rem;
1819
+ }
1820
+
1821
+ .category-breadcrumb {
1822
+ font-size: 0.9rem;
1823
+ }
1824
+ }
1825
+
1826
+ /* Make category tags clickable */
1827
+ .post-category {
1828
+ text-decoration: none;
1829
+ transition: all var(--transition-base);
1830
+ }
1831
+
1832
+ .post-category:hover {
1833
+ transform: translateY(-2px);
1834
+ box-shadow: 0 4px 12px rgba(168, 85, 247, 0.3);
1835
+ }
1836
+
1837
+ .post-hero-category {
1838
+ text-decoration: none;
1839
+ cursor: pointer;
1840
+ }
1841
+
1842
+ /* =======================
1843
+ Search
1844
+ ======================= */
1845
+
1846
+ .search-container {
1847
+ max-width: 700px;
1848
+ margin: 0 auto var(--spacing-2xl);
1849
+ }
1850
+
1851
+ .search-wrapper {
1852
+ position: relative;
1853
+ display: flex;
1854
+ align-items: center;
1855
+ background: rgba(255, 255, 255, 0.05);
1856
+ border: 2px solid var(--border);
1857
+ border-radius: var(--radius-lg);
1858
+ padding: var(--spacing-md) var(--spacing-lg);
1859
+ transition: all var(--transition-base);
1860
+ backdrop-filter: blur(10px);
1861
+ }
1862
+
1863
+ .search-wrapper:focus-within {
1864
+ border-color: var(--color-purple);
1865
+ background: rgba(255, 255, 255, 0.08);
1866
+ box-shadow: 0 8px 30px rgba(168, 85, 247, 0.3);
1867
+ }
1868
+
1869
+ .search-icon {
1870
+ color: var(--text-tertiary);
1871
+ margin-right: var(--spacing-md);
1872
+ flex-shrink: 0;
1873
+ transition: color var(--transition-base);
1874
+ }
1875
+
1876
+ .search-wrapper:focus-within .search-icon {
1877
+ color: var(--color-purple);
1878
+ }
1879
+
1880
+ .search-input {
1881
+ flex: 1;
1882
+ background: transparent;
1883
+ border: none;
1884
+ outline: none;
1885
+ color: var(--text-primary);
1886
+ font-size: 1.1rem;
1887
+ font-family: var(--font-body);
1888
+ font-weight: 500;
1889
+ padding: 0;
1890
+ box-shadow: none !important;
1891
+ -webkit-appearance: none;
1892
+ -moz-appearance: none;
1893
+ appearance: none;
1894
+ }
1895
+
1896
+ .search-input:focus {
1897
+ border: none !important;
1898
+ outline: none !important;
1899
+ box-shadow: none !important;
1900
+ }
1901
+
1902
+ .search-input::placeholder {
1903
+ color: var(--text-tertiary);
1904
+ }
1905
+
1906
+ .search-input::-webkit-search-cancel-button {
1907
+ display: none;
1908
+ }
1909
+
1910
+ .search-clear {
1911
+ background: transparent;
1912
+ border: none;
1913
+ color: var(--text-tertiary);
1914
+ cursor: pointer;
1915
+ padding: var(--spacing-xs);
1916
+ margin-left: var(--spacing-sm);
1917
+ border-radius: var(--radius-sm);
1918
+ transition: all var(--transition-base);
1919
+ display: flex;
1920
+ align-items: center;
1921
+ justify-content: center;
1922
+ }
1923
+
1924
+ .search-clear:hover {
1925
+ background: rgba(255, 255, 255, 0.1);
1926
+ color: var(--text-primary);
1927
+ }
1928
+
1929
+ .search-clear:focus {
1930
+ outline: 2px solid var(--color-purple);
1931
+ outline-offset: 2px;
1932
+ }
1933
+
1934
+ .search-results-count {
1935
+ text-align: center;
1936
+ color: var(--text-tertiary);
1937
+ font-size: 0.95rem;
1938
+ font-weight: 500;
1939
+ margin-top: var(--spacing-md);
1940
+ padding: var(--spacing-sm);
1941
+ background: rgba(168, 85, 247, 0.1);
1942
+ border-radius: var(--radius-md);
1943
+ }
1944
+
1945
+ .search-results-count strong {
1946
+ color: var(--color-purple);
1947
+ font-weight: 700;
1948
+ }
1949
+
1950
+ .search-no-results {
1951
+ text-align: center;
1952
+ padding: var(--spacing-3xl);
1953
+ color: var(--text-tertiary);
1954
+ }
1955
+
1956
+ .search-no-results h3 {
1957
+ font-family: var(--font-heading);
1958
+ font-size: 1.5rem;
1959
+ color: var(--text-secondary);
1960
+ margin-bottom: var(--spacing-md);
1961
+ }
1962
+
1963
+ .search-no-results p {
1964
+ font-size: 1.1rem;
1965
+ }
1966
+
1967
+ /* Highlight search matches */
1968
+ .search-results mark {
1969
+ background: linear-gradient(135deg, rgba(168, 85, 247, 0.3) 0%, rgba(236, 72, 153, 0.3) 100%);
1970
+ color: var(--text-primary);
1971
+ padding: 0.1em 0.3em;
1972
+ border-radius: 3px;
1973
+ font-weight: 600;
1974
+ }
1975
+
1976
+ @media (max-width: 768px) {
1977
+ .search-container {
1978
+ margin-bottom: var(--spacing-xl);
1979
+ }
1980
+
1981
+ .search-wrapper {
1982
+ padding: var(--spacing-sm) var(--spacing-md);
1983
+ }
1984
+
1985
+ .search-input {
1986
+ font-size: 1rem;
1987
+ }
1988
+ }
1989
+
1990
+ /* =======================
1991
+ Reading Progress Bar
1992
+ ======================= */
1993
+
1994
+ .reading-progress-container {
1995
+ position: fixed;
1996
+ top: 0;
1997
+ left: 0;
1998
+ width: 100%;
1999
+ height: 4px;
2000
+ background: rgba(255, 255, 255, 0.1);
2001
+ z-index: 9999;
2002
+ opacity: 0;
2003
+ transition: opacity var(--transition-base);
2004
+ pointer-events: none;
2005
+ }
2006
+
2007
+ .reading-progress-container.visible {
2008
+ opacity: 1;
2009
+ }
2010
+
2011
+ .reading-progress-bar {
2012
+ height: 100%;
2013
+ width: 0%;
2014
+ background: linear-gradient(90deg, var(--color-purple) 0%, var(--color-pink) 50%, var(--color-cyan) 100%);
2015
+ box-shadow: 0 0 10px rgba(168, 85, 247, 0.5);
2016
+ transition: width 0.1s ease-out;
2017
+ position: relative;
2018
+ }
2019
+
2020
+ .reading-progress-bar::after {
2021
+ content: '';
2022
+ position: absolute;
2023
+ top: 0;
2024
+ right: 0;
2025
+ width: 40px;
2026
+ height: 100%;
2027
+ background: linear-gradient(90deg, transparent 0%, rgba(255, 255, 255, 0.3) 100%);
2028
+ animation: shimmer 2s infinite;
2029
+ }
2030
+
2031
+ @keyframes shimmer {
2032
+ 0% {
2033
+ transform: translateX(-100%);
2034
+ }
2035
+ 100% {
2036
+ transform: translateX(100%);
2037
+ }
2038
+ }
2039
+
2040
+ /* Respect reduced motion preference */
2041
+ @media (prefers-reduced-motion: reduce) {
2042
+ .reading-progress-bar {
2043
+ transition: none;
2044
+ }
2045
+
2046
+ .reading-progress-bar::after {
2047
+ animation: none;
2048
+ }
2049
+ }
2050
+
2051
+ /* =======================
2052
+ Table of Contents
2053
+ ======================= */
2054
+
2055
+ .toc-container {
2056
+ position: relative;
2057
+ background: rgba(255, 255, 255, 0.03);
2058
+ border: 1px solid var(--border);
2059
+ border-radius: var(--radius-lg);
2060
+ padding: var(--spacing-lg);
2061
+ margin-bottom: var(--spacing-2xl);
2062
+ backdrop-filter: blur(10px);
2063
+ transition: all var(--transition-base);
2064
+ max-height: 600px;
2065
+ overflow-y: auto;
2066
+ }
2067
+
2068
+ .toc-container:hover {
2069
+ background: rgba(255, 255, 255, 0.05);
2070
+ border-color: rgba(168, 85, 247, 0.3);
2071
+ }
2072
+
2073
+ /* Custom scrollbar for TOC */
2074
+ .toc-container::-webkit-scrollbar {
2075
+ width: 6px;
2076
+ }
2077
+
2078
+ .toc-container::-webkit-scrollbar-track {
2079
+ background: rgba(255, 255, 255, 0.05);
2080
+ border-radius: 3px;
2081
+ }
2082
+
2083
+ .toc-container::-webkit-scrollbar-thumb {
2084
+ background: rgba(168, 85, 247, 0.5);
2085
+ border-radius: 3px;
2086
+ }
2087
+
2088
+ .toc-container::-webkit-scrollbar-thumb:hover {
2089
+ background: rgba(168, 85, 247, 0.7);
2090
+ }
2091
+
2092
+ .toc-header {
2093
+ display: flex;
2094
+ justify-content: space-between;
2095
+ align-items: center;
2096
+ margin-bottom: var(--spacing-md);
2097
+ padding-bottom: var(--spacing-md);
2098
+ border-bottom: 2px solid var(--border);
2099
+ }
2100
+
2101
+ .toc-title {
2102
+ font-family: var(--font-heading);
2103
+ font-size: 1.2rem;
2104
+ font-weight: 700;
2105
+ color: var(--text-primary);
2106
+ margin: 0;
2107
+ background: linear-gradient(135deg, var(--color-purple), var(--color-pink));
2108
+ -webkit-background-clip: text;
2109
+ -webkit-text-fill-color: transparent;
2110
+ background-clip: text;
2111
+ }
2112
+
2113
+ .toc-toggle {
2114
+ background: transparent;
2115
+ border: none;
2116
+ color: var(--text-secondary);
2117
+ cursor: pointer;
2118
+ padding: var(--spacing-xs);
2119
+ border-radius: var(--radius-sm);
2120
+ transition: all var(--transition-base);
2121
+ display: flex;
2122
+ align-items: center;
2123
+ justify-content: center;
2124
+ }
2125
+
2126
+ .toc-toggle:hover {
2127
+ background: rgba(168, 85, 247, 0.15);
2128
+ color: var(--text-primary);
2129
+ }
2130
+
2131
+ .toc-toggle:focus {
2132
+ outline: 2px solid var(--color-purple);
2133
+ outline-offset: 2px;
2134
+ }
2135
+
2136
+ .toc-toggle-icon {
2137
+ transition: transform var(--transition-base);
2138
+ }
2139
+
2140
+ .toc-container.collapsed .toc-toggle-icon {
2141
+ transform: rotate(-90deg);
2142
+ }
2143
+
2144
+ .toc-nav {
2145
+ max-height: 500px;
2146
+ overflow-y: auto;
2147
+ transition: all var(--transition-base);
2148
+ }
2149
+
2150
+ .toc-container.collapsed .toc-nav {
2151
+ max-height: 0;
2152
+ overflow: hidden;
2153
+ opacity: 0;
2154
+ }
2155
+
2156
+ .toc-list {
2157
+ list-style: none;
2158
+ padding: 0;
2159
+ margin: 0;
2160
+ }
2161
+
2162
+ .toc-item {
2163
+ margin: 0;
2164
+ transition: all var(--transition-base);
2165
+ }
2166
+
2167
+ .toc-link {
2168
+ display: block;
2169
+ padding: var(--spacing-sm) var(--spacing-md);
2170
+ color: var(--text-secondary);
2171
+ text-decoration: none;
2172
+ font-size: 0.95rem;
2173
+ font-weight: 500;
2174
+ line-height: 1.5;
2175
+ border-left: 3px solid transparent;
2176
+ margin-left: 0;
2177
+ transition: all var(--transition-base);
2178
+ border-radius: 0 var(--radius-sm) var(--radius-sm) 0;
2179
+ }
2180
+
2181
+ .toc-link:hover {
2182
+ color: var(--text-primary);
2183
+ background: rgba(168, 85, 247, 0.1);
2184
+ border-left-color: var(--color-purple);
2185
+ transform: translateX(3px);
2186
+ }
2187
+
2188
+ .toc-link.active {
2189
+ color: var(--text-primary);
2190
+ background: rgba(168, 85, 247, 0.15);
2191
+ border-left-color: var(--color-pink);
2192
+ font-weight: 700;
2193
+ }
2194
+
2195
+ /* Nested headings (H3) */
2196
+ .toc-item.toc-h3 .toc-link {
2197
+ padding-left: var(--spacing-xl);
2198
+ font-size: 0.9rem;
2199
+ font-weight: 400;
2200
+ }
2201
+
2202
+ .toc-item.toc-h3 .toc-link:hover {
2203
+ border-left-color: var(--color-cyan);
2204
+ }
2205
+
2206
+ .toc-item.toc-h3 .toc-link.active {
2207
+ border-left-color: var(--color-cyan);
2208
+ }
2209
+
2210
+ .toc-empty {
2211
+ padding: var(--spacing-lg);
2212
+ text-align: center;
2213
+ color: var(--text-tertiary);
2214
+ font-size: 0.95rem;
2215
+ font-style: italic;
2216
+ }
2217
+
2218
+ /* Responsive TOC */
2219
+ @media (max-width: 768px) {
2220
+ .toc-container {
2221
+ padding: var(--spacing-md);
2222
+ max-height: 500px;
2223
+ }
2224
+
2225
+ .toc-title {
2226
+ font-size: 1.1rem;
2227
+ }
2228
+
2229
+ .toc-link {
2230
+ padding: var(--spacing-xs) var(--spacing-sm);
2231
+ font-size: 0.9rem;
2232
+ }
2233
+
2234
+ .toc-item.toc-h3 .toc-link {
2235
+ padding-left: var(--spacing-lg);
2236
+ font-size: 0.85rem;
2237
+ }
2238
+
2239
+ .toc-nav {
2240
+ max-height: 400px;
2241
+ }
2242
+ }
2243
+
2244
+ /* Hide TOC on very small screens if collapsed */
2245
+ @media (max-width: 480px) {
2246
+ .toc-container.collapsed {
2247
+ padding-bottom: var(--spacing-md);
2248
+ }
2249
+ }
2250
+