@terrymooreii/sia 1.0.2 → 2.0.1

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 (61) hide show
  1. package/_config.yml +32 -0
  2. package/bin/cli.js +51 -0
  3. package/defaults/includes/footer.njk +14 -0
  4. package/defaults/includes/header.njk +71 -0
  5. package/defaults/includes/pagination.njk +26 -0
  6. package/defaults/includes/tag-list.njk +11 -0
  7. package/defaults/layouts/base.njk +41 -0
  8. package/defaults/layouts/note.njk +25 -0
  9. package/defaults/layouts/page.njk +14 -0
  10. package/defaults/layouts/post.njk +43 -0
  11. package/defaults/pages/blog.njk +36 -0
  12. package/defaults/pages/feed.njk +28 -0
  13. package/defaults/pages/index.njk +60 -0
  14. package/defaults/pages/notes.njk +34 -0
  15. package/defaults/pages/tag.njk +41 -0
  16. package/defaults/pages/tags.njk +39 -0
  17. package/defaults/styles/main.css +1074 -0
  18. package/lib/assets.js +234 -0
  19. package/lib/build.js +263 -19
  20. package/lib/collections.js +195 -0
  21. package/lib/config.js +122 -0
  22. package/lib/content.js +325 -0
  23. package/lib/index.js +53 -18
  24. package/lib/init.js +555 -6
  25. package/lib/new.js +379 -41
  26. package/lib/server.js +257 -0
  27. package/lib/templates.js +268 -0
  28. package/package.json +30 -15
  29. package/readme.md +212 -63
  30. package/src/images/.gitkeep +3 -0
  31. package/src/notes/2024-12-17-first-note.md +6 -0
  32. package/src/pages/about.md +29 -0
  33. package/src/posts/2024-12-16-markdown-features.md +76 -0
  34. package/src/posts/2024-12-17-welcome-to-sia.md +78 -0
  35. package/src/posts/2024-12-17-welcome-to-static-forge.md +78 -0
  36. package/.prettierignore +0 -3
  37. package/.prettierrc +0 -8
  38. package/lib/helpers.js +0 -37
  39. package/lib/markdown.js +0 -33
  40. package/lib/parse.js +0 -100
  41. package/lib/readconfig.js +0 -18
  42. package/lib/rss.js +0 -63
  43. package/templates/siarc-template.js +0 -53
  44. package/templates/src/_partials/_footer.njk +0 -1
  45. package/templates/src/_partials/_head.njk +0 -35
  46. package/templates/src/_partials/_header.njk +0 -1
  47. package/templates/src/_partials/_layout.njk +0 -12
  48. package/templates/src/_partials/_nav.njk +0 -12
  49. package/templates/src/_partials/page.njk +0 -5
  50. package/templates/src/_partials/post.njk +0 -13
  51. package/templates/src/_partials/posts.njk +0 -19
  52. package/templates/src/assets/android-chrome-192x192.png +0 -0
  53. package/templates/src/assets/android-chrome-512x512.png +0 -0
  54. package/templates/src/assets/apple-touch-icon.png +0 -0
  55. package/templates/src/assets/favicon-16x16.png +0 -0
  56. package/templates/src/assets/favicon-32x32.png +0 -0
  57. package/templates/src/assets/favicon.ico +0 -0
  58. package/templates/src/assets/site.webmanifest +0 -19
  59. package/templates/src/content/index.md +0 -7
  60. package/templates/src/css/markdown.css +0 -1210
  61. package/templates/src/css/theme.css +0 -120
