hexo-theme-stellar 1.40.0 → 1.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/.claude/skills/stellar-theme-dev/SKILL.md +1 -2
  2. package/CHANGELOG.md +90 -0
  3. package/CONTRIBUTING.md +2 -1
  4. package/README.md +50 -21
  5. package/README_EN.md +113 -0
  6. package/_config.yml +40 -12
  7. package/_data/icons.yml +248 -37
  8. package/languages/en.yml +6 -0
  9. package/languages/zh-CN.yml +6 -0
  10. package/languages/zh-TW.yml +6 -0
  11. package/layout/_partial/comments/artalk/script.ejs +25 -8
  12. package/layout/_partial/comments/beaudar/script.ejs +1 -0
  13. package/layout/_partial/comments/twikoo/script.ejs +1 -0
  14. package/layout/_partial/comments/utterances/script.ejs +1 -0
  15. package/layout/_partial/comments/waline/script.ejs +1 -0
  16. package/layout/_partial/cover/index.ejs +0 -3
  17. package/layout/_partial/head.ejs +43 -7
  18. package/layout/_partial/main/article/article_tags.ejs +16 -0
  19. package/layout/_partial/main/navbar/article_banner.ejs +33 -20
  20. package/layout/_partial/main/notebook/note_card.ejs +1 -1
  21. package/layout/_partial/main/notebook/paginator.ejs +2 -2
  22. package/layout/_partial/main/pin_slider.ejs +61 -30
  23. package/layout/_partial/main/post_list/latest_post_card.ejs +25 -0
  24. package/layout/_partial/main/post_list/paginator.ejs +2 -2
  25. package/layout/_partial/main/post_list/post_card.ejs +16 -64
  26. package/layout/_partial/main/post_list/topic_card.ejs +26 -5
  27. package/layout/_partial/menubtn.ejs +2 -2
  28. package/layout/_partial/scripts/bootstrap.ejs +35 -0
  29. package/layout/_partial/scripts/defines.ejs +27 -2
  30. package/layout/_partial/scripts.ejs +39 -7
  31. package/layout/_partial/sidebar/logo.ejs +1 -1
  32. package/layout/_partial/sidebar/menu.ejs +1 -1
  33. package/layout/_partial/sidebar/search.ejs +1 -1
  34. package/layout/_partial/widgets/author.ejs +1 -1
  35. package/layout/_partial/widgets/components/link.ejs +2 -2
  36. package/layout/_partial/widgets/ghuser.ejs +1 -1
  37. package/layout/_partial/widgets/related.ejs +1 -1
  38. package/layout/_partial/widgets/toc.ejs +3 -3
  39. package/layout/_partial/widgets/tree.ejs +1 -1
  40. package/layout/_plugins/adaptive_text.ejs +11 -0
  41. package/layout/_plugins/copycode.ejs +2 -2
  42. package/layout/_plugins/fancybox.ejs +4 -2
  43. package/layout/_plugins/mermaid.ejs +3 -2
  44. package/layout/_plugins/scrollreveal.ejs +22 -16
  45. package/layout/_plugins/search/local_search.ejs +4 -3
  46. package/layout/_plugins/swiper.ejs +2 -1
  47. package/layout/categories.ejs +1 -1
  48. package/layout/index.ejs +10 -2
  49. package/layout/index_topic.ejs +4 -4
  50. package/layout/page.ejs +3 -0
  51. package/layout/tags.ejs +1 -0
  52. package/package.json +3 -3
  53. package/scripts/events/lib/doc_tree.js +12 -208
  54. package/scripts/events/lib/notebooks.js +8 -148
  55. package/scripts/events/lib/utils.js +10 -1
  56. package/scripts/filters/index.js +1 -0
  57. package/scripts/filters/lib/img_lazyload.js +4 -0
  58. package/scripts/filters/lib/img_onerror.js +4 -0
  59. package/scripts/filters/lib/md_table.js +46 -0
  60. package/scripts/generators/search.js +12 -18
  61. package/scripts/generators/stellar-icons.js +47 -0
  62. package/scripts/helpers/ai_label.js +29 -0
  63. package/scripts/helpers/icon.js +2 -2
  64. package/scripts/helpers/json_ld.js +10 -13
  65. package/scripts/helpers/related_posts.js +0 -7
  66. package/scripts/helpers/seo.js +9 -0
  67. package/scripts/helpers/subtitle.js +8 -0
  68. package/scripts/lib/ai_label.js +55 -0
  69. package/scripts/lib/doc_tree.js +267 -0
  70. package/scripts/lib/notebooks.js +181 -0
  71. package/scripts/lib/search_index.js +82 -0
  72. package/scripts/lib/seo.js +79 -0
  73. package/scripts/lib/subtitle.js +24 -0
  74. package/scripts/tags/lib/about.js +2 -2
  75. package/scripts/tags/lib/albums.js +1 -1
  76. package/scripts/tags/lib/banner.js +5 -4
  77. package/scripts/tags/lib/chat.js +49 -49
  78. package/scripts/tags/lib/copy.js +1 -1
  79. package/scripts/tags/lib/friends.js +1 -1
  80. package/scripts/tags/lib/gallery.js +1 -1
  81. package/scripts/tags/lib/hashtag.js +1 -1
  82. package/scripts/tags/lib/image.js +3 -3
  83. package/scripts/tags/lib/posters.js +1 -1
  84. package/scripts/tags/lib/sites.js +2 -2
  85. package/source/css/_common/base.styl +5 -9
  86. package/source/css/_common/cover-overlay.styl +111 -0
  87. package/source/css/_common/device.styl +3 -3
  88. package/source/css/_common/title.styl +17 -0
  89. package/source/css/_components/layout.styl +9 -13
  90. package/source/css/_components/list.styl +135 -64
  91. package/source/css/_components/main.styl +2 -2
  92. package/source/css/_components/md-table.styl +23 -0
  93. package/source/css/_components/pages/archives.styl +5 -22
  94. package/source/css/_components/pages/article-story.styl +5 -14
  95. package/source/css/_components/partial/article-banner.styl +61 -37
  96. package/source/css/_components/partial/article-tags.styl +13 -0
  97. package/source/css/_components/partial/bread-nav.styl +19 -12
  98. package/source/css/_components/partial/navbar.styl +11 -3
  99. package/source/css/_components/partial/post-panel.styl +76 -0
  100. package/source/css/_components/pin-slider.styl +38 -41
  101. package/source/css/_components/sidebar/footer.styl +1 -1
  102. package/source/css/_components/sidebar/logo.styl +2 -2
  103. package/source/css/_components/sidebar/search.styl +25 -5
  104. package/source/css/_components/sidebar/sidebar.styl +7 -7
  105. package/source/css/_components/tag-plugins/banner.styl +53 -11
  106. package/source/css/_components/tag-plugins/friends_posts.styl +5 -86
  107. package/source/css/_components/tag-plugins/gallery.styl +3 -0
  108. package/source/css/_components/tag-plugins/read/paper.styl +3 -3
  109. package/source/css/_components/tag-plugins/read/reel.styl +4 -4
  110. package/source/css/_components/tag-plugins/table.styl +16 -11
  111. package/source/css/_components/tag-plugins/timeline.styl +4 -0
  112. package/source/css/_components/widgets/components.styl +6 -0
  113. package/source/css/_components/widgets/list.styl +6 -0
  114. package/source/css/_components/widgets/timeline.styl +2 -2
  115. package/source/css/_components/widgets/toc.styl +13 -7
  116. package/source/css/_components/widgets/widgets.styl +8 -7
  117. package/source/css/_custom.styl +9 -21
  118. package/source/css/_defines/func.styl +28 -3
  119. package/source/css/_plugins/index.styl +0 -18
  120. package/source/css/_plugins/lazyload.styl +1 -0
  121. package/source/css/{_plugins/comments → comments}/artalk.styl +4 -0
  122. package/source/css/{_plugins/comments → comments}/twikoo.styl +4 -0
  123. package/source/css/{_plugins → plugins}/mermaid.styl +3 -0
  124. package/source/css/{_plugins → plugins}/swiper.styl +5 -1
  125. package/source/js/color.js +325 -0
  126. package/source/js/icons.js +60 -0
  127. package/source/js/main.js +115 -1
  128. package/source/js/plugins/adaptive-text.js +146 -0
  129. package/source/js/search/highlight.js +82 -0
  130. package/source/js/search/local-search.js +294 -103
  131. package/source/js/services/friends_and_posts.js +1 -1
  132. package/source/js/services/timeline.js +1 -1
  133. package/source/js/services/weibo.js +3 -3
  134. package/source/js/services.js +179 -0
  135. package/source/js/tagtree.js +29 -0
  136. package/source/js/theme.js +61 -0
  137. package/{layout/_partial/scripts/utils.ejs → source/js/utils.js} +27 -11
  138. package/layout/_partial/cover/post_cover.ejs +0 -37
  139. package/layout/_partial/scripts/services.ejs +0 -178
  140. package/layout/_partial/scripts/sidebar.ejs +0 -25
  141. package/layout/_partial/scripts/tagtree.ejs +0 -29
  142. package/layout/_partial/scripts/theme.ejs +0 -67
  143. /package/source/css/{_plugins/comments → comments}/beaudar.styl +0 -0
  144. /package/source/css/{_plugins/comments → comments}/utterances.styl +0 -0
  145. /package/source/css/{_plugins/comments → comments}/waline.styl +0 -0
  146. /package/source/css/{_plugins → plugins}/fancybox.styl +0 -0
