@terrymooreii/sia 2.1.3 → 2.1.5

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 (70) hide show
  1. package/lib/assets.js +17 -20
  2. package/lib/build.js +6 -6
  3. package/lib/config.js +1 -1
  4. package/lib/content.js +6 -6
  5. package/lib/templates.js +10 -5
  6. package/package.json +1 -1
  7. package/themes/_shared/includes/meta.njk +42 -0
  8. package/themes/_shared/includes/theme-script.njk +8 -0
  9. package/themes/developer/includes/footer.njk +5 -0
  10. package/themes/developer/includes/header.njk +46 -0
  11. package/themes/developer/includes/pagination.njk +39 -0
  12. package/themes/developer/includes/sidebar.njk +60 -0
  13. package/themes/developer/includes/tag-list.njk +7 -0
  14. package/themes/developer/layouts/base.njk +29 -0
  15. package/themes/developer/layouts/note.njk +21 -0
  16. package/themes/developer/layouts/page.njk +13 -0
  17. package/themes/developer/layouts/post.njk +47 -0
  18. package/themes/developer/pages/blog.njk +41 -0
  19. package/themes/developer/pages/feed.njk +22 -0
  20. package/themes/developer/pages/index.njk +65 -0
  21. package/themes/developer/pages/notes.njk +38 -0
  22. package/themes/developer/pages/tag.njk +39 -0
  23. package/themes/developer/pages/tags.njk +21 -0
  24. package/themes/developer/styles/main.css +874 -0
  25. package/themes/magazine/includes/footer.njk +32 -0
  26. package/themes/magazine/includes/header.njk +63 -0
  27. package/themes/magazine/includes/pagination.njk +29 -0
  28. package/themes/magazine/includes/tag-list.njk +7 -0
  29. package/themes/magazine/layouts/base.njk +23 -0
  30. package/themes/magazine/layouts/note.njk +25 -0
  31. package/themes/magazine/layouts/page.njk +13 -0
  32. package/themes/magazine/layouts/post.njk +79 -0
  33. package/themes/magazine/pages/blog.njk +35 -0
  34. package/themes/magazine/pages/feed.njk +22 -0
  35. package/themes/magazine/pages/index.njk +79 -0
  36. package/themes/magazine/pages/notes.njk +33 -0
  37. package/themes/magazine/pages/tag.njk +31 -0
  38. package/themes/magazine/pages/tags.njk +19 -0
  39. package/themes/magazine/styles/main.css +1169 -0
  40. package/themes/main/layouts/base.njk +21 -0
  41. package/themes/minimal/includes/footer.njk +14 -0
  42. package/themes/minimal/includes/header.njk +71 -0
  43. package/themes/minimal/includes/pagination.njk +26 -0
  44. package/themes/minimal/includes/tag-list.njk +11 -0
  45. package/themes/minimal/layouts/base.njk +21 -0
  46. package/themes/minimal/layouts/note.njk +25 -0
  47. package/themes/minimal/layouts/page.njk +14 -0
  48. package/themes/minimal/layouts/post.njk +46 -0
  49. package/themes/minimal/pages/blog.njk +37 -0
  50. package/themes/minimal/pages/feed.njk +28 -0
  51. package/themes/minimal/pages/index.njk +61 -0
  52. package/themes/minimal/pages/notes.njk +34 -0
  53. package/themes/minimal/pages/tag.njk +42 -0
  54. package/themes/minimal/pages/tags.njk +39 -0
  55. package/defaults/layouts/base.njk +0 -41
  56. /package/{defaults → themes/main}/includes/footer.njk +0 -0
  57. /package/{defaults → themes/main}/includes/header.njk +0 -0
  58. /package/{defaults → themes/main}/includes/pagination.njk +0 -0
  59. /package/{defaults → themes/main}/includes/tag-list.njk +0 -0
  60. /package/{defaults → themes/main}/layouts/note.njk +0 -0
  61. /package/{defaults → themes/main}/layouts/page.njk +0 -0
  62. /package/{defaults → themes/main}/layouts/post.njk +0 -0
  63. /package/{defaults → themes/main}/pages/blog.njk +0 -0
  64. /package/{defaults → themes/main}/pages/feed.njk +0 -0
  65. /package/{defaults → themes/main}/pages/index.njk +0 -0
  66. /package/{defaults → themes/main}/pages/notes.njk +0 -0
  67. /package/{defaults → themes/main}/pages/tag.njk +0 -0
  68. /package/{defaults → themes/main}/pages/tags.njk +0 -0
  69. /package/{defaults → themes/main}/styles/main.css +0 -0
  70. /package/{defaults/styles/minimal.css → themes/minimal/styles/main.css} +0 -0
