@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.
package/styles/base.css CHANGED
@@ -1,6 +1,9 @@
1
1
  /* AI Chat & Search Dialog styles */
2
2
  @import "./ai.css";
3
3
 
4
+ /* Omni Command Palette — built-in search */
5
+ @import "./omni.css";
6
+
4
7
  /* Shared base styles for all @farming-labs/theme themes.
5
8
  *
6
9
  * Typography CSS custom properties:
@@ -23,34 +26,52 @@ body {
23
26
  font-family: var(--fd-font-sans, var(--font-geist-sans, ui-sans-serif, system-ui, sans-serif));
24
27
  }
25
28
 
26
- code, kbd, pre, samp {
27
- font-family: var(--fd-font-mono, var(--font-geist-mono, ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, Consolas, monospace));
29
+ code,
30
+ kbd,
31
+ pre,
32
+ samp {
33
+ font-family: var(
34
+ --fd-font-mono,
35
+ var(
36
+ --font-geist-mono,
37
+ ui-monospace,
38
+ "Cascadia Code",
39
+ "Source Code Pro",
40
+ Menlo,
41
+ Consolas,
42
+ monospace
43
+ )
44
+ );
28
45
  }
29
46
 
30
47
  /* ─── Prose heading typography ───────────────────────────────────────── */
31
48
 
