slipway-theme 0.1.0 → 0.2.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 (129) hide show
  1. checksums.yaml +4 -4
  2. data/_includes/blocks/annotations.html +18 -0
  3. data/_includes/blocks/audio.html +22 -0
  4. data/_includes/blocks/badge.html +2 -0
  5. data/_includes/blocks/chart.html +32 -0
  6. data/_includes/blocks/citation.html +12 -0
  7. data/_includes/blocks/code-group.html +10 -0
  8. data/_includes/blocks/compare.html +64 -0
  9. data/_includes/blocks/diff.html +31 -0
  10. data/_includes/blocks/download.html +28 -0
  11. data/_includes/blocks/endpoint.html +50 -0
  12. data/_includes/blocks/file-tree.html +52 -0
  13. data/_includes/blocks/gallery.html +18 -0
  14. data/_includes/blocks/hero.html +30 -0
  15. data/_includes/blocks/kbd.html +27 -0
  16. data/_includes/blocks/logos.html +21 -0
  17. data/_includes/blocks/people.html +47 -0
  18. data/_includes/blocks/pricing.html +28 -0
  19. data/_includes/blocks/pull-quote.html +22 -0
  20. data/_includes/blocks/stats.html +14 -0
  21. data/_includes/blocks/steps.html +24 -0
  22. data/_includes/blocks/terminal.html +14 -0
  23. data/_includes/blocks/testimonial.html +23 -0
  24. data/_includes/blocks/timeline.html +23 -0
  25. data/_includes/breadcrumbs.html +16 -0
  26. data/_includes/changelog-version.html +6 -0
  27. data/_includes/comments.html +19 -0
  28. data/_includes/edit-sources.html +11 -2
  29. data/_includes/head.html +5 -0
  30. data/_includes/i18n/ar.html +35 -0
  31. data/_includes/i18n/az.html +78 -0
  32. data/_includes/i18n/bn.html +78 -0
  33. data/_includes/i18n/ckb.html +78 -0
  34. data/_includes/i18n/cs.html +78 -0
  35. data/_includes/i18n/da.html +78 -0
  36. data/_includes/i18n/de.html +35 -0
  37. data/_includes/i18n/dv.html +78 -0
  38. data/_includes/i18n/el.html +78 -0
  39. data/_includes/i18n/en.html +35 -0
  40. data/_includes/i18n/es.html +35 -0
  41. data/_includes/i18n/fa.html +35 -0
  42. data/_includes/i18n/fi.html +78 -0
  43. data/_includes/i18n/fr.html +35 -0
  44. data/_includes/i18n/he.html +36 -0
  45. data/_includes/i18n/hi.html +78 -0
  46. data/_includes/i18n/hu.html +78 -0
  47. data/_includes/i18n/id.html +78 -0
  48. data/_includes/i18n/it.html +35 -0
  49. data/_includes/i18n/ja.html +35 -0
  50. data/_includes/i18n/ko.html +78 -0
  51. data/_includes/i18n/ms.html +78 -0
  52. data/_includes/i18n/nb.html +78 -0
  53. data/_includes/i18n/nl.html +35 -0
  54. data/_includes/i18n/pl.html +78 -0
  55. data/_includes/i18n/ps.html +78 -0
  56. data/_includes/i18n/pt.html +35 -0
  57. data/_includes/i18n/ro.html +78 -0
  58. data/_includes/i18n/ru.html +35 -0
  59. data/_includes/i18n/sd.html +78 -0
  60. data/_includes/i18n/sv.html +78 -0
  61. data/_includes/i18n/sw.html +78 -0
  62. data/_includes/i18n/ta.html +78 -0
  63. data/_includes/i18n/th.html +78 -0
  64. data/_includes/i18n/tr.html +35 -0
  65. data/_includes/i18n/ug.html +78 -0
  66. data/_includes/i18n/uk.html +78 -0
  67. data/_includes/i18n/ur.html +78 -0
  68. data/_includes/i18n/vi.html +78 -0
  69. data/_includes/i18n/yi.html +78 -0
  70. data/_includes/i18n/zh.html +35 -0
  71. data/_includes/i18n-builtin.html +1 -1
  72. data/_includes/jsonld.html +5 -3
  73. data/_includes/last-updated.html +12 -0
  74. data/_includes/page-status.html +19 -0
  75. data/_includes/schema-table.html +122 -0
  76. data/_includes/seo.html +23 -3
  77. data/_includes/snippet.html +20 -0
  78. data/_layouts/adr-index.html +32 -0
  79. data/_layouts/adr.html +45 -0
  80. data/_layouts/changelog-feed.html +28 -0
  81. data/_layouts/changelog.html +40 -0
  82. data/_layouts/doc.html +28 -6
  83. data/_layouts/feed.html +2 -2
  84. data/_layouts/links.html +31 -0
  85. data/_layouts/not-found.html +8 -0
  86. data/_layouts/page.html +7 -2
  87. data/_layouts/post.html +33 -0
  88. data/_layouts/search-index.html +32 -2
  89. data/_layouts/sitemap.html +1 -1
  90. data/assets/css/components/adr.css +11 -0
  91. data/assets/css/components/annotations.css +6 -0
  92. data/assets/css/components/audio.css +8 -0
  93. data/assets/css/components/badge.css +13 -0
  94. data/assets/css/components/changelog.css +11 -0
  95. data/assets/css/components/chart.css +7 -0
  96. data/assets/css/components/citation.css +5 -0
  97. data/assets/css/components/code-group.css +9 -0
  98. data/assets/css/components/compare.css +8 -0
  99. data/assets/css/components/diff.css +9 -0
  100. data/assets/css/components/download.css +7 -0
  101. data/assets/css/components/endpoint.css +1 -0
  102. data/assets/css/components/file-tree.css +12 -0
  103. data/assets/css/components/gallery.css +6 -0
  104. data/assets/css/components/hero.css +11 -0
  105. data/assets/css/components/kbd.css +4 -0
  106. data/assets/css/components/logos.css +8 -0
  107. data/assets/css/components/mirror.css +1 -0
  108. data/assets/css/components/page-status.css +5 -0
  109. data/assets/css/components/people.css +7 -0
  110. data/assets/css/components/pricing.css +9 -0
  111. data/assets/css/components/pull-quote.css +6 -0
  112. data/assets/css/components/schema-table.css +13 -0
  113. data/assets/css/components/stats.css +1 -0
  114. data/assets/css/components/steps.css +10 -0
  115. data/assets/css/components/terminal.css +17 -0
  116. data/assets/css/components/testimonial.css +8 -0
  117. data/assets/css/components/timeline.css +11 -0
  118. data/assets/css/lang/ckb.css +6 -0
  119. data/assets/css/lang/dv.css +6 -0
  120. data/assets/css/lang/ps.css +3 -0
  121. data/assets/css/lang/sd.css +10 -0
  122. data/assets/css/lang/ug.css +3 -0
  123. data/assets/css/lang/ur.css +10 -0
  124. data/assets/css/lang/yi.css +5 -0
  125. data/assets/css/slipway.css +54 -1
  126. data/assets/js/copy-code.js +1 -1
  127. data/assets/js/search.js +12 -10
  128. data/assets/og/template.svg +39 -0
  129. metadata +99 -2
