hexo-theme-stellar 1.44.0 → 2.0.0-rc.2

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 (377) hide show
  1. package/CHANGELOG.md +63 -5
  2. package/CONTRIBUTING.md +29 -120
  3. package/README.md +66 -73
  4. package/README_EN.md +66 -73
  5. package/_config.yml +890 -743
  6. package/_data/icons.yml +43 -171
  7. package/_data/widgets.yml +1 -1
  8. package/assets/icon-v2-x512.webp +0 -0
  9. package/languages/en.yml +59 -2
  10. package/languages/zh-CN.yml +59 -2
  11. package/languages/zh-TW.yml +59 -2
  12. package/layout/404.ejs +7 -4
  13. package/layout/_partial/comments/artalk/layout.ejs +3 -2
  14. package/layout/_partial/comments/beaudar/layout.ejs +2 -2
  15. package/layout/_partial/comments/giscus/layout.ejs +2 -5
  16. package/layout/_partial/comments/layout.ejs +11 -40
  17. package/layout/_partial/comments/twikoo/layout.ejs +3 -2
  18. package/layout/_partial/comments/utterances/layout.ejs +2 -2
  19. package/layout/_partial/comments/waline/layout.ejs +3 -2
  20. package/layout/_partial/components/collection-item.ejs +30 -13
  21. package/layout/_partial/components/collection.ejs +2 -2
  22. package/layout/_partial/cover/index.ejs +5 -2
  23. package/layout/_partial/cover/wiki_cover.ejs +39 -28
  24. package/layout/_partial/dropdown.ejs +26 -14
  25. package/layout/_partial/head.ejs +96 -69
  26. package/layout/_partial/main/article/contributors.ejs +12 -9
  27. package/layout/_partial/main/article/post_footer.ejs +47 -0
  28. package/layout/_partial/main/article/post_read_next.ejs +22 -0
  29. package/layout/_partial/main/article/post_related.ejs +14 -0
  30. package/layout/_partial/main/article/post_tags.ejs +12 -0
  31. package/layout/_partial/main/article/share.ejs +55 -0
  32. package/layout/_partial/main/footer.ejs +11 -10
  33. package/layout/_partial/main/{navbar/nav_tabs_blog.ejs → listing_nav/blog.ejs} +21 -18
  34. package/layout/_partial/main/listing_nav/wiki.ejs +56 -0
  35. package/layout/_partial/main/navbar/article_banner.ejs +39 -35
  36. package/layout/_partial/main/navbar/breadcrumb/blog.ejs +15 -28
  37. package/layout/_partial/main/navbar/breadcrumb/note.ejs +12 -5
  38. package/layout/_partial/main/navbar/breadcrumb/wiki.ejs +15 -11
  39. package/layout/_partial/main/navbar/dateinfo.ejs +28 -12
  40. package/layout/_partial/main/navbar/ghinfo.ejs +5 -3
  41. package/layout/_partial/main/notebook/note_card.ejs +12 -17
  42. package/layout/_partial/main/notebook/note_tags.ejs +3 -4
  43. package/layout/_partial/main/notebook/notebook_card.ejs +11 -4
  44. package/layout/_partial/main/pin_slider.ejs +48 -43
  45. package/layout/_partial/main/post_list/archive_item.ejs +8 -4
  46. package/layout/_partial/main/post_list/latest_post_card.ejs +10 -4
  47. package/layout/_partial/main/post_list/post_card.ejs +39 -90
  48. package/layout/_partial/main/post_list/topic_card.ejs +7 -5
  49. package/layout/_partial/main/post_list/wiki_card.ejs +16 -13
  50. package/layout/_partial/menubtn.ejs +3 -3
  51. package/layout/_partial/primitives/item.ejs +8 -0
  52. package/layout/_partial/primitives/navigation.ejs +17 -0
  53. package/layout/_partial/primitives/region.ejs +16 -0
  54. package/layout/_partial/primitives/section.ejs +8 -0
  55. package/layout/_partial/primitives/shell.ejs +35 -0
  56. package/layout/_partial/regions/widgets.ejs +84 -0
  57. package/layout/_partial/scripts/defines.ejs +46 -76
  58. package/layout/_partial/scripts/runtime.ejs +55 -0
  59. package/layout/_partial/scripts.ejs +18 -42
  60. package/layout/_partial/search/dialog.ejs +33 -0
  61. package/layout/_partial/search/shortcut.ejs +1 -0
  62. package/layout/_partial/sidebar/brand.ejs +127 -0
  63. package/layout/_partial/sidebar/menu.ejs +59 -14
  64. package/layout/_partial/sidebar/search.ejs +58 -41
  65. package/layout/_partial/widgets/actions.ejs +25 -0
  66. package/layout/_partial/widgets/author.ejs +9 -5
  67. package/layout/_partial/widgets/components/linklist.ejs +1 -2
  68. package/layout/_partial/widgets/ghissues.ejs +7 -10
  69. package/layout/_partial/widgets/ghrepo.ejs +23 -16
  70. package/layout/_partial/widgets/ghuser.ejs +3 -3
  71. package/layout/_partial/widgets/recent.ejs +25 -21
  72. package/layout/_partial/widgets/related.ejs +25 -34
  73. package/layout/_partial/widgets/settings.ejs +17 -0
  74. package/layout/_partial/widgets/tagtree.ejs +18 -10
  75. package/layout/_partial/widgets/toc.ejs +17 -9
  76. package/layout/_partial/widgets/tree.ejs +12 -13
  77. package/layout/archive.ejs +20 -13
  78. package/layout/categories.ejs +4 -3
  79. package/layout/collection-preview.ejs +8 -9
  80. package/layout/index.ejs +32 -43
  81. package/layout/index_topic.ejs +6 -13
  82. package/layout/index_wiki.ejs +17 -34
  83. package/layout/layout.ejs +195 -65
  84. package/layout/notebooks.ejs +3 -3
  85. package/layout/notes.ejs +4 -4
  86. package/layout/page.ejs +95 -50
  87. package/layout/settings.ejs +109 -0
  88. package/layout/tags.ejs +4 -3
  89. package/{THIRD-PARTY-NOTICES.md → legal/THIRD-PARTY-NOTICES.md} +8 -4
  90. package/package.json +28 -6
  91. package/scripts/commands/stellar.js +55 -0
  92. package/scripts/events/index.js +15 -9
  93. package/scripts/events/lib/authors.js +9 -7
  94. package/scripts/events/lib/config-hot-reload.js +65 -0
  95. package/scripts/events/lib/config-schema.js +20 -0
  96. package/scripts/events/lib/config.js +22 -63
  97. package/scripts/events/lib/content-config.js +5 -0
  98. package/scripts/events/lib/doc_tree.js +99 -9
  99. package/scripts/events/lib/links.js +6 -3
  100. package/scripts/events/lib/notebooks.js +200 -8
  101. package/scripts/events/lib/utils.js +4 -4
  102. package/scripts/events/lib/version-check.js +57 -3
  103. package/scripts/filters/index.js +2 -27
  104. package/scripts/filters/lib/img_lazyload.js +4 -126
  105. package/scripts/filters/lib/img_onerror.js +14 -17
  106. package/scripts/filters/lib/page-view-model.js +152 -0
  107. package/scripts/generators/404.js +13 -8
  108. package/scripts/generators/author.js +16 -11
  109. package/scripts/generators/notebooks.js +68 -39
  110. package/scripts/generators/search.js +62 -67
  111. package/scripts/generators/settings.js +43 -0
  112. package/scripts/generators/stellar-icons.js +13 -5
  113. package/scripts/generators/topic.js +24 -13
  114. package/scripts/generators/wiki.js +49 -21
  115. package/scripts/helpers/ai_label.js +6 -12
  116. package/scripts/helpers/brand.js +17 -0
  117. package/scripts/helpers/browser_runtime_manifest.js +12 -0
  118. package/scripts/helpers/caption.js +8 -0
  119. package/scripts/helpers/category_color.js +13 -13
  120. package/scripts/helpers/collection.js +18 -0
  121. package/scripts/helpers/comments_model.js +14 -0
  122. package/scripts/helpers/extension_assets.js +8 -0
  123. package/scripts/helpers/json_ld.js +16 -7
  124. package/scripts/helpers/mdrender.js +3 -9
  125. package/scripts/helpers/menu.js +9 -0
  126. package/scripts/helpers/post_view_model.js +23 -0
  127. package/scripts/helpers/regions.js +37 -0
  128. package/scripts/helpers/scrollreveal.js +7 -7
  129. package/scripts/helpers/search_domain.js +34 -0
  130. package/scripts/helpers/service_provider.js +9 -0
  131. package/scripts/helpers/settings.js +16 -0
  132. package/scripts/helpers/share_action.js +8 -0
  133. package/scripts/helpers/stellar_config.js +12 -0
  134. package/scripts/helpers/stellar_data.js +8 -0
  135. package/scripts/helpers/stellar_info.js +21 -16
  136. package/scripts/helpers/stellar_inject.js +9 -0
  137. package/scripts/helpers/ui_classes.js +12 -0
  138. package/scripts/lib/ai_label.js +14 -11
  139. package/scripts/lib/brand.js +41 -0
  140. package/scripts/lib/browser-runtime.js +115 -0
  141. package/scripts/lib/caption.js +21 -0
  142. package/scripts/lib/collection-pipeline/adapters/notebook.js +62 -0
  143. package/scripts/lib/collection-pipeline/adapters/post.js +20 -0
  144. package/scripts/lib/collection-pipeline/adapters/topic.js +82 -0
  145. package/scripts/lib/collection-pipeline/adapters/wiki.js +20 -0
  146. package/scripts/lib/collection-pipeline/index.js +169 -0
  147. package/scripts/lib/collection-pipeline/registry.js +27 -0
  148. package/scripts/lib/collection-pipeline/shared.js +164 -0
  149. package/scripts/lib/comments.js +60 -0
  150. package/scripts/lib/config-inject.js +20 -0
  151. package/scripts/lib/config-schema.js +1095 -0
  152. package/scripts/lib/content-config.js +157 -0
  153. package/scripts/lib/content-defaults.js +56 -0
  154. package/scripts/lib/content-membership.js +233 -0
  155. package/scripts/lib/contribution-contract.js +165 -0
  156. package/scripts/lib/contribution-registry.js +429 -0
  157. package/scripts/lib/doc_tree.js +46 -44
  158. package/scripts/lib/doctor.js +296 -0
  159. package/scripts/lib/front-matter.js +29 -0
  160. package/scripts/lib/hero-effect-registry.js +262 -0
  161. package/scripts/lib/html-images.js +128 -0
  162. package/scripts/lib/internal-constants.js +152 -0
  163. package/scripts/lib/layout-config.js +62 -0
  164. package/scripts/lib/mdrender_html.js +36 -23
  165. package/scripts/lib/menu.js +36 -0
  166. package/scripts/lib/model-schema.js +90 -0
  167. package/scripts/lib/models/index.js +1542 -0
  168. package/scripts/lib/new-note.js +172 -0
  169. package/scripts/lib/page-view-model-registry.js +103 -0
  170. package/scripts/lib/regions.js +132 -0
  171. package/scripts/lib/runtime-data.js +23 -0
  172. package/scripts/lib/safe-path.js +44 -0
  173. package/scripts/lib/search-domain.js +59 -0
  174. package/scripts/lib/seo.js +10 -10
  175. package/scripts/lib/service-provider.js +12 -0
  176. package/scripts/lib/settings.js +16 -0
  177. package/scripts/lib/share-services.js +96 -0
  178. package/scripts/lib/source-config.js +27 -0
  179. package/scripts/lib/theme-metadata.js +22 -0
  180. package/scripts/lib/ui-capabilities.js +32 -0
  181. package/scripts/lib/widget-registry.js +150 -0
  182. package/scripts/lib/wiki_readme.js +15 -11
  183. package/scripts/schema/config-rules.js +290 -0
  184. package/scripts/schema/config-schema.js +163 -0
  185. package/scripts/schema/content-config-rules.js +264 -0
  186. package/scripts/schema/content-config-schema.js +321 -0
  187. package/scripts/schema/model-schema.js +971 -0
  188. package/scripts/schema/schema-utils.js +48 -0
  189. package/scripts/tags/index.js +2 -3
  190. package/scripts/tags/lib/albums.js +6 -6
  191. package/scripts/tags/lib/banner.js +10 -4
  192. package/scripts/tags/lib/box.js +1 -1
  193. package/scripts/tags/lib/button.js +1 -1
  194. package/scripts/tags/lib/chat.js +9 -31
  195. package/scripts/tags/lib/checkbox.js +6 -1
  196. package/scripts/tags/lib/copy.js +4 -1
  197. package/scripts/tags/lib/dropdown.js +6 -4
  198. package/scripts/tags/lib/emoji.js +5 -10
  199. package/scripts/tags/lib/friends.js +4 -4
  200. package/scripts/tags/lib/gallery.js +7 -7
  201. package/scripts/tags/lib/ghcard.js +5 -3
  202. package/scripts/tags/lib/gist.js +16 -0
  203. package/scripts/tags/lib/grid.js +4 -2
  204. package/scripts/tags/lib/hashtag.js +1 -1
  205. package/scripts/tags/lib/icon.js +1 -1
  206. package/scripts/tags/lib/image.js +1 -1
  207. package/scripts/tags/lib/link.js +6 -3
  208. package/scripts/tags/lib/mark.js +8 -3
  209. package/scripts/tags/lib/md.js +1 -1
  210. package/scripts/tags/lib/note.js +1 -1
  211. package/scripts/tags/lib/okr.js +18 -1
  212. package/scripts/tags/lib/posters.js +6 -6
  213. package/scripts/tags/lib/quot.js +15 -5
  214. package/scripts/tags/lib/rating.js +7 -4
  215. package/scripts/tags/lib/sites.js +8 -6
  216. package/scripts/tags/lib/tip.js +6 -6
  217. package/scripts/tags/lib/toc.js +2 -2
  218. package/scripts/tags/lib/vote.js +8 -5
  219. package/source/css/_appearances/_mixins.styl +258 -0
  220. package/source/css/_appearances/card.styl +30 -0
  221. package/source/css/_appearances/flat.styl +44 -0
  222. package/source/css/_appearances/glass.styl +138 -0
  223. package/source/css/_appearances/minimal.styl +325 -0
  224. package/source/css/_common/base.styl +5 -9
  225. package/source/css/_common/blockquote.styl +0 -1
  226. package/source/css/_common/button.styl +1 -1
  227. package/source/css/_common/device.styl +24 -42
  228. package/source/css/_common/dropdown.styl +20 -14
  229. package/source/css/_common/highlight.styl +5 -12
  230. package/source/css/_common/icon.styl +38 -0
  231. package/source/css/_common/input.styl +33 -0
  232. package/source/css/_common/loading.styl +2 -2
  233. package/source/css/_common/svg.styl +0 -8
  234. package/source/css/_components/collection.styl +21 -64
  235. package/source/css/_components/layout.styl +524 -84
  236. package/source/css/_components/list.styl +36 -22
  237. package/source/css/_components/main.styl +16 -19
  238. package/source/css/_components/md.styl +8 -13
  239. package/source/css/_components/pages/article-indent.styl +1 -1
  240. package/source/css/_components/pages/article-story.styl +7 -6
  241. package/source/css/_components/pages/article-tech.styl +5 -5
  242. package/source/css/_components/pages/collection-preview.styl +1 -5
  243. package/source/css/_components/pages/settings.styl +184 -0
  244. package/source/css/_components/partial/article-banner.styl +2 -2
  245. package/source/css/_components/partial/article-footer.styl +0 -32
  246. package/source/css/_components/partial/article-share.styl +48 -0
  247. package/source/css/_components/partial/article-tags.styl +1 -1
  248. package/source/css/_components/partial/cover.styl +13 -13
  249. package/source/css/_components/partial/listing-nav.styl +68 -0
  250. package/source/css/_components/partial/paginator.styl +1 -1
  251. package/source/css/_components/pin-slider.styl +3 -3
  252. package/source/css/_components/sidebar/brand.styl +135 -0
  253. package/source/css/_components/sidebar/footer.styl +14 -31
  254. package/source/css/_components/sidebar/nav-area.styl +4 -0
  255. package/source/css/_components/sidebar/search.styl +176 -26
  256. package/source/css/_components/sidebar/sidebar.styl +76 -110
  257. package/source/css/_components/tag-plugins/banner.styl +16 -28
  258. package/source/css/_components/tag-plugins/checkbox.styl +7 -22
  259. package/source/css/_components/tag-plugins/copy.styl +3 -5
  260. package/source/css/_components/tag-plugins/gallery.styl +2 -2
  261. package/source/css/_components/tag-plugins/grid.styl +3 -0
  262. package/source/css/_components/tag-plugins/image.styl +2 -1
  263. package/source/css/_components/tag-plugins/link.styl +0 -1
  264. package/source/css/_components/tag-plugins/mark.styl +19 -4
  265. package/source/css/_components/tag-plugins/mdrender.styl +2 -2
  266. package/source/css/_components/tag-plugins/navbar.styl +23 -17
  267. package/source/css/_components/tag-plugins/note.styl +2 -2
  268. package/source/css/_components/tag-plugins/okr.styl +1 -2
  269. package/source/css/_components/tag-plugins/quot.styl +5 -0
  270. package/source/css/_components/tag-plugins/rating.styl +3 -2
  271. package/source/css/_components/tag-plugins/timeline.styl +1 -1
  272. package/source/css/_components/tag-plugins/tip.styl +1 -1
  273. package/source/css/_components/tag-plugins/vote.styl +3 -2
  274. package/source/css/_components/widgets/ghrepo.styl +2 -1
  275. package/source/css/_components/widgets/ghuser.styl +4 -6
  276. package/source/css/_components/widgets/settings.styl +49 -0
  277. package/source/css/_components/widgets/timeline.styl +2 -2
  278. package/source/css/_components/widgets/toc.styl +12 -33
  279. package/source/css/_components/widgets/widgets.styl +14 -19
  280. package/source/css/_components/wiki-card.styl +2 -2
  281. package/source/css/_custom.styl +26 -32
  282. package/source/css/_defines/func.styl +47 -37
  283. package/source/css/_defines/theme_base.styl +8 -10
  284. package/source/css/_plugins/card-hover.styl +1 -1
  285. package/source/css/_plugins/copycode.styl +16 -19
  286. package/source/css/_plugins/index.styl +3 -8
  287. package/source/css/_plugins/lazyload.styl +1 -1
  288. package/source/css/main.styl +12 -0
  289. package/source/js/main.js +302 -59
  290. package/source/js/plugins/adaptive-text.js +33 -16
  291. package/source/js/plugins/card-hover.js +2 -24
  292. package/source/js/plugins/copycode.js +10 -16
  293. package/source/js/plugins/voice.js +51 -48
  294. package/source/js/profile.js +316 -0
  295. package/source/js/runtime/asset-loader.js +61 -0
  296. package/source/js/runtime/extension-registry.js +149 -0
  297. package/source/js/runtime/extensions/card-hover.js +5 -0
  298. package/source/js/runtime/extensions/color-scheme-switch.js +101 -0
  299. package/source/js/runtime/extensions/comments.js +200 -0
  300. package/source/js/runtime/extensions/deferred-icons.js +53 -0
  301. package/source/js/{plugins → runtime/extensions}/dropdown.js +69 -30
  302. package/source/js/runtime/extensions/feature.js +200 -0
  303. package/source/js/runtime/extensions/hero-effect.js +179 -0
  304. package/source/js/runtime/extensions/reveal.js +80 -0
  305. package/source/js/runtime/extensions/search.js +23 -0
  306. package/source/js/{services.js → runtime/extensions/services.js} +67 -54
  307. package/source/js/runtime/extensions/settings.js +235 -0
  308. package/source/js/runtime/hero-effects/ferrofluid.js +385 -0
  309. package/source/js/{plugins → runtime/hero-effects}/galaxy.js +53 -177
  310. package/source/js/runtime/hero-effects/light-rays.js +293 -0
  311. package/source/js/runtime/index.js +75 -0
  312. package/source/js/runtime/legacy-request-adapter.js +47 -0
  313. package/source/js/runtime/request-cache.js +219 -0
  314. package/source/js/search/algolia-search.js +76 -51
  315. package/source/js/search/highlight.js +1 -1
  316. package/source/js/search/local-search.js +96 -57
  317. package/source/js/search/shortcut.js +31 -20
  318. package/source/js/services/friends_and_posts.js +6 -1
  319. package/source/js/services/rating.js +14 -6
  320. package/source/js/services/siteinfo.js +3 -7
  321. package/source/js/services/timeline.js +1 -1
  322. package/source/js/services/vote.js +7 -5
  323. package/source/js/services/weibo.js +1 -1
  324. package/source/js/utils.js +19 -444
  325. package/.claude/skills/stellar-theme-dev/SKILL.md +0 -51
  326. package/_data/chat_users.yml +0 -0
  327. package/layout/_partial/comments/artalk/script.ejs +0 -76
  328. package/layout/_partial/comments/beaudar/script.ejs +0 -33
  329. package/layout/_partial/comments/giscus/script.ejs +0 -31
  330. package/layout/_partial/comments/script.ejs +0 -3
  331. package/layout/_partial/comments/twikoo/script.ejs +0 -25
  332. package/layout/_partial/comments/utterances/script.ejs +0 -33
  333. package/layout/_partial/comments/waline/script.ejs +0 -43
  334. package/layout/_partial/main/article/article_footer.ejs +0 -164
  335. package/layout/_partial/main/article/article_tags.ejs +0 -16
  336. package/layout/_partial/main/article/read_next.ejs +0 -63
  337. package/layout/_partial/main/article/related_posts.ejs +0 -16
  338. package/layout/_partial/main/navbar/nav_tabs_wiki.ejs +0 -52
  339. package/layout/_partial/scripts/bootstrap.ejs +0 -37
  340. package/layout/_partial/scripts/lazyload.ejs +0 -89
  341. package/layout/_partial/sidebar/grad-def.ejs +0 -26
  342. package/layout/_partial/sidebar/index_leftbar.ejs +0 -191
  343. package/layout/_partial/sidebar/index_rightbar.ejs +0 -94
  344. package/layout/_partial/sidebar/logo.ejs +0 -99
  345. package/layout/_plugins/adaptive_text.ejs +0 -11
  346. package/layout/_plugins/card_hover.ejs +0 -32
  347. package/layout/_plugins/copycode.ejs +0 -17
  348. package/layout/_plugins/fancybox.ejs +0 -53
  349. package/layout/_plugins/heti.ejs +0 -21
  350. package/layout/_plugins/index.ejs +0 -50
  351. package/layout/_plugins/mathjax.ejs +0 -49
  352. package/layout/_plugins/mermaid.ejs +0 -33
  353. package/layout/_plugins/preload.ejs +0 -9
  354. package/layout/_plugins/scrollreveal.ejs +0 -102
  355. package/layout/_plugins/search/algolia_search.ejs +0 -12
  356. package/layout/_plugins/search/local_search.ejs +0 -9
  357. package/layout/_plugins/swiper.ejs +0 -27
  358. package/layout/_plugins/tianli_gpt.ejs +0 -14
  359. package/scripts/commands/new-note.js +0 -49
  360. package/scripts/events/lib/merge_posts.js +0 -48
  361. package/scripts/events/lib/topic_tree.js +0 -48
  362. package/scripts/helpers/related_posts.js +0 -51
  363. package/scripts/helpers/subtitle.js +0 -8
  364. package/scripts/lib/notebooks.js +0 -181
  365. package/scripts/lib/subtitle.js +0 -28
  366. package/scripts/tags/lib/about.js +0 -48
  367. package/source/css/_components/page-transition.styl +0 -22
  368. package/source/css/_components/partial/navbar.styl +0 -51
  369. package/source/css/_components/sidebar/logo.styl +0 -111
  370. package/source/css/_components/tag-plugins/about.styl +0 -56
  371. package/source/css/_components/widgets/tree.styl +0 -0
  372. package/source/css/_plugins/scrollreveal.styl +0 -6
  373. package/source/css/_plugins/tianli_gpt.styl +0 -213
  374. package/source/css/plugins/mermaid.styl +0 -137
  375. package/source/js/icons.js +0 -60
  376. package/source/js/services/fcircle.js +0 -35
  377. package/source/js/theme.js +0 -61
