Change indenting to 1 tab (4 spaces)

It's more readable this way
This commit is contained in:
daudix
2024-02-27 18:38:23 +03:00
parent 9fc6befbf4
commit d0eaa63568
33 changed files with 1208 additions and 1256 deletions

View File

@ -1,10 +0,0 @@
root = true
[*]
end_of_line = lf
charset = utf-8
insert_final_newline = true
[*.{css,scss,html}]
indent_style = space
indent_size = 2

View File

@ -52,9 +52,9 @@ source_url = "https://codeberg.org/daudix/duckquill"
show_feed = true show_feed = true
# Links used in the nav # Links used in the nav
links = [ links = [
{url = "https://codeberg.org/daudix/duckquill", name = "Repo"},
{url = "$BASE_URL/demo", name = "Demo"},
{url = "$BASE_URL/blog", name = "Blog"}, {url = "$BASE_URL/blog", name = "Blog"},
{url = "$BASE_URL/demo", name = "Demo"},
{url = "https://codeberg.org/daudix/duckquill", name = "Repo"},
] ]
[extra.footer] [extra.footer]

View File

@ -1,41 +1,41 @@
.dialog-buttons { .dialog-buttons {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
align-items: baseline; align-items: baseline;
justify-content: space-between; justify-content: space-between;
margin-top: 6rem; margin-top: 6rem;
} }
.inline-button { .inline-button {
background-color: var(--fg-muted-1); background-color: var(--fg-muted-1);
border-radius: var(--rounded-corner); border-radius: var(--rounded-corner);
box-shadow: var(--edge-highlight); box-shadow: var(--edge-highlight);
color: var(--fg-color); color: var(--fg-color);
display: inline-block; display: inline-block;
font-size: 0.9rem; font-size: 0.9rem;
padding: 0.5rem 1rem; padding: 0.5rem 1rem;
text-decoration: none; text-decoration: none;
transition: var(--transition); transition: var(--transition);
&:hover { &:hover {
background-color: var(--fg-muted-2); background-color: var(--fg-muted-2);
text-decoration: none; text-decoration: none;
} }
&:active { &:active {
transform: scale(var(--active)); transform: scale(var(--active));
} }
&.colored { &.colored {
-webkit-backdrop-filter: unset; -webkit-backdrop-filter: unset;
backdrop-filter: unset; backdrop-filter: unset;
background-color: transparent; background-color: transparent;
box-shadow: none; box-shadow: none;
color: var(--primary-color); color: var(--primary-color);
&:hover { &:hover {
background-color: var(--primary-color-alpha); background-color: var(--primary-color-alpha);
box-shadow: var(--edge-highlight); box-shadow: var(--edge-highlight);
} }
} }
} }

View File

@ -1,155 +1,155 @@
section#comments { section#comments {
#comments-wrapper { #comments-wrapper {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: 2rem; gap: 2rem;
margin-top: 2rem; margin-top: 2rem;
} }
.comment { .comment {
display: grid; display: grid;
column-gap: 1rem; column-gap: 1rem;
grid-template-areas: grid-template-areas:
"avatar name " "avatar name "
"avatar time " "avatar time "
"avatar post " "avatar post "
"...... interactions"; "...... interactions";
grid-template-columns: min-content; grid-template-columns: min-content;
justify-items: start; justify-items: start;
&.comment-reply { &.comment-reply {
border-left: 0.25rem solid var(--fg-muted-2); border-left: 0.25rem solid var(--fg-muted-2);
border-radius: 0.2rem; border-radius: 0.2rem;
padding-left: 1rem; padding-left: 1rem;
} }
.avatar-link { .avatar-link {
grid-area: avatar; grid-area: avatar;
height: 4rem; height: 4rem;
position: relative; position: relative;
width: 4rem; width: 4rem;
.avatar { .avatar {
all: unset; all: unset;
background-color: var(--fg-muted-1); background-color: var(--fg-muted-1);
background-position: 50%; background-position: 50%;
background-size: cover; background-size: cover;
border-radius: var(--rounded-corner); border-radius: var(--rounded-corner);
box-shadow: var(--edge-highlight), var(--shadow); box-shadow: var(--edge-highlight), var(--shadow);
height: 100%; height: 100%;
overflow: hidden; overflow: hidden;
transition: var(--transition); transition: var(--transition);
width: 100%; width: 100%;
&:hover { &:hover {
box-shadow: var(--edge-highlight), var(--shadow-raised); box-shadow: var(--edge-highlight), var(--shadow-raised);
transform: rotate(10deg) scale(1.1); transform: rotate(10deg) scale(1.1);
} }
&:active { &:active {
box-shadow: var(--edge-highlight), var(--shadow); box-shadow: var(--edge-highlight), var(--shadow);
transform: scale(var(--active)); transform: scale(var(--active));
} }
} }
} }
.author { .author {
align-items: center; align-items: center;
display: flex; display: flex;
font-weight: bold; font-weight: bold;
gap: 0.25rem; gap: 0.25rem;
grid-area: name; grid-area: name;
.instance { .instance {
background-color: var(--fg-muted-1); background-color: var(--fg-muted-1);
border-radius: 999px; border-radius: 999px;
box-shadow: var(--edge-highlight); box-shadow: var(--edge-highlight);
color: var(--fg-color); color: var(--fg-color);
font-size: 0.8rem; font-size: 0.8rem;
padding: 0.25rem 0.75rem; padding: 0.25rem 0.75rem;
text-decoration: none; text-decoration: none;
transition: var(--transition); transition: var(--transition);
&:hover { &:hover {
background-color: var(--fg-muted-2); background-color: var(--fg-muted-2);
text-decoration: none; text-decoration: none;
} }
&:active { &:active {
transform: scale(var(--active)); transform: scale(var(--active));
} }
&.op { &.op {
-webkit-backdrop-filter: unset; -webkit-backdrop-filter: unset;
backdrop-filter: unset; backdrop-filter: unset;
background-color: transparent; background-color: transparent;
box-shadow: none; box-shadow: none;
color: var(--primary-color); color: var(--primary-color);
&:hover { &:hover {
background-color: var(--primary-color-alpha); background-color: var(--primary-color-alpha);
box-shadow: var(--edge-highlight); box-shadow: var(--edge-highlight);
} }
&::before { &::before {
content: ""; content: "";
margin-inline-end: 0.25rem; margin-inline-end: 0.25rem;
} }
} }
} }
} }
.emoji { .emoji {
all: unset; all: unset;
display: inline; display: inline;
height: 1.5em; height: 1.5em;
vertical-align: middle; vertical-align: middle;
width: 1.5em; width: 1.5em;
} }
time { time {
color: var(--fg-muted-5); color: var(--fg-muted-5);
font-size: 0.8rem; font-size: 0.8rem;
grid-area: time; grid-area: time;
} }
main { main {
grid-area: post; grid-area: post;
p:last-child { p:last-child {
margin-bottom: 0; margin-bottom: 0;
} }
} }
footer { footer {
grid-area: interactions; grid-area: interactions;
margin-top: 1rem; margin-top: 1rem;
.faves { .faves {
background-color: transparent; background-color: transparent;
border-radius: var(--rounded-corner); border-radius: var(--rounded-corner);
color: var(--red-fg); color: var(--red-fg);
display: inline-block; display: inline-block;
font-variant-numeric: tabular-nums; font-variant-numeric: tabular-nums;
padding: 0.5rem 1rem; padding: 0.5rem 1rem;
text-decoration: none; text-decoration: none;
transition: var(--transition); transition: var(--transition);
&:hover { &:hover {
background-color: var(--red-bg); background-color: var(--red-bg);
box-shadow: var(--edge-highlight); box-shadow: var(--edge-highlight);
text-decoration: none; text-decoration: none;
} }
&:active { &:active {
transform: scale(var(--active)); transform: scale(var(--active));
} }
&::before { &::before {
content: "❤️"; content: "❤️";
margin-inline-end: 0.25rem; margin-inline-end: 0.25rem;
} }
} }
} }
} }
} }

View File

