@farming-labs/theme 0.0.2-beta.8 → 0.0.2

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.
@@ -0,0 +1,575 @@
1
+ /* @farming-labs/theme — darkbold theme CSS
2
+ * Pure monochrome design, clean typography, Geist font, no accent colors.
3
+ */
4
+ @import "./presets/neutral.css";
5
+
6
+ /* ─── DarkBold color overrides ──────────────────────────────────── */
7
+
8
+ :root {
9
+ --color-fd-primary: #000;
10
+ --color-fd-primary-foreground: #fff;
11
+ --color-fd-ring: #000;
12
+
13
+ --color-fd-background: #fff;
14
+ --color-fd-foreground: #111;
15
+ --color-fd-card: #fff;
16
+ --color-fd-card-foreground: #111;
17
+ --color-fd-popover: #fff;
18
+ --color-fd-popover-foreground: #111;
19
+ --color-fd-secondary: #fafafa;
20
+ --color-fd-secondary-foreground: #111;
21
+ --color-fd-muted: #fafafa;
22
+ --color-fd-muted-foreground: #666;
23
+ --color-fd-accent: #f5f5f5;
24
+ --color-fd-accent-foreground: #111;
25
+ --color-fd-border: #eaeaea;
26
+ }
27
+
28
+ .dark {
29
+ --color-fd-primary: #fff;
30
+ --color-fd-primary-foreground: #000;
31
+ --color-fd-ring: #fff;
32
+
33
+ --color-fd-background: #0a0a0a;
34
+ --color-fd-foreground: #ededed;
35
+ --color-fd-card: #111;
36
+ --color-fd-card-foreground: #ededed;
37
+ --color-fd-popover: #111;
38
+ --color-fd-popover-foreground: #ededed;
39
+ --color-fd-secondary: #1a1a1a;
40
+ --color-fd-secondary-foreground: #ededed;
41
+ --color-fd-muted: #1a1a1a;
42
+ --color-fd-muted-foreground: #888;
43
+ --color-fd-accent: #1a1a1a;
44
+ --color-fd-accent-foreground: #ededed;
45
+ --color-fd-border: #333;
46
+ }
47
+
48
+ /* ─── Typography — Geist-inspired, DarkBold exact values ─────────── */
49
+
50
+ h1 {
51
+ letter-spacing: -0.06em;
52
+ font-weight: 600;
53
+ line-height: 1.2;
54
+ }
55
+
56
+ h2 {
57
+ letter-spacing: -0.04em;
58
+ font-weight: 600;
59
+ line-height: 1.25;
60
+ }
61
+
62
+ h3 {
63
+ letter-spacing: -0.02em;
64
+ font-weight: 600;
65
+ line-height: 1.3;
66
+ }
67
+
68
+ /* Body / paragraph text — DarkBold uses 16px, 1.6 line-height */
69
+ .fd-docs-content p {
70
+ font-size: 1rem;
71
+ line-height: 1.6;
72
+ }
73
+
74
+ /* ═══════════════════════════════════════════════════════════════════
75
+ * SIDEBAR — DarkBold: borderless, no icons, plain text only
76
+ * ═══════════════════════════════════════════════════════════════════ */
77
+
78
+ /* Remove ALL sidebar borders */
79
+ aside,
80
+ #nd-sidebar,
81
+ aside#nd-sidebar,
82
+ #nd-docs-layout aside {
83
+ border: none;
84
+ border-right: none;
85
+ border-left: none;
86
+ border-color: transparent;
87
+ box-shadow: none;
88
+ background: var(--color-fd-background);
89
+ }
90
+
91
+ /* ── Hide sidebar link icons — DarkBold sidebar is text-only ──────── */
92
+ aside a > svg:first-child,
93
+ aside a > img:first-child {
94
+ display: none;
95
+ }
96
+
97
+ /* ── Hide TOC heading icon ──────────────────────────────────────── */
98
+ #nd-toc h3 > svg,
99
+ #nd-toc h3 > img {
100
+ display: none;
101
+ }
102
+
103
+ /* ── Sidebar links — match DarkBold: 14px, 400 weight, minimal pad ─ */
104
+ aside a[data-active] {
105
+ font-size: 0.875rem;
106
+ line-height: 1.5;
107
+ font-weight: 400;
108
+ padding: 6px 8px;
109
+ border-radius: 6px;
110
+ color: var(--color-fd-muted-foreground);
111
+ transition: color 150ms;
112
+ }
113
+
114
+ aside a[data-active]:hover {
115
+ color: var(--color-fd-foreground);
116
+ background: transparent;
117
+ }
118
+
119
+ /* Active sidebar item — DarkBold uses foreground color, 500 weight */
120
+ aside a[data-active="true"] {
121
+ color: var(--color-fd-foreground);
122
+ font-weight: 500;
123
+ background: transparent;
124
+ background-color: transparent;
125
+ }
126
+
127
+ aside a[data-active="true"]::before {
128
+ background-color: transparent;
129
+ width: 0;
130
+ }
131
+
132
+ /* Category/folder headings in sidebar */
133
+ aside button.text-fd-muted-foreground {
134
+ font-weight: 500;
135
+ text-transform: none;
136
+ letter-spacing: normal;
137
+ font-size: 0.875rem;
138
+ color: var(--color-fd-foreground);
139
+ }
140
+
141
+ /* Search button in sidebar */
142
+ aside button[class*="bg-fd-secondary"] {
143
+ background: var(--color-fd-accent);
144
+ border: 1px solid var(--color-fd-border);
145
+ border-radius: 6px;
146
+ font-size: 0.875rem;
147
+ }
148
+
149
+ /* Sidebar footer border removal */
150
+ aside .border-t,
151
+ aside [class*="border-t"] {
152
+ border-top-color: transparent;
153
+ }
154
+
155
+ /* ═══════════════════════════════════════════════════════════════════
156
+ * HEADER — DarkBold: no bottom border, transparent background
157
+ * ═══════════════════════════════════════════════════════════════════ */
158
+
159
+ header,
160
+ [role="banner"],
161
+ #nd-docs-layout > header,
162
+ nav[class*="header"] {
163
+ border-bottom: none;
164
+ border-color: transparent;
165
+ }
166
+
167
+ /* ═══════════════════════════════════════════════════════════════════
168
+ * CONTENT — links, code, tables, etc.
169
+ * ═══════════════════════════════════════════════════════════════════ */
170
+
171
+ /* Links in prose — DarkBold uses underline, dark text */
172
+ .fd-docs-content a:not(.fd-page-nav-card):not([class]) {
173
+ text-decoration: underline;
174
+ text-underline-offset: 3px;
175
+ text-decoration-color: var(--color-fd-border);
176
+ text-decoration-thickness: 1px;
177
+ font-weight: 500;
178
+ color: var(--color-fd-foreground);
179
+ transition: text-decoration-color 150ms;
180
+ }
181
+
182
+ .fd-docs-content a:not(.fd-page-nav-card):not([class]):hover {
183
+ text-decoration-color: var(--color-fd-foreground);
184
+ }
185
+
186
+ /* Inline code */
187
+ .fd-docs-content :not(pre) > code {
188
+ padding: 1px 4px;
189
+ border: 1px solid var(--color-fd-border);
190
+ font-size: 0.875rem;
191
+ border-radius: 4px;
192
+ background: var(--color-fd-muted);
193
+ color: var(--color-fd-foreground);
194
+ font-weight: 400;
195
+ }
196
+
197
+ /* Tables */
198
+ .fd-docs-content table {
199
+ border-collapse: separate;
200
+ border-spacing: 0;
201
+ background: var(--color-fd-card);
202
+ border-radius: 8px;
203
+ border: 1px solid var(--color-fd-border);
204
+ overflow: hidden;
205
+ width: 100%;
206
+ }
207
+
208
+ .fd-docs-content th {
209
+ background: var(--color-fd-muted);
210
+ font-weight: 500;
211
+ font-size: 0.8125rem;
212
+ color: var(--color-fd-muted-foreground);
213
+ text-transform: none;
214
+ letter-spacing: normal;
215
+ }
216
+
217
+ .fd-docs-content th,
218
+ .fd-docs-content td {
219
+ padding: 0.75rem 1rem;
220
+ border-bottom: 1px solid var(--color-fd-border);
221
+ font-size: 0.875rem;
222
+ }
223
+
224
+ .fd-docs-content tr:last-child td {
225
+ border-bottom: none;
226
+ }
227
+
228
+ /* Blockquotes */
229
+ .fd-docs-content blockquote {
230
+ border-left: 3px solid var(--color-fd-border);
231
+ padding-left: 1rem;
232
+ color: var(--color-fd-muted-foreground);
233
+ font-style: normal;
234
+ margin: 1rem 0;
235
+ }
236
+
237
+ /* Horizontal rule */
238
+ .fd-docs-content hr {
239
+ border-color: var(--color-fd-border);
240
+ }
241
+
242
+ /* ═══════════════════════════════════════════════════════════════════
243
+ * CARDS
244
+ * ═══════════════════════════════════════════════════════════════════ */
245
+
246
+ .fd-card {
247
+ display: block;
248
+ border-radius: 8px;
249
+ border: 1px solid var(--color-fd-border);
250
+ background: var(--color-fd-card);
251
+ padding: 1.25rem;
252
+ font-size: 0.875rem;
253
+ color: var(--color-fd-card-foreground);
254
+ box-shadow: none;
255
+ transition:
256
+ background-color 150ms,
257
+ border-color 150ms;
258
+ }
259
+
260
+ .fd-card:hover {
261
+ border-color: #999;
262
+ box-shadow: none;
263
+ }
264
+
265
+ .dark .fd-card:hover {
266
+ border-color: #555;
267
+ }
268
+
269
+ .fd-card-icon {
270
+ margin-bottom: 0.5rem;
271
+ width: fit-content;
272
+ border-radius: 6px;
273
+ border: 1px solid var(--color-fd-border);
274
+ padding: 0.5rem;
275
+ color: var(--color-fd-muted-foreground);
276
+ background: var(--color-fd-secondary);
277
+ }
278
+
279
+ .fd-card-title {
280
+ font-weight: 500;
281
+ font-size: 0.9375rem;
282
+ }
283
+
284
+ .fd-card-description {
285
+ color: var(--color-fd-muted-foreground);
286
+ margin-top: 0.25rem;
287
+ font-size: 0.8125rem;
288
+ line-height: 1.5;
289
+ }
290
+
291
+ .fd-cards {
292
+ display: grid;
293
+ grid-template-columns: 1fr;
294
+ gap: 0.75rem;
295
+ }
296
+
297
+ @media (min-width: 640px) {
298
+ .fd-cards {
299
+ grid-template-columns: repeat(2, 1fr);
300
+ }
301
+ }
302
+
303
+ .fd-page-nav-card {
304
+ border-radius: 8px;
305
+ }
306
+
307
+ /* ═══════════════════════════════════════════════════════════════════
308
+ * CODE BLOCKS
309
+ * ═══════════════════════════════════════════════════════════════════ */
310
+
311
+ figure.shiki {
312
+ border-radius: 8px;
313
+ overflow: hidden;
314
+ border: 1px solid var(--color-fd-border);
315
+ }
316
+
317
+ /* ═══════════════════════════════════════════════════════════════════
318
+ * TABS — DarkBold: bottom border indicator, no background
319
+ * ═══════════════════════════════════════════════════════════════════ */
320
+
321
+ [role="tablist"] {
322
+ border-bottom: 1px solid var(--color-fd-border);
323
+ }
324
+
325
+ [role="tab"] {
326
+ font-size: 0.875rem;
327
+ font-weight: 400;
328
+ padding: 0.5rem 0.75rem;
329
+ border-radius: 0;
330
+ color: var(--color-fd-muted-foreground);
331
+ border-bottom: 2px solid transparent;
332
+ transition:
333
+ color 150ms,
334
+ border-color 150ms;
335
+ }
336
+
337
+ [role="tab"][aria-selected="true"],
338
+ [role="tab"][data-state="active"] {
339
+ color: var(--color-fd-foreground);
340
+ border-bottom-color: var(--color-fd-foreground);
341
+ font-weight: 500;
342
+ }
343
+
344
+ /* ═══════════════════════════════════════════════════════════════════
345
+ * CALLOUT, ACCORDION
346
+ * ═══════════════════════════════════════════════════════════════════ */
347
+
348
+ [style*="--callout-color"] {
349
+ border-radius: 8px;
350
+ border-width: 1px;
351
+ }
352
+
353
+ details {
354
+ border: 1px solid var(--color-fd-border);
355
+ border-radius: 8px;
356
+ padding: 0;
357
+ margin: 0.75rem 0;
358
+ overflow: hidden;
359
+ }
360
+
361
+ details summary {
362
+ padding: 0.75rem 1rem;
363
+ font-weight: 500;
364
+ font-size: 0.9375rem;
365
+ cursor: pointer;
366
+ color: var(--color-fd-foreground);
367
+ background: var(--color-fd-secondary);
368
+ transition: background 150ms;
369
+ }
370
+
371
+ details summary:hover {
372
+ background: var(--color-fd-accent);
373
+ }
374
+
375
+ details[open] summary {
376
+ border-bottom: 1px solid var(--color-fd-border);
377
+ }
378
+
379
+ details > :not(summary) {
380
+ padding: 0.75rem 1rem;
381
+ }
382
+
383
+ /* ═══════════════════════════════════════════════════════════════════
384
+ * TOC — style varies by config: "default" or "directional"
385
+ *
386
+ * "default" → text color only, hide .toc-thumb
387
+ * "directional" → animated .toc-thumb bar (clerk style)
388
+ *
389
+ * We only override text colors here. The active indicator is
390
+ * handled by fumadocs-ui based on the style prop.
391
+ * ═══════════════════════════════════════════════════════════════════ */
392
+
393
+ #nd-toc a[data-active="true"] {
394
+ color: var(--color-fd-foreground);
395
+ font-weight: 500;
396
+ }
397
+
398
+ #nd-toc a[data-active="false"] {
399
+ color: var(--color-fd-muted-foreground);
400
+ }
401
+
402
+ #nd-toc a {
403
+ font-size: 0.875rem;
404
+ line-height: 1.3;
405
+ }
406
+
407
+ #nd-toc h3 {
408
+ font-size: 0.875rem;
409
+ font-weight: 500;
410
+ }
411
+
412
+ /* ═══════════════════════════════════════════════════════════════════
413
+ * COMMAND PALETTE
414
+ * ═══════════════════════════════════════════════════════════════════ */
415
+
416
+ .omni-content {
417
+ border-radius: 12px;
418
+ border: 1px solid var(--color-fd-border);
419
+ background: var(--color-fd-popover);
420
+ box-shadow: 0 16px 70px rgba(0, 0, 0, 0.12);
421
+ }
422
+
423
+ .omni-item {
424
+ border-radius: 6px;
425
+ }
426
+
427
+ .omni-item-active {
428
+ background: var(--color-fd-accent);
429
+ }
430
+
431
+ .omni-highlight {
432
+ background: rgba(0, 0, 0, 0.06);
433
+ color: var(--color-fd-foreground);
434
+ }
435
+
436
+ .dark .omni-highlight {
437
+ background: rgba(255, 255, 255, 0.1);
438
+ }
439
+
440
+ .omni-search-input:focus {
441
+ caret-color: var(--color-fd-foreground);
442
+ }
443
+
444
+ /* ═══════════════════════════════════════════════════════════════════
445
+ * PAGE FOOTER, ACTIONS, DESCRIPTION
446
+ * ═══════════════════════════════════════════════════════════════════ */
447
+
448
+ .fd-page-footer {
449
+ border-top: 1px solid var(--color-fd-border);
450
+ }
451
+
452
+ .fd-page-description {
453
+ margin-bottom: 1rem;
454
+ font-size: 1rem;
455
+ line-height: 1.6;
456
+ color: var(--color-fd-muted-foreground);
457
+ }
458
+
459
+ .fd-page-action-btn {
460
+ border-radius: 6px;
461
+ font-size: 0.8125rem;
462
+ text-transform: uppercase;
463
+ box-shadow: 0 4px 24px hsl(0 0% 0% / 0.4);
464
+ }
465
+
466
+ .fd-page-action-menu {
467
+ border-radius: 8px;
468
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
469
+ }
470
+
471
+ .fd-page-action-menu-item {
472
+ border-radius: 4px;
473
+ }
474
+
475
+ /* ═══════════════════════════════════════════════════════════════════
476
+ * AI CHAT
477
+ * ═══════════════════════════════════════════════════════════════════ */
478
+
479
+ .fd-ai-dialog {
480
+ border-radius: 12px;
481
+ box-shadow: 0 16px 70px rgba(0, 0, 0, 0.12);
482
+ }
483
+
484
+ .fd-ai-bubble-user {
485
+ border-radius: 16px 16px 4px 16px;
486
+ }
487
+
488
+ .fd-ai-bubble-ai {
489
+ border-radius: 16px 16px 16px 4px;
490
+ }
491
+
492
+ .fd-ai-input-wrap {
493
+ border-radius: 8px;
494
+ }
495
+
496
+ .fd-ai-send-btn {
497
+ border-radius: 8px;
498
+ }
499
+
500
+ .dark .fd-ai-floating-btn {
501
+ border-radius: 999px;
502
+ background: #000;
503
+ color: #fff;
504
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
505
+ border: 1px solid rgba(255, 255, 255, 0.25);
506
+ }
507
+
508
+ .dark .fd-ai-floating-btn:hover {
509
+ background: #111;
510
+ }
511
+
512
+ :root:not(.dark) .fd-ai-floating-btn {
513
+ border-radius: 999px;
514
+ background: #000;
515
+ color: #fff;
516
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
517
+ border: 1px solid rgba(0, 0, 0, 0.15);
518
+ }
519
+
520
+ :root:not(.dark) .fd-ai-floating-btn:hover {
521
+ background: #111;
522
+ }
523
+
524
+ .fd-ai-suggestion {
525
+ border-radius: 8px;
526
+ }
527
+
528
+ .fd-ai-result {
529
+ border-radius: 8px;
530
+ }
531
+
532
+ .fd-ai-fm-input-container {
533
+ border-radius: 10px;
534
+ }
535
+
536
+ .fd-ai-fm-send-btn {
537
+ border-radius: 9999px;
538
+ }
539
+
540
+ .fd-ai-fm-suggestion {
541
+ border-radius: 9999px;
542
+ }
543
+
544
+ .fd-ai-fm-trigger-btn {
545
+ border-radius: 16px;
546
+ }
547
+
548
+ .fd-ai-fm-close-btn {
549
+ border-radius: 9999px;
550
+ }
551
+
552
+ .fd-ai-code-block {
553
+ border-radius: 8px;
554
+ }
555
+
556
+ .fd-ai-code-copy {
557
+ border-radius: 4px;
558
+ }
559
+
560
+ /* ═══════════════════════════════════════════════════════════════════
561
+ * SCROLLBAR — subtle
562
+ * ═══════════════════════════════════════════════════════════════════ */
563
+
564
+ .fd-sidebar::-webkit-scrollbar {
565
+ width: 4px;
566
+ }
567
+
568
+ .fd-sidebar::-webkit-scrollbar-thumb {
569
+ background: var(--color-fd-border);
570
+ border-radius: 4px;
571
+ }
572
+
573
+ .fd-sidebar::-webkit-scrollbar-track {
574
+ background: transparent;
575
+ }
@@ -56,10 +56,7 @@
56
56
  html {
57
57
  scroll-behavior: auto;
58
58
  scroll-padding-top: calc(
59
- var(--fd-nav-height, 56px) +
60
- var(--fd-banner-height, 0px) +
61
- var(--fd-tocnav-height, 0px) +
62
- 24px
59
+ var(--fd-nav-height, 56px) + var(--fd-banner-height, 0px) + var(--fd-tocnav-height, 0px) + 24px
63
60
  );
64
61
  }
