meowpress 0.3.0-alpha.2 → 0.3.0-alpha.4

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/dist/src/theme.js CHANGED
@@ -1,2229 +1,484 @@
1
- import { css, defineOptions, defineTheme, defineTokens } from "meowcss";
2
- export const blogOptions = defineOptions("blog", {});
3
- export const blogTokens = defineTokens("blog", {
4
- bg: ["#faf8f3", "#191816"],
5
- ink: ["#26221e", "#f1ece3"],
6
- inkSoft: ["#625c55", "#c9c1b7"],
7
- inkDim: ["#81786f", "#aaa097"],
8
- inkFaint: ["#c9c1b7", "#615a52"],
9
- line: ["#ded8cf", "#3e3933"],
10
- accent: ["#d24b32", "#ef7055"],
11
- accentSoft: ["#f3ded5", "#3b2621"],
12
- card: ["#fffdf8", "#24211e"],
13
- doodleBlue: ["#73aabd", "#86c4d6"],
14
- markerYellow: ["#e5b958", "#e8c26d"],
15
- onAccent: ["#fffaf5", "#1d1613"],
16
- focusRing: ["rgba(210, 75, 50, 0.28)", "rgba(239, 112, 85, 0.34)"],
17
- washRed: ["rgba(210, 75, 50, 0.04)", "rgba(239, 112, 85, 0.075)"],
18
- washBlue: ["rgba(115, 170, 189, 0.045)", "rgba(134, 196, 214, 0.055)"],
19
- heroWash: ["rgba(210, 75, 50, 0.055)", "rgba(239, 112, 85, 0.13)"],
20
- doodleLoopFill: ["rgba(255, 253, 248, 0.68)", "rgba(47, 42, 37, 0.88)"],
21
- cardSheen: ["rgba(255, 255, 255, 0.34)", "rgba(255, 255, 255, 0.025)"],
22
- cardInset: ["rgba(255, 255, 255, 0.46)", "rgba(255, 255, 255, 0.035)"],
23
- cardShadow: ["rgba(69, 54, 40, 0.035)", "rgba(0, 0, 0, 0.17)"],
24
- cardShadowHover: ["rgba(69, 54, 40, 0.07)", "rgba(0, 0, 0, 0.28)"],
25
- postBorderHover: ["#c8beb2", "#61584f"],
26
- thoughtCard: ["#fdf8ee", "#28231e"],
27
- thoughtBorder: ["#d8cbbf", "#4a4038"],
28
- thoughtBorderHover: ["#c8b8aa", "#68584d"],
29
- filterBg: ["rgba(255, 253, 248, 0.48)", "rgba(36, 33, 30, 0.72)"],
30
- filterBorderHover: ["#beb5aa", "#685f56"],
31
- quoteBg: ["rgba(243, 222, 213, 0.34)", "rgba(90, 48, 39, 0.3)"],
32
- codeBg: ["#fffdf8", "#292622"],
33
- preBg: ["#26221e", "#0f0f0e"],
34
- preInk: ["#f2ece2", "#eee7dc"],
35
- relatedBg: ["rgba(255, 253, 248, 0.32)", "rgba(36, 33, 30, 0.45)"],
36
- radius: "14px",
37
- fontSans: '"Geist Variable", "Geist", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC", ui-sans-serif, system-ui, sans-serif',
38
- fontMono: '"SF Mono", "Cascadia Code", Menlo, Consolas, ui-monospace, monospace',
39
- paperGrain: "url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160' viewBox='0 0 160 160'%3E%3Cfilter id='grain'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.78' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23grain)' opacity='.065'/%3E%3C/svg%3E\")",
40
- });
41
- const styles = css `
42
- * {
43
- box-sizing: border-box;
44
- margin: 0;
45
- padding: 0;
46
- }
47
-
48
- html {
49
- font-size: 16px;
50
- overflow-x: clip;
51
- scrollbar-color: ${blogTokens.line} transparent;
52
- }
53
-
54
- ::selection {
55
- background: ${blogTokens.accent};
56
- color: ${blogTokens.onAccent};
57
- }
58
-
1
+ import { css, defineTheme } from "meowcss/meowjsx";
2
+ import { journalFonts, journalThemeTokens, standardOptions, standardThemeStyles, ui, uiTokens, } from "meowtail/theme";
3
+ /** Site chrome and the host-owned skill browser; editorial components are painted by Journal. */
4
+ const siteStyles = css `
59
5
  body {
60
- background-color: ${blogTokens.bg};
61
- background-image:
62
- radial-gradient(circle at 8% 4%, ${blogTokens.washRed} 0, transparent 25rem),
63
- radial-gradient(circle at 92% 88%, ${blogTokens.washBlue} 0, transparent 29rem);
64
- background-attachment: fixed;
65
- color: ${blogTokens.ink};
66
- font-family: ${blogTokens.fontSans};
6
+ margin: 0;
7
+ background: ${uiTokens.surface.canvas};
8
+ color: ${uiTokens.ink.primary};
9
+ font-family: ${uiTokens.type.sans};
67
10
  font-optical-sizing: auto;
68
- line-height: 1.85;
69
- overflow-x: clip;
70
11
  -webkit-font-smoothing: antialiased;
71
- text-rendering: optimizeLegibility;
72
12
  }
