@font-face{font-family:Calibre;src:url(/fonts/Calibre/Calibre-Regular.woff2) format("woff2"),url(/fonts/Calibre/Calibre-Regular.woff) format("woff");font-weight:400;font-style:normal;font-display:auto}@font-face{font-family:Calibre;src:url(/fonts/Calibre/Calibre-Medium.woff2) format("woff2"),url(/fonts/Calibre/Calibre-Medium.woff) format("woff");font-weight:500;font-style:normal;font-display:auto}@font-face{font-family:Calibre;src:url(/fonts/Calibre/Calibre-Semibold.woff2) format("woff2"),url(/fonts/Calibre/Calibre-Semibold.woff) format("woff");font-weight:600;font-style:normal;font-display:auto}@font-face{font-family:Calibre;src:url(/fonts/Calibre/Calibre-RegularItalic.woff2) format("woff2"),url(/fonts/Calibre/Calibre-RegularItalic.woff) format("woff");font-weight:400;font-style:italic;font-display:auto}@font-face{font-family:Calibre;src:url(/fonts/Calibre/Calibre-MediumItalic.woff2) format("woff2"),url(/fonts/Calibre/Calibre-MediumItalic.woff) format("woff");font-weight:500;font-style:italic;font-display:auto}@font-face{font-family:Calibre;src:url(/fonts/Calibre/Calibre-SemiboldItalic.woff2) format("woff2"),url(/fonts/Calibre/Calibre-SemiboldItalic.woff) format("woff");font-weight:600;font-style:italic;font-display:auto}@font-face{font-family:SF Mono;src:url(/fonts/SFMono/SFMono-Regular.woff2) format("woff2"),url(/fonts/SFMono/SFMono-Regular.woff) format("woff");font-weight:400;font-style:normal;font-display:auto}@font-face{font-family:SF Mono;src:url(/fonts/SFMono/SFMono-Semibold.woff2) format("woff2"),url(/fonts/SFMono/SFMono-Semibold.woff) format("woff");font-weight:600;font-style:normal;font-display:auto}@font-face{font-family:SF Mono;src:url(/fonts/SFMono/SFMono-RegularItalic.woff2) format("woff2"),url(/fonts/SFMono/SFMono-RegularItalic.woff) format("woff");font-weight:400;font-style:italic;font-display:auto}@font-face{font-family:SF Mono;src:url(/fonts/SFMono/SFMono-SemiboldItalic.woff2) format("woff2"),url(/fonts/SFMono/SFMono-SemiboldItalic.woff) format("woff");font-weight:600;font-style:italic;font-display:auto}:root{--navy: #1F2833;--light-navy: #252c38;--grey: #484b51;--navy-shadow: rgba(12, 13, 14, .7);--dark-slate: #495670;--slate: #929dbd;--light-slate: #abb4d1;--lightest-slate: #CCD6F6;--white: #e6f1ff;--blue: #6683FC;--blue-tint: rgba(100, 123, 255, .1);--font-sans: "Calibre", "Inter", "San Francisco", "SF Pro Text", -apple-system, system-ui, sans-serif;--font-mono: "SF Mono", "Fira Code", "Fira Mono", "Roboto Mono", monospace;--fz-xxs: 12px;--fz-xs: 13px;--fz-sm: 14px;--fz-md: 16px;--fz-lg: 18px;--fz-xl: 20px;--fz-xxl: 22px;--fz-heading: 32px;--border-radius: 4px;--nav-height: 100px;--nav-scroll-height: 70px;--tab-height: 42px;--tab-width: 120px;--easing: cubic-bezier(.645, .045, .355, 1);--transition: all .25s cubic-bezier(.645, .045, .355, 1);--hamburger-width: 30px;--ham-before: top .1s ease-in .25s, opacity .1s ease-in;--ham-before-active: top .1s ease-out, opacity .1s ease-out .12s;--ham-after: bottom .1s ease-in .25s, transform .22s cubic-bezier(.55, .055, .675, .19);--ham-after-active: bottom .1s ease-out, transform .22s cubic-bezier(.215, .61, .355, 1) .12s;--overflow-property: revert}html{box-sizing:border-box;width:100%;scroll-behavior:smooth}*,*:before,*:after{box-sizing:inherit}::selection{background-color:var(--grey);color:var(--lightest-slate)}:focus{outline:2px dashed var(--blue);outline-offset:3px}:focus:not(:focus-visible){outline:none;outline-offset:0px}:focus-visible{outline:2px dashed var(--blue);outline-offset:3px}html{scrollbar-width:thin;scrollbar-color:var(--dark-slate) var(--navy)}::-webkit-scrollbar{width:12px}::-webkit-scrollbar-track{background:var(--navy)}::-webkit-scrollbar-thumb{background-color:var(--dark-slate);border:3px solid var(--navy);border-radius:10px}body{margin:0;width:100%;min-height:100%;overflow-x:hidden;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;background-color:var(--navy);color:var(--slate);font-family:var(--font-sans);font-size:var(--fz-xl);line-height:1.3;overflow:var(--overflow-property)}@media (max-width: 480px){body{font-size:var(--fz-lg)}}body.hidden{overflow:hidden}#root{min-height:100vh;display:grid;grid-template-rows:1fr auto;grid-template-columns:100%}main{margin:0 auto;width:100%;max-width:1600px;min-height:100vh;padding:200px 150px}@media (max-width: 1080px){main{padding:200px 100px}}@media (max-width: 768px){main{padding:150px 50px}}@media (max-width: 480px){main{padding:125px 25px}}main.fillHeight{padding:0 150px}@media (max-width: 1080px){main.fillHeight{padding:0 100px}}@media (max-width: 768px){main.fillHeight{padding:0 50px}}@media (max-width: 480px){main.fillHeight{padding:0 25px}}section{margin:0 auto;padding:100px 0;max-width:1000px}@media (max-width: 768px){section{padding:80px 0}}@media (max-width: 480px){section{padding:60px 0}}@keyframes reveal{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.scroll-reveal{opacity:0}@media (prefers-reduced-motion: no-preference){.scroll-reveal.active{animation:reveal .5s cubic-bezier(.645,.045,.355,1);animation-delay:.2s;animation-fill-mode:both}}@media (prefers-reduced-motion: reduce){.scroll-reveal{opacity:1}}h1,h2,h3,h4,h5,h6{margin:0 0 10px;font-weight:600;color:var(--lightest-slate);line-height:1.1}.big-heading{margin:0;font-size:clamp(40px,7vw,80px)}.medium-heading{margin:0;font-size:clamp(40px,8vw,60px)}.numbered-heading{display:flex;align-items:center;position:relative;margin:10px 0 40px;width:100%;font-size:clamp(26px,5vw,var(--fz-heading));white-space:nowrap}.numbered-heading:before{position:relative;bottom:4px;counter-increment:section;content:"0" counter(section) ".";margin-right:10px;color:var(--blue);font-family:var(--font-mono);font-size:clamp(var(--fz-md),3vw,var(--fz-xl));font-weight:400}@media (max-width: 480px){.numbered-heading:before{margin-bottom:-3px;margin-right:5px}}.numbered-heading:after{content:"";display:block;position:relative;top:-5px;width:300px;height:1px;margin-left:20px;background-color:var(--grey)}@media (max-width: 1080px){.numbered-heading:after{width:200px}}@media (max-width: 768px){.numbered-heading:after{width:100%}}@media (max-width: 600px){.numbered-heading:after{margin-left:10px}}img,svg{width:100%;max-width:100%;vertical-align:middle}img[alt=""],img:not([alt]){filter:blur(5px)}svg{width:100%;height:100%;fill:currentColor;vertical-align:middle}svg.feather{fill:none}a{display:inline-block;text-decoration:none;text-decoration-skip-ink:auto;color:inherit;position:relative;transition:var(--transition)}a:hover,a:focus{color:var(--blue)}a.inline-link{display:inline-block;text-decoration:none;text-decoration-skip-ink:auto;position:relative;transition:var(--transition);color:var(--blue)}a.inline-link:hover,a.inline-link:focus,a.inline-link:active{color:var(--blue);outline:0}a.inline-link:hover:after,a.inline-link:focus:after,a.inline-link:active:after{width:100%}a.inline-link:hover>*,a.inline-link:focus>*,a.inline-link:active>*{color:var(--blue)!important;transition:var(--transition)}a.inline-link:after{content:"";display:block;width:0;height:1px;position:relative;bottom:.2em;background-color:var(--blue);transition:var(--transition);opacity:.5}button{cursor:pointer;border:0;border-radius:0}input,textarea{border-radius:0;outline:0}input:focus,textarea:focus{outline:0}input:focus::placeholder,input:active::placeholder,textarea:focus::placeholder,textarea:active::placeholder{opacity:.5}p{margin:0 0 15px}p:last-child,p:last-of-type{margin:0}p>a{display:inline-block;text-decoration:none;text-decoration-skip-ink:auto;position:relative;transition:var(--transition);color:var(--blue)}p>a:hover,p>a:focus,p>a:active{color:var(--blue);outline:0}p>a:hover:after,p>a:focus:after,p>a:active:after{width:100%}p>a:hover>*,p>a:focus>*,p>a:active>*{color:var(--blue)!important;transition:var(--transition)}p>a:after{content:"";display:block;width:0;height:1px;position:relative;bottom:.2em;background-color:var(--blue);transition:var(--transition);opacity:.5}p>code{background-color:var(--light-navy);color:var(--white);font-size:var(--fz-sm);border-radius:var(--border-radius);padding:.3em .5em}ul.fancy-list{padding:0;margin:0;list-style:none;font-size:var(--fz-lg)}ul.fancy-list li{position:relative;padding-left:30px;margin-bottom:10px}ul.fancy-list li:before{content:"\25b9";position:absolute;left:0;color:var(--blue)}blockquote{border-left-color:var(--blue);border-left-style:solid;border-left-width:1px;margin-left:0;margin-right:0;padding-left:1.5rem}blockquote p{font-style:italic;font-size:24px}hr{background-color:var(--grey);height:1px;border-width:0px;border-style:initial;border-color:initial;border-image:initial;margin:1rem}code{font-family:var(--font-mono);font-size:var(--fz-md)}.skip-to-content{position:absolute;top:auto;left:-999px;width:1px;height:1px;overflow:hidden;z-index:-99}.skip-to-content:focus,.skip-to-content:active{background-color:var(--blue);color:var(--navy);top:0;left:0;width:auto;height:auto;overflow:auto;z-index:99}#logo{color:var(--blue)}.overline{color:var(--blue);font-family:var(--font-mono);font-size:var(--fz-md);font-weight:400}.subtitle{color:var(--blue);margin:0 0 20px;font-size:var(--fz-md);font-family:var(--font-mono);font-weight:400;line-height:1.5}@media (max-width: 1080px){.subtitle{font-size:var(--fz-sm)}}@media (max-width: 768px){.subtitle{font-size:var(--fz-xs)}}.subtitle a{display:inline-block;text-decoration:none;text-decoration-skip-ink:auto;position:relative;transition:var(--transition);color:var(--blue);line-height:1.5}.subtitle a:hover,.subtitle a:focus,.subtitle a:active{color:var(--blue);outline:0}.subtitle a:hover:after,.subtitle a:focus:after,.subtitle a:active:after{width:100%}.subtitle a:hover>*,.subtitle a:focus>*,.subtitle a:active>*{color:var(--blue)!important;transition:var(--transition)}.subtitle a:after{content:"";display:block;width:0;height:1px;position:relative;bottom:.2em;background-color:var(--blue);transition:var(--transition);opacity:.5}.breadcrumb{display:flex;align-items:center;margin-bottom:50px;color:var(--blue)}.breadcrumb .arrow{display:block;margin-right:10px;padding-top:4px}.breadcrumb a{display:inline-block;text-decoration:none;text-decoration-skip-ink:auto;position:relative;transition:var(--transition);color:var(--blue);font-family:var(--font-mono);font-size:var(--fz-sm);font-weight:600;line-height:1.5;text-transform:uppercase;letter-spacing:.1em}.breadcrumb a:hover,.breadcrumb a:focus,.breadcrumb a:active{color:var(--blue);outline:0}.breadcrumb a:hover:after,.breadcrumb a:focus:after,.breadcrumb a:active:after{width:100%}.breadcrumb a:hover>*,.breadcrumb a:focus>*,.breadcrumb a:active>*{color:var(--blue)!important;transition:var(--transition)}.breadcrumb a:after{content:"";display:block;width:0;height:1px;position:relative;bottom:.2em;background-color:var(--blue);transition:var(--transition);opacity:.5}.fadeup-enter{opacity:.01;transform:translateY(20px);transition:opacity .3s var(--easing),transform .3s var(--easing)}.fadeup-enter-active{opacity:1;transform:translateY(0);transition:opacity .3s var(--easing),transform .3s var(--easing)}.fadedown-enter{opacity:.01;transform:translateY(-20px);transition:opacity .3s var(--easing),transform .3s var(--easing)}.fadedown-enter-active{opacity:1;transform:translateY(0);transition:opacity .3s var(--easing),transform .3s var(--easing)}.fade-enter{opacity:0}.fade-enter-active{opacity:1;transition:opacity .3s var(--easing)}.fade-exit{opacity:1}.fade-exit-active{opacity:0;transition:opacity .3s var(--easing)}:root{--bg-prism: `#112340`, --lineHighlight-prism: `#1d2d50`, --blue-prism: `#5ccfe6`, --purple-prism: `#c3a6ff`, --blue-prism: `#bae67e`, --yellow-prism: `#ffd580`, --orange-prism: `#ffae57`, --red-prism: `#ef6b73`, --grey-prism: `#a2aabc`, --comment-prism: `#8695b799`, }.token{display:inline}.token.comment,.token.block-comment,.token.prolog,.token.doctype,.token.cdata{color:var(--comment-prism)}.token.punctuation{color:var(--grey-prism)}.token.namespace,.token.deleted{color:var(--red-prism)}.token.function-name,.token.function,.token.class-name,.token.constant,.token.symbol{color:var(--yellow-prism)}.token.attr-name,.token.operator,.token.rule{color:var(--orange-prism)}.token.keyword,.token.boolean,.token.number,.token.property{color:var(--purple-prism)}.token.tag,.token.selector,.token.important,.token.atrule,.token.builtin,.token.entity,.token.url{color:var(--blue-prism)}.token.string,.token.char,.token.attr-value,.token.regex,.token.variable,.token.inserted{color:var(--lineHighlight-prism)}.token.important,.token.bold{font-weight:600}.token.italic{font-style:italic}.token.entity{cursor:help}.namespace{opacity:.7}@keyframes svelte-1g94da-fade-up{0%{opacity:.01;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}section.svelte-1g94da.svelte-1g94da{display:flex;justify-content:center;align-items:center;flex-direction:column;align-items:flex-start;min-height:80vh}@media (max-width: 480px) and (min-height: 700px){section.svelte-1g94da.svelte-1g94da{padding-bottom:10vh}}@media (prefers-reduced-motion: no-preference){section.svelte-1g94da div.svelte-1g94da{animation:svelte-1g94da-fade-up .3s var(--easing);animation-delay:calc(3s + var(--transition-delay));animation-fill-mode:backwards}}section.svelte-1g94da h1{margin:0 0 30px 4px;color:var(--blue);font-family:var(--font-mono);font-size:clamp(var(--fz-sm),5vw,var(--fz-md));font-weight:400}@media (max-width: 480px){section.svelte-1g94da h1{margin:0 0 20px 2px}}section.svelte-1g94da h3{margin-top:10px;color:var(--slate);line-height:.9}section.svelte-1g94da p{margin:20px 0 0;max-width:540px}section.svelte-1g94da .email-link{color:var(--blue);background-color:transparent;border:1px solid var(--blue);border-radius:var(--border-radius);padding:1.25rem 1.75rem;font-size:var(--fz-sm);font-family:var(--font-mono);line-height:1;text-decoration:none;cursor:pointer;transition:var(--transition);margin-top:50px}section.svelte-1g94da .email-link:hover,section.svelte-1g94da .email-link:focus,section.svelte-1g94da .email-link:active{background-color:var(--blue-tint);outline:none}section.svelte-1g94da .email-link:after{display:none!important}section.svelte-1slwaag.svelte-1slwaag{max-width:550px}section.svelte-1slwaag .inner.svelte-1slwaag{display:block}@media (max-width: 1080px){section.svelte-1slwaag .inner.svelte-1slwaag{display:block}}.content.svelte-1slwaag.svelte-1slwaag{column-count:1;column-gap:36px}.content.svelte-1slwaag p.svelte-1slwaag{text-align:justify}@media (max-width: 1080px){.content.svelte-1slwaag.svelte-1slwaag{column-count:1}}.content.svelte-1slwaag ul.skills-list.svelte-1slwaag{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));grid-gap:0 10px;padding:0;margin:20px 0 0;overflow:hidden;list-style:none}.content.svelte-1slwaag ul.skills-list li.svelte-1slwaag{position:relative;margin-bottom:10px;padding-left:20px;font-family:var(--font-mono);font-size:var(--fz-xs)}.content.svelte-1slwaag ul.skills-list li.svelte-1slwaag:before{content:"\25b9";position:absolute;left:0;color:var(--blue);font-size:var(--fz-sm);line-height:12px}.container.svelte-1pigipe.svelte-1pigipe{width:80%;padding:0;margin:0 auto 50px;position:relative;overflow:hidden}.container.svelte-1pigipe.svelte-1pigipe:before{content:"";position:absolute;top:0;left:50%;margin-left:-1px;margin-top:7rem;width:2px;height:91%;background:var(--light-slate);z-index:1}.timeline-block.svelte-1pigipe.svelte-1pigipe{width:-webkit-calc(50% + 8px);width:-moz-calc(50% + 8px);width:calc(50% + 8px);display:-webkit-box;display:-webkit-flex;display:-moz-box;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-moz-box-pack:justify;justify-content:space-between;clear:both}.timeline-block-right.svelte-1pigipe.svelte-1pigipe{float:right}.timeline-block-left.svelte-1pigipe.svelte-1pigipe{float:left;direction:rtl}.marker.svelte-1pigipe.svelte-1pigipe{width:16px;height:16px;border-radius:50%;border:2px solid #F5F7FA;background:var(--blue);margin-top:18px;z-index:12}@media screen and (max-width: 768px){.container.svelte-1pigipe.svelte-1pigipe:before{left:8px;width:2px}.timeline-block.svelte-1pigipe.svelte-1pigipe{width:100%;margin-bottom:30px}.timeline-block-right.svelte-1pigipe.svelte-1pigipe{float:none}.timeline-block-left.svelte-1pigipe.svelte-1pigipe{float:none;direction:ltr}}.panel.svelte-1pigipe.svelte-1pigipe{width:100%;height:auto;padding:10px 5px}.panel.svelte-1pigipe h3.svelte-1pigipe{font-size:var(--fz-xxl);font-weight:500;line-height:1.3;margin-top:5px;margin-bottom:5px}.panel.svelte-1pigipe h3 .company.svelte-1pigipe{color:var(--blue)}.panel.svelte-1pigipe .range.svelte-1pigipe{margin-bottom:25px;color:var(--light-slate);font-family:var(--font-mono);font-size:var(--fz-xs)}.job-description.svelte-1pigipe ul{padding:0;margin:0;list-style:none;font-size:var(--fz-lg)}.job-description.svelte-1pigipe ul li{position:relative;padding-left:30px;margin-bottom:10px}.job-description.svelte-1pigipe ul li:before{content:"\25b9";font-size:inherit;position:absolute;left:0;color:var(--blue)}.projects.svelte-1lujgrh.svelte-1lujgrh.svelte-1lujgrh{list-style:none;padding:0;margin:0}.projects.svelte-1lujgrh a.svelte-1lujgrh.svelte-1lujgrh{position:relative;z-index:1}.project.svelte-1lujgrh.svelte-1lujgrh.svelte-1lujgrh{position:relative;display:grid;grid-gap:10px;grid-template-columns:repeat(12,1fr);align-items:center}@media (max-width: 768px){.project.svelte-1lujgrh.svelte-1lujgrh.svelte-1lujgrh{box-shadow:0 10px 30px -15px var(--navy-shadow);transition:var(--transition)}.project.svelte-1lujgrh.svelte-1lujgrh.svelte-1lujgrh:hover,.project.svelte-1lujgrh.svelte-1lujgrh.svelte-1lujgrh:focus{box-shadow:0 20px 30px -15px var(--navy-shadow)}}.project.svelte-1lujgrh.svelte-1lujgrh.svelte-1lujgrh:not(:last-of-type){margin-bottom:100px}@media (max-width: 768px){.project.svelte-1lujgrh.svelte-1lujgrh.svelte-1lujgrh:not(:last-of-type){margin-bottom:70px}}@media (max-width: 480px){.project.svelte-1lujgrh.svelte-1lujgrh.svelte-1lujgrh:not(:last-of-type){margin-bottom:30px}}.project.svelte-1lujgrh:nth-of-type(odd) .project-content.svelte-1lujgrh.svelte-1lujgrh{grid-column:7/-1;text-align:right}@media (max-width: 1080px){.project.svelte-1lujgrh:nth-of-type(odd) .project-content.svelte-1lujgrh.svelte-1lujgrh{grid-column:5/-1}}@media (max-width: 768px){.project.svelte-1lujgrh:nth-of-type(odd) .project-content.svelte-1lujgrh.svelte-1lujgrh{grid-column:1/-1;padding:40px 40px 30px;text-align:left}}@media (max-width: 480px){.project.svelte-1lujgrh:nth-of-type(odd) .project-content.svelte-1lujgrh.svelte-1lujgrh{padding:25px 25px 20px}}.project.svelte-1lujgrh:nth-of-type(odd) .project-tech-list.svelte-1lujgrh.svelte-1lujgrh{justify-content:flex-end}@media (max-width: 768px){.project.svelte-1lujgrh:nth-of-type(odd) .project-tech-list.svelte-1lujgrh.svelte-1lujgrh{justify-content:flex-start}}.project.svelte-1lujgrh:nth-of-type(odd) .project-tech-list li.svelte-1lujgrh.svelte-1lujgrh{margin:0 0 5px 20px}@media (max-width: 768px){.project.svelte-1lujgrh:nth-of-type(odd) .project-tech-list li.svelte-1lujgrh.svelte-1lujgrh{margin:0 10px 5px 0}}.project.svelte-1lujgrh:nth-of-type(odd) .project-links.svelte-1lujgrh.svelte-1lujgrh{justify-content:flex-end;margin-left:0;margin-right:-10px}@media (max-width: 768px){.project.svelte-1lujgrh:nth-of-type(odd) .project-links.svelte-1lujgrh.svelte-1lujgrh{justify-content:flex-start;margin-left:-10px;margin-right:0}}.project.svelte-1lujgrh:nth-of-type(odd) .project-image.svelte-1lujgrh.svelte-1lujgrh{grid-column:1/8}@media (max-width: 768px){.project.svelte-1lujgrh:nth-of-type(odd) .project-image.svelte-1lujgrh.svelte-1lujgrh{grid-column:1/-1}}.project.svelte-1lujgrh .project-content.svelte-1lujgrh.svelte-1lujgrh{position:relative;grid-column:1/7;grid-row:1/-1}@media (max-width: 1080px){.project.svelte-1lujgrh .project-content.svelte-1lujgrh.svelte-1lujgrh{grid-column:1/9}}@media (max-width: 768px){.project.svelte-1lujgrh .project-content.svelte-1lujgrh.svelte-1lujgrh{display:flex;flex-direction:column;justify-content:center;height:100%;grid-column:1/-1;padding:40px 40px 30px;z-index:5}}@media (max-width: 480px){.project.svelte-1lujgrh .project-content.svelte-1lujgrh.svelte-1lujgrh{padding:30px 25px 20px}}.project.svelte-1lujgrh .project-overline.svelte-1lujgrh.svelte-1lujgrh{margin:10px 0;color:var(--blue);font-family:var(--font-mono);font-size:var(--fz-xs);font-weight:400}.project.svelte-1lujgrh .project-title.svelte-1lujgrh.svelte-1lujgrh{color:var(--lightest-slate);font-size:clamp(24px,5vw,28px)}@media (min-width: 768px){.project.svelte-1lujgrh .project-title.svelte-1lujgrh.svelte-1lujgrh{margin:0 0 20px}}@media (max-width: 768px){.project.svelte-1lujgrh .project-title.svelte-1lujgrh.svelte-1lujgrh{color:var(--white)}.project.svelte-1lujgrh .project-title a.svelte-1lujgrh.svelte-1lujgrh{position:static}.project.svelte-1lujgrh .project-title a.svelte-1lujgrh.svelte-1lujgrh:before{content:"";display:block;position:absolute;z-index:0;width:100%;height:100%;top:0;left:0}}.project.svelte-1lujgrh .project-description.svelte-1lujgrh.svelte-1lujgrh{box-shadow:0 10px 30px -15px var(--navy-shadow);transition:var(--transition);position:relative;z-index:2;padding:25px;border-radius:var(--border-radius);background-color:var(--light-navy);color:var(--light-slate);font-size:var(--fz-lg)}.project.svelte-1lujgrh .project-description.svelte-1lujgrh.svelte-1lujgrh:hover,.project.svelte-1lujgrh .project-description.svelte-1lujgrh.svelte-1lujgrh:focus{box-shadow:0 20px 30px -15px var(--navy-shadow)}@media (max-width: 768px){.project.svelte-1lujgrh .project-description.svelte-1lujgrh.svelte-1lujgrh{padding:20px 0;background-color:transparent;box-shadow:none}.project.svelte-1lujgrh .project-description.svelte-1lujgrh.svelte-1lujgrh:hover{box-shadow:none}}.project.svelte-1lujgrh .project-description a.svelte-1lujgrh.svelte-1lujgrh{display:inline-block;text-decoration:none;text-decoration-skip-ink:auto;position:relative;transition:var(--transition);color:var(--blue)}.project.svelte-1lujgrh .project-description a.svelte-1lujgrh.svelte-1lujgrh:hover,.project.svelte-1lujgrh .project-description a.svelte-1lujgrh.svelte-1lujgrh:focus,.project.svelte-1lujgrh .project-description a.svelte-1lujgrh.svelte-1lujgrh:active{color:var(--blue);outline:0}.project.svelte-1lujgrh .project-description a.svelte-1lujgrh.svelte-1lujgrh:hover:after,.project.svelte-1lujgrh .project-description a.svelte-1lujgrh.svelte-1lujgrh:focus:after,.project.svelte-1lujgrh .project-description a.svelte-1lujgrh.svelte-1lujgrh:active:after{width:100%}.project.svelte-1lujgrh .project-description a.svelte-1lujgrh:hover>.svelte-1lujgrh,.project.svelte-1lujgrh .project-description a.svelte-1lujgrh:focus>.svelte-1lujgrh,.project.svelte-1lujgrh .project-description a.svelte-1lujgrh:active>.svelte-1lujgrh{color:var(--blue)!important;transition:var(--transition)}.project.svelte-1lujgrh .project-description a.svelte-1lujgrh.svelte-1lujgrh:after{content:"";display:block;width:0;height:1px;position:relative;bottom:.37em;background-color:var(--blue);transition:var(--transition);opacity:.5}.project.svelte-1lujgrh .project-tech-list.svelte-1lujgrh.svelte-1lujgrh{display:flex;flex-wrap:wrap;position:relative;z-index:2;margin:25px 0 10px;padding:0;list-style:none}.project.svelte-1lujgrh .project-tech-list li.svelte-1lujgrh.svelte-1lujgrh{margin:0 20px 5px 0;color:var(--light-slate);font-family:var(--font-mono);font-size:var(--fz-xs);white-space:nowrap}@media (max-width: 768px){.project.svelte-1lujgrh .project-tech-list.svelte-1lujgrh.svelte-1lujgrh{margin:10px 0}.project.svelte-1lujgrh .project-tech-list li.svelte-1lujgrh.svelte-1lujgrh{margin:0 10px 5px 0;color:var(--lightest-slate)}}.project.svelte-1lujgrh .project-links.svelte-1lujgrh.svelte-1lujgrh{display:flex;align-items:center;position:relative;margin-top:10px;margin-left:-10px;color:var(--lightest-slate)}.project.svelte-1lujgrh .project-links a.svelte-1lujgrh.svelte-1lujgrh{display:flex;justify-content:center;align-items:center;padding:10px}.project.svelte-1lujgrh .project-links a.external.svelte-1lujgrh svg{width:22px;height:22px;margin-top:-4px}.project.svelte-1lujgrh .project-links a.svelte-1lujgrh svg{width:20px;height:20px}.project.svelte-1lujgrh .project-image.svelte-1lujgrh.svelte-1lujgrh{box-shadow:0 10px 30px -15px var(--navy-shadow);transition:var(--transition);grid-column:6/-1;grid-row:1/-1;position:relative;z-index:1}.project.svelte-1lujgrh .project-image.svelte-1lujgrh.svelte-1lujgrh:hover,.project.svelte-1lujgrh .project-image.svelte-1lujgrh.svelte-1lujgrh:focus{box-shadow:0 20px 30px -15px var(--navy-shadow)}@media (max-width: 768px){.project.svelte-1lujgrh .project-image.svelte-1lujgrh.svelte-1lujgrh{grid-column:1/-1;height:100%;opacity:.25}}.project.svelte-1lujgrh .project-image a.svelte-1lujgrh.svelte-1lujgrh{width:100%;height:100%;background-color:var(--blue);border-radius:var(--border-radius);vertical-align:middle}.project.svelte-1lujgrh .project-image a.svelte-1lujgrh.svelte-1lujgrh:hover,.project.svelte-1lujgrh .project-image a.svelte-1lujgrh.svelte-1lujgrh:focus{background:transparent;outline:0}.project.svelte-1lujgrh .project-image a.svelte-1lujgrh.svelte-1lujgrh:hover:before,.project.svelte-1lujgrh .project-image a:hover .img.svelte-1lujgrh.svelte-1lujgrh,.project.svelte-1lujgrh .project-image a.svelte-1lujgrh.svelte-1lujgrh:focus:before,.project.svelte-1lujgrh .project-image a:focus .img.svelte-1lujgrh.svelte-1lujgrh{background:transparent;filter:none}.project.svelte-1lujgrh .project-image a.svelte-1lujgrh.svelte-1lujgrh:before{content:"";position:absolute;width:100%;height:100%;top:0;left:0;right:0;bottom:0;z-index:3;transition:var(--transition);background-color:var(--navy);opacity:.3;mix-blend-mode:screen}.project.svelte-1lujgrh .project-image .img.svelte-1lujgrh.svelte-1lujgrh{border-radius:var(--border-radius);mix-blend-mode:multiply;filter:grayscale(100%) contrast(1) brightness(90%);height:100%}@media (max-width: 768px){.project.svelte-1lujgrh .project-image .img.svelte-1lujgrh.svelte-1lujgrh{object-fit:cover;width:auto;height:100%;filter:grayscale(100%) contrast(1) brightness(50%)}}section.svelte-ac1f4h.svelte-ac1f4h{max-width:600px;margin:0 auto 100px;text-align:center}@media (max-width: 768px){section.svelte-ac1f4h.svelte-ac1f4h{margin:0 auto 50px}}section.svelte-ac1f4h .overline.svelte-ac1f4h{display:block;margin-bottom:20px;color:var(--blue);font-family:var(--font-mono);font-size:var(--fz-md);font-weight:400}section.svelte-ac1f4h .overline.svelte-ac1f4h:before{bottom:0;font-size:var(--fz-sm)}section.svelte-ac1f4h .overline.svelte-ac1f4h:after{display:none}section.svelte-ac1f4h .title.svelte-ac1f4h{font-size:clamp(40px,5vw,60px)}section.svelte-ac1f4h .email-link.svelte-ac1f4h{color:var(--blue);background-color:transparent;border:1px solid var(--blue);border-radius:var(--border-radius);padding:1.25rem 1.75rem;font-size:var(--fz-sm);font-family:var(--font-mono);line-height:1;text-decoration:none;cursor:pointer;transition:var(--transition);margin-top:50px}section.svelte-ac1f4h .email-link.svelte-ac1f4h:hover,section.svelte-ac1f4h .email-link.svelte-ac1f4h:focus,section.svelte-ac1f4h .email-link.svelte-ac1f4h:active{background-color:var(--blue-tint);outline:none}section.svelte-ac1f4h .email-link.svelte-ac1f4h:after{display:none!important}button.svelte-13zmsqt{background:none;border:none;cursor:pointer;padding:0;outline:0}.icon-sun.svelte-13zmsqt,.icon-moon.svelte-13zmsqt{width:24px;height:24px;stroke:var(--slate);margin-left:10px}@keyframes svelte-13zmsqt-spin-right{0%{transform:scale(0) rotate(0)}to{transform:scale(1) rotate(720deg)}}@keyframes svelte-13zmsqt-spin-left{0%{transform:scale(0) rotate(0)}to{transform:scale(1) rotate(-720deg)}}.spin-right.svelte-13zmsqt{animation-name:svelte-13zmsqt-spin-right}.spin-left.svelte-13zmsqt{animation-name:svelte-13zmsqt-spin-left}svg.svelte-13zmsqt{display:none}.dark .icon-moon.svelte-13zmsqt,.light .icon-sun.svelte-13zmsqt{display:inline-block}.menu.svelte-14vlp9c.svelte-14vlp9c{display:none}@media (max-width: 768px){.menu.svelte-14vlp9c.svelte-14vlp9c{display:block}}.hamburger-button.svelte-14vlp9c.svelte-14vlp9c{display:none}@media (max-width: 768px){.hamburger-button.svelte-14vlp9c.svelte-14vlp9c{display:flex;justify-content:center;align-items:center;position:relative;z-index:10;margin-right:-15px;padding:15px;border:0;background-color:transparent;color:inherit;text-transform:none;transition-timing-function:linear;transition-duration:.15s;transition-property:opacity,filter}}.hamburger-button.svelte-14vlp9c .ham-box.svelte-14vlp9c{display:inline-block;position:relative;width:var(--hamburger-width);height:24px}.hamburger-button.svelte-14vlp9c .ham-box-inner.svelte-14vlp9c{--bottom:`0`;position:absolute;top:50%;right:0;width:var(--hamburger-width);height:2px;border-radius:var(--border-radius);background-color:var(--blue);transition-duration:.22s;transition-property:transform;transition-delay:0s;transform:rotate(0);transition-timing-function:cubic-bezier(.55,.055,.675,.19)}.hamburger-button.svelte-14vlp9c .ham-box-inner.svelte-14vlp9c:before,.hamburger-button.svelte-14vlp9c .ham-box-inner.svelte-14vlp9c:after{content:"";display:block;position:absolute;left:auto;right:0;width:var(--hamburger-width);height:2px;border-radius:4px;background-color:var(--blue);transition-timing-function:ease;transition-duration:.15s;transition-property:transform}.hamburger-button.svelte-14vlp9c .ham-box-inner.svelte-14vlp9c:before{width:120%;top:-10px;opacity:1;transition:var(--ham-before)}.hamburger-button.svelte-14vlp9c .ham-box-inner.svelte-14vlp9c:after{width:80%;bottom:-10px;transform:0;transition:var(--ham-after)}.hamburger-button.svelte-14vlp9c .menuOpen.svelte-14vlp9c{transition-delay:.12s;transform:rotate(225deg);transition-timing-function:cubic-bezier(.215,.61,.355,1)}.hamburger-button.svelte-14vlp9c .menuOpen.svelte-14vlp9c:before{width:100%;top:0;opacity:0;transition:var(--ham-before-active)}.hamburger-button.svelte-14vlp9c .menuOpen.svelte-14vlp9c:after{width:100%;bottom:0;transform:rotate(-90deg);transition:var(--ham-after-active)}aside.svelte-14vlp9c.svelte-14vlp9c{display:none}@media (max-width: 768px){aside.svelte-14vlp9c.svelte-14vlp9c{display:flex;justify-content:center;align-items:center;position:fixed;top:0;bottom:0;right:0;padding:50px 10px;width:min(75vw,400px);height:100vh;outline:0;background-color:var(--light-navy);box-shadow:-10px 0 30px -15px var(--navy-shadow);z-index:9;transform:translate(100vw);visibility:hidden;transition:var(--transition)}aside.menuOpen.svelte-14vlp9c.svelte-14vlp9c{transform:translate(0);visibility:visible}}aside.svelte-14vlp9c nav.svelte-14vlp9c{display:flex;justify-content:space-between;align-items:center;width:100%;flex-direction:column;color:var(--lightest-slate);font-family:var(--font-mono);text-align:center}aside.svelte-14vlp9c ol.svelte-14vlp9c{padding:0;margin:0;list-style:none;width:100%}aside.svelte-14vlp9c ol li.svelte-14vlp9c{position:relative;margin:0 auto 20px;counter-increment:item 1;font-size:clamp(var(--fz-sm),4vw,var(--fz-lg))}@media (max-width: 600px){aside.svelte-14vlp9c ol li.svelte-14vlp9c{margin:0 auto 10px}}aside.svelte-14vlp9c ol li.svelte-14vlp9c:before{content:"0" counter(item) ".";display:block;margin-bottom:5px;color:var(--blue);font-size:var(--fz-sm)}aside.svelte-14vlp9c ol a.svelte-14vlp9c{display:inline-block;text-decoration:none;text-decoration-skip-ink:auto;color:inherit;position:relative;transition:var(--transition);width:100%;padding:3px 20px 20px}aside.svelte-14vlp9c ol a.svelte-14vlp9c:hover,aside.svelte-14vlp9c ol a.svelte-14vlp9c:active,aside.svelte-14vlp9c ol a.svelte-14vlp9c:focus{color:var(--blue);outline:0}aside.svelte-14vlp9c .resume-link.svelte-14vlp9c{color:var(--blue);background-color:transparent;border:1px solid var(--blue);border-radius:var(--border-radius);padding:1.25rem 1.75rem;font-size:var(--fz-sm);font-family:var(--font-mono);line-height:1;text-decoration:none;cursor:pointer;transition:var(--transition);padding:18px 50px;margin:10% auto 0;width:max-content}aside.svelte-14vlp9c .resume-link.svelte-14vlp9c:hover,aside.svelte-14vlp9c .resume-link.svelte-14vlp9c:focus,aside.svelte-14vlp9c .resume-link.svelte-14vlp9c:active{background-color:var(--blue-tint);outline:none}aside.svelte-14vlp9c .resume-link.svelte-14vlp9c:after{display:none!important}@keyframes svelte-1m8ql8x-fade{0%{opacity:0}to{opacity:1}}@keyframes svelte-1m8ql8x-fade-down{0%{opacity:.01;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}header.svelte-1m8ql8x.svelte-1m8ql8x{--delay-items:0;display:flex;justify-content:space-between;position:sticky;align-items:center;top:0;z-index:12;padding:0 50px;width:100%;height:var(--nav-height);background-color:#0a192fd9;filter:none!important;pointer-events:auto!important;user-select:auto!important;backdrop-filter:blur(10px);transition:var(--transition)}header.transparent.svelte-1m8ql8x.svelte-1m8ql8x{background-color:transparent}@media (max-width: 1080px){header.svelte-1m8ql8x.svelte-1m8ql8x{padding:0 40px}}@media (max-width: 768px){header.svelte-1m8ql8x.svelte-1m8ql8x{padding:0 25px}}@media (prefers-reduced-motion: no-preference){header.scroll-up.svelte-1m8ql8x.svelte-1m8ql8x{height:var(--nav-scroll-height);transform:translateY(0);background-color:var(--nav-back);box-shadow:0 10px 30px -10px var(--navy-shadow)}header.scroll-down.svelte-1m8ql8x.svelte-1m8ql8x{height:var(--nav-scroll-height);transform:translateY(calc(var(--nav-scroll-height) * -1));box-shadow:0 10px 30px -10px var(--navy-shadow)}}nav.svelte-1m8ql8x.svelte-1m8ql8x{display:flex;justify-content:space-between;align-items:center;position:relative;width:100%;color:var(--lightest-slate);font-family:var(--font-mono);counter-reset:item 0;z-index:12}nav.svelte-1m8ql8x .logo.svelte-1m8ql8x{display:flex;justify-content:center;align-items:center}nav.svelte-1m8ql8x .logo a.svelte-1m8ql8x{color:var(--blue);width:42px;height:42px}nav.svelte-1m8ql8x .logo a.svelte-1m8ql8x:hover svg,nav.svelte-1m8ql8x .logo a.svelte-1m8ql8x:focus svg{fill:var(--blue-tint)}nav.svelte-1m8ql8x .logo a.svelte-1m8ql8x svg{fill:none;transition:var(--transition);user-select:none}@media (prefers-reduced-motion: no-preference){nav.svelte-1m8ql8x .logo.svelte-1m8ql8x{animation:svelte-1m8ql8x-fade var(--easing);animation-duration:var(--duration);animation-delay:var(--delay);animation-fill-mode:backwards}}.links.svelte-1m8ql8x.svelte-1m8ql8x{display:flex;align-items:center}@media (max-width: 768px){.links.svelte-1m8ql8x.svelte-1m8ql8x{display:none}}.links.svelte-1m8ql8x ol.svelte-1m8ql8x{display:flex;justify-content:space-between;align-items:center;padding:0;margin:0;list-style:none}.links.svelte-1m8ql8x ol li.svelte-1m8ql8x{margin:0 5px;position:relative;counter-increment:item 1;font-size:var(--fz-xs)}.links.svelte-1m8ql8x ol li a.svelte-1m8ql8x{padding:10px}.links.svelte-1m8ql8x ol li a.svelte-1m8ql8x:before{content:"0" counter(item) ".";margin-right:5px;color:var(--blue);font-size:var(--fz-xxs);text-align:right}@media (prefers-reduced-motion: no-preference){.links.svelte-1m8ql8x ol li.svelte-1m8ql8x{animation:svelte-1m8ql8x-fade-down var(--easing);animation-duration:var(--duration);animation-delay:calc(var(--delay) + var(--delay-items) * .1s);animation-fill-mode:backwards}}@media (prefers-reduced-motion: no-preference){.links.svelte-1m8ql8x .resume-button-section.svelte-1m8ql8x{animation:svelte-1m8ql8x-fade-down var(--easing);animation-duration:var(--duration);animation-delay:calc(var(--delay) + var(--delay-items) * .1s);animation-fill-mode:backwards}}.links.svelte-1m8ql8x .resume-button.svelte-1m8ql8x{color:var(--blue);background-color:transparent;border:1px solid var(--blue);border-radius:var(--border-radius);padding:.75rem 1rem;font-family:var(--font-mono);line-height:1;text-decoration:none;cursor:pointer;transition:var(--transition);margin-left:15px;font-size:var(--fz-xs)}.links.svelte-1m8ql8x .resume-button.svelte-1m8ql8x:hover,.links.svelte-1m8ql8x .resume-button.svelte-1m8ql8x:focus,.links.svelte-1m8ql8x .resume-button.svelte-1m8ql8x:active{background-color:var(--blue-tint);outline:none}.links.svelte-1m8ql8x .resume-button.svelte-1m8ql8x:after{display:none!important}ul.svelte-snsf1o.svelte-snsf1o{display:flex;flex-direction:column;align-items:center;margin:0;padding:0;list-style:none;width:40px;position:fixed;bottom:0px;left:40px;right:auto;z-index:10;color:var(--light-slate)}ul.svelte-snsf1o.svelte-snsf1o:after{content:"";display:block;width:1px;height:90px;margin:0 auto;background-color:var(--light-slate)}ul.svelte-snsf1o li.svelte-snsf1o:last-of-type{margin-bottom:20px}ul.svelte-snsf1o li a.svelte-snsf1o{padding:10px}ul.svelte-snsf1o li a.svelte-snsf1o:hover,ul.svelte-snsf1o li a.svelte-snsf1o:focus{transform:translateY(-3px)}ul.svelte-snsf1o li a svg.svelte-snsf1o{width:20px;height:20px}@keyframes svelte-snsf1o-fade{0%{opacity:0}to{opacity:1}}.side-soc.svelte-snsf1o.svelte-snsf1o{width:40px;position:fixed;bottom:0;left:var(--leftPosition);right:var(--rightPosition);z-index:10;color:var(--light-slate)}@media (max-width: 1080px){.side-soc.svelte-snsf1o.svelte-snsf1o{left:calc(var(--leftPosition) / 2);right:calc(var(--rightPosition) / 2)}}@media (max-width: 768px){.side-soc.svelte-snsf1o.svelte-snsf1o{display:none}}@media (prefers-reduced-motion: no-preference){.side-soc.svelte-snsf1o.svelte-snsf1o{animation:svelte-snsf1o-fade var(--easing);animation-duration:var(--duration);animation-delay:var(--delay);animation-fill-mode:backwards}}footer.svelte-1q3qiyv.svelte-1q3qiyv{display:flex;justify-content:center;align-items:center;flex-direction:column;height:auto;min-height:70px;padding:15px;text-align:center}.social-links.svelte-1q3qiyv.svelte-1q3qiyv{display:none}@media (max-width: 768px){.social-links.svelte-1q3qiyv.svelte-1q3qiyv{display:block;width:100%;max-width:270px;margin:0 auto 10px;color:var(--light-slate)}}.social-links.svelte-1q3qiyv ul.svelte-1q3qiyv{display:flex;justify-content:center;align-items:center;padding:0;margin:0;list-style:none}.social-links.svelte-1q3qiyv ul a.svelte-1q3qiyv{padding:10px}.social-links.svelte-1q3qiyv ul a svg.svelte-1q3qiyv{display:inline-block;width:20px;height:20px}.credit.svelte-1q3qiyv.svelte-1q3qiyv{display:flex;flex-direction:column;gap:8px;color:var(--light-slate);font-family:var(--font-mono);font-size:var(--fz-xxs);line-height:1}main.svelte-136s9gv{counter-reset:section}body{--navy:#1F2833;--light-navy:#252c38;--grey:#484b51;--navy-shadow:rgba(12, 13, 14, .7);--dark-slate:#495670;--slate:#929dbd;--light-slate:#abb4d1;--lightest-slate:#CCD6F6;--white:#e6f1ff;--blue:#6683FC;--nav-back:rgba(31, 40, 51, .85);transition:background-color .3s}body.light{--navy:#e6f6ff;--light-navy:#b3d6ff;--grey:#484b51;--navy-shadow:rgba(12, 13, 14, .7);--dark-slate:#495670;--slate:#245695;--light-slate:#4777b0;--lightest-slate:#6683FC;--white:#e6f1ff;--blue:#6683FC;--nav-back:rgba(213, 235, 247, .85);transition:background-color .3s}
