this sure do be a website
This commit is contained in:
commit
0636d4f296
7
README.md
Normal file
7
README.md
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# webring.umbreon.online static files
|
||||||
|
|
||||||
|
the webring.umbreon.online homepage
|
||||||
|
|
||||||
|
i use sass because i don't hate myself. `npx sass --watch
|
||||||
|
style.sass:out/style.css`. after that just copy over the `out` folder to the
|
||||||
|
site's webroot
|
5
fontsource/README.md
Normal file
5
fontsource/README.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
These are the sources of the fonts used on this site. To edit, import the `.txt`
|
||||||
|
files in this directory into
|
||||||
|
[BitFontMaker2](https://www.pentacom.jp/pentacom/bitfontmaker2). The fonts are
|
||||||
|
mostly reproduced from the character select sequence, though some additional
|
||||||
|
diacritic glyphs were added.
|
1
fontsource/SOADialogue_20230717.txt
Normal file
1
fontsource/SOADialogue_20230717.txt
Normal file
File diff suppressed because one or more lines are too long
BIN
out/font/SOADialogue.ttf
Normal file
BIN
out/font/SOADialogue.ttf
Normal file
Binary file not shown.
16
out/index.html
Normal file
16
out/index.html
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Document</title>
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||||
|
<link rel="stylesheet" type="text/css" href="style.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="textbox textbox--simple textbox--red">
|
||||||
|
<div class="textbox__text">
|
||||||
|
Welcome to <span class="textbox__span textbox__span--blue">webring.umbreon.online</span>!
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
139
out/style.css
Normal file
139
out/style.css
Normal file
|
@ -0,0 +1,139 @@
|
||||||
|
@font-face {
|
||||||
|
font-family: "SOADialogue";
|
||||||
|
src: url("font/SOADialogue.ttf") format(truetype);
|
||||||
|
}
|
||||||
|
:root {
|
||||||
|
--pixel-scale: 2;
|
||||||
|
font-size: calc(var(--pixel-scale) * 1px);
|
||||||
|
--gradient-horiz-stripes: repeating-linear-gradient(to bottom,
|
||||||
|
#1d6c5a,
|
||||||
|
#1d6c5a 2rem,
|
||||||
|
#025a49 2rem,
|
||||||
|
#025a49 4rem
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background: var(--gradient-horiz-stripes);
|
||||||
|
min-height: 100vh;
|
||||||
|
margin: 0;
|
||||||
|
padding: 4rem;
|
||||||
|
font-size: 8rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.textbox {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
.textbox--simple {
|
||||||
|
--textbox-bg: #FFFFFF;
|
||||||
|
--textbox-bg-fade: #F7F7EF;
|
||||||
|
--textbox-text-color: #424231;
|
||||||
|
--textbox-text-shadow: #C6C6B5;
|
||||||
|
margin: 0 9rem;
|
||||||
|
border: 1rem solid var(--textbox-border-outer);
|
||||||
|
background: var(--textbox-border-inner);
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
.textbox--simple::before, .textbox--simple::after {
|
||||||
|
content: "";
|
||||||
|
display: block;
|
||||||
|
background: var(--textbox-handle-bg);
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
z-index: -1;
|
||||||
|
width: 7rem;
|
||||||
|
box-shadow: 3rem 0 0 -1rem var(--textbox-handle-bg), -3rem 0 0 -1rem var(--textbox-handle-bg), 6rem 0 0 -3rem var(--textbox-handle-bg), -6rem 0 0 -3rem var(--textbox-handle-bg), 0 1rem 0 0 var(--textbox-handle-border), 0 -1rem 0 0 var(--textbox-handle-border), 2rem 0 0 0rem var(--textbox-handle-border), -2rem 0 0 0rem var(--textbox-handle-border), 4rem 0 0 -1rem var(--textbox-handle-border), -4rem 0 0 -1rem var(--textbox-handle-border), 7rem 0 0 -3rem var(--textbox-handle-border), -7rem 0 0 -3rem var(--textbox-handle-border);
|
||||||
|
}
|
||||||
|
.textbox--simple::before {
|
||||||
|
left: 1rem;
|
||||||
|
transform: translateX(-100%);
|
||||||
|
border-right: 0;
|
||||||
|
}
|
||||||
|
.textbox--simple::after {
|
||||||
|
right: 1rem;
|
||||||
|
transform: translateX(100%);
|
||||||
|
border-left: 0;
|
||||||
|
}
|
||||||
|
.textbox--simple.textbox--theme-button {
|
||||||
|
margin: 0 10rem;
|
||||||
|
}
|
||||||
|
.textbox--simple.textbox--theme-button::before {
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
.textbox--simple.textbox--theme-button::after {
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
.textbox--simple.textbox--theme-button .textbox__text {
|
||||||
|
width: 14rem;
|
||||||
|
height: 10rem;
|
||||||
|
}
|
||||||
|
.textbox--yellow {
|
||||||
|
--textbox-border-outer: #7B6321;
|
||||||
|
--textbox-border-inner: #A58429;
|
||||||
|
--textbox-handle-bg: #FFB539;
|
||||||
|
--textbox-handle-border: #AD8400;
|
||||||
|
}
|
||||||
|
.textbox--red {
|
||||||
|
--textbox-border-outer: #632921;
|
||||||
|
--textbox-border-inner: #7B3129;
|
||||||
|
--textbox-handle-bg: #C63908;
|
||||||
|
--textbox-handle-border: #9C3108;
|
||||||
|
}
|
||||||
|
.textbox--green {
|
||||||
|
--textbox-border-outer: #215A18;
|
||||||
|
--textbox-border-inner: #216318;
|
||||||
|
--textbox-handle-bg: #42AD31;
|
||||||
|
--textbox-handle-border: #297321;
|
||||||
|
}
|
||||||
|
.textbox--blue {
|
||||||
|
--textbox-border-outer: #084263;
|
||||||
|
--textbox-border-inner: #085284;
|
||||||
|
--textbox-handle-bg: #1084C6;
|
||||||
|
--textbox-handle-border: #005A94;
|
||||||
|
}
|
||||||
|
.textbox--gray {
|
||||||
|
--textbox-border-outer: #4A4242;
|
||||||
|
--textbox-border-inner: #5A5A52;
|
||||||
|
--textbox-handle-bg: #7B7B73;
|
||||||
|
--textbox-handle-border: #5E5E55;
|
||||||
|
}
|
||||||
|
.textbox--pink {
|
||||||
|
--textbox-border-outer: #CE394A;
|
||||||
|
--textbox-border-inner: #E76B6B;
|
||||||
|
--textbox-handle-bg: #F79CA5;
|
||||||
|
--textbox-handle-border: #EF6B7B;
|
||||||
|
}
|
||||||
|
.textbox__text {
|
||||||
|
margin: 2rem;
|
||||||
|
width: 224rem;
|
||||||
|
height: 34rem;
|
||||||
|
box-shadow: 0 2rem 0 -1rem var(--textbox-bg-fade), 0 -2rem 0 -1rem var(--textbox-bg-fade), 2rem 0 0 -1rem var(--textbox-bg-fade), -2rem 0 0 -1rem var(--textbox-bg-fade), inset 0 0 0 1rem var(--textbox-bg-fade);
|
||||||
|
background: var(--textbox-bg);
|
||||||
|
padding: 0 1rem;
|
||||||
|
font-family: "SOADialogue";
|
||||||
|
font-size: 12rem;
|
||||||
|
}
|
||||||
|
.textbox__text, .textbox__text .textbox__span {
|
||||||
|
color: var(--textbox-text-color);
|
||||||
|
text-shadow: 1rem 0 var(--textbox-text-shadow), 1rem 1rem var(--textbox-text-shadow), 0 1rem var(--textbox-text-shadow);
|
||||||
|
}
|
||||||
|
|
||||||
|
.textbox__span--red {
|
||||||
|
--textbox-text-color: #C54700;
|
||||||
|
--textbox-text-shadow: #EFC6A5;
|
||||||
|
}
|
||||||
|
.textbox__span--blue {
|
||||||
|
--textbox-text-color: #6352FF;
|
||||||
|
--textbox-text-shadow: #CEC6F7;
|
||||||
|
}
|
||||||
|
|
||||||
|
.theme-options-grid {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
width: 186rem;
|
||||||
|
gap: 8rem 6rem;
|
||||||
|
padding: 4rem 3rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*# sourceMappingURL=style.css.map */
|
1
out/style.css.map
Normal file
1
out/style.css.map
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"sourceRoot":"","sources":["style.scss"],"names":[],"mappings":"AACA;EACC;EACA;;AAGD;EAEC;EAGA;EAIA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AASD;EACC;EACA;EACA;EACA;EAEA;;;AAID;EAKC;;AAIA;EAEC;EACA;EACA;EACA;EAIA;EAGA;EACA;EAGA;;AAGA;EAEC;EACA;EACA;EACA;EACA;EACA;EAIA;EAMA;EAGA,YAEA;;AAqBD;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;AAKD;EACC;;AAEA;EACC;;AAED;EACC;;AAGD;EACC;EACA;;AAMH;EACC;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAKD;EAGC;EAIA;EACA;EAGA,YACQ;EAOR;EAGA;EAGA;EAEA;;AAOA;EACC;EACA,aACC;;;AASH;EACC;EACA;;AAGD;EACC;EACA;;;AAKF;EACC;EACA;EACA;EACA;EACA","file":"style.css"}
|
240
style.scss
Normal file
240
style.scss
Normal file
|
@ -0,0 +1,240 @@
|
||||||
|
// dialogue font (the taller one)
|
||||||
|
@font-face {
|
||||||
|
font-family: "SOADialogue";
|
||||||
|
src: url("https://i.eritbh.me/temp/SOADialogue-10-2-6.ttf") format(truetype);
|
||||||
|
}
|
||||||
|
|
||||||
|
:root {
|
||||||
|
// rendering scale
|
||||||
|
--pixel-scale: 2;
|
||||||
|
|
||||||
|
// 1rem = 1 source pixel at the current render scale
|
||||||
|
font-size: calc(var(--pixel-scale) * 1px);
|
||||||
|
|
||||||
|
|
||||||
|
// some other bullshit
|
||||||
|
--gradient-horiz-stripes: repeating-linear-gradient(to bottom,
|
||||||
|
#1d6c5a,
|
||||||
|
#1d6c5a 2rem,
|
||||||
|
#025a49 2rem,
|
||||||
|
#025a49 4rem
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// i don't need eyes anyway (transparency spotting)
|
||||||
|
body {
|
||||||
|
background: var(--gradient-horiz-stripes);
|
||||||
|
min-height: 100vh;
|
||||||
|
margin: 0;
|
||||||
|
padding: 4rem;
|
||||||
|
// more or less reasonable default probably
|
||||||
|
font-size: 8rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
// aren't text boxes fun
|
||||||
|
.textbox {
|
||||||
|
// i cannot believe there is no better way to do this than
|
||||||
|
// - inline-block, or
|
||||||
|
// - shove it in a flex container (which i won't do because we have enough
|
||||||
|
// containers)
|
||||||
|
display: inline-block;
|
||||||
|
|
||||||
|
// Most of the text box styles in the game are just recolors of the same
|
||||||
|
// thing
|
||||||
|
&--simple {
|
||||||
|
// Variables for all the different colors
|
||||||
|
--textbox-bg: #FFFFFF;
|
||||||
|
--textbox-bg-fade: #F7F7EF;
|
||||||
|
--textbox-text-color: #424231;
|
||||||
|
--textbox-text-shadow: #C6C6B5;
|
||||||
|
|
||||||
|
// make room for the handles which are `position:absolute`'d outside
|
||||||
|
// this box
|
||||||
|
margin: 0 9rem;
|
||||||
|
|
||||||
|
// set up basic frame of inner section
|
||||||
|
border: 1rem solid var(--textbox-border-outer);
|
||||||
|
background: var(--textbox-border-inner);
|
||||||
|
|
||||||
|
// who's ready for position shenanigans
|
||||||
|
position: relative;
|
||||||
|
|
||||||
|
// box handles
|
||||||
|
&::before,
|
||||||
|
&::after {
|
||||||
|
content: "";
|
||||||
|
display: block;
|
||||||
|
background: var(--textbox-handle-bg);
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
bottom: 0;
|
||||||
|
|
||||||
|
// styles for left and right curves are present on both handles, but
|
||||||
|
// they're layered behind the main box
|
||||||
|
z-index: -1;
|
||||||
|
|
||||||
|
// width cannot be lower than this because we need to be able to
|
||||||
|
// shrink the box shadow of the element at least two stages without
|
||||||
|
// it disappearing entirely in order to make the rounded corners
|
||||||
|
// work
|
||||||
|
width: 7rem;
|
||||||
|
|
||||||
|
// hell world
|
||||||
|
box-shadow:
|
||||||
|
// background extensions
|
||||||
|
3rem 0 0 -1rem var(--textbox-handle-bg),
|
||||||
|
-3rem 0 0 -1rem var(--textbox-handle-bg),
|
||||||
|
|
||||||
|
6rem 0 0 -3rem var(--textbox-handle-bg),
|
||||||
|
-6rem 0 0 -3rem var(--textbox-handle-bg),
|
||||||
|
|
||||||
|
// horizontal border segments (very top and bottom)
|
||||||
|
0 1rem 0 0 var(--textbox-handle-border),
|
||||||
|
0 -1rem 0 0 var(--textbox-handle-border),
|
||||||
|
|
||||||
|
// vertical border segments
|
||||||
|
2rem 0 0 0rem var(--textbox-handle-border),
|
||||||
|
-2rem 0 0 0rem var(--textbox-handle-border),
|
||||||
|
|
||||||
|
4rem 0 0 -1rem var(--textbox-handle-border),
|
||||||
|
-4rem 0 0 -1rem var(--textbox-handle-border),
|
||||||
|
|
||||||
|
7rem 0 0 -3rem var(--textbox-handle-border),
|
||||||
|
-7rem 0 0 -3rem var(--textbox-handle-border);
|
||||||
|
|
||||||
|
}
|
||||||
|
&::before {
|
||||||
|
left: 1rem;
|
||||||
|
transform: translateX(-100%);
|
||||||
|
border-right: 0;
|
||||||
|
}
|
||||||
|
&::after {
|
||||||
|
right: 1rem;
|
||||||
|
transform: translateX(100%);
|
||||||
|
border-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if this is a selection button, the handles are annoyingly 1 source
|
||||||
|
// pixel wider, and the text region is tiny and empty
|
||||||
|
&.textbox--theme-button {
|
||||||
|
margin: 0 10rem;
|
||||||
|
|
||||||
|
&::before {
|
||||||
|
left: 0;
|
||||||
|
}
|
||||||
|
&::after {
|
||||||
|
right: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.textbox__text {
|
||||||
|
width: 14rem;
|
||||||
|
height: 10rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// #region .textbox--simple color variants
|
||||||
|
&--yellow {
|
||||||
|
--textbox-border-outer: #7B6321;
|
||||||
|
--textbox-border-inner: #A58429;
|
||||||
|
--textbox-handle-bg: #FFB539;
|
||||||
|
--textbox-handle-border: #AD8400;
|
||||||
|
}
|
||||||
|
&--red {
|
||||||
|
--textbox-border-outer: #632921;
|
||||||
|
--textbox-border-inner: #7B3129;
|
||||||
|
--textbox-handle-bg: #C63908;
|
||||||
|
--textbox-handle-border: #9C3108;
|
||||||
|
}
|
||||||
|
&--green {
|
||||||
|
--textbox-border-outer: #215A18;
|
||||||
|
--textbox-border-inner: #216318;
|
||||||
|
--textbox-handle-bg: #42AD31;
|
||||||
|
--textbox-handle-border: #297321;
|
||||||
|
}
|
||||||
|
&--blue {
|
||||||
|
--textbox-border-outer: #084263;
|
||||||
|
--textbox-border-inner: #085284;
|
||||||
|
--textbox-handle-bg: #1084C6;
|
||||||
|
--textbox-handle-border: #005A94;
|
||||||
|
}
|
||||||
|
&--gray {
|
||||||
|
--textbox-border-outer: #4A4242;
|
||||||
|
--textbox-border-inner: #5A5A52;
|
||||||
|
--textbox-handle-bg: #7B7B73;
|
||||||
|
--textbox-handle-border: #5E5E55;
|
||||||
|
}
|
||||||
|
&--pink {
|
||||||
|
--textbox-border-outer: #CE394A;
|
||||||
|
--textbox-border-inner: #E76B6B;
|
||||||
|
--textbox-handle-bg: #F79CA5;
|
||||||
|
--textbox-handle-border: #EF6B7B;
|
||||||
|
}
|
||||||
|
// #endregion
|
||||||
|
|
||||||
|
// Text inside the text box
|
||||||
|
&__text {
|
||||||
|
// offset by a bit to leave room for the rounded corners we do via box
|
||||||
|
// shadow
|
||||||
|
margin: 2rem;
|
||||||
|
// in game this region is 228x38, but again, part of that is done via
|
||||||
|
// box shadows because pixelated round corners are hard, so we subtract
|
||||||
|
// that margin
|
||||||
|
width: 224rem;
|
||||||
|
height: 34rem;
|
||||||
|
|
||||||
|
// get the slightly off-white region around the text
|
||||||
|
box-shadow:
|
||||||
|
0 2rem 0 -1rem var(--textbox-bg-fade),
|
||||||
|
0 -2rem 0 -1rem var(--textbox-bg-fade),
|
||||||
|
2rem 0 0 -1rem var(--textbox-bg-fade),
|
||||||
|
-2rem 0 0 -1rem var(--textbox-bg-fade),
|
||||||
|
inset 0 0 0 1rem var(--textbox-bg-fade);
|
||||||
|
|
||||||
|
// the innermost part with the text is just white
|
||||||
|
background: var(--textbox-bg);
|
||||||
|
|
||||||
|
// text still needs to be offset a bit from left/right
|
||||||
|
padding: 0 1rem;
|
||||||
|
|
||||||
|
// font setup
|
||||||
|
font-family: "SOADialogue";
|
||||||
|
// font exported with 10px ascenders, 2px descenders
|
||||||
|
font-size: calc((10 + 2) * 1rem);
|
||||||
|
// trying our goddamn best to make the browser render the pixel font
|
||||||
|
// correctly, except i dont think this actually helps lol
|
||||||
|
// text-rendering: geometricPrecision;
|
||||||
|
|
||||||
|
// text colors and shadow - `.textbox__span`'s use the same logic but
|
||||||
|
// change the colors via variables
|
||||||
|
&, .textbox__span {
|
||||||
|
color: var(--textbox-text-color);
|
||||||
|
text-shadow:
|
||||||
|
1rem 0 var(--textbox-text-shadow),
|
||||||
|
1rem 1rem var(--textbox-text-shadow),
|
||||||
|
0 1rem var(--textbox-text-shadow);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// custom text colors in text boxes
|
||||||
|
.textbox__span {
|
||||||
|
&--red {
|
||||||
|
--textbox-text-color: #C54700;
|
||||||
|
--textbox-text-shadow: #EFC6A5;
|
||||||
|
}
|
||||||
|
|
||||||
|
&--blue {
|
||||||
|
--textbox-text-color: #6352FF;
|
||||||
|
--textbox-text-shadow: #CEC6F7;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// misc shit
|
||||||
|
.theme-options-grid {
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
width: 186rem;
|
||||||
|
gap: 8rem 6rem;
|
||||||
|
padding: 4rem 3rem;
|
||||||
|
}
|
Loading…
Reference in a new issue