diff --git a/Makefile b/Makefile
index dba6522..243abe0 100644
--- a/Makefile
+++ b/Makefile
@@ -1,13 +1,15 @@
-PAGES = index.html pubkey.txt rainbow-quox/index.html
+PAGES = index.html pubkey.txt rainbow-quox/index.html velzek/index.html
MEDIA = \
$(wildcard media/*.png) $(wildcard media/*.gif) $(wildcard media/*.webp) \
$(wildcard media/flags/*) $(wildcard media/buttons/*) \
$(wildcard media/icons/*) $(wildcard media/bg/*) 8831.png 8831-quox.png \
$(wildcard rainbow-quox/front/*) $(wildcard rainbow-quox/back/*) \
- $(wildcard rainbow-quox/*.svg) rainbow-quox/palette.svg
+ $(wildcard rainbow-quox/*.svg) rainbow-quox/palette.svg \
+ $(wildcard velzek/*.webp) $(wildcard velzek/*.png)
CSS = $(shell find fonts -type f) \
$(patsubst %.scss,%.css, \
- $(wildcard rainbow-quox/style/*) $(wildcard style/*))
+ $(wildcard rainbow-quox/style/*) $(wildcard style/*)) \
+ velzek/style.css
SCRIPTS = $(patsubst %.ts,%.js,$(wildcard script/*.ts rainbow-quox/script/*.ts))
MISC = $(shell find .well-known -type f)
ALL = $(CSS) $(PAGES) $(MEDIA) $(SCRIPTS) $(MISC)
diff --git a/fonts/junicodevf/junicodevf.css b/fonts/junicodevf/junicodevf.css
new file mode 100644
index 0000000..b78e446
--- /dev/null
+++ b/fonts/junicodevf/junicodevf.css
@@ -0,0 +1,11 @@
+@font-face {
+ font-family: JunicodeVF;
+ src: url(JunicodeVF-Roman.ttf);
+ font-style: normal;
+}
+
+@font-face {
+ font-family: JunicodeVF;
+ src: url(JunicodeVF-Italic.ttf);
+ font-style: italic;
+}
diff --git a/velzek/armour.webp b/velzek/armour.webp
new file mode 100644
index 0000000..5352294
--- /dev/null
+++ b/velzek/armour.webp
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:81616a90ae54f83c8fbe765002d5109238225f2a8fe0d37bd971d7ce4689c4f4
+size 1870720
diff --git a/velzek/armour_small.webp b/velzek/armour_small.webp
new file mode 100644
index 0000000..20df0dc
--- /dev/null
+++ b/velzek/armour_small.webp
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7102d601a0c9241a7427ecc932fc4c2de051691f1f73647d537421687ae91675
+size 36872
diff --git a/velzek/armour_small2x.webp b/velzek/armour_small2x.webp
new file mode 100644
index 0000000..256cc66
--- /dev/null
+++ b/velzek/armour_small2x.webp
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:31b579ab2eb59ee2bd3269ea5e8ecd8bab631aac7b54a259eea42ab5ee0aeeeb
+size 66496
diff --git a/velzek/beige-paper.png b/velzek/beige-paper.png
new file mode 100644
index 0000000..7c610d2
--- /dev/null
+++ b/velzek/beige-paper.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0d958f85ec7b8b0aaa45056aba1bed3a2d70e61e4cee97458b42163c81b7df80
+size 21954
diff --git a/velzek/classy-fabric.png b/velzek/classy-fabric.png
new file mode 100644
index 0000000..3d38a29
--- /dev/null
+++ b/velzek/classy-fabric.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f8ac36220d5073446f743092550915bc6d1f029ef4b5a280f1089a6a5bd46c30
+size 5619
diff --git a/velzek/clothes.webp b/velzek/clothes.webp
new file mode 100644
index 0000000..fc918b6
--- /dev/null
+++ b/velzek/clothes.webp
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ed9e3e1e99904daafcb56537a1a30f84f87ad123054be71f611c957650d3d4a7
+size 1694772
diff --git a/velzek/clothes_small.webp b/velzek/clothes_small.webp
new file mode 100644
index 0000000..dabc167
--- /dev/null
+++ b/velzek/clothes_small.webp
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b98c97e9ec422fa232421126b8478dd3103960ab6fca6e59ac04fc9b2946a647
+size 31866
diff --git a/velzek/clothes_small2x.webp b/velzek/clothes_small2x.webp
new file mode 100644
index 0000000..5bca038
--- /dev/null
+++ b/velzek/clothes_small2x.webp
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:30e15cadc0c3ef308ec2037e36ac349c0d85d56973860575517ca0cbb3020489
+size 371592
diff --git a/velzek/icon.webp b/velzek/icon.webp
new file mode 100644
index 0000000..5bd332f
--- /dev/null
+++ b/velzek/icon.webp
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:31fb7c89a50c1a3fa47b5cdb9bfee05f899ff2c4ee751dd0c23fbb31764c7be8
+size 9488
diff --git a/velzek/index.html b/velzek/index.html
new file mode 100644
index 0000000..0ba897f
--- /dev/null
+++ b/velzek/index.html
@@ -0,0 +1,155 @@
+
+
+
+
velzek hawthorne
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ basic info
+
+
+
+ switch
+
+
+
+
+
+ cleric of suveesha
+ and anthropologist
+
+
+ height 74 cm (2ʹ 5ʺ)
+ weight 18 kg (40 ℔)
+ age 32
+ year of birth 1187
+ alignment neutral good
+
+
+
+ velzek is a kobold from a community called
+ ekkel , north of the ruins of avaro’s dungeon. around
+ eight years ago, she and four other kobolds arrived at the temple of berei,
+ next to the green on the south border of marikest.
+
+
+ her companions are:
+
+
+ yarva bitterbrush 26, he/him
+
+ keshku aestivae 28, she/her
+
+ volek ruba 23, she/her
+
+ tokil arceuthus 25, he/him
+
+
+
+
+ until arriving in marikest, the concept of a surname was totally unknown to
+ the kobolds, so they all invented names based on plants for themselves once
+ they became needed.
+
+
+ the purpose of the kobolds’ arrival in marikest is to study outside
+ cultures, in the hope of easing the ancient distrust between kobolds and
+ surface dwellers. unravelling the common perception of kobolds as stupid
+ and/or evil is hard work, so progress is slow. but the recent political
+ situation has been very interesting to study as a group of
+ outsiders.
+
+
+
+ ekkel
+
+
+
+
+
+
+
+
+ velzek’s old home, ekkel , consists of a network of caves within
+ the windswept wall. despite the historical friction between kobolds and
+ humanoids, ekkel has enjoyed peace for decades, due to its location far away
+ from any major surface roads. like all burrows, ekkel is considered to be a
+ single huge family; kobolds don't consciously keep track of closer kinship
+ bonds.
+
+
+ the centre of ekkel is a large cavern; individual living spaces radiate
+ out in a dense network of narrow tunnels. the central space is dominated
+ by a huge temple to suveesha, which serves as a communal kitchen and
+ dining room, as well as a school. outside of her studies into humanoid
+ cultures, velzek’s duties at the temple included teaching young kobolds to
+ read and write, and—like all priests to suveesha—helping in the kitchen.
+
+
+ ekkel is far from isolated. several of the outer tunnels dip into the
+ underdark, and through there, are connected to other kobold burrows. in
+ fact, due to its safe location, it has been steadily growing in recent
+ decades as more precarious communities decide to migrate there. however,
+ its current population is still only around six thousand.
+
+
+
+ suveesha
+
+
+
+
+
+
+ the goddess known to humanoids as berei, concerned with home and family,
+ is commonly revered among kobolds in consecuar in a form known as
+ suveesha . she is represented in this form as a four-horned
+ kobold holding a golden flame; temples to suveesha generally have a
+ pair of huge braziers outside the entrance, providing warmth to the
+ community.
+
+
+ it is claimed by some senior members of the clergy that ekkel is
+ particularly blessed by suveesha, and insulated from the troubles of the
+ outside world. maybe it is. or maybe it’s just that, from the perspective of
+ the surface world, it’s in the middle of nowhere.
+
+
+ while amongst the humanoids, velzek and the others have been instructed to
+ adopt berei’s symbols for familiarity: a bundle of wheat, a sickle, and a
+ rising sun.
+
+
+
diff --git a/velzek/map_k.webp b/velzek/map_k.webp
new file mode 100644
index 0000000..37fd4e6
--- /dev/null
+++ b/velzek/map_k.webp
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:54024ca807e077f28d68b3b8e2fa631ac19ad6cbed07b5eef07eade8b05d8af0
+size 184560
diff --git a/velzek/map_k_full.webp b/velzek/map_k_full.webp
new file mode 100644
index 0000000..393a409
--- /dev/null
+++ b/velzek/map_k_full.webp
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:12884ce27042fa280944959a72028ab1735a9b291b8b6825ce388baa5e47c644
+size 3738240
diff --git a/velzek/src/armour.png b/velzek/src/armour.png
new file mode 100644
index 0000000..43e114a
--- /dev/null
+++ b/velzek/src/armour.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bf9c2f10254936207e637901b85e9d8bc3061f68ebb13b6384b8122cf7adcde9
+size 7469685
diff --git a/velzek/src/armour_small.png b/velzek/src/armour_small.png
new file mode 100644
index 0000000..752cb2b
--- /dev/null
+++ b/velzek/src/armour_small.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1f1d46c549d1fb05d711d217f4f2f98b5557e3e081a1e242ff3b09950dcdaacd
+size 151304
diff --git a/velzek/src/armour_small2x.png b/velzek/src/armour_small2x.png
new file mode 100644
index 0000000..8680197
--- /dev/null
+++ b/velzek/src/armour_small2x.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5c84121e5920ebc5066b8d1cd068e77e887951a026181f7e70bec509594fc9f9
+size 465969
diff --git a/velzek/src/clothes.png b/velzek/src/clothes.png
new file mode 100644
index 0000000..14bb9ba
--- /dev/null
+++ b/velzek/src/clothes.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5f577c2ee76c5e753642c4862ea21474e3af4ab672334fe85b21daf8361f7438
+size 6055818
diff --git a/velzek/src/clothes_small.png b/velzek/src/clothes_small.png
new file mode 100644
index 0000000..33f79e3
--- /dev/null
+++ b/velzek/src/clothes_small.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f65b2da85d8296cffff5ca000e675b52e45a4a0bad4dd88a828b2640aad9f015
+size 143908
diff --git a/velzek/src/clothes_small2x.png b/velzek/src/clothes_small2x.png
new file mode 100644
index 0000000..bb60850
--- /dev/null
+++ b/velzek/src/clothes_small2x.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:67a750712a690482ce72ff44ac32f02f5a30623dba238f6fc2bb56e9abe281ab
+size 3403727
diff --git a/velzek/src/icon.png b/velzek/src/icon.png
new file mode 100644
index 0000000..2f78382
--- /dev/null
+++ b/velzek/src/icon.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2f9ef1ed3b15e1d2c3738c0149df8443f33927fdcee0c7c0852a206d360f9a29
+size 36939
diff --git a/velzek/src/koboldowo.png b/velzek/src/koboldowo.png
new file mode 100644
index 0000000..20d8707
--- /dev/null
+++ b/velzek/src/koboldowo.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7851972bab8d62d384caca6b87c7847ffd7f0736c39bf3e076d93f2a99262f6c
+size 14738
diff --git a/velzek/src/map_k.png b/velzek/src/map_k.png
new file mode 100644
index 0000000..9b5fe34
--- /dev/null
+++ b/velzek/src/map_k.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f435e78dc1db828523485927cc9e0564057c4852081e30c2056f3b9067aef7b4
+size 1186818
diff --git a/velzek/src/map_k_full.kra b/velzek/src/map_k_full.kra
new file mode 100644
index 0000000..3df16d5
--- /dev/null
+++ b/velzek/src/map_k_full.kra
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2bd927a348afc97cbb8ef2e8046f4257ac9eeef8267a7e0ae40a5f64bc08f420
+size 40284398
diff --git a/velzek/src/map_k_full.png b/velzek/src/map_k_full.png
new file mode 100644
index 0000000..431ec05
--- /dev/null
+++ b/velzek/src/map_k_full.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c2363edeaa21e5d41c08f825b0a324d8737b51735bb381cebac7f88031ed3554
+size 15150085
diff --git a/velzek/src/suveesha.kra b/velzek/src/suveesha.kra
new file mode 100644
index 0000000..da06749
--- /dev/null
+++ b/velzek/src/suveesha.kra
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fcd8cb4c8832c86dde464034ca4e61306ea272be787319a4acb4ddfff8f9b45e
+size 4644238
diff --git a/velzek/src/suveesha.png b/velzek/src/suveesha.png
new file mode 100644
index 0000000..2e38b59
--- /dev/null
+++ b/velzek/src/suveesha.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a5c456d26829ad355c80dc9c5e6affce281010aca5a6d90380cc02c0b8f7d6dd
+size 585072
diff --git a/velzek/src/velzek icon.kra b/velzek/src/velzek icon.kra
new file mode 100644
index 0000000..9d20665
--- /dev/null
+++ b/velzek/src/velzek icon.kra
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:75794b67b242c1611e12a43a551351ab184a6fe5e4d1c9a7b583cadcfbbfcc30
+size 5176297
diff --git a/velzek/style.css b/velzek/style.css
new file mode 100644
index 0000000..cac4894
--- /dev/null
+++ b/velzek/style.css
@@ -0,0 +1,251 @@
+@layer base, header, footer, images, switcher, phone;
+@import url(../fonts/junicodevf/junicodevf.css) layer(base);
+
+@layer base {
+ * { box-sizing: border-box; }
+}
+
+@layer base.cols {
+ :root, ::selection {
+ --text-color: hsl(350deg 40% 15%);
+ --accent-color: hsl(80deg 50% 35%);
+ --shadow-color: hsl(from var(--text-color) h 20% 3% / 20%);
+ --shadow: drop-shadow(3px 2px 0 var(--shadow-color));
+ --shadow2: drop-shadow(-2px 0 0 hsl(from var(--text-color) h 20% 7% / 15%));
+ }
+
+ :root {
+ background:
+ url(classy-fabric.png),
+ linear-gradient(to bottom in oklch,
+ hsl(55deg 55% 70%),
+ hsl(80deg 30% 50%));
+ background-blend-mode: multiply;
+ color: var(--text-color);
+ accent-color: var(--accent-color);
+ }
+
+ ::selection {
+ background: hsl(from var(--accent-color) h s calc(l * 0.75));
+ color: hsl(60deg 10% 90%);
+ }
+
+ body {
+ background: url(beige-paper.png), hsl(40deg 80% 80%);
+ background-blend-mode: multiply;
+ border: 10px solid currentcolor;
+ filter: var(--shadow) var(--shadow2);
+ }
+
+ figure { filter: var(--shadow2); }
+}
+
+@layer base.fonts {
+ :root {
+ font-family: JunicodeVF, serif;
+ font-feature-settings:
+ "ccmp", "calt", "liga", "loca", "rlig", "kern", "mark", "mkmk";
+ font-variation-settings: "ENLA" 25;
+ font-stretch: 125%;
+ font-weight: 450;
+ }
+}
+
+
+@layer base.layout {
+ :root {
+ --protrude: 8rem;
+ min-height: 100vh;
+ }
+
+ body {
+ max-width: 50rem;
+ margin: 1rem auto 2rem;
+ padding: 1rem;
+ }
+
+ section, footer { clear: both; }
+
+ footer {
+ text-align: center;
+ padding: 1em 0 0.75em;
+ }
+}
+
+@layer base.headings {
+ h1, h2, h3, h4, h5, h6 {
+ font-stretch: 75%;
+ font-variation-settings: "ENLA" 0;
+ }
+
+ h2 {
+ margin: 1em;
+ position: relative;
+ border-bottom: 3px double currentcolor;
+
+ font-size: 225%;
+ font-weight: 500;
+
+ &::before {
+ content: '•';
+ font-size: 80%;
+ font-feature-settings: "ornm" 5;
+ position: absolute;
+ left: -1.15em;
+ bottom: 7%;
+ rotate: -5deg;
+ }
+ }
+}
+
+@layer base.other {
+ a {
+ color: inherit;
+ text-decoration: underline;
+ text-decoration-color: hsl(from currentcolor h s l / 0.6);
+ text-underline-offset: 0.125em;
+ }
+
+ dfn {
+ font-weight: 700;
+ font-style: italic;
+ }
+
+ dl { margin: 0 1em; }
+ dt { font-weight: bold; }
+ dd { margin: 0; }
+
+ @media (width >= 70rem) {
+ dl {
+ display: grid;
+ grid-template-columns: auto 1fr;
+ column-gap: 1em;
+ }
+
+ dt { grid-column-start: 1; }
+ dd { grid-column-start: 2; }
+ }
+}
+
+@layer header {
+ header {
+ display: grid;
+ grid-template: "l header r" / 1fr auto 1fr;
+ gap: 1ex;
+ margin: 0.25em auto 0.5em;
+ font-size: 400%;
+ align-items: center;
+ }
+
+ header h1 {
+ font-size: inherit;
+ grid-area: header;
+ margin: 0;
+ font-weight: 400;
+ text-align: center;
+ justify-self: center;
+ }
+
+ header {
+ &::before, &::after {
+ content: '•';
+ font-size: 65%;
+ }
+ &::before {
+ grid-area: l;
+ font-feature-settings: "ornm" 7;
+ justify-self: end;
+ }
+ &::after {
+ grid-area: r;
+ font-feature-settings: "ornm" 8;
+ justify-self: start;
+ }
+ }
+}
+
+@layer footer {
+ footer {
+ font-feature-settings: "ornm" 6;
+ a { text-decoration: none; }
+ font-size: 250%;
+ }
+}
+
+@layer images {
+ #velzek-img-holder {
+ display: grid;
+ grid-template: "i";
+ align-items: center;
+ > * { grid-area: i; }
+
+ /* for the narrow layout */
+ max-width: 480px;
+ margin: auto;
+ }
+
+ img {
+ filter: var(--shadow2);
+ max-width: 100%;
+ &.bordered { border: 10px solid currentcolor; }
+ }
+
+ @media (width >= 70rem) {
+ figure {
+ width: 480px;
+ float: right;
+ margin: 0 calc(0px - var(--protrude)) 1em 1em;
+ img { width: 100%; }
+ }
+
+ #velzek-pic {
+ shape-outside: polygon(100% 0%, 13% 0%, 13% 25%, 0% 27%,
+ 0% 51%, 18% 60%, 21% 100%, 100% 100%);
+ }
+
+ #ekkel-pic { rotate: -2deg; }
+ #suveesha-pic { rotate: 3deg; }
+ }
+}
+
+@layer switcher {
+ #velzek-pic img {
+ transition: all ease 200ms 175ms;
+ }
+
+ :root:has(#switch:checked) #clothes-pic,
+ :root:not(:has(#switch:checked)) #armour-pic {
+ opacity: 0;
+ transition-delay: 0ms;
+ pointer-events: none;
+ }
+
+ #switch {
+ appearance: none;
+ position: absolute;
+ }
+
+ #velzek-pic label {
+ display: block;
+ width: min-content;
+ margin: 0 auto 1em;
+ text-align: center;
+ padding: 2px 8px 0;
+
+ background: hsl(40deg 25% 95% / 65%);
+ border: 1px solid currentcolor;
+ font-weight: bold;
+
+ cursor: pointer;
+ }
+}
+
+
+@layer phone {
+ @media (width <= 50em) {
+ * { background-blend-mode: unset; filter: none; }
+ :root { background: none; }
+ body { border: 0; margin: 0; }
+ header { margin-left: 0.5em; margin-right: 0.5em; }
+ }
+}
diff --git a/velzek/suveesha.webp b/velzek/suveesha.webp
new file mode 100644
index 0000000..95aeba1
--- /dev/null
+++ b/velzek/suveesha.webp
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:b459797753547f837f3ef4bca0ddf7e8860c8c8994246c545fdd91471fa75542
+size 84310