wip media query rework, sidebar mostly finished, rewritten njk

This commit is contained in:
sundae 2026-04-04 16:50:30 +03:00
commit 790147ea05
Signed by: sundae
SSH key fingerprint: SHA256:MsJkKuo4PUdjQDpLeaURy81drKkW14exlTHp+8QFu6M
33 changed files with 268 additions and 361 deletions

6
_src/_data/icon.json Normal file
View file

@ -0,0 +1,6 @@
{
"blog": "m5 3h15l7 7v20H5zm5 22h12v-3H10zm0-6h12v-3H10zm0-6h9v-3h-9z",
"changelog": "M10 25H21V22H10Zm4-13H10v3h4v4h3V15h4V12H17V8H14ZM5 3H20l7 7V30H5Z",
"gallery": "M2 2V30H30V2H2M5 26l6-9 5 6 5-9 6 12H5",
"home": "M20 20V30h8V12L16 2 4 12V30h8V20Z"
}

6
_src/_data/svg.json Normal file
View file

@ -0,0 +1,6 @@
{
"paw": "m 15.700739,16.184194 c 0,4.483 -2.555,2.038 -5.7060001,2.038 -3.151,0 -5.706,2.445 -5.706,-2.038 0,-2.925 2.555,-6.113001 5.706,-6.113001 3.1510001,0 5.7060001,3.188001 5.7060001,6.113001 z M 4.0687389,8.1071934 c 0.394,1.336 0.007,2.6259996 -0.862,2.8819996 -0.87,0.256001 -1.8929999,-0.619 -2.28599993,-1.9539996 -0.393,-1.336 -0.007,-2.626 0.86199993,-2.882 0.87,-0.256 1.893,0.619 2.286,1.954 z m 15.0000001,0.945 c -0.407,1.3319996 -1.442,2.1960006 -2.312,1.9299996 -0.869,-0.266 -1.244,-1.5609996 -0.837,-2.8919996 0.407,-1.332 1.442,-2.196 2.312,-1.93 0.869,0.265 1.244,1.56 0.837,2.892 z m -10.1100001,-4.859 c 0.365,1.897 -0.218,3.606 -1.302,3.814 -1.085,0.209 -2.261,-1.16 -2.626,-3.059 -0.365,-1.898 0.218,-3.6060001 1.302,-3.8150001 1.085,-0.20799996 2.261,1.1620001 2.626,3.0600001 z m 5.9960001,0.778 c -0.388,1.893 -1.578,3.25 -2.66,3.029 -1.082,-0.222 -1.647,-1.937 -1.26,-3.83 0.388,-1.894 1.578,-3.25000006 2.66,-3.0290001 1.082,0.222 1.647,1.9370001 1.26,3.8300001 z",
"back": "M2 16 18 4h6L12 14H50v4H12L24 28H18Z",
"theme": "M16 6a1 1 0 010 20Zm0-4a1 1 0 000 28A1 1 0 0016 2",
"menu": "M4 8H28v3H4Zm0 7H28v3H4Zm0 7H28v3H4Z"
}

View file

