slipway-theme 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 (96) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/_includes/analytics.html +12 -0
  4. data/_includes/author-card.html +29 -0
  5. data/_includes/author-ids.html +2 -0
  6. data/_includes/author-url.html +11 -0
  7. data/_includes/breadcrumbs.html +67 -0
  8. data/_includes/byline.html +14 -0
  9. data/_includes/compat.html +11 -0
  10. data/_includes/component-css.html +5 -0
  11. data/_includes/copy-page.html +5 -0
  12. data/_includes/date.html +90 -0
  13. data/_includes/dir.html +4 -0
  14. data/_includes/edit-sources.html +25 -0
  15. data/_includes/feedback.html +12 -0
  16. data/_includes/footer-custom.html +5 -0
  17. data/_includes/footer.html +16 -0
  18. data/_includes/head-custom.html +5 -0
  19. data/_includes/head.html +52 -0
  20. data/_includes/header.html +38 -0
  21. data/_includes/i18n/ar.html +43 -0
  22. data/_includes/i18n/de.html +43 -0
  23. data/_includes/i18n/en.html +43 -0
  24. data/_includes/i18n/es.html +43 -0
  25. data/_includes/i18n/fa.html +43 -0
  26. data/_includes/i18n/fr.html +43 -0
  27. data/_includes/i18n/he.html +42 -0
  28. data/_includes/i18n/it.html +43 -0
  29. data/_includes/i18n/ja.html +43 -0
  30. data/_includes/i18n/nl.html +43 -0
  31. data/_includes/i18n/pt.html +43 -0
  32. data/_includes/i18n/ru.html +43 -0
  33. data/_includes/i18n/tr.html +43 -0
  34. data/_includes/i18n/zh.html +43 -0
  35. data/_includes/i18n-builtin.html +8 -0
  36. data/_includes/icons/github.svg +1 -0
  37. data/_includes/icons/linkedin.svg +1 -0
  38. data/_includes/icons/mastodon.svg +1 -0
  39. data/_includes/icons/twitter.svg +1 -0
  40. data/_includes/icons/x.svg +1 -0
  41. data/_includes/icons/youtube.svg +1 -0
  42. data/_includes/jsonld.html +41 -0
  43. data/_includes/lang-switcher.html +15 -0
  44. data/_includes/layout-url.html +8 -0
  45. data/_includes/llms-item.html +19 -0
  46. data/_includes/num.html +3 -0
  47. data/_includes/post-item.html +4 -0
  48. data/_includes/related-posts.html +37 -0
  49. data/_includes/search.html +13 -0
  50. data/_includes/seo.html +42 -0
  51. data/_includes/series.html +47 -0
  52. data/_includes/skip-link.html +1 -0
  53. data/_includes/t.html +4 -0
  54. data/_includes/taxonomy.html +22 -0
  55. data/_includes/term.html +7 -0
  56. data/_includes/theme-init.html +1 -0
  57. data/_includes/theme-var.html +4 -0
  58. data/_includes/theme-vars.html +17 -0
  59. data/_layouts/archive.html +32 -0
  60. data/_layouts/author.html +31 -0
  61. data/_layouts/base.html +19 -0
  62. data/_layouts/default.html +4 -0
  63. data/_layouts/doc.html +89 -0
  64. data/_layouts/feed.html +37 -0
  65. data/_layouts/glossary.html +23 -0
  66. data/_layouts/home.html +96 -0
  67. data/_layouts/llms-full.html +54 -0
  68. data/_layouts/llms.html +32 -0
  69. data/_layouts/not-found.html +27 -0
  70. data/_layouts/page.html +13 -0
  71. data/_layouts/post.html +72 -0
  72. data/_layouts/search-index.html +12 -0
  73. data/_layouts/sitemap.html +24 -0
  74. data/_layouts/sourcemap.html +28 -0
  75. data/_layouts/tags.html +24 -0
  76. data/_layouts/translation-status.html +44 -0
  77. data/assets/css/components/glossary.css +21 -0
  78. data/assets/css/fonts.css +47 -0
  79. data/assets/css/nav.css +104 -0
  80. data/assets/css/print.css +70 -0
  81. data/assets/css/slipway.css +952 -0
  82. data/assets/css/tokens.css +57 -0
  83. data/assets/fonts/LICENSES/InstrumentSerif-OFL.txt +93 -0
  84. data/assets/fonts/LICENSES/SourceSerif4-OFL.txt +93 -0
  85. data/assets/fonts/LICENSES/Vazirmatn-OFL.txt +93 -0
  86. data/assets/fonts/instrument-serif-latin-400-italic.woff2 +0 -0
  87. data/assets/fonts/instrument-serif-latin-400-normal.woff2 +0 -0
  88. data/assets/fonts/source-serif-4-latin-wght-italic.woff2 +0 -0
  89. data/assets/fonts/source-serif-4-latin-wght-normal.woff2 +0 -0
  90. data/assets/fonts/vazirmatn-arabic-wght-normal.woff2 +0 -0
  91. data/assets/images/social.png +0 -0
  92. data/assets/js/copy-code.js +53 -0
  93. data/assets/js/edit-prompt.js +23 -0
  94. data/assets/js/search.js +114 -0
  95. data/assets/js/theme-toggle.js +66 -0
  96. metadata +156 -0
