jekyll-theme-purple 1.0.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 (148) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +22 -0
  3. data/README.md +105 -0
  4. data/_data/locales/ar.yml +91 -0
  5. data/_data/locales/bg-BG.yml +81 -0
  6. data/_data/locales/ca-ES.yml +84 -0
  7. data/_data/locales/cs-CZ.yml +89 -0
  8. data/_data/locales/da-DK.yml +86 -0
  9. data/_data/locales/de-DE.yml +87 -0
  10. data/_data/locales/dv/342/200/221MV.yml +90 -0
  11. data/_data/locales/el-GR.yml +91 -0
  12. data/_data/locales/en.yml +91 -0
  13. data/_data/locales/es-ES.yml +77 -0
  14. data/_data/locales/fa-IR.yml +91 -0
  15. data/_data/locales/fi-FI.yml +90 -0
  16. data/_data/locales/fr-FR.yml +77 -0
  17. data/_data/locales/hu-HU.yml +92 -0
  18. data/_data/locales/id-ID.yml +77 -0
  19. data/_data/locales/it-IT.yml +90 -0
  20. data/_data/locales/ja-JP.yml +84 -0
  21. data/_data/locales/ko-KR.yml +84 -0
  22. data/_data/locales/ku-IQ.yml +91 -0
  23. data/_data/locales/my-MM.yml +77 -0
  24. data/_data/locales/nl-NL.yml +90 -0
  25. data/_data/locales/ps/342/200/221AF.yml +90 -0
  26. data/_data/locales/pt-BR.yml +77 -0
  27. data/_data/locales/ru-RU.yml +87 -0
  28. data/_data/locales/sl-SI.yml +91 -0
  29. data/_data/locales/sv-SE.yml +91 -0
  30. data/_data/locales/th.yml +91 -0
  31. data/_data/locales/tr-TR.yml +77 -0
  32. data/_data/locales/uk-UA.yml +77 -0
  33. data/_data/locales/ur-PK.yml +90 -0
  34. data/_data/locales/vi-VN.yml +76 -0
  35. data/_data/locales/zh-CN.yml +83 -0
  36. data/_data/locales/zh-TW.yml +83 -0
  37. data/_data/origin/basic.yml +39 -0
  38. data/_data/origin/cors.yml +54 -0
  39. data/_includes/analytics/cloudflare.html +6 -0
  40. data/_includes/analytics/fathom.html +6 -0
  41. data/_includes/analytics/goatcounter.html +6 -0
  42. data/_includes/analytics/google.html +13 -0
  43. data/_includes/analytics/matomo.html +13 -0
  44. data/_includes/analytics/umami.html +6 -0
  45. data/_includes/comment.html +5 -0
  46. data/_includes/comments/disqus.html +57 -0
  47. data/_includes/comments/giscus.html +55 -0
  48. data/_includes/comments/utterances.html +38 -0
  49. data/_includes/datetime.html +20 -0
  50. data/_includes/embed/audio.html +35 -0
  51. data/_includes/embed/bilibili.html +9 -0
  52. data/_includes/embed/twitch.html +8 -0
  53. data/_includes/embed/video.html +59 -0
  54. data/_includes/embed/youtube.html +9 -0
  55. data/_includes/favicons.html +19 -0
  56. data/_includes/footer.html +49 -0
  57. data/_includes/head.html +126 -0
  58. data/_includes/js-selector.html +86 -0
  59. data/_includes/jsdelivr-combine.html +26 -0
  60. data/_includes/lang.html +10 -0
  61. data/_includes/language-alias.html +70 -0
  62. data/_includes/media-url.html +37 -0
  63. data/_includes/metadata-hook.html +1 -0
  64. data/_includes/notification.html +24 -0
  65. data/_includes/origin-type.html +13 -0
  66. data/_includes/pageviews/goatcounter.html +21 -0
  67. data/_includes/post-description.html +30 -0
  68. data/_includes/post-nav.html +34 -0
  69. data/_includes/post-paginator.html +91 -0
  70. data/_includes/post-sharing.html +52 -0
  71. data/_includes/read-time.html +37 -0
  72. data/_includes/refactor-content.html +287 -0
  73. data/_includes/related-posts.html +94 -0
  74. data/_includes/search-loader.html +49 -0
  75. data/_includes/search-results.html +10 -0
  76. data/_includes/sidebar.html +105 -0
  77. data/_includes/toc-status.html +10 -0
  78. data/_includes/toc.html +9 -0
  79. data/_includes/topbar.html +77 -0
  80. data/_includes/trending-tags.html +46 -0
  81. data/_includes/update-list.html +40 -0
  82. data/_layouts/archives.html +35 -0
  83. data/_layouts/categories.html +138 -0
  84. data/_layouts/category.html +24 -0
  85. data/_layouts/compress.html +10 -0
  86. data/_layouts/default.html +86 -0
  87. data/_layouts/home.html +121 -0
  88. data/_layouts/page.html +20 -0
  89. data/_layouts/post.html +179 -0
  90. data/_layouts/tag.html +23 -0
  91. data/_layouts/tags.html +22 -0
  92. data/_sass/abstracts/_breakpoints.scss +73 -0
  93. data/_sass/abstracts/_index.scss +4 -0
  94. data/_sass/abstracts/_mixins.scss +80 -0
  95. data/_sass/abstracts/_placeholders.scss +163 -0
  96. data/_sass/abstracts/_variables.scss +30 -0
  97. data/_sass/base/_base.scss +477 -0
  98. data/_sass/base/_index.scss +4 -0
  99. data/_sass/base/_reset.scss +41 -0
  100. data/_sass/base/_syntax.scss +253 -0
  101. data/_sass/base/_typography.scss +266 -0
  102. data/_sass/components/_buttons.scss +51 -0
  103. data/_sass/components/_index.scss +2 -0
  104. data/_sass/components/_popups.scss +172 -0
  105. data/_sass/layout/_footer.scss +36 -0
  106. data/_sass/layout/_index.scss +4 -0
  107. data/_sass/layout/_panel.scss +70 -0
  108. data/_sass/layout/_sidebar.scss +258 -0
  109. data/_sass/layout/_topbar.scss +86 -0
  110. data/_sass/main.bundle.scss +2 -0
  111. data/_sass/main.scss +4 -0
  112. data/_sass/pages/_archives.scss +140 -0
  113. data/_sass/pages/_categories.scss +82 -0
  114. data/_sass/pages/_category-tag.scss +63 -0
  115. data/_sass/pages/_home.scss +173 -0
  116. data/_sass/pages/_index.scss +7 -0
  117. data/_sass/pages/_post.scss +496 -0
  118. data/_sass/pages/_search.scss +184 -0
  119. data/_sass/pages/_tags.scss +23 -0
  120. data/_sass/themes/_dark.scss +290 -0
  121. data/_sass/themes/_light.scss +298 -0
  122. data/_sass/vendors/_bootstrap.scss +5 -0
  123. data/assets/404.html +9 -0
  124. data/assets/css/jekyll-theme-purple.scss +11 -0
  125. data/assets/feed.xml +54 -0
  126. data/assets/img/favicons/android-chrome-192x192.png +0 -0
  127. data/assets/img/favicons/android-chrome-512x512.png +0 -0
  128. data/assets/img/favicons/apple-touch-icon.png +0 -0
  129. data/assets/img/favicons/browserconfig.xml +13 -0
  130. data/assets/img/favicons/favicon-16x16.png +0 -0
  131. data/assets/img/favicons/favicon-32x32.png +0 -0
  132. data/assets/img/favicons/favicon.ico +0 -0
  133. data/assets/img/favicons/mstile-150x150.png +0 -0
  134. data/assets/img/favicons/site.webmanifest +26 -0
  135. data/assets/js/data/mathjax.js +25 -0
  136. data/assets/js/data/search.json +17 -0
  137. data/assets/js/data/swconf.js +47 -0
  138. data/assets/js/dist/app.min.js +7 -0
  139. data/assets/js/dist/categories.min.js +4 -0
  140. data/assets/js/dist/commons.min.js +4 -0
  141. data/assets/js/dist/home.min.js +4 -0
  142. data/assets/js/dist/misc.min.js +4 -0
  143. data/assets/js/dist/page.min.js +4 -0
  144. data/assets/js/dist/post.min.js +4 -0
  145. data/assets/js/dist/sw.min.js +7 -0
  146. data/assets/js/dist/theme.min.js +4 -0
  147. data/assets/robots.txt +10 -0
  148. metadata +277 -0
