doc-fetch-cli 2.0.4 → 2.0.6
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.
- package/README.md +2 -0
- package/bin/doc-fetch_darwin_amd64 +0 -0
- package/bin/doc-fetch_windows_amd64.exe +0 -0
- package/doc-fetch +0 -0
- package/doc-fetch_darwin_amd64 +0 -0
- package/doc-fetch_darwin_arm64 +0 -0
- package/doc-fetch_linux_amd64 +0 -0
- package/doc-fetch_windows_amd64.exe +0 -0
- package/package.json +1 -1
- package/website/BLOG-SETUP-SUMMARY.md +385 -0
- package/website/DEPLOYMENT.md +189 -0
- package/website/LAUNCH-CHECKLIST.md +134 -0
- package/website/README.md +75 -0
- package/website/SEO-STRATEGY.md +347 -0
- package/website/URL-STRUCTURE.md +334 -0
- package/website/WEBSITE-SUMMARY.md +246 -0
- package/website/package-lock.json +1628 -0
- package/website/package.json +39 -0
- package/website/pnpm-lock.yaml +1061 -0
- package/website/src/app.d.ts +13 -0
- package/website/src/app.html +11 -0
- package/website/src/lib/actions/addCopyButtons.ts +73 -0
- package/website/src/lib/assets/favicon.svg +1 -0
- package/website/src/lib/components/CopyCodeButton.svelte +97 -0
- package/website/src/lib/components/DarkModeToggle.svelte +140 -0
- package/website/src/lib/components/ReadingProgress.svelte +36 -0
- package/website/src/lib/components/RelatedPosts.svelte +151 -0
- package/website/src/lib/components/TableOfContents.svelte +184 -0
- package/website/src/lib/index.ts +1 -0
- package/website/src/lib/posts/convert-docs-to-markdown.md +506 -0
- package/website/src/routes/+layout.svelte +59 -0
- package/website/src/routes/+page.svelte +1033 -0
- package/website/src/routes/about/+page.svelte +607 -0
- package/website/src/routes/blog/+page.svelte +486 -0
- package/website/src/routes/blog/[slug]/+page.svelte +988 -0
- package/website/src/routes/blog/[slug]/+page.ts +53 -0
- package/website/src/routes/sitemap.xml/+server.ts +62 -0
- package/website/static/favicon.svg +10 -0
- package/website/static/og.png +2 -0
- package/website/static/og.svg +26 -0
- package/website/static/robots.txt +43 -0
- package/website/svelte.config.js +13 -0
- package/website/tsconfig.json +20 -0
- package/website/vite.config.ts +6 -0
|
@@ -0,0 +1,486 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { onMount } from 'svelte';
|
|
3
|
+
import type { Action } from 'svelte/action';
|
|
4
|
+
|
|
5
|
+
let scrolled = false;
|
|
6
|
+
|
|
7
|
+
// Action to prevent form submission (for demo)
|
|
8
|
+
const preventSubmit: Action<HTMLFormElement> = (node) => {
|
|
9
|
+
const handleSubmit = (event: Event) => {
|
|
10
|
+
event.preventDefault();
|
|
11
|
+
// In production, send to email service here
|
|
12
|
+
alert('Thanks for subscribing! (Demo - no backend connected)');
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
node.addEventListener('submit', handleSubmit);
|
|
16
|
+
|
|
17
|
+
return {
|
|
18
|
+
destroy() {
|
|
19
|
+
node.removeEventListener('submit', handleSubmit);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const posts = [
|
|
25
|
+
{
|
|
26
|
+
slug: 'convert-docs-to-markdown-for-llm',
|
|
27
|
+
title: 'How to Convert Documentation to Markdown for LLMs (Complete Guide)',
|
|
28
|
+
excerpt: 'Step-by-step guide: Transform entire documentation websites into clean, AI-ready markdown. Includes tools, techniques, and best practices for optimal LLM context.',
|
|
29
|
+
date: 'February 21, 2026',
|
|
30
|
+
readTime: '8 min read',
|
|
31
|
+
tags: ['Tutorial', 'LLM', 'Markdown']
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
slug: 'llm-txt-index-guide',
|
|
35
|
+
title: 'LLM.txt Explained: The Secret to Better AI Context Navigation',
|
|
36
|
+
excerpt: 'What is llm.txt? How does it supercharge your AI agents? Complete guide to implementing semantic documentation indexing for better RAG performance.',
|
|
37
|
+
date: 'February 20, 2026',
|
|
38
|
+
readTime: '6 min read',
|
|
39
|
+
tags: ['AI', 'RAG', 'Best Practices']
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
slug: 'ai-agent-documentation-problem',
|
|
43
|
+
title: 'Why AI Agents Can\'t Read Documentation (And How to Fix It)',
|
|
44
|
+
excerpt: 'The fundamental problem with AI agents and web navigation. Why single-page context matters. Real-world solutions for production deployments.',
|
|
45
|
+
date: 'February 19, 2026',
|
|
46
|
+
readTime: '7 min read',
|
|
47
|
+
tags: ['AI Agents', 'Problem/Solution']
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
slug: 'best-practices-rag-context-preparation',
|
|
51
|
+
title: 'RAG Context Preparation: 7 Best Practices from Production',
|
|
52
|
+
excerpt: 'Learn from real deployments: chunking strategies, metadata enrichment, cleaning techniques, and indexing approaches that actually work.',
|
|
53
|
+
date: 'February 18, 2026',
|
|
54
|
+
readTime: '10 min read',
|
|
55
|
+
tags: ['RAG', 'Production', 'Best Practices']
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
slug: 'compare-documentation-fetchers',
|
|
59
|
+
title: 'Documentation Fetchers Compared: DocFetch vs Alternatives',
|
|
60
|
+
excerpt: 'Honest comparison of tools for converting docs to markdown. Features, limitations, pricing, and when to use each tool.',
|
|
61
|
+
date: 'February 17, 2026',
|
|
62
|
+
readTime: '9 min read',
|
|
63
|
+
tags: ['Comparison', 'Tools']
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
slug: 'token-efficiency-llm-context',
|
|
67
|
+
title: 'Token Efficiency: How to Fit More Context in Less Tokens',
|
|
68
|
+
excerpt: 'Reduce LLM costs by 60%+ with smart context preparation. Cleaning strategies, compression techniques, and token optimization tips.',
|
|
69
|
+
date: 'February 16, 2026',
|
|
70
|
+
readTime: '8 min read',
|
|
71
|
+
tags: ['Cost Optimization', 'LLM']
|
|
72
|
+
}
|
|
73
|
+
];
|
|
74
|
+
|
|
75
|
+
onMount(() => {
|
|
76
|
+
const handleScroll = () => {
|
|
77
|
+
scrolled = window.scrollY > 50;
|
|
78
|
+
};
|
|
79
|
+
window.addEventListener('scroll', handleScroll);
|
|
80
|
+
return () => window.removeEventListener('scroll', handleScroll);
|
|
81
|
+
});
|
|
82
|
+
</script>
|
|
83
|
+
|
|
84
|
+
<svelte:head>
|
|
85
|
+
<title>DocFetch Blog - AI Documentation & LLM Context Guides</title>
|
|
86
|
+
<meta name="description" content="Practical guides on converting documentation to markdown, optimizing LLM context, RAG best practices, and AI agent development." />
|
|
87
|
+
<meta name="keywords" content="LLM context, RAG, documentation conversion, AI agents, markdown, token efficiency, AI tutorials" />
|
|
88
|
+
|
|
89
|
+
<!-- Open Graph -->
|
|
90
|
+
<meta property="og:type" content="website" />
|
|
91
|
+
<meta property="og:title" content="DocFetch Blog - AI Documentation Guides" />
|
|
92
|
+
<meta property="og:description" content="Practical guides on LLM context preparation, RAG, and AI agent development" />
|
|
93
|
+
|
|
94
|
+
<!-- Twitter Card -->
|
|
95
|
+
<meta name="twitter:card" content="summary_large_image" />
|
|
96
|
+
<meta name="twitter:title" content="DocFetch Blog" />
|
|
97
|
+
<meta name="twitter:description" content="Guides on AI documentation and LLM context optimization" />
|
|
98
|
+
</svelte:head>
|
|
99
|
+
|
|
100
|
+
<div class="container">
|
|
101
|
+
<header class={scrolled ? 'scrolled' : ''}>
|
|
102
|
+
<nav>
|
|
103
|
+
<div class="logo">
|
|
104
|
+
<a href="/">
|
|
105
|
+
<span class="logo-icon">📚</span>
|
|
106
|
+
<span class="logo-text">DocFetch</span>
|
|
107
|
+
</a>
|
|
108
|
+
</div>
|
|
109
|
+
<div class="nav-links">
|
|
110
|
+
<a href="/#features">Features</a>
|
|
111
|
+
<a href="/#installation">Installation</a>
|
|
112
|
+
<a href="/blog" class="active">Blog</a>
|
|
113
|
+
<a href="https://github.com/AlphaTechini/doc-fetch" target="_blank" rel="noopener noreferrer">GitHub →</a>
|
|
114
|
+
</div>
|
|
115
|
+
</nav>
|
|
116
|
+
</header>
|
|
117
|
+
|
|
118
|
+
<main>
|
|
119
|
+
<section class="hero">
|
|
120
|
+
<h1>DocFetch Blog</h1>
|
|
121
|
+
<p class="subtitle">
|
|
122
|
+
Practical guides on documentation conversion, LLM context optimization,
|
|
123
|
+
RAG best practices, and AI agent development.
|
|
124
|
+
</p>
|
|
125
|
+
</section>
|
|
126
|
+
|
|
127
|
+
<section class="posts">
|
|
128
|
+
<div class="post-grid">
|
|
129
|
+
{#each posts as post}
|
|
130
|
+
<article class="post-card">
|
|
131
|
+
<div class="post-meta">
|
|
132
|
+
<time datetime={post.date}>{post.date}</time>
|
|
133
|
+
<span class="read-time">{post.readTime}</span>
|
|
134
|
+
</div>
|
|
135
|
+
<h2>
|
|
136
|
+
<a href={`/blog/${post.slug}`}>{post.title}</a>
|
|
137
|
+
</h2>
|
|
138
|
+
<p class="excerpt">{post.excerpt}</p>
|
|
139
|
+
<div class="tags">
|
|
140
|
+
{#each post.tags as tag}
|
|
141
|
+
<span class="tag">{tag}</span>
|
|
142
|
+
{/each}
|
|
143
|
+
</div>
|
|
144
|
+
<a href={`/blog/${post.slug}`} class="read-more">Read more →</a>
|
|
145
|
+
</article>
|
|
146
|
+
{/each}
|
|
147
|
+
</div>
|
|
148
|
+
</section>
|
|
149
|
+
|
|
150
|
+
<section class="newsletter">
|
|
151
|
+
<h2>Stay Updated</h2>
|
|
152
|
+
<p>Get notified when we publish new guides. No spam, unsubscribe anytime.</p>
|
|
153
|
+
<form class="newsletter-form" use:preventSubmit>
|
|
154
|
+
<input type="email" placeholder="your@email.com" required />
|
|
155
|
+
<button type="submit">Subscribe</button>
|
|
156
|
+
</form>
|
|
157
|
+
<p class="note">We respect your inbox. Max 1-2 emails per month.</p>
|
|
158
|
+
</section>
|
|
159
|
+
</main>
|
|
160
|
+
|
|
161
|
+
<footer>
|
|
162
|
+
<div class="footer-content">
|
|
163
|
+
<div class="footer-left">
|
|
164
|
+
<p>Built with ❤️ for AI developers who deserve better documentation access</p>
|
|
165
|
+
<p class="copyright">© 2026 AlphaTechini. MIT License.</p>
|
|
166
|
+
</div>
|
|
167
|
+
<div class="footer-right">
|
|
168
|
+
<a href="https://github.com/AlphaTechini/doc-fetch" target="_blank" rel="noopener noreferrer">GitHub</a>
|
|
169
|
+
<a href="/blog">Blog</a>
|
|
170
|
+
<a href="https://www.npmjs.com/package/doc-fetch" target="_blank" rel="noopener noreferrer">NPM</a>
|
|
171
|
+
</div>
|
|
172
|
+
</div>
|
|
173
|
+
</footer>
|
|
174
|
+
</div>
|
|
175
|
+
|
|
176
|
+
<style>
|
|
177
|
+
:global(:root) {
|
|
178
|
+
--bg-primary: #ffffff;
|
|
179
|
+
--bg-secondary: #f8f9fa;
|
|
180
|
+
--text-primary: #1a1a1a;
|
|
181
|
+
--text-secondary: #4a4a4a;
|
|
182
|
+
--text-muted: #6b7280;
|
|
183
|
+
--accent: #0066cc;
|
|
184
|
+
--accent-hover: #0052a3;
|
|
185
|
+
--border: #e5e7eb;
|
|
186
|
+
--max-width: 1200px;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
:global(body) {
|
|
190
|
+
margin: 0;
|
|
191
|
+
padding: 0;
|
|
192
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
|
|
193
|
+
background: var(--bg-primary);
|
|
194
|
+
color: var(--text-primary);
|
|
195
|
+
line-height: 1.6;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
.container {
|
|
199
|
+
max-width: var(--max-width);
|
|
200
|
+
margin: 0 auto;
|
|
201
|
+
padding: 0 2rem;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
header {
|
|
205
|
+
position: fixed;
|
|
206
|
+
top: 0;
|
|
207
|
+
left: 0;
|
|
208
|
+
right: 0;
|
|
209
|
+
background: rgba(255, 255, 255, 0.95);
|
|
210
|
+
backdrop-filter: blur(10px);
|
|
211
|
+
border-bottom: 1px solid transparent;
|
|
212
|
+
z-index: 1000;
|
|
213
|
+
transition: all 0.3s ease;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
header.scrolled {
|
|
217
|
+
border-bottom-color: var(--border);
|
|
218
|
+
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
nav {
|
|
222
|
+
display: flex;
|
|
223
|
+
justify-content: space-between;
|
|
224
|
+
align-items: center;
|
|
225
|
+
padding: 1rem 2rem;
|
|
226
|
+
max-width: var(--max-width);
|
|
227
|
+
margin: 0 auto;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
.logo a {
|
|
231
|
+
display: flex;
|
|
232
|
+
align-items: center;
|
|
233
|
+
gap: 0.5rem;
|
|
234
|
+
font-weight: 700;
|
|
235
|
+
font-size: 1.25rem;
|
|
236
|
+
text-decoration: none;
|
|
237
|
+
color: var(--text-primary);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
.logo-icon {
|
|
241
|
+
font-size: 1.5rem;
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
.nav-links {
|
|
245
|
+
display: flex;
|
|
246
|
+
gap: 2rem;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.nav-links a {
|
|
250
|
+
color: var(--text-secondary);
|
|
251
|
+
text-decoration: none;
|
|
252
|
+
font-size: 0.95rem;
|
|
253
|
+
transition: color 0.2s;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
.nav-links a:hover,
|
|
257
|
+
.nav-links a.active {
|
|
258
|
+
color: var(--accent);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
.hero {
|
|
262
|
+
padding: 8rem 0 3rem;
|
|
263
|
+
text-align: center;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
h1 {
|
|
267
|
+
font-size: 3.5rem;
|
|
268
|
+
font-weight: 800;
|
|
269
|
+
margin: 0 0 1rem;
|
|
270
|
+
letter-spacing: -0.02em;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
.subtitle {
|
|
274
|
+
font-size: 1.25rem;
|
|
275
|
+
color: var(--text-secondary);
|
|
276
|
+
max-width: 700px;
|
|
277
|
+
margin: 0 auto;
|
|
278
|
+
line-height: 1.7;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
.posts {
|
|
282
|
+
padding: 3rem 0 5rem;
|
|
283
|
+
border-top: 1px solid var(--border);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
.post-grid {
|
|
287
|
+
display: grid;
|
|
288
|
+
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
|
|
289
|
+
gap: 2.5rem;
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
.post-card {
|
|
293
|
+
display: flex;
|
|
294
|
+
flex-direction: column;
|
|
295
|
+
padding: 2rem;
|
|
296
|
+
background: var(--bg-secondary);
|
|
297
|
+
border-radius: 8px;
|
|
298
|
+
transition: transform 0.2s, box-shadow 0.2s;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
.post-card:hover {
|
|
302
|
+
transform: translateY(-4px);
|
|
303
|
+
box-shadow: 0 8px 16px rgba(0, 0, 0, 0.08);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
.post-meta {
|
|
307
|
+
display: flex;
|
|
308
|
+
gap: 1rem;
|
|
309
|
+
font-size: 0.875rem;
|
|
310
|
+
color: var(--text-muted);
|
|
311
|
+
margin-bottom: 1rem;
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
.post-card h2 {
|
|
315
|
+
font-size: 1.5rem;
|
|
316
|
+
margin: 0 0 1rem;
|
|
317
|
+
line-height: 1.3;
|
|
318
|
+
}
|
|
319
|
+
|
|
320
|
+
.post-card h2 a {
|
|
321
|
+
color: var(--text-primary);
|
|
322
|
+
text-decoration: none;
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
.post-card h2 a:hover {
|
|
326
|
+
color: var(--accent);
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
.excerpt {
|
|
330
|
+
color: var(--text-secondary);
|
|
331
|
+
line-height: 1.7;
|
|
332
|
+
margin: 0 0 1.5rem;
|
|
333
|
+
flex-grow: 1;
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
.tags {
|
|
337
|
+
display: flex;
|
|
338
|
+
gap: 0.5rem;
|
|
339
|
+
flex-wrap: wrap;
|
|
340
|
+
margin-bottom: 1.5rem;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
.tag {
|
|
344
|
+
background: rgba(0, 102, 204, 0.1);
|
|
345
|
+
color: var(--accent);
|
|
346
|
+
padding: 0.25rem 0.75rem;
|
|
347
|
+
border-radius: 12px;
|
|
348
|
+
font-size: 0.8rem;
|
|
349
|
+
font-weight: 500;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
.read-more {
|
|
353
|
+
color: var(--accent);
|
|
354
|
+
text-decoration: none;
|
|
355
|
+
font-weight: 600;
|
|
356
|
+
transition: color 0.2s;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
.read-more:hover {
|
|
360
|
+
color: var(--accent-hover);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
.newsletter {
|
|
364
|
+
background: var(--bg-secondary);
|
|
365
|
+
border-radius: 8px;
|
|
366
|
+
padding: 4rem 3rem;
|
|
367
|
+
text-align: center;
|
|
368
|
+
margin: 3rem 0;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
.newsletter h2 {
|
|
372
|
+
font-size: 2rem;
|
|
373
|
+
margin: 0 0 1rem;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
.newsletter p {
|
|
377
|
+
color: var(--text-secondary);
|
|
378
|
+
margin: 0 0 2rem;
|
|
379
|
+
font-size: 1.1rem;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
.newsletter-form {
|
|
383
|
+
display: flex;
|
|
384
|
+
gap: 1rem;
|
|
385
|
+
max-width: 500px;
|
|
386
|
+
margin: 0 auto 1rem;
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
.newsletter-form input {
|
|
390
|
+
flex: 1;
|
|
391
|
+
padding: 0.875rem 1rem;
|
|
392
|
+
border: 1px solid var(--border);
|
|
393
|
+
border-radius: 6px;
|
|
394
|
+
font-size: 1rem;
|
|
395
|
+
font-family: inherit;
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
.newsletter-form input:focus {
|
|
399
|
+
outline: none;
|
|
400
|
+
border-color: var(--accent);
|
|
401
|
+
box-shadow: 0 0 0 3px rgba(0, 102, 204, 0.1);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
.newsletter-form button {
|
|
405
|
+
background: var(--accent);
|
|
406
|
+
color: white;
|
|
407
|
+
border: none;
|
|
408
|
+
padding: 0.875rem 2rem;
|
|
409
|
+
border-radius: 6px;
|
|
410
|
+
font-weight: 600;
|
|
411
|
+
font-size: 1rem;
|
|
412
|
+
cursor: pointer;
|
|
413
|
+
transition: background 0.2s;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
.newsletter-form button:hover {
|
|
417
|
+
background: var(--accent-hover);
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
.note {
|
|
421
|
+
font-size: 0.875rem;
|
|
422
|
+
color: var(--text-muted);
|
|
423
|
+
margin: 0;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
footer {
|
|
427
|
+
border-top: 1px solid var(--border);
|
|
428
|
+
padding: 3rem 0;
|
|
429
|
+
margin-top: 4rem;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
.footer-content {
|
|
433
|
+
display: flex;
|
|
434
|
+
justify-content: space-between;
|
|
435
|
+
align-items: center;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
.footer-left p {
|
|
439
|
+
margin: 0;
|
|
440
|
+
color: var(--text-secondary);
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
.copyright {
|
|
444
|
+
font-size: 0.875rem;
|
|
445
|
+
margin-top: 0.5rem !important;
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
.footer-right {
|
|
449
|
+
display: flex;
|
|
450
|
+
gap: 2rem;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
.footer-right a {
|
|
454
|
+
color: var(--text-secondary);
|
|
455
|
+
text-decoration: none;
|
|
456
|
+
transition: color 0.2s;
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
.footer-right a:hover {
|
|
460
|
+
color: var(--accent);
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
@media (max-width: 768px) {
|
|
464
|
+
h1 {
|
|
465
|
+
font-size: 2.5rem;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
.post-grid {
|
|
469
|
+
grid-template-columns: 1fr;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
.newsletter-form {
|
|
473
|
+
flex-direction: column;
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
.footer-content {
|
|
477
|
+
flex-direction: column;
|
|
478
|
+
gap: 2rem;
|
|
479
|
+
text-align: center;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
.container {
|
|
483
|
+
padding: 0 1rem;
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
</style>
|