hexo-theme-stellar 1.18.5 → 1.20.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 (68) hide show
  1. package/_config.yml +93 -17
  2. package/layout/_partial/cover/wiki_cover.ejs +1 -1
  3. package/layout/_partial/head.ejs +15 -2
  4. package/layout/_partial/main/article/ai_abstract.ejs +8 -0
  5. package/layout/_partial/main/article/article_footer.ejs +87 -50
  6. package/layout/_partial/main/article/read_next.ejs +17 -12
  7. package/layout/_partial/main/navbar/breadcrumb.ejs +53 -15
  8. package/layout/_partial/main/navbar/list_post.ejs +6 -4
  9. package/layout/_partial/main/navbar/list_wiki.ejs +4 -3
  10. package/layout/_partial/main/post_list/paginator.ejs +1 -1
  11. package/layout/_partial/plugins/comments/beaudar/script.ejs +1 -1
  12. package/layout/_partial/plugins/comments/giscus/script.ejs +1 -1
  13. package/layout/_partial/plugins/comments/layout.ejs +2 -2
  14. package/layout/_partial/plugins/comments/utterances/script.ejs +1 -1
  15. package/layout/_partial/plugins/comments/waline/script.ejs +17 -0
  16. package/layout/_partial/scripts/index.ejs +7 -0
  17. package/layout/_partial/sidebar/header.ejs +1 -1
  18. package/layout/_partial/sidebar/index.ejs +3 -3
  19. package/layout/_partial/widgets/ghissues.ejs +1 -1
  20. package/layout/_partial/widgets/ghrepo.ejs +1 -1
  21. package/layout/_partial/widgets/recent.ejs +3 -3
  22. package/layout/_partial/widgets/related.ejs +9 -8
  23. package/layout/_partial/widgets/toc.ejs +15 -10
  24. package/layout/index.ejs +7 -4
  25. package/layout/mermaid.ejs +32 -0
  26. package/layout/page.ejs +3 -0
  27. package/layout/post.ejs +6 -0
  28. package/layout/wiki.ejs +6 -0
  29. package/package.json +1 -1
  30. package/scripts/events/lib/doc_tree.js +123 -92
  31. package/scripts/filters/index.js +13 -0
  32. package/scripts/tags/index.js +2 -2
  33. package/scripts/tags/inline-labels.js +2 -2
  34. package/scripts/tags/lib/ablock.js +1 -1
  35. package/scripts/tags/lib/checkbox.js +1 -1
  36. package/scripts/tags/lib/folders.js +1 -1
  37. package/scripts/tags/lib/folding.js +2 -2
  38. package/scripts/tags/lib/hashtag.js +36 -0
  39. package/scripts/tags/lib/image.js +5 -1
  40. package/scripts/tags/lib/mark.js +1 -1
  41. package/scripts/tags/lib/note.js +1 -1
  42. package/scripts/tags/lib/okr.js +140 -0
  43. package/scripts/tags/lib/sites.js +1 -1
  44. package/scripts/tags/lib/toc.js +1 -1
  45. package/source/css/_common/button.styl +1 -0
  46. package/source/css/_common/highlight.styl +2 -0
  47. package/source/css/_custom.styl +2 -2
  48. package/source/css/_defines/theme.styl +0 -1
  49. package/source/css/_layout/md.styl +10 -2
  50. package/source/css/_layout/partial/ai_abstract.styl +155 -0
  51. package/source/css/_layout/partial/bread-nav.styl +32 -0
  52. package/source/css/_layout/partial/paginator.styl +7 -3
  53. package/source/css/_layout/tag-plugins/common.styl +30 -39
  54. package/source/css/_layout/tag-plugins/folding.styl +1 -1
  55. package/source/css/_layout/tag-plugins/hashtag.styl +17 -0
  56. package/source/css/_layout/tag-plugins/link.styl +1 -7
  57. package/source/css/_layout/tag-plugins/mark.styl +2 -5
  58. package/source/css/_layout/tag-plugins/note.styl +1 -1
  59. package/source/css/_layout/tag-plugins/okr.styl +106 -0
  60. package/source/css/_plugins/copycode.styl +27 -0
  61. package/source/css/_plugins/index.styl +4 -0
  62. package/source/css/_plugins/mermaid.styl +125 -0
  63. package/source/js/main.js +8 -3
  64. package/source/js/plugins/copycode.js +49 -0
  65. package/source/js/plugins/linkcard.js +1 -1
  66. package/source/js/plugins/sites.js +1 -1
  67. package/scripts/tags/lib/tag.js +0 -35
  68. package/source/css/_layout/tag-plugins/tag.styl +0 -13