32
- .prose h1, article h1 {
49
+ .prose h1,
50
+ article h1 {
33
51
  font-size: var(--fd-h1-size, 2.25rem);
34
52
  font-weight: var(--fd-h1-weight, 700);
35
53
  line-height: var(--fd-h1-line-height, 1.2);
36
54
  letter-spacing: var(--fd-h1-letter-spacing, -0.02em);
37
55
  }
38
56
 
39
- .prose h2, article h2 {
57
+ .prose h2,
58
+ article h2 {
40
59
  font-size: var(--fd-h2-size, 1.5rem);
41
60
  font-weight: var(--fd-h2-weight, 600);
42
61
  line-height: var(--fd-h2-line-height, 1.3);
43
62
  letter-spacing: var(--fd-h2-letter-spacing, -0.01em);
44
63
  }
45
64
 
46
- .prose h3, article h3 {
65
+ .prose h3,
66
+ article h3 {
47
67
  font-size: var(--fd-h3-size, 1.25rem);
48
68
  font-weight: var(--fd-h3-weight, 600);
49
69
  line-height: var(--fd-h3-line-height, 1.4);
50
70
  letter-spacing: var(--fd-h3-letter-spacing, normal);
51
71
  }
52
72
 
53
- .prose h4, article h4 {
73
+ .prose h4,
74
+ article h4 {
54
75
  font-size: var(--fd-h4-size, 1.125rem);
55
76
  font-weight: var(--fd-h4-weight, 600);
56
77
  line-height: var(--fd-h4-line-height, 1.4);
@@ -59,7 +80,10 @@ code, kbd, pre, samp {
59
80
 
60
81
  /* ─── Body text ──────────────────────────────────────────────────────── */
61
82
 
62
- .prose p, .prose li, .prose td, article p {
83
+ .prose p,
84
+ .prose li,
85
+ .prose td,
86
+ article p {
63
87
  font-size: var(--fd-body-size, 1rem);
64
88
  font-weight: var(--fd-body-weight, 400);
65
89
  line-height: var(--fd-body-line-height, 1.75);
@@ -67,7 +91,9 @@ code, kbd, pre, samp {
67
91
 
68
92
  /* ─── Small text (captions, metadata) ─────────────────────────────── */
69
93
 
70
- .prose small, article small, .text-sm {
94
+ .prose small,
95
+ article small,
96
+ .text-sm {
71
97
  font-size: var(--fd-small-size, 0.875rem);
72
98
  font-weight: var(--fd-small-weight, 400);
73
99
  line-height: var(--fd-small-line-height, 1.5);
@@ -105,6 +131,53 @@ figure.shiki pre > code > [data-line] {
105
131
  padding: 0 0.25rem;
106
132
  }
107
133
 
134
+ /* Titled code blocks: diagonal stripe background on the title bar */
135
+ figure.shiki:has(figcaption) > div:first-child {
136
+ position: relative;
137
+ }
138
+
139
+ figure.shiki:has(figcaption) > div:first-child::before {
140
+ content: "";
141
+ position: absolute;
142
+ inset: 0;
143
+ background: repeating-linear-gradient(
144
+ -45deg,
145
+ currentColor,
146
+ currentColor 1px,
147
+ transparent 1px,
148
+ transparent 6px
149
+ );
150
+ opacity: 0.03;
151
+ pointer-events: none;
152
+ }
153
+
154
+ .dark figure.shiki:has(figcaption) > div:first-child::before {
155
+ opacity: 0.05;
156
+ }
157
+
158
+ figure.shiki:has(figcaption) figcaption {
159
+ font-family: var(
160
+ --fd-font-mono,
161
+ ui-monospace,
162
+ SFMono-Regular,
163
+ "SF Mono",
164
+ Menlo,
165
+ Consolas,
166
+ monospace
167
+ );
168
+ font-size: 0.75rem;
169
+ letter-spacing: 0.01em;
170
+ }
171
+
172
+ /* ─── Page description (frontmatter) ─────────────────────────────────── */
173
+
174
+ .fd-page-description {
175
+ margin-bottom: 1rem;
176
+ font-size: 1.125rem;
177
+ line-height: 1.75;
178
+ color: var(--color-fd-muted-foreground);
179
+ }
180
+
108
181
  /* ─── Breadcrumb ─────────────────────────────────────────────────────── */
109
182
 
110
183
  .fd-breadcrumb {
@@ -136,7 +209,9 @@ figure.shiki pre > code > [data-line] {
136
209
  color: inherit;
137
210
  text-decoration: none;
138
211
  cursor: pointer;
139
- transition: opacity 0.15s, color 0.15s;
212
+ transition:
213
+ opacity 0.15s,
214
+ color 0.15s;
140
215
  }
141
216
 
142
217
  .fd-breadcrumb-link:hover {
@@ -149,6 +224,32 @@ figure.shiki pre > code > [data-line] {
149
224
  color: var(--color-fd-foreground);
150
225
  }
151
226
 
227
+ /* ─── Below-title block (Last Updated + Separator + Actions) ──────── */
228
+
229
+ .fd-below-title-block {
230
+ margin-top: 0.5rem;
231
+ margin-bottom: 1.5rem;
232
+ }
233
+
234
+ .fd-last-updated-inline {
235
+ color: var(--color-fd-muted-foreground);
236
+ font-size: 0.875rem;
237
+ font-weight: 400;
238
+ margin: 0 0 0.75rem;
239
+ line-height: 1.5;
240
+ }
241
+
242
+ .fd-title-separator {
243
+ border: none;
244
+ border-top: 1px solid var(--color-fd-border);
245
+ margin: 0 0 0.75rem;
246
+ }
247
+
248
+ .fd-actions-portal [data-page-actions] {
249
+ margin-top: 0;
250
+ margin-bottom: 0;
251
+ }
252
+
152
253
  /* ─── Page Actions (Copy Markdown / Open in …) ────────────────────── */
153
254
 
154
255
  [data-page-actions] {
@@ -160,6 +261,14 @@ figure.shiki pre > code > [data-line] {
160
261
  margin-top: 0.25rem;
161
262
  }
162
263
 
264
+ [data-actions-alignment="right"] > [data-page-actions] {
265
+ justify-content: flex-end;
266
+ }
267
+
268
+ [data-actions-alignment="left"] > [data-page-actions] {
269
+ justify-content: flex-start;
270
+ }
271
+
163
272
  .fd-page-action-btn {
164
273
  display: inline-flex;
165
274
  align-items: center;
@@ -175,7 +284,10 @@ figure.shiki pre > code > [data-line] {
175
284
  border-radius: 0.375rem;
176
285
  cursor: pointer;
177
286
  white-space: nowrap;
178
- transition: color 0.15s, background 0.15s, border-color 0.15s;
287
+ transition:
288
+ color 0.15s,
289
+ background 0.15s,
290
+ border-color 0.15s;
179
291
  user-select: none;
180
292
  }
181
293
 
@@ -222,8 +334,14 @@ figure.shiki pre > code > [data-line] {
222
334
  }
223
335
 
224
336
  @keyframes fd-page-actions-fade-in {
225
- from { opacity: 0; transform: translateY(-4px); }
226
- to { opacity: 1; transform: translateY(0); }
337
+ from {
338
+ opacity: 0;
339
+ transform: translateY(-4px);
340
+ }
341
+ to {
342
+ opacity: 1;
343
+ transform: translateY(0);
344
+ }
227
345
  }
228
346
 
229
347
  .fd-page-action-menu-item {
@@ -240,7 +358,9 @@ figure.shiki pre > code > [data-line] {
240
358
  border-radius: 0.25rem;
241
359
  cursor: pointer;
242
360
  text-align: left;
243
- transition: background 0.1s, color 0.1s;
361
+ transition:
362
+ background 0.1s,
363
+ color 0.1s;
244
364
  }
245
365
 
246
366
  .fd-page-action-menu-item:hover {
@@ -270,8 +390,9 @@ figure.shiki pre > code > [data-line] {
270
390
 
271
391
  .fd-page-footer {
272
392
  display: flex;
393
+ flex-wrap: wrap;
273
394
  align-items: center;
274
- gap: 1rem;
395
+ gap: 0.75rem 1rem;
275
396
  margin-top: auto;
276
397
  padding-top: 1.5rem;
277
398
  border-top: 1px solid var(--color-fd-border, hsl(0 0% 80% / 50%));
@@ -283,6 +404,42 @@ figure.shiki pre > code > [data-line] {
283
404
  font-size: 0.75rem;
284
405
  }
285
406
 
407
+ .fd-last-updated-footer {
408
+ color: var(--color-fd-muted-foreground, hsl(0 0% 45%));
409
+ font-size: 0.8125rem;
410
+ margin-left: auto;
411
+ }
412
+
413
+ @media (max-width: 640px) {
414
+ .fd-last-updated-footer {
415
+ margin-left: 0;
416
+ width: 100%;
417
+ }
418
+ }
419
+
420
+ .fd-llms-txt-links {
421
+ display: inline-flex;
422
+ align-items: center;
423
+ gap: 0.5rem;
424
+ }
425
+
426
+ .fd-llms-txt-link {
427
+ color: var(--color-fd-muted-foreground, hsl(0 0% 45%));
428
+ font-size: 0.75rem;
429
+ font-family: var(--fd-font-mono, ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace);
430
+ text-decoration: none;
431
+ padding: 0.125rem 0.375rem;
432
+ border-radius: 0.25rem;
433
+ border: 1px solid var(--color-fd-border, hsl(0 0% 80% / 50%));
434
+ transition: color 150ms, border-color 150ms;
435
+ }
436
+
437
+ .fd-llms-txt-link:hover {
438
+ color: var(--color-fd-foreground, hsl(0 0% 10%));
439
+ border-color: var(--color-fd-foreground, hsl(0 0% 10%));
440
+ text-decoration: none;
441
+ }
442
+
286
443
  /* ─── Code block copy button: show on hover ────────────────────────── */
287
444
 
288
445
  figure.shiki > button,
@@ -296,3 +453,43 @@ figure.shiki:hover > div:first-child button {
296
453
  opacity: 1;
297
454
  }
298
455
 
456
+ /* ─── Sidebar AI trigger (sidebar-icon mode) ───────────────────────── */
457
+
458
+ .fd-sidebar-ai-trigger-wrapper {
459
+ display: flex;
460
+ gap: 8px;
461
+ align-items: stretch;
462
+ }
463
+
464
+ .fd-sidebar-search-flex {
465
+ flex: 1;
466
+ min-width: 0;
467
+ }
468
+
469
+ .fd-sidebar-ai-btn {
470
+ display: inline-flex;
471
+ align-items: center;
472
+ justify-content: center;
473
+ width: 38px;
474
+ min-width: 38px;
475
+ border-radius: 8px;
476
+ border: 1px solid var(--color-fd-border, hsl(0 0% 80% / 50%));
477
+ background: var(--color-fd-secondary, hsl(0 0% 96%));
478
+ color: var(--color-fd-muted-foreground, hsl(0 0% 45%));
479
+ cursor: pointer;
480
+ transition:
481
+ background-color 150ms,
482
+ color 150ms,
483
+ border-color 150ms;
484
+ }
485
+
486
+ .fd-sidebar-ai-btn:hover {
487
+ background: var(--color-fd-accent, hsl(0 0% 90%));
488
+ color: var(--color-fd-primary, hsl(220 100% 50%));
489
+ border-color: var(--color-fd-primary, hsl(220 100% 50%));
490
+ }
491
+
492
+ .fd-sidebar-ai-btn svg {
493
+ width: 16px;
494
+ height: 16px;
495
+ }
@@ -0,0 +1,266 @@
1
+ /* @farming-labs/theme — colorful theme CSS
2
+ * Fumadocs-inspired theme with warm yellow/amber accent colors.
3
+ */
4
+ @import "./presets/neutral.css";
5
+
6
+ /* ─── Colorful yellow accent overrides ────────────────────────────── */
7
+
8
+ :root {
9
+ --color-fd-primary: hsl(40, 96%, 40%);
10
+ --color-fd-primary-foreground: hsl(0, 0%, 100%);
11
+ --color-fd-ring: hsl(40, 80%, 50%);
12
+ }
13
+
14
+ .dark {
15
+ --color-fd-primary: hsl(45, 100%, 60%);
16
+ --color-fd-primary-foreground: hsl(0, 0%, 5%);
17
+ --color-fd-ring: hsl(45, 90%, 55%);
18
+ }
19
+
20
+ /* ─── Description under title ──────────────────────────────────────── */
21
+
22
+ .fd-page-description {
23
+ margin-bottom: 1rem;
24
+ font-size: 1.125rem;
25
+ line-height: 1.75;
26
+ color: var(--color-fd-muted-foreground);
27
+ }
28
+
29
+ /* ─── Page Actions (colorful theme) ─────────────────────────────────── */
30
+
31
+ .fd-page-action-btn {
32
+ border-radius: 0.375rem;
33
+ }
34
+
35
+ .fd-page-action-menu {
36
+ border-radius: 0.5rem;
37
+ }
38
+
39
+ .fd-page-action-menu-item {
40
+ border-radius: 0.25rem;
41
+ }
42
+
43
+ /* ─── AI Chat (colorful theme) ───────────────────────────────────────── */
44
+
45
+ .fd-ai-dialog {
46
+ border-radius: 12px;
47
+ box-shadow:
48
+ 0 20px 60px rgba(180, 140, 20, 0.08),
49
+ 0 8px 24px rgba(0, 0, 0, 0.12);
50
+ }
51
+
52
+ .fd-ai-bubble-user {
53
+ border-radius: 16px 16px 4px 16px;
54
+ }
55
+
56
+ .fd-ai-bubble-ai {
57
+ border-radius: 16px 16px 16px 4px;
58
+ }
59
+
60
+ .fd-ai-input-wrap {
61
+ border-radius: 10px;
62
+ }
63
+
64
+ .fd-ai-send-btn {
65
+ border-radius: 8px;
66
+ }
67
+
68
+ .fd-ai-floating-btn {
69
+ border-radius: 26px;
70
+ box-shadow: 0 8px 32px rgba(180, 140, 20, 0.3);
71
+ }
72
+
73
+ .fd-ai-floating-btn:hover {
74
+ box-shadow: 0 10px 40px rgba(180, 140, 20, 0.4);
75
+ }
76
+
77
+ .fd-ai-suggestion {
78
+ border-radius: 8px;
79
+ }
80
+
81
+ .fd-ai-result {
82
+ border-radius: 8px;
83
+ }
84
+
85
+ /* ─── Full-Modal ────────────────────────────────────────────────────── */
86
+
87
+ .fd-ai-fm-input-container {
88
+ border-radius: 12px;
89
+ }
90
+
91
+ .fd-ai-fm-send-btn {
92
+ border-radius: 9999px;
93
+ }
94
+
95
+ .fd-ai-fm-suggestion {
96
+ border-radius: 9999px;
97
+ }
98
+
99
+ .fd-ai-fm-trigger-btn {
100
+ border-radius: 16px;
101
+ }
102
+
103
+ .fd-ai-fm-close-btn {
104
+ border-radius: 9999px;
105
+ }
106
+
107
+ /* ─── Code blocks ───────────────────────────────────────────────────── */
108
+
109
+ .fd-ai-code-block {
110
+ border-radius: 8px;
111
+ }
112
+
113
+ .fd-ai-code-copy {
114
+ border-radius: 4px;
115
+ }
116
+
117
+ /* ─── Sidebar colorful overrides ────────────────────────────────────── */
118
+
119
+ .dark .fd-sidebar {
120
+ --color-fd-muted: hsl(0, 0%, 16%);
121
+ --color-fd-secondary: hsl(0, 0%, 18%);
122
+ --color-fd-muted-foreground: hsl(0, 0%, 72%);
123
+ }
124
+
125
+ /* ─── Cards (fumadocs style) ────────────────────────────────────────── */
126
+
127
+ .fd-card {
128
+ display: block;
129
+ border-radius: 0.75rem;
130
+ border: 1px solid var(--color-fd-border);
131
+ background: var(--color-fd-card);
132
+ padding: 1rem;
133
+ font-size: 0.875rem;
134
+ color: var(--color-fd-card-foreground);
135
+ box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);
136
+ transition:
137
+ background-color 150ms,
138
+ border-color 150ms;
139
+ }
140
+
141
+ .fd-card:hover {
142
+ background: var(--color-fd-accent);
143
+ }
144
+
145
+ .fd-card-icon {
146
+ margin-bottom: 0.5rem;
147
+ width: fit-content;
148
+ border-radius: 0.375rem;
149
+ border: 1px solid var(--color-fd-border);
150
+ padding: 0.375rem;
151
+ color: var(--color-fd-muted-foreground);
152
+ }
153
+
154
+ .fd-card-title {
155
+ font-weight: 500;
156
+ }
157
+
158
+ .fd-card-description {
159
+ color: var(--color-fd-muted-foreground);
160
+ margin-top: 0.25rem;
161
+ }
162
+
163
+ /* ─── Cards grid ──────────────────────────────────────────────────── */
164
+
165
+ .fd-cards {
166
+ display: grid;
167
+ grid-template-columns: 1fr;
168
+ gap: 1rem;
169
+ }
170
+
171
+ @media (min-width: 640px) {
172
+ .fd-cards {
173
+ grid-template-columns: repeat(2, 1fr);
174
+ }
175
+ }
176
+
177
+ /* ─── Page nav cards (fumadocs style) ──────────────────────────────── */
178
+
179
+ .fd-page-nav-card {
180
+ border-radius: 0.75rem;
181
+ }
182
+
183
+ /* ─── Inline code ──────────────────────────────────────────────────── */
184
+
185
+ .fd-docs-content :not(pre) > code {
186
+ padding: 3px;
187
+ border: 1px solid var(--color-fd-border);
188
+ font-size: 13px;
189
+ border-radius: 5px;
190
+ background: var(--color-fd-muted);
191
+ }
192
+
193
+ /* ─── Links in prose ───────────────────────────────────────────────── */
194
+
195
+ .fd-docs-content a:not(.fd-page-nav-card):not([class]) {
196
+ text-decoration: underline;
197
+ text-underline-offset: 3.5px;
198
+ text-decoration-color: var(--color-fd-primary);
199
+ text-decoration-thickness: 1.5px;
200
+ font-weight: 500;
201
+ }
202
+
203
+ /* ─── Tables (rounded style) ───────────────────────────────────────── */
204
+
205
+ .fd-docs-content table {
206
+ border-collapse: separate;
207
+ border-spacing: 0;
208
+ background: var(--color-fd-card);
209
+ border-radius: 0.75rem;
210
+ border: 1px solid var(--color-fd-border);
211
+ overflow: hidden;
212
+ }
213
+
214
+ .fd-docs-content th {
215
+ background: var(--color-fd-muted);
216
+ font-weight: 600;
217
+ }
218
+
219
+ .fd-docs-content th,
220
+ .fd-docs-content td {
221
+ padding: 0.625rem;
222
+ border-bottom: 1px solid var(--color-fd-border);
223
+ }
224
+
225
+ .fd-docs-content tr:last-child td {
226
+ border-bottom: none;
227
+ }
228
+
229
+ /* ─── Blockquotes ──────────────────────────────────────────────────── */
230
+
231
+ .fd-docs-content blockquote {
232
+ border-left: 2px solid var(--color-fd-primary);
233
+ padding-left: 1rem;
234
+ color: var(--color-fd-foreground);
235
+ font-style: normal;
236
+ }
237
+
238
+ /* ─── Horizontal rule ──────────────────────────────────────────────── */
239
+
240
+ .fd-docs-content hr {
241
+ border-color: var(--color-fd-border);
242
+ }
243
+
244
+ /* ─── Omni Command Palette (colorful theme) ─────────────────────── */
245
+
246
+ .omni-content {
247
+ border-radius: 0.75rem;
248
+ border: 1px solid var(--color-fd-border);
249
+ background: var(--color-fd-popover);
250
+ box-shadow:
251
+ 0 24px 60px -12px rgba(180, 140, 20, 0.12),
252
+ 0 0 0 1px rgba(255, 255, 255, 0.04);
253
+ }
254
+
255
+ .omni-item-active {
256
+ background: color-mix(in srgb, var(--color-fd-primary) 15%, transparent);
257
+ }
258
+
259
+ .omni-highlight {
260
+ background: color-mix(in srgb, var(--color-fd-primary) 30%, transparent);
261
+ color: var(--color-fd-primary-foreground);
262
+ }
263
+
264
+ .omni-search-input:focus {
265
+ caret-color: var(--color-fd-primary);
266
+ }