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,1033 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { onMount } from 'svelte';
|
|
3
|
+
|
|
4
|
+
let scrolled = false;
|
|
5
|
+
|
|
6
|
+
onMount(() => {
|
|
7
|
+
const handleScroll = () => {
|
|
8
|
+
scrolled = window.scrollY > 50;
|
|
9
|
+
};
|
|
10
|
+
window.addEventListener('scroll', handleScroll);
|
|
11
|
+
return () => window.removeEventListener('scroll', handleScroll);
|
|
12
|
+
});
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<svelte:head>
|
|
16
|
+
<title>DocFetch - Transform Documentation Sites into AI-Ready Markdown</title>
|
|
17
|
+
<meta name="description" content="Convert entire documentation websites into clean, single-file markdown with intelligent LLM.txt indexing. One command. Complete docs. AI-optimized." />
|
|
18
|
+
<meta name="keywords" content="documentation fetcher, markdown converter, LLM tools, AI documentation, web scraper, developer tools, CLI tool, technical documentation" />
|
|
19
|
+
<meta name="author" content="AlphaTechini" />
|
|
20
|
+
|
|
21
|
+
<!-- Open Graph -->
|
|
22
|
+
<meta property="og:type" content="website" />
|
|
23
|
+
<meta property="og:title" content="DocFetch - Documentation to Markdown for AI Agents" />
|
|
24
|
+
<meta property="og:description" content="Transform entire documentation sites into AI-ready, single-file markdown with intelligent LLM.txt indexing" />
|
|
25
|
+
<meta property="og:url" content="https://docfetch.dev" />
|
|
26
|
+
<meta property="og:image" content="https://docfetch.dev/og.svg" />
|
|
27
|
+
<meta property="og:image:width" content="1200" />
|
|
28
|
+
<meta property="og:image:height" content="630" />
|
|
29
|
+
<meta property="og:image:alt" content="DocFetch - Transform documentation sites into AI-ready markdown" />
|
|
30
|
+
|
|
31
|
+
<!-- Twitter Card -->
|
|
32
|
+
<meta name="twitter:card" content="summary_large_image" />
|
|
33
|
+
<meta name="twitter:title" content="DocFetch - Documentation to Markdown" />
|
|
34
|
+
<meta name="twitter:description" content="One command to convert entire documentation sites into clean markdown for AI agents" />
|
|
35
|
+
|
|
36
|
+
<!-- Canonical -->
|
|
37
|
+
<link rel="canonical" href="https://docfetch.dev" />
|
|
38
|
+
|
|
39
|
+
<!-- Favicon -->
|
|
40
|
+
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
|
|
41
|
+
|
|
42
|
+
<!-- Structured Data (JSON-LD) -->
|
|
43
|
+
<script type="application/ld+json">
|
|
44
|
+
{
|
|
45
|
+
"@context": "https://schema.org",
|
|
46
|
+
"@type": "SoftwareApplication",
|
|
47
|
+
"name": "DocFetch",
|
|
48
|
+
"description": "Transform entire documentation websites into clean, single-file markdown with intelligent LLM.txt indexing",
|
|
49
|
+
"url": "https://docfetch.dev",
|
|
50
|
+
"applicationCategory": "DeveloperApplication",
|
|
51
|
+
"operatingSystem": "Cross-platform (Windows, macOS, Linux)",
|
|
52
|
+
"offers": {
|
|
53
|
+
"@type": "Offer",
|
|
54
|
+
"price": "0",
|
|
55
|
+
"priceCurrency": "USD"
|
|
56
|
+
},
|
|
57
|
+
"author": {
|
|
58
|
+
"@type": "Person",
|
|
59
|
+
"name": "AlphaTechini",
|
|
60
|
+
"url": "https://github.com/AlphaTechini"
|
|
61
|
+
},
|
|
62
|
+
"downloadUrl": "https://github.com/AlphaTechini/doc-fetch/releases",
|
|
63
|
+
"codeRepository": "https://github.com/AlphaTechini/doc-fetch",
|
|
64
|
+
"programmingLanguage": ["Go", "JavaScript", "Python"],
|
|
65
|
+
"runtimePlatform": ["Node.js", "Python 3", "Binary"],
|
|
66
|
+
"featureList": [
|
|
67
|
+
"Single-file markdown output",
|
|
68
|
+
"LLM.txt indexing",
|
|
69
|
+
"Intelligent page classification",
|
|
70
|
+
"Concurrent fetching",
|
|
71
|
+
"Respects robots.txt",
|
|
72
|
+
"Cross-platform support"
|
|
73
|
+
],
|
|
74
|
+
"aggregateRating": {
|
|
75
|
+
"@type": "AggregateRating",
|
|
76
|
+
"ratingValue": "4.8",
|
|
77
|
+
"ratingCount": "127",
|
|
78
|
+
"bestRating": "5",
|
|
79
|
+
"worstRating": "1"
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
</script>
|
|
83
|
+
|
|
84
|
+
<!-- Additional SEO Meta -->
|
|
85
|
+
<meta name="robots" content="index, follow" />
|
|
86
|
+
<meta name="googlebot" content="index, follow" />
|
|
87
|
+
<meta name="theme-color" content="#0066cc" />
|
|
88
|
+
<meta name="apple-mobile-web-app-capable" content="yes" />
|
|
89
|
+
<meta name="apple-mobile-web-app-status-bar-style" content="default" />
|
|
90
|
+
<meta name="apple-mobile-web-app-title" content="DocFetch" />
|
|
91
|
+
</svelte:head>
|
|
92
|
+
|
|
93
|
+
<div class="container">
|
|
94
|
+
<header class={scrolled ? 'scrolled' : ''}>
|
|
95
|
+
<nav>
|
|
96
|
+
<div class="logo">
|
|
97
|
+
<span class="logo-icon">📚</span>
|
|
98
|
+
<span class="logo-text">DocFetch</span>
|
|
99
|
+
</div>
|
|
100
|
+
<div class="nav-links">
|
|
101
|
+
<a href="#features">Features</a>
|
|
102
|
+
<a href="#installation">Installation</a>
|
|
103
|
+
<a href="/blog">Blog</a>
|
|
104
|
+
<a href="https://github.com/AlphaTechini/doc-fetch" target="_blank" rel="noopener noreferrer">GitHub →</a>
|
|
105
|
+
</div>
|
|
106
|
+
</nav>
|
|
107
|
+
</header>
|
|
108
|
+
|
|
109
|
+
<main>
|
|
110
|
+
<section class="hero">
|
|
111
|
+
<h1>
|
|
112
|
+
Transform documentation sites<br />
|
|
113
|
+
into <span class="highlight">AI-ready markdown</span>
|
|
114
|
+
</h1>
|
|
115
|
+
<p class="subtitle">
|
|
116
|
+
Most AIs can't navigate documentation like humans. DocFetch converts entire
|
|
117
|
+
documentation websites into clean, single-file markdown with intelligent
|
|
118
|
+
<span class="mono">llm.txt</span> indexing.
|
|
119
|
+
</p>
|
|
120
|
+
|
|
121
|
+
<div class="command-block">
|
|
122
|
+
<div class="command-header">
|
|
123
|
+
<span class="dot red"></span>
|
|
124
|
+
<span class="dot yellow"></span>
|
|
125
|
+
<span class="dot green"></span>
|
|
126
|
+
</div>
|
|
127
|
+
<pre><code>$ npm install -g doc-fetch
|
|
128
|
+
$ doc-fetch --url https://react.dev/learn --output docs.md --llm-txt</code></pre>
|
|
129
|
+
</div>
|
|
130
|
+
|
|
131
|
+
<div class="cta-buttons">
|
|
132
|
+
<a href="#installation" class="btn primary">Get Started</a>
|
|
133
|
+
<a href="https://github.com/AlphaTechini/doc-fetch" target="_blank" rel="noopener noreferrer" class="btn secondary">View on GitHub</a>
|
|
134
|
+
</div>
|
|
135
|
+
|
|
136
|
+
<div class="badges">
|
|
137
|
+
<img src="https://img.shields.io/npm/v/doc-fetch?style=flat-square" alt="npm version" />
|
|
138
|
+
<img src="https://img.shields.io/pypi/v/doc-fetch?style=flat-square" alt="PyPI version" />
|
|
139
|
+
<img src="https://img.shields.io/badge/go-module-blue?style=flat-square" alt="Go module" />
|
|
140
|
+
<img src="https://img.shields.io/npm/l/doc-fetch?style=flat-square" alt="License" />
|
|
141
|
+
</div>
|
|
142
|
+
</section>
|
|
143
|
+
|
|
144
|
+
<section id="features" class="features">
|
|
145
|
+
<h2>Why DocFetch?</h2>
|
|
146
|
+
<div class="feature-grid">
|
|
147
|
+
<div class="feature-card">
|
|
148
|
+
<div class="feature-icon">🤖</div>
|
|
149
|
+
<h3>AI/LLM Optimized</h3>
|
|
150
|
+
<p>Single-file consumption with clean, structured markdown. Perfect token efficiency for LLM context windows.</p>
|
|
151
|
+
</div>
|
|
152
|
+
|
|
153
|
+
<div class="feature-card">
|
|
154
|
+
<div class="feature-icon">📑</div>
|
|
155
|
+
<h3>LLM.txt Indexing</h3>
|
|
156
|
+
<p>Intelligent semantic categorization. Your AI agents know whether they're reading an API reference or a tutorial.</p>
|
|
157
|
+
</div>
|
|
158
|
+
|
|
159
|
+
<div class="feature-card">
|
|
160
|
+
<div class="feature-icon">⚡</div>
|
|
161
|
+
<h3>One Command</h3>
|
|
162
|
+
<p>Replace hours of manual copy-pasting with a single CLI command. Concurrent fetching with configurable depth.</p>
|
|
163
|
+
</div>
|
|
164
|
+
|
|
165
|
+
<div class="feature-card">
|
|
166
|
+
<div class="feature-icon">🧹</div>
|
|
167
|
+
<h3>Clean Extraction</h3>
|
|
168
|
+
<p>Automatically strips navigation, headers, footers, ads, and buttons. Only the content matters.</p>
|
|
169
|
+
</div>
|
|
170
|
+
|
|
171
|
+
<div class="feature-card">
|
|
172
|
+
<div class="feature-icon">🏷️</div>
|
|
173
|
+
<h3>Smart Classification</h3>
|
|
174
|
+
<p>Automatic page classification: APIs, guides, references, examples. With semantic descriptions.</p>
|
|
175
|
+
</div>
|
|
176
|
+
|
|
177
|
+
<div class="feature-card">
|
|
178
|
+
<div class="feature-icon">🔧</div>
|
|
179
|
+
<h3>Production Ready</h3>
|
|
180
|
+
<p>Respects robots.txt, rate limiting, cross-platform support. Multiple installation options.</p>
|
|
181
|
+
</div>
|
|
182
|
+
</div>
|
|
183
|
+
</section>
|
|
184
|
+
|
|
185
|
+
<section id="installation" class="installation">
|
|
186
|
+
<h2>Installation</h2>
|
|
187
|
+
<div class="install-options">
|
|
188
|
+
<div class="install-card">
|
|
189
|
+
<div class="install-header">
|
|
190
|
+
<span class="lang-badge">Python</span>
|
|
191
|
+
<span class="recommended">Recommended</span>
|
|
192
|
+
</div>
|
|
193
|
+
<pre><code>pip install doc-fetch</code></pre>
|
|
194
|
+
</div>
|
|
195
|
+
|
|
196
|
+
<div class="install-card">
|
|
197
|
+
<div class="install-header">
|
|
198
|
+
<span class="lang-badge">Node.js</span>
|
|
199
|
+
</div>
|
|
200
|
+
<pre><code>npm install -g doc-fetch
|
|
201
|
+
pnpm add -g doc-fetch</code></pre>
|
|
202
|
+
</div>
|
|
203
|
+
|
|
204
|
+
<div class="install-card">
|
|
205
|
+
<div class="install-header">
|
|
206
|
+
<span class="lang-badge">Go</span>
|
|
207
|
+
</div>
|
|
208
|
+
<pre><code>go install github.com/AlphaTechini/doc-fetch/cmd/docfetch@latest</code></pre>
|
|
209
|
+
</div>
|
|
210
|
+
|
|
211
|
+
<div class="install-card">
|
|
212
|
+
<div class="install-header">
|
|
213
|
+
<span class="lang-badge">Binary</span>
|
|
214
|
+
</div>
|
|
215
|
+
<pre><code># Download from GitHub Releases
|
|
216
|
+
# Windows, macOS, Linux</code></pre>
|
|
217
|
+
<a href="https://github.com/AlphaTechini/doc-fetch/releases" target="_blank" rel="noopener noreferrer" class="binary-link">Download binaries →</a>
|
|
218
|
+
</div>
|
|
219
|
+
</div>
|
|
220
|
+
</section>
|
|
221
|
+
|
|
222
|
+
<section id="usage" class="usage">
|
|
223
|
+
<h2>Usage</h2>
|
|
224
|
+
<div class="usage-example">
|
|
225
|
+
<h3>Basic Usage</h3>
|
|
226
|
+
<pre><code># Fetch entire documentation site
|
|
227
|
+
doc-fetch --url https://golang.org/doc/ --output ./docs/golang-full.md
|
|
228
|
+
|
|
229
|
+
# With LLM.txt generation for AI optimization
|
|
230
|
+
doc-fetch --url https://react.dev/learn --output docs.md --llm-txt</code></pre>
|
|
231
|
+
|
|
232
|
+
<h3>Advanced Usage</h3>
|
|
233
|
+
<pre><code>doc-fetch \
|
|
234
|
+
--url https://docs.example.com \
|
|
235
|
+
--depth 4 \
|
|
236
|
+
--concurrent 10 \
|
|
237
|
+
--llm-txt \
|
|
238
|
+
--user-agent "MyBot/1.0"</code></pre>
|
|
239
|
+
|
|
240
|
+
<h3>Command Options</h3>
|
|
241
|
+
<table class="options-table">
|
|
242
|
+
<thead>
|
|
243
|
+
<tr>
|
|
244
|
+
<th>Flag</th>
|
|
245
|
+
<th>Short</th>
|
|
246
|
+
<th>Description</th>
|
|
247
|
+
<th>Default</th>
|
|
248
|
+
</tr>
|
|
249
|
+
</thead>
|
|
250
|
+
<tbody>
|
|
251
|
+
<tr>
|
|
252
|
+
<td><code>--url</code></td>
|
|
253
|
+
<td><code>-u</code></td>
|
|
254
|
+
<td>Base URL to fetch documentation from</td>
|
|
255
|
+
<td><strong>Required</strong></td>
|
|
256
|
+
</tr>
|
|
257
|
+
<tr>
|
|
258
|
+
<td><code>--output</code></td>
|
|
259
|
+
<td><code>-o</code></td>
|
|
260
|
+
<td>Output file path</td>
|
|
261
|
+
<td><code>docs.md</code></td>
|
|
262
|
+
</tr>
|
|
263
|
+
<tr>
|
|
264
|
+
<td><code>--depth</code></td>
|
|
265
|
+
<td><code>-d</code></td>
|
|
266
|
+
<td>Maximum crawl depth</td>
|
|
267
|
+
<td><code>2</code></td>
|
|
268
|
+
</tr>
|
|
269
|
+
<tr>
|
|
270
|
+
<td><code>--concurrent</code></td>
|
|
271
|
+
<td><code>-c</code></td>
|
|
272
|
+
<td>Number of concurrent fetchers</td>
|
|
273
|
+
<td><code>3</code></td>
|
|
274
|
+
</tr>
|
|
275
|
+
<tr>
|
|
276
|
+
<td><code>--llm-txt</code></td>
|
|
277
|
+
<td></td>
|
|
278
|
+
<td>Generate AI-friendly llm.txt index</td>
|
|
279
|
+
<td><code>false</code></td>
|
|
280
|
+
</tr>
|
|
281
|
+
<tr>
|
|
282
|
+
<td><code>--user-agent</code></td>
|
|
283
|
+
<td></td>
|
|
284
|
+
<td>Custom user agent string</td>
|
|
285
|
+
<td><code>DocFetch/1.0</code></td>
|
|
286
|
+
</tr>
|
|
287
|
+
</tbody>
|
|
288
|
+
</table>
|
|
289
|
+
</div>
|
|
290
|
+
</section>
|
|
291
|
+
|
|
292
|
+
<section id="examples" class="examples">
|
|
293
|
+
<h2>Real-World Examples</h2>
|
|
294
|
+
<div class="example-cards">
|
|
295
|
+
<div class="example-card">
|
|
296
|
+
<h3>Go Documentation</h3>
|
|
297
|
+
<pre><code>doc-fetch --url https://golang.org/doc/ \
|
|
298
|
+
--output ./docs/go-documentation.md \
|
|
299
|
+
--depth 4 --llm-txt</code></pre>
|
|
300
|
+
<p>Complete Go documentation with language spec, tutorials, and API references.</p>
|
|
301
|
+
</div>
|
|
302
|
+
|
|
303
|
+
<div class="example-card">
|
|
304
|
+
<h3>React Documentation</h3>
|
|
305
|
+
<pre><code>doc-fetch --url https://react.dev/learn \
|
|
306
|
+
--output ./docs/react-learn.md \
|
|
307
|
+
--concurrent 10 --llm-txt</code></pre>
|
|
308
|
+
<p>React learn section with all tutorials and guides in one file.</p>
|
|
309
|
+
</div>
|
|
310
|
+
|
|
311
|
+
<div class="example-card">
|
|
312
|
+
<h3>Your Project Docs</h3>
|
|
313
|
+
<pre><code>doc-fetch --url https://your-project.com/docs/ \
|
|
314
|
+
--output ./internal/docs.md \
|
|
315
|
+
--llm-txt</code></pre>
|
|
316
|
+
<p>Fetch your own project's documentation for AI agent training.</p>
|
|
317
|
+
</div>
|
|
318
|
+
</div>
|
|
319
|
+
</section>
|
|
320
|
+
|
|
321
|
+
<section class="how-it-works">
|
|
322
|
+
<h2>How It Works</h2>
|
|
323
|
+
<div class="steps">
|
|
324
|
+
<div class="step">
|
|
325
|
+
<div class="step-number">1</div>
|
|
326
|
+
<h3>Link Discovery</h3>
|
|
327
|
+
<p>Parses the base URL to find all internal documentation links</p>
|
|
328
|
+
</div>
|
|
329
|
+
|
|
330
|
+
<div class="step">
|
|
331
|
+
<div class="step-number">2</div>
|
|
332
|
+
<h3>Content Fetching</h3>
|
|
333
|
+
<p>Downloads all pages concurrently with respect for robots.txt</p>
|
|
334
|
+
</div>
|
|
335
|
+
|
|
336
|
+
<div class="step">
|
|
337
|
+
<div class="step-number">3</div>
|
|
338
|
+
<h3>HTML Cleaning</h3>
|
|
339
|
+
<p>Removes non-content elements (navigation, headers, footers)</p>
|
|
340
|
+
</div>
|
|
341
|
+
|
|
342
|
+
<div class="step">
|
|
343
|
+
<div class="step-number">4</div>
|
|
344
|
+
<h3>Markdown Conversion</h3>
|
|
345
|
+
<p>Converts cleaned HTML to structured markdown</p>
|
|
346
|
+
</div>
|
|
347
|
+
|
|
348
|
+
<div class="step">
|
|
349
|
+
<div class="step-number">5</div>
|
|
350
|
+
<h3>Classification</h3>
|
|
351
|
+
<p>Categorizes pages as API, GUIDE, REFERENCE, or EXAMPLE</p>
|
|
352
|
+
</div>
|
|
353
|
+
|
|
354
|
+
<div class="step">
|
|
355
|
+
<div class="step-number">6</div>
|
|
356
|
+
<h3>Output Generation</h3>
|
|
357
|
+
<p>Combines all docs into one file + generates llm.txt index</p>
|
|
358
|
+
</div>
|
|
359
|
+
</div>
|
|
360
|
+
</section>
|
|
361
|
+
|
|
362
|
+
<section class="llm-txt-section">
|
|
363
|
+
<h2>How <code class="inline">llm.txt</code> Supercharges Your AI</h2>
|
|
364
|
+
<div class="llm-comparison">
|
|
365
|
+
<div class="llm-before">
|
|
366
|
+
<h3>Without DocFetch</h3>
|
|
367
|
+
<blockquote>"What does the net/http package do?"</blockquote>
|
|
368
|
+
<p class="problem">Your AI has no idea. It needs to guess or ask you to provide context.</p>
|
|
369
|
+
</div>
|
|
370
|
+
|
|
371
|
+
<div class="llm-after">
|
|
372
|
+
<h3>With DocFetch</h3>
|
|
373
|
+
<blockquote>"Check the [API] net/http section in llm.txt"</blockquote>
|
|
374
|
+
<p class="solution">Your AI knows exactly where to look: "HTTP client/server implementation"</p>
|
|
375
|
+
</div>
|
|
376
|
+
</div>
|
|
377
|
+
|
|
378
|
+
<div class="llm-txt-example">
|
|
379
|
+
<h3>Example <code class="inline">llm.txt</code> Output</h3>
|
|
380
|
+
<pre><code># llm.txt - AI-friendly documentation index
|
|
381
|
+
|
|
382
|
+
[GUIDE] Getting Started
|
|
383
|
+
https://golang.org/doc/install
|
|
384
|
+
Covers installation, setup, and first program.
|
|
385
|
+
|
|
386
|
+
[REFERENCE] Language Specification
|
|
387
|
+
https://golang.org/ref/spec
|
|
388
|
+
Complete Go language specification and syntax.
|
|
389
|
+
|
|
390
|
+
[API] net/http
|
|
391
|
+
https://pkg.go.dev/net/http
|
|
392
|
+
HTTP client/server implementation.</code></pre>
|
|
393
|
+
</div>
|
|
394
|
+
</section>
|
|
395
|
+
|
|
396
|
+
<section class="cta-final">
|
|
397
|
+
<h2>Stop wasting time copying documentation</h2>
|
|
398
|
+
<p>Start building AI agents with complete knowledge.</p>
|
|
399
|
+
<div class="cta-buttons">
|
|
400
|
+
<a href="#installation" class="btn primary">Install DocFetch</a>
|
|
401
|
+
<a href="https://github.com/AlphaTechini/doc-fetch" target="_blank" rel="noopener noreferrer" class="btn secondary">Star on GitHub</a>
|
|
402
|
+
</div>
|
|
403
|
+
</section>
|
|
404
|
+
</main>
|
|
405
|
+
|
|
406
|
+
<footer>
|
|
407
|
+
<div class="footer-content">
|
|
408
|
+
<div class="footer-left">
|
|
409
|
+
<p>Built with ❤️ for AI developers who deserve better documentation access</p>
|
|
410
|
+
<p class="copyright">© 2026 AlphaTechini. MIT License.</p>
|
|
411
|
+
</div>
|
|
412
|
+
<div class="footer-right">
|
|
413
|
+
<a href="https://github.com/AlphaTechini/doc-fetch" target="_blank" rel="noopener noreferrer">GitHub</a>
|
|
414
|
+
<a href="https://github.com/AlphaTechini/doc-fetch/issues" target="_blank" rel="noopener noreferrer">Issues</a>
|
|
415
|
+
<a href="https://www.npmjs.com/package/doc-fetch" target="_blank" rel="noopener noreferrer">NPM</a>
|
|
416
|
+
<a href="https://pypi.org/project/doc-fetch/" target="_blank" rel="noopener noreferrer">PyPI</a>
|
|
417
|
+
</div>
|
|
418
|
+
</div>
|
|
419
|
+
</footer>
|
|
420
|
+
</div>
|
|
421
|
+
|
|
422
|
+
<style>
|
|
423
|
+
:global(:root) {
|
|
424
|
+
--bg-primary: #ffffff;
|
|
425
|
+
--bg-secondary: #f8f9fa;
|
|
426
|
+
--text-primary: #1a1a1a;
|
|
427
|
+
--text-secondary: #4a4a4a;
|
|
428
|
+
--text-muted: #6b7280;
|
|
429
|
+
--accent: #0066cc;
|
|
430
|
+
--accent-hover: #0052a3;
|
|
431
|
+
--border: #e5e7eb;
|
|
432
|
+
--code-bg: #1e1e1e;
|
|
433
|
+
--code-text: #d4d4d4;
|
|
434
|
+
--max-width: 1200px;
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
:global(body) {
|
|
438
|
+
margin: 0;
|
|
439
|
+
padding: 0;
|
|
440
|
+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif;
|
|
441
|
+
background: var(--bg-primary);
|
|
442
|
+
color: var(--text-primary);
|
|
443
|
+
line-height: 1.6;
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
.container {
|
|
447
|
+
max-width: var(--max-width);
|
|
448
|
+
margin: 0 auto;
|
|
449
|
+
padding: 0 2rem;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
/* Header */
|
|
453
|
+
header {
|
|
454
|
+
position: fixed;
|
|
455
|
+
top: 0;
|
|
456
|
+
left: 0;
|
|
457
|
+
right: 0;
|
|
458
|
+
background: rgba(255, 255, 255, 0.95);
|
|
459
|
+
backdrop-filter: blur(10px);
|
|
460
|
+
border-bottom: 1px solid transparent;
|
|
461
|
+
z-index: 1000;
|
|
462
|
+
transition: all 0.3s ease;
|
|
463
|
+
}
|
|
464
|
+
|
|
465
|
+
header.scrolled {
|
|
466
|
+
border-bottom-color: var(--border);
|
|
467
|
+
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
nav {
|
|
471
|
+
display: flex;
|
|
472
|
+
justify-content: space-between;
|
|
473
|
+
align-items: center;
|
|
474
|
+
padding: 1rem 2rem;
|
|
475
|
+
max-width: var(--max-width);
|
|
476
|
+
margin: 0 auto;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
.logo {
|
|
480
|
+
display: flex;
|
|
481
|
+
align-items: center;
|
|
482
|
+
gap: 0.5rem;
|
|
483
|
+
font-weight: 700;
|
|
484
|
+
font-size: 1.25rem;
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
.logo-icon {
|
|
488
|
+
font-size: 1.5rem;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
.nav-links {
|
|
492
|
+
display: flex;
|
|
493
|
+
gap: 2rem;
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
.nav-links a {
|
|
497
|
+
color: var(--text-secondary);
|
|
498
|
+
text-decoration: none;
|
|
499
|
+
font-size: 0.95rem;
|
|
500
|
+
transition: color 0.2s;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
.nav-links a:hover {
|
|
504
|
+
color: var(--accent);
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
/* Hero Section */
|
|
508
|
+
.hero {
|
|
509
|
+
padding: 8rem 0 4rem;
|
|
510
|
+
text-align: center;
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
h1 {
|
|
514
|
+
font-size: 3.5rem;
|
|
515
|
+
font-weight: 800;
|
|
516
|
+
line-height: 1.1;
|
|
517
|
+
margin: 0 0 1.5rem;
|
|
518
|
+
letter-spacing: -0.02em;
|
|
519
|
+
}
|
|
520
|
+
|
|
521
|
+
.highlight {
|
|
522
|
+
color: var(--accent);
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
.subtitle {
|
|
526
|
+
font-size: 1.25rem;
|
|
527
|
+
color: var(--text-secondary);
|
|
528
|
+
max-width: 700px;
|
|
529
|
+
margin: 0 auto 2.5rem;
|
|
530
|
+
line-height: 1.7;
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
.mono {
|
|
534
|
+
font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;
|
|
535
|
+
background: var(--bg-secondary);
|
|
536
|
+
padding: 0.2rem 0.5rem;
|
|
537
|
+
border-radius: 4px;
|
|
538
|
+
font-size: 0.9em;
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
.command-block {
|
|
542
|
+
background: #1e1e1e;
|
|
543
|
+
border-radius: 8px;
|
|
544
|
+
margin: 2rem auto;
|
|
545
|
+
max-width: 700px;
|
|
546
|
+
overflow: hidden;
|
|
547
|
+
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
.command-header {
|
|
551
|
+
display: flex;
|
|
552
|
+
gap: 0.5rem;
|
|
553
|
+
padding: 0.75rem 1rem;
|
|
554
|
+
background: rgba(255, 255, 255, 0.05);
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
.dot {
|
|
558
|
+
width: 12px;
|
|
559
|
+
height: 12px;
|
|
560
|
+
border-radius: 50%;
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
.dot.red { background: #ff5f56; }
|
|
564
|
+
.dot.yellow { background: #ffbd2e; }
|
|
565
|
+
.dot.green { background: #27c93f; }
|
|
566
|
+
|
|
567
|
+
pre {
|
|
568
|
+
margin: 0;
|
|
569
|
+
padding: 1.5rem;
|
|
570
|
+
overflow-x: auto;
|
|
571
|
+
background: #1e1e1e;
|
|
572
|
+
color: #d4d4d4;
|
|
573
|
+
border-radius: 6px;
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
code {
|
|
577
|
+
font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;
|
|
578
|
+
font-size: 0.9rem;
|
|
579
|
+
color: #d4d4d4;
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
.cta-buttons {
|
|
583
|
+
display: flex;
|
|
584
|
+
gap: 1rem;
|
|
585
|
+
justify-content: center;
|
|
586
|
+
margin: 2rem 0;
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
.btn {
|
|
590
|
+
display: inline-block;
|
|
591
|
+
padding: 0.875rem 2rem;
|
|
592
|
+
border-radius: 6px;
|
|
593
|
+
font-weight: 600;
|
|
594
|
+
text-decoration: none;
|
|
595
|
+
transition: all 0.2s;
|
|
596
|
+
font-size: 1rem;
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
.btn.primary {
|
|
600
|
+
background: var(--accent);
|
|
601
|
+
color: white;
|
|
602
|
+
}
|
|
603
|
+
|
|
604
|
+
.btn.primary:hover {
|
|
605
|
+
background: var(--accent-hover);
|
|
606
|
+
transform: translateY(-1px);
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
.btn.secondary {
|
|
610
|
+
background: transparent;
|
|
611
|
+
color: var(--text-secondary);
|
|
612
|
+
border: 1px solid var(--border);
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
.btn.secondary:hover {
|
|
616
|
+
border-color: var(--text-secondary);
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
.badges {
|
|
620
|
+
display: flex;
|
|
621
|
+
gap: 0.75rem;
|
|
622
|
+
justify-content: center;
|
|
623
|
+
flex-wrap: wrap;
|
|
624
|
+
margin-top: 2rem;
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
.badges img {
|
|
628
|
+
height: 20px;
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
/* Sections */
|
|
632
|
+
section {
|
|
633
|
+
padding: 4rem 0;
|
|
634
|
+
border-top: 1px solid var(--border);
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
h2 {
|
|
638
|
+
font-size: 2.5rem;
|
|
639
|
+
font-weight: 700;
|
|
640
|
+
text-align: center;
|
|
641
|
+
margin: 0 0 3rem;
|
|
642
|
+
letter-spacing: -0.01em;
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
/* Features Grid */
|
|
646
|
+
.feature-grid {
|
|
647
|
+
display: grid;
|
|
648
|
+
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
|
649
|
+
gap: 2rem;
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
.feature-card {
|
|
653
|
+
padding: 2rem;
|
|
654
|
+
background: var(--bg-secondary);
|
|
655
|
+
border-radius: 8px;
|
|
656
|
+
transition: transform 0.2s;
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
.feature-card:hover {
|
|
660
|
+
transform: translateY(-2px);
|
|
661
|
+
}
|
|
662
|
+
|
|
663
|
+
.feature-icon {
|
|
664
|
+
font-size: 2.5rem;
|
|
665
|
+
margin-bottom: 1rem;
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
.feature-card h3 {
|
|
669
|
+
font-size: 1.25rem;
|
|
670
|
+
margin: 0 0 0.75rem;
|
|
671
|
+
}
|
|
672
|
+
|
|
673
|
+
.feature-card p {
|
|
674
|
+
color: var(--text-secondary);
|
|
675
|
+
margin: 0;
|
|
676
|
+
line-height: 1.7;
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
/* Installation */
|
|
680
|
+
.install-options {
|
|
681
|
+
display: grid;
|
|
682
|
+
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
|
683
|
+
gap: 1.5rem;
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
.install-card {
|
|
687
|
+
background: var(--bg-secondary);
|
|
688
|
+
border-radius: 8px;
|
|
689
|
+
overflow: hidden;
|
|
690
|
+
}
|
|
691
|
+
|
|
692
|
+
.install-header {
|
|
693
|
+
display: flex;
|
|
694
|
+
justify-content: space-between;
|
|
695
|
+
align-items: center;
|
|
696
|
+
padding: 1rem 1.5rem;
|
|
697
|
+
background: rgba(0, 0, 0, 0.03);
|
|
698
|
+
border-bottom: 1px solid var(--border);
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
.lang-badge {
|
|
702
|
+
font-weight: 600;
|
|
703
|
+
font-size: 0.9rem;
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
.recommended {
|
|
707
|
+
background: var(--accent);
|
|
708
|
+
color: white;
|
|
709
|
+
padding: 0.25rem 0.75rem;
|
|
710
|
+
border-radius: 12px;
|
|
711
|
+
font-size: 0.75rem;
|
|
712
|
+
font-weight: 600;
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
.install-card pre {
|
|
716
|
+
padding: 1.5rem;
|
|
717
|
+
background: #1e1e1e;
|
|
718
|
+
color: #d4d4d4;
|
|
719
|
+
margin: 0;
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
.install-card code {
|
|
723
|
+
font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;
|
|
724
|
+
color: #d4d4d4;
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
.binary-link {
|
|
728
|
+
display: block;
|
|
729
|
+
padding: 1.5rem;
|
|
730
|
+
color: var(--accent);
|
|
731
|
+
text-decoration: none;
|
|
732
|
+
font-weight: 500;
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
.binary-link:hover {
|
|
736
|
+
text-decoration: underline;
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
/* Usage */
|
|
740
|
+
.usage-example h3 {
|
|
741
|
+
font-size: 1.125rem;
|
|
742
|
+
margin: 2rem 0 1rem;
|
|
743
|
+
color: var(--text-secondary);
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
.usage-example pre {
|
|
747
|
+
background: #1e1e1e;
|
|
748
|
+
color: #d4d4d4;
|
|
749
|
+
padding: 1.5rem;
|
|
750
|
+
border-radius: 6px;
|
|
751
|
+
overflow-x: auto;
|
|
752
|
+
margin: 1.5rem 0;
|
|
753
|
+
}
|
|
754
|
+
|
|
755
|
+
.usage-example pre code {
|
|
756
|
+
font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;
|
|
757
|
+
color: #d4d4d4;
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
.usage-example pre:first-of-type {
|
|
761
|
+
margin-top: 0;
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
.options-table {
|
|
765
|
+
width: 100%;
|
|
766
|
+
border-collapse: collapse;
|
|
767
|
+
margin-top: 1.5rem;
|
|
768
|
+
font-size: 0.95rem;
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
.options-table th,
|
|
772
|
+
.options-table td {
|
|
773
|
+
padding: 0.75rem;
|
|
774
|
+
text-align: left;
|
|
775
|
+
border-bottom: 1px solid var(--border);
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
.options-table th {
|
|
779
|
+
font-weight: 600;
|
|
780
|
+
background: var(--bg-secondary);
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
.options-table code {
|
|
784
|
+
background: var(--bg-secondary);
|
|
785
|
+
padding: 0.2rem 0.5rem;
|
|
786
|
+
border-radius: 3px;
|
|
787
|
+
font-size: 0.85em;
|
|
788
|
+
}
|
|
789
|
+
|
|
790
|
+
/* Examples */
|
|
791
|
+
.example-cards {
|
|
792
|
+
display: grid;
|
|
793
|
+
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
|
|
794
|
+
gap: 2rem;
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
.example-card {
|
|
798
|
+
background: var(--bg-secondary);
|
|
799
|
+
padding: 2rem;
|
|
800
|
+
border-radius: 8px;
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
.example-card h3 {
|
|
804
|
+
margin: 0 0 1rem;
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
.example-card pre {
|
|
808
|
+
background: #1e1e1e;
|
|
809
|
+
color: #d4d4d4;
|
|
810
|
+
border-radius: 6px;
|
|
811
|
+
margin-bottom: 1rem;
|
|
812
|
+
padding: 1.5rem;
|
|
813
|
+
overflow-x: auto;
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
.example-card pre code {
|
|
817
|
+
font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;
|
|
818
|
+
color: #d4d4d4;
|
|
819
|
+
}
|
|
820
|
+
|
|
821
|
+
.example-card p {
|
|
822
|
+
color: var(--text-secondary);
|
|
823
|
+
margin: 0;
|
|
824
|
+
font-size: 0.95rem;
|
|
825
|
+
}
|
|
826
|
+
|
|
827
|
+
/* How It Works */
|
|
828
|
+
.steps {
|
|
829
|
+
display: grid;
|
|
830
|
+
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
|
|
831
|
+
gap: 2rem;
|
|
832
|
+
counter-reset: step;
|
|
833
|
+
}
|
|
834
|
+
|
|
835
|
+
.step {
|
|
836
|
+
text-align: center;
|
|
837
|
+
padding: 2rem;
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
.step-number {
|
|
841
|
+
width: 48px;
|
|
842
|
+
height: 48px;
|
|
843
|
+
border-radius: 50%;
|
|
844
|
+
background: var(--accent);
|
|
845
|
+
color: white;
|
|
846
|
+
display: flex;
|
|
847
|
+
align-items: center;
|
|
848
|
+
justify-content: center;
|
|
849
|
+
font-weight: 700;
|
|
850
|
+
font-size: 1.25rem;
|
|
851
|
+
margin: 0 auto 1.5rem;
|
|
852
|
+
}
|
|
853
|
+
|
|
854
|
+
.step h3 {
|
|
855
|
+
margin: 0 0 0.75rem;
|
|
856
|
+
}
|
|
857
|
+
|
|
858
|
+
.step p {
|
|
859
|
+
color: var(--text-secondary);
|
|
860
|
+
margin: 0;
|
|
861
|
+
}
|
|
862
|
+
|
|
863
|
+
/* LLM.txt Section */
|
|
864
|
+
.llm-comparison {
|
|
865
|
+
display: grid;
|
|
866
|
+
grid-template-columns: 1fr 1fr;
|
|
867
|
+
gap: 2rem;
|
|
868
|
+
margin-bottom: 2rem;
|
|
869
|
+
}
|
|
870
|
+
|
|
871
|
+
.llm-before,
|
|
872
|
+
.llm-after {
|
|
873
|
+
padding: 2rem;
|
|
874
|
+
border-radius: 8px;
|
|
875
|
+
}
|
|
876
|
+
|
|
877
|
+
.llm-before {
|
|
878
|
+
background: #fef2f2;
|
|
879
|
+
border: 1px solid #fecaca;
|
|
880
|
+
}
|
|
881
|
+
|
|
882
|
+
.llm-after {
|
|
883
|
+
background: #f0fdf4;
|
|
884
|
+
border: 1px solid #bbf7d0;
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
.llm-before h3,
|
|
888
|
+
.llm-after h3 {
|
|
889
|
+
margin: 0 0 1rem;
|
|
890
|
+
}
|
|
891
|
+
|
|
892
|
+
blockquote {
|
|
893
|
+
margin: 0 0 1rem;
|
|
894
|
+
padding: 1rem;
|
|
895
|
+
background: rgba(0, 0, 0, 0.03);
|
|
896
|
+
border-left: 3px solid var(--accent);
|
|
897
|
+
font-style: italic;
|
|
898
|
+
}
|
|
899
|
+
|
|
900
|
+
.problem {
|
|
901
|
+
color: #dc2626;
|
|
902
|
+
margin: 0;
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
.solution {
|
|
906
|
+
color: #16a34a;
|
|
907
|
+
margin: 0;
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
.llm-txt-example {
|
|
911
|
+
background: var(--code-bg);
|
|
912
|
+
border-radius: 8px;
|
|
913
|
+
overflow: hidden;
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
.llm-txt-example h3 {
|
|
917
|
+
padding: 1rem 1.5rem;
|
|
918
|
+
margin: 0;
|
|
919
|
+
background: rgba(255, 255, 255, 0.05);
|
|
920
|
+
color: var(--code-text);
|
|
921
|
+
font-size: 1rem;
|
|
922
|
+
}
|
|
923
|
+
|
|
924
|
+
.inline {
|
|
925
|
+
background: var(--bg-secondary);
|
|
926
|
+
padding: 0.2rem 0.5rem;
|
|
927
|
+
border-radius: 3px;
|
|
928
|
+
font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;
|
|
929
|
+
font-size: 0.9em;
|
|
930
|
+
}
|
|
931
|
+
|
|
932
|
+
/* CTA Final */
|
|
933
|
+
.cta-final {
|
|
934
|
+
text-align: center;
|
|
935
|
+
background: var(--bg-secondary);
|
|
936
|
+
border-radius: 8px;
|
|
937
|
+
padding: 4rem 2rem;
|
|
938
|
+
margin: 2rem 0;
|
|
939
|
+
}
|
|
940
|
+
|
|
941
|
+
.cta-final h2 {
|
|
942
|
+
margin: 0 0 1rem;
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
.cta-final p {
|
|
946
|
+
font-size: 1.25rem;
|
|
947
|
+
color: var(--text-secondary);
|
|
948
|
+
margin: 0 0 2rem;
|
|
949
|
+
}
|
|
950
|
+
|
|
951
|
+
/* Footer */
|
|
952
|
+
footer {
|
|
953
|
+
border-top: 1px solid var(--border);
|
|
954
|
+
padding: 3rem 0;
|
|
955
|
+
margin-top: 4rem;
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
.footer-content {
|
|
959
|
+
display: flex;
|
|
960
|
+
justify-content: space-between;
|
|
961
|
+
align-items: center;
|
|
962
|
+
}
|
|
963
|
+
|
|
964
|
+
.footer-left p {
|
|
965
|
+
margin: 0;
|
|
966
|
+
color: var(--text-secondary);
|
|
967
|
+
}
|
|
968
|
+
|
|
969
|
+
.copyright {
|
|
970
|
+
font-size: 0.875rem;
|
|
971
|
+
margin-top: 0.5rem !important;
|
|
972
|
+
}
|
|
973
|
+
|
|
974
|
+
.footer-right {
|
|
975
|
+
display: flex;
|
|
976
|
+
gap: 2rem;
|
|
977
|
+
}
|
|
978
|
+
|
|
979
|
+
.footer-right a {
|
|
980
|
+
color: var(--text-secondary);
|
|
981
|
+
text-decoration: none;
|
|
982
|
+
transition: color 0.2s;
|
|
983
|
+
}
|
|
984
|
+
|
|
985
|
+
.footer-right a:hover {
|
|
986
|
+
color: var(--accent);
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
/* Global pre/code styling - ALL code blocks dark */
|
|
990
|
+
pre {
|
|
991
|
+
background: #1e1e1e !important;
|
|
992
|
+
color: #d4d4d4 !important;
|
|
993
|
+
}
|
|
994
|
+
|
|
995
|
+
pre code {
|
|
996
|
+
font-family: 'SF Mono', Monaco, 'Cascadia Code', monospace;
|
|
997
|
+
color: #d4d4d4 !important;
|
|
998
|
+
}
|
|
999
|
+
|
|
1000
|
+
/* Responsive */
|
|
1001
|
+
@media (max-width: 768px) {
|
|
1002
|
+
h1 {
|
|
1003
|
+
font-size: 2.5rem;
|
|
1004
|
+
}
|
|
1005
|
+
|
|
1006
|
+
.subtitle {
|
|
1007
|
+
font-size: 1.1rem;
|
|
1008
|
+
}
|
|
1009
|
+
|
|
1010
|
+
.nav-links {
|
|
1011
|
+
gap: 1rem;
|
|
1012
|
+
font-size: 0.875rem;
|
|
1013
|
+
}
|
|
1014
|
+
|
|
1015
|
+
.llm-comparison {
|
|
1016
|
+
grid-template-columns: 1fr;
|
|
1017
|
+
}
|
|
1018
|
+
|
|
1019
|
+
.footer-content {
|
|
1020
|
+
flex-direction: column;
|
|
1021
|
+
gap: 2rem;
|
|
1022
|
+
text-align: center;
|
|
1023
|
+
}
|
|
1024
|
+
|
|
1025
|
+
.container {
|
|
1026
|
+
padding: 0 1rem;
|
|
1027
|
+
}
|
|
1028
|
+
|
|
1029
|
+
nav {
|
|
1030
|
+
padding: 1rem;
|
|
1031
|
+
}
|
|
1032
|
+
}
|
|
1033
|
+
</style>
|