@@ -1,31 +1,26 @@
1
1
  // list
2
- .l_main .post-list
2
+ .site-main .post-list
3
3
  margin: 1rem
4
4
  .post-title:first-child
5
5
  margin-top: .5rem
6
6
 
7
- // 白底文章卡片(含置顶轮播卡片)hover 时:标题底部主题色下划线高度从 0 生长到 12px 并淡入,层级在文字下层
7
+ // 文章列表标题使用逐行主题色粗下划线,换行时按每行文字绘制。
8
8
  .post-list .post-card .post-title
9
- position: relative
10
9
  width: fit-content
11
- &::after
12
- content: ''
13
- position: absolute
14
- left: 0
15
- bottom: -2px
16
- border-radius: 2px
17
- z-index: -1
18
- width: 100%
19
- height: 0
20
- opacity: 0
21
- background: var(--theme)
22
- transition: height .25s ease, opacity .25s ease
10
+ text-decoration-line: underline
11
+ text-decoration-style: solid
12
+ text-decoration-thickness: 8px
13
+ text-decoration-color: transparent
14
+ text-underline-offset: -2px
15
+ text-decoration-skip-ink: none
16
+ transition: text-decoration-color .25s ease
23
17
 
24
- .post-list .post-card:hover .post-title::after
25
- height: 12px
26
- opacity: 0.5
18
+ .post-list .post-card:hover .post-title,
19
+ .post-list .post-card:focus-visible .post-title,
20
+ .post-list .post-card:focus-within .post-title
21
+ text-decoration-color: unquote('color-mix(in srgb, var(--theme) 50%, transparent)')
27
22
 
