1
0
Fork 0
This commit is contained in:
nanxiaobei 2022-07-18 23:36:39 +08:00
parent 1880922d99
commit 39f6f4e9b2
21 changed files with 1934 additions and 727 deletions

View File

@ -1,5 +1,5 @@
<div align="center">
<h1>Paper <sup><sup><sub>5.1</sub></sup></sup></h1>
<h1>Paper <sup><sup><sub>6</sub></sup></sup></h1>
Demo → [hugo-paper.vercel.app](https://hugo-paper.vercel.app/)
@ -49,10 +49,15 @@ Available options to `config.toml`:
disqusShortname = 'YOUR_DISQUS_SHORTNAME' # add disqus comments
[params]
disableHLJS = true # don't use highlight.js
twitter = 'YOUR_TWITTER_ID' # twitter.com/YOUR_TWITTER_ID
github = 'YOUR_GITHUB_ID' # github.com/YOUR_GITHUB_ID
instagram = 'YOUR_INSTAGRAM_ID' # instagram.com/YOUR_INSTAGRAM_ID
disableHLJS = true # disable loading highlight.js
twitter = 'YOUR_TWITTER_ID' # twitter.com/YOUR_TWITTER_ID
github = 'YOUR_GITHUB_ID' # github.com/YOUR_GITHUB_ID
instagram = 'YOUR_INSTAGRAM_ID' # instagram.com/YOUR_INSTAGRAM_ID
# Display profile on home page
avatar = 'IMAGE_URL' # Gravatar email or image url(e.g. "https://deno.land/logo.svg")
name = 'YOUR_NAME'
bio = 'YOUR_BIO'
```
## License

View File

@ -3,50 +3,12 @@
* A simple, clean, flexible Hugo theme
* https://github.com/nanxiaobei/hugo-paper
* Designed by 南小北 (https://lee.so/)
* Updated in 2021.8.24
* Updated in 2022.7.20
*/
/* Theme
-------------------------------------------------- */
:root {
--gap: 3.5rem;
--y-gap: 8rem;
--wide: 140rem;
--narrow: 80rem;
--side: calc((var(--wide) - var(--narrow)) / 2);
--header: 8rem;
--footer: calc(8rem + var(--safe-bottom));
--light: 255, 255, 255;
--dark: 22, 22, 22;
--hljs-bg: #111;
--safe-bottom: 0;
}
@supports (bottom: constant(safe-area-inset-bottom)) {
:root {
--safe-bottom: constant(safe-area-inset-bottom);
}
}
@supports (bottom: env(safe-area-inset-bottom)) {
:root {
--safe-bottom: env(safe-area-inset-bottom);
}
}
.dark {
--light: 22, 22, 22;
--dark: 255, 255, 255;
--hljs-bg: #282828;
}
*,
*::before,
*::after {
box-sizing: border-box;
}
@tailwind base;
@tailwind components;
@tailwind utilities;
html,
body {
@ -55,37 +17,11 @@ body {
html {
-webkit-tap-highlight-color: transparent;
font-size: 8px;
background: #fffefc;
}
body {
--white: rgba(var(--light), 1);
--black: rgba(var(--dark), 1);
--pro: rgba(var(--dark), 1);
--lit: rgba(var(--dark), 0.64);
--air: rgba(var(--dark), 0.48);
--fog: rgba(var(--dark), 0.12);
display: flex;
flex-direction: column;
padding-right: var(--gap);
padding-left: var(--gap);
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell,
'Open Sans', 'Helvetica Neue', sans-serif;
font-size: 2rem;
line-height: 1.8;
color: var(--pro);
word-break: break-word;
background: var(--white);
transition: background 0.4s ease-out;
}
body > * {
flex-shrink: 0;
width: 100%;
margin-inline: auto;
html.dark {
background: #000;
}
.not-ready,
@ -93,582 +29,48 @@ body > * {
transition: none !important;
}
@media (max-width: 1199px) {
html {
font-size: 7px;
}
.btn {
@apply rounded-full bg-black py-4 px-6 text-sm text-white no-underline shadow-lg duration-100 active:scale-95 dark:bg-white dark:text-black;
}
/* Reset
-------------------------------------------------- */
h1,
h2,
h3,
h4,
h5,
h6 {
margin: 0;
font-size: inherit;
font-weight: 700;
line-height: 1.2;
}
p {
margin: 0;
}
strong,
b {
font-weight: 500;
}
ul,
ol {
padding: 0;
margin: 0;
}
a {
color: inherit;
text-decoration: none;
}
table {
width: 100%;
border-spacing: 0;
border-collapse: collapse;
}
button,
input,
textarea {
padding: 0;
font: inherit;
background: transparent;
border: 0;
outline: 0;
-webkit-appearance: none;
}
button,
input[type='button'],
input[type='submit'] {
cursor: pointer;
}
input,
textarea {
padding: 0;
border: 0;
}
input:-webkit-autofill,
textarea:-webkit-autofill {
box-shadow: 0 0 0 6rem var(--white) inset;
}
img {
display: block;
max-width: 100%;
}
/* Header
-------------------------------------------------- */
.header {
display: flex;
max-width: var(--wide);
height: var(--header);
}
.header a {
display: flex;
flex-shrink: 0;
align-items: center;
}
.logo {
display: flex;
min-width: var(--side);
padding-right: var(--gap);
}
.site-name {
max-width: calc(100% - 2rem - 3rem);
padding-bottom: 0.3rem;
overflow: auto;
font-size: 3.4rem;
font-weight: 700;
white-space: nowrap;
}
.btn-dark {
width: 3rem;
margin-left: 2rem;
cursor: pointer;
background: url(./theme.png) left / auto 3rem no-repeat;
transition: background-position 0.4s steps(5);
}
.dark .btn-dark {
background-position: right;
}
.menu {
display: flex;
overflow: auto;
}
.menu a + a {
margin-left: var(--gap);
}
.menu a.active {
opacity: 0.44;
}
.social {
display: flex;
margin-left: auto;
}
.social a {
width: 3rem;
margin-left: 3rem;
background: var(--url) center center no-repeat;
}
.dark .social a {
filter: invert(1);
}
@media (max-width: 1199px) {
.logo {
min-width: auto;
}
[data-menu='true'] {
--header: 16rem;
}
[data-menu='true'] .header {
position: relative;
}
[data-menu='true'] .header > * {
height: calc(var(--header) / 2);
}
[data-menu='true'] .menu {
position: absolute;
inset: auto 0 0;
border-bottom: 1px solid var(--fog);
}
}
/* Main
-------------------------------------------------- */
.main {
max-width: var(--narrow);
min-height: calc(100% - var(--header) - var(--footer));
padding-top: var(--y-gap);
padding-bottom: var(--y-gap);
}
.main-title {
margin-bottom: calc(var(--y-gap) + 1rem);
font-size: 3rem;
font-weight: 400;
color: var(--lit);
}
.main-nav {
display: flex;
margin-top: 5rem;
}
.main-nav a {
font-size: 1.8rem;
line-height: 5.5rem;
color: var(--white);
background: var(--black);
border-radius: 0.5rem;
padding-inline: 3rem;
}
.main-nav .next {
margin-left: auto;
}
/* Post entry
-------------------------------------------------- */
.post-entry {
position: relative;
padding-block: 2rem;
transition: transform 0.1s;
}
.post-entry:first-of-type {
margin-top: -2rem;
}
.post-entry:active {
transform: scale(0.99);
}
.post-entry h2 {
margin-bottom: 0.2rem;
font-size: 3rem;
}
.post-entry time {
flex-shrink: 0;
font-size: 1.7rem;
color: var(--air);
}
.post-entry a {
position: absolute;
inset: 0;
}
/* Post single
-------------------------------------------------- */
.post-title {
margin-bottom: calc(var(--y-gap) + 1rem);
}
.post-title p {
display: flex;
margin-bottom: 1.5rem;
font-size: 1.6rem;
color: var(--air);
transform: translateY(0.4rem);
}
.post-title p span::before {
content: '·';
margin-inline: 0.8rem;
}
.post-title h1 {
font-size: 5rem;
transform: translateX(-0.3rem);
}
.post-tags {
margin-top: 7rem;
}
.post-tags a {
display: inline-block;
font-weight: 500;
line-height: 5rem;
color: var(--lit);
background: rgba(var(--dark), 0.05);
border-radius: 0.5rem;
padding-inline: 2rem;
.link {
@apply duration-200 hover:text-black dark:hover:text-white;
}
.post-tags a + a {
margin-left: 0.5rem;
.btn-menu::before,
.btn-menu::after {
@apply block h-[2px] w-5 bg-black duration-200 content-[''] dark:invert;
}
.post-nav {
display: flex;
justify-content: space-between;
margin-top: var(--y-gap);
background: rgba(var(--dark), 0.05);
border-radius: 0.5rem;
.nav-wrapper {
background: #fffefc;
}
.post-nav a {
display: flex;
align-items: center;
width: 50%;
padding: var(--gap);
font-size: 2.4rem;
font-weight: 700;
line-height: 1.2;
.open {
@apply overflow-hidden;
}
.post-nav a span + span {
margin-left: 1rem;
.open .btn-menu::before {
@apply w-6 translate-y-[5.5px] rotate-45;
}
.post-nav .prev {
padding-right: 1rem;
.open .btn-menu::after {
@apply w-6 -translate-y-[5.5px] -rotate-45;
}
.post-nav .next {
justify-content: flex-end;
padding-left: 1rem;
margin-left: auto;
.open .nav-wrapper {
@apply top-0;
}
.post-comments {
margin-top: var(--y-gap);
}
@media (max-width: 1199px) {
.post-title {
display: block;
}
.post-title aside {
flex-direction: row;
width: auto;
padding-right: 0;
margin-bottom: 0.5rem;
margin-left: 0;
transform: none;
}
.post-title aside span::before {
content: '·';
margin-inline: 0.5rem;
}
}
/* Post content
-------------------------------------------------- */
.post-content {
font-size: 2.2rem;
}
.post-content h1,
.post-content h2,
.post-content h3,
.post-content h4,
.post-content h5,
.post-content h6 {
margin-block: 2rem;
}
.post-content h1 {
margin-top: var(--y-gap);
font-size: 4.5rem;
}
.post-content h2 {
margin-top: 6rem;
font-size: 3.5rem;
}
.post-content h3 {
font-size: 2.5rem;
}
.post-content h4 {
font-size: 2.2rem;
}
.post-content h5 {
font-size: 1.8rem;
}
.post-content h6 {
font-size: 1.5rem;
}
.post-content img {
margin-inline: auto;
}
.post-content a {
padding-bottom: 0.2rem;
font-weight: 500;
border-bottom: 2px solid var(--pro);
}
.post-content a code {
margin-inline: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 0;
}
.post-content del {
text-decoration: none;
background: linear-gradient(to right, var(--pro) 100%, transparent 0) 0 50% / 1px 1px repeat-x;
}
.post-content p,
.post-content ul,
.post-content ol,
.post-content dl,
.post-content details {
margin-bottom: 3rem;
}
.post-content ul,
.post-content ol {
padding-left: 2.5rem;
}
.post-content li {
margin-top: 0.6rem;
}
.post-content li p {
margin-bottom: 0;
}
.post-content dl {
display: flex;
flex-wrap: wrap;
margin: 0;
}
.post-content dt {
width: 25%;
font-weight: 500;
}
.post-content dd {
width: 75%;
padding-left: 1.3rem;
margin-left: 0;
}
.post-content dt ~ dt,
.post-content dd ~ dd {
margin-top: 1.3rem;
}
.post-content table {
margin-bottom: 4rem;
}
.post-content table th,
.post-content table:not(.highlighttable) td {
min-width: 10rem;
padding: 1.5rem 1rem;
line-height: 1.5;
border-bottom: 1px solid var(--fog);
}
.post-content table th {
font-size: 1.6rem;
text-align: left;
}
.post-content table:not(.highlighttable) td code:only-of-type {
margin-inline: 0;
}
.post-content .highlight,
.post-content pre {
margin: 0 calc(var(--gap) * -1) 4rem;
overflow-x: auto;
background: var(--hljs-bg) !important;
border-radius: 0.5rem;
}
.post-content ul pre {
margin-left: calc(var(--gap) * -2);
}
.post-content .highlight pre {
margin-inline: 0;
margin-bottom: 0;
}
/* table */
.post-content .highlighttable {
table-layout: fixed;
}
.post-content .highlighttable td:first-of-type {
width: 5rem;
}
.post-content .highlighttable td .linenodiv {
padding-right: 0 !important;
}
.post-content .highlighttable td .linenodiv pre,
.post-content .highlighttable td .highlight {
margin-bottom: 0;
}
.post-content .highlighttable td .highlight pre code::-webkit-scrollbar {
display: none;
}
/* inline */
.post-content .highlight span {
background: transparent !important;
}
.post-content code {
padding: 0.5rem 1rem;
margin-inline: 0.5rem;
font-family: Menlo, Monaco, 'Courier New', Courier, monospace;
font-size: 0.8em;
line-height: 1.5;
background: rgba(var(--dark), 0.06);
border-radius: 0.3rem;
}
.post-content pre code {
display: block;
padding: var(--gap);
margin-inline: 0;
color: rgba(255, 255, 255, 0.8);
background: transparent;
border-radius: 0;
}
.post-content blockquote {
padding: 0 0 0 calc(var(--gap) - 0.4rem);
margin: 0 0 0 calc(var(--gap) * -1);
border-left: 0.4rem solid var(--pro);
}
.post-content hr {
height: 1px;
background: var(--fog);
border: 0;
margin-block: 12rem;
}
.post-content iframe {
width: 100%;
background: var(--black);
}
/* Footer
-------------------------------------------------- */
.footer {
display: flex;
align-items: center;
justify-content: center;
max-width: var(--narrow);
height: var(--footer);
padding-bottom: var(--safe-bottom);
margin-top: auto;
font-size: 1.6rem;
color: var(--lit);
border-top: 1px solid var(--fog);
}
.footer p + p::before {
content: '·';
margin-inline: 0.6rem;
}
article pre {
@apply shadow-lg;
.footer a:hover {
color: var(--pro);
border-bottom: 1px solid var(--pro);
padding: theme('space.8') !important;
margin-inline: calc(theme('space.8') * -1);
}
/* 404
-------------------------------------------------- */
.title-404 {
display: flex;
align-items: center;
justify-content: center;
height: 100%;
padding-bottom: 8rem;
font-size: 16rem;
article blockquote {
padding: 0 0 0 calc(theme('space.8') - 3px) !important;
margin: 0 0 0 calc(theme('space.8') * -1) !important;
border-color: theme('colors.zinc.800') !important;
}

1677
assets/main.css Normal file

File diff suppressed because it is too large Load Diff

View File

@ -18,6 +18,12 @@ title = "Paper"
twitter = 'nanxiaobei'
github = 'nanxiaobei'
instagram = 'nan.xiaobei'
rss = true
avatar = 'nanxiaobei@gmail.com'
name = 'Lee'
bio = 'Discover fresh context'
# ------------------------------
# needed to render raw HTML (e.g. <sub>, <sup>, <kbd>, <mark>)
@ -33,6 +39,11 @@ title = "Paper"
name = "About"
url = "/about/"
weight = 10
[[menu.main]]
identifier = "contact"
name = "Contact"
url = "/contact/"
weight = 10
[taxonomies]
category = "categories"

View File

@ -0,0 +1,10 @@
+++
title = "Contact"
description = "Hugo, the world's fastest framework for building websites"
date = "2019-02-28"
aliases = ["about-us", "about-hugo", "contact"]
author = "lee.so"
+++
- [github.com/nanxiaobei](https://github.com/nanxiaobei)
- [lee.so](https://lee.so)

View File

@ -1,3 +1,3 @@
{{ define "main" }}
<h1 class="title-404">404</h1>
<h1 class="absolute inset-x-8 top-0 bottom-16 flex items-center justify-center text-9xl">404</h1>
{{ end }}

View File

@ -1,20 +1,37 @@
<!DOCTYPE html>
{{ $.Scratch.Delete "social-list" }}<!---->
{{ $social := slice "twitter" "github" "instagram" }}<!---->
{{ range $social }}<!---->
{{ $.Scratch.Delete "social_list" }}<!---->
{{ $.Scratch.Delete "avatar_url" }}<!---->
<!-- social_list -->
{{ $socialParams := slice "twitter" "github" "instagram" "rss" }}<!---->
{{ range $socialParams }}<!---->
{{ if isset site.Params . }}<!---->
{{ $.Scratch.Add "social-list" (slice .) }}<!---->
{{ $.Scratch.Add "social_list" (slice .) }}<!---->
{{ end }}<!---->
{{ end }}<!---->
<html lang="{{ site.LanguageCode }}">
<!-- avatar_url -->
{{ if site.Params.avatar }}<!---->
{{ if in site.Params.avatar "http" }}<!---->
{{ $.Scratch.Set "avatar_url" site.Params.avatar }}<!---->
{{ else }}<!---->
{{ $md5 := (md5 site.Params.avatar) }}<!---->
{{ $url := print "https://www.gravatar.com/avatar/" $md5 "?s=160&d=identicon" }}<!---->
{{ $.Scratch.Set "avatar_url" $url }}<!---->
{{ end }}<!---->
{{ end }}<!---->
<html class="not-ready text-sm lg:text-base" lang="{{ site.LanguageCode }}">
{{ partial "head.html" . }}
<body class="not-ready" data-menu="{{ isset site.Menus `main` }}">
<body class="text-black duration-200 ease-out dark:text-white">
{{ partial "header.html" . }}
<main class="main">{{ block "main" . }}{{ end }}</main>
<main
class="prose prose-zinc relative mx-auto min-h-[calc(100%-10rem)] max-w-3xl px-8 pt-16 pb-40 dark:prose-invert"
>
{{ block "main" . }}{{ end }}
</main>
{{ partial "footer.html" . }}
</body>

View File

@ -2,31 +2,57 @@
<!-- Main Title -->
{{ if .Title }}
<h1 class="main-title">{{ .Title }}</h1>
<h1 class="mb-20">{{ .Title }}</h1>
{{ end }}
<!-- $pages -->
{{ $pages := union .RegularPages .Sections }}
<!---->{{ if .IsHome }} {{ $pages = where site.RegularPages "Type" "in" site.Params.mainSections }}
{{ $pages := union .RegularPages .Sections }}<!---->
{{ if .IsHome }}<!---->
{{ $pages = where site.RegularPages "Type" "in" site.Params.mainSections }}<!---->
{{ end }}
<!-- Articles -->
{{ $paginator := .Paginate $pages }} {{ range $index, $page := $paginator.Pages }}
<article class="post-entry">
<h2>{{ .Title }}</h2>
<time>{{ .Date | time.Format ":date_medium" }}</time>
<a href="{{ .Permalink }}"></a>
{{ $paginator := .Paginate $pages }} {{ range $index, $page := $paginator.Pages }}<!---->
<!-- avatar -->
{{ if and $.IsHome (eq $paginator.PageNumber 1) (eq $index 0) }}<!---->
{{ $avatar_url := $.Scratch.Get `avatar_url` }}<!---->
{{ if or $avatar_url site.Params.name }}
<div class="mb-20 flex">
{{ if $avatar_url }}
<img
class="my-0 mr-5 !h-20 !w-20 rounded-full bg-zinc-100 dark:border dark:border-zinc-700"
src="{{ $avatar_url }}"
alt="avatar"
/>
{{ end }}<!---->
{{ if site.Params.name }}
<div>
<h1 class="mt-1 mb-2.5 text-3xl font-bold">{{ site.Params.name }}</h1>
<div>{{ site.Params.bio | default (print "Personal blog by " site.Params.name) }}</div>
</div>
{{ end }}
</div>
{{ end }}<!---->
{{ end }}
<article class="relative my-10 first-of-type:mt-0 last-of-type:mb-0">
<h2 class="!my-0 pb-1 !leading-none">{{ .Title }}</h2>
<time class="text-sm text-zinc-500">{{ .Date | time.Format ":date_medium" }}</time>
<a class="absolute inset-0" href="{{ .Permalink }}"></a>
</article>
{{ end }}
<!-- Main Nav -->
{{ if gt $paginator.TotalPages 1 }}
<nav class="main-nav">
<nav class="mt-20 flex">
{{ if $paginator.HasPrev }}
<a class="prev" href="{{ $paginator.Prev.URL }}">← {{ i18n "prev_page" }}</a>
<a class="btn" href="{{ $paginator.Prev.URL }}">← {{ i18n "prev_page" }}</a>
{{ end }}<!---->
{{ if $paginator.HasNext }}
<a class="next" href="{{ $paginator.Next.URL }}">{{ i18n "next_page" }} →</a>
<a class="btn ml-auto" href="{{ $paginator.Next.URL }}">{{ i18n "next_page" }} →</a>
{{ end }}
</nav>
{{ end }}<!---->

View File

@ -1,24 +1,33 @@
{{ define "main" }}
<article class="post-single">
<header class="post-title">
<p>
<article>
<header class="mb-16">
<h1 class="!my-0 pb-2">{{ .Title }}</h1>
{{ if ne .Type "page" }}
<div class="text-[0.9em] text-zinc-500">
{{ if .Date }}
<time>{{ .Date | time.Format ":date_medium" }}</time>
{{ end }}
{{ end }}<!---->
{{ if or .Params.Author site.Author.name }}
<span class="mx-1">&middot;</span>
<span>{{ .Params.Author | default site.Author.name }}</span>
{{ end }}
</p>
<h1>{{ .Title }}</h1>
</div>
{{ end }}
</header>
<section class="post-content">{{ .Content }}</section>
<section>{{ .Content }}</section>
<!-- Post Tags -->
{{ if .Params.tags }}
<footer class="post-tags">
<footer class="mt-12 flex flex-wrap">
{{ range .Params.tags }} {{ $href := print (absURL "tags/") (urlize .) }}
<a href="{{ $href }}">{{ . }}</a>
<a
class="mr-1.5 mb-1.5 rounded-lg bg-zinc-100 px-4 py-2 no-underline dark:bg-zinc-800"
href="{{ $href }}"
>{{ . }}</a
>
{{ end }}
</footer>
{{ end }}
@ -26,21 +35,28 @@
<!-- Post Nav -->
{{ $pages := where site.RegularPages "Type" "in" site.Params.mainSections }}<!---->
{{ if and (gt (len $pages) 1) (in $pages . ) }}
<nav class="post-nav">
<nav class="mt-16 flex rounded-lg bg-zinc-100 text-lg dark:bg-zinc-800">
{{ with $pages.Next . }}
<a class="prev" href="{{ .Permalink }}"><span></span><span>{{ .Name }}</span></a>
{{ end }} {{ with $pages.Prev . }}
<a class="next" href="{{ .Permalink }}"><span>{{ .Name }}</span><span></span></a>
<a class="flex w-1/2 items-center p-6 pr-3 font-bold no-underline" href="{{ .Permalink }}"
><span class="mr-1.5"></span><span>{{ .Name }}</span></a
>
{{ end }}<!---->
{{ with $pages.Prev . }}
<a
class="ml-auto flex w-1/2 items-center justify-end p-6 pl-3 font-bold no-underline"
href="{{ .Permalink }}"
><span>{{ .Name }}</span><span class="ml-1.5"></span></a
>
{{ end }}
</nav>
{{ end }}
<!-- Disqus -->
{{ if and site.DisqusShortname (not (eq .Params.comments false)) }}
<div id="disqus_thread" class="post-comments"></div>
<div id="disqus_thread"></div>
<script>
var disqusShortname = '{{ site.DisqusShortname }}';
var script = document.createElement('script');
const disqusShortname = '{{ site.DisqusShortname }}';
const script = document.createElement('script');
script.src = 'https://' + disqusShortname + '.disqus.com/embed.js';
script.setAttribute('data-timestamp', +new Date());
document.head.appendChild(script);

View File

@ -1,7 +1,11 @@
<footer class="footer">
<p>&copy; {{ now.Year }} <a href="{{ `` | absURL }}">{{ site.Title }}</a></p>
<p>Powered by <a href="https://gohugo.io/" rel="noopener" target="_blank">Hugo</a></p>
<p>
<a href="https://github.com/nanxiaobei/hugo-paper" rel="noopener" target="_blank">Paper 5.1</a>
</p>
<footer class="mx-auto flex h-[5rem] max-w-3xl items-center px-8 text-sm text-zinc-500">
<div class="mr-auto">
&copy; {{ now.Year }}
<a class="link" href="{{ `` | absURL }}">{{ site.Title }}</a>
</div>
<a class="link mx-6" href="https://gohugo.io/" rel="noopener" target="_blank">Powered by Hugo</a
>
<a class="link" href="https://github.com/nanxiaobei/hugo-paper" rel="noopener" target="_blank"
>▷ Paper 6</a
>
</footer>

View File

@ -7,6 +7,7 @@
<title>{{ if not .IsHome }}{{ .Title }} - {{ end }}{{ site.Title }}</title>
<!-- Meta -->
<meta name="theme-color" />
{{ if eq .Kind "page" }}
<meta name="description" content="{{ .Summary }}" />
<meta name="author" content="{{ .Params.Author | default site.Author.name }}" />
@ -16,15 +17,14 @@
{{ end }}
<!-- Styles & Scripts -->
{{ $app_css := resources.Get "app.css" }}
{{ $main_css := resources.Get "main.css" }}
<!---->
{{ $custom_css := resources.Get "custom.css" }}
<!---->
{{ $css := slice $app_css $custom_css | resources.Concat "app.css" | minify }}
{{ $css := slice $main_css $custom_css | resources.Concat "main.css" | minify }}
<link rel="preload stylesheet" as="style" href="{{ $css.Permalink }}" />
{{ if and .IsPage (not site.Params.disableHLJS) }}
<link rel="preload stylesheet" as="style" href="{{ `an-old-hope.min.css` | absURL }}" />
<script
defer
src="{{ `highlight.min.js` | absURL }}"
@ -33,9 +33,16 @@
{{ end }}
<!-- Preload -->
<link rel="preload" as="image" href="{{ `theme.png` | absURL }}" />
<link rel="preload" as="image" href="{{ `theme.svg` | absURL }}" />
{{ range $.Scratch.Get "social-list" }}
{{ $avatar_url := $.Scratch.Get "avatar_url" }}
<!---->
{{ if $avatar_url }}
<link rel="preload" as="image" href="{{ $avatar_url }}" />
{{ end }}
<!---->
{{ range $.Scratch.Get "social_list" }}
<link rel="preload" as="image" href="{{ printf `%s.svg` . | absURL }}" />
{{ end }}

View File

@ -1,51 +1,82 @@
<header class="header">
{{ if .IsHome }}
<h1 class="logo">
<a class="site-name" href="{{ `` | absURL }}">{{ site.Title }}</a><a class="btn-dark"></a>
</h1>
{{ else }}
<p class="logo">
<a class="site-name" href="{{ `` | absURL }}">{{ site.Title }}</a><a class="btn-dark"></a>
</p>
{{ end }}
<header class="mx-auto flex h-[5rem] max-w-3xl px-8 lg:justify-center">
<div class="relative z-50 mr-auto flex items-center">
<a class="-translate-x-[1px] -translate-y-0.5 text-3xl font-bold" href="{{ `` | absURL }}"
>{{ site.Title }}</a
>
<a
class="btn-dark ml-7 h-[1.4rem] w-[1.4rem] shrink-0 cursor-pointer [background:url(./theme.svg)_left_center/cover_no-repeat] dark:invert dark:[background-position:right]"
></a>
</div>
<a
class="btn-menu relative z-50 -mr-8 flex h-[5rem] w-[5rem] shrink-0 cursor-pointer flex-col items-center justify-center gap-2.5 lg:hidden"
></a>
<script>
let bodyClx = document.body.classList;
let btnDark = document.querySelector('.btn-dark');
let sysDark = window.matchMedia('(prefers-color-scheme: dark)');
let darkVal = localStorage.getItem('dark');
const metaTheme = document.querySelector('meta[name="theme-color"]');
const htmlClass = document.documentElement.classList;
requestAnimationFrame(() => {
htmlClass.remove('not-ready');
});
let setDark = (isDark) => {
bodyClx[isDark ? 'add' : 'remove']('dark');
localStorage.setItem('dark', isDark ? 'yes' : 'no');
const setDark = (newDark) => {
metaTheme.setAttribute('content', newDark ? '#000' : '#FCFAF9');
htmlClass[newDark ? 'add' : 'remove']('dark');
localStorage.setItem('dark', newDark);
};
setDark(darkVal ? darkVal === 'yes' : sysDark.matches);
requestAnimationFrame(() => bodyClx.remove('not-ready'));
// init
const darkScheme = window.matchMedia('(prefers-color-scheme: dark)');
const darkVal = localStorage.getItem('dark');
setDark(darkVal ? darkVal === 'true' : darkScheme.matches);
btnDark.addEventListener('click', () => setDark(!bodyClx.contains('dark')));
sysDark.addEventListener('change', (event) => setDark(event.matches));
// listen system
darkScheme.addEventListener('change', (event) => {
setDark(event.matches);
});
// manual switch
const btnDark = document.querySelector('.btn-dark');
btnDark.addEventListener('click', () => {
setDark(localStorage.getItem('dark') !== 'true');
});
// mobile menu
const btnMenu = document.querySelector('.btn-menu');
btnMenu.addEventListener('click', () => {
htmlClass.toggle('open');
});
</script>
{{ $url := .RelPermalink }}<!---->
{{ with site.Menus.main }}
<nav class="menu">
{{ range . }}
<a class="{{ if eq .URL $url }}active{{ end }}" href="{{ .URL }}">{{ .Name }}</a>
{{ end }}
</nav>
{{ end }}<!---->
<div
class="nav-wrapper fixed inset-x-0 top-full z-40 flex h-full select-none flex-col justify-center pb-16 duration-200 dark:bg-black lg:static lg:h-auto lg:flex-row lg:!bg-transparent lg:pb-0 lg:transition-none"
>
{{ $url := .RelPermalink }}<!---->
{{ with site.Menus.main }}
<nav class="lg:ml-14 lg:flex lg:flex-row lg:items-center lg:space-x-7">
{{ range . }}
<a
class="block font-medium lg:font-normal text-center leading-[5rem] text-3xl lg:text-base {{ if eq .URL $url }}active{{ end }}"
href="{{ .URL }}"
>{{ .Name }}</a
>
{{ end }}
</nav>
{{ end }}<!---->
{{ with $.Scratch.Get "social-list" }}
<nav class="social">
{{ range . }}
<a
class="{{ . }}"
style="--url: url(./{{ . }}.svg)"
href="https://{{ . }}.com/{{ site.Params.Get . }}"
target="_blank"
></a>
{{ end }}
</nav>
{{ end }}
{{ with $.Scratch.Get "social_list" }}
<nav
class="mt-12 flex justify-center space-x-10 dark:invert lg:mt-0 lg:ml-14 lg:items-center lg:space-x-7"
>
{{ range . }}<!---->
<a
class="h-8 w-8 [background:var(--url)_center_center/cover_no-repeat] lg:h-6 lg:w-6"
style="--url: url(./{{ . }}.svg)"
href="{{ if eq . `rss` }} {{ `index.xml` | absURL }} {{ else }} https://{{ . }}.com/{{ site.Params.Get . }} {{ end }}"
target="_blank"
></a>
{{ end }}<!---->
</nav>
{{ end }}<!---->
</div>
</header>

View File

@ -1 +0,0 @@
.hljs-comment,.hljs-quote{color:#B6B18B}.hljs-variable,.hljs-template-variable,.hljs-tag,.hljs-name,.hljs-selector-id,.hljs-selector-class,.hljs-regexp,.hljs-deletion{color:#EB3C54}.hljs-number,.hljs-built_in,.hljs-builtin-name,.hljs-literal,.hljs-type,.hljs-params,.hljs-meta,.hljs-link{color:#E7CE56}.hljs-attribute{color:#EE7C2B}.hljs-string,.hljs-symbol,.hljs-bullet,.hljs-addition{color:#4FB4D7}.hljs-title,.hljs-section{color:#78BB65}.hljs-keyword,.hljs-selector-tag{color:#B45EA4}.hljs{display:block;overflow-x:auto;background:#1C1D21;color:#c0c5ce;padding:.5em}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 866 B

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 689 B

After

Width:  |  Height:  |  Size: 764 B

View File

@ -1 +1 @@
<svg viewBox="-0.8 -1 17.6 17.6" xmlns="http://www.w3.org/2000/svg"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z" /></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="1.3 1.3 21.4 21.4"><path d="M10.9,2.1c-4.6,0.5-8.3,4.2-8.8,8.7c-0.5,4.7,2.2,8.9,6.3,10.5C8.7,21.4,9,21.2,9,20.8v-1.6c0,0-0.4,0.1-0.9,0.1 c-1.4,0-2-1.2-2.1-1.9c-0.1-0.4-0.3-0.7-0.6-1C5.1,16.3,5,16.3,5,16.2C5,16,5.3,16,5.4,16c0.6,0,1.1,0.7,1.3,1c0.5,0.8,1.1,1,1.4,1 c0.4,0,0.7-0.1,0.9-0.2c0.1-0.7,0.4-1.4,1-1.8c-2.3-0.5-4-1.8-4-4c0-1.1,0.5-2.2,1.2-3C7.1,8.8,7,8.3,7,7.6C7,7.2,7,6.6,7.3,6 c0,0,1.4,0,2.8,1.3C10.6,7.1,11.3,7,12,7s1.4,0.1,2,0.3C15.3,6,16.8,6,16.8,6C17,6.6,17,7.2,17,7.6c0,0.8-0.1,1.2-0.2,1.4 c0.7,0.8,1.2,1.8,1.2,3c0,2.2-1.7,3.5-4,4c0.6,0.5,1,1.4,1,2.3v2.6c0,0.3,0.3,0.6,0.7,0.5c3.7-1.5,6.3-5.1,6.3-9.3 C22,6.1,16.9,1.4,10.9,2.1z"/></svg>

Before

Width:  |  Height:  |  Size: 656 B

After

Width:  |  Height:  |  Size: 700 B

View File

@ -1 +1 @@
<svg viewBox="-1.5 -3 53 53" xmlns="http://www.w3.org/2000/svg"><path d="M25 1c-6.52 0-7.34.03-9.9.14-2.55.12-4.3.53-5.82 1.12a11.76 11.76 0 0 0-4.25 2.77 11.76 11.76 0 0 0-2.77 4.25c-.6 1.52-1 3.27-1.12 5.82C1.03 17.66 1 18.48 1 25c0 6.5.03 7.33.14 9.88.12 2.56.53 4.3 1.12 5.83a11.76 11.76 0 0 0 2.77 4.25 11.76 11.76 0 0 0 4.25 2.77c1.52.59 3.27 1 5.82 1.11 2.56.12 3.38.14 9.9.14 6.5 0 7.33-.02 9.88-.14 2.56-.12 4.3-.52 5.83-1.11a11.76 11.76 0 0 0 4.25-2.77 11.76 11.76 0 0 0 2.77-4.25c.59-1.53 1-3.27 1.11-5.83.12-2.55.14-3.37.14-9.89 0-6.51-.02-7.33-.14-9.89-.12-2.55-.52-4.3-1.11-5.82a11.76 11.76 0 0 0-2.77-4.25 11.76 11.76 0 0 0-4.25-2.77c-1.53-.6-3.27-1-5.83-1.12A170.2 170.2 0 0 0 25 1zm0 4.32c6.4 0 7.16.03 9.69.14 2.34.11 3.6.5 4.45.83 1.12.43 1.92.95 2.76 1.8a7.43 7.43 0 0 1 1.8 2.75c.32.85.72 2.12.82 4.46.12 2.53.14 3.29.14 9.7 0 6.4-.02 7.16-.14 9.69-.1 2.34-.5 3.6-.82 4.45a7.43 7.43 0 0 1-1.8 2.76 7.43 7.43 0 0 1-2.76 1.8c-.84.32-2.11.72-4.45.82-2.53.12-3.3.14-9.7.14-6.4 0-7.16-.02-9.7-.14-2.33-.1-3.6-.5-4.45-.82a7.43 7.43 0 0 1-2.76-1.8 7.43 7.43 0 0 1-1.8-2.76c-.32-.84-.71-2.11-.82-4.45a166.5 166.5 0 0 1-.14-9.7c0-6.4.03-7.16.14-9.7.11-2.33.5-3.6.83-4.45a7.43 7.43 0 0 1 1.8-2.76 7.43 7.43 0 0 1 2.75-1.8c.85-.32 2.12-.71 4.46-.82 2.53-.11 3.29-.14 9.7-.14zm0 7.35a12.32 12.32 0 1 0 0 24.64 12.32 12.32 0 0 0 0-24.64zM25 33a8 8 0 1 1 0-16 8 8 0 0 1 0 16zm15.68-20.8a2.88 2.88 0 1 0-5.76 0 2.88 2.88 0 0 0 5.76 0z" /></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="2.2 2.2 19.6 19.6"><path d="M 8 3 C 5.239 3 3 5.239 3 8 L 3 16 C 3 18.761 5.239 21 8 21 L 16 21 C 18.761 21 21 18.761 21 16 L 21 8 C 21 5.239 18.761 3 16 3 L 8 3 z M 18 5 C 18.552 5 19 5.448 19 6 C 19 6.552 18.552 7 18 7 C 17.448 7 17 6.552 17 6 C 17 5.448 17.448 5 18 5 z M 12 7 C 14.761 7 17 9.239 17 12 C 17 14.761 14.761 17 12 17 C 9.239 17 7 14.761 7 12 C 7 9.239 9.239 7 12 7 z M 12 9 A 3 3 0 0 0 9 12 A 3 3 0 0 0 12 15 A 3 3 0 0 0 15 12 A 3 3 0 0 0 12 9 z"/></svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 521 B

1
static/rss.svg Normal file
View File

@ -0,0 +1 @@
<svg version="1.0" xmlns="http://www.w3.org/2000/svg" viewBox="7.5 7.5 81 81"><g transform="translate(0,96) scale(0.1,-0.1)" stroke="none"><path d="M145 815 l-25 -24 0 -311 0 -311 25 -24 24 -25 311 0 311 0 24 25 25 24 0 311 0 311 -25 24 -24 25 -311 0 -311 0 -24 -25z m227 -106 c195 -42 348 -229 348 -426 l0 -43 -39 0 -38 0 -5 64 c-15 185 -174 336 -355 336 l-43 0 0 40 c0 40 0 40 40 40 21 0 63 -5 92 -11z m-2 -165 c104 -31 190 -151 190 -265 0 -39 0 -39 -39 -39 l-38 0 -6 55 c-11 104 -78 171 -181 182 l-56 6 0 38 c0 38 1 39 38 39 21 0 62 -7 92 -16z m-30 -204 c11 -11 20 -29 20 -40 0 -26 -34 -60 -60 -60 -26 0 -60 34 -60 60 0 11 9 29 20 40 11 11 29 20 40 20 11 0 29 -9 40 -20z"/></g></svg>

After

Width:  |  Height:  |  Size: 687 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 KiB

1
static/theme.svg Normal file
View File

@ -0,0 +1 @@
<svg width="64" height="32" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><g transform="translate(-12,0)"><path d="M9.3812 2.04327C7.76937 2.50154 6.2485 3.36519 4.97948 4.63421C1.00684 8.60687 1.00684 15.0478 4.97948 19.0205C8.95213 22.9932 15.3931 22.9932 19.3657 19.0205C20.6429 17.7433 21.5095 16.211 21.9654 14.5876M9.5384 2C8.6321 5.39377 9.51018 9.16492 12.1726 11.8274C14.8351 14.4899 18.6063 15.368 22 14.4617" stroke="#000" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" /></g><g transform="translate(12,0)"><path d="M17.5 17.5L19 19M20 12H22M6.5 6.5L5 5M17.5 6.5L19 5M6.5 17.5L5 19M2 12H4M12 2V4M12 20V22M16 12C16 14.2091 14.2091 16 12 16C9.79086 16 8 14.2091 8 12C8 9.79086 9.79086 8 12 8C14.2091 8 16 9.79086 16 12Z" stroke="#000" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" /></g></svg>

After

Width:  |  Height:  |  Size: 863 B

View File

@ -1 +1 @@
<svg viewBox="0.9 0.5 22.8 22.8" xmlns="http://www.w3.org/2000/svg"><g><path d="M23.643 4.937c-.835.37-1.732.62-2.675.733.962-.576 1.7-1.49 2.048-2.578-.9.534-1.897.922-2.958 1.13-.85-.904-2.06-1.47-3.4-1.47-2.572 0-4.658 2.086-4.658 4.66 0 .364.042.718.12 1.06-3.873-.195-7.304-2.05-9.602-4.868-.4.69-.63 1.49-.63 2.342 0 1.616.823 3.043 2.072 3.878-.764-.025-1.482-.234-2.11-.583v.06c0 2.257 1.605 4.14 3.737 4.568-.392.106-.803.162-1.227.162-.3 0-.593-.028-.877-.082.593 1.85 2.313 3.198 4.352 3.234-1.595 1.25-3.604 1.995-5.786 1.995-.376 0-.747-.022-1.112-.065 2.062 1.323 4.51 2.093 7.14 2.093 8.57 0 13.255-7.098 13.255-13.254 0-.2-.005-.402-.014-.602.91-.658 1.7-1.477 2.323-2.41z" /></g></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="2.1 2.1 19.8 19.8"><path d="M22,3.999c-0.78,0.463-2.345,1.094-3.265,1.276c-0.027,0.007-0.049,0.016-0.075,0.023c-0.813-0.802-1.927-1.299-3.16-1.299 c-2.485,0-4.5,2.015-4.5,4.5c0,0.131-0.011,0.372,0,0.5c-3.353,0-5.905-1.756-7.735-4c-0.199,0.5-0.286,1.29-0.286,2.032 c0,1.401,1.095,2.777,2.8,3.63c-0.314,0.081-0.66,0.139-1.02,0.139c-0.581,0-1.196-0.153-1.759-0.617c0,0.017,0,0.033,0,0.051 c0,1.958,2.078,3.291,3.926,3.662c-0.375,0.221-1.131,0.243-1.5,0.243c-0.26,0-1.18-0.119-1.426-0.165 c0.514,1.605,2.368,2.507,4.135,2.539c-1.382,1.084-2.341,1.486-5.171,1.486H2C3.788,19.145,6.065,20,8.347,20 C15.777,20,20,14.337,20,8.999c0-0.086-0.002-0.266-0.005-0.447C19.995,8.534,20,8.517,20,8.499c0-0.027-0.008-0.053-0.008-0.08 c-0.003-0.136-0.006-0.263-0.009-0.329c0.79-0.57,1.475-1.281,2.017-2.091c-0.725,0.322-1.503,0.538-2.32,0.636 C20.514,6.135,21.699,4.943,22,3.999z"/></svg>

Before

Width:  |  Height:  |  Size: 703 B

After

Width:  |  Height:  |  Size: 919 B