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
@@ -0,0 +1,68 @@
1
+ .listing-nav
2
+ z-index: 8
3
+ top: var(--gap-page)
4
+ position: sticky
5
+ position: -webkit-sticky
6
+
7
+ // Topbar 已承载当前 Appearance 表面;Listing Nav pinned 后在其内容区垂直居中并只保留导航内容。
8
+ .site-shell[data-regions~='topbar'] .listing-nav
9
+ top: calc(var(--shell-topbar-top) + var(--shell-topbar-content-inset))
10
+ z-index: 13
11
+
12
+ // 吸顶后仅导航内容接收事件,空白区域穿透到下层 Topbar。
13
+ .site-shell[data-regions~='topbar'] .listing-nav:has(> .listing-nav__surface.is-pinned)
14
+ pointer-events: none
15
+ nav
16
+ pointer-events: auto
17
+
18
+ .site-shell[data-regions~='topbar'] .listing-nav .listing-nav__surface.is-pinned
19
+ transform: translateY(var(--shell-topbar-content-center-offset)) translateY(-50%)
20
+ border: 0
21
+ background: transparent
22
+ box-shadow: none
23
+ text-shadow: none
24
+ backdrop-filter: none
25
+ -webkit-backdrop-filter: none
26
+ &:before,
27
+ &:after
28
+ display: none
29
+ nav a
30
+ filter: none
31
+
32
+ .listing-nav__surface
33
+ margin: 0 1rem
34
+ position: relative
35
+ border-radius: $border-bar-container
36
+ corner-shape: $corner-shape
37
+ trans1: all
38
+
39
+ .listing-nav__viewport
40
+ max-width: 100%
41
+ border-radius: $border-bar-container
42
+ overflow: scroll visible
43
+ scrollbar(0, 0)
44
+
45
+ .listing-nav nav
46
+ display: inline-flex
47
+ font-size: $fs-14
48
+ gap: $bar-item-gap
49
+ padding: $bar-item-gap
50
+ z-index: 1
51
+ >p
52
+ margin: 0
53
+ a
54
+ bar-item()
55
+ &:hover
56
+ background: var(--bg-a50)
57
+ &.active, &:hover
58
+ color: var(--text)
59
+ &.active
60
+ bar-item-active()
61
+ cursor default
62
+ pointer-events: none
63
+ &.active:after
64
+ content: ''
65
+
66
+ @media screen and (max-width: $device-mobile-max)
67
+ .listing-nav
68
+ top: 8pt
@@ -12,7 +12,7 @@
12
12
  color: var(--text-p3)
13
13
  .page-number
14
14
  padding: 4px 8px
15
- border-radius: 8px
15
+ border-radius: $border-button
16
16
  margin: 2px
17
17
  a.page-number
18
18
  color: var(--text-p3)
@@ -1,4 +1,4 @@
1
- // 置顶内容轮播(navbar top 上方通用置顶位)
1
+ // 置顶内容轮播(Listing Nav 上方通用置顶位)
2
2
  .pin-slider
3
3
  position: relative
4
4
  margin: 0 1rem var(--gap-base)
@@ -38,12 +38,12 @@
38
38
  .pin-slide-bg
39
39
  transform: scale(var(--cover-zoom))
40
40
 
41
- // 文章幻灯片:固定「标题 + 一行小字」结构,宽高比与非置顶文章一致(article.cover_ratio);
41
+ // 文章幻灯片:固定「标题 + 一行小字」结构,宽高比与非置顶文章一致;
42
42
  // 文字区与 hero 卡片 cover-info 一致(同款渐变模糊层 + 四周间距);无封面时为纯白卡片
43
43
  .pin-slide.post-slide
44
44
  display: block
45
45
  height: auto
46
- aspect-ratio: hexo-config('article.cover_ratio')
46
+ aspect-ratio: hexo-config('article.listing.cover_ratio')
47
47
  .pin-slide-bg
