@import url('/assets/fonts/fonts.css');
:root{--ink:#102b2c;--deep:#0c2022;--paper:#eeeddf;--cream:#e0e0c8;--orange:#f58b51;--muted:#65716a;--rule:rgba(16,43,44,.2);--serif:'Instrument Serif',Georgia,serif;--sans:Inter,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;--mono:'SFMono-Regular',Consolas,'Liberation Mono',monospace}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:98px}body{margin:0;background:var(--paper);color:var(--ink);font:16px/1.65 var(--sans);-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button,input{font:inherit}button,a{-webkit-tap-highlight-color:transparent}button{cursor:pointer}img{max-width:100%;height:auto;display:block}figure{margin:0}h1,h2,h3,p{margin-top:0}h1,h2,h3{font-weight:400}h1,h2,.serif{font-family:var(--serif)}h1{font-size:clamp(64px,7.5vw,110px);line-height:.97;letter-spacing:-.025em;margin-bottom:28px}h2{font-size:clamp(43px,5vw,68px);line-height:1.06;letter-spacing:-.02em}h3{font-size:24px;line-height:1.3}p{margin-bottom:1.25em}em{font-weight:400}::selection{background:var(--orange);color:var(--ink)}:focus-visible{outline:3px solid #d45c24;outline-offset:5px}section[id]{scroll-margin-top:90px}.wrap{width:min(1220px,calc(100% - 112px));margin:auto}.eyebrow{font:11px/1.7 var(--mono);letter-spacing:.12em;text-transform:uppercase}.muted{color:var(--muted)}.skip-link{position:fixed;top:-80px;left:16px;background:var(--orange);padding:12px 20px;z-index:100}.skip-link:focus{top:12px}.site-header{position:relative;z-index:30;background:var(--deep);color:var(--paper)}.header-inner{height:96px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #ffffff26}.brand{font-size:20px;font-weight:550;letter-spacing:-.06em;display:flex;align-items:center;gap:12px}.monogram{font:40px/1 var(--serif);letter-spacing:-.05em}.monogram b{color:var(--orange);font-weight:400}.brand-name{font-size:14px;font-weight:500;letter-spacing:-.02em}.nav{display:flex;align-items:center;gap:34px;font-size:13px}.nav a{padding:9px 0;transition:color .2s}.nav a:hover{color:var(--orange)}.nav .nav-resume{border:1px solid #ffffff60;border-radius:99px;padding:8px 18px}.menu-toggle{display:none;background:none;border:1px solid #ffffff70;color:inherit;padding:7px 13px;border-radius:3px}.dark{background:var(--deep);color:var(--paper)}.hero{position:relative;overflow:hidden;background:radial-gradient(ellipse at 8% 3%,#78472d40,transparent 44%),radial-gradient(ellipse at 98% 84%,#276b565e,transparent 60%),var(--deep);color:var(--paper)}.hero-grid{min-height:680px;display:grid;grid-template-columns:1.35fr 1fr;gap:80px;align-items:center;padding-top:66px;padding-bottom:70px;position:relative}.hero .eyebrow{color:#c7cabb;margin-bottom:28px}.hero h1 em{color:var(--cream)}.hero-intro{max-width:460px;color:#ced4c8;font-size:16px;line-height:1.75}.hero-intro strong{font-weight:500;color:var(--paper)}.actions{display:flex;gap:25px;align-items:center;flex-wrap:wrap;margin-top:30px}.button{display:inline-flex;justify-content:center;align-items:center;gap:32px;background:var(--orange);color:var(--ink);font-size:13px;font-weight:600;border:1px solid transparent;border-radius:50px;padding:13px 24px;transition:background .2s,transform .2s;line-height:1.5}.button:hover{background:#ffa46e;transform:translateY(-2px)}.button.secondary{background:transparent;border-color:var(--rule);color:var(--ink)}.text-link{display:inline-flex;gap:16px;align-items:center;font-size:13px;font-weight:500;border-bottom:1px solid currentColor;padding-bottom:4px}.text-link:hover{color:#a44921}.dark .text-link:hover,.hero .text-link:hover{color:var(--orange)}.hero-visual{position:relative;max-width:450px;margin:0 0 5px auto;width:100%}.hero-visual:before{content:'';position:absolute;inset:-35px;border:1px solid #c0d7c524;border-radius:50%;transform:rotate(-16deg);pointer-events:none}.hero-photo{height:445px;width:100%;object-fit:cover;object-position:50% 47%;border-radius:180px 180px 4px 4px;filter:saturate(.8)}.hero-visual figcaption{display:flex;justify-content:space-between;gap:12px;margin-top:16px;font:10px/1.6 var(--mono);letter-spacing:.04em;color:#bdc8bc}.visual-index{position:absolute;top:34%;left:-32px;writing-mode:vertical-rl;font:10px var(--mono);letter-spacing:.14em;color:#adbbb0}.hero-foot{border-top:1px solid #ffffff25;padding:20px 0;display:flex;justify-content:space-between;gap:16px;font:10px/1.7 var(--mono);letter-spacing:.08em;text-transform:uppercase;color:#b6c6ba}.status{display:inline-flex;gap:8px;align-items:center}.status:before{content:'';width:6px;height:6px;background:var(--orange);border-radius:50%;flex-shrink:0}.section{padding:104px 0}.section-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:40px;margin-bottom:56px}.section-heading h2{margin:14px 0 0}.section-heading>p{max-width:300px;font-size:14px;color:var(--muted);margin:0 0 5px}.work-row{display:grid;grid-template-columns:1.16fr 1fr;gap:76px;align-items:center;padding:0 0 66px;margin-bottom:66px;border-bottom:1px solid var(--rule)}.work-row:last-child{padding-bottom:0;margin-bottom:0;border-bottom:0}.work-image{overflow:hidden;background:#c9cdbf;position:relative;display:block;isolation:isolate}.work-image img{width:100%;height:430px;object-fit:cover;transition:transform .6s}.work-image.lidar img{object-position:50% 25%}.work-image.rov img{object-position:50% 48%}.work-image:hover img{transform:scale(1.035)}.image-index{position:absolute;left:20px;top:20px;background:var(--paper);color:var(--ink);padding:4px 12px;font:11px/1.8 var(--mono)}.work-copy .eyebrow{color:var(--muted);margin-bottom:18px}.work-copy h3{font:clamp(39px,4vw,57px)/1.04 var(--serif);letter-spacing:-.02em;margin-bottom:24px}.work-copy>p{font-size:15px;max-width:390px}.tags{display:flex;flex-wrap:wrap;gap:8px;margin:25px 0 32px;padding:0;list-style:none}.tags li{font:10px/1.5 var(--mono);border:1px solid var(--rule);border-radius:20px;padding:6px 10px}.project-note{margin:25px 0 0;font:11px/1.7 var(--mono);color:var(--muted)}.about{background:var(--cream)}.about-grid{display:grid;grid-template-columns:1fr 1.05fr;gap:100px}.about h2{margin:20px 0 24px}.about p{font-size:16px}.about-intro{font:30px/1.35 var(--serif)!important}.skill-list{border-top:1px solid var(--rule);margin-top:36px}.skill-item{display:grid;grid-template-columns:40px 1fr;gap:14px;padding:23px 0;border-bottom:1px solid var(--rule)}.skill-item .eyebrow{padding-top:5px;color:var(--muted)}.skill-item h3{font-size:16px;margin:0 0 7px}.skill-item p{font-size:13px;color:#54615a;margin:0}.experience{padding-top:92px;margin-top:80px;border-top:1px solid var(--rule);display:grid;grid-template-columns:.65fr 1.35fr;gap:70px}.experience h2{font-size:45px;margin:15px 0}.experience-item{display:grid;grid-template-columns:145px 1fr;gap:25px;padding:24px 0;border-bottom:1px solid var(--rule)}.experience-item:first-child{padding-top:0}.experience-item time,.experience-item .date{font:10px/1.8 var(--mono);text-transform:uppercase;color:#526158}.experience-item h3{font-size:16px;margin:0 0 3px}.experience-item .company{font-size:12px;color:#637168;margin:0 0 8px}.experience-item p{font-size:13px;margin:0;line-height:1.7}.contact{background:radial-gradient(ellipse at 15% 100%,#24544370,transparent 75%),var(--deep);color:var(--paper);padding:90px 0 45px}.contact-top{display:grid;grid-template-columns:1.25fr 1fr;align-items:center;gap:70px;padding-bottom:65px}.contact h2{margin:17px 0 0;font-size:clamp(49px,6vw,80px)}.contact-copy p{color:#c3ccbd;font-size:14px;max-width:360px}.email-link{font-size:clamp(15px,1.7vw,22px);border-bottom:1px solid #b7c7ba70;padding-bottom:7px;display:inline-flex;gap:22px}.email-link:hover{color:var(--orange)}.footer-line{display:flex;justify-content:space-between;gap:20px;border-top:1px solid #ffffff25;padding-top:27px;font:10px/1.7 var(--mono);color:#b6c6ba}.back-top{white-space:nowrap}.reveal{transition:opacity .65s,transform .65s}.js .reveal.pending{opacity:0;transform:translateY(20px)}.project-hero{padding:50px 0 62px;background:radial-gradient(ellipse at 100% 20%,#295b4545,transparent 70%),var(--deep);color:var(--paper)}.breadcrumb{font:11px/1.7 var(--mono);color:#bac9bf;display:inline-block;margin-bottom:48px}.breadcrumb:hover{color:var(--orange)}.project-title-grid{display:grid;grid-template-columns:1.3fr 1fr;gap:65px;align-items:end}.project-title-grid h1{font-size:clamp(60px,7.5vw,96px);margin:18px 0 0}.project-title-grid .lead{font-size:17px;color:#c8d2c7;max-width:425px;margin-bottom:5px}.project-meta{display:grid;grid-template-columns:repeat(4,1fr);gap:28px;margin-top:54px;padding-top:22px;border-top:1px solid #ffffff30}.project-meta dt{font:10px/1.8 var(--mono);text-transform:uppercase;letter-spacing:.07em;color:#b3c3b7}.project-meta dd{margin:8px 0 0;font-size:13px}.case-layout{display:grid;grid-template-columns:210px minmax(0,1fr);gap:75px;align-items:start;padding-top:70px;padding-bottom:90px}.case-nav{position:sticky;top:35px}.case-nav .eyebrow{margin-bottom:20px}.case-nav a{display:block;font-size:12px;margin-bottom:14px;color:#607167}.case-nav a:hover{color:var(--ink);text-decoration:underline}.case-body{min-width:0}.case-body h2{font-size:46px;margin-bottom:24px}.case-body h3{font-family:var(--serif);font-size:31px}.case-body p{font-size:15px;max-width:730px}.case-section{margin-top:68px;padding-top:56px;border-top:1px solid var(--rule)}.case-section:first-child{margin:0;padding:0;border:0}.case-figure{margin:30px 0}.case-figure img{width:100%;max-height:520px;object-fit:cover}.case-figure.platform img{height:470px;object-position:50% 43%}.case-figure figcaption{font:11px/1.6 var(--mono);color:#627064;margin-top:12px}.two-figures{display:grid;grid-template-columns:1fr 1fr;gap:22px}.two-figures img{height:340px;object-fit:cover}.contribution{padding:28px 30px;background:var(--cream);margin:30px 0}.contribution .eyebrow{margin-bottom:14px}.contribution p{margin:0;font-size:15px}.method-list{list-style:none;padding:0;counter-reset:methods;margin:26px 0}.method-list li{padding:19px 0;border-top:1px solid var(--rule);display:grid;grid-template-columns:34px 1fr;gap:15px;font-size:14px}.method-list li:before{counter-increment:methods;content:'0' counter(methods);font:11px var(--mono);padding-top:5px;color:#68766b}.method-list strong{font-weight:550;display:block;margin-bottom:4px}.result{background:var(--ink);color:var(--paper);padding:34px;margin:30px 0}.result h3{font:39px/1.12 var(--serif);margin:12px 0 20px}.result p{font-size:14px;color:#d0d8ca}.result strong{color:var(--orange);font-weight:500}.result small{font-size:11px;color:#bac9bf;display:block;line-height:1.65;margin-top:20px}.metric-pair{display:grid;grid-template-columns:1fr 1fr;gap:24px;border-top:1px solid #ffffff35;padding-top:23px;margin-top:26px}.metric-pair span{display:block;font:52px/1 var(--serif);color:var(--orange)}.metric-pair p{font-size:11px;margin:8px 0}.chart-image{background:#fff;padding:12px}.chart-image img{object-fit:contain;max-height:none}.detail-list{padding-left:20px;font-size:14px}.detail-list li{padding:4px 0}.note{font-size:13px!important;color:#657064}.project-next{display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--rule);padding-top:35px;margin-top:70px;gap:30px}.project-next .serif{display:block;font-size:34px;line-height:1.2;margin-top:8px}.project-next .arrow{font-size:30px}.timeline{margin:34px 0 0;padding:0;list-style:none}.timeline li{position:relative;padding:0 0 30px 30px;border-left:1px solid #a0ad9f}.timeline li:before{content:'';position:absolute;width:9px;height:9px;background:var(--ink);border-radius:50%;top:5px;left:-5px}.timeline li:first-child:before{background:#b95023;box-shadow:0 0 0 5px #b9502314}.timeline time{font:10px/1.5 var(--mono);text-transform:uppercase;color:#617267}.timeline h3{font:24px/1.3 var(--serif);margin:8px 0}.timeline p{font-size:13px;margin:0;max-width:620px}.viewer-link{background:var(--cream);padding:30px;display:flex;align-items:center;gap:30px;justify-content:space-between;margin-top:28px}.viewer-link p{font-size:13px;margin:5px 0 0}.viewer-link h3{margin:0;font-size:29px}.viewer-link .button{flex-shrink:0}.viewer-page{padding:45px 0 70px}.viewer-page h1{font-size:65px;margin:17px 0}.viewer-intro{display:flex;justify-content:space-between;gap:40px;align-items:end;margin-bottom:30px}.viewer-intro p{max-width:480px;font-size:14px;margin:0}.viewer-shell{border:1px solid var(--rule);background:#e2e4d9;position:relative}.viewer-toolbar{display:flex;align-items:center;justify-content:space-between;gap:15px;padding:15px 20px;background:var(--paper);border-bottom:1px solid var(--rule);flex-wrap:wrap}.viewer-controls{display:flex;gap:9px;flex-wrap:wrap}.tool-button{border:1px solid var(--rule);background:transparent;color:var(--ink);padding:8px 12px;font-size:12px;border-radius:3px}.tool-button:hover:not(:disabled),.tool-button[aria-pressed=true]{background:var(--ink);color:var(--paper)}.tool-button:disabled{opacity:.42;cursor:default}.viewer-stage{height:570px;position:relative;overflow:hidden}.viewer-stage canvas{display:block;width:100%;height:100%;touch-action:none}.viewer-empty{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;pointer-events:none;padding:30px}.viewer-empty h2{font-size:43px;margin:20px 0 10px}.viewer-empty p{font-size:13px;max-width:360px;margin-bottom:24px}.viewer-empty button{pointer-events:auto}.viewer-stage.dragging{outline:3px dashed #b95023;outline-offset:-10px}.viewer-icon{width:65px;height:65px;stroke:#7c8e80;fill:none;stroke-width:1}.viewer-bottom{display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap;padding:15px 20px;font:10px/1.65 var(--mono);border-top:1px solid var(--rule)}.viewer-status{min-height:22px;margin:15px 0;font-size:13px}.viewer-status.error{color:#a03515}.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.help-details{font-size:13px;max-width:800px}.help-details summary{cursor:pointer;padding:15px 0}.help-details p{color:#627063}.file-name{font:11px var(--mono);overflow:hidden;text-overflow:ellipsis;max-width:300px;white-space:nowrap}.viewer-stage[hidden],.viewer-empty[hidden]{display:none}noscript p{padding:10px 20px;background:var(--cream)}
.model-picker{display:flex;gap:12px;margin:22px 0 15px}.model-choice{flex:1;max-width:300px;text-align:left;border:1px solid var(--rule);background:transparent;color:var(--ink);padding:15px 20px;display:flex;flex-direction:column;gap:5px;transition:background .2s}.model-choice>span:last-child{font:27px/1.2 var(--serif)}.model-choice .eyebrow{font-size:9px}.model-choice[aria-pressed=true]{background:var(--ink);color:var(--paper);border-color:var(--ink)}.model-choice[aria-pressed=true] .eyebrow{color:var(--orange)}.model-choice:hover{border-color:var(--ink)}.model-description{font-size:13px;color:#5a6b60;min-height:24px;margin-bottom:20px}.viewer-stage[aria-busy=true] canvas{opacity:.45}.viewer-stage canvas{transition:opacity .2s}.model-project-links{display:flex;gap:12px;flex-wrap:wrap}.model-project-links .button{gap:16px}.case-figure.platform img{object-fit:contain;background:#d9ddd0}
@media(min-width:1450px){.hero-grid{min-height:720px}.hero-photo{height:480px}}
@media(max-width:1100px){.wrap{width:calc(100% - 72px)}.hero-grid{gap:50px;min-height:640px}.hero-photo{height:410px}.work-row{gap:45px}.about-grid{gap:60px}.case-layout{grid-template-columns:160px minmax(0,1fr);gap:40px}.experience{gap:45px}.experience-item{grid-template-columns:115px 1fr;gap:15px}}
@media(max-width:800px){.wrap{width:calc(100% - 44px)}.header-inner{height:80px}.nav{gap:22px}.hero-grid{gap:30px;padding:60px 0;grid-template-columns:1.2fr 1fr;min-height:0}h1{font-size:70px}.hero-photo{height:355px}.hero-intro{font-size:14px}.hero .eyebrow{font-size:9px}.hero-visual:before{inset:-15px}.visual-index{display:none}.hero-visual figcaption{font-size:9px}.section{padding:75px 0}.work-row{gap:30px}.work-image img{height:380px}.work-copy h3{font-size:43px}.work-copy>p{font-size:14px}.about-grid{gap:40px}.experience{grid-template-columns:1fr;gap:30px;padding-top:60px;margin-top:50px}.experience-item{grid-template-columns:145px 1fr}.contact-top{gap:35px;grid-template-columns:1fr 1fr}.project-title-grid{gap:35px}.project-title-grid .lead{font-size:15px}.project-title-grid h1{font-size:70px}.project-meta{grid-template-columns:repeat(2,1fr)}.case-layout{display:block;padding-top:30px}.case-nav{position:static;display:flex;flex-wrap:wrap;gap:8px 20px;border-bottom:1px solid var(--rule);padding-bottom:20px;margin-bottom:40px}.case-nav .eyebrow{width:100%;margin:0}.case-nav a{margin:0}.viewer-intro{display:block}.viewer-intro p{max-width:600px}.viewer-stage{height:500px}}
@media(max-width:600px){.brand-name{font-size:13px}.monogram{font-size:36px}.header-inner{height:74px}.menu-toggle{display:block;font-size:12px}.nav{position:absolute;top:74px;left:0;right:0;background:var(--deep);padding:22px;display:none;flex-direction:column;align-items:stretch;border-bottom:1px solid #ffffff40;gap:10px}.nav.open{display:flex}.nav .nav-resume{align-self:flex-start;margin-top:6px}.hero-grid{display:flex;flex-direction:column;align-items:stretch;gap:48px;padding:48px 0 34px}.hero h1{font-size:76px;max-width:430px}.hero-intro{font-size:15px;max-width:420px}.hero .eyebrow{font-size:10px;margin-bottom:25px}.hero-visual{margin:0 auto;max-width:330px}.hero-photo{height:360px;border-radius:150px 150px 3px 3px}.hero-visual:before{inset:-14px -11px}.hero-visual figcaption{font-size:9px}.hero-foot{font-size:9px;flex-wrap:wrap;gap:5px}.hero-foot>span:last-child{display:none}.actions{gap:22px}.section{padding:60px 0}.section-heading{display:block;margin-bottom:35px}.section-heading h2{font-size:47px}.section-heading>p{margin-top:20px;max-width:330px}.work-row{grid-template-columns:1fr;gap:30px;padding-bottom:44px;margin-bottom:44px}.work-image img{height:360px}.work-image.lidar img{object-position:50% 30%}.work-copy h3{font-size:47px;margin-bottom:20px}.work-copy>p{font-size:15px;max-width:none}.tags{margin:23px 0}.about-grid{grid-template-columns:1fr;gap:20px}.about h2{font-size:50px}.about-intro{font-size:28px!important}.skill-list{margin-top:5px}.experience{margin-top:44px;padding-top:40px}.experience-item{grid-template-columns:1fr;gap:7px}.experience-item .date{font-size:10px}.contact{padding:65px 0 28px}.contact-top{grid-template-columns:1fr;gap:32px;padding-bottom:45px}.contact h2{font-size:61px}.contact-copy p{font-size:14px}.email-link{font-size:18px}.footer-line{font-size:9px;gap:15px;flex-wrap:wrap}.project-hero{padding:32px 0 38px}.breadcrumb{margin-bottom:35px}.project-title-grid{grid-template-columns:1fr;gap:25px}.project-title-grid h1{font-size:70px}.project-title-grid .lead{font-size:16px}.project-meta{margin-top:35px;gap:22px}.project-meta dd{font-size:12px}.case-layout{padding-bottom:65px}.case-section{margin-top:42px;padding-top:40px}.case-body h2{font-size:41px}.case-figure.platform img{height:370px}.case-figure figcaption{font-size:10px}.contribution{padding:24px}.result{padding:25px}.result h3{font-size:34px}.metric-pair{gap:15px}.metric-pair span{font-size:44px}.two-figures{gap:14px}.two-figures img{height:250px}.viewer-link{padding:25px;align-items:flex-start;flex-direction:column;gap:20px}.project-next .serif{font-size:30px}.viewer-page{padding-top:35px}.viewer-page h1{font-size:58px}.viewer-toolbar{padding:13px}.viewer-controls{gap:6px}.tool-button{font-size:11px;padding:8px 10px}.viewer-stage{height:420px}.viewer-empty h2{font-size:37px}.viewer-bottom{padding:13px;font-size:9px;gap:6px}.file-name{max-width:170px}}
@media(max-width:600px){.hero h1{font-size:clamp(56px,15.4vw,72px)}.model-choice{padding:13px}.model-choice>span:last-child{font-size:25px}.model-choice .eyebrow{font-size:8px}.model-description{font-size:12px}.model-project-links .button{font-size:12px;padding:11px 15px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}.js .reveal.pending{opacity:1;transform:none}}