@@ -29,7 +29,7 @@ hexo.extend.tag.register('psw', function(args) {
29
29
  hexo.extend.tag.register('sup', function(args) {
30
30
  args = hexo.args.map(args, ['color'], ['text'])
31
31
  var el = ''
32
- el += '<sup class="tag-plugin sup"' + ' ' + hexo.args.joinTags(args, ['color']).join(' ') + '>'
32
+ el += '<sup class="tag-plugin colorful sup"' + ' ' + hexo.args.joinTags(args, ['color']).join(' ') + '>'
33
33
  el += args.text
34
34
  el += '</sup>'
35
35
  return el
@@ -37,7 +37,7 @@ hexo.extend.tag.register('sup', function(args) {
37
37
  hexo.extend.tag.register('sub', function(args) {
38
38
  args = hexo.args.map(args, ['color'], ['text'])
39
39
  var el = ''
40
- el += '<sub class="tag-plugin sub"' + ' ' + hexo.args.joinTags(args, ['color']).join(' ') + '>'
40
+ el += '<sub class="tag-plugin colorful sub"' + ' ' + hexo.args.joinTags(args, ['color']).join(' ') + '>'
41
41
  el += args.text
42
42
  el += '</sub>'
43
43
  return el
@@ -17,7 +17,7 @@ module.exports = ctx => function(args, content) {
17
17
  }
18
18
  var el = ''
19
19
  // header
20
- el += '<div class="tag-plugin note"'
20
+ el += '<div class="tag-plugin colorful note"'
21
21
  el += ' ' + ctx.args.joinTags(args, ['color', 'child']).join(' ')
22
22
  el += '>'
23
23
  // title
@@ -13,7 +13,7 @@ module.exports = (ctx, type) => function(args) {
13
13
  args = ctx.args.map(args, ['color', 'checked', 'symbol'], ['text'])
14
14
  var el = ''
15
15
  // div
16
- el += '<div class="tag-plugin checkbox"'
16
+ el += '<div class="tag-plugin colorful checkbox"'
17
17
  el += ' ' + ctx.args.joinTags(args, ['color', 'symbol']).join(' ')
18
18
  el += '>'
19
19
  // input
@@ -15,7 +15,7 @@
15
15
  module.exports = ctx => function(args, content) {
16
16
  args = ctx.args.map(args, ['color'])
17
17
  var el = ''
18
- el += '<div class="tag-plugin folders"'
18
+ el += '<div class="tag-plugin colorful folders"'
19
19
  el += ' ' + ctx.args.joinTags(args, ['color']).join(' ')
20
20
  el += '>'
21
21
 
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * {% folding [color:yellow] [child:codeblock] [open:false] title %}
6
6
  * body
7
- * {% endtable %}
7
+ * {% endfolding %}
8
8
  */
9
9
 
10
10
  'use strict'
@@ -13,7 +13,7 @@ module.exports = ctx => function(args, content) {
13
13
  args = ctx.args.map(args, ['color', 'child', 'open'], ['title'])
14
14
  var el = ''
15
15
  // header
16
- el += '<details class="tag-plugin folding"'
16
+ el += '<details class="tag-plugin colorful folding"'
17
17
  el += ' ' + ctx.args.joinTags(args, ['color', 'child']).join(' ')
18
18
  if (args.open && args.open == 'true') {
19
19
  el += ' open'
@@ -0,0 +1,36 @@
1
+ /**
2
+ * hashtag.js v1.0 | https://github.com/xaoxuu/hexo-theme-stellar/
3
+ * 格式与官方标签插件一致使用空格分隔,中括号内的是可选参数(中括号不需要写出来)
4
+ *
5
+ * {% hashtag text href [color:color] %}
6
+ *
7
+ */
8
+
9
+ 'use strict'
10
+
11
+ const tag_colors = ['red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'purple']
12
+ var tag_index = 0
13
+
14
+ module.exports = ctx => function(args) {
15
+ args = ctx.args.map(args, ['color'], ['text', 'href'])
16
+ if (args.color == null) {
17
+ const default_color = ctx.theme.config.tag_plugins.hashtag?.default_color
18
+ if (default_color) {
19
+ args.color = default_color
20
+ } else {
21
+ args.color = tag_colors[tag_index]
22
+ tag_index += 1
23
+ if (tag_index >= tag_colors.length) {
24
+ tag_index = 0
25
+ }
26
+ }
27
+ }
28
+ var el = ''
29
+ el += '<a class="tag-plugin colorful hashtag"'
30
+ el += ' ' + ctx.args.joinTags(args, ['color', 'href']).join(' ')
31
+ el += '>'
32
+ el += '<svg t="1701408144765" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4228" width="200" height="200"><path d="M426.6 64.8c34.8 5.8 58.4 38.8 52.6 73.6l-19.6 117.6h190.2l23-138.6c5.8-34.8 38.8-58.4 73.6-52.6s58.4 38.8 52.6 73.6l-19.4 117.6H896c35.4 0 64 28.6 64 64s-28.6 64-64 64h-137.8l-42.6 256H832c35.4 0 64 28.6 64 64s-28.6 64-64 64h-137.8l-23 138.6c-5.8 34.8-38.8 58.4-73.6 52.6s-58.4-38.8-52.6-73.6l19.6-117.4h-190.4l-23 138.6c-5.8 34.8-38.8 58.4-73.6 52.6s-58.4-38.8-52.6-73.6l19.4-117.8H128c-35.4 0-64-28.6-64-64s28.6-64 64-64h137.8l42.6-256H192c-35.4 0-64-28.6-64-64s28.6-64 64-64h137.8l23-138.6c5.8-34.8 38.8-58.4 73.6-52.6z m11.6 319.2l-42.6 256h190.2l42.6-256h-190.2z" p-id="4229"></path></svg>'
33
+ el += '<span>' + args.text + '</span>'
34
+ el += '</a>'
35
+ return el
36
+ }
@@ -71,7 +71,11 @@ module.exports = ctx => function(args) {
71
71
  if (args.download == 'true') {
72
72
  href = args.src
73
73
  }
74
- el += '<a class="image-download blur" style="opacity:0" href="' + href + '"><svg class="icon" style="width: 1em; height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3734"><path d="M561.00682908 685.55838913a111.03077546 111.03077546 0 0 1-106.8895062 0L256.23182837 487.72885783a55.96309219 55.96309219 0 0 1 79.13181253-79.18777574L450.70357448 523.88101491V181.55477937a55.96309219 55.96309219 0 0 1 111.92618438 0v344.06109173l117.07478902-117.07478901a55.96309219 55.96309219 0 0 1 79.13181252 79.18777574zM282.81429711 797.1487951h447.70473912a55.96309219 55.96309219 0 0 1 0 111.92618438H282.81429711a55.96309219 55.96309219 0 0 1 0-111.92618438z" p-id="3735"></path></svg></a>'
74
+ let download = ''
75
+ if (args.alt) {
76
+ download = ' download="' + args.alt + '"'
77
+ }
78
+ el += '<a class="image-download blur" style="opacity:0" target="_blank"' + download + ' href="' + href + '"><svg class="icon" style="width: 1em; height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3734"><path d="M561.00682908 685.55838913a111.03077546 111.03077546 0 0 1-106.8895062 0L256.23182837 487.72885783a55.96309219 55.96309219 0 0 1 79.13181253-79.18777574L450.70357448 523.88101491V181.55477937a55.96309219 55.96309219 0 0 1 111.92618438 0v344.06109173l117.07478902-117.07478901a55.96309219 55.96309219 0 0 1 79.13181252 79.18777574zM282.81429711 797.1487951h447.70473912a55.96309219 55.96309219 0 0 1 0 111.92618438H282.81429711a55.96309219 55.96309219 0 0 1 0-111.92618438z" p-id="3735"></path></svg></a>'
75
79
  }
76
80
  el += '</div>'
77
81
 
@@ -14,7 +14,7 @@ module.exports = ctx => function(args) {
14
14
  args.color = ctx.theme.config.tag_plugins.mark.default_color
15
15
  }
16
16
  var el = ''
17
- el += '<mark class="tag-plugin mark"'
17
+ el += '<mark class="tag-plugin colorful mark"'
18
18
  el += ' ' + ctx.args.joinTags(args, ['color']).join(' ')
19
19
  el += '>'
20
20
  el += args.text
@@ -19,7 +19,7 @@ module.exports = ctx => function(args) {
19
19
  }
20
20
  var el = ''
21
21
  // header
22
- el += '<div class="tag-plugin note"'
22
+ el += '<div class="tag-plugin colorful note"'
23
23
  el += ' ' + ctx.args.joinTags(args, ['color', 'child']).join(' ')
24
24
  el += '>'
25
25
  // title
@@ -0,0 +1,140 @@
1
+ /**
2
+ * okr.js v1 | https://github.com/xaoxuu/hexo-theme-stellar/
3
+ *
4
+ * {% okr o1 percent:0.5 status:delay %}
5
+ * title (only one line)
6
+ * note
7
+ * <!-- okr kr1 percent:1 -->
8
+ * title (only one line)
9
+ * note
10
+ * {% endokr %}
11
+ *
12
+ */
13
+
14
+ 'use strict'
15
+
16
+ function splitContentAndNote(input) {
17
+ var arr = input.trim().split('\n').filter(item => item.trim().length > 0)
18
+ if (arr.length == 0) {
19
+ return {title:'', note:''}
20
+ }
21
+ const title = arr.shift()
22
+ const note = arr.join('\n')
23
+ return {title:title, note:note}
24
+ }
25
+
26
+ function generateKRList(ctx, contentArray) {
27
+ if (contentArray.length < 3) {
28
+ console.error('invalid okr tag:', contentArray);
29
+ return []
30
+ }
31
+ var result = []
32
+ var krTagIndexes = []
33
+ for (let index = 0; index < contentArray.length; index++) {
34
+ const element = contentArray[index];
35
+ if (element.startsWith('kr')) {
36
+ krTagIndexes.push(index)
37
+ }
38
+ }
39
+ for (let index of krTagIndexes) {
40
+ if (index >= contentArray.length) {
41
+ break
42
+ }
43
+ const tagStr = contentArray[index]
44
+ const contentStr = contentArray[index+1]
45
+ if (contentStr.startsWith('kr')) {
46
+ continue
47
+ }
48
+ result.push({
49
+ krMeta: ctx.args.map(tagStr.split(/\s+/), ['percent', 'status'], 'krIndex'),
50
+ krBody: splitContentAndNote(contentStr)
51
+ })
52
+ }
53
+ return result
54
+ }
55
+
56
+ function layoutItem(ctx, type, index, title, note, color, label, percent) {
57
+ const percentStr = (percent * 100).toString().replace(/\.\d*/, '')
58
+ return `
59
+ <div class="okr-item ${type}">
60
+ <div class="okr-left">
61
+ <span class="title">${index.toUpperCase()}</span>
62
+ </div>
63
+ <div class="okr-center">
64
+ <span class="title">${title}</span>
65
+ <div class="note">${ctx.render.renderSync({text: note, engine: 'markdown'}).split('\n').join('')}</div>
66
+ </div>
67
+ <div class="okr-right colorful" color="${color}">
68
+ <div class="labels">
69
+ <span class="status label">${label}</span>
70
+ <span class="status percent">${percentStr}%</span>
71
+ </div>
72
+ <div class="progress">
73
+ <div class="fill" style="width:${percentStr}%;"></div>
74
+ </div>
75
+ </div>
76
+ </div>
77
+ `
78
+ }
79
+
80
+ module.exports = ctx => function(args, content = '') {
81
+ args = ctx.args.map(args, ['percent', 'status', 'color'], 'oIndex')
82
+ var contentArray = content.split(/<!--\s*okr (.*?)\s*-->/g).filter(item => item.trim().length > 0)
83
+ if (contentArray.length < 3) {
84
+ console.error('invalid okr tag:', contentArray);
85
+ return ''
86
+ }
87
+ const statusList = ctx.theme.config.tag_plugins.okr.status
88
+ const oMeta = args
89
+ const oBody = splitContentAndNote(contentArray.shift())
90
+ const krList = generateKRList(ctx, contentArray)
91
+
92
+ var el_krs = ''
93
+ var krPercentList = []
94
+ for (let kr of krList) {
95
+ const { krMeta, krBody } = kr
96
+ const krPercent = Number(krMeta.percent) || 0
97
+ if (krMeta == null || krBody == null) {
98
+ continue
99
+ }
100
+ var status = null
101
+ if (krMeta.status && statusList[krMeta.status]) {
102
+ status = statusList[krMeta.status]
103
+ }
104
+ if (status == null) {
105
+ if (krPercent >= 1) {
106
+ status = statusList['finished']
107
+ } else {
108
+ status = statusList['in_track']
109
+ }
110
+ }
111
+ krPercentList.push(krPercent)
112
+ el_krs += layoutItem(ctx, 'kr', krMeta.krIndex, krBody.title, krBody.note, status.color, status.label, krPercent)
113
+ }
114
+ const krPercentSum = krPercentList.reduce(
115
+ (accumulator, currentValue) => accumulator + currentValue,
116
+ 0,
117
+ );
118
+
119
+ const oPercent = Number(oMeta.percent) || (krPercentSum / krPercentList.length).toFixed(2)
120
+ var status = null
121
+ if (args.status != null && args.status && statusList[args.status]) {
122
+ status = statusList[args.status]
123
+ }
124
+ if (status == null) {
125
+ if (oPercent >= 1) {
126
+ status = statusList['finished']
127
+ } else {
128
+ status = statusList['in_track']
129
+ }
130
+ }
131
+
132
+ var el = ''
133
+ el += '<div class="tag-plugin colorful okr"'
134
+ el += ' ' + ctx.args.joinTags(args, ['color']).join(' ')
135
+ el += '>'
136
+ el += layoutItem(ctx, 'o', oMeta.oIndex, oBody.title, oBody.note, status.color, status.label, oPercent)
137
+ el += el_krs
138
+ el += '</div>'
139
+ return el
140
+ }
@@ -32,7 +32,7 @@ module.exports = ctx => function(args) {
32
32
  if (item.url && item.title) {
33
33
  var cell = '<div class="site-card">'
34
34
  cell += '<a class="card-link" target="_blank" rel="external nofollow noopener noreferrer" href="' + item.url + '">'
35
- cell += '<img src="' + (item.screenshot || ('https://screenshot-api.xaoxuu.com/api?url=' + item.url + '&width=1280&height=720')) + '" onerror="javascript:this.removeAttribute(&quot;data-src&quot;);this.src=&quot;' + ctx.theme.config.default.cover + '&quot;;"/>'
35
+ cell += '<img src="' + (item.screenshot || ('https://api.vlts.cc/screenshot?url=' + item.url + '&width=1280&height=720')) + '" onerror="javascript:this.removeAttribute(&quot;data-src&quot;);this.src=&quot;' + ctx.theme.config.default.cover + '&quot;;"/>'
36
36
  cell += '<div class="info">'
37
37
  cell += '<img src="' + (item.avatar || ctx.theme.config.default.link) + '" onerror="javascript:this.removeAttribute(&quot;data-src&quot;);this.src=&quot;' + ctx.theme.config.default.link + '&quot;;"/>'
38
38
  cell += '<span class="title">' + item.title + '</span>'
@@ -43,7 +43,7 @@ module.exports = ctx => function(args) {
43
43
  el += '</summary>'
44
44
 
45
45
  if (args.wiki) {
46
- const proj = ctx.theme.config.wiki.projects[args.wiki]
46
+ const proj = ctx.theme.config.wiki.tree[args.wiki]
47
47
  if (proj == undefined) {
48
48
  return ''
49
49
  }
@@ -32,6 +32,7 @@ a.button.start.gradient
32
32
  background: convert(hexo-config('style.gradient.start'))
33
33
  background-size: 1000%
34
34
  color: white
35
+ text-shadow: 0 0 1px rgba(0,0,0,0.12)
35
36
  animation: glow 60s linear infinite
36
37
  @keyframes glow {
37
38
  from {
@@ -171,6 +171,8 @@ table:not([class])
171
171
  content: "Go"
172
172
  &.typescript .code:before,&.ts .code:before
173
173
  content: "TS"
174
+ &.matlab .code:before
175
+ content: "MATLAB"
174
176
 
175
177
 
176
178
 
@@ -44,8 +44,8 @@ $fs-14 = .875rem
44
44
  $fs-13 = .8125rem
45
45
  $fs-12 = .75rem
46
46
 
47
- $fs-h1 = 1.75rem // 32px
48
- $fs-h2 = 1.5rem // 24px
47
+ $fs-h1 = 2rem // 32px
48
+ $fs-h2 = 1.75rem // 28px
49
49
  $fs-h3 = 1.375rem // 22px
50
50
  $fs-h4 = 1.125rem // 18px
51
51
  $fs-h5 = $fs-15
@@ -39,7 +39,6 @@ set_text_light()
39
39
  --block-border: hsl($color-block-h, $color-block-s, 90)
40
40
  --block-hover: hsl($color-block-h, $color-block-s, 92)
41
41
  set_text_dark()
42
- --theme-bg2: $color-theme
43
42
  --theme-link: $color-link
44
43
 
45
44
  set_darkmode()
@@ -47,6 +47,11 @@ h1.article-title
47
47
  &:hover
48
48
  a.headerlink:before
49
49
  opacity: 1
50
+ blockquote, .tag-plugin
51
+ h2,h3,h4,h5,h6
52
+ margin-top: 0.25em
53
+ margin-bottom: 0.25em
54
+ padding-top: 0
50
55
 
51
56
  .md-text.content:first-child
52
57
  padding-top: 0
@@ -82,7 +87,7 @@ h1.article-title
82
87
  opacity: 0
83
88
  content: '#'
84
89
  position: absolute
85
- margin-left: -0.75em
90
+ margin-left: -0.6em
86
91
  h2
87
92
  margin-top: 2rem
88
93
  border-bottom: 1px solid var(--block-border)
@@ -139,7 +144,10 @@ h1.article-title
139
144
  left: 0
140
145
  right: 0
141
146
  height: 1px
142
- opacity: 0.8
147
+ if hexo-config('style.link.underline') == true
148
+ opacity: 0.8
149
+ else
150
+ opacity: 0
143
151
  background: var(--theme-link)
144
152
  trans1: all
145
153
  &:hover
@@ -0,0 +1,155 @@
1
+ :root
2
+ --heo-none: #00000000
3
+ --heo-theme = var(--theme-link)
4
+ --heo-main: var(--theme-link)
5
+ --heo-snackbar-time: 5s
6
+ --heo-theme-none: #4259ef01
7
+ --heo-background: var(--site-bg)
8
+ --heo-hovertext: var(--text-code)
9
+ --heo-secondtext: var(--text-p0)
10
+ --heo-scrollbar: rgba(60, 60, 67, 0.4)
11
+ --heo-secondbg: var(--block)
12
+ --heo-card-bg: var(--block)
13
+ --heo-card-bg-none: rgba(255, 255, 255, 0)
14
+ --heo-card-border: var(--block-border)
15
+ --heo-shadow-border: 0 8px 16px -4px #2c2d300c
16
+ --style-border: 1px solid var(--heo-card-border)
17
+ --style-border-always: 1px solid var(--heo-card-border)
18
+
19
+ .post-TianliGPT
20
+ background: var(--block)
21
+ border-radius: 12px
22
+ padding: 12px
23
+ line-height: 1.3
24
+ border: var(--style-border-always)
25
+ margin: 16px 0
26
+
27
+ @media screen and (max-width: 768px)
28
+ .post-TianliGPT
29
+ margin-top: 22px
30
+
31
+ .tianliGPT-title
32
+ display: flex
33
+ color: var(--theme-link)
34
+ border-radius: 8px
35
+ align-items: center
36
+ padding: 0 12px
37
+ cursor: default
38
+ user-select: none
39
+
40
+ .tianliGPT-title-text
41
+ font-weight: bold
42
+ margin-left: 8px
43
+ line-height: 1
44
+
45
+ .tianliGPT-explanation
46
+ margin-top: 12px
47
+ padding: 8px 12px
48
+ background: var(--card)
49
+ border-radius: 8px
50
+ border: var(--style-border-always)
51
+ font-size: 15px
52
+ line-height: 1.4
53
+ display: flex
54
+
55
+ .tianliGPT-suggestions
56
+ display: flex
57
+ flex-wrap: wrap
58
+
59
+ .tianliGPT-suggestions .tianliGPT-suggestions-item
60
+ margin-top: 12px
61
+ padding: 8px 12px
62
+ background: var(--card)
63
+ border-radius: 8px 8px 8px 0
64
+ border: var(--style-border-always)
65
+ font-size: 15px
66
+ line-height: 1.4
67
+ display: flex
68
+ width: fit-content
69
+ margin-right: 12px
70
+ cursor: pointer
71
+ transition: 0.3s
72
+
73
+ .tianliGPT-suggestions .tianliGPT-suggestions-item:hover
74
+ background: var(--heo-main)
75
+ color: var(--text-p0)
76
+
77
+ .blinking-cursor
78
+ background-color: var(--heo-main)
79
+ width: 10px
80
+ height: 16px
81
+ display: inline-block
82
+ vertical-align: middle
83
+ animation: blinking-cursor 0.5s infinite
84
+ -webkit-animation: blinking-cursor 0.5s infinite
85
+ margin-left: 4px
86
+
87
+ @keyframes blinking-cursor
88
+ 0%
89
+ opacity: 1
90
+
91
+ 40%
92
+ opacity: 1
93
+
94
+ 50%
95
+ opacity: 0
96
+
97
+ 90%
98
+ opacity: 0
99
+
100
+ 100%
101
+ opacity: 1
102
+
103
+ .tianliGPT-tag
104
+ font-size: 12px
105
+ background-color: var(--theme-link)
106
+ color: var(--card)
107
+ font-weight: bold
108
+ border-radius: 4px
109
+ margin-left: auto
110
+ line-height: 1
111
+ padding: 4px
112
+ display: flex
113
+ align-items: center
114
+ justify-content: center
115
+ cursor: pointer
116
+ transition: 0.3s
117
+
118
+ .tianliGPT-tag:hover
119
+ background: var(--text-p2)
120
+ color: var(--card)
121
+
122
+ ins.adsbygoogle
123
+ margin: 16px 0
124
+ background: var(--card)
125
+ border-radius: 12px
126
+ overflow: hidden
127
+ border: var(--style-border-always)
128
+
129
+ #tianliGPT-Toggle
130
+ font-size: 12px
131
+ background: var(--theme-link)
132
+ color: var(--card)
133
+ padding: 4px
134
+ border-radius: 4px
135
+ margin-left: 6px
136
+ transform: scale(0.8)
137
+ cursor: pointer
138
+ transition: 0.3s
139
+ font-weight: bold
140
+
141
+ #tianliGPT-Toggle:hover
142
+ background: var(--block-hover)
143
+ color: var(--card)
144
+
145
+ .tianliGPT-title-icon
146
+ width: 20px
147
+ height: 20px
148
+
149
+ .tianliGPT-title-icon svg
150
+ width: 20px
151
+ height: 20px
152
+ fill: var(--heo-main)
153
+
154
+ .tianliGPT-title-icon svg path
155
+ fill: var(--heo-main)
@@ -3,6 +3,8 @@
3
3
  padding: 0.25rem 1rem 0
4
4
  color: var(--text-p3)
5
5
  font-weight: 500
6
+ display: flex
7
+ justify-content: space-between
6
8
  div#breadcrumb
7
9
  display: flex
8
10
  align-items: center
@@ -17,3 +19,33 @@
17
19
  color: $color-hover
18
20
  div#post-meta
19
21
  margin-top: 2px
22
+ span+span
23
+ margin-left: 8px
24
+ visibility: hidden
25
+ &:hover
26
+ div#post-meta
27
+ span+span
28
+ visibility: visible
29
+
30
+ .bread-nav .ghrepo
31
+ font-size: $fs-13
32
+ display: flex
33
+ flex-direction: column
34
+ align-items: flex-start
35
+ border-left: 1px solid var(--text-meta)
36
+ padding-left: 8px
37
+ a
38
+ display: flex
39
+ align-items: center
40
+ color: var(--text-p2)
41
+ svg
42
+ margin-right: 4px
43
+ &.bold
44
+ font-weight: 600
45
+ color: var(--text-p1)
46
+ span
47
+ margin-left: 4px
48
+ &:hover
49
+ color: var(--theme-link)
50
+ a+a
51
+ margin-top: 8px
@@ -9,11 +9,16 @@
9
9
  border-radius: $border-card
10
10
  overflow: hidden
11
11
  box-shadow: 0 2px 8px 0px rgba(0, 0, 0, 0.03)
12
+ color: var(--text-p3)
12
13
  .page-number
13
14
  padding: 4px 8px
14
15
  border-radius: 8px
15
- background: var(--block)
16
16
  margin: 2px
17
+ a.page-number
18
+ color: var(--text-p3)
19
+ &:hover
20
+ color: var(--text-p1)
21
+ background: var(--block)
17
22
  .extend
18
23
  text-align: center
19
24
  background-size: contain
@@ -29,9 +34,8 @@
29
34
  background-image: url('https://gcore.jsdelivr.net/gh/cdn-x/placeholder@1.0.4/arrow/f049bbd4e88ec.svg')
30
35
  .current
31
36
  font-family: $ff-code
32
- color: var(--text-p3)
37
+ background: var(--block)
33
38
  .extend
34
- color: var(--text-p3)
35
39
  padding: 1rem
36
40
  line-height: 0
37
41
  filter: grayscale(100%)