diff --git a/.gitattributes b/.gitattributes index 0b5b3d4..90fc636 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,5 @@ *.jpg filter=lfs diff=lfs merge=lfs -text *.jpeg filter=lfs diff=lfs merge=lfs -text *.pxm filter=lfs diff=lfs merge=lfs -text +*.mov filter=lfs diff=lfs merge=lfs -text +*.mp4 filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore index 13dbcb9..2ca23d2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,11 @@ node_modules/ public/ +/documentation/mirrors/ /resources/ .hugo_build.lock *.log *.orig *~ + +# Backup files for Markdown files processed in-place with sed +*.md-e diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..6563459 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,18 @@ +[submodule "themes/platters"] + path = themes/platters + url = nutmeg:git/hugo-theme-platters.git +[submodule "themes/termlite"] + path = themes/termlite + url = git@github.com:erynofwales/hugo-theme-termlite.git +[submodule "themes/resource-builders"] + path = themes/resource-builders + url = git@github.com:erynofwales/hugo-resource-builders.git +[submodule "themes/image-utils"] + path = themes/image-utils + url = git@github.com:erynofwales/hugo-image-utilities.git +[submodule "themes/photostream"] + path = themes/photostream + url = git@github.com:erynofwales/hugo-theme-photostream.git +[submodule "themes/feeds"] + path = themes/feeds + url = git@github.com:erynofwales/hugo-theme-feeds.git diff --git a/.nvim/after/ftplugin/css.lua b/.nvim/after/ftplugin/css.lua index db46984..886a868 100644 --- a/.nvim/after/ftplugin/css.lua +++ b/.nvim/after/ftplugin/css.lua @@ -1,4 +1,4 @@ -- Eryn Wells -vim.bo.shiftwidth = 4 -vim.bo.softtabstop = 4 +vim.bo.shiftwidth = 2 +vim.bo.softtabstop = 2 diff --git a/.nvim/ftdetect/html.lua b/.nvim/ftdetect/html.lua index 6fedaca..1c8cf86 100644 --- a/.nvim/ftdetect/html.lua +++ b/.nvim/ftdetect/html.lua @@ -2,7 +2,7 @@ local filetypedetectGroup = vim.api.nvim_create_augroup("HugoHTMLTemplates", {clear = true}) vim.api.nvim_create_autocmd({"BufRead", "BufNewFile"}, { - pattern = {"*/layouts/*.html"}, + pattern = {"**/layouts/**/*.html"}, group = filetypedetectGroup, command = "set ft=gohtmltmpl", }) diff --git a/Makefile b/Makefile index fad8aee..72bf627 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,9 @@ # Eryn Wells +BUILD_DIR=public + +CONTENT_PATH=content + DEPLOY_USER=eryn DEPLOY_HOSTNAME=nutmeg.erynwells.me DEPLOY_PATH=/srv/www/erynwells.me/html @@ -12,13 +16,16 @@ NETHACK_LOGFILE_DATA_FILE=data/nethack/logfile/$(HOSTNAME).json .PHONY: site deploy clean -site: nethack +site: @echo "Building site" - hugo + hugo --buildFuture --enableGitInfo --destination "$(BUILD_DIR)" deploy: site @echo "Deploying to $(DEPLOY_LOCATION)" - rsync -avz --no-times --no-perms --delete public/ $(DEPLOY_LOCATION) + rsync -avz --no-times --no-perms --delete "$(BUILD_DIR)/" "$(DEPLOY_LOCATION)" + git tag -f deploy-$(shell date +%Y-%m-%d) + +deployall: nethack deploy nethack: nethack-logfile nethack-commit @@ -32,4 +39,4 @@ nethack-commit: $(NETHACK_LOGFILE_DATA_FILE) if ! git diff --quiet $<; then git commit -m "Update Nethack logfile for $(HOSTNAME)" -- $<; fi clean: - rm -rf public/ + rm -rf "$(BUILD_DIR)/" diff --git a/archetypes/link.md b/archetypes/link.md new file mode 100644 index 0000000..5a8d835 --- /dev/null +++ b/archetypes/link.md @@ -0,0 +1,9 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +slug: link-{{ .Name }} +date: {{ .Date }} +categories: links +draft: true +tags: [] +--- + diff --git a/archetypes/weeknotes.md b/archetypes/weeknotes.md new file mode 100644 index 0000000..1bae5a0 --- /dev/null +++ b/archetypes/weeknotes.md @@ -0,0 +1,10 @@ +--- +title: "Notes on {{ time.Now.Format "2006" }}W%%WEEK_NUMBER%%" +slug: weeknotes-{{ time.Now.Format "2006" }}w%%WEEK_NUMBER%% +date: {{ .Date | time.Format "2006-01-02" }} +categories: weeknotes +tags: + - Weeknotes +draft: true +--- + diff --git a/assets/css/099_format_tweaks.css b/assets/css/099_format_tweaks.css new file mode 100644 index 0000000..453f2cc --- /dev/null +++ b/assets/css/099_format_tweaks.css @@ -0,0 +1,18 @@ + + + + + +/************************ + * PARAGRAPH-SPACED LIST + ************************/ + +p + .paragraph-spaced-list { + margin-block-start: var(--space-paragraph); +} + +.paragraph-spaced-list { + li + li { + margin-block-start: var(--space-paragraph); + } +} diff --git a/assets/css/099_home_latest.css b/assets/css/099_home_latest.css new file mode 100644 index 0000000..7fb9e44 --- /dev/null +++ b/assets/css/099_home_latest.css @@ -0,0 +1,42 @@ +.home-latest { + display: grid; + grid-column: main-start / main-end; + grid-template-columns: 1fr 1fr 1fr 1fr; + grid-template-rows: min-content min-content; + grid-template-areas: + "blog1 blog1 blog2 blog2" + "photo1 photo2 photo3 photo4"; + + .home-latest__blog { + margin-block-end: var(--space-m); + } + + .home-latest__blog:nth-of-type(1) { + grid-area: blog1; + border-right: 2px dashed var(--gray6); + padding-inline-end: var(--space-s); + } + + .home-latest__blog:nth-of-type(2) { + grid-area: blog2; + padding-inline-start: var(--space-s); + } + + .home-latest__photo { + } +} + +@media screen and (max-width: 480px) { + .home-latest { + grid-template-columns: 1fr 1fr; + grid-template-rows: repeat(min-content, 4); + grid-template-areas: + "blog1 blog2" + "photo1 photo2" + "photo3 photo4"; + } +} + +p + .home-latest { + margin-block-start: var(--space-paragraph); +} diff --git a/assets/css/099_nethack.css b/assets/css/099_nethack.css new file mode 100644 index 0000000..3667e30 --- /dev/null +++ b/assets/css/099_nethack.css @@ -0,0 +1,100 @@ + + + + + +/****************** + * NETHACK LOGFILE + ******************/ + +#dungeon-background { + width: 100vw; + height: 100vh; + position: fixed; + top: 0; + left: 0; + z-index: -1; + filter: brightness(0.3); +} + +.nethack-logfile { + margin-inline-start: 0; + padding-inline-start: 0; + + .nethack-logentry { + align-items: first baseline; + display: grid; + grid-template-columns: min-content min-content auto min-content; + grid-template-areas: + "list-marker entry-marker entry-date entry-character-descriptor" + ". . entry-description entry-description" + ". . entry-stats entry-stats"; + gap: var(--space-xs); + margin-inline-start: 0; + } +} + + +.nethack-logentry { + &:not(:last-child) { + margin-block-end: var(--space-l); + } + + &::before { + grid-area: list-marker; + } + + .nethack-logentry__marker { + grid-area: entry-marker; + } + + .nethack-logentry__date { + grid-area: entry-date; + line-height: 1; + margin: 0; + padding: 0; + } + + .nethack-logentry__character-descriptor { + font-family: var(--font-family-monospace); + font-size: var(--text-s); + grid-area: entry-character-descriptor; + line-height: 1; + white-space: nowrap; + } + + .nethack-logentry__description { + grid-area: entry-description; + margin: 0; + } + + .nethack-logentry__stats { + border: 0; + color: var(--text-color-secondary); + font-family: var(--font-family-monospace); + font-size: var(--text-s); + grid-area: entry-stats; + margin-block: 0; + width: 100%; + -webkit-border-horizontal-spacing: 0; + -webkit-border-vertical-spacing: 0; + } + + .nethack-logentry__stats { + padding: 0; + text-transform: uppercase; + vertical-align: bottom; + white-space: nowrap; + + thead { + font-weight: bolder; + } + + .nethack-logentry__score, + .nethack-logentry__hp, + .nethack-logentry__level { + width: 16rem; + text-align: right; + } + } +} diff --git a/assets/images/memes/not-doing-it.png b/assets/images/memes/not-doing-it.png new file mode 100644 index 0000000..0dd9974 Binary files /dev/null and b/assets/images/memes/not-doing-it.png differ diff --git a/assets/scripts/nethack/dungeon.js b/assets/scripts/nethack/dungeon.js index 0c8eabb..6203f94 100644 --- a/assets/scripts/nethack/dungeon.js +++ b/assets/scripts/nethack/dungeon.js @@ -402,11 +402,11 @@ class TunnelGenerator { } /** - * Dig a corridor from fromPoint to toPoint, assuming that both points are adjacent to valid locations for doors on - * the map. + * Dig a corridor from fromPoint to toPoint, assuming that both points are + * adjacent to valid locations for doors on the map. * - * This is as close a copy of dig_corridor in the Nethack source as I could muster. It's not exactly pretty. This - * method assumed + * This is as close a copy of dig_corridor in the Nethack source as I could + * muster. It's not exactly pretty. This method assumed */ #digCorridorFromPointToPoint(p, fromPoint, toPoint) { const MAX_STEPS = 500; @@ -711,6 +711,8 @@ new p5(p => { p.setup = () => { const container = document.querySelector('#dungeon-background'); + console.assert(container, "Missing #dungeon-background element"); + canvasWidth = parseFloat(getComputedStyle(container).width); canvasHeight = parseFloat(getComputedStyle(container).height); @@ -731,9 +733,11 @@ new p5(p => { grid = new Grid(gridBounds.size.width, gridBounds.size.height); grid.generate(p, NRandomRoomsGenerator, TunnelGenerator); - } + }; p.draw = () => { + console.log("Drawing"); + p.textSize(CELL_HEIGHT); for (let y = 0; y < grid.height; y++) { diff --git a/assets/scripts/railroad-utils.js b/assets/scripts/railroad-utils.js index 79b60e9..d57777d 100644 --- a/assets/scripts/railroad-utils.js +++ b/assets/scripts/railroad-utils.js @@ -1,8 +1,4 @@ -{{ with resources.Get "scripts/lib/railroad.js" | fingerprint "sha512" }} -import rr from "{{ .RelPermalink }}"; -{{ else }} - {{ errorf "Unable to get railroad.js resource" }} -{{ end }} +import rr from "scripts/lib/railroad.js"; class RailroadDiagramManager { constructor() { diff --git a/assets/scripts/rubiks/scrambler.js b/assets/scripts/rubiks/scrambler.js new file mode 100644 index 0000000..10a03c3 --- /dev/null +++ b/assets/scripts/rubiks/scrambler.js @@ -0,0 +1,123 @@ +class RubiksCubeScrambler extends HTMLElement { + static #RandomMoveHysteresisMaxLength = 2; + + #shadowRoot; + #movesListElement; + + #numberOfMovesToGenerate = 25; + + constructor() { + super(); + this.#shadowRoot = this.attachShadow({ mode: "open" }); + } + + scramble() { + console.log("Randomizing Rubik's cube..."); + + const movesList = this.#movesListElement; + + while (movesList.childElementCount > this.#numberOfMovesToGenerate) { + movesList.removeChild(movesList.lastChild); + } + + let randomMoveHysteresis = []; + + for (let i = 0; i < this.#numberOfMovesToGenerate; i++) { + const randomMove = this.#randomMove(randomMoveHysteresis); + + let moveItem; + if (i < movesList.childElementCount) { + moveItem = movesList.children[i]; + } else { + moveItem = document.createElement("li"); + movesList.appendChild(moveItem); + } + + moveItem.classList.add("scrambler__move"); + moveItem.classList.remove("scrambler__move--start", "scrambler__move--end"); + + if (randomMove.includes("2")) { + moveItem.classList.add("scrambler__move--start"); + } else if (randomMove.includes("'")) { + moveItem.classList.add("scrambler__move--end"); + } + + moveItem.innerText = randomMove; + } + } + + #randomMove(hysteresis) { + const faces = "FBLRUD"; + + let move; + do { + move = faces.charAt(Math.floor(Math.random() * faces.length)); + } while (hysteresis && hysteresis.includes(move)); + + if (hysteresis) { + hysteresis.unshift(move); + while (hysteresis.length > RubiksCubeScrambler.#RandomMoveHysteresisMaxLength) { + hysteresis.pop(); + } + } + + const modifierFactor = Math.random(); + if (modifierFactor < 0.33333) { + move = "2" + move; + } else if (modifierFactor < 0.666666) { + move = move + "'"; + } + + return move; + } + + #removeAllMoves() { + const element = this.#movesListElement; + while (element.hasChildNodes()) { + element.removeChild(element.lastChild); + } + } + + // MARK: Custom Element + + connectedCallback() { + let template = document.getElementById("rubiks-cube-scrambler-template"); + console.assert(template, "Couldn't find RubiksCubeScrambler component template in the document"); + + const shadowRoot = this.#shadowRoot; + shadowRoot.appendChild(template.content.cloneNode(true)); + + this.#movesListElement = shadowRoot.querySelector(".scrambler__move-list"); + + shadowRoot + .querySelector("button[name='scramble']") + .addEventListener("click", () => this.scramble()); + + const patternLengthInputElement = shadowRoot.querySelector(".scrambler__pattern-length > input"); + patternLengthInputElement.value = this.#numberOfMovesToGenerate; + patternLengthInputElement.addEventListener("input", event => { + try { + const integerValue = parseInt(event.target.value); + this.#numberOfMovesToGenerate = integerValue; + } catch (e) { + console.error("Non-integer value of pattern length field", e); + } + }); + + this.scramble(); + } + + attributeChangedCallback(name, oldValue, newValue) { + console.debug("RubiksCubeScrambler attribute changed", name, oldValue, newValue); + if (name === "count") { + try { + let newIntValue = parseInt(newValue); + this.#numberOfMovesToGenerate = newIntValue; + } catch (e) { + console.error("`count` attribute should have an integer value.", e); + } + } + } +} + +window.customElements.define("rubiks-cube-scrambler", RubiksCubeScrambler); diff --git a/assets/scripts/ruby_switch.js b/assets/scripts/ruby_switch.js new file mode 100644 index 0000000..4556eb7 --- /dev/null +++ b/assets/scripts/ruby_switch.js @@ -0,0 +1,169 @@ +// Eryn Wells + +class RubySwitch extends HTMLElement { + static controlSizeInPixels = 32; + static thumbTransitionDuration = 0.1; + + static settings = [ + { + id: "ruby-switch-none", + value: "none", + label: "あ" + }, + { + id: "ruby-switch-both", + value: "both", + label: "a", + default: true + }, + { + id: "ruby-switch-hidden", + value: "hidden", + label: "ab" + }, + ]; + + #root; + #thumb; + + constructor() { + super(); + + this.#updateValue(RubySwitch.settings.find(obj => obj.default).value); + this.addEventListener("RubyStyleChanged", event => { + this.#updateValue(event.detail.style); + }); + + this.#root = this.attachShadow({ mode: "closed" }); + this.#buildShadowDOM(); + + this.#updateThumbPosition(this.#root.querySelector(".control[data-default]")); + } + + #updateValue(style) { + this.setAttribute("value", style); + } + + get #stylesheet() { + const controlSize = RubySwitch.controlSizeInPixels; + const halfControlSize = controlSize / 2; + + return ` + #ruby-controls { + box-sizing: border-box; + display: inline-block; + position: relative; + } + + #controls { + border: none; + box-sizing: border-box; + display: inline grid; + grid-template-columns: repeat(3, ${controlSize}px); + margin: 0; + overflow: none; + padding: 0; + } + + #thumb { + box-sizing: border-box; + box-shadow: 2px 2px 6px #ccc; + border: 0.5px solid #aaa; + border-radius: ${halfControlSize}px; + position: absolute; + top: 0; + height: ${controlSize}px; + width: ${controlSize}px; + z-index: 50; + transition: left ${RubySwitch.thumbTransitionDuration}s; + } + + .control { + aspect-ratio: 1; + display: flex; + justify-content: center; + align-items: center; + height: ${controlSize}px; + width: ${controlSize}px; + } + + b { + font-weight: normal; + cursor: pointer; + } + + label { + z-index: 2; + text-align: center; + } + + #ruby-switch-both { + } + `; + } + + #buildShadowDOM() { + const root = this.#root; + + const style = document.createElement("style"); + style.textContent = this.#stylesheet; + root.appendChild(style); + + let container = document.createElement("div"); + container.id = "ruby-controls"; + root.appendChild(container); + + let controls = document.createElement("div"); + controls.id = "controls"; + container.appendChild(controls); + + for (const desc of RubySwitch.settings) { + let control = document.createElement("div"); + control.classList.add("control") + control.id = desc.id; + + control.dataset.value = desc.value; + if (desc.default) { + control.dataset.default = ""; + } + + controls.appendChild(control); + + control.addEventListener("click", event => { + event.stopPropagation(); + event.preventDefault(); + + this.#updateThumbPosition(event.currentTarget); + + this.#root.dispatchEvent(new CustomEvent("RubyStyleChanged", { + bubbles: true, + composed: true, + detail: { + style: control.dataset.value, + }, + })); + }, { capture: true }); + + const label = document.createElement("b"); + label.innerHTML = desc.label; + control.appendChild(label); + } + + const thumb = document.createElement("div"); + this.#thumb = thumb; + thumb.id = "thumb"; + container.appendChild(thumb); + } + + #updateThumbPosition(selectedControl) { + const controls = this.#root.querySelector("#controls"); + + const trackBoundingRect = controls.getBoundingClientRect(); + const controlBoundingRect = selectedControl.getBoundingClientRect(); + + const offset = controlBoundingRect.left - trackBoundingRect.left; + this.#thumb.style.left = `${offset}px`; + } +} + +customElements.define("ruby-switch", RubySwitch); diff --git a/assets/styles/blog.css b/assets/styles/blog.css deleted file mode 100644 index ab40f5a..0000000 --- a/assets/styles/blog.css +++ /dev/null @@ -1,79 +0,0 @@ -:root { - --post-item-highlight-color: #efefef; - - --blog-list-grid-template-columns: minmax(min-content, 10vh) minmax(min-content, 3vh) auto max-content max-content; -} -@media (prefers-color-scheme: dark) { - :root { - --post-item-highlight-color: #121212; - } -} - -.blog > .highlight { margin-block-end: var(--body-item-spacing); } - -.post-nav { - align-items: baseline; - display: flex; - margin-top: 3.5rem; -} - -.post-nav .next { - margin-left: auto; -} - -.post-single footer { - margin-block-start: var(--body-item-spacing); -} - -.blog.list > ul { - list-style: none; -} -.blog.list > ul > li { - align-items: baseline; - border-radius: 6px; - display: grid; - gap: 1rem; - grid-template-columns: var(--blog-list-grid-template-columns); - margin-block-end: 0.25rem; - transition: background-color 0.25s; -} -.blog.list > ul > li:hover { - background-color: var(--post-item-highlight-color); -} -.blog.list > ul > li > a { color: inherit; } -.blog.list > ul > li > a:hover { text-decoration: none; } -.blog.list > ul > li > time:nth-child(2) { text-align: end; } -.blog.list > ul > li > .draft { align-self: center; } - -@supports (grid-template-columns: subgrid) { - .blog.list { - display: grid; - gap: 1rem; - grid-template-columns: var(--blog-list-grid-template-columns); - } - .blog.list > ul { - display: grid; - row-gap: 0.25rem; - grid-column: 1 / -1; - grid-template-columns: subgrid; - list-style: none; - } - .blog.list > ul > li { - display: grid; - grid-column: 1 / -1; - grid-template-columns: subgrid; - margin-block-end: 0; - } - - .blog.list > h5 { - grid-column: 1 / -1; - margin-block: 1rem 0; - } - .blog.list > h5:first-child { - margin-block-start: 0; - } -} - -.blog.list > ul > li > :first-child { - text-align: end; -} diff --git a/assets/styles/development.css b/assets/styles/development.css deleted file mode 100644 index 00cd343..0000000 --- a/assets/styles/development.css +++ /dev/null @@ -1,102 +0,0 @@ -/* Eryn Wells */ - -details:has(.photo-params.debug) { - margin-inline: var(--body-item-spacing); - max-width: var(--content-width); - width: 100%; -} - -.draft { - color: red; - display: inline-block; - font-family: 'SF Pro', sans-serif; - font-size: 1.5rem; - font-weight: bold; - letter-spacing: 3px; - text-transform: uppercase; -} - -.draft:before { - content: "["; -} - -.draft:after { - content: "]"; -} - -#debug-page-info { - background-color: var(--background-color); - border: 1px solid var(--separator-color); - border-radius: 6px; - box-shadow: 4px 5px 5px var(--box-shadow-color); - box-sizing: border-box; - font-size: 12px; - padding: 0.5rem; - position: fixed; - left: 12px; - bottom: 12px; - width: max-content; -} - -#debug-page-info > details { - margin: 0.5rem; -} - -#debug-page-info > summary { - font-family: var(--font-family-heading); -} - -#debug-page-info h4 { - margin-block: 1rem; - margin-inline-start: 2rem; -} - -#debug-page-info table { - border: 0; - border-color: rgb(var(--dk-gray)); - display: block; - margin-inline-start: 2rem; - width: 100%; -} - -#debug-page-info table > tbody { - border: 1px solid; -} - -#debug-page-info table > tbody + tbody { - border-top: 1px solid; -} - -#debug-page-info td { - border: 1px dotted; - border-left: 1px solid; - padding: 0.3em; -} - -#debug-page-info table > tbody > tr:nth-child(even) { - background-color: var(--separator-color); -} - -.photos-params.debug { - width: calc(100% - var(--body-item-spacing)); -} - -.photo-params.debug > thead { - font-size: 2rem; - font-weight: bold; - border-bottom: 2px solid rgb(var(--dk-gray)); -} - -.photo-params.debug > tbody > tr > td { - border: 1px solid var(--photo-params-border-color); - vertical-align: top; -} - -.photo-params.debug > tbody > tr > td:first-of-type { - width: max-content; -} - -.photo-params.debug > tbody > tr > td:last-of-type { - word-wrap: anywhere; - overflow: scroll; -} diff --git a/assets/styles/monokai.css b/assets/styles/monokai.css deleted file mode 100644 index 685f3d9..0000000 --- a/assets/styles/monokai.css +++ /dev/null @@ -1,192 +0,0 @@ -:root { - --highlight-background-color: rgb(var(--super-lt-gray)); - --highlight-foreground-color: var(--foreground-body-color); -} -@media (prefers-color-scheme: dark) { - :root { - } -} - -.chroma { - line-height: var(--line-height); -} - -.bg { - color: var(--highlight-foreground-color); - background-color: var(--highlight-background-color); -} - -.chroma { - color: var(--highlight-foreground-color); - background-color: var(--highlight-background-color); -} - -/* Other */ .chroma .x { } -/* Error */ .chroma .err { color: #960050; background-color: #1e0010 } -/* CodeLine */ .chroma .cl { } -/* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; } -/* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; } -/* LineHighlight */ .chroma .hl { background-color: #ffffcc } -/* LineNumbersTable */ .chroma .lnt { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f } -/* LineNumbers */ .chroma .ln { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f } -/* Keyword */ .chroma .k { color: #00a8c8 } -/* KeywordConstant */ .chroma .kc { color: #00a8c8 } -/* KeywordDeclaration */ .chroma .kd { color: #00a8c8 } -/* KeywordNamespace */ .chroma .kn { color: #f92672 } -/* KeywordPseudo */ .chroma .kp { color: #00a8c8 } -/* KeywordReserved */ .chroma .kr { color: #00a8c8 } -/* KeywordType */ .chroma .kt { color: #00a8c8 } -/* Name */ .chroma .n { color: #111111 } -/* NameAttribute */ .chroma .na { color: #75af00 } -/* NameBuiltin */ .chroma .nb { color: #111111 } -/* NameBuiltinPseudo */ .chroma .bp { color: #111111 } -/* NameClass */ .chroma .nc { color: #75af00 } -/* NameConstant */ .chroma .no { color: #00a8c8 } -/* NameDecorator */ .chroma .nd { color: #75af00 } -/* NameEntity */ .chroma .ni { color: #111111 } -/* NameException */ .chroma .ne { color: #75af00 } -/* NameFunction */ .chroma .nf { color: #75af00 } -/* NameFunctionMagic */ .chroma .fm { color: #111111 } -/* NameLabel */ .chroma .nl { color: #111111 } -/* NameNamespace */ .chroma .nn { color: #111111 } -/* NameOther */ .chroma .nx { color: #75af00 } -/* NameProperty */ .chroma .py { color: #111111 } -/* NameTag */ .chroma .nt { color: #f92672 } -/* NameVariable */ .chroma .nv { color: #111111 } -/* NameVariableClass */ .chroma .vc { color: #111111 } -/* NameVariableGlobal */ .chroma .vg { color: #111111 } -/* NameVariableInstance */ .chroma .vi { color: #111111 } -/* NameVariableMagic */ .chroma .vm { color: #111111 } -/* Literal */ .chroma .l { color: #ae81ff } -/* LiteralDate */ .chroma .ld { color: #d88200 } -/* LiteralString */ .chroma .s { color: #d88200 } -/* LiteralStringAffix */ .chroma .sa { color: #d88200 } -/* LiteralStringBacktick */ .chroma .sb { color: #d88200 } -/* LiteralStringChar */ .chroma .sc { color: #d88200 } -/* LiteralStringDelimiter */ .chroma .dl { color: #d88200 } -/* LiteralStringDoc */ .chroma .sd { color: #d88200 } -/* LiteralStringDouble */ .chroma .s2 { color: #d88200 } -/* LiteralStringEscape */ .chroma .se { color: #8045ff } -/* LiteralStringHeredoc */ .chroma .sh { color: #d88200 } -/* LiteralStringInterpol */ .chroma .si { color: #d88200 } -/* LiteralStringOther */ .chroma .sx { color: #d88200 } -/* LiteralStringRegex */ .chroma .sr { color: #d88200 } -/* LiteralStringSingle */ .chroma .s1 { color: #d88200 } -/* LiteralStringSymbol */ .chroma .ss { color: #d88200 } -/* LiteralNumber */ .chroma .m { color: #ae81ff } -/* LiteralNumberBin */ .chroma .mb { color: #ae81ff } -/* LiteralNumberFloat */ .chroma .mf { color: #ae81ff } -/* LiteralNumberHex */ .chroma .mh { color: #ae81ff } -/* LiteralNumberInteger */ .chroma .mi { color: #ae81ff } -/* LiteralNumberIntegerLong */ .chroma .il { color: #ae81ff } -/* LiteralNumberOct */ .chroma .mo { color: #ae81ff } -/* Operator */ .chroma .o { color: #f92672 } -/* OperatorWord */ .chroma .ow { color: #f92672 } -/* Punctuation */ .chroma .p { color: #111111 } -/* Comment */ .chroma .c { color: #75715e } -/* CommentHashbang */ .chroma .ch { color: #75715e } -/* CommentMultiline */ .chroma .cm { color: #75715e } -/* CommentSingle */ .chroma .c1 { color: #75715e } -/* CommentSpecial */ .chroma .cs { color: #75715e } -/* CommentPreproc */ .chroma .cp { color: #75715e } -/* CommentPreprocFile */ .chroma .cpf { color: #75715e } -/* Generic */ .chroma .g { } -/* GenericDeleted */ .chroma .gd { } -/* GenericEmph */ .chroma .ge { font-style: italic } -/* GenericError */ .chroma .gr { } -/* GenericHeading */ .chroma .gh { } -/* GenericInserted */ .chroma .gi { } -/* GenericOutput */ .chroma .go { } -/* GenericPrompt */ .chroma .gp { } -/* GenericStrong */ .chroma .gs { font-weight: bold } -/* GenericSubheading */ .chroma .gu { } -/* GenericTraceback */ .chroma .gt { } -/* GenericUnderline */ .chroma .gl { } -/* TextWhitespace */ .chroma .w { } - -@media (prefers-color-scheme: dark) { - /* Background */ .bg { color: #f8f8f2; background-color: #272822 } - /* PreWrapper */ .chroma { color: #f8f8f2; background-color: #272822; } - /* Other */ .chroma .x { } - /* Error */ .chroma .err { color: #960050; background-color: #1e0010 } - /* CodeLine */ .chroma .cl { } - /* LineTableTD */ .chroma .lntd { vertical-align: top; padding: 0; margin: 0; border: 0; } - /* LineTable */ .chroma .lntable { border-spacing: 0; padding: 0; margin: 0; border: 0; } - /* LineHighlight */ .chroma .hl { background-color: #ffffcc } - /* LineNumbersTable */ .chroma .lnt { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f } - /* LineNumbers */ .chroma .ln { white-space: pre; user-select: none; margin-right: 0.4em; padding: 0 0.4em 0 0.4em;color: #7f7f7f } - /* Keyword */ .chroma .k { color: #66d9ef } - /* KeywordConstant */ .chroma .kc { color: #66d9ef } - /* KeywordDeclaration */ .chroma .kd { color: #66d9ef } - /* KeywordNamespace */ .chroma .kn { color: #f92672 } - /* KeywordPseudo */ .chroma .kp { color: #66d9ef } - /* KeywordReserved */ .chroma .kr { color: #66d9ef } - /* KeywordType */ .chroma .kt { color: #66d9ef } - /* Name */ .chroma .n { } - /* NameAttribute */ .chroma .na { color: #a6e22e } - /* NameBuiltin */ .chroma .nb { color: inherit; } - /* NameBuiltinPseudo */ .chroma .bp { } - /* NameClass */ .chroma .nc { color: #a6e22e } - /* NameConstant */ .chroma .no { color: #66d9ef } - /* NameDecorator */ .chroma .nd { color: #a6e22e } - /* NameEntity */ .chroma .ni { } - /* NameException */ .chroma .ne { color: #a6e22e } - /* NameFunction */ .chroma .nf { color: #a6e22e } - /* NameFunctionMagic */ .chroma .fm { } - /* NameLabel */ .chroma .nl { } - /* NameNamespace */ .chroma .nn { } - /* NameOther */ .chroma .nx { color: #a6e22e } - /* NameProperty */ .chroma .py { } - /* NameTag */ .chroma .nt { color: #f92672 } - /* NameVariable */ .chroma .nv { color: inherit; } - /* NameVariableClass */ .chroma .vc { } - /* NameVariableGlobal */ .chroma .vg { } - /* NameVariableInstance */ .chroma .vi { } - /* NameVariableMagic */ .chroma .vm { } - /* Literal */ .chroma .l { color: #ae81ff } - /* LiteralDate */ .chroma .ld { color: #e6db74 } - /* LiteralString */ .chroma .s { color: #e6db74 } - /* LiteralStringAffix */ .chroma .sa { color: #e6db74 } - /* LiteralStringBacktick */ .chroma .sb { color: #e6db74 } - /* LiteralStringChar */ .chroma .sc { color: #e6db74 } - /* LiteralStringDelimiter */ .chroma .dl { color: #e6db74 } - /* LiteralStringDoc */ .chroma .sd { color: #e6db74 } - /* LiteralStringDouble */ .chroma .s2 { color: #e6db74 } - /* LiteralStringEscape */ .chroma .se { color: #ae81ff } - /* LiteralStringHeredoc */ .chroma .sh { color: #e6db74 } - /* LiteralStringInterpol */ .chroma .si { color: #e6db74 } - /* LiteralStringOther */ .chroma .sx { color: #e6db74 } - /* LiteralStringRegex */ .chroma .sr { color: #e6db74 } - /* LiteralStringSingle */ .chroma .s1 { color: #e6db74 } - /* LiteralStringSymbol */ .chroma .ss { color: #e6db74 } - /* LiteralNumber */ .chroma .m { color: #ae81ff } - /* LiteralNumberBin */ .chroma .mb { color: #ae81ff } - /* LiteralNumberFloat */ .chroma .mf { color: #ae81ff } - /* LiteralNumberHex */ .chroma .mh { color: #ae81ff } - /* LiteralNumberInteger */ .chroma .mi { color: #ae81ff } - /* LiteralNumberIntegerLong */ .chroma .il { color: #ae81ff } - /* LiteralNumberOct */ .chroma .mo { color: #ae81ff } - /* Operator */ .chroma .o { color: #f92672 } - /* OperatorWord */ .chroma .ow { color: #f92672 } - /* Punctuation */ .chroma .p { color: inherit; } - /* Comment */ .chroma .c { color: #75715e } - /* CommentHashbang */ .chroma .ch { color: #75715e } - /* CommentMultiline */ .chroma .cm { color: #75715e } - /* CommentSingle */ .chroma .c1 { color: #75715e } - /* CommentSpecial */ .chroma .cs { color: #75715e } - /* CommentPreproc */ .chroma .cp { color: #75715e } - /* CommentPreprocFile */ .chroma .cpf { color: #75715e } - /* Generic */ .chroma .g { } - /* GenericDeleted */ .chroma .gd { color: #f92672 } - /* GenericEmph */ .chroma .ge { font-style: italic } - /* GenericError */ .chroma .gr { } - /* GenericHeading */ .chroma .gh { } - /* GenericInserted */ .chroma .gi { color: #a6e22e } - /* GenericOutput */ .chroma .go { } - /* GenericPrompt */ .chroma .gp { } - /* GenericStrong */ .chroma .gs { font-weight: bold } - /* GenericSubheading */ .chroma .gu { color: #75715e } - /* GenericTraceback */ .chroma .gt { } - /* GenericUnderline */ .chroma .gl { } - /* TextWhitespace */ .chroma .w { } -} diff --git a/assets/styles/nethack.css b/assets/styles/nethack.css deleted file mode 100644 index d095485..0000000 --- a/assets/styles/nethack.css +++ /dev/null @@ -1,120 +0,0 @@ -/* Eryn Wells */ - -:root { - --logentry-background-color: var(--tag-background-color); - --logentry-foreground-color: var(--tag-text-color); -} - -:root { - --separator-color: rgb(var(--dk-gray)); - --box-shadow-color: rgba(var(--dk-gray), 0.8); - --body-code-background-color: rgb(var(--dk-gray)); - - --heading-color: rgb(var(--white)); - --header-series-arrow-foreground-color: rgb(var(--super-dk-gray)); - - --html-background-color: rgb(var(--black)); - --color: rgba(var(--white), 0.8); - - --platter-background-color: rgba(var(--black), var(--platter-background-opacity)); - --platter-backdrop-filter: brightness(0.66) blur(10px); - - --tag-foreground-color: rgb(var(--sub-lt-gray)); - --tag-background-color: rgb(var(--dk-gray)); - --tag-spacer-foreground-color: rgb(var(--super-dk-gray)); - --tag-hover-background-color: rgb(var(--super-dk-gray)); - --tag-hover-foreground-color: rgb(var(--mid-gray)); - - --twitter-icon: url(/icons/twitter-dark.svg); - --github-icon: url(/icons/github-dark.svg); - --instagram-icon: url(/icons/instagram-dark.svg); - --feed-icon: url(/icons/rss-dark.svg); -} - -main { - background: rgba(var(--black), 0.6); -} - -#dungeon-background { - width: 100vw; - height: 100vh; - position: fixed; - top: 0; - left: 0; - z-index: -1; - filter: brightness(0.3); -} - -.logfile { - margin-block-start: 0; - margin-inline-start: 0; - padding-inline-start: 0; -} - -.logfile > li { - align-items: first baseline; - color: var(--logentry-foreground-color); - background-color: var(--logentry-background-color); - border-radius: 6px; - display: grid; - grid-template-columns: 32px auto auto; - row-gap: 1rem; - margin-block-start: 2rem; - margin-inline-start: 0; - padding: 3rem; -} - -.logfile > li > .date { - grid-column-start: 2; - grid-row-start: 1; -} - -.logfile > li > h4.date { - margin: 0; - padding: 0; -} - -.logfile > li > .character-descriptor { - color: #aaa; - font-size: 1.5rem; - font-weight: 700; - grid-column-start: 3; - grid-row-start: 1; - text-align: right; - text-transform: uppercase; -} - -.logfile > li > p { - grid-column-start: 2; - grid-column-end: 4; - grid-row-start: 2; - margin: 0; -} - -.logfile > li > table.stats { - border: 0; - grid-column-start: 2; - grid-column-end: 4; - grid-row-start: 3; - margin-block-end: 0; - width: 100%; - -webkit-border-horizontal-spacing: 0; - -webkit-border-vertical-spacing: 0; -} - -.logfile > li > table.stats > tbody > tr > td { - border: 0; - color: #aaa; - font-size: 1.5rem; - font-weight: 700; - padding: 0; - text-transform: uppercase; - vertical-align: bottom; -} - -.logfile > li > table.stats > tbody > tr > td.score, -.logfile > li > table.stats > tbody > tr > td.hp, -.logfile > li > table.stats > tbody > tr > td.level { - width: 16rem; - text-align: right; -} diff --git a/assets/styles/photos.css b/assets/styles/photos.css deleted file mode 100644 index 923bc63..0000000 --- a/assets/styles/photos.css +++ /dev/null @@ -1,161 +0,0 @@ -:root { - --date-item-background-color: rgb(var(--lt-gray)); - - --photo-params-background-color: rgb(var(--lt-gray)); - --photo-params-container-background-color: rgb(var(--super-lt-gray)); - --photo-params-color: rgb(var(--sub-dk-gray)); - --photo-params-border-color: rgb(var(--super-lt-gray)); -} -@media (prefers-color-scheme: dark) { - :root { - --date-item-background-color: rgb(var(--dk-gray)); - - --photo-params-background-color: rgb(var(--dk-gray)); - --photo-params-container-background-color: rgb(var(--sub-dk-gray)); - --photo-params-color: rgb(var(--super-lt-gray)); - --photo-params-border-color: rgb(var(--sub-dk-gray)); - } -} - -.photos.list { - box-sizing: border-box; - max-width: none; - padding: 0 var(--body-item-spacing); - width: 100%; -} - -.photos.list { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); - gap: 4px; -} - -.photos.list > * { - margin-block-end: 0; -} - -.photos.page > nav { - margin-block-end: var(--body-item-spacing); -} - -.photos.list > a { - display: block; - line-height: 0; -} - -.photos.list > a > img { - border-radius: 3px; - image-orientation: from-image; -} - -.photos.list > div { - background-color: var(--date-item-background-color); - border-radius: 3px; - width: 100%; - height: 100%; - display: flex; - align-items: center; -} - -.photos.list > div > h6 { - display: block; - font-size: 5rem; - margin: 0 auto; - letter-spacing: 0; -} - -.photos.list > div > h6 > span { - text-align: end; - width: min-content; - position: relative; - display: inline-block; - padding-inline-end: 20px; -} - -.photos.list > div > h6 > span::after { - top: 6px; - right: 0px; - position: absolute; - display: block; - content: "⏵︎"; - font-size: 80%; -} -@media (max-width: calc(24px + 400px + 4px)) { - .photos.list > div > h6 > span { - width: max-content; - padding-block: calc(0.25 * var(--body-item-spacing)); - } - .photos.list > div > h6 > span::after { - content: ""; - } -} - -.photo-params { - padding-inline: calc(var(--body-item-spacing) / 2); -} - -.photo-params > .container { - display: block; - background-color: var(--photo-params-container-background-color); - border-radius: 10px; - margin: var(--body-item-spacing) auto; - padding: calc(var(--body-item-spacing) / 2); - max-width: calc(0.66 * var(--content-width)); -} - -.photo-params > .container > table { - background-color: var(--photo-params-background-color); - color: var(--photo-params-color); - border-collapse: collapse; - border-radius: 6px; - table-layout: fixed; - text-align: center; - width: 100%; -} - -.photo-params thead td { - border-bottom: 1px solid var(--photo-params-border-color); - font-size: 80%; - font-weight: bold; -} - -.photo-params tbody tr > td { - border: none; - border-bottom: 1px solid var(--photo-params-border-color); -} - -.photo-params tr.exposure-attributes > td { - border: none; - border-top: 1px solid var(--photo-params-border-color); - border-left: 1px solid var(--photo-params-border-color); -} - -.photo-params tr.exposure-attributes > td:first-child { - border-left: none; -} - -.photo-params td { - font-size: 75%; - padding: 1rem; -} - -.photo-params td:last-child { - text-align: end; -} - -.photo-params td:first-child { - text-align: start; -} - -.photo-params .make-model { - font-weight: bold; -} - -.photo-params .size { - border-left: 0; -} - -.photo-params .location { - border-right: 0; -} - diff --git a/assets/styles/railroad.css b/assets/styles/railroad.css deleted file mode 100644 index 6a75b33..0000000 --- a/assets/styles/railroad.css +++ /dev/null @@ -1,64 +0,0 @@ -:root { - --rect-fill: rgba(var(--mid-blue), 0.1); -} -@media (prefers-color-scheme: dark) { - :root { - --rect-fill: rgb(var(--mid-blue), 0.9); - } -} - -svg.railroad-diagram path { - stroke-width: 2; - stroke: var(--color); - fill: none; -} - -svg.railroad-diagram text { - font-family: var(--font-family-monospace); - text-anchor: middle; - white-space: pre; - fill: var(--color); -} - -svg.railroad-diagram text.diagram-text { - font-size: 11px; -} - -svg.railroad-diagram text.diagram-arrow { - font-size: 16px; -} - -svg.railroad-diagram text.label { - text-anchor: start; -} - -svg.railroad-diagram text.comment { - font: italic 12px var(--font-family-monospace); -} - -svg.railroad-diagram g.non-terminal text { - /*font-style: italic;*/ -} - -svg.railroad-diagram rect { - stroke-width: 2; - stroke: var(--color); - fill: var(--rect-fill); -} - -svg.railroad-diagram rect.group-box { - stroke: gray; - stroke-dasharray: 10 5; - fill: none; -} - -svg.railroad-diagram path.diagram-text { - stroke-width: 2; - stroke: var(--color); - fill: var(--html-background-color); - cursor: help; -} - -svg.railroad-diagram g.diagram-text:hover path.diagram-text { - fill: var(--rect-fill); -} diff --git a/assets/styles/root.css b/assets/styles/root.css deleted file mode 100644 index 1fddf29..0000000 --- a/assets/styles/root.css +++ /dev/null @@ -1,247 +0,0 @@ -@layer reset, typography, root, layout, template, page, utility; - -:root { - --black: 0, 0, 0; - --sub-dk-gray: 16, 16, 16; - --dk-gray: 32, 32, 32; - --super-dk-gray: 80, 80, 80; - --mid-gray: 128, 128, 128; - --sub-lt-gray: 175, 175, 175; - --lt-gray: 223, 223, 223; - --super-lt-gray: 240, 240, 240; - --white: 255, 255, 255; - - --lt-blue: 69, 212, 243; - --mid-blue: 26, 169, 239; - --dk-blue: 63, 46, 231; - --purple: 161, 49, 232; - --lilac: 187, 121, 245; - - --background: var(--white); - - --separator-color: rgb(var(--lt-gray)); - --header-border-color: var(--separator-color); - --footer-border-color: var(--separator-color); - - --box-shadow-color: rgba(var(--lt-gray), 0.8); - --header-box-shadow-color: var(--box-shadow-color); - - --body-item-spacing: 4rem; - --body-code-background-color: rgb(var(--super-lt-gray)); - - --header-series-arrow-foreground-color: rgb(var(--sub-dk-gray)); - - --html-background-color: rgb(var(--background)); - - --nav-bulleted-spacing: 0.75rem; - - --platter-background-color: rgba(var(--white), var(--platter-background-opacity)); - --platter-background-opacity: 0.6; - --platter-backdrop-filter: blur(10px); - - --content-width: 80rem; - - --tag-foreground-color: rgb(var(--super-dk-gray)); - --tag-background-color: rgb(var(--super-lt-gray)); - --tag-spacer-foreground-color: rgb(var(--super-dk-gray)); - --tag-hover-background-color: rgb(var(--sub-lt-gray)); - - --transition-duration: 0.7s; - - --menu-icon-size: 20px; -} - -@media (prefers-color-scheme: dark) { - :root { - --background: var(--black); - - --separator-color: rgb(var(--dk-gray)); - --box-shadow-color: rgba(var(--dk-gray), 0.8); - --body-code-background-color: rgb(var(--dk-gray)); - - --header-series-arrow-foreground-color: rgb(var(--super-dk-gray)); - - --html-background-color: rgb(var(--background)); - - --platter-background-color: rgba(var(--black), var(--platter-background-opacity)); - --platter-backdrop-filter: brightness(0.66) blur(10px); - - --tag-foreground-color: rgb(var(--sub-lt-gray)); - --tag-background-color: rgb(var(--dk-gray)); - --tag-spacer-foreground-color: rgb(var(--super-dk-gray)); - --tag-hover-background-color: rgb(var(--super-dk-gray)); - --tag-hover-foreground-color: rgb(var(--mid-gray)); - - } -} - -@layer root { - a { text-decoration: none; } - a:hover { - text-decoration: underline; - text-underline-offset: 0.12em; - } - a.hover-only { - color: var(--color); - transition: color 0.2s; - } - a.hover-only:hover { - text-decoration: underline; - transition: color 0.2s; - } - - blockquote { - border-inline-start: 4px solid var(--separator-color); - padding-inline-start: 2rem; - margin-inline-start: 2rem; - } - - code { - background-color: var(--body-code-background-color); - border-radius: 0.25rem; - display: inline-block; - padding-inline: 0.6rem; - } - code.nobg { - background: none; - border-radius: 0; - display: inline-block; - margin: 0; - padding: 0; - } - - details { width: 100%; } - - details:has(#TableOfContents) { - box-sizing: border-box; - border: 1px solid var(--separator-color); - padding: var(--body-item-spacing); - } - - fieldset { - box-sizing: border-box; - border: 1px solid var(--separator-color); - padding: var(--body-item-spacing); - padding-top: calc(var(--body-item-spacing) / 10); - } - - html { background-color: var(--html-background-color); } - - img { - height: auto; - max-width: 100%; - } - - img.circular { - shape-outside: circle(50%); - -webkit-clip-path: circle(50%); - clip-path: circle(50%); - } - - main { - box-sizing: border-box; - max-width: calc(var(--content-width) + 2 * var(--body-item-spacing)); - margin: var(--body-item-spacing) auto; - padding-inline: var(--body-item-spacing); - width: 100%; - } - - nav.bulleted > li:first-child::before { - content: ""; - margin-inline: 0; - } - - nav.bulleted > li::before { - color: var(--heading-color); - content: "•"; - font-size: 60%; - font-weight: normal; - opacity: 80%; - margin-inline: var(--nav-bulleted-spacing); - } - - ul, - ol, - dl, - ul > li, - ol > li, - dl > dt, - ul > li > ul, - ul > li > ol, - ol > li > ul, - ol > li > ol { - margin-inline-start: calc(var(--body-item-spacing) + 2px); - } - - header > span.series { - font-size: 1.75rem; - letter-spacing: 1px; - margin-inline-start: 0.5em; - } - - header > span.series::before { - color: var(--header-series-arrow-foreground-color); - content: "↳"; - margin-inline-end: 0.25em; - } - - .post-list { - list-style: none; - margin: 0; - padding: 0; - } - @supports (display: subgrid) { - .post-list { - align-items: baseline; - display: grid; - gap: 1em; - grid-template-columns: - minmax(150px, max-content) minmax(20px, max-content) 3px auto; - grid-template-areas: "month day line title"; - } - } - - .post-list li { - align-items: baseline; - border-radius: 6px; - display: grid; - gap: 1em; - padding: 0.1em; - } - - .post-title { - align-items: baseline; - display: flex; - flex-wrap: wrap; - gap: 0 4rem; - } - - .post-title h1 { - flex-grow: 1; - font-size: 1.8em; - margin-block: 0; - padding-bottom: 0; - } - - .post-title > .post-date { - color: var(--light-dim); - display: inline-block; - font-size: 1.75rem; - inline-size: min-content; - letter-spacing: 1px; - margin-block-start: 0.5rem; - white-space: nowrap; - } - - table { - border: 1px solid var(--separator-color); - border-collapse: collapse; - margin-inline: auto; - width: 50%; - } - - td, th { - border: 1px solid var(--separator-color); - padding-inline: 1rem; - } -} diff --git a/assets/styles/root/001_reset.css b/assets/styles/root/001_reset.css deleted file mode 100644 index 0d3eeb7..0000000 --- a/assets/styles/root/001_reset.css +++ /dev/null @@ -1,7 +0,0 @@ -@layer reset { - body, button, h1, h2, h3, h4, h5, h6, input, ol, ul, p, pre, textarea { - padding: 0; margin: 0; - } - - figure, figure .youtube { line-height: 1; } -} diff --git a/assets/styles/root/050_figures.css b/assets/styles/root/050_figures.css deleted file mode 100644 index 7b75591..0000000 --- a/assets/styles/root/050_figures.css +++ /dev/null @@ -1,62 +0,0 @@ -@layer root { - figcaption { - margin-block-start: 0.2em; - text-align: center; - } - - figure { - border-radius: 6px; - margin: 0; - margin-inline: 0; - overflow: hidden; - max-width: var(--content-width); - } - - figure > .container { - align-items: center; - display: flex; - justify-content: center; - gap: var(--body-item-spacing); - } - - figure.bordered { - padding: 0.5rem; - border: 2px solid #eee; - } - - figure a, - figure a:hover { - border: 0; - } - - figure img { - display: block; - border-radius: 6px; - height: auto; - max-width: var(--content-width); - } - - figure svg { - width: 100%; - height: auto; - } - - figure .youtube { - border-radius: 6px; - overflow: hidden; - max-width: var(--content-width); - width: 100%; - } - - .p5-sketch { - display: block; - position: relative; - width: 100%; - } - - .youtube iframe { - aspect-ratio: 16 / 9; - margin-bottom: -3px; - width: 100%; - } -} diff --git a/assets/styles/root/050_main_element_margins.css b/assets/styles/root/050_main_element_margins.css deleted file mode 100644 index 79c3ac6..0000000 --- a/assets/styles/root/050_main_element_margins.css +++ /dev/null @@ -1,8 +0,0 @@ -@layer root { - main > :first-child, - main > article > :first-child { margin-block-start: 0; } - main > :not(:last-child), - main > article > :not(:last-child) { margin-block-end: var(--body-item-spacing); } - main > :last-child, - main > article > :last-child { margin-block-end: 0; } -} diff --git a/assets/styles/root/050_ruby_controls.css b/assets/styles/root/050_ruby_controls.css deleted file mode 100644 index 60965f9..0000000 --- a/assets/styles/root/050_ruby_controls.css +++ /dev/null @@ -1,29 +0,0 @@ -@layer root { - body:has(fieldset#ruby-controls > input[value=NONE]:checked) rt { display: none; } - - /* When ruby-controls is set to hidden, hide the ruby base and only show the */ - body:has(fieldset#ruby-controls > input[value=HIDDEN]:checked) ruby > span { display: none; } - - body:has(fieldset#ruby-controls > input[value=HIDDEN]:checked) rt { - color: inherit; - display: inline; - font-size: inherit; - white-space: inherit; - } - - body:has(fieldset#ruby-controls > input[value=HIDDEN]:checked) :is(h1, h2, h3, h4, h5, h6) rt { - font-family: var(--font-family-heading); - font-weight: bold; - } - - fieldset#ruby-controls input[type=radio] { - margin-inline-end: calc(var(--body-item-spacing) / 6); - } - - fieldset#ruby-controls label { - margin-inline-end: calc(var(--body-item-spacing)); - } - - rt { transition: color 0.3s; } - ruby:hover rt { transition: color 0.3s; } -} diff --git a/assets/styles/root/050_site_footer.css b/assets/styles/root/050_site_footer.css deleted file mode 100644 index 1386547..0000000 --- a/assets/styles/root/050_site_footer.css +++ /dev/null @@ -1,40 +0,0 @@ -@layer root { - footer.site { - align-items: center; - display: flex; - flex-direction: column; - margin-block: var(--body-item-spacing); - text-align: center; - } - - footer.site > ul { - align-items: center; - display: flex; - flex-wrap: wrap; - justify-content: center; - list-style: none; - } - - footer.site > .slogans { - margin-block-end: 0; - } - - footer.site > .slogans > li { - margin-block-end: 0; - margin-inline-start: 0.5em; - } - - footer.site > p { - margin: 0; - } - - footer.site p + p { - margin-top: 0.25rem; - } - - @media (max-width: 740px) { - footer.site .slogans span { - white-space: nowrap; - } - } -} diff --git a/assets/styles/root/050_site_header.css b/assets/styles/root/050_site_header.css deleted file mode 100644 index a0a33ad..0000000 --- a/assets/styles/root/050_site_header.css +++ /dev/null @@ -1,116 +0,0 @@ -@layer root { - :root { - --mastodon-icon: url(/icons/mastodon.svg); - --github-icon: url(/icons/github.svg); - --instagram-icon: url(/icons/instagram.svg); - --feed-icon: url(/icons/feed.svg); - - --social-menu-padding: 1rem; - } - - @media (prefers-color-scheme: dark) { - :root { - --mastodon-icon: url(/icons/mastodon-dark.svg); - --github-icon: url(/icons/github-dark.svg); - --instagram-icon: url(/icons/instagram-dark.svg); - --feed-icon: url(/icons/feed-dark.svg); - } - } - - - header.site h1 > a:hover { text-decoration: none; } - - header.site { - display: flex; - width: 100%; - z-index: 10000; - } - - header.site h1 { - margin: 0; - order: 1; - } - - header.site > .grid { - align-items: baseline; - display: flex; - flex-wrap: wrap; - gap: 0 0.5em; - margin: 0 auto; - max-width: var(--content-width); - padding: 1.5rem 3rem; - width: 100%; - } - - header.site > .grid > nav { - align-items: center; - display: flex; - justify-content: start; - list-style: none; - } - - header.site nav > li { display: block; } - - header.site nav:first-of-type { - justify-content: start; - order: 2; - } - - header.site nav:last-of-type { - justify-content: end; - order: 3; - } - - @media (max-width: 516px) { - header.site > .platter { - border-left: none; - border-radius: 0; - border-right: none; - border-top: none; - } - - header.site > .grid { max-width: none; } - } - - @media (max-width: 435px) { - header.site nav:first-of-type { order: 5; } - } - - nav.social > li { margin-inline-start: var(--nav-bulleted-spacing); } - nav.social > li:first-child { margin-inline-start: 0; } - - .social { - display: block flex; - letter-spacing: 2px; - margin-left: auto; - order: 2; - } - - .social > li > a { - background-image: var(--url); - background-repeat: no-repeat; - background-size: var(--menu-icon-size); - display: block; - height: var(--menu-icon-size); - width: var(--menu-icon-size); - } - - .social > li > a > span { - display: none; - } - - .social > li + li:before { - color: var(--dark); - padding: 0 0.5rem; - } - - #social-menu-mastodon img { - content: var(--mastodon-icon); - position: relative; - top: 1px; - } - - #social-menu-github img { content: var(--github-icon); } - #social-menu-instagram img { content: var(--instagram-icon); } - #social-menu-feed img { content: var(--feed-icon); } -} diff --git a/assets/styles/root/050_syntax_highlighting.css b/assets/styles/root/050_syntax_highlighting.css deleted file mode 100644 index b4dc1f6..0000000 --- a/assets/styles/root/050_syntax_highlighting.css +++ /dev/null @@ -1,20 +0,0 @@ -.highlight code { - background-color: inherit; - margin-block: 0.5em; -} - -.highlight .line { - display: grid; - grid-template-columns: max-content auto; -} - -.highlight .ln a { - -webkit-user-select: none; - -moz-use-select: none; - -ms-user-select: none; - user-select: none; -} - -.highlight .cl { - white-space: pre-wrap; -} diff --git a/assets/styles/root/050_tags_list.css b/assets/styles/root/050_tags_list.css deleted file mode 100644 index 7490f3e..0000000 --- a/assets/styles/root/050_tags_list.css +++ /dev/null @@ -1,57 +0,0 @@ -ul.tags { - display: flex; - height: min-content; - margin-inline-start: 0; - padding-inline-start: 0; -} - -ul.tags > li { - background-color: var(--tag-background-color); - color: var(--tag-foreground-color); - border-radius: 4px; - display: inline-block; - font-size: 75%; - letter-spacing: 1px; -} - -ul.tags > li:first-child { - margin-inline-start: 0; -} - -ul.tags > li:hover { - background-color: var(--tag-hover-background-color); -} - -ul.tags > li > a { - color: inherit; - display: block; - height: 100%; - width: 100%; - padding: 0.6rem 1rem; -} - -ul.tags > li > a:hover { - color: var(--tag-hover-foreground-color); - text-decoration: none; -} - -ul.tags > li + li { margin-inline-start: 1rem; } -ul.tags > li.chevron + li { margin-inline-start: 0 } - -ul.tags > .chevron { - align-items: center; - border: 0; - border-radius: 0; - color: var(--tag-spacer-foreground-color); - background-color: inherit; - display: flex; - justify-content: center; - margin-inline-start: 0; - padding-inline-start: 1px; - width: 2rem; -} - -ul.tags > .chevron:hover { - color: var(--tag-spacer-foreground-color); - background-color: inherit; -} diff --git a/assets/styles/root/050_typography.css b/assets/styles/root/050_typography.css deleted file mode 100644 index 13a2ebb..0000000 --- a/assets/styles/root/050_typography.css +++ /dev/null @@ -1,172 +0,0 @@ -@font-face { - font-family: "Museo_Slab"; - src: url("{{ `/fonts/Museo_Slab_500.woff2` | relURL }}") format("woff2"), - url("{{ `/fonts/Museo_Slab_500.woff` | relURL }}") format("woff"); - font-weight: normal; - font-style: normal; -} - -@layer typography { - :root { - --font-family: Verdana, Helvetica, sans-serif; - --font-family-heading: Museo_Slab, Tahoma, "Hiragino Mincho ProN", serif; - --font-family-monospace: "Courier New", Courier, monospace; - --font-family-site-heading: Museo_Slab, Tahoma, sans-serif; - - --font-size: 2rem; - --font-size-max: 8px; - --font-size-min: 6px; - --font-size-scale-factor: 1vmax; - --site-header-font-size: 200%; - - --line-height: 1.5; - --heading-line-height: 1; - /* A little extra line height so the descenders don't get clipped */ - --site-heading-line-height: 1.1; - - --color: rgba(var(--black), 0.8); - --a-color: rgb(var(--mid-blue)); - --a-ruby-color: var(--color); - --heading-color: rgb(var(--black)); - --site-nav-link-color: var(--a-color); - } - @media (prefers-color-scheme: dark) { - :root { - --color: rgba(var(--white), 0.8); - --heading-color: rgb(var(--white)); - } - } - - a { color: var(--a-color); } - a:visited { color: var(--a-color); } - a.hover-only { color: var(--color); } - a.hover-only:hover { color: var(--a-color); } - a rt, a:hover rt { color: var(--a-ruby-color); } - - body { - font-size: var(--font-size); - } - - code { font-family: var(--font-family-monospace); } - - figcaption { - font-size: 80%; - line-height: var(--line-height); - } - - footer.site { - font-size: 80%; - line-height: 1; - } - - h1 { font-size: 305%; } - h2 { font-size: 244%; } - h3 { font-size: 195%; } - h4 { font-size: 156%; } - h5 { font-size: 125%; } - h6 { font-size: 100%; } - h5, h6 { font-family: var(--font-family-body); } - - header.site nav > .active { font-weight: bold; } - header.site nav > li { color: var(--site-nav-link-color); } - - main:has(header > .post-title > h1) h1 { font-size: 244%; } - main:has(header > .post-title > h1) h2 { font-size: 195%; } - main:has(header > .post-title > h1) h3 { font-size: 156%; } - main:has(header > .post-title > h1) h4 { font-size: 125%; } - main:has(header > .post-title > h1) h5 { font-size: 100%; } - main:has(header > .post-title > h1) h6 { font-size: 100%; } - main:has(header > .post-title > h1) :is(h5, h6) { font-family: var(--font-family-body); } - - h1, h2, h3, h4, h5, h6 { - color: var(--heading-color); - font-family: var(--font-family-heading); - font-weight: 600; - letter-spacing: 1pt; - line-height: var(--heading-line-height); - } - - h1.site { - --site-title-color1: rgb(103, 128, 229); - --site-title-color2: rgb(130, 90, 227); - --site-title-color3: rgb(135, 101, 228); - --site-title-color4: rgb(125, 115, 229); - --site-title-color5: rgb(107, 130, 230); - --site-title-color6: rgb(77, 153, 232); - --site-title-color7: rgb(74, 136, 230); - --site-title-color8: rgb(71, 128, 228); - --site-title-color9: rgb(65, 80, 224); - --site-title-color10: rgb(61, 58, 223); - - color: rgb(var(--mid-blue)); - font-family: var(--font-family-site-heading); - } - - h1.site > a { color: inherit; } - - @supports not ((background-clip: text) or (-webkit-background-clip: text)) { - h1.site span:nth-child(10n + 1) { color: var(--site-title-color1); } - h1.site span:nth-child(10n + 2) { color: var(--site-title-color2); } - h1.site span:nth-child(10n + 3) { color: var(--site-title-color3); } - h1.site span:nth-child(10n + 4) { color: var(--site-title-color4); } - h1.site span:nth-child(10n + 5) { color: var(--site-title-color5); } - h1.site span:nth-child(10n + 6) { color: var(--site-title-color6); } - h1.site span:nth-child(10n + 7) { color: var(--site-title-color7); } - h1.site span:nth-child(10n + 8) { color: var(--site-title-color8); } - h1.site span:nth-child(10n + 9) { color: var(--site-title-color9); } - h1.site span:nth-child(10n) { color: var(--site-title-color10); } - } - @supports (background-clip: text) or (-webkit-background-clip: text) { - h1.site { - background: - radial-gradient(circle at 20% 70%, rgb(var(--purple)), transparent 40%), - radial-gradient(circle at 30% 30%, rgb(var(--lt-blue)), rgb(var(--mid-blue)) 20%, transparent 80%), - radial-gradient(ellipse at 95% 20%, rgb(var(--dk-blue)), rgb(var(--mid-blue)) 70%, transparent 80%), - radial-gradient(circle at 100% 100%, rgb(var(--purple)), rgb(var(--lilac)) 100%), - radial-gradient(circle at 45% 100%, rgb(var(--lilac)), rgb(var(--purple)) 60%), - radial-gradient(ellipse at 50% 50%, rgb(var(--dk-blue)), transparent 80%); - -webkit-background-clip: text; - background-clip: text; - color: transparent; - } - } - - header.site h1.site { - font-size: var(--site-header-font-size); - line-height: var(--site-heading-line-height); - white-space: nowrap; - } - - header.site nav { - font-size: max(1.5rem, 80%); - letter-spacing: 0.10em; - text-transform: lowercase; - } - - header.site nav > li { - color: var(--site-nav-link-color); - } - - :is(h1, h2, h3, h4, h5, h6) rt { - font-family: var(--font-family); - font-weight: normal; - letter-spacing: 0; - } - - html { - color: var(--color); - font-family: var(--font-family); - font-size: clamp(var(--font-size-min), var(--font-size-scale-factor), var(--font-size-max)); - } - - nav.bulleted > li:first-child::before { color: var(--color); } - nav.bulleted > li::before { color: var(--heading-color); } - - p { line-height: var(--line-height); } - - ruby:hover rt { color: var(--color); } - - @media (prefers-color-scheme: dark) { - rt { color: rgba(var(--white), 0.5); } - } -} diff --git a/assets/styles/root/099_utility.css b/assets/styles/root/099_utility.css deleted file mode 100644 index eef66bb..0000000 --- a/assets/styles/root/099_utility.css +++ /dev/null @@ -1,26 +0,0 @@ -@layer utility { - .centered { text-align: center; } - .float-right { float: right; } - - .nobreak { white-space: nowrap; } - .noselect { - cursor: default; - -webkit-user-select: none; - -moz-use-select: none; - -ms-user-select: none; - user-select: none; - } - - .platter { - -webkit-backdrop-filter: var(--platter-backdrop-filter); - backdrop-filter: var(--platter-backdrop-filter); - background-color: var(--platter-background-color); - border: 1px solid var(--header-border-color); - border-radius: 12px; - box-shadow: 3px 4px 4px var(--header-box-shadow-color); - } - - .visible { visibility: visible; } - - article.two-column { columns: 2; } -} diff --git a/config/_default/author.yaml b/config/_default/author.yaml deleted file mode 100644 index 145eed7..0000000 --- a/config/_default/author.yaml +++ /dev/null @@ -1,2 +0,0 @@ -name: Eryn Wells -email: eryn@erynwells.me diff --git a/config/_default/config.yaml b/config/_default/config.yaml index 285923c..950d2f1 100644 --- a/config/_default/config.yaml +++ b/config/_default/config.yaml @@ -1,5 +1,6 @@ baseURL: https://erynwells.me/ languageCode: en-US -title: Eryn Rachel Wells -copyright: Copyright © 2020—2023 Eryn Wells +title: ~eryn +copyright: Copyright © 2020—2024 Eryn Wells defaultContentLanguage: en +enableEmoji: true diff --git a/config/_default/languages.yaml b/config/_default/languages.yaml index e0da1ed..b450ec4 100644 --- a/config/_default/languages.yaml +++ b/config/_default/languages.yaml @@ -7,3 +7,6 @@ es: jp: languageName: 日本語 weight: 3 +tok: + languageName: toki pona + weight: 4 diff --git a/config/_default/markup.yaml b/config/_default/markup.yaml index f289537..0a8cb53 100644 --- a/config/_default/markup.yaml +++ b/config/_default/markup.yaml @@ -1,8 +1,12 @@ goldmark: renderer: unsafe: true + parser: + attribute: + block: true + title: true highlight: anchorLineNos: true - lineNos: true + lineNos: false lineNumbersInTable: false noClasses: false diff --git a/config/_default/menu.yaml b/config/_default/menu.yaml index ff649d2..e9bf573 100644 --- a/config/_default/menu.yaml +++ b/config/_default/menu.yaml @@ -11,6 +11,12 @@ main: name: About url: /about/ weight: 30 + - identifier: feed + name: feed + url: /feed.atom + weight: 40 + params: + style: file social: - identifier: mastodon name: Mastodon @@ -31,7 +37,7 @@ social: params: shortName: ig - identifier: feed - name: Feed + name: feed url: /feed.atom weight: 40 params: diff --git a/config/_default/module.yaml b/config/_default/module.yaml new file mode 100644 index 0000000..df1ab3b --- /dev/null +++ b/config/_default/module.yaml @@ -0,0 +1,15 @@ +hugoVersion: + extended: false + min: "0.116.0" +replacements: >- + github.com/erynofwales/hugo-theme-feeds/v2 -> feeds, + github.com/erynofwales/hugo-theme-termlite/v2 -> termlite, + github.com/erynofwales/hugo-theme-photostream/v2 -> photostream, + github.com/erynofwales/hugo-resource-builders/v2 -> resource-builders, + github.com/erynofwales/hugo-image-utilities/v2 -> image-utils +imports: + - path: github.com/erynofwales/hugo-theme-termlite/v2 + - path: github.com/erynofwales/hugo-theme-feeds/v2 + - path: github.com/erynofwales/hugo-theme-photostream/v2 + - path: github.com/erynofwales/hugo-resource-builders/v2 + - path: github.com/erynofwales/hugo-image-utilities/v2 diff --git a/config/_default/outputs.yaml b/config/_default/outputs.yaml index f788268..5dec102 100644 --- a/config/_default/outputs.yaml +++ b/config/_default/outputs.yaml @@ -1,3 +1,4 @@ -home: [HTML, Atom, RSS] -page: [HTML, JSON] -section: [HTML, Atom, RSS] +home: [HTML, Atom] +section: [HTML, Atom] +taxonomy: [HTML] +term: [HTML] diff --git a/config/_default/params.yaml b/config/_default/params.yaml index 7782e00..ca8f50f 100644 --- a/config/_default/params.yaml +++ b/config/_default/params.yaml @@ -1,6 +1,20 @@ +author: + name: Eryn Wells + email: eryn@erynwells.me + shortTitle: Eryn Wells twitter: erynofwales github: erynofwales instagram: erynofwales description: Home page of Eryn Rachel Wells + +blog: + yearLimit: 3 + +photostream: + yearLimit: 3 + +photos: + gridSize: 200 + thumbnailSize: 600 diff --git a/config/_default/privacy.yaml b/config/_default/privacy.yaml index 86268a6..ad42382 100644 --- a/config/_default/privacy.yaml +++ b/config/_default/privacy.yaml @@ -1,2 +1,2 @@ -twitter: +x: enableDNT: true diff --git a/config/_default/services.yaml b/config/_default/services.yaml index 4ad50c5..4738995 100644 --- a/config/_default/services.yaml +++ b/config/_default/services.yaml @@ -1,2 +1,2 @@ -twitter: +x: disableInlineCSS: true diff --git a/content/_index.es.md b/content/_index.es.md index 04418e1..4812de4 100644 --- a/content/_index.es.md +++ b/content/_index.es.md @@ -1,5 +1,6 @@ --- title: Eryn Rachel Wells +layout: single --- {{< nobreak >}}Ingeniera de software,{{< /nobreak >}} diff --git a/content/_index.md b/content/_index.md index 2d5b279..320c794 100644 --- a/content/_index.md +++ b/content/_index.md @@ -1,5 +1,58 @@ --- -title: Eryn Rachel Wells +layout: single +params: + renderHeadingAnchors: false --- -Software engineer, potter, musician, and overall nerd. +Hi, I'm Eryn Wells. This is my website. Welcome! + +## Latest + +Here are some of my most recent posts. + +{{< home/latest >}} + +## Personal + +I'm a queer trans woman, {{< tess >}}' partner, and mom of [two cats][cats]. I +was born in Seattle, {{< abbr Washington >}}WA{{< /abbr >}} and grew up in +Phoenix, {{< abbr Arizona >}}AZ{{< /abbr >}}. I attended [Oberlin College][ob] +where I got a degree in Computer Science. My pronouns are [she/her][pronouns]. + +You can read more about me on my [about][ab] page, or [get in touch][where-am-i]. + +## Professional + +I've worked as a software engineer since 2011 for a variety of companies around +the San Francisco Bay Area. I joined [Apple][a] in 2016, where I currently work +on password management and authentication technologies. + +My [résumé][r] has all the details. + +## Hobbies + +When I'm not working, you can reliably find me hacking on this website or [some +coding other project][gh]. I'm also a musician, and play piano, Irish tin +whistle, and modular synthesizer. Occasionally I [record][bc] [things][sc]. I +love outer space and astronomy; I will always get excited to look at the moon +with you, or check out anything through a telescope. I enjoy [photograhy][p], +mostly as a travel hobby. And I've been practicing iaido, a traditional Japanese +sword art, since early 2024. Other things I've been into include: bread baking, +bicycling, calligraphy, ceramics, and knitting. + +[a]: https://apple.com +[ab]: {{< ref "/about" >}} +[b]: {{< ref "/blog" >}} +[bc]: https://erynwells.bandcamp.com/releases +[cats]: {{< ref "/cats" >}} +[eml]: mailto:Eryn%20Wells +[gh]: https://github.com/erynofwales +[ig]: https://www.instagram.com/erynofwales +[m]: https://mastodon.social/@erynofwales +[n]: {{< ref "/now" >}} +[ob]: https://www.oberlin.edu +[p]: {{< ref "/photos" >}} +[pronouns]: http://pronoun.is/she +[r]: {{< ref "/resume" >}} +[sc]: https://soundcloud.com/purlsnbeeps +[where-am-i]: {{< ref "/about/where-am-i" >}} diff --git a/content/about/_index.md b/content/about/_index.md index f5afdab..5c1da98 100644 --- a/content/about/_index.md +++ b/content/about/_index.md @@ -1,13 +1,16 @@ --- title: "Hi! 👋🏻" -date: 2022-09-03T12:14:32-07:00 +layout: single resources: - name: me src: me.jpeg + params: + alt: > + Me, wearing a hat and smiling slightly, standing in front of a stone + background. --- -{{< circular_image id=me name=me class="float-right" width=200 - alt="A photo of me, wearing a hat, standing in front of a stone background">}} +{{% section class=content--small-right-column %}} I'm Eryn. My pronouns are [she/her][p]. I'm a queer trans woman. I live in San Francisco, CA, on the unceded ancestral lands of the Ramaytush Ohlone people, @@ -17,6 +20,10 @@ I attended [Oberlin College][ob] where I got a degree in Computer Science. I speak English natively, and Spanish too, though I always need more practice. +{{< circular_image id=me name=me class="content--right-column" width=200 >}} + +{{% /section %}} + ## Hobbies I've been a musician for most of my life. I started on the piano at age seven, diff --git a/content/about/style.css b/content/about/style.css index b39c308..45d6e31 100644 --- a/content/about/style.css +++ b/content/about/style.css @@ -1,4 +1,17 @@ +@layer page { + main > section > p:not(:last-child) { + margin-bottom: var(--body-item-spacing); + } -img#me { + p:has(img#me) { + display: inline; + grid-column: unset; + margin-bottom: 0; + } + + img#me { + margin: 0; + shape-outside: circle(55%); width: min(200px, 25%); + } } diff --git a/content/about/where-am-i.md b/content/about/where-am-i.md index 660a718..a033245 100644 --- a/content/about/where-am-i.md +++ b/content/about/where-am-i.md @@ -3,11 +3,16 @@ title: "Where to Find Me" date: 2022-11-11T08:35:26-08:00 --- -Here's a list of places you can find me online. +Here's a list of places you can find me online. You can often find me on +services not listed here with the `erynofwales` or `erynrwells` handles. ## Social Media -- Cohost: [@eryn](https://cohost.org/eryn) +I'm really only on Instagram and Mastodon these days. My Twitter account is +still live, as an archive, but I don't post on it or look at it. Ditto for +Facebook. + +- Facebook: [erynofwales](https://www.facebook.com/erynofwales) - Instagram: [@erynofwales](https://instagram.com/erynofwales) - Mastodon: [@erynofwales](https://mastodon.social/@erynofwales) - Twitter: [@erynofwales](https://twitter.com/erynofwales) @@ -15,9 +20,10 @@ Here's a list of places you can find me online. ## Content - Bandcamp: [erynwells](https://erynwells.bandcamp.com/releases) -- Soundcloud: [purlsnbeeps](https://soundcloud.com/purlsnbeeps) -- YouTube: [Eryn Wells](https://www.youtube.com/channel/UCWb2pTDlC27R1PucyUPrypA) - GitHub: [erynofwales](https://github.com/erynofwales) +- Soundcloud: [purlsnbeeps](https://soundcloud.com/purlsnbeeps) +- StoryGraph: [erynrwells](https://app.thestorygraph.com/profile/erynrwells) +- YouTube: [Eryn Wells](https://www.youtube.com/channel/UCWb2pTDlC27R1PucyUPrypA) ## The Old Fashioned Way diff --git a/content/blog/2020/10/boot-raspberry-pi-over-tftp.md b/content/blog/2020/10/boot-raspberry-pi-over-tftp.md index 8cfef8b..3143677 100644 --- a/content/blog/2020/10/boot-raspberry-pi-over-tftp.md +++ b/content/blog/2020/10/boot-raspberry-pi-over-tftp.md @@ -1,7 +1,7 @@ --- title: "Booting a Raspberry Pi Over TFTP" date: 2020-10-13T08:31:52-07:00 -draft: false +description: A writeup of how I set up a Raspberry Pi to boot over TFTP to facilitate an operating system development project. series: ["Raspberry Pi OS Development"] categories: ["Tech"] tags: ["Raspberry Pi", "Networking"] diff --git a/content/blog/2020/_index.md b/content/blog/2020/_index.md new file mode 100644 index 0000000..0539207 --- /dev/null +++ b/content/blog/2020/_index.md @@ -0,0 +1,4 @@ +--- +title: 2020 +date: 2020-01-01 +--- diff --git a/content/blog/2021/09/oskitone-scout/index.md b/content/blog/2021/09/oskitone-scout/index.md index 8d74247..3b3012c 100644 --- a/content/blog/2021/09/oskitone-scout/index.md +++ b/content/blog/2021/09/oskitone-scout/index.md @@ -7,7 +7,7 @@ categories: ["Music"] tags: ["Synthesizers", "Electronics", "DIY", "Compositions"] --- -{{< figures/youtube id="gCSwWsxzy_c" title="A timelapse video of me building an Oskitone Scout, set to music produced using the Scout itself">}} +{{< youtube id="gCSwWsxzy_c" title="A timelapse video of me building an Oskitone Scout, set to music produced using the Scout itself" >}} [Oskitone][oskitone] recently released a new synthesizer: the [Scout][scout]. It's a small monophonic keyboard synth built around an Arduino. It was a quick diff --git a/content/blog/2021/10/pnw-reunion-trip/index.md b/content/blog/2021/10/pnw-reunion-trip/index.md index 07ec46e..c574098 100644 --- a/content/blog/2021/10/pnw-reunion-trip/index.md +++ b/content/blog/2021/10/pnw-reunion-trip/index.md @@ -41,4 +41,4 @@ I'm so grateful for every one of these people. We've been friends for years and even though our lives have taken us in so many different directions, we've found each other again and that is so wonderful. -{{< twitter erynofwales 1447951049076056071 >}} +{{< twitter user=erynofwales id=1447951049076056071 >}} diff --git a/content/blog/2021/_index.md b/content/blog/2021/_index.md new file mode 100644 index 0000000..f27ca81 --- /dev/null +++ b/content/blog/2021/_index.md @@ -0,0 +1,4 @@ +--- +title: 2021 +date: 2021-01-01 +--- diff --git a/content/blog/2022/01/cmss-3modules/index.md b/content/blog/2022/01/cmss-3modules/index.md index 96d8bac..f78c23a 100644 --- a/content/blog/2022/01/cmss-3modules/index.md +++ b/content/blog/2022/01/cmss-3modules/index.md @@ -7,7 +7,7 @@ categories: ["Music"] tags: ["Eurorack", "Synthesizers", "Recordings", "Performances", "Compositions"] --- -{{< figures/youtube id="sqr7g4P85aM" title="A top-down video of me operating a small Eurorack system made of only three modules. Lights flash, an incorporeal hand turns knobs to sculpt the sound." >}} +{{< youtube id="sqr7g4P85aM" title="A top-down video of me operating a small Eurorack system made of only three modules. Lights flash, an incorporeal hand turns knobs to sculpt the sound." >}} This is my submission to the [Three Module Challenge][3mc] show put on by Colorado Modular Synth Society in late January 2022. This is my first time diff --git a/content/blog/2022/04/nethack/index.es.md b/content/blog/2022/04/nethack/index.es.md index 03034ec..d2fbcbd 100644 --- a/content/blog/2022/04/nethack/index.es.md +++ b/content/blog/2022/04/nethack/index.es.md @@ -18,7 +18,7 @@ estuve hecho. Es posible que me entusiasme un poco. -{{< twitter erynofwales 1510763278691016705 >}} +{{< twitter user=erynofwales id=1510763278691016705 >}} He mejorado mucho en las últimas semanas. Mis puntajes han crecidos desde 1,000 hasta el mejor juego hasta ahora en que [obtuve 9401 puntos][over9000]. Quién diff --git a/content/blog/2022/04/nethack/index.md b/content/blog/2022/04/nethack/index.md index 7015792..9eb2538 100644 --- a/content/blog/2022/04/nethack/index.md +++ b/content/blog/2022/04/nethack/index.md @@ -23,7 +23,7 @@ packed with [NetHackWiki][nethackwiki] tabs too, including a pinned one for the I may have gotten a little carried away a time or two. -{{< twitter erynofwales 1510763278691016705 >}} +{{< twitter user=erynofwales id=1510763278691016705 >}} I've gotten much better in that time. My scores have increased from the 1000-2000 range to my best game so far in which [I scored 9401 diff --git a/content/blog/2022/05/roguelikes-i-like/index.md b/content/blog/2022/05/roguelikes-i-like/index.md index 305dbf5..c8bc0d4 100644 --- a/content/blog/2022/05/roguelikes-i-like/index.md +++ b/content/blog/2022/05/roguelikes-i-like/index.md @@ -1,6 +1,7 @@ --- title: "Roguelikes I Like" date: 2022-05-09T08:37:23-07:00 +description: Some roguelikes I’ve enjoyed recently. draft: false resources: - name: nethack diff --git a/content/blog/2022/08/audio-scope-with-p5js/diagram.svg b/content/blog/2022/08/audio-scope-with-p5js/diagram.svg new file mode 100644 index 0000000..a4483cb --- /dev/null +++ b/content/blog/2022/08/audio-scope-with-p5js/diagram.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + +<audio> + + + + + + + +Analyzer + + + + + + + +destination + + + + + + diff --git a/content/blog/2022/08/audio-scope-with-p5js/index.md b/content/blog/2022/08/audio-scope-with-p5js/index.md index 142398b..8db3abc 100644 --- a/content/blog/2022/08/audio-scope-with-p5js/index.md +++ b/content/blog/2022/08/audio-scope-with-p5js/index.md @@ -1,7 +1,7 @@ --- title: "Making an Audio Scope with P5.js" date: 2022-08-18T20:48:37-07:00 -draft: false +description: A writeup of a small JavaScript waveform visualizer I made with P5.js. categories: ["Tech"] tags: ["P5.js", "Programming", "Web", "Art"] resources: @@ -88,22 +88,7 @@ node to the input of the analyzer node, and the output of the analyzer node to the audio context's `destination` node that routes to the computer's speakers. Our audio processing graph looks like this: -{{< figures/railroad id="audioContextDiagram" >}} - {{< scripts/railroad >}} - return rr.Diagram( - rr.Sequence( - rr.Terminal("