<!doctype html>
<html lang="en" data-author="jane">
	<head>
 <script>
        (function () {
const THEME_KEY = "author-theme";
const DEFAULT_THEME = "jane";
if (document.documentElement.dataset.author) return;
try {
const savedTheme = localStorage.getItem(THEME_KEY) || DEFAULT_THEME;
document.documentElement.setAttribute("data-author", savedTheme);
} catch (e) {
document.documentElement.setAttribute("data-author", DEFAULT_THEME);
}
        })();
        </script>
    <!-- <meta property="og:url" content="TODO" /> -->
    <!-- <meta property="og:logo" content="TODO" /> -->
    <meta property="og:type" content="website" />
    <meta property="og:title" content="" />
    <meta property="og:description" content="Nightdogs are hotdogs that you eat in the middle of the night" />
    
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<title>nightdogs</title>
        <meta name="description" content="Nightdogs are hotdogs that you eat in the middle of the night">
        <link rel="alternate" href="/feed/feed.xml" type="application/atom+xml" title="nightdogs">

        <!-- Inline theme script to prevent FOUC -->

        <!-- Load local fonts as a separate stylesheet -->
        <link rel="stylesheet" href="/css/fonts.css">
		<script>
  window.AUTHORS_DOG_PERSON = {
    
      "jane": false,
    
      "abby": true,
    
      "adesse": true,
    
      "orionlw": false,
    
      "amelia": false,
    
      "nic": false,
    
      "ewan": false
    
  };
</script>

		
<style>:root {
  	--font-family: "Bitcount Grid Single", "Segoe UI", "Roboto", "Helvetica Neue", Arial, "Liberation Sans", sans-serif;
   	--font-family-monospace: Consolas, Menlo, Monaco, Andale Mono WT, Andale Mono, Lucida Console, Lucida Sans Typewriter, DejaVu Sans Mono, Bitstream Vera Sans Mono, Liberation Mono, Nimbus Mono L, Courier New, Courier, monospace;
    --syntax-tab-size: 2;
  --background-color: #ffd6e0;
  --color: #8b0020;
  --primary: #b8002e;
  --muted-color: #6d0015;
    /* Author: abby */
    --author-abby-background: #e6ffe6;
    --author-abby-color: #0d3a0d;
    --author-abby-primary: #1e7e1e;
    --author-abby-muted: #0a2a0a;
    --author-abby-font-body: "Quicksand", sans-serif;
    --author-abby-font-header: "Quicksand", sans-serif;
    /* Author: adesse */
    --author-adesse-background: #624f4c;
    --author-adesse-color: #ffffff;
    --author-adesse-primary: #deb8c4;
    --author-adesse-muted: #f0e6e7;
    --author-adesse-font-body: "Bellefair", serif;
    --author-adesse-font-header: "Jacquard 12", serif;
    /* Author: amelia */
    --author-amelia-background: #ffe6fa;
    --author-amelia-color: #6c218a;
    --author-amelia-primary: #8b2d9e;
    --author-amelia-muted: #5a1a74;
    --author-amelia-font-body: "Fira Sans", sans-serif;
    --author-amelia-font-header: "Fira Sans", sans-serif;
    /* Author: ewan */
    --author-ewan-background: #92cbff;
    --author-ewan-color: #0a1a2a;
    --author-ewan-primary: #2563eb;
    --author-ewan-muted: #1e3a8a;
    --author-ewan-font-body: "Fira Sans", sans-serif;
    --author-ewan-font-header: "Fira Sans", sans-serif;
    /* Author: jane */
    --author-jane-background: #ffd6e0;
    --author-jane-color: #8b0020;
    --author-jane-primary: #b8002e;
    --author-jane-muted: #6d0015;
    --author-jane-font-body: "Bitcount Grid Single", "Segoe UI", sans-serif;
    --author-jane-font-header: "Bitcount Grid Single", "Segoe UI", sans-serif;
    /* Author: nic */
    --author-nic-background: #faf0e6;
    --author-nic-color: #1c343c;
    --author-nic-primary: #2563eb;
    --author-nic-muted: #64748b;
    --author-nic-font-body: "Georgia", serif;
    --author-nic-font-header: "Georgia", serif;
    /* Author: orionlw */
    --author-orionlw-background: #e6d3b3;
    --author-orionlw-color: #4a3018;
    --author-orionlw-primary: #6e4b1f;
    --author-orionlw-muted: #3d2614;
    --author-orionlw-font-body: "EB Garamond", serif;
    --author-orionlw-font-header: "Montserrat", sans-serif;
    --author-orionlw-font-mono: "IBM Plex Mono", monospace;
}
/* Dark mode support for each author */
[data-author="abby"][data-theme="dark"] {
  --author-abby-background: #0d3a0d;
  --author-abby-color: #ffffff;
  --author-abby-primary: #90ee90;
  --author-abby-muted: #b2f7b2;
}
[data-author="adesse"][data-theme="dark"] {
  --author-adesse-background: #2a201e;
  --author-adesse-color: #ffffff;
  --author-adesse-primary: #deb8c4;
  --author-adesse-muted: #f0e6e7;
}
[data-author="amelia"][data-theme="dark"] {
  --author-amelia-background: #2b59c4;
  --author-amelia-color: #dced5a;
  --author-amelia-primary: #2db1b5;
  --author-amelia-muted: #b6e37c;
}
[data-author="ewan"][data-theme="dark"] {
  --author-ewan-background: #1b3a8a;
  --author-ewan-color: #f0f8ff;
  --author-ewan-primary: #87ceeb;
  --author-ewan-muted: #b0d4f1;
}
[data-author="jane"][data-theme="dark"] {
  --author-jane-background: #8b0020;
  --author-jane-color: #fff0f3;
  --author-jane-primary: #ffb3c6;
  --author-jane-muted: #ffd6e0;
}
[data-author="nic"][data-theme="dark"] {
  --author-nic-background: #1c343c;
  --author-nic-color: #ffff99;
  --author-nic-primary: #8bbfff;
  --author-nic-muted: #dbeafe;
}
[data-author="orionlw"][data-theme="dark"] {
  --author-orionlw-background: #4a3018;
  --author-orionlw-color: #ffffff;
  --author-orionlw-primary: #deb887;
  --author-orionlw-muted: #e6d3b3;
}

@media (prefers-color-scheme: dark) {
  :root {
      /* Author: abby */
      --author-abby-background: #0d3a0d;
      --author-abby-color: #ffffff;
      --author-abby-primary: #90ee90;
      --author-abby-muted: #b2f7b2;
      /* Author: adesse */
      --author-adesse-background: #2a201e;
      --author-adesse-color: #ffffff;
      --author-adesse-primary: #deb8c4;
      --author-adesse-muted: #f0e6e7;
      /* Author: amelia */
      --author-amelia-background: #2b59c4;
      --author-amelia-color: #dced5a;
      --author-amelia-primary: #2db1b5;
      --author-amelia-muted: #b6e37c;
      /* Author: ewan */
      --author-ewan-background: #1b3a8a;
      --author-ewan-color: #f0f8ff;
      --author-ewan-primary: #87ceeb;
      --author-ewan-muted: #b0d4f1;
      /* Author: jane */
      --author-jane-background: #8b0020;
      --author-jane-color: #fff0f3;
      --author-jane-primary: #ffb3c6;
      --author-jane-muted: #ffd6e0;
      /* Author: nic */
      --author-nic-background: #1c343c;
      --author-nic-color: #ffff99;
      --author-nic-primary: #8bbfff;
      --author-nic-muted: #dbeafe;
      /* Author: orionlw */
      --author-orionlw-background: #4a3018;
      --author-orionlw-color: #ffffff;
      --author-orionlw-primary: #deb887;
      --author-orionlw-muted: #e6d3b3;
  }
}


