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
@@ -16,8 +16,7 @@
16
16
  @media screen and (min-width: $device-laptop)
17
17
  background: var(--background)
18
18
 
19
- [data-ui-surface='glass'] .widget-wrapper.toc,
20
- [data-ui-surface='card'] .widget-wrapper.toc
19
+ .site-region__surface .widget-wrapper.toc
21
20
  @media screen and (min-width: $device-laptop)
22
21
  background: none
23
22
 
@@ -51,28 +50,18 @@
51
50
  background: var(--theme)
52
51
  border-radius: 4px
53
52
  &:hover
54
- background: var(--ui-adapter-bg-hover)
55
- box-shadow: var(--ui-adapter-shadow-hover)
56
53
  color: var(--ui-item-title)
57
54
 
58
- // 固定位置
59
- [data-ui-surface='sidebar'] .widgets .widget-wrapper.toc
55
+ // Region Surface 统一负责固定高度与滚动,TOC 不再创建独立 Sticky/Scroll 容器。
56
+ :is([data-region='leftbar'], [data-region='rightbar']) .widgets .widget-wrapper.toc
60
57
  margin-top: 1rem
61
- position: sticky
62
- position: -webkit-sticky
63
- top: 0
58
+ position: static
64
59
  padding: 1rem 0
65
60
  &:first-child
66
- top: var(--gap-page)
67
61
  padding-top: 1rem
68
62
  .widget-body .toc
69
- max-height: 70vh
70
- @media screen and (max-width: $device-desktop)
71
- max-height: 60vh
72
- @media screen and (max-width: $device-laptop)
73
- max-height: unset
74
- overflow: auto
75
- scrollbar(0, 0)
63
+ max-height: none
64
+ overflow: visible
76
65
 
77
66
 
78
67
 
@@ -135,11 +124,10 @@
135
124
  grid-template-rows: 1fr
136
125
  trans1 all
137
126
  overflow hidden
138
- [data-ui-surface='sidebar'] .widgets .widget-wrapper.toc .widget-header .cap-action:hover
139
- sidebar-light(var(--bg-a50))
140
- [data-ui-surface='sidebar'] .widgets .widget-wrapper.toc.collapse
127
+ :is([data-region='leftbar'], [data-region='rightbar']) .widgets .widget-wrapper.toc.collapse
141
128
  .widget-header .cap-action
142
- sidebar-light(var(--bg-a50))
129
+ color: var(--accent)
130
+ opacity: 1
143
131
  .widget-body
144
132
  grid-template-rows: 0fr
145
133
 
@@ -165,26 +153,17 @@
165
153
  padding: 8px var(--gap-base)
166
154
  border-radius: $border-bar
167
155
  trans1 all
168
- svg
169
- width: 16px
170
- height: 16px
171
- flex-shrink: 0
172
- margin-right: 8px
173
- img
174
- height: 16px
175
- width: auto
176
- flex-shrink: 0
156
+ .ui-icon
157
+ --ui-icon-size: 16px
177
158
  margin-right: 8px
178
159
  a:hover
179
- background: var(--block-border)
180
160
  color: var(--text)
181
161
 
182
162
  .widget-wrapper.toc+.widget-wrapper
183
163
  padding-top: 32px
184
164
 
185
165
  @media screen and (max-width: $device-laptop)
186
- [data-ui-surface='sidebar']
187
- blur-effect()
166
+ :is([data-region='leftbar'], [data-region='rightbar'])
188
167
  .widgets
189
168
  .widget-wrapper.toc
190
169
  position: static
@@ -34,21 +34,22 @@
34
34
  color: inherit
35
35
  opacity 0.3
36
36
  trans1 opacity
37
- border-radius: 8px
37
+ border-radius: $border-button
38
38
  padding: 6px
39
39
  margin-right: -6px
40
- svg
41
- height: 1em
42
- width: auto
40
+ .ui-icon
41
+ --ui-icon-size: 1em
43
42
  transform: scale(1.2)
44
- fill: var(--text-p2)
45
- &:hover
43
+ &:hover,
44
+ &:focus-visible
45
+ color: var(--accent)
46
+ opacity 1
47
+ &:focus-visible
48
+ outline: 2px solid var(--theme)
49
+ outline-offset: 2px
50
+ &:active
46
51
  color: var(--accent)
47
- background: var(--ui-item-bg-hover)
48
- box-shadow: var(--ui-item-shadow-hover)
49
52
  opacity 1