48
48
  z-index: 0
49
49
  .pin-slide-text
@@ -0,0 +1,135 @@
1
+ .brand-header
2
+ display: flex
3
+ flex-direction: column
4
+ gap: 16px
5
+
6
+ .brand-wrap
7
+ display: flex
8
+ align-items: center
9
+ overflow: hidden
10
+ min-height: 48px
11
+
12
+ .brand-image
13
+ display: block
14
+ position: relative
15
+ width: 48px
16
+ height: 48px
17
+ margin-right: 1rem
18
+ flex-shrink: 0
19
+ background: transparent
20
+ color: inherit
21
+ img, svg
22
+ display: block
23
+ width: 100%
24
+ height: 100%
25
+
26
+ .brand-image--avatar
27
+ border-radius: 50%
28
+ corner-shape: round
29
+ overflow: hidden
30
+ img
31
+ border-radius: 50%
32
+ corner-shape: round
33
+ object-fit: cover
34
+
35
+ .brand-image--icon
36
+ app-icon()
37
+ img
38
+ object-fit: contain
39
+
40
+ .brand-image--plain
41
+ background: transparent
42
+ img
43
+ object-fit: contain
44
+
45
+ .brand-title
46
+ font-size: 1.5rem
47
+ font-weight: 900
48
+ color: inherit
49
+ line-height: 1.2
50
+ display: block
51
+ position: relative
52
+ .brand-name
53
+ color: var(--text)
54
+ .brand-tagline
55
+ color: var(--text-p1)
56
+ white-space: nowrap
57
+
58
+ .site-region--leftbar .brand-title
59
+ min-width: 0
60
+ max-width: 100%
61
+ .brand-tagline
62
+ overflow: hidden
63
+ text-overflow: ellipsis
64
+
65
+ .brand-header--regular
66
+ &:not(:has(> .brand-navigation)):not(:has(> .brand-search))
67
+ margin: var(--gap-base) 0
68
+ .brand-wrap
69
+ flex-direction: column
70
+ align-items: center
71
+ text-align: center
72
+ overflow: visible
73
+ .brand-image
74
+ width: 96px
75
+ height: 96px
76
+ margin: 0 0 1rem
77
+ .brand-title
78
+ width: 100%
79
+ .brand-tagline
80
+ margin-top: 4px
81
+ .brand-stats
82
+ width: 100%
83
+ margin-top: 1rem
84
+ display: grid
85
+ grid-template-columns: repeat(3, minmax(0, 1fr))
86
+ gap: 2px
87
+ .brand-stat
88
+ min-width: 0
89
+ padding: 8px 4px
90
+ display: flex
91
+ flex-direction: column
92
+ align-items: center
93
+ border-radius: $border-button
94
+ color: inherit
95
+ .brand-stat__value
96
+ min-height: 1.2em
97
+ line-height: 1.2
98
+ max-width: 100%
99
+ overflow: hidden
100
+ text-overflow: ellipsis
101
+ white-space: nowrap
102
+ font-size: 1rem
103
+ font-weight: 700
104
+ color: var(--text-p1)
105
+ .brand-stat__label
106
+ font-size: $fs-12
107
+ font-weight: 500
108
+ color: var(--text-p3)
109
+
110
+ .brand-header--topbar
111
+ .brand-wrap
112
+ min-height: 32px
113
+ .brand-image
114
+ width: 32px
115
+ height: 32px
116
+ margin-right: 8px
117
+ .brand-title
118
+ flex: 0 0 auto
119
+ font-size: 1rem
120
+ white-space: nowrap
121
+
122
+ .brand-navigation__back
123
+ display: flex
124
+ width: fit-content
125
+ align-items: center
126
+ padding: 6px 16px 6px 12px
127
+ border-radius: 32px
128
+ color: var(--text-p2)
129
+ font-size: $fs-13
130
+ trans2 color background
131
+ .ui-icon
132
+ --ui-icon-size: 1em
133
+ margin-right: 0.25rem
134
+ &:hover
135
+ color: var(--text-p1)
@@ -1,4 +1,4 @@
1
- .l_left footer.footer
1
+ .site-region--leftbar footer.footer
2
2
  margin: 0.5rem var(--gap-base) 1rem
