hexo-theme-stellar 1.41.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 (66) hide show
  1. package/.claude/skills/stellar-theme-dev/SKILL.md +1 -2
  2. package/CHANGELOG.md +49 -0
  3. package/CONTRIBUTING.md +2 -1
  4. package/README.md +50 -21
  5. package/README_EN.md +113 -0
  6. package/_config.yml +8 -3
  7. package/_data/icons.yml +0 -2
  8. package/layout/_partial/cover/index.ejs +0 -3
  9. package/layout/_partial/main/navbar/article_banner.ejs +30 -27
  10. package/layout/_partial/main/pin_slider.ejs +59 -28
  11. package/layout/_partial/main/post_list/latest_post_card.ejs +25 -0
  12. package/layout/_partial/main/post_list/post_card.ejs +16 -64
  13. package/layout/_partial/main/post_list/topic_card.ejs +26 -5
  14. package/layout/_partial/scripts/bootstrap.ejs +35 -0
  15. package/layout/_partial/scripts/defines.ejs +2 -1
  16. package/layout/_partial/scripts.ejs +9 -0
  17. package/layout/_partial/widgets/toc.ejs +2 -2
  18. package/layout/_plugins/adaptive_text.ejs +11 -0
  19. package/layout/_plugins/copycode.ejs +2 -2
  20. package/layout/_plugins/mermaid.ejs +1 -1
  21. package/layout/_plugins/scrollreveal.ejs +22 -16
  22. package/layout/_plugins/swiper.ejs +1 -1
  23. package/layout/index.ejs +10 -2
  24. package/layout/index_topic.ejs +4 -4
  25. package/package.json +3 -3
  26. package/scripts/generators/stellar-icons.js +1 -1
  27. package/scripts/helpers/subtitle.js +8 -0
  28. package/scripts/lib/subtitle.js +24 -0
  29. package/scripts/tags/lib/banner.js +4 -3
  30. package/source/css/_common/cover-overlay.styl +111 -0
  31. package/source/css/_common/title.styl +17 -0
  32. package/source/css/_components/layout.styl +9 -13
  33. package/source/css/_components/list.styl +135 -64
  34. package/source/css/_components/main.styl +2 -2
  35. package/source/css/_components/pages/archives.styl +4 -1
  36. package/source/css/_components/pages/article-story.styl +1 -10
  37. package/source/css/_components/partial/article-banner.styl +61 -37
  38. package/source/css/_components/partial/article-tags.styl +4 -1
  39. package/source/css/_components/partial/bread-nav.styl +7 -14
  40. package/source/css/_components/partial/navbar.styl +1 -1
  41. package/source/css/_components/partial/post-panel.styl +76 -0
  42. package/source/css/_components/pin-slider.styl +38 -41
  43. package/source/css/_components/sidebar/footer.styl +1 -1
  44. package/source/css/_components/sidebar/logo.styl +2 -2
  45. package/source/css/_components/sidebar/search.styl +1 -1
  46. package/source/css/_components/sidebar/sidebar.styl +7 -7
  47. package/source/css/_components/tag-plugins/banner.styl +53 -11
  48. package/source/css/_components/tag-plugins/friends_posts.styl +5 -86
  49. package/source/css/_components/tag-plugins/gallery.styl +3 -0
  50. package/source/css/_components/tag-plugins/read/paper.styl +3 -3
  51. package/source/css/_components/tag-plugins/read/reel.styl +4 -4
  52. package/source/css/_components/tag-plugins/timeline.styl +4 -0
  53. package/source/css/_components/widgets/timeline.styl +2 -2
  54. package/source/css/_components/widgets/toc.styl +12 -6
  55. package/source/css/_components/widgets/widgets.styl +8 -7
  56. package/source/css/_custom.styl +8 -9
  57. package/source/css/_plugins/lazyload.styl +1 -0
  58. package/source/js/color.js +325 -0
  59. package/source/js/main.js +2 -2
  60. package/source/js/plugins/adaptive-text.js +146 -0
  61. package/source/js/services/friends_and_posts.js +1 -1
  62. package/source/js/services/timeline.js +1 -1
  63. package/source/js/services/weibo.js +1 -1
  64. package/source/js/services.js +1 -1
  65. package/source/js/utils.js +14 -1
  66. package/layout/_partial/cover/post_cover.ejs +0 -37
