:root{color:#222725;font-synthesis:none;--ink:#222725;--muted:#68716c;--line:#e0e5df;--green:#24634b;--pale-green:#edf4ee;--paper:#fff;--mono:"SFMono-Regular", Consolas, "Liberation Mono", monospace;background:#fafbf9;font-family:DM Sans Variable,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif}*{box-sizing:border-box;letter-spacing:0}html{scroll-behavior:smooth;scroll-padding-top:100px}body{-webkit-font-smoothing:antialiased;min-width:320px;margin:0;line-height:1.65}body::selection{background:#d9e9dd}a{color:inherit;text-underline-offset:4px;text-decoration:none}a,button,input,select{-webkit-tap-highlight-color:transparent}a:hover{color:var(--green)}button,input,select{font:inherit;color:inherit}button,select{cursor:pointer}button{border:none}button,a,input,select{touch-action:manipulation}:focus-visible{outline:2px solid var(--green);outline-offset:5px}svg{vertical-align:middle;flex-shrink:0}img{max-width:100%;display:block}h1,h2,h3,h4,p{margin:0}h1,h2,h3,h4{font-weight:550;line-height:1.3}[hidden]{display:none!important}.sr-only{clip:rect(0,0,0,0);white-space:nowrap;width:1px;height:1px;padding:0;position:absolute;overflow:hidden}.skip-link{z-index:20;background:var(--ink);color:#fff;padding:8px 16px;position:fixed;top:-60px;left:12px}.skip-link:focus{top:12px}.site-header{border-bottom:1px solid var(--line);background:#fafbf9}.header-inner{align-items:center;gap:64px;max-width:1120px;min-height:84px;margin:auto;padding:0 40px;display:flex}.wordmark{font-size:32px;font-weight:700;line-height:1}.wordmark span{color:var(--green)}.site-header nav{align-self:stretch;gap:30px;display:flex}.site-header nav a{color:var(--muted);align-items:center;font-size:14px;font-weight:500;display:flex;position:relative}.site-header nav a:hover,.site-header nav a[aria-current]{color:var(--ink)}.site-header nav a[aria-current]:after{content:"";background:var(--green);height:2px;position:absolute;bottom:-1px;left:0;right:0}.header-actions{align-items:center;gap:20px;margin-left:auto;display:flex}.icon-link{justify-content:center;align-items:center;width:32px;height:40px;display:inline-flex}.site-main{max-width:1120px;min-height:calc(100vh - 225px);margin:auto;padding:0 40px 64px}.home-profile{padding-bottom:32px}.profile-intro{justify-content:space-between;align-items:center;gap:50px;padding:36px 0;display:flex}.eyebrow{font-family:var(--mono);color:var(--muted);font-size:11px;font-weight:400;line-height:1.6}.profile-intro h1{font-size:46px;font-weight:600}.name-period{color:var(--green)}.profile-links{gap:25px;margin-top:23px;display:flex}.profile-links a{align-items:center;gap:8px;font-size:13px;display:inline-flex}.profile-resume .resume-document{max-width:850px}.work-history{gap:24px;display:grid}.work-entry{break-inside:avoid;grid-template-columns:112px minmax(0,1fr) auto;align-items:center;gap:28px;display:grid}.company-logo{object-fit:contain;width:112px;height:40px}.work-description h2{font-size:18px;font-weight:600}.work-description p{color:var(--muted);margin-top:4px;font-size:14px}.work-dates{font-family:var(--mono);color:var(--muted);white-space:nowrap;font-size:12px}.resume-awards{margin-top:30px}.resume-awards h2{font-size:18px;font-weight:600}.resume-awards ul{gap:10px;margin:14px 0 0;padding:0;list-style:none;display:grid}.resume-awards li{font-size:14px}.profile-avatar{object-fit:cover;outline:1px solid var(--line);border:5px solid #fff;border-radius:50%;width:132px;height:132px;margin-right:16px}.selected-section{border-top:1px solid var(--line);padding-top:32px}.section-heading{justify-content:space-between;align-items:center;gap:20px;margin-bottom:22px;display:flex}.section-heading h2{font-size:24px}.text-link{color:var(--green);align-items:center;gap:8px;font-size:13px;font-weight:500;display:inline-flex}.text-link:hover{text-decoration:underline}.project-identity{align-items:center;gap:14px;min-width:0;display:flex}.project-avatar{object-fit:contain;flex-shrink:0;width:44px;height:44px}.project-copy{min-width:0}.project-organization{color:#53645a;font-size:13px;font-weight:500;line-height:1.5;display:inline-block}.project-heading{margin-top:3px;font-size:29px;font-weight:650;line-height:1.25}.project-heading a{align-items:center;gap:10px;display:inline-flex}.project-heading svg{color:var(--muted)}.status{white-space:nowrap;border-radius:4px;align-items:center;gap:4px;padding:2px 7px;font-family:inherit;font-size:10px;font-weight:500;line-height:1.6;display:inline-flex}.merged{color:#41644e;background:#edf4ed}.open{color:#27667a;background:#edf4f7}.draft{color:#666a71;background:#f0f1f3}.closed{color:#9e5252;background:#f9eeee}.tag-list{flex-wrap:wrap;gap:6px;display:flex}.tag-list>span{font-family:var(--mono);border:1px solid var(--line);color:#626c65;border-radius:3px;padding:2px 7px;font-size:10px;line-height:1.8}.contribution-detail{grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:18px;margin-top:10px;display:grid}.contribution-title{font-size:15px;font-weight:500;line-height:1.6}.contribution-title a{align-items:center;gap:8px;display:inline-flex}.contribution-title svg{color:var(--muted)}.contribution-pr{color:var(--muted);font-family:var(--mono);align-items:center;gap:5px;font-size:11px;display:inline-flex}.projects-section{border-top:1px solid var(--line);margin-top:48px;padding-top:32px}.personal-project{grid-template-columns:72px minmax(0,1fr);align-items:start;gap:24px;display:grid}.personal-project+.personal-project{margin-top:28px}.personal-project-logo{object-fit:contain;width:72px;height:72px}.personal-project-copy h3{font-size:26px;font-weight:600}.personal-project-copy h3 a{align-items:center;gap:10px;display:inline-flex}.personal-project-copy h3 svg{color:var(--muted)}.personal-project-copy p{color:var(--muted);margin-top:10px;font-size:14px;line-height:1.8}.personal-project-copy .tag-list{margin-top:14px}.writing-preview{border-top:1px solid var(--line);margin-top:48px;padding-top:29px}.writing-preview h2{font-size:20px}.writing-preview .section-heading{margin-bottom:14px}.muted-icon{color:#88918a}.quiet-copy{color:var(--muted);font-size:13px;line-height:1.9}.writing-preview>.text-link{margin-top:18px}.site-footer{border-top:1px solid var(--line);max-width:1040px;color:var(--muted);flex-wrap:wrap;align-items:center;gap:14px 25px;margin:auto;padding:23px 0 26px;font-size:11px;display:flex}.site-footer>div{flex:1}.site-footer>div a{color:var(--ink);font-weight:550}.site-footer>a{align-items:center;gap:5px;display:inline-flex}.site-footer>small{font-size:10px;font-family:var(--mono)}.page-heading{padding:52px 0 30px}.page-heading h1{font-size:36px}.page-heading p:not(.eyebrow){color:var(--muted);margin-top:11px;font-size:15px}.filter-bar{border-block:1px solid var(--line);align-items:center;gap:12px;padding:18px 0;display:flex}.search-field,.select-field{border:1px solid var(--line);background:#fff;border-radius:5px;align-items:center;gap:9px;min-height:42px;padding:0 12px;display:flex}.search-field{color:var(--muted);flex:1}.search-field input{background:0 0;border:0;outline:0;width:100%;min-width:0;font-size:13px}.search-field:focus-within,.select-field:focus-within{outline:2px solid var(--green);outline-offset:2px}.select-field{font-size:12px}.select-field select{background:0 0;border:0;outline:0;max-width:220px;min-height:40px}.results-meta{color:var(--muted);justify-content:flex-end;padding:18px 0 5px;font-size:11px;display:flex}.pr-row{border-bottom:1px solid var(--line);padding:27px 0}.pr-header{justify-content:space-between;align-items:center;gap:15px;display:flex}.pr-title{margin-top:22px;font-size:17px;font-weight:500;line-height:1.6}.pr-title svg{color:var(--muted);margin-left:10px}.pr-description{color:var(--muted);max-width:760px;margin-top:9px;font-size:13px;line-height:1.8}.pr-subline{color:var(--muted);flex-wrap:wrap;align-items:center;gap:16px;margin-top:12px;font-size:12px;display:flex}.pr-subline>a:first-child{font-family:var(--mono)}.case-study-link{color:var(--green);align-items:center;gap:5px;display:inline-flex}.source-note{color:var(--muted);max-width:800px;margin-top:27px;font-size:11px;line-height:1.9}.source-note a{text-decoration:underline}.empty-state{text-align:center;padding:64px 20px}.empty-state>svg{color:#8a9e8f;margin-bottom:20px}.empty-state h2{font-size:23px}.empty-state p{color:var(--muted);margin-top:12px;font-size:14px}.empty-state .text-link,.empty-state .button{margin-top:25px}.notebook-empty{border-top:1px solid var(--line);margin-top:10px;padding:90px 20px 120px}.not-found{padding-block:120px}.not-found h1{margin-top:10px;font-size:34px}.button{background:var(--green);color:#fff;white-space:nowrap;border-radius:5px;justify-content:center;align-items:center;gap:8px;min-height:42px;padding:10px 15px;font-size:13px;display:inline-flex}.button:hover{color:#fff;background:#1e543f}.button.secondary{color:var(--ink);border:1px solid var(--line);background:#fff}.button.secondary:hover{border-color:#9aafa1}.back-link{color:var(--muted);align-items:center;gap:8px;margin-top:32px;font-size:12px;display:inline-flex}.article-heading{border-bottom:1px solid var(--line);padding:32px 0 30px}.article-heading h1{max-width:820px;margin-top:12px;font-size:36px;line-height:1.35}.article-description{color:var(--muted);max-width:750px;margin-top:17px;font-size:16px;line-height:1.8}.article-meta{color:var(--muted);flex-wrap:wrap;align-items:center;gap:15px;margin-top:22px;font-size:11px;display:flex}.article-meta a{overflow-wrap:anywhere;align-items:center;gap:6px;display:inline-flex}.article-heading .tag-list{margin-top:18px}.article-layout{grid-template-columns:minmax(0,740px) minmax(160px,1fr);gap:52px;padding-top:30px;display:grid}.prose{color:#3c453f;overflow-wrap:break-word;min-width:0;font-size:15px;line-height:1.95}.prose>:first-child{margin-top:0}.prose h2{color:var(--ink);margin:40px 0 15px;padding-top:5px;font-size:24px}.prose h3{color:var(--ink);margin:27px 0 12px;font-size:18px}.prose p{margin:17px 0}.prose ul,.prose ol{margin:15px 0;padding-left:23px}.prose li{margin:8px 0;padding-left:3px}.prose a{color:var(--green);overflow-wrap:anywhere;text-decoration:underline}.prose strong{color:var(--ink);font-weight:600}.prose code{font-family:var(--mono);overflow-wrap:anywhere;background:#eff2ee;border-radius:3px;padding:3px 5px;font-size:.84em}.prose pre{border:1px solid var(--line);border-radius:5px;padding:20px;font-size:12px;line-height:1.8;overflow-x:auto}.prose pre code{font-size:inherit;overflow-wrap:normal;background:0 0;padding:0}.prose blockquote{color:var(--muted);border-left:2px solid #a6bbaa;margin:24px 0;padding:2px 0 2px 19px;font-size:13px}.prose blockquote p{margin:5px 0}.prose table{border-collapse:collapse;width:100%;margin:24px 0;font-size:12px;display:block;overflow-x:auto}.prose th,.prose td{border:1px solid var(--line);text-align:left;min-width:95px;padding:10px 13px}.prose th{background:#f0f3ef;font-weight:550}.article-sidebar{border-left:1px solid var(--line);align-self:start;padding-left:20px;position:sticky;top:30px}.article-sidebar nav{flex-direction:column;gap:12px;margin-top:18px;display:flex}.article-sidebar nav a{color:var(--muted);font-size:12px;line-height:1.6}.article-sidebar nav a:hover{color:var(--green)}.article-sidebar .text-link{align-items:flex-start;margin-top:30px;font-size:11px}.resume-contact{color:var(--muted);border-bottom:1px solid var(--line);align-items:center;gap:8px;padding-bottom:27px;font-size:13px;display:flex}.resume-section{max-width:850px;padding-top:32px}.resume-section>h2{color:var(--green);text-transform:uppercase;font-size:12px;font-family:var(--mono);margin-bottom:17px}.resume-section>p{color:#4c5750;font-size:14px;line-height:1.9}.resume-tags{margin-top:20px}.experience{margin-top:22px}.experience-heading{justify-content:space-between;align-items:center;gap:15px;display:flex}.experience-heading h3{font-size:21px}.experience-heading h3 a{align-items:center;gap:9px;display:inline-flex}.experience-heading>span{color:var(--muted);white-space:nowrap;font-size:12px}.experience-area{color:var(--muted);margin-top:7px;font-size:13px}.resume-contribution{margin-top:26px}.resume-contribution h4{font-size:16px}.resume-contribution ul{color:#4c5750;padding-left:19px;font-size:13px;line-height:1.85}.resume-contribution li{margin:8px 0;padding-left:3px}.resume-pr-links{flex-wrap:wrap;gap:20px;margin-top:27px;display:flex}.resume-pr-links a{font-size:12px;font-family:var(--mono);align-items:center;gap:8px;display:inline-flex}.writing-row{border-top:1px solid var(--line);grid-template-columns:130px 1fr;gap:25px;padding:30px 0;display:grid}.writing-row time{color:var(--muted);font-size:12px}.writing-row h2{font-size:22px}.writing-row h2 svg{margin-left:12px}.writing-row p{color:var(--muted);margin:12px 0 15px;font-size:14px}.post-row{border-bottom:1px solid var(--line);gap:10px;padding:12px 0;font-size:13px;display:flex}.post-row time{color:var(--muted);margin-left:auto;font-size:11px}@media (width<=800px){.header-inner{gap:35px;padding-inline:28px}.site-header nav{gap:22px}.site-main{padding-inline:28px}.site-footer{margin-inline:28px}.profile-intro{gap:25px}.profile-avatar{width:105px;height:105px;margin-right:0}.article-layout{grid-template-columns:minmax(0,1fr);gap:25px}.article-sidebar{display:none}}@media (width<=600px){.header-inner{flex-wrap:wrap;gap:0;min-height:110px;padding:19px 20px 0}.wordmark{font-size:29px}.header-actions{gap:16px}.site-header nav{order:3;justify-content:space-between;gap:12px;width:100%;height:49px;margin-top:7px}.site-header nav a{font-size:12px}.site-main{padding:0 20px 42px}.profile-intro{align-items:flex-start;gap:12px;padding:36px 0 31px;position:relative}.profile-copy{flex:1;min-width:0}.profile-intro h1{margin-top:11px;font-size:33px}.profile-links{gap:23px;margin-top:19px}.profile-links a{font-size:12px}.profile-avatar{border-width:3px;width:54px;height:54px;position:absolute;top:38px;right:1px}.selected-section{padding-top:29px}.section-heading{align-items:flex-end;gap:10px;margin-bottom:18px}.section-heading h2{font-size:20px}.section-heading .text-link{white-space:nowrap;gap:5px;padding-bottom:2px;font-size:11px}.eyebrow{font-size:9px}.project-identity{gap:11px}.project-heading{font-size:27px}.project-organization{font-size:12px}.writing-preview{margin-top:32px;padding-top:25px}.site-footer{gap:12px;margin-inline:20px;padding-block:19px 25px;font-size:10px}.site-footer>div{flex-basis:calc(100% - 65px)}.site-footer>small{flex-basis:100%;font-size:9px}.page-heading{padding-top:35px;padding-bottom:23px}.page-heading h1{font-size:30px}.page-heading p:not(.eyebrow){font-size:13px}.filter-bar{flex-wrap:wrap;gap:9px}.search-field{flex-basis:100%}.select-field{flex:1;min-width:0;padding-inline:9px;font-size:11px}.select-field select{width:100%;min-width:0;max-width:100%}.results-meta{font-size:9px}.pr-row{padding-block:24px}.pr-title{font-size:16px}.pr-description{font-size:12px}.pr-subline{gap:12px;font-size:11px}.source-note{font-size:10px}.notebook-empty{padding:65px 10px 85px}.empty-state h2{font-size:22px}.empty-state p{font-size:13px}.back-link{margin-top:26px;font-size:11px}.article-heading{padding-top:25px}.article-heading h1{font-size:29px}.article-description{font-size:14px}.article-meta{gap:10px;font-size:10px}.article-meta a{flex-basis:100%}.article-layout{padding-top:25px}.prose{font-size:14px}.prose h2{margin-top:30px;font-size:21px}.prose h3{font-size:17px}.prose pre{padding:14px;font-size:11px}.resume-contact{padding-bottom:22px;font-size:12px}.resume-section{padding-top:27px}.resume-section>p{font-size:13px}.experience-heading{flex-wrap:wrap;align-items:flex-start;gap:7px}.experience-heading h3{font-size:20px}.experience-heading>span{font-size:11px}.experience-area{font-size:12px}.writing-row{grid-template-columns:minmax(0,1fr);gap:9px}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition:none!important;animation:none!important}}@media print{@page{size:A4;margin:16mm}:root{background:#fff}body{color:#000;min-width:0}.site-header,.site-footer,.skip-link,.source-note{display:none!important}.site-main{max-width:none;min-height:0;padding:0}.page-heading{padding:0 0 15px}.page-heading h1{font-size:28px}.resume-contact{padding-bottom:14px}.resume-section{max-width:none;padding-top:20px}.resume-section>h2{margin-bottom:12px;font-size:11px}.resume-section>p,.resume-contribution ul{font-size:11px;line-height:1.6}.experience-heading h3{font-size:19px}.resume-contribution{break-inside:avoid;margin-top:18px}.resume-contribution h4{font-size:14px}.resume-contribution li{margin-block:5px}a{color:inherit!important}.status{border:1px solid #ddd}.tag-list>span{font-size:8px}}@font-face{font-family:DM Sans Variable;font-style:normal;font-display:swap;font-weight:100 1000;src:url(/_astro/dm-sans-latin-ext-wght-normal.BOFOeGcA.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:DM Sans Variable;font-style:normal;font-display:swap;font-weight:100 1000;src:url(/_astro/dm-sans-latin-wght-normal.Xz1IZZA0.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
