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 + + + + + + + + + + + + + + +
+

velzek hawthorne

+
+ +
+

basic info

+ +
+ + + +
+ + velzek the kobold in green priest garments + + + + velzek the kobold in metal armour holding a mace + +
+
+ +

+ 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

+ +
+ + ekkel is north of the ruins of avaro’s dungeon + +
+ +

+ 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