y'know I probably should have uploaded this to gh sooner
@@ -0,0 +1,34 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Bad Request</title>
|
||||
<style>
|
||||
body {
|
||||
background-image: url("/Images/DingusGrass.jpg");
|
||||
background-color: #0f8340;
|
||||
background-position: center;
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
min-height: 100vh;
|
||||
min-height: 100svh
|
||||
}
|
||||
.center {
|
||||
background-color: white;
|
||||
width: fit-content;
|
||||
padding: 5mm;
|
||||
margin: auto;
|
||||
}
|
||||
.dense {
|
||||
margin: 1mm;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="center">
|
||||
<h1 style="color: #a00;" class="dense">Error 400: Bad Request.</h1>
|
||||
<p class="dense">
|
||||
There is an issue with your web request.<br>If possible, please verify all required name/value pairs are present in the query string of the URL.
|
||||
</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,34 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Page Not Found!</title>
|
||||
<style>
|
||||
body {
|
||||
background-image: url("/Images/DingusGrass.jpg");
|
||||
background-color: #0f8340;
|
||||
background-position: center;
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
min-height: 100vh;
|
||||
min-height: 100svh
|
||||
}
|
||||
.center {
|
||||
background-color: white;
|
||||
width: fit-content;
|
||||
padding: 5mm;
|
||||
margin: auto;
|
||||
}
|
||||
.dense {
|
||||
margin: 1mm;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="center">
|
||||
<h1 style="color: #a00;" class="dense">Error 404: Page not found.</h1>
|
||||
<p class="dense">
|
||||
The page you have requested does not exist.<br>Please verify you typed the URL correctly and try again.
|
||||
</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,32 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Too Many Requests</title>
|
||||
<style>
|
||||
body {
|
||||
background-color: #0f8340;
|
||||
background-position: center;
|
||||
background-size: cover;
|
||||
min-height: 100vh;
|
||||
min-height: 100svh
|
||||
}
|
||||
.center {
|
||||
background-color: white;
|
||||
width: fit-content;
|
||||
padding: 5mm;
|
||||
margin: auto;
|
||||
}
|
||||
.dense {
|
||||
margin: 1mm;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="center">
|
||||
<h1 style="color: #a00;" class="dense">Error 429: Too many Requests</h1>
|
||||
<p class="dense">
|
||||
You are sending too many requests. If this is caused by an error in a page, please contact the site admin.
|
||||
</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,34 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<title>Internal Server Error.</title>
|
||||
<style>
|
||||
body {
|
||||
background-image: url("/Images/DingusGrass.jpg");
|
||||
background-color: #0f8340;
|
||||
background-position: center;
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
min-height: 100vh;
|
||||
min-height: 100svh
|
||||
}
|
||||
.center {
|
||||
background-color: white;
|
||||
width: fit-content;
|
||||
padding: 5mm;
|
||||
margin: auto;
|
||||
}
|
||||
.dense {
|
||||
margin: 1mm;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="center">
|
||||
<h1 style="color: #a00;" class="dense">Error 500: Internal Server Error.</h1>
|
||||
<p class="dense">
|
||||
An error has occured on the server.<br>Please try again later. If this continues to occur, please contact the server administrator.
|
||||
</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
After Width: | Height: | Size: 2.4 MiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 1.8 MiB |
|
After Width: | Height: | Size: 156 B |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 631 B |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 3.5 MiB |
|
After Width: | Height: | Size: 1.2 MiB |
|
After Width: | Height: | Size: 3.3 MiB |
|
After Width: | Height: | Size: 40 MiB |
|
After Width: | Height: | Size: 221 B |
|
After Width: | Height: | Size: 2.1 MiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
@@ -0,0 +1,30 @@
|
||||
webroot_real = os.path.realpath(script_directory + "/webroot")
|
||||
folderPath = os.path.realpath(script_directory + "/webroot" + requestPath)
|
||||
|
||||
if not folderPath.startswith(webroot_real + os.sep) and folderPath != webroot_real:
|
||||
responseType = "403 Forbidden"
|
||||
contentType = "text/html"
|
||||
responsecontent = b"<h1>403 Forbidden</h1>"
|
||||
else:
|
||||
filesList = list(os.scandir(folderPath))
|
||||
responseType = "200 OK"
|
||||
contentType = "text/html"
|
||||
|
||||
template = open(script_directory + "/webroot/Templates/fileList.html").read()
|
||||
template = template.replace("<!--dir-->", html.escape(requestPath))
|
||||
listText = "<li>Folder: <a href=\"..\">..</a></li>"
|
||||
for i in filesList:
|
||||
temp = "File: "
|
||||
funnynameorsomethingidk = i.name
|
||||
if os.path.isdir(folderPath + "/" + funnynameorsomethingidk):
|
||||
temp = "Folder: "
|
||||
funnynameorsomethingidk += "/"
|
||||
link = requestPath + "/" + funnynameorsomethingidk
|
||||
link = link.replace("//", "/")
|
||||
if link.endswith(".py"):
|
||||
link = "/raw/?p=" + html.escape(link)
|
||||
else:
|
||||
link = html.escape(link)
|
||||
listText += ("<li>" + temp + "<a href='" + link + "'>" + html.escape(i.name) + "</a></li>")
|
||||
template = template.replace("<!--fileList-->", listText)
|
||||
responsecontent = template.encode()
|
||||
@@ -0,0 +1,11 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Directory Listing of <!--dir--></h1>
|
||||
<ul>
|
||||
<!--fileList-->
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,64 @@
|
||||
<div class="navbar no-print">
|
||||
<span class="nav-button">
|
||||
<a href="/?<!--args-->p=/">
|
||||
<div class="nav-content">
|
||||
<img src="/Images/mudkip.png" alt="Page Icon" style="height:100%; margin: 0px;">
|
||||
</div>
|
||||
</a>
|
||||
</span>
|
||||
<span class="nav-button">
|
||||
<a href="/?<!--args-->p=/Projects">
|
||||
<div class="nav-content">
|
||||
Projects
|
||||
</div>
|
||||
</a>
|
||||
<div class="dropdown-content">
|
||||
<a href="/?<!--args-->p=/Projects/wiitop/" class="nav-button">
|
||||
<div class="nav-content">
|
||||
Wiitop
|
||||
</div>
|
||||
</a>
|
||||
</div>
|
||||
</span>
|
||||
<span class="nav-button">
|
||||
<a href="/?<!--args-->p=/Contact" >
|
||||
<div class="nav-content">
|
||||
Contact
|
||||
</div>
|
||||
</a>
|
||||
</span>
|
||||
<span class="nav-button">
|
||||
<a href="/?<!--args-->p=/webring" >
|
||||
<div class="nav-content">
|
||||
Webring?
|
||||
</div>
|
||||
</a>
|
||||
</span>
|
||||
<span class="nav-button" style="float: right; margin-right:0;">
|
||||
<div class="nav-content">
|
||||
<label for="theme">Theme: </label>
|
||||
<select name="theme" id="theme" onchange="changeTheme(this.value)">
|
||||
<option value="default">Page Default</option>
|
||||
<option value="Light"<!--themeLight-->>Light</option>
|
||||
<option value="Dark"<!--themeDark-->>Dark</option>
|
||||
</select>
|
||||
</div>
|
||||
</span>
|
||||
<!--userbar-->
|
||||
</div>
|
||||
<script>
|
||||
function replaceUrlParam(url, paramName, paramValue) {
|
||||
if (paramValue == null) {
|
||||
paramValue = '';
|
||||
}
|
||||
var pattern = new RegExp('\\b('+paramName+'=).*?(&|#|$)');
|
||||
if (url.search(pattern)>=0) {
|
||||
return url.replace(pattern,'$1' + paramValue + '$2');
|
||||
}
|
||||
url = url.replace(/[?#]$/,'');
|
||||
return url + (url.indexOf('?')>0 ? '&' : '?') + paramName + '=' + paramValue;
|
||||
}
|
||||
function changeTheme(theme) {
|
||||
window.location.href = replaceUrlParam('/?<!--args-->p=<!--path-->', "theme", theme)
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,27 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<!--head-->
|
||||
</head>
|
||||
<body>
|
||||
<div class="bgimage"></div>
|
||||
<div id="grid-container">
|
||||
<header>
|
||||
<!--header-->
|
||||
</header>
|
||||
<article>
|
||||
<a id="oldmodelink" style="color: rgba(127,0,255,0);" href="/?v=old&p=<!--path-->">View in Compatibility Mode</a>
|
||||
<br>
|
||||
<!--content-->
|
||||
<br>
|
||||
</article>
|
||||
<footer class="gray">
|
||||
<p style="margin: 0px; display:flex; align-items: center; justify-content: space-between;">
|
||||
<span style="display: flex; align-items: center; margin-right:10px;">(c) 2026 Logan Joy-Koer (SuperbeeLavaman)
|
||||
<a style="margin-left: 10px" href="http://wii-linux.org/"><img style="display: block;" src="Images/wl88x31.gif" alt="Wii-Linux NOW!" class=no-print></a></span>
|
||||
<span style="float: left;">This page last updated: <!--updateddate--></span>
|
||||
</p>
|
||||
</footer>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,28 @@
|
||||
Navigation<br>
|
||||
<div>
|
||||
<a href="/?<!--args-->&p=/">
|
||||
Home Page
|
||||
</a>
|
||||
<br>
|
||||
<a href="/?<!--args-->&p=/Projects">
|
||||
Projects
|
||||
</a>
|
||||
<br>
|
||||
<div>
|
||||
<a href="/?<!--args-->&p=/Projects/wiitop/">
|
||||
Wiitop
|
||||
</a>
|
||||
<br>
|
||||
</div>
|
||||
<a href="/?<!--args-->&p=/Contact" >
|
||||
Contact Page
|
||||
</a>
|
||||
<br>
|
||||
<a href="/?<!--args-->&p=/webring" >
|
||||
Webring?
|
||||
</a>
|
||||
<br>
|
||||
<a href="/?<!--args-->returnto=<!--path-->&p=/login" >
|
||||
Login
|
||||
</a>
|
||||
</div>
|
||||
@@ -0,0 +1,22 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<!--head-->
|
||||
</head>
|
||||
<body>
|
||||
Using Compatibility Mode.<br>Click <a href="/?v=new&p=<!--path-->">here</a> for modern browsers.
|
||||
<div id="grid-container">
|
||||
<header>
|
||||
<!--header-->
|
||||
</header>
|
||||
<article>
|
||||
<br>
|
||||
<!--content-->
|
||||
<br>
|
||||
</article>
|
||||
<footer>
|
||||
<p style="margin: 0px; display:flex; align-items:center;"><span style="margin-right: 10px;">(c) 2026 Logan Joy-Koer (SuperbeeLavaman)</span><a style="display: inline-block;" href="http://wii-linux.org/"><img style="margin: 0px; display: block;" src="Images/wl88x31.gif" alt="Wii-Linux NOW!"></a></p>
|
||||
</footer>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,3 @@
|
||||
responseType = "200 OK"
|
||||
contentType = "text/plain"
|
||||
responsecontent = datetime.datetime.now().strftime("%I:%M:%S%p on %B %d, %Y").encode()
|
||||
@@ -0,0 +1,19 @@
|
||||
Title: Contact Me<br>
|
||||
Icon: /favicon.ico<br>
|
||||
Style: /styles/newLight.css<br>
|
||||
Description: Contact Info<br>
|
||||
Author: SuperbeeLavaman<br>
|
||||
Content:
|
||||
<div class="article-content-block">
|
||||
<h1>Contact Page</h1>
|
||||
<p>
|
||||
This page contains contact information, for if you want to tell me anything or ask me a question.
|
||||
</p>
|
||||
<p>
|
||||
<strong>Phone:</strong> <a href="tel:9714442780">(971) 444-2780</a><br>
|
||||
<strong>Email:</strong> <a href="mailto:loganlee.jk@outlook.com">loganlee.jk@outlook.com</a><!--, <a href="mailto:superbee@superbeelavaman.onthewifi.com">superbee@superbeelavaman.onthewifi.com</a>--><br>
|
||||
<strong>Discord:</strong> <a href="https://discordapp.com/users/763802866921242646">superbee_hashtag_3637</a><br>
|
||||
<strong>Matrix:</strong> <a href="https://matrix.to/#/%40superbeelavaman%3Asuperbeelavaman.duckdns.org">@superbeelavaman:superbeelavaman.duckdns.org</a><br>
|
||||
<strong>Nintendo Switch friend code:</strong> SW-7690-5791-7118<br>
|
||||
</p>
|
||||
</div>
|
||||
@@ -0,0 +1,19 @@
|
||||
Title: Projects<br>
|
||||
Icon: /favicon.ico<br>
|
||||
Style: /styles/newLight.css<br>
|
||||
Description: My recent projects.
|
||||
Author: SuperbeeLavaman<br>
|
||||
Content:
|
||||
<div class="article-content-block">
|
||||
<h1>Projects</h1>
|
||||
<p>This page will list recent projects and projects I'm currently working on, if I think to write about them. It will probably not have a lot of information on it.</p>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="/?<!--args-->p=/Projects/wiitop/"><b>Preparation for making the Wiitop</b></a>
|
||||
<br>As you may have noticed, I have an 88x31 button leading to Wii-Linux.org. One of the projects they have is a laptop that uses a Nintendo Wii
|
||||
as the main computer portion of the laptop. As you would expect, several modifications are expected to be performed to the Wii that is being
|
||||
used in the Wiitop.
|
||||
<br><a href="/?<!--args-->p=/Projects/wiitop/"><b>[Read More]</b></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -0,0 +1,36 @@
|
||||
Title: The Wiitop<br>
|
||||
Icon: /favicon.ico<br>
|
||||
Style: /styles/newLight.css<br>
|
||||
Description: I'm working on making the first prototype Wiitop*<br>
|
||||
Author: SuperbeeLavaman<br>
|
||||
Content:
|
||||
<div class="article-content-block">
|
||||
<h1>Preparation for making the Wiitop</h1>
|
||||
<p> As you may have noticed, I have an 88x31 button leading to Wii-Linux.org. One of the projects they have is a laptop that uses a Nintendo Wii
|
||||
as the main computer portion of the laptop. As you would expect, several modifications are expected to be performed to the Wii that is being
|
||||
used in the Wiitop.
|
||||
<br>
|
||||
<br>The Wiitop is specified to be a 14" laptop, with a trimmed Wii inside. The publically available spec is quite out of date from what has been
|
||||
talked about in the Wii-Linux server, and unfortunately while it specifies an 854x480 screen, those are effectively impossible to get. As
|
||||
<i>Lily lily lily lily</i> recommended, 720x576@50 letterboxes cleanly into 800x600, which is a slightly more common LCD resolution.
|
||||
<br>Since I'm likely to be the first person to actually construct a Wiitop, my decisions will likely have a strong effect on how the design is
|
||||
finalized. A 4:3 aspect ratio makes sense for a device that often displays 4:3 content, and a 4:3 laptop makes certain components easier to
|
||||
arrange. Since I've never done a Wii trim before, I'll be using the <a href="https://bitbuilt.net/forums/threads/the-definitive-wii-trimming-guide.198/">OMGWTF</a>
|
||||
trim. For the power supply, I will be designing a custom board that includes an STM32-based CrOS_EC, a BQ25703A charge controller, and various
|
||||
regulators, which will be controllable from Linux.
|
||||
<br>The following is written during or after the actions listed above.
|
||||
<br>
|
||||
<h2>The Wii to use</h2>
|
||||
I have an RVL-CPU-40 wii that has gone through a lot.
|
||||
<br>At one point, it was running with no shell and no heatsink, in a freezer. During that time, it was nicknamed <i>Friizer</i>, and continues to
|
||||
retain that name.
|
||||
<br><abbr title="Friizer in the freezer."><a href="/Images/projects/wiitop/friizerfreezer.jpg"><img src="/Images/projects/wiitop/friizerfreezer.jpg" alt="Friizer in the freezer" class="fitinpageplease"></a></abbr>
|
||||
<br>
|
||||
<br>Recently, I delidded the CPU and SoC of Friizer. I then decided to prepare for trimming and do research for what I would need to do to make the Wiitop.
|
||||
<br><abbr title="Friizer has been delidded."><a href="/Images/projects/wiitop/friizerdelid.jpg"><img src="/Images/projects/wiitop/friizerdelid.jpg" alt="Friizer has been delidded." class="fitinpageplease""></a></abbr>
|
||||
<br><abbr title="Marked for the OMGWTF trim"><a href="/Images/projects/wiitop/friizermarked.jpg"><img src="/Images/projects/wiitop/friizermarked.jpg" alt="Marked for the OMGWTF trim" class="fitinpageplease"></a></abbr>
|
||||
<br>
|
||||
<br>[THIS PAGE IS UNDER CONSTRUCTION]
|
||||
<br><abbr title="construction."><img src=/Images/underconstruction.gif alt="construction." class="fitinpageplease"></abbr>
|
||||
</p>
|
||||
</div>
|
||||
@@ -0,0 +1,16 @@
|
||||
Title: My Website<br>
|
||||
Icon: /favicon.ico<br>
|
||||
Style: /styles/newLight.css<br>
|
||||
Description: I've made a website. There's not much content yet.<br>
|
||||
Author: SuperbeeLavaman<br>
|
||||
Content:
|
||||
<div class="article-content-block">
|
||||
<h1>SuperbeeLavaman's Website</h1>
|
||||
<p>
|
||||
Idk what to put on my website but it exists.
|
||||
<br>
|
||||
|
||||
<br><br>
|
||||
<p style="font-family: comicsansms;">Comic Sans MS</p>
|
||||
</p>
|
||||
</div>
|
||||
@@ -0,0 +1,29 @@
|
||||
Title: Login<br>
|
||||
Icon: /favicon.ico<br>
|
||||
Style: /styles/newLight.css<br>
|
||||
Description: Login.<br>
|
||||
Author: SuperbeeLavaman<br>
|
||||
Content:
|
||||
<div class="article-content-block">
|
||||
<h1>Login</h1>
|
||||
<p><!--errortext--></p>
|
||||
<p>
|
||||
<form action="/login/">
|
||||
<table>
|
||||
<tr>
|
||||
<td><label for="username">Username: </label></td>
|
||||
<td><input type="text" name="username" id="username"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="password">Password: </label></td>
|
||||
<td><input type="password" name="password" id="password"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><!--formargs--></td>
|
||||
<td><input type="submit" name="submit" id="submit" value="Submit"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<p>No Account? <a href="/?<!--args-->p=/signup/">Sign Up.</a></p>
|
||||
</p>
|
||||
</div>
|
||||
@@ -0,0 +1,75 @@
|
||||
Title: Resume<br>
|
||||
Icon: /favicon.ico<br>
|
||||
Style: /styles/newDark.css<br>
|
||||
Description: Logan's Resume<br>
|
||||
Author: Logan Joy-Koer (SuperbeeLavaman)<br>
|
||||
Content:
|
||||
<div class="article-content-block">
|
||||
<section class="container">
|
||||
<h1>Logan Joy-Koer</h1>
|
||||
<h6 style="margin-top: 0px" class="subtitle">
|
||||
Gervais, OR |
|
||||
<a href="mailto:loganlee.jk@outlook.com">loganlee.jk@outlook.com</a> |
|
||||
<a href="tel:9714442780">(971) 444-2780</a> |<br>
|
||||
<a href="https://www.github.com/superbeelavaman">github.com/superbeelavaman</a> |
|
||||
<a href="https://superbeelavaman.duckdns.org/?p=/">https://superbeelavaman.duckdns.org</a> |<br>
|
||||
<a href="https://matrix.to/#/%40superbeelavaman%3Asuperbeelavaman.duckdns.org">@superbeelavaman:superbeelavaman.duckdns.org</a> |
|
||||
CompTIA Tech+ Certified |
|
||||
</h6>
|
||||
</section>
|
||||
<section class="container">
|
||||
<h2>Summary</h2>
|
||||
<p style="margin-top: 0px">Linux enthusiast with hands-on experience in embedded hardware, low-level software, and systems programming. Comfortable across x86, PowerPC/POWER ISA, eZ80, and ARM CPU architectures. Passionate about unusual and older hardware and making things work in environments they weren't intended to.</p>
|
||||
</section>
|
||||
<section class="container">
|
||||
<h2>Projects & Hands-On Experience</h2>
|
||||
<h3>Xbox 360 PBX Server <span class="subtitle">Personal Lab</span></h3>
|
||||
<p style="margin-top: 0px"><ul>
|
||||
<li>Runs Arch Linux (ArchPOWER) on Xbox 360 hardware</li>
|
||||
<li>Compiled and configured Asterisk 23.2.2 from source for a full home PBX system</li>
|
||||
<li>Integrated a Cisco VG224 as a SIP/FXS gateway; successfully registered all 24 extensions via chan_pjsip</li>
|
||||
<li>Set up dnsmasq for PTR resolution and managed routing across two subnets</li>
|
||||
</ul></p>
|
||||
<h3>Multiple Workstations <span class="subtitle">Personal Lab</span></h3>
|
||||
<p style="margin-top: 0px"><ul>
|
||||
<li>Deployed and Configured several workstations to conveniently perform tasks from several locations</li>
|
||||
<li>Custom-compiled Linux Kernel builds for nonstandard hardware</li>
|
||||
<li>Became familiar with several Linux distros including but not limited to Ubuntu, Arch, Adélie, Void, and more</li>
|
||||
</ul></p>
|
||||
</section>
|
||||
<section class="container">
|
||||
<h2>Prior Work Experience</h2>
|
||||
<h3>Crew Member/Cook - Domino's Pizza <span class="subtitle">Woodburn, OR | July 2024 - August 2025</span></h3>
|
||||
<ul style="margin-top: 0px;">
|
||||
<li>Prepared orders accurately with time pressure during high volume hours</li>
|
||||
<li>Handled customer service tasks including taking orders and resolving complaints both in person and over the phone</li>
|
||||
<li>Maintained food safety and cleanliness standards consistently across shifts</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="container">
|
||||
<h2>Skills</h2>
|
||||
<p style="margin-top: 0px; margin-bottom: 0px;">Operating Systems:</p>
|
||||
<ul style="margin-top: 0px;">
|
||||
<li>Arch Linux</li>
|
||||
<li>Linux Mint</li>
|
||||
<li>Debian</li>
|
||||
<li>Ubuntu</li>
|
||||
<li>Adélie</li>
|
||||
<li>Void</li>
|
||||
<li>PostMarketOS</li>
|
||||
<li>Windows 98/ME</li>
|
||||
<li>Windows XP</li>
|
||||
<li>Windows Vista/7</li>
|
||||
<li>Windows 10</li>
|
||||
</ul>
|
||||
<p>Familiar CPU Architectures: x86/AMD64, PowerPC/POWER ISA, ARM, eZ80</p>
|
||||
<p>Networking: VoIP/SIP (Asterisk, PJSIP), Cisco IOS, VLANs, NAT, dnsmasq, DNS</p>
|
||||
<p>Hardware: Embedded systems, PCB design (KiCad), Soldering</p>
|
||||
<p>Tools: Git, Vim, SSH, Nginx, Sledgehammer</p>
|
||||
<p>Languages: C, Python, Shell scripting [Bash], JavaScript, HTML, CSS</p>
|
||||
</section>
|
||||
<section class="container">
|
||||
<h2>Certifications</h2>
|
||||
<p style="margin-top: 0px;">CompTIA Tech+ (FC0-U71) - Issued May 22, 2025</p>
|
||||
</section>
|
||||
</div>
|
||||
@@ -0,0 +1,33 @@
|
||||
Title: Sign Up<br>
|
||||
Icon: /favicon.ico<br>
|
||||
Style: /styles/newLight.css<br>
|
||||
Description: Sign up.<br>
|
||||
Author: SuperbeeLavaman<br>
|
||||
Content:
|
||||
<div class="article-content-block">
|
||||
<h1>Sign Up</h1>
|
||||
<p><!--errortext--></p>
|
||||
<p>
|
||||
<form action="/signup/">
|
||||
<table>
|
||||
<tr>
|
||||
<td><label for="username">Username: </label></td>
|
||||
<td><input type="text" name="username" id="username"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="password">Password: </label></td>
|
||||
<td><input type="password" name="password" id="password"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><label for="password"> Repeat Password: </label></td>
|
||||
<td><input type="password" name="password2" id="password2"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><!--formargs--></td>
|
||||
<td><input type="submit" name="submit" id="submit" value="Submit"></td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<p>Already have an account? <a href="/?<!--args-->p=/login/">Sign In.</a></p>
|
||||
</p>
|
||||
</div>
|
||||
@@ -0,0 +1,25 @@
|
||||
Title: Webring<br>
|
||||
Icon: /favicon.ico<br>
|
||||
Style: /styles/newLight.css<br>
|
||||
Description: This site is part of a Webring. Read more here.<br>
|
||||
Author: SuperbeeLavaman, PiplupRox Productions<br>
|
||||
Content:
|
||||
<div class="article-content-block">
|
||||
<h1>This site is part of a <a href="https://en.wikipedia.org/wiki/Webring">Webring</a></h1>
|
||||
<p>
|
||||
This webring includes the Porypedia Wiki, PiplupRox Productions, and more! Using the top bar here, you can navigate to other pages on this site, and from here you can navigate to other pages in the webring.
|
||||
<br><br>
|
||||
I am part of this webring as a result of being one of 3 active community members in the Porygondoliers community, and PiplupRox was adamant about creating a webring
|
||||
<br>
|
||||
Blame him if you think this is weird.
|
||||
<br><br>
|
||||
<div style="width: min-content;">
|
||||
<a href="https://pipluprox-productions.neocities.org/webring"><img class="center" src="/Images/webring/porygondolier_community_webring.gif"></a>
|
||||
<div style="display: flex; justify-content: center;">
|
||||
<a href="https://pipluprox-productions.neocities.org/webring?action=previous"><img src="/Images/webring/porygondolier_webring_prev.gif"></a>
|
||||
<a href="https://pipluprox-productions.neocities.org/webring?action=random"><img src="/Images/webring/porygondolier_webring_rand.gif"></a>
|
||||
<a href="https://pipluprox-productions.neocities.org/webring?action=next"><img src="/Images/webring/porygondolier_webring_next.gif"></a>
|
||||
</div>
|
||||
</div>
|
||||
</p>
|
||||
</div>
|
||||
|
After Width: | Height: | Size: 4.0 KiB |
@@ -0,0 +1,143 @@
|
||||
page = ""
|
||||
args = ""
|
||||
responseType = "200 OK"
|
||||
contentType = "text/html"
|
||||
for i in argumentsDict:
|
||||
argumentsDict[i] = urllib.parse.unquote(argumentsDict[i])
|
||||
if "p" in argumentsDict:
|
||||
path = argumentsDict["p"]
|
||||
|
||||
content_real = os.path.realpath(script_directory + "/webroot/content")
|
||||
filePath = os.path.realpath(script_directory + "/webroot/content/" + path)
|
||||
if not filePath.startswith(content_real + os.sep) and filePath != content_real:
|
||||
responseType = "403 Forbidden"
|
||||
responsecontent = b"<h1>403 Forbidden</h1>"
|
||||
contentType = "text/html"
|
||||
else:
|
||||
if "v" in argumentsDict and argumentsDict["v"] in ("new", "old"):
|
||||
version = argumentsDict["v"]
|
||||
else:
|
||||
version = "new"
|
||||
|
||||
if os.path.exists(filePath):
|
||||
if os.path.isdir(filePath):
|
||||
if os.path.exists(filePath + "/" + version + "index.html"):
|
||||
filePath += ("/" + version + "index.html")
|
||||
else:
|
||||
filePath += "/index.html"
|
||||
if version == "new":
|
||||
page = open(script_directory + "/webroot/Templates/index.html").read()
|
||||
header = open(script_directory + "/webroot/Templates/header.html").read()
|
||||
elif version == "old":
|
||||
page = open(script_directory + "/webroot/Templates/oldindex.html").read()
|
||||
header = open(script_directory + "/webroot/Templates/oldheader.html").read()
|
||||
page = page.replace("<!--header-->", header)
|
||||
|
||||
# Resolve session cookie and build userbar before other replacements,
|
||||
# as the logged-out userbar contains <!--args--> and <!--path--> itself
|
||||
session_token = Cookies.get("session", "")
|
||||
if session_token:
|
||||
session_status, session_user = userManagement.validate_session(session_token)
|
||||
else:
|
||||
session_status = "fail"
|
||||
session_user = ""
|
||||
|
||||
if session_status == "success":
|
||||
pfp_base = os.path.realpath(script_directory + "/webroot/Images/profileimages")
|
||||
pfp_real_gif = os.path.realpath(script_directory + "/webroot/Images/profileimages/" + session_user + ".gif")
|
||||
pfp_real_jpg = os.path.realpath(script_directory + "/webroot/Images/profileimages/" + session_user + ".jpg")
|
||||
if pfp_real_gif.startswith(pfp_base + os.sep) and os.path.exists(pfp_real_gif):
|
||||
pfp_src = "/Images/profileimages/" + html.escape(session_user) + ".gif"
|
||||
elif pfp_real_jpg.startswith(pfp_base + os.sep) and os.path.exists(pfp_real_jpg):
|
||||
pfp_src = "/Images/profileimages/" + html.escape(session_user) + ".jpg"
|
||||
else:
|
||||
pfp_src = "/Images/default_pfp.gif"
|
||||
userbar = (
|
||||
'<span class="nav-button" style="float:right; margin-right:0;">'
|
||||
'<a href="/logout/">'
|
||||
'<div class="nav-content">Logout</div>'
|
||||
'</a></span>'
|
||||
'<span class="nav-button" style="float:right; margin-right:0;">'
|
||||
'<div class="nav-content">'
|
||||
'<img src="' + pfp_src + '" alt="Profile Picture" style="height:100%; vertical-align:middle;">'
|
||||
' Logged in as ' + html.escape(session_user) +
|
||||
'</div></span>'
|
||||
)
|
||||
else:
|
||||
userbar = (
|
||||
'<span class="nav-button" style="float:right; margin-right:0;">'
|
||||
'<a href="/?<!--args-->returnto=<!--path-->&p=/login/">'
|
||||
'<div class="nav-content">Login</div>'
|
||||
'</a></span>'
|
||||
)
|
||||
|
||||
page = page.replace("<!--userbar-->", userbar)
|
||||
|
||||
content = open(filePath).read()
|
||||
title = content.split("Title: ")[1].split("<br>\n")[0]
|
||||
icon = content.split("Icon: ")[1].split("<br>\n")[0]
|
||||
style = content.split("Style: ")[1].split("<br>\n")[0]
|
||||
description = content.split("Description: ")[1].split("<br>\n")[0]
|
||||
author = content.split("Author: ")[1].split("<br>\n")[0]
|
||||
content = content.split("Content: \n")[1]
|
||||
updateddate = get_last_modified(filePath)
|
||||
|
||||
if version == "old":
|
||||
style = "/styles/oldmain.css"
|
||||
if "theme" in argumentsDict:
|
||||
theme = argumentsDict["theme"]
|
||||
if os.path.exists(script_directory + "/webroot/styles/" + version + theme + ".css"):
|
||||
style = "/styles/" + version + theme + ".css"
|
||||
args += "theme=" + theme + "&"
|
||||
page = page.replace("<!--theme" + theme + "-->", " selected")
|
||||
page = re.sub('<!--theme.*?-->', '', page, flags=re.DOTALL)
|
||||
|
||||
|
||||
|
||||
head = "<title>" + title + """</title>
|
||||
<link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"""" + icon + """\">
|
||||
<link rel=\"icon\" type=\"image/x-icon\" href=\"""" + icon + """\">
|
||||
<link rel=\"stylesheet\" type=\"text/css\" href=\"/styles/newCommon.css\">
|
||||
<link rel=\"stylesheet\" type=\"text/css\" href=\"""" + html.escape(style) + """\">
|
||||
<meta charset=\"UTF-8\">
|
||||
<meta name=\"description\" content=\"""" + description + """\">
|
||||
<meta name=\"author\" content=\"""" + author + """\">
|
||||
<meta property=\"og:title\" content=\"""" + title + """\">
|
||||
<meta property=\"og:description\" content=\"""" + description + """\">
|
||||
<meta property=\"og:type\" content=\"website\">
|
||||
<meta property=\"twitter:title\" content=\"""" + title + """\">
|
||||
<meta property=\"twitter:description\" content=\"""" + description + """\">
|
||||
"""
|
||||
|
||||
args += "v=" + version + "&"
|
||||
|
||||
formargs = ""
|
||||
for i in argumentsDict:
|
||||
formargs += "<input type=\"hidden\" name=\"" + html.escape(i) + "\" value=\"" + html.escape(argumentsDict[i]) + "\">"
|
||||
|
||||
errortext = ""
|
||||
if "errortext" in argumentsDict:
|
||||
errortext = "<p class=\"error\">" + html.escape(argumentsDict["errortext"]) + "</p>"
|
||||
|
||||
page = page.replace("<!--content-->", content)
|
||||
page = page.replace("<!--head-->", head)
|
||||
page = page.replace("<!--path-->", urllib.parse.quote(path, safe=''))
|
||||
page = page.replace("<!--args-->", args)
|
||||
page = page.replace("<!--formargs-->", formargs)
|
||||
page = page.replace("<!--errortext-->", errortext)
|
||||
page = page.replace("<!--updateddate-->", updateddate)
|
||||
page = page.replace("\n", "")
|
||||
page = page.replace(" ", "")
|
||||
|
||||
else:
|
||||
responseType = "404 Not Found"
|
||||
fullRequestPath = script_directory + "/webroot/404.html"
|
||||
page = open(fullRequestPath).read()
|
||||
|
||||
responsecontent = page.encode()
|
||||
|
||||
else:
|
||||
responseType = "301 Moved Permanently"
|
||||
responseHeaders += "Location: /?p=/\n".encode()
|
||||
page = "<html><head><title>Redirecting...</title><meta http-equiv=\"refresh\" content=\"0; url='/?p=/'\" /></head><body><p><a href=\"/?p=/\">Redirect</a></p></body></html>"
|
||||
responsecontent = page.encode()
|
||||
@@ -0,0 +1,42 @@
|
||||
page = ""
|
||||
args = ""
|
||||
responseType = "200 OK"
|
||||
contentType = "text/html"
|
||||
|
||||
if "username" in argumentsDict and "password" in argumentsDict:
|
||||
username = urllib.parse.unquote(argumentsDict["username"])
|
||||
password = urllib.parse.unquote(argumentsDict["password"])
|
||||
|
||||
# Validate and sanitize returnpath
|
||||
returnpath = "/"
|
||||
returnto = ""
|
||||
if "returnto" in argumentsDict:
|
||||
candidate = urllib.parse.unquote(argumentsDict["returnto"])
|
||||
resolved = os.path.realpath(script_directory + "/webroot" + candidate)
|
||||
webroot_real = os.path.realpath(script_directory + "/webroot")
|
||||
if resolved.startswith(webroot_real + os.sep) or resolved == webroot_real:
|
||||
returnpath = candidate
|
||||
returnto = "&returnto=" + urllib.parse.quote(returnpath)
|
||||
|
||||
status, result = userManagement.login(username, password)
|
||||
|
||||
if status == "success":
|
||||
token = result
|
||||
responseHeaders += ("Set-Cookie: session=" + token + "; Path=/; HttpOnly; SameSite=Strict\n").encode()
|
||||
url = "/?p=" + urllib.parse.quote(returnpath)
|
||||
else:
|
||||
url = "/?p=/login/" + returnto + "&errortext=" + urllib.parse.quote("Invalid username or password.")
|
||||
|
||||
page = ("<html><head><title>Redirecting...</title>"
|
||||
"<meta http-equiv=\"refresh\" content=\"0; url='" + html.escape(url) + "'\" />"
|
||||
"</head><body><p><a href=\"" + html.escape(url) + "\">Redirect</a></p></body></html>")
|
||||
else:
|
||||
responseType = "400 Bad Request"
|
||||
fullRequestPath = script_directory + "/webroot/400.html"
|
||||
page = open(fullRequestPath).read()
|
||||
|
||||
# Clear sensitive locals
|
||||
username = ""
|
||||
password = ""
|
||||
|
||||
responsecontent = page.encode()
|
||||
@@ -0,0 +1,25 @@
|
||||
responseType = "200 OK"
|
||||
contentType = "text/html"
|
||||
|
||||
session_token = Cookies.get("session", "")
|
||||
if session_token:
|
||||
userManagement.logout(session_token)
|
||||
|
||||
responseHeaders += b"Set-Cookie: session=; Path=/; Max-Age=0; HttpOnly; SameSite=Strict\n"
|
||||
|
||||
returnpath = "/"
|
||||
if "returnto" in argumentsDict:
|
||||
candidate = urllib.parse.unquote(argumentsDict["returnto"])
|
||||
resolved = os.path.realpath(script_directory + "/webroot" + candidate)
|
||||
webroot_real = os.path.realpath(script_directory + "/webroot")
|
||||
if resolved.startswith(webroot_real + os.sep) or resolved == webroot_real:
|
||||
returnpath = candidate
|
||||
|
||||
url = "/?p=" + urllib.parse.quote(returnpath)
|
||||
responseType = "302 Found"
|
||||
responseHeaders += ("Location: " + url + "\n").encode()
|
||||
responsecontent = (
|
||||
"<html><head><title>Redirecting...</title>"
|
||||
"<meta http-equiv=\"refresh\" content=\"0; url='" + html.escape(url) + "'\" />"
|
||||
"</head><body><p><a href=\"" + html.escape(url) + "\">Redirect</a></p></body></html>"
|
||||
).encode()
|
||||
@@ -0,0 +1,45 @@
|
||||
page = ""
|
||||
responseType = "200 OK"
|
||||
contentType = "text/html"
|
||||
|
||||
if "p" in argumentsDict:
|
||||
path = urllib.parse.unquote(argumentsDict["p"])
|
||||
|
||||
webroot_real = os.path.realpath(script_directory + "/webroot")
|
||||
filePath = os.path.realpath(script_directory + "/webroot/" + path)
|
||||
if not filePath.startswith(webroot_real + os.sep) and filePath != webroot_real:
|
||||
responseType = "403 Forbidden"
|
||||
contentType = "text/html"
|
||||
responsecontent = b"<h1>403 Forbidden</h1>"
|
||||
elif os.path.exists(filePath):
|
||||
if os.path.isdir(filePath):
|
||||
filesList = list(os.scandir(filePath))
|
||||
page = open(script_directory + "/webroot/Templates/fileList.html").read()
|
||||
page = page.replace("<!--dir-->", html.escape(path))
|
||||
listText = "<li>Folder: <a href=\"/raw/?p=" + html.escape(os.path.dirname(path)) + "\">..</a></li>"
|
||||
for i in filesList:
|
||||
temp = "File: "
|
||||
if os.path.isdir(filePath + i.name):
|
||||
temp = "Folder: "
|
||||
link = path.rstrip("/") + "/" + i.name
|
||||
listText += ("<li>" + temp + "<a href=\"/raw/?p=" + html.escape(link) + "\">" + html.escape(i.name) + "</a></li>")
|
||||
page = page.replace("<!--fileList-->", listText)
|
||||
responsecontent = page.encode()
|
||||
else:
|
||||
contentType = magic.Magic(mime=True).from_file(filePath)
|
||||
if contentType in (contentTypes + ["application/x-python-code", "text/x-python"]):
|
||||
if contentType.startswith("text"):
|
||||
contentType = "text/plain"
|
||||
responsecontent = open(filePath, "rb").read()
|
||||
else:
|
||||
responseType = "415 Unsupported Media Type"
|
||||
contentType = ""
|
||||
responsecontent = b""
|
||||
else:
|
||||
responseType = "404 Not Found"
|
||||
fullRequestPath = script_directory + "/webroot/404.html"
|
||||
responsecontent = open(fullRequestPath, "rb").read()
|
||||
else:
|
||||
responseType = "400 Bad Request"
|
||||
fullRequestPath = script_directory + "/webroot/400.html"
|
||||
responsecontent = open(fullRequestPath, "rb").read()
|
||||
@@ -0,0 +1,4 @@
|
||||
<html>
|
||||
<head></head>
|
||||
<body style='background-image: url("/Images/test.png")'></body>
|
||||
</html>
|
||||
@@ -0,0 +1,66 @@
|
||||
User-agent: *
|
||||
Disallow: /
|
||||
|
||||
User-agent: Googlebot
|
||||
Disallow: /
|
||||
|
||||
User-agent: Bingbot
|
||||
Disallow: /
|
||||
|
||||
User-agent: GPTBot
|
||||
Disallow: /
|
||||
|
||||
User-agent: Claude-Web
|
||||
Disallow: /
|
||||
|
||||
User-agent: ClaudeBot
|
||||
Disallow: /
|
||||
|
||||
User-agent: CCBot
|
||||
Disallow: /
|
||||
|
||||
User-agent: FacebookBot
|
||||
Disallow: /
|
||||
|
||||
User-agent: Applebot-Extended
|
||||
Disallow: /
|
||||
|
||||
User-agent: Applebot
|
||||
Disallow: /
|
||||
|
||||
User-agent: Diffbot
|
||||
Disallow: /
|
||||
|
||||
User-agent: Googlebot-Image
|
||||
Disallow: /
|
||||
|
||||
User-agent: Googlebot-Video
|
||||
Disallow: /
|
||||
|
||||
User-agent: Slurp
|
||||
Disallow: /
|
||||
|
||||
User-agent: DuckDuckBot
|
||||
Disallow: /
|
||||
|
||||
User-agent: Baiduspider
|
||||
Disallow: /
|
||||
|
||||
User-agent: YandexBot
|
||||
Disallow: /
|
||||
|
||||
User-agent: HTTrack
|
||||
Disallow: /
|
||||
|
||||
User-agent: Jon Arbuckle
|
||||
Disallow: /robots.txt
|
||||
# trollage
|
||||
|
||||
User-agent: Garfield
|
||||
Disallow: /Lasagne/
|
||||
|
||||
User-agent: archive.org_bot
|
||||
Disallow:
|
||||
|
||||
User-agent: Engineer TF2
|
||||
Disallow: /teleporting/bread
|
||||
@@ -0,0 +1,55 @@
|
||||
page = ""
|
||||
args = ""
|
||||
responseType = "200 OK"
|
||||
contentType = "text/html"
|
||||
|
||||
if "username" in argumentsDict and "password" in argumentsDict and "password2" in argumentsDict:
|
||||
username = urllib.parse.unquote(argumentsDict["username"])
|
||||
password = urllib.parse.unquote(argumentsDict["password"])
|
||||
password2 = urllib.parse.unquote(argumentsDict["password2"])
|
||||
|
||||
# Validate and sanitize returnpath
|
||||
returnpath = "/"
|
||||
returnto = ""
|
||||
if "returnto" in argumentsDict:
|
||||
candidate = urllib.parse.unquote(argumentsDict["returnto"])
|
||||
resolved = os.path.realpath(script_directory + "/webroot" + candidate)
|
||||
webroot_real = os.path.realpath(script_directory + "/webroot")
|
||||
if resolved.startswith(webroot_real + os.sep) or resolved == webroot_real:
|
||||
returnpath = candidate
|
||||
returnto = "&returnto=" + urllib.parse.quote(returnpath)
|
||||
|
||||
error = ""
|
||||
if password != password2:
|
||||
error = "Passwords do not match."
|
||||
elif username == password:
|
||||
error = "Username cannot match password."
|
||||
|
||||
if error == "":
|
||||
status, reason = userManagement.register(username, password)
|
||||
if status == "fail":
|
||||
error = reason
|
||||
|
||||
if error == "":
|
||||
# Auto-login after successful registration
|
||||
status, token = userManagement.login(username, password)
|
||||
if status == "success":
|
||||
responseHeaders += ("Set-Cookie: session=" + token + "; Path=/; HttpOnly; SameSite=Strict\n").encode()
|
||||
url = "/?p=" + urllib.parse.quote(returnpath)
|
||||
else:
|
||||
url = "/?p=/signup/" + returnto + "&errortext=" + urllib.parse.quote(error)
|
||||
|
||||
page = ("<html><head><title>Redirecting...</title>"
|
||||
"<meta http-equiv=\"refresh\" content=\"0; url='" + html.escape(url) + "'\" />"
|
||||
"</head><body><p><a href=\"" + html.escape(url) + "\">Redirect</a></p></body></html>")
|
||||
else:
|
||||
responseType = "400 Bad Request"
|
||||
fullRequestPath = script_directory + "/webroot/400.html"
|
||||
page = open(fullRequestPath).read()
|
||||
|
||||
# Clear sensitive locals
|
||||
username = ""
|
||||
password = ""
|
||||
password2 = ""
|
||||
|
||||
responsecontent = page.encode()
|
||||
@@ -0,0 +1,189 @@
|
||||
@font-face {
|
||||
font-family: comicsansms;
|
||||
src: url(/fonts/comic.ttf);
|
||||
}
|
||||
|
||||
@supports (display: grid) {
|
||||
#oldmodelink {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.fitinpageplease {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
display: block;
|
||||
}
|
||||
|
||||
body {
|
||||
color: #f5b;
|
||||
}
|
||||
.bgimage {
|
||||
background-color: #88a;
|
||||
background-image: url("/Images/DingusSun.jpg");
|
||||
background-position: center;
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
position: fixed;
|
||||
top:-10%;
|
||||
left:-10%;
|
||||
filter: blur(8px);
|
||||
-webkit-filter: blur(8px);
|
||||
width: 120%;
|
||||
height: 130vh;
|
||||
height: 130svh;
|
||||
margin: none;
|
||||
}
|
||||
.gray {
|
||||
background-color: #333;
|
||||
color: #ccc;
|
||||
}
|
||||
footer {
|
||||
padding: 1%;
|
||||
margin: none;
|
||||
}
|
||||
header {
|
||||
position: sticky;
|
||||
top:0;
|
||||
}
|
||||
.bottomright {
|
||||
position:fixed;
|
||||
right:20;
|
||||
bottom:20;
|
||||
}
|
||||
#grid-container {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
display:grid;
|
||||
grid-template-rows: auto 1fr auto;
|
||||
grid-template-columns: 100%;
|
||||
min-height: 100vh;
|
||||
min-height: 100svh;
|
||||
}
|
||||
article {
|
||||
width: 65%;
|
||||
margin: auto;
|
||||
margin-top: 0;
|
||||
}
|
||||
.article-content-block {
|
||||
background-color: #222;
|
||||
padding: 3%;
|
||||
}
|
||||
.navbar {
|
||||
background-color: #333;
|
||||
color: #fff;
|
||||
height: 48px;
|
||||
padding:none;
|
||||
|
||||
}
|
||||
.nav-button {
|
||||
position:relative;
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
border: 2px solid #000;
|
||||
padding: 6px;
|
||||
background-color: #333;
|
||||
height: 32px;
|
||||
color: #fff;
|
||||
}
|
||||
.nav-content {
|
||||
height: 32px;
|
||||
color: #fff;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.nav-content img {
|
||||
height: 32px;
|
||||
width: 32px;
|
||||
object-fit: cover;
|
||||
margin-right: 6px;
|
||||
}
|
||||
.definition {
|
||||
cursor: help;
|
||||
text-decoration: underline;
|
||||
text-decoration-style: dotted;
|
||||
}
|
||||
.dropdown-content {
|
||||
display: none;
|
||||
position: absolute;
|
||||
margin-left: -8px;
|
||||
margin-top: 8px;
|
||||
width: max-content;
|
||||
background-color: #444;
|
||||
z-index: 1;
|
||||
border: 2px solid #000;
|
||||
}
|
||||
.nav-button a {
|
||||
text-decoration: none;
|
||||
}
|
||||
.nav-button:hover {
|
||||
background-color: #444;
|
||||
}
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
color: #b5f;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
a {
|
||||
color: #88f;
|
||||
}
|
||||
li a {
|
||||
color: #f5b;
|
||||
}
|
||||
h6 a {
|
||||
color: #b5f;
|
||||
}
|
||||
.subtitle, .subtitle * {
|
||||
font-size: 10pt;
|
||||
color: #888;
|
||||
}
|
||||
.nav-button:hover .dropdown-content {
|
||||
display: block;
|
||||
}
|
||||
.dropdown-content .nav-button {
|
||||
width: calc(100% - 16px);
|
||||
}
|
||||
.error {
|
||||
background-color: #f44;
|
||||
color: #000;
|
||||
width: fit-content;
|
||||
padding: 0.3%
|
||||
}
|
||||
.container {
|
||||
display: block;
|
||||
}
|
||||
@media print {
|
||||
.no-print, .no-print * {
|
||||
display: none !important;
|
||||
}
|
||||
article {
|
||||
width: 100%;
|
||||
margin: auto;
|
||||
margin-top: 0;
|
||||
}
|
||||
.article-content-block {
|
||||
break-inside: auto;
|
||||
}
|
||||
h2, h3 {
|
||||
break-after: avoid;
|
||||
}
|
||||
p, ul, li {
|
||||
break-inside: avoid;
|
||||
}
|
||||
#grid-container {
|
||||
display: block;
|
||||
position: static;
|
||||
min-height: unset;
|
||||
}
|
||||
.bgimage {
|
||||
display: none;
|
||||
}
|
||||
.container {
|
||||
break-inside: avoid;
|
||||
}
|
||||
footer {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,186 @@
|
||||
@font-face {
|
||||
font-family: comicsansms;
|
||||
src: url(/fonts/comic.ttf);
|
||||
}
|
||||
|
||||
@supports (display: grid) {
|
||||
#oldmodelink {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.fitinpageplease {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
display: block;
|
||||
}
|
||||
|
||||
body {
|
||||
color: #503;
|
||||
}
|
||||
.bgimage {
|
||||
background-color: #0f8340;
|
||||
background-image: url("/Images/DingusGrass.jpg");
|
||||
background-position: center;
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
position: fixed;
|
||||
top:-10%;
|
||||
left:-10%;
|
||||
filter: blur(8px);
|
||||
-webkit-filter: blur(8px);
|
||||
width: 120%;
|
||||
height: 130vh;
|
||||
height: 130svh;
|
||||
margin: none;
|
||||
}
|
||||
.gray {
|
||||
background-color: #333;
|
||||
color: #ccc;
|
||||
}
|
||||
footer {
|
||||
padding: 1%;
|
||||
margin: none;
|
||||
}
|
||||
header {
|
||||
position: sticky;
|
||||
top:0;
|
||||
}
|
||||
.bottomright {
|
||||
position:fixed;
|
||||
right:20;
|
||||
bottom:20;
|
||||
}
|
||||
#grid-container {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
display:grid;
|
||||
grid-template-rows: auto 1fr auto;
|
||||
grid-template-columns: 100%;
|
||||
min-height: 100vh;
|
||||
min-height: 100svh;
|
||||
}
|
||||
article {
|
||||
width: 65%;
|
||||
margin: auto;
|
||||
margin-top: 0;
|
||||
}
|
||||
.article-content-block {
|
||||
background-color: #ddd;
|
||||
padding: 3%;
|
||||
}
|
||||
.navbar {
|
||||
background-color: #333;
|
||||
color: #fff;
|
||||
height: 48px;
|
||||
padding:none;
|
||||
|
||||
}
|
||||
.nav-button {
|
||||
position:relative;
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
border: 2px solid #000;
|
||||
padding: 6px;
|
||||
background-color: #333;
|
||||
height: 32px;
|
||||
color: #fff;
|
||||
}
|
||||
.nav-content {
|
||||
height: 32px;
|
||||
color: #fff;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.nav-content img {
|
||||
height: 32px;
|
||||
width: 32px;
|
||||
object-fit: cover;
|
||||
margin-right: 6px;
|
||||
}
|
||||
.definition {
|
||||
cursor: help;
|
||||
text-decoration: underline;
|
||||
text-decoration-style: dotted;
|
||||
}
|
||||
.dropdown-content {
|
||||
display: none;
|
||||
position: absolute;
|
||||
margin-left: -8px;
|
||||
margin-top: 8px;
|
||||
width: max-content;
|
||||
background-color: #444;
|
||||
z-index: 1;
|
||||
border: 2px solid #000;
|
||||
}
|
||||
.nav-button a {
|
||||
text-decoration: none;
|
||||
}
|
||||
.nav-button:hover {
|
||||
background-color: #444;
|
||||
}
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
color: #305;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
h6 a {
|
||||
color: #305;
|
||||
}
|
||||
.subtitle, .subtitle * {
|
||||
font-size: 10pt;
|
||||
color: #888;
|
||||
}
|
||||
li a {
|
||||
color: #503;
|
||||
}
|
||||
.nav-button:hover .dropdown-content {
|
||||
display: block;
|
||||
}
|
||||
.dropdown-content .nav-button {
|
||||
width: calc(100% - 16px);
|
||||
}
|
||||
.error {
|
||||
background-color: #f44;
|
||||
color: #000;
|
||||
width: fit-content;
|
||||
padding: 0.3%
|
||||
}
|
||||
.container {
|
||||
display: block;
|
||||
}
|
||||
@media print {
|
||||
.no-print, .no-print * {
|
||||
display: none !important;
|
||||
}
|
||||
article {
|
||||
width: 100%;
|
||||
margin: auto;
|
||||
margin-top: 0;
|
||||
}
|
||||
.article-content-block {
|
||||
break-inside: auto;
|
||||
}
|
||||
h2, h3 {
|
||||
break-after: avoid;
|
||||
}
|
||||
p, ul, li {
|
||||
break-inside: avoid;
|
||||
}
|
||||
#grid-container {
|
||||
display: block;
|
||||
position: static;
|
||||
min-height: unset;
|
||||
}
|
||||
.bgimage {
|
||||
display: none;
|
||||
}
|
||||
.container {
|
||||
break-inside: avoid;
|
||||
}
|
||||
footer {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,179 @@
|
||||
@font-face {
|
||||
font-family: comicsansms;
|
||||
src: url(/fonts/comic.ttf);
|
||||
}
|
||||
|
||||
@supports (display: grid) {
|
||||
#oldmodelink {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.fitinpageplease {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.bgimage {
|
||||
background-position: center;
|
||||
background-size: cover;
|
||||
background-repeat: no-repeat;
|
||||
position: fixed;
|
||||
top:-10%;
|
||||
left:-10%;
|
||||
filter: blur(8px);
|
||||
-webkit-filter: blur(8px);
|
||||
width: 120%;
|
||||
height: 130vh;
|
||||
height: 130svh;
|
||||
margin: none;
|
||||
}
|
||||
.gray {
|
||||
background-color: #333;
|
||||
color: #ccc;
|
||||
}
|
||||
footer {
|
||||
padding: 1%;
|
||||
margin: none;
|
||||
}
|
||||
header {
|
||||
position: sticky;
|
||||
top:0;
|
||||
}
|
||||
.bottomright {
|
||||
position:fixed;
|
||||
right:20;
|
||||
bottom:20;
|
||||
}
|
||||
#grid-container {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
display:grid;
|
||||
grid-template-rows: auto 1fr auto;
|
||||
grid-template-columns: 100%;
|
||||
min-height: 100vh;
|
||||
min-height: 100svh;
|
||||
}
|
||||
article {
|
||||
width: 65%;
|
||||
margin: auto;
|
||||
margin-top: 0;
|
||||
min-width: 600px;
|
||||
}
|
||||
.article-content-block {
|
||||
padding: 3%;
|
||||
}
|
||||
.navbar {
|
||||
background-color: #333;
|
||||
color: #fff;
|
||||
height: 48px;
|
||||
padding:none;
|
||||
}
|
||||
.nav-button {
|
||||
position:relative;
|
||||
display: inline-block;
|
||||
vertical-align: top;
|
||||
border: 2px solid #000;
|
||||
padding: 6px;
|
||||
background-color: #333;
|
||||
height: 32px;
|
||||
color: #fff;
|
||||
}
|
||||
.nav-content {
|
||||
height: 32px;
|
||||
color: #fff;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.nav-content img {
|
||||
height: 32px;
|
||||
width: 32px;
|
||||
object-fit: cover;
|
||||
margin-right: 6px;
|
||||
}
|
||||
.definition {
|
||||
cursor: help;
|
||||
text-decoration: underline;
|
||||
text-decoration-style: dotted;
|
||||
}
|
||||
.dropdown-content {
|
||||
display: none;
|
||||
position: absolute;
|
||||
margin-left: -8px;
|
||||
margin-top: 8px;
|
||||
width: max-content;
|
||||
background-color: #444;
|
||||
z-index: 1;
|
||||
border: 2px solid #000;
|
||||
}
|
||||
.nav-button a {
|
||||
text-decoration: none;
|
||||
}
|
||||
.nav-button:hover {
|
||||
background-color: #444;
|
||||
}
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
.subtitle, .subtitle * {
|
||||
font-size: 10pt;
|
||||
color: #888;
|
||||
}
|
||||
.nav-button:hover .dropdown-content {
|
||||
display: block;
|
||||
}
|
||||
.dropdown-content .nav-button {
|
||||
width: calc(100% - 16px);
|
||||
}
|
||||
.error {
|
||||
background-color: #f44;
|
||||
color: #000;
|
||||
width: fit-content;
|
||||
padding: 0.3%;
|
||||
}
|
||||
.container {
|
||||
display: block;
|
||||
}
|
||||
@media print {
|
||||
* * {
|
||||
color: #000
|
||||
}
|
||||
.no-print, .no-print * {
|
||||
display: none !important;
|
||||
}
|
||||
article {
|
||||
width: 100%;
|
||||
margin: auto;
|
||||
margin-top: 0;
|
||||
}
|
||||
.article-content-block {
|
||||
break-inside: auto;
|
||||
}
|
||||
h2, h3 {
|
||||
break-after: avoid;
|
||||
}
|
||||
p, ul, li {
|
||||
break-inside: avoid;
|
||||
}
|
||||
#grid-container {
|
||||
display: block;
|
||||
position: static;
|
||||
min-height: unset;
|
||||
}
|
||||
.bgimage {
|
||||
display: none;
|
||||
}
|
||||
.container {
|
||||
break-inside: avoid;
|
||||
}
|
||||
footer {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
}
|
||||
.fitinpageplease {
|
||||
max-width: 50%;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
body {
|
||||
color: #f5b;
|
||||
}
|
||||
.bgimage {
|
||||
background-color: #88a;
|
||||
background-image: url("/Images/DingusSun.jpg");
|
||||
}
|
||||
.article-content-block {
|
||||
background-color: #222;
|
||||
}
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
color: #b5f;
|
||||
}
|
||||
a {
|
||||
color: #88f;
|
||||
}
|
||||
li a {
|
||||
color: #f5b;
|
||||
}
|
||||
h6 a {
|
||||
color: #b5f;
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
body {
|
||||
color: #503;
|
||||
}
|
||||
.bgimage {
|
||||
background-color: #0f8340;
|
||||
background-image: url("/Images/DingusGrass.jpg");
|
||||
}
|
||||
.article-content-block {
|
||||
background-color: #ddd;
|
||||
}
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
color: #305;
|
||||
}
|
||||
h6 a {
|
||||
color: #305;
|
||||
}
|
||||
li a {
|
||||
color: #503;
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
@font-face {
|
||||
font-family: comicsansms;
|
||||
src: url(/fonts/comic.ttf);
|
||||
}
|
||||
div {
|
||||
margin-left: 32px;
|
||||
}
|
||||
body {
|
||||
color: #503;
|
||||
}
|
||||
p {
|
||||
width: 80%;
|
||||
}
|
||||
.definition {
|
||||
cursor: help;
|
||||
text-decoration: underline;
|
||||
text-decoration-style: dotted;
|
||||
}
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
color: #305;
|
||||
}
|
||||
a {
|
||||
color: #503;
|
||||
}
|
||||
.error {
|
||||
background-color: #f44;
|
||||
color: #000;
|
||||
width: fit-content;
|
||||
padding: 0.3%
|
||||
}
|
||||