@ -1,135 +1,129 @@
.crt { .crt {
margin: 1rem 0 1rem; margin: 1rem 0 1rem;
border-radius: var(--rounded-corner); border-radius: var(--rounded-corner);
background: radial-gradient(rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.85)), background: radial-gradient(rgba(0, 0, 0, 0.7), rgba(0, 0, 0, 0.85)), var(--primary-color);
var(--primary-color); box-shadow: 0 0 0 1px var(--primary-color-alpha), 0 2px 6px 2px var(--primary-color-alpha), 0 4px 24px 4px var(--primary-color-alpha);
box-shadow: 0 0 0 1px var(--primary-color-alpha),
0 2px 6px 2px var(--primary-color-alpha),
0 4px 24px 4px var(--primary-color-alpha);
pre { pre {
color: var(--primary-color); color: var(--primary-color);
padding: 1rem 1rem; padding: 1rem 1rem;
text-shadow: var(--primary-color-alpha) 0 0 4px, text-shadow: var(--primary-color-alpha) 0 0 4px, var(--primary-color) 0 0 12px;
var(--primary-color) 0 0 12px; // Unset some <pre> stuff
// Unset some <pre> stuff background-color: unset;
background-color: unset; box-shadow: unset;
box-shadow: unset; margin: unset;
margin: unset; animation: flicker 250ms alternate infinite;
animation: flicker 250ms alternate infinite;
@keyframes flicker { @keyframes flicker {
from { from {
opacity: 1; opacity: 1;
} }
25% {
opacity: 0.95;
}
50% {
opacity: 0.85;
}
75% {
opacity: 1;
}
to {
opacity: 0.9;
}
}
@media (prefers-reduced-motion) { 25% {
animation: none; opacity: 0.95;
} }
}
50% {
opacity: 0.85;
}
75% {
opacity: 1;
}
to {
opacity: 0.9;
}
}
@media (prefers-reduced-motion) {
animation: none;
}
}
} }
.scanlines { .scanlines {
position: relative; position: relative;
overflow: hidden; overflow: hidden;
&::before { &::before {
animation: scanlines 250ms linear infinite; animation: scanlines 250ms linear infinite;
background: repeating-linear-gradient( background: repeating-linear-gradient(to top, rgba(0, 0, 0, 0.25), rgba(0, 0, 0, 0.25) 1px, transparent 3px, transparent 4px);
to top, content: "";
rgba(0, 0, 0, 0.25), display: block;
rgba(0, 0, 0, 0.25) 1px, height: calc(100% + 0.5rem);
transparent 3px, left: 0;
transparent 4px pointer-events: none;
); position: absolute;
content: ""; top: 0;
display: block; width: 100%;
height: calc(100% + 0.5rem); z-index: 1;
left: 0;
pointer-events: none;
position: absolute;
top: 0;
width: 100%;
z-index: 1;
@keyframes scanlines { @keyframes scanlines {
from { from {
transform: translateY(-0.5rem); transform: translateY(-0.5rem);
} }
to {
transform: translateY(0);
}
}
@media (prefers-reduced-motion) { to {
animation: none; transform: translateY(0);
} }
} }
&::after { @media (prefers-reduced-motion) {
animation: scanline 5s linear infinite; animation: none;
background: linear-gradient( }
to top, }
transparent 0%,
var(--primary-color-alpha) 10%,
transparent 100%
);
bottom: 100%;
content: "";
display: block;
height: 8rem;
left: 0;
pointer-events: none;
position: absolute;
width: 100%;
@keyframes scanline { &::after {
from { animation: scanline 5s linear infinite;
bottom: 100%; background: linear-gradient(to top, transparent 0%, var(--primary-color-alpha) 10%, transparent 100%);
} bottom: 100%;
50% { content: "";
bottom: 100%; display: block;
} height: 8rem;
to { left: 0;
bottom: -8rem; pointer-events: none;
} position: absolute;
} width: 100%;
@media (prefers-reduced-motion) { @keyframes scanline {
animation: none; from {
} bottom: 100%;
} }
50% {
bottom: 100%;
}
to {
bottom: -8rem;
}
}
@media (prefers-reduced-motion) {
animation: none;
}
}
} }
.cursor { .cursor {
animation: cursor-blink 1s infinite; animation: cursor-blink 1s infinite;
@keyframes cursor-blink { @keyframes cursor-blink {
from { from {
opacity: 1; opacity: 1;
} }
50% {
opacity: 0;
}
75% {
opacity: 1;
}
}
@media (prefers-reduced-motion) { 50% {
animation: none; opacity: 0;
} }
75% {
opacity: 1;
}
}
@media (prefers-reduced-motion) {
animation: none;
}
} }

View File

@ -1,12 +1,12 @@
#site-footer { #site-footer {
text-align: center; text-align: center;
padding: 3rem 0 3rem; padding: 3rem 0 3rem;
font-size: 1rem; font-size: 1rem;
margin-top: 4rem; margin-top: 4rem;
details { details {
all: unset; all: unset;
color: var(--fg-muted-5); color: var(--fg-muted-5);
font-size: 0.8rem; font-size: 0.8rem;
} }
} }

View File

@ -1,7 +1,7 @@
#johnvertisement { #johnvertisement {
margin: 0 auto; margin: 0 auto;
display: block; display: block;
width: min(728px, 100vw); width: min(728px, 100vw);
height: min(90px, 12.367vw); height: min(90px, 12.367vw);
border: none; border: none;
} }

View File

@ -1,7 +1,7 @@
.link-page::after { .link-page::after {
content: ""; content: "";
} }
.link-site::after { .link-site::after {
content: ""; content: "";
} }

View File