65
62
 
@@ -113,19 +110,19 @@ code:not(pre code) {
113
110
  }
114
111
 
115
112
  /* ═══════════════════════════════════════════════════════════════════
116
- * Global sharp radius — override all rounded Tailwind utilities
113
+ * Sharp radius — scoped to docs layout only
117
114
  * ═══════════════════════════════════════════════════════════════════ */
118
115
 
119
- [class*="rounded-lg"] {
116
+ #nd-docs-layout [class*="rounded-lg"] {
120
117
  border-radius: 0.2rem !important;
121
118
  }
122
119
 
123
- [class*="rounded-md"] {
120
+ #nd-docs-layout [class*="rounded-md"] {
124
121
  border-radius: 0.1rem !important;
125
122
  }
126
123
 
127
- [class*="rounded-xl"],
128
- [class*="rounded-2xl"] {
124
+ #nd-docs-layout [class*="rounded-xl"],
125
+ #nd-docs-layout [class*="rounded-2xl"] {
129
126
  border-radius: 0.2rem !important;
130
127
  }
131
128
 
@@ -141,7 +138,8 @@ table {
141
138
  border-radius: 0 !important;
142
139
  }
143
140
 
144
- th, td {
141
+ th,
142
+ td {
145
143
  border-color: var(--color-fd-border);
146
144
  }
147
145
 
@@ -308,6 +306,7 @@ article a[class*="text-fd-muted-foreground"] {
308
306
  .fd-page-action-menu {
309
307
  border-radius: 0.2rem !important;
310
308
  box-shadow: 0 4px 24px hsl(0 0% 0% / 0.4);
309
+ padding: 0px !important;
311
310
  }
312
311
 
313
312
  .fd-page-action-menu-item {
@@ -409,7 +408,7 @@ article a[class*="text-fd-muted-foreground"] {
409
408
  border-radius: 2px;
410
409
  }
411
410
 
412
- .fd-ai-fm-thinking-dot {
411
+ .fd-ai-loader-typing-dot {
413
412
  border-radius: 2px;
414
413
  }
415
414
 
@@ -431,3 +430,20 @@ article a[class*="text-fd-muted-foreground"] {
431
430
  .fd-ai-code-copy {
432
431
  border-radius: 2px;
433
432
  }
433
+
434
+ /* ─── Omni Command Palette (darksharp theme) ────────────────────── */
435
+
436
+ .omni-content {
437
+ border-radius: 0.5rem;
438
+ border: 1px solid var(--color-fd-border);
439
+ background: var(--color-fd-popover);
440
+ box-shadow: 0 4px 24px hsl(0 0% 0% / 0.4);
441
+ }
442
+
443
+ .omni-item {
444
+ border-radius: 0.25rem;
445
+ }
446
+
447
+ .omni-highlight {
448
+ background: color-mix(in srgb, var(--color-fd-primary) 30%, transparent);
449
+ }
@@ -19,7 +19,9 @@
19
19
 
20
20
  .fd-ai-dialog {
21
21
  border-radius: 12px;
22
- box-shadow: 0 20px 60px rgba(99, 102, 241, 0.08), 0 8px 24px rgba(0, 0, 0, 0.12);
22
+ box-shadow:
23
+ 0 20px 60px rgba(99, 102, 241, 0.08),
24
+ 0 8px 24px rgba(0, 0, 0, 0.12);
23
25
  }
24
26
 
25
27
  .fd-ai-bubble-user {
@@ -86,3 +88,22 @@
86
88
  .fd-ai-code-copy {
87
89
  border-radius: 4px;
88
90
  }
91
+
92
+ /* ─── Omni Command Palette (default theme) ──────────────────────── */
93
+
94
+ .omni-content {
95
+ border-radius: 0.75rem;
96
+ border: 1px solid var(--color-fd-border, #262626);
97
+ background: var(--color-fd-popover, hsl(0 0% 5%));
98
+ box-shadow:
99
+ 0 24px 60px -12px rgba(0, 0, 0, 0.3),
100
+ 0 0 0 1px rgba(255, 255, 255, 0.04);
101
+ }
102
+
103
+ .omni-item {
104
+ border-radius: 0.375rem;
105
+ }
106
+
107
+ .omni-highlight {
108
+ background: color-mix(in srgb, var(--color-fd-primary, #6366f1) 25%, transparent);
109
+ }