@ -1,98 +1,51 @@
---
paw: "m 15.700739,16.184194 c 0,4.483 -2.555,2.038 -5.7060001,2.038 -3.151,0 -5.706,2.445 -5.706,-2.038 0,-2.925 2.555,-6.113001 5.706,-6.113001 3.1510001,0 5.7060001,3.188001 5.7060001,6.113001 z M 4.0687389,8.1071934 c 0.394,1.336 0.007,2.6259996 -0.862,2.8819996 -0.87,0.256001 -1.8929999,-0.619 -2.28599993,-1.9539996 -0.393,-1.336 -0.007,-2.626 0.86199993,-2.882 0.87,-0.256 1.893,0.619 2.286,1.954 z m 15.0000001,0.945 c -0.407,1.3319996 -1.442,2.1960006 -2.312,1.9299996 -0.869,-0.266 -1.244,-1.5609996 -0.837,-2.8919996 0.407,-1.332 1.442,-2.196 2.312,-1.93 0.869,0.265 1.244,1.56 0.837,2.892 z m -10.1100001,-4.859 c 0.365,1.897 -0.218,3.606 -1.302,3.814 -1.085,0.209 -2.261,-1.16 -2.626,-3.059 -0.365,-1.898 0.218,-3.6060001 1.302,-3.8150001 1.085,-0.20799996 2.261,1.1620001 2.626,3.0600001 z m 5.9960001,0.778 c -0.388,1.893 -1.578,3.25 -2.66,3.029 -1.082,-0.222 -1.647,-1.937 -1.26,-3.83 0.388,-1.894 1.578,-3.25000006 2.66,-3.0290001 1.082,0.222 1.647,1.9370001 1.26,3.8300001 z"
back: "M2 16 18 4h6L12 14H50v4H12L24 28H18Z"
theme: "M16 6a1 1 0 010 20Zm0-4a1 1 0 000 28A1 1 0 0016 2"
menu: "M4 8H28v3H4Zm0 7H28v3H4Zm0 7H28v3H4Z"
---
<!DOCTYPE html>
<html lang="en">
{% set currentUrl %}{{ page.url }}{% endset %}
{% set sortedPages = collections.pages|sort(attribute='data.order') %}
{%set currentPage = page.url.split('/')[1]|slugify%}
{%set pageOrder = collections.pages|sort(attribute='data.order')%}
{%set availableStyles = ['home', 'blog', 'gallery']%}
<head>
<title>
{% if page.url.split('/') %}
{%if page.url.split('/')%}
{{ page.url.split('/')[1] }} -
{% if page.url.split('/')[2] %}
{{ page.url.split('/')[2] | replace("-", " ") }} |
{% endif %}
{% endif %}
{{ site.name | safe }}
{%if page.url.split('/')[2]%}
{{ page.url.split('/')[2]|replace("-", " ") }} |
{%endif%}
{%endif%}
{{ site.name|safe }}
</title>
{% include "meta.njk" %}
<link rel="icon" href="/assets/img/icon/sundae.png">
<link rel="stylesheet" href="/assets/css/reset.css">
<link rel="stylesheet" href="/assets/css/default/default.css">
<link rel="preload" href="/assets/css/citrus/default.css" as="style">
<link rel="stylesheet" href="/assets/css/default/system.css" id="themed">
{% if currentUrl === "/home/" %}
<link rel="stylesheet" href="/assets/css/pokesprite-pokemon-gen8.css">
{% endif %}
{% set availableStyles = ['home', 'blog', 'gallery'] %}
{% if currentUrl %}
{% if availableStyles.indexOf(page.url.split('/')[1]|slugify) !== -1 %}
<link rel="stylesheet" href="/assets/css/default/{{ page.url.split('/')[1]|slugify }}.css">
{% endif %}
{% endif %}
{%include "meta.njk"%}
{%include "stylesheets.njk"%}
</head>
<body id="{{ page.url.split('/')[1]|slugify }}">
<body id="{{ currentPage }}">
<dialog id="signal">
<article>
{% for article in collections.articles %}
{% if article.fileSlug == 'what' %}
{{ article.content | safe }}
{% endif %}
{% endfor %}
{% include "../data/articles/what.html" %}
</article>
</dialog>
<section>
<nav class="navbar" id="floating">
<ul role="list">
<li>
<button popovertarget="mobile" aria-label="Toggle menu">
<svg viewbox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<path d="{{menu}}"></path>
</svg>
</button>
</li>
<li>
<button id="theme-toggle" aria-label="Toggle theme">
<svg viewbox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<path d="{{ theme }}">
</svg>
</button>
</li>
</ul>
</nav>
</section>
<section id="mobile" popover="">
<nav class="navbar">
{% include "nav.njk" %}
<ul role="list">
<li>
<button id="theme-toggle" aria-label="Toggle theme">
<svg viewbox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<path d="{{ theme }}">
</svg>
Toggle theme
</button>
</li>
</ul>
</nav>
</section>
<nav class="navbar" id="floating">
{%include "nav-misc.njk"%}
</nav>
<div id="sidebar" popover="">
<nav class="navbar" id="default">
{%include "nav-misc.njk"%}
{%include "nav.njk"%}
</nav>
</div>
<header>
<h1>
{% for page in sortedPages %}
{% if currentUrl.split('/')[1] === page.url.split('/')[1]|slugify %}
{%for page in pageOrder%}
{%if page.url|slugify == currentPage%}
<svg viewbox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<path d="{{ page.data.icon }}"></path>
<path d="{{icon[page.url|slugify]}}"></path>
</svg>
{% endif %}
{% endfor %}
{{ page.url.split('/')[1]|slugify|capitalize }}
{%endif%}
{%endfor%}
{{ page.fileSlug|capitalize }}
</h1>
</header>
<main>
{{ content | safe }}
{{ content|safe }}
</main>
<footer>
<span id="message" aria-label="Random footer message">made with love</span>

