body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-family:var(--font-body);margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}button,input,select,textarea{font-family:inherit}:focus-visible{border-radius:var(--radius-sm);outline:2px solid currentColor;outline:2px solid var(--secondary,currentColor);outline-offset:2px}*,:after,:before{box-sizing:border-box}:root{--primary:#0a3542;--secondary:#dad7c5;--text-primary:var(--secondary);--text-primary-accent:var(--secondary-accent);--text-primary-accent-secondary:var(--secondary-accent-secondary);--font-body:"Titillium Web","Segoe UI",Roboto,Helvetica,Arial,sans-serif;--font-display:"Roboto Slab",Georgia,"Times New Roman",serif;--bp-mobile:640px;--bp-tablet:1024px;--bp-wide:1400px;--step--2:0.64rem;--step--1:0.8rem;--step-0:1rem;--step-1:1.25rem;--step-2:1.563rem;--step-3:1.953rem;--step-4:2.441rem;--step-5:3.052rem;--step-6:3.815rem;--text-ui-sm:0.875rem;--text-display:clamp(2.25rem,7vw,var(--step-6));--text-title:clamp(1.75rem,4.5vw,var(--step-5));--text-body:clamp(1.0625rem,0.95rem + 0.5vw,var(--step-1));--text-h2:clamp(1.75rem,1.2rem + 2.4vw,var(--step-4));--text-h3:clamp(1.4rem,1.1rem + 1.4vw,var(--step-3));--leading-tight:1.15;--leading-snug:1.3;--leading-normal:1.6;--measure:74ch;--space-1:0.25rem;--space-2:0.5rem;--space-3:0.75rem;--space-4:1rem;--space-5:1.5rem;--space-6:2rem;--space-7:3rem;--space-8:4rem;--space-9:6rem;--space-10:8rem;--radius-sm:4px;--radius-md:8px;--radius-lg:12px;--radius-xl:20px;--radius-pill:999px;--radius-circle:50%;--surface-line:color-mix(in srgb,var(--secondary) 22%,#0000);--surface-line-strong:color-mix(in srgb,var(--secondary) 45%,#0000);--ease-out:cubic-bezier(0.22,1,0.36,1);--ease-spring:cubic-bezier(0.34,1.4,0.64,1);--ease-in-out:cubic-bezier(0.45,0,0.55,1);--dur-fast:160ms;--dur-base:280ms;--dur-slow:480ms;--dur-theme:350ms;--content-width:min(50rem,92vw);--page-top:calc(75px + var(--space-7))}@media only screen and (max-width:1024px){:root{--page-top:calc(70px + var(--space-6))}}.App{align-content:center;align-items:center;display:flex;justify-content:center;transition:background-color .35s cubic-bezier(.45,0,.55,1),color .35s cubic-bezier(.45,0,.55,1),fill .35s cubic-bezier(.45,0,.55,1);transition:background-color var(--dur-theme) var(--ease-in-out),color var(--dur-theme) var(--ease-in-out),fill var(--dur-theme) var(--ease-in-out)}.App,html{background-color:#0a3542;background-color:var(--primary)}html{-webkit-tap-highlight-color:transparent}.bodyText,body{line-height:1.6;line-height:var(--leading-normal)}.bodyText{font-size:clamp(1.0625rem,.95rem + .5vw,1.25rem);font-size:var(--text-body);max-width:74ch;max-width:var(--measure)}h1,h2,h3,h4{color:#dad7c5;color:var(--text-primary);font-family:Roboto Slab,Georgia,Times New Roman,serif;font-family:var(--font-display);line-height:1.3;line-height:var(--leading-snug);margin-block:0 1rem;margin-block:0 var(--space-4)}h1{font-size:clamp(1.75rem,4.5vw,3.052rem);font-size:var(--text-title);line-height:1.15;line-height:var(--leading-tight)}h2{font-size:clamp(1.75rem,1.2rem + 2.4vw,2.441rem);font-size:var(--text-h2)}h3{font-size:clamp(1.4rem,1.1rem + 1.4vw,1.953rem);font-size:var(--text-h3)}h4{font-size:1.563rem;font-size:var(--step-2)}.innerPageContainer,.pageContainer{align-items:center;display:flex;flex-direction:column;width:100%}.innerPageContainer{min-height:100svh;overflow-x:clip;position:relative}.noSelect{-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none}a:link,a:visited{color:#dad7c5;color:var(--text-primary);transition:color .16s cubic-bezier(.22,1,.36,1);transition:color var(--dur-fast) var(--ease-out)}@media (hover:hover){a:hover{color:var(--secondary-accent-secondary);color:var(--text-primary-accent-secondary);transition:color .16s cubic-bezier(.22,1,.36,1);transition:color var(--dur-fast) var(--ease-out)}}a:active{color:var(--secondary-accent);color:var(--text-primary-accent);transition:color .16s cubic-bezier(.22,1,.36,1);transition:color var(--dur-fast) var(--ease-out)}html.progressScroll{scrollbar-width:none}html.progressScroll::-webkit-scrollbar{display:none}::-webkit-scrollbar{width:5px}::-webkit-scrollbar-track{background:var(--primary-accent)}::-webkit-scrollbar-thumb{background:#dad7c5;background:var(--secondary);-webkit-transition:background .16s cubic-bezier(.22,1,.36,1);transition:background .16s cubic-bezier(.22,1,.36,1);-webkit-transition:background var(--dur-fast) var(--ease-out);transition:background var(--dur-fast) var(--ease-out)}::-webkit-scrollbar-thumb:hover{background:var(--secondary-accent)}.chunkError{align-items:center;color:#dad7c5;color:var(--text-primary);display:flex;flex-direction:column;font-family:Roboto Slab,Georgia,Times New Roman,serif;font-family:var(--font-display);gap:12px;justify-content:center;min-height:60dvh;padding:24px;text-align:center}::view-transition-new(root),::view-transition-old(root){animation-duration:.22s;animation-timing-function:cubic-bezier(.22,1,.36,1);animation-timing-function:var(--ease-out)}.navbar{view-transition-name:site-navbar}::view-transition-group(site-navbar){animation-duration:.22s}@media (prefers-reduced-motion:reduce){::view-transition-group(*),::view-transition-new(*),::view-transition-old(*){animation:none!important}}@media only screen and (max-width:640px){.innerPageContainer{align-items:center;display:flex;flex-direction:column;width:100%}}@keyframes riseIn{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:none}}.aboutDesc,.aboutPhotoContainer,.mediaAlbumDesc,.mediaAlbumGrid,.mediaLogoGrid,.mediaPosterGrid,.mediaTopImg,.posterDiv,.projectPageDesc,.projectPageImg,.projectPageIntro,.projectPageSkills,.projectPageTitleContainer,.screenshots,.thatsMe,[class^=timelineContainer]{animation:riseIn .4s var(--ease-in-out) backwards;animation-delay:0ms;animation-delay:calc(var(--page-load-index, 0)*.1s)}.mediaAlbumDesc,.projectPageIntro,.thatsMe{--page-load-index:1}.aboutDesc,.mediaAlbumGrid,.posterDiv,.projectPageTitleContainer{--page-load-index:2}.mediaPosterGrid,.projectPageDesc,[class^=timelineContainer]{--page-load-index:3}.mediaLogoGrid,.screenshots{--page-load-index:4}.projectPageSkills{--page-load-index:5}@media (prefers-reduced-motion:reduce){.aboutDesc,.aboutPhotoContainer,.mediaAlbumDesc,.mediaAlbumGrid,.mediaLogoGrid,.mediaPosterGrid,.mediaTopImg,.posterDiv,.projectPageDesc,.projectPageImg,.projectPageIntro,.projectPageSkills,.projectPageTitleContainer,.screenshots,.thatsMe,[class^=timelineContainer]{animation:none}}@font-face{font-display:swap;font-family:Titillium Web;font-style:normal;font-weight:300;src:url(/static/media/TitilliumWeb-Light.c1fcfc584be69e139658.woff2) format("woff2")}@font-face{font-display:swap;font-family:Titillium Web;font-style:normal;font-weight:400;src:url(/static/media/TitilliumWeb-Regular.d8b999978f840bb87375.woff2) format("woff2")}@font-face{font-display:swap;font-family:Titillium Web;font-style:italic;font-weight:400;src:url(/static/media/TitilliumWeb-Italic.b0e39307199b67ef7050.woff2) format("woff2")}@font-face{font-display:swap;font-family:Titillium Web;font-style:normal;font-weight:600;src:url(/static/media/TitilliumWeb-SemiBold.9df343c1a2638c5f2b04.woff2) format("woff2")}@font-face{font-display:swap;font-family:Titillium Web;font-style:normal;font-weight:700;src:url(/static/media/TitilliumWeb-Bold.2f5d0ed0bc1339c9e0ab.woff2) format("woff2")}@font-face{font-display:swap;font-family:Roboto Slab;font-style:normal;font-weight:100 900;src:url(/static/media/RobotoSlab-VariableFont_wght.57765a75e0e263dcb3d5.woff2) format("woff2")}.navbar{align-content:center;background-color:var(--primary-accent);border-radius:var(--radius-lg);display:flex;flex-direction:column;height:60px;justify-content:center;position:fixed;text-align:center;top:15px;transition:background-color var(--dur-theme) var(--ease-in-out);width:calc(100% - 30px);z-index:5}.navbarProgress{background-color:var(--secondary);border-radius:2px;bottom:0;height:2px;left:var(--space-4);opacity:min(1,0);opacity:min(1,calc(var(--scroll-progress, 0)*40));pointer-events:none;position:absolute;right:var(--space-4);transform:scaleX(0);transform:scaleX(var(--scroll-progress,0));transform-origin:left center;transition:opacity var(--dur-base) var(--ease-out)}.logo-fill{fill:var(--secondary)}.navbarContainer div{color:var(--secondary)}.navbarContent{height:70%}.navbarLinks{border-bottom:0 solid #f5f5f5;display:flex;flex-direction:row;font-family:var(--font-body);font-size:25px;gap:75px;justify-content:start;margin-left:45px;transform:scale(1);width:450px;z-index:2}.navIcon{height:100%;width:auto}.link{cursor:pointer;filter:invert(74%) sepia(2%) saturate(13%) hue-rotate(6deg) brightness(95%) contrast(79%);transition:filter var(--dur-fast) var(--ease-out),transform var(--dur-fast) var(--ease-spring)}@media (hover:hover){.link:hover{filter:invert(100%) sepia(0) saturate(0) hue-rotate(79deg) brightness(103%) contrast(103%);transform:scale(1.15)}}.link:active{filter:invert(100%) sepia(0) saturate(0) hue-rotate(79deg) brightness(103%) contrast(103%);transform:scale(1.15)}.navbarContainer{align-items:center;display:flex;flex-direction:row;height:100%;justify-content:flex-end;width:100%}.logoDiv{display:flex;justify-content:center;position:absolute;width:100%}.logo{height:35px;transform:rotate(0deg);transition:filter var(--dur-base) var(--ease-out),transform 0s;z-index:3}@media (hover:hover){.logo:hover{cursor:pointer;filter:invert(75%)}}.logo:active{cursor:pointer;filter:invert(50%)}.socialLink{color:var(--text-primary);display:block;height:24px;position:relative;transition:color var(--dur-base) var(--ease-out),filter var(--dur-base) var(--ease-out),transform var(--dur-base) var(--ease-spring);width:24px;z-index:10}.socialLink.orcid{filter:var(--filter-secondary);object-fit:contain}.socialLinks{align-items:center;cursor:pointer;display:flex;flex-direction:row;gap:22px;margin:0 20px 0 0}.socialLinkButton:before{background:color-mix(in srgb,var(--text-primary) 16%,#0000);border-radius:50%;content:"";inset:-8px;opacity:0;pointer-events:none;position:absolute;transform:scale(.7);transition:opacity var(--dur-base) var(--ease-out),transform var(--dur-base) var(--ease-spring)}.socialLinkButton:focus-visible:before{opacity:1;transform:scale(1)}@media (hover:hover){.socialLinkButton:hover:before{opacity:1;transform:scale(1)}}.socialLinkButton:focus-visible .socialLink{transform:scale(1.06)}@media (hover:hover){.socialLinkButton:hover .socialLink{transform:scale(1.06)}}.navbarTitle{font-family:var(--font-display);font-size:var(--step-3);height:-webkit-fit-content!important;height:-moz-fit-content!important;height:fit-content!important;left:20px;position:absolute;text-align:start;width:calc(50% - 60px)}.navbarTitle div{-webkit-line-clamp:1;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden;text-overflow:ellipsis}.socialLink:after{content:"";inset:-6px;position:absolute}.navHint{bottom:6px;display:flex;gap:3px;left:50%;pointer-events:none;position:absolute;transform:translateX(-50%)}.navHint i{background:var(--text-primary);border-radius:var(--radius-circle);height:3px;opacity:.55;transition:opacity var(--dur-base) var(--ease-out),transform var(--dur-base) var(--ease-out);width:3px}.navHinttrue i{opacity:1}.navHinttrue i:first-child,.navHinttrue i:nth-child(3){transform:translateY(2px)}@media (prefers-reduced-motion:reduce){.navHint,.navHint i{transition:none}}.logo:focus:not(:focus-visible){outline:none}.logo:focus-visible{border-radius:var(--radius-sm);outline:2px solid var(--text-primary);outline-offset:4px}.socialLinkButton{all:unset;align-items:center;cursor:pointer;display:flex;position:relative}.socialLinkButton:focus-visible{border-radius:var(--radius-sm);outline:2px solid var(--text-primary);outline-offset:3px}.socialsBackdrop,.socialsToggle{display:none}.navbarRaised{z-index:25}.socialLinkLabel{display:none}@media only screen and (max-width:1024px){.navbar{height:55px}.logo{height:30px}.navbarLinks{margin-left:15px}.linkedIn,.mail,.orcid{height:22px!important}.socialLinks{gap:15px;margin:0 15px 0 0}.navbarTitle{font-size:var(--step-1);left:15px;opacity:.75;position:absolute}}@media only screen and (max-width:640px){.socialsToggle{all:unset;align-items:center;color:var(--text-primary);cursor:pointer;display:flex;justify-content:center;margin:0 15px 0 0;min-height:44px;min-width:44px;position:relative;z-index:22}.socialsToggle:focus-visible{border-radius:var(--radius-sm);outline:2px solid var(--text-primary);outline-offset:2px}.socialsBackdrop{background:#0009;display:block;inset:0;opacity:0;position:fixed;transition:opacity var(--dur-base) var(--ease-out),visibility 0s linear var(--dur-base);visibility:hidden;z-index:20}.socialsBackdropOpen{opacity:1;transition:opacity var(--dur-base) var(--ease-out),visibility 0s;visibility:visible}.socialLinks{align-items:stretch;background:var(--primary-accent);border-radius:var(--radius-lg);flex-direction:column;gap:var(--space-2);margin:0;opacity:0;padding:var(--space-3);pointer-events:none;position:fixed;right:15px;top:78px;transition:opacity var(--dur-base) var(--ease-out),visibility 0s linear var(--dur-base);visibility:hidden;z-index:21}.socialLinksOpen{opacity:1;pointer-events:auto;transition:opacity var(--dur-base) var(--ease-out),visibility 0s;visibility:visible}.socialLinks .socialLinkButton{align-items:center;border-radius:var(--radius-md);display:flex;flex-direction:row;gap:var(--space-3);min-height:44px;opacity:0;padding:var(--space-3) var(--space-4);transform:translateY(-8px);transition:transform var(--dur-base) var(--ease-out),opacity var(--dur-base) var(--ease-out);white-space:nowrap}.socialLinksOpen .socialLinkButton{opacity:1;transform:none}.socialLinksOpen .socialLinkButton:first-child{transition-delay:40ms}.socialLinksOpen .socialLinkButton:nth-child(2){transition-delay:80ms}.socialLinksOpen .socialLinkButton:nth-child(3){transition-delay:.12s}.socialLinksOpen .socialLinkButton:nth-child(4){transition-delay:.16s}.socialLinks .socialLinkLabel{color:var(--text-primary);display:inline;font-family:var(--font-body);font-size:var(--text-ui-sm)}.socialLinks .socialLinkButton:after,.socialLinks .socialLinkButton:before{content:none}@media (prefers-reduced-motion:reduce){.socialLinks,.socialLinks .socialLinkButton,.socialsBackdrop{transition:none}.socialLinks .socialLinkButton{transform:none}}}.navbarBubble{align-items:center;background-color:var(--primary-accent);border-radius:0 0 60px 60px;display:flex;height:75px;justify-content:center;-webkit-mask-image:linear-gradient(180deg,#0000 50%,#000 0);mask-image:linear-gradient(180deg,#0000 50%,#000 0);opacity:0;pointer-events:none;position:fixed;transform:translateY(-15px) scale(.25);transition:transform var(--dur-base) var(--ease-out),opacity var(--dur-base) var(--ease-out),background-color var(--dur-base) var(--ease-out),visibility 0s var(--dur-base);visibility:hidden;width:75px;z-index:1}.navbarBubbletrue{opacity:1;pointer-events:auto;transform:translateY(-30px) scale(6);transition:transform var(--dur-base) var(--ease-out),opacity var(--dur-base) var(--ease-out),background-color var(--dur-base) var(--ease-out),visibility 0s;visibility:visible}.circle-container{border-radius:var(--radius-circle);height:50px;position:relative;width:50px}.circle-image{aspect-ratio:1/1;color:var(--text-primary);cursor:pointer;height:9px;position:absolute;transform:scale(1);transition:color var(--dur-base) var(--ease-out),transform var(--dur-base) var(--ease-spring);width:9px}@media (hover:hover){.circle-image:hover{color:var(--text-primary-accent-secondary);transform:scale(1.35)}}.circle-image:active{color:var(--text-primary-accent-secondary);transform:scale(1.35)}@media only screen and (max-width:640px){.navbarBubble{transform:translateY(-15px) scale(.25)}.navbarBubbletrue{transform:translateY(0) scale(4.5)}}@media only screen and (min-width:641px) and (max-width:1400px){.navbarBubble{transform:translateY(0) scale(.25)}.navbarBubbletrue{transform:translateY(-30px) scale(6)}}.toast{align-items:center;background-color:var(--secondary);border-radius:var(--radius-pill);bottom:max(var(--space-5),env(safe-area-inset-bottom));box-shadow:0 8px 30px #00000040;color:var(--primary);display:flex;font-family:var(--font-body);font-size:var(--text-ui-sm);gap:var(--space-3);left:50%;max-width:min(32rem,calc(100vw - var(--space-4)*2));opacity:0;padding:var(--space-3) var(--space-3) var(--space-3) var(--space-4);position:fixed;transform:translate(-50%,16px);transition:opacity var(--dur-base) var(--ease-out),transform var(--dur-base) var(--ease-spring),visibility 0s linear var(--dur-base);visibility:hidden;z-index:30}.toastVisible{opacity:1;transform:translate(-50%);transition:opacity var(--dur-base) var(--ease-out),transform var(--dur-base) var(--ease-spring),visibility 0s;visibility:visible}.toastIcon{flex:none;height:18px;width:18px}.toastMessage{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.toastAction,.toastAction:link,.toastAction:visited{background-color:var(--primary);border-radius:var(--radius-pill);color:var(--secondary);flex:none;padding:var(--space-1) var(--space-3);text-decoration:none;white-space:nowrap}@media (hover:hover){.toastAction:hover{color:var(--secondary);filter:brightness(1.15)}}.toastAction:active,.toastAction:focus-visible{color:var(--secondary);filter:brightness(1.15)}@media (prefers-reduced-motion:reduce){.toast,.toastVisible{transform:translate(-50%);transition:opacity var(--dur-base) var(--ease-out),visibility 0s}}.homeInfoContainer{--hub-swatch-clearance:max(0px,calc(230px + 78vmin - 50svh*2));--hero-photo:35vmin;align-items:center;display:flex;flex-direction:column;flex-grow:2;gap:25px;justify-content:center;padding-top:var(--hub-swatch-clearance);position:relative;width:85%}.heroTapHint{animation:heroHintIn var(--dur-slow) var(--ease-out) .9s backwards;aspect-ratio:1;left:50%;pointer-events:none;position:absolute;top:calc(50% + var(--hub-swatch-clearance)/2);transform:translate(-50%,-50%);width:calc(var(--hero-photo) + 16px);z-index:11}.heroTapHintRing{animation:heroHintPulse 2.2s var(--ease-out) 1.2s infinite;border:2px solid var(--text-primary);border-radius:24%;inset:0;position:absolute}.heroTapHintLabel{background-color:var(--text-primary);border-radius:var(--radius-pill);bottom:calc(100% + var(--space-3));color:var(--primary);font-family:var(--font-body);font-size:var(--text-ui-sm);left:50%;padding:2px var(--space-3);position:absolute;transform:translateX(-50%);white-space:nowrap}@keyframes heroHintIn{0%{opacity:0}}@keyframes heroHintPulse{0%{opacity:.8;transform:scale(1)}70%,to{opacity:0;transform:scale(1.14)}}@media (prefers-reduced-motion:reduce){.heroTapHint,.heroTapHintRing{animation:none}.heroTapHintRing{opacity:.5}}.heroText{align-items:center;display:flex;flex-direction:column;gap:var(--space-2);left:50%;position:absolute;text-align:center;top:calc(50% + var(--hub-swatch-clearance)/2 + var(--hero-photo)/2 + var(--space-5));transform:translateX(-50%);transition:opacity var(--dur-base) var(--ease-out),transform var(--dur-base) var(--ease-out);width:min(90%,40rem)}.heroTexttrue{opacity:0!important;pointer-events:none;transform:translateX(-50%) translateY(12px) scale(.97)}.heroTextFolding{transition-delay:.2s}.infoText1{font-size:clamp(2.25rem,5vmin,3.5rem);font-weight:750;line-height:1.1}.infoText1,.infoText2{color:var(--text-primary);font-family:var(--font-display)}.infoText2{font-size:clamp(.95rem,2vmin,var(--step-1));font-weight:300}.emptySquare{height:35vmin;position:absolute;width:35vmin}.homeImage{animation:heroImageIn .5s var(--ease-in-out) backwards;aspect-ratio:1;border:calc(2px*(1 - var( --scroll-position, 0))) solid var(--secondary);border-radius:22%;border-radius:calc(22% + 28%*var(--scroll-position, 0));cursor:pointer;filter:grayscale(100%);object-fit:cover;opacity:1;position:-webkit-sticky;position:sticky;top:17.5vmin;top:calc(17.5vmin - (17.5vmin - 27px)*var(--scroll-position, 0));transform:scale(1);transition:transform var(--dur-slow) var(--ease-out),filter var(--dur-slow) var(--ease-out),border-radius var(--dur-slow) var(--ease-out),border-width var(--dur-slow) var(--ease-out);transition:transform var(--home-image-dur,var(--dur-slow)) var(--ease-out),filter var(--home-image-dur,var(--dur-slow)) var(--ease-out),border-radius var(--home-image-dur,var(--dur-slow)) var(--ease-out),border-width var(--home-image-dur,var(--dur-slow)) var(--ease-out);translate:0 0;translate:calc(var(--dock-dx, 0px)*var(--scroll-position, 0)) 0;width:35vmin;width:calc(35vmin - (35vmin - 10px)*var(--scroll-position, 0));z-index:10}@media (hover:hover){.homeImageHoverfalse:hover{filter:grayscale(50%);transform:scale(1.05)!important}.homeImageHoverfalse:hover,.homeImageHovertrue:hover{transition:transform var(--dur-slow) var(--ease-spring),filter var(--dur-slow) var(--ease-out);transition:transform var(--home-image-dur,var(--dur-slow)) var(--ease-spring),filter var(--home-image-dur,var(--dur-slow)) var(--ease-out)}.homeImageHovertrue:hover{filter:grayscale(0);transform:scale(.85)!important}}.homeImageHoverfalse:active,.homeImageHovertrue:active{filter:grayscale(0);transition:transform var(--dur-slow) var(--ease-out),filter var(--dur-slow) var(--ease-out);transition:transform var(--home-image-dur,var(--dur-slow)) var(--ease-out),filter var(--home-image-dur,var(--dur-slow)) var(--ease-out)}.homeImagetrue{border:calc(10px - 5px*var(--scroll-position, 0)) solid var(--primary-accent);border-radius:var(--radius-circle);filter:grayscale(0);margin-top:0;transform:scale(.8)!important;transform:scale(calc(.8 + var(--scroll-position, 0)*.2))!important;transition:transform var(--dur-slow) var(--ease-spring),border-radius var(--dur-slow) var(--ease-out),border-width var(--dur-slow) var(--ease-out),border-color var(--dur-slow) var(--ease-out),filter var(--dur-slow) var(--ease-out);transition:transform var(--home-image-dur,var(--dur-slow)) var(--ease-spring),border-radius var(--home-image-dur,var(--dur-slow)) var(--ease-out),border-width var(--home-image-dur,var(--dur-slow)) var(--ease-out),border-color var(--home-image-dur,var(--dur-slow)) var(--ease-out),filter var(--home-image-dur,var(--dur-slow)) var(--ease-out)}.homeImagePending{animation:heroImageIn .5s var(--ease-in-out) backwards,photoShimmer 1.6s linear infinite;background-color:var(--primary-accent);background-image:linear-gradient(100deg,#0000 30%,color-mix(in srgb,var(--secondary) 14%,#0000) 50%,#0000 70%);background-size:250% 100%}.homeImageLoaded{animation:heroImageIn .5s var(--ease-in-out) backwards,photoIn .6s var(--ease-out)}@keyframes photoShimmer{0%{background-position:125% 0}to{background-position:-125% 0}}@keyframes photoIn{0%{filter:grayscale(100%) blur(12px) brightness(1.1)}}@media (prefers-reduced-motion:reduce){.homeImageLoaded,.homeImagePending{animation:none}}@keyframes heroImageIn{0%{opacity:0;transform:translateY(50px)}}@keyframes heroTextIn{0%{opacity:0;transform:translateY(-50px)}}.infoText1{animation:heroTextIn .5s var(--ease-in-out) .1s backwards}.infoText2{animation:heroTextIn .5s var(--ease-in-out) .2s backwards}@media (prefers-reduced-motion:reduce){.homeImage,.infoText1,.infoText2{animation:none}}@media only screen and (max-width:640px){.homeInfoContainer{--hero-photo:70vw;flex-direction:column;justify-content:center;width:100%}.homeImage{top:35vw;top:calc(35vw - (35vw - 28px)*var(--scroll-position, 0));width:70vw!important;width:calc(70vw - (70vw - 8px)*var(--scroll-position, 0))!important}.homeImagetrue{border:calc(10px - 3px*var(--scroll-position, 0)) solid var(--primary-accent);margin-top:0!important;transform:scale(.4)!important;transform:scale(calc(.4 + var(--scroll-position, 0)*.6))!important}}.workIndex{color:var(--text-primary);margin:0 auto;padding:var(--page-top) 0 var(--space-9);position:relative;width:min(1180px,92vw)}.workIndexFilter{align-items:center;display:flex;flex-wrap:wrap;font-size:var(--step-0);gap:var(--space-3);margin:0 0 var(--space-5)}.workIndexFilterClear{all:unset;align-items:center;background-color:var(--primary-accent);border-radius:var(--radius-pill);cursor:pointer;display:inline-flex;font-size:var(--text-ui-sm);gap:var(--space-1);padding:var(--space-1) var(--space-3)}@media (hover:hover){.workIndexFilterClear:hover{background-color:var(--secondary);color:var(--primary)}}.workIndexFilterClear:active,.workIndexFilterClear:focus-visible{background-color:var(--secondary);color:var(--primary)}.workIndexFilterClear svg{height:14px;width:14px}.workIndexList{list-style:none;margin:0;padding:0}.workIndexItem+.workIndexItem{border-top:1px solid var(--primary-accent)}.workRow{grid-gap:var(--space-5);align-items:center;border-radius:var(--radius-lg);display:grid;gap:var(--space-5);grid-template-columns:auto minmax(0,1fr) auto auto;padding:var(--space-5) var(--space-6) var(--space-5) var(--space-4);text-decoration:none;transition:background-color var(--dur-base) var(--ease-out),color var(--dur-base) var(--ease-out),padding-left var(--dur-slow) var(--ease-out),padding-right var(--dur-slow) var(--ease-out),border-radius var(--dur-base) var(--ease-out)}.workRow,.workRow:link,.workRow:visited{color:var(--text-primary)}.workRow:focus-visible{background-color:var(--secondary);color:var(--primary);outline:none;padding-left:var(--space-6);padding-right:var(--space-4)}@media (hover:hover){.workRow:hover{background-color:var(--secondary);color:var(--primary);padding-left:var(--space-6);padding-right:var(--space-4)}.workRow:hover .workRowMark{transform:scale(1.08) rotate(-3deg)}.workRow:hover .workRowArrow{opacity:1;transform:translateX(0)}}.workRow:active{background-color:var(--primary-accent)}.workRow:focus-visible{outline:3px solid var(--primary);outline-offset:-3px}.workRowMark{background-color:var(--primary-accent);border-radius:var(--radius-md);display:grid;flex:none;height:64px;overflow:hidden;place-items:center;transition:transform var(--dur-base) var(--ease-spring);width:64px}.workRow:focus-visible .workRowMark{transform:scale(1.08) rotate(-3deg)}.workRowMark img{height:78%;object-fit:contain;width:78%}.workRowMain{display:flex;flex-direction:column;gap:var(--space-1);min-width:0}.workRowYear{font-family:var(--font-body);font-size:var(--text-ui-sm);letter-spacing:.1em;opacity:.65}.workRowTitle{text-wrap:pretty;font-family:var(--font-display);font-size:var(--text-title);font-weight:700;line-height:var(--leading-tight)}.workRowIntro{font-size:var(--step-0);line-height:var(--leading-normal);max-width:54ch;opacity:.8}.workRowIntro,.workRowMeta{font-family:var(--font-body)}.workRowMeta{align-items:flex-end;display:flex;flex:none;flex-direction:column;font-size:var(--text-ui-sm);gap:var(--space-1);line-height:var(--leading-snug);max-width:15ch;opacity:.75;text-align:right}.workRowRole{font-style:italic}.workRowPills{display:flex;flex-wrap:wrap;gap:var(--space-2);margin-top:var(--space-2)}.workRowPill{border:1px solid color-mix(in srgb,currentcolor 32%,#0000);border-radius:var(--radius-pill);font-family:var(--font-body);font-size:var(--step--1);line-height:1.6;opacity:.85;padding:2px var(--space-3);white-space:nowrap}.workRowArrow{font-size:var(--step-2);opacity:0;transform:translateX(-10px);transition:opacity var(--dur-base) var(--ease-out),transform var(--dur-base) var(--ease-spring)}.workRow:focus-visible .workRowArrow{opacity:1;transform:translateX(0)}@media only screen and (max-width:640px){.workIndex{padding-top:var(--page-top)}.workRow{gap:var(--space-4);grid-template-columns:auto minmax(0,1fr);padding:var(--space-4) var(--space-3)}.workRowMark{height:46px;width:46px}.workRowMeta{align-items:flex-start;grid-column:1/-1;text-align:left;white-space:normal}.workRowIntro,.workRowMeta{max-width:none}.workRowArrow{display:none}.workRowIntro{font-size:var(--text-ui-sm)}@media (hover:hover){.workRow:hover{padding-left:var(--space-3);padding-right:var(--space-3)}}.workRow:focus-visible{padding-left:var(--space-3);padding-right:var(--space-3)}}@media (prefers-reduced-motion:reduce){.workRow{transition:background-color var(--dur-base) var(--ease-out),color var(--dur-base) var(--ease-out)}@media (hover:hover){.workRow:hover .workRowMark{transform:none}}.workRow:active .workRowMark,.workRow:focus-visible .workRowMark{transform:none}@media (hover:hover){.workRow:hover{padding-left:var(--space-4);padding-right:var(--space-6)}}.workRow:focus-visible{padding-left:var(--space-4);padding-right:var(--space-6)}.workRowArrow{transform:none;transition:opacity var(--dur-base) var(--ease-out)}@media (hover:hover){.workRow:hover .workRowArrow{transform:none}}.workRow:active .workRowArrow,.workRow:focus-visible .workRowArrow{transform:none}}.workRowLabel{background-color:var(--secondary);border-radius:var(--radius-pill);color:var(--primary);display:inline-block;font-family:var(--font-body);font-size:var(--step--1);font-weight:600;letter-spacing:.02em;line-height:1.6;margin-bottom:var(--space-2);padding:2px var(--space-3);transition:background-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out);width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.workRow:focus-visible .workRowLabel{background-color:var(--primary);color:var(--secondary)}@media (hover:hover){.workRow:hover .workRowLabel{background-color:var(--primary);color:var(--secondary)}}.workRowStatus{border:1px solid var(--surface-line-strong);border-radius:var(--radius-pill);color:inherit;display:inline-block;font-family:var(--font-body);font-size:var(--step--1);line-height:1.6;margin-top:var(--space-1);opacity:.75;padding:2px var(--space-2);width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.toolsList{display:flex;flex-wrap:wrap;gap:var(--space-2);list-style:none;margin:0;padding:0}.toolsListChip,.toolsListLink{align-items:center;background-color:var(--primary-accent);border-radius:var(--radius-pill);color:var(--text-primary);display:inline-flex;font-size:var(--text-ui-sm);gap:var(--space-2);padding:var(--space-2) var(--space-4);text-decoration:none}.toolsListLink{transition:background-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out),transform var(--dur-fast) var(--ease-spring)}.toolsListLink:link,.toolsListLink:visited{color:var(--text-primary)}.toolsListLink:focus-visible{background-color:var(--secondary);color:var(--primary);transform:translateY(-2px)}@media (hover:hover){.toolsListLink:hover{background-color:var(--secondary);color:var(--primary);transform:translateY(-2px)}}.toolsGroups{grid-gap:var(--space-5);display:grid;gap:var(--space-5)}.toolsGroupLabel{font-family:var(--font-body);font-size:var(--text-ui-sm);font-weight:600;letter-spacing:.06em;margin:0 0 var(--space-2);opacity:.7;text-transform:uppercase}@media (prefers-reduced-motion:reduce){.toolsListLink{transition:background-color var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}@media (hover:hover){.toolsListLink:hover{transform:none}}.toolsListLink:active,.toolsListLink:focus-visible{transform:none}}.projectPageContainer{padding-bottom:50px;padding-top:var(--page-top);text-align:start;width:var(--content-width)}.projectPageTitle{margin-top:25px}.projectPageIntro{background-color:var(--primary-accent);border:1px solid var(--surface-line);border-radius:var(--radius-lg);color:var(--text-primary);font-family:var(--font-body);font-size:var(--step-2);line-height:var(--leading-snug);margin-bottom:var(--space-6);padding:var(--space-4) var(--space-5);text-align:center;width:100%}.projectPageImg{border-radius:var(--radius-xl);width:300px}.projectPageLogoContainer{align-items:center;display:flex;flex-direction:column;width:100%}.projectPageContainer h1{color:var(--text-primary);font-family:var(--font-display);font-size:var(--step-4);font-weight:700}.projectPageContainer h2{font-size:var(--step-3);margin-top:var(--space-7)}.projectPageContainer h2,.projectPageContainer h3{color:var(--text-primary);font-family:var(--font-display);font-weight:600}.projectPageContainer h3{font-size:var(--step-2);margin-top:var(--space-6)}.projectPageDesc,.projectPageSkills,.projectPageTitleContainer div{font-family:var(--font-body);line-height:var(--leading-normal);margin-top:var(--space-5)}.projectPageDesc,.projectPageSkills{color:var(--text-primary)}.projectPageTitle{margin-bottom:25px}.projectPageDesc{margin-bottom:30px}.screenshots.screenshotsCarousel{display:block;margin:0;width:100%}.screenshots{grid-gap:10px;align-content:stretch;align-items:stretch;display:flex;flex-wrap:wrap;grid-column:1/-1;justify-content:center;margin-left:calc(50% - min(49svw, 700px));width:min(98svw,1400px)}.screenshot{align-self:auto;border-radius:var(--radius-sm);cursor:pointer;filter:brightness(100%);flex-basis:auto;flex-grow:0;flex-shrink:1;height:20vw;object-fit:cover;transition:filter var(--dur-base) var(--ease-out);-webkit-user-select:none;user-select:none;width:auto}@media (hover:hover){.screenshot:hover{filter:brightness(70%)}}.screenshot:active{filter:brightness(70%)}.projectSwitcher{align-items:center;background-color:var(--primary-accent);border-radius:var(--radius-lg);color:var(--text-primary);display:flex;font-size:var(--step-1);justify-content:space-between;margin:0 0 var(--space-5);padding:15px;text-align:center}.switcherTitle{text-wrap:balance;font-family:var(--font-display);font-size:var(--text-title);font-weight:700;line-height:1.15}.switcherLabel{border-radius:var(--radius-pill);color:var(--primary);display:inline-block;font-family:var(--font-body);font-size:var(--step--1);font-weight:600;letter-spacing:.02em;line-height:1.6;margin-bottom:var(--space-2);padding:2px var(--space-3)}.projectButton,.switcherLabel{background-color:var(--secondary)}.projectButton{align-items:center;border-radius:var(--radius-circle);display:flex;height:34px;justify-content:center;margin:15px;transition:background-color var(--dur-base) var(--ease-out),transform var(--dur-base) var(--ease-spring);width:34px}.arrow{color:var(--primary);height:20px;transition:transform var(--dur-base) var(--ease-out);width:20px}.projectSwitcherInner:focus-visible .projectButton{background-color:var(--text-primary-accent-secondary);transform:scale(1.1)}@media (hover:hover){.projectSwitcherInner:hover .projectButton{background-color:var(--text-primary-accent-secondary);transform:scale(1.1)}.projectSwitcherInner:hover .arrow.arrowPrev{transform:translateX(-2px)}.projectSwitcherInner:hover .arrow.arrowNext{transform:translateX(2px)}}.projectSwitcherInner{align-items:center;display:flex;flex-direction:row;justify-content:center;transition:filter var(--dur-base) var(--ease-out),transform var(--dur-base) var(--ease-spring)}@media (hover:hover){.projectSwitcherInner:hover{cursor:pointer;filter:brightness(50%);transform:scale(1.1)}}.openScreenshot{border-radius:var(--radius-lg);height:auto;margin-bottom:15px;max-height:85dvh;max-width:85vw}button.projectSwitcherInner{background:none;border:none;color:inherit;cursor:pointer;font:inherit}button.projectSwitcherInner:focus-visible{border-radius:var(--radius-sm);outline:2px solid var(--text-primary);outline-offset:2px}.projectLinks{display:flex;flex-wrap:wrap;gap:var(--space-3);margin:var(--space-6) 0 var(--space-4)}.projectLink{align-items:center;background-color:var(--primary-accent);border-radius:var(--radius-pill);display:inline-flex;font-size:var(--text-ui-sm);gap:var(--space-2);padding:var(--space-3) var(--space-5);text-decoration:none;transition:background-color var(--dur-base) var(--ease-out),color var(--dur-base) var(--ease-out),transform var(--dur-base) var(--ease-spring)}.projectLink,.projectLink:link,.projectLink:visited{color:var(--text-primary)}.projectLink:focus-visible{background-color:var(--secondary);color:var(--primary);transform:translateY(-2px)}@media (hover:hover){.projectLink:hover{background-color:var(--secondary);color:var(--primary);transform:translateY(-2px)}}.projectLink svg{flex:none;height:16px;width:16px}@media (prefers-reduced-motion:reduce){.projectLink{transition:background-color var(--dur-base) var(--ease-out),color var(--dur-base) var(--ease-out)}@media (hover:hover){.projectLink:hover{transform:none}}.projectLink:active,.projectLink:focus-visible{transform:none}}.themeSwitch{background-color:var(--primary-accent);border:1px solid var(--surface-line);border-radius:var(--radius-pill);display:grid;grid-template-columns:1fr 1fr;margin:var(--space-5) auto;padding:4px;position:relative;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.themeSwitch button{all:unset;align-items:center;border-radius:var(--radius-pill);color:var(--text-primary);cursor:pointer;display:inline-flex;font-size:var(--text-ui-sm);gap:var(--space-2);justify-content:center;min-height:36px;min-width:88px;padding:0 var(--space-4);position:relative;transition:color var(--dur-base) var(--ease-out);z-index:1}.themeSwitch button[aria-pressed=true]{color:var(--primary)}.themeSwitch button:focus-visible{outline:2px solid var(--text-primary);outline-offset:2px}.themeSwitch svg{flex:none;height:16px;width:16px}.themeSwitchThumb{background-color:var(--secondary);border-radius:var(--radius-pill);bottom:4px;left:4px;position:absolute;top:4px;transition:transform var(--dur-base) var(--ease-spring);width:calc(50% - 4px)}.themeSwitchThumbDark{transform:translateX(100%)}@media (prefers-reduced-motion:reduce){.themeSwitchThumb{transition:none}}@media only screen and (max-width:640px){.projectPageContainer{padding-top:var(--page-top);width:calc(100% - 30px)}.projectPageLogoContainer{flex-direction:column;height:auto;margin-bottom:35px}.projectPageTitleContainer{margin-left:0}.projectPageTitleContainer h1{margin:35px 0 20px}.projectPageContainer h1{font-size:var(--step-4)}.projectPageContainer h2{font-size:var(--step-3)}.projectPageImg{height:auto;width:100%}.projectPageIntro{font-size:var(--step-1);width:100%}.projectPageDesc,.projectPageSkills{margin-bottom:35px;width:100%}.screenshot{height:auto;width:45%}.projectSwitcher{font-size:var(--step-0);height:auto;margin:0 0 var(--space-4);padding:10px}.switcherTitle{font-size:clamp(1.25rem,6vw,var(--step-2));padding:0 20px;transform:translateX(5px)}.projectButton{margin:5px}.projectLinks{align-items:stretch;flex-direction:column}.projectLink{font-size:var(--step-0);justify-content:space-between;min-height:44px;padding:var(--space-3) var(--space-4)}}.lightbox{-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);background-color:color-mix(in srgb,var(--primary) 82%,#000);color:var(--text-primary);cursor:zoom-out;display:grid;grid-template-rows:auto minmax(0,1fr);height:100dvh;inset:0;opacity:0;overscroll-behavior:contain;position:fixed;touch-action:pinch-zoom;transition:opacity var(--dur-base) var(--ease-out),visibility 0s linear var(--dur-base);visibility:hidden;z-index:30}.lightboxOpen{opacity:1;transition:opacity var(--dur-base) var(--ease-out),visibility 0s;visibility:visible}.lightboxBar{align-items:center;cursor:auto;display:flex;gap:var(--space-4);justify-content:space-between;padding:max(var(--space-4),env(safe-area-inset-top)) var(--space-4) var(--space-2)}.lightboxCount{font-feature-settings:"tnum";font-family:var(--font-body);font-size:var(--text-ui-sm);font-variant-numeric:tabular-nums;letter-spacing:.04em;min-width:3rem;opacity:.75;padding-left:var(--space-2)}.lightboxClose,.lightboxNav{all:unset;background-color:color-mix(in srgb,var(--text-primary) 12%,#0000);border-radius:var(--radius-circle);box-sizing:border-box;color:var(--text-primary);cursor:pointer;display:grid;height:44px;place-items:center;transition:background-color var(--dur-fast) var(--ease-out),transform var(--dur-fast) var(--ease-spring),opacity var(--dur-fast) var(--ease-out);width:44px}.lightboxClose svg,.lightboxNav svg{height:22px;width:22px}.lightboxClose:focus-visible,.lightboxNav:focus-visible{outline:2px solid var(--text-primary);outline-offset:2px}@media (hover:hover){.lightboxClose:hover,.lightboxNav:not(:disabled):hover{background-color:color-mix(in srgb,var(--text-primary) 22%,#0000);transform:scale(1.06)}}.lightboxNav:disabled{cursor:default;opacity:.25}.lightboxStage{grid-gap:var(--space-4);align-items:center;display:grid;gap:var(--space-4);grid-template-columns:44px minmax(0,1fr) 44px;min-height:0;padding:0 var(--space-5) max(var(--space-5),env(safe-area-inset-bottom))}.lightboxPrev{grid-column:1}.lightboxNext{grid-column:3}.lightboxFigure{grid-gap:var(--space-4);align-content:center;animation:lightboxIn .32s cubic-bezier(.2,.8,.2,1);display:grid;gap:var(--space-4);grid-column:2;grid-row:1;grid-template-rows:minmax(0,auto) auto;height:100%;justify-items:center;margin:0;min-height:0}@keyframes lightboxIn{0%{opacity:0;transform:translateX(0);transform:translateX(calc(var(--from, 0)*40px))}}.lightboxMedia{-webkit-user-drag:none;cursor:auto;display:block;filter:drop-shadow(0 18px 40px rgba(0,0,0,.45));height:auto;max-height:100%;max-width:min(100%,1600px);min-height:0;object-fit:contain;-webkit-user-select:none;user-select:none;width:auto}.lightboxMedia,video.lightboxMedia{border-radius:var(--radius-md)}.lightboxCaptionMeta{margin-left:var(--space-2);opacity:.7;white-space:nowrap}.lightboxFigure figcaption{cursor:auto;flex:none;font-family:var(--font-body);font-size:var(--text-ui-sm);line-height:1.5;max-width:60ch;opacity:.85;text-align:center}@media only screen and (max-width:640px){.lightboxStage{grid-template-columns:minmax(0,1fr);padding:0 var(--space-3) max(var(--space-4),env(safe-area-inset-bottom))}.lightboxNav{display:none}.lightboxFigure{gap:var(--space-3);grid-column:1}.lightboxFigure figcaption{padding:0 var(--space-3)}}@media (prefers-reduced-motion:reduce){.lightbox,.lightboxOpen{transition:opacity 0s,visibility 0s}.lightboxFigure{animation:none}}.carousel{--card-w:min(640px,62vw);--card-h:min(400px,56vh);color:var(--text-primary);margin:var(--space-6) 0 var(--space-5) calc(50% - 50vw);overscroll-behavior-x:contain;width:100vw}.carouselCard{-webkit-tap-highlight-color:transparent;all:unset;aspect-ratio:1.6;aspect-ratio:var(--r,1.6);border-radius:var(--radius-lg);box-sizing:border-box;cursor:pointer;position:absolute;width:min(var(--card-w),var(--card-h) * 1.6);width:min(var(--card-w),var(--card-h) * var(--r,1.6))}.carouselCard:focus-visible{outline:none}.carouselMedia{-webkit-user-drag:none;border-radius:var(--radius-lg);display:block;filter:drop-shadow(0 10px 24px rgba(0,0,0,.32));height:100%;object-fit:contain;pointer-events:none;-webkit-user-select:none;user-select:none;width:100%}.carouselStage{cursor:grab;display:grid;height:calc(var(--card-h) + var(--space-7));height:calc(var(--stage-h, var(--card-h)) + var(--space-7));outline:none;perspective:1400px;perspective-origin:50% 45%;place-items:center;position:relative;touch-action:pan-y;transform-style:preserve-3d}.carouselDragging{cursor:grabbing}.carousel-arc .carouselCard{filter:brightness(calc(1 - min(var(--a), 2.5)*.16));transform:translateX(var(--x)) translateZ(calc(min(var(--a), 2)*-170px)) rotateY(calc(clamp(-1.4, var(--d), 1.4)*-24deg));transition:none;will-change:transform}.carouselStackStage{display:grid;height:calc(var(--card-h) + var(--space-8));height:calc(var(--stage-h, var(--card-h)) + var(--space-8));outline:none;place-items:center;position:relative;touch-action:pan-y}.carouselStackCard{cursor:grab;filter:brightness(calc(1 - var(--depth)*.14));transform:translateX(calc(var(--depth)*22px + var(--drag))) translateY(calc(var(--depth)*12px)) rotate(calc(var(--depth)*3.5deg - 1.5deg + var(--drag-rot))) scale(calc(1 - var(--depth)*.045));transition:transform .46s cubic-bezier(.2,.8,.2,1),filter .46s ease-out}.carouselStackCard.carouselDragging{cursor:grabbing;transition:none}.carouselStackCard.carouselLeaving{transform:translateX(calc(var(--dir)*118%)) translateY(-4%) rotate(calc(var(--dir)*16deg));transition:transform .34s cubic-bezier(.5,0,.75,0)}.carouselExpand{all:unset;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:color-mix(in srgb,var(--primary) 70%,#0000);border-radius:var(--radius-circle);color:var(--text-primary);cursor:pointer;display:grid;height:40px;place-items:center;position:absolute;right:var(--space-3);top:var(--space-3);transition:transform var(--dur-fast) var(--ease-spring);width:40px}.carouselExpand svg{height:20px;width:20px}@media (hover:hover){.carouselExpand:hover{transform:scale(1.08)}}.carouselExpand:active,.carouselExpand:focus-visible{transform:scale(1.08)}.carouselExpand:focus-visible{outline:2px solid var(--text-primary);outline-offset:2px}.carouselControls{align-items:center;display:flex;gap:var(--space-4);justify-content:center;margin-top:var(--space-3)}.carouselDots{display:flex;gap:var(--space-2)}.carouselDot{all:unset;background-color:var(--text-primary);border-radius:var(--radius-circle);cursor:pointer;height:8px;opacity:.3;transition:opacity var(--dur-fast) var(--ease-out),transform var(--dur-fast) var(--ease-out);width:8px}.carouselDotStatic{cursor:default}.carouselDotOn{opacity:1;transform:scale(1.25)}.carouselDot:focus-visible{outline:2px solid var(--text-primary);outline-offset:3px}.carouselArrow,.carouselNextText{all:unset;background-color:var(--primary-accent);border-radius:var(--radius-pill);color:var(--text-primary);cursor:pointer;display:grid;height:36px;min-width:36px;place-items:center}.carouselNextText{font-size:var(--text-ui-sm);padding:0 var(--space-4)}.carouselArrow svg{height:18px;width:18px}.carouselArrow:disabled{cursor:default;opacity:.35}.carouselArrow:focus-visible,.carouselNextText:focus-visible{outline:2px solid var(--text-primary);outline-offset:2px}@media (hover:hover){.carouselArrow:not(:disabled):hover,.carouselNextText:hover{background-color:var(--secondary);color:var(--primary)}}.carouselCaption{font-size:var(--text-ui-sm);margin:var(--space-3) auto 0;max-width:92vw;min-height:2.6em;opacity:.8;text-align:center;width:var(--content-width)}.carouselCaptionMeta{opacity:.7}.carouselCaptionLink,.carouselCaptionMeta{margin-left:var(--space-2);white-space:nowrap}.carouselCaptionLink{align-items:center;display:inline-flex;gap:4px;text-decoration:underline;text-underline-offset:3px}.carouselCaptionLink svg{height:1em;width:1em}.carousel-row,.carousel-single{align-items:center;display:flex;gap:var(--space-4);justify-content:center;margin-bottom:calc(var(--space-5) - var(--space-6));overflow-x:auto;padding:var(--space-2) var(--space-4) var(--space-7);scroll-snap-type:x mandatory}.carousel-row{justify-content:safe center}.carouselCardFlat{flex:none;position:relative;scroll-snap-align:center}.carousel-single{flex-wrap:wrap}.carouselCaptionSingle{flex-basis:100%}.carousel-single{--card-w:min(760px,86vw);--card-h:min(480px,62vh)}@media only screen and (max-width:640px){.carousel{--card-w:80vw;--card-h:min(440px,58vh);margin-left:calc(50% - 50vw);width:100vw}.carousel-arc .carouselCard{transform:translateX(var(--x)) translateZ(calc(min(var(--a), 2)*-140px)) rotateY(calc(clamp(-1.4, var(--d), 1.4)*-22deg))}}.timelineContainerfalse,.timelineContainertrue{align-items:center;display:flex;flex-direction:column;height:auto;justify-content:space-between;width:var(--content-width)}.timelineContainerfalse{height:auto}.timelineContainerfalse,.timelineContainertrue{transition:height var(--dur-slow) var(--ease-out)}.timelineContainertrue{height:-webkit-max-content;height:max-content}.timelineContainer h2{font-size:var(--step-5);margin-bottom:40px}.circleContainer:last-child{margin-bottom:75px}.gapLine{background-color:var(--primary-accent);height:125px;margin-bottom:-50px;margin-top:-50px;pointer-events:none;width:4px;z-index:0}@media only screen and (max-width:640px){[class^=timelineContainer]{width:80%}}.leftCircleContainer,.rightCircleContainer{align-items:center;display:flex;padding:20px}.leftCircleContainer{flex-direction:row-reverse;margin-left:-300px}.rightCircleContainer{flex-direction:row;margin-left:300px}.circle{align-items:center;animation:showCircle .5s;border:2px solid var(--text-primary);border-radius:var(--radius-circle);cursor:pointer;display:flex;filter:grayscale(50%);height:80px;justify-content:center;margin:25px;transition:transform var(--dur-base) var(--ease-spring),width var(--dur-base) var(--ease-spring),height var(--dur-base) var(--ease-spring),background-color var(--dur-base) var(--ease-out);width:80px;z-index:2}@keyframes showCircle{0%{height:0;width:0}to{height:80px;width:80px}}.expandCircle{animation:none!important;height:50px;width:50px}@media (hover:hover){.circle:hover{height:90px;width:90px}}.circle:active{height:90px;width:90px}.leftCircleText,.rightCircleText{animation:showText .5s;color:var(--text-primary-accent);width:300px;z-index:1}@keyframes showText{0%{opacity:0}to{opacity:1}}.leftCircleText{text-align:right}.circleTitle{color:var(--text-primary);font-size:var(--step-1);font-weight:750;margin-top:10px}.circleCompany,.circleTitle{font-family:var(--font-display);pointer-events:none}.circleCompany{color:var(--text-primary-accent);font-size:var(--step-0);font-weight:550;margin-bottom:10px}.circleDesc{color:var(--text-primary-accent-secondary);height:0;opacity:0;pointer-events:none}.circleDesc,.timeRange{font-family:var(--font-body);font-size:var(--text-ui-sm)}.timeRange{color:var(--text-primary-accent);margin-top:10px}.leftCircleText,.rightCircleText{transition:margin-top var(--dur-base) var(--ease-out)}.circleTextOpen{margin-top:-150px}.circleDesc{transition:opacity var(--dur-base) var(--ease-out)}.circleTextOpen .circleDesc{opacity:100%}.skillsTitle{margin-top:50px;transition:margin-top var(--dur-base) var(--ease-out)}.lastCircleOpen .skillsTitle{margin-top:75px}@media (prefers-reduced-motion:reduce){.circleDesc,.leftCircleText,.rightCircleText,.skillsTitle{transition:none}}@media only screen and (max-width:640px){.circle{animation:showCircle .5s;height:50px;margin:15px;width:50px}@keyframes showCircle{0%{height:0;width:0}to{height:50px;width:50px}}.expandCircle{animation:showExpandCircle .5s;height:35px;width:35px}@keyframes showExpandCircle{0%{height:0;width:0}to{height:35px;width:35px}}@media (hover:hover){.circle:hover{height:60px;width:60px}}.circle:active{height:60px;width:60px}.circleTitle{font-size:var(--text-ui-sm)}.circleCompany,.circleDesc{font-size:.8125rem}.leftCircleText,.rightCircleText{color:#fff;width:130px}.leftCircleContainer,.rightCircleContainer{padding:0}.leftCircleContainer{flex-direction:row-reverse;margin-left:-130px}.rightCircleContainer{flex-direction:row;margin-left:130px}.gapLine{background-color:var(--primary-accent);height:150px;width:4px;z-index:0}.timeRange{font-size:.8125rem}.lastCircleOpen .skillsTitle{margin-top:125px}}.locFigure{margin:0;max-width:100%;position:relative}.locImg{border-radius:var(--radius-xl);display:block;height:auto;width:100%}.locChip{align-items:center;-webkit-backdrop-filter:blur(10px) saturate(1.2);backdrop-filter:blur(10px) saturate(1.2);background:color-mix(in srgb,var(--primary) 62%,#0000);border-radius:var(--radius-pill);bottom:var(--space-3);color:var(--text-primary);display:inline-flex;font-family:var(--font-body);font-size:var(--text-ui-sm);gap:var(--space-1);left:var(--space-3);line-height:1.4;max-width:calc(100% - var(--space-3)*2);opacity:.88;padding:var(--space-1) var(--space-3) var(--space-1) var(--space-2);pointer-events:none;position:absolute;transition:opacity var(--dur-base) var(--ease-out),transform var(--dur-base) var(--ease-out);white-space:nowrap}.locChip,.locChip span{overflow:hidden;text-overflow:ellipsis}.locChipPin{color:var(--text-primary);flex:none;height:14px;width:14px}@media (hover:hover){.locFigure:hover .locChip{opacity:1;transform:translateY(-2px)}}@media (prefers-reduced-motion:reduce){.locChip{transition:none}@media (hover:hover){.locFigure:hover .locChip{transform:none}}.locFigure:active .locChip{transform:none}}.homeBubbleText{color:var(--text-primary);filter:brightness(1)!important;font-family:var(--font-display);font-size:clamp(.8125rem,1.85vmin,1rem);opacity:0;transform:translateY(calc(var(--label-drop) - 1vmin));transition:opacity var(--dur-base) var(--ease-out),transform var(--dur-base) var(--ease-out);white-space:nowrap;z-index:-1}@media (hover:hover){.iconContainer:focus-visible .homeBubbleText,.iconContainer:hover .homeBubbleText{opacity:1;transform:translateY(var(--label-drop))}}.bubbleFill,.homeBubbleText,.icon,.iconContainer{-webkit-touch-callout:none;-webkit-user-drag:none;user-select:none;-webkit-user-select:none}.bubbleFill,.iconContainer{align-items:center;background:var(--primary-accent);border-radius:var(--radius-circle);cursor:pointer;display:flex;height:10vmin;justify-content:center;position:absolute;transition:background var(--dur-slow) var(--ease-out),filter var(--dur-slow) var(--ease-out);width:10vmin}.bubbleFill{transition:background var(--dur-slow) var(--ease-out),filter var(--dur-slow) var(--ease-out),transform var(--dur-base) var(--ease-spring)}@media (hover:hover){.iconContainer:hover .bubbleFill{filter:brightness(.82);transform:scale(1.06)}}.iconContainer:active .bubbleFill{filter:brightness(.82)}.icon{color:var(--text-primary);height:5.2vmin;position:fixed;transition:color var(--dur-slow) var(--ease-out),transform var(--dur-base) var(--ease-spring);width:5.2vmin;z-index:2}@media (hover:hover){.iconContainer:hover .icon{transform:scale(1.14)}}.iconContainer:focus-visible .icon{transform:scale(1.14)}.outerSpinningSquare{opacity:1;pointer-events:none;transform:scale(1.5);transition:visibility 0s linear .6s,opacity var(--dur-base) var(--ease-out);visibility:hidden}.outerSpinningSquaretrue{pointer-events:auto;transition:visibility 0s,opacity var(--dur-base) var(--ease-out);visibility:visible}.outerSpinningSquareSettling{opacity:0;transition:visibility 0s linear var(--dur-base),opacity var(--dur-base) var(--ease-out)}.outerSpinningSquaretrue .iconContainer,.outerSpinningSquaretrue .spinningSquare{will-change:transform}@media (prefers-reduced-motion:reduce){.outerSpinningSquare{transition:none}}@property --bubble-out{syntax:"<number>";inherits:false;initial-value:0}.spinningSquare .iconContainer{--bubble-out:0;opacity:clamp(0,calc(var(--bubble-out)*3),1);transition:background var(--dur-slow) var(--ease-out),filter var(--dur-slow) var(--ease-out),--bubble-out var(--dur-base) cubic-bezier(.5,0,.75,0) 0ms;transition:background var(--dur-slow) var(--ease-out),filter var(--dur-slow) var(--ease-out),--bubble-out var(--dur-base) cubic-bezier(.5,0,.75,0) calc((var(--bubble-n, 1) - 1 - var(--bubble-i, 0))*30ms)}.outerSpinningSquaretrue .iconContainer{--bubble-out:1;transition:background var(--dur-slow) var(--ease-out),filter var(--dur-slow) var(--ease-out),--bubble-out var(--dur-slow) var(--ease-spring) 0ms;transition:background var(--dur-slow) var(--ease-out),filter var(--dur-slow) var(--ease-out),--bubble-out var(--dur-slow) var(--ease-spring) calc(var(--bubble-i, 0)*45ms)}.outerSpinningSquareSettling .iconContainer{transition:background var(--dur-slow) var(--ease-out),filter var(--dur-slow) var(--ease-out),--bubble-out var(--dur-base) var(--ease-in-out)}@media (prefers-reduced-motion:reduce){.outerSpinningSquareSettling .iconContainer,.outerSpinningSquaretrue .iconContainer,.spinningSquare .iconContainer{transition:background var(--dur-slow) var(--ease-out),filter var(--dur-slow) var(--ease-out)}}.spinningSquare{--bubble-radius:21vmin;touch-action:none;transform:rotate(0deg);transform:rotate(var(--orbit-angle,0deg))}.iconContainer{--label-drop:6.5vmin;--bubble-dx:0;--bubble-dy:0;touch-action:none;transform:translate(calc(var(--bubble-dx)*var(--bubble-radius)*var(--bubble-out)),calc(var(--bubble-dy)*var(--bubble-radius)*var(--bubble-out))) rotate(0deg) translateY(calc(0px*var(--bubble-out))) scale(calc(.35 + var(--bubble-out)*.65));transform:translate(calc(var(--bubble-dx)*var(--bubble-radius)*var(--bubble-out)),calc(var(--bubble-dy)*var(--bubble-radius)*var(--bubble-out))) rotate(calc(var(--orbit-angle, 0deg)*-1)) translateY(calc(var(--unit-lift, 0px)*-1*var(--bubble-out))) scale(calc(.35 + var(--bubble-out)*.65))}@media (prefers-reduced-motion:reduce){.spinningSquare{transform:none}.iconContainer{transform:translate(calc(var(--bubble-dx)*var(--bubble-radius)*var(--bubble-out)),calc(var(--bubble-dy)*var(--bubble-radius)*var(--bubble-out)));transform:translate(calc(var(--bubble-dx)*var(--bubble-radius)*var(--bubble-out)),calc((var(--bubble-dy)*var(--bubble-radius) - var(--unit-lift, 0px))*var(--bubble-out)))}}.outerSpinningSquare,.spinningSquare{align-items:center;display:flex;height:100px;justify-content:center;position:absolute;width:100px}@media (hover:none){.homeBubbleText{opacity:1;transform:translateY(var(--label-drop))}.iconContainer{--unit-lift:calc((var(--label-drop) - 5vmin)/2 + 0.3rem)}}@media only screen and (max-width:640px){.outerSpinningSquare{transform:none}.spinningSquare{--bubble-radius:31.5vmin}.bubbleFill,.iconContainer{height:15vmin;width:15vmin}.icon{height:7.8vmin;width:7.8vmin}.iconContainer{--label-drop:9.75vmin}}@media only screen and (max-width:640px) and (hover:none){.iconContainer{--unit-lift:calc((var(--label-drop) - 7.5vmin)/2 + 0.3rem)}}.scrollingContainer{display:inline-block}.scrollingWelcomeContainer{align-items:center;display:flex;flex-direction:column;height:100svh;position:relative;width:100%}.heroScrollCue{all:unset;animation:heroCueIn var(--dur-slow) var(--ease-out) 1.2s backwards;border-radius:var(--radius-circle);bottom:max(var(--space-5),env(safe-area-inset-bottom));color:var(--text-primary);cursor:pointer;display:grid;height:44px;left:50%;place-items:center;position:absolute;transition:opacity var(--dur-base) var(--ease-out);translate:-50% 0;width:44px}.heroScrollCue svg{animation:heroCueBob 2.4s var(--ease-in-out) 1.8s infinite;height:26px;width:26px}.heroScrollCue:focus-visible{outline:2px solid var(--text-primary);outline-offset:2px}@keyframes heroCueIn{0%{opacity:0}}@keyframes heroCueBob{0%,60%,to{opacity:.75;transform:translateY(0)}30%{opacity:1;transform:translateY(6px)}}@media (prefers-reduced-motion:reduce){.heroScrollCue,.heroScrollCue svg{animation:none}}.shuffleHeading{all:unset;cursor:pointer}.cookieSettingsLine{margin-top:18px}.homeSectionHeading{align-items:baseline;display:flex;flex-wrap:wrap;gap:var(--space-4);justify-content:space-between;margin-top:var(--space-8)}.homeSectionMore{font-family:var(--font-body);font-size:var(--text-ui-sm);letter-spacing:.03em;opacity:.8;transition:opacity var(--dur-fast) var(--ease-out);white-space:nowrap}@media (hover:hover){.homeSectionMore:hover{opacity:1}}.homeSectionMore:active,.homeSectionMore:focus-visible{opacity:1}@media only screen and (max-width:640px){.scrollingWelcomeContainer{align-items:center;display:flex;flex-direction:column;height:100svh;width:100%}}.allProjectDisplayContainer{--card-tilt-bleed:26px;--card-gap:calc(var(--space-6) + var(--card-tilt-bleed)*2);grid-column-gap:var(--card-gap);grid-row-gap:calc(var(--card-gap) - var(--space-3));align-items:stretch;column-gap:var(--card-gap);display:grid;grid-template-columns:repeat(2,minmax(0,min(300px,calc((100% - var(--card-gap))/2.45))));justify-content:center;margin-block:var(--space-8);row-gap:calc(var(--card-gap) - var(--space-3))}.projectDisplayContainer{align-items:center;background-color:var(--primary-accent);border:1px solid var(--surface-line);border-radius:var(--radius-xl);display:flex;flex-direction:column;height:auto;justify-content:center;max-width:300px;padding:var(--space-5);scroll-margin-top:125px;transition:transform var(--dur-base) var(--ease-spring),scale var(--dur-base) var(--ease-spring),filter var(--dur-base) var(--ease-out),border-color var(--dur-base) var(--ease-out),background-color var(--dur-theme) var(--ease-in-out);width:100%}.projectDisplayContainer img{aspect-ratio:1;border-radius:var(--radius-lg);height:auto;max-width:300px;width:100%}.projectDisplayContainer h1{font-size:var(--step-2);margin-block:var(--space-3) 0;text-align:center}@media (hover:hover){.projectDisplayContainer:hover{border-color:var(--surface-line-strong);cursor:pointer;filter:brightness(.92);scale:1.04!important}}.projectDisplayContainer:active{border-color:var(--surface-line-strong);cursor:pointer;filter:brightness(.92);scale:1.04!important}.rotate-shake-animation{animation:rotate-shake .5s ease-in-out}@keyframes rotate-shake{0%,to{transform:rotate(0deg);transform:rotate(var(--start-rotation,0deg))}25%{transform:rotate(-8deg);transform:rotate(calc(var(--start-rotation, 0deg) - 8deg))}50%{transform:rotate(8deg);transform:rotate(calc(var(--start-rotation, 0deg) + 8deg))}75%{transform:rotate(-4deg);transform:rotate(calc(var(--start-rotation, 0deg) - 4deg))}}@media only screen and (max-width:640px){.allProjectDisplayContainer{align-items:center;display:flex;flex-direction:column}.projectDisplayContainer{max-width:min(300px,100% - 84px);width:100%}}.homeBand{color:var(--text-primary);margin:var(--space-7) auto 0;width:var(--content-width)}.homeBandHeading{margin-bottom:var(--space-5)}.homeBandList{display:flex;flex-direction:column;gap:var(--space-4);list-style:none;margin:0;padding:0}.homeBandRow{grid-gap:var(--space-5);align-items:center;background-color:var(--primary-accent);border:1px solid var(--surface-line);border-radius:var(--radius-lg);display:grid;gap:var(--space-5);grid-template-columns:132px minmax(0,1fr);padding:var(--space-4);text-decoration:none;transition:border-color var(--dur-base) var(--ease-out),background-color var(--dur-base) var(--ease-out)}.homeBandRow,.homeBandRow:link,.homeBandRow:visited{color:var(--text-primary)}.homeBandRow:focus-visible{background-color:var(--primary-accent-transparent);border-color:var(--surface-line-strong)}@media (hover:hover){.homeBandRow:hover{background-color:var(--primary-accent-transparent);border-color:var(--surface-line-strong)}}.homeBandMedia{background-color:var(--primary);border-radius:var(--radius-md);display:grid;height:132px;overflow:hidden;place-items:center;width:132px}.homeBandMedia img{height:100%;object-fit:cover;transition:transform var(--dur-slow) var(--ease-out);width:100%}.homeBandRow:focus-visible .homeBandMedia img{transform:scale(1.05)}@media (hover:hover){.homeBandRow:hover .homeBandMedia img{transform:scale(1.05)}}.homeBandIcon{color:var(--text-primary);height:56px;opacity:.85;width:56px}.homeBandText{display:flex;flex-direction:column;gap:var(--space-2);min-width:0}.homeBandTitle{font-family:var(--font-display);font-size:var(--step-3);font-weight:700;line-height:var(--leading-snug)}.homeBandBlurb{font-size:var(--step-0);line-height:var(--leading-normal);max-width:56ch;opacity:.85}.homeBandMore{align-items:center;display:inline-flex;font-size:var(--text-ui-sm);gap:var(--space-2);letter-spacing:.04em;opacity:.75}.homeBandMore svg{height:16px;transition:transform var(--dur-base) var(--ease-spring);width:16px}.homeBandRow:focus-visible .homeBandMore svg{transform:translateX(4px)}@media (hover:hover){.homeBandRow:hover .homeBandMore svg{transform:translateX(4px)}}@media only screen and (max-width:640px){.homeBand{margin-top:var(--space-7)}.homeBandRow{gap:var(--space-4);grid-template-columns:84px minmax(0,1fr);padding:var(--space-3)}.homeBandMedia{height:84px;width:84px}.homeBandIcon{height:36px;width:36px}.homeBandTitle{font-size:var(--step-2)}.homeBandBlurb{font-size:var(--text-ui-sm)}}@media (prefers-reduced-motion:reduce){.homeBandMedia img,.homeBandMore svg,.homeBandRow{transition:none}@media (hover:hover){.homeBandRow:hover .homeBandMedia img{transform:none}}.homeBandRow:active .homeBandMedia img{transform:none}@media (hover:hover){.homeBandRow:hover .homeBandMore svg{transform:none}}.homeBandRow:active .homeBandMore svg{transform:none}}.siteFooter{border-top:1px solid var(--primary-accent);color:var(--text-primary);margin-top:var(--space-9);padding:var(--space-8) 0 var(--space-6);width:100%}.siteFooterInner{align-items:flex-start;display:flex;flex-wrap:wrap;gap:var(--space-7);justify-content:space-between;margin:0 auto;width:var(--content-width)}.siteFooterName{font-family:var(--font-display);font-size:var(--step-2);font-weight:700;margin:0 0 var(--space-2)}.siteFooterLine{line-height:var(--leading-normal);margin:0 0 var(--space-3);max-width:40ch;opacity:.8}.siteFooterEmail,.siteFooterLine{font-size:var(--text-ui-sm)}.siteFooterNav ul{grid-gap:var(--space-2) var(--space-6);display:grid;gap:var(--space-2) var(--space-6);grid-template-columns:repeat(2,minmax(0,1fr));list-style:none;margin:0;padding:0}.siteFooterNav a{font-size:var(--text-ui-sm);opacity:.85;text-decoration:none;transition:opacity var(--dur-fast) var(--ease-out)}@media (hover:hover){.siteFooterNav a:hover{opacity:1;text-decoration:underline}}.siteFooterNav a:active,.siteFooterNav a:focus-visible{opacity:1;text-decoration:underline}.siteFooterMeta{align-items:center;display:flex;flex-wrap:wrap;font-size:var(--step--1);gap:var(--space-4);justify-content:space-between;margin:var(--space-7) auto 0;opacity:.6;width:var(--content-width)}@media only screen and (max-width:640px){.siteFooter{margin-top:var(--space-7);padding-top:var(--space-6)}.siteFooterInner{gap:var(--space-5)}.siteFooterMeta{margin-top:var(--space-5)}}.siteFooterElsewhere{display:flex;flex-direction:column;font-size:var(--text-ui-sm);gap:var(--space-2)}.siteFooterElsewhereLabel{font-size:var(--step--1);letter-spacing:.1em;margin-bottom:var(--space-1);opacity:.55;text-transform:uppercase}.siteFooterElsewhere a{align-items:center;display:inline-flex;gap:var(--space-2);opacity:.85;text-decoration:none;transition:opacity var(--dur-fast) var(--ease-out)}@media (hover:hover){.siteFooterElsewhere a:hover{opacity:1;text-decoration:underline}}.siteFooterElsewhere a:active,.siteFooterElsewhere a:focus-visible{opacity:1;text-decoration:underline}.siteFooterElsewhere svg{flex:none;height:16px;width:16px}.publications{color:var(--text-primary);margin:0 auto;padding:40px 0 60px;width:var(--content-width)}.publicationsTitle{font-family:var(--font-display);margin-bottom:4px}.publicationsOrcid{margin-bottom:24px;margin-top:0}.publicationsYear h3{font-family:var(--font-display);margin-bottom:8px}.publicationsList{list-style:none;margin:0 0 28px;padding:0}.publicationsList>li{border-top:1px solid var(--primary-accent);display:flex;flex-direction:column;gap:3px;padding:12px 0}.publicationTitle{font-weight:700}.publicationAuthors{opacity:.9}.publicationMeta{font-size:var(--text-ui-sm);opacity:.7}@media only screen and (max-width:640px){.publications{width:90%}}.researchContainer{display:flex;flex-direction:column;width:100%}.mediaDesc{color:var(--text-primary);font-family:var(--font-body);margin-bottom:25px}.mediaContainer{align-items:center;display:flex;flex-direction:column;justify-content:center;margin:0 auto;padding-bottom:50px;padding-top:var(--page-top);width:var(--content-width);z-index:0}.mediaContainer h2{text-align:start;width:100%}.mediaTopImg{margin-bottom:var(--space-6);width:min(100%,46rem)}.mediaAlbumTitle{margin-top:50px}.mediaTitle h2{margin-bottom:25px;margin-top:75px}.mediaCarouselGrid{display:flex;flex-wrap:wrap;gap:25px;justify-content:center}.gridItem{align-items:center;display:flex;filter:brightness(100%);text-align:center;transition:filter var(--dur-base) var(--ease-out)}.gridItem,.mediaImg{border-radius:var(--radius-lg)}.mediaImg{transition:transform var(--dur-fast) var(--ease-spring),filter var(--dur-fast) var(--ease-out);width:16vw}@media (hover:hover){.mediaImg:hover{cursor:pointer;filter:brightness(75%);transform:scale(1.025)}}.mediaImg:active{cursor:pointer;filter:brightness(75%);transform:scale(1.025)}@media (hover:hover){.mediaImgNoBrightness:hover{filter:invert(75%)}}.mediaImgNoBrightness:active{filter:invert(75%)}.mediaCarouselContainer,.mediaPosterCarouselContainer{height:600px;width:600px}.mediaPosterCarouselContainer{height:700px}.mediaSlide{align-items:flex-start;color:#fff;display:flex;height:100%;justify-content:center;max-height:100vh;width:auto}.mediaCarousel{position:relative}.albumSlide{transition:transform var(--dur-fast) var(--ease-spring),filter var(--dur-fast) var(--ease-out)}@media (hover:hover){.albumSlide:hover{cursor:pointer;filter:brightness(75%);transform:scale(1.01) translateY(5px)}}.albumSlide:active{cursor:pointer;filter:brightness(75%);transform:scale(1.01) translateY(5px)}.logoImgTransparent{filter:invert(100%)}.logoImg,.logoImgTransparent{width:100px}.mediaDotContainer{display:flex;flex-direction:row;justify-content:space-evenly;left:50%;position:relative;transform:translate(-50%);width:150px}.mediaArrowContainer{align-content:center;bottom:53.5%;display:flex;justify-content:space-between;position:relative}.mediaArrowButton{position:relative}.mediaBackArrowButton{left:10px}.mediaNextArrowButton{right:10px}.dialogImg{border-radius:var(--radius-lg);cursor:pointer;height:inherit;width:auto}.mediaSectionHeading{font-family:var(--font-display);margin:40px 0 8px;text-align:left}.mediaSectionHeading,.sfHandoff{color:var(--text-primary);width:100%}.sfHandoff{align-items:center;background-color:var(--primary-accent);border:1px solid var(--surface-line);border-radius:var(--radius-lg);box-sizing:border-box;display:flex;gap:var(--space-5);justify-content:space-between;margin:var(--space-7) auto var(--space-8);padding:var(--space-5);text-decoration:none;transition:border-color var(--dur-base) var(--ease-out),background-color var(--dur-base) var(--ease-out)}.sfHandoff:link,.sfHandoff:visited{color:var(--text-primary)}.sfHandoff:focus-visible{background-color:var(--primary-accent-transparent);border-color:var(--surface-line-strong)}@media (hover:hover){.sfHandoff:hover{background-color:var(--primary-accent-transparent);border-color:var(--surface-line-strong)}}.sfHandoffText{display:flex;flex-direction:column;gap:var(--space-2);text-align:start}.sfHandoffTitle{font-family:var(--font-display);font-size:var(--step-2);font-weight:700}.sfHandoffBlurb{font-size:var(--text-ui-sm);opacity:.8}.sfHandoffIcon{flex:none;height:30px;transition:transform var(--dur-base) var(--ease-spring);width:30px}.sfHandoff:focus-visible .sfHandoffIcon{transform:translate(3px,-3px)}@media (hover:hover){.sfHandoff:hover .sfHandoffIcon{transform:translate(3px,-3px)}}@media (prefers-reduced-motion:reduce){.sfHandoff,.sfHandoffIcon{transition:none}@media (hover:hover){.sfHandoff:hover .sfHandoffIcon{transform:none}}.sfHandoff:active .sfHandoffIcon{transform:none}}@media only screen and (max-width:640px){.mediaContainer{padding-bottom:50px;width:85%}.mediaAlbumTitle{margin-top:-35px!important}.mediaContainer h2{margin-bottom:25px;margin-top:25px}.mediaLogoTitle,.mediaPosterTitle{margin-top:75px}.mediaCarousel{padding-bottom:15px}.mediaCarouselContainer,.mediaPosterCarouselContainer{height:100%;width:100%}.mediaImg{width:100%}.mediaDotContainer{bottom:-25px}.mediaCarouselGrid{display:flex;flex-grow:2;flex-wrap:wrap;gap:10px}.gridItem{border-radius:var(--radius-lg);text-align:center}.mediaImg{width:40vw}.logoImg,.logoImgTransparent{width:75px}.dialogImg{border-radius:var(--radius-lg);width:100%}.sfHandoff{gap:var(--space-4);margin:var(--space-6) auto var(--space-7);padding:var(--space-4)}.sfHandoffTitle{font-size:var(--step-1)}.sfHandoffIcon{height:22px;width:22px}}.bloatwareContainer{align-items:center;color:var(--text-primary);display:flex;flex-direction:column;margin:0 auto;padding-bottom:60px;padding-top:var(--page-top);width:var(--content-width)}.bloatwareLogo{margin-bottom:24px;width:min(45%,320px)}.bloatwareDesc{width:100%}.bloatwareDesc,.bloatwareDesc p:last-child{margin-bottom:0}.bloatwareSectionHeading{font-family:var(--font-display);margin:40px 0 8px;text-align:left;width:100%}@media only screen and (max-width:640px){.bloatwareContainer{padding-top:var(--page-top);width:90%}.bloatwareLogo{width:65%}}.bootloader{margin:var(--space-7) auto 0;text-align:start;width:100%}.bootloader>.bloatwareSectionHeading{margin-top:0}.bootloaderMeta{font-size:var(--text-ui-sm);margin:calc(var(--space-2)*-1) 0 var(--space-5);opacity:.75}.bootloaderLayout{grid-column-gap:var(--space-7);grid-row-gap:var(--space-5);align-items:start;column-gap:var(--space-7);display:grid;grid-template-areas:"cover   tracks" "credits tracks";grid-template-columns:auto minmax(0,1fr);grid-template-rows:auto 1fr;row-gap:var(--space-5)}.bootloaderCover{grid-area:cover}.bootloaderTracks{grid-area:tracks}.bootloaderCredits{grid-area:credits}.bootloaderTracks{border-top:1px solid var(--primary-accent);counter-reset:track;list-style:none;margin:0;padding:0}.bootloaderTracks li{align-items:baseline;border-bottom:1px solid var(--primary-accent);counter-increment:track;display:flex;font-size:var(--text-ui-sm);gap:var(--space-3);padding:var(--space-2) 0}.bootloaderTracks li:before{font-feature-settings:"tnum";content:counter(track);font-variant-numeric:tabular-nums;min-width:2ch;opacity:.5;text-align:right}.trackName{flex:1 1 auto}.trackLength{font-feature-settings:"tnum";font-variant-numeric:tabular-nums;opacity:.6}.bootloaderCredits{font-size:var(--text-ui-sm);margin:0}.bootloaderCredits>div{display:flex;flex-wrap:wrap;gap:var(--space-2);margin-bottom:var(--space-1)}.bootloaderCredits dt{opacity:.6}.bootloaderCredits dt:after{content:":"}.bootloaderCredits dd{margin:0}@media only screen and (max-width:720px){.bootloaderLayout{grid-template-areas:"cover" "tracks" "credits";grid-template-columns:minmax(0,1fr);grid-template-rows:auto;row-gap:var(--space-6)}.bootloaderCover{justify-self:center}}.bloatwareSingles{width:100%}.bandcampPoster{all:unset;aspect-ratio:1;border:1px solid var(--surface-line);border-radius:var(--radius-lg);cursor:pointer;display:block;overflow:hidden;position:relative;transition:transform var(--dur-base) var(--ease-spring);width:min(340px,80vw)}@media (hover:hover){.bandcampPoster:hover{transform:scale(1.02)}}.bandcampPoster:active,.bandcampPoster:focus-visible{transform:scale(1.02)}.bandcampPoster:focus-visible{outline:2px solid var(--secondary);outline-offset:4px}.bandcampPoster img{display:block;height:100%;object-fit:cover;transition:filter var(--dur-base) var(--ease-out);width:100%}@media (hover:hover){.bandcampPoster:hover img{filter:brightness(.82)}}.bandcampPoster:active img,.bandcampPoster:focus-visible img{filter:brightness(.82)}.bandcampPlayBadge{display:grid;inset:0;place-items:center;pointer-events:none;position:absolute}.bandcampPlayBadge span{background-color:var(--primary);border:2px solid var(--secondary);border-radius:var(--radius-circle);display:grid;height:84px;place-items:center;transition:transform var(--dur-base) var(--ease-spring);width:84px}.bandcampPlayBadge svg{color:var(--secondary);height:38px;margin-left:4px;width:38px}@media (hover:hover){.bandcampPoster:hover .bandcampPlayBadge span{transform:scale(1.08)}}.bandcampPoster:active .bandcampPlayBadge span,.bandcampPoster:focus-visible .bandcampPlayBadge span{transform:scale(1.08)}.bandcampPosterHint{bottom:var(--space-3);font-size:var(--text-ui-sm);left:0;letter-spacing:.06em;pointer-events:none;position:absolute;right:0;text-align:center}.bandcampPosterHint span{background-color:var(--primary);border-radius:var(--radius-pill);color:var(--secondary);padding:var(--space-2) var(--space-4)}.bandcampFrameWrap{width:min(340px,80vw)}.bandcampFrame{border:0;border-radius:var(--radius-lg);height:790px;overflow:hidden;width:100%}@media (prefers-reduced-motion:reduce){.bandcampPlayBadge span,.bandcampPoster,.bandcampPoster img{transition:none}@media (hover:hover){.bandcampPoster:hover{transform:none}}.bandcampPoster:active,.bandcampPoster:focus-visible{transform:none}@media (hover:hover){.bandcampPoster:hover .bandcampPlayBadge span{transform:none}}.bandcampPoster:active .bandcampPlayBadge span{transform:none}}.aboutContainer{flex-direction:column;padding-bottom:75px;width:100%}.aboutContainer,.meContainer{align-items:center;display:flex}.meContainer{flex-direction:row;justify-content:center;margin-top:150px;width:var(--content-width)}.aboutPhotoContainer{flex:none;width:42%}.aboutSectionTitle{margin-bottom:var(--space-4);margin-top:var(--space-7)}.aboutExperienceTitle{margin-bottom:0}.aboutActions{display:flex;flex-wrap:wrap;gap:var(--space-3);margin-top:var(--space-5)}.aboutActions .projectLink{all:unset;align-items:center;background-color:var(--primary-accent);border-radius:var(--radius-pill);color:var(--text-primary);cursor:pointer;display:inline-flex;font-size:var(--text-ui-sm);gap:var(--space-2);padding:var(--space-3) var(--space-5);transition:background-color var(--dur-base) var(--ease-out),color var(--dur-base) var(--ease-out),transform var(--dur-base) var(--ease-spring)}.aboutActions .projectLink svg{height:16px;width:16px}.aboutDegree{grid-gap:var(--space-4);all:unset;align-items:center;background-color:var(--primary-accent);border-radius:var(--radius-lg);box-sizing:border-box;cursor:pointer;gap:var(--space-4);grid-template-columns:auto minmax(0,1fr) auto;padding:var(--space-4) var(--space-5) var(--space-4) var(--space-4);text-align:left;transition:background-color var(--dur-base) var(--ease-out),color var(--dur-base) var(--ease-out);width:100%}.aboutDegree,.aboutDegreeMark{color:var(--text-primary);display:grid}.aboutDegreeMark{background-color:var(--primary);border-radius:var(--radius-md);flex:none;height:52px;place-items:center;transition:transform var(--dur-base) var(--ease-spring);width:52px}.aboutDegreeMark svg{height:28px;width:28px}.aboutDegreeMain{display:flex;flex-direction:column;gap:var(--space-1);min-width:0}.aboutDegreeTitle{font-family:var(--font-display);font-size:var(--step-1);font-weight:600;line-height:1.25}.aboutDegreeMeta{line-height:1.4}.aboutDegreeAction,.aboutDegreeMeta{font-size:var(--text-ui-sm);opacity:.85}.aboutDegreeAction{align-items:center;display:inline-flex;gap:var(--space-2)}.aboutDegreeAction svg{height:18px;width:18px}.aboutActions .projectLink:focus-visible,.aboutDegree:focus-visible{background-color:var(--secondary);color:var(--primary);outline:3px solid var(--primary);outline-offset:-3px}@media (hover:hover){.aboutActions .projectLink:hover,.aboutDegree:hover{background-color:var(--secondary);color:var(--primary)}.aboutActions .projectLink:hover{transform:translateY(-2px)}.aboutDegree:hover .aboutDegreeMark{transform:scale(1.06) rotate(-3deg)}}@media (prefers-reduced-motion:reduce){@media (hover:hover){.aboutActions .projectLink:hover,.aboutDegree:hover .aboutDegreeMark{transform:none}}.aboutActions .projectLink:active,.aboutDegree:active .aboutDegreeMark{transform:none}}.aboutDesc{color:var(--text-primary);font-family:var(--font-body);margin-bottom:75px;margin-top:75px;width:var(--content-width)}.aboutProfile{filter:grayscale(100%);transition:filter var(--dur-slow) var(--ease-out)}@media (hover:hover){.aboutPhotoContainer:hover .aboutProfile{filter:grayscale(0)}}.thatsMe{filter:invert(100%);margin-right:-9%;margin-top:60px;pointer-events:none;width:58%;z-index:4}.however{color:gray}.checkOut{margin-bottom:0;margin-top:0;text-align:center}.toolsIntro{font-size:var(--text-ui-sm);margin-bottom:var(--space-4);opacity:.8}@media only screen and (max-width:640px){.aboutPhotoContainer{margin-bottom:var(--space-7);max-width:400px;width:80%}.timelineContainer h2{font-size:var(--step-4);margin-bottom:75px}.meContainer{flex-direction:column-reverse;margin-top:100px;width:100%}.thatsMe{margin-left:0;margin-right:0;margin-top:-110px;max-width:420px;width:85%}.aboutDesc{margin-bottom:70px;margin-top:30px;width:80%}.checkOut{margin-bottom:0}.aboutDegree{gap:var(--space-3);padding:var(--space-3) var(--space-4) var(--space-3) var(--space-3)}.aboutDegreeMark{height:44px;width:44px}.aboutDegreeMark svg{height:24px;width:24px}.aboutDegreeActionLabel{display:none}}.contactContainer{align-items:center;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background-color:#000000b3;cursor:pointer;display:flex;height:100dvh;justify-content:center;opacity:0;pointer-events:visiblePainted;position:fixed;transition:opacity var(--dur-base) var(--ease-out),visibility 0s linear var(--dur-base);visibility:hidden;width:100%;z-index:20}.contactContainertrue{opacity:1;transition:opacity var(--dur-base) var(--ease-out),visibility 0s;visibility:visible}.contactDialogBoxContainer{transform:translateY(10px) scale(.96);transition:transform var(--dur-base) var(--ease-out)}.contactContainertrue .contactDialogBoxContainer{transform:none}@media (prefers-reduced-motion:reduce){.contactContainer{transition:opacity 0s,visibility 0s}.contactDialogBoxContainer{transform:none;transition:none}}.contactDialogBoxContainer{background-color:var(--primary);border-radius:var(--radius-lg);cursor:auto;flex-direction:column;font-family:var(--font-body);height:85%;padding:35px;width:auto;z-index:5}.closeDialogBtn,.contactDialogBoxContainer{align-items:center;color:var(--text-primary);display:flex;font-size:var(--step-1);justify-content:center;text-align:center}.closeDialogBtn{background-color:var(--primary-accent);border:none;border-radius:var(--radius-sm);border-radius:var(--radius-circle);cursor:pointer;font-weight:700;height:44px;position:fixed;right:25px;top:25px;transition:filter var(--dur-fast) var(--ease-out);width:44px;z-index:6}.closeDialogBtn svg{height:22px;width:22px}@media (hover:hover){.closeDialogBtn:hover{filter:brightness(.8)}}.closeDialogBtn:active{filter:brightness(.8)}@media only screen and (max-width:640px){.contactDialogBoxContainer{background-color:#0000;font-size:var(--step-2);height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;width:70%}.closeDialogBtn{font-size:var(--step-3);height:35px;height:44px;right:25px;top:25px;width:35px;width:44px}}@media only screen and (min-width:641px) and (max-width:1400px){.contactDialogBoxContainer{height:-webkit-fit-content;height:-moz-fit-content;height:fit-content;width:80%}}.cookieConsent{align-items:center;background:var(--primary-accent);border:1px solid var(--surface-line-strong);border-radius:var(--radius-pill);bottom:max(12px,env(safe-area-inset-bottom));box-shadow:0 8px 30px #00000040;box-sizing:border-box;color:var(--secondary);display:flex;font-size:var(--text-ui-sm);gap:var(--space-3);left:50%;max-width:calc(100vw - 24px);padding:6px 6px 6px var(--space-4);position:fixed;transform:translateX(-50%);width:-webkit-max-content;width:max-content;z-index:10}.cookieConsentText{line-height:1.35;margin:0}.cookieConsentAside{opacity:.75}.cookieConsentButtons{display:flex;flex-shrink:0;gap:6px}.cookieConsentBtn{background:none;border:1px solid var(--secondary);border-radius:var(--radius-pill);color:var(--secondary);cursor:pointer;font:inherit;min-height:40px;min-width:52px;padding:0 var(--space-4);transition:background var(--dur-fast) var(--ease-out),color var(--dur-fast) var(--ease-out)}@media (hover:hover){.cookieConsentBtn:hover{background:var(--secondary);color:var(--primary-accent)}}@media only screen and (max-width:480px){.cookieConsentAside{display:none}}.cookieSettingsBtn{background:none;border:none;color:inherit;cursor:pointer;font:inherit;font-size:var(--text-ui-sm);opacity:.6;padding:0;text-decoration:underline;transition:opacity var(--dur-fast) var(--ease-out)}@media (hover:hover){.cookieSettingsBtn:hover{opacity:1}}.cookieSettingsBtn:active{opacity:1}.swatchPicker{flex-direction:row;gap:10px;justify-content:center;position:absolute;width:100%;z-index:3}.swatchPicker,.swatchRow{align-items:center;display:flex}.swatchRow{background-color:var(--primary-accent);border-radius:var(--radius-pill);gap:8px;padding:7px 10px;position:relative;transition:background-color var(--dur-theme) var(--ease-in-out),transform var(--dur-slow) var(--ease-spring),opacity var(--dur-base) var(--ease-out)}.swatchPickerTucked .swatchRow{opacity:0;pointer-events:none;transform:translateY(-48px) scale(.85);transition:background-color var(--dur-theme) var(--ease-in-out),transform var(--dur-base) var(--ease-in-out),opacity var(--dur-base) var(--ease-in-out)}@media (prefers-reduced-motion:reduce){.swatchPickerTucked .swatchRow,.swatchRow{transition:background-color var(--dur-theme) var(--ease-in-out),opacity var(--dur-base) var(--ease-out)}}.colourBall{all:unset;border-radius:var(--radius-circle);box-sizing:border-box;cursor:pointer;height:22px;position:relative;transition:transform var(--dur-fast) var(--ease-spring),scale var(--dur-fast) var(--ease-spring);width:22px}@media (hover:hover){.colourBall:hover{scale:1.12}}.colourBall:before{background-color:var(--text-primary);border-radius:var(--radius-circle);bottom:-6px;content:"";height:4px;left:50%;margin-left:-2px;opacity:0;position:absolute;transform:scale(0);transition:opacity var(--dur-fast) var(--ease-out),transform var(--dur-fast) var(--ease-spring);width:4px}.colourBallCurrent:before{opacity:1;transform:scale(1)}.colourBall:focus-visible{outline:2px solid var(--text-primary);outline-offset:3px}.colourBall:after{content:"";inset:-4px;position:absolute}.notFoundContainer{align-items:center;color:var(--text-primary);display:flex;flex-direction:column;gap:12px;justify-content:center;min-height:70dvh;padding:24px;text-align:center}.notFoundContainer h2{font-family:var(--font-display);margin-bottom:0}.notFoundLink{color:var(--text-primary);margin-top:8px;text-decoration:underline}
/*# sourceMappingURL=main.7867d9dd.css.map*/