.astro-route-announcer{position:absolute;left:0;top:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap;width:1px;height:1px}.side-element[data-astro-cid-yxtifmrq]{width:40px;position:fixed;bottom:0;left:40px;right:auto;z-index:10;color:var(--lightslate)}@media(max-width:1080px){.side-element[data-astro-cid-yxtifmrq]{left:20px}}@media(max-width:768px){.side-element[data-astro-cid-yxtifmrq]{display:none}}.social-list[data-astro-cid-yxtifmrq]{display:flex;flex-direction:column;align-items:center;margin:0;padding:0;list-style:none}.social-list[data-astro-cid-yxtifmrq]:after{content:"";display:block;width:1px;height:90px;margin:0 auto;background-color:var(--lightslate)}.social-list[data-astro-cid-yxtifmrq] li[data-astro-cid-yxtifmrq]:last-of-type{margin-bottom:20px}.social-list[data-astro-cid-yxtifmrq] li[data-astro-cid-yxtifmrq] a[data-astro-cid-yxtifmrq]{padding:10px;display:inline-block;transition:var(--transition)}.social-list[data-astro-cid-yxtifmrq] li[data-astro-cid-yxtifmrq] a[data-astro-cid-yxtifmrq]:hover,.social-list[data-astro-cid-yxtifmrq] li[data-astro-cid-yxtifmrq] a[data-astro-cid-yxtifmrq]:focus{transform:translateY(-3px)}.social-list[data-astro-cid-yxtifmrq] li[data-astro-cid-yxtifmrq] a[data-astro-cid-yxtifmrq] svg{width:20px;height:20px}.side-element[data-astro-cid-mswyb5gg].right{width:40px;position:fixed;bottom:0;left:auto;right:40px;z-index:10;color:var(--lightslate)}@media(max-width:1080px){.side-element[data-astro-cid-mswyb5gg].right{right:20px}}@media(max-width:768px){.side-element[data-astro-cid-mswyb5gg].right{display:none}}.email-wrapper[data-astro-cid-mswyb5gg]{display:flex;flex-direction:column;align-items:center;position:relative}.email-wrapper[data-astro-cid-mswyb5gg]:after{content:"";display:block;width:1px;height:90px;margin:0 auto;background-color:var(--lightslate)}.email-wrapper[data-astro-cid-mswyb5gg] a[data-astro-cid-mswyb5gg]{margin:20px auto;padding:10px;font-family:var(--font-mono);font-size:var(--fz-xxs);line-height:var(--fz-lg);letter-spacing:.1em;writing-mode:vertical-rl;transition:var(--transition)}.email-wrapper[data-astro-cid-mswyb5gg] a[data-astro-cid-mswyb5gg]:hover,.email-wrapper[data-astro-cid-mswyb5gg] a[data-astro-cid-mswyb5gg]:focus{transform:translateY(-3px)}.styled-footer[data-astro-cid-sz7xmlte]{display:flex;justify-content:center;align-items:center;flex-direction:column;height:auto;min-height:70px;padding:15px;text-align:center}.social-links[data-astro-cid-sz7xmlte]{display:none}@media(max-width:768px){.social-links[data-astro-cid-sz7xmlte]{display:block;width:100%;max-width:270px;margin:0 auto 10px;color:var(--lightslate)}}.social-links[data-astro-cid-sz7xmlte] ul[data-astro-cid-sz7xmlte]{display:flex;justify-content:space-between;align-items:center;padding:0;margin:0;list-style:none}.social-links[data-astro-cid-sz7xmlte] ul[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]{padding:10px}.social-links[data-astro-cid-sz7xmlte] ul[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte] svg{width:20px;height:20px}.credit[data-astro-cid-sz7xmlte]{color:var(--lightslate);font-family:var(--font-mono);font-size:var(--fz-xxs);line-height:1}.credit[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]{padding:10px}@font-face{font-family:Calibre;src:url(/_s/a/BF8rtuU2.woff2) format("woff2"),url(/_s/a/-1hlrhWf.woff) format("woff");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Calibre;src:url(/_s/a/Dr3uPw4d.woff2) format("woff2"),url(/_s/a/CLLEtnc8.woff) format("woff");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Calibre;src:url(/_s/a/ctWswtER.woff2) format("woff2"),url(/_s/a/4458Tx-4.woff) format("woff");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:Calibre;src:url(/_s/a/iX0Te0iB.woff2) format("woff2"),url(/_s/a/CjzLnpHV.woff) format("woff");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:Calibre;src:url(/_s/a/bP60ilMe.woff2) format("woff2"),url(/_s/a/BO9nraGd.woff) format("woff");font-weight:500;font-style:italic;font-display:swap}@font-face{font-family:Calibre;src:url(/_s/a/bSpOXIzM.woff2) format("woff2"),url(/_s/a/27xyafhv.woff) format("woff");font-weight:600;font-style:italic;font-display:swap}@font-face{font-family:SF Mono;src:url(/_s/a/CefSygqP.woff2) format("woff2"),url(/_s/a/pHQ7OiT5.woff) format("woff");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:SF Mono;src:url(/_s/a/Cbwo1XB1.woff2) format("woff2"),url(/_s/a/GntYHmax.woff) format("woff");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:SF Mono;src:url(/_s/a/Bqi1mbuH.woff2) format("woff2"),url(/_s/a/D-2lWrQW.woff) format("woff");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:SF Mono;src:url(/_s/a/dYysnNTL.woff2) format("woff2"),url(/_s/a/DwkXiFFS.woff) format("woff");font-weight:600;font-style:italic;font-display:swap}:root{--font-sans: "Calibre", "Inter", "San Francisco", "SF Pro Text", -apple-system, system-ui, sans-serif;--font-mono: "SF Mono", "Fira Code", "Fira Mono", "Roboto Mono", monospace;--fz-xxs: 12px;--fz-xs: 13px;--fz-sm: 14px;--fz-md: 16px;--fz-lg: 18px;--fz-xl: 20px;--fz-xxl: 22px;--fz-heading: 32px;--border-radius: 4px;--nav-height: 100px;--nav-scroll-height: 70px;--tab-height: 42px;--tab-width: 120px;--easing: cubic-bezier(.645, .045, .355, 1);--transition: all .25s cubic-bezier(.645, .045, .355, 1);--hamburger-width: 30px;--ham-before: top .1s ease-in .25s, opacity .1s ease-in;--ham-before-active: top .1s ease-out, opacity .1s ease-out .12s;--ham-after: bottom .1s ease-in .25s, transform .22s cubic-bezier(.55, .055, .675, .19);--ham-after-active: bottom .1s ease-out, transform .22s cubic-bezier(.215, .61, .355, 1) .12s}html{box-sizing:border-box;width:100%;scroll-behavior:smooth}*,*:before,*:after{box-sizing:inherit}::selection{background-color:var(--lightestnavy);color:var(--lightestslate)}[data-theme=light] ::selection{background-color:var(--highlight);color:#f8fafc}:focus{outline:2px dashed var(--highlight);outline-offset:3px}:focus:not(:focus-visible){outline:none;outline-offset:0px}:focus-visible{outline:2px dashed var(--highlight);outline-offset:3px}html{scrollbar-width:thin;scrollbar-color:var(--darkslate) var(--navy)}::-webkit-scrollbar{width:12px}::-webkit-scrollbar-track{background:var(--navy)}::-webkit-scrollbar-thumb{background-color:var(--darkslate);border:3px solid var(--navy);border-radius:10px}body{margin:0;width:100%;min-height:100%;overflow-x:hidden;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;background-color:var(--navy);color:var(--slate);font-family:var(--font-sans);font-size:var(--fz-xl);line-height:1.5}@media(max-width:480px){body{font-size:var(--fz-lg)}}body.theme-ready{transition:background-color .3s ease,color .3s ease}body.hidden,body.blur{overflow:hidden}body.blur header{background-color:transparent}#root{min-height:100vh;display:grid;grid-template-rows:1fr auto;grid-template-columns:100%}main{margin:0 auto;width:100%;max-width:1600px;min-height:100vh;padding:200px 150px}@media(max-width:1080px){main{padding:200px 100px}}@media(max-width:768px){main{padding:150px 50px}}@media(max-width:480px){main{padding:125px 25px}}main.fillHeight{padding:0 150px}@media(max-width:1080px){main.fillHeight{padding:0 100px}}@media(max-width:768px){main.fillHeight{padding:0 50px}}@media(max-width:480px){main.fillHeight{padding:0 25px}}section{margin:0 auto;padding:100px 0;max-width:1000px}@media(max-width:768px){section{padding:80px 0}}@media(max-width:480px){section{padding:60px 0}}h1,h2,h3,h4,h5,h6{margin:0 0 10px;font-weight:600;color:var(--lightestslate);line-height:1.1}.big-heading{margin:0;font-size:clamp(40px,8vw,80px)}.medium-heading{margin:0;font-size:clamp(40px,8vw,60px)}main{counter-reset:section}.numbered-heading{display:flex;align-items:center;position:relative;margin:10px 0 40px;width:100%;font-size:clamp(26px,5vw,var(--fz-heading));white-space:nowrap}.numbered-heading:before{position:relative;bottom:4px;counter-increment:section;content:"0" counter(section) ".";margin-right:10px;color:var(--highlight);font-family:var(--font-mono);font-size:clamp(var(--fz-md),3vw,var(--fz-xl));font-weight:400}@media(max-width:480px){.numbered-heading:before{margin-bottom:-3px;margin-right:5px}}.numbered-heading:after{content:"";display:block;position:relative;top:-5px;width:300px;height:1px;margin-left:20px;background-color:var(--lightestnavy)}@media(max-width:1080px){.numbered-heading:after{width:200px}}@media(max-width:768px){.numbered-heading:after{width:100%}}@media(max-width:600px){.numbered-heading:after{margin-left:10px}}img,svg{width:100%;max-width:100%;vertical-align:middle}img[alt=""],img:not([alt]){filter:blur(5px)}svg{width:100%;height:100%;fill:currentColor;vertical-align:middle}svg.feather{fill:none}a{display:inline-block;text-decoration:none;text-decoration-skip-ink:auto;color:inherit;position:relative;transition:var(--transition)}a:hover,a:focus{color:var(--highlight)}a.inline-link,p>a{display:inline-block;text-decoration:none;text-decoration-skip-ink:auto;position:relative;transition:var(--transition);color:var(--highlight)}a.inline-link:hover,a.inline-link:focus-visible,p>a:hover,p>a:focus-visible{color:var(--highlight);outline:0}a.inline-link:hover:after,a.inline-link:focus-visible:after,p>a:hover:after,p>a:focus-visible:after{width:100%}a.inline-link:hover>*,a.inline-link:focus-visible>*,p>a:hover>*,p>a:focus-visible>*{color:var(--highlight)!important;transition:var(--transition)}a.inline-link:after,p>a:after{content:"";display:block;width:0;height:1px;position:relative;bottom:.37em;background-color:var(--highlight);opacity:.5}@media(prefers-reduced-motion:no-preference){a.inline-link:after,p>a:after{transition:var(--transition)}}button{cursor:pointer;border:0;border-radius:0}input,textarea{border-radius:0;outline:0}input:focus,textarea:focus{outline:0}input:focus::placeholder,input:active::placeholder,textarea:focus::placeholder,textarea:active::placeholder{opacity:.5}p{margin:0 0 15px}p:last-child,p:last-of-type{margin:0}p>code{background-color:var(--lightnavy);color:var(--white);font-size:var(--fz-sm);border-radius:var(--border-radius);padding:.3em .5em}ul.fancy-list{padding:0;margin:0;list-style:none;font-size:var(--fz-lg)}ul.fancy-list li{position:relative;padding-left:30px;margin-bottom:10px}ul.fancy-list li:before{content:"▹";position:absolute;left:0;color:var(--highlight)}blockquote{border-left-color:var(--highlight);border-left-style:solid;border-left-width:1px;margin-left:0;margin-right:0;padding-left:1.5rem}blockquote p{font-style:italic;font-size:24px}hr{background-color:var(--lightestnavy);height:1px;border-width:0px;border-style:initial;border-color:initial;border-image:initial;margin:1rem}code{font-family:var(--font-mono);font-size:var(--fz-md)}.skip-to-content{color:var(--highlight);background-color:transparent;border:1px solid var(--highlight);border-radius:var(--border-radius);font-size:var(--fz-xs);font-family:var(--font-mono);line-height:1;text-decoration:none;cursor:pointer;transition:var(--transition);padding:1.25rem 1.75rem;position:absolute;top:auto;left:-999px;width:1px;height:1px;overflow:hidden;z-index:-99}.skip-to-content:hover,.skip-to-content:focus{background-color:var(--highlight);color:var(--navy);top:0;left:0;width:auto;height:auto;overflow:auto;z-index:99;box-shadow:none;transform:none}#logo{color:var(--highlight)}.overline{color:var(--highlight);font-family:var(--font-mono);font-size:var(--fz-md);font-weight:400}.subtitle{color:var(--highlight);margin:0 0 20px;font-size:var(--fz-md);font-family:var(--font-mono);font-weight:400;line-height:1.5}@media(max-width:1080px){.subtitle{font-size:var(--fz-sm)}}@media(max-width:768px){.subtitle{font-size:var(--fz-xs)}}.subtitle a{display:inline-block;text-decoration:none;text-decoration-skip-ink:auto;position:relative;transition:var(--transition);color:var(--highlight);line-height:1.5}.subtitle a:hover:after,.subtitle a:focus-visible:after{width:100%}.subtitle a:after{content:"";display:block;width:0;height:1px;position:relative;bottom:.37em;background-color:var(--highlight);opacity:.5;transition:var(--transition)}.breadcrumb{display:flex;align-items:center;margin-bottom:50px;color:var(--highlight)}.breadcrumb .arrow{display:block;margin-right:10px;padding-top:4px}.breadcrumb a{display:inline-block;text-decoration:none;text-decoration-skip-ink:auto;position:relative;transition:var(--transition);color:var(--highlight);font-family:var(--font-mono);font-size:var(--fz-sm);font-weight:600;line-height:1.5;text-transform:uppercase;letter-spacing:.1em}.breadcrumb a:hover:after,.breadcrumb a:focus-visible:after{width:100%}.breadcrumb a:after{content:"";display:block;width:0;height:1px;position:relative;bottom:.37em;background-color:var(--highlight);opacity:.5;transition:var(--transition)}.btn{color:var(--highlight);background-color:transparent;border:1px solid var(--highlight);border-radius:var(--border-radius);font-size:var(--fz-xs);font-family:var(--font-mono);line-height:1;text-decoration:none;cursor:pointer;transition:var(--transition);padding:1.25rem 1.75rem}.btn:hover,.btn:focus-visible{outline:none;box-shadow:4px 4px 0 0 var(--highlight);transform:translate(-5px,-5px)}.btn:after{display:none!important}.btn-small{color:var(--highlight);background-color:transparent;border:1px solid var(--highlight);border-radius:var(--border-radius);padding:.75rem 1rem;font-size:var(--fz-xs);font-family:var(--font-mono);line-height:1;text-decoration:none;cursor:pointer;transition:var(--transition)}.btn-small:hover,.btn-small:focus-visible{outline:none;box-shadow:3px 3px 0 0 var(--highlight);transform:translate(-4px,-4px)}.btn-small:after{display:none!important}.btn-big{color:var(--highlight);background-color:transparent;border:1px solid var(--highlight);border-radius:var(--border-radius);padding:1.25rem 1.75rem;font-size:var(--fz-sm);font-family:var(--font-mono);line-height:1;text-decoration:none;cursor:pointer;transition:var(--transition)}.btn-big:hover,.btn-big:focus-visible{outline:none;box-shadow:4px 4px 0 0 var(--highlight);transform:translate(-5px,-5px)}.btn-big:after{display:none!important}.search-bar{margin:0 auto 40px;width:100%;max-width:600px}.search-bar input{appearance:none;background-color:var(--navy);border:1px solid var(--darkslate);border-radius:var(--border-radius);color:var(--lightslate);font-size:var(--fz-lg);line-height:1.25;outline:none;padding:12px 15px;transition:border-color .3s ease-in-out;width:100%}.search-bar input:focus{border-color:var(--highlight);background-color:var(--lightnavy)}.search-bar input::placeholder{color:var(--slate)}:root,[data-theme=dark]{--darknavy: #020c1b;--navy: #0a192f;--lightnavy: #112240;--lightestnavy: #233554;--navyshadow: rgba(2, 12, 27, .7);--darkslate: #495670;--slate: #8892b0;--lightslate: #a8b2d1;--lightestslate: #ccd6f6;--white: #e6f1ff;--highlight: #1f6feb;--highlight-tint: rgba(31, 111, 235, .1);--pink: #f57dff;--blue: #57cbff;--feature-img-before-bg: #0a192f}[data-theme=light]{--darknavy: #e2e8f0;--navy: #f8fafc;--lightnavy: #f1f5f9;--lightestnavy: #e2e8f0;--navyshadow: rgba(15, 23, 42, .08);--darkslate: #0f172a;--slate: #334155;--lightslate: #64748b;--lightestslate: #0f172a;--white: #1e293b;--highlight: #2563eb;--highlight-tint: rgba(37, 99, 235, .1);--pink: #c026d3;--blue: #0284c7;--feature-img-before-bg: rgba(248, 250, 252, .7)}.fadeup-enter{opacity:.01;transform:translateY(20px);transition:opacity .3s var(--easing),transform .3s var(--easing)}.fadeup-enter-active{opacity:1;transform:translateY(0);transition:opacity .3s var(--easing),transform .3s var(--easing)}.fadedown-enter{opacity:.01;transform:translateY(-20px);transition:opacity .3s var(--easing),transform .3s var(--easing)}.fadedown-enter-active{opacity:1;transform:translateY(0);transition:opacity .3s var(--easing),transform .3s var(--easing)}.fade-enter{opacity:0}.fade-enter-active{opacity:1;transition:opacity .3s var(--easing)}.fade-exit{opacity:1}.fade-exit-active{opacity:0;transition:opacity .3s var(--easing)}@media(prefers-reduced-motion:no-preference){[data-sr]{opacity:0;transform:translateY(20px);transition:opacity .5s var(--easing),transform .5s var(--easing)}[data-sr].sr-visible{opacity:1;transform:translateY(0)}}@media(prefers-reduced-motion:no-preference){.hero-animate>*{opacity:0;transform:translateY(20px);transition:opacity .3s var(--easing),transform .3s var(--easing)}.hero-animate.hero-visible>*{opacity:1;transform:translateY(0)}.hero-animate.hero-visible>*:nth-child(1){transition-delay:.1s}.hero-animate.hero-visible>*:nth-child(2){transition-delay:.2s}.hero-animate.hero-visible>*:nth-child(3){transition-delay:.3s}.hero-animate.hero-visible>*:nth-child(4){transition-delay:.4s}.hero-animate.hero-visible>*:nth-child(5){transition-delay:.5s}}@media(prefers-reduced-motion:no-preference){.side-element.side-home{opacity:0;transition:opacity .3s var(--easing);transition-delay:2s}.side-element.side-home.side-visible{opacity:1}}.astro-code{border-radius:var(--border-radius);margin:2em 0;padding:1.25em;overflow:auto;position:relative;font-family:var(--font-mono);font-size:var(--fz-md)}.astro-code code{height:auto!important;font-size:var(--fz-sm);line-height:1.5;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;tab-size:2;hyphens:none}[data-theme=dark] .astro-code,[data-theme=dark] .astro-code span{color:var(--shiki-dark)!important;background-color:var(--shiki-dark-bg)!important}.astro-code:before{background:var(--lightestnavy);color:var(--white);font-size:var(--fz-xxs);font-family:var(--font-mono);line-height:1.5;letter-spacing:.1em;text-transform:uppercase;border-radius:0 0 3px 3px;position:absolute;top:0;left:1.25rem;padding:.25rem .5rem}.astro-code[data-language=javascript]:before,.astro-code[data-language=js]:before{content:"js"}.astro-code[data-language=jsx]:before{content:"jsx"}.astro-code[data-language=typescript]:before,.astro-code[data-language=ts]:before{content:"ts"}.astro-code[data-language=tsx]:before{content:"tsx"}.astro-code[data-language=graphql]:before{content:"GraphQL"}.astro-code[data-language=html]:before{content:"html"}.astro-code[data-language=css]:before{content:"css"}.astro-code[data-language=mdx]:before{content:"mdx"}.astro-code[data-language=shell]:before{content:"shell"}.astro-code[data-language=sh]:before{content:"sh"}.astro-code[data-language=bash]:before{content:"bash"}.astro-code[data-language=yaml]:before{content:"yaml"}.astro-code[data-language=markdown]:before,.astro-code[data-language=md]:before{content:"md"}.astro-code[data-language=json]:before,.astro-code[data-language=json5]:before{content:"json"}.astro-code[data-language=diff]:before{content:"diff"}.astro-code[data-language=text]:before{content:"text"}.astro-code[data-language=flow]:before{content:"flow"}.astro-code[data-language=go]:before{content:"go"}.astro-code[data-language=python]:before,.astro-code[data-language=py]:before{content:"python"}.astro-code[data-language=astro]:before{content:"astro"}.astro-code[data-language=dockerfile]:before{content:"docker"}.astro-code[data-language=sql]:before{content:"sql"}.astro-code[data-language=php]:before{content:"php"}.astro-code[data-language=ruby]:before,.astro-code[data-language=rb]:before{content:"ruby"}.astro-code[data-language=rust]:before,.astro-code[data-language=rs]:before{content:"rust"}.astro-code[data-language=toml]:before{content:"toml"}:not(pre)>code{font-size:var(--fz-sm);line-height:1.5}.styled-content{display:flex;flex-direction:column;min-height:100vh}.nav-header{display:flex;justify-content:space-between;align-items:center;position:fixed;top:0;z-index:11;padding:0 50px;width:100%;height:var(--nav-height);background-color:var(--navy);filter:none!important;pointer-events:auto!important;user-select:auto!important;backdrop-filter:blur(10px);transition:var(--transition)}@media(max-width:1080px){.nav-header{padding:0 40px}}@media(max-width:768px){.nav-header{padding:0 25px}}@media(prefers-reduced-motion:no-preference){.nav-header.scroll-up{height:var(--nav-scroll-height);transform:translateY(0);background-color:var(--darknavy);box-shadow:0 10px 30px -10px var(--navyshadow)}.nav-header.scroll-down{height:var(--nav-scroll-height);transform:translateY(calc(var(--nav-scroll-height) * -1));box-shadow:0 10px 30px -10px var(--navyshadow)}}.nav-inner{display:flex;justify-content:space-between;align-items:center;position:relative;width:100%;color:var(--lightestslate);font-family:var(--font-mono);counter-reset:item 0;z-index:12}.nav-inner .logo{display:flex;justify-content:center;align-items:center}.nav-inner .logo a{color:var(--highlight);width:42px;height:42px}.nav-inner .logo a:hover svg,.nav-inner .logo a:focus svg{fill:var(--highlight-tint)}.nav-inner .logo a svg{fill:none;transition:var(--transition);user-select:none}.search-trigger{display:flex;align-items:center;gap:8px;padding:6px 12px;border:1px solid var(--lightestnavy);border-radius:var(--border-radius);background-color:transparent;color:var(--slate);font-family:var(--font-mono);font-size:var(--fz-xxs);cursor:pointer;transition:var(--transition);white-space:nowrap}.search-trigger:hover,.search-trigger:focus-visible{border-color:var(--highlight);color:var(--highlight)}.search-trigger svg{width:16px;height:16px;color:var(--highlight);flex-shrink:0}.search-trigger-kbd{font-family:var(--font-mono);font-size:var(--fz-xxs);padding:2px 6px;border:1px solid var(--lightestnavy);border-radius:3px;background-color:var(--lightnavy);color:var(--slate);line-height:1}@media(max-width:768px){.search-trigger{width:36px;height:36px;padding:0;border:none;gap:0;justify-content:center}.search-trigger svg{width:20px;height:20px}.search-trigger-text,.search-trigger-kbd{display:none}}.dark-mode-toggle{width:36px;height:36px;background-color:transparent;border:none;cursor:pointer;padding:0;display:flex;align-items:center;justify-content:center}.dark-mode-toggle>svg{width:20px;height:20px;color:var(--highlight)}.nav-links{display:flex;align-items:center}@media(max-width:768px){.nav-links{display:none}}.nav-links ol{display:flex;justify-content:space-between;align-items:center;padding:0;margin:0;list-style:none}.nav-links ol li{margin:0 5px;position:relative;counter-increment:item 1;font-size:var(--fz-xs)}.nav-links ol li a{padding:10px}.nav-links ol li a:before{content:"0" counter(item) ".";margin-right:5px;color:var(--highlight);font-size:var(--fz-xxs);text-align:right}.nav-actions{display:flex;align-items:center;gap:8px}.menu-container{display:none}@media(max-width:768px){.menu-container{display:block}}.hamburger-button{display:none}@media(max-width:768px){.hamburger-button{display:flex;justify-content:center;align-items:center;position:relative;z-index:10;margin-right:-15px;padding:15px;border:0;background-color:transparent;color:inherit;text-transform:none;transition-timing-function:linear;transition-duration:.15s;transition-property:opacity,filter;cursor:pointer}}.ham-box{display:inline-block;position:relative;width:var(--hamburger-width);height:24px}.ham-box-inner{position:absolute;top:50%;right:0;width:var(--hamburger-width);height:2px;border-radius:var(--border-radius);background-color:var(--highlight);transition-duration:.22s;transition-property:transform;transition-delay:0s;transform:rotate(0);transition-timing-function:cubic-bezier(.55,.055,.675,.19)}.hamburger-button.active .ham-box-inner{transition-delay:.12s;transform:rotate(225deg);transition-timing-function:cubic-bezier(.215,.61,.355,1)}.ham-box-inner:before,.ham-box-inner:after{content:"";display:block;position:absolute;left:auto;right:0;width:var(--hamburger-width);height:2px;border-radius:4px;background-color:var(--highlight);transition-timing-function:ease;transition-duration:.15s;transition-property:transform}.ham-box-inner:before{width:120%;top:-10px;opacity:1;transition:var(--ham-before)}.hamburger-button.active .ham-box-inner:before{width:100%;top:0;opacity:0;transition:var(--ham-before-active)}.ham-box-inner:after{width:80%;bottom:-10px;transform:rotate(0);transition:var(--ham-after)}.hamburger-button.active .ham-box-inner:after{width:100%;bottom:0;transform:rotate(-90deg);transition:var(--ham-after-active)}.sidebar{display:none}@media(max-width:768px){.sidebar{display:flex;justify-content:center;align-items:center;position:fixed;top:0;bottom:0;right:0;padding:50px 10px;width:min(75vw,400px);height:100vh;outline:0;background-color:var(--lightnavy);box-shadow:-10px 0 30px -15px var(--navyshadow);z-index:9;transform:translate(100vw);visibility:hidden;transition:var(--transition)}.sidebar.open{transform:translate(0);visibility:visible}}.sidebar nav{display:flex;justify-content:space-between;align-items:center;width:100%;flex-direction:column;color:var(--lightestslate);font-family:var(--font-mono);text-align:center}.sidebar ol{padding:0;margin:0;list-style:none;width:100%}.sidebar ol li{position:relative;margin:0 auto 20px;counter-increment:item 1;font-size:clamp(var(--fz-sm),4vw,var(--fz-lg))}@media(max-width:600px){.sidebar ol li{margin:0 auto 10px}}.sidebar ol li:before{content:"0" counter(item) ".";display:block;margin-bottom:5px;color:var(--highlight);font-size:var(--fz-sm)}.sidebar ol li a{width:100%;padding:3px 20px 20px}body.blur{overflow:hidden}body.blur #content>*{filter:blur(5px) brightness(.7);transition:var(--transition);pointer-events:none;user-select:none}.jobs-section{max-width:700px}.jobs-inner{display:flex}@media(max-width:600px){.jobs-inner{display:block}}@media(min-width:700px){.jobs-inner{min-height:300px}}.tab-list{position:relative;z-index:3;width:max-content;padding:0;margin:0;list-style:none}@media(max-width:600px){.tab-list{display:flex;overflow-x:auto;width:calc(100% + 100px);padding-left:50px;margin-left:-50px;margin-bottom:30px}}@media(max-width:480px){.tab-list{width:calc(100% + 50px);padding-left:25px;margin-left:-25px}}.tab-button{display:flex;align-items:center;width:100%;height:var(--tab-height);padding:0 20px 2px;border-left:2px solid var(--lightestnavy);background-color:transparent;color:var(--slate);font-family:var(--font-mono);font-size:var(--fz-xs);text-align:left;white-space:nowrap;border-top:0;border-right:0;border-bottom:0;cursor:pointer;transition:var(--transition)}.tab-button.active{color:var(--highlight)}.tab-button:hover,.tab-button:focus{background-color:var(--lightnavy)}@media(max-width:768px){.tab-button{padding:0 15px 2px}}@media(max-width:600px){.tab-button{display:flex;justify-content:center;align-items:center;min-width:120px;padding:0 15px;border-left:0;border-bottom:2px solid var(--lightestnavy);text-align:center}}.tab-highlight{position:absolute;top:0;left:0;z-index:10;width:2px;height:var(--tab-height);border-radius:var(--border-radius);background:var(--highlight);transition:transform .25s cubic-bezier(.645,.045,.355,1);transition-delay:.1s}@media(max-width:600px){.tab-highlight{top:auto;bottom:0;width:100%;max-width:var(--tab-width);height:2px;margin-left:50px}}@media(max-width:480px){.tab-highlight{margin-left:25px}}.tab-content{width:100%;position:relative;margin-left:20px;display:flex;flex-direction:column}@media(max-width:600px){.tab-content{margin-left:0}}.tab-panels{position:relative;width:100%;margin-left:20px}@media(max-width:600px){.tab-panels{margin-left:0}}.tab-panel{width:100%;height:auto;padding:10px 5px}.tab-panel .job-description{font-size:var(--fz-md)}.tab-panel h3{margin-bottom:2px;font-size:var(--fz-xxl);font-weight:500;line-height:1.3}.tab-panel h3 .company{color:var(--highlight)}.tab-panel .range{margin-bottom:25px;color:var(--lightslate);font-family:var(--font-mono);font-size:var(--fz-xs)}.jobs-section .archive-link{display:flex;align-items:center;justify-content:flex-end;margin-top:auto;padding-top:20px;width:100%;font-family:var(--font-mono);font-size:var(--fz-md)}.jobs-section .archive-link:before{content:"";display:block;flex-grow:1;height:1px;margin-right:20px;background-color:var(--lightestnavy)}.other-projects-section{display:flex;flex-direction:column;align-items:center}.other-projects-section h2{font-size:clamp(24px,5vw,var(--fz-heading))}.other-projects-section .archive-link{font-family:var(--font-mono);font-size:var(--fz-sm)}.projects-grid{list-style:none;padding:0;margin:50px 0 0;display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));grid-gap:15px;position:relative}@media(max-width:1080px){.projects-grid{grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}}.more-button{margin:80px auto 0}.view-projects-button{margin:20px auto 0}.project-card{position:relative;cursor:default;transition:var(--transition)}@media(prefers-reduced-motion:no-preference){.project-card:hover .project-inner,.project-card:focus-within .project-inner{transform:translateY(-7px)}}.project-card a{position:relative;z-index:1}.project-card .project-inner{box-shadow:0 10px 30px -15px var(--navyshadow);display:flex;justify-content:space-between;flex-direction:column;align-items:flex-start;position:relative;height:100%;padding:2rem 1.75rem;border-radius:var(--border-radius);background-color:var(--lightnavy);transition:var(--transition);overflow:auto}.project-card .project-top{display:flex;justify-content:space-between;margin-bottom:35px}.project-card .folder{color:var(--highlight)}.project-card .folder svg{width:40px;height:40px}.project-card .project-links{display:flex;align-items:center;margin-right:-10px;color:var(--lightslate)}.project-card .project-links a{display:flex;justify-content:center;align-items:center;padding:5px 7px}.project-card .project-links a.external svg{width:22px;height:22px;margin-top:-4px}.project-card .project-links a svg{width:20px;height:20px}.project-card .project-title{margin:0 0 10px;color:var(--lightestslate);font-size:var(--fz-xxl)}.project-card .project-title a{position:static}.project-card .project-title a:before{content:"";display:block;position:absolute;z-index:0;width:100%;height:100%;top:0;left:0}.project-card .project-description{color:var(--lightslate);font-size:17px}.project-card .project-tech-list{display:flex;align-items:flex-end;flex-grow:1;flex-wrap:wrap;padding:0;margin:20px 0 0;list-style:none}.project-card .project-tech-list li{font-family:var(--font-mono);font-size:var(--fz-xxs);line-height:1.75}.project-card .project-tech-list li:not(:last-of-type){margin-right:15px}.search-modal{border:none;border-radius:var(--border-radius);background-color:var(--navy);color:var(--slate);max-width:640px;width:90vw;max-height:80vh;padding:0;overflow:hidden;box-shadow:0 20px 60px -10px #00000080}.search-modal::backdrop{background-color:#0009;backdrop-filter:blur(4px)}.search-modal-content{display:flex;flex-direction:column;max-height:80vh}.search-modal-header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--lightestnavy)}.search-modal-title{font-family:var(--font-mono);font-size:var(--fz-sm);color:var(--lightestslate);font-weight:600}.search-modal-close{background:none;border:none;cursor:pointer;padding:0}.search-modal-close kbd{font-family:var(--font-mono);font-size:var(--fz-xxs);padding:3px 8px;border:1px solid var(--lightestnavy);border-radius:3px;background-color:var(--lightnavy);color:var(--slate)}.search-modal-body{padding:16px 20px;overflow-y:auto;flex:1}.search-modal-message{color:var(--slate);font-family:var(--font-mono);font-size:var(--fz-sm);text-align:center;padding:40px 20px}.search-modal-message code{background-color:var(--lightnavy);padding:2px 6px;border-radius:3px;font-size:var(--fz-xs)}.search-modal .pagefind-ui{--pagefind-ui-scale: .9;--pagefind-ui-primary: var(--highlight);--pagefind-ui-text: var(--lightslate);--pagefind-ui-background: var(--lightnavy);--pagefind-ui-border: var(--lightestnavy);--pagefind-ui-tag: var(--lightnavy);--pagefind-ui-border-width: 1px;--pagefind-ui-border-radius: 4px;--pagefind-ui-font: var(--font-sans)}.search-modal .pagefind-ui .pagefind-ui__search-input{color:var(--lightestslate);background-color:var(--lightnavy);font-family:var(--font-sans)}.search-modal .pagefind-ui .pagefind-ui__search-input::placeholder{color:var(--darkslate)}.search-modal .pagefind-ui .pagefind-ui__form:before{background-color:var(--slate)}.search-modal .pagefind-ui .pagefind-ui__search-clear{color:var(--slate);font-family:var(--font-mono);font-size:var(--fz-xs)}.search-modal .pagefind-ui .pagefind-ui__result{padding:12px 0;border-top:1px solid var(--lightestnavy)}.search-modal .pagefind-ui .pagefind-ui__result-link{color:var(--lightestslate);font-family:var(--font-sans);font-size:var(--fz-lg);font-weight:600}.search-modal .pagefind-ui .pagefind-ui__result-link:hover{color:var(--highlight)}.search-modal .pagefind-ui .pagefind-ui__result-excerpt{color:var(--slate);font-family:var(--font-sans);font-size:var(--fz-sm);line-height:1.6}.search-modal .pagefind-ui .pagefind-ui__result-title{font-weight:600}.search-modal .pagefind-ui .pagefind-ui__result-nested{padding-left:20px}.search-modal .pagefind-ui .pagefind-ui__result-nested .pagefind-ui__result-link{font-size:var(--fz-md);font-weight:500}.search-modal .pagefind-ui .pagefind-ui__message{color:var(--slate);font-family:var(--font-mono);font-size:var(--fz-sm)}.search-modal .pagefind-ui mark{background-color:var(--highlight-tint);color:var(--lightestslate);padding:1px 3px;border-radius:2px}.search-modal .pagefind-ui .pagefind-ui__button{background-color:transparent;color:var(--highlight);border:1px solid var(--highlight);border-radius:var(--border-radius);font-family:var(--font-mono);font-size:var(--fz-xs);padding:10px 20px;cursor:pointer;transition:var(--transition)}.search-modal .pagefind-ui .pagefind-ui__button:hover{background-color:var(--highlight-tint)}@media(max-width:768px){.search-modal{width:100vw;max-width:100vw;max-height:100vh;border-radius:0;margin:0}.search-modal-content{max-height:100vh}}.sidebar-search-button{background:none;border:none;color:var(--lightestslate);font-family:var(--font-mono);font-size:clamp(var(--fz-sm),4vw,var(--fz-lg));cursor:pointer;padding:3px 20px 20px;width:100%;text-align:center;transition:var(--transition)}.sidebar-search-button:hover{color:var(--highlight)}@keyframes astroFadeInOut{0%{opacity:1}to{opacity:0}}@keyframes astroFadeIn{0%{opacity:0;mix-blend-mode:plus-lighter}to{opacity:1;mix-blend-mode:plus-lighter}}@keyframes astroFadeOut{0%{opacity:1;mix-blend-mode:plus-lighter}to{opacity:0;mix-blend-mode:plus-lighter}}@keyframes astroSlideFromRight{0%{transform:translate(100%)}}@keyframes astroSlideFromLeft{0%{transform:translate(-100%)}}@keyframes astroSlideToRight{to{transform:translate(100%)}}@keyframes astroSlideToLeft{to{transform:translate(-100%)}}@media(prefers-reduced-motion){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}[data-astro-transition-scope]{animation:none!important}}
