.page-transition{inset:0;position:fixed}.page-transition.is-leaving{animation:page-leave var(--page-exit) ease-in both}.page-transition.is-entering{animation:page-enter var(--page-enter) cubic-bezier(.22,1,.36,1) both}@keyframes page-leave{to{opacity:0}}@keyframes page-enter{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.page-transition{animation:none!important}}@font-face{font-display:swap;font-family:Neue Montreal;font-style:normal;font-weight:300;src:url(/static/media/NeueMontreal-Light.b94da60cc7760663345c.otf) format("opentype")}@font-face{font-display:swap;font-family:Neue Montreal;font-style:normal;font-weight:500 600;src:url(/static/media/NeueMontreal-Medium.15b1070b8dac57958acf.otf) format("opentype")}body,html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent;background:#060708;height:100%;margin:0;overflow:hidden}*{box-sizing:border-box}a{color:inherit}.font-fallback .sig-app *,.font-fallback .sig-intro *{font-family:Arial,sans-serif!important}.font-fallback .sig-app code,.font-fallback .sig-app pre{font-family:Consolas,monospace!important}:root{--scroll-thumb:#69756e;--scroll-track:#0000;--scroll-hover:#89988f;--scroll-active:#a3b3a9}*{scrollbar-color:#69756e #0000;scrollbar-color:var(--scroll-thumb) var(--scroll-track);scrollbar-width:thin}::-webkit-scrollbar{height:6px;width:6px}::-webkit-scrollbar-track{background:#0000;background:var(--scroll-track)}::-webkit-scrollbar-thumb{background:#69756e;background:var(--scroll-thumb);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:#89988f;background:var(--scroll-hover)}::-webkit-scrollbar-thumb:active{background:#a3b3a9;background:var(--scroll-active)}@media (forced-colors:active){*{scrollbar-color:auto}}@font-face{font-display:swap;font-family:Hanken Grotesk;font-style:normal;font-weight:400;src:url(/static/media/hanken-grotesk-latin-400-normal.a09acf567544b53ce4b0.woff2) format("woff2"),url(/static/media/hanken-grotesk-latin-400-normal.fd730a41d32148ed468b.woff) format("woff")}@font-face{font-display:swap;font-family:Hanken Grotesk;font-style:normal;font-weight:500;src:url(/static/media/hanken-grotesk-latin-500-normal.731555fcd7a8850f43bb.woff2) format("woff2"),url(/static/media/hanken-grotesk-latin-500-normal.7a1533fdae6368d55bab.woff) format("woff")}@font-face{font-display:swap;font-family:Hanken Grotesk;font-style:normal;font-weight:600;src:url(/static/media/hanken-grotesk-latin-600-normal.4e8b7b98fc5a95df419c.woff2) format("woff2"),url(/static/media/hanken-grotesk-latin-600-normal.2a087ff6e346bdc4170c.woff) format("woff")}@font-face{font-display:swap;font-family:Hanken Grotesk;font-style:normal;font-weight:700;src:url(/static/media/hanken-grotesk-latin-700-normal.47466b1694ff703b46ec.woff2) format("woff2"),url(/static/media/hanken-grotesk-latin-700-normal.00dee441f4c06aa550a8.woff) format("woff")}@font-face{font-display:swap;font-family:Hanken Grotesk;font-style:italic;font-weight:400;src:url(/static/media/hanken-grotesk-latin-400-italic.bacbd083b4f0431341dd.woff2) format("woff2"),url(/static/media/hanken-grotesk-latin-400-italic.54b4caafc05f903097a1.woff) format("woff")}.sig-intro{animation:sigIntroFade .6s ease 2.05s both;background:#000;color:#f4f4f2;display:grid;inset:0;padding:24px;place-items:center;position:fixed;z-index:100}.sig-intro-title{font-family:Neue Montreal,sans-serif;font-size:clamp(20px,2.8vw,36px);font-weight:300;letter-spacing:-.025em;line-height:1.3;text-align:center}.sig-intro-name,.sig-intro-portfolio{display:inline-block}.sig-intro-name{animation:sigIntroFade .28s ease 1.5s both}.sig-intro-portfolio{-webkit-text-stroke:.6px currentColor;animation:sigIntroFade .28s ease 1.65s both;font-weight:300}.sig-intro:not(.sig-intro-ready),.sig-intro:not(.sig-intro-ready) .sig-intro-name,.sig-intro:not(.sig-intro-ready) .sig-intro-portfolio{animation-play-state:paused}.sig-intro:not(.sig-intro-ready) .sig-intro-title{visibility:hidden}@keyframes sigIntroFade{0%{opacity:1}to{opacity:0}}@media (prefers-reduced-motion:reduce){.sig-intro,.sig-intro-name,.sig-intro-portfolio{animation-delay:0s;animation-duration:1ms}}.sig-project-scroll{scrollbar-width:none}.sig-project-scroll::-webkit-scrollbar{display:none}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:3px}@media (max-width:760px){.sig-home-content{flex:0 0 auto;margin-left:auto;margin-top:auto;max-width:300px;padding-block:12px;width:100%}.sig-centered-content{display:flex;flex:0 0 auto;flex-direction:column;margin-block:auto;padding-block:12px;width:100%}.sig-app .sig-link{align-items:center;border-bottom:0;display:inline-flex;min-height:44px;opacity:.8;-webkit-text-decoration-color:color-mix(in oklab,currentColor 35%,#0000);text-decoration-color:color-mix(in oklab,currentColor 35%,#0000);-webkit-text-decoration-line:underline;text-decoration-line:underline;text-decoration-thickness:1px;text-underline-offset:4px;transition:opacity .3s ease,color .3s ease,transform .3s ease,-webkit-text-decoration-color .3s ease;transition:opacity .3s ease,color .3s ease,text-decoration-color .3s ease,transform .3s ease;transition:opacity .3s ease,color .3s ease,text-decoration-color .3s ease,transform .3s ease,-webkit-text-decoration-color .3s ease}.sig-app .sig-link:hover{-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}}.sig-badge:hover{background:color-mix(in oklab,currentColor 10%,#0000)}.sig-skill-badge{color:inherit;cursor:pointer;transition:color .25s ease,opacity .25s ease}.sig-skill-badge:hover{color:var(--accent)}.sig-inline-link{background-image:linear-gradient(var(--accent),var(--accent));background-position:0 100%;background-repeat:no-repeat;background-size:0 1px;border-bottom:1px solid color-mix(in oklab,currentcolor 45%,#0000);box-decoration-break:clone;-webkit-box-decoration-break:clone;color:inherit;padding-bottom:1px;text-decoration:none;transition:background-size .45s ease,color .3s ease}.sig-inline-link:hover{background-size:100% 1px;color:var(--accent)}@media (prefers-reduced-motion:reduce){.sig-inline-link{transition:color .3s ease}.sig-inline-link:hover{background-size:100% 1px}}.sig-link{border-bottom:1px solid color-mix(in oklab,currentcolor 25%,#0000);color:inherit;display:inline-block;opacity:.6;padding-bottom:2px;text-decoration:none;transition:opacity .3s ease,color .3s ease,border-color .3s ease,transform .3s ease}.sig-link:hover{border-bottom-color:color-mix(in oklab,var(--accent) 55%,#0000);color:var(--accent);opacity:1;transform:translateY(-2px)}@keyframes sigPulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.35;transform:scale(.65)}}.sig-view-column-home{bottom:60px!important;height:auto!important;left:auto!important;right:68px!important;top:190px!important;width:min(680px,55vw)!important}.sig-home{justify-content:center!important;overflow-y:auto;text-align:left!important}.sig-home-content{padding:20px 0}.sig-hero-title{font-family:Neue Montreal,sans-serif;font-size:clamp(40px,4.6vw,68px);font-weight:300;letter-spacing:-.035em;line-height:1.08;margin:0 0 26px}.sig-hero-copy{font-size:16px;line-height:1.75;margin:0;max-width:440px;opacity:.85}.sig-home-actions{align-items:center;display:flex;flex-wrap:wrap;font-size:13px;gap:28px;margin-top:30px}.sig-primary-action{align-items:center;background:var(--accent);border:1px solid #0000;color:#10261a;cursor:pointer;display:inline-flex;font:inherit;font-weight:600;gap:32px;padding:14px 18px;text-decoration:none;transition:filter .2s ease,transform .2s ease}.sig-primary-action:hover{filter:brightness(1.1);transform:translateY(-2px)}.sig-nav :is(button,a){position:relative}.sig-nav :is(button,a):hover>span:first-child{opacity:1!important}@media (max-width:760px){.sig-view-column-home{bottom:calc(96px + env(safe-area-inset-bottom, 0px))!important;left:24px!important;right:24px!important;top:calc(148px + env(safe-area-inset-top, 0px))!important;width:auto!important}.sig-home-content{margin:auto 0;max-width:520px;padding:20px 0}.sig-hero-title{font-size:clamp(34px,8.8vw,54px);margin-bottom:22px}.sig-hero-copy{font-size:14px;line-height:1.7}.sig-home-actions{gap:22px;margin-top:24px}.sig-nav :is(button,a)[aria-current=page]:before{background:var(--accent);content:"";height:2px;left:25%;position:absolute;right:25%;top:-11px}}@media (prefers-reduced-motion:reduce){.sig-app *,.sig-app :before{animation:none!important;scroll-behavior:auto!important;transition:none!important}}@media (min-width:761px){.sig-home{text-align:right!important}.sig-hero-copy{margin-left:auto}.sig-home-actions{justify-content:flex-end}}.sig-primary-action:active{transform:translateY(0)}.blog-shell{font-family:Hanken Grotesk,sans-serif;inset:0;position:fixed}.blog-atmosphere{inset:0;opacity:.2}.blog-atmosphere,.blog-frame{pointer-events:none;position:absolute}.blog-frame{border:1px solid color-mix(in oklab,currentcolor 14%,#0000);inset:18px;z-index:3}.blog-scroll{inset:0;overflow-x:hidden;overflow-y:auto;position:absolute;scroll-behavior:smooth;scrollbar-color:#49594f #0000;scrollbar-width:thin}.blog-scroll::-webkit-scrollbar{width:5px}.blog-scroll::-webkit-scrollbar-thumb{background:#49594f}.blog-header{align-items:center;display:flex;gap:32px;justify-content:space-between;padding:60px 68px}.blog-wordmark{font-family:Neue Montreal,sans-serif;font-size:clamp(30px,3.3vw,46px);font-weight:300;line-height:1;text-decoration:none}.blog-wordmark span{display:block;font-size:10px;letter-spacing:.19em;line-height:1.5;margin-top:10px;opacity:.72;text-transform:uppercase}.blog-header nav{display:flex;font-size:14px;gap:32px}.blog-footer a,.blog-header nav a{text-decoration:none}.blog-back:hover,.blog-dot,.blog-footer a:hover,.blog-header nav a:hover{color:var(--accent)}.blog-dot{margin-left:8px}.blog-main{margin:30px auto 0;max-width:1200px;padding:0 68px 90px}.blog-list-title{font:300 32px/1.2 Neue Montreal,sans-serif;margin:0}.blog-eyebrow{color:var(--accent);font-size:10px;font-weight:600;letter-spacing:.19em;text-transform:uppercase}.blog-index-title{font:300 clamp(54px,7vw,96px)/1.02 Neue Montreal,sans-serif;letter-spacing:-.04em;margin:30px 0}.blog-index-title>span{color:var(--accent)}.blog-intro{font-size:17px;line-height:1.8;max-width:660px;opacity:.75}.blog-posts{margin:32px 0}.blog-post-card{grid-gap:28px;border-block:1px solid color-mix(in oklab,currentColor 20%,#0000);display:grid;gap:28px;grid-template-columns:130px 1fr 32px;padding:36px 0;text-decoration:none}.blog-post-card h2{font:300 clamp(26px,3vw,38px)/1.2 Neue Montreal,sans-serif;margin:0 0 18px;transition:color .2s}.blog-post-card p{font-size:14px;line-height:1.8;max-width:620px;opacity:.68}.blog-card-meta{display:flex;font-size:12px;gap:16px;justify-content:space-between;margin-top:28px;opacity:.8}.blog-card-arrow,.blog-card-meta span{color:var(--accent)}.blog-card-arrow{font-size:28px}.blog-post-card:hover h2{color:var(--accent)}.blog-back{display:inline-block;font-size:12px;margin-bottom:32px;opacity:.75;text-decoration:none}.blog-article-header{border-bottom:1px solid color-mix(in oklab,currentcolor 20%,#0000);padding-bottom:44px}.blog-article-header h1{font:300 clamp(38px,5.1vw,68px)/1.08 Neue Montreal,sans-serif;letter-spacing:-.025em;margin:24px 0;max-width:940px}.blog-meta{display:flex;flex-wrap:wrap;font-size:12px;gap:12px 24px;margin-top:28px;opacity:.8}.blog-draft{color:var(--accent)}.blog-tags{display:flex;flex-wrap:wrap;gap:8px;margin-top:24px}.blog-tags span{border:1px solid color-mix(in oklab,currentcolor 20%,#0000);font-size:10px;letter-spacing:.04em;padding:6px 10px}.blog-layout{grid-gap:60px;display:grid;gap:60px;grid-template-columns:210px minmax(0,1fr);padding-top:48px}.blog-contents{align-self:start;display:flex;flex-direction:column;max-height:calc(100dvh - 80px);position:-webkit-sticky;position:sticky;top:40px}.blog-contents nav{margin:20px 0;overflow-y:auto;scrollbar-width:thin}.blog-contents ol,.blog-mobile-contents ol{list-style:none;margin:0;padding:0}.blog-contents a,.blog-mobile-contents a{text-decoration:none}.blog-contents li a,.blog-mobile-contents li a{display:flex;font-size:11px;gap:12px;line-height:1.5;opacity:.6;padding:8px 0}.blog-contents li span,.blog-mobile-contents li span{font-size:9px;opacity:.5;padding-top:2px}.blog-contents a:hover,.blog-contents a[aria-current],.blog-mobile-contents a:hover{color:var(--accent);opacity:1}.blog-reading-column{min-width:0}.blog-mobile-contents{display:none}.blog-editor-note{border-left:1px solid var(--accent);font-size:12px;line-height:1.8;margin:0 0 36px;opacity:.65;padding-left:18px}.blog-prose{font-size:15px;line-height:1.9;overflow-wrap:anywhere}.blog-prose li,.blog-prose p{color:color-mix(in oklab,currentColor 82%,#0000)}.blog-prose h2,.blog-prose h3,.blog-prose h4{font-family:Neue Montreal,sans-serif;font-weight:300;line-height:1.2;scroll-margin-top:36px}.blog-prose h2{font-size:36px;margin:64px 0 24px}.blog-prose h3{font-size:28px;margin:38px 0 18px}.blog-prose h4{font-size:22px;margin:30px 0 16px}.blog-prose ol,.blog-prose ul{padding-left:23px}.blog-prose li{margin:5px 0;padding-left:5px}.blog-prose li::marker{color:var(--accent)}.blog-prose .blog-task-item{list-style:none;margin:12px 0;padding-left:8px;position:relative}.blog-task-checkbox{-webkit-appearance:none;appearance:none;background:#0000;border:1px solid color-mix(in oklab,currentcolor 55%,#0000);border-radius:3px;color:inherit;height:17px;left:-23px;margin:0;opacity:1;position:absolute;top:.4em;width:17px}.blog-task-checkbox:checked{background:var(--accent);border-color:var(--accent)}.blog-task-checkbox:checked:after{border:solid var(--blog-bg);border-width:0 2px 2px 0;content:"";height:8px;left:5px;position:absolute;top:2px;transform:rotate(45deg);width:4px}@media (forced-colors:active){.blog-task-checkbox{-webkit-appearance:auto;appearance:auto}.blog-task-checkbox:after{display:none}}.blog-prose strong{font-weight:600}.blog-prose hr{border:0;border-top:1px solid color-mix(in oklab,currentcolor 13%,#0000);margin:48px 0}.blog-prose blockquote{border-left:2px solid var(--accent);font-size:14px;margin:28px 0;padding:1px 0 1px 22px}.blog-prose pre{background:color-mix(in oklab,currentColor 4%,#0000);border:1px solid color-mix(in oklab,currentcolor 12%,#0000);line-height:1.7;overflow-x:auto;padding:22px;scrollbar-width:thin}.blog-prose pre::-webkit-scrollbar{height:5px}.blog-prose code{color:var(--accent);font:11px/1.8 Consolas,Courier New,monospace}.blog-prose :not(pre)>code{background:color-mix(in oklab,currentColor 6%,#0000);padding:3px 5px}.blog-prose table{border-collapse:collapse;display:block;font-size:12px;margin:28px 0;overflow-x:auto;scrollbar-width:thin;width:100%}.blog-prose td,.blog-prose th{border-bottom:1px solid color-mix(in oklab,currentcolor 14%,#0000);min-width:110px;padding:13px 16px;text-align:left}.blog-prose th{background:color-mix(in oklab,currentColor 4%,#0000);color:var(--accent);font-weight:500}.blog-prose img{border:1px solid color-mix(in oklab,currentcolor 15%,#0000);display:block;height:auto;max-width:100%}.blog-image-placeholder{align-items:center;background:color-mix(in oklab,currentColor 2%,#0000);border:1px dashed color-mix(in oklab,currentcolor 20%,#0000);display:flex;flex-direction:column;gap:6px;justify-content:center;margin:30px 0;min-height:150px}.blog-image-placeholder>span{color:var(--accent);font-size:24px;opacity:.6}.blog-image-placeholder strong{font-size:12px;font-weight:400}.blog-image-placeholder small{font-size:10px;opacity:.5}.blog-pending{font-size:11px;font-style:italic;opacity:.45}.blog-diagram{background:#0000;border-block:1px solid color-mix(in oklab,currentColor 12%,#0000);margin:30px 0;padding:24px 8px 12px}.blog-diagram-canvas{overflow-x:auto;scrollbar-width:thin;text-align:center}.blog-diagram-canvas svg{display:block;margin:0 auto;max-width:none}.blog-diagram-canvas svg *{filter:none!important;text-shadow:none!important}.blog-diagram-canvas svg .node :is(rect,circle,ellipse,polygon,path){stroke-width:1px!important}.blog-diagram-canvas svg .flowchart-link{stroke-width:1px!important}.blog-diagram-canvas:focus-visible{outline:1px solid var(--accent);outline-offset:4px}.blog-diagram figcaption{font-size:10px;margin-top:14px;opacity:.55;text-align:center}.blog-footer{display:flex;font-size:11px;gap:24px;justify-content:space-between;margin:80px auto 0;max-width:1200px;opacity:.65;padding:32px 68px 60px}.blog-progress{background:var(--accent);height:2px;left:0;position:fixed;right:0;top:0;transform-origin:left;z-index:5}.blog-skip{background:#060708;left:24px;padding:12px;position:absolute;top:-100px;z-index:5}.blog-skip:focus{top:24px}.blog-not-found{min-height:45vh;padding-top:70px}.blog-not-found h1{font:300 48px/1.2 Neue Montreal,sans-serif}@media (max-width:1000px){.blog-layout{gap:32px;grid-template-columns:175px minmax(0,1fr)}}@media (max-width:760px){.blog-frame{inset:12px}.blog-header{align-items:flex-start;flex-direction:column;gap:26px;padding:36px 24px}.blog-wordmark{font-size:34px}.blog-wordmark span{font-size:8px;letter-spacing:.12em}.blog-header nav{font-size:12px;gap:28px}.blog-main{margin-top:22px;padding:0 24px 120px}.blog-intro{font-size:15px}.blog-layout{display:block;padding-top:28px}.blog-contents{display:none}.blog-mobile-contents{background:var(--blog-bg);border:1px solid color-mix(in oklab,currentcolor 25%,#0000);bottom:calc(12px + env(safe-area-inset-bottom, 0px));box-shadow:0 -8px 32px #00000040;display:block;left:12px;padding:0 16px;position:absolute;right:12px;z-index:6}.blog-mobile-contents summary{cursor:pointer;font-size:12px;padding:17px 0}.blog-mobile-contents summary span{color:var(--accent);display:inline-block;margin-left:12px;max-width:58%;overflow:hidden;text-overflow:ellipsis;vertical-align:bottom;white-space:nowrap}.blog-mobile-contents nav{border-top:1px solid color-mix(in oklab,currentcolor 15%,#0000);max-height:min(55dvh,400px);overflow-y:auto;overscroll-behavior:contain;padding:8px 0}.blog-mobile-contents li a{font-size:13px;opacity:.85;padding:13px 0}.blog-mobile-contents a[aria-current]{color:var(--accent);opacity:1}.blog-post-card{gap:20px;grid-template-columns:1fr 24px}.blog-post-card>.blog-eyebrow{grid-column:1/-1}.blog-card-meta{flex-direction:column}.blog-posts{margin-top:44px}.blog-prose{font-size:14px}.blog-prose h2{font-size:30px}.blog-prose h3{font-size:25px}.blog-prose pre{padding:16px}.blog-footer{flex-wrap:wrap;padding:24px 24px 40px}.blog-footer>span{display:none}}@media (prefers-reduced-motion:reduce){.blog-scroll{scroll-behavior:auto}}
/*# sourceMappingURL=main.d39d7d61.css.map*/