View file

@ -4,46 +4,46 @@ layout: base
<article id="art">
<h1>{{ page.fileSlug }}
{% for flag in flags %}
{%for flag in flags%}
<img src="{{ flag.src }}">
{% endfor %}
{%endfor%}
</h1>
{{ content|safe }}
{% if programs and programs|length > 0 %}
{%if programs and programs|length > 0%}
<p>Made with:</p>
<ul>
{% for program in programs %}
{%for program in programs%}
<li>
{{ program.name | link(program.src) | safe }}
{{ program.name|link(program.src)|safe }}
</li>
{% endfor %}
{%endfor%}
</ul>
{% endif %}
{% if palettes and palettes|length > 0 %}
{%endif%}
{%if palettes and palettes|length > 0%}
<p>Color palette used:</p>
{% for palette in palettes %}
{%for palette in palettes%}
<ul>
<li>
{% if palette.src %}
{{ palette.name | link(palette.src) | safe }}
{% endif %}
{%if palette.src%}
{{ palette.name|link(palette.src)|safe }}
{%endif%}
</li>
</ul>
{% endfor %}
{%endfor%}
</ul>
{% endif %}
{%endif%}
<section>
{% for image in images %}
{%for image in images%}
<a href="{{ image.src }}">
<figure>
<img src="{{ image.src }}" alt="" {% if image.pixel %} style="image-rendering: pixelated" {% endif %}>
<img src="{{ image.src }}" alt="" {%if image.pixel%} style="image-rendering: pixelated" {%endif%}>
<figcaption>{{ image.alt }}</figcaption>
<time datetime="{{ image.date|ISO }}">{{ image.date|readable }}</time>
</figure>
</a>
{% endfor %}
{%endfor%}
</section>
{% for attachment in attachments %}
{%for attachment in attachments%}
<section class="attachment">
<a href="{{ attachment.src }}">
<figure>
@ -52,5 +52,5 @@ layout: base
</figure>
</a>
</section>
{% endfor %}
{%endfor%}
</article>

View file

@ -1,24 +0,0 @@
<section>
<h3>Pages</h3>
<ul role="list">
<li>
<a href="../">
<svg viewbox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<path d="{{ back }}"></path>
</svg>
Go back
</a>
</li>
{% for page in sortedPages %}
<li>
<a href="{{ page.url }}" {% if currentUrl.split('/')[1] === page.url.split('/')[1]|slugify %} aria-current="page" {% endif %}>
<svg viewbox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<path d="{{ page.data.icon }}"></path>
</svg>
{{ page.fileSlug | capitalize }}
</a>
</li>
{% endfor %}
</li>
</ul>
</section>

View file

@ -0,0 +1,25 @@
<ul role="list">
<li>
<button popovertarget="sidebar">
<svg viewbox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<path d="{{svg.menu}}"></path>
</svg>
Toggle menu
</button>
<li>
<button class="theme-toggle">
<svg viewbox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<path d="{{svg.theme}}">
</svg>
Toggle theme
</button>
</li>
<li>
<a href="../">
<svg viewbox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<path d="{{svg.back}}"></path>
</svg>
Go back
</a>
<li>
</ul>

View file

@ -1,23 +0,0 @@
<section>
<h3>Outgoing</h3>
<ul role="list">
{% for key, items in outgoing %}
{% for item in items %}
{% if key != "signal" %}
<li>
<a href="{{ item.src }}">
<img src="/assets/img/icon/{{ item.icon }}" alt="" aria-hidden="true">{{ key | capitalize }}
</a>
</li>
{% endif %}
{% endfor %}
{% if key == "signal" %}
<li>
<button command="show-modal" commandfor="{{ items[0].id }}">
<img src="/assets/img/icon/{{ items[0].icon }}" alt="" aria-hidden="true">{{ key | capitalize }}
</button>
</li>
{% endif %}
{% endfor %}
</ul>
</section>

