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.
- package/.claude/skills/stellar-theme-dev/SKILL.md +1 -2
- package/CHANGELOG.md +90 -0
- package/CONTRIBUTING.md +2 -1
- package/README.md +50 -21
- package/README_EN.md +113 -0
- package/_config.yml +40 -12
- package/_data/icons.yml +248 -37
- package/languages/en.yml +6 -0
- package/languages/zh-CN.yml +6 -0
- package/languages/zh-TW.yml +6 -0
- package/layout/_partial/comments/artalk/script.ejs +25 -8
- package/layout/_partial/comments/beaudar/script.ejs +1 -0
- package/layout/_partial/comments/twikoo/script.ejs +1 -0
- package/layout/_partial/comments/utterances/script.ejs +1 -0
- package/layout/_partial/comments/waline/script.ejs +1 -0
- package/layout/_partial/cover/index.ejs +0 -3
- package/layout/_partial/head.ejs +43 -7
- package/layout/_partial/main/article/article_tags.ejs +16 -0
- package/layout/_partial/main/navbar/article_banner.ejs +33 -20
- package/layout/_partial/main/notebook/note_card.ejs +1 -1
- package/layout/_partial/main/notebook/paginator.ejs +2 -2
- package/layout/_partial/main/pin_slider.ejs +61 -30
- package/layout/_partial/main/post_list/latest_post_card.ejs +25 -0
- package/layout/_partial/main/post_list/paginator.ejs +2 -2
- package/layout/_partial/main/post_list/post_card.ejs +16 -64
- package/layout/_partial/main/post_list/topic_card.ejs +26 -5
- package/layout/_partial/menubtn.ejs +2 -2
- package/layout/_partial/scripts/bootstrap.ejs +35 -0
- package/layout/_partial/scripts/defines.ejs +27 -2
- package/layout/_partial/scripts.ejs +39 -7
- package/layout/_partial/sidebar/logo.ejs +1 -1
- package/layout/_partial/sidebar/menu.ejs +1 -1
- package/layout/_partial/sidebar/search.ejs +1 -1
- package/layout/_partial/widgets/author.ejs +1 -1
- package/layout/_partial/widgets/components/link.ejs +2 -2
- package/layout/_partial/widgets/ghuser.ejs +1 -1
- package/layout/_partial/widgets/related.ejs +1 -1
- package/layout/_partial/widgets/toc.ejs +3 -3
- package/layout/_partial/widgets/tree.ejs +1 -1
- package/layout/_plugins/adaptive_text.ejs +11 -0
- package/layout/_plugins/copycode.ejs +2 -2
- package/layout/_plugins/fancybox.ejs +4 -2
- package/layout/_plugins/mermaid.ejs +3 -2
- package/layout/_plugins/scrollreveal.ejs +22 -16
- package/layout/_plugins/search/local_search.ejs +4 -3
- package/layout/_plugins/swiper.ejs +2 -1
- package/layout/categories.ejs +1 -1
- package/layout/index.ejs +10 -2
- package/layout/index_topic.ejs +4 -4
- package/layout/page.ejs +3 -0
- package/layout/tags.ejs +1 -0
- package/package.json +3 -3
- package/scripts/events/lib/doc_tree.js +12 -208
- package/scripts/events/lib/notebooks.js +8 -148
- package/scripts/events/lib/utils.js +10 -1
- package/scripts/filters/index.js +1 -0
- package/scripts/filters/lib/img_lazyload.js +4 -0
- package/scripts/filters/lib/img_onerror.js +4 -0
- package/scripts/filters/lib/md_table.js +46 -0
- package/scripts/generators/search.js +12 -18
- package/scripts/generators/stellar-icons.js +47 -0
- package/scripts/helpers/ai_label.js +29 -0
- package/scripts/helpers/icon.js +2 -2
- package/scripts/helpers/json_ld.js +10 -13
- package/scripts/helpers/related_posts.js +0 -7
- package/scripts/helpers/seo.js +9 -0
- package/scripts/helpers/subtitle.js +8 -0
- package/scripts/lib/ai_label.js +55 -0
- package/scripts/lib/doc_tree.js +267 -0
- package/scripts/lib/notebooks.js +181 -0
- package/scripts/lib/search_index.js +82 -0
- package/scripts/lib/seo.js +79 -0
- package/scripts/lib/subtitle.js +24 -0
- package/scripts/tags/lib/about.js +2 -2
- package/scripts/tags/lib/albums.js +1 -1
- package/scripts/tags/lib/banner.js +5 -4
- package/scripts/tags/lib/chat.js +49 -49
- package/scripts/tags/lib/copy.js +1 -1
- package/scripts/tags/lib/friends.js +1 -1
- package/scripts/tags/lib/gallery.js +1 -1
- package/scripts/tags/lib/hashtag.js +1 -1
- package/scripts/tags/lib/image.js +3 -3
- package/scripts/tags/lib/posters.js +1 -1
- package/scripts/tags/lib/sites.js +2 -2
- package/source/css/_common/base.styl +5 -9
- package/source/css/_common/cover-overlay.styl +111 -0
- package/source/css/_common/device.styl +3 -3
- package/source/css/_common/title.styl +17 -0
- package/source/css/_components/layout.styl +9 -13
- package/source/css/_components/list.styl +135 -64
- package/source/css/_components/main.styl +2 -2
- package/source/css/_components/md-table.styl +23 -0
- package/source/css/_components/pages/archives.styl +5 -22
- package/source/css/_components/pages/article-story.styl +5 -14
- package/source/css/_components/partial/article-banner.styl +61 -37
- package/source/css/_components/partial/article-tags.styl +13 -0
- package/source/css/_components/partial/bread-nav.styl +19 -12
- package/source/css/_components/partial/navbar.styl +11 -3
- package/source/css/_components/partial/post-panel.styl +76 -0
- package/source/css/_components/pin-slider.styl +38 -41
- package/source/css/_components/sidebar/footer.styl +1 -1
- package/source/css/_components/sidebar/logo.styl +2 -2
- package/source/css/_components/sidebar/search.styl +25 -5
- package/source/css/_components/sidebar/sidebar.styl +7 -7
- package/source/css/_components/tag-plugins/banner.styl +53 -11
- package/source/css/_components/tag-plugins/friends_posts.styl +5 -86
- package/source/css/_components/tag-plugins/gallery.styl +3 -0
- package/source/css/_components/tag-plugins/read/paper.styl +3 -3
- package/source/css/_components/tag-plugins/read/reel.styl +4 -4
- package/source/css/_components/tag-plugins/table.styl +16 -11
- package/source/css/_components/tag-plugins/timeline.styl +4 -0
- package/source/css/_components/widgets/components.styl +6 -0
- package/source/css/_components/widgets/list.styl +6 -0
- package/source/css/_components/widgets/timeline.styl +2 -2
- package/source/css/_components/widgets/toc.styl +13 -7
- package/source/css/_components/widgets/widgets.styl +8 -7
- package/source/css/_custom.styl +9 -21
- package/source/css/_defines/func.styl +28 -3
- package/source/css/_plugins/index.styl +0 -18
- package/source/css/_plugins/lazyload.styl +1 -0
- package/source/css/{_plugins/comments → comments}/artalk.styl +4 -0
- package/source/css/{_plugins/comments → comments}/twikoo.styl +4 -0
- package/source/css/{_plugins → plugins}/mermaid.styl +3 -0
- package/source/css/{_plugins → plugins}/swiper.styl +5 -1
- package/source/js/color.js +325 -0
- package/source/js/icons.js +60 -0
- package/source/js/main.js +115 -1
- package/source/js/plugins/adaptive-text.js +146 -0
- package/source/js/search/highlight.js +82 -0
- package/source/js/search/local-search.js +294 -103
- package/source/js/services/friends_and_posts.js +1 -1
- package/source/js/services/timeline.js +1 -1
- package/source/js/services/weibo.js +3 -3
- package/source/js/services.js +179 -0
- package/source/js/tagtree.js +29 -0
- package/source/js/theme.js +61 -0
- package/{layout/_partial/scripts/utils.ejs → source/js/utils.js} +27 -11
- package/layout/_partial/cover/post_cover.ejs +0 -37
- package/layout/_partial/scripts/services.ejs +0 -178
- package/layout/_partial/scripts/sidebar.ejs +0 -25
- package/layout/_partial/scripts/tagtree.ejs +0 -29
- package/layout/_partial/scripts/theme.ejs +0 -67
- /package/source/css/{_plugins/comments → comments}/beaudar.styl +0 -0
- /package/source/css/{_plugins/comments → comments}/utterances.styl +0 -0
- /package/source/css/{_plugins/comments → comments}/waline.styl +0 -0
- /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
|
-
|
|
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
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
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
|
-
|
|
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-
|
|
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-
|
|
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-
|
|
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(
|
|
27
|
-
filter: brightness(.92) saturate(1.1)
|
|
39
|
+
transform: scale(var(--cover-zoom))
|
|
28
40
|
|
|
29
41
|
// 文章幻灯片:固定「标题 + 一行小字」结构,宽高比与非置顶文章一致(article.cover_ratio);
|
|
30
|
-
// 文字区与
|
|
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:
|
|
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:
|
|
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
|
-
|
|
110
|
-
|
|
111
|
-
.
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
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:
|
|
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:
|
|
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
|
|
@@ -87,7 +87,7 @@
|
|
|
87
87
|
opacity: 1 !important
|
|
88
88
|
|
|
89
89
|
.wiki-home-wrap
|
|
90
|
-
margin: 1rem var(--gap-
|
|
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
|
-
|
|
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-
|
|
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:
|
|
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-
|
|
149
|
-
border-bottom: 1px dashed $c-
|
|
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-
|
|
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-
|
|
3
|
-
max-height: calc(100vh - var(--gap-
|
|
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-
|
|
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-
|
|
14
|
+
margin-right: calc(2 * var(--gap-page))
|
|
15
15
|
.l_right
|
|
16
|
-
margin-left: var(--gap-
|
|
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-
|
|
76
|
+
height: calc(100vh - var(--gap-page) * 2)
|
|
77
77
|
display: flex
|
|
78
78
|
flex-direction: column
|
|
79
79
|
word-break: break-all
|