create-jant 0.3.37 → 0.3.39

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 (50) hide show
  1. package/LICENSE +189 -189
  2. package/README.md +8 -6
  3. package/dist/index.js +5 -1
  4. package/package.json +3 -3
  5. package/template/.env.example +21 -0
  6. package/template/README.md +25 -18
  7. package/template/docs/internal/migrate.md +10 -0
  8. package/template/docs/internal/operations.md +61 -0
  9. package/template/package.json +3 -3
  10. package/template/static-site-export/README.md +70 -0
  11. package/template/static-site-export/config.toml +16 -0
  12. package/template/static-site-export/content/41q27/index.md +29 -0
  13. package/template/static-site-export/content/_index.md +4 -0
  14. package/template/static-site-export/content/a-night-heron-field-guide-for-my-walk-folder/index.md +16 -0
  15. package/template/static-site-export/content/a-quiet-saturday-after-a-busy-week/index.md +23 -0
  16. package/template/static-site-export/content/are-na-is-the-only-bookmark-pile-i-still-revisit/index.md +16 -0
  17. package/template/static-site-export/content/bought-too-many-lemons-again/index.md +15 -0
  18. package/template/static-site-export/content/current-tea-rotation/index.md +20 -0
  19. package/template/static-site-export/content/derek-sivers-still-writes-the-kind-of-internet-i-want-more-of/index.md +16 -0
  20. package/template/static-site-export/content/desk-but-better/index.md +16 -0
  21. package/template/static-site-export/content/e0kcg/index.md +12 -0
  22. package/template/static-site-export/content/from-basho/index.md +15 -0
  23. package/template/static-site-export/content/from-epictetus/index.md +15 -0
  24. package/template/static-site-export/content/from-marcus-aurelius/index.md +15 -0
  25. package/template/static-site-export/content/from-seneca/index.md +15 -0
  26. package/template/static-site-export/content/from-thoreau/index.md +15 -0
  27. package/template/static-site-export/content/gkbvv/index.md +28 -0
  28. package/template/static-site-export/content/k5vh8/index.md +29 -0
  29. package/template/static-site-export/content/mynoise-for-rainy-afternoons/index.md +16 -0
  30. package/template/static-site-export/content/nts-archives-are-good-cleaning-music/index.md +16 -0
  31. package/template/static-site-export/content/qgfcu/index.md +29 -0
  32. package/template/static-site-export/content/rain-makes-my-neighborhood-look-better/index.md +17 -0
  33. package/template/static-site-export/content/serious-eats-on-tomato-and-egg-soup/index.md +16 -0
  34. package/template/static-site-export/content/te812/index.md +29 -0
  35. package/template/static-site-export/content/telk3/index.md +29 -0
  36. package/template/static-site-export/content/the-five-minute-reset-is-still-the-best-habit-i-have/index.md +21 -0
  37. package/template/static-site-export/content/the-hallway-light-took-12-minutes-and-3-months/index.md +18 -0
  38. package/template/static-site-export/content/the-recurse-center-manual-is-weirdly-calming/index.md +16 -0
  39. package/template/static-site-export/content/u08bn/index.md +29 -0
  40. package/template/static-site-export/content/what-i-actually-use-my-notebook-for/index.md +23 -0
  41. package/template/static-site-export/content/z4s9v/index.md +29 -0
  42. package/template/static-site-export/static/style.css +338 -0
  43. package/template/static-site-export/templates/base.html +23 -0
  44. package/template/static-site-export/templates/index.html +20 -0
  45. package/template/static-site-export/templates/macros.html +58 -0
  46. package/template/static-site-export/templates/page.html +8 -0
  47. package/template/static-site-export/templates/section.html +17 -0
  48. package/template/static-site-export/templates/taxonomy_list.html +15 -0
  49. package/template/static-site-export/templates/taxonomy_single.html +13 -0
  50. package/template/wrangler.toml +12 -7