View file

@ -1,2 +1,38 @@
{% include "nav-main.njk" %}
{% include "nav-outgoing.njk" %}
<section>
<h3>Pages</h3>
<ul role="list">
{%for page in pageOrder%}
<li>
<a href="{{ page.url }}" {%if page.url|slugify == currentPage%}aria-current="page"{%endif%}>
<svg viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
<path d="{{ icon[page.url|slugify] }}"></path>
</svg>
{{ page.fileSlug|capitalize }}
</a>
</li>
{%endfor%}
</ul>
</section>
<section>
<h3>Outgoing</h3>
<ul role="list">
{%for key, items in outgoing%}
{%for item in items%}
{%if key != "signal"%}
<li>
<a href="{{ item.src }}">
<img src="/assets/img/icon/{{ item.icon }}" alt="" aria-hidden="true">{{ key|capitalize }}
</a>
</li>
{%endif%}
{%endfor%}
{%if key == "signal"%}
<li>
<button command="show-modal" commandfor="{{ items[0].id }}">
<img src="/assets/img/icon/{{ items[0].icon }}" alt="" aria-hidden="true">{{ key|capitalize }}
</button>
</li>
{%endif%}
{%endfor%}
</ul>
</section>

View file

@ -0,0 +1,8 @@
<link rel="stylesheet" href="/assets/css/reset.css">
<link rel="stylesheet" href="/assets/css/default/default.css">
<link rel="preload" href="/assets/css/citrus/default.css" as="style">
<link rel="stylesheet" href="/assets/css/default/{{ currentPage }}.css">
<link rel="stylesheet" href="/assets/css/default/system.css" id="themed">
{%if currentPage === "home"%}
<link rel="stylesheet" href="/assets/css/pokesprite-pokemon-gen8.css">
{%endif%}

View file

@ -1,4 +1,3 @@
@import url("./media.css");
@import url("./blog.css");
@import url("./gallery.css");
@import url("./home.css");
@ -57,3 +56,10 @@ article {
font-family: "Nosey Rodent", sans-serif;
}
}
@media screen and (max-width: 916px) {
header {
width: calc(100% - var(--float) + 4px);
margin: auto 0 0 auto;
padding: var(--pad-xl) 0 0 0;
}
}

View file

@ -7,7 +7,7 @@ article#badges {
}
#interests li {
width: 16ch;
margin: var(--pad-sm);
margin: var(--pad-s);
box-shadow: var(--shadow-light);
background-image: linear-gradient(color-mix(in lch, var(--citrus-light-extra), var(--citrus-primary) 50%), var(--citrus-primary) 200%);
& img {

View file

@ -1,42 +0,0 @@
/* default.css */
@media screen and (min-width: 920px) {
header {
width: var(--view);
border-right-width: 4px;
border-right-style: solid;
border-bottom-width: 4px;
border-bottom-style: solid;
border-bottom-right-radius: 100px;
margin-left: calc(var(--view) - 4px);
position: relative;
padding: calc(var(--pad-m) - 2px) var(--pad-sm);
z-index: 2;
}
}
/* nav.css */
@media screen and (max-width: 920px) {
header {
margin: 0 !important;
padding: 0 !important;
border-right: 0 !important;
border-radius: 0 !important;
width: 100% !important;
background-attachment: none !important;
background-image: none !important;
background-size: none !important;
}
body::after {
content: none !important;
}
}
/* gallery.css */
@media screen and (max-width: 450px) {
#artworks & article {
&::before {
width: calc(100% + var(--pad-l) * 2) !important;
margin: -3rem 0 0 -16px !important;
}
}
}

View file

@ -36,20 +36,18 @@
}
}
}
#mobile > nav,
header,
#floating {
nav#default,
nav#floating, header {
background-attachment: fixed;
background-image: var(--nav-bg);
background-size: 6px;
}
#floating, #mobile > nav {
nav#floating, nav#default {
border-bottom-style: solid;
border-right-style: solid;
border-bottom-width: 4px;
border-right-width: 4px;
}
#mobile > nav {
height: max-content;
nav#default {
border-bottom-right-radius: var(--pad-l);
}