50
- svg
51
- fill: var(--accent)
52
53
 
53
54
  .widget-body
54
55
  color: var(--text-p1)
@@ -67,20 +68,14 @@
67
68
  .widget-section+.widget-section
68
69
  margin-top: 24px
69
70
 
70
- .widget-wrapper.markdown
71
- --ui-item-bg: var(--block)
72
-
73
- [data-ui-surface='glass'] .widget-wrapper.markdown
74
- --ui-item-bg: var(--bg-a10)
75
-
76
- .l_left .widgets
77
- padding-bottom: 64px
78
- .l_right .widgets
71
+ .site-region--rightbar .widgets
79
72
  padding: 0
80
73
  &:empty
81
74
  display: none
82
75
  .widget-wrapper:first-child
83
76
  margin-top: 0
77
+ .widget-instance + .widget-instance > .widget-wrapper
78
+ margin-top: var(--gap-base)
84
79
  .widget-wrapper
85
80
  .widget-header
86
81
  padding-left: var(--gap-base)
@@ -136,6 +136,7 @@
136
136
  font-weight: 700
137
137
  line-height: 1.2
138
138
  color: inherit
139
+ font-size: var(--fsh3)
139
140
  @media screen and (max-width: $device-mobile)
140
141
  .headline
141
142
  margin: .375rem 0
@@ -182,8 +183,7 @@
182
183
  justify-content: center
183
184
  width: 2.5rem
184
185
  height: 2.5rem
185
- overflow: hidden
186
- border-radius: 30%
186
+ app-icon()
187
187
  background: var(--block)
188
188
  color: var(--text-p2)
189
189
  img
@@ -2,19 +2,19 @@
2
2
 
3
3
 
4
4
  // font family
5
- $ff-body = convert(hexo-config('style.font-family.body'))
6
- $ff-code = convert(hexo-config('style.font-family.code'))
7
- $ff-codeblock = convert(hexo-config('style.font-family.codeblock'))
5
+ $ff-body = convert(hexo-config('appearance.typography.font_family.body'))
6
+ $ff-code = convert(hexo-config('appearance.typography.font_family.code'))
7
+ $ff-codeblock = $ff-code
8
8
 
9
9
  // font size
10
- $fs-root = convert(hexo-config('style.font-size.root'))
10
+ $fs-root = convert(hexo-config('appearance.typography.font_size.root'))
11
11
  $fs-15 = 'calc(%s - 1px)' % var(--fs-content-base)
12
12
  $fs-14 = 'calc(%s - 2px)' % var(--fs-content-base)
13
13
  $fs-13 = 'calc(%s - 3px)' % var(--fs-content-base)
14
14
  $fs-12 = 'calc(%s - 4px)' % var(--fs-content-base)
15
15
 
16
- $fs-code = convert(hexo-config('style.font-size.code'))
17
- $fs-codeblock = convert(hexo-config('style.font-size.codeblock'))
16
+ $fs-code = convert(hexo-config('appearance.typography.font_size.inline_code'))
17
+ $fs-codeblock = convert(hexo-config('appearance.typography.font_size.code_block'))
18
18
 
19
19
  $fsh1 = 'calc(%s + 9px)' % var(--fs-content-base)
20
20
  $fsh2 = 'calc(%s + 11px)' % var(--fs-content-base)
@@ -28,60 +28,51 @@ $fs-content-2 = 'calc(%s - 2px)' % var(--fs-content-base)
28
28
  $fs-content-3 = 'calc(%s - 3px)' % var(--fs-content-base)
29
29
 
30
30
  // site main
31
- $site-background-image = hexo-config('style.site.background-image')
32
- $leftbar-background-image = hexo-config('style.leftbar.background-image')
33
- $leftbar-background-color-light = hexo-config('style.leftbar.background-color-light')
34
- $leftbar-background-color-dark = hexo-config('style.leftbar.background-color-dark')
31
+ $site-background-image = hexo-config('appearance.backgrounds.page.image')
35
32
 
36
33
 
37
34
  // colors
38
- $c-theme = convert(hexo-config('style.color.theme'))
39
- $c-accent = convert(hexo-config('style.color.accent'))
40
- $c-link = convert(hexo-config('style.color.link'))
35
+ $c-theme = convert(hexo-config('appearance.colors.primary'))
36
+ $c-accent = convert(hexo-config('appearance.colors.accent'))
37
+ $c-link = convert(hexo-config('appearance.colors.link'))
41
38
 
