:root{--ink:#141414;--paper:#fff;--line:#d6d6d6;--red:#ef493c;--muted:#626262}*{box-sizing:border-box}body{margin:0;color:var(--ink);background:var(--paper);font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.6}a{color:inherit;text-decoration:none}a:hover{text-decoration:underline;text-underline-offset:5px}a:focus-visible{outline:3px solid #1875e8;outline-offset:6px}.wrap{width:min(1280px,calc(100% - 96px));margin:auto}header{background:#080808;color:#fff;border-bottom:1px solid #333}.nav{min-height:102px;display:flex;align-items:center;justify-content:flex-end;gap:32px}.brand{font-weight:900;font-size:36px;display:flex;align-items:center;gap:20px;letter-spacing:-2px}.brand>span{border-left:1px solid #555;padding-left:20px;font-size:13px;line-height:1.6;letter-spacing:1px}.brand small{font-size:10px;color:#aaa}nav{display:flex;gap:34px;align-items:center}nav a{font-weight:bold;padding:34px 0;border-bottom:3px solid transparent}nav a[aria-current]{border-color:var(--red)}nav .linkedin{color:#bcbcbc;font-weight:400;margin-left:24px}.hero{background:#101113;color:white;padding:64px 0 52px}.hero-grid{display:grid;grid-template-columns:1.05fr 1fr;gap:70px;align-items:stretch}.eyebrow{font-size:12px;letter-spacing:2px;font-weight:700;margin:0 0 28px}.hero .eyebrow{color:#b2b4b8}h1,h2,h3,p{margin-top:0}h1{font-size:clamp(64px,7.3vw,104px);line-height:.99;letter-spacing:-5px;margin-bottom:28px}h2{font-size:clamp(32px,4vw,52px);line-height:1.1;letter-spacing:-1.7px;margin-bottom:24px}h3{line-height:1.2}.period{color:var(--red)}.intro{font-size:25px;line-height:1.3;margin-bottom:22px;font-weight:600}.hero-copy{max-width:420px;color:#b8bbc1;line-height:1.7}.action{display:inline-flex;align-items:center;gap:28px;font-weight:bold;margin:15px 0 30px}.action span,.text-link span{background:var(--red);color:#fff;border-radius:50%;width:28px;height:28px;display:inline-grid;place-items:center}.graphic{background:#e2e4e5;position:relative;min-height:280px;color:#64676a;display:flex;align-items:center;justify-content:center;overflow:hidden}.hero-graphic{background:#262a30;color:#969da6;min-height:480px;border:1px solid #3b4047}.graphic-top,.graphic-bottom{position:absolute;left:24px;right:24px;font-family:monospace;font-size:12px;letter-spacing:1px}.graphic-top{top:21px}.graphic-bottom{bottom:20px;display:flex;justify-content:space-between}.cross{font-size:34px;font-weight:200;opacity:.65}.hero-bottom{display:flex;justify-content:space-between;border-top:1px solid #383a3e;margin-top:52px;padding:20px 0;font-family:monospace;font-size:12px;letter-spacing:2px;color:#a7a9ad}.about{display:grid;grid-template-columns:1fr 2fr;gap:70px;padding-top:88px;padding-bottom:88px}.about>div{max-width:710px}.about p:not(.eyebrow){color:#565656;font-size:18px}.text-link{font-weight:bold;display:inline-flex;align-items:center;gap:14px}.section-head{display:flex;align-items:end;justify-content:space-between;gap:24px;margin-bottom:28px}.section-head h2{margin:0}.selected{padding-bottom:96px}.project-row{display:grid;grid-template-columns:46px 1fr 190px 28px;gap:20px;padding:29px 0;border-top:1px solid var(--line);align-items:center}.project-row:last-child{border-bottom:1px solid var(--line)}.project-row>span{font-family:monospace;font-size:12px;color:var(--muted)}.project-row h3{font-size:23px;margin:0}.project-row b{font-size:25px;color:var(--red)}footer{border-top:1px solid var(--line);padding-top:40px;padding-bottom:30px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:20px}footer strong{font-size:24px}footer p{font-size:14px;color:var(--muted)}.fine{flex-basis:100%;font-size:10px;letter-spacing:1px;color:var(--muted)}.skip{position:absolute;left:10px;top:-100px;background:white;color:black;padding:10px;z-index:9}.skip:focus{top:10px}.page-top{background:#101113;color:white;padding:64px 0}.page-top h1{font-size:76px;letter-spacing:-3px;margin-bottom:22px}.page-top p:last-child{color:#b8bbc1;max-width:650px;margin-bottom:0;font-size:18px}.project-grid{display:grid;grid-template-columns:1fr 1fr;gap:56px 32px;padding-top:56px;padding-bottom:88px}.card h2{font-size:30px;margin:14px 0;letter-spacing:-.8px}.card .eyebrow{margin:22px 0 0;color:var(--muted)}.card p{color:var(--muted);max-width:520px}.card:nth-child(2n) .graphic{background:#d9dee5}.resume-layout,.detail-layout{display:grid;grid-template-columns:230px 1fr;gap:70px;padding-top:56px;padding-bottom:80px}.side p{color:var(--muted);font-size:14px}.side a{display:block;margin:10px 0}.resume-section{border-top:1px solid var(--line);padding:28px 0}.resume-section h2,.detail-layout h2{font-size:32px}.resume-section h3{font-size:23px;margin:24px 0 8px}.resume-section h4{font-size:18px;margin:26px 0 8px}.resume-section li,.detail-layout li{margin:10px 0;color:#444}.resume-section ul,.detail-layout ul{padding-left:20px}.download{background:var(--red);display:inline-flex;padding:12px 20px;color:#fff;font-weight:bold;gap:24px;margin-top:20px}.detail-visual{margin-top:48px}.detail-visual .graphic{min-height:390px}.back{font-size:14px;display:inline-block;margin-bottom:30px;color:#bbb}.detail-title{max-width:970px}.detail-title h1{font-size:clamp(40px,5.5vw,74px);line-height:1.05}.pubs a{color:#1555a0;text-decoration:underline}.source-note{font-size:14px!important;color:#666}.skills{display:flex;gap:8px;flex-wrap:wrap}.skills span{background:#eee;padding:7px 12px;font-size:14px}@media(max-width:800px){.wrap{width:calc(100% - 40px)}.nav{flex-wrap:wrap;padding-top:18px;gap:10px}.brand{font-size:28px}.brand>span{font-size:11px}.brand small{font-size:9px}nav{gap:25px;width:100%;justify-content:space-between}nav a{padding:13px 0;font-size:14px}nav .linkedin{margin:0}.hero{padding:40px 0 30px}.hero-grid{grid-template-columns:1fr;gap:20px}h1{letter-spacing:-3px}.hero-graphic{min-height:300px}.hero-bottom{font-size:10px;letter-spacing:.6px;gap:18px;margin-top:30px}.about{grid-template-columns:1fr;gap:0;padding:50px 0}.section-head{align-items:start;flex-direction:column}.project-row{grid-template-columns:25px 1fr 24px;gap:10px}.project-row>span:nth-of-type(2){display:none}.project-row h3{font-size:20px}.selected{padding-bottom:50px}.project-grid{grid-template-columns:1fr;gap:40px}.page-top{padding:45px 0}.page-top h1{font-size:55px}.resume-layout,.detail-layout{grid-template-columns:1fr;gap:24px}.detail-visual .graphic{min-height:270px}footer{padding-top:30px}.detail-title h1{font-size:42px}}

.hero-grid{grid-template-columns:.9fr 1.15fr;gap:40px}
.hero-photo{display:block;width:100%;height:auto;aspect-ratio:4/3;object-fit:cover;object-position:55% center;align-self:center;min-width:0}
@media(max-width:800px){.hero-grid{grid-template-columns:1fr;gap:20px}}

.side a{overflow-wrap:anywhere}.publication-row{display:grid;grid-template-columns:30px 1fr 24px;align-items:center;gap:20px;border-top:1px solid var(--line);padding:24px 0}.publication-row:last-child{border-bottom:1px solid var(--line)}.publication-row h3{font-size:22px;margin:0;line-height:1.35}.publication-row>span:first-child{font-family:monospace;font-size:12px;color:var(--muted)}.publication-row>span:last-child{color:var(--red);font-size:25px}@media(max-width:800px){.publication-row{gap:12px}.publication-row h3{font-size:19px}}

.project-photo{display:block;width:min(100%,700px);max-width:100%;height:auto;margin:0 auto}.header-role{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px 20px;margin:0 0 26px}.header-role .role-location{padding-left:20px;border-left:1px solid #626262}@media(max-width:600px){.header-role{display:grid;gap:6px}.header-role .role-location{padding-left:0;border-left:0}}.header-role .eyebrow{margin:0;color:#b8bbc1}.header-role>span:last-child{color:#b8bbc1}.page-top .project-summary{color:#b8bbc1;max-width:650px;font-size:18px}.flight-detail{display:block;max-width:970px}.flight-detail>div{max-width:850px}

.project-figure{margin:40px auto;max-width:800px}.project-figure img{display:block;width:100%;height:auto}.project-figure figcaption{font-size:14px;line-height:1.6;color:var(--muted);margin-top:14px}.project-figure figcaption strong{color:var(--ink)}

.project-figure video{display:block;width:100%;max-height:560px;background:#101113}

.card-photo{display:block;width:100%;height:280px;object-fit:cover;object-position:center}

.project-section{margin-top:40px;padding-top:28px;border-top:1px solid var(--line)}.project-section>.project-figure{margin-top:24px}.project-section>h2{margin-bottom:24px}

.track-figure{max-width:480px}

/* Shared image and video captions. */
.project-figure figcaption{margin-top:0;padding:16px 20px;border-left:3px solid var(--red);background:#f3f4f5;color:#42464b;font-size:15px;line-height:1.65;letter-spacing:.01em}
.project-figure figcaption strong{display:block;margin-bottom:5px;font-family:monospace;font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:#25282c}
@media(max-width:600px){.project-figure figcaption{padding:13px 16px;font-size:14px}}

.project-figure figcaption strong.testing-label{display:inline;margin:0;font-family:inherit;font-size:inherit;letter-spacing:inherit;text-transform:none;font-weight:700}

.lead-figure{max-width:700px;margin:0 auto}.project-purpose{margin-bottom:36px}.project-purpose p{color:#444;line-height:1.7}

/* Resume hierarchy mirrors the downloadable resume. */
.resume-position{position:relative;padding-left:1.25rem}.resume-position::before{content:"";position:absolute;left:0;top:.45em;width:.5rem;height:.5rem;background:#ef493c}.resume-dates{font-weight:400;font-size:.65em;white-space:nowrap}.resume-project{margin-left:1.25rem}.resume-bullets{padding-left:2.5rem}.resume-layout .side a{overflow-wrap:anywhere}

.resume-layout .side .resume-section{margin-top:1.5rem;padding:1.5rem 0 0}.resume-layout .side .resume-section h2{font-size:1.25rem;line-height:1.35;letter-spacing:normal}.resume-layout .side .resume-section h4{font-size:1rem;margin-top:1.25rem}.resume-layout .side .resume-section p:not(.eyebrow){font-size:1rem}.resume-layout .side .skills{display:flex;flex-wrap:wrap;gap:.4rem}.resume-layout .side .skills span{font-size:.875rem}

.resume-layout .resume-position{letter-spacing:normal;word-spacing:normal}

.resume-layout p.resume-project{margin-left:0}

.mini-gallery{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;margin:24px 0 36px}.mini-gallery .project-figure{width:100%;max-width:none;margin:0}.mini-gallery img{display:block;width:100%;height:340px;object-fit:contain;background:#f3f4f5}.mini-gallery figcaption{font-size:14px}.mini-lead{max-width:850px;margin:0 auto}.mini-credit{font-size:14px;color:#555}@media(max-width:700px){.mini-gallery{grid-template-columns:1fr}.mini-gallery img{height:auto;max-height:440px}}

.card-photo.mini-card-photo{object-fit:contain;background:#e9eaee}

/* Flight project: introduction and payload share the header. */
.flight-header-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:clamp(32px,5vw,72px);align-items:center}
.flight-header-copy{min-width:0}
.flight-header h1{font-size:clamp(40px,4.3vw,64px);line-height:1.05;letter-spacing:-.035em;overflow-wrap:normal}
.flight-header .lead-figure{width:100%;max-width:none;margin:0}
.flight-header .project-photo{width:100%;height:auto}
@media(max-width:800px){.flight-header-grid{grid-template-columns:1fr;gap:32px}.flight-header h1{font-size:clamp(38px,8vw,60px)}}

.project-figure .caption-more{display:block;width:fit-content;margin-top:10px;font-weight:700;text-decoration:underline;text-underline-offset:3px}

.site-brand{display:flex;flex-shrink:0;margin-right:auto}.site-brand img{display:block;width:48px;height:48px}@media(max-width:600px){.site-brand img{width:36px;height:36px}.nav{column-gap:14px}}

/* Featured project and role labels on the projects index. */
.card .card-role{color:var(--ink);font-weight:700;margin:0 0 12px}
.featured-card{grid-column:1 / -1;display:grid;grid-template-columns:1.15fr 1fr;gap:40px;align-items:center;padding-bottom:40px;border-bottom:1px solid #d9d9d9}
.featured-card .card-photo{height:auto;aspect-ratio:1.45;object-fit:cover}
.featured-card .eyebrow{margin-top:0}
.featured-card h2{font-size:clamp(30px,3.2vw,44px);line-height:1.12}
@media(max-width:760px){.featured-card{grid-template-columns:1fr;gap:24px;padding-bottom:32px}.featured-card h2{font-size:30px}}

/* Editorial captions: quiet text beneath each image or video. */
.project-figure figcaption{border:0;background:transparent;padding:0;margin-top:12px;color:#595d63;font-size:14px;line-height:1.6;letter-spacing:normal;text-align:left}
.project-figure figcaption strong{display:inline;margin:0;font-family:inherit;font-size:inherit;font-weight:600;letter-spacing:normal;text-transform:none;color:inherit}
.page-top .project-figure figcaption{color:#b8bbc1}

.link-arrow{display:inline-block;width:.85em;height:.85em;vertical-align:-.05em;flex-shrink:0}.action span .link-arrow,.text-link span .link-arrow{width:17px;height:17px}
