500&404 errors
This commit is contained in:
		
							
								
								
									
										
											BIN
										
									
								
								static/content/Irken-Like-AllCaps.woff
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								static/content/Irken-Like-AllCaps.woff
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								static/content/background.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								static/content/background.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 743 KiB  | 
							
								
								
									
										36
									
								
								static/content/buttons.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								static/content/buttons.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
https://cyber.dabamos.de/88x31/88x31.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/anythingbut.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/bestdesktop.gif
 | 
			
		||||
https://kopawz.neocities.org/buttonhoard/buttonsfldr2/diagnosedwithGAY.gif
 | 
			
		||||
https://kopawz.neocities.org/indexgraphics/buttondecor/ilikecomputer.png
 | 
			
		||||
https://identity-crisis.carrd.co/assets/images/gallery04/ad4f8d52.jpg?v=4e55d939
 | 
			
		||||
https://anlucas.neocities.org/best_viewed_with_eyes.gif
 | 
			
		||||
https://anlucas.neocities.org/html_learn_it_today.gif
 | 
			
		||||
https://highway.eightyeightthirty.one/badge/5d58a8f32b007d4897db6f862a895a81674fb35f5cc3947fc66595817ca174db
 | 
			
		||||
https://cyber.dabamos.de/88x31/keep.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/js-warning.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/linuxnow2.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/nano2.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/nocookie.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/nofuckingthanks.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/nyan.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/pgp-now.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/phonechump.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/pinguonline.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/piracy.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/proxmox.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/pride.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/relax-now.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/skirt.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/steam.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/svenbutton.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/tfnow.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/vscbutton.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/reddit.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/ralseismokingadart.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/blender.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/bob.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/censor_14c.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/chrmevil.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/dark-mode.gif
 | 
			
		||||
https://cyber.dabamos.de/88x31/firefox3.gif
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								static/content/haj.gif
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								static/content/haj.gif
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 4.5 KiB  | 
							
								
								
									
										
											BIN
										
									
								
								static/content/icon.webp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								static/content/icon.webp
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 49 KiB  | 
							
								
								
									
										113
									
								
								static/css/404.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										113
									
								
								static/css/404.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,113 @@
 | 
			
		||||
canvas#snakeCanvas {
 | 
			
		||||
    margin: 15px;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    border: 2px solid var(--secondary-background-color);
 | 
			
		||||
    border-radius: 10px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