3
3
 
4
4
  .social-wrap
@@ -13,23 +13,20 @@
13
13
  align-items: center
14
14
  box-sizing: border-box
15
15
  flex: 0 0 auto
16
+ width: 32px
16
17
  height: 32px
17
18
  padding: 4px
18
- border-radius: 8px
19
+ border-radius: $border-button
19
20
  filter: grayscale(100%)
20
21
  overflow: hidden
21
- background: var(--ui-item-bg)
22
- box-shadow: none
23
- img
24
- flex: initial
25
- width: 24px
26
- height: 24px
27
- object-fit: contain
28
- border-radius: 2px
29
- svg
30
- flex: initial
31
- height: 24px
32
- width: 24px
22
+ .ui-icon
23
+ --ui-icon-size: 24px
24
+ button.social
25
+ border: 0
26
+ color: inherit
27
+ font: inherit
28
+ cursor: pointer
29
+ appearance: none
33
30
 
34
31
  .social-spacer
35
32
  flex: 1 1 0
@@ -43,9 +40,6 @@
43
40
  flex: 0 0 auto
44
41
  height: 32px
45
42
  line-height: 0
46
- >.dropdown-trigger.social
47
- >img, >svg
48
- opacity: .5
49
43
  // JS 未加载时保留向上展开的原生 details 兜底;正常情况下菜单会移入全局浮层。
50
44
  >.dropdown-menu
51
45
  top: auto
@@ -58,20 +52,9 @@
58
52
  left: auto
59
53
  transform: none
60
54
 
61
- .social:hover
62
- background: var(--ui-item-bg-hover)
63
- box-shadow: var(--ui-item-shadow-hover)
64
-
55
+ .social:hover,
56
+ .social:active,
57
+ .social:focus-visible,
65
58
  .social-dropdown[open] > .dropdown-trigger.social
66
- background: var(--ui-item-bg-active)
67
- box-shadow: var(--ui-item-shadow-active)
68
-
69
- .social:hover, .social-dropdown[open] > .dropdown-trigger.social
70
59
  z-index: 1
71
60
  filter: unset
72
- >img, >svg
73
- opacity: 1
74
- svg [fill="currentColor"]
75
- fill: var(--item-grad)
76
- svg [stroke="currentColor"]
77
- stroke: var(--item-grad)
@@ -3,5 +3,9 @@
3
3
  .menu
4
4
  width: 100%
5
5
  margin: 0
6
+
7
+ .nav-area,
8
+ .widget-instance--menu
9
+ .menu
6
10
  .ui-collection__title
7
11
  font-size: $fs-15
@@ -26,12 +26,6 @@
26
26
  left: 1rem
27
27
  right: 1rem
28
28
  border-radius: $border-bar
29
- background: var(--leftbar-search-line, var(--bg-a100))
30
- :root[data-theme="dark"] &
31
- background: var(--leftbar-search-line, var(--bg-a20))
32
- :root:not([data-theme]) &
33
- @media screen and (prefers-color-scheme: dark)
34
- background: var(--leftbar-search-line, var(--bg-a20))
35
29
  z-index 0
36
30
  trans1 all
37
31
  &:after
@@ -42,7 +36,7 @@
42
36
  left: 1rem
43
37
  right: 1rem
44
38
  border-radius: $border-bar
45
- background: convert(hexo-config('style.gradient.searchbar'))
39
+ background: convert(hexo-config('appearance.gradients.search_bar'))
46
40
  background-size: 200%
