Compare commits
	
		
			8 Commits
		
	
	
		
			main
			...
			feature/ge
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 394489f4b1 | |||
| 3bf1ca0c76 | |||
| a76793e961 | |||
| 5b938fe2fa | |||
| 7f4cc152ca | |||
| 9849fff782 | |||
| 6ed995de6c | |||
| cb39047ee9 | 
| @ -18,7 +18,7 @@ steps: | ||||
| - name: build | ||||
|   image: archlinux | ||||
|   environment: | ||||
|     PYTHON_ENV: pyenv python python-pipenv python-setuptools | ||||
|     PYTHON_ENV: python python-pipenv python-setuptools | ||||
| 
 | ||||
|   commands: | ||||
|     # set up python | ||||
| @ -63,6 +63,10 @@ steps: | ||||
|     - delete_current_files="sudo -n rm -r $host_dir" | ||||
|     - deploy_new_files="sudo -n mv $${HOST} $host_dir" | ||||
| 
 | ||||
|     # archive old site | ||||
|     - ssh $host $make_backup_dir | ||||
|     - ssh $host $copy_backup_files | ||||
| 
 | ||||
|     # deploy new site | ||||
|     - rsync -rP site/* "$host:$${HOST}" | ||||
|     - ssh $host $delete_current_files | ||||
|  | ||||
							
								
								
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -4,3 +4,6 @@ | ||||
| [submodule "blog"] | ||||
| 	path = blog | ||||
| 	url = https://sauce.pizzawednes.day/ktyl/blog.git | ||||
| [submodule "src/garden/period3.xyz"] | ||||
| 	path = src/garden/period3.xyz | ||||
| 	url = git@sauce.pizzawedney.day:ktyl/period3.xyz | ||||
|  | ||||
							
								
								
									
										11
									
								
								Pipfile.lock
									
									
									
										generated
									
									
									
								
							
							
						
						| @ -1,11 +1,11 @@ | ||||
| { | ||||
|     "_meta": { | ||||
|         "hash": { | ||||
|             "sha256": "8197b62eaf2c2267235d798d625f266e606263fb3108ba131e012c8ae7814dcd" | ||||
|             "sha256": "4f4f4fc0dc77addc9a4bf6c737f31df9507ee22a83548fcff1891a4e7bc27bed" | ||||
|         }, | ||||
|         "pipfile-spec": 6, | ||||
|         "requires": { | ||||
|             "python_version": "3.11" | ||||
|             "python_version": "3.10" | ||||
|         }, | ||||
|         "sources": [ | ||||
|             { | ||||
| @ -18,12 +18,11 @@ | ||||
|     "default": { | ||||
|         "markdown": { | ||||
|             "hashes": [ | ||||
|                 "sha256:48f276f4d8cfb8ce6527c8f79e2ee29708508bf4d40aa410fbc3b4ee832c850f", | ||||
|                 "sha256:ed4f41f6daecbeeb96e576ce414c41d2d876daa9a16cb35fa8ed8c2ddfad0224" | ||||
|                 "sha256:08fb8465cffd03d10b9dd34a5c3fea908e20391a2a90b88d66362cb05beed186", | ||||
|                 "sha256:3b809086bb6efad416156e00a0da66fe47618a5d6918dd688f53f40c8e4cfeff" | ||||
|             ], | ||||
|             "index": "pypi", | ||||
|             "markers": "python_version >= '3.8'", | ||||
|             "version": "==3.6" | ||||
|             "version": "==3.4.1" | ||||
|         } | ||||
|     }, | ||||
|     "develop": {} | ||||
|  | ||||
							
								
								
									
										2
									
								
								blog
									
									
									
									
									
								
							
							
								
								
								
								
								
								
									
									
								
							
						
						| @ -1 +1 @@ | ||||
| Subproject commit 201f3d49309a4e7a873fbf6a49872ef291e776d0 | ||||
| Subproject commit 74f81581968ca42903d4532d3f0c27a19bdba89b | ||||
							
								
								
									
										
											BIN
										
									
								
								img/favicon.ico
									
									
									
									
									
								
							
							
						
						| Before Width: | Height: | Size: 1000 B | 
							
								
								
									
										41
									
								
								makefile
									
									
									
									
									
								
							
							
						
						| @ -1,3 +1,9 @@ | ||||
| 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 | ||||
| IMG_DIR			= img | ||||
| OUT_DIR			= site | ||||
| @ -9,33 +15,38 @@ BLOG_BUILD_DIR	= $(BLOG_BASE_DIR)out/html/ | ||||
| BLOG_OUT_DIR	= $(OUT_DIR)/blog | ||||
| BLOG_INDEX		= $(BLOG_BUILD_DIR)/index.html | ||||
| 
 | ||||
| VN = src/vn/ | ||||
| GARDEN_BASE_DIR 	= $(SRC_DIR)/garden/ | ||||
| GARDEN_BUILD_DIR 	= $(GARDEN_BASE_DIR)html | ||||
| 
 | ||||
| PAGES 			= $(shell find $(ROOT_DIR) -wholename "$(ROOT_DIR)*.html") | ||||
| STYLES			= $(shell find $(ROOT_DIR) -wholename "$(ROOT_DIR)*.css") | ||||
| IMAGES			= $(shell find $(IMG_DIR) -wholename "$(IMG_DIR)/*.png") | ||||
| 
 | ||||
| HTML_INCLUDES 	= $(shell find $(SRC_DIR)/inc_html -name *.html) | ||||
| CSS_INCLUDES	= $(shell find $(SRC_DIR)/inc_css -name *.css) | ||||
| 
 | ||||
| HTML_TARGETS 	= $(PAGES:$(ROOT_DIR)/%.html=$(OUT_DIR)/%.html) | ||||
| CSS_TARGETS 	= $(STYLES:$(ROOT_DIR)/%.css=$(OUT_DIR)/%.css) | ||||
| PNG_TARGETS		= $(IMG_DIR)/%.png=$(OUT_DIR)/%.png | ||||
| 
 | ||||
| all: html blog vn | $(OUT_DIR) | ||||
| 
 | ||||
| vn: $(VN) | $(OUT_DIR) | ||||
| 	cp -r $(VN) $(OUT_DIR)/vn | ||||
| all: html blog garden | $(OUT_DIR) | ||||
| 	cp -r src/garden/html $(OUT_DIR)/garden | ||||
| 
 | ||||
| html: $(HTML_TARGETS) $(CSS_TARGETS) | $(OUT_DIR) | ||||
| 	cp $(IMG_DIR)/*.ico $(OUT_DIR)/ | ||||
| 	cp $(IMG_DIR)/*.png $(OUT_DIR)/ | ||||
| 	cp $(IMG_DIR)/*.jpg $(OUT_DIR)/ | ||||
| 
 | ||||
| $(OUT_DIR)/%.html: $(ROOT_DIR)/%.html $(HTML_INCLUDES) $(BLOG_INDEX) | $(OUT_DIR) | ||||
| 	python ppp.py $< $(HTML_INCLUDES) $(BLOG_INDEX) > $@ | ||||
| deploy: | ||||
| 	cp -r $(OUT_DIR) $(SITE_NAME) | ||||
| 	rsync -rP $(SITE_NAME) $(HOST):~ | ||||
| 	rm -r $(SITE_NAME) | ||||
| 	ssh $(HOST) "sudo $(REMOTE_SCRIPT)" | ||||
| 
 | ||||
| $(OUT_DIR)/%.css: $(ROOT_DIR)/%.css | $(OUT_DIR) | ||||
| 	cp $< $@ | ||||
| $(OUT_DIR)/%.html: $(ROOT_DIR)/%.html $(HTML_INCLUDES) $(BLOG_INDEX) | $(OUT_DIR) | ||||
| 	python ppp/ppp.py $< $(HTML_INCLUDES) $(BLOG_INDEX) > $@ | ||||
| 
 | ||||
| $(OUT_DIR)/%.css: $(ROOT_DIR)/%.css $(CSS_INCLUDES) | $(OUT_DIR) | ||||
| 	python ppp/ppp.py $< $(CSS_INCLUDES) > $@ | ||||
| 
 | ||||
| $(OUT_DIR): | ||||
| 	mkdir -p $@ | ||||
| @ -50,13 +61,17 @@ blog: $(HTML_INCLUDES) $(CSS_TARGETS) | ||||
| 	make --directory $(BLOG_BASE_DIR) html | ||||
| 	cp -r $(BLOG_BUILD_DIR)/* $(BLOG_OUT_DIR) | ||||
| 	for page in `find "$(BLOG_OUT_DIR)" -wholename "*.html"`; do \
 | ||||
| 		python ppp.py $$page $(HTML_INCLUDES) > temp ; \
 | ||||
| 		pipenv run python ppp/ppp.py $$page $(HTML_INCLUDES) > temp ; \
 | ||||
| 		mv temp $$page ; \
 | ||||
| 		cp $(CSS_TARGETS) $(IMG_DIR)/*.ico `dirname $$page` ; \
 | ||||
| 		cp $(CSS_TARGETS) `dirname $$page` ; \
 | ||||
| 	done | ||||
| 
 | ||||
| garden: | ||||
| 	make --directory $(GARDEN_BASE_DIR) html | ||||
| 
 | ||||
| clean: | ||||
| 	make --directory $(GARDEN_BASE_DIR) clean | ||||
| 	make --directory $(BLOG_BASE_DIR) clean | ||||
| 	rm -rf $(OUT_DIR) | ||||
| 
 | ||||
| .PHONY: blog vn | ||||
| .PHONY: blog garden | ||||
|  | ||||
							
								
								
									
										1
									
								
								ppp
									
									
									
									
									
										Submodule
									
								
							
							
								
								
								
								
								
								
									
									
								
							
						
						| @ -0,0 +1 @@ | ||||
| Subproject commit 2253d24ad239afe2b4fe2cf53471bcc3414879cd | ||||
							
								
								
									
										83
									
								
								ppp.py
									
									
									
									
									
								
							
							
						
						| @ -1,83 +0,0 @@ | ||||
| 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) | ||||
							
								
								
									
										18
									
								
								src/garden/Makefile
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,18 @@ | ||||
| html: feed.py Makefile | ||||
| 	mkdir html | ||||
| 	cp feed.py Makefile html | ||||
| 	cp *.md html | ||||
| 
 | ||||
| clean-html: | ||||
| 	[[ -d html ]] && rm -r html | ||||
| 
 | ||||
| .PHONY: clean-html | ||||
| 
 | ||||
| feed: | ||||
| 	python feed.py `pwd` | ||||
| 
 | ||||
| rss: feed | ||||
| 
 | ||||
| clean: clean-html | ||||
| 
 | ||||
| .PHONY: feed clean | ||||
							
								
								
									
										58
									
								
								src/garden/feed.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,58 @@ | ||||
| #!/usr/bin/env python3 | ||||
| 
 | ||||
| import markdown | ||||
| import pathlib | ||||
| import sys | ||||
| import re | ||||
| import glob | ||||
| 
 | ||||
| def print_usage(): | ||||
|     print("\nusage: python feed.py ROOT\n") | ||||
|     print("\n") | ||||
|     print("\t\ROOT\tbase folder") | ||||
| 
 | ||||
| def validate(): | ||||
|     # check args for at least one file path | ||||
|     if len(sys.argv) < 2: | ||||
|         print_usage() | ||||
|         sys.exit(1) | ||||
| 
 | ||||
| validate() | ||||
| 
 | ||||
| base_folder = sys.argv[1] | ||||
| 
 | ||||
| def get_paths() -> [str]: | ||||
|     return [x for x in glob.glob(f"{base_folder}/*.md")] | ||||
| 
 | ||||
| def get_text(path): | ||||
|     with open(path) as f: | ||||
|         return f.read() | ||||
| 
 | ||||
| #def to_html(md : str) -> str: | ||||
| #    return markdown.markdown(md, extensions=["fenced_code"]) | ||||
| 
 | ||||
| def get_entry(path): | ||||
|     return get_title(get_text(path)) | ||||
| 
 | ||||
| def get_title(md): | ||||
|     return re.compile(r"^# (.+)\n").match(md).group(1) | ||||
| 
 | ||||
| def get_entries() -> [str]: | ||||
|     return "\n\n".join([get_entry(p) for p in get_paths()]) | ||||
| 
 | ||||
| def get_header() -> str: | ||||
|     return """<?xml version="1.0" encoding="utf-8" ?> | ||||
| <rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"> | ||||
| <channel> | ||||
|     <title></title> | ||||
|     <link>https://ktyl.dev/garden</link> | ||||
|     <description></description> | ||||
|     <atom:link href="https://ktyl.dev/garden/feed.xml" rel="self" type="application/rss+xml"/> | ||||
| """ | ||||
| 
 | ||||
| def get_footer() -> str: | ||||
|     return "\n</channel></rss>" | ||||
| 
 | ||||
| print(get_header()) | ||||
| print(get_entries()) | ||||
| print(get_footer()) | ||||
							
								
								
									
										15
									
								
								src/garden/feed.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,15 @@ | ||||
| 
 | ||||
| python feed.py `pwd` | ||||
| <?xml version="1.0" encoding="utf-8" ?> | ||||
| <rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"> | ||||
| <channel> | ||||
|     <title></title> | ||||
|     <link>https://ktyl.dev/garden</link> | ||||
|     <description></description> | ||||
|     <atom:link href="https://ktyl.dev/garden/feed.xml" rel="self" type="application/rss+xml"/> | ||||
| 
 | ||||
| Digital Gardens | ||||
| 
 | ||||
| RSS | ||||
| 
 | ||||
| </channel></rss> | ||||
							
								
								
									
										5
									
								
								src/garden/gardens.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,5 @@ | ||||
| # Digital Gardens | ||||
| 
 | ||||
| * Obsidian | ||||
| * Notion | ||||
| * Git | ||||
							
								
								
									
										1
									
								
								src/garden/period3.xyz
									
									
									
									
									
										Submodule
									
								
							
							
								
								
								
								
								
								
									
									
								
							
						
						| @ -0,0 +1 @@ | ||||
| Subproject commit 7801c79eb9a8b7b88445fd3b3d3cde2f71ee47d1 | ||||
							
								
								
									
										35
									
								
								src/garden/rss.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,35 @@ | ||||
| # RSS | ||||
| 
 | ||||
| Really Simple Syndication (RSS) is an ancient file format for communicating updates over the Web, and my personal favourite. | ||||
| 
 | ||||
| * [It's Time for an RSS Revival](https://www.wired.com/story/rss-readers-feedly-inoreader-old-reader/) | ||||
| 
 | ||||
| ### Stubs: | ||||
| 
 | ||||
| * my curated feeds | ||||
| * reader applications | ||||
| 
 | ||||
| ## Technical Simplicity | ||||
| 
 | ||||
| From a technical perspective, like [Gemini](gemini://gemini.circumlunar.space) [\(HTTP\)](https://gemini.circumlunar.space/) it's grokkable with a couple good reads of the specification. | ||||
| I wrote [a simple generator](https://ktyl.dev/blog/2022/6/3/rss.md)] for my blog posts, and am now working on [a simpler one](./feed.py) for the garden. | ||||
| To start with, I'd like to generate it as simply as possible, from just a directory structure, but I can already see I'd like to do more with it. | ||||
| 
 | ||||
| I work predominantly in [Git](https://git-scm.com/) repositories, which, like a directory, or a garden, is tree-based. | ||||
| My blog's feed has a chronological hierarchy, but at present it's based on manually creating and naming folders. | ||||
| It's also very much a _published_ format, rather than a living one. | ||||
| This is silly! | ||||
| Instead, I'd like to structure my feed around a Git repository, as I think it'd be a much better descriptor of activity. | ||||
| 
 | ||||
| ## Managing YouTube Subscriptions | ||||
| 
 | ||||
| There are many reasons to avoid the YouTube homepage, such as recommended videos or the accursed Shorts. | ||||
| YouTube publishes channel-specific RSS feeds, making it totally possible to circumvent its subscription system entirely - including having to make an account - and keep track of channels one enjoys with RSS feeds instead. | ||||
| Get a channel's ID: | ||||
| 
 | ||||
| 1. Go to the channel's page | ||||
| 2. Go to the About section | ||||
| 3. Share icon under Stats block | ||||
| 4. Copy channel ID | ||||
| 
 | ||||
| The channel's feed is available at `https://www.youtube.com/feeds/videos.xml?channel_id=CHANNEL_ID_HERE`. | ||||
							
								
								
									
										24
									
								
								src/inc_css/about.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,24 @@ | ||||
| .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%); | ||||
| } | ||||
							
								
								
									
										121
									
								
								src/inc_css/blog.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,121 @@ | ||||
| .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; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										18
									
								
								src/inc_css/demos.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,18 @@ | ||||
| .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; | ||||
| } | ||||
							
								
								
									
										11
									
								
								src/inc_css/footer.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,11 @@ | ||||
| .footer { | ||||
|     position: relative; | ||||
| } | ||||
| 
 | ||||
| .footer span { | ||||
|     position: absolute; | ||||
|     left: 50%; | ||||
|     transform: translate(-50%, 0); | ||||
|     color: var(--foreground-inactive); | ||||
|     padding: 2em; | ||||
| } | ||||
							
								
								
									
										112
									
								
								src/inc_css/gallery.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,112 @@ | ||||
| .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;*/ | ||||
|     } | ||||
| } | ||||
							
								
								
									
										67
									
								
								src/inc_css/landing.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,67 @@ | ||||