@@ -4,23 +4,67 @@
4
4
  .article.banner
5
5
  --text-banner: var(--text)
6
6
  background: var(--block)
7
+ // 背景图同时作为横幅自身背景承载(跟随 corner-shape),子图保留用于 hover 滤镜
8
+ background-image: var(--bg-url)
9
+ background-size: cover
10
+ background-position: center
7
11
  margin: 0
8
12
  height: unset
13
+ // Safari 26.4/26.5 合成层裁剪 bug(WebKit 312584/319993,STP 242/249 才修):
14
+ // 带 filter:blur() 的合成子层(同图模糊层 :before/:after)不执行父级 overflow:hidden + border-radius 圆角裁剪;
15
+ // 子层自身 border-radius/overflow 无效(319993 复现注释),父层 clip-path 实测仍被绕过。
16
+ // 官方建议(WebKit 67950):让圆角父层自身成为层叠上下文并强制合成,使圆角裁剪在合成层层面作用于全部子层。
17
+ // 对照:正常工作的 cover 卡片 .post-card 自带 z-index:0 + position:relative(层叠上下文)。
18
+ // clip-path 保留作为正常浏览器裁剪与额外防御;移动端圆角归零时随 `.banner.top` 一并关闭(见 tag-plugins/banner.styl)
19
+ isolation: isolate
20
+ transform: translateZ(0)
21
+ // clip-path 会把角落硬裁为普通圆角,覆盖 corner-shape;支持 corner-shape 的浏览器移除,
22
+ // 仅在不支持的浏览器(Safari/Firefox)保留圆角兜底
23
+ @supports not (corner-shape: superellipse(1))
24
+ clip-path: 'inset(0 round %s)' % $border-card-l
9
25
 