42
39
  $c-base-hue = 210deg // 背景/文本颜色的主基调(一般看不出来不需要修改)
43
40
 
44
- $border-card-l = convert(hexo-config('style.border-radius.card-l'))
45
- $border-card = convert(hexo-config('style.border-radius.card'))
46
- $border-card-s = convert(hexo-config('style.border-radius.card-s'))
47
- $border-bar = convert(hexo-config('style.border-radius.bar'))
41
+ $border-card-l = convert(hexo-config('appearance.shape.radius.card_large'))
42
+ $border-card = convert(hexo-config('appearance.shape.radius.card'))
43
+ $border-card-s = convert(hexo-config('appearance.shape.radius.card_small'))
44
+ $border-bar = convert(hexo-config('appearance.shape.radius.bar'))
48
45
  $bar-item-gap = 4px // bar 容器内按钮/标签之间的间距与距边距离(gap + padding 共用)
49
46
  $border-bar-container = 'calc(%s + %s)' % ($border-bar $bar-item-gap) // bar 容器圆角 = 按钮圆角($border-bar)+ 间距,保持同心
50
- $border-image-l = convert(hexo-config('style.border-radius.image-l'))
51
- $border-image = convert(hexo-config('style.border-radius.image'))
52
- $border-image-s = convert(hexo-config('style.border-radius.image-s'))
47
+ $border-image-l = convert(hexo-config('appearance.shape.radius.image_large'))
48
+ $border-image = convert(hexo-config('appearance.shape.radius.image'))
49
+ $border-image-s = convert(hexo-config('appearance.shape.radius.image_small'))
53
50
  $border-button = 8px
54
- $corner-shape = convert(hexo-config('style.corner-shape'))
51
+ $corner-shape = convert(hexo-config('appearance.shape.corner'))
55
52
 
56
53
  // 可以动态变化的属性
57
54
  :root
58
55
  --fs-root: $fs-root
59
56
  --fs-content-base: var(--fs-root)
60
57
  --fs-content: var(--fs-content-base)
61
- --width-main: 720px
58
+ --width-main-article: 800px
59
+ --width-main-wiki-list: 1000px
60
+ --width-main: var(--width-main-article)
62
61
  --fsh2: 'calc(%s + 11px)' % var(--fs-content)
63
62
  --fsh3: 'calc(%s + 7px)' % var(--fs-content)
64
63
  --fsh4: 'calc(%s + 4px)' % var(--fs-content)
65
64
 
66
65
  // 侧边栏文字内容宽度
67
- --side-content-width: 224px
66
+ --side-content-width: 200px
68
67
  // 组件内部基础间距(margin/padding 统一)
69
68
  --gap-base: 16px
70
- // 页面级留白(侧边栏/内容区/列间距),笔记本及以上放宽
69
+ // 页面级留白(侧边栏/内容区/列间距)
71
70
  --gap-page: 16px
72
- @media screen and (min-width: $device-laptop)
73
- --gap-page: 32px
74
71
  // 右栏宽度增量(在 --width-sidebar 基础上加宽)
75
72
  --rightbar-width-extra: calc(var(--gap-base) * 2)
76
73
 
77
74
  --gap-p: 'calc(%s + 4px)' % var(--fs-content-base) // gap for paragraph
78
75
  --gap-p-compact: 'calc(%s * 0.75)' % var(--fs-content-base)
79
- // desktop 2k or larger
80
- @media screen and (min-width: $device-2k)
81
- --width-main: 780px
82
- // desktop 4k or larger
83
- @media screen and (min-width: $device-4k)
84
- --width-main: 860px
85
76
  // iPad 竖屏
86
77
  @media screen and (max-width: $device-tablet)
87
78
  --side-content-width: 188px
@@ -89,6 +80,9 @@ $corner-shape = convert(hexo-config('style.corner-shape'))
89
80
  --fs-root: 'calc(%s + 2px)' % $fs-root
90
81
  --side-content-width: 224px
91
82
 
83
+ body[data-page-layout='index_wiki']
84
+ --width-main: var(--width-main-wiki-list)
85
+
92
86
  // shadow
93
87
  $boxshadow-card = 0 1px 2px 0px rgba(0, 0, 0, 0.1)
