@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:100;src:url(/fonts/Inter/Inter-100.woff2) format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:200;src:url(/fonts/Inter/Inter-200.woff2) format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:300;src:url(/fonts/Inter/Inter-300.woff2) format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:400;src:url(/fonts/Inter/Inter-regular.woff2) format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:500;src:url(/fonts/Inter/Inter-500.woff2) format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:600;src:url(/fonts/Inter/Inter-600.woff2) format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:700;src:url(/fonts/Inter/Inter-700.woff2) format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:800;src:url(/fonts/Inter/Inter-800.woff2) format("woff2")}@font-face{font-display:swap;font-family:Inter;font-style:normal;font-weight:900;src:url(/fonts/Inter/Inter-900.woff2) format("woff2")}@font-face{font-display:swap;font-family:Fira Mono;font-style:normal;font-weight:400;src:url(/fonts/Fira-Mono/Fira-Mono-Regular.woff2) format("woff2")}@font-face{font-display:swap;font-family:Fira Mono;font-style:normal;font-weight:500;src:url(/fonts/Fira-Mono/Fira-Mono-500.woff2) format("woff2")}@font-face{font-display:swap;font-family:Fira Mono;font-style:normal;font-weight:700;src:url(/fonts/Fira-Mono/Fira-Mono-700.woff2) format("woff2")}h1,h2{font-weight:700;letter-spacing:.03em}h1,h2,h3,h4,h5,h6{font-family:Fira Mono,monospace}h3,h4,h5,h6{font-weight:400}h1{font-size:44.2026832565px}h2{font-size:33.160302518px}h3{font-size:24.876446px}h4,h5{font-size:18.662px}h6{font-size:14px}@media only screen and (max-width:35rem){h1{font-size:33.160302518px}h2{font-size:24.876446px}h3,h4{font-size:18.662px}h5,h6{font-size:14px}}.button{font-family:Inter,sans-serif;font-weight:500;text-align:center;display:inline-block;cursor:pointer;width:200px}.button.primary{background:linear-gradient(107.21deg,#78c091 24.43%,#424242 68.95%);border-radius:30px;border:1.53px solid transparent}.button.primary,.button.primary:hover{border-image-source:linear-gradient(94.92deg,hsla(0,0%,100%,.6) 4.31%,#000 88.77%) 1;color:#fff}.button.primary:hover{background:linear-gradient(107.21deg,#6fae8c 24.43%,#373737 68.95%)}.button.secondary{background:linear-gradient(135deg,hsla(0,0%,100%,.6),#000);border-radius:30px;border:1.53px solid transparent;background-blend-mode:overlay;background-color:hsla(0,0%,100%,.3)}.button.secondary,.button.secondary:hover{border-image-source:linear-gradient(135deg,hsla(0,0%,100%,.6),#000) 1;color:#fff}.button.secondary:hover{background:linear-gradient(135deg,hsla(0,0%,100%,.8),#333)}.button.small{font-size:.8em;padding:1em .5em}.button.medium{font-size:1em;padding:.8em 1.5em;height:50px}.button.large{font-size:1.2em;padding:1em 3em;height:60px}.button.disabled,.button:disabled{opacity:.7;cursor:not-allowed}.color-primary{--color:#1f1f1f;color:var(--color)}.color-secondary{--color:#fff;color:var(--color)}.color-accent-1{--color:#78c091;color:var(--color)}.color-accent-2{--color:#373737;color:var(--color)}.color-brand-1{--color:#dee4fa;color:var(--color)}.color-brand-2{--color:#aab4cc;color:var(--color)}.color-warning{--color:#f0a202;color:var(--color)}.color-error{--color:#f52d00;color:var(--color)}.color-success{--color:#006d77;color:var(--color)}.color-success-darker{--color:#000;color:var(--color)}.tac{text-align:center}.tal{text-align:left}.tar{text-align:right}.font-xxs{font-size:5.9106819033px!important}.font-xs{font-size:7.8789389771px!important}.font-sm{font-size:10.5026256564px!important}.font-md{font-size:14px!important}.font-lg{font-size:18.662px!important}.font-xl{font-size:24.876446px!important}.font-xxl{font-size:33.160302518px!important}.font-xxxl{font-size:44.2026832565px!important}.font-xxxxl{font-size:58.9221767809px!important}.pre{white-space:pre-wrap}body,html{color:#1f1f1f;padding:0;margin:0;height:100%;width:100%;font-size:15px;font-family:Inter,sans-serif}html{scroll-behavior:smooth}.switch-link-underline-direction a:after,.switch-link-underline-direction:after{right:0;left:unset}a{position:relative;word-break:normal;text-decoration:none;font-family:Fira Mono,monospace;color:#dee4fa}a:not(.email-link):after{content:"";display:block;position:absolute;width:0;left:0;bottom:-.5rem;border-bottom:1.5px solid #78c091;transition:width .5s ease-in-out}a:hover{color:#78c091}a:active:after,a:focus:after,a:hover:after{width:100%}a.button:after{content:unset}a.no-underline{text-decoration:none}a.no-underline:after{display:none}.emphasised-number,.emphasised-text{color:#78c091;font-family:Fira Mono,monospace}.emphasised-number{font-size:18.662px}.emphasised-text-normal{color:#aab4cc;font-family:Fira Mono,monospace}*{box-sizing:border-box;--approx-menu-height:6rem}.dark-bg{background-color:#1f1f1f;color:#aab4cc}.content-body{color:#1f1f1f}.content-body section{padding:1.5rem 8rem 6rem}@media only screen and (max-width:62rem){.content-body section{padding:1.5rem 6rem}}@media only screen and (max-width:35rem){.content-body section{padding:.6rem 2rem 1.5rem}}.content-body .image-box{--image-width:50px}.content-body .image-box img{max-width:100%;max-height:100%}.content-body li,.content-body p{line-height:1.8rem;font-weight:500}.content-body p{color:#aab4cc}.content-body li{list-style:none;padding-bottom:1em}.content-body .color-slate{color:#dee4fa}.content-body .no-list-style{list-style:none}.content-body h1,.content-body h2,.content-body h4{font-weight:600;letter-spacing:.03em;margin:2em 0 1em}.content-body h2{border-top:2px solid #1f1f1f;padding-top:1.5em;padding-bottom:1em;color:#dee4fa}.content-body h3{font-weight:600;color:#dee4fa;margin:0 0 1em}header{display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center;padding:1.5rem 2rem;position:fixed;width:100dvw;box-sizing:border-box;z-index:100}header .header-logo{color:#78c091}header .header-logo svg{width:auto;height:50px}header .header-logo:active:after,header .header-logo:focus:after,header .header-logo:hover:after{content:unset}header .menu-toggle{border:2px solid transparent;padding:.25em}header .menu-toggle:after{display:none}header .menu-toggle svg{width:2rem;height:2rem}@media only screen and (min-width:62rem){header nav a{margin-left:2.5rem;font-size:.85rem;font-weight:500}header .menu-toggle{display:none}}@media only screen and (max-width:62rem){header{position:fixed}header nav{display:none;position:absolute;top:100%;right:0;background:#1f1f1f}header nav a,header nav.menu-open{display:block}header nav a{padding:1.25em 2.5em;font-size:.9rem}header nav a:active,header nav a:focus,header nav a:hover{background:color-mix(in srgb,#fff 30%,transparent)}header nav a:active:after,header nav a:focus:after,header nav a:hover:after{display:none}}@media only screen and (max-width:35rem){header{padding:1.25rem;--approx-menu-height:5rem}header .header-logo svg{height:2.2rem}header .header-logo p{font-size:1rem}}@media only screen and (max-width:30rem){header nav{width:100%;border-top:2px solid #fff;border-bottom:2px solid #fff}header nav a{padding:1.5em}}.content-body{padding-top:6rem}.home-page{--section-vertical-padding:4rem}.home-page section.image-right .image{max-height:calc(100dvh - var(--approx-menu-height))}.home-page #landing-section{position:relative;min-height:100dvh;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:3rem 2rem;margin-top:-6rem}.home-page #landing-section h1{margin:.5em}.home-page #landing-section p{margin:2em 3.5em 2.5em}.home-page #landing-section .content{max-width:1000px;width:100%;padding:0 2rem;box-sizing:border-box}.home-page #landing-section .button-container{display:flex;gap:3rem;align-items:center;justify-content:center}.home-page #landing-section .button-container a{font-family:Fira Mono,monospace}@media only screen and (min-width:62rem){.home-page #landing-section{padding:0 3rem}}@media only screen and (max-width:35rem){.home-page #landing-section{padding:3rem 2rem 0;padding-top:var(--section-vertical-padding);text-align:left}.home-page #landing-section .content{padding:3rem 0 0}.home-page #landing-section .content h1,.home-page #landing-section .content p{margin:.5em 0}.home-page #landing-section .button-container{margin:2em 0 2.5em;flex-direction:row;gap:2rem;justify-content:space-between}}@media only screen and (max-width:22rem){.home-page #landing-section .button-container{flex-direction:column;align-items:stretch;justify-content:flex-start}}.home-page #landing-section+section{min-height:unset}#about-me{display:flex;flex-direction:row;gap:3.5rem;align-items:flex-start}#about-me .content-about-me{flex:1 1}#about-me .code-list{display:grid;grid-template-columns:repeat(2,1fr);list-style:none;padding:0}#about-me .code-list .triangle{position:relative;padding-left:1.5rem;font-family:Fira Mono,monospace;font-size:.85rem}#about-me .code-list .triangle:before{content:"▹";position:absolute;left:0;color:#78c091;font-size:14px}#about-me .image{flex:0 0 25vw;display:flex;justify-content:flex-end;align-items:center;margin-top:calc(14.5rem + .5em)}#about-me .image img{width:100%;height:auto;--color:#6fae8c;--border:4px;--offset:15px;--gap:5px;--_c:var(--color) var(--border),#0000 0 calc(100% - var(--border)),var(--color) 0;--_o:calc(3 * var(--offset));padding:calc(var(--gap) + var(--border)) calc(var(--gap) + var(--border) + var(--offset)) calc(var(--gap) + var(--border) + var(--offset)) calc(var(--gap) + var(--border));background:linear-gradient(var(--_c)) var(--_o) var(--_o),linear-gradient(90deg,var(--_c)) var(--_o) var(--_o);background-size:calc(100% - var(--_o)) calc(100% - var(--_o));background-repeat:no-repeat;filter:grayscale(.2);cursor:pointer;transition:all .5s ease-in-out}#about-me .image img:hover{background-position:0 0;background-size:calc(100% - var(--offset)) calc(100% - var(--offset));filter:grayscale(0)}@media only screen and (max-width:62rem){#about-me{flex-direction:column;align-items:center}#about-me .content-about-me{order:1}#about-me .image{order:2;width:60%;margin-top:0}}@media only screen and (max-width:35rem){#about-me .image{width:80%}}.middle-center{justify-content:center;align-items:center;text-align:left}#experience{min-height:unset}#experience .content-experience{display:flex;flex-direction:column;width:80%;margin:0 auto}#experience .content-experience .scroll-indicator{display:none}#experience .content-experience .inner{display:grid;grid-template-columns:auto 1fr;grid-gap:3rem;gap:3rem;width:100%;position:relative}#experience .content-experience .inner .tab-highlight{display:none}#experience .content-experience .inner .tablist{display:flex;flex-direction:column;align-items:flex-start;font-family:Inter,sans-serif;position:relative}#experience .content-experience .inner .tablist:before{content:"";position:absolute;left:0;top:0;height:9rem;width:2px;background-color:#aab4cc}#experience .content-experience .inner .tablist button{background:none;border:none;font-family:Fira Mono,monospace;color:#aab4cc;font-size:14px;font-weight:500;padding:1em 3em;width:100%;text-align:left;position:relative;cursor:pointer}#experience .content-experience .inner .tablist button.active{color:#78c091}#experience .content-experience .inner .tablist button.active:before{content:"";position:absolute;left:0;top:0;height:100%;width:2px;background-color:#78c091}#experience .content-experience .inner .tablist button:hover{color:#78c091}#experience .content-experience .inner .panel{display:none;font-size:14px}#experience .content-experience .inner .panel.active{display:block}#experience .content-experience .inner .panel ul{width:100%;font-family:Inter,sans-serif;padding:0}#experience .content-experience .inner .panel ul li{position:relative;padding-left:2rem}#experience .content-experience .inner .panel ul li:before{content:"▹";position:absolute;left:0;color:#78c091;font-size:18.662px}@media only screen and (max-width:75rem){#experience .content-experience{width:100%;margin:0}}@media only screen and (max-width:45rem){#experience .content-experience .scroll-indicator{display:flex;align-items:center;font-size:.8rem;color:rgba(170,180,204,.4);justify-content:flex-start;width:100%;padding-bottom:.6rem}#experience .content-experience .scroll-indicator svg{height:16px;width:16px}#experience .content-experience .inner{grid-template-columns:1fr}#experience .content-experience .inner .tablist{display:flex;flex-direction:row;overflow-x:auto;gap:3rem;padding-bottom:5px;position:relative;white-space:nowrap;scroll-behavior:smooth}#experience .content-experience .inner .tablist:before{content:"";display:none}#experience .content-experience .inner .tablist::-webkit-scrollbar{display:none}#experience .content-experience .inner .tablist:after{content:"";position:absolute;bottom:0;left:0;width:calc(100% + 80px);height:3px;background-color:rgba(120,192,145,.3)}#experience .content-experience .inner .tablist button{width:auto;padding:.8em 0;font-size:14px;background:none;border:none;color:#aab4cc;position:relative;cursor:pointer;transition:all .25s ease-in-out}#experience .content-experience .inner .tablist button:before{content:"";display:none}#experience .content-experience .inner .tablist button.active{color:#78c091;font-weight:600}#experience .content-experience .inner .tablist button:hover{color:#78c091}#experience .content-experience .inner .tab-highlight{position:absolute;bottom:0;height:3px;background-color:#78c091;transition:transform .25s ease-in-out,width .25s ease-in-out;display:block}}#work .content-work ul{list-style:none;padding:0}#work .content-work ul .project{display:flex;flex-direction:row;gap:2rem;margin-bottom:2rem;align-items:flex-start;position:relative}#work .content-work ul .project.project-left .project-content{text-align:right;order:2}#work .content-work ul .project.project-left .project-content .project-description{border-right:1px solid #aab4cc}#work .content-work ul .project.project-left .project-content .tech-list{justify-content:flex-end}@media only screen and (max-width:75rem){#work .content-work ul .project.project-left .project-content .tech-list{justify-content:flex-start}}#work .content-work ul .project.project-left .project-image{order:1}#work .content-work ul .project.project-right .project-content{text-align:left;order:1}#work .content-work ul .project.project-right .project-content .project-description{border-left:1px solid #aab4cc}#work .content-work ul .project.project-right .project-image{order:2}#work .content-work ul .project .project-content{flex:1 1;position:relative}#work .content-work ul .project .project-content a h3:hover{color:#78c091}#work .content-work ul .project .project-content .project-description{padding:1rem 2rem;z-index:1}#work .content-work ul .project .project-content .tech-list{display:flex;gap:1rem;row-gap:0;flex-wrap:wrap;padding:1.5rem 0 0;margin:0;list-style:none}#work .content-work ul .project .project-content .tech-list li{font-family:Fira Mono,monospace;font-size:14px}#work .content-work ul .project .project-image{flex:1 1;position:relative;overflow:hidden}@media only screen and (min-width:75rem){#work .content-work ul .project .project-image{--color:#6fae8c;--border:4px;--offset:15px;--gap:5px;--_c:var(--color) var(--border),#0000 0 calc(100% - var(--border)),var(--color) 0;--_o:calc(3 * var(--offset));padding:calc(var(--gap) + var(--border)) calc(var(--gap) + var(--border) + var(--offset)) calc(var(--gap) + var(--border) + var(--offset)) calc(var(--gap) + var(--border));background:linear-gradient(var(--_c)) var(--_o) var(--_o),linear-gradient(90deg,var(--_c)) var(--_o) var(--_o);background-size:calc(100% - var(--_o)) calc(100% - var(--_o));background-repeat:no-repeat;filter:grayscale(.2);cursor:pointer;transition:all .5s ease-in-out}#work .content-work ul .project .project-image:hover{background-position:0 0;background-size:calc(100% - var(--offset)) calc(100% - var(--offset));filter:grayscale(0)}}#work .content-work ul .project .project-image a{display:block;position:relative}#work .content-work ul .project .project-image a:before{opacity:.6}#work .content-work ul .project .project-image a:before,#work .content-work ul .project .project-image a:hover:before{content:"";position:absolute;top:0;left:0;width:100%;height:100%;background-color:#6fae8c;z-index:1;transition:opacity .3s ease}#work .content-work ul .project .project-image a:hover:before{opacity:0}#work .content-work ul .project .project-image img{width:100%;height:auto;display:block}#work .content-work ul .project .link-btn{display:none}@media only screen and (max-width:75rem){#work .content-work ul .project{flex-direction:column;align-items:stretch;justify-items:flex-start!important;align-items:flex-start!important;justify-content:flex-start!important;align-content:flex-start!important;text-align:left!important}#work .content-work ul .project .project-image{display:none}#work .content-work ul .project.project-left .project-content .project-description,#work .content-work ul .project.project-right .project-content .project-description{border-left:none;border-right:none}#work .content-work ul .project .project-content{position:relative;padding:3rem 2rem;border:2px solid #78c091;justify-items:flex-start!important;align-items:flex-start!important;justify-content:flex-start!important;align-content:flex-start!important;text-align:left!important}#work .content-work ul .project .project-content>*{position:relative;z-index:2}#work .content-work ul .project .project-content h3{text-align:left;margin-bottom:2rem}#work .content-work ul .project .project-content .project-description{background:none;box-shadow:none;border-left:none;padding:0}#work .content-work ul .project .project-content .project-description p{text-align:left}#work .content-work ul .project .project-content .tech-list{padding:0;margin-top:2rem}#work .content-work ul .project .project-content .tech-list li{padding:0}#work .content-work ul .project .project-content svg{display:none}#work .content-work ul .project .project-content .link-btn{display:inline-flex;margin-top:1.5rem;border:2px solid #78c091;background:transparent;color:#78c091;font-family:Fira Mono,monospace;font-size:.8em;padding:.5rem 1rem;border-radius:4px;cursor:pointer;transition:background .3s ease,color .3s ease}#work .content-work ul .project .project-content .link-btn:hover{background:#78c091;color:#1f1f1f}}#projects .content-project{max-width:1200px;margin:0 auto;text-align:center}@media only screen and (max-width:48rem){#projects .content-project h2{text-align:left}}#projects .content-project .projects-grid{display:grid;grid-template-columns:repeat(3,1fr);grid-gap:1.5rem;gap:1.5rem;padding:0}@media only screen and (max-width:75rem){#projects .content-project .projects-grid{grid-template-columns:repeat(2,1fr)}}@media only screen and (max-width:48rem){#projects .content-project .projects-grid{grid-template-columns:1fr}}#projects .content-project .project-card{position:relative;display:flex;flex-direction:column;justify-content:space-between;padding:3rem 2rem;border:2px solid #78c091;box-shadow:0 4px 8px rgba(0,0,0,.1);transition:transform .2s ease,box-shadow .2s ease;text-align:left}#projects .content-project .project-card:hover{transform:translateY(-5px);box-shadow:0 8px 16px rgba(0,0,0,.2)}#projects .content-project .project-card .project-content{position:relative;display:flex;flex-direction:column;height:100%}#projects .content-project .project-card .project-content .project-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem}#projects .content-project .project-card .project-content .project-header .folder-icon{color:#78c091}#projects .content-project .project-card .project-content .project-header .project-links{display:flex;gap:1rem}#projects .content-project .project-card .project-content .project-header .project-links a{transition:color .3s}#projects .content-project .project-card .project-content .project-header .project-links a:hover{color:#78c091}#projects .content-project .project-card .project-content .project-description{flex-grow:1;margin-bottom:1rem;min-height:50px}#projects .content-project .project-card .project-content .tech-list{margin-top:auto;display:flex;flex-wrap:wrap;gap:.5rem;padding:0}#projects .content-project .project-card .project-content .tech-list li{padding:.2rem 1rem;font-size:.85rem;color:#78c091;background:hsla(0,0%,100%,.1);border-radius:15px}#contact{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;min-height:calc(100dvh - var(--approx-menu-height))}@media only screen and (max-width:48rem){#contact{min-height:unset}}#contact .content{padding:5rem 0}#contact .content h2{margin:0}#contact .content p{max-width:750px;margin-bottom:5rem}#contact .content a{border:2px solid #78c091;background:transparent;color:#78c091;font-family:Fira Mono,monospace;padding:1rem 2rem;border-radius:4px;cursor:pointer;transition:background .3s ease,color .3s ease}@media only screen and (max-width:35rem){#contact .content a{font-size:.8rem}}#contact .content a:hover{background:#78c091;color:#1f1f1f}.left-stick,.right-stick{position:fixed;display:flex;flex-direction:column;align-items:center;z-index:1000}@media only screen and (max-width:48rem){.left-stick,.right-stick{display:none}}.left-stick{left:2rem;bottom:0}.right-stick{right:2rem;bottom:0;text-align:right}.icon-container{display:flex;flex-direction:column;gap:1rem;margin-bottom:1rem}.email-link{writing-mode:vertical-rl;-webkit-text-orientation:mixed;text-orientation:mixed;margin-bottom:1rem;text-decoration:none;font-family:Fira Mono,monospace;font-size:.85rem;color:#dee4fa;position:relative;display:inline-block}.email-link:after{content:"";display:block;position:absolute;height:0;left:-.5rem;top:0;border-left:1.5px solid #78c091;transition:height .5s ease-in-out}.email-link:hover{color:#78c091}.email-link:active:after,.email-link:focus:after,.email-link:hover:after{height:100%}.vertical-line{width:2px;height:100px;background:linear-gradient(107.21deg,#78c091 24.43%,#373737 68.95%)}#footer-container .footer{text-align:center;padding:1rem 0;font-size:.85rem}#footer-container .footer .footer-icons{display:none;margin-bottom:1rem}#footer-container .footer .footer-icons a{margin:0 1rem;color:#dee4fa}#footer-container .footer .footer-icons a:hover{color:#78c091}@media only screen and (max-width:48rem){#footer-container .footer .footer-icons{display:flex;justify-content:center}}#circle-pointer{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:3000;pointer-events:none;background:radial-gradient(600px at var(--mouse-x,50%) var(--mouse-y,50%),rgba(55,55,55,.15),transparent 80%);transition:background-color .3s cubic-bezier(.4,0,.2,1)}