data/_layouts/doc.html CHANGED
@@ -10,16 +10,32 @@ layout: base
10
10
  {%- capture sl_flat_text -%}
11
11
  {%- for item in sl_tree -%}
12
12
  {%- if item.children -%}
13
- {%- for child in item.children -%}{{ child.url }}||{{ child.title }}@@{%- endfor -%}
14
- {%- else -%}{{ item.url }}||{{ item.title }}@@{%- endif -%}
13
+ {%- for child in item.children -%}{{ child.url }}||{{ child.title }}||{{ child.match }}@@{%- endfor -%}
14
+ {%- else -%}{{ item.url }}||{{ item.title }}||{{ item.match }}@@{%- endif -%}
15
15
  {%- endfor -%}
16
16
  {%- endcapture -%}
17
17
  {%- assign sl_items = sl_flat_text | split: '@@' -%}
18
18
  {%- assign sl_index = -1 -%}
19
+ {%- assign sl_nav_section_url = nil -%}
20
+ {%- assign sl_nav_section_title = nil -%}
21
+ {%- assign sl_nav_section_size = 0 -%}
19
22
  {%- for entry in sl_items -%}
20
- {%- assign sl_entry_url = entry | split: '||' | first -%}
23
+ {%- assign sl_entry = entry | split: '||' -%}
24
+ {%- assign sl_entry_url = sl_entry[0] -%}
21
25
  {%- if sl_entry_url == page.url %}{% assign sl_index = forloop.index0 %}{% endif -%}
26
+ {%- assign sl_match = sl_entry[2] | default: '' -%}
27
+ {%- assign sl_prefix = page.url | slice: 0, sl_match.size -%}
28
+ {%- assign sl_match_last = sl_match | slice: -1, 1 -%}
29
+ {%- assign sl_boundary = page.url | slice: sl_match.size, 1 -%}
30
+ {%- if sl_match != '' and sl_prefix == sl_match and sl_match.size > sl_nav_section_size -%}
31
+ {%- if sl_match_last == '/' or sl_boundary == '/' or sl_boundary == '' -%}
32
+ {%- assign sl_nav_section_url = sl_entry_url -%}
33
+ {%- assign sl_nav_section_title = sl_entry[1] -%}
34
+ {%- assign sl_nav_section_size = sl_match.size -%}
35
+ {%- endif -%}
36
+ {%- endif -%}
22
37
  {%- endfor -%}
38
+ {%- if sl_index >= 0 -%}{%- assign sl_nav_section_url = nil -%}{%- endif -%}
23
39
  <div class="sl-doc">
24
40
  {%- if sl_tree.size > 0 %}
25
41
  <details class="sl-doc-nav">
@@ -31,12 +47,12 @@ layout: base
31
47
  <li class="sl-doc-group">{{ item.title }}
32
48
  <ul>
33
49
  {%- for child in item.children %}
34
- <li><a href="{{ child.url | relative_url }}"{% if child.url == page.url %} aria-current="page"{% endif %}>{{ child.title }}</a></li>
50
+ <li><a href="{{ child.url | relative_url }}"{% if child.url == page.url %} aria-current="page"{% elsif child.url == sl_nav_section_url %} aria-current="true"{% endif %}>{{ child.title }}</a></li>
35
51
  {%- endfor %}
36
52
  </ul>
37
53
  </li>
38
54
  {%- else %}
39
- <li><a href="{{ item.url | relative_url }}"{% if item.url == page.url %} aria-current="page"{% endif %}>{{ item.title }}</a></li>
55
+ <li><a href="{{ item.url | relative_url }}"{% if item.url == page.url %} aria-current="page"{% elsif item.url == sl_nav_section_url %} aria-current="true"{% endif %}>{{ item.title }}</a></li>
40
56
  {%- endif %}
41
57
  {%- endfor %}
42
58
  </ul>
@@ -46,7 +62,12 @@ layout: base
46
62
 
47
63
  <article class="sl-doc-body" data-edit-label="{{ sl_edit_label | escape }}" data-edit-prompt="{{ sl_edit_prompt | escape }}">
48
64
  {% include breadcrumbs.html %}
49
- <h1>{{ page.title }}</h1>{% include copy-page.html %}
65
+ {% include page-status.html %}
66
+ {%- assign sl_start = content | strip -%}
67
+ {%- assign sl_start_tag = sl_start | slice: 0, 3 -%}
68
+ {%- unless sl_start_tag == '<h1' %}
69
+ <h1>{{ page.title }}</h1>
70
+ {%- endunless %}{% include copy-page.html %}
50
71
  {%- assign sl_parts = content | split: '<h' -%}
51
72
  {%- capture sl_toc_html -%}
52
73
  {%- for part in sl_parts offset: 1 -%}
@@ -69,6 +90,7 @@ layout: base
69
90
  </nav>
70
91
  {%- endif %}
71
92
  {% include edit-sources.html html=content %}
93
+ {% include last-updated.html %}
72
94
  {% include feedback.html %}
73
95
 
74
96
  {%- if sl_index >= 0 %}
data/_layouts/feed.html CHANGED
@@ -9,7 +9,7 @@
9
9
  {%- for post in site.posts -%}
10
10
  {%- assign sl_f_post_lang = post.lang | default: site.lang | default: 'en' -%}
11
11
  {%- if sl_f_post_lang != sl_f_lang %}{% continue %}{% endif -%}
12
- {%- if sl_f_count == 0 %}{% assign sl_f_updated = post.last_modified_at | default: post.date %}{% endif -%}
12
+ {%- if sl_f_count == 0 %}{% assign sl_f_updated = post.updated | default: post.last_modified_at | default: post.date %}{% endif -%}
13
13
  {%- if sl_f_count == 20 %}{% break %}{% endif -%}
14
14
  {%- assign sl_f_count = sl_f_count | plus: 1 %}
15
15
  <entry>
@@ -17,7 +17,7 @@
17
17
  <link href="{{ post.url | absolute_url }}" rel="alternate" type="text/html"/>
18
18
  <id>{{ post.url | absolute_url }}</id>
19
19
  <published>{{ post.date | date_to_xmlschema }}</published>
20
- <updated>{{ post.last_modified_at | default: post.date | date_to_xmlschema }}</updated>
20
+ <updated>{{ post.updated | default: post.last_modified_at | default: post.date | date_to_xmlschema }}</updated>
21
21
  {%- if post.description %}
22
22
  <summary>{{ post.description | xml_escape }}</summary>
23
23
  {%- endif %}