/* === Root Variables === */
/* === Pico Root Variables (adapted) === */
:root {
	--font-family:
		"Bitcount Grid Single", "Segoe UI", "Roboto", "Helvetica Neue", Arial,
		"Liberation Sans", sans-serif;
	--font-family-monospace:
		Consolas, Menlo, Monaco, Andale Mono WT, Andale Mono, Lucida Console,
		Lucida Sans Typewriter, DejaVu Sans Mono, Bitstream Vera Sans Mono,
		Liberation Mono, Nimbus Mono L, Courier New, Courier, monospace;
	--syntax-tab-size: 2;
	--line-height: 1.5;
	--font-weight: 400;
	--font-size: 125%;
	--border-radius: 0.25rem;
	--border-width: 0.0625rem;
	--outline-width: 0.125rem;
	--transition: 0.2s ease-in-out;
	--spacing: 1rem;
	--block-spacing-vertical: var(--spacing);
	--block-spacing-horizontal: var(--spacing);
	--grid-column-gap: var(--spacing);
	--grid-row-gap: var(--spacing);
	--form-element-spacing-vertical: 0.75rem;
	--form-element-spacing-horizontal: 1rem;
	/* Author variables injected by Nunjucks */
}

/* === Pico Utility Classes === */
.container,
.container-fluid {
	width: 100%;
	margin-right: auto;
	margin-left: auto;
	padding-right: var(--spacing);
	padding-left: var(--spacing);
}
@media (min-width: 576px) {
	.container {
		max-width: 510px;
		padding-right: 0;
		padding-left: 0;
	}
}
@media (min-width: 768px) {
	.container {
		max-width: 700px;
	}
}
@media (min-width: 1024px) {
	.container {
		max-width: 950px;
	}
}
@media (min-width: 1280px) {
	.container {
		max-width: 1200px;
	}
}
@media (min-width: 1536px) {
	.container {
		max-width: 1450px;
	}
}

.grid {
	grid-column-gap: var(--grid-column-gap);
	grid-row-gap: var(--grid-row-gap);
	display: grid;
	grid-template-columns: 1fr;
}
@media (min-width: 768px) {
	.grid {
		grid-template-columns: repeat(auto-fit, minmax(0%, 1fr));
	}
}
.grid > * {
	min-width: 0;
}
.overflow-auto {
	overflow: auto;
}

