@font-face{font-family:Instrument Sans;font-style:normal;font-weight:400 700;font-stretch:100%;font-display:swap;src:url(../media/c7f47671e39f7787-s.06cvo47x4w1en.woff2?dpl=dpl_7VzkDX7M1qQcYRUKzFjHUPSHhwbk)format("woff2");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-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Instrument Sans;font-style:normal;font-weight:400 700;font-stretch:100%;font-display:swap;src:url(../media/f06bf9da926bae75-s.p.0pz0x0eczp58u.woff2?dpl=dpl_7VzkDX7M1qQcYRUKzFjHUPSHhwbk)format("woff2");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}@font-face{font-family:Instrument Sans Fallback;src:local(Arial);ascent-override:94.42%;descent-override:24.33%;line-gap-override:0.0%;size-adjust:102.74%}.instrument_sans_dd0ece85-module__hccXaq__className{font-family:Instrument Sans,Instrument Sans Fallback;font-style:normal}.instrument_sans_dd0ece85-module__hccXaq__variable{--font-sans:"Instrument Sans", "Instrument Sans Fallback"}
:root{--paper:#fbfaf7;--white:#fff;--hairline:#e7e4dc;--ink:#191817;--ink-muted:#5f5b52;--dusty:#6b8fa3;--dusty-ink:#48677a;--olive:#556b3f;--sienna:#8b5a2b;--bg:var(--paper);--surface:var(--white);--line:var(--hairline);--text:var(--ink);--muted:var(--ink-muted);--accent:var(--dusty);--accent-text:var(--dusty-ink);--accent-wash:#6b8fa31f;--success:var(--olive);--warn:var(--sienna);--error:#9a3b2e;--on-accent:var(--paper);--shadow:0 1px 2px #1918170d, 0 14px 36px #19181714;--font:var(--font-sans), "Instrument Sans", system-ui, sans-serif;--fs-meta:.875rem;--fs-small:.9375rem;--fs-body:1.0625rem;--fs-lead:clamp(1.125rem, 1.5vw, 1.3125rem);--fs-h3:1.25rem;--fs-h2:clamp(1.875rem, 3.2vw, 2.625rem);--fs-h1:clamp(2.375rem, 5vw, 3.75rem);--fs-figure:clamp(1.75rem, 2.8vw, 2.375rem);--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--space-7:48px;--space-8:64px;--section-y:clamp(40px, 5vw, 64px);--gutter:clamp(20px, 5vw, 40px);--container:1120px;--radius-sm:8px;--radius-md:12px;--ease-out:cubic-bezier(.23, 1, .32, 1);--dur-press:.12s;--dur-hover:.18s;--dur-enter:.28s;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial;--bg:#141413;--surface:#1c1b19;--line:#2e2c28;--text:#edebe6;--muted:#a8a397;--accent:#7fa2b5;--accent-text:#9dbbcb;--accent-wash:#7fa2b524;--success:#9cb57e;--warn:#d4a373;--error:#e08a7a;--on-accent:#141413;--shadow:0 1px 2px #0006, 0 14px 36px #00000059}}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-padding-top:88px}@media (prefers-reduced-motion:no-preference){html{scroll-behavior:smooth}}body{background:var(--bg);color:var(--text);font-family:var(--font);font-size:var(--fs-body);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin:0;line-height:1.6}img,video{max-width:100%;display:block}h1,h2,h3,p,ul,dl,dd,figure{margin:0}ul,ol{margin:0;padding:0;list-style:none}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}a{color:inherit}::selection{background:var(--accent-wash)}:focus-visible{outline:2px solid var(--accent-text);outline-offset:3px;border-radius:4px}.skip{z-index:20;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-sm);padding:10px 16px;font-weight:600;position:absolute;top:12px;left:-9999px}.skip:focus{left:16px}.container{width:min(var(--container), 100% - 2 * var(--gutter));margin-inline:auto}.num{font-variant-numeric:tabular-nums}.site-header{z-index:10;background:color-mix(in srgb, var(--bg) 88%, transparent);-webkit-backdrop-filter:saturate(140%)blur(10px);border-bottom:1px solid var(--line);position:sticky;top:0}.site-header .bar{justify-content:space-between;align-items:center;gap:var(--space-5);height:64px;display:flex}.wordmark{font-weight:600;font-size:var(--fs-body);letter-spacing:-.01em;white-space:nowrap;text-decoration:none}.nav{align-items:center;gap:28px;display:flex}.nav-link{font-size:var(--fs-small);color:var(--muted);transition:color var(--dur-hover) var(--ease-out);padding-block:12px;text-decoration:none}.nav-link:hover{color:var(--text)}@media (max-width:760px){.nav-link{display:none}}.btn{justify-content:center;align-items:center;gap:var(--space-2);border-radius:var(--radius-sm);min-height:44px;font:inherit;font-size:var(--fs-small);white-space:nowrap;cursor:pointer;transition:background-color var(--dur-hover) var(--ease-out), border-color var(--dur-hover) var(--ease-out), color var(--dur-hover) var(--ease-out), transform var(--dur-press) var(--ease-out);border:1px solid #0000;padding:0 18px;font-weight:600;line-height:1;text-decoration:none;display:inline-flex}.btn:active{transform:scale(.97)}.btn-primary{background:var(--accent-text);color:var(--on-accent)}.btn-primary:hover{background:color-mix(in srgb, var(--accent-text) 84%, var(--text))}.btn-secondary{background:var(--surface);border-color:var(--line);color:var(--text)}.btn-secondary:hover{border-color:color-mix(in srgb, var(--line) 40%, var(--muted))}.btn svg{flex:none}.hero{padding-block:clamp(28px,4vw,44px) clamp(36px,5vw,60px)}.hero-grid{grid-template-columns:minmax(0,1.45fr) minmax(0,.55fr);align-items:center;gap:clamp(32px,6vw,88px);display:grid}.hero h1{font-size:var(--fs-h1);letter-spacing:-.032em;text-wrap:balance;max-width:22ch;font-weight:600;line-height:1.04}.hero h1 .h1-second{color:var(--accent-text);display:block}.hero .lead{margin-top:var(--space-5);font-size:var(--fs-lead);color:var(--muted);text-wrap:pretty;max-width:44ch}.actions{gap:var(--space-3);flex-wrap:wrap;margin-top:28px;display:flex}.portrait{border-radius:var(--radius-md);border:1px solid var(--line);box-shadow:var(--shadow);aspect-ratio:4/5;background:var(--surface);overflow:hidden}.portrait img{object-fit:cover;object-position:center 18%;width:100%;height:100%}.hero-side{justify-self:end;width:min(100%,232px)}.facts{font-size:var(--fs-small);color:var(--muted);gap:6px;margin-top:14px;display:grid}@media (max-width:860px){.hero-grid{grid-template-columns:1fr;align-items:start}.hero-side{grid-template-columns:112px minmax(0,1fr);justify-self:start;align-items:center;gap:16px;width:100%;display:grid}.hero-side .facts{margin-top:0}}@media (prefers-reduced-motion:no-preference){.rise{animation:rise var(--dur-enter) var(--ease-out) both}.rise-2{animation-delay:60ms}.rise-3{animation-delay:.12s}.rise-4{animation-delay:.18s}}@keyframes rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}.section{padding-block:var(--section-y);border-top:1px solid var(--line)}.section-head{max-width:60ch;margin-bottom:clamp(24px,3vw,36px)}.section-head h2{font-size:var(--fs-h2);letter-spacing:-.022em;text-wrap:balance;font-weight:600;line-height:1.12}.section-head p{font-size:var(--fs-lead);color:var(--muted);text-wrap:pretty;margin-top:10px}.band{background:var(--surface)}.lifecycle{grid-template-columns:repeat(5,minmax(0,1fr));gap:0 28px;display:grid}.stage{border-top:2px solid var(--accent);padding-top:20px}.stage h3{font-size:var(--fs-small);margin-bottom:16px;font-weight:600}.proof+.proof{margin-top:20px}.figure{font-size:var(--fs-figure);letter-spacing:-.03em;font-variant-numeric:tabular-nums;font-weight:600;line-height:1}.proof p{font-size:var(--fs-small);color:var(--muted);margin-top:8px;line-height:1.5}.src{font-size:var(--fs-meta);color:var(--accent-text);margin-top:6px;font-weight:600;display:block}@media (max-width:1080px){.lifecycle{grid-template-columns:repeat(3,minmax(0,1fr));gap:48px 28px}}@media (max-width:680px){.lifecycle{grid-template-columns:1fr;gap:28px}.stage{grid-template-columns:repeat(2,minmax(0,1fr));gap:0 16px;padding-top:14px;display:grid}.stage h3{grid-column:1/-1;margin-bottom:10px}.proof+.proof{margin-top:0}}.jobs{border-top:1px solid var(--line)}.job{border-bottom:1px solid var(--line);grid-template-columns:minmax(0,240px) minmax(0,1fr);gap:8px 48px;padding-block:22px;display:grid}.job-co{font-size:var(--fs-h3);letter-spacing:-.01em;font-weight:600}.job-dates{font-size:var(--fs-small);color:var(--muted);margin-top:4px}.job-summary{color:var(--muted);max-width:70ch;margin-top:6px}.role+.role{margin-top:16px}.role-title{font-weight:600}.bullets{gap:6px;margin-top:8px;line-height:1.55;display:grid}.bullets li{max-width:72ch;padding-left:20px;position:relative}.bullets li:before{content:"";background:var(--accent);width:8px;height:2px;position:absolute;top:.8em;left:0}.inline-link{min-height:44px;color:var(--accent-text);font-weight:600;font-size:var(--fs-small);align-items:center;gap:6px;margin-top:6px;text-decoration:none;display:inline-flex}.inline-link:hover{text-underline-offset:3px;text-decoration:underline}@media (max-width:760px){.job{grid-template-columns:1fr}}.lead-pair{grid-template-columns:repeat(2,minmax(0,1fr));gap:clamp(32px,4vw,56px);display:grid}.lead-build .media{margin-bottom:18px}.lead-build .media img{aspect-ratio:16/9;object-fit:cover;object-position:top}.builds-gap{border-top:1px solid var(--line);margin-top:clamp(32px,4vw,48px);padding-top:clamp(28px,4vw,44px)}@media (max-width:860px){.lead-pair{grid-template-columns:1fr}}.feature{grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);align-items:start;gap:clamp(28px,4vw,56px);display:grid}.build-top{align-items:center;gap:var(--space-3);flex-wrap:wrap;display:flex}.build-name{letter-spacing:-.02em;font-size:clamp(1.5rem,2.4vw,1.875rem);font-weight:600;line-height:1.15}.status{font-size:var(--fs-meta);color:var(--muted);border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);align-items:center;padding:3px 10px;font-weight:600;display:inline-flex}.status-live{color:var(--success);border-color:color-mix(in srgb, var(--success) 35%, var(--line))}.build-what{margin-top:10px}.build-built{color:var(--muted);margin-top:8px}.proof-band{gap:var(--space-4);border-radius:var(--radius-md);background:var(--accent-wash);grid-template-columns:repeat(2,minmax(0,1fr));margin-top:16px;padding:16px 18px;display:grid}.proof-band .figure{font-size:clamp(1.5rem,2.4vw,2rem)}.proof-band p{font-size:var(--fs-small);color:var(--muted);margin-top:8px}.proof-note{font-size:var(--fs-small);color:var(--muted);margin-top:14px}.stack{flex-wrap:wrap;gap:6px;margin-top:14px;display:flex}.chip{font-size:var(--fs-meta);color:var(--muted);border:1px solid var(--line);border-radius:var(--radius-sm);background:var(--surface);padding:3px 9px;line-height:1.4}.media{border-radius:var(--radius-md);border:1px solid var(--line);box-shadow:var(--shadow);background:var(--surface);display:block;overflow:hidden}.media img,.media video{width:100%;height:auto}a.media{transition:transform var(--dur-hover) var(--ease-out)}@media (hover:hover){a.media:hover{transform:translateY(-3px)}}.builds-list{gap:clamp(32px,4vw,48px);margin-top:clamp(32px,4vw,48px);display:grid}.build-row{grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);align-items:center;gap:clamp(24px,4vw,56px);display:grid}.ext{min-height:44px;color:var(--accent-text);font-weight:600;font-size:var(--fs-small);align-items:center;gap:6px;margin-top:2px;text-decoration:none;display:inline-flex}.ext:hover{text-underline-offset:3px;text-decoration:underline}@media (max-width:860px){.feature,.build-row{grid-template-columns:1fr}}.skills-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:24px 56px;display:grid}.skill-block+.skill-block{margin-top:20px}.skill-block h3{font-size:var(--fs-small);margin-bottom:10px;font-weight:600}.tags{gap:var(--space-2);flex-wrap:wrap;display:flex}.creds{border-top:1px solid var(--line);grid-template-columns:minmax(0,1.4fr) minmax(0,1fr) minmax(0,1fr);gap:28px 40px;margin-top:32px;padding-top:28px;display:grid}.creds h3{font-size:var(--fs-small);margin-bottom:10px;font-weight:600}.creds ul{font-size:var(--fs-small);color:var(--muted);gap:4px;display:grid}@media (max-width:860px){.skills-grid,.creds{grid-template-columns:1fr}}@media (max-width:680px){.tags{color:var(--muted);font-size:var(--fs-small);line-height:1.6;display:block}.tags .chip{font-size:inherit;background:0 0;border:0;padding:0;display:inline}.tags .chip:not(:last-child):after{content:", "}.creds ul{line-height:1.6;display:block}.creds li{display:inline}.creds li:not(:last-child):after{content:", "}}.contact h2{letter-spacing:-.03em;font-size:clamp(2.25rem,5vw,3.5rem);font-weight:600;line-height:1.05}.contact .lead{margin-top:var(--space-4);font-size:var(--fs-lead);color:var(--muted)}.contact .address{letter-spacing:-.01em;word-break:break-word;margin-top:18px;font-size:clamp(1.25rem,2.4vw,1.75rem);font-weight:600}.outside{font-size:var(--fs-small);color:var(--muted);margin-top:28px}.site-footer{border-top:1px solid var(--line);font-size:var(--fs-meta);color:var(--muted);padding-block:28px}.site-footer .bar{justify-content:space-between;gap:var(--space-4);flex-wrap:wrap;display:flex}.site-footer a{color:var(--muted)}.missing{place-content:center;gap:var(--space-4);text-align:center;min-height:70dvh;display:grid}.missing h1{font-size:var(--fs-h2);letter-spacing:-.02em;font-weight:600}@media print{.site-header,.actions,.skip,video,.media{display:none!important}.section{break-inside:avoid;padding-block:24px}body{color:#111;background:#fff}}.work-intro{padding-block:clamp(32px,5vw,64px) clamp(24px,3vw,40px)}.work-intro h1{font-size:var(--fs-h1);letter-spacing:-.03em;text-wrap:balance;max-width:18ch;font-weight:600;line-height:1.05}.work-intro .lead{font-size:var(--fs-lead);color:var(--muted);text-wrap:pretty;max-width:60ch;margin-top:16px}.work-intro .back{margin-bottom:20px}.work-meta{flex-wrap:wrap;align-items:center;gap:10px 14px;margin-bottom:14px;display:flex}.work-label{font-size:var(--fs-small);color:var(--accent-text)}.work-list{gap:clamp(36px,5vw,56px);display:grid}.work-row{grid-template-columns:minmax(0,520px) minmax(0,1fr);align-items:center;gap:clamp(20px,4vw,48px);display:grid}.work-title{font-size:var(--fs-h3);letter-spacing:-.01em;margin-top:12px;font-weight:600;line-height:1.25}.work-title a{text-decoration:none}.work-title a:hover{color:var(--accent-text)}.work-summary{color:var(--muted);text-wrap:pretty;max-width:52ch;margin-top:8px}.work-row .inline-link{margin-top:14px}.slides{gap:clamp(24px,3vw,36px);display:grid}.slide-frame img{-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.slide-count{font-size:var(--fs-meta);color:var(--muted);text-align:right;margin-top:10px}.work-next{flex-wrap:wrap;gap:12px;margin-top:clamp(36px,5vw,56px);display:flex}.home-work{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px 32px;display:flex}@media (max-width:860px){.work-row{grid-template-columns:1fr}}.resume{color:#191817;background:#fff;max-width:7.5in;margin:0 auto;padding:.5in 0;font-size:9.6pt;line-height:1.38}.resume h1{letter-spacing:-.02em;font-size:22pt;font-weight:600;line-height:1.05}.resume .r-role{color:#48677a;margin-top:3pt;font-size:11pt;font-weight:500}.resume .r-contact{color:#5f5b52;margin-top:4pt;font-size:9pt}.resume .r-head{border-bottom:1px solid #191817;padding-bottom:9pt}.resume .r-summary{margin-top:9pt}.resume h2{letter-spacing:.08em;text-transform:uppercase;color:#48677a;margin-top:12pt;margin-bottom:4pt;font-size:8.5pt;font-weight:600}.resume .r-job{break-inside:avoid;border-top:1px solid #e7e4dc;padding:6pt 0}.resume .r-job-top{justify-content:space-between;align-items:baseline;gap:12pt;display:flex}.resume h3{font-size:10.5pt;font-weight:600}.resume .r-job-top span,.resume .r-job-summary{color:#5f5b52;font-size:9pt}.resume .r-title{margin-top:2pt;font-weight:600}.resume ul{margin-top:2pt;padding-left:12pt;list-style:outside}.resume li{margin-top:1.5pt}.resume .r-cols{break-inside:avoid;grid-template-columns:1.3fr 1fr;gap:18pt;display:grid}.resume .r-cols p{margin-top:3pt}@media print{@page{size:letter;margin:.5in}.resume{max-width:none;padding:0}}
