import the dwarven empire

This commit is contained in:
tengel 2024-03-31 10:44:34 -05:00
parent 363b83f93d
commit 0c57aa32c6
23 changed files with 1167 additions and 2 deletions

16
doc/00_nginx-base.txt Normal file
View file

@ -0,0 +1,16 @@
apt-get install --no-install-recommends \
nginx nginx-core libnginx-mod-stream \
certbot python3-certbot-nginx
cd /etc/nginx/modules-enabled
rm \
50-mod-http-geoip.conf \
50-mod-http-image-filter.conf \
50-mod-http-xslt-filter.conf \
50-mod-mail.conf \
70-mod-stream-geoip.conf
cp security.conf /etc/nginx/conf.d/

21
doc/00_xyzzy-ee.txt Normal file
View file

@ -0,0 +1,21 @@
cp xyzzy.ee.conf.bootstrap \
/etc/nginx/sites-available/xyzzy.ee.conf
cd /etc/nginx/sites-enabled
rm default
ln -s /etc/nginx/sites-available/xyzzy.ee.conf 00xyzzy.ee.conf
cd -
nginx -t
systemctl restart nginx
certbot --nginx -d xyzzy.ee,www.xyzzy.ee \
--agree-tos -m "hostmaster@xyzzy.ee" --no-eff-email \
--deploy-hook "systemctl reload nginx"
cp xyzzy.ee.conf /etc/nginx/sites-available/xyzzy.ee.conf
nginx -t
systemctl restart nginx

20
doc/01_xyzzy-fi.txt Normal file
View file

@ -0,0 +1,20 @@
cp xyzzy.fi.conf.bootstrap \
/etc/nginx/sites-available/xyzzy.fi.conf
cd /etc/nginx/sites-enabled
ln -s /etc/nginx/sites-available/xyzzy.fi.conf 01xyzzy.fi.conf
cd -
nginx -t
systemctl restart nginx
certbot --nginx -d xyzzy.fi,www.xyzzy.fi \
--agree-tos -m "hostmaster@xyzzy.fi" --no-eff-email \
--deploy-hook "systemctl reload nginx"
cp xyzzy.fi.conf /etc/nginx/sites-available/xyzzy.fi.conf
nginx -t
systemctl restart nginx

20
doc/02_git-xyzzy-ee.txt Normal file
View file

@ -0,0 +1,20 @@
cp git.xyzzy.ee.conf.bootstrap \
/etc/nginx/sites-available/git.xyzzy.ee.conf
cd /etc/nginx/sites-enabled
ln -s /etc/nginx/sites-available/git.xyzzy.ee.conf 02git.xyzzy.ee.conf
cd -
nginx -t
systemctl restart nginx
certbot --nginx -d git.xyzzy.ee \
--agree-tos -m "hostmaster@xyzzy.ee" --no-eff-email \
--deploy-hook "systemctl reload nginx"
cp git.xyzzy.ee.conf /etc/nginx/sites-available/git.xyzzy.ee.conf
nginx -t
systemctl restart nginx

View file

@ -0,0 +1,20 @@
cp dwarvenruins.com.conf.bootstrap \
/etc/nginx/sites-available/dwarvenruins.com.conf
cd /etc/nginx/sites-enabled
ln -s /etc/nginx/sites-available/dwarvenruins.com.conf 03dwarvenruins.com.conf
cd -
nginx -t
systemctl restart nginx
certbot --nginx -d dwarvenruins.com,www.dwarvenruins.com \
--agree-tos -m "hostmaster@dwarvenruins.com" --no-eff-email \
--deploy-hook "systemctl reload nginx"
cp dwarvenruins.com.conf /etc/nginx/sites-available/dwarvenruins.com.conf
nginx -t
systemctl restart nginx

View file