10
26
  .article.banner
11
27
  .bg+.content
12
28
  min-height: 200px
13
29
  aspect-ratio: hexo-config('article.banner_ratio')
30
+ position: relative
14
31
  --text-banner: white
15
32
  --button-hover-bg: rgba(white, 0.25)
16
33
 
17
34
  .article.banner .content
18
35
  .top
36
+ display: flex
37
+ flex-direction: column
38
+ justify-content: flex-start
19
39
  align-items: flex-start
20
40
  margin: 1rem calc(1rem - 4px)
41
+ .top-row
42
+ display: flex
43
+ justify-content: space-between
44
+ align-items: flex-start
45
+ width: 100%
46
+ .right
47
+ display: flex
48
+ align-items: center
49
+ flex-shrink: 0
50
+ white-space: nowrap
51
+ .reading
52
+ opacity: .8
53
+ padding: 4px
54
+ .meta-row
55
+ width: 100%
56
+ .bottom
57
+ margin-top: auto
21
58
  .title
22
59
  font-size: $fsh1
23
60
  color: var(--text-banner)
61
+ .subtitle
62
+ // 小字用主题色变体(split 模式下由插件写入 --text-banner-theme)
63
+ color: var(--text-banner-theme, var(--text-banner))
64
+ .reading
65
+ color: var(--text-banner-theme, var(--text-banner))
66
+ .meta-row
67
+ color: var(--text-banner-theme, var(--text-banner))
24
68
  h1
25
69
  line-height: 1.2
26
70
  margin: 0.25rem 0
@@ -30,48 +74,28 @@
30
74
 
31
75
 
32
76
 
33
- // 动画配置
77
+ // 背景图覆盖层:与文章列表封面统一(常驻同图渐变模糊层 + 黑色蒙版,hover 放大/变暗)
34
78
  .article.banner