94
88
  $boxshadow-float = 0 4px 8px 0px rgba(0, 0, 0, 0.05)
@@ -53,6 +53,14 @@ txt-ellipsis()
53
53
  overflow: hidden
54
54
  text-overflow: ellipsis
55
55
 
56
+ // App icon 圆角剪裁:支持 superellipse 时使用系统风格曲率,否则回退到普通圆角。
57
+ app-icon()
58
+ overflow: hidden
59
+ border-radius: 25%
60
+ @supports (corner-shape: superellipse(2))
61
+ border-radius: 50%
62
+ corner-shape: superellipse(2)
63
+
56
64
  placeholder(rules)
57
65
  &::-webkit-input-placeholder
58
66
  rules()
@@ -137,8 +145,8 @@ tag-chip()
137
145
  floatable-trans()
138
146
  trans2 transform box-shadow
139
147
  floatable-float()
140
- box-shadow: 0 12px 20px -4px rgba(0, 0, 0, 0.15)
141
- transform: translate3d(0, -2px, 0)
148
+ box-shadow: var(--hoverable-card-hover-shadow, 0 12px 20px -4px rgba(0, 0, 0, 0.15))
149
+ transform: var(--hoverable-card-hover-transform, translate3d(0, -2px, 0))
142
150
 
143
151
  hoverable-card()
144
152
  trans1 all
@@ -148,7 +156,7 @@ hoverable-card()
148
156
  floatable-float()
149
157
  ondark()
150
158
  &:hover
151
- box-shadow: 0 0 4px -2px var(--theme), 0 0 24px -8px var(--theme)
159
+ box-shadow: var(--hoverable-card-hover-shadow, 0 0 4px -2px var(--theme)\, 0 0 24px -8px var(--theme))
152
160
  :root[data-theme="light"] &
153
161
  onlight()
154
162
  :root[data-theme="dark"] &
@@ -158,37 +166,23 @@ hoverable-card()
158
166
  @media (prefers-color-scheme: dark)
159
167
  ondark()
160
168
 
161
- // 侧栏高亮项的顶部光照效果(无过渡动画):
162
- // 在 hover/active 背景上叠加顶部白色光照渐变与高光边,深浅色模式分别调优透明度
163
- sidebar-light($bg = unquote('var(--bg-a50)'), $light = 0.38, $edge = 0.45, $dark-light = 0.08, $dark-edge = 0.08)
164
- // 左栏风格通过容器级变量定制:--leftbar-item-bg / --leftbar-item-shadow
165
- // (如 card 风格设为 var(--block) / none),未定义时回退到玻璃质感默认值
166
- background: var(--leftbar-item-bg, linear-gradient(180deg, rgba(white, $light), rgba(white, 0) 50%), $bg)
167
- box-shadow: var(--leftbar-item-shadow, inset 0 1px 0 rgba(white, $edge))
168
- :root[data-theme="dark"] &
169
- background: var(--leftbar-item-bg, linear-gradient(180deg, rgba(white, $dark-light), rgba(white, 0) 50%), $bg)
170
- box-shadow: var(--leftbar-item-shadow, inset 0 1px 0 rgba(white, $dark-edge))
169
+ // 与整站 Appearance 无关的半透明浮层能力;Dropdown、上下文菜单等组件按需调用。
170
+ frosted-surface($background-light = rgba(white, .3), $background-dark = rgba(white, .2), $saturation = 300%, $blur = 16px, $border = 1px solid var(--block-border), $shadow = 0 0 2px rgba(black, .04)\, 0 2px 8px rgba(black, .04)\, 0 4px 16px rgba(black, .04))
171
+ border: $border
172
+ background: $background-light
173
+ box-shadow: $shadow
174
+ backdrop-filter: saturate($saturation) blur($blur)
175
+ -webkit-backdrop-filter: saturate($saturation) blur($blur)
176
+ :root[data-theme='dark'] &
177
+ background: $background-dark
171
178
  :root:not([data-theme]) &
172
179
  @media (prefers-color-scheme: dark)
173
- background: var(--leftbar-item-bg, linear-gradient(180deg, rgba(white, $dark-light), rgba(white, 0) 50%), $bg)
174
- box-shadow: var(--leftbar-item-shadow, inset 0 1px 0 rgba(white, $dark-edge))
180
+ background: $background-dark
175
181
 
