atproto utils for zig
zat.dev
atproto
sdk
zig
1:root {
2 color-scheme: dark;
3 --bg: #0b0b0f;
4 --panel: #12121e;
5 --text: #e4e4eb;
6 --muted: #8b8b9e;
7 --border: rgba(255, 255, 255, 0.07);
8 --link: #7db4f5;
9 --codebg: rgba(255, 255, 255, 0.05);
10 --shadow: rgba(0, 0, 0, 0.4);
11 --accent: rgba(125, 180, 245, 0.08);
12 --radius: 10px;
13 --gutter: 16px;
14 --mono: "Geist Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
15 "Liberation Mono", "Courier New", monospace;
16 --sans: "Geist", -apple-system, system-ui, "Segoe UI", Roboto, Helvetica, Arial,
17 sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
18}
19
20@media (prefers-color-scheme: light) {
21 :root:not([data-theme="dark"]) {
22 color-scheme: light;
23 --bg: #f8f8fa;
24 --panel: #ffffff;
25 --text: #1a1a2e;
26 --muted: #64648a;
27 --border: rgba(0, 0, 0, 0.08);
28 --link: #2563eb;
29 --codebg: rgba(0, 0, 0, 0.04);
30 --shadow: rgba(0, 0, 0, 0.06);
31 --accent: rgba(37, 99, 235, 0.06);
32 }
33}
34
35:root[data-theme="light"] {
36 color-scheme: light;
37 --bg: #f8f8fa;
38 --panel: #ffffff;
39 --text: #1a1a2e;
40 --muted: #64648a;
41 --border: rgba(0, 0, 0, 0.08);
42 --link: #2563eb;
43 --codebg: rgba(0, 0, 0, 0.04);
44 --shadow: rgba(0, 0, 0, 0.06);
45 --accent: rgba(37, 99, 235, 0.06);
46}
47
48* {
49 box-sizing: border-box;
50}
51
52html,
53body {
54 height: 100%;
55}
56
57body {
58 margin: 0;
59 font-family: var(--sans);
60 font-weight: 400;
61 background: var(--bg);
62 color: var(--text);
63 -webkit-font-smoothing: antialiased;
64 -moz-osx-font-smoothing: grayscale;
65}
66
67a {
68 color: var(--link);
69 text-decoration: none;
70}
71a:hover {
72 text-decoration: underline;
73}
74
75/* App shell */
76.app {
77 min-height: 100%;
78 display: flex;
79 flex-direction: column;
80}
81
82/* Header */
83.header {
84 position: sticky;
85 top: 0;
86 z-index: 20;
87 display: flex;
88 align-items: center;
89 gap: 8px;
90 padding: 0 var(--gutter);
91 height: 48px;
92 border-bottom: 1px solid var(--border);
93 background: color-mix(in srgb, var(--bg) 85%, transparent);
94 backdrop-filter: blur(12px);
95 -webkit-backdrop-filter: blur(12px);
96 max-width: 100%;
97}
98
99.brand {
100 font-family: var(--mono);
101 font-weight: 700;
102 font-size: 14px;
103 color: var(--text);
104 letter-spacing: -0.02em;
105 white-space: nowrap;
106 flex-shrink: 0;
107}
108.brand:hover {
109 text-decoration: none;
110 opacity: 0.8;
111}
112
113/* Nav — inline in header */
114.nav {
115 display: flex;
116 gap: 2px;
117 margin-left: 12px;
118 overflow-x: auto;
119 -webkit-overflow-scrolling: touch;
120 scrollbar-width: none;
121}
122.nav::-webkit-scrollbar {
123 display: none;
124}
125
126.nav a {
127 padding: 6px 10px;
128 border-radius: 6px;
129 color: var(--muted);
130 font-size: 13px;
131 font-weight: 500;
132 white-space: nowrap;
133 transition: color 0.1s, background 0.1s;
134}
135.nav a:hover {
136 color: var(--text);
137 background: var(--codebg);
138 text-decoration: none;
139}
140.nav a[aria-current="page"] {
141 color: var(--text);
142 background: var(--accent);
143}
144
145/* Header right */
146.header-right {
147 display: flex;
148 align-items: center;
149 gap: 6px;
150 margin-left: auto;
151 flex-shrink: 0;
152}
153
154.header-link {
155 padding: 5px 10px;
156 font-size: 13px;
157 font-weight: 500;
158 border-radius: 6px;
159 color: var(--muted);
160 white-space: nowrap;
161}
162.header-link:hover {
163 color: var(--text);
164 background: var(--codebg);
165 text-decoration: none;
166}
167
168/* Theme toggle */
169.theme-toggle {
170 display: flex;
171 align-items: center;
172 justify-content: center;
173 width: 32px;
174 height: 32px;
175 padding: 0;
176 background: transparent;
177 border: 1px solid var(--border);
178 border-radius: 6px;
179 cursor: pointer;
180 color: var(--muted);
181 transition: color 0.15s, border-color 0.15s;
182}
183.theme-toggle:hover {
184 color: var(--text);
185 border-color: var(--muted);
186}
187.theme-toggle .icon-moon {
188 display: none;
189}
190:root[data-theme="dark"] .theme-toggle .icon-sun {
191 display: none;
192}
193:root[data-theme="dark"] .theme-toggle .icon-moon {
194 display: block;
195}
196:root[data-theme="light"] .theme-toggle .icon-sun {
197 display: block;
198}
199:root[data-theme="light"] .theme-toggle .icon-moon {
200 display: none;
201}
202
203/* Main content */
204.main {
205 flex: 1;
206 width: 100%;
207 max-width: 720px;
208 margin: 0 auto;
209 padding: var(--gutter);
210}
211
212.content {
213 border: 1px solid var(--border);
214 border-radius: var(--radius);
215 background: var(--panel);
216 padding: 28px 32px;
217}
218
219/* Footer */
220.site-footer {
221 padding: 16px var(--gutter);
222 text-align: center;
223 border-top: 1px solid var(--border);
224}
225
226.footer-link {
227 font-size: 12px;
228 color: var(--muted);
229}
230.footer-link:hover {
231 color: var(--text);
232 text-decoration: none;
233}
234
235/* Content typography */
236.content h1,
237.content h2,
238.content h3 {
239 scroll-margin-top: 64px;
240 letter-spacing: -0.01em;
241}
242
243.content h1 {
244 margin-top: 0;
245 font-size: 24px;
246 font-weight: 700;
247}
248
249.content h2 {
250 font-size: 17px;
251 font-weight: 600;
252 margin-top: 36px;
253 padding-top: 16px;
254 border-top: 1px solid var(--border);
255}
256
257.content h2:first-of-type {
258 border-top: none;
259 padding-top: 0;
260}
261
262.content h3 {
263 font-size: 14px;
264 font-weight: 600;
265 margin-top: 24px;
266 color: var(--muted);
267}
268
269.content p,
270.content li {
271 line-height: 1.7;
272 font-size: 14px;
273}
274
275.content code {
276 font-family: var(--mono);
277 font-size: 0.85em;
278 background: var(--codebg);
279 padding: 2px 5px;
280 border-radius: 4px;
281 border: 1px solid var(--border);
282}
283
284.content pre {
285 overflow-x: auto;
286 padding: 14px 16px;
287 border-radius: 8px;
288 background: var(--codebg);
289 border: 1px solid var(--border);
290 font-size: 13px;
291 line-height: 1.6;
292}
293
294.content pre code {
295 background: transparent;
296 padding: 0;
297 border: none;
298 font-size: inherit;
299}
300
301.content details {
302 margin: 12px 0;
303 border: 1px solid var(--border);
304 border-radius: 8px;
305}
306
307.content details summary {
308 cursor: pointer;
309 padding: 10px 14px;
310 font-size: 14px;
311 border-radius: 8px;
312}
313
314.content details summary:hover {
315 background: var(--accent);
316}
317
318.content details[open] summary {
319 border-bottom: 1px solid var(--border);
320 border-radius: 8px 8px 0 0;
321}
322
323.content details > :not(summary) {
324 padding: 0 14px;
325}
326
327.content hr {
328 border: none;
329 border-top: 1px solid var(--border);
330 margin: 28px 0;
331}
332
333.content blockquote {
334 border-left: 3px solid var(--link);
335 margin: 16px 0;
336 padding: 4px 16px;
337 color: var(--muted);
338 background: var(--accent);
339 border-radius: 0 6px 6px 0;
340}
341
342.content table {
343 width: 100%;
344 border-collapse: collapse;
345 font-size: 13px;
346 margin: 16px 0;
347}
348
349.content th,
350.content td {
351 padding: 8px 12px;
352 border: 1px solid var(--border);
353 text-align: left;
354}
355
356.content th {
357 background: var(--codebg);
358 font-weight: 600;
359}
360
361.empty {
362 color: var(--muted);
363}
364
365/* Mobile */
366@media (max-width: 640px) {
367 .header {
368 gap: 4px;
369 padding: 0 12px;
370 }
371
372 .nav {
373 margin-left: 8px;
374 gap: 0;
375 }
376
377 .nav a {
378 padding: 6px 8px;
379 font-size: 12px;
380 }
381
382 .header-link {
383 font-size: 12px;
384 padding: 5px 8px;
385 }
386
387 .main {
388 padding: 12px;
389 }
390
391 .content {
392 padding: 20px 16px;
393 border-radius: 8px;
394 }
395
396 .content h1 {
397 font-size: 20px;
398 }
399
400 .content h2 {
401 font-size: 16px;
402 }
403
404 .content pre {
405 font-size: 12px;
406 padding: 12px;
407 }
408}