79
+ cover-overlay(var(--bg-url), both, '.bg+.content')
80
+ .bg
81
+ // hover 放大用 1.5s 缓动,亮度/饱和度仍按 0.2s(与文章列表封面一致)
82
+ filter: brightness(var(--img-br)) saturate(var(--img-sat))
83
+ transition: all .2s ease-out, transform 1.5s ease-out
84
+ -moz-transition: all .2s ease-out, transform 1.5s ease-out
85
+ -webkit-transition: all .2s ease-out, transform 1.5s ease-out
86
+ -o-transition: all .2s ease-out, transform 1.5s ease-out
87
+ &:hover .bg
88
+ transform: scale(var(--cover-zoom))
35
89
  .bg+.content
36
- --blur-bg: rgba(black, 0)
37
- --blur-px: 1em
38
- --blur-sat: 100%
90
+ // 大尺寸 banner 的模糊层高度按原观感覆盖(默认值见 cover-overlay)
39
91
  --blur-height-top: 6rem
40
92
  --blur-height-bottom: 7rem
41
- --blur-opacity: 0
42
- &:hover
43
- --blur-bg: rgba(black, 0.1)
44
- --blur-sat: 150%
45
- --blur-height-top: 6rem
46
- --blur-height-bottom: 7rem
47
- --blur-opacity: 1
48
- background: var(--blur-bg)
49
- trans1 all
50
- &:before,&:after
51
- content: ''
52
- position: absolute
53
- z-index 0
54
- top: 0
55
- left: 0
56
- width: 100%
57
- height: 100%
58
- // Chromium: corner-shape + overflow:hidden 的合成层裁剪与 backdrop-filter 不兼容,
59
- // 渐变模糊改用同图模糊层(filter + mask)实现,观感与 backdrop-filter 等价
60
- background-image: var(--bg-url)
61
- background-size: cover
62
- background-position: center
63
- filter: blur(var(--blur-px)) saturate(var(--blur-sat))
64
- trans1 all
65
- opacity var(--blur-opacity)
66
- pointer-events: none
67
- &:before
68
- mask: linear-gradient(black, rgba(black, 0.75) calc(var(--blur-height-top) * 0.5), transparent var(--blur-height-top))
69
- -webkit-mask: linear-gradient(black, rgba(black, 0.75) calc(var(--blur-height-top) * 0.5), transparent var(--blur-height-top))
70
- &:after
71
- mask: linear-gradient(to top, black, rgba(black, 0.75) calc(var(--blur-height-bottom) * 0.5), transparent var(--blur-height-bottom))
72
- -webkit-mask: linear-gradient(to top, black, rgba(black, 0.75) calc(var(--blur-height-bottom) * 0.5), transparent var(--blur-height-bottom))
93
+ &:before, &:after
94
+ // 模糊层自身也加 clip-path:该合成层是 Safari 跳过父级圆角裁剪的直接漏出源
95
+ @supports not (corner-shape: superellipse(1))
96
+ clip-path: 'inset(0 round %s)' % $border-card-l
73
97
  .top,.bottom
74
- z-index 1
98
+ z-index: 1
75
99
 
76
100
 
77
101
  .article.banner
@@ -0,0 +1,13 @@
1
+ // 文章页标签行(layout: post,渲染于 article-footer 之前)
2
+ .article-tags
3
+ display: flex
4
+ flex-wrap: wrap
5
+ justify-content: center
6
+ align-items: center
7
+ margin: 2rem 0 0
8
+ column-gap: 1rem
9
+ line-height: 1.6
10
+ a.tag
11
+ tag-chip()
12
+ margin-left: 0
13
+ margin-right: 0
@@ -1,29 +1,24 @@
1
1
  // 面包屑导航
2
2
  .bread-nav
3
3
  font-weight: 500
4
- display: flex
5
- justify-content: space-between
6
- color: var(--text-banner)
4
+ color: var(--text-banner-theme, var(--text-banner))
7
5
  .left
8
6
  flex: 1
9
7
  min-width: 0
8
+ display: flex
9
+ align-items: baseline
10
10
  .flex-row
11
11
  display: flex
12
12
  align-items: baseline
13
13
  flex-direction: row
14
- #breadcrumb
15
- .reading.right
16
- margin-left: auto
17
- white-space: nowrap
18
- opacity: .8
19
14
  a
20
- color: var(--text-banner)
15
+ color: var(--text-banner-theme, var(--text-banner))
21
16
  padding: 4px
22
17
  border-radius: 2px
23
18
  &:hover
24
19
  background: var(--button-hover-bg)
25
20
  span