@@ -0,0 +1,31 @@
1
+ ---
2
+ layout: base
3
+ ---
4
+ <div class="sl-page sl-links">
5
+ <header class="sl-page-header">
6
+ <h1 class="sl-sr-only">{{ page.title }}</h1>
7
+ {% include author-card.html id=page.author %}
8
+ </header>
9
+
10
+ {{ content }}
11
+
12
+ {% if site.data.links %}
13
+ <nav aria-label="{% include t.html key='links' %}">
14
+ <ul class="sl-links-list">
15
+ {% for link in site.data.links %}
16
+ <li><a href="{{ link.url | relative_url }}" class="sl-button">{{ link.title }}</a></li>
17
+ {% endfor %}
18
+ </ul>
19
+ </nav>
20
+ {% endif %}
21
+
22
+ {% if site.slipway.social %}
23
+ <nav aria-label="{% include t.html key='social_links' %}">
24
+ <ul class="sl-social-icons">
25
+ {% for item in site.slipway.social %}
26
+ <li><a href="{{ item.url }}" aria-label="{{ item.title }}">{% include icons/{{ item.icon }}.svg %}</a></li>
27
+ {% endfor %}
28
+ </ul>
29
+ </nav>
30
+ {% endif %}
31
+ </div>
@@ -15,6 +15,14 @@ layout: base
15
15
  <h2>{% include t.html lang=l.code key='not_found_title' %}</h2>
16
16
  <p>{% include t.html lang=l.code key='not_found_text' %}</p>
17
17
  <p><a class="sl-button" href="{{ l.prefix | append: '/' | relative_url }}">{% include t.html lang=l.code key='go_home' %}</a></p>
18
+ {%- if sl_nf_langs.size > 1 %}
19
+ <p class="sl-not-found-missing">
20
+ {% include t.html lang=l.code key='translation_missing' %}
21
+ {%- for other in sl_nf_langs -%}
22
+ {%- if other.code != l.code %} <a href="{{ other.prefix | append: '/' | relative_url }}" hreflang="{{ other.code }}" lang="{{ other.code }}">{{ other.name }}</a>{% endif -%}
23
+ {%- endfor %}
24
+ </p>
25
+ {%- endif %}
18
26
  </section>
19
27
  {%- endfor %}
20
28
  {%- else %}
data/_layouts/page.html CHANGED
@@ -4,10 +4,15 @@ layout: base
4
4
  <article class="sl-page">
5
5
  <header class="sl-page-header">
6
6
  {% include breadcrumbs.html %}
7
- <h1>{{ page.title }}</h1>{% include copy-page.html %}
7
+ {% include page-status.html %}
8
+ {%- assign sl_start = content | strip -%}
9
+ {%- assign sl_start_tag = sl_start | slice: 0, 3 -%}
10
+ {%- unless sl_start_tag == '<h1' %}
11
+ <h1>{{ page.title }}</h1>
12
+ {%- endunless %}{% include copy-page.html %}
8
13
  {%- if page.description %}
9
14
  <p class="sl-page-lead">{{ page.description }}</p>
10
15
  {%- endif %}
11
16
  </header>
12
- {{ content }}
17
+ {% include edit-sources.html html=content %}
13
18
  </article>
data/_layouts/post.html CHANGED
@@ -11,6 +11,14 @@ layout: base
11
11
  <h1>{{ page.title }}</h1>{% include copy-page.html %}
12
12
  <p class="sl-post-meta">
13
13
  <time datetime="{{ page.date | date_to_xmlschema }}">{% include date.html date=page.date %}</time>
14
+ {%- assign sl_pub_date = page.date | date: '%F' -%}
15
+ {%- if page.date > site.time %}
16
+ <span class="sl-tag">{% include t.html key='scheduled' %}</span>
17
+ {%- endif %}
18
+ {%- assign sl_updated_date = page.updated | date: '%F' -%}
19
+ {%- if sl_updated_date and sl_updated_date != sl_pub_date %}
20
+ <span class="sl-post-edited">{% include t.html key='edited_on' %} <time datetime="{{ page.updated | date_to_xmlschema }}">{% include date.html date=page.updated %}</time></span>
21
+ {%- endif %}
14
22
  <span>{% include num.html value=sl_minutes %} {% include t.html key='min_read' %}</span>
15
23
  {%- capture sl_byline %}{% include byline.html page=page %}{% endcapture %}
16
24
  {%- assign sl_byline = sl_byline | strip %}
@@ -35,6 +43,30 @@ layout: base
35
43
  {%- endif %}
36
44
  </p>
37
45
  </header>
46
+ {%- if page.toc %}
47
+ {%- assign sl_parts = content | split: '<h' -%}
48
+ {%- capture sl_toc_html -%}
49
+ {%- for part in sl_parts offset: 1 -%}
50
+ {%- assign sl_level = part | slice: 0, 1 -%}
51
+ {%- if sl_level == '2' or sl_level == '3' -%}
52
+ {%- assign sl_head = part | split: '</h' | first -%}
53
+ {%- assign sl_id = sl_head | split: 'id="' | last | split: '"' | first -%}
54
+ {%- if sl_head contains 'id="' %}
55
+ <li class="sl-toc-{{ sl_level }}"><a href="#{{ sl_id }}">{{ sl_head | split: '">' | last | strip_html }}</a></li>
56
+ {%- endif -%}
57
+ {%- endif -%}
58
+ {%- endfor -%}
59
+ {%- endcapture -%}
60
+ {%- assign sl_toc_trim = sl_toc_html | strip -%}
61
+ {%- if sl_toc_trim != '' %}
62
+ <nav class="sl-toc" aria-label="{% include t.html key='on_this_page' %}">
63
+ <p class="sl-toc-title">{% include t.html key='on_this_page' %}</p>
64
+ <ul>{{ sl_toc_html }}
65
+ </ul>
66
+ </nav>
67
+ <div class="sl-progress" aria-hidden="true"><div class="sl-progress-fill"></div></div>
68
+ {%- endif %}
69
+ {%- endif %}
38
70
  {%- include series.html %}
39
71
  {% include edit-sources.html html=content %}
40
72
  {%- include author-ids.html page=page -%}
@@ -69,4 +101,5 @@ layout: base
69
101
  {%- endif %}
70
102
  </nav>
71
103
  {%- endif %}
104
+ {%- include comments.html page=page %}
72
105
  </article>
@@ -1,12 +1,42 @@
1
+ {%- comment -%}
2
+ One JSON array entry per HTML page in this language: title, url, the text of its h2/h3 headings, and
3
+ the first `slipway.search.text` characters of its text (300 by default), so a 600-page site keeps its
4
+ index well under a megabyte. A page with `search: excerpt` indexes its description instead of its text.
5
+ Pages with `search: false`, pages with `layout: none`, and non-HTML output (a URL whose last segment
6
+ ends in a file extension other than .html/.htm, such as llms.txt or a data feed) stay out.
7
+ {%- endcomment -%}
1
8
  {%- assign sl_ix_lang = page.lang | default: site.lang | default: 'en' -%}
9
+ {%- assign sl_ix_cap = site.slipway.search.text | default: 300 -%}
2
10
  {%- assign sl_ix_all = site.pages | concat: site.documents -%}
3
11
  {%- assign sl_ix_n = 0 -%}