@@ -0,0 +1,952 @@
1
+ /* Base styles. Every value comes from assets/css/tokens.css. Logical properties only. */
2
+ @layer base {
3
+ html {
4
+ background: var(--sl-color-canvas);
5
+ color: var(--sl-color-text);
6
+ }
7
+
8
+ body {
9
+ margin: 0;
10
+ font-family: var(--sl-font-body);
11
+ font-size: var(--sl-step-base);
12
+ line-height: 1.65;
13
+ }
14
+
15
+ :lang(fa),
16
+ :lang(fa) :is(h1, h2, h3) {
17
+ font-family: var(--sl-font-persian);
18
+ }
19
+
20
+ :lang(ar),
21
+ :lang(ar) :is(h1, h2, h3) {
22
+ font-family: var(--sl-font-arabic);
23
+ }
24
+
25
+ :lang(he),
26
+ :lang(he) :is(h1, h2, h3) {
27
+ font-family: var(--sl-font-hebrew);
28
+ }
29
+
30
+ main {
31
+ max-inline-size: var(--sl-measure);
32
+ margin-inline: auto;
33
+ padding-inline: var(--sl-space-4);
34
+ }
35
+
36
+ h1,
37
+ h2,
38
+ h3 {
39
+ font-family: var(--sl-font-display);
40
+ font-weight: 400;
41
+ line-height: 1.15;
42
+ color: var(--sl-color-heading);
43
+ }
44
+
45
+ h1 {
46
+ font-size: var(--sl-step-2xl);
47
+ }
48
+
49
+ h2 {
50
+ font-size: var(--sl-step-xl);
51
+ }
52
+
53
+ h3 {
54
+ font-size: var(--sl-step-lg);
55
+ }
56
+
57
+ a {
58
+ color: var(--sl-color-rose);
59
+ transition: color var(--sl-motion-fast);
60
+ }
61
+
62
+ a:hover {
63
+ color: var(--sl-color-rose-hover);
64
+ }
65
+
66
+ hr {
67
+ border: 0;
68
+ border-block-start: var(--sl-rule) solid var(--sl-color-line);
69
+ }
70
+
71
+ code,
72
+ pre {
73
+ font-family: var(--sl-font-mono);
74
+ font-size: 0.9em;
75
+ }
76
+
77
+ pre {
78
+ padding: var(--sl-space-3) var(--sl-space-4);
79
+ background: var(--sl-color-surface);
80
+ border: var(--sl-rule) solid var(--sl-color-line);
81
+ border-radius: var(--sl-radius-compact);
82
+ overflow-x: auto;
83
+ direction: ltr;
84
+ text-align: start;
85
+ }
86
+ }
87
+
88
+ @layer components {
89
+ .sl-button {
90
+ display: inline-block;
91
+ padding: var(--sl-space-1) var(--sl-space-3);
92
+ font-family: var(--sl-font-ui);
93
+ font-size: var(--sl-step-sm);
94
+ color: var(--sl-button-fg);
95
+ background: var(--sl-button-bg);
96
+ border-radius: var(--sl-button-radius);
97
+ text-decoration: none;
98
+ }
99
+ }
100
+
101
+ @layer components {
102
+ .sl-header {
103
+ display: flex;
104
+ justify-content: space-between;
105
+ align-items: center;
106
+ gap: var(--sl-space-3);
107
+ padding: var(--sl-space-3) var(--sl-space-4);
108
+ }
109
+
110
+ /* Header variants (slipway.header): centered stacks everything on the middle axis; minimal is one quiet row. */
111
+ .sl-header-centered {
112
+ flex-direction: column;
113
+ text-align: center;
114
+ }
115
+
116
+ .sl-header-centered .sl-main-nav ul {
117
+ justify-content: center;
118
+ }
119
+
120
+ .sl-header-minimal {
121
+ padding-block: var(--sl-space-2);
122
+ }
123
+
124
+ .sl-header-minimal .sl-site-title {
125
+ margin-inline-end: auto;
126
+ font-family: var(--sl-font-ui);
127
+ font-size: var(--sl-step-base);
128
+ }
129
+
130
+ .sl-site-title {
131
+ font-family: var(--sl-font-display);
132
+ font-size: var(--sl-step-lg);
133
+ color: var(--sl-color-heading);
134
+ text-decoration: none;
135
+ display: inline-flex;
136
+ align-items: center;
137
+ }
138
+
139
+ .sl-site-title img {
140
+ block-size: calc(1.5 * var(--sl-step-lg));
141
+ inline-size: auto;
142
+ }
143
+
144
+ .sl-logo-dark {
145
+ display: none;
146
+ }
147
+
148
+ @media (prefers-color-scheme: dark) {
149
+ :root:not([data-theme="light"]) .sl-logo-light {
150
+ display: none;
151
+ }
152
+ :root:not([data-theme="light"]) .sl-logo-dark {
153
+ display: block;
154
+ }
155
+ }
156
+
157
+ :root[data-theme="dark"] .sl-logo-light {
158
+ display: none;
159
+ }
160
+
161
+ :root[data-theme="dark"] .sl-logo-dark {
162
+ display: block;
163
+ }
164
+
165
+ .sl-skip-link {
166
+ position: absolute;
167
+ inset-inline-start: var(--sl-space-3);
168
+ inset-block-start: var(--sl-space-3);
169
+ padding: var(--sl-space-1) var(--sl-space-3);
170
+ font-family: var(--sl-font-ui);
171
+ font-size: var(--sl-step-sm);
172
+ color: var(--sl-button-fg);
173
+ background: var(--sl-button-bg);
174
+ border-radius: var(--sl-button-radius);
175
+ transform: translateY(-200%);
176
+ }
177
+
178
+ .sl-skip-link:focus {
179
+ transform: none;
180
+ }
181
+
182
+ main:focus {
183
+ outline: none;
184
+ }
185
+
186
+ .sl-footer {
187
+ max-inline-size: var(--sl-measure);
188
+ margin-inline: auto;
189
+ margin-block-start: var(--sl-space-12);
190
+ padding: var(--sl-space-4);
191
+ border-block-start: var(--sl-rule) solid var(--sl-color-line);
192
+ font-family: var(--sl-font-ui);
193
+ font-size: var(--sl-step-sm);
194
+ color: var(--sl-color-muted);
195
+ }
196
+
197
+ .sl-theme-toggle {
198
+ font-family: var(--sl-font-ui);
199
+ font-size: var(--sl-step-sm);
200
+ color: var(--sl-color-muted);
201
+ background: transparent;
202
+ border: var(--sl-rule) solid var(--sl-color-line);
203
+ border-radius: var(--sl-radius-compact);
204
+ padding: var(--sl-space-1) var(--sl-space-3);
205
+ cursor: pointer;
206
+ transition: color var(--sl-motion-fast);
207
+ }
208
+
209
+ .sl-theme-toggle:hover {
210
+ color: var(--sl-color-text);
211
+ }
212
+ }
213
+
214
+ @media (prefers-reduced-motion: reduce) {
215
+ *,
216
+ *::before,
217
+ *::after {
218
+ transition: none !important;
219
+ }
220
+
221
+ ::view-transition-group(*),
222
+ ::view-transition-old(*),
223
+ ::view-transition-new(*) {
224
+ animation: none;
225
+ }
226
+ }
227
+
228
+ /* Tables: responsive scroll with start alignment for LTR and RTL. */
229
+ @layer base {
230
+ table {
231
+ display: block;
232
+ max-inline-size: 100%;
233
+ overflow-x: auto;
234
+ border-collapse: collapse;
235
+ margin-block: var(--sl-space-6);
236
+ }
237
+
238
+ th,
239
+ td {
240
+ padding: var(--sl-space-2) var(--sl-space-3);
241
+ border: var(--sl-rule) solid var(--sl-color-line);
242
+ text-align: start;
243
+ }
244
+
245
+ th {
246
+ background: var(--sl-color-surface);
247
+ font-weight: 600;
248
+ }
249
+ }
250
+
251
+ /* Editorial signature: numbered sections between hairline rules. */
252
+ @layer components {
253
+ .sl-sections {
254
+ counter-reset: sl-section;
255
+ }
256
+
257
+ .sl-sections > h2 {
258
+ counter-increment: sl-section;
259
+ margin-block-start: var(--sl-space-12);
260
+ padding-block-start: var(--sl-space-3);
261
+ border-block-start: var(--sl-rule) solid var(--sl-color-line);
262
+ }
263
+
264
+ .sl-sections > h2::before {
265
+ display: block;
266
+ content: counter(sl-section, decimal-leading-zero);
267
+ margin-block-end: var(--sl-space-1);
268
+ font-family: var(--sl-font-ui);
269
+ font-size: var(--sl-step-sm);
270
+ letter-spacing: 0.06em;
271
+ color: var(--sl-color-rose);
272
+ }
273
+
274
+ .sl-rule {
275
+ border: 0;
276
+ border-block-start: var(--sl-rule) solid var(--sl-color-line);
277
+ margin-block: var(--sl-space-8);
278
+ }
279
+ }
280
+
281
+ /* Home layout: a large typographic hero and the latest-posts list, plus the landing, blog, and docs variants. */
282
+ @layer components {
283
+ .sl-hero {
284
+ padding-block: var(--sl-space-12) var(--sl-space-8);
285
+ }
286
+
287
+ .sl-hero-title {
288
+ margin-block: 0 var(--sl-space-3);
289
+ font-size: var(--sl-step-3xl);
290
+ line-height: 1.05;
291
+ }
292
+
293
+ .sl-hero-lead {
294
+ margin-block: 0 var(--sl-space-4);
295
+ font-size: var(--sl-step-lg);
296
+ color: var(--sl-color-muted);
297
+ }
298
+
299
+ .sl-home-head {
300
+ padding-block: var(--sl-space-8) var(--sl-space-4);
301
+ }
302
+
303
+ .sl-home-title {
304
+ margin-block: 0 var(--sl-space-2);
305
+ font-size: var(--sl-step-2xl);
306
+ }
307
+
308
+ .sl-features {
309
+ display: grid;
310
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 16rem), 1fr));
311
+ gap: var(--sl-space-4);
312
+ list-style: none;
313
+ margin-block: var(--sl-space-8);
314
+ padding: 0;
315
+ }
316
+
317
+ .sl-feature {
318
+ padding: var(--sl-space-4);
319
+ background: var(--sl-color-surface);
320
+ border: var(--sl-rule) solid var(--sl-color-line);
321
+ border-radius: var(--sl-radius-compact);
322
+ }
323
+
324
+ .sl-feature-title {
325
+ margin-block: 0 var(--sl-space-2);
326
+ font-size: var(--sl-step-lg);
327
+ }
328
+
329
+ .sl-feature p,
330
+ .sl-feature ul {
331
+ margin-block: 0;
332
+ }
333
+
334
+ .sl-cta-band {
335
+ padding-block: var(--sl-space-8);
336
+ text-align: center;
337
+ border-block-start: var(--sl-rule) solid var(--sl-color-line);
338
+ }
339
+
340
+ .sl-post-list {
341
+ list-style: none;
342
+ margin: 0;
343
+ padding: 0;
344
+ }
345
+
346
+ .sl-post-list li {
347
+ display: flex;
348
+ gap: var(--sl-space-3);
349
+ padding-block: var(--sl-space-2);
350
+ border-block-end: var(--sl-rule) solid var(--sl-color-line);
351
+ }
352
+
353
+ .sl-post-list time {
354
+ flex: none;
355
+ font-family: var(--sl-font-ui);
356
+ font-size: var(--sl-step-sm);
357
+ color: var(--sl-color-muted);
358
+ }
359
+ }
360
+
361
+ /* Doc layout: sidebar, table of contents, and previous/next links. No JavaScript. */
362
+ @layer components {
363
+ .sl-layout-doc {
364
+ max-inline-size: 72rem;
365
+ }
366
+
367
+ .sl-doc-nav {
368
+ margin-block: var(--sl-space-4);
369
+ font-family: var(--sl-font-ui);
370
+ font-size: var(--sl-step-sm);
371
+ }
372
+
373
+ .sl-doc-nav summary {
374
+ cursor: pointer;
375
+ color: var(--sl-color-muted);
376
+ }
377
+
378
+ .sl-doc-nav ul,
379
+ .sl-toc ul {
380
+ list-style: none;
381
+ margin: 0;
382
+ padding: 0;
383
+ }
384
+
385
+ .sl-doc-nav li {
386
+ padding-block: var(--sl-space-1);
387
+ }
388
+
389
+ .sl-doc-group {
390
+ margin-block-start: var(--sl-space-3);
391
+ color: var(--sl-color-muted);
392
+ letter-spacing: 0.06em;
393
+ }
394
+
395
+ .sl-doc-nav a[aria-current="page"] {
396
+ color: var(--sl-color-heading);
397
+ font-weight: 600;
398
+ text-decoration: none;
399
+ }
400
+
401
+ .sl-toc {
402
+ margin-block: var(--sl-space-4);
403
+ padding: var(--sl-space-3) var(--sl-space-4);
404
+ background: var(--sl-color-surface);
405
+ border: var(--sl-rule) solid var(--sl-color-line);
406
+ border-radius: var(--sl-radius-compact);
407
+ font-family: var(--sl-font-ui);
408
+ font-size: var(--sl-step-sm);
409
+ }
410
+
411
+ .sl-toc-title {
412
+ margin-block: 0 var(--sl-space-2);
413
+ color: var(--sl-color-muted);
414
+ }
415
+
416
+ .sl-toc-3 {
417
+ padding-inline-start: var(--sl-space-4);
418
+ }
419
+
420
+ .sl-related {
421
+ margin-block-start: var(--sl-space-12);
422
+ }
423
+
424
+ .sl-related h2 {
425
+ font-size: var(--sl-step-lg);
426
+ }
427
+
428
+ .sl-pager {
429
+ display: flex;
430
+ justify-content: space-between;
431
+ gap: var(--sl-space-4);
432
+ margin-block-start: var(--sl-space-12);
433
+ padding-block-start: var(--sl-space-4);
434
+ border-block-start: var(--sl-rule) solid var(--sl-color-line);
435
+ font-family: var(--sl-font-ui);
436
+ }
437
+
438
+ .sl-pager a {
439
+ display: flex;
440
+ flex-direction: column;
441
+ text-decoration: none;
442
+ }
443
+
444
+ .sl-pager span {
445
+ font-size: var(--sl-step-sm);
446
+ color: var(--sl-color-muted);
447
+ }
448
+
449
+ .sl-pager-next {
450
+ margin-inline-start: auto;
451
+ text-align: end;
452
+ }
453
+
454
+ @media (min-width: 64rem) {
455
+ .sl-doc {
456
+ display: grid;
457
+ grid-template-columns: 14rem minmax(0, 1fr);
458
+ gap: var(--sl-space-8);
459
+ align-items: start;
460
+ }
461
+
462
+ .sl-doc-nav {
463
+ position: sticky;
464
+ inset-block-start: var(--sl-space-4);
465
+ }
466
+ }
467
+
468
+ /* Where ::details-content is supported, the sidebar is always open on wide screens. */
469
+ @supports selector(::details-content) {
470
+ @media (min-width: 64rem) {
471
+ .sl-doc-nav::details-content {
472
+ content-visibility: visible;
473
+ }
474
+
475
+ .sl-doc-nav summary {
476
+ display: none;
477
+ }
478
+ }
479
+ }
480
+ }
481
+
482
+ /* Post layout: title, meta line, and the pager shared with doc. */
483
+ @layer components {
484
+ .sl-post-meta {
485
+ display: flex;
486
+ flex-wrap: wrap;
487
+ gap: var(--sl-space-3);
488
+ margin-block: 0 var(--sl-space-6);
489
+ font-family: var(--sl-font-ui);
490
+ font-size: var(--sl-step-sm);
491
+ color: var(--sl-color-muted);
492
+ }
493
+
494
+ .sl-post-tags {
495
+ display: inline-flex;
496
+ gap: var(--sl-space-2);
497
+ }
498
+
499
+ .sl-tag {
500
+ padding-inline: var(--sl-space-2);
501
+ border: var(--sl-rule) solid var(--sl-color-line);
502
+ border-radius: var(--sl-radius-compact);
503
+ }
504
+ }
505
+
506
+ /* Post series: the box after the post header with the parts and the previous and next part. */
507
+ @layer components {
508
+ .sl-series {
509
+ margin-block: var(--sl-space-6);
510
+ padding: var(--sl-space-4);
511
+ border: var(--sl-rule) solid var(--sl-color-line);
512
+ border-radius: var(--sl-radius-compact);
513
+ font-family: var(--sl-font-ui);
514
+ font-size: var(--sl-step-sm);
515
+ }
516
+
517
+ .sl-series-title {
518
+ margin: 0;
519
+ font-weight: 600;
520
+ }
521
+
522
+ .sl-series-title span,
523
+ .sl-series-part,
524
+ .sl-series-pager span {
525
+ color: var(--sl-color-muted);
526
+ }
527
+
528
+ .sl-series-part {
529
+ margin-block: 0 var(--sl-space-2);
530
+ }
531
+
532
+ .sl-series-list {
533
+ margin-block: 0;
534
+ padding-inline-start: var(--sl-space-6);
535
+ }
536
+
537
+ .sl-series-list [aria-current] {
538
+ font-weight: 600;
539
+ }
540
+
541
+ .sl-series-pager {
542
+ display: flex;
543
+ justify-content: space-between;
544
+ gap: var(--sl-space-4);
545
+ margin-block-start: var(--sl-space-2);
546
+ }
547
+
548
+ .sl-series-pager a {
549
+ display: flex;
550
+ flex-direction: column;
551
+ text-decoration: none;
552
+ }
553
+
554
+ .sl-series-next {
555
+ margin-inline-start: auto;
556
+ text-align: end;
557
+ }
558
+ }
559
+
560
+ /* Authors: the byline, the author box after a post, and the author page. */
561
+ @layer components {
562
+ .sl-authors {
563
+ display: grid;
564
+ gap: var(--sl-space-4);
565
+ margin-block: var(--sl-space-6);
566
+ padding-block-start: var(--sl-space-4);
567
+ border-block-start: var(--sl-rule) solid var(--sl-color-line);
568
+ }
569
+
570
+ .sl-author {
571
+ display: flex;
572
+ gap: var(--sl-space-4);
573
+ align-items: flex-start;
574
+ }
575
+
576
+ .sl-avatar {
577
+ flex: none;
578
+ inline-size: 4rem;
579
+ block-size: 4rem;
580
+ border-radius: 50%;
581
+ object-fit: cover;
582
+ }
583
+
584
+ .sl-author-name {
585
+ margin: 0;
586
+ font-family: var(--sl-font-ui);
587
+ font-weight: 600;
588
+ }
589
+
590
+ .sl-author-bio {
591
+ margin-block: var(--sl-space-1) 0;
592
+ color: var(--sl-color-muted);
593
+ }
594
+
595
+ .sl-author-links {
596
+ display: flex;
597
+ flex-wrap: wrap;
598
+ gap: var(--sl-space-3);
599
+ margin: var(--sl-space-2) 0 0;
600
+ padding: 0;
601
+ list-style: none;
602
+ font-family: var(--sl-font-ui);
603
+ font-size: var(--sl-step-sm);
604
+ }
605
+ }
606
+
607
+ /* Page layout: title, optional lead, and text at reading width. */
608
+ @layer components {
609
+ .sl-page-lead {
610
+ margin-block: 0 var(--sl-space-6);
611
+ font-size: var(--sl-step-lg);
612
+ color: var(--sl-color-muted);
613
+ }
614
+ }
615
+
616
+ /* Code blocks: Rouge colors from the tokens (keywords rose, strings heading, comments muted) and the copy button. */
617
+ @layer components {
618
+ .sl-code {
619
+ position: relative;
620
+ direction: ltr;
621
+ }
622
+
623
+ .sl-copy {
624
+ position: absolute;
625
+ inset-block-start: var(--sl-space-2);
626
+ inset-inline-end: var(--sl-space-2);
627
+ padding: 0 var(--sl-space-2);
628
+ font-family: var(--sl-font-ui);
629
+ font-size: var(--sl-step-sm);
630
+ color: var(--sl-color-muted);
631
+ background: var(--sl-color-canvas);
632
+ border: var(--sl-rule) solid var(--sl-color-line);
633
+ border-radius: var(--sl-radius-compact);
634
+ cursor: pointer;
635
+ transition: color var(--sl-motion-fast);
636
+ }
637
+
638
+ .sl-copy:hover {
639
+ color: var(--sl-color-text);
640
+ }
641
+
642
+ /* "Edit with your agent" (assets/js/edit-prompt.js), added to h2 and h3 by the script. */
643
+ .sl-edit,
644
+ .sl-copy-page {
645
+ margin-inline-start: var(--sl-space-2);
646
+ padding: 0 var(--sl-space-2);
647
+ font-family: var(--sl-font-ui);
648
+ font-size: var(--sl-step-sm);
649
+ font-weight: normal;
650
+ vertical-align: middle;
651
+ color: var(--sl-color-muted);
652
+ background: var(--sl-color-canvas);
653
+ border: var(--sl-rule) solid var(--sl-color-line);
654
+ border-radius: var(--sl-radius-compact);
655
+ cursor: pointer;
656
+ transition: color var(--sl-motion-fast);
657
+ }
658
+
659
+ .sl-edit:hover {
660
+ color: var(--sl-color-text);
661
+ }
662
+
663
+ .highlight .c,
664
+ .highlight .c1,
665
+ .highlight .cm,
666
+ .highlight .cs {
667
+ color: var(--sl-color-muted);
668
+ font-style: italic;
669
+ }
670
+
671
+ .highlight .k,
672
+ .highlight .kd,
673
+ .highlight .kn,
674
+ .highlight .kr,
675
+ .highlight .kt,
676
+ .highlight .m,
677
+ .highlight .mi,
678
+ .highlight .mf,
679
+ .highlight .nb,
680
+ .highlight .nf {
681
+ color: var(--sl-color-rose);
682
+ }
683
+
684
+ .highlight .s,
685
+ .highlight .s1,
686
+ .highlight .s2,
687
+ .highlight .sb,
688
+ .highlight .sa {
689
+ color: var(--sl-color-heading);
690
+ font-style: italic;
691
+ }
692
+ }
693
+
694
+ /* Persian and Arabic: taller lines, no italics (the script has none), and native digits in section numbers when opted in. */
695
+ @layer components {
696
+ @counter-style sl-persian-padded {
697
+ system: extends persian;
698
+ pad: 2 "۰";
699
+ }
700
+
701
+ @counter-style sl-arabic-padded {
702
+ system: extends arabic-indic;
703
+ pad: 2 "٠";
704
+ }
705
+
706
+ :is(:lang(fa), :lang(ar)) body,
707
+ body:is(:lang(fa), :lang(ar)) {
708
+ line-height: 1.9;
709
+ }
710
+
711
+ :is(:lang(fa), :lang(ar)) :is(h1, h2, h3) {
712
+ line-height: 1.4;
713
+ font-weight: 700;
714
+ }
715
+
716
+ :is(:lang(fa), :lang(ar)) :is(em, i, .highlight .c, .highlight .c1, .highlight .cm, .highlight .cs, .highlight .s, .highlight .s1, .highlight .s2) {
717
+ font-style: normal;
718
+ }
719
+
720
+ :is(:lang(fa), :lang(ar)) :is(.sl-doc-group, .sl-sections > h2::before) {
721
+ letter-spacing: 0;
722
+ }
723
+
724
+ .sl-fa-digits .sl-sections > h2::before {
725
+ content: counter(sl-section, sl-persian-padded);
726
+ }
727
+
728
+ .sl-ar-digits .sl-sections > h2::before {
729
+ content: counter(sl-section, sl-arabic-padded);
730
+ }
731
+ }
732
+
733
+ /* Search: a field in the header with a results panel under it. Hidden until the script has loaded the index. */
734
+ @layer components {
735
+ .sl-search {
736
+ position: relative;
737
+ flex: 1;
738
+ max-inline-size: 18rem;
739
+ margin-inline-start: auto;
740
+ }
741
+
742
+ .sl-search input {
743
+ inline-size: 100%;
744
+ box-sizing: border-box;
745
+ padding: var(--sl-space-1) var(--sl-space-3);
746
+ font-family: var(--sl-font-ui);
747
+ font-size: var(--sl-step-sm);
748
+ color: var(--sl-color-text);
749
+ background: var(--sl-color-surface);
750
+ border: var(--sl-rule) solid var(--sl-color-line);
751
+ border-radius: var(--sl-radius-compact);
752
+ }
753
+
754
+ .sl-search-panel {
755
+ position: absolute;
756
+ inset-inline: 0;
757
+ inset-block-start: 100%;
758
+ z-index: 10;
759
+ min-inline-size: 18rem;
760
+ margin-block-start: var(--sl-space-1);
761
+ padding: var(--sl-space-2) var(--sl-space-3);
762
+ background: var(--sl-color-canvas);
763
+ border: var(--sl-rule) solid var(--sl-color-line);
764
+ border-radius: var(--sl-radius-compact);
765
+ font-family: var(--sl-font-ui);
766
+ font-size: var(--sl-step-sm);
767
+ }
768
+
769
+ .sl-search-status {
770
+ margin-block: 0 var(--sl-space-1);
771
+ color: var(--sl-color-muted);
772
+ }
773
+
774
+ .sl-search-results {
775
+ list-style: none;
776
+ margin: 0;
777
+ padding: 0;
778
+ }
779
+
780
+ .sl-search-results li {
781
+ padding-block: var(--sl-space-1);
782
+ }
783
+
784
+ .sl-search-results a {
785
+ display: block;
786
+ }
787
+
788
+ .sl-search-results span {
789
+ display: block;
790
+ color: var(--sl-color-muted);
791
+ }
792
+ }
793
+
794
+ /* Main navigation in the header. */
795
+ @layer components {
796
+ .sl-main-nav ul {
797
+ display: flex;
798
+ flex-wrap: wrap;
799
+ gap: var(--sl-space-3);
800
+ list-style: none;
801
+ margin: 0;
802
+ padding: 0;
803
+ font-family: var(--sl-font-ui);
804
+ font-size: var(--sl-step-sm);
805
+ }
806
+
807
+ .sl-main-nav a {
808
+ color: var(--sl-color-muted);
809
+ text-decoration: none;
810
+ transition: color var(--sl-motion-fast);
811
+ }
812
+
813
+ .sl-main-nav a:hover,
814
+ .sl-main-nav a[aria-current="page"] {
815
+ color: var(--sl-color-heading);
816
+ }
817
+
818
+ .sl-doc-nav .sl-doc-group > ul {
819
+ padding-inline-start: var(--sl-space-3);
820
+ }
821
+ }
822
+
823
+ /* Tags, categories, and archive. */
824
+ @layer components {
825
+ a.sl-tag {
826
+ color: inherit;
827
+ text-decoration: none;
828
+ transition: color var(--sl-motion-fast);
829
+ }
830
+
831
+ a.sl-tag:hover {
832
+ color: var(--sl-color-rose-hover);
833
+ }
834
+
835
+ .sl-count {
836
+ font-family: var(--sl-font-ui);
837
+ font-size: var(--sl-step-sm);
838
+ color: var(--sl-color-muted);
839
+ }
840
+ }
841
+
842
+ /* 404: one section per language under a large code. */
843
+ @layer components {
844
+ .sl-not-found-code {
845
+ margin-block: var(--sl-space-12) 0;
846
+ font-family: var(--sl-font-display);
847
+ font-size: var(--sl-step-3xl);
848
+ line-height: 1;
849
+ color: var(--sl-color-rose);
850
+ }
851
+
852
+ .sl-not-found section {
853
+ padding-block: var(--sl-space-4);
854
+ border-block-end: var(--sl-rule) solid var(--sl-color-line);
855
+ }
856
+ }
857
+
858
+ /* Page widths (front matter `width`) and wide or full-bleed sections inside the reading column. */
859
+ @layer components {
860
+ body {
861
+ overflow-x: clip;
862
+ }
863
+
864
+ .sl-width-narrow {
865
+ max-inline-size: var(--sl-measure-narrow);
866
+ }
867
+
868
+ .sl-width-wide {
869
+ max-inline-size: var(--sl-measure-wide);
870
+ }
871
+
872
+ .sl-width-full {
873
+ max-inline-size: none;
874
+ }
875
+
876
+ .sl-wide {
877
+ --sl-wide-size: max(100%, min(var(--sl-measure-wide), 100vw - 2 * var(--sl-space-4)));
878
+ box-sizing: border-box;
879
+ inline-size: var(--sl-wide-size);
880
+ margin-inline: calc((100% - var(--sl-wide-size)) / 2);
881
+ }
882
+
883
+ .sl-bleed {
884
+ box-sizing: border-box;
885
+ margin-inline: calc(50% - 50vw);
886
+ padding-inline: var(--sl-space-4);
887
+ }
888
+
889
+ /* The doc column sits beside the sidebar, not in the middle of the screen. */
890
+ .sl-layout-doc :is(.sl-wide, .sl-bleed) {
891
+ inline-size: auto;
892
+ margin-inline: 0;
893
+ }
894
+ }
895
+
896
+ .sl-social-links {
897
+ list-style: none;
898
+ padding: 0;
899
+ margin-block: var(--sl-space-4);
900
+ margin-inline: 0;
901
+ display: flex;
902
+ gap: var(--sl-space-3);
903
+ }
904
+ .sl-social-links a {
905
+ color: var(--sl-color-muted);
906
+ display: flex;
907
+ }
908
+ .sl-social-links a:hover {
909
+ color: var(--sl-color-accent);
910
+ }
911
+
912
+ /* Breadcrumbs */
913
+ @layer components {
914
+ .sl-breadcrumbs {
915
+ margin-block-end: var(--sl-space-6);
916
+ font-size: var(--sl-step-sm);
917
+ }
918
+
919
+ .sl-breadcrumbs ol {
920
+ display: flex;
921
+ flex-wrap: wrap;
922
+ align-items: center;
923
+ gap: var(--sl-space-2);
924
+ margin: 0;
925
+ padding: 0;
926
+ list-style: none;
927
+ }
928
+
929
+ .sl-breadcrumbs li {
930
+ display: flex;
931
+ align-items: center;
932
+ gap: var(--sl-space-2);
933
+ }
934
+
935
+ .sl-breadcrumbs a {
936
+ color: var(--sl-color-muted);
937
+ text-decoration: none;
938
+ }
939
+
940
+ .sl-breadcrumbs a:hover {
941
+ color: var(--sl-color-text);
942
+ text-decoration: underline;
943
+ }
944
+
945
+ .sl-breadcrumbs [aria-current="page"] {
946
+ color: var(--sl-color-text);
947
+ }
948
+
949
+ .sl-breadcrumb-separator {
950
+ color: var(--sl-color-line);
951
+ }
952
+ }