26
- color: var(--text-banner)
21
+ color: var(--text-banner-theme, var(--text-banner))
27
22
  span.sep
28
23
  opacity 0.5
29
24
  margin: 0
@@ -39,6 +34,18 @@
39
34
  div#post-meta span.updated
40
35
  visibility: visible
41
36
 
37
+ // 文章 AI 成分标签:彩色文字、无背景,颜色由内联 style 提供(banner 含图片时继承默认色)
38
+ .ai-label
39
+ display: inline-flex
40
+ align-items: center
41
+ gap: 4px
42
+ padding: 4px
43
+ white-space: nowrap
44
+ svg
45
+ height: 1em
46
+ width: auto
47
+ transform: scale(1.25)
48
+
42
49
  .bread-nav .ghrepo
43
50
  font-size: $fs-13
44
51
  display: flex
@@ -49,12 +56,12 @@
49
56
  a
50
57
  display: flex
51
58
  align-items: center
52
- color: var(--text-banner)
59
+ color: var(--text-banner-theme, var(--text-banner))
53
60
  svg
54
61
  margin-right: 4px
55
62
  &.bold
56
63
  font-weight: 600
57
- color: var(--text-banner)
64
+ color: var(--text-banner-theme, var(--text-banner))
58
65
  span
59
66
  margin-left: 4px
60
67
  &:hover
@@ -1,17 +1,25 @@
1
1
  .navbar
2
2
  z-index: 8
3
- top: var(--gap-margin)
3
+ top: var(--gap-page)
4
4
  position: sticky
5
5
  position: -webkit-sticky
6
6
 
7
7
  .navbar-blur
8
8
  margin: 0 1rem
9
9
  position: relative
10
- bar-glass()
10
+ border-radius: $border-bar-container
11
+ corner-shape: $corner-shape
12
+ trans1: all
13
+ // 未吸顶:卡片样式(var(--card) 底色 + 文章卡片同款阴影),与文章卡片一致
14
+ background: var(--card)
15
+ box-shadow: $boxshadow-card
16
+ // 吸顶后恢复玻璃效果(bar-glass()),与之前行为一致
17
+ &.pinned
18
+ bar-glass()
19
+ background: transparent
11
20
 
12
21
  .navbar-container
13
22
  max-width: 100%
14
- margin: 1px
15
23
  border-radius: $border-bar-container
16
24
  overflow: scroll visible
17
25
  scrollbar(0, 0)
@@ -0,0 +1,76 @@
1
+ // 描述 + 文章链接列表公共组件(友链文章订阅 friends_and_posts、专栏卡片 topic_card 共用)
2
+ .post-panel
3
+ display: flex
4
+ justify-content: space-between
5
+ flex-direction: column
6
+ height: 100%
7
+ position: relative
8
+ // 与友链卡片一致的行高(友链上下文由 .user-post-card 提供,专栏上下文在 md-text 下需自行声明)
9
+ line-height: 1.2
10
+ .desc
11
+ font-size: 1.2rem
12
+ color: var(--text-p3)
13
+ font-weight: 400
14
+ margin: 1rem 0
15
+ margin-right: auto
16
+ position: relative
17
+ &:before
18
+ position: absolute
19
+ font-weight: 900
20
+ font-size: 32px
21
+ color: var(--block-border)
22
+ top: 0
23
+ content: '“'
24
+ left: -16px
25
+ trans1 all
26
+ .posts
27
+ margin: 0.5rem 0 1rem 0
28
+ display: flex
29
+ flex-direction: column
30
+ align-items: flex-start
31
+ .post-link
32
+ display: flex
33
+ flex-direction: column
34
+ color: var(--text-p1)
35
+ position: relative
36
+ trans1 color
37
+ &+.post-link
38
+ margin-top: 1rem
39
+ &:before
40
+ content: ''
41
+ position: absolute
42
+ left: -12px
43
+ top: 2px
44
+ height: 'calc(%s - 2px)' % $fs-14
45
+ width: 4px
46
+ border-radius: 4px
47
+ background: var(--block-border)
48
+ trans1 all
49
+ &:hover
50
+ color: var(--accent)
51
+ &:hover:before
52
+ background: var(--accent)
53
+ height: 100%
54
+ top: 0
55
+ span
56
+ display: -webkit-box
57
+ -webkit-box-orient: vertical
58
+ overflow: hidden
59
+ -webkit-line-clamp: 1
60
+ position: relative
61
+ .title
62
+ font-size: $fs-14
63
+ font-weight: 500
64
+ max-width: 100%
65
+ display: -webkit-box
66
+ -webkit-box-orient: vertical
67
+ overflow: hidden
68
+ -webkit-line-clamp: 2
69
+ position: relative
70
+ .date
71
+ font-size: $fs-12
72
+ color: var(--text-p3)
73
+ margin-top: 0.25rem
74
+ .no-post
75
+ font-size: $fs-13
76
+ color: var(--text-p4)
@@ -1,10 +1,15 @@
1
1
  // 置顶内容轮播(navbar top 上方通用置顶位)
