@blaaiz/docs-core 0.1.0
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/LICENSE +21 -0
- package/README.md +103 -0
- package/dist/chunk-3ZX4WIE3.js +2984 -0
- package/dist/chunk-3ZX4WIE3.js.map +1 -0
- package/dist/chunk-JCYR6RPE.js +31 -0
- package/dist/chunk-JCYR6RPE.js.map +1 -0
- package/dist/chunk-ZKOOKLZ3.js +124 -0
- package/dist/chunk-ZKOOKLZ3.js.map +1 -0
- package/dist/cli.js +534 -0
- package/dist/cli.js.map +1 -0
- package/dist/generator.cjs +508 -0
- package/dist/generator.cjs.map +1 -0
- package/dist/generator.d.cts +122 -0
- package/dist/generator.d.ts +122 -0
- package/dist/generator.js +177 -0
- package/dist/generator.js.map +1 -0
- package/dist/index.cjs +3024 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1182 -0
- package/dist/index.d.ts +1182 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/navigation-CGqFIPlP.d.cts +498 -0
- package/dist/navigation-CGqFIPlP.d.ts +498 -0
- package/dist/openapi-types-CJ6p5Cux.d.cts +78 -0
- package/dist/openapi-types-CJ6p5Cux.d.ts +78 -0
- package/dist/ui/api-try-it.cjs +654 -0
- package/dist/ui/api-try-it.cjs.map +1 -0
- package/dist/ui/api-try-it.d.cts +78 -0
- package/dist/ui/api-try-it.d.ts +78 -0
- package/dist/ui/api-try-it.js +509 -0
- package/dist/ui/api-try-it.js.map +1 -0
- package/dist/ui/ask-ai.cjs +810 -0
- package/dist/ui/ask-ai.cjs.map +1 -0
- package/dist/ui/ask-ai.d.cts +57 -0
- package/dist/ui/ask-ai.d.ts +57 -0
- package/dist/ui/ask-ai.js +808 -0
- package/dist/ui/ask-ai.js.map +1 -0
- package/dist/ui/copy-page.cjs +312 -0
- package/dist/ui/copy-page.cjs.map +1 -0
- package/dist/ui/copy-page.d.cts +33 -0
- package/dist/ui/copy-page.d.ts +33 -0
- package/dist/ui/copy-page.js +183 -0
- package/dist/ui/copy-page.js.map +1 -0
- package/dist/ui/mermaid.cjs +363 -0
- package/dist/ui/mermaid.cjs.map +1 -0
- package/dist/ui/mermaid.d.cts +13 -0
- package/dist/ui/mermaid.d.ts +13 -0
- package/dist/ui/mermaid.js +361 -0
- package/dist/ui/mermaid.js.map +1 -0
- package/dist/ui.cjs +661 -0
- package/dist/ui.cjs.map +1 -0
- package/dist/ui.d.cts +428 -0
- package/dist/ui.d.ts +428 -0
- package/dist/ui.js +537 -0
- package/dist/ui.js.map +1 -0
- package/package.json +145 -0
- package/patches/fumadocs-openapi.patch +173 -0
- package/skills/AGENTS-section.md +36 -0
- package/skills/SKILL.md +363 -0
- package/styles/api-reference.css +1417 -0
- package/styles/ask-ai.css +563 -0
- package/styles/auth.css +462 -0
- package/styles/docs.css +247 -0
- package/styles/home.css +376 -0
- package/templates/init/content/docs/index.mdx.tmpl +52 -0
- package/templates/init/content/docs/meta.json.tmpl +3 -0
- package/templates/init/content/docs.json.tmpl +12 -0
- package/templates/init/content/nav.json.tmpl +7 -0
- package/templates/init/docs.config.ts.tmpl +36 -0
- package/templates/init/env.example.tmpl +15 -0
package/styles/auth.css
ADDED
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @blaaiz/docs-core — sign-in and error screens.
|
|
3
|
+
*
|
|
4
|
+
* Standalone screens that render outside the fumadocs shell (the sign-in gate,
|
|
5
|
+
* 404, and runtime errors). Import once in the site's global stylesheet:
|
|
6
|
+
* @import '@blaaiz/docs-core/styles/auth.css';
|
|
7
|
+
*
|
|
8
|
+
* Colours come from the framework's --color-fd-* tokens (set by buildThemeCss +
|
|
9
|
+
* the fumadocs preset), so the brand flows through with nothing hardcoded.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
/* ── Shared canvas ─────────────────────────────────────────────────────── */
|
|
13
|
+
|
|
14
|
+
.auth-screen,
|
|
15
|
+
.error-screen {
|
|
16
|
+
position: relative;
|
|
17
|
+
min-height: 100dvh;
|
|
18
|
+
display: grid;
|
|
19
|
+
place-items: center;
|
|
20
|
+
padding: 24px;
|
|
21
|
+
background: var(--color-fd-background);
|
|
22
|
+
overflow: hidden;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/* A soft brand-tinted glow, top-centre, and a faint grid. Purely decorative. */
|
|
26
|
+
.auth-ambient {
|
|
27
|
+
position: absolute;
|
|
28
|
+
inset: 0;
|
|
29
|
+
pointer-events: none;
|
|
30
|
+
background: radial-gradient(
|
|
31
|
+
60% 50% at 50% -10%,
|
|
32
|
+
color-mix(in oklab, var(--color-fd-primary) 22%, transparent),
|
|
33
|
+
transparent 70%
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
.auth-ambient::before {
|
|
38
|
+
content: '';
|
|
39
|
+
position: absolute;
|
|
40
|
+
inset: 0;
|
|
41
|
+
background-image:
|
|
42
|
+
linear-gradient(
|
|
43
|
+
to right,
|
|
44
|
+
color-mix(in oklab, var(--color-fd-border) 55%, transparent) 1px,
|
|
45
|
+
transparent 1px
|
|
46
|
+
),
|
|
47
|
+
linear-gradient(
|
|
48
|
+
to bottom,
|
|
49
|
+
color-mix(in oklab, var(--color-fd-border) 55%, transparent) 1px,
|
|
50
|
+
transparent 1px
|
|
51
|
+
);
|
|
52
|
+
background-size: 44px 44px;
|
|
53
|
+
-webkit-mask-image: radial-gradient(70% 60% at 50% 0%, black, transparent 75%);
|
|
54
|
+
mask-image: radial-gradient(70% 60% at 50% 0%, black, transparent 75%);
|
|
55
|
+
opacity: 0.5;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
/* ── Card ──────────────────────────────────────────────────────────────── */
|
|
59
|
+
|
|
60
|
+
.auth-card,
|
|
61
|
+
.error-card {
|
|
62
|
+
position: relative;
|
|
63
|
+
z-index: 1;
|
|
64
|
+
width: 100%;
|
|
65
|
+
max-width: 400px;
|
|
66
|
+
border: 1px solid var(--color-fd-border);
|
|
67
|
+
border-radius: 18px;
|
|
68
|
+
padding: 32px;
|
|
69
|
+
background: color-mix(in oklab, var(--color-fd-card) 92%, transparent);
|
|
70
|
+
backdrop-filter: blur(8px);
|
|
71
|
+
box-shadow:
|
|
72
|
+
0 1px 2px rgba(0, 0, 0, 0.04),
|
|
73
|
+
0 12px 32px -12px rgba(0, 0, 0, 0.18);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.error-card {
|
|
77
|
+
text-align: center;
|
|
78
|
+
max-width: 440px;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/* ── Brand ─────────────────────────────────────────────────────────────── */
|
|
82
|
+
|
|
83
|
+
.auth-brand {
|
|
84
|
+
display: flex;
|
|
85
|
+
align-items: center;
|
|
86
|
+
gap: 9px;
|
|
87
|
+
font-weight: 700;
|
|
88
|
+
font-size: 15px;
|
|
89
|
+
letter-spacing: -0.01em;
|
|
90
|
+
color: var(--color-fd-foreground);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.auth-brand img {
|
|
94
|
+
height: 24px;
|
|
95
|
+
width: auto;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.auth-brand .auth-logo-dark {
|
|
99
|
+
display: none;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.dark .auth-brand .auth-logo-light {
|
|
103
|
+
display: none;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.dark .auth-brand .auth-logo-dark {
|
|
107
|
+
display: inline;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.auth-dot {
|
|
111
|
+
width: 22px;
|
|
112
|
+
height: 22px;
|
|
113
|
+
border-radius: 7px;
|
|
114
|
+
display: inline-grid;
|
|
115
|
+
place-items: center;
|
|
116
|
+
color: #fff;
|
|
117
|
+
background: var(--color-fd-primary);
|
|
118
|
+
box-shadow: 0 2px 8px -2px color-mix(in oklab, var(--color-fd-primary) 60%, transparent);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/* ── Copy ──────────────────────────────────────────────────────────────── */
|
|
122
|
+
|
|
123
|
+
.auth-title {
|
|
124
|
+
font-size: 24px;
|
|
125
|
+
line-height: 1.2;
|
|
126
|
+
font-weight: 700;
|
|
127
|
+
letter-spacing: -0.02em;
|
|
128
|
+
margin: 22px 0 6px;
|
|
129
|
+
color: var(--color-fd-foreground);
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.auth-sub {
|
|
133
|
+
color: var(--color-fd-muted-foreground);
|
|
134
|
+
font-size: 14px;
|
|
135
|
+
line-height: 1.55;
|
|
136
|
+
margin: 0 0 22px;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.auth-sub b {
|
|
140
|
+
color: var(--color-fd-foreground);
|
|
141
|
+
font-weight: 600;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/* ── Identity chip (secret step: "signing in as …") ────────────────────── */
|
|
145
|
+
|
|
146
|
+
.auth-identity {
|
|
147
|
+
display: flex;
|
|
148
|
+
align-items: center;
|
|
149
|
+
gap: 9px;
|
|
150
|
+
margin: 0 0 18px;
|
|
151
|
+
padding: 9px 12px;
|
|
152
|
+
border-radius: 11px;
|
|
153
|
+
border: 1px solid var(--color-fd-border);
|
|
154
|
+
background: color-mix(in oklab, var(--color-fd-foreground) 3%, var(--color-fd-card));
|
|
155
|
+
font-size: 13.5px;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
.auth-identity svg {
|
|
159
|
+
flex: none;
|
|
160
|
+
width: 16px;
|
|
161
|
+
height: 16px;
|
|
162
|
+
color: var(--color-fd-muted-foreground);
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.auth-identity-email {
|
|
166
|
+
flex: 1;
|
|
167
|
+
min-width: 0;
|
|
168
|
+
overflow: hidden;
|
|
169
|
+
text-overflow: ellipsis;
|
|
170
|
+
white-space: nowrap;
|
|
171
|
+
color: var(--color-fd-foreground);
|
|
172
|
+
font-weight: 500;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.auth-change {
|
|
176
|
+
flex: none;
|
|
177
|
+
font-size: 12.5px;
|
|
178
|
+
font-weight: 600;
|
|
179
|
+
text-decoration: none;
|
|
180
|
+
color: var(--color-fd-primary);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.auth-change:hover {
|
|
184
|
+
text-decoration: underline;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/* ── Inline error banner ───────────────────────────────────────────────── */
|
|
188
|
+
|
|
189
|
+
.auth-error {
|
|
190
|
+
display: flex;
|
|
191
|
+
align-items: flex-start;
|
|
192
|
+
gap: 9px;
|
|
193
|
+
margin: 0 0 20px;
|
|
194
|
+
padding: 11px 13px;
|
|
195
|
+
border-radius: 11px;
|
|
196
|
+
font-size: 13px;
|
|
197
|
+
line-height: 1.5;
|
|
198
|
+
color: #b42318;
|
|
199
|
+
background: color-mix(in oklab, #e5484d 12%, var(--color-fd-card));
|
|
200
|
+
border: 1px solid color-mix(in oklab, #e5484d 30%, transparent);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
.dark .auth-error {
|
|
204
|
+
color: #ff9a94;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
.auth-error svg {
|
|
208
|
+
flex: none;
|
|
209
|
+
width: 16px;
|
|
210
|
+
height: 16px;
|
|
211
|
+
margin-top: 1px;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/* ── Form ──────────────────────────────────────────────────────────────── */
|
|
215
|
+
|
|
216
|
+
.auth-form {
|
|
217
|
+
display: flex;
|
|
218
|
+
flex-direction: column;
|
|
219
|
+
gap: 7px;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
.auth-label {
|
|
223
|
+
font-size: 12.5px;
|
|
224
|
+
font-weight: 600;
|
|
225
|
+
color: var(--color-fd-foreground);
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.auth-field {
|
|
229
|
+
position: relative;
|
|
230
|
+
display: flex;
|
|
231
|
+
align-items: center;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
.auth-field svg {
|
|
235
|
+
position: absolute;
|
|
236
|
+
left: 12px;
|
|
237
|
+
width: 16px;
|
|
238
|
+
height: 16px;
|
|
239
|
+
color: var(--color-fd-muted-foreground);
|
|
240
|
+
pointer-events: none;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
.auth-input {
|
|
244
|
+
width: 100%;
|
|
245
|
+
border: 1px solid var(--color-fd-border);
|
|
246
|
+
border-radius: 10px;
|
|
247
|
+
padding: 11px 12px 11px 38px;
|
|
248
|
+
font-size: 14px;
|
|
249
|
+
color: var(--color-fd-foreground);
|
|
250
|
+
background: var(--color-fd-background);
|
|
251
|
+
transition:
|
|
252
|
+
border-color 0.15s ease,
|
|
253
|
+
box-shadow 0.15s ease;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
.auth-input::placeholder {
|
|
257
|
+
color: var(--color-fd-muted-foreground);
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
.auth-submit {
|
|
261
|
+
margin-top: 10px;
|
|
262
|
+
display: inline-flex;
|
|
263
|
+
align-items: center;
|
|
264
|
+
justify-content: center;
|
|
265
|
+
gap: 8px;
|
|
266
|
+
background: var(--color-fd-primary);
|
|
267
|
+
color: var(--color-fd-primary-foreground, #fff);
|
|
268
|
+
border: none;
|
|
269
|
+
border-radius: 10px;
|
|
270
|
+
padding: 11px 14px;
|
|
271
|
+
font-size: 14px;
|
|
272
|
+
font-weight: 600;
|
|
273
|
+
cursor: pointer;
|
|
274
|
+
transition:
|
|
275
|
+
filter 0.15s ease,
|
|
276
|
+
transform 0.05s ease;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
.auth-submit:hover {
|
|
280
|
+
filter: brightness(1.06);
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
.auth-submit:active {
|
|
284
|
+
transform: translateY(0.5px);
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/* ── Divider ───────────────────────────────────────────────────────────── */
|
|
288
|
+
|
|
289
|
+
.auth-divider {
|
|
290
|
+
display: flex;
|
|
291
|
+
align-items: center;
|
|
292
|
+
gap: 12px;
|
|
293
|
+
margin: 18px 0;
|
|
294
|
+
color: var(--color-fd-muted-foreground);
|
|
295
|
+
font-size: 12px;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
.auth-divider::before,
|
|
299
|
+
.auth-divider::after {
|
|
300
|
+
content: '';
|
|
301
|
+
flex: 1;
|
|
302
|
+
height: 1px;
|
|
303
|
+
background: var(--color-fd-border);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
/* ── Google ────────────────────────────────────────────────────────────── */
|
|
307
|
+
|
|
308
|
+
.auth-google {
|
|
309
|
+
display: flex;
|
|
310
|
+
align-items: center;
|
|
311
|
+
justify-content: center;
|
|
312
|
+
gap: 10px;
|
|
313
|
+
width: 100%;
|
|
314
|
+
border: 1px solid var(--color-fd-border);
|
|
315
|
+
border-radius: 10px;
|
|
316
|
+
padding: 11px 14px;
|
|
317
|
+
font-size: 14px;
|
|
318
|
+
font-weight: 600;
|
|
319
|
+
text-decoration: none;
|
|
320
|
+
color: var(--color-fd-foreground);
|
|
321
|
+
background: var(--color-fd-card);
|
|
322
|
+
transition:
|
|
323
|
+
border-color 0.15s ease,
|
|
324
|
+
background 0.15s ease;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
.auth-google:hover {
|
|
328
|
+
border-color: color-mix(in oklab, var(--color-fd-foreground) 24%, var(--color-fd-border));
|
|
329
|
+
background: color-mix(in oklab, var(--color-fd-foreground) 3%, var(--color-fd-card));
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
.auth-google svg {
|
|
333
|
+
width: 18px;
|
|
334
|
+
height: 18px;
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/* ── Footer note ───────────────────────────────────────────────────────── */
|
|
338
|
+
|
|
339
|
+
.auth-foot {
|
|
340
|
+
display: flex;
|
|
341
|
+
align-items: center;
|
|
342
|
+
justify-content: center;
|
|
343
|
+
gap: 6px;
|
|
344
|
+
margin: 22px 0 0;
|
|
345
|
+
font-size: 12px;
|
|
346
|
+
color: var(--color-fd-muted-foreground);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
.auth-foot svg {
|
|
350
|
+
width: 13px;
|
|
351
|
+
height: 13px;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/* ── Error screen ──────────────────────────────────────────────────────── */
|
|
355
|
+
|
|
356
|
+
.error-glyph {
|
|
357
|
+
display: inline-grid;
|
|
358
|
+
place-items: center;
|
|
359
|
+
width: 60px;
|
|
360
|
+
height: 60px;
|
|
361
|
+
margin: 0 auto 4px;
|
|
362
|
+
border-radius: 16px;
|
|
363
|
+
color: var(--color-fd-primary);
|
|
364
|
+
background: color-mix(in oklab, var(--color-fd-primary) 12%, var(--color-fd-card));
|
|
365
|
+
border: 1px solid color-mix(in oklab, var(--color-fd-primary) 26%, transparent);
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
.error-glyph svg {
|
|
369
|
+
width: 28px;
|
|
370
|
+
height: 28px;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
.error-glyph[data-kind='forbidden'] {
|
|
374
|
+
color: #d97706;
|
|
375
|
+
background: color-mix(in oklab, #d97706 12%, var(--color-fd-card));
|
|
376
|
+
border-color: color-mix(in oklab, #d97706 26%, transparent);
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
.error-glyph[data-kind='server'],
|
|
380
|
+
.error-glyph[data-kind='offline'] {
|
|
381
|
+
color: #dc2626;
|
|
382
|
+
background: color-mix(in oklab, #dc2626 11%, var(--color-fd-card));
|
|
383
|
+
border-color: color-mix(in oklab, #dc2626 26%, transparent);
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
.error-code {
|
|
387
|
+
margin: 16px 0 0;
|
|
388
|
+
font-size: 13px;
|
|
389
|
+
font-weight: 700;
|
|
390
|
+
letter-spacing: 0.12em;
|
|
391
|
+
text-transform: uppercase;
|
|
392
|
+
color: var(--color-fd-muted-foreground);
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
.error-title {
|
|
396
|
+
font-size: 24px;
|
|
397
|
+
line-height: 1.2;
|
|
398
|
+
font-weight: 700;
|
|
399
|
+
letter-spacing: -0.02em;
|
|
400
|
+
margin: 8px 0 0;
|
|
401
|
+
color: var(--color-fd-foreground);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
.error-desc {
|
|
405
|
+
margin: 10px auto 0;
|
|
406
|
+
max-width: 34ch;
|
|
407
|
+
font-size: 14.5px;
|
|
408
|
+
line-height: 1.6;
|
|
409
|
+
color: var(--color-fd-muted-foreground);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
.error-actions {
|
|
413
|
+
display: flex;
|
|
414
|
+
flex-wrap: wrap;
|
|
415
|
+
gap: 10px;
|
|
416
|
+
justify-content: center;
|
|
417
|
+
margin-top: 24px;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
.error-btn {
|
|
421
|
+
display: inline-flex;
|
|
422
|
+
align-items: center;
|
|
423
|
+
gap: 7px;
|
|
424
|
+
white-space: nowrap;
|
|
425
|
+
border-radius: 10px;
|
|
426
|
+
padding: 10px 16px;
|
|
427
|
+
font-size: 14px;
|
|
428
|
+
font-weight: 600;
|
|
429
|
+
text-decoration: none;
|
|
430
|
+
cursor: pointer;
|
|
431
|
+
border: 1px solid transparent;
|
|
432
|
+
transition:
|
|
433
|
+
filter 0.15s ease,
|
|
434
|
+
border-color 0.15s ease,
|
|
435
|
+
background 0.15s ease;
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
.error-btn svg {
|
|
439
|
+
width: 16px;
|
|
440
|
+
height: 16px;
|
|
441
|
+
flex: none;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
.error-btn-primary {
|
|
445
|
+
background: var(--color-fd-primary);
|
|
446
|
+
color: var(--color-fd-primary-foreground, #fff);
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
.error-btn-primary:hover {
|
|
450
|
+
filter: brightness(1.06);
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
.error-btn-ghost {
|
|
454
|
+
background: transparent;
|
|
455
|
+
color: var(--color-fd-foreground);
|
|
456
|
+
border-color: var(--color-fd-border);
|
|
457
|
+
}
|
|
458
|
+
|
|
459
|
+
.error-btn-ghost:hover {
|
|
460
|
+
border-color: color-mix(in oklab, var(--color-fd-foreground) 24%, var(--color-fd-border));
|
|
461
|
+
background: color-mix(in oklab, var(--color-fd-foreground) 3%, var(--color-fd-card));
|
|
462
|
+
}
|
package/styles/docs.css
ADDED
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* @blaaiz/docs-core — base docs styling.
|
|
3
|
+
*
|
|
4
|
+
* Import after the fumadocs stylesheets:
|
|
5
|
+
* @import '@blaaiz/docs-core/styles/docs.css';
|
|
6
|
+
*
|
|
7
|
+
* Brand colours come from the site's docs.config (see buildThemeCss); nothing
|
|
8
|
+
* here hardcodes a palette.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
/* Widen the layout so the sidebar sits flush-left; taller, breathable nav. */
|
|
12
|
+
:root {
|
|
13
|
+
--fd-layout-width: 1920px;
|
|
14
|
+
--fd-nav-height: 4.25rem;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/* House preference: no visible focus ring. Tab order and :focus behaviour are
|
|
18
|
+
untouched — only the outline and the Tailwind ring (a box-shadow) are hidden.
|
|
19
|
+
Real box-shadows survive because only the ring variables are zeroed. */
|
|
20
|
+
:focus,
|
|
21
|
+
:focus-visible {
|
|
22
|
+
outline: none !important;
|
|
23
|
+
--tw-ring-shadow: 0 0 #0000 !important;
|
|
24
|
+
--tw-ring-offset-shadow: 0 0 #0000 !important;
|
|
25
|
+
--tw-ring-color: transparent !important;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* More inward breathing room for the main content. */
|
|
29
|
+
@media (min-width: 768px) {
|
|
30
|
+
#nd-page {
|
|
31
|
+
padding-inline: 4rem;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/* Center the page column on ultra-wide screens. Fumadocs' notebook layout caps
|
|
36
|
+
a page's children (900px, or 1285px on `full` pages such as the API
|
|
37
|
+
reference — see its page container slot) but leaves them left-aligned in the
|
|
38
|
+
grid area, so a wide viewport piles the slack on the right. Cap the article
|
|
39
|
+
at the same width plus our 4rem padding per side and center it: children
|
|
40
|
+
fill it edge to edge and everything stays aligned, including the fixed API
|
|
41
|
+
rail, which follows its in-flow spacer. Re-check the two width tokens on
|
|
42
|
+
fumadocs-ui upgrades. */
|
|
43
|
+
#nd-page {
|
|
44
|
+
width: 100%;
|
|
45
|
+
max-width: calc(900px + 8rem);
|
|
46
|
+
justify-self: center;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/* Full-width pages — fumadocs marks them with the `*:max-w-[1285px]` class. */
|
|
50
|
+
#nd-page[class*='1285'] {
|
|
51
|
+
max-width: calc(1285px + 8rem);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/* Headings stay bright while body text stays subtle. */
|
|
55
|
+
#nd-page :is(h1, h2, h3, h4) {
|
|
56
|
+
color: #18181b;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
.dark #nd-page :is(h1, h2, h3, h4) {
|
|
60
|
+
color: #f4f4f6;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/* Wider, more prominent search in the top bar. */
|
|
64
|
+
button:has(kbd) {
|
|
65
|
+
width: 100%;
|
|
66
|
+
max-width: min(340px, 40vw);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/* Taller top bar. */
|
|
70
|
+
#nd-subnav > div:first-child {
|
|
71
|
+
height: 4.5rem;
|
|
72
|
+
padding-inline: 1.5rem;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/* Prev/next footer, clearly separated from the page. */
|
|
76
|
+
#nd-page .grid:has(> a[class*='rounded-lg']) {
|
|
77
|
+
margin-top: 4rem;
|
|
78
|
+
padding-top: 2rem;
|
|
79
|
+
border-top: 1px solid var(--color-fd-border);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
#nd-page a[class*='rounded-lg'][class*='p-4'] {
|
|
83
|
+
padding: 1rem 1.25rem;
|
|
84
|
+
border-radius: 0.75rem;
|
|
85
|
+
transition:
|
|
86
|
+
border-color 0.15s ease,
|
|
87
|
+
background 0.15s ease;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
#nd-page a[class*='rounded-lg'][class*='p-4']:hover {
|
|
91
|
+
border-color: var(--color-fd-primary);
|
|
92
|
+
background: color-mix(in oklab, var(--color-fd-primary) 7%, transparent);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/* Breathing room between the doc column and the code rail. */
|
|
96
|
+
#nd-page div[class*='gap-x-6'] {
|
|
97
|
+
column-gap: 3rem;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/* Code blocks — shared chrome. */
|
|
101
|
+
#nd-page figure.shiki {
|
|
102
|
+
position: relative;
|
|
103
|
+
border-radius: 0.85rem;
|
|
104
|
+
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.04);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.dark #nd-page figure.shiki {
|
|
108
|
+
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
#nd-page figure.shiki pre {
|
|
112
|
+
line-height: 2;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
#nd-page figure.shiki [role='region'] {
|
|
116
|
+
padding-inline: 0.25rem;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/* Guide code blocks: the window-dots header strip. The API rail panels opt out
|
|
120
|
+
in api-reference.css — rail location is the reliable variant marker. */
|
|
121
|
+
#nd-page figure.shiki {
|
|
122
|
+
padding-top: 2.75rem;
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
#nd-page figure.shiki::before {
|
|
126
|
+
content: '';
|
|
127
|
+
position: absolute;
|
|
128
|
+
inset: 0 0 auto 0;
|
|
129
|
+
height: 2.75rem;
|
|
130
|
+
background: color-mix(in oklab, var(--color-fd-card) 88%, black);
|
|
131
|
+
border-bottom: 1px solid var(--color-fd-border);
|
|
132
|
+
border-top-left-radius: inherit;
|
|
133
|
+
border-top-right-radius: inherit;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
#nd-page figure.shiki::after {
|
|
137
|
+
content: '';
|
|
138
|
+
position: absolute;
|
|
139
|
+
top: 1.05rem;
|
|
140
|
+
left: 1rem;
|
|
141
|
+
width: 11px;
|
|
142
|
+
height: 11px;
|
|
143
|
+
border-radius: 50%;
|
|
144
|
+
background: #ff5f57;
|
|
145
|
+
box-shadow:
|
|
146
|
+
18px 0 0 #febc2e,
|
|
147
|
+
36px 0 0 #28c840;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/* Copy button sits in the header strip, vertically centered. */
|
|
151
|
+
#nd-page figure.shiki > button {
|
|
152
|
+
top: 1.375rem;
|
|
153
|
+
right: 0.7rem;
|
|
154
|
+
transform: translateY(-50%);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
/* Mintlify-style callouts: the whole box is tinted with the type colour. */
|
|
158
|
+
.cl {
|
|
159
|
+
display: flex;
|
|
160
|
+
gap: 12px;
|
|
161
|
+
padding: 14px 16px;
|
|
162
|
+
border: 1px solid;
|
|
163
|
+
border-radius: 12px;
|
|
164
|
+
margin: 20px 0;
|
|
165
|
+
font-size: 15px;
|
|
166
|
+
line-height: 1.6;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.cl-icon {
|
|
170
|
+
flex-shrink: 0;
|
|
171
|
+
margin-top: 1px;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.cl-body {
|
|
175
|
+
min-width: 0;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.cl-body > :first-child {
|
|
179
|
+
margin-top: 0;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
.cl-body > :last-child {
|
|
183
|
+
margin-bottom: 0;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
.cl-note,
|
|
187
|
+
.cl-info {
|
|
188
|
+
background: rgba(76, 99, 245, 0.08);
|
|
189
|
+
border-color: rgba(76, 99, 245, 0.35);
|
|
190
|
+
color: #3547c4;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.cl-tip {
|
|
194
|
+
background: rgba(22, 163, 74, 0.09);
|
|
195
|
+
border-color: rgba(22, 163, 74, 0.35);
|
|
196
|
+
color: #15803d;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
.cl-warning,
|
|
200
|
+
.cl-danger {
|
|
201
|
+
background: rgba(217, 119, 6, 0.1);
|
|
202
|
+
border-color: rgba(217, 119, 6, 0.38);
|
|
203
|
+
color: #b45309;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
.dark .cl-note,
|
|
207
|
+
.dark .cl-info {
|
|
208
|
+
background: rgba(124, 140, 255, 0.09);
|
|
209
|
+
border-color: rgba(124, 140, 255, 0.3);
|
|
210
|
+
color: #b7c0ff;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.dark .cl-tip {
|
|
214
|
+
background: rgba(34, 197, 94, 0.09);
|
|
215
|
+
border-color: rgba(34, 197, 94, 0.28);
|
|
216
|
+
color: #6ee7a0;
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
.dark .cl-warning,
|
|
220
|
+
.dark .cl-danger {
|
|
221
|
+
background: rgba(245, 158, 11, 0.1);
|
|
222
|
+
border-color: rgba(245, 158, 11, 0.3);
|
|
223
|
+
color: #f2c261;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/* No macOS rubber-band bounce; grayscale antialiasing (as Mintlify). */
|
|
227
|
+
html {
|
|
228
|
+
overscroll-behavior: none;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
body {
|
|
232
|
+
overscroll-behavior: none;
|
|
233
|
+
-webkit-font-smoothing: antialiased;
|
|
234
|
+
-moz-osx-font-smoothing: grayscale;
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/* Title row with the Copy-page action pinned right (the button styles itself). */
|
|
238
|
+
.page-head {
|
|
239
|
+
display: flex;
|
|
240
|
+
align-items: flex-start;
|
|
241
|
+
justify-content: space-between;
|
|
242
|
+
gap: 1.5rem;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
.page-head > h1 {
|
|
246
|
+
margin: 0;
|
|
247
|
+
}
|