| .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; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										114
									
								
								src/inc_css/nav.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,114 @@ | ||||
| .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; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										1
									
								
								src/inc_css/or_earth.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1 @@ | ||||
| 440px | ||||
							
								
								
									
										1
									
								
								src/inc_css/or_mars.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1 @@ | ||||
| 570px | ||||
							
								
								
									
										1
									
								
								src/inc_css/or_mercury.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1 @@ | ||||
| 180px | ||||
							
								
								
									
										1
									
								
								src/inc_css/or_venus.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1 @@ | ||||
| 320px | ||||
							
								
								
									
										1
									
								
								src/inc_css/orbit_thickness.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1 @@ | ||||
| 0.2rem | ||||
							
								
								
									
										79
									
								
								src/inc_css/page.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,79 @@ | ||||
| .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; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										234
									
								
								src/inc_css/planets.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,234 @@ | ||||
| .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); | ||||
| } | ||||
							
								
								
									
										1
									
								
								src/inc_css/pr_earth.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1 @@ | ||||
| 30px | ||||
							
								
								
									
										1
									
								
								src/inc_css/pr_mars.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1 @@ | ||||
| 30px | ||||
							
								
								
									
										1
									
								
								src/inc_css/pr_mercury.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1 @@ | ||||
| 30px | ||||
							
								
								
									
										1
									
								
								src/inc_css/pr_venus.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1 @@ | ||||