@ -1,15 +1,15 @@
* { * {
-moz-box-sizing: border-box; -moz-box-sizing: border-box;
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
box-sizing: border-box; box-sizing: border-box;
} }
html { html {
font-size: 16px; font-size: 16px;
scroll-behavior: smooth; scroll-behavior: smooth;
// scrollbar-color: var(--primary-color) transparent; // scrollbar-color: var(--primary-color) transparent;
accent-color: var(--primary-color); accent-color: var(--primary-color);
overflow-wrap: break-word; overflow-wrap: break-word;
} }
// Smaller font size on mobile // Smaller font size on mobile
@ -21,51 +21,51 @@ html {
html, html,
body { body {
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
body { body {
font-family: var(--font-system); font-family: var(--font-system);
line-height: 1.6; line-height: 1.6;
color: var(--fg-color); color: var(--fg-color);
background: var(--bg-color); background: var(--bg-color);
// Put footer at the bottom for short pages, such as the 404 // Put footer at the bottom for short pages, such as the 404
display: grid; display: grid;
min-height: 100vh; min-height: 100vh;
grid-template-rows: auto minmax(auto, 1fr) auto; // Header, stuff, footer grid-template-rows: auto minmax(auto, 1fr) auto; // Header, stuff, footer
} }
// Style text selection to use primary color // Style text selection to use primary color
::selection { ::selection {
color: var(--fg-color); color: var(--fg-color);
background-color: var(--primary-color); background-color: var(--primary-color);
} }
// Make focused anchor not get covered by nav, // Make focused anchor not get covered by nav,
// and flash it with primary color when jumping to it // and flash it with primary color when jumping to it
:target:not(#main) { :target:not(#main) {
scroll-margin-top: 15vh; scroll-margin-top: 15vh;
animation: var(--transition-long) 1s highlight-in-out; animation: var(--transition-long) 1s highlight-in-out;
color: var(--primary-color); color: var(--primary-color);
text-shadow: var(--primary-color-alpha) 0 0 4px, var(--primary-color) 0 0 12px; text-shadow: var(--primary-color-alpha) 0 0 4px, var(--primary-color) 0 0 12px;
@keyframes highlight-in-out { @keyframes highlight-in-out {
50% { 50% {
letter-spacing: 0.125rem; letter-spacing: 0.125rem;
} }
} }
@media (prefers-reduced-motion) { @media (prefers-reduced-motion) {
animation: none; animation: none;
} }
} }
// LAYOUT // LAYOUT
.container { .container {
margin-left: auto; margin-left: auto;
margin-right: auto; margin-right: auto;
width: min(var(--content-width), 90%); width: min(var(--content-width), 90%);
} }
h1, h1,
@ -74,259 +74,259 @@ h3,
h4, h4,
h5, h5,
h6 { h6 {
font-family: var(--font-serif); font-family: var(--font-serif);
font-weight: lighter; font-weight: lighter;
line-height: 1.25; line-height: 1.25;
margin: 3rem 0 1rem; margin: 3rem 0 1rem;
.zola-anchor { .zola-anchor {
display: none; display: none;
visibility: hidden; visibility: hidden;
} }
&:hover .zola-anchor { &:hover .zola-anchor {
display: inline-block; display: inline-block;
text-decoration: none; text-decoration: none;
visibility: visible; visibility: visible;
} }
} }
h1 { h1 {
font-size: 3rem; font-size: 3rem;
font-weight: normal; font-weight: normal;
letter-spacing: -0.15rem; letter-spacing: -0.15rem;
} }
h2 { h2 {
font-size: 2.4rem; font-size: 2.4rem;
letter-spacing: -0.15rem; letter-spacing: -0.15rem;
} }
h3 { h3 {
font-size: 1.5rem; font-size: 1.5rem;
letter-spacing: -0.1rem; letter-spacing: -0.1rem;
} }
h4 { h4 {
font-size: 1.25rem; font-size: 1.25rem;
letter-spacing: -0.05rem; letter-spacing: -0.05rem;
} }
h5 { h5 {
font-size: 1rem; font-size: 1rem;
letter-spacing: -0.05rem; letter-spacing: -0.05rem;
} }
h6 { h6 {
font-size: 0.75rem; font-size: 0.75rem;
} }
a { a {
color: var(--primary-color); color: var(--primary-color);
font-weight: bold; font-weight: bold;
&:hover { &:hover {
text-decoration: underline wavy; text-decoration: underline wavy;
-webkit-text-decoration: underline wavy; -webkit-text-decoration: underline wavy;
} }
} }
small { small {
color: var(--fg-muted-5); color: var(--fg-muted-5);
font-size: 0.8rem; font-size: 0.8rem;
} }
dl { dl {
padding: 0; padding: 0;
dt { dt {
padding: 0; padding: 0;
margin-top: 1rem; margin-top: 1rem;
font-size: 1rem; font-size: 1rem;
font-weight: bold; font-weight: bold;
} }
dd { dd {
padding: 0; padding: 0;
margin-bottom: 1rem; margin-bottom: 1rem;
} }
} }
hr { hr {
border: 0; border: 0;
border-top: 1px solid var(--fg-muted-2); border-top: 1px solid var(--fg-muted-2);
margin: 2rem auto; margin: 2rem auto;
width: 100%; width: 100%;
} }
.blog-list hr:last-of-type { .blog-list hr:last-of-type {
display: none; display: none;
} }
blockquote { blockquote {
border-left: 0.25rem solid var(--primary-color); border-left: 0.25rem solid var(--primary-color);
border-radius: 0.2rem; border-radius: 0.2rem;
color: var(--fg-muted-5); color: var(--fg-muted-5);
margin: 0; margin: 0;
padding: 0 0.75rem; padding: 0 0.75rem;
& & { & & {
border-radius: 0; border-radius: 0;
} }
} }
abbr { abbr {
cursor: help; cursor: help;
text-decoration: underline; text-decoration: underline;
-webkit-text-decoration: underline; -webkit-text-decoration: underline;
} }
aside { aside {
background-color: var(--primary-color-alpha); background-color: var(--primary-color-alpha);
border-radius: var(--rounded-corner); border-radius: var(--rounded-corner);
box-shadow: var(--edge-highlight); box-shadow: var(--edge-highlight);
float: right; float: right;
margin-inline-start: 1rem; margin-inline-start: 1rem;
padding: 1rem; padding: 1rem;
width: 30%; width: 30%;
@media only screen and (max-width: 720px) { @media only screen and (max-width: 720px) {
& { & {
width: 100%; width: 100%;
float: none; float: none;
margin-inline-start: 0; margin-inline-start: 0;
} }
} }
} }
// CODE // CODE
pre, pre,
code, code,
kbd { kbd {
font-family: var(--font-monospace); font-family: var(--font-monospace);
} }
code:not(pre code) { code:not(pre code) {
background-color: var(--fg-muted-2); background-color: var(--fg-muted-2);
border-radius: var(--rounded-corner-small); border-radius: var(--rounded-corner-small);
box-shadow: var(--edge-highlight); box-shadow: var(--edge-highlight);
color: var(--red-fg); color: var(--red-fg);
padding: 0.125rem 0.375rem; padding: 0.125rem 0.375rem;
} }
pre { pre {
border-radius: var(--rounded-corner); border-radius: var(--rounded-corner);
box-shadow: var(--edge-highlight), var(--shadow); box-shadow: var(--edge-highlight), var(--shadow);
line-height: normal; // Unset line height line-height: normal; // Unset line height
margin: 1rem 0 1rem; margin: 1rem 0 1rem;
max-width: 100vw; max-width: 100vw;
overflow: auto; overflow: auto;
padding: 1rem; padding: 1rem;
table td { table td {
padding: 0; padding: 0;
border: none; border: none;
} }
// The line number cells // The line number cells
table td:nth-of-type(1) { table td:nth-of-type(1) {
text-align: center; text-align: center;
user-select: none; user-select: none;
} }
mark { mark {
background-color: var(--fg-muted-1); background-color: var(--fg-muted-1);
border-radius: 0; // Unset code block border radius border-radius: 0; // Unset code block border radius
color: var(--fg-color); // Unset mark color from primary color to text color color: var(--fg-color); // Unset mark color from primary color to text color
display: block; display: block;
padding: 0; // Unset mark padding padding: 0; // Unset mark padding
} }
table { table {
width: 100%; width: 100%;
border-collapse: collapse; border-collapse: collapse;
} }
// The line numbers already provide some kind of left/right padding // The line numbers already provide some kind of left/right padding
&[data-linenos] { &[data-linenos] {
padding: 1rem 0; padding: 1rem 0;
} }
} }
kbd { kbd {
background-color: var(--fg-muted-2); background-color: var(--fg-muted-2);
border-radius: var(--rounded-corner-small); border-radius: var(--rounded-corner-small);
box-shadow: inset 0 -2px 0 var(--fg-muted-2), 0 -1px 0 var(--fg-muted-3); box-shadow: inset 0 -2px 0 var(--fg-muted-2), 0 -1px 0 var(--fg-muted-3);
cursor: pointer; cursor: pointer;
display: inline-block; display: inline-block;
font-size: 0.8rem; font-size: 0.8rem;
line-height: normal; line-height: normal;
padding: 0.125rem 0.375rem; padding: 0.125rem 0.375rem;
transition: var(--transition); transition: var(--transition);
// Small nice thingy, keys can be pressed! // Small nice thingy, keys can be pressed!
&:active { &:active {
background-color: var(--fg-muted-3); background-color: var(--fg-muted-3);
box-shadow: inset 0 1px 0 var(--fg-muted-2); box-shadow: inset 0 1px 0 var(--fg-muted-2);
transform: translateY(2px); transform: translateY(2px);
} }
} }
mark { mark {
background-color: var(--primary-color-alpha); background-color: var(--primary-color-alpha);
border-radius: var(--rounded-corner-small); border-radius: var(--rounded-corner-small);
box-shadow: var(--edge-highlight); box-shadow: var(--edge-highlight);
color: var(--primary-color); color: var(--primary-color);
padding: 0.125rem 0.375rem; padding: 0.125rem 0.375rem;
} }
figcaption { figcaption {
display: block; display: block;
text-align: center; text-align: center;
color: var(--fg-muted-4); color: var(--fg-muted-4);
font-size: 0.8rem; font-size: 0.8rem;
} }
details { details {
background-color: var(--fg-muted-1); background-color: var(--fg-muted-1);
border-radius: var(--rounded-corner); border-radius: var(--rounded-corner);
padding: 1rem; padding: 1rem;
& > summary { &>summary {
cursor: pointer; cursor: pointer;
} }
} }
// TABLES // TABLES
table { table {
border-collapse: collapse; border-collapse: collapse;
border-radius: var(--rounded-corner); border-radius: var(--rounded-corner);
box-shadow: var(--edge-highlight); box-shadow: var(--edge-highlight);
overflow: hidden; overflow: hidden;
table-layout: fixed; table-layout: fixed;
width: 100%; width: 100%;
th { th {
font-weight: bold; font-weight: bold;
} }
th, th,
td { td {
padding: 0.5rem 1rem; padding: 0.5rem 1rem;
} }
tr { tr {
&:nth-child(even) { &:nth-child(even) {
background-color: var(--fg-muted-1); background-color: var(--fg-muted-1);
} }
th { th {
background-color: var(--fg-muted-2); background-color: var(--fg-muted-2);
} }
} }
} }
td, td,
th { th {
padding: 0; padding: 0;
} }

View File

@ -1,36 +1,35 @@
img, img,
video { video {
border-radius: var(--rounded-corner); border-radius: var(--rounded-corner);
box-shadow: var(--shadow); box-shadow: var(--shadow);
display: block; display: block;
margin: 1rem auto; margin: 1rem auto;
max-width: 100%; max-width: 100%;
&.full { &.full {
width: 100%; width: 100%;
} }
&.pixels { &.pixels {
image-rendering: pixelated; image-rendering: pixelated;
} }
&.transparent { &.transparent {
border-radius: 0; border-radius: 0;
box-shadow: none; box-shadow: none;
} }
} }
img { img {
transition: var(--transition-longer); transition: var(--transition-longer);
&:not(.no-hover) { &:not(.no-hover) {
cursor: zoom-in; cursor: zoom-in;
} }
&:not(.no-hover):hover { &:not(.no-hover):hover {
border-radius: 0; border-radius: 0;
box-shadow: var(--shadow-raised); box-shadow: var(--shadow-raised);
transform: scale(1.1); transform: scale(1.1);
} }
} }

View File

@ -1,100 +1,100 @@
#site-nav { #site-nav {
-webkit-backdrop-filter: var(--blur); -webkit-backdrop-filter: var(--blur);
backdrop-filter: var(--blur); backdrop-filter: var(--blur);
background-color: var(--nav-bg); background-color: var(--nav-bg);
border-radius: 26px; border-radius: 26px;
box-shadow: var(--edge-highlight), 0px 12px 24px -16px rgba(0, 0, 0, 0.5); box-shadow: var(--edge-highlight), 0px 12px 24px -16px rgba(0, 0, 0, 0.5);
margin: 1rem auto; margin: 1rem auto;
max-width: min(calc(var(--content-width) + 10rem), 90%); max-width: min(calc(var(--content-width) + 10rem), 90%);
position: sticky; position: sticky;
top: 1rem; top: 1rem;
z-index: 999; z-index: 999;
nav { nav {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
padding: 0.5rem; padding: 0.5rem;
ul { ul {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
gap: 0.25rem; gap: 0.25rem;
justify-content: center; justify-content: center;
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
li { li {
list-style: none; list-style: none;
display: inline-flex; display: inline-flex;
} }
a { a {
border-radius: 999px; border-radius: 999px;
color: var(--fg-muted-4); color: var(--fg-muted-4);
padding: 0.325rem 0.75rem; padding: 0.325rem 0.75rem;
text-decoration: none; text-decoration: none;
transition: var(--transition); transition: var(--transition);
&:hover { &:hover {
background-color: var(--fg-muted-1); background-color: var(--fg-muted-1);
box-shadow: var(--edge-highlight); box-shadow: var(--edge-highlight);
color: var(--primary-color); color: var(--primary-color);
text-decoration: none; text-decoration: none;
} }
&:active { &:active {
transform: scale(var(--active)); transform: scale(var(--active));
} }
} }
#main-content { #main-content {
background: var(--bg-color); background: var(--bg-color);
position: absolute; position: absolute;
transform: translateY(-200%); transform: translateY(-200%);
z-index: 999; z-index: 999;
&:focus { &:focus {
transform: translateY(0); transform: translateY(0);
} }
} }
#home { #home {
position: relative; position: relative;
margin-right: 0.625rem; margin-right: 0.625rem;
&::after { &::after {
background-color: var(--fg-muted-2); background-color: var(--fg-muted-2);
content: ""; content: "";
height: 110%; height: 110%;
position: absolute; position: absolute;
right: -0.5rem; right: -0.5rem;
top: 0; top: 0;
width: 1px; width: 1px;
} }
a { a {
font-weight: 800; font-weight: 800;
color: var(--fg-muted-5); color: var(--fg-muted-5);
&:hover { &:hover {
color: var(--primary-color); color: var(--primary-color);
} }
} }
} }
#feed a { #feed a {
padding: 0.325rem 0.625rem; padding: 0.325rem 0.625rem;
svg { svg {
vertical-align: -0.125em; vertical-align: -0.125em;
} }
span { span {
display: none; display: none;
} }
} }
} }
} }

View File

@ -1,7 +1,7 @@
#not-found { #not-found {
width: 100%; width: 100%;
padding-top: 1rem; padding-top: 1rem;
padding-right: 35%; padding-right: 35%;
padding-left: 35%; padding-left: 35%;
padding-bottom: 1rem; padding-bottom: 1rem;
} }

View File

@ -1,34 +1,34 @@
#post-nav { #post-nav {
display: flex; display: flex;
.post-nav-item { .post-nav-item {
width: 50%; width: 50%;
text-decoration: none; text-decoration: none;
&:hover .post-title { &:hover .post-title {
color: var(--primary-color); color: var(--primary-color);
} }
&:nth-child(2n + 1) { &:nth-child(2n + 1) {
padding-left: 0; padding-left: 0;
padding-right: 1rem; padding-right: 1rem;
} }
&:nth-child(2n) { &:nth-child(2n) {
text-align: right; text-align: right;
padding-left: 1rem; padding-left: 1rem;
padding-right: 0; padding-right: 0;
} }
.nav-arrow { .nav-arrow {
font-weight: normal; font-weight: normal;
color: var(--fg-muted-5); color: var(--fg-muted-5);
margin-bottom: 0.5rem; margin-bottom: 0.5rem;
} }
.post-title { .post-title {
color: var(--fg-color); color: var(--fg-color);
transition: var(--transition); transition: var(--transition);
} }
} }
} }