@@ -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
@@ -178,7 +178,7 @@
178
178
 
179
179
  .leftbar-container > .search-wrapper
180
180
  width: auto
181
- margin: 1.5rem var(--gap-margin) 0
181
+ margin: 1.5rem var(--gap-base) 0
182
182
  padding-bottom: 0
183
183
 
184
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
@@ -2,6 +2,10 @@
2
2
  border-radius: $border-image
3
3
  &.top
4
4
  border-radius: $border-card-l
5
+ // 背景图同时作为横幅自身背景承载(跟随 corner-shape),子图保留用于 hover 滤镜
6
+ background-image: var(--bg-url)
7
+ background-size: cover
8
+ background-position: center
5
9
  position: relative
6
10
  overflow: hidden
7
11
  display: flex
@@ -15,12 +19,15 @@
15
19
  z-index: 0
16
20
  .content
17
21
  z-index: 1
22
+ position: relative
18
23
  width: 100%
19
24
  height: 100%
20
25
  display: flex
21
26
  flex-direction: column
22
27
  justify-content: space-between
23
28
  .top
29
+ // 文字区保持在背景图(img.bg z-index 0)之上
30
+ z-index: 1
24
31
  display: flex
25
32
  justify-content: space-between
26
33
  align-items: center
@@ -37,7 +44,8 @@
37
44
  .link
38
45
  margin: 0
39
46
  border-radius: 4px
40
- color: rgba(white, 0.8)
47
+ color: var(--text-banner-theme, var(--text-banner))
48
+ opacity: .8
41
49
  padding: 2px 6px
42
50
  background: none
43
51
  line-height: 1.5
@@ -48,10 +56,12 @@
48
56
  &:after
49
57
  content: none
50
58
  &:hover
51
- color: white
59
+ color: var(--text-banner-theme, var(--text-banner))
60
+ opacity: 1
52
61
  background: rgba(white, 0.25)
53
62
  &.active
54
- color: white
63
+ color: var(--text-banner-theme, var(--text-banner))
64
+ opacity: 1
55
65
  background: rgba(white, 0.25)
56
66
 
57
67
  .back
@@ -64,7 +74,7 @@
64
74
  svg
65
75
  width: 20px
66
76
  height: 20px
67
- fill: white
77
+ fill: var(--text-banner-theme, var(--text-banner))
68
78
  .banner-link
69
79
  position: absolute
70
80
  top: 0
@@ -91,13 +101,17 @@
91
101
  width: 48px
92
102
  height: 48px
93
103
  .bottom
104
+ // 同 .top:文字区保持在背景图之上
105
+ z-index: 1
94
106
  display: flex
95
107
  padding: 1rem
96
108
  width: 100%
97
109
  box-sizing: border-box
98
110
  .title
99
111
  font-size: 1.5rem
100
- font-weight: 600
112
+ font-weight: 700
113
+ // 与封面 headline 同款描边,避免标题在复杂背景上发虚
114
+ text-shadow: 0 2px 4px rgba(0,0,0,0.2)
101
115
  .avatar+.text-area
102
116
  margin-left: 0.75rem
103
117
  .text-area .text
@@ -108,26 +122,54 @@
108
122
  font-size: 1.2rem
109
123
  .subtitle
110
124
  font-size: $fs-14
125
+ color: var(--text-banner-theme, var(--text-banner))
111
126
  .content:only-child
112
127
  color: var(--text-p1)
113
128
  .bg+.content
114
- color: white
129
+ --text-banner: white
130
+ color: var(--text-banner)
115
131
  .avatar
116
- border: 2px solid white
132
+ border: 2px solid var(--text-banner)
117
133
  margin: 0
118
134
  .bottom
119
- background-image: linear-gradient(rgba(0,0,0,0),rgba(0,0,0,0.2))
120
135
  text-shadow: 0 0 1px rgba(0,0,0,0.12)
121
136
 
122
137
  .tag-plugin.banner