28
- .l_main .post-list
23
+ .site-main .post-list
29
24
  .post-title
30
25
  font-weight: 500
31
26
  margin: 1.25rem auto .75rem 0
@@ -33,13 +28,17 @@
33
28
  font-size: $fsh4
34
29
  border-bottom: none
35
30
  color: var(--text)
36
- trans1 color
31
+ trans2 color, text-decoration-color, .25s
37
32
  @media screen and (max-width: $device-mobile)
38
33
  font-size: $fsh5
39
34
  margin: 0.5rem 0
40
35
  .wiki .post-title
41
36
  margin-top: 0.5rem
42
37
 
38
+ @media (prefers-reduced-motion: reduce)
39
+ .post-list .post-card .post-title
40
+ transition: none
41
+
43
42
  // card
44
43
  .post-list .post-card-wrap
45
44
  display: block
@@ -156,7 +155,7 @@
156
155
  object-fit: cover
157
156
  width: 100%
158
157
  border-radius: 0
159
- aspect-ratio: hexo-config('article.cover_ratio')
158
+ aspect-ratio: hexo-config('article.listing.cover_ratio')
160
159
 
161
160
  // 封面渐变模糊卡片:文章 photo 卡片与专栏最新文章卡片共用(接入 cover-overlay 统一覆盖层)