View File

@ -1,14 +1,14 @@
#qrcode { #qrcode {
background-color: white; background-color: white;
float: right; float: right;
height: 155px; height: 155px;
margin: 3rem 0 0 1rem; margin: 3rem 0 0 1rem;
padding: 15px; padding: 15px;
width: 155px; width: 155px;
@media only screen and (max-width: 720px) { @media only screen and (max-width: 720px) {
& { & {
display: none; display: none;
} }
} }
} }

View File

@ -1,35 +1,35 @@
.statement-container { .statement-container {
margin: 1rem 0 1rem; margin: 1rem 0 1rem;
padding: 1rem 1rem 0.5rem 1rem; padding: 1rem 1rem 0.5rem 1rem;
border-radius: var(--rounded-corner); border-radius: var(--rounded-corner);
box-shadow: var(--edge-highlight); box-shadow: var(--edge-highlight);
* { * {
margin: 0; margin: 0;
} }
p, p,
ul, ul,
ol { ol {
margin: 0.5rem 0 0.5rem; margin: 0.5rem 0 0.5rem;
} }
.big { .big {
font-size: 1.5rem; font-size: 1.5rem;
} }
&.archive { &.archive {
background-color: var(--purple-bg); background-color: var(--purple-bg);
color: var(--purple-fg); color: var(--purple-fg);
} }
&.disclaimer { &.disclaimer {
background-color: var(--red-bg); background-color: var(--red-bg);
color: var(--red-fg); color: var(--red-fg);
} }
&.trigger { &.trigger {
background-color: var(--yellow-bg); background-color: var(--yellow-bg);
color: var(--yellow-fg); color: var(--yellow-fg);
} }
} }

View File

@ -1,35 +1,35 @@
.tags { .tags {
list-style: none; list-style: none;
padding: 0; padding: 0;
display: inline-block; display: inline-block;
li { li {
display: inline-block; display: inline-block;
margin: 0 0.25rem 0.5rem 0; margin: 0 0.25rem 0.5rem 0;
transition: var(--transition); transition: var(--transition);
&:active { &:active {
transform: scale(var(--active)); transform: scale(var(--active));
} }
} }
.tag { .tag {
background-color: var(--fg-muted-1); background-color: var(--fg-muted-1);
border-radius: 999px; border-radius: 999px;
box-shadow: var(--edge-highlight); box-shadow: var(--edge-highlight);
color: var(--fg-color); color: var(--fg-color);
padding: 0.25rem 0.75rem; padding: 0.25rem 0.75rem;
text-decoration: none; text-decoration: none;
transition: var(--transition); transition: var(--transition);
&:hover { &:hover {
color: var(--primary-color); color: var(--primary-color);
background-color: var(--primary-color-alpha); background-color: var(--primary-color-alpha);
text-decoration: none; text-decoration: none;
} }
&::before { &::before {
content: "#"; content: "#";
} }
} }
} }

View File

@ -1,71 +1,62 @@
:root { :root {
// COLORS // COLORS
--bg-color: var(--bg-color-l); --bg-color: var(--bg-color-l);
--fg-color: rgba(0, 0, 0, 0.8); --fg-color: rgba(0, 0, 0, 0.8);
--fg-muted-1: rgba(0, 0, 0, 0.05); --fg-muted-1: rgba(0, 0, 0, 0.05);
--fg-muted-2: rgba(0, 0, 0, 0.1); --fg-muted-2: rgba(0, 0, 0, 0.1);
--fg-muted-3: rgba(0, 0, 0, 0.2); --fg-muted-3: rgba(0, 0, 0, 0.2);
--fg-muted-4: rgba(0, 0, 0, 0.5); --fg-muted-4: rgba(0, 0, 0, 0.5);
--fg-muted-5: rgba(0, 0, 0, 0.6); --fg-muted-5: rgba(0, 0, 0, 0.6);
--nav-bg: rgba(242, 242, 242, 0.7); --nav-bg: rgba(242, 242, 242, 0.7);
--orange-bg: rgba(255, 120, 0, 0.1); --orange-bg: rgba(255, 120, 0, 0.1);
--orange-fg: rgb(255, 120, 0); --orange-fg: rgb(255, 120, 0);
--purple-bg: rgba(145, 65, 172, 0.1); --purple-bg: rgba(145, 65, 172, 0.1);
--purple-fg: rgb(145, 65, 172); --purple-fg: rgb(145, 65, 172);
--red-bg: rgba(224, 27, 36, 0.1); --red-bg: rgba(224, 27, 36, 0.1);
--red-fg: rgb(224, 27, 36); --red-fg: rgb(224, 27, 36);
--yellow-bg: rgba(156, 110, 3, 0.1); --yellow-bg: rgba(156, 110, 3, 0.1);
--yellow-fg: rgb(156, 110, 3); --yellow-fg: rgb(156, 110, 3);
// VARIABLES // VARIABLES
--active: 0.9; --active: 0.9;
--bg-color-d: linear-gradient(rgba(0, 0, 0, 0.9), rgba(0, 0, 0, 0.9)), --bg-color-d: linear-gradient(rgba(0, 0, 0, 0.9), rgba(0, 0, 0, 0.9)), var(--primary-color);
var(--primary-color); --bg-color-l: linear-gradient(rgba(255, 255, 255, 0.8), rgba(255, 255, 255, 0.8)), var(--primary-color);
--bg-color-l: linear-gradient( --blur: saturate(180%) blur(10px);
rgba(255, 255, 255, 0.8), --content-width: 720px;
rgba(255, 255, 255, 0.8) --edge-highlight: inset 0 1px 0 rgba(255, 255, 255, 0.1);
), --font-monospace: ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, Consolas, "DejaVu Sans Mono", monospace;
var(--primary-color); --font-serif: Rockwell, "Rockwell Nova", "Roboto Slab", "DejaVu Serif", "Sitka Small", serif;
--blur: saturate(180%) blur(10px); --font-system: system-ui, sans-serif;
--content-width: 720px; --rounded-corner-small: 8px;
--edge-highlight: inset 0 1px 0 rgba(255, 255, 255, 0.1); --rounded-corner: 12px;
--font-monospace: ui-monospace, "Cascadia Code", "Source Code Pro", Menlo, --shadow-raised: 0 0 0 1px rgba(0, 0, 0, 0.06), 0 2px 6px 2px rgba(0, 0, 0, 0.14), 0 4px 12px 4px rgba(0, 0, 0, 0.06);
Consolas, "DejaVu Sans Mono", monospace; --shadow: 0 0 0 1px rgba(0, 0, 0, 0.03), 0 1px 3px 1px rgba(0, 0, 0, 0.07), 0 2px 6px 2px rgba(0, 0, 0, 0.03);
--font-serif: Rockwell, "Rockwell Nova", "Roboto Slab", "DejaVu Serif", --transition-bezier: 350ms cubic-bezier(0.17, 0.89, 0.32, 1.28);
"Sitka Small", serif; --transition-long: 800ms;
--font-system: system-ui, sans-serif; --transition-longer: 400ms;
--rounded-corner-small: 8px; --transition: 200ms;
--rounded-corner: 12px;
--shadow-raised: 0 0 0 1px rgba(0, 0, 0, 0.06),
0 2px 6px 2px rgba(0, 0, 0, 0.14), 0 4px 12px 4px rgba(0, 0, 0, 0.06);
--shadow: 0 0 0 1px rgba(0, 0, 0, 0.03), 0 1px 3px 1px rgba(0, 0, 0, 0.07),
0 2px 6px 2px rgba(0, 0, 0, 0.03);
--transition-bezier: 350ms cubic-bezier(0.17, 0.89, 0.32, 1.28);
--transition-long: 800ms;
--transition-longer: 400ms;
--transition: 200ms;
} }
@media (prefers-color-scheme: dark) { @media (prefers-color-scheme: dark) {
:root { :root {
color-scheme: dark; color-scheme: dark;
// COLORS // COLORS
--bg-color: var(--bg-color-d); --bg-color: var(--bg-color-d);
--fg-color: rgb(255, 255, 255); --fg-color: rgb(255, 255, 255);
--fg-muted-1: rgba(255, 255, 255, 0.05); --fg-muted-1: rgba(255, 255, 255, 0.05);
--fg-muted-2: rgba(255, 255, 255, 0.1); --fg-muted-2: rgba(255, 255, 255, 0.1);
--fg-muted-3: rgba(255, 255, 255, 0.2); --fg-muted-3: rgba(255, 255, 255, 0.2);
--fg-muted-4: rgba(255, 255, 255, 0.5); --fg-muted-4: rgba(255, 255, 255, 0.5);
--fg-muted-5: rgba(255, 255, 255, 0.6); --fg-muted-5: rgba(255, 255, 255, 0.6);
--nav-bg: rgba(25, 25, 25, 0.7); --nav-bg: rgba(25, 25, 25, 0.7);
--orange-bg: rgba(255, 190, 111, 0.1); --orange-bg: rgba(255, 190, 111, 0.1);
--orange-fg: rgb(255, 190, 111); --orange-fg: rgb(255, 190, 111);
--purple-bg: rgba(220, 138, 221, 0.1); --purple-bg: rgba(220, 138, 221, 0.1);
--purple-fg: rgb(220, 138, 221); --purple-fg: rgb(220, 138, 221);
--red-bg: rgba(226, 97, 81, 0.1); --red-bg: rgba(226, 97, 81, 0.1);
--red-fg: rgb(246, 97, 81); --red-fg: rgb(246, 97, 81);
--yellow-bg: rgba(248, 228, 92, 0.1); --yellow-bg: rgba(248, 228, 92, 0.1);
--yellow-fg: rgb(248, 228, 92); --yellow-fg: rgb(248, 228, 92);
} }
} }

View File