@@ -0,0 +1,28 @@
1
+ ---
2
+ date: 2026-01-07T18:40:00.000Z
3
+ updated: 2026-03-17T20:15:51.000Z
4
+ slug: gkbvv
5
+ aliases:
6
+ - /5oxsv
7
+ - /3zqv7
8
+ - /2cl6d
9
+ taxonomies:
10
+ c:
11
+ - tiny-projects
12
+ extra:
13
+ format: note
14
+ ---
15
+
16
+ Tonight's tiny project: make the desk usable again without buying a single organizer.
17
+
18
+ <!-- jant:reply date="2026-01-07T19:00:00.000Z" slug="5oxsv" format="note" -->
19
+
20
+ The real problem was not cables. It was receipts, pens, and three mugs pretending not to be clutter.
21
+
22
+ <!-- jant:reply date="2026-01-07T19:25:00.000Z" slug="3zqv7" format="note" -->
23
+
24
+ Thirty minutes later: laptop, lamp, notebook, one glass of water. That is apparently my ideal system.
25
+
26
+ <!-- jant:reply date="2026-01-07T20:10:00.000Z" slug="2cl6d" format="note" -->
27
+
28
+ I keep relearning that most home fixes are just decisions I delayed.
@@ -0,0 +1,29 @@
1
+ ---
2
+ date: 2025-11-02T11:35:00.000Z
3
+ updated: 2026-03-17T20:15:45.000Z
4
+ slug: k5vh8
5
+ aliases:
6
+ - /from-seneca-5hibo
7
+ - /a83qu
8
+ - /a-reading-log-idea-i-might-steal
9
+ taxonomies:
10
+ c:
11
+ - weekend-notes
12
+ - reading-notes
13
+ extra:
14
+ format: note
15
+ ---
16
+
17
+ Went into the bookshop for one notebook and left with a novel, essays, and a coffee I did not need. Classic behavior.
18
+
19
+ <!-- jant:reply date="2025-11-02T12:10:00.000Z" slug="from-seneca-5hibo" format="quote" quote_text="While%20we%20wait%20for%20life%2C%20life%20passes." title="From Seneca" -->
20
+
21
+ Copied this into the back page before I left the cafe.
22
+
23
+ <!-- jant:reply date="2025-11-02T13:05:00.000Z" slug="a83qu" format="note" -->
24
+
25
+ I like buying books in person because it slows me down enough to choose one on purpose. Online I become a raccoon with a wallet.
26
+
27
+ <!-- jant:reply date="2025-11-02T14:00:00.000Z" slug="a-reading-log-idea-i-might-steal" format="link" url="https://bulletjournal.com/blogs/bulletjournalist/reading-journal" title="A reading log idea I might steal" -->
28
+
29
+ Not doing all of this, but I like the simple notes-after-finish approach.
@@ -0,0 +1,16 @@
1
+ ---
2
+ title: myNoise for rainy afternoons
3
+ date: 2025-07-21T13:40:00.000Z
4
+ updated: 2026-03-17T20:15:13.000Z
5
+ slug: mynoise-for-rainy-afternoons
6
+ taxonomies:
7
+ c:
8
+ - weekend-notes
9
+ - useful-links
10
+ extra:
11
+ format: link
12
+ link_url: "https://mynoise.net/"
13
+ rating: 4
14
+ ---
15
+
16
+ I open this when the building gets loud and I need a little wall between me and everything else. It is one of the few sites I still bookmark on purpose.
@@ -0,0 +1,16 @@
1
+ ---
2
+ title: NTS archives are good cleaning music
3
+ date: 2025-08-09T10:05:00.000Z
4
+ updated: 2026-03-17T20:15:15.000Z
5
+ slug: nts-archives-are-good-cleaning-music
6
+ taxonomies:
7
+ c:
8
+ - weekend-notes
9
+ - useful-links
10
+ extra:
11
+ format: link
12
+ link_url: "https://www.nts.live/"
13
+ rating: 4
14
+ ---
15
+
16
+ I put this on whenever I need to wash dishes, fold laundry, or stop overthinking a small task. It gives the room a pulse.
@@ -0,0 +1,29 @@
1
+ ---
2
+ date: 2025-08-31T09:00:00.000Z
3
+ updated: 2026-03-17T20:15:33.000Z
4
+ slug: qgfcu
5
+ aliases:
6
+ - /c91j0
7
+ - /wsgck
8
+ - /qyucy
9
+ taxonomies:
10
+ c:
11
+ - weekend-notes
12
+ - home-cooking
13
+ extra:
14
+ format: note
15
+ ---
16
+
17
+ Trying a slower Sunday on purpose today. Laundry, soup, no errands, no browser tabs multiplying in the background. Let's see if that is enough.
18
+
19
+ <!-- jant:reply date="2025-08-31T10:05:00.000Z" slug="c91j0" format="note" -->
20
+
21
+ First win: I put the phone in the bedroom and the apartment immediately got quieter. I should not need this lesson every week, but apparently I do.
22
+
23
+ <!-- jant:reply date="2025-08-31T12:20:00.000Z" slug="wsgck" format="note" -->
24
+
25
+ Made a huge pot of lentil soup because future me deserves one easy lunch.
26
+
27
+ <!-- jant:reply date="2025-08-31T19:10:00.000Z" slug="qyucy" format="note" -->
28
+
29
+ Ending the day with the floor swept and a book on the table. Very small life. Very good life.
@@ -0,0 +1,17 @@
1
+ ---
2
+ title: Rain Makes My Neighborhood Look Better
3
+ date: 2026-02-20T17:40:00.000Z
4
+ updated: 2026-03-17T20:15:30.000Z
5
+ slug: rain-makes-my-neighborhood-look-better
6
+ taxonomies:
7
+ c:
8
+ - weekend-notes
9
+ - city-walks
10
+ extra:
11
+ format: note
12
+ featured: true
13
+ ---
14
+
15
+ Everything sharpens after a light shower: the crosswalk paint, the leaves stuck to the curb, the bakery sign that usually disappears into the block.
16
+
17
+ I took the long way home for no reason other than the street looked newly washed. That was reason enough.
@@ -0,0 +1,16 @@
1
+ ---
2
+ title: Serious Eats on tomato and egg soup
3
+ date: 2025-09-17T17:30:00.000Z
4
+ updated: 2026-03-17T20:15:20.000Z
5
+ slug: serious-eats-on-tomato-and-egg-soup
6
+ taxonomies:
7
+ c:
8
+ - useful-links
9
+ - home-cooking
10
+ extra:
11
+ format: link
12
+ link_url: "https://www.seriouseats.com/tomato-egg-drop-soup-recipe-8705599"
13
+ rating: 5
14
+ ---
15
+
16
+ This is the kind of recipe I trust on a tired weeknight. Short ingredient list, no drama, and it tastes like you tried harder than you did.
@@ -0,0 +1,29 @@
1
+ ---
2
+ date: 2026-02-01T11:55:00.000Z
3
+ updated: 2026-03-17T20:15:57.000Z
4
+ slug: te812
5
+ aliases:
6
+ - /the-soup-trick-i-always-forget
7
+ - /t77ms
8
+ - /cxiu6
9
+ taxonomies:
10
+ c:
11
+ - weekend-notes
12
+ - home-cooking
13
+ extra:
14
+ format: note
15
+ ---
16
+
17
+ Made tomato soup because the weather could not decide what month it wanted to be.
18
+
19
+ <!-- jant:reply date="2026-02-01T12:20:00.000Z" slug="the-soup-trick-i-always-forget" format="link" url="https://www.seriouseats.com/15-minute-creamy-tomato-soup-vegan-recipe" title="The soup trick I always forget" -->
20
+
21
+ Butter first, then onions. It changes the whole pot.
22
+
23
+ <!-- jant:reply date="2026-02-01T12:50:00.000Z" slug="t77ms" format="note" -->
24
+
25
+ Added a grilled cheese with too much mustard and it turned out to be exactly the right amount of mustard.
26
+
27
+ <!-- jant:reply date="2026-02-01T18:05:00.000Z" slug="cxiu6" format="note" -->
28
+
29
+ Leftovers tomorrow, which means future me already won.
@@ -0,0 +1,29 @@
1
+ ---
2
+ date: 2026-03-09T17:15:00.000Z
3
+ updated: 2026-03-17T20:16:53.000Z
4
+ slug: telk3
5
+ aliases:
6
+ - /9gqsf
7
+ - /openstreetmap-for-route-wandering
8
+ - /from-thoreau-pawt2
9
+ taxonomies:
10
+ c:
11
+ - weekend-notes
12
+ - city-walks
13
+ extra:
14
+ format: note
15
+ ---
16
+
17
+ Took the long way home because the light was good and the air finally felt like spring.
18
+
19
+ <!-- jant:reply date="2026-03-09T17:40:00.000Z" slug="9gqsf" format="note" -->
20
+
21
+ Passed the flower stall, the old bakery, and the repair shop with the radio on. Same route, different mood every time.
22
+
23
+ <!-- jant:reply date="2026-03-09T18:30:00.000Z" slug="openstreetmap-for-route-wandering" format="link" url="https://www.openstreetmap.org/" title="OpenStreetMap for route wandering" -->
24
+
25
+ Still the best place to find side streets I would otherwise miss.
26
+
27
+ <!-- jant:reply date="2026-03-09T18:05:00.000Z" slug="from-thoreau-pawt2" format="quote" quote_text="The%20price%20of%20anything%20is%20the%20amount%20of%20life%20you%20exchange%20for%20it." title="From Thoreau" -->
28
+
29
+ Thought about this while deciding not to call a car for the last mile.
@@ -0,0 +1,21 @@
1
+ ---
2
+ title: The Five-Minute Reset Is Still the Best Habit I Have
3
+ date: 2026-01-12T19:00:00.000Z
4
+ updated: 2026-03-17T20:15:27.000Z
5
+ slug: the-five-minute-reset-is-still-the-best-habit-i-have
6
+ taxonomies:
7
+ c:
8
+ - weekend-notes
9
+ - tiny-projects
10
+ extra:
11
+ format: note
12
+ ---
13
+
14
+ When the apartment starts feeling loud, I set a five-minute timer and do the same small loop:
15
+
16
+ - dishes into the sink
17
+ - clothes off the chair
18
+ - papers into one stack
19
+ - window cracked open
20
+
21
+ It does not fix everything, but it changes the room enough that I stop feeling stuck in it.
@@ -0,0 +1,18 @@
1
+ ---
2
+ title: The Hallway Light Took 12 Minutes and 3 Months
3
+ date: 2025-08-18T18:10:00.000Z
4
+ updated: 2026-03-17T20:15:17.000Z
5
+ slug: the-hallway-light-took-12-minutes-and-3-months
6
+ taxonomies:
7
+ c:
8
+ - weekend-notes
9
+ - tiny-projects
10
+ extra:
11
+ format: note
12
+ ---
13
+
14
+ The bulb burned out in June. I meant to replace it the same day. Instead I spent three months walking through the hallway like somebody in a low-budget mystery movie.
15
+
16
+ Today I bought the new bulb, climbed the stool, changed it, and laughed at how small the actual job was.
17
+
18
+ This is the kind of tiny project I avoid for no good reason. The dread is usually larger than the task.
@@ -0,0 +1,16 @@
1
+ ---
2
+ title: The Recurse Center manual is weirdly calming
3
+ date: 2026-01-29T15:20:00.000Z
4
+ updated: 2026-03-17T20:15:28.000Z
5
+ slug: the-recurse-center-manual-is-weirdly-calming
6
+ taxonomies:
7
+ c:
8
+ - useful-links
9
+ - tiny-projects
10
+ extra:
11
+ format: link
12
+ link_url: "https://www.recurse.com/manual"
13
+ rating: 5
14
+ ---
15
+
16
+ I like reading pages where people have thought hard about how they want to work together. This one always makes me want to clean up my own habits.
@@ -0,0 +1,29 @@
1
+ ---
2
+ date: 2026-03-09T17:15:00.000Z
3
+ updated: 2026-03-17T20:16:03.000Z
4
+ slug: u08bn
5
+ aliases:
6
+ - /eiwp8
7
+ - /from-thoreau-ubv9l
8
+ - /a-bird-guide-for-slow-walks
9
+ taxonomies:
10
+ c:
11
+ - weekend-notes
12
+ - city-walks
13
+ extra:
14
+ format: note
15
+ ---
16
+
17
+ Took the long way home because the light was good and the air finally felt like spring.
18
+
19
+ <!-- jant:reply date="2026-03-09T17:40:00.000Z" slug="eiwp8" format="note" -->
20
+
21
+ Passed the flower stall, the old bakery, and the repair shop with the radio on. Same route, different mood every time.
22
+
23
+ <!-- jant:reply date="2026-03-09T18:05:00.000Z" slug="from-thoreau-ubv9l" format="quote" quote_text="The%20price%20of%20anything%20is%20the%20amount%20of%20life%20you%20exchange%20for%20it." title="From Thoreau" -->
24
+
25
+ Thought about this while deciding not to call a car for the last mile.
26
+
27
+ <!-- jant:reply date="2026-03-09T18:30:00.000Z" slug="a-bird-guide-for-slow-walks" format="link" url="https://www.audubon.org/field-guide/bird/black-crowned-night-heron" title="A bird guide for slow walks" -->
28
+
29
+ Mostly posting this here so I can find it again next weekend.
@@ -0,0 +1,23 @@
1
+ ---
2
+ title: What I Actually Use My Notebook For
3
+ date: 2025-10-02T11:00:00.000Z
4
+ updated: 2026-03-17T20:15:21.000Z
5
+ slug: what-i-actually-use-my-notebook-for
6
+ taxonomies:
7
+ c:
8
+ - weekend-notes
9
+ - tiny-projects
10
+ extra:
11
+ format: note
12
+ featured: true
13
+ ---
14
+
15
+ I always imagine I will use a fresh notebook for my best thoughts. In reality, it becomes useful much sooner and in messier ways.
16
+
17
+ ## Mostly three things
18
+
19
+ 1. Shopping lists
20
+ 2. Fragments I do not trust my phone with
21
+ 3. The first ugly version of an idea
22
+
23
+ That turns out to be enough. A notebook does not need to become an archive. It only needs to catch the thought before it slips away.
@@ -0,0 +1,29 @@
1
+ ---
2
+ date: 2026-02-01T11:55:00.000Z
3
+ updated: 2026-03-17T20:16:50.000Z
4
+ slug: z4s9v
5
+ aliases:
6
+ - /the-soup-trick-i-always-forget-25e01
7
+ - /92nih
8
+ - /3gu1a
9
+ taxonomies:
10
+ c:
11
+ - weekend-notes
12
+ - home-cooking
13
+ extra:
14
+ format: note
15
+ ---
16
+
17
+ Made tomato soup because the weather could not decide what month it wanted to be.
18
+
19
+ <!-- jant:reply date="2026-02-01T12:20:00.000Z" slug="the-soup-trick-i-always-forget-25e01" format="link" url="https://www.seriouseats.com/15-minute-creamy-tomato-soup-vegan-recipe" title="The soup trick I always forget" -->
20
+
21
+ Butter first, then onions. It changes the whole pot.
22
+
23
+ <!-- jant:reply date="2026-02-01T18:05:00.000Z" slug="92nih" format="note" -->
24
+
25
+ Leftovers tomorrow, which means future me already won.
26
+
27
+ <!-- jant:reply date="2026-02-01T12:50:00.000Z" slug="3gu1a" format="note" -->
28
+
29
+ Added a grilled cheese with too much mustard and it turned out to be exactly the right amount of mustard.
@@ -0,0 +1,338 @@
1
+ /* Jant Export Theme — Organic Minimalism */
2
+
3
+ :root {
4
+ --site-width: 500px;
5
+ --font-body:
6
+ system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
7
+ "Helvetica Neue", Helvetica, Arial, sans-serif;
8
+ --font-mono: ui-monospace, Menlo, Monaco, Consolas, "Courier New", monospace;
9
+
10
+ --bg: #fafaf9;
11
+ --fg: #1c1917;
12
+ --muted: #78716c;
13
+ --border: #e7e5e4;
14
+ --accent: #292524;
15
+ --accent-fg: #fff;
16
+ --card-bg: #fff;
17
+ --quote-border: #d6d3d1;
18
+ --star-color: #f59e0b;
19
+ --link-color: #292524;
20
+ }
21
+
22
+ @media (prefers-color-scheme: dark) {
23
+ :root {
24
+ --bg: #1c1917;
25
+ --fg: #e7e5e4;
26
+ --muted: #a8a29e;
27
+ --border: #44403c;
28
+ --accent: #e7e5e4;
29
+ --accent-fg: #1c1917;
30
+ --card-bg: #292524;
31
+ --quote-border: #57534e;
32
+ --star-color: #fbbf24;
33
+ --link-color: #e7e5e4;
34
+ }
35
+ }
36
+
37
+ *,
38
+ *::before,
39
+ *::after {
40
+ box-sizing: border-box;
41
+ margin: 0;
42
+ padding: 0;
43
+ }
44
+
45
+ html {
46
+ font-size: 15px;
47
+ line-height: 1.5;
48
+ }
49
+
50
+ body {
51
+ font-family: var(--font-body);
52
+ color: var(--fg);
53
+ background: var(--bg);
54
+ max-width: var(--site-width);
55
+ margin: 0 auto;
56
+ padding: 2rem 1.5rem;
57
+ }
58
+
59
+ a {
60
+ color: var(--link-color);
61
+ text-decoration-thickness: 1px;
62
+ text-underline-offset: 2px;
63
+ }
64
+
65
+ a:hover {
66
+ text-decoration: none;
67
+ }
68
+
69
+ /* Header */
70
+ .site-header {
71
+ display: flex;
72
+ align-items: center;
73
+ justify-content: space-between;
74
+ padding-bottom: 2rem;
75
+ border-bottom: 1px solid var(--border);
76
+ margin-bottom: 2rem;
77
+ }
78
+
79
+ .site-title {
80
+ font-weight: 700;
81
+ font-size: 1.125rem;
82
+ text-decoration: none;
83
+ color: var(--fg);
84
+ }
85
+
86
+ .site-header nav {
87
+ display: flex;
88
+ gap: 1rem;
89
+ }
90
+
91
+ .site-header nav a {
92
+ color: var(--muted);
93
+ text-decoration: none;
94
+ font-size: 0.875rem;
95
+ }
96
+
97
+ .site-header nav a:hover {
98
+ color: var(--fg);
99
+ }
100
+
101
+ /* Post list */
102
+ .post-list {
103
+ display: flex;
104
+ flex-direction: column;
105
+ }
106
+
107
+ .post-card {
108
+ padding: 1.25rem 0;
109
+ border-bottom: 1px solid var(--border);
110
+ }
111
+
112
+ .post-card:last-child {
113
+ border-bottom: none;
114
+ }
115
+
116
+ .post-title {
117
+ font-size: 1.0625rem;
118
+ font-weight: 600;
119
+ margin-bottom: 0.25rem;
120
+ line-height: 1.4;
121
+ }
122
+
123
+ .post-title a {
124
+ text-decoration: none;
125
+ color: var(--fg);
126
+ }
127
+
128
+ .post-title a:hover {
129
+ text-decoration: underline;
130
+ }
131
+
132
+ /* Link format domain indicator */
133
+ .link-domain {
134
+ font-size: 0.8125rem;
135
+ color: var(--muted);
136
+ margin-bottom: 0.25rem;
137
+ }
138
+
139
+ .link-domain a {
140
+ color: var(--muted);
141
+ text-decoration: none;
142
+ }
143
+
144
+ /* Quote format */
145
+ .feed-quote {
146
+ border-left: 2px solid var(--quote-border);
147
+ padding-left: 1rem;
148
+ margin: 0.5rem 0;
149
+ font-style: italic;
150
+ color: var(--fg);
151
+ }
152
+
153
+ /* Body / prose */
154
+ .post-body {
155
+ font-size: 0.9375rem;
156
+ line-height: 1.6;
157
+ color: var(--fg);
158
+ }
159
+
160
+ .post-body p {
161
+ margin: 0.75rem 0;
162
+ }
163
+
164
+ .post-body p:first-child {
165
+ margin-top: 0;
166
+ }
167
+
168
+ .post-body img {
169
+ max-width: 100%;
170
+ height: auto;
171
+ border-radius: 0.5rem;
172
+ }
173
+
174
+ .post-body pre {
175
+ background: var(--card-bg);
176
+ border: 1px solid var(--border);
177
+ border-radius: 0.375rem;
178
+ padding: 0.75rem 1rem;
179
+ overflow-x: auto;
180
+ font-family: var(--font-mono);
181
+ font-size: 0.8125rem;
182
+ line-height: 1.5;
183
+ }
184
+
185
+ .post-body code {
186
+ font-family: var(--font-mono);
187
+ font-size: 0.875em;
188
+ background: var(--card-bg);
189
+ padding: 0.125rem 0.375rem;
190
+ border-radius: 0.25rem;
191
+ }
192
+
193
+ .post-body pre code {
194
+ background: none;
195
+ padding: 0;
196
+ }
197
+
198
+ .post-body blockquote {
199
+ border-left: 2px solid var(--quote-border);
200
+ padding-left: 1rem;
201
+ color: var(--muted);
202
+ margin: 0.75rem 0;
203
+ }
204
+
205
+ .post-body h1,
206
+ .post-body h2,
207
+ .post-body h3,
208
+ .post-body h4,
209
+ .post-body h5,
210
+ .post-body h6 {
211
+ margin: 1.5rem 0 0.5rem;
212
+ line-height: 1.3;
213
+ }
214
+
215
+ .post-body ul,
216
+ .post-body ol {
217
+ padding-left: 1.5rem;
218
+ margin: 0.75rem 0;
219
+ }
220
+
221
+ .post-body table {
222
+ width: 100%;
223
+ border-collapse: collapse;
224
+ margin: 0.75rem 0;
225
+ font-size: 0.875rem;
226
+ }
227
+
228
+ .post-body th,
229
+ .post-body td {
230
+ border: 1px solid var(--border);
231
+ padding: 0.375rem 0.75rem;
232
+ text-align: left;
233
+ }
234
+
235
+ .post-body th {
236
+ font-weight: 600;
237
+ background: var(--card-bg);
238
+ }
239
+
240
+ /* Star rating */
241
+ .star-rating {
242
+ margin: 0.25rem 0;
243
+ font-size: 0.875rem;
244
+ }
245
+
246
+ .star-rating .star {
247
+ color: var(--border);
248
+ }
249
+
250
+ .star-rating .star.filled {
251
+ color: var(--star-color);
252
+ }
253
+
254
+ /* Post footer */
255
+ .post-footer {
256
+ display: flex;
257
+ align-items: center;
258
+ gap: 0.75rem;
259
+ margin-top: 0.5rem;
260
+ font-size: 0.8125rem;
261
+ color: var(--muted);
262
+ }
263
+
264
+ .post-date {
265
+ color: var(--muted);
266
+ text-decoration: none;
267
+ }
268
+
269
+ .post-date:hover {
270
+ color: var(--fg);
271
+ }
272
+
273
+ .collection-tag {
274
+ color: var(--muted);
275
+ text-decoration: none;
276
+ font-size: 0.75rem;
277
+ border: 1px solid var(--border);
278
+ padding: 0.0625rem 0.375rem;
279
+ border-radius: 999px;
280
+ }
281
+
282
+ .collection-tag:hover {
283
+ color: var(--fg);
284
+ border-color: var(--fg);
285
+ }
286
+
287
+ /* Detail page */
288
+ .post-detail {
289
+ padding: 1rem 0;
290
+ }
291
+
292
+ .post-detail .post-title {
293
+ font-size: 1.25rem;
294
+ margin-bottom: 0.5rem;
295
+ }
296
+
297
+ .post-detail .post-body {
298
+ margin: 1rem 0;
299
+ }
300
+
301
+ /* Section / Collection */
302
+ .section-description {
303
+ color: var(--muted);
304
+ margin-bottom: 1.5rem;
305
+ }
306
+
307
+ .collection-list {
308
+ list-style: none;
309
+ padding: 0;
310
+ }
311
+
312
+ .collection-list li {
313
+ padding: 0.5rem 0;
314
+ border-bottom: 1px solid var(--border);
315
+ }
316
+
317
+ .collection-list .count {
318
+ color: var(--muted);
319
+ font-size: 0.8125rem;
320
+ }
321
+
322
+ /* Pagination */
323
+ .pagination {
324
+ display: flex;
325
+ justify-content: space-between;
326
+ padding: 2rem 0 1rem;
327
+ font-size: 0.875rem;
328
+ }
329
+
330
+ /* Footer */
331
+ .site-footer {
332
+ margin-top: 3rem;
333
+ padding-top: 1rem;
334
+ border-top: 1px solid var(--border);
335
+ text-align: center;
336
+ font-size: 0.8125rem;
337
+ color: var(--muted);
338
+ }