176
- newblur($radius = 64px)
182
+ // Glass 容器材质:全表面保留轻度模糊,四周叠加更强的模糊层并向中心渐隐。
183
+ // Listing Nav 与 Glass ui-surface 共享同一组阴影与饱和边缘。
184
+ glass-material($radius = 64px)
177
185
  box-shadow: 0 0 2px rgba(black, .04), 0 2px 8px rgba(black, .04), 0 4px 16px rgba(black, .04)
178
- trans1: all
179
- text-shadow: 0 0 4px rgba(white, 1), 0 0 8px rgba(white, 0.8), 0 0 16px rgba(white, 0.6)
180
- :root[data-theme="dark"] &
181
- text-shadow: 0 0 2px rgba(black, 0.2), 0 0 4px rgba(black, 0.4)
182
- :root:not([data-theme]) &
183
- @media (prefers-color-scheme: dark)
184
- text-shadow: 0 0 2px rgba(black, 0.2), 0 0 4px rgba(black, 0.4)
185
- nav a:not(.active,:hover)
186
- filter: drop-shadow(0 0 0 white) drop-shadow(0 0 4px white)
187
- :root[data-theme="dark"] &
188
- filter: none
189
- :root:not([data-theme]) &
190
- @media (prefers-color-scheme: dark)
191
- filter: none
192
186
  &:before,&:after
193
187
  z-index -1
194
188
  position: absolute
@@ -204,12 +198,11 @@ newblur($radius = 64px)
204
198
  backdrop-filter: blur(8px)
205
199
  -webkit-backdrop-filter: blur(8px)
206
200
  background: rgba(white, 0.3)
207
- margin: 1px
208
201
  :root[data-theme="dark"] &
209
- background: rgba(white, 0.2)
202
+ background: rgba(white, 0.15)
210
203
  :root:not([data-theme]) &
211
204
  @media (prefers-color-scheme: dark)
212
- background: rgba(white, 0.2)
205
+ background: rgba(white, 0.15)
213
206
  &:after
214
207
  --blur-px: 16px
215
208
  --blur-sat: 300%
@@ -217,15 +210,32 @@ newblur($radius = 64px)
217
210
  -webkit-backdrop-filter: saturate(var(--blur-sat)) blur(var(--blur-px))
218
211
  mask: linear-gradient(white, 20%, transparent, 80%, white), linear-gradient(90deg, white, 20%, transparent, 80%, white)
219
212
  -webkit-mask-image: linear-gradient(white, 20%, transparent, 80%, white), linear-gradient(90deg, white, 20%, transparent, 80%, white)
220
- box-shadow: inset 0 0 4px 1px rgba(white, 0.5)
213
+ box-shadow: inset 0 0 32px 4px rgba(white, 0.5)
221
214
  trans1 all
222
215
  :root[data-theme="dark"] &
223
- box-shadow: inset 0 0 2px 1px rgba(white, 0.2)
216
+ box-shadow: inset 0 0 16px 4px rgba(white, 0.1)
224
217
  :root:not([data-theme]) &
225
218
  @media (prefers-color-scheme: dark)
226
- box-shadow: inset 0 0 2px 1px rgba(white, 0.2)
219
+ box-shadow: inset 0 0 16px 4px rgba(white, 0.1)
220
+
221
+ newblur($radius = 64px)
222
+ glass-material($radius)
223
+ trans1: all
224
+ text-shadow: 0 0 4px rgba(white, 1), 0 0 8px rgba(white, 0.8), 0 0 16px rgba(white, 0.6)
225
+ :root[data-theme="dark"] &
226
+ text-shadow: 0 0 2px rgba(black, 0.2), 0 0 4px rgba(black, 0.4)
227
+ :root:not([data-theme]) &
228
+ @media (prefers-color-scheme: dark)
229
+ text-shadow: 0 0 2px rgba(black, 0.2), 0 0 4px rgba(black, 0.4)
230
+ nav a:not(.active,:hover)
231
+ filter: drop-shadow(0 0 0 white) drop-shadow(0 0 4px white)
232
+ :root[data-theme="dark"] &
233
+ filter: none
234
+ :root:not([data-theme]) &
235
+ @media (prefers-color-scheme: dark)
236
+ filter: none
227
237
 
228
- // 长条圆角玻璃 UI(navbar top 与 float-panel 共用)
238
+ // 长条圆角玻璃 UI(Listing Nav 与 float-panel 共用)
229
239
  bar-glass($radius = $border-bar-container)