123
- trans1(transform, 2s)
138
+ // 内容区用绝对定位铺满整卡:避免 flex 百分比高度(height: 100%)在不同浏览器解析不一致,
139
+ // 导致 .top/.bottom 无法贴顶/贴底(navbar 掉到中间)
140
+ .content
141
+ position: absolute
142
+ top: 0
143
+ left: 0
144
+ right: 0
145
+ bottom: 0
146
+ // banner 标签不使用渐变模糊覆盖层(cover-overlay 仅用于封面/页顶 banner):
147
+ // 纯背景图 + 自适应文字颜色,hover 保留背景图放大与变暗
148
+ --img-br: 100%
149
+ --img-sat: 100%
150
+ --cover-zoom: 1.05
124
151
  &:hover
152
+ --img-br: 75%
153
+ --img-sat: 120%
125
154
  img.bg
126
- transform: scale(1.01)
155
+ transform: scale(var(--cover-zoom))
156
+ img.bg
157
+ filter: brightness(var(--img-br)) saturate(var(--img-sat))
158
+ // 封面放大用 1.5s 缓动,其余属性(亮度/饱和度)保持主题默认 0.2s
159
+ transition: all .2s ease-out, transform 1.5s ease-out
160
+ -moz-transition: all .2s ease-out, transform 1.5s ease-out
161
+ -webkit-transition: all .2s ease-out, transform 1.5s ease-out
162
+ -o-transition: all .2s ease-out, transform 1.5s ease-out
127
163
 
128
164
  .tag-plugin.banner .navbar a.active
129
- blur-effect()
165
+ // 不使用 blur-effect()(backdrop-filter):banner 是 overflow:hidden + 圆角/连续曲率的裁剪容器,
166
+ // backdrop-filter 在部分浏览器(Safari / 旧版 Chromium)会破坏父级圆角裁剪,
167
+ // hover 放大背景图时四角变直角;改用与 hover 一致的半透明白底
168
+ background: rgba(white, 0.25)
169
+ &:hover
170
+ background-color: var(--card)
130
171
 
131
172
  @media screen and (max-width: $device-mobile-max)
132
173
  .banner.top
133
174
  border-radius: 0
175
+ clip-path: none
@@ -67,96 +67,15 @@
67
67
  display: block
68
68
  width: 64px
69
69
  height: 64px
70
-
71
-
72
- .previews
73
- display: flex
74
- justify-content: space-between
75
- flex-direction: column
76
- height: 100%
77
- position: relative
78
- .empty
79
- min-height: 1rem
80
- .desc
81
- font-size: 1.2rem
82
- color: var(--text-p3)
83
- font-weight: 400
84
- margin: 1rem 0
85
- margin-right: auto
86
- position: relative
87
- &:before
88
- position: absolute
89
- font-weight: 900
90
- font-size: 32px
91
- color: var(--block-border)
92
- top: 0
93
- content: '“'
94
- left: -16px
95
- trans1 all
96
- .spacer
97
- height: 100%
98
- .posts
99
- margin: 0.5rem 0 1rem 0
100
- display: flex
101
- flex-direction: column
102
- align-items: flex-start
103
- .post-link
104
- display: flex
105
- flex-direction: column
106
- color: var(--text-p1)
107
- position: relative
108
- trans1 color
109
- &+.post-link
110
- margin-top: 1rem
111
- &:before
112
- content: ''
113
- position: absolute
114
- left: -12px
115
- top: 2px
116
- height: 'calc(%s - 2px)' % $fs-14
117
- width: 4px
118
- border-radius: 4px
119
- background: var(--block-border)
120
- trans1 all
121
- &:hover:before
122
- background: var(--accent)
123
- // height: calc(100% - 4px)
124
- height: 100%
125
- top: 0
126
- span
127
- display: -webkit-box
128
- -webkit-box-orient: vertical
129
- overflow: hidden
130
- -webkit-line-clamp: 1
131
- position: relative
132
- .title
133
- font-size: $fs-14
134
- font-weight: 500
135
- max-width: 100%
136
- display: -webkit-box
137
- -webkit-box-orient: vertical
138
- overflow: hidden
139
- -webkit-line-clamp: 2
140
- position: relative
141
- .date
142
- font-size: $fs-12
143
- color: var(--text-p3)
144
- margin-top: 0.25rem
145
- .no-post
146
- font-size: $fs-13
147
- color: var(--text-p4)
148
-
149
-
150
70
  // transform
151
71
  .users-posts-wrap .user-post-card
152
72
  &:hover