47
41
  animation: search-glow 20s linear infinite
48
42
  opacity: 0
@@ -81,21 +75,9 @@
81
75
  height: 1.5rem
82
76
  cursor: pointer
83
77
  svg
84
- height: 1rem
85
- width: 1rem
78
+ max-height: 1.5rem
86
79
  color: var(--text-p2)
87
80
  fill: currentColor
88
- path[p-id="1562"]
89
- color: var(--theme)
90
-
91
- &[searching='true']
92
- .search-button
93
- path[p-id="1562"]
94
- color: $c-green
95
- &.noresult[searching='true']
96
- .search-button
97
- path[p-id="1562"]
98
- color: $c-red
99
81
 
100
82
  .search-no-result
101
83
  display: none
@@ -108,7 +90,7 @@
108
90
  border-radius: $border-card-s
109
91
 
110
92
 
111
- #search-result
93
+ .search-result
112
94
  max-height: 60vh
113
95
  overflow: auto
114
96
  scrollbar-width: none
@@ -124,11 +106,11 @@
124
106
  list-style-type: none
125
107
  li a
126
108
  display: block
127
- background: var(--ui-adapter-bg-hover)
128
- box-shadow: var(--ui-adapter-shadow-hover)
129
109
  line-height: 1.2
130
110
  padding: 0.75rem 1rem
131
111
  border-radius: $border-card-s
112
+ background: var(--block)
113
+ box-shadow: none
132
114
  &:focus-visible
133
115
  outline: 2px solid var(--theme)
134
116
  outline-offset: 2px
@@ -183,17 +165,17 @@
183
165
  display: block
184
166
  margin-bottom: 8px
185
167
 
186
- .leftbar-container > .search-wrapper
168
+ .site-region__viewport > .search-wrapper
187
169
  width: auto
188
170
  margin: 1.5rem var(--gap-base) 0
189
171
  padding-bottom: 0
190
172
 
191
- .leftbar-container > .search-wrapper[searching='true']
173
+ .site-region__viewport > .search-wrapper[searching='true']
192
174
  flex-grow: 1
193
175
  min-height: 0
194
176
  display: flex
195
177
  flex-direction: column
196
- #search-result
178
+ .search-result
197
179
  flex-grow: 1
198
180
  max-height: none
199
181
 
@@ -202,3 +184,171 @@
202
184
  background-position: 0%
203
185
  to
204
186
  background-position: 1000%
