Nest media queries into CSS

This commit is contained in:
Isaac Mills 2025-07-14 08:57:17 -06:00
parent 76b9d66ae7
commit 09f8eda192
Signed by: fnmain
GPG key ID: B67D7410F33A0F61
6 changed files with 219 additions and 111 deletions

5
.postcssrc Normal file
View file

@ -0,0 +1,5 @@
{
"plugins": {
"postcss-custom-media": true
}
}

View file

@ -17,6 +17,8 @@
"@parcel/config-default": "^2.15.4",
"markdown-it-sup": "^2.0.0",
"parcel": "^2.15.4",
"postcss": "^8.5.6",
"postcss-custom-media": "^11.0.6",
"posthtml": "^0.16.6",
"posthtml-component": "^2.2.0",
"posthtml-include": "^2.0.1",

83
pnpm-lock.yaml generated
View file

@ -14,6 +14,9 @@ importers:
htmx.org:
specifier: ^2.0.6
version: 2.0.6
postcss-custom-media:
specifier: ^11.0.6
version: 11.0.6(postcss@8.5.6)
devDependencies:
'@parcel/compressor-brotli':
specifier: ^2.15.4
@ -30,6 +33,9 @@ importers:
parcel:
specifier: ^2.15.4
version: 2.15.4(@swc/helpers@0.5.17)
postcss:
specifier: ^8.5.6
version: 8.5.6
posthtml:
specifier: ^0.16.6
version: 0.16.6
@ -45,6 +51,30 @@ importers:
packages:
'@csstools/cascade-layer-name-parser@2.0.5':
resolution: {integrity: sha512-p1ko5eHgV+MgXFVa4STPKpvPxr6ReS8oS2jzTukjR74i5zJNyWO1ZM1m8YKBXnzDKWfBN1ztLYlHxbVemDD88A==}
engines: {node: '>=18'}
peerDependencies:
'@csstools/css-parser-algorithms': ^3.0.5
'@csstools/css-tokenizer': ^3.0.4
'@csstools/css-parser-algorithms@3.0.5':
resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==}
engines: {node: '>=18'}
peerDependencies:
'@csstools/css-tokenizer': ^3.0.4
'@csstools/css-tokenizer@3.0.4':
resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==}
engines: {node: '>=18'}
'@csstools/media-query-list-parser@4.0.3':
resolution: {integrity: sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==}
engines: {node: '>=18'}
peerDependencies:
'@csstools/css-parser-algorithms': ^3.0.5
'@csstools/css-tokenizer': ^3.0.4
'@lezer/common@1.2.3':
resolution: {integrity: sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==}
@ -829,6 +859,11 @@ packages:
msgpackr@1.11.4:
resolution: {integrity: sha512-uaff7RG9VIC4jacFW9xzL3jc0iM32DNHe4jYVycBcjUePT/Klnfj7pqtWJt9khvDFizmjN2TlYniYmSS2LIaZg==}
nanoid@3.3.11:
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
node-addon-api@6.1.0:
resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==}
@ -864,9 +899,19 @@ packages:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
postcss-custom-media@11.0.6:
resolution: {integrity: sha512-C4lD4b7mUIw+RZhtY7qUbf4eADmb7Ey8BFA2px9jUbwg7pjTZDl4KY4bvlUV+/vXQvzQRfiGEVJyAbtOsCMInw==}
engines: {node: '>=18'}
peerDependencies:
postcss: ^8.4
postcss-value-parser@4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
postcss@8.5.6:
resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==}
engines: {node: ^10 || ^12 || >=14}
posthtml-attrs-parser@1.1.2:
resolution: {integrity: sha512-9Que9y4k8c33iv8h5QyTfHKlurmsJIscozy7oeFRxuWeX/osXjVGu9o9MKrmo4TI6Vr9a9vh9b4LYXqm3/GvhA==}
engines: {node: '>=16.0.0'}
@ -931,6 +976,10 @@ packages:
engines: {node: '>=10'}
hasBin: true
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
style-to-object@1.0.9:
resolution: {integrity: sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==}
@ -971,6 +1020,22 @@ packages:
snapshots:
'@csstools/cascade-layer-name-parser@2.0.5(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
dependencies:
'@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
'@csstools/css-tokenizer': 3.0.4
'@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)':
dependencies:
'@csstools/css-tokenizer': 3.0.4
'@csstools/css-tokenizer@3.0.4': {}
'@csstools/media-query-list-parser@4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
dependencies:
'@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
'@csstools/css-tokenizer': 3.0.4
'@lezer/common@1.2.3': {}
'@lezer/lr@1.4.2':
@ -1980,6 +2045,8 @@ snapshots:
optionalDependencies:
msgpackr-extract: 3.0.3
nanoid@3.3.11: {}
node-addon-api@6.1.0: {}
node-addon-api@7.1.1: {}
@ -2024,8 +2091,22 @@ snapshots:
picomatch@2.3.1: {}
postcss-custom-media@11.0.6(postcss@8.5.6):
dependencies:
'@csstools/cascade-layer-name-parser': 2.0.5(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
'@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
'@csstools/css-tokenizer': 3.0.4
'@csstools/media-query-list-parser': 4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
postcss: 8.5.6
postcss-value-parser@4.2.0: {}
postcss@8.5.6:
dependencies:
nanoid: 3.3.11
picocolors: 1.1.1
source-map-js: 1.2.1
posthtml-attrs-parser@1.1.2: {}
posthtml-component@2.2.0:
@ -2095,6 +2176,8 @@ snapshots:
semver@7.7.2: {}
source-map-js@1.2.1: {}
style-to-object@1.0.9:
dependencies:
inline-style-parser: 0.2.4

View file

@ -0,0 +1,17 @@
<script props>
module.exports = {
href: props.href,
}
</script>
<a href="https://instagram.com/{{href}}" target="_blank" aria-label="{{href}} on GitHub">
<svg width="16pt" height="16pt" version="1.1" viewBox="0 0 16 16" xml:space="preserve"
xmlns="http://www.w3.org/2000/svg">
<g fill="#fff" stroke-width=".66667">
<path
d="m8 1.4413c2.136 0 2.3893 8e-3 3.2327 0.046667 0.872 0.04 1.77 0.23867 2.4053 0.874 0.64133 0.64133 0.834 1.5307 0.874 2.4053 0.038666 0.84333 0.046666 1.0967 0.046666 3.2327 0 2.136-8e-3 2.3893-0.046666 3.2327-0.039334 0.86733-0.24267 1.774-0.874 2.4053-0.64133 0.64133-1.53 0.834-2.4053 0.874-0.84333 0.038666-1.0967 0.046666-3.2327 0.046666-2.136 0-2.3893-8e-3 -3.2327-0.046666-0.86067-0.039334-1.7793-0.24733-2.4053-0.874-0.638-0.638-0.834-1.536-0.874-2.4053-0.038667-0.84333-0.046667-1.0967-0.046667-3.2327 0-2.136 8e-3 -2.3893 0.046667-3.2327 0.039333-0.864 0.24467-1.776 0.874-2.4053 0.64-0.64 1.5327-0.834 2.4053-0.874 0.84333-0.038667 1.0967-0.046667 3.2327-0.046667m0-1.4413c-2.1727 0-2.4453 0.0093333-3.2987 0.048-1.2367 0.056667-2.4647 0.40067-3.3587 1.2947-0.89733 0.89733-1.238 2.1227-1.2947 3.3587-0.038667 0.85333-0.048 1.126-0.048 3.2987 0 2.1727 0.0093333 2.4453 0.048 3.2987 0.056667 1.2353 0.402 2.4667 1.2947 3.3587 0.89667 0.89667 2.124 1.238 3.3587 1.2947 0.85333 0.038666 1.126 0.048 3.2987 0.048 2.1727 0 2.4453-0.009334 3.2987-0.048 1.236-0.056667 2.4653-0.40133 3.3587-1.2947 0.898-0.898 1.238-2.1227 1.2947-3.3587 0.038666-0.85333 0.048-1.126 0.048-3.2987 0-2.1727-0.009334-2.4453-0.048-3.2987-0.056667-1.2367-0.40133-2.4653-1.2947-3.3587-0.89533-0.89533-2.126-1.2387-3.3587-1.2947-0.85333-0.038667-1.126-0.048-3.2987-0.048z" />
<path
d="m8 3.892c-2.2687 0-4.108 1.8393-4.108 4.108 0 2.2687 1.8393 4.108 4.108 4.108 2.2687 0 4.108-1.8393 4.108-4.108 0-2.2687-1.8393-4.108-4.108-4.108zm0 6.7747c-1.4727 0-2.6667-1.194-2.6667-2.6667s1.194-2.6667 2.6667-2.6667 2.6667 1.194 2.6667 2.6667-1.194 2.6667-2.6667 2.6667z" />
<circle cx="12.271" cy="3.7293" r=".96" />
</g>
</svg>
</a>

View file

@ -65,48 +65,52 @@
Step on it, Richard!
</x-blockquote>
</fill:subtitle>
<fill:description>
<markdown>
I love everything from making distributed systems, to physically building them. I'm in my element when I'm
making software with Python, and deploying it via Docker.
</markdown>
</fill:description>
<!-- <fill:description> -->
<!-- <markdown> -->
<!-- I love everything from making distributed systems, to physically building them. I'm in my element when I'm -->
<!-- making software with Python, and deploying it via Docker. -->
<!-- </markdown> -->
<!-- </fill:description> -->
</x-project>
<!-- <x-project id="gunnar"> -->
<!-- <fill:img> -->
<!-- <img src="/assets/gunnar.jpg" class="person"> -->
<!-- </fill:img> -->
<!-- <fill:title> -->
<!-- <markdown> -->
<!-- # Gunnar Huscroft -->
<!-- </markdown> -->
<!-- <x-link href="projects.html" show="c0re"> -->
<!-- <markdown> -->
<!-- #### CEO of c0re (same thing) -->
<!-- </markdown> -->
<!-- </x-link> -->
<!-- </fill:title> -->
<!-- <fill:links> -->
<!-- <x-link.github href="Ghussy"></x-link.github> -->
<!-- <x-link.website href="https://churchofjesuschrist.org/" referencing="Gunnar"></x-link.website> -->
<!-- <x-link.youtube href="UCApj2bfCQRDWym4684z2TXQ"></x-link.youtube> -->
<!-- <x-link.linkedin href="gunnarhuscroft"></x-link.linkedin> -->
<!-- <x-link.x href="ChEEEky_SCRUB"></x-link.x> -->
<!-- </fill:links> -->
<!-- <fill:subtitle> -->
<!-- <x-blockquote cite="C.S. Lewis"> -->
<!-- Nothing but the courage and unselfishness of individuals is ever going to make any system work properly -->
<!-- </x-blockquote> -->
<!-- </fill:subtitle> -->
<!-- <fill:description> -->
<!-- <markdown> -->
<!-- Some people believe in test-driven development, or compiler-driven development. But I believe in values-driven -->
<!-- development. My passion lies in using my skills to help lift other people up, and leave the world better than I -->
<!-- found it. -->
<!-- </markdown> -->
<!-- </fill:description> -->
<!-- </x-project> -->
<x-project id="khayden">
<x-project id="gunnar">
<fill:img>
<img src="/assets/gunnar.jpg" class="person">
</fill:img>
<fill:title>
<markdown>
# Gunnar Huscroft
</markdown>
<x-link href="projects.html" show="c0re">
<markdown>
#### CEO of c0re (same thing)
</markdown>
</x-link>
</fill:title>
<fill:links>
<x-link.github href="Ghussy"></x-link.github>
<!-- <x-link.website href="https://churchofjesuschrist.org/" referencing="Gunnar"></x-link.website> -->
<x-link.youtube href="UCApj2bfCQRDWym4684z2TXQ"></x-link.youtube>
<x-link.linkedin href="gunnarhuscroft"></x-link.linkedin>
<x-link.x href="ChEEEky_SCRUB"></x-link.x>
<x-link.instagram href=""></x-link.instagram>
</fill:links>
<fill:subtitle>
<x-blockquote cite="C.S. Lewis">
Nothing but the courage and unselfishness of individuals is ever going to make any system work properly
</x-blockquote>
<!-- <x-blockquote cite="Gunnar"> -->
<!-- Placeholder -->
<!-- </x-blockquote> -->
</fill:subtitle>
<!-- <fill:description> -->
<!-- <markdown> -->
<!-- Some people believe in test-driven development, or compiler-driven development. But I believe in values-driven -->
<!-- development. My passion lies in using my skills to help lift other people up, and leave the world better than I -->
<!-- found it. -->
<!-- </markdown> -->
<!-- </fill:description> -->
</x-project>
<x-project class="project-alt" id="khayden">
<fill:img>
<img src="/assets/khayden.jpg" class="person">
</fill:img>
@ -130,13 +134,13 @@
You only live once, die trying
</x-blockquote>
</fill:subtitle>
<fill:description>
<markdown>
Just a guy making cool stuff for the love of the game. Like fast beep boops too 🎶⚡️
</markdown>
</fill:description>
<!-- <fill:description> -->
<!-- <markdown> -->
<!-- Just a guy making cool stuff for the love of the game. Like fast beep boops too 🎶⚡️ -->
<!-- </markdown> -->
<!-- </fill:description> -->
</x-project>
<x-project class="project-alt" id="isaac">
<x-project id="isaac">
<fill:img>
<img src="/assets/isaac.jpg" class="person">
</fill:img>
@ -161,12 +165,12 @@
Pog
</x-blockquote>
</fill:subtitle>
<fill:description>
<markdown>
I'm a software engineer and computer scientist who loves harnessing the power of technology to solve problems!
Ever since I was 7, my specialization has always been in looking for problems to solve, and working with people
to solve them.
</markdown>
</fill:description>
<!-- <fill:description> -->
<!-- <markdown> -->
<!-- I'm a software engineer and computer scientist who loves harnessing the power of technology to solve problems! -->
<!-- Ever since I was 7, my specialization has always been in looking for problems to solve, and working with people -->
<!-- to solve them. -->
<!-- </markdown> -->
<!-- </fill:description> -->
</x-project>
</x-tab.content>

View file

@ -1,9 +1,18 @@
@custom-media --tablet only screen and (max-width: 1200px);
@custom-media --phone only screen and (max-width: 700px);
@custom-media --smaller-phone only screen and (max-width: 500px);
:root {
--energy: 0px;
--page-width: min(100%, 1024px);
color: white;
}
html {
color-scheme: dark;
font-family: system-ui;
}
.title {
font-size: min(10vw, 36pt);
margin-bottom: 48px;
@ -18,6 +27,12 @@
h1 {
font-size: 48pt;
}
@media (--tablet) {
text-align: center;
display: flex;
flex-direction: column-reverse;
}
}
center:has(> blockquote) {
@ -43,11 +58,10 @@ blockquote {
&+p {
text-align: right;
}
}
html {
color-scheme: dark;
font-family: system-ui;
@media (--phone) {
margin: 0px auto;
}
}
#page-content {
@ -87,6 +101,20 @@ html {
&>div {
padding: 16px;
}
@media (--phone) {
flex-direction: column;
padding: 18px;
&>div {
padding-top: 0;
padding-bottom: 0;
}
p {
font-size: 14pt;
}
}
}
.project-title {
@ -100,6 +128,10 @@ html {
.description {
width: 100%;
@media (--phone) {
width: unset;
}
}
.links {
@ -127,6 +159,24 @@ html {
font-weight: bold;
border-bottom: solid 6px #eee;
}
@media (--smaller-phone) {
flex-direction: column;
a {
background-color: transparent;
border: solid 3px #999;
font-size: 16pt;
padding: 8px;
}
a[aria-selected=true] {
background-color: #eee;
font-weight: bold;
color: black;
border: solid 12px #eee;
}
}
}
.figure {
@ -194,56 +244,3 @@ a {
/* no underline */
text-decoration: none;
}
@media only screen and (max-width: 1200px) {
.section-header {
text-align: center;
display: flex;
flex-direction: column-reverse;
}
}
@media only screen and (max-width: 700px) {
.description {
width: unset;
}
.project {
flex-direction: column;
padding: 18px;
&>div {
padding-top: 0;
padding-bottom: 0;
}
p {
font-size: 14pt;
}
}
blockquote {
margin: 0px auto;
}
}
@media only screen and (max-width: 500px) {
.tab-list {
flex-direction: column;
a {
background-color: transparent;
border: solid 3px #999;
font-size: 16pt;
padding: 8px;
}
a[aria-selected=true] {
background-color: #eee;
font-weight: bold;
color: black;
border: solid 12px #eee;
}
}
}