<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">:root{--font-family:system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif;--font-family-heading:Charter, "Bitstream Charter", "Sitka Text", Cambria, serif;--color-default:#f2f2f2;--color-summary:#e5e5e5;--color-linear:rgba(0,0,0,.1);--color-linear-active:rgba(0,0,0,.035);--color-text:#404040;--color-heading:#9b59b6;--color-focus:#0064ff}*,:after,:before{box-sizing:border-box;margin:0;padding:0}html{font-family:system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,sans-serif;font-family:var(--font-family);font-weight:400;overflow-x:hidden;overflow-y:auto;scroll-behavior:smooth;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-text-size-adjust:100%;-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent}body{background:#f2f2f2;background:var(--color-default);line-height:1.5;position:relative;text-rendering:optimizeSpeed}ol,ul{list-style-type:none}h1,h2,h3,h4,h5,h6{line-height:normal;margin-bottom:0;margin-top:0}img{display:block;max-width:100%}:focus{outline:none}:focus-visible{box-shadow:0 0 0 1px #0064ff;box-shadow:0 0 0 1px var(--color-focus)}@media (max-width:61.9375rem){[data-aos]{opacity:1!important;transform:none!important}}nav{background:#f2f2f2;background:var(--color-default);box-shadow:0 1px .625rem #0000001a;height:3.75rem;left:0;padding:0 .9375rem;position:fixed;top:0;transition:height .15s ease-in-out;width:100%;z-index:100}nav :not(span){height:inherit}body.scrolled nav{height:2.5rem}nav ul{background:transparent;height:inherit;justify-content:flex-start;margin:0 auto;max-width:60.625rem;width:100%}nav ul li{border-bottom:none;border-right:1px solid rgba(0,0,0,.1);border-right:1px solid var(--color-linear)}nav ul li:first-of-type{border-bottom:none;border-left:1px solid rgba(0,0,0,.1);border-left:1px solid var(--color-linear)}nav ul li a{align-items:flex-end;color:#404040;color:var(--color-text);display:flex;height:inherit;padding:0 1.25rem .625rem;position:relative;-webkit-text-decoration:none;text-decoration:none;transform:perspective(1px) translateZ(0)}nav ul li a:before{background:#0000001a;background:var(--color-linear);bottom:0;content:"";left:0;position:absolute;right:0;top:0;transform:scaleX(0);transform-origin:50%;transition:transform .2s ease-out;z-index:-1}nav ul li a.active:before{background:#00000009;background:var(--color-linear-active)}nav ul li a.active:before,nav ul li a:focus-visible:before,nav ul li a:hover:before{transform:scaleX(1)}@media (max-width:61.9375rem){nav ul{justify-content:center}}@media (min-width:48rem){nav ul{display:flex!important}}@media (max-width:47.9375rem){nav{height:2.5rem;padding:2.5rem 0 0}nav ul{background:#f2f2f2;background:var(--color-default);display:none;height:calc(100vh - 5rem)}nav ul li{border-bottom:1px solid rgba(0,0,0,.1);border-bottom:1px solid var(--color-linear);border-right:none;height:auto}nav ul li:first-of-type{border-top:1px solid rgba(0,0,0,.1);border-top:1px solid var(--color-linear)}nav ul li a{display:block;padding:.625rem .9375rem}nav ul li a:not(.active):hover:before{transform:scaleX(0)}}a.trigger-mobile-menu{display:none;height:1.875rem;position:absolute;right:.9375rem;top:.3125rem;width:1.875rem}a.trigger-mobile-menu span{background:#404040;background:var(--color-text);display:block;height:.125rem;left:.375rem;pointer-events:none;position:absolute;transition:all .2s ease-out;width:calc(100% - .75rem)}a.trigger-mobile-menu span:first-of-type{top:50%;transform:translateY(calc(-50% - .375rem)) rotate(0)}a.trigger-mobile-menu span:nth-of-type(2){opacity:1;top:50%;transform:translateY(-50%)}a.trigger-mobile-menu span:nth-of-type(3){top:50%;transform:translateY(calc(-50% + .375rem)) rotate(0)}a.trigger-mobile-menu.open span:first-of-type{top:50%;transform:translateY(calc(-50% + -0rem)) rotate(135deg)}a.trigger-mobile-menu.open span:nth-of-type(2){opacity:0}a.trigger-mobile-menu.open span:nth-of-type(3){top:50%;transform:translateY(calc(-50% + 0rem)) rotate(225deg)}@media (max-width:47.9375rem){a.trigger-mobile-menu{display:block}}[data-section=proj-nav] aside{border-radius:.25rem;overflow:hidden}@media (max-width:991){[data-section=proj-nav] aside{border-radius:none;overflow:visible;overflow:initial}}[data-section=proj-nav] h3{background:#9b59b6;background:var(--color-heading);color:#f2f2f2;color:var(--color-default);cursor:auto;font-size:1rem;font-weight:600;line-height:1.5;margin-bottom:1px;padding:.5rem 1rem;position:relative}@media (max-width:61.9375rem){[data-section=proj-nav] h3{cursor:pointer}[data-section=proj-nav] h3:after{background:url(/icon-angle-up.svg) no-repeat;background-position:50%;background-size:30% auto;content:"";height:2.5rem;position:absolute;right:0;top:0;transform:rotate(180deg);transition:transform .15s ease-out;width:2.5rem}[data-section=proj-nav] h3.open:after{transform:rotate(0)}}[data-section=proj-nav] ul li{margin-bottom:1px}[data-section=proj-nav] ul li a{background:#00000009;background:var(--color-linear-active);color:#404040;color:var(--color-text);display:block;padding:.5rem 1rem;-webkit-text-decoration:none;text-decoration:none;transition:background .15s ease-out}[data-section=proj-nav] ul li a.active,[data-section=proj-nav] ul li a:hover{background:#0000001a;background:var(--color-linear)}[data-section=proj-nav] ul li a.active{pointer-events:none}@media (min-width:62rem){[data-section=proj-nav] ul{display:block!important}}@media (max-width:61.9375rem){[data-section=proj-nav] ul{display:none}[data-section=proj-nav] ul li a:hover{background:#00000009;background:var(--color-linear-active)}[data-section=proj-nav] ul li a.active:hover{background:#0000001a;background:var(--color-linear)}}header{aspect-ratio:16/9;background:linear-gradient(45deg,#140000,#be49e2);display:grid;grid-template-columns:1fr minmax(0,60.625rem) 1fr;left:0;max-height:19.375rem;min-height:13.125rem;overflow:hidden;padding:3.75rem .9375rem 0;position:fixed;top:0;width:100%;z-index:1}header .parallax-container{transform:translateZ(0);will-change:transform;z-index:0}header .parallax-container,header .particle-canvas{height:100%;left:0;position:absolute;top:0;width:100%}header .particle-canvas{pointer-events:none}header h1,header h2{color:#f2f2f2;color:var(--color-default);grid-column:2;position:relative;text-transform:uppercase;z-index:1}header h1{align-self:end;font-family:Charter,Bitstream Charter,Sitka Text,Cambria,serif;font-family:var(--font-family-heading);font-size:clamp(1.25rem,-.8423rem + 10.4615vw,5.75rem);font-weight:500}header h2{font-size:clamp(1.125rem,.5712rem + 2.7692vw,2.25rem);font-weight:200;letter-spacing:.1875rem}header.scrolled{background:#e5e5e5;background:var(--color-summary)}header.scrolled h1,header.scrolled h2{color:#e5e5e5;color:var(--color-summary)}header:after{content:"";display:block;height:19.375rem;left:0;position:absolute;top:0;width:100%}@media (max-width:61.9375rem){header{text-align:center}}@media (max-width:47.9375rem){header{padding:2.5rem .9375rem 0;position:relative}}footer{bottom:0;height:2.5rem;left:0;position:fixed;width:100%;z-index:100}footer .footer--inner{background:#f2f2f2;background:var(--color-default);box-shadow:0 -1px .625rem #0000001a;box-shadow:0 -1px .625rem var(--color-linear);display:grid;grid-template-columns:1fr 60.625rem 1fr;height:inherit;left:-.625rem;position:absolute;top:0;width:calc(100% + 1.25rem)}footer .footer--inner ul{border-left:1px solid rgba(0,0,0,.1);border-left:1px solid var(--color-linear);display:grid;grid-column:2;grid-template-columns:repeat(3,auto) 1fr}footer .footer--inner ul li{align-items:center;border-right:1px solid rgba(0,0,0,.1);border-right:1px solid var(--color-linear);display:flex;font-size:.8125rem;padding:0 1.25rem}footer .footer--inner ul li a{color:#404040;color:var(--color-text);display:block;-webkit-text-decoration:none;text-decoration:none}footer .footer--inner ul li img{width:1.125rem}footer .footer--inner ul li span{margin-right:.3125rem}footer .footer--inner ul li:last-child{justify-self:flex-end}footer .footer--inner ul li:last-child a{opacity:0;pointer-events:none;transition:opacity .15s ease-out}footer .footer--inner ul li:last-child a.visible{opacity:1;pointer-events:auto}article:first-of-type{background:#f2f2f2;background:var(--color-default);bottom:0;display:grid;grid-template-columns:1fr 17.5rem 1.875rem 41.25rem 1fr;margin:19.375rem 0 0;padding:2.5rem .9375rem 0;position:relative;z-index:3}article:first-of-type section[data-section=proj-nav]{grid-column:2;padding:0 0 5rem}article:first-of-type section[data-section=proj-nav] aside{position:sticky;top:5rem}article:first-of-type section[data-section=proj-display]{grid-column:4;padding:0 0 5rem}@media (max-width:61.9375rem){article:first-of-type{bottom:3.4375rem;display:block;margin:22.8125rem 0 0;padding:.9375rem .9375rem 0}article:first-of-type section[data-section=proj-nav]{padding:0 0 1rem}article:first-of-type section[data-section=proj-nav] aside{position:relative;top:0}article:first-of-type section[data-section=proj-display]{padding:0}}@media (max-width:47.9375rem){article:first-of-type{margin:3.4375rem 0 0}}article:last-of-type{position:relative;z-index:2}article:last-of-type section[data-section=summary-contact]{background:#e5e5e5;background:var(--color-summary);bottom:2.5rem;display:grid;grid-column:1 / span 5;grid-template-columns:1fr 30.3125rem 30.3125rem 1fr;left:0;opacity:0;padding:0 .9375rem;pointer-events:none;position:fixed;width:100%}article:last-of-type section[data-section=summary-contact].visible{opacity:1;pointer-events:auto}@media (max-width:61.9375rem){article:last-of-type section[data-section=summary-contact]{display:block;opacity:1;padding:0 .9375rem;pointer-events:auto;position:relative}}h4{font-family:Charter,Bitstream Charter,Sitka Text,Cambria,serif;font-family:var(--font-family-heading);font-size:1.875rem;font-weight:300;margin-bottom:.5rem}.proj-display--meta{align-items:flex-start;display:flex}.proj-display--meta .meta--title-skills-year{flex:0 0 75%;min-width:75%;padding-right:.9375rem}.proj-display--meta .meta--title-skills-year p{color:#404040;color:var(--color-text)}.proj-display--meta .meta--title-skills-year a{display:inline-block;margin-left:1.3125rem}.proj-display--meta .meta--title-skills-year a:before{background:#00000040;content:"";height:calc(100% - .5rem);left:-.6875rem;position:absolute;top:.25rem;width:1px}.proj-display--meta .meta--description-trigger{display:flex;flex:0 0 25%;justify-content:flex-end;max-width:25%;padding:.375rem 0 0}.proj-display--meta .meta--description-trigger a{background:#9b59b6;background:var(--color-heading);border-radius:.25rem;color:#fff;overflow:hidden;padding:.5rem 2rem .5rem 1rem;-webkit-text-decoration:none;text-decoration:none;transform:perspective(1px) translateZ(0)}.proj-display--meta .meta--description-trigger a img{position:absolute;right:.875rem;top:1.125rem;transform:rotate(-180deg);transition:transform .15s ease-out;width:.6875rem}.proj-display--meta .meta--description-trigger a img svg{fill:#fff}@media (max-width:47.9375rem){.proj-display--meta .meta--description-trigger a img{top:1rem}}.proj-display--meta .meta--description-trigger a:before{background:#9b59b680;bottom:0;content:"";left:0;position:absolute;right:0;top:0;transform:scaleX(0);transform-origin:50%;transition:transform .2s ease-out;z-index:-1}.proj-display--meta .meta--description-trigger a.open:before,.proj-display--meta .meta--description-trigger a:hover:before{transform:scaleX(1)}.proj-display--meta .meta--description-trigger a.open,.proj-display--meta .meta--description-trigger a:hover{background:#9b59b680}.proj-display--meta .meta--description-trigger a.open img,.proj-display--meta .meta--description-trigger a:hover img{transform:rotate(0)}@media (max-width:61.9375rem){.proj-display--meta .meta--description-trigger a:hover{background:#9b59b6;background:var(--color-heading);-webkit-text-decoration:none;text-decoration:none}.proj-display--meta .meta--description-trigger a:hover img{transform:rotate(-180deg)}.proj-display--meta .meta--description-trigger a.open:hover{background:#9b59b680}.proj-display--meta .meta--description-trigger a.open:hover img{transform:rotate(0)}}.proj-display--meta a{color:#404040;color:var(--color-text);cursor:pointer;position:relative}.proj-display--meta a:hover{-webkit-text-decoration:none;text-decoration:none}@media (max-width:61.9375rem){.proj-display--meta a:hover{-webkit-text-decoration:underline;text-decoration:underline}}@media (max-width:47.9375rem){.proj-display--meta{display:block}.proj-display--meta .meta--description-trigger,.proj-display--meta .meta--title-skills-year{flex:0 0 100%;max-width:100%}.proj-display--meta .meta--description-trigger{display:block;padding:.9375rem 0 .3125rem}}.meta--description-target{background:#00000009;background:var(--color-linear-active);display:none;margin:1.25rem 0 0;padding:1.875rem}.meta--description-target p{margin-bottom:1rem}.meta--description-target p:last-of-type{margin-bottom:0}.meta--description-target a{color:#404040;color:var(--color-text)}.meta--description-target a:hover{-webkit-text-decoration:none;text-decoration:none}@media (max-width:61.9375rem){.meta--description-target a:hover{-webkit-text-decoration:underline;text-decoration:underline}}.proj-display--images{min-height:39.0625rem;position:relative}.proj-display--images img{margin-top:1.875rem;opacity:0;width:100%}.proj-display--images img.loader{animation:spin 1s linear infinite;height:1.875rem;left:50%;margin:0;opacity:1;position:absolute;top:3.75rem;transform-origin:center center;width:auto}@keyframes spin{to{transform:rotate(1turn)}}@media (max-width:61.9375rem){.proj-display--images img{margin-top:.9375rem}}.contact,.summary{grid-column:2;padding:2.5rem 0;width:calc(100% - 1.25rem)}.contact p,.summary p{margin:1.875rem 0 0}@media (max-width:61.9375rem){.contact,.summary{padding:.9375rem 0;width:100%}.contact p,.summary p{margin:.9375rem 0 0}}.contact{grid-column:3;justify-self:end}.contact .contact--title{padding:0 0 1.5rem}@media (max-width:61.9375rem){.contact .contact--title{padding:0 0 .9375rem}}.contact--title h4,.summary--title h4{border-bottom:1px solid rgba(0,0,0,.15);font-family:Charter,Bitstream Charter,Sitka Text,Cambria,serif;font-family:var(--font-family-heading);font-size:1.875rem;font-weight:300;padding:0 0 1.875rem}@media (max-width:61.9375rem){.contact--title h4,.summary--title h4{padding:0 0 .9375rem}}
</pre></body></html>