summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreltrac <hi@eltr.ac>2026-04-07 14:53:17 +0800
committereltrac <hi@eltr.ac>2026-04-07 14:53:17 +0800
commit10431bd8f5ff71690ae4e5444e8d7894fd401ae5 (patch)
tree62b7fd1b6c1f68d2804f380eb522bcebeb2c8d9f
parent3e0edacc4a0cafa53ede57ebb6f0378c93f3123b (diff)
chore: move templates out of site repo
-rw-r--r--assets/css/_markdown.scss275
-rw-r--r--assets/css/components/_libra.scss42
-rw-r--r--assets/css/components/_toc.scss53
-rw-r--r--assets/css/main.scss7
-rw-r--r--assets/css/utils/_reset.scss53
-rw-r--r--assets/css/utils/_utility.scss62
-rw-r--r--assets/css/utils/_variables.scss48
-rw-r--r--assets/js/back2top.js60
-rw-r--r--assets/js/darkmode.js36
-rw-r--r--assets/js/fediform.js42
-rw-r--r--assets/js/instantpage.min.js2
-rw-r--r--assets/js/toc.js40
-rw-r--r--assets/js/tooltip.js54
-rw-r--r--i18n/en.toml83
-rw-r--r--i18n/zh.toml91
-rw-r--r--layouts/404.html47
-rw-r--r--layouts/_markup/render-blockquote.html30
-rw-r--r--layouts/_markup/render-heading.html12
-rw-r--r--layouts/_markup/render-image.html25
-rw-r--r--layouts/_markup/render-link.html6
-rw-r--r--layouts/_markup/render-table.html32
-rw-r--r--layouts/_partials/components/back-to-top.html16
-rw-r--r--layouts/_partials/components/backlinks.html37
-rw-r--r--layouts/_partials/components/category-pill.html7
-rw-r--r--layouts/_partials/components/date.html31
-rw-r--r--layouts/_partials/components/logo.html18
-rw-r--r--layouts/_partials/components/microformats.html9
-rw-r--r--layouts/_partials/components/section-title.html10
-rw-r--r--layouts/_partials/components/shade-mask.html7
-rw-r--r--layouts/_partials/components/svg-filters.html4
-rw-r--r--layouts/_partials/components/tags.html3
-rw-r--r--layouts/_partials/components/wordcount.html1
-rw-r--r--layouts/_partials/content.html9
-rw-r--r--layouts/_partials/footer.html39
-rw-r--r--layouts/_partials/head.html10
-rw-r--r--layouts/_partials/head/css.html19
-rw-r--r--layouts/_partials/head/scripts.html4
-rw-r--r--layouts/_partials/head/siteinfo.html59
-rw-r--r--layouts/_partials/head/verification.html10
-rw-r--r--layouts/_partials/header.html28
-rw-r--r--layouts/_partials/header/navigation.html13
-rw-r--r--layouts/_partials/header/other-navigation.html29
-rw-r--r--layouts/_partials/home/home-nav-item.html15
-rw-r--r--layouts/_partials/home/home-nav.html11
-rw-r--r--layouts/_partials/home/latest-posts.html11
-rw-r--r--layouts/_partials/home/microformats.html7
-rw-r--r--layouts/_partials/home/more-links.html15
-rw-r--r--layouts/_partials/items/book.html36
-rw-r--r--layouts/_partials/items/card.html19
-rw-r--r--layouts/_partials/items/post-small.html11
-rw-r--r--layouts/_partials/items/post.html41
-rw-r--r--layouts/_partials/posts/action-area.html16
-rw-r--r--layouts/_partials/posts/banner.html9
-rw-r--r--layouts/_partials/posts/comment.html38
-rw-r--r--layouts/_partials/posts/endnotes.html13
-rw-r--r--layouts/_partials/posts/fediverse-form.html14
-rw-r--r--layouts/_partials/posts/toc.html10
-rw-r--r--layouts/_partials/posts/webmention-form.html6
-rw-r--r--layouts/_partials/posts/webmention-mentions.html56
-rw-r--r--layouts/_partials/posts/webmention-replies.html69
-rw-r--r--layouts/_partials/posts/webmention-summary.html54
-rw-r--r--layouts/_partials/posts/webmention.html73
-rw-r--r--layouts/_partials/scripts.html43
-rw-r--r--layouts/_partials/stats/external-link-rank.html37
-rw-r--r--layouts/_partials/stats/publish-time-chart.html78
-rw-r--r--layouts/_partials/stats/stats-table.html44
-rw-r--r--layouts/_partials/stats/word-count-chart.html46
-rw-r--r--layouts/_partials/taxonomy/all-categories.html33
-rw-r--r--layouts/_partials/taxonomy/all-tags.html46
-rw-r--r--layouts/_partials/taxonomy/archived-categories.html16
-rw-r--r--layouts/_partials/taxonomy/pagefind.html7
-rw-r--r--layouts/_partials/taxonomy/tag-pill.html24
-rw-r--r--layouts/_partials/template/post-page.html45
-rw-r--r--layouts/_partials/term/term-books.html9
-rw-r--r--layouts/_partials/term/term-fictions.html10
-rw-r--r--layouts/_partials/term/term-posts.html6
-rw-r--r--layouts/_partials/term/term-weeklies.html10
-rw-r--r--layouts/_partials/utils/inject-footnotes.html70
-rw-r--r--layouts/_partials/utils/render.html1
-rw-r--r--layouts/_shortcodes/book.html17
-rw-r--r--layouts/_shortcodes/bookcard.html28
-rw-r--r--layouts/_shortcodes/daysfrom.html12
-rw-r--r--layouts/_shortcodes/fedicard.html148
-rw-r--r--layouts/_shortcodes/float-image.html13
-rw-r--r--layouts/_shortcodes/gallery.html3
-rw-r--r--layouts/_shortcodes/link.html15
-rw-r--r--layouts/_shortcodes/linkding-bookmarks.html68
-rw-r--r--layouts/_shortcodes/linkrank.html2
-rw-r--r--layouts/_shortcodes/music.html53
-rw-r--r--layouts/_shortcodes/opml-links.html19
-rw-r--r--layouts/_shortcodes/postcount.html1
-rw-r--r--layouts/_shortcodes/quotecard.html11
-rw-r--r--layouts/_shortcodes/right.html1
-rw-r--r--layouts/_shortcodes/wordcount.html7
-rw-r--r--layouts/archive.html23
-rw-r--r--layouts/article/page.html3
-rw-r--r--layouts/article/section.html38
-rw-r--r--layouts/baseof.404.html9
-rw-r--r--layouts/baseof.html14
-rw-r--r--layouts/baseof.page.html14
-rw-r--r--layouts/baseof.section.html15
-rw-r--r--layouts/blank.html10
-rw-r--r--layouts/cards/page.html12
-rw-r--r--layouts/cards/section.html29
-rw-r--r--layouts/fiction/page.html24
-rw-r--r--layouts/fiction/section.html25
-rw-r--r--layouts/highlights.html20
-rw-r--r--layouts/home.html8
-rw-r--r--layouts/library/page.html62
-rw-r--r--layouts/library/section.html85
-rw-r--r--layouts/page.html9
-rw-r--r--layouts/rss.xml63
-rw-r--r--layouts/stats.html30
-rw-r--r--layouts/tags/taxonomy.html12
-rw-r--r--layouts/taxonomy.html13
-rw-r--r--layouts/term.html15
-rw-r--r--layouts/uncategorized.html22
-rw-r--r--layouts/weekly/page.html3
-rw-r--r--layouts/weekly/section.html41
-rw-r--r--package.json23
-rw-r--r--pagefind.yml3
-rw-r--r--pnpm-lock.yaml2191
-rw-r--r--scripts/extract_highlights.go120
-rw-r--r--scripts/get_external_link_rank.go77
-rw-r--r--scripts/get_internal_link_graph.go101
-rw-r--r--static/_headers10
-rw-r--r--static/apple-touch-icon.pngbin2980 -> 0 bytes
-rw-r--r--static/atom.xsl.xml37
-rw-r--r--static/favicon.icobin200116 -> 0 bytes
-rw-r--r--static/favicon.pngbin2980 -> 0 bytes
-rw-r--r--static/graph.html80
-rw-r--r--static/icons/codeberg.svg164
-rw-r--r--static/icons/enwiktionary.svg1
-rw-r--r--static/icons/etymonline.jpgbin1589 -> 0 bytes
-rw-r--r--static/icons/external.svg7
-rw-r--r--static/icons/forgejo.svg1
-rw-r--r--static/icons/gatus.svg1
-rw-r--r--static/icons/github.svg19
-rw-r--r--static/icons/music/apple.pngbin2819 -> 0 bytes
-rw-r--r--static/icons/music/bandcamp.pngbin1021 -> 0 bytes
-rw-r--r--static/icons/music/netease.pngbin1188 -> 0 bytes
-rw-r--r--static/icons/music/spotify.pngbin2599 -> 0 bytes
-rw-r--r--static/icons/music/tidal.pngbin587 -> 0 bytes
-rw-r--r--static/icons/rss.svg11
-rw-r--r--static/icons/wikipedia.svg2
-rw-r--r--static/img/bat.svg6
-rw-r--r--static/img/clockwork.svg6
-rw-r--r--static/img/coffee.svg2
-rw-r--r--static/img/comments.svg16
-rw-r--r--static/img/crow.svg6
-rw-r--r--static/img/fediverse.pngbin98385 -> 0 bytes
-rw-r--r--static/img/ghost-window.svg59
-rw-r--r--static/img/github.svg2
-rw-r--r--static/img/heart-organ.svg2
-rw-r--r--static/img/mention.svg37
-rw-r--r--static/img/potted-skeleton.svg61
-rw-r--r--static/img/rss.svg13
-rw-r--r--static/img/thumbs-down.pngbin1600 -> 0 bytes
-rw-r--r--static/js/libra.min.js2
-rw-r--r--uno.config.js55
-rw-r--r--uno.css461
161 files changed, 0 insertions, 7085 deletions
diff --git a/assets/css/_markdown.scss b/assets/css/_markdown.scss
deleted file mode 100644
index 09089996..00000000
--- a/assets/css/_markdown.scss
+++ /dev/null
@@ -1,275 +0,0 @@
-.markdown-body {
- max-width: 100%;
-
- p {
- hyphens: auto;
- text-justify: ideographic;
- margin-bottom: 1em;
- }
-
- strong:is([lang="zh-CN"] strong) {
- text-emphasis: filled dot;
- text-emphasis-position: under;
- }
-
- img:not(p > img) {
- max-width: 100%;
- display: block;
- margin: 1rem auto;
- }
-
- p > img {
- width: 1.5rem;
- height: auto;
- transition: transform .1s;
- &:hover {
- transform: scale(1.2)
- }
- }
-
- ul {
- list-style-type: square;
- }
-
- ul, ol {
- padding-inline-start: 1.75rem;
- li {
- padding-left: 0.25rem;
- }
- ::marker {
- color: var(--secondary-text-color);
- }
- }
-
- mark {
- color: var(--text-color);
- background-color: rgba(255, 235, 0, .25);
- text-decoration: underline;
- text-decoration-color: rgb(255, 235, 0);
- text-underline-offset: 5px;
- }
-
- del {
- opacity: 0.5
- }
-
- iframe {
- max-width: 100%;
- }
-
- a:not(.footnote-backref, .footnote-ref) {
- // color and underline
- text-decoration: underline;
- text-decoration-style: wavy;
- text-decoration-thickness: 1px;
- text-underline-offset: 0.25em;
- text-decoration-color: var(--border-color);
- color: var(--link-color);
-
- // link hover effects
- transition: text-decoration-color 0.1s ease-in-out;
- &:hover {
- text-decoration-color: var(--secondary-text-color);
- }
-
- // icons with pseudo-elements
- &::before, &::after {
- display: inline-block;
- font-size: 70%;
- color: var(--secondary-text-color);
- vertical-align: middle;
- font-weight: 800;
- }
-
- &::after {
- margin-left: 0.05em;
- }
-
- &::before {
- --size: 1.25em;
- margin-right: 0.25em;
- background-size: var(--size);
- height: var(--size);
- width: var(--size);
- border-radius: 3px;
-
- }
-
- // external link icon
- &.external-link::after {
- content: '';
- background-image: url('/icons/external.svg');
- background-size: cover;
- opacity: 0.65;
- height: 1em;
- width: 1em;
- @media (prefers-color-scheme: dark) {
- filter: invert(1)
- }
- }
-
- // icons for specific domains
- &:not(.no-icon) {
- &[href*="wikipedia.org"]::before {
- content: '';
- background-color: #fff;
- background-image: url('/icons/wikipedia.svg');
- }
- &[href*="wiktionary.org"]::before {
- content: '';
- background-color: #fff;
- background-image: url('/icons/enwiktionary.svg');
- }
- &[href*="etymonline.com"]::before {
- content: '';
- background-image: url('/icons/etymonline.jpg');
- }
- &[href*="codeberg.org"]::before {
- content: '';
- background-image: url('/icons/codeberg.svg');
- }
- &[href*="github.com"]::before {
- content: '';
- background-image: url('/icons/github.svg');
- .dark & {
- filter: invert(1);
- }
- }
- }
- }
-
- a.footnote-ref {
- color: var(--secondary-text-color);
- margin-right: 0.25rem;
- }
-
- code {
- font-size: 90%;
- color: var(--secondary-text-color);
- font-weight: 600;
- }
-
- pre {
- padding: 0.5rem 1rem;
- font-size: 1rem;
- border-radius: 5px;
- border-top-right-radius: 0;
- position: relative;
-
- & > code {
- padding: 0;
- color: unset;
- background-color: inherit;
- border: 0;
- overflow: auto;
- display: block;
- line-height: 1.5;
-
- &:not([data-lang="fallback"])::before {
- --width: 1rem;
- content: attr(data-lang);
- display: block;
- box-sizing: border-box;
- line-height: 1rem;
-
- position: absolute;
- top: 0;
- right: -1rem;
- width: var(--width);
- min-height: 2.5rem;
- writing-mode: vertical-rl;
- text-align: center;
-
- font-size: 0.75em;
- background: #333;
- color: #fff;
- padding: 0.5rem 0;
- border-radius: 0 4px 4px 0;
- }
- }
- }
-
- figure {
- display: block;
- margin: 0;
- figcaption {
- max-width: 100%;
- h4 {
- font-size: 0.9rem;
- color: var(--secondary-text-color);
- font-weight: 400;
- text-align: center;
- white-space: normal;
- }
- }
- }
-
- /* footnotes */
-
- .inline-footnote {
- p { margin: 0 }
- }
-
- sup[id*="fnref"]:target {
- background-color: rgba(255, 235, 0, .25);
- }
-}
-
-/* gallery shortcode */
-
-.gallery {
- display: flex;
- overflow-x: auto;
- scroll-behavior: smooth;
- gap: 0.5rem;
- white-space: nowrap;
-
- & > figure, & > a:has(> figure) {
- margin: 0;
- flex-shrink: 0;
- display: inline-block;
- position: relative;
- box-shadow: inset 0 -2rem 2rem -2rem rgba(0, 0, 0, 0.1);
- img {
- height: 20rem;
- display: block;
- border-radius: 4px;
- margin: 0;
- }
- figcaption {
- position: absolute;
- bottom: 0;
- left: 0;
- padding: 0.35rem;
- h4 {
- font-size: 0.8rem;
- margin: 0;
- text-align: left;
- width: fit-content;
- color: var(--text-color);
- background-color: oklch(from var(--block-background-color) l c h / calc(alpha - 0.25));
- backdrop-filter: blur(0.5rem);
- padding: 0.2rem 0.35rem;
- border-radius: 3px;
- line-height: 1.2;
- }
- }
- }
- & > p { display: none }
-
- &.center {
- justify-content: center;
- }
- &.full-width {
- & > figure {
- flex-shrink: unset;
- img {
- width: 100%;
- }
- }
- }
-}
-
-.webmention-body {
- .h-cite { display: none }
-}
diff --git a/assets/css/components/_libra.scss b/assets/css/components/_libra.scss
deleted file mode 100644
index 2912012b..00000000
--- a/assets/css/components/_libra.scss
+++ /dev/null
@@ -1,42 +0,0 @@
-.libra-overlay {
- position: fixed;
- top: 0;
- left: 0;
- width: 100%;
- height: 100%;
- padding: 1rem;
- transition: opacity ease-in-out;
-
- backdrop-filter: blur(2rem);
- background-color: rgba(255, 255, 255, 0.75);
-
- display: flex;
- justify-content: center;
- align-items: center;
-}
-
-.libra-overlay.libra-visible {
- opacity: 1;
- z-index: 900;
-}
-
-.libra-overlay.libra-hidden {
- opacity: 0;
- z-index: -100;
-}
-
-@media (prefers-color-scheme: dark) {
- .libra-overlay {
- background-color: rgba(0, 0, 0, 0.75);
- }
-}
-
-.libra-shadow {
- position: absolute;
- transition-property: transform;
- z-index: 1000;
-}
-
-.libra-shadow.open {
- box-shadow: 0 0 1rem rgba(0, 0, 0, 0.5);
-}
diff --git a/assets/css/components/_toc.scss b/assets/css/components/_toc.scss
deleted file mode 100644
index e8486557..00000000
--- a/assets/css/components/_toc.scss
+++ /dev/null
@@ -1,53 +0,0 @@
-#toc {
- ul {
- margin-block-start: 0;
- margin-block-end: 0;
- padding-inline-start: 1rem;
-
- overflow: hidden;
- position: relative;
- li {
- list-style: none;
-
- & > a {
- color: var(--secondary-text-color);
- text-decoration: none;
- transition: color .3s;
- display: inline-flex;
- align-items: center;
- gap: .5rem;
- text-overflow: ellipsis;
- white-space: nowrap;
- &::before {
- content: '';
- display: inline-block;
- width: 1rem;
- height: .3rem;
- background-color: var(--block-background-color);
- border-radius: .2rem;
- transition: background .3s;
- flex-shrink: 0;
- }
- }
-
- /* nested list */
- ul {
- max-height: 25rem;
- overflow-y: auto
- }
-
- /* active styles */
- &:not(.active) ul {
- max-height: 0
- }
- a:hover,
- &.active > a {
- color: var(--text-color);
- }
-
- &.active > a::before {
- background-color: var(--secondary-text-color);
- }
- }
- }
-}
diff --git a/assets/css/main.scss b/assets/css/main.scss
deleted file mode 100644
index 0bc8d722..00000000
--- a/assets/css/main.scss
+++ /dev/null
@@ -1,7 +0,0 @@
-@import "utils/variables";
-@import "utils/reset";
-@import "utils/utility";
-@import "markdown";
-
-@import "components/libra";
-@import "components/toc";
diff --git a/assets/css/utils/_reset.scss b/assets/css/utils/_reset.scss
deleted file mode 100644
index 568d8b5b..00000000
--- a/assets/css/utils/_reset.scss
+++ /dev/null
@@ -1,53 +0,0 @@
-html {
- scroll-behavior: smooth;
- scroll-padding-top: 3rem;
-}
-
-@view-transition {
- navigation: auto;
-}
-
-body {
- font-family: var(--serif-font-family);
- -webkit-font-smoothing: antialiased;
- color: var(--text-color);
- position: relative;
-
- /* background */
- background-color: var(--background-color);
- background-size: 5rem;
- background-image: url("data:image/svg+xml,%3Csvg width='180' height='180' viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M82.42 180h-1.415L0 98.995v-2.827L6.167 90 0 83.833V81.004L81.005 0h2.827L90 6.167 96.167 0H98.996L180 81.005v2.827L173.833 90 180 96.167V98.996L98.995 180h-2.827L90 173.833 83.833 180H82.42zm0-1.414L1.413 97.58 8.994 90l-7.58-7.58L82.42 1.413 90 8.994l7.58-7.58 81.006 81.005-7.58 7.58 7.58 7.58-81.005 81.006-7.58-7.58-7.58 7.58zM175.196 0h-25.832c1.033 2.924 2.616 5.59 4.625 7.868C152.145 9.682 151 12.208 151 15c0 5.523 4.477 10 10 10 1.657 0 3 1.343 3 3v4h16V0h-4.803c.51.883.803 1.907.803 3 0 3.314-2.686 6-6 6s-6-2.686-6-6c0-1.093.292-2.117.803-3h10.394-13.685C161.18.938 161 1.948 161 3v4c-4.418 0-8 3.582-8 8s3.582 8 8 8c2.76 0 5 2.24 5 5v2h4v-4h2v4h4v-4h2v4h2V0h-4.803zm-15.783 0c-.27.954-.414 1.96-.414 3v2.2c-1.25.254-2.414.74-3.447 1.412-1.716-1.93-3.098-4.164-4.054-6.612h7.914zM180 17h-3l2.143-10H180v10zm-30.635 163c-.884-2.502-1.365-5.195-1.365-8 0-13.255 10.748-24 23.99-24H180v32h-30.635zm12.147 0c.5-1.416 1.345-2.67 2.434-3.66l-1.345-1.48c-1.498 1.364-2.62 3.136-3.186 5.14H151.5c-.97-2.48-1.5-5.177-1.5-8 0-12.15 9.84-22 22-22h8v30h-18.488zm13.685 0c-1.037-1.793-2.976-3-5.197-3-2.22 0-4.16 1.207-5.197 3h10.394zM0 148h8.01C21.26 148 32 158.742 32 172c0 2.805-.48 5.498-1.366 8H0v-32zm0 2h8c12.15 0 22 9.847 22 22 0 2.822-.53 5.52-1.5 8h-7.914c-.567-2.004-1.688-3.776-3.187-5.14l-1.346 1.48c1.09.99 1.933 2.244 2.434 3.66H0v-30zm15.197 30c-1.037-1.793-2.976-3-5.197-3-2.22 0-4.16 1.207-5.197 3h10.394zM0 32h16v-4c0-1.657 1.343-3 3-3 5.523 0 10-4.477 10-10 0-2.794-1.145-5.32-2.992-7.134C28.018 5.586 29.6 2.924 30.634 0H0v32zm0-2h2v-4h2v4h4v-4h2v4h4v-2c0-2.76 2.24-5 5-5 4.418 0 8-3.582 8-8s-3.582-8-8-8V3c0-1.052-.18-2.062-.512-3H0v30zM28.5 0c-.954 2.448-2.335 4.683-4.05 6.613-1.035-.672-2.2-1.16-3.45-1.413V3c0-1.04-.144-2.046-.414-3H28.5zM0 17h3L.857 7H0v10zM15.197 0c.51.883.803 1.907.803 3 0 3.314-2.686 6-6 6S4 6.314 4 3c0-1.093.292-2.117.803-3h10.394zM109 115c-1.657 0-3 1.343-3 3v4H74v-4c0-1.657-1.343-3-3-3-5.523 0-10-4.477-10-10 0-2.793 1.145-5.318 2.99-7.132C60.262 93.638 58 88.084 58 82c0-13.255 10.748-24 23.99-24h16.02C111.26 58 122 68.742 122 82c0 6.082-2.263 11.636-5.992 15.866C117.855 99.68 119 102.206 119 105c0 5.523-4.477 10-10 10zm0-2c-2.76 0-5 2.24-5 5v2h-4v-4h-2v4h-4v-4h-2v4h-4v-4h-2v4h-4v-4h-2v4h-4v-2c0-2.76-2.24-5-5-5-4.418 0-8-3.582-8-8s3.582-8 8-8v-4c0-2.64 1.136-5.013 2.946-6.66L72.6 84.86C70.39 86.874 69 89.775 69 93v2.2c-1.25.254-2.414.74-3.447 1.412C62.098 92.727 60 87.61 60 82c0-12.15 9.84-22 22-22h16c12.15 0 22 9.847 22 22 0 5.61-2.097 10.728-5.55 14.613-1.035-.672-2.2-1.16-3.45-1.413V93c0-3.226-1.39-6.127-3.6-8.14l-1.346 1.48C107.864 87.987 109 90.36 109 93v4c4.418 0 8 3.582 8 8s-3.582 8-8 8zM90.857 97L93 107h-6l2.143-10h1.714zM80 99c3.314 0 6-2.686 6-6s-2.686-6-6-6-6 2.686-6 6 2.686 6 6 6zm20 0c3.314 0 6-2.686 6-6s-2.686-6-6-6-6 2.686-6 6 2.686 6 6 6z' fill='var(--block-background-color)' fill-opacity='0.018' fill-rule='evenodd'/%3E%3C/svg%3E");
-
- .dark & {
- background-image: url("data:image/svg+xml,%3Csvg width='180' height='180' viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M82.42 180h-1.415L0 98.995v-2.827L6.167 90 0 83.833V81.004L81.005 0h2.827L90 6.167 96.167 0H98.996L180 81.005v2.827L173.833 90 180 96.167V98.996L98.995 180h-2.827L90 173.833 83.833 180H82.42zm0-1.414L1.413 97.58 8.994 90l-7.58-7.58L82.42 1.413 90 8.994l7.58-7.58 81.006 81.005-7.58 7.58 7.58 7.58-81.005 81.006-7.58-7.58-7.58 7.58zM175.196 0h-25.832c1.033 2.924 2.616 5.59 4.625 7.868C152.145 9.682 151 12.208 151 15c0 5.523 4.477 10 10 10 1.657 0 3 1.343 3 3v4h16V0h-4.803c.51.883.803 1.907.803 3 0 3.314-2.686 6-6 6s-6-2.686-6-6c0-1.093.292-2.117.803-3h10.394-13.685C161.18.938 161 1.948 161 3v4c-4.418 0-8 3.582-8 8s3.582 8 8 8c2.76 0 5 2.24 5 5v2h4v-4h2v4h4v-4h2v4h2V0h-4.803zm-15.783 0c-.27.954-.414 1.96-.414 3v2.2c-1.25.254-2.414.74-3.447 1.412-1.716-1.93-3.098-4.164-4.054-6.612h7.914zM180 17h-3l2.143-10H180v10zm-30.635 163c-.884-2.502-1.365-5.195-1.365-8 0-13.255 10.748-24 23.99-24H180v32h-30.635zm12.147 0c.5-1.416 1.345-2.67 2.434-3.66l-1.345-1.48c-1.498 1.364-2.62 3.136-3.186 5.14H151.5c-.97-2.48-1.5-5.177-1.5-8 0-12.15 9.84-22 22-22h8v30h-18.488zm13.685 0c-1.037-1.793-2.976-3-5.197-3-2.22 0-4.16 1.207-5.197 3h10.394zM0 148h8.01C21.26 148 32 158.742 32 172c0 2.805-.48 5.498-1.366 8H0v-32zm0 2h8c12.15 0 22 9.847 22 22 0 2.822-.53 5.52-1.5 8h-7.914c-.567-2.004-1.688-3.776-3.187-5.14l-1.346 1.48c1.09.99 1.933 2.244 2.434 3.66H0v-30zm15.197 30c-1.037-1.793-2.976-3-5.197-3-2.22 0-4.16 1.207-5.197 3h10.394zM0 32h16v-4c0-1.657 1.343-3 3-3 5.523 0 10-4.477 10-10 0-2.794-1.145-5.32-2.992-7.134C28.018 5.586 29.6 2.924 30.634 0H0v32zm0-2h2v-4h2v4h4v-4h2v4h4v-2c0-2.76 2.24-5 5-5 4.418 0 8-3.582 8-8s-3.582-8-8-8V3c0-1.052-.18-2.062-.512-3H0v30zM28.5 0c-.954 2.448-2.335 4.683-4.05 6.613-1.035-.672-2.2-1.16-3.45-1.413V3c0-1.04-.144-2.046-.414-3H28.5zM0 17h3L.857 7H0v10zM15.197 0c.51.883.803 1.907.803 3 0 3.314-2.686 6-6 6S4 6.314 4 3c0-1.093.292-2.117.803-3h10.394zM109 115c-1.657 0-3 1.343-3 3v4H74v-4c0-1.657-1.343-3-3-3-5.523 0-10-4.477-10-10 0-2.793 1.145-5.318 2.99-7.132C60.262 93.638 58 88.084 58 82c0-13.255 10.748-24 23.99-24h16.02C111.26 58 122 68.742 122 82c0 6.082-2.263 11.636-5.992 15.866C117.855 99.68 119 102.206 119 105c0 5.523-4.477 10-10 10zm0-2c-2.76 0-5 2.24-5 5v2h-4v-4h-2v4h-4v-4h-2v4h-4v-4h-2v4h-4v-4h-2v4h-4v-2c0-2.76-2.24-5-5-5-4.418 0-8-3.582-8-8s3.582-8 8-8v-4c0-2.64 1.136-5.013 2.946-6.66L72.6 84.86C70.39 86.874 69 89.775 69 93v2.2c-1.25.254-2.414.74-3.447 1.412C62.098 92.727 60 87.61 60 82c0-12.15 9.84-22 22-22h16c12.15 0 22 9.847 22 22 0 5.61-2.097 10.728-5.55 14.613-1.035-.672-2.2-1.16-3.45-1.413V93c0-3.226-1.39-6.127-3.6-8.14l-1.346 1.48C107.864 87.987 109 90.36 109 93v4c4.418 0 8 3.582 8 8s-3.582 8-8 8zM90.857 97L93 107h-6l2.143-10h1.714zM80 99c3.314 0 6-2.686 6-6s-2.686-6-6-6-6 2.686-6 6 2.686 6 6 6zm20 0c3.314 0 6-2.686 6-6s-2.686-6-6-6-6 2.686-6 6 2.686 6 6 6z' fill='var(--block-background-color)' fill-opacity='0.1' fill-rule='evenodd'/%3E%3C/svg%3E");
- }
-}
-
-article {
- max-width: var(--page-width);
- margin: 0 auto;
- padding: 0 1rem;
-}
-
-a {
- color: var(--text-color);
- text-decoration: none;
- text-underline-offset: 0.25rem;
- &:hover {
- text-decoration: underline;
- }
-}
-
-button {
- border: none;
- outline: none;
- color: var(--text-color);
- font-size: 1rem;
- font-family: var(--serif-font-family);
- cursor: pointer
-}
-
-hr {
- margin: 2.5rem auto;
- border: 0.05rem dashed var(--border-color);
-}
diff --git a/assets/css/utils/_utility.scss b/assets/css/utils/_utility.scss
deleted file mode 100644
index b37cc742..00000000
--- a/assets/css/utils/_utility.scss
+++ /dev/null
@@ -1,62 +0,0 @@
-/* container that extends the page width */
-.outbox {
- display: flex;
- justify-content: center;
- width: 100%;
- z-index: 10;
- position: relative;
-
- @media screen and (min-width: 768px) {
- width: calc(var(--page-width) + 10rem);
- margin: 0 -5rem;
- }
-
- @media screen and (min-width: 1200px) {
- width: calc(var(--page-width) + 20rem);
- margin: 0 -10rem;
- }
-
- &.small {
- @media screen and (min-width: 768px) {
- width: calc(var(--page-width) + 4rem);
- margin: 0 -2rem;
- }
-
- @media screen and (min-width: 1200px) {
- width: calc(var(--page-width) + 10rem);
- margin: 0 -5rem;
- }
- }
-}
-
-/* filter that gives element a printed look */
-.xerox {
- filter: url(#x);
-}
-
-.writing-vertical {
- writing-mode: vertical-lr;
-}
-
-@media (min-width: 768px) {
- .md\:writing-vertical {
- writing-mode: vertical-lr;
- }
-}
-
-details.no-mark summary::marker { content: "" }
-
-.lazy-render {
- content-visibility: auto;
- contain-intrinsic-size: auto 500px;
-}
-
-/* Dynamic rotation for webmention avatars */
-.group:hover img[style*="--rotate-amount"] {
- transform: rotate(var(--rotate-amount));
-}
-
-/* Dynamic rotation for fiction section items */
-div[style*="--rotation-deg"]:hover {
- transform: rotate(0deg) scale(1.1) !important;
-}
diff --git a/assets/css/utils/_variables.scss b/assets/css/utils/_variables.scss
deleted file mode 100644
index cead160f..00000000
--- a/assets/css/utils/_variables.scss
+++ /dev/null
@@ -1,48 +0,0 @@
-:root {
- /* colors */
- --background-color: oklch(0.9707 0.0027 286.35);
- --bright-background-color: oklch(0.9851 0 0);
- --block-background-color: oklch(0.933 0.007 295.445);
- --border-color: oklch(0.8758 0.0123 247.97);
- --text-color: oklch(0.2316 0.0038 286.1);
- --secondary-text-color: oklch(0.5399 0.0077 286.14);
- --link-color: oklch(0.3147 0.0071 285.99);
-
- /* fonts */
- --serif-font-family:
- "Noto Serif",
- "Noto Serif SC",
- "Noto Serif TC",
- "Noto Serif CJK SC",
- "Noto Serif CJK TC",
- "Source Han Serif SC",
- "Source Han Serif TC",
- "Songti SC",
- "Times New Roman",
- Times,
- serif;
-
- --page-width: 650px;
- --page-margin-y: 3rem;
- @media screen and (min-width: 768) {
- --page-margin-y: 5rem;
- }
-
- /* pagefind custom css */
- --pagefind-ui-primary: var(--text-color);
- --pagefind-ui-text: var(--text-color);
- --pagefind-ui-background: var(--background-color);
- --pagefind-ui-border: var(--border-color);
- --pagefind-ui-tag: var(--border-color);
-}
-
-.dark {
- --background-color: oklch(0.2408 0.0049 219.67);
- --block-background-color: oklch(0.216 0.004 228.978);
- --border-color: rgba(255, 255, 255, 0.2);
- --text-color: oklch(0.8532 0.0082 73.73);
- --secondary-text-color: oklch(0.6863 0.0196 78.19);
- --link-color: oklch(0.9054 0.0081 73.74);
- --bright-background-color: oklch(0.5103 0 0);
-}
-
diff --git a/assets/js/back2top.js b/assets/js/back2top.js
deleted file mode 100644
index 6d7501e1..00000000
--- a/assets/js/back2top.js
+++ /dev/null
@@ -1,60 +0,0 @@
-// Back2top, the Batrick
-// author: Eltrac
-
-const backToTop = document.getElementById("back2top")
-const backToTopButton = document.getElementById("back2top-button")
-const backToTopInstruction = document.getElementById("back2top-instruction")
-const seenAndUsedBat = localStorage.getItem("geedeapro.ui.seenAndUsedBat")
-
-if (backToTopInstruction && backToTopButton) {
- function hideInstruction() {
- backToTopInstruction.remove()
- }
- if (seenAndUsedBat) hideInstruction()
-
- // listen to button click and scroll to top
- backToTopButton.addEventListener("click", () => {
- window.scrollTo({ top: 0, behavior: "smooth" })
- if (!seenAndUsedBat) {
- localStorage.setItem("geedeapro.ui.seenAndUsedBat", true);
- hideInstruction();
- }
- })
-
- // listen to scroll and toggle button visibility
- let lastOffset = window.scrollY
-
- window.addEventListener("scroll", () => {
- const offset = window.scrollY
- const batIsHidden = backToTop.classList.contains("-top-25")
- const enoughHeight = offset >= 2000
- const isScrollingUp = offset < lastOffset
- const isScrollingDown = offset > lastOffset
-
- function hide() {
- backToTop.classList.remove("top-0")
- backToTop.classList.add("-top-25")
- backToTop.classList.remove("animate-head-shake")
- }
-
- function show() {
- backToTop.classList.remove("-top-25")
- backToTop.classList.add("top-0")
- backToTop.classList.add("animate-head-shake")
- }
-
- if (enoughHeight && isScrollingUp && batIsHidden) {
- // show only when scrolling up
- show()
- } else if (isScrollingDown && !batIsHidden) {
- // hide as soon as user scrolls down again
- hide()
- }
-
- // hide no matter what if too close to top
- if (!enoughHeight) hide()
-
- lastOffset = offset
- })
-}
-
diff --git a/assets/js/darkmode.js b/assets/js/darkmode.js
deleted file mode 100644
index 6057f357..00000000
--- a/assets/js/darkmode.js
+++ /dev/null
@@ -1,36 +0,0 @@
-(() => {
- const THEME = 'geedeapro.theme' // auto | light | dakr
- const mql = window.matchMedia('(prefers-color-scheme: dark)')
-
- function useDarkMode(store) {
- document.documentElement.classList.add('dark')
- if (localStorage.getItem(THEME) != 'auto') mql.onchange = null
- if (store) localStorage.setItem(THEME, 'dark')
- }
-
- function useLightMode(store) {
- document.documentElement.classList.remove('dark')
- if (localStorage.getItem(THEME) != 'auto') mql.onchange = null
- if (store) localStorage.setItem(THEME, 'light')
- }
-
- function useSystem(store) {
- if (mql.matches) useDarkMode()
- else useLightMode()
- mql.onchange = e => {
- console.log("changed when system changed")
- if (e.matches) useDarkMode()
- else useLightMode()
- }
- if (store) localStorage.setItem(THEME, 'auto')
- }
-
- window.switchTheme = (theme, store) => {
- if (!theme || theme === 'auto') useSystem(store)
- else if (theme === 'dark') useDarkMode(store)
- else if (theme === 'light') useLightMode(store)
- }
-
- // use preferred theme immediately upon DOM loaded
- window.switchTheme(localStorage.getItem(THEME), false)
-})();
diff --git a/assets/js/fediform.js b/assets/js/fediform.js
deleted file mode 100644
index 30c2815c..00000000
--- a/assets/js/fediform.js
+++ /dev/null
@@ -1,42 +0,0 @@
-document.addEventListener("DOMContentLoaded", () => {
- // open toot in fediverse
- const instanceInput = document.getElementById('fediverse-instance')
- if (instanceInput) {
- const savedInstance = localStorage.getItem("geedeapro.fediInstance")
- if (savedInstance) instanceInput.value = savedInstance
-
- function openInFediverse() {
- const instance = instanceInput.value.trim();
-
- let url = tootUrl
- if (instance) {
- url = 'https://' + instance + '/authorize_interaction?uri=' + encodeURIComponent(tootUrl);
- // save instance url to localStorage
- localStorage.setItem("geedeapro.fediInstance", instance)
- }
- window.open(url, '_blank');
- }
-
- const fediformButton = document.getElementById('fediform-button');
- fediformButton.addEventListener("click", openInFediverse)
-
- instanceInput.addEventListener('keypress', function(event) {
- if (event.key === 'Enter') {
- event.preventDefault();
- openInFediverse();
- }
- });
- }
-
-
- // copy toot link:
- const copyBtn = document.getElementById("fediform-copy-button")
- if (copyBtn) {
- function copyTootLink() {
- navigator.clipboard.writeText(tootUrl)
- copyBtn.innerText = '✅'
- setTimeout(() => copyBtn.innerText = '📋', 3000)
- }
- copyBtn.addEventListener("click", copyTootLink)
- }
-})
diff --git a/assets/js/instantpage.min.js b/assets/js/instantpage.min.js
deleted file mode 100644
index 761f9d34..00000000
--- a/assets/js/instantpage.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-/*! instant.page v5.2.0 - (C) 2019-2025 Alexandre Dieulot - https://instant.page/license */
-let t,e,n,o,i,r,a=null,s=65,c=new Set;function u(t){i=t;const e=t.target.closest("a");g(e)&&v(e.href,"high")}function d(t){i=t}function l(t){if(h(t))return;if(!("closest"in t.target))return;const e=t.target.closest("a");g(e)&&(e.addEventListener("mouseout",p,{passive:!0}),r=setTimeout(()=>{v(e.href,"high"),r=null},s))}function f(t){if(h(t))return;const e=t.target.closest("a");g(e)&&v(e.href,"high")}function p(t){t.relatedTarget&&t.target.closest("a")==t.relatedTarget.closest("a")||r&&(clearTimeout(r),r=null)}function m(t){if(h(t))return;const e=t.target.closest("a");if(t.which>1||t.metaKey||t.ctrlKey)return;if(!e)return;e.addEventListener("click",function(t){1337!=t.detail&&t.preventDefault()},{capture:!0,passive:!1,once:!0});const n=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!1,detail:1337});e.dispatchEvent(n)}function h(t){if(!i||!t)return!1;if(t.target!=i.target)return!1;return t.timeStamp-i.timeStamp<2500}function g(t){if(t&&t.href&&(!o||"instant"in t.dataset)){if(t.origin!=location.origin){if(!(n||"instant"in t.dataset)||!a)return}if(["http:","https:"].includes(t.protocol)&&("http:"!=t.protocol||"https:"!=location.protocol)&&(e||!t.search||"instant"in t.dataset)&&!(t.hash&&t.pathname+t.search==location.pathname+location.search||"noInstant"in t.dataset))return!0}}function v(e,n="auto"){c.has(e)||("none"!=t?function(e){const n=document.createElement("script");n.type="speculationrules",n.textContent=JSON.stringify({[t]:[{source:"list",urls:[e]}]}),document.head.appendChild(n)}(e):function(t,e="auto"){const n=document.createElement("link");n.rel="prefetch",n.href=t,n.fetchPriority=e,n.as="document",document.head.appendChild(n)}(e,n),c.add(e))}!function(){const i=document.createElement("link").relList;if(!i.supports("prefetch"))return;const r="throwIfAborted"in AbortSignal.prototype,c=i.supports("modulepreload"),p=Intl.PluralRules&&"selectRange"in Intl.PluralRules.prototype;if(!r||!c&&!p)return;const h="instantVaryAccept"in document.body.dataset||"Shopify"in window,y=navigator.userAgent.indexOf("Chrome/");y>-1&&(a=parseInt(navigator.userAgent.substring(y+"Chrome/".length)));if(h&&a&&a<110)return;if(t="none",HTMLScriptElement.supports&&HTMLScriptElement.supports("speculationrules")){const e=document.body.dataset.instantSpecrules;"prerender"==e?t="prerender":"no"!=e&&(t="prefetch")}const w="instantMousedownShortcut"in document.body.dataset;e="instantAllowQueryString"in document.body.dataset,n="instantAllowExternalLinks"in document.body.dataset,o="instantWhitelist"in document.body.dataset;let b=!1,E=!1,S=!1;if("instantIntensity"in document.body.dataset){const t=document.body.dataset.instantIntensity;if("mousedown"!=t||w||(b=!0),"mousedown-only"!=t||w||(b=!0,E=!0),"viewport"==t){const t=document.documentElement.clientWidth*document.documentElement.clientHeight<45e4,e=navigator.connection&&navigator.connection.saveData,n=navigator.connection&&navigator.connection.effectiveType&&navigator.connection.effectiveType.includes("2g"),o=!e&&!n;t&&o&&(S=!0)}"viewport-all"==t&&(S=!0);const e=parseInt(t);isNaN(e)||(s=e)}const I={capture:!0,passive:!0};E?document.addEventListener("touchstart",d,I):document.addEventListener("touchstart",u,I);b||document.addEventListener("mouseover",l,I);b&&document.addEventListener("mousedown",f,I);w&&document.addEventListener("mousedown",m,I);if(S){let t=window.requestIdleCallback;t||(t=(t=>{t()})),t(function(){const t=new IntersectionObserver(e=>{e.forEach(e=>{if(e.isIntersecting){const n=e.target;t.unobserve(n),v(n.href)}})});document.querySelectorAll("a").forEach(e=>{g(e)&&t.observe(e)})},{timeout:1500})}}(); \ No newline at end of file
diff --git a/assets/js/toc.js b/assets/js/toc.js
deleted file mode 100644
index ec0028db..00000000
--- a/assets/js/toc.js
+++ /dev/null
@@ -1,40 +0,0 @@
-// Animate Hugo-built TOC
-// author: Eltrac
-
-document.addEventListener('DOMContentLoaded', () => {
- const toc = document.getElementById('toc');
- if (!toc) return;
-
- const headings = document.querySelectorAll('h2, h3');
- const observer = new IntersectionObserver(entries => {
- entries.forEach(entry => {
- if (!entry.isIntersecting) return;
-
- const id = entry.target.id;
- const tocLink = toc.querySelector(`a[href="#${id}"]`);
- if (!tocLink) return;
-
- const listItem = tocLink.parentElement;
- const isH2 = entry.target.tagName === 'H2';
-
- // Clear all active states when a new H2 is encountered
- if (isH2) {
- toc.querySelectorAll('li.active').forEach(el => el.classList.remove('active'));
- }
-
- // Set current item as active
- listItem.classList.add('active');
-
- // If this is an H3, find and activate its parent H2
- if (!isH2) {
- const parentH2Item = listItem.closest('ul').previousElementSibling?.closest('li');
- if (parentH2Item) parentH2Item.classList.add('active');
- }
- });
- }, {
- rootMargin: '0px 0px -50% 0px',
- threshold: 0.5
- });
-
- headings.forEach(heading => observer.observe(heading));
-});
diff --git a/assets/js/tooltip.js b/assets/js/tooltip.js
deleted file mode 100644
index eea5b350..00000000
--- a/assets/js/tooltip.js
+++ /dev/null
@@ -1,54 +0,0 @@
-(() => {
- const allTooltipped = document.querySelectorAll('[data-tooltip]');
-
- const createOrUpdateTooltip = (element) => {
- const tooltipText = element.getAttribute('data-tooltip') || element.getAttribute('title');
-
- if (!tooltipText) return;
-
- let tooltipElement = element.querySelector('.__generated-tooltip');
- if (!tooltipElement) {
- element.classList.add('group', 'relative', 'tooltipped');
-
- tooltipElement = document.createElement('div');
- tooltipElement.classList.add(
- '__generated-tooltip',
- ...'absolute bottom-full left-1/2 transform -translate-x-1/2 translate-y-1 bg-black/80 text-white px-2.5 py-1.5 rounded text-xs whitespace-nowrap opacity-0 invisible transition-all duration-300 pointer-events-none mb-2 z-1000 group-hover:opacity-100 group-hover:visible group-hover:translate-y-0 dark:bg-white/90 dark:text-black'.split(' ')
- );
- element.appendChild(tooltipElement);
- }
-
- tooltipElement.textContent = tooltipText;
- };
-
- const observer = new IntersectionObserver((entries, obs) => {
- entries.forEach(entry => {
- if (!entry.isIntersecting) return;
-
- const element = entry.target;
- createOrUpdateTooltip(element);
-
- // listen to tooltip text changes
- const mutationObserver = new MutationObserver(mutations => {
- for (const mutation of mutations) {
- if (mutation.type === 'attributes' &&
- (mutation.attributeName === 'title' || mutation.attributeName === 'data-tooltip')) {
- createOrUpdateTooltip(element);
- }
- }
- });
-
- mutationObserver.observe(element, {
- attributes: true,
- attributeFilter: ['title', 'data-tooltip'],
- });
-
- obs.unobserve(element); // 不再需要 Intersection 监听
- });
- }, {
- rootMargin: '100px',
- threshold: 0.1,
- });
-
- allTooltipped.forEach(el => observer.observe(el));
-})();
diff --git a/i18n/en.toml b/i18n/en.toml
deleted file mode 100644
index f15a8c27..00000000
--- a/i18n/en.toml
+++ /dev/null
@@ -1,83 +0,0 @@
-lang = "en"
-seeArchive = "See all pages"
-searchInstruction = "⌘+K to search"
-backToHome = "Back To Home"
-RSS = "RSS"
-statsTooltip = "Insights"
-back2top = "I'll take you up!"
-emailMe = "If you prefer one-on-one communication, or just want to say hello, feel free to email me at"
-rss_comment_link = "Come and leave a comment"
-viewExternalSource = "View External Source"
-ViewOnFediverse = "View on Fediverse"
-
-[archivePage]
-postCountMonthly = "{{ . }} POSTS"
-postCountAnnual = "{{ . }} TOTAL POSTS"
-
-[postPage]
-wordcount = "%d words"
-commentNotLoaded = "if comment is not loaded, please try refreshing"
-staticCommentsSectionHeader = "These are static comments that are stored in frontmatter of this page. They used to be in different comment platforms, but now they are integrated into the page's content."
-originallyPostedOn = "originally posted on {{ . }}"
-
-[footer]
-wordCount = "🪦 {{ . }} words are buried here"
-licenseStatement = "Licensed under {{ . }}"
-
-[postNav]
-latest = "Latest"
-categories = "Categories"
-settings = "Settings"
-
-[moreLinks]
-posts = "All Posts"
-cards = "All Cards"
-
-[termPage]
-cards = "Cards about this topic"
-books = "Books I've read about this topic"
-
-[library]
-viewAllThisYear = "All Books This Year"
-
-[termFilterButton]
-hideWeekly = "I'll deal with scarecrows."
-reverseOrder = "Push to reverse time."
-
-[fuzzyTimes]
-afterMidnight = "After Midnight"
-earlyMorning = "Early Morning"
-morning = "Morning"
-noon = "Noon"
-afternoon = "Afternoon"
-evening = "Evening"
-night = "Night"
-midnight = "Midnight"
-
-[actionMenu]
-email = "or send me an email!"
-interact = "Interact"
-fediverse = "Fediverse"
-openToot = "Open T{oot"
-fediversePlaceholder = "your instance, optional"
-webmention = "Webmention"
-webmentionPlaceholder = "Your post URL"
-send = "Send"
-
-[webmention]
-formPlaceholder = "URL of your post"
-submit = "Ping me!"
-likedBy = "%d people liked this page"
-mentionsHeading = "Mentions"
-interactOnFediverse = "Interact on Fediverse"
-mentionedThisPost = "mentioned this post"
-bridgyNotice = 'Comments from Fediverse might not be bridged yet, see all interaction at %s.'
-
-[music]
-netease = "Netease Music"
-bandcamp = "Bandcamp"
-apple = "Apple Music"
-spotify = "Spotify"
-tidal = "TIDAL"
-album = "ALBUM"
-openIn = "Open in {{ . }}"
diff --git a/i18n/zh.toml b/i18n/zh.toml
deleted file mode 100644
index e9da65f2..00000000
--- a/i18n/zh.toml
+++ /dev/null
@@ -1,91 +0,0 @@
-lang = "zh-CN"
-seeArchive = "档案馆"
-searchInstruction = "⌘+K 搜索"
-cards = "最近在学"
-backToHome = "返回首页"
-RSS = "订阅"
-statsTooltip = "洞察"
-back2top = "我带你上去!"
-emailMe = "如果你偏好一对一的沟通,或者只是想打个招呼,欢迎发邮件到"
-rss_comment_link = "读完啦?来坐坐吧"
-viewExternalSource = "查看外部来源和完整互动"
-ViewOnFediverse = "在联邦宇宙查看"
-
-[theme]
-auto = "自动"
-light = "亮色"
-dark = "暗色"
-
-[archivePage]
-postCountMonthly = "{{ . }} 篇文章"
-postCountAnnual = "共计 {{ . }} 篇文章"
-pageCount = "共 {{ . }} 个页面"
-
-[postPage]
-wordcount = "%d 字"
-commentNotLoaded = "如果评论未加载,请尝试刷新页面"
-staticCommentsSectionHeader = "这些是曾经发布在不同评论平台上的评论,现在它们已经作为静态内容集成到页面中。"
-originallyPostedOn = "原本发表于 {{ . }}"
-
-[footer]
-wordCount = "🪦 {{ . }} 字在这里死去"
-licenseStatement = "以 {{ . }} 协议授权"
-
-[postNav]
-latest = "最新"
-categories = "搜寻"
-
-[moreLinks]
-posts = "所有文章"
-cards = "所有卡片"
-
-[termPage]
-books = "我读过的相关书籍"
-weeklies = "提及此主题的周刊"
-fictions = "我写过的关于这个主题的小说"
-
-[library]
-viewAllThisYear = "查看今年完整书单"
-
-[termFilterButton]
-hideWeekly = "我帮你解决稻草人"
-reverseOrder = "按下以逆转时间"
-
-[fuzzyTimes]
-afterMidnight = "凌晨"
-earlyMorning = "清晨"
-morning = "早上"
-noon = "中午"
-afternoon = "下午"
-evening = "傍晚"
-night = "晚上"
-midnight = "深夜"
-
-[actionMenu]
-email = "也欢迎邮件交流!"
-interact = "互动"
-fediverse = "联邦宇宙"
-openToot = "打开帖子"
-fediversePlaceholder = "实例域名,可留空"
-webmention = "Webmention"
-webmentionPlaceholder = "你的文章 URL"
-send = "发送"
-
-[webmention]
-formPlaceholder = "你的文章的 URL"
-submit = "提交"
-likedBy = "%d 人喜欢了这篇文章"
-repliedAndMentionedBy = ",还有 %d 条回应和提及"
-mentionsHeading = "提及这篇文章的"
-interactOnFediverse = "在 Fediverse 上互动"
-mentionedThisPost = "提及了这篇文章"
-bridgyNotice = '来自联邦宇宙的互动不总是会被桥接,你可以到 %s 查看完整互动。'
-
-[music]
-netease = "网易云音乐"
-bandcamp = "Bandcamp"
-apple = "Apple Music"
-spotify = "Spotify"
-tidal = "TIDAL"
-album = "专辑"
-openIn = "在 {{ . }} 中打开"
diff --git a/layouts/404.html b/layouts/404.html
deleted file mode 100644
index 6f17a145..00000000
--- a/layouts/404.html
+++ /dev/null
@@ -1,47 +0,0 @@
-{{ define "main" }}
- <style>
- .page-404 {
- position: relative;
- height: calc(100dvh - var(--page-margin-y) * 2)
- }
- .page-404 .title-404 {
- position: absolute;
- bottom: 0;
- right: 0;
- font-size: 5rem;
- font-style: italic;
- filter: url(#x);
- color: var(--secondary-text-color);
- margin: 0;
- }
-
- .image-404 {
- width: 10rem;
- filter: url(#xs);
- @media (prefers-color-scheme: dark) {
- filter: url(#xs) invert(1);
- }
- }
-
- @media screen and (min-width: 768px) {
- .page-404 {
- display: flex;
- align-items: center;
- justify-content: center;
- gap: 5rem;
- }
- .image-404 {
- width: 15rem;
- }
- }
- </style>
- <article class="page-404">
- <img src="/img/ghost-window.svg" class="image-404" />
- <div class="markdown-body text-size-lg md:text-size-xl">
- <h1 class="title-404">404</h1>
- <p>Windows 和幽灵偷走了你的页面</p>
- <p>可恶的微软和能量体生物!</p>
- <p><a href="/">Mac 和骷髅为你祈祷</a></p>
- </div>
- </article>
-{{ end }}
diff --git a/layouts/_markup/render-blockquote.html b/layouts/_markup/render-blockquote.html
deleted file mode 100644
index 79f57a85..00000000
--- a/layouts/_markup/render-blockquote.html
+++ /dev/null
@@ -1,30 +0,0 @@
-{{ $emojis := dict
- "caution" "🚨"
- "important" "☝️"
- "note" "ℹ️"
- "tip" "💡"
- "warning" "⚠️"
- "announcement" "📣"
-}}
-
-{{ if eq .Type "alert" }}
- <blockquote class="rounded-1 leading-[1.75] mx-0 px-5
- flex gap-3 my-2 alert-{{ .AlertType }}"
- style="background-color: oklch(from var(--block-background-color) l c h / calc(alpha - 0.5))"
- >
- <div class="py-5">
- {{ with .AlertTitle }}
- {{.}}
- {{ else }}
- {{ index $emojis .AlertType }}
- {{ end }}
- </div>
- <div>
- {{ .Text }}
- </div>
- </blockquote>
-{{ else }}
- <blockquote class="text-secondary p-0 m-0 ml-[1em]">
- {{ .Text }}
- </blockquote>
-{{ end }}
diff --git a/layouts/_markup/render-heading.html b/layouts/_markup/render-heading.html
deleted file mode 100644
index 52b2f3ff..00000000
--- a/layouts/_markup/render-heading.html
+++ /dev/null
@@ -1,12 +0,0 @@
-{{ $size := index (dict
- "1" "text-[1.5em] font-extrabold"
- "2" "text-[1.25em] font-extrabold"
- "3" "text-[1.125em] font-bold"
- "4" "text-[1em] font-bold"
- "5" "text-[0.9em] font-bold"
- "6" "text-[0.875em]") (printf "%d" .Level) }}
-<h{{ .Level }}
- id="{{ .Anchor }}"
- class="{{ $size }} {{ with .Attributes.class }} {{ . }}{{ end }}">
- {{- .Text -}}
-</h{{ .Level }}>
diff --git a/layouts/_markup/render-image.html b/layouts/_markup/render-image.html
deleted file mode 100644
index 49c9fcee..00000000
--- a/layouts/_markup/render-image.html
+++ /dev/null
@@ -1,25 +0,0 @@
-{{- $src := .Destination -}}
-{{- $alt := .Text | default "" -}}
-{{- $caption := .Title | default "" -}}
-{{- $class := .Attributes.class | default "" -}}
-
-{{- if and (not (strings.HasPrefix $src "https://")) (not (strings.HasPrefix $src "http://")) -}}
- {{- if not (strings.HasPrefix $src "/") -}}
- {{- $src = printf "%s/%s%s" site.Params.assetBaseUrl .Page.File.Dir $src -}}
- {{- else -}}
- {{- $src = printf "%s%s" site.Params.assetBaseUrl $src -}}
- {{- end -}}
-{{- end -}}
-
-<figure>
- <img
- class="lazy {{ $class }}" loading="lazy"
- src="{{ $src }}" alt="{{ $alt }}"
- data-libra
- />
- {{- if $caption }}
- <figcaption>
- <h4>{{ $caption | markdownify }}</h4>
- </figcaption>
- {{- end }}
-</figure>
diff --git a/layouts/_markup/render-link.html b/layouts/_markup/render-link.html
deleted file mode 100644
index 2e8d32f7..00000000
--- a/layouts/_markup/render-link.html
+++ /dev/null
@@ -1,6 +0,0 @@
-{{ $url := .Destination | safeURL }}
-{{ if or (strings.HasPrefix $url "http://") (strings.HasPrefix $url "https://") }}
- <a href="{{ $url }}" class="external-link" target="_blank" rel="noopener noreferrer">{{ .Text }}</a>
-{{ else }}
- <a href="{{ $url }}">{{ .Text }}</a>
-{{ end }}
diff --git a/layouts/_markup/render-table.html b/layouts/_markup/render-table.html
deleted file mode 100644
index 010942f0..00000000
--- a/layouts/_markup/render-table.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<div class="overflow-x-auto">
- <table class="border-collapse w-max min-w-full table-fixed
- b-t-2 b-t-solid b-t-[var(--border-color)]"
- style="-webkit-overflow-scrolling: touch;">
- {{- if .THead }}
- <thead>
- {{- range .THead }}
- <tr class="b-t-1 b-t-solid b-t-[var(--border-color)]">
- {{- range . }}
- <th
- class="max-w-[200px] py-2 px-4 leading-snug whitespace-normal break-words"
- {{ with .Alignment }} style="text-align:{{ . }}"{{ end }}
- >{{ .Text | safeHTML }}</th>
- {{- end }}
- </tr>
- {{- end }}
- </thead>
- {{- end }}
- <tbody>
- {{- range .TBody }}
- <tr class="b-t-1 b-t-solid b-t-[var(--border-color)]">
- {{- range . }}
- <td
- class="max-w-[200px] py-2 px-4 leading-snug whitespace-normal break-words"
- {{ with .Alignment }} style="text-align:{{ . }}"{{ end }}
- >{{ .Text | safeHTML }}</td>
- {{- end }}
- </tr>
- {{- end }}
- </tbody>
- </table>
-</div>
diff --git a/layouts/_partials/components/back-to-top.html b/layouts/_partials/components/back-to-top.html
deleted file mode 100644
index 157fbe7b..00000000
--- a/layouts/_partials/components/back-to-top.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<div id="back2top" class="fixed -top-25 left-0 right-0 z-30
- flex justify-center items-center transition-all animate-head-shake
- bg-linear-to-t bg-gradient-from-transparent bg-gradient-to-zinc">
- <button id="back2top-button"
- class="block bg-transparent mt-5 flex flex-col items-center">
- <img src="/img/bat.svg"
- class="block w-8 h-8 dark:invert-100 drop-shadow-xl"
- alt="Back to top"
- />
- <p id="back2top-instruction"
- class="text-size-xs bg-black/80 text-white px-2 py-1 border rounded">
- {{ T "back2top" . }}
- </p>
- </button>
-</div>
-
diff --git a/layouts/_partials/components/backlinks.html b/layouts/_partials/components/backlinks.html
deleted file mode 100644
index e97c295c..00000000
--- a/layouts/_partials/components/backlinks.html
+++ /dev/null
@@ -1,37 +0,0 @@
-{{ $type := .type }}
-{{ $filename := .filename }}
-{{ $ctx := .context }}
-{{ $referencedBy := slice }}
-
-{{ if eq $type "library" }}
- {{ range $ctx.Site.Pages }}
- {{ if and (isset .Params "mentioned_books") (in .Params.mentioned_books $filename) }}
- {{ $referencedBy = $referencedBy | append . }}
- {{ end }}
- {{ end }}
-{{ else if eq $type "cards" }}
- {{ range $ctx.Site.Pages }}
- {{ if and (isset .Params "related_cards") (in .Params.related_cards $filename) }}
- {{ $referencedBy = $referencedBy | append . }}
- {{ end }}
- {{ end }}
-{{ end }}
-
-{{- /* 如果有文章引用这个卡片,就显示它们 */ -}}
-{{ if gt (len $referencedBy) 0 }}
-<section class="related-posts post-content my-5">
- <h2 class="text-size-base m-0 flex items-center gap-2">
- <span>反向链接</span>
- <span class="inline-block bg-blockBg rounded-full px-1 text-secondary cursor-help text-size-sm"
- data-tooltip="这里列出了引用了该页面的其他文章">?</span>
- </h2>
- <ul class="my-4 list-none ps-4">
- {{- range $referencedBy }}
- <li class="flex gap-4">
- <span class="text-secondary">→</span>
- <a href="{{ .Permalink }}">{{ .Title }}</a>
- </li>
- {{- end }}
- </ul>
-</section>
-{{ end }}
diff --git a/layouts/_partials/components/category-pill.html b/layouts/_partials/components/category-pill.html
deleted file mode 100644
index 6146f0d4..00000000
--- a/layouts/_partials/components/category-pill.html
+++ /dev/null
@@ -1,7 +0,0 @@
-{{ with .GetTerms "categories" }}
- {{ with index . 0 }}
- <a class="post-category text-secondary" href="{{ .RelPermalink }}">
- <span>《{{ .LinkTitle }}》</span>
- </a>
- {{ end }}
-{{ end }}
diff --git a/layouts/_partials/components/date.html b/layouts/_partials/components/date.html
deleted file mode 100644
index 398e2b1d..00000000
--- a/layouts/_partials/components/date.html
+++ /dev/null
@@ -1,31 +0,0 @@
-{{ if .Date }}
- {{ $hour := .Date.Hour }}
- {{ $fuzzyTimes := slice
- (dict "limit" 5 "label" (T "fuzzyTimes.afterMidnight"))
- (dict "limit" 7 "label" (T "fuzzyTimes.earlyMorning"))
- (dict "limit" 11 "label" (T "fuzzyTimes.morning"))
- (dict "limit" 13 "label" (T "fuzzyTimes.noon"))
- (dict "limit" 17 "label" (T "fuzzyTimes.afternoon"))
- (dict "limit" 19 "label" (T "fuzzyTimes.evening"))
- (dict "limit" 22 "label" (T "fuzzyTimes.night"))
- }}
- {{ $fuzzyTime := (T "fuzzyTimes.midnight") }} {{/* default */}}
- {{ range $fuzzyTimes }}
- {{ if lt $hour .limit }}
- {{ $fuzzyTime = .label }}
- {{ break }}
- {{ end }}
- {{ end }}
-
- <time class="post-date dt-published"
- datetime="{{ .Date.Format "2006-01-02 15:04:05 MST" }}"
- data-pagefind-sort="date[datetime], weight[data-weight]"
- data-weight="20">
- {{ if eq .Site.Language.Lang "zh" }}
- {{ .Date.Format "2006年1月2日" }}
- {{ else }}
- {{ .Date.Format "January 2, 2006" }},
- {{ end }}
- {{ $fuzzyTime }}
- </time>
-{{ end }}
diff --git a/layouts/_partials/components/logo.html b/layouts/_partials/components/logo.html
deleted file mode 100644
index 88c2284e..00000000
--- a/layouts/_partials/components/logo.html
+++ /dev/null
@@ -1,18 +0,0 @@
-{{ $ctx := .ctx }}
-{{ $link := .link | default "" }}
-{{- $src :=
- (or .ctx.Params.logo
- (printf "%s%s"
- (.ctx.Site.Params.assetBaseUrl)
- (.ctx.Site.Params.logo)))
--}}
-{{ $class := .class | default "" }}
-{{ $imageClass := .imageClass | default "" }}
-
-<a href="{{ $ctx.Site.LanguagePrefix }}/{{ $link }}"
- class="title-image-container {{ $class }}">
- <img src="{{ $src }}" alt="Logo"
- class="dark:invert title-image {{ $imageClass }}"
- style="view-transition-name: title-image"
- />
-</a>
diff --git a/layouts/_partials/components/microformats.html b/layouts/_partials/components/microformats.html
deleted file mode 100644
index 8cd64f50..00000000
--- a/layouts/_partials/components/microformats.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<div class="hidden p-author h-card pt">
- <img class="u-photo icon" alt="{{ .Site.Params.author.name }}"
- src="{{ printf "%s%s" .Site.Params.assetBaseUrl .Site.Params.author.avatar }}" />
- <a class="p-name u-url" href="{{ .Site.BaseURL }}"
- >{{ .Site.Params.author.name }}</a
- >
-</div>
-
-<a href="{{ .Permalink }}" class="u-url hidden"></a>
diff --git a/layouts/_partials/components/section-title.html b/layouts/_partials/components/section-title.html
deleted file mode 100644
index 698f71e8..00000000
--- a/layouts/_partials/components/section-title.html
+++ /dev/null
@@ -1,10 +0,0 @@
-{{ $left := .Left }}
-{{ $right := .Right }}
-<h2 class="border-b-2 border-b-solid border-[var(--border-color)]
- py-2 text-6 flex justify-between items-center
- sticky top-0 bg-[var(--background-color)] z-1">
- <span>{{ $left }}</span>
- <span class="font-mono text-secondary text-3">
- {{ $right }}
- </span>
-</h2>
diff --git a/layouts/_partials/components/shade-mask.html b/layouts/_partials/components/shade-mask.html
deleted file mode 100644
index c53415d8..00000000
--- a/layouts/_partials/components/shade-mask.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<!-- 上渐变 -->
-<div class="pointer-events-none fixed top-0 left-0 w-full h-22 z-20
- bg-gradient-to-b from-bg to-transparent "></div>
-
-<!-- 下渐变 -->
-<div class="pointer-events-none fixed bottom-0 left-0 w-full h-22 z-20
- bg-gradient-to-t from-bg to-transparent "></div>
diff --git a/layouts/_partials/components/svg-filters.html b/layouts/_partials/components/svg-filters.html
deleted file mode 100644
index 5e68d6ec..00000000
--- a/layouts/_partials/components/svg-filters.html
+++ /dev/null
@@ -1,4 +0,0 @@
-<div style="display:none;">
- <svg class="hidden" xmlns="http://www.w3.org/2000/svg"><filter id="x" height="500%"><feTurbulence baseFrequency="0.01 0.02" numOctaves="2" result="t0"></feTurbulence><feDisplacementMap in="SourceGraphic" in2="t0" result="d0" scale="4"></feDisplacementMap><feComposite in="SourceGraphic" in2="d0" operator="atop" result="0"></feComposite><feTurbulence baseFrequency="1" numOctaves="2" result="t1"></feTurbulence><feDisplacementMap in="0" in2="t1" result="d1" scale="1"></feDisplacementMap><feComposite in="0" in2="d1" operator="atop" result="1"></feComposite><feOffset dx="-3" dy="-3" in="1"></feOffset></filter></svg>
- <svg class="hidden" xmlns="http://www.w3.org/2000/svg"><filter id="xs"><feTurbulence baseFrequency="0.01 0.02" numOctaves="2" result="t0"></feTurbulence><feDisplacementMap in="SourceGraphic" in2="t0" result="d0" scale="4"></feDisplacementMap><feComposite in="SourceGraphic" in2="d0" operator="atop" result="0"></feComposite><feTurbulence baseFrequency="1" numOctaves="2" result="t1"></feTurbulence><feDisplacementMap in="0" in2="t1" result="d1" scale="1"></feDisplacementMap><feComposite in="0" in2="d1" operator="atop" result="1"></feComposite><feOffset dx="-3" dy="-3" in="1"></feOffset></filter></svg>
-</div>
diff --git a/layouts/_partials/components/tags.html b/layouts/_partials/components/tags.html
deleted file mode 100644
index 78d87f5b..00000000
--- a/layouts/_partials/components/tags.html
+++ /dev/null
@@ -1,3 +0,0 @@
-{{ range .Params.tags }}
-<a class="tag text-secondary no-underline!" href="{{ site.LanguagePrefix }}/tags/{{ lower . | urlize }}/">#{{ . }}</a>
-{{ end }}
diff --git a/layouts/_partials/components/wordcount.html b/layouts/_partials/components/wordcount.html
deleted file mode 100644
index 526acaa4..00000000
--- a/layouts/_partials/components/wordcount.html
+++ /dev/null
@@ -1 +0,0 @@
-<span>{{ printf (T "postPage.wordcount") .WordCount }}</span>
diff --git a/layouts/_partials/content.html b/layouts/_partials/content.html
deleted file mode 100644
index c3c61cd5..00000000
--- a/layouts/_partials/content.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<div class="e-content min-h-[60%] leading-loose mb-8 markdown-body text-size-md md:text-size-lg"
- style="view-transition-name: post-content-{{ .File.UniqueID }}">
- {{ partial "posts/toc" . }}
- <div id="post-content">
- {{ partial "utils/render" .Content }}
- </div>
- {{ partial "posts/endnotes" . }}
-</div>
-
diff --git a/layouts/_partials/footer.html b/layouts/_partials/footer.html
deleted file mode 100644
index bf28dc51..00000000
--- a/layouts/_partials/footer.html
+++ /dev/null
@@ -1,39 +0,0 @@
-<footer class="pagefind-exclude my-8 mx-auto font-mono px-4 md:px-0
- text-sm
- md:w-[var(--page-width)] md:flex md:justify-between">
- <!-- copyright -->
- <section>
- <p class="copyright">&copy; 2022-{{ now | dateFormat "2006" }} <a href="https://www.eltr.ac/" target="_blank">Eltrac</a></p>
- <p class="license">{{ T "footer.licenseStatement" (printf "<a href=\"https://creativecommons.org/licenses/by-sa/4.0/\" target=\"_blank\">CC BY-SA 4.0</a>") | safeHTML }}</p>
- </section>
- <!-- links -->
- <section class="flex justify-between items-center
- md:justify-start md:flex-col md:items-end">
-
- <!-- IndieWeb ring -->
- <p class="inline-flex justify-center items-center gap-2">
- <a href="https://xn--sr8hvo.ws/previous">←</a>
- <a href="https://xn--sr8hvo.ws">IndieWeb ring</a>
- <a href="https://xn--sr8hvo.ws/next">→</a>
- </p>
- <!-- External Links -->
- <ul class="list-style-none flex items-center gap-2 ps-0 m-0 md:justify-end">
- {{ range .Site.Params.footerExternalLinks }}
- <li class="inline-flex items-center">
- <a href="{{ .link }}" title="{{ .name }}" target="_blank" data-tooltip
- class="transition opacity-70 hover:opacity-100">
- <img
- class="h-4 w-auto inline-block grayscale dark:invert"
- src="{{ .icon }}"
- alt="{{ .name }} icon."
- loading="lazy"
- width="1rem"
- height="1rem"
- />
- </a>
- </li>
- {{ end }}
- </ul>
-
- </section>
-</footer>
diff --git a/layouts/_partials/head.html b/layouts/_partials/head.html
deleted file mode 100644
index 3a8cd25c..00000000
--- a/layouts/_partials/head.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <link rel="preconnect" href="https://r2.eltr.ac" />
- {{ hugo.Generator }}
- {{ partial "head/siteinfo" . }}
- {{ partial "head/verification" . }}
- {{ partial "head/css" . }}
- {{ partial "head/scripts" . }}
-</head>
diff --git a/layouts/_partials/head/css.html b/layouts/_partials/head/css.html
deleted file mode 100644
index 7ff49fd5..00000000
--- a/layouts/_partials/head/css.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<!-- Pagefind -->
-<link rel="stylesheet" href="/pagefind/pagefind-ui.css">
-
-<!-- Extra -->
-{{ range .Site.Params.extraCSSFiles -}}
-<link
- rel="stylesheet"
- href="{{ $.Site.Params.staticPrefix }}{{ . | relURL }}"
-/>
-{{- end }}
-
-<!-- theme css -->
-{{ with resources.Get "css/uno.css" | minify }}
-<style>{{ .Content | safeCSS }}</style>
-{{ end }}
-
-{{ with resources.Get "css/main.scss" | css.Sass | minify }}
-<style>{{ .Content | safeCSS }}</style>
-{{ end }}
diff --git a/layouts/_partials/head/scripts.html b/layouts/_partials/head/scripts.html
deleted file mode 100644
index f067944c..00000000
--- a/layouts/_partials/head/scripts.html
+++ /dev/null
@@ -1,4 +0,0 @@
-{{ with resources.Get "js/darkmode.js" }}
-<script>{{ .Content | safeJS }}</script>
-{{ end }}
-
diff --git a/layouts/_partials/head/siteinfo.html b/layouts/_partials/head/siteinfo.html
deleted file mode 100644
index e251a009..00000000
--- a/layouts/_partials/head/siteinfo.html
+++ /dev/null
@@ -1,59 +0,0 @@
-<!-- Link preview meta tags -->
-{{- $isHome := .IsHome -}}
-{{- $title := cond $isHome .Site.Title .Title -}}
-{{- $description := cond $isHome .Site.Params.description (default .Summary .Description | plainify) -}}
-{{- $ogType := cond $isHome "website" "article" -}}
-{{- $image := cond (isset .Params "banner")
- .Params.banner
- (cond (isset .Params "cover")
- .Params.cover
- .Site.Params.favicon)
--}}
-
-<title>{{ $title }}</title>
-<link rel="canonical" href="{{ .Permalink }}" />
-<meta name="author" content="{{ .Site.Params.author.name }}" />
-<link rel="icon" href="{{ .Site.Params.favicon }}">
-<meta property="og:url" content="{{ .Permalink }}" />
-<meta property="og:title" content="{{ $title }}" />
-<meta property="og:type" content="{{ $ogType }}" />
-<meta property="og:description" content="{{ $description }}" />
-<meta name="description" content="{{ $description }}" />
-<meta property="og:locale" content="{{ .Site.LanguageCode }}" />
-<meta property="og:image" content="{{ $image }}" />
-
-<!-- RSS -->
-<link rel="alternate" type="application/atom+xml" href="{{.Site.BaseURL}}index.xml" title="{{ .Site.Title }}">
-<link href="{{ .Site.Params.staticPrefix }}{{ "index.xml" | relURL }}" rel="alternate" type="application/rss+xml"
- title="{{ .Site.Title }}">
-
-<!-- JSON-LD -->
-<script type="application/ld+json">
- {
- "@context" : "http://schema.org",
- "@type" : "BlogPosting",
- "mainEntityOfPage": {
- "@type": "WebPage",
- "@id": "{{ .Site.BaseURL }}"
- },
- "articleSection" : "{{ .Section }}",
- "name" : "{{ .Title }}",
- "headline" : "{{ .Title }}",
- {{ if .IsHome -}}
- "description" : "{{ .Site.Params.description | plainify }}",
- {{- else -}}
- "description" : "{{ default .Summary .Description | plainify }}",
- {{- end }}
- "inLanguage" : "zh-CN",
- "author" : "{{ .Site.Params.author.name }}",
- "creator" : "{{ .Site.Params.author.name }}",
- "publisher": "{{ .Site.Params.author.name }}",
- "accountablePerson" : "{{ .Site.Params.author.name }}",
- "copyrightHolder" : "{{ .Site.Params.author.name }}",
- "copyrightYear" : "{{ .Date.Format "2006" }}",
- "datePublished": "{{ .Date }}",
- "dateModified" : "{{ .Date }}",
- "url" : "{{ .Permalink }}",
- "keywords" : [ {{ if isset .Params "tags" }}{{ range .Params.tags }}"{{ . }}",{{ end }}{{ end }} ]
- }
-</script>
diff --git a/layouts/_partials/head/verification.html b/layouts/_partials/head/verification.html
deleted file mode 100644
index 11705435..00000000
--- a/layouts/_partials/head/verification.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<!-- verify my identity -->
-<link rel="me" href="https://c7.io/@eltrac">
-<link rel="me" href="https://akk.eltr.ac/@eltrac">
-<link rel="me" href="https://github.com/BigCoke233" />
-<link rel="me" href="mailto:hi@guhub.cn" />
-<link rel="me" href="mailto:hi@eltr.ac" />
-<meta name="fediverse:creator" content="@eltrac@eltr.ac">
-
-<!-- webmention -->
-<link rel="webmention" href="https://wm.geedea.pro/endpoint" />
diff --git a/layouts/_partials/header.html b/layouts/_partials/header.html
deleted file mode 100644
index 279c822b..00000000
--- a/layouts/_partials/header.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<header class="pagefind-exclude
- md:flex md:justify-between mb-4 mx-auto max-w-[var(--page-width)]">
- <!-- Logo & Title -->
- <div class="flex items-center justify-center gap-5
- md:flex-col md:items-start md:justify-start md:gap-2">
- {{ partial "components/logo" (dict "imageClass" "w-12 md:w-20 h-auto" "ctx" .) }}
- <a class="text-8 font-900 text-center tracking-widest
- xerox hover:no-underline"
- href="{{ .Site.LanguagePrefix }}/"
- >
- {{ if .IsHome }}
- {{ .Site.Title }}
- {{ else }}
- {{ if eq .Kind "term" }}
- {{ if eq .Data.Singular "tag" }}#{{ else }}+{{ end }}
- {{ end }}
- {{ .Title }}
- {{ end }}
- </a
- >
- </div>
- <!-- Navigation -->
- <div class="flex justify-center items-center gap-3 text-size-base
- md:flex-col md:items-end md:justify-start md:pl-6">
- {{ partial "header/navigation" . }}
- {{ partial "header/other-navigation" . }}
- </div>
-</header>
diff --git a/layouts/_partials/header/navigation.html b/layouts/_partials/header/navigation.html
deleted file mode 100644
index 168d614f..00000000
--- a/layouts/_partials/header/navigation.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<nav class="my-6 flex justify-center items-center w-fit rounded-4 overflow-hidden">
- {{ range .Site.Params.nav }}
- <a class="inline-block py-1 px-[0.35rem] md:px-2 first:pl-3 last:pr-3
- block hover:no-underline text-nowrap
- {{ if eq $.Page.RelPermalink .link }}
- text-[var(--text-color)] bg-[var(--block-background-color)]
- {{ else }}
- text-[var(--background-color)] bg-[var(--text-color)]
- {{ end }}"
- href="{{ .link }}"
- >{{ .name }}</a>
- {{ end }}
-</nav>
diff --git a/layouts/_partials/header/other-navigation.html b/layouts/_partials/header/other-navigation.html
deleted file mode 100644
index 4be0dba0..00000000
--- a/layouts/_partials/header/other-navigation.html
+++ /dev/null
@@ -1,29 +0,0 @@
-{{ $langButtonSize := "w-4 h-4" }}
-
-<div class="flex gap-2 pr-2">
- <!-- theme switch -->
- <label for="theme-select" class="hidden">colorscheme</label>
- <select id="theme-select"
- class="bg-neutral/10 border-1 border-[var(--text-color)] border-solid rd text-[var(--text-color)] font-serif text-size-[0.5rem] font-extrabold">
- {{ $switches := slice "auto" "light" "dark" }}
- {{ range $switches }}
- <option value="{{ . }}">{{ T (printf "theme.%s" .) }}</option>
- {{ end }}
- </select>
- <!-- language switch -->
- {{- $lang := .Site.Language.Lang -}}
- {{- $switch := dict
- "en" (dict "url" "/zh/" "label" "ZH" "title" "查看中文博客")
- "zh" (dict "url" "/en/" "label" "EN" "title" "View English Blog") -}}
- {{- $entry := index $switch $lang -}}
- <a
- href="{{ $entry.url }}"
- class="rd-full text-center hover:no-underline {{ $langButtonSize }}
- bg-neutral/10 border-1 border-[var(--text-color)] border-solid
- bg-[var(--block-background-color)]
- flex items-center justify-center"
- title="{{ $entry.title }}"
- >
- <span class="text-size-[0.5rem] font-extrabold">{{ $entry.label }}</span>
- </a>
-</div>
diff --git a/layouts/_partials/home/home-nav-item.html b/layouts/_partials/home/home-nav-item.html
deleted file mode 100644
index b9b70c0f..00000000
--- a/layouts/_partials/home/home-nav-item.html
+++ /dev/null
@@ -1,15 +0,0 @@
-{{ $active := .active }}
-{{ $link := .link }}
-{{ $text := .text }}
-
-<a href="{{ .Site.LanguagePrefix }}{{ $link }}"
- class="texl-base md:text-lg relative
- hover:no-underline relative
- {{ if $active }}font-extrabold{{ end }}"
->
- {{ $text }}
- {{ if $active }}
- <div class="absolute left-0 right-0 text-center top-3"
- style="view-transition-name: home-nav-item-emphasis;">·</div>
- {{ end }}
-</a>
diff --git a/layouts/_partials/home/home-nav.html b/layouts/_partials/home/home-nav.html
deleted file mode 100644
index ce66e563..00000000
--- a/layouts/_partials/home/home-nav.html
+++ /dev/null
@@ -1,11 +0,0 @@
-{{ if eq .Site.Language.Lang "zh" }}
-<nav id="home-nav" class="relative w-full ps-0 flex list-none gap-4 text-size-sm mx-auto max-w-[var(--page-width)]">
- {{ range .Site.Params.homenav }}
- {{ partial "home/home-nav-item" (dict
- "text" .name
- "link" .link
- "active" (eq .link $.Page.RelPermalink)
- ) }}
- {{ end }}
-</nav>
-{{ end }}
diff --git a/layouts/_partials/home/latest-posts.html b/layouts/_partials/home/latest-posts.html
deleted file mode 100644
index ac015111..00000000
--- a/layouts/_partials/home/latest-posts.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!-- Latest Posts -->
-<section class="pagefind-exclude flex flex-col my-4">
- {{ $firstPost := true }}
- {{ range first 12 (where site.RegularPages "Type" "in" site.Params.mainSections) }}
- {{ partial "items/post" (dict
- "ctx" .
- "showSummary" $firstPost
- ) }}
- {{ $firstPost = false }}
- {{ end }}
-</section>
diff --git a/layouts/_partials/home/microformats.html b/layouts/_partials/home/microformats.html
deleted file mode 100644
index 8641b04c..00000000
--- a/layouts/_partials/home/microformats.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<div class="hidden p-author h-card pt">
- <img class="u-photo icon" alt="{{ .Site.Params.author.name }}"
- src="{{ printf "%s%s" .Site.Params.assetBaseUrl .Site.Params.author.avatar }}" />
- <a class="p-name u-url" rel="me" href="{{ .Site.BaseURL }}"
- >{{ .Site.Params.author.name }}</a>
- <a class="u-url" rel="me" href="https://www.eltr.ac/">Home</a>
-</div>
diff --git a/layouts/_partials/home/more-links.html b/layouts/_partials/home/more-links.html
deleted file mode 100644
index 6201f642..00000000
--- a/layouts/_partials/home/more-links.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!-- more links: see archive & slash pages -->
-<div class="flex justify-between items-center">
- <div>
- <a class="small-button" href="{{ if eq .Site.Language.Lang "zh" }}/archive{{ else }}{{ .Site.LanguagePrefix }}/posts{{ end }}">
- {{ T "seeArchive" }} →
- </a>
- </div>
- <ul class="list-none flex gap-1 md:gap-2 text-sm md:text-base ps-0 my-2 mx-0 md:justify-end">
- {{ range .Site.Params.internalLinks }}
- <li><a href="{{ .link }}" title="{{ .name }}"
- class="text-secondary">{{ .name }}</a></li>
- <li class="text-secondary last:hidden">·</li>
- {{ end }}
- </ul>
-</div>
diff --git a/layouts/_partials/items/book.html b/layouts/_partials/items/book.html
deleted file mode 100644
index 5b6e61c2..00000000
--- a/layouts/_partials/items/book.html
+++ /dev/null
@@ -1,36 +0,0 @@
-{{ $ctx := .ctx }}
-{{ $NoViewTransition := (or .NoViewTransition false) }}
-
-<!-- Transform cover images via Cloudflare URL patterns -->
-{{ $splitURL := split $ctx.Params.cover "/" }}
-{{ $cover := "" }}
-{{ $i := 0 }}
-{{ range $splitURL }}
- {{ if eq $i 3 }}
- {{ $cover = printf "%s%s" $cover "cdn-cgi/image/width=150,quality=75/" }}
- {{ end }}
- {{ $cover = printf "%s%s/" $cover . }}
- {{ $i = add $i 1 }}
-{{ end }}
-{{ $cover = strings.TrimSuffix "/" $cover }}
-
-<div{{ if eq .Params.rating 1 }} class="opacity-50 z-0"{{ end }}
- {{ if not $NoViewTransition }}style="view-transition-name: book-{{ $ctx.File.UniqueID }}"{{ end }}>
- <a href="{{ $ctx.Permalink }}"
- {{ if not $NoViewTransition }}style="view-transition-name: book-{{ $ctx.Title }}"{{ end }}
- class="border-3 border-solid rotate-3 shadow-md block
- hover:rotate-0 hover:-translate-y-2 hover:scale-110 transition
-
- {{ if eq $ctx.Params.rating 1 }} relative
- {{ else if eq $ctx.Params.rating 5 }} border-amber-300 shadow-amber-200 shadow-xl
- {{ else }} border-white{{ end }}">
- <img class="lazy w-full block min-h-[120px] bg-neutral-500" src="{{ $cover }}" />
- {{ if eq $ctx.Params.rating 1 }}
- <div class="absolute z-1 top-[25%] left-[25%] h-[50%] w-[50%]"
- style="background-image: url('https://r2.eltr.ac/uPic/2025/05/thumbs-down.png');
- background-size: 100%;
- background-position: center;
- background-repeat: no-repeat;"></div>
- {{ end }}
- </a>
-</div>
diff --git a/layouts/_partials/items/card.html b/layouts/_partials/items/card.html
deleted file mode 100644
index 01a3cfb8..00000000
--- a/layouts/_partials/items/card.html
+++ /dev/null
@@ -1,19 +0,0 @@
-{{ $ctx := .context }}
-{{ $showSummary := .summary }}
-{{ $summaryClass := .summaryClass }}
-<div class="relative p-6 bg-white dark:bg-neutral-800 rounded-lg shadow-md border border-gray-200 dark:border-gray-700"
- style="view-transition-name: card-{{ $ctx.File.UniqueID }}">
- <div class="card-header">
- <h3 class="text-xl font-extrabold m-0 text-gray-900 dark:text-gray-100"
- data-pagefind-meta="title"
- data-pagefind-sort="date[data-date], weight[data-weight]"
- data-date="{{ .Date.Format "2006-01-02" }}"
- data-weight="5">
- <a href="{{ $ctx.RelPermalink }}" class="no-underline! text-[var(--text-color)]!">{{ $ctx.Title }}</a>
- </h3>
- <div class="text-base m-0">{{ partial "components/tags" $ctx }}</div>
- </div>
- <div class="{{ $summaryClass }} mt-2 leading-loose markdown-body">
- {{ if $showSummary }}{{ $ctx.Summary }}{{ else }}{{ $ctx.Content }}{{ end }}
- </div>
-</div>
diff --git a/layouts/_partials/items/post-small.html b/layouts/_partials/items/post-small.html
deleted file mode 100644
index 28a4a995..00000000
--- a/layouts/_partials/items/post-small.html
+++ /dev/null
@@ -1,11 +0,0 @@
-{{ $isWeekly := (eq .Params.categories "稻草人周刊") }}
-<li class="flex justify-between text-size-lg
- {{ if $isWeekly }} weekly animate-duration-500 transition-opacity{{ end }}">
- <a href="{{ .RelPermalink }}">
- {{ .Title }}{{ with .Params.subtitle }}:<span class="text-secondary">{{. }}</span>
- {{ end }}
- </a>
- <time class="text-size-sm font-mono text-secondary flex-shrink-0">
- {{ .Date.Format "2006-1-2" }}
- </time>
-</li>
diff --git a/layouts/_partials/items/post.html b/layouts/_partials/items/post.html
deleted file mode 100644
index 5527ea6c..00000000
--- a/layouts/_partials/items/post.html
+++ /dev/null
@@ -1,41 +0,0 @@
-{{ $ctx := .ctx }}
-{{ $showSummary := .showSummary }}
-<div class="posts-item w-full my-2"
- style="view-transition-name: post-{{ .ctx.File.UniqueID }}">
- <header class="w-full md:flex md:justify-between">
- <div>
- <p class="font-mono text-secondary">
- <time>{{ .ctx.Date.Format "January 2" }},</time>
- <span>in <a href="/{{ .ctx.Section }}/">{{ .ctx.Section }}</a></span>
- </p>
- <h2 class="xerox"
- {{ if $showSummary }} style="margin-bottom: 0"{{ end }}>
- <a href="{{ .ctx.Permalink }}">
- {{ if eq .ctx.Section "library" }}
- 读《{{ .ctx.Title }}》
- {{ else }}
- {{ .ctx.Title }}
- {{ end }}
- </a>
- {{ if eq .ctx.Section "fictions" }}
- <span class="font-normal text-4 text-secondary">小说</span>
- {{ end }}
- </h2>
- </div>
- {{ with .ctx.Params.categories }}
- <div class="my-4">
- {{ partial "components/category-pill" $ctx }}
- </div>
- {{ end }}
- </header>
- {{ if or $showSummary .ctx.Params.description }}
- <div class="markdown-body text-size-lg leading-relaxed"
- style="view-transition-name: post-content-{{ .ctx.File.UniqueID }}">
- {{ if $showSummary }}
- {{ .ctx.Summary }}
- {{ else if .ctx.Params.description }}
- {{ .ctx.Params.description }}
- {{ end }}
- </div>
- {{ end }}
-</div>
diff --git a/layouts/_partials/posts/action-area.html b/layouts/_partials/posts/action-area.html
deleted file mode 100644
index 06f0003d..00000000
--- a/layouts/_partials/posts/action-area.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<div popover
- id="action-area"
- class="bg-white dark:bg-neutral-800
- border border-neutral-200 dark:border-neutral-600
- rd-md shadow-lg p-4 w-80">
- <div class="grid grid-cols-2 gap-4">
- {{ partial "posts/fediverse-form" . }}
- {{ partial "posts/webmention-form" . }}
- </div>
- <div class="flex justify-between mt-2 items-center">
- <p class="text-sm text-secondary m-0"><a href="mailto:hi@eltr.ac?subject=Re%3A%20{{ .Title }}">📧 {{ T "actionMenu.email" }}</a></p>
- {{ if eq .Site.Language.Lang "zh" }}
- <p class="m-0 text-xs"><a class="text-secondary" href="/posts/site-report-4/#所以怎么点赞和评论你的博客">这是什么?</a></p>
- {{ end }}
- </div>
-</div>
diff --git a/layouts/_partials/posts/banner.html b/layouts/_partials/posts/banner.html
deleted file mode 100644
index 6acaafdc..00000000
--- a/layouts/_partials/posts/banner.html
+++ /dev/null
@@ -1,9 +0,0 @@
-{{ $page := . }}
-{{ with .Params.banner }}
-<img
- class="lazy w-full h-auto block rounded-lg{{ if $page.Params.bannerAutoInvert }} dark:invert{{ end }}"
- loading="lazy"
- data-pagefind-meta="image[src]"
- src="{{ . }}"
->
-{{ end }}
diff --git a/layouts/_partials/posts/comment.html b/layouts/_partials/posts/comment.html
deleted file mode 100644
index 90757781..00000000
--- a/layouts/_partials/posts/comment.html
+++ /dev/null
@@ -1,38 +0,0 @@
-<!--
- Giscus has been abandoned since 2026-01-30,
- old data from GitHub Discussion and some other comment systems
- has been exported to `data/gicus.json`
- They are rendered here if found.
--->
-{{ $cutoffDate := time.AsTime "2026-01-30" }}
-{{ if .Params.Date.Before $cutoffDate }}
- {{ $giscusData := hugo.Data.giscus }}
- {{ $pageTitle := .Title }}
- {{ range $giscusData }}
- {{ if eq .title $pageTitle }}
- {{ $url := .url }}
- {{ with .comments.nodes }}
- <details>
- <summary class="text-size-sm text-secondary cursor-pointer">博客的评论区已经被禁用,旧的数据已经导出,可以点击这行字查看。</summary>
- <div class="my-4">
- {{ range . }}
- <div class="text-md py-4 px-1">
- <div class="mb-4 flex justify-between">
- <span class="font-bold">{{ .author.login }}</span>
- <span class="text-secondary">{{ .createdAt | time.Format "2006/01/02" }}</span>
- </div>
- <div>
- {{ .body | markdownify }}
- </div>
- </div>
- {{ end }}
- </div>
- {{ with $url }}
- <p><a href="{{ . }}" class="small-button" target="_blank">Full GitHub Discussion →</a></p>
- {{ end }}
- <hr />
- </details>
- {{ end }}
- {{ end }}
- {{ end }}
-{{ end }}
diff --git a/layouts/_partials/posts/endnotes.html b/layouts/_partials/posts/endnotes.html
deleted file mode 100644
index 107ffd77..00000000
--- a/layouts/_partials/posts/endnotes.html
+++ /dev/null
@@ -1,13 +0,0 @@
-{{ if .Params.endnotes }}
-<hr>
-<div id="post-endnotes" class="text-secondary text-4">
- <ul class="list-none">
- {{ range .Params.endnotes }}
- <li class="flex gap-4 pl-4">
- <span>→</span>
- <span>{{ . | markdownify }}</span>
- </li>
- {{ end }}
- </ul>
-</div>
-{{ end }}
diff --git a/layouts/_partials/posts/fediverse-form.html b/layouts/_partials/posts/fediverse-form.html
deleted file mode 100644
index faff355f..00000000
--- a/layouts/_partials/posts/fediverse-form.html
+++ /dev/null
@@ -1,14 +0,0 @@
-{{ if .Params.toot }}
-<div class="flex flex-col gap-2">
- <h4 class="text-sm font-semibold m-0 dark:text-white">{{ T "actionMenu.fediverse" }}</h4>
- <input type="text" id="fediverse-instance" placeholder="{{ T "actionMenu.fediversePlaceholder" }}" class="text-sm px-2 py-1 border border-neutral-300 dark:border-neutral-600 rounded bg-transparent dark:text-white">
- <div class="flex gap-2">
- <button id="fediform-copy-button" class="text-xs px-2 py-1 bg-neutral-100 dark:bg-neutral-700 rounded hover:bg-neutral-200 dark:hover:bg-neutral-700 transition-colors">📋</button>
-
- <button id="fediform-button" class="w-full text-xs px-2 py-1 bg-neutral-200 dark:bg-neutral-600 rounded hover:bg-neutral-300 dark:hover:bg-neutral-500 transition-colors">{{ T "actionMenu.openToot" }}</button>
- </div>
-</div>
-<script>
- const tootUrl = '{{ .Params.toot }}'
-</script>
-{{ end }}
diff --git a/layouts/_partials/posts/toc.html b/layouts/_partials/posts/toc.html
deleted file mode 100644
index 0bc96782..00000000
--- a/layouts/_partials/posts/toc.html
+++ /dev/null
@@ -1,10 +0,0 @@
-{{ $top := cond (eq .Section "posts") "top-[19rem]" (cond (eq .Section "library") "top-[34rem]" "top-[17rem]") }}
-{{ if .Params.toc }}
-<div id="toc-container"
- class="absolute bottom-0 left-[calc(50%_+_var(--page-width)_/_2)] right-auto
- h-full w-[calc(50%_-_var(--page-width)_/_2)] {{ $top }} hidden lg:block">
- <div id="toc"
- class="sticky top-12 text-size-xs xl:text-size-sm 2xl:text-size-base w-full"
- >{{ .TableOfContents }}</div>
-</div>
-{{ end }}
diff --git a/layouts/_partials/posts/webmention-form.html b/layouts/_partials/posts/webmention-form.html
deleted file mode 100644
index 4499f89b..00000000
--- a/layouts/_partials/posts/webmention-form.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<form action="https://wm.geedea.pro/endpoint" method="POST" class="flex flex-col gap-2">
- <h4 class="text-sm font-semibold m-0 dark:text-white">{{ T "actionMenu.webmention" }}</h4>
- <input type="url" name="source" placeholder="{{ T "actionMenu.webmentionPlaceholder" }}" class="text-sm px-2 py-1 border border-neutral-300 dark:border-neutral-600 rounded bg-transparent dark:text-white">
- <input type="hidden" name="target" value="{{ .Permalink }}">
- <button type="submit" class="text-xs px-2 py-1 bg-neutral-200 dark:bg-neutral-600 rounded hover:bg-neutral-300 dark:hover:bg-neutral-500 transition-colors">{{ T "actionMenu.send" }}</button>
-</form>
diff --git a/layouts/_partials/posts/webmention-mentions.html b/layouts/_partials/posts/webmention-mentions.html
deleted file mode 100644
index e4744bf7..00000000
--- a/layouts/_partials/posts/webmention-mentions.html
+++ /dev/null
@@ -1,56 +0,0 @@
-{{ with . }}
-<section class="my-4">
-<ul class="list-none p-0 m-0">
-{{ range . }}
- {{ if index . "microformats" }}
- {{ $mf := index . "microformats" "properties" }}
- {{ $author := dict }}
- {{ if $mf.author }}
- {{ if reflect.IsSlice $mf.author }}
- {{ $authorElem := index $mf.author 0 }}
- {{ if reflect.IsMap $authorElem }}
- {{ $author = index $authorElem "properties" }}
- {{ else }}
- {{ $author = $authorElem }}
- {{ end }}
- {{ else }}
- {{ $author = $mf.author }}
- {{ end }}
- {{ end }}
- {{ if eq (index .microformats.type 0) "h-card" }}
- {{ $author = $mf }}
- {{ end }}
- {{ $photo := "" }}
- {{ $authorName := "" }}
- {{ $authorUrl := "" }}
-
- {{ if reflect.IsMap $author }}
- {{ $photo = or (index . "extra" "proxied-photo") (index $author.photo 0) }}
- {{ $authorName = index $author.name 0 }}
- {{ $authorUrl = index $author.url 0 }}
- {{ else }}
- {{ $photo = index . "extra" "proxied-photo" }}
- {{ $authorName = $author }}
- {{ $authorUrl = .webmention.source }}
- {{ end }}
-
- <li class="flex gap-2">
- {{ if $photo }}
- <img src="{{ $photo }}" class="h-5 w-5 rd-full inline m-0">
- {{ else }}
- <div class="h-5 w-5 rd-full m-0 bg-neutral-300"></div>
- {{ end }}
- <a href="{{ $authorUrl }}" target="_blank">{{ $authorName }}</a>
- <a href="{{ .webmention.source }}" target="_blank">{{ T "webmention.mentionedThisPost" . }}</a>
- </li>
- {{ else }}
- <li class="flex gap-2">
- {{ $u := urls.Parse .webmention.source }}
- <div class="h-5 w-5 rd-full m-0 bg-neutral-300"></div>
- <span>{{ $u.Hostname }}</span>
- <a href="{{ .webmention.source }}" target="_blank">{{ T "webmention.mentionedThisPost" . }}</a></li>
- {{ end }}
-{{ end }}
-</ul>
-</section>
-{{ end }}
diff --git a/layouts/_partials/posts/webmention-replies.html b/layouts/_partials/posts/webmention-replies.html
deleted file mode 100644
index 66b64ef9..00000000
--- a/layouts/_partials/posts/webmention-replies.html
+++ /dev/null
@@ -1,69 +0,0 @@
-{{ with . }}
-<section class="flex flex-col gap-4 bg-[var(--background-color)]">
-{{ range . }}
- {{ $reply := index . "microformats" "properties" }}
- {{ $author := dict }}
- {{ $photo := "" }}
-
- {{ if $reply.author }}
- {{ if reflect.IsSlice $reply.author }}
- {{ $authorElem := index $reply.author 0 }}
- {{ if reflect.IsMap $authorElem }}
- {{ $author = index $authorElem "properties" }}
- {{ else }}
- {{ $author = $authorElem }}
- {{ end }}
- {{ $photo = or (index $author.photo 0) (index $reply.photo 0) }}
- {{ else }}
- {{ $author = $reply.author }}
- {{ $photo = index $reply.photo 0 }}
- {{ end }}
- {{ end }}
-
-<div class="relative">
- <header class="flex justify-between items-start">
- <div class="flex items-center gap-3">
- <img src="{{ $photo }}" alt="Profile Picture"
- class="h-8 w-8 rd-full" loading="lazy" />
- <div class="text-secondary">
- <p class="font-bold m-0">
- <a href="{{ if reflect.IsMap $author }}
- {{ or (index $author.url 0) (index $reply.url 0) }}
- {{ else }}
- {{ index $reply.url 0 }}
- {{ end }}">
- {{ if reflect.IsMap $author }}
- {{ replaceRE ":.*?:" "" (index $author.name 0) }}
- {{ else }}
- {{ $author }}
- {{ end }}
- </a>
- </p>
- {{ $time := (index $reply.published 0) }}
- {{ $isFormated := strings.Contains $time " " }}
- {{ if not $isFormated }}
- {{ $t := time.AsTime $time }}
- {{ $time = time.Format "2006-1-2 15:04" $t }}
- {{ end }}
- <p class="m-0"><time>{{ $time }}</time></p>
- </div>
- </div>
- <div class="flex items-start">
- <a href="{{ .webmention.source }}" target="_blank"
- title="{{ T "viewExternalSource" }}"
- data-tooltip>↗</a>
- </div>
- </header>
-
- <div class="max-h-[500px] overflow-y-auto overflow-x-hidden">
- <div class="webmention-body markdown-body leading-relaxed ml-3 pl-4 pr-2 b-l-4 b-l-solid b-neutral-200/50 dark:b-neutral-700/50">
- {{ index (index $reply.content 0) "html" | safeHTML }}
- {{ if strings.Contains .webmention.source "https://brid.gy" }}
- <p class="text-xs text-right text-secondary">通过 <a href="https://brid.gy/" target="_blank">Bridgy</a> 发送自联邦宇宙</p>
- {{ end }}
- </div>
- </div>
-</div>
-{{ end }}
-</section>
-{{ end }}
diff --git a/layouts/_partials/posts/webmention-summary.html b/layouts/_partials/posts/webmention-summary.html
deleted file mode 100644
index 18be7344..00000000
--- a/layouts/_partials/posts/webmention-summary.html
+++ /dev/null
@@ -1,54 +0,0 @@
-{{ $likes := .likes }}
-{{ $page := .page }}
-{{ $othercount := .othercount }}
-
-<section class="group relative mb-6 vertical-middle">
- <!-- Action Area Toggle -->
- <button
- popovertarget="action-area"
- data-tooltip
- title="{{ T "actionMenu.interact" }}"
- class="m-0 p-0 bg-transparent hover:no-underline cursor-pointer float-left mr-2">
- <div class="w-5 h-5 bg-neutral-200 dark:bg-neutral-600 flex justify-center items-center rd-full font-800">+</div>
- </button>
-
- <!-- Likes -->
- {{ range $likes }}
- {{ $authors := index . "microformats" "properties" "author" }}
- {{ $author := dict }}
- {{ $photo := "" }}
- {{ if $authors }}
- {{ if reflect.IsSlice $authors }}
- {{ $authorElem := index $authors 0 }}
- {{ if reflect.IsMap $authorElem }}
- {{ $author = index $authorElem "properties" }}
- {{ else }}
- {{ $author = $authorElem }}
- {{ end }}
- {{ else }}
- {{ $author = $authors }}
- {{ end }}
- {{ end }}
- {{ $photo = or (index . "extra" "proxied-photo") (index $author.photo 0) }}
- <a href="{{ if reflect.IsMap $author }}{{ index $author.url 0 }}{{ else }}#{{ end }}" target="_blank" title="{{ if reflect.IsMap $author }}{{ index $author.name 0 }}{{ else }}{{ $author }}{{ end }}" class="box-border hover:no-underline inline-block h-5 w-5 float-left -ml-1 hover:scale-150 transition-transform">
- {{ $value := math.Floor (mul math.Rand 80) }}
- {{ $rotate := cond (lt $value 40) (sub 10 $value) (sub $value 30) }}
- {{ if $photo }}
- <img src="{{ $photo }}" alt="Profile Picture"
- loading="lazy"
- class="h-5 w-5 rd-full transition-transform"
- style="{{ if ne $rotate 0 }}--rotate-amount: {{ $rotate }}deg;{{ end }}" />
- {{ else }}
- <div class="h-5 w-5 rd-full bg-neutral-300"></div>
- {{ end }}
- </a>
- {{ end }}
- <div class="text-secondary m-0 text-sm inline ml-2">
- {{ printf (T "webmention.likedBy") (len $likes ) }}
- {{ if gt $othercount 0 }}
- {{ printf (T "webmention.repliedAndMentionedBy") $othercount }}
- {{ end }}
- </div>
- <div class="clear-left"></div>
-</section>
-
diff --git a/layouts/_partials/posts/webmention.html b/layouts/_partials/posts/webmention.html
deleted file mode 100644
index 77b89f25..00000000
--- a/layouts/_partials/posts/webmention.html
+++ /dev/null
@@ -1,73 +0,0 @@
-{{ $page := . }}
-{{ $currentPagePath := .RelPermalink }}
-{{ $webmentions_url := .Site.Params.webmention.src }}
-
-{{ with try (resources.GetRemote $webmentions_url) }}
- {{ with .Err }}
- {{ errorf "%s" . }}
-
- {{ else with .Value }}
- {{ $webmentions := slice }}
- {{ $data := . | transform.Unmarshal }}
-
- {{ range $data }}
- {{ $urlObj := urls.Parse .webmention.target }}
- {{ $targetPath := $urlObj.Path }}
-
- {{ if or (strings.Contains $targetPath $currentPagePath)
- (strings.Contains $targetPath ($currentPagePath | urlquery)) }}
- {{ $webmentions = $webmentions | append . }}
- {{ end }}
- {{ end }}
-
- {{ $likes := slice }}
- {{ $replies := slice }}
- {{ $reposts := slice }}
- {{ $mentions := slice }}
-
- {{ range $webmentions }}
- {{ $props := index . "microformats" "properties" }}
- {{ $type := index . "microformats" "type" 0 }}
-
- {{ if eq $type "h-entry" }}
- {{ if index $props "like-of" }}
- {{ $likes = $likes | append . }}
-
-
- {{ else if index $props "repost-of" }}
- {{ $reposts = $mentions | append . }}
-
- {{ else }}
- {{ $replies = $replies | append . }}
-
- {{ end }}
- {{ else }}
- {{ $mentions = $mentions | append . }}
- {{ end }}
-
- {{ end }}
-
- {{ partial "posts/action-area" $page }}
- <details class="my-4 mb-5 no-mark">
- <summary class="cursor-pointer flex">
- {{ partial "posts/webmention-summary" (dict
- "likes" $likes
- "page" $page
- "othercount" (add (len $replies) (len $mentions))
- ) }}
- </summary>
- {{ with $page.Params.toot }}
- <p class="text-secondary text-sm">
- {{ $link := printf "<a href=\"%s\" target=\"_blank\">Eucalyptus</a>" . }}
- *{{ printf (T "webmention.bridgyNotice") $link | safeHTML }}
- </p>
- {{ end }}
- <div id="webmention-details">
- {{ partial "posts/webmention-replies" $replies }}
- {{ partial "posts/webmention-mentions" $mentions }}
- </div>
- </details>
- {{ else }}
- <p>Unable to fetch webmentions. Please contact webmaster.</p>
- {{ end }}
-{{ end }}
diff --git a/layouts/_partials/scripts.html b/layouts/_partials/scripts.html
deleted file mode 100644
index 5d782dd7..00000000
--- a/layouts/_partials/scripts.html
+++ /dev/null
@@ -1,43 +0,0 @@
-<!-- Theme Switch -->
-<script>
-document.addEventListener("DOMContentLoaded", () => {
- const themeSelect = document.getElementById('theme-select')
- themeSelect.value = localStorage.getItem('geedeapro.theme')
- themeSelect.onchange = () => switchTheme(themeSelect.value, true)
-})
-</script>
-
-<!-- global JS -->
-{{ $commonJS := slice
- (resources.Get "js/tooltip.js")
- (resources.Get "js/instantpage.min.js")
-}}
-{{ $commonBundle := $commonJS | resources.Concat "js/common-bundle.js" | minify | fingerprint }}
-<script src="{{ $commonBundle.RelPermalink }}" integrity="{{ $commonBundle.Data.Integrity }}" defer></script>
-
-<!-- content page only JS -->
-{{ if not .IsHome }}
- {{ $articleJS := slice
- (resources.Get "js/toc.js")
- (resources.Get "js/back2top.js")
- (resources.Get "js/fediform.js")
- }}
- {{ $articleBundle := $articleJS | resources.Concat "js/article-bundle.js" | minify | fingerprint }}
- <script src="{{ $articleBundle.RelPermalink }}" integrity="{{ $articleBundle.Data.Integrity }}" defer></script>
-{{ end }}
-
-<!-- libra.js -->
-<script type="module">
-document.addEventListener('DOMContentLoaded', async () => {
- const { default: LightBox } = await import('/js/libra.min.js');
- const lightbox = new LightBox({
- offset: { x: -8, y: -48 },
- selector: "[data-libra]:not(.disable-libra *)",
- });
-});
-</script>
-
-<!-- GoatCounter -->
-<script data-goatcounter="https://stats.geedea.pro/count"
- async src="//stats.geedea.pro/count.js"></script>
-
diff --git a/layouts/_partials/stats/external-link-rank.html b/layouts/_partials/stats/external-link-rank.html
deleted file mode 100644
index 4268d4d9..00000000
--- a/layouts/_partials/stats/external-link-rank.html
+++ /dev/null
@@ -1,37 +0,0 @@
-{{/* Find the maximum link count */}}
-{{ $max := 0 }}
-{{ range hugo.Data.externallinks }}
- {{ if gt (index . 1) $max }}
- {{ $max = index . 1 }}
- {{ end }}
-{{ end }}
-
-{{/* Sort by count (descending) */}}
-{{ $links := hugo.Data.externallinks }}
-{{ $sorted := slice }}
-{{ range $links }}
- {{ $sorted = $sorted | append (dict "domain" (index . 0) "count" (index . 1)) }}
-{{ end }}
-{{ $sorted = sort $sorted "count" "desc" }}
-
-<ol id="external-link-rank"
- class="p-0! m-0 box-border">
-{{ range $sorted }}
- {{ $label := .domain }}
- {{ $count := .count }}
- {{ if gt $count 4 }}
- {{ $percent := div (mul $count 100) $max }}
- <li class="list-none w-full my-2 box-border py-[0.1rem] px-2 relative">
- <div class="mx-2 flex justify-between items-center">
- <a class="inline-flex items-center gap-2 no-icon" href="https://{{ $label }}/" target="_blank">
- <img src="https://favicone.com/{{ $label }}?s=20"
- class="w-4 h-4 m-0!" loading="lazy" />
- {{ $label }}
- </a>
- <span class="text-secondary font-mono">{{ $count }}</span>
- </div>
- <div class="bg-gray-200 dark:bg-zinc-700 absolute top-0 left-0 right-0 bottom-0 -z-1" style="width:{{ $percent }}%"></div>
- </li>
- {{ end }}
-{{ end }}
-</ol>
diff --git a/layouts/_partials/stats/publish-time-chart.html b/layouts/_partials/stats/publish-time-chart.html
deleted file mode 100644
index 3fa35078..00000000
--- a/layouts/_partials/stats/publish-time-chart.html
+++ /dev/null
@@ -1,78 +0,0 @@
-{{/* 定义时间段 */}}
-{{ $fuzzyTimes := slice
- (dict "limit" 5 "label" "凌晨" "class" "dawn")
- (dict "limit" 11 "label" "早上" "class" "morning")
- (dict "limit" 13 "label" "中午" "class" "noon")
- (dict "limit" 17 "label" "下午" "class" "afternoon")
- (dict "limit" 22 "label" "晚上" "class" "night")
- (dict "limit" 24 "label" "深夜" "class" "late-night")
-}}
-
-{{/* 初始化时间段计数 */}}
-{{ $timeCounts := dict
- "凌晨" 0
- "清晨" 0
- "早上" 0
- "中午" 0
- "下午" 0
- "傍晚" 0
- "晚上" 0
- "深夜" 0
-}}
-
-{{/* 统计每个时间段的文章数量 */}}
-{{ $total := 0 }}
-{{ range .Site.RegularPages }}
- {{ if .Date }}
- {{ $hour := .Date.Hour }}
- {{ $fuzzyTime := "深夜" }}
- {{ range $fuzzyTimes }}
- {{ if lt $hour .limit }}
- {{ $fuzzyTime = .label }}
- {{ break }}
- {{ end }}
- {{ end }}
- {{ $total = add $total 1 }}
- {{ $currentCount := index $timeCounts $fuzzyTime }}
- {{ $timeCounts = merge $timeCounts (dict $fuzzyTime (add $currentCount 1)) }}
- {{ end }}
-{{ end }}
-
-<div class="w-full max-w-[700px] my-4">
- <div class="flex items-center gap-4 mb-4">
- <div class="text-size-2xl flex-shrink-0">☀️</div>
- <div class="flex gap-2 w-full h-6 dark:invert">
- {{ range $fuzzyTimes }}
- {{ $count := index $timeCounts .label }}
- {{ if gt $total 0 }}
- {{ $percentage := div (mul $count 100.0) $total }}
- {{ if gt $count 0 }}
- <div class="flex items-center justify-center
- text-white rounded-2xl text-size-sm font-500 relative
- bg-black opacity-{{ add (mul (int (div $percentage 10)) 10) 30 }}
- {{ .class }}"
- style="width: {{ printf "%.1f" $percentage }}%;"
- title="{{ .label }}: {{ $count }}篇 ({{ printf "%.1f" $percentage }}%)">
- {{ if gt $percentage 8 }}{{ .label }}{{ end }}
- </div>
- {{ end }}
- {{ end }}
- {{ end }}
- </div>
- <div class="text-size-2xl flex-shrink-0">🌙</div>
- </div>
-
- <div class="flex gap-2 mt-2 px-10">
- {{ range $fuzzyTimes }}
- {{ $count := index $timeCounts .label }}
- {{ if gt $count 0 }}
- {{ $percentage := div (mul $count 100.0) $total }}
- <div class="flex flex-col items-center text-size-xs
- text-secondary font-mono"
- style="width: {{ printf "%.1f" $percentage }}%;">
- <span class="font-600 text-[var(--primary-text-color)]">{{ $count }}</span>
- </div>
- {{ end }}
- {{ end }}
- </div>
-</div>
diff --git a/layouts/_partials/stats/stats-table.html b/layouts/_partials/stats/stats-table.html
deleted file mode 100644
index bb936721..00000000
--- a/layouts/_partials/stats/stats-table.html
+++ /dev/null
@@ -1,44 +0,0 @@
-<style>
-.site-stats-table td {
- padding: 0.5rem;
- text-align: left;
-}
-.site-stats-table td:nth-child(2n) {
- text-align: right;
-}
-.number-pill {
- text-align: center;
- display: inline-block;
- line-height: 1.75rem;
- box-sizing: border-box;
- border-radius: 5px;
- padding: 0 0.5rem;
- background-color: var(--block-background-color);
- font-size: 1rem;
-}
-</style>
-
-<table class="site-stats-table w-full max-w-[700px] border-collapse mb-6">
- <tbody>
- <tr>
- <td>页面总数</td>
- <td><span class="number-pill">{{ len .Site.RegularPages }}</span></td>
- <td>总字数</td>
- <td>
- <span class="number-pill">
- {{- $words := 0 -}}
- {{- range (where .Site.RegularPages "Section" "!=" "") -}}
- {{- $words = add $words .WordCount -}}
- {{- end -}}
- {{ lang.FormatNumber 0 $words }}
- </span>
- </td>
- </tr>
- <tr>
- <td>标签总数</td>
- <td><span class="number-pill">{{ len .Site.Taxonomies.tags }}</span></td>
- <td>文章系列数量</td>
- <td><span class="number-pill">{{ len .Site.Taxonomies.categories }}</span></td>
- </tr>
- </tbody>
-</table>
diff --git a/layouts/_partials/stats/word-count-chart.html b/layouts/_partials/stats/word-count-chart.html
deleted file mode 100644
index 835ecbda..00000000
--- a/layouts/_partials/stats/word-count-chart.html
+++ /dev/null
@@ -1,46 +0,0 @@
-{{/* Group word counts per month */}}
-{{ $monthly := dict }}
-{{ range .Site.RegularPages }}
- {{ $month := .Date.Format "2006-01" }}
- {{ $count := .WordCount }}
- {{ with index $monthly $month }}
- {{ $monthly = merge $monthly (dict $month (add . $count)) }}
- {{ else }}
- {{ $monthly = merge $monthly (dict $month $count) }}
- {{ end }}
-{{ end }}
-
-{{/* Sort months */}}
-{{ $months := slice }}
-{{ range $month, $_ := $monthly }}
- {{ $months = $months | append $month }}
-{{ end }}
-{{ $months = sort $months }}
-
-{{/* Find max value */}}
-{{ $max := 0 }}
-{{ range $month := $months }}
- {{ $val := index $monthly $month }}
- {{ if gt $val $max }}{{ $max = $val }}{{ end }}
-{{ end }}
-
-<div class="flex items-end justify-end h-[300px] gap-2 px-4
- text-size-xs w-full overflow-x-auto box-border">
- {{ range $month := $months }}
- {{ $val := index $monthly $month }}
- {{ $height := mul (div (float $val) (float $max)) 100 }}
- {{ $opacity := add 0.5 (div $height 200) }}
- <div class="flex flex-col justify-center">
- <div class="flex flex-col items-center justify-end
- w-4 gap-1 h-[200px] relative">
- <div class="text-size-[0.65rem]"
- style="writing-mode: vertical-rl;">{{ $val }}</div>
- <div class="w-full bg-gray-900 flex-shrink-0 transition dark:invert"
- style="height: {{ printf "%.1f" $height }}%;
- background-color: rgba(20,20,20,{{ printf "%.2f" $opacity }});"></div>
- </div>
- <div class="h-12 text-center flex-shrink"
- style="writing-mode: vertical-rl;">{{ $month }}</div>
- </div>
- {{ end }}
-</div>
diff --git a/layouts/_partials/taxonomy/all-categories.html b/layouts/_partials/taxonomy/all-categories.html
deleted file mode 100644
index 7cb5813a..00000000
--- a/layouts/_partials/taxonomy/all-categories.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<p class="text-sm text-secondary">* 表示常驻系列,其他系列可能会在完成后停止更新<p>
-<!-- Display Categories -->
-<div class="md:relative outbox md:h-[20rem] md:w-full">
-<section class="md:overflow-x-auto md:absolute md:left-0 md:right-0">
- <div class="flex flex-wrap justify-between md:flex-nowrap md:gap-6">
- <hr />
- {{ range sort (sort .Site.Taxonomies.categories ".Count" "desc") ".Page.Params.pinned" "desc" }}
- {{ if not .Page.Params.archive }}
- <a href="{{ .Page.RelPermalink }}"
- class="block hover:no-underline hover:-transform-translate-y-2 transition-transform
- md:writing-vertical"
- style="view-transition-name: category-{{ .Page.Title }};">
- <div>
- <h3 class="mx-2 xerox">
- 《{{ .Page.LinkTitle }}》
- {{ if .Page.Params.pinned }}*{{ end }}
- </h3>
- <p class="m-0 text-secondary mt-4">{{ .Page.Params.description | markdownify }}</p>
- </div>
- </a>
- <hr />
- {{ end }}
- {{ end }}
- </div>
-</section>
-</div>
-
-
-<p class="mt-4">
- <a class="small-button" href="/categories/uncategorized/">
- 查看随笔 <span class="text-secondary">→</span>
- </a>
-</p>
diff --git a/layouts/_partials/taxonomy/all-tags.html b/layouts/_partials/taxonomy/all-tags.html
deleted file mode 100644
index efd63fb4..00000000
--- a/layouts/_partials/taxonomy/all-tags.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<!-- Display Tags -->
-<section>
- {{ $categorizedTags := dict }}
- {{ $uncategorizedTags := slice }}
-
- <!-- Group tags by category -->
- {{ range $tagName, $tagPages := .Site.Taxonomies.tags }}
- {{ $tagPage := site.GetPage (printf "/tags/%s" $tagName) }}
- {{ $tagData := dict "Name" $tagName "Count" (len $tagPages) "Page" $tagPage }}
- {{ if $tagPage.Params.category }}
- {{ $category := $tagPage.Params.category }}
- {{ $categoryTags := index $categorizedTags $category | default slice }}
- {{ $categoryTags = $categoryTags | append $tagData }}
- {{ $categorizedTags = merge $categorizedTags (dict $category $categoryTags) }}
- {{ else }}
- {{ $uncategorizedTags = $uncategorizedTags | append $tagData }}
- {{ end }}
- {{ end }}
-
- <!-- Sort tags by count -->
- {{ $uncategorizedTags = sort $uncategorizedTags "Count" "desc" }}
- {{ range $category, $categoryTags := $categorizedTags }}
- {{ $categorizedTags = merge $categorizedTags (dict $category (sort $categoryTags "Count" "desc")) }}
- {{ end }}
-
- <!-- Display uncategorized tags first -->
- {{ if $uncategorizedTags }}
- <div class="flex flex-wrap gap-2">
- {{ range $uncategorizedTags }}
- {{ partial "taxonomy/tag-pill" . }}
- {{ end }}
- </div>
- {{ end }}
-
- <!-- Display categorized tags -->
- {{ range $category, $categoryTags := $categorizedTags }}
- <div>
- <h3>{{ $category }}</h3>
- <div class="flex flex-wrap gap-2">
- {{ range $categoryTags }}
- {{ partial "taxonomy/tag-pill" . }}
- {{ end }}
- </div>
- </div>
- {{ end }}
-</section>
diff --git a/layouts/_partials/taxonomy/archived-categories.html b/layouts/_partials/taxonomy/archived-categories.html
deleted file mode 100644
index 26ed68d8..00000000
--- a/layouts/_partials/taxonomy/archived-categories.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<ul class="list-none p-0">
- {{ range .Site.Taxonomies.categories }}
- {{ if .Page.Params.archive }}
- <li class="flex justify-between items-center gap-4">
- <a class="flex-shrink-0" href="{{ .Page.RelPermalink }}">
- <h3 class="xerox">《{{ .Page.LinkTitle }}》</h3>
- </a>
- <div class="w-full"><hr class="m-0" /></div>
- <span class="text-secondary font-mono flex-shrink-0">
- {{ T "archivePage.postCountMonthly" (len .Pages) }}
- </span>
- </li>
- {{ end }}
- {{ end }}
-</ul>
-
diff --git a/layouts/_partials/taxonomy/pagefind.html b/layouts/_partials/taxonomy/pagefind.html
deleted file mode 100644
index 2c41457d..00000000
--- a/layouts/_partials/taxonomy/pagefind.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<div id="pagefind" class="py-3"></div>
-<script src="/pagefind/pagefind-ui.js"></script>
-<script>
- window.addEventListener('DOMContentLoaded', () => {
- new PagefindUI({ element: "#pagefind", showSubResults: true });
- });
-</script>
diff --git a/layouts/_partials/taxonomy/tag-pill.html b/layouts/_partials/taxonomy/tag-pill.html
deleted file mode 100644
index ad13c62e..00000000
--- a/layouts/_partials/taxonomy/tag-pill.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<a href="{{ .Page.RelPermalink }}"
- class="inline-flex items-center gap-2 text-size-sm px-2 py-1
- transition-colors duration-300 rounded-md hover:no-underline
-
- {{ if lt .Count 4 }}
- bg-none border border-dashed border-[var(--border-color)] text-[var(--secondary-text-color)]
- hover:text-inherit hover:border-solid
- {{ else }}
- bg-[var(--block-background-color)]
- hover:bg-[var(--text-color)] hover:text-[var(--block-background-color)]
- {{ end }}">
- {{ if .Page.Params.icon }}
- {{ if or (hasPrefix .Page.Params.icon "http://") (hasPrefix .Page.Params.icon "https://") }}
- <span class="inline-flex items-center">
- <img src="{{ .Page.Params.icon }}" alt="{{ .Page.LinkTitle }}"
- style="height:1em;width:1em">
- </span>
- {{ else }}
- <span class="inline-flex items-center">{{ .Page.Params.icon }}</span>
- {{ end }}
- {{ end }}
- <span>{{ if not .Page.Params.icon }}#{{ end }}{{ .Page.LinkTitle }}</span>
- <span class="text-size-xs text-[var(--secondary-text-color)]">{{ .Count }}</span>
-</a>
diff --git a/layouts/_partials/template/post-page.html b/layouts/_partials/template/post-page.html
deleted file mode 100644
index 0b55d48a..00000000
--- a/layouts/_partials/template/post-page.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<article class="h-entry">
- <!-- Post Header -->
- <header
- style="view-transition-name: post-{{ .File.UniqueID }}"
- class="mb-8 relative"
- >
- {{ if .Params.banner }}
- {{ partial "components/logo" (dict
- "class" "block round-sticker w-14 h-14 lg:w-28 lg:h-28 right-2 lg:-right-20 top-2 lg:top-4 absolute rotate-[3.0deg] z-10"
- "imageClass" "block w-full"
- "ctx" .
- ) }}
- {{ else }}
- {{ partial "components/logo" (dict
- "class" "block w-[10rem]"
- "imageClass" "block w-full"
- "ctx" .
- ) }}
- {{ end }}
-
- {{ partial "posts/banner" . }}
- <!-- Title and Subtitle -->
- <h1 class="text-size-3xl font-900 xerox">
- <span data-pagefind-meta="title" class="p-name">{{ .Title }}</span>
- {{ with .Params.subtitle }}
- <small class="block text-secondary font-italic text-size-xl">{{ . }}</small>
- {{ end }}
- </h1>
- <!-- Post Meta -->
- <div class="flex flex-wrap items-center gap-2">
- <span class="text-secondary">{{ partial "components/date" . }}</span>
- {{ if or .Params.categories .Params.tags }}<span>·</span>{{ end }}
- {{ partial "components/category-pill" . }}
- {{ partial "components/tags" . }}
- </div>
- </header>
-
- {{ partial "content" . }}
- {{ partial "posts/webmention" . }}
- <!-- kept for legacy pages -->
- {{ partial "posts/comment" . }}
-
- {{ partial "components/back-to-top" . }}
- {{ partial "components/microformats" . }}
-</article>
diff --git a/layouts/_partials/term/term-books.html b/layouts/_partials/term/term-books.html
deleted file mode 100644
index 2bd48295..00000000
--- a/layouts/_partials/term/term-books.html
+++ /dev/null
@@ -1,9 +0,0 @@
-{{ $books := where .Pages "Section" "eq" "library" }}
-{{ if gt (len $books) 0 }}
-<h2>{{ T "termPage.books" }}</h2>
-<div class="grid grid-cols-4 md:grid-cols-6 items-center gap-4 my-4">
- {{ range $books }}
- {{ partial "items/book" (dict "ctx" .) }}
- {{ end }}
-</div>
-{{ end }}
diff --git a/layouts/_partials/term/term-fictions.html b/layouts/_partials/term/term-fictions.html
deleted file mode 100644
index 3e3fd4a9..00000000
--- a/layouts/_partials/term/term-fictions.html
+++ /dev/null
@@ -1,10 +0,0 @@
-{{ $fictions := where .Pages "Section" "fiction" }}
-{{ if gt (len $fictions) 0 }}
-<h2>{{ T "termPage.fictions" }}</h2>
-<ul id="term-fictions"
- class="animate-duration-100 ps-0 flex flex-col gap-2 list-none leading-relaxed">
- {{ range $fictions }}
- {{ partial "items/post-small" . }}
- {{ end }}
-</ul>
-{{ end }}
diff --git a/layouts/_partials/term/term-posts.html b/layouts/_partials/term/term-posts.html
deleted file mode 100644
index e9f8136f..00000000
--- a/layouts/_partials/term/term-posts.html
+++ /dev/null
@@ -1,6 +0,0 @@
-<ul id="term-posts"
- class="animate-duration-100 ps-0 flex flex-col gap-2 list-none leading-relaxed">
- {{ range where .Pages "Section" "article" }}
- {{ partial "items/post-small" . }}
- {{ end }}
-</ul>
diff --git a/layouts/_partials/term/term-weeklies.html b/layouts/_partials/term/term-weeklies.html
deleted file mode 100644
index 56697b60..00000000
--- a/layouts/_partials/term/term-weeklies.html
+++ /dev/null
@@ -1,10 +0,0 @@
-{{ $weeklies := where .Pages "Section" "weekly" }}
-{{ if gt (len $weeklies) 0 }}
-<h2>{{ T "termPage.weeklies" }}</h2>
-<ul id="term-weeklies"
- class="animate-duration-100 ps-0 flex flex-col gap-2 list-none leading-relaxed">
- {{ range $weeklies }}
- {{ partial "items/post-small" . }}
- {{ end }}
-</ul>
-{{ end }}
diff --git a/layouts/_partials/utils/inject-footnotes.html b/layouts/_partials/utils/inject-footnotes.html
deleted file mode 100644
index 31fdae82..00000000
--- a/layouts/_partials/utils/inject-footnotes.html
+++ /dev/null
@@ -1,70 +0,0 @@
-{{ $content := . }}
-
-{{ $footnotesPattern := `(?s)<div class="footnotes"[^>]*>.*?</div>` }}
-{{ $footnotesMatch := findRE $footnotesPattern $content 1 }}
-
-{{ if $footnotesMatch }}
- {{ $footnotesSection := index $footnotesMatch 0 }}
-
- {{ $liPattern := `(?s)<li id="fn:(\d+)">(.*?)</li>` }}
- {{ $footnoteItems := findRESubmatch $liPattern $footnotesSection }}
-
- {{ $footnoteMap := dict }}
- {{ range $footnoteItems }}
- {{ $id := index . 1 }}
- {{ $contentRaw := index . 2 }}
- {{ $cleanContent := replaceRE `(?s)\s*<a href="#fnref:\d+"[^>]*>.*?</a>\s*$` "" $contentRaw }}
- {{ $footnoteMap = merge $footnoteMap (dict $id $cleanContent) }}
- {{ end }}
-
- {{ $contentWithoutFootnotes := replaceRE $footnotesPattern "" $content }}
-
- {{ $refPattern := `<sup id="fnref:(\d+)".*?</sup>` }}
- {{ $refs := findRESubmatch $refPattern $contentWithoutFootnotes }}
-
- {{ $result := $contentWithoutFootnotes }}
- {{ $count := len $refs }}
-
- {{ range seq (sub $count 1) -1 0 }}
- {{ $ref := index $refs . }}
- {{ $refFull := index $ref 0 }}
- {{ $refId := index $ref 1 }}
- {{ $noteContent := index $footnoteMap $refId }}
-
- {{ if $noteContent }}
- {{ $inlineFootnote := printf `<div class="inline-footnote text-xs text-secondary flex gap-2 ml-2 my-1 opacity-50 hover:opacity-100 transition-opacity" id="fn:%s"><span>%s.</span><div>%s</div></div>` $refId $refId $noteContent }}
-
- {{ $blockTags := slice "p" "li" "td" "th" "blockquote" "h1" "h2" "h3" "h4" "h5" "h6" "figcaption" "dt" "dd" }}
-
- {{ $found := false }}
-
- {{ range $blockTags }}
- {{ if not $found }}
- {{ $tag := . }}
- {{ $pattern := printf `(?s)<%s[^>]*>.*?</%s>` $tag $tag }}
- {{ $matches := findRE $pattern $result }}
-
- {{ range $matches }}
- {{ if not $found }}
- {{ $block := . }}
- {{ if strings.Contains $block $refFull }}
- {{ $newBlock := printf `%s%s` $block $inlineFootnote }}
- {{ $result = replace $result $block $newBlock 1 }}
- {{ $found = true }}
- {{ end }}
- {{ end }}
- {{ end }}
- {{ end }}
- {{ end }}
-
- {{ if not $found }}
- {{ $replacement := printf `%s%s` $refFull $inlineFootnote }}
- {{ $result = replace $result $refFull $replacement 1 }}
- {{ end }}
- {{ end }}
- {{ end }}
-
- {{ $content = $result }}
-{{ end }}
-
-{{ $content | safeHTML }}
diff --git a/layouts/_partials/utils/render.html b/layouts/_partials/utils/render.html
deleted file mode 100644
index bdc4bf2f..00000000
--- a/layouts/_partials/utils/render.html
+++ /dev/null
@@ -1 +0,0 @@
-{{ partial "utils/inject-footnotes" . }}
diff --git a/layouts/_shortcodes/book.html b/layouts/_shortcodes/book.html
deleted file mode 100644
index 7ea49089..00000000
--- a/layouts/_shortcodes/book.html
+++ /dev/null
@@ -1,17 +0,0 @@
-<div class="book-showcase">
- <div class="book-cover">
- <a href="{{ .Get "cover" }}" data-libra>
- <img class="lazy" src="{{ .Get "cover" }}" loading="lazy" />
- </a>
- </div>
- <div class="book-description">
- <div class="book-description-header">
- <h3 class="book-title" id="book-{{ .Get "title" }}">{{ .Get "title" }}</h3>
- <p>分数:{{ .Get "rating" }}</p>
- </div>
- <div>
-
- {{ .Inner | markdownify }}
- </div>
- </div>
-</div>
diff --git a/layouts/_shortcodes/bookcard.html b/layouts/_shortcodes/bookcard.html
deleted file mode 100644
index 48e6924c..00000000
--- a/layouts/_shortcodes/bookcard.html
+++ /dev/null
@@ -1,28 +0,0 @@
-{{- $books := where .Site.Pages "Section" "library" -}}
-{{- $book := index (where $books "File.BaseFileName" (.Get 0)) 0 -}}
-
-{{- if $book }}
- <div class="markdown-body text-size-lg md:text-size-xl">
- <div class="mx-auto max-w-[50%] ">
- <img class="block w-full" src="{{ $book.Params.cover }}" />
- </div>
- <h3 class="book-title">
- <a href="{{ $book.Permalink }}">{{ $book.Title }}</a>
- </h3>
-
- {{- $rating := $book.Params.rating -}}
- {{- $fullStars := math.Floor $rating -}}
- <div class="rating">
- <span>评分:</span>
- {{- range seq $fullStars }}
- <span class="star">★</span>
- {{- end -}}
- </div>
-
- <div class="book-content">
- {{ $book.Content }}
- </div>
- </div>
-{{- else }}
- <p style="color: red;">⚠️ 无法找到书评: {{ .Get 0 }}</p>
-{{- end }}
diff --git a/layouts/_shortcodes/daysfrom.html b/layouts/_shortcodes/daysfrom.html
deleted file mode 100644
index c2750480..00000000
--- a/layouts/_shortcodes/daysfrom.html
+++ /dev/null
@@ -1,12 +0,0 @@
-{{- $date := .Get 0 -}}
-{{- $t := time $date -}}
-{{- $now := now -}}
-{{- $durSeconds := sub $now.Unix $t.Unix | int -}}
-
-{{- $days := div $durSeconds 86400 -}}
-
-{{- if lt $days 0 -}}
- {{ mul $days -1 }}
-{{- else -}}
- {{ $days }}
-{{- end -}}
diff --git a/layouts/_shortcodes/fedicard.html b/layouts/_shortcodes/fedicard.html
deleted file mode 100644
index 1f10ebeb..00000000
--- a/layouts/_shortcodes/fedicard.html
+++ /dev/null
@@ -1,148 +0,0 @@
-{{- $url := .Get 0 -}}
-{{- $parsed := urls.Parse $url -}}
-{{- $parts := split $parsed.Path "/" -}}
-{{- $id := index $parts (sub (len $parts) 1) -}}
-{{- $instance := printf "%s://%s" $parsed.Scheme $parsed.Host -}}
-{{- $apiUrl := printf "%s/api/v1/statuses/%s" $instance $id -}}
-{{- $data := resources.GetRemote $apiUrl -}}
-{{- $json := $data | transform.Unmarshal -}}
-{{- $author := $json.account -}}
-
-{{- $publishedAt := time $json.created_at -}}
-
-{{- $avatarSrc := $author.avatar -}}
-{{- with resources.GetRemote $author.avatar -}}
- {{- with .Resize "88x88 q85 webp" -}}
- {{- $avatarSrc = .RelPermalink -}}
- {{- end -}}
-{{- end -}}
-
-{{- /* Count image attachments */ -}}
-{{- $imgCount := 0 -}}
-{{- range $json.media_attachments -}}{{- if eq .type "image" -}}{{- $imgCount = add $imgCount 1 -}}{{- end -}}{{- end -}}
-{{- $cId := printf "sc-%s" (md5 $url) -}}
-{{- $dId := printf "sd-%s" (md5 $url) -}}
-
-<div class="social-card-final cnt-undo rd bg-[var(--block-background-color)] p-4 md:px-8 md:py-6 relative overflow-hidden" style="background-color: oklch(from var(--block-background-color) l c h / calc(alpha - 0.5))">
- <div style="display: flex; align-items: flex-start; justify-content: space-between; margin-bottom: 8px;">
- <div style="display: flex; align-items: center; gap: 12px;">
- <img src="{{ $avatarSrc }}" style="width: 44px; height: 44px; border-radius: 50%; flex-shrink: 0; object-fit: cover;" />
- <div style="display: flex; flex-direction: column; line-height: 1.2;">
- <span style="font-weight: 700; color: var(--color-neso-fg1); font-size: 1rem;">{{ $author.display_name }}</span>
- <span style="color: var(--color-neso-fg3); font-size: 0.9rem;">@{{ $author.acct }}</span>
- </div>
- </div>
- <a href="{{ $url }}" target="_blank" style="color: #6364ff; align-self: flex-start; margin-top: 2px; transition: transform 0.2s ease-in-out; display: flex; flex-shrink: 0;" onmouseover="this.style.transform='scale(1.2)'" onmouseout="this.style.transform='scale(1)'">
-<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" viewBox="0 0 196.52 196.52">
- <path fill="#a730b8" d="M47.9242 72.7966a18.2278 18.2278 0 0 1-7.7959 7.7597l42.7984 42.9653 10.3182-5.2291zm56.4524 56.6704-10.3182 5.2291 21.686 21.7708a18.2278 18.2278 0 0 1 7.7975-7.7608z"/>
- <path fill="#5496be" d="M129.6645 102.0765l1.7865 11.4272 27.4149-13.8942a18.2278 18.2278 0 0 1-4.9719-9.8124zm-14.0658 7.1282-57.2891 29.0339a18.2278 18.2278 0 0 1 4.9728 9.8133l54.1027-27.4194z"/>
- <path fill="#ce3d1a" d="M69.5312 91.6539l8.1618 8.1933 29.269-57.1387a18.2278 18.2278 0 0 1-9.787-5.0219zm-7.1897 14.0363-14.0022 27.3353a18.2278 18.2278 0 0 1 9.786 5.0214l12.3775-24.1639z"/>
- <path fill="#d0188f" d="M39.8906 80.6763a18.2278 18.2278 0 0 1-10.8655 1.7198l8.1762 52.2981a18.2278 18.2278 0 0 1 10.8645-1.7198z"/>
- <path fill="#5b36e9" d="M63.3259 148.3109a18.2278 18.2278 0 0 1-1.7322 10.8629l52.2893 8.3907a18.2278 18.2278 0 0 1 1.7322-10.8629z"/>
- <path fill="#30b873" d="M134.9148 146.9182a18.2278 18.2278 0 0 1 9.788 5.0224l24.1345-47.117a18.2278 18.2278 0 0 1-9.7875-5.0229z"/>
- <path fill="#ebe305" d="M126.1329 33.1603a18.2278 18.2278 0 0 1-7.7975 7.7608l37.3765 37.5207a18.2278 18.2278 0 0 1 7.7969-7.7608z"/>
- <path fill="#f47601" d="M44.7704 51.6279a18.2278 18.2278 0 0 1 4.9723 9.8123l47.2478-23.9453a18.2278 18.2278 0 0 1-4.9718-9.8113z"/>
- <path fill="#57c115" d="M118.2491 40.9645a18.2278 18.2278 0 0 1-10.8511 1.8123l4.1853 26.8 11.42 1.8324zm-4.2333 44.1927 9.8955 63.3631a18.2278 18.2278 0 0 1 10.88-1.6278l-9.355-59.9035z"/>
- <path fill="#dbb210" d="M49.7763 61.6412a18.2278 18.2278 0 0 1-1.694 10.8686l26.8206 4.3077 5.2715-10.2945zm45.9677 7.382-5.272 10.2955 63.3713 10.1777a18.2278 18.2278 0 0 1 1.7606-10.8593z"/>
- <path fill="#ffca00" d="M93.4385 23.8419a1 1 0 1 0 33.0924 1.8025 1 1 0 1 0-33.0924-1.8025"/>
- <path fill="#64ff00" d="M155.314 85.957a1 1 0 1 0 33.0923 1.8025 1 1 0 1 0-33.0923-1.8025"/>
- <path fill="#00a3ff" d="M115.3466 163.9824a1 1 0 1 0 33.0923 1.8025 1 1 0 1 0-33.0923-1.8025"/>
- <path fill="#9500ff" d="M28.7698 150.0898a1 1 0 1 0 33.0923 1.8025 1 1 0 1 0-33.0923-1.8025"/>
- <path fill="#ff0000" d="M15.2298 63.4781a1 1 0 1 0 33.0923 1.8025 1 1 0 1 0-33.0923-1.8025"/>
-</svg>
- </a>
- </div>
-
- {{- $bodyText := $json.content -}}
- {{- $bodyText = $bodyText | replaceRE `(<p>[\s]*(<a [^>]*class="mention hashtag"[^>]*>#<span>[^<]+</span></a>[\s]*)+</p>[\s]*)+$` "" -}}
- {{- $bodyText = $bodyText | replaceRE `<span class="invisible">[^<]*</span>` "" -}}
- {{- $bodyText = $bodyText | replaceRE `<a ` `<a style="text-decoration:none;" ` -}}
- {{- $bodyText = $bodyText | replaceRE `<p>` `<p style="margin:0 0 0.9em 0;">` -}}
- {{- $bodyText = $bodyText | replaceRE `<p [^>]+>[\s]*</p>` "" -}}
-
- <div style="font-size: 1.05rem; line-height: 1.6; margin-bottom: 12px; color: var(--color-neso-fg1);">
- {{ $bodyText | safeHTML }}
- </div>
-
- {{- if gt $imgCount 0 -}}
- {{- if le $imgCount 2 -}}
- {{- /* 1–2 images: flex row (2 images split 50/50, cropped) */ -}}
- <div style="display: flex; gap: 8px; margin-top: 8px; margin-bottom: 12px; overflow: hidden;">
- {{- range $json.media_attachments -}}
- {{- if eq .type "image" -}}
- {{- $imgSrc := .preview_url -}}
- {{- with resources.GetRemote .preview_url -}}
- {{- with .Process "q85 webp" -}}
- {{- $imgSrc = .RelPermalink -}}
- {{- end -}}
- {{- end -}}
- <img src="{{ $imgSrc }}" alt="{{ .description }}" onclick="window.__scLb&&window.__scLb(this.src)" style="flex: 1 1 0%; min-width: 0; border-radius: 8px; display: block; margin: 0 !important; cursor: pointer;{{ if gt $imgCount 1 }} height: 250px; object-fit: cover;{{ else }} height: auto; width: 100%;{{ end }}" loading="lazy">
- {{- end -}}
- {{- end -}}
- </div>
- {{- else -}}
- {{- /* 3+ images: scroll-snap carousel */ -}}
- <style>#{{ $cId }}::-webkit-scrollbar{display:none}</style>
- <div style="margin: 8px 0 4px; overflow: hidden;">
- <div id="{{ $cId }}" style="display: flex; overflow-x: auto; scroll-snap-type: x mandatory; -webkit-overflow-scrolling: touch; scrollbar-width: none; border-radius: 8px;">
- {{- range $json.media_attachments -}}
- {{- if eq .type "image" -}}
- {{- $imgSrc := .preview_url -}}
- {{- with resources.GetRemote .preview_url -}}
- {{- with .Process "q85 webp" -}}
- {{- $imgSrc = .RelPermalink -}}
- {{- end -}}
- {{- end -}}
- <img src="{{ $imgSrc }}" alt="{{ .description }}" onclick="window.__scLb&&window.__scLb(this.src)" style="scroll-snap-align: start; flex-shrink: 0; width: 100%; height: 280px; object-fit: cover; border-radius: 8px; cursor: pointer; display: block; margin: 0 !important;" loading="lazy">
- {{- end -}}
- {{- end -}}
- </div>
- {{- $imgAttachments := slice -}}
- {{- range $json.media_attachments -}}{{- if eq .type "image" -}}{{- $imgAttachments = $imgAttachments | append . -}}{{- end -}}{{- end -}}
- <div id="{{ $dId }}" style="display: flex; justify-content: center; gap: 6px; margin-top: 8px; margin-bottom: 12px;">
- {{- range $i, $_ := $imgAttachments -}}
- <button onclick="(function(){var c=document.getElementById('{{ $cId }}');c.scrollTo({left:c.children[{{ $i }}].offsetLeft,behavior:'smooth'});})()" aria-label="Image {{ add $i 1 }}" style="width: 8px; height: 8px; border-radius: 50%; border: none; background: {{ if eq $i 0 }}var(--color-neso-fg2){{ else }}var(--color-neso-deco2){{ end }}; cursor: pointer; padding: 0; transition: background 0.2s;"></button>
- {{- end -}}
- </div>
- </div>
- <script>(function(){var c=document.getElementById('{{ $cId }}'),ds=document.getElementById('{{ $dId }}').querySelectorAll('button');c.addEventListener('scroll',function(){var i=Math.round(c.scrollLeft/c.offsetWidth);ds.forEach(function(d,j){d.style.background=j===i?'var(--color-neso-fg2)':'var(--color-neso-deco2)';});},{passive:true});})()</script>
- {{- end -}}
- {{- end -}}
-
- {{- /* Link preview card — use original image URL, skip processing (CDN images can return 403) */ -}}
- {{- with $json.card -}}
- {{- if or (eq .type "link") (eq .type "photo") (eq .type "video") -}}
- <a href="{{ .url }}" target="_blank" rel="noopener noreferrer" style="display: block; margin-top: 8px; margin-bottom: 16px; border: 1px solid var(--color-neso-deco2); border-radius: 10px; overflow: hidden; text-decoration: none; color: inherit;">
- {{- if .image -}}
- <img src="{{ .image }}" alt="{{ .title }}" style="width: 100%; height: 180px; object-fit: cover; display: block; margin: 0 !important;">
- {{- end -}}
- <div style="padding: 10px 14px;">
- <div style="font-weight: 600; font-size: 0.95rem; color: var(--color-neso-fg1); margin-bottom: 3px;">{{ .title }}</div>
- {{- if .description -}}<div style="font-size: 0.85rem; color: var(--color-neso-fg3); margin-bottom: 4px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;">{{ .description }}</div>{{- end -}}
- <div style="font-size: 0.8rem; color: var(--color-neso-fg3);">{{ (urls.Parse .url).Host }}</div>
- </div>
- </a>
- {{- end -}}
- {{- end -}}
-
- <div style="border-top: 1px solid var(--color-neso-deco3); padding-top: 12px; margin-top: 16px; display: flex; justify-content: space-between; align-items: center;">
- <time class="social-card-time" datetime="{{ $publishedAt.Format "2006-01-02T15:04:05Z" }}" style="color: var(--color-neso-fg3); font-size: 0.9rem;">{{ $publishedAt.Format "Jan 2, 2006 at 3:04 PM UTC" }}</time>
- <a href="{{ $url }}" target="_blank" style="color: #6364ff; font-weight: 600; text-decoration: none; font-size: 0.9rem; transition: color 0.2s ease-in-out;" onmouseover="this.style.color='#8A8BFF'" onmouseout="this.style.color='#6364ff'">{{ T "ViewOnFediverse" . }}</a>
- </div>
-</div>
-
-{{- /* Shared lightbox — injected once per page via DOM API (no innerHTML) */ -}}
-<script>
-if (!window.__scLb) {
- var _lbImg = document.createElement('img');
- _lbImg.style.cssText = 'max-width:92vw;max-height:92vh;object-fit:contain;border-radius:8px;cursor:default;';
- _lbImg.addEventListener('click', function(e) { e.stopPropagation(); });
- var _lbOv = document.createElement('div');
- _lbOv.style.cssText = 'display:none;position:fixed;inset:0;z-index:9999;background:rgba(0,0,0,0.88);cursor:zoom-out;align-items:center;justify-content:center;';
- _lbOv.appendChild(_lbImg);
- _lbOv.addEventListener('click', function() { _lbOv.style.display = 'none'; document.body.style.overflow = ''; });
- document.addEventListener('keydown', function(e) { if (e.key === 'Escape') { _lbOv.style.display = 'none'; document.body.style.overflow = ''; } });
- document.body.appendChild(_lbOv);
- window.__scLb = function(src) { _lbImg.src = src; _lbOv.style.display = 'flex'; document.body.style.overflow = 'hidden'; };
-}
-</script>
diff --git a/layouts/_shortcodes/float-image.html b/layouts/_shortcodes/float-image.html
deleted file mode 100644
index 2c03992d..00000000
--- a/layouts/_shortcodes/float-image.html
+++ /dev/null
@@ -1,13 +0,0 @@
-{{ $src := .Get 0 }}
-
-{{ $float := .Get 1 }}
-{{ $padding := "" }}
-{{ if eq $float "left" }}
- {{ $padding = "pr-4 sm:pr-6 md:pr-8" }}
-{{ else }}
- {{ $padding = "pl-4 sm:pl-6 md:pr-8" }}
-{{ end }}
-
-<figure style="float: {{ $float }}" class="{{ $padding }} w-25 sm:w-30 md:w-50">
- <img src="{{ $src }}" data-libra class="my-0" />
-</figure>
diff --git a/layouts/_shortcodes/gallery.html b/layouts/_shortcodes/gallery.html
deleted file mode 100644
index da8e4ab5..00000000
--- a/layouts/_shortcodes/gallery.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<div class="gallery{{ with .Get "class" }} {{ . }}{{ end }}">
- {{ .Page.RenderString .Inner }}
-</div>
diff --git a/layouts/_shortcodes/link.html b/layouts/_shortcodes/link.html
deleted file mode 100644
index 9f7ea3e5..00000000
--- a/layouts/_shortcodes/link.html
+++ /dev/null
@@ -1,15 +0,0 @@
-{{ if eq (.Get "type") "podcast" }}
-<a href="{{ .Get "link" }}" target="_blank" title="{{ .Get "title" }}"
- class="block w-[calc(25%_-_1rem)] rounded-md overflow-hidden box-border p-0"
- style="background-color: var(--block-background-color);
- color: var(--text-color);text-decoration: none;">
- <img src="{{ .Get "image" }}" class="block m-0!" alt="{{ .Get "title" }}">
-</a>
-{{ else }}
-<a href="{{ .Get "link" }}" target="_blank"
- class="block w-[calc(50%_-_1rem)] rounded-4 box-border px-6"
- style="background-color: var(--block-background-color);
- color: var(--text-color);text-decoration: none;">
- <h3>{{ .Get "title" }}</h3>
-</a>
-{{ end }}
diff --git a/layouts/_shortcodes/linkding-bookmarks.html b/layouts/_shortcodes/linkding-bookmarks.html
deleted file mode 100644
index fd54c0d2..00000000
--- a/layouts/_shortcodes/linkding-bookmarks.html
+++ /dev/null
@@ -1,68 +0,0 @@
-{{/*
-Shortcode to display Linkding RSS feed bookmarks
-Usage: {{< linkding-bookmarks >}}
-*/}}
-
-{{/* Fetch RSS feed from remote URL with caching */}}
-{{ $url := "https://links.eltr.ac/feeds/shared?limit=12" }}
-{{ $cacheKey := print $url (now.Format "2006-01-02") }}
-{{ $rssContent := resources.GetRemote $url
- (dict
- "key" $cacheKey
- "headers" (dict "User-Agent" "Hugo/1.0")
- )
-}}
-
-{{ if $rssContent }}
- {{/* Parse RSS XML */}}
- {{ $rss := $rssContent.Content | transform.Unmarshal }}
-
- {{ if $rss }}
- {{/* Get channel items */}}
- {{ $items := $rss.channel.item }}
-
- {{ if $items }}
- <div class="linkding-bookmarks">
- {{ range $items }}
- <div class="bookmark-item mb-4 p-4 rounded-md" style="background-color: var(--block-background-color);">
- <h3 class="m-0 mb-2">
- <a href="{{ .link }}" target="_blank" rel="noopener noreferrer"
- style="color: var(--text-color); text-decoration: none;">
- {{ .title }}
- </a>
- </h3>
- {{ if .description }}
- <p class="m-0 text-sm opacity-80">{{ .description }}</p>
- {{ end }}
- {{ if .category }}
- <div class="mt-2 flex flex-wrap gap-2">
- {{ if reflect.IsSlice .category }}
- {{ range .category }}
- <span class="text-secondary text-xs rounded"
- style="background-color: var(--border-color-light);">
- #{{ . }}
- </span>
- {{ end }}
- {{ else }}
- <span class="text-secondary text-xs rounded"
- style="background-color: var(--border-color-light);">
- #{{ .category }}
- </span>
- {{ end }}
- </div>
- {{ end }}
- <div class="mt-2 text-xs opacity-60">
- 于 {{ dateFormat "2006-01-02" .pubDate }} 添加至书签
- </div>
- </div>
- {{ end }}
- </div>
- {{ else }}
- <p>No bookmarks found in RSS feed.</p>
- {{ end }}
- {{ else }}
- <p>Unable to parse RSS feed.</p>
- {{ end }}
-{{ else }}
- <p>Unable to fetch RSS feed from remote URL.</p>
-{{ end }}
diff --git a/layouts/_shortcodes/linkrank.html b/layouts/_shortcodes/linkrank.html
deleted file mode 100644
index 19de1fe6..00000000
--- a/layouts/_shortcodes/linkrank.html
+++ /dev/null
@@ -1,2 +0,0 @@
-{{ partial "stats/external-link-rank" . }}
-
diff --git a/layouts/_shortcodes/music.html b/layouts/_shortcodes/music.html
deleted file mode 100644
index 8017566d..00000000
--- a/layouts/_shortcodes/music.html
+++ /dev/null
@@ -1,53 +0,0 @@
-{{ $title := .Get "title" }}
-{{ $cover := .Get "cover" }}
-{{ $artist := .Get "artist" }}
-{{ $isAlbum := .Get "album" }}
-
-{{ $platforms := slice "bandcamp" "apple" "spotify" "netease" "tidal" }}
-{{ $page := . }}
-
-<div class="flex flex-col md:flex-row md:justify-between md:items-center gap-2">
- <!-- Cover, title, artist -->
- <div class="flex gap-5 items-center">
- <div class="relative flex-shrink-0">
- <img class="w-15 h-15 rd-lg shadow-lg m-0!"
- alt="{{ $title }} music cover"
- src="{{ $cover }}" loading="lazy" />
- {{ if $isAlbum }}
- <div class="w-13 h-13 rd-md bg-neutral-400 dark:bg-neutral-600 absolute top-1 left-3 -z-1"></div>
- {{ end }}
- </div>
- <div>
- <h4 class="m-0 text-size-base flex items-center gap-2 leading-tight">
- <span>{{ $title }}</span>
- {{ if $isAlbum }}
- <span class="font-mono bg-neutral-400 dark:bg-neutral-700 text-white
- px-1 rd text-xs leading-relaxed hidden sm:inline-block"
- >{{ T "music.album" }}</span>
- {{ end }}
- </h4>
- <p class="m-0! text-size-sm text-secondary">{{ $artist }}</p>
- </div>
- </div>
- <!-- Links -->
- <div class="flex gap-2 items-center">
- {{ range $platforms }}
- {{ $code := . }}
- {{ $langcode := (printf "music.%s" $code) }}
- {{ $name := T $langcode }}
- {{ with $page.Get . }}
- <a href="{{ . }}"
- class="block rounded-full px-3 md:p-4 bg-neutral-200/50 dark:bg-neutral-600/50 hover:bg-neutral-200 dark:hover:bg-neutral-600 transition-colors no-underline! text-size-xs inline-flex gap-1 items-center"
- target="_blank"
- title="{{ T "music.openIn" $name }}"
- alt="{{ $name }}"
- data-tooltip
- >
- <img src="{{ printf "/icons/music/%s.png" $code }}"
- loading="lazy" class="block w-3 h-3 md:w-5 md:h-5 m-0!" />
- <span class="md:hidden">{{ $name }}</span>
- </a>
- {{ end }}
- {{ end }}
- </div>
-</div>
diff --git a/layouts/_shortcodes/opml-links.html b/layouts/_shortcodes/opml-links.html
deleted file mode 100644
index 541e0fee..00000000
--- a/layouts/_shortcodes/opml-links.html
+++ /dev/null
@@ -1,19 +0,0 @@
-{{ $opml := hugo.Data.rss }}
-
-<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
-{{ range shuffle $opml.body.outline }}
- {{ $title := index . "-title" }}
- {{ $url := index . "-htmlUrl" }}
- {{ if and $title $url }}
- {{ $parts := split $url "/" }}
- {{ $url := printf "%s//%s/" (index $parts 0) (index $parts 2) }}
- <a href="{{ $url }}" target="_blank"
- class="block rounded-md overflow-hidden box-border p-4"
- style="background-color: var(--block-background-color);
- color: var(--text-color);
- text-decoration: none;">
- <h3 class="m-0 text-lg font-medium">{{ $title }}</h3>
- </a>
- {{ end }}
-{{ end }}
-</div>
diff --git a/layouts/_shortcodes/postcount.html b/layouts/_shortcodes/postcount.html
deleted file mode 100644
index 84c6378f..00000000
--- a/layouts/_shortcodes/postcount.html
+++ /dev/null
@@ -1 +0,0 @@
-{{ len (where .Site.RegularPages "Section" "!=" "") }}
diff --git a/layouts/_shortcodes/quotecard.html b/layouts/_shortcodes/quotecard.html
deleted file mode 100644
index 941280ce..00000000
--- a/layouts/_shortcodes/quotecard.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<div class="text-5 md:text-6 font-italic text-center
- my-12 md:my-20 mx-4 md:mx-12 p-4
- border border-solid border-gray-300 rounded-4 shadow-lg
- rotate-[3deg] bg-[rgba(255,255,255,0.35)] backdrop-blur-md"
- style="background: linear-gradient(rgba(255,255,255,0.1), rgba(255,255,255,0.1)),
- repeating-radial-gradient(rgba(255,255,255,0.25) 0 0.0001%, rgba(255,255,255,0.04) 0 0.0002%) 50% 0 / 2500px 2500px,
- repeating-conic-gradient(rgba(255,255,255,0.25) 0 0.0001%, rgba(255,255,255,0.04) 0 0.0002%) 60% 60% / 2500px 2500px;
- background-blend-mode: normal, difference;"
- {{ with .Get "rotate" }}style="transform: rotate({{. }}deg)"{{ end }}>
- {{ .Inner | markdownify }}
-</div>
diff --git a/layouts/_shortcodes/right.html b/layouts/_shortcodes/right.html
deleted file mode 100644
index 775dcc04..00000000
--- a/layouts/_shortcodes/right.html
+++ /dev/null
@@ -1 +0,0 @@
-<p style="text-align: right">{{ index .Params 0 | markdownify }}</p>
diff --git a/layouts/_shortcodes/wordcount.html b/layouts/_shortcodes/wordcount.html
deleted file mode 100644
index b2f5b414..00000000
--- a/layouts/_shortcodes/wordcount.html
+++ /dev/null
@@ -1,7 +0,0 @@
-{{ $total := 0 }}
-
-{{ range where .Site.RegularPages "Section" "!=" "" }}
- {{ $total = add $total .WordCount }}
-{{ end }}
-
-{{ $total }}
diff --git a/layouts/archive.html b/layouts/archive.html
deleted file mode 100644
index 82f0f49f..00000000
--- a/layouts/archive.html
+++ /dev/null
@@ -1,23 +0,0 @@
-{{ define "main" }}
-<article>
- {{ partial "taxonomy/pagefind" . }}
- <div class="post-content text-size-lg">
- {{ range .Site.RegularPages.GroupByDate "2006" }}
- {{ partial "components/section-title" (dict
- "Left" .Key
- "Right" (T "archivePage.pageCount" (len .Pages))
- )}}
- <ol class="mx-0 my-4 p-0 leading-loose flex flex-col">
- {{ range .Pages }}
- <li class="list-decimal text-secondary lazy-render">
- <div class="flex justify-between">
- <a href="{{ .Permalink }}">{{ .LinkTitle }}</a>
- <a href="/{{ .Section }}" class="font-mono text-secondary">{{ .Section }}</a>
- </div>
- </li>
- {{ end }}
- </ol>
- {{ end }}
- </div>
-</article>
-{{ end }}
diff --git a/layouts/article/page.html b/layouts/article/page.html
deleted file mode 100644
index e093e810..00000000
--- a/layouts/article/page.html
+++ /dev/null
@@ -1,3 +0,0 @@
-{{ define "main" }}
- {{ partial "template/post-page" . }}
-{{ end }}
diff --git a/layouts/article/section.html b/layouts/article/section.html
deleted file mode 100644
index 5072f416..00000000
--- a/layouts/article/section.html
+++ /dev/null
@@ -1,38 +0,0 @@
-{{ define "main" }}
- {{ $pages := .Pages }}
- {{ $categories := slice }}
-
- <article>
- <div class="posts-list pagefind-exclude">
- <div class="markdown-body">{{ .Content }}</div>
-
- {{ $remainingMonthsToOpen := 3 }}
- {{ range $pages.GroupByDate "2006" -}}
- <section class="w-full">
- {{ partial "components/section-title" (dict
- "Left" .Key
- "Right" (T "archivePage.postCountAnnual" (len .Pages))
- )}}
-
- {{ range .Pages.GroupByDate "January" }}
- <details class="lazy-render"{{ if gt $remainingMonthsToOpen 0 }} open{{ end }}>
- <summary class="flex items-center border-b border-b-dashed border-[var(--border-color)] py-2 px-1">
- <h2 class="text-size-lg inline-block w-full m-0
- flex justify-between items-center">
- {{ .Key }}
- <small class="font-mono text-secondary text-3">{{ T "archivePage.postCountMonthly" (len .Pages) }}</small>
- </h2>
- </summary>
- <ul class="ps-0 flex flex-col gap-2 list-none leading-relaxed">
- {{ range .Pages }}
- {{ partial "items/post-small" . }}
- {{ end }}
- </ul>
- </details>
- {{ $remainingMonthsToOpen = sub $remainingMonthsToOpen 1 }}
- {{ end }}
- </section>
- {{ end }}
- </div>
- </article>
-{{ end }}
diff --git a/layouts/baseof.404.html b/layouts/baseof.404.html
deleted file mode 100644
index 5140f5f0..00000000
--- a/layouts/baseof.404.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<!DOCTYPE html>
-<html lang="{{ .Site.LanguageCode }}" prefix="og: http://ogp.me/ns#">
- {{ partial "head.html" . }}
- <body>
- <main class="my-[var(--page-margin-y)] relative">
- {{ block "main" . }}{{ end }}
- </main>
- </body>
-</html>
diff --git a/layouts/baseof.html b/layouts/baseof.html
deleted file mode 100644
index f26dea17..00000000
--- a/layouts/baseof.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE html>
-<html lang="{{ .Site.LanguageCode }}" prefix="og: http://ogp.me/ns#">
- {{ partial "head.html" . }}
- <body>
- <main class="my-[var(--page-margin-y)] relative">
- {{ partial "header.html" . }}
- {{ block "main" . }}{{ end }}
- {{ partial "footer.html" . }}
- </main>
- {{ partial "components/svg-filters" . }}
- {{ partial "components/shade-mask" . }}
- {{ partial "scripts.html" . }}
- </body>
-</html>
diff --git a/layouts/baseof.page.html b/layouts/baseof.page.html
deleted file mode 100644
index 753d37ff..00000000
--- a/layouts/baseof.page.html
+++ /dev/null
@@ -1,14 +0,0 @@
-<!DOCTYPE html>
-<html lang="{{ .Site.LanguageCode }}" prefix="og: http://ogp.me/ns#">
- {{ partial "head" . }}
- <body>
- <main class="my-[var(--page-margin-y)] relative">
- {{ if eq .Section "" }}{{ partial "header" . }}{{ end }}
- {{ block "main" . }}{{ end }}
- {{ if eq .Section "" }}{{ partial "footer" . }}{{ end }}
- </main>
- {{ partial "components/svg-filters" . }}
- {{ partial "components/shade-mask" . }}
- {{ partial "scripts" . }}
- </body>
-</html>
diff --git a/layouts/baseof.section.html b/layouts/baseof.section.html
deleted file mode 100644
index 5fc6ecef..00000000
--- a/layouts/baseof.section.html
+++ /dev/null
@@ -1,15 +0,0 @@
-<!DOCTYPE html>
-<html lang="{{ .Site.LanguageCode }}" prefix="og: http://ogp.me/ns#">
- {{ partial "head.html" . }}
- <body>
- <main class="my-[var(--page-margin-y)] relative">
- {{ partial "header.html" . }}
- {{ partial "home/home-nav" . }}
- {{ block "main" . }}{{ end }}
- {{ partial "footer.html" . }}
- </main>
- {{ partial "components/svg-filters" . }}
- {{ partial "components/shade-mask" . }}
- {{ partial "scripts.html" . }}
- </body>
-</html>
diff --git a/layouts/blank.html b/layouts/blank.html
deleted file mode 100644
index 799c398a..00000000
--- a/layouts/blank.html
+++ /dev/null
@@ -1,10 +0,0 @@
-{{ define "main" }}
- <article class="flex flex-col justify-center items-center"
- style="height: calc(100dvh - var(--page-margin-y) * 2)">
- {{ partial "components/logo" (dict "imageClass" "w-20 md:w-[7rem] my-4" "ctx" .) }}
- <div class="markdown-body font-mono text-sm">
- {{ .Content }}
- </div>
- <p class="text-secondary font-mono">* * *</p>
- </article>
-{{ end }}
diff --git a/layouts/cards/page.html b/layouts/cards/page.html
deleted file mode 100644
index 7c97ce1a..00000000
--- a/layouts/cards/page.html
+++ /dev/null
@@ -1,12 +0,0 @@
-{{ define "main" }}
- <article class="relative">
- {{ partial "components/logo" (dict
- "link" "cards"
- "class" "round-sticker absolute -top-4 -right-4 w-16 h-16 z-1 -rotate-5"
- "ctx" .
- "imageClass" "w-full"
- ) }}
- {{ partial "items/card" (dict "context" .) }}
- {{ partial "components/backlinks" (dict "filename" .File.BaseFileName "type" "cards" "context" .) }}
- </article>
-{{ end }}
diff --git a/layouts/cards/section.html b/layouts/cards/section.html
deleted file mode 100644
index 2ea36990..00000000
--- a/layouts/cards/section.html
+++ /dev/null
@@ -1,29 +0,0 @@
-{{ define "main" }}
-<article>
-
- <div class="bg-red-200 text-red b-1 b-solid b-red px-4 py-2 rd-md">
- <p>「卡片」分区已经弃用,这里的内容不会再更新。</p>
- </div>
-
- {{- $pages := .RegularPages }}
- {{- $featured := first 6 $pages }}
- {{- $rest := after 6 $pages }}
- <div class="grid md:grid-cols-2 gap-4 my-4">
- {{- range $featured }}
- {{ partial "items/card" (dict
- "context" .
- "summary" true
- "summaryClass" "text-base!") }}
- {{- end }}
- </div>
-
- <div class="grid grid-cols-3 gap-4 list-none text-lg">
- {{- range $rest }}
- <a class="border-b-dashed border-b-1 border-b-neutral-300 dark:border-b-neutral-700
- flex items-end py-1
- block text-secondary hover:text-unset hover:no-underline transition"
- href="{{ .RelPermalink }}">{{ .Title }}</a>
- {{- end }}
- </div>
-</article>
-{{ end }}
diff --git a/layouts/fiction/page.html b/layouts/fiction/page.html
deleted file mode 100644
index 37e91c86..00000000
--- a/layouts/fiction/page.html
+++ /dev/null
@@ -1,24 +0,0 @@
-{{ define "main" }}
- <article class="h-entry">
- <header class="text-center">
- {{ partial "components/logo" (dict
- "link" "fiction/"
- "ctx" .
- "imageClass" "block w-[10rem]"
- "class" "flex justify-center"
- ) }}
- <h1
- class="xerox text-4xl font-900"
- data-pagefind-meta="title"
- ><span class="p-name" style="view-transition-name: post-{{ .File.UniqueID }}">{{ .Title }}</span></h1>
- <div class="text-secondary">
- {{ partial "components/date" . }} ·
- {{ partial "components/wordcount" . }}</div>
- </header>
-
- {{ partial "content" . }}
- {{ partial "posts/webmention" . }}
- {{ partial "components/back-to-top" . }}
- {{ partial "components/microformats" . }}
- </article>
-{{ end }}
diff --git a/layouts/fiction/section.html b/layouts/fiction/section.html
deleted file mode 100644
index 9bbf122f..00000000
--- a/layouts/fiction/section.html
+++ /dev/null
@@ -1,25 +0,0 @@
-{{ define "main" }}
- <article>
- <div class="markdown-body">{{ .Content }}</div>
- <div class="pagefind-exclude my-8">
- <div class="flex flex-wrap justify-around gap-8">
- {{- range .Pages }}
-
- {{ $rotationDeg := add (math.Floor (mul (math.Rand) 7)) -4 }}
- {{- $deg := int $rotationDeg -}}
-
- {{ $steps := slice 60 70 80 90 100 }}
- {{ $opacity := index $steps (int (math.Floor (mul (math.Rand) 5))) }}
- {{ $opacityClass := printf "opacity-%d" $opacity }}
-
- <div class="xerox text-center text-2xl font-extrabold
- {{ $opacityClass }}
- transition hover:opacity-100 hover:scale-110"
- style="view-transition-name: post-{{ .File.UniqueID }}; {{ if ne $deg 0 }}--rotation-deg: {{ $deg }}deg; transform: rotate({{ $deg }}deg);{{ end }}">
- <a class="hover:no-underline" href="{{ .Permalink }}">《{{ .Title }}》</a>
- </div>
- {{- end }}
- </div>
- </div>
- </article>
-{{ end }}
diff --git a/layouts/highlights.html b/layouts/highlights.html
deleted file mode 100644
index 0865b063..00000000
--- a/layouts/highlights.html
+++ /dev/null
@@ -1,20 +0,0 @@
-{{ define "main" }}
- <article>
- <div class="post-content markdown-body text-size-lg md:text-size-xl">
- <p>{{ .Content }}</p>
- </div>
- <!-- Highlights -->
- {{ range shuffle hugo.Data.highlights }}
- <section class="post-content lazy-render">
- <h3><a href="{{ .url }}">《{{ .title }}》</a></h3>
- <ul class="list-none">
- {{ range .highlights }}
- <li class="my-4 text-lg">
- <a class="hover:no-underline" href="{{ .link }}">{{ .text | markdownify }}</a>
- </li>
- {{ end }}
- </ul>
- </section>
- {{ end }}
- </article>
-{{ end }}
diff --git a/layouts/home.html b/layouts/home.html
deleted file mode 100644
index a74fee5d..00000000
--- a/layouts/home.html
+++ /dev/null
@@ -1,8 +0,0 @@
-{{ define "main" }}
- {{ partial "home/microformats" . }}
- <article>
- {{ partial "home/home-nav" . }}
- {{ partial "home/latest-posts" . }}
- {{ partial "home/more-links" . }}
- </article>
-{{ end }}
diff --git a/layouts/library/page.html b/layouts/library/page.html
deleted file mode 100644
index fbc5d15f..00000000
--- a/layouts/library/page.html
+++ /dev/null
@@ -1,62 +0,0 @@
-{{ define "main" }}
- <article class="h-entry">
- <header class="flex flex-col items-center gap-2">
- <div class="relative border-3 border-solid border-white shadow-lg w-[10rem] md:w-[15rem]"
- style="view-transition-name: book-{{ .File.UniqueID }}">
- <img
- class="lazy block w-full h-auto" loading="lazy"
- data-pagefind-meta="image[src]"
- src="{{ .Params.cover }}"
- />
- {{ partial "components/logo"
- (dict
- "link" "library"
- "ctx" .
- "class" "round-sticker absolute w-8 h-8 md:w-20 md:h-20 top-8 -right-8 md:-right-12"
- "imageClass" "w-full") }}
- </div>
- <h1 class="xerox p-name" data-pagefind-meta="title">{{ .Title }}</h1>
- {{- $rating := .Params.rating -}}
- {{- $fullStars := math.Floor $rating -}}
- <p class="m-0">
- {{ with .Params.authors }}{{ delimit . ", " }}{{ end }}
- </p>
- <p class="m-0">
- {{- range seq $fullStars }}
- <span class="star">⭐</span>
- {{- end -}}
- </p>
- </header>
-
- {{ partial "content" . }}
-
- <div class="text-size-base text-secondary md:flex md:justify-between">
- <p>于 {{ partial "components/date" . }} 读完</p>
- <p>{{ partial "components/tags" . }}</p>
- </div>
-
- {{ partial "components/backlinks" (dict "filename" .File.BaseFileName "type" "library" "context" .) }}
- {{ partial "posts/webmention" . }}
- {{ partial "components/back-to-top.html" . }}
- {{ partial "components/microformats" . }}
-
-
-
- {{ with .Params.authors }}
- {{ $author := index . 0 }}
- {{ $term := index $.Site.Taxonomies.authors $author }}
- {{ if and $term (gt (len $term.Pages) 1) }}
- <h2>我读过的 {{ $author }} 的其它书籍</h2>
- <div class="grid grid-cols-4 md:grid-cols-6 items-center gap-4 my-4">
- {{ range $term.Pages }}
- {{ if ne .File.UniqueID $.File.UniqueID }}
- <div data-tooltip="{{ .Title }}">
- {{ partial "items/book" (dict "ctx" .) }}
- </div>
- {{ end }}
- {{ end }}
- </div>
- {{ end }}
- {{ end }}
- </article>
-{{ end }}
diff --git a/layouts/library/section.html b/layouts/library/section.html
deleted file mode 100644
index bb297a0d..00000000
--- a/layouts/library/section.html
+++ /dev/null
@@ -1,85 +0,0 @@
-{{ define "main" }}
-
-{{ $isLibraryHome := eq .RelPermalink "/library/" }}
-{{ $books := .RegularPages }}
-{{ if $isLibraryHome }}
- {{ $sections := (sort .Sections "value" "asc") }}
- {{ range $sections }}
- {{ $books = $books | append .RegularPages }}
- {{ end }}
-{{ end }}
-
-{{ $years := slice }}
-{{ range .Sections }}
- {{ $years = $years | append .Title }}
-{{ end }}
-{{ $years = $years | collections.Reverse }}
-
- <article class="pagefind-exclude">
- <div class="markdown-body">{{ .Content }}</div>
-
- <div>
-
- {{ if $isLibraryHome }}
- {{ partial "components/section-title" (dict
- "Left" "最近读的书"
- "Right" (printf "共 %d 篇书评" (len $books))
- )}}
- {{ end }}
-
- <div class="grid grid-cols-4 md:grid-cols-6 items-center gap-4 my-4">
- {{ $booksToShow := $books }}
- {{ if $isLibraryHome }}
- {{ $booksToShow = first 18 $books }}
- {{ end }}
- {{ range $i, $book := $booksToShow }}
- <div class="{{ if gt $i 15 }}hidden md:block{{ end }}">
- {{ partial "items/book" (dict
- "ctx" $book
- ) }}
- </div>
- {{ end }}
- </div>
-
-
- <!-- ONLY SHOW IN HOME SECTION / START -->
- {{ if $isLibraryHome }}
-
- <!-- === year list === -->
- <div class="flex items-center my-8 justify-between gap-4">
- <a href="/library/{{ now.Year }}" class="small-button">
- {{ T "library.viewAllThisYear" }}
- <span class="text-secondary">→</span>
- </a>
- <p class="my-0">
- {{ $currentYear := printf "%d" now.Year }}
- {{ range $i, $year := $years }}
- {{ if ne $year $currentYear }}
- <a class="text-secondary" href="{{ printf "/library/%s/" $year }}">{{ $year }} 年</a>
- {{ if not (eq $i (sub (len $years) 1)) }}·{{ end }}
- {{ end }}
- {{ end }}
- </p>
- </div>
-
- <!-- === good books section === -->
- {{ $goodBooks := where $books ".Params.rating" "==" 5 }}
- {{ partial "components/section-title" (dict
- "Left" "推荐好书"
- "Right" (printf "共 %d 本" (len $goodBooks))
- )}}
- <div class="grid grid-cols-4 md:grid-cols-6 items-center gap-4 my-4">
- {{ range $goodBooks }}
- {{ partial "items/book" (dict
- "ctx" .
- "NoViewTransition" true
- ) }}
- {{ end }}
- </div>
-
- {{ end }}
- <!-- ONLY SHOW IN HOME SECTION / END -->
-
- </div>
- </article>
-{{ end }}
diff --git a/layouts/page.html b/layouts/page.html
deleted file mode 100644
index ab703e2e..00000000
--- a/layouts/page.html
+++ /dev/null
@@ -1,9 +0,0 @@
-{{ define "main" }}
- <article>
- <div id="post-content" class="post-content markdown-body text-size-md md:text-size-lg leading-loose"
- style="view-transition-name: post-content-{{ .File.UniqueID }}">
- {{ partial "posts/toc" . }}
- {{ partial "utils/render" .Content }}
- </div>
- </article>
-{{ end }}
diff --git a/layouts/rss.xml b/layouts/rss.xml
deleted file mode 100644
index 026d9a87..00000000
--- a/layouts/rss.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-{{- $authorEmail := "" }}
-{{- with site.Params.author }}
- {{- if reflect.IsMap . }}
- {{- with .email }}
- {{- $authorEmail = . }}
- {{- end }}
- {{- end }}
-{{- end }}
-
-{{- $authorName := "" }}
-{{- with site.Params.author }}
- {{- if reflect.IsMap . }}
- {{- with .name }}
- {{- $authorName = . }}
- {{- end }}
- {{- else }}
- {{- $authorName = . }}
- {{- end }}
-{{- end }}
-
-{{- $pctx := . }}
-{{- if .IsHome }}{{ $pctx = .Site }}{{ end }}
-{{- $pages := slice }}
-{{- if or $.IsHome $.IsSection }}
-{{- $pages = $pctx.RegularPages }}
-{{- else }}
-{{- $pages = $pctx.Pages }}
-{{- end }}
-{{- $limit := .Site.Config.Services.RSS.Limit }}
-{{- if ge $limit 1 }}
-{{- $pages = $pages | first $limit }}
-{{- end }}
-{{- printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>" | safeHTML }}
-{{- printf "<?xml-stylesheet type=\"text/xsl\" href=\"/atom.xsl.xml\"?>" | safeHTML }}
-<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
- <channel>
- <title>{{ if eq .Title .Site.Title }}{{ .Site.Title }}{{ else }}{{ with .Title }}{{.}} | {{ end }}{{ .Site.Title }}{{ end }}</title>
- <link>{{ .Permalink }}</link>
- <description>{{ .Site.Title }}{{ if ne .Title .Site.Title }}{{ with .Title }}:在「{{.}}」分区下的最新内容{{ end }}{{ end }}</description>
- <generator>Hugo</generator>
- <language>{{ site.Language.LanguageCode }}</language>{{ with $authorEmail }}
- <managingEditor>{{.}}{{ with $authorName }} ({{ . }}){{ end }}</managingEditor>{{ end }}{{ with $authorEmail }}
- <webMaster>{{ . }}{{ with $authorName }} ({{ . }}){{ end }}</webMaster>{{ end }}{{ with .Site.Copyright }}
- <copyright>{{ . }}</copyright>{{ end }}{{ if not .Date.IsZero }}
- <lastBuildDate>{{ (index $pages.ByLastmod.Reverse 0).Lastmod.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }}
- {{- with .OutputFormats.Get "RSS" }}
- {{ printf "<atom:link href=%q rel=\"self\" type=%q />" .Permalink .MediaType | safeHTML }}
- {{- end }}
- {{- range $pages }}
- <item>
- <title>{{ .Title }}</title>
- <link>{{ .Permalink }}</link>
- <pubDate>{{ .PublishDate.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
- {{- with $authorEmail }}<author>{{ . }}{{ with $authorName }} ({{ . }}){{ end }}</author>{{ end }}
- <guid>{{ .Permalink }}</guid>
- <description>
- {{ .Content | transform.XMLEscape | safeHTML }}
- {{ printf `<div style="text-align:right;"><a href="%s#action-menu">%s</a></div>` .Permalink (T "rss_comment_link") | transform.XMLEscape | safeHTML }}
- </description>
- </item>
- {{- end }}
- </channel>
-</rss>
diff --git a/layouts/stats.html b/layouts/stats.html
deleted file mode 100644
index ea0f3e2a..00000000
--- a/layouts/stats.html
+++ /dev/null
@@ -1,30 +0,0 @@
-{{ define "main" }}
- <article>
- <section>
- {{ partial "stats/stats-table" . }}
- </section>
-
- <section>
- <h2>每月文章字数</h2>
- {{ partial "stats/word-count-chart" . }}
- </section>
-
- <section>
- <h2>文章发布时间段分布</h2>
- <div class="outbox">
- {{ partial "stats/publish-time-chart" . }}
- </div>
- </section>
- <hr>
-
- <section>
- <h2>内部链接图谱</h2>
- <p>站内各个页面之间通过超链接建立起来的联系,你可以通过视觉化的双向链接逛逛我的博客。图谱可以缩放和拖拽,你也可以<a href="/graph" style="text-decoration: underline;">点击这里</a>全屏浏览。</p>
- <div class="outbox small">
- <iframe src="https://www.geedea.pro/graph.html"
- style="width:100%;height: 30rem;border-radius:5px;border:none"></iframe>
- </div>
- </section>
- <hr>
- </article>
-{{ end }}
diff --git a/layouts/tags/taxonomy.html b/layouts/tags/taxonomy.html
deleted file mode 100644
index d716e87e..00000000
--- a/layouts/tags/taxonomy.html
+++ /dev/null
@@ -1,12 +0,0 @@
-{{ define "main" }}
-<article>
- <div class="post-content markdown-body text-size-md md:text-size-lg leading-loose">
- {{ partial "utils/render" .Content }}
- </div>
- <h2>切面</h2>
- {{ partial "taxonomy/all-tags" . }}
- <hr />
- <h2>开始速切!</h2>
- <p class="text-secondary text-sm">快速切换到你想去的地方。</p>
- {{ partial "taxonomy/pagefind" . }}
-{{ end }}
diff --git a/layouts/taxonomy.html b/layouts/taxonomy.html
deleted file mode 100644
index 4ae858d9..00000000
--- a/layouts/taxonomy.html
+++ /dev/null
@@ -1,13 +0,0 @@
-{{ define "main" }}
- <article>
- <div class="post-content markdown-body text-size-md md:text-size-lg leading-loose">
- {{ partial "utils/render" .Content }}
- </div>
- <h2>文章系列</h2>
- {{ partial "taxonomy/all-categories.html" . }}
- <hr />
- <h2>尘封的系列</h2>
- <p>这些文章系列已经不再更新。</p>
- {{ partial "taxonomy/archived-categories.html" . }}
- </article>
-{{ end }}
diff --git a/layouts/term.html b/layouts/term.html
deleted file mode 100644
index 743fc69e..00000000
--- a/layouts/term.html
+++ /dev/null
@@ -1,15 +0,0 @@
-{{ define "main" }}
- <article>
- <section>
- {{ with .Content }}
- <div class="markdown-body text-size-lg md:text-size-xl">
- {{ . }}<hr/>
- </div>
- {{ end }}
- {{ partial "term/term-posts" . }}
- {{ partial "term/term-weeklies" . }}
- {{ partial "term/term-fictions" . }}
- {{ partial "term/term-books" . }}
- </section>
- </article>
-{{ end }}
diff --git a/layouts/uncategorized.html b/layouts/uncategorized.html
deleted file mode 100644
index a269a18a..00000000
--- a/layouts/uncategorized.html
+++ /dev/null
@@ -1,22 +0,0 @@
-{{ define "main" }}
- <article>
- {{ partial "header" . }}
- {{ partial "home/home-nav" . }}
- <div class="post-content markdown-body">
- <p>{{ .Content }}</p>
- </div>
- <!-- Uncategorized -->
- {{ $posts := .Site.GetPage "section" "posts" }}
- {{ $essays := .Site.GetPage "section" "essays" }}
- {{ $combined := $posts.Pages | append $essays.Pages }}
- {{ $uncategorized := where $combined "Params.categories" "eq" nil }}
- {{ if $uncategorized }}
- <ol class="ps-0 flex flex-col gap-2 leading-relaxed">
- {{ range $uncategorized }}
- {{ partial "items/post-small" . }}
- {{ end }}
- </ol>
- {{ end }}
- </article>
-{{ partial "footer.html" . }}
-{{ end }}
diff --git a/layouts/weekly/page.html b/layouts/weekly/page.html
deleted file mode 100644
index e093e810..00000000
--- a/layouts/weekly/page.html
+++ /dev/null
@@ -1,3 +0,0 @@
-{{ define "main" }}
- {{ partial "template/post-page" . }}
-{{ end }}
diff --git a/layouts/weekly/section.html b/layouts/weekly/section.html
deleted file mode 100644
index c1bc53b9..00000000
--- a/layouts/weekly/section.html
+++ /dev/null
@@ -1,41 +0,0 @@
-{{ define "main" }}
- {{ $pages := .Pages }}
- {{ $categories := slice }}
-
- <article>
- <div class="posts-list pagefind-exclude">
- <div class="markdown-body">{{ .Content }}</div>
-
- <!-- Post Archive List -->
- {{ $remainingMonthsToOpen := 3 }}
- {{ range $pages.GroupByDate "2006" -}}
- <section class="w-full">
- {{ partial "components/section-title" (dict
- "Left" .Key
- "Right" (T "archivePage.postCountAnnual" (len .Pages))
- )}}
-
- {{ range .Pages.GroupByDate "January" }}
- <div class="lazy-render"{{ if gt $remainingMonthsToOpen 0 }} open{{ end }}>
- <h2 class="text-size-lg inline-block w-full m-0
- flex justify-between items-center">
- {{ .Key }}
- </h2>
- <ul class="ps-0 flex flex-col gap-2 list-none leading-relaxed">
- {{ range .Pages }}
- <li class="text-size-lg">
- <a href="{{ .RelPermalink }}">
- {{ .Title }}{{ with .Params.subtitle }}:<span class="text-secondary">{{. }}</span>
- {{ end }}
- </a>
- </li>
- {{ end }}
- </ul>
- </div>
- {{ $remainingMonthsToOpen = sub $remainingMonthsToOpen 1 }}
- {{ end }}
- </section>
- {{ end }}
- </div>
- </article>
-{{ end }}
diff --git a/package.json b/package.json
deleted file mode 100644
index 3cf3ad7b..00000000
--- a/package.json
+++ /dev/null
@@ -1,23 +0,0 @@
-{
- "name": "geek-death-project",
- "version": "1.0.0",
- "description": "![](screenshot.png)",
- "main": "index.js",
- "devDependencies": {
- "@unocss/cli": "^66.3.3",
- "@unocss/preset-wind4": "^66.3.3",
- "unocss": "^66.3.3"
- },
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1",
- "build:uno": "unocss \"{layouts,content}/**/*.{html,md}\" -o assets/css/uno.css --watch",
- "build:uno:prod": "unocss \"{layouts,content}/**/*.{html,md}\" -o assets/css/uno.css"
- },
- "keywords": [],
- "author": "",
- "license": "ISC",
- "dependencies": {
- "@remy/webmention": "^1.5.0",
- "pagefind": "1.5.0"
- }
-}
diff --git a/pagefind.yml b/pagefind.yml
deleted file mode 100644
index 3419a66f..00000000
--- a/pagefind.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-site: public
-exclude_selectors:
- - '.pagefind-exclude'
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
deleted file mode 100644
index 4439f762..00000000
--- a/pnpm-lock.yaml
+++ /dev/null
@@ -1,2191 +0,0 @@
-lockfileVersion: '9.0'
-
-settings:
- autoInstallPeers: true
- excludeLinksFromLockfile: false
-
-importers:
-
- .:
- dependencies:
- '@remy/webmention':
- specifier: ^1.5.0
- version: 1.5.0
- pagefind:
- specifier: 1.5.0
- version: 1.5.0
- devDependencies:
- '@unocss/cli':
- specifier: ^66.3.3
- version: 66.3.3
- '@unocss/preset-wind4':
- specifier: ^66.3.3
- version: 66.3.3
- unocss:
- specifier: ^66.3.3
- version: 66.3.3(postcss@8.5.6)(vite@6.3.5(jiti@2.4.2))(vue@3.5.17)
-
-packages:
-
- '@ampproject/remapping@2.3.0':
- resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
- engines: {node: '>=6.0.0'}
-
- '@antfu/install-pkg@1.1.0':
- resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
-
- '@antfu/utils@8.1.1':
- resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==}
-
- '@babel/helper-string-parser@7.27.1':
- resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-validator-identifier@7.27.1':
- resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
- engines: {node: '>=6.9.0'}
-
- '@babel/parser@7.28.0':
- resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==}
- engines: {node: '>=6.0.0'}
- hasBin: true
-
- '@babel/types@7.28.1':
- resolution: {integrity: sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==}
- engines: {node: '>=6.9.0'}
-
- '@esbuild/aix-ppc64@0.25.6':
- resolution: {integrity: sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [aix]
-
- '@esbuild/android-arm64@0.25.6':
- resolution: {integrity: sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [android]
-
- '@esbuild/android-arm@0.25.6':
- resolution: {integrity: sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [android]
-
- '@esbuild/android-x64@0.25.6':
- resolution: {integrity: sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [android]
-
- '@esbuild/darwin-arm64@0.25.6':
- resolution: {integrity: sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [darwin]
-
- '@esbuild/darwin-x64@0.25.6':
- resolution: {integrity: sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [darwin]
-
- '@esbuild/freebsd-arm64@0.25.6':
- resolution: {integrity: sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [freebsd]
-
- '@esbuild/freebsd-x64@0.25.6':
- resolution: {integrity: sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [freebsd]
-
- '@esbuild/linux-arm64@0.25.6':
- resolution: {integrity: sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [linux]
-
- '@esbuild/linux-arm@0.25.6':
- resolution: {integrity: sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [linux]
-
- '@esbuild/linux-ia32@0.25.6':
- resolution: {integrity: sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==}
- engines: {node: '>=18'}
- cpu: [ia32]
- os: [linux]
-
- '@esbuild/linux-loong64@0.25.6':
- resolution: {integrity: sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==}
- engines: {node: '>=18'}
- cpu: [loong64]
- os: [linux]
-
- '@esbuild/linux-mips64el@0.25.6':
- resolution: {integrity: sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==}
- engines: {node: '>=18'}
- cpu: [mips64el]
- os: [linux]
-
- '@esbuild/linux-ppc64@0.25.6':
- resolution: {integrity: sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [linux]
-
- '@esbuild/linux-riscv64@0.25.6':
- resolution: {integrity: sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==}
- engines: {node: '>=18'}
- cpu: [riscv64]
- os: [linux]
-
- '@esbuild/linux-s390x@0.25.6':
- resolution: {integrity: sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==}
- engines: {node: '>=18'}
- cpu: [s390x]
- os: [linux]
-
- '@esbuild/linux-x64@0.25.6':
- resolution: {integrity: sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [linux]
-
- '@esbuild/netbsd-arm64@0.25.6':
- resolution: {integrity: sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [netbsd]
-
- '@esbuild/netbsd-x64@0.25.6':
- resolution: {integrity: sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [netbsd]
-
- '@esbuild/openbsd-arm64@0.25.6':
- resolution: {integrity: sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [openbsd]
-
- '@esbuild/openbsd-x64@0.25.6':
- resolution: {integrity: sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [openbsd]
-
- '@esbuild/openharmony-arm64@0.25.6':
- resolution: {integrity: sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [openharmony]
-
- '@esbuild/sunos-x64@0.25.6':
- resolution: {integrity: sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [sunos]
-
- '@esbuild/win32-arm64@0.25.6':
- resolution: {integrity: sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [win32]
-
- '@esbuild/win32-ia32@0.25.6':
- resolution: {integrity: sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==}
- engines: {node: '>=18'}
- cpu: [ia32]
- os: [win32]
-
- '@esbuild/win32-x64@0.25.6':
- resolution: {integrity: sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [win32]
-
- '@iconify/types@2.0.0':
- resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
-
- '@iconify/utils@2.3.0':
- resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==}
-
- '@jridgewell/gen-mapping@0.3.12':
- resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==}
-
- '@jridgewell/resolve-uri@3.1.2':
- resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
- engines: {node: '>=6.0.0'}
-
- '@jridgewell/sourcemap-codec@1.5.4':
- resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==}
-
- '@jridgewell/trace-mapping@0.3.29':
- resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==}
-
- '@pagefind/darwin-arm64@1.5.0':
- resolution: {integrity: sha512-OXQVlxALU9+Lz/LxkAa+RvaxY1cnRKUDCuwl9o8PY5Lg/znP573y4WIbVOOIz8Bv7uj7r00TGy7pD+NSLMJGBw==}
- cpu: [arm64]
- os: [darwin]
-
- '@pagefind/darwin-x64@1.5.0':
- resolution: {integrity: sha512-+LK1Xq5n/B0hHc08DW61SnfIlfLKyXZ1oKcbfZ1MimE7Rn0Q6R0VI/TlC04f/JDPm+67zAOwPGizzvefOi5vqQ==}
- cpu: [x64]
- os: [darwin]
-
- '@pagefind/freebsd-x64@1.5.0':
- resolution: {integrity: sha512-kicDfUF9gn/z06NimTwNlZXF8z3pLsN3BIPPt6N8unuh0n55fr64tVs2p3a5RKYmQkJGjPfOE/C9GI5YTEpURg==}
- cpu: [x64]
- os: [freebsd]
-
- '@pagefind/linux-arm64@1.5.0':
- resolution: {integrity: sha512-e5rDB3wPm89bcSLiatKBDTrVTbsMQrrtkXRaAoUJYU0C1suXVvEzZfjmMvrUDvYhZBx/Ls8hGuGxlqSJBz3gDg==}
- cpu: [arm64]
- os: [linux]
-
- '@pagefind/linux-x64@1.5.0':
- resolution: {integrity: sha512-vh52DcBiF/mRMmq+Rwt3M3RgEWgl00jFk/M5NWhLEHJFq4+papQXwbyKbi7cNlxaeYrKx6wOfW3fm9cftfc/Kg==}
- cpu: [x64]
- os: [linux]
-
- '@pagefind/windows-arm64@1.5.0':
- resolution: {integrity: sha512-kg+szZwffZdyWn6SL6RHjAYjhSvJ2bT4qkv3KepGsbmD9fuSHUSC+2kydDneDVUA9qEDRf9uSFoEAsXsp1/JKA==}
- cpu: [arm64]
- os: [win32]
-
- '@pagefind/windows-x64@1.5.0':
- resolution: {integrity: sha512-8eOCmB8lnpyvwz+HrcTXLuBxhj7UseAFh6KGEXRe8UCcAfVQih+qPy/4akJRezViI+ONijz9oi7HpMkw9rdtBg==}
- cpu: [x64]
- os: [win32]
-
- '@polka/url@1.0.0-next.29':
- resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
-
- '@quansync/fs@0.1.3':
- resolution: {integrity: sha512-G0OnZbMWEs5LhDyqy2UL17vGhSVHkQIfVojMtEWVenvj0V5S84VBgy86kJIuNsGDp2p7sTKlpSIpBUWdC35OKg==}
- engines: {node: '>=20.0.0'}
-
- '@remy/webmention@1.5.0':
- resolution: {integrity: sha512-50HD/WfXlykMgQxX5Oz9Kzl8WqBbkdXP58mbd7VkBh4ZcKBixNoObyeCeomtTPW36kUMBe9icF4MofF4FC42mw==}
- hasBin: true
-
- '@rollup/rollup-android-arm-eabi@4.45.0':
- resolution: {integrity: sha512-2o/FgACbji4tW1dzXOqAV15Eu7DdgbKsF2QKcxfG4xbh5iwU7yr5RRP5/U+0asQliSYv5M4o7BevlGIoSL0LXg==}
- cpu: [arm]
- os: [android]
-
- '@rollup/rollup-android-arm64@4.45.0':
- resolution: {integrity: sha512-PSZ0SvMOjEAxwZeTx32eI/j5xSYtDCRxGu5k9zvzoY77xUNssZM+WV6HYBLROpY5CkXsbQjvz40fBb7WPwDqtQ==}
- cpu: [arm64]
- os: [android]
-
- '@rollup/rollup-darwin-arm64@4.45.0':
- resolution: {integrity: sha512-BA4yPIPssPB2aRAWzmqzQ3y2/KotkLyZukVB7j3psK/U3nVJdceo6qr9pLM2xN6iRP/wKfxEbOb1yrlZH6sYZg==}
- cpu: [arm64]
- os: [darwin]
-
- '@rollup/rollup-darwin-x64@4.45.0':
- resolution: {integrity: sha512-Pr2o0lvTwsiG4HCr43Zy9xXrHspyMvsvEw4FwKYqhli4FuLE5FjcZzuQ4cfPe0iUFCvSQG6lACI0xj74FDZKRA==}
- cpu: [x64]
- os: [darwin]
-
- '@rollup/rollup-freebsd-arm64@4.45.0':
- resolution: {integrity: sha512-lYE8LkE5h4a/+6VnnLiL14zWMPnx6wNbDG23GcYFpRW1V9hYWHAw9lBZ6ZUIrOaoK7NliF1sdwYGiVmziUF4vA==}
- cpu: [arm64]
- os: [freebsd]
-
- '@rollup/rollup-freebsd-x64@4.45.0':
- resolution: {integrity: sha512-PVQWZK9sbzpvqC9Q0GlehNNSVHR+4m7+wET+7FgSnKG3ci5nAMgGmr9mGBXzAuE5SvguCKJ6mHL6vq1JaJ/gvw==}
- cpu: [x64]
- os: [freebsd]
-
- '@rollup/rollup-linux-arm-gnueabihf@4.45.0':
- resolution: {integrity: sha512-hLrmRl53prCcD+YXTfNvXd776HTxNh8wPAMllusQ+amcQmtgo3V5i/nkhPN6FakW+QVLoUUr2AsbtIRPFU3xIA==}
- cpu: [arm]
- os: [linux]
- libc: [glibc]
-
- '@rollup/rollup-linux-arm-musleabihf@4.45.0':
- resolution: {integrity: sha512-XBKGSYcrkdiRRjl+8XvrUR3AosXU0NvF7VuqMsm7s5nRy+nt58ZMB19Jdp1RdqewLcaYnpk8zeVs/4MlLZEJxw==}
- cpu: [arm]
- os: [linux]
- libc: [musl]
-
- '@rollup/rollup-linux-arm64-gnu@4.45.0':
- resolution: {integrity: sha512-fRvZZPUiBz7NztBE/2QnCS5AtqLVhXmUOPj9IHlfGEXkapgImf4W9+FSkL8cWqoAjozyUzqFmSc4zh2ooaeF6g==}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
-
- '@rollup/rollup-linux-arm64-musl@4.45.0':
- resolution: {integrity: sha512-Btv2WRZOcUGi8XU80XwIvzTg4U6+l6D0V6sZTrZx214nrwxw5nAi8hysaXj/mctyClWgesyuxbeLylCBNauimg==}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
-
- '@rollup/rollup-linux-loongarch64-gnu@4.45.0':
- resolution: {integrity: sha512-Li0emNnwtUZdLwHjQPBxn4VWztcrw/h7mgLyHiEI5Z0MhpeFGlzaiBHpSNVOMB/xucjXTTcO+dhv469Djr16KA==}
- cpu: [loong64]
- os: [linux]
- libc: [glibc]
-
- '@rollup/rollup-linux-powerpc64le-gnu@4.45.0':
- resolution: {integrity: sha512-sB8+pfkYx2kvpDCfd63d5ScYT0Fz1LO6jIb2zLZvmK9ob2D8DeVqrmBDE0iDK8KlBVmsTNzrjr3G1xV4eUZhSw==}
- cpu: [ppc64]
- os: [linux]
- libc: [glibc]
-
- '@rollup/rollup-linux-riscv64-gnu@4.45.0':
- resolution: {integrity: sha512-5GQ6PFhh7E6jQm70p1aW05G2cap5zMOvO0se5JMecHeAdj5ZhWEHbJ4hiKpfi1nnnEdTauDXxPgXae/mqjow9w==}
- cpu: [riscv64]
- os: [linux]
- libc: [glibc]
-
- '@rollup/rollup-linux-riscv64-musl@4.45.0':
- resolution: {integrity: sha512-N/euLsBd1rekWcuduakTo/dJw6U6sBP3eUq+RXM9RNfPuWTvG2w/WObDkIvJ2KChy6oxZmOSC08Ak2OJA0UiAA==}
- cpu: [riscv64]
- os: [linux]
- libc: [musl]
-
- '@rollup/rollup-linux-s390x-gnu@4.45.0':
- resolution: {integrity: sha512-2l9sA7d7QdikL0xQwNMO3xURBUNEWyHVHfAsHsUdq+E/pgLTUcCE+gih5PCdmyHmfTDeXUWVhqL0WZzg0nua3g==}
- cpu: [s390x]
- os: [linux]
- libc: [glibc]
-
- '@rollup/rollup-linux-x64-gnu@4.45.0':
- resolution: {integrity: sha512-XZdD3fEEQcwG2KrJDdEQu7NrHonPxxaV0/w2HpvINBdcqebz1aL+0vM2WFJq4DeiAVT6F5SUQas65HY5JDqoPw==}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
-
- '@rollup/rollup-linux-x64-musl@4.45.0':
- resolution: {integrity: sha512-7ayfgvtmmWgKWBkCGg5+xTQ0r5V1owVm67zTrsEY1008L5ro7mCyGYORomARt/OquB9KY7LpxVBZes+oSniAAQ==}
- cpu: [x64]
- os: [linux]
- libc: [musl]
-
- '@rollup/rollup-win32-arm64-msvc@4.45.0':
- resolution: {integrity: sha512-B+IJgcBnE2bm93jEW5kHisqvPITs4ddLOROAcOc/diBgrEiQJJ6Qcjby75rFSmH5eMGrqJryUgJDhrfj942apQ==}
- cpu: [arm64]
- os: [win32]
-
- '@rollup/rollup-win32-ia32-msvc@4.45.0':
- resolution: {integrity: sha512-+CXwwG66g0/FpWOnP/v1HnrGVSOygK/osUbu3wPRy8ECXjoYKjRAyfxYpDQOfghC5qPJYLPH0oN4MCOjwgdMug==}
- cpu: [ia32]
- os: [win32]
-
- '@rollup/rollup-win32-x64-msvc@4.45.0':
- resolution: {integrity: sha512-SRf1cytG7wqcHVLrBc9VtPK4pU5wxiB/lNIkNmW2ApKXIg+RpqwHfsaEK+e7eH4A1BpI6BX/aBWXxZCIrJg3uA==}
- cpu: [x64]
- os: [win32]
-
- '@types/estree@1.0.8':
- resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
-
- '@unocss/astro@66.3.3':
- resolution: {integrity: sha512-q26EfadSMmEXZpWDKsJF9anBCfhYDmWljVpDZ2Wo8K48IbZMUXrWfiAiUc6ijE/A/rADfHk8bp3a3GE01t3I9A==}
- peerDependencies:
- vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0
- peerDependenciesMeta:
- vite:
- optional: true
-
- '@unocss/cli@66.3.3':
- resolution: {integrity: sha512-U0HoDcwi/DetqP5zDT3dfxG94pC3TI0PfxmpdTfPY7xEylIdLbV89fb70CvJVysDSQJIuw6TYwqS1ZlHoYNKTA==}
- engines: {node: '>=14'}
- hasBin: true
-
- '@unocss/config@66.3.3':
- resolution: {integrity: sha512-D/UxnAmkabapqWU4tF85dWWhNfCUyNutWmd4AD2VsQRZOykufJedLV74r3Z3XhoPJn4IGr3BKZm5/rflf5viDg==}
- engines: {node: '>=14'}
-
- '@unocss/core@66.3.3':
- resolution: {integrity: sha512-6WFLd92TJelVQARtCGaF+EgEoHKIVe43gkGXVoWILu0HUDRWdhv+cpcyX0RTJV22Y976AxeneU7/zmhAh+CXNg==}
-
- '@unocss/extractor-arbitrary-variants@66.3.3':
- resolution: {integrity: sha512-TXzjH6FcITQ8V2x7ETHgVOlAHf3ll/ysxL+W4fMROm8jP/o7jvsg36tRfOwU0sDGo/qoCPux82ix9e6/JW0oqQ==}
-
- '@unocss/inspector@66.3.3':
- resolution: {integrity: sha512-NsK1WRWez2Mzk4+ophtBdXel8nGaPkIDa9lYSFMdKLF/1jNW23txeEL8CsD6/CK8K0BsR11rhLKhUrzyrjfBSQ==}
-
- '@unocss/postcss@66.3.3':
- resolution: {integrity: sha512-VKq+BtfPIZbLeAeZFprtKZJAyFBOqA8qpQm+vmWBiBia70JzkwfF2SMNIHiGt022yRo9ZmjnI9uRTxSzqXUsUQ==}
- engines: {node: '>=14'}
- peerDependencies:
- postcss: ^8.4.21
-
- '@unocss/preset-attributify@66.3.3':
- resolution: {integrity: sha512-22+0Cqqu09q+xHfZ3Wk8Coxe5m6PmpgWz4U5xrEC8056UfG3Q1KEqoCxy2wySJIq8SqxQ30Nlll7oMa31B8Krw==}
-
- '@unocss/preset-icons@66.3.3':
- resolution: {integrity: sha512-Bmhiev05BN/horlgnyZ8gzQWZKd7oVpUBWD66X7U/dgkLdO6B5GIIsdO5Fi7JLeMDmyXm6vlYk0YQhiTbx8l9w==}
-
- '@unocss/preset-mini@66.3.3':
- resolution: {integrity: sha512-pz8rgvHRYS/6fsZNtG7iArLzwANnLy5GkHY/lbuqkWhO2S2Nf7kpJCbR/uV/XeuFsLnYcZW3NLOmelfvZvJamA==}
-
- '@unocss/preset-tagify@66.3.3':
- resolution: {integrity: sha512-L1Ez7Y4uBaW+wiv1BOQygpfhseSt3EZ53jqkl7fxl1EKVsJy6SuZgJxlXEHUYp9xYdSp6EHq2CfL8UevaR+loA==}
-
- '@unocss/preset-typography@66.3.3':
- resolution: {integrity: sha512-aQXiGCObvWD9grfUpm0d5nzN+Cpvag0rHP39UjUKb0xSTzY09VzwDrua4kWVO5wJLNK6/L70osyhEgmC3qToxA==}
-
- '@unocss/preset-uno@66.3.3':
- resolution: {integrity: sha512-Tiho4LidpuMHrB19GHTU6XrL0A5eFELHk9ebQ/3WeTy+K/9a6Hn5zsHJe5UCtOsEcUdKB33oZx0hXUp93hb/YQ==}
-
- '@unocss/preset-web-fonts@66.3.3':
- resolution: {integrity: sha512-ysKZeC7TXxRiqnNL9GxZFGMKFAHXrcaqozPaEOIJ40dvzbJt8IMLyFndZkcFMcgDCV0pFh/y37mGxxxARO9+pQ==}
-
- '@unocss/preset-wind3@66.3.3':
- resolution: {integrity: sha512-iXmjvPqvmPTo4z7epQDqHxzlGRsbLJEgfETqTrRJeagvFG7Gs+ajS8cQhbf6wL01dSRHjvhVXi3MsIvqfHHXOw==}
-
- '@unocss/preset-wind4@66.3.3':
- resolution: {integrity: sha512-JSJTXVJel6kX+u4Ktt6JGnukYWYhKxmjgORTwclUpokRHgEoD+xsh0Rz4YGJ1fWSnzNslNQhWP9yDRByVPHWwA==}
-
- '@unocss/preset-wind@66.3.3':
- resolution: {integrity: sha512-3Mxl/TDPcv8nNKdFe3WKdlXE6de+lCaaizEH86BILW3ZeyPU9aKzWcZIoxohla0a6zMxDQ2+Gf+7EwaOvpqo7Q==}
-
- '@unocss/reset@66.3.3':
- resolution: {integrity: sha512-VIeR/mIcCL89/1uA1KM1QCYca4aeIGqEHMTJL1nCD4v+7wk6XhNXhsp5gMIHo+V804SUSmATWaeHTiKpiFu7AQ==}
-
- '@unocss/rule-utils@66.3.3':
- resolution: {integrity: sha512-QKgVGV5nRRnK44/reUKFLAc5UGyl98vz3hrfk8JI8pVza58vmQWTdAB2rIpNJ5a5j+EkWfDOUlGQaOrIeYGLdg==}
- engines: {node: '>=14'}
-
- '@unocss/transformer-attributify-jsx@66.3.3':
- resolution: {integrity: sha512-ENNYFk5wrI4jlxn0tWGeR9QGxflAfZue3X2ABg0KSVOiYyIOsrHqtdoiLYkuCA9idRlBZPQxePJKcPWt1r/tYA==}
-
- '@unocss/transformer-compile-class@66.3.3':
- resolution: {integrity: sha512-VTEFuwp3iajGWyEFwmO5LRvOjgZM1TK+4rX5Q79xyTAPkLAKgOa03Ne8+kU8oG0TQEa4mXVw6ul9McM7UBJh1w==}
-
- '@unocss/transformer-directives@66.3.3':
- resolution: {integrity: sha512-11T7fmYk/XZcqFDn4qiIvs04mJhUtAoha5Y99bVE+L3byWa6BT4jb5aSAKk+24q5aynwgB++4RgfQxarj69WTw==}
-
- '@unocss/transformer-variant-group@66.3.3':
- resolution: {integrity: sha512-uhK81pbJfXJFYaXxOoIFVEG8/Kx1iaAkTwRB6c+WNUfl9GiKyYQcrI7bETgCPPbg230Z68jVICBgBATeLJ31vQ==}
-
- '@unocss/vite@66.3.3':
- resolution: {integrity: sha512-uu3smeEW6q36ri6vydRx2GiTGF5O/J80Fr4GLmLiwfpt2YnPHraO7XHVR5/mwG2Oz5Kov0uGvxVsdgxZABKRgw==}
- peerDependencies:
- vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0
-
- '@vue/compiler-core@3.5.17':
- resolution: {integrity: sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA==}
-
- '@vue/compiler-dom@3.5.17':
- resolution: {integrity: sha512-+2UgfLKoaNLhgfhV5Ihnk6wB4ljyW1/7wUIog2puUqajiC29Lp5R/IKDdkebh9jTbTogTbsgB+OY9cEWzG95JQ==}
-
- '@vue/compiler-sfc@3.5.17':
- resolution: {integrity: sha512-rQQxbRJMgTqwRugtjw0cnyQv9cP4/4BxWfTdRBkqsTfLOHWykLzbOc3C4GGzAmdMDxhzU/1Ija5bTjMVrddqww==}
-
- '@vue/compiler-ssr@3.5.17':
- resolution: {integrity: sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ==}
-
- '@vue/reactivity@3.5.17':
- resolution: {integrity: sha512-l/rmw2STIscWi7SNJp708FK4Kofs97zc/5aEPQh4bOsReD/8ICuBcEmS7KGwDj5ODQLYWVN2lNibKJL1z5b+Lw==}
-
- '@vue/runtime-core@3.5.17':
- resolution: {integrity: sha512-QQLXa20dHg1R0ri4bjKeGFKEkJA7MMBxrKo2G+gJikmumRS7PTD4BOU9FKrDQWMKowz7frJJGqBffYMgQYS96Q==}
-
- '@vue/runtime-dom@3.5.17':
- resolution: {integrity: sha512-8El0M60TcwZ1QMz4/os2MdlQECgGoVHPuLnQBU3m9h3gdNRW9xRmI8iLS4t/22OQlOE6aJvNNlBiCzPHur4H9g==}
-
- '@vue/server-renderer@3.5.17':
- resolution: {integrity: sha512-BOHhm8HalujY6lmC3DbqF6uXN/K00uWiEeF22LfEsm9Q93XeJ/plHTepGwf6tqFcF7GA5oGSSAAUock3VvzaCA==}
- peerDependencies:
- vue: 3.5.17
-
- '@vue/shared@3.5.17':
- resolution: {integrity: sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==}
-
- acorn@8.15.0:
- resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
- engines: {node: '>=0.4.0'}
- hasBin: true
-
- anymatch@3.1.3:
- resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
- engines: {node: '>= 8'}
-
- binary-extensions@2.3.0:
- resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
- engines: {node: '>=8'}
-
- boolbase@1.0.0:
- resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
-
- braces@3.0.3:
- resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
- engines: {node: '>=8'}
-
- cac@6.7.14:
- resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
- engines: {node: '>=8'}
-
- cheerio-select@2.1.0:
- resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==}
-
- cheerio@0.22.0:
- resolution: {integrity: sha512-8/MzidM6G/TgRelkzDG13y3Y9LxBjCb+8yOEZ9+wwq5gVF2w2pV0wmHvjfT0RvuxGyR7UEuK36r+yYMbT4uKgA==}
- engines: {node: '>= 0.6'}
-
- cheerio@1.0.0-rc.12:
- resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==}
- engines: {node: '>= 6'}
-
- chokidar@3.6.0:
- resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==}
- engines: {node: '>= 8.10.0'}
-
- cli-color@0.3.2:
- resolution: {integrity: sha512-Ys/nDhHNRcxrS4EUI2RS/QCUE+61AMuEOj3sWDX+EIHkJWj+4XkRbOdwdxJteAJKjXYBbeFJMtfaEPd1MBF9pQ==}
-
- clui@0.3.6:
- resolution: {integrity: sha512-Z4UbgZILlIAjkEkZiDOa2aoYjohKx7fa6DxIh6cE9A6WNWZ61iXfQc6CmdC9SKdS5nO0P0UyQ+WfoXfB65e3HQ==}
-
- colorette@2.0.20:
- resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
-
- confbox@0.1.8:
- resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
-
- confbox@0.2.2:
- resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==}
-
- consola@3.4.2:
- resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
- engines: {node: ^14.18.0 || >=16.10.0}
-
- css-select@1.2.0:
- resolution: {integrity: sha512-dUQOBoqdR7QwV90WysXPLXG5LO7nhYBgiWVfxF80DKPF8zx1t/pUd2FYy73emg3zrjtM6dzmYgbHKfV2rxiHQA==}
-
- css-select@5.2.2:
- resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==}
-
- css-tree@3.1.0:
- resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==}
- engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
-
- css-what@2.1.3:
- resolution: {integrity: sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==}
-
- css-what@6.2.2:
- resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==}
- engines: {node: '>= 6'}
-
- csstype@3.1.3:
- resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
-
- d@0.1.1:
- resolution: {integrity: sha512-0SdM9V9pd/OXJHoWmTfNPTAeD+lw6ZqHg+isPyBFuJsZLSE0Ygg1cYZ/0l6DrKQXMOqGOu1oWupMoOfoRfMZrQ==}
-
- d@1.0.2:
- resolution: {integrity: sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==}
- engines: {node: '>=0.12'}
-
- debug@4.4.1:
- resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==}
- engines: {node: '>=6.0'}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
-
- decodeuricomponent@0.3.1:
- resolution: {integrity: sha512-8PuirnWM7fdE54vRKoVT60RQlkFXgKsi7ToV4pdVbj9jc9qGSFt4P10Oi3UK+FPHZi+lhqRdPyG2QqhSfIhtQQ==}
-
- defu@6.1.4:
- resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
-
- destr@2.0.5:
- resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==}
-
- dom-serializer@0.1.1:
- resolution: {integrity: sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==}
-
- dom-serializer@2.0.0:
- resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
-
- domelementtype@1.3.1:
- resolution: {integrity: sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==}
-
- domelementtype@2.3.0:
- resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
-
- domhandler@2.4.2:
- resolution: {integrity: sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==}
-
- domhandler@5.0.3:
- resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
- engines: {node: '>= 4'}
-
- domutils@1.5.1:
- resolution: {integrity: sha512-gSu5Oi/I+3wDENBsOWBiRK1eoGxcywYSqg3rR960/+EfY0CF4EX1VPkgHOZ3WiS/Jg2DtliF6BhWcHlfpYUcGw==}
-
- domutils@1.7.0:
- resolution: {integrity: sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==}
-
- domutils@3.2.2:
- resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
-
- duplexer@0.1.2:
- resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
-
- ent-replace@1.0.4:
- resolution: {integrity: sha512-Ki1Xt6aNzgqOf4sFbj+MaeEz/zwJSteP7Z2WgAmpJd3SpsoDie4gLFaaAfVoY0X98n9LWW/mTCU4T8k0NcpK4Q==}
-
- entities@1.1.2:
- resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==}
-
- entities@2.2.0:
- resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
-
- entities@4.5.0:
- resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
- engines: {node: '>=0.12'}
-
- entities@6.0.1:
- resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
- engines: {node: '>=0.12'}
-
- es5-ext@0.10.64:
- resolution: {integrity: sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==}
- engines: {node: '>=0.10'}
-
- es6-iterator@0.1.3:
- resolution: {integrity: sha512-6TOmbFM6OPWkTe+bQ3ZuUkvqcWUjAnYjKUCLdbvRsAUz2Pr+fYIibwNXNkLNtIK9PPFbNMZZddaRNkyJhlGJhA==}
-
- es6-iterator@2.0.3:
- resolution: {integrity: sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==}
-
- es6-symbol@2.0.1:
- resolution: {integrity: sha512-wjobO4zO8726HVU7mI2OA/B6QszqwHJuKab7gKHVx+uRfVVYGcWJkCIFxV2Madqb9/RUSrhJ/r6hPfG7FsWtow==}
-
- es6-symbol@3.1.4:
- resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==}
- engines: {node: '>=0.12'}
-
- es6-weak-map@0.1.4:
- resolution: {integrity: sha512-P+N5Cd2TXeb7G59euFiM7snORspgbInS29Nbf3KNO2JQp/DyhvMCDWd58nsVAXwYJ6W3Bx7qDdy6QQ3PCJ7jKQ==}
-
- esbuild@0.25.6:
- resolution: {integrity: sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==}
- engines: {node: '>=18'}
- hasBin: true
-
- esniff@2.0.1:
- resolution: {integrity: sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==}
- engines: {node: '>=0.10'}
-
- estree-walker@2.0.2:
- resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
-
- event-emitter@0.3.5:
- resolution: {integrity: sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==}
-
- exsolve@1.0.7:
- resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==}
-
- ext@1.7.0:
- resolution: {integrity: sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==}
-
- fdir@6.4.6:
- resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==}
- peerDependencies:
- picomatch: ^3 || ^4
- peerDependenciesMeta:
- picomatch:
- optional: true
-
- fill-range@7.1.1:
- resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
- engines: {node: '>=8'}
-
- follow-redirects@1.15.11:
- resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==}
- engines: {node: '>=4.0'}
- peerDependencies:
- debug: '*'
- peerDependenciesMeta:
- debug:
- optional: true
-
- fsevents@2.3.3:
- resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
- engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
- os: [darwin]
-
- glob-parent@5.1.2:
- resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
- engines: {node: '>= 6'}
-
- globals@15.15.0:
- resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==}
- engines: {node: '>=18'}
-
- gzip-size@6.0.0:
- resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==}
- engines: {node: '>=10'}
-
- htmlparser2@3.10.1:
- resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==}
-
- htmlparser2@8.0.2:
- resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
-
- iconv-lite@0.4.24:
- resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
- engines: {node: '>=0.10.0'}
-
- inherits@2.0.4:
- resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
-
- is-binary-path@2.1.0:
- resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
- engines: {node: '>=8'}
-
- is-extglob@2.1.1:
- resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
- engines: {node: '>=0.10.0'}
-
- is-glob@4.0.3:
- resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
- engines: {node: '>=0.10.0'}
-
- is-number@7.0.0:
- resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
- engines: {node: '>=0.12.0'}
-
- jiti@2.4.2:
- resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
- hasBin: true
-
- kolorist@1.8.0:
- resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
-
- li@1.3.0:
- resolution: {integrity: sha512-z34TU6GlMram52Tss5mt1m//ifRIpKH5Dqm7yUVOdHI+BQCs9qGPHFaCUTIzsWX7edN30aa2WrPwR7IO10FHaw==}
-
- local-pkg@1.1.1:
- resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==}
- engines: {node: '>=14'}
-
- lodash.assignin@4.2.0:
- resolution: {integrity: sha512-yX/rx6d/UTVh7sSVWVSIMjfnz95evAgDFdb1ZozC35I9mSFCkmzptOzevxjgbQUsc78NR44LVHWjsoMQXy9FDg==}
-
- lodash.bind@4.2.1:
- resolution: {integrity: sha512-lxdsn7xxlCymgLYo1gGvVrfHmkjDiyqVv62FAeF2i5ta72BipE1SLxw8hPEPLhD4/247Ijw07UQH7Hq/chT5LA==}
-
- lodash.defaults@4.2.0:
- resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==}
-
- lodash.filter@4.6.0:
- resolution: {integrity: sha512-pXYUy7PR8BCLwX5mgJ/aNtyOvuJTdZAo9EQFUvMIYugqmJxnrYaANvTbgndOzHSCSR0wnlBBfRXJL5SbWxo3FQ==}
-
- lodash.flatten@4.4.0:
- resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==}
-
- lodash.foreach@4.5.0:
- resolution: {integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==}
-
- lodash.map@4.6.0:
- resolution: {integrity: sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==}
-
- lodash.merge@4.6.2:
- resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
-
- lodash.pick@4.4.0:
- resolution: {integrity: sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==}
- deprecated: This package is deprecated. Use destructuring assignment syntax instead.
-
- lodash.reduce@4.6.0:
- resolution: {integrity: sha512-6raRe2vxCYBhpBu+B+TtNGUzah+hQjVdu3E17wfusjyrXBka2nBS8OH/gjVZ5PvHOhWmIZTYri09Z6n/QfnNMw==}
-
- lodash.reject@4.6.0:
- resolution: {integrity: sha512-qkTuvgEzYdyhiJBx42YPzPo71R1aEr0z79kAv7Ixg8wPFEjgRgJdUsGMG3Hf3OYSF/kHI79XhNlt+5Ar6OzwxQ==}
-
- lodash.some@4.6.0:
- resolution: {integrity: sha512-j7MJE+TuT51q9ggt4fSgVqro163BEFjAt3u97IqU+JA2DkWl80nFTrowzLpZ/BnpN7rrl0JA/593NAdd8p/scQ==}
-
- lru-queue@0.1.0:
- resolution: {integrity: sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==}
-
- magic-string@0.30.17:
- resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
-
- mdn-data@2.12.2:
- resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==}
-
- memoizee@0.3.10:
- resolution: {integrity: sha512-LLzVUuWwGBKK188spgOK/ukrp5zvd9JGsiLDH41pH9vt5jvhZfsu5pxDuAnYAMG8YEGce72KO07sSBy9KkvOfw==}
-
- microformat-node@2.0.4:
- resolution: {integrity: sha512-mriN4qcfFjwEbzbHnUZEHXFKSC5OxFYZB1hoSFOlW7bNaX/+8tD4Z+F4w3EyovWsTzU/BP3scNAaibCpJ6CxOw==}
-
- microformat-shiv@2.0.3:
- resolution: {integrity: sha512-pktHqCmZsrmogS1egCryvZlAqDdvIQPxsDqa7hZ56nFkovqrszMXWJ94CUE9iWRjQRKOUKqLp62iCVO0+iwM2Q==}
-
- minimist@0.0.10:
- resolution: {integrity: sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==}
-
- mlly@1.7.4:
- resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==}
-
- mrmime@2.0.1:
- resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==}
- engines: {node: '>=10'}
-
- ms@2.1.3:
- resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
-
- nanoid@3.3.11:
- resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
- engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
- hasBin: true
-
- next-tick@0.2.2:
- resolution: {integrity: sha512-f7h4svPtl+QidoBv4taKXUjJ70G2asaZ8G28nS0OkqaalX8dwwrtWtyxEDPK62AC00ur/+/E0pUwBwY5EPn15Q==}
-
- next-tick@1.1.0:
- resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==}
-
- node-fetch-native@1.6.6:
- resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==}
-
- node-fetch@2.7.0:
- resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
- engines: {node: 4.x || >=6.0.0}
- peerDependencies:
- encoding: ^0.1.0
- peerDependenciesMeta:
- encoding:
- optional: true
-
- normalize-path@3.0.0:
- resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
- engines: {node: '>=0.10.0'}
-
- nth-check@1.0.2:
- resolution: {integrity: sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==}
-
- nth-check@2.1.1:
- resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
-
- ofetch@1.4.1:
- resolution: {integrity: sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw==}
-
- optimist@0.6.1:
- resolution: {integrity: sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g==}
-
- package-manager-detector@1.3.0:
- resolution: {integrity: sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==}
-
- pagefind@1.5.0:
- resolution: {integrity: sha512-7vQ2xh0ZmjPjsuWONR68nqzb+QNfpPh7pdT6n6YDAthWAQiUkSACVegSswY5zPNONGYFWebFVgdnS5/m/Qqn+w==}
- hasBin: true
-
- parse5-htmlparser2-tree-adapter@7.1.0:
- resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==}
-
- parse5@7.3.0:
- resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
-
- pathe@2.0.3:
- resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
-
- perfect-debounce@1.0.0:
- resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
-
- picocolors@1.1.1:
- resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
-
- picomatch@2.3.1:
- resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
- engines: {node: '>=8.6'}
-
- picomatch@4.0.2:
- resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
- engines: {node: '>=12'}
-
- pkg-types@1.3.1:
- resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
-
- pkg-types@2.2.0:
- resolution: {integrity: sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==}
-
- postcss@8.5.6:
- resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
- engines: {node: ^10 || ^12 || >=14}
-
- quansync@0.2.10:
- resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==}
-
- readable-stream@3.6.2:
- resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
- engines: {node: '>= 6'}
-
- readdirp@3.6.0:
- resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
- engines: {node: '>=8.10.0'}
-
- rollup@4.45.0:
- resolution: {integrity: sha512-WLjEcJRIo7i3WDDgOIJqVI2d+lAC3EwvOGy+Xfq6hs+GQuAA4Di/H72xmXkOhrIWFg2PFYSKZYfH0f4vfKXN4A==}
- engines: {node: '>=18.0.0', npm: '>=8.0.0'}
- hasBin: true
-
- rss-parser@3.13.0:
- resolution: {integrity: sha512-7jWUBV5yGN3rqMMj7CZufl/291QAhvrrGpDNE4k/02ZchL0npisiYYqULF71jCEKoIiHvK/Q2e6IkDwPziT7+w==}
-
- safe-buffer@5.2.1:
- resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
-
- safer-buffer@2.1.2:
- resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
-
- sax@1.4.4:
- resolution: {integrity: sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==}
- engines: {node: '>=11.0.0'}
-
- sirv@3.0.1:
- resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==}
- engines: {node: '>=18'}
-
- source-map-js@1.2.1:
- resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
- engines: {node: '>=0.10.0'}
-
- string_decoder@1.3.0:
- resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
-
- timers-ext@0.1.8:
- resolution: {integrity: sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==}
- engines: {node: '>=0.12'}
-
- tinyexec@1.0.1:
- resolution: {integrity: sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==}
-
- tinyglobby@0.2.14:
- resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==}
- engines: {node: '>=12.0.0'}
-
- to-regex-range@5.0.1:
- resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
- engines: {node: '>=8.0'}
-
- totalist@3.0.1:
- resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
- engines: {node: '>=6'}
-
- tr46@0.0.3:
- resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
-
- type@2.7.3:
- resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==}
-
- ufo@1.6.1:
- resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
-
- unconfig@7.3.2:
- resolution: {integrity: sha512-nqG5NNL2wFVGZ0NA/aCFw0oJ2pxSf1lwg4Z5ill8wd7K4KX/rQbHlwbh+bjctXL5Ly1xtzHenHGOK0b+lG6JVg==}
-
- unocss@66.3.3:
- resolution: {integrity: sha512-HSB+K4/EbouwYmxpPU52cg0exua7PUr2IAJZBV3iai6tPdMcJ0c8jXaw7G+2L+ffruVFTcS0e2kE4OrR8BKDLg==}
- engines: {node: '>=14'}
- peerDependencies:
- '@unocss/webpack': 66.3.3
- vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0
- peerDependenciesMeta:
- '@unocss/webpack':
- optional: true
- vite:
- optional: true
-
- unplugin-utils@0.2.4:
- resolution: {integrity: sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==}
- engines: {node: '>=18.12.0'}
-
- util-deprecate@1.0.2:
- resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
-
- uuid@3.4.0:
- resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==}
- deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.
- hasBin: true
-
- vite@6.3.5:
- resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==}
- engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
- hasBin: true
- peerDependencies:
- '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
- jiti: '>=1.21.0'
- less: '*'
- lightningcss: ^1.21.0
- sass: '*'
- sass-embedded: '*'
- stylus: '*'
- sugarss: '*'
- terser: ^5.16.0
- tsx: ^4.8.1
- yaml: ^2.4.2
- peerDependenciesMeta:
- '@types/node':
- optional: true
- jiti:
- optional: true
- less:
- optional: true
- lightningcss:
- optional: true
- sass:
- optional: true
- sass-embedded:
- optional: true
- stylus:
- optional: true
- sugarss:
- optional: true
- terser:
- optional: true
- tsx:
- optional: true
- yaml:
- optional: true
-
- vue-flow-layout@0.1.1:
- resolution: {integrity: sha512-JdgRRUVrN0Y2GosA0M68DEbKlXMqJ7FQgsK8CjQD2vxvNSqAU6PZEpi4cfcTVtfM2GVOMjHo7GKKLbXxOBqDqA==}
- peerDependencies:
- vue: ^3.4.37
-
- vue@3.5.17:
- resolution: {integrity: sha512-LbHV3xPN9BeljML+Xctq4lbz2lVHCR6DtbpTf5XIO6gugpXUN49j2QQPcMj086r9+AkJ0FfUT8xjulKKBkkr9g==}
- peerDependencies:
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
-
- webidl-conversions@3.0.1:
- resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
-
- whatwg-url@5.0.0:
- resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
-
- wordwrap@0.0.3:
- resolution: {integrity: sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==}
- engines: {node: '>=0.4.0'}
-
- xml2js@0.5.0:
- resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==}
- engines: {node: '>=4.0.0'}
-
- xmlbuilder@11.0.1:
- resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==}
- engines: {node: '>=4.0'}
-
-snapshots:
-
- '@ampproject/remapping@2.3.0':
- dependencies:
- '@jridgewell/gen-mapping': 0.3.12
- '@jridgewell/trace-mapping': 0.3.29
-
- '@antfu/install-pkg@1.1.0':
- dependencies:
- package-manager-detector: 1.3.0
- tinyexec: 1.0.1
-
- '@antfu/utils@8.1.1': {}
-
- '@babel/helper-string-parser@7.27.1': {}
-
- '@babel/helper-validator-identifier@7.27.1': {}
-
- '@babel/parser@7.28.0':
- dependencies:
- '@babel/types': 7.28.1
-
- '@babel/types@7.28.1':
- dependencies:
- '@babel/helper-string-parser': 7.27.1
- '@babel/helper-validator-identifier': 7.27.1
-
- '@esbuild/aix-ppc64@0.25.6':
- optional: true
-
- '@esbuild/android-arm64@0.25.6':
- optional: true
-
- '@esbuild/android-arm@0.25.6':
- optional: true
-
- '@esbuild/android-x64@0.25.6':
- optional: true
-
- '@esbuild/darwin-arm64@0.25.6':
- optional: true
-
- '@esbuild/darwin-x64@0.25.6':
- optional: true
-
- '@esbuild/freebsd-arm64@0.25.6':
- optional: true
-
- '@esbuild/freebsd-x64@0.25.6':
- optional: true
-
- '@esbuild/linux-arm64@0.25.6':
- optional: true
-
- '@esbuild/linux-arm@0.25.6':
- optional: true
-
- '@esbuild/linux-ia32@0.25.6':
- optional: true
-
- '@esbuild/linux-loong64@0.25.6':
- optional: true
-
- '@esbuild/linux-mips64el@0.25.6':
- optional: true
-
- '@esbuild/linux-ppc64@0.25.6':
- optional: true
-
- '@esbuild/linux-riscv64@0.25.6':
- optional: true
-
- '@esbuild/linux-s390x@0.25.6':
- optional: true
-
- '@esbuild/linux-x64@0.25.6':
- optional: true
-
- '@esbuild/netbsd-arm64@0.25.6':
- optional: true
-
- '@esbuild/netbsd-x64@0.25.6':
- optional: true
-
- '@esbuild/openbsd-arm64@0.25.6':
- optional: true
-
- '@esbuild/openbsd-x64@0.25.6':
- optional: true
-
- '@esbuild/openharmony-arm64@0.25.6':
- optional: true
-
- '@esbuild/sunos-x64@0.25.6':
- optional: true
-
- '@esbuild/win32-arm64@0.25.6':
- optional: true
-
- '@esbuild/win32-ia32@0.25.6':
- optional: true
-
- '@esbuild/win32-x64@0.25.6':
- optional: true
-
- '@iconify/types@2.0.0': {}
-
- '@iconify/utils@2.3.0':
- dependencies:
- '@antfu/install-pkg': 1.1.0
- '@antfu/utils': 8.1.1
- '@iconify/types': 2.0.0
- debug: 4.4.1
- globals: 15.15.0
- kolorist: 1.8.0
- local-pkg: 1.1.1
- mlly: 1.7.4
- transitivePeerDependencies:
- - supports-color
-
- '@jridgewell/gen-mapping@0.3.12':
- dependencies:
- '@jridgewell/sourcemap-codec': 1.5.4
- '@jridgewell/trace-mapping': 0.3.29
-
- '@jridgewell/resolve-uri@3.1.2': {}
-
- '@jridgewell/sourcemap-codec@1.5.4': {}
-
- '@jridgewell/trace-mapping@0.3.29':
- dependencies:
- '@jridgewell/resolve-uri': 3.1.2
- '@jridgewell/sourcemap-codec': 1.5.4
-
- '@pagefind/darwin-arm64@1.5.0':
- optional: true
-
- '@pagefind/darwin-x64@1.5.0':
- optional: true
-
- '@pagefind/freebsd-x64@1.5.0':
- optional: true
-
- '@pagefind/linux-arm64@1.5.0':
- optional: true
-
- '@pagefind/linux-x64@1.5.0':
- optional: true
-
- '@pagefind/windows-arm64@1.5.0':
- optional: true
-
- '@pagefind/windows-x64@1.5.0':
- optional: true
-
- '@polka/url@1.0.0-next.29': {}
-
- '@quansync/fs@0.1.3':
- dependencies:
- quansync: 0.2.10
-
- '@remy/webmention@1.5.0':
- dependencies:
- cheerio: 0.22.0
- clui: 0.3.6
- decodeuricomponent: 0.3.1
- follow-redirects: 1.15.11
- li: 1.3.0
- microformat-node: 2.0.4
- ms: 2.1.3
- node-fetch: 2.7.0
- optimist: 0.6.1
- rss-parser: 3.13.0
- uuid: 3.4.0
- transitivePeerDependencies:
- - debug
- - encoding
-
- '@rollup/rollup-android-arm-eabi@4.45.0':
- optional: true
-
- '@rollup/rollup-android-arm64@4.45.0':
- optional: true
-
- '@rollup/rollup-darwin-arm64@4.45.0':
- optional: true
-
- '@rollup/rollup-darwin-x64@4.45.0':
- optional: true
-
- '@rollup/rollup-freebsd-arm64@4.45.0':
- optional: true
-
- '@rollup/rollup-freebsd-x64@4.45.0':
- optional: true
-
- '@rollup/rollup-linux-arm-gnueabihf@4.45.0':
- optional: true
-
- '@rollup/rollup-linux-arm-musleabihf@4.45.0':
- optional: true
-
- '@rollup/rollup-linux-arm64-gnu@4.45.0':
- optional: true
-
- '@rollup/rollup-linux-arm64-musl@4.45.0':
- optional: true
-
- '@rollup/rollup-linux-loongarch64-gnu@4.45.0':
- optional: true
-
- '@rollup/rollup-linux-powerpc64le-gnu@4.45.0':
- optional: true
-
- '@rollup/rollup-linux-riscv64-gnu@4.45.0':
- optional: true
-
- '@rollup/rollup-linux-riscv64-musl@4.45.0':
- optional: true
-
- '@rollup/rollup-linux-s390x-gnu@4.45.0':
- optional: true
-
- '@rollup/rollup-linux-x64-gnu@4.45.0':
- optional: true
-
- '@rollup/rollup-linux-x64-musl@4.45.0':
- optional: true
-
- '@rollup/rollup-win32-arm64-msvc@4.45.0':
- optional: true
-
- '@rollup/rollup-win32-ia32-msvc@4.45.0':
- optional: true
-
- '@rollup/rollup-win32-x64-msvc@4.45.0':
- optional: true
-
- '@types/estree@1.0.8': {}
-
- '@unocss/astro@66.3.3(vite@6.3.5(jiti@2.4.2))(vue@3.5.17)':
- dependencies:
- '@unocss/core': 66.3.3
- '@unocss/reset': 66.3.3
- '@unocss/vite': 66.3.3(vite@6.3.5(jiti@2.4.2))(vue@3.5.17)
- optionalDependencies:
- vite: 6.3.5(jiti@2.4.2)
- transitivePeerDependencies:
- - vue
-
- '@unocss/cli@66.3.3':
- dependencies:
- '@ampproject/remapping': 2.3.0
- '@unocss/config': 66.3.3
- '@unocss/core': 66.3.3
- '@unocss/preset-uno': 66.3.3
- cac: 6.7.14
- chokidar: 3.6.0
- colorette: 2.0.20
- consola: 3.4.2
- magic-string: 0.30.17
- pathe: 2.0.3
- perfect-debounce: 1.0.0
- tinyglobby: 0.2.14
- unplugin-utils: 0.2.4
-
- '@unocss/config@66.3.3':
- dependencies:
- '@unocss/core': 66.3.3
- unconfig: 7.3.2
-
- '@unocss/core@66.3.3': {}
-
- '@unocss/extractor-arbitrary-variants@66.3.3':
- dependencies:
- '@unocss/core': 66.3.3
-
- '@unocss/inspector@66.3.3(vue@3.5.17)':
- dependencies:
- '@unocss/core': 66.3.3
- '@unocss/rule-utils': 66.3.3
- colorette: 2.0.20
- gzip-size: 6.0.0
- sirv: 3.0.1
- vue-flow-layout: 0.1.1(vue@3.5.17)
- transitivePeerDependencies:
- - vue
-
- '@unocss/postcss@66.3.3(postcss@8.5.6)':
- dependencies:
- '@unocss/config': 66.3.3
- '@unocss/core': 66.3.3
- '@unocss/rule-utils': 66.3.3
- css-tree: 3.1.0
- postcss: 8.5.6
- tinyglobby: 0.2.14
-
- '@unocss/preset-attributify@66.3.3':
- dependencies:
- '@unocss/core': 66.3.3
-
- '@unocss/preset-icons@66.3.3':
- dependencies:
- '@iconify/utils': 2.3.0
- '@unocss/core': 66.3.3
- ofetch: 1.4.1
- transitivePeerDependencies:
- - supports-color
-
- '@unocss/preset-mini@66.3.3':
- dependencies:
- '@unocss/core': 66.3.3
- '@unocss/extractor-arbitrary-variants': 66.3.3
- '@unocss/rule-utils': 66.3.3
-
- '@unocss/preset-tagify@66.3.3':
- dependencies:
- '@unocss/core': 66.3.3
-
- '@unocss/preset-typography@66.3.3':
- dependencies:
- '@unocss/core': 66.3.3
- '@unocss/preset-mini': 66.3.3
- '@unocss/rule-utils': 66.3.3
-
- '@unocss/preset-uno@66.3.3':
- dependencies:
- '@unocss/core': 66.3.3
- '@unocss/preset-wind3': 66.3.3
-
- '@unocss/preset-web-fonts@66.3.3':
- dependencies:
- '@unocss/core': 66.3.3
- ofetch: 1.4.1
-
- '@unocss/preset-wind3@66.3.3':
- dependencies:
- '@unocss/core': 66.3.3
- '@unocss/preset-mini': 66.3.3
- '@unocss/rule-utils': 66.3.3
-
- '@unocss/preset-wind4@66.3.3':
- dependencies:
- '@unocss/core': 66.3.3
- '@unocss/extractor-arbitrary-variants': 66.3.3
- '@unocss/rule-utils': 66.3.3
-
- '@unocss/preset-wind@66.3.3':
- dependencies:
- '@unocss/core': 66.3.3
- '@unocss/preset-wind3': 66.3.3
-
- '@unocss/reset@66.3.3': {}
-
- '@unocss/rule-utils@66.3.3':
- dependencies:
- '@unocss/core': 66.3.3
- magic-string: 0.30.17
-
- '@unocss/transformer-attributify-jsx@66.3.3':
- dependencies:
- '@unocss/core': 66.3.3
-
- '@unocss/transformer-compile-class@66.3.3':
- dependencies:
- '@unocss/core': 66.3.3
-
- '@unocss/transformer-directives@66.3.3':
- dependencies:
- '@unocss/core': 66.3.3
- '@unocss/rule-utils': 66.3.3
- css-tree: 3.1.0
-
- '@unocss/transformer-variant-group@66.3.3':
- dependencies:
- '@unocss/core': 66.3.3
-
- '@unocss/vite@66.3.3(vite@6.3.5(jiti@2.4.2))(vue@3.5.17)':
- dependencies:
- '@ampproject/remapping': 2.3.0
- '@unocss/config': 66.3.3
- '@unocss/core': 66.3.3
- '@unocss/inspector': 66.3.3(vue@3.5.17)
- chokidar: 3.6.0
- magic-string: 0.30.17
- pathe: 2.0.3
- tinyglobby: 0.2.14
- unplugin-utils: 0.2.4
- vite: 6.3.5(jiti@2.4.2)
- transitivePeerDependencies:
- - vue
-
- '@vue/compiler-core@3.5.17':
- dependencies:
- '@babel/parser': 7.28.0
- '@vue/shared': 3.5.17
- entities: 4.5.0
- estree-walker: 2.0.2
- source-map-js: 1.2.1
-
- '@vue/compiler-dom@3.5.17':
- dependencies:
- '@vue/compiler-core': 3.5.17
- '@vue/shared': 3.5.17
-
- '@vue/compiler-sfc@3.5.17':
- dependencies:
- '@babel/parser': 7.28.0
- '@vue/compiler-core': 3.5.17
- '@vue/compiler-dom': 3.5.17
- '@vue/compiler-ssr': 3.5.17
- '@vue/shared': 3.5.17
- estree-walker: 2.0.2
- magic-string: 0.30.17
- postcss: 8.5.6
- source-map-js: 1.2.1
-
- '@vue/compiler-ssr@3.5.17':
- dependencies:
- '@vue/compiler-dom': 3.5.17
- '@vue/shared': 3.5.17
-
- '@vue/reactivity@3.5.17':
- dependencies:
- '@vue/shared': 3.5.17
-
- '@vue/runtime-core@3.5.17':
- dependencies:
- '@vue/reactivity': 3.5.17
- '@vue/shared': 3.5.17
-
- '@vue/runtime-dom@3.5.17':
- dependencies:
- '@vue/reactivity': 3.5.17
- '@vue/runtime-core': 3.5.17
- '@vue/shared': 3.5.17
- csstype: 3.1.3
-
- '@vue/server-renderer@3.5.17(vue@3.5.17)':
- dependencies:
- '@vue/compiler-ssr': 3.5.17
- '@vue/shared': 3.5.17
- vue: 3.5.17
-
- '@vue/shared@3.5.17': {}
-
- acorn@8.15.0: {}
-
- anymatch@3.1.3:
- dependencies:
- normalize-path: 3.0.0
- picomatch: 2.3.1
-
- binary-extensions@2.3.0: {}
-
- boolbase@1.0.0: {}
-
- braces@3.0.3:
- dependencies:
- fill-range: 7.1.1
-
- cac@6.7.14: {}
-
- cheerio-select@2.1.0:
- dependencies:
- boolbase: 1.0.0
- css-select: 5.2.2
- css-what: 6.2.2
- domelementtype: 2.3.0
- domhandler: 5.0.3
- domutils: 3.2.2
-
- cheerio@0.22.0:
- dependencies:
- css-select: 1.2.0
- dom-serializer: 0.1.1
- entities: 1.1.2
- htmlparser2: 3.10.1
- lodash.assignin: 4.2.0
- lodash.bind: 4.2.1
- lodash.defaults: 4.2.0
- lodash.filter: 4.6.0
- lodash.flatten: 4.4.0
- lodash.foreach: 4.5.0
- lodash.map: 4.6.0
- lodash.merge: 4.6.2
- lodash.pick: 4.4.0
- lodash.reduce: 4.6.0
- lodash.reject: 4.6.0
- lodash.some: 4.6.0
-
- cheerio@1.0.0-rc.12:
- dependencies:
- cheerio-select: 2.1.0
- dom-serializer: 2.0.0
- domhandler: 5.0.3
- domutils: 3.2.2
- htmlparser2: 8.0.2
- parse5: 7.3.0
- parse5-htmlparser2-tree-adapter: 7.1.0
-
- chokidar@3.6.0:
- dependencies:
- anymatch: 3.1.3
- braces: 3.0.3
- glob-parent: 5.1.2
- is-binary-path: 2.1.0
- is-glob: 4.0.3
- normalize-path: 3.0.0
- readdirp: 3.6.0
- optionalDependencies:
- fsevents: 2.3.3
-
- cli-color@0.3.2:
- dependencies:
- d: 0.1.1
- es5-ext: 0.10.64
- memoizee: 0.3.10
- timers-ext: 0.1.8
-
- clui@0.3.6:
- dependencies:
- cli-color: 0.3.2
-
- colorette@2.0.20: {}
-
- confbox@0.1.8: {}
-
- confbox@0.2.2: {}
-
- consola@3.4.2: {}
-
- css-select@1.2.0:
- dependencies:
- boolbase: 1.0.0
- css-what: 2.1.3
- domutils: 1.5.1
- nth-check: 1.0.2
-
- css-select@5.2.2:
- dependencies:
- boolbase: 1.0.0
- css-what: 6.2.2
- domhandler: 5.0.3
- domutils: 3.2.2
- nth-check: 2.1.1
-
- css-tree@3.1.0:
- dependencies:
- mdn-data: 2.12.2
- source-map-js: 1.2.1
-
- css-what@2.1.3: {}
-
- css-what@6.2.2: {}
-
- csstype@3.1.3: {}
-
- d@0.1.1:
- dependencies:
- es5-ext: 0.10.64
-
- d@1.0.2:
- dependencies:
- es5-ext: 0.10.64
- type: 2.7.3
-
- debug@4.4.1:
- dependencies:
- ms: 2.1.3
-
- decodeuricomponent@0.3.1:
- dependencies:
- iconv-lite: 0.4.24
-
- defu@6.1.4: {}
-
- destr@2.0.5: {}
-
- dom-serializer@0.1.1:
- dependencies:
- domelementtype: 1.3.1
- entities: 1.1.2
-
- dom-serializer@2.0.0:
- dependencies:
- domelementtype: 2.3.0
- domhandler: 5.0.3
- entities: 4.5.0
-
- domelementtype@1.3.1: {}
-
- domelementtype@2.3.0: {}
-
- domhandler@2.4.2:
- dependencies:
- domelementtype: 1.3.1
-
- domhandler@5.0.3:
- dependencies:
- domelementtype: 2.3.0
-
- domutils@1.5.1:
- dependencies:
- dom-serializer: 0.1.1
- domelementtype: 1.3.1
-
- domutils@1.7.0:
- dependencies:
- dom-serializer: 0.1.1
- domelementtype: 1.3.1
-
- domutils@3.2.2:
- dependencies:
- dom-serializer: 2.0.0
- domelementtype: 2.3.0
- domhandler: 5.0.3
-
- duplexer@0.1.2: {}
-
- ent-replace@1.0.4: {}
-
- entities@1.1.2: {}
-
- entities@2.2.0: {}
-
- entities@4.5.0: {}
-
- entities@6.0.1: {}
-
- es5-ext@0.10.64:
- dependencies:
- es6-iterator: 2.0.3
- es6-symbol: 3.1.4
- esniff: 2.0.1
- next-tick: 1.1.0
-
- es6-iterator@0.1.3:
- dependencies:
- d: 0.1.1
- es5-ext: 0.10.64
- es6-symbol: 2.0.1
-
- es6-iterator@2.0.3:
- dependencies:
- d: 1.0.2
- es5-ext: 0.10.64
- es6-symbol: 3.1.4
-
- es6-symbol@2.0.1:
- dependencies:
- d: 0.1.1
- es5-ext: 0.10.64
-
- es6-symbol@3.1.4:
- dependencies:
- d: 1.0.2
- ext: 1.7.0
-
- es6-weak-map@0.1.4:
- dependencies:
- d: 0.1.1
- es5-ext: 0.10.64
- es6-iterator: 0.1.3
- es6-symbol: 2.0.1
-
- esbuild@0.25.6:
- optionalDependencies:
- '@esbuild/aix-ppc64': 0.25.6
- '@esbuild/android-arm': 0.25.6
- '@esbuild/android-arm64': 0.25.6
- '@esbuild/android-x64': 0.25.6
- '@esbuild/darwin-arm64': 0.25.6
- '@esbuild/darwin-x64': 0.25.6
- '@esbuild/freebsd-arm64': 0.25.6
- '@esbuild/freebsd-x64': 0.25.6
- '@esbuild/linux-arm': 0.25.6
- '@esbuild/linux-arm64': 0.25.6
- '@esbuild/linux-ia32': 0.25.6
- '@esbuild/linux-loong64': 0.25.6
- '@esbuild/linux-mips64el': 0.25.6
- '@esbuild/linux-ppc64': 0.25.6
- '@esbuild/linux-riscv64': 0.25.6
- '@esbuild/linux-s390x': 0.25.6
- '@esbuild/linux-x64': 0.25.6
- '@esbuild/netbsd-arm64': 0.25.6
- '@esbuild/netbsd-x64': 0.25.6
- '@esbuild/openbsd-arm64': 0.25.6
- '@esbuild/openbsd-x64': 0.25.6
- '@esbuild/openharmony-arm64': 0.25.6
- '@esbuild/sunos-x64': 0.25.6
- '@esbuild/win32-arm64': 0.25.6
- '@esbuild/win32-ia32': 0.25.6
- '@esbuild/win32-x64': 0.25.6
-
- esniff@2.0.1:
- dependencies:
- d: 1.0.2
- es5-ext: 0.10.64
- event-emitter: 0.3.5
- type: 2.7.3
-
- estree-walker@2.0.2: {}
-
- event-emitter@0.3.5:
- dependencies:
- d: 1.0.2
- es5-ext: 0.10.64
-
- exsolve@1.0.7: {}
-
- ext@1.7.0:
- dependencies:
- type: 2.7.3
-
- fdir@6.4.6(picomatch@4.0.2):
- optionalDependencies:
- picomatch: 4.0.2
-
- fill-range@7.1.1:
- dependencies:
- to-regex-range: 5.0.1
-
- follow-redirects@1.15.11: {}
-
- fsevents@2.3.3:
- optional: true
-
- glob-parent@5.1.2:
- dependencies:
- is-glob: 4.0.3
-
- globals@15.15.0: {}
-
- gzip-size@6.0.0:
- dependencies:
- duplexer: 0.1.2
-
- htmlparser2@3.10.1:
- dependencies:
- domelementtype: 1.3.1
- domhandler: 2.4.2
- domutils: 1.7.0
- entities: 1.1.2
- inherits: 2.0.4
- readable-stream: 3.6.2
-
- htmlparser2@8.0.2:
- dependencies:
- domelementtype: 2.3.0
- domhandler: 5.0.3
- domutils: 3.2.2
- entities: 4.5.0
-
- iconv-lite@0.4.24:
- dependencies:
- safer-buffer: 2.1.2
-
- inherits@2.0.4: {}
-
- is-binary-path@2.1.0:
- dependencies:
- binary-extensions: 2.3.0
-
- is-extglob@2.1.1: {}
-
- is-glob@4.0.3:
- dependencies:
- is-extglob: 2.1.1
-
- is-number@7.0.0: {}
-
- jiti@2.4.2: {}
-
- kolorist@1.8.0: {}
-
- li@1.3.0: {}
-
- local-pkg@1.1.1:
- dependencies:
- mlly: 1.7.4
- pkg-types: 2.2.0
- quansync: 0.2.10
-
- lodash.assignin@4.2.0: {}
-
- lodash.bind@4.2.1: {}
-
- lodash.defaults@4.2.0: {}
-
- lodash.filter@4.6.0: {}
-
- lodash.flatten@4.4.0: {}
-
- lodash.foreach@4.5.0: {}
-
- lodash.map@4.6.0: {}
-
- lodash.merge@4.6.2: {}
-
- lodash.pick@4.4.0: {}
-
- lodash.reduce@4.6.0: {}
-
- lodash.reject@4.6.0: {}
-
- lodash.some@4.6.0: {}
-
- lru-queue@0.1.0:
- dependencies:
- es5-ext: 0.10.64
-
- magic-string@0.30.17:
- dependencies:
- '@jridgewell/sourcemap-codec': 1.5.4
-
- mdn-data@2.12.2: {}
-
- memoizee@0.3.10:
- dependencies:
- d: 0.1.1
- es5-ext: 0.10.64
- es6-weak-map: 0.1.4
- event-emitter: 0.3.5
- lru-queue: 0.1.0
- next-tick: 0.2.2
- timers-ext: 0.1.8
-
- microformat-node@2.0.4:
- dependencies:
- cheerio: 1.0.0-rc.12
- ent-replace: 1.0.4
- microformat-shiv: 2.0.3
-
- microformat-shiv@2.0.3: {}
-
- minimist@0.0.10: {}
-
- mlly@1.7.4:
- dependencies:
- acorn: 8.15.0
- pathe: 2.0.3
- pkg-types: 1.3.1
- ufo: 1.6.1
-
- mrmime@2.0.1: {}
-
- ms@2.1.3: {}
-
- nanoid@3.3.11: {}
-
- next-tick@0.2.2: {}
-
- next-tick@1.1.0: {}
-
- node-fetch-native@1.6.6: {}
-
- node-fetch@2.7.0:
- dependencies:
- whatwg-url: 5.0.0
-
- normalize-path@3.0.0: {}
-
- nth-check@1.0.2:
- dependencies:
- boolbase: 1.0.0
-
- nth-check@2.1.1:
- dependencies:
- boolbase: 1.0.0
-
- ofetch@1.4.1:
- dependencies:
- destr: 2.0.5
- node-fetch-native: 1.6.6
- ufo: 1.6.1
-
- optimist@0.6.1:
- dependencies:
- minimist: 0.0.10
- wordwrap: 0.0.3
-
- package-manager-detector@1.3.0: {}
-
- pagefind@1.5.0:
- optionalDependencies:
- '@pagefind/darwin-arm64': 1.5.0
- '@pagefind/darwin-x64': 1.5.0
- '@pagefind/freebsd-x64': 1.5.0
- '@pagefind/linux-arm64': 1.5.0
- '@pagefind/linux-x64': 1.5.0
- '@pagefind/windows-arm64': 1.5.0
- '@pagefind/windows-x64': 1.5.0
-
- parse5-htmlparser2-tree-adapter@7.1.0:
- dependencies:
- domhandler: 5.0.3
- parse5: 7.3.0
-
- parse5@7.3.0:
- dependencies:
- entities: 6.0.1
-
- pathe@2.0.3: {}
-
- perfect-debounce@1.0.0: {}
-
- picocolors@1.1.1: {}
-
- picomatch@2.3.1: {}
-
- picomatch@4.0.2: {}
-
- pkg-types@1.3.1:
- dependencies:
- confbox: 0.1.8
- mlly: 1.7.4
- pathe: 2.0.3
-
- pkg-types@2.2.0:
- dependencies:
- confbox: 0.2.2
- exsolve: 1.0.7
- pathe: 2.0.3
-
- postcss@8.5.6:
- dependencies:
- nanoid: 3.3.11
- picocolors: 1.1.1
- source-map-js: 1.2.1
-
- quansync@0.2.10: {}
-
- readable-stream@3.6.2:
- dependencies:
- inherits: 2.0.4
- string_decoder: 1.3.0
- util-deprecate: 1.0.2
-
- readdirp@3.6.0:
- dependencies:
- picomatch: 2.3.1
-
- rollup@4.45.0:
- dependencies:
- '@types/estree': 1.0.8
- optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.45.0
- '@rollup/rollup-android-arm64': 4.45.0
- '@rollup/rollup-darwin-arm64': 4.45.0
- '@rollup/rollup-darwin-x64': 4.45.0
- '@rollup/rollup-freebsd-arm64': 4.45.0
- '@rollup/rollup-freebsd-x64': 4.45.0
- '@rollup/rollup-linux-arm-gnueabihf': 4.45.0
- '@rollup/rollup-linux-arm-musleabihf': 4.45.0
- '@rollup/rollup-linux-arm64-gnu': 4.45.0
- '@rollup/rollup-linux-arm64-musl': 4.45.0
- '@rollup/rollup-linux-loongarch64-gnu': 4.45.0
- '@rollup/rollup-linux-powerpc64le-gnu': 4.45.0
- '@rollup/rollup-linux-riscv64-gnu': 4.45.0
- '@rollup/rollup-linux-riscv64-musl': 4.45.0
- '@rollup/rollup-linux-s390x-gnu': 4.45.0
- '@rollup/rollup-linux-x64-gnu': 4.45.0
- '@rollup/rollup-linux-x64-musl': 4.45.0
- '@rollup/rollup-win32-arm64-msvc': 4.45.0
- '@rollup/rollup-win32-ia32-msvc': 4.45.0
- '@rollup/rollup-win32-x64-msvc': 4.45.0
- fsevents: 2.3.3
-
- rss-parser@3.13.0:
- dependencies:
- entities: 2.2.0
- xml2js: 0.5.0
-
- safe-buffer@5.2.1: {}
-
- safer-buffer@2.1.2: {}
-
- sax@1.4.4: {}
-
- sirv@3.0.1:
- dependencies:
- '@polka/url': 1.0.0-next.29
- mrmime: 2.0.1
- totalist: 3.0.1
-
- source-map-js@1.2.1: {}
-
- string_decoder@1.3.0:
- dependencies:
- safe-buffer: 5.2.1
-
- timers-ext@0.1.8:
- dependencies:
- es5-ext: 0.10.64
- next-tick: 1.1.0
-
- tinyexec@1.0.1: {}
-
- tinyglobby@0.2.14:
- dependencies:
- fdir: 6.4.6(picomatch@4.0.2)
- picomatch: 4.0.2
-
- to-regex-range@5.0.1:
- dependencies:
- is-number: 7.0.0
-
- totalist@3.0.1: {}
-
- tr46@0.0.3: {}
-
- type@2.7.3: {}
-
- ufo@1.6.1: {}
-
- unconfig@7.3.2:
- dependencies:
- '@quansync/fs': 0.1.3
- defu: 6.1.4
- jiti: 2.4.2
- quansync: 0.2.10
-
- unocss@66.3.3(postcss@8.5.6)(vite@6.3.5(jiti@2.4.2))(vue@3.5.17):
- dependencies:
- '@unocss/astro': 66.3.3(vite@6.3.5(jiti@2.4.2))(vue@3.5.17)
- '@unocss/cli': 66.3.3
- '@unocss/core': 66.3.3
- '@unocss/postcss': 66.3.3(postcss@8.5.6)
- '@unocss/preset-attributify': 66.3.3
- '@unocss/preset-icons': 66.3.3
- '@unocss/preset-mini': 66.3.3
- '@unocss/preset-tagify': 66.3.3
- '@unocss/preset-typography': 66.3.3
- '@unocss/preset-uno': 66.3.3
- '@unocss/preset-web-fonts': 66.3.3
- '@unocss/preset-wind': 66.3.3
- '@unocss/preset-wind3': 66.3.3
- '@unocss/preset-wind4': 66.3.3
- '@unocss/transformer-attributify-jsx': 66.3.3
- '@unocss/transformer-compile-class': 66.3.3
- '@unocss/transformer-directives': 66.3.3
- '@unocss/transformer-variant-group': 66.3.3
- '@unocss/vite': 66.3.3(vite@6.3.5(jiti@2.4.2))(vue@3.5.17)
- optionalDependencies:
- vite: 6.3.5(jiti@2.4.2)
- transitivePeerDependencies:
- - postcss
- - supports-color
- - vue
-
- unplugin-utils@0.2.4:
- dependencies:
- pathe: 2.0.3
- picomatch: 4.0.2
-
- util-deprecate@1.0.2: {}
-
- uuid@3.4.0: {}
-
- vite@6.3.5(jiti@2.4.2):
- dependencies:
- esbuild: 0.25.6
- fdir: 6.4.6(picomatch@4.0.2)
- picomatch: 4.0.2
- postcss: 8.5.6
- rollup: 4.45.0
- tinyglobby: 0.2.14
- optionalDependencies:
- fsevents: 2.3.3
- jiti: 2.4.2
-
- vue-flow-layout@0.1.1(vue@3.5.17):
- dependencies:
- vue: 3.5.17
-
- vue@3.5.17:
- dependencies:
- '@vue/compiler-dom': 3.5.17
- '@vue/compiler-sfc': 3.5.17
- '@vue/runtime-dom': 3.5.17
- '@vue/server-renderer': 3.5.17(vue@3.5.17)
- '@vue/shared': 3.5.17
-
- webidl-conversions@3.0.1: {}
-
- whatwg-url@5.0.0:
- dependencies:
- tr46: 0.0.3
- webidl-conversions: 3.0.1
-
- wordwrap@0.0.3: {}
-
- xml2js@0.5.0:
- dependencies:
- sax: 1.4.4
- xmlbuilder: 11.0.1
-
- xmlbuilder@11.0.1: {}
diff --git a/scripts/extract_highlights.go b/scripts/extract_highlights.go
deleted file mode 100644
index c7253d5f..00000000
--- a/scripts/extract_highlights.go
+++ /dev/null
@@ -1,120 +0,0 @@
-package main
-
-import (
- "encoding/json"
- "fmt"
- "io/fs"
- "net/url"
- "os"
- "path/filepath"
- "regexp"
- "strings"
-)
-
-type HighlightLink struct {
- Text string `json:"text"`
- Link string `json:"link"`
-}
-
-type Result struct {
- Title string `json:"title"`
- URL string `json:"url"`
- Highlights []HighlightLink `json:"highlights"`
-}
-
-func main() {
- const contentDir = "content"
- const outputFile = "data/highlights.json"
-
- highlightPattern := regexp.MustCompile(`==(.+?)==`)
- titlePattern := regexp.MustCompile(`(?m)^title:\s*["']?(.+?)["']?\s*$`)
- slugPattern := regexp.MustCompile(`(?m)^slug:\s*["']?(.+?)["']?\s*$`)
-
- var results []Result
-
- err := filepath.WalkDir(contentDir, func(path string, d fs.DirEntry, err error) error {
- if err != nil {
- return err
- }
- if d.IsDir() || !strings.HasSuffix(d.Name(), ".md") {
- return nil
- }
-
- contentBytes, err := os.ReadFile(path)
- if err != nil {
- return err
- }
- content := string(contentBytes)
-
- // Title
- title := filepath.Base(path)
- if m := titlePattern.FindStringSubmatch(content); len(m) > 1 {
- title = m[1]
- }
-
- // Slug and URL
- urlPath := ""
- if m := slugPattern.FindStringSubmatch(content); len(m) > 1 {
- slug := strings.Trim(m[1], "/")
- relDir, _ := filepath.Rel(contentDir, filepath.Dir(path))
- relDir = filepath.ToSlash(relDir)
- if relDir != "." {
- urlPath = fmt.Sprintf("/%s/%s/", relDir, slug)
- } else {
- urlPath = fmt.Sprintf("/%s/", slug)
- }
- } else {
- rel, _ := filepath.Rel(contentDir, path)
- rel = filepath.ToSlash(rel)
- urlPath = "/" + strings.TrimSuffix(rel, ".md") + "/"
- }
-
- // Highlights
- matches := highlightPattern.FindAllStringSubmatch(content, -1)
- if len(matches) == 0 {
- return nil
- }
-
- var highlightLinks []HighlightLink
- for _, m := range matches {
- if len(m) > 1 {
- h := m[1]
- encoded := url.QueryEscape(h)
- link := fmt.Sprintf("%s#:~:text=%s", urlPath, encoded)
- highlightLinks = append(highlightLinks, HighlightLink{Text: h, Link: link})
- }
- }
-
- results = append(results, Result{
- Title: title,
- URL: urlPath,
- Highlights: highlightLinks,
- })
-
- return nil
- })
-
- if err != nil {
- fmt.Println("❌ Error:", err)
- return
- }
-
- // Write JSON
- if err := os.MkdirAll(filepath.Dir(outputFile), os.ModePerm); err != nil {
- fmt.Println("❌ Error creating output directory:", err)
- return
- }
-
- jsonData, err := json.MarshalIndent(results, "", " ")
- if err != nil {
- fmt.Println("❌ Error encoding JSON:", err)
- return
- }
-
- if err := os.WriteFile(outputFile, jsonData, 0644); err != nil {
- fmt.Println("❌ Error writing JSON file:", err)
- return
- }
-
- fmt.Printf("✔ 提取完成,共 %d 篇文章有高亮,已写入 %s\n", len(results), outputFile)
-}
diff --git a/scripts/get_external_link_rank.go b/scripts/get_external_link_rank.go
deleted file mode 100644
index 4189c191..00000000
--- a/scripts/get_external_link_rank.go
+++ /dev/null
@@ -1,77 +0,0 @@
-package main
-
-import (
- "encoding/json"
- "fmt"
- "io/fs"
- "net/url"
- "os"
- "path/filepath"
- "regexp"
- "sort"
- "strings"
-)
-
-func main() {
- externalLinks := countExternalLinks("content")
- writeJSON("data/externallinks.json", externalLinks)
- fmt.Println("✅ External link rank data generated.")
-}
-
-// countExternalLinks scans markdown files and counts occurrences of each external domain.
-func countExternalLinks(root string) [][2]interface{} {
- linkRegex := regexp.MustCompile(`https?://[^\s)>"']+`)
- counts := make(map[string]int)
-
- filepath.WalkDir(root, func(path string, d fs.DirEntry, err error) error {
- if err != nil || d.IsDir() || !strings.HasSuffix(path, ".md") {
- return nil
- }
- data, err := os.ReadFile(path)
- if err != nil {
- return nil
- }
- matches := linkRegex.FindAllString(string(data), -1)
- for _, match := range matches {
- u, err := url.Parse(match)
- if err == nil && u.Host != "" {
- // skip my domains
- if strings.HasSuffix(u.Host, "eltr.ac") || strings.HasSuffix(u.Host, "guhub.cn") {
- continue
- }
- counts[u.Host]++
- }
- }
- return nil
- })
-
- // convert map to sorted array (alphabetically by domain)
- type kv struct {
- Key string
- Value int
- }
- var list []kv
- for k, v := range counts {
- list = append(list, kv{k, v})
- }
- sort.Slice(list, func(i, j int) bool { return list[i].Key < list[j].Key })
-
- result := make([][2]interface{}, len(list))
- for i, kv := range list {
- result[i] = [2]interface{}{kv.Key, kv.Value}
- }
- return result
-}
-
-// writeJSON writes the result to file with indentation.
-func writeJSON(path string, data interface{}) {
- file, err := os.Create(path)
- if err != nil {
- fmt.Println("Error:", err)
- return
- }
- defer file.Close()
- enc := json.NewEncoder(file)
- enc.SetIndent("", " ")
- enc.Encode(data)
-}
diff --git a/scripts/get_internal_link_graph.go b/scripts/get_internal_link_graph.go
deleted file mode 100644
index 8adf5594..00000000
--- a/scripts/get_internal_link_graph.go
+++ /dev/null
@@ -1,101 +0,0 @@
-package main
-
-import (
- "encoding/json"
- "fmt"
- "io/fs"
- "os"
- "path/filepath"
- "regexp"
- "sort"
- "strings"
-)
-
-type Node struct {
- ID string `json:"id"`
- Label string `json:"label"`
- URL string `json:"url"`
-}
-
-type Edge struct {
- From string `json:"from"`
- To string `json:"to"`
-}
-
-func main() {
- root := "content"
-
- nodes := map[string]Node{}
- edges := make([]Edge, 0) // non-nil so it becomes [] not null
-
- err := filepath.WalkDir(root, func(path string, d fs.DirEntry, err error) error {
- if err != nil || d.IsDir() || !strings.HasSuffix(strings.ToLower(path), ".md") {
- return nil
- }
-
- rel, err := filepath.Rel(root, path)
- if err != nil {
- return nil
- }
- rel = filepath.ToSlash(rel)
- urlPath := "/" + strings.TrimSuffix(rel, ".md") + "/"
- label := strings.TrimSuffix(filepath.Base(path), ".md")
-
- nodes[urlPath] = Node{ID: urlPath, Label: label, URL: urlPath}
-
- data, err := os.ReadFile(path)
- if err != nil {
- return nil
- }
- content := string(data)
-
- linkPattern := regexp.MustCompile(`\[[^\]]*\]\((/[^)]+)\)`)
- matches := linkPattern.FindAllStringSubmatch(content, -1)
- for _, m := range matches {
- link := strings.TrimSuffix(m[1], ".md")
- if !strings.HasSuffix(link, "/") {
- link += "/"
- }
- edges = append(edges, Edge{From: urlPath, To: link})
- }
-
- return nil
- })
-
- if err != nil {
- fmt.Println("WalkDir error:", err)
- return
- }
-
- nodeKeys := make([]string, 0, len(nodes))
- for k := range nodes {
- nodeKeys = append(nodeKeys, k)
- }
- sort.Strings(nodeKeys)
- nodeList := make([]Node, 0, len(nodeKeys))
- for _, k := range nodeKeys {
- nodeList = append(nodeList, nodes[k])
- }
-
- os.MkdirAll("static", os.ModePerm)
- output := map[string]interface{}{
- "nodes": nodeList,
- "edges": edges,
- }
-
- outfile := "static/link-graph.json"
- f, err := os.Create(outfile)
- if err != nil {
- fmt.Println("create file error:", err)
- return
- }
- defer f.Close()
-
- enc := json.NewEncoder(f)
- enc.SetIndent("", " ")
- if err := enc.Encode(output); err != nil {
- fmt.Println("json encode error:", err)
- }
-
- fmt.Printf("✅ Link graph written to %s (%d nodes, %d edges)\n", outfile, len(nodeList), len(edges))
-}
diff --git a/static/_headers b/static/_headers
deleted file mode 100644
index 96b3e133..00000000
--- a/static/_headers
+++ /dev/null
@@ -1,10 +0,0 @@
-/cal-heatmap.json
- Access-Control-Allow-Origin: *
- Access-Control-Allow-Methods: GET, POST, OPTIONS
- Access-Control-Allow-Headers: *
- Cross-Origin-Resource-Policy: cross-origin
-/favicon.png
- Access-Control-Allow-Origin: *
- Access-Control-Allow-Methods: GET, POST, OPTIONS
- Access-Control-Allow-Headers: *
- Cross-Origin-Resource-Policy: cross-origin
diff --git a/static/apple-touch-icon.png b/static/apple-touch-icon.png
deleted file mode 100644
index 04dd1341..00000000
--- a/static/apple-touch-icon.png
+++ /dev/null
Binary files differ
diff --git a/static/atom.xsl.xml b/static/atom.xsl.xml
deleted file mode 100644
index 40604bdc..00000000
--- a/static/atom.xsl.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><xsl:stylesheet version="3.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:atom="http://www.w3.org/2005/Atom"><xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/><xsl:template match="/"><xsl:variable name="title"><xsl:value-of select="/atom:feed/atom:title"/></xsl:variable><xsl:variable name="description"><xsl:value-of select="/atom:feed/atom:subtitle"/></xsl:variable><xsl:variable name="link"><xsl:value-of select="/atom:feed/atom:link[@rel='alternate']/@href | /atom:feed/atom:link[not(@rel)]/@href"/></xsl:variable><html class="dark scroll-smooth"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><meta name="referrer" content="unsafe-url"/><title><xsl:value-of select="$title"/></title><style>*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }
-
- /*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/*,:after,:before{box-sizing:border-box;border:0 solid #e7e7f0}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#a8a8b8}input::placeholder,textarea::placeholder{opacity:1;color:#a8a8b8}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--card-radius:0.75rem;--btn-radius:var(--card-radius);--badge-radius:var(--btn-radius);--input-radius:var(--btn-radius);--avatar-radius:9999px;--annonce-radius:var(--avatar-radius);--ui-border-color:#1f1f31;--btn-border:#1f1f31;--badge-border:var(--btn-border);--input-border:var(--ui-border-color);--ui-disabled-border:#121220;--ui-error-border:#e11d48;--ui-success-border:#65a30d;--input-outline:#4f46e5;--ui-bg:rgb(18 18 32/var(--ui-bg-opacity));--ui-soft-bg:#1f1f31;--overlay-bg:rgba(2,2,13,.25);--input-bg:var(--ui-soft-bg);--ui-disabled-bg:#121220;--card-padding:1.5rem;--display-text-color:#fff;--title-text-color:var(--display-text-color);--body-text-color:#d6d6e1;--caption-text-color:#6e6e81;--placeholder-text-color:#4d4d5f;--ui-bg-opacity:1;color:var(--body-text-color)}*,.border{border-color:var(--ui-border-color)}button:disabled{border:none!important;background:var(--ui-disabled-bg)!important;background-image:none!important;box-shadow:none!important;color:var(--placeholder-text-color)!important;pointer-events:none!important}button:disabled:before{content:var(--tw-content);display:none}a:focus-visible,button:focus-visible{outline-width:2px;outline-offset:2px;outline-color:#4f46e5}a:focus-visible:focus-visible,button:focus-visible:focus-visible{outline-style:solid}input:user-invalid,select:user-invalid,textarea:user-invalid{--input-border:var(--ui-error-border);--ui-border-color:var(--ui-error-border);--input-outline:var(--ui-error-border);--title-text-color:#fb7185}[data-rounded=none]{--card-radius:0px;--avatar-radius:0px}[data-rounded=default]{--card-radius:0.25rem}[data-rounded=small]{--card-radius:0.125rem}[data-rounded=medium]{--card-radius:0.375rem}[data-rounded=large]{--card-radius:0.5rem}[data-rounded=xlarge]{--card-radius:0.75rem}[data-rounded="2xlarge"]{--card-radius:1rem;--input-radius:0.75rem}[data-rounded="3xlarge"]{--card-radius:1.5rem;--input-radius:0.75rem}[data-rounded=full]{--card-radius:1.5rem;--btn-radius:9999px;--input-radius:1rem}[data-shade=glassy]{--ui-bd-blur:40px;--ui-bg-opacity:0.75;--ui-bg:rgb(58 58 75/var(--ui-bg-opacity));--ui-border-color:rgba(250,250,254,.1);--ui-soft-bg:rgba(77,77,95,.5)}[data-shade="800"]{--ui-border-color:#3a3a4b;--ui-bg:#1f1f31;--ui-soft-bg:#121220}[data-shade="900"]{--ui-border-color:#1f1f31;--ui-bg:#121220;--ui-soft-bg:#1f1f31}[data-shade="950"]{--ui-border-color:#1f1f31;--ui-bg:#02020d;--ui-soft-bg:#1f1f31}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.icon-\[tabler--rss\]{display:inline-block;width:1em;height:1em;background-color:currentColor;-webkit-mask-image:var(--svg);mask-image:var(--svg);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;--svg:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 19a1 1 0 1 0 2 0 1 1 0 1 0-2 0M4 4a16 16 0 0 1 16 16M4 11a9 9 0 0 1 9 9'/%3E%3C/svg%3E")}.link{--tw-text-opacity:1;color:rgb(129 140 248/var(--tw-text-opacity,1));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.link.variant-ghost:hover,.link.variant-underlined{text-decoration-line:underline}.link.variant-animated{position:relative}.link.variant-animated:before{position:absolute;left:0;right:0;bottom:0;height:1px;transform-origin:right;--tw-scale-x:0;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);content:var(--tw-content);transition-duration:.2s}.link.variant-animated:hover:before{transform-origin:left;content:var(--tw-content);--tw-scale-x:1;transform:translate(var(--tw-translate-x),var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))}.link.intent-info{--tw-text-opacity:1;color:rgb(96 165 250/var(--tw-text-opacity,1))}.link.intent-neutral{--tw-text-opacity:1;color:rgb(255 255 255/var(--tw-text-opacity,1))}.link.variant-animated.intent-neutral:before{content:var(--tw-content);background-color:hsla(0,0%,100%,.5)}.link.variant-animated.intent-info:before{content:var(--tw-content);--tw-bg-opacity:1;background-color:rgb(37 99 235/var(--tw-bg-opacity,1))}.link.variant-animated.intent-primary:before{content:var(--tw-content);--tw-bg-opacity:1;background-color:rgb(79 70 229/var(--tw-bg-opacity,1))}.link.variant-ghost.intent-neutral,.link.variant-underlined.intent-neutral{text-decoration-color:hsla(0,0%,100%,.5)}.mx-auto{margin-left:auto;margin-right:auto}.my-2{margin-top:.5rem;margin-bottom:.5rem}.my-6{margin-top:1.5rem;margin-bottom:1.5rem}.-mt-5{margin-top:-1.25rem}.ml-4{margin-left:1rem}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-1{margin-top:.25rem}.block{display:block}.inline-block{display:inline-block}.inline{display:inline}.flex{display:flex}.hidden{display:none}.h-8{height:2rem}.min-h-screen{min-height:100vh}.min-h-svh{min-height:100svh}.w-24{width:6rem}.w-8{width:2rem}.max-w-full{max-width:100%}.max-w-screen-lg{max-width:1024px}.flex-1{flex:1 1 0%}.grow{flex-grow:1}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-start{align-items:flex-start}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-x-4{-moz-column-gap:1rem;column-gap:1rem}.gap-y-2{row-gap:.5rem}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem*var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem*var(--tw-space-y-reverse))}.space-y-6>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(1.5rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1.5rem*var(--tw-space-y-reverse))}.overflow-hidden{overflow:hidden}.scroll-smooth{scroll-behavior:smooth}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.bg-gray-925{--tw-bg-opacity:1;background-color:rgb(9 9 21/var(--tw-bg-opacity,1))}.bg-gradient-to-r{background-image:linear-gradient(to right,var(--tw-gradient-stops))}.from-primary-600{--tw-gradient-from:#4f46e5 var(--tw-gradient-from-position);--tw-gradient-to:rgba(79,70,229,0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from),var(--tw-gradient-to)}.to-accent-400{--tw-gradient-to:#e879f9 var(--tw-gradient-to-position)}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.p-1{padding:.25rem}.px-4{padding-left:1rem;padding-right:1rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-4{padding-top:1rem;padding-bottom:1rem}.py-6{padding-top:1.5rem;padding-bottom:1.5rem}.pb-2{padding-bottom:.5rem}.pt-2{padding-top:.5rem}.text-center{text-align:center}.font-sans{font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.text-2xl{font-size:1.5rem;line-height:2rem}.text-lg{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.leading-normal{line-height:1.5}.text-transparent{color:transparent}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.text-title{color:var(--title-text-color)}.text-body{color:var(--body-text-color)}.\!text-caption{color:var(--caption-text-color)!important}.text-caption{color:var(--caption-text-color)}.dark{--display-text-color:#fff;--title-text-color:var(--display-text-color);--caption-text-color:#6e6e81;--body-text-color:#d6d6e1;--placeholder-text-color:#4d4d5f;--ui-border-color:#232323}[data-shade="900"]:where(.dark,.dark *),[data-shade="925"]:where(.dark,.dark *),[data-shade="950"]:where(.dark,.dark *){--ui-border-color:#383838}@media (min-width:640px){.sm\:gap-1{gap:.25rem}}@media (min-width:768px){.md\:flex-row{flex-direction:row}.md\:space-y-0>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(0px*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(0px*var(--tw-space-y-reverse))}.md\:p-4{padding:1rem}.md\:px-6{padding-left:1.5rem;padding-right:1.5rem}.md\:pt-6{padding-top:1.5rem}}@media (min-width:1024px){.lg\:dark\:bg-gray-900:is(.dark *){--tw-bg-opacity:1;background-color:rgb(18 18 32/var(--tw-bg-opacity,1))}}</style></head><body class="bg-gray-925 min-h-screen min-h-svh font-sans leading-normal antialiased lg:dark:bg-gray-900"><main class="min-w-screen container mx-auto flex min-h-screen max-w-screen-lg flex-col px-4 py-6 md:px-6"><header class="space-y-2 pt-2 md:pt-6"><a title="{$title}" href="{$link}" target="_blank" rel="noopener noreferrer"><h1 class="flex text-2xl"><span class="icon-[tabler--rss] mr-2 h-8 w-8"/><span class="lg2:text-3xl from-primary-600 to-accent-400 inline-block bg-gradient-to-r bg-clip-text font-bold text-transparent"><xsl:value-of select="$title" disable-output-escaping="yes"/></span></h1></a><p class="text-body pt-2 text-lg py-4"><xsl:value-of select="$description" disable-output-escaping="yes"/></p><p class="text-caption text-sm">
- This RSS feed for the
- <a class="link intent-neutral variant-animated !text-caption font-bold" title="{$title}" href="{$link}" target="_blank" rel="noopener noreferrer"><xsl:value-of select="$title"/></a>
- website.
- </p><p class="text-body text-sm hidden" id="subscribe-links">
- You can subscribe this RSS feed by
- <a class="link intent-neutral variant-animated font-bold" title="Feedly" data-href="https://feedly.com/i/subscription/feed/" target="_blank" rel="noopener noreferrer">Feedly</a>,
- <a class="link intent-neutral variant-animated font-bold" title="Inoreader" data-href="https://www.inoreader.com/feed/" target="_blank" rel="noopener noreferrer">Inoreader</a>,
- <a class="link intent-neutral variant-animated font-bold" title="Newsblur" data-href="https://www.newsblur.com/?url=" target="_blank" rel="noopener noreferrer">Newsblur</a>,
- <a class="link intent-neutral variant-animated font-bold" title="Follow" data-href="follow://add?url=" rel="noopener noreferrer">Follow</a>,
- <a class="link intent-neutral variant-animated font-bold" title="RSS Reader" data-href="feed:" data-raw="true" rel="noopener noreferrer">RSS Reader</a>
- or
- <a class="link intent-neutral variant-animated font-bold" title="{$title} 's feed source" data-href="" data-raw="true" rel="noopener noreferrer">View Source</a>.
- </p><script>
- document.addEventListener('DOMContentLoaded', function () {
- document.querySelectorAll('a[data-href]').forEach(function (a) {
- const url = new URL(location.href)
- const feed = url.searchParams.get('url') || location.href
- const raw = a.getAttribute('data-raw')
- if (raw) {
- a.href = a.getAttribute('data-href') + feed
- } else {
- a.href = a.getAttribute('data-href') + encodeURIComponent(feed)
- }
- })
- document.getElementById('subscribe-links').classList.remove('hidden')
- })
- </script></header><hr class="my-6"/><section class="flex-1 space-y-6 p-1 md:p-4"><xsl:choose><xsl:when test="/rss/channel/item"><xsl:for-each select="/rss/channel/item"><article class="space-y-2"><details><summary class="max-w-full truncate"><xsl:if test="title"><h2 class="text-title inline cursor-pointer text-lg font-semibold"><xsl:value-of select="title" disable-output-escaping="yes"/></h2></xsl:if><xsl:if test="pubDate"><time class="text-caption ml-4 mt-1 block text-sm"><xsl:value-of select="pubDate"/></time></xsl:if></summary><div class="text-body px-4 py-2"><p class="my-2"><xsl:choose><xsl:when test="description"><xsl:value-of select="description" disable-output-escaping="yes"/></xsl:when></xsl:choose></p><xsl:if test="link"><a class="link variant-animated intent-neutral font-bold" href="{link}" target="_blank" rel="noopener noreferrer">
- Read More
- </a></xsl:if></div></details></article></xsl:for-each></xsl:when><xsl:when test="/atom:feed/atom:entry"><xsl:for-each select="/atom:feed/atom:entry"><article class="space-y-2"><details><summary class="max-w-full truncate"><xsl:if test="atom:title"><h2 class="text-title inline cursor-pointer text-lg font-semibold"><xsl:value-of select="atom:title" disable-output-escaping="yes"/></h2></xsl:if><xsl:if test="atom:updated"><time class="text-caption ml-4 mt-1 block text-sm"><xsl:value-of select="atom:updated"/></time></xsl:if></summary><div class="text-body px-4 py-2"><p class="my-2"><xsl:choose><xsl:when test="atom:summary"><xsl:value-of select="atom:summary" disable-output-escaping="yes"/></xsl:when><xsl:when test="atom:content"><xsl:value-of select="atom:content" disable-output-escaping="yes"/></xsl:when></xsl:choose></p><xsl:if test="atom:link/@href"><a class="link variant-animated intent-neutral font-bold" href="{atom:link/@href}" target="_blank" rel="noopener noreferrer">
- Read More
- </a></xsl:if></div></details></article></xsl:for-each></xsl:when></xsl:choose></section><hr class="my-6"/><footer><div class="flex flex-col justify-between space-y-4 md:flex-row md:space-y-0"><div class="space-y-4"><a class="flex text-2xl font-bold" href="https://rss.beauty" title="RSS.Beauty"><span class="text-title icon-[tabler--rss] mr-1 h-8 w-8"/><span class="text-title">RSS</span>.
- <span class="from-primary-600 to-accent-400 bg-gradient-to-r bg-clip-text text-transparent">Beauty</span></a><div class="text-caption">Make Your RSS Beautiful</div></div><div class="space-y-4"><div class="flex flex-wrap gap-x-4 gap-y-2"><a class="link intent-neutral variant-animated" target="_blank" title="GitHub" href="https://github.com/ccbikai/RSS.Beauty">GitHub</a><a class="link intent-neutral variant-animated" target="_blank" title="X/Twitter" href="https://404.li/kai">X/Twitter</a></div><div class="text-title flex gap-1 overflow-hidden font-medium">
- Made with ❤️‍🔥 By
- <div class="flex items-start justify-center gap-2 text-center font-semibold sm:gap-1"><div class="block"><a href="https://html.zone" target="_blank" title="HTML.ZONE" class="block pb-2">HTML.ZONE</a><div class="-mt-5 grow overflow-hidden"><svg class="w-24" aria-hidden="true" height="22" viewBox="0 0 283 22" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M1.24715 19.3744C72.4051 10.3594 228.122 -4.71194 281.724 7.12332" stroke="url(#paint0_linear_pl)" stroke-width="4"/><defs><linearGradient id="paint0_linear_pl" x1="282" y1="5.49999" x2="40" y2="13" gradientUnits="userSpaceOnUse"><stop stop-color="#facc15"/><stop offset="1" stop-color="#a855f7"/></linearGradient></defs></svg></div></div></div></div></div></div></footer></main></body></html></xsl:template></xsl:stylesheet> \ No newline at end of file
diff --git a/static/favicon.ico b/static/favicon.ico
deleted file mode 100644
index 1b116908..00000000
--- a/static/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/static/favicon.png b/static/favicon.png
deleted file mode 100644
index 04dd1341..00000000
--- a/static/favicon.png
+++ /dev/null
Binary files differ
diff --git a/static/graph.html b/static/graph.html
deleted file mode 100644
index 9cc77cbc..00000000
--- a/static/graph.html
+++ /dev/null
@@ -1,80 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
- <meta charset="UTF-8" />
- <title>Page Link Graph</title>
- <script type="text/javascript" src="https://unpkg.com/vis-network/standalone/umd/vis-network.min.js"></script>
- <style>
- body {
- margin: 0;
- background: #111;
- color: #eee;
- font-family: sans-serif;
- }
- #graph {
- width: 100vw;
- height: 100vh;
- border: 1px solid #444;
- }
- </style>
-</head>
-<body>
- <div id="graph"></div>
- <script>
- fetch("link-graph.json")
- .then(res => res.json())
- .then(data => {
- const container = document.getElementById("graph");
-
- const nodes = new vis.DataSet(
- data.nodes.map(node => ({
- id: node.id,
- label: node.label,
- url: node.url,
- font: { color: "#eee" }
- }))
- );
-
- const edges = new vis.DataSet(data.edges);
-
- const network = new vis.Network(container, { nodes, edges }, {
- nodes: {
- shape: "dot",
- size: 10,
- color: {
- background: "#29c",
- border: "#fff"
- },
- font: {
- size: 14,
- color: "#eee"
- }
- },
- edges: {
- arrows: "to",
- color: {
- color: "#888"
- }
- },
- physics: {
- stabilization: false
- },
- interaction: {
- navigationButtons: true,
- zoomView: true,
- dragView: true
- }
- });
-
- network.on("click", function (params) {
- if (params.nodes.length > 0) {
- const node = nodes.get(params.nodes[0]);
- if (node.url) {
- window.open(node.url, "_blank");
- }
- }
- });
- });
- </script>
-</body>
-</html>
diff --git a/static/icons/codeberg.svg b/static/icons/codeberg.svg
deleted file mode 100644
index 028b729f..00000000
--- a/static/icons/codeberg.svg
+++ /dev/null
@@ -1,164 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg
- width="16"
- height="16"
- viewBox="0 0 4.2333332 4.2333335"
- version="1.1"
- id="svg1468"
- sodipodi:docname="codeberg-logo_icon_blue.svg"
- inkscape:version="1.2-alpha1 (b6a15bb, 2022-02-23)"
- inkscape:export-filename="/home/mray/Projects/Codeberg/logo/icon/png/codeberg-logo_icon_blue.png"
- inkscape:export-xdpi="384"
- inkscape:export-ydpi="384"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:dc="http://purl.org/dc/elements/1.1/">
- <title
- id="title16">Codeberg logo</title>
- <defs
- id="defs1462">
- <linearGradient
- xlink:href="#linearGradient6924"
- id="linearGradient6918"
- x1="42519.285"
- y1="-7078.7891"
- x2="42575.336"
- y2="-6966.9307"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- id="linearGradient6924">
- <stop
- style="stop-color:#2185d0;stop-opacity:0"
- offset="0"
- id="stop6920" />
- <stop
- id="stop6926"
- offset="0.49517274"
- style="stop-color:#2185d0;stop-opacity:0.48923996" />
- <stop
- style="stop-color:#2185d0;stop-opacity:0.63279623"
- offset="1"
- id="stop6922" />
- </linearGradient>
- <linearGradient
- xlink:href="#linearGradient6924-6"
- id="linearGradient6918-3"
- x1="42519.285"
- y1="-7078.7891"
- x2="42575.336"
- y2="-6966.9307"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- id="linearGradient6924-6">
- <stop
- style="stop-color:#2185d0;stop-opacity:0;"
- offset="0"
- id="stop6920-7" />
- <stop
- id="stop6926-5"
- offset="0.49517274"
- style="stop-color:#2185d0;stop-opacity:0.30000001;" />
- <stop
- style="stop-color:#2185d0;stop-opacity:0.30000001;"
- offset="1"
- id="stop6922-3" />
- </linearGradient>
- </defs>
- <sodipodi:namedview
- showborder="false"
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="22.627417"
- inkscape:cx="12.948893"
- inkscape:cy="12.661631"
- inkscape:document-units="px"
- inkscape:current-layer="svg1468"
- inkscape:document-rotation="0"
- showgrid="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- units="px"
- inkscape:snap-global="false"
- inkscape:snap-page="true"
- showguides="false"
- inkscape:window-width="1531"
- inkscape:window-height="873"
- inkscape:window-x="69"
- inkscape:window-y="27"
- inkscape:window-maximized="1"
- inkscape:pagecheckerboard="0"
- inkscape:deskcolor="#d1d1d1">
- <inkscape:grid
- type="xygrid"
- id="grid2067" />
- </sodipodi:namedview>
- <metadata
- id="metadata1465">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title>Codeberg logo</dc:title>
- <cc:license
- rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" />
- <dc:creator>
- <cc:Agent>
- <dc:title>Robert Martinez</dc:title>
- </cc:Agent>
- </dc:creator>
- <dc:rights>
- <cc:Agent>
- <dc:title>Codeberg and the Codeberg Logo are trademarks of Codeberg e.V.</dc:title>
- </cc:Agent>
- </dc:rights>
- <dc:date>2020-04-09</dc:date>
- <dc:publisher>
- <cc:Agent>
- <dc:title>Codeberg e.V.</dc:title>
- </cc:Agent>
- </dc:publisher>
- <dc:source>codeberg.org</dc:source>
- </cc:Work>
- <cc:License
- rdf:about="http://creativecommons.org/publicdomain/zero/1.0/">
- <cc:permits
- rdf:resource="http://creativecommons.org/ns#Reproduction" />
- <cc:permits
- rdf:resource="http://creativecommons.org/ns#Distribution" />
- <cc:permits
- rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />
- </cc:License>
- </rdf:RDF>
- </metadata>
- <g
- id="g370484"
- inkscape:label="logo"
- transform="matrix(0.06551432,0,0,0.06551432,-2.232417,-1.431776)">
- <path
- id="path6733-5"
- style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:url(#linearGradient6918-3);fill-opacity:1;stroke:none;stroke-width:3.67846;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:2;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;paint-order:stroke markers fill;stop-color:#000000;stop-opacity:1"
- d="m 42519.285,-7078.7891 a 0.76086879,0.56791688 0 0 0 -0.738,0.6739 l 33.586,125.8886 a 87.182358,87.182358 0 0 0 39.381,-33.7636 l -71.565,-92.5196 a 0.76086879,0.56791688 0 0 0 -0.664,-0.2793 z"
- transform="matrix(0.37058478,0,0,0.37058478,-15690.065,2662.0533)"
- inkscape:label="berg" />
- <path
- id="path360787"
- style="opacity:1;fill:#2185d0;fill-opacity:1;stroke-width:17.0055;paint-order:markers fill stroke;stop-color:#000000"
- d="m 11249.461,-1883.6961 c -12.74,0 -23.067,10.3275 -23.067,23.0671 0,4.3335 1.22,8.5795 3.522,12.2514 l 19.232,-24.8636 c 0.138,-0.1796 0.486,-0.1796 0.624,0 l 19.233,24.8646 c 2.302,-3.6721 3.523,-7.9185 3.523,-12.2524 0,-12.7396 -10.327,-23.0671 -23.067,-23.0671 z"
- sodipodi:nodetypes="sccccccs"
- inkscape:label="sky"
- transform="matrix(1.4006354,0,0,1.4006354,-15690.065,2662.0533)" />
- </g>
-</svg>
diff --git a/static/icons/enwiktionary.svg b/static/icons/enwiktionary.svg
deleted file mode 100644
index d239d73d..00000000
--- a/static/icons/enwiktionary.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" width="50" height="49"><defs><linearGradient id="a" x1="25.901%" x2="78.681%" y1="14.621%" y2="85.445%"><stop offset="0%" stop-color="#006"/><stop offset="100%" stop-color="#00004F"/></linearGradient><linearGradient id="b" x1="53.425%" x2="49.355%" y1="103.287%" y2="-12.58%"><stop offset="0%" stop-color="#006"/><stop offset="100%" stop-color="#00004F"/></linearGradient><linearGradient id="c" x1="38.724%" x2="39.86%" y1="109.956%" y2="-4.226%"><stop offset="0%" stop-color="#006"/><stop offset="100%" stop-color="#00004F"/></linearGradient><linearGradient id="d" x1="61.506%" x2="26.642%" y1="105.424%" y2="4.847%"><stop offset="0%" stop-color="#D40000"/><stop offset="100%" stop-color="#570000"/></linearGradient><linearGradient id="e" x1="83.793%" x2="16.851%" y1="95.966%" y2="-.27%"><stop offset="0%" stop-color="#006"/><stop offset="100%" stop-color="#00004F"/></linearGradient><linearGradient id="f" x1="82.378%" x2="27.9%" y1="94.24%" y2="-2.503%"><stop offset="0%" stop-color="#006"/><stop offset="100%" stop-color="#00004F"/></linearGradient><linearGradient id="g" x1="88.706%" x2="13.861%" y1="93.708%" y2="12.144%"><stop offset="0%" stop-color="#006"/><stop offset="100%" stop-color="#00004F"/></linearGradient><linearGradient id="h" x1="93.056%" x2="10.841%" y1="68.234%" y2="9.218%"><stop offset="0%" stop-color="#006"/><stop offset="100%" stop-color="#00004F"/></linearGradient><linearGradient id="i" x1="47.293%" x2="27.569%" y1="97.686%" y2="-.501%"><stop offset="0%" stop-color="#006"/><stop offset="100%" stop-color="#00004F"/></linearGradient></defs><g fill="none" fill-rule="nonzero" stroke="#000" stroke-width=".2"><path fill="url(#a)" d="m44.747 44.606-4.517-.266a32.603 32.603 0 0 0-.376-2.496c-.203-1.057-.286-1.913-.251-2.568.048-.888.201-1.682.46-2.384-.66-.26-.976-.685-.944-1.274a2.86 2.86 0 0 1 .485-1.486l.218.012c.042.224.118.384.226.48.108.096.34.196.697.3.532.157.776.635.733 1.433-.01.202-.035.362-.074.48a2.81 2.81 0 0 1-.964.13 10.411 10.411 0 0 0-.296 2.045c-.052.97.198 2.15.75 3.539l.25.006c.813-1.446 1.56-3.281 2.242-5.505-.653-.314-.963-.768-.931-1.364.027-.512.19-.965.486-1.36l.219.013c.046.337.186.546.42.625l.502.155c.537.17.787.596.75 1.281a2.441 2.441 0 0 1-.107.63c-.247.07-.55.093-.912.072-.514 2.019-1.199 3.851-2.055 5.498l2.57.151c.296-.89 1.052-2.172 2.266-3.846.309-.417.471-.778.488-1.082.016-.31-.118-.527-.403-.651l-.103-.042c-.528-.234-.778-.601-.751-1.102.03-.565.214-1.066.55-1.5l.21.013c.023.288.15.486.382.596l.443.196c.501.227.735.65.702 1.27-.029.535-.317 1.219-.864 2.05-.548.83-1.04 1.749-1.478 2.754a17.011 17.011 0 0 0-1.023 3.197Z" transform="translate(0 1)"/><path fill="url(#b)" d="m5.983 41.592.205-.137c.278.43.52.662.726.695.205.032.555-.117 1.05-.448l2.3-1.537-.082-.15a.65.65 0 0 0-.268-.265.654.654 0 0 0-.324-.063 63.28 63.28 0 0 0-1.748.203l-2.674.338-1.073-1.796.205-.137c.392.457.831.695 1.318.714.487.02 1.463-.048 2.927-.201.535-.057.935-.03 1.202.078.038-.317.135-.603.29-.857.156-.255.496-.681 1.022-1.28.414-.476.66-.79.737-.941.077-.151.08-.288.007-.41-.068-.114-.213-.226-.434-.336-.213-.105-.356-.22-.431-.345a.6.6 0 0 1-.078-.455.59.59 0 0 1 .258-.372.678.678 0 0 1 .577-.08c.218.058.412.23.582.514.166.278.24.577.22.899-.02.321-.104.597-.25.826-.148.23-.462.625-.944 1.185-.437.506-.722.86-.854 1.062-.132.203-.2.411-.204.625-.004.214.064.439.205.675.048.08.122.178.223.295l2.067-1.381c.495-.331.772-.602.833-.812.06-.21-.034-.541-.283-.992l.205-.137 1.817 3.04-.205.137c-.276-.427-.516-.656-.721-.687-.204-.03-.554.12-1.05.45l-2.065 1.381c.035.112.078.21.128.293.156.26.325.434.508.52.184.086.388.112.612.076.224-.036.652-.156 1.285-.36.68-.221 1.147-.352 1.405-.393.257-.041.53-.003.816.113.287.117.514.316.682.597.162.27.226.524.191.76a.733.733 0 0 1-.317.534.54.54 0 0 1-.428.089.542.542 0 0 1-.356-.272c-.07-.118-.107-.305-.11-.56-.001-.262-.037-.451-.107-.57-.069-.114-.189-.165-.36-.153-.17.013-.54.111-1.106.296-.743.244-1.255.386-1.536.426-.282.04-.566.01-.853-.09a2.364 2.364 0 0 1-.211.736c-.11.23-.423.803-.937 1.715-.494.869-.77 1.476-.831 1.82-.06.344-.012.74.147 1.187l-.205.137-1.073-1.796c.071-.106.445-.73 1.122-1.872l1.116-1.882c.07-.115.131-.256.182-.421.051-.165.022-.34-.088-.524a2.193 2.193 0 0 0-.086-.131l-2.3 1.537c-.494.33-.773.6-.834.809-.061.208.031.536.278.983l-.205.137-1.817-3.04Z" transform="translate(0 1)"/><path fill="url(#c)" d="m32.697 8.445-1.662-1.38-5.847 6.48-1.13-.937 5.847-6.48-.802-.665.807-.894 3.594 2.982-.807.894ZM27.13 6.12c-.625.692-1.367 1.12-2.225 1.284-.858.164-1.72.053-2.584-.332l.296 3.763-1.445-.027-.548-6.706 1.45.021.115 1.404c.005.043.062.11.169.198.526.437 1.183.575 1.97.415.711-.14 1.281-.449 1.711-.926.333-.368.503-.839.512-1.412.01-.617-.193-1.097-.608-1.441-.273-.228-.556-.362-.849-.402a.871.871 0 0 0-.808.286c-.303.335-.23.69.22 1.062.103.085.225.161.367.227l-.756.838c-.205-.08-.445-.232-.718-.46-.437-.362-.662-.792-.675-1.292-.016-.463.147-.884.49-1.264.44-.488 1.014-.709 1.72-.663.664.036 1.276.286 1.836.751.826.686 1.26 1.465 1.3 2.34.032.827-.281 1.606-.94 2.336Z" transform="translate(0 1)"/><path fill="url(#d)" d="m30.274 23.9-.14.228c-.205-.127-.396-.191-.572-.193-.176-.001-.388.069-.635.21-.166.095-.499.361-.998.799l-6.328 5.354-.233-.144 1.47-6.44-5.06 4.221-.21-.13 1.898-8.369c.142-.624.219-.998.23-1.12a.931.931 0 0 0-.104-.544c-.088-.159-.246-.309-.476-.45l.14-.228 2.927 1.808-.14.227-.14-.086c-.206-.127-.394-.175-.563-.144a.542.542 0 0 0-.382.255c-.088.144-.205.526-.35 1.148l-1.316 5.637 3.753-3.165.197-.844.157-.675c.044-.255.064-.492.058-.71a.86.86 0 0 0-.066-.311 1.216 1.216 0 0 0-.193-.34 1.418 1.418 0 0 0-.327-.253l.14-.228 3.078 1.902-.14.227-.21-.13c-.218-.134-.407-.183-.568-.147a.621.621 0 0 0-.397.306c-.129.208-.265.627-.41 1.255L23.1 28.291l4.323-3.66c.483-.403.785-.702.905-.899a.538.538 0 0 0 .078-.316.533.533 0 0 0-.107-.304 1.91 1.91 0 0 0-.524-.442l.14-.228 2.36 1.459Z" transform="translate(0 1)"/><path fill="url(#e)" d="m45.36 18.13-.786.87-.768-.901.769-.875.785.906Zm.784 1.61-.788.853-.78-.904.769-.852.799.903Zm-1.579.19-.778.865-.783-.89.766-.869.795.894Zm.03 6.271-.473-.15a1.692 1.692 0 0 1-.596-.313 2.125 2.125 0 0 1-.437-.54c-.224.123-.412.194-.563.212-.215.025-.502-.02-.861-.133l-.737-.233a3.251 3.251 0 0 1-.662 1.161 2.932 2.932 0 0 1-1.442.915c-.71.2-1.507.16-2.39-.118-.798-.252-1.357-.607-1.677-1.065-.349-.504-.405-1.124-.17-1.86a6.31 6.31 0 0 1 .514-1.17c.215-.382.46-.756.736-1.123a25.9 25.9 0 0 1 .825-1.01l.2.2c-.494.58-.847 1.047-1.06 1.404-.213.356-.371.694-.474 1.014-.184.574-.147 1.067.11 1.477.259.411.715.72 1.37.926.767.242 1.502.303 2.204.183.875-.148 1.422-.567 1.644-1.257.148-.464.215-.927.201-1.391a4.06 4.06 0 0 0-.188-1.1l.954-1.269a4.8 4.8 0 0 1 .084 1.137c-.032.444-.163 1.023-.391 1.736l.737.233c.379.12.67.138.873.054.177-.072.304-.228.381-.47.043-.134.08-.272.11-.413.03-.14.056-.297.08-.468l.374-.341-.12.704c-.058.482-.045.846.039 1.092.092.274.288.458.588.553a.262.262 0 0 0 .245-.034.437.437 0 0 0 .156-.23c.074-.232.092-.5.053-.802a3.259 3.259 0 0 0-.179-.7l.645-.63c.073.415.109.695.107.837-.005.32-.097.758-.276 1.314l-.534 1.668Z" transform="translate(0 1)"/><path fill="url(#f)" d="m9.25 27.302.334.07c-.161.757-.437 1.275-.829 1.555a1.59 1.59 0 0 1-1.3.27 2.095 2.095 0 0 1-1.048-.575c-.31-.303-.502-.98-.575-2.032l-.204-2.957-3.793 4.289-1.75-.365 5.372-5.808c-.028-.902-.146-1.59-.355-2.064s-.532-.757-.97-.848a1.473 1.473 0 0 0-.989.12c-.307.155-.522.447-.645.877l-.334-.07c.168-.7.47-1.228.907-1.58.435-.353.913-.475 1.432-.367.333.07.627.242.881.518s.436.694.546 1.255c.11.562.224 1.701.343 3.419l.174 2.417c.065 1 .21 1.69.436 2.07.225.38.542.613.95.698.691.143 1.164-.154 1.417-.892Z" transform="translate(0 1)"/><path fill="url(#g)" d="M27.698 46.903c-.012-.06-.167-1.646-.345-3.525a652.04 652.04 0 0 0-.35-3.648l-.028-.232-.13.251c-.279.538-.597.911-.776.911-.069 0-.136-.02-.15-.042-.014-.024.054-.224.151-.446.578-1.322 1.008-3.034 1.009-4.016 0-.356.041-.596.102-.596.114 0 1.266.55 1.266.604 0 .034-.082.136-.182.226-.162.147-.199.224-.34.713-.086.3-.149.556-.139.567.01.01.712-.056 1.56-.147l1.54-.167.34-.369c.185-.202.352-.368.369-.368.051 0 .788.603.927.76.072.08.122.175.11.21-.014.045-.353.098-1.215.19-.658.07-1.203.135-1.212.145-.009.01.023.407.07.884.047.476.086.907.086.957.001.083.028.089.31.062l.307-.03.3-.346c.22-.255.317-.335.365-.305.187.12.979.815.991.869.018.078-.048.09-1.245.216-.527.056-.961.105-.965.11a70.03 70.03 0 0 0 .178 1.808c.009.053.073.068.262.06.249-.011.254-.014.575-.371.178-.198.352-.36.387-.36.075.001 1.045.849 1.045.913a.085.085 0 0 1-.034.065c-.02.012-.507.07-1.084.13-.576.059-1.06.12-1.076.137-.034.037.153 2.007.194 2.05.016.017.22.009.454-.019l.424-.05.368-.386c.202-.212.393-.386.425-.386.07 0 1.15.903 1.15.962a.092.092 0 0 1-.04.068c-.02.014-1.163.145-2.538.291-1.374.146-2.51.277-2.522.29-.012.013 0 .235.028.493l.05.47-.142.13c-.127.117-.653.375-.765.375-.024 0-.054-.049-.065-.108Zm1.61-1.935c.334-.038.616-.077.626-.087.02-.021-.167-2.023-.192-2.052-.024-.027-1.326.101-1.377.136-.031.021.128 1.97.168 2.061.01.022.16.011.774-.058Zm-.177-2.58c.289-.029.534-.063.545-.074.03-.03-.137-1.816-.172-1.854-.036-.038-1.34.1-1.381.145-.016.017.009.4.054.849.045.45.083.869.085.93.002.103.018.11.174.086.094-.015.407-.051.695-.081Zm-.342-2.356c.276-.028.543-.06.594-.07l.093-.02-.091-.964c-.086-.907-.097-.964-.184-.963-.232.002-1.275.144-1.305.178-.018.02.005.427.052.903.048.477.087.894.087.927.002.073.11.074.754.01Zm-5.878 5.933c-.231-.288-.3-.408-.3-.525-.001-.152 0-.153.33-.21.497-.088 1.782-.442 2.677-.739.438-.145.813-.253.832-.24.02.013.036.07.035.129 0 .084-.105.166-.535.414-.295.17-1.012.587-1.594.926-.582.34-1.077.617-1.1.617-.025 0-.18-.167-.345-.372Zm-.027-2.61c-.126-.264-.229-.51-.229-.548 0-.037.053-.082.118-.099.17-.045.537-.425.775-.803.221-.35.818-1.621.78-1.66-.012-.014-.091.012-.175.058-.293.16-1.516.694-1.59.694-.073 0-.592-.753-.592-.859 0-.03.1-.106.22-.171.204-.109.234-.15.415-.562.375-.851.703-1.907.92-2.967.07-.334.122-.493.165-.493.103 0 .967.644.968.722 0 .04-.078.13-.174.202-.141.106-.204.209-.325.53-.21.56-.68 1.568-.975 2.094a8.607 8.607 0 0 0-.242.445c.005 0 .347-.053.761-.12.414-.065.77-.119.79-.12.083-.001.624-1.359.624-1.565 0-.18.152-.116.57.238.238.202.433.376.433.386 0 .01-.09.112-.202.227-.13.135-.389.555-.735 1.193-.566 1.046-1 1.775-1.326 2.228-.11.152-.2.283-.2.291 0 .008.488-.057 1.084-.144a21.64 21.64 0 0 1 1.254-.159c.164 0 .17.005.17.164 0 .16-.007.167-.261.241-.658.191-1.855.625-2.268.821-.25.12-.47.217-.49.217-.02 0-.138-.217-.263-.48Zm6.73-6.04a.773.773 0 0 1-.12-.278c-.127-.526-.323-.888-.68-1.258-.172-.18-.23-.275-.23-.38 0-.136.006-.14.181-.115.315.045.909.389 1.244.72.307.305.308.306.308.568 0 .304-.129.572-.345.723-.162.112-.264.118-.358.02Z" transform="translate(0 1)"/><path fill="url(#h)" d="M7.38 12.503c-.11-.052-.288-.181-.698-.51a13.111 13.111 0 0 1-.569-.47c-.01-.016-.012-.037-.005-.046.007-.01.133-.093.28-.185 1.494-.944 2.74-2.04 3.602-3.165 1.05-1.372 1.876-3.052 2.26-4.603.04-.165.083-.326.094-.358l.02-.058.599.292c.33.161.606.304.614.317.026.045-.222.91-.416 1.45-.436 1.212-1.09 2.438-1.804 3.384-.948 1.255-2.069 2.37-3.409 3.388l-.261.199.002.109a.953.953 0 0 1-.018.195c-.017.072-.03.09-.083.108-.05.017-.09.008-.209-.047ZM6.008 7.606c-.992-.297-1.679-.461-2.35-.562a1.082 1.082 0 0 1-.255-.056c-.012-.035.396-1.318.421-1.327.03-.01 1.393.248 1.681.318.33.081 1.357.368 1.376.384.015.014-.413 1.305-.448 1.349-.007.01-.199-.038-.425-.106Zm.607-3.373a18.954 18.954 0 0 0-1.562-.39c-.795-.16-1.132-.24-1.13-.267.001-.058.294-1.245.313-1.27.014-.02.038-.024.08-.016l.742.15c.375.077.795.166.934.2.264.064 1.098.283 1.246.328l.085.025-.015.065a26.89 26.89 0 0 1-.355 1.25c-.01.009-.162-.025-.338-.075Z" transform="translate(0 1)"/><path fill="url(#i)" d="M42.111.305c.109.065.373.29.793.675.138.127.268.228.391.301.355.213.906.52 1.652.923l.922.402c.586.351.817.618.692.798-.05.071-.192.174-.43.31l-.18.125-1.738 1.71c-.087.081-.082.207.016.376.092.178.108.31.049.396-.136.196-.581.069-1.335-.382l-.193-.1-1.086-.584-.873-.472c-.043-.026-.16.038-.348.192l-.25.183-.163.036-.084-.034c-.167-.1.068-.653.705-1.661a.944.944 0 0 1 .063-.113l.735-1.26c.203-.323.315-.528.335-.616.098-.32.018-.634-.239-.943-.152-.18-.208-.314-.168-.401.098-.141.343-.095.734.14ZM41.01 4.314l1.774 1.012c.34.148.616.147.832-.002.167-.122.53-.572 1.089-1.348.174-.252.327-.465.46-.642.1-.129.123-.237.07-.324a.432.432 0 0 0-.135-.115l-2.277-1.33-1.813 2.749Zm-.564 1.945.5.366c.61.422.98.671 1.11.75l1.229.735 1.266.725.021.013.533.186.011.006c.485.29.674.515.565.672-.044.063-.168.138-.373.227a.556.556 0 0 0-.136.085c-.515.492-.79.755-.824.79-.02.044.004.12.073.227.045.083.056.156.032.22a.254.254 0 0 1-.03.065c-.032.047-.095.07-.187.071-.147-.01-.595-.228-1.345-.655l-2.282-1.367c-.232-.14-.424-.099-.577.121l-.4.577c-.223.323-.092.629.394.92l1.244.712.022.013c.616.368.948.562.997.58.043.026.09.048.138.067l.883.278a.83.83 0 0 1 .139.067c.587.351.799.645.635.88-.13.19-.351.19-.663.004l-3.518-2.091-.24-.143c-.622-.374-.937-.74-.944-1.1-.005-.215.082-.451.261-.71l.392-.566c.153-.22.112-.45-.121-.69l-.24-.276a.13.13 0 0 1 .009-.145c.082-.118.306-.072.674.137l.076.046.866.768.12.072c.522.312 1.317.778 2.385 1.395.334.2.615.202.843.005a2.35 2.35 0 0 0 .302-.37c.158-.227.238-.357.24-.389.02-.088-.021-.162-.122-.223l-2.609-1.496a9.198 9.198 0 0 0-.597-.225.873.873 0 0 1-.19-.08c-.174-.105-.373-.351-.595-.74l-.147-.321c-.02-.09-.016-.154.011-.193.033-.048.09-.047.169 0Zm6.825 1.004c-.626.903-1.12 1.386-1.48 1.448l-.17-.001-.032-.02c-.13-.078.043-.469.52-1.172l2.27-3.275.186-.29.008-.011c.172-.264.122-.672-.151-1.224-.196-.384-.28-.624-.255-.72.065-.094.21-.074.435.06.311.187.637.516.977.986.172.226.261.4.266.526.006.081-.033.175-.117.28l-.637.786-1.543 2.227c.167.1.509.227 1.027.381.214.062.386.132.516.21.558.334.76.61.608.83-.147.213-.593.095-1.34-.352l-.882-.545-.206-.124Z" transform="translate(0 1)"/></g></svg> \ No newline at end of file
diff --git a/static/icons/etymonline.jpg b/static/icons/etymonline.jpg
deleted file mode 100644
index 27dd47a7..00000000
--- a/static/icons/etymonline.jpg
+++ /dev/null
Binary files differ
diff --git a/static/icons/external.svg b/static/icons/external.svg
deleted file mode 100644
index e7290003..00000000
--- a/static/icons/external.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
- <!-- Uploaded to: SVG Repo, www.svgrepo.com, Transformed by: SVG Repo Mixer Tools -->
-<svg width="800px" height="800px" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="#000000" transform="rotate(45)">
- <g id="SVGRepo_bgCarrier" stroke-width="0"/>
- <g id="SVGRepo_tracerCarrier" stroke-linecap="round" stroke-linejoin="round"/>
- <g id="SVGRepo_iconCarrier"> <title/> <g id="Complete"> <g id="arrow-up"> <g> <polyline data-name="Right" fill="none" id="Right-2" points="7 7.5 12 2.5 17 7.5" stroke="#000000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2"/> <line fill="none" stroke="#000000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" x1="12" x2="12" y1="21.3" y2="4.8"/> </g> </g> </g> </g>
- </svg> \ No newline at end of file
diff --git a/static/icons/forgejo.svg b/static/icons/forgejo.svg
deleted file mode 100644
index 804b05e2..00000000
--- a/static/icons/forgejo.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 212 212" width="32" height="32"><style>circle,path{fill:none;stroke:#000;stroke-width:15}path{stroke-width:25}.orange{stroke:#f60}.red{stroke:#d40000}</style><g transform="translate(6 6)"><path d="M58 168V70a50 50 0 0 1 50-50h20" class="orange"/><path d="M58 168v-30a50 50 0 0 1 50-50h20" class="red"/><circle cx="142" cy="20" r="18" class="orange"/><circle cx="142" cy="88" r="18" class="red"/><circle cx="58" cy="180" r="18" class="red"/></g></svg> \ No newline at end of file
diff --git a/static/icons/gatus.svg b/static/icons/gatus.svg
deleted file mode 100644
index 52cc2b84..00000000
--- a/static/icons/gatus.svg
+++ /dev/null
@@ -1 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 89.76 89.75"><defs><style>.cls-1{fill:#3cad4b;}.cls-2{fill:#017400;}.cls-3{fill:#1e9025;}</style></defs><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M33.67,65.35a23.35,23.35,0,0,1,.08-41,22.94,22.94,0,0,1,3.8-1.64A23,23,0,0,0,53.6,1C53,0,51,0,44.89,0c-9.08,0-9.21.17-8.81,3.22,1.07,8.12-9.42,12.5-14.45,6-1.94-2.52-2.1-2.52-8.68,4.16-6.22,6.3-6.33,6.28-3.77,8.25a8.09,8.09,0,0,1,2.56,9.53A8.15,8.15,0,0,1,3.08,36C0,35.63,0,35.73,0,45.2.08,53.81,0,54,3.3,53.63A8.06,8.06,0,0,1,9.76,67.52c-3,2.83-2.84,2.61,2.84,8.48,5.43,5.62,6.33,6.73,8.16,5.24L34,68A1.63,1.63,0,0,0,33.67,65.35Z"/><path class="cls-2" d="M85.43,36.13a8.11,8.11,0,0,1-5.27-14.21c2.85-2.5,2.82-2.37-3.55-8.75-4.31-4.31-5.71-5.75-6.87-5.4l-14,14a1.65,1.65,0,0,0,.36,2.61,23.35,23.35,0,0,1-.1,41,24.5,24.5,0,0,1-5.11,2c-8.54,2.28-14.73,9.63-14.73,18.47v1.27c.15,2.54,1.19,2.42,8.06,2.52,9.32.14,9.1.35,9.38-4.66a8.11,8.11,0,0,1,14-5.09c3,3.15,2.39,3.11,8.73-3.14,6.56-6.47,6.86-6.25,3.68-9.14a8.1,8.1,0,0,1,6.06-14.07c3.68.27,3.51.06,3.63-8.09C89.85,36.27,90,36.16,85.43,36.13Z"/><path class="cls-3" d="M41.11,59h8a.76.76,0,0,0,.77-.76V50.43a.76.76,0,0,1,.77-.76h7.84a.78.78,0,0,0,.77-.77V40.84a.77.77,0,0,0-.77-.76H50.7a.76.76,0,0,1-.77-.77V31.47a.76.76,0,0,0-.77-.77h-8a.76.76,0,0,0-.77.77v7.84a.76.76,0,0,1-.77.77H31.73a.77.77,0,0,0-.77.76V48.9a.78.78,0,0,0,.77.77h7.84a.76.76,0,0,1,.77.76v7.85A.76.76,0,0,0,41.11,59Z"/></g></g></svg> \ No newline at end of file
diff --git a/static/icons/github.svg b/static/icons/github.svg
deleted file mode 100644
index 2dfec51e..00000000
--- a/static/icons/github.svg
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
-<svg width="800px" height="800px" viewBox="0 0 20 20" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-
- <title>github [#142]</title>
- <desc>Created with Sketch.</desc>
- <defs>
-
-</defs>
- <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
- <g id="Dribbble-Light-Preview" transform="translate(-140.000000, -7559.000000)" fill="#000000">
- <g id="icons" transform="translate(56.000000, 160.000000)">
- <path d="M94,7399 C99.523,7399 104,7403.59 104,7409.253 C104,7413.782 101.138,7417.624 97.167,7418.981 C96.66,7419.082 96.48,7418.762 96.48,7418.489 C96.48,7418.151 96.492,7417.047 96.492,7415.675 C96.492,7414.719 96.172,7414.095 95.813,7413.777 C98.04,7413.523 100.38,7412.656 100.38,7408.718 C100.38,7407.598 99.992,7406.684 99.35,7405.966 C99.454,7405.707 99.797,7404.664 99.252,7403.252 C99.252,7403.252 98.414,7402.977 96.505,7404.303 C95.706,7404.076 94.85,7403.962 94,7403.958 C93.15,7403.962 92.295,7404.076 91.497,7404.303 C89.586,7402.977 88.746,7403.252 88.746,7403.252 C88.203,7404.664 88.546,7405.707 88.649,7405.966 C88.01,7406.684 87.619,7407.598 87.619,7408.718 C87.619,7412.646 89.954,7413.526 92.175,7413.785 C91.889,7414.041 91.63,7414.493 91.54,7415.156 C90.97,7415.418 89.522,7415.871 88.63,7414.304 C88.63,7414.304 88.101,7413.319 87.097,7413.247 C87.097,7413.247 86.122,7413.234 87.029,7413.87 C87.029,7413.87 87.684,7414.185 88.139,7415.37 C88.139,7415.37 88.726,7417.2 91.508,7416.58 C91.513,7417.437 91.522,7418.245 91.522,7418.489 C91.522,7418.76 91.338,7419.077 90.839,7418.982 C86.865,7417.627 84,7413.783 84,7409.253 C84,7403.59 88.478,7399 94,7399" id="github-[#142]">
-
-</path>
- </g>
- </g>
- </g>
-</svg> \ No newline at end of file
diff --git a/static/icons/music/apple.png b/static/icons/music/apple.png
deleted file mode 100644
index 834dc364..00000000
--- a/static/icons/music/apple.png
+++ /dev/null
Binary files differ
diff --git a/static/icons/music/bandcamp.png b/static/icons/music/bandcamp.png
deleted file mode 100644
index 652fdd8d..00000000
--- a/static/icons/music/bandcamp.png
+++ /dev/null
Binary files differ
diff --git a/static/icons/music/netease.png b/static/icons/music/netease.png
deleted file mode 100644
index 6f26d9bd..00000000
--- a/static/icons/music/netease.png
+++ /dev/null
Binary files differ
diff --git a/static/icons/music/spotify.png b/static/icons/music/spotify.png
deleted file mode 100644
index abc5f12f..00000000
--- a/static/icons/music/spotify.png
+++ /dev/null
Binary files differ
diff --git a/static/icons/music/tidal.png b/static/icons/music/tidal.png
deleted file mode 100644
index 41cf7d61..00000000
--- a/static/icons/music/tidal.png
+++ /dev/null
Binary files differ
diff --git a/static/icons/rss.svg b/static/icons/rss.svg
deleted file mode 100644
index d5698927..00000000
--- a/static/icons/rss.svg
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
-<svg fill="#000000" height="800px" width="800px" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
- viewBox="-143 145 512 512" xml:space="preserve">
-<path d="M113,145c-141.4,0-256,114.6-256,256s114.6,256,256,256s256-114.6,256-256S254.4,145,113,145z M43.1,518.7
- c-6.2,6.2-14.7,9.9-24.1,9.9c-9.4,0-17.8-3.8-24-9.9c-6.2-6.2-10-14.6-10-23.9c0-9.4,3.8-17.8,10-24s14.6-10,24-10
- c9.4,0,17.9,3.8,24,10c6.2,6.2,10,14.6,10,24C53,504.2,49.2,512.6,43.1,518.7z M104.8,529c-0.1-32.1-12.5-62.3-35.1-84.9
- c-22.6-22.6-52.8-35.2-84.7-35.2V360c46.6,0,88.7,19,119.3,49.6c30.6,30.6,49.5,72.8,49.6,119.4H104.8z M192,529
- c-0.1-114.2-92.8-207.1-206.9-207.1V273c70.6,0,134.5,28.7,180.8,75.1c46.3,46.4,75,110.3,75.1,180.9H192z"/>
-</svg> \ No newline at end of file
diff --git a/static/icons/wikipedia.svg b/static/icons/wikipedia.svg
deleted file mode 100644
index e694aada..00000000
--- a/static/icons/wikipedia.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
-<svg fill="#000000" width="800px" height="800px" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="m15.562 19.478-3.07-7.238q-.258.51-1.652 3.182t-2.068 4.057c-.051.006-.11.009-.17.009-.041 0-.082-.002-.122-.005h.005c-.019.001-.04.001-.062.001-.075 0-.15-.006-.222-.018l.008.001q-.854-2.01-2.662-6.114t-2.704-6.209c-.193-.428-.425-.796-.699-1.128l.007.008c-.315-.396-.669-.741-1.063-1.035l-.015-.011c-.287-.248-.653-.411-1.055-.447l-.007-.001q0-.052-.005-.25t-.005-.282h6.073v.521c-.301.018-.582.077-.846.173l.021-.007c-.275.092-.508.246-.692.447l-.001.001c-.104.103-.168.246-.168.403 0 .096.024.187.066.266l-.002-.003q.271.614 2.255 5.2t2.453 5.626q.32-.635 1.458-2.776t1.364-2.578q-.198-.406-1.313-2.926t-1.416-3.073q-.396-.72-2.094-.74v-.523l5.343.01v.49c-.012 0-.026 0-.04 0-.345 0-.667.096-.942.263l.008-.005q-.349.24-.13.72.344.73.906 1.974t.895 1.953q1.146-2.229 1.802-3.781.25-.573-.103-.826c-.34-.178-.742-.282-1.169-.282-.061 0-.121.002-.181.006h.008c.007-.065.011-.14.011-.216 0-.015 0-.03 0-.045v.002-.25q.666 0 1.776-.005l2.834-.015v.51c-.457.016-.882.142-1.253.351l.014-.007c-.382.203-.697.486-.931.828l-.006.009-2.219 4.604q.135.344 1.328 3.021t1.266 2.854l4.594-10.593c-.103-.271-.282-.494-.511-.648l-.005-.003c-.193-.143-.419-.256-.663-.324l-.015-.004c-.17-.043-.369-.071-.572-.08h-.006v-.524l4.792.042.01.021-.01.458c-.965.014-1.782.633-2.089 1.495l-.005.016q-5.482 12.666-5.824 13.447z"/></svg> \ No newline at end of file
diff --git a/static/img/bat.svg b/static/img/bat.svg
deleted file mode 100644
index 0ca422e1..00000000
--- a/static/img/bat.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
-<svg fill="#000000" width="800px" height="800px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg">
-<title>batwings</title>
-<path d="M31.19 2.61c-5.261 1.114-9.712 5.432-11.847 10.719 3.106 2.48 2.088 6.827-0.967 8.402-0.66-0.435-1.451-0.688-2.3-0.688s-1.64 0.254-2.301 0.688c-3.054-1.575-4.073-5.922-0.967-8.402-2.135-5.286-6.587-9.605-11.847-10.719 2.604 2.659 3.284 8.028 0.84 10.906 3.982 0.67 4.724 3.825 4.021 8.579 2.088-1.303 4.657-0.762 6.245 1.913-0.118 0.387-0.182 0.798-0.182 1.224 0 2.314 1.876 4.191 4.191 4.191s4.191-1.876 4.191-4.191c0-0.426-0.064-0.837-0.182-1.225 1.588-2.675 4.157-3.216 6.245-1.913-0.702-4.754 0.039-7.909 4.021-8.579-2.444-2.879-1.765-8.247 0.84-10.906zM17.329 26.543c-1.352 0-2.448-1.096-2.448-2.448s1.096-2.448 2.448-2.448c0.311 0 0.609 0.059 0.882 0.165 0 0 0 0-0 0 0.114 0.044 0.224 0.096 0.329 0.156 0.001 0.001 0.002 0.001 0.003 0.002 0.103 0.059 0.201 0.125 0.293 0.197 0.003 0.003 0.007 0.005 0.011 0.008 0.022 0.017 0.043 0.035 0.064 0.052 0.001 0.001 0.003 0.002 0.004 0.004 0.064 0.054 0.124 0.112 0.182 0.172 0.006 0.006 0.012 0.012 0.018 0.019 0.016 0.017 0.032 0.035 0.048 0.052 0.007 0.008 0.013 0.015 0.020 0.023 0.048 0.056 0.093 0.113 0.136 0.173 0.008 0.011 0.016 0.023 0.024 0.034 0.011 0.016 0.022 0.032 0.033 0.049 0.009 0.013 0.017 0.027 0.026 0.040 0.010 0.016 0.020 0.031 0.029 0.047 0.011 0.018 0.021 0.035 0.031 0.053 0.012 0.021 0.024 0.043 0.035 0.064 0.010 0.020 0.021 0.039 0.030 0.059 0.007 0.014 0.014 0.029 0.020 0.043 0.009 0.019 0.017 0.037 0.025 0.056 0.006 0.014 0.012 0.028 0.018 0.042 0.009 0.022 0.018 0.045 0.027 0.068 0.004 0.011 0.008 0.021 0.012 0.032 0.012 0.032 0.023 0.065 0.033 0.098 0.004 0.012 0.007 0.023 0.010 0.035 0.007 0.024 0.014 0.047 0.020 0.072 0.003 0.013 0.007 0.026 0.010 0.039 0.006 0.025 0.012 0.051 0.018 0.076 0.002 0.011 0.005 0.021 0.007 0.032 0.007 0.036 0.014 0.071 0.019 0.108 0.001 0.008 0.002 0.015 0.003 0.023 0.004 0.029 0.008 0.059 0.011 0.089 0.001 0.012 0.002 0.024 0.004 0.036 0.003 0.027 0.005 0.054 0.006 0.081 0.001 0.012 0.002 0.023 0.002 0.035 0.002 0.038 0.003 0.076 0.003 0.114 0 0.033-0.001 0.065-0.002 0.098-0.001 0.018-0.002 0.035-0.003 0.053-0.078 1.281-1.142 2.297-2.443 2.297z"></path>
-</svg> \ No newline at end of file
diff --git a/static/img/clockwork.svg b/static/img/clockwork.svg
deleted file mode 100644
index 5c3db302..00000000
--- a/static/img/clockwork.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
-<svg fill="#000000" width="800px" height="800px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg">
-<title>clockwork</title>
-<path d="M21.393 21.232l-2.949-3.925c0.2-0.375 0.313-0.803 0.313-1.257 0-0.978-0.524-1.834-1.307-2.302v-3.077h1.421l-2.806-8.071-2.842 8.071h1.421v3.114c-0.749 0.475-1.246 1.311-1.246 2.264 0 1.48 1.2 2.68 2.68 2.68 0.046 0 0.091-0.001 0.136-0.003l3.060 4.073-1.082 0.815 7.117 5.045-2.872-8.213-1.043 0.786zM29.447 16.055c0-1.761-0.34-3.442-0.957-4.983l2.449-2.449-7.478-7.478-2.448 2.448c-1.373-0.55-2.857-0.88-4.41-0.945l1.189 2.98c0.345 0.058 0.684 0.133 1.016 0.224 0.085 0.023 0.171 0.048 0.255 0.073 0.021 0.006 0.043 0.013 0.064 0.019 0.098 0.030 0.196 0.062 0.293 0.094 0.020 0.007 0.039 0.014 0.059 0.020 0.084 0.029 0.168 0.059 0.251 0.090 0.019 0.007 0.039 0.014 0.058 0.022 0.096 0.037 0.191 0.074 0.286 0.114 0.018 0.008 0.037 0.016 0.055 0.023 0.083 0.035 0.165 0.071 0.247 0.108 0.017 0.008 0.034 0.015 0.052 0.023 0.094 0.043 0.186 0.087 0.279 0.133 0.017 0.008 0.034 0.017 0.051 0.026 0.082 0.041 0.163 0.083 0.243 0.126 0.015 0.008 0.030 0.016 0.045 0.024 0.091 0.049 0.181 0.1 0.271 0.151 0.016 0.009 0.031 0.018 0.047 0.027 0.081 0.047 0.161 0.095 0.24 0.145 0.012 0.008 0.024 0.015 0.037 0.022 0.088 0.056 0.176 0.112 0.263 0.17 0.014 0.009 0.027 0.019 0.041 0.028 0.080 0.054 0.159 0.109 0.237 0.165 0.009 0.007 0.019 0.013 0.028 0.020 0.086 0.062 0.17 0.125 0.254 0.189 0.012 0.009 0.023 0.018 0.035 0.027 0.079 0.061 0.156 0.123 0.233 0.186 0.006 0.005 0.013 0.010 0.019 0.015 0.083 0.068 0.164 0.138 0.245 0.208 0.010 0.008 0.019 0.017 0.029 0.025 0.077 0.068 0.154 0.138 0.229 0.208 0.003 0.003 0.007 0.006 0.010 0.009 0.079 0.075 0.157 0.15 0.235 0.227 0.008 0.008 0.015 0.015 0.023 0.023 0.076 0.076 0.151 0.153 0.224 0.232 0 0 0.001 0.001 0.001 0.001 0.076 0.081 0.15 0.163 0.223 0.246 0.006 0.006 0.011 0.013 0.017 0.019 0.146 0.166 0.286 0.337 0.421 0.512 0.004 0.005 0.007 0.010 0.011 0.015 0.136 0.177 0.267 0.359 0.392 0.545 0.002 0.003 0.005 0.007 0.007 0.010 0.126 0.188 0.246 0.38 0.36 0.576 0.001 0.002 0.002 0.004 0.003 0.006 0.115 0.198 0.223 0.399 0.325 0.605 0 0 0 0.001 0.001 0.001 0.308 0.62 0.557 1.275 0.739 1.957l0-0c0.233 0.873 0.358 1.79 0.358 2.737s-0.125 1.865-0.358 2.738l-0-0c-0.438 1.639-1.261 3.12-2.364 4.342l1.998 5.415 5.062-5.062-2.449-2.449c0.617-1.541 0.957-3.223 0.957-4.985zM22.965 27.544l-2.622-1.833c-0.37 0.166-0.751 0.311-1.141 0.434-0.017 0.005-0.034 0.011-0.050 0.016-0.053 0.016-0.106 0.032-0.159 0.048-0.023 0.007-0.046 0.013-0.070 0.020-0.052 0.015-0.104 0.030-0.157 0.044l0 0c-0.874 0.234-1.792 0.359-2.739 0.359s-1.864-0.125-2.737-0.358v0c-0.682-0.182-1.337-0.431-1.958-0.739-0.001-0-0.001-0.001-0.002-0.001-0.31-0.154-0.611-0.322-0.902-0.504-0.001-0-0.002-0.001-0.002-0.001-0.291-0.182-0.573-0.379-0.845-0.588-0-0-0.001-0.001-0.001-0.001-0.725-0.558-1.376-1.209-1.935-1.934-0-0-0-0-0-0-0.209-0.272-0.406-0.554-0.588-0.846-0-0.001-0.001-0.001-0.001-0.002-0.182-0.291-0.351-0.592-0.505-0.902-0-0.001-0.001-0.001-0.001-0.002-0.154-0.31-0.293-0.628-0.417-0.955-0-0-0-0-0-0.001-0.124-0.327-0.231-0.661-0.323-1.002v0c-0.234-0.874-0.359-1.793-0.359-2.74s0.125-1.865 0.359-2.739l0 0c0.395-1.476 1.101-2.826 2.045-3.973 0.002-0.002 0.004-0.005 0.006-0.007 0.142-0.173 0.29-0.341 0.443-0.504 0.004-0.005 0.009-0.009 0.013-0.014 0.151-0.161 0.307-0.316 0.467-0.468 0.007-0.007 0.014-0.013 0.021-0.020 0.159-0.149 0.323-0.293 0.491-0.431 0.009-0.008 0.019-0.016 0.028-0.023 0.167-0.137 0.338-0.268 0.513-0.395 0.012-0.008 0.023-0.017 0.035-0.025 0.174-0.125 0.352-0.244 0.533-0.358 0.014-0.009 0.027-0.017 0.041-0.026 0.181-0.113 0.365-0.22 0.553-0.322 0.016-0.008 0.031-0.017 0.047-0.025 0.187-0.1 0.378-0.195 0.572-0.284 0.017-0.008 0.034-0.016 0.052-0.024 0.194-0.088 0.39-0.17 0.59-0.246 0.019-0.007 0.037-0.014 0.056-0.021 0.199-0.075 0.402-0.144 0.607-0.207 0.020-0.006 0.040-0.012 0.060-0.018 0.099-0.030 0.199-0.058 0.299-0.085 0.391-0.105 0.791-0.188 1.198-0.248l1.106-2.95c-1.601 0.052-3.131 0.385-4.543 0.95l-2.45-2.45-7.478 7.478 2.449 2.449c-0.617 1.541-0.957 3.223-0.957 4.985s0.34 3.445 0.958 4.987l-2.449 2.449 7.478 7.478 2.451-2.451c1.541 0.617 3.222 0.956 4.983 0.956s3.444-0.34 4.985-0.957l2.449 2.449 1.81-1.81-2.306-1.612c0 0 0 0 0 0z"></path>
-</svg> \ No newline at end of file
diff --git a/static/img/coffee.svg b/static/img/coffee.svg
deleted file mode 100644
index e3633def..00000000
--- a/static/img/coffee.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
-<svg width="800px" height="800px" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path fill="#000000" d="M221.97 54.406c-40.375 0-77.013 8.01-104.345 21.563C90.293 89.52 70.937 109.51 70.937 134c0 2.57.213 5.094.626 7.563l-.032 5.875c-.555 82.898 16.25 164.612 14.97 244.718-.372 23.295 14.294 43.908 38 57.594s56.797 21.5 97.125 21.5c40.357 0 71.338-8.024 92.906-22.03 21.57-14.008 33.408-34.712 33.408-56.908 0-3.17.054-6.345.125-9.53 42.143-1.114 75.316-23.45 97.125-52.563 22.235-29.684 34.027-66.306 34.687-99.626.66-33.32-9.983-66.91-39.156-80.594-14.588-6.842-30.593-6.573-49.25-1.125-6.16 1.798-12.548 4.25-19.126 7.375.07-2.93.125-5.86.125-8.75v-6.72c.33-2.214.5-4.484.5-6.78 0-24.49-19.357-44.478-46.69-58.03-27.33-13.554-63.937-21.564-104.31-21.564zm0 18.688c37.87 0 72.087 7.752 96.03 19.625 23.943 11.87 36.28 26.974 36.28 41.28 0 14.306-12.337 29.44-36.28 41.313-23.943 11.87-58.16 19.593-96.03 19.593-37.87 0-72.09-7.722-96.032-19.594-23.943-11.87-36.313-27.006-36.313-41.312 0-14.306 12.37-29.41 36.313-41.28 23.942-11.874 58.16-19.626 96.03-19.626zm-69.657 39.03c-23.19 6.707-37.907 16.684-37.907 27.814 0 20.193 48.398 36.562 108.094 36.562 59.696 0 108.063-16.37 108.063-36.563 0-10.264-12.52-19.546-32.657-26.187 5.266 4.105 8.22 8.692 8.22 13.563 0 17.186-36.765 31.124-82.126 31.124-45.36 0-82.125-13.938-82.125-31.125 0-5.518 3.788-10.693 10.438-15.187zm263.312 68.282c4.34-.023 7.825.793 10.53 2.063 10.826 5.076 18.406 22.81 17.908 48.124-.5 25.313-9.714 55.51-26.844 78.375-16.296 21.75-38.106 36.352-67.126 37.905 4.352-49.843 14.23-100.49 19.28-147.844 20.724-13.842 35.894-18.567 46.25-18.624z"/></svg> \ No newline at end of file
diff --git a/static/img/comments.svg b/static/img/comments.svg
deleted file mode 100644
index 8860c78e..00000000
--- a/static/img/comments.svg
+++ /dev/null
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg fill="#000000" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
- width="800px" height="800px" viewBox="0 0 254.782 254.782"
- xml:space="preserve">
-<g>
- <path d="M23.384,30.344c-33.205,22.27-28.035,55.087-3.307,80.888c5.724,5.974,12.032,10.995,18.701,15.515
- c11.129,7.547,31.201,17.451,43.912,23.635c2.168,1.05,4.328,2.132,6.441,3.249c12.498,6.604,12.32,5.744,11.191-8.347
- c-2.672-33.196,36.268-59.115,37.318-74.839c-0.047-14.875-2.589-26.581-7.045-35.688C112.593-2.032,63.408,3.499,23.384,30.344z"
- />
- <path d="M151.204,100.091c39.886-14.885,114.67,36.044,102.191,81.215c-6.757,24.447-29.922,37.67-51.754,46.772
- c-13.549,5.648-33.401,8.855-49.907,15.039c-13.232,4.962-12.141,4.835-9.474-9.045c4.924-25.621-20.313-49.506-23.098-77.659
- c-1.279-12.903,1.737-26.252,8.585-37.016C133.2,110.81,141.104,103.859,151.204,100.091z"/>
-</g>
-</svg> \ No newline at end of file
diff --git a/static/img/crow.svg b/static/img/crow.svg
deleted file mode 100644
index dca15f56..00000000
--- a/static/img/crow.svg
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
-<svg fill="#000000" width="800px" height="800px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg">
-<title>raven</title>
-<path d="M25.247 3.718c-0.552-1.358-2.036-2.332-3.826-2.332-3.577 0-3.821 2.257-5.685 3.425-6.078-2.157-7.43 9.009-5.138 15.779-0.961 1.992-1.917 4.736-2.733 8.418 3.546 1.913 7.433 2.413 11.37 0.619-0.387-2.353-0.885-4.297-1.371-5.952 1.561-0.788 3.719-0.91 5.398 0.898 0.016-1.916-1.369-2.662-2.824-2.643l-1.291-2.726c2.763-2.851 4.877-6.378 3.822-10.020-0.643-2.399 3.633-3.882 7.635-3.354-1.53-1.321-3.494-1.902-5.357-2.114zM17.077 21.137c0.547-0.465 1.092-0.959 1.62-1.478l1.102 2.329c-0.838 0.135-1.634 0.507-2.13 1.037-0.206-0.677-0.406-1.303-0.592-1.888zM23.139 4.292c-0.228 0-0.413-0.185-0.413-0.413s0.185-0.413 0.413-0.413 0.413 0.185 0.413 0.413c0 0.228-0.185 0.413-0.413 0.413z"></path>
-</svg> \ No newline at end of file
diff --git a/static/img/fediverse.png b/static/img/fediverse.png
deleted file mode 100644
index 2d1f62e8..00000000
--- a/static/img/fediverse.png
+++ /dev/null
Binary files differ
diff --git a/static/img/ghost-window.svg b/static/img/ghost-window.svg
deleted file mode 100644
index 3a4c0a94..00000000
--- a/static/img/ghost-window.svg
+++ /dev/null
@@ -1,59 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg fill="#000000" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
- width="800px" height="800px" viewBox="0 0 588.12 588.121"
- xml:space="preserve">
-<g>
- <g>
- <path d="M248.965,25.335c0-3.672-2.448-7.038-6.12-7.956c-67.014-16.524-135.558,4.59-202.878-4.896
- c-7.344-0.918-14.076,9.792-5.814,13.464c48.042,20.808,119.952-0.612,171.36,2.142c34.272,1.53,26.928,20.808,27.54,48.654
- c-45.9-19.584-95.166-13.77-129.438,26.928c-40.392,48.348-44.676,125.766-36.72,185.13c-26.928,0-48.042-0.612-47.736-2.448
- c2.754-36.72,3.06-73.746,3.672-110.772c0.612-33.66,0.918-67.32,0.612-100.98c0-15.3,4.59-32.742-7.65-43.758l0,0
- c-18.666,16.524-8.262,68.238-8.568,90.882c-1.224,57.834-1.53,115.974-5.814,173.502c-0.306,4.896,4.284,8.262,8.568,8.568
- c74.97,4.59,149.94,0.306,224.91-0.307c3.366,0,7.344-2.447,7.956-6.12C258.757,207.405,249.578,116.217,248.965,25.335z
- M235.195,207.099h-0.306c-25.092,1.53-67.626-3.366-59.364-39.168c2.448-10.404,10.098-18.666,20.196-21.726
- c15.3-4.896,26.622,4.284,40.086,7.65C236.113,171.603,235.808,189.351,235.195,207.099z M125.036,288.801
- c-10.098-7.956-19.278-18.666-20.196-31.824c-0.918-10.098,3.978-19.89,12.546-25.398c9.18-5.508,19.584-2.142,26.928,4.59
- c14.994,13.158,20.196,33.354,25.398,52.02C161.144,288.189,144.313,288.495,125.036,288.801z M234.89,224.847
- c-0.612,11.934-1.53,23.868-2.754,35.802c-3.06,30.906-26.622,28.458-47.736,27.54c-6.732-33.354-33.354-92.718-74.052-68.85
- c-12.24,7.344-18.36,22.338-17.442,36.108c0.918,13.77,8.568,24.786,18.666,33.048c-11.628,0-23.562,0-34.884,0
- c-1.224-53.244,1.53-106.794,25.398-155.448c27.846-56.304,78.948-58.14,131.58-45.594c0.612,16.218,0.918,32.742,1.53,48.96
- c-12.546-7.344-31.212-8.568-43.452-4.896c-14.994,4.284-26.316,17.136-30.294,32.13s1.224,31.518,13.158,41.31
- c16.83,13.77,40.392,14.382,60.588,9.792C234.89,218.421,234.89,221.481,234.89,224.847z"/>
- <path d="M561.392,17.991C540.89-6.183,485.197,5.445,459.493,8.811c-44.981,6.12-93.023,12.24-136.17,26.928
- c-1.836,0.612-3.365,2.448-3.978,4.284c-1.53-5.508-10.71-4.896-11.322,1.836c-7.038,82.62,1.836,164.934,2.754,247.554
- c0,3.672,2.448,7.65,6.426,8.262c80.479,16.523,162.486,11.934,244.188,11.321c3.366,0,7.65-2.447,8.262-6.119
- c9.486-52.938,16.218-106.183,18.054-160.039C588.932,102.447,589.237,51.039,561.392,17.991z M326.077,229.743
- c-1.836-37.638-3.978-74.97-5.508-112.302c0.307,0.918,0.918,1.53,1.836,2.142c71.91,37.332,88.435,108.018,123.318,173.808
- c-18.36-0.306-36.72-0.918-55.08-1.836C335.563,287.883,328.525,281.763,326.077,229.743z M570.571,143.451
- c-0.611,36.72-4.896,73.746-10.098,110.16c-1.836,12.852-3.979,25.398-6.12,37.944c-0.612,4.59-79.866,2.142-87.516,2.142
- c-2.143,0-4.591,0-6.732,0c0-0.306,0-0.918-0.306-1.224c-30.294-70.992-57.223-149.022-133.723-181.152
- c-2.754-1.224-4.896,0.918-5.508,3.366c-0.918-22.644-1.53-45.288-1.224-67.932c0.611,1.224,1.836,2.142,3.672,2.448
- c39.78,5.508,89.658-15.3,129.132-21.114c24.786-3.672,75.276-14.994,97.002,3.06C576.386,52.263,570.878,112.545,570.571,143.451
- z"/>
- <path d="M245.905,351.531c0-2.447-1.53-3.978-3.366-4.896c0.306-4.284-2.142-8.568-7.65-8.874
- c-74.664-1.836-147.492-14.076-221.544,0c-3.672,0.612-6.12,4.59-6.12,8.262c-0.918,74.97-10.404,149.94-6.12,224.91
- c0.306,4.896,3.672,8.874,8.874,8.874c74.97,0,149.94,0,224.91-0.306c4.896,0,8.262-3.979,8.568-8.568
- C248.66,498.105,249.883,424.666,245.905,351.531z M234.89,353.979L234.89,353.979c-0.306,15.606,0.306,68.544-1.53,117.198
- c-39.168,7.956-72.828-11.322-100.368-37.638c-26.928-25.704-35.496-55.08-48.042-87.211
- C134.828,345.411,185.624,353.673,234.89,353.979z M218.06,562.365c-21.114,0-199.206,7.956-200.124-8.262
- c-1.53-24.786-7.956-198.288,16.83-202.878c12.546-2.448,25.092-3.672,37.638-4.284c-0.918,35.802,27.54,73.44,50.49,97.309
- c28.764,29.987,69.462,47.43,110.466,36.413C230.912,524.421,226.934,562.365,218.06,562.365z"/>
- <path d="M563.84,368.361c-0.307-4.59-3.673-8.567-8.263-8.262c-69.462,0.918-138.006,8.874-205.938-11.016
- c-10.404-3.061-14.994,13.157-4.59,16.218c35.189,10.404,69.462,13.77,106.182,14.382c7.344,0,14.382,0,21.726-0.306
- c-5.201,6.731-7.956,14.993-18.972,15.912c-5.508,0.306-9.792,7.649-4.896,11.934c5.508,4.896,11.628,9.18,18.054,12.546
- c-7.65,3.978-15.3,8.568-24.174,9.486c-7.344,0.918-9.486,10.71-1.836,13.158c7.956,2.447,29.682,6.426,21.42,17.747
- c-3.979,5.509-7.65,10.711-11.017,16.524c-41.31,8.262-83.538,12.546-125.153,2.754c-1.225-0.306-2.143-0.306-3.061,0
- c-0.306-2.754-0.306-5.202-0.611-7.344c-4.284-41.616,3.672-84.456,7.344-126.072c0.611-6.12-9.792-7.649-10.71-1.53
- c-12.24,70.074-17.748,137.7-0.307,207.469c9.486,37.943,65.484,33.048,94.86,32.742c51.408,0,125.766,3.06,159.732-43.452
- C602.09,503.001,565.676,410.589,563.84,368.361z M512.126,559.917c-31.213,8.567-65.484,7.956-97.614,8.262
- c-18.054,0-62.73,4.284-75.582-12.546c-9.486-12.546-12.546-40.086-14.076-61.812c43.146,11.322,89.046,5.814,130.662-8.567
- c1.836-0.612,2.754-1.836,3.06-3.061c6.427-9.485,18.36-16.83,19.584-28.458c0.918-7.649-6.731-13.158-15.3-17.136
- c8.874-4.284,17.136-9.18,26.928-10.71c8.263-1.225,5.202-12.853-1.836-13.464c-6.426-0.612-12.239-3.366-18.054-6.732
- c0.612-0.306,1.53-0.918,2.142-1.53c5.814-4.896,7.345-14.075,13.771-18.359c2.448-1.836,3.366-4.284,3.06-6.732
- c5.202-0.306,10.099-0.306,15.301-0.611c14.993-0.612,42.84-9.792,44.37,7.649c2.142,24.48,7.344,48.96,11.016,73.44
- C566.899,508.509,568.124,544.617,512.126,559.917z"/>
- </g>
-</g>
-</svg> \ No newline at end of file
diff --git a/static/img/github.svg b/static/img/github.svg
deleted file mode 100644
index a285af8b..00000000
--- a/static/img/github.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
-<svg fill="#000000" width="800px" height="800px" viewBox="-2.5 0 19 19" xmlns="http://www.w3.org/2000/svg" class="cf-icon-svg"><path d="M9.464 17.178a4.506 4.506 0 0 1-2.013.317 4.29 4.29 0 0 1-2.007-.317.746.746 0 0 1-.277-.587c0-.22-.008-.798-.012-1.567-2.564.557-3.105-1.236-3.105-1.236a2.44 2.44 0 0 0-1.024-1.348c-.836-.572.063-.56.063-.56a1.937 1.937 0 0 1 1.412.95 1.962 1.962 0 0 0 2.682.765 1.971 1.971 0 0 1 .586-1.233c-2.046-.232-4.198-1.023-4.198-4.554a3.566 3.566 0 0 1 .948-2.474 3.313 3.313 0 0 1 .091-2.438s.773-.248 2.534.945a8.727 8.727 0 0 1 4.615 0c1.76-1.193 2.532-.945 2.532-.945a3.31 3.31 0 0 1 .092 2.438 3.562 3.562 0 0 1 .947 2.474c0 3.54-2.155 4.32-4.208 4.548a2.195 2.195 0 0 1 .625 1.706c0 1.232-.011 2.227-.011 2.529a.694.694 0 0 1-.272.587z"/></svg> \ No newline at end of file
diff --git a/static/img/heart-organ.svg b/static/img/heart-organ.svg
deleted file mode 100644
index 0b218639..00000000
--- a/static/img/heart-organ.svg
+++ /dev/null
@@ -1,2 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
-<svg width="800px" height="800px" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path fill="#000000" d="M289.188 22.72c-6.5.162-12.792 2.26-17.594 7.124-.483.488-.916.983-1.344 1.5l-.188-.188c-17.848 22.67-35.71 51.21-45.718 83.094-11.197 35.67-12.8 74.75 5.687 114.78l-16.968 7.845c-14.305-30.974-17.807-61.916-14.53-90.97-8.475 4.99-16.412 11.178-23.688 18.314-22.368-29.2-49.978-56.593-76.5-76-1.404-1.4-2.996-2.655-4.813-3.69-3.378-1.922-6.98-2.86-10.624-3.03-.38-.018-.745-.032-1.125-.03-.38 0-.774.016-1.155.03-5.33.203-10.67 1.93-15.438 4.563-8.72 4.816-16.545 12.77-22.5 22.937-5.954 10.168-9.036 20.86-8.906 30.78.132 9.922 3.896 20.06 12.907 25.19.368.208.753.375 1.126.56l-.126.25c27.298 16.83 63.364 39.376 86.626 67.626-6.582 22.99-7.837 46.735-2.625 67.406 15.303 60.707 62.425 115.8 113.03 150.657 25.304 17.427 51.403 29.785 74.22 35.5 22.816 5.713 41.874 4.546 53.906-2.658 27.152-16.25 45.328-45.636 56.312-80.53-6.824 4.01-14.074 7.32-21.625 9.874-35.777 12.102-78.105 8.732-113.624-10.062-35.52-18.794-64.105-53.724-70.53-103.22l18.53-2.405c5.673 43.69 29.907 72.772 60.75 89.092 30.844 16.32 68.41 19.18 98.875 8.875 30.465-10.304 53.67-32.64 59.033-68.906 4.434-29.985-3.865-70.527-33.844-121.374-19.14 2.18-38.67 6.368-56.626 11.563l-5.188-17.94c12.73-3.682 26.192-6.87 39.875-9.28 2.63.22 5.328.024 8.033-.72 1.02-.28 1.996-.63 2.937-1.03.032-.005.062-.027.094-.03-.005-.008.004-.025 0-.032 8.222-3.55 13.437-11.472 15.906-20.032 2.76-9.57 2.698-20.724-.28-32.125-2.98-11.4-8.362-21.14-15.47-28.06-5.33-5.193-12.214-9.005-19.53-9.44-2.236-.13-4.497.065-6.783.626l-.093-.406c-16.036 5.84-33.733 13.757-51 24.125-8.947 11.378-15.964 22.483-20.5 33.375-7.047 16.92-8.512 33.12-2.438 51.438l-17.72 5.906c-7.46-22.5-5.505-44.333 2.908-64.53 7.425-17.828 19.73-34.594 34.656-51.376l-.156-.157c.622-.507 1.232-1.036 1.812-1.624 7.286-7.377 8.24-18.11 5.844-27.78-2.395-9.67-8.032-19.274-16.313-27.657l-.062-.032c-8.27-8.358-17.777-14.095-27.375-16.532-2.404-.61-4.868-.992-7.344-1.125-.464-.024-.942-.055-1.406-.06-.435-.007-.88-.012-1.313 0zm.656 18.624c.36 0 .755 0 1.156.03 1.07.084 2.28.308 3.656.657 5.51 1.4 12.564 5.332 18.72 11.564 6.154 6.23 10.07 13.385 11.468 19.03 1.398 5.647.36 8.778-1 10.157-1.362 1.38-4.27 2.37-9.78.97-5.512-1.4-12.565-5.362-18.72-11.594-6.155-6.23-10.07-13.385-11.47-19.03-1.398-5.647-.36-8.747 1-10.126.895-.905 2.445-1.648 4.97-1.656zm-208.156 58.78c1.09.03 1.962.298 2.593.657 1.685.96 3.395 3.504 3.47 9.19.075 5.684-1.918 13.503-6.344 21.06-4.426 7.56-10.314 13.22-15.406 16.032-5.092 2.813-8.378 2.615-10.063 1.657-1.684-.96-3.393-3.504-3.468-9.19-.076-5.684 1.916-13.535 6.343-21.093 4.426-7.557 10.314-13.187 15.406-16 2.545-1.406 4.643-2.064 6.31-2.25.418-.046.794-.072 1.157-.062zm109.937 1.282c-13 .075-26.444 5.487-34 14.125 6.848 7.143 13.47 14.445 19.78 21.876 7.846-5.784 16.262-10.73 25.19-14.594 1.14-4.79 2.448-9.514 3.905-14.156.432-1.375.887-2.73 1.344-4.094-4.97-2.18-10.548-3.188-16.22-3.156zm203.125 15.78c.272-.02.57-.02.875 0 1.826.14 4.258 1.214 7.313 4.19 4.072 3.966 8.222 10.9 10.437 19.374 2.215 8.474 2.018 16.63.406 22.22-1.61 5.588-4.068 7.798-5.936 8.31-1.87.514-4.865-.095-8.938-4.06-4.072-3.968-8.223-10.902-10.437-19.376-2.216-8.474-2.02-16.63-.408-22.22 1.612-5.588 4.07-7.798 5.938-8.31.234-.066.478-.106.75-.126z"/></svg> \ No newline at end of file
diff --git a/static/img/mention.svg b/static/img/mention.svg
deleted file mode 100644
index de633fc2..00000000
--- a/static/img/mention.svg
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg fill="#000000" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
- width="800px" height="800px" viewBox="0 0 421.94 421.939"
- xml:space="preserve">
-<g>
- <g>
- <path d="M219.866,163.814c-7.254,0-13.964,2.053-20.125,6.173c-6.173,4.107-11.49,9.412-15.961,15.948
- c-4.488,6.536-7.926,13.851-10.343,21.941c-2.429,8.116-3.627,16.018-3.627,23.765c0,7.974,1.633,14.507,4.9,19.587
- c3.263,5.068,8.872,7.614,16.861,7.614c3.375,0,7.025-1.021,10.89-3.086c3.867-2.054,7.599-4.769,11.238-8.167
- c3.63-3.375,7.122-7.254,10.521-11.602c3.375-4.347,6.401-8.947,9.067-13.774l9.073-50.056c-3.164-2.669-6.425-4.723-9.8-6.173
- C229.167,164.532,224.934,163.814,219.866,163.814z"/>
- <path d="M210.976,0C94.461,0,0,94.453,0,210.964c0,116.514,94.452,210.976,210.975,210.976
- c116.526,0,210.963-94.455,210.963-210.976C421.939,94.453,327.514,0,210.976,0z M345.907,264.283
- c-9.56,9.92-20.675,17.78-33.363,23.575c-12.688,5.801-26.307,8.707-40.814,8.707c-6.059,0-11.667-0.655-16.867-1.987
- c-5.206-1.34-9.565-3.567-13.055-6.72c-3.507-3.146-6.112-7.254-7.812-12.334c-1.693-5.08-2.173-11.361-1.435-18.849h-1.453
- c-3.615,5.062-7.561,10.027-11.794,14.867c-4.218,4.84-8.872,9.121-13.964,12.875c-5.065,3.759-10.637,6.719-16.669,8.887
- c-6.062,2.174-12.703,3.261-19.96,3.261c-5.798,0-11.361-1.273-16.693-3.808c-5.309-2.54-9.905-6.106-13.775-10.694
- c-3.867-4.588-6.953-10.16-9.235-16.693c-2.317-6.527-3.461-13.774-3.461-21.761c0-14.994,2.429-29.559,7.256-43.703
- c4.84-14.147,11.431-26.662,19.768-37.539c8.344-10.884,18.029-19.633,29.03-26.298c11-6.642,22.665-9.968,34.993-9.968
- c8.47,0,15.604,1.273,21.398,3.807c5.795,2.546,11.127,5.86,15.967,9.979l11.234-11.616h25.395l-17.401,98.302
- c-1.934,11.361-1.994,19.588-0.192,24.668c1.825,5.067,5.86,7.614,12.153,7.614c6.281,0,12.466-1.453,18.507-4.359
- c6.029-2.9,11.47-7.362,16.321-13.422c4.815-6.034,8.767-13.66,11.781-22.842c3.026-9.199,4.527-20.083,4.527-32.657
- c0-18.134-3.026-33.617-9.067-46.432c-6.053-12.814-14.327-23.395-24.835-31.729C291.87,99.07,279.469,92.967,265.202,89.1
- c-14.261-3.87-29.621-5.812-46.065-5.812c-18.852,0-36.389,3.387-52.593,10.145c-16.201,6.789-30.288,16.093-42.262,27.935
- c-11.959,11.856-21.329,25.944-28.112,42.262c-6.752,16.321-10.145,34.035-10.145,53.134c0,18.867,2.846,35.788,8.515,50.776
- c5.696,15.012,13.977,27.754,24.86,38.274c10.871,10.521,24.355,18.615,40.448,24.295c16.065,5.682,34.5,8.533,55.304,8.533
- c7.014,0,14.988-0.847,23.947-2.534c8.936-1.693,17.042-4.233,24.296-7.626l11.24,34.828c-9.907,4.84-20.008,8.215-30.288,10.142
- c-10.28,1.934-22.062,2.925-35.371,2.925c-23.452,0-45.156-3.398-65.092-10.154c-19.957-6.779-37.254-16.813-51.885-30.107
- c-14.627-13.307-26.058-29.809-34.272-49.504c-8.227-19.708-12.322-42.502-12.322-68.371c0-26.361,4.708-50.188,14.135-71.469
- c9.428-21.269,22.149-39.403,38.092-54.406c15.964-14.997,34.458-26.526,55.481-34.651c21.056-8.08,43.294-12.142,66.746-12.142
- c22.242,0,42.922,3.204,62.018,9.611c19.107,6.413,35.668,15.597,49.695,27.559c14.027,11.971,25.028,26.613,33.003,43.896
- c7.986,17.3,11.985,36.944,11.985,58.946c0,15.483-2.727,29.991-8.167,43.532C362.942,242.643,355.46,254.375,345.907,264.283z"/>
- </g>
-</g>
-</svg> \ No newline at end of file
diff --git a/static/img/potted-skeleton.svg b/static/img/potted-skeleton.svg
deleted file mode 100644
index deb65179..00000000
--- a/static/img/potted-skeleton.svg
+++ /dev/null
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg fill="#000000" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
- width="800px" height="800px" viewBox="0 0 577.058 577.058"
- xml:space="preserve">
-<g>
- <g>
- <path d="M464.842,96.756c-12.24-5.508-24.479-1.836-36.107,2.754c-3.366,1.224-2.755-15.912-4.591-22.644
- c-3.978-16.524-25.397-31.824-42.533-29.07c-4.896,0.918-31.824,6.426-30.601,14.994c-2.142-14.382-9.792-26.316-18.666-37.332
- c-39.474-49.266-116.892-19.584-143.514,26.01v0.306c-12.852-16.83-38.25-23.562-57.528-13.77
- c-20.808,10.404-26.928,30.294-22.644,51.102c-21.42-2.142-39.168,9.18-44.676,32.13c-3.978,17.442,4.284,39.474,21.42,45.9
- c-37.944,31.212-35.19,96.39,15.606,115.056c3.978,1.53,35.496,7.956,35.19,8.874c-2.754,12.24,0.918,23.562,6.426,33.966
- c11.016,21.114,38.25,22.95,59.976,18.972c-25.398,28.152,19.278,51.714,49.266,54.774c-2.142,5.202-2.754,10.404-2.448,14.688
- c-21.42-1.836-45.9-0.306-62.424,14.383c-1.224,0.918-1.53,3.06-0.612,4.283c1.224,1.53,2.754,3.061,3.978,4.59
- c-0.612,0.612-0.612,1.837,0,2.755c3.06,3.06,6.12,5.813,9.486,8.567c-40.392,55.692,22.032,138.006,87.21,128.214
- c52.938-7.956,115.057-84.762,72.522-132.191c8.874-7.65,20.502-25.704,7.344-34.578c-18.054-11.935-44.064-6.426-64.872-1.53
- c-0.306-3.366-0.918-6.731-2.448-9.792c18.973,1.836,31.519-23.562,21.727-38.556c18.359-4.59,29.069-23.868,24.174-43.146
- c35.189,13.771,81.09-11.628,64.872-48.654c60.282,27.846,108.018-36.108,107.1-96.39
- C517.781,140.208,491.77,109.302,464.842,96.756z M296.542,563.406c-26.622,9.486-55.692-5.814-74.664-23.256
- c-25.704-23.562-31.518-58.752-18.972-90.271c41.922,31.519,105.264,28.152,148.716,0
- C379.774,493.639,341.524,547.494,296.542,563.406z M301.745,417.139c12.546-2.448,25.092-4.591,37.638-5.509
- c19.584-1.224,18.972,13.158,10.71,24.48c-2.754-0.307-5.202,2.448-4.59,5.202c-1.836,1.836-3.979,3.672-6.12,4.896
- c-7.956,4.896-17.136,8.874-26.01,11.322c-35.802,10.098-82.62,6.12-113.526-16.218c-2.448-3.061-4.284-6.12-5.814-9.486
- c18.36-11.016,37.944-11.322,59.058-9.792c2.448,2.448,5.814,4.59,10.71,5.202c0.306,0.612,0.612,1.224,0.918,1.836
- c8.568,9.486,25.704,8.568,32.742-2.448C299.909,423.564,301.132,420.504,301.745,417.139z M404.254,254.04
- c-5.202-2.448-9.486,4.59-4.59,7.956c0.611,0.306,1.224,0.612,1.836,1.224c22.644,41.616-33.66,57.834-63.648,37.638
- c-3.978-2.754-9.792,2.754-6.731,6.731c16.523,21.42,1.836,51.103-26.622,42.229c-6.12-0.918-8.874,7.649-2.754,9.486
- c25.704,3.978,13.464,38.861-11.322,26.01c-4.896-2.448-8.568,3.978-4.284,7.344c1.224,0.918,2.754,1.836,3.978,2.448
- c0,0.306,0,0.306,0.307,0.611c2.754,4.591,4.59,10.099,4.284,15.301c-0.612,0.918-0.918,2.142-0.612,3.365
- c-0.611,2.143-1.53,3.979-3.06,5.509c-6.426,7.038-13.464,3.672-21.114,1.224c-1.836-0.612-3.366,0-4.59,1.224
- c-2.142-0.918-3.672-1.836-5.202-3.365c0-1.837-0.918-3.979-3.366-4.591c-1.836-4.59-1.224-10.098,2.142-16.83
- c0.918-2.142-0.306-4.59-2.754-4.59c-13.158-0.306-25.704-4.283-37.332-10.403c-20.196-10.71-20.196-25.704-4.896-41.311
- c2.448-2.448-0.918-6.731-3.672-4.59l-0.306,0.306c-35.496,2.754-70.38-9.485-62.73-53.244c0.612-2.754-1.224-6.12-4.59-5.814
- c-28.458,2.754-52.938-6.732-68.544-31.212c-18.054-28.458-0.306-56.61,18.972-77.724c0,0,0-0.306,0.306-0.306
- c2.142,0,2.448-2.754,0.918-3.672c-14.994-10.71-23.562-22.032-20.502-41.004c3.06-20.502,21.726-28.152,40.392-23.868
- c3.366,0.918,7.65-2.448,6.12-6.12c-7.038-20.196-2.754-40.086,18.36-48.348c17.748-7.038,32.742,3.672,46.206,13.464
- c2.142,1.53,4.896-0.306,5.508-2.448c1.53,0.612,3.366,0.306,4.284-1.224c41.004-59.364,135.864-59.058,147.797,21.42
- c0.612,3.672,6.427,5.202,8.875,2.448c16.218-27.54,37.025-16.83,62.729,31.824c-0.918,3.978,3.672,8.874,7.65,5.814
- c51.102-36.108,85.067,27.234,85.985,66.708C508.907,240.576,455.968,279.744,404.254,254.04z"/>
- <path d="M335.098,427.849c-30.906,25.703-74.358,25.703-110.466,11.321c8.568-7.038,18.054-10.098,29.376-12.546
- c0.918-0.306,0.918-1.836,0-2.142c-16.524-2.448-28.458,0.611-40.392,12.852c-1.836,1.836-1.836,5.508,0.918,6.732
- c38.556,18.054,93.331,21.114,125.766-11.017C343.972,429.685,338.77,424.788,335.098,427.849z"/>
- <path d="M297.155,89.106C248.806,75.642,179.65,94.614,159.76,143.88c-17.442,43.452,24.48,114.444,74.052,104.04
- c-5.202,10.404-5.814,22.338-1.53,33.66c0.918,2.754,3.672,4.284,6.426,2.754c7.65-4.284,13.158-7.038,17.136-12.24
- c1.224,3.06,2.754,5.814,3.672,9.486c0.918,3.366,5.814,4.284,7.65,0.918c2.448-4.59,4.896-8.874,7.038-13.464
- c6.426,7.344,15.605,11.322,25.397,6.732c9.792-4.59,7.956-15.3,3.061-22.95c40.086,5.508,69.462-25.092,70.992-64.872
- C375.184,142.044,339.382,101.04,297.155,89.106z M298.073,244.248c-1.225,0-2.143,0.918-2.754,1.53
- c-3.061,0.306-5.814,4.59-3.061,7.65c3.672,4.59,8.874,12.24,0.306,14.994c-7.038,2.142-12.852-5.508-15.605-10.404
- c-2.142-3.366-6.732-2.448-7.956,0.918c-1.53,3.978-3.366,7.344-5.202,11.016c-1.836-3.978-3.366-7.65-3.366-12.24
- c-0.306-4.896-7.65-6.12-8.568-1.224c-1.836,10.404-6.12,13.158-13.158,17.136c-3.06-9.18-1.836-18.666,1.836-27.846
- c3.06-1.836,1.53-6.426-2.448-5.814c-59.976,8.874-89.964-79.56-50.184-117.81c28.764-27.54,86.292-31.824,121.176-16.524
- c30.294,13.158,49.266,45.288,53.244,77.112C368.453,227.418,335.71,240.882,298.073,244.248z"/>
- <path d="M227.692,176.622c-1.224-11.322,0.918-22.95,4.59-33.66c1.224-3.366-3.978-5.508-5.814-2.448
- c-11.016,19.278-16.524,59.976,5.508,74.358c3.366,2.142,7.038-1.53,6.12-4.896C235.648,198.348,228.917,188.862,227.692,176.622z
- "/>
- <path d="M303.274,222.216c-3.978-9.486-8.567-18.054-11.016-28.152c-2.448-10.71-1.224-21.42-0.612-32.436
- c0.307-3.672-4.896-3.672-5.813-0.918c-7.956,19.278-6.12,50.49,9.18,66.096C298.073,230.478,305.111,227.112,303.274,222.216z"/>
- </g>
-</g>
-</svg> \ No newline at end of file
diff --git a/static/img/rss.svg b/static/img/rss.svg
deleted file mode 100644
index ffa0ed3f..00000000
--- a/static/img/rss.svg
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!-- Uploaded to: SVG Repo, www.svgrepo.com, Generator: SVG Repo Mixer Tools -->
-<svg fill="#000000" height="800px" width="800px" version="1.1" id="XMLID_290_" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
- viewBox="0 0 24 24" xml:space="preserve">
-<g id="rss">
- <g>
- <path d="M5,23c-2.2,0-4-1.8-4-4s1.8-4,4-4s4,1.8,4,4S7.2,23,5,23z M5,17c-1.1,0-2,0.9-2,2s0.9,2,2,2s2-0.9,2-2S6.1,17,5,17z
- M24,19h-2C22,9.6,14.4,2,5,2V0C15.5,0,24,8.5,24,19z M19,19h-2c0-6.6-5.4-12-12-12V5C12.7,5,19,11.3,19,19z M14,19h-2
- c0-3.9-3.1-7-7-7v-2C10,10,14,14,14,19z"/>
- </g>
-</g>
-</svg> \ No newline at end of file
diff --git a/static/img/thumbs-down.png b/static/img/thumbs-down.png
deleted file mode 100644
index 37fdbafe..00000000
--- a/static/img/thumbs-down.png
+++ /dev/null
Binary files differ
diff --git a/static/js/libra.min.js b/static/js/libra.min.js
deleted file mode 100644
index 720dfcd1..00000000
--- a/static/js/libra.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-let t={selector:"[data-libra]",margin:50,zeroMarginBreakpoint:768,offset:{x:0,y:0},transitionDuration:200,imageCursor:"zoom-in"};class e{constructor(){let e=document.createElement("div");return e.id="libra-overlay",e.classList.add("libra-overlay","libra-hidden"),e.style.transitionDuration=t.transitionDuration+"ms",this.element=e,document.body.appendChild(e),this}show(){this.element.classList.remove("libra-hidden"),this.element.classList.add("libra-visible")}hide(){this.element.classList.remove("libra-visible"),this.element.classList.add("libra-hidden")}}class i{static calculateFinalState(e){let i={},s=t.margin;window.innerWidth<=t.zeroMarginBreakpoint&&(s=0);let n=e.naturalWidth,o=e.naturalHeight,l=n/o,r=window.innerWidth-2*s,a=window.innerHeight-2*s;return i.width=n>r?r:n,i.height=n>r?r/l:o,i.height>a&&(i.height=a,i.width=a*l),i.top=(a-i.height)/2+window.scrollY+s+t.offset.y,i.left=(r-i.width)/2+window.scrollX+s+t.offset.x,i}static transformMatrix(t,e,i){let s=i.width/e.width,n=i.height/e.height,o=e.left+e.width/2,l=e.top+e.height/2,r=i.left+i.width/2,a=i.top+i.height/2;t.style.transform=`matrix(${s}, 0, 0, ${n}, ${r-o}, ${a-l})`}static resetTransformMatrix(t){t.style.transform="matrix(1, 0, 0, 1, 0, 0)"}}class s{isOpen=!1;constructor(t){return this.original=t,this.fetchOriginalPosition(),this.create(t),this}create(e){let i=document.createElement("img");i.src=e.src,i.id=`libra-shadow-${e.id}`,i.classList.add("libra-shadow"),i.style.transitionDuration=t.transitionDuration+"ms",this.element=i,this.positionShadow(),this.placeItself()}fetchOriginalPosition(){let e=this.original.getBoundingClientRect();this.originalPosition={top:e.top+window.scrollY+t.offset.y,left:e.left+window.scrollX+t.offset.x,width:e.width,height:e.height}}positionShadow(){this.element.style.top=this.originalPosition.top+"px",this.element.style.left=this.originalPosition.left+"px",this.element.style.width=this.originalPosition.width+"px",this.element.style.height=this.originalPosition.height+"px"}open(){this.isOpen=!0,this.element.classList.add("open"),this.fetchOriginalPosition(),this.positionShadow(),this.original.style.visibility="hidden",document.body.contains(this.element)||this.placeItself();let t=()=>i.transformMatrix(this.element,this.originalPosition,i.calculateFinalState(this.element));0===this.element.naturalWidth||0===this.element.naturalHeight?this.element.addEventListener("load",t,{once:!0}):t()}close(){this.isOpen=!1,this.element.classList.remove("open"),i.resetTransformMatrix(this.element),setTimeout(()=>{this.original.style.visibility="visible",this.destroyItself()},t.transitionDuration)}placeItself(){document.body.appendChild(this.element)}destroyItself(){document.body.contains(this.element)&&document.body.removeChild(this.element)}}class n{currentImage=null;shadows={};constructor(e){!function t(e,i){for(let s in i)"object"!=typeof i[s]||null===i[s]||Array.isArray(i[s])?e[s]=i[s]:(e[s]||(e[s]={}),t(e[s],i[s]));return e}(t,e),this.initOverlay(),this.initImages(),this.initControls()}initOverlay(){this.overlay=new e,this.overlay.element.addEventListener("click",()=>{this.closeCurrent()})}initImages(){this.images=document.querySelectorAll(t.selector),this.images.forEach(e=>{"IMG"===e.tagName&&(e.id=crypto.randomUUID(),e.style.cursor=t.imageCursor,e.addEventListener("click",()=>this.open(e)))})}initControls(){document.addEventListener("keydown",t=>{("Escape"===t.key||" "===t.key)&&this.closeCurrent()}),document.body.addEventListener("wheel",t=>this.closeCurrent()),document.body.addEventListener("touchmove",t=>this.closeCurrent())}open(t){this.currentImage=t;let e=this.shadows[t.id]||new s(t);this.shadows[t.id]||(this.shadows[t.id]=e),e.open(),this.overlay.show()}close(t){this.currentImage=null,this.shadows[t.id]&&(this.shadows[t.id].close(),this.overlay.hide())}closeCurrent(){this.currentImage&&this.close(this.currentImage)}}export{n as default};
-//# sourceMappingURL=libra.min.js.map
diff --git a/uno.config.js b/uno.config.js
deleted file mode 100644
index 61831a43..00000000
--- a/uno.config.js
+++ /dev/null
@@ -1,55 +0,0 @@
-import { defineConfig, presetWind3, presetAttributify, presetWebFonts } from 'unocss'
-
-const range = (n, fn) => Array.from({ length: n }, (_, i) => fn(i));
-
-function rangeWithPrefixes(n, base, prefixes = ['']) {
- return prefixes.flatMap(prefix =>
- range(n, i => `${prefix}${base}-${i}`)
- );
-}
-
-export default defineConfig({
- content: {
- filesystem: ['./**/*.{html,md,js}'],
- },
- presets: [
- presetAttributify(),
- presetWind3()
- ],
- theme: {
- colors: {
- blockBg: 'var(--block-background-color)',
- bg: 'var(--background-color)',
- textColor: 'var(--text-color)',
- secondary: 'var(--secondary-text-color)'
- },
- fontFamily: {
- mono: ["Courier New", "Courier", "Menlo", "Monaco", "Consolas", "Liberation Mono", "Lucida Console"],
- serif: ["Noto Serif", "Noto Serif SC", "serif"],
- }
- },
- shortcuts: {
- 'small-button': 'bg-blockBg px-2 py-1 no-underline hover:no-underline rounded border border-solid border-bg hover:border-textColor transition',
- 'round-sticker': 'bg-blockBg rounded-full shadow-sm p-4'
- },
- safelist: [
- 'text-sm', 'text-md', 'text-lg', 'text-xl', 'text-2xl', 'text-3xl', 'text-4xl', 'text-5xl',
- 'text-base!', 'md:text-size-lg', 'md:text-size-xl', 'md:text-size-2xl',
-
- 'animate-heart-beat', 'animate-fade-in',
- ...'absolute bottom-full left-1/2 transform -translate-x-1/2 translate-y-1 bg-black/80 text-white px-2.5 py-1.5 rounded text-xs whitespace-nowrap opacity-0 invisible transition-all duration-300 pointer-events-none mb-2 z-1000 group-hover:opacity-100 group-hover:visible group-hover:translate-y-0 dark:bg-white/90 dark:text-black'.split(' '),
-
- ...range(10, i => `opacity-${i * 10}`),
- ...rangeWithPrefixes(30, 'w', ['', 'md:', 'lg:']),
- ...rangeWithPrefixes(30, 'h', ['', 'md:']),
- ...rangeWithPrefixes(30, 'right', ['', 'md:', '-', 'md:-']),
- ...rangeWithPrefixes(30, 'top', ['', '-']),
-
- // special cases
- 'absolute',
- 'w-[calc(25%_-_1rem)]',
- 'w-[calc(50%_-_2rem)]',
- 'w-[10rem]',
- 'sm:w-full',
- ]
-})
diff --git a/uno.css b/uno.css
deleted file mode 100644
index 383f3716..00000000
--- a/uno.css
+++ /dev/null
@@ -1,461 +0,0 @@
-/* layer: properties */
-@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*, ::before, ::after, ::backdrop{--un-ease:initial;}}
-@property --un-outline-style{syntax:"*";inherits:false;initial-value:solid;}
-@property --un-ease{syntax:"*";inherits:false;}
-/* layer: theme */
-:root, :host {
---font-mono: ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;
---spacing: 0.25rem;
---ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
---ease-DEFAULT: cubic-bezier(0.4, 0, 0.2, 1);
---default-transition-timingFunction: cubic-bezier(0.4, 0, 0.2, 1);
---default-transition-duration: 150ms;
---leading-none: 1;
---ease-out: cubic-bezier(0, 0, 0.2, 1);
---font-sans: ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,"Noto Sans",sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol","Noto Color Emoji";
---default-font-family: var(--font-sans);
---default-monoFont-family: var(--font-mono);
-}
-/* layer: base */
-/*
- 1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)
- 2. Remove default margins and padding
- 3. Reset all borders.
-*/
-
-*,
-::after,
-::before,
-::backdrop,
-::file-selector-button {
- box-sizing: border-box; /* 1 */
- margin: 0; /* 2 */
- padding: 0; /* 2 */
- border: 0 solid; /* 3 */
-}
-
-/*
- 1. Use a consistent sensible line-height in all browsers.
- 2. Prevent adjustments of font size after orientation changes in iOS.
- 3. Use a more readable tab size.
- 4. Use the user's configured `sans` font-family by default.
- 5. Use the user's configured `sans` font-feature-settings by default.
- 6. Use the user's configured `sans` font-variation-settings by default.
- 7. Disable tap highlights on iOS.
-*/
-
-html,
-:host {
- line-height: 1.5; /* 1 */
- -webkit-text-size-adjust: 100%; /* 2 */
- tab-size: 4; /* 3 */
- font-family: var(
- --default-font-family,
- ui-sans-serif,
- system-ui,
- sans-serif,
- 'Apple Color Emoji',
- 'Segoe UI Emoji',
- 'Segoe UI Symbol',
- 'Noto Color Emoji'
- ); /* 4 */
- font-feature-settings: var(--default-font-featureSettings, normal); /* 5 */
- font-variation-settings: var(--default-font-variationSettings, normal); /* 6 */
- -webkit-tap-highlight-color: transparent; /* 7 */
-}
-
-/*
- 1. Add the correct height in Firefox.
- 2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)
- 3. Reset the default border style to a 1px solid border.
-*/
-
-hr {
- height: 0; /* 1 */
- color: inherit; /* 2 */
- border-top-width: 1px; /* 3 */
-}
-
-/*
- Add the correct text decoration in Chrome, Edge, and Safari.
-*/
-
-abbr:where([title]) {
- -webkit-text-decoration: underline dotted;
- text-decoration: underline dotted;
-}
-
-/*
- Remove the default font size and weight for headings.
-*/
-
-h1,
-h2,
-h3,
-h4,
-h5,
-h6 {
- font-size: inherit;
- font-weight: inherit;
-}
-
-/*
- Reset links to optimize for opt-in styling instead of opt-out.
-*/
-
-a {
- color: inherit;
- -webkit-text-decoration: inherit;
- text-decoration: inherit;
-}
-
-/*
- Add the correct font weight in Edge and Safari.
-*/
-
-b,
-strong {
- font-weight: bolder;
-}
-
-/*
- 1. Use the user's configured `mono` font-family by default.
- 2. Use the user's configured `mono` font-feature-settings by default.
- 3. Use the user's configured `mono` font-variation-settings by default.
- 4. Correct the odd `em` font sizing in all browsers.
-*/
-
-code,
-kbd,
-samp,
-pre {
- font-family: var(
- --default-monoFont-family,
- ui-monospace,
- SFMono-Regular,
- Menlo,
- Monaco,
- Consolas,
- 'Liberation Mono',
- 'Courier New',
- monospace
- ); /* 1 */
- font-feature-settings: var(--default-monoFont-featureSettings, normal); /* 2 */
- font-variation-settings: var(--default-monoFont-variationSettings, normal); /* 3 */
- font-size: 1em; /* 4 */
-}
-
-/*
- Add the correct font size in all browsers.
-*/
-
-small {
- font-size: 80%;
-}
-
-/*
- Prevent `sub` and `sup` elements from affecting the line height in all browsers.
-*/
-
-sub,
-sup {
- font-size: 75%;
- line-height: 0;
- position: relative;
- vertical-align: baseline;
-}
-
-sub {
- bottom: -0.25em;
-}
-
-sup {
- top: -0.5em;
-}
-
-/*
- 1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)
- 2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)
- 3. Remove gaps between table borders by default.
-*/
-
-table {
- text-indent: 0; /* 1 */
- border-color: inherit; /* 2 */
- border-collapse: collapse; /* 3 */
-}
-
-/*
- Use the modern Firefox focus style for all focusable elements.
-*/
-
-:-moz-focusring {
- outline: auto;
-}
-
-/*
- Add the correct vertical alignment in Chrome and Firefox.
-*/
-
-progress {
- vertical-align: baseline;
-}
-
-/*
- Add the correct display in Chrome and Safari.
-*/
-
-summary {
- display: list-item;
-}
-
-/*
- Make lists unstyled by default.
-*/
-
-ol,
-ul,
-menu {
- list-style: none;
-}
-
-/*
- 1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)
- 2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)
- This can trigger a poorly considered lint error in some tools but is included by design.
-*/
-
-img,
-svg,
-video,
-canvas,
-audio,
-iframe,
-embed,
-object {
- display: block; /* 1 */
- vertical-align: middle; /* 2 */
-}
-
-/*
- Constrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)
-*/
-
-img,
-video {
- max-width: 100%;
- height: auto;
-}
-
-/*
- 1. Inherit font styles in all browsers.
- 2. Remove border radius in all browsers.
- 3. Remove background color in all browsers.
- 4. Ensure consistent opacity for disabled states in all browsers.
-*/
-
-button,
-input,
-select,
-optgroup,
-textarea,
-::file-selector-button {
- font: inherit; /* 1 */
- font-feature-settings: inherit; /* 1 */
- font-variation-settings: inherit; /* 1 */
- letter-spacing: inherit; /* 1 */
- color: inherit; /* 1 */
- border-radius: 0; /* 2 */
- background-color: transparent; /* 3 */
- opacity: 1; /* 4 */
-}
-
-/*
- Restore default font weight.
-*/
-
-:where(select:is([multiple], [size])) optgroup {
- font-weight: bolder;
-}
-
-/*
- Restore indentation.
-*/
-
-:where(select:is([multiple], [size])) optgroup option {
- padding-inline-start: 20px;
-}
-
-/*
- Restore space after button.
-*/
-
-::file-selector-button {
- margin-inline-end: 4px;
-}
-
-/*
- Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)
-*/
-
-::placeholder {
- opacity: 1;
-}
-
-/*
- Set the default placeholder color to a semi-transparent version of the current text color in browsers that do not
- crash when using `color-mix(…)` with `currentcolor`. (https://github.com/tailwindlabs/tailwindcss/issues/17194)
-*/
-
-@supports (not (-webkit-appearance: -apple-pay-button)) /* Not Safari */ or
- (contain-intrinsic-size: 1px) /* Safari 17+ */ {
- ::placeholder {
- color: color-mix(in oklab, currentcolor 50%, transparent);
- }
-}
-
-/*
- Prevent resizing textareas horizontally by default.
-*/
-
-textarea {
- resize: vertical;
-}
-
-/*
- Remove the inner padding in Chrome and Safari on macOS.
-*/
-
-::-webkit-search-decoration {
- -webkit-appearance: none;
-}
-
-/*
- 1. Ensure date/time inputs have the same height when empty in iOS Safari.
- 2. Ensure text alignment can be changed on date/time inputs in iOS Safari.
-*/
-
-::-webkit-date-and-time-value {
- min-height: 1lh; /* 1 */
- text-align: inherit; /* 2 */
-}
-
-/*
- Prevent height from changing on date/time inputs in macOS Safari when the input is set to `display: block`.
-*/
-
-::-webkit-datetime-edit {
- display: inline-flex;
-}
-
-/*
- Remove excess padding from pseudo-elements in date/time inputs to ensure consistent height across browsers.
-*/
-
-::-webkit-datetime-edit-fields-wrapper {
- padding: 0;
-}
-
-::-webkit-datetime-edit,
-::-webkit-datetime-edit-year-field,
-::-webkit-datetime-edit-month-field,
-::-webkit-datetime-edit-day-field,
-::-webkit-datetime-edit-hour-field,
-::-webkit-datetime-edit-minute-field,
-::-webkit-datetime-edit-second-field,
-::-webkit-datetime-edit-millisecond-field,
-::-webkit-datetime-edit-meridiem-field {
- padding-block: 0;
-}
-
-/*
- Remove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)
-*/
-
-:-moz-ui-invalid {
- box-shadow: none;
-}
-
-/*
- Correct the inability to style the border radius in iOS Safari.
-*/
-
-button,
-input:where([type='button'], [type='reset'], [type='submit']),
-::file-selector-button {
- appearance: button;
-}
-
-/*
- Correct the cursor style of increment and decrement buttons in Safari.
-*/
-
-::-webkit-inner-spin-button,
-::-webkit-outer-spin-button {
- height: auto;
-}
-
-/*
- Make elements with the HTML hidden attribute stay hidden by default.
-*/
-
-[hidden]:where(:not([hidden='until-found'])) {
- display: none !important;
-}
-/* layer: shortcuts */
-.container{width:100%;}
-@media (min-width: 40rem){
-.container{max-width:40rem;}
-}
-@media (min-width: 48rem){
-.container{max-width:48rem;}
-}
-@media (min-width: 64rem){
-.container{max-width:64rem;}
-}
-@media (min-width: 80rem){
-.container{max-width:80rem;}
-}
-@media (min-width: 96rem){
-.container{max-width:96rem;}
-}
-/* layer: default */
-.font-mono{font-family:var(--font-mono);}
-.tab\!{-moz-tab-size:4 !important;-o-tab-size:4 !important;tab-size:4 !important;}
-.ma{margin:auto;}
-.text-center{text-align:center;}
-.outline{outline-style:var(--un-outline-style);outline-width:1px;}
-.b,
-.border{border-width:1px;}
-.underline{text-decoration-line:underline;}
-.flex{display:flex;}
-.inline-flex{display:inline-flex;}
-.flex-shrink{flex-shrink:1;}
-.grow{flex-grow:1;}
-.h2{height:calc(var(--spacing) * 2);}
-.h3{height:calc(var(--spacing) * 3);}
-.h4{height:calc(var(--spacing) * 4);}
-.h6{height:calc(var(--spacing) * 6);}
-.ha{height:auto;}
-.block{display:block;}
-.inline-block{display:inline-block;}
-.hidden{display:none;}
-.visible{visibility:visible;}
-.collapse{visibility:collapse;}
-.resize{resize:both;}
-.italic{font-style:italic;}
-.rotate-2{rotate:2deg;}
-.transform{transform:var(--un-rotate-x) var(--un-rotate-y) var(--un-rotate-z) var(--un-skew-x) var(--un-skew-y);}
-.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,--un-gradient-from,--un-gradient-via,--un-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter;transition-timing-function:var(--un-ease, var(--default-transition-timingFunction));transition-duration:var(--un-duration, var(--default-transition-duration));}
-.ease{--un-ease:var(--ease-DEFAULT);transition-timing-function:var(--ease-DEFAULT);}
-.ease-in-out{--un-ease:var(--ease-in-out);transition-timing-function:var(--ease-in-out);}
-.ease-out{--un-ease:var(--ease-out);transition-timing-function:var(--ease-out);}
-.absolute{position:absolute;}
-.fixed{position:fixed;}
-.relative{position:relative;}
-.sticky{position:sticky;}
-.filter{filter:var(--un-blur,) var(--un-brightness,) var(--un-contrast,) var(--un-grayscale,) var(--un-hue-rotate,) var(--un-invert,) var(--un-saturate,) var(--un-sepia,) var(--un-drop-shadow,);}
-.backdrop-filter{-webkit-backdrop-filter:var(--un-backdrop-blur,) var(--un-backdrop-brightness,) var(--un-backdrop-contrast,) var(--un-backdrop-grayscale,) var(--un-backdrop-hue-rotate,) var(--un-backdrop-invert,) var(--un-backdrop-opacity,) var(--un-backdrop-saturate,) var(--un-backdrop-sepia,);backdrop-filter:var(--un-backdrop-blur,) var(--un-backdrop-brightness,) var(--un-backdrop-contrast,) var(--un-backdrop-grayscale,) var(--un-backdrop-hue-rotate,) var(--un-backdrop-invert,) var(--un-backdrop-opacity,) var(--un-backdrop-saturate,) var(--un-backdrop-sepia,);}
-.table{display:table;}
-.border-collapse{border-collapse:collapse;}
-.view-transition-name{view-transition-name:name;} \ No newline at end of file