@@ -0,0 +1,1074 @@
1
+ /* Sia - Clean Light/Dark Theme */
2
+
3
+ /* ===== CSS Variables ===== */
4
+ :root {
5
+ /* Light Mode Colors (default) */
6
+ --color-bg: #fafafa;
7
+ --color-bg-alt: #ffffff;
8
+ --color-text: #2d3748;
9
+ --color-text-muted: #718096;
10
+ --color-text-light: #a0aec0;
11
+ --color-primary: #3182ce;
12
+ --color-primary-hover: #2c5282;
13
+ --color-border: #e2e8f0;
14
+ --color-border-light: #edf2f7;
15
+ --color-accent: #ed8936;
16
+ --color-code-bg: #f7fafc;
17
+
18
+ /* Typography */
19
+ --font-sans: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
20
+ --font-serif: Georgia, Cambria, 'Times New Roman', Times, serif;
21
+ --font-mono: 'SF Mono', SFMono-Regular, Consolas, 'Liberation Mono', Menlo, monospace;
22
+
23
+ /* Sizing */
24
+ --container-width: 720px;
25
+ --container-wide: 1080px;
26
+ --spacing-xs: 0.25rem;
27
+ --spacing-sm: 0.5rem;
28
+ --spacing-md: 1rem;
29
+ --spacing-lg: 1.5rem;
30
+ --spacing-xl: 2rem;
31
+ --spacing-2xl: 3rem;
32
+ --spacing-3xl: 4rem;
33
+
34
+ /* Border Radius */
35
+ --radius-sm: 4px;
36
+ --radius-md: 6px;
37
+ --radius-lg: 8px;
38
+
39
+ /* Shadows */
40
+ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
41
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
42
+ }
43
+
44
+ /* Dark Mode Colors */
45
+ [data-theme="dark"] {
46
+ --color-bg: #1a202c;
47
+ --color-bg-alt: #2d3748;
48
+ --color-text: #f7fafc;
49
+ --color-text-muted: #a0aec0;
50
+ --color-text-light: #718096;
51
+ --color-primary: #63b3ed;
52
+ --color-primary-hover: #90cdf4;
53
+ --color-border: #4a5568;
54
+ --color-border-light: #2d3748;
55
+ --color-accent: #f6ad55;
56
+ --color-code-bg: #2d3748;
57
+
58
+ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.3);
59
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.4), 0 2px 4px -1px rgba(0, 0, 0, 0.3);
60
+ }
61
+
62
+ /* ===== Reset & Base ===== */
63
+ *, *::before, *::after {
64
+ box-sizing: border-box;
65
+ }
66
+
67
+ html {
68
+ font-size: 16px;
69
+ line-height: 1.6;
70
+ -webkit-font-smoothing: antialiased;
71
+ -moz-osx-font-smoothing: grayscale;
72
+ }
73
+
74
+ body {
75
+ margin: 0;
76
+ padding: 0;
77
+ font-family: var(--font-sans);
78
+ color: var(--color-text);
79
+ background-color: var(--color-bg);
80
+ min-height: 100vh;
81
+ display: flex;
82
+ flex-direction: column;
83
+ }
84
+
85
+ a {
86
+ color: var(--color-primary);
87
+ text-decoration: none;
88
+ transition: color 0.15s ease;
89
+ }
90
+
91
+ a:hover {
92
+ color: var(--color-primary-hover);
93
+ }
94
+
95
+ img {
96
+ max-width: 100%;
97
+ height: auto;
98
+ display: block;
99
+ }
100
+
101
+ /* ===== Layout ===== */
102
+ .container {
103
+ width: 100%;
104
+ max-width: var(--container-width);
105
+ margin: 0 auto;
106
+ padding: 0 var(--spacing-lg);
107
+ }
108
+
109
+ .container-wide {
110
+ max-width: var(--container-wide);
111
+ }
112
+
113
+ .main {
114
+ flex: 1;
115
+ padding: var(--spacing-2xl) 0 var(--spacing-3xl);
116
+ max-width: var(--container-width);
117
+ margin: 0 auto;
118
+ width: 100%;
119
+ padding-left: var(--spacing-lg);
120
+ padding-right: var(--spacing-lg);
121
+ }
122
+
123
+ /* ===== Header ===== */
124
+ .site-header {
125
+ background: var(--color-bg-alt);
126
+ border-bottom: 1px solid var(--color-border);
127
+ padding: var(--spacing-md) 0;
128
+ position: sticky;
129
+ top: 0;
130
+ z-index: 100;
131
+ }
132
+
133
+ .site-header .container {
134
+ display: flex;
135
+ align-items: center;
136
+ justify-content: space-between;
137
+ max-width: var(--container-wide);
138
+ }
139
+
140
+ .site-logo {
141
+ font-size: 1.25rem;
142
+ font-weight: 700;
143
+ color: var(--color-text);
144
+ letter-spacing: -0.02em;
145
+ }
146
+
147
+ .site-logo:hover {
148
+ color: var(--color-primary);
149
+ }
150
+
151
+ .site-nav {
152
+ display: flex;
153
+ gap: var(--spacing-lg);
154
+ align-items: center;
155
+ }
156
+
157
+ .nav-link {
158
+ color: var(--color-text-muted);
159
+ font-size: 0.9375rem;
160
+ font-weight: 500;
161
+ }
162
+
163
+ .nav-link:hover,
164
+ .nav-link.active {
165
+ color: var(--color-text);
166
+ }
167
+
168
+ /* Theme Toggle Button */
169
+ .theme-toggle {
170
+ display: flex;
171
+ align-items: center;
172
+ justify-content: center;
173
+ width: 36px;
174
+ height: 36px;
175
+ padding: 0;
176
+ background: transparent;
177
+ border: 1px solid var(--color-border);
178
+ border-radius: var(--radius-sm);
179
+ cursor: pointer;
180
+ color: var(--color-text-muted);
181
+ transition: all 0.2s ease;
182
+ margin-left: var(--spacing-sm);
183
+ }
184
+
185
+ .theme-toggle:hover {
186
+ color: var(--color-text);
187
+ border-color: var(--color-text-muted);
188
+ background: var(--color-border-light);
189
+ }
190
+
191
+ .theme-toggle .icon-sun,
192
+ .theme-toggle .icon-moon {
193
+ transition: opacity 0.2s ease, transform 0.3s ease;
194
+ }
195
+
196
+ /* Light mode: show moon, hide sun */
197
+ .theme-toggle .icon-sun {
198
+ display: none;
199
+ }
200
+
201
+ .theme-toggle .icon-moon {
202
+ display: block;
203
+ }
204
+
205
+ /* Dark mode: show sun, hide moon */
206
+ [data-theme="dark"] .theme-toggle .icon-sun {
207
+ display: block;
208
+ }
209
+
210
+ [data-theme="dark"] .theme-toggle .icon-moon {
211
+ display: none;
212
+ }
213
+
214
+ /* ===== Footer ===== */
215
+ .site-footer {
216
+ background: var(--color-bg-alt);
217
+ border-top: 1px solid var(--color-border);
218
+ padding: var(--spacing-xl) 0;
219
+ margin-top: auto;
220
+ }
221
+
222
+ .site-footer .container {
223
+ max-width: var(--container-wide);
224
+ display: flex;
225
+ align-items: center;
226
+ justify-content: space-between;
227
+ }
228
+
229
+ .footer-text {
230
+ color: var(--color-text-muted);
231
+ font-size: 0.875rem;
232
+ margin: 0;
233
+ }
234
+
235
+ .footer-nav {
236
+ display: flex;
237
+ gap: var(--spacing-lg);
238
+ }
239
+
240
+ .footer-link {
241
+ color: var(--color-text-muted);
242
+ font-size: 0.875rem;
243
+ }
244
+
245
+ .footer-link:hover {
246
+ color: var(--color-text);
247
+ }
248
+
249
+ /* ===== Hero ===== */
250
+ .hero {
251
+ text-align: center;
252
+ padding: var(--spacing-3xl) 0;
253
+ border-bottom: 1px solid var(--color-border-light);
254
+ margin-bottom: var(--spacing-2xl);
255
+ }
256
+
257
+ .hero-title {
258
+ font-size: 2.5rem;
259
+ font-weight: 700;
260
+ letter-spacing: -0.03em;
261
+ margin: 0 0 var(--spacing-md);
262
+ color: var(--color-text);
263
+ }
264
+
265
+ .hero-description {
266
+ font-size: 1.25rem;
267
+ color: var(--color-text-muted);
268
+ margin: 0;
269
+ max-width: 36rem;
270
+ margin-left: auto;
271
+ margin-right: auto;
272
+ }
273
+
274
+ /* ===== Sections ===== */
275
+ .section {
276
+ margin-bottom: var(--spacing-3xl);
277
+ }
278
+
279
+ .section-header {
280
+ display: flex;
281
+ align-items: baseline;
282
+ justify-content: space-between;
283
+ margin-bottom: var(--spacing-lg);
284
+ border-bottom: 1px solid var(--color-border-light);
285
+ padding-bottom: var(--spacing-sm);
286
+ }
287
+
288
+ .section-title {
289
+ font-size: 1.25rem;
290
+ font-weight: 600;
291
+ margin: 0;
292
+ color: var(--color-text);
293
+ }
294
+
295
+ .section-link {
296
+ font-size: 0.875rem;
297
+ color: var(--color-text-muted);
298
+ }
299
+
300
+ .section-link:hover {
301
+ color: var(--color-primary);
302
+ }
303
+
304
+ /* ===== Page Header ===== */
305
+ .page-header {
306
+ margin-bottom: var(--spacing-2xl);
307
+ padding-bottom: var(--spacing-lg);
308
+ border-bottom: 1px solid var(--color-border-light);
309
+ }
310
+
311
+ .page-title {
312
+ font-size: 2rem;
313
+ font-weight: 700;
314
+ letter-spacing: -0.02em;
315
+ margin: 0 0 var(--spacing-sm);
316
+ }
317
+
318
+ .page-description {
319
+ color: var(--color-text-muted);
320
+ margin: 0;
321
+ font-size: 1.0625rem;
322
+ }
323
+
324
+ /* ===== Post Card ===== */
325
+ .post-list {
326
+ display: flex;
327
+ flex-direction: column;
328
+ gap: var(--spacing-xl);
329
+ }
330
+
331
+ .post-card {
332
+ padding-bottom: var(--spacing-xl);
333
+ border-bottom: 1px solid var(--color-border-light);
334
+ }
335
+
336
+ .post-card:last-child {
337
+ border-bottom: none;
338
+ }
339
+
340
+ .post-card-title {
341
+ font-size: 1.375rem;
342
+ font-weight: 600;
343
+ margin: 0 0 var(--spacing-sm);
344
+ line-height: 1.3;
345
+ }
346
+
347
+ .post-card-title a {
348
+ color: var(--color-text);
349
+ }
350
+
351
+ .post-card-title a:hover {
352
+ color: var(--color-primary);
353
+ }
354
+
355
+ .post-card-meta {
356
+ display: flex;
357
+ align-items: center;
358
+ gap: var(--spacing-md);
359
+ font-size: 0.875rem;
360
+ color: var(--color-text-muted);
361
+ margin-bottom: var(--spacing-sm);
362
+ }
363
+
364
+ .post-card-reading-time::before {
365
+ content: '·';
366
+ margin-right: var(--spacing-md);
367
+ }
368
+
369
+ .post-card-tags {
370
+ display: flex;
371
+ flex-wrap: wrap;
372
+ gap: var(--spacing-xs);
373
+ margin-bottom: var(--spacing-sm);
374
+ }
375
+
376
+ .post-card-excerpt {
377
+ color: var(--color-text-muted);
378
+ margin: 0 0 var(--spacing-sm);
379
+ line-height: 1.6;
380
+ }
381
+
382
+ .post-card-link {
383
+ font-size: 0.9375rem;
384
+ font-weight: 500;
385
+ }
386
+
387
+ /* ===== Post Detail ===== */
388
+ .post-header {
389
+ margin-bottom: var(--spacing-2xl);
390
+ padding-bottom: var(--spacing-lg);
391
+ border-bottom: 1px solid var(--color-border-light);
392
+ }
393
+
394
+ .post-title {
395
+ font-size: 2.25rem;
396
+ font-weight: 700;
397
+ letter-spacing: -0.02em;
398
+ margin: 0 0 var(--spacing-md);
399
+ line-height: 1.2;
400
+ }
401
+
402
+ .post-meta {
403
+ display: flex;
404
+ align-items: center;
405
+ flex-wrap: wrap;
406
+ gap: var(--spacing-sm);
407
+ color: var(--color-text-muted);
408
+ font-size: 0.9375rem;
409
+ }
410
+
411
+ .post-meta-divider {
412
+ color: var(--color-text-light);
413
+ }
414
+
415
+ .post-tags a {
416
+ color: var(--color-text-muted);
417
+ }
418
+
419
+ .post-tags a:hover {
420
+ color: var(--color-primary);
421
+ }
422
+
423
+ .post-content {
424
+ margin-bottom: var(--spacing-2xl);
425
+ }
426
+
427
+ .post-footer {
428
+ padding-top: var(--spacing-xl);
429
+ border-top: 1px solid var(--color-border-light);
430
+ }
431
+
432
+ .post-tags-footer {
433
+ display: flex;
434
+ align-items: center;
435
+ flex-wrap: wrap;
436
+ gap: var(--spacing-sm);
437
+ margin-bottom: var(--spacing-lg);
438
+ }
439
+
440
+ .tags-label {
441
+ color: var(--color-text-muted);
442
+ font-size: 0.875rem;
443
+ }
444
+
445
+ .post-nav {
446
+ display: flex;
447
+ gap: var(--spacing-md);
448
+ }
449
+
450
+ /* ===== Notes ===== */
451
+ .notes-grid {
452
+ display: grid;
453
+ gap: var(--spacing-lg);
454
+ }
455
+
456
+ .note-card {
457
+ background: var(--color-bg-alt);
458
+ border: 1px solid var(--color-border);
459
+ border-radius: var(--radius-md);
460
+ padding: var(--spacing-lg);
461
+ }
462
+
463
+ .note-card-content {
464
+ margin-bottom: var(--spacing-md);
465
+ color: var(--color-text);
466
+ }
467
+
468
+ .note-card-footer {
469
+ display: flex;
470
+ align-items: center;
471
+ justify-content: space-between;
472
+ font-size: 0.875rem;
473
+ color: var(--color-text-muted);
474
+ }
475
+
476
+ .notes-stream {
477
+ display: flex;
478
+ flex-direction: column;
479
+ gap: var(--spacing-xl);
480
+ }
481
+
482
+ .note-item {
483
+ padding-bottom: var(--spacing-xl);
484
+ border-bottom: 1px solid var(--color-border-light);
485
+ }
486
+
487
+ .note-item:last-child {
488
+ border-bottom: none;
489
+ }
490
+
491
+ .note-item-content {
492
+ margin-bottom: var(--spacing-md);
493
+ }
494
+
495
+ .note-item-footer {
496
+ display: flex;
497
+ align-items: center;
498
+ gap: var(--spacing-md);
499
+ font-size: 0.875rem;
500
+ color: var(--color-text-muted);
501
+ }
502
+
503
+ .note-item-permalink {
504
+ margin-left: auto;
505
+ color: var(--color-text-light);
506
+ }
507
+
508
+ .note-item-permalink:hover {
509
+ color: var(--color-primary);
510
+ }
511
+
512
+ .note-footer {
513
+ display: flex;
514
+ align-items: center;
515
+ gap: var(--spacing-md);
516
+ font-size: 0.875rem;
517
+ color: var(--color-text-muted);
518
+ margin-top: var(--spacing-lg);
519
+ }
520
+
521
+ .note-nav {
522
+ margin-top: var(--spacing-xl);
523
+ }
524
+
525
+ /* ===== Tags ===== */
526
+ .tag {
527
+ display: inline-flex;
528
+ align-items: center;
529
+ background: var(--color-border-light);
530
+ color: var(--color-text-muted);
531
+ padding: var(--spacing-xs) var(--spacing-sm);
532
+ border-radius: var(--radius-sm);
533
+ font-size: 0.8125rem;
534
+ font-weight: 500;
535
+ transition: all 0.15s ease;
536
+ }
537
+
538
+ .tag:hover,
539
+ .tag.active {
540
+ background: var(--color-primary);
541
+ color: white;
542
+ }
543
+
544
+ .tag-sm {
545
+ padding: 2px var(--spacing-xs);
546
+ font-size: 0.75rem;
547
+ }
548
+
549
+ .tag-count {
550
+ opacity: 0.7;
551
+ margin-left: var(--spacing-xs);
552
+ }
553
+
554
+ .tag-cloud {
555
+ display: flex;
556
+ flex-wrap: wrap;
557
+ gap: var(--spacing-sm);
558
+ margin-bottom: var(--spacing-2xl);
559
+ }
560
+
561
+ .tag-lg {
562
+ font-size: 1rem;
563
+ padding: var(--spacing-sm) var(--spacing-md);
564
+ }
565
+
566
+ .tag-md {
567
+ font-size: 0.9375rem;
568
+ }
569
+
570
+ .tags-page {
571
+ /* Tags page layout */
572
+ }
573
+
574
+ .tags-detail {
575
+ /* Tag detail sections */
576
+ }
577
+
578
+ .tag-section {
579
+ margin-bottom: var(--spacing-xl);
580
+ padding-bottom: var(--spacing-lg);
581
+ border-bottom: 1px solid var(--color-border-light);
582
+ }
583
+
584
+ .tag-section:last-child {
585
+ border-bottom: none;
586
+ }
587
+
588
+ .tag-section-title {
589
+ font-size: 1.125rem;
590
+ font-weight: 600;
591
+ margin: 0 0 var(--spacing-md);
592
+ }
593
+
594
+ .tag-section-title a {
595
+ color: var(--color-text);
596
+ }
597
+
598
+ .tag-section-title a:hover {
599
+ color: var(--color-primary);
600
+ }
601
+
602
+ .tag-section-count {
603
+ color: var(--color-text-muted);
604
+ font-weight: 400;
605
+ }
606
+
607
+ .tag-posts {
608
+ list-style: none;
609
+ margin: 0;
610
+ padding: 0;
611
+ }
612
+
613
+ .tag-posts li {
614
+ display: flex;
615
+ align-items: baseline;
616
+ justify-content: space-between;
617
+ padding: var(--spacing-xs) 0;
618
+ }
619
+
620
+ .tag-posts time {
621
+ color: var(--color-text-light);
622
+ font-size: 0.875rem;
623
+ flex-shrink: 0;
624
+ margin-left: var(--spacing-md);
625
+ }
626
+
627
+ .more-link {
628
+ font-size: 0.875rem;
629
+ color: var(--color-text-muted);
630
+ }
631
+
632
+ /* ===== Pagination ===== */
633
+ .pagination {
634
+ display: flex;
635
+ align-items: center;
636
+ justify-content: space-between;
637
+ margin-top: var(--spacing-2xl);
638
+ padding-top: var(--spacing-lg);
639
+ border-top: 1px solid var(--color-border-light);
640
+ }
641
+
642
+ .pagination-info {
643
+ color: var(--color-text-muted);
644
+ font-size: 0.875rem;
645
+ }
646
+
647
+ .pagination-links {
648
+ display: flex;
649
+ gap: var(--spacing-md);
650
+ }
651
+
652
+ .pagination-link {
653
+ padding: var(--spacing-sm) var(--spacing-md);
654
+ border: 1px solid var(--color-border);
655
+ border-radius: var(--radius-sm);
656
+ font-size: 0.875rem;
657
+ color: var(--color-text);
658
+ transition: all 0.15s ease;
659
+ }
660
+
661
+ .pagination-link:hover:not(.disabled) {
662
+ background: var(--color-primary);
663
+ border-color: var(--color-primary);
664
+ color: white;
665
+ }
666
+
667
+ .pagination-link.disabled {
668
+ color: var(--color-text-light);
669
+ cursor: not-allowed;
670
+ opacity: 0.5;
671
+ }
672
+
673
+ /* ===== Buttons ===== */
674
+ .btn {
675
+ display: inline-flex;
676
+ align-items: center;
677
+ justify-content: center;
678
+ padding: var(--spacing-sm) var(--spacing-lg);
679
+ border-radius: var(--radius-sm);
680
+ font-size: 0.9375rem;
681
+ font-weight: 500;
682
+ transition: all 0.15s ease;
683
+ cursor: pointer;
684
+ text-decoration: none;
685
+ }
686
+
687
+ .btn-primary {
688
+ background: var(--color-primary);
689
+ color: white;
690
+ border: 1px solid var(--color-primary);
691
+ }
692
+
693
+ .btn-primary:hover {
694
+ background: var(--color-primary-hover);
695
+ border-color: var(--color-primary-hover);
696
+ color: white;
697
+ }
698
+
699
+ .btn-secondary {
700
+ background: transparent;
701
+ color: var(--color-text);
702
+ border: 1px solid var(--color-border);
703
+ }
704
+
705
+ .btn-secondary:hover {
706
+ background: var(--color-border-light);
707
+ color: var(--color-text);
708
+ }
709
+
710
+ /* ===== Prose (Content Styling) ===== */
711
+ .prose {
712
+ line-height: 1.75;
713
+ }
714
+
715
+ .prose h1,
716
+ .prose h2,
717
+ .prose h3,
718
+ .prose h4,
719
+ .prose h5,
720
+ .prose h6 {
721
+ margin-top: 2em;
722
+ margin-bottom: 0.75em;
723
+ font-weight: 600;
724
+ line-height: 1.3;
725
+ letter-spacing: -0.01em;
726
+ }
727
+
728
+ .prose h1 { font-size: 2rem; }
729
+ .prose h2 { font-size: 1.5rem; }
730
+ .prose h3 { font-size: 1.25rem; }
731
+ .prose h4 { font-size: 1.125rem; }
732
+
733
+ .prose h1:first-child,
734
+ .prose h2:first-child,
735
+ .prose h3:first-child {
736
+ margin-top: 0;
737
+ }
738
+
739
+ .prose p {
740
+ margin: 0 0 1.5em;
741
+ }
742
+
743
+ .prose ul,
744
+ .prose ol {
745
+ margin: 0 0 1.5em;
746
+ padding-left: 1.5em;
747
+ }
748
+
749
+ .prose li {
750
+ margin-bottom: 0.5em;
751
+ }
752
+
753
+ .prose blockquote {
754
+ margin: 1.5em 0;
755
+ padding: 0.5em 0 0.5em 1.5em;
756
+ border-left: 3px solid var(--color-primary);
757
+ color: var(--color-text-muted);
758
+ font-style: italic;
759
+ }
760
+
761
+ .prose blockquote p:last-child {
762
+ margin-bottom: 0;
763
+ }
764
+
765
+ .prose pre {
766
+ background: var(--color-code-bg);
767
+ border: 1px solid var(--color-border);
768
+ border-radius: var(--radius-md);
769
+ padding: var(--spacing-lg);
770
+ overflow-x: auto;
771
+ font-family: var(--font-mono);
772
+ font-size: 0.875rem;
773
+ line-height: 1.6;
774
+ margin: 1.5em 0;
775
+ }
776
+
777
+ .prose code {
778
+ font-family: var(--font-mono);
779
+ font-size: 0.875em;
780
+ background: var(--color-code-bg);
781
+ padding: 0.2em 0.4em;
782
+ border-radius: var(--radius-sm);
783
+ }
784
+
785
+ .prose pre code {
786
+ background: none;
787
+ padding: 0;
788
+ font-size: inherit;
789
+ }
790
+
791
+ .prose img {
792
+ margin: 1.5em 0;
793
+ border-radius: var(--radius-md);
794
+ box-shadow: var(--shadow-md);
795
+ }
796
+
797
+ .prose a {
798
+ text-decoration: underline;
799
+ text-decoration-color: var(--color-border);
800
+ text-underline-offset: 2px;
801
+ }
802
+
803
+ .prose a:hover {
804
+ text-decoration-color: var(--color-primary);
805
+ }
806
+
807
+ .prose hr {
808
+ border: none;
809
+ border-top: 1px solid var(--color-border);
810
+ margin: 2em 0;
811
+ }
812
+
813
+ .prose table {
814
+ width: 100%;
815
+ border-collapse: collapse;
816
+ margin: 1.5em 0;
817
+ font-size: 0.9375rem;
818
+ }
819
+
820
+ .prose th,
821
+ .prose td {
822
+ padding: var(--spacing-sm) var(--spacing-md);
823
+ border: 1px solid var(--color-border);
824
+ text-align: left;
825
+ }
826
+
827
+ .prose th {
828
+ background: var(--color-border-light);
829
+ font-weight: 600;
830
+ }
831
+
832
+ /* ===== Empty State ===== */
833
+ .empty-message {
834
+ text-align: center;
835
+ padding: var(--spacing-3xl) var(--spacing-lg);
836
+ color: var(--color-text-muted);
837
+ background: var(--color-code-bg);
838
+ border: 1px solid var(--color-border);
839
+ border-radius: var(--radius-md);
840
+ }
841
+
842
+ .empty-message code {
843
+ background: var(--color-bg-alt);
844
+ padding: 0.2em 0.4em;
845
+ border-radius: var(--radius-sm);
846
+ font-size: 0.875em;
847
+ }
848
+
849
+ /* ===== Theme Transitions ===== */
850
+ html {
851
+ transition: background-color 0.3s ease, color 0.3s ease;
852
+ }
853
+
854
+ body,
855
+ .site-header,
856
+ .site-footer,
857
+ .note-card,
858
+ .post-card,
859
+ .prose pre,
860
+ .prose code,
861
+ .tag,
862
+ .btn,
863
+ .pagination-link,
864
+ .empty-message {
865
+ transition: background-color 0.3s ease, border-color 0.3s ease, color 0.3s ease, box-shadow 0.3s ease;
866
+ }
867
+
868
+ /* ===== Responsive ===== */
869
+ @media (max-width: 768px) {
870
+ .site-header .container {
871
+ flex-direction: column;
872
+ gap: var(--spacing-md);
873
+ }
874
+
875
+ .site-nav {
876
+ gap: var(--spacing-md);
877
+ flex-wrap: wrap;
878
+ justify-content: center;
879
+ align-items: center;
880
+ }
881
+
882
+ .theme-toggle {
883
+ margin-left: 0;
884
+ }
885
+
886
+ .site-footer .container {
887
+ flex-direction: column;
888
+ gap: var(--spacing-md);
889
+ text-align: center;
890
+ }
891
+
892
+ .hero {
893
+ padding: var(--spacing-2xl) 0;
894
+ }
895
+
896
+ .hero-title {
897
+ font-size: 2rem;
898
+ }
899
+
900
+ .post-title {
901
+ font-size: 1.75rem;
902
+ }
903
+
904
+ .pagination {
905
+ flex-direction: column;
906
+ gap: var(--spacing-md);
907
+ }
908
+ }
909
+
910
+ /* ===== Syntax Highlighting (Light Mode) ===== */
911
+ .hljs {
912
+ color: #24292e;
913
+ background: var(--color-code-bg);
914
+ }
915
+
916
+ .hljs-comment,
917
+ .hljs-quote {
918
+ color: #6a737d;
919
+ font-style: italic;
920
+ }
921
+
922
+ .hljs-keyword,
923
+ .hljs-selector-tag,
924
+ .hljs-subst {
925
+ color: #d73a49;
926
+ }
927
+
928
+ .hljs-number,
929
+ .hljs-literal,
930
+ .hljs-variable,
931
+ .hljs-template-variable,
932
+ .hljs-tag .hljs-attr {
933
+ color: #005cc5;
934
+ }
935
+
936
+ .hljs-string,
937
+ .hljs-doctag {
938
+ color: #032f62;
939
+ }
940
+
941
+ .hljs-title,
942
+ .hljs-section,
943
+ .hljs-selector-id {
944
+ color: #6f42c1;
945
+ font-weight: 600;
946
+ }
947
+
948
+ .hljs-type,
949
+ .hljs-class .hljs-title {
950
+ color: #6f42c1;
951
+ }
952
+
953
+ .hljs-tag,
954
+ .hljs-name,
955
+ .hljs-attribute {
956
+ color: #22863a;
957
+ }
958
+
959
+ .hljs-regexp,
960
+ .hljs-link {
961
+ color: #032f62;
962
+ }
963
+
964
+ .hljs-symbol,
965
+ .hljs-bullet {
966
+ color: #e36209;
967
+ }
968
+
969
+ .hljs-built_in,
970
+ .hljs-builtin-name {
971
+ color: #005cc5;
972
+ }
973
+
974
+ .hljs-meta {
975
+ color: #6a737d;
976
+ font-weight: 600;
977
+ }
978
+
979
+ .hljs-deletion {
980
+ color: #b31d28;
981
+ background-color: #ffeef0;
982
+ }
983
+
984
+ .hljs-addition {
985
+ color: #22863a;
986
+ background-color: #f0fff4;
987
+ }
988
+
989
+ .hljs-emphasis {
990
+ font-style: italic;
991
+ }
992
+
993
+ .hljs-strong {
994
+ font-weight: 600;
995
+ }
996
+
997
+ /* ===== Syntax Highlighting (Dark Mode) ===== */
998
+ [data-theme="dark"] .hljs {
999
+ color: #e1e4e8;
1000
+ background: var(--color-code-bg);
1001
+ }
1002
+
1003
+ [data-theme="dark"] .hljs-comment,
1004
+ [data-theme="dark"] .hljs-quote {
1005
+ color: #8b949e;
1006
+ }
1007
+
1008
+ [data-theme="dark"] .hljs-keyword,
1009
+ [data-theme="dark"] .hljs-selector-tag,
1010
+ [data-theme="dark"] .hljs-subst {
1011
+ color: #ff7b72;
1012
+ }
1013
+
1014
+ [data-theme="dark"] .hljs-number,
1015
+ [data-theme="dark"] .hljs-literal,
1016
+ [data-theme="dark"] .hljs-variable,
1017
+ [data-theme="dark"] .hljs-template-variable,
1018
+ [data-theme="dark"] .hljs-tag .hljs-attr {
1019
+ color: #79c0ff;
1020
+ }
1021
+
1022
+ [data-theme="dark"] .hljs-string,
1023
+ [data-theme="dark"] .hljs-doctag {
1024
+ color: #a5d6ff;
1025
+ }
1026
+
1027
+ [data-theme="dark"] .hljs-title,
1028
+ [data-theme="dark"] .hljs-section,
1029
+ [data-theme="dark"] .hljs-selector-id {
1030
+ color: #d2a8ff;
1031
+ font-weight: 600;
1032
+ }
1033
+
1034
+ [data-theme="dark"] .hljs-type,
1035
+ [data-theme="dark"] .hljs-class .hljs-title {
1036
+ color: #d2a8ff;
1037
+ }
1038
+
1039
+ [data-theme="dark"] .hljs-tag,
1040
+ [data-theme="dark"] .hljs-name,
1041
+ [data-theme="dark"] .hljs-attribute {
1042
+ color: #7ee787;
1043
+ }
1044
+
1045
+ [data-theme="dark"] .hljs-regexp,
1046
+ [data-theme="dark"] .hljs-link {
1047
+ color: #a5d6ff;
1048
+ }
1049
+
1050
+ [data-theme="dark"] .hljs-symbol,
1051
+ [data-theme="dark"] .hljs-bullet {
1052
+ color: #ffa657;
1053
+ }
1054
+
1055
+ [data-theme="dark"] .hljs-built_in,
1056
+ [data-theme="dark"] .hljs-builtin-name {
1057
+ color: #79c0ff;
1058
+ }
1059
+
1060
+ [data-theme="dark"] .hljs-meta {
1061
+ color: #8b949e;
1062
+ font-weight: 600;
1063
+ }
1064
+
1065
+ [data-theme="dark"] .hljs-deletion {
1066
+ color: #ffdcd7;
1067
+ background-color: #67060c;
1068
+ }
1069
+
1070
+ [data-theme="dark"] .hljs-addition {
1071
+ color: #aff5b4;
1072
+ background-color: #033a16;
1073
+ }
1074
+