230
240
  border-radius: $radius
231
241
  corner-shape: $corner-shape
@@ -42,7 +42,8 @@ x-set-text-colors($scheme, $p0 = 1, $p1 = 0.8, $p2 = 0.7, $p3 = 0.5, $p4 = 0.4)
42
42
  $sat = 0%
43
43
  $light = $scheme == 'dark' ? 100% : 0%
44
44
 
45
- --text: x-hsla($hue, $sat, $light, $p0)
45
+ --text-p0: x-hsla($hue, $sat, $light, $p0)
46
+ --text: var(--text-p0)
46
47
  --text-reverse: x-hsla($hue, $sat, $scheme == 'dark' ? 0% : 100%, $p0)
47
48
  --text-p1: x-hsla($hue, $sat, $light, $p1)
48
49
  --text-p2: x-hsla($hue, $sat, $light, $p2)
@@ -64,20 +65,16 @@ x-set-text-colors($scheme, $p0 = 1, $p1 = 0.8, $p2 = 0.7, $p3 = 0.5, $p4 = 0.4)
64
65
 
65
66
  // ========== 通用主题色渐变 ==========
66
67
  // 约定:渐变颜色通过 --item-theme 提供,未设置时回退到站点主题色 var(--theme);
67
- // 淡色变体为 --item-theme-light(默认与白色混合 50%);角度默认取 style.gradient.angle。
68
- // 注意:局部覆盖 --item-theme 的元素需同时设置 --item-theme-light(如 x-theme-light()),
69
- // 否则淡色变体仍沿用 :root 上的主题色。
68
+ // 淡色变体默认与白色混合 50%,角度由主题固定为 210deg。
70
69
  // 用法示例:
71
70
  // .foo
72
71
  // --item-theme: #1BCDFC // 可选,默认使用站点主题色
73
72
  // background: x-theme-gradient() // 右上角淡色 → 左下角主色,停止点 20% / 60%
74
73
  // background: x-theme-gradient(30%, 70%, 25%) // 自定义停止点与淡色比例
75
- // 图标渐变(SVG):元素内放置 <svg class="grad-def">…<linearGradient …/></svg>,
76
- // 并设置 --item-grad:url(#渐变id),然后对子元素使用 fill:var(--item-grad)。
77
74
  x-theme-light($color = unquote('var(--item-theme)'), $ratio = 50%)
78
75
  return unquote('color-mix(in srgb, %s %s, #fff)' % ($color $ratio))
79
76
 
80
- x-theme-gradient($color = unquote('var(--item-theme)'), $start = 20%, $end = 60%, $light-ratio = 50%, $angle = convert(hexo-config('style.gradient.angle')) or 225deg)
77
+ x-theme-gradient($color = unquote('var(--item-theme)'), $start = 20%, $end = 60%, $light-ratio = 50%, $angle = 210deg)
81
78
  $light = x-theme-light($color, $light-ratio)
82
79
  return unquote('linear-gradient(%s, %s %s, %s %s)' % ($angle $light $start $color $end))
83
80
 