73
-
74
- /* Top bar: keep the order, but stop looking like a masthead. */
75
- header.site {
13
+ [hidden] {
14
+ display: none !important;
15
+ }
16
+ .site-shell {
17
+ padding: 0 ${uiTokens.space.pageInline};
18
+ }
19
+ .site-header,
20
+ .site-footer {
76
21
  display: flex;
77
22
  align-items: center;
78
23
  justify-content: space-between;
79
- padding: 52px 0 18px;
24
+ gap: ${uiTokens.space.section};
25
+ padding-block: ${uiTokens.space.panel};
26
+ ${ui.text.caption}
80
27
  }
81
-
82
- .site-name {
83
- display: inline-flex;
84
- align-items: center;
85
- color: ${blogTokens.ink};
86
- font-size: 1.08rem;
87
- font-weight: 760;
88
- letter-spacing: 0.01em;
89
- text-decoration: none;
28
+ .site-header {
29
+ border-bottom: ${uiTokens.line.width} solid ${uiTokens.line.edge};
90
30
  }
91
-
92
- .site-name::before {
93
- width: 12px;
94
- height: 12px;
95
- margin-right: 10px;
96
- border-radius: 53% 47% 58% 42%;
97
- background: ${blogTokens.accent};
98
- content: "";
99
- transform: rotate(-9deg);
100
- transition: transform 0.28s cubic-bezier(0.34, 1.56, 0.64, 1);
101
- }
102
-
103
- .site-name:hover::before {
104
- transform: rotate(18deg) scale(1.08);
105
- }
106
-
107
- nav.site-nav {
108
- display: flex;
109
- gap: 24px;
110
- }
111
-
112
- nav.site-nav a {
113
- position: relative;
114
- color: ${blogTokens.inkSoft};
115
- font-size: 0.86rem;
116
- letter-spacing: 0.04em;
117
- text-decoration: none;
118
- transition: color 0.15s;
31
+ .site-footer {
32
+ border-top: ${uiTokens.line.width} solid ${uiTokens.line.edge};
119
33
  }
120
-
121
- nav.site-nav a::after {
122
- position: absolute;
123
- right: 50%;
124
- bottom: -7px;
125
- left: 50%;
126
- height: 2px;
127
- border-radius: 99px;
128
- background: ${blogTokens.accent};
129
- content: "";
130
- transition:
131
- right 0.18s ease,
132
- left 0.18s ease;
133
- }
134
-
135
- nav.site-nav a:hover,
136
- nav.site-nav a.active {
137
- color: ${blogTokens.ink};
138
- }
139
-
140
- nav.site-nav a:hover::after,
141
- nav.site-nav a.active::after {
142
- right: 15%;
143
- left: 15%;
144
- }
145
-
146
- /* Default hero uses its own vector artwork; optional images belong to the site. */
147
- .hero {
148
- position: relative;
149
- display: grid;
150
- grid-template-columns: minmax(0, 1fr) minmax(260px, 0.9fr);
151
- align-items: center;
152
- min-height: 300px;
153
- margin: 16px 0 8px;
34
+ .site-name {
35
+ color: ${uiTokens.ink.primary};
36
+ font-family: ${uiTokens.type.display};
37
+ font-size: ${uiTokens.type.title};
38
+ font-weight: ${uiTokens.type.weight.display};
39
+ line-height: ${uiTokens.type.line.title};
40
+ text-decoration: none;
154
41
  }
155
-
156
- .hero::before {
157
- position: absolute;
158
- z-index: -1;
159
- top: 22px;
160
- right: -52px;
161
- width: 255px;
162
- height: 238px;
163
- border-radius: 49% 51% 45% 55% / 54% 44% 56% 46%;
164
- background: ${blogTokens.heroWash};
165
- content: "";
166
- transform: rotate(-6deg);
167
- }
168
-
169
- .hero-copy {
170
- position: relative;
171
- z-index: 3;
172
- padding: 52px 0;
173
- }
174
-
175
- .hero-copy h1 {
176
- color: ${blogTokens.ink};
177
- font-size: clamp(2rem, 5vw, 2.55rem);
178
- font-weight: 730;
179
- letter-spacing: -0.045em;
180
- line-height: 1.34;
181
- }
182
-
183
- .hero-copy h1 em {
184
- color: ${blogTokens.accent};
185
- font-style: normal;
186
- }
187
-
188
- .hero-work {
189
- position: relative;
42
+ .site-nav {
190
43
  display: flex;
191
- align-items: center;
192
- justify-content: flex-start;
193
- min-height: 250px;
194
- }
195
-
196
- .hero-doodle {
197
- width: 238px;
198
- overflow: visible;
199
- transform: translateX(-5px) rotate(-1deg);
200
- }
201
-
202
- .doodle-loop,
203
- .doodle-page,
204
- .doodle-spine,
205
- .doodle-writing,
206
- .doodle-spark {
207
- fill: none;
208
- stroke: ${blogTokens.ink};
209
- stroke-linecap: round;
210
- stroke-linejoin: round;
211
- }
212
-
213
- .doodle-loop {
214
- fill: ${blogTokens.doodleLoopFill};
215
- stroke-width: 2.7;
216
- }
217
-
218
- .doodle-sun {
219
- fill: ${blogTokens.accent};
220
- stroke: ${blogTokens.ink};
221
- stroke-width: 2.4;
222
- }
223
-
224
- .doodle-page {
225
- fill: ${blogTokens.card};
226
- stroke-width: 2.5;
227
- }
228
-
229
- .doodle-spine {
230
- stroke-width: 2.1;
231
- }
232
-
233
- .doodle-writing {
234
- stroke: ${blogTokens.inkSoft};
235
- stroke-width: 1.45;
236
- opacity: 0.52;
237
- }
238
-
239
- .doodle-dot {
240
- fill: ${blogTokens.doodleBlue};
241
- }
242
-
243
- .doodle-spark {
244
- stroke-width: 2.1;
245
- opacity: 0.66;
246
- }
247
-
248
- .hero-image {
249
- position: absolute;
250
- z-index: 2;
251
- right: -20px;
252
- bottom: 24px;
253
- width: 112px;
254
- height: auto;
255
- pointer-events: none;
256
- }
257
-
258
- /* Home feed: dates are breathing points, not a mechanical timeline. */
259
- .feed {
260
- position: relative;
261
- padding: 8px 0 48px;
262
- }
263
-
264
- .feed-decor {
265
- position: relative;
266
- z-index: 0;
267
- height: 165px;
268
- margin-top: 48px;
269
- pointer-events: none;
270
- }
271
-
272
- .feed-empty .empty-state {
273
- padding-bottom: 10px;
44
+ flex-wrap: wrap;
45
+ gap: ${uiTokens.space.insetBlock};
274
46
  }
275
-
276
- .feed-empty .feed-decor {
277
- margin-top: 6px;
47
+ .site-nav a,
48
+ .site-footer a,
49
+ .skill-back,
50
+ .skill-browser-actions a {
51
+ color: ${uiTokens.ink.secondary};
52
+ text-decoration: none;
278
53
  }
279
-
280
- .feed-image {
281
- position: absolute;
282
- right: -64px;
283
- bottom: -3px;
284
- width: 305px;
285
- height: auto;
54
+ .site-nav a:hover,
55
+ .site-footer a:hover,
56
+ .site-nav a[aria-current="page"],
57
+ .skill-back:hover,
58
+ .skill-browser-actions a:hover {
59
+ color: ${uiTokens.accent.ink};
60
+ text-decoration: underline;
61
+ text-underline-offset: 0.25em;
286
62
  }
287
-
288
- .yarn-doodle {
289
- position: absolute;
290
- bottom: 9px;
291
- left: 8px;
292
- width: 72px;
293
- overflow: visible;
294
- opacity: 0.5;
295
- transform: rotate(-4deg);
296
- }
297
-
298
- .yarn-fill {
299
- fill: ${blogTokens.doodleBlue};
300
- stroke: ${blogTokens.ink};
301
- stroke-width: 1.8;
302
- }
303
-
304
- .yarn-line,
305
- .yarn-tail {
306
- fill: none;
307
- stroke: ${blogTokens.ink};
308
- stroke-width: 1.7;
309
- stroke-linecap: round;
310
- stroke-linejoin: round;
63
+ #main-content {
64
+ padding-block: ${uiTokens.space.pageBlock};
311
65
  }
312
-
313
- .paw-trail {
66
+ .skip-link {
314
67
  position: absolute;
315
- right: 228px;
316
- bottom: 48px;
317
- width: 104px;
318
- overflow: visible;
319
- color: ${blogTokens.inkSoft};
320
- opacity: 0.15;
321
- }
322
-
323
- .paw-print {
324
- fill: currentColor;
325
- }
326
-
327
- .paw-print-accent {
328
- color: ${blogTokens.accent};
329
- }
330
-
331
- @media (prefers-color-scheme: dark) {
332
- .hero-image,
333
- .about .avatar img {
334
- filter: drop-shadow(0 0 1px rgba(241, 236, 227, 0.72))
335
- drop-shadow(0 3px 12px rgba(0, 0, 0, 0.22));
336
- }
337
-
338
- .feed-image {
339
- filter: drop-shadow(1px 0 0 rgba(241, 236, 227, 0.46))
340
- drop-shadow(-1px 0 0 rgba(241, 236, 227, 0.46))
341
- drop-shadow(0 1px 0 rgba(241, 236, 227, 0.46))
342
- drop-shadow(0 -1px 0 rgba(241, 236, 227, 0.46));
343
- }
344
- }
345
-
346
- .day {
347
- position: relative;
68
+ top: 0;
69
+ left: ${uiTokens.space.pageInlineCompact};
70
+ transform: translateY(-110%);
71
+ padding: ${uiTokens.space.group};
72
+ background: ${uiTokens.surface.raised};
73
+ color: ${uiTokens.ink.primary};
348
74
  z-index: 1;
349
75
  }
350
-
351
- .day-header {
352
- display: flex;
353
- align-items: center;
354
- padding: 42px 0 15px;
355
- color: ${blogTokens.inkSoft};
356
- font-size: 0.9rem;
357
- font-variant-numeric: tabular-nums;
358
- font-weight: 650;
359
- letter-spacing: 0.035em;
360
- }
361
-
362
- .day-header::before {
363
- width: 8px;
364
- height: 8px;
365
- margin-right: 10px;
366
- border-radius: 52% 48% 43% 57%;
367
- background: ${blogTokens.accent};
368
- content: "";
369
- transform: rotate(12deg);
370
- }
371
-
372
- .day-header::after {
373
- flex: 1;
374
- height: 1px;
375
- margin-left: 14px;
376
- background: ${blogTokens.line};
377
- content: "";
378
- }
379
-
380
- .day-header .weekday {
381
- margin-left: 10px;
382
- color: ${blogTokens.inkDim};
383
- font-size: 0.76rem;
384
- font-weight: 400;
385
- letter-spacing: 0.06em;
386
- }
387
-
388
- /* Both content kinds look like paper on a desk, but keep their own weight. */
389
- .post-card,
390
- .thought {
391
- background-color: ${blogTokens.card};
392
- background-image:
393
- linear-gradient(145deg, ${blogTokens.cardSheen}, transparent 45%), ${blogTokens.paperGrain};
394
- background-size:
395
- 100% 100%,
396
- 160px 160px;
397
- border: 1px solid ${blogTokens.line};
398
- box-shadow:
399
- inset 0 0 0 1px ${blogTokens.cardInset},
400
- 0 5px 18px ${blogTokens.cardShadow};
401
- }
402
-
403
- .post-card {
404
- position: relative;
405
- display: block;
406
- margin: 12px 0;
407
- padding: 24px 27px 25px;
408
- border-radius: 13px 17px 14px 16px;
409
- color: inherit;
410
- text-decoration: none;
411
- transition:
412
- border-color 0.18s ease,
413
- box-shadow 0.18s ease,
414
- transform 0.18s ease;
415
- }
416
-
417
- .post-card:hover {
418
- border-color: ${blogTokens.postBorderHover};
419
- box-shadow:
420
- inset 0 0 0 1px ${blogTokens.cardInset},
421
- 0 9px 24px ${blogTokens.cardShadowHover};
422
- transform: translateY(-2px);
423
- }
424
-
425
- .card-top {
426
- display: flex;
427
- align-items: baseline;
428
- justify-content: space-between;
429
- gap: 12px;
430
- margin-bottom: 9px;
76
+ .skip-link:focus {
77
+ transform: none;
431
78
  }
432
-
433
- .kind {
434
- display: inline-flex;
435
- align-items: center;
436
- color: ${blogTokens.accent};
437
- font-size: 0.72rem;
438
- letter-spacing: 0.08em;
439
- }
440
-
441
- .kind::before {
442
- width: 7px;
443
- height: 7px;
444
- margin-right: 8px;
445
- border-radius: 55% 45% 48% 52%;
446
- background: ${blogTokens.accent};
447
- content: "";
448
- }
449
-
450
- .post-card .meta {
451
- color: ${blogTokens.inkDim};
452
- font-size: 0.75rem;
453
- font-variant-numeric: tabular-nums;
454
- letter-spacing: 0.025em;
455
- white-space: nowrap;
456
- }
457
-
458
- .post-card h3 {
459
- margin-bottom: 7px;
460
- font-size: 1.25rem;
461
- font-weight: 730;
462
- letter-spacing: -0.012em;
463
- line-height: 1.5;
464
- }
465
-
466
- .post-card .excerpt {
467
- display: -webkit-box;
468
- overflow: hidden;
469
- color: ${blogTokens.inkSoft};
470
- font-size: 0.92rem;
471
- -webkit-box-orient: vertical;
472
- -webkit-line-clamp: 2;
473
- }
474
-
475
- .thought {
476
- position: relative;
477
- margin: 11px 0;
478
- padding: 15px 20px 14px;
479
- border-color: ${blogTokens.thoughtBorder};
480
- border-radius: 16px 12px 15px 11px;
481
- background-color: ${blogTokens.thoughtCard};
482
- transition:
483
- border-color 0.18s ease,
484
- box-shadow 0.18s ease,
485
- transform 0.18s ease;
486
- }
487
-
488
- .thought:hover {
489
- border-color: ${blogTokens.thoughtBorderHover};
490
- box-shadow:
491
- inset 0 0 0 1px ${blogTokens.cardInset},
492
- 0 7px 20px ${blogTokens.cardShadowHover};
493
- transform: translateY(-1px);
494
- }
495
-
496
- .thought .time {
497
- margin-bottom: 2px;
498
- color: ${blogTokens.inkDim};
499
- font-size: 0.75rem;
500
- font-variant-numeric: tabular-nums;
501
- letter-spacing: 0.06em;
79
+ .feed {
80
+ display: grid;
81
+ gap: ${uiTokens.space.section};
502
82
  }
503
-
504
- .thought .time .t {
505
- text-decoration: underline;
506
- text-decoration-color: rgba(210, 75, 50, 0.5);
507
- text-decoration-thickness: 1.5px;
508
- text-underline-offset: 4px;
509
- }
510
-
511
- .thought .body {
512
- max-width: 35em;
513
- color: ${blogTokens.ink};
514
- font-size: 0.94rem;
515
- }
516
-
517
- .tags {
518
- margin-top: 7px;
519
- color: ${blogTokens.inkDim};
520
- font-size: 0.74rem;
521
- letter-spacing: 0.035em;
522
- }
523
-
524
- .tags span {
525
- margin-right: 12px;
526
- }
527
-
528
- .thought-link {
529
- display: block;
530
- color: inherit;
531
- text-decoration: none;
83
+ .feed-filter {
84
+ padding-block: ${uiTokens.space.group};
532
85
  }
533
-
534
- .thought:has(.thought-link) {
535
- cursor: pointer;
86
+ .feed-filter [aria-pressed="true"] {
87
+ background: ${uiTokens.accent.soft};
88
+ color: ${uiTokens.accent.ink};
536
89
  }
537
-
538
- .post-card:focus-visible,
539
- .thought:focus-within {
540
- border-color: ${blogTokens.accent};
541
- outline: none;
542
- box-shadow:
543
- inset 0 0 0 1px ${blogTokens.cardInset},
544
- 0 0 0 3px ${blogTokens.focusRing};
545
- }
546
-
547
- .thought-link:focus-visible {
548
- outline: none;
549
- }
550
-
551
- /* Filters are lightweight controls, not publication legends. */
552
- .tag-filter {
553
- display: flex;
554
- flex-wrap: wrap;
555
- padding: 23px 0 2px;
556
- font-size: 0.79rem;
557
- }
558
-
559
- .tag-filter button {
560
- display: inline-flex;
561
- align-items: baseline;
562
- margin: 0 9px 9px 0;
563
- padding: 5px 13px;
564
- border: 1px solid ${blogTokens.line};
565
- border-radius: 999px;
566
- background: ${blogTokens.filterBg};
567
- color: ${blogTokens.inkSoft};
568
- cursor: pointer;
569
- font: inherit;
570
- letter-spacing: 0.03em;
571
- transition:
572
- color 0.15s ease,
573
- border-color 0.15s ease,
574
- background-color 0.15s ease,
575
- transform 0.15s ease;
576
- }
577
-
578
- .tag-filter button i {
579
- margin-left: 7px;
580
- font-size: 0.68rem;
581
- font-style: normal;
90
+ .filter-count {
91
+ color: ${uiTokens.ink.tertiary};
582
92
  font-variant-numeric: tabular-nums;
583
- opacity: 0.58;
584
- }
585
-
586
- .tag-filter button:hover {
587
- border-color: ${blogTokens.filterBorderHover};
588
- color: ${blogTokens.ink};
589
- }
590
-
591
- .tag-filter button.active {
592
- border-color: ${blogTokens.accent};
593
- background: ${blogTokens.accent};
594
- color: ${blogTokens.onAccent};
595
- }
596
-
597
- .tag-filter button:active {
598
- transform: translateY(1px);
599
- }
600
-
601
- /* Post and thought detail. */
602
- .post-head {
603
- padding: 68px 0 37px;
604
- border-bottom: 1px solid ${blogTokens.line};
605
- }
606
-
607
- .post-head h1 {
608
- margin: 13px 0 17px;
609
- font-size: clamp(1.65rem, 5vw, 2.1rem);
610
- font-weight: 750;
611
- letter-spacing: -0.025em;
612
- line-height: 1.42;
613
- }
614
-
615
- .post-head .meta {
616
- color: ${blogTokens.inkDim};
617
- font-size: 0.81rem;
618
- font-variant-numeric: tabular-nums;
619
- letter-spacing: 0.045em;
620
- }
621
-
622
- .prose {
623
- padding: 42px 0 16px;
624
- font-size: 0.98rem;
625
- }
626
-
627
- .prose p {
628
- margin-bottom: 1.65em;
629
- }
630
-
631
- .prose h2,
632
- .about h2 {
633
- margin: 2.5em 0 0.9em;
634
- font-size: 1.24rem;
635
- font-weight: 740;
636
- letter-spacing: -0.012em;
637
- line-height: 1.45;
638
- }
639
-
640
- .prose h2::before,
641
- .about h2::before {
642
- display: inline-block;
643
- width: 8px;
644
- height: 8px;
645
- margin-right: 9px;
646
- border-radius: 50%;
647
- background: ${blogTokens.accent};
648
- content: "";
649
- transform: translateY(-1px);
650
- }
651
-
652
- .prose h3 {
653
- margin: 2.1em 0 0.8em;
654
- font-size: 1.07rem;
655
- font-weight: 700;
656
- }
657
-
658
- .prose h4 {
659
- margin: 1.8em 0 0.7em;
660
- font-size: 1rem;
661
- font-weight: 680;
662
- }
663
-
664
- .prose strong,
665
- .about strong {
666
- font-weight: 680;
667
- }
668
-
669
- .prose ul,
670
- .prose ol {
671
- margin: 0 0 1.65em 1.4em;
672
- }
673
-
674
- .prose li {
675
- margin-bottom: 0.5em;
676
- padding-left: 3px;
677
- }
678
-
679
- .prose li::marker,
680
- .about li::marker {
681
- color: ${blogTokens.accent};
682
- }
683
-
684
- .prose blockquote {
685
- margin: 0 0 1.7em;
686
- padding: 14px 18px;
687
- border-left: 3px solid ${blogTokens.accent};
688
- border-radius: 0 12px 12px 0;
689
- background: ${blogTokens.quoteBg};
690
- color: ${blogTokens.inkSoft};
691
- }
692
-
693
- .prose blockquote > :last-child {
694
- margin-bottom: 0;
695
- }
696
-
697
- .prose code,
698
- .about code {
699
- padding: 2px 6px;
700
- border: 1px solid ${blogTokens.line};
701
- border-radius: 6px;
702
- background: ${blogTokens.codeBg};
703
- font-family: ${blogTokens.fontMono};
704
- font-size: 0.85em;
705
- }
706
-
707
- .prose pre {
708
- overflow-x: auto;
709
- margin-bottom: 1.7em;
710
- padding: 20px 23px;
711
- border-radius: 12px;
712
- background: ${blogTokens.preBg};
713
- color: ${blogTokens.preInk};
714
- font-size: 0.85rem;
715
- line-height: 1.7;
716
- }
717
-
718
- .prose pre code {
719
- padding: 0;
720
- border: 0;
721
- background: none;
722
- color: inherit;
723
93
  }
724
-
725
- .prose img {
726
- display: block;
727
- max-width: 100%;
728
- height: auto;
729
- margin: 2rem auto;
730
- border-radius: 13px 16px 12px 15px;
731
- }
732
-
733
- .prose figure {
734
- margin: 2rem 0;
735
- }
736
-
737
- .prose figure img {
738
- margin-bottom: 0.65rem;
739
- }
740
-
741
- .prose figcaption {
742
- color: ${blogTokens.inkDim};
743
- font-size: 0.78rem;
744
- text-align: center;
745
- }
746
-
747
- .prose table {
748
- display: block;
749
- width: max-content;
750
- max-width: 100%;
751
- overflow-x: auto;
752
- margin: 0 0 1.7em;
753
- border-collapse: collapse;
754
- font-size: 0.9rem;
755
- }
756
-
757
- .prose th,
758
- .prose td {
759
- min-width: 7rem;
760
- padding: 9px 12px;
761
- border-bottom: 1px solid ${blogTokens.line};
762
- text-align: left;
763
- vertical-align: top;
764
- }
765
-
766
- .prose th {
767
- color: ${blogTokens.ink};
768
- font-weight: 680;
769
- }
770
-
771
- .prose mark {
772
- padding: 0 0.15em;
773
- background: color-mix(in srgb, ${blogTokens.markerYellow} 48%, transparent);
774
- color: inherit;
775
- }
776
-
777
- .prose kbd {
778
- padding: 2px 6px;
779
- border: 1px solid ${blogTokens.line};
780
- border-bottom-width: 2px;
781
- border-radius: 5px;
782
- background: ${blogTokens.codeBg};
783
- font-family: ${blogTokens.fontMono};
784
- font-size: 0.82em;
785
- }
786
-
787
- .mdx-callout {
788
- margin: 0 0 1.7em;
789
- padding: 15px 18px;
790
- border: 1px solid ${blogTokens.line};
791
- border-left: 4px solid ${blogTokens.doodleBlue};
792
- border-radius: 4px 13px 13px 4px;
793
- background: color-mix(in srgb, ${blogTokens.doodleBlue} 8%, ${blogTokens.card});
794
- }
795
-
796
- .mdx-callout-warning {
797
- border-left-color: ${blogTokens.markerYellow};
798
- background: color-mix(in srgb, ${blogTokens.markerYellow} 9%, ${blogTokens.card});
799
- }
800
-
801
- .mdx-callout > :last-child {
802
- margin-bottom: 0;
803
- }
804
-
805
- .prose hr {
806
- position: relative;
807
- height: 1px;
808
- margin: 3em 0;
809
- border: 0;
810
- background: ${blogTokens.line};
94
+ .home-heading {
95
+ display: grid;
96
+ grid-template-columns: minmax(0, 1fr) auto;
97
+ align-items: center;
98
+ gap: ${uiTokens.space.section};
811
99
  }
812
-
813
- .prose hr::after {
814
- position: absolute;
815
- top: -4px;
816
- left: 50%;
817
- width: 9px;
818
- height: 9px;
819
- margin-left: -4.5px;
820
- border-radius: 48% 52% 56% 44%;
821
- background: ${blogTokens.accent};
822
- content: "";
823
- }
824
-
825
- .prose a,
826
- .about a {
827
- color: ${blogTokens.ink};
828
- text-decoration-color: ${blogTokens.accent};
829
- text-decoration-thickness: 1px;
830
- text-underline-offset: 4px;
831
- transition: color 0.15s;
832
- }
833
-
834
- .prose a:hover,
835
- .about a:hover {
836
- color: ${blogTokens.accent};
837
- }
838
-
839
- .related-thoughts {
840
- position: relative;
841
- margin: 30px 0 52px;
842
- padding: 26px 24px 14px;
843
- border: 1px solid ${blogTokens.line};
844
- border-radius: 16px 13px 17px 12px;
845
- background: ${blogTokens.relatedBg};
846
- }
847
-
848
- .related-thoughts h2 {
849
- position: absolute;
850
- top: -0.72em;
851
- left: 18px;
852
- padding: 0 9px;
853
- background: ${blogTokens.bg};
854
- color: ${blogTokens.inkDim};
855
- font-size: 0.77rem;
856
- font-weight: 400;
857
- letter-spacing: 0.08em;
858
- }
859
-
860
- .post-nav {
861
- display: flex;
862
- justify-content: space-between;
863
- gap: 20px;
864
- padding: 31px 0 76px;
865
- border-top: 1px solid ${blogTokens.line};
866
- }
867
-
868
- .post-nav a {
869
- max-width: 48%;
870
- color: ${blogTokens.ink};
871
- font-size: 0.91rem;
872
- font-weight: 680;
873
- text-decoration: none;
100
+ .home-heading-copy {
101
+ display: grid;
102
+ gap: ${uiTokens.space.group};
103
+ min-width: 0;
874
104
  }
875
-
876
- .post-nav a .label,
877
- .post-nav .label {
105
+ .hero-image {
878
106
  display: block;
879
- margin-bottom: 5px;
880
- color: ${blogTokens.inkDim};
881
- font-size: 0.72rem;
882
- font-weight: 400;
883
- letter-spacing: 0.08em;
884
- }
885
-
886
- .post-nav a:hover {
887
- color: ${blogTokens.accent};
888
- }
889
-
890
- .post-nav .next {
891
- margin-left: auto;
892
- text-align: right;
893
- }
894
-
895
- /* Index and about pages. */
896
- .listing,
897
- .about,
898
- .skills-index,
899
- .skill-page {
900
- padding: 60px 0 88px;
901
- }
902
-
903
- .listing-head {
904
- margin-bottom: 27px;
905
- padding-bottom: 23px;
906
- border-bottom: 1px solid ${blogTokens.line};
907
- }
908
-
909
- .listing-head h1,
910
- .about h1 {
911
- margin: 12px 0 9px;
912
- font-size: 1.58rem;
913
- font-weight: 740;
914
- letter-spacing: -0.02em;
915
- }
916
-
917
- .listing-head p {
918
- color: ${blogTokens.inkSoft};
919
- font-size: 0.92rem;
920
- }
921
-
922
- .post-list .post-card,
923
- .thought-list .thought {
924
- margin: 13px 0;
925
- }
926
-
927
- .empty-state {
928
- padding: 28px 0 78px;
929
- color: ${blogTokens.inkDim};
930
- }
931
-
932
- .about .avatar {
933
- position: relative;
934
- width: 112px;
935
- height: 98px;
936
- margin: -4px 0 27px;
937
- }
938
-
939
- .about .avatar::before {
940
- position: absolute;
941
- inset: 9px 4px 2px 8px;
942
- border-radius: 52% 48% 46% 54%;
943
- background: ${blogTokens.accentSoft};
944
- content: "";
945
- transform: rotate(-7deg);
946
- }
947
-
948
- .about .avatar img {
949
- position: relative;
950
- z-index: 1;
107
+ width: 72px;
108
+ max-height: 112px;
109
+ object-fit: contain;
110
+ }
111
+ .feed-image {
951
112
  display: block;
952
- width: 100%;
953
- height: 100%;
113
+ max-width: min(100%, 180px);
114
+ max-height: 180px;
954
115
  object-fit: contain;
955
116
  }
956
-
957
- .about .avatar-initial {
958
- position: relative;
959
- z-index: 1;
960
- display: grid;
961
- place-items: center;
962
- width: 100%;
963
- height: 100%;
964
- color: ${blogTokens.ink};
965
- font-size: 48px;
966
- font-family: ${blogTokens.fontSans};
967
- font-weight: 600;
968
- }
969
-
970
- .about h1 {
971
- margin-bottom: 20px;
972
- }
973
-
974
- .about p {
975
- margin-bottom: 1.4em;
976
- }
977
-
978
- .about ul {
979
- margin: 0 0 1.6em 1.4em;
980
- }
981
-
982
- .about li {
983
- margin-bottom: 0.5em;
984
- padding-left: 3px;
985
- }
986
-
987
- .about .contact-list {
988
- margin-left: 0;
989
- list-style: none;
117
+ .feed-image {
118
+ display: block;
119
+ max-width: min(100%, 180px);
120
+ max-height: 180px;
121
+ object-fit: contain;
990
122
  }
991
-
992
- .about .contact-list li {
993
- padding-left: 0;
994
- border-bottom: 1px solid ${blogTokens.line};
123
+ .hero-image {
124
+ margin-left: auto;
995
125
  }
996
-
997
- .about .contact-list a {
998
- display: flex;
999
- align-items: baseline;
1000
- justify-content: space-between;
1001
- padding: 13px 0;
1002
- font-size: 0.92rem;
1003
- text-decoration: none;
126
+ .feed-image {
127
+ margin: ${uiTokens.space.section} auto 0;
1004
128
  }
1005
-
1006
- .about .contact-list .k {
1007
- color: ${blogTokens.inkDim};
1008
- font-size: 0.79rem;
1009
- letter-spacing: 0.06em;
1010
- }
1011
-
1012
- /* Skills: separate content by catalog and document semantics instead of displaying it as a product. */
1013
- .skills-head {
1014
- margin-bottom: 33px;
1015
- }
1016
-
1017
- .skill-path,
1018
- .skill-card-path,
1019
- .skill-files li {
1020
- font-family: ${blogTokens.fontMono};
1021
- }
1022
-
1023
- .skill-path {
1024
- color: ${blogTokens.accent};
1025
- font-size: 0.76rem;
1026
- letter-spacing: 0.02em;
1027
- }
1028
-
1029
- .skills-head h1 {
1030
- margin: 8px 0 9px;
1031
- font-size: 1.72rem;
1032
- font-weight: 740;
1033
- letter-spacing: -0.025em;
1034
- }
1035
-
1036
- .skills-head p {
1037
- max-width: 570px;
1038
- color: ${blogTokens.inkSoft};
1039
- font-size: 0.93rem;
1040
- }
1041
-
1042
- .skill-list {
129
+ .post-nav {
1043
130
  display: grid;
1044
- gap: 17px;
1045
- }
1046
-
1047
- .skill-group + .skill-group {
1048
- margin-top: 46px;
1049
- }
1050
-
1051
- .skill-group-head {
1052
- display: flex;
1053
- align-items: end;
1054
- justify-content: space-between;
1055
- gap: 18px;
1056
- margin-bottom: 17px;
1057
- padding-bottom: 10px;
1058
- border-bottom: 1px solid ${blogTokens.line};
1059
- }
1060
-
1061
- .skill-group-head h2 {
1062
- margin: 0;
1063
- font-size: 0.95rem;
1064
- font-weight: 680;
131
+ grid-template-columns: repeat(2, minmax(0, 1fr));
132
+ gap: ${uiTokens.space.panel};
133
+ border-top: ${uiTokens.line.width} solid ${uiTokens.line.edge};
134
+ padding-top: ${uiTokens.space.section};
1065
135
  }
1066
-
1067
- .skill-group-head small {
1068
- display: block;
1069
- margin-top: 4px;
1070
- color: ${blogTokens.inkDim};
1071
- font-size: 0.7rem;
1072
- }
1073
-
1074
- .skill-group-head > span {
1075
- color: ${blogTokens.inkDim};
1076
- font-family: ${blogTokens.fontMono};
1077
- font-size: 0.68rem;
1078
- }
1079
-
1080
- .skill-group-empty {
1081
- margin: 0;
1082
- padding: 22px 20px;
1083
- border: 1px dashed ${blogTokens.line};
1084
- border-radius: 10px;
1085
- color: ${blogTokens.inkDim};
1086
- font-size: 0.8rem;
1087
- }
1088
-
1089
- .skill-card {
1090
- position: relative;
136
+ .site-avatar {
1091
137
  display: grid;
1092
- gap: 16px;
1093
- padding: 24px 24px 19px;
1094
- border: 1px solid ${blogTokens.line};
1095
- border-radius: 5px 14px 14px;
1096
- background-color: ${blogTokens.card};
1097
- background-image: ${blogTokens.paperGrain};
1098
- background-size: 160px 160px;
1099
- box-shadow: 0 6px 20px ${blogTokens.cardShadow};
1100
- color: ${blogTokens.ink};
1101
- text-decoration: none;
1102
- transition:
1103
- border-color 0.18s ease,
1104
- box-shadow 0.18s ease,
1105
- transform 0.18s ease;
138
+ place-items: center;
139
+ width: 80px;
140
+ height: 80px;
141
+ border-radius: ${uiTokens.radius.full};
142
+ overflow: hidden;
143
+ background: ${uiTokens.surface.fill};
144
+ color: ${uiTokens.accent.ink};
145
+ font-family: ${uiTokens.type.display};
146
+ font-size: ${uiTokens.type.pageTitle};
147
+ line-height: ${uiTokens.type.line.pageTitle};
1106
148
  }
1107
-
1108
- .skill-card::before {
1109
- position: absolute;
1110
- top: -7px;
1111
- left: 17px;
1112
- width: 74px;
1113
- height: 7px;
1114
- border: 1px solid ${blogTokens.line};
1115
- border-bottom: 0;
1116
- border-radius: 7px 7px 0 0;
1117
- background-color: ${blogTokens.card};
1118
- background-image: ${blogTokens.paperGrain};
1119
- content: "";
1120
- }
1121
-
1122
- .skill-card:hover {
1123
- border-color: ${blogTokens.postBorderHover};
1124
- box-shadow: 0 10px 28px ${blogTokens.cardShadowHover};
1125
- transform: translateY(-2px);
1126
- }
1127
-
1128
- .skill-card:hover::before {
1129
- border-color: ${blogTokens.postBorderHover};
1130
- }
1131
-
1132
- .skill-card-source {
1133
- display: flex;
1134
- align-items: center;
1135
- justify-content: space-between;
1136
- gap: 12px;
149
+ .site-avatar img {
150
+ width: 100%;
151
+ height: 100%;
152
+ object-fit: cover;
1137
153
  }
1138
-
1139
- .skill-card-path {
1140
- color: ${blogTokens.inkDim};
1141
- font-size: 0.7rem;
154
+ .skill-command-text {
155
+ overflow-wrap: anywhere;
1142
156
  }
1143
-
1144
- .skill-scope-badge {
1145
- display: inline-flex;
1146
- flex: none;
1147
- align-items: center;
1148
- padding: 2px 7px;
1149
- border: 1px solid ${blogTokens.line};
1150
- border-radius: 999px;
1151
- background: ${blogTokens.accentSoft};
1152
- color: ${blogTokens.accent};
1153
- font-size: 0.61rem;
1154
- font-weight: 610;
1155
- letter-spacing: 0.02em;
1156
- white-space: nowrap;
1157
- }
1158
-
1159
- .project-skill::before {
1160
- border-style: dashed;
1161
- border-bottom: 0;
1162
- }
1163
-
1164
- .skill-card-main {
1165
- display: grid;
1166
- gap: 6px;
1167
- }
1168
-
1169
- .skill-card-main strong {
1170
- font-size: 1.08rem;
1171
- font-weight: 710;
1172
- letter-spacing: -0.01em;
1173
- }
1174
-
1175
- .skill-card-main > span {
1176
- color: ${blogTokens.inkSoft};
1177
- font-size: 0.88rem;
1178
- line-height: 1.75;
1179
- }
1180
-
1181
- .skill-card-foot {
1182
- display: flex;
1183
- justify-content: space-between;
1184
- padding-top: 12px;
1185
- border-top: 1px dashed ${blogTokens.line};
1186
- color: ${blogTokens.inkDim};
1187
- font-size: 0.73rem;
1188
- }
1189
-
1190
- .skill-open {
1191
- color: ${blogTokens.inkSoft};
1192
- transition: color 0.15s ease;
1193
- }
1194
-
1195
- .skill-card:hover .skill-open {
1196
- color: ${blogTokens.accent};
1197
- }
1198
-
1199
- .skills-prototype-note {
1200
- margin-top: 22px;
1201
- color: ${blogTokens.inkDim};
1202
- font-size: 0.72rem;
1203
- }
1204
-
1205
157
  .skill-back {
1206
- display: inline-block;
1207
- margin-bottom: 28px;
1208
- color: ${blogTokens.inkDim};
1209
- font-size: 0.78rem;
1210
- text-decoration: none;
1211
- }
1212
-
1213
- .skill-back:hover {
1214
- color: ${blogTokens.accent};
158
+ ${ui.text.caption}
1215
159
  }
1216
-
1217
160
  .skill-browser-head {
1218
- display: grid;
1219
- grid-template-columns: minmax(0, 1fr) auto;
161
+ display: flex;
1220
162
  align-items: center;
1221
- gap: 12px;
1222
- margin-bottom: 12px;
1223
- padding: 9px 10px 9px 13px;
1224
- border: 1px solid ${blogTokens.line};
1225
- border-radius: 9px;
1226
- background: ${blogTokens.relatedBg};
1227
- }
1228
-
1229
- .skill-browser-head code {
1230
- min-width: 0;
1231
- color: ${blogTokens.inkSoft};
1232
- font-family: ${blogTokens.fontMono};
1233
- font-size: 0.67rem;
1234
- overflow-x: auto;
1235
- scrollbar-width: none;
1236
- white-space: nowrap;
1237
- }
1238
-
163
+ justify-content: space-between;
164
+ flex-wrap: wrap;
165
+ gap: ${uiTokens.space.group};
166
+ padding: ${uiTokens.space.insetBlock};
167
+ border: ${uiTokens.line.width} solid ${uiTokens.line.edge};
168
+ background: ${uiTokens.surface.fill};
169
+ border-radius: ${uiTokens.radius.md};
170
+ }
1239
171
  .skill-command {
1240
- display: flex;
1241
172
  min-width: 0;
1242
- align-items: center;
1243
- gap: 9px;
173
+ overflow-wrap: anywhere;
174
+ ${ui.text.caption}
1244
175
  }
1245
-
1246
- .skill-browser-head code::-webkit-scrollbar {
1247
- display: none;
176
+ .skill-scope-badge {
177
+ display: block;
178
+ color: ${uiTokens.accent.ink};
179
+ margin-bottom: ${uiTokens.space.group};
1248
180
  }
1249
-
1250
181
  .skill-browser-actions {
1251
182
  display: flex;
1252
183
  align-items: center;
1253
- gap: 6px;
184
+ gap: ${uiTokens.space.insetBlock};
185
+ ${ui.text.caption}
1254
186
  }
1255
-
1256
- .skill-browser-actions button,
1257
- .skill-browser-actions a {
1258
- min-width: 42px;
1259
- padding: 3px 7px;
1260
- border: 1px solid ${blogTokens.line};
1261
- border-radius: 6px;
1262
- background: ${blogTokens.card};
1263
- color: ${blogTokens.inkSoft};
1264
- font: inherit;
1265
- font-size: 0.65rem;
1266
- line-height: 1.65;
1267
- text-align: center;
1268
- text-decoration: none;
1269
- white-space: nowrap;
1270
- cursor: pointer;
1271
- }
1272
-
1273
- .skill-browser-actions button:hover,
1274
- .skill-browser-actions a:hover {
1275
- border-color: ${blogTokens.postBorderHover};
1276
- color: ${blogTokens.accent};
1277
- }
1278
-
1279
187
  .skill-stage {
1280
- border: 1px solid ${blogTokens.line};
1281
- border-radius: 13px;
1282
- background-color: ${blogTokens.card};
1283
- background-image: ${blogTokens.paperGrain};
1284
- background-size: 160px 160px;
1285
- box-shadow: 0 8px 28px ${blogTokens.cardShadow};
1286
- overflow: clip;
1287
- }
1288
-
1289
- .skill-stage [hidden] {
1290
- display: none;
1291
- }
1292
-
188
+ min-width: 0;
189
+ border: ${uiTokens.line.width} solid ${uiTokens.line.edge};
190
+ border-radius: ${uiTokens.radius.md};
191
+ background: ${uiTokens.surface.raised};
192
+ }
1293
193
  .skill-view-tabs {
1294
194
  display: flex;
1295
- gap: 20px;
1296
- padding: 0 17px;
1297
- border-bottom: 1px solid ${blogTokens.line};
1298
- }
1299
-
1300
- .skill-view-tabs button {
1301
- position: relative;
1302
- padding: 11px 1px 9px;
195
+ flex-wrap: wrap;
196
+ gap: ${uiTokens.space.group};
197
+ padding: ${uiTokens.space.group};
198
+ border-bottom: ${uiTokens.line.width} solid ${uiTokens.line.edge};
199
+ }
200
+ .skill-browser-actions button,
201
+ .skill-view-tabs button,
202
+ .skill-files button {
1303
203
  border: 0;
204
+ border-radius: ${uiTokens.radius.sm};
205
+ padding: ${uiTokens.space.group} ${uiTokens.space.insetBlock};
1304
206
  background: transparent;
1305
- color: ${blogTokens.inkDim};
1306
- font: inherit;
1307
- font-size: 0.75rem;
207
+ color: ${uiTokens.ink.secondary};
208
+ font-family: ${uiTokens.type.sans};
209
+ font-size: ${uiTokens.type.caption};
210
+ font-weight: ${uiTokens.type.weight.medium};
211
+ line-height: ${uiTokens.type.line.caption};
1308
212
  cursor: pointer;
1309
213
  }
1310
-
1311
- .skill-view-tabs button[aria-pressed="true"] {
1312
- color: ${blogTokens.ink};
1313
- }
1314
-
1315
- .skill-view-tabs button[aria-pressed="true"]::after {
1316
- position: absolute;
1317
- right: 0;
1318
- bottom: -1px;
1319
- left: 0;
1320
- height: 2px;
1321
- border-radius: 2px;
1322
- background: ${blogTokens.accent};
1323
- content: "";
1324
- }
1325
-
1326
- .skill-browser {
1327
- display: grid;
1328
- grid-template-columns: 185px minmax(0, 1fr);
1329
- align-items: start;
1330
- min-height: 500px;
1331
- }
1332
-
1333
- .skill-viewer {
1334
- min-width: 0;
1335
- border-left: 1px solid ${blogTokens.line};
214
+ .skill-browser-actions button {
215
+ background: ${uiTokens.surface.raised};
1336
216
  }
1337
-
1338
- .skill-viewer-bar {
1339
- display: flex;
1340
- align-items: center;
1341
- justify-content: space-between;
1342
- gap: 16px;
1343
- min-height: 42px;
1344
- padding: 0 18px;
1345
- border-bottom: 1px solid ${blogTokens.line};
1346
- color: ${blogTokens.inkDim};
1347
- font-family: ${blogTokens.fontMono};
1348
- font-size: 0.64rem;
1349
- }
1350
-
1351
- .skill-viewer-bar span:last-child {
1352
- color: ${blogTokens.inkFaint};
1353
- font-size: 0.6rem;
1354
- text-transform: uppercase;
1355
- }
1356
-
1357
- .skill-file-panel {
1358
- padding: 25px 28px 44px;
1359
- }
1360
-
1361
- .skill-file-panel[hidden] {
1362
- display: none;
217
+ .skill-browser-actions button:hover,
218
+ .skill-view-tabs button:hover,
219
+ .skill-files button:hover {
220
+ color: ${uiTokens.ink.primary};
221
+ background: ${uiTokens.state.hover};
1363
222
  }
1364
-
1365
- .skill-file-panel h1 {
1366
- margin-top: 0;
1367
- font-size: 1.5rem;
223
+ .skill-view-tabs button[aria-pressed="true"],
224
+ .skill-files button.active {
225
+ background: ${uiTokens.accent.soft};
226
+ color: ${uiTokens.accent.ink};
1368
227
  }
1369
-
1370
- .skill-file-panel h2 {
1371
- font-size: 1.05rem;
228
+ .skill-browser {
229
+ display: grid;
230
+ grid-template-columns: minmax(180px, 240px) minmax(0, 1fr);
1372
231
  }
1373
-
1374
232
  .skill-files {
1375
- padding: 15px 12px 24px;
1376
- background: ${blogTokens.relatedBg};
233
+ padding: ${uiTokens.space.insetBlock};
234
+ min-width: 0;
1377
235
  }
1378
-
1379
236
  .skill-files-label {
1380
237
  display: block;
1381
- margin: 0 7px 12px;
1382
- color: ${blogTokens.inkDim};
1383
- font-size: 0.62rem;
1384
- font-weight: 560;
1385
- letter-spacing: 0.1em;
1386
- text-transform: uppercase;
1387
- }
1388
-
238
+ margin-bottom: ${uiTokens.space.group};
239
+ ${ui.text.eyebrow}
240
+ }
1389
241
  .skill-files ul {
1390
- margin: 0;
1391
242
  list-style: none;
1392
- }
1393
-
1394
- .skill-files .folder > ul {
1395
- margin-left: 7px;
1396
- padding-left: 8px;
1397
- border-left: 1px solid ${blogTokens.line};
1398
- }
1399
-
1400
- .skill-files li {
243
+ margin: 0;
1401
244
  padding: 0;
1402
- color: ${blogTokens.inkDim};
1403
- font-size: 0.65rem;
1404
- line-height: 1.45;
1405
- overflow-wrap: anywhere;
1406
245
  }
1407
-
246
+ .skill-files ul ul {
247
+ padding-left: ${uiTokens.space.group};
248
+ }
1408
249
  .skill-files .folder > span {
1409
250
  display: block;
1410
- padding: 5px 7px 2px;
1411
- color: ${blogTokens.inkSoft};
251
+ padding: ${uiTokens.space.group};
252
+ ${ui.text.caption} color: ${uiTokens.ink.tertiary};
253
+ overflow-wrap: anywhere;
1412
254
  }
1413
-
1414
255
  .skill-files button {
1415
256
  width: 100%;
1416
- padding: 6px 7px;
1417
- border: 0;
1418
- border-radius: 6px;
1419
- background: transparent;
1420
- color: ${blogTokens.inkDim};
1421
- font: inherit;
1422
- line-height: inherit;
1423
257
  text-align: left;
1424
258
  overflow-wrap: anywhere;
1425
- cursor: pointer;
1426
- transition:
1427
- background 0.15s ease,
1428
- color 0.15s ease;
1429
259
  }
1430
-
1431
- .skill-files button:hover {
1432
- background: ${blogTokens.accentSoft};
1433
- color: ${blogTokens.ink};
260
+ .skill-viewer {
261
+ min-width: 0;
262
+ border-left: ${uiTokens.line.width} solid ${uiTokens.line.edge};
1434
263
  }
1435
-
1436
- .skill-files button.active {
1437
- background: ${blogTokens.accentSoft};
1438
- color: ${blogTokens.accent};
264
+ .skill-viewer-bar {
265
+ display: flex;
266
+ justify-content: space-between;
267
+ gap: ${uiTokens.space.group};
268
+ padding: ${uiTokens.space.insetBlock};
269
+ border-bottom: ${uiTokens.line.width} solid ${uiTokens.line.edge};
270
+ ${ui.text.caption} color: ${uiTokens.ink.tertiary};
271
+ overflow-wrap: anywhere;
1439
272
  }
1440
-
1441
- .skill-relations {
1442
- min-height: 0;
273
+ .skill-file-panel {
274
+ padding: ${uiTokens.space.panel};
1443
275
  }
1444
-
1445
276
  .skill-reading-summary {
1446
277
  display: grid;
1447
- grid-template-columns: repeat(4, 1fr);
1448
- border-bottom: 1px solid ${blogTokens.line};
1449
- background: ${blogTokens.relatedBg};
278
+ grid-template-columns: repeat(4, minmax(0, 1fr));
279
+ border-bottom: ${uiTokens.line.width} solid ${uiTokens.line.edge};
1450
280
  }
1451
-
1452
281
  .skill-reading-summary span {
1453
- display: flex;
1454
- min-width: 0;
1455
- flex-direction: column;
1456
- gap: 2px;
1457
- padding: 12px 16px 11px;
1458
- border-right: 1px solid ${blogTokens.line};
1459
- color: ${blogTokens.inkDim};
1460
- font-size: 0.65rem;
1461
- }
1462
-
1463
- .skill-reading-summary span:last-child {
1464
- border-right: 0;
1465
- }
1466
-
282
+ display: grid;
283
+ gap: ${uiTokens.space.group};
284
+ padding: ${uiTokens.space.insetBlock};
285
+ ${ui.text.caption} color: ${uiTokens.ink.secondary};
286
+ }
1467
287
  .skill-reading-summary strong {
1468
- color: ${blogTokens.ink};
1469
- font-family: ${blogTokens.fontMono};
1470
- font-size: 0.82rem;
1471
- font-weight: 620;
288
+ ${ui.text.body} color: ${uiTokens.ink.primary};
1472
289
  }
1473
-
1474
290
  .skill-reading-summary .has-issue strong {
1475
- color: ${blogTokens.accent};
291
+ color: ${uiTokens.status.warning};
1476
292
  }
1477
-
1478
293
  .skill-graph-canvas {
1479
- display: grid;
1480
- min-height: 310px;
1481
- place-items: center;
1482
- padding: 26px 20px;
1483
- background: radial-gradient(circle at 50% 45%, ${blogTokens.heroWash}, transparent 44%);
1484
- }
1485
-
1486
- .skill-graph-canvas.compact {
1487
- min-height: 245px;
294
+ padding: ${uiTokens.space.panel};
295
+ overflow: auto;
296
+ max-height: 720px;
1488
297
  }
1489
-
1490
298
  .skill-graph-svg {
1491
299
  display: block;
1492
- width: 100%;
1493
- height: auto;
1494
- overflow: visible;
1495
- }
1496
-
1497
- .skill-graph-tb {
1498
- display: none;
300
+ max-width: none;
1499
301
  }
1500
-
1501
302
  .skill-graph-edge {
1502
303
  fill: none;
1503
- stroke: ${blogTokens.inkFaint};
304
+ stroke: ${uiTokens.line.controlHover};
1504
305
  stroke-width: 1.2;
1505
306
  vector-effect: non-scaling-stroke;
1506
307
  }
1507
-
1508
308
  .skill-graph-edge.external {
1509
309
  stroke-dasharray: 4 4;
1510
310
  }
1511
-
1512
311
  .skill-graph-arrow {
1513
- fill: ${blogTokens.inkFaint};
312
+ fill: ${uiTokens.line.controlHover};
1514
313
  }
1515
-
1516
314
  .skill-graph-edge-label rect {
1517
- fill: ${blogTokens.card};
1518
- opacity: 0.94;
315
+ fill: ${uiTokens.surface.raised};
1519
316
  }
1520
-
1521
317
  .skill-graph-edge-label text {
1522
- fill: ${blogTokens.inkDim};
1523
- font-size: 11px;
318
+ fill: ${uiTokens.ink.secondary};
319
+ font-size: ${uiTokens.type.caption};
1524
320
  text-anchor: middle;
1525
321
  }
1526
-
1527
322
  .skill-graph-node {
1528
- color: ${blogTokens.ink};
1529
323
  text-decoration: none;
1530
324
  }
1531
-
1532
325
  .skill-graph-node rect {
1533
- fill: ${blogTokens.card};
1534
- stroke: ${blogTokens.line};
326
+ fill: ${uiTokens.surface.raised};
327
+ stroke: ${uiTokens.line.control};
1535
328
  stroke-width: 1;
1536
- transition:
1537
- fill 0.16s ease,
1538
- stroke 0.16s ease;
1539
- }
1540
-
1541
- .skill-graph-node.external rect {
1542
- fill: ${blogTokens.thoughtCard};
1543
- stroke-dasharray: 4 3;
1544
329
  }
1545
-
330
+ .skill-graph-node.external rect,
1546
331
  .skill-graph-node.unreferenced rect {
1547
- fill: ${blogTokens.relatedBg};
1548
- stroke-dasharray: 3 4;
332
+ stroke-dasharray: 4 3;
1549
333
  }
1550
-
1551
334
  .skill-graph-node.missing rect {
1552
- fill: ${blogTokens.accentSoft};
1553
- stroke: ${blogTokens.accent};
335
+ fill: ${uiTokens.accent.soft};
336
+ stroke: ${uiTokens.accent.base};
1554
337
  stroke-dasharray: 3 3;
1555
338
  }
1556
-
1557
339
  .skill-graph-node:hover rect,
1558
340
  .skill-graph-node.active rect {
1559
- fill: ${blogTokens.accentSoft};
1560
- stroke: ${blogTokens.accent};
341
+ fill: ${uiTokens.accent.soft};
342
+ stroke: ${uiTokens.accent.base};
1561
343
  }
1562
-
1563
344
  .skill-graph-node text {
1564
345
  pointer-events: none;
1565
346
  text-anchor: middle;
347
+ font-size: ${uiTokens.type.caption};
1566
348
  }
1567
-
1568
349
  .skill-graph-node-name {
1569
- fill: ${blogTokens.ink};
1570
- font-family: ${blogTokens.fontMono};
1571
- font-size: 11px;
1572
- font-weight: 650;
350
+ fill: ${uiTokens.ink.primary};
351
+ font-family: ${uiTokens.type.mono};
352
+ font-weight: ${uiTokens.type.weight.medium};
1573
353
  }
1574
-
1575
354
  .skill-graph-node-role {
1576
- fill: ${blogTokens.inkDim};
1577
- font-size: 11px;
355
+ fill: ${uiTokens.ink.secondary};
1578
356
  }
1579
-
1580
- .skill-graph-status {
1581
- min-height: 44px;
1582
- padding: 11px 17px;
1583
- border-top: 1px solid ${blogTokens.line};
1584
- color: ${blogTokens.inkSoft};
1585
- font-size: 0.76rem;
1586
- }
1587
-
1588
- .skill-graph-status code {
1589
- color: ${blogTokens.accent};
1590
- font-family: ${blogTokens.fontMono};
1591
- }
1592
-
357
+ .skill-reading-paths,
358
+ .skill-reading-issues,
1593
359
  .skill-reading-empty {
1594
- padding: 42px 28px 46px;
1595
- border-bottom: 1px solid ${blogTokens.line};
360
+ padding: ${uiTokens.space.panel};
361
+ border-top: ${uiTokens.line.width} solid ${uiTokens.line.edge};
1596
362
  }
1597
-
1598
- .skill-reading-empty strong,
1599
- .skill-reading-issues > strong,
1600
363
  .skill-reading-paths h3 {
1601
- color: ${blogTokens.ink};
1602
- font-size: 0.82rem;
1603
- font-weight: 640;
364
+ margin: 0 0 ${uiTokens.space.insetBlock};
365
+ ${ui.text.title}
1604
366
  }
1605
-
1606
- .skill-reading-empty p {
1607
- max-width: 520px;
1608
- margin: 9px 0 0;
1609
- color: ${blogTokens.inkSoft};
1610
- font-size: 0.78rem;
1611
- line-height: 1.8;
1612
- }
1613
-
1614
- .skill-reading-empty code,
1615
- .skill-reading-issues code,
1616
- .skill-reading-edge code {
1617
- font-family: ${blogTokens.fontMono};
1618
- }
1619
-
1620
- .skill-reading-paths {
1621
- padding: 19px 18px 20px;
1622
- border-top: 1px solid ${blogTokens.line};
1623
- }
1624
-
1625
- .skill-reading-paths h3 {
1626
- margin: 0 0 12px;
1627
- }
1628
-
1629
367
  .skill-reading-paths ol {
1630
368
  display: grid;
1631
- gap: 8px;
1632
- margin: 0;
1633
- padding: 0;
369
+ gap: ${uiTokens.space.group};
1634
370
  list-style: none;
371
+ padding: 0;
372
+ margin: 0;
1635
373
  }
1636
-
1637
374
  .skill-reading-paths li {
1638
375
  display: grid;
1639
- grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
1640
- gap: 16px;
1641
- align-items: center;
1642
- padding: 10px 12px;
1643
- border: 1px solid ${blogTokens.line};
1644
- border-radius: 8px;
1645
- background: ${blogTokens.relatedBg};
376
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
377
+ gap: ${uiTokens.space.insetBlock};
378
+ padding: ${uiTokens.space.insetBlock};
379
+ background: ${uiTokens.surface.fill};
380
+ border-radius: ${uiTokens.radius.sm};
1646
381
  }
1647
-
1648
- .skill-reading-paths li.unreachable {
1649
- border-style: dashed;
1650
- opacity: 0.72;
382
+ .skill-reading-edge,
383
+ .skill-reading-context {
384
+ overflow-wrap: anywhere;
385
+ ${ui.text.caption}
1651
386
  }
1652
-
1653
387
  .skill-reading-edge {
1654
388
  display: flex;
1655
- min-width: 0;
1656
- align-items: center;
1657
- gap: 8px;
1658
- color: ${blogTokens.ink};
1659
- font-size: 0.68rem;
1660
- }
1661
-
1662
- .skill-reading-edge code {
1663
- overflow: hidden;
1664
- text-overflow: ellipsis;
1665
- white-space: nowrap;
389
+ align-items: start;
390
+ flex-wrap: wrap;
391
+ gap: ${uiTokens.space.group};
1666
392
  }
1667
-
1668
393
  .skill-reading-edge > span {
1669
- color: ${blogTokens.accent};
394
+ color: ${uiTokens.accent.ink};
1670
395
  }
1671
-
1672
396
  .skill-reading-context {
1673
397
  display: grid;
1674
- gap: 2px;
1675
- color: ${blogTokens.inkDim};
1676
- font-size: 0.68rem;
1677
- line-height: 1.55;
398
+ color: ${uiTokens.ink.secondary};
1678
399
  }
1679
-
1680
400
  .skill-reading-issues {
1681
- padding: 17px 18px 18px;
1682
- border-top: 1px solid ${blogTokens.line};
1683
- background: ${blogTokens.accentSoft};
401
+ background: ${uiTokens.accent.soft};
1684
402
  }
1685
-
1686
- .skill-reading-issues p {
1687
- display: flex;
1688
- flex-wrap: wrap;
1689
- gap: 5px 8px;
1690
- margin: 8px 0 0;
1691
- color: ${blogTokens.inkSoft};
1692
- font-size: 0.72rem;
1693
- line-height: 1.6;
403
+ .skill-reading-issues p,
404
+ .skill-reading-empty p {
405
+ ${ui.text.body} overflow-wrap: anywhere;
406
+ color: ${uiTokens.ink.secondary};
1694
407
  }
1695
-
1696
408
  .skill-reading-issues code {
1697
- color: ${blogTokens.accent};
1698
- }
1699
-
1700
- .github-link {
1701
- display: grid;
1702
- grid-template-columns: 52px minmax(0, 1fr) 28px;
1703
- align-items: center;
1704
- gap: 13px;
1705
- max-width: 390px;
1706
- margin-top: 0.35rem;
1707
- padding: 13px 15px 13px 12px;
1708
- border: 1px solid ${blogTokens.line};
1709
- border-radius: 15px 12px 16px 13px;
1710
- background-color: ${blogTokens.card};
1711
- background-image: ${blogTokens.paperGrain};
1712
- background-size: 160px 160px;
1713
- box-shadow: 0 5px 18px ${blogTokens.cardShadow};
1714
- color: ${blogTokens.ink};
1715
- text-decoration: none;
1716
- transition:
1717
- border-color 0.18s ease,
1718
- box-shadow 0.18s ease,
1719
- transform 0.18s ease;
1720
- }
1721
-
1722
- .github-icon {
1723
- display: block;
1724
- width: 52px;
1725
- height: 52px;
1726
- color: ${blogTokens.ink};
1727
- overflow: visible;
1728
- transition: transform 0.24s cubic-bezier(0.34, 1.56, 0.64, 1);
1729
- }
1730
-
1731
- .github-icon-ring {
1732
- fill: ${blogTokens.accentSoft};
1733
- stroke: ${blogTokens.ink};
1734
- stroke-width: 1.6;
1735
- stroke-linecap: round;
1736
- stroke-linejoin: round;
1737
- }
1738
-
1739
- .github-icon-cat {
1740
- fill: currentColor;
1741
- }
1742
-
1743
- .github-icon-face {
1744
- fill: none;
1745
- stroke: ${blogTokens.card};
1746
- stroke-width: 2.1;
1747
- stroke-linecap: round;
1748
- }
1749
-
1750
- .github-copy {
1751
- display: flex;
1752
- min-width: 0;
1753
- flex-direction: column;
1754
- line-height: 1.35;
1755
- }
1756
-
1757
- .github-copy > span {
1758
- color: ${blogTokens.inkDim};
1759
- font-size: 0.73rem;
1760
- letter-spacing: 0.06em;
1761
- }
1762
-
1763
- .github-copy strong {
1764
- overflow: hidden;
1765
- font-size: 0.98rem;
1766
- font-weight: 650;
1767
- text-overflow: ellipsis;
1768
- white-space: nowrap;
1769
- }
1770
-
1771
- .external-arrow {
1772
- width: 27px;
1773
- height: 27px;
1774
- fill: none;
1775
- stroke: ${blogTokens.accent};
1776
- stroke-width: 1.8;
1777
- stroke-linecap: round;
1778
- stroke-linejoin: round;
1779
- transition: transform 0.18s ease;
1780
- }
1781
-
1782
- .github-link:hover,
1783
- .github-link:focus-visible {
1784
- border-color: ${blogTokens.postBorderHover};
1785
- outline: none;
1786
- box-shadow:
1787
- 0 8px 24px ${blogTokens.cardShadowHover},
1788
- 0 0 0 3px ${blogTokens.focusRing};
1789
- transform: translateY(-2px);
1790
- }
1791
-
1792
- .github-link:hover .github-icon,
1793
- .github-link:focus-visible .github-icon {
1794
- transform: rotate(-4deg) scale(1.04);
1795
- }
1796
-
1797
- .github-link:hover .external-arrow,
1798
- .github-link:focus-visible .external-arrow {
1799
- transform: translate(2px, -2px);
1800
- }
1801
-
1802
- footer.site {
1803
- display: flex;
1804
- align-items: center;
1805
- justify-content: space-between;
1806
- padding: 27px 0 53px;
1807
- border-top: 1px solid ${blogTokens.line};
1808
- color: ${blogTokens.inkDim};
1809
- font-size: 0.79rem;
1810
- letter-spacing: 0.025em;
1811
- }
1812
-
1813
- footer.site .brand {
1814
- display: inline-flex;
1815
- align-items: center;
409
+ margin-inline-end: ${uiTokens.space.group};
1816
410
  }
1817
-
1818
- footer.site .brand::before {
1819
- width: 7px;
1820
- height: 7px;
1821
- margin-right: 8px;
1822
- border-radius: 50%;
1823
- background: ${blogTokens.accent};
1824
- content: "";
1825
- }
1826
-
1827
- footer.site a {
1828
- color: ${blogTokens.inkSoft};
1829
- text-decoration: none;
1830
- transition: color 0.15s;
1831
- }
1832
-
1833
- footer.site a:hover {
1834
- color: ${blogTokens.accent};
1835
- }
1836
-
1837
- @media (prefers-reduced-motion: no-preference) {
1838
- @keyframes rise {
1839
- from {
1840
- opacity: 0;
1841
- translate: 0 10px;
1842
- }
1843
- to {
1844
- opacity: 1;
1845
- translate: none;
1846
- }
1847
- }
1848
-
1849
- @keyframes cat-in {
1850
- from {
1851
- opacity: 0;
1852
- translate: 0 9px;
1853
- }
1854
- to {
1855
- opacity: 1;
1856
- translate: none;
1857
- }
1858
- }
1859
-
1860
- @keyframes fade {
1861
- from {
1862
- opacity: 0;
1863
- }
1864
- to {
1865
- opacity: 1;
1866
- }
1867
- }
1868
-
1869
- header.site {
1870
- animation: rise 0.55s cubic-bezier(0.22, 0.61, 0.36, 1) both;
1871
- }
1872
-
1873
- .hero-copy {
1874
- animation: rise 0.58s 0.06s cubic-bezier(0.22, 0.61, 0.36, 1) both;
1875
- }
1876
-
1877
- .hero-doodle {
1878
- animation: rise 0.62s 0.14s cubic-bezier(0.22, 0.61, 0.36, 1) both;
1879
- }
1880
-
1881
- .hero-image {
1882
- animation: cat-in 0.58s 0.23s cubic-bezier(0.22, 0.61, 0.36, 1) both;
1883
- }
1884
-
1885
- .tag-filter {
1886
- animation: rise 0.58s 0.12s cubic-bezier(0.22, 0.61, 0.36, 1) both;
1887
- }
1888
-
1889
- .feed-decor,
1890
- footer.site {
1891
- animation: fade 0.7s 0.28s both;
1892
- }
1893
-
1894
- .day.in > * {
1895
- animation: rise 0.52s cubic-bezier(0.22, 0.61, 0.36, 1) backwards;
1896
- }
1897
-
1898
- .day.in > *:nth-child(2) {
1899
- animation-delay: 0.08s;
1900
- }
1901
-
1902
- .day.in > *:nth-child(3) {
1903
- animation-delay: 0.14s;
1904
- }
1905
-
1906
- .day.in > *:nth-child(4) {
1907
- animation-delay: 0.2s;
1908
- }
1909
-
1910
- .day.in > *:nth-child(n + 5) {
1911
- animation-delay: 0.26s;
1912
- }
1913
-
1914
- .post-head,
1915
- .listing-head,
1916
- .skills-head,
1917
- .skill-browser-head {
1918
- animation: rise 0.58s cubic-bezier(0.22, 0.61, 0.36, 1) both;
1919
- }
1920
-
1921
- .prose {
1922
- animation: rise 0.58s 0.1s cubic-bezier(0.22, 0.61, 0.36, 1) both;
1923
- }
1924
-
1925
- .related-thoughts {
1926
- animation: rise 0.58s 0.18s cubic-bezier(0.22, 0.61, 0.36, 1) both;
1927
- }
1928
-
1929
- .about > * {
1930
- animation: rise 0.52s cubic-bezier(0.22, 0.61, 0.36, 1) both;
1931
- }
1932
-
1933
- .about > *:nth-child(2) {
1934
- animation-delay: 0.05s;
1935
- }
1936
-
1937
- .about > *:nth-child(3) {
1938
- animation-delay: 0.1s;
1939
- }
1940
-
1941
- .about > *:nth-child(n + 4) {
1942
- animation-delay: 0.15s;
1943
- }
411
+ .skill-graph-status {
412
+ padding: ${uiTokens.space.insetBlock};
413
+ border-top: ${uiTokens.line.width} solid ${uiTokens.line.edge};
414
+ overflow-wrap: anywhere;
415
+ ${ui.text.caption} color: ${uiTokens.ink.secondary};
1944
416
  }
1945
-
1946
- @media (prefers-reduced-motion: reduce) {
1947
- *,
1948
- *::before,
1949
- *::after {
1950
- scroll-behavior: auto !important;
1951
- animation-duration: 0.01ms !important;
1952
- animation-iteration-count: 1 !important;
1953
- transition-duration: 0.01ms !important;
1954
- }
417
+ .mdx-callout {
418
+ padding: ${uiTokens.space.insetBlock};
419
+ background: ${uiTokens.accent.soft};
420
+ border-left: 3px solid ${uiTokens.accent.base};
1955
421
  }
1956
-
1957
422
  @media (max-width: 720px) {
1958
- .feed-image {
1959
- right: 0;
1960
- width: 280px;
423
+ .site-shell {
424
+ padding-inline: ${uiTokens.space.pageInlineCompact};
1961
425
  }
1962
-
1963
- .paw-trail {
1964
- right: 210px;
426
+ .site-header,
427
+ .site-footer {
428
+ flex-wrap: wrap;
429
+ gap: ${uiTokens.space.insetBlock};
430
+ }
431
+ #main-content {
432
+ padding-block: ${uiTokens.space.pageBlockCompact};
1965
433
  }
1966
-
1967
434
  .skill-browser {
1968
- grid-template-columns: 1fr;
435
+ grid-template-columns: minmax(0, 1fr);
1969
436
  }
1970
-
1971
437
  .skill-files {
1972
- padding-bottom: 16px;
1973
- border-bottom: 1px solid ${blogTokens.line};
438
+ border-bottom: ${uiTokens.line.width} solid ${uiTokens.line.edge};
1974
439
  }
1975
-
1976
440
  .skill-viewer {
1977
441
  border-left: 0;
1978
442
  }
1979
- }
1980
-
1981
- @media (max-width: 560px) {
1982
- .container {
1983
- padding: 0 21px;
1984
- }
1985
-
1986
- header.site {
1987
- padding-top: 35px;
1988
- }
1989
-
1990
- nav.site-nav {
1991
- gap: 18px;
1992
- }
1993
-
1994
- .hero {
1995
- grid-template-columns: 1fr;
1996
- min-height: 390px;
1997
- margin-top: 5px;
1998
- }
1999
-
2000
- .hero::before {
2001
- top: 154px;
2002
- right: -44px;
2003
- width: 225px;
2004
- height: 205px;
2005
- }
2006
-
2007
- .hero-copy {
2008
- padding: 35px 0 3px;
2009
- }
2010
-
2011
- .hero-copy h1 {
2012
- font-size: 1.82rem;
2013
- }
2014
-
2015
- .hero-work {
2016
- min-height: 225px;
2017
- justify-content: center;
2018
- }
2019
-
2020
- .hero-doodle {
2021
- width: 225px;
2022
- transform: translateX(-16px) rotate(-1deg);
2023
- }
2024
-
2025
- .hero-image {
2026
- right: 1%;
2027
- bottom: 17px;
2028
- width: 98px;
2029
- }
2030
-
2031
- .tag-filter {
2032
- padding-top: 16px;
2033
- }
2034
-
2035
- .day-header {
2036
- padding-top: 36px;
2037
- }
2038
-
2039
- .post-card {
2040
- padding: 20px 20px 21px;
2041
- }
2042
-
2043
- .post-card .meta {
2044
- white-space: normal;
2045
- text-align: right;
2046
- }
2047
-
2048
- .feed-decor {
2049
- height: 150px;
2050
- margin-top: 38px;
2051
- }
2052
-
2053
- .feed-image {
2054
- right: 0;
2055
- width: 246px;
2056
- }
2057
-
2058
- .yarn-doodle {
2059
- bottom: 4px;
2060
- left: 2px;
2061
- width: 58px;
2062
- opacity: 0.42;
2063
- }
2064
-
2065
- .paw-trail {
2066
- right: 176px;
2067
- bottom: 44px;
2068
- width: 82px;
2069
- opacity: 0.12;
2070
- }
2071
-
2072
- .post-head {
2073
- padding: 50px 0 31px;
2074
- }
2075
-
2076
- .related-thoughts {
2077
- padding: 22px 17px 10px;
2078
- }
2079
-
2080
- .post-nav {
2081
- flex-direction: column;
2082
- }
2083
-
2084
- .post-nav a,
2085
- .post-nav > span {
2086
- max-width: 100%;
2087
- }
2088
-
2089
- .github-link {
2090
- max-width: none;
2091
- }
2092
-
2093
- .listing,
2094
- .about,
2095
- .skills-index,
2096
- .skill-page {
2097
- padding-top: 48px;
2098
- }
2099
-
2100
- .skill-card {
2101
- gap: 14px;
2102
- padding: 22px 19px 17px;
2103
- }
2104
-
2105
- .skill-group-head {
2106
- align-items: flex-start;
2107
- }
2108
-
2109
- .skill-group-head > span {
2110
- padding-top: 2px;
2111
- }
2112
-
2113
- .skill-browser-head {
2114
- grid-template-columns: 1fr;
2115
- }
2116
-
2117
- .skill-browser-actions {
2118
- justify-content: flex-end;
2119
- }
2120
-
2121
- .skill-file-panel {
2122
- padding: 23px 19px 38px;
2123
- }
2124
-
2125
- .skill-relations {
2126
- min-height: 0;
2127
- }
2128
-
2129
- .skill-reading-summary {
2130
- grid-template-columns: repeat(2, 1fr);
2131
- }
2132
-
2133
- .skill-reading-summary span:nth-child(2) {
2134
- border-right: 0;
2135
- }
2136
-
2137
- .skill-reading-summary span:nth-child(-n + 2) {
2138
- border-bottom: 1px solid ${blogTokens.line};
2139
- }
2140
-
2141
- .skill-graph-canvas {
2142
- min-height: 0;
2143
- padding: 23px 10px;
2144
- }
2145
-
443
+ .skill-file-panel,
444
+ .skill-reading-paths,
445
+ .skill-reading-issues,
2146
446
  .skill-reading-empty {
2147
- padding: 30px 18px 34px;
2148
- }
2149
-
2150
- .skill-reading-paths {
2151
- padding: 18px 14px;
2152
- }
2153
-
2154
- .skill-reading-paths li {
2155
- grid-template-columns: 1fr;
2156
- gap: 5px;
2157
- }
2158
-
2159
- .skill-reading-edge {
2160
- align-items: flex-start;
447
+ padding: ${uiTokens.space.insetBlock};
2161
448
  }
2162
-
2163
- .skill-reading-edge code {
2164
- white-space: normal;
2165
- overflow-wrap: anywhere;
2166
- text-overflow: clip;
449
+ .skill-reading-summary {
450
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2167
451
  }
2168
-
2169
- .skill-reading-issues {
2170
- padding: 16px 14px 17px;
452
+ .skill-reading-paths li,
453
+ .post-nav {
454
+ grid-template-columns: minmax(0, 1fr);
2171
455
  }
2172
-
2173
- .skill-graph-lr {
456
+ .post-nav > span:empty {
2174
457
  display: none;
2175
458
  }
2176
-
2177
- .skill-graph-tb {
2178
- display: block;
2179
- }
2180
-
2181
- footer.site {
2182
- align-items: flex-start;
2183
- flex-wrap: wrap;
2184
- gap: 15px;
459
+ .skill-graph-canvas {
460
+ padding: ${uiTokens.space.group};
2185
461
  }
2186
462
  }
2187
-
2188
- @media (max-width: 360px) {
2189
- .card-top {
2190
- align-items: flex-start;
2191
- flex-direction: column;
2192
- gap: 3px;
2193
- }
2194
-
2195
- .post-card .meta {
2196
- text-align: left;
2197
- }
2198
-
2199
- .hero-doodle {
2200
- width: 205px;
2201
- }
2202
-
2203
- .hero-image {
2204
- right: -2%;
2205
- width: 91px;
2206
- }
2207
-
2208
- .github-link {
2209
- grid-template-columns: 46px minmax(0, 1fr) 24px;
2210
- gap: 10px;
2211
- }
2212
-
2213
- .github-icon {
2214
- width: 46px;
2215
- height: 46px;
463
+ @media (pointer: coarse) {
464
+ .site-nav a,
465
+ .site-footer a,
466
+ .skill-browser-actions button,
467
+ .skill-view-tabs button,
468
+ .skill-files button,
469
+ .feed-filter button {
470
+ min-height: 44px;
471
+ display: inline-flex;
472
+ align-items: center;
2216
473
  }
2217
474
  }
2218
475
  `;
2219
- /** Static HTML owns the theme root; CSS remains available without JavaScript. */
476
+ /** Journal's component styles and token identities, with only site-owned chrome added. */
2220
477
  export const blogTheme = defineTheme({
2221
- options: blogOptions,
478
+ options: standardOptions,
2222
479
  defaults: { scheme: "auto" },
2223
- tokens: [blogTokens],
2224
- styles,
480
+ tokens: journalThemeTokens,
481
+ styles: [...standardThemeStyles, siteStyles],
2225
482
  });
2226
- /** The web font the Blog theme names; the build publishes it with its license. */
2227
- export const blogFonts = [
2228
- { family: "Geist Variable", package: "@fontsource-variable/geist", styles: ["normal"] },
2229
- ];
483
+ /** The build publishes Journal's three font families and their licenses locally. */
484
+ export const blogFonts = journalFonts;