@@ -0,0 +1,874 @@
1
+ /* Developer Theme - Inspired by dev.to and hashnode */
2
+
3
+ /* ==================== CSS Variables ==================== */
4
+ :root {
5
+ /* Light mode colors */
6
+ --color-bg: #f5f5f5;
7
+ --color-bg-secondary: #ffffff;
8
+ --color-bg-tertiary: #e8e8e8;
9
+ --color-text: #1a1a2e;
10
+ --color-text-secondary: #525252;
11
+ --color-text-muted: #737373;
12
+ --color-primary: #3b49df;
13
+ --color-primary-hover: #2f3ab2;
14
+ --color-accent: #10b981;
15
+ --color-border: #e5e5e5;
16
+ --color-border-hover: #d4d4d4;
17
+ --color-code-bg: #f4f4f5;
18
+ --color-link: #3b49df;
19
+ --color-tag-bg: #e0e7ff;
20
+ --color-tag-text: #3730a3;
21
+
22
+ /* Shadows */
23
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
24
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
25
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
26
+
27
+ /* Layout */
28
+ --sidebar-width: 240px;
29
+ --content-max-width: 720px;
30
+ --header-height: 56px;
31
+
32
+ /* Typography */
33
+ --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
34
+ --font-mono: 'JetBrains Mono', 'Fira Code', monospace;
35
+
36
+ /* Transitions */
37
+ --transition-fast: 150ms ease;
38
+ --transition-normal: 200ms ease;
39
+
40
+ /* Border radius */
41
+ --radius-sm: 4px;
42
+ --radius-md: 8px;
43
+ --radius-lg: 12px;
44
+ --radius-full: 9999px;
45
+ }
46
+
47
+ [data-theme="dark"] {
48
+ --color-bg: #0f0f0f;
49
+ --color-bg-secondary: #171717;
50
+ --color-bg-tertiary: #262626;
51
+ --color-text: #fafafa;
52
+ --color-text-secondary: #a3a3a3;
53
+ --color-text-muted: #737373;
54
+ --color-primary: #818cf8;
55
+ --color-primary-hover: #a5b4fc;
56
+ --color-accent: #34d399;
57
+ --color-border: #262626;
58
+ --color-border-hover: #404040;
59
+ --color-code-bg: #262626;
60
+ --color-link: #818cf8;
61
+ --color-tag-bg: #312e81;
62
+ --color-tag-text: #c7d2fe;
63
+
64
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
65
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.4);
66
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.5);
67
+ }
68
+
69
+ /* ==================== Reset & Base ==================== */
70
+ *, *::before, *::after {
71
+ box-sizing: border-box;
72
+ margin: 0;
73
+ padding: 0;
74
+ }
75
+
76
+ html {
77
+ font-size: 16px;
78
+ -webkit-font-smoothing: antialiased;
79
+ -moz-osx-font-smoothing: grayscale;
80
+ }
81
+
82
+ body {
83
+ font-family: var(--font-sans);
84
+ background-color: var(--color-bg);
85
+ color: var(--color-text);
86
+ line-height: 1.6;
87
+ min-height: 100vh;
88
+ }
89
+
90
+ a {
91
+ color: var(--color-link);
92
+ text-decoration: none;
93
+ transition: color var(--transition-fast);
94
+ }
95
+
96
+ a:hover {
97
+ color: var(--color-primary-hover);
98
+ }
99
+
100
+ img {
101
+ max-width: 100%;
102
+ height: auto;
103
+ display: block;
104
+ }
105
+
106
+ /* ==================== Layout ==================== */
107
+ .app-layout {
108
+ display: flex;
109
+ min-height: 100vh;
110
+ }
111
+
112
+ .main-wrapper {
113
+ flex: 1;
114
+ margin-left: var(--sidebar-width);
115
+ display: flex;
116
+ flex-direction: column;
117
+ min-height: 100vh;
118
+ }
119
+
120
+ .main-content {
121
+ flex: 1;
122
+ padding: 2rem;
123
+ max-width: calc(var(--content-max-width) + 4rem);
124
+ width: 100%;
125
+ margin: 0 auto;
126
+ }
127
+
128
+ /* ==================== Sidebar ==================== */
129
+ .sidebar {
130
+ position: fixed;
131
+ left: 0;
132
+ top: 0;
133
+ bottom: 0;
134
+ width: var(--sidebar-width);
135
+ background-color: var(--color-bg-secondary);
136
+ border-right: 1px solid var(--color-border);
137
+ display: flex;
138
+ flex-direction: column;
139
+ z-index: 100;
140
+ transition: transform var(--transition-normal);
141
+ }
142
+
143
+ .sidebar-header {
144
+ padding: 1rem;
145
+ border-bottom: 1px solid var(--color-border);
146
+ }
147
+
148
+ .sidebar-logo {
149
+ display: flex;
150
+ align-items: center;
151
+ gap: 0.75rem;
152
+ color: var(--color-text);
153
+ font-weight: 700;
154
+ font-size: 1.125rem;
155
+ }
156
+
157
+ .logo-icon {
158
+ width: 36px;
159
+ height: 36px;
160
+ background: linear-gradient(135deg, var(--color-primary), var(--color-accent));
161
+ border-radius: var(--radius-md);
162
+ display: flex;
163
+ align-items: center;
164
+ justify-content: center;
165
+ color: white;
166
+ font-weight: 700;
167
+ font-size: 1.25rem;
168
+ }
169
+
170
+ .sidebar-nav {
171
+ flex: 1;
172
+ padding: 1rem 0.75rem;
173
+ display: flex;
174
+ flex-direction: column;
175
+ gap: 0.25rem;
176
+ }
177
+
178
+ .nav-item {
179
+ display: flex;
180
+ align-items: center;
181
+ gap: 0.75rem;
182
+ padding: 0.625rem 0.75rem;
183
+ border-radius: var(--radius-md);
184
+ color: var(--color-text-secondary);
185
+ font-size: 0.9375rem;
186
+ font-weight: 500;
187
+ transition: all var(--transition-fast);
188
+ }
189
+
190
+ .nav-item:hover {
191
+ background-color: var(--color-bg-tertiary);
192
+ color: var(--color-text);
193
+ }
194
+
195
+ .nav-item.active {
196
+ background-color: var(--color-primary);
197
+ color: white;
198
+ }
199
+
200
+ .nav-icon {
201
+ width: 20px;
202
+ height: 20px;
203
+ flex-shrink: 0;
204
+ }
205
+
206
+ .sidebar-footer {
207
+ padding: 0.75rem;
208
+ border-top: 1px solid var(--color-border);
209
+ }
210
+
211
+ /* ==================== Top Header ==================== */
212
+ .top-header {
213
+ position: sticky;
214
+ top: 0;
215
+ height: var(--header-height);
216
+ background-color: var(--color-bg-secondary);
217
+ border-bottom: 1px solid var(--color-border);
218
+ display: flex;
219
+ align-items: center;
220
+ padding: 0 1.5rem;
221
+ z-index: 50;
222
+ }
223
+
224
+ .mobile-menu-btn {
225
+ display: none;
226
+ background: none;
227
+ border: none;
228
+ padding: 0.5rem;
229
+ cursor: pointer;
230
+ color: var(--color-text);
231
+ }
232
+
233
+ .mobile-menu-btn svg {
234
+ width: 24px;
235
+ height: 24px;
236
+ }
237
+
238
+ .header-spacer {
239
+ flex: 1;
240
+ }
241
+
242
+ .header-actions {
243
+ display: flex;
244
+ align-items: center;
245
+ gap: 0.75rem;
246
+ }
247
+
248
+ .theme-toggle {
249
+ background: none;
250
+ border: none;
251
+ padding: 0.5rem;
252
+ border-radius: var(--radius-md);
253
+ cursor: pointer;
254
+ color: var(--color-text-secondary);
255
+ transition: all var(--transition-fast);
256
+ }
257
+
258
+ .theme-toggle:hover {
259
+ background-color: var(--color-bg-tertiary);
260
+ color: var(--color-text);
261
+ }
262
+
263
+ .theme-toggle svg {
264
+ width: 20px;
265
+ height: 20px;
266
+ }
267
+
268
+ [data-theme="dark"] .sun-icon,
269
+ [data-theme="light"] .moon-icon {
270
+ display: none;
271
+ }
272
+
273
+ [data-theme="dark"] .moon-icon,
274
+ [data-theme="light"] .sun-icon {
275
+ display: block;
276
+ }
277
+
278
+ /* ==================== Footer ==================== */
279
+ .site-footer {
280
+ padding: 2rem;
281
+ border-top: 1px solid var(--color-border);
282
+ text-align: center;
283
+ color: var(--color-text-muted);
284
+ font-size: 0.875rem;
285
+ }
286
+
287
+ /* ==================== Hero Section ==================== */
288
+ .hero-section {
289
+ text-align: center;
290
+ padding: 3rem 0;
291
+ margin-bottom: 2rem;
292
+ }
293
+
294
+ .hero-title {
295
+ font-size: 2.5rem;
296
+ font-weight: 800;
297
+ margin-bottom: 0.75rem;
298
+ background: linear-gradient(135deg, var(--color-primary), var(--color-accent));
299
+ -webkit-background-clip: text;
300
+ -webkit-text-fill-color: transparent;
301
+ background-clip: text;
302
+ }
303
+
304
+ .hero-description {
305
+ font-size: 1.25rem;
306
+ color: var(--color-text-secondary);
307
+ max-width: 500px;
308
+ margin: 0 auto;
309
+ }
310
+
311
+ /* ==================== Section Headers ==================== */
312
+ .section-header {
313
+ display: flex;
314
+ align-items: center;
315
+ justify-content: space-between;
316
+ margin-bottom: 1.5rem;
317
+ }
318
+
319
+ .section-title {
320
+ font-size: 1.25rem;
321
+ font-weight: 700;
322
+ }
323
+
324
+ .view-all-link {
325
+ font-size: 0.875rem;
326
+ font-weight: 500;
327
+ }
328
+
329
+ /* ==================== Post Cards ==================== */
330
+ .post-cards {
331
+ display: grid;
332
+ gap: 1rem;
333
+ }
334
+
335
+ .post-card {
336
+ background-color: var(--color-bg-secondary);
337
+ border: 1px solid var(--color-border);
338
+ border-radius: var(--radius-lg);
339
+ padding: 1.5rem;
340
+ transition: all var(--transition-normal);
341
+ }
342
+
343
+ .post-card:hover {
344
+ border-color: var(--color-border-hover);
345
+ box-shadow: var(--shadow-md);
346
+ transform: translateY(-2px);
347
+ }
348
+
349
+ .card-tags {
350
+ display: flex;
351
+ gap: 0.5rem;
352
+ margin-bottom: 0.75rem;
353
+ }
354
+
355
+ .tag-small {
356
+ font-size: 0.75rem;
357
+ color: var(--color-text-muted);
358
+ }
359
+
360
+ .card-title {
361
+ font-size: 1.25rem;
362
+ font-weight: 700;
363
+ line-height: 1.4;
364
+ margin-bottom: 0.5rem;
365
+ }
366
+
367
+ .card-title a {
368
+ color: var(--color-text);
369
+ }
370
+
371
+ .card-title a:hover {
372
+ color: var(--color-primary);
373
+ }
374
+
375
+ .card-excerpt {
376
+ color: var(--color-text-secondary);
377
+ font-size: 0.9375rem;
378
+ line-height: 1.6;
379
+ margin-bottom: 1rem;
380
+ }
381
+
382
+ .card-meta {
383
+ display: flex;
384
+ gap: 1rem;
385
+ font-size: 0.8125rem;
386
+ color: var(--color-text-muted);
387
+ }
388
+
389
+ /* ==================== Notes ==================== */
390
+ .notes-list {
391
+ display: flex;
392
+ flex-direction: column;
393
+ gap: 1rem;
394
+ }
395
+
396
+ .note-card {
397
+ background-color: var(--color-bg-secondary);
398
+ border: 1px solid var(--color-border);
399
+ border-radius: var(--radius-lg);
400
+ padding: 1.25rem;
401
+ }
402
+
403
+ .note-time {
404
+ font-size: 0.75rem;
405
+ color: var(--color-text-muted);
406
+ display: block;
407
+ margin-bottom: 0.5rem;
408
+ }
409
+
410
+ .note-preview {
411
+ color: var(--color-text-secondary);
412
+ margin-bottom: 0.75rem;
413
+ }
414
+
415
+ .note-link {
416
+ font-size: 0.875rem;
417
+ font-weight: 500;
418
+ }
419
+
420
+ /* ==================== Notes Timeline ==================== */
421
+ .notes-timeline {
422
+ position: relative;
423
+ padding-left: 2rem;
424
+ }
425
+
426
+ .notes-timeline::before {
427
+ content: '';
428
+ position: absolute;
429
+ left: 7px;
430
+ top: 0;
431
+ bottom: 0;
432
+ width: 2px;
433
+ background-color: var(--color-border);
434
+ }
435
+
436
+ .timeline-item {
437
+ position: relative;
438
+ padding-bottom: 2rem;
439
+ }
440
+
441
+ .timeline-marker {
442
+ position: absolute;
443
+ left: -2rem;
444
+ top: 0.25rem;
445
+ width: 16px;
446
+ height: 16px;
447
+ background-color: var(--color-bg-secondary);
448
+ border: 3px solid var(--color-primary);
449
+ border-radius: 50%;
450
+ }
451
+
452
+ .timeline-date {
453
+ font-size: 0.8125rem;
454
+ color: var(--color-text-muted);
455
+ display: block;
456
+ margin-bottom: 0.5rem;
457
+ }
458
+
459
+ .timeline-body {
460
+ background-color: var(--color-bg-secondary);
461
+ border: 1px solid var(--color-border);
462
+ border-radius: var(--radius-lg);
463
+ padding: 1.25rem;
464
+ }
465
+
466
+ .note-text {
467
+ color: var(--color-text-secondary);
468
+ margin-bottom: 0.75rem;
469
+ }
470
+
471
+ .read-more {
472
+ font-size: 0.875rem;
473
+ font-weight: 500;
474
+ }
475
+
476
+ .timeline-tags {
477
+ margin-top: 0.75rem;
478
+ display: flex;
479
+ gap: 0.5rem;
480
+ flex-wrap: wrap;
481
+ }
482
+
483
+ /* ==================== Tags ==================== */
484
+ .tag {
485
+ color: var(--color-tag-text);
486
+ font-size: 0.875rem;
487
+ font-weight: 500;
488
+ }
489
+
490
+ .tag:hover {
491
+ color: var(--color-primary);
492
+ }
493
+
494
+ .tag-badge {
495
+ display: inline-block;
496
+ padding: 0.25rem 0.75rem;
497
+ background-color: var(--color-tag-bg);
498
+ color: var(--color-tag-text);
499
+ font-size: 0.75rem;
500
+ font-weight: 600;
501
+ border-radius: var(--radius-full);
502
+ }
503
+
504
+ .tag-badge.large {
505
+ font-size: 1.5rem;
506
+ padding: 0.5rem 1.25rem;
507
+ }
508
+
509
+ .tag-list {
510
+ display: flex;
511
+ gap: 0.75rem;
512
+ flex-wrap: wrap;
513
+ }
514
+
515
+ .tags-cloud {
516
+ display: flex;
517
+ flex-wrap: wrap;
518
+ gap: 0.75rem;
519
+ }
520
+
521
+ .tag-chip {
522
+ display: inline-flex;
523
+ align-items: center;
524
+ gap: 0.5rem;
525
+ padding: 0.5rem 1rem;
526
+ background-color: var(--color-bg-secondary);
527
+ border: 1px solid var(--color-border);
528
+ border-radius: var(--radius-full);
529
+ color: var(--color-text);
530
+ font-weight: 500;
531
+ transition: all var(--transition-fast);
532
+ }
533
+
534
+ .tag-chip:hover {
535
+ border-color: var(--color-primary);
536
+ color: var(--color-primary);
537
+ }
538
+
539
+ .tag-count {
540
+ background-color: var(--color-bg-tertiary);
541
+ padding: 0.125rem 0.5rem;
542
+ border-radius: var(--radius-full);
543
+ font-size: 0.75rem;
544
+ color: var(--color-text-muted);
545
+ }
546
+
547
+ /* ==================== Post Article ==================== */
548
+ .post-article {
549
+ max-width: var(--content-max-width);
550
+ margin: 0 auto;
551
+ }
552
+
553
+ .post-header {
554
+ margin-bottom: 2rem;
555
+ }
556
+
557
+ .post-tags-top {
558
+ display: flex;
559
+ gap: 0.5rem;
560
+ margin-bottom: 1rem;
561
+ }
562
+
563
+ .post-title {
564
+ font-size: 2.25rem;
565
+ font-weight: 800;
566
+ line-height: 1.2;
567
+ margin-bottom: 1.5rem;
568
+ }
569
+
570
+ .post-meta {
571
+ display: flex;
572
+ align-items: center;
573
+ }
574
+
575
+ .author-info {
576
+ display: flex;
577
+ align-items: center;
578
+ gap: 0.75rem;
579
+ }
580
+
581
+ .author-avatar {
582
+ width: 44px;
583
+ height: 44px;
584
+ background: linear-gradient(135deg, var(--color-primary), var(--color-accent));
585
+ border-radius: 50%;
586
+ display: flex;
587
+ align-items: center;
588
+ justify-content: center;
589
+ color: white;
590
+ font-weight: 700;
591
+ font-size: 1.125rem;
592
+ }
593
+
594
+ .author-details {
595
+ display: flex;
596
+ flex-direction: column;
597
+ }
598
+
599
+ .author-name {
600
+ font-weight: 600;
601
+ color: var(--color-text);
602
+ }
603
+
604
+ .post-date {
605
+ font-size: 0.875rem;
606
+ color: var(--color-text-muted);
607
+ }
608
+
609
+ .post-hero {
610
+ margin: 2rem -2rem;
611
+ border-radius: var(--radius-lg);
612
+ overflow: hidden;
613
+ }
614
+
615
+ .post-hero img {
616
+ width: 100%;
617
+ max-height: 400px;
618
+ object-fit: cover;
619
+ }
620
+
621
+ .post-footer {
622
+ margin-top: 3rem;
623
+ padding-top: 2rem;
624
+ border-top: 1px solid var(--color-border);
625
+ }
626
+
627
+ .post-tags {
628
+ display: flex;
629
+ gap: 1rem;
630
+ flex-wrap: wrap;
631
+ }
632
+
633
+ /* ==================== Page Article ==================== */
634
+ .page-article {
635
+ max-width: var(--content-max-width);
636
+ margin: 0 auto;
637
+ }
638
+
639
+ .page-header {
640
+ margin-bottom: 2rem;
641
+ }
642
+
643
+ .page-title {
644
+ font-size: 2.25rem;
645
+ font-weight: 800;
646
+ margin-bottom: 0.5rem;
647
+ }
648
+
649
+ .page-description {
650
+ color: var(--color-text-secondary);
651
+ font-size: 1.125rem;
652
+ }
653
+
654
+ /* ==================== Note Article ==================== */
655
+ .note-article {
656
+ max-width: var(--content-max-width);
657
+ margin: 0 auto;
658
+ background-color: var(--color-bg-secondary);
659
+ border: 1px solid var(--color-border);
660
+ border-radius: var(--radius-lg);
661
+ padding: 2rem;
662
+ }
663
+
664
+ .note-header {
665
+ margin-bottom: 1.5rem;
666
+ }
667
+
668
+ .note-date {
669
+ font-size: 0.875rem;
670
+ color: var(--color-text-muted);
671
+ }
672
+
673
+ .note-footer {
674
+ margin-top: 1.5rem;
675
+ padding-top: 1.5rem;
676
+ border-top: 1px solid var(--color-border);
677
+ }
678
+
679
+ /* ==================== Prose (Content) ==================== */
680
+ .prose {
681
+ font-size: 1.0625rem;
682
+ line-height: 1.75;
683
+ color: var(--color-text);
684
+ }
685
+
686
+ .prose h1, .prose h2, .prose h3, .prose h4, .prose h5, .prose h6 {
687
+ font-weight: 700;
688
+ line-height: 1.3;
689
+ margin-top: 2rem;
690
+ margin-bottom: 1rem;
691
+ }
692
+
693
+ .prose h1 { font-size: 2rem; }
694
+ .prose h2 { font-size: 1.5rem; }
695
+ .prose h3 { font-size: 1.25rem; }
696
+ .prose h4 { font-size: 1.125rem; }
697
+
698
+ .prose p {
699
+ margin-bottom: 1.25rem;
700
+ }
701
+
702
+ .prose a {
703
+ color: var(--color-link);
704
+ text-decoration: underline;
705
+ text-underline-offset: 2px;
706
+ }
707
+
708
+ .prose strong {
709
+ font-weight: 600;
710
+ }
711
+
712
+ .prose ul, .prose ol {
713
+ margin-bottom: 1.25rem;
714
+ padding-left: 1.5rem;
715
+ }
716
+
717
+ .prose li {
718
+ margin-bottom: 0.5rem;
719
+ }
720
+
721
+ .prose blockquote {
722
+ border-left: 4px solid var(--color-primary);
723
+ padding-left: 1.25rem;
724
+ margin: 1.5rem 0;
725
+ color: var(--color-text-secondary);
726
+ font-style: italic;
727
+ }
728
+
729
+ .prose code {
730
+ font-family: var(--font-mono);
731
+ font-size: 0.875em;
732
+ background-color: var(--color-code-bg);
733
+ padding: 0.2em 0.4em;
734
+ border-radius: var(--radius-sm);
735
+ }
736
+
737
+ .prose pre {
738
+ background-color: var(--color-code-bg);
739
+ border-radius: var(--radius-md);
740
+ padding: 1.25rem;
741
+ overflow-x: auto;
742
+ margin: 1.5rem 0;
743
+ }
744
+
745
+ .prose pre code {
746
+ background: none;
747
+ padding: 0;
748
+ font-size: 0.875rem;
749
+ line-height: 1.7;
750
+ }
751
+
752
+ .prose img {
753
+ border-radius: var(--radius-md);
754
+ margin: 1.5rem 0;
755
+ }
756
+
757
+ .prose hr {
758
+ border: none;
759
+ height: 1px;
760
+ background-color: var(--color-border);
761
+ margin: 2rem 0;
762
+ }
763
+
764
+ .prose table {
765
+ width: 100%;
766
+ border-collapse: collapse;
767
+ margin: 1.5rem 0;
768
+ }
769
+
770
+ .prose th, .prose td {
771
+ padding: 0.75rem;
772
+ border: 1px solid var(--color-border);
773
+ text-align: left;
774
+ }
775
+
776
+ .prose th {
777
+ background-color: var(--color-bg-tertiary);
778
+ font-weight: 600;
779
+ }
780
+
781
+ /* ==================== Pagination ==================== */
782
+ .pagination {
783
+ display: flex;
784
+ align-items: center;
785
+ justify-content: center;
786
+ gap: 1rem;
787
+ margin-top: 3rem;
788
+ }
789
+
790
+ .pagination-btn {
791
+ display: inline-flex;
792
+ align-items: center;
793
+ gap: 0.5rem;
794
+ padding: 0.625rem 1rem;
795
+ background-color: var(--color-bg-secondary);
796
+ border: 1px solid var(--color-border);
797
+ border-radius: var(--radius-md);
798
+ color: var(--color-text);
799
+ font-weight: 500;
800
+ font-size: 0.875rem;
801
+ transition: all var(--transition-fast);
802
+ }
803
+
804
+ .pagination-btn:hover:not(.disabled) {
805
+ border-color: var(--color-primary);
806
+ color: var(--color-primary);
807
+ }
808
+
809
+ .pagination-btn.disabled {
810
+ opacity: 0.5;
811
+ cursor: not-allowed;
812
+ }
813
+
814
+ .pagination-btn svg {
815
+ width: 16px;
816
+ height: 16px;
817
+ }
818
+
819
+ .pagination-info {
820
+ font-size: 0.875rem;
821
+ color: var(--color-text-muted);
822
+ }
823
+
824
+ /* ==================== Responsive ==================== */
825
+ @media (max-width: 1024px) {
826
+ .sidebar {
827
+ transform: translateX(-100%);
828
+ }
829
+
830
+ .sidebar.open {
831
+ transform: translateX(0);
832
+ box-shadow: var(--shadow-lg);
833
+ }
834
+
835
+ .main-wrapper {
836
+ margin-left: 0;
837
+ }
838
+
839
+ .mobile-menu-btn {
840
+ display: flex;
841
+ }
842
+ }
843
+
844
+ @media (max-width: 640px) {
845
+ .main-content {
846
+ padding: 1rem;
847
+ }
848
+
849
+ .hero-title {
850
+ font-size: 2rem;
851
+ }
852
+
853
+ .hero-description {
854
+ font-size: 1rem;
855
+ }
856
+
857
+ .post-title {
858
+ font-size: 1.75rem;
859
+ }
860
+
861
+ .page-title {
862
+ font-size: 1.75rem;
863
+ }
864
+
865
+ .post-hero {
866
+ margin: 1.5rem -1rem;
867
+ }
868
+
869
+ .section-header {
870
+ flex-direction: column;
871
+ align-items: flex-start;
872
+ gap: 0.5rem;
873
+ }
874
+ }