@ -2,8 +2,8 @@
{% block content %} {% block content %}
<picture> <picture>
<source srcset="{{ get_url(path='404.png') }}" media="(prefers-reduced-motion: reduce)"></source> <source srcset="{{ get_url(path='404.png') }}" media="(prefers-reduced-motion: reduce)"></source>
<img id="not-found" class="pixels transparent no-hover" srcset="{{ get_url(path='404.gif') }}"> <img id="not-found" class="pixels transparent no-hover" srcset="{{ get_url(path='404.gif') }}">
</picture> </picture>
<h1>Page Not Found</h1> <h1>Page Not Found</h1>
@ -11,7 +11,7 @@
<p>The requested page could not be found. If you feel this is not normal, then you can create an issue on the issue tracker.</p> <p>The requested page could not be found. If you feel this is not normal, then you can create an issue on the issue tracker.</p>
<p class="dialog-buttons"> <p class="dialog-buttons">
<a onclick="window.history.go(-1)" class="inline-button">Go Back</a> <a onclick="window.history.go(-1)" class="inline-button">Go Back</a>
<a href="{{ config.extra.issues_url }}">File an Issue</a> <a href="{{ config.extra.issues_url }}">File an Issue</a>
</p> </p>
{% endblock content %} {% endblock content %}

View File

@ -2,11 +2,11 @@
<html lang="en"> <html lang="en">
{% include "partials/head.html" ignore missing -%} {% include "partials/head.html" ignore missing -%}
<body> <body>
{% include "partials/nav.html" ignore missing -%} {% include "partials/nav.html" ignore missing -%}
<div id="main" class="container"> <div id="main" class="container">
{% block custom %}{%- endblock -%} {% block custom %}{%- endblock -%}
{% block content %}{%- endblock -%} {% block content %}{%- endblock -%}
</div> </div>
{% include "partials/footer.html" ignore missing -%} {% include "partials/footer.html" ignore missing -%}
</body> </body>
</html> </html>

View File

@ -4,98 +4,96 @@
<h1>{{ page.title }}</h1> <h1>{{ page.title }}</h1>
{%- if page.date %} {%- if page.date %}
<small> <small>
<time datetime='{{ page.date | date(format='%+') }}' pubdate> <time datetime="{{ page.date | date(format=' %+') }}" pubdate>
{{- page.date | date(format=config.extra.date_format) -}} {{- page.date | date(format=config.extra.date_format) -}}
</time> </time>
{%- if page.authors %} {%- if page.authors %}
<span></span> <span></span>
<span>Author: {{ page.authors[0] }}</span> <span>Author: {{ page.authors[0] }}</span>
{%- endif %} {%- endif %}
{%- if page.taxonomies %} {%- if page.taxonomies %}
{%- for name, taxon in page.taxonomies %} {%- for name, taxon in page.taxonomies %}
<span></span> <span></span>
<ul class="tags"> <ul class="tags">
{%-for item in taxon %} {%-for item in taxon %}
<li> <li>
<a class="tag" href="{{ get_taxonomy_url(kind=name, name=item) }}">{{ item }}</a> <a class="tag" href="{{ get_taxonomy_url(kind=name, name=item) }}">{{ item }}</a>
</li> </li>
{%- endfor %} {%- endfor %}
</ul> </ul>
{%- endfor %} {%- endfor %}
{%- endif %} {%- endif %}
</small> </small>
{%- endif %} {%- endif %}
{% if page.extra.archive %} {% if page.extra.archive %}
<div class="statement-container archive"> <div class="statement-container archive">
<strong class="big">⚠ Archived</strong> <strong class="big">⚠ Archived</strong>
{{ page.extra.archive | markdown | safe }} {{ page.extra.archive | markdown | safe }}
</div> </div>
{% endif %} {% endif %}
{% if page.extra.trigger %} {% if page.extra.trigger %}
<div class="statement-container trigger"> <div class="statement-container trigger">
<strong class="big">⚠ Trigger Warning</strong> <strong class="big">⚠ Trigger Warning</strong>
{{ page.extra.trigger | markdown | safe }} {{ page.extra.trigger | markdown | safe }}
</div> </div>
{% endif %} {% endif %}
{% if page.extra.disclaimer %} {% if page.extra.disclaimer %}
<div class="statement-container disclaimer"> <div class="statement-container disclaimer">
<strong class="big">⚠ Disclaimer(s)</strong> <strong class="big">⚠ Disclaimer(s)</strong>
{{ page.extra.disclaimer | markdown | safe }} {{ page.extra.disclaimer | markdown | safe }}
</div> </div>
{% endif %} {% endif %}
{% if page.extra.toc %} {% if page.extra.toc %}
<h2> <h2>Table of Contents</h2>
Table of Contents <ul>
</h2> {% for h1 in page.toc %}
<ul> <li>
{% for h1 in page.toc %} <a href="{{ h1.permalink | safe }}">{{ h1.title }}</a>
<li> {% if h1.children %}
<a href="{{ h1.permalink | safe }}">{{ h1.title }}</a> <ul>
{% if h1.children %} {% for h2 in h1.children %}
<ul> <li>
{% for h2 in h1.children %} <a href="{{ h2.permalink | safe }}">{{ h2.title }}</a>
<li> </li>
<a href="{{ h2.permalink | safe }}">{{ h2.title }}</a> {% endfor %}
</li> </ul>
{% endfor %} {% endif %}
</ul> </li>
{% endif %} {% endfor %}
</li> </ul>
{% endfor %}
</ul>
{% endif %} {% endif %}
{{ page.content | safe }} {{ page.content | safe }}
{% if page.extra.comments.id %} {% if page.extra.comments.id %}
{% include "partials/comments.html" %} {% include "partials/comments.html" %}
{% endif %} {% endif %}
{% if page.lower or page.higher %} {% if page.lower or page.higher %}
<hr> <hr>
<nav id="post-nav"> <nav id="post-nav">
{% if page.higher %} {% if page.higher %}
<a class="post-nav-item post-nav-prev" href="{{ page.higher.permalink }}"> <a class="post-nav-item post-nav-prev" href="{{ page.higher.permalink }}">
<div class="nav-arrow">← Previous</div> <div class="nav-arrow">← Previous</div>
<span class="post-title">{{ page.higher.title }}</span> <span class="post-title">{{ page.higher.title }}</span>
</a> </a>
{% endif %} {% endif %}
{% if page.lower %} {% if page.lower %}
<a class="post-nav-item post-nav-next" href="{{ page.lower.permalink }}"> <a class="post-nav-item post-nav-next" href="{{ page.lower.permalink }}">
<div class="nav-arrow">Next →</div> <div class="nav-arrow">Next →</div>
<span class="post-title">{{ page.lower.title }}</span> <span class="post-title">{{ page.lower.title }}</span>
</a> </a>
{% endif %} {% endif %}
</nav> </nav>
{% endif %} {% endif %}
<p class="dialog-buttons"> <p class="dialog-buttons">
<a class="inline-button" href="#top">Go to top</a> <a class="inline-button" href="#top">Go to top</a>
<a class="inline-button colored" href="{{ config.extra.issues_url }}">File an issue</a> <a class="inline-button colored" href="{{ config.extra.issues_url }}">File an issue</a>
</p> </p>
{% endblock content %} {% endblock content %}

View File

@ -6,45 +6,39 @@
<p>{{ section.description }}</p> <p>{{ section.description }}</p>
<small> <small>
<a class="link-page" href="{{ get_url(path='tags') }}">Filter by tag</a> <a class="link-page" href="{{ get_url(path='tags') }}">Filter by tag</a>
<br /> <br />
From newest to oldest ↓ From newest to oldest ↓
</small> </small>
<div class="blog-list"> <div class="blog-list">
{% for page in section.pages %} {% for page in section.pages %}
<article> <article>
<h3> <h3><a class="link-page" href="{{ page.permalink | safe }}">{{ page.title }}</a></h3>
<a class="link-page" href="{{ page.permalink | safe }}">{{ page.title }}</a> {%- if page.description %}
</h3> <p>{{ page.description }}</p>
{%- if page.description %} {%- endif %}
<p>{{ page.description }}</p> {%- if page.date %}
{%- endif %} <small>
{%- if page.date %} <time datetime="{{ page.date | date(format='%+') }}" pubdate>{{- page.date | date(format=config.extra.date_format) -}}</time>
<small> {%- if page.authors %}
<time datetime="{{ page.date | date(format='%+') }}" pubdate> <span></span>
{{- page.date | date(format=config.extra.date_format) -}} <span>Author: {{ page.authors[0] }}</span>
</time> {%- endif %}
{%- if page.authors %} {%- if page.taxonomies %}
<span></span> {%- for name, taxon in page.taxonomies %}
<span>Author: {{ page.authors[0] }}</span> <span></span>
{%- endif %} <ul class="tags">
{%- if page.taxonomies %} {%-for item in taxon %}
{%- for name, taxon in page.taxonomies %} <li><a class="tag" href="{{ get_taxonomy_url(kind=name, name=item) }}">{{ item }}</a></li>
<span></span> {%- endfor %}
<ul class="tags"> </ul>
{%-for item in taxon %} {%- endfor %}
<li> {%- endif %}
<a class="tag" href="{{ get_taxonomy_url(kind=name, name=item) }}">{{ item }}</a> </small>
</li> {%- endif %}
{%- endfor %} </article>
</ul> <hr>
{%- endfor %} {% endfor %}
{%- endif %}
</small>
{%- endif %}
</article>
<hr>
{% endfor %}
</div> </div>
{% endblock content %} {% endblock content %}

View File

@ -2,4 +2,4 @@
{% block content %} {% block content %}
{{ section.content | safe }} {{ section.content | safe }}
{% endblock content %} {% endblock content %}

View File

@ -2,10 +2,10 @@
{% block content %} {% block content %}
{% if page.extra.archive %} {% if page.extra.archive %}
<div class="statement-container archive"> <div class="statement-container archive">
<strong class="big">⚠ Archived</strong> <strong class="big">⚠ Archived</strong>
{{ page.extra.archive | markdown | safe }} {{ page.extra.archive | markdown | safe }}
</div> </div>
{% endif %} {% endif %}
{{ page.content | safe }} {{ page.content | safe }}
{% endblock content %} {% endblock content %}

View File

