:root{--ink:#292925;--paper:#fbfbf8;--line:#d4d4ce;--muted:#62625d;--accent:#a92538}*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:90px}body{margin:0;background:var(--paper);color:var(--ink);font:16px/1.55 Arial,Helvetica,sans-serif}a{color:inherit;text-decoration:none}button{font:inherit;color:inherit;cursor:pointer}img{display:block;max-width:100%}a,button{-webkit-tap-highlight-color:transparent}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:5px}.skip{position:absolute;top:-100px}.skip:focus{top:80px;z-index:100;background:white;padding:10px}.spectrum{height:6px;background:url('assets/spectrum.webp') center 53%/100% 500%}header{position:sticky;top:0;z-index:20;background:rgba(251,251,248,.96);backdrop-filter:blur(12px)}.nav{margin:0 3.2vw;display:flex;align-items:center;justify-content:space-between;min-height:72px;border-bottom:1px solid var(--line)}.brand{font-weight:800;letter-spacing:-.04em;font-size:20px}.navlinks{display:flex;gap:32px;font-size:14px}.navlinks a{padding:12px 0}.navlinks a:hover,.navlinks a[aria-current]{text-decoration:underline;text-underline-offset:6px}main{margin:0 3.2vw}h1,h2,h3,p{margin:0}h1,h2,h3{font-weight:500;line-height:1.02;letter-spacing:-.055em}.eyebrow,.meta{font-size:12px;letter-spacing:.08em;text-transform:uppercase}.eyebrow{display:flex;justify-content:space-between;gap:20px}.home-top{padding-top:26px}.masthead{font-size:clamp(68px,12.6vw,200px);font-weight:800;letter-spacing:-.068em;line-height:1.1;margin:20px 0 24px;white-space:nowrap}.intro-line{display:grid;grid-template-columns:1fr 1fr;gap:30px;border-top:1px solid var(--line);padding:24px 0 48px}.intro-line p{font-size:clamp(20px,2.1vw,32px);line-height:1.25;max-width:650px;letter-spacing:-.025em}.intro-line .index-link{align-self:end;justify-self:end;font-size:14px;border-bottom:1px solid;line-height:2}.feature{display:block;position:relative;overflow:hidden;background:#dce3d5}.feature img{width:100%;height:clamp(350px,46vw,710px);object-fit:cover;transition:transform .7s}.feature:hover img{transform:scale(1.025)}.feature-label{position:absolute;bottom:28px;left:28px;right:28px;display:flex;align-items:end;justify-content:space-between;color:white;text-shadow:0 1px 8px #000}.feature-label h2{font-size:clamp(32px,5vw,76px);font-weight:600;max-width:750px}.feature:after{content:'';position:absolute;inset:45% 0 0;background:linear-gradient(transparent,#0008);pointer-events:none}.feature-label{z-index:1}.feature-label .round{border:1px solid #fff8;border-radius:50%;width:54px;height:54px;display:grid;place-items:center;font-size:26px}.section-heading{display:flex;justify-content:space-between;align-items:baseline;border-bottom:1px solid var(--ink);margin:100px 0 28px;padding-bottom:18px}.section-heading h2{font-size:40px}.project-grid{display:grid;grid-template-columns:1fr 1fr;gap:60px 28px}.project-card{display:block;--accent:#a92538}.card-image{overflow:hidden;background:#f0f0eb;aspect-ratio:1.48}.card-image img{width:100%;height:100%;object-fit:contain;transition:transform .6s}.project-card:hover img{transform:scale(1.035)}.card-info{display:grid;grid-template-columns:32px 1fr auto;gap:12px;padding-top:18px;border-top:3px solid var(--accent);margin-top:12px}.card-info h3{font-size:clamp(24px,2.5vw,38px)}.card-info p{font-size:14px;margin-top:8px;color:var(--muted)}.num{font-size:13px}.year{font-size:14px}.about-teaser{margin:110px 0;display:grid;grid-template-columns:1fr 2fr;gap:40px;border-top:1px solid var(--line);padding-top:30px}.about-teaser p{font-size:clamp(28px,3.6vw,52px);line-height:1.15;letter-spacing:-.035em}.text-link{display:inline-block;border-bottom:1px solid;padding-bottom:3px;margin-top:28px;font-size:16px}footer{background:var(--ink);color:#fff;padding:48px 3.2vw 22px;margin-top:100px}.footer-title{font-size:clamp(40px,7vw,110px);line-height:1.08;letter-spacing:-.045em;margin:24px 0 50px}.footer-bottom{display:flex;justify-content:space-between;gap:20px;border-top:1px solid #ffffff4a;padding-top:18px;font-size:13px}.project-head{padding:35px 0 45px}.back{font-size:14px}.project-head .eyebrow{margin:48px 0 18px;color:var(--accent)}.project-title{font-size:clamp(52px,8.4vw,130px);text-transform:uppercase;font-weight:700;color:var(--accent);max-width:1200px}.project-subtitle{font-size:clamp(20px,2.4vw,34px);margin-top:24px;letter-spacing:-.02em}.project-meta{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;margin:38px 0 0;padding-top:22px;border-top:1px solid var(--line);font-size:14px}.project-meta dt{font-size:12px;color:var(--muted);text-transform:uppercase;margin-bottom:7px}.project-meta dd{margin:0}.hero-project{width:100%;max-height:75vh;object-fit:cover}.caption{display:flex;justify-content:space-between;gap:20px;font-size:13px;color:var(--muted);padding-top:12px}.story{display:grid;grid-template-columns:1fr 2fr;gap:40px;margin:100px 0 55px}.story h2{font-size:clamp(32px,4.5vw,64px);max-width:800px}.story p{max-width:700px;margin-top:25px;font-size:19px;line-height:1.6}.drawing{margin:25px 0 70px}.drawing button{display:block;width:100%;padding:0;border:0;background:white;cursor:zoom-in}.drawing img{width:100%;max-height:850px;object-fit:contain}.tabs{display:flex;gap:0;border-bottom:1px solid var(--line);margin-top:40px}.tabs button{flex:1;border:0;background:none;border-bottom:3px solid transparent;padding:22px 12px;text-align:left;font-size:clamp(18px,2.4vw,34px);letter-spacing:-.04em}.tabs button[aria-selected=true]{border-color:var(--accent);color:var(--accent)}.site-panel{padding-top:30px}.site-panel h3{font-size:30px}.site-panel p{max-width:700px;margin:15px 0 30px}.principles{display:grid;grid-template-columns:repeat(3,1fr);gap:25px}.principles article{border-top:1px solid var(--line);padding-top:20px}.principles h3{font-size:27px;margin-top:25px}.principles p{margin-top:15px}.next-project{display:flex;justify-content:space-between;align-items:center;border-top:1px solid var(--ink);padding:35px 0;margin-top:90px}.next-project h2{font-size:clamp(32px,5vw,70px);margin-top:10px}.about-layout{display:grid;grid-template-columns:1fr 1.6fr;gap:8vw;margin:60px 0}.portrait{width:100%;max-width:400px;filter:grayscale(1)}.about-copy p{font-size:24px;line-height:1.5;margin-bottom:25px}.timeline{max-width:950px;margin:50px 0}.timeline-row{display:grid;grid-template-columns:180px 1fr;padding:25px 0;border-top:1px solid var(--line);gap:30px}.timeline-row h3{font-size:26px}.timeline-row p{margin-top:12px}.cv-grid{display:grid;grid-template-columns:1fr 1fr;gap:50px}dialog{border:0;width:96vw;max-width:none;height:94vh;padding:55px 20px 20px;background:#fff}dialog::backdrop{background:#111d}.dialog-close{position:absolute;top:10px;right:20px;background:#fff;border:1px solid var(--line);padding:7px 20px}.zoom-scroll{height:100%;overflow:auto;text-align:center}.zoom-scroll img{max-width:none;width:100%;height:100%;object-fit:contain}.zoom-scroll.zoomed img{width:220%;height:auto;cursor:zoom-out}.zoom-scroll img{cursor:zoom-in}body:has(dialog[open]){overflow:hidden}.reveal{animation:appear .6s ease-out both}@keyframes appear{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}@media(max-width:700px){.nav{min-height:65px;margin:0 5vw}.brand{font-size:16px}.navlinks{gap:16px;font-size:13px}main{margin:0 5vw}.masthead{font-size:12.1vw;margin:25px 0}.eyebrow{font-size:11px}.intro-line{grid-template-columns:1fr;gap:24px;padding-bottom:28px}.intro-line .index-link{justify-self:start}.feature img{height:470px}.feature-label{left:20px;right:20px;bottom:24px}.feature-label h2{font-size:38px;max-width:270px}.feature-label .round{width:40px;height:40px;flex-shrink:0}.section-heading{margin-top:65px}.section-heading h2{font-size:32px}.project-grid{grid-template-columns:1fr;gap:40px}.card-info h3{font-size:30px}.about-teaser,.story{grid-template-columns:1fr;gap:25px;margin:65px 0 35px}.about-teaser p{font-size:34px}.project-meta{grid-template-columns:1fr 1fr;gap:25px}.project-title{font-size:13vw;overflow-wrap:anywhere}.project-head .eyebrow{margin-top:32px}.project-head{padding-bottom:28px}.hero-project{height:420px;object-fit:cover}.story p{font-size:17px}.principles{grid-template-columns:1fr}.principles article{padding-bottom:15px}.drawing{margin-bottom:40px}.tabs button{padding:18px 8px}.footer-title{font-size:11vw;overflow-wrap:anywhere}.footer-bottom{flex-wrap:wrap}.about-layout{grid-template-columns:1fr;gap:35px}.about-copy p{font-size:21px}.portrait{max-width:270px}.timeline-row{grid-template-columns:1fr;gap:12px}.cv-grid{grid-template-columns:1fr}.caption{font-size:12px}.next-project h2{font-size:36px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}}
/* Research: publications as a continuous enquiry. */
.intro-line .research-intro{font-size:18px;line-height:1.6;max-width:520px;align-self:end;justify-self:end;letter-spacing:0}.research-path{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--ink);border-bottom:1px solid var(--line);margin-bottom:56px}.research-path a{padding:22px 16px 24px 0}.research-path span{display:block;font-size:12px;color:var(--muted);margin-bottom:12px;text-transform:uppercase;letter-spacing:.04em}.research-path strong{font-size:20px;font-weight:500;letter-spacing:-.03em}.research-path a:hover strong{text-decoration:underline;text-underline-offset:6px}.research-books{display:grid;grid-template-columns:repeat(3,1fr);gap:32px;margin-bottom:90px}.book-surface{background:#eeeee9;aspect-ratio:1/1.15;display:flex;align-items:center;justify-content:center;padding:30px;overflow:hidden}.book-surface img{width:auto;height:auto;max-height:100%;max-width:100%;object-fit:contain;box-shadow:5px 8px 18px #0002;transition:transform .4s}.research-book:hover img{transform:translateY(-6px) rotate(-1deg)}.book-meta{display:flex;justify-content:space-between;font-size:12px;text-transform:uppercase;letter-spacing:.04em;margin:20px 0 12px}.research-book h2{font-size:clamp(26px,2.7vw,42px);letter-spacing:-.04em;line-height:1.1}.research-book>p{font-size:16px;color:var(--muted);margin-top:12px;max-width:350px}.research-study{display:grid;grid-template-columns:1fr 2fr;gap:50px;padding:65px 0 85px;border-top:1px solid var(--ink);scroll-margin-top:110px}.research-number{font-size:76px;letter-spacing:-.06em;line-height:1}.research-study aside>.meta{margin-top:25px;line-height:1.8}.research-study dl{font-size:14px;margin:32px 0}.research-study dt{color:var(--muted);font-size:12px;text-transform:uppercase;margin-top:16px}.research-study dd{margin:3px 0}.research-pdf{display:block;max-width:270px;background:var(--ink);color:white;padding:17px 20px;font-size:16px}.research-pdf:hover{background:#45453d}.research-pdf small{display:block;margin-top:8px;font-size:12px;color:#ddd}.research-body h2{font-size:clamp(38px,5.1vw,78px);margin:16px 0 32px}.research-question{font-size:clamp(24px,2.5vw,36px)!important;line-height:1.25!important;letter-spacing:-.025em;margin-bottom:25px}.research-body>p:not(.meta):not(.research-source){max-width:800px;font-size:18px;line-height:1.65}.research-notes{display:grid;grid-template-columns:1fr 1fr;gap:35px;margin-top:40px}.research-notes h3{font-size:24px;letter-spacing:-.025em;border-top:1px solid var(--line);padding-top:18px}.research-notes p{margin-top:15px;font-size:16px}.research-body .research-bridge{margin-top:35px;font-style:italic}.research-source{font-size:12px;color:var(--muted);margin-top:25px}.principles-heading{margin:55px 0 25px}.principles-heading h3{font-size:32px}.principles-heading p{font-size:14px;color:var(--muted);margin-top:15px}.research-principles details{border-top:1px solid var(--line)}.research-principles details:last-child{border-bottom:1px solid var(--line)}.research-principles summary{display:flex;align-items:center;gap:25px;padding:22px 0;cursor:pointer;font-size:24px;letter-spacing:-.025em;list-style:none;line-height:1.25}.research-principles summary::-webkit-details-marker{display:none}.research-principles summary>span:first-child{font-size:12px;color:var(--muted);letter-spacing:0}.expand{margin-left:auto;font-size:26px;font-weight:300}.research-principles details[open] .expand{transform:rotate(45deg)}.research-principles details[open] summary{color:var(--accent)}.principle-content{padding:0 0 28px 40px}.principle-content p{margin:0 0 16px;font-size:16px}.principle-content strong{display:block;font-weight:500;font-size:12px;text-transform:uppercase;letter-spacing:.04em;margin-bottom:5px}.principle-content a{font-size:14px;text-decoration:underline;text-underline-offset:4px}.research-to-project{display:grid;grid-template-columns:1fr 2fr;gap:50px;background:#ecece6;padding:42px;margin:20px 0 50px}.research-to-project h2{font-size:clamp(32px,4.6vw,68px)}.research-to-project p{margin-top:25px;max-width:650px;font-size:18px}.research-project-link{margin-top:30px}summary:focus-visible{outline:2px solid var(--accent);outline-offset:4px}@media(max-width:800px){.nav{flex-wrap:wrap;padding:14px 0 0;gap:5px}.navlinks{width:100%;justify-content:space-between;gap:10px}.navlinks a{padding:10px 0 13px}.research-path{grid-template-columns:1fr 1fr}.research-path a:nth-child(-n+2){border-bottom:1px solid var(--line)}.research-books{gap:18px}.book-surface{padding:16px}.research-book h2{font-size:24px}.research-study{grid-template-columns:1fr;gap:35px}.research-study aside{display:grid;grid-template-columns:80px 1fr;column-gap:24px}.research-study aside>.meta{margin-top:5px}.research-study dl{grid-column:1/-1;display:grid;grid-template-columns:1fr 1fr;gap:4px 20px;margin:10px 0 25px}.research-study dt{margin-top:8px}.research-study dd{align-self:end}.research-pdf{grid-column:1/-1;max-width:none}.research-study aside>.text-link{grid-column:1/-1;justify-self:start;margin-top:18px}.research-to-project{grid-template-columns:1fr;gap:25px;padding:26px}.research-study{scroll-margin-top:140px}}@media(max-width:550px){.research-books{grid-template-columns:1fr;gap:36px;margin-bottom:65px}.book-surface{aspect-ratio:1.15;padding:25px}.research-book h2{font-size:32px}.research-book>p{max-width:none}.research-notes{grid-template-columns:1fr;gap:25px}.research-body h2{font-size:42px}.research-principles summary{font-size:22px;gap:16px}.principle-content{padding-left:30px}.research-study{padding:40px 0 55px}.research-path{margin-bottom:32px}.research-path strong{font-size:18px}.intro-line .research-intro{font-size:16px}.research-to-project p{font-size:16px}}
@media(max-width:800px){html{scroll-padding-top:140px}}

/* Original portfolio wordmark: only the two O glyphs use SuperWide. */
@font-face{font-family:Velodroma;src:url('assets/fonts/VelodromaBasic-Regular.otf') format('opentype');font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:VelodromaSuperWide;unicode-range:U+004F;src:url('assets/fonts/VelodromaBasic-SuperWide.otf') format('opentype');font-weight:400;font-style:normal;font-display:swap}
.brand,.masthead{font-family:Velodroma,Arial,sans-serif;font-weight:400;font-style:normal;font-synthesis:none;letter-spacing:0}
.brand{white-space:nowrap;font-size:20px}
.brand-wide{font-family:VelodromaSuperWide,Velodroma,Arial,sans-serif}
.masthead{font-size:min(9.4vw,160px);line-height:1.15}
@media(max-width:700px){.brand{font-size:18px}.masthead{font-size:9vw}}

.brand-regular{font-family:Velodroma,Arial,sans-serif!important;font-weight:400;font-stretch:normal;font-variant:normal;font-feature-settings:normal;letter-spacing:0}

/* Keep every non-O letter in the original Regular face, without alternates. */
.brand,.masthead,.brand-regular{font-variant-ligatures:none;font-feature-settings:"liga" 0,"dlig" 0,"hlig" 0,"salt" 0,"swsh" 0;font-synthesis:none}

/* Preserve each portfolio image in full, including context at its edges. */
.card-image{background:#fff}
.card-image img{object-fit:contain;object-position:center;transform:none}
@media(hover:hover) and (prefers-reduced-motion:no-preference){.project-card:hover .card-image img{transform:scale(1.035)}}

/* Research heading aligned with About and CV. */
.research-hero>.eyebrow{color:var(--accent)}

@media(max-width:700px){}

/* Research shares project-head and project-title with About and CV. */
.research-hero .intro-line{margin-top:24px;padding-bottom:0}

/* Non-destructive portrait framing in About. */
.about-portrait{position:relative;aspect-ratio:1;overflow:hidden;margin:0;width:100%;max-width:400px;background:#b0b0b0}
.about-portrait img{position:absolute;display:block;width:150%;max-width:none;height:auto;left:-25%;top:-7.5%}
@media(max-width:700px){.about-portrait{max-width:320px}}

.contact-links{display:flex;flex-wrap:wrap;align-items:baseline;gap:0 40px}

.garden-section{margin-top:70px;border-top:1px solid var(--line);padding-top:28px}.garden-section>h2{font-size:clamp(30px,4vw,56px)}.garden-section .drawing{margin-top:30px}

/* Preserve the complete portfolio framing at every screen size. */
.hero-project.hero-project-full{height:auto;max-height:none;object-fit:contain}

/* Portfolio gradient becomes the navigation background. */
header{background-color:#292925;background-image:linear-gradient(rgba(0,0,0,.42),rgba(0,0,0,.42)),url('assets/navigation-gradient.jpg');background-size:100% 100%,cover;background-position:center,center 48%;background-repeat:no-repeat;color:#fff;backdrop-filter:none}
header .spectrum{display:none}
header .nav{min-height:82px;border-bottom:0}
header .brand,header .navlinks a{color:#fff;text-shadow:0 1px 3px #0004}
header a:focus-visible{outline-color:#fff;outline-offset:5px}
header .navlinks a:hover,header .navlinks a[aria-current]{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:6px}
@media(max-width:800px){header .nav{min-height:108px;padding:15px 0 3px;row-gap:8px}header{background-size:100% 100%,auto 420%;background-position:center,center 48%}}

/* Navigation stays at the top of the document, not the viewport. */
header{position:relative;top:auto}
html{scroll-padding-top:24px}
.research-study{scroll-margin-top:24px}
/* Reveal the navigation when scrolling back up. */
header{position:sticky;top:0;transition:transform .22s ease;will-change:transform}
header.nav-hidden{transform:translateY(-100%);pointer-events:none}
header:has(:focus-visible){transform:translateY(0);pointer-events:auto}
html{scroll-padding-top:106px}
.research-study{scroll-margin-top:24px}
@media(max-width:800px){html{scroll-padding-top:140px}}
@media(prefers-reduced-motion:reduce){header{transition:none}}

/* Natural departure at the top, directional reveal after the header has left. */
header{position:relative;top:auto}
header.nav-floating{position:fixed;top:0;left:0;right:0;width:100%}
header.nav-entering{transition:none!important}
.nav-slot{position:relative}
