:root{color-scheme:dark;--paper:#141a17;--ink:#e6e9df;--muted:#a7afa3;--accent:#b4cea4;--line:#344037;--serif:'Instrument Serif',Georgia,'Times New Roman',serif;--sans:'DM Sans',Arial,sans-serif;--mono:'DM Mono',Consolas,monospace}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:105px}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:15px;line-height:1.7;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button{font:inherit}button,a{-webkit-tap-highlight-color:transparent}button{cursor:pointer}img,svg{display:block;max-width:100%}img{height:auto}h1,h2,h3,p,figure{margin:0}h1,h2{font-weight:400}p+p{margin-top:16px}h1,h2{font-family:var(--serif);line-height:1.03;letter-spacing:-.035em}h2{font-size:clamp(42px,4.7vw,64px)}h3{font-weight:550;line-height:1.35;letter-spacing:-.025em}em{font-weight:400;color:var(--accent)}::selection{background:#4a6145;color:#edf2e7}:focus-visible{outline:2px solid var(--accent);outline-offset:6px}a,button{touch-action:manipulation}[hidden]{display:none!important}.section-shell{width:min(1200px,calc(100% - 112px));margin-inline:auto}.eyebrow{font-family:var(--mono);font-size:10px;line-height:1.6;letter-spacing:.11em;text-transform:uppercase;color:var(--muted)}.skip-link{position:fixed;top:-80px;left:20px;z-index:100;background:var(--ink);color:var(--paper);padding:10px 20px}.skip-link:focus{top:15px}.site-header{width:min(1320px,calc(100% - 80px));margin:auto;display:flex;align-items:center;justify-content:space-between;padding:25px 0;border-bottom:1px solid var(--line);min-height:95px}.identity{display:flex;align-items:center;gap:15px;font-weight:550;font-size:13px;line-height:1.4;letter-spacing:-.015em}.identity-note{display:block;font-size:10px;color:var(--muted);font-weight:400;margin-top:3px;letter-spacing:.015em}.monogram{font-family:var(--serif);font-size:43px;line-height:1;letter-spacing:-.12em;padding-right:5px}.monogram span{color:var(--accent)}nav{display:flex;align-items:center;gap:30px;font-size:12px}nav a{position:relative}nav a:after{position:absolute;bottom:-6px;left:0;right:0;height:1px;background:var(--accent);content:'';transform:scaleX(0);transform-origin:left;transition:transform .2s}nav a:hover:after,nav a[aria-current]:after{transform:scaleX(1)}nav .nav-cv{border:1px solid #465444;border-radius:3px;padding:8px 18px;display:flex;gap:22px}nav .nav-cv:after{display:none}.menu-toggle{display:none}.hero{display:grid;grid-template-columns:1.1fr 1fr;gap:6%;padding-top:74px;padding-bottom:65px;align-items:center}.hero-copy>.eyebrow{display:flex;gap:13px;align-items:center}.small-cross{font-size:21px;color:var(--accent);line-height:1}.hero h1{font-size:clamp(65px,7.65vw,106px);margin:25px 0 28px;line-height:.97;letter-spacing:-.04em}.hero-intro{font-size:19px;line-height:1.6;max-width:470px;letter-spacing:-.02em}.hero-detail{font-size:14px;color:var(--muted);max-width:430px;line-height:1.8;margin-top:17px}.hero-actions{display:flex;gap:30px;align-items:center;margin-top:30px}.button{min-height:48px;padding:13px 22px;display:inline-flex;align-items:center;justify-content:space-between;gap:28px;border-radius:3px;font-size:12px;font-weight:500;transition:background .2s,transform .2s}.button:hover{transform:translateY(-2px)}.button-dark{background:var(--accent);color:var(--paper)}.button-dark:hover{background:#d0dfbd}.text-link{font-size:12px;font-weight:550;display:inline-flex;align-items:center;gap:18px}.text-link:hover{color:var(--accent)}.text-link span{transition:transform .2s}.text-link:hover span{transform:translate(2px,-2px)}.hero-caption{font-family:var(--mono);font-size:9px;color:var(--muted);margin-top:36px;display:flex;gap:9px;align-items:center;letter-spacing:.02em}.status-dot{height:6px;width:6px;background:var(--accent);border-radius:50%}.motion-study{background:#1c2820;border:1px solid #364735;border-radius:3px;color:#a6be98;position:relative;overflow:hidden}.figure-heading{font-family:var(--mono);font-size:8px;letter-spacing:.07em;display:flex;justify-content:space-between;padding:19px 20px 0;color:#adbd9f}.motion-plot{width:100%;padding:0 8px}.trajectories{stroke-width:1.9}.trajectory.one{stroke:#c0d7ab}.trajectory.two{stroke:#759d7d}.trajectory.three{stroke:#b9a57d}.plot-labels{font-family:var(--mono);font-size:12px}.motion-study figcaption{border-top:1px solid #354734;margin:0 20px;display:flex;justify-content:space-between;padding:15px 0;font-family:var(--mono);font-size:8px;color:#adbd9f;gap:10px}.motion-study figcaption>span:first-child{display:flex;align-items:center;gap:7px}.motion-study figcaption i{display:inline-block;background:var(--accent);width:5px;height:5px;border-radius:50%}.hero-person{display:flex;align-items:center;gap:14px;padding:21px 0 0}.hero-person img{opacity:.9;width:53px;height:53px;border-radius:50%;object-fit:cover;filter:saturate(.5);border:1px solid #455341}.hero-person p{font-size:12px;line-height:1.55}.hero-person strong{font-weight:550}.person-note{margin-left:auto;font-family:var(--serif);font-style:italic;font-size:17px;line-height:1.25;color:var(--muted)}.focus-strip{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:25px 0;border-block:1px solid var(--line);font-size:12px}.focus-strip>.eyebrow{font-size:8px}.focus-strip>span:not(:first-child){display:flex;align-items:center;gap:22px}.focus-strip>span:not(:first-child):before{content:'+';color:#7a9674;font-family:var(--mono);font-size:13px}.work-section{padding-top:95px;padding-bottom:95px}.section-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:35px;margin-bottom:42px}.section-heading h2{margin-top:15px}.section-heading>p{font-size:13px;color:var(--muted);line-height:1.7;padding-bottom:4px}.project-toolbar{display:flex;justify-content:space-between;align-items:center;border-block:1px solid var(--line);margin-bottom:30px;padding:14px 0;gap:20px}.filters{display:flex;flex-wrap:wrap;gap:8px}.filter{border:0;color:var(--muted);background:transparent;padding:7px 14px;font-size:11px;border-radius:3px;min-height:35px;transition:background .2s,color .2s}.filter span{font-family:var(--mono);font-size:9px;margin-left:8px;opacity:.65}.filter.active{color:var(--paper);background:var(--accent)}.filter:not(.active):hover{background:#29392c;color:var(--ink)}.project-count{font-family:var(--mono);font-size:9px;color:var(--muted);white-space:nowrap}.project-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:42px 30px}.project-image{display:block;position:relative;aspect-ratio:1.8;overflow:hidden;border-radius:3px;background:#243026}.project-image>img{width:100%;height:100%;object-fit:cover;transition:transform .6s}.project-image:hover>img{transform:scale(1.035)}.project-image>svg{height:100%;width:100%}.quad-visual{background:#173d2e}.image-index{position:absolute;bottom:17px;left:20px;font-family:var(--mono);font-size:8px;letter-spacing:.08em;color:var(--ink);background:var(--paper);padding:4px 8px;border-radius:2px}.image-arrow{position:absolute;top:15px;right:16px;display:grid;place-items:center;background:var(--paper);width:29px;height:29px;border-radius:50%;color:var(--ink);font-size:16px;transition:transform .2s}.project-image:hover .image-arrow{transform:rotate(45deg)}.lander-visual{background:#080b1a}.lander-visual>img{object-fit:contain;padding:12px 0 20px}.mapping-visual>img{filter:invert(.88) hue-rotate(165deg) saturate(.5);mix-blend-mode:screen;object-fit:contain;padding:18px 18px 35px;background:#212c24}.project-body{padding-top:20px}.project-kind{font-family:var(--mono);font-size:9px;color:var(--accent);letter-spacing:.025em}.project-body h3{font-size:22px;margin-top:7px}.project-body h3 a{display:flex;align-items:center;justify-content:space-between;gap:12px}.project-body h3 a span{font-family:var(--sans);font-size:16px;color:var(--muted);flex-shrink:0}.project-body h3 a:hover{color:var(--accent)}.project-body>p:not(.project-kind){font-size:13px;line-height:1.8;color:var(--muted);margin-top:10px;max-width:510px}.tags{padding:0;margin:15px 0 0;list-style:none;display:flex;flex-wrap:wrap;gap:7px}.tags li{font-family:var(--mono);font-size:8px;border:1px solid #3d4a3c;border-radius:3px;padding:3px 8px;color:var(--muted)}.gesture-visual{background:#312d25;display:flex;align-items:center;justify-content:center}.gesture-symbols{font-size:66px;line-height:1;font-family:'Segoe UI Emoji',sans-serif;letter-spacing:9px;filter:saturate(.1)}.gesture-symbols>span{position:relative;z-index:1}.detection-box{position:absolute;width:105px;height:145px;border:1px solid #a9c998;top:50%;left:50%;transform:translate(-50%,-50%);border-radius:2px}.detection-box>span{position:absolute;top:-17px;left:-1px;color:var(--accent);font-family:var(--mono);font-size:7px;white-space:nowrap;letter-spacing:.03em}.pipeline-visual{display:flex;align-items:center;justify-content:center;background:#242e2e}.pipeline-mini{display:flex;align-items:center;gap:14px;position:relative;z-index:1}.pipeline-mini>span{border:1px solid #657d72;padding:23px 15px;background:#2c3e32;font-family:var(--mono);font-size:9px;letter-spacing:.04em;border-radius:3px}.pipeline-mini>i{font-style:normal;color:#b5c5af}.pipeline-line{position:absolute;width:68%;height:160px;border:1px dashed #64755d;top:50%;transform:translateY(-50%);border-radius:80px;opacity:.5}.privacy-visual{background:#2c2b23;color:#c5b38a}.privacy-visual svg{padding:7px 0 24px}.all-repos{margin-top:35px;border-bottom:1px solid #53674d;padding-bottom:5px}.engineering-section{background:#1b2c22;color:#e8ede1}.engineering-inner{display:grid;grid-template-columns:1fr 1.15fr;gap:13%;padding-block:75px}.engineering-section .eyebrow{color:#bfd4ad}.engineering-intro h2{font-size:clamp(45px,5.5vw,70px);margin:20px 0 25px}.engineering-intro h2 em{color:#d2e1bc}.engineering-intro>p:not(.eyebrow){font-size:13px;color:#b8c6ae;line-height:1.9;max-width:370px}.engineering-role{display:block;font-family:var(--mono);font-size:9px;color:#b8cfaa;letter-spacing:.02em;margin-top:26px}.engineering-details article{display:flex;gap:24px;padding:24px 0;border-bottom:1px solid #3d533b}.engineering-details article:first-child{padding-top:0}.engineering-details article>span{font-family:var(--mono);font-size:10px;color:#b8cda7;padding-top:3px}.engineering-details h3{font-size:18px}.engineering-details p{font-size:12px;color:#b8c6ae;margin-top:8px;line-height:1.8}.engineering-stack{list-style:none;padding:0;margin:22px 0 0;display:flex;flex-wrap:wrap;gap:8px 19px;font-family:var(--mono);font-size:9px;color:#c1d2b2}.experience-section{padding-block:95px}.timeline{border-top:1px solid var(--line);margin-top:45px}.timeline-row{display:grid;grid-template-columns:220px 1fr;gap:40px;border-bottom:1px solid var(--line);padding:29px 0}.timeline-date{font-family:var(--mono);font-size:11px;color:#bfccb5;padding-top:3px}.timeline-date span{display:block;font-size:9px;color:#9cae92;margin-top:7px}.timeline-row h3{font-size:20px}.organization{font-size:11px;color:var(--accent);margin-top:5px}.timeline-row p:not(.organization){font-size:13px;color:var(--muted);max-width:750px;margin-top:13px;line-height:1.8}details{margin-top:14px;font-size:12px}summary{cursor:pointer;color:var(--accent);width:fit-content;padding:4px 0}summary:hover{text-decoration:underline}.publication{margin-top:35px;background:#202d23;border-left:2px solid #9ab689;display:flex;align-items:center;justify-content:space-between;gap:30px;padding:25px 30px}.publication h3{font-size:19px;margin-top:10px;max-width:700px}.publication p:not(.eyebrow){font-size:12px;line-height:1.8;color:var(--muted);max-width:720px;margin-top:10px}.publication>a{flex-shrink:0}.about-section{display:grid;grid-template-columns:.78fr 1.22fr;gap:10%;padding-block:45px 100px;align-items:start}.about-photo{margin-top:8px;position:relative}.about-photo img{aspect-ratio:4/5;object-fit:cover;object-position:50% 45%;filter:saturate(.35);width:100%;border-radius:3px}.photo-caption{display:block;margin-top:13px;font-family:var(--mono);font-size:8px;color:var(--muted);letter-spacing:.1em}.about-copy h2{margin:14px 0 25px}.about-copy>p:not(.eyebrow){font-size:13px;color:var(--muted);line-height:1.9}.education-note{border-block:1px solid var(--line);padding:24px 0;margin-top:30px}.education-note h3{font-size:17px;margin-top:11px}.education-note>p:not(.eyebrow){font-size:11px;color:var(--muted);margin-top:5px}.education-stats{display:flex;gap:38px;margin-top:20px}.education-stats>span{font-size:9px;color:var(--muted)}.education-stats strong{display:block;font-size:27px;color:var(--ink);font-weight:450;line-height:1.4;letter-spacing:-.04em}.education-stats small{font-size:13px;color:var(--muted);font-weight:400;letter-spacing:0}.about-copy .languages{font-family:var(--mono);font-size:8px!important;margin-top:15px}.contact-section{border-top:1px solid var(--line);padding-block:55px 50px}.contact-main{display:grid;grid-template-columns:1.2fr 1fr;gap:10%;margin-top:20px;align-items:center}.contact-main h2{font-size:clamp(50px,6.2vw,84px)}.contact-main>div>p:first-child{font-size:13px;color:var(--muted);max-width:350px}.contact-email{font-family:var(--serif);font-size:37px;display:inline-flex;align-items:center;gap:35px;border-bottom:1px solid #627958;line-height:1.3;margin-top:18px}.contact-email span{font-size:28px}.contact-email:hover{color:var(--accent)}.copy-email{display:block;padding:9px 0;background:transparent;border:0;font-family:var(--mono);font-size:9px;color:var(--muted);margin-top:7px}.copy-email span{margin-left:10px}.copy-email:hover{color:var(--accent)}.copy-status{min-height:18px;font-family:var(--mono);font-size:9px;color:var(--accent);overflow-wrap:anywhere;margin-top:0}.contact-links{display:flex;gap:33px;border-top:1px solid var(--line);padding-top:22px;margin-top:35px;font-size:11px}.contact-links a:hover{color:var(--accent);text-decoration:underline}.site-footer{width:min(1320px,calc(100% - 80px));margin-inline:auto;border-top:1px solid var(--line);padding:24px 0;display:flex;justify-content:space-between;gap:20px;font-family:var(--mono);font-size:8px;color:var(--muted)}.site-footer>a:first-child{color:var(--ink)}.site-footer a:hover{color:var(--accent)}.cv-page{padding-block:75px 80px}.cv-page h1,.not-found h1{font-size:clamp(65px,7vw,95px);margin-top:15px}.cv-page .section-heading{align-items:center;margin-bottom:20px}.cv-intro{color:var(--muted);font-size:16px;line-height:1.7}.cv-facts{display:grid;grid-template-columns:repeat(3,1fr);gap:30px;border-block:1px solid var(--line);margin-top:35px;padding-block:25px}.cv-facts h2{font-family:var(--sans);font-size:18px;font-weight:550;line-height:1.5;margin:10px 0}.cv-facts p:not(.eyebrow){font-size:12px;color:var(--muted)}.pdf-heading{display:flex;align-items:center;justify-content:space-between;margin:40px 0 20px}.pdf-heading h2{font-size:34px}.cv-document{color-scheme:light;width:100%;height:850px;border:1px solid var(--line);background:white}.cv-fallback{font-size:12px;color:var(--muted)}.cv-fallback a{text-decoration:underline}.not-found{padding-block:100px 130px}.not-found p:not(.eyebrow){max-width:500px;margin:28px 0}.not-found .button{margin-top:10px}.sitemap-links{padding-left:20px;margin-top:35px}.sitemap-links a{text-decoration:underline}
@media(min-width:1400px){.hero{padding-block:85px 75px}.hero h1{font-size:110px}}
@media(max-width:1050px){.section-shell{width:calc(100% - 72px)}.site-header,.site-footer{width:calc(100% - 48px)}.hero{gap:4%;padding-block:55px}.hero h1{font-size:clamp(61px,8vw,85px)}.hero-intro{font-size:17px}.hero-detail{font-size:13px}.hero-actions{gap:20px}.hero-caption{font-size:8px}.figure-heading{font-size:7px;padding-inline:14px}.motion-study figcaption{font-size:7px;margin-inline:14px}.person-note{font-size:14px}.hero-person p{font-size:10px}.hero-person img{opacity:.9;width:44px;height:44px}.focus-strip{gap:10px;font-size:10px}.focus-strip>span:not(:first-child){gap:12px}.focus-strip>.eyebrow{max-width:100px}.project-body h3{font-size:20px}.engineering-inner{gap:8%}.timeline-row{grid-template-columns:170px 1fr;gap:20px}.about-section{gap:7%}.publication{align-items:flex-start;flex-direction:column;gap:15px}.pipeline-mini{gap:8px}.pipeline-mini>span{font-size:8px;padding:18px 11px}.gesture-symbols{font-size:54px}.detection-box{width:85px;height:120px}.education-stats{gap:25px}}
@media(max-width:760px){html{scroll-padding-top:30px}.section-shell{width:calc(100% - 40px)}.site-header,.site-footer{width:calc(100% - 40px)}.site-header{min-height:85px;padding:18px 0;position:relative;flex-wrap:wrap}.identity{font-size:11px;gap:12px}.identity-note{font-size:9px}.monogram{font-size:38px}.js-enabled .menu-toggle{display:flex;gap:15px;align-items:center;padding:9px 0 9px 14px;background:none;border:0;font-size:11px}.menu-toggle>span{font-size:20px;color:var(--accent);line-height:1}.menu-toggle[aria-expanded=true]>span{transform:rotate(45deg)}nav{display:flex;width:100%;padding-top:22px;gap:0;flex-direction:column;align-items:stretch}.js-enabled nav:not(.is-open){display:none}nav.is-open{display:flex}nav a{padding:12px 0;border-top:1px solid var(--line)}nav a:after{display:none}nav .nav-cv{padding:12px 0;border:0;border-top:1px solid var(--line);border-radius:0;justify-content:space-between}.hero{grid-template-columns:1fr;gap:35px;padding-block:40px}.hero h1{font-size:clamp(63px,12.7vw,95px);margin:22px 0}.hero-intro{font-size:18px;max-width:500px}.hero-detail{font-size:13px;max-width:470px}.hero-actions{gap:27px;margin-top:25px}.hero-caption{margin-top:25px}.hero-visual{max-width:530px;width:100%;margin:auto}.motion-plot{max-height:360px}.motion-study figcaption{font-size:8px}.figure-heading{font-size:8px}.hero-person img{opacity:.9;width:49px;height:49px}.hero-person p{font-size:11px}.person-note{font-size:16px}.focus-strip{flex-wrap:wrap;justify-content:flex-start;gap:15px 25px;padding-block:22px;font-size:11px}.focus-strip>.eyebrow{width:100%;max-width:none;font-size:8px}.work-section{padding-block:60px}.section-heading{align-items:flex-start;flex-direction:column;gap:18px;margin-bottom:28px}.section-heading>p{font-size:12px}.section-heading h2{margin-top:12px}h2{font-size:49px}.project-toolbar{align-items:flex-start;gap:10px;padding-block:12px}.filters{gap:4px}.filter{font-size:10px;padding:7px 9px}.filter span{margin-left:3px}.project-count{font-size:8px;padding-top:10px}.project-grid{gap:32px 20px}.project-image{aspect-ratio:1.55}.project-body{padding-top:15px}.project-body h3{font-size:18px}.project-body>p:not(.project-kind){font-size:12px}.project-kind{font-size:8px}.tags li{font-size:7px;padding:3px 6px}.image-index{left:10px;bottom:10px;font-size:6px}.image-arrow{width:25px;height:25px;top:10px;right:10px}.gesture-symbols{font-size:36px;letter-spacing:0}.detection-box{width:56px;height:88px}.detection-box>span{font-size:5px;top:-12px}.pipeline-mini{gap:4px}.pipeline-mini>span{font-size:5px;padding:17px 6px}.pipeline-mini>i{font-size:10px}.pipeline-line{height:100px}.engineering-inner{grid-template-columns:1fr;gap:35px;padding-block:50px}.engineering-intro h2{font-size:60px;margin-block:15px 20px}.engineering-intro>p:not(.eyebrow){max-width:550px}.engineering-details article{gap:20px}.experience-section{padding-block:60px}.timeline{margin-top:30px}.timeline-row{grid-template-columns:130px 1fr;gap:17px;padding-block:23px}.timeline-date{font-size:9px}.timeline-row h3{font-size:18px}.timeline-row p:not(.organization){font-size:12px}.organization{font-size:10px}.publication{padding:22px}.publication h3{font-size:18px}.about-section{grid-template-columns:1fr;gap:35px;padding-block:10px 55px}.about-photo{max-width:350px;width:72%}.about-photo img{aspect-ratio:1.05;object-position:50% 36%}.about-copy h2{font-size:57px}.about-copy>p:not(.eyebrow){font-size:13px}.education-stats{gap:45px}.contact-section{padding-block:35px}.contact-main{grid-template-columns:1fr;gap:25px}.contact-main h2{font-size:63px}.contact-main>div>p:first-child{max-width:390px}.contact-email{font-size:34px}.contact-links{gap:25px;flex-wrap:wrap;font-size:10px;margin-top:20px}.site-footer{flex-wrap:wrap;font-size:7px;gap:15px}.site-footer>span{order:3;width:100%}.cv-page{padding-block:45px}.cv-page h1{font-size:65px}.cv-page .section-heading{align-items:flex-start}.cv-facts{grid-template-columns:1fr;gap:22px}.cv-document{color-scheme:light;height:650px}.not-found{padding-block:60px}.not-found h1{font-size:62px}}
@media(max-width:480px){.project-grid{grid-template-columns:1fr;gap:32px}.project-image{aspect-ratio:1.8}.project-body h3{font-size:22px}.project-body>p:not(.project-kind){font-size:13px}.project-kind{font-size:9px}.image-index{font-size:8px;left:16px;bottom:15px}.gesture-symbols{font-size:55px;letter-spacing:7px}.detection-box{width:87px;height:123px}.detection-box>span{font-size:6px}.pipeline-mini{gap:9px}.pipeline-mini>span{font-size:8px;padding:20px 10px}.pipeline-mini>i{font-size:13px}.tags li{font-size:8px}.project-toolbar{display:block}.project-count{padding:5px 0 0 9px}.timeline-row{grid-template-columns:1fr;gap:10px}.timeline-date{display:flex;justify-content:space-between}.timeline-date span{margin:0}.hero-actions{gap:24px}.hero-actions .button{padding-inline:18px;gap:22px}.hero-person{gap:12px}.person-note{font-size:15px}.education-stats{gap:30px}.contact-links{gap:22px}.contact-main h2{font-size:59px}.focus-strip{gap:12px 18px}.focus-strip>span:not(:first-child){gap:7px}.focus-strip>span{font-size:10px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{transition:none!important;animation:none!important}}
@media print{:root{--paper:white;--ink:#111;--muted:#444;--accent:#234e3d;--line:#ccc;color-scheme:light}body{background:white;font-size:11px}.site-header nav,.menu-toggle,.hero-actions,.filters,.project-count,.copy-email,.motion-study,.contact-section,.site-footer{display:none}.section-shell{width:100%}.hero,.about-section,.engineering-inner{display:block}.hero-visual{display:none}.hero h1{font-size:55px}.hero,.work-section,.experience-section,.engineering-inner,.about-section{padding-block:20px}.project-grid{gap:20px}.project-image{max-height:140px}.project{break-inside:avoid}.engineering-section{background:white;color:var(--ink)}.engineering-section p,.engineering-section .eyebrow,.engineering-section h2 em{color:var(--ink)}.about-photo{display:none}.timeline-row{padding-block:12px}.cv-document{color-scheme:light;height:950px}.button{border:1px solid #888;color:black;background:white}.project-body a:after{content:none}}

.cv-details{margin-top:48px}.cv-details>section{display:grid;grid-template-columns:220px 1fr;gap:18px 40px;border-top:1px solid var(--line);padding:30px 0}.cv-details h2{font-size:35px;grid-row:1}.cv-details>section>:not(h2){grid-column:2}.cv-details article+article{margin-top:13px}.cv-details h3{font-size:18px;line-height:1.5}.cv-details p:not(.organization){font-size:13px;color:var(--muted);margin-top:10px;line-height:1.8}.cv-details .text-link{margin-top:12px}.cv-tool-grid{display:grid;grid-template-columns:1fr 1fr;gap:25px}.cv-tool-grid article+article{margin-top:0}.cv-bottom{border-top:1px solid var(--line);padding-top:25px;display:flex;gap:25px;flex-wrap:wrap}.cv-bottom p{width:100%;font-size:13px;color:var(--muted)}
@media(max-width:760px){.cv-details>section{grid-template-columns:1fr;gap:20px}.cv-details h2{grid-row:auto;font-size:34px}.cv-tool-grid{gap:25px 20px}.cv-details h3{font-size:17px}.cv-details>section>article+article{margin-top:4px}}
@media(max-width:480px){.cv-tool-grid{grid-template-columns:1fr}}

.publication-type{font-family:var(--mono);font-size:9px;color:var(--accent);white-space:nowrap;line-height:1.9}.case-study{padding-block:55px 80px}.case-study>.eyebrow{margin-top:45px}.case-study h1{font-size:clamp(65px,7.4vw,100px);margin:18px 0 25px}.case-intro{font-size:18px;max-width:680px;color:var(--muted)}.case-study>.tags{margin-top:24px}.case-figure{margin-block:40px;background:#202b23;padding:35px;border:1px solid var(--line);border-radius:3px}.case-figure img{max-height:550px;width:auto;margin:auto;filter:invert(.88) hue-rotate(165deg) saturate(.5);mix-blend-mode:screen}.case-figure figcaption{margin-top:24px;font-family:var(--mono);font-size:10px;color:var(--muted)}.case-content{max-width:850px;margin-bottom:35px}.case-content section{display:grid;grid-template-columns:180px 1fr;gap:15px 40px;padding-block:25px;border-top:1px solid var(--line)}.case-content h2{font-size:35px;grid-row:1}.case-content section>:not(h2){grid-column:2}.case-content p,.case-content li{font-size:14px;color:var(--muted);line-height:1.9}.case-content ol{margin:0;padding-left:18px}.case-content li+li{margin-top:12px}.case-content strong{font-weight:550;color:var(--ink)}
@media(max-width:760px){.case-study{padding-block:35px 55px}.case-content section{grid-template-columns:1fr;gap:20px}.case-content h2{grid-row:auto}.case-intro{font-size:16px}.case-figure{padding:20px}.case-figure figcaption{font-size:9px}.case-content p,.case-content li{font-size:13px}}

@media(max-width:760px){.cv-details>section>:not(h2),.case-content section>:not(h2){grid-column:auto}}

/* Workshop after dark: copper light, tactile panels, and room to play. */
:root{--paper:#111615;--ink:#eee9dd;--muted:#adb4aa;--accent:#e4ac72;--line:#354039}
body{background-image:radial-gradient(ellipse at 80% 5%,#223a2b77,transparent 32%),radial-gradient(ellipse at 0% 60%,#563a1d18,transparent 25%)}
.site-header{border-bottom-style:dashed}.monogram span{color:#e4ac72}.hero{grid-template-columns:1.05fr 1fr;gap:5%;padding-block:65px 60px}.hero h1{font-family:var(--sans);font-weight:550;font-size:clamp(48px,5.15vw,74px);letter-spacing:-.065em;line-height:1.07;margin:27px 0}.hero h1 em{font-family:var(--serif);font-weight:400;font-size:1.28em;letter-spacing:-.035em;line-height:1.15}.hero-copy>.eyebrow{font-size:9px}.hero-intro{font-size:18px;max-width:470px}.hero-detail{max-width:430px}.hero-caption{letter-spacing:.05em}.button{border-radius:0}.button-dark{box-shadow:4px 4px 0 #e4ac7226}.hero-visual{transform:rotate(1deg)}.hero-person{transform:rotate(-1deg)}.hero-person img{width:65px;height:65px;border-radius:4px;filter:saturate(.7)}.hero-person p{font-size:12px}.person-note{color:#c8b496}.rover-console{border:1px solid #536044;background:#1a241e;box-shadow:12px 16px 0 #070c0980;position:relative;padding:16px}.rover-console:before,.rover-console:after{content:'+';position:absolute;color:#86967a;font:14px var(--mono);top:3px}.rover-console:before{left:4px}.rover-console:after{right:4px}.console-top{display:flex;justify-content:space-between;gap:10px;font:8px var(--mono);letter-spacing:.1em;color:#bac5a8;padding:8px 2px 17px}.console-top i{display:inline-block;width:5px;height:5px;border-radius:50%;background:#d6b776;margin-right:7px;box-shadow:0 0 10px #d6b776}.rover-stage{position:relative;background:#121c17;overflow:hidden;border:1px solid #344835}.rover-stage canvas{display:block;width:100%;height:auto;aspect-ratio:1.25;cursor:crosshair;touch-action:pan-y}.map-caption{position:absolute;top:17px;left:18px;right:18px;display:flex;justify-content:space-between;font:8px/1.7 var(--mono);letter-spacing:.1em;color:#a7b29b;pointer-events:none}.map-compass{text-align:center;font-size:13px}.console-readout{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:14px 0 11px;font:8px var(--mono);color:#d8b78e}.console-readout button{background:none;border:0;border-bottom:1px solid #5b6950;color:#b1bca6;font:8px var(--mono);padding:5px 0}.rover-destinations{display:grid;grid-template-columns:repeat(3,1fr);gap:5px}.rover-destinations button{border:1px solid #45583e;background:#263325;color:#d0d8c4;font:8px var(--mono);padding:11px 5px;transition:background .2s}.rover-destinations button:hover,.rover-destinations button[aria-pressed=true]{background:#d9ad78;color:#1b241b}.rover-console>a{display:flex;justify-content:space-between;align-items:center;font-size:12px;padding:13px 1px 7px;color:#e7c49b}.rover-console figcaption{font:7px var(--mono);color:#a5ae9a;padding-top:6px}.focus-strip{border-block-style:dashed}.work-section .section-heading{align-items:center}.project{transition:transform .25s}.project:hover{transform:translateY(-5px)}.project-image{border-radius:0;border:1px solid #ffffff18}.project-body h3{letter-spacing:-.04em}.image-index{background:#121b15;color:#e2c69f;transform:rotate(-2deg);border:1px solid #77836955}.image-arrow{background:#e4ac72;color:#18231a}.engineering-section{position:relative;border-block:1px solid #486044;background:linear-gradient(120deg,#1b3023,#18241e)}.engineering-section:before{content:'SYSTEMS / ALWAYS IN PROGRESS';display:block;font:9px var(--mono);letter-spacing:.2em;color:#98ad85;padding:18px 5%;border-bottom:1px dashed #486044}.timeline-row{transition:background .2s,padding .2s}.timeline-row:hover{background:#9fba8710;padding-inline:12px}.about-photo{transform:rotate(-3deg);padding:12px 12px 33px;background:#d7ceba;box-shadow:9px 12px 0 #060c0980}.about-photo img{border-radius:0;filter:saturate(.65)}.photo-caption{color:#494c3f}.about-photo:after{content:'the human, not the résumé';position:absolute;bottom:8px;left:12px;font:italic 16px var(--serif);color:#4c4c3e}.photo-caption{display:none}.off-duty{padding-block:35px 100px}.personal-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:22px}.personal-card{position:relative;border:1px solid #3e473b;padding:22px;background:#1a221c;overflow:hidden}.personal-card .eyebrow{color:#c3a67f;font-size:8px}.personal-card h3{font-family:var(--serif);font-weight:400;font-size:32px;margin:12px 0}.personal-card p:not(.eyebrow){font-size:12px;line-height:1.9;color:var(--muted)}.personal-footnote{display:block;font:8px/1.7 var(--mono);margin-top:23px;color:#c3a67f;border-top:1px dashed #566049;padding-top:14px}.campfire,.cinema-art,.record-art{height:200px;margin:-22px -22px 23px;position:relative;overflow:hidden}.campfire{background:radial-gradient(ellipse at 50% 90%,#b45d2444,transparent 65%),#121b16}.sword{width:5px;height:89px;background:linear-gradient(90deg,#858f82,#d1c5a3,#6f796a);position:absolute;left:50%;bottom:22px;transform:rotate(12deg);z-index:2}.sword:before{content:'';position:absolute;width:35px;height:5px;background:#bda572;left:-15px;top:20px}.sword:after{content:'';position:absolute;width:7px;height:18px;background:#7f6b49;left:-1px;top:0}.flame{width:40px;height:63px;position:absolute;bottom:14px;left:calc(50% - 18px);background:linear-gradient(0deg,#e6b56d,#ad552b88,transparent);border-radius:80% 10% 60% 30%;filter:blur(2px);animation:flicker 2.8s ease-in-out infinite alternate;box-shadow:0 0 50px #ce702b44}.camp-ground{position:absolute;bottom:11px;left:25%;width:50%;height:16px;border-radius:50%;border-bottom:2px solid #8b6b40}.ember{position:absolute;width:3px;height:3px;background:#edac68;bottom:30px;left:50%;animation:embers 4s linear infinite}.ember-two{left:45%;animation-delay:-1.5s}.ember-three{left:57%;animation-delay:-3s}.cinema-art{background:#1b1b18;display:grid;place-items:center}.cinema-frame{width:86%;height:135px;border-block:17px solid #080d0b;background:linear-gradient(140deg,#7b6c4c55,#202e29);display:grid;place-items:center;position:relative}.cinema-frame:after{content:'';position:absolute;inset:-17px 0;border-block:3px dashed #6b6b50;opacity:.5}.cinema-frame span{font:10px/1.9 var(--mono);letter-spacing:.2em;text-align:center;color:#ded6be}.cinema-frame em{font:italic 25px var(--serif);letter-spacing:.02em}.frame-counter{position:absolute;bottom:10px;font:7px var(--mono);color:#a39a80}.record-art{background:#182322;display:grid;place-items:center}.record{height:145px;width:145px;border-radius:50%;background:repeating-radial-gradient(circle,#111916 0 3px,#344039 4px,#101813 5px 7px);box-shadow:0 0 35px #0007;display:grid;place-items:center;animation:record-spin 22s linear infinite}.record>span{width:42px;height:42px;border:16px solid #ae8358;border-radius:50%;background:#101916}.record-line{height:90px;width:4px;background:#b4b29d;position:absolute;top:22px;right:22%;transform:rotate(25deg);transform-origin:top}.record-caption{position:absolute;bottom:9px;font:7px var(--mono);letter-spacing:.1em;color:#adb6a5}.contact-section{border-top-style:dashed}.contact-main h2 em{color:#e4ac72}.site-footer{border-top-style:dashed}
@keyframes flicker{to{transform:scale(.8,1.15) skew(-8deg);opacity:.7}}@keyframes embers{to{transform:translate(20px,-100px);opacity:0}}@keyframes record-spin{to{transform:rotate(360deg)}}
@media(max-width:1050px){.hero h1{font-size:clamp(44px,5.5vw,65px)}.console-top{font-size:7px}.console-readout{font-size:7px}.rover-destinations button{font-size:7px}.personal-grid{gap:13px}.personal-card{padding:17px}.personal-card h3{font-size:27px}.campfire,.cinema-art,.record-art{margin:-17px -17px 20px}}
@media(max-width:760px){.hero{grid-template-columns:1fr;padding-block:40px;gap:40px}.hero h1{font-size:clamp(43px,8.5vw,65px)}.hero h1 em{font-size:1.2em}.hero-visual{width:calc(100% - 10px);max-width:530px}.hero-intro{font-size:17px}.console-readout{font-size:8px}.rover-destinations button{font-size:8px}.console-top{font-size:8px}.personal-grid{grid-template-columns:1fr}.personal-card{display:grid;grid-template-columns:1fr 1.2fr;gap:0 22px;padding:20px}.campfire,.cinema-art,.record-art{grid-row:1/6;height:100%;min-height:240px;margin:-20px 0 -20px -20px}.personal-card .personal-footnote{font-size:7px}.off-duty{padding-bottom:60px}.about-photo{margin-left:10px}.rover-console{padding:12px}.hero-person{padding-top:25px}.hero-person p{font-size:11px}}
@media(max-width:480px){.personal-card{display:block;padding:22px}.campfire,.cinema-art,.record-art{height:200px;min-height:0;margin:-22px -22px 23px}.hero-copy>.eyebrow{font-size:7px}.hero h1{font-size:43px}.hero-person img{width:52px;height:52px}.person-note{font-size:14px}.rover-destinations button{font-size:7px}.console-top{font-size:7px}.console-readout{font-size:7px}.console-readout button{font-size:7px}}
@media(prefers-reduced-motion:reduce){.hero-visual,.hero-person,.about-photo{transform:none}.project:hover{transform:none}}
/* Green circuitry: a visual language drawn from sensors, control, and data. */
:root{--accent:#a1df98;--line:#385641}.technical-atmosphere{position:fixed;inset:0;z-index:-1;overflow:hidden;pointer-events:none;background:radial-gradient(650px circle at var(--pointer-x,75%) var(--pointer-y,20%),#408d4429,transparent 70%),linear-gradient(125deg,#0c1712,#121c17 48%,#0d1712)}body{isolation:isolate;background:transparent}.circuit-field{position:absolute;inset:0;opacity:.22;background-image:linear-gradient(90deg,#64a46d25 1px,transparent 1px),linear-gradient(#64a46d25 1px,transparent 1px);background-size:75px 75px;mask-image:linear-gradient(90deg,black,transparent 60%,black)}.circuit-field:after{content:'';position:absolute;right:-120px;top:-80px;width:700px;height:700px;border:1px solid #81ca6d77;transform:rotate(35deg);box-shadow:0 0 0 40px #72b16308,0 0 0 80px #72b16308,0 0 0 120px #72b16308,0 0 0 160px #72b16308}.radar-field{position:absolute;width:780px;height:780px;left:-470px;top:30%;border-radius:50%;background:repeating-radial-gradient(circle,transparent 0 69px,#99dc7130 70px,transparent 71px);opacity:.6}.ambient-orbit{position:absolute;right:-320px;bottom:-300px;width:900px;height:900px;border-radius:50%;border:1px dashed #95cc6255;background:conic-gradient(from 0deg,transparent 80%,#6ccc4714);animation:atmosphere-orbit 65s linear infinite}.reading-progress{position:fixed;top:0;left:0;width:var(--read-progress,0%);height:2px;background:#a8e995;box-shadow:0 0 14px #81ef8f;z-index:20}.icon-definitions{position:absolute;width:0;height:0;overflow:hidden}.work-icon{width:25px;height:25px;flex-shrink:0;display:inline-block;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round;stroke-linejoin:round;vertical-align:middle}.focus-strip>span:not(:first-child):before{display:none}.focus-strip .work-icon{color:#9adf91;width:23px;height:23px}.hero h1 em,.contact-main h2 em{color:#afe99a}.hero .button-dark{background:#a4de91;box-shadow:5px 5px 0 #7da95633}.hero{position:relative}.hero:before{content:'';position:absolute;left:-60px;top:140px;height:200px;width:2px;background:linear-gradient(transparent,#7cbf66,transparent)}.hero-copy>.eyebrow{color:#a6ca9d}.rover-console{border-color:#6e9b5b;background:linear-gradient(135deg,#29412a,#13251c);box-shadow:12px 16px 0 #060e0980,0 0 85px #4f9a3420}.console-readout,.rover-console>a{color:#b9e6a9}.rover-destinations button:hover,.rover-destinations button[aria-pressed=true]{background:#a5d68d}.project{position:relative;perspective:900px;padding:10px;margin:-10px;border:1px solid transparent;border-radius:9px;background:radial-gradient(400px circle at var(--card-x,50%) var(--card-y,0%),#88ce6420,transparent 70%);transition:border-color .25s,box-shadow .25s,transform .25s}.project:hover,.project:focus-within{border-color:#71a65a77;box-shadow:0 20px 55px #0005}.project-image{transform:perspective(900px) rotateX(var(--tilt-x,0deg)) rotateY(var(--tilt-y,0deg));transition:transform .2s,border-color .2s;will-change:transform;border-radius:5px}.project:hover .project-image{border-color:#abda77}.project-emblem{position:absolute;z-index:2;top:26px;left:26px;background:#0d221bdd;border:1px solid #7cbb6b88;border-radius:10px;padding:9px;color:#b5ed9c;pointer-events:none;box-shadow:0 0 20px #599d3233}.project-emblem .work-icon{width:25px;height:25px}.image-arrow{background:#a9db90}.image-index{left:auto;right:15px;bottom:14px}.engineering-details h3,.timeline-row h3{display:flex;align-items:center;gap:13px}.engineering-details h3 .work-icon,.timeline-row h3 .work-icon{color:#a7dd8e;width:24px;height:24px}.engineering-section{background:radial-gradient(ellipse at 0% 50%,#4b7d3244,transparent 60%),linear-gradient(120deg,#172d21eb,#10251aee);overflow:hidden}.engineering-section:after{content:'';position:absolute;right:-60px;bottom:-180px;width:500px;height:500px;border:1px solid #7ca96b44;border-radius:50%;box-shadow:0 0 0 45px #8fc77609,0 0 0 90px #8fc77609;pointer-events:none}.engineering-inner{position:relative;z-index:1}.timeline-row:hover{border-color:#87b96d}.personal-card{background:radial-gradient(350px circle at var(--card-x,50%) var(--card-y,0%),#6eaf4525,transparent),#16251be8;border-radius:7px}.personal-emblem{position:absolute;top:16px;left:16px;z-index:3;color:#c0dfad;background:#10231cdd;border:1px solid #6d9755;padding:7px;border-radius:7px}.personal-emblem svg{width:21px;height:21px}.signal-lab{padding-block:65px 25px}.lab-heading{display:flex;justify-content:space-between;align-items:flex-end;gap:30px;margin-bottom:30px}.lab-heading h2{margin-top:13px}.lab-modes{display:flex;gap:6px;flex-wrap:wrap}.lab-modes button{background:#15271c;border:1px solid #46683b;border-radius:5px;color:#b5c6aa;display:flex;align-items:center;gap:8px;padding:11px 13px;font-size:10px}.lab-modes .work-icon{width:19px;height:19px}.lab-modes button[aria-pressed=true]{background:#a1d88a;color:#12251a;border-color:#c6eda8;box-shadow:0 0 25px #80c85722}.lab-surface{position:relative;border:1px solid #527543;background:linear-gradient(135deg,#193021eb,#10221ae8);border-radius:9px;overflow:hidden;box-shadow:0 25px 90px #0004}.lab-surface:before{content:'LIVE SKETCH / NOT PRODUCTION TELEMETRY';position:absolute;top:15px;left:20px;font:7px var(--mono);letter-spacing:.1em;color:#96bb88}.signal-links{stroke-width:2;stroke-dasharray:5 7}.signal-return{opacity:.3}.signal-packets{fill:#d4ff9b;filter:drop-shadow(0 0 7px #9cff8e)}.lab-nodes circle{transition:fill .3s,stroke .3s,filter .3s}.lab-nodes circle.active{fill:#345531;stroke:#d1ffad;filter:drop-shadow(0 0 13px #b2ff6355)}.lab-controls{display:flex;justify-content:space-around;padding:0 10% 22px;gap:10px}.lab-controls button{color:#a6c69b;background:#12291c;border:1px solid #4a6940;border-radius:4px;font:10px var(--mono);padding:10px 18px}.lab-controls button[aria-pressed=true]{color:#dbffc9;border-color:#add18c;background:#385832}.lab-explainer{display:grid;grid-template-columns:150px 1fr 200px;gap:30px;align-items:start;padding:24px 5px}.lab-explainer>span{font:10px var(--mono);color:#a9e890}.lab-explainer p{font-size:13px;color:#c1ccb8;line-height:1.8;min-height:48px}.lab-explainer a{font-size:11px;color:#a6df8e;justify-self:end}.lab-note{font:8px var(--mono);color:#8ba17d;border-top:1px dashed #435a39;padding-top:13px}.privacy-visual svg{transition:filter .3s,transform .4s}.privacy-visual:hover svg{filter:drop-shadow(0 0 10px #9eee7f);transform:scale(1.08)}.pipeline-mini span{position:relative;overflow:hidden}.pipeline-mini span:after{content:'';position:absolute;inset:0;background:linear-gradient(100deg,transparent,#b5f78d33,transparent);transform:translateX(-100%);animation:packet-shine 4s ease-in-out infinite}.pipeline-mini span:nth-of-type(2):after{animation-delay:.7s}.pipeline-mini span:nth-of-type(3):after{animation-delay:1.4s}.quad-visual>svg{transition:transform .4s}.quad-visual:hover>svg{transform:scale(1.06) rotate(2deg)}
@keyframes atmosphere-orbit{to{transform:rotate(360deg)}}@keyframes packet-shine{50%,100%{transform:translateX(100%)}}
@media(max-width:1050px){.lab-heading{align-items:flex-start;flex-direction:column;gap:23px}.lab-explainer{grid-template-columns:120px 1fr;gap:20px}.lab-explainer a{grid-column:2;justify-self:start}.focus-strip .work-icon{width:18px;height:18px}}
@media(max-width:760px){.signal-lab{padding-top:40px}.lab-controls{padding:0 10px 15px}.lab-controls button{font-size:8px;padding:8px 12px}.lab-explainer{grid-template-columns:1fr;gap:10px}.lab-explainer a{grid-column:1}.lab-modes button{font-size:9px;padding:9px}.lab-surface:before{font-size:5px;left:10px;top:8px}.project-emblem{padding:6px;top:20px;left:20px}.project-emblem .work-icon{width:20px;height:20px}.radar-field{opacity:.3}.focus-strip>span:not(:first-child){gap:7px}.technical-atmosphere{background:radial-gradient(ellipse at top right,#22452b77,transparent 65%),#101a14}.timeline-row h3 .work-icon{width:21px;height:21px}}
@media(prefers-reduced-motion:reduce){.project-image{transform:none!important}.ambient-orbit,.pipeline-mini span:after{animation:none}.signal-packets{display:none}}