/* === Pico Element Resets & Typography === */
*,
::after,
::before {
	box-sizing: border-box;
	background-repeat: no-repeat;
}
body {
	width: 100%;
	margin: 0 !important;
	padding: 0 !important;
	font-family: var(--font-family);
	font-size: var(--font-size);
	color: var(--color, #8b0020);
	background-color: var(--background-color, #ffd6e0);
	min-height: 100vh;
}
main {
	display: block;
}
section {
	margin-bottom: var(--block-spacing-vertical);
}
h1,
h2,
h3,
h4,
h5,
h6 {
	font-family: var(--font-family);
	margin-top: 0;
	margin-bottom: var(--block-spacing-vertical);
	color: var(--color, #8b0020);
	font-weight: var(--font-weight);
	font-size: var(--font-size);
	line-height: var(--line-height);
}
p,
li {
	line-height: var(--line-height);
}
p:last-child {
	margin-bottom: 0;
}
a[href] {
	color: var(--primary, #b8002e);
}
a[href]:visited {
	color: var(--muted-color, #6d0015);
}
a[href]:hover,
a[href]:active {
	color: var(--primary, #b8002e);
}
img {
	max-width: 100%;
	height: auto;
	border-style: none;
}
pre,
code {
	font-family: var(--font-family-monospace);
}
pre {
	overflow-x: auto;
}
mark {
	background-color: #ffe6e0;
	color: #8b0020;
}
blockquote {
	border-left: 0.25rem solid var(--muted-color);
	padding: var(--spacing);
	margin: var(--block-spacing-vertical) 0;
}
table {
	width: 100%;
	border-collapse: collapse;
}
td,
th {
	padding: calc(var(--spacing) / 2) var(--spacing);
	border-bottom: var(--border-width) solid var(--muted-color);
}
tfoot td,
tfoot th {
	border-top: var(--border-width) solid var(--muted-color);
	border-bottom: 0;
}

/* === Audio Player Styling === */
audio {
	width: 100%;
	max-width: 100%;
	margin: 1rem 0;
	border-radius: 8px;
	background-color: var(--background-color, #ffd6e0);
	border: 1px solid var(--primary, #b8002e);
	outline: none;
}

audio:focus {
	box-shadow: 0 0 0 2px var(--primary, #b8002e);
}

/* Webkit browsers (Chrome, Safari, Edge) */
audio::-webkit-media-controls-panel {
	background-color: var(--background-color, #ffd6e0);
	border-radius: 8px;
}

audio::-webkit-media-controls-play-button,
audio::-webkit-media-controls-mute-button {
	background-color: var(--primary, #b8002e);
	border-radius: 50%;
}

/* Firefox */
audio::-moz-range-thumb {
	background-color: var(--primary, #b8002e);
	border: none;
	border-radius: 50%;
}

/* === Author Theme Overrides (must come after generic styles) === */

/* Colors and fonts for Jane */
html[data-author="jane"],
html[data-author="jane"] body {
	--background-color: var(--author-jane-background);
	--color: var(--author-jane-color);
	--primary: var(--author-jane-primary);
	--muted-color: var(--author-jane-muted);
	font-family: var(--author-jane-font-body, var(--font-family));
	color: var(--author-jane-color);
	background-color: var(--author-jane-background);
}
/* Colors and fonts for Abby */
html[data-author="abby"],
html[data-author="abby"] body {
	--background-color: var(--author-abby-background);
	--color: var(--author-abby-color);
	--primary: var(--author-abby-primary);
	--muted-color: var(--author-abby-muted);
	font-family: var(--author-abby-font-body, var(--font-family));
	color: var(--author-abby-color);
	background-color: var(--author-abby-background);
}
/* Colors and fonts for Orion */
html[data-author="orionlw"],
html[data-author="orionlw"] body {
	--background-color: var(--author-orionlw-background);
	--color: var(--author-orionlw-color);
	--primary: var(--author-orionlw-primary);
	--muted-color: var(--author-orionlw-muted);
	font-family: var(--author-orionlw-font-body, var(--font-family));
	color: var(--author-orionlw-color);
	background-color: var(--author-orionlw-background);
}
/* Colors and fonts for Adesse */
html[data-author="adesse"],
html[data-author="adesse"] body {
	--background-color: var(--author-adesse-background);
	--color: var(--author-adesse-color);
	--primary: var(--author-adesse-primary);
	--muted-color: var(--author-adesse-muted);
	font-family: var(--author-adesse-font-body, var(--font-family));
	color: var(--author-adesse-color);
	background-color: var(--author-adesse-background);
}
/* Colors and fonts for Amelia */
html[data-author="amelia"],
html[data-author="amelia"] body {
	--background-color: var(--author-amelia-background);
	--color: var(--author-amelia-color);
	--primary: var(--author-amelia-primary);
	--muted-color: var(--author-amelia-muted);
	font-family: var(--author-amelia-font-body, var(--font-family));
	color: var(--author-amelia-color);
	background-color: var(--author-amelia-background);
}
/* Colors and fonts for Nic */
html[data-author="nic"],
html[data-author="nic"] body {
	--background-color: var(--author-nic-background);
	--color: var(--author-nic-color);
	--primary: var(--author-nic-primary);
	--muted-color: var(--author-nic-muted);
	font-family: var(--author-nic-font-body, var(--font-family));
	color: var(--author-nic-color);
	background-color: var(--author-nic-background);
}
/* Colors and fonts for Ewan */
html[data-author="ewan"],
html[data-author="ewan"] body {
	--background-color: var(--author-ewan-background);
	--color: var(--author-ewan-color);
	--primary: var(--author-ewan-primary);
	--muted-color: var(--author-ewan-muted);
	font-family: var(--author-ewan-font-body, var(--font-family));
	color: var(--author-ewan-color);
	background-color: var(--author-ewan-background);
}

/* Headings: header font */
html[data-author="jane"] h1,
html[data-author="jane"] h2,
html[data-author="jane"] h3,
html[data-author="jane"] h4,
html[data-author="jane"] h5,
html[data-author="jane"] h6 {
	font-family: var(--author-jane-font-header, var(--font-family));
}
html[data-author="abby"] h1,
html[data-author="abby"] h2,
html[data-author="abby"] h3,
html[data-author="abby"] h4,
html[data-author="abby"] h5,
html[data-author="abby"] h6 {
	font-family: var(--author-abby-font-header, var(--font-family));
}
html[data-author="orionlw"] h1,
html[data-author="orionlw"] h2,
html[data-author="orionlw"] h3,
html[data-author="orionlw"] h4,
html[data-author="orionlw"] h5,
html[data-author="orionlw"] h6 {
	font-family: var(--author-orionlw-font-header, var(--font-family));
}
html[data-author="adesse"] h1,
html[data-author="adesse"] h2,
html[data-author="adesse"] h3,
html[data-author="adesse"] h4,
html[data-author="adesse"] h5,
html[data-author="adesse"] h6 {
	font-family: var(--author-adesse-font-header, var(--font-family));
}
html[data-author="amelia"] h1,
html[data-author="amelia"] h2,
html[data-author="amelia"] h3,
html[data-author="amelia"] h4,
html[data-author="amelia"] h5,
html[data-author="amelia"] h6 {
	font-family: var(--author-amelia-font-header, var(--font-family));
}
html[data-author="nic"] h1,
html[data-author="nic"] h2,
html[data-author="nic"] h3,
html[data-author="nic"] h4,
html[data-author="nic"] h5,
html[data-author="nic"] h6 {
	font-family: var(--author-nic-font-header, var(--font-family));
}
html[data-author="ewan"] h1,
html[data-author="ewan"] h2,
html[data-author="ewan"] h3,
html[data-author="ewan"] h4,
html[data-author="ewan"] h5,
html[data-author="ewan"] h6 {
	font-family: var(--author-ewan-font-header, var(--font-family));
}

/* Mono font for Orion */
html[data-author="orionlw"] code,
html[data-author="orionlw"] pre {
	font-family: var(--author-orionlw-font-mono, var(--font-family-monospace));
}

/* ...rest of your CSS (global styles, utility classes, etc.) ... */

/* === Global Styles === */
* {
	box-sizing: border-box;
}
html,
body {
	margin: 0 !important;
	padding: 0 !important;
	font-family: var(--font-family);
	color: var(--color, #8b0020);
	background-color: var(--background-color, #ffd6e0);
}
body {
	min-height: 100vh;
}
.site-wrapper {
	max-width: 40em;
	margin: 0 auto;
	padding: 0 !important;
	min-height: 100vh;
}
h1,
h2,
h3,
h4,
h5,
h6 {
	font-family: var(--font-family);
}
html {
	overflow-y: scroll;
}
main,
footer {
	padding: 1rem;
	background-color: var(--background-color, #ffd6e0);
	color: var(--color, #8b0020);
}

/* Links */
a[href] {
	color: var(--primary, #b8002e);
}
a[href]:visited {
	color: var(--muted-color, #6d0015);
}
a[href]:hover,
a[href]:active {
	color: var(--primary, #b8002e);
}

/* microformats2: h-card, h-entry */
.h-card,
.h-entry {
	border-radius: 8px;
	border: 1px solid rgba(128, 128, 128, 0.2);
	box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
	padding: 1.5em;
	margin: 2em 0;
	background-color: var(--background-color, #ffd6e0);
	color: var(--color, #8b0020);
	line-height: 1.5;
}
.h-card .p-note,
.h-card .p-org,
.h-card .p-name,
.h-card .u-url,
.h-card .u-photo {
	color: inherit;
	background: none;
	border: none;
	box-shadow: none;
}
.h-card img.u-photo {
	max-width: 100px;
	border-radius: 50%;
	margin-right: 1em;
}
.h-card .p-name,
.h-card .p-org {
	font-weight: 600;
}

/* Remove h-card styling from inline author names */
.post-author .h-card,
.post-metadata .h-card,
.webmention-content .h-card,
.webmentions .h-card {
	border: none;
	background: none;
	padding: 0;
	margin: 0;
	border-radius: 0;
	box-shadow: none;
	display: inline;
}

/* Remove h-card styling from recommendation cards */
.recommendations-widget .h-card,
.recommendation-card .h-card,
.recommendation-card .rec-author-link.h-card,
.webmention-content .h-card,
.webmentions .h-card {
	border: none !important;
	background: none !important;
	padding: 0 !important;
	margin: 0 !important;
	border-radius: 0 !important;
	box-shadow: none !important;
	display: inline !important;
	position: static !important;
	overflow: visible !important;
}

/* Accessibility */
.visually-hidden:not(:focus):not(:active) {
	clip: rect(0 0 0 0);
	clip-path: inset(50%);
	height: 1px;
	overflow: hidden;
	position: absolute;
	white-space: nowrap;
	width: 1px;
}

/* Images */
img {
	max-width: 100%;
}
img[width][height] {
	height: auto;
}
img[src$=".svg"] {
	width: 100%;
	height: auto;
	max-width: none;
}
video,
iframe {
	width: 100%;
	height: auto;
}
iframe {
	aspect-ratio: 16/9;
}

/* Typography */
p:last-child {
	margin-bottom: 0;
}
p,
li {
	line-height: 1.5;
}
main :first-child {
	margin-top: 0;
}

/* Header */
header {
	display: flex;
	gap: 1em;
	flex-wrap: wrap;
	justify-content: space-between;
	align-items: center;
	padding: 1em;
	border-bottom: 1px dashed rgba(128, 128, 128, 0.3);
}
.home-link {
	flex-grow: 1;
	font-size: 1em;
	font-weight: 700;
}
.home-link:link:not(:hover) {
	text-decoration: none;
}
#skip-link {
	text-decoration: none;
	background: var(--background-color);
	color: var(--color);
	padding: 0.5rem 1rem;
	border: 1px solid var(--primary);
	border-radius: 2px;
}
#skip-link.visually-hidden:focus {
	position: absolute;
	top: 1rem;
	left: 1rem;
	z-index: 999;
}

/* Nav */
.nav {
	display: flex;
	gap: 0.5em 1em;
	padding: 0;
	margin: 0;
	list-style: none;
}
.nav-item {
	display: inline-block;
}
.nav-item a[href]:not(:hover) {
	text-decoration: none;
}
.nav a[href][aria-current="page"] {
	text-decoration: underline;
}

/* Posts list */
.postlist {
	counter-reset: start-from var(--postlist-index);
	list-style: none;
	padding: 0;
	padding-left: 1.5rem;
}
.postlist-item {
	display: flex;
	flex-wrap: wrap;
	align-items: baseline;
	counter-increment: start-from -1;
	margin-bottom: 1em;
}
.postlist-item:before {
	display: inline-block;
	pointer-events: none;
	content: "" counter(start-from, decimal-leading-zero) ". ";
	line-height: 100%;
	text-align: right;
	margin-left: -1.5rem;
}
.postlist-date,
.postlist-item:before {
	font-size: 0.8125em;
	color: var(--muted-color);
}
.postlist-date {
	word-spacing: -0.5px;
}
.postlist-link {
	font-size: 1.1875em;
	font-weight: 700;
	flex-basis: calc(100% - 1.5rem);
	padding-left: 0.25em;
	padding-right: 0.5em;
	text-underline-position: from-font;
	text-underline-offset: 0;
	text-decoration-thickness: 1px;
}
.postlist-item-active .postlist-link {
	font-weight: bold;
}

/* Next/prev links */
.links-nextprev {
	display: flex;
	justify-content: space-between;
	gap: 0.5em 1em;
	list-style: none;
	border-top: 1px dashed rgba(128, 128, 128, 0.3);
	padding: 1em 0;
}
.links-nextprev > * {
	flex-grow: 1;
	list-style: none;
}
.links-nextprev-next {
	text-align: right;
}
.links-nextprev li {
	list-style: none;
	list-style-type: none;
}
.links-nextprev li::before {
	display: none;
}

/* Tags */
.post-tag {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	text-transform: capitalize;
	font-style: italic;
}
.postlist-item > .post-tag {
	align-self: center;
}

.post-metadata {
	display: inline-flex;
	flex-wrap: wrap;
	gap: 0.5em;
	list-style: none;
	padding: 0;
	margin: 0;
}
.post-metadata time {
	margin-right: 1em;
}

/* Tables */
table {
	margin: 1em 0;
}
table td,
table th {
	padding-right: 1em;
}

/* Code */
pre,
code {
	font-family: var(--font-family-monospace);
}
pre:not([class*="language-"]) {
	margin: 0.5em 0;
	line-height: 1.375;
	-moz-tab-size: var(--syntax-tab-size);
	-o-tab-size: var(--syntax-tab-size);
	tab-size: var(--syntax-tab-size);
	-webkit-hyphens: none;
	-ms-hyphens: none;
	hyphens: none;
	direction: ltr;
	text-align: left;
	white-space: pre;
	word-spacing: normal;
	word-break: normal;
	overflow-x: auto;
}
code {
	word-break: break-all;
}

/* Increase specificity and add !important to force nav and links to use author header font */
body[data-author="jane"] nav,
body[data-author="jane"] .nav,
body[data-author="jane"] .nav-item,
body[data-author="jane"] .nav-item a {
	font-family: var(--author-jane-font-header, var(--font-family)) !important;
}
body[data-author="abby"] nav,
body[data-author="abby"] .nav,
body[data-author="abby"] .nav-item,
body[data-author="abby"] .nav-item a {
	font-family: var(--author-abby-font-header, var(--font-family)) !important;
}
body[data-author="orionlw"] nav,
body[data-author="orionlw"] .nav,
body[data-author="orionlw"] .nav-item,
body[data-author="orionlw"] .nav-item a {
	font-family: var(--author-orionlw-font-header, var(--font-family)) !important;
}
body[data-author="adesse"] nav,
body[data-author="adesse"] .nav,
body[data-author="adesse"] .nav-item,
body[data-author="adesse"] .nav-item a {
	font-family: var(--author-adesse-font-header, var(--font-family)) !important;
}
body[data-author="amelia"] nav,
body[data-author="amelia"] .nav,
body[data-author="amelia"] .nav-item,
body[data-author="amelia"] .nav-item a {
	font-family: var(--author-amelia-font-header, var(--font-family)) !important;
}
body[data-author="nic"] nav,
body[data-author="nic"] .nav,
body[data-author="nic"] .nav-item,
body[data-author="nic"] .nav-item a {
	font-family: var(--author-nic-font-header, var(--font-family)) !important;
}
body[data-author="ewan"] nav,
body[data-author="ewan"] .nav,
body[data-author="ewan"] .nav-item,
body[data-author="ewan"] .nav-item a {
	font-family: var(--author-ewan-font-header, var(--font-family)) !important;
}
body[data-author="jane"] .home-link {
	font-family: var(--author-jane-font-header, var(--font-family)) !important;
}
body[data-author="abby"] .home-link {
	font-family: var(--author-abby-font-header, var(--font-family)) !important;
}
body[data-author="orionlw"] .home-link {
	font-family: var(--author-orionlw-font-header, var(--font-family)) !important;
}
body[data-author="adesse"] .home-link {
	font-family: var(--author-adesse-font-header, var(--font-family)) !important;
}
body[data-author="amelia"] .home-link {
	font-family: var(--author-amelia-font-header, var(--font-family)) !important;
}
body[data-author="nic"] .home-link {
	font-family: var(--author-nic-font-header, var(--font-family)) !important;
}
body[data-author="ewan"] .home-link {
	font-family: var(--author-ewan-font-header, var(--font-family)) !important;
}

/* ...add any additional utility or component styles below... */


/* Search functionality styles */
.search-overlay {
	display: none;
	position: fixed;
	top: 0;
	left: 0;
	width: 100vw;
	height: 100vh;
	background: rgba(0, 0, 0, 0.8);
	z-index: 10000;
	backdrop-filter: blur(4px);
}

.search-overlay.active {
	display: flex !important;
	align-items: flex-start;
	justify-content: center;
	padding-top: 10vh;
}

.search-modal {
	background: var(--background-color);
	border: 2px solid var(--primary);
	border-radius: 8px;
	width: 90%;
	max-width: 600px;
	max-height: 70vh;
	overflow: hidden;
	box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3);
}

.search-header {
	display: flex;
	align-items: center;
	padding: 1rem;
	border-bottom: 1px solid var(--primary);
}

#search-input {
	flex: 1;
	border: none;
	background: transparent;
	font-size: 1.2rem;
	color: var(--color);
	outline: none;
	font-family: var(--font-family);
}

#search-input::placeholder {
	color: var(--muted-color);
	opacity: 0.7;
}

.search-close {
	background: none;
	border: none;
	color: var(--color);
	cursor: pointer;
	padding: 0.5rem;
	display: flex;
	align-items: center;
	justify-content: center;
	border-radius: 4px;
}

.search-close:hover {
	background-color: var(--primary);
	color: var(--background-color);
}

.search-results {
	max-height: 400px;
	overflow-y: auto;
	padding: 0;
}

.search-result {
	padding: 1rem;
	border-bottom: 1px solid var(--muted-color);
	cursor: pointer;
	transition: background-color 0.2s ease;
}

.search-result:hover {
	background-color: var(--primary);
	color: var(--background-color);
}

.search-result:hover * {
	color: inherit;
}

.result-title {
	margin: 0 0 0.5rem 0;
	font-size: 1.1rem;
	font-family: var(--font-family);
}

.result-title a {
	color: inherit;
	text-decoration: none;
}

.result-meta {
	display: flex;
	gap: 1rem;
	align-items: center;
	font-size: 0.85rem;
	opacity: 0.8;
	margin-bottom: 0.5rem;
}

.search-footer {
	padding: 0.75rem 1rem;
	background: var(--muted-color);
	color: var(--background-color);
	font-size: 0.8rem;
	display: flex;
	gap: 1rem;
	align-items: center;
}

.search-footer kbd {
	background: rgba(255, 255, 255, 0.2);
	padding: 0.2rem 0.4rem;
	border-radius: 3px;
	font-family: monospace;
	font-size: 0.75rem;
}

.no-results {
	padding: 2rem;
	text-align: center;
	opacity: 0.7;
}

.search-overlay mark {
	background: var(--primary);
	color: var(--background-color);
	padding: 0.1rem 0.2rem;
	border-radius: 2px;
}

/* Mobile Navigation Styles */
.mobile-menu-toggle {
	display: none;
	background: none;
	border: none;
	color: var(--color);
	cursor: pointer;
	padding: 0.5rem;
	flex-direction: column;
	gap: 0.25rem;
	border-radius: 4px;
}

.hamburger-line {
	display: block;
	width: 20px;
	height: 2px;
	background: var(--color);
	transition: all 0.3s ease;
	transform-origin: center;
}

.mobile-menu-toggle[aria-expanded="true"] .hamburger-line:nth-child(1) {
	transform: rotate(45deg) translate(5px, 5px);
}

.mobile-menu-toggle[aria-expanded="true"] .hamburger-line:nth-child(2) {
	opacity: 0;
}

.mobile-menu-toggle[aria-expanded="true"] .hamburger-line:nth-child(3) {
	transform: rotate(-45deg) translate(7px, -6px);
}

@media (max-width: 768px) {
	.search-modal {
		width: 95%;
		max-height: 80vh;
	}
	.search-overlay.active {
		padding-top: 5vh;
	}

	header {
		display: flex;
		justify-content: space-between;
		align-items: center;
		position: relative;
	}

	.mobile-menu-toggle {
		display: flex;
		z-index: 1000;
	}

	#main-nav {
		position: absolute;
		top: 100%;
		left: 0;
		right: 0;
		background: var(--background-color);
		border: 2px solid var(--primary);
		border-radius: 8px;
		margin-top: 0.5rem;
		max-height: 0;
		overflow: hidden;
		opacity: 0;
		transform: translateY(-10px);
		transition: all 0.3s ease;
		z-index: 999;
	}

	#main-nav.nav-open {
		max-height: 400px;
		opacity: 1;
		transform: translateY(0);
		box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1);
	}

	.nav {
		flex-direction: column;
		padding: 1rem;
		gap: 0.75rem;
	}

	.nav-item {
		width: 100%;
	}

	.nav-item a, .nav-item button, .nav-item div {
		width: 100%;
		display: block;
		text-align: center;
		padding: 0.75rem;
		border-radius: 4px;
		transition: background-color 0.2s ease;
	}

	.nav-item a:hover, .nav-item button:hover {
		background: var(--primary);
		color: var(--background-color);
	}

	.nav-item div {
		justify-content: center;
		padding: 0.5rem;
	}

	#author-select {
		width: auto;
		min-width: 120px;
	}
}</style>
		<script type="module">// Thank you to https://github.com/daviddarnes/heading-anchors
// Thank you to https://amberwilson.co.uk/blog/are-your-anchor-links-accessible/

let globalInstanceIndex = 0;

class HeadingAnchors extends HTMLElement {
	static register(tagName) {
		if ("customElements" in window) {
			customElements.define(tagName || "heading-anchors", HeadingAnchors);
		}
	}

	static attributes = {
		exclude: "data-ha-exclude",
		prefix: "prefix",
		content: "content",
	}

	static classes = {
		anchor: "ha",
		placeholder: "ha-placeholder",
		srOnly: "ha-visualhide",
	}

	static defaultSelector = "h2,h3,h4,h5,h6";

	static css = `
.${HeadingAnchors.classes.srOnly} {
	clip: rect(0 0 0 0);
	height: 1px;
	overflow: hidden;
	position: absolute;
	width: 1px;
}
.${HeadingAnchors.classes.anchor} {
	position: absolute;
	left: var(--ha_offsetx);
	top: var(--ha_offsety);
	text-decoration: none;
	opacity: 0;
}
.${HeadingAnchors.classes.placeholder} {
	opacity: .3;
}
.${HeadingAnchors.classes.anchor}:is(:focus-within, :hover) {
	opacity: 1;
}
.${HeadingAnchors.classes.anchor},
.${HeadingAnchors.classes.placeholder} {
	display: inline-block;
	padding: 0 .25em;

	/* Disable selection of visually hidden label */
	-webkit-user-select: none;
	user-select: none;
}

@supports (anchor-name: none) {
	.${HeadingAnchors.classes.anchor} {
		position: absolute;
		left: anchor(left);
		top: anchor(top);
	}
}`;

	get supports() {
		return "replaceSync" in CSSStyleSheet.prototype;
	}

	get supportsAnchorPosition() {
		return CSS.supports("anchor-name: none");
	}

	constructor() {
		super();

		if(!this.supports) {
			return;
		}

		let sheet = new CSSStyleSheet();
		sheet.replaceSync(HeadingAnchors.css);
		document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];

		this.headingStyles = {};
		this.instanceIndex = globalInstanceIndex++;
	}

	connectedCallback() {
		if (!this.supports) {
			return;
		}

		this.headings.forEach((heading, index) => {
			if(!heading.hasAttribute(HeadingAnchors.attributes.exclude)) {
				let anchor = this.getAnchorElement(heading);
				let placeholder = this.getPlaceholderElement();

				// Prefers anchor position approach for better accessibility
				// https://amberwilson.co.uk/blog/are-your-anchor-links-accessible/
				if(this.supportsAnchorPosition) {
					let anchorName = `--ha_${this.instanceIndex}_${index}`;
					placeholder.style.setProperty("anchor-name", anchorName);
					anchor.style.positionAnchor = anchorName;
				}

				heading.appendChild(placeholder);
				heading.after(anchor);
			}
		});
	}

	// Polyfill-only
	positionAnchorFromPlaceholder(placeholder) {
		if(!placeholder) {
			return;
		}

		let heading = placeholder.closest("h1,h2,h3,h4,h5,h6");
		if(!heading.nextElementSibling) {
			return;
		}

		// TODO next element could be more defensive
		this.positionAnchor(heading.nextElementSibling);
	}

	// Polyfill-only
	positionAnchor(anchor) {
		if(!anchor || !anchor.previousElementSibling) {
			return;
		}

		// TODO previous element could be more defensive
		let heading = anchor.previousElementSibling;
		this.setFontProp(heading, anchor);

		if(this.supportsAnchorPosition) {
			// quit early
			return;
		}

		let placeholder = heading.querySelector(`.${HeadingAnchors.classes.placeholder}`);
		if(placeholder) {
			anchor.style.setProperty("--ha_offsetx", `${placeholder.offsetLeft}px`);
			anchor.style.setProperty("--ha_offsety", `${placeholder.offsetTop}px`);
		}
	}

	setFontProp(heading, anchor) {
		let placeholder = heading.querySelector(`.${HeadingAnchors.classes.placeholder}`);
		if(placeholder) {
			let style = getComputedStyle(placeholder);
			let props = ["font-weight", "font-size", "line-height", "font-family"];
			let font = props.map(name => style.getPropertyValue(name));
			anchor.style.setProperty("font", `${font[0]} ${font[1]}/${font[2]} ${font[3]}`);
		}
	}

	getAccessibleTextPrefix() {
		// Useful for i18n
		return this.getAttribute(HeadingAnchors.attributes.prefix) || "Jump to section titled";
	}

	getContent() {
		if(this.hasAttribute(HeadingAnchors.attributes.content)) {
			return this.getAttribute(HeadingAnchors.attributes.content);
		}
		return "#";
	}

	// Placeholder nests inside of heading
	getPlaceholderElement() {
		let ph = document.createElement("span");
		ph.setAttribute("aria-hidden", true);
		ph.classList.add(HeadingAnchors.classes.placeholder);
		let content = this.getContent();
		if(content) {
			ph.textContent = content;
		}

		ph.addEventListener("mouseover", (e) => {
			let placeholder = e.target.closest(`.${HeadingAnchors.classes.placeholder}`);
			if(placeholder) {
				this.positionAnchorFromPlaceholder(placeholder);
			}
		});

		return ph;
	}

	getAnchorElement(heading) {
		let anchor = document.createElement("a");
		anchor.href = `#${heading.id}`;
		anchor.classList.add(HeadingAnchors.classes.anchor);

		let content = this.getContent();
		anchor.innerHTML = `<span class="${HeadingAnchors.classes.srOnly}">${this.getAccessibleTextPrefix()}: ${heading.textContent}</span>${content ? `<span aria-hidden="true">${content}</span>` : ""}`;

		anchor.addEventListener("focus", e => {
			let anchor = e.target.closest(`.${HeadingAnchors.classes.anchor}`);
			if(anchor) {
				this.positionAnchor(anchor);
			}
		});

		anchor.addEventListener("mouseover", (e) => {
			// when CSS anchor positioning is supported, this is only used to set the font
			let anchor = e.target.closest(`.${HeadingAnchors.classes.anchor}`);
			this.positionAnchor(anchor);
		});

		return anchor;
	}

	get headings() {
		return this.querySelectorAll(this.selector.split(",").map(entry => `${entry.trim()}[id]`));
	}

	get selector() {
		return this.getAttribute("selector") || HeadingAnchors.defaultSelector;
	}
}

HeadingAnchors.register();

export { HeadingAnchors }
</script>

        <!-- IndieAuth endpoints -->
        <link rel="authorization_endpoint" href="https://indieauth.com/auth">
        <link rel="token_endpoint" href="https://tokens.indieauth.com/token">

        <!-- Identity verification -->
        <link rel="me" href="https://github.com/jane777-pixel">
        <link rel="me" href="mailto:haileebach@gmail.com">
		<link rel="me" href="mailto:orionlw@pm.me">
		<link rel="me" href="https://github.com/orionlw">

        <!-- Webmention endpoints -->
        <link rel="webmention" href="https://webmention.io/nightdogs.xyz/webmention">
        <link rel="pingback" href="https://webmention.io/nightdogs.xyz/xmlrpc">
    </head>
    <body class="h-card" >
        <div class="site-wrapper">
        <a href="#main" id="skip-link" class="visually-hidden">Skip to main content</a>

		<header>
			<a href="/" class="home-link p-name u-url">nightdogs</a>

			<button class="mobile-menu-toggle" aria-label="Toggle navigation menu" aria-expanded="false">
				<span class="hamburger-line"></span>
				<span class="hamburger-line"></span>
				<span class="hamburger-line"></span>
			</button>
			<nav id="main-nav">
				<h2 class="visually-hidden">Top level navigation menu</h2>
				<ul class="nav">
					<li class="nav-item"><a href="/">Home</a></li>
					<li class="nav-item"><a href="/explore/">Explore</a></li>
					<li class="nav-item"><a href="/authors/">Authors</a></li>
					<li class="nav-item"><a href="/cat/">Cat</a></li>
					<li class="nav-item"><a href="/feed/feed.xml">Feed</a></li>
					<li class="nav-item">
						<button data-search-trigger style="background:none;border:none;color:var(--color);cursor:pointer;padding:0.5rem;border-radius:4px;" aria-label="Search posts">
							🔍 Search
						</button>
					</li>
					<li class="nav-item">
						<div style="display:flex;align-items:center;gap:0.5em;">
							<button id="dark-mode-toggle" style="background:none;border:none;color:var(--color);cursor:pointer;padding:0.25rem;border-radius:4px;font-size:1.2em;" aria-label="Toggle dark mode">
								🌙
							</button>
							<select id="author-select" class="author-sync" name="author-select" style="background:none;border:1px solid var(--color);color:var(--color);min-width:6em;font-size:0.92em;padding:0.25em 0.5em;border-radius:4px;" aria-label="Select author theme">
								<option value="jane">Jane</option>
								<option value="orionlw">Orion</option>
								<option value="adesse">Adèsse</option>
								<option value="nic">Nic</option>
								<option value="amelia">Amelia</option>
								<option value="abby">Abby</option>
								<option value="ewan">Ewan</option>
							</select>
						</div>
					</li>
				</ul>
			</nav>
		</header>

		<main id="main" class="main-content">
			<heading-anchors>
				

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>nightdogs - Jane Marie Bach</title>
		<description>Posts by Jane Marie Bach on nightdogs</description>
		<link>https://nightdogs.xyz/authors/jane/</link>
		<atom:link href="https://nightdogs.xyz/feed/jane.xml" rel="self" type="application/rss+xml"/>
		<language>en-us</language>
		<lastBuildDate>Sat, 27 Jun 2026 23:57:00 GMT</lastBuildDate>
		<managingEditor>haileebach@gmail.com (Jane Marie Bach)</managingEditor>
		<webMaster>haileebach@gmail.com (nightdogs)</webMaster>
		<generator>Eleventy</generator>
		<image>
			<url>https://nightdogs.xyz/img/nightdogs-logo.png</url>
			<title>nightdogs - Jane Marie Bach</title>
			<link>https://nightdogs.xyz/authors/jane/</link>
		</image>
	<item>
		<title>whale of a time hehe</title>
		<description>how long have I dreamed of seeing a whale? probably since before I imagined it was an option in this lifetime. it&#39;s almost too mystical of an encounter to even dream of being actualized... or at least too big a dream for a younger jane who was watching high rises grow taller around her each day in...</description>
		<link>https://nightdogs.xyz/blog/jane/2026-06-27/whale-of-a-time-hehe/</link>
		<guid isPermaLink="true">https://nightdogs.xyz/blog/jane/2026-06-27/whale-of-a-time-hehe/</guid>
		<pubDate>Sat, 27 Jun 2026 23:57:00 GMT</pubDate>
		<author>haileebach@gmail.com (Jane Marie Bach)</author>
		
	</item>\n	<item>
		<title>Zuh rouleau de pizza… c’est génial!</title>
		<description>VIDEO: https://www.youtube.com/watch?v=IgCMuGV2TaE
The first week of May, Lisandre and I ventured into the South Panuke Wilderness Area (near Chester NS) and we got to try out backpacking/wild camping for the first time. It was an easy route to play it safe first time around – we followed an ATV...</description>
		<link>https://nightdogs.xyz/blog/jane/2026-06-09/zuh-rouleau-de-pizza…-c’est-génial/</link>
		<guid isPermaLink="true">https://nightdogs.xyz/blog/jane/2026-06-09/zuh-rouleau-de-pizza…-c’est-génial/</guid>
		<pubDate>Tue, 09 Jun 2026 02:31:00 GMT</pubDate>
		<author>haileebach@gmail.com (Jane Marie Bach)</author>
		
	</item>\n	<item>
		<title>just pictures</title>
		<description>I got a camera (Lumix GX1) from my dad and I have been having so much fun. maybe annoyingly so for Nic who doesn&#39;t want to stand in the rain waiting for me to take pictures every 10 steps on our walk. Or for Abby and Ewan who were subject to my paparazzi ways before they could even have breakfast....</description>
		<link>https://nightdogs.xyz/blog/jane/2026-05-26/just-pictures/</link>
		<guid isPermaLink="true">https://nightdogs.xyz/blog/jane/2026-05-26/just-pictures/</guid>
		<pubDate>Mon, 25 May 2026 23:01:00 GMT</pubDate>
		<author>haileebach@gmail.com (Jane Marie Bach)</author>
		<category>pictures</category>
	</item>\n	<item>
		<title>goodbye march</title>
		<description>spring is here and sunny days are so close that imagining the warmth on my skin no longer feels like a cruel fantasy! one week and two days until i am done by BMT. it will be a messy last stretch but I&#39;ll let it pass by as easily as possible. once this last final season is over, i&#39;d love to share...</description>
		<link>https://nightdogs.xyz/blog/jane/2026-04-01/goodbye-march/</link>
		<guid isPermaLink="true">https://nightdogs.xyz/blog/jane/2026-04-01/goodbye-march/</guid>
		<pubDate>Wed, 01 Apr 2026 03:08:00 GMT</pubDate>
		<author>haileebach@gmail.com (Jane Marie Bach)</author>
		<category>video</category>\n\t\t<category>music</category>
	</item>\n	<item>
		<title>sundogs!</title>
		<description>the oldest depiction of a sundog is a Swedish oil painting from 1575. i doubt the wonder I felt seeing one for the first time was much different from the wonder that compelled Elbfas to paint Vädersolstavlan. when Adèsse drove us to/from the Culture is Critical rally in Halifax, I saw my first...</description>
		<link>https://nightdogs.xyz/blog/jane/2026-03-06/sundogs/index-1/</link>
		<guid isPermaLink="true">https://nightdogs.xyz/blog/jane/2026-03-06/sundogs/index-1/</guid>
		<pubDate>Fri, 06 Mar 2026 21:43:00 GMT</pubDate>
		<author>haileebach@gmail.com (Jane Marie Bach)</author>
		
	</item>\n	<item>
		<title>rip Prince</title>
		<description>hey, it&#39;s been a while...
currently in the library &amp;quot;studying&amp;quot; and thought a new blog post might be a fantastic method of procrastination. probably not my most museful ramblings here, but I would love to share some pictures from the fall.
knitting
finished Nic&#39;s socks (I think the day...</description>
		<link>https://nightdogs.xyz/blog/jane/2025-11-18/rip-prince/</link>
		<guid isPermaLink="true">https://nightdogs.xyz/blog/jane/2025-11-18/rip-prince/</guid>
		<pubDate>Tue, 18 Nov 2025 20:50:00 GMT</pubDate>
		<author>haileebach@gmail.com (Jane Marie Bach)</author>
		<category>concrete</category>\n\t\t<category>swimming</category>\n\t\t<category>fibre arts</category>\n\t\t<category>music</category>\n\t\t<category>farm animals</category>
	</item>\n	<item>
		<title>continuing to build with cloudy pillars and sun beams</title>
		<description>well I&#39;ve moved on from pre-teeth to my new post-teeth lifestyle and the times have been trying. I ate enough mush for a lifetime, I said goodbye to joints for three weeks, I slept with a bag of frozen corn. by the time I recovered, and no sooner, the construction crew stopped hammering on my...</description>
		<link>https://nightdogs.xyz/blog/jane/2025-09-26/continuing-to-build-with-cloudy-pillars-and-sun-beams/</link>
		<guid isPermaLink="true">https://nightdogs.xyz/blog/jane/2025-09-26/continuing-to-build-with-cloudy-pillars-and-sun-beams/</guid>
		<pubDate>Fri, 26 Sep 2025 02:11:00 GMT</pubDate>
		<author>haileebach@gmail.com (Jane Marie Bach)</author>
		<category>concrete</category>\n\t\t<category>birthday</category>\n\t\t<category>swimming</category>\n\t\t<category>complaints</category>
	</item>\n	<item>
		<title>goodbye dog days</title>
		<description>new &#39;do
Adèsse gave me my fav haircut ever. Iggy supervised. It feels so me! I got to watch out the window as people stopped by for honey, and a few bumbling bees bumped against the glass. Can’t imagine a better salon experience. If you want to steal my look, ask for &amp;quot;mick jagger with 2...</description>
		<link>https://nightdogs.xyz/blog/jane/2025-08-24/the-usual-updates/</link>
		<guid isPermaLink="true">https://nightdogs.xyz/blog/jane/2025-08-24/the-usual-updates/</guid>
		<pubDate>Sun, 24 Aug 2025 16:39:00 GMT</pubDate>
		<author>haileebach@gmail.com (Jane Marie Bach)</author>
		
	</item>\n	<item>
		<title>please please rain ⛆</title>
		<description>abby&#39;s birthday! yay!
one of my dearest friends in the whole world finished another trip around the sun this past week! If you know Abby, you are one of the lucky ones.
abby makes yarn, is beloved by animals (acadia orange cat, Flint, worms, etc.), will go for a swim in any weather, and makes...</description>
		<link>https://nightdogs.xyz/blog/jane/2025-08-11/please-please-rain/</link>
		<guid isPermaLink="true">https://nightdogs.xyz/blog/jane/2025-08-11/please-please-rain/</guid>
		<pubDate>Mon, 11 Aug 2025 00:23:00 GMT</pubDate>
		<author>haileebach@gmail.com (Jane Marie Bach)</author>
		<category>fibre arts</category>\n\t\t<category>cats</category>\n\t\t<category>birthday</category>\n\t\t<category>complaints</category>\n\t\t<category>art</category>\n\t\t<category>reading</category>\n\t\t<category>politics</category>
	</item>\n	<item>
		<title>happy birthday, nic! 🍀</title>
		<description>so excited that many of my favourite people are now authors on this website too! hi everyone!
nic&#39;s birthday
of course, the most important event of the week, and perhaps the year, was nic&#39;s birthday. 23 on the 23rd! this is Nic&#39;s 5th trip around the sun since we first started going out, and I swear...</description>
		<link>https://nightdogs.xyz/blog/jane/nics-23rd/</link>
		<guid isPermaLink="true">https://nightdogs.xyz/blog/jane/nics-23rd/</guid>
		<pubDate>Wed, 30 Jul 2025 00:00:00 GMT</pubDate>
		<author>haileebach@gmail.com (Jane Marie Bach)</author>
		<category>horses</category>\n\t\t<category>cats</category>\n\t\t<category>concrete</category>\n\t\t<category>fibre arts</category>\n\t\t<category>baking</category>\n\t\t<category>music</category>
	</item>
	</channel>
</rss>

			</heading-anchors>
		</main>

		<footer class="p-note footer-site">
  <p>
    <em>Built with <a href="https://www.11ty.dev/">Eleventy v3.1.2</a></em>
  </p>
</footer>
        </div>
		<!-- This page `/feed/jane.xml` was built on 2026-07-08T02:08:11.139Z -->
		<script type="module" src=""></script>

		<!-- Load search functionality -->
		<script src="/js/search.js" defer></script>

        <!-- Dark mode functionality -->
        <script eleventy:ignore>
        document.addEventListener('DOMContentLoaded', function() {
          const toggle = document.getElementById('dark-mode-toggle');
          if (!toggle) return;

          let isDark = false;
          try {
            const saved = localStorage.getItem('nightdogs-dark-mode');
            isDark = saved === 'true' || (!saved && window.matchMedia('(prefers-color-scheme: dark)').matches);
          } catch(e) {}

          function updateToggle() {
            toggle.innerHTML = isDark ? '☀️' : '🌙';
            document.documentElement.setAttribute('data-theme', isDark ? 'dark' : 'light');
            try { localStorage.setItem('nightdogs-dark-mode', isDark); } catch(e) {}
          }

          toggle.addEventListener('click', function() {
            isDark = !isDark;
            updateToggle();
          });

          updateToggle();
        });

        // Mobile navigation toggle
        const mobileToggle = document.querySelector('.mobile-menu-toggle');
        const mainNav = document.getElementById('main-nav');

        if (mobileToggle && mainNav) {
          mobileToggle.addEventListener('click', function() {
            const isOpen = mainNav.classList.contains('nav-open');
            const newState = !isOpen;

            mainNav.classList.toggle('nav-open', newState);
            mobileToggle.setAttribute('aria-expanded', newState.toString());

            // Close menu when clicking outside
            if (newState) {
              setTimeout(() => {
                document.addEventListener('click', function closeMenu(e) {
                  if (!mainNav.contains(e.target) && !mobileToggle.contains(e.target)) {
                    mainNav.classList.remove('nav-open');
                    mobileToggle.setAttribute('aria-expanded', 'false');
                    document.removeEventListener('click', closeMenu);
                  }
                });
              }, 100);
            }
          });

          // Close mobile menu when window is resized to desktop
          window.addEventListener('resize', function() {
            if (window.innerWidth > 768) {
              mainNav.classList.remove('nav-open');
              mobileToggle.setAttribute('aria-expanded', 'false');
            }
          });
        }
        </script>

        <script eleventy:ignore>
        // Sync all author selectors and theme
        (function() {
          const authorSelectors = document.querySelectorAll('.author-sync');
          const siteWrapper = document.querySelector('.site-wrapper');
          const html = document.documentElement;

          function setThemeByAuthor(author) {
            document.body.classList.remove(...Array.from(document.body.classList).filter(c => c.startsWith('author-selected-')));
            if (author && author !== "all") {
              document.body.classList.add(`author-selected-${author}`);
              document.body.setAttribute('data-author', author);
              if (siteWrapper) siteWrapper.setAttribute('data-author', author);
              html.setAttribute('data-author', author);
              try { localStorage.setItem('author-theme', author); } catch(e){}
            } else {
              document.body.setAttribute('data-author', 'jane');
              if (siteWrapper) siteWrapper.setAttribute('data-author', 'jane');
              html.setAttribute('data-author', 'jane');
              try { localStorage.setItem('author-theme', 'jane'); } catch(e){}
            }
          }

          function syncAuthorSelectors(author) {
            authorSelectors.forEach(sel => {
              if (sel.value !== author) sel.value = author;
            });
            setThemeByAuthor(author);
            // If on blog archive, trigger post filtering
            if (typeof filterPosts === "function") filterPosts();
          }

          authorSelectors.forEach(sel => {
            sel.addEventListener('change', function() {
              syncAuthorSelectors(this.value);
            });
          });

          // On page load, sync selectors to localStorage or default
          let initialAuthor = "jane";
          try {
            const saved = localStorage.getItem('author-theme');
            if (saved) initialAuthor = saved;
          } catch(e){}
          syncAuthorSelectors(initialAuthor);
        })();
        </script>
        <script eleventy:ignore>
        function updateCatNavText() {
          const author = document.documentElement.getAttribute('data-author');
          // Find the nav link for the Cat page (assumes href contains 'cat')
          const navLinks = document.querySelectorAll('.nav-item a');
          navLinks.forEach(link => {
            if (link.getAttribute('href') && link.getAttribute('href').includes('cat')) {
            link.textContent = window.AUTHORS_DOG_PERSON?.[author] === true ? 'Dog' : 'Cat';
            }
          });
        }

        // Run on page load
        updateCatNavText();

        // Listen for author changes
        const navObserver = new MutationObserver(updateCatNavText);
        navObserver.observe(document.documentElement, { attributes: true, attributeFilter: ['data-author'] });
        </script>

    </body>
</html>