2
2
  .pin-slider
3
3
  position: relative
4
- margin: 0 1rem var(--gap-margin)
4
+ margin: 0 1rem var(--gap-base)
5
5
  border-radius: $border-card-l
6
6
  overflow: hidden
7
7
  box-shadow: $boxshadow-card
8
+ // 背景图由 .pin-slider 自身背景承载(跟随 corner-shape),由插件按当前 slide 同步 --pin-cover-url;
9
+ // 子图保留用于滑动动画与 hover 滤镜,角落楔形区由容器背景(同图)无缝补位
10
+ background-image: var(--pin-cover-url)
11
+ background-size: cover
12
+ background-position: center
8
13
  // 初始化前隐藏,避免先闪出第一张;定位到缓存序号后再显示
9
14
  visibility: hidden
10
15
 
@@ -19,42 +24,28 @@
19
24
  height: 15rem
20
25
  overflow: hidden
21
26
  background: var(--card)
27
+ // 带封面幻灯片背景改透明,让 .pin-slider 自身背景(corner-shape 圆角)透出;
28
+ // 无封面幻灯片保持白卡
29
+ &:not(.no-cover)
30
+ background: transparent
22
31
  @media screen and (max-width: $device-mobile-max)
23
32
  height: 11rem
33
+ // 带封面幻灯片(post 封面幻灯片 + wiki/项目幻灯片)接入通用底部覆盖层:
34
+ // 同图渐变模糊层 + 黑色渐变蒙版,hover 放大/变暗参数与文章列表封面统一
35
+ &.post-slide:not(.no-cover), &:not(.post-slide)
36
+ cover-overlay(var(--pin-cover-url), bottom)
24
37
  &:hover
25
38
  .pin-slide-bg
26
- transform: scale(1.04)
27
- filter: brightness(.92) saturate(1.1)
39
+ transform: scale(var(--cover-zoom))
28
40
 
29
41
  // 文章幻灯片:固定「标题 + 一行小字」结构,宽高比与非置顶文章一致(article.cover_ratio);
30
- // 文字区与 poster 卡片 cover-info 一致(同款渐变模糊层 + 四周间距);无封面时为纯白卡片
42
+ // 文字区与 hero 卡片 cover-info 一致(同款渐变模糊层 + 四周间距);无封面时为纯白卡片
31
43
  .pin-slide.post-slide
32
44
  display: block
33
45
  height: auto
34
46
  aspect-ratio: hexo-config('article.cover_ratio')
35
- --img-br: 100%
36
- --img-sat: 100%
37
- --blur-px: 1em
38
- --blur-height: 128px
39
- --blur-sat: 120%
40
47
  .pin-slide-bg
41
48
  z-index: 0
42
- // 渐变模糊层:与 poster 卡片 .cover:before 一致(同图模糊 + 底部渐变 mask)
43
- &:not(.no-cover)::before
44
- content: ''
45
- z-index: 1
46
- position: absolute
47
- top: 0
48
- left: 0
49
- width: 100%
50
- height: 100%
51
- background-image: var(--pin-cover-url)
52
- background-size: cover
53
- background-position: center
54
- filter: brightness(var(--img-br)) saturate(var(--img-sat)) blur(var(--blur-px)) saturate(var(--blur-sat))
55
- mask: linear-gradient(to top, black, rgba(black, 0.75) calc(var(--blur-height) * 0.5), transparent var(--blur-height))
56
- -webkit-mask: linear-gradient(to top, black, rgba(black, 0.75) calc(var(--blur-height) * 0.5), transparent var(--blur-height))
57
- transition: transform .5s ease-out
58
49
  .pin-slide-text
59
50
  position: absolute
60
51
  bottom: 0
@@ -64,10 +55,13 @@
64
55
  width: 100%
65
56
  box-sizing: border-box
66
57
  text-align: left