162
161
  .post-list .post-card .cover
@@ -203,10 +202,23 @@
203
202
  font-size: $fsh4
204
203
  .caption
205
204
  font-size: $fs-13
205
+ &.no-cover
206
+ background: var(--card)
207
+ &:before
208
+ display: none
209
+ &:after
210
+ background-image: none
211
+ .cover-info
212
+ position: relative
213
+ color: var(--text)
214
+ .text
215
+ text-shadow: none
216
+ .topic, .caption
217
+ color: var(--text-p2)
206
218
 
207
219
  .post-list .post-card.post.photo
208
220
  .cover img
209
- aspect-ratio: hexo-config('article.cover_ratio')
221
+ aspect-ratio: hexo-config('article.listing.cover_ratio')
210
222
  // hover 放大覆盖:基规则的 `transform: translateZ(0)` 特异性高于上方 `.post-card:hover` 的 scale,
211
223
  // 需用更高特异性选择器在基规则之后覆盖,保持 hover 缩放动画(叠加恒等变换)
212
224
  &:hover
@@ -254,6 +266,8 @@
254
266
  flex: none
255
267
  width: 100%
256
268
  aspect-ratio: 2 / 1
269
+ &.no-cover
270
+ aspect-ratio: auto
257
271
  border-radius: $border-card-l