| 30px | ||||
							
								
								
									
										25
									
								
								src/inc_css/socials.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,25 @@ | ||||
| .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; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										1
									
								
								src/inc_css/solposx.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1 @@ | ||||
| 0 | ||||
							
								
								
									
										1
									
								
								src/inc_css/solposy.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1 @@ | ||||
| 0 | ||||
							
								
								
									
										25
									
								
								src/inc_css/title.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,25 @@ | ||||
| .title { | ||||
|     font-size: 1em; | ||||
| } | ||||
| 
 | ||||
| .title h1 { | ||||
|     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); | ||||
| } | ||||
| @ -6,7 +6,6 @@ | ||||
|     <meta name="keywords" content="Cat Flynn, Ktyl, Portfolio, Showreel, Blog, Gallery"/> <!-- blog, gallery --> | ||||
|     <link rel="canonical" href="https://ktyl.dev/"> | ||||
|     <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://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> --> | ||||
|  | ||||
| @ -1,5 +1,6 @@ | ||||
| <ul class="nav-links"> | ||||
|     <li><a href="/about.html">about</a></li> | ||||
|     <li><a href="/blog.html">blog</a></li> | ||||
|     <li><a href="/gallery.html">gallery</a></li> | ||||
|     <li><a href="/vn/books.html">vn</a></li> | ||||
|     <li><a href="/garden/index.html">garden</a></li> | ||||
| </ul> | ||||
|  | ||||
							
								
								
									
										62
									
								
								src/root/about.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,62 @@ | ||||
