.floating-nav{position:fixed;bottom:24px;left:50%;transform:translate(-50%);z-index:1000;pointer-events:none;transition:transform .3s ease,opacity .3s ease}.floating-nav.nav-hidden{transform:translate(-50%) translateY(calc(100% + 24px));opacity:0;pointer-events:none}.nav-container{display:flex;align-items:center;background:var(--primary);border:1px solid var(--nav-border-color);border-radius:500px;padding:12px 16px;gap:12px;pointer-events:auto;box-shadow:0 4px 6px #0000000d}html.dark .nav-container{background:#1d1d1f}.nav-item{display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:8px;text-decoration:none;color:var(--primary-foreground);transition:all .2s ease;min-width:34px;position:relative;padding:0 8px;opacity:.5;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-touch-callout:none}.nav-item:hover{color:var(--heading-color);opacity:1}.nav-item.active{color:var(--heading-color);opacity:1;transform:scale(1.1)}.nav-item.active:before{content:"";position:absolute;inset:0;border-radius:8px}.nav-icon{display:flex;align-items:center;justify-content:center;margin-bottom:4px;position:relative;z-index:1}.nav-text{font-size:11px;font-weight:500;font-family:GeistVF,sans-serif;position:relative;z-index:1}.nav-divider{width:1px;height:24px;background-color:var(--border-color);margin:0 4px}.theme-toggle{background:none;border:none;cursor:pointer}html.dark #moon-icon,html.light #sun-icon{display:none}html.dark #sun-icon,html.light #moon-icon{display:block}@media(max-width:660px){.nav-container{justify-content:space-around;padding-bottom:8px;padding-top:8px}.nav-text{font-size:10px}}:root{--dashed-lines-visible: 0;--primary: #161617;--accent-color: #3f3f46;--text-default: #eaeaea;--text-secondary: #a1a1aa;--primary-foreground: #a1a1aa;--text-disabled: #adadad8e;--secondary-color: #fdfdfd;--surface-primary: rgba(36, 35, 41, .95);--surface-highlight: #27272a66;--border-color: #26262a6d;--nav-border-color: #26262a6d;--border-color-hover: hsl(240 3.7% 15.9%);--card-color: #27272a66;--card-color-hover: #27272a66;--heading-color: #ffffff;--code-color: #ffc799;--code-bg-color: #1d1d1f;--tag-text: #cdcdcd;--nav-bg: rgba(26, 27, 28, .8);--link-decoration: #525252;--pre-bg-color: transparent;--font-weight-default: 400;--timeline-line-color: rgba(255,255,255,.2);--timeline-line-color-active: #ffffff;--selection-color: #3f3f46;--toc-inactive-border: rgba(255, 255, 255, .2);--text-muted: #71717a;--text-subtle: lab(47.8878% 1.65477 -5.77283);--font-serif: "STIX Two Text", serif}html.light{--primary: #fdfdfd;--accent-color: #141413;--text-default: #71717A;--text-secondary: #141413;--primary-foreground: #73726c;--text-disabled: #71717a8e;--secondary-color: #141413;--surface-primary: rgba(36, 35, 41, .95);--surface-highlight: #f2f2f2;--border-color: transparent;--nav-border-color: rgba(99, 96, 31, .17);--border-color-hover: hsl(240 5% 70%);--card-color: #f2f2f2;--card-color-hover: #f2f2f2;--heading-color: #141413;--code-color: #d97757;--code-bg-color: #f2f2f2;--tag-text: #73726c;--nav-bg: rgba(232, 230, 227, .8);--link-decoration: #a1a1aa;--pre-bg-color: transparent;--font-weight-default: 500;--timeline-line-color: #141413;--timeline-line-color-active: #141413;--selection-color: #424242;--toc-inactive-border: #d4d4d4;--text-muted: #71717a;--text-subtle: lab(47.8878% 1.65477 -5.77283)}@font-face{font-family:Doto;src:url(/fonts/Doto.ttf);font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:STIX Two Text;src:url(/fonts/STIXTwoText-Variable.ttf) format("truetype");font-weight:200 900;font-style:normal;font-display:swap}@font-face{font-family:GeistVF;src:url(/fonts/GeistVF.woff) format("woff");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:GeistMonoVF;src:url(/fonts/GeistMonoVF.woff) format("woff");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Gateral;src:url(/fonts/gateral/gateral-regular.ttf) format("truetype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Gateral;src:url(/fonts/gateral/gateral-light.ttf) format("truetype");font-weight:300;font-style:normal;font-display:swap}@font-face{font-family:Gateral;src:url(/fonts/gateral/gateral-medium.ttf) format("truetype");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Gateral;src:url(/fonts/gateral/gateral-bold.ttf) format("truetype");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:Gateral;src:url(/fonts/gateral/gateral-ex-bold.ttf) format("truetype");font-weight:700;font-style:normal;font-display:swap}html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:"GeistVF",ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;background-color:var(--primary);scrollbar-gutter:stable}body{background-color:var(--primary);min-height:100vh}html,body{background-color:var(--primary)!important}html:before{content:"";position:fixed;top:0;left:0;width:100%;height:100%;background-color:var(--primary);z-index:-1;pointer-events:none}h1,h2,h3,h4,h5,h6{font-family:GeistVF,sans-serif;color:var(--heading-color)!important}h1,h2,h3,h4,h5,strong,u,b{font-weight:500!important}h1{font-size:56px;font-weight:var(--font-weight-default)!important}h2{font-size:25px}h3{font-size:22px}h4{font-size:16px}p{color:var(--text-default);font-weight:var(--font-weight-default);font-size:16px;font-family:GeistVF,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}p,li{line-height:1.5}blockquote{border-left-color:var(--accent-color)!important}code{font-family:GeistMonoVF!important;font-weight:500!important;font-size:14px!important}:not(pre)>code{color:var(--code-color)!important}pre{background-color:var(--pre-bg-color)!important;border:2px solid var(--border-color)!important;border-radius:6px!important;padding:4px!important}html.light code{background-color:var(--code-bg-color)!important;border-radius:4.2px!important;padding:1px 4px!important}pre>code{display:block;width:-moz-fit-content;width:fit-content;min-width:100%;background-color:var(--code-bg-color)!important;border-radius:6px!important;border:none!important;padding:16px!important}code:before,code:after{content:""!important}html:not(.light) pre:has(code),html:not(.light) pre:has(code) span{color:var(--shiki-dark)!important;background-color:transparent!important;font-style:var(--shiki-dark-font-style)!important;font-weight:var(--shiki-dark-font-weight)!important;-webkit-text-decoration:var(--shiki-dark-text-decoration)!important;text-decoration:var(--shiki-dark-text-decoration)!important}html.light pre:has(code),html.light pre:has(code) span{background-color:var(--code-bg-color)!important}tr,thead,hr{border-color:#292929!important}th{color:var(--heading-color)!important;font-weight:500!important;font-size:17px!important}article{width:100%!important}.prose{font-family:var(--font-serif);font-size:17px;font-weight:500}.prose p,.prose li{line-height:1.3;font-size:17px;letter-spacing:.3;font-weight:400;font-family:var(--font-serif);color:var(--text-default)}.prose li{padding:6px 0;margin-top:0!important;margin-bottom:0!important}.prose p{margin-top:0!important;margin-bottom:16px!important}.prose img{margin-bottom:16px!important}.prose pre{margin-top:16px!important;margin-bottom:16px!important}.prose ol{margin-top:0!important}.prose ul,.prose ol,.prose blockquote,.prose u{line-height:1.4}.prose u{font-weight:600!important;color:#bcbcc6;text-underline-offset:2px}.prose a{text-decoration-color:var(--link-decoration)!important;text-underline-offset:3px;text-decoration-thickness:1px}.prose h1,.prose h2,.prose h3,.prose h4{font-family:STIX Two Text;font-weight:500!important;margin-top:20px!important;margin-bottom:10px!important}.prose h1{font-size:30px!important}.prose h2{font-size:22px!important}.prose table{margin:3em 0}html.light .prose,html.light .prose p,html.light .prose li{color:var(--heading-color);font-weight:400}html.light .prose u{color:var(--heading-color)}html.light .prose b,html.light summary,html.light li::marker{color:var(--text-secondary)!important;font-weight:650!important}html.light .blog-title+div{opacity:.6}.blog-title{font-family:Gateral,serif;line-height:1.1}@media(min-width:768px){.blog-title{line-height:1.2}}.custom-dashed-border-h{background-image:linear-gradient(to right,var(--border-color) 5px,transparent 5px);background-size:8px 100%;display:none}.custom-dashed-border-v{background-image:linear-gradient(to bottom,var(--border-color) 5px,transparent 5px);background-size:100% 8px;display:none}.divider{width:100%;height:.25px;background-color:#f7f7f748}.tag{background-color:var(--surface-highlight);font-size:11px;display:flex!important;align-items:center!important;color:var(--tag-text);border:1px solid var(--border-color);border-radius:4px}html.light .tag{background-color:#f2f2f2}.tag-active{background-color:var(--accent-color);color:var(--secondary-color);border-color:var(--accent-color)}html.light .tag-active{background-color:#d4d4d4af;color:var(--heading-color);border-color:#a1a1aa}html.light .card{border:none;background-color:var(--card-color-hover)}.project-list{background-color:var(--surface-primary);border-radius:8px}.image-noise-wrapper{position:relative;-o-object-fit:cover;object-fit:cover;width:100%}.image-noise{background-image:url(/images/other/noise.png);background-position:0 0;background-size:200px;position:absolute;inset:0%}.anim-hover-white{opacity:.5;transition:opacity .2s ease-in-out}.anim-hover-white:hover{color:var(--heading-color);opacity:1}.hover-highlight{transition:color .2s ease-in-out}.hover-highlight:hover{color:var(--accent-color)!important}.anim-hover-accent{opacity:.8;transition:opacity .2s ease-in-out}.anim-hover-accent:hover{color:var(--accent-color);opacity:1}::-moz-selection{color:#fff;background:var(--selection-color)}::selection{color:#fff;background:var(--selection-color)}::-moz-selection{color:#0f0913;background:var(--selection-color)}html.light ::-moz-selection{color:var(--text-default);background:var(--selection-color)}@keyframes slide-enter{0%{transform:translateY(10px);opacity:0}to{transform:translateY(0);opacity:1}}@media(prefers-reduced-motion:no-preference){html:not(.no-sliding) [slide-enter],html:not(.no-sliding) .slide-enter,html:not(.no-sliding) .slide-enter-content>*:not(:has(.table-of-contents)){--enter-stage: 0;--enter-step: 90ms;--enter-initial: 0ms;animation:slide-enter .7s both 1;animation-delay:calc(var(--enter-initial) + var(--enter-stage) * var(--enter-step))}.slide-enter-content>*:nth-child(1){--enter-stage: 1 !important}.slide-enter-content>*:nth-child(2){--enter-stage: 2 !important}.slide-enter-content>*:nth-child(3){--enter-stage: 3 !important}.slide-enter-content>*:nth-child(4){--enter-stage: 4 !important}.slide-enter-content>*:nth-child(5){--enter-stage: 5 !important}.slide-enter-content>*:nth-child(6){--enter-stage: 6 !important}.slide-enter-content>*:nth-child(7){--enter-stage: 7 !important}.slide-enter-content>*:nth-child(8){--enter-stage: 8 !important}.slide-enter-content>*:nth-child(9){--enter-stage: 9 !important}.slide-enter-content>*:nth-child(10){--enter-stage: 10 !important}.slide-enter-content>*:nth-child(11){--enter-stage: 11 !important}.slide-enter-content>*:nth-child(12){--enter-stage: 12 !important}.slide-enter-content>*:nth-child(13){--enter-stage: 13 !important}.slide-enter-content>*:nth-child(14){--enter-stage: 14 !important}.slide-enter-content>*:nth-child(15){--enter-stage: 15 !important}.slide-enter-content>*:nth-child(16){--enter-stage: 16 !important}.slide-enter-content>*:nth-child(17){--enter-stage: 17 !important}.slide-enter-content>*:nth-child(18){--enter-stage: 18 !important}.slide-enter-content>*:nth-child(19){--enter-stage: 19 !important}.slide-enter-content>*:nth-child(20){--enter-stage: 20 !important}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.stagger-fade-in>*{animation:fadeInUp .6s ease-out forwards;opacity:0}.stagger-fade-in>*:nth-child(n){animation-delay:calc((var(--stagger-base, 0s)) + (var(--stagger-step, .05s) * (var(--child-index, 0))))}.projects-list a{transition:filter .3s ease}.projects-list:has(a:hover) a:not(:hover){filter:grayscale(100%)}.bottom-gradient[data-astro-cid-sckkx6r4]{position:fixed;bottom:0;left:0;right:0;height:120px;background:linear-gradient(to top,var(--primary) 0%,transparent 100%);pointer-events:none;z-index:100}