View file

@ -1,9 +1,3 @@
:root {
--avatar: 3rem;
}
article:not(#blog:has(#posts) *) {
margin: 0 auto;
}
article {
max-width: var(--post);
& ul {

View file

@ -2,11 +2,6 @@
@import url("./variables.css");
@import url("./nav.css");
:root {
--view: 18rem;
}
/* i hate default styles >:( and also chrome */
h1,
h2,
@ -77,13 +72,15 @@ footer {
& span {
background-image: var(--transgender);
padding: 0 var(--pad-sm);
padding: 0 var(--pad-s);
}
}
main {
width: var(--main);
padding: var(--pad-xl);
padding-left: calc(var(--view) + var(--pad-xl));
padding-right: var(--view);
overflow: hidden;
}
@ -143,11 +140,11 @@ article {
}
& p:not(:last-child, [aria-label]) {
padding-bottom: var(--pad-sm);
padding-bottom: var(--pad-s);
}
& code:not(pre *) {
padding: 0 var(--pad-sm);
padding: 0 var(--pad-s);
}
& pre {
@ -181,7 +178,7 @@ article {
& ul:not([role="list"]):is(#art *) {
padding: 0;
margin: 0 0 var(--pad-sm) var(--pad-xl);
margin: 0 0 var(--pad-s) var(--pad-xl);
}
& li:not([role] *, #changelog *) {
@ -214,14 +211,14 @@ article {
& figcaption {
font-weight: normal;
font-style: italic;
padding-top: var(--pad-sm);
padding-top: var(--pad-s);
}
}
& > :first-child > code {
display: flex;
width: fit-content;
margin: var(--pad-sm) 0;
margin: var(--pad-s) 0;
}
}
@ -252,18 +249,18 @@ img[src*="/assets/img/flag/"] {
& img {
position: relative;
vertical-align: sub;
margin: 0 var(--pad-sm);
margin: 0 var(--pad-s);
}
}
article a:not(.link *, a:has(img)) {
display: inline-flex;
padding: 0 var(--pad-sm);
padding: 0 var(--pad-s);
}
dialog button[commandfor="signal"] {
width: max-content;
padding: 0 var(--pad-sm);
padding: 0 var(--pad-s);
margin: 0 auto;
}
@ -311,9 +308,44 @@ dialog#signal {
& img {
border: 4px solid white;
padding: var(--pad-sm);
padding: var(--pad-s);
max-width: 100%;
max-height: 250px;
}
}
}
@media screen and (min-width: 916px) {
div#sidebar {
display: flex;
}
nav#floating {
display: none;
}
nav#default button[popovertarget] {
display: none;
}
}
@media screen and (max-width: 916px) {
/* Reset */
header, footer, main {
margin: 0;
padding: 0;
width: auto;
}
article {
margin: var(--pad-m);
padding: var(--pad-l);
}
header {
text-align: right;
padding-right: var(--pad-m);
}
/* Move navbar artwork */
nav#default::before {
content: none;
}
body::after {
content: "";
}
}

View file

