@odla-ai/ui 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.
Files changed (43) hide show
  1. package/README.md +88 -0
  2. package/css/components/buttons.css +118 -0
  3. package/css/components/cards.css +66 -0
  4. package/css/components/chart.css +24 -0
  5. package/css/components/chat.css +167 -0
  6. package/css/components/feedback.css +77 -0
  7. package/css/components/forms.css +132 -0
  8. package/css/components/nav.css +96 -0
  9. package/css/components/table.css +34 -0
  10. package/css/tokens.css +138 -0
  11. package/dist/index.d.ts +50 -0
  12. package/dist/index.js +72 -0
  13. package/dist/index.js.map +1 -0
  14. package/fonts/editorial.css +46 -0
  15. package/fonts/fira-code.css +2 -0
  16. package/fonts/lora.css +2 -0
  17. package/fonts/plex.css +4 -0
  18. package/fonts/satoshi.css +2 -0
  19. package/fonts/system.css +3 -0
  20. package/index.css +14 -0
  21. package/js/canvas.js +113 -0
  22. package/js/index.js +24 -0
  23. package/js/palette.js +37 -0
  24. package/js/theme.js +51 -0
  25. package/js/tokens.js +104 -0
  26. package/llms.txt +201 -0
  27. package/odla-ui.css +863 -0
  28. package/package.json +73 -0
  29. package/themes/chalk/styles.css +720 -0
  30. package/themes/chalk/theme.json +6 -0
  31. package/themes/chalk/ui.css +51 -0
  32. package/themes/clay/styles.css +726 -0
  33. package/themes/clay/theme.json +6 -0
  34. package/themes/clay/ui.css +40 -0
  35. package/themes/juniper/styles.css +660 -0
  36. package/themes/juniper/theme.json +6 -0
  37. package/themes/juniper/ui.css +50 -0
  38. package/themes/paper/styles.css +129 -0
  39. package/themes/paper/theme.json +6 -0
  40. package/themes/paper/ui.css +30 -0
  41. package/themes/salt/styles.css +728 -0
  42. package/themes/salt/theme.json +6 -0
  43. package/themes/salt/ui.css +48 -0
