@font-face{font-family:Inter;src:url(/fonts/inter-variable.woff2)format("woff2");font-weight:400 600;font-style:normal;font-display:swap}:root{--bg:#fcfcfc;--ink:#171717;--muted:#737373;--line:#e8e8e8;--box:#cfcfcf;--hover:#f1f1f1;--highlight:#fec132;--column:712px}:root[data-theme=dark]{--bg:#161616;--ink:#ededed;--muted:#8f8f8f;--line:#2b2b2b;--box:#444;--hover:#222}*{box-sizing:border-box}html{background:var(--bg)}body{color:var(--ink);background:var(--bg);-webkit-font-smoothing:antialiased;margin:0;font-family:Inter,system-ui,-apple-system,Segoe UI,sans-serif;font-size:15px;line-height:1.6}a{color:inherit}main{max-width:var(--column);margin:0 auto;padding:0 24px 120px}h1,h2,p{margin:0}.muted{color:var(--muted)}.nav{justify-content:center;align-items:flex-start;gap:6px;margin-bottom:112px;padding:48px 24px 0;display:flex}.nav-item{width:50px;color:var(--muted);flex-direction:column;align-items:center;gap:6px;text-decoration:none;display:flex}.nav-box{border:1px solid var(--box);border-radius:10px;place-items:center;width:46px;height:40px;display:grid;position:relative}.nav-label{white-space:nowrap;font-size:11px;line-height:1}.nav-icon{display:block;position:relative}.nav-box img,.nav-box .logo{image-rendering:pixelated;display:block;position:relative}.nav-item:hover,.nav-item:focus-visible,.nav-item.is-current{color:var(--ink);outline:none}.nav-item:hover .nav-box,.nav-item:focus-visible .nav-box{border-color:var(--ink)}.nav-item.is-current .nav-box{border-color:var(--highlight)}.nav-highlight{background:var(--highlight);border-radius:10px;position:absolute;inset:-1px}::view-transition-group(nav-highlight){animation-duration:.35s;animation-timing-function:cubic-bezier(.3,.7,.2,1)}::view-transition-old(nav-highlight){display:none}::view-transition-new(nav-highlight){width:100%;height:100%;animation:none}.logo-screen-text{animation:.5s steps(4,end) .25s backwards logo-power-on}.navigated .logo-screen-text{animation:none}@keyframes logo-power-on{0%{opacity:0}50%{opacity:1}75%{opacity:.3}}.theme-toggle{font:inherit;cursor:pointer;background:0 0;border:0;padding:0}.theme-toggle .nav-box{color:var(--ink)}.theme-icon{width:16px;height:16px;display:block}.icon-sun,.label-light,:root[data-theme=dark] .icon-moon,:root[data-theme=dark] .label-dark{display:none}:root[data-theme=dark] .icon-sun{display:block}:root[data-theme=dark] .label-light{display:inline}.intro{gap:4px;max-width:520px;display:grid}.avatar{width:48px;height:48px;margin-bottom:20px;display:block;position:relative}.avatar img{image-rendering:pixelated;display:block}.avatar-blink{opacity:0;position:absolute;inset:0}.anim .avatar-blink{animation:9s step-end 2s infinite blink}@keyframes blink{0%,48.5%,50.5%,95%,96%,97.5%,to{opacity:0}47.5%,94%,96.5%{opacity:1}}.intro h1,.page-title{letter-spacing:-.01em;font-size:22px;font-weight:600;line-height:1.3}.intro h1{margin-bottom:4px}.page-title{margin-bottom:40px}section+section{margin-top:80px}h2{color:var(--ink);align-items:center;gap:8px;margin-bottom:8px;font-size:15px;font-weight:600;display:flex}h2 img{image-rendering:pixelated;flex:none;display:block}.rows{margin:0;padding:0;list-style:none}.row{border-radius:10px;align-items:center;gap:12px;min-height:52px;margin:0 -12px;padding:0 12px;font-size:14px;text-decoration:none;transition:background-color .15s;display:flex}a.row:hover,a.row:focus-visible{background:var(--hover)}.row-icon{flex:none;place-items:center;width:20px;height:20px;display:grid}.row-icon img{width:20px;height:20px;image-rendering:pixelated;display:block}.row-label{font-weight:500}.row-sub{color:var(--muted);font-weight:400;line-height:1.4;display:block}.row:has(.row-sub){padding-block:10px}.row-line{border-top:1px solid var(--line);flex:24px;min-width:24px}.row-meta{color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap;flex:none}.row-arrow{transition:transform .2s,color .2s;display:inline-block}a.row:hover .row-arrow,a.row:focus-visible .row-arrow{color:var(--ink);transform:translate(2px,-2px)}a.row:focus-visible{outline:none}.rows.cards{gap:12px;display:grid}@media (width>=700px){.two-across .rows.cards{grid-template-columns:repeat(2,1fr)}.two-across .rows.cards li,.two-across .rows.cards .row{box-sizing:border-box;height:100%}}.cards .row{border:1px solid var(--line);border-radius:14px;gap:16px;margin:0;padding:12px 14px 12px 12px;font-size:15px;transition:background-color .15s,border-color .15s}.cards a.row:hover,.cards a.row:focus-visible{border-color:var(--box)}.cards .row-icon{background:var(--hover);border-radius:10px;width:44px;height:44px}.cards .row-icon img{width:30px;height:30px}.cards .row-label{flex:1;font-weight:600}.cards .row-sub{margin-top:2px;font-size:14px}.cards .row-line{display:none}.cards .row-arrow{background:var(--hover);border-radius:50%;place-items:center;width:36px;height:36px;font-size:16px;display:grid}.cards a.row:hover .row-arrow,.cards a.row:focus-visible .row-arrow{background:var(--highlight);color:#171717}.anim .row{animation:.5s ease-out backwards row-in;animation-delay:calc(var(--i,0) * 70ms)}.anim .row-line{transform-origin:0;animation:1.1s cubic-bezier(.25,.8,.25,1) backwards line-draw;animation-delay:calc(var(--i,0) * 70ms)}@keyframes row-in{0%{opacity:0;transform:translateY(4px)}}@keyframes line-draw{0%{border-top-color:var(--muted);transform:scaleX(0)}60%{border-top-color:var(--muted)}}.more{color:var(--muted);margin-top:16px;font-size:14px;text-decoration:none;display:inline-block}.more:after{content:" →"}.more:hover{color:var(--ink)}.prose{gap:16px;max-width:560px;display:grid}.tech-icons{grid-template-columns:repeat(9,1fr);gap:20px 8px;margin:16px 0 0;padding:0;list-style:none;display:grid}@media (width<=560px){.tech-icons{grid-template-columns:repeat(6,1fr);gap:20px 4px}.tech-icons li{letter-spacing:-.2px;font-size:10.5px}}.tech-icons li{color:var(--muted);text-align:center;flex-direction:column;align-items:center;gap:8px;font-size:12px;line-height:1;display:flex}.tech-icons img{box-sizing:content-box;background:var(--hover);border-radius:10px;width:32px;height:32px;padding:6px;display:block}:root[data-theme=dark] img[src$="/express.svg"],:root[data-theme=dark] img[src$="/20/github.svg"]{filter:invert()}.language-tiles{grid-template-columns:repeat(3,1fr);gap:8px;margin:16px 0 0;padding:0;list-style:none;display:grid}.language-tiles li{border:1px solid var(--line);background:var(--hover);border-radius:10px;flex-direction:column;gap:6px;padding:14px 16px;display:flex}.language-tiles strong{font-size:15px;font-weight:600;line-height:1.2}.language-tiles span{color:color-mix(in srgb, var(--muted), var(--ink) 30%);font-size:13px;line-height:1.2}.tool-tags{flex-wrap:wrap;gap:8px;margin:16px 0 0;padding:0;list-style:none;display:flex}.tool-tags li{border:1px solid var(--line);background:var(--hover);border-radius:10px;padding:10px 16px;font-size:15px;font-weight:500;line-height:1.2}.footer{max-width:calc(var(--column) - 48px);border-top:1px solid var(--line);color:var(--muted);flex-wrap:wrap;justify-content:space-between;gap:8px 24px;margin:0 auto 48px;padding-top:20px;font-size:13px;display:flex}@media (width<=760px){.footer{margin:0 24px 48px}}.footer-coffee{align-items:center;gap:6px;display:inline-flex}.coffee-icon{flex:none;transition:transform .15s}.footer-coffee:hover .coffee-icon{transform:translateY(-2px)}.footer a{text-decoration:none;transition:color .15s}.footer a:hover{color:var(--ink)}.not-found .page-title{margin-bottom:8px}.not-found-bubble{image-rendering:pixelated;position:absolute;top:-14px;left:44px}.anim .not-found-bubble{transform-origin:0 100%;animation:.3s steps(3,end) .4s backwards bubble-pop,3s step-end 1s infinite bubble-bob}@keyframes bubble-pop{0%{transform:scale(0)}}@keyframes bubble-bob{0%,10%{transform:translateY(-2px)}5%,15%,to{transform:none}}.not-found code{color:var(--ink);overflow-wrap:anywhere;font-family:inherit;font-weight:500}@media (width<=560px){.nav{gap:4px;margin-bottom:72px;padding-top:32px}.nav-item{width:46px}.nav-box{width:40px;height:36px}section+section{margin-top:64px}.row{padding-block:10px}}@media (prefers-reduced-motion:reduce){.logo-screen-text{animation:none}}.astro-route-announcer{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;top:0;left:0;overflow:hidden}@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(*),[data-astro-transition-scope]{animation:none!important}}