@ -1,6 +1,3 @@
:root {
--thumb: 16rem;
}
#gallery {
& time {
display: flex;
@ -29,8 +26,7 @@
display: flex;
width: 100%;
height: var(--thumb);
object-fit: contain;
border-radius: var(--round);
object-fit: cover;
}
& figcaption {
@ -54,7 +50,7 @@
}
& h3 {
display: flex;
gap: var(--pad-sm);
gap: var(--pad-s);
}
& section:has(a:nth-child(n + 2)) {
display: flex;
@ -80,7 +76,7 @@
}
}
}
@media screen and (max-width: 920px) {
@media screen and (max-width: 916px) {
#art p {
max-width: auto;
}

View file

@ -26,7 +26,7 @@ article#badges {
padding: 0;
display: flex;
flex-wrap: wrap;
gap: var(--pad-sm);
gap: var(--pad-s);
}
& a {
@ -55,7 +55,7 @@ article#interests {
& a {
display: flex;
flex-direction: column;
padding: var(--pad-sm);
padding: var(--pad-s);
width: inherit;
&:not(:hover, :focus) {
background: transparent;

View file

@ -1,77 +1,3 @@
/* default.css */
@media screen and (max-width: 920px) {
body::after {
content: "" !important;
}
footer {
width: 100% !important;
margin: 0 !important;
}
header {
padding-left: 0 !important;
padding-top: var(--pad-m) !important;
text-align: center !important;
}
main {
padding: var(--pad-l) !important;
}
main > section {
flex-direction: column !important;
}
main > section {
width: initial !important;
}
article {
max-width: initial !important;
width: auto !important;
}
#mobile > nav {
display: flex !important;
}
}
/* nav.css */
@media screen and (min-width: 920px) {
li:has(> button[popovertarget="mobile"]) {
display: none !important;
}
#floating {
display: none;
}
#mobile {
display: flex;
}
}
@media screen and (max-width: 920px) {
#floating {
position: sticky !important;
top: 0 !important;
}
}
/* home.css */
@media screen and (max-width: 920px) {
article#interests {
display: flex !important;
flex-direction: column !important;
& ul {
justify-content: center !important;
}
& li a {
padding: 0 !important;
}
}
}
@media (prefers-reduced-motion: no-preference) {
/* Scrolling pride flag text */
article#bio span[id],
@ -90,23 +16,23 @@
}
@media (prefers-reduced-motion: reduce) {
body {
animation: none !important;
animation: none;
}
/* Buttons */
:is(a, button),
span:has(a) {
transition: none !important;
transition: none;
}
/* Permalinks */
.header-anchor,
article pre {
transition: none !important;
transition: none;
}
/* Images */
#gallery a:has(figure),
#blog article figure,
a img {
transition: none !important;
transition: none;
}
.emoji:has(img[alt*="🐇"]) {
& img {
@ -119,11 +45,11 @@
}
/* Scrolling pride flag text */
article#bio span[id], footer span {
transition: none !important;
animation: none !important;
transition: none;
animation: none;
color: inherit;
background-clip: initial !important;
background: initial !important;
background-clip: initial;
background: initial;
&::before {
content: "";
display: inline-flex;
@ -150,7 +76,7 @@
}
/* Jumping critters */
#pkmn span:hover {
animation: none !important;
animation: none;
transform: translateY(-4px);
}
}

View file

@ -10,6 +10,7 @@
overflow-y: scroll;
scrollbar-width: none;
gap: var(--pad-m);
margin: 0;
& li *:is(a, button) {
align-items: center;
@ -41,7 +42,7 @@
}
& ul {
margin: var(--pad-sm);
margin: var(--pad-s);
padding: 0;
& li,
@ -66,7 +67,7 @@
}
}
#mobile > nav::before,
nav#default::before,
body::after {
z-index: -1;
content: "";
@ -79,7 +80,7 @@ body::after {
pointer-events: none;
}
#mobile > nav::before {
nav#default::before {
bottom: 0;
left: 0;
mask-size: 160%;
@ -96,27 +97,31 @@ body::after {
-webkit-mask-position-y: bottom;
}
button[popovertarget="mobile"] {
display: none;
}
#floating {
width: fit-content;
nav#floating {
width: var(--float);
height: fit-content;
border-bottom-style: solid;
border-right-style: solid;
border-bottom-width: 2px;
border-right-width: 2px;
border-bottom-right-radius: var(--pad-l);
& button {
width: fit-content;
font-size: 0;
}
& a {
display: none;
}
}
#mobile {
div#sidebar {
margin: 0;
padding: 0;
background: none;
border: 0;
}
#mobile > nav {
nav#default {
border: 0;
border-right-style: solid;
border-right-width: 2px;
}

View file

@ -9,7 +9,7 @@
border-color: var(--secondary-300);
background-color: var(--secondary-200);
& #mobile {
& #default {
box-shadow: inset 0 0 0 2px var(--secondary-500);
background-color: var(--secondary-300);
}
@ -73,7 +73,7 @@
span:has(a) {
color: var(--secondary-light-400);
border-color: var(--secondary-600);
background-color: var(--secondary-300);
background-color: color-mix(in lch, var(--secondary-300), transparent);
&:is(:hover, :focus) {
color: var(--secondary-light-500);
border-color: currentColor;
@ -90,14 +90,13 @@
color: inherit;
}
& #mobile > nav,
#floating {
& nav#default,
nav#floating {
background-color: var(--secondary-100);
border-color: var(--secondary);
& section {
background-color: var(--secondary-100);
border-color: var(--secondary);
background-color: var(--secondary-300);
background-color: color-mix(in lch, var(--secondary-300), transparent);
color: var(--secondary-light-300);
& a[aria-current] {
color: var(--secondary-500);
@ -116,7 +115,7 @@
}
&::after,
& #mobile > nav::before {
& nav#default::before {
background-color: var(--secondary);
}
}

