@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,505 @@
1
+ /* @farming-labs/theme — shiny theme CSS
2
+ * Clerk docs-inspired clean, polished light/dark theme with purple accents.
3
+ */
4
+ @import "./presets/neutral.css";
5
+
6
+ /* ─── Shiny color overrides ───────────────────────────────────────── */
7
+
8
+ :root {
9
+ --color-fd-primary: hsl(256, 100%, 64%);
10
+ --color-fd-primary-foreground: hsl(0, 0%, 100%);
11
+ --color-fd-ring: hsl(256, 85%, 60%);
12
+
13
+ --color-fd-background: hsl(240, 6%, 97%);
14
+ --color-fd-foreground: hsl(240, 10%, 8%);
15
+ --color-fd-card: hsl(0, 0%, 100%);
16
+ --color-fd-card-foreground: hsl(240, 10%, 8%);
17
+ --color-fd-popover: hsl(0, 0%, 100%);
18
+ --color-fd-popover-foreground: hsl(240, 10%, 8%);
19
+ --color-fd-secondary: hsl(240, 5%, 96%);
20
+ --color-fd-secondary-foreground: hsl(240, 6%, 10%);
21
+ --color-fd-muted: hsl(240, 5%, 96%);
22
+ --color-fd-muted-foreground: hsl(240, 4%, 46%);
23
+ --color-fd-accent: hsl(240, 5%, 94%);
24
+ --color-fd-accent-foreground: hsl(240, 6%, 10%);
25
+ --color-fd-border: hsl(240, 6%, 90%);
26
+ }
27
+
28
+ .dark {
29
+ --color-fd-primary: hsl(256, 100%, 72%);
30
+ --color-fd-primary-foreground: hsl(0, 0%, 100%);
31
+ --color-fd-ring: hsl(256, 85%, 65%);
32
+
33
+ --color-fd-background: hsl(240, 10%, 7%);
34
+ --color-fd-foreground: hsl(0, 0%, 95%);
35
+ --color-fd-card: hsl(240, 8%, 10%);
36
+ --color-fd-card-foreground: hsl(0, 0%, 95%);
37
+ --color-fd-popover: hsl(240, 8%, 10%);
38
+ --color-fd-popover-foreground: hsl(0, 0%, 95%);
39
+ --color-fd-secondary: hsl(240, 6%, 14%);
40
+ --color-fd-secondary-foreground: hsl(0, 0%, 90%);
41
+ --color-fd-muted: hsl(240, 5%, 16%);
42
+ --color-fd-muted-foreground: hsl(240, 4%, 58%);
43
+ --color-fd-accent: hsl(240, 6%, 16%);
44
+ --color-fd-accent-foreground: hsl(0, 0%, 90%);
45
+ --color-fd-border: hsl(240, 5%, 18%);
46
+ }
47
+
48
+ /* ─── Description under title ──────────────────────────────────────── */
49
+
50
+ .fd-page-description {
51
+ margin-bottom: 1rem;
52
+ font-size: 1rem;
53
+ line-height: 1.7;
54
+ color: var(--color-fd-muted-foreground);
55
+ }
56
+
57
+ /* ─── Page Actions (shiny theme) ────────────────────────────────────── */
58
+
59
+ .fd-page-action-btn {
60
+ border-radius: 0.5rem;
61
+ font-size: 0.8125rem;
62
+ }
63
+
64
+ .fd-page-action-menu {
65
+ border-radius: 0.75rem;
66
+ box-shadow:
67
+ 0 8px 30px rgba(0, 0, 0, 0.08),
68
+ 0 0 0 1px rgba(0, 0, 0, 0.04);
69
+ }
70
+
71
+ .fd-page-action-menu-item {
72
+ border-radius: 0.375rem;
73
+ }
74
+
75
+ /* ─── AI Chat (shiny theme) ──────────────────────────────────────────── */
76
+
77
+ .fd-ai-dialog {
78
+ border-radius: 16px;
79
+ box-shadow:
80
+ 0 24px 80px rgba(0, 0, 0, 0.08),
81
+ 0 8px 32px rgba(0, 0, 0, 0.1);
82
+ }
83
+
84
+ .fd-ai-bubble-user {
85
+ border-radius: 18px 18px 4px 18px;
86
+ }
87
+
88
+ .fd-ai-bubble-ai {
89
+ border-radius: 18px 18px 18px 4px;
90
+ }
91
+
92
+ .fd-ai-input-wrap {
93
+ border-radius: 12px;
94
+ }
95
+
96
+ .fd-ai-send-btn {
97
+ border-radius: 10px;
98
+ }
99
+
100
+ .fd-ai-floating-btn {
101
+ border-radius: 6px;
102
+ background: hsl(240, 6%, 15%);
103
+ color: #fff;
104
+ box-shadow:
105
+ inset 0 1px 0 0 rgba(255, 255, 255, 0.07),
106
+ 0 1px 3px rgba(0, 0, 0, 0.2);
107
+ border: none;
108
+ }
109
+
110
+ .fd-ai-floating-btn:hover {
111
+ background: hsl(240, 6%, 20%);
112
+ box-shadow:
113
+ inset 0 1px 0 0 rgba(255, 255, 255, 0.1),
114
+ 0 2px 6px rgba(0, 0, 0, 0.25);
115
+ }
116
+
117
+ :root .fd-ai-floating-btn {
118
+ background: hsl(240, 7%, 14%);
119
+ color: #fff;
120
+ }
121
+
122
+ :root .fd-ai-floating-btn:hover {
123
+ background: hsl(240, 7%, 20%);
124
+ }
125
+
126
+ .fd-ai-suggestion {
127
+ border-radius: 10px;
128
+ }
129
+
130
+ .fd-ai-result {
131
+ border-radius: 10px;
132
+ }
133
+
134
+ /* ─── Full-Modal ────────────────────────────────────────────────────── */
135
+
136
+ .fd-ai-fm-input-container {
137
+ border-radius: 14px;
138
+ }
139
+
140
+ .fd-ai-fm-send-btn {
141
+ border-radius: 9999px;
142
+ }
143
+
144
+ .fd-ai-fm-suggestion {
145
+ border-radius: 9999px;
146
+ }
147
+
148
+ .fd-ai-fm-trigger-btn {
149
+ border-radius: 18px;
150
+ }
151
+
152
+ .fd-ai-fm-close-btn {
153
+ border-radius: 9999px;
154
+ }
155
+
156
+ /* ─── Code blocks (shiny) ────────────────────────────────────────────── */
157
+
158
+ .fd-ai-code-block {
159
+ border-radius: 10px;
160
+ }
161
+
162
+ .fd-ai-code-copy {
163
+ border-radius: 6px;
164
+ }
165
+
166
+ /* ─── Sidebar shiny overrides ────────────────────────────────────────── */
167
+
168
+ :root .fd-sidebar {
169
+ --color-fd-muted: hsl(240, 5%, 96%);
170
+ --color-fd-secondary: hsl(240, 5%, 94%);
171
+ --color-fd-muted-foreground: hsl(240, 4%, 46%);
172
+ }
173
+
174
+ .dark .fd-sidebar {
175
+ --color-fd-muted: hsl(240, 5%, 14%);
176
+ --color-fd-secondary: hsl(240, 6%, 16%);
177
+ --color-fd-muted-foreground: hsl(240, 4%, 56%);
178
+ }
179
+
180
+ /* Active sidebar item: subtle purple tint — scoped to sidebar only */
181
+ :root aside [data-active="true"] > a,
182
+ :root aside a[data-active="true"] {
183
+ background: hsl(256, 100%, 97%);
184
+ color: hsl(256, 100%, 50%);
185
+ font-weight: 500;
186
+ }
187
+
188
+ .dark aside [data-active="true"] > a,
189
+ .dark aside a[data-active="true"] {
190
+ background: hsl(256, 40%, 16%);
191
+ color: hsl(256, 100%, 78%);
192
+ font-weight: 500;
193
+ }
194
+
195
+ /* ─── Cards (shiny style — clean, subtle shadow) ────────────────────── */
196
+
197
+ .fd-card {
198
+ display: block;
199
+ border-radius: 0.75rem;
200
+ border: 1px solid var(--color-fd-border);
201
+ background: var(--color-fd-card);
202
+ padding: 1.25rem;
203
+ font-size: 0.875rem;
204
+ color: var(--color-fd-card-foreground);
205
+ box-shadow:
206
+ 0 1px 3px 0 rgb(0 0 0 / 0.04),
207
+ 0 1px 2px -1px rgb(0 0 0 / 0.04);
208
+ transition:
209
+ background-color 150ms,
210
+ border-color 150ms,
211
+ box-shadow 150ms;
212
+ }
213
+
214
+ .fd-card:hover {
215
+ border-color: var(--color-fd-primary);
216
+ box-shadow: 0 2px 8px 0 rgb(0 0 0 / 0.06);
217
+ }
218
+
219
+ .fd-card-icon {
220
+ margin-bottom: 0.625rem;
221
+ width: fit-content;
222
+ border-radius: 0.5rem;
223
+ border: 1px solid var(--color-fd-border);
224
+ padding: 0.5rem;
225
+ color: var(--color-fd-muted-foreground);
226
+ background: var(--color-fd-secondary);
227
+ }
228
+
229
+ .fd-card-title {
230
+ font-weight: 500;
231
+ font-size: 0.9375rem;
232
+ }
233
+
234
+ .fd-card-description {
235
+ color: var(--color-fd-muted-foreground);
236
+ margin-top: 0.25rem;
237
+ font-size: 0.8125rem;
238
+ line-height: 1.55;
239
+ }
240
+
241
+ /* ─── Cards grid ──────────────────────────────────────────────────── */
242
+
243
+ .fd-cards {
244
+ display: grid;
245
+ grid-template-columns: 1fr;
246
+ gap: 0.75rem;
247
+ }
248
+
249
+ @media (min-width: 640px) {
250
+ .fd-cards {
251
+ grid-template-columns: repeat(2, 1fr);
252
+ }
253
+ }
254
+
255
+ /* ─── Page nav cards (shiny style) ─────────────────────────────────── */
256
+
257
+ .fd-page-nav-card {
258
+ border-radius: 0.75rem;
259
+ }
260
+
261
+ /* ─── Inline code (Clerk style — subtle, no heavy borders) ─────────── */
262
+
263
+ .fd-docs-content :not(pre) > code {
264
+ padding: 2px 6px;
265
+ border: 1px solid var(--color-fd-border);
266
+ font-size: 0.8125rem;
267
+ border-radius: 6px;
268
+ background: var(--color-fd-muted);
269
+ color: var(--color-fd-foreground);
270
+ font-weight: 450;
271
+ }
272
+
273
+ /* ─── Links in prose (purple underline like Clerk) ─────────────────── */
274
+
275
+ .fd-docs-content a:not(.fd-page-nav-card):not([class]) {
276
+ text-decoration: underline;
277
+ text-underline-offset: 3px;
278
+ text-decoration-color: var(--color-fd-primary);
279
+ text-decoration-thickness: 1.5px;
280
+ font-weight: 500;
281
+ color: var(--color-fd-primary);
282
+ transition: opacity 150ms;
283
+ }
284
+
285
+ .fd-docs-content a:not(.fd-page-nav-card):not([class]):hover {
286
+ opacity: 0.8;
287
+ }
288
+
289
+ /* ─── Tables (clean, rounded like Clerk) ───────────────────────────── */
290
+
291
+ .fd-docs-content table {
292
+ border-collapse: separate;
293
+ border-spacing: 0;
294
+ background: var(--color-fd-card);
295
+ border-radius: 0.75rem;
296
+ border: 1px solid var(--color-fd-border);
297
+ overflow: hidden;
298
+ width: 100%;
299
+ }
300
+
301
+ .fd-docs-content th {
302
+ background: var(--color-fd-muted);
303
+ font-weight: 600;
304
+ font-size: 0.8125rem;
305
+ text-transform: uppercase;
306
+ letter-spacing: 0.03em;
307
+ color: var(--color-fd-muted-foreground);
308
+ }
309
+
310
+ .fd-docs-content th,
311
+ .fd-docs-content td {
312
+ padding: 0.75rem 1rem;
313
+ border-bottom: 1px solid var(--color-fd-border);
314
+ font-size: 0.875rem;
315
+ }
316
+
317
+ .fd-docs-content tr:last-child td {
318
+ border-bottom: none;
319
+ }
320
+
321
+ /* ─── Blockquotes (purple left border like Clerk) ──────────────────── */
322
+
323
+ .fd-docs-content blockquote {
324
+ border-left: 3px solid var(--color-fd-primary);
325
+ padding-left: 1rem;
326
+ color: var(--color-fd-muted-foreground);
327
+ font-style: normal;
328
+ margin: 1rem 0;
329
+ }
330
+
331
+ /* ─── Horizontal rule ──────────────────────────────────────────────── */
332
+
333
+ .fd-docs-content hr {
334
+ border-color: var(--color-fd-border);
335
+ }
336
+
337
+ /* ─── Code blocks (Clerk-style dark, no radius on inner, rounded wrapper) */
338
+
339
+ figure.shiki {
340
+ border-radius: 0.625rem;
341
+ overflow: hidden;
342
+ border: 1px solid var(--color-fd-border);
343
+ }
344
+
345
+ :root figure.shiki {
346
+ border-color: hsl(240, 6%, 88%);
347
+ }
348
+
349
+ .dark figure.shiki {
350
+ border-color: hsl(240, 5%, 20%);
351
+ }
352
+
353
+ /* ─── Tabs (Clerk code tab style) ───────────────────────────────────── */
354
+
355
+ [role="tablist"] {
356
+ border-bottom: 1px solid var(--color-fd-border);
357
+ }
358
+
359
+ [role="tab"] {
360
+ font-size: 0.8125rem;
361
+ font-weight: 450;
362
+ padding: 0.5rem 0.875rem;
363
+ border-radius: 0;
364
+ color: var(--color-fd-muted-foreground);
365
+ border-bottom: 2px solid transparent;
366
+ transition:
367
+ color 150ms,
368
+ border-color 150ms;
369
+ }
370
+
371
+ [role="tab"][aria-selected="true"],
372
+ [role="tab"][data-state="active"] {
373
+ color: var(--color-fd-foreground);
374
+ border-bottom-color: var(--color-fd-primary);
375
+ font-weight: 500;
376
+ }
377
+
378
+ /* ─── Callout (clean, subtle) ───────────────────────────────────────── */
379
+
380
+ [style*="--callout-color"] {
381
+ border-radius: 0.625rem;
382
+ border-width: 1px;
383
+ }
384
+
385
+ /* ─── Accordion ────────────────────────────────────────────────────── */
386
+
387
+ details {
388
+ border: 1px solid var(--color-fd-border);
389
+ border-radius: 0.625rem;
390
+ padding: 0;
391
+ margin: 0.75rem 0;
392
+ overflow: hidden;
393
+ }
394
+
395
+ details summary {
396
+ padding: 0.75rem 1rem;
397
+ font-weight: 500;
398
+ font-size: 0.9375rem;
399
+ cursor: pointer;
400
+ color: var(--color-fd-foreground);
401
+ background: var(--color-fd-secondary);
402
+ transition: background 150ms;
403
+ }
404
+
405
+ details summary:hover {
406
+ background: var(--color-fd-accent);
407
+ }
408
+
409
+ details[open] summary {
410
+ border-bottom: 1px solid var(--color-fd-border);
411
+ }
412
+
413
+ details > :not(summary) {
414
+ padding: 0.75rem 1rem;
415
+ }
416
+
417
+ /* ─── Steps indicator (numbered circles like Clerk) ─────────────────── */
418
+
419
+ [data-type="step"] {
420
+ counter-increment: step;
421
+ position: relative;
422
+ padding-left: 2.5rem;
423
+ }
424
+
425
+ [data-type="step"]::before {
426
+ content: counter(step);
427
+ position: absolute;
428
+ left: 0;
429
+ top: 0.125rem;
430
+ width: 1.5rem;
431
+ height: 1.5rem;
432
+ border-radius: 9999px;
433
+ background: var(--color-fd-primary);
434
+ color: var(--color-fd-primary-foreground);
435
+ font-size: 0.75rem;
436
+ font-weight: 600;
437
+ display: flex;
438
+ align-items: center;
439
+ justify-content: center;
440
+ }
441
+
442
+ /* ─── Omni Command Palette (shiny theme) ─────────────────────────── */
443
+
444
+ .omni-content {
445
+ border-radius: 0.875rem;
446
+ border: 1px solid var(--color-fd-border);
447
+ background: var(--color-fd-popover);
448
+ box-shadow:
449
+ 0 24px 80px -12px rgba(0, 0, 0, 0.12),
450
+ 0 8px 30px rgba(0, 0, 0, 0.08);
451
+ }
452
+
453
+ .omni-item {
454
+ border-radius: 0.5rem;
455
+ }
456
+
457
+ .omni-item-active {
458
+ background: color-mix(in srgb, var(--color-fd-primary) 10%, transparent);
459
+ }
460
+
461
+ .omni-highlight {
462
+ background: color-mix(in srgb, var(--color-fd-primary) 20%, transparent);
463
+ color: var(--color-fd-primary);
464
+ }
465
+
466
+ .omni-search-input:focus {
467
+ caret-color: var(--color-fd-primary);
468
+ }
469
+
470
+ /* ─── TOC (shiny) ───────────────────────────────────────────────────── */
471
+
472
+ .toc-thumb {
473
+ background: var(--color-fd-border);
474
+ opacity: 1;
475
+ }
476
+
477
+ #nd-toc a[data-active="true"] {
478
+ box-shadow: inset 2px 0 0 var(--color-fd-primary);
479
+ color: var(--color-fd-primary);
480
+ }
481
+
482
+ #nd-toc a[data-active="false"] {
483
+ box-shadow: none;
484
+ }
485
+
486
+ /* ─── Page footer (shiny) ───────────────────────────────────────────── */
487
+
488
+ .fd-page-footer {
489
+ border-top: 1px solid var(--color-fd-border);
490
+ }
491
+
492
+ /* ─── Scrollbar (subtle) ────────────────────────────────────────────── */
493
+
494
+ .fd-sidebar::-webkit-scrollbar {
495
+ width: 4px;
496
+ }
497
+
498
+ .fd-sidebar::-webkit-scrollbar-thumb {
499
+ background: var(--color-fd-border);
500
+ border-radius: 4px;
501
+ }
502
+
503
+ .fd-sidebar::-webkit-scrollbar-track {
504
+ background: transparent;
505
+ }