@ -1,251 +1,252 @@
<!-- Taken from the https://carlschwan.eu/2020/12/29/adding-comments-to-your-static-blog-with-mastodon/ --> <!-- Taken from the https://carlschwan.eu/2020/12/29/adding-comments-to-your-static-blog-with-mastodon/ -->
{% if page.extra.comments.host %} {% if page.extra.comments.host %}
{% set host = page.extra.comments.host %} {% set host = page.extra.comments.host %}
{% else %} {% else %}
{% set host = config.extra.comments.host %} {% set host = config.extra.comments.host %}
{% endif %} {% endif %}
{% if page.extra.comments.user %} {% if page.extra.comments.user %}
{% set username = page.extra.comments.user %} {% set username = page.extra.comments.user %}
{% else %} {% else %}
{% set username = config.extra.comments.user %} {% set username = config.extra.comments.user %}
{% endif %} {% endif %}
{% set id = page.extra.comments.id %} {% set id = page.extra.comments.id %}
<section id="comments"> <section id="comments">
<img id="qrcode" class="no-hover pixels" alt="QR code to a Mastodon post" <img id="qrcode" class="no-hover pixels" alt="QR code to a Mastodon post"
src="https://api.qrserver.com/v1/create-qr-code/?data=https://{{ host }}/@{{ username }}/{{ id }}"> src="https://api.qrserver.com/v1/create-qr-code/?data=https://{{ host }}/@{{ username }}/{{ id }}">
<h2>Comments</h2> <h2>Comments</h2>
<p> <p>
You can respond to this <a href="https://{{ host }}/@{{ username }}/{{ id }}">post</a> with an account on the You can respond to this <a href="https://{{ host }}/@{{ username }}/{{ id }}">post</a> with an account on the
Fediverse (e.g Mastodon, Akkoma, Sharkey or any Mastodon API compatible server). Fediverse (e.g Mastodon, Akkoma, Sharkey or any Mastodon API compatible server).
</p> </p>
<p> <p>
<small> <small>
Since Fediverse is decentralized, you can use your existing Mastodon API compatible account if you don't have an Since Fediverse is decentralized, you can use your existing Mastodon API compatible account if you don't
account on this server. Known non-private replies are displayed below. have an
</small> account on this server. Known non-private replies are displayed below.
</p> </small>
</p>
<p> <p>
<a id="load-comments" class="inline-button" onclick="loadComments()">Load comments…</a> <a id="load-comments" class="inline-button" onclick="loadComments()">Load comments…</a>
</p> </p>
<div id="comments-wrapper"> <div id="comments-wrapper">
<noscript> <noscript>
<p> <p>
Loading comments relies on JavaScript. Try enabling JavaScript and Loading comments relies on JavaScript. Try enabling JavaScript and
reloading, or visit reloading, or visit
<a href="https://{{ host }}/@{{ username }}/{{ id }}"> <a href="https://{{ host }}/@{{ username }}/{{ id }}">
the original post the original post
</a> </a>
on Mastodon. on Mastodon.
</p> </p>
</noscript> </noscript>
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
function escapeHtml(unsafe) { function escapeHtml(unsafe) {
return unsafe return unsafe
.replace(/&/g, "&amp;") .replace(/&/g, "&amp;")
.replace(/</g, "&lt;") .replace(/</g, "&lt;")
.replace(/>/g, "&gt;") .replace(/>/g, "&gt;")
.replace(/"/g, "&quot;") .replace(/"/g, "&quot;")
.replace(/'/g, "&#039;"); .replace(/'/g, "&#039;");
} }
function emojify(input, emojis) { function emojify(input, emojis) {
let output = input; let output = input;
emojis.forEach((emoji) => { emojis.forEach((emoji) => {
let picture = document.createElement("picture"); let picture = document.createElement("picture");
let source = document.createElement("source"); let source = document.createElement("source");
source.setAttribute("srcset", escapeHtml(emoji.url)); source.setAttribute("srcset", escapeHtml(emoji.url));
source.setAttribute("media", "(prefers-reduced-motion: no-preference)"); source.setAttribute("media", "(prefers-reduced-motion: no-preference)");
let img = document.createElement("img"); let img = document.createElement("img");
img.className = "emoji"; img.className = "emoji";
img.setAttribute("src", escapeHtml(emoji.static_url)); img.setAttribute("src", escapeHtml(emoji.static_url));
img.setAttribute("alt", `:${emoji.shortcode}:`); img.setAttribute("alt", `:${emoji.shortcode}:`);
img.setAttribute("title", `:${emoji.shortcode}:`); img.setAttribute("title", `:${emoji.shortcode}:`);
img.setAttribute("width", "20"); img.setAttribute("width", "20");
img.setAttribute("height", "20"); img.setAttribute("height", "20");
picture.appendChild(source); picture.appendChild(source);
picture.appendChild(img); picture.appendChild(img);
output = output.replace(`:${emoji.shortcode}:`, picture.outerHTML); output = output.replace(`:${emoji.shortcode}:`, picture.outerHTML);
}); });
return output; return output;
} }
function loadComments() { function loadComments() {
let commentsWrapper = document.getElementById("comments-wrapper"); let commentsWrapper = document.getElementById("comments-wrapper");
document.getElementById("load-comments").innerHTML = "Loading…"; document.getElementById("load-comments").innerHTML = "Loading…";
fetch("https://{{ host }}/api/v1/statuses/{{ id }}/context") fetch("https://{{ host }}/api/v1/statuses/{{ id }}/context")
.then(function (response) { .then(function (response) {
return response.json(); return response.json();
}) })
.then(function (data) { .then(function (data) {
let descendants = data["descendants"]; let descendants = data["descendants"];
if ( if (
descendants && descendants &&
Array.isArray(descendants) && Array.isArray(descendants) &&
descendants.length > 0 descendants.length > 0
) { ) {
commentsWrapper.innerHTML = ""; commentsWrapper.innerHTML = "";
descendants.forEach(function (status) { descendants.forEach(function (status) {
console.log(descendants); console.log(descendants);
if (status.account.display_name.length > 0) { if (status.account.display_name.length > 0) {
status.account.display_name = escapeHtml( status.account.display_name = escapeHtml(
status.account.display_name status.account.display_name
); );
status.account.display_name = emojify( status.account.display_name = emojify(
status.account.display_name, status.account.display_name,
status.account.emojis status.account.emojis
); );
} else { } else {
status.account.display_name = status.account.username; status.account.display_name = status.account.username;
} }
let instance = ""; let instance = "";
if (status.account.acct.includes("@")) { if (status.account.acct.includes("@")) {
instance = status.account.acct.split("@")[1]; instance = status.account.acct.split("@")[1];
} else { } else {
instance = "{{ host }}"; instance = "{{ host }}";
} }
const isReply = status.in_reply_to_id !== "{{ id }}"; const isReply = status.in_reply_to_id !== "{{ id }}";
let op = false; let op = false;
if (status.account.acct == "{{ username }}") { if (status.account.acct == "{{ username }}") {
op = true; op = true;
} }
status.content = emojify(status.content, status.emojis); status.content = emojify(status.content, status.emojis);
let avatarSource = document.createElement("source"); let avatarSource = document.createElement("source");
avatarSource.setAttribute( avatarSource.setAttribute(
"srcset", "srcset",
escapeHtml(status.account.avatar) escapeHtml(status.account.avatar)
); );
avatarSource.setAttribute( avatarSource.setAttribute(
"media", "media",
"(prefers-reduced-motion: no-preference)" "(prefers-reduced-motion: no-preference)"
); );
let avatarImg = document.createElement("img"); let avatarImg = document.createElement("img");
avatarImg.className = "avatar"; avatarImg.className = "avatar";
avatarImg.setAttribute( avatarImg.setAttribute(
"src", "src",
escapeHtml(status.account.avatar_static) escapeHtml(status.account.avatar_static)
); );
avatarImg.setAttribute( avatarImg.setAttribute(
"alt", "alt",
`@${status.account.username}@${instance} avatar` `@${status.account.username}@${instance} avatar`
); );
let avatarPicture = document.createElement("picture"); let avatarPicture = document.createElement("picture");
avatarPicture.appendChild(avatarSource); avatarPicture.appendChild(avatarSource);
avatarPicture.appendChild(avatarImg); avatarPicture.appendChild(avatarImg);
let avatar = document.createElement("a"); let avatar = document.createElement("a");
avatar.className = "avatar-link"; avatar.className = "avatar-link";
avatar.setAttribute("href", status.account.url); avatar.setAttribute("href", status.account.url);
avatar.setAttribute("rel", "external nofollow"); avatar.setAttribute("rel", "external nofollow");
avatar.setAttribute( avatar.setAttribute(
"title", "title",
`View profile at @${status.account.username}@${instance}` `View profile at @${status.account.username}@${instance}`
); );
avatar.appendChild(avatarPicture); avatar.appendChild(avatarPicture);
let instanceBadge = document.createElement("a"); let instanceBadge = document.createElement("a");
instanceBadge.className = "instance"; instanceBadge.className = "instance";
instanceBadge.setAttribute("href", status.account.url); instanceBadge.setAttribute("href", status.account.url);
instanceBadge.setAttribute( instanceBadge.setAttribute(
"title", "title",
`@${status.account.username}@${instance}` `@${status.account.username}@${instance}`
); );
instanceBadge.setAttribute("rel", "external nofollow"); instanceBadge.setAttribute("rel", "external nofollow");
instanceBadge.textContent = instance; instanceBadge.textContent = instance;
let display = document.createElement("span"); let display = document.createElement("span");
display.className = "display"; display.className = "display";
display.setAttribute("itemprop", "author"); display.setAttribute("itemprop", "author");
display.setAttribute("itemtype", "http://schema.org/Person"); display.setAttribute("itemtype", "http://schema.org/Person");
display.innerHTML = status.account.display_name; display.innerHTML = status.account.display_name;
let header = document.createElement("header"); let header = document.createElement("header");
header.className = "author"; header.className = "author";
header.appendChild(display); header.appendChild(display);
header.appendChild(instanceBadge); header.appendChild(instanceBadge);
let permalink = document.createElement("a"); let permalink = document.createElement("a");
permalink.setAttribute("href", status.url); permalink.setAttribute("href", status.url);
permalink.setAttribute("itemprop", "url"); permalink.setAttribute("itemprop", "url");
permalink.setAttribute("title", `View comment at ${instance}`); permalink.setAttribute("title", `View comment at ${instance}`);
permalink.setAttribute("rel", "external nofollow"); permalink.setAttribute("rel", "external nofollow");
permalink.textContent = new Date( permalink.textContent = new Date(
status.created_at status.created_at
).toLocaleString("en-IE", { ).toLocaleString("en-IE", {
dateStyle: "long", dateStyle: "long",
timeStyle: "short", timeStyle: "short",
}); });
let timestamp = document.createElement("time"); let timestamp = document.createElement("time");
timestamp.setAttribute("datetime", status.created_at); timestamp.setAttribute("datetime", status.created_at);
timestamp.appendChild(permalink); timestamp.appendChild(permalink);
let main = document.createElement("main"); let main = document.createElement("main");
main.setAttribute("itemprop", "text"); main.setAttribute("itemprop", "text");
main.innerHTML = status.content; main.innerHTML = status.content;
let interactions = document.createElement("footer"); let interactions = document.createElement("footer");
let faves = document.createElement("a"); let faves = document.createElement("a");
faves.className = "faves"; faves.className = "faves";
faves.setAttribute("href", `${status.url}/favourites`); faves.setAttribute("href", `${status.url}/favourites`);
faves.setAttribute("title", `Favorites from ${instance}`); faves.setAttribute("title", `Favorites from ${instance}`);
faves.textContent = status.favourites_count; faves.textContent = status.favourites_count;
interactions.appendChild(faves); interactions.appendChild(faves);
let comment = document.createElement("article"); let comment = document.createElement("article");
comment.id = `comment-${status.id}`; comment.id = `comment-${status.id}`;
comment.className = isReply ? "comment comment-reply" : "comment"; comment.className = isReply ? "comment comment-reply" : "comment";
comment.setAttribute("itemprop", "comment"); comment.setAttribute("itemprop", "comment");
comment.setAttribute("itemtype", "http://schema.org/Comment"); comment.setAttribute("itemtype", "http://schema.org/Comment");
comment.appendChild(avatar); comment.appendChild(avatar);
comment.appendChild(header); comment.appendChild(header);
comment.appendChild(timestamp); comment.appendChild(timestamp);
comment.appendChild(main); comment.appendChild(main);
if (status.favourites_count > 0) { if (status.favourites_count > 0) {
comment.appendChild(interactions); comment.appendChild(interactions);
} }
if (op === true) { if (op === true) {
comment.classList.add("op"); comment.classList.add("op");
avatar.classList.add("op"); avatar.classList.add("op");
avatar.setAttribute( avatar.setAttribute(
"title", "title",
"Blog post author; " + avatar.getAttribute("title") "Blog post author; " + avatar.getAttribute("title")
); );
instanceBadge.classList.add("op"); instanceBadge.classList.add("op");
instanceBadge.setAttribute( instanceBadge.setAttribute(
"title", "title",
"Blog post author: " + instanceBadge.getAttribute("title") "Blog post author: " + instanceBadge.getAttribute("title")
); );
} }
commentsWrapper.innerHTML += comment.outerHTML; commentsWrapper.innerHTML += comment.outerHTML;
}); });
} }
let loadCommentsButton = document.getElementById("load-comments"); let loadCommentsButton = document.getElementById("load-comments");
loadCommentsButton.remove(); loadCommentsButton.remove();
}); });
} }
</script> </script>
</section> </section>