258
272
  overflow: hidden
259
273
  // 背景图由 .cover 自身背景承载(跟随 corner-shape),子图保留用于 hover 滤镜
@@ -1,19 +1,16 @@
1
- .l_main
1
+ .site-main
2
2
  position: relative
3
3
  padding-bottom: var(--gap-page)
4
- @media screen and (min-width: $device-mobile-max)
5
- padding-top: var(--gap-page)
6
- header
4
+ padding-top: var(--shell-content-top-gap)
5
+ > .brand-header
6
+ display: none
7
7
  margin: 2rem 1rem 1rem
8
- .logo-wrap
8
+ @media screen and (max-width: $device-tablet)
9
+ display: flex !important
10
+ .brand-wrap
9
11
  margin: 0
10
12
 
11
- .l_body.index
12
- .l_main
13
- @media screen and (max-width: $device-mobile-max)
14
- padding-top: 0
15
-
16
- body>.sitebg
13
+ body > .site-background
17
14
  position fixed
18
15
  top: 0
19
16
  left: 0
@@ -21,16 +18,16 @@ body>.sitebg
21
18
  bottom: 0
22
19
  background-size: cover
23
20
  if $site-background-image
24
- background-image: convert($site-background-image)
25
- .siteblur
21
+ background-image: url($site-background-image)
22
+ .site-background__blur
26
23
  width: 100%
27
24
  height: 100%
28
25
  --blur-px: 0
29
26
  --blur-sat: 200%
30
27
  blur-effect()
31
- if hexo-config('style.site.blur-sat')
32
- --blur-sat: convert(hexo-config('style.site.blur-sat'))
33
- if hexo-config('style.site.blur-px')
34
- --blur-px: convert(hexo-config('style.site.blur-px'))
35
- if hexo-config('style.site.blur-bg')
36
- --blur-bg: convert(hexo-config('style.site.blur-bg'))
28
+ if hexo-config('appearance.backgrounds.page.backdrop.saturation')
29
+ --blur-sat: convert(hexo-config('appearance.backgrounds.page.backdrop.saturation'))
30
+ if hexo-config('appearance.backgrounds.page.backdrop.radius')
31
+ --blur-px: convert(hexo-config('appearance.backgrounds.page.backdrop.radius'))
32
+ if hexo-config('appearance.backgrounds.page.backdrop.overlay')
33
+ --blur-bg: convert(hexo-config('appearance.backgrounds.page.backdrop.overlay'))
@@ -87,17 +87,12 @@
87
87
  li:not([class]) a:not([class])
88
88
  p:not([class]) a:not([class])
89
89
  table a:not([class])