@@ -0,0 +1,720 @@
1
+ /* ══════════════════════════════════════════════════════════════
2
+ CHALK — chalkboard on graph paper
3
+ Cormorant display · Spectral body · JetBrains Mono chrome
4
+ Dark: chalk on a blackboard grid, copper + cerulean accents.
5
+ Light: pencil on daylight graph paper, same grid.
6
+ Flat, sharp corners, hairline borders, glow-not-shadow.
7
+ ══════════════════════════════════════════════════════════════ */
8
+ @import url("https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,600;0,700;1,400&family=Instrument+Sans:wght@500;700&family=JetBrains+Mono:wght@300;400;500&family=Spectral:ital,wght@0,300;0,400;0,500;1,300;1,400&display=swap");
9
+
10
+ /* ─── Tokens ─── */
11
+ :root {
12
+ --bg: #f4f1ea;
13
+ --grid-line: rgba(70, 90, 120, 0.07);
14
+ --grid-major: rgba(70, 90, 120, 0.13);
15
+ --vignette: transparent;
16
+ --text: #23252b;
17
+ --text-dim: rgba(35, 37, 43, 0.62);
18
+ --text-faint: rgba(35, 37, 43, 0.4);
19
+ --accent: #a55f28;
20
+ --accent-border: rgba(165, 95, 40, 0.35);
21
+ --accent-glow: rgba(165, 95, 40, 0.08);
22
+ --accent-2: #0a7d99;
23
+ --border: rgba(35, 37, 43, 0.14);
24
+
25
+ --code-bg: rgba(35, 37, 43, 0.045);
26
+ --code-text: #2b2d33;
27
+ --hl-keyword: #a55f28;
28
+ --hl-string: #0a7d99;
29
+ --hl-comment: #8b8677;
30
+ --hl-number: #a3790f;
31
+ --hl-title: #23252b;
32
+ --hl-attr: #3d6f8e;
33
+ --hl-type: #0d6e86;
34
+ --hl-meta: #8c6a3f;
35
+ --hl-addition: #15803d;
36
+ --hl-deletion: #b91c1c;
37
+
38
+ --font-display: "Cormorant Garamond", serif;
39
+ --font-body: "Spectral", Georgia, serif;
40
+ --font-mono: "JetBrains Mono", ui-monospace, monospace;
41
+ --font-wordmark: "Instrument Sans", sans-serif;
42
+
43
+ --max-width: 760px;
44
+ --header-width: var(--max-width);
45
+ }
46
+
47
+ [data-theme="dark"] {
48
+ --bg: #0f1014;
49
+ --grid-line: rgba(255, 255, 255, 0.025);
50
+ --grid-major: rgba(255, 255, 255, 0.045);
51
+ --vignette: rgba(0, 0, 0, 0.6);
52
+ --text: rgba(235, 230, 220, 0.92);
53
+ --text-dim: rgba(235, 230, 220, 0.55);
54
+ --text-faint: rgba(235, 230, 220, 0.4);
55
+ --accent: #c47a3a;
56
+ --accent-border: rgba(196, 122, 58, 0.35);
57
+ --accent-glow: rgba(196, 122, 58, 0.08);
58
+ --accent-2: #0ea5c9;
59
+ --border: rgba(235, 230, 220, 0.12);
60
+
61
+ --code-bg: rgba(235, 230, 220, 0.04);
62
+ --code-text: rgba(235, 230, 220, 0.88);
63
+ --hl-keyword: #c47a3a;
64
+ --hl-string: #6cc9e0;
65
+ --hl-comment: rgba(235, 230, 220, 0.42);
66
+ --hl-number: #d4a017;
67
+ --hl-title: #ebe6dc;
68
+ --hl-attr: #8cd2eb;
69
+ --hl-type: #45b8d4;
70
+ --hl-meta: rgba(220, 180, 145, 0.8);
71
+ --hl-addition: #22c55e;
72
+ --hl-deletion: #ef4444;
73
+ }
74
+
75
+ @media (prefers-color-scheme: dark) {
76
+ :root:not([data-theme="light"]) {
77
+ --bg: #0f1014;
78
+ --grid-line: rgba(255, 255, 255, 0.025);
79
+ --grid-major: rgba(255, 255, 255, 0.045);
80
+ --vignette: rgba(0, 0, 0, 0.6);
81
+ --text: rgba(235, 230, 220, 0.92);
82
+ --text-dim: rgba(235, 230, 220, 0.55);
83
+ --text-faint: rgba(235, 230, 220, 0.4);
84
+ --accent: #c47a3a;
85
+ --accent-border: rgba(196, 122, 58, 0.35);
86
+ --accent-glow: rgba(196, 122, 58, 0.08);
87
+ --accent-2: #0ea5c9;
88
+ --border: rgba(235, 230, 220, 0.12);
89
+
90
+ --code-bg: rgba(235, 230, 220, 0.04);
91
+ --code-text: rgba(235, 230, 220, 0.88);
92
+ --hl-keyword: #c47a3a;
93
+ --hl-string: #6cc9e0;
94
+ --hl-comment: rgba(235, 230, 220, 0.42);
95
+ --hl-number: #d4a017;
96
+ --hl-title: #ebe6dc;
97
+ --hl-attr: #8cd2eb;
98
+ --hl-type: #45b8d4;
99
+ --hl-meta: rgba(220, 180, 145, 0.8);
100
+ --hl-addition: #22c55e;
101
+ --hl-deletion: #ef4444;
102
+ }
103
+ }
104
+
105
+ /* ─── Base + graph-paper backdrop ─── */
106
+ * {
107
+ box-sizing: border-box;
108
+ }
109
+
110
+ html {
111
+ font-family: var(--font-body);
112
+ font-size: 17px;
113
+ line-height: 1.7;
114
+ color: var(--text);
115
+ background-color: var(--bg);
116
+ transition: color 0.2s ease, background-color 0.2s ease;
117
+ }
118
+
119
+ body {
120
+ margin: 0;
121
+ min-height: 100vh;
122
+ display: flex;
123
+ flex-direction: column;
124
+ }
125
+
126
+ body::before {
127
+ content: "";
128
+ position: fixed;
129
+ inset: 0;
130
+ z-index: -2;
131
+ background-image:
132
+ linear-gradient(var(--grid-line) 1px, transparent 1px),
133
+ linear-gradient(90deg, var(--grid-line) 1px, transparent 1px),
134
+ linear-gradient(var(--grid-major) 1px, transparent 1px),
135
+ linear-gradient(90deg, var(--grid-major) 1px, transparent 1px);
136
+ background-size: 20px 20px, 20px 20px, 100px 100px, 100px 100px;
137
+ background-position: -1px -1px;
138
+ }
139
+
140
+ body::after {
141
+ content: "";
142
+ position: fixed;
143
+ inset: 0;
144
+ z-index: -1;
145
+ background: radial-gradient(ellipse at 50% 40%, transparent 30%, var(--vignette) 100%);
146
+ pointer-events: none;
147
+ }
148
+
149
+ main {
150
+ width: 100%;
151
+ max-width: var(--max-width);
152
+ margin: 0 auto;
153
+ padding: 3rem 1.5rem 5rem;
154
+ flex: 1;
155
+ }
156
+
157
+ /* ─── Header ─── */
158
+ .site-header {
159
+ position: sticky;
160
+ top: 0;
161
+ z-index: 100;
162
+ background: var(--bg);
163
+ border-bottom: 1px solid var(--border);
164
+ padding: 0.9rem calc(max(0px, (100% - var(--header-width)) / 2) + 1.5rem);
165
+ display: flex;
166
+ align-items: center;
167
+ justify-content: space-between;
168
+ gap: 1rem;
169
+ flex-wrap: wrap;
170
+ }
171
+
172
+ .site-title {
173
+ font-family: var(--font-wordmark);
174
+ font-size: 1.35rem;
175
+ font-weight: 700;
176
+ letter-spacing: -0.01em;
177
+ color: var(--text);
178
+ text-decoration: none;
179
+ }
180
+
181
+ .site-title:hover {
182
+ color: var(--accent);
183
+ }
184
+
185
+ .site-nav {
186
+ display: flex;
187
+ align-items: baseline;
188
+ gap: 1.5rem;
189
+ }
190
+
191
+ .site-nav a {
192
+ font-family: var(--font-mono);
193
+ font-size: 0.62rem;
194
+ letter-spacing: 0.3em;
195
+ text-indent: 0.3em;
196
+ text-transform: uppercase;
197
+ color: var(--text-dim);
198
+ text-decoration: none;
199
+ transition: color 0.3s;
200
+ }
201
+
202
+ .site-nav a:hover {
203
+ color: var(--accent);
204
+ }
205
+
206
+ .theme-toggle {
207
+ border: 1px solid var(--border);
208
+ background: none;
209
+ cursor: pointer;
210
+ padding: 0.2rem 0.5rem;
211
+ font-size: 0.8rem;
212
+ color: var(--text-dim);
213
+ line-height: 1;
214
+ transition: color 0.3s, border-color 0.3s, box-shadow 0.3s;
215
+ }
216
+
217
+ .theme-toggle:hover {
218
+ color: var(--accent);
219
+ border-color: var(--accent-border);
220
+ box-shadow: 0 0 30px var(--accent-glow);
221
+ }
222
+
223
+ .theme-toggle-icon::before {
224
+ content: "☾";
225
+ }
226
+
227
+ [data-theme="dark"] .theme-toggle-icon::before {
228
+ content: "☀";
229
+ }
230
+
231
+ @media (prefers-color-scheme: dark) {
232
+ :root:not([data-theme="light"]) .theme-toggle-icon::before {
233
+ content: "☀";
234
+ }
235
+ }
236
+
237
+ /* ─── Footer ─── */
238
+ .site-footer {
239
+ width: 100%;
240
+ max-width: var(--max-width);
241
+ margin: 0 auto;
242
+ padding: 1.5rem;
243
+ border-top: 1px solid var(--border);
244
+ font-family: var(--font-mono);
245
+ font-size: 0.62rem;
246
+ letter-spacing: 0.15em;
247
+ text-transform: uppercase;
248
+ color: var(--text-faint);
249
+ }
250
+
251
+ .site-footer p {
252
+ margin: 0;
253
+ }
254
+
255
+ /* ─── Post list (home) ─── */
256
+ .post-list {
257
+ display: flex;
258
+ flex-direction: column;
259
+ gap: 2.5rem;
260
+ }
261
+
262
+ .post-item {
263
+ border: 1px solid var(--border);
264
+ padding: 1.75rem;
265
+ background: color-mix(in srgb, var(--bg) 55%, transparent);
266
+ transition: border-color 0.3s, box-shadow 0.3s;
267
+ }
268
+
269
+ .post-item:hover {
270
+ border-color: var(--accent-border);
271
+ box-shadow: 0 0 40px var(--accent-glow);
272
+ }
273
+
274
+ a.post-title {
275
+ font-family: var(--font-display);
276
+ font-size: clamp(1.8rem, 4.5vw, 2.4rem);
277
+ font-weight: 700;
278
+ line-height: 1.05;
279
+ color: var(--text);
280
+ text-decoration: none;
281
+ transition: color 0.3s;
282
+ }
283
+
284
+ a.post-title:hover {
285
+ color: var(--accent);
286
+ }
287
+
288
+ .post-meta {
289
+ display: flex;
290
+ align-items: baseline;
291
+ flex-wrap: wrap;
292
+ gap: 1.25rem;
293
+ margin-top: 0.9rem;
294
+ font-family: var(--font-mono);
295
+ font-size: 0.62rem;
296
+ letter-spacing: 0.2em;
297
+ text-transform: uppercase;
298
+ color: var(--text-faint);
299
+ }
300
+
301
+ .post-tags {
302
+ display: inline;
303
+ }
304
+
305
+ .post-tag {
306
+ color: var(--accent-2);
307
+ text-decoration: none;
308
+ transition: color 0.3s;
309
+ }
310
+
311
+ .post-tag:hover {
312
+ color: var(--accent);
313
+ }
314
+
315
+ .post-description {
316
+ margin: 1rem 0 0;
317
+ font-size: 0.95rem;
318
+ font-weight: 300;
319
+ line-height: 1.85;
320
+ color: var(--text-dim);
321
+ }
322
+
323
+ /* ─── Single post / page ─── */
324
+ h1.post-title,
325
+ .page-title {
326
+ font-family: var(--font-display);
327
+ font-size: clamp(2.4rem, 7vw, 3.75rem);
328
+ font-weight: 700;
329
+ line-height: 0.95;
330
+ color: var(--text);
331
+ margin: 0 0 1rem;
332
+ }
333
+
334
+ .post > .post-header {
335
+ margin-bottom: 2.5rem;
336
+ padding-bottom: 1.5rem;
337
+ border-bottom: 1px solid var(--border);
338
+ }
339
+
340
+ /* ─── Prose ─── */
341
+ .prose {
342
+ font-size: 1rem;
343
+ font-weight: 300;
344
+ line-height: 1.85;
345
+ overflow-wrap: break-word;
346
+ }
347
+
348
+ .prose h1,
349
+ .prose h2,
350
+ .prose h3,
351
+ .prose h4,
352
+ .prose h5,
353
+ .prose h6 {
354
+ font-family: var(--font-display);
355
+ font-weight: 700;
356
+ line-height: 1.1;
357
+ color: var(--text);
358
+ margin: 2.5rem 0 0.75rem;
359
+ }
360
+
361
+ .prose h1 { font-size: 2rem; }
362
+ .prose h2 { font-size: 1.7rem; }
363
+ .prose h3 { font-size: 1.4rem; }
364
+ .prose h4 { font-size: 1.2rem; }
365
+
366
+ .prose p {
367
+ margin: 0 0 1.5rem;
368
+ }
369
+
370
+ .prose a {
371
+ color: var(--accent);
372
+ text-decoration: none;
373
+ border-bottom: 1px solid var(--accent-border);
374
+ transition: color 0.3s, border-color 0.3s;
375
+ }
376
+
377
+ .prose a:hover {
378
+ color: var(--text);
379
+ border-bottom-color: var(--text-faint);
380
+ }
381
+
382
+ .prose ul,
383
+ .prose ol {
384
+ margin: 0 0 1.5rem;
385
+ padding-left: 1.5rem;
386
+ }
387
+
388
+ .prose li {
389
+ margin-bottom: 0.5rem;
390
+ }
391
+
392
+ .prose blockquote {
393
+ margin: 2.25rem 0;
394
+ padding-left: 1.5rem;
395
+ border-left: 2px solid var(--accent);
396
+ font-style: italic;
397
+ color: var(--text-dim);
398
+ }
399
+
400
+ .prose img {
401
+ max-width: 100%;
402
+ height: auto;
403
+ border: 1px solid var(--border);
404
+ }
405
+
406
+ .prose hr {
407
+ border: none;
408
+ border-top: 1px solid var(--border);
409
+ margin: 3rem 0;
410
+ }
411
+
412
+ .prose table {
413
+ width: 100%;
414
+ border-collapse: collapse;
415
+ margin: 1.75rem 0;
416
+ font-size: 0.85rem;
417
+ font-variant-numeric: tabular-nums;
418
+ }
419
+
420
+ .prose th,
421
+ .prose td {
422
+ text-align: left;
423
+ padding: 0.6rem 0.5rem;
424
+ border-bottom: 1px solid var(--border);
425
+ }
426
+
427
+ .prose th {
428
+ font-family: var(--font-mono);
429
+ font-size: 0.62rem;
430
+ font-weight: 500;
431
+ letter-spacing: 0.15em;
432
+ text-transform: uppercase;
433
+ color: var(--text-faint);
434
+ }
435
+
436
+ /* ─── Code ─── */
437
+ code {
438
+ font-family: var(--font-mono);
439
+ font-size: 0.85em;
440
+ background-color: var(--code-bg);
441
+ color: var(--code-text);
442
+ padding: 0.125em 0.3em;
443
+ border: 1px solid var(--border);
444
+ }
445
+
446
+ pre {
447
+ font-family: var(--font-mono);
448
+ font-size: 0.76rem;
449
+ font-weight: 400;
450
+ line-height: 1.7;
451
+ background-color: var(--code-bg);
452
+ border: 1px solid var(--border);
453
+ padding: 1.25rem;
454
+ overflow-x: auto;
455
+ margin: 0 0 1.5rem;
456
+ }
457
+
458
+ pre code {
459
+ background: none;
460
+ border: none;
461
+ padding: 0;
462
+ font-size: 1em;
463
+ }
464
+
465
+ .hljs { color: var(--code-text); }
466
+ .hljs-keyword, .hljs-selector-tag, .hljs-tag { color: var(--hl-keyword); }
467
+ .hljs-string, .hljs-regexp { color: var(--hl-string); }
468
+ .hljs-comment, .hljs-quote { color: var(--hl-comment); font-style: italic; }
469
+ .hljs-number, .hljs-literal, .hljs-symbol, .hljs-bullet { color: var(--hl-number); }
470
+ .hljs-title, .hljs-section, .hljs-name { color: var(--hl-title); font-weight: 600; }
471
+ .hljs-attr, .hljs-attribute, .hljs-variable, .hljs-template-variable, .hljs-property { color: var(--hl-attr); }
472
+ .hljs-type, .hljs-built_in, .hljs-selector-class, .hljs-selector-id { color: var(--hl-type); }
473
+ .hljs-meta, .hljs-doctag { color: var(--hl-meta); }
474
+ .hljs-addition { color: var(--hl-addition); }
475
+ .hljs-deletion { color: var(--hl-deletion); }
476
+ .hljs-emphasis { font-style: italic; }
477
+ .hljs-strong { font-weight: 700; }
478
+
479
+ /* ─── Archive & tags ─── */
480
+ .archive-year {
481
+ font-family: var(--font-mono);
482
+ font-size: clamp(3rem, 8vw, 5rem);
483
+ font-weight: 300;
484
+ line-height: 1;
485
+ margin: 3rem 0 1.25rem;
486
+ -webkit-text-stroke: 1px var(--text-dim);
487
+ -webkit-text-fill-color: transparent;
488
+ color: var(--text-dim);
489
+ }
490
+
491
+ .archive-list {
492
+ list-style: none;
493
+ margin: 0;
494
+ padding: 0;
495
+ display: flex;
496
+ flex-direction: column;
497
+ gap: 0.75rem;
498
+ }
499
+
500
+ .archive-item {
501
+ display: flex;
502
+ align-items: baseline;
503
+ gap: 1.25rem;
504
+ }
505
+
506
+ .archive-item time {
507
+ flex: none;
508
+ min-width: 9rem;
509
+ font-family: var(--font-mono);
510
+ font-size: 0.62rem;
511
+ letter-spacing: 0.15em;
512
+ text-transform: uppercase;
513
+ color: var(--text-faint);
514
+ }
515
+
516
+ .archive-item a {
517
+ font-family: var(--font-display);
518
+ font-size: 1.2rem;
519
+ font-weight: 600;
520
+ color: var(--text);
521
+ text-decoration: none;
522
+ transition: color 0.3s;
523
+ }
524
+
525
+ .archive-item a:hover {
526
+ color: var(--accent);
527
+ }
528
+
529
+ .tag-cloud {
530
+ list-style: none;
531
+ margin: 0;
532
+ padding: 0;
533
+ display: flex;
534
+ flex-wrap: wrap;
535
+ gap: 0.75rem;
536
+ }
537
+
538
+ .tag-cloud li {
539
+ border: 1px solid var(--border);
540
+ padding: 0.4rem 0.9rem;
541
+ transition: border-color 0.3s, box-shadow 0.3s;
542
+ }
543
+
544
+ .tag-cloud li:hover {
545
+ border-color: var(--accent-border);
546
+ box-shadow: 0 0 30px var(--accent-glow);
547
+ }
548
+
549
+ .tag-cloud .post-tag {
550
+ font-family: var(--font-mono);
551
+ font-size: 0.62rem;
552
+ letter-spacing: 0.2em;
553
+ text-transform: uppercase;
554
+ }
555
+
556
+ .tag-count {
557
+ font-family: var(--font-mono);
558
+ font-size: 0.62rem;
559
+ color: var(--text-faint);
560
+ }
561
+
562
+ /* ─── Responsive ─── */
563
+ @media (max-width: 640px) {
564
+ html {
565
+ font-size: 16px;
566
+ }
567
+
568
+ .site-nav {
569
+ gap: 1rem;
570
+ }
571
+
572
+ .archive-item {
573
+ flex-direction: column;
574
+ gap: 0.15rem;
575
+ }
576
+ }
577
+
578
+ /* ─── Footnotes & excerpts ─── */
579
+ .footnotes {
580
+ margin-top: 3rem;
581
+ padding-top: 1rem;
582
+ border-top: 1px solid var(--border);
583
+ font-size: 0.85em;
584
+ }
585
+
586
+ .footnote-ref a {
587
+ text-decoration: none;
588
+ }
589
+
590
+ .footnote-backref {
591
+ text-decoration: none;
592
+ }
593
+
594
+ .post-excerpt {
595
+ margin-top: 1rem;
596
+ }
597
+
598
+ .read-more a {
599
+ font-size: 0.85em;
600
+ }
601
+
602
+ .site-footer a {
603
+ color: inherit;
604
+ text-decoration: underline;
605
+ text-decoration-thickness: 1px;
606
+ text-underline-offset: 0.2em;
607
+ }
608
+
609
+ .site-footer a:hover {
610
+ color: var(--accent);
611
+ }
612
+
613
+ .site-footer .copyright a {
614
+ text-decoration: none;
615
+ }
616
+
617
+ /* ─── Scroll position indicator (nav bar) ─── */
618
+ .scroll-indicator {
619
+ position: absolute;
620
+ bottom: -1px;
621
+ left: 0;
622
+ right: 0;
623
+ height: 1px;
624
+ pointer-events: none;
625
+ }
626
+
627
+ .scroll-line {
628
+ position: absolute;
629
+ bottom: 0;
630
+ left: 0;
631
+ width: 0;
632
+ height: 1px;
633
+ background: var(--accent);
634
+ }
635
+
636
+ .scroll-dot {
637
+ position: absolute;
638
+ left: 0;
639
+ bottom: -2px;
640
+ width: 5px;
641
+ height: 5px;
642
+ border-radius: 50%;
643
+ background: var(--accent);
644
+ transform: translateX(-50%);
645
+ }
646
+
647
+ [id] {
648
+ scroll-margin-top: 5rem;
649
+ }
650
+
651
+ /* ─── Recent-posts sidebar (config.sidebarRecentPosts) ─── */
652
+ .content-wrapper {
653
+ display: flex;
654
+ justify-content: center;
655
+ gap: 2.5rem;
656
+ flex: 1;
657
+ }
658
+
659
+ .content-wrapper main {
660
+ margin: 0;
661
+ }
662
+
663
+ .recent-posts-sidebar {
664
+ width: 280px;
665
+ flex-shrink: 0;
666
+ display: none;
667
+ margin-top: 2.5rem;
668
+ padding-right: 1.25rem;
669
+ }
670
+
671
+ @media (min-width: 1200px) {
672
+ .recent-posts-sidebar {
673
+ display: block;
674
+ }
675
+ }
676
+
677
+ .recent-posts-sidebar .section-title {
678
+ font-size: 0.7rem;
679
+ text-transform: uppercase;
680
+ letter-spacing: 0.1em;
681
+ color: var(--text-dim);
682
+ margin: 0 0 0.5rem;
683
+ }
684
+
685
+ .recent-posts {
686
+ display: flex;
687
+ flex-direction: column;
688
+ gap: 0.5rem;
689
+ }
690
+
691
+ .recent-posts .post-link {
692
+ display: flex;
693
+ flex-direction: column;
694
+ gap: 0.125rem;
695
+ padding: 0.375rem 0;
696
+ color: var(--text);
697
+ text-decoration: none;
698
+ }
699
+
700
+ .recent-posts .post-title {
701
+ font-size: 0.72rem;
702
+ line-height: 1.3;
703
+ }
704
+
705
+ .recent-posts .post-link:hover .post-title {
706
+ color: var(--accent);
707
+ }
708
+
709
+ .recent-posts .post-date {
710
+ font-size: 0.62rem;
711
+ color: var(--text-dim);
712
+ }
713
+
714
+ /* Header aligns with the content column; when the sidebar is on (wide
715
+ viewports) the centered column is wider by sidebar + gap. */
716
+ @media (min-width: 1200px) {
717
+ body.has-sidebar .site-header {
718
+ --header-width: calc(var(--max-width) + 280px + 2.5rem);
719
+ }
720
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "name": "chalk",
3
+ "label": "Chalk",
4
+ "description": "Chalkboard on graph paper. Cormorant Garamond display, Spectral body, JetBrains Mono chrome, copper + cerulean accents, flat hairline cards, outline numerals. Dark is the chalkboard; light is pencil on daylight graph paper. Drawn from o16g.com.",
5
+ "fonts": "Cormorant Garamond, Spectral, JetBrains Mono, Instrument Sans (Google Fonts)"
6
+ }