@keyframes astroFadeInOut{0%{opacity:1}to{opacity:0}}@keyframes astroFadeIn{0%{opacity:0;mix-blend-mode:plus-lighter}to{opacity:1;mix-blend-mode:plus-lighter}}@keyframes astroFadeOut{0%{opacity:1;mix-blend-mode:plus-lighter}to{opacity:0;mix-blend-mode:plus-lighter}}@keyframes astroSlideFromRight{0%{transform:translate(100%)}}@keyframes astroSlideFromLeft{0%{transform:translate(-100%)}}@keyframes astroSlideToRight{to{transform:translate(100%)}}@keyframes astroSlideToLeft{to{transform:translate(-100%)}}@media (prefers-reduced-motion){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*),[data-astro-transition-scope]{animation:none!important}}@font-face{font-family:Overused Grotesk;src:url(/fonts/OverusedGrotesk-Regular.woff2)format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Overused Grotesk;src:url(/fonts/OverusedGrotesk-Medium.woff2)format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Overused Grotesk;src:url(/fonts/OverusedGrotesk-Italic.woff2)format("woff2");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:Overused Grotesk;src:url(/fonts/OverusedGrotesk-MediumItalic.woff2)format("woff2");font-weight:500;font-style:italic;font-display:swap}:root{--cream:#fff5e9;--ink:#3c3a26;--ink-60:color-mix(in srgb, var(--ink) 60%, transparent);--ink-30:color-mix(in srgb, var(--ink) 30%, transparent);--ink-10:color-mix(in srgb, var(--ink) 10%, transparent);--border:1px solid var(--ink-10);--font:"Overused Grotesk", system-ui, sans-serif;--fw-medium:500;--tracking-tight:-.03em;--fs-1:20px;--fs-2:24px;--fs-3:32px;--fs-4:48px;--fs-5:72px;--s-0:.25rem;--s-1:.5rem;--s-2:1rem;--s-3:1.5rem;--s-4:2rem;--s-5:3rem;--s-6:4rem;--s-7:8rem;--nav-h:86px;--pad-x:var(--margin);--measure-md:68ch;--ease:.2s ease;--cols:4;--margin:36px;--gutter:24px;--grid:repeat(var(--cols), minmax(0, 1fr));@media (width>=768px){--cols:8}@media (width>=1072px){--cols:12;--margin:48px}}*,:before,:after{box-sizing:border-box}html{scrollbar-gutter:stable;scroll-padding-top:var(--nav-h);-webkit-text-size-adjust:100%;text-size-adjust:100%;font-size:20px;@media (prefers-reduced-motion:no-preference){scroll-behavior:smooth}}body{background:var(--cream);color:var(--ink);font-family:var(--font);font-size:var(--fs-1);font-kerning:normal;font-feature-settings:"ss05" 1, "ss06" 1, "ss07" 1;-webkit-font-smoothing:antialiased;margin:0;font-weight:400;line-height:1.25;overflow-x:hidden;&.menu-open{overflow:hidden}}h1,h2,h3,p,figure{margin:0}h1,h2,h3{font-size:inherit}img{max-width:100%;height:auto;display:block}iframe{border:0;display:block}hr{border:0;border-top:var(--border);margin:0}.nav__list,.nav-overlay__list,.cv-tasks,.skills,.social-links{margin:0;padding:0;list-style:none}a{color:var(--ink);transition:color var(--ease);text-decoration:none;&:after,&>:is(h1,h2,h3):after{content:"⁠↘";font:inherit;letter-spacing:inherit;text-transform:none;transition:transform var(--ease);display:inline-block}&:has(>:is(h1,h2,h3)):after{content:none}&:is(:hover,:focus-visible,:active){&:after,&>:is(h1,h2,h3):after{transform:translate(.3em)}}}button{font:inherit;color:inherit;cursor:pointer}:is(a,button):focus-visible{outline:1px solid var(--ink);outline-offset:3px}.nav__link,.nav-overlay__link{color:var(--ink-60);&:is(:hover,:focus-visible,[aria-current=page],.nav__link--active,.nav-overlay__link--active){color:var(--ink)}}.container{width:100%;padding-inline:var(--margin)}.stack,.hero__text,.project-card,.project-card__body,.contact-item,.intro__bio,.cv-entry__head>div,.cv-tasks,.contact-methods,.project-hero__info,.project-meta,.project-meta__item,.wip-text,.project-body,.nav__toggle,.nav-overlay__list,.footer__col--email{flex-direction:column;display:flex}.stack{align-items:flex-start;gap:var(--s-3)}.contact-content,.downloads-subtitle,.error-text{max-width:var(--measure-md)}.hero__img,.project-card__img,.project-hero__img,.intro__photo{object-fit:cover;width:100%}.hero__img-wrap,.project-card__img-link,.project-hero__img-wrap{overflow:hidden}.cv-header,.projects__heading{margin-bottom:var(--s-4)}.intro__title,.page-title{margin-bottom:var(--s-5)}.cv-section-label,.section-title-wrap{margin-bottom:var(--s-3)}.cv-entry__head,.section-title-wrap{justify-content:space-between;align-items:baseline;gap:var(--s-1);flex-wrap:wrap;display:flex}.t-hero,.t-section,.t-project-title,.t-nav,.t-label,.arrow-link{font-weight:var(--fw-medium);letter-spacing:var(--tracking-tight)}.t-nav,.t-label,.arrow-link{text-transform:uppercase}.t-hero{font-size:var(--fs-4);overflow-wrap:anywhere;line-height:.85;@media (width>=1072px){font-size:var(--fs-5)}}.t-section,.t-project-title{line-height:.95}.t-section{font-size:var(--fs-4)}.t-project-title{font-size:var(--fs-3)}.t-nav{font-size:var(--fs-2)}.t-label,.badge,.cv-company,.contact-label{font-size:var(--fs-1)}.contact-intro,.project-body p,.footer__copy{line-height:1.6}.t-body{& p{margin-block:0 var(--s-2);&:last-child{margin-bottom:0}}}.badge{color:var(--cream);mix-blend-mode:difference;font-weight:400}.project-card__wip{right:var(--s-2);bottom:var(--s-2);position:absolute}.download-btn{border:1px solid var(--ink);white-space:nowrap;transition:background var(--ease), color var(--ease);padding:.65em 1.4em;&:after{content:none}&:hover{background:var(--ink);color:var(--cream)}}.skill{border:1px solid var(--ink-30);padding:.45em 1em}.skills{gap:var(--s-1);flex-wrap:wrap;display:flex}.social-links{gap:var(--s-3);flex-wrap:wrap;display:flex}.nav{z-index:100;height:var(--nav-h);position:fixed;inset:0 0 auto;& .nav__inner{height:100%;padding-inline:var(--margin);justify-content:space-between;align-items:center;display:flex;@media (width>=1072px){grid-template-columns:var(--grid);column-gap:var(--gutter);display:grid}}& .nav__logo{flex-shrink:0;line-height:1;@media (width>=1072px){grid-column:1/span 4}&:after{content:none}&:is(:hover,:focus-visible){color:var(--ink-60)}}& .nav__desktop{display:none;@media (width>=1072px){grid-column:5/-1;grid-template-columns:subgrid;display:grid}}& .nav__list{grid-column:1/-1;grid-template-columns:subgrid;align-items:center;display:grid;&>*{grid-column:span 2}}& .nav__link{text-align:left;line-height:1;display:inline-block;&:after{content:none}}& .nav__toggle{background:0 0;border:0;flex:none;justify-content:center;align-items:flex-end;gap:4px;width:36px;height:36px;margin:0;padding:6px;@media (width>=1072px){display:none}& span{background:var(--ink);width:20px;height:2px;transition:transform .3s,opacity .2s;display:block}&[aria-expanded=true] span{&:first-child{transform:translateY(6px)rotate(45deg)}&:nth-child(2){opacity:0}&:nth-child(3){transform:translateY(-6px)rotate(-45deg)}}}}.nav-overlay{z-index:99;padding-top:var(--nav-h);padding-inline:var(--pad-x);background:color-mix(in srgb, var(--cream) 75%, transparent);-webkit-backdrop-filter:blur(6px);opacity:0;visibility:hidden;transition:opacity .35s,visibility .35s;position:fixed;inset:0;@media (width>=1072px){display:none}&.open{opacity:1;visibility:visible}& .nav-overlay__inner{height:100%;padding-bottom:var(--s-5);align-items:flex-end;display:flex}& .nav-overlay__nav{width:100%}& .nav-overlay__list{align-items:flex-end;gap:var(--s-4)}& .nav-overlay__link{font-size:var(--fs-2);font-weight:var(--fw-medium);letter-spacing:var(--tracking-tight);text-align:right;text-transform:uppercase;line-height:1;&:not(:is([href^=http],[target=_blank])):after{content:none}&:is([href^=http],[target=_blank]){color:var(--ink)}& span{margin-left:.15em}}}.img-ph{background:#d8d1c5;width:100%;display:block;&.img-ph--wide{aspect-ratio:16/9}&.img-ph--tall{aspect-ratio:2/3}&.img-ph--square{aspect-ratio:1}}.hero{& .hero__inner{grid-template-columns:var(--grid);column-gap:var(--gutter);padding-inline:var(--margin);display:grid}& .hero__img-wrap{margin-inline:calc(-1 * var(--margin));grid-column:1/-1;@media (width>=1072px){grid-area:1/1/auto/span 8;height:calc(100dvh - 40px);margin-right:0}}& .hero__img{aspect-ratio:4/3;@media (width>=1072px){aspect-ratio:auto;height:100%}}& .hero__text{min-width:0;padding:var(--s-4) 0;gap:var(--s-2);grid-column:1/-1;margin:0;@media (width>=768px){grid-column:1/span 6}@media (width>=1072px){padding:0 0 var(--fs-1);grid-area:1/9/auto/-1;align-self:end}}}.projects{padding-top:var(--s-6);& .projects__grid{grid-template-columns:var(--grid);column-gap:var(--gutter);row-gap:var(--s-5);display:grid}}.project-card{gap:var(--s-2);grid-column:span 4;& .project-card__img-link{display:block;position:relative;&:after{content:none}&:hover .project-card__img{transform:scale(1.03)}}& .project-card__img{aspect-ratio:4/3;transition:transform .5s}& .project-card__body{gap:var(--s-1)}}.page{padding-top:calc(var(--nav-h) + var(--s-4));padding-bottom:var(--s-5);@media (width>=768px){padding-top:calc(var(--nav-h) + var(--s-5))}}.page--error{min-height:80vh;padding-top:calc(var(--nav-h) + var(--s-6));padding-bottom:var(--s-6);align-items:flex-start;display:flex}.cv-cta{margin-top:var(--s-4);justify-content:center;display:flex;&.cv-cta--start{justify-content:flex-start}}.pdf-viewer{border:var(--border);height:75vh;overflow:hidden;@media (width>=768px){height:90vh}& iframe{width:100%;height:100%}}.pdf-viewer--compact{height:65vh;@media (width>=768px){height:85vh}}.downloads-header{margin-bottom:var(--s-5)}.downloads-subtitle{margin-top:var(--s-2)}.download-section{margin-bottom:var(--s-6)}.section-divider{margin:var(--s-6) 0}.intro{margin-bottom:var(--s-6);& .intro__grid{grid-template-columns:var(--grid);column-gap:var(--gutter);row-gap:var(--s-4);align-items:start;display:grid}& .intro__photo-wrap{grid-column:1/-1;@media (width>=768px){grid-column:1/span 3}@media (width>=1072px){grid-column:1/span 4}}& .intro__photo{aspect-ratio:2/3}& .intro__bio{gap:var(--s-2);grid-column:1/-1;@media (width>=768px){grid-column:4/-1}@media (width>=1072px){grid-column:6/-1}}}.section{padding:var(--s-5) 0;& .section__title{margin-bottom:var(--s-4)}}.cv-entry{grid-template-columns:var(--grid);column-gap:var(--gutter);row-gap:var(--s-2);padding:var(--s-2) 0;border-bottom:var(--border);display:grid;&:last-child{border-bottom:none}& .cv-entry__head{grid-column:1/-1;@media (width>=768px){grid-area:1/1/span 2/span 3}@media (width>=1072px){grid-column:1/span 4}&>div{gap:var(--s-0)}& strong{font-size:var(--fs-1);font-weight:var(--fw-medium)}}& .cv-entry__desc,& .cv-tasks{grid-column:1/-1;@media (width>=768px){grid-column:4/-1}@media (width>=1072px){grid-column:5/-1}}}.cv-tasks{gap:var(--s-1);& li{padding-left:var(--s-3);position:relative;&:before{content:"—";color:var(--ink-30);position:absolute;left:0}}}.contact-header{margin-bottom:var(--s-4)}.contact-intro{margin-bottom:var(--s-5);font-size:var(--fs-2)}.contact-methods{gap:var(--s-4);margin-bottom:var(--s-5)}.contact-item{gap:var(--s-1);padding-bottom:var(--s-3);border-bottom:var(--border)}.contact-label{letter-spacing:.05em}.contact-link{width:fit-content;font-weight:var(--fw-medium)}.project-hero{grid-template-columns:var(--grid);column-gap:var(--gutter);row-gap:var(--s-4);margin-bottom:var(--s-5);align-items:start;display:grid;& .project-hero__img-wrap{grid-column:1/-1;position:relative;@media (width>=768px){grid-column:1/span 4}@media (width>=1072px){grid-column:1/span 7}}& .project-hero__info{gap:var(--s-4);grid-column:1/-1;@media (width>=768px){grid-column:5/-1}@media (width>=1072px){grid-column:9/-1}}& .project-hero__title{margin-bottom:var(--s-1)}}.project-meta{gap:var(--s-2);& .project-meta__item{gap:var(--s-0)}}.project-content{grid-template-columns:var(--grid);column-gap:var(--gutter);row-gap:var(--s-6);padding:var(--s-5) 0;background:var(--cream);display:grid;&>*{grid-column:1/-1;@media (width>=1072px){grid-column:3/11}}}.project-nav{justify-content:space-between;align-items:center;gap:var(--s-2);padding-top:var(--s-5);flex-wrap:wrap;display:flex;& .project-nav__links{justify-content:flex-end;gap:var(--s-2) var(--s-4);flex-wrap:wrap;display:flex}& .project-nav__back{&:after{content:none}&:before{content:"←⁠";font:inherit;letter-spacing:inherit;text-transform:none;transition:transform var(--ease);display:inline-block}&:is(:hover,:focus-visible,:active):before{transform:translate(-.3em)}}}.wip-figure{mix-blend-mode:multiply;justify-self:center;max-width:100%}.wip-text{gap:var(--s-1)}.project-body{gap:var(--s-5);& h2{margin-bottom:var(--s-2);font-size:var(--fs-3);font-weight:var(--fw-medium);letter-spacing:var(--tracking-tight);line-height:1.1}& p{font-size:var(--fs-1);&+p{margin-top:var(--s-2)}}& img{width:100%;margin:var(--s-2) 0}}.footer{padding:var(--s-6) 0 var(--s-4);@media (width>=768px){padding-top:var(--s-7)}& .footer__hr{display:none}& .footer__copy{width:fit-content;color:var(--ink-60);text-align:right;margin-left:auto;@media (width>=1072px){text-align:left;width:auto;margin-left:0}&,& *{text-transform:none}}& .footer__grid{align-items:flex-end;gap:var(--s-4);text-align:right;flex-direction:column-reverse;display:flex;@media (width>=1072px){grid-template-columns:var(--grid);column-gap:var(--gutter);text-align:left;align-items:end;row-gap:0;display:grid}}& .footer__col{min-width:0;@media (width>=1072px){grid-area:1/1/auto/span 4}&.footer__col--email{align-items:flex-end;gap:var(--s-1);order:1;@media (width>=1072px){text-align:right;order:0;grid-column:5/span 4;justify-self:end}}&.footer__col--links{align-self:stretch;@media (width>=1072px){grid-column:9/-1;place-self:start end}}}& .footer__email{font-size:var(--fs-3);font-weight:var(--fw-medium);letter-spacing:var(--tracking-tight);overflow-wrap:anywhere;text-align:right;margin-left:auto;line-height:1.05}& .footer__nav{justify-content:flex-end;gap:var(--s-1) var(--s-4);flex-wrap:wrap;width:100%;display:flex}& .footer__nav-link{white-space:nowrap}}@keyframes fadeUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes page-fade-out{0%{opacity:1}to{opacity:0}}.page-transition{view-transition-name:page}.page-enter{@media (prefers-reduced-motion:no-preference){animation:.2s both fadeUp}}::view-transition{background:var(--cream)}::view-transition-old(page){animation:.2s ease-in both page-fade-out}::view-transition-new(page){animation:.2s ease-out .2s both fadeUp}@media (prefers-reduced-motion:reduce){*,:before,:after{transition:none!important;animation:none!important}}::-webkit-scrollbar{width:4px}::-webkit-scrollbar-track{background:var(--cream)}::-webkit-scrollbar-thumb{background:var(--ink-30);border-radius:2px}.astro-route-announcer{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;top:0;left:0;overflow:hidden}
