diff --git a/Gemfile b/Gemfile
index 3b5134d..9ffd013 100644
--- a/Gemfile
+++ b/Gemfile
@@ -3,3 +3,11 @@ source "https://rubygems.org"
gem "jekyll", "~> 4.2.2"
gem "webrick", "~> 1.8"
+
+gem "csv", "~> 3.3"
+
+gem "logger", "~> 1.7"
+
+gem "base64", "~> 0.3.0"
+
+gem "bigdecimal", "~> 3.3"
diff --git a/Gemfile.lock b/Gemfile.lock
index fe082dc..256b139 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -3,12 +3,17 @@ GEM
specs:
addressable (2.8.7)
public_suffix (>= 2.0.2, < 7.0)
+ base64 (0.3.0)
+ bigdecimal (3.3.1)
colorator (1.1.0)
concurrent-ruby (1.3.5)
+ csv (3.3.5)
em-websocket (0.5.3)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0)
+ eventmachine (1.2.7)
eventmachine (1.2.7-x86-mingw32)
+ ffi (1.17.2-x64-mingw-ucrt)
ffi (1.17.2-x86-mingw32)
forwardable-extended (2.6.0)
http_parser.rb (0.8.0)
@@ -41,6 +46,7 @@ GEM
listen (3.9.0)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
+ logger (1.7.0)
mercenary (0.4.0)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
@@ -59,10 +65,15 @@ GEM
webrick (1.9.1)
PLATFORMS
+ x64-mingw-ucrt
x86-mingw32
DEPENDENCIES
+ base64 (~> 0.3.0)
+ bigdecimal (~> 3.3)
+ csv (~> 3.3)
jekyll (~> 4.2.2)
+ logger (~> 1.7)
webrick (~> 1.8)
BUNDLED WITH
diff --git a/_events/new_year_2026.html b/_events/new_year_2026.html
new file mode 100644
index 0000000..8073aa8
--- /dev/null
+++ b/_events/new_year_2026.html
@@ -0,0 +1,132 @@
+---
+layout: base
+title: New Year, New You?
+subtitle: Burst From Your Cocoon!
+open: Jan 1st - Jan 22nd
+style: src/css/events/ny-26.css
+started: false
+permalink: /events/new_year_2026.html
+---
+
+
+
+
+ {{ page.title }}
+ {{ page.subtitle }}
+ {{ page.open }}
+
+
+
+
+
+ Prompts
+ You can do one or both of them!
+
+
+
+
Blog / Page
+
+ Make a page or write a blog post that explores
+ a reflection on past decisions (good or bad),
+ or brainstorms / shares plans for the future.
+
+
+
+
Pixel Art
+
+ Customize your own Butterfly or Moth!
+
+
+ You can make them static or animated.
+ Why not put a jar for it on your site too!
+
+
+ Get the assets and code here
+
+
+
+
+ Submit
Entry
+
+ Credits
+
+
+
+
+
+
+
+
+
+
diff --git a/_events/new_year_2026.md b/_events/new_year_2026.md
deleted file mode 100644
index d308143..0000000
--- a/_events/new_year_2026.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-layout: base
-title: New Year, New You?
-subtitle: Burst From Your Cocoon!
-style: ny-26
-started: false
----
-
-to be announced
diff --git a/_layouts/base.html b/_layouts/base.html
index 2f6d745..25fc368 100644
--- a/_layouts/base.html
+++ b/_layouts/base.html
@@ -3,7 +3,11 @@
+ {% if page.style %}
+
+ {% else %}
+ {% endif %}
{{ page.title }}
diff --git a/_layouts/event.html b/_layouts/event.html
index 2a53d05..5d60d73 100644
--- a/_layouts/event.html
+++ b/_layouts/event.html
@@ -1,7 +1,7 @@
---
layout: base
---
-
+
{{ page.title }}
diff --git a/_pages/index.md b/_pages/index.md
index 41fede8..66fa70d 100644
--- a/_pages/index.md
+++ b/_pages/index.md
@@ -3,6 +3,7 @@ layout: default
title: ~rodrick
style: default
extra: saved-theme="dark"
+permalink: /
---
Hewwo! I'm [Rodrick](https://shroom.ink)!
diff --git a/src/css/events/ny-26.css b/src/css/events/ny-26.css
new file mode 100644
index 0000000..64de77d
--- /dev/null
+++ b/src/css/events/ny-26.css
@@ -0,0 +1,281 @@
+@import url(https://fonts.bunny.net/css?family=indie-flower:400|pangolin:400);
+
+:root {
+ --font : 'Pangolin', handwriting;
+ --font-heading : 'Pangolin', handwriting;
+ --font-color : #3C2B2A;
+ --font-size : calc(1rem + (1vw / 12));
+ --img-rope : url("../../img/new_year_26/rope.webp");
+ --img-sign-b : url("../../img/new_year_26/sign_bottom.webp");
+ --img-sign-t : url("../../img/new_year_26/sign_top.webp");
+ --img-stump : url("../../img/new_year_26/tree_stump.webp");
+ --img-forest : url("../../img/new_year_26/forest.webp");
+ --img-jar : url("../../img/new_year_26/jar.png");
+ --img-paper : url("../../img/new_year_26/paper.webp");
+ --img-note : url("../../img/new_year_26/note.webp");
+ --bg-gradient : linear-gradient(180deg,rgba(53, 7, 99, .3) 28%, rgba(207, 106, 29, .3) 100%);
+}
+
+h1, h2, h3, h4, h5, h6 {
+ font-family: var(--font-heading);
+ text-align: center;
+}
+
+a { color: rgba(53, 7, 99); }
+a:hover { color: rgba(207, 106, 29); }
+
+.note {
+ background-image: var(--img-note);
+ background-size: contain;
+ background-repeat: no-repeat;
+ background-position: center;
+ color: white;
+
+ display: block;
+ width: 100%;
+ height: calc(100px - 1em);
+ text-align: center;
+ padding: 1em 0 0 0;
+ font-size: 1.3em;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+.note:hover { color: #ffffff88; }
+
+html, body {
+ margin: 0;
+ font-size: var(--font-size);
+ font-family: var(--font);
+ color: var(--font-color);
+ text-shadow: 0 1px 0 #F9EDD4, 0 -1px 0 black;
+}
+
+html {
+ display: grid;
+ grid-auto-rows: 1fr;
+ height: 100%;
+}
+
+body {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ grid-template-rows: 1fr;
+ grid-template-areas: "main jar";
+
+ background-image: var(--bg-gradient), var(--img-forest);
+ background-position: center, bottom;
+ background-size: cover;
+}
+
+#page {
+ grid-area: main;
+ display: grid;
+ grid-template-rows: 28% 59% 13%;
+ width: 80%;
+ height: calc(100% - 2em);
+ max-height: 100%;
+ margin: auto;
+ padding-top: 2em;
+
+ background-image: var(--img-rope), var(--img-rope);
+ background-repeat: no-repeat;
+ background-size: auto 100%;
+ background-position: left, right;
+}
+
+header {
+ background-image: var(--img-sign-t);
+ background-repeat: no-repeat;
+ background-size: 100%;
+}
+
+hgroup {
+ margin: 5px;
+ text-align: center;
+}
+
+h1 {
+ margin: .3em 0 5px 0;
+}
+
+hgroup p {
+ font-size: 1.4em;
+ margin-top: 5px;
+}
+
+main {
+ background-image: var(--img-sign-b);
+ background-repeat: no-repeat;
+ background-size: 100%;
+ padding: .5em;
+ height: 100%;
+ max-height: 500px;
+ overflow: auto;
+ scrollbar-color: white #B48976;
+ scrollbar-gutter: stable;
+}
+
+main hgroup h2,
+main hgroup p {
+ margin: 0;
+}
+
+.grid {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ grid-gap: 1em;
+ padding: 0 .5em;
+}
+
+.grid h3 { margin-bottom: 0; }
+.grid p {
+ line-height: 1.6;
+ margin-top: 5px;
+}
+
+#stump {
+ grid-area: jar;
+ display: grid;
+ justify-items: center;
+ align-items: start;
+ background-image: var(--img-stump);
+ background-repeat: no-repeat;
+ background-size: 100%;
+ background-position: center bottom;
+}
+
+#jar {
+ border-image: var(--img-jar) 32
+ fill / 96px / 32px;
+ height: 60%;
+ width: 50%;
+ margin-top: 3em;
+ padding-top: 2em;
+ image-rendering: pixelated;
+
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ overflow: auto;
+ scrollbar-color: white #B48976;
+}
+
+#submit,
+#tutorial {
+ display: none;
+ position:absolute;
+ z-index: 12;
+ width: 100%;
+ height: 100%;
+ background: var(--bg-gradient);
+ justify-items: center;
+ align-items: center;
+}
+
+#submit:target,
+#tutorial:target {
+ display: grid;
+}
+
+.paper {
+ display: block;
+ aspect-ratio: 4 / 3;
+ min-width: 50%;
+ margin: auto;
+
+ background-image: var(--img-paper);
+ background-repeat: no-repeat;
+ background-size: contain;
+ background-position: center;
+}
+
+.paper .inner {
+ display: block;
+ padding: 18% 15% 15% 18%;
+ height: calc(100% - (3em + 2em));
+}
+
+.paper .inner {
+ display: grid;
+ grid-template-rows: 90% 10%;
+}
+
+.paper .form {
+ height: 100%;
+ overflow: auto;
+ scrollbar-color: white #B48976;
+}
+
+/* Butterflies and Moths */
+
+.insect {
+ image-rendering: pixelated;
+ overflow: hidden;
+ width: 100%;
+}
+
+.insect img { margin: 0; }
+
+.moth { aspect-ratio: 74 / 36 !important; }
+.moth .wing { aspect-ratio: 37 / 36 !important; }
+.butterfly { aspect-ratio: 76 / 47 !important; }
+.butterfly .wing { aspect-ratio: 38 / 47 !important; }
+
+
+.insect .body {
+ z-index: 6;
+ width: 100%;
+}
+
+.insect .wings {
+ position: relative;
+ top: -106%;
+
+ display: grid;
+ width: 100%;
+ height: 100%;
+ grid-template-columns: 1fr 1fr;
+ grid-template-rows: 1fr;
+}
+
+.insect .left,
+.insect .right {
+ display: grid;
+ width: 100%;
+ grid-template-columns: 1fr;
+ grid-template-rows: 1fr;
+}
+
+.insect .wing {
+ width: 100%;
+}
+.insect .top {
+ z-index: 8;
+ position: relative;
+}
+.insect .bottom {
+ z-index: 7;
+ position: relative;
+ top: calc(100% * -1);
+}
+
+.insect .left .wing { transform-origin: right center;}
+.insect .right .wing { transform-origin: left center; }
+.insect .top {
+ animation: flutter 300ms infinite;
+}
+.insect .bottom {
+ animation: flutter_offset 300ms infinite;
+}
+
+@keyframes flutter {
+ 0% { transform: rotateY(0); }
+ 45% { transform: rotateY(70deg); }
+ 95%, 100% { transform: rotateY(0); }
+}
+
+@keyframes flutter_offset {
+ 0%, 5% { transform: rotateY(0); }
+ 50% { transform: rotateY(70deg); }
+ 100% { transform: rotateY(0); }
+}
diff --git a/src/img/new_year_26/Butterfly.aseprite b/src/img/new_year_26/Butterfly.aseprite
new file mode 100644
index 0000000..6090beb
Binary files /dev/null and b/src/img/new_year_26/Butterfly.aseprite differ
diff --git a/src/img/new_year_26/Butterfly.png b/src/img/new_year_26/Butterfly.png
new file mode 100644
index 0000000..a24403d
Binary files /dev/null and b/src/img/new_year_26/Butterfly.png differ
diff --git a/src/img/new_year_26/Butterfly_Body.png b/src/img/new_year_26/Butterfly_Body.png
new file mode 100644
index 0000000..6f3ba4c
Binary files /dev/null and b/src/img/new_year_26/Butterfly_Body.png differ
diff --git a/src/img/new_year_26/Butterfly_Wing_Bottom_Left.png b/src/img/new_year_26/Butterfly_Wing_Bottom_Left.png
new file mode 100644
index 0000000..d08568d
Binary files /dev/null and b/src/img/new_year_26/Butterfly_Wing_Bottom_Left.png differ
diff --git a/src/img/new_year_26/Butterfly_Wing_Bottom_Right.png b/src/img/new_year_26/Butterfly_Wing_Bottom_Right.png
new file mode 100644
index 0000000..d9d0566
Binary files /dev/null and b/src/img/new_year_26/Butterfly_Wing_Bottom_Right.png differ
diff --git a/src/img/new_year_26/Butterfly_Wing_Top_Left.png b/src/img/new_year_26/Butterfly_Wing_Top_Left.png
new file mode 100644
index 0000000..3ecbe7c
Binary files /dev/null and b/src/img/new_year_26/Butterfly_Wing_Top_Left.png differ
diff --git a/src/img/new_year_26/Butterfly_Wing_Top_Right.png b/src/img/new_year_26/Butterfly_Wing_Top_Right.png
new file mode 100644
index 0000000..59b86a9
Binary files /dev/null and b/src/img/new_year_26/Butterfly_Wing_Top_Right.png differ
diff --git a/src/img/new_year_26/Moth.aseprite b/src/img/new_year_26/Moth.aseprite
new file mode 100644
index 0000000..d09f6f9
Binary files /dev/null and b/src/img/new_year_26/Moth.aseprite differ
diff --git a/src/img/new_year_26/Moth.png b/src/img/new_year_26/Moth.png
new file mode 100644
index 0000000..05c7b1f
Binary files /dev/null and b/src/img/new_year_26/Moth.png differ
diff --git a/src/img/new_year_26/Moth_Body.png b/src/img/new_year_26/Moth_Body.png
new file mode 100644
index 0000000..c81df83
Binary files /dev/null and b/src/img/new_year_26/Moth_Body.png differ
diff --git a/src/img/new_year_26/Moth_Wing_Bottom_Left.png b/src/img/new_year_26/Moth_Wing_Bottom_Left.png
new file mode 100644
index 0000000..13fa2a8
Binary files /dev/null and b/src/img/new_year_26/Moth_Wing_Bottom_Left.png differ
diff --git a/src/img/new_year_26/Moth_Wing_Bottom_Right.png b/src/img/new_year_26/Moth_Wing_Bottom_Right.png
new file mode 100644
index 0000000..8a00ffc
Binary files /dev/null and b/src/img/new_year_26/Moth_Wing_Bottom_Right.png differ
diff --git a/src/img/new_year_26/Moth_Wing_Top_Left.png b/src/img/new_year_26/Moth_Wing_Top_Left.png
new file mode 100644
index 0000000..1a344e7
Binary files /dev/null and b/src/img/new_year_26/Moth_Wing_Top_Left.png differ
diff --git a/src/img/new_year_26/Moth_Wing_Top_Right.png b/src/img/new_year_26/Moth_Wing_Top_Right.png
new file mode 100644
index 0000000..628f26e
Binary files /dev/null and b/src/img/new_year_26/Moth_Wing_Top_Right.png differ
diff --git a/src/img/new_year_26/forest.jpg b/src/img/new_year_26/forest.jpg
new file mode 100644
index 0000000..58acb25
Binary files /dev/null and b/src/img/new_year_26/forest.jpg differ
diff --git a/src/img/new_year_26/forest.webp b/src/img/new_year_26/forest.webp
new file mode 100644
index 0000000..d133dbf
Binary files /dev/null and b/src/img/new_year_26/forest.webp differ
diff --git a/src/img/new_year_26/jar.aseprite b/src/img/new_year_26/jar.aseprite
new file mode 100644
index 0000000..521ea36
Binary files /dev/null and b/src/img/new_year_26/jar.aseprite differ
diff --git a/src/img/new_year_26/jar.png b/src/img/new_year_26/jar.png
new file mode 100644
index 0000000..ed08913
Binary files /dev/null and b/src/img/new_year_26/jar.png differ
diff --git a/src/img/new_year_26/note.webp b/src/img/new_year_26/note.webp
new file mode 100644
index 0000000..53c5825
Binary files /dev/null and b/src/img/new_year_26/note.webp differ
diff --git a/src/img/new_year_26/paper.webp b/src/img/new_year_26/paper.webp
new file mode 100644
index 0000000..d446a05
Binary files /dev/null and b/src/img/new_year_26/paper.webp differ
diff --git a/src/img/new_year_26/rope.webp b/src/img/new_year_26/rope.webp
new file mode 100644
index 0000000..3368c53
Binary files /dev/null and b/src/img/new_year_26/rope.webp differ
diff --git a/src/img/new_year_26/sign_bottom.png b/src/img/new_year_26/sign_bottom.png
new file mode 100644
index 0000000..2c9f2f4
Binary files /dev/null and b/src/img/new_year_26/sign_bottom.png differ
diff --git a/src/img/new_year_26/sign_bottom.webp b/src/img/new_year_26/sign_bottom.webp
new file mode 100644
index 0000000..38b1e14
Binary files /dev/null and b/src/img/new_year_26/sign_bottom.webp differ
diff --git a/src/img/new_year_26/sign_top.png b/src/img/new_year_26/sign_top.png
new file mode 100644
index 0000000..fdc21d4
Binary files /dev/null and b/src/img/new_year_26/sign_top.png differ
diff --git a/src/img/new_year_26/sign_top.webp b/src/img/new_year_26/sign_top.webp
new file mode 100644
index 0000000..2aa7420
Binary files /dev/null and b/src/img/new_year_26/sign_top.webp differ
diff --git a/src/img/new_year_26/tree_stump.webp b/src/img/new_year_26/tree_stump.webp
new file mode 100644
index 0000000..7b26efa
Binary files /dev/null and b/src/img/new_year_26/tree_stump.webp differ
diff --git a/src/img/new_year_26/tree_stump_full.png b/src/img/new_year_26/tree_stump_full.png
new file mode 100644
index 0000000..32e0c01
Binary files /dev/null and b/src/img/new_year_26/tree_stump_full.png differ