187
+
188
+ .search-trigger
189
+ appearance: none
190
+ width: 100%
191
+ border: 0
192
+ font: inherit
193
+ text-align: start
194
+ cursor: pointer
195
+
196
+ .search-shortcut
197
+ display: none
198
+ flex-shrink: 0
199
+ min-width: 0
200
+ border-radius: 4px
201
+ color: var(--text-p3)
202
+ opacity: 0.5
203
+ font-family: $ff-body
204
+ font-size: $fs-12
205
+ font-weight: 600
206
+ line-height: 1
207
+
208
+ @media screen and (min-width: ($device-tablet + 1px))
209
+ .search-shortcut:not(:empty)
210
+ display: inline-flex
211
+
212
+ html[data-leftbar-state='collapsed'] .site-shell:not([data-drawer='leftbar']) .site-region--leftbar .search-shortcut
213
+ display: none
214
+
215
+ .search-dialog
216
+ box-sizing: border-box
217
+ width: unquote('min(600px, calc(100dvw - 64px))')
218
+ height: unquote('min(80dvh, 720px)')
219
+ max-width: none
220
+ max-height: unquote('min(80dvh, 720px)')
221
+ margin: auto
222
+ padding: 0
223
+ border: 1px solid var(--block-border)
224
+ border-radius: $border-card-l
225
+ color: var(--text)
226
+ background: var(--card)
227
+ box-shadow: $boxshadow-card-float
228
+ overflow: hidden
229
+ &::backdrop
230
+ background: rgba(black, .38)
231
+ backdrop-filter: blur(8px)
232
+ -webkit-backdrop-filter: blur(8px)
233
+
234
+ .search-dialog__panel
235
+ box-sizing: border-box
236
+ width: 100%
237
+ height: 100%
238
+ display: flex
239
+ flex-direction: column
240
+ padding: 12px
241
+
242
+ .search-dialog__header
243
+ display: flex
244
+ flex-wrap: nowrap
245
+ align-items: center
246
+ gap: 8px
247
+ .search-form
248
+ flex: 1 1 auto
249
+ box-sizing: border-box
250
+ min-width: 0
251
+ height: 40px
252
+ display: flex
253
+ flex-flow: row nowrap
254
+ align-items: center
255
+ gap: 8px
256
+ padding: 0 16px
257
+ position: static
258
+ border-radius: $border-card-s
259
+ color: var(--text)
260
+ background: var(--block)
261
+ &:hover
262
+ background: var(--block-border)
263
+ .search-input
264
+ flex: 1 1 auto
265
+ min-width: 0
266
+ width: auto
267
+ height: 100%
268
+ padding: 0
269
+ &:before
270
+ display: none
271
+
272
+ .search-dialog__scope
273
+ display: flex
274
+ flex: 0 0 auto
275
+ align-items: center
276
+ gap: .5rem
277
+ padding: .5rem 0
278
+ overflow: hidden
279
+ color: var(--text-p2)
280
+ font-size: $fs-13
281
+ &[hidden]
282
+ display: none
283
+
284
+ .search-dialog__scope-option
285
+ display: flex
286
+ flex: 0 0 auto
287
+ align-items: center
288
+ min-width: 0
289
+ gap: 5px
290
+ cursor: pointer
291
+ background: var(--block)
292
+ padding: .5rem 1rem
293
+ border-radius: $border-button
294
+ &:hover
295
+ background: var(--block-border)
296
+ &[hidden]
297
+ display: none
298
+ &[data-search-scope-option='current']
299
+ flex: 0 1 auto
300
+ overflow: hidden
301
+ > span:last-child
302
+ overflow: hidden
303
+ white-space: nowrap
304
+ text-overflow: ellipsis
305
+ .search-dialog__close
306
+ flex: 0 0 40px
307
+ width: 40px
308
+ height: 40px
309
+ border: 0
310
+ border-radius: $border-bar
311
+ color: var(--text-p2)
312
+ background: var(--block)
313
+ &:hover
314
+ background: var(--block-border)
315
+ font-size: 24px
316
+ cursor: pointer
317
+
318
+ .search-dialog__title
319
+ position: absolute
320
+ width: 1px
321
+ height: 1px
322
+ padding: 0
323
+ margin: -1px
324
+ overflow: hidden
325
+ clip: rect(0, 0, 0, 0)
326
+ white-space: nowrap
327
+ border: 0
328
+
329
+ .search-dialog .search-result
330
+ flex: 1 1 auto
331
+ min-height: 0
332
+ max-height: none
333
+
334
+ html[data-search-open]
335
+ overflow: hidden
336
+
337
+ @media screen and (max-width: $device-tablet)
338
+ .search-dialog
339
+ width: 100dvw
340
+ height: 100dvh
341
+ max-height: none
342
+ border: 0
343
+ border-radius: 0
344
+ .search-dialog__panel
345
+ height: 100%
346
+ padding: unquote('max(12px, env(safe-area-inset-top)) max(12px, env(safe-area-inset-right)) max(12px, env(safe-area-inset-bottom)) max(12px, env(safe-area-inset-left))')
347
+ .search-dialog .search-result
348
+ max-height: none
349
+
350
+ @media (prefers-reduced-motion: reduce)
351
+ .search-dialog,
352
+ .search-dialog::backdrop
353
+ animation: none
354
+ transition: none