Compare commits

...

42 Commits

Author SHA1 Message Date
Cat Flynn 4ea9f759d6 chore: remove about page
continuous-integration/drone Build is failing Details
2024-08-11 16:24:54 +01:00
ktyl c65854df9f chore: remove CSS templating (#34)
continuous-integration/drone/push Build is passing Details
re #31

Reviewed-on: #34
Co-authored-by: ktyl <me@ktyl.dev>
Co-committed-by: ktyl <me@ktyl.dev>
2024-06-16 17:20:51 +02:00
ktyl d606dcc1f4 chore: update blog
continuous-integration/drone/push Build is passing Details
2024-06-16 16:09:25 +01:00
ktyl 26525fcc43 chore: remove redundant deploy rule
continuous-integration/drone/push Build is passing Details
2024-06-08 16:31:51 +01:00
ktyl 49333b641e chore: remove ppp submodule
continuous-integration/drone/push Build was killed Details
2024-06-08 16:15:02 +01:00
ktyl 2471160986 chore: update python
continuous-integration/drone/push Build is failing Details
continuous-integration/drone Build is passing Details
2024-06-08 12:24:47 +01:00
ktyl 592749a5b4 feat: add favicon
continuous-integration/drone Build is failing Details
2024-06-08 12:16:00 +01:00
Cat Flynn 059a5f68bf blog: fix typo
continuous-integration/drone/push Build is passing Details
2024-04-27 10:49:51 +01:00
Cat Flynn 12fe8baf2b fix blog post
continuous-integration/drone/push Build is passing Details
2024-04-27 00:59:12 +01:00
Cat Flynn f205c4d3f3 blog: interactive astrodynamics
continuous-integration/drone Build is passing Details
2024-04-26 23:43:43 +01:00
ktyl 41c52f59d1 feat(vn): simple vn
continuous-integration/drone/push Build is passing Details
2024-03-07 00:42:30 +00:00
ktyl 59d6131c5a fix typos
continuous-integration/drone/push Build is passing Details
2024-02-06 00:14:13 +00:00
ktyl 9b442db80a blog: we all dream about flying
continuous-integration/drone/push Build is passing Details
2024-02-05 00:18:19 +00:00
ktyl 2b0141051d blog: fix typos 2024-02-03 16:36:02 +00:00
ktyl bd4cd99664 fix blog typos
continuous-integration/drone/push Build is passing Details
2024-01-02 16:10:59 +00:00
ktyl 697dd24c46 blog: mixed reality grass
continuous-integration/drone/push Build is passing Details
2024-01-01 16:04:16 +00:00
ktyl f86bbad8bb chore: remove redundant fsText class
continuous-integration/drone/push Build is passing Details
continuous-integration/drone Build is passing Details
2023-10-01 22:23:24 +01:00
ktyl 27517aaed1 blog: digital gardens
continuous-integration/drone/push Build is passing Details
re-push
2023-09-27 14:18:30 +01:00
ktyl 24aea7d1f3 ci: run sysupgrade when cloning submodules
continuous-integration/drone/push Build is passing Details
2023-09-10 16:10:33 +01:00
ktyl b2d6414536 blog: nonbinary masculinity
continuous-integration/drone/push Build is failing Details
2023-09-09 23:24:03 +01:00
ktyl 98b8a89fb4 fix: typo
continuous-integration/drone/push Build is passing Details
2023-08-10 23:47:15 +02:00
ktyl 1aea246500 chore: update blog
continuous-integration/drone/push Build is passing Details
2023-08-10 23:02:18 +02:00
ktyl fe38b3325f build: clean blog with make rule 2023-08-10 23:02:03 +02:00
ktyl 9001ae70e4 feat: include <ul> in text panels 2023-08-10 23:01:37 +02:00
ktyl b24ea49196 chore: remove redundant build script 2023-08-10 00:47:13 +02:00
ktyl 2db1a7d8eb chore: update blog
continuous-integration/drone/push Build is passing Details
2023-08-06 23:52:16 +02:00
Cat Flynn e79a509a7c chore: update blog
continuous-integration/drone/push Build is passing Details
2023-08-05 21:06:10 +02:00
ktyl fd649f29e5 fix: copyright is stupid anyway
continuous-integration/drone/push Build is passing Details
2023-08-03 22:57:29 +02:00
ktyl 499eca58a9 build: upgrade python version
continuous-integration/drone/push Build is passing Details
2023-08-03 22:47:50 +02:00
ktyl 59af865ac5 feat: blog index intro
continuous-integration/drone/push Build is failing Details
2023-08-03 22:41:00 +02:00
ktyl bcab110594 update blog
continuous-integration/drone/push Build is failing Details
2023-08-03 22:30:25 +02:00
ktyl 998fdf4392 remove todo.md
continuous-integration/drone/push Build is passing Details
2023-03-14 00:54:38 +00:00
ktyl d940f407d9 update blog
continuous-integration/drone/push Build is failing Details
continuous-integration/drone Build is passing Details
2023-03-13 23:35:49 +00:00
ktyl 397e04e67c extract blog build to submodule
continuous-integration/drone/push Build is passing Details
2023-03-13 22:27:18 +00:00
ktyl 34eb3f0eae update blog 2023-03-13 22:26:44 +00:00
ktyl eced0015f4 move index construction to subrepo 2023-03-13 21:01:32 +00:00
ktyl 320434e9c7 move blog feed generation out of repo 2023-03-13 21:01:32 +00:00
ktyl 9e9c0c3e7f update ppp
continuous-integration/drone/push Build is passing Details
2023-03-13 21:01:10 +00:00
ktyl 513f1a1592 autostart apache 2023-03-11 11:26:32 +00:00
ktyl 2ea30d858e update blog
continuous-integration/drone/push Build is passing Details
2023-02-23 21:11:03 +00:00
ktyl a8a1f02b6f update blog
continuous-integration/drone/push Build is passing Details
2023-01-08 21:48:33 +00:00
ktyl c92ab98c31 make html rule
continuous-integration/drone/push Build is passing Details
2022-12-24 18:38:21 +00:00
195 changed files with 1136 additions and 1302 deletions

View File

@ -6,7 +6,7 @@ steps:
- name: submodules - name: submodules
image: archlinux image: archlinux
commands: commands:
- pacman -Sy --noconfirm git git-lfs >/dev/null - pacman -Syu --noconfirm git git-lfs >/dev/null
- git lfs install - git lfs install
- git submodule update --init --recursive - git submodule update --init --recursive
- cd blog - cd blog
@ -18,7 +18,7 @@ steps:
- name: build - name: build
image: archlinux image: archlinux
environment: environment:
PYTHON_ENV: python python-pipenv python-setuptools PYTHON_ENV: pyenv python python-pipenv python-setuptools
commands: commands:
# set up python # set up python

View File

@ -9,4 +9,4 @@ markdown = "*"
[dev-packages] [dev-packages]
[requires] [requires]
python_version = "3.10" python_version = "3.11"

11
Pipfile.lock generated
View File

@ -1,11 +1,11 @@
{ {
"_meta": { "_meta": {
"hash": { "hash": {
"sha256": "4f4f4fc0dc77addc9a4bf6c737f31df9507ee22a83548fcff1891a4e7bc27bed" "sha256": "8197b62eaf2c2267235d798d625f266e606263fb3108ba131e012c8ae7814dcd"
}, },
"pipfile-spec": 6, "pipfile-spec": 6,
"requires": { "requires": {
"python_version": "3.10" "python_version": "3.11"
}, },
"sources": [ "sources": [
{ {
@ -18,11 +18,12 @@
"default": { "default": {
"markdown": { "markdown": {
"hashes": [ "hashes": [
"sha256:08fb8465cffd03d10b9dd34a5c3fea908e20391a2a90b88d66362cb05beed186", "sha256:48f276f4d8cfb8ce6527c8f79e2ee29708508bf4d40aa410fbc3b4ee832c850f",
"sha256:3b809086bb6efad416156e00a0da66fe47618a5d6918dd688f53f40c8e4cfeff" "sha256:ed4f41f6daecbeeb96e576ce414c41d2d876daa9a16cb35fa8ed8c2ddfad0224"
], ],
"index": "pypi", "index": "pypi",
"version": "==3.4.1" "markers": "python_version >= '3.8'",
"version": "==3.6"
} }
}, },
"develop": {} "develop": {}

2
blog

@ -1 +1 @@
Subproject commit 6dade5c67d76772680b9cc914e7038e3abf5c72f Subproject commit 745cedab0f6f829c9d61a0d1d31d6a8913d7e81e

BIN
img/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1000 B

1
local
View File

@ -8,3 +8,4 @@ make all
sudo rm -r $dest/* sudo rm -r $dest/*
sudo cp -r $outdir/* $dest sudo cp -r $outdir/* $dest
sudo apachectl start

View File

@ -1,89 +1,62 @@
SITE_NAME = ktyl.dev
# configured in ~/.ssh/config
HOST = pluto
# a script on the remote server to move it on arrival
REMOTE_SCRIPT = ./deploy-$(SITE_NAME)
SRC_DIR = src SRC_DIR = src
IMG_DIR = img IMG_DIR = img
OUT_DIR = site OUT_DIR = site
ROOT_DIR = $(SRC_DIR)/root ROOT_DIR = $(SRC_DIR)/root
BLOG_SRC_DIR = blog/blogs BLOG_BASE_DIR = blog/
BLOG_BUILD_DIR = $(BLOG_BASE_DIR)out/html/
BLOG_OUT_DIR = $(OUT_DIR)/blog BLOG_OUT_DIR = $(OUT_DIR)/blog
BLOG_TMP_DIR = .blogtmp BLOG_INDEX = $(BLOG_BUILD_DIR)/index.html
VN = src/vn/
PAGES = $(shell find $(ROOT_DIR) -wholename "$(ROOT_DIR)*.html") PAGES = $(shell find $(ROOT_DIR) -wholename "$(ROOT_DIR)*.html")
STYLES = $(shell find $(ROOT_DIR) -wholename "$(ROOT_DIR)*.css") STYLES = $(shell find $(ROOT_DIR) -wholename "$(ROOT_DIR)*.css")
BLOG_PAGES = $(shell find $(BLOG_SRC_DIR) -wholename "$(BLOG_SRC_DIR)*.md")
BLOG_IMAGES = $(shell find $(BLOG_SRC_DIR) -wholename "$(BLOG_SRC_DIR)*.png" -o -wholename "$(BLOG_SRC_DIR)*.jpg")
IMAGES = $(shell find $(IMG_DIR) -wholename "$(IMG_DIR)/*.png") IMAGES = $(shell find $(IMG_DIR) -wholename "$(IMG_DIR)/*.png")
HTML_INCLUDES = $(shell find $(SRC_DIR)/inc_html -name *.html) HTML_INCLUDES = $(shell find $(SRC_DIR)/inc_html -name *.html)
CSS_INCLUDES = $(shell find $(SRC_DIR)/inc_css -name *.css)
BLOG_INDEX = $(OUT_DIR)/blog.html
BLOG_RSS = $(BLOG_OUT_DIR)/index.xml
BLOG_INDEX_LINKS = $(BLOG_TMP_DIR)/blogindexlinks.html
BLOG_TARGETS = $(BLOG_PAGES:$(BLOG_SRC_DIR)/%.md=$(BLOG_OUT_DIR)/%.html)
BLOG_PNG_TARGETS = $(BLOG_IMAGES:$(BLOG_SRC_DIR)/%.png=$(BLOG_OUT_DIR)/%.png)
BLOG_JPG_TARGETS = $(BLOG_IMAGES:$(BLOG_SRC_DIR)/%.jpg=$(BLOG_OUT_DIR)/%.jpg)
HTML_TARGETS = $(PAGES:$(ROOT_DIR)/%.html=$(OUT_DIR)/%.html) HTML_TARGETS = $(PAGES:$(ROOT_DIR)/%.html=$(OUT_DIR)/%.html)
CSS_TARGETS = $(STYLES:$(ROOT_DIR)/%.css=$(OUT_DIR)/%.css) CSS_TARGETS = $(STYLES:$(ROOT_DIR)/%.css=$(OUT_DIR)/%.css)
PNG_TARGETS = $(IMG_DIR)/%.png=$(OUT_DIR)/%.png PNG_TARGETS = $(IMG_DIR)/%.png=$(OUT_DIR)/%.png
all: html blog vn | $(OUT_DIR)
all: $(HTML_TARGETS) $(CSS_TARGETS) blog | $(OUT_DIR) vn: $(VN) | $(OUT_DIR)
cp -r $(VN) $(OUT_DIR)/vn
html: $(HTML_TARGETS) $(CSS_TARGETS) | $(OUT_DIR)
cp $(IMG_DIR)/*.ico $(OUT_DIR)/
cp $(IMG_DIR)/*.png $(OUT_DIR)/ cp $(IMG_DIR)/*.png $(OUT_DIR)/
cp $(IMG_DIR)/*.jpg $(OUT_DIR)/ cp $(IMG_DIR)/*.jpg $(OUT_DIR)/
deploy: site $(OUT_DIR)/%.html: $(ROOT_DIR)/%.html $(HTML_INCLUDES) $(BLOG_INDEX) | $(OUT_DIR)
cp -r $(OUT_DIR) $(SITE_NAME) python ppp.py $< $(HTML_INCLUDES) $(BLOG_INDEX) > $@
rsync -rP $(SITE_NAME) $(HOST):~
rm -r $(SITE_NAME)
ssh $(HOST) "sudo $(REMOTE_SCRIPT)"
$(OUT_DIR)/%.html: $(ROOT_DIR)/%.html $(HTML_INCLUDES) $(BLOG_INDEX_LINKS) | $(OUT_DIR) $(OUT_DIR)/%.css: $(ROOT_DIR)/%.css | $(OUT_DIR)
python ppp/ppp.py $< $(HTML_INCLUDES) $(BLOG_INDEX_LINKS) > $@ cp $< $@
$(OUT_DIR)/%.css: $(ROOT_DIR)/%.css $(CSS_INCLUDES) | $(OUT_DIR)
python ppp/ppp.py $< $(CSS_INCLUDES) > $@
$(OUT_DIR): $(OUT_DIR):
mkdir -p $@ mkdir -p $@
$(BLOG_OUT_DIR)/%.png: $(BLOG_SRC_DIR)/%.png $(BLOG_INDEX):
cp $< $@ mkdir -p $(BLOG_OUT_DIR)
make --directory $(BLOG_BASE_DIR) html
$(BLOG_OUT_DIR)/%.jpg: $(BLOG_SRC_DIR)/%.jpg # make blog from submodule and apply site templating
cp $< $@ blog: $(HTML_INCLUDES) $(CSS_TARGETS)
mkdir -p $(BLOG_OUT_DIR)
blog: $(BLOG_TARGETS) $(BLOG_PNG_TARGETS) $(BLOG_JPG_TARGETS) $(BLOG_RSS) | $(BLOG_TMP_DIR) make --directory $(BLOG_BASE_DIR) html
cp -r $(BLOG_BUILD_DIR)/* $(BLOG_OUT_DIR)
$(BLOG_RSS): $(BLOG_PAGES) for page in `find "$(BLOG_OUT_DIR)" -wholename "*.html"`; do \
pipenv run python scripts/mkblogrss.py $(BLOG_PAGES) > $@ python ppp.py $$page $(HTML_INCLUDES) > temp ; \
mv temp $$page ; \
$(BLOG_INDEX_LINKS): $(BLOG_TARGETS) | $(BLOG_TMP_DIR) cp $(CSS_TARGETS) $(IMG_DIR)/*.ico `dirname $$page` ; \
pipenv run python scripts/mkblogindex.py $(BLOG_TARGETS) > $@ done
$(BLOG_OUT_DIR)/%.html: $(BLOG_OUT_DIR)/%.html.tmp $(HTML_INCLUDES) $(CSS_TARGETS)
python ppp/ppp.py $< $(HTML_INCLUDES) > $@
cp $(CSS_TARGETS) `dirname $@`
rm $<
$(BLOG_OUT_DIR)/%.html.tmp: $(BLOG_SRC_DIR)/%.md | $(BLOG_TMP_DIR)
pipenv run python scripts/mkblog.py $< $@
$(BLOG_OUT_DIR): | $(OUT_DIR)
mkdir -p $@
$(BLOG_TMP_DIR):
mkdir -p $@
clean: clean:
rm -rf $(OUT_DIR) $(BLOG_TMP_DIR) make --directory $(BLOG_BASE_DIR) clean
rm -rf $(OUT_DIR)
.PHONY: site .PHONY: blog vn

1
ppp

@ -1 +0,0 @@
Subproject commit 45fc27f1a837dfb2536e8a7c50537fc6a8b4cfa4

83
ppp.py Normal file
View File

@ -0,0 +1,83 @@
import sys
import os.path
import re
err = False
paths = []
def print_usage():
print("\nusage: python ppp.py ROOT TEMPLATES [...]")
# check arguments
argc = len(sys.argv)
if argc < 3:
print_usage()
sys.exit(1)
includes = sys.argv[2:]
# figure out src dir from root argument
sep="/"
src_dir = sep.join(sys.argv[2].split(sep)[:-1])
# regex patterns
p_var = re.compile(r'(#.+?\.css)')
def preprocess_file(path):
lines=0
with open(path) as f:
content = f.readlines()
content = [x.strip('\n') for x in content]
lines=len(content)
for l in content:
# replace lines that start with #include with the contents of a file
if l.startswith("#include"):
include_path = l.split(" ")[1]
# prepend directory
#include_path = "/".join([src_dir, include_path])
for inc in includes:
if os.path.basename(inc) == include_path:
include_path = inc
break
preprocess_file(include_path)
continue
# inline replace any occurrence of #filename with the contents of that file
match = re.search(p_var, l)
if match:
path = "/".join([src_dir, match.group(0)[1:]])
with open(path) as var_file:
var_content = var_file.read().strip()
l = re.sub(p_var, var_content, l)
print(l)
for i in range(1,argc):
path = sys.argv[i]
if not os.path.isfile(path):
print(path + " is not a file")
err = True
continue
if path in paths:
# ignore duplicates
continue
paths.append(path)
if err:
print_usage()
sys.exit(1)
preprocess_file(sys.argv[1])
sys.exit(0)

View File

@ -1,86 +0,0 @@
#!/usr/bin/env python
import os
import sys
import markdown
import re
# SRC
# +-2022/
# | +-10/
# | +-12/
# | +-25/
# +-2023/
# | +-1/
# | +-26/
# | +-3/
# ...
def print_usage():
print("\nusage: python mkblog.py SRC DEST\n")
print("\n")
print("\t\tSRC\tinput markdown file")
print("\t\tDEST\tdestination html file")
# check args
if len(sys.argv) != 3:
print_usage()
sys.exit(1)
src_file = sys.argv[1]
dest_file = sys.argv[2]
# check blog root exists
if not os.path.isfile(src_file):
print("{blog_root} doesn't exist")
sys.exit(1)
# make dest dir if it doesnt exist
dest_dir = os.path.dirname(dest_file)
print(dest_dir)
if not os.path.isdir(dest_dir):
os.makedirs(dest_dir)
# write markdown into a dummy file first so that we can add lines before it in the final output
dummy_file = f"{dest_file}.bak"
open(dummy_file, 'w').close()
print(f"{src_file} -> {dummy_file}")
markdown.markdownFromFile(input=src_file, output=dummy_file, extensions=["fenced_code"])
print(f"{dummy_file} -> {dest_file}")
with open(dummy_file, 'r') as read_file, open(dest_file, 'w') as write_file:
write_file.write("#include blogstart.html\n")
# modify the basic html to make it nicer for styling later
html = read_file.read()
# extract images from their enclosing <p> tags and put them in img panels
html = re.sub('(<p>(<img(?:.+)/>)</p>)', r'<div class="img-panel">\2</div>', html)
# insert text-panel start between non-<p> and <p> elements
html = re.sub('((?<!</p>)\n)(<p>)', r'\1<div class="text-panel">\n\2', html)
# insert para-block end between <p> and non-<p> elements
html = re.sub('(</p>\n)((?!<p>))', r'\1</div>\n\2', html)
# insert code-panel start before <pre> elements
html = re.sub('(<pre>)', r'<div class="code-panel">\n\1', html)
# insert code-panel end after </pre> elements
html = re.sub('(</pre>)', r'\1\n</div>', html)
# replace horizontal rules with nice separator dot
html = re.sub('<hr />', r'<div class="separator"></div>', html)
lines = html.split("\n")
# tack on a closing div because we will have opened one without closing it on the final <p>
lines.append("</div>")
for line in lines:
write_file.write(line + "\n")
write_file.write("\n#include blogend.html\n")
os.remove(dummy_file)

View File

@ -1,59 +0,0 @@
#!/usr/bin/env python3
import sys
import re
# we expect the arguments to be filepaths to each blog post
def print_usage():
print("\nusage: python mkblogindex.py POSTS\n")
print("\n")
print("\t\tPOSTS\tfilepaths of blog posts")
# check args for at least one file path
if len(sys.argv) < 2:
print_usage()
sys.exit(1)
# posts are arguments from index 1 onwards
posts = sys.argv[1:]
dir_pattern = re.compile("(.+)/(blog\/.+\.html)")
path_pattern = re.compile("(.+)\/(\d{4})\/(\d{1,2})\/(\d{1,2})\/(.+).html")
title_pattern = re.compile("<h1>(.+)</h1>")
# filter posts to just those with a date in them
posts = [p for p in posts if path_pattern.match(p)]
posts.reverse()
links = []
# for each file we want to output an <a> tag with a relative href to the site root
for path in posts:
m = re.match(path_pattern, path)
year = m.group(2)
month = m.group(3).rjust(2, '0')
day = m.group(4).rjust(2, '0')
date = f'<span class="post-date">{year}-{month}-{day}</span>'
title = ""
with open(path) as f:
for line in f:
if title_pattern.match(line):
title = re.sub(title_pattern, r'<span class="post-title">\1</span>', line).strip()
break
# clean leading directories to get the relative path we'll use for the link
url = re.sub(dir_pattern, r"\2", path)
item = (date, f'<li><a href="{url}">{date}{title}</a></li>')
links.append(item)
# make sure we're properly ordered in reverse date order lol
links = sorted(links, key=lambda x: x[0])
links.reverse()
for l in links:
print(l[1])

View File

@ -1,76 +0,0 @@
#!/usr/bin/env python3
import markdown
import pathlib
import sys
import re
def print_usage():
print("\nusage: python mkblogrss.py POSTS\n")
print("\n")
print("\t\tPOSTS\tfilepaths of blog posts")
# check args for at least one file path
if len(sys.argv) < 2:
print_usage()
sys.exit(1)
# posts are arguments from index 1 onwards
posts = sys.argv[1:]
# header and footer to enclose feed items
header = """<?xml version="1.0" encoding="utf-8" ?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
<channel>
<title>ktyl.dev</title>
<link>https://ktyl.dev/blog/index.html</link>
<description>mostly computer stuff!</description>
<atom:link href="https://ktyl.dev/blog/index.xml" rel="self" type="application/rss+xml"/>
"""
footer = "</channel></rss>"
# regex patterns
title_pattern = re.compile("<h1>(.+)</h1>")
path_pattern = re.compile("(.+)\/(\d{4})\/(\d{1,2})\/(\d{1,2})\/(.+).md")
def make_item(path):
str = "<item>\n"
# get the HTML version of the file
text = ""
with open(path) as f:
text = f.read()
html = markdown.markdown(text, extensions=["fenced_code"])
# title
title = ""
m = title_pattern.match(html)
title = m.group(1)
str += f"<title>{title}</title>\n"
# link
url = "/".join(pathlib.Path(path).parts[2:])
url = url.replace(".md", ".html")
link = f"https://ktyl.dev/blog/{url}"
str += f"<link>{link}</link>\n"
# content
description = html
description = re.sub('<', '&lt;', description)
description = re.sub('>', '&gt;', description)
str += f"<description>{description}</description>\n"
# pub date
date = re.sub(path_pattern, r'\2-\3-\4', path)
str += f"<pubDate>{date}</pubDate>\n"
str += "</item>"
return str
# print everything!
print(header)
for p in posts:
print(make_item(p))
print(footer)

View File

@ -1,24 +0,0 @@
.pfp {
position: relative;
top: 3em;
left: 50%;
width: 20em;
height: 20em;
text-align: center;
overflow: hidden;
border-color: var(--background-alt);
border-style: solid;
border-width: 3px;
border-radius: 50%;
transform: translate(-50%, 0);
margin-bottom: 4em;
}
.pfp img {
position: absolute;
left: 50%;
top: 50%;
height: 100%;
width: auto;
transform: translate(-50%, -50%);
}

View File

@ -1,118 +0,0 @@
.page .blog {
}
.page .blog h1 {
font-size: 2.5em;
}
.page .blog .para-block {
color: var(--foreground-inactive);
font-size: 1.1em;
line-height: 1.25em;
background-color: var(--background);
border-color: var(--background-alt);
border-width: 3px;
border-radius: 2em;
border-style: solid;
padding: 1.0em 1.5em;
}
.page .blog .code-panel {
color: var(--background);
background-color: var(--foreground);
font-size 1.5em;
line-height: 1.3em;
border-color: var(--accent);
border-width: 2px;
border-radius: 2em;
border-style: solid;
padding: 1.0em 2.0em;
margin: 2.5em -4.0em;
overflow: hidden;
}
.page .blog .code-panel pre {
overflow: scroll;
}
.page .blog .code-panel pre::-webkit-scrollbar {
height: 0;
width: 0;
background: transparent;
}
.page .blog .separator {
margin: 2em;
}
.page .blog p code {
height: 0.8em;
padding: 0.07em 0.25em;
margin: 0 0.1em;
background-color: var(--foreground-inactive);
color: var(--background);
border-radius: .3em;
}
ul.blog-index li {
display: block;
margin: .2em 0;
}
ul.blog-index li a {
color: var(--foreground-inactive);
transition: none;
text-decoration: none;
}
.blog-index li a:hover {
color: var(--accent);
}
.blog-index li a:visited {
color: var(--foreground);
}
.page ul.blog-index li a::before {
content: "• "
}
.blog-index .post-date {
padding-right: 1em;
}
.page .blog .img-panel
{
margin-top: 2em;
margin-bottom: 2em;
}
.page .blog .img-panel img {
position: relative;
width: 120%;
max-width: 100vw;
left: -10%;
border-radius: 2em;
}
@media only screen and (max-width: 700px) {
.page .blog .code-panel {
padding: 1.0em 5.0em;
}
.page .blog .img-panel img {
width: 100%;
left: 0;
border-radius: 0;
}
}

View File

@ -1,18 +0,0 @@
.demoTile {
opacity: 0.3;
transition: opacity 0.3s;
max-width: 15vw;
display: inline-block;
}
.demoTile:hover {
opacity: 1.0;
}
.demoTiles {
position: absolute;
background-color:white;
left:27.5%;
top: var(--title-height);
margin-top:40px;
}

View File

@ -1,11 +0,0 @@
.footer {
position: relative;
}
.footer span {
position: absolute;
left: 50%;
transform: translate(-50%, 0);
color: var(--foreground-inactive);
padding: 2em;
}

View File

@ -1,112 +0,0 @@
.page.portfolio {
padding-top: 0;
width: 50%;
margin-left:auto;
margin-right:auto;
transform: translate(-50%,0);
}
.portfolio p {
margin: 1.2em 0 2em;
text-align: center;
border-style: none;
background-color: var(--clear);
}
.glass {
padding: 0.4em 0.6em;
color: var(--foreground-inactive);
background-color: var(--background);
opacity:0.9;
border-style:solid;
border-radius:2em;
border-color:var(--clear);
}
/* gallery img */
.wrapper {
margin-top: 1em;
width: 100%;
height: 100%;
display: grid;
grid-template-columns: 1fr 1fr 1fr;
}
.wrapper .imgHolder {
position: relative;
width: 100%;
height: 100%;
}
.wrapper img {
pointer-events: none;
box-sizing: border-box;
width: 100%;
height: 100%;
object-fit: cover;
left: auto;
right: auto;
transition: all 0.2s ease-out;
}
.wrapper .imgHolder span {
position:absolute;
top:100%;
width:100%;
transform: translateY(-50%) scale(0.6);
text-align: center;
opacity: 0;
transition: all 0.3s;
color: var(--accent);
}
.wrapper .imgHolder span p {
padding:0;
margin:0;
opacity: 1;
color: var(--background);
}
.lightTileText {
color: var(--background);
}
.wrapper .imgHolder a {
position: absolute;
top:0;
left:0;
width:100%;
height:100%;
}
@media only screen and (max-width: 600px) {
.page.portfolio {
width: 100%;
}
.wrapper .imgHolder {
overflow: hidden;
}
.wrapper .imgHolder span {
position: absolute;
top:0;
left:0;
width:100%;
height:100%;
transform: none;
}
.icon-link {
display: none;
}
.wrapper .imgHolder span i {
/*display: none;*/
}
}

View File

@ -1,68 +0,0 @@
.landing {
margin-top: 10%;
text-align: center;
}
.landing .fsText a {
color: var(--foreground-inactive);
font-size: 2em;
transform: translate(0,50%);
transition: all 0.3s;
}
.landing .fsText a:hover {
color: var(--accent);
}
.landing ul {
width: 100%;
padding: .5em 0 0;
margin: 0;
}
.landing li a {
position: relative;
font-size: 2.5em;
margin: 0 .2em;
color: var(--foreground-inactive);
}
.landing li a:hover {
transform: translateY(-10%);
color: var(--accent);
}
.landing .socials {
position: relative;
background-color: var(--clear);
top: 1em;
left: auto;
right: auto;
text-align: center;
}
.landing .socials i {
color: var(--foreground-inactive);
font-size: 3.5em;
padding: 0 .07em;
}
@media only screen and (max-width: 600px) {
.landing.page {
position: fixed;
margin: 0;
padding: 0;
height: 100%;
}
.landing.page .socials {
top: .5em;
bottom: 0;
}
.landing.page .socials i {
font-size: 3em;
}
}

View File

@ -1,108 +0,0 @@
.nav {
position: fixed;
width: max(11vmax, 200px);
top: 0;
bottom:0;
padding-top: 2em;
padding-left: 2em;
background-color: var(--background);
color: var(--foreground);
}
.nav-links {
position: relative;
padding-top: 2em;
padding-bottom: 1em;
padding-left:0;
width: 80%;
}
ul.nav-links {
margin-top: 0;
list-style-type: none;
}
.nav .nav-links li {
display: block;
margin-bottom: 0.8em;
}
.nav li a::before {
content: "/";
}
.nav li a {
display: block;
padding: 2px;
background-color: var(--clear);
transition: background-color 0.5s;
}
.nav li a:hover {
color: var(--accent);
}
@media only screen and (max-width: 1200px) {
.nav .socials a {
padding: .2em 0;
display: block;
text-align: center;
}
}
@media only screen and (max-width: 1000px) {
.nav {
position: fixed;
width: 100%;
padding: 0;
z-index: 1;
top: 0;
height: 3em;
border-bottom: 3px solid var(--background-alt);
}
.nav .title {
padding-top: .6em;
padding-left: .6em;
height: 2em;
}
.nav .nav-links {
position: absolute;
top: 0;
right: 0;
padding: .6em .6em 0 0;
float: right;
text-align: right;
width: auto;
}
.nav .nav-links li {
display: inline-block;
}
.nav .nav-links li a::before {
content: "";
}
.nav .pageTitle {
display: none;
}
.nav .socials {
position: fixed;
left: .5em;
bottom: .5em;
}
}
@media only screen and (max-width: 700px) {
.nav .socials {
display: none;
}
}

View File

@ -1 +0,0 @@
440px

View File

@ -1 +0,0 @@
570px

View File

@ -1 +0,0 @@
180px

View File

@ -1 +0,0 @@
320px

View File

@ -1 +0,0 @@
0.2rem

View File

@ -1,79 +0,0 @@
.page {
position: absolute;
width: max(30vmax,500px);
left:50%;
top:0;
padding: 0px 0 50px;
padding-top: 5vh;
transform: translate(-50%, 0);
}
.page .separator {
position: relative;
background-color: var(--foreground-inactive);
width: .35em;
height: .35em;
left: 50%;
border-radius: 100%;
transform: translateX(-50%);
}
.page a {
color: var(--accent);
transition: all 0.1s;
}
.page a:hover {
color: var(--foreground);
}
.page .text-panel {
margin: 0;
margin-left: -1.5em;
padding: .2em 1.3em;
color: var(--foreground-inactive);
font-size: 1.1em;
/*font-weight: bold;*/
line-height: 1.25em;
background-color: var(--background);
border-radius: 1.5em;
width: 100%;
border-color: var(--background-alt);
border-width: 3px;
border-style: solid;
}
.page h1, h2 {
color: var(--foreground-inactive);
font-size: 1.7em;
margin-top: 1.2em;
padding: 0.2em 0.4em;
text-align: center;
}
@media (max-width: 700px) {
.page {
margin-top: 2.5em;
width: 100%;
padding: 0;
overflow: hidden;
}
.page .text-panel p {
padding: 0 .5em;
margin-right: .5em;
}
}

View File

@ -1,234 +0,0 @@
.planets {
overflow: hidden;
position: fixed;
height: 80vmax;
width: 80vmax;
right: 0;
bottom: 0;
z-index: -1;
/*background-color: var(--background);*/
background-color: transparent;
}
@media only screen and (max-width: 600px) {
.planets {
height: 200vmax;
width: 200vmax;
transform: scale(0.5) translate(50%, 50%);
}
}
.planet {
position: absolute;
border-radius: 50%;
display: inline-block;
width: var(--radius);
height: var(--radius);
}
.orbit {
position: absolute;
/*border: #orbit_thickness.css solid var(--foreground-inactive);*/
border-radius: 100%;
background-color: transparent;
z-index:-1;
}
@-webkit-keyframes orbit_mercury {
from { -webkit-transform: rotate(360deg) translateX(#or_mercury.css) rotate(360deg); }
to { -webkit-transform: rotate(0deg) translateX(#or_mercury.css) rotate(0deg); }
}
@-moz-keyframes orbit_mercury {
from { -moz-transform: rotate(360deg) translateX(#or_mercury.css) rotate(360deg); }
to { -moz-transform: rotate(0deg) translateX(#or_mercury.css) rotate(0deg); }
}
@-o-keyframes orbit_mercury {
from { -o-transform: rotate(360deg) translateX(#or_mercury.css) rotate(360deg); }
to { -o-transform: rotate(0deg) translateX(#or_mercury.css) rotate(0deg); }
}
@keyframes orbit_mercury {
from { transform: rotate(360deg) translateX(#or_mercury.css) rotate(360deg); }
to { transform: rotate(0deg) translateX(#or_mercury.css) rotate(0deg); }
}
#mercury {
--period: 4.82s;
--radius: 30px;
--color: var(--background-alt);
width: var(--radius);
height: var(--radius);
background-color: var(--color);
right: #solposx.css;
bottom: #solposy.css;
-webkit-animation: orbit_mercury var(--period) linear infinite;
-moz-animation: orbit_mercury var(--period) linear infinite;
-o-animation: orbit_mercury var(--period) linear infinite;
animation: orbit_mercury var(--period) linear infinite;
}
#mercury-orbit {
--orbit-radius: #or_mercury.css;
--planet-radius: #pr_mercury.css;
--orbit-thickness: #orbit_thickness.css;
--diameter: calc(2 * var(--orbit-radius) + (var(--planet-radius) - var(--orbit-thickness)) / 2);
right: #solposx.css;
bottom: #solposy.css;
transform: translate(#or_mercury.css, #or_mercury.css);
width: var(--diameter);
height: var(--diameter);
border: #orbit_thickness.css solid var(--background-alt);
}
@-webkit-keyframes orbit_venus {
from { -webkit-transform: rotate(360deg) translateX(#or_venus.css) rotate(360deg); }
to { -webkit-transform: rotate(0deg) translateX(#or_venus.css) rotate(0deg); }
}
@-moz-keyframes orbit_venus {
from { -moz-transform: rotate(360deg) translateX(#or_venus.css) rotate(360deg); }
to { -moz-transform: rotate(0deg) translateX(#or_venus.css) rotate(0deg); }
}
@-o-keyframes orbit_venus {
from { -o-transform: rotate(360deg) translateX(#or_venus.css) rotate(360deg); }
to { -o-transform: rotate(0deg) translateX(#or_venus.css) rotate(0deg); }
}
@keyframes orbit_venus {
from { transform: rotate(360deg) translateX(#or_venus.css) rotate(360deg); }
to { transform: rotate(0deg) translateX(#or_venus.css) rotate(0deg); }
}
#venus {
--period: 12.3s;
--radius: #pr_venus.css;
--color: var(--background-alt);
width: var(--radius);
height: var(--radius);
background-color: var(--color);
right: #solposx.css;
bottom: #solposy.css;
-webkit-animation: orbit_venus var(--period) linear infinite;
-moz-animation: orbit_venus var(--period) linear infinite;
-o-animation: orbit_venus var(--period) linear infinite;
animation: orbit_venus var(--period) linear infinite;
}
#venus-orbit {
--orbit-radius: #or_venus.css;
--planet-radius: #pr_venus.css;
--orbit-thickness: #orbit_thickness.css;
--diameter: calc(2 * var(--orbit-radius) + (var(--planet-radius) - var(--orbit-thickness)) / 2);
right: #solposx.css;
bottom: #solposy.css;
transform: translate(#or_venus.css, #or_venus.css);
width: var(--diameter);
height: var(--diameter);
border: #orbit_thickness.css solid var(--background-alt);
}
@-webkit-keyframes orbit_earth {
from { -webkit-transform: rotate(360deg) translateX(#or_earth.css) rotate(360deg); }
to { -webkit-transform: rotate(0deg) translateX(#or_earth.css) rotate(0deg); }
}
@-moz-keyframes orbit_earth {
from { -moz-transform: rotate(360deg) translateX(#or_earth.css) rotate(360deg); }
to { -moz-transform: rotate(0deg) translateX(#or_earth.css) rotate(0deg); }
}
@-o-keyframes orbit_earth {
from { -o-transform: rotate(360deg) translateX(#or_earth.css) rotate(360deg); }
to { -o-transform: rotate(0deg) translateX(#or_earth.css) rotate(0deg); }
}
@keyframes orbit_earth {
from { transform: rotate(360deg) translateX(#or_earth.css) rotate(360deg); }
to { transform: rotate(0deg) translateX(#or_earth.css) rotate(0deg); }
}
#earth {
--period: 20s;
--radius: #pr_earth.css;
--color: var(--background-alt);
width: var(--radius);
height: var(--radius);
background-color: var(--color);
right: #solposx.css;
bottom: #solposy.css;
-webkit-animation: orbit_earth var(--period) linear infinite;
-moz-animation: orbit_earth var(--period) linear infinite;
-o-animation: orbit_earth var(--period) linear infinite;
animation: orbit_earth var(--period) linear infinite;
}
#earth-orbit {
--orbit-radius: #or_earth.css;
--planet-radius: #pr_earth.css;
--orbit-thickness: #orbit_thickness.css;
--diameter: calc(2 * var(--orbit-radius) + (var(--planet-radius) - var(--orbit-thickness)) / 2);
right: #solposx.css;
bottom: #solposy.css;
transform: translate(#or_earth.css, #or_earth.css);
width: var(--diameter);
height: var(--diameter);
border: #orbit_thickness.css solid var(--background-alt);
}
@-webkit-keyframes orbit_mars {
from { -webkit-transform: rotate(360deg) translateX(#or_mars.css) rotate(360deg); }
to { -webkit-transform: rotate(0deg) translateX(#or_mars.css) rotate(0deg); }
}
@-moz-keyframes orbit_mars {
from { -moz-transform: rotate(360deg) translateX(#or_mars.css) rotate(360deg); }
to { -moz-transform: rotate(0deg) translateX(#or_mars.css) rotate(0deg); }
}
@-o-keyframes orbit_mars{
from { -o-transform: rotate(360deg) translateX(#or_mars.css) rotate(360deg); }
to { -o-transform: rotate(0deg) translateX(#or_mars.css) rotate(0deg); }
}
@keyframes orbit_mars {
from { transform: rotate(360deg) translateX(#or_mars.css) rotate(360deg); }
to { transform: rotate(0deg) translateX(#or_mars.css) rotate(0deg); }
}
#mars {
--period: 37.6s;
--radius: #pr_mars.css;
--color: var(--background-alt);
width: var(--radius);
height: var(--radius);
background-color: var(--color);
right: #solposx.css;
bottom: #solposy.css;
-webkit-animation: orbit_mars var(--period) linear infinite;
-moz-animation: orbit_mars var(--period) linear infinite;
-o-animation: orbit_mars var(--period) linear infinite;
animation: orbit_mars var(--period) linear infinite;
}
#mars-orbit {
--orbit-radius: #or_mars.css;
--planet-radius: #pr_mars.css;
--orbit-thickness: #orbit_thickness.css;
--diameter: calc(2 * var(--orbit-radius) + (var(--planet-radius) - var(--orbit-thickness)) / 2);
right: #solposx.css;
bottom: #solposy.css;
transform: translate(#or_mars.css, #or_mars.css);
width: var(--diameter);
height: var(--diameter);
border: #orbit_thickness.css solid var(--background-alt);
}

View File

@ -1 +0,0 @@
30px

View File

@ -1 +0,0 @@
30px

View File

@ -1 +0,0 @@
30px

View File

@ -1 +0,0 @@
30px

View File

@ -1,25 +0,0 @@
.socials {
position: absolute;
background-color:var(--background);
bottom: 1.6em;
}
.socials i {
font-size: 2.0em;
padding-right: .1em;
color: var(--foreground-inactive);
transition: color 0.3s;
}
.socials i:hover {
color: var(--accent);
}
.socials a {
text-decoration: none;
transition: color 0.3s;
}

View File

@ -1 +0,0 @@
0

View File

@ -1 +0,0 @@
0

View File

@ -1,24 +0,0 @@
.title {
font-size: 1em;
}
.title h1 {
padding-bottom: 0;
margin-bottom:0;
margin-top:0;
}
.title a {
transition: all 0.1s ease-in;
color: var(--foreground-active);
}
.title a:hover {
color: var(--accent);
transform: translateY(50%);
}
.pageTitle {
margin-left: -0.15em;
color: var(--foreground-inactive);
}

View File

@ -1,7 +1,4 @@
</div> </div>
#include footer.html
</div> </div>
#include planets.html #include planets.html

View File

@ -1,3 +0,0 @@
<div class="footer">
<span>© Cat Flynn 2021-2022</span>
</div>

View File

@ -6,6 +6,7 @@
<meta name="keywords" content="Cat Flynn, Ktyl, Portfolio, Showreel, Blog, Gallery"/> <!-- blog, gallery --> <meta name="keywords" content="Cat Flynn, Ktyl, Portfolio, Showreel, Blog, Gallery"/> <!-- blog, gallery -->
<link rel="canonical" href="https://ktyl.dev/"> <link rel="canonical" href="https://ktyl.dev/">
<link rel="stylesheet" href="styles.css" /> <link rel="stylesheet" href="styles.css" />
<link rel="icon" type="image/x-icon" href="favicon.ico" />
<script src="https://kit.fontawesome.com/ad50bb2e16.js" crossorigin="anonymous"></script> <script src="https://kit.fontawesome.com/ad50bb2e16.js" crossorigin="anonymous"></script>
<!-- <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> --> <!-- <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> -->

View File

@ -1,5 +1,5 @@
<ul class="nav-links"> <ul class="nav-links">
<li><a href="/about.html" class="fsText">about</a></li> <li><a href="/blog.html">blog</a></li>
<li><a href="/blog.html" class="fsText">blog</a></li> <li><a href="/gallery.html">gallery</a></li>
<li><a href="/gallery.html" class="fsText">gallery</a></li> <li><a href="/vn/books.html">vn</a></li>
</ul> </ul>

View File

@ -1,2 +1,2 @@
<div class="title"> <div class="title">
<h1 class="fsText"><a href="https://ktyl.dev/">ktyl.dev</a><span class="pageTitle"> <h1><a href="https://ktyl.dev/">ktyl.dev</a><span class="pageTitle">

View File

@ -1,65 +0,0 @@
<!doctype html>
<html>
#include header.html
<body>
<title>ktyl ~ about</title>
<div class="nav">
#include titlestart.html
/about
#include titleend.html
#include nav.html
#include socials.html
</div>
<div class="page">
<div class="pfp">
<img src="pfp.jpg"></img>
</div>
<h1>Hi, I'm Cat</h1>
<div class="text-panel">
<p>
I am an engineer/artist exploring human technology.
</p>
<div class="separator"></div>
<p>
In my day job I find novel uses for interactive, immersive and games technology for training and simulation.
I am passionate about free and open source software, and the importance of developing tools that serve everyone.
</p>
<p>
I tinker for fun and when I can, make things inspired by physics, the universe and boundaries, physical, imagined or otherwise.
I am currently most enamoured by optics, orbital mechanics and relativity.
</p>
<p>
Besides computing, I like caring for my plants, photography, and studying language, culture and philosophy.
I explore fashion, makeup, gender expression and regularly see live music.
</p>
<div class="separator"></div>
<p>
For inquiries, professional or otherwise, please <a href="mailto:me@ktyl.dev">send me an email</a>!
</p>
</div>
#include footer.html
</div>
#include planets.html
</body>
</html>

View File

@ -19,15 +19,17 @@
<h1>Just Testing</h1> <h1>Just Testing</h1>
<div class="text-panel"> <div class="text-panel">
<p><span>Hello, World! Opinions are my own. Content subject to change. Updates published to my <a href="https://ktyl.dev/blog/index.xml">RSS feed</a>!</span></p>
</div>
<div class="separator"></div>
<div class="text-panel">
<ul class="blog-index"> <ul class="blog-index">
#include blogindexlinks.html #include index.html
</ul> </ul>
</div> </div>
#include footer.html
</div> </div>
#include planets.html #include planets.html

View File

@ -14,4 +14,8 @@
--color3: #ff00ff; --color3: #ff00ff;
--color4: #ffff00; --color4: #ffff00;
--color5: #00ffff; --color5: #00ffff;
/* TODO: extract general varibles file ? */
/* Text */
--font-size: 1.4em;
} }

View File

@ -1,17 +0,0 @@
<!doctype html>
<html>
#include header.html
<body>
#include titlestart.html
/contact
#include titleend.html
#include sidebar.html
#include planets.html
</body>
</html>

View File

@ -156,9 +156,6 @@
</div> </div>
</div> </div>
#include footer.html
</div> </div>
#include planets.html #include planets.html

View File

@ -2,8 +2,11 @@
:root { :root {
--title-height: min(20vmin, 90px); --title-height: min(20vmin, 90px);
}
--orbit-thickness: 0.2em;
--sol-pos-x: 0;
--sol-pos-y: 0;
}
body { body {
font-family: sans-serif; font-family: sans-serif;
margin: 0; margin: 0;
@ -11,37 +14,836 @@ body {
background-color: var(--background); background-color: var(--background);
} }
#include title.css .title {
#include nav.css font-size: 1em;
#include page.css }
#include landing.css
#include blog.css .title h1 {
#include about.css font-size: 1.4em;
padding-bottom: 0;
margin-bottom:0;
margin-top:0;
}
.title a {
transition: all 0.1s ease-in;
color: var(--foreground-active);
}
.title a:hover {
color: var(--accent);
transform: translateY(50%);
}
.pageTitle {
margin-left: -0.15em;
color: var(--foreground-inactive);
}
.nav {
position: fixed;
width: max(11vmax, 200px);
top: 0;
bottom:0;
padding-top: 2em;
padding-left: 2em;
background-color: var(--background);
color: var(--foreground);
}
.nav-links {
position: relative;
padding-top: 2em;
padding-bottom: 1em;
padding-left:0;
width: 80%;
}
ul.nav-links {
margin-top: 0;
list-style-type: none;
}
.nav .nav-links li {
display: block;
margin-bottom: 0.8em;
}
.nav .nav-links li a {
color: var(--foreground-inactive);
font-size: 1.4em;
display: block;
}
.nav li a::before {
content: "/";
}
.nav li a {
display: block;
padding: 2px;
background-color: var(--clear);
transition: background-color 0.5s;
}
.nav li a:hover {
color: var(--accent);
}
@media only screen and (max-width: 1200px) {
.nav .socials a {
padding: .2em 0;
display: block;
text-align: center;
}
}
@media only screen and (max-width: 1000px) {
.nav {
position: fixed;
width: 100%;
padding: 0;
z-index: 1;
top: 0;
height: 3em;
border-bottom: 3px solid var(--background-alt);
}
.nav .title {
padding-top: .6em;
padding-left: .6em;
height: 2em;
}
.nav .nav-links {
position: absolute;
top: 0;
right: 0;
padding: .6em .6em 0 0;
float: right;
text-align: right;
width: auto;
}
.nav .nav-links li {
display: inline-block;
}
.nav .nav-links li a::before {
content: "";
}
.nav .pageTitle {
display: none;
}
.nav .socials {
position: fixed;
left: .5em;
bottom: .5em;
}
}
@media only screen and (max-width: 700px) {
.nav .socials {
display: none;
}
}
.page {
position: absolute;
width: max(30vmax,500px);
left:50%;
top:0;
padding: 0px 0 50px;
padding-top: 5vh;
transform: translate(-50%, 0);
}
.page .separator {
position: relative;
background-color: var(--foreground-inactive);
width: .35em;
height: .35em;
left: 50%;
border-radius: 100%;
transform: translateX(-50%);
}
.page a {
color: var(--accent);
transition: all 0.1s;
}
.page a:hover {
color: var(--foreground);
}
.page .text-panel {
margin: 0;
margin-left: -1.5em;
padding: .2em 1.3em;
color: var(--foreground-inactive);
font-size: 1.1em;
/*font-weight: bold;*/
line-height: 1.25em;
background-color: var(--background);
border-radius: 1.5em;
width: 100%;
border-color: var(--background-alt);
border-width: 3px;
border-style: solid;
}
.page h1, h2 {
color: var(--foreground-inactive);
font-size: 1.7em;
margin-top: 1.2em;
padding: 0.2em 0.4em;
text-align: center;
}
@media (max-width: 700px) {
.page {
margin-top: 2.5em;
width: 100%;
padding: 0;
overflow: hidden;
}
.page .text-panel p {
padding: 0 .5em;
margin-right: .5em;
}
}
.landing {
margin-top: 10%;
text-align: center;
}
.landing a {
color: var(--foreground-inactive);
font-size: 2em;
transform: translate(0,50%);
transition: all 0.3s;
}
.landing a:hover {
color: var(--accent);
}
.landing ul {
width: 100%;
padding: .5em 0 0;
margin: 0;
}
.landing li a {
position: relative;
font-size: 2.5em;
margin: 0 .2em;
color: var(--foreground-inactive);
}
.landing li a:hover {
transform: translateY(-10%);
color: var(--accent);
}
.landing .socials {
position: relative;
background-color: var(--clear);
top: 1em;
left: auto;
right: auto;
text-align: center;
}
.landing .socials i {
color: var(--foreground-inactive);
padding: 0 .07em;
}
@media only screen and (max-width: 600px) {
.landing.page {
position: fixed;
margin: 0;
padding: 0;
height: 100%;
}
.landing.page .socials {
top: .5em;
bottom: 0;
}
.landing.page .socials i {
font-size: 3em;
}
}
.page .blog {
}
.page .blog h1 {
font-size: 2.5em;
}
.page .blog .para-block {
color: var(--foreground-inactive);
font-size: 1.1em;
line-height: 1.25em;
background-color: var(--background);
border-color: var(--background-alt);
border-width: 3px;
border-radius: 2em;
border-style: solid;
padding: 1.0em 1.5em;
}
.page .blog .text-panel ul li {
display: block;
}
.page .blog .text-panel ul li::before {
content: "• "
}
.page .blog .code-panel {
color: var(--background);
background-color: var(--foreground);
font-size 1.5em;
line-height: 1.3em;
border-color: var(--accent);
border-width: 2px;
border-radius: 2em;
border-style: solid;
padding: 1.0em 2.0em;
margin: 2.5em -4.0em;
overflow: hidden;
}
.page .blog .code-panel pre {
overflow: scroll;
}
.page .blog .code-panel pre::-webkit-scrollbar {
height: 0;
width: 0;
background: transparent;
}
.page .blog p code {
height: 0.8em;
padding: 0.07em 0.25em;
margin: 0 0.1em;
background-color: var(--foreground-inactive);
color: var(--background);
border-radius: .3em;
}
ul.blog-index li {
display: block;
margin: .2em 0;
}
ul.blog-index li a {
color: var(--foreground-inactive);
transition: none;
text-decoration: none;
}
.blog-index li a:hover {
color: var(--accent);
}
.blog-index li a:visited {
color: var(--foreground);
}
.page ul.blog-index li a::before {
content: "• "
}
.blog-index .post-date {
padding-right: 1em;
}
.page .blog .img-panel
{
margin-top: 2em;
margin-bottom: 2em;
}
.page .blog .img-panel img {
position: relative;
width: 120%;
max-width: 100vw;
left: -10%;
border-radius: 2em;
}
@media only screen and (max-width: 700px) {
.page .blog .code-panel {
padding: 1.0em 5.0em;
}
.page .blog .img-panel img {
width: 100%;
left: 0;
border-radius: 0;
}
}
.pfp {
position: relative;
top: 3em;
left: 50%;
width: 20em;
height: 20em;
text-align: center;
overflow: hidden;
border-color: var(--background-alt);
border-style: solid;
border-width: 3px;
border-radius: 50%;
transform: translate(-50%, 0);
margin-bottom: 4em;
}
.pfp img {
position: absolute;
left: 50%;
top: 50%;
height: 100%;
width: auto;
transform: translate(-50%, -50%);
}
li { li {
display:inline; display:inline;
} }
a.fsText { a {
text-decoration: none; text-decoration: none;
color: var(--foreground);
}
.separator {
margin-top: 2em;
margin-bottom: 2em;
}
.socials {
position: absolute;
background-color:var(--background);
bottom: 1.6em;
}
.socials i {
font-size: 2.0em;
padding-right: .1em;
color: var(--foreground-inactive); color: var(--foreground-inactive);
transform: scale(1); transition: color 0.3s;
transition: background-color 0.2s, color 0.2s, transform 0.2s; }
.socials i:hover {
color: var(--accent);
} }
.fsText a { .socials a {
text-decoration: none; text-decoration: none;
color: var(--foreground); transition: color 0.3s;
} }
.fsText { .page.portfolio {
--font-size: 1.4em; padding-top: 0;
font-size: var(--font-size); width: 50%;
color: var(--foreground);
margin-left:auto;
margin-right:auto;
transform: translate(-50%,0);
}
.portfolio p {
margin: 1.2em 0 2em;
text-align: center;
border-style: none;
background-color: var(--clear);
}
.glass {
padding: 0.4em 0.6em;
color: var(--foreground-inactive);
background-color: var(--background);
opacity:0.9;
border-style:solid;
border-radius:2em;
border-color:var(--clear);
}
/* gallery img */
.wrapper {
margin-top: 1em;
width: 100%;
height: 100%;
display: grid;
grid-template-columns: 1fr 1fr 1fr;
}
.wrapper .imgHolder {
position: relative;
width: 100%;
height: 100%;
}
.wrapper img {
pointer-events: none;
box-sizing: border-box;
width: 100%;
height: 100%;
object-fit: cover;
left: auto;
right: auto;
transition: all 0.2s ease-out;
}
.wrapper .imgHolder span {
position:absolute;
top:100%;
width:100%;
transform: translateY(-50%) scale(0.6);
text-align: center;
opacity: 0;
transition: all 0.3s;
color: var(--accent);
}
.wrapper .imgHolder span p {
padding:0;
margin:0;
opacity: 1;
color: var(--background);
}
.lightTileText {
color: var(--background);
}
.wrapper .imgHolder a {
position: absolute;
top:0;
left:0;
width:100%;
height:100%;
}
@media only screen and (max-width: 600px) {
.page.portfolio {
width: 100%;
}
.wrapper .imgHolder {
overflow: hidden;
}
.wrapper .imgHolder span {
position: absolute;
top:0;
left:0;
width:100%;
height:100%;
transform: none;
}
.icon-link {
display: none;
}
.wrapper .imgHolder span i {
/*display: none;*/
}
}
.planets {
overflow: hidden;
position: fixed;
height: 80vmax;
width: 80vmax;
right: 0;
bottom: 0;
z-index: -1;
/*background-color: var(--background);*/
background-color: transparent;
}
@media only screen and (max-width: 600px) {
.planets {
height: 200vmax;
width: 200vmax;
transform: scale(0.5) translate(50%, 50%);
}
}
.planet {
position: absolute;
border-radius: 50%;
display: inline-block;
width: var(--radius);
height: var(--radius);
}
.orbit {
position: absolute;
border-radius: 100%;
background-color: transparent;
z-index:-1;
}
:root {
--mercury-orbit-radius: 180px;
--venus-orbit-radius: 320px;
--earth-orbit-radius: 440px;
--mars-orbit-radius: 570px;
--planet-radius: 30px;
}
@-webkit-keyframes orbit_mercury {
from { -webkit-transform: rotate(360deg) translateX(var(--mercury-orbit-radius)) rotate(360deg); }
to { -webkit-transform: rotate(0deg) translateX(var(--mercury-orbit-radius)) rotate(0deg); }
}
@-moz-keyframes orbit_mercury {
from { -moz-transform: rotate(360deg) translateX(var(--mercury-orbit-radius)) rotate(360deg); }
to { -moz-transform: rotate(0deg) translateX(var(--mercury-orbit-radius)) rotate(0deg); }
}
@-o-keyframes orbit_mercury {
from { -o-transform: rotate(360deg) translateX(var(--mercury-orbit-radius)) rotate(360deg); }
to { -o-transform: rotate(0deg) translateX(var(--mercury-orbit-radius)) rotate(0deg); }
}
@keyframes orbit_mercury {
from { transform: rotate(360deg) translateX(var(--mercury-orbit-radius)) rotate(360deg); }
to { transform: rotate(0deg) translateX(var(--mercury-orbit-radius)) rotate(0deg); }
}
#mercury {
--period: 4.82s;
--radius: 30px;
--color: var(--background-alt);
width: var(--radius);
height: var(--radius);
background-color: var(--color);
right: var(--sol-pos-x);
bottom: var(--sol-pos-y);
-webkit-animation: orbit_mercury var(--period) linear infinite;
-moz-animation: orbit_mercury var(--period) linear infinite;
-o-animation: orbit_mercury var(--period) linear infinite;
animation: orbit_mercury var(--period) linear infinite;
}
#mercury-orbit {
--orbit-radius: var(--mercury-orbit-radius);
--diameter: calc(2 * var(--orbit-radius) + (var(--planet-radius) - var(--orbit-thickness)) / 2);
right: var(--sol-pos-x);
bottom: var(--sol-pos-y);
transform: translate(var(--mercury-orbit-radius), var(--mercury-orbit-radius));
width: var(--diameter);
height: var(--diameter);
border: var(--orbit-thickness) solid var(--background-alt);
}
@-webkit-keyframes orbit_venus {
from { -webkit-transform: rotate(360deg) translateX(var(--venus-orbit-radius)) rotate(360deg); }
to { -webkit-transform: rotate(0deg) translateX(var(--venus-orbit-radius)) rotate(0deg); }
}
@-moz-keyframes orbit_venus {
from { -moz-transform: rotate(360deg) translateX(var(--venus-orbit-radius)) rotate(360deg); }
to { -moz-transform: rotate(0deg) translateX(var(--venus-orbit-radius)) rotate(0deg); }
}
@-o-keyframes orbit_venus {
from { -o-transform: rotate(360deg) translateX(var(--venus-orbit-radius)) rotate(360deg); }
to { -o-transform: rotate(0deg) translateX(var(--venus-orbit-radius)) rotate(0deg); }
}
@keyframes orbit_venus {
from { transform: rotate(360deg) translateX(var(--venus-orbit-radius)) rotate(360deg); }
to { transform: rotate(0deg) translateX(var(--venus-orbit-radius)) rotate(0deg); }
}
#venus {
--period: 12.3s;
--color: var(--background-alt);
width: var(--planet-radius);
height: var(--planet-radius);
background-color: var(--color);
right: var(--sol-pos-x);
bottom: var(--sol-pos-y);
-webkit-animation: orbit_venus var(--period) linear infinite;
-moz-animation: orbit_venus var(--period) linear infinite;
-o-animation: orbit_venus var(--period) linear infinite;
animation: orbit_venus var(--period) linear infinite;
}
#venus-orbit {
--diameter: calc(2 * var(--venus-orbit-radius) + (var(--planet-radius) - var(--orbit-thickness)) / 2);
right: var(--sol-pos-x);
bottom: var(--sol-pos-y);
transform: translate(var(--venus-orbit-radius), var(--venus-orbit-radius));
width: var(--diameter);
height: var(--diameter);
border: var(--orbit-thickness) solid var(--background-alt);
}
@-webkit-keyframes orbit_earth {
from { -webkit-transform: rotate(360deg) translateX(var(--earth-orbit-radius)) rotate(360deg); }
to { -webkit-transform: rotate(0deg) translateX(var(--earth-orbit-radius)) rotate(0deg); }
}
@-moz-keyframes orbit_earth {
from { -moz-transform: rotate(360deg) translateX(var(--earth-orbit-radius)) rotate(360deg); }
to { -moz-transform: rotate(0deg) translateX(var(--earth-orbit-radius)) rotate(0deg); }
}
@-o-keyframes orbit_earth {
from { -o-transform: rotate(360deg) translateX(var(--earth-orbit-radius)) rotate(360deg); }
to { -o-transform: rotate(0deg) translateX(var(--earth-orbit-radius)) rotate(0deg); }
}
@keyframes orbit_earth {
from { transform: rotate(360deg) translateX(var(--earth-orbit-radius)) rotate(360deg); }
to { transform: rotate(0deg) translateX(var(--earth-orbit-radius)) rotate(0deg); }
}
#earth {
--period: 20s;
--color: var(--background-alt);
width: var(--planet-radius);
height: var(--planet-radius);
background-color: var(--color);
right: var(--sol-pos-x);
bottom: var(--sol-pos-y);
-webkit-animation: orbit_earth var(--period) linear infinite;
-moz-animation: orbit_earth var(--period) linear infinite;
-o-animation: orbit_earth var(--period) linear infinite;
animation: orbit_earth var(--period) linear infinite;
}
#earth-orbit {
--diameter: calc(2 * var(--earth-orbit-radius) + (var(--planet-radius) - var(--orbit-thickness)) / 2);
right: var(--sol-pos-x);
bottom: var(--sol-pos-y);
transform: translate(var(--earth-orbit-radius), var(--earth-orbit-radius));
width: var(--diameter);
height: var(--diameter);
border: var(--orbit-thickness) solid var(--background-alt);
} }
#include socials.css @-webkit-keyframes orbit_mars {
#include gallery.css from { -webkit-transform: rotate(360deg) translateX(var(--mars-orbit-radius)) rotate(360deg); }
#include planets.css to { -webkit-transform: rotate(0deg) translateX(var(--mars-orbit-radius)) rotate(0deg); }
#include footer.css }
@-moz-keyframes orbit_mars {
from { -moz-transform: rotate(360deg) translateX(var(--mars-orbit-radius)) rotate(360deg); }
to { -moz-transform: rotate(0deg) translateX(var(--mars-orbit-radius)) rotate(0deg); }
}
@-o-keyframes orbit_mars{
from { -o-transform: rotate(360deg) translateX(var(--mars-orbit-radius)) rotate(360deg); }
to { -o-transform: rotate(0deg) translateX(var(--mars-orbit-radius)) rotate(0deg); }
}
@keyframes orbit_mars {
from { transform: rotate(360deg) translateX(var(--mars-orbit-radius)) rotate(360deg); }
to { transform: rotate(0deg) translateX(var(--mars-orbit-radius)) rotate(0deg); }
}
#mars {
--period: 37.6s;
--color: var(--background-alt);
width: var(--planet-radius);
height: var(--planet-radius);
background-color: var(--color);
right: var(--sol-pos-x);
bottom: var(--sol-pos-y);
-webkit-animation: orbit_mars var(--period) linear infinite;
-moz-animation: orbit_mars var(--period) linear infinite;
-o-animation: orbit_mars var(--period) linear infinite;
animation: orbit_mars var(--period) linear infinite;
}
#mars-orbit {
--diameter: calc(2 * var(--mars-orbit-radius) + (var(--planet-radius) - var(--orbit-thickness)) / 2);
right: var(--sol-pos-x);
bottom: var(--sol-pos-y);
transform: translate(var(--mars-orbit-radius), var(--mars-orbit-radius));
width: var(--diameter);
height: var(--diameter);
border: var(--orbit-thickness) solid var(--background-alt);
}
.footer {
position: relative;
}
.footer span {
position: absolute;
left: 50%;
transform: translate(-50%, 0);
color: var(--foreground-inactive);
padding: 2em;
}

24
src/vn/books.html Normal file
View File

@ -0,0 +1,24 @@
<head>
<meta charset="UTF-8"/>
<link rel="stylesheet" href="styles.css" />
</head>
<html>
<body onload="advance()">
<div class="column">
<div class=img-container>
<img id="portrait" src="img/frog.png"></img>
</div>
<div class="text-box">
<p id="text-box-content">SET_DIALOGUE_TEXT</p>
</div>
<div id="button" onclick="advance()">
<a id="button-text" class="centre" href="#">SET_BUTTON_TEXT</a>
</div>
</div>
</body>
</html>
<script src="main.js"></script>

BIN
src/vn/img/angry0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 KiB

BIN
src/vn/img/angry1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

BIN
src/vn/img/angry2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

BIN
src/vn/img/angry3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 KiB

BIN
src/vn/img/apologetic.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

BIN
src/vn/img/asleep.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

BIN
src/vn/img/blast.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

BIN
src/vn/img/books-colour.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

BIN
src/vn/img/books-messy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
src/vn/img/books-size.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

BIN
src/vn/img/bookworm.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

BIN
src/vn/img/calm.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
src/vn/img/cat.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

BIN
src/vn/img/chillin0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

BIN
src/vn/img/chillin1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
src/vn/img/chillin2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 KiB

BIN
src/vn/img/coffee.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

BIN
src/vn/img/confident.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

BIN
src/vn/img/dance.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

BIN
src/vn/img/derp.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 53 KiB

BIN
src/vn/img/derp.png_ Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 KiB

BIN
src/vn/img/determined.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

BIN
src/vn/img/disappoint.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

BIN
src/vn/img/dreamer0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

BIN
src/vn/img/excited.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

BIN
src/vn/img/fixin-time.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

BIN
src/vn/img/foood.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 374 KiB

BIN
src/vn/img/frog.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

BIN
src/vn/img/gah.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

BIN
src/vn/img/gendo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 138 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 229 KiB

BIN
src/vn/img/goofy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

BIN
src/vn/img/grin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 KiB

BIN
src/vn/img/hii.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

BIN
src/vn/img/hmph.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 KiB

BIN
src/vn/img/hopeful.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 170 KiB

BIN
src/vn/img/huh.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

BIN
src/vn/img/kt/angry0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 KiB

BIN
src/vn/img/kt/angry1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

BIN
src/vn/img/kt/angry2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

BIN
src/vn/img/kt/angry3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 KiB

BIN
src/vn/img/kt/angry4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 220 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

BIN
src/vn/img/kt/asleep.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 KiB

BIN
src/vn/img/kt/blast.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

BIN
src/vn/img/kt/bookworm.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 174 KiB

BIN
src/vn/img/kt/buzzcut.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 432 KiB

BIN
src/vn/img/kt/calm.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
src/vn/img/kt/chillin0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

BIN
src/vn/img/kt/chillin1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
src/vn/img/kt/chillin2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 255 KiB

BIN
src/vn/img/kt/coffee.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

BIN
src/vn/img/kt/confident.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Some files were not shown because too many files have changed in this diff Show More