View file

@ -9,7 +9,7 @@
border-color: var(--primary-300);
background-color: var(--primary-200);
& #mobile {
& #default {
box-shadow: inset 0 0 0 2px var(--primary-500);
background-color: var(--primary-300);
}
@ -90,14 +90,13 @@
color: inherit;
}
& #mobile > nav,
#floating {
& nav#default,
nav#floating {
background-color: var(--primary-100);
border-color: var(--primary-dark-500);
& section {
background-color: var(--primary-100);
border-color: var(--primary-dark-800);
background-color: var(--primary-300);
background-color: color-mix(in lch, var(--primary-300), transparent);
color: var(--primary-dark-300);
& a[aria-current] {
color: var(--primary-500);
@ -116,7 +115,7 @@
}
&::after,
& #mobile > nav::before {
& nav#default::before {
background-color: var(--primary-dark-500);
}
}

View file

@ -39,17 +39,21 @@
--secondary-700: color-mix(in lch, var(--secondary), var(--dark) 30%);
--secondary-800: color-mix(in lch, var(--secondary), var(--dark) 20%);
--secondary-900: color-mix(in lch, var(--secondary), var(--dark) 10%);
--trans: 300ms;
--image: 24rem;
--post: 75ch;
--round: 16px;
--pad-xxl: 4rem;
--pad-xl: 2rem;
--pad-lm: 1.4rem;
--pad-l: 1rem;
--avatar: 3rem; /* Blog avatar */
--flag: 45deg; /* Pride flag */
--image: 24rem; /* Postscript images */
--main: 108rem; /* Main width */
--post: 75ch; /* Article text width */
--view: 300px; /* Sidebar width */
--float: 88px; /* Floating sidebar width */
--thumb: 16rem; /* Gallery artwork thumbnail */
--pad-s: 0.4rem;
--pad-m: 0.8rem;
--pad-sm: 0.4rem;
--flag: 45deg;
--pad-l: 1rem;
--pad-xl: 2rem;
--pad-xxl: 4rem;
--round: 16px;
--trans: 300ms;
--paw: url("/assets/img/theme/paw.svg");
--paw-tiled: url("/assets/img/theme/paw-tiled.png");
--outlined: drop-shadow(0 0.5px var(--dark)) drop-shadow(0 -0.5px var(--dark))

View file

@ -1,24 +1,26 @@
const basePath = "/assets/css";
const themeToggle = document.getElementById("theme-toggle");
const themeToggles = document.querySelectorAll(".theme-toggle");
const themeStylesheet = document.getElementById("themed");
const themes = [
{ name: "system", file: "default/system.css" },
{ name: "citrus", file: "citrus/default.css" },
{ name: "system", file: "default/system.css" },
{ name: "citrus", file: "citrus/default.css" },
];
let currentTheme = localStorage.getItem("theme") || themes[0].name;
setTheme(currentTheme);
function setTheme(themeName) {
const theme = themes.find(t => t.name === themeName);
if (theme) {
themeStylesheet.href = `${basePath}/${theme.file}`;
}
const theme = themes.find(t => t.name === themeName);
if (theme && themeStylesheet) {
themeStylesheet.href = `${basePath}/${theme.file}`;
}
}
themeToggle.addEventListener("click", () => {
currentTheme = themes[(themes.findIndex(t => t.name === currentTheme) + 1) % themes.length].name;
setTheme(currentTheme);
localStorage.setItem("theme", currentTheme);
});
themeToggles.forEach(btn =>
btn.addEventListener("click", () => {
currentTheme = themes[(themes.findIndex(t => t.name === currentTheme) + 1) % themes.length].name;
setTheme(currentTheme);
localStorage.setItem("theme", currentTheme);
})
);

View file

