@terrymooreii/sia 2.1.2 → 2.1.4

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 +2 -2
  3. package/lib/config.js +1 -1
  4. package/lib/content.js +24 -21
  5. package/lib/templates.js +10 -5
  6. package/package.json +1 -1
  7. package/themes/_shared/includes/meta.njk +41 -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,1169 @@
1
+ /* Magazine Theme - Inspired by Medium and Ghost */
2
+
3
+ /* ==================== CSS Variables ==================== */
4
+ :root {
5
+ /* Light mode colors */
6
+ --color-bg: #ffffff;
7
+ --color-bg-secondary: #fafafa;
8
+ --color-bg-accent: #f3f4f6;
9
+ --color-text: #1a1a1a;
10
+ --color-text-secondary: #6b7280;
11
+ --color-text-muted: #9ca3af;
12
+ --color-primary: #1a8917;
13
+ --color-primary-hover: #156d12;
14
+ --color-border: #e5e7eb;
15
+ --color-border-light: #f3f4f6;
16
+ --color-link: #1a8917;
17
+ --color-code-bg: #f3f4f6;
18
+
19
+ /* Typography */
20
+ --font-display: 'Playfair Display', Georgia, serif;
21
+ --font-sans: 'Source Sans 3', -apple-system, BlinkMacSystemFont, sans-serif;
22
+ --font-serif: 'Source Serif 4', Georgia, serif;
23
+ --font-mono: 'SF Mono', Consolas, monospace;
24
+
25
+ /* Sizing */
26
+ --content-width: 680px;
27
+ --wide-width: 1080px;
28
+ --header-height: 65px;
29
+
30
+ /* Effects */
31
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.04);
32
+ --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.08);
33
+ --shadow-lg: 0 12px 40px rgba(0, 0, 0, 0.12);
34
+
35
+ --transition: 200ms ease;
36
+ --radius: 4px;
37
+ --radius-lg: 8px;
38
+ }
39
+
40
+ [data-theme="dark"] {
41
+ --color-bg: #121212;
42
+ --color-bg-secondary: #1e1e1e;
43
+ --color-bg-accent: #2a2a2a;
44
+ --color-text: #e5e5e5;
45
+ --color-text-secondary: #a0a0a0;
46
+ --color-text-muted: #707070;
47
+ --color-primary: #4ade80;
48
+ --color-primary-hover: #86efac;
49
+ --color-border: #2e2e2e;
50
+ --color-border-light: #252525;
51
+ --color-link: #4ade80;
52
+ --color-code-bg: #2a2a2a;
53
+
54
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.2);
55
+ --shadow-md: 0 4px 12px rgba(0, 0, 0, 0.3);
56
+ --shadow-lg: 0 12px 40px rgba(0, 0, 0, 0.4);
57
+ }
58
+
59
+ /* ==================== Reset & Base ==================== */
60
+ *, *::before, *::after {
61
+ box-sizing: border-box;
62
+ margin: 0;
63
+ padding: 0;
64
+ }
65
+
66
+ html {
67
+ font-size: 18px;
68
+ -webkit-font-smoothing: antialiased;
69
+ -moz-osx-font-smoothing: grayscale;
70
+ scroll-behavior: smooth;
71
+ }
72
+
73
+ body {
74
+ font-family: var(--font-sans);
75
+ background-color: var(--color-bg);
76
+ color: var(--color-text);
77
+ line-height: 1.6;
78
+ min-height: 100vh;
79
+ }
80
+
81
+ a {
82
+ color: var(--color-link);
83
+ text-decoration: none;
84
+ transition: color var(--transition);
85
+ }
86
+
87
+ a:hover {
88
+ color: var(--color-primary-hover);
89
+ }
90
+
91
+ img {
92
+ max-width: 100%;
93
+ height: auto;
94
+ display: block;
95
+ }
96
+
97
+ /* ==================== Header ==================== */
98
+ .site-header {
99
+ position: sticky;
100
+ top: 0;
101
+ z-index: 100;
102
+ background-color: var(--color-bg);
103
+ border-bottom: 1px solid var(--color-border);
104
+ }
105
+
106
+ .header-container {
107
+ max-width: var(--wide-width);
108
+ margin: 0 auto;
109
+ padding: 0 1.5rem;
110
+ height: var(--header-height);
111
+ display: flex;
112
+ align-items: center;
113
+ justify-content: space-between;
114
+ }
115
+
116
+ .site-logo {
117
+ font-family: var(--font-display);
118
+ font-size: 1.5rem;
119
+ font-weight: 700;
120
+ color: var(--color-text);
121
+ letter-spacing: -0.02em;
122
+ }
123
+
124
+ .main-nav {
125
+ display: flex;
126
+ gap: 2rem;
127
+ }
128
+
129
+ .nav-link {
130
+ font-size: 0.875rem;
131
+ font-weight: 500;
132
+ color: var(--color-text-secondary);
133
+ padding: 0.5rem 0;
134
+ position: relative;
135
+ }
136
+
137
+ .nav-link:hover,
138
+ .nav-link.active {
139
+ color: var(--color-text);
140
+ }
141
+
142
+ .nav-link.active::after {
143
+ content: '';
144
+ position: absolute;
145
+ bottom: -1px;
146
+ left: 0;
147
+ right: 0;
148
+ height: 2px;
149
+ background-color: var(--color-primary);
150
+ }
151
+
152
+ .header-actions {
153
+ display: flex;
154
+ align-items: center;
155
+ gap: 0.75rem;
156
+ }
157
+
158
+ .theme-toggle {
159
+ background: none;
160
+ border: none;
161
+ padding: 0.5rem;
162
+ cursor: pointer;
163
+ color: var(--color-text-secondary);
164
+ transition: color var(--transition);
165
+ border-radius: var(--radius);
166
+ }
167
+
168
+ .theme-toggle:hover {
169
+ color: var(--color-text);
170
+ }
171
+
172
+ .theme-toggle svg {
173
+ width: 20px;
174
+ height: 20px;
175
+ }
176
+
177
+ [data-theme="dark"] .sun-icon,
178
+ [data-theme="light"] .moon-icon {
179
+ display: none;
180
+ }
181
+
182
+ [data-theme="dark"] .moon-icon,
183
+ [data-theme="light"] .sun-icon {
184
+ display: block;
185
+ }
186
+
187
+ .mobile-menu-toggle {
188
+ display: none;
189
+ background: none;
190
+ border: none;
191
+ padding: 0.5rem;
192
+ cursor: pointer;
193
+ color: var(--color-text);
194
+ }
195
+
196
+ .mobile-menu-toggle svg {
197
+ width: 24px;
198
+ height: 24px;
199
+ }
200
+
201
+ .mobile-nav {
202
+ display: none;
203
+ padding: 1rem 1.5rem;
204
+ border-top: 1px solid var(--color-border);
205
+ background-color: var(--color-bg);
206
+ }
207
+
208
+ .site-header.nav-open .mobile-nav {
209
+ display: block;
210
+ }
211
+
212
+ .mobile-nav-link {
213
+ display: block;
214
+ padding: 0.75rem 0;
215
+ color: var(--color-text);
216
+ font-weight: 500;
217
+ border-bottom: 1px solid var(--color-border-light);
218
+ }
219
+
220
+ /* ==================== Main Content ==================== */
221
+ .main {
222
+ min-height: calc(100vh - var(--header-height) - 200px);
223
+ }
224
+
225
+ /* ==================== Hero ==================== */
226
+ .hero {
227
+ padding: 5rem 1.5rem;
228
+ text-align: center;
229
+ border-bottom: 1px solid var(--color-border);
230
+ }
231
+
232
+ .hero-content {
233
+ max-width: var(--content-width);
234
+ margin: 0 auto;
235
+ }
236
+
237
+ .hero-title {
238
+ font-family: var(--font-display);
239
+ font-size: 3.5rem;
240
+ font-weight: 700;
241
+ letter-spacing: -0.03em;
242
+ margin-bottom: 1rem;
243
+ }
244
+
245
+ .hero-subtitle {
246
+ font-size: 1.25rem;
247
+ color: var(--color-text-secondary);
248
+ line-height: 1.6;
249
+ }
250
+
251
+ /* ==================== Featured Section ==================== */
252
+ .featured-section {
253
+ max-width: var(--wide-width);
254
+ margin: 0 auto;
255
+ padding: 4rem 1.5rem;
256
+ border-bottom: 1px solid var(--color-border);
257
+ }
258
+
259
+ .featured-article {
260
+ max-width: var(--content-width);
261
+ margin: 0 auto;
262
+ }
263
+
264
+ .featured-category {
265
+ display: inline-block;
266
+ font-size: 0.75rem;
267
+ font-weight: 600;
268
+ text-transform: uppercase;
269
+ letter-spacing: 0.05em;
270
+ color: var(--color-primary);
271
+ margin-bottom: 1rem;
272
+ }
273
+
274
+ .featured-title {
275
+ font-family: var(--font-display);
276
+ font-size: 2.5rem;
277
+ font-weight: 700;
278
+ line-height: 1.2;
279
+ letter-spacing: -0.02em;
280
+ margin-bottom: 1rem;
281
+ }
282
+
283
+ .featured-title a {
284
+ color: var(--color-text);
285
+ }
286
+
287
+ .featured-title a:hover {
288
+ color: var(--color-primary);
289
+ }
290
+
291
+ .featured-excerpt {
292
+ font-family: var(--font-serif);
293
+ font-size: 1.25rem;
294
+ color: var(--color-text-secondary);
295
+ line-height: 1.7;
296
+ margin-bottom: 1.5rem;
297
+ }
298
+
299
+ .featured-meta {
300
+ display: flex;
301
+ align-items: center;
302
+ gap: 0.75rem;
303
+ font-size: 0.875rem;
304
+ color: var(--color-text-muted);
305
+ }
306
+
307
+ .featured-author {
308
+ color: var(--color-text);
309
+ font-weight: 500;
310
+ }
311
+
312
+ /* ==================== Section Headers ==================== */
313
+ .section-header {
314
+ display: flex;
315
+ align-items: center;
316
+ justify-content: space-between;
317
+ margin-bottom: 2rem;
318
+ }
319
+
320
+ .section-title {
321
+ font-family: var(--font-display);
322
+ font-size: 1.5rem;
323
+ font-weight: 600;
324
+ }
325
+
326
+ .section-link {
327
+ font-size: 0.875rem;
328
+ font-weight: 500;
329
+ }
330
+
331
+ /* ==================== Latest Section ==================== */
332
+ .latest-section {
333
+ max-width: var(--wide-width);
334
+ margin: 0 auto;
335
+ padding: 4rem 1.5rem;
336
+ }
337
+
338
+ .articles-grid {
339
+ display: grid;
340
+ grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
341
+ gap: 2rem;
342
+ }
343
+
344
+ .article-card {
345
+ border-bottom: 1px solid var(--color-border);
346
+ padding-bottom: 2rem;
347
+ }
348
+
349
+ .card-category {
350
+ display: inline-block;
351
+ font-size: 0.75rem;
352
+ font-weight: 600;
353
+ text-transform: uppercase;
354
+ letter-spacing: 0.05em;
355
+ color: var(--color-primary);
356
+ margin-bottom: 0.75rem;
357
+ }
358
+
359
+ .card-title {
360
+ font-family: var(--font-display);
361
+ font-size: 1.25rem;
362
+ font-weight: 700;
363
+ line-height: 1.3;
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
+ font-size: 0.9375rem;
377
+ color: var(--color-text-secondary);
378
+ line-height: 1.6;
379
+ margin-bottom: 1rem;
380
+ }
381
+
382
+ .card-meta {
383
+ font-size: 0.8125rem;
384
+ color: var(--color-text-muted);
385
+ display: flex;
386
+ align-items: center;
387
+ gap: 0.5rem;
388
+ }
389
+
390
+ /* ==================== Notes Section ==================== */
391
+ .notes-section {
392
+ max-width: var(--wide-width);
393
+ margin: 0 auto;
394
+ padding: 4rem 1.5rem;
395
+ border-top: 1px solid var(--color-border);
396
+ }
397
+
398
+ .notes-feed {
399
+ display: grid;
400
+ gap: 1.5rem;
401
+ }
402
+
403
+ .note-preview {
404
+ padding: 1.5rem;
405
+ background-color: var(--color-bg-secondary);
406
+ border-radius: var(--radius-lg);
407
+ }
408
+
409
+ .note-preview time {
410
+ font-size: 0.75rem;
411
+ color: var(--color-text-muted);
412
+ display: block;
413
+ margin-bottom: 0.5rem;
414
+ }
415
+
416
+ .note-preview p {
417
+ color: var(--color-text-secondary);
418
+ margin-bottom: 0.75rem;
419
+ }
420
+
421
+ .note-link {
422
+ font-size: 0.875rem;
423
+ font-weight: 500;
424
+ }
425
+
426
+ /* ==================== Listing Header ==================== */
427
+ .listing-header {
428
+ max-width: var(--content-width);
429
+ margin: 0 auto;
430
+ padding: 4rem 1.5rem 2rem;
431
+ text-align: center;
432
+ }
433
+
434
+ .tag-label {
435
+ font-size: 0.75rem;
436
+ font-weight: 600;
437
+ text-transform: uppercase;
438
+ letter-spacing: 0.1em;
439
+ color: var(--color-primary);
440
+ display: block;
441
+ margin-bottom: 0.5rem;
442
+ }
443
+
444
+ .listing-title {
445
+ font-family: var(--font-display);
446
+ font-size: 2.5rem;
447
+ font-weight: 700;
448
+ margin-bottom: 0.75rem;
449
+ }
450
+
451
+ .listing-description {
452
+ font-size: 1.125rem;
453
+ color: var(--color-text-secondary);
454
+ }
455
+
456
+ /* ==================== Articles List ==================== */
457
+ .articles-list {
458
+ max-width: var(--content-width);
459
+ margin: 0 auto;
460
+ padding: 2rem 1.5rem 4rem;
461
+ }
462
+
463
+ .article-row {
464
+ padding: 2rem 0;
465
+ border-bottom: 1px solid var(--color-border);
466
+ }
467
+
468
+ .article-row:first-child {
469
+ padding-top: 0;
470
+ }
471
+
472
+ .row-category {
473
+ display: inline-block;
474
+ font-size: 0.75rem;
475
+ font-weight: 600;
476
+ text-transform: uppercase;
477
+ letter-spacing: 0.05em;
478
+ color: var(--color-primary);
479
+ margin-bottom: 0.75rem;
480
+ }
481
+
482
+ .row-title {
483
+ font-family: var(--font-display);
484
+ font-size: 1.5rem;
485
+ font-weight: 700;
486
+ line-height: 1.3;
487
+ margin-bottom: 0.75rem;
488
+ }
489
+
490
+ .row-title a {
491
+ color: var(--color-text);
492
+ }
493
+
494
+ .row-title a:hover {
495
+ color: var(--color-primary);
496
+ }
497
+
498
+ .row-excerpt {
499
+ font-family: var(--font-serif);
500
+ color: var(--color-text-secondary);
501
+ line-height: 1.7;
502
+ margin-bottom: 1rem;
503
+ }
504
+
505
+ .row-meta {
506
+ font-size: 0.8125rem;
507
+ color: var(--color-text-muted);
508
+ display: flex;
509
+ align-items: center;
510
+ gap: 0.5rem;
511
+ }
512
+
513
+ .row-author {
514
+ color: var(--color-text);
515
+ font-weight: 500;
516
+ }
517
+
518
+ .meta-separator {
519
+ color: var(--color-text-muted);
520
+ }
521
+
522
+ /* ==================== Notes List ==================== */
523
+ .notes-list {
524
+ max-width: var(--content-width);
525
+ margin: 0 auto;
526
+ padding: 2rem 1.5rem 4rem;
527
+ }
528
+
529
+ .note-item {
530
+ padding: 2rem 0;
531
+ border-bottom: 1px solid var(--color-border);
532
+ }
533
+
534
+ .note-time {
535
+ font-size: 0.875rem;
536
+ color: var(--color-text-muted);
537
+ display: block;
538
+ margin-bottom: 1rem;
539
+ }
540
+
541
+ .note-content p {
542
+ font-family: var(--font-serif);
543
+ font-size: 1.0625rem;
544
+ line-height: 1.7;
545
+ color: var(--color-text-secondary);
546
+ margin-bottom: 1rem;
547
+ }
548
+
549
+ .note-read-more {
550
+ font-size: 0.875rem;
551
+ font-weight: 500;
552
+ }
553
+
554
+ .note-item-tags {
555
+ margin-top: 1rem;
556
+ display: flex;
557
+ gap: 0.5rem;
558
+ }
559
+
560
+ /* ==================== Topics Grid ==================== */
561
+ .topics-grid {
562
+ max-width: var(--content-width);
563
+ margin: 0 auto;
564
+ padding: 2rem 1.5rem 4rem;
565
+ display: grid;
566
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
567
+ gap: 1rem;
568
+ }
569
+
570
+ .topic-card {
571
+ display: flex;
572
+ flex-direction: column;
573
+ padding: 1.5rem;
574
+ background-color: var(--color-bg-secondary);
575
+ border: 1px solid var(--color-border);
576
+ border-radius: var(--radius-lg);
577
+ transition: all var(--transition);
578
+ }
579
+
580
+ .topic-card:hover {
581
+ border-color: var(--color-primary);
582
+ transform: translateY(-2px);
583
+ box-shadow: var(--shadow-md);
584
+ }
585
+
586
+ .topic-name {
587
+ font-family: var(--font-display);
588
+ font-size: 1.125rem;
589
+ font-weight: 600;
590
+ color: var(--color-text);
591
+ margin-bottom: 0.25rem;
592
+ }
593
+
594
+ .topic-count {
595
+ font-size: 0.8125rem;
596
+ color: var(--color-text-muted);
597
+ }
598
+
599
+ /* ==================== Article (Single Post) ==================== */
600
+ .article {
601
+ max-width: var(--content-width);
602
+ margin: 0 auto;
603
+ padding: 3rem 1.5rem;
604
+ }
605
+
606
+ .article-header {
607
+ margin-bottom: 2.5rem;
608
+ }
609
+
610
+ .article-meta-top {
611
+ display: flex;
612
+ align-items: center;
613
+ gap: 1rem;
614
+ margin-bottom: 1.5rem;
615
+ }
616
+
617
+ .article-category {
618
+ font-size: 0.75rem;
619
+ font-weight: 600;
620
+ text-transform: uppercase;
621
+ letter-spacing: 0.05em;
622
+ color: var(--color-primary);
623
+ }
624
+
625
+ .article-reading-time {
626
+ font-size: 0.8125rem;
627
+ color: var(--color-text-muted);
628
+ }
629
+
630
+ .article-title {
631
+ font-family: var(--font-display);
632
+ font-size: 2.75rem;
633
+ font-weight: 700;
634
+ line-height: 1.15;
635
+ letter-spacing: -0.02em;
636
+ margin-bottom: 1.25rem;
637
+ }
638
+
639
+ .article-subtitle {
640
+ font-family: var(--font-serif);
641
+ font-size: 1.375rem;
642
+ color: var(--color-text-secondary);
643
+ line-height: 1.5;
644
+ margin-bottom: 2rem;
645
+ }
646
+
647
+ .article-byline {
648
+ display: flex;
649
+ align-items: center;
650
+ gap: 1rem;
651
+ }
652
+
653
+ .author-avatar {
654
+ width: 48px;
655
+ height: 48px;
656
+ border-radius: 50%;
657
+ background: linear-gradient(135deg, var(--color-primary), #10b981);
658
+ display: flex;
659
+ align-items: center;
660
+ justify-content: center;
661
+ color: white;
662
+ font-weight: 600;
663
+ font-size: 1.25rem;
664
+ }
665
+
666
+ .author-info {
667
+ display: flex;
668
+ flex-direction: column;
669
+ }
670
+
671
+ .author-name {
672
+ font-weight: 600;
673
+ color: var(--color-text);
674
+ }
675
+
676
+ .publish-date {
677
+ font-size: 0.875rem;
678
+ color: var(--color-text-muted);
679
+ }
680
+
681
+ .article-hero {
682
+ margin: 2.5rem -1.5rem;
683
+ }
684
+
685
+ .article-hero img {
686
+ width: 100%;
687
+ max-height: 500px;
688
+ object-fit: cover;
689
+ }
690
+
691
+ .article-hero figcaption {
692
+ padding: 0.75rem 1.5rem;
693
+ font-size: 0.8125rem;
694
+ color: var(--color-text-muted);
695
+ text-align: center;
696
+ }
697
+
698
+ .article-footer {
699
+ margin-top: 3rem;
700
+ padding-top: 2rem;
701
+ border-top: 1px solid var(--color-border);
702
+ }
703
+
704
+ .article-tags {
705
+ display: flex;
706
+ flex-wrap: wrap;
707
+ gap: 0.5rem;
708
+ margin-bottom: 2rem;
709
+ }
710
+
711
+ .article-share {
712
+ display: flex;
713
+ align-items: center;
714
+ gap: 1rem;
715
+ }
716
+
717
+ .share-label {
718
+ font-size: 0.875rem;
719
+ color: var(--color-text-muted);
720
+ }
721
+
722
+ .share-links {
723
+ display: flex;
724
+ gap: 0.5rem;
725
+ }
726
+
727
+ .share-link {
728
+ display: flex;
729
+ align-items: center;
730
+ justify-content: center;
731
+ width: 36px;
732
+ height: 36px;
733
+ border-radius: 50%;
734
+ background-color: var(--color-bg-accent);
735
+ color: var(--color-text-secondary);
736
+ transition: all var(--transition);
737
+ }
738
+
739
+ .share-link:hover {
740
+ background-color: var(--color-primary);
741
+ color: white;
742
+ }
743
+
744
+ .share-link svg {
745
+ width: 16px;
746
+ height: 16px;
747
+ }
748
+
749
+ /* ==================== Read More ==================== */
750
+ .read-more {
751
+ max-width: var(--content-width);
752
+ margin: 0 auto;
753
+ padding: 3rem 1.5rem 4rem;
754
+ border-top: 1px solid var(--color-border);
755
+ }
756
+
757
+ .read-more-title {
758
+ font-family: var(--font-display);
759
+ font-size: 1.25rem;
760
+ font-weight: 600;
761
+ margin-bottom: 1.5rem;
762
+ }
763
+
764
+ .read-more-posts {
765
+ display: grid;
766
+ gap: 1.5rem;
767
+ }
768
+
769
+ .read-more-card {
770
+ padding-bottom: 1.5rem;
771
+ border-bottom: 1px solid var(--color-border-light);
772
+ }
773
+
774
+ .read-more-card:last-child {
775
+ border-bottom: none;
776
+ padding-bottom: 0;
777
+ }
778
+
779
+ .read-more-card-title {
780
+ font-family: var(--font-display);
781
+ font-size: 1.125rem;
782
+ font-weight: 600;
783
+ line-height: 1.4;
784
+ margin-bottom: 0.25rem;
785
+ }
786
+
787
+ .read-more-card-title a {
788
+ color: var(--color-text);
789
+ }
790
+
791
+ .read-more-card-title a:hover {
792
+ color: var(--color-primary);
793
+ }
794
+
795
+ .read-more-date {
796
+ font-size: 0.8125rem;
797
+ color: var(--color-text-muted);
798
+ }
799
+
800
+ /* ==================== Page ==================== */
801
+ .page {
802
+ max-width: var(--content-width);
803
+ margin: 0 auto;
804
+ padding: 3rem 1.5rem 4rem;
805
+ }
806
+
807
+ .page-header {
808
+ margin-bottom: 2.5rem;
809
+ }
810
+
811
+ .page-title {
812
+ font-family: var(--font-display);
813
+ font-size: 2.5rem;
814
+ font-weight: 700;
815
+ }
816
+
817
+ /* ==================== Note ==================== */
818
+ .note {
819
+ max-width: var(--content-width);
820
+ margin: 0 auto;
821
+ padding: 3rem 1.5rem 4rem;
822
+ }
823
+
824
+ .note-header {
825
+ margin-bottom: 2rem;
826
+ }
827
+
828
+ .note-timestamp {
829
+ font-size: 0.875rem;
830
+ color: var(--color-text-muted);
831
+ }
832
+
833
+ .note-footer {
834
+ margin-top: 2rem;
835
+ padding-top: 1.5rem;
836
+ border-top: 1px solid var(--color-border);
837
+ }
838
+
839
+ .note-tags {
840
+ display: flex;
841
+ flex-wrap: wrap;
842
+ gap: 0.5rem;
843
+ }
844
+
845
+ /* ==================== Tags ==================== */
846
+ .tag {
847
+ display: inline-block;
848
+ padding: 0.375rem 0.75rem;
849
+ background-color: var(--color-bg-accent);
850
+ color: var(--color-text-secondary);
851
+ font-size: 0.8125rem;
852
+ font-weight: 500;
853
+ border-radius: var(--radius);
854
+ transition: all var(--transition);
855
+ }
856
+
857
+ .tag:hover {
858
+ background-color: var(--color-primary);
859
+ color: white;
860
+ }
861
+
862
+ .tag-list {
863
+ display: flex;
864
+ flex-wrap: wrap;
865
+ gap: 0.5rem;
866
+ }
867
+
868
+ /* ==================== Prose ==================== */
869
+ .prose {
870
+ font-family: var(--font-serif);
871
+ font-size: 1.1875rem;
872
+ line-height: 1.8;
873
+ color: var(--color-text);
874
+ }
875
+
876
+ .prose h1, .prose h2, .prose h3, .prose h4, .prose h5, .prose h6 {
877
+ font-family: var(--font-display);
878
+ font-weight: 700;
879
+ line-height: 1.3;
880
+ margin-top: 2.5rem;
881
+ margin-bottom: 1rem;
882
+ letter-spacing: -0.02em;
883
+ }
884
+
885
+ .prose h1 { font-size: 2rem; }
886
+ .prose h2 { font-size: 1.625rem; }
887
+ .prose h3 { font-size: 1.375rem; }
888
+ .prose h4 { font-size: 1.125rem; }
889
+
890
+ .prose p {
891
+ margin-bottom: 1.5rem;
892
+ }
893
+
894
+ .prose a {
895
+ color: var(--color-link);
896
+ text-decoration: underline;
897
+ text-underline-offset: 3px;
898
+ text-decoration-thickness: 1px;
899
+ }
900
+
901
+ .prose a:hover {
902
+ text-decoration-thickness: 2px;
903
+ }
904
+
905
+ .prose strong {
906
+ font-weight: 600;
907
+ }
908
+
909
+ .prose ul, .prose ol {
910
+ margin-bottom: 1.5rem;
911
+ padding-left: 1.75rem;
912
+ }
913
+
914
+ .prose li {
915
+ margin-bottom: 0.625rem;
916
+ }
917
+
918
+ .prose blockquote {
919
+ font-size: 1.375rem;
920
+ font-style: italic;
921
+ border-left: 3px solid var(--color-primary);
922
+ padding-left: 1.5rem;
923
+ margin: 2rem 0;
924
+ color: var(--color-text-secondary);
925
+ }
926
+
927
+ .prose code {
928
+ font-family: var(--font-mono);
929
+ font-size: 0.875em;
930
+ background-color: var(--color-code-bg);
931
+ padding: 0.2em 0.4em;
932
+ border-radius: var(--radius);
933
+ }
934
+
935
+ .prose pre {
936
+ background-color: var(--color-code-bg);
937
+ border-radius: var(--radius-lg);
938
+ padding: 1.5rem;
939
+ overflow-x: auto;
940
+ margin: 2rem 0;
941
+ }
942
+
943
+ .prose pre code {
944
+ background: none;
945
+ padding: 0;
946
+ font-size: 0.875rem;
947
+ line-height: 1.7;
948
+ }
949
+
950
+ .prose img {
951
+ border-radius: var(--radius);
952
+ margin: 2rem 0;
953
+ }
954
+
955
+ .prose hr {
956
+ border: none;
957
+ text-align: center;
958
+ margin: 3rem 0;
959
+ }
960
+
961
+ .prose hr::before {
962
+ content: '• • •';
963
+ color: var(--color-text-muted);
964
+ letter-spacing: 0.5em;
965
+ }
966
+
967
+ .prose table {
968
+ width: 100%;
969
+ border-collapse: collapse;
970
+ margin: 2rem 0;
971
+ font-family: var(--font-sans);
972
+ font-size: 0.9375rem;
973
+ }
974
+
975
+ .prose th, .prose td {
976
+ padding: 0.875rem;
977
+ border: 1px solid var(--color-border);
978
+ text-align: left;
979
+ }
980
+
981
+ .prose th {
982
+ background-color: var(--color-bg-accent);
983
+ font-weight: 600;
984
+ }
985
+
986
+ /* ==================== Pagination ==================== */
987
+ .pagination {
988
+ display: flex;
989
+ align-items: center;
990
+ justify-content: center;
991
+ gap: 2rem;
992
+ padding: 2rem 0 4rem;
993
+ max-width: var(--content-width);
994
+ margin: 0 auto;
995
+ }
996
+
997
+ .pagination-link {
998
+ display: flex;
999
+ align-items: center;
1000
+ gap: 0.5rem;
1001
+ font-size: 0.875rem;
1002
+ font-weight: 500;
1003
+ color: var(--color-text);
1004
+ }
1005
+
1006
+ .pagination-link:hover {
1007
+ color: var(--color-primary);
1008
+ }
1009
+
1010
+ .pagination-link.disabled {
1011
+ color: var(--color-text-muted);
1012
+ pointer-events: none;
1013
+ }
1014
+
1015
+ .pagination-arrow {
1016
+ font-size: 1.25rem;
1017
+ }
1018
+
1019
+ .pagination-current {
1020
+ font-size: 0.875rem;
1021
+ color: var(--color-text-muted);
1022
+ }
1023
+
1024
+ /* ==================== Footer ==================== */
1025
+ .site-footer {
1026
+ background-color: var(--color-bg-secondary);
1027
+ border-top: 1px solid var(--color-border);
1028
+ padding: 4rem 1.5rem 2rem;
1029
+ }
1030
+
1031
+ .footer-container {
1032
+ max-width: var(--wide-width);
1033
+ margin: 0 auto;
1034
+ display: flex;
1035
+ justify-content: space-between;
1036
+ gap: 3rem;
1037
+ padding-bottom: 3rem;
1038
+ border-bottom: 1px solid var(--color-border);
1039
+ }
1040
+
1041
+ .footer-logo {
1042
+ font-family: var(--font-display);
1043
+ font-size: 1.5rem;
1044
+ font-weight: 700;
1045
+ color: var(--color-text);
1046
+ }
1047
+
1048
+ .footer-tagline {
1049
+ margin-top: 0.5rem;
1050
+ color: var(--color-text-secondary);
1051
+ font-size: 0.9375rem;
1052
+ }
1053
+
1054
+ .footer-links {
1055
+ display: flex;
1056
+ gap: 4rem;
1057
+ }
1058
+
1059
+ .footer-heading {
1060
+ font-size: 0.75rem;
1061
+ font-weight: 600;
1062
+ text-transform: uppercase;
1063
+ letter-spacing: 0.1em;
1064
+ color: var(--color-text-muted);
1065
+ margin-bottom: 1rem;
1066
+ }
1067
+
1068
+ .footer-nav {
1069
+ display: flex;
1070
+ flex-direction: column;
1071
+ gap: 0.75rem;
1072
+ }
1073
+
1074
+ .footer-nav a {
1075
+ font-size: 0.9375rem;
1076
+ color: var(--color-text-secondary);
1077
+ }
1078
+
1079
+ .footer-nav a:hover {
1080
+ color: var(--color-text);
1081
+ }
1082
+
1083
+ .footer-bottom {
1084
+ max-width: var(--wide-width);
1085
+ margin: 0 auto;
1086
+ padding-top: 2rem;
1087
+ font-size: 0.875rem;
1088
+ color: var(--color-text-muted);
1089
+ }
1090
+
1091
+ /* ==================== Empty State ==================== */
1092
+ .empty-state {
1093
+ text-align: center;
1094
+ padding: 3rem;
1095
+ color: var(--color-text-muted);
1096
+ }
1097
+
1098
+ /* ==================== Responsive ==================== */
1099
+ @media (max-width: 768px) {
1100
+ html {
1101
+ font-size: 16px;
1102
+ }
1103
+
1104
+ .main-nav {
1105
+ display: none;
1106
+ }
1107
+
1108
+ .mobile-menu-toggle {
1109
+ display: block;
1110
+ }
1111
+
1112
+ .hero {
1113
+ padding: 3rem 1.5rem;
1114
+ }
1115
+
1116
+ .hero-title {
1117
+ font-size: 2.5rem;
1118
+ }
1119
+
1120
+ .featured-title {
1121
+ font-size: 1.75rem;
1122
+ }
1123
+
1124
+ .listing-title {
1125
+ font-size: 2rem;
1126
+ }
1127
+
1128
+ .article-title {
1129
+ font-size: 2rem;
1130
+ }
1131
+
1132
+ .article-subtitle {
1133
+ font-size: 1.125rem;
1134
+ }
1135
+
1136
+ .footer-container {
1137
+ flex-direction: column;
1138
+ gap: 2rem;
1139
+ }
1140
+
1141
+ .footer-links {
1142
+ flex-direction: column;
1143
+ gap: 2rem;
1144
+ }
1145
+
1146
+ .article-hero {
1147
+ margin: 2rem -1.5rem;
1148
+ }
1149
+
1150
+ .section-header {
1151
+ flex-direction: column;
1152
+ align-items: flex-start;
1153
+ gap: 0.5rem;
1154
+ }
1155
+ }
1156
+
1157
+ @media (max-width: 480px) {
1158
+ .articles-grid {
1159
+ grid-template-columns: 1fr;
1160
+ }
1161
+
1162
+ .topics-grid {
1163
+ grid-template-columns: 1fr;
1164
+ }
1165
+
1166
+ .row-meta {
1167
+ flex-wrap: wrap;
1168
+ }
1169
+ }