:root{color-scheme:light;--background:#f7f7f5;--text:#1d1d1b;--muted:#777772;--faint:#aaa9a3;--line:#deded9;--hover:#ecece8}*{box-sizing:border-box}.analytics-pixel{clip-path:inset(50%);width:1px;height:1px;position:absolute;overflow:hidden}html{background:var(--background);scroll-behavior:smooth}body{background:var(--background);min-width:320px;color:var(--text);letter-spacing:-.012em;-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;font-family:Inter,ui-sans-serif,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:15px;line-height:1.62}main{width:min(100% - 40px,620px);margin:0 auto;padding:88px 0 40px;animation:.42s both page-in}h1,h2,p{margin-top:0}h1{letter-spacing:-.045em;margin-bottom:0;font-size:28px;font-weight:590;line-height:1.2}.updated{color:var(--faint);margin:5px 0 30px;font-size:12px}.prose p{margin-bottom:16px}.prose p:last-child{margin-bottom:0}section{margin-top:64px}h2{letter-spacing:-.01em;margin-bottom:16px;font-size:13px;font-weight:590}a{color:inherit}.text-link{background-image:linear-gradient(currentColor,currentColor);background-position:0 100%;background-repeat:no-repeat;background-size:100% 1px;padding-bottom:1px;text-decoration:none;transition:color .15s,background-size .18s;display:inline;position:relative}.text-link:hover{color:var(--muted);background-size:0 1px}.link-arrow{margin-left:2px;font-size:.76em;line-height:1;transition:transform .17s cubic-bezier(.2,.8,.2,1);display:inline-block;transform:translateY(-.24em)}.text-link:hover .link-arrow{transform:translate(2px,-.42em)}.project-list,.experience-list{border-top:1px solid var(--line)}.project{border-bottom:1px solid var(--line)}.project summary{cursor:pointer;border-radius:7px;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:24px;margin:0 -10px;padding:15px 10px;list-style:none;transition:background-color .16s,padding-left .18s cubic-bezier(.2,.8,.2,1);display:grid}.project summary::-webkit-details-marker{display:none}.project summary:hover{background:var(--hover);padding-left:14px}.project-heading{gap:1px;display:grid}.project-name{width:fit-content;font-weight:560;line-height:1.4;position:relative}.project-name:after{content:"";transform-origin:100%;background:currentColor;height:1px;transition:transform .18s;position:absolute;bottom:0;left:0;right:0;transform:scaleX(0)}.project summary:hover .project-name:after{transform-origin:0;transform:scaleX(1)}.project-short{color:var(--muted);font-size:13px}.project-meta{color:var(--faint);white-space:nowrap;align-items:center;gap:14px;padding-top:1px;font-size:12px;display:flex}.plus{width:10px;height:10px;position:relative}.plus:before,.plus:after{content:"";background:currentColor;width:10px;height:1px;transition:transform .18s;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.plus:after{transform:translate(-50%,-50%)rotate(90deg)}.project[open] .plus:after{transform:translate(-50%,-50%)rotate(0)}.project-content{max-width:560px;color:var(--muted);padding:5px 26px 22px 0;animation:.22s both content-in}.project-content p{margin-bottom:12px}.project-content .stack{color:var(--faint);margin:18px 0 0;font-size:12px}.project-result{color:var(--text);flex-wrap:wrap;align-items:baseline;gap:4px 12px;margin-top:18px;font-size:13px;display:flex}.project-result-label{color:var(--faint)}.project-result-links{flex-wrap:wrap;gap:4px 12px;display:flex}.project-review{border-left:2px solid var(--line);background:color-mix(in srgb, var(--hover) 62%, transparent);margin:22px 0 0;padding:16px 18px}.project-review blockquote{color:var(--text);margin:0;font-size:14px;line-height:1.6}.project-review blockquote p{margin:0 0 10px}.project-review blockquote p:last-child{margin-bottom:0}.project-review figcaption{color:var(--faint);flex-wrap:wrap;gap:3px 8px;margin-top:11px;font-size:12px;display:flex}.experience-row{border-bottom:1px solid var(--line);grid-template-columns:minmax(0,1fr) 120px 90px;gap:18px;padding:12px 0;font-size:13px;transition:color .15s;display:grid}.experience-row:hover{color:var(--muted)}.experience-role,.experience-period{color:var(--faint)}.experience-period{text-align:right}footer{border-top:1px solid var(--line);color:var(--faint);margin-top:72px;padding-top:16px;font-size:12px}footer p{margin-bottom:0}footer .text-link{color:var(--text);margin-left:6px}::selection{background:var(--text);color:var(--background)}:focus-visible{outline:2px solid var(--text);outline-offset:3px;border-radius:2px}@keyframes page-in{0%{opacity:0;transform:translateY(7px)}to{opacity:1;transform:translateY(0)}}@keyframes content-in{0%{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@media (prefers-color-scheme:dark){:root{color-scheme:dark;--background:#171715;--text:#eeeeea;--muted:#aaa9a3;--faint:#73736e;--line:#33332f;--hover:#22221f}}@media (width<=600px){main{width:min(100% - 32px,620px);padding-top:48px}section{margin-top:52px}.project summary{grid-template-columns:1fr;gap:7px}.project-meta{justify-content:space-between}.experience-row{grid-template-columns:minmax(0,1fr) auto;gap:4px 16px}.experience-role{grid-area:2/1}.experience-period{grid-area:1/2/span 2;align-self:center}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.role-line{color:var(--muted);margin:4px 0 0;font-size:13px}.intro .updated{margin-top:2px}.lead{font-weight:490}.contacts{flex-wrap:wrap;align-items:baseline;gap:2px 8px;display:flex}.contacts>span,.meta-line,.industry-line{color:var(--faint)}.meta-line,.industry-line{margin-top:-6px;font-size:12px}.industry-line{line-height:1.5}.project-role{color:var(--text);font-size:13px;font-weight:560}.technology-list{border-top:1px solid var(--line)}.technology-row{border-bottom:1px solid var(--line);grid-template-columns:102px minmax(0,1fr);gap:18px;padding:11px 0;font-size:12px;line-height:1.55;display:grid}.technology-group{color:var(--faint)}.technology-items{color:var(--muted)}@media (width<=600px){.technology-row{grid-template-columns:1fr;gap:2px}}