@@ -0,0 +1,121 @@
1
+ ---
2
+ layout: default
3
+ refactor: true
4
+ ---
5
+
6
+ {% include lang.html %}
7
+
8
+ {% assign all_pinned = site.posts | where: 'pin', 'true' %}
9
+ {% assign all_normal = site.posts | where_exp: 'item', 'item.pin != true and item.hidden != true' %}
10
+
11
+ {% assign posts = '' | split: '' %}
12
+
13
+ <!-- Get pinned posts on current page -->
14
+
15
+ {% assign visible_start = paginator.page | minus: 1 | times: paginator.per_page %}
16
+ {% assign visible_end = visible_start | plus: paginator.per_page %}
17
+
18
+ {% if all_pinned.size > visible_start %}
19
+ {% if all_pinned.size > visible_end %}
20
+ {% assign pinned_size = paginator.per_page %}
21
+ {% else %}
22
+ {% assign pinned_size = all_pinned.size | minus: visible_start %}
23
+ {% endif %}
24
+
25
+ {% for i in (visible_start..all_pinned.size) limit: pinned_size %}
26
+ {% assign posts = posts | push: all_pinned[i] %}
27
+ {% endfor %}
28
+ {% else %}
29
+ {% assign pinned_size = 0 %}
30
+ {% endif %}
31
+
32
+ <!-- Get normal posts on current page -->
33
+
34
+ {% assign normal_size = paginator.posts | size | minus: pinned_size %}
35
+
36
+ {% if normal_size > 0 %}
37
+ {% if pinned_size > 0 %}
38
+ {% assign normal_start = 0 %}
39
+ {% else %}
40
+ {% assign normal_start = visible_start | minus: all_pinned.size %}
41
+ {% endif %}
42
+
43
+ {% assign normal_end = normal_start | plus: normal_size | minus: 1 %}
44
+
45
+ {% for i in (normal_start..normal_end) %}
46
+ {% assign posts = posts | push: all_normal[i] %}
47
+ {% endfor %}
48
+ {% endif %}
49
+
50
+ <div id="post-list" class="flex-grow-1 px-xl-1">
51
+ {% for post in posts %}
52
+ <article class="card-wrapper card">
53
+ <a href="{{ post.url | relative_url }}" class="post-preview row g-0 flex-md-row-reverse">
54
+ {% assign card_body_col = '12' %}
55
+
56
+ {% if post.image %}
57
+ {% assign src = post.image.path | default: post.image %}
58
+ {% capture src %}{% include media-url.html src=src subpath=post.media_subpath %}{% endcapture %}
59
+
60
+ {% assign alt = post.image.alt | xml_escape | default: 'Preview Image' %}
61
+
62
+ {% assign lqip = null %}
63
+
64
+ {% if post.image.lqip %}
65
+ {% capture lqip_url %}{% include media-url.html src=post.image.lqip subpath=post.media_subpath %}{% endcapture %}
66
+ {% assign lqip = 'lqip="' | append: lqip_url | append: '"' %}
67
+ {% endif %}
68
+
69
+ <div class="col-md-5">
70
+ <img src="{{ src }}" alt="{{ alt }}" {{ lqip }}>
71
+ </div>
72
+
73
+ {% assign card_body_col = '7' %}
74
+ {% endif %}
75
+
76
+ <div class="col-md-{{ card_body_col }}">
77
+ <div class="card-body d-flex flex-column">
78
+ <h1 class="card-title my-2 mt-md-0">{{ post.title }}</h1>
79
+
80
+ <div class="card-text content mt-0 mb-3">
81
+ <p>{% include post-description.html %}</p>
82
+ </div>
83
+
84
+ <div class="post-meta flex-grow-1 d-flex align-items-end">
85
+ <div class="me-auto">
86
+ <!-- posted date -->
87
+ <i class="far fa-calendar fa-fw me-1"></i>
88
+ {% include datetime.html date=post.date lang=lang %}
89
+
90
+ <!-- categories -->
91
+ {% if post.categories.size > 0 %}
92
+ <i class="far fa-folder-open fa-fw me-1"></i>
93
+ <span class="categories">
94
+ {% for category in post.categories %}
95
+ {{ category }}
96
+ {%- unless forloop.last -%},{%- endunless -%}
97
+ {% endfor %}
98
+ </span>
99
+ {% endif %}
100
+ </div>
101
+
102
+ {% if post.pin %}
103
+ <div class="pin ms-1">
104
+ <i class="fas fa-thumbtack fa-fw"></i>
105
+ <span>{{ site.data.locales[lang].post.pin_prompt }}</span>
106
+ </div>
107
+ {% endif %}
108
+ </div>
109
+ <!-- .post-meta -->
110
+ </div>
111
+ <!-- .card-body -->
112
+ </div>
113
+ </a>
114
+ </article>
115
+ {% endfor %}
116
+ </div>
117
+ <!-- #post-list -->
118
+
119
+ {% if paginator.total_pages > 1 %}
120
+ {% include post-paginator.html %}
121
+ {% endif %}
@@ -0,0 +1,20 @@
1
+ ---
2
+ layout: default
3
+ ---
4
+
5
+ {% include lang.html %}
6
+
7
+ <article class="px-1">
8
+ {% if page.layout == 'page' or page.collection == 'tabs' %}
9
+ {% assign tab_key = page.title | downcase %}
10
+ {% assign title = site.data.locales[lang].tabs[tab_key] | default: page.title %}
11
+ <h1 class="dynamic-title">
12
+ {{ title }}
13
+ </h1>
14
+ <div class="content">
15
+ {{ content }}
16
+ </div>
17
+ {% else %}
18
+ {{ content }}
19
+ {% endif %}
20
+ </article>
@@ -0,0 +1,179 @@
1
+ ---
2
+ layout: default
3
+ refactor: true
4
+ panel_includes:
5
+ - toc
6
+ tail_includes:
7
+ - related-posts
8
+ - post-nav
9
+ script_includes:
10
+ - comment
11
+ ---
12
+
13
+ {% include lang.html %}
14
+
15
+ {% include toc-status.html %}
16
+
17
+ <article class="px-1" data-toc="{{ enable_toc }}">
18
+ <header>
19
+ <h1 data-toc-skip>{{ page.title }}</h1>
20
+ {% if page.description %}
21
+ <p class="post-desc fw-light mb-4">{{ page.description }}</p>
22
+ {% endif %}
23
+
24
+ <div class="post-meta text-muted">
25
+ <!-- published date -->
26
+ <span>
27
+ {{ site.data.locales[lang].post.posted }}
28
+ {% include datetime.html date=page.date tooltip=true lang=lang %}
29
+ </span>
30
+
31
+ <!-- lastmod date -->
32
+ {% if page.last_modified_at and page.last_modified_at != page.date %}
33
+ <span>
34
+ {{ site.data.locales[lang].post.updated }}
35
+ {% include datetime.html date=page.last_modified_at tooltip=true lang=lang %}
36
+ </span>
37
+ {% endif %}
38
+
39
+ {% if page.image %}
40
+ {% capture src %}src="{{ page.image.path | default: page.image }}"{% endcapture %}
41
+ {% capture class %}class="preview-img{% if page.image.no_bg %}{{ ' no-bg' }}{% endif %}"{% endcapture %}
42
+ {% capture alt %}alt="{{ page.image.alt | xml_escape | default: "Preview Image" }}"{% endcapture %}
43
+
44
+ {% if page.image.lqip %}
45
+ {%- capture lqip -%}lqip="{{ page.image.lqip }}"{%- endcapture -%}
46
+ {% endif %}
47
+
48
+ <div class="mt-3 mb-3">
49
+ <img {{ src }} {{ class }} {{ alt }} w="1200" h="630" {{ lqip }}>
50
+ {%- if page.image.alt -%}
51
+ <figcaption class="text-center pt-2 pb-2">{{ page.image.alt }}</figcaption>
52
+ {%- endif -%}
53
+ </div>
54
+ {% endif %}
55
+
56
+ <div class="d-flex justify-content-between">
57
+ <!-- author(s) -->
58
+ <span>
59
+ {% if page.author %}
60
+ {% assign authors = page.author %}
61
+ {% elsif page.authors %}
62
+ {% assign authors = page.authors %}
63
+ {% endif %}
64
+
65
+ {{ site.data.locales[lang].post.written_by }}
66
+
67
+ <em>
68
+ {% if authors %}
69
+ {% for author in authors %}
70
+ {% if site.data.authors[author].url -%}
71
+ <a href="{{ site.data.authors[author].url }}">{{ site.data.authors[author].name }}</a>
72
+ {%- else -%}
73
+ {{ site.data.authors[author].name }}
74
+ {%- endif %}
75
+ {% unless forloop.last %}{{ '</em>, <em>' }}{% endunless %}
76
+ {% endfor %}
77
+ {% else %}
78
+ <a href="{{ site.social.links[0] }}">{{ site.social.name }}</a>
79
+ {% endif %}
80
+ </em>
81
+ </span>
82
+
83
+ <div>
84
+ <!-- pageviews -->
85
+ {% if site.pageviews.provider and site.analytics[site.pageviews.provider].id %}
86
+ <span>
87
+ <em id="pageviews">
88
+ <i class="fas fa-spinner fa-spin small"></i>
89
+ </em>
90
+ {{ site.data.locales[lang].post.pageview_measure }}
91
+ </span>
92
+ {% endif %}
93
+
94
+ <!-- read time -->
95
+ {% include read-time.html content=content prompt=true lang=lang %}
96
+ </div>
97
+ </div>
98
+ </div>
99
+ </header>
100
+
101
+ {% if enable_toc %}
102
+ <div id="toc-bar" class="d-flex align-items-center justify-content-between invisible">
103
+ <span class="label text-truncate">{{ page.title }}</span>
104
+ <button type="button" class="toc-trigger btn me-1">
105
+ <i class="fa-solid fa-list-ul fa-fw"></i>
106
+ </button>
107
+ </div>
108
+
109
+ <button id="toc-solo-trigger" type="button" class="toc-trigger btn btn-outline-secondary btn-sm">
110
+ <span class="label ps-2 pe-1">{{- site.data.locales[lang].panel.toc -}}</span>
111
+ <i class="fa-solid fa-angle-right fa-fw"></i>
112
+ </button>
113
+
114
+ <dialog id="toc-popup" class="p-0">
115
+ <div class="header d-flex flex-row align-items-center justify-content-between">
116
+ <div class="label text-truncate py-2 ms-4">{{- page.title -}}</div>
117
+ <button id="toc-popup-close" type="button" class="btn mx-1 my-1 opacity-75">
118
+ <i class="fas fa-close"></i>
119
+ </button>
120
+ </div>
121
+ <div id="toc-popup-content" class="px-4 py-3 pb-4"></div>
122
+ </dialog>
123
+ {% endif %}
124
+
125
+ <div class="content">
126
+ {{ content }}
127
+ </div>
128
+
129
+ <div class="post-tail-wrapper text-muted">
130
+ <!-- categories -->
131
+ {% if page.categories.size > 0 %}
132
+ <div class="post-meta mb-3">
133
+ <i class="far fa-folder-open fa-fw me-1"></i>
134
+ {% for category in page.categories %}
135
+ <a href="{{ site.baseurl }}/categories/{{ category | slugify | url_encode }}/">{{ category }}</a>
136
+ {%- unless forloop.last -%},{%- endunless -%}
137
+ {% endfor %}
138
+ </div>
139
+ {% endif %}
140
+
141
+ <!-- tags -->
142
+ {% if page.tags.size > 0 %}
143
+ <div class="post-tags">
144
+ <i class="fa fa-tags fa-fw me-1"></i>
145
+ {% for tag in page.tags %}
146
+ <a
147
+ href="{{ site.baseurl }}/tags/{{ tag | slugify | url_encode }}/"
148
+ class="post-tag no-text-decoration"
149
+ >
150
+ {{- tag -}}
151
+ </a>
152
+ {% endfor %}
153
+ </div>
154
+ {% endif %}
155
+
156
+ <div
157
+ class="
158
+ post-tail-bottom
159
+ d-flex justify-content-between align-items-center mt-5 pb-2
160
+ "
161
+ >
162
+ <div class="license-wrapper">
163
+ {% if site.data.locales[lang].copyright.license.template %}
164
+ {% capture _replacement %}
165
+ <a href="{{ site.data.locales[lang].copyright.license.link }}">
166
+ {{ site.data.locales[lang].copyright.license.name }}
167
+ </a>
168
+ {% endcapture %}
169
+
170
+ {{ site.data.locales[lang].copyright.license.template | replace: ':LICENSE_NAME', _replacement }}
171
+ {% endif %}
172
+ </div>
173
+
174
+ {% include post-sharing.html lang=lang %}
175
+ </div>
176
+ <!-- .post-tail-bottom -->
177
+ </div>
178
+ <!-- div.post-tail-wrapper -->
179
+ </article>
data/_layouts/tag.html ADDED
@@ -0,0 +1,23 @@
1
+ ---
2
+ layout: page
3
+ # The layout for Tag page
4
+ ---
5
+
6
+ {% include lang.html %}
7
+
8
+ <div id="page-tag">
9
+ <h1 class="ps-lg-2">
10
+ <i class="fa fa-tag fa-fw text-muted"></i>
11
+ {{ page.title }}
12
+ <span class="lead text-muted ps-2">{{ page.posts | size }}</span>
13
+ </h1>
14
+ <ul class="content ps-0">
15
+ {% for post in page.posts %}
16
+ <li class="d-flex justify-content-between px-md-3">
17
+ <a href="{{ post.url | relative_url }}">{{ post.title }}</a>
18
+ <span class="dash flex-grow-1"></span>
19
+ {% include datetime.html date=post.date class='text-muted small text-nowrap' lang=lang %}
20
+ </li>
21
+ {% endfor %}
22
+ </ul>
23
+ </div>
@@ -0,0 +1,22 @@
1
+ ---
2
+ layout: page
3
+ # All the Tags of posts.
4
+ ---
5
+
6
+ <div id="tags" class="d-flex flex-wrap mx-xl-2">
7
+ {% assign tags = '' | split: '' %}
8
+ {% for t in site.tags %}
9
+ {% assign tags = tags | push: t[0] %}
10
+ {% endfor %}
11
+
12
+ {% assign sorted_tags = tags | sort_natural %}
13
+
14
+ {% for t in sorted_tags %}
15
+ <div>
16
+ <a class="tag" href="{{ t | slugify | url_encode | prepend: '/tags/' | append: '/' | relative_url }}">
17
+ {{ t -}}
18
+ <span class="text-muted">{{ site.tags[t].size }}</span>
19
+ </a>
20
+ </div>
21
+ {% endfor %}
22
+ </div>
@@ -0,0 +1,73 @@
1
+ @use 'sass:map';
2
+
3
+ $-breakpoints: (
4
+ // 1 column
5
+ sm: 576px,
6
+ md: 768px,
7
+ // 2 columns
8
+ lg: 850px,
9
+ // 3 columns
10
+ xl: 1200px,
11
+ xxl: 1400px,
12
+ xxxl: 1650px
13
+ );
14
+
15
+ @function get($breakpoint) {
16
+ @return map.get($-breakpoints, $breakpoint);
17
+ }
18
+
19
+ /* Less than the given width */
20
+ @mixin lt($width) {
21
+ @media all and (max-width: calc(#{$width} - 1px)) {
22
+ @content;
23
+ }
24
+ }
25
+
26
+ /* Less than or equal to the given width */
27
+ @mixin lte($width) {
28
+ @media all and (max-width: $width) {
29
+ @content;
30
+ }
31
+ }
32
+
33
+ @mixin sm {
34
+ @media all and (min-width: get(sm)) {
35
+ @content;
36
+ }
37
+ }
38
+
39
+ @mixin md {
40
+ @media all and (min-width: get(md)) {
41
+ @content;
42
+ }
43
+ }
44
+
45
+ @mixin lg {
46
+ @media all and (min-width: get(lg)) {
47
+ @content;
48
+ }
49
+ }
50
+
51
+ @mixin xl {
52
+ @media all and (min-width: get(xl)) {
53
+ @content;
54
+ }
55
+ }
56
+
57
+ @mixin xxl {
58
+ @media all and (min-width: get(xxl)) {
59
+ @content;
60
+ }
61
+ }
62
+
63
+ @mixin xxxl {
64
+ @media all and (min-width: get(xxxl)) {
65
+ @content;
66
+ }
67
+ }
68
+
69
+ @mixin between($min, $max) {
70
+ @media all and (min-width: $min) and (max-width: $max) {
71
+ @content;
72
+ }
73
+ }
@@ -0,0 +1,4 @@
1
+ @forward 'variables';
2
+ @forward 'mixins';
3
+ @forward 'placeholders';
4
+ @forward 'breakpoints';
@@ -0,0 +1,80 @@
1
+ @mixin text-ellipsis {
2
+ overflow: hidden;
3
+ text-overflow: ellipsis;
4
+ white-space: nowrap;
5
+ }
6
+
7
+ @mixin mt-mb($value) {
8
+ margin-top: $value;
9
+ margin-bottom: $value;
10
+ }
11
+
12
+ @mixin ml-mr($value) {
13
+ margin-left: $value;
14
+ margin-right: $value;
15
+ }
16
+
17
+ @mixin pt-pb($val) {
18
+ padding-top: $val;
19
+ padding-bottom: $val;
20
+ }
21
+
22
+ @mixin pl-pr($val, $important: false) {
23
+ @if $important {
24
+ padding-left: $val !important;
25
+ padding-right: $val !important;
26
+ } @else {
27
+ padding-left: $val;
28
+ padding-right: $val;
29
+ }
30
+ }
31
+
32
+ @mixin placeholder {
33
+ color: var(--text-muted-color) !important;
34
+ }
35
+
36
+ @mixin placeholder-focus {
37
+ opacity: 0.6;
38
+ }
39
+
40
+ @mixin label($font-size: 1rem, $font-weight: 600, $color: var(--label-color)) {
41
+ color: $color;
42
+ font-size: $font-size;
43
+ font-weight: $font-weight;
44
+ }
45
+
46
+ @mixin align-center {
47
+ position: relative;
48
+ left: 50%;
49
+ transform: translateX(-50%);
50
+ }
51
+
52
+ @mixin prompt($type, $fa-content, $fa-style: 'solid', $rotate: 0) {
53
+ &.prompt-#{$type} {
54
+ background-color: var(--prompt-#{$type}-bg);
55
+
56
+ &::before {
57
+ content: $fa-content;
58
+ color: var(--prompt-#{$type}-icon-color);
59
+ font: var(--fa-font-#{$fa-style});
60
+
61
+ @if $rotate != 0 {
62
+ transform: rotate(#{$rotate}deg);
63
+ }
64
+ }
65
+ }
66
+ }
67
+
68
+ @mixin slide($append: null) {
69
+ $basic: transform 0.4s ease;
70
+
71
+ @if $append {
72
+ transition: $basic, $append;
73
+ } @else {
74
+ transition: $basic;
75
+ }
76
+ }
77
+
78
+ @mixin max-w-100 {
79
+ max-width: 100%;
80
+ }
@@ -0,0 +1,163 @@
1
+ @use 'variables' as v;
2
+ @use 'mixins' as mx;
3
+
4
+ %heading {
5
+ color: var(--heading-color);
6
+ font-weight: 400;
7
+ font-family: v.$font-family-heading;
8
+ scroll-margin-top: 3.5rem;
9
+ }
10
+
11
+ %anchor {
12
+ .anchor {
13
+ font-size: 80%;
14
+ }
15
+
16
+ @media (hover: hover) {
17
+ .anchor {
18
+ visibility: hidden;
19
+ opacity: 0;
20
+ transition: opacity 0.25s ease-in, visibility 0s ease-in 0.25s;
21
+ }
22
+
23
+ &:hover {
24
+ .anchor {
25
+ visibility: visible;
26
+ opacity: 1;
27
+ transition: opacity 0.25s ease-in, visibility 0s ease-in 0s;
28
+ }
29
+ }
30
+ }
31
+ }
32
+
33
+ %tag-hover {
34
+ @extend %link-color;
35
+
36
+ background: var(--tag-hover);
37
+ border-color: var(--tag-hover);
38
+ transition: background 0.35s ease-in-out;
39
+ }
40
+
41
+ %table-cell {
42
+ padding: 0.4rem 1rem;
43
+ font-size: 95%;
44
+ white-space: nowrap;
45
+ }
46
+
47
+ %link-hover {
48
+ color: #f59e0b !important;
49
+ border-bottom: 1px solid #f59e0b;
50
+ text-decoration: none;
51
+ }
52
+
53
+ %link-color {
54
+ color: var(--link-color);
55
+ }
56
+
57
+ %link-underline {
58
+ border-bottom: 1px solid var(--link-underline-color);
59
+ }
60
+
61
+ %clickable-transition {
62
+ transition: all 0.3s ease-in-out;
63
+ }
64
+
65
+ %no-cursor {
66
+ -webkit-user-select: none;
67
+ -moz-user-select: none;
68
+ -ms-user-select: none;
69
+ user-select: none;
70
+ }
71
+
72
+ %no-bottom-border {
73
+ border-bottom: none;
74
+ }
75
+
76
+ %cursor-pointer {
77
+ cursor: pointer;
78
+ }
79
+
80
+ %normal-font-style {
81
+ font-style: normal;
82
+ }
83
+
84
+ %rounded {
85
+ border-radius: v.$radius-lg;
86
+ }
87
+
88
+ %img-caption {
89
+ + em {
90
+ display: block;
91
+ text-align: center;
92
+ font-style: normal;
93
+ font-size: 80%;
94
+ padding: 0;
95
+ color: #6d6c6c;
96
+ }
97
+ }
98
+
99
+ %sidebar-links {
100
+ color: var(--sidebar-muted-color);
101
+ -webkit-user-select: none;
102
+ -moz-user-select: none;
103
+ -ms-user-select: none;
104
+ user-select: none;
105
+ }
106
+
107
+ %text-clip {
108
+ display: -webkit-box;
109
+ overflow: hidden;
110
+ text-overflow: ellipsis;
111
+ -webkit-line-clamp: 2;
112
+ -webkit-box-orient: vertical;
113
+ }
114
+
115
+ %text-ellipsis {
116
+ @include mx.text-ellipsis;
117
+ }
118
+
119
+ %text-highlight {
120
+ color: var(--text-muted-highlight-color);
121
+ font-weight: 600;
122
+ }
123
+
124
+ %text-sm {
125
+ font-size: 0.85rem;
126
+ }
127
+
128
+ %text-xs {
129
+ font-size: 0.8rem;
130
+ }
131
+
132
+ %sup-fn-target {
133
+ &:target {
134
+ background-color: var(--footnote-target-bg);
135
+ width: -moz-fit-content;
136
+ width: -webkit-fit-content;
137
+ width: fit-content;
138
+ transition: background-color 1.75s ease-in-out;
139
+ }
140
+ }
141
+
142
+ %btn-color {
143
+ button i {
144
+ color: #999999;
145
+ }
146
+ }
147
+
148
+ %code-snippet-bg {
149
+ background-color: var(--highlight-bg-color);
150
+ }
151
+
152
+ %code-snippet-padding {
153
+ padding-left: 1rem;
154
+ padding-right: 1.5rem;
155
+ }
156
+
157
+ %max-w-100 {
158
+ max-width: 100%;
159
+ }
160
+
161
+ %panel-border {
162
+ border-left: 1px solid var(--main-border-color);
163
+ }