4
12
  [
5
13
  {%- for item in sl_ix_all -%}
6
14
  {%- assign sl_ix_item_lang = item.lang | default: site.lang | default: 'en' -%}
7
- {%- if sl_ix_item_lang != sl_ix_lang or item.search == false or item.layout == 'search-index' or item.title == nil -%}{%- continue -%}{%- endif -%}
15
+ {%- assign sl_ix_file = item.url | default: '' | split: '/' | last -%}
16
+ {%- assign sl_ix_ext = sl_ix_file | split: '.' | last -%}
17
+ {%- if sl_ix_item_lang != sl_ix_lang or item.search == false or item.layout == 'search-index' or item.layout == 'none' or item.title == nil or item.url == nil or item.url == '' -%}{%- continue -%}{%- endif -%}
18
+ {%- if sl_ix_file contains '.' and sl_ix_ext != 'html' and sl_ix_ext != 'htm' -%}{%- continue -%}{%- endif -%}
19
+ {%- assign sl_ix_html = item.content | markdownify -%}
20
+ {%- capture sl_ix_heads -%}
21
+ {%- assign sl_ix_parts = sl_ix_html | split: '<h' -%}
22
+ {%- for sl_ix_part in sl_ix_parts offset: 1 -%}
23
+ {%- assign sl_ix_level = sl_ix_part | slice: 0, 1 -%}
24
+ {%- if sl_ix_level == '2' or sl_ix_level == '3' -%}
25
+ {%- assign sl_ix_head = sl_ix_part | split: '</h' | first -%}
26
+ {%- if sl_ix_head contains 'id="' -%}
27
+ {%- assign sl_ix_head = sl_ix_head | split: '">' | last | strip_html | strip -%}
28
+ {%- if sl_ix_head != '' %}{{ sl_ix_head }} {% endif -%}
29
+ {%- endif -%}
30
+ {%- endif -%}
31
+ {%- endfor -%}
32
+ {%- endcapture -%}
8
33
  {%- if sl_ix_n > 0 -%},{%- endif -%}
9
34
  {%- assign sl_ix_n = sl_ix_n | plus: 1 %}
10
- {"title":{{ item.title | jsonify }},"url":{{ item.url | relative_url | jsonify }},"description":{{ item.description | default: '' | jsonify }},"text":{{ item.content | markdownify | strip_html | normalize_whitespace | truncate: 600 | jsonify }}}
35
+ {%- if item.search == 'excerpt' -%}
36
+ {%- assign sl_ix_text = item.description | default: '' -%}
37
+ {%- else -%}
38
+ {%- assign sl_ix_text = sl_ix_html | strip_html | normalize_whitespace -%}
39
+ {%- endif %}
40
+ {"title":{{ item.title | jsonify }},"url":{{ item.url | relative_url | jsonify }},"headings":{{ sl_ix_heads | normalize_whitespace | truncate: 300 | jsonify }},"text":{{ sl_ix_text | truncate: sl_ix_cap | jsonify }}}
11
41
  {%- endfor %}
12
42
  ]
@@ -8,7 +8,7 @@
8
8
  {%- if sl_m_last != '/' and sl_m_ext != 'html' -%}{%- continue -%}{%- endif %}
9
9
  <url>
10
10
  <loc>{{ item.url | absolute_url | xml_escape }}</loc>
11
- {%- assign sl_m_mod = item.last_modified_at | default: item.date -%}
11
+ {%- assign sl_m_mod = item.updated | default: item.last_modified_at | default: item.date -%}
12
12
  {%- if sl_m_mod %}
13
13
  <lastmod>{{ sl_m_mod | date_to_xmlschema }}</lastmod>
14
14
  {%- endif %}
