This commit is contained in:
2026-03-27 09:18:54 +00:00
commit b3bc856e9c
314 changed files with 94516 additions and 0 deletions

160
assets/css/feed.css Normal file
View File

@@ -0,0 +1,160 @@
@namespace atom url("http://www.w3.org/2005/Atom");
@namespace content url("http://purl.org/rss/1.0/modules/content/");
@namespace dc url("http://purl.org/dc/elements/1.1/");
:root {
--bg-color: #f4f5f7;
--card-bg: #ffffff;
--text-main: #222;
--text-muted: #555;
--text-light: #888;
--max-width: 780px;
}
@media (prefers-color-scheme: dark) {
:root {
--bg-color: #1a1a1c;
--card-bg: #2c2c2e;
--text-main: #e5e5e7;
--text-muted: #a1a1a6;
--text-light: #707074;
}
}
body,
rss,
atom|feed {
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Noto Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif;
background: var(--bg-color);
color: var(--text-main);
margin: 0px auto;
padding: 2rem 1rem;
font-size: 16px;
line-height: 1.6;
max-width: var(--max-width);
}
channel>title,
atom|feed>atom|title {
display: block;
font-size: 2rem;
font-weight: 800;
text-align: center;
margin: 0px 0px 0.5rem;
letter-spacing: -0.02em;
}
item,
atom|entry {
display: block;
background: var(--card-bg);
padding: 1.5rem;
margin-bottom: 1.25rem;
border-radius: 16px;
box-shadow: rgba(0, 0, 0, 0.05) 0px 4px 20px;
transition: transform 0.2s;
}
item:hover,
atom|entry:hover {
transform: translateY(-2px);
}
item>title,
atom|entry>atom|title {
display: block;
font-size: 1.25rem;
font-weight: 600;
margin-bottom: 0.5rem;
color: var(--text-main);
}
item>description,
atom|entry>atom|summary {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 4;
overflow: hidden;
color: var(--text-muted);
font-size: 0.95rem;
line-height: 1.6;
}
item>pubDate,
atom|entry>atom|updated {
display: block;
color: var(--text-light);
font-size: 0.85rem;
margin-top: 0.75rem;
}
link,
guid,
author,
category,
comments,
source,
enclosure,
content|encoded,
dc|creator,
atom|id,
atom|link,
atom|updated,
atom|published,
atom|author,
atom|category,
atom|rights,
atom|content,
language,
generator {
display: none;
}
channel>description,
atom|feed>atom|subtitle {
display: block;
text-align: center;
color: var(--text-muted);
font-size: 1rem;
margin-bottom: 2rem;
}
channel>description::after,
atom|feed>atom|subtitle::after {
content: "这是一个订阅源Feed。复制当前URL到任何支持 Atom/RSS 的阅读器,即可订阅本博客的最新文章。\a 以下展示了此订阅源包含的最新文章:";
display: block;
white-space: pre-wrap;
font-size: 0.875rem;
color: var(--text-light);
margin-top: 1rem;
padding: 1rem;
border-top-width: 1px;
border-top-style: solid;
border-top-color: rgba(128, 128, 128, 0.2);
}
rss,
channel,
atom|feed {
display: flex;
flex-direction: column;
}
channel>lastBuildDate,
atom|feed>atom|updated:not(atom|entry atom|updated) {
order: 999;
text-align: center;
margin-top: 3rem;
padding-top: 1.5rem;
border-top-width: 1px;
border-top-style: solid;
border-top-color: rgba(128, 128, 128, 0.2);
color: var(--text-light);
font-size: 0.85rem;
display: block !important;
}
channel>lastBuildDate::before,
atom|feed>atom|updated:not(atom|entry atom|updated)::before {
content: "更新于 ";
}

1278
assets/css/gitalk.css Normal file

File diff suppressed because it is too large Load Diff

616
assets/css/style.css Normal file
View File

