1:root {
2 color-scheme: light dark;
3 --bg: #0b0b0f;
4 --panel: #10101a;
5 --text: #f3f4f6;
6 --muted: #a1a1aa;
7 --border: rgba(255, 255, 255, 0.08);
8 --link: #93c5fd;
9 --codebg: rgba(255, 255, 255, 0.06);
10 --shadow: rgba(0, 0, 0, 0.35);
11 --max: 900px;
12 --radius: 12px;
13 --gutter: 16px;
14 --mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
15 "Courier New", monospace;
16 --sans: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica,
17 Arial, "Apple Color Emoji", "Segoe UI Emoji";
18}
19
20@media (prefers-color-scheme: light) {
21 :root {
22 --bg: #fafafa;
23 --panel: #ffffff;
24 --text: #0b0b0f;
25 --muted: #52525b;
26 --border: rgba(0, 0, 0, 0.08);
27 --link: #2563eb;
28 --codebg: rgba(0, 0, 0, 0.04);
29 --shadow: rgba(0, 0, 0, 0.08);
30 }
31}
32
33* {
34 box-sizing: border-box;
35}
36
37html,
38body {
39 height: 100%;
40}
41
42body {
43 margin: 0;
44 font-family: var(--sans);
45 background: var(--bg);
46 color: var(--text);
47}
48
49a {
50 color: var(--link);
51 text-decoration: none;
52}
53a:hover {
54 text-decoration: underline;
55}
56
57/* App shell */
58.app {
59 min-height: 100%;
60 display: flex;
61 flex-direction: column;
62}
63
64/* Header */
65.header {
66 position: sticky;
67 top: 0;
68 z-index: 20;
69 display: flex;
70 align-items: center;
71 gap: 12px;
72 padding: 12px var(--gutter);
73 border-bottom: 1px solid var(--border);
74 background: color-mix(in srgb, var(--panel) 92%, transparent);
75 backdrop-filter: blur(10px);
76}
77
78.menu-toggle {
79 display: none;
80 align-items: center;
81 justify-content: center;
82 width: 36px;
83 height: 36px;
84 padding: 0;
85 background: transparent;
86 border: 1px solid var(--border);
87 border-radius: 8px;
88 cursor: pointer;
89 flex-shrink: 0;
90}
91.menu-toggle span {
92 display: block;
93 width: 16px;
94 height: 2px;
95 background: var(--text);
96 border-radius: 1px;
97 position: relative;
98}
99.menu-toggle span::before,
100.menu-toggle span::after {
101 content: "";
102 position: absolute;
103 left: 0;
104 width: 16px;
105 height: 2px;
106 background: var(--text);
107 border-radius: 1px;
108 transition: transform 0.2s;
109}
110.menu-toggle span::before {
111 top: -5px;
112}
113.menu-toggle span::after {
114 top: 5px;
115}
116.menu-toggle[aria-expanded="true"] span {
117 background: transparent;
118}
119.menu-toggle[aria-expanded="true"] span::before {
120 transform: translateY(5px) rotate(45deg);
121}
122.menu-toggle[aria-expanded="true"] span::after {
123 transform: translateY(-5px) rotate(-45deg);
124}
125
126.brand {
127 font-weight: 700;
128 font-size: 15px;
129 color: var(--text);
130 padding: 6px 0;
131}
132.brand:hover {
133 text-decoration: none;
134 opacity: 0.8;
135}
136
137.header-links {
138 display: flex;
139 gap: 8px;
140 margin-left: auto;
141}
142
143.header-link {
144 padding: 6px 12px;
145 font-size: 14px;
146 border-radius: 8px;
147 border: 1px solid var(--border);
148 color: var(--text);
149}
150.header-link:hover {
151 background: var(--codebg);
152 text-decoration: none;
153}
154
155/* Overlay */
156.overlay {
157 display: none;
158 position: fixed;
159 inset: 0;
160 z-index: 15;
161 background: rgba(0, 0, 0, 0.5);
162}
163.overlay.open {
164 display: block;
165}
166
167/* Layout */
168.layout {
169 display: flex;
170 gap: var(--gutter);
171 padding: var(--gutter);
172 flex: 1;
173 max-width: 1200px;
174 margin: 0 auto;
175 width: 100%;
176}
177
178/* Sidebar */
179.sidebar {
180 width: 240px;
181 flex-shrink: 0;
182 position: sticky;
183 top: 72px;
184 align-self: flex-start;
185 max-height: calc(100vh - 88px);
186 overflow-y: auto;
187 border: 1px solid var(--border);
188 border-radius: var(--radius);
189 background: var(--panel);
190}
191
192.nav {
193 padding: 8px;
194 display: flex;
195 flex-direction: column;
196 gap: 2px;
197}
198
199.nav a {
200 display: block;
201 padding: 10px 12px;
202 border-radius: 8px;
203 color: var(--text);
204 font-size: 14px;
205}
206.nav a:hover {
207 background: var(--codebg);
208 text-decoration: none;
209}
210.nav a[aria-current="page"] {
211 background: color-mix(in srgb, var(--link) 15%, transparent);
212}
213
214/* Main content */
215.main {
216 flex: 1;
217 min-width: 0;
218}
219
220.content {
221 border: 1px solid var(--border);
222 border-radius: var(--radius);
223 background: var(--panel);
224 padding: 24px;
225}
226
227/* Footer */
228.site-footer {
229 padding: 16px var(--gutter);
230 text-align: center;
231 border-top: 1px solid var(--border);
232}
233
234.footer-link {
235 font-size: 13px;
236 color: var(--muted);
237}
238.footer-link:hover {
239 color: var(--text);
240 text-decoration: none;
241}
242
243/* Content typography */
244.content h1,
245.content h2,
246.content h3 {
247 scroll-margin-top: 80px;
248}
249
250.content h1 {
251 margin-top: 0;
252 font-size: 28px;
253}
254
255.content h2 {
256 font-size: 20px;
257 margin-top: 32px;
258}
259
260.content h3 {
261 font-size: 16px;
262 margin-top: 24px;
263}
264
265.content p,
266.content li {
267 line-height: 1.65;
268}
269
270.content code {
271 font-family: var(--mono);
272 font-size: 0.9em;
273 background: var(--codebg);
274 padding: 2px 6px;
275 border-radius: 6px;
276}
277
278.content pre {
279 overflow-x: auto;
280 padding: 16px;
281 border-radius: 10px;
282 background: var(--codebg);
283 border: 1px solid var(--border);
284 font-size: 14px;
285 line-height: 1.5;
286}
287
288.content pre code {
289 background: transparent;
290 padding: 0;
291}
292
293.content details {
294 margin: 16px 0;
295}
296
297.content details summary {
298 cursor: pointer;
299 padding: 8px 0;
300}
301
302.empty {
303 color: var(--muted);
304}
305
306/* Mobile */
307@media (max-width: 768px) {
308 :root {
309 --gutter: 16px;
310 }
311
312 .menu-toggle {
313 display: flex;
314 }
315
316 .layout {
317 flex-direction: column;
318 }
319
320 .sidebar {
321 position: fixed;
322 top: 0;
323 left: 0;
324 bottom: 0;
325 width: 280px;
326 max-width: 80vw;
327 z-index: 16;
328 border: none;
329 border-radius: 0;
330 border-right: 1px solid var(--border);
331 max-height: none;
332 padding-top: 60px;
333 transform: translateX(-100%);
334 transition: transform 0.2s ease-out;
335 }
336
337 .sidebar.open {
338 transform: translateX(0);
339 }
340
341 .nav {
342 padding: 12px;
343 }
344
345 .nav a {
346 padding: 12px 14px;
347 font-size: 15px;
348 }
349
350 .content {
351 padding: 20px;
352 border-radius: 10px;
353 }
354
355 .content h1 {
356 font-size: 24px;
357 }
358
359 .content h2 {
360 font-size: 18px;
361 }
362
363 .content pre {
364 font-size: 13px;
365 padding: 14px;
366 }
367}