@@ -86,7 +83,8 @@ x-theme-gradient($color = unquote('var(--item-theme)'), $start = 20%, $end = 60%
86
83
  dynamic-theme-light()
87
84
  $hue = $c-base-hue
88
85
  --background: x-hsla($hue, 20%, 98%, 1)
89
- --card: $site-background-image ? hsla(white, 0.5) : white
86
+ --card: white
87
+ // --card: $site-background-image ? hsla(white, 0.5) : white
90
88
 
91
89
  x-set-bg-colors('light')
92
90
  x-set-text-colors('light')
@@ -94,10 +92,11 @@ dynamic-theme-light()
94
92
  // 设置深色模式
95
93
  dynamic-theme-dark()
96
94
  $hue = $c-base-hue
95
+ --card: x-hsla($hue, 10%, 24%, 1)
97
96
  --background: x-hsla($hue, 8%, 12%, 1)
98
97
  @media screen and (max-width: $device-mobile-max)
99
98
  --background: black
100
- --card: $site-background-image ? hsla(white, 0.25) : x-hsla($hue, 10%, 24%, 1)
99
+ // --card: $site-background-image ? hsla(white, 0.25) : x-hsla($hue, 10%, 24%, 1)
101
100
 
102
101
  x-set-bg-colors('dark')
103
102
  x-set-text-colors('dark')
@@ -113,7 +112,6 @@ dynamic-theme-dark()
113
112
  x-set-link-with-color($c-link)
114
113
  // 通用渐变颜色(局部可用 --item-theme 覆盖)
115
114
  --item-theme: var(--theme)
116
- --item-theme-light: x-theme-light()
117
115
 
118
116
  // dynamic colors
119
117
  dynamic-theme-light()
@@ -33,7 +33,7 @@
33
33
  > .card-hover__spotlight
34
34
  opacity: .6
35
35
 
36
- // ScrollReveal 使用外层 .post-card-wrap 的 transform;倾斜只作用于内层卡片。
36
+ // Reveal 使用外层 .post-card-wrap 的 transform;倾斜只作用于内层卡片。
37
37
  // 启用插件时把同尺寸包装器的阴影移到卡片本体,使阴影随 3D transform 移动。
38
38
  .post-list:not(.topic) .post-card-wrap
39
39
  box-shadow: none
@@ -5,36 +5,33 @@
5
5
  position: absolute
6
6
  top: 0
7
7
  right: 0
8
- padding: 0px 0.5rem
9
- font-weight: 700
8
+ width: 2rem
9
+ height: 2rem
10
+ padding: .375rem
11
+ box-sizing: border-box
12
+ border: 0
10
13
  visibility: hidden
11
- border-bottom-left-radius: $border-bar
12
- border-bottom-right-radius: $border-bar
13
- background: var(--card)
14
- display: block
14
+ background: none
15
+ color: var(--text-p3)
16
+ display: flex
17
+ align-items: center
18
+ justify-content: center
15
19
  cursor: pointer
16
20
  margin-right: 4px
17
21
  margin-top: 4px
18
- border-radius: 'calc(%s - 4px)' % $border-card
22
+ .icon
23
+ width: 100%
24
+ height: 100%
25
+ &:hover
26
+ color: x-theme-alpha(1)
19
27
 
20
- .highlight:hover
28
+ .highlight:hover, .highlight:focus-within
21
29
  .code:before
22
30
  visibility: hidden
23
31
  .copy-btn
24
32
  visibility: visible
25
33
 
26
- .highlight .code .copy-btn.success
27
- background: $c-green
28
- color: white
29
- visibility: visible
30
-
31
- .highlight .code .copy-btn.warning
32
- background: $c-orange
33
- color: white
34
- visibility: visible
35
-
36
34
  .md-text .folding[child=codeblock]
37
35
  .code .copy-btn
38
36
  z-index 1
39
37
  margin-right: 1rem
40
- border-radius: $border-bar
@@ -2,14 +2,9 @@
2
2
  @import 'aplayer'
3
3
 
4
4
  // 根据主题配置加载
5
- if hexo-config('plugins.scrollreveal.enable')
6
- @import 'scrollreveal'
7
- if hexo-config('plugins.copycode.enable')
8
- @import 'copycode'
9
- if hexo-config('plugins.tianli_gpt.enable')
10
- @import 'tianli_gpt'
11
- if hexo-config('plugins.katex.enable')
5
+ @import 'copycode'
6
+ if hexo-config('features.math.provider') == 'katex'
12
7
  @import 'katex'
13
- if hexo-config('plugins.card_hover.enable')
8
+ if hexo-config('features.card_hover.enabled')
14
9
  // 最后加载,组合并覆盖 link/grid 既有 hover transform
15
10
  @import 'card-hover'
@@ -1,4 +1,4 @@
1
- $lazyTransitionType = hexo-config('dependencies.lazyload.transition')
1
+ $lazyTransitionType = hexo-config('features.lazy_loading.transition')
2
2
  $loadingImageSize = 2rem
3
3
 
4
4
  img:not([src])
@@ -16,3 +16,15 @@
16
16
 
17
17
  // 可选插件
18
18
  @import '_plugins/index'
19
+
20
+ // 每次构建只编译当前整站 Appearance,作为最终视觉实现层。
21
+ @require '_appearances/_mixins'
22
+ $appearance-preset = hexo-config('appearance.preset')
23
+ if $appearance-preset == 'card'
24
+ @import '_appearances/card'
25
+ else if $appearance-preset == 'glass'
26
+ @import '_appearances/glass'
27
+ else if $appearance-preset == 'minimal'
28
+ @import '_appearances/minimal'
29
+ else if $appearance-preset == 'flat'
30
+ @import '_appearances/flat'