@@ -0,0 +1,616 @@
@font-face {
font-family: 'Noto Sans';
font-weight: 400;
font-style: normal;
src: url("../fonts/Noto-Sans-regular/Noto-Sans-regular.eot");
src: url("../fonts/Noto-Sans-regular/Noto-Sans-regular.eot?#iefix") format("embedded-opentype"), local("Noto Sans"), local("Noto-Sans-regular"), url("../fonts/Noto-Sans-regular/Noto-Sans-regular.woff2") format("woff2"), url("../fonts/Noto-Sans-regular/Noto-Sans-regular.woff") format("woff"), url("../fonts/Noto-Sans-regular/Noto-Sans-regular.ttf") format("truetype"), url("../fonts/Noto-Sans-regular/Noto-Sans-regular.svg#NotoSans") format("svg"); }
@font-face {
font-family: 'Noto Sans';
font-weight: 700;
font-style: normal;
src: url("../fonts/Noto-Sans-700/Noto-Sans-700.eot");
src: url("../fonts/Noto-Sans-700/Noto-Sans-700.eot?#iefix") format("embedded-opentype"), local("Noto Sans Bold"), local("Noto-Sans-700"), url("../fonts/Noto-Sans-700/Noto-Sans-700.woff2") format("woff2"), url("../fonts/Noto-Sans-700/Noto-Sans-700.woff") format("woff"), url("../fonts/Noto-Sans-700/Noto-Sans-700.ttf") format("truetype"), url("../fonts/Noto-Sans-700/Noto-Sans-700.svg#NotoSans") format("svg"); }
@font-face {
font-family: 'Noto Sans';
font-weight: 400;
font-style: italic;
src: url("../fonts/Noto-Sans-italic/Noto-Sans-italic.eot");
src: url("../fonts/Noto-Sans-italic/Noto-Sans-italic.eot?#iefix") format("embedded-opentype"), local("Noto Sans Italic"), local("Noto-Sans-italic"), url("../fonts/Noto-Sans-italic/Noto-Sans-italic.woff2") format("woff2"), url("../fonts/Noto-Sans-italic/Noto-Sans-italic.woff") format("woff"), url("../fonts/Noto-Sans-italic/Noto-Sans-italic.ttf") format("truetype"), url("../fonts/Noto-Sans-italic/Noto-Sans-italic.svg#NotoSans") format("svg"); }
@font-face {
font-family: 'Noto Sans';
font-weight: 700;
font-style: italic;
src: url("../fonts/Noto-Sans-700italic/Noto-Sans-700italic.eot");
src: url("../fonts/Noto-Sans-700italic/Noto-Sans-700italic.eot?#iefix") format("embedded-opentype"), local("Noto Sans Bold Italic"), local("Noto-Sans-700italic"), url("../fonts/Noto-Sans-700italic/Noto-Sans-700italic.woff2") format("woff2"), url("../fonts/Noto-Sans-700italic/Noto-Sans-700italic.woff") format("woff"), url("../fonts/Noto-Sans-700italic/Noto-Sans-700italic.ttf") format("truetype"), url("../fonts/Noto-Sans-700italic/Noto-Sans-700italic.svg#NotoSans") format("svg"); }
.highlight table td {
padding: 5px; }
.highlight table pre {
margin: 0; }
.highlight .cm {
color: #999988;
font-style: italic; }
.highlight .cp {
color: #999999;
font-weight: bold; }
.highlight .c1 {
color: #999988;
font-style: italic; }
.highlight .cs {
color: #999999;
font-weight: bold;
font-style: italic; }
.highlight .c, .highlight .cd {
color: #999988;
font-style: italic; }
.highlight .err {
color: #a61717;
background-color: #e3d2d2; }
.highlight .gd {
color: #000000;
background-color: #ffdddd; }
.highlight .ge {
color: #000000;
font-style: italic; }
.highlight .gr {
color: #aa0000; }
.highlight .gh {
color: #999999; }
.highlight .gi {
color: #000000;
background-color: #ddffdd; }
.highlight .go {
color: #888888; }
.highlight .gp {
color: #555555; }
.highlight .gs {
font-weight: bold; }
.highlight .gu {
color: #aaaaaa; }
.highlight .gt {
color: #aa0000; }
.highlight .kc {
color: #000000;
font-weight: bold; }
.highlight .kd {
color: #000000;
font-weight: bold; }
.highlight .kn {
color: #000000;
font-weight: bold; }
.highlight .kp {
color: #000000;
font-weight: bold; }
.highlight .kr {
color: #000000;
font-weight: bold; }
.highlight .kt {
color: #445588;
font-weight: bold; }
.highlight .k, .highlight .kv {
color: #000000;
font-weight: bold; }
.highlight .mf {
color: #009999; }
.highlight .mh {
color: #009999; }
.highlight .il {
color: #009999; }
.highlight .mi {
color: #009999; }
.highlight .mo {
color: #009999; }
.highlight .m, .highlight .mb, .highlight .mx {
color: #009999; }
.highlight .sb {
color: #d14; }
.highlight .sc {
color: #d14; }
.highlight .sd {
color: #d14; }
.highlight .s2 {
color: #d14; }
.highlight .se {
color: #d14; }
.highlight .sh {
color: #d14; }
.highlight .si {
color: #d14; }
.highlight .sx {
color: #d14; }
.highlight .sr {
color: #009926; }
.highlight .s1 {
color: #d14; }
.highlight .ss {
color: #990073; }
.highlight .s {
color: #d14; }
.highlight .na {
color: #008080; }
.highlight .bp {
color: #999999; }
.highlight .nb {
color: #0086B3; }
.highlight .nc {
color: #445588;
font-weight: bold; }
.highlight .no {
color: #008080; }
.highlight .nd {
color: #3c5d5d;
font-weight: bold; }
.highlight .ni {
color: #800080; }
.highlight .ne {
color: #990000;
font-weight: bold; }
.highlight .nf {
color: #990000;
font-weight: bold; }
.highlight .nl {
color: #990000;
font-weight: bold; }
.highlight .nn {
color: #555555; }
.highlight .nt {
color: #000080; }
.highlight .vc {
color: #008080; }
.highlight .vg {
color: #008080; }
.highlight .vi {
color: #008080; }
.highlight .nv {
color: #008080; }
.highlight .ow {
color: #000000;
font-weight: bold; }
.highlight .o {
color: #000000;
font-weight: bold; }
.highlight .w {
color: #bbbbbb; }
.highlight {
background-color: #f8f8f8; }
body {
background-color: #fff;
padding: 50px;
font: 14px/1.5 "Noto Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
color: #727272;
font-weight: 400; }
h1, h2, h3, h4, h5, h6 {
color: #222;
margin: 0 0 20px; }
p, ul, ol, table, pre, dl {
margin: 0 0 20px; }
h1, h2, h3 {
line-height: 1.1; }
h1 {
font-size: 28px; }
h2 {
color: #393939; }
h3, h4, h5, h6 {
color: #494949; }
a {
color: #267CB9;
text-decoration: none; }
a:hover, a:focus {
color: #069;
font-weight: bold; }
a small {
font-size: 11px;
color: #777;
margin-top: -0.3em;
display: block; }
a:hover small {
color: #777; }
.wrapper {
width: 860px;
margin: 0 auto; }
blockquote {
border-left: 1px solid #e5e5e5;
margin: 0;
padding: 0 0 0 20px;
font-style: italic; }
code, pre {
font-family: Monaco, Bitstream Vera Sans Mono, Lucida Console, Terminal, Consolas, Liberation Mono, DejaVu Sans Mono, Courier New, monospace;
color: #333; }
pre {
padding: 8px 15px;
background: #f8f8f8;
border-radius: 5px;
border: 1px solid #e5e5e5;
overflow-x: auto; }
table {
width: 100%;
border-collapse: collapse; }
th, td {
text-align: left;
padding: 5px 10px;
border-bottom: 1px solid #e5e5e5; }
dt {
color: #444;
font-weight: 700; }
th {
color: #444; }
img {
max-width: 100%; }
kbd {
background-color: #fafbfc;
border: 1px solid #c6cbd1;
border-bottom-color: #959da5;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #959da5;
color: #444d56;
display: inline-block;
font-size: 11px;
line-height: 10px;
padding: 3px 5px;
vertical-align: middle; }
header {
width: 270px;
float: left;
position: fixed;
-webkit-font-smoothing: subpixel-antialiased; }
ul.downloads {
list-style: none;
height: 40px;
padding: 0;
background: #f4f4f4;
border-radius: 5px;
border: 1px solid #e0e0e0;
width: 270px; }
.downloads li {
width: 89px;
float: left;
border-right: 1px solid #e0e0e0;
height: 40px; }
.downloads li:first-child a {
border-radius: 5px 0 0 5px; }
.downloads li:last-child a {
border-radius: 0 5px 5px 0; }
.downloads a {
line-height: 1;
font-size: 11px;
color: #676767;
display: block;
text-align: center;
padding-top: 6px;
height: 34px; }
.downloads a:hover, .downloads a:focus {
color: #675C5C;
font-weight: bold; }
.downloads ul a:active {
background-color: #f0f0f0; }
strong {
color: #222;
font-weight: 700; }
.downloads li + li + li {
border-right: none;
width: 89px; }
.downloads a strong {
font-size: 14px;
display: block;
color: #222; }
section {
width: 500px;
float: right;
padding-bottom: 50px; }
small {
font-size: 11px; }
hr {
border: 0;
background: #e5e5e5;
height: 1px;
margin: 0 0 20px; }
footer {
width: 270px;
float: left;
position: fixed;
bottom: 50px;
-webkit-font-smoothing: subpixel-antialiased; }
@media print, screen and (max-width: 960px) {
div.wrapper {
width: auto;
margin: 0; }
header, section, footer {
float: none;
position: static;
width: auto; }
header {
padding-right: 320px; }
section {
border: 1px solid #e5e5e5;
border-width: 1px 0;
padding: 20px 0;
margin: 0 0 20px; }
header a small {
display: inline; }
header ul {
position: absolute;
right: 50px;
top: 52px; } }
@media print, screen and (max-width: 720px) {
body {
word-wrap: break-word; }
header {
padding: 0; }
header ul, header p.view {
position: static; }
pre, code {
word-wrap: normal; } }
@media print, screen and (max-width: 480px) {
body {
padding: 15px; }
.downloads {
width: 99%; }
.downloads li, .downloads li + li + li {
width: 33%; } }
@media print {
body {
padding: 0.4in;
font-size: 12pt;
color: #444; } }
a:hover {
font-weight: inherit;
text-decoration: underline; }
.backToTop {
display: none;
width: 18px;
line-height: 1.2;
padding: 5px 0;
background-color: #000;
color: #fff;
font-size: 12px;
text-align: center;
position: fixed;
_position: absolute;
right: 10px;
bottom: 100px;
_bottom: "auto";
cursor: pointer;
opacity: .6;
filter: Alpha(opacity=60); }
.post-content {
font-size: 15px;
line-height: 1.6; }
.post-content h1 {
text-indent: -8px;
margin: 20px 0 10px;
border-bottom: 1px solid #e5e5e5; }
.post-content h2 {
text-indent: -6px;
margin: 20px 0 10px;
border-bottom: 1px solid #e5e5e5; }
.post-content h3 {
margin: 20px 0 10px;
text-indent: -5px; }
.post-content h4 {
margin: 20px 0 10px;
text-indent: -4px; }
.post-content h5 {
margin: 20px 0 10px;
text-indent: -3px; }
.post-content h6 {
margin: 20px 0 10px;
text-indent: -2px; }
.post-content p {
text-indent: 2em;
margin-bottom: 5px; }
h1 .octicon,
h2 .octicon,
h3 .octicon,
h4 .octicon,
h5 .octicon,
h6 .octicon {
visibility: hidden; }
h1:hover .octicon,
h2:hover .octicon,
h3:hover .octicon,
h4:hover .octicon,
h5:hover .octicon,
h6:hover .octicon {
visibility: visible; }
.octicon {
fill: currentColor;
padding: 0;
margin-left: -16px;
vertical-align: middle; }
div.highlight {
position: relative; }
div.highlight:hover button {
opacity: 1; }
div.highlight button {
opacity: 0;
position: absolute;
top: 0.5em;
right: 1em;
height: 2em;
transition: all 0.2s ease-out; }
div.highlight button:active,
div.highlight button:focus,
div.highlight button:hover {
opacity: 1; }
.footnotes {
font-size: 14px;
line-height: 1.4; }
.footnotes p {
margin: 0;
text-indent: 0; }
.wrapper {
width: 90%; }
header {
width: 25%; }
footer {
width: 25%; }
section {
width: 65%; }
@media print, screen and (max-width: 960px) {
.wrapper {
width: auto; }
header {
width: auto; }
footer {
width: auto; }
section {
width: auto; } }
code.highlighter-rouge {
padding: .1em .2em;
margin: 0;
font-size: 90%;
white-space: break-spaces;
background-color: lightgray;
border-radius: 6px; }
.content-tooltip {
position: absolute;
background: #fff;
border: 1px solid #ddd;
padding: 8px 12px;
border-radius: 4px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
max-width: 300px;
z-index: 1000;
font-size: 14px;
line-height: 1.4; }
td.h-entry {
cursor: pointer; }
td.h-entry:hover {
background: #f9f9f9; }

35
assets/css/xslt.css Normal file
View File

@@ -0,0 +1,35 @@
@namespace xsl "http://www.w3.org/1999/XSL/Transform";
xsl|template {
display: none !important;
}
:root {
display: flex !important;
flex-direction: column;
align-items: center;
justify-content: center;
min-height: 100vh;
background-color: #f8f9fa;
margin: 0;
padding: 2em 1em;
font-family: system-ui, -apple-system, sans-serif;
box-sizing: border-box;
margin-left: max(1em, env(safe-area-inset-left));
margin-right: max(1em, env(safe-area-inset-right));
}
:root::before {
content: "💀 这个 XSLT 模板已被谷歌 (Chrome) 杀死";
display: block;
color: #d93025;
font-size: 24px;
font-weight: 800;
padding: 20px;
border: 2px solid #d93025;
border-radius: 8px;
background: #fff1f0;
margin-bottom: 10px;
box-shadow: 0 4px 12px rgba(217, 48, 37, 0.1);
text-align: center;
}