58
+ // 大字 contrast(--text-banner)、小字 theme(--text-banner-theme),由自适应插件写入
59
+ --text-banner: white
60
+ color: var(--text-banner)
67
61
  .pin-slide-headline
68
62
  font-weight: 500
69
63
  font-size: $fsh3
70
- color: white
64
+ color: var(--text-banner)
71
65
  text-shadow: 0 2px 4px rgba(0, 0, 0, 0.2)
72
66
  white-space: nowrap
73
67
  overflow: hidden
@@ -78,17 +72,13 @@
78
72
  .pin-slide-caption
79
73
  margin-top: 4px
80
74
  font-size: $fs-14
81
- color: white
75
+ color: var(--text-banner-theme, inherit)
82
76
  text-shadow: 0 2px 4px rgba(0, 0, 0, 0.2)
83
77
  white-space: nowrap
84
78
  overflow: hidden
85
79
  text-overflow: ellipsis
86
80
  @media screen and (max-width: $device-mobile)
87
81
  font-size: $fs-13
88
- &:not(.no-cover) .pin-slide-text
89
- background-image: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.2))
90
- &:not(.no-cover):hover::before
91
- transform: scale(1.04)
92
82
  // 无封面卡片:纯白底 + 普通文章文字颜色
93
83
  &.no-cover
94
84
  background: var(--card)
@@ -106,21 +96,24 @@
106
96
  width: 100%
107
97
  height: 100%
108
98
  object-fit: cover
109
- transition: transform .5s ease-out, filter .2s ease-out
110
-
111
- .pin-slide-mask
112
- position: absolute
113
- inset: 0
114
- background: linear-gradient(180deg, rgba(0, 0, 0, 0.05) 0%, rgba(0, 0, 0, 0.35) 55%, rgba(0, 0, 0, 0.68) 100%)
99
+ // hover 放大用 1.5s 缓动,亮度/饱和度仍按 0.2s(与文章列表封面一致)
100
+ filter: brightness(var(--img-br)) saturate(var(--img-sat))
101
+ transition: all .2s ease-out, transform 1.5s ease-out
102
+ -moz-transition: all .2s ease-out, transform 1.5s ease-out
103
+ -webkit-transition: all .2s ease-out, transform 1.5s ease-out
104
+ -o-transition: all .2s ease-out, transform 1.5s ease-out
115
105
 
116
106
  .pin-slide-info
117
107
  position: absolute
118
108
  left: 0
119
109
  right: 0
120
110
  bottom: 0
121
- z-index: 1
111
+ z-index: 2
122
112
  padding: 1.5rem 6rem 1.75rem 2rem
123
113
  text-align: left
114
+ // 大字 contrast(--text-banner)、小字 theme(--text-banner-theme),由自适应插件写入
115
+ --text-banner: white
116
+ color: var(--text-banner)
124
117
  @media screen and (max-width: $device-mobile-max)
125
118
  padding: 1rem 3.5rem 1.25rem 1.25rem
126
119
 
@@ -137,17 +130,20 @@
137
130
  backdrop-filter: blur(4px)
138
131
  -webkit-backdrop-filter: blur(4px)
139
132
  font-size: $fs-13
140
- color: white
133
+ color: var(--text-banner-theme, white)
141
134
 
142
135
  .pin-slide-title
143
136
  font-size: $fsh3
144
137
  font-weight: 600
145
138
  line-height: 1.3
146
- color: white
139
+ color: var(--text-banner)
147
140
  trans1 color
148
141
  @media screen and (max-width: $device-mobile-max)
149
142
  font-size: $fsh5
150
143
 
144
+ .pin-slide-excerpt
145
+ color: var(--text-banner-theme, var(--text-banner))
146
+
151
147
  .pin-slider-dots
152
148
  position: absolute
153
149
  left: 0
@@ -210,6 +206,8 @@
210
206
  top: 50%
211
207
  transform: translateY(-50%)
212
208
  z-index: 3
209
+ // 箭头颜色随当前幻灯片封面自适应(插件写入 --text-banner;未计算时回退主题文字色)
210
+ color: var(--text-banner, var(--text))
213
211
  display: flex
214
212
  align-items: center
215
213
  justify-content: center
@@ -218,7 +216,6 @@
218
216
  padding: 1rem .25rem
219
217
  border: none
220
218
  bar-glass(40px)
221
- color: var(--text)
222
219
  cursor: pointer
223
220
  opacity: 0
224
221
  &.prev
@@ -1,5 +1,5 @@
1
1
  .l_left footer.footer