| <!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> | ||||
| </div> | ||||
| 
 | ||||
| #include planets.html | ||||
| 
 | ||||
| </body> | ||||
| 
 | ||||
| </html> | ||||
| @ -1,4 +1,12 @@ | ||||
| :root { | ||||
|     /* Special */ | ||||
|     --background: #eee; | ||||
|     --background-alt: #b8b8b8; | ||||
|     --foreground: #444; | ||||
|     --foreground-inactive: #777; | ||||
|     --accent: #ff369a; | ||||
|     --clear: rgba(0,0,0,0); | ||||
| 
 | ||||
|     /* Colors */ | ||||
|     --color0: #0000ff; | ||||
|     --color1: #00ff00; | ||||
| @ -6,22 +14,6 @@ | ||||
|     --color3: #ff00ff; | ||||
|     --color4: #ffff00; | ||||
|     --color5: #00ffff; | ||||
|     --clear: rgba(0,0,0,0); | ||||
|     --error: #f0f; | ||||
| 
 | ||||
|     --dblue: #211953; | ||||
|     --lblue: #748FE8; | ||||
|     --lpink: #F8C8DC; | ||||
|     --pink: #eeafbd; | ||||
|     --purple: #330e39; | ||||
|     --white: var(--lpink); | ||||
| 
 | ||||
|     /* Special */ | ||||
|     --background: var(--lpink); | ||||
|     --background-alt: var(--dblue); | ||||
|     --foreground: var(--lblue); | ||||
|     --foreground-inactive: var(--dblue); | ||||
|     --accent: var(--lblue); | ||||
| 
 | ||||
|     /* TODO: extract general varibles file ? */ | ||||
|     /* Text */ | ||||
|  | ||||
							
								
								
									
										17
									
								
								src/root/contact
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,17 @@ | ||||
| <!doctype html> | ||||
| <html> | ||||
| 
 | ||||
| #include header.html | ||||
| 
 | ||||
| <body> | ||||
| 
 | ||||
| #include titlestart.html | ||||
| /contact | ||||
| #include titleend.html | ||||
| 
 | ||||
| #include sidebar.html | ||||
| #include planets.html | ||||
| 
 | ||||
| </body> | ||||
| 
 | ||||
| </html> | ||||
| @ -2,10 +2,6 @@ | ||||
| 
 | ||||
| :root { | ||||
|     --title-height: min(20vmin, 90px); | ||||
| 
 | ||||
|     --orbit-thickness: 0.2em; | ||||
|     --sol-pos-x: 0; | ||||
|     --sol-pos-y: 0; | ||||
| } | ||||
| body { | ||||
|     font-family: sans-serif; | ||||
| @ -14,444 +10,12 @@ body { | ||||
|     background-color: var(--background); | ||||
| } | ||||
| 
 | ||||
| .title { | ||||
|     font-size: 1em; | ||||
| } | ||||
| 
 | ||||
| .title h1 { | ||||
|     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(--lblue); | ||||
|     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(--lblue); | ||||
| } | ||||
| 
 | ||||
| @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(--lpink); | ||||
| } | ||||
| 
 | ||||
| .page .text-panel { | ||||
|     margin: 0; | ||||
|     margin-left: -1.5em; | ||||
|     padding: .2em 1.3em; | ||||
|     color: var(--white); | ||||
| 
 | ||||
|     font-size: 1.1em; | ||||
| 
 | ||||
|     line-height: 1.25em; | ||||
| 
 | ||||
|     background-color: var(--purple); | ||||
|     border-radius: 1.5em; | ||||
| 
 | ||||
|     width: 100%; | ||||
|     border-color: var(--clear); | ||||
|     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(--lblue); | ||||
|     transition: none; | ||||
|     text-decoration: none; | ||||
| } | ||||
| 
 | ||||
| .blog-index li a:hover { | ||||
|     color: var(--lpink); | ||||
| } | ||||
| 
 | ||||
| .blog-index li a:visited { | ||||
|     color: var(--lpink); | ||||
| } | ||||
| 
 | ||||
| .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%); | ||||
| } | ||||
| #include title.css | ||||
| #include nav.css | ||||
| #include page.css | ||||
| #include landing.css | ||||
| #include blog.css | ||||
| #include about.css | ||||
| 
 | ||||
