:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--bg:#fff;--text:#111;--muted:#6b6b6b;--soft:#767676;--body:#565656;--rule:#ededed;--image-outline:#0000001a;--menu-link:#404040;--social-icon:#767676;--hover-bg:#0000000f;--hover-bg-subtle:#0000000a;--menu-bg:#fff;--menu-divider:#0000000f;--social-x:#000;--social-github:#181717;--theme-origin-x:calc(100vw - 28px);--theme-origin-y:24px;--theme-reveal-radius:100vmax;--menu-width:400px;--content:640px;--narrow-content:560px;--max-content:720px;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#0a0a0a;--text:#ededed;--muted:#9b9b9b;--soft:#858585;--body:#a3a3a3;--rule:#222;--image-outline:#ffffff1a;--menu-link:#b0b0b0;--social-icon:#858585;--hover-bg:#ffffff14;--hover-bg-subtle:#ffffff0f;--menu-bg:#0a0a0a;--menu-divider:#ffffff14;--social-x:#fff;--social-github:#f0f0f0}*{box-sizing:border-box}html{background:var(--bg);-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%}body{background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;font-family:inherit;font-size:16px;line-height:1.5}a{color:inherit;text-decoration:none;transition:color .14s,text-decoration-color .14s}button{font:inherit}.topbar{z-index:40;min-height:48px;color:var(--text);background:var(--bg);pointer-events:none;align-items:center;gap:12px;padding:8px 12px;font-size:14px;font-weight:400;display:flex;position:fixed;top:0;left:0;right:0}.topbar>*{pointer-events:auto}.menu-button{width:32px;height:32px;color:var(--text);cursor:pointer;background:0 0;border:0;border-radius:6px;place-items:center;padding:0;transition:background-color .14s,transform .14s;display:grid}.menu-button:hover{background-color:var(--hover-bg)}.menu-button:active{transform:scale(.96)}.menu-button svg{stroke-width:2.4px;width:16px;height:16px}.theme-toggle{width:32px;height:32px;color:var(--text);cursor:pointer;background:0 0;border:0;border-radius:6px;place-items:center;margin-left:auto;padding:0;transition:transform .14s cubic-bezier(.25,1,.5,1);display:grid}.theme-toggle:hover{background-color:#0000}.theme-toggle:active{transform:scale(.96)}.theme-toggle svg{stroke-width:2px;width:16px;height:16px;transition:transform .16s cubic-bezier(.25,1,.5,1)}@media (hover:hover) and (pointer:fine){.theme-toggle:hover svg{transform:translateY(-1px)}}.theme-toggle:focus-visible{outline-offset:2px;outline:2px solid}.theme-toggle .icon-sun{display:none}.theme-toggle .icon-moon,:root[data-theme=dark] .theme-toggle .icon-sun{display:block}:root[data-theme=dark] .theme-toggle .icon-moon{display:none}::view-transition-old(root){mix-blend-mode:normal;animation:none}::view-transition-new(root){mix-blend-mode:normal;animation:none}::view-transition-old(root){z-index:1}::view-transition-new(root){z-index:2;animation:.5s cubic-bezier(.55,0,1,.45) both theme-circle-reveal}@keyframes theme-circle-reveal{0%{clip-path:circle(0 at var(--theme-origin-x) var(--theme-origin-y))}to{clip-path:circle(var(--theme-reveal-radius) at var(--theme-origin-x) var(--theme-origin-y))}}@media (prefers-reduced-motion:reduce){::view-transition-old(root){animation-duration:.01ms}::view-transition-new(root){animation-duration:.01ms}.theme-toggle,.theme-toggle svg{transition-duration:.01ms}}.icon-close,.menu-open .icon-open{display:none}.menu-open .icon-close{display:block}.crumbs{color:var(--text);align-items:center;gap:10px;font-size:14px;font-weight:400;display:flex}.crumbs a{color:inherit}.crumbs svg{width:12px;height:12px;color:var(--soft);flex:none}.crumbs span{color:var(--soft);font-weight:400}.side-menu{z-index:30;background:var(--menu-bg);opacity:0;visibility:hidden;-webkit-overflow-scrolling:touch;flex-direction:column;width:100vw;height:100dvh;padding:56px 16px 24px;transition:opacity .18s,transform .18s,visibility .18s;display:flex;position:fixed;inset:0;overflow-y:auto;transform:translateY(-4px)}.menu-open .side-menu{opacity:1;visibility:visible;transform:translateY(0)}.primary-menu,.project-menu{flex-direction:column;align-items:stretch;gap:1px;display:flex}.primary-menu a,.project-menu a{width:max-content;color:var(--menu-link);letter-spacing:-.005em;border-radius:6px;align-items:center;padding:6px 8px;font-size:14px;font-weight:400;line-height:20px;transition:color .14s,background-color .14s;display:inline-flex}.primary-menu a:hover,.primary-menu a:focus-visible,.project-menu a:hover,.project-menu a:focus-visible{color:var(--text);background-color:var(--hover-bg-subtle)}.primary-menu a[aria-current=page],.project-menu a[aria-current=page]{color:var(--text);font-weight:400}.menu-section{margin-top:20px}.menu-label{color:var(--muted);letter-spacing:0;margin:0 0 4px;padding:0 8px;font-size:12px;font-weight:400;line-height:18px}.menu-socials{justify-content:flex-start;align-items:center;gap:4px;margin-top:auto;padding-top:32px;display:flex}.site-shell{min-height:100vh}.page-column{width:min(var(--content), var(--max-content), calc(100vw - 48px));max-width:100%;margin:0 auto}.home-page{padding:128px 0 110px}.sub-page{width:min(var(--narrow-content), calc(100vw - 48px));padding:96px 0 110px}.about-page{padding-top:128px}.avatar{object-fit:cover;border-radius:50%;width:56px;height:56px;display:block}.home-page .avatar,.about-page .avatar{margin-bottom:32px}.home-title{letter-spacing:-.01em;margin:0 0 16px;font-size:22px;font-weight:500;line-height:30px}.lead{color:var(--body);letter-spacing:-.005em;margin:0;font-size:22px;font-weight:500;line-height:30px}.intro-copy{flex-direction:column;gap:20px;margin:0;display:flex}.intro-copy p{color:var(--body);letter-spacing:-.005em;margin:0;font-size:16px;font-weight:400;line-height:26px}.intro-copy p:first-child{letter-spacing:-.005em;font-size:22px;font-weight:500;line-height:30px}.intro-copy a{text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:1.5px}.social-row{align-items:center;gap:16px;margin:40px 0 56px;display:flex}.social-row a,.menu-socials a{width:32px;height:32px;color:var(--social-icon);border-radius:6px;justify-content:center;align-items:center;transition:color .14s,transform .14s;display:inline-flex}.social-row a svg,.menu-socials a svg{width:20px;height:20px;display:block}.social-row a:active,.menu-socials a:active{transform:scale(.94)}.social-row a:focus-visible,.menu-socials a:focus-visible{color:var(--text);outline:2px solid var(--text);outline-offset:2px}.social-row a[aria-label=LinkedIn]:hover,.menu-socials a[aria-label=LinkedIn]:hover{color:#0a66c2}.social-row a[aria-label=X]:hover,.menu-socials a[aria-label=X]:hover{color:var(--social-x)}.social-row a[aria-label=GitHub]:hover,.menu-socials a[aria-label=GitHub]:hover{color:var(--social-github)}.social-row a[aria-label=Substack]:hover,.menu-socials a[aria-label=Substack]:hover{color:#ff6719}.social-row a[aria-label=Instagram]:hover,.menu-socials a[aria-label=Instagram]:hover{color:#e4405f}.menu-socials a{width:28px;height:28px}.menu-socials a svg{width:16px;height:16px}.section-block{margin-top:0}.section-block+.section-block{margin-top:64px}.section-heading{color:var(--muted);letter-spacing:-.005em;align-items:center;gap:8px;margin:0 0 20px;font-size:14px;font-weight:500;line-height:22px;display:inline-flex}.section-heading svg{flex:none;width:12px;height:12px;transition:transform .14s}a.section-heading:hover svg{transform:translate(2px)}a.section-heading:hover{color:var(--text)}.link-list,.project-list,.dated-list{flex-direction:column;gap:12px;margin:0;padding:0;list-style:none;display:flex}.link-list a,.project-row strong{color:var(--text);letter-spacing:-.005em;font-size:16px;font-weight:400;line-height:26px;display:inline-block}.link-list a,.entry-link strong{text-underline-offset:3px;-webkit-text-decoration:underline #0000;text-decoration:underline #0000;text-decoration-thickness:1.5px;transition:text-decoration-color .14s}.link-list a:hover,.link-list a:focus-visible,.entry-link:hover strong,.entry-link:focus-visible strong{text-decoration-color:currentColor}.entry-link{color:inherit;flex-wrap:wrap;align-items:baseline;gap:0 8px;display:flex}.entry-link:focus-visible{outline:none}.project-row,.dated-row{display:block}.dated-row{grid-template-columns:110px minmax(0,1fr);align-items:baseline;gap:16px;display:grid}.dated-row time{color:var(--muted);letter-spacing:-.005em;font-size:16px;font-weight:400;line-height:26px}.dated-list .entry-link{flex-wrap:wrap;align-items:baseline;gap:0 8px;display:flex}.project-row span,.dated-row span{color:var(--muted);letter-spacing:-.005em;font-size:16px;font-weight:400;line-height:26px}.year-page h1,.timeline-page h1{color:var(--text);letter-spacing:-.02em;margin:0 0 48px;font-size:32px;font-weight:500;line-height:40px}.empty-state{color:var(--muted);font-size:16px;font-weight:400;line-height:26px}.post-header{margin-bottom:40px}.post-header h1{color:var(--text);letter-spacing:-.02em;text-wrap:balance;margin:0;font-size:32px;font-weight:500;line-height:40px}.post-meta{color:var(--muted);letter-spacing:-.005em;margin-top:12px;font-size:14px;font-weight:400;line-height:22px;display:block}.post-body{color:var(--text);flex-direction:column;gap:20px;display:flex}.post-body>*{margin:0}.post-body p{color:var(--body);letter-spacing:-.005em;text-wrap:pretty;font-size:16px;font-weight:400;line-height:26px}.post-body h2{color:var(--text);letter-spacing:-.01em;margin-top:20px;font-size:20px;font-weight:500;line-height:28px}.post-body h3{color:var(--text);letter-spacing:-.005em;margin-top:4px;font-size:16px;font-weight:500;line-height:26px}.post-body ul{padding-left:19px}.post-body li{color:var(--body);text-wrap:pretty;margin:6px 0;font-size:16px;font-weight:400;line-height:25px}.post-body a{text-underline-offset:3px;text-decoration:underline;text-decoration-thickness:1.5px}.post-body code{background:var(--hover-bg-subtle);color:var(--text);border-radius:5px;padding:.15em .35em;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.95em}.post-body blockquote{border-left:1px solid var(--rule);color:var(--text);margin:8px 0;padding-left:16px}.post-body blockquote p{color:var(--text)}.post-body blockquote.pull-quote{border:1px solid var(--rule);border-left:3px solid var(--text);background:var(--hover-bg-subtle);border-radius:12px;margin:24px 0;padding:18px 20px}.post-body blockquote.pull-quote p{letter-spacing:-.01em;font-size:18px;font-weight:500;line-height:28px}.post-body figure{margin:24px 0}.post-body figure img{outline:1px solid var(--image-outline);outline-offset:-1px;border-radius:10px;width:100%;height:auto;display:block}.post-body figcaption{color:var(--muted);letter-spacing:-.005em;text-wrap:pretty;margin-top:12px;font-size:13px;font-weight:400;line-height:20px}.timeline-page{width:min(840px,100vw - 48px);margin:0 auto;padding:110px 0 120px}.resume-header{margin-bottom:64px;margin-left:204px}.resume-header h1{margin-bottom:12px}.resume-intro{color:var(--body);margin:0;font-size:16px;line-height:26px}.resume-intro a{color:var(--text);text-underline-offset:.15em;text-decoration:underline;text-decoration-thickness:from-font}.resume-section+.resume-section{margin-top:72px}.resume-section-title{color:var(--text);letter-spacing:-.005em;margin:0 0 28px 204px;font-size:16px;font-weight:500;line-height:24px}.resume-list{flex-direction:column;gap:52px;display:flex}.resume-entry{grid-template-columns:176px minmax(0,1fr);align-items:start;gap:28px;display:grid}.resume-entry--continuation{margin-top:-16px}.resume-date{color:var(--body);text-align:right;font-size:14px;font-weight:400;line-height:22px}.resume-body{min-width:0;max-width:68ch}.resume-entry-heading{justify-content:space-between;align-items:baseline;gap:16px;margin-bottom:16px;display:flex}.resume-entry-heading>div{min-width:0}.resume-body h3{color:var(--text);letter-spacing:-.01em;margin:0;font-size:20px;font-weight:500;line-height:28px}.resume-role,.resume-location,.resume-credential{margin:0;font-weight:400}.resume-role{color:var(--body);font-size:16px;line-height:24px}.resume-body h3.resume-role-heading{letter-spacing:0;font-size:16px;font-weight:400;line-height:24px}.resume-location{color:var(--body);text-align:right;flex:none;font-size:13px;line-height:20px}.resume-body ul{margin:0;padding-left:19px}.resume-body li{color:var(--body);text-wrap:pretty;margin:6px 0;font-size:16px;line-height:25px}.resume-affiliations{max-width:68ch;margin:0 0 0 204px;padding-left:19px}.resume-affiliations li{color:var(--body);margin:6px 0;font-size:16px;line-height:25px}.resume-affiliations a{text-underline-offset:.15em;text-decoration:underline;text-decoration-thickness:from-font}.resume-credential{color:var(--body);font-size:16px;font-weight:400;line-height:25px}.skip-link{z-index:100;background:var(--text);color:var(--bg);padding:8px 10px;position:fixed;top:8px;left:8px;transform:translateY(-140%)}.skip-link:focus{transform:translateY(0)}@media (width<=700px){.topbar{gap:10px;min-height:48px;padding:6px 12px;font-size:14px}.crumbs{flex:auto;gap:8px;min-width:0;font-size:13px;overflow:hidden}.crumbs>:last-child{text-overflow:ellipsis;white-space:nowrap;flex:auto;min-width:0;overflow:hidden}.crumbs>:not(:last-child){white-space:nowrap;flex:none}.side-menu{padding:56px 12px 24px}.primary-menu a,.project-menu a{min-height:44px;padding:0 8px}.page-column,.timeline-page{width:calc(100vw - 32px)}.home-page,.sub-page,.timeline-page,.about-page{padding-top:96px}.home-page .avatar,.about-page .avatar{margin-bottom:28px}.home-title{margin-bottom:12px;font-size:20px;line-height:28px}.lead,.intro-copy p:first-child{font-size:20px;line-height:28px}.intro-copy p{font-size:15px;line-height:24px}.social-row{gap:12px;margin:32px 0 48px}.section-heading{margin-bottom:16px;font-size:14px;line-height:22px}.project-row{flex-wrap:wrap;gap:0 8px;display:flex}.dated-row{display:block}.dated-row time{text-align:left;margin-bottom:8px;display:block}.link-list a,.project-row strong,.dated-row strong,.project-row span,.dated-row span,.dated-row time{font-size:15px;line-height:24px}.year-page h1,.timeline-page h1,.post-header h1{margin-bottom:40px;font-size:28px;line-height:36px}.post-header h1{margin-bottom:0}.post-body p,.post-body li,.resume-intro{font-size:15px;line-height:24px}.resume-header,.resume-section-title,.timeline-page h1{margin-left:0}.resume-header{margin-bottom:52px}.resume-header h1{margin-bottom:12px}.resume-section+.resume-section{margin-top:60px}.resume-section-title{margin-bottom:24px}.resume-list{gap:48px}.resume-entry{display:block}.resume-entry--continuation{margin-top:-12px}.resume-date{text-align:left;margin-bottom:8px;font-size:13px;line-height:20px}.resume-entry-heading{margin-bottom:14px;display:block}.resume-body h3{font-size:18px;line-height:26px}.resume-location{text-align:left;margin-top:4px}.resume-role,.resume-credential,.resume-body li,.resume-affiliations li{font-size:15px;line-height:24px}.resume-affiliations{margin-left:0}.social-row a,.menu-socials a{width:44px;height:44px}.menu-button,.theme-toggle{flex:0 0 44px;width:44px;height:44px}}@media (width>=1920px){.page-column{width:min(var(--max-content), calc(100vw - 64px))}.timeline-page{width:min(800px,100vw - 64px)}}@media (width>=768px) and (width<=1024px){.page-column{width:min(var(--content), calc(100vw - 56px))}.sub-page{width:min(var(--narrow-content), calc(100vw - 56px))}.side-menu{width:320px}}
