:root{--spring-elegant-easing: linear(0 0%, .005927 1%, .022466 2%, .047872 3%, .080554 4%, .119068 5%, .162116 6%, .208536 7.000000000000001%, .2573 8%, .3075 9%, .358346 10%, .409157 11%, .45935 12%, .508438 13%, .556014 14.000000000000002%, .601751 15%, .645389 16%, .686733 17%, .72564 18%, .762019 19%, .795818 20%, .827026 21%, .855662 22%, .881772 23%, .905423 24%, .926704 25%, .945714 26%, .962568 27%, .977386 28%, .990295 28.999999999999996%, 1.001426 30%, 1.010911 31%, 1.018881 32%, 1.025465 33%, 1.030792 34%, 1.034982 35%, 1.038155 36%, 1.040423 37%, 1.041892 38%, 1.042662 39%, 1.042827 40%, 1.042473 41%, 1.04168 42%, 1.040522 43%, 1.039065 44%, 1.037371 45%, 1.035493 46%, 1.03348 47%, 1.031376 48%, 1.029217 49%, 1.027037 50%, 1.024864 51%, 1.022722 52%, 1.020631 53%, 1.018608 54%, 1.016667 55.00000000000001%, 1.014817 56.00000000000001%, 1.013067 56.99999999999999%, 1.011422 57.99999999999999%, 1.009887 59%, 1.008462 60%, 1.007148 61%, 1.005944 62%, 1.004847 63%, 1.003855 64%, 1.002964 65%, 1.002169 66%, 1.001466 67%, 1.000848 68%, 1.000311 69%, .999849 70%, .999457 71%, .999128 72%, .998858 73%, .99864 74%, .99847 75%, .998342 76%, .998253 77%, .998196 78%, .998169 79%, .998167 80%, .998186 81%, .998224 82%, .998276 83%, .998341 84%, .998415 85%, .998497 86%, .998584 87%, .998675 88%, .998768 89%, .998861 90%, .998954 91%, .999045 92%, .999134 93%, .99922 94%, .999303 95%, .999381 96%, .999455 97%, .999525 98%, .999589 99%, .99965 100%);--spring-elegant-easing-light: linear(0 0%, .003894 1%, .014828 2%, .031757 3%, .053732 4%, .079896 5%, .109479 6%, .141786 7.000000000000001%, .176202 8%, .212175 9%, .249219 10%, .286907 11%, .324863 12%, .362763 13%, .400326 14.000000000000002%, .437313 15%, .473521 16%, .508781 17%, .542956 18%, .575932 19%, .607625 20%, .637968 21%, .666915 22%, .694437 23%, .720519 24%, .74516 25%, .76837 26%, .790168 27%, .810581 28.000000000000004%, .829644 28.999999999999996%, .847395 30%, .86388 31%, .879146 32%, .893244 33%, .906226 34%, .918147 35%, .92906 36%, .93902 37%, .948082 38%, .956301 39%, .963727 40%, .970415 41%, .976413 42%, .98177 43%, .986534 44%, .990748 45%, .994457 46%, .997701 47%, 1.000519 48%, 1.002948 49%, 1.005022 50%, 1.006775 51%, 1.008237 52%, 1.009436 53%, 1.010399 54%, 1.011152 55.00000000000001%, 1.011717 56.00000000000001%, 1.012115 56.99999999999999%, 1.012368 57.99999999999999%, 1.012491 59%, 1.012503 60%, 1.012418 61%, 1.01225 62%, 1.012012 63%, 1.011716 64%, 1.011371 65%, 1.010986 66%, 1.010571 67%, 1.010132 68%, 1.009676 69%, 1.009209 70%, 1.008735 71%, 1.00826 72%, 1.007787 73%, 1.00732 74%, 1.006861 75%, 1.006412 76%, 1.005976 77%, 1.005554 78%, 1.005148 79%, 1.004758 80%, 1.004385 81%, 1.00403 82%, 1.003693 83%, 1.003373 84%, 1.003072 85%, 1.002789 86%, 1.002523 87%, 1.002274 88%, 1.002042 89%, 1.001826 90%, 1.001626 91%, 1.001441 92%, 1.00127 93%, 1.001113 94%, 1.000969 95%, 1.000837 96%, 1.000717 97%, 1.000608 98%, 1.000509 99%, 1.00042 100%);--spring-bouyant: linear(0 0%, .004379 1%, .017027 2%, .037197 3%, .064139 4%, .097098 5%, .135326 6%, .178089 7.000000000000001%, .224667 8%, .274366 9%, .326515 10%, .380476 11%, .435642 12%, .491445 13%, .547353 14.000000000000002%, .602874 15%, .65756 16%, .711 17%, .76283 18%, .812725 19%, .860402 20%, .90562 21%, .948177 22%, .98791 23%, 1.024693 24%, 1.058435 25%, 1.089077 26%, 1.116593 27%, 1.140987 28.000000000000004%, 1.162286 28.999999999999996%, 1.180545 30%, 1.19584 31%, 1.208266 32%, 1.217937 33%, 1.22498 34%, 1.229538 35%, 1.231761 36%, 1.231811 37%, 1.229853 38%, 1.226059 39%, 1.220603 40%, 1.213659 41%, 1.205403 42%, 1.196006 43%, 1.185638 44%, 1.174463 45%, 1.162638 46%, 1.150318 47%, 1.137645 48%, 1.124757 49%, 1.111781 50%, 1.098837 51%, 1.086034 52%, 1.073472 53%, 1.061241 54%, 1.04942 55.00000000000001%, 1.038082 56.00000000000001%, 1.027286 56.99999999999999%, 1.017084 57.99999999999999%, 1.007519 59%, .998624 60%, .990425 61%, .982939 62%, .976176 63%, .970139 64%, .964824 65%, .960222 66%, .956318 67%, .953091 68%, .950518 69%, .94857 70%, .947216 71%, .946423 72%, .946154 73%, .946371 74%, .947035 75%, .948105 76%, .949542 77%, .951304 78%, .953352 79%, .955646 80%, .958146 81%, .960816 82%, .963619 83%, .966522 84%, .96949 85%, .972494 86%, .975505 87%, .978496 88%, .981443 89%, .984323 90%, .987118 91%, .989809 92%, .992382 93%, .994822 94%, .99712 95%, .999265 96%, 1.001252 97%, 1.003076 98%, 1.004733 99%, 1.006221 100%);--theme-change-speed: .3s;--transition-fast: .15s ease;--transition-medium: .25s ease}.cta-btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;background:#1a1a1a;color:#fff;border:none;border-radius:9999px;padding:10px 24px;font-family:inherit;font-size:.95rem;font-weight:600;cursor:pointer;text-decoration:none;transition:transform var(--hover-speed, .65s) var(--spring-bouyant),filter var(--hover-speed, .65s) var(--spring-bouyant),border-color .2s ease;will-change:transform,filter;filter:drop-shadow(0 0 0 rgba(0,0,0,0));-webkit-tap-highlight-color:transparent}.cta-btn:hover{transform:scale(1.04);filter:drop-shadow(0 4px 12px rgba(0,0,0,.15))}.cta-btn:active{transform:scale(.97)}.cta-btn svg{flex-shrink:0}.hover-lift,.post-cover,img{--_easing: var(--spring-elegant-easing-light, cubic-bezier(.4, 0, .2, 1));transition:transform var(--hover-speed, .65s) var(--spring-bouyant),filter var(--hover-speed, .65s) var(--spring-bouyant),border-color .2s ease;will-change:transform,filter;filter:drop-shadow(0 0 0 rgba(0,0,0,0));-webkit-tap-highlight-color:transparent}.hover-lift:hover,.post-cover:hover,img:hover{transform:scale(1.02);filter:drop-shadow(0 4px 12px rgba(0,0,0,.1))}.hover-lift:active,.post-cover:active,img:active{transform:scale(.98)}body.has-preset.brightness-light{--code-mix: black}body.has-preset.brightness-dark{--code-mix: white}body.has-preset{background:var(--page-bg);color:var(--page-fg)}body.has-preset a,body.has-preset a:visited{color:var(--page-primary)}body.has-preset article a:not(.cta-btn):not(.nav-link),body.has-preset article a:not(.cta-btn):not(.nav-link):visited{color:var(--page-fg)}body.has-preset .post-meta,body.has-preset .meta,body.has-preset .index-date{color:var(--page-secondary)}body.has-preset .post-date,body.has-preset .post-date a{color:var(--page-tertiary)}body.has-preset header a,body.has-preset header a:visited,body.has-preset header li{color:var(--page-fg)}body.has-preset .hr-list{border-bottom-color:var(--page-tertiary)}body.has-preset footer{border-top-color:var(--page-tertiary)}body.has-preset .social-links a{color:var(--page-secondary)}body.has-preset .social-links a:hover{color:var(--page-fg)}body.has-preset blockquote{border-left-color:var(--page-tertiary)}body.has-preset :not(pre)>code{background:color-mix(in srgb,var(--page-fg) 12%,var(--page-bg))!important;color:var(--page-fg)!important;border:1px solid color-mix(in srgb,var(--page-fg) 18%,var(--page-bg))!important}body.has-preset pre:not(.code-block pre){background:var(--code-bg, color-mix(in srgb, var(--code-mix) 8%, var(--page-bg)))!important;border-color:var(--code-border, color-mix(in srgb, var(--code-mix) 15%, var(--page-bg)))!important}body.has-preset pre:not(.code-block pre) *{background-color:transparent!important}*,:after,:before{box-sizing:border-box;padding:0}body{font:1rem/1.5 Bricolage Grotesque,-apple-system,BlinkMacSystemFont,Segoe UI,Helvetica,Arial,sans-serif;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;padding:0 2rem;margin:0;background:#fffdfa;color:#000;overflow-x:clip}.skip-link{position:absolute;top:-40px;left:0;background:#eee;z-index:100}.skip-link:focus{top:0}header{display:flex;align-items:center;position:relative;padding:1rem 0;gap:1.5rem}header .theme-toggle{background:none;border:none;padding:6px;cursor:pointer;color:inherit;opacity:.5;transition:opacity .2s ease;display:flex;align-items:center;justify-content:center;border-radius:6px}header .theme-toggle:hover{opacity:1}header .theme-icon--dark{display:none}header .burger{display:none;background:none;border:none;padding:0;cursor:pointer}header .burger span{display:block;width:25px;height:3px;background:currentColor;margin:5px 0;transition:all .3s ease}@media(max-width:768px){header .burger{display:block;z-index:2}header .nav-menu{position:fixed;top:0;right:-100%;width:100%;height:100vh;background:var(--page-bg, #fffdfa);padding:2rem;transition:.3s ease;z-index:1}header .nav-menu.active{right:0}header .nav-menu ul{flex-direction:column;align-items:center;width:100%}header .nav-menu ul li{display:block;font-size:1.2rem;border-bottom:1px dotted currentColor;height:50px;display:flex;justify-content:center;align-items:center}header.menu-open .burger span:first-child{transform:rotate(45deg) translate(5px,6px)}header.menu-open .burger span:nth-child(2){opacity:0}header.menu-open .burger span:last-child{transform:rotate(-45deg) translate(5px,-6px)}}html.dark-mode-pending body{background:#0a0a0a;color:#e8e5e0}html.dark-mode-pending body.has-preset{background:var(--page-fg);color:var(--page-bg)}body.dark-mode{transition:background var(--theme-change-speed) ease,color var(--theme-change-speed) ease}body.dark-mode .theme-icon--light{display:none}body.dark-mode .theme-icon--dark{display:block}body.dark-mode:not(.has-preset) a:not(.post-card),body.dark-mode:not(.has-preset) a:not(.post-card):visited{color:#c8c4be}body.dark-mode:not(.has-preset) a:not(.post-card):hover{color:#fff}body.dark-mode:not(.has-preset) .meta,body.dark-mode:not(.has-preset) .index-date{color:#888}body.dark-mode:not(.has-preset) .hr-list{border-bottom-color:#333}body.dark-mode:not(.has-preset) footer{border-top-color:#333;color:#777}body.dark-mode:not(.has-preset) footer a{color:#888}body.dark-mode:not(.has-preset) footer a:hover{color:#ddd}body.dark-mode:not(.has-preset) header .burger span{background:#e8e5e0}body.dark-mode:not(.has-preset) :not(pre)>code{background:#2a2a2a;color:#e8e5e0;border:1px solid #3a3a3a}body.dark-mode:not(.has-preset) pre:not(.code-block pre){background:#222!important;border-color:#333!important}body.dark-mode:not(.has-preset) blockquote{border-left-color:#333}body.dark-mode:not(.has-preset) th{background-color:#2a2a2a}body.dark-mode:not(.has-preset) th,body.dark-mode:not(.has-preset) td{border-color:#333}body.dark-mode.has-preset{transition:background var(--theme-change-speed) ease,color var(--theme-change-speed) ease}body.dark-mode.has-preset .nav-menu{background:var(--page-bg)}header .nav-menu{margin-left:auto}header a{text-decoration:none}header .nav-link span{position:relative}header .nav-link span:after{content:"";position:absolute;left:0;bottom:-2px;width:100%;height:1.5px;background:currentColor;transform:scaleX(0);transform-origin:right;transition:transform .35s var(--spring-elegant-easing)}header .nav-link:hover span:after{transform:scaleX(1);transform-origin:left}header li.active .nav-link span:after{transform:scaleX(1);transform-origin:left}header ul{list-style-type:none;padding:0}header li,header a{display:inline}.link{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-decoration:none}.time{font-variant-numeric:tabular-nums;white-space:nowrap}blockquote{border-left:5px solid #eee;padding-left:1rem;margin:0}a,a:visited{color:inherit}a:hover,a.heading-link{text-decoration:none}article a:not(.cta-btn):not(.nav-link){color:var(--page-fg, inherit);font-weight:600;text-decoration:underline;text-underline-offset:2px;text-decoration-thickness:1.5px;transition:opacity .2s ease}article a:not(.cta-btn):not(.nav-link):hover{opacity:.8}pre{padding:1rem;overflow:auto;overflow-x:scroll;overflow-wrap:normal;border-radius:12px;border:1px solid #e5e5e5}code,pre{font-family:Fira Code,SF Mono,Monaco,Consolas,Lucida Console,DejaVu Sans Mono,monospace;font-feature-settings:"liga" 1,"calt" 1;font-size:small}pre code{background:none;margin:0;padding:0}:not(pre)>code{margin:0;padding:.1rem .3rem;border:1px solid #ddd;overflow:visible;overflow-wrap:anywhere;background:#eee;border-radius:4px;box-decoration-break:clone;-webkit-box-decoration-break:clone}ul{list-style-type:square}ul,ol{padding-left:1.2rem}.list{line-height:2;list-style-type:none;padding-left:0}.list li{padding-bottom:.1rem}.meta{color:#777}main#main{display:flex;flex-direction:column;min-height:100vh}.content{max-width:70ch;margin:0 auto;width:100%;flex:1 0 auto;display:flex;flex-direction:column}.content h1,.content h2,.content h3,.content h4,.content h5,.content h6{margin-top:2em}h2.post{padding-top:.25rem;font-size:2.5rem;font-weight:800;line-height:120%}header ul a:first-child{padding-left:1rem}.nav{height:1px;background:#000;content:"";max-width:10%}.list li{display:flex;align-items:baseline}.list li time{flex:0 1 auto}.hr-list{margin-top:0;margin-bottom:0;margin-right:.5rem;margin-left:.5rem;height:1px;border:0;border-bottom:1px dotted #ccc;flex:1 0 1rem}.m,hr{border:0;margin:3rem 0}img{max-width:100%;height:auto;border-radius:16px}.post-meta{opacity:.6;margin-bottom:1rem}.post-categories .post-category{display:inline;font-weight:600}.post-cover{width:100%;height:auto;border-radius:16px;margin-bottom:1.5rem}.post-cover.cover-top{margin-top:1.5rem}.project-figure{margin:2rem 0}.project-figure img{width:100%;height:auto;border-radius:16px;display:block}.project-figure figcaption{margin-top:.75rem;font-size:.85rem;color:#888;text-align:center;line-height:1.4}h2.post.no-top-spacing{padding-top:0;margin-top:0;margin-bottom:.5rem}.post-date{margin:5% 0}.index-date{color:#9a9a9a}.animate-blink{animation:opacity 1s infinite;opacity:1}@keyframes opacity{0%{opacity:1}50%{opacity:.5}to{opacity:0}}.tags{display:flex;justify-content:space-between}.tags ul{padding:0;margin:0}.tags li{display:inline}.avatar{height:120px;width:120px;position:relative;margin:-10px 0 0 15px;float:right;border-radius:50%}table{width:100%;border-collapse:collapse}th,td{border:1px solid #dddddd;text-align:left;padding:8px}th{background-color:#f2f2f2}footer{margin-top:auto;padding-top:1rem;border-top:1px dotted #ccc}.social-links{display:flex;flex-wrap:wrap;gap:.5rem 1rem;padding:0;margin-bottom:.5rem}.social-links a{font-size:.9rem;color:#555;text-decoration:none}.social-links a:hover{color:#000}.full-width{max-width:100%;height:auto}
