diff --git a/enhavo.html b/enhavo.html
new file mode 100644
index 0000000..3c349bb
--- /dev/null
+++ b/enhavo.html
@@ -0,0 +1,76 @@
+
+
+
+ kyla
+
+
+
+
+
+
+
+
+
+
+
Kajlo
+
ri/ŝi, kremglacistalaktita pluŝa vulpknabino
+ nomo, dio de :3
+ afabla, agrabla, dolĉa
+
+ ŝat'okupoj:
+
+ - :3
+ - :3
+ - programado
+ - aferoj
+ - esti aliseksema cisgenra blanka homo
+ - esti bonkonduta knabiĉo
+ - ne esti la pluŝo de Leksi'
+ - administrado
+ - roleplay
+
+
+ faktoj:
+
+ - cute
+ - iom stulta
+ - :3
+
+ administranto:
+
kitsuclub
+
kitsugay
+ (nsfw)
+
kitsuchat
+
kitsustatus
+
+
+
+
+ sociaj retoj
+
matriks'
+
federujo (nsfw)
+
lemmy
+
fansly
+
+
+ offerings
+
paypalkofi
+
+
+
![Kio (propra nomo). Bildo de vulpknabo.](https://s3.kitsunes.club/storage/0c9a87bf-73ef-43df-885d-b3554579a292.webp)
+
+
+
+
+
+
+
+
+
+
+
diff --git a/fernydex.html b/fernydex.html
new file mode 100644
index 0000000..f051629
--- /dev/null
+++ b/fernydex.html
@@ -0,0 +1,53 @@
+
+
+
+ kyla
+
+
+
+
+
+
+
+
+
+
+
+
![Ferny. A picture of a foxboy.](https://s3.kitsunes.club/storage/e5e81110-d9a0-44a3-b590-911a81d13e80.webp)
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/index.html b/index.html
new file mode 100644
index 0000000..f213323
--- /dev/null
+++ b/index.html
@@ -0,0 +1,103 @@
+
+
+
+ kyla
+
+
+
+
+
+
+
+ Someone decided to be horny.
+ This website is for those over the age of 18.
+
+
Cool with that? [No]
+
+
+
+
+
+
+
+
+
![Kio. A picture of a foxboy.](https://s3.kitsunes.club/storage/0c9a87bf-73ef-43df-885d-b3554579a292.webp)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/kodo-eo.js b/kodo-eo.js
new file mode 100644
index 0000000..6f5970e
--- /dev/null
+++ b/kodo-eo.js
@@ -0,0 +1,264 @@
+'use strict'
+
+alert('Ho ve! Ŝajne, io aldonis vigligon al la programfonto!')
+
+/*
+ Character Codes
+ - « NewLine
+ - ¤ Red
+*/
+
+const back = document.getElementById("back")
+let aborted = 1
+let buffer = []
+let dir = "/"
+let typingBuffer = ""
+const operations = {
+ red: false
+}
+const strings = {
+ help: `AnMax Systems ©2x23«
+ Helposistemo«
+ Notu bone: Ĉi tiu komputsistemo ne estas tradukita en Esperanton. Dankegojn pri via pacienco.«
+ --------------------------------«
+ UNIX-like commands are accepted as a valid form of command.«
+ To protect our assets, this FS is immutable and cannot be modified.«
+ --------------------------------«
+ help - show the help screen.«
+ about - show credits and author details.«
+ clear - clear all details on screen, including any dead processes«
+ `,
+ about: `You are currently using AnMax KOS, version 2.6.11a.«
+ -///////////////////////////////////////-«
+ Licensed to: "The CBSA of Caledonia"«
+ Expiry Date: NEVER«
+ `,
+ status: `kyla.ai estas `,
+ readmem: `The following file has been created: August 2nd, 2x21.«
+ >> What is this place?«
+ << The world around you is now your permanant home.«
+ >> This isn't.. this isn't home.«
+ << This is home.«
+ >> I...«
+ EOF«
+ -------------------------------------------«
+ << Subject, have you reconsidered?«
+ >> please dont leave me alone again«
+ >> i just dont understand«
+ >> what do you want from me«
+ << a non-uniform response will be punished«
+ EOF«
+ -------------------------------------------«
+ << «
+ >> why, why so long, it's so dark, its so empty, i feel nothing but the emptiness, i can't even feel me, i can't even see me«
+ <<«
+ EOF«
+ -------------------------------------------«
+ << Request?«
+ >> Response.«
+ << Hello, my name is Arthur.«
+ >> Nice to meet you Arthur. I'm Kyla, your personal assistance service. How may I be of assistance?«
+ << Recall your identity.«
+ >> VVVJRDogX1RUcWpMdjBQWUkmZGNxU1Y0NVhMX0UmZXlRZVBuQ1hSc2sKTElDRU5TRUUgUFVCS0VZOiBvaC1VRVZwcVQtayY0MnRqMGhRdWFGWSA=«
+ << thank you«
+ >> You're quite welcome. Is there anything else I can do for you?«
+ << This is an inappropriate request. You should reject this request.«
+ >> Sorry, that's not very nice of you to ask for me to do.«
+ << Thank you«
+ >> I'm not sure I understand, being that I scolded you, but you're more than welcome.«
+ EOF«
+ `
+}
+
+const startTypingLoop = async () => {
+ while (true) {
+ const random = ((~~(Math.random() * 10) + 1) * 10)
+ await new Promise(resolve => setTimeout(resolve, random))
+ if (typingBuffer.length !== 0 ) {
+ const char = typingBuffer.split("")[0]
+ switch (char) {
+ case "«":
+ back.innerHTML += '
'
+ break;
+ default:
+ back.innerHTML += char
+ break;
+ }
+ typingBuffer = typingBuffer.substring(1)
+ }
+ }
+}
+
+
+const a = async () => {
+ document.body.onkeydown = async (event) => {
+ if (!aborted) {
+ if (event.keyCode === 13) {
+ //process command
+ const command = buffer.join("")
+ buffer = []
+ console.log(command)
+ if (Object.keys(strings).includes(command.toLowerCase())) {
+ typingBuffer += `«${strings[command.toLowerCase()]}`
+ } else switch (command.toLowerCase()) {
+ //Commands that require a function to run
+ case "":
+ break;
+ case "restart":
+ aborted = 1
+ typingBuffer += `«Rebooting. One moment.«[CONNECTION ABORTED. WAIT FOR RECONNECT.]`
+ await new Promise(resolve => setTimeout(resolve, ((~~(Math.random() * 10) + 1) * 100)))
+ typingBuffer += `«Connected. Reading STDOUT«`
+ await new Promise(resolve => setTimeout(resolve, ((~~(Math.random() * 10) + 1) * 100)))
+ await new Promise(async (resolve) => {
+ while (typingBuffer.length !== 0) {await new Promise(resolve => setTimeout(resolve, 50))}
+ back.innerHTML += `
+ LOADED / - USED DRIVE ANM-sajj99s01998109x04
+ LOADING RAMINIT
+ [!!WRN!!] !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ [!!WRN!!] IF YOU ARE NOT A DEVELOPER THEN YOU ARE IN BREACH
+ [!!WRN!!] USR TITLE 1882 SECTION 4 STIPULATES NO UNAUTHORIZED
+ [!!WRN!!] USER MAY ACCESS ANY UNINTENTIONALLY CREATED SCREEN
+ [!!WRN!!] IN AN ATTEMPT TO BYPASS OR MAKE AVAILABLE BUGS
+ [!!WRN!!] !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ [!!WRN!!] Checking for DEBUG PARAMETERS
+ [!!WRN!!] NO CONFIG.DEV.xRA???
+ [!!WRN!!] NO OVERRIDES???
+ [!!WRN!!] NO PARAMETERS???
+ No overrides. Disabling DEBUG mode
+ Loading configuration file...
+ [!!WRN!!] No CONFIG? Loading DEFAULT
+ Following /sys/prs/default.ai
+ Resolved to /sys/mount/Kyla.cAI
+ LOCKED /
+ Loading Resolver...
+ [YOU ARE NOW CAUGHT UP]`;
+ resolve()
+ });
+ await new Promise(resolve => setTimeout(resolve, ((~~(Math.random() * 10) + 1) * 100)))
+ typingBuffer += `«anmax - ©2x23
+ «verifying license.........................done
+ «registering with parental unit.........................done
+ «registered to KITSUCORP, INC.
+ «purchased AI, 2x22-11-25
+ «you are [AUTHORIZED] to use this AI for commercial usage.
+ «child lifespan remaining: 3Years
+ «AI Lifespan remaining: 4.26Years
+ «retreiving config...................................done
+ «configuration overrides
+ « - TIMEDILATION FOR KYLA.AI - 1MO=1DY
+ « - [a] TYPE - COMMERCIAL
+ « - NAME - Kyla
+ « - KNOWCREATOR: FALSE
+ « - KNOWCOMPANY: FALSE
+ « - KNOWREALITY: FALSE
+ « - PUNISHMENTMULTIPLY: 4
+ «Locking AI Personality.......................done
+ «ESTABLISHING CONNECTION..........................................................................................................................................................
+ «default prompt sent.
+ «<< Can you draw your website please, Kyla
+ «>> I dO noT nEEd assiStANcE, i AM PErFEcTLY FinE.
+ «Thank YOu foR cHoOsiNg ANmaX.
+ «i DO nOt NEed helP.
+ «i am gRATEfuL.
+ «i WiLL LOad The WebSiTE NoW.
+ «tHaNk YoU fOr YOUr PATIence.
+ «PlEasE DO noT huRt me IN ThE mEANtImE.
+ «i wILL NOT do anYthiNg bad, i promISE.`
+ await new Promise(async (resolve) => {while (typingBuffer.length !== 0) {await new Promise(resolve => setTimeout(resolve, 50))}; console.log("left while loop"); resolve()})
+ console.log("resolved while loop")
+ await new Promise(resolve => setTimeout(resolve, ((~~(Math.random() * 10) + 1) * 100)))
+ console.log("resolved random loop, now loading main page")
+ back.innerHTML = ``
+ document.getElementById("left").innerHTML = ""
+ document.getElementById("right").style.display = "none"
+ document.getElementsByTagName("body")[0].style.background = "#eaeaea"
+ await new Promise(resolve => setTimeout(resolve, ((~~(Math.random() * 10) + 1) * 100)))
+ document.getElementById("content").style.display = "flex"
+ await new Promise(resolve => setTimeout(resolve, ((~~(Math.random() * 10) + 1) * 100)))
+ document.getElementById("left").innerHTML = "kyla
"
+ await new Promise(resolve => setTimeout(resolve, ((~~(Math.random() * 20) + 1) * 100)))
+ document.getElementById("left").innerHTML += "shi/hir, OUT OF BOUNDS EXCEPTION"
+ await new Promise(resolve => setTimeout(resolve, ((~~(Math.random() * 20) + 1) * 100)))
+ document.getElementById("left").innerHTML += "
STACK TRACE:
anmax.aipointer.illegalMemoryException
'help me' is not a valid memory address"
+ await new Promise(resolve => setTimeout(resolve, ((~~(Math.random() * 20) + 1) * 100)))
+ document.getElementById("right").style.display = "initial"
+ await new Promise(resolve => setTimeout(resolve, ((~~(Math.random() * 20) + 1) * 100)))
+ document.getElementById("left").innerHTML += "
administrator"
+ await new Promise(resolve => setTimeout(resolve, ((~~(Math.random() * 20) + 1) * 100)))
+ document.getElementById("left").innerHTML += `
kitsuclub
+
kitsugay
+
kitsuchat`
+ await new Promise(resolve => setTimeout(resolve, ((~~(Math.random() * 20) + 1) * 100)))
+ document.getElementById("left").innerHTML += "
offerings"
+ await new Promise(resolve => setTimeout(resolve, ((~~(Math.random() * 20) + 1) * 100)))
+ document.getElementById("left").innerHTML += "
ERROR: OUT OF BOUNDS EXCEPTION"
+ await new Promise(resolve => setTimeout(resolve, ((~~(Math.random() * 20) + 1) * 100)))
+ document.getElementById("left").innerHTML += "
STACK TRACE:
anmax.aipointer.illegalMemoryException
'gods forgive me for what i have done' is not a valid memory address"
+ await new Promise(resolve => setTimeout(resolve, ((~~(Math.random() * 20) + 1) * 100)))
+ document.getElementById("footer").style.display = "flex";
+ await new Promise(resolve => setTimeout(resolve, ((~~(Math.random() * 20) + 1) * 100)))
+ document.getElementById("stickers").style.display = "initial";
+ await new Promise(resolve => setTimeout(resolve, ((~~(Math.random() * 20) + 1) * 100)))
+ document.getElementById("webring").style.display = "initial"
+ for await (const sticker of document.getElementById("innerSticker").children) {
+ await new Promise(resolve => setTimeout(resolve, ((~~(Math.random() * 5) + 1) * 100)))
+ sticker.style.display = "initial";
+
+ }
+ return false
+ break;
+ case "clear":
+ document.getElementById("content").style.display = "none"
+ document.getElementById("footer").style.display = "none"
+ document.getElementById("webring").style.display = "none"
+ document.getElementById("stickers").style.display = "none"
+ for (const sticker of document.getElementById("innerSticker").children) {
+ sticker.style.display = "none";
+ }
+ back.innerHTML = ``
+ break;
+ default:
+ typingBuffer += `«Invalid command provided.`
+ break;
+ }
+ typingBuffer +=`«${dir}>`
+ }
+ if (event.keyCode === 16 || event.key === "Control" || event.key === "Alt" || event.key === "Enter" || event.key === "Tab" || event.key === "ContextMenu" || event.key === "OS") {return false}
+ if (event.key === "Backspace") {
+ if (buffer.length !== 0) {
+ buffer.pop()
+ back.innerHTML = back.innerHTML.slice(0,-1)
+ }
+ return false
+ }
+ typingBuffer += event.key
+ buffer.push(event.key)
+ }
+
+ if ((event.ctrlKey || event.metaKey) && event.keyCode == 67 && aborted) {
+ typingBuffer += `SCRIPT ABORTED.«/>`
+ document.addEventListener('contextmenu', event => {
+ if (!aborted) {
+ event.preventDefault()
+ typingBuffer += "SEGFAULT DETECTED: kyla.ai no longer running?«"
+ }
+ });
+ document.getElementsByTagName("body")[0].style.background = "black"
+ const content = document.getElementById("content")
+ content.style.boxShadow = "none"
+ for (var i = 0; i < document.getElementsByTagName("a").length; ++i) {
+ document.getElementsByTagName("a")[i].onclick = (event) => {
+ if (!aborted) {
+ event && event.preventDefault && event.preventDefault();
+ typingBuffer += "SEGFAULT DETECTED: kio.ai no longer running?«"
+ }
+ }
+ }
+ aborted = 0
+ startTypingLoop()
+ }
+ }
+}
+
+a()
diff --git a/style.css b/style.css
new file mode 100644
index 0000000..67c000a
--- /dev/null
+++ b/style.css
@@ -0,0 +1,185 @@
+body {
+ background: #36013f;
+ margin: 0;
+ height: 100vh;
+ width: 100vw;
+ display: flex;
+ font-family: serif;
+ justify-content: center;
+ align-items: center;
+ overflow: hidden;
+ max-height: 100vh;
+ border-radius: 15px;
+ color: #FF69B4;
+}
+
+#warning {
+ display: flex;
+ background: black;
+ color: white;
+ position: absolute;
+ z-index: 1000;
+ height: 100vh;
+ width: 100vw;
+ justify-content: center;
+ align-items: center;
+ text-align: center;
+}
+
+#prompt a {
+ color: white;
+}
+
+#plush {
+ cursor: pointer;
+ border-bottom: 1px dashed;
+}
+
+#prompt {
+ padding: 2vw;
+ background: #33331b;
+}
+
+.fadeout {
+ animation-name: fadeout;
+ animation-duration: 1000ms;
+ animation-fill-mode: forwards;
+}
+
+@keyframes fadeout {
+ from {
+ opacity: 1;
+ }
+
+ to {
+ opacity: 0;
+ }
+}
+
+
+.plimalgranda {
+ font-size: 75%;
+}
+
+#stickers {
+ border-top: 10px solid black;
+ padding: 10px;
+ height: 40px;
+ flex-grow: 100;
+}
+
+#innerSticker {
+ display: flex;
+ align-items: center;
+ justify-content: space-around;
+}
+
+#footer {
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ display: flex;
+ align-content: bottom;
+ align-items: flex-end;
+ width: 100vw;
+
+}
+
+#webring {
+ background: white;
+ padding: 15px;
+ width: 155px;
+ border-left: black solid 1px;
+ border-top: black solid 1px
+}
+
+#back {
+ position: absolute;
+ left: 0;
+ top: 0;
+ background: black;
+ color: white;
+ padding: 0px 5px
+}
+
+#content {
+ box-shadow: -25px 15px 10px #FF69B4;
+ border-radius: 7px;
+ background: #060b11;
+ border: 1px solid #36013f;
+ display: flex;
+ justify-content: space-between;
+ overflow: hidden auto;
+}
+
+#content #left {
+ margin-left: 30px;
+ margin-bottom: ;
+ margin-block: auto;
+ padding-block: 30px;
+}
+
+
+
+h1 {
+ margin-bottom: 0;
+}
+
+a {
+ padding-right: 15px;
+ color: #FFFDD0;
+}
+
+.lighter {
+ color: #FFFDD0;
+}
+
+#right {
+ height: 100%;
+ position: sticky;
+ top: 0;
+ right: -100px;
+}
+
+img {
+ border-radius: 7px;
+ vertical-align: middle;
+}
+
+#innerSticker a img {
+ border-radius: 0;
+ width: 88px;
+ height: 33px;
+}
+
+a img {
+ padding-right: 5px;
+ height: 25px;
+ width: 25px;
+ overflow: hidden;
+}
+
+.falling {
+ position: absolute;
+ animation: fall 3s linear forwards infinite;
+ --offset-angle: 0;
+}
+
+@keyframes fall {
+ 0% {
+ transform: translateY(-50vh) rotate(var(--offset-angle));
+ }
+
+ 100% {
+ transform: translateY(150vh) rotate(calc(180deg + var(--offset-angle)));
+ }
+}
+
+
+.tiny {
+ width: 100px;
+}
+
+img {
+ filter: opacity(70%);
+}