@ -4,6 +4,7 @@ images:
alt: Various pixel art animations of Sundae as a character from Nuclear Throne.
date: 2021-01-25
pixel: true
position: left
programs:
- name: paint.net
src: https://www.getpaint.net/

View file

@ -4,6 +4,7 @@ images:
alt: Side portrait of Kass, looking back at the player.
date: 2023-02-23
pixel: true
position: -25px
attachments:
- src: /assets/img/blog/kass.jpg
alt: In-game screenshot of Kass that I took as reference.

View file

@ -3,6 +3,7 @@ images:
- src: /assets/img/art/petscii_sue.png
alt: Sue Sakamoto sitting and looking out from the Outer Wall.
date: 2023-01-16
position: right
palettes:
- name: Commodore 64
---

View file

@ -3,6 +3,7 @@ images:
- src: /assets/img/art/klonoa_sitting.png
alt: Klonoa sitting on a ledge, with a hand on his knee and right leg dangling from the viewer's side.
date: 2021-11-18
position: -60px
programs:
- name: MS Paint
src: https://www.microsoft.com/en-us/windows/paint

View file

@ -3,6 +3,7 @@ images:
- src: /assets/img/art/mallow.png
alt: Mallow from Cavern Crusher, sitting on the ledge of a mossy stone pit with water at the bottom.
date: 2025-08-03
position: left
programs:
- name: Krita
src: https://krita.org/

View file

@ -1,6 +1,5 @@
---
order: 3
icon: "m5 3h15l7 7v20H5zm5 22h12v-3H10zm0-6h12v-3H10zm0-6h9v-3h-9z"
---
<section id="posts">
<ul role="list">

View file

@ -1,6 +1,5 @@
---
order: 2
icon: "M10 25H21V22H10Zm4-13H10v3h4v4h3V15h4V12H17V8H14ZM5 3H20l7 7V30H5Z"
---
{%for update in collections.updates reversed%}

View file

@ -1,6 +1,5 @@
---
order: 4
icon: "M2 2V30H30V2H2M5 26l6-9 5 6 5-9 6 12H5"
---
<section id="artworks">
@ -13,7 +12,7 @@ icon: "M2 2V30H30V2H2M5 26l6-9 5 6 5-9 6 12H5"
<a href="{{artwork.page.url}}">
<figure>
{%if artwork.data.images[0]%}
<img src="{{artwork.data.images[0].src}}" alt="{{artwork.data.images[0].alt}}" {%if artwork.data.images[0].pixel%} style="image-rendering: pixelated" {%endif%} />
<img src="{{artwork.data.images[0].src}}" alt="{{artwork.data.images[0].alt}}" style="{%if artwork.data.images[0].pixel%}image-rendering: pixelated;{%endif%}{%if artwork.data.images[0].position%}object-position:{{artwork.data.images[0].position}};{%endif%}"/>
<figcaption>{{artwork.page.fileSlug}}{%if artwork.data.images.size > 1%}<p class="count">(+{{artwork.data.images.size| minus: 1}})</p>{%endif%}</figcaption>
{% if artwork.data.images[0].date %}
<time datetime="{{artwork.data.images[0].date|ISO}}">{{artwork.data.images[0].date|readable}}</time>
@ -34,7 +33,7 @@ icon: "M2 2V30H30V2H2M5 26l6-9 5 6 5-9 6 12H5"
<a href="{{fanart.page.url}}">
<figure>
{%if fanart.data.images[0]%}
<img src="{{fanart.data.images[0].src}}" alt="{{fanart.data.images[0].alt}}" />
<img src="{{fanart.data.images[0].src}}" alt="{{fanart.data.images[0].alt}}" style="{%if fanart.data.images[0].pixel%}image-rendering: pixelated;{%endif%}{%if fanart.data.images[0].position%}object-position:{{fanart.data.images[0].position}};{%endif%}"/>
<figcaption>{{fanart.page.fileSlug}}</figcaption>
{%if fanart.data.images[0].date%}
<time datetime="{{fanart.data.images[0].date|ISO}}">{{fanart.data.images[0].date|readable}}</time>

View file

@ -1,6 +1,5 @@
---
order: 1
icon: "M20 20V30h8V12L16 2 4 12V30h8V20Z"
---
<article id="bio">
{%for article in collections.articles%} {%if article.fileSlug == 'bio'%} {{