@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/source-serif-4-latin-400-normal.DJ5YJwmz.woff2)format("woff2"),url(/_astro/source-serif-4-latin-400-normal.C1O10bxN.woff)format("woff")}@font-face{font-family:"Source Sans 3";font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/source-sans-3-latin-400-normal.DQi5PRDE.woff2)format("woff2"),url(/_astro/source-sans-3-latin-400-normal.RR2C27NP.woff)format("woff")}@font-face{font-family:"Source Sans 3";font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/source-sans-3-latin-600-normal.DeckBYAU.woff2)format("woff2"),url(/_astro/source-sans-3-latin-600-normal.Ck0n4g8U.woff)format("woff")}:root{color-scheme:light;--paper:#f8f8f4;--ink:#202823;--muted:#58645e;--accent:#285846;--accent-hover:#1e4435;--image-mat:#e7ece7;--rule:#c9cfc9;--font-serif:"Source Serif 4", Georgia, serif;--font-sans:"Source Sans 3", system-ui, sans-serif}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:24px}body{background:var(--paper);color:var(--ink);font-family:var(--font-sans);text-rendering:optimizelegibility;margin:0;font-size:1.25rem;line-height:1.55}a{color:var(--accent);text-underline-offset:.2em;text-decoration-thickness:1px;transition:color .16s ease-out,text-decoration-color .16s ease-out}a:hover{color:var(--accent-hover)}a:active{color:var(--ink)}a:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.site-shell{color:var(--ink)}.page-width{width:min(1248px,100% - 128px);margin-inline:auto}.skip-link{z-index:1;background:var(--accent);min-height:44px;color:var(--paper);align-items:center;padding:8px 14px;text-decoration:none;display:inline-flex;position:absolute;top:16px;left:16px;transform:translateY(-160%)}.skip-link:focus{color:var(--paper);margin:16px;position:static;transform:translateY(0)}.intro{grid-template-columns:minmax(0,1fr) 192px;align-items:center;gap:clamp(32px,6.7vw,96px);padding-top:56px;display:grid}.intro-copy{max-width:760px}.intro-portrait{aspect-ratio:3/4;object-fit:cover;border-radius:4px;width:192px;height:auto;display:block}.intro h1,.intro h2,.section-title,.project-title,.project-cover-type,.education-heading{font-family:var(--font-serif);font-weight:400}.intro h1{font-family:var(--font-sans);letter-spacing:-.035em;margin:0;font-size:clamp(4.5rem,6.25vw,5.625rem);font-weight:600;line-height:1}.intro h2{font-family:var(--font-sans);letter-spacing:-.02em;margin:12px 0 0;font-size:clamp(1.5rem,2vw,2rem);font-weight:600;line-height:1.18}.intro-summary{max-width:66ch;color:var(--muted);margin:18px 0 0;font-size:1.25rem;line-height:1.55}.intro-actions{flex-wrap:wrap;align-items:center;gap:8px 20px;margin-top:24px;display:flex}.primary-action,.intro-secondary-actions a,.resume-link,.project-link,.contact-email,.contact-links a,.site-footer-inner a{align-items:center;min-height:44px;display:inline-flex}.primary-action{border:1px solid var(--accent);background:var(--accent);min-height:48px;color:var(--paper);border-radius:4px;justify-content:center;padding:8px 20px;font-weight:600;text-decoration:none}.primary-action:hover,.primary-action:active{background:var(--accent-hover);color:var(--paper);text-underline-offset:.2em;text-decoration:underline 1px}.primary-action:focus-visible{outline:2px solid var(--accent);outline-offset:5px;box-shadow:0 0 0 3px var(--paper)}.intro-secondary-actions{flex-wrap:wrap;gap:4px 16px;display:flex}.intro-secondary-actions a{padding-inline:4px}.projects-section,.experience-section,.about-section,.contact-section{margin-top:96px;scroll-margin-top:24px}.section-title{font-family:var(--font-sans);letter-spacing:-.02em;margin:0;font-size:clamp(2rem,3.1vw,2.75rem);font-weight:600;line-height:1.15}.section-intro{max-width:62ch;color:var(--muted);margin:12px 0 0}.projects-grid{margin-top:24px;display:block}.project-card{border-top:1px solid var(--rule);grid-template-columns:minmax(0,520fr) minmax(0,656fr);align-items:center;gap:clamp(32px,5vw,72px);min-width:0;padding-block:32px;display:grid}.project-card:last-child{border-bottom:1px solid var(--rule)}.project-cover{margin:0}.project-cover-frame{aspect-ratio:3/2;background:var(--image-mat);border-radius:4px;place-items:center;width:100%;display:grid;position:relative;overflow:hidden}.project-card .project-cover-frame{aspect-ratio:1.95;padding:24px}.project-cover-media{justify-content:center;align-items:center;gap:20px;min-width:0;min-height:0;display:flex;position:absolute;inset:24px}.project-cover-media-image{object-fit:contain;width:auto;min-width:0;max-width:100%;height:auto;max-height:100%;display:block}.project-cover--screens .project-cover-media-image{width:auto;height:100%}.project-cover--equipment .project-cover-media-image:first-child{width:calc(38% - 10px)}.project-cover--equipment .project-cover-media-image:last-child{width:calc(62% - 10px)}.project-cover--interface .project-cover-media-image,.project-cover--diagram .project-cover-media-image{width:100%;height:100%}.project-cover--case .project-cover-frame{aspect-ratio:auto;height:min(32vw,380px);padding:28px}.project-cover--case .project-cover-media{inset:28px}@media (width>=1200px){.project-cover--screens.project-cover--case .project-cover-frame{width:min(100%,800px);height:min(32vw,420px);margin-inline:auto}}.project-cover figcaption{color:var(--muted);margin-top:8px;font-size:.875rem;line-height:1.45}.project-card-copy{min-width:0}.project-period{color:var(--muted);margin:0 0 4px;font-size:.875rem;line-height:1.5}.project-title{font-family:var(--font-sans);letter-spacing:-.015em;margin:0;font-size:clamp(2rem,3vw,2.625rem);font-weight:600;line-height:1.22}.project-role{color:var(--muted);margin:8px 0 0;font-size:.9375rem;line-height:1.5}.project-summary{max-width:38ch;margin:16px 0 0}.project-contribution,.project-stack{margin:12px 0 0;font-size:1rem;line-height:1.5}.project-stack{color:var(--muted)}.project-link{margin-top:16px;font-weight:600}.project-detail{padding-top:32px}.project-back-link{align-items:center;min-height:44px;margin-bottom:24px;display:inline-flex}.project-detail-header{grid-template-columns:minmax(0,1fr) 264px;align-items:start;gap:48px;display:grid}.project-detail-title{font-family:var(--font-sans);letter-spacing:-.04em;margin:0;font-size:clamp(2.75rem,5vw,4.375rem);font-weight:600;line-height:1.08}.not-found h1{font-family:var(--font-serif)}.project-detail-summary{max-width:60ch;margin:18px 0 0;font-size:clamp(1.25rem,1.8vw,1.5rem);line-height:1.4}.project-detail-contribution{max-width:65ch;color:var(--muted);margin:18px 0 0;font-size:1.125rem;line-height:1.5}.project-detail-meta{margin:0;font-size:.9375rem;line-height:1.5;display:block}.project-detail-meta p{margin:0 0 4px}.project-detail-cover{margin-top:40px}.case-reading{grid-template-columns:224px minmax(0,1fr);align-items:start;gap:48px;margin-top:48px;display:grid}.case-reading--full{max-width:976px;margin-inline:auto;display:block}.case-contents{color:var(--muted);font-size:.9375rem;line-height:1.45;position:sticky;top:32px}.case-contents p{color:var(--ink);margin:0 0 12px;font-weight:600}.case-contents ol{margin:0;padding:0;list-style:none}.case-contents li+li{margin-top:8px}.case-contents a{min-height:44px;padding-block:8px;display:inline-block}.case-body{min-width:0;font-size:1.25rem;line-height:1.55}.case-body h2,.case-body h3,.project-external-links h2{font-family:var(--font-sans);letter-spacing:-.02em;font-weight:600;line-height:1.2}.case-body h2{margin:44px 0 12px;font-size:clamp(1.75rem,3.2vw,2.25rem)}.case-body h2:first-child{margin-top:0}.case-body h3{margin:32px 0 8px;font-size:1.5rem}.case-body :is(p,ul,ol,blockquote){max-width:720px}.case-body p{margin:12px 0 0}.case-body ul,.case-body ol{margin:12px 0 0;padding-left:1.4em}.case-body li+li{margin-top:8px}.case-figure{margin:32px 0}.case-figure-media{flex-direction:column-reverse;align-items:flex-start;gap:8px;display:flex}.case-figure img{border-radius:4px;max-width:100%;height:auto;display:block}.case-figure-image--svg{width:100%}.case-figure--portrait{grid-template-columns:minmax(0,300px) minmax(0,1fr);align-items:start;gap:8px 24px;display:grid}.case-figure--portrait .case-figure-media{grid-area:1/1}.case-figure--portrait figcaption{grid-area:2/1/auto/-1}.case-figure--portrait .case-figure-explanation{grid-area:1/2;align-self:center}.case-figure figcaption{max-width:60ch;color:var(--muted);font-size:.9375rem;line-height:1.45}.case-figure-open{font-size:.9375rem;line-height:1.45}.case-figure-explanation{font-size:1rem}.case-gallery{grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;margin-block:32px;display:grid}.case-gallery .case-figure{margin:0;display:block}.case-gallery .case-figure img{object-fit:contain;width:auto;max-height:480px}.case-body blockquote{border-left:2px solid var(--rule);color:var(--muted);margin:20px 0 0;padding-left:20px}.case-body table{border-collapse:collapse;width:100%;max-width:100%;display:block;overflow-x:auto}.case-body th,.case-body td{border-bottom:1px solid var(--rule);text-align:left;vertical-align:top;padding:10px 12px}.case-body th{font-weight:600}.project-external-links{border-top:1px solid var(--rule);margin-top:48px;padding-top:20px}.project-external-links h2{margin:0;font-size:1.5rem}.project-external-links ul{flex-wrap:wrap;gap:8px 24px;margin:8px 0 0;padding:0;list-style:none;display:flex}.project-external-links a,.project-navigation a{align-items:center;min-height:44px;display:inline-flex}.project-navigation{border-top:1px solid var(--rule);grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:24px;margin-top:64px;padding:20px 0 32px;display:grid}.project-navigation-link{flex-direction:column;justify-content:center;text-decoration:none;align-items:flex-start!important}.project-navigation-link span{color:var(--muted);font-size:.875rem}.project-navigation-link strong{color:var(--accent);text-underline-offset:.2em;font-size:1rem;font-weight:600;text-decoration:underline 1px}.project-navigation-previous{grid-column:1;justify-self:start}.project-navigation-all{grid-column:2;justify-self:center}.project-navigation-next{text-align:right;grid-column:3;justify-self:end;align-items:flex-end!important}.not-found{max-width:760px;padding-top:72px}.not-found p{max-width:60ch;color:var(--muted);margin:16px 0 0}.not-found-links{flex-wrap:wrap;gap:8px 24px;margin-top:20px;display:flex}.not-found-links a{align-items:center;min-height:44px;display:inline-flex}.experience-heading-row{justify-content:space-between;align-items:center;gap:24px;margin-bottom:20px;display:flex}.experience-list,.education-list,.contact-links{margin:0;padding:0;list-style:none}.experience-item{border-top:1px solid var(--rule);grid-template-columns:minmax(0,216px) minmax(0,1fr);gap:32px;padding-block:28px;display:grid}.experience-item:last-child{border-bottom:1px solid var(--rule)}.experience-period{color:var(--muted);margin:2px 0 0;font-size:.9375rem;line-height:1.5}.experience-copy h3{margin:0;font-size:1.25rem;font-weight:600;line-height:1.35}.experience-organization{color:var(--muted);margin:2px 0 0;font-size:1rem;line-height:1.5}.experience-summary{max-width:68ch;margin:8px 0 0;font-size:1rem;line-height:1.55}.experience-project-link{align-items:center;min-height:44px;margin-top:4px;font-size:1rem;display:inline-flex}.education-block{border-top:1px solid var(--rule);margin-top:48px;padding-top:24px}.education-heading{margin:0 0 10px;font-size:1.5rem;line-height:1.3}.education-item{grid-template-columns:minmax(0,216px) minmax(0,1fr);gap:32px;padding-block:12px;display:grid}.education-period,.education-credential{margin:0;font-size:1rem;line-height:1.5}.education-period{color:var(--muted)}.about-section{grid-template-columns:minmax(0,320px) minmax(0,720px);justify-content:space-between;align-items:start;gap:36px 64px;display:grid}.about-copy p{max-width:66ch;margin:0}.about-copy p+p{margin-top:24px}.contact-section{border-top:1px solid var(--rule);grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:start;gap:32px 72px;padding-top:32px;display:grid}.contact-copy p{max-width:48ch;color:var(--muted);margin:12px 0 0}.contact-details{flex-direction:column;align-items:flex-start;min-width:0;display:flex}.contact-email{overflow-wrap:anywhere;max-width:100%;font-size:clamp(1.375rem,2.3vw,2rem);font-weight:600}.contact-links{flex-wrap:wrap;gap:4px 16px;margin-top:4px;display:flex}.site-footer{border-top:1px solid var(--rule);margin-top:96px}.site-footer-inner{min-height:72px;color:var(--muted);justify-content:space-between;align-items:center;gap:20px;font-size:.9375rem;display:flex}.site-footer-inner a{flex:none}@media (width>=901px) and (width<=1199px){.page-width{width:calc(100% - 80px)}.case-reading{display:block}.case-contents{margin-bottom:32px;position:static}}@media (width<=900px){.page-width{width:calc(100% - 48px)}.intro{grid-template-columns:minmax(0,1fr) 200px;gap:32px;padding-top:48px}.intro-portrait{width:192px}.project-card,.project-detail-header{grid-template-columns:minmax(0,1fr);gap:24px}.case-reading{margin-top:40px;display:block}.case-contents{margin-bottom:32px;position:static}.case-figure--portrait{grid-template-columns:minmax(0,1fr)}.case-figure--portrait .case-figure-media{grid-row:auto}.case-figure--portrait figcaption,.case-figure--portrait .case-figure-explanation{grid-area:auto/1}.about-section{grid-template-columns:minmax(0,.6fr) minmax(0,1.4fr);gap:32px 48px}.contact-section{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:32px}}@media (width<=760px){.project-card{padding-block:32px}.project-card .project-cover-frame{padding:16px}.project-cover-media{inset:16px}.project-navigation{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px}.project-navigation-all{grid-area:2/1/auto/-1}.about-section{grid-template-columns:minmax(0,1fr);gap:28px}}@media (width<=600px){.page-width{width:calc(100% - 40px)}.intro{grid-template-columns:minmax(0,1fr);gap:0;padding-top:32px}.intro-portrait{width:160px;margin-top:24px}.intro h2{margin-top:20px}.intro-summary{margin-top:14px}.intro-actions{flex-direction:column;align-items:stretch;gap:8px;margin-top:20px}.primary-action{width:100%}.intro-secondary-actions{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.intro-secondary-actions a{text-align:center;justify-content:center;padding-inline:8px}.projects-section,.experience-section,.about-section,.contact-section{margin-top:56px}.projects-grid{gap:36px;margin-top:28px}.project-detail{padding-top:24px}.project-back-link{margin-bottom:20px}.project-detail-cover{margin-top:24px}.project-cover--case .project-cover-frame{height:240px;padding:16px}.project-cover--case .project-cover-media{inset:16px}.case-gallery{grid-template-columns:minmax(0,1fr)}.case-body{margin-top:32px}.project-navigation{margin-top:48px}.not-found{padding-top:48px}.project-title{font-size:2rem}.experience-heading-row{align-items:flex-start;gap:12px}.experience-item{grid-template-columns:minmax(0,1fr);gap:4px;padding-block:18px}.experience-period{margin:0}.education-item{grid-template-columns:minmax(0,1fr);gap:0;padding-block:6px}.contact-section{grid-template-columns:minmax(0,1fr);gap:16px;padding-top:24px}.site-footer{margin-top:56px}.site-footer-inner{flex-direction:column;justify-content:center;align-items:flex-start;gap:0;padding-block:12px}}@media (width<=375px){.intro-secondary-actions{grid-template-columns:minmax(0,1fr)}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition-duration:.01ms!important}}
