@farming-labs/theme 0.0.2-beta.9 → 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,719 @@
1
+ /* @farming-labs/theme — greentree theme CSS
2
+ * Mintlify-inspired design, emerald green accent, Inter font, clean & modern.
3
+ */
4
+ @import "./presets/neutral.css";
5
+
6
+ /* ─── GreenTree color overrides ────────────────────────────────── */
7
+
8
+ :root {
9
+ --color-fd-primary: #0d9373;
10
+ --color-fd-primary-foreground: #fff;
11
+ --color-fd-ring: #0d9373;
12
+
13
+ --color-fd-background: #fff;
14
+ --color-fd-foreground: #171a18;
15
+ --color-fd-card: #fff;
16
+ --color-fd-card-foreground: #171a18;
17
+ --color-fd-popover: #fff;
18
+ --color-fd-popover-foreground: #171a18;
19
+ --color-fd-secondary: #f6f8f7;
20
+ --color-fd-secondary-foreground: #171a18;
21
+ --color-fd-muted: #f6f8f7;
22
+ --color-fd-muted-foreground: #505351;
23
+ --color-fd-accent: #f0f5f3;
24
+ --color-fd-accent-foreground: #171a18;
25
+ --color-fd-border: #dfe1e0;
26
+ }
27
+
28
+ .dark {
29
+ --color-fd-primary: #26bd6c;
30
+ --color-fd-primary-foreground: #0a0d0d;
31
+ --color-fd-ring: #26bd6c;
32
+
33
+ --color-fd-background: #0a0d0d;
34
+ --color-fd-foreground: #e5e7e6;
35
+ --color-fd-card: #111413;
36
+ --color-fd-card-foreground: #e5e7e6;
37
+ --color-fd-popover: #111413;
38
+ --color-fd-popover-foreground: #e5e7e6;
39
+ --color-fd-secondary: #1a1d1c;
40
+ --color-fd-secondary-foreground: #e5e7e6;
41
+ --color-fd-muted: #1a1d1c;
42
+ --color-fd-muted-foreground: #8a8d8b;
43
+ --color-fd-accent: #1a1d1c;
44
+ --color-fd-accent-foreground: #e5e7e6;
45
+ --color-fd-border: #2a2d2c;
46
+ }
47
+
48
+ /* ─── Typography — Inter, Mintlify-style values ──────────────── */
49
+
50
+ h1 {
51
+ letter-spacing: -0.025em;
52
+ font-weight: 500;
53
+ line-height: 1.2;
54
+ }
55
+
56
+ h2 {
57
+ letter-spacing: -0.02em;
58
+ font-weight: 600;
59
+ line-height: 1.25;
60
+ }
61
+
62
+ h3 {
63
+ letter-spacing: -0.01em;
64
+ font-weight: 600;
65
+ line-height: 1.3;
66
+ }
67
+
68
+ .fd-docs-content p {
69
+ font-size: 1rem;
70
+ line-height: 1.7;
71
+ }
72
+
73
+ /* ═══════════════════════════════════════════════════════════════════
74
+ * SIDEBAR — GreenTree: no border, green active background
75
+ * ═══════════════════════════════════════════════════════════════════ */
76
+
77
+ aside,
78
+ #nd-sidebar,
79
+ aside#nd-sidebar,
80
+ #nd-docs-layout aside {
81
+ border: none;
82
+ border-right: none;
83
+ border-left: none;
84
+ border-color: transparent;
85
+ box-shadow: none;
86
+ background: var(--color-fd-background);
87
+ }
88
+
89
+ /* ── Sidebar links — 14px, 500 weight ────────────────────────── */
90
+ aside a[data-active] {
91
+ font-size: 0.875rem;
92
+ line-height: 1.5;
93
+ font-weight: 500;
94
+ padding: 6px 10px;
95
+ border-radius: 8px;
96
+ color: var(--color-fd-muted-foreground);
97
+ transition:
98
+ color 150ms,
99
+ background-color 150ms;
100
+ }
101
+
102
+ aside a[data-active]:hover {
103
+ color: var(--color-fd-foreground);
104
+ background: var(--color-fd-accent);
105
+ }
106
+
107
+ /* Active sidebar item — green background like Mintlify */
108
+ aside a[data-active="true"] {
109
+ color: var(--color-fd-primary);
110
+ font-weight: 600;
111
+ background: rgba(13, 147, 115, 0.08);
112
+ background-color: rgba(13, 147, 115, 0.08);
113
+ }
114
+
115
+ .dark aside a[data-active="true"] {
116
+ background: rgba(38, 189, 108, 0.1);
117
+ background-color: rgba(38, 189, 108, 0.1);
118
+ color: var(--color-fd-primary);
119
+ }
120
+
121
+ aside a[data-active="true"]::before {
122
+ background-color: transparent;
123
+ width: 0;
124
+ }
125
+
126
+ /* ── Flat sidebar — category headings ─────────────────────────── */
127
+
128
+ /* Style folder parent links as category headings */
129
+ aside a[data-active].w-full {
130
+ font-weight: 600;
131
+ font-size: 0.875rem;
132
+ color: var(--color-fd-foreground);
133
+ padding-top: 1rem;
134
+ padding-bottom: 0.25rem;
135
+ margin-top: 0.5rem;
136
+ background: transparent !important;
137
+ }
138
+
139
+ aside a[data-active].w-full:first-child {
140
+ margin-top: 0;
141
+ }
142
+
143
+ aside a[data-active="true"].w-full {
144
+ color: var(--color-fd-primary);
145
+ }
146
+
147
+ /* Non-collapsible folder triggers rendered as <div> */
148
+ aside div.w-full:not([role]) {
149
+ font-weight: 600;
150
+ font-size: 0.875rem;
151
+ color: var(--color-fd-foreground);
152
+ padding-top: 1rem;
153
+ padding-bottom: 0.25rem;
154
+ margin-top: 0.5rem;
155
+ }
156
+
157
+ /* Search button in sidebar */
158
+ aside button[class*="bg-fd-secondary"] {
159
+ background: transparent;
160
+ border: 1px solid var(--color-fd-border);
161
+ border-radius: 8px;
162
+ font-size: 0.875rem;
163
+ }
164
+
165
+ /* Sidebar footer border removal */
166
+ aside .border-t,
167
+ aside [class*="border-t"] {
168
+ border-top-color: transparent;
169
+ }
170
+
171
+ /* ═══════════════════════════════════════════════════════════════════
172
+ * HEADER — clean, no heavy border
173
+ * ═══════════════════════════════════════════════════════════════════ */
174
+
175
+ header,
176
+ [role="banner"],
177
+ #nd-docs-layout > header,
178
+ nav[class*="header"] {
179
+ border-bottom: 1px solid var(--color-fd-border);
180
+ }
181
+
182
+ /* ═══════════════════════════════════════════════════════════════════
183
+ * CONTENT — links, code, tables, etc.
184
+ * ═══════════════════════════════════════════════════════════════════ */
185
+
186
+ /* Links in prose — green colored */
187
+ .fd-docs-content a:not(.fd-page-nav-card):not([class]) {
188
+ text-decoration: underline;
189
+ text-underline-offset: 3px;
190
+ text-decoration-color: rgba(13, 147, 115, 0.3);
191
+ text-decoration-thickness: 1px;
192
+ font-weight: 500;
193
+ color: var(--color-fd-primary);
194
+ transition: text-decoration-color 150ms;
195
+ }
196
+
197
+ .fd-docs-content a:not(.fd-page-nav-card):not([class]):hover {
198
+ text-decoration-color: var(--color-fd-primary);
199
+ }
200
+
201
+ /* Inline code */
202
+ .fd-docs-content :not(pre) > code {
203
+ padding: 2px 5px;
204
+ border: 1px solid var(--color-fd-border);
205
+ font-size: 0.875rem;
206
+ border-radius: 6px;
207
+ background: var(--color-fd-muted);
208
+ color: var(--color-fd-foreground);
209
+ font-weight: 400;
210
+ }
211
+
212
+ /* Tables */
213
+ .fd-docs-content table {
214
+ border-collapse: separate;
215
+ border-spacing: 0;
216
+ background: var(--color-fd-card);
217
+ border-radius: 8px;
218
+ border: 1px solid var(--color-fd-border);
219
+ overflow: hidden;
220
+ width: 100%;
221
+ }
222
+
223
+ .fd-docs-content th {
224
+ background: var(--color-fd-muted);
225
+ font-weight: 500;
226
+ font-size: 0.8125rem;
227
+ color: var(--color-fd-muted-foreground);
228
+ text-transform: none;
229
+ letter-spacing: normal;
230
+ }
231
+
232
+ .fd-docs-content th,
233
+ .fd-docs-content td {
234
+ padding: 0.75rem 1rem;
235
+ border-bottom: 1px solid var(--color-fd-border);
236
+ font-size: 0.875rem;
237
+ }
238
+
239
+ .fd-docs-content tr:last-child td {
240
+ border-bottom: none;
241
+ }
242
+
243
+ /* Blockquotes */
244
+ .fd-docs-content blockquote {
245
+ border-left: 3px solid var(--color-fd-primary);
246
+ padding-left: 1rem;
247
+ color: var(--color-fd-muted-foreground);
248
+ font-style: normal;
249
+ margin: 1rem 0;
250
+ }
251
+
252
+ /* Horizontal rule */
253
+ .fd-docs-content hr {
254
+ border-color: var(--color-fd-border);
255
+ }
256
+
257
+ /* ═══════════════════════════════════════════════════════════════════
258
+ * CARDS
259
+ * ═══════════════════════════════════════════════════════════════════ */
260
+
261
+ .fd-card {
262
+ display: block;
263
+ border-radius: 12px;
264
+ border: 1px solid var(--color-fd-border);
265
+ background: var(--color-fd-card);
266
+ padding: 1.25rem;
267
+ font-size: 0.875rem;
268
+ color: var(--color-fd-card-foreground);
269
+ box-shadow: none;
270
+ transition:
271
+ background-color 150ms,
272
+ border-color 150ms;
273
+ }
274
+
275
+ .fd-card:hover {
276
+ border-color: var(--color-fd-primary);
277
+ box-shadow: none;
278
+ }
279
+
280
+ .fd-card-icon {
281
+ margin-bottom: 0.5rem;
282
+ width: fit-content;
283
+ border-radius: 8px;
284
+ border: 1px solid var(--color-fd-border);
285
+ padding: 0.5rem;
286
+ color: var(--color-fd-primary);
287
+ background: rgba(13, 147, 115, 0.06);
288
+ }
289
+
290
+ .dark .fd-card-icon {
291
+ background: rgba(38, 189, 108, 0.08);
292
+ }
293
+
294
+ .fd-card-title {
295
+ font-weight: 500;
296
+ font-size: 0.9375rem;
297
+ }
298
+
299
+ .fd-card-description {
300
+ color: var(--color-fd-muted-foreground);
301
+ margin-top: 0.25rem;
302
+ font-size: 0.8125rem;
303
+ line-height: 1.5;
304
+ }
305
+
306
+ .fd-cards {
307
+ display: grid;
308
+ grid-template-columns: 1fr;
309
+ gap: 0.75rem;
310
+ }
311
+
312
+ @media (min-width: 640px) {
313
+ .fd-cards {
314
+ grid-template-columns: repeat(2, 1fr);
315
+ }
316
+ }
317
+
318
+ .fd-page-nav-card {
319
+ border-radius: 12px;
320
+ }
321
+
322
+ /* ═══════════════════════════════════════════════════════════════════
323
+ * CODE BLOCKS
324
+ * ═══════════════════════════════════════════════════════════════════ */
325
+
326
+ figure.shiki {
327
+ border-radius: 10px;
328
+ overflow: hidden;
329
+ border: 1px solid var(--color-fd-border);
330
+ }
331
+
332
+ /* ═══════════════════════════════════════════════════════════════════
333
+ * TABS — bottom border indicator
334
+ * ═══════════════════════════════════════════════════════════════════ */
335
+
336
+ [role="tablist"] {
337
+ border-bottom: 1px solid var(--color-fd-border);
338
+ }
339
+
340
+ [role="tab"] {
341
+ font-size: 0.875rem;
342
+ font-weight: 400;
343
+ padding: 0.5rem 0.75rem;
344
+ border-radius: 0;
345
+ color: var(--color-fd-muted-foreground);
346
+ border-bottom: 2px solid transparent;
347
+ transition:
348
+ color 150ms,
349
+ border-color 150ms;
350
+ }
351
+
352
+ [role="tab"][aria-selected="true"],
353
+ [role="tab"][data-state="active"] {
354
+ color: var(--color-fd-primary);
355
+ border-bottom-color: var(--color-fd-primary);
356
+ font-weight: 500;
357
+ }
358
+
359
+ /* ═══════════════════════════════════════════════════════════════════
360
+ * CALLOUT, ACCORDION
361
+ * ═══════════════════════════════════════════════════════════════════ */
362
+
363
+ [style*="--callout-color"] {
364
+ border-radius: 10px;
365
+ border-width: 1px;
366
+ }
367
+
368
+ details {
369
+ border: 1px solid var(--color-fd-border);
370
+ border-radius: 10px;
371
+ padding: 0;
372
+ margin: 0.75rem 0;
373
+ overflow: hidden;
374
+ }
375
+
376
+ details summary {
377
+ padding: 0.75rem 1rem;
378
+ font-weight: 500;
379
+ font-size: 0.9375rem;
380
+ cursor: pointer;
381
+ color: var(--color-fd-foreground);
382
+ background: var(--color-fd-secondary);
383
+ transition: background 150ms;
384
+ }
385
+
386
+ details summary:hover {
387
+ background: var(--color-fd-accent);
388
+ }
389
+
390
+ details[open] summary {
391
+ border-bottom: 1px solid var(--color-fd-border);
392
+ }
393
+
394
+ details > :not(summary) {
395
+ padding: 0.75rem 1rem;
396
+ }
397
+
398
+ /* ═══════════════════════════════════════════════════════════════════
399
+ * TOC
400
+ * ═══════════════════════════════════════════════════════════════════ */
401
+
402
+ #nd-toc a[data-active="true"] {
403
+ color: var(--color-fd-primary);
404
+ font-weight: 500;
405
+ }
406
+
407
+ #nd-toc a[data-active="false"] {
408
+ color: var(--color-fd-muted-foreground);
409
+ }
410
+
411
+ #nd-toc a {
412
+ font-size: 0.875rem;
413
+ line-height: 1.3;
414
+ }
415
+
416
+ #nd-toc h3 {
417
+ font-size: 0.875rem;
418
+ font-weight: 500;
419
+ }
420
+
421
+ /* ═══════════════════════════════════════════════════════════════════
422
+ * COMMAND PALETTE
423
+ * ═══════════════════════════════════════════════════════════════════ */
424
+
425
+ .omni-content {
426
+ border-radius: 12px;
427
+ border: 1px solid var(--color-fd-border);
428
+ background: var(--color-fd-popover);
429
+ box-shadow: 0 16px 70px rgba(0, 0, 0, 0.1);
430
+ }
431
+
432
+ .omni-item {
433
+ border-radius: 8px;
434
+ }
435
+
436
+ .omni-item-active {
437
+ background: var(--color-fd-accent);
438
+ }
439
+
440
+ .omni-highlight {
441
+ background: rgba(13, 147, 115, 0.1);
442
+ color: var(--color-fd-primary);
443
+ }
444
+
445
+ .dark .omni-highlight {
446
+ background: rgba(38, 189, 108, 0.15);
447
+ }
448
+
449
+ .omni-search-input:focus {
450
+ caret-color: var(--color-fd-primary);
451
+ }
452
+
453
+ /* ═══════════════════════════════════════════════════════════════════
454
+ * PAGE FOOTER, ACTIONS, DESCRIPTION
455
+ * ═══════════════════════════════════════════════════════════════════ */
456
+
457
+ .fd-page-footer {
458
+ border-top: 1px solid var(--color-fd-border);
459
+ }
460
+
461
+ .fd-page-description {
462
+ margin-bottom: 1rem;
463
+ font-size: 1rem;
464
+ line-height: 1.7;
465
+ color: var(--color-fd-muted-foreground);
466
+ }
467
+
468
+ .fd-page-action-btn {
469
+ border-radius: 8px;
470
+ font-size: 0.8125rem;
471
+ }
472
+
473
+ .fd-page-action-menu {
474
+ border-radius: 10px;
475
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
476
+ }
477
+
478
+ .fd-page-action-menu-item {
479
+ border-radius: 6px;
480
+ }
481
+
482
+ /* ═══════════════════════════════════════════════════════════════════
483
+ * AI CHAT
484
+ * ═══════════════════════════════════════════════════════════════════ */
485
+
486
+ .fd-ai-dialog {
487
+ border-radius: 14px;
488
+ box-shadow: 0 16px 70px rgba(0, 0, 0, 0.1);
489
+ }
490
+
491
+ .fd-ai-bubble-user {
492
+ border-radius: 16px 16px 4px 16px;
493
+ }
494
+
495
+ .fd-ai-bubble-ai {
496
+ border-radius: 16px 16px 16px 4px;
497
+ }
498
+
499
+ .fd-ai-input-wrap {
500
+ border-radius: 10px;
501
+ }
502
+
503
+ .fd-ai-send-btn {
504
+ border-radius: 10px;
505
+ }
506
+
507
+ .dark .fd-ai-floating-btn {
508
+ border-radius: 999px;
509
+ background: var(--color-fd-primary);
510
+ color: #fff;
511
+ box-shadow: 0 2px 8px rgba(38, 189, 108, 0.25);
512
+ border: none;
513
+ }
514
+
515
+ .dark .fd-ai-floating-btn:hover {
516
+ filter: brightness(1.1);
517
+ }
518
+
519
+ :root:not(.dark) .fd-ai-floating-btn {
520
+ border-radius: 999px;
521
+ background: var(--color-fd-primary);
522
+ color: #fff;
523
+ box-shadow: 0 2px 8px rgba(13, 147, 115, 0.2);
524
+ border: none;
525
+ }
526
+
527
+ :root:not(.dark) .fd-ai-floating-btn:hover {
528
+ filter: brightness(1.1);
529
+ }
530
+
531
+ .fd-ai-suggestion {
532
+ border-radius: 10px;
533
+ }
534
+
535
+ .fd-ai-result {
536
+ border-radius: 10px;
537
+ }
538
+
539
+ .fd-ai-fm-input-container {
540
+ border-radius: 12px;
541
+ }
542
+
543
+ .fd-ai-fm-send-btn {
544
+ border-radius: 9999px;
545
+ }
546
+
547
+ .fd-ai-fm-suggestion {
548
+ border-radius: 9999px;
549
+ }
550
+
551
+ .fd-ai-fm-trigger-btn {
552
+ border-radius: 16px;
553
+ }
554
+
555
+ .fd-ai-fm-close-btn {
556
+ border-radius: 9999px;
557
+ }
558
+
559
+ .fd-ai-code-block {
560
+ border-radius: 10px;
561
+ }
562
+
563
+ .fd-ai-code-copy {
564
+ border-radius: 6px;
565
+ }
566
+
567
+ /* ═══════════════════════════════════════════════════════════════════
568
+ * SIDEBAR AI TRIGGER — icon button next to search
569
+ * ═══════════════════════════════════════════════════════════════════ */
570
+
571
+ /* Search + AI button row in sidebar */
572
+ .fd-sidebar-search-ai-row {
573
+ display: flex;
574
+ gap: 8px;
575
+ align-items: stretch;
576
+ width: 100%;
577
+ }
578
+
579
+ .fd-sidebar-search-btn {
580
+ flex: 1;
581
+ min-width: 0;
582
+ display: flex;
583
+ align-items: center;
584
+ gap: 8px;
585
+ padding: 8px 10px;
586
+ font-size: 0.875rem;
587
+ color: var(--color-fd-muted-foreground);
588
+ background: transparent;
589
+ border: 1px solid var(--color-fd-border);
590
+ border-radius: 8px;
591
+ cursor: pointer;
592
+ transition: background-color 150ms;
593
+ }
594
+
595
+ .fd-sidebar-search-btn:hover {
596
+ background: var(--color-fd-accent);
597
+ }
598
+
599
+ .fd-sidebar-search-btn svg {
600
+ flex-shrink: 0;
601
+ }
602
+
603
+ .fd-sidebar-search-kbd {
604
+ display: flex;
605
+ gap: 2px;
606
+ margin-left: auto;
607
+ font-size: 0.75rem;
608
+ opacity: 0.6;
609
+ }
610
+
611
+ .fd-sidebar-search-kbd kbd {
612
+ font-family: inherit;
613
+ font-size: 0.7rem;
614
+ padding: 1px 4px;
615
+ border: 1px solid var(--color-fd-border);
616
+ border-radius: 4px;
617
+ background: var(--color-fd-muted);
618
+ }
619
+
620
+ .fd-sidebar-ai-btn {
621
+ display: inline-flex;
622
+ align-items: center;
623
+ justify-content: center;
624
+ width: 38px;
625
+ min-width: 38px;
626
+ border-radius: 8px;
627
+ border: 1px solid var(--color-fd-border);
628
+ background: transparent;
629
+ color: var(--color-fd-muted-foreground);
630
+ cursor: pointer;
631
+ transition:
632
+ background-color 150ms,
633
+ color 150ms,
634
+ border-color 150ms;
635
+ }
636
+
637
+ .fd-sidebar-ai-btn:hover {
638
+ background: var(--color-fd-accent);
639
+ color: var(--color-fd-primary);
640
+ border-color: var(--color-fd-primary);
641
+ }
642
+
643
+ .fd-sidebar-ai-btn svg {
644
+ width: 16px;
645
+ height: 16px;
646
+ }
647
+
648
+ /* ═══════════════════════════════════════════════════════════════════
649
+ * COPY PAGE BUTTON — Mintlify-style split button group
650
+ * ═══════════════════════════════════════════════════════════════════ */
651
+
652
+ .fd-page-actions {
653
+ display: flex;
654
+ gap: 0;
655
+ align-items: stretch;
656
+ }
657
+
658
+ .fd-page-action-btn {
659
+ display: inline-flex;
660
+ align-items: center;
661
+ gap: 6px;
662
+ padding: 6px 12px;
663
+ font-size: 0.8125rem;
664
+ font-weight: 500;
665
+ color: var(--color-fd-muted-foreground);
666
+ background: transparent;
667
+ border: 1px solid var(--color-fd-border);
668
+ cursor: pointer;
669
+ transition:
670
+ background-color 150ms,
671
+ color 150ms;
672
+ white-space: nowrap;
673
+ }
674
+
675
+ .fd-page-action-btn:hover {
676
+ background: var(--color-fd-accent);
677
+ color: var(--color-fd-foreground);
678
+ }
679
+
680
+ /* Split-button group: first button gets left rounding */
681
+ .fd-page-actions .fd-page-action-btn:first-child {
682
+ border-radius: 8px 0 0 8px;
683
+ border-right: none;
684
+ }
685
+
686
+ /* Split-button group: last button gets right rounding */
687
+ .fd-page-actions .fd-page-action-dropdown:last-child .fd-page-action-btn,
688
+ .fd-page-actions > .fd-page-action-btn:last-child {
689
+ border-radius: 0 8px 8px 0;
690
+ border-left: 1px solid var(--color-fd-border);
691
+ padding: 6px 8px;
692
+ }
693
+
694
+ /* Single button (no siblings) gets full rounding */
695
+ .fd-page-actions .fd-page-action-btn:only-child {
696
+ border-radius: 8px;
697
+ border: 1px solid var(--color-fd-border);
698
+ }
699
+
700
+ .fd-page-action-dropdown {
701
+ position: relative;
702
+ }
703
+
704
+ /* ═══════════════════════════════════════════════════════════════════
705
+ * SCROLLBAR — subtle
706
+ * ═══════════════════════════════════════════════════════════════════ */
707
+
708
+ .fd-sidebar::-webkit-scrollbar {
709
+ width: 4px;
710
+ }
711
+
712
+ .fd-sidebar::-webkit-scrollbar-thumb {
713
+ background: var(--color-fd-border);
714
+ border-radius: 4px;
715
+ }
716
+
717
+ .fd-sidebar::-webkit-scrollbar-track {
718
+ background: transparent;
719
+ }