diff --git a/_app/immutable/assets/0.-opAhqsk.css b/_app/immutable/assets/0.-opAhqsk.css
new file mode 100644
index 0000000..e5973cc
--- /dev/null
+++ b/_app/immutable/assets/0.-opAhqsk.css
@@ -0,0 +1 @@
+@import "https://api.fontshare.com/v2/css?f[]=outfit@401,800,900,901,301,300,801,400,500,600&display=swap";.nav-title.svelte-1bl90f8{color:var(--color-white);view-transition-name:nav-title;padding:.25rem .5rem;text-decoration:none}.title-main.svelte-1bl90f8{color:var(--color-main);font-size:1.875rem;font-weight:900;line-height:2.25rem;display:block}@media (min-width:1024px){.title-main.svelte-1bl90f8{display:inline}}nav.svelte-jdl4hi{view-transition-name:header;justify-content:space-between;align-items:center;height:3rem;padding:2.5rem 1.5rem;display:flex}@media (min-width:1024px){nav.svelte-jdl4hi{padding-left:3rem;padding-right:3rem}}hr.svelte-1onz296{opacity:.5;background:var(--color-white);border:0;height:1px;position:absolute}hr.vertical.svelte-1onz296{width:1px;height:100%}matrix.svelte-1v0prlu{background-image:radial-gradient(circle,#dee0da4d 1px,#fff0 1px);background-size:40px 40px;max-width:100%;animation:4s linear infinite svelte-1v0prlu-move;position:absolute;inset:0;overflow-x:hidden;scale:1.2}@keyframes svelte-1v0prlu-move{0%{translate:0}to{translate:48px 48px}}background.svelte-m5hcvk{pointer-events:none;position:fixed;inset:0}main.svelte-m5hcvk{scroll-snap-type:y mandatory;position:relative}.scroll-indicator.svelte-1luicmx{letter-spacing:.4em;opacity:.6;flex-direction:column;align-items:center;gap:.5em;font-size:small;animation:2s cubic-bezier(.4,0,.6,1) infinite svelte-1luicmx-pulse;display:flex;position:fixed;bottom:2.5em;right:2.5em}.scroll-indicator.svelte-1luicmx:after{background-color:var(--color-accent);transition:all var(--transition-duration)var(--transition-timing);content:"";width:2%;height:3em;transition-delay:.3s}@keyframes svelte-1luicmx-pulse{50%{opacity:.5}}:root{--color-main:#05f2f2;--color-secondary:#214da6;--color-accent:#23468c;--color-bg-primary:#0a0b0d;--color-bg-secondary:#393e46;--color-white:#c8d2dc;--color-error:#f87171;--color-social:#4755691a;--transition-duration:.15s;--transition-timing:cubic-bezier(.4,0,.2,1)}@layer reset{*,:before,:after{box-sizing:border-box;min-width:0;margin:0;padding:0}a,a:visited,a:hover,a:active{color:inherit}}@layer utilities{.col{flex-direction:column;display:flex}.icon{width:1.5rem;height:1.5rem}.fill{fill:currentColor}.iconl{width:2rem;height:2rem}.gap{gap:2rem}.wf{width:100%}.full{width:100%;height:100%}.grid-center{place-items:center;display:grid}.contents{display:contents}.align-center{align-items:center}}@media (prefers-reduced-motion){::view-transition-group(*){animation:none!important}::view-transition-old(*){animation:none!important}::view-transition-new(*){animation:none!important}}::view-transition-old(project-desc){animation:90ms cubic-bezier(.075,.82,.165,1) both fade-out,.3s cubic-bezier(.4,0,.2,1) both slide-down}::view-transition-new(project-desc){animation:.21s cubic-bezier(.075,.82,.165,1) both fade-in,.3s cubic-bezier(.4,0,.2,1) both down-slide}@keyframes fade-out{to{opacity:0}}@keyframes fade-in{0%{opacity:0}}@keyframes down-slide{0%{translate:-10%}}@keyframes slide-down{to{translate:10%}}html{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;font-family:Outfit,sans-serif;line-height:1.5}body{background-color:var(--color-bg-primary);color:var(--color-white)}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background-color:var(--color-accent);opacity:.5;border-radius:.25rem}*{text-shadow:0 1px 2px #dbdce842}img{border-radius:.375rem}:root:has(dialog[open]){overflow:hidden}dialog,::backdrop{overscroll-behavior:contain}picture{display:contents}.gradient-text{background:url(../../../gradient.webp);-webkit-text-fill-color:transparent;-webkit-text-stroke-width:1px;-webkit-text-stroke-color:var(--color-white);text-shadow:none;background-position:50%;-webkit-background-clip:text;background-clip:text}
\ No newline at end of file
diff --git a/_app/immutable/assets/0.1jhgg88F.css b/_app/immutable/assets/0.1jhgg88F.css
deleted file mode 100644
index bf2daeb..0000000
--- a/_app/immutable/assets/0.1jhgg88F.css
+++ /dev/null
@@ -1 +0,0 @@
-@import "https://api.fontshare.com/v2/css?f[]=archivo@401,800,900,901,301,300,801,400,500,600&display=swap";.nav-title.svelte-1bl90f8{color:var(--color-white);view-transition-name:nav-title;padding:.25rem .5rem;text-decoration:none}.title-main.svelte-1bl90f8{color:var(--color-main);font-size:1.875rem;font-weight:900;line-height:2.25rem;display:block}@media (min-width:1024px){.title-main.svelte-1bl90f8{display:inline}}nav.svelte-jdl4hi{view-transition-name:header;justify-content:space-between;align-items:center;height:3rem;padding:2.5rem 1.5rem;display:flex}@media (min-width:1024px){nav.svelte-jdl4hi{padding-left:3rem;padding-right:3rem}}hr.svelte-1onz296{opacity:.5;background:var(--color-white);border:0;height:1px;position:absolute}hr.vertical.svelte-1onz296{width:1px;height:100%}matrix.svelte-1v0prlu{background-image:radial-gradient(circle,#dee0da4d 1px,#fff0 1px);background-size:40px 40px;max-width:100%;animation:4s linear infinite svelte-1v0prlu-move;position:absolute;inset:0;overflow-x:hidden;scale:1.2}@keyframes svelte-1v0prlu-move{0%{translate:0}to{translate:48px 48px}}background.svelte-m5hcvk{pointer-events:none;position:fixed;inset:0}main.svelte-m5hcvk{scroll-snap-type:y mandatory;position:relative}.scroll-indicator.svelte-1luicmx{letter-spacing:.4em;opacity:.6;flex-direction:column;align-items:center;gap:.5em;font-size:small;animation:2s cubic-bezier(.4,0,.6,1) infinite svelte-1luicmx-pulse;display:flex;position:fixed;bottom:2.5em;right:2.5em}.scroll-indicator.svelte-1luicmx:after{background-color:var(--color-accent);transition:all var(--transition-duration)var(--transition-timing);content:"";width:2%;height:3em;transition-delay:.3s}@keyframes svelte-1luicmx-pulse{50%{opacity:.5}}:root{--color-main:#05f2f2;--color-secondary:#214da6;--color-accent:#23468c;--color-bg-primary:#0a0b0d;--color-bg-secondary:#393e46;--color-white:#c8d2dc;--color-error:#f87171;--color-social:#4755691a;--transition-duration:.15s;--transition-timing:cubic-bezier(.4,0,.2,1)}@layer reset{*,:before,:after{box-sizing:border-box;min-width:0;margin:0;padding:0}a,a:visited,a:hover,a:active{color:inherit}}@layer utilities{.col{flex-direction:column;display:flex}.icon{width:1.5rem;height:1.5rem}.fill{fill:currentColor}.iconl{width:2rem;height:2rem}.gap{gap:2rem}.wf{width:100%}.full{width:100%;height:100%}.grid-center{place-items:center;display:grid}.contents{display:contents}.align-center{align-items:center}}@media (prefers-reduced-motion){::view-transition-group(*){animation:none!important}::view-transition-old(*){animation:none!important}::view-transition-new(*){animation:none!important}}::view-transition-old(project-desc){animation:90ms cubic-bezier(.075,.82,.165,1) both fade-out,.3s cubic-bezier(.4,0,.2,1) both slide-down}::view-transition-new(project-desc){animation:.21s cubic-bezier(.075,.82,.165,1) both fade-in,.3s cubic-bezier(.4,0,.2,1) both down-slide}@keyframes fade-out{to{opacity:0}}@keyframes fade-in{0%{opacity:0}}@keyframes down-slide{0%{translate:-10%}}@keyframes slide-down{to{translate:10%}}html{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;font-family:Archivo,sans-serif;line-height:1.5}body{background-color:var(--color-bg-primary);color:var(--color-white)}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background-color:var(--color-accent);opacity:.5;border-radius:.25rem}*{text-shadow:0 1px 2px #dbdce842}img{border-radius:.375rem}:root:has(dialog[open]){overflow:hidden}dialog,::backdrop{overscroll-behavior:contain}picture{display:contents}.gradient-text{background:url(../../../gradient.webp);-webkit-text-fill-color:transparent;-webkit-text-stroke-width:1px;-webkit-text-stroke-color:var(--color-white);text-shadow:none;background-position:50%;-webkit-background-clip:text;background-clip:text}
\ No newline at end of file
diff --git a/_app/immutable/assets/2.8mQxADjM.css b/_app/immutable/assets/2.8mQxADjM.css
new file mode 100644
index 0000000..53d6fcf
--- /dev/null
+++ b/_app/immutable/assets/2.8mQxADjM.css
@@ -0,0 +1 @@
+.social-icon.svelte-5l2lxa{--size:3rem;width:var(--size);height:var(--size);transition:all var(--transition-duration)var(--transition-timing);border-radius:.5rem;font-size:1.125rem;line-height:1.75rem}.social-icon.svelte-5l2lxa:hover{transform-origin:50%;scale:1.4}.half{color:var(--color);width:50%;height:50%}.social-box.svelte-5i68q9{flex-grow:1;align-items:center;gap:1rem}.social-container.svelte-5i68q9{flex-wrap:wrap;justify-content:center;gap:.5rem;display:flex}footer.svelte-epulau{background-color:var(--color-white);color:var(--color-secondary)}.footer-container.svelte-epulau{gap:4rem;padding:0}hr.svelte-epulau{background-color:var(--color-bg-primary);border-radius:80%;height:5px}.greetings.svelte-epulau{flex-direction:column;justify-content:space-between;align-items:center;gap:.5rem;display:flex}@media (min-width:1024px){.footer-container.svelte-epulau{padding:2rem 5rem}.greetings.svelte-epulau{flex-direction:row}}.card.svelte-aqr1lw{transform-style:preserve-3d;perspective:500px;background-position:50%;background-size:cover;border-radius:.325rem;flex-direction:column;justify-content:flex-end;height:40vh;padding:1rem;display:flex}.card-body.svelte-aqr1lw{background-color:var(--color-white);color:var(--color-bg-primary);transform-style:flat;transition:all var(--transition-duration)var(--transition-timing);border-radius:.275rem;min-height:10vmin;padding:.5rem 1rem;text-decoration:none;box-shadow:0 0 #0000,0 0 #0000,0 20px 25px -5px #0000001a}.card-body.svelte-aqr1lw:hover{scale:1.03}.marquee.svelte-ha0fik.svelte-ha0fik{-webkit-user-select:none;user-select:none;gap:var(--gap);display:flex;position:relative;overflow:hidden}.marquee.svelte-ha0fik div.svelte-ha0fik{justify-content:space-around;gap:var(--gap);animation:svelte-ha0fik-scroll var(--animation-speed)linear infinite;flex-shrink:0;min-width:100%;display:flex}.marquee.pause-on-hover.svelte-ha0fik:hover div.svelte-ha0fik{animation-play-state:paused}@keyframes svelte-ha0fik-scroll{0%{translate:0}to{translate:calc(-100% - var(--gap))}}@media (prefers-reduced-motion:reduce){.marquee.svelte-ha0fik div.svelte-ha0fik{flex-wrap:wrap;display:flex;animation-play-state:paused!important}}.more.svelte-1y9a3uh.svelte-1y9a3uh{max-width:80%}.more.svelte-1y9a3uh span.svelte-1y9a3uh{font-style:italic}.featured-mq.svelte-1y9a3uh.svelte-1y9a3uh{align-items:center;padding:4rem 0;overflow:clip}.featured.svelte-1y9a3uh.svelte-1y9a3uh{grid-template-columns:auto;gap:.5rem;display:grid}h3.svelte-1y9a3uh.svelte-1y9a3uh{font-size:4rem}@media (min-width:1024px){.featured.svelte-1y9a3uh.svelte-1y9a3uh{grid-template-columns:repeat(2,1fr)}}.morphing.svelte-1fezs12.svelte-1fezs12{letter-spacing:.05em;text-transform:capitalize;text-align:center;height:3ch;font-size:3rem;font-weight:600;line-height:3.5rem;position:relative}.morphing.svelte-1fezs12>.word.svelte-1fezs12{width:80vmin;animation-name:svelte-1fezs12-word;animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-fill-mode:backwards;position:absolute;top:50%;left:50%;translate:-50% -50%}@keyframes svelte-1fezs12-word{0%,5%,to{filter:blur();opacity:1}20%,80%{filter:blur(1em);opacity:0}}.skill-grid.svelte-19vteb2{letter-spacing:.05em;align-items:center;gap:1rem;line-height:2rem}svg.svelte-jdmobm{width:18vh;height:18vh;margin:.5rem 0;animation-name:svelte-jdmobm-rotate-circle;animation-duration:10s;animation-timing-function:linear;animation-iteration-count:infinite}.blue.svelte-jdmobm{fill:var(--color-main)}.text.svelte-jdmobm{letter-spacing:1px;word-spacing:8px;text-transform:uppercase;font-size:20px;font-weight:600}@keyframes svelte-jdmobm-rotate-circle{to{transform:rotate(1turn)}}div.svelte-10cursk{width:300px;height:300px;position:relative}img.svelte-10cursk{z-index:5;border-radius:50%;width:100%;height:100%;translate:0 -10%;scale:-1.25 1.25}div.svelte-10cursk:before,div.svelte-10cursk:after,img.svelte-10cursk{content:"";position:absolute}div.svelte-10cursk:before{z-index:2;border:5px solid #fff;border-radius:50%;inset:0}div.svelte-10cursk:after{z-index:1;background-color:var(--color-bg-primary);border-radius:50%;inset:10%}.name-card.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{background-color:var(--color-main);color:var(--color-bg-primary);justify-content:space-between;position:relative}.name-card.svelte-wr418w .p-icon.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{background-color:var(--color-bg-primary);color:var(--color-main);align-items:center;gap:.5rem;padding:.5rem;display:flex;position:absolute;top:0;left:0}.name-card.svelte-wr418w .p-icon.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w:after{content:"";background-color:inherit;border-style:solid;border-width:0 0 2.5rem 1.75rem;border-color:transparent transparent var(--color-main)transparent;width:2rem;margin:0 auto;position:absolute;top:0;bottom:0;left:100%}.name-card.svelte-wr418w .avatar.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{justify-content:flex-end;margin-top:4rem;margin-right:1rem;display:flex}.name-card.svelte-wr418w .name-holder.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{justify-content:space-between;align-items:center;padding:1rem;display:flex}.name-card.svelte-wr418w .name.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{flex-basis:75%;gap:0;font-size:2rem;font-weight:700;line-height:2rem}.name-card.svelte-wr418w .name.svelte-wr418w>span.svelte-wr418w.svelte-wr418w.svelte-wr418w:first-child{font-size:2rem;line-height:2rem}.name-card.svelte-wr418w .action.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{background-color:var(--color-bg-secondary);letter-spacing:.1rem;justify-content:center;padding:1rem;font-size:1rem;display:flex}.info-card.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{padding-top:2rem}.info-card.svelte-wr418w .content.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{flex-grow:1;grid-template-columns:repeat(3,1fr);width:100%;display:grid}.info-card.svelte-wr418w .content.svelte-wr418w>div.svelte-wr418w.svelte-wr418w.svelte-wr418w,.info-card.svelte-wr418w .content.svelte-wr418w>a.svelte-wr418w.svelte-wr418w.svelte-wr418w{background-color:var(--color-bg-secondary);color:#fff;border:1px solid var(--color-white);flex-direction:column;justify-content:center;align-items:center;padding:.5rem;display:flex}.info-card.svelte-wr418w .content>div p.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w,.info-card.svelte-wr418w .content>a p.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{text-align:center}.info-card.svelte-wr418w .content>div h3.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w,.info-card.svelte-wr418w .content>a h3.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{font-weight:200}.info-card.svelte-wr418w .content.svelte-wr418w>a.svelte-wr418w>span.svelte-wr418w.svelte-wr418w{justify-content:center}.info-card.svelte-wr418w .content.svelte-wr418w>a.svelte-wr418w>span.svelte-wr418w>h2.svelte-wr418w{font-size:3rem;line-height:3rem}.info-card.svelte-wr418w .content.svelte-wr418w>div.svelte-wr418w>p.svelte-wr418w.svelte-wr418w{flex-grow:1}.info-card.svelte-wr418w .content.svelte-wr418w>div.inverted.svelte-wr418w.svelte-wr418w.svelte-wr418w,.info-card.svelte-wr418w .content.svelte-wr418w>a.inverted.svelte-wr418w.svelte-wr418w.svelte-wr418w{color:var(--color-bg-primary)}.info-card.svelte-wr418w .content.svelte-wr418w>a.svelte-wr418w.svelte-wr418w.svelte-wr418w{text-decoration:none;position:relative}.info-card.svelte-wr418w .content.svelte-wr418w>a.svelte-wr418w.svelte-wr418w.svelte-wr418w:after{content:"";border:2px solid;border-width:2px 2px 0 0;width:1rem;height:1rem;position:absolute;top:.25rem;right:.25rem}.info-card.svelte-wr418w .content.svelte-wr418w>a.svelte-wr418w.svelte-wr418w.svelte-wr418w:first-of-type{grid-area:1/1/3/3;padding:0}.info-card.svelte-wr418w .content>a:first-of-type img.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{-o-object-fit:cover;object-fit:cover;border-radius:0;width:100%;min-width:100%;height:100%;min-height:100%}.icon-gallery.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{flex-wrap:wrap;place-content:center;gap:.5rem;padding:.25rem;display:flex}.icon-gallery.svelte-wr418w>.icon{filter:drop-shadow(0 0 1px)}@media (min-width:1024px){.plaque{flex-direction:row;justify-content:center;padding:5rem!important}.name-card.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{min-width:60vmin}.name-card.svelte-wr418w .name-holder.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{padding:1rem 3rem}.name-card.svelte-wr418w .name.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{font-size:3.5rem;line-height:3.5rem}.content.svelte-wr418w>div.svelte-wr418w>h3.svelte-wr418w.svelte-wr418w.svelte-wr418w{font-size:2rem}.content.svelte-wr418w .icon-gallery.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{align-self:center;gap:1rem;max-width:60%}.content.svelte-wr418w .icon-gallery.svelte-wr418w>.icon{width:1.75rem;height:1.75rem}}
\ No newline at end of file
diff --git a/_app/immutable/assets/2.z3Z6viOC.css b/_app/immutable/assets/2.z3Z6viOC.css
deleted file mode 100644
index ea4f54c..0000000
--- a/_app/immutable/assets/2.z3Z6viOC.css
+++ /dev/null
@@ -1 +0,0 @@
-.social-icon.svelte-5l2lxa{--size:3rem;width:var(--size);height:var(--size);transition:all var(--transition-duration)var(--transition-timing);border-radius:.5rem;font-size:1.125rem;line-height:1.75rem}.social-icon.svelte-5l2lxa:hover{transform-origin:50%;scale:1.4}.half{color:var(--color);width:50%;height:50%}.social-box.svelte-5i68q9{flex-grow:1;align-items:center;gap:1rem}.social-container.svelte-5i68q9{flex-wrap:wrap;justify-content:center;gap:.5rem;display:flex}footer.svelte-epulau{background-color:var(--color-white);color:var(--color-secondary)}.footer-container.svelte-epulau{gap:4rem;padding:0}hr.svelte-epulau{background-color:var(--color-bg-primary);border-radius:80%;height:5px}.greetings.svelte-epulau{flex-direction:column;justify-content:space-between;align-items:center;gap:.5rem;display:flex}@media (min-width:1024px){.footer-container.svelte-epulau{padding:2rem 5rem}.greetings.svelte-epulau{flex-direction:row}}.card.svelte-1dfzebk{transform-style:preserve-3d;perspective:500px;background-position:50%;background-size:cover;border-radius:.325rem;flex-direction:column;justify-content:flex-end;height:80vmin;padding:1rem;display:flex}.card-body.svelte-1dfzebk{background-color:var(--color-white);color:var(--color-bg-primary);transform-style:flat;transition:all var(--transition-duration)var(--transition-timing);border-radius:.275rem;min-height:10vmin;padding:.5rem 1rem;text-decoration:none;box-shadow:0 0 #0000,0 0 #0000,0 20px 25px -5px #0000001a}.card-body.svelte-1dfzebk:hover{scale:1.03}.marquee.svelte-ha0fik.svelte-ha0fik{-webkit-user-select:none;user-select:none;gap:var(--gap);display:flex;position:relative;overflow:hidden}.marquee.svelte-ha0fik div.svelte-ha0fik{justify-content:space-around;gap:var(--gap);animation:svelte-ha0fik-scroll var(--animation-speed)linear infinite;flex-shrink:0;min-width:100%;display:flex}.marquee.pause-on-hover.svelte-ha0fik:hover div.svelte-ha0fik{animation-play-state:paused}@keyframes svelte-ha0fik-scroll{0%{translate:0}to{translate:calc(-100% - var(--gap))}}@media (prefers-reduced-motion:reduce){.marquee.svelte-ha0fik div.svelte-ha0fik{flex-wrap:wrap;display:flex;animation-play-state:paused!important}}.more.svelte-1y9a3uh.svelte-1y9a3uh{max-width:80%}.more.svelte-1y9a3uh span.svelte-1y9a3uh{font-style:italic}.featured-mq.svelte-1y9a3uh.svelte-1y9a3uh{align-items:center;padding:4rem 0;overflow:clip}.featured.svelte-1y9a3uh.svelte-1y9a3uh{grid-template-columns:auto;gap:.5rem;display:grid}h3.svelte-1y9a3uh.svelte-1y9a3uh{font-size:4rem}@media (min-width:1024px){.featured.svelte-1y9a3uh.svelte-1y9a3uh{grid-template-columns:repeat(2,1fr)}}.morphing.svelte-1fezs12.svelte-1fezs12{letter-spacing:.05em;text-transform:capitalize;text-align:center;height:3ch;font-size:3rem;font-weight:600;line-height:3.5rem;position:relative}.morphing.svelte-1fezs12>.word.svelte-1fezs12{width:80vmin;animation-name:svelte-1fezs12-word;animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-fill-mode:backwards;position:absolute;top:50%;left:50%;translate:-50% -50%}@keyframes svelte-1fezs12-word{0%,5%,to{filter:blur();opacity:1}20%,80%{filter:blur(1em);opacity:0}}.skill-grid.svelte-19vteb2{letter-spacing:.05em;align-items:center;gap:1rem;line-height:2rem}svg.svelte-jdmobm{width:18vh;height:18vh;margin:.5rem 0;animation-name:svelte-jdmobm-rotate-circle;animation-duration:10s;animation-timing-function:linear;animation-iteration-count:infinite}.blue.svelte-jdmobm{fill:var(--color-main)}.text.svelte-jdmobm{letter-spacing:1px;word-spacing:8px;text-transform:uppercase;font-size:20px;font-weight:600}@keyframes svelte-jdmobm-rotate-circle{to{transform:rotate(1turn)}}div.svelte-10cursk{width:300px;height:300px;position:relative}img.svelte-10cursk{z-index:5;border-radius:50%;width:100%;height:100%;translate:0 -10%;scale:-1.25 1.25}div.svelte-10cursk:before,div.svelte-10cursk:after,img.svelte-10cursk{content:"";position:absolute}div.svelte-10cursk:before{z-index:2;border:5px solid #fff;border-radius:50%;inset:0}div.svelte-10cursk:after{z-index:1;background-color:var(--color-bg-primary);border-radius:50%;inset:10%}.name-card.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{background-color:var(--color-main);color:var(--color-bg-primary);justify-content:space-between;position:relative}.name-card.svelte-wr418w .p-icon.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{background-color:var(--color-bg-primary);color:var(--color-main);align-items:center;gap:.5rem;padding:.5rem;display:flex;position:absolute;top:0;left:0}.name-card.svelte-wr418w .p-icon.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w:after{content:"";background-color:inherit;border-style:solid;border-width:0 0 2.5rem 1.75rem;border-color:transparent transparent var(--color-main)transparent;width:2rem;margin:0 auto;position:absolute;top:0;bottom:0;left:100%}.name-card.svelte-wr418w .avatar.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{justify-content:flex-end;margin-top:4rem;margin-right:1rem;display:flex}.name-card.svelte-wr418w .name-holder.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{justify-content:space-between;align-items:center;padding:1rem;display:flex}.name-card.svelte-wr418w .name.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{flex-basis:75%;gap:0;font-size:2rem;font-weight:700;line-height:2rem}.name-card.svelte-wr418w .name.svelte-wr418w>span.svelte-wr418w.svelte-wr418w.svelte-wr418w:first-child{font-size:2rem;line-height:2rem}.name-card.svelte-wr418w .action.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{background-color:var(--color-bg-secondary);letter-spacing:.1rem;justify-content:center;padding:1rem;font-size:1rem;display:flex}.info-card.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{padding-top:2rem}.info-card.svelte-wr418w .content.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{flex-grow:1;grid-template-columns:repeat(3,1fr);width:100%;display:grid}.info-card.svelte-wr418w .content.svelte-wr418w>div.svelte-wr418w.svelte-wr418w.svelte-wr418w,.info-card.svelte-wr418w .content.svelte-wr418w>a.svelte-wr418w.svelte-wr418w.svelte-wr418w{background-color:var(--color-bg-secondary);color:#fff;border:1px solid var(--color-white);flex-direction:column;justify-content:center;align-items:center;padding:.5rem;display:flex}.info-card.svelte-wr418w .content>div p.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w,.info-card.svelte-wr418w .content>a p.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{text-align:center}.info-card.svelte-wr418w .content>div h3.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w,.info-card.svelte-wr418w .content>a h3.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{font-weight:200}.info-card.svelte-wr418w .content.svelte-wr418w>a.svelte-wr418w>span.svelte-wr418w.svelte-wr418w{justify-content:center}.info-card.svelte-wr418w .content.svelte-wr418w>a.svelte-wr418w>span.svelte-wr418w>h2.svelte-wr418w{font-size:3rem;line-height:3rem}.info-card.svelte-wr418w .content.svelte-wr418w>div.svelte-wr418w>p.svelte-wr418w.svelte-wr418w{flex-grow:1}.info-card.svelte-wr418w .content.svelte-wr418w>div.inverted.svelte-wr418w.svelte-wr418w.svelte-wr418w,.info-card.svelte-wr418w .content.svelte-wr418w>a.inverted.svelte-wr418w.svelte-wr418w.svelte-wr418w{color:var(--color-bg-primary)}.info-card.svelte-wr418w .content.svelte-wr418w>a.svelte-wr418w.svelte-wr418w.svelte-wr418w{text-decoration:none;position:relative}.info-card.svelte-wr418w .content.svelte-wr418w>a.svelte-wr418w.svelte-wr418w.svelte-wr418w:after{content:"";border:2px solid;border-width:2px 2px 0 0;width:1rem;height:1rem;position:absolute;top:.25rem;right:.25rem}.info-card.svelte-wr418w .content.svelte-wr418w>a.svelte-wr418w.svelte-wr418w.svelte-wr418w:first-of-type{grid-area:1/1/3/3;padding:0}.info-card.svelte-wr418w .content>a:first-of-type img.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{-o-object-fit:cover;object-fit:cover;border-radius:0;width:100%;min-width:100%;height:100%;min-height:100%}.icon-gallery.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{flex-wrap:wrap;place-content:center;gap:.5rem;padding:.25rem;display:flex}.icon-gallery.svelte-wr418w>.icon{filter:drop-shadow(0 0 1px)}@media (min-width:1024px){.plaque{flex-direction:row;justify-content:center;padding:5rem!important}.name-card.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{min-width:60vmin}.name-card.svelte-wr418w .name-holder.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{padding:1rem 3rem}.name-card.svelte-wr418w .name.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{font-size:3.5rem;line-height:3.5rem}.content.svelte-wr418w>div.svelte-wr418w>h3.svelte-wr418w.svelte-wr418w.svelte-wr418w{font-size:2rem}.content.svelte-wr418w .icon-gallery.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{align-self:center;gap:1rem;max-width:60%}.content.svelte-wr418w .icon-gallery.svelte-wr418w>.icon{width:1.75rem;height:1.75rem}}
\ No newline at end of file
diff --git a/_app/immutable/assets/_layout.cY52uX0B.css b/_app/immutable/assets/_layout.cY52uX0B.css
deleted file mode 100644
index 1112f7d..0000000
--- a/_app/immutable/assets/_layout.cY52uX0B.css
+++ /dev/null
@@ -1 +0,0 @@
-@import "https://api.fontshare.com/v2/css?f[]=archivo@401,800,900,901,301,300,801,400,500,600&display=swap";.nav-title.svelte-1bl90f8{color:var(--color-white);view-transition-name:nav-title;padding:.25rem .5rem;text-decoration:none}.title-main.svelte-1bl90f8{color:var(--color-main);font-size:1.875rem;font-weight:900;line-height:2.25rem;display:block}@media (min-width:1024px){.title-main.svelte-1bl90f8{display:inline}}nav.svelte-jdl4hi{view-transition-name:header;justify-content:space-between;align-items:center;height:3rem;padding:2.5rem 1.5rem;display:flex}@media (min-width:1024px){nav.svelte-jdl4hi{padding-left:3rem;padding-right:3rem}}hr.svelte-1onz296{opacity:.5;background:var(--color-white);border:0;height:1px;position:absolute}hr.vertical.svelte-1onz296{width:1px;height:100%}matrix.svelte-1v0prlu{background-image:radial-gradient(circle,#dee0da4d 1px,#fff0 1px);background-size:40px 40px;max-width:100%;animation:4s linear infinite svelte-1v0prlu-move;position:absolute;inset:0;overflow-x:hidden;scale:1.2}@keyframes svelte-1v0prlu-move{0%{translate:0}to{translate:48px 48px}}background.svelte-m5hcvk{pointer-events:none;position:fixed;inset:0}main.svelte-m5hcvk{scroll-snap-type:y mandatory;position:relative}.scroll-indicator.svelte-1luicmx{letter-spacing:.4em;opacity:.6;flex-direction:column;align-items:center;gap:.5em;font-size:small;animation:2s cubic-bezier(.4,0,.6,1) infinite svelte-1luicmx-pulse;display:flex;position:fixed;bottom:2.5em;right:2.5em}.scroll-indicator.svelte-1luicmx:after{background-color:var(--color-accent);transition:all var(--transition-duration)var(--transition-timing);content:"";width:2%;height:3em;transition-delay:.3s}@keyframes svelte-1luicmx-pulse{50%{opacity:.5}}:root{--color-main:#05f2f2;--color-secondary:#214da6;--color-accent:#23468c;--color-bg-primary:#0a0b0d;--color-bg-secondary:#393e46;--color-white:#c8d2dc;--color-error:#f87171;--color-social:#4755691a;--transition-duration:.15s;--transition-timing:cubic-bezier(.4,0,.2,1)}@layer reset{*,:before,:after{box-sizing:border-box;min-width:0;margin:0;padding:0}a,a:visited,a:hover,a:active{color:inherit}}@layer utilities{.col{flex-direction:column;display:flex}.icon{width:1.5rem;height:1.5rem}.fill{fill:currentColor}.iconl{width:2rem;height:2rem}.gap{gap:2rem}.wf{width:100%}.full{width:100%;height:100%}.grid-center{place-items:center;display:grid}.contents{display:contents}.align-center{align-items:center}}@media (prefers-reduced-motion){::view-transition-group(*){animation:none!important}::view-transition-old(*){animation:none!important}::view-transition-new(*){animation:none!important}}::view-transition-old(project-desc){animation:90ms cubic-bezier(.075,.82,.165,1) both fade-out,.3s cubic-bezier(.4,0,.2,1) both slide-down}::view-transition-new(project-desc){animation:.21s cubic-bezier(.075,.82,.165,1) both fade-in,.3s cubic-bezier(.4,0,.2,1) both down-slide}@keyframes fade-out{to{opacity:0}}@keyframes fade-in{0%{opacity:0}}@keyframes down-slide{0%{translate:-10%}}@keyframes slide-down{to{translate:10%}}html{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;font-family:Archivo,sans-serif;line-height:1.5}body{background-color:var(--color-bg-primary);color:var(--color-white)}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background-color:var(--color-accent);opacity:.5;border-radius:.25rem}*{text-shadow:0 1px 2px #dbdce842}img{border-radius:.375rem}:root:has(dialog[open]){overflow:hidden}dialog,::backdrop{overscroll-behavior:contain}picture{display:contents}.gradient-text{background:url(/gradient.webp);-webkit-text-fill-color:transparent;-webkit-text-stroke-width:1px;-webkit-text-stroke-color:var(--color-white);text-shadow:none;background-position:50%;-webkit-background-clip:text;background-clip:text}
\ No newline at end of file
diff --git a/_app/immutable/assets/_layout.ySQejq9b.css b/_app/immutable/assets/_layout.ySQejq9b.css
new file mode 100644
index 0000000..8a5c7e6
--- /dev/null
+++ b/_app/immutable/assets/_layout.ySQejq9b.css
@@ -0,0 +1 @@
+@import "https://api.fontshare.com/v2/css?f[]=outfit@401,800,900,901,301,300,801,400,500,600&display=swap";.nav-title.svelte-1bl90f8{color:var(--color-white);view-transition-name:nav-title;padding:.25rem .5rem;text-decoration:none}.title-main.svelte-1bl90f8{color:var(--color-main);font-size:1.875rem;font-weight:900;line-height:2.25rem;display:block}@media (min-width:1024px){.title-main.svelte-1bl90f8{display:inline}}nav.svelte-jdl4hi{view-transition-name:header;justify-content:space-between;align-items:center;height:3rem;padding:2.5rem 1.5rem;display:flex}@media (min-width:1024px){nav.svelte-jdl4hi{padding-left:3rem;padding-right:3rem}}hr.svelte-1onz296{opacity:.5;background:var(--color-white);border:0;height:1px;position:absolute}hr.vertical.svelte-1onz296{width:1px;height:100%}matrix.svelte-1v0prlu{background-image:radial-gradient(circle,#dee0da4d 1px,#fff0 1px);background-size:40px 40px;max-width:100%;animation:4s linear infinite svelte-1v0prlu-move;position:absolute;inset:0;overflow-x:hidden;scale:1.2}@keyframes svelte-1v0prlu-move{0%{translate:0}to{translate:48px 48px}}background.svelte-m5hcvk{pointer-events:none;position:fixed;inset:0}main.svelte-m5hcvk{scroll-snap-type:y mandatory;position:relative}.scroll-indicator.svelte-1luicmx{letter-spacing:.4em;opacity:.6;flex-direction:column;align-items:center;gap:.5em;font-size:small;animation:2s cubic-bezier(.4,0,.6,1) infinite svelte-1luicmx-pulse;display:flex;position:fixed;bottom:2.5em;right:2.5em}.scroll-indicator.svelte-1luicmx:after{background-color:var(--color-accent);transition:all var(--transition-duration)var(--transition-timing);content:"";width:2%;height:3em;transition-delay:.3s}@keyframes svelte-1luicmx-pulse{50%{opacity:.5}}:root{--color-main:#05f2f2;--color-secondary:#214da6;--color-accent:#23468c;--color-bg-primary:#0a0b0d;--color-bg-secondary:#393e46;--color-white:#c8d2dc;--color-error:#f87171;--color-social:#4755691a;--transition-duration:.15s;--transition-timing:cubic-bezier(.4,0,.2,1)}@layer reset{*,:before,:after{box-sizing:border-box;min-width:0;margin:0;padding:0}a,a:visited,a:hover,a:active{color:inherit}}@layer utilities{.col{flex-direction:column;display:flex}.icon{width:1.5rem;height:1.5rem}.fill{fill:currentColor}.iconl{width:2rem;height:2rem}.gap{gap:2rem}.wf{width:100%}.full{width:100%;height:100%}.grid-center{place-items:center;display:grid}.contents{display:contents}.align-center{align-items:center}}@media (prefers-reduced-motion){::view-transition-group(*){animation:none!important}::view-transition-old(*){animation:none!important}::view-transition-new(*){animation:none!important}}::view-transition-old(project-desc){animation:90ms cubic-bezier(.075,.82,.165,1) both fade-out,.3s cubic-bezier(.4,0,.2,1) both slide-down}::view-transition-new(project-desc){animation:.21s cubic-bezier(.075,.82,.165,1) both fade-in,.3s cubic-bezier(.4,0,.2,1) both down-slide}@keyframes fade-out{to{opacity:0}}@keyframes fade-in{0%{opacity:0}}@keyframes down-slide{0%{translate:-10%}}@keyframes slide-down{to{translate:10%}}html{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;font-family:Outfit,sans-serif;line-height:1.5}body{background-color:var(--color-bg-primary);color:var(--color-white)}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background-color:var(--color-accent);opacity:.5;border-radius:.25rem}*{text-shadow:0 1px 2px #dbdce842}img{border-radius:.375rem}:root:has(dialog[open]){overflow:hidden}dialog,::backdrop{overscroll-behavior:contain}picture{display:contents}.gradient-text{background:url(/gradient.webp);-webkit-text-fill-color:transparent;-webkit-text-stroke-width:1px;-webkit-text-stroke-color:var(--color-white);text-shadow:none;background-position:50%;-webkit-background-clip:text;background-clip:text}
\ No newline at end of file
diff --git a/_app/immutable/assets/_page.YozMrQBT.css b/_app/immutable/assets/_page.YozMrQBT.css
deleted file mode 100644
index ea4f54c..0000000
--- a/_app/immutable/assets/_page.YozMrQBT.css
+++ /dev/null
@@ -1 +0,0 @@
-.social-icon.svelte-5l2lxa{--size:3rem;width:var(--size);height:var(--size);transition:all var(--transition-duration)var(--transition-timing);border-radius:.5rem;font-size:1.125rem;line-height:1.75rem}.social-icon.svelte-5l2lxa:hover{transform-origin:50%;scale:1.4}.half{color:var(--color);width:50%;height:50%}.social-box.svelte-5i68q9{flex-grow:1;align-items:center;gap:1rem}.social-container.svelte-5i68q9{flex-wrap:wrap;justify-content:center;gap:.5rem;display:flex}footer.svelte-epulau{background-color:var(--color-white);color:var(--color-secondary)}.footer-container.svelte-epulau{gap:4rem;padding:0}hr.svelte-epulau{background-color:var(--color-bg-primary);border-radius:80%;height:5px}.greetings.svelte-epulau{flex-direction:column;justify-content:space-between;align-items:center;gap:.5rem;display:flex}@media (min-width:1024px){.footer-container.svelte-epulau{padding:2rem 5rem}.greetings.svelte-epulau{flex-direction:row}}.card.svelte-1dfzebk{transform-style:preserve-3d;perspective:500px;background-position:50%;background-size:cover;border-radius:.325rem;flex-direction:column;justify-content:flex-end;height:80vmin;padding:1rem;display:flex}.card-body.svelte-1dfzebk{background-color:var(--color-white);color:var(--color-bg-primary);transform-style:flat;transition:all var(--transition-duration)var(--transition-timing);border-radius:.275rem;min-height:10vmin;padding:.5rem 1rem;text-decoration:none;box-shadow:0 0 #0000,0 0 #0000,0 20px 25px -5px #0000001a}.card-body.svelte-1dfzebk:hover{scale:1.03}.marquee.svelte-ha0fik.svelte-ha0fik{-webkit-user-select:none;user-select:none;gap:var(--gap);display:flex;position:relative;overflow:hidden}.marquee.svelte-ha0fik div.svelte-ha0fik{justify-content:space-around;gap:var(--gap);animation:svelte-ha0fik-scroll var(--animation-speed)linear infinite;flex-shrink:0;min-width:100%;display:flex}.marquee.pause-on-hover.svelte-ha0fik:hover div.svelte-ha0fik{animation-play-state:paused}@keyframes svelte-ha0fik-scroll{0%{translate:0}to{translate:calc(-100% - var(--gap))}}@media (prefers-reduced-motion:reduce){.marquee.svelte-ha0fik div.svelte-ha0fik{flex-wrap:wrap;display:flex;animation-play-state:paused!important}}.more.svelte-1y9a3uh.svelte-1y9a3uh{max-width:80%}.more.svelte-1y9a3uh span.svelte-1y9a3uh{font-style:italic}.featured-mq.svelte-1y9a3uh.svelte-1y9a3uh{align-items:center;padding:4rem 0;overflow:clip}.featured.svelte-1y9a3uh.svelte-1y9a3uh{grid-template-columns:auto;gap:.5rem;display:grid}h3.svelte-1y9a3uh.svelte-1y9a3uh{font-size:4rem}@media (min-width:1024px){.featured.svelte-1y9a3uh.svelte-1y9a3uh{grid-template-columns:repeat(2,1fr)}}.morphing.svelte-1fezs12.svelte-1fezs12{letter-spacing:.05em;text-transform:capitalize;text-align:center;height:3ch;font-size:3rem;font-weight:600;line-height:3.5rem;position:relative}.morphing.svelte-1fezs12>.word.svelte-1fezs12{width:80vmin;animation-name:svelte-1fezs12-word;animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-fill-mode:backwards;position:absolute;top:50%;left:50%;translate:-50% -50%}@keyframes svelte-1fezs12-word{0%,5%,to{filter:blur();opacity:1}20%,80%{filter:blur(1em);opacity:0}}.skill-grid.svelte-19vteb2{letter-spacing:.05em;align-items:center;gap:1rem;line-height:2rem}svg.svelte-jdmobm{width:18vh;height:18vh;margin:.5rem 0;animation-name:svelte-jdmobm-rotate-circle;animation-duration:10s;animation-timing-function:linear;animation-iteration-count:infinite}.blue.svelte-jdmobm{fill:var(--color-main)}.text.svelte-jdmobm{letter-spacing:1px;word-spacing:8px;text-transform:uppercase;font-size:20px;font-weight:600}@keyframes svelte-jdmobm-rotate-circle{to{transform:rotate(1turn)}}div.svelte-10cursk{width:300px;height:300px;position:relative}img.svelte-10cursk{z-index:5;border-radius:50%;width:100%;height:100%;translate:0 -10%;scale:-1.25 1.25}div.svelte-10cursk:before,div.svelte-10cursk:after,img.svelte-10cursk{content:"";position:absolute}div.svelte-10cursk:before{z-index:2;border:5px solid #fff;border-radius:50%;inset:0}div.svelte-10cursk:after{z-index:1;background-color:var(--color-bg-primary);border-radius:50%;inset:10%}.name-card.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{background-color:var(--color-main);color:var(--color-bg-primary);justify-content:space-between;position:relative}.name-card.svelte-wr418w .p-icon.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{background-color:var(--color-bg-primary);color:var(--color-main);align-items:center;gap:.5rem;padding:.5rem;display:flex;position:absolute;top:0;left:0}.name-card.svelte-wr418w .p-icon.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w:after{content:"";background-color:inherit;border-style:solid;border-width:0 0 2.5rem 1.75rem;border-color:transparent transparent var(--color-main)transparent;width:2rem;margin:0 auto;position:absolute;top:0;bottom:0;left:100%}.name-card.svelte-wr418w .avatar.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{justify-content:flex-end;margin-top:4rem;margin-right:1rem;display:flex}.name-card.svelte-wr418w .name-holder.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{justify-content:space-between;align-items:center;padding:1rem;display:flex}.name-card.svelte-wr418w .name.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{flex-basis:75%;gap:0;font-size:2rem;font-weight:700;line-height:2rem}.name-card.svelte-wr418w .name.svelte-wr418w>span.svelte-wr418w.svelte-wr418w.svelte-wr418w:first-child{font-size:2rem;line-height:2rem}.name-card.svelte-wr418w .action.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{background-color:var(--color-bg-secondary);letter-spacing:.1rem;justify-content:center;padding:1rem;font-size:1rem;display:flex}.info-card.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{padding-top:2rem}.info-card.svelte-wr418w .content.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{flex-grow:1;grid-template-columns:repeat(3,1fr);width:100%;display:grid}.info-card.svelte-wr418w .content.svelte-wr418w>div.svelte-wr418w.svelte-wr418w.svelte-wr418w,.info-card.svelte-wr418w .content.svelte-wr418w>a.svelte-wr418w.svelte-wr418w.svelte-wr418w{background-color:var(--color-bg-secondary);color:#fff;border:1px solid var(--color-white);flex-direction:column;justify-content:center;align-items:center;padding:.5rem;display:flex}.info-card.svelte-wr418w .content>div p.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w,.info-card.svelte-wr418w .content>a p.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{text-align:center}.info-card.svelte-wr418w .content>div h3.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w,.info-card.svelte-wr418w .content>a h3.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{font-weight:200}.info-card.svelte-wr418w .content.svelte-wr418w>a.svelte-wr418w>span.svelte-wr418w.svelte-wr418w{justify-content:center}.info-card.svelte-wr418w .content.svelte-wr418w>a.svelte-wr418w>span.svelte-wr418w>h2.svelte-wr418w{font-size:3rem;line-height:3rem}.info-card.svelte-wr418w .content.svelte-wr418w>div.svelte-wr418w>p.svelte-wr418w.svelte-wr418w{flex-grow:1}.info-card.svelte-wr418w .content.svelte-wr418w>div.inverted.svelte-wr418w.svelte-wr418w.svelte-wr418w,.info-card.svelte-wr418w .content.svelte-wr418w>a.inverted.svelte-wr418w.svelte-wr418w.svelte-wr418w{color:var(--color-bg-primary)}.info-card.svelte-wr418w .content.svelte-wr418w>a.svelte-wr418w.svelte-wr418w.svelte-wr418w{text-decoration:none;position:relative}.info-card.svelte-wr418w .content.svelte-wr418w>a.svelte-wr418w.svelte-wr418w.svelte-wr418w:after{content:"";border:2px solid;border-width:2px 2px 0 0;width:1rem;height:1rem;position:absolute;top:.25rem;right:.25rem}.info-card.svelte-wr418w .content.svelte-wr418w>a.svelte-wr418w.svelte-wr418w.svelte-wr418w:first-of-type{grid-area:1/1/3/3;padding:0}.info-card.svelte-wr418w .content>a:first-of-type img.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{-o-object-fit:cover;object-fit:cover;border-radius:0;width:100%;min-width:100%;height:100%;min-height:100%}.icon-gallery.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{flex-wrap:wrap;place-content:center;gap:.5rem;padding:.25rem;display:flex}.icon-gallery.svelte-wr418w>.icon{filter:drop-shadow(0 0 1px)}@media (min-width:1024px){.plaque{flex-direction:row;justify-content:center;padding:5rem!important}.name-card.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{min-width:60vmin}.name-card.svelte-wr418w .name-holder.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{padding:1rem 3rem}.name-card.svelte-wr418w .name.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{font-size:3.5rem;line-height:3.5rem}.content.svelte-wr418w>div.svelte-wr418w>h3.svelte-wr418w.svelte-wr418w.svelte-wr418w{font-size:2rem}.content.svelte-wr418w .icon-gallery.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{align-self:center;gap:1rem;max-width:60%}.content.svelte-wr418w .icon-gallery.svelte-wr418w>.icon{width:1.75rem;height:1.75rem}}
\ No newline at end of file
diff --git a/_app/immutable/assets/_page.s7tXslK0.css b/_app/immutable/assets/_page.s7tXslK0.css
new file mode 100644
index 0000000..53d6fcf
--- /dev/null
+++ b/_app/immutable/assets/_page.s7tXslK0.css
@@ -0,0 +1 @@
+.social-icon.svelte-5l2lxa{--size:3rem;width:var(--size);height:var(--size);transition:all var(--transition-duration)var(--transition-timing);border-radius:.5rem;font-size:1.125rem;line-height:1.75rem}.social-icon.svelte-5l2lxa:hover{transform-origin:50%;scale:1.4}.half{color:var(--color);width:50%;height:50%}.social-box.svelte-5i68q9{flex-grow:1;align-items:center;gap:1rem}.social-container.svelte-5i68q9{flex-wrap:wrap;justify-content:center;gap:.5rem;display:flex}footer.svelte-epulau{background-color:var(--color-white);color:var(--color-secondary)}.footer-container.svelte-epulau{gap:4rem;padding:0}hr.svelte-epulau{background-color:var(--color-bg-primary);border-radius:80%;height:5px}.greetings.svelte-epulau{flex-direction:column;justify-content:space-between;align-items:center;gap:.5rem;display:flex}@media (min-width:1024px){.footer-container.svelte-epulau{padding:2rem 5rem}.greetings.svelte-epulau{flex-direction:row}}.card.svelte-aqr1lw{transform-style:preserve-3d;perspective:500px;background-position:50%;background-size:cover;border-radius:.325rem;flex-direction:column;justify-content:flex-end;height:40vh;padding:1rem;display:flex}.card-body.svelte-aqr1lw{background-color:var(--color-white);color:var(--color-bg-primary);transform-style:flat;transition:all var(--transition-duration)var(--transition-timing);border-radius:.275rem;min-height:10vmin;padding:.5rem 1rem;text-decoration:none;box-shadow:0 0 #0000,0 0 #0000,0 20px 25px -5px #0000001a}.card-body.svelte-aqr1lw:hover{scale:1.03}.marquee.svelte-ha0fik.svelte-ha0fik{-webkit-user-select:none;user-select:none;gap:var(--gap);display:flex;position:relative;overflow:hidden}.marquee.svelte-ha0fik div.svelte-ha0fik{justify-content:space-around;gap:var(--gap);animation:svelte-ha0fik-scroll var(--animation-speed)linear infinite;flex-shrink:0;min-width:100%;display:flex}.marquee.pause-on-hover.svelte-ha0fik:hover div.svelte-ha0fik{animation-play-state:paused}@keyframes svelte-ha0fik-scroll{0%{translate:0}to{translate:calc(-100% - var(--gap))}}@media (prefers-reduced-motion:reduce){.marquee.svelte-ha0fik div.svelte-ha0fik{flex-wrap:wrap;display:flex;animation-play-state:paused!important}}.more.svelte-1y9a3uh.svelte-1y9a3uh{max-width:80%}.more.svelte-1y9a3uh span.svelte-1y9a3uh{font-style:italic}.featured-mq.svelte-1y9a3uh.svelte-1y9a3uh{align-items:center;padding:4rem 0;overflow:clip}.featured.svelte-1y9a3uh.svelte-1y9a3uh{grid-template-columns:auto;gap:.5rem;display:grid}h3.svelte-1y9a3uh.svelte-1y9a3uh{font-size:4rem}@media (min-width:1024px){.featured.svelte-1y9a3uh.svelte-1y9a3uh{grid-template-columns:repeat(2,1fr)}}.morphing.svelte-1fezs12.svelte-1fezs12{letter-spacing:.05em;text-transform:capitalize;text-align:center;height:3ch;font-size:3rem;font-weight:600;line-height:3.5rem;position:relative}.morphing.svelte-1fezs12>.word.svelte-1fezs12{width:80vmin;animation-name:svelte-1fezs12-word;animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-fill-mode:backwards;position:absolute;top:50%;left:50%;translate:-50% -50%}@keyframes svelte-1fezs12-word{0%,5%,to{filter:blur();opacity:1}20%,80%{filter:blur(1em);opacity:0}}.skill-grid.svelte-19vteb2{letter-spacing:.05em;align-items:center;gap:1rem;line-height:2rem}svg.svelte-jdmobm{width:18vh;height:18vh;margin:.5rem 0;animation-name:svelte-jdmobm-rotate-circle;animation-duration:10s;animation-timing-function:linear;animation-iteration-count:infinite}.blue.svelte-jdmobm{fill:var(--color-main)}.text.svelte-jdmobm{letter-spacing:1px;word-spacing:8px;text-transform:uppercase;font-size:20px;font-weight:600}@keyframes svelte-jdmobm-rotate-circle{to{transform:rotate(1turn)}}div.svelte-10cursk{width:300px;height:300px;position:relative}img.svelte-10cursk{z-index:5;border-radius:50%;width:100%;height:100%;translate:0 -10%;scale:-1.25 1.25}div.svelte-10cursk:before,div.svelte-10cursk:after,img.svelte-10cursk{content:"";position:absolute}div.svelte-10cursk:before{z-index:2;border:5px solid #fff;border-radius:50%;inset:0}div.svelte-10cursk:after{z-index:1;background-color:var(--color-bg-primary);border-radius:50%;inset:10%}.name-card.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{background-color:var(--color-main);color:var(--color-bg-primary);justify-content:space-between;position:relative}.name-card.svelte-wr418w .p-icon.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{background-color:var(--color-bg-primary);color:var(--color-main);align-items:center;gap:.5rem;padding:.5rem;display:flex;position:absolute;top:0;left:0}.name-card.svelte-wr418w .p-icon.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w:after{content:"";background-color:inherit;border-style:solid;border-width:0 0 2.5rem 1.75rem;border-color:transparent transparent var(--color-main)transparent;width:2rem;margin:0 auto;position:absolute;top:0;bottom:0;left:100%}.name-card.svelte-wr418w .avatar.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{justify-content:flex-end;margin-top:4rem;margin-right:1rem;display:flex}.name-card.svelte-wr418w .name-holder.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{justify-content:space-between;align-items:center;padding:1rem;display:flex}.name-card.svelte-wr418w .name.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{flex-basis:75%;gap:0;font-size:2rem;font-weight:700;line-height:2rem}.name-card.svelte-wr418w .name.svelte-wr418w>span.svelte-wr418w.svelte-wr418w.svelte-wr418w:first-child{font-size:2rem;line-height:2rem}.name-card.svelte-wr418w .action.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{background-color:var(--color-bg-secondary);letter-spacing:.1rem;justify-content:center;padding:1rem;font-size:1rem;display:flex}.info-card.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{padding-top:2rem}.info-card.svelte-wr418w .content.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{flex-grow:1;grid-template-columns:repeat(3,1fr);width:100%;display:grid}.info-card.svelte-wr418w .content.svelte-wr418w>div.svelte-wr418w.svelte-wr418w.svelte-wr418w,.info-card.svelte-wr418w .content.svelte-wr418w>a.svelte-wr418w.svelte-wr418w.svelte-wr418w{background-color:var(--color-bg-secondary);color:#fff;border:1px solid var(--color-white);flex-direction:column;justify-content:center;align-items:center;padding:.5rem;display:flex}.info-card.svelte-wr418w .content>div p.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w,.info-card.svelte-wr418w .content>a p.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{text-align:center}.info-card.svelte-wr418w .content>div h3.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w,.info-card.svelte-wr418w .content>a h3.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{font-weight:200}.info-card.svelte-wr418w .content.svelte-wr418w>a.svelte-wr418w>span.svelte-wr418w.svelte-wr418w{justify-content:center}.info-card.svelte-wr418w .content.svelte-wr418w>a.svelte-wr418w>span.svelte-wr418w>h2.svelte-wr418w{font-size:3rem;line-height:3rem}.info-card.svelte-wr418w .content.svelte-wr418w>div.svelte-wr418w>p.svelte-wr418w.svelte-wr418w{flex-grow:1}.info-card.svelte-wr418w .content.svelte-wr418w>div.inverted.svelte-wr418w.svelte-wr418w.svelte-wr418w,.info-card.svelte-wr418w .content.svelte-wr418w>a.inverted.svelte-wr418w.svelte-wr418w.svelte-wr418w{color:var(--color-bg-primary)}.info-card.svelte-wr418w .content.svelte-wr418w>a.svelte-wr418w.svelte-wr418w.svelte-wr418w{text-decoration:none;position:relative}.info-card.svelte-wr418w .content.svelte-wr418w>a.svelte-wr418w.svelte-wr418w.svelte-wr418w:after{content:"";border:2px solid;border-width:2px 2px 0 0;width:1rem;height:1rem;position:absolute;top:.25rem;right:.25rem}.info-card.svelte-wr418w .content.svelte-wr418w>a.svelte-wr418w.svelte-wr418w.svelte-wr418w:first-of-type{grid-area:1/1/3/3;padding:0}.info-card.svelte-wr418w .content>a:first-of-type img.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{-o-object-fit:cover;object-fit:cover;border-radius:0;width:100%;min-width:100%;height:100%;min-height:100%}.icon-gallery.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{flex-wrap:wrap;place-content:center;gap:.5rem;padding:.25rem;display:flex}.icon-gallery.svelte-wr418w>.icon{filter:drop-shadow(0 0 1px)}@media (min-width:1024px){.plaque{flex-direction:row;justify-content:center;padding:5rem!important}.name-card.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{min-width:60vmin}.name-card.svelte-wr418w .name-holder.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{padding:1rem 3rem}.name-card.svelte-wr418w .name.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{font-size:3.5rem;line-height:3.5rem}.content.svelte-wr418w>div.svelte-wr418w>h3.svelte-wr418w.svelte-wr418w.svelte-wr418w{font-size:2rem}.content.svelte-wr418w .icon-gallery.svelte-wr418w.svelte-wr418w.svelte-wr418w.svelte-wr418w{align-self:center;gap:1rem;max-width:60%}.content.svelte-wr418w .icon-gallery.svelte-wr418w>.icon{width:1.75rem;height:1.75rem}}
\ No newline at end of file
diff --git a/_app/immutable/chunks/NavMenu.-eG5iPQm.js b/_app/immutable/chunks/NavMenu.J4321jEM.js
similarity index 96%
rename from _app/immutable/chunks/NavMenu.-eG5iPQm.js
rename to _app/immutable/chunks/NavMenu.J4321jEM.js
index 88262aa..7de8eeb 100644
--- a/_app/immutable/chunks/NavMenu.-eG5iPQm.js
+++ b/_app/immutable/chunks/NavMenu.J4321jEM.js
@@ -1 +1 @@
-import{s as L,m as z,e as H,c as N,b as P,f as _,w as m,o as D,i as g,u as B,r as F,v as J,a as E,g as I,h as b,k as K,t as S,d as q}from"./scheduler.fpbB-dMe.js";import{S as M,i as V,t as p,a as $,b as v,d as k,m as w,e as A}from"./index.htcIGCkn.js";import{I as O}from"./Icon.oS0yhZMM.js";import{p as Q}from"./stores.usvZvhE8.js";function R(a){let e,t,u,l;const f=a[5].default,n=z(f,a,a[4],null);return{c(){e=H("a"),n&&n.c(),this.h()},l(r){e=N(r,"A",{href:!0,class:!0,"aria-current":!0});var s=P(e);n&&n.l(s),s.forEach(_),this.h()},h(){m(e,"href",a[0]),m(e,"class",t=D(a[1])+" svelte-1i25n0a"),m(e,"aria-current",u=a[2]?"page":void 0)},m(r,s){g(r,e,s),n&&n.m(e,null),l=!0},p(r,[s]){n&&n.p&&(!l||s&16)&&B(n,f,r,r[4],l?J(f,r[4],s,null):F(r[4]),null),(!l||s&1)&&m(e,"href",r[0]),(!l||s&2&&t!==(t=D(r[1])+" svelte-1i25n0a"))&&m(e,"class",t),(!l||s&4&&u!==(u=r[2]?"page":void 0))&&m(e,"aria-current",u)},i(r){l||(p(n,r),l=!0)},o(r){$(n,r),l=!1},d(r){r&&_(e),n&&n.d(r)}}}function T(a,e,t){let u,{$$slots:l={},$$scope:f}=e,{href:n}=e,{current:r}=e,{class:s=""}=e;return a.$$set=i=>{"href"in i&&t(0,n=i.href),"current"in i&&t(3,r=i.current),"class"in i&&t(1,s=i.class),"$$scope"in i&&t(4,f=i.$$scope)},a.$$.update=()=>{var i;a.$$.dirty&9&&t(2,u=((i=n.split("/"))==null?void 0:i[1])===r)},[n,s,u,r,f,l]}class G extends M{constructor(e){super(),V(this,e,T,R,L,{href:0,current:3,class:1})}}function U(a){let e;return{c(){e=S("About")},l(t){e=q(t,"About")},m(t,u){g(t,e,u)},d(t){t&&_(e)}}}function W(a){let e;return{c(){e=S("Projects")},l(t){e=q(t,"Projects")},m(t,u){g(t,e,u)},d(t){t&&_(e)}}}function X(a){let e;return{c(){e=S("Contact")},l(t){e=q(t,"Contact")},m(t,u){g(t,e,u)},d(t){t&&_(e)}}}function Y(a){let e,t,u,l,f,n,r,s,i,d;return t=new G({props:{href:"/about",current:a[0],$$slots:{default:[U]},$$scope:{ctx:a}}}),l=new G({props:{href:"/projects",current:a[0],$$slots:{default:[W]},$$scope:{ctx:a}}}),n=new G({props:{href:"/contact",current:a[0],$$slots:{default:[X]},$$scope:{ctx:a}}}),i=new O({props:{class:"icon",icon:"akar-icons:github-fill"}}),{c(){e=H("div"),v(t.$$.fragment),u=E(),v(l.$$.fragment),f=E(),v(n.$$.fragment),r=E(),s=H("a"),v(i.$$.fragment),this.h()},l(o){e=N(o,"DIV",{class:!0});var c=P(e);k(t.$$.fragment,c),u=I(c),k(l.$$.fragment,c),f=I(c),k(n.$$.fragment,c),r=I(c),s=N(c,"A",{class:!0,href:!0,target:!0,rel:!0,"data-blobity-tooltip":!0,"aria-label":!0});var h=P(s);k(i.$$.fragment,h),h.forEach(_),c.forEach(_),this.h()},h(){m(s,"class","nav-external grid-center svelte-1pccnhd"),m(s,"href","https://github.com/blakeinstein"),m(s,"target","_blank"),m(s,"rel","noopener noreferrer"),m(s,"data-blobity-tooltip","GitHub"),m(s,"aria-label","GitHub"),m(e,"class","nav-menu svelte-1pccnhd")},m(o,c){g(o,e,c),w(t,e,null),b(e,u),w(l,e,null),b(e,f),w(n,e,null),b(e,r),b(e,s),w(i,s,null),d=!0},p(o,[c]){const h={};c&1&&(h.current=o[0]),c&4&&(h.$$scope={dirty:c,ctx:o}),t.$set(h);const j={};c&1&&(j.current=o[0]),c&4&&(j.$$scope={dirty:c,ctx:o}),l.$set(j);const C={};c&1&&(C.current=o[0]),c&4&&(C.$$scope={dirty:c,ctx:o}),n.$set(C)},i(o){d||(p(t.$$.fragment,o),p(l.$$.fragment,o),p(n.$$.fragment,o),p(i.$$.fragment,o),d=!0)},o(o){$(t.$$.fragment,o),$(l.$$.fragment,o),$(n.$$.fragment,o),$(i.$$.fragment,o),d=!1},d(o){o&&_(e),A(t),A(l),A(n),A(i)}}}function Z(a,e,t){let u,l;return K(a,Q,f=>t(1,l=f)),a.$$.update=()=>{var f,n;a.$$.dirty&2&&t(0,u=(n=(f=l.url.pathname)==null?void 0:f.split("/"))==null?void 0:n[1])},[u,l]}class ne extends M{constructor(e){super(),V(this,e,Z,Y,L,{})}}export{ne as N};
+import{s as L,m as z,e as H,c as N,b as P,f as _,w as m,o as D,i as g,u as B,r as F,v as J,a as E,g as I,h as b,k as K,t as S,d as q}from"./scheduler.fpbB-dMe.js";import{S as M,i as V,t as p,a as $,b as v,d as k,m as w,e as A}from"./index.htcIGCkn.js";import{I as O}from"./Icon.oS0yhZMM.js";import{p as Q}from"./stores.PuWNJbdz.js";function R(a){let e,t,u,l;const f=a[5].default,n=z(f,a,a[4],null);return{c(){e=H("a"),n&&n.c(),this.h()},l(r){e=N(r,"A",{href:!0,class:!0,"aria-current":!0});var s=P(e);n&&n.l(s),s.forEach(_),this.h()},h(){m(e,"href",a[0]),m(e,"class",t=D(a[1])+" svelte-1i25n0a"),m(e,"aria-current",u=a[2]?"page":void 0)},m(r,s){g(r,e,s),n&&n.m(e,null),l=!0},p(r,[s]){n&&n.p&&(!l||s&16)&&B(n,f,r,r[4],l?J(f,r[4],s,null):F(r[4]),null),(!l||s&1)&&m(e,"href",r[0]),(!l||s&2&&t!==(t=D(r[1])+" svelte-1i25n0a"))&&m(e,"class",t),(!l||s&4&&u!==(u=r[2]?"page":void 0))&&m(e,"aria-current",u)},i(r){l||(p(n,r),l=!0)},o(r){$(n,r),l=!1},d(r){r&&_(e),n&&n.d(r)}}}function T(a,e,t){let u,{$$slots:l={},$$scope:f}=e,{href:n}=e,{current:r}=e,{class:s=""}=e;return a.$$set=i=>{"href"in i&&t(0,n=i.href),"current"in i&&t(3,r=i.current),"class"in i&&t(1,s=i.class),"$$scope"in i&&t(4,f=i.$$scope)},a.$$.update=()=>{var i;a.$$.dirty&9&&t(2,u=((i=n.split("/"))==null?void 0:i[1])===r)},[n,s,u,r,f,l]}class G extends M{constructor(e){super(),V(this,e,T,R,L,{href:0,current:3,class:1})}}function U(a){let e;return{c(){e=S("About")},l(t){e=q(t,"About")},m(t,u){g(t,e,u)},d(t){t&&_(e)}}}function W(a){let e;return{c(){e=S("Projects")},l(t){e=q(t,"Projects")},m(t,u){g(t,e,u)},d(t){t&&_(e)}}}function X(a){let e;return{c(){e=S("Contact")},l(t){e=q(t,"Contact")},m(t,u){g(t,e,u)},d(t){t&&_(e)}}}function Y(a){let e,t,u,l,f,n,r,s,i,d;return t=new G({props:{href:"/about",current:a[0],$$slots:{default:[U]},$$scope:{ctx:a}}}),l=new G({props:{href:"/projects",current:a[0],$$slots:{default:[W]},$$scope:{ctx:a}}}),n=new G({props:{href:"/contact",current:a[0],$$slots:{default:[X]},$$scope:{ctx:a}}}),i=new O({props:{class:"icon",icon:"akar-icons:github-fill"}}),{c(){e=H("div"),v(t.$$.fragment),u=E(),v(l.$$.fragment),f=E(),v(n.$$.fragment),r=E(),s=H("a"),v(i.$$.fragment),this.h()},l(o){e=N(o,"DIV",{class:!0});var c=P(e);k(t.$$.fragment,c),u=I(c),k(l.$$.fragment,c),f=I(c),k(n.$$.fragment,c),r=I(c),s=N(c,"A",{class:!0,href:!0,target:!0,rel:!0,"data-blobity-tooltip":!0,"aria-label":!0});var h=P(s);k(i.$$.fragment,h),h.forEach(_),c.forEach(_),this.h()},h(){m(s,"class","nav-external grid-center svelte-1pccnhd"),m(s,"href","https://github.com/blakeinstein"),m(s,"target","_blank"),m(s,"rel","noopener noreferrer"),m(s,"data-blobity-tooltip","GitHub"),m(s,"aria-label","GitHub"),m(e,"class","nav-menu svelte-1pccnhd")},m(o,c){g(o,e,c),w(t,e,null),b(e,u),w(l,e,null),b(e,f),w(n,e,null),b(e,r),b(e,s),w(i,s,null),d=!0},p(o,[c]){const h={};c&1&&(h.current=o[0]),c&4&&(h.$$scope={dirty:c,ctx:o}),t.$set(h);const j={};c&1&&(j.current=o[0]),c&4&&(j.$$scope={dirty:c,ctx:o}),l.$set(j);const C={};c&1&&(C.current=o[0]),c&4&&(C.$$scope={dirty:c,ctx:o}),n.$set(C)},i(o){d||(p(t.$$.fragment,o),p(l.$$.fragment,o),p(n.$$.fragment,o),p(i.$$.fragment,o),d=!0)},o(o){$(t.$$.fragment,o),$(l.$$.fragment,o),$(n.$$.fragment,o),$(i.$$.fragment,o),d=!1},d(o){o&&_(e),A(t),A(l),A(n),A(i)}}}function Z(a,e,t){let u,l;return K(a,Q,f=>t(1,l=f)),a.$$.update=()=>{var f,n;a.$$.dirty&2&&t(0,u=(n=(f=l.url.pathname)==null?void 0:f.split("/"))==null?void 0:n[1])},[u,l]}class ne extends M{constructor(e){super(),V(this,e,Z,Y,L,{})}}export{ne as N};
diff --git a/_app/immutable/chunks/ProjectData.0d5AQ7sG.js b/_app/immutable/chunks/ProjectData.0d5AQ7sG.js
deleted file mode 100644
index 6620c2b..0000000
--- a/_app/immutable/chunks/ProjectData.0d5AQ7sG.js
+++ /dev/null
@@ -1,68 +0,0 @@
-import{H as R}from"./control.pJ1mnnAb.js";import{s as z,e as u,a as m,c as d,O as f,g as b,i,n as j,f as t,H as U,b as G,D as J,w as D,K as W}from"./scheduler.fpbB-dMe.js";import{S as A,i as E}from"./index.htcIGCkn.js";function Ce(T){return(T==null?void 0:T.length)!==void 0?T:Array.from(T)}function _e(T,n){throw new R(T,n)}new TextEncoder;function K(T){let n,I="Inspiration",v,l,S=`I saw Boop by Ivan Mathy at Product Hunt back in 2020. I loved the idea of a simple scratchpad
-that could be used to run quick macros on text. I had been using online tools so much and I felt boop was exactly what I needed.
-Having a handy tool to quickly base64 encode/decode, url encode/decode, json pretty print, etc. was a great idea.
-I also wanted to build a project in Rust and this seemed like a good fit.`,g,a,F='A gist for an example script that I wrote to convert text to owo speak is available here.',x,r,B="Implementation",k,p,H=`The initial implementation used a Custom WebView using a custom fork of Boscop’s 2019 implementation
-of web-view bindings for Rust (It has since been refactored to a much more cleaner state and
-contains the features I implemented), which resolved a few issues with frameless windows like resizing and moving the window.`,C,h,_=`I intended the app to be inter-compatible with the original Boop app, which used scripts written in JS. This inspired me to use
-a webview so that I could invoke JS scripts on the text. Initial implementation was using CodeMirror as the editor.`,c,s,M=`I later picked the project back up in 2021 and refactored the code to use Tauri instead, and replaced
-CodeMirror with AceEditor for a huge performance boost. I also added a few more features like customizing the stylesheet via
-themes, and introduced the concept the editor being able to retain the pasted information.`,e,o,P="Fun Facts",w,L,q="
I learnt how to write Context Free Grammers to implement the syntax highlighting for the editor.
I learnt WinRT the native windows runtime to implement the inital version.
I learnt how to dynamically import JS script files that export variables.
";return{c(){n=u("h2"),n.textContent=I,v=m(),l=u("p"),l.innerHTML=S,g=m(),a=u("p"),a.innerHTML=F,x=m(),r=u("h2"),r.textContent=B,k=m(),p=u("p"),p.innerHTML=H,C=m(),h=u("p"),h.textContent=_,c=m(),s=u("p"),s.innerHTML=M,e=m(),o=u("h2"),o.textContent=P,w=m(),L=u("ul"),L.innerHTML=q},l(y){n=d(y,"H2",{"data-svelte-h":!0}),f(n)!=="svelte-wdx45u"&&(n.textContent=I),v=b(y),l=d(y,"P",{"data-svelte-h":!0}),f(l)!=="svelte-ktlkcx"&&(l.innerHTML=S),g=b(y),a=d(y,"P",{"data-svelte-h":!0}),f(a)!=="svelte-10h34lk"&&(a.innerHTML=F),x=b(y),r=d(y,"H2",{"data-svelte-h":!0}),f(r)!=="svelte-1y7y6hs"&&(r.textContent=B),k=b(y),p=d(y,"P",{"data-svelte-h":!0}),f(p)!=="svelte-1mgp73h"&&(p.innerHTML=H),C=b(y),h=d(y,"P",{"data-svelte-h":!0}),f(h)!=="svelte-1j1qu85"&&(h.textContent=_),c=b(y),s=d(y,"P",{"data-svelte-h":!0}),f(s)!=="svelte-147pncy"&&(s.innerHTML=M),e=b(y),o=d(y,"H2",{"data-svelte-h":!0}),f(o)!=="svelte-1anz3rk"&&(o.textContent=P),w=b(y),L=d(y,"UL",{"data-svelte-h":!0}),f(L)!=="svelte-1e6d88r"&&(L.innerHTML=q)},m(y,O){i(y,n,O),i(y,v,O),i(y,l,O),i(y,g,O),i(y,a,O),i(y,x,O),i(y,r,O),i(y,k,O),i(y,p,O),i(y,C,O),i(y,h,O),i(y,c,O),i(y,s,O),i(y,e,O),i(y,o,O),i(y,w,O),i(y,L,O)},p:j,i:j,o:j,d(y){y&&(t(n),t(v),t(l),t(g),t(a),t(x),t(r),t(k),t(p),t(C),t(h),t(c),t(s),t(e),t(o),t(w),t(L))}}}const $={name:"Bloop",year:2020,featured:!0,description:"A cross-platform simple hackable scratchpad built with Rust and Tauri.",thumbnail:"/mockups/bloop.avif",techs:["svelte","typescript","tauri","sass"],col:2,row:3,links:[{icon:"entypo-social:github",href:"https://github.com/Blakeinstein/Bloop",type:"Github"}],images:[{link:"/gallery/bloop/demo.avif",desc:"Bloop on windows."},{link:"/gallery/bloop/demo-mac.avif",desc:"Bloop on macos."},{link:"/gallery/bloop/owoifier.avif",desc:"An example Bloop Script."}]};class N extends A{constructor(n){super(),E(this,n,null,K,z,{})}}const Q=Object.freeze(Object.defineProperty({__proto__:null,default:N,metadata:$},Symbol.toStringTag,{value:"Module"}));function V(T){let n,I="Inspiration",v,l,S=`The final project of SER502 during my Masters at ASU was to build our own programming language.
-I had recently found out about BhaiLang, a toy programming language
-and decided to build a similar language.`,g,a,F="Implementation",x,r,B=`The language was implemented using Antlr4 and Python. The language consists of a begin and end block,
-variables are declared in a similar style as JavaScript but are strongly typed like python. It consists
-of only two types, float and string. It supports both traditional style of loops for and while, and
-the for loop also supports the in keyword to iterate over a range of numbers. It supports printing multiple strings
-and variables with a single keyword. An example code in BroLang looks like this:`,k,p,H,C=`dawg
- say "Hello World";
-
- my g a =3;
- my g b =0;
-
- let him cook(b <5){
- say b;
-
- yolo(b == a) pls {
- say "b is equal to a";
- } sus {
- say "b is not equal to a";
- }
-
- b = b +1;
- }
-
-gg`,h,_,c="Fun Facts",s,M,e='
I single handedly built the language and the interpreter for it.
The language was built in a span of 2 weeks.
The lexer for the language was heavily inspired by the C example for Antlr4.
';return{c(){n=u("h2"),n.textContent=I,v=m(),l=u("p"),l.innerHTML=S,g=m(),a=u("h2"),a.textContent=F,x=m(),r=u("p"),r.innerHTML=B,k=m(),p=u("pre"),H=new U(!1),h=m(),_=u("h2"),_.textContent=c,s=m(),M=u("ul"),M.innerHTML=e,this.h()},l(o){n=d(o,"H2",{"data-svelte-h":!0}),f(n)!=="svelte-wdx45u"&&(n.textContent=I),v=b(o),l=d(o,"P",{"data-svelte-h":!0}),f(l)!=="svelte-1l78bqo"&&(l.innerHTML=S),g=b(o),a=d(o,"H2",{"data-svelte-h":!0}),f(a)!=="svelte-1y7y6hs"&&(a.textContent=F),x=b(o),r=d(o,"P",{"data-svelte-h":!0}),f(r)!=="svelte-176aww7"&&(r.innerHTML=B),k=b(o),p=d(o,"PRE",{class:!0});var P=G(p);H=J(P,!1),P.forEach(t),h=b(o),_=d(o,"H2",{"data-svelte-h":!0}),f(_)!=="svelte-1anz3rk"&&(_.textContent=c),s=b(o),M=d(o,"UL",{"data-svelte-h":!0}),f(M)!=="svelte-1i8whd7"&&(M.innerHTML=e),this.h()},h(){H.a=null,D(p,"class","language-brolang")},m(o,P){i(o,n,P),i(o,v,P),i(o,l,P),i(o,g,P),i(o,a,P),i(o,x,P),i(o,r,P),i(o,k,P),i(o,p,P),H.m(C,p),i(o,h,P),i(o,_,P),i(o,s,P),i(o,M,P)},p:j,i:j,o:j,d(o){o&&(t(n),t(v),t(l),t(g),t(a),t(x),t(r),t(k),t(p),t(h),t(_),t(s),t(M))}}}const Z={name:"BroLang",year:2023,description:"A toy programming language built as a part of a submission for SER 502 (Programming Paradigms) at ASU.",thumbnail:"/mockups/bro-lang.avif",techs:["python","antlr4"],col:4,row:3,links:[{icon:"entypo-social:github",href:"https://github.com/Blakeinstein/BroLang",type:"Github"}],images:[{link:"/gallery/broLang/Declaration.avif",desc:"Declaration"},{link:"/gallery/broLang/Expression.avif",desc:"Expression"},{link:"/gallery/broLang/Loops.avif",desc:"Traditional Loops"},{link:"/gallery/broLang/ForLoops.avif",desc:"For Loops"},{link:"/gallery/broLang/Basic.avif",desc:"Basic"}]};class Y extends A{constructor(n){super(),E(this,n,null,V,z,{})}}const X=Object.freeze(Object.defineProperty({__proto__:null,default:Y,metadata:Z},Symbol.toStringTag,{value:"Module"}));function ee(T){let n,I="Background and Reasoning",v,l,S=`Chemical PFD was the project I pursued during my fellowship at IIT Bombay, under their FOSSEE initiative.
-The project was to build a simple chemical process flow diagram tool to enable Chemical Engineering labs primarly at IIT
-Bombay to construct PFDs for their experiments. The future scope of the tool included the ability to simulate the PFDs
-and determine various chemical process metrics.`,g,a,F="Implementation",x,r,B=`The project initially started with a pre-lim requirement to build a simple tool to draw a network of circles
-to demonstrate proficiency in PyQT.
-Like the pre-lim project, Chemical PFD was built using PyQt5 and Python. It also uses FMan’s Build System (FBS) to enable
-faster iterations with a more robust build process. I worked in a team of 2 in a Pair Programming process, with me focusing on the GUI elements and my teammate
-focusing on the diagram engine. The project was built in a span of 2 months.`,k,p,H="About FOSSEE",C,h,_=`FOSSEE (Free/Libre and Open Source Software for Education) project promotes the use of FLOSS tools to improve the quality of education in our country. We aim to reduce dependency on proprietary software in educational institutions. We encourage the use of FLOSS tools through various activities to ensure commercial software is replaced by equivalent FLOSS tools. We also develop new FLOSS tools and upgrade existing tools to meet requirements in academia and research.
-The FOSSEE project is part of the National Mission on Education through Information and Communication Technology (ICT), Ministry of Education (MoE), Government of India.`,c,s,M="Fun Facts",e,o,P="
Was coined the best software on the FOSSEE 2020 presentation panel.
The questions I wrote on StackOverflow while learning PyQt5 and FBS are my biggest contributors to my StackOverflow score.
This was my first professional experience, and it was paid 🎉.
";return{c(){n=u("h2"),n.textContent=I,v=m(),l=u("p"),l.textContent=S,g=m(),a=u("h2"),a.textContent=F,x=m(),r=u("p"),r.innerHTML=B,k=m(),p=u("h2"),p.textContent=H,C=m(),h=u("p"),h.innerHTML=_,c=m(),s=u("h2"),s.textContent=M,e=m(),o=u("ul"),o.innerHTML=P},l(w){n=d(w,"H2",{"data-svelte-h":!0}),f(n)!=="svelte-gzznsv"&&(n.textContent=I),v=b(w),l=d(w,"P",{"data-svelte-h":!0}),f(l)!=="svelte-pky0s0"&&(l.textContent=S),g=b(w),a=d(w,"H2",{"data-svelte-h":!0}),f(a)!=="svelte-1y7y6hs"&&(a.textContent=F),x=b(w),r=d(w,"P",{"data-svelte-h":!0}),f(r)!=="svelte-1exi7x8"&&(r.innerHTML=B),k=b(w),p=d(w,"H2",{"data-svelte-h":!0}),f(p)!=="svelte-a7lr1u"&&(p.textContent=H),C=b(w),h=d(w,"P",{"data-svelte-h":!0}),f(h)!=="svelte-odycjk"&&(h.innerHTML=_),c=b(w),s=d(w,"H2",{"data-svelte-h":!0}),f(s)!=="svelte-1anz3rk"&&(s.textContent=M),e=b(w),o=d(w,"UL",{"data-svelte-h":!0}),f(o)!=="svelte-19mur4c"&&(o.innerHTML=P)},m(w,L){i(w,n,L),i(w,v,L),i(w,l,L),i(w,g,L),i(w,a,L),i(w,x,L),i(w,r,L),i(w,k,L),i(w,p,L),i(w,C,L),i(w,h,L),i(w,c,L),i(w,s,L),i(w,e,L),i(w,o,L)},p:j,i:j,o:j,d(w){w&&(t(n),t(v),t(l),t(g),t(a),t(x),t(r),t(k),t(p),t(C),t(h),t(c),t(s),t(e),t(o))}}}const te={name:"Chemical-PFD",year:2020,description:"Part of my fellowship at Indian Institute of Technology, Bombay. A simple chemical process flow diagram builder built with PyQt5.",thumbnail:"/mockups/chemical-pfd.avif",techs:["python","pyqt5"],col:3,row:1,links:[{icon:"entypo-social:github",href:"https://github.com/FOSSEE/Chemical-PFD",type:"Github"},{icon:"ri:file-pdf-2-line",href:"https://static.fossee.in/fossee/fellowship2020/Fellowship-Reports/Python/Python-Chemical/Python-Chemical-RishikeshAnand-FSF-2020.pdf",type:"Report"}],layout:!1,images:[{link:"/gallery/chemical-pfd/pfd-windows.avif",desc:"Checmical PFD on windows."},{link:"/gallery/chemical-pfd/pfd-mac.avif",desc:"Checmical PFD on mac."},{link:"/gallery/chemical-pfd/fossee.avif",desc:"FOSSEE Group at IIT Bombay."}],inverted:!0};class ie extends A{constructor(n){super(),E(this,n,null,ee,z,{})}}const oe=Object.freeze(Object.defineProperty({__proto__:null,default:ie,metadata:te},Symbol.toStringTag,{value:"Module"}));function ne(T){let n,I="Inspiration",v,l,S=`While working on Bloop, I found out about FuseJS and
-subsequently fuse-swift both built by krisk.
-I realized that there was no such library for the rust ecosystem and decided to build a similar one; feeling that
-it could suplement the use case for Rust in building desktop/native applications.`,g,a,F="Implementation",x,r,B=`Fuse-Rust is built using the bitap algorithm for calculating text
-similarity. It also contains an opt-in multi-threaded implementation using crossbeam.`,k,p,H=`Additionally I included an actual GUI example using
-iced-rs.`,C,h,_="Fun Facts",c,s,M="
I learnt about multibyte characters for the first time here.
I learnt about the concept of graphemes in swift programming language.
I learnt about the bitap algorithm and how it can be used to calculate text similarity.
";return{c(){n=u("h2"),n.textContent=I,v=m(),l=u("p"),l.innerHTML=S,g=m(),a=u("h2"),a.textContent=F,x=m(),r=u("p"),r.innerHTML=B,k=m(),p=u("p"),p.innerHTML=H,C=m(),h=u("h2"),h.textContent=_,c=m(),s=u("ul"),s.innerHTML=M},l(e){n=d(e,"H2",{"data-svelte-h":!0}),f(n)!=="svelte-wdx45u"&&(n.textContent=I),v=b(e),l=d(e,"P",{"data-svelte-h":!0}),f(l)!=="svelte-1b3k6rr"&&(l.innerHTML=S),g=b(e),a=d(e,"H2",{"data-svelte-h":!0}),f(a)!=="svelte-1y7y6hs"&&(a.textContent=F),x=b(e),r=d(e,"P",{"data-svelte-h":!0}),f(r)!=="svelte-r6l5c1"&&(r.innerHTML=B),k=b(e),p=d(e,"P",{"data-svelte-h":!0}),f(p)!=="svelte-h9xsfq"&&(p.innerHTML=H),C=b(e),h=d(e,"H2",{"data-svelte-h":!0}),f(h)!=="svelte-1anz3rk"&&(h.textContent=_),c=b(e),s=d(e,"UL",{"data-svelte-h":!0}),f(s)!=="svelte-17yphbl"&&(s.innerHTML=M)},m(e,o){i(e,n,o),i(e,v,o),i(e,l,o),i(e,g,o),i(e,a,o),i(e,x,o),i(e,r,o),i(e,k,o),i(e,p,o),i(e,C,o),i(e,h,o),i(e,c,o),i(e,s,o)},p:j,i:j,o:j,d(e){e&&(t(n),t(v),t(l),t(g),t(a),t(x),t(r),t(k),t(p),t(C),t(h),t(c),t(s))}}}const le={name:"Fuse-Rust",year:2021,featured:!0,description:"A fuzzy search library for the rust ecosystem, ideal for building friendly search bars.",thumbnail:"/mockups/fuse-rust.avif",techs:["rust"],col:4,row:1,links:[{icon:"entypo-social:github",href:"https://github.com/Blakeinstein/fuse-rust",type:"Github"},{icon:"vscode-icons:file-type-cargo",href:"https://crates.io/crates/fuse-rust",type:"Crates.io"},{icon:"fluent-mdl2:documentation",href:"https://docs.rs/fuse-rust/0.3.2/fuse_rust/",type:"Docs"}]};class ae extends A{constructor(n){super(),E(this,n,null,ne,z,{})}}const se=Object.freeze(Object.defineProperty({__proto__:null,default:ae,metadata:le},Symbol.toStringTag,{value:"Module"}));function re(T){let n,I="Inspiration and Design",v,l,S=`Learning from the mistakes I made in my old-portfolio, I started working on a new one.
-I had the opportunity to talk to alot of students in the UX department at Arizona State University and I also wanted
-to resolve the deep rooted navigational challenges. Even worse fireship had made a video on how to render a moon using ThreeJS.
-Which meant that my portfolio design was not unique anymore.`,g,a,F=`Starfield came out around the time I was working on the portfolio and as such the site went through a complete overhaul. The initial design was pretty much inspired by the design choices
-used in the game. However, moving forward I switched to a more brutalism inspired tone. The Sky Grew Darker by Tomasz Artur Bolek was the driver for the chosen color palette.
-I dropped the idea of including a 3d scene, and instead switched focus to working on the one you see.
-Heck I even made Rain postprocess filter for ThreeJS based on shaders written by Lucas Bebber in their article on CoDrops.
-I wish I can find a use case for it some other time.`,x,r,B="Implementation",k,p,H=`I dropped Astro, even though its great I really wanted to implement simple page navigations. I switched to SvelteKit, although
-in hindsight since I picked up the new transitions api for page transitions,
-I doubt the switch gave me actual benefits apart from some small cases of site interactivity. Maybe I might migrate to Astro again in the future.
-Learning Svelte and SvelteKit was a breeze, and I really enjoyed working with it (Thanks JoyOfCode!). I also used TailwindCSS
-for styling, moving away from much of the custom styles on my old website.`,C,h,_="Fun Facts",c,s,M='
Most of the images on the site were made when the work on the page was finished (even after I wrote this line, fingers crossed).
I used placeholder images from http.dog for the thumbnails, particularly the 204 image.
The backdrop went through several iterations, and at one time featured a noise texture similar to the one used in Arc.net.
';return{c(){n=u("h2"),n.textContent=I,v=m(),l=u("p"),l.innerHTML=S,g=m(),a=u("p"),a.innerHTML=F,x=m(),r=u("h2"),r.textContent=B,k=m(),p=u("p"),p.innerHTML=H,C=m(),h=u("h2"),h.textContent=_,c=m(),s=u("ul"),s.innerHTML=M},l(e){n=d(e,"H2",{"data-svelte-h":!0}),f(n)!=="svelte-1vlasiz"&&(n.textContent=I),v=b(e),l=d(e,"P",{"data-svelte-h":!0}),f(l)!=="svelte-7cqijb"&&(l.innerHTML=S),g=b(e),a=d(e,"P",{"data-svelte-h":!0}),f(a)!=="svelte-w7si42"&&(a.innerHTML=F),x=b(e),r=d(e,"H2",{"data-svelte-h":!0}),f(r)!=="svelte-1y7y6hs"&&(r.textContent=B),k=b(e),p=d(e,"P",{"data-svelte-h":!0}),f(p)!=="svelte-hnpqz2"&&(p.innerHTML=H),C=b(e),h=d(e,"H2",{"data-svelte-h":!0}),f(h)!=="svelte-1anz3rk"&&(h.textContent=_),c=b(e),s=d(e,"UL",{"data-svelte-h":!0}),f(s)!=="svelte-1o1h4sf"&&(s.innerHTML=M)},m(e,o){i(e,n,o),i(e,v,o),i(e,l,o),i(e,g,o),i(e,a,o),i(e,x,o),i(e,r,o),i(e,k,o),i(e,p,o),i(e,C,o),i(e,h,o),i(e,c,o),i(e,s,o)},p:j,i:j,o:j,d(e){e&&(t(n),t(v),t(l),t(g),t(a),t(x),t(r),t(k),t(p),t(C),t(h),t(c),t(s))}}}const pe={name:"New portfolio",year:2023,featured:!0,description:"You are here! Built with SvelteKit, TailwindCSS, and TypeScript.",longDescription:"You are here! Built with SvelteKit, TailwindCSS, and TypeScript.",thumbnail:"/mockups/new-portfolio.avif",techs:["sveltekit","typescript","tailwindcss"],col:1,row:2,links:[{icon:"entypo-social:github",href:"https://github.com/Blakeinstein/portfolio",type:"Github"},{icon:"mdi:web",href:"https://blaine.is-a.dev",type:"Webpage"}]};class ce extends A{constructor(n){super(),E(this,n,null,re,z,{})}}const he=Object.freeze(Object.defineProperty({__proto__:null,default:ce,metadata:pe},Symbol.toStringTag,{value:"Module"}));function ue(T){let n,I="Design Ideas",v,l,S=`The design of the website was inspired by the album art for the track ”Light Mind”
-by Krosia. I deeply adore the vastness of outer space, and spacewave has been my
-goto genre to achieve that state of mind. I found Krosia from his song Sunlight,
-but the album art for Light Mind was what lived in my head rent free.`,g,a,F='',x,r,B="Implementation",k,p,H=`I originally built the website with just Typescript, ThreeJS and html, with Navigo used for routing and lit element for constructing page contents.
-I later migrated to Astro for the sake of SEO and performance. I additionally used SwupJS to implement seamless page transitions due to the fact that I had
-a 3d scene used for the background. I am extremely proud of the micro-interactions I implemented, like the gooey effect on the social links, and the
-contact form error messages. I also used blobity to implement the blob like cursor on desktop views. The website is hosted on Github Pages,
-and the source code is available on Github.`,C,h,_="Fun Facts",c,s,M='
It took me ages to settle on a design for the website. But once I found the album art for Light Mind, I knew I had to use it.
The overall website was built in a single day.
I never bothered to update the content of the website, the info was outdated the day I made it publically available.
I was able to obtain a free is-a.dev domain under my name, which I used for the website.
';return{c(){n=u("h2"),n.textContent=I,v=m(),l=u("p"),l.innerHTML=S,g=m(),a=u("a"),a.innerHTML=F,x=m(),r=u("h2"),r.textContent=B,k=m(),p=u("p"),p.innerHTML=H,C=m(),h=u("h2"),h.textContent=_,c=m(),s=u("ul"),s.innerHTML=M,this.h()},l(e){n=d(e,"H2",{"data-svelte-h":!0}),f(n)!=="svelte-xxwtas"&&(n.textContent=I),v=b(e),l=d(e,"P",{"data-svelte-h":!0}),f(l)!=="svelte-1jmglh4"&&(l.innerHTML=S),g=b(e),a=d(e,"A",{href:!0,style:!0,"data-svelte-h":!0}),f(a)!=="svelte-1ygvoe0"&&(a.innerHTML=F),x=b(e),r=d(e,"H2",{"data-svelte-h":!0}),f(r)!=="svelte-1y7y6hs"&&(r.textContent=B),k=b(e),p=d(e,"P",{"data-svelte-h":!0}),f(p)!=="svelte-1k0q4ni"&&(p.innerHTML=H),C=b(e),h=d(e,"H2",{"data-svelte-h":!0}),f(h)!=="svelte-1anz3rk"&&(h.textContent=_),c=b(e),s=d(e,"UL",{"data-svelte-h":!0}),f(s)!=="svelte-18i5xmd"&&(s.innerHTML=M),this.h()},h(){D(a,"href","https://www.last.fm/music/Krosia/_/Light+Mind"),W(a,"float","right")},m(e,o){i(e,n,o),i(e,v,o),i(e,l,o),i(e,g,o),i(e,a,o),i(e,x,o),i(e,r,o),i(e,k,o),i(e,p,o),i(e,C,o),i(e,h,o),i(e,c,o),i(e,s,o)},p:j,i:j,o:j,d(e){e&&(t(n),t(v),t(l),t(g),t(a),t(x),t(r),t(k),t(p),t(C),t(h),t(c),t(s))}}}const de={name:"Old Portfolio",year:2019,description:"Originally built in Vanilla + LitElement, this was my first portfolio website. It was later rebuilt with Astro",thumbnail:"/gallery/oldPortfolio/Home.avif",techs:["typescript","lit-element","html","astro","sass","three"],col:1,row:1,links:[{icon:"entypo-social:github",href:"https://github.com/Blakeinstein/old-portfolio/",type:"Github"},{icon:"mdi:web",href:"https://old.blaine.vip",type:"Webpage"}],images:[{link:"/gallery/oldPortfolio/Home.avif",desc:"Home page"},{link:"/gallery/oldPortfolio/About.avif",desc:"About page"},{link:"/gallery/oldPortfolio/Social.avif",desc:"Socials page"},{link:"/gallery/oldPortfolio/Contact.avif",desc:"Contact page"},{link:"/gallery/oldPortfolio/Projects.avif",desc:"Projects page"}]};class fe extends A{constructor(n){super(),E(this,n,null,ue,z,{})}}const me=Object.freeze(Object.defineProperty({__proto__:null,default:fe,metadata:de},Symbol.toStringTag,{value:"Module"}));function be(T){let n,I="Inspiration",v,l,S=`I came to the US for my Master’s degree and quickly realized that the fluctuating conversion rates / remittance cost for INR to
-USD is a big problem for students like me. I wanted to build a simple tool that would help me track the conversion rates across multiple
-proivders and have it maintain a history to help me make better decisions.`,g,a,F="Implementation",x,r,B=`A simple remittance tracker built with the frontend built with NextJS and DaisyUI with the data spider built
-using Python and Scrapy. The frontend caches requests for 1 hour to avoid having to hit my server too often.
-The data spider is hosted on Zyte (formerly ScrapingHub) and runs every hour to update the data.`,k,p,H="Fun Facts",C,h,_='
I never came up with a LOGO for the project, I just ended up using the first svg result with RT.
I tried a bunch of charting library but ended up using Chart.js.
';return{c(){n=u("h2"),n.textContent=I,v=m(),l=u("p"),l.textContent=S,g=m(),a=u("h2"),a.textContent=F,x=m(),r=u("p"),r.innerHTML=B,k=m(),p=u("h2"),p.textContent=H,C=m(),h=u("ul"),h.innerHTML=_},l(c){n=d(c,"H2",{"data-svelte-h":!0}),f(n)!=="svelte-wdx45u"&&(n.textContent=I),v=b(c),l=d(c,"P",{"data-svelte-h":!0}),f(l)!=="svelte-l7es8z"&&(l.textContent=S),g=b(c),a=d(c,"H2",{"data-svelte-h":!0}),f(a)!=="svelte-1y7y6hs"&&(a.textContent=F),x=b(c),r=d(c,"P",{"data-svelte-h":!0}),f(r)!=="svelte-1xnpjch"&&(r.innerHTML=B),k=b(c),p=d(c,"H2",{"data-svelte-h":!0}),f(p)!=="svelte-1anz3rk"&&(p.textContent=H),C=b(c),h=d(c,"UL",{"data-svelte-h":!0}),f(h)!=="svelte-1x3tiwt"&&(h.innerHTML=_)},m(c,s){i(c,n,s),i(c,v,s),i(c,l,s),i(c,g,s),i(c,a,s),i(c,x,s),i(c,r,s),i(c,k,s),i(c,p,s),i(c,C,s),i(c,h,s)},p:j,i:j,o:j,d(c){c&&(t(n),t(v),t(l),t(g),t(a),t(x),t(r),t(k),t(p),t(C),t(h))}}}const we={name:"Remit-Tracker",year:2022,description:"A simple remittance tracker built with the frontend built with NextJS and DaisyUI and the data spider built with Python and Scrapy.",thumbnail:"/mockups/remit-tracker.avif",techs:["nextjs","tailwindcss","python","zyte"],col:3,row:2,links:[{icon:"entypo-social:github",href:"https://remit.blaine.vip/",type:"Github"},{icon:"mdi:web",href:"https://remit.blaine.vip",type:"Webpage"}],images:[{link:"/gallery/remit-tracker/zyte.avif",desc:"Zyte Dashboard"},{link:"/gallery/remit-tracker/zyte-usage.avif",desc:"Zyte Usage"}]};class ve extends A{constructor(n){super(),E(this,n,null,be,z,{})}}const ye=Object.freeze(Object.defineProperty({__proto__:null,default:ve,metadata:we},Symbol.toStringTag,{value:"Module"})),Te={svelte:{name:"Svelte",icon:"simple-icons:svelte",color:"#ff3e00"},sveltekit:{name:"SvelteKit",icon:"simple-icons:svelte",color:"#ff3e00"},typescript:{name:"TypeScript",icon:"simple-icons:typescript",color:"#007acc"},python:{name:"Python",icon:"simple-icons:python",color:"#3776ab"},rust:{name:"Rust",icon:"simple-icons:rust",color:"#000000"},nextjs:{name:"NextJS",icon:"teenyicons:nextjs-outline",color:"#000000"},tauri:{name:"Tauri",icon:"simple-icons:tauri",color:"#000000"},pyqt5:{name:"PyQt5",icon:"simple-icons:qt",color:"#41cd52"},scrapy:{name:"Scrapy",icon:"simple-icons:scrapy",color:"#000000"},"lit-element":{name:"LitElement",icon:"simple-icons:lit",color:"#000000"},html:{name:"HTML",icon:"simple-icons:html5",color:"#e34f26"},tailwindcss:{name:"TailwindCSS",icon:"simple-icons:tailwindcss",color:"#06b6d4"},antlr4:{name:"ANTLR4",icon:"file-icons:antlr",color:"#e44a32"},sass:{name:"Sass",icon:"simple-icons:sass",color:"#cc6699"},astro:{name:"Astro",icon:"simple-icons:astro",color:"#000000"},three:{name:"ThreeJS",icon:"logos:threejs",color:"#000000"},zyte:{name:"Zyte",icon:"simple-icons:zyte",color:"#b02cce"}},Ie=async()=>{var I;const T=[],n=Object.assign({"/src/lib/data/projects/bloop.svx":Q,"/src/lib/data/projects/bro-lang.svx":X,"/src/lib/data/projects/chemical-pfd.svx":oe,"/src/lib/data/projects/fuse-rust.svx":se,"/src/lib/data/projects/new-portfolio.svx":he,"/src/lib/data/projects/old-portfolio.svx":me,"/src/lib/data/projects/remit-tracker.svx":ye});for(const v in n){const l=n[v],S=(I=v.split("/").at(-1))==null?void 0:I.replace(".svx","");if(l&&typeof l=="object"&&"metadata"in l&&S){const a={...l.metadata,slug:S};T.push(a)}}return T};export{Te as T,Q as _,Ce as a,X as b,oe as c,se as d,_e as e,he as f,Ie as g,me as h,ye as i};
diff --git a/_app/immutable/chunks/ProjectData.exPwPHmD.js b/_app/immutable/chunks/ProjectData.exPwPHmD.js
new file mode 100644
index 0000000..2afb7f9
--- /dev/null
+++ b/_app/immutable/chunks/ProjectData.exPwPHmD.js
@@ -0,0 +1,75 @@
+import{H as N}from"./control.pJ1mnnAb.js";import{s as E,e as h,a as f,c,O as u,g as b,i as t,n as B,f as e,H as K,b as Q,D as V,w as $,K as Z}from"./scheduler.fpbB-dMe.js";import{S as q,i as D}from"./index.htcIGCkn.js";function Fe(S){return(S==null?void 0:S.length)!==void 0?S:Array.from(S)}function Be(S,o){throw new N(S,o)}new TextEncoder;function Y(S){let o,L="Inspiration",y,l,H=`I saw Boop by Ivan Mathy at Product Hunt back in 2020. I loved the idea of a simple scratchpad
+that could be used to run quick macros on text. I had been using online tools so much and I felt boop was exactly what I needed.
+Having a handy tool to quickly base64 encode/decode, url encode/decode, json pretty print, etc. was a great idea.
+I also wanted to build a project in Rust and this seemed like a good fit.`,x,a,z='A gist for an example script that I wrote to convert text to owo speak is available here.',k,r,O="Implementation",C,p,M=`The initial implementation used a Custom WebView using a custom fork of Boscop’s 2019 implementation
+of web-view bindings for Rust (It has since been refactored to a much more cleaner state and
+contains the features I implemented), which resolved a few issues with frameless windows like resizing and moving the window.`,_,d,I=`I intended the app to be inter-compatible with the original Boop app, which used scripts written in JS. This inspired me to use
+a webview so that I could invoke JS scripts on the text. Initial implementation was using CodeMirror as the editor.`,m,s,P=`I later picked the project back up in 2021 and refactored the code to use Tauri instead, and replaced
+CodeMirror with AceEditor for a huge performance boost. I also added a few more features like customizing the stylesheet via
+themes, and introduced the concept the editor being able to retain the pasted information.`,i,n,j="Fun Facts",v,T,R="
I learnt how to write Context Free Grammers to implement the syntax highlighting for the editor.
I learnt WinRT the native windows runtime to implement the inital version.
I learnt how to dynamically import JS script files that export variables.
";return{c(){o=h("h2"),o.textContent=L,y=f(),l=h("p"),l.innerHTML=H,x=f(),a=h("p"),a.innerHTML=z,k=f(),r=h("h2"),r.textContent=O,C=f(),p=h("p"),p.innerHTML=M,_=f(),d=h("p"),d.textContent=I,m=f(),s=h("p"),s.innerHTML=P,i=f(),n=h("h2"),n.textContent=j,v=f(),T=h("ul"),T.innerHTML=R},l(g){o=c(g,"H2",{"data-svelte-h":!0}),u(o)!=="svelte-wdx45u"&&(o.textContent=L),y=b(g),l=c(g,"P",{"data-svelte-h":!0}),u(l)!=="svelte-ktlkcx"&&(l.innerHTML=H),x=b(g),a=c(g,"P",{"data-svelte-h":!0}),u(a)!=="svelte-10h34lk"&&(a.innerHTML=z),k=b(g),r=c(g,"H2",{"data-svelte-h":!0}),u(r)!=="svelte-1y7y6hs"&&(r.textContent=O),C=b(g),p=c(g,"P",{"data-svelte-h":!0}),u(p)!=="svelte-1mgp73h"&&(p.innerHTML=M),_=b(g),d=c(g,"P",{"data-svelte-h":!0}),u(d)!=="svelte-1j1qu85"&&(d.textContent=I),m=b(g),s=c(g,"P",{"data-svelte-h":!0}),u(s)!=="svelte-147pncy"&&(s.innerHTML=P),i=b(g),n=c(g,"H2",{"data-svelte-h":!0}),u(n)!=="svelte-1anz3rk"&&(n.textContent=j),v=b(g),T=c(g,"UL",{"data-svelte-h":!0}),u(T)!=="svelte-1e6d88r"&&(T.innerHTML=R)},m(g,F){t(g,o,F),t(g,y,F),t(g,l,F),t(g,x,F),t(g,a,F),t(g,k,F),t(g,r,F),t(g,C,F),t(g,p,F),t(g,_,F),t(g,d,F),t(g,m,F),t(g,s,F),t(g,i,F),t(g,n,F),t(g,v,F),t(g,T,F)},p:B,i:B,o:B,d(g){g&&(e(o),e(y),e(l),e(x),e(a),e(k),e(r),e(C),e(p),e(_),e(d),e(m),e(s),e(i),e(n),e(v),e(T))}}}const X={name:"Bloop",year:2020,description:"A cross-platform simple hackable scratchpad built with Rust and Tauri.",thumbnail:"/mockups/bloop.avif",techs:["svelte","typescript","tauri","sass"],col:2,row:3,links:[{icon:"entypo-social:github",href:"https://github.com/Blakeinstein/Bloop",type:"Github"}],images:[{link:"/gallery/bloop/demo.avif",desc:"Bloop on windows."},{link:"/gallery/bloop/demo-mac.avif",desc:"Bloop on macos."},{link:"/gallery/bloop/owoifier.avif",desc:"An example Bloop Script."}]};class ee extends q{constructor(o){super(),D(this,o,null,Y,E,{})}}const te=Object.freeze(Object.defineProperty({__proto__:null,default:ee,metadata:X},Symbol.toStringTag,{value:"Module"}));function ie(S){let o,L="Inspiration",y,l,H=`The final project of SER502 during my Masters at ASU was to build our own programming language.
+I had recently found out about BhaiLang, a toy programming language
+and decided to build a similar language.`,x,a,z="Implementation",k,r,O=`The language was implemented using Antlr4 and Python. The language consists of a begin and end block,
+variables are declared in a similar style as JavaScript but are strongly typed like python. It consists
+of only two types, float and string. It supports both traditional style of loops for and while, and
+the for loop also supports the in keyword to iterate over a range of numbers. It supports printing multiple strings
+and variables with a single keyword. An example code in BroLang looks like this:`,C,p,M,_=`dawg
+ say "Hello World";
+
+ my g a =3;
+ my g b =0;
+
+ let him cook(b <5){
+ say b;
+
+ yolo(b == a) pls {
+ say "b is equal to a";
+ } sus {
+ say "b is not equal to a";
+ }
+
+ b = b +1;
+ }
+
+gg`,d,I,m="Fun Facts",s,P,i='
I single handedly built the language and the interpreter for it.
The language was built in a span of 2 weeks.
The lexer for the language was heavily inspired by the C example for Antlr4.
';return{c(){o=h("h2"),o.textContent=L,y=f(),l=h("p"),l.innerHTML=H,x=f(),a=h("h2"),a.textContent=z,k=f(),r=h("p"),r.innerHTML=O,C=f(),p=h("pre"),M=new K(!1),d=f(),I=h("h2"),I.textContent=m,s=f(),P=h("ul"),P.innerHTML=i,this.h()},l(n){o=c(n,"H2",{"data-svelte-h":!0}),u(o)!=="svelte-wdx45u"&&(o.textContent=L),y=b(n),l=c(n,"P",{"data-svelte-h":!0}),u(l)!=="svelte-1l78bqo"&&(l.innerHTML=H),x=b(n),a=c(n,"H2",{"data-svelte-h":!0}),u(a)!=="svelte-1y7y6hs"&&(a.textContent=z),k=b(n),r=c(n,"P",{"data-svelte-h":!0}),u(r)!=="svelte-176aww7"&&(r.innerHTML=O),C=b(n),p=c(n,"PRE",{class:!0});var j=Q(p);M=V(j,!1),j.forEach(e),d=b(n),I=c(n,"H2",{"data-svelte-h":!0}),u(I)!=="svelte-1anz3rk"&&(I.textContent=m),s=b(n),P=c(n,"UL",{"data-svelte-h":!0}),u(P)!=="svelte-1i8whd7"&&(P.innerHTML=i),this.h()},h(){M.a=null,$(p,"class","language-brolang")},m(n,j){t(n,o,j),t(n,y,j),t(n,l,j),t(n,x,j),t(n,a,j),t(n,k,j),t(n,r,j),t(n,C,j),t(n,p,j),M.m(_,p),t(n,d,j),t(n,I,j),t(n,s,j),t(n,P,j)},p:B,i:B,o:B,d(n){n&&(e(o),e(y),e(l),e(x),e(a),e(k),e(r),e(C),e(p),e(d),e(I),e(s),e(P))}}}const ne={name:"BroLang",year:2023,description:"A toy programming language built as a part of a submission for SER 502 (Programming Paradigms) at ASU.",thumbnail:"/mockups/bro-lang.avif",techs:["python","antlr4"],col:4,row:3,links:[{icon:"entypo-social:github",href:"https://github.com/Blakeinstein/BroLang",type:"Github"}],images:[{link:"/gallery/broLang/Declaration.avif",desc:"Declaration"},{link:"/gallery/broLang/Expression.avif",desc:"Expression"},{link:"/gallery/broLang/Loops.avif",desc:"Traditional Loops"},{link:"/gallery/broLang/ForLoops.avif",desc:"For Loops"},{link:"/gallery/broLang/Basic.avif",desc:"Basic"}]};class oe extends q{constructor(o){super(),D(this,o,null,ie,E,{})}}const le=Object.freeze(Object.defineProperty({__proto__:null,default:oe,metadata:ne},Symbol.toStringTag,{value:"Module"}));function ae(S){let o,L="Background and Reasoning",y,l,H=`Chemical PFD was the project I pursued during my fellowship at IIT Bombay, under their FOSSEE initiative.
+The project was to build a simple chemical process flow diagram tool to enable Chemical Engineering labs primarly at IIT
+Bombay to construct PFDs for their experiments. The future scope of the tool included the ability to simulate the PFDs
+and determine various chemical process metrics.`,x,a,z="Implementation",k,r,O=`The project initially started with a pre-lim requirement to build a simple tool to draw a network of circles
+to demonstrate proficiency in PyQT.
+Like the pre-lim project, Chemical PFD was built using PyQt5 and Python. It also uses FMan’s Build System (FBS) to enable
+faster iterations with a more robust build process. I worked in a team of 2 in a Pair Programming process, with me focusing on the GUI elements and my teammate
+focusing on the diagram engine. The project was built in a span of 2 months.`,C,p,M="About FOSSEE",_,d,I=`FOSSEE (Free/Libre and Open Source Software for Education) project promotes the use of FLOSS tools to improve the quality of education in our country. We aim to reduce dependency on proprietary software in educational institutions. We encourage the use of FLOSS tools through various activities to ensure commercial software is replaced by equivalent FLOSS tools. We also develop new FLOSS tools and upgrade existing tools to meet requirements in academia and research.
+The FOSSEE project is part of the National Mission on Education through Information and Communication Technology (ICT), Ministry of Education (MoE), Government of India.`,m,s,P="Fun Facts",i,n,j="
Was coined the best software on the FOSSEE 2020 presentation panel.
The questions I wrote on StackOverflow while learning PyQt5 and FBS are my biggest contributors to my StackOverflow score.
This was my first professional experience, and it was paid 🎉.
";return{c(){o=h("h2"),o.textContent=L,y=f(),l=h("p"),l.textContent=H,x=f(),a=h("h2"),a.textContent=z,k=f(),r=h("p"),r.innerHTML=O,C=f(),p=h("h2"),p.textContent=M,_=f(),d=h("p"),d.innerHTML=I,m=f(),s=h("h2"),s.textContent=P,i=f(),n=h("ul"),n.innerHTML=j},l(v){o=c(v,"H2",{"data-svelte-h":!0}),u(o)!=="svelte-gzznsv"&&(o.textContent=L),y=b(v),l=c(v,"P",{"data-svelte-h":!0}),u(l)!=="svelte-pky0s0"&&(l.textContent=H),x=b(v),a=c(v,"H2",{"data-svelte-h":!0}),u(a)!=="svelte-1y7y6hs"&&(a.textContent=z),k=b(v),r=c(v,"P",{"data-svelte-h":!0}),u(r)!=="svelte-1exi7x8"&&(r.innerHTML=O),C=b(v),p=c(v,"H2",{"data-svelte-h":!0}),u(p)!=="svelte-a7lr1u"&&(p.textContent=M),_=b(v),d=c(v,"P",{"data-svelte-h":!0}),u(d)!=="svelte-odycjk"&&(d.innerHTML=I),m=b(v),s=c(v,"H2",{"data-svelte-h":!0}),u(s)!=="svelte-1anz3rk"&&(s.textContent=P),i=b(v),n=c(v,"UL",{"data-svelte-h":!0}),u(n)!=="svelte-19mur4c"&&(n.innerHTML=j)},m(v,T){t(v,o,T),t(v,y,T),t(v,l,T),t(v,x,T),t(v,a,T),t(v,k,T),t(v,r,T),t(v,C,T),t(v,p,T),t(v,_,T),t(v,d,T),t(v,m,T),t(v,s,T),t(v,i,T),t(v,n,T)},p:B,i:B,o:B,d(v){v&&(e(o),e(y),e(l),e(x),e(a),e(k),e(r),e(C),e(p),e(_),e(d),e(m),e(s),e(i),e(n))}}}const se={name:"Chemical-PFD",year:2020,description:"Part of my fellowship at Indian Institute of Technology, Bombay. A simple chemical process flow diagram builder built with PyQt5.",thumbnail:"/mockups/chemical-pfd.avif",techs:["python","pyqt5"],col:3,row:1,links:[{icon:"entypo-social:github",href:"https://github.com/FOSSEE/Chemical-PFD",type:"Github"},{icon:"ri:file-pdf-2-line",href:"https://static.fossee.in/fossee/fellowship2020/Fellowship-Reports/Python/Python-Chemical/Python-Chemical-RishikeshAnand-FSF-2020.pdf",type:"Report"}],layout:!1,images:[{link:"/gallery/chemical-pfd/pfd-windows.avif",desc:"Checmical PFD on windows."},{link:"/gallery/chemical-pfd/pfd-mac.avif",desc:"Checmical PFD on mac."},{link:"/gallery/chemical-pfd/fossee.avif",desc:"FOSSEE Group at IIT Bombay."}],inverted:!0};class re extends q{constructor(o){super(),D(this,o,null,ae,E,{})}}const pe=Object.freeze(Object.defineProperty({__proto__:null,default:re,metadata:se},Symbol.toStringTag,{value:"Module"}));function he(S){let o,L="Background",y,l,H=`The project was sponsored by the US Department of Justice, to help death investigators, forensics experts
+and researchers to understand indicators on bones to make decisions on if the victim was abused or not.`,x,a,z="Solution",k,r,O=`The project is split into multiple parts, one part is the forensics lab in ASU’s Math and Natural Sciences department handling scanning
+bone models using an industrial 3d scanner, making notes on indicators present in the bones and uploading the data to the platform. These
+serve as the exemplar models to be used for education and comparison.`,C,p,M=`Another part is the digital platform, built with VueJS, Spring and GraphQL. The platform allows researchers and investigators to
+collaborate on investigations in social media style, with the ability to upload and share exemplar models, make notes on indicators and
+explore multiple studies including several models at the same time.`,_,d,I=`The last part is a machine learning model to be built later down in the pipeline once the digital platform is fully available, and has gone
+through a few usability workshops. The model will be trained on the data from the platform to be able to predict if a victim was abused or not.`,m,s,P="My part",i,n,j="Me and my team worked on the digital platform, ideating features, building the frontend and backend, and deploying the platform.",v,T,R=`
I spearheaded the annotation features, allowing users to select regions on the bone models and make notes on them.
I also worked on the deployment of the platform, setting up the CI/CD pipeline to generate builds and the automated script to
+deploy the platform to lab’s servers.
I was responsible for the codebase and the GraphQL schema implementation, aiming for high performance and scalability.
`,g,F,J="Fun Facts",G,U,W="
I coined the term Atlas Engine for the study explorer; The entire project is called Bone Atlas, and I am proud to say that the name stuck.
The platform initially was built with Neo4J, which was very performant, but we had to switch to MongoDB because I was the only one with knowledge on Neo4J.
All user requirements and flows were workshopped in the lab by the team with a constant feedback loop with the lab’s researchers and investigators.
";return{c(){o=h("h2"),o.textContent=L,y=f(),l=h("p"),l.textContent=H,x=f(),a=h("h2"),a.textContent=z,k=f(),r=h("p"),r.textContent=O,C=f(),p=h("p"),p.textContent=M,_=f(),d=h("p"),d.textContent=I,m=f(),s=h("h2"),s.textContent=P,i=f(),n=h("p"),n.textContent=j,v=f(),T=h("ol"),T.innerHTML=R,g=f(),F=h("h2"),F.textContent=J,G=f(),U=h("ul"),U.innerHTML=W},l(w){o=c(w,"H2",{"data-svelte-h":!0}),u(o)!=="svelte-1c47mae"&&(o.textContent=L),y=b(w),l=c(w,"P",{"data-svelte-h":!0}),u(l)!=="svelte-px30sk"&&(l.textContent=H),x=b(w),a=c(w,"H2",{"data-svelte-h":!0}),u(a)!=="svelte-1nao2z5"&&(a.textContent=z),k=b(w),r=c(w,"P",{"data-svelte-h":!0}),u(r)!=="svelte-nh2on7"&&(r.textContent=O),C=b(w),p=c(w,"P",{"data-svelte-h":!0}),u(p)!=="svelte-1hyiiju"&&(p.textContent=M),_=b(w),d=c(w,"P",{"data-svelte-h":!0}),u(d)!=="svelte-ysb02c"&&(d.textContent=I),m=b(w),s=c(w,"H2",{"data-svelte-h":!0}),u(s)!=="svelte-fgz32f"&&(s.textContent=P),i=b(w),n=c(w,"P",{"data-svelte-h":!0}),u(n)!=="svelte-1npazcr"&&(n.textContent=j),v=b(w),T=c(w,"OL",{"data-svelte-h":!0}),u(T)!=="svelte-1g5veu5"&&(T.innerHTML=R),g=b(w),F=c(w,"H2",{"data-svelte-h":!0}),u(F)!=="svelte-1anz3rk"&&(F.textContent=J),G=b(w),U=c(w,"UL",{"data-svelte-h":!0}),u(U)!=="svelte-14j0jc4"&&(U.innerHTML=W)},m(w,A){t(w,o,A),t(w,y,A),t(w,l,A),t(w,x,A),t(w,a,A),t(w,k,A),t(w,r,A),t(w,C,A),t(w,p,A),t(w,_,A),t(w,d,A),t(w,m,A),t(w,s,A),t(w,i,A),t(w,n,A),t(w,v,A),t(w,T,A),t(w,g,A),t(w,F,A),t(w,G,A),t(w,U,A)},p:B,i:B,o:B,d(w){w&&(e(o),e(y),e(l),e(x),e(a),e(k),e(r),e(C),e(p),e(_),e(d),e(m),e(s),e(i),e(n),e(v),e(T),e(g),e(F),e(G),e(U))}}}const ce={name:"Elderabuse",year:2023,description:"A digital platform enabling researchers and investigators to make decisions on abuse cases..",thumbnail:"/mockups/elderabuse.avif",techs:["vuejs","tailwindcss","spring","graphql"],col:3,row:3,images:[{link:"/gallery/elderabuse/selection.avif",desc:"Selecting regions on the bone models"},{link:"/gallery/elderabuse/about.avif",desc:"The project proposal"}],inverted:!0,featured:!0};class ue extends q{constructor(o){super(),D(this,o,null,he,E,{})}}const de=Object.freeze(Object.defineProperty({__proto__:null,default:ue,metadata:ce},Symbol.toStringTag,{value:"Module"}));function me(S){let o,L="Inspiration",y,l,H=`While working on Bloop, I found out about FuseJS and
+subsequently fuse-swift both built by krisk.
+I realized that there was no such library for the rust ecosystem and decided to build a similar one; feeling that
+it could suplement the use case for Rust in building desktop/native applications.`,x,a,z="Implementation",k,r,O=`Fuse-Rust is built using the bitap algorithm for calculating text
+similarity. It also contains an opt-in multi-threaded implementation using crossbeam.`,C,p,M=`Additionally I included an actual GUI example using
+iced-rs.`,_,d,I="Fun Facts",m,s,P="
I learnt about multibyte characters for the first time here.
I learnt about the concept of graphemes in swift programming language.
I learnt about the bitap algorithm and how it can be used to calculate text similarity.
";return{c(){o=h("h2"),o.textContent=L,y=f(),l=h("p"),l.innerHTML=H,x=f(),a=h("h2"),a.textContent=z,k=f(),r=h("p"),r.innerHTML=O,C=f(),p=h("p"),p.innerHTML=M,_=f(),d=h("h2"),d.textContent=I,m=f(),s=h("ul"),s.innerHTML=P},l(i){o=c(i,"H2",{"data-svelte-h":!0}),u(o)!=="svelte-wdx45u"&&(o.textContent=L),y=b(i),l=c(i,"P",{"data-svelte-h":!0}),u(l)!=="svelte-1b3k6rr"&&(l.innerHTML=H),x=b(i),a=c(i,"H2",{"data-svelte-h":!0}),u(a)!=="svelte-1y7y6hs"&&(a.textContent=z),k=b(i),r=c(i,"P",{"data-svelte-h":!0}),u(r)!=="svelte-r6l5c1"&&(r.innerHTML=O),C=b(i),p=c(i,"P",{"data-svelte-h":!0}),u(p)!=="svelte-h9xsfq"&&(p.innerHTML=M),_=b(i),d=c(i,"H2",{"data-svelte-h":!0}),u(d)!=="svelte-1anz3rk"&&(d.textContent=I),m=b(i),s=c(i,"UL",{"data-svelte-h":!0}),u(s)!=="svelte-17yphbl"&&(s.innerHTML=P)},m(i,n){t(i,o,n),t(i,y,n),t(i,l,n),t(i,x,n),t(i,a,n),t(i,k,n),t(i,r,n),t(i,C,n),t(i,p,n),t(i,_,n),t(i,d,n),t(i,m,n),t(i,s,n)},p:B,i:B,o:B,d(i){i&&(e(o),e(y),e(l),e(x),e(a),e(k),e(r),e(C),e(p),e(_),e(d),e(m),e(s))}}}const fe={name:"Fuse-Rust",year:2021,featured:!0,description:"A fuzzy search library for the rust ecosystem, ideal for building friendly search bars.",thumbnail:"/mockups/fuse-rust.avif",techs:["rust"],col:4,row:1,links:[{icon:"entypo-social:github",href:"https://github.com/Blakeinstein/fuse-rust",type:"Github"},{icon:"vscode-icons:file-type-cargo",href:"https://crates.io/crates/fuse-rust",type:"Crates.io"},{icon:"fluent-mdl2:documentation",href:"https://docs.rs/fuse-rust/0.3.2/fuse_rust/",type:"Docs"}]};class be extends q{constructor(o){super(),D(this,o,null,me,E,{})}}const we=Object.freeze(Object.defineProperty({__proto__:null,default:be,metadata:fe},Symbol.toStringTag,{value:"Module"}));function ve(S){let o,L="Inspiration and Design",y,l,H=`Learning from the mistakes I made in my old-portfolio, I started working on a new one.
+I had the opportunity to talk to alot of students in the UX department at Arizona State University and I also wanted
+to resolve the deep rooted navigational challenges. Even worse fireship had made a video on how to render a moon using ThreeJS.
+Which meant that my portfolio design was not unique anymore.`,x,a,z=`Starfield came out around the time I was working on the portfolio and as such the site went through a complete overhaul. The initial design was pretty much inspired by the design choices
+used in the game. However, moving forward I switched to a more brutalism inspired tone. The Sky Grew Darker by Tomasz Artur Bolek was the driver for the chosen color palette.
+I dropped the idea of including a 3d scene, and instead switched focus to working on the one you see.
+Heck I even made Rain postprocess filter for ThreeJS based on shaders written by Lucas Bebber in their article on CoDrops.
+I wish I can find a use case for it some other time.`,k,r,O="Implementation",C,p,M=`I dropped Astro, even though its great I really wanted to implement simple page navigations. I switched to SvelteKit, although
+in hindsight since I picked up the new transitions api for page transitions,
+I doubt the switch gave me actual benefits apart from some small cases of site interactivity. Maybe I might migrate to Astro again in the future.
+Learning Svelte and SvelteKit was a breeze, and I really enjoyed working with it (Thanks JoyOfCode!). I also used TailwindCSS
+for styling, moving away from much of the custom styles on my old website.`,_,d,I="Fun Facts",m,s,P='
Most of the images on the site were made when the work on the page was finished (even after I wrote this line, fingers crossed).
I used placeholder images from http.dog for the thumbnails, particularly the 204 image.
The backdrop went through several iterations, and at one time featured a noise texture similar to the one used in Arc.net.
';return{c(){o=h("h2"),o.textContent=L,y=f(),l=h("p"),l.innerHTML=H,x=f(),a=h("p"),a.innerHTML=z,k=f(),r=h("h2"),r.textContent=O,C=f(),p=h("p"),p.innerHTML=M,_=f(),d=h("h2"),d.textContent=I,m=f(),s=h("ul"),s.innerHTML=P},l(i){o=c(i,"H2",{"data-svelte-h":!0}),u(o)!=="svelte-1vlasiz"&&(o.textContent=L),y=b(i),l=c(i,"P",{"data-svelte-h":!0}),u(l)!=="svelte-7cqijb"&&(l.innerHTML=H),x=b(i),a=c(i,"P",{"data-svelte-h":!0}),u(a)!=="svelte-w7si42"&&(a.innerHTML=z),k=b(i),r=c(i,"H2",{"data-svelte-h":!0}),u(r)!=="svelte-1y7y6hs"&&(r.textContent=O),C=b(i),p=c(i,"P",{"data-svelte-h":!0}),u(p)!=="svelte-hnpqz2"&&(p.innerHTML=M),_=b(i),d=c(i,"H2",{"data-svelte-h":!0}),u(d)!=="svelte-1anz3rk"&&(d.textContent=I),m=b(i),s=c(i,"UL",{"data-svelte-h":!0}),u(s)!=="svelte-1o1h4sf"&&(s.innerHTML=P)},m(i,n){t(i,o,n),t(i,y,n),t(i,l,n),t(i,x,n),t(i,a,n),t(i,k,n),t(i,r,n),t(i,C,n),t(i,p,n),t(i,_,n),t(i,d,n),t(i,m,n),t(i,s,n)},p:B,i:B,o:B,d(i){i&&(e(o),e(y),e(l),e(x),e(a),e(k),e(r),e(C),e(p),e(_),e(d),e(m),e(s))}}}const ye={name:"New portfolio",year:2023,featured:!0,description:"You are here! Built with SvelteKit, TailwindCSS, and TypeScript.",longDescription:"You are here! Built with SvelteKit, TailwindCSS, and TypeScript.",thumbnail:"/mockups/new-portfolio.avif",techs:["sveltekit","typescript","tailwindcss"],col:1,row:2,links:[{icon:"entypo-social:github",href:"https://github.com/Blakeinstein/portfolio",type:"Github"},{icon:"mdi:web",href:"https://blaine.is-a.dev",type:"Webpage"}]};class ge extends q{constructor(o){super(),D(this,o,null,ve,E,{})}}const xe=Object.freeze(Object.defineProperty({__proto__:null,default:ge,metadata:ye},Symbol.toStringTag,{value:"Module"}));function ke(S){let o,L="Design Ideas",y,l,H=`The design of the website was inspired by the album art for the track ”Light Mind”
+by Krosia. I deeply adore the vastness of outer space, and spacewave has been my
+goto genre to achieve that state of mind. I found Krosia from his song Sunlight,
+but the album art for Light Mind was what lived in my head rent free.`,x,a,z='',k,r,O="Implementation",C,p,M=`I originally built the website with just Typescript, ThreeJS and html, with Navigo used for routing and lit element for constructing page contents.
+I later migrated to Astro for the sake of SEO and performance. I additionally used SwupJS to implement seamless page transitions due to the fact that I had
+a 3d scene used for the background. I am extremely proud of the micro-interactions I implemented, like the gooey effect on the social links, and the
+contact form error messages. I also used blobity to implement the blob like cursor on desktop views. The website is hosted on Github Pages,
+and the source code is available on Github.`,_,d,I="Fun Facts",m,s,P='
It took me ages to settle on a design for the website. But once I found the album art for Light Mind, I knew I had to use it.
The overall website was built in a single day.
I never bothered to update the content of the website, the info was outdated the day I made it publically available.
I was able to obtain a free is-a.dev domain under my name, which I used for the website.
';return{c(){o=h("h2"),o.textContent=L,y=f(),l=h("p"),l.innerHTML=H,x=f(),a=h("a"),a.innerHTML=z,k=f(),r=h("h2"),r.textContent=O,C=f(),p=h("p"),p.innerHTML=M,_=f(),d=h("h2"),d.textContent=I,m=f(),s=h("ul"),s.innerHTML=P,this.h()},l(i){o=c(i,"H2",{"data-svelte-h":!0}),u(o)!=="svelte-xxwtas"&&(o.textContent=L),y=b(i),l=c(i,"P",{"data-svelte-h":!0}),u(l)!=="svelte-1jmglh4"&&(l.innerHTML=H),x=b(i),a=c(i,"A",{href:!0,style:!0,"data-svelte-h":!0}),u(a)!=="svelte-1ygvoe0"&&(a.innerHTML=z),k=b(i),r=c(i,"H2",{"data-svelte-h":!0}),u(r)!=="svelte-1y7y6hs"&&(r.textContent=O),C=b(i),p=c(i,"P",{"data-svelte-h":!0}),u(p)!=="svelte-1k0q4ni"&&(p.innerHTML=M),_=b(i),d=c(i,"H2",{"data-svelte-h":!0}),u(d)!=="svelte-1anz3rk"&&(d.textContent=I),m=b(i),s=c(i,"UL",{"data-svelte-h":!0}),u(s)!=="svelte-18i5xmd"&&(s.innerHTML=P),this.h()},h(){$(a,"href","https://www.last.fm/music/Krosia/_/Light+Mind"),Z(a,"float","right")},m(i,n){t(i,o,n),t(i,y,n),t(i,l,n),t(i,x,n),t(i,a,n),t(i,k,n),t(i,r,n),t(i,C,n),t(i,p,n),t(i,_,n),t(i,d,n),t(i,m,n),t(i,s,n)},p:B,i:B,o:B,d(i){i&&(e(o),e(y),e(l),e(x),e(a),e(k),e(r),e(C),e(p),e(_),e(d),e(m),e(s))}}}const Ce={name:"Old Portfolio",year:2019,description:"Originally built in Vanilla + LitElement, this was my first portfolio website. It was later rebuilt with Astro",thumbnail:"/gallery/oldPortfolio/Home.avif",techs:["typescript","lit-element","html","astro","sass","three"],col:1,row:1,links:[{icon:"entypo-social:github",href:"https://github.com/Blakeinstein/old-portfolio/",type:"Github"},{icon:"mdi:web",href:"https://old.blaine.vip",type:"Webpage"}],images:[{link:"/gallery/oldPortfolio/Home.avif",desc:"Home page"},{link:"/gallery/oldPortfolio/About.avif",desc:"About page"},{link:"/gallery/oldPortfolio/Social.avif",desc:"Socials page"},{link:"/gallery/oldPortfolio/Contact.avif",desc:"Contact page"},{link:"/gallery/oldPortfolio/Projects.avif",desc:"Projects page"}]};class _e extends q{constructor(o){super(),D(this,o,null,ke,E,{})}}const Te=Object.freeze(Object.defineProperty({__proto__:null,default:_e,metadata:Ce},Symbol.toStringTag,{value:"Module"}));function Ie(S){let o,L="Inspiration",y,l,H=`I came to the US for my Master’s degree and quickly realized that the fluctuating conversion rates / remittance cost for INR to
+USD is a big problem for students like me. I wanted to build a simple tool that would help me track the conversion rates across multiple
+proivders and have it maintain a history to help me make better decisions.`,x,a,z="Implementation",k,r,O=`A simple remittance tracker built with the frontend built with NextJS and DaisyUI with the data spider built
+using Python and Scrapy. The frontend caches requests for 1 hour to avoid having to hit my server too often.
+The data spider is hosted on Zyte (formerly ScrapingHub) and runs every hour to update the data.`,C,p,M="Fun Facts",_,d,I='
I never came up with a LOGO for the project, I just ended up using the first svg result with RT.
I tried a bunch of charting library but ended up using Chart.js.