2
- margin: 0.5rem var(--gap-margin) 1rem
2
+ margin: 0.5rem var(--gap-base) 1rem
3
3
 
4
4
  .social-wrap
5
5
  display: grid
@@ -87,7 +87,7 @@
87
87
  opacity: 1 !important
88
88
 
89
89
  .wiki-home-wrap
90
- margin: 1rem var(--gap-margin) .5rem
90
+ margin: 1rem var(--gap-base) .5rem
91
91
 
92
92
  .wiki-home
93
93
  display: flex
@@ -95,7 +95,7 @@
95
95
  align-items: center
96
96
  padding: 6px 16px 6px 12px
97
97
  border-radius: 32px
98
- background: var(--bg-a50)
98
+ sidebar-light()
99
99
  color: var(--text-p2)
100
100
  font-size: $fs-13
101
101
  trans2 color background
@@ -124,18 +124,38 @@
124
124
  border-radius: $border-card-s
125
125
  trans1 background
126
126
  &:hover
127
- background: var(--bg-a100)
127
+ background: var(--bg-a50)
128
128
  li+li
129
129
  margin-top: 8px
130
130
  .search-result-title
131
+ display: block
132
+ overflow: hidden
133
+ color: var(--text-p1)
134
+ font-size: $fs-14
135
+ padding: 0.5rem 1rem
136
+ white-space: nowrap
137
+ text-overflow: ellipsis
138
+
139
+ .search-result-section
140
+ display: block
141
+ overflow: hidden
131
142
  color: var(--text-p1)
132
143
  font-weight: 700
133
144
  font-size: $fs-15
145
+ text-overflow: ellipsis
146
+ white-space: nowrap
147
+ border-bottom: 1px solid var(--block-border)
148
+ padding-bottom: .5rem
149
+ margin-bottom: .5rem
150
+ &:before
151
+ content: '>'
152
+ margin-right: .5em
153
+ color: var(--theme)
134
154
 
135
155
  .search-result-content
136
156
  overflow: hidden
137
157
  color: var(--text-p3)
138
- margin: 4px 0 0
158
+ margin: 0
139
159
  max-height: 13em
140
160
  text-align: justify
141
161
  font-size: $fs-13
@@ -145,8 +165,8 @@
145
165
  -webkit-line-clamp: 2
146
166
 
147
167
  .search-keyword
148
- color: $c-red
149
- border-bottom: 1px dashed $c-red
168
+ color: $c-yellow
169
+ border-bottom: 1px dashed $c-yellow
150
170
  font-weight: bold
151
171
  filter grayscale(25%)
152
172
 
@@ -158,7 +178,7 @@
158
178
 
159
179
  .leftbar-container > .search-wrapper
160
180
  width: auto
161
- margin: 1.5rem var(--gap-margin) 0
181
+ margin: 1.5rem var(--gap-base) 0
162
182
  padding-bottom: 0
163
183
 
164
184
  .leftbar-container > .search-wrapper[searching='true']
@@ -1,19 +1,19 @@
1
1
  .l_left
2
- margin: var(--gap-margin)
3
- max-height: calc(100vh - var(--gap-margin) * 2)
2
+ margin: var(--gap-page)
3
+ max-height: calc(100vh - var(--gap-page) * 2)
4
4
  border-radius: $border-card-l
5
5
  .header
6
- margin: var(--gap-max) var(--gap-margin) 0
6
+ margin: var(--gap-base) var(--gap-base) 0
7
7
 
8
8
  .l_right
9
- margin: 0
9
+ margin: var(--gap-page) 0
10
10
  border-radius: $border-card-l
11
11
  @media screen and (min-width: $device-2k)
12
12
  .l_left
13
13
  margin-left: auto
14
- margin-right: calc(2 * var(--gap-max))
14
+ margin-right: calc(2 * var(--gap-page))
15
15
  .l_right
16
- margin-left: var(--gap-max)
16
+ margin-left: var(--gap-page)
17
17
  margin-right: auto
18
18
 
19
19
  // 纯色卡片风格(style.leftbar.ui-style: card):
@@ -73,7 +73,7 @@
73
73
  background-color: convert($leftbar-background-color-dark)
74
74
 
75
75
  .leftbar-container
76
- height: calc(100vh - var(--gap-margin) * 2)
76
+ height: calc(100vh - var(--gap-page) * 2)
77
77
  display: flex
78
78
  flex-direction: column
79
79
  word-break: break-all