153
- .desc
154
- &:before
155
- color: var(--accent)
156
- transform: scale(1.2) translateX(-4px)
73
+ .post-panel
74
+ .desc
75
+ &:before
76
+ color: var(--accent)
77
+ transform: scale(1.2) translateX(-4px)
157
78
  .card-link:hover
158
79
  .lazy-box
159
80
  transform: scale(1.2) rotate(8deg)
160
81
  box-shadow: $boxshadow-card-float
161
- .post-link:hover
162
- color: var(--accent)
@@ -94,6 +94,9 @@
94
94
  aspect-ratio: 2 / 3
95
95
  .grid-cell
96
96
  background: var(--block)
97
+ >.lazy-box
98
+ width: 100%
99
+ height: 100%
97
100
  img
98
101
  width: 100%
99
102
  height: 100%
@@ -2,8 +2,8 @@
2
2
  display: flex
3
3
  flex-direction: column
4
4
  align-items: center
5
- padding-top: var(--gap-padding)
6
- padding-bottom: var(--gap-padding)
5
+ padding-top: var(--gap-base)
6
+ padding-bottom: var(--gap-base)
7
7
  >.content
8
8
  border-left: 1px dashed var(--text-meta)
9
9
  border-right: 1px dashed var(--text-meta)
@@ -95,4 +95,4 @@
95
95
  p
96
96
  margin: 0
97
97
  >.title
98
- border-top: 1px solid var(--text-meta)
98
+ border-top: 1px solid var(--text-meta)
@@ -2,8 +2,8 @@
2
2
  display: flex
3
3
  flex-direction: column
4
4
  align-items: center
5
- padding-top: var(--gap-padding)
6
- padding-bottom: var(--gap-padding)
5
+ padding-top: var(--gap-base)
6
+ padding-bottom: var(--gap-base)
7
7
  >.content
8
8
  display: flex
9
9
  flex-direction: column
@@ -22,7 +22,7 @@
22
22
  >.body
23
23
  overflow: auto
24
24
  scrollbar()
25
- margin: 'calc(%s - 4px) %s' % var(--gap-padding)
25
+ margin: 'calc(%s - 4px) %s' % var(--gap-base)
26
26
  .main
27
27
  p
28
28
  margin: 0;
@@ -100,4 +100,4 @@
100
100
  top: calc(100% + 1rem - 6px)
101
101
  bottom: calc(-1rem - 6px)
102
102
  border-radius: 4px
103
- background: var(--accent)
103
+ background: var(--accent)
@@ -194,6 +194,10 @@ aside .tag-plugin.timeline[data-api] .body .lazy-box
194
194
  display: flex
195
195
  align-items: center
196
196
  border-color: var(--link)
197
+ svg
198
+ width: 1em
199
+ height: 1em
200
+ vertical-align: -0.125em
197
201
  &:first-child
198
202
  margin-left: 0
199
203
  &:last-child
@@ -14,7 +14,7 @@
14
14
  z-index 1
15
15
  margin-top: 0.25rem
16
16
  .header
17
- margin: 0.25rem var(--gap-padding)
17
+ margin: 0.25rem var(--gap-base)
18
18
  .user-info
19
19
  background: none
20
20
  padding-right: 0
@@ -22,7 +22,7 @@
22
22
  display: none
23
23
 
24
24
  .header:before
25
- left: calc(6px - var(--gap-padding))
25
+ left: calc(6px - var(--gap-base))
26
26
  .body
27
27
  border-radius: $border-card
28
28
  padding: 0.5rem 1rem
@@ -31,7 +31,7 @@
31
31
  margin: 0
32
32
  list-style: none
33
33
  a
34
- --padding: calc(var(--gap-padding) / 2)
34
+ --padding: calc(var(--gap-base) / 2)
35
35
  --padding-offset: calc(0 - var(--padding))
36
36
  padding: 4px var(--padding)
37
37
  margin: 0 var(--padding)
@@ -61,7 +61,7 @@
61
61
  top: 0
62
62
  padding: 1rem 0
63
63
  &:first-child
64
- top: var(--gap-margin)
64
+ top: var(--gap-page)
65
65
  padding-top: 1rem
66
66
  .widget-body .toc
67
67
  max-height: 70vh
@@ -148,8 +148,8 @@
148
148
  background: var(--block-border)
