diff --git a/assets/characters/README.md b/assets/characters/README.md
new file mode 100644
index 0000000..3b2d851
--- /dev/null
+++ b/assets/characters/README.md
@@ -0,0 +1,30 @@
+# Characters
+
+Imaginary friends that help me inject personality into my articles. These are
+anthropomorphized versions of animals that I have known in real life. I tried to
+draw them roughly in the style of Chris Pasquini, but failed myself, then tried
+using Perplexity's image generation. The style isn't quite the same, but I like
+it for these animals. Also, Perplexity does a horrible job of labeling images,
+so ignore the ref sheet emotion labels.
+
+## Spawn of Satan (aka Spawn aka SOS)
+
+
+
+Spawn of Satan is the name Travis gave to the cannulated cow, and it stuck.
+Spawn is old and cynical after having every professor with a new idea experiment
+on her. After being in academia for so long, she knows her way around
+mathematics and the scientific method reasonably well, even if she's never
+formally taken a college course in the sciences. She is the realist to any blog
+post's optimist.
+
+## Whelen
+
+
+
+Whelen is a happy-go-lucky German Shepherd/Husky mix puppy. He's been to school
+once - and that was just to get neutered - so his knowledge of math and science,
+heck, even of the humanities, isn't very good. He is very naive and thinks
+everyone is nice and wants to be his friend, but he is also friendly to everyone
+and is very vocal when he feels left out. He will step in when any blog post is
+getting too technical and demand an explanation for real people (dogs?).
diff --git a/assets/characters/spawn/_ref-blueeye-perplexity.png b/assets/characters/spawn/_ref-blueeye-perplexity.png
new file mode 100644
index 0000000..b8bef00
Binary files /dev/null and b/assets/characters/spawn/_ref-blueeye-perplexity.png differ
diff --git a/assets/characters/spawn/_ref-body-perplexity.png b/assets/characters/spawn/_ref-body-perplexity.png
new file mode 100644
index 0000000..04f95a6
Binary files /dev/null and b/assets/characters/spawn/_ref-body-perplexity.png differ
diff --git a/assets/characters/spawn/_ref-bodysmirk-perplexity.png b/assets/characters/spawn/_ref-bodysmirk-perplexity.png
new file mode 100644
index 0000000..afb9ba2
Binary files /dev/null and b/assets/characters/spawn/_ref-bodysmirk-perplexity.png differ
diff --git a/assets/characters/spawn/_ref-face-perplexity.png b/assets/characters/spawn/_ref-face-perplexity.png
new file mode 100644
index 0000000..de286db
Binary files /dev/null and b/assets/characters/spawn/_ref-face-perplexity.png differ
diff --git a/assets/characters/spawn/body-anger.png b/assets/characters/spawn/body-anger.png
new file mode 100644
index 0000000..0f9fd87
Binary files /dev/null and b/assets/characters/spawn/body-anger.png differ
diff --git a/assets/characters/spawn/body-lazy.png b/assets/characters/spawn/body-lazy.png
new file mode 100644
index 0000000..530eb46
Binary files /dev/null and b/assets/characters/spawn/body-lazy.png differ
diff --git a/assets/characters/spawn/body-skeptic.png b/assets/characters/spawn/body-skeptic.png
new file mode 100644
index 0000000..8e110dc
Binary files /dev/null and b/assets/characters/spawn/body-skeptic.png differ
diff --git a/assets/characters/spawn/body-snark.png b/assets/characters/spawn/body-snark.png
new file mode 100644
index 0000000..e2be9e1
Binary files /dev/null and b/assets/characters/spawn/body-snark.png differ
diff --git a/assets/characters/spawn/body-tired.png b/assets/characters/spawn/body-tired.png
new file mode 100644
index 0000000..3d84c4d
Binary files /dev/null and b/assets/characters/spawn/body-tired.png differ
diff --git a/assets/characters/spawn/face-confusion.png b/assets/characters/spawn/face-confusion.png
new file mode 100644
index 0000000..6a70166
Binary files /dev/null and b/assets/characters/spawn/face-confusion.png differ
diff --git a/assets/characters/spawn/face-happy.png b/assets/characters/spawn/face-happy.png
new file mode 100644
index 0000000..445dcef
Binary files /dev/null and b/assets/characters/spawn/face-happy.png differ
diff --git a/assets/characters/spawn/face-neutral.png b/assets/characters/spawn/face-neutral.png
new file mode 100644
index 0000000..44b5522
Binary files /dev/null and b/assets/characters/spawn/face-neutral.png differ
diff --git a/assets/characters/spawn/face-sad.png b/assets/characters/spawn/face-sad.png
new file mode 100644
index 0000000..15fdb4e
Binary files /dev/null and b/assets/characters/spawn/face-sad.png differ
diff --git a/assets/characters/spawn/face-toldyouso.png b/assets/characters/spawn/face-toldyouso.png
new file mode 100644
index 0000000..9a908bb
Binary files /dev/null and b/assets/characters/spawn/face-toldyouso.png differ
diff --git a/assets/characters/whelen/_ref-body-perplexity.png b/assets/characters/whelen/_ref-body-perplexity.png
new file mode 100644
index 0000000..e5d4103
Binary files /dev/null and b/assets/characters/whelen/_ref-body-perplexity.png differ
diff --git a/assets/characters/whelen/_ref-face-perplexity.png b/assets/characters/whelen/_ref-face-perplexity.png
new file mode 100644
index 0000000..107709c
Binary files /dev/null and b/assets/characters/whelen/_ref-face-perplexity.png differ
diff --git a/assets/characters/whelen/body-determined.png b/assets/characters/whelen/body-determined.png
new file mode 100644
index 0000000..2c37c46
Binary files /dev/null and b/assets/characters/whelen/body-determined.png differ
diff --git a/assets/characters/whelen/body-happy.png b/assets/characters/whelen/body-happy.png
new file mode 100644
index 0000000..ef40187
Binary files /dev/null and b/assets/characters/whelen/body-happy.png differ
diff --git a/assets/characters/whelen/body-neutral.png b/assets/characters/whelen/body-neutral.png
new file mode 100644
index 0000000..9737ccc
Binary files /dev/null and b/assets/characters/whelen/body-neutral.png differ
diff --git a/assets/characters/whelen/body-sad.png b/assets/characters/whelen/body-sad.png
new file mode 100644
index 0000000..2056f02
Binary files /dev/null and b/assets/characters/whelen/body-sad.png differ
diff --git a/assets/characters/whelen/body-tired.png b/assets/characters/whelen/body-tired.png
new file mode 100644
index 0000000..855a49d
Binary files /dev/null and b/assets/characters/whelen/body-tired.png differ
diff --git a/assets/characters/whelen/body-worry.png b/assets/characters/whelen/body-worry.png
new file mode 100644
index 0000000..2dd85e2
Binary files /dev/null and b/assets/characters/whelen/body-worry.png differ
diff --git a/assets/characters/whelen/face-anticipation.png b/assets/characters/whelen/face-anticipation.png
new file mode 100644
index 0000000..0be27d0
Binary files /dev/null and b/assets/characters/whelen/face-anticipation.png differ
diff --git a/assets/characters/whelen/face-bored.png b/assets/characters/whelen/face-bored.png
new file mode 100644
index 0000000..d376b4d
Binary files /dev/null and b/assets/characters/whelen/face-bored.png differ
diff --git a/assets/characters/whelen/face-happy.png b/assets/characters/whelen/face-happy.png
new file mode 100644
index 0000000..af35cae
Binary files /dev/null and b/assets/characters/whelen/face-happy.png differ
diff --git a/assets/characters/whelen/face-neutral.png b/assets/characters/whelen/face-neutral.png
new file mode 100644
index 0000000..1a93432
Binary files /dev/null and b/assets/characters/whelen/face-neutral.png differ
diff --git a/assets/characters/whelen/face-skeptic.png b/assets/characters/whelen/face-skeptic.png
new file mode 100644
index 0000000..33cc063
Binary files /dev/null and b/assets/characters/whelen/face-skeptic.png differ
diff --git a/assets/characters/whelen/face-tired.png b/assets/characters/whelen/face-tired.png
new file mode 100644
index 0000000..f395166
Binary files /dev/null and b/assets/characters/whelen/face-tired.png differ
diff --git a/assets/characters/whelen/face-worry.png b/assets/characters/whelen/face-worry.png
new file mode 100644
index 0000000..563b68e
Binary files /dev/null and b/assets/characters/whelen/face-worry.png differ
diff --git a/assets/styles/millironx.css b/assets/styles/millironx.css
index 9b2026b..00ad31e 100644
--- a/assets/styles/millironx.css
+++ b/assets/styles/millironx.css
@@ -185,6 +185,8 @@
"URW Bookman L", "Georgia Pro", Georgia, serif;
--font-family-slab-serif: Rockwell, "Rockwell Nova", "Roboto Slab",
"DejaVu Serif", "Sitka Small", serif;
+ --font-family-transitional: Charter, "Bitstream Charter", "Sitka Text",
+ Cambria, serif;
--font-family-system-ui: system-ui, sans-serif;
--font-family-monospace: "Nimbus Mono PS", "Courier New", monospace;
}
@@ -272,6 +274,34 @@ main {
flex-direction: column;
}
+article p,
+.character-dialog-text,
+article li {
+ font-family: var(--font-family-transitional);
+ font-size: 1.15rem;
+ text-justify: inter-word;
+ text-align: justify;
+ hyphens: auto;
+}
+
+article > p {
+ text-indent: 2ch;
+ line-height: 1.5em;
+}
+
+article h1 + p,
+article h2 + p,
+article h3 + p,
+article h4 + p,
+article h5 + p,
+article h6 + p {
+ text-indent: 0;
+}
+
+.footnotes p {
+ font-size: smaller;
+}
+
figure {
border-color: var(--container-border);
border-width: 1.5pt;
@@ -572,6 +602,55 @@ figcaption .mono {
max-width: 100%;
}
+.character-dialog {
+ display: grid;
+ width: calc(100% - 1rem);
+ grid-template-columns: 5rem 1fr;
+ grid-template-rows: auto auto;
+ gap: 1em;
+ margin: 0.5rem;
+}
+
+.character-avatar {
+ display: grid;
+ max-width: 100%;
+ grid-row: 1 / span 2;
+ grid-column: 1;
+ align-self: start;
+ align-items: center;
+ justify-items: center;
+ min-width: 5rem;
+ min-height: 5rem;
+ border-radius: 5rem;
+ align-items: center;
+ border-style: solid;
+ border-color: var(--nav-button-background-hover);
+ background-color: var(--cowhide-2);
+}
+
+.character-avatar > img {
+ max-width: 4rem;
+ max-height: 4rem;
+}
+
+.character-dialog-bubble {
+ display: grid;
+ grid-template-rows: auto auto;
+ align-self: start;
+ border-radius: 0.5em;
+ border-width: 0.2rem;
+ border-color: var(--nav-button-background);
+ border-style: outset;
+ row-gap: 0.5rem;
+ padding: 0.5rem;
+ background-color: var(--container-border);
+ min-height: 5rem;
+}
+
+.character-dialog-title {
+ font-weight: bolder;
+}
+
/*
Helper classes
*/
diff --git a/layouts/posts/single.html b/layouts/posts/single.html
new file mode 100644
index 0000000..49151c4
--- /dev/null
+++ b/layouts/posts/single.html
@@ -0,0 +1,6 @@
+{{ define "main" }}
+ {{ .Title }}
+ {{ .Content }}
+