@font-face{font-family:Inter;src:url('/fonts/InterVariable.woff2') format('woff2');font-weight:100 900;font-display:swap}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:100px}body{margin:0;color:#292b27;background:#eeede7;font-family:Inter,Arial,sans-serif;font-size:16px;line-height:1.65}a{color:inherit;text-underline-offset:5px}img{max-width:100%;display:block}button{font:inherit}figure{margin:0}h1,h2,h3,p{margin-top:0}h1,h2,h3{font-weight:450;line-height:1.06;letter-spacing:-.055em}h1{font-size:clamp(48px,6.5vw,96px)}h2{font-size:clamp(38px,4.6vw,68px)}h3{font-size:clamp(30px,3vw,44px)}p{line-height:1.75}.eyebrow,figcaption,.hero-note,.footer-bottom,.tags,.project-role{font-family:monospace;font-size:11px;letter-spacing:.08em;text-transform:uppercase}.eyebrow{margin-bottom:30px}.site-header{height:88px;padding:0 4vw;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #cccac1;background:#eeede7;position:sticky;top:0;z-index:10}.brand{font-size:25px;letter-spacing:-1.2px;font-weight:650;text-decoration:none}.brand-dot{font-size:10px;margin-left:13px;color:#8b4936;vertical-align:middle}.site-header nav{display:flex;gap:30px}.site-header nav a{font-size:13px;text-decoration:none}.site-header nav a:hover{text-decoration:underline}.menu-toggle{display:none}.hero{display:grid;grid-template-columns:1fr 1fr;min-height:720px}.hero-copy{padding:60px 4vw 28px;display:flex;flex-direction:column;align-items:flex-start}.hero h1{margin:24px 0 30px;font-size:clamp(62px,6.7vw,110px);line-height:1.03}.hero em{font-style:normal;color:#8b4936}.hero-copy>p{max-width:390px;font-size:16px}.text-link{display:inline-flex;align-items:center;justify-content:space-between;gap:40px;text-decoration:none;border-bottom:1px solid currentColor;padding:12px 0;font-size:14px}.text-link:hover{color:#8b4936}.text-link span{font-size:20px}.hero-note{display:flex;justify-content:space-between;width:100%;margin-top:auto;padding-top:50px;font-size:9px}.hero-image{position:relative;min-height:100%;overflow:hidden}.hero-image img{width:100%;height:100%;position:absolute;object-fit:cover;object-position:50% 44%}.hero-image figcaption{position:absolute;bottom:0;left:0;right:0;color:white;padding:55px 24px 22px;background:linear-gradient(transparent,#0009);font-size:9px}.section-pad{padding:95px 6vw}.section-heading{margin-bottom:65px}.section-heading>p{max-width:560px}.about{background:#3d443f;color:#f1f0e8}.about-grid{display:grid;grid-template-columns:1fr 1.5fr;gap:9vw;align-items:start}.portrait{width:100%;max-height:500px;object-fit:cover;object-position:center 30%}.bio p{margin-bottom:28px;font-size:17px}.projects{background:#eeede7}.project-row{border-top:1px solid #c6c5bb;padding:46px 0;display:grid;grid-template-columns:1.15fr 1fr;gap:7vw;align-items:center}.project-image{display:block;overflow:hidden;background:#deded5}.project-image img{width:100%;height:380px;object-fit:cover;transition:transform .35s}.project-row:nth-of-type(2) .project-image img,.project-row:nth-of-type(4) .project-image img{object-fit:contain}.project-image:hover img{transform:scale(1.025)}.project-copy .eyebrow{color:#686b5f;margin-bottom:20px}.project-copy h3{margin-bottom:14px}.project-copy h3 a{text-decoration:none}.project-role{font-size:10px;color:#686b5f;margin-bottom:20px}.project-copy p:not(.project-role){font-size:15px;max-width:490px}.experience{background:#dfdfd5;display:grid;grid-template-columns:1fr 1.15fr;gap:9vw}.experience-list>div{padding:25px 0;border-top:1px solid #b8bbae}.experience-list h3{font-size:26px;letter-spacing:-.03em;margin-bottom:10px}.experience-list p{margin:0;font-size:14px}.beyond{background:#e8e7e0}.life-grid{display:grid;grid-template-columns:1fr 1.35fr;gap:32px;align-items:start}.life-grid img{width:100%;height:460px;object-fit:cover}.life-grid figure:nth-child(2){margin-top:100px}.life-grid figcaption{margin-top:14px;color:#63665e}footer{background:#292f2b;color:#f1f0e8;padding:75px 6vw 24px}.contact-grid{display:grid;grid-template-columns:1fr 1fr;gap:30px;align-items:center}.email{font-size:clamp(18px,2vw,30px);text-decoration:none;border-bottom:1px solid #91958b;padding-bottom:10px}.footer-links{display:flex;gap:30px;margin-top:24px;font-size:13px}.footer-bottom{border-top:1px solid #5e645a;display:flex;justify-content:space-between;gap:20px;padding-top:24px;margin-top:70px;font-size:9px}.footer-bottom a{text-decoration:none}.skip{position:fixed;top:-100px;left:15px;z-index:30;background:white;padding:12px}.skip:focus{top:5px}:focus-visible{outline:2px solid #b06a48;outline-offset:5px}.article-wrap{max-width:1400px;padding:65px 6vw 90px;margin:auto}.back-link{display:inline-block;text-decoration:none}.article-header{max-width:950px;margin:25px 0 65px}.article-header h1{font-size:clamp(42px,5.5vw,78px)}.article-header>p{font-size:20px;color:#62665d}.tags{display:flex;flex-wrap:wrap;gap:7px;font-size:10px}.tags span{border:1px solid #c4c7bc;padding:5px 9px}.article-grid{display:grid;grid-template-columns:220px minmax(0,1fr);gap:55px;margin-bottom:60px}.toc{position:sticky;top:120px;align-self:start;max-height:70vh;overflow:auto}.toc a{display:block;text-decoration:none;font-size:12px;line-height:1.5;margin-bottom:14px}.toc a:hover{text-decoration:underline}.prose{min-width:0;overflow-wrap:anywhere}.prose h2{font-size:36px;line-height:1.15;margin:60px 0 25px;letter-spacing:-.035em}.prose h2:first-child{margin-top:0}.prose h3{font-size:26px;line-height:1.2;margin:35px 0 20px;letter-spacing:-.025em}.prose h4{font-size:18px}.prose li{margin-bottom:10px}.prose img{max-width:100%;object-fit:contain}.prose figure{min-width:0}.prose figcaption{font-family:Inter,Arial,sans-serif;text-transform:none;letter-spacing:0;font-size:12px;color:#64695e;margin:10px 0 25px}.prose iframe{max-width:100%;border:0}.prose pre{overflow:auto;padding:20px;background:#e0e1d7}.prose table{display:block;max-width:100%;overflow:auto}.prose div[style*="display:flex"],.prose div[style*="display: flex"]{flex-wrap:wrap}.simple-page{max-width:1060px;margin:auto;padding:65px 5vw 90px}body:has(.resume-frame) #main-content{width:100%;margin:0}.resume-frame{min-height:600px}.resume-actions a:hover{background:#d9dbd1}.katex-display{overflow:auto}
@media(min-width:1600px){.hero{min-height:850px}.hero-copy{padding-top:85px}.hero h1{margin-top:45px}}
@media(max-width:900px){.site-header{height:76px}.site-header nav{gap:18px}.hero{min-height:620px}.hero-copy{padding-top:35px}.hero h1{font-size:58px}.hero .eyebrow{font-size:9px}.section-pad{padding:70px 5vw}.about-grid{gap:5vw;grid-template-columns:.8fr 1.2fr}.bio p{font-size:15px}.project-row{gap:5vw}.project-image img{height:320px}.article-grid{grid-template-columns:1fr}.toc{position:static;max-height:none;display:flex;flex-wrap:wrap;gap:10px 18px;border-bottom:1px solid #c4c7bc;padding-bottom:20px}.toc .eyebrow{width:100%;margin-bottom:0}.toc a{margin:0}.life-grid img{height:350px}}
@media(max-width:650px){html{scroll-padding-top:80px}.site-header{padding:0 6vw;height:72px}.brand{font-size:23px}.menu-toggle{display:block;border:0;background:none;font-size:12px;padding:10px 0}.menu-toggle span{padding-left:10px}.site-header nav{display:none;position:absolute;top:72px;left:0;right:0;background:#eeede7;padding:25px 6vw;box-shadow:0 15px 20px #0001}.site-header nav.open{display:flex;flex-direction:column;gap:18px}.hero{display:flex;flex-direction:column;min-height:0}.hero-copy{padding:35px 6vw 25px}.hero .eyebrow{margin-bottom:8px}.hero h1{font-size:clamp(55px,13vw,80px);margin:20px 0 25px}.hero-copy>p{font-size:15px;max-width:350px}.hero-note{padding-top:35px}.hero-image{height:520px;min-height:0}.hero-image img{object-position:50% 45%}.section-pad{padding:65px 6vw}.section-heading{margin-bottom:35px}.eyebrow{font-size:10px;margin-bottom:22px}.about-grid,.project-row,.experience,.contact-grid,.life-grid{grid-template-columns:1fr;gap:30px}.portrait{max-height:420px;max-width:340px}.project-row{padding:30px 0 40px}.project-image img{height:330px}.project-copy h3{font-size:35px}.project-copy .eyebrow{margin-bottom:15px}.project-copy p:not(.project-role){font-size:15px}.experience-list{margin-top:15px}.life-grid figure:nth-child(2){margin-top:0}.life-grid img{height:auto;max-height:520px}.contact-grid{gap:10px}.footer-bottom{flex-direction:column;gap:10px;margin-top:45px}footer{padding:55px 6vw 25px}.article-wrap{padding:35px 6vw 60px}.article-header{margin-bottom:35px}.article-header>p{font-size:17px}.article-grid{gap:30px}.prose div[style*="display:flex"],.prose div[style*="display: flex"]{flex-direction:column;align-items:stretch!important}.prose div[style*="display:flex"]>*,.prose div[style*="display: flex"]>*{width:100%!important;max-width:100%!important;flex:auto!important}.prose img{height:auto!important;max-height:600px;width:auto;max-width:100%;margin-left:auto;margin-right:auto}.prose iframe{width:100%}.prose h2{font-size:30px}.resume-frame{min-height:450px}.simple-page{padding:40px 6vw 65px}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{transition:none!important}}

/* Personal introduction and outside interests. */
.hero-copy{justify-content:center;padding-bottom:60px}.hero h1{font-size:clamp(58px,6.5vw,104px);max-width:100%;margin:20px 0 30px}.hero-copy>p{max-width:430px}.beyond .section-heading>p{max-width:none;font-size:clamp(12px,1.18vw,18px)}.life-grid{grid-template-columns:1fr 1fr 1.35fr;gap:24px;align-items:start}.life-grid figure:nth-child(2){margin-top:0}.life-grid img{height:460px;object-fit:cover}.life-grid figure:nth-child(2) img{object-position:50% 65%}.life-grid figure:nth-child(3) img{object-fit:contain;background:#deded5}
@media(min-width:1100px){.beyond .section-heading>p{white-space:nowrap}}
@media(max-width:900px){.life-grid{grid-template-columns:1fr 1fr}.life-grid figure:nth-child(3){grid-column:1/-1}.life-grid figure:nth-child(3) img{height:auto}.beyond .section-heading>p{font-size:15px}}
@media(max-width:650px){.hero-copy{padding:45px 6vw}.hero h1{font-size:clamp(52px,13vw,80px)}.life-grid{grid-template-columns:1fr}.life-grid figure:nth-child(3){grid-column:auto}.life-grid img{height:auto;max-height:none}.beyond .section-heading>p{white-space:normal;font-size:15px}}

/* Refined introduction, warm accents, and uncropped photography. */
.hero{min-height:0;align-items:center}.hero h1{font-size:clamp(48px,5.2vw,82px)}.hero .eyebrow{line-height:1.8;max-width:480px}.hero-copy{padding-top:60px;padding-bottom:60px}.hero-image{min-height:0;height:auto;width:100%;background:#e1dfd6}.hero-image img{position:static;width:100%;height:auto;object-fit:contain}.hero-image figcaption{position:static;background:#e1dfd6;color:#292b27;padding:14px 22px;font-size:9px}.portrait{height:auto;max-height:none;object-fit:contain}.project-row:first-of-type .project-image img{object-fit:contain}
@media(max-width:650px){.hero h1{font-size:clamp(44px,11.5vw,62px)}.hero-copy{padding:42px 6vw}.hero .eyebrow{font-size:9px}.hero-image{height:auto}.hero-image img{height:auto}.portrait{max-width:340px}}

/* Keep the portrait contained within the biography height on desktop. */
.about-grid{position:relative}.portrait{width:auto;max-width:100%;max-height:var(--bio-height,380px);justify-self:start}.bio p:last-child{margin-bottom:0}
@media(max-width:650px){.portrait{width:240px;max-width:100%;max-height:none}}

/* A wider head-and-shoulders crop retains the biography alignment. */
@media(min-width:651px){.portrait{width:85%;height:var(--bio-height,380px);max-height:var(--bio-height,380px);object-fit:cover;object-position:center 34%;max-width:100%}}

/* Restore the original portrait framing at a more moderate size. */
@media(min-width:651px){.portrait{width:92%;height:auto;max-height:none;object-fit:contain;object-position:center}}

/* Overlapping ski photographs, with soccer as a separate companion image. */
.outside-gallery{display:grid;grid-template-columns:1.65fr 1fr;gap:4vw;align-items:center;padding-top:16px}.ski-collage{position:relative;aspect-ratio:1.05;isolation:isolate}.ski-photo{position:absolute;padding:7px;background:#f5f3ec;box-shadow:0 12px 28px #20261e26}.ski-photo img{width:100%;height:auto}.ski-one{width:43%;left:1%;top:1%;transform:rotate(-5deg);z-index:1}.ski-two{width:35%;right:1%;top:2%;transform:rotate(5deg);z-index:2}.ski-three{width:45%;left:26%;top:29%;transform:rotate(-2deg);z-index:3}.collage-caption{position:absolute;bottom:0;left:0;font:10px monospace;letter-spacing:.08em;color:#63665e}.soccer-photo{transform:rotate(2deg);margin-top:40px}.soccer-photo img{width:100%;height:auto;border:7px solid #f5f3ec;box-shadow:0 12px 28px #20261e20}.soccer-photo figcaption{margin-top:16px;font-size:10px;color:#63665e}
@media(max-width:900px){.outside-gallery{grid-template-columns:1fr;gap:55px}.ski-collage{max-width:700px;width:100%;margin:auto}.soccer-photo{width:75%;margin:0 auto;transform:rotate(1deg)}}
@media(max-width:650px){.outside-gallery{gap:40px}.ski-photo{padding:4px}.ski-collage{aspect-ratio:1.02}.collage-caption{font-size:8px}.soccer-photo{width:90%}}

/* Head-and-shoulders framing matched to the supplied reference. */
.about-grid .portrait{width:92%;height:auto;aspect-ratio:880 / 908;max-height:none;object-fit:cover;object-position:center 40%}
@media(max-width:650px){.about-grid .portrait{width:290px;max-width:100%}}

/* Staggered gallery with clear, unobstructed photographs. */
.outside-gallery{grid-template-columns:minmax(0,1.8fr) minmax(0,1fr);gap:40px;align-items:center}
.ski-collage{display:grid;grid-template-columns:1.12fr 1fr;gap:20px;aspect-ratio:auto;align-items:start;padding-bottom:30px}
.ski-photo{position:static;width:100%;padding:0;background:transparent;box-shadow:none;transform:none}
.ski-one{grid-column:1;grid-row:1 / span 2;align-self:center}.ski-two{grid-column:2;grid-row:1}.ski-three{grid-column:2;grid-row:2}
.ski-photo img{width:100%;height:auto;display:block}.ski-two img{aspect-ratio:4/5;object-fit:cover;object-position:center 70%}.ski-three img{aspect-ratio:4/5;object-fit:cover;object-position:center 70%}
.collage-caption{bottom:0}.soccer-photo{transform:none;margin-top:70px}.soccer-photo img{border:0;box-shadow:none}
@media(max-width:900px){.outside-gallery{grid-template-columns:1fr;gap:36px}.ski-collage{max-width:700px}.soccer-photo{width:75%;margin:0 auto}}
@media(max-width:650px){.ski-collage{gap:12px}.soccer-photo{width:100%}}

/* Two soccer photographs continue the staggered gallery. */
.soccer-gallery{display:grid;gap:24px;align-self:center;padding-top:50px}.soccer-gallery .soccer-photo{width:100%;margin:0;transform:none}.soccer-gallery .soccer-photo:nth-child(2){width:88%;justify-self:end}
@media(max-width:900px){.soccer-gallery{padding-top:0;grid-template-columns:1fr 1fr;align-items:start;gap:20px}.soccer-gallery .soccer-photo:nth-child(2){width:100%;margin-top:35px}}
@media(max-width:650px){.soccer-gallery{grid-template-columns:1fr;gap:20px}.soccer-gallery .soccer-photo:nth-child(2){width:88%;margin-top:0}}

.actuator-videos{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin:30px 0}.actuator-videos video{display:block;width:100%;max-height:440px;background:#222}.prose th,.prose td{padding:12px 14px;border-bottom:1px solid #c4c7bc;text-align:left;vertical-align:top}.prose th{background:#deded5}.prose table{border-collapse:collapse;margin:24px 0}.prose td:first-child{min-width:150px}@media(max-width:650px){.actuator-videos{grid-template-columns:1fr}}

/* Tighter vertical rhythm for the Helbling process narrative. */
.prose:has(#process) h2{margin-top:32px;margin-bottom:16px}
.prose:has(#process) h3{margin-top:24px;margin-bottom:14px}
.prose:has(#process) h2:first-child{margin-top:0}

/* More compact project-page headings. */
.prose h2{font-size:28px;line-height:1.2}.prose h3{font-size:22px;line-height:1.25}.prose h4{font-size:18px}
@media(max-width:650px){.prose h2{font-size:25px}.prose h3{font-size:21px}}

.prototype-comparison{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin:28px 0}.prototype-comparison figure{margin:0;min-width:0}.prototype-comparison img{width:100%;height:320px;object-fit:contain;background:#f6f5ef}.prototype-comparison figcaption{margin:12px 0 0}@media(max-width:650px){.prototype-comparison{grid-template-columns:1fr;gap:20px}.prose .prototype-comparison img{height:280px!important;width:100%}}

/* Keep the full Nexus robot visible in its project preview. */
.project-image-nexus img{object-fit:contain}

.experimental-setup-images{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;align-items:start;margin:28px 0}.experimental-setup-images figure{margin:0;min-width:0}.experimental-setup-images img{width:100%;height:300px;object-fit:contain}.experimental-setup-images figcaption{text-align:center;margin:12px 0 0}@media(max-width:650px){.experimental-setup-images{grid-template-columns:1fr}.prose .experimental-setup-images img{width:100%;height:auto!important;max-height:400px}}

.experimental-setup-additional video{display:block;width:100%;height:300px;object-fit:contain;background:#deded5}@media(max-width:650px){.experimental-setup-additional video{height:auto;max-height:400px}}

/* Consistent caption alignment across the site. */
figcaption{ text-align:center; }

.prose tr:has(.selected-actuator){color:#8b4936;background:rgba(139,73,54,.07)}
.prose .selected-actuator{font-weight:650}

.actuator-design-gallery{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px;margin:24px 0}.actuator-design-gallery figure{min-width:0;margin:0}.actuator-design-gallery a{display:block;background:#fff}.actuator-design-gallery img{width:100%;height:220px;object-fit:contain}.actuator-design-gallery figcaption{margin:12px 0 0}@media(max-width:650px){.actuator-design-gallery{grid-template-columns:1fr}.prose .actuator-design-gallery img{width:100%;height:auto!important;max-height:360px}}

.linkage-design-media{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;align-items:start;margin:24px 0}.linkage-design-media figure{margin:0;min-width:0}.linkage-design-media img,.linkage-design-media video{display:block;width:100%;height:300px!important;object-fit:contain;background:white}.linkage-design-media figcaption{margin:12px 0 0}@media(max-width:650px){.linkage-design-media{grid-template-columns:1fr}.prose .linkage-design-media img,.linkage-design-media video{height:auto!important;max-height:400px}}

.prose .process-intro{font-size:23px;font-weight:450;line-height:1.45;letter-spacing:-.02em;color:#62665d;margin-bottom:28px}.prose .process-intro strong{font-weight:600}@media(max-width:650px){.prose .process-intro{font-size:21px}}

/* Balanced columns for the actuator requirements comparison. */
.prose table:has(.actuator-specs-heading){display:table;width:100%;table-layout:fixed}
.prose table:has(.actuator-specs-heading) th:first-child,.prose table:has(.actuator-specs-heading) td:first-child{width:22%;min-width:0}
.prose table:has(.actuator-specs-heading) th:nth-child(2),.prose table:has(.actuator-specs-heading) th:nth-child(3){width:39%}

.requirement-shortfall{color:#8b4936;font-weight:600}

/* Display equations without scrollbars; scale long formulas on small screens. */
.prose .katex-display{overflow:visible;padding:.35em 0}
.force-equation{container-type:inline-size}
.force-equation .katex-display{font-size:min(1em,3cqw)}

@media(max-width:650px){.prose table:has(.actuator-specs-heading){display:block;table-layout:auto;overflow-x:auto}.prose table:has(.actuator-specs-heading) th,.prose table:has(.actuator-specs-heading) td{min-width:200px}.prose table:has(.actuator-specs-heading) th:first-child,.prose table:has(.actuator-specs-heading) td:first-child{min-width:130px}}