| li { | ||||
|     display:inline; | ||||
| @ -467,381 +31,7 @@ a { | ||||
|     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); | ||||
|     transition: color 0.3s; | ||||
| } | ||||
| .socials i:hover { | ||||
|     color: var(--lblue); | ||||
| } | ||||
| 
 | ||||
| .socials a { | ||||
|     text-decoration: none; | ||||
|     transition: color 0.3s; | ||||
| } | ||||
| 
 | ||||
| .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;*/ | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| .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); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| @-webkit-keyframes orbit_mars { | ||||
|     from    { -webkit-transform: rotate(360deg) translateX(var(--mars-orbit-radius)) rotate(360deg); } | ||||
|     to      { -webkit-transform: rotate(0deg) translateX(var(--mars-orbit-radius)) rotate(0deg); } | ||||
| } | ||||
| @-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; | ||||
| } | ||||
| #include socials.css | ||||
| #include gallery.css | ||||
| #include planets.css | ||||
| #include footer.css | ||||
|  | ||||
| @ -1,24 +0,0 @@ | ||||
| <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> | ||||
| Before Width: | Height: | Size: 235 KiB | 
| Before Width: | Height: | Size: 169 KiB | 
| Before Width: | Height: | Size: 94 KiB | 
| Before Width: | Height: | Size: 251 KiB | 
| Before Width: | Height: | Size: 106 KiB | 
| Before Width: | Height: | Size: 155 KiB | 
| Before Width: | Height: | Size: 135 KiB | 
| Before Width: | Height: | Size: 107 KiB | 
| Before Width: | Height: | Size: 46 KiB | 
| Before Width: | Height: | Size: 47 KiB | 
| Before Width: | Height: | Size: 174 KiB | 
| Before Width: | Height: | Size: 60 KiB | 
| Before Width: | Height: | Size: 109 KiB | 
| Before Width: | Height: | Size: 164 KiB | 
| Before Width: | Height: | Size: 79 KiB | 
| Before Width: | Height: | Size: 255 KiB | 
| Before Width: | Height: | Size: 98 KiB | 
| Before Width: | Height: | Size: 133 KiB | 
| Before Width: | Height: | Size: 198 KiB | 
| Before Width: | Height: | Size: 53 KiB | 
| Before Width: | Height: | Size: 237 KiB | 
| Before Width: | Height: | Size: 134 KiB | 
| Before Width: | Height: | Size: 149 KiB | 
| Before Width: | Height: | Size: 66 KiB | 
| Before Width: | Height: | Size: 132 KiB | 
| Before Width: | Height: | Size: 120 KiB | 
| Before Width: | Height: | Size: 146 KiB | 
| Before Width: | Height: | Size: 374 KiB | 
| Before Width: | Height: | Size: 55 KiB | 
| Before Width: | Height: | Size: 139 KiB | 
| Before Width: | Height: | Size: 138 KiB | 
| Before Width: | Height: | Size: 229 KiB | 
| Before Width: | Height: | Size: 163 KiB | 
| Before Width: | Height: | Size: 173 KiB | 
| Before Width: | Height: | Size: 90 KiB | 
| Before Width: | Height: | Size: 190 KiB | 
| Before Width: | Height: | Size: 170 KiB | 
| Before Width: | Height: | Size: 134 KiB | 
| Before Width: | Height: | Size: 235 KiB | 
| Before Width: | Height: | Size: 169 KiB | 
| Before Width: | Height: | Size: 94 KiB | 
| Before Width: | Height: | Size: 251 KiB | 
| Before Width: | Height: | Size: 220 KiB | 
| Before Width: | Height: | Size: 106 KiB | 
| Before Width: | Height: | Size: 155 KiB | 
| Before Width: | Height: | Size: 135 KiB | 
| Before Width: | Height: | Size: 174 KiB | 
| Before Width: | Height: | Size: 432 KiB | 
| Before Width: | Height: | Size: 60 KiB | 
| Before Width: | Height: | Size: 164 KiB | 
| Before Width: | Height: | Size: 79 KiB | 
| Before Width: | Height: | Size: 255 KiB | 
| Before Width: | Height: | Size: 98 KiB | 
| Before Width: | Height: | Size: 133 KiB | 
| Before Width: | Height: | Size: 198 KiB | 
| Before Width: | Height: | Size: 53 KiB | 
| Before Width: | Height: | Size: 237 KiB |