@@ -0,0 +1,11 @@
1
+ .sl-adr-meta{display:grid;grid-template-columns:max-content 1fr;gap:var(--sl-space-2) var(--sl-space-4);margin-block:var(--sl-space-4);padding:var(--sl-space-4);background:var(--sl-color-surface);border-radius:var(--sl-radius-compact)}
2
+ .sl-adr-meta dt{font-weight:600;color:var(--sl-color-heading)}
3
+ .sl-adr-meta dd{margin:0}
4
+ .sl-adr-status{display:inline-block;padding:0 var(--sl-space-2);border-radius:var(--sl-radius-compact);font-size:var(--sl-step-sm);font-weight:600;text-transform:uppercase}
5
+ .sl-adr-status-proposed,.sl-adr-status-deprecated{background:var(--sl-color-muted);color:var(--sl-color-surface)}
6
+ .sl-adr-status-accepted{background:var(--sl-color-rose-fill);color:var(--sl-color-on-rose-fill)}
7
+ .sl-adr-status-rejected{background:var(--sl-color-text);color:var(--sl-color-canvas)}
8
+ .sl-adr-status-superseded{background:var(--sl-color-muted);color:var(--sl-color-surface);text-decoration:line-through}
9
+ .sl-adr-group{margin-block-end:var(--sl-space-8)}
10
+ .sl-adr-group ul{list-style:none;padding:0}
11
+ .sl-adr-group li{display:flex;justify-content:space-between;padding-block:var(--sl-space-2);border-block-end:1px solid var(--sl-color-line)}
@@ -0,0 +1,6 @@
1
+ .sl-annotations{margin-block:var(--sl-space-4)}
2
+ .sl-annotations figcaption{margin-block-end:var(--sl-space-2);color:var(--sl-color-muted)}
3
+ .sl-annotations pre{margin:0;padding:var(--sl-space-3);background:var(--sl-color-surface);border:var(--sl-rule) solid var(--sl-color-line);border-radius:var(--sl-radius-compact);overflow-x:auto}
4
+ .sl-annotations-notes{counter-reset:sl-annotations;list-style:none;margin:var(--sl-space-3) 0 0;padding-inline-start:var(--sl-space-4);border-inline-start:var(--sl-rule) solid var(--sl-color-line)}
5
+ .sl-annotations-notes li{counter-increment:sl-annotations;padding-inline-start:var(--sl-space-8);padding-block-end:var(--sl-space-2);position:relative}
6
+ .sl-annotations-notes li::before{content:counter(sl-annotations);position:absolute;inset-inline-start:0;inline-size:var(--sl-space-6);text-align:center;color:var(--sl-color-heading);font-weight:600}
@@ -0,0 +1,8 @@
1
+ .sl-audio{margin:var(--sl-space-8) 0}
2
+ .sl-audio audio{display:block;inline-size:100%}
3
+ .sl-audio figcaption{margin-block-start:var(--sl-space-2);font-size:var(--sl-step-sm);color:var(--sl-color-muted)}
4
+ .sl-audio-chapters{margin-block:var(--sl-space-4) 0;padding-inline-start:var(--sl-space-6);font-size:var(--sl-step-sm)}
5
+ .sl-audio-chapters li{margin-block-start:var(--sl-space-1)}
6
+ .sl-audio-chapters time{font-family:var(--sl-font-mono);color:var(--sl-color-muted);margin-inline-end:var(--sl-space-2)}
7
+ .sl-audio-transcript{margin-block-start:var(--sl-space-4);padding:var(--sl-space-4);border:var(--sl-rule) solid var(--sl-color-line);border-radius:var(--sl-radius-card);background:var(--sl-color-surface)}
8
+ .sl-audio-transcript summary{cursor:pointer;font-weight:600}
@@ -0,0 +1,13 @@
1
+ .sl-badge{display:inline-block;padding:.1em .4em;font-size:.85em;font-weight:600;line-height:1.2;border-radius:.25rem;white-space:nowrap;vertical-align:baseline;border:1px solid var(--bd);background:var(--bg);color:var(--fg)}
2
+ .sl-badge-stable{--bg:#e6f6e6;--fg:#0f5132;--bd:#badbcc}
3
+ .sl-badge-beta{--bg:#fff3cd;--fg:#664d03;--bd:#ffecb5}
4
+ .sl-badge-deprecated{--bg:#f8d7da;--fg:#842029;--bd:#f5c2c7}
5
+ .sl-badge-new{--bg:#cfe2ff;--fg:#084298;--bd:#b6d4fe}
6
+ .sl-badge-experimental{--bg:#e2d9f3;--fg:#432874;--bd:#d1c4e9}
7
+ @media(prefers-color-scheme:dark){
8
+ .sl-badge-stable{--bg:#0f5132;--fg:#d1e7dd}
9
+ .sl-badge-beta{--bg:#664d03;--fg:#fff3cd}
10
+ .sl-badge-deprecated{--bg:#842029;--fg:#f8d7da}
11
+ .sl-badge-new{--bg:#084298;--fg:#cfe2ff}
12
+ .sl-badge-experimental{--bg:#432874;--fg:#e2d9f3}
13
+ }
@@ -0,0 +1,11 @@
1
+ .sl-changelog-layout{display:flex;flex-direction:column;gap:var(--sl-space-6)}
2
+ .sl-changelog-main{min-inline-size:0;flex:1}
3
+ .sl-changelog-toc{list-style:none;padding:0;margin:0;margin-block-end:var(--sl-space-4)}
4
+ .sl-changelog-toc li{margin-block-end:var(--sl-space-2)}
5
+ .sl-changelog-toc a,.sl-changelog-feed{color:var(--sl-color-muted)}
6
+ .sl-changelog-feed{font-size:var(--sl-step-sm)}
7
+ @media(min-width:48rem){
8
+ .sl-changelog-layout{flex-direction:row;align-items:flex-start}
9
+ .sl-changelog-sidebar{flex:0 0 12rem;position:sticky;inset-block-start:var(--sl-space-4)}
10
+ }
11
+
@@ -0,0 +1,7 @@
1
+ .sl-chart{margin-block:var(--sl-space-4)}
2
+ .sl-chart figcaption{color:var(--sl-color-muted);font-size:var(--sl-step-sm);margin-block-end:var(--sl-space-2)}
3
+ .sl-chart-table{inline-size:100%;border-collapse:collapse}
4
+ .sl-chart-table th,.sl-chart-table td{padding-block:var(--sl-space-1);text-align:start;vertical-align:middle}
5
+ .sl-chart-table th{color:var(--sl-color-heading);font-weight:600;padding-inline-end:var(--sl-space-3);white-space:nowrap}
6
+ .sl-chart-table td{background:var(--sl-color-surface);border-radius:var(--sl-radius-compact);padding-inline:var(--sl-space-2)}
7
+ .sl-chart-bar{display:block;inline-size:var(--sl-chart-value,0%);block-size:var(--sl-space-2);background:var(--sl-color-rose-fill);border-radius:var(--sl-radius-compact);margin-block-start:var(--sl-space-1)}
@@ -0,0 +1,5 @@
1
+ .sl-citation-list{margin-block:var(--sl-space-4);padding-inline-start:var(--sl-space-6);color:var(--sl-color-text);font-size:var(--sl-step-sm)}
2
+ .sl-citation-list li{padding-inline-start:var(--sl-space-1);margin-block-end:var(--sl-space-2)}
3
+ .sl-citation-list li:target{background:var(--sl-color-surface);border-radius:var(--sl-radius-compact)}
4
+ .sl-citation-list a,.sl-citation a{color:var(--sl-color-rose)}
5
+ .sl-citation{font-size:var(--sl-step-sm);vertical-align:super;line-height:0;white-space:nowrap}
@@ -0,0 +1,9 @@
1
+ .sl-code-group{display:flex;flex-wrap:wrap;overflow-x:auto;margin-block:var(--sl-space-4)}
2
+ .sl-code-group-input{position:absolute;opacity:0;pointer-events:none}
3
+ .sl-code-group-tab{order:-1;cursor:pointer;padding:var(--sl-space-1) var(--sl-space-3);border:1px solid var(--sl-color-line);margin-inline-end:-1px;color:var(--sl-color-muted);font-size:var(--sl-step-sm)}
4
+ .sl-code-group-input:checked+.sl-code-group-tab{color:var(--sl-color-heading);background:var(--sl-color-surface);border-block-end-color:var(--sl-color-surface)}
5
+ .sl-code-group-input:focus-visible+.sl-code-group-tab{outline:2px solid var(--sl-color-rose);outline-offset:2px}
6
+ .sl-code-group-panel{order:1;flex-basis:100%;display:none;margin:0}
7
+ .sl-code-group-input:checked+.sl-code-group-tab+.sl-code-group-panel{display:block}
8
+ @media(max-width:40rem){.sl-code-group-input,.sl-code-group-tab{display:none}.sl-code-group-panel{display:block;margin-block-start:var(--sl-space-2)}}
9
+ .sl-code-group-label{position:absolute;overflow:hidden;clip-path:inset(50%);inline-size:1px;block-size:1px}
@@ -0,0 +1,8 @@
1
+ .sl-compare-pros-cons{display:flex;flex-wrap:wrap;gap:1rem}
2
+ .sl-compare-pros-cons>div{flex:1 1 18rem}
3
+ .sl-compare ul{list-style:none;padding:0}
4
+ .sl-compare li{display:flex;gap:.5rem}
5
+ .sl-compare-table-wrapper{overflow-x:auto}
6
+ .sl-compare table{inline-size:100%}
7
+ .sl-compare :is(th,td){padding:.5rem}
8
+ .sl-sr-only{position:absolute;overflow:hidden;clip-path:inset(50%);inline-size:1px;block-size:1px}
@@ -0,0 +1,9 @@
1
+ .sl-diff{--sl-diff-add:light-dark(#1a7f37,#4ac26b);--sl-diff-del:var(--sl-color-rose);display:grid;gap:var(--sl-space-2);margin-block:var(--sl-space-4)}
2
+ .sl-diff figcaption{font-size:var(--sl-step-sm);color:var(--sl-color-muted)}
3
+ .sl-diff-side{overflow-x:auto;border-inline-start:var(--sl-space-1) solid var(--sl-diff-accent)}
4
+ .sl-diff-removed{--sl-diff-accent:var(--sl-diff-del);background:color-mix(in oklch,var(--sl-diff-del) 10%,var(--sl-color-surface))}
5
+ .sl-diff-added{--sl-diff-accent:var(--sl-diff-add);background:color-mix(in oklch,var(--sl-diff-add) 10%,var(--sl-color-surface))}
6
+ .sl-diff pre{margin:0;padding:var(--sl-space-3);border:0;background:none}
7
+ .sl-diff-line{display:block}
8
+ .sl-diff-sign{display:inline-block;inline-size:1.5ch;color:var(--sl-diff-accent);font-weight:700;user-select:none}
9
+ @media(min-width:48rem){.sl-diff{grid-template-columns:1fr 1fr}}
@@ -0,0 +1,7 @@
1
+ .sl-download{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sl-space-3);margin-block:var(--sl-space-4)}
2
+ .sl-download-button{display:inline-flex;padding-block:var(--sl-space-2);padding-inline:var(--sl-space-4);border-radius:var(--sl-button-radius);background:var(--sl-button-bg);color:var(--sl-button-fg);font-family:var(--sl-font-ui);text-decoration:none}
3
+ .sl-download-button:hover{background:var(--sl-color-rose-hover)}
4
+ .sl-download-meta{display:grid;grid-template-columns:auto 1fr;gap:var(--sl-space-1) var(--sl-space-3);margin:0}
5
+ .sl-download-meta dt{color:var(--sl-color-muted)}
6
+ .sl-download-meta dd{margin:0}
7
+ .sl-download-meta code{overflow-wrap:anywhere}
@@ -0,0 +1 @@
1
+ .sl-endpoint{display:flex;flex-direction:column;gap:var(--sl-space-4);margin-block:var(--sl-space-4);border:1px solid var(--sl-color-border-subtle);border-radius:var(--sl-radius-card);padding:var(--sl-space-4);background:var(--sl-color-canvas-subtle)}.sl-endpoint-header{display:flex;align-items:center;gap:var(--sl-space-2);font-family:var(--sl-font-mono);font-size:var(--sl-text-sm);padding:var(--sl-space-2) var(--sl-space-3);background:var(--sl-color-canvas);border:1px solid var(--sl-color-border-subtle);border-radius:var(--sl-radius-button)}.sl-endpoint-method{font-weight:600}.sl-endpoint-method-get{color:var(--sl-color-text-link)}.sl-endpoint-method-post{color:var(--sl-color-text-success)}.sl-endpoint-method-put,.sl-endpoint-method-patch{color:var(--sl-color-text-warning)}.sl-endpoint-method-delete{color:var(--sl-color-text-danger)}.sl-endpoint-path{color:var(--sl-color-text);word-break:break-all}.sl-endpoint h2{font-size:var(--sl-text-sm);margin-block:0 var(--sl-space-2);color:var(--sl-color-text-muted);text-transform:uppercase;letter-spacing:.05em}.sl-endpoint-table-wrapper{overflow-x:auto}.sl-endpoint table{inline-size:100%;border-collapse:collapse;font-size:var(--sl-text-sm);text-align:start}.sl-endpoint th,.sl-endpoint td{padding:var(--sl-space-2) var(--sl-space-3);border-block-end:1px solid var(--sl-color-border-subtle);vertical-align:baseline}.sl-endpoint th{font-weight:600;color:var(--sl-color-text-muted)}.sl-endpoint-param-name{white-space:nowrap}.sl-endpoint-param-required{font-size:var(--sl-text-xs);color:var(--sl-color-text-danger);margin-inline-start:var(--sl-space-2);vertical-align:middle}.sl-endpoint-param-type{color:var(--sl-color-text-muted);white-space:nowrap}.sl-endpoint-param-description p{margin-block:0}.sl-endpoint pre{margin-block:0;padding:var(--sl-space-3);background:var(--sl-color-canvas);border:1px solid var(--sl-color-border-subtle);border-radius:var(--sl-radius-card);overflow-x:auto}
@@ -0,0 +1,12 @@
1
+ .sl-file-tree{margin-block:var(--sl-space-4)}
2
+ .sl-file-tree ul{list-style:none;padding:0;margin:0}
3
+ .sl-file-tree li{position:relative;padding-inline-start:var(--sl-space-6)}
4
+ .sl-file-tree li::before,.sl-file-tree li::after{content:"";position:absolute;inset-inline-start:var(--sl-space-2)}
5
+ .sl-file-tree li::before{inset-block-start:0;inset-block-end:0;border-inline-start:1px solid var(--sl-color-line)}
6
+ .sl-file-tree li::after{inset-block-start:1.2em;inline-size:var(--sl-space-3);border-block-start:1px solid var(--sl-color-line)}
7
+ .sl-file-tree li:last-child::before{inset-block-end:auto;block-size:1.2em}
8
+ .sl-file-tree>ul>li{padding:0}
9
+ .sl-file-tree>ul>li::before,.sl-file-tree>ul>li::after{content:none}
10
+ .sl-file-name{color:var(--sl-color-heading);font-weight:500;font-family:var(--sl-font-mono)}
11
+ .sl-file-note{color:var(--sl-color-muted);margin-inline-start:var(--sl-space-2);font-style:italic}
12
+ .sl-file-tree p{display:inline}
@@ -0,0 +1,6 @@
1
+ .sl-gallery{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,15rem),1fr));gap:var(--sl-space-6);margin-block:var(--sl-space-8)}
2
+ .sl-gallery-item{margin:0;display:flex;flex-direction:column}
3
+ .sl-gallery-item img{max-inline-size:100%;block-size:auto;border-radius:var(--sl-radius-card);object-fit:cover;flex-grow:1}
4
+ .sl-gallery-item figcaption{margin-block-start:var(--sl-space-2);font-size:var(--sl-step-sm);color:var(--sl-color-muted)}
5
+ .sl-gallery-caption{display:block}
6
+ .sl-gallery-credit{display:block;font-style:italic;margin-block-start:var(--sl-space-1)}
@@ -0,0 +1,11 @@
1
+ .sl-hero{display:grid;gap:var(--sl-space-8);margin-block:var(--sl-space-8)}
2
+ .sl-hero-body{display:grid;gap:var(--sl-space-4)}
3
+ .sl-hero-title{margin:0;font-size:var(--sl-step-2xl);color:var(--sl-color-heading)}
4
+ .sl-hero-lead{margin:0;font-size:var(--sl-step-lg);color:var(--sl-color-muted)}
5
+ .sl-hero-actions{display:flex;flex-wrap:wrap;gap:var(--sl-space-3)}
6
+ .sl-hero-action{padding:var(--sl-space-2) var(--sl-space-4);border:1px solid var(--sl-color-rose-fill);border-radius:var(--sl-radius-compact);color:var(--sl-color-heading);font-family:var(--sl-font-ui);font-weight:600;text-decoration:none}
7
+ .sl-hero-action-primary{background:var(--sl-button-bg);color:var(--sl-button-fg)}
8
+ .sl-hero-media img{display:block;inline-size:100%;block-size:auto;border-radius:var(--sl-radius-card)}
9
+ @media(min-width:48rem){
10
+ .sl-hero:has(.sl-hero-media){grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
11
+ }
@@ -0,0 +1,4 @@
1
+ .sl-kbd{display:inline-flex;align-items:center;gap:.25em;font-family:var(--sl-font-ui);font-size:.85em;line-height:1;white-space:nowrap}
2
+ .sl-kbd-mac,.sl-kbd-other{display:inline-block;padding:.2em .4em;border-radius:var(--sl-radius-compact);border:1px solid var(--sl-color-line);background-color:var(--sl-color-surface);color:var(--sl-color-text);box-shadow:0 1px 1px var(--sl-color-line)}
3
+ .sl-kbd-sep{color:var(--sl-color-muted);font-size:.9em;padding-inline:.1em}
4
+ .sl-kbd [hidden]{display:none!important}
@@ -0,0 +1,8 @@
1
+ .sl-logos{margin-block:var(--sl-space-8)}
2
+ .sl-logos-title{margin:0 0 var(--sl-space-4);font-family:var(--sl-font-ui);font-size:var(--sl-step-sm);color:var(--sl-color-muted)}
3
+ .sl-logos ul{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sl-space-4);list-style:none;margin:0;padding:0}
4
+ .sl-logos li{display:flex;align-items:center;justify-content:center;min-block-size:var(--sl-space-16);padding-inline:var(--sl-space-6);background:var(--sl-color-surface);border-radius:var(--sl-radius-compact)}
5
+ .sl-logos img{max-block-size:var(--sl-space-8);max-inline-size:100%;block-size:auto;filter:grayscale(1);opacity:.65;transition:opacity var(--sl-motion-fast)}
6
+ .sl-logos a:hover img,.sl-logos a:focus-visible img{opacity:1}
7
+ @media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .sl-logos img{opacity:1}}
8
+ :root[data-theme="dark"] .sl-logos img{opacity:1}
@@ -0,0 +1 @@
1
+ [dir=rtl] .sl-mirror{transform:scaleX(-1)}
@@ -0,0 +1,5 @@
1
+ .sl-page-status{padding:var(--sl-space-3) var(--sl-space-4);margin-block-end:var(--sl-space-6);border-radius:var(--sl-radius-card);background-color:var(--sl-color-surface);border:1px solid var(--sl-color-line);font-size:var(--sl-step-sm);color:var(--sl-color-text)}
2
+ .sl-page-status strong{color:var(--sl-color-heading);margin-inline-end:var(--sl-space-2)}
3
+ .sl-page-status-experimental{border-color:var(--sl-color-rose);background-color:var(--sl-color-rose-fill)}
4
+ .sl-page-status-experimental strong{color:var(--sl-color-on-rose-fill)}
5
+ .sl-page-status-deprecated{border-color:var(--sl-color-rose)}
@@ -0,0 +1,7 @@
1
+ .sl-people{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,14rem),1fr));gap:var(--sl-space-4);margin-block:var(--sl-space-4);padding:0;list-style:none}
2
+ .sl-person{display:flex;gap:var(--sl-space-3);padding:var(--sl-space-4);background:var(--sl-color-surface);border:var(--sl-rule) solid var(--sl-color-line);border-radius:var(--sl-radius-card)}
3
+ .sl-person-avatar{flex:none;inline-size:3rem;block-size:3rem;border-radius:50%;object-fit:cover}
4
+ .sl-person-body{display:flex;flex-direction:column;gap:var(--sl-space-1);min-inline-size:0}
5
+ .sl-person-name{font-weight:600;color:var(--sl-color-heading)}
6
+ .sl-person-role,.sl-person-links{color:var(--sl-color-muted);font-size:var(--sl-step-sm)}
7
+ .sl-person-links{display:flex;flex-wrap:wrap;gap:var(--sl-space-2);margin:0;padding:0;list-style:none}
@@ -0,0 +1,9 @@
1
+ .sl-pricing{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,13rem),1fr));gap:var(--sl-space-4);list-style:none;margin-block:var(--sl-space-4);padding:0}
2
+ .sl-pricing-plan{display:flex;flex-direction:column;gap:var(--sl-space-2);border:var(--sl-rule) solid var(--sl-color-line);border-radius:var(--sl-radius-card);padding:var(--sl-space-4)}
3
+ .sl-pricing-featured{border-width:calc(var(--sl-rule)*3)}
4
+ .sl-pricing-badge{align-self:flex-start;margin:0;padding:var(--sl-space-1) var(--sl-space-2);border-radius:var(--sl-radius-compact);background:var(--sl-color-rose-fill);color:var(--sl-color-on-rose-fill);font-size:var(--sl-step-sm)}
5
+ .sl-pricing-name,.sl-pricing-price,.sl-pricing-description{margin:0}
6
+ .sl-pricing-price{font-size:var(--sl-step-lg);font-weight:600;color:var(--sl-color-heading)}
7
+ .sl-pricing-period{font-size:var(--sl-step-sm);color:var(--sl-color-muted)}
8
+ .sl-pricing-features{margin:0;padding-inline-start:var(--sl-space-4)}
9
+ .sl-pricing-cta{margin-block-start:auto}
@@ -0,0 +1,6 @@
1
+ .sl-pull-quote{margin-block:var(--sl-space-8);margin-inline:0;padding-inline-start:var(--sl-space-6);border-inline-start:4px solid var(--sl-color-rose);color:var(--sl-color-heading)}
2
+ .sl-pull-quote blockquote{margin:0;padding:0}
3
+ .sl-pull-quote p{margin:0;font-family:var(--sl-font-display);font-size:var(--sl-step-xl);line-height:1.2;font-style:italic}
4
+ .sl-pull-quote figcaption{margin-block-start:var(--sl-space-4);font-size:var(--sl-step-base);color:var(--sl-color-muted)}
5
+ .sl-pull-quote-author{font-weight:600}
6
+ .sl-pull-quote cite{font-style:italic}
@@ -0,0 +1,13 @@
1
+ .sl-schema-table-wrapper{overflow-x:auto;margin-block:var(--sl-space-4)}
2
+ .sl-schema-table{inline-size:100%;border-collapse:collapse;font-size:var(--sl-text-sm);text-align:start}
3
+ .sl-schema-table th,.sl-schema-table td{padding:var(--sl-space-2) var(--sl-space-3);border-block-end:1px solid var(--sl-color-border-subtle);vertical-align:baseline;text-align:start}
4
+ .sl-schema-table thead th{font-weight:600;color:var(--sl-color-text-muted)}
5
+ .sl-schema-table tbody th{font-weight:600;color:var(--sl-color-heading);white-space:nowrap}
6
+ .sl-schema-table code{font-size:inherit}
7
+ .sl-schema-values{list-style:none;display:flex;flex-wrap:wrap;gap:var(--sl-space-1);margin:var(--sl-space-1) 0 0;padding:0}
8
+ .sl-schema-values code{padding-inline:var(--sl-space-1);border:1px solid var(--sl-color-border-subtle);border-radius:var(--sl-radius-button);background:var(--sl-color-canvas-subtle)}
9
+ .sl-schema-required{color:var(--sl-color-text-muted);white-space:nowrap}
10
+ .sl-schema-description p{margin-block:0}
11
+ .sl-schema-children>td{border-block-end:0;padding-block:0}
12
+ .sl-schema-table-nested{margin-block-end:var(--sl-space-2)}
13
+ .sl-schema-row-child>:first-child{padding-inline-start:var(--sl-space-6)}
@@ -0,0 +1 @@
1
+ .sl-stats{display:flex;flex-wrap:wrap;gap:1rem;margin-block:1.5rem}.sl-stat{flex:1;background:var(--sl-color-canvas);border:1px solid var(--sl-color-line);border-radius:.25rem;padding:1rem}.sl-stat-value{font-size:2rem;font-weight:700;line-height:1.1;color:var(--sl-color-heading);margin-inline-end:.25rem}.sl-stat-unit,.sl-stat-label,.sl-stat-trend{color:var(--sl-color-muted)}.sl-stat-footer{display:flex;justify-content:space-between;margin-block-start:.25rem;font-size:.875rem}
@@ -0,0 +1,10 @@
1
+ .sl-steps{margin-block:var(--sl-space-4)}
2
+ .sl-steps ol{list-style:none;padding:0;margin:0;counter-reset:sl-steps-counter}
3
+ .sl-steps li{position:relative;counter-increment:sl-steps-counter;padding-inline-start:var(--sl-space-6);padding-block-end:var(--sl-space-6)}
4
+ .sl-steps li:last-child{padding-block-end:0}
5
+ .sl-steps li::before,.sl-steps li::after{content:"";position:absolute}
6
+ .sl-steps li::before{inset-inline-start:var(--sl-space-3);inset-block:0;border-inline-start:1px solid var(--sl-color-line)}
7
+ .sl-steps li:last-child::before{inset-block-end:auto;block-size:calc(1.5em+var(--sl-space-2))}
8
+ .sl-steps li::after{content:counter(sl-steps-counter);display:flex;align-items:center;justify-content:center;inset-inline-start:calc(var(--sl-space-3) - 12px);inset-block-start:0;inline-size:24px;block-size:24px;border-radius:50%;background:var(--sl-color-canvas);border:1px solid var(--sl-color-line);color:var(--sl-color-heading);font-size:var(--sl-step-sm);font-weight:600;line-height:1}
9
+ .sl-steps-title{display:block;font-weight:600;color:var(--sl-color-heading);padding-block-start:2px}
10
+ .sl-steps p{margin:var(--sl-space-1) 0 0}
@@ -0,0 +1,17 @@
1
+ .sl-terminal {
2
+ background: var(--sl-color-canvas);
3
+ color: var(--sl-color-text);
4
+ padding: var(--sl-space-4);
5
+ border-radius: var(--sl-radius-card);
6
+ overflow-x: auto;
7
+ }
8
+ .sl-terminal-prompt::before {
9
+ content: attr(data-prompt);
10
+ user-select: none;
11
+ opacity: 0.7;
12
+ margin-inline-end: 1ch;
13
+ }
14
+ .sl-terminal-output {
15
+ opacity: 0.7;
16
+ display: block;
17
+ }
@@ -0,0 +1,8 @@
1
+ .sl-testimonial{margin:var(--sl-space-8) 0;padding:var(--sl-space-6);background:var(--sl-color-surface);border:1px solid var(--sl-color-line);border-radius:var(--sl-radius-card)}
2
+ .sl-testimonial::before{content:"\201C";display:block;block-size:var(--sl-space-3);font-family:var(--sl-font-display);font-size:var(--sl-step-2xl);line-height:1;color:var(--sl-color-rose)}
3
+ .sl-testimonial blockquote{margin:0}
4
+ .sl-testimonial p{margin:0;font-size:var(--sl-step-lg);color:var(--sl-color-heading)}
5
+ .sl-testimonial-credit{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sl-space-3);margin-block-start:var(--sl-space-4);font-size:var(--sl-step-sm);color:var(--sl-color-muted)}
6
+ .sl-testimonial-avatar{inline-size:48px;block-size:48px;border-radius:50%;object-fit:cover;flex:none}
7
+ .sl-testimonial-name{font-weight:600;color:var(--sl-color-heading)}
8
+ .sl-testimonial-source{margin-inline-start:auto}
@@ -0,0 +1,11 @@
1
+ .sl-timeline{margin-block:var(--sl-space-4)}
2
+ .sl-timeline ol{list-style:none;padding:0;margin:0}
3
+ .sl-timeline li{position:relative;padding-inline-start:var(--sl-space-6);padding-block-end:var(--sl-space-6)}
4
+ .sl-timeline li:last-child{padding-block-end:0}
5
+ .sl-timeline li::before,.sl-timeline li::after{content:"";position:absolute;inset-inline-start:var(--sl-space-2)}
6
+ .sl-timeline li::before{inset-block:0;border-inline-start:1px solid var(--sl-color-line)}
7
+ .sl-timeline li:last-child::before{inset-block-end:auto;block-size:calc(1.5em+var(--sl-space-2))}
8
+ .sl-timeline li::after{margin-inline-start:-4px;inset-block-start:.5em;inline-size:9px;block-size:9px;border-radius:50%;background:var(--sl-color-canvas);border:1px solid var(--sl-color-text)}
9
+ .sl-timeline time{display:block;font-size:var(--sl-step-sm);color:var(--sl-color-muted)}
10
+ .sl-timeline-title{display:block;font-weight:600;color:var(--sl-color-heading)}
11
+ .sl-timeline p{margin:var(--sl-space-1) 0 0}
@@ -0,0 +1,6 @@
1
+ :lang(ckb) {
2
+ font-family: var(--sl-font-arabic);
3
+ }
4
+ :lang(ckb) :is(h1, h2, h3, h4, h5, h6) {
5
+ font-family: var(--sl-font-arabic);
6
+ }
@@ -0,0 +1,6 @@
1
+ :lang(dv) {
2
+ font-family: "Noto Sans Thaana", "MV Boli", system-ui, sans-serif;
3
+ }
4
+ :lang(dv) :is(h1, h2, h3, h4, h5, h6) {
5
+ font-family: "Noto Sans Thaana", "MV Boli", system-ui, sans-serif;
6
+ }
@@ -0,0 +1,3 @@
1
+ :lang(ps), :lang(ps) :is(h1, h2, h3, h4, h5, h6) {
2
+ font-family: var(--sl-font-arabic);
3
+ }
@@ -0,0 +1,10 @@
1
+ :lang(sd) {
2
+ font-family: "Noto Naskh Arabic", "Noto Sans Arabic", "Arial", sans-serif;
3
+ line-height: 2.0;
4
+ font-style: normal;
5
+ }
6
+ :lang(sd) :is(h1, h2, h3, h4, h5, h6) {
7
+ font-family: "Noto Naskh Arabic", "Noto Sans Arabic", "Arial", sans-serif;
8
+ line-height: 2.0;
9
+ font-style: normal;
10
+ }
@@ -0,0 +1,3 @@
1
+ :lang(ug), :lang(ug) :is(h1, h2, h3, h4, h5, h6) {
2
+ font-family: var(--sl-font-arabic);
3
+ }
@@ -0,0 +1,10 @@
1
+ :lang(ur) {
2
+ font-family: "Noto Nastaliq Urdu", "Jameel Noori Nastaleeq", "Noto Sans Arabic", "Arial", sans-serif;
3
+ line-height: 2.0;
4
+ font-style: normal;
5
+ }
6
+ :lang(ur) :is(h1, h2, h3, h4, h5, h6) {
7
+ font-family: "Noto Nastaliq Urdu", "Jameel Noori Nastaleeq", "Noto Sans Arabic", "Arial", sans-serif;
8
+ line-height: 2.0;
9
+ font-style: normal;
10
+ }
@@ -0,0 +1,5 @@
1
+ @layer base {
2
+ :root:where([lang="yi"], [lang^="yi-"]) {
3
+ font-family: var(--sl-font-hebrew);
4
+ }
5
+ }