@import url("/fonts/fonts.css");
:root{color-scheme:light;--paper:#f8f9f7;--ink:#202720;--muted:#667066;--line:#dce0d9;--accent:#285e43;--serif:"Newsreader",Georgia,serif;--sans:"Inter","Noto Sans CJK SC","Microsoft YaHei",sans-serif;--mono:"JetBrains Mono",monospace;font-family:var(--sans);color:var(--ink);background:var(--paper);font-synthesis:none}
*{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:32px}body{margin:0;font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button{font:inherit}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:6px}::selection{background:#dbe8d8;color:#1e3529}p,h1,h2,h3{margin:0}.wrap{max-width:1240px;margin:0 auto;padding-left:48px;padding-right:48px}.site-header{height:116px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);position:relative}.wordmark{font-size:34px;font-weight:600;letter-spacing:-3px;line-height:1}.wordmark-dot{color:var(--accent)}nav{display:flex;gap:38px;font-size:14px}nav a{color:var(--muted);transition:color .2s}nav a:hover,nav a[aria-current]{color:var(--ink)}.resume-link{border:1px solid var(--line);border-radius:5px;font-size:14px;padding:8px 15px;display:flex;gap:22px;align-items:center;transition:background .2s}.resume-link:hover{background:#e9ede6}.eyebrow{font:12px/1.5 var(--mono);letter-spacing:.1em;font-weight:400}.hero{padding-top:48px}.hero-top{display:flex;justify-content:space-between}.location{color:var(--muted)}h1{font-size:clamp(70px,8.8vw,116px);font-weight:450;letter-spacing:-.065em;line-height:1.04;margin:52px 0 44px}h1 em{font-family:var(--serif);font-weight:400;letter-spacing:-.07em;color:var(--accent)}.hero-bottom{display:grid;grid-template-columns:1.4fr 1fr;gap:80px;align-items:start;margin-bottom:62px}.intro{font-size:25px;line-height:1.48;letter-spacing:-.025em;max-width:540px}.hero-note{padding-left:58px;border-left:1px solid var(--line);color:var(--muted);font-size:16px;line-height:1.7}.text-link{display:inline-flex;gap:26px;align-items:center;border-bottom:1px solid var(--ink);color:var(--ink);font-size:14px;padding-bottom:3px;margin-top:20px}.text-link:hover{color:var(--accent);border-color:var(--accent)}.context-strip{display:flex;justify-content:space-between;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:18px 0;font:12px/1.5 var(--mono);letter-spacing:.1em;color:var(--muted)}.section{padding-top:96px;scroll-margin-top:28px}.section-heading{display:flex;justify-content:space-between;gap:30px;align-items:center;margin-bottom:30px}.section-heading h2,.about-intro h2{font-size:18px;font-weight:500;letter-spacing:-.02em}.section-number{font:12px var(--mono);color:var(--muted);margin-right:17px}.section-heading>p{font-size:14px;color:var(--muted)}.featured-project{background:#1d2b23;color:#f1f5ec;border-radius:8px;padding:35px 40px 42px;position:relative;overflow:hidden}.project-top{display:flex;justify-content:space-between;color:#b0c3b2;gap:20px}.small-label{font-size:12px;letter-spacing:.02em}.featured-grid{display:grid;grid-template-columns:1fr 1fr;gap:62px;padding-top:35px;align-items:center}.featured-copy h3{font-size:51px;line-height:1;letter-spacing:-.055em;font-weight:500}.accent{color:#a8cba9}.project-deck{font-size:27px;line-height:1.3;letter-spacing:-.035em;margin-top:20px}.project-description{font-size:16px;color:#c1cdc0;line-height:1.75;margin-top:22px;max-width:390px}.project-role{font-size:14px;color:#b7c6b6;line-height:1.7;margin-top:18px;max-width:390px}.project-link{display:inline-flex;gap:36px;border-bottom:1px solid #7c947b;padding-bottom:5px;margin-top:30px;font-size:14px}.project-link:hover{color:#c7e8bc}.coordination{border:1px solid #405047;border-radius:6px;padding:24px;background:#223229}.diagram-caption{display:flex;justify-content:space-between;font:10px/1.6 var(--mono);letter-spacing:.08em;color:#b5c9b7;gap:10px}.agent-pair{display:grid;grid-template-columns:1fr 1fr;gap:25px;margin-top:28px}.agent-node{border:1px solid #526357;border-radius:4px;padding:17px 9px;display:flex;flex-direction:column;text-align:center;background:#2c3d31}.agent-node strong{font-size:14px;font-weight:500;margin-top:9px}.agent-node>span:last-child{font-size:12px;color:#b3c2b2;margin-top:3px}.node-symbol{font-size:25px;line-height:1.1;color:#dfc6b1}.codex-symbol{color:#d5e6c9}.diagram-connectors{display:grid;grid-template-columns:1fr 1fr;gap:25px;text-align:center;font-size:25px;color:#8fae91;padding:5px 0}.protocol-node{border:1px solid #98b995;background:#b6cdab;color:#223324;border-radius:4px;padding:12px 20px;display:flex;justify-content:space-between;align-items:center}.protocol-node strong{font-size:25px;letter-spacing:-.07em;font-weight:500}.protocol-node span{font:12px var(--mono)}.protocol-details{display:flex;flex-wrap:wrap;gap:8px;justify-content:space-between;margin-top:24px;font-size:12px;color:#c1d1bd}.diagram-footnote{font:12px/1.7 var(--mono);color:#9cb199;padding-top:22px;margin-top:23px;border-top:1px solid #435549}.project-list{margin-top:16px}.project-row{display:grid;grid-template-columns:65px 1fr 170px;gap:20px;border-bottom:1px solid var(--line);padding:34px 0}.project-index{font:12px var(--mono);padding-top:4px;color:var(--muted)}.project-row .eyebrow{font-size:11px;color:var(--accent)}.project-row h3{font-size:26px;font-weight:450;letter-spacing:-.03em;margin:9px 0}.project-row p:not(.eyebrow):not(.role-line){max-width:650px;color:var(--muted);font-size:16px;line-height:1.7}.role-line{font-size:12px;color:var(--muted);margin-top:16px}.project-status{font-size:12px;text-align:right;align-self:start;color:var(--muted);margin-top:4px}.writing-row{display:grid;grid-template-columns:155px 1fr 30px;gap:24px;align-items:center;padding:30px 0;border-top:1px solid var(--line);transition:color .2s}.writing-row:last-child{border-bottom:1px solid var(--line)}.writing-date{font:12px/1.8 var(--mono);color:var(--muted)}.writing-date span{font-family:var(--sans);display:block;margin-top:5px}.writing-row .eyebrow{font-size:11px;color:var(--accent)}.writing-row h3{font-family:var(--serif);font-size:28px;font-weight:400;line-height:1.28;letter-spacing:-.025em;margin:9px 0 7px}.writing-row h3:lang(zh){font-family:var(--sans);font-size:25px;line-height:1.5}.writing-row p{font-size:14px;color:var(--muted)}.row-arrow{font-size:24px;transition:transform .2s}.writing-row:hover h3{color:var(--accent)}.writing-row:hover .row-arrow{transform:translate(3px,-3px)}.about-section{display:grid;grid-template-columns:1fr 1fr;gap:95px}.about-statement{font-family:var(--serif);font-size:43px;letter-spacing:-.045em;line-height:1.15;margin:33px 0 24px}.about-intro>p:not(.about-statement){color:var(--ink);margin-bottom:17px;line-height:1.8}.experience{padding-top:5px}.experience>.eyebrow{margin-bottom:16px;color:var(--muted)}.experience-row{display:grid;grid-template-columns:114px 1fr;gap:12px;border-top:1px solid var(--line);padding:22px 0}.experience-date{font:11px/1.6 var(--mono);color:var(--muted);padding-top:3px}.experience-row h3{font-size:17px;font-weight:500;line-height:1.4}.experience-row p{font-size:14px;margin-top:4px}.experience-row div>span{display:block;font-size:13px;color:var(--muted);line-height:1.6;margin-top:7px}.education{border-top:1px solid var(--line);padding-top:25px}.education .eyebrow{color:var(--muted);margin-bottom:16px}.education>p:not(.eyebrow){font-size:15px;margin-bottom:16px}.education span{display:block;font-size:13px;color:var(--muted);margin-top:2px}.site-footer{margin-top:100px;border-top:1px solid var(--line);padding-top:50px;display:grid;grid-template-columns:1fr auto;gap:35px}.site-footer .eyebrow{color:var(--muted);font-size:11px}.contact-title{font-size:72px;font-family:var(--serif);letter-spacing:-.055em;line-height:1.4;display:inline-flex;gap:50px;margin-top:7px}.contact-title span{font-family:var(--sans);font-size:45px;align-self:center;color:var(--accent)}.contact-title:hover{color:var(--accent)}.footer-links{display:flex;gap:26px;align-self:center;font-size:14px}.footer-links a:hover{text-decoration:underline;text-underline-offset:5px}.footer-bottom{grid-column:1/-1;display:flex;justify-content:space-between;gap:20px;border-top:1px solid var(--line);padding:24px 0 28px;color:var(--muted);font-size:12px}.skip-link{position:absolute;top:-100px;left:20px;background:var(--ink);color:white;padding:8px 16px;z-index:10}.skip-link:focus{top:10px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
/* Reading pages */
.reading-main{max-width:820px;margin:0 auto;padding:65px 40px 20px}.back-link{display:inline-block;color:var(--muted);font-size:14px;margin-bottom:47px}.back-link:hover{color:var(--accent)}.article-header .eyebrow{color:var(--accent)}.article-header h1{font-family:var(--serif);font-size:clamp(36px,5vw,58px);line-height:1.12;letter-spacing:-.045em;margin:20px 0 24px}.article-deck{font-size:20px;color:var(--muted);line-height:1.55}.article-meta{border-bottom:1px solid var(--line);padding:23px 0 25px;margin-bottom:36px;display:flex;flex-wrap:wrap;gap:10px 25px;font-size:13px;color:var(--muted)}.article-body{font-family:var(--serif);font-size:20px;line-height:1.8;overflow-wrap:anywhere}.article-body p{margin:0 0 25px}.article-body h2{font-family:var(--sans);font-size:26px;font-weight:500;line-height:1.4;letter-spacing:-.025em;margin:44px 0 18px}.article-body h3{font-family:var(--sans);font-size:21px;font-weight:500;margin:28px 0 15px}.article-body ul,.article-body ol{padding-left:26px;margin:20px 0 28px}.article-body li{padding-left:5px;margin-bottom:10px}.article-body a{color:var(--accent);text-decoration:underline;text-underline-offset:3px}.article-body blockquote{border-left:2px solid var(--accent);margin:32px 0;padding-left:24px;color:var(--muted)}.article-body hr{border:0;border-top:1px solid var(--line);margin:35px 0}.article-body:lang(zh){font-family:var(--sans);font-size:18px;line-height:1.9}.article-note{font:14px/1.7 var(--sans);color:var(--muted);border-left:2px solid var(--line);padding:4px 0 4px 18px;margin:25px 0 35px}.reading-footer{margin-top:65px;padding-top:26px;padding-bottom:32px;border-top:1px solid var(--line);display:flex;justify-content:space-between;gap:22px;font-size:14px}.cv-title{font-size:60px!important;font-family:var(--sans)!important}.cv-intro{font-size:18px;color:var(--ink);line-height:1.7}.cv-section{padding-top:42px}.cv-section h2{font:12px var(--mono);letter-spacing:.13em;padding-bottom:15px;border-bottom:1px solid var(--line);color:var(--accent)}.cv-job{margin-top:28px}.cv-job-heading{display:flex;justify-content:space-between;gap:20px;align-items:baseline}.cv-job h3{font-size:21px;font-weight:500;letter-spacing:-.025em}.cv-job-heading>span{font-size:12px;color:var(--muted)}.cv-job .cv-role{font-size:14px;color:var(--muted);margin-top:4px}.cv-job ul{padding-left:20px;margin-top:16px;line-height:1.7}.cv-job li{margin-bottom:10px}.print-button{border:1px solid var(--line);background:transparent;color:var(--ink);border-radius:4px;padding:8px 16px;cursor:pointer;font-size:14px}.print-button:hover{background:#e9ede6}.cv-actions{display:flex;gap:25px;align-items:center;flex-wrap:wrap;margin-top:24px;font-size:14px}
@media(min-width:1450px){.wrap{max-width:1320px}.hero{padding-top:55px}.hero-bottom{margin-bottom:72px}h1{font-size:126px}.featured-grid{gap:85px}}
@media(max-width:950px){.wrap{padding-left:30px;padding-right:30px}.hero-bottom{gap:30px}.hero-note{padding-left:30px}.featured-project{padding:28px}.featured-grid{gap:30px}.coordination{padding:18px}.diagram-caption{font-size:9px}.protocol-details{font-size:11px}.about-section{gap:45px}.experience-row{grid-template-columns:90px 1fr}.section-heading>p{font-size:13px}.project-row{grid-template-columns:40px 1fr 125px}.writing-row{grid-template-columns:110px 1fr 25px;gap:18px}.writing-row h3{font-size:25px}.context-strip{font-size:11px}}
@media(max-width:700px){.wrap{padding-left:23px;padding-right:23px}.site-header{height:86px}.wordmark{font-size:29px}nav{gap:20px;font-size:13px}.resume-link{padding:5px 9px;gap:8px;font-size:12px}.hero{padding-top:30px}.eyebrow{font-size:11px}.location{font-size:10px}h1{font-size:clamp(65px,14vw,94px);line-height:1.04;margin:43px 0 33px}.hero-bottom{display:block;margin-bottom:35px}.intro{font-size:21px;max-width:440px}.desktop-break{display:none}.hero-note{border-left:0;padding-left:0;margin-top:24px}.hero-note>p{display:none}.text-link{margin-top:0}.context-strip{gap:15px;flex-wrap:wrap;font-size:9px;letter-spacing:.07em;padding:15px 0}.section{padding-top:60px}.section-heading{align-items:start;margin-bottom:24px}.section-heading>p{display:none}.section-heading h2,.about-intro h2{font-size:17px}.featured-project{padding:24px;border-radius:6px}.project-top{gap:12px}.project-top .eyebrow{font-size:10px}.small-label{font-size:10px}.featured-grid{grid-template-columns:1fr;gap:35px;padding-top:30px}.featured-copy h3{font-size:46px}.project-deck{font-size:26px}.project-description{max-width:none}.project-role{max-width:none}.coordination{padding:20px;max-width:440px;width:100%;justify-self:center}.diagram-caption{font-size:10px}.protocol-details{font-size:11px}.project-row{grid-template-columns:30px 1fr;gap:12px;padding:27px 0}.project-row h3{font-size:24px}.project-row .eyebrow{font-size:10px}.project-row p:not(.eyebrow):not(.role-line){font-size:15px}.project-status{grid-column:2;justify-self:start;margin-top:0}.role-line{line-height:1.7}.writing-row{grid-template-columns:1fr 25px;padding:25px 0;gap:10px}.writing-date{grid-column:1/-1;display:flex;gap:15px;align-items:baseline;font-size:11px}.writing-date span{margin:0;font-size:11px}.writing-row h3{font-size:26px}.writing-row h3:lang(zh){font-size:23px}.writing-row .eyebrow{display:none}.writing-row p{font-size:14px}.about-section{grid-template-columns:1fr;gap:38px}.about-statement{font-size:40px;margin-top:28px}.about-intro .text-link{margin-top:8px}.experience-row{grid-template-columns:100px 1fr;gap:15px}.site-footer{margin-top:60px;padding-top:34px;gap:22px}.site-footer .eyebrow{font-size:9px}.contact-title{font-size:57px;gap:25px}.contact-title span{font-size:34px}.footer-links{gap:18px;grid-column:1/-1}.footer-bottom{flex-wrap:wrap;gap:12px;font-size:11px}.footer-bottom>span:nth-child(2){display:none}.footer-bottom a{margin-left:auto}.reading-main{padding:38px 24px 10px}.back-link{margin-bottom:34px}.article-header h1{font-size:40px}.article-deck{font-size:18px}.article-body{font-size:19px;line-height:1.8}.article-body:lang(zh){font-size:17px}.reading-footer{font-size:13px}.cv-job-heading{display:block}.cv-job-heading>span{display:block;margin-top:4px}.cv-title{font-size:47px!important}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{transition:none!important;animation:none!important}}
.article-body pre{font:14px/1.8 var(--mono);background:#e9ede6;border:1px solid var(--line);padding:20px;border-radius:4px;overflow:auto;margin:25px 0;white-space:pre}.article-note a{text-decoration:underline;text-underline-offset:3px}.diagram-caption{font-size:12px;letter-spacing:0}.context-strip{font-size:12px}.project-row .eyebrow,.writing-row .eyebrow,.experience-date,.site-footer .eyebrow,.project-top .eyebrow,.location,.role-line,.footer-bottom,.small-label,.writing-date,.writing-date span{font-size:12px}.protocol-details{font-size:12px}

/* Reading refinements: preserve the original visual system. */
.eyebrow,.context-strip{font-size:13px;color:#4e5a4e}
.project-top .eyebrow{color:inherit}
.project-row .eyebrow,.writing-row .eyebrow,.site-footer .eyebrow,.experience>.eyebrow,.education .eyebrow{font-size:13px}
.project-row .eyebrow,.writing-row .eyebrow{color:var(--accent)}
.resume-main{max-width:760px;font-size:18px}
.resume-main .cv-job ul{max-width:65ch;line-height:1.75}
.resume-main .cv-section h2{font-size:13px}
.cv-job-heading{flex-wrap:wrap;gap:4px 20px}
.cv-job-heading>span{white-space:nowrap}
.cv-job .cv-role{font-size:15px}
.cv-job strong{font-weight:600}
.cv-talks{list-style:none;padding:0;margin:24px 0 0}
.cv-talks li{border-bottom:1px solid var(--line);padding:0 0 18px;margin:0 0 20px;break-inside:avoid}
.cv-talks h3{font-size:18px;font-weight:500}
.cv-talks p{font-size:16px;line-height:1.75;margin-top:5px}
.cv-talks .talk-meta{font:12px/1.7 var(--mono);color:var(--muted);margin-bottom:7px}
.node-symbol svg{display:block;width:28px;height:28px;margin:0 auto;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
.diagram-connectors svg{display:block;width:24px;height:32px;margin:0 auto;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}
.writing-index{max-width:1040px;padding-top:60px}
.writing-index h1{font-family:var(--serif);font-size:64px;margin:20px 0 22px}
.writing-index>.intro{font-size:20px;margin-bottom:38px}
.article-header h1:lang(zh){font-family:var(--sans);font-size:clamp(30px,4vw,43px);letter-spacing:0;line-height:1.45}
.article-body:lang(zh){line-height:1.95;letter-spacing:.015em}
@media(max-width:700px){
  .eyebrow,.project-top .eyebrow,.location{font-size:12px}
  .context-strip{display:grid;grid-template-columns:1fr;gap:9px;font-size:12px;padding:18px 0}
  .resume-main{font-size:17px}
  .cv-actions{gap:16px 20px}
  .cv-job-heading>span{white-space:normal}
  .cv-talks p{font-size:16px}
  .writing-index h1{font-size:47px}
  .footer-links{flex-wrap:wrap}
}
.all-writing-link{font-size:14px;color:var(--muted)}.all-writing-link:hover{color:var(--accent)}.cv-job li a{text-decoration:underline;text-underline-offset:3px}.writing-row h3:lang(zh){letter-spacing:0;font-weight:400}.writing-index .writing-row:first-of-type{margin-top:25px}

/* Project explanations and native architecture. */
.pneu-grid{grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);gap:48px;align-items:center}
.project-list{margin-top:0;border-top:1px solid var(--line)}
.project-name-accent{color:var(--accent)}
.project-summary{max-width:760px}
.project-links{display:flex;flex-wrap:wrap;gap:0 28px}.project-links .project-link{gap:15px;margin-top:24px;color:var(--ink);border-color:var(--ink)}
.project-links .project-link:hover{color:var(--accent);border-color:var(--accent)}
.native-diagram{margin:0;padding:23px;border:1px solid #dce2d7;border-radius:6px;background:#eef1eb;min-width:0}
.native-diagram .diagram-caption{margin-bottom:20px;font-size:12px;color:#4e5a4e}
.native-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:22px}
.native-session{display:flex;align-items:center;flex-direction:column;border:1px solid #ccd6c5;border-radius:4px;padding:15px 8px;background:#f8faf6}
.native-mark{width:32px;height:32px;display:grid;place-items:center;margin-bottom:10px}.native-mark img{display:block;width:100%;height:100%;object-fit:contain}
.native-session strong{font-size:15px;font-weight:500}.native-session>span:last-child{font-size:12px;color:#53634e;margin-top:3px}
.native-edge{display:flex;align-items:center;justify-content:center;gap:10px;min-height:84px;padding:10px 0;color:#40573d}
.native-edge svg{width:14px;height:44px;flex:0 0 14px;fill:none;stroke:#7c9373;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round}
.native-edge>span{font:12px/1.6 var(--mono)}.native-edge small{display:block;font:12px/1.6 var(--sans);color:#53634e}
.native-core{display:flex;gap:20px;align-items:center;justify-content:center;padding:18px 14px;border:1px solid #b8c9ab;border-radius:4px;background:#dae5d2;color:#223324}
.native-core>strong{font-size:31px;font-weight:500;letter-spacing:-.06em}.native-core>strong>span{color:#4c714b}
.native-core>div{font-size:14px;line-height:1.5}.native-core small{display:block;font-size:12px;color:#40563c;margin-top:3px}
.project-row .native-diagram p.native-caption{font-size:14px;color:var(--ink);line-height:1.6;margin-top:23px;padding-top:18px;border-top:1px solid #d9e0d3}
.native-extension{display:flex;align-items:center;justify-content:center;gap:14px;margin-top:20px;padding:15px 16px;border:1px dashed #aabca0;border-radius:4px;color:#40573d}
.native-extension svg{width:22px;height:22px;flex:0 0 22px;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round}
.native-extension strong{display:block;font-size:14px;font-weight:500;color:var(--ink)}.native-extension span{display:block;font-size:12px;line-height:1.6;margin-top:3px}
.project-expanded{grid-template-columns:65px minmax(0,1fr);padding:48px 0}.project-content{min-width:0}
.project-heading{display:flex;align-items:start;justify-content:space-between;gap:24px;margin-bottom:24px}.project-heading h3{margin-bottom:0}
.project-heading .project-status{flex-shrink:0;line-height:1.8}
.project-detail-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:48px;align-items:start}
.project-copy p:not(.eyebrow):not(.role-line){font-size:16px;color:var(--ink);line-height:1.85;margin:0 0 18px}
.project-row .project-copy p.project-standfirst{font:29px/1.2 var(--serif);letter-spacing:-.02em;margin-bottom:23px;color:var(--accent)}
.project-copy .role-line{line-height:1.8;margin-top:24px}
.data-diagram{margin:0;background:#eef1eb;border:1px solid #dce2d7;border-radius:6px;padding:23px;min-width:0}
.data-diagram .diagram-caption{color:#4e5a4e;margin-bottom:20px;font-size:12px}
.data-sources{display:flex;flex-wrap:wrap;gap:6px}.data-sources span{flex:1 1 auto;padding:7px 8px;border:1px solid #cad4c5;border-radius:3px;text-align:center;font-size:12px;color:#385337}
.data-edge{display:flex;gap:12px;align-items:center;justify-content:center;padding:7px 0;color:#40573d}
.data-edge svg{width:12px;height:28px;fill:none;stroke:#7c9373;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}
.data-edge>span{font:12px/1.5 var(--mono)}.data-edge small{font:12px/1.5 var(--mono);margin-left:8px;border-left:1px solid #bcc9b4;padding-left:8px;color:#586753}
.data-stage{padding:13px 16px;background:#f8faf6;border:1px solid #ccd6c5;border-radius:4px}
.data-stage strong{font-size:16px;font-weight:500;display:block;color:var(--ink)}.data-stage>span{font-size:13px;line-height:1.6;color:#53634e;display:block;margin-top:3px}
.data-ledger{font-size:12px;color:#52634c;border-top:1px solid #d9e0d3;padding-top:9px;margin-top:10px}
.data-output{background:#dae5d2;border-color:#b8c9ab}
.research-detail{display:grid;grid-template-columns:minmax(0,1fr) 250px;gap:55px;align-items:start}
.research-abstract h4{font:29px/1.2 var(--serif);letter-spacing:-.025em;font-weight:400;color:var(--ink);margin:0 0 27px}
.project-row .research-abstract p:not(.role-line){font-size:17px;line-height:1.8;color:var(--ink);margin:0 0 19px;max-width:74ch}
.project-row .research-abstract p.abstract-label{font:12px/1.6 var(--mono);letter-spacing:.09em;color:#4e5a4e;margin-bottom:13px}
.research-notes{padding-left:25px;border-left:1px solid var(--line);margin-top:4px}
.research-notes>div>span{font:12px/1.5 var(--mono);letter-spacing:.06em;color:#4e5a4e}
.research-notes>div>p{font:27px/1.2 var(--serif)!important;color:var(--accent)!important;margin-top:13px;letter-spacing:-.02em}
.research-notes dl{margin:28px 0 0}.research-notes dt{font:12px/1.5 var(--mono);color:#52614d;margin-top:20px}
.research-notes dd{font-size:14px;line-height:1.7;margin:5px 0 0;color:var(--ink)}
@media(max-width:1050px){.pneu-grid{gap:28px}.native-diagram{padding:18px}.native-grid{gap:14px}.native-core{gap:12px;padding:14px 10px}.native-core>div{font-size:12px}.native-edge{gap:7px}.project-detail-grid{gap:28px}.research-detail{grid-template-columns:minmax(0,1fr) 210px;gap:30px}.project-expanded{grid-template-columns:40px minmax(0,1fr)}.data-diagram{padding:18px}}
@media(max-width:800px){.pneu-grid{grid-template-columns:1fr;gap:32px}.featured-copy .project-description,.featured-copy .project-role{max-width:620px}.native-diagram{max-width:560px;width:100%;justify-self:center}.project-detail-grid{grid-template-columns:1fr;gap:28px}.data-diagram{max-width:560px;width:100%}.research-detail{grid-template-columns:1fr;gap:30px}.research-notes{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin-top:0}.research-notes dl{margin:0}.research-notes dt:first-child{margin-top:0}}
@media(max-width:700px){.project-expanded{grid-template-columns:1fr;gap:14px;padding:35px 0}.project-heading{gap:12px;margin-bottom:22px}.project-heading .project-status{font-size:12px;max-width:125px;text-align:right}.native-diagram{padding:16px}.native-diagram .diagram-caption{font-size:12px;gap:12px}.native-grid{gap:12px}.native-session{padding:13px 5px}.native-session strong{font-size:14px}.native-edge{min-height:97px;gap:6px}.native-edge>span{font-size:12px;line-height:1.6}.native-edge small{font-size:12px}.native-core{flex-direction:column;gap:2px;text-align:center}.native-core>strong{font-size:30px}.native-core>div{font-size:14px}.project-copy p:not(.eyebrow):not(.role-line){font-size:16px}.project-row .project-copy p.project-standfirst{font-size:28px}.research-abstract h4{font-size:28px}.research-notes{padding-left:18px;gap:20px}.research-notes>div>p{font-size:24px!important}.project-links{gap:0 20px}.project-links .project-link{font-size:14px;gap:10px}.data-edge small{font-size:12px}}
@media(max-width:400px){.native-edge{flex-direction:column;gap:5px;min-height:124px;text-align:center}.native-edge svg{height:28px;flex-basis:28px}.native-edge>span{font-size:12px;overflow-wrap:anywhere}.native-grid{gap:10px}.native-session strong{font-size:13px}.native-diagram{padding:13px}.native-diagram .diagram-caption{font-size:12px;flex-wrap:wrap}.research-notes{grid-template-columns:1fr}.data-diagram .diagram-caption{font-size:12px;flex-wrap:wrap}}
@media(max-width:600px){.project-heading{flex-direction:column;gap:6px}.project-heading .project-status{max-width:none;text-align:left}.project-summary{max-width:none}}

/* Draw link indicators as paths so mobile fonts cannot substitute emoji. */
.link-arrow{display:inline-block;width:1em;height:1em;vertical-align:-.125em;flex-shrink:0}

/* Earlier research */
.record-grid{display:grid;grid-template-columns:1fr 1fr;border-top:1px solid var(--line);margin-top:16px}
.record-card{padding:30px 34px 34px 0;border-bottom:1px solid var(--line)}
.record-card:nth-child(even){padding:30px 0 34px 34px;border-left:1px solid var(--line)}
.record-meta{font:12px/1.5 var(--mono);letter-spacing:.08em;color:var(--accent)}
.record-card h3{font-family:var(--serif);font-size:27px;font-weight:400;line-height:1.25;letter-spacing:-.025em;margin:12px 0 12px}
.record-card p:not(.record-meta){color:var(--muted);font-size:16px;line-height:1.7;max-width:520px}
.cv-job .cv-detail{font-size:15px;color:var(--muted);margin-top:6px}
@media(max-width:700px){.record-grid{grid-template-columns:1fr}.record-card,.record-card:nth-child(even){padding:26px 0;border-left:0}.record-card h3{font-size:24px}}