form {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-direction: column;
 | 
			
		||||
    width: min-content;
 | 
			
		||||
    gap: 1rem;
 | 
			
		||||
    padding: 15px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
form input[type="text"] {
 | 
			
		||||
    padding: 10px;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    border: 1px solid var(--secondary-background-color);
 | 
			
		||||
    border-radius: 6px;
 | 
			
		||||
    background-color: var(--secondary-background-color-but-slightly-transparent);
 | 
			
		||||
    color: var(--text-color);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
form button[type="submit"] {
 | 
			
		||||
    padding: 10px;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    border: 1px solid var(--secondary-background-color);
 | 
			
		||||
    border-radius: 6px;
 | 
			
		||||
    background-color: var(--secondary-background-color-but-slightly-transparent);
 | 
			
		||||
    color: var(--text-color);
 | 
			
		||||
    font-weight: bold;
 | 
			
		||||
    cursor: pointer;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.flex-row {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-direction: row;
 | 
			
		||||
    gap: 1rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.min-width {
 | 
			
		||||
    width: min-content;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.max-width {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#snakeLeaderboardSection {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-direction: column;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
    max-height: 272px   ;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#snakeLeaderboard {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-direction: column;
 | 
			
		||||
    list-style: none;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    overflow-y: scroll;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#snakeLeaderboard li {
 | 
			
		||||
    padding: 5px 20px;
 | 
			
		||||
    background-color: var(--secondary-background-color-but-slightly-transparent);
 | 
			
		||||
    color: var(--text-color);
 | 
			
		||||
    font-size: 1rem;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    justify-content: space-between;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#snakeLeaderboard li:nth-child(even) {
 | 
			
		||||
    background-color: var(--secondary-background-color);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
dialog {
 | 
			
		||||
    width: 90%;
 | 
			
		||||
    max-width: 500px;
 | 
			
		||||
    padding: 20px;
 | 
			
		||||
    background-color: var(--background-color);
 | 
			
		||||
    color: var(--text-color);
 | 
			
		||||
    border: 2px solid var(--secondary-background-color);
 | 
			
		||||
    border-radius: 8px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
dialog button {
 | 
			
		||||
    padding: 10px;
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    border: 2px solid var(--secondary-background-color);
 | 
			
		||||
    border-radius: 6px;
 | 
			
		||||
    background-color: var(--secondary-background-color-but-slightly-transparent);
 | 
			
		||||
    color: var(--text-color);
 | 
			
		||||
    font-weight: bold;
 | 
			
		||||
    cursor: pointer;
 | 
			
		||||
    margin-top: 10px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
dialog h2 {
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    font-size: 1.5rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
dialog p {
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    font-size: 1rem;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										8
									
								
								static/css/500.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								static/css/500.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,8 @@
 | 
			
		||||
.bluescreen {
 | 
			
		||||
    background-color: #0077D6;
 | 
			
		||||
    color: #fff;
 | 
			
		||||
    padding:40px;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-direction: column;
 | 
			
		||||
    gap: 20px;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										457
									
								
								static/css/base.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										457
									
								
								static/css/base.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,457 @@
 | 
			
		||||
@import url('https://fonts.googleapis.com/css2?family=Fredoka:wdth,wght@125,700&family=Space+Mono:ital,wght@0,400;0,700;1,400;1,700&display=swap');
 | 
			
		||||
@font-face {
 | 
			
		||||
    font-family:"Irken";
 | 
			
		||||
    src:url("/static/content/Irken-Like-AllCaps.woff") format("woff");
 | 
			
		||||
    font-weight:normal;
 | 
			
		||||
    font-style:normal;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
:root {
 | 
			
		||||
    --primary-color: #5cdd8b;
 | 
			
		||||
    --primary-color-but-slightly-transparent: #5cdd8b44;
 | 
			
		||||
    --text-color: #b1b8c0;
 | 
			
		||||
    --background-color: #020205;
 | 
			
		||||
    --secondary-background-color: #090914;
 | 
			
		||||
    --secondary-background-color-but-slightly-transparent: #09091444;
 | 
			
		||||
    --font-size: 0.5cm;
 | 
			
		||||
    --font-family: "Space Mono", "serif";
 | 
			
		||||
    --title-font: 'Roboto Mono', sans-serif;
 | 
			
		||||
    --irken-font: 'Irken';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
body {
 | 
			
		||||
    background-color: var(--background-color);
 | 
			
		||||
    background-image: url("https://blinkies.cafe/purple-stars-bg.gif");
 | 
			
		||||
    color: var(--text-color);
 | 
			
		||||
    font-size: var(--font-size);
 | 
			
		||||
    font-family: var(--font-family);
 | 
			
		||||
    display: grid;
 | 
			
		||||
    grid-template-columns: auto auto;
 | 
			
		||||
    grid-template-rows: 1fr;
 | 
			
		||||
    grid-template-areas: "main sidebar";
 | 
			
		||||
    margin: 7% auto 7% auto;
 | 
			
		||||
    gap: 1rem;
 | 
			
		||||
    justify-content: center;
 | 
			
		||||
    width: 940px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#sidebar {
 | 
			
		||||
    grid-area: sidebar;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-direction: column;
 | 
			
		||||
    gap: 1rem;
 | 
			
		||||
    width: 174px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#sidebar section {
 | 
			
		||||
    backdrop-filter: blur(2px) brightness(0.6);
 | 
			
		||||
    border: var(--secondary-background-color) 2px solid;
 | 
			
		||||
    border-radius: 10px;
 | 
			
		||||
    padding: 10px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#sidebar ul {
 | 
			
		||||
    list-style-type: none;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-direction: column;  
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#sidebar ul li {
 | 
			
		||||
    width: fit-content;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#sidebar ul li a {
 | 
			
		||||
    color: var(--text-color);
 | 
			
		||||
    text-decoration: none;
 | 
			
		||||
    font-weight: 100;
 | 
			
		||||
    transition: all 0.2s ease-in-out
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#sidebar ul li a:hover {
 | 
			
		||||
    color: var(--primary-color);
 | 
			
		||||
    font-weight: 900;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#sidebar ul li img {
 | 
			
		||||
    transition: all 0.2s ease-in-out;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#sidebar ul li img:hover {
 | 
			
		||||
    transform: scale(1.1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#sidebar h1 {
 | 
			
		||||
    font-family: var(--title-font);
 | 
			
		||||
    font-size: 1.5rem;
 | 
			
		||||
    font-weight: 900;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#sidebar h6 {
 | 
			
		||||
    font-weight: 100;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#buttons {
 | 
			
		||||
    text-align: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#buttons h1 {
 | 
			
		||||
    font-family: var(--title-font);
 | 
			
		||||
    font-size: 1.3rem;
 | 
			
		||||
    font-weight: 900;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
    text-shadow: var(--text-color) 1px 0 10px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#buttons ul {
 | 
			
		||||
    list-style-type: none;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-direction: column;
 | 
			
		||||
    margin-top: 5px;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.vsmoltext {
 | 
			
		||||
    font-size: 0.5rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
main {
 | 
			
		||||
    grid-area: main;
 | 
			
		||||
    width: 761px;
 | 
			
		||||
    height: 100%;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-direction: column;
 | 
			
		||||
    gap: 1rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
header {
 | 
			
		||||
    backdrop-filter: blur(2px) brightness(0.6);
 | 
			
		||||
    border: var(--secondary-background-color) 2px solid;
 | 
			
		||||
    border-radius: 10px;
 | 
			
		||||
    padding: 15px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
header div.row {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-direction: row;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    gap: 1.5rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
header div.column {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-direction: column;
 | 
			
		||||
    justify-content: center;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
header img {
 | 
			
		||||
    width: 9rem;
 | 
			
		||||
    height: 9rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
header h1 {
 | 
			
		||||
    font-family: var(--title-font);
 | 
			
		||||
    font-size: 5rem;
 | 
			
		||||
    font-weight: 900;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
header h2 {
 | 
			
		||||
    font-family: var(--title-font);
 | 
			
		||||
    font-size: 1.75rem;
 | 
			
		||||
    font-weight: 100;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    position: relative;
 | 
			
		||||
    top: -1rem;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
main section {
 | 
			
		||||
    backdrop-filter: blur(2px) brightness(0.6);
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-direction: column;
 | 
			
		||||
    border: var(--secondary-background-color) 2px solid;
 | 
			
		||||
    border-radius: 10px;
 | 
			
		||||
    padding: 15px;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
main section h1 {
 | 
			
		||||
    font-size: 3rem;
 | 
			
		||||
    font-weight: 900;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
main section h2 {
 | 
			
		||||
    font-size: 1.5rem;
 | 
			
		||||
    font-weight: 900;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
main section h6 {
 | 
			
		||||
    font-size: 0.7rem;
 | 
			
		||||
    font-weight: 100;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
main section p {
 | 
			
		||||
    font-size: 1rem;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
    font-weight: 300;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
main section a {
 | 
			
		||||
    color: var(--primary-color);
 | 
			
		||||
    text-decoration: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#furry {
 | 
			
		||||
    position: fixed;
 | 
			
		||||
    left: 0;
 | 
			
		||||
    top: 0;
 | 
			
		||||
    right: 0;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    opacity: 0.1;
 | 
			
		||||
    background-image: url('/static/content/background.png');
 | 
			
		||||
    background-repeat: no-repeat;
 | 
			
		||||
    background-position: 50% 0;
 | 
			
		||||
    background-size: cover;
 | 
			
		||||
    z-index: -1;
 | 
			
		||||
    display: none;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.blinkies {
 | 
			
		||||
    justify-content: center;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-direction: row;
 | 
			
		||||
    flex-wrap: wrap;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.blinkies img {
 | 
			
		||||
    width: 150px;
 | 
			
		||||
    height: 20px;
 | 
			
		||||
    transition: all 0.2s ease-in-out;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.blinkies img:hover {
 | 
			
		||||
    transform: scale(1.1) rotate(5deg);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.blinkies img:nth-child(odd):hover {
 | 
			
		||||
    transform: scale(1.1) rotate(-5deg);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
section.rowsect {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    display: grid;
 | 
			
		||||
    grid-template-columns: auto auto;
 | 
			
		||||
    gap: 1rem;
 | 
			
		||||
    backdrop-filter: none;
 | 
			
		||||
    border: none;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
section.rowsect>div {
 | 
			
		||||
    backdrop-filter: blur(2px) brightness(0.6);
 | 
			
		||||
    border: var(--secondary-background-color) 2px solid;
 | 
			
		||||
    border-radius: 10px;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.stamps {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-direction: row;
 | 
			
		||||
    flex-wrap: wrap;
 | 
			
		||||
    padding: 10px;
 | 
			
		||||
    gap: 5px;
 | 
			
		||||
    justify-content: center;
 | 
			
		||||
    align-content: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.stamps img {
 | 
			
		||||
    width: 99px;
 | 
			
		||||
    height: 56px;
 | 
			
		||||
    transition: all 0.2s ease-in-out;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.stamps img:hover {
 | 
			
		||||
    transform: scale(1.1) rotate(5deg);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.stamps img:nth-child(odd):hover {
 | 
			
		||||
    transform: scale(1.1) rotate(-5deg);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#spotify {
 | 
			
		||||
    background-image: none;
 | 
			
		||||
    backdrop-filter: blur(2px) brightness(0.6);
 | 
			
		||||
    border: var(--secondary-background-color) 2px solid;
 | 
			
		||||
    border-radius: 10px;
 | 
			
		||||
    padding: 15px;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
    background-repeat: no-repeat;
 | 
			
		||||
    background-size: contain;
 | 
			
		||||
    height: 300px;
 | 
			
		||||
    width: 300px;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-direction: column;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#spotify-title {
 | 
			
		||||
    font-size: 1.5rem;
 | 
			
		||||
    font-weight: 900;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
    mix-blend-mode: difference;
 | 
			
		||||
    color: white;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#spotify-artist {
 | 
			
		||||
    color: white;
 | 
			
		||||
    font-size: 1rem;
 | 
			
		||||
    font-weight: 900;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
    mix-blend-mode: difference;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.haj {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    filter: drop-shadow(0 0 0.5rem rgb(88, 214, 245));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.irken {
 | 
			
		||||
    font-family: var(--irken-font);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#button-collection {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-direction: row;
 | 
			
		||||
    justify-content: center;
 | 
			
		||||
    flex-wrap: wrap;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#button-collection img {
 | 
			
		||||
    transition: all 0.2s ease-in-out;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#button-collection img:hover {
 | 
			
		||||
    transform: scale(1.1) rotate(5deg);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#button-collection img:nth-child(odd):hover {
 | 
			
		||||
    transform: scale(1.1) rotate(-5deg);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#alt-nav {
 | 
			
		||||
    display: none;
 | 
			
		||||
    backdrop-filter: blur(2px) brightness(0.6);
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    border: var(--secondary-background-color) 2px solid;
 | 
			
		||||
    border-radius: 10px;
 | 
			
		||||
    padding: 15px;
 | 
			
		||||
    box-sizing: border-box;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#alt-nav ul {
 | 
			
		||||
    list-style-type: none;
 | 
			
		||||
    margin: 0;
 | 
			
		||||
    padding: 0;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-wrap: wrap;
 | 
			
		||||
    flex-direction: row;
 | 
			
		||||
    gap: 1.5rem;
 | 
			
		||||
    justify-content: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#alt-nav ul li {
 | 
			
		||||
    width: fit-content;
 | 
			
		||||
}
 | 
			
		||||
#alt-nav ul li a {
 | 
			
		||||
    color: var(--text-color);
 | 
			
		||||
    text-decoration: none;
 | 
			
		||||
    font-weight: 100;
 | 
			
		||||
    transition: all 0.2s ease-in-out
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#alt-nav ul li a:hover {
 | 
			
		||||
    color: var(--primary-color);
 | 
			
		||||
    font-weight: 900;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media screen and (max-width: 1000px) {
 | 
			
		||||
    body {
 | 
			
		||||
        background-color: var(--background-color);
 | 
			
		||||
        background-image: url("https://blinkies.cafe/purple-stars-bg.gif");
 | 
			
		||||
        color: var(--text-color);
 | 
			
		||||
        font-size: var(--font-size);
 | 
			
		||||
        font-family: var(--font-family);
 | 
			
		||||
        display: grid;
 | 
			
		||||
        grid-template-columns: auto;
 | 
			
		||||
        grid-template-rows: 1fr;
 | 
			
		||||
        grid-template-areas: "main";
 | 
			
		||||
        margin: 7% 0 7% 0;
 | 
			
		||||
        gap: 1rem;
 | 
			
		||||
        justify-content: center;
 | 
			
		||||
        width: 100%;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #sidebar {
 | 
			
		||||
        display: none;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    #alt-nav {
 | 
			
		||||
        display: block;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    main {
 | 
			
		||||
        width: 100%;
 | 
			
		||||
        box-sizing: border-box;
 | 
			
		||||
        padding: 0 1rem 0 1rem;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@media screen and (max-width: 650px) {
 | 
			
		||||
    header img {
 | 
			
		||||
        display: none;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    header div.row {
 | 
			
		||||
        justify-content: center;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    section.rowsect {
 | 
			
		||||
        width: 100%;
 | 
			
		||||
        display: flex;
 | 
			
		||||
        flex-direction: column;
 | 
			
		||||
        gap: 1rem;
 | 
			
		||||
        backdrop-filter: none;
 | 
			
		||||
        border: none;
 | 
			
		||||
        padding: 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    div#spotify {
 | 
			
		||||
        box-sizing: border-box;
 | 
			
		||||
        background-repeat: no-repeat;
 | 
			
		||||
        background-size: contain;
 | 
			
		||||
        height: 100%;
 | 
			
		||||
        width: auto;
 | 
			
		||||
        aspect-ratio: 1/1;
 | 
			
		||||
        display: flex;
 | 
			
		||||
        flex-direction: column;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										21
									
								
								static/css/cap.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								static/css/cap.css
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
cap-widget {
 | 
			
		||||
  --cap-background: var(--secondary-background-color-but-slightly-transparent);
 | 
			
		||||
  --cap-border-color: var(--secondary-background-color);
 | 
			
		||||
  --cap-border-radius: 14px;
 | 
			
		||||
  --cap-widget-height: 30px;
 | 
			
		||||
  --cap-widget-width: 230px;
 | 
			
		||||
  --cap-widget-padding: 14px;
 | 
			
		||||
  --cap-gap: 15px;
 | 
			
		||||
  --cap-color: var(--text-color);
 | 
			
		||||
  --cap-checkbox-size: 25px;
 | 
			
		||||
  --cap-checkbox-border: 1px solid var(--secondary-background-color);
 | 
			
		||||
  --cap-checkbox-border-radius: 6px;
 | 
			
		||||
  --cap-checkbox-background: none;
 | 
			
		||||
  --cap-checkbox-margin: 2px;
 | 
			
		||||
  --cap-font: "Space Mono", "serif";
 | 
			
		||||
  --cap-spinner-color: var(--primary-color);
 | 
			
		||||
  --cap-spinner-background-color: var(--secondary-background-color-but-slightly-transparent);
 | 
			
		||||
  --cap-spinner-thickness: 5px;
 | 
			
		||||
  --cap-credits-font-size: 12px;
 | 
			
		||||
  --cap-opacity-hover: 0.8;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								static/favicon.ico
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								static/favicon.ico
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 240 KiB  | 
							
								
								
									
										138
									
								
								static/js/base.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										138
									
								
								static/js/base.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,138 @@
 | 
			
		||||
const values = [
 | 
			
		||||
    "Web developer", 
 | 
			
		||||
    "Pc games enjoyer", 
 | 
			
		||||
    "Server backend survivor", 
 | 
			
		||||
    "python programmer", 
 | 
			
		||||
    "Javascript disliker",
 | 
			
		||||
    "I use Arch btw",
 | 
			
		||||
    "Owo, what's this?",
 | 
			
		||||
    "Ultimate procrastinator",
 | 
			
		||||
    "Ultrakill gaming",
 | 
			
		||||
    "00111010 00110011",
 | 
			
		||||
    "fistful of dollar",
 | 
			
		||||
    "Thy end is now!!!",
 | 
			
		||||
    "Possibly a furry",
 | 
			
		||||
    "Prepare thyself!!!",
 | 
			
		||||
    "Spegatti code master",
 | 
			
		||||
    "Ethernet cable untangler",
 | 
			
		||||
    "Caffeine addict",
 | 
			
		||||
    "I'm not a robot ☑",
 | 
			
		||||
    "Loud Music enjoyer",
 | 
			
		||||
    "part time femboy :<",
 | 
			
		||||
];
 | 
			
		||||
var direction = 1;
 | 
			
		||||
var text = "";
 | 
			
		||||
var speed = 100; 
 | 
			
		||||
var selectedValue = 0;
 | 
			
		||||
var currentValueIndex = 0;
 | 
			
		||||
var pause = false;
 | 
			
		||||
 | 
			
		||||
function randomValue() {
 | 
			
		||||
    selectedValue = Math.floor(Math.random() * values.length);
 | 
			
		||||
    currentValueIndex = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function type() {
 | 
			
		||||
    if (direction == 1) {
 | 
			
		||||
        if (currentValueIndex < values[selectedValue].length) {
 | 
			
		||||
            text += values[selectedValue][currentValueIndex];
 | 
			
		||||
            currentValueIndex++;
 | 
			
		||||
        } else {
 | 
			
		||||
            direction = -1;
 | 
			
		||||
            pause = true;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        if (currentValueIndex > 0) {
 | 
			
		||||
            text = text.slice(0, -1);
 | 
			
		||||
            currentValueIndex--;
 | 
			
		||||
        } else {
 | 
			
		||||
            direction = 1;
 | 
			
		||||
            randomValue();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function typing() {
 | 
			
		||||
    type();
 | 
			
		||||
    document.getElementById("typing").innerHTML = "$ " + text;
 | 
			
		||||
    if (direction == 1) {
 | 
			
		||||
        speed = 80 + Math.random() * 100;
 | 
			
		||||
    } else {
 | 
			
		||||
        speed = 60 + (Math.random() * 100) / 2;
 | 
			
		||||
    }
 | 
			
		||||
    if (!pause) {
 | 
			
		||||
        setTimeout(typing, speed);
 | 
			
		||||
    } else {
 | 
			
		||||
        setTimeout(typing, 500);
 | 
			
		||||
        pause = false;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
typing();
 | 
			
		||||
 | 
			
		||||
// HIDDEN STUFF (shh don't tell anyone >:3)
 | 
			
		||||
 | 
			
		||||
var last5Chars = "";
 | 
			
		||||
 | 
			
		||||
document.addEventListener('keydown', function(event) {
 | 
			
		||||
    last5Chars += event.key;
 | 
			
		||||
    if (last5Chars == "furry") {
 | 
			
		||||
        console.log("owo, whats this?");
 | 
			
		||||
        document.getElementById('furry').style.display = 'block';
 | 
			
		||||
    }
 | 
			
		||||
    if (last5Chars == "irken") {
 | 
			
		||||
        console.log("doom doom doom!");
 | 
			
		||||
        document.querySelector(":root").style.setProperty('--font-family', 'Irken');
 | 
			
		||||
        document.querySelector(":root").style.setProperty('--title-font', '1.5em');
 | 
			
		||||
    }
 | 
			
		||||
    while (last5Chars.length >= 5) {
 | 
			
		||||
        last5Chars = last5Chars.slice(1);
 | 
			
		||||
    }
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
// Spotify API
 | 
			
		||||
 | 
			
		||||
function getSpotify() {
 | 
			
		||||
    fetch('https://api.alfieking.dev/spotify/nowplaying/xz02oolstlvwxqu1pfcua9exz').then(response => {
 | 
			
		||||
        return response.json();
 | 
			
		||||
    }).then(data => {
 | 
			
		||||
        if (data.item == null) {
 | 
			
		||||
            document.getElementById('spotify').style.backgroundImage = "none";
 | 
			
		||||
            document.getElementById('spotify-title').innerHTML = "Spotify is not playing anything";
 | 
			
		||||
            document.getElementById('spotify-artist').innerHTML = ":(";
 | 
			
		||||
            document.getElementById('spotify-link').href = "https://open.spotify.com/";
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        document.getElementById('spotify').style.backgroundImage = "url(" + data.item.album.images[0].url + ")";
 | 
			
		||||
        document.getElementById('spotify-title').innerHTML = data.item.name;
 | 
			
		||||
        document.getElementById('spotify-artist').innerHTML = data.item.artists[0].name;
 | 
			
		||||
        document.getElementById('spotify-link').href = data.item.external_urls.spotify;
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if (document.getElementById('spotify')) {
 | 
			
		||||
    getSpotify();
 | 
			
		||||
    setInterval(getSpotify, 15000);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// load buttons
 | 
			
		||||
 | 
			
		||||
function loadButtons() {
 | 
			
		||||
    fetch('/static/content/buttons.txt').then(response => {
 | 
			
		||||
        return response.text();
 | 
			
		||||
    }).then(data => {
 | 
			
		||||
        container = document.getElementById('button-collection');
 | 
			
		||||
        for (let line of data.split('\n')) {
 | 
			
		||||
            if (line == "") {
 | 
			
		||||
                continue;
 | 
			
		||||
            }
 | 
			
		||||
            let img = document.createElement('img');
 | 
			
		||||
            img.src = line;
 | 
			
		||||
            container.appendChild(img);
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
if (document.getElementById('button-collection')) {
 | 
			
		||||
    loadButtons();
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										174
									
								
								static/js/snake.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										174
									
								
								static/js/snake.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,174 @@
 | 
			
		||||
const canvas = document.getElementById('snakeCanvas');
 | 
			
		||||
const ctx = canvas.getContext('2d');
 | 
			
		||||
 | 
			
		||||
const gridSize = 20;
 | 
			
		||||
const tileSize = 100;
 | 
			
		||||
const snakeSize = 60;
 | 
			
		||||
const foodSize = 80;
 | 
			
		||||
canvas.width = gridSize * tileSize;
 | 
			
		||||
canvas.height = gridSize * tileSize;
 | 
			
		||||
 | 
			
		||||
let snake = [{ x: 10, y: 10 }, { x: 10, y: 11 }, { x: 10, y: 12 }];
 | 
			
		||||
let direction = { x: 0, y: 0 };
 | 
			
		||||
let food = { x: Math.floor(Math.random() * gridSize), y: Math.floor(Math.random() * gridSize) };
 | 
			
		||||
let score = 0;
 | 
			
		||||
let gameOver = false;
 | 
			
		||||
 | 
			
		||||
function draw() {
 | 
			
		||||
    ctx.clearRect(0, 0, canvas.width, canvas.height);
 | 
			
		||||
 | 
			
		||||
    // draw grid of checkerboard pattern
 | 
			
		||||
    for (let x = 0; x < gridSize; x++) {
 | 
			
		||||
        for (let y = 0; y < gridSize; y++) {
 | 
			
		||||
            ctx.fillStyle = (x + y) % 2 === 0 ? 
 | 
			
		||||
            getComputedStyle(document.documentElement).getPropertyValue('--background-color') : 
 | 
			
		||||
            getComputedStyle(document.documentElement).getPropertyValue('--secondary-background-color');
 | 
			
		||||
            ctx.fillRect(x * tileSize, y * tileSize, tileSize, tileSize);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Draw snake
 | 
			
		||||
    snake.forEach(segment => {
 | 
			
		||||
        let nextVec = { x: 0, y: 0 };
 | 
			
		||||
        // if there is a segment after the current segment
 | 
			
		||||
        if (snake.indexOf(segment) < snake.length - 1) {
 | 
			
		||||
            const nextSegment = snake[snake.indexOf(segment) + 1];
 | 
			
		||||
            nextVec.x = nextSegment.x - segment.x;
 | 
			
		||||
            nextVec.y = nextSegment.y - segment.y;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ctx.fillStyle = getComputedStyle(document.documentElement).getPropertyValue('--primary-color');
 | 
			
		||||
        if (nextVec.x === 0 && nextVec.y === 0) {
 | 
			
		||||
            ctx.fillRect(
 | 
			
		||||
                segment.x * tileSize + (tileSize - snakeSize) / 2,
 | 
			
		||||
                segment.y * tileSize + (tileSize - snakeSize) / 2,
 | 
			
		||||
                snakeSize,
 | 
			
		||||
                snakeSize
 | 
			
		||||
            );
 | 
			
		||||
        } else if (nextVec.x > 0 || nextVec.y > 0) {
 | 
			
		||||
            ctx.fillRect(
 | 
			
		||||
                segment.x * tileSize + (tileSize - snakeSize) / 2,
 | 
			
		||||
                segment.y * tileSize + (tileSize - snakeSize) / 2,
 | 
			
		||||
                snakeSize + nextVec.x * (tileSize - snakeSize),
 | 
			
		||||
                snakeSize + nextVec.y * (tileSize - snakeSize)
 | 
			
		||||
            );
 | 
			
		||||
        } else {
 | 
			
		||||
            ctx.fillRect(
 | 
			
		||||
                segment.x * tileSize + (tileSize - snakeSize) / 2 + nextVec.x * (tileSize - snakeSize),
 | 
			
		||||
                segment.y * tileSize + (tileSize - snakeSize) / 2 + nextVec.y * (tileSize - snakeSize),
 | 
			
		||||
                snakeSize + Math.abs(nextVec.x) * (tileSize - snakeSize),
 | 
			
		||||
                snakeSize + Math.abs(nextVec.y) * (tileSize - snakeSize)
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    // Draw food
 | 
			
		||||
    ctx.fillStyle = '#ff4d4d';
 | 
			
		||||
    ctx.fillRect(
 | 
			
		||||
        food.x * tileSize + (tileSize - foodSize) / 2,
 | 
			
		||||
        food.y * tileSize + (tileSize - foodSize) / 2,
 | 
			
		||||
        foodSize,
 | 
			
		||||
        foodSize
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function update() {
 | 
			
		||||
    if (gameOver) return;
 | 
			
		||||
 | 
			
		||||
    // Move snake
 | 
			
		||||
    const head = { x: snake[0].x + direction.x, y: snake[0].y + direction.y };
 | 
			
		||||
 | 
			
		||||
    // Add new head
 | 
			
		||||
    snake.unshift(head);
 | 
			
		||||
 | 
			
		||||
    // Check for food collision
 | 
			
		||||
    if (head.x === food.x && head.y === food.y) {
 | 
			
		||||
        score += 10; // Increase score
 | 
			
		||||
        placeFood();
 | 
			
		||||
    } else {
 | 
			
		||||
        snake.pop(); // Remove tail if no food eaten
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Check for wall collision
 | 
			
		||||
    if (head.x < 0 || head.x >= gridSize || head.y < 0 || head.y >= gridSize) {
 | 
			
		||||
        gameOver = true;
 | 
			
		||||
        return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Check for self collision
 | 
			
		||||
    for (let i = 1; i < snake.length; i++) {
 | 
			
		||||
        if (head.x === snake[i].x && head.y === snake[i].y) {
 | 
			
		||||
            gameOver = true;
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function placeFood() {
 | 
			
		||||
    do {
 | 
			
		||||
        food.x = Math.floor(Math.random() * gridSize);
 | 
			
		||||
        food.y = Math.floor(Math.random() * gridSize);
 | 
			
		||||
    } while (snake.some(segment => segment.x === food.x && segment.y === food.y));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function changeDirection(event) {
 | 
			
		||||
    switch (event.key) {
 | 
			
		||||
        case 'w':
 | 
			
		||||
            if (direction.y === 0) direction = { x: 0, y: -1 };
 | 
			
		||||
            break;
 | 
			
		||||
        case 's':
 | 
			
		||||
            if (direction.y === 0) direction = { x: 0, y: 1 };
 | 
			
		||||
            break;
 | 
			
		||||
        case 'a':
 | 
			
		||||
            if (direction.x === 0) direction = { x: -1, y: 0 };
 | 
			
		||||
            break;
 | 
			
		||||
        case 'd':
 | 
			
		||||
            if (direction.x === 0) direction = { x: 1, y: 0 };
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Menu to start the game
 | 
			
		||||
function menu() {
 | 
			
		||||
    ctx.clearRect(0, 0, canvas.width, canvas.height);
 | 
			
		||||
 | 
			
		||||
    ctx.fillStyle = getComputedStyle(document.documentElement).getPropertyValue('--background-color');
 | 
			
		||||
    ctx.fillRect(0, 0, canvas.width, canvas.height);
 | 
			
		||||
 | 
			
		||||
    ctx.textAlign = 'center';
 | 
			
		||||
    ctx.fillStyle = getComputedStyle(document.documentElement).getPropertyValue('--text-color');
 | 
			
		||||
    ctx.font = '200px Arial';
 | 
			
		||||
    ctx.fillText('Snake Game', canvas.width / 2, canvas.height / 2);
 | 
			
		||||
    ctx.font = '100px Arial';
 | 
			
		||||
    ctx.fillText('Press W/A/S/D to move', canvas.width / 2, canvas.height / 2 + 100);
 | 
			
		||||
    ctx.fillText('Click to start', canvas.width / 2, canvas.height / 2 + 200);
 | 
			
		||||
 | 
			
		||||
    canvas.addEventListener('click', startGame);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function gameLoop() {
 | 
			
		||||
    if (!gameOver) {
 | 
			
		||||
        update();
 | 
			
		||||
        draw();
 | 
			
		||||
        setTimeout(gameLoop, 100);
 | 
			
		||||
    } else {
 | 
			
		||||
        document.removeEventListener('keydown', changeDirection);
 | 
			
		||||
        document.getElementById('snake-score').value = score;
 | 
			
		||||
        alert(`Game Over! Your score: ${score}`);
 | 
			
		||||
        menu();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function startGame() {
 | 
			
		||||
    snake = [{ x: 10, y: 10 }, { x: 10, y: 11 }, { x: 10, y: 12 }];
 | 
			
		||||
    direction = { x: 1, y: 0 };
 | 
			
		||||
    food = { x: Math.floor(Math.random() * gridSize), y: Math.floor(Math.random() * gridSize) };
 | 
			
		||||
    score = 0;
 | 
			
		||||
    gameOver = false;
 | 
			
		||||
    canvas.removeEventListener('click', startGame);
 | 
			
		||||
    document.addEventListener('keydown', changeDirection);
 | 
			
		||||
    gameLoop();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
menu();
 | 
			
		||||
							
								
								
									
										7
									
								
								static/robots.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								static/robots.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
User-agent: *
 | 
			
		||||
Allow: /
 | 
			
		||||
Disallow: /404.html
 | 
			
		||||
 | 
			
		||||
Sitemap: https://alfieking.dev/sitemap.xml
 | 
			
		||||
 | 
			
		||||
# hewwo :3
 | 
			
		||||
							
								
								
									
										6
									
								
								static/sitemap.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								static/sitemap.xml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
 | 
			
		||||
  <url>
 | 
			
		||||
    <loc>https://www.example.com/index.html</loc>
 | 
			
		||||
  </url>
 | 
			
		||||
</urlset>
 | 
			
		||||
		Reference in New Issue
	
	Block a user