@ -0,0 +1,20 @@
cp dwarvenmail.com.conf.bootstrap \
/etc/nginx/sites-available/dwarvenmail.com.conf
cd /etc/nginx/sites-enabled
ln -s /etc/nginx/sites-available/dwarvenmail.com.conf 04dwarvenmail.com.conf
cd -
nginx -t
systemctl restart nginx
certbot --nginx -d dwarvenmail.com,www.dwarvenmail.com \
--agree-tos -m "hostmaster@dwarvenmail.com" --no-eff-email \
--deploy-hook "systemctl reload nginx"
cp dwarvenmail.com.conf /etc/nginx/sites-available/dwarvenmail.com.conf
nginx -t
systemctl restart nginx

View file

@ -0,0 +1,20 @@
cp dwarvenvault.com.conf.bootstrap \
/etc/nginx/sites-available/dwarvenvault.com.conf
cd /etc/nginx/sites-enabled
ln -s /etc/nginx/sites-available/dwarvenvault.com.conf 05dwarvenvault.com.conf
cd -
nginx -t
systemctl restart nginx
certbot --nginx -d dwarvenvault.com,www.dwarvenvault.com \
--agree-tos -m "hostmaster@dwarvenvault.com" --no-eff-email \
--deploy-hook "systemctl reload nginx"
cp dwarvenvault.com.conf /etc/nginx/sites-available/dwarvenvault.com.conf
nginx -t
systemctl restart nginx

View file

@ -2,6 +2,8 @@
Debian 12 minimal installation, ensure the SSH server and standard system tools are included. Debian 12 minimal installation, ensure the SSH server and standard system tools are included.
Note: text files to help with nginx deployment and/or migrating sites to new hosts/VMs (certbot et. al) are ancillary to this document.
## Base Configuration ## Base Configuration
@ -90,10 +92,18 @@ else
fi fi
``` ```
After confirming the change is correct: Ensure SSH client alive is configured in `/etc/ssh/sshd_config`:
``` ```
systemctl restart sshd TCPKeepAlive yes
ClientAliveInterval 60
ClientAliveCountMax 3
```
After confirming the `sshd_config` changes are correct:
```
systemctl restart sshd.service
``` ```
Test logging in again as the user and sudo to root in another term. Test logging in again as the user and sudo to root in another term.

View file