90
- position: relative
91
- text-decoration: none
92
- trans1 all
93
- border-radius: 0
94
- background: linear-gradient(0deg,var(--block-border),var(--block-border)) no-repeat left 100%/100% 2px
95
- &:hover
96
- text-decoration: none
97
- color: var(--link)
98
- border-radius: 4px
99
- background: linear-gradient(0deg,var(--link-a20),var(--link-a20)) no-repeat left 100%/100% 100%
90
+ text-decoration-line: underline
91
+ text-decoration-color: var(--block-border)
92
+ text-decoration-thickness: 1px
93
+ text-underline-offset: 2px
94
+ transition: text-decoration-color .2s ease-out
95
+ &:hover, &:focus-visible
96
+ text-decoration-color: var(--link)
100
97
  &:has(img)
101
- background: none
102
- &:hover
103
- background: none
98
+ text-decoration: none
@@ -1,4 +1,4 @@
1
- .l_body[text-indent] article.content
1
+ body[data-text-indent] article.content
2
2
  p:not([class])
3
3
  text-indent: 'calc(%s * 2)' % var(--fs-content)
4
4
  text-align: justify
@@ -1,4 +1,4 @@
1
- .l_body[type=story] .md-text.content
1
+ body[data-article-style='story'] .md-text.content
2
2
  --fs-content-base: 'calc(%s + 2px)' % var(--fs-root)
3
3
  --fs-content: var(--fs-content-base)
4
4
  --fsh2: 'calc(%s + 11px)' % var(--fs-content)
@@ -45,9 +45,10 @@
45
45
  trans1 all
46
46
  vertical-align: middle
47
47
  &:before
48
- margin-left: -1em
48
+ margin-left: -1.2em
49
49
  svg-mask-icon(var(--icon-h3-left))
50
50
  &:after
51
+ margin-left: .2em
51
52
  svg-mask-icon(var(--icon-h3-right))
52
53
 
53
54
  h4:not([class])
@@ -82,7 +83,7 @@
82
83
  .poetry, .okr, .timeline, li, .article-footer
83
84
  p:not([class])
84
85
  text-indent: 0
85
- text-align: convert(hexo-config('style.text-align'))
86
+ text-align: convert(hexo-config('appearance.typography.content_align'))
86
87
 
87
88
  p>img, .tag-plugin.image .image-bg
88
89
  border-radius: $border-image-l
@@ -90,7 +91,7 @@
90
91
  border-radius: $border-image-l
91
92
 
92
93
 
93
- .l_body[type=story] .md-text.content>blockquote, .md-text.content .tag-plugin.blockquote
94
+ body[data-article-style='story'] .md-text.content>blockquote, .md-text.content .tag-plugin.blockquote
94
95
  text-align: center
95
96
  --inset: calc(var(--fs-content) * 2)
96
97
  margin-left: var(--inset)
@@ -123,11 +124,11 @@
123
124
  background-color: x-theme-alpha(0.5)
124
125
 
125
126
 
126
- .l_body[type=story] .article.banner .content .bottom.only-title
127
+ body[data-article-style='story'] .article.banner .content .bottom.only-title
127
128
  justify-content: center
128
129
 
129
130
 
130
- .l_body[text-indent] .tag-plugin.tabs .tab-content .tab-pane>p:not([class])
131
+ body[data-text-indent] .tag-plugin.tabs .tab-content .tab-pane>p:not([class])
131
132
  text-indent: 'calc(%s * 2)' % var(--fs-content)
132
133
  a
133
134
  text-indent: 0
@@ -1,4 +1,4 @@
1
- .l_body[type='tech'] article.content
1
+ body[data-article-style='tech'] article.content
2
2
  h1,h2,h3,h4,h5,h6
3
3
  color: var(--text)
4
4
  line-height: 1.8
@@ -22,14 +22,14 @@
22
22
  font-weight: 500
23
23
  >a:first-child
24
24
  &:before
25
- content: hexo-config('style.header_prefix.h2')
25
+ content: hexo-config('appearance.typography.heading_prefixes.h2')
26
26
  h3
27
27
  >a:first-child:before
28
- content: hexo-config('style.header_prefix.h3')
28
+ content: hexo-config('appearance.typography.heading_prefixes.h3')
29
29
  h4
30
30
  >a:first-child:before
31
- content: hexo-config('style.header_prefix.h4')
31
+ content: hexo-config('appearance.typography.heading_prefixes.h4')
32
32
  h5
33
33
  >a:first-child:before
34
- content: hexo-config('style.header_prefix.h5')
34
+ content: hexo-config('appearance.typography.heading_prefixes.h5')
35
35
 
@@ -36,12 +36,10 @@
36
36
 
37
37
  .collection-preview__surface
38
38
  box-sizing: border-box
39
+ position: relative
39
40
  width: 100%
40
41
  margin: 0 auto
41
42
  padding: var(--gap-base)
42
- border-radius: $border-card-l
43
- background: var(--card)
44
- box-shadow: $boxshadow-card
45
43
  &[data-preview-width='240']
46
44
  max-width: 240px
47
45
  &[data-preview-width='320']
@@ -50,8 +48,6 @@
50
48
  width: unquote('min(720px, calc(100vw - 2 * var(--gap-page)))')
51
49
  max-width: none
52
50
  grid-column: 1 / -1
