*,*:after,*:before{box-sizing:inherit}html{box-sizing:border-box;font-size:62.5%}body{color:#606c76;font-family:Roboto,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:1.6em;font-weight:300;letter-spacing:.01em;line-height:1.6}blockquote{border-left:.3rem solid #d1d1d1;margin-left:0;margin-right:0;padding:1rem 1.5rem}blockquote *:last-child{margin-bottom:0}.button,button,input[type=button],input[type=reset],input[type=submit]{background-color:#9b4dca;border:.1rem solid #9b4dca;border-radius:.4rem;color:#fff;cursor:pointer;display:inline-block;font-size:1.1rem;font-weight:700;height:3.8rem;letter-spacing:.1rem;line-height:3.8rem;padding:0 3rem;text-align:center;text-decoration:none;text-transform:uppercase;white-space:nowrap}.button:focus,.button:hover,button:focus,button:hover,input[type=button]:focus,input[type=button]:hover,input[type=reset]:focus,input[type=reset]:hover,input[type=submit]:focus,input[type=submit]:hover{background-color:#606c76;border-color:#606c76;color:#fff;outline:0}.button[disabled],button[disabled],input[type=button][disabled],input[type=reset][disabled],input[type=submit][disabled]{cursor:default;opacity:.5}.button[disabled]:focus,.button[disabled]:hover,button[disabled]:focus,button[disabled]:hover,input[type=button][disabled]:focus,input[type=button][disabled]:hover,input[type=reset][disabled]:focus,input[type=reset][disabled]:hover,input[type=submit][disabled]:focus,input[type=submit][disabled]:hover{background-color:#9b4dca;border-color:#9b4dca}.button.button-outline,button.button-outline,input[type=button].button-outline,input[type=reset].button-outline,input[type=submit].button-outline{background-color:transparent;color:#9b4dca}.button.button-outline:focus,.button.button-outline:hover,button.button-outline:focus,button.button-outline:hover,input[type=button].button-outline:focus,input[type=button].button-outline:hover,input[type=reset].button-outline:focus,input[type=reset].button-outline:hover,input[type=submit].button-outline:focus,input[type=submit].button-outline:hover{background-color:transparent;border-color:#606c76;color:#606c76}.button.button-outline[disabled]:focus,.button.button-outline[disabled]:hover,button.button-outline[disabled]:focus,button.button-outline[disabled]:hover,input[type=button].button-outline[disabled]:focus,input[type=button].button-outline[disabled]:hover,input[type=reset].button-outline[disabled]:focus,input[type=reset].button-outline[disabled]:hover,input[type=submit].button-outline[disabled]:focus,input[type=submit].button-outline[disabled]:hover{border-color:inherit;color:#9b4dca}.button.button-clear,button.button-clear,input[type=button].button-clear,input[type=reset].button-clear,input[type=submit].button-clear{background-color:transparent;border-color:transparent;color:#9b4dca}.button.button-clear:focus,.button.button-clear:hover,button.button-clear:focus,button.button-clear:hover,input[type=button].button-clear:focus,input[type=button].button-clear:hover,input[type=reset].button-clear:focus,input[type=reset].button-clear:hover,input[type=submit].button-clear:focus,input[type=submit].button-clear:hover{background-color:transparent;border-color:transparent;color:#606c76}.button.button-clear[disabled]:focus,.button.button-clear[disabled]:hover,button.button-clear[disabled]:focus,button.button-clear[disabled]:hover,input[type=button].button-clear[disabled]:focus,input[type=button].button-clear[disabled]:hover,input[type=reset].button-clear[disabled]:focus,input[type=reset].button-clear[disabled]:hover,input[type=submit].button-clear[disabled]:focus,input[type=submit].button-clear[disabled]:hover{color:#9b4dca}code{background:#f4f5f6;border-radius:.4rem;font-size:86%;margin:0 .2rem;padding:.2rem .5rem;white-space:nowrap}pre{background:#f4f5f6;border-left:.3rem solid #9b4dca;overflow-y:hidden}pre>code{border-radius:0;display:block;padding:1rem 1.5rem;white-space:pre}hr{border:0;border-top:.1rem solid #f4f5f6;margin:3rem 0}input[type=color],input[type=date],input[type=datetime],input[type=datetime-local],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=url],input[type=week],input:not([type]),textarea,select{-webkit-appearance:none;background-color:transparent;border:.1rem solid #d1d1d1;border-radius:.4rem;box-shadow:none;box-sizing:inherit;height:3.8rem;padding:.6rem 1rem .7rem;width:100%}input[type=color]:focus,input[type=date]:focus,input[type=datetime]:focus,input[type=datetime-local]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=url]:focus,input[type=week]:focus,input:not([type]):focus,textarea:focus,select:focus{border-color:#9b4dca;outline:0}select{background:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 8" width="30"><path fill="%23d1d1d1" d="M0,0l6,8l6-8"/></svg>') center right no-repeat;padding-right:3rem}select:focus{background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 30 8" width="30"><path fill="%239b4dca" d="M0,0l6,8l6-8"/></svg>')}select[multiple]{background:none;height:auto}textarea{min-height:6.5rem}label,legend{display:block;font-size:1.6rem;font-weight:700;margin-bottom:.5rem}fieldset{border-width:0;padding:0}input[type=checkbox],input[type=radio]{display:inline}.label-inline{display:inline-block;font-weight:400;margin-left:.5rem}.container{margin:0 auto;max-width:112rem;padding:0 2rem;position:relative;width:100%}.row{display:flex;flex-direction:column;padding:0;width:100%}.row.row-no-padding{padding:0}.row.row-no-padding>.column{padding:0}.row.row-wrap{flex-wrap:wrap}.row.row-top{align-items:flex-start}.row.row-bottom{align-items:flex-end}.row.row-center{align-items:center}.row.row-stretch{align-items:stretch}.row.row-baseline{align-items:baseline}.row .column{display:block;flex:1 1 auto;margin-left:0;max-width:100%;width:100%}.row .column.column-offset-10{margin-left:10%}.row .column.column-offset-20{margin-left:20%}.row .column.column-offset-25{margin-left:25%}.row .column.column-offset-33,.row .column.column-offset-34{margin-left:33.3333%}.row .column.column-offset-40{margin-left:40%}.row .column.column-offset-50{margin-left:50%}.row .column.column-offset-60{margin-left:60%}.row .column.column-offset-66,.row .column.column-offset-67{margin-left:66.6666%}.row .column.column-offset-75{margin-left:75%}.row .column.column-offset-80{margin-left:80%}.row .column.column-offset-90{margin-left:90%}.row .column.column-10{flex:0 0 10%;max-width:10%}.row .column.column-20{flex:0 0 20%;max-width:20%}.row .column.column-25{flex:0 0 25%;max-width:25%}.row .column.column-33,.row .column.column-34{flex:0 0 33.3333%;max-width:33.3333%}.row .column.column-40{flex:0 0 40%;max-width:40%}.row .column.column-50{flex:0 0 50%;max-width:50%}.row .column.column-60{flex:0 0 60%;max-width:60%}.row .column.column-66,.row .column.column-67{flex:0 0 66.6666%;max-width:66.6666%}.row .column.column-75{flex:0 0 75%;max-width:75%}.row .column.column-80{flex:0 0 80%;max-width:80%}.row .column.column-90{flex:0 0 90%;max-width:90%}.row .column .column-top{align-self:flex-start}.row .column .column-bottom{align-self:flex-end}.row .column .column-center{align-self:center}@media (min-width: 40rem){.row{flex-direction:row;margin-left:-1rem;width:calc(100% + 2rem)}.row .column{margin-bottom:inherit;padding:0 1rem}}a{color:#9b4dca;text-decoration:none}a:focus,a:hover{color:#606c76}dl,ol,ul{list-style:none;margin-top:0;padding-left:0}dl dl,dl ol,dl ul,ol dl,ol ol,ol ul,ul dl,ul ol,ul ul{font-size:90%;margin:1.5rem 0 1.5rem 3rem}ol{list-style:decimal inside}ul{list-style:circle inside}.button,button,dd,dt,li{margin-bottom:1rem}fieldset,input,select,textarea{margin-bottom:1.5rem}blockquote,dl,figure,form,ol,p,pre,table,ul{margin-bottom:2.5rem}table{border-spacing:0;display:block;overflow-x:auto;text-align:left;width:100%}td,th{border-bottom:.1rem solid #e1e1e1;padding:1.2rem 1.5rem}td:first-child,th:first-child{padding-left:0}td:last-child,th:last-child{padding-right:0}@media (min-width: 40rem){table{display:table;overflow-x:initial}}b,strong{font-weight:700}p{margin-top:0}h1,h2,h3,h4,h5,h6{font-weight:300;letter-spacing:-.1rem;margin-bottom:2rem;margin-top:0}h1{font-size:4.6rem;line-height:1.2}h2{font-size:3.6rem;line-height:1.25}h3{font-size:2.8rem;line-height:1.3}h4{font-size:2.2rem;letter-spacing:-.08rem;line-height:1.35}h5{font-size:1.8rem;letter-spacing:-.05rem;line-height:1.5}h6{font-size:1.6rem;letter-spacing:0;line-height:1.4}img{max-width:100%}.clearfix:after{clear:both;content:" ";display:table}.float-left{float:left}.float-right{float:right}:root{--bg: #0b0b0f;--text: #e6eef3;--muted: #9aa0a6;--link: #58a6ff;--max-width: 720px;--fs-base: 16px;--lh-base: 1.6}html,body{height:100%}html{font-size:100%}body{background:var(--bg);color:var(--text);font-family:Inter,ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial;font-size:var(--fs-base);line-height:var(--lh-base);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.container{max-width:var(--max-width);margin:2rem auto;padding:0 1rem}.top-nav{text-align:center;padding:1rem 0 .25rem}.top-nav .brand{display:inline-flex;align-items:center;gap:.5rem;font-weight:600;color:var(--text);text-decoration:none;font-size:1.125rem}.top-nav .brand-logo{display:inline-block;width:18px;height:18px;object-fit:contain}@keyframes brand-spin{to{transform:rotate(1turn)}}.top-nav .brand-logo.spin{animation:brand-spin .7s cubic-bezier(.22,.8,.36,1)}@media (prefers-reduced-motion: reduce){.top-nav .brand-logo{animation:none!important;transform:none!important}}.top-nav .brand-name{display:inline-block}@media (max-width: 420px){.top-nav .brand-name{display:none}}.top-nav .links{margin-top:.45rem;color:var(--muted);display:flex;gap:1rem;align-items:center;justify-content:center;white-space:nowrap;font-size:.95rem}.top-nav .links a{padding:.25rem .2rem;margin:0 .45rem}.top-nav .links a+a{margin-left:.85rem}.top-nav a{color:var(--link);text-decoration:none}.top-nav .sep{color:var(--muted);padding:0 .5rem}.hero{font-size:2rem;margin:.7rem 0 .25rem;font-weight:500;letter-spacing:.01em}article>h1,.page-title{font-size:1.5rem;margin:0 0 .35rem;font-weight:500;color:var(--text);letter-spacing:-.01em}.role{color:var(--muted);margin-top:0;margin-bottom:.15rem;font-size:1.0625rem;font-weight:500}.bio{max-width:60ch;font-size:1rem;margin-top:.08rem;margin-bottom:.3rem}.previews{margin-top:1.6rem}.social{margin:.34rem auto 0;display:flex;gap:.6rem;align-items:center;justify-content:center}.social-link{color:var(--link);display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px}.social-link svg{display:block;width:100%;height:100%}a{color:var(--link)}.muted{color:var(--muted)}.posts,.notes,.projects{list-style:none;padding:0;margin:0}.post,.note,.project{padding:1rem 0;border-bottom:1px solid rgba(255,255,255,.02)}.post:last-child,.note:last-child,.project:last-child{border-bottom:none}.post-detail{margin-top:1rem}.post-detail h1{font-size:1.75rem;margin-bottom:.25rem;font-weight:500}.post-content p{margin:.9rem 0;font-size:1rem;line-height:1.6}.post-content h2{margin-top:1.25rem;font-size:1.125rem}.markdown h2{margin-top:1.25rem;font-size:1.1rem}.markdown h3{margin-top:1rem;font-size:1rem}.markdown p{margin:.8rem 0}.markdown ul,.markdown ol{margin:.6rem 0 .9rem 1.2rem}.markdown pre{background:#ffffff05;padding:.5rem;border-radius:6px;overflow:auto;white-space:pre;border:none;box-shadow:none}.markdown pre code{white-space:pre;display:block;font-size:.95rem;line-height:1.5;color:var(--text);background:transparent}.markdown code{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Roboto Mono,Segoe UI Mono,Helvetica Neue,monospace;font-size:.95rem;background:transparent;padding:0;border-radius:0}.markdown blockquote{color:var(--muted);font-style:italic;margin:.6rem 0;padding-left:0;border:none}.hljs{background:transparent;color:var(--text)}.hljs-comment,.hljs-quote{color:#6a737d;font-style:italic}.hljs-keyword,.hljs-selector-tag,.hljs-subst{color:#ff7b72;font-weight:600}.hljs-number,.hljs-literal,.hljs-symbol{color:#ffb86b}.hljs-string,.hljs-title,.hljs-section,.hljs-name{color:#a6e22e}.hljs-function .hljs-title,.hljs-built_in{color:#61afef}.hljs-attribute{color:#ffd580}.hljs-variable{color:#e6c07b}.hljs-tag{color:#7ee787}.post-detail{margin-top:2rem;max-width:68ch;margin-left:auto;margin-right:auto}.post-header{margin-bottom:1rem}.post-header h1{font-size:1.75rem;margin:0 0 .35rem}.post-meta{color:var(--muted);font-size:.95rem;margin-bottom:.5rem}.lead{font-size:1rem;color:var(--muted);margin-bottom:1rem}@media (max-width: 640px){.post-detail{padding:0 .6rem;max-width:100%}.post-header h1{font-size:1.5rem}.lead{font-size:1rem}}.previews h2{font-size:1.6rem;margin-top:1.25rem;margin-bottom:.5rem;font-weight:500;color:var(--text);letter-spacing:.01em}.highlight{padding:.45rem 0}.highlight a{color:var(--link);text-decoration:none;font-size:1.6rem;font-weight:500;letter-spacing:.01em}.highlight .muted{margin-top:.35rem;color:var(--muted)}a,.top-nav a,.highlight a,.badge{position:relative;display:inline-block}a:after,.top-nav a:after,.highlight a:after,.badge:after{content:"";position:absolute;left:0;bottom:-1px;width:0%;height:2px;background:var(--link);border-radius:2px;transition:width .2s cubic-bezier(.2,.8,.2,1),background .16s ease}.top-nav a.active:after{width:100%}.top-nav a.active{color:var(--link)}a:hover:after,.top-nav a:hover:after,.highlight a:hover:after,.badge:hover:after{width:100%}.social-link:after,.social-link:hover:after{display:none;width:0}.top-nav .brand:after,.top-nav .brand:hover:after{display:none;width:0}.badge{transition:background .16s ease,border-color .16s ease,color .16s ease,transform .12s ease}.badge:hover{background:#58a6ff0a;border-color:var(--link);color:var(--link);transform:translateY(-1px)}.badge:active{transform:translateY(0)}@media (prefers-reduced-motion: reduce){a:after,.top-nav a:after,.highlight a:after,.badge:after{transition:none}.badge{transition:none;transform:none}}html,body{height:100%;scrollbar-width:none;-ms-overflow-style:none}.site{min-height:100vh;display:flex;flex-direction:column;-webkit-overflow-scrolling:touch;scrollbar-width:none;-ms-overflow-style:none}.layout{display:flex;flex-direction:column;min-height:100vh}.container{flex:1}html::-webkit-scrollbar,body::-webkit-scrollbar,.site::-webkit-scrollbar{display:none!important;width:0!important;height:0!important}.badge{display:inline-flex;align-items:center;gap:.4rem;padding:.35rem .6rem;margin-right:.5rem;border:1px solid rgba(255,255,255,.06);border-radius:8px;color:var(--muted);background:transparent;font-weight:500;text-transform:uppercase;letter-spacing:.06em;font-size:.78rem;cursor:pointer}.badge:hover{border-color:#58a6ff29;color:var(--link)}.badge.active{color:var(--link);border-color:var(--link);background:#58a6ff0a}.tags{color:var(--muted);font-size:.95rem}.site-footer{text-align:center;padding:.8rem 0 calc(1rem + env(safe-area-inset-bottom));color:var(--muted)}.site-footer .small{margin:0 0 .24rem}@media (max-width: 640px){html{font-size:104%}.container{padding:0 1.4rem 1rem;margin:1rem auto}.top-nav{padding:.6rem 0 .25rem}.top-nav .links{display:flex;gap:.6rem;justify-content:center;flex-wrap:wrap;font-size:.96rem}.top-nav .links a{padding:.35rem .25rem}.site-footer{position:static;padding:.9rem 0 calc(1rem + env(safe-area-inset-bottom));background:var(--bg);border-top:1px solid rgba(255,255,255,.02)}.hero{font-size:1.9rem;margin-top:.8rem;margin-bottom:.2rem;letter-spacing:.01em}article>h1,.page-title{font-size:1.3rem}.role{font-size:1rem;margin-bottom:.6rem}.bio{font-size:1rem;max-width:44ch;line-height:1.7;margin-bottom:1.4rem}.previews{margin-top:2.4rem}.previews h2{font-size:1.12rem;margin-top:1rem}.highlight{padding:.5rem 0}.highlight a{font-size:1.12rem;font-weight:500;letter-spacing:.01em}.social{gap:.9rem}.social-link{width:34px;height:34px}.post-detail h1{font-size:1.08rem}.post,.note,.project{padding:.65rem 0}.site{padding:0 .5rem}}@media (max-width: 420px){html{font-size:94%}.hero{font-size:1.15rem}.previews h2{font-size:1.05rem}.highlight a{font-size:.95rem;letter-spacing:.01em}.container{margin:.9rem auto;padding:0 .7rem}}.small{font-size:.95rem;color:var(--muted)}
