hexo-theme-gnix 4.0.5 → 4.2.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/include/util/common.js +22 -1
- package/layout/archive.jsx +70 -46
- package/layout/common/article_cover.jsx +19 -18
- package/layout/common/head.jsx +1 -1
- package/layout/common/navbar.jsx +1 -2
- package/layout/common/scripts.jsx +0 -19
- package/layout/tags.jsx +4 -0
- package/package.json +1 -1
- package/source/css/default.css +41 -88
- package/source/css/responsive/mobile.css +3 -2
- package/source/js/live2d_Asoul/Model/Ava/Ava.4096/texture_00.webp +0 -0
- package/source/js/live2d_Asoul/Model/Ava/Ava.moc3 +0 -0
- package/source/js/live2d_Asoul/Model/Ava/Ava.model3.json +0 -323
- package/source/js/live2d_Asoul/Model/Ava/Ava.physics3.json +0 -1225
- package/source/js/live2d_Asoul/Model/Ava/motions/Ava_idle.motion3.json +0 -1
- package/source/js/live2d_Asoul/Model/Ava/motions/Ava_shake01.motion3.json +0 -1
- package/source/js/live2d_Asoul/Model/Ava/motions/Ava_shake02.motion3.json +0 -1
- package/source/js/live2d_Asoul/Model/Ava/motions/Ava_tap01.motion3.json +0 -1
- package/source/js/live2d_Asoul/Model/Ava/motions/Ava_tap02.motion3.json +0 -1
- package/source/js/live2d_Asoul/Model/Ava/motions/Ava_tap03.motion3.json +0 -1
- package/source/js/live2d_Asoul/Model/Ava/motions/Ava_tap04.motion3.json +0 -1
- package/source/js/live2d_Asoul/Model/Ava/motions/Ava_tap05.motion3.json +0 -1
- package/source/js/live2d_Asoul/Model/Ava/motions/Ava_tap06.motion3.json +0 -1
- package/source/js/live2d_Asoul/Model/Ava/motions/Ava_tap07.motion3.json +0 -1
- package/source/js/live2d_Asoul/Model/Ava/motions/Ava_tap08.motion3.json +0 -1
- package/source/js/live2d_Asoul/Model/Ava/motions/Ava_tap09.motion3.json +0 -1
- package/source/js/live2d_Asoul/Model/Ava/motions/Ava_tap10.motion3.json +0 -1
- package/source/js/live2d_Asoul/Model/Ava/motions/Ava_tap11.motion3.json +0 -1
- package/source/js/live2d_Asoul/Model/Ava/raw.ex.json +0 -16
- package/source/js/live2d_Asoul/Model/Ava/raw.model3.json +0 -321
- package/source/js/live2d_Asoul/Model/Diana/Diana.4096/texture_00.webp +0 -0
- package/source/js/live2d_Asoul/Model/Diana/Diana.moc3 +0 -0
- package/source/js/live2d_Asoul/Model/Diana/Diana.model3.json +0 -212
- package/source/js/live2d_Asoul/Model/Diana/Diana.physics3.json +0 -764
- package/source/js/live2d_Asoul/Model/Diana/motions/Diana_idle.motion3.json +0 -1
- package/source/js/live2d_Asoul/Model/Diana/motions/Diana_tap01.motion3.json +0 -1
- package/source/js/live2d_Asoul/Model/Diana/motions/Diana_tap02.motion3.json +0 -1
- package/source/js/live2d_Asoul/Model/Diana/motions/Diana_tap03.motion3.json +0 -1
- package/source/js/live2d_Asoul/Model/Diana/motions/Diana_tap04.motion3.json +0 -1
- package/source/js/live2d_Asoul/Model/Diana/motions/Diana_tap05.motion3.json +0 -1
- package/source/js/live2d_Asoul/Model/Diana/motions/Diana_tap06.motion3.json +0 -1
- package/source/js/live2d_Asoul/Model/Diana/motions/Diana_tap07.motion3.json +0 -1
- package/source/js/live2d_Asoul/Model/Diana/motions/Diana_tap08.motion3.json +0 -1
- package/source/js/live2d_Asoul/Model/Diana/motions/Diana_tap09.motion3.json +0 -1
- package/source/js/live2d_Asoul/Model/Diana/motions/Diana_tap10.motion3.json +0 -1
- package/source/js/live2d_Asoul/Model/Diana/motions/Diana_tap11.motion3.json +0 -1
- package/source/js/live2d_Asoul/Model/Diana/raw.ex.json +0 -16
- package/source/js/live2d_Asoul/Model/Diana/raw.model3.json +0 -210
- package/source/js/live2d_Asoul/TweenLite.min.js +0 -12
- package/source/js/live2d_Asoul/cubism4.min.js +0 -2
- package/source/js/live2d_Asoul/live2dcubismcore.min.js +0 -9
- package/source/js/live2d_Asoul/load.js +0 -231
- package/source/js/live2d_Asoul/pio.css +0 -161
- package/source/js/live2d_Asoul/pio.js +0 -296
- package/source/js/live2d_Asoul/pio_sdk4.js +0 -149
- package/source/js/live2d_Asoul/pixi.min.js +0 -9
- package/util/cache.js +0 -24
package/include/util/common.js
CHANGED
|
@@ -3,7 +3,28 @@
|
|
|
3
3
|
*/
|
|
4
4
|
const { Component, Fragment } = require("inferno");
|
|
5
5
|
const view = require("../hexo/view");
|
|
6
|
-
const
|
|
6
|
+
const crypto = require("node:crypto");
|
|
7
|
+
const { createElement } = require("inferno-create-element");
|
|
8
|
+
|
|
9
|
+
const cache = {};
|
|
10
|
+
|
|
11
|
+
function computeHash(props) {
|
|
12
|
+
return crypto.createHash("md5").update(JSON.stringify(props)).digest("hex");
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function cacheComponent(type, prefix, transform) {
|
|
16
|
+
return (props) => {
|
|
17
|
+
const targetProps = transform(props);
|
|
18
|
+
if (targetProps === null || typeof targetProps !== "object") {
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
const cacheId = `${prefix}-${computeHash(targetProps)}`;
|
|
22
|
+
if (!cache[cacheId]) {
|
|
23
|
+
cache[cacheId] = createElement(type, targetProps);
|
|
24
|
+
}
|
|
25
|
+
return cache[cacheId];
|
|
26
|
+
};
|
|
27
|
+
}
|
|
7
28
|
|
|
8
29
|
function lazy_load_css(href) {
|
|
9
30
|
script_str = `var link = document.createElement('link');
|
package/layout/archive.jsx
CHANGED
|
@@ -1,25 +1,38 @@
|
|
|
1
1
|
const { format, isValid, parseISO } = require("date-fns");
|
|
2
2
|
const { Component, Fragment } = require("../include/util/common");
|
|
3
|
-
const Paginator = require("./misc/paginator");
|
|
4
3
|
const ArticleMedia = require("./common/article_media");
|
|
5
4
|
|
|
6
5
|
module.exports = class extends Component {
|
|
7
6
|
render() {
|
|
8
|
-
const {
|
|
9
|
-
const { url_for,
|
|
7
|
+
const { page, helper } = this.props;
|
|
8
|
+
const { url_for, date_xml, date } = helper;
|
|
10
9
|
|
|
11
10
|
const inlineCSS = `
|
|
11
|
+
.winter {
|
|
12
|
+
--accent: var(--blue);
|
|
13
|
+
}
|
|
14
|
+
.autumn {
|
|
15
|
+
--accent: var(--red);
|
|
16
|
+
}
|
|
17
|
+
.summer {
|
|
18
|
+
--accent: var(--green);
|
|
19
|
+
}
|
|
20
|
+
.spring {
|
|
21
|
+
--accent: var(--peach);
|
|
22
|
+
}
|
|
23
|
+
|
|
12
24
|
.article-meta {
|
|
13
25
|
font-size: 0.8rem;
|
|
14
26
|
color: var(--subtext1);
|
|
15
|
-
|
|
27
|
+
font-family: var(--font-handwriting);
|
|
16
28
|
}
|
|
17
|
-
|
|
18
29
|
a.archive-title {
|
|
30
|
+
font-family: var(--font-sans-serif);
|
|
31
|
+
font-weight: 400;
|
|
19
32
|
color: var(--text);
|
|
20
33
|
|
|
21
34
|
&:hover {
|
|
22
|
-
color: var(--
|
|
35
|
+
color: var(--accent);
|
|
23
36
|
}
|
|
24
37
|
}
|
|
25
38
|
|
|
@@ -28,46 +41,57 @@ module.exports = class extends Component {
|
|
|
28
41
|
top: 1.5rem;
|
|
29
42
|
right: 1.5rem;
|
|
30
43
|
z-index: 0;
|
|
31
|
-
font-size: 7.5rem;
|
|
32
44
|
font-weight: bolder;
|
|
33
|
-
font-family:
|
|
34
|
-
|
|
45
|
+
font-family: var(--font-handwriting);
|
|
46
|
+
font-size: 4em;
|
|
47
|
+
font-style: italic;
|
|
48
|
+
color: hsl(from var(--accent) h s l / 0.3);
|
|
35
49
|
line-height: 1;
|
|
36
50
|
user-select: none;
|
|
37
51
|
}
|
|
38
|
-
|
|
52
|
+
|
|
53
|
+
.archive-item {
|
|
39
54
|
display: flex;
|
|
40
55
|
text-align: left;
|
|
41
56
|
align-items: flex-start;
|
|
42
57
|
}
|
|
43
|
-
.
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
.timeline .archive-item a:hover {
|
|
48
|
-
color: var(--peach);
|
|
58
|
+
.archive-item > div {
|
|
59
|
+
display: flex;
|
|
60
|
+
align-items: baseline; /* 时间和标题的文字基线对齐 */
|
|
61
|
+
gap: 0.75rem;
|
|
49
62
|
}
|
|
50
63
|
.archive-item + .archive-item {
|
|
51
64
|
border: none;
|
|
52
65
|
margin-top: 0;
|
|
53
|
-
padding-top:
|
|
66
|
+
padding-top: 1em;
|
|
54
67
|
}
|
|
55
68
|
`;
|
|
56
|
-
function
|
|
69
|
+
function getSeason(month) {
|
|
70
|
+
if (month >= 2 && month <= 4) return "Spring";
|
|
71
|
+
if (month >= 5 && month <= 7) return "Summer";
|
|
72
|
+
if (month >= 8 && month <= 10) return "Autumn";
|
|
73
|
+
return "Winter";
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function renderArticleList(posts, year, month = null, sectionTitle = null, season = null) {
|
|
57
77
|
let time = null;
|
|
58
78
|
if (page.year) {
|
|
59
79
|
const mm = page.month ? String(page.month).padStart(2, "0") : "01";
|
|
60
80
|
time = parseISO(`${page.year}-${mm}-01T00:00:00.000Z`);
|
|
61
81
|
}
|
|
82
|
+
|
|
83
|
+
let title = `'${String(year).slice(-2)}`;
|
|
84
|
+
if (sectionTitle) {
|
|
85
|
+
title = sectionTitle;
|
|
86
|
+
} else if (month !== null && isValid(time)) {
|
|
87
|
+
title = format(time, "LLLL 'yy");
|
|
88
|
+
}
|
|
89
|
+
|
|
62
90
|
return (
|
|
63
91
|
<div class="card">
|
|
64
|
-
<div class="card-content">
|
|
92
|
+
<div class={["card-content", season ? season.toLowerCase() : null].filter(Boolean).join(" ")}>
|
|
65
93
|
<span class="year">
|
|
66
|
-
{
|
|
67
|
-
? year
|
|
68
|
-
: isValid(time)
|
|
69
|
-
? format(time, "LLLL yyyy")
|
|
70
|
-
: year}
|
|
94
|
+
{title}
|
|
71
95
|
</span>
|
|
72
96
|
<div class="timeline">
|
|
73
97
|
{posts.map((post) => {
|
|
@@ -88,37 +112,37 @@ module.exports = class extends Component {
|
|
|
88
112
|
|
|
89
113
|
let articleList;
|
|
90
114
|
if (!page.year) {
|
|
91
|
-
const
|
|
115
|
+
const groups = [];
|
|
92
116
|
page.posts.each((p) => {
|
|
93
|
-
|
|
117
|
+
const year = p.date.year();
|
|
118
|
+
const month = p.date.month(); // 0-11
|
|
119
|
+
const season = getSeason(month);
|
|
120
|
+
|
|
121
|
+
const lastGroup = groups[groups.length - 1];
|
|
122
|
+
if (lastGroup && lastGroup.year === year && lastGroup.season === season) {
|
|
123
|
+
lastGroup.posts.push(p);
|
|
124
|
+
} else {
|
|
125
|
+
groups.push({
|
|
126
|
+
year,
|
|
127
|
+
season,
|
|
128
|
+
posts: [p]
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
articleList = groups.map((group) => {
|
|
134
|
+
const title = `'${String(group.year).slice(-2)} ${group.season}`;
|
|
135
|
+
return renderArticleList(group.posts, group.year, null, title, group.season);
|
|
94
136
|
});
|
|
95
|
-
articleList = Object.keys(years)
|
|
96
|
-
.sort((a, b) => b - a)
|
|
97
|
-
.map((year) => {
|
|
98
|
-
const posts = page.posts.filter(
|
|
99
|
-
(p) => p.date.year() === parseInt(year, 10),
|
|
100
|
-
);
|
|
101
|
-
return renderArticleList(posts, year, null);
|
|
102
|
-
});
|
|
103
137
|
} else {
|
|
104
|
-
|
|
138
|
+
const season = page.month ? getSeason(page.month - 1) : null;
|
|
139
|
+
articleList = renderArticleList(page.posts, page.year, page.month, null, season);
|
|
105
140
|
}
|
|
106
141
|
|
|
107
142
|
return (
|
|
108
143
|
<Fragment>
|
|
109
144
|
<style dangerouslySetInnerHTML={{ __html: inlineCSS }}></style>
|
|
110
145
|
{articleList}
|
|
111
|
-
{page.total > 1 ? (
|
|
112
|
-
<Paginator
|
|
113
|
-
current={page.current}
|
|
114
|
-
total={page.total}
|
|
115
|
-
baseUrl={page.base}
|
|
116
|
-
path={config.pagination_dir}
|
|
117
|
-
urlFor={url_for}
|
|
118
|
-
prevTitle={__("common.prev")}
|
|
119
|
-
nextTitle={__("common.next")}
|
|
120
|
-
/>
|
|
121
|
-
) : null}
|
|
122
146
|
</Fragment>
|
|
123
147
|
);
|
|
124
148
|
}
|
|
@@ -2,28 +2,29 @@ const { Component } = require("inferno");
|
|
|
2
2
|
|
|
3
3
|
module.exports = class extends Component {
|
|
4
4
|
render() {
|
|
5
|
-
const { page, cover, helper } = this.props;
|
|
5
|
+
const { page, cover, helper, index } = this.props;
|
|
6
6
|
const { url_for } = helper;
|
|
7
7
|
|
|
8
8
|
const imageSrcset = `${cover}?w=800 800w, ${cover}?w=1500 1500w, ${cover}?w=2000 2000w, ${cover} 6144w`;
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
class="fill"
|
|
12
|
-
src={cover}
|
|
13
|
-
alt={page.title || cover}
|
|
14
|
-
onLoad={"this.classList.add('loaded')"}
|
|
15
|
-
srcset={imageSrcset}
|
|
16
|
-
referrerpolicy="no-referrer"
|
|
17
|
-
decoding="async"
|
|
18
|
-
loading="lazy"
|
|
19
|
-
/>
|
|
20
|
-
);
|
|
9
|
+
const lqip_src = `${cover}?q=80&blur=80`;
|
|
10
|
+
|
|
21
11
|
return (
|
|
22
|
-
<
|
|
23
|
-
<
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
12
|
+
<a href={url_for(page.link || page.path)} class="cover-image">
|
|
13
|
+
<img
|
|
14
|
+
class="cover-image-placeholder"
|
|
15
|
+
src={lqip_src}
|
|
16
|
+
alt="placeholder"
|
|
17
|
+
/>
|
|
18
|
+
<img
|
|
19
|
+
class="fill"
|
|
20
|
+
src={cover}
|
|
21
|
+
alt={page.title || cover}
|
|
22
|
+
srcset={imageSrcset}
|
|
23
|
+
referrerpolicy="no-referrer"
|
|
24
|
+
decoding="async"
|
|
25
|
+
loading={index ? "lazy" : "eager"}
|
|
26
|
+
/>
|
|
27
|
+
</a>
|
|
27
28
|
);
|
|
28
29
|
}
|
|
29
30
|
};
|
package/layout/common/head.jsx
CHANGED
|
@@ -113,7 +113,7 @@ module.exports = class extends Component {
|
|
|
113
113
|
latte: "light"
|
|
114
114
|
};
|
|
115
115
|
var stored = localStorage.getItem("themePreference");
|
|
116
|
-
var theme = stored ? stored : "system";
|
|
116
|
+
var theme = stored && stored in THEME_MAP ? stored : "system";
|
|
117
117
|
var html = document.documentElement;
|
|
118
118
|
var resolvedTheme = theme === "system"
|
|
119
119
|
? window.matchMedia("(prefers-color-scheme: dark)").matches ? "mocha" : "nord"
|
package/layout/common/navbar.jsx
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
const { Component, Fragment } = require("../../include/util/common");
|
|
2
|
-
const { cacheComponent } = require("../../util/cache");
|
|
1
|
+
const { Component, Fragment, cacheComponent } = require("../../include/util/common");
|
|
3
2
|
|
|
4
3
|
function isSameLink(a, b) {
|
|
5
4
|
function santize(url) {
|
|
@@ -29,25 +29,6 @@ module.exports = class extends Component {
|
|
|
29
29
|
></script>
|
|
30
30
|
<script async src="/js/shiki/shiki.js"></script>
|
|
31
31
|
<script async src="/js/instant-page.min.js" type="module"></script>
|
|
32
|
-
{config?.plugins?.live2d_Asoul && (
|
|
33
|
-
<>
|
|
34
|
-
<script defer src="/js/live2d_Asoul/TweenLite.min.js"></script>
|
|
35
|
-
<script
|
|
36
|
-
defer
|
|
37
|
-
src="/js/live2d_Asoul/live2dcubismcore.min.js"
|
|
38
|
-
></script>
|
|
39
|
-
<script defer src="/js/live2d_Asoul/pixi.min.js"></script>
|
|
40
|
-
<script defer src="/js/live2d_Asoul/cubism4.min.js"></script>
|
|
41
|
-
<script defer src="/js/live2d_Asoul/pio.js"></script>
|
|
42
|
-
<script defer src="/js/live2d_Asoul/pio_sdk4.js"></script>
|
|
43
|
-
<script defer src="/js/live2d_Asoul/load.js"></script>
|
|
44
|
-
<link
|
|
45
|
-
href="/js/live2d_Asoul/pio.css"
|
|
46
|
-
rel="stylesheet"
|
|
47
|
-
type="text/css"
|
|
48
|
-
/>
|
|
49
|
-
</>
|
|
50
|
-
)}
|
|
51
32
|
</Fragment>
|
|
52
33
|
);
|
|
53
34
|
}
|
package/layout/tags.jsx
CHANGED
|
@@ -20,6 +20,8 @@ class Tags extends Component {
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
.tag {
|
|
23
|
+
color: var(--text);
|
|
24
|
+
border-color: var(--surface0);
|
|
23
25
|
padding: 0 0.75em;
|
|
24
26
|
transition: all 0.3s ease;
|
|
25
27
|
border-style: solid;
|
|
@@ -34,6 +36,7 @@ class Tags extends Component {
|
|
|
34
36
|
.tag:first-child {
|
|
35
37
|
border-width: 1px 0 1px 1px;
|
|
36
38
|
border-radius: 5px 0 0 5px;
|
|
39
|
+
background: var(--base);
|
|
37
40
|
}
|
|
38
41
|
|
|
39
42
|
.tag:first-child::before {
|
|
@@ -43,6 +46,7 @@ class Tags extends Component {
|
|
|
43
46
|
}
|
|
44
47
|
|
|
45
48
|
.tag:last-child {
|
|
49
|
+
background: var(--mantle);
|
|
46
50
|
border-width: 1px 1px 1px 0;
|
|
47
51
|
border-radius: 0 5px 5px 0;
|
|
48
52
|
}
|
package/package.json
CHANGED
package/source/css/default.css
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
Avenir, system-ui, "Segoe UI", Roboto, Helvetica, Arial, "PingFang SC",
|
|
14
14
|
"Hiragino Sans GB", "Microsoft YaHei", "Noto Sans CJK SC",
|
|
15
15
|
"Source Han Sans CN", sans-serif;
|
|
16
|
+
--font-handwriting: "Bradley Hand", "Segoe Script", "Dancing Script", cursive;
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
/* #region Color */
|
|
@@ -204,10 +205,6 @@ a:hover {
|
|
|
204
205
|
color: var(--blue);
|
|
205
206
|
}
|
|
206
207
|
|
|
207
|
-
a.header-anchor {
|
|
208
|
-
font-family: var(--font-sans-serif);
|
|
209
|
-
}
|
|
210
|
-
|
|
211
208
|
a.header-anchor:hover::after {
|
|
212
209
|
margin-left: 0.2em;
|
|
213
210
|
color: var(--surface0);
|
|
@@ -289,27 +286,13 @@ blockquote::before {
|
|
|
289
286
|
color: var(--lavender);
|
|
290
287
|
}
|
|
291
288
|
|
|
292
|
-
.tag {
|
|
293
|
-
color: var(--text);
|
|
294
|
-
border-color: var(--surface0);
|
|
295
|
-
}
|
|
296
|
-
|
|
297
|
-
.tag:first-child {
|
|
298
|
-
background: var(--base);
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
.tag:last-child {
|
|
302
|
-
background: var(--mantle);
|
|
303
|
-
}
|
|
304
|
-
|
|
305
289
|
body {
|
|
306
290
|
background: var(--mantle);
|
|
307
291
|
color: var(--text);
|
|
308
292
|
}
|
|
309
293
|
|
|
310
294
|
.card {
|
|
311
|
-
|
|
312
|
-
border: 0.1px dashed var(--surface0);
|
|
295
|
+
border: .5px dashed var(--surface0);
|
|
313
296
|
}
|
|
314
297
|
|
|
315
298
|
input.task-list-item-checkbox:checked {
|
|
@@ -419,16 +402,11 @@ li,
|
|
|
419
402
|
ol,
|
|
420
403
|
p,
|
|
421
404
|
pre,
|
|
422
|
-
textarea
|
|
423
|
-
ul {
|
|
405
|
+
textarea {
|
|
424
406
|
margin: 0;
|
|
425
407
|
padding: 0;
|
|
426
408
|
}
|
|
427
409
|
|
|
428
|
-
ul {
|
|
429
|
-
list-style: none;
|
|
430
|
-
}
|
|
431
|
-
|
|
432
410
|
button,
|
|
433
411
|
input,
|
|
434
412
|
select,
|
|
@@ -454,12 +432,6 @@ body {
|
|
|
454
432
|
flex-direction: column;
|
|
455
433
|
}
|
|
456
434
|
|
|
457
|
-
img,
|
|
458
|
-
video {
|
|
459
|
-
height: auto;
|
|
460
|
-
max-width: 100%;
|
|
461
|
-
}
|
|
462
|
-
|
|
463
435
|
.breadcrumb,
|
|
464
436
|
.pagination-ellipsis,
|
|
465
437
|
.pagination-link,
|
|
@@ -531,23 +503,6 @@ video {
|
|
|
531
503
|
margin-top: 1.5rem;
|
|
532
504
|
}
|
|
533
505
|
|
|
534
|
-
.card-image {
|
|
535
|
-
user-select: none;
|
|
536
|
-
display: block;
|
|
537
|
-
position: relative;
|
|
538
|
-
border-radius: 24px;
|
|
539
|
-
overflow: hidden;
|
|
540
|
-
}
|
|
541
|
-
|
|
542
|
-
.card-image .fill {
|
|
543
|
-
position: absolute;
|
|
544
|
-
top: 0;
|
|
545
|
-
left: 0;
|
|
546
|
-
width: 100%;
|
|
547
|
-
height: 100%;
|
|
548
|
-
object-fit: cover;
|
|
549
|
-
}
|
|
550
|
-
|
|
551
506
|
.card-content {
|
|
552
507
|
padding: 1.25rem;
|
|
553
508
|
border-radius: 0;
|
|
@@ -993,7 +948,6 @@ video {
|
|
|
993
948
|
|
|
994
949
|
p,
|
|
995
950
|
blockquote,
|
|
996
|
-
ul,
|
|
997
951
|
ol,
|
|
998
952
|
dl,
|
|
999
953
|
pre,
|
|
@@ -1016,7 +970,8 @@ video {
|
|
|
1016
970
|
img,
|
|
1017
971
|
video {
|
|
1018
972
|
display: block;
|
|
1019
|
-
margin:
|
|
973
|
+
margin: 1em auto;
|
|
974
|
+
max-width: 100%;
|
|
1020
975
|
|
|
1021
976
|
&:hover {
|
|
1022
977
|
cursor: pointer;
|
|
@@ -1033,8 +988,7 @@ video {
|
|
|
1033
988
|
ul {
|
|
1034
989
|
list-style: disc outside;
|
|
1035
990
|
padding-left: 2em;
|
|
1036
|
-
margin
|
|
1037
|
-
margin-bottom: 0;
|
|
991
|
+
margin: 1em 0;
|
|
1038
992
|
|
|
1039
993
|
ul {
|
|
1040
994
|
margin-top: 0.5em;
|
|
@@ -1279,11 +1233,6 @@ a strong {
|
|
|
1279
1233
|
color: currentColor;
|
|
1280
1234
|
}
|
|
1281
1235
|
|
|
1282
|
-
img {
|
|
1283
|
-
height: auto;
|
|
1284
|
-
max-width: 100%;
|
|
1285
|
-
}
|
|
1286
|
-
|
|
1287
1236
|
input[type="checkbox"],
|
|
1288
1237
|
input[type="radio"] {
|
|
1289
1238
|
vertical-align: baseline;
|
|
@@ -1295,35 +1244,6 @@ small {
|
|
|
1295
1244
|
|
|
1296
1245
|
/* #endregion Content */
|
|
1297
1246
|
|
|
1298
|
-
.image {
|
|
1299
|
-
display: block;
|
|
1300
|
-
position: relative;
|
|
1301
|
-
}
|
|
1302
|
-
|
|
1303
|
-
.image img {
|
|
1304
|
-
display: block;
|
|
1305
|
-
height: auto;
|
|
1306
|
-
width: 100%;
|
|
1307
|
-
}
|
|
1308
|
-
|
|
1309
|
-
.image.is-7by3 {
|
|
1310
|
-
padding-top: 42.8%;
|
|
1311
|
-
}
|
|
1312
|
-
|
|
1313
|
-
.image.is-7by3 img {
|
|
1314
|
-
bottom: 0;
|
|
1315
|
-
left: 0;
|
|
1316
|
-
position: absolute;
|
|
1317
|
-
right: 0;
|
|
1318
|
-
top: 0;
|
|
1319
|
-
}
|
|
1320
|
-
|
|
1321
|
-
.image .fill {
|
|
1322
|
-
object-fit: cover;
|
|
1323
|
-
width: 100%;
|
|
1324
|
-
height: 100%;
|
|
1325
|
-
}
|
|
1326
|
-
|
|
1327
1247
|
:target {
|
|
1328
1248
|
scroll-margin-top: 20vh;
|
|
1329
1249
|
}
|
|
@@ -1362,6 +1282,7 @@ section {
|
|
|
1362
1282
|
.article-header-meta {
|
|
1363
1283
|
font-family: var(--font-monospace);
|
|
1364
1284
|
overflow: auto;
|
|
1285
|
+
padding-bottom: 0.5em;
|
|
1365
1286
|
margin-bottom: 1rem;
|
|
1366
1287
|
border-bottom: 1px dashed var(--surface0);
|
|
1367
1288
|
color: var(--subtext0);
|
|
@@ -1496,7 +1417,7 @@ input.searchbox-input {
|
|
|
1496
1417
|
z-index: 101;
|
|
1497
1418
|
display: flex;
|
|
1498
1419
|
overflow: hidden;
|
|
1499
|
-
border-radius:
|
|
1420
|
+
border-radius: 20px;
|
|
1500
1421
|
width: 640px;
|
|
1501
1422
|
top: 100px;
|
|
1502
1423
|
}
|
|
@@ -1551,4 +1472,36 @@ input.searchbox-input {
|
|
|
1551
1472
|
margin-top: 0.25em;
|
|
1552
1473
|
}
|
|
1553
1474
|
|
|
1554
|
-
/* #endregion Search */
|
|
1475
|
+
/* #endregion Search */
|
|
1476
|
+
|
|
1477
|
+
/* #region Article Cover */
|
|
1478
|
+
|
|
1479
|
+
.cover-image {
|
|
1480
|
+
position: relative;
|
|
1481
|
+
display: block;
|
|
1482
|
+
overflow: hidden;
|
|
1483
|
+
border-radius: 24px 24px 0 0;
|
|
1484
|
+
height: 380px;
|
|
1485
|
+
|
|
1486
|
+
.cover-image-placeholder {
|
|
1487
|
+
position: absolute;
|
|
1488
|
+
top: 0;
|
|
1489
|
+
left: 0;
|
|
1490
|
+
z-index: 1;
|
|
1491
|
+
filter: blur(10px);
|
|
1492
|
+
}
|
|
1493
|
+
|
|
1494
|
+
.fill {
|
|
1495
|
+
position: relative;
|
|
1496
|
+
z-index: 2;
|
|
1497
|
+
}
|
|
1498
|
+
}
|
|
1499
|
+
|
|
1500
|
+
.cover-image img {
|
|
1501
|
+
display: block;
|
|
1502
|
+
width: 100%;
|
|
1503
|
+
height: 100%;
|
|
1504
|
+
object-fit: cover;
|
|
1505
|
+
}
|
|
1506
|
+
|
|
1507
|
+
/* #endregion Article Cover */
|
|
Binary file
|
|
Binary file
|