View File

@ -1,19 +1,20 @@
<footer id="site-footer"> <footer id="site-footer">
{% if config.extra.footer.show_copyright %} {% if config.extra.footer.show_copyright %}
<p title="Last built at {{ now() | date(format='%F %R %Z') }}">&copy; {{ config.title }}, {{ now() | date(format="%Y") }}</p> <p title="Last built at {{ now() | date(format='%F %R %Z') }}">&copy; {{ config.title }}, {{ now() | date(format="%Y") }}</p>
{% endif %} {% endif %}
{% if config.extra.footer.show_source %} {% if config.extra.footer.show_source %}
<p><a href="{{ config.extra.source_url }}">Website source</a></p> <p><a href="{{ config.extra.source_url }}">Website source</a></p>
{% endif %} {% endif %}
{% if config.extra.footer.show_powered_by %} {% if config.extra.footer.show_powered_by %}
<p><small>Powered by <a href="https://www.getzola.org">Zola</a> and <a href="https://daudix.codeberg.page/duckquill">Duckquill</a></small></p> <p><small>Powered by <a href="https://www.getzola.org">Zola</a> and <a href="https://daudix.codeberg.page/duckquill">Duckquill</a></small></p>
{% endif %} {% endif %}
{% if config.extra.footer.show_johnvert %} {% if config.extra.footer.show_johnvert %}
<details><summary>Johnvertisement</summary> <details>
<iframe id="johnvertisement" title="Johnvertisement" src="https://john.citrons.xyz/embed?ref={{ config.extra.footer.johnvert_ref }}"></iframe> <summary>Johnvertisement</summary>
</details> <iframe id="johnvertisement" title="Johnvertisement" src="https://john.citrons.xyz/embed?ref={{ config.extra.footer.johnvert_ref }}"></iframe>
{% endif %} </details>
{% endif %}
</footer> </footer>

View File

@ -1,62 +1,60 @@
<head> <head>
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="description" content="{{ config.description }}" /> <meta name="description" content="{{ config.description }}" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="{{ config.extra.primary_color }}" /> <meta name="theme-color" content="{{ config.extra.primary_color }}" />
<link rel="canonical" href="{{ current_url | default(value='/') }}" /> <link rel="canonical" href="{{ current_url | default(value='/') }}" />
<title> <title>
{%- if page.title -%} {%- if page.title -%}
{{- page.title }} - {{ config.title -}} {{- page.title }} - {{ config.title -}}
{%- elif section.title -%} {%- elif section.title -%}
{{- section.title }} - {{ config.title -}} {{- section.title }} - {{ config.title -}}
{%- else -%} {%- else -%}
{{- config.title -}} {{- config.title -}}
{%- endif -%} {%- endif -%}
</title> </title>
<link rel="stylesheet" type="text/css" href="{{ get_url(path='style.css') }}" /> <link rel="stylesheet" type="text/css" href="{{ get_url(path='style.css') }}" />
<link rel="stylesheet" type="text/css" href="/syntax-theme-dark.css" media="(prefers-color-scheme: dark)" /> <link rel="stylesheet" type="text/css" href="/syntax-theme-dark.css" media="(prefers-color-scheme: dark)" />
<link rel="stylesheet" type="text/css" href="/syntax-theme-light.css" media="(prefers-color-scheme: light)" /> <link rel="stylesheet" type="text/css" href="/syntax-theme-light.css" media="(prefers-color-scheme: light)" />
{% if config.extra.stylesheets %} {% if config.extra.stylesheets %}
{% for stylesheet in config.extra.stylesheets %} {% for stylesheet in config.extra.stylesheets %}
<link rel="stylesheet" type="text/css" href="{{ get_url(path=stylesheet) }}" /> <link rel="stylesheet" type="text/css" href="{{ get_url(path=stylesheet) }}" />
{% endfor %} {% endfor %}
{% endif %} {% endif %}
<style type="text/css"> <style type="text/css">
:root { :root {
--primary-color-alpha: {{ config.extra.primary_color_alpha }}; --primary-color-alpha: {{ config.extra.primary_color_alpha }};
--primary-color: {{ config.extra.primary_color }}; --primary-color: {{ config.extra.primary_color }};
} }
</style> </style>
{% if page.extra.emoji_favicon %} {% if page.extra.emoji_favicon %}
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text x=%22-.1em%22 y=%22.9em%22 font-size=%2290%22>{{ page.extra.emoji_favicon }}</text></svg>"> <link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text x=%22-.1em%22 y=%22.9em%22 font-size=%2290%22>{{ page.extra.emoji_favicon }}</text></svg>">
<link rel="apple-touch-icon" type="image/svg+xml" sizes="180x180" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text x=%22-.1em%22 y=%22.9em%22 font-size=%2290%22>{{ page.extra.emoji_favicon }}</text></svg>"> <link rel="apple-touch-icon" type="image/svg+xml" sizes="180x180" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text x=%22-.1em%22 y=%22.9em%22 font-size=%2290%22>{{ page.extra.emoji_favicon }}</text></svg>">
{% elif section.extra.emoji_favicon %} {% elif section.extra.emoji_favicon %}
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text x=%22-.1em%22 y=%22.9em%22 font-size=%2290%22>{{ section.extra.emoji_favicon }}</text></svg>"> <link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text x=%22-.1em%22 y=%22.9em%22 font-size=%2290%22>{{ section.extra.emoji_favicon }}</text></svg>">
<link rel="apple-touch-icon" type="image/svg+xml" sizes="180x180" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text x=%22-.1em%22 y=%22.9em%22 font-size=%2290%22>{{ section.extra.emoji_favicon }}</text></svg>"> <link rel="apple-touch-icon" type="image/svg+xml" sizes="180x180" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text x=%22-.1em%22 y=%22.9em%22 font-size=%2290%22>{{ section.extra.emoji_favicon }}</text></svg>">
{% elif config.extra.emoji_favicon %} {% elif config.extra.emoji_favicon %}
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text x=%22-.1em%22 y=%22.9em%22 font-size=%2290%22>{{ config.extra.emoji_favicon }}</text></svg>"> <link rel="icon" type="image/svg+xml" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text x=%22-.1em%22 y=%22.9em%22 font-size=%2290%22>{{ config.extra.emoji_favicon }}</text></svg>">
<link rel="apple-touch-icon" type="image/svg+xml" sizes="180x180" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text x=%22-.1em%22 y=%22.9em%22 font-size=%2290%22>{{ config.extra.emoji_favicon }}</text></svg>"> <link rel="apple-touch-icon" type="image/svg+xml" sizes="180x180" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text x=%22-.1em%22 y=%22.9em%22 font-size=%2290%22>{{ config.extra.emoji_favicon }}</text></svg>">
{% elif config.extra.animated_favicon %} {% elif config.extra.animated_favicon %}
<link rel="icon" type="image/gif" href="{{ get_url(path='favicon.gif') }}" /> <link rel="icon" type="image/gif" href="{{ get_url(path='favicon.gif') }}" />
<link rel="apple-touch-icon" type="image/png" sizes="180x180" href="{{ get_url(path='apple-touch-icon.png') }}" /> <link rel="apple-touch-icon" type="image/png" sizes="180x180" href="{{ get_url(path='apple-touch-icon.png') }}" />
{% else %} {% else %}
<link rel="icon" type="image/png" href="{{ get_url(path='favicon.png') }}" /> <link rel="icon" type="image/png" href="{{ get_url(path='favicon.png') }}" />
<link rel="apple-touch-icon" type="image/png" sizes="180x180" href="{{ get_url(path='apple-touch-icon.png') }}" /> <link rel="apple-touch-icon" type="image/png" sizes="180x180" href="{{ get_url(path='apple-touch-icon.png') }}" />
{% endif %} {% endif %}
<link rel="me" href="https://{{ config.extra.comments.host }}/@{{ config.extra.comments.user }}" /> <link rel="me" href="https://{{ config.extra.comments.host }}/@{{ config.extra.comments.user }}" />
<!-- Open Graph --> <!-- Open Graph -->
<meta property="og:site_name" content="{{ config.title }}" /> <meta property="og:site_name" content="{{ config.title }}" />
<meta property="og:title" content="{%- if page.title -%} {{- page.title }} - {{ config.title -}} <meta property="og:title" content="{%- if page.title -%}{{- page.title }} - {{ config.title -}}{%- elif section.title -%}{{- section.title }} - {{ config.title -}}{%- else -%}{{- config.title -}}{%- endif -%}" />
{%- elif section.title -%} {{- section.title }} - {{ config.title -}} <meta property="og:url" content="{{ current_url | default(value='/') }}" />
{%- else -%} {{- config.title -}} {%- endif -%}" /> <meta property="og:description" content="{{ page.description | default(value=config.description) }}" />
<meta property="og:url" content="{{ current_url | default(value='/') }}" /> <meta property="og:image" content="{{ get_url(path='card.png') }}" />
<meta property="og:description" content="{{ page.description | default(value=config.description) }}" /> <meta property="twitter:card" content="summary_large_image" />
<meta property="og:image" content="{{ get_url(path='card.png') }}" />
<meta property="twitter:card" content="summary_large_image" />
</head> </head>

