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", "@parcel/config-default": "^2.15.4",
"markdown-it-sup": "^2.0.0", "markdown-it-sup": "^2.0.0",
"parcel": "^2.15.4", "parcel": "^2.15.4",
"postcss": "^8.5.6",
"postcss-custom-media": "^11.0.6",
"posthtml": "^0.16.6", "posthtml": "^0.16.6",
"posthtml-component": "^2.2.0", "posthtml-component": "^2.2.0",
"posthtml-include": "^2.0.1", "posthtml-include": "^2.0.1",

83
pnpm-lock.yaml generated
View file

@ -14,6 +14,9 @@ importers:
htmx.org: htmx.org:
specifier: ^2.0.6 specifier: ^2.0.6
version: 2.0.6 version: 2.0.6
postcss-custom-media:
specifier: ^11.0.6
version: 11.0.6(postcss@8.5.6)
devDependencies: devDependencies:
'@parcel/compressor-brotli': '@parcel/compressor-brotli':
specifier: ^2.15.4 specifier: ^2.15.4
@ -30,6 +33,9 @@ importers:
parcel: parcel:
specifier: ^2.15.4 specifier: ^2.15.4
version: 2.15.4(@swc/helpers@0.5.17) version: 2.15.4(@swc/helpers@0.5.17)
postcss:
specifier: ^8.5.6
version: 8.5.6
posthtml: posthtml:
specifier: ^0.16.6 specifier: ^0.16.6
version: 0.16.6 version: 0.16.6
@ -45,6 +51,30 @@ importers:
packages: 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': '@lezer/common@1.2.3':
resolution: {integrity: sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==} resolution: {integrity: sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==}
@ -829,6 +859,11 @@ packages:
msgpackr@1.11.4: msgpackr@1.11.4:
resolution: {integrity: sha512-uaff7RG9VIC4jacFW9xzL3jc0iM32DNHe4jYVycBcjUePT/Klnfj7pqtWJt9khvDFizmjN2TlYniYmSS2LIaZg==} 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: node-addon-api@6.1.0:
resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==}
@ -864,9 +899,19 @@ packages:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'} 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: postcss-value-parser@4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 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: posthtml-attrs-parser@1.1.2:
resolution: {integrity: sha512-9Que9y4k8c33iv8h5QyTfHKlurmsJIscozy7oeFRxuWeX/osXjVGu9o9MKrmo4TI6Vr9a9vh9b4LYXqm3/GvhA==} resolution: {integrity: sha512-9Que9y4k8c33iv8h5QyTfHKlurmsJIscozy7oeFRxuWeX/osXjVGu9o9MKrmo4TI6Vr9a9vh9b4LYXqm3/GvhA==}
engines: {node: '>=16.0.0'} engines: {node: '>=16.0.0'}
@ -931,6 +976,10 @@ packages:
engines: {node: '>=10'} engines: {node: '>=10'}
hasBin: true 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: style-to-object@1.0.9:
resolution: {integrity: sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==} resolution: {integrity: sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==}
@ -971,6 +1020,22 @@ packages:
snapshots: 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/common@1.2.3': {}
'@lezer/lr@1.4.2': '@lezer/lr@1.4.2':
@ -1980,6 +2045,8 @@ snapshots:
optionalDependencies: optionalDependencies:
msgpackr-extract: 3.0.3 msgpackr-extract: 3.0.3
nanoid@3.3.11: {}
node-addon-api@6.1.0: {} node-addon-api@6.1.0: {}
node-addon-api@7.1.1: {} node-addon-api@7.1.1: {}
@ -2024,8 +2091,22 @@ snapshots:
picomatch@2.3.1: {} 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-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-attrs-parser@1.1.2: {}
posthtml-component@2.2.0: posthtml-component@2.2.0:
@ -2095,6 +2176,8 @@ snapshots:
semver@7.7.2: {} semver@7.7.2: {}
source-map-js@1.2.1: {}
style-to-object@1.0.9: style-to-object@1.0.9:
dependencies: dependencies:
inline-style-parser: 0.2.4 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! Step on it, Richard!
</x-blockquote> </x-blockquote>
</fill:subtitle> </fill:subtitle>
<fill:description> <!-- <fill:description> -->
<markdown> <!-- <markdown> -->
I love everything from making distributed systems, to physically building them. I'm in my element when I'm <!-- 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. <!-- making software with Python, and deploying it via Docker. -->
</markdown> <!-- </markdown> -->
</fill:description> <!-- </fill:description> -->
</x-project> </x-project>
<!-- <x-project id="gunnar"> --> <x-project id="gunnar">
<!-- <fill:img> --> <fill:img>
<!-- <img src="/assets/gunnar.jpg" class="person"> --> <img src="/assets/gunnar.jpg" class="person">
<!-- </fill:img> --> </fill:img>
<!-- <fill:title> --> <fill:title>
<!-- <markdown> --> <markdown>
<!-- # Gunnar Huscroft --> # Gunnar Huscroft
<!-- </markdown> --> </markdown>
<!-- <x-link href="projects.html" show="c0re"> --> <x-link href="projects.html" show="c0re">
<!-- <markdown> --> <markdown>
<!-- #### CEO of c0re (same thing) --> #### CEO of c0re (same thing)
<!-- </markdown> --> </markdown>
<!-- </x-link> --> </x-link>
<!-- </fill:title> --> </fill:title>
<!-- <fill:links> --> <fill:links>
<!-- <x-link.github href="Ghussy"></x-link.github> --> <x-link.github href="Ghussy"></x-link.github>
<!-- <x-link.website href="https://churchofjesuschrist.org/" referencing="Gunnar"></x-link.website> --> <!-- <x-link.website href="https://churchofjesuschrist.org/" referencing="Gunnar"></x-link.website> -->
<!-- <x-link.youtube href="UCApj2bfCQRDWym4684z2TXQ"></x-link.youtube> --> <x-link.youtube href="UCApj2bfCQRDWym4684z2TXQ"></x-link.youtube>
<!-- <x-link.linkedin href="gunnarhuscroft"></x-link.linkedin> --> <x-link.linkedin href="gunnarhuscroft"></x-link.linkedin>
<!-- <x-link.x href="ChEEEky_SCRUB"></x-link.x> --> <x-link.x href="ChEEEky_SCRUB"></x-link.x>
<!-- </fill:links> --> <x-link.instagram href=""></x-link.instagram>
<!-- <fill:subtitle> --> </fill:links>
<!-- <x-blockquote cite="C.S. Lewis"> --> <fill:subtitle>
<!-- Nothing but the courage and unselfishness of individuals is ever going to make any system work properly --> <x-blockquote cite="C.S. Lewis">
<!-- </x-blockquote> --> Nothing but the courage and unselfishness of individuals is ever going to make any system work properly
<!-- </fill:subtitle> --> </x-blockquote>
<!-- <fill:description> --> <!-- <x-blockquote cite="Gunnar"> -->
<!-- <markdown> --> <!-- Placeholder -->
<!-- Some people believe in test-driven development, or compiler-driven development. But I believe in values-driven --> <!-- </x-blockquote> -->
<!-- development. My passion lies in using my skills to help lift other people up, and leave the world better than I --> </fill:subtitle>
<!-- found it. --> <!-- <fill:description> -->
<!-- </markdown> --> <!-- <markdown> -->
<!-- </fill:description> --> <!-- Some people believe in test-driven development, or compiler-driven development. But I believe in values-driven -->
<!-- </x-project> --> <!-- development. My passion lies in using my skills to help lift other people up, and leave the world better than I -->
<x-project id="khayden"> <!-- found it. -->
<!-- </markdown> -->
<!-- </fill:description> -->
</x-project>
<x-project class="project-alt" id="khayden">
<fill:img> <fill:img>
<img src="/assets/khayden.jpg" class="person"> <img src="/assets/khayden.jpg" class="person">
</fill:img> </fill:img>
@ -130,13 +134,13 @@
You only live once, die trying You only live once, die trying
</x-blockquote> </x-blockquote>
</fill:subtitle> </fill:subtitle>
<fill:description> <!-- <fill:description> -->
<markdown> <!-- <markdown> -->
Just a guy making cool stuff for the love of the game. Like fast beep boops too 🎶⚡️ <!-- Just a guy making cool stuff for the love of the game. Like fast beep boops too 🎶⚡️ -->
</markdown> <!-- </markdown> -->
</fill:description> <!-- </fill:description> -->
</x-project> </x-project>
<x-project class="project-alt" id="isaac"> <x-project id="isaac">
<fill:img> <fill:img>
<img src="/assets/isaac.jpg" class="person"> <img src="/assets/isaac.jpg" class="person">
</fill:img> </fill:img>
@ -161,12 +165,12 @@
Pog Pog
</x-blockquote> </x-blockquote>
</fill:subtitle> </fill:subtitle>
<fill:description> <!-- <fill:description> -->
<markdown> <!-- <markdown> -->
I'm a software engineer and computer scientist who loves harnessing the power of technology to solve problems! <!-- 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 <!-- Ever since I was 7, my specialization has always been in looking for problems to solve, and working with people -->
to solve them. <!-- to solve them. -->
</markdown> <!-- </markdown> -->
</fill:description> <!-- </fill:description> -->
</x-project> </x-project>
</x-tab.content> </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 { :root {
--energy: 0px; --energy: 0px;
--page-width: min(100%, 1024px); --page-width: min(100%, 1024px);
color: white; color: white;
} }
html {
color-scheme: dark;
font-family: system-ui;
}
.title { .title {
font-size: min(10vw, 36pt); font-size: min(10vw, 36pt);
margin-bottom: 48px; margin-bottom: 48px;
@ -18,6 +27,12 @@
h1 { h1 {
font-size: 48pt; font-size: 48pt;
} }
@media (--tablet) {
text-align: center;
display: flex;
flex-direction: column-reverse;
}
} }
center:has(> blockquote) { center:has(> blockquote) {
@ -43,11 +58,10 @@ blockquote {
&+p { &+p {
text-align: right; text-align: right;
} }
}
html { @media (--phone) {
color-scheme: dark; margin: 0px auto;
font-family: system-ui; }
} }
#page-content { #page-content {
@ -87,6 +101,20 @@ html {
&>div { &>div {
padding: 16px; padding: 16px;
} }
@media (--phone) {
flex-direction: column;
padding: 18px;
&>div {
padding-top: 0;
padding-bottom: 0;
}
p {
font-size: 14pt;
}
}
} }
.project-title { .project-title {
@ -100,6 +128,10 @@ html {
.description { .description {
width: 100%; width: 100%;
@media (--phone) {
width: unset;
}
} }
.links { .links {
@ -127,6 +159,24 @@ html {
font-weight: bold; font-weight: bold;
border-bottom: solid 6px #eee; 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 { .figure {
@ -193,57 +243,4 @@ a {
color: inherit; color: inherit;
/* no underline */ /* no underline */
text-decoration: none; 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;
}
}
} }