149
149
  top: 0
150
150
  height: 1px
151
- left: var(--gap-padding)
152
- right: var(--gap-padding)
151
+ left: var(--gap-base)
152
+ right: var(--gap-base)
153
153
  .widget-wrapper.toc .widget-footer
154
154
  margin-top: 8px
155
155
  color: var(--text-p2)
@@ -160,12 +160,18 @@
160
160
  align-items: center
161
161
  color: inherit
162
162
  font-size: $fs-14
163
- padding: 8px var(--gap-padding)
163
+ padding: 8px var(--gap-base)
164
164
  border-radius: $border-bar
165
165
  trans1 all
166
- svg,img
166
+ svg
167
+ width: 16px
168
+ height: 16px
169
+ flex-shrink: 0
170
+ margin-right: 8px
171
+ img
167
172
  height: 16px
168
173
  width: auto
174
+ flex-shrink: 0
169
175
  margin-right: 8px
170
176
  a:hover
171
177
  background: var(--block-border)
@@ -10,11 +10,11 @@
10
10
  scrollbar(0, 0)
11
11
  z-index: 1
12
12
  line-height: 1.2
13
- margin: 0 var(--gap-margin)
13
+ margin: 0 var(--gap-base)
14
14
  .widget-wrapper
15
15
  .widget-header
16
- padding-left: var(--gap-padding)
17
- padding-right: var(--gap-padding)
16
+ padding-left: var(--gap-base)
17
+ padding-right: var(--gap-base)
18
18
  display: flex
19
19
  justify-content: space-between
20
20
  align-items: baseline
@@ -64,19 +64,20 @@
64
64
  .l_left .widgets
65
65
  padding-bottom: 64px
66
66
  .l_right .widgets
67
- padding: 16px 0
67
+ padding: 0
68
68
  &:empty
69
69
  display: none
70
70
  .widget-wrapper:first-child
71
71
  margin-top: 0
72
72
  .widget-wrapper
73
73
  .widget-header
74
- padding-left: var(--gap-padding)
75
- padding-right: var(--gap-padding)
74
+ padding-left: var(--gap-base)
75
+ padding-right: var(--gap-base)
76
76
  // 小屏幕
77
77
  @media screen and (max-width: $device-laptop)
78
+ padding: var(--gap-base) 0
78
79
  .widget-wrapper
79
- margin-top: var(--gap-margin)
80
+ margin-top: var(--gap-base)
80
81
  border-radius: $border-card-s
81
82
  // 大屏幕
82
83
  @media screen and (min-width: $device-laptop)
@@ -64,10 +64,14 @@ $corner-shape = convert(hexo-config('style.corner-shape'))
64
64
 
65
65
  // 侧边栏文字内容宽度
66
66
  --side-content-width: 224px
67
- // 元素轮廓到容器边缘的间距
68
- --gap-margin: 16px
69
- // 元素文本内容到元素自身的轮廓的间距
70
- --gap-padding: 16px
67
+ // 组件内部基础间距(margin/padding 统一)
68
+ --gap-base: 16px
69
+ // 页面级留白(侧边栏/内容区/列间距),笔记本及以上放宽
70
+ --gap-page: 16px
71
+ @media screen and (min-width: $device-laptop)
72
+ --gap-page: 32px
73
+ // 右栏宽度增量(在 --width-sidebar 基础上加宽)
74
+ --rightbar-width-extra: calc(var(--gap-base) * 2)
71
75
 
72
76
  --gap-p: 'calc(%s + 4px)' % $fs-body // gap for paragraph
73
77
  --gap-p-compact: 'calc(%s * 0.75)' % $fs-body
@@ -83,11 +87,6 @@ $corner-shape = convert(hexo-config('style.corner-shape'))
83
87
  @media screen and (max-width: $device-mobile-max)
84
88
  --side-content-width: 224px
85
89
 
86
- // 动态计算值
87
- :root
88
- // 元素文本内容到容器边缘的间距
89
- --gap-max: calc(var(--gap-margin) + var(--gap-padding))
90
-
91
90
  // shadow
92
91
  $boxshadow-card = 0 1px 2px 0px rgba(0, 0, 0, 0.1)
93
92
  $boxshadow-float = 0 4px 8px 0px rgba(0, 0, 0, 0.05)