53
- &[data-ui-surface='glass']
54
- background: linear-gradient(135deg, rgba(white, .42), rgba(white, .12)), url(https://gcore.jsdelivr.net/gh/cdn-x/placeholder@1.0.13/image/sidebar-bg1@small.jpg) center / cover
55
51
  >header
56
52
  display: flex
57
53
  justify-content: space-between
@@ -0,0 +1,184 @@
1
+ .settings-page
2
+ --settings-label-width: 8rem
3
+ --settings-content-gap: 2rem
4
+
5
+ .settings-page__header
6
+ margin: 1rem 0
7
+ h1
8
+ margin: 0
9
+ font-size: 1.75rem
10
+
11
+ .settings-section
12
+ margin: 0
13
+ padding: 1.5rem 0
14
+ h2
15
+ margin: 0 0 1.5rem
16
+ font-size: 1.125rem
17
+
18
+ .settings-section__body
19
+ display: grid
20
+ grid-template-columns: var(--settings-label-width) minmax(0, 1fr)
21
+ column-gap: var(--settings-content-gap)
22
+ min-width: 0
23
+ > .settings-profile,
24
+ > .settings-kv,
25
+ > .settings-empty
26
+ grid-column: 1 / -1
27
+ > .settings-result
28
+ grid-column: 2
29
+
30
+ .settings-profile
31
+ display: grid
32
+ grid-template-columns: var(--settings-label-width) minmax(0, 1fr)
33
+ column-gap: var(--settings-content-gap)
34
+
35
+ .settings-profile__avatar
36
+ grid-column: 1
37
+ width: 96px
38
+ height: 96px
39
+ margin-bottom: 1.5rem
40
+ border-radius: 50%
41
+ corner-shape: round
42
+ overflow: hidden
43
+ display: grid
44
+ place-items: center
45
+ background: var(--block)
46
+ color: var(--text-p3)
47
+ img, span, svg
48
+ width: 100%
49
+ height: 100%
50
+ img
51
+ object-fit: cover
52
+
53
+ .settings-profile__content
54
+ grid-column: 1 / -1
55
+ min-width: 0
56
+
57
+ .settings-provider-note,
58
+ .settings-empty
59
+ margin: 0
60
+ color: var(--text-p2)
61
+
62
+ .settings-form
63
+ display: grid
64
+ gap: .875rem
65
+ label
66
+ display: grid
67
+ grid-template-columns: var(--settings-label-width) minmax(0, 1fr)
68
+ align-items: center
69
+ column-gap: var(--settings-content-gap)
70
+ min-width: 0
71
+ > span
72
+ color: var(--text-p2)
73
+ font-size: .875rem
74
+ > .settings-actions
75
+ margin-left: calc(var(--settings-label-width) + var(--settings-content-gap))
76
+ input
77
+ width: 100%
78
+ min-width: 0
79
+ box-sizing: border-box
80
+ padding: .625rem .75rem
81
+ border: 1px solid var(--block-border)
82
+ border-radius: .625rem
83
+ color: var(--text-p1)
84
+ background: var(--block)
85
+ outline: none
86
+ &:focus-visible
87
+ border-color: var(--theme)
88
+ box-shadow: 0 0 0 2px var(--theme-a20)
89
+
90
+ .settings-actions
91
+ display: flex
92
+ flex-wrap: wrap
93
+ gap: .625rem
94
+
95
+ .settings-button
96
+ padding: .5rem .875rem
97
+ border: 0
98
+ border-radius: .625rem
99
+ color: var(--text-p1)
100
+ background: var(--block)
101
+ cursor: pointer
102
+ transition: background .2s ease, color .2s ease, box-shadow .2s ease
103
+ &:hover
104
+ background: var(--block-border)
105
+ &:focus-visible
106
+ outline: 2px solid var(--theme)
107
+ outline-offset: 2px
108
+
109
+ .settings-button--primary
110
+ color: var(--text-reverse)
111
+ background: var(--theme)
112
+ &:hover
113
+ background: var(--theme)
114
+ filter: brightness(1.08)
115
+
116
+ .settings-button--danger
117
+ color: var(--theme)
118
+
119
+ .settings-result
120
+ min-height: 1.5em
121
+ margin: .75rem 0 0
122
+ color: var(--text-p2)
123
+ &[data-state='success']
124
+ color: var(--theme)
125
+ &[data-state='failure']
126
+ color: $color-md-red
127
+
128
+ .settings-kv
129
+ margin: 0
130
+
131
+ .settings-kv__row
132
+ display: grid
133
+ grid-template-columns: var(--settings-label-width) minmax(0, 1fr)
134
+ column-gap: var(--settings-content-gap)
135
+ align-items: center
136
+ dt, dd
137
+ margin: 0
138
+ min-width: 0
139
+ dt
140
+ display: flex
141
+ align-items: center
142
+ color: var(--text-p3)
143
+ dd
144
+ display: flex
145
+ align-items: center
146
+ overflow-wrap: anywhere
147
+
148
+ .settings-kv__value
149
+ min-width: 0
150
+
151
+ .settings-kv__link,
152
+ .settings-kv__action
153
+ flex: 0 0 auto
154
+ display: inline-grid
155
+ place-items: center
156
+ width: 2rem
157
+ height: 2rem
158
+ margin-left: 4px
159
+ border-radius: 50%
160
+ color: var(--text-p2)
161
+ background: transparent
162
+ &:hover
163
+ color: var(--theme)
164
+ background: var(--theme-a10)
165
+ &:focus-visible
166
+ color: var(--theme)
167
+ outline: 2px solid var(--theme)
168
+ outline-offset: 1px
169
+ .ui-icon,
170
+ svg
171
+ width: 1rem
172
+ height: 1rem
173
+
174
+ .settings-kv__action
175
+ padding: 0
176
+ border: 0
177
+ cursor: pointer
178
+
179
+ @media screen and (max-width: $device-mobile-max)
180
+ .settings-page
181
+ --settings-label-width: 5rem
182
+ --settings-content-gap: .75rem
183
+ .settings-section
184
+ padding: 1.25rem 0
@@ -26,7 +26,7 @@
26
26
  .article.banner
27
27
  .bg+.content
28
28
  min-height: 200px
29
- aspect-ratio: hexo-config('article.banner_ratio')
29
+ aspect-ratio: hexo-config('article.banner.ratio')
30
30
  position: relative
31
31
  --text-banner: white
32
32
  --button-hover-bg: rgba(white, 0.25)
@@ -69,7 +69,7 @@
69
69
  line-height: 1.2
70
70
  margin: 0.25rem 0
71
71
 
72
- .l_body .article.banner .content .bottom.only-title .title
72
+ .site-shell .article.banner .content .bottom.only-title .title
73
73
  padding: 0.75rem 0
74
74
 
75
75
 
@@ -87,35 +87,3 @@
87
87
  img
88
88
  width 32px
89
89
  height: 32px
90
-
91
- .article-footer .social-wrap
92
- grid-gap: 0.5rem 2rem
93
- margin: 1rem 0 0.5rem
94
- a.social
95
- background: none
96
- border-radius: 4px
97
- padding: 0
98
- img
99
- display: block
100
- height: 24px
101
- width 24px
102
-
103
- .article-footer .qrcode
104
- width: 128px
105
- padding: 4px
106
- background: white
107
- border-radius: 4px
108
- box-shadow: 0 4px 8px 0px rgba(0, 0, 0, 0.1), 0 0 32px 0px rgba(0, 0, 0, 0.1)
109
- overflow: hidden
110
- trans1 all
111
- height: 0
112
- margin: 0 auto
113
- transform: scale(0.01)
114
- img
115
- object-fit: contain
116
-
117
- .article-footer .qrcode.display
118
- margin: 2rem auto 1rem
119
- height: 128px !important
120
- opacity: 1 !important
121
- transform: scale(1)
@@ -0,0 +1,48 @@
1
+ .article-share
2
+ padding: 1rem
3
+ >.body>.link
4
+ margin: 0
5
+ height: 0
6
+ opacity: 0
7
+ overflow: hidden
8
+ .social-wrap
9
+ gap: 1rem
10
+ justify-content: center
11
+ .social
12
+ background: none
13
+ color: var(--text-p2)
14
+ border-radius: 50%
15
+ corner-shape: round
16
+ width: 40px
17
+ height: 40px
18
+ padding: 0
19
+ overflow: visible
20
+ .share-item__icon
21
+ --ui-icon-size: 40px
22
+ box-sizing: border-box
23
+ padding: 8px
24
+ border-radius: 50%
25
+ corner-shape: round
26
+ background: transparent
27
+ trans1 background
28
+ &:hover, &:focus-visible, &:active
29
+ .share-item__icon
30
+ background: var(--block-border)
31
+ .qrcode
32
+ width: 128px
33
+ padding: 4px
34
+ background: white
35
+ border-radius: 4px
36
+ box-shadow: 0 4px 8px 0px rgba(0, 0, 0, 0.1), 0 0 32px 0px rgba(0, 0, 0, 0.1)
37
+ overflow: hidden
38
+ trans1 all
39
+ height: 0
40
+ margin: 0 auto
41
+ transform: scale(0.01)
42
+ img
43
+ object-fit: contain
44
+ .qrcode.display
45
+ margin: 2rem auto 1rem
46
+ height: 128px !important
47
+ opacity: 1 !important
48
+ transform: scale(1)
@@ -4,7 +4,7 @@
4
4
  flex-wrap: wrap
5
5
  justify-content: center
6
6
  align-items: center
7
- margin: 2rem 0 0
7
+ padding: 1rem
8
8
  column-gap: 1rem
9
9
  line-height: 1.6
10
10
  a.tag
@@ -1,4 +1,4 @@
1
- .l_cover
1
+ .cover-content
2
2
  height: 100vh
3
3
  text-align: center
4
4
  display: flex
@@ -10,7 +10,7 @@
10
10
  height: inherit
11
11
 
12
12
 
13
- .l_cover .cover-wrap
13
+ .cover-content .cover-wrap
14
14
  margin-bottom: 0
15
15
  display: flex
16
16
  flex-direction: column
@@ -31,7 +31,7 @@
31
31
  a.start
32
32
  display: inline-block
33
33
 
34
- .l_cover.post
34
+ .cover-content.post
35
35
  .cover
36
36
  z-index: -1
37
37
  width: 100%
@@ -49,7 +49,7 @@
49
49
  border-radius: 2rem
50
50
 
51
51
 
52
- .l_cover.wiki .cover-wrap
52
+ .cover-content.wiki .cover-wrap
53
53
  max-width: $device-mobile
54
54
  .preview
55
55
  margin-bottom: 2rem
@@ -66,7 +66,7 @@
66
66
  font-size: 3rem
67
67
 
68
68
 
69
- .l_cover.wiki-hero
69
+ .cover-content.wiki-hero
70
70
  min-height: 640px
71
71
  overflow: hidden
72
72
  isolation: isolate
@@ -101,9 +101,9 @@
101
101
  inset: 0
102
102
  pointer-events: none
103
103
  background: linear-gradient(to bottom, transparent 0%, transparent 80%, var(--background) 100%)
104
- &.galaxy
104
+ &.has-effect
105
105
  &:not(.image)
106
- background: #000000
106
+ background: var(--hero-effect-background, #000000)
107
107
  canvas
108
108
  display: block
109
109
  position: absolute
@@ -197,7 +197,7 @@
197
197
  color: var(--text-banner, var(--text))
198
198
  // 主题色仅作为外发光轮廓,保留黑白标题的对比度。
199
199
  text-shadow: 0 0 16px unquote('color-mix(in srgb, var(--text-banner-theme, currentColor) 30%, transparent)'), 0 0 32px unquote('color-mix(in srgb, var(--text-banner-theme, currentColor) 20%, transparent)'), 0 0 64px unquote('color-mix(in srgb, var(--text-banner-theme, currentColor) 10%, transparent)')
200
- font-size: clamp(2.5rem, 3vw, 4.75rem)
200
+ font-size: clamp(2.5rem, 3vw, 4rem)
201
201
  .description
202
202
  margin: 0
203
203
  color: var(--text-banner-theme, var(--text-p2))
@@ -262,7 +262,7 @@
262
262
  gap: .5rem
263
263
  button
264
264
  padding: .5rem .75rem
265
- border-radius: 8px
265
+ border-radius: $border-button
266
266
  color: inherit
267
267
  opacity 0.5
268
268
  font-family: inherit
@@ -290,7 +290,7 @@
290
290
  align-items: center
291
291
  gap: .5rem
292
292
  padding: .5rem .75rem .5rem .5rem
293
- border-radius: 8px
293
+ border-radius: $border-button
294
294
  color: var(--text-banner, var(--text))
295
295
  font-family: inherit
296
296
  font-size: $fs-13
@@ -304,7 +304,7 @@
304
304
  justify-content: center
305
305
 
306
306
  @media screen and (max-width: $device-tablet)
307
- .l_cover.wiki-hero
307
+ .cover-content.wiki-hero
308
308
  height: auto
309
309
  min-height: 100vh
310
310
  padding: 7rem 0 4rem
@@ -332,7 +332,7 @@
332
332
  max-width: 620px
333
333
 
334
334
  @media screen and (max-width: $device-mobile)
335
- .l_cover.wiki-hero
335
+ .cover-content.wiki-hero
336
336
  .wiki-cover-layout
337
337
  width: calc(100% - 2rem)
338
338
  .wiki-navbar
@@ -345,5 +345,5 @@
345
345
  padding: .25rem .75rem .25rem .5rem
346
346
 
347
347
  @media (prefers-reduced-motion: reduce)
348
- .l_cover.wiki-hero .wiki-cover-background.galaxy canvas
348
+ .cover-content.wiki-hero .wiki-cover-background.has-effect.respect-reduced-motion canvas
349
349
  display: none