View File

@ -1,25 +1,24 @@
<header id="site-nav"> <header id="site-nav">
<nav> <nav>
<a href="#main" id="main-content" tabindex="0">Skip to main content</a> <a href="#main" id="main-content" tabindex="0">Skip to main content</a>
<ul> <ul>
<li id="home"> <li id="home">
<a href="{{ get_url(path='') }}">{{ config.title }}</a> <a href="{{ get_url(path='') }}">{{ config.title }}</a>
</li> </li>
{% for link in config.extra.nav.links %} {% for link in config.extra.nav.links %}
<li> <li>
<a href="{{ link.url | safe | replace(from='$BASE_URL', to=get_url(path='')) | safe }}">{{ link.name }}</a> <a href="{{ link.url | safe | replace(from='$BASE_URL', to=get_url(path='')) | safe }}">{{ link.name
</li> }}</a>
{% endfor %} </li>
{% if config.extra.nav.show_feed %} {% endfor %}
<li id="feed"> {% if config.extra.nav.show_feed %}
<a href="{{ get_url(path='') }}/{{ config.feed_filename }}"> <li id="feed">
<svg width="16" height="16" fill="currentColor" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"> <a href="{{ get_url(path='') }}/{{ config.feed_filename }}">
<path d="M1.988 1.988V3c.008.547.453.984 1 .988.004-.004.008-.004.012-.004v.028A8.977 8.977 0 0 1 11.988 13a.991.991 0 0 0 1 .984h1V13h-.004c0-.004 0-.004.004-.008C13.984 7.02 9.184 2.148 3.242 2.02A1.004 1.004 0 0 0 3 1.988v-.004zm0 4V7c.008.547.453.984 1 .988.004-.004.008-.004.012-.004V8a4.985 4.985 0 0 1 4.996 4.844 1.002 1.002 0 0 0 .988 1.145c.008-.005.012-.005.016-.005v.004h.984V13H10c0-3.793-3.047-6.898-6.82-6.992 0-.004-.004-.004-.004-.004A.892.892 0 0 0 3 5.988v-.004zm2 4a1.999 1.999 0 1 0-.002 3.998 1.999 1.999 0 0 0 .002-3.998m0 0" /> <svg width="16" height="16" fill="currentColor" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M1.988 1.988V3c.008.547.453.984 1 .988.004-.004.008-.004.012-.004v.028A8.977 8.977 0 0 1 11.988 13a.991.991 0 0 0 1 .984h1V13h-.004c0-.004 0-.004.004-.008C13.984 7.02 9.184 2.148 3.242 2.02A1.004 1.004 0 0 0 3 1.988v-.004zm0 4V7c.008.547.453.984 1 .988.004-.004.008-.004.012-.004V8a4.985 4.985 0 0 1 4.996 4.844 1.002 1.002 0 0 0 .988 1.145c.008-.005.012-.005.016-.005v.004h.984V13H10c0-3.793-3.047-6.898-6.82-6.992 0-.004-.004-.004-.004-.004A.892.892 0 0 0 3 5.988v-.004zm2 4a1.999 1.999 0 1 0-.002 3.998 1.999 1.999 0 0 0 .002-3.998m0 0" /></svg>
</svg> <span>Feed</span>
<span>Feed</span> </a>
</a> </li>
</li> {% endif %}
{% endif %} </ul>
</ul> </nav>
</nav>
</header> </header>

View File

@ -2,4 +2,4 @@
{% block content %} {% block content %}
{{ section.content | safe }} {{ section.content | safe }}
{% endblock content %} {% endblock content %}

View File

@ -1,3 +1,3 @@
<div class="crt scanlines"> <div class="crt scanlines">
{{ body | markdown | safe }} {{ body | markdown | safe }}
</div> </div>

View File

@ -1,12 +1,10 @@
<a href="{{url}}"> <a href="{{url}}">
<img <img class="
class=" {% if full %}full{% endif %}
{% if full %}full{% endif %} {% if pixels %}pixels{% endif %}
{% if pixels %}pixels{% endif %} {% if transparent %}transparent{% endif %}
{% if transparent %}transparent{% endif %} {% if no_hover %}no-hover{% endif %}
{% if no_hover %}no-hover{% endif %} "
" {% if alt %}alt="{{alt}}"{% endif %}
{% if alt %}alt="{{alt}}"{% endif %} src="{% if url_min %}{{url_min}}{% else %}{{url}}{% endif %}" />
src="{% if url_min %}{{url_min}}{% else %}{{url}}{% endif %}"
/>
</a> </a>

View File

@ -1,10 +1,9 @@
<video <video
class=" class="
{% if full %}full{% endif %} {% if full %}full{% endif %}
{% if pixels %}pixels{% endif %} {% if pixels %}pixels{% endif %}
{% if transparent %}transparent{% endif %} {% if transparent %}transparent{% endif %}
" "
{% if alt %}alt="{{alt}}"{% endif %} {% if alt %}alt="{{alt}}"{% endif %}
controls controls src="{{url}}">
src="{{url}}">
</video> </video>

View File

@ -5,12 +5,10 @@
<small> {{ terms | length }} tags in total </small> <small> {{ terms | length }} tags in total </small>
<br /> <br />
<small> <small>
<ul class="tags"> <ul class="tags">
{% for tag in terms %} {% for tag in terms %}
<li> <li><a class="tag" href="{{ get_taxonomy_url(kind='tags', name=tag.name) }}">{{ tag.name }}</a></li>
<a class="tag" href="{{ get_taxonomy_url(kind='tags', name=tag.name) }}">{{ tag.name }}</a> {% endfor %}
</li> </ul>
{% endfor %}
</ul>
</small> </small>
{% endblock content %} {% endblock content %}

View File

@ -3,37 +3,29 @@
{% block content %} {% block content %}
<h1>Posts with tag “{{ term.name }}”</h1> <h1>Posts with tag “{{ term.name }}”</h1>
<small> <small>
<a class="link-page" href="{{ get_url(path='tags') }}">See all tags</a> <a class="link-page" href="{{ get_url(path='tags') }}">See all tags</a>
<br /> <br />
{{ term.pages | length }} posts in total {{ term.pages | length }} posts in total
</small> </small>
<article> <article>
{% for page in term.pages %} {% for page in term.pages %}
<h3> <h3><a class="link-page" href="{{ page.permalink | safe }}">{{ page.title }}</a></h3>
<a class="link-page" href="{{ page.permalink | safe }}"> {%- if page.description %}
{{ page.title }} <p>{{ page.description }}</p>
</a> {%- endif %}
</h3> <small>
{%- if page.description %} <time datetime='{{ page.date | date(format=' %+') }}' pubdate>{{- page.date | date(format=config.extra.date_format) -}}</time>
<p>{{ page.description }}</p> {%- if page.taxonomies %}
{%- endif %} {%- for name, taxon in page.taxonomies %}
<small> <span></span>
<time datetime='{{ page.date | date(format='%+') }}' pubdate> <ul class="tags">
{{- page.date | date(format=config.extra.date_format) -}} {%-for item in taxon %}
</time> <li><a class="tag" href="{{ get_taxonomy_url(kind=name, name=item) }}">{{ item }}</a></li>
{%- if page.taxonomies %} {%- endfor %}
{%- for name, taxon in page.taxonomies %} </ul>
<span></span> {%- endfor %}
<ul class="tags"> {%- endif %}
{%-for item in taxon %} </small>
<li> {% endfor %}
<a class="tag" href="{{ get_taxonomy_url(kind=name, name=item) }}">{{ item }}</a>
</li>
{%- endfor %}
</ul>
{%- endfor %}
{%- endif %}
</small>
{% endfor %}
</article> </article>
{% endblock content %} {% endblock content %}