@ -0,0 +1,100 @@
# dwarvenmail.com
# www.dwarvenmail.com
server {
server_name dwarvenmail.com;
root /var/xyzzy/html/dwarvenmail;
index index.html;
location / {
try_files $uri $uri/ =404;
}
listen [::]:443 ssl; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/dwarvenmail.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/dwarvenmail.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
# https://ssl-config.mozilla.org/
add_header Strict-Transport-Security "max-age=15724800" always;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/dwarvenmail.com/chain.pem;
resolver 9.9.9.9 8.8.8.8 1.1.1.1;
resolver_timeout 5s;
# https://observatory.mozilla.org
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "strict-origin-when-cross-origin";
add_header Content-Security-Policy "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'self';";
}
server {
server_name www.dwarvenmail.com;
root /var/xyzzy/html/dwarvenmail;
index index.html;
location ~ /\.well-known {
allow all;
}
location ~ / {
return 301 $scheme://dwarvenmail.com$request_uri;
}
listen [::]:443 ssl; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/dwarvenmail.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/dwarvenmail.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
# https://ssl-config.mozilla.org/
add_header Strict-Transport-Security "max-age=15724800" always;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/dwarvenmail.com/chain.pem;
resolver 9.9.9.9 8.8.8.8 1.1.1.1;
resolver_timeout 5s;
# https://observatory.mozilla.org
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "strict-origin-when-cross-origin";
add_header Content-Security-Policy "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'self';";
}
server {
if ($host = dwarvenmail.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name dwarvenmail.com;
root /var/xyzzy/html/dwarvenmail;
index index.html;
return 404; # managed by Certbot
}
server {
if ($host = www.dwarvenmail.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name www.dwarvenmail.com;
root /var/xyzzy/html/dwarvenmail;
index index.html;
return 404; # managed by Certbot
}

View file

@ -0,0 +1,31 @@
# dwarvenmail.com
# www.dwarvenmail.com
server {
listen 80;
listen [::]:80;
server_name dwarvenmail.com;
root /var/xyzzy/html/dwarvenmail;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 80;
listen [::]:80;
server_name www.dwarvenmail.com;
root /var/xyzzy/html/dwarvenmail;
index index.html;
location ~ /\.well-known {
allow all;
}
location ~ / {
return 301 $scheme://dwarvenmail.com$request_uri;
}
}

View file

@ -0,0 +1,101 @@
# dwarvenruins.com
# www.dwarvenruins.com
server {
server_name dwarvenruins.com;
root /var/xyzzy/html/dwarvenruins;
index index.html;
location / {
try_files $uri $uri/ =404;
}
listen [::]:443 ssl; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/dwarvenruins.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/dwarvenruins.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
# https://ssl-config.mozilla.org/
add_header Strict-Transport-Security "max-age=15724800" always;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/dwarvenruins.com/chain.pem;
resolver 9.9.9.9 8.8.8.8 1.1.1.1;
resolver_timeout 5s;
# https://observatory.mozilla.org
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "strict-origin-when-cross-origin";
add_header Content-Security-Policy "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'self';";
}
server {
server_name www.dwarvenruins.com;
root /var/xyzzy/html/dwarvenruins;
index index.html;
location ~ /\.well-known {
allow all;
}
location ~ / {
return 301 $scheme://dwarvenruins.com$request_uri;
}
listen [::]:443 ssl; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/dwarvenruins.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/dwarvenruins.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
# https://ssl-config.mozilla.org/
add_header Strict-Transport-Security "max-age=15724800" always;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/dwarvenruins.com/chain.pem;
resolver 9.9.9.9 8.8.8.8 1.1.1.1;
resolver_timeout 5s;
# https://observatory.mozilla.org
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "strict-origin-when-cross-origin";
add_header Content-Security-Policy "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'self';";
}
server {
if ($host = dwarvenruins.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name dwarvenruins.com;
root /var/xyzzy/html/dwarvenruins;
index index.html;
return 404; # managed by Certbot
}
server {
if ($host = www.dwarvenruins.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name www.dwarvenruins.com;
root /var/xyzzy/html/dwarvenruins;
index index.html;
return 404; # managed by Certbot
}

View file

@ -0,0 +1,31 @@
# dwarvenruins.com
# www.dwarvenruins.com
server {
listen 80;
listen [::]:80;
server_name dwarvenruins.com;
root /var/xyzzy/html/dwarvenruins;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 80;
listen [::]:80;
server_name www.dwarvenruins.com;
root /var/xyzzy/html/dwarvenruins;
index index.html;
location ~ /\.well-known {
allow all;
}
location ~ / {
return 301 $scheme://dwarvenruins.com$request_uri;
}
}

View file

@ -0,0 +1,100 @@
# dwarvenvault.com
# www.dwarvenvault.com
server {
server_name dwarvenvault.com;
root /var/xyzzy/html/dwarvenvault;
index index.html;
location / {
try_files $uri $uri/ =404;
}
listen [::]:443 ssl; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/dwarvenvault.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/dwarvenvault.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
# https://ssl-config.mozilla.org/
add_header Strict-Transport-Security "max-age=15724800" always;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/dwarvenvault.com/chain.pem;
resolver 9.9.9.9 8.8.8.8 1.1.1.1;
resolver_timeout 5s;
# https://observatory.mozilla.org
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "strict-origin-when-cross-origin";
add_header Content-Security-Policy "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'self';";
}
server {
server_name www.dwarvenvault.com;
root /var/xyzzy/html/dwarvenvault;
index index.html;
location ~ /\.well-known {
allow all;
}
location ~ / {
return 301 $scheme://dwarvenvault.com$request_uri;
}
listen [::]:443 ssl; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/dwarvenvault.com/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/dwarvenvault.com/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
# https://ssl-config.mozilla.org/
add_header Strict-Transport-Security "max-age=15724800" always;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /etc/letsencrypt/live/dwarvenvault.com/chain.pem;
resolver 9.9.9.9 8.8.8.8 1.1.1.1;
resolver_timeout 5s;
# https://observatory.mozilla.org
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "strict-origin-when-cross-origin";
add_header Content-Security-Policy "default-src 'none'; img-src 'self'; script-src 'self'; style-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'self';";
}
server {
if ($host = dwarvenvault.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name dwarvenvault.com;
root /var/xyzzy/html/dwarvenvault;
index index.html;
return 404; # managed by Certbot
}
server {
if ($host = www.dwarvenvault.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name www.dwarvenvault.com;
root /var/xyzzy/html/dwarvenvault;
index index.html;
return 404; # managed by Certbot
}

View file

@ -0,0 +1,31 @@
# dwarvenvault.com
# www.dwarvenvault.com
server {
listen 80;
listen [::]:80;
server_name dwarvenvault.com;
root /var/xyzzy/html/dwarvenvault;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
server {
listen 80;
listen [::]:80;
server_name www.dwarvenvault.com;
root /var/xyzzy/html/dwarvenvault;
index index.html;
location ~ /\.well-known {
allow all;
}
location ~ / {
return 301 $scheme://dwarvenvault.com$request_uri;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

157
html/dwarvenmail/index.css Normal file
View file

@ -0,0 +1,157 @@
header,section{
display:block;
}
body{
font-size:16px;
margin:0 auto;
line-height:1.4;
background:#0b0c0d;
color:#d4d4d4;
font-family:"Noto Sans", Futura, Verdana, "Liberation Sans", sans-serif;
}
a{
color:#7a9e55;
text-decoration:none;
}
a:hover{
text-decoration:underline;
}
::selection {
color:#000;
background:#7a9e55;
}
h1{
font-size:2em;
margin:.67em 0;
}
#page{
position:relative;
}
#header{
padding-top:50px;
transform:translate3d(0,0,0);
}
.title-wrapper{
text-align:center;
}
.content{
margin-left:auto;
margin-right:auto;
padding:1px 20px;
position:relative;
z-index:2;
min-width:270px;
}
.title-group.animate{
animation:slide-fade-in .8s ease;
}
.title{
font-size:42px;
line-height:1.2;
margin:40px 0 0;
word-wrap:break-word;
}
.title a:active{
transform:translateY(1px);
}
.title a{
color:#e4e4e4;
display:block;
text-decoration:none;
}
.description{
color:#c69500;
margin:50px 0 0;
display:block;
}
.title+.description{
margin-top:10px!important;
}
.footdesc{
color:#c79908;
margin:20px 0 0;
display:block;
}
.footlink {
text-align: center;
font-size: 16px;
}
.footlink.animate {
animation:slide-fade-in .8s ease;
}
.middle {
overflow: auto;
margin: auto;
display: inline;
text-align: center;
vertical-align: middle;
}
@media screen and (max-width:568px){
.content{
padding:1px 10px;
}
.title{
font-size:36px;
margin-top:30px;
}
.description{
margin-top:35px;
max-width:80%;
margin-left:auto;
margin-right:auto;
}
.title+.description{
margin-top:4px!important;
}
}
@keyframes slide-fade-in{
0%{
opacity:0;
transform:translate3d(0,20px,0);
}
to{
opacity:1;
transform:translate3d(0,0,0);
}
}
.divTable {
font-size: 16px;
line-height: 2.0;
display: table;
margin: auto;
border: 1px solid #444;
}
.divTable.animate {
animation:slide-fade-in .8s ease;
}
.divTableRow {
display: table-row;
}
.divTableHeading {
display: table-header-group;
background-color: #ddd;
}
.divTableCell, .divTableHead {
vertical-align: middle;
display: table-cell;
padding: 5px 10px;
border: 1px solid #444;
}
.divTableHeading {
display: table-header-group;
background-color: #ddd;
font-weight: bold;
}
.divTableFoot {
display: table-footer-group;
font-weight: bold;
background-color: #ddd;
}
.divTableBody {
display: table-row-group;
}
.valign {
vertical-align: middle;
}

View file

@ -0,0 +1,51 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Dwarven Mail</title>
<meta name="description" content="email for the deep folk">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="icon" href="favicon.ico" type="image/x-icon">
<link rel="stylesheet" media="screen" href="index.css">
</head>
<body>
<section id="page">
<header id="header">
<div class="title-wrapper content">
<div class="title-group">
<h1 class="title">Dwarven Mail</h1>
<span class="description">
<em>email for the deep folk</em>
</span>
</div>
</div>
</header>
<br />
<main id="main">
<!-- you have my shield -->
</main>
<footer id="footer">
<!-- and my axe -->
<div class="footlink">
<span class="footdesc">
[
<a target="_blank" href="https://dwarvenruins.com/">dwarven ruins</a> |
<a target="_blank" href="https://dwarvenvault.com/">dwarven vault</a>
]
</span>
</div>
</footer>
<br />
</section>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

157
html/dwarvenruins/index.css Normal file
View file

@ -0,0 +1,157 @@
header,section{
display:block;
}
body{
font-size:16px;
margin:0 auto;
line-height:1.4;
background:#0b0c0d;
color:#d4d4d4;
font-family:"Noto Sans", Futura, Verdana, "Liberation Sans", sans-serif;
}
a{
color:#7a9e55;
text-decoration:none;
}
a:hover{
text-decoration:underline;
}
::selection {
color:#000;
background:#7a9e55;
}
h1{
font-size:2em;
margin:.67em 0;
}
#page{
position:relative;
}
#header{
padding-top:50px;
transform:translate3d(0,0,0);
}
.title-wrapper{
text-align:center;
}
.content{
margin-left:auto;
margin-right:auto;
padding:1px 20px;
position:relative;
z-index:2;
min-width:270px;
}
.title-group.animate{
animation:slide-fade-in .8s ease;
}
.title{
font-size:42px;
line-height:1.2;
margin:40px 0 0;
word-wrap:break-word;
}
.title a:active{
transform:translateY(1px);
}
.title a{
color:#e4e4e4;
display:block;
text-decoration:none;
}
.description{
color:#c69500;
margin:50px 0 0;
display:block;
}
.title+.description{
margin-top:10px!important;
}
.footdesc{
color:#c79908;
margin:20px 0 0;
display:block;
}
.footlink {
text-align: center;
font-size: 16px;
}
.footlink.animate {
animation:slide-fade-in .8s ease;
}
.middle {
overflow: auto;
margin: auto;
display: inline;
text-align: center;
vertical-align: middle;
}
@media screen and (max-width:568px){
.content{
padding:1px 10px;
}
.title{
font-size:36px;
margin-top:30px;
}
.description{
margin-top:35px;
max-width:80%;
margin-left:auto;
margin-right:auto;
}
.title+.description{
margin-top:4px!important;
}
}
@keyframes slide-fade-in{
0%{
opacity:0;
transform:translate3d(0,20px,0);
}
to{
opacity:1;
transform:translate3d(0,0,0);
}
}
.divTable {
font-size: 16px;
line-height: 2.0;
display: table;
margin: auto;
border: 1px solid #444;
}
.divTable.animate {
animation:slide-fade-in .8s ease;
}
.divTableRow {
display: table-row;
}
.divTableHeading {
display: table-header-group;
background-color: #ddd;
}
.divTableCell, .divTableHead {
vertical-align: middle;
display: table-cell;
padding: 5px 10px;
border: 1px solid #444;
}
.divTableHeading {
display: table-header-group;
background-color: #ddd;
font-weight: bold;
}
.divTableFoot {
display: table-footer-group;
font-weight: bold;
background-color: #ddd;
}
.divTableBody {
display: table-row-group;
}
.valign {
vertical-align: middle;
}

View file

@ -0,0 +1,51 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Dwarven Ruins</title>
<meta name="description" content="puzzles, traps and loot oh my">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="icon" href="favicon.ico" type="image/x-icon">
<link rel="stylesheet" media="screen" href="index.css">
</head>
<body>
<section id="page">
<header id="header">
<div class="title-wrapper content">
<div class="title-group">
<h1 class="title">Dwarven Ruins</h1>
<span class="description">
<em>watch your head</em>
</span>
</div>
</div>
</header>
<br />
<main id="main">
<!-- bring a torch you might get eaten by a grue -->
</main>
<footer id="footer">
<!-- support your local humane shelter -->
<div class="footlink">
<span class="footdesc">
[
<a target="_blank" href="https://dwarvenmail.com/">dwarven mail</a> |
<a target="_blank" href="https://dwarvenvault.com/">dwarven vault</a>
]
</span>
</div>
</footer>
<br />
</section>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

157
html/dwarvenvault/index.css Normal file
View file

@ -0,0 +1,157 @@
header,section{
display:block;
}
body{
font-size:16px;
margin:0 auto;
line-height:1.4;
background:#0b0c0d;
color:#d4d4d4;
font-family:"Noto Sans", Futura, Verdana, "Liberation Sans", sans-serif;
}
a{
color:#7a9e55;
text-decoration:none;
}
a:hover{
text-decoration:underline;
}
::selection {
color:#000;
background:#7a9e55;
}
h1{
font-size:2em;
margin:.67em 0;
}
#page{
position:relative;
}
#header{
padding-top:50px;
transform:translate3d(0,0,0);
}
.title-wrapper{
text-align:center;
}
.content{
margin-left:auto;
margin-right:auto;
padding:1px 20px;
position:relative;
z-index:2;
min-width:270px;
}
.title-group.animate{
animation:slide-fade-in .8s ease;
}
.title{
font-size:42px;
line-height:1.2;
margin:40px 0 0;
word-wrap:break-word;
}
.title a:active{
transform:translateY(1px);
}
.title a{
color:#e4e4e4;
display:block;
text-decoration:none;
}
.description{
color:#c69500;
margin:50px 0 0;
display:block;
}
.title+.description{
margin-top:10px!important;
}
.footdesc{
color:#c79908;
margin:20px 0 0;
display:block;
}
.footlink {
text-align: center;
font-size: 16px;
}
.footlink.animate {
animation:slide-fade-in .8s ease;
}
.middle {
overflow: auto;
margin: auto;
display: inline;
text-align: center;
vertical-align: middle;
}
@media screen and (max-width:568px){
.content{
padding:1px 10px;
}
.title{
font-size:36px;
margin-top:30px;
}
.description{
margin-top:35px;
max-width:80%;
margin-left:auto;
margin-right:auto;
}
.title+.description{
margin-top:4px!important;
}
}
@keyframes slide-fade-in{
0%{
opacity:0;
transform:translate3d(0,20px,0);
}
to{
opacity:1;
transform:translate3d(0,0,0);
}
}
.divTable {
font-size: 16px;
line-height: 2.0;
display: table;
margin: auto;
border: 1px solid #444;
}
.divTable.animate {
animation:slide-fade-in .8s ease;
}
.divTableRow {
display: table-row;
}
.divTableHeading {
display: table-header-group;
background-color: #ddd;
}
.divTableCell, .divTableHead {
vertical-align: middle;
display: table-cell;
padding: 5px 10px;
border: 1px solid #444;
}
.divTableHeading {
display: table-header-group;
background-color: #ddd;
font-weight: bold;
}
.divTableFoot {
display: table-footer-group;
font-weight: bold;
background-color: #ddd;
}
.divTableBody {
display: table-row-group;
}
.valign {
vertical-align: middle;
}

View file

@ -0,0 +1,51 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Dwarven Vault</title>
<meta name="description" content="shiny tchotchkes">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
<link rel="icon" href="favicon.ico" type="image/x-icon">
<link rel="stylesheet" media="screen" href="index.css">
</head>
<body>
<section id="page">
<header id="header">
<div class="title-wrapper content">
<div class="title-group">
<h1 class="title">Dwarven Vault</h1>
<span class="description">
<em>shiny tchotchkes</em>
</span>
</div>
</div>
</header>
<br />
<main id="main">
<!-- you have my shield -->
</main>
<footer id="footer">
<!-- and my axe -->
<div class="footlink">
<span class="footdesc">
[
<a target="_blank" href="https://dwarvenruins.com/">dwarven ruins</a> |
<a target="_blank" href="https://dwarvenmail.com/">dwarven mail</a>
]
</span>
</div>
</footer>
<br />
</section>
</body>
</html>