diff --git a/assets/scss/_single.scss b/assets/scss/_single.scss
index 4b3b8303..b1edb7ff 100644
--- a/assets/scss/_single.scss
+++ b/assets/scss/_single.scss
@@ -597,4 +597,11 @@ footer svg {
vertical-align: -0.125em;
width: 1em;
height: 1em;
+}
+
+.alert {
+ .alert-heading {
+ font-weight: bold;
+ color: var(--accent);
+ }
}
\ No newline at end of file
diff --git a/content/posts/40th-puzzle-box/what-a-gift/bump-1.jpg b/content/posts/40th-puzzle-box/what-a-gift/bump-1.jpg
new file mode 100644
index 00000000..1105bcbe
Binary files /dev/null and b/content/posts/40th-puzzle-box/what-a-gift/bump-1.jpg differ
diff --git a/content/posts/40th-puzzle-box/what-a-gift/bump-2.jpg b/content/posts/40th-puzzle-box/what-a-gift/bump-2.jpg
new file mode 100644
index 00000000..f6599521
Binary files /dev/null and b/content/posts/40th-puzzle-box/what-a-gift/bump-2.jpg differ
diff --git a/content/posts/40th-puzzle-box/what-a-gift/bump-3-matterhorn.jpg b/content/posts/40th-puzzle-box/what-a-gift/bump-3-matterhorn.jpg
new file mode 100644
index 00000000..822a1df2
Binary files /dev/null and b/content/posts/40th-puzzle-box/what-a-gift/bump-3-matterhorn.jpg differ
diff --git a/content/posts/40th-puzzle-box/what-a-gift/bump-4-kilimanjaro.jpg b/content/posts/40th-puzzle-box/what-a-gift/bump-4-kilimanjaro.jpg
new file mode 100644
index 00000000..137d19cf
Binary files /dev/null and b/content/posts/40th-puzzle-box/what-a-gift/bump-4-kilimanjaro.jpg differ
diff --git a/content/posts/40th-puzzle-box/what-a-gift/bump-5-everest.jpg b/content/posts/40th-puzzle-box/what-a-gift/bump-5-everest.jpg
new file mode 100644
index 00000000..836052a1
Binary files /dev/null and b/content/posts/40th-puzzle-box/what-a-gift/bump-5-everest.jpg differ
diff --git a/content/posts/40th-puzzle-box/what-a-gift/edge.jpg b/content/posts/40th-puzzle-box/what-a-gift/edge.jpg
new file mode 100644
index 00000000..653c7b6b
Binary files /dev/null and b/content/posts/40th-puzzle-box/what-a-gift/edge.jpg differ
diff --git a/content/posts/40th-puzzle-box/what-a-gift/index.md b/content/posts/40th-puzzle-box/what-a-gift/index.md
new file mode 100644
index 00000000..3e1d13af
--- /dev/null
+++ b/content/posts/40th-puzzle-box/what-a-gift/index.md
@@ -0,0 +1,132 @@
+---
+title: "What awesomeness is this‽"
+emoji: 🌐
+date: 2025-07-17T15:40:50.740Z
+draft: false
+tags:
+ - puzzle
+ - birthday
+ - miriscient
+ - conlang
+ - toki-pona
+summary: This custom made, almost kilogram brass curio is infuriatingly WONDERFUL. I *will* break into it… eventually.
+series:
+- Puzzle box
+---
+It is extremely hard to be speechless on a blog. There's a certain amount of _telling people what's going on_ needed. Let me try and get over my awe-struck amazement enough to tell you about the puzzle box my friends {{< friend Hugo >}} and {{< friend Margot >}} **made** 🤯 and gave me at my recent 40th birthday party.
+
+
+Nenapilinseloepanawasolajeloanpautalapimejajouta..
+MΓunasaalealeolinwanselo..
+{{%/ font %}}
+
+You can try and translate it yourself with an [online toki pona dictionary](https://nimi.li/) if you like! Here's what I made of the first sentence. (I'll translate the others here next time!)
+
+| glyph | word | meaning |
+| ------------------------------------------- | ---------------------------------- | ------------------------------------ |
+| {{< font "tokipona" >}}sewi{{ font >}} | [sewi](https://nimi.li/sewi) | up, top, highest, awesome, inspiring |
+| {{< font "tokipona" >}}pi{{ font >}} | [pi](https://nimi.li/pi) | _modifier: refinements follow_ |
+| {{< font "tokipona" >}}nena{{ font >}} | [nena](https://nimi.li/nena) | bump, hill |
+| {{< font "tokipona" >}}suli{{ font >}} | [suli](https://nimi.li/suli) | big, tall, important |
+| {{< font "tokipona" >}}li{{ font >}} | [li](https://nimi.li/li) | _modifier: verb follows_ |
+| {{< font "tokipona" >}}tawa{{ font >}} | [tawa](https://nimi.li/tawa) | motion |
+| {{< font "tokipona" >}}e{{ font >}} | [e](https://nimi.li/e) | _modifier: direct object follows_ |
+| {{< font "tokipona" >}}sitelen{{ font >}} | [sitelen](https://nimi.li/sitelen) | image, picture, writing |
+| {{< font "tokipona" >}}lon{{ font >}} | [lon](https://nimi.li/lon) | located at |
+| {{< font "tokipona" >}}sinpin{{ font >}} | [sinpin](https://nimi.li/sinpin) | vertical surface, wall |
+
+There are three modifiers in this sentence, defining relationships between the words around them:
+
+- _[pi](https://nimi.li/pi)_ indicates that the "up" is also a "hill" and "tall" or "important". I think this describes the bumps on the surface of the puzzle! This is the sentence's subject.
+- _[li](https://nimi.li/li)_ tells me that I should interpret the next word as a verb — so it's not _motion_, but to _make_ motion — or to move!
+- _[e](https://nimi.li/e)_ points me at the object of the sentence, an image located at a wall.
+
+So, being a little liberal, I translate this as:
+
+> Move the bumps on the top to a wall to make an image.
+
+I went to a dark room, and shone a bright light through these "important bumps" and…
+
+{{< figure alt="A hard-to-take photo of a bright light emitting out of the glass bumps on the top of my puzzle, in a dark room." src="./projecting.jpg" >}}
+
+Holy crap _images_. It's a tiny slide projector!
+
+## The projector
+
+There's only a few millimetres for each "slide" in these holes, so the photos are blurry at best, but here they are, on my wall, as I moved the light between them. (I've laid them out here in the same order as the photo of the puzzle box above, you can click on a bump up top, and it'll scroll to and highlight the relevant image here.)
+
+
++{{ else }} ++ {{ index $emojis .AlertType }} + {{ with .AlertTitle }} + {{ . }} + {{ else }} + {{ or (i18n .AlertType) (title .AlertType) }} + {{ end }} +
+ {{ .Text }} +
+ {{ .Text }} ++{{ end }} \ No newline at end of file diff --git a/layouts/_default/single.html b/layouts/_default/single.html index 187df8e4..679ecd54 100644 --- a/layouts/_default/single.html +++ b/layouts/_default/single.html @@ -105,6 +105,23 @@ {{- end }} {{ .Content }} + + {{ with .Params.series }} + {{- $seriesName := index . 0 -}} + {{- $pages := where site.RegularPages "Params.series" "intersect" (slice $seriesName) -}} + + {{ if gt (len $pages) 1 -}} +
Others in the series…
+