body{margin:0;padding:0;font-family:Arial,sans-serif;color:#fff;background-color:#1d1d1e;min-height:100vh}html{margin:0;padding:0}a{color:#61dafb;text-decoration:none}a:hover{text-decoration:underline}.Home{display:flex;flex-direction:column;align-items:center;text-align:center;overflow-x:hidden;padding:1em 1em 0;min-height:100vh}.Headshot{float:left}.BackgroundImageContainer{position:fixed;width:100%;height:100%;z-index:-1}.BackgroundImageContainer img{width:100%;height:100%;object-fit:cover}.BackgroundImageContainer #tsparticles{position:fixed;width:100%;height:100%;z-index:-1}.BlurOverlay{position:fixed;top:0;left:0;width:100%;height:100%;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px);background:#00000080;z-index:-1}.PersonModal{display:inline-block;padding:2em 1em;background:#0009;border-radius:1em;max-width:800px;width:100%;box-shadow:0 0 10px #000000b3;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);text-align:left;margin-top:1em}.Headshot{width:60vw;height:60vw;max-width:200px;max-height:200px;border-radius:50%;object-fit:cover;margin-bottom:1em;box-shadow:0 0 10px #000000b3}.PersonModal h1{font-size:2em;margin:.5em 0}.PersonModal p{font-size:1em;margin:.5em 0;text-align:right}.PersonModal h2{text-align:left}.Specialties{list-style:none;padding:0;margin:1em 0 0;text-align:left}.Specialties li{display:inline-block;border:1px solid rgba(155,89,182,.4);background:#9b59b61a;color:#9b59b6;padding:.5em 1em;margin:.5em .25em;border-radius:1em;font-size:.9em;font-weight:500;transition:all .3s ease}.Specialties li:hover{background:#9b59b633;border-color:#9b59b699;transform:translateY(-1px)}.Specialties i{margin:.5em;padding:.5em 1em}.Projects{width:100%;padding:2em 1em;margin:2em 0;border-radius:1em}.Projects h2{font-size:2em;text-align:left;align-self:flex-start;margin:auto auto 0;padding-bottom:0;text-align:center}.ProjectList{text-align:center;vertical-align:top;max-width:2000px;margin:0 auto}.ProjectCard{border-radius:1em;overflow:hidden;width:auto;box-shadow:0 0 10px #00000080;position:relative;height:auto;max-width:80vw;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);display:block;margin:1em auto 3em;text-align:left;background:#0009}.ProjectImageSection{width:100%;height:auto}.ProjectContent{padding:1.5em;width:100%;height:auto;text-align:left;background:#000000b3;box-sizing:border-box}.ProjectDescription{margin:1em 0;line-height:1.6}.ProjectDescription h1{font-size:1.6em}.ProjectDescription h2{font-size:1.4em}.ProjectDescription h3{font-size:1.3em}.ProjectDescription h4{font-size:1.1em}.ProjectDescription p{margin-bottom:1em;color:#ebebf5;line-height:1.6}.ProjectDescription ul{margin-left:1.5em;margin-bottom:1em}.ProjectDescription li{margin-bottom:.5em;color:#ebebf5}.ProjectDescription strong{color:#fff;font-weight:600}.ProjectDescription em{color:#c68b53;font-style:italic}.ProjectDescription code{background:#61dafb1a;color:#61dafb;padding:.2em .3em;border-radius:.2em;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:.9em}.ProjectDescription blockquote{border-left:3px solid #c68b53;margin:1em 0;padding:.8em 1.2em;background:#c68b531a;border-radius:0 .3em .3em 0}.ProjectDescription a{color:#61dafb;text-decoration:none;border-bottom:1px solid transparent;transition:border-bottom-color .3s ease}.ProjectDescription a:hover{border-bottom-color:#61dafb}.ProjectTech{margin:1.5em 0}.ProjectTech h4{color:#fafafacc;margin-bottom:.5em;font-size:1.1em}.ProjectLinks{display:flex;gap:1em;flex-wrap:wrap;margin-top:1.5em}.DemoLink{background:#61dafb33}.ProjectContent h3{font-size:1.5em;margin:.5em 0}.ProjectContent p{font-size:1em;margin:.5em 0;color:#ebebf5}.LinkIcon{background:#00000080;border-radius:50%;padding:.3em;width:50px;height:50px}.ProjectImage{width:100%;height:auto;text-align:center;object-fit:cover;margin:0}.ImageGallery{width:100%;max-height:50vh;border-radius:1em;overflow:hidden;background:#0000004d}.image-gallery-thumbnails-wrapper{background:#000000b3}.image-gallery-thumbnail{border:2px solid rgba(155,89,182,.3)!important;border-radius:.3em!important;transition:all .3s ease!important}.image-gallery-thumbnail:hover{border-color:#9b59b699!important}.image-gallery-thumbnail.active{border-color:#9b59b6!important;box-shadow:0 0 10px #9b59b666!important}.image-gallery-bullet{background:#9b59b666!important;border:1px solid rgba(155,89,182,.3)!important;transition:all .3s ease!important}.image-gallery-bullet:hover{background:#9b59b699!important;border-color:#9b59b680!important}.image-gallery-bullet.active{background:#9b59b6!important;border-color:#9b59b6!important}.image-gallery-left-nav,.image-gallery-right-nav{color:#9b59b6!important;background:#9b59b61a!important;border:1px solid rgba(155,89,182,.3)!important;transition:all .3s ease!important}.image-gallery-left-nav:hover,.image-gallery-right-nav:hover{background:#9b59b633!important;border-color:#9b59b680!important;color:#9b59b6!important}.image-gallery-fullscreen-button,.image-gallery-play-button{color:#9b59b6!important;background:#9b59b61a!important;border:1px solid rgba(155,89,182,.3)!important;transition:all .3s ease!important}.image-gallery-fullscreen-button:hover,.image-gallery-play-button:hover{background:#9b59b633!important;border-color:#9b59b680!important;color:#9b59b6!important}.GitHubLink{text-decoration:none;color:#fff;padding:.75em 1.5em;border-radius:.5em;font-weight:700;display:inline-block;margin-top:.5em;margin-right:.5em;background:#ffffff1a;border:1px solid rgba(255,255,255,.2);transition:all .25s ease-in-out}.GitHubLink:hover{background:#fff3;color:#fff;text-decoration:none;transform:translateY(-2px);box-shadow:0 4px 8px #0000004d}.ProjectDescription h1,.ProjectDescription h2,.ProjectDescription h3,.ProjectDescription h4,.ProjectDescription h5,.ProjectDescription h6{color:#61dafb;margin-top:1.5em;margin-bottom:.5em;font-weight:600}.ProjectDescription h4{font-size:1.2em;border-bottom:1px solid rgba(97,218,251,.3);padding-bottom:.3em}.ProjectDescription code{background:#61dafb33;color:#61dafb;padding:.2em .4em;border-radius:.3em;font-family:Courier New,monospace;font-size:.9em}.ProjectDescription blockquote{border-left:4px solid #61dafb;padding-left:1em;margin-left:0;font-style:italic;color:#ccc}.ProjectDescription a{color:#61dafb;text-decoration:none;border-bottom:1px solid transparent;transition:border-bottom .2s ease}.ProjectDescription a:hover{border-bottom:1px solid #61dafb}.Footer{background:linear-gradient(135deg,#0d1c2ce6,#c68b531a);border-top:2px solid rgba(155,89,182,.3);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);text-align:center;padding:3em 1em 2em;width:100%;margin-top:4em;margin-bottom:0;box-shadow:0 -5px 20px #0000004d;position:relative}.Footer:before{content:"";position:absolute;top:0;left:50%;transform:translate(-50%);width:100px;height:2px;background:linear-gradient(90deg,transparent,#9b59b6,transparent)}.Footer .footer-content{max-width:800px;margin:0 auto;display:flex;flex-direction:column;gap:1.5em}.Footer .contact-section{margin-bottom:1em}.Footer .main-contact{margin:0 0 1em;font-size:1.4em;font-weight:600;color:#9b59b6;text-shadow:0 2px 4px rgba(0,0,0,.5)}.Footer .email-link{color:#9b59b6;font-size:1.3em;text-decoration:none;font-weight:500;padding:.5em 1em;border-radius:.5em;background:#9b59b61a;border:1px solid rgba(155,89,182,.3);transition:all .3s ease;display:inline-block;margin-bottom:1em}.Footer .email-link:hover{background:#9b59b633;border-color:#9b59b699;transform:translateY(-2px);box-shadow:0 4px 15px #9b59b64d;text-decoration:none}.Footer .secondary-email{margin:.5em 0;font-size:1.1em;color:#ebebf5;opacity:.9}.Footer .copyright{margin:1.5em 0 0;font-size:1em;color:#ebebf5;opacity:.7;font-weight:300;letter-spacing:.5px;border-top:1px solid rgba(155,89,182,.2);padding-top:1.5em}@media (min-width: 768px){.PersonModal{padding:3em}.PersonModal h1{font-size:2.5em}.PersonModal p{font-size:1.2em}.Specialties li{font-size:1em;margin:.5em}.Projects h2{font-size:3em}.ProjectContent h3{font-size:1.8em}.ProjectContent p{font-size:1.1em}.ProjectContent a{font-size:1em}.ProjectCard{max-width:90vw}.Footer{padding:4em 2em 3em}.Footer .footer-content{display:flex;flex-direction:row;justify-content:space-between;align-items:center}.Footer .contact-section{text-align:left;margin-bottom:0}.Footer .main-contact{font-size:1.6em;margin-bottom:.8em;color:#9b59b6}.Footer .email-link{font-size:1.4em}.Footer .copyright{margin:0;padding:0;border:none;font-size:1.1em}}@media (min-width: 1024px){.ProjectCard{display:flex;max-width:95vw;min-height:500px;align-items:stretch}.ProjectImageSection{flex:0 0 45%;display:flex;align-items:center;background:#0000004d}.ProjectContent{flex:1;padding:2.5em;display:flex;flex-direction:column;justify-content:flex-start;overflow-y:auto}.ProjectDescription{flex:1;margin-bottom:2em}.ImageGallery{max-height:500px;width:100%}.Projects h2{font-size:3.5em}.ProjectDescription h1,.ProjectDescription h2,.ProjectDescription h3,.ProjectDescription h4,.ProjectDescription h5,.ProjectDescription h6{color:#61dafb;margin-top:1.5em;margin-bottom:.8em;font-weight:600}.ProjectDescription h1{font-size:1.8em}.ProjectDescription h2{font-size:1.6em}.ProjectDescription h3{font-size:1.4em}.ProjectDescription h4{font-size:1.2em}.ProjectDescription p{margin-bottom:1.2em;line-height:1.7;color:#ebebf5}.ProjectDescription ul{margin-left:1.8em;margin-bottom:1.2em}.ProjectDescription li{margin-bottom:.6em;color:#ebebf5}.ProjectDescription strong{color:#fff;font-weight:700}.ProjectDescription em{color:#c68b53;font-style:italic}.ProjectDescription code{background:#61dafb1a;color:#61dafb;padding:.2em .4em;border-radius:.3em;font-family:Monaco,Menlo,Ubuntu Mono,monospace;font-size:.9em}.ProjectDescription blockquote{border-left:4px solid #c68b53;margin:1.5em 0;padding:1em 1.5em;background:#c68b531a;border-radius:0 .5em .5em 0}.ProjectDescription a{color:#61dafb;text-decoration:none;border-bottom:1px solid transparent;transition:border-bottom-color .3s ease}.ProjectDescription a:hover{border-bottom-color:#61dafb}.Footer{padding:5em 2em 4em}.Footer .footer-content{max-width:1000px;display:flex;flex-direction:row;justify-content:space-between;align-items:center}.Footer .contact-section{text-align:left}.Footer .main-contact{font-size:1.8em;margin-bottom:1em;color:#9b59b6}.Footer .email-link{font-size:1.5em;padding:.7em 1.5em}.Footer .secondary-email{font-size:1.2em}.Footer .copyright{margin:0;padding:0;border:none;font-size:1.2em;text-align:right}}.image-gallery-icon{color:#fff;transition:all .3s ease-out;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:0;cursor:pointer;outline:none;position:absolute;z-index:4;filter:drop-shadow(0 2px 2px #1a1a1a)}@media (hover: hover)and (pointer: fine){.image-gallery-icon:hover{color:#337ab7}.image-gallery-icon:hover .image-gallery-svg{transform:scale(1.1)}}.image-gallery-icon:focus{outline:2px solid #337ab7}.image-gallery-using-mouse .image-gallery-icon:focus{outline:none}.image-gallery-fullscreen-button,.image-gallery-play-button{bottom:0;padding:20px}.image-gallery-fullscreen-button .image-gallery-svg,.image-gallery-play-button .image-gallery-svg{height:28px;width:28px}@media (max-width: 768px){.image-gallery-fullscreen-button,.image-gallery-play-button{padding:15px}.image-gallery-fullscreen-button .image-gallery-svg,.image-gallery-play-button .image-gallery-svg{height:24px;width:24px}}@media (max-width: 480px){.image-gallery-fullscreen-button,.image-gallery-play-button{padding:10px}.image-gallery-fullscreen-button .image-gallery-svg,.image-gallery-play-button .image-gallery-svg{height:16px;width:16px}}.image-gallery-fullscreen-button{right:0}.image-gallery-play-button{left:0}.image-gallery-left-nav,.image-gallery-right-nav{padding:50px 10px;top:50%;transform:translateY(-50%)}.image-gallery-left-nav .image-gallery-svg,.image-gallery-right-nav .image-gallery-svg{height:120px;width:60px}@media (max-width: 768px){.image-gallery-left-nav .image-gallery-svg,.image-gallery-right-nav .image-gallery-svg{height:72px;width:36px}}@media (max-width: 480px){.image-gallery-left-nav .image-gallery-svg,.image-gallery-right-nav .image-gallery-svg{height:48px;width:24px}}.image-gallery-left-nav[disabled],.image-gallery-right-nav[disabled]{cursor:disabled;opacity:.6;pointer-events:none}.image-gallery-left-nav{left:0}.image-gallery-right-nav{right:0}.image-gallery{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0);position:relative}.image-gallery.fullscreen-modal{background:#000;bottom:0;height:100%;left:0;position:fixed;right:0;top:0;width:100%;z-index:5}.image-gallery.fullscreen-modal .image-gallery-content{top:50%;transform:translateY(-50%)}.image-gallery-content{position:relative;line-height:0;top:0}.image-gallery-content.fullscreen{background:#000}.image-gallery-content .image-gallery-slide .image-gallery-image{max-height:calc(100vh - 80px)}.image-gallery-content.image-gallery-thumbnails-left .image-gallery-slide .image-gallery-image,.image-gallery-content.image-gallery-thumbnails-right .image-gallery-slide .image-gallery-image{max-height:100vh}.image-gallery-slide-wrapper{position:relative}.image-gallery-slide-wrapper.image-gallery-thumbnails-left,.image-gallery-slide-wrapper.image-gallery-thumbnails-right{display:inline-block;width:calc(100% - 110px)}@media (max-width: 768px){.image-gallery-slide-wrapper.image-gallery-thumbnails-left,.image-gallery-slide-wrapper.image-gallery-thumbnails-right{width:calc(100% - 87px)}}.image-gallery-slide-wrapper.image-gallery-rtl{direction:rtl}.image-gallery-slides{line-height:0;overflow:hidden;position:relative;white-space:nowrap;text-align:center}.image-gallery-slide{left:0;position:absolute;top:0;width:100%}.image-gallery-slide.image-gallery-center{position:relative}.image-gallery-slide .image-gallery-image{width:100%;object-fit:contain}.image-gallery-slide .image-gallery-description{background:#0006;bottom:70px;color:#fff;left:0;line-height:1;padding:10px 20px;position:absolute;white-space:normal}@media (max-width: 768px){.image-gallery-slide .image-gallery-description{bottom:45px;font-size:.8em;padding:8px 15px}}.image-gallery-bullets{bottom:20px;left:0;margin:0 auto;position:absolute;right:0;width:80%;z-index:4}.image-gallery-bullets .image-gallery-bullets-container{margin:0;padding:0;text-align:center}.image-gallery-bullets .image-gallery-bullet{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:1px solid #fff;border-radius:50%;box-shadow:0 2px 2px #1a1a1a;cursor:pointer;display:inline-block;margin:0 5px;outline:none;padding:5px;transition:all .2s ease-out}@media (max-width: 768px){.image-gallery-bullets .image-gallery-bullet{margin:0 3px;padding:3px}}@media (max-width: 480px){.image-gallery-bullets .image-gallery-bullet{padding:2.7px}}.image-gallery-bullets .image-gallery-bullet:focus{transform:scale(1.2);background:#337ab7;border:1px solid #337ab7}.image-gallery-bullets .image-gallery-bullet.active{transform:scale(1.2);border:1px solid #fff;background:#fff}@media (hover: hover)and (pointer: fine){.image-gallery-bullets .image-gallery-bullet:hover{background:#337ab7;border:1px solid #337ab7}.image-gallery-bullets .image-gallery-bullet.active:hover{background:#337ab7}}.image-gallery-thumbnails-wrapper{position:relative}.image-gallery-thumbnails-wrapper.thumbnails-swipe-horizontal{touch-action:pan-y}.image-gallery-thumbnails-wrapper.thumbnails-swipe-vertical{touch-action:pan-x}.image-gallery-thumbnails-wrapper.thumbnails-wrapper-rtl{direction:rtl}.image-gallery-thumbnails-wrapper.image-gallery-thumbnails-left,.image-gallery-thumbnails-wrapper.image-gallery-thumbnails-right{display:inline-block;vertical-align:top;width:100px}@media (max-width: 768px){.image-gallery-thumbnails-wrapper.image-gallery-thumbnails-left,.image-gallery-thumbnails-wrapper.image-gallery-thumbnails-right{width:81px}}.image-gallery-thumbnails-wrapper.image-gallery-thumbnails-left .image-gallery-thumbnails,.image-gallery-thumbnails-wrapper.image-gallery-thumbnails-right .image-gallery-thumbnails{height:100%;width:100%;left:0;padding:0;position:absolute;top:0}.image-gallery-thumbnails-wrapper.image-gallery-thumbnails-left .image-gallery-thumbnails .image-gallery-thumbnail,.image-gallery-thumbnails-wrapper.image-gallery-thumbnails-right .image-gallery-thumbnails .image-gallery-thumbnail{display:block;margin-right:0;padding:0}.image-gallery-thumbnails-wrapper.image-gallery-thumbnails-left .image-gallery-thumbnails .image-gallery-thumbnail+.image-gallery-thumbnail,.image-gallery-thumbnails-wrapper.image-gallery-thumbnails-right .image-gallery-thumbnails .image-gallery-thumbnail+.image-gallery-thumbnail{margin-left:0;margin-top:2px}.image-gallery-thumbnails-wrapper.image-gallery-thumbnails-left,.image-gallery-thumbnails-wrapper.image-gallery-thumbnails-right{margin:0 5px}@media (max-width: 768px){.image-gallery-thumbnails-wrapper.image-gallery-thumbnails-left,.image-gallery-thumbnails-wrapper.image-gallery-thumbnails-right{margin:0 3px}}.image-gallery-thumbnails{overflow:hidden;padding:5px 0}@media (max-width: 768px){.image-gallery-thumbnails{padding:3px 0}}.image-gallery-thumbnails .image-gallery-thumbnails-container{cursor:pointer;text-align:center;white-space:nowrap}.image-gallery-thumbnail{display:inline-block;border:4px solid transparent;transition:border .3s ease-out;width:100px;background:transparent;padding:0}@media (max-width: 768px){.image-gallery-thumbnail{border:3px solid transparent;width:81px}}.image-gallery-thumbnail+.image-gallery-thumbnail{margin-left:2px}.image-gallery-thumbnail .image-gallery-thumbnail-inner{display:block;position:relative}.image-gallery-thumbnail .image-gallery-thumbnail-image{vertical-align:middle;width:100%;line-height:0}.image-gallery-thumbnail.active,.image-gallery-thumbnail:focus{outline:none;border:4px solid #337ab7}@media (max-width: 768px){.image-gallery-thumbnail.active,.image-gallery-thumbnail:focus{border:3px solid #337ab7}}@media (hover: hover)and (pointer: fine){.image-gallery-thumbnail:hover{outline:none;border:4px solid #337ab7}}@media (hover: hover)and (pointer: fine)and (max-width: 768px){.image-gallery-thumbnail:hover{border:3px solid #337ab7}}.image-gallery-thumbnail-label{box-sizing:border-box;color:#fff;font-size:1em;left:0;line-height:1em;padding:5%;position:absolute;top:50%;text-shadow:0 2px 2px #1a1a1a;transform:translateY(-50%);white-space:normal;width:100%}@media (max-width: 768px){.image-gallery-thumbnail-label{font-size:.8em;line-height:.8em}}.image-gallery-index{background:#0006;color:#fff;line-height:1;padding:10px 20px;position:absolute;right:0;top:0;z-index:4}@media (max-width: 768px){.image-gallery-index{font-size:.8em;padding:5px 10px}}:root{font-family:Inter,system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#ffffffde;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{font-weight:500;color:#646cff;text-decoration:inherit}a:hover{color:#535bf2}body{margin:0;place-items:center;min-width:320px;min-height:100vh}h1{font-size:3.2em;line-height:1.1}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}@media (prefers-color-scheme: light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}}
