@keyframes grow-progress{0%{transform:scaleX(0)}to{transform:scaleX(1)}}.blog-post{color:#27272a;font-family:var(--font-sans),ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,sans-serif;font-size:1.025rem;line-height:1.8;letter-spacing:-.011em;word-spacing:.02em;counter-reset:section}.blog-post p:empty{display:none!important;margin:0!important;padding:0!important}.blog-post>:first-child{margin-top:0!important;padding-top:0!important;border-top:none!important}.blog-post>*+*{margin-top:1.5rem}.blog-post figcaption,.blog-post h1,.blog-post h2,.blog-post h3,.blog-post h4,.blog-post th{font-family:var(--font-sans),ui-sans-serif,system-ui,sans-serif}.blog-post h1,.blog-post h2,.blog-post h3,.blog-post h4{color:#09090b;font-weight:650;letter-spacing:-.02em;line-height:1.3}.blog-post h1{padding-top:2rem;border-top:1px solid #e4e4e7;font-size:1.55rem}.blog-post h1,.blog-post h2{margin-top:3.5rem;margin-bottom:1rem}.blog-post h2{display:flex;align-items:baseline;gap:.75rem;padding-top:2.25rem;border-top:1px solid #f4f4f5;font-size:1.35rem;counter-increment:section}.blog-post h2:before{content:counter(section,decimal-leading-zero);flex:0 0 auto;color:#a1a1aa;font-family:var(--font-mono),ui-monospace,monospace;font-size:.75rem;font-weight:600;letter-spacing:.05em}.blog-post h3{margin-top:2.5rem;margin-bottom:.75rem;font-size:1.15rem}.blog-post h4{margin-top:2rem;margin-bottom:.5rem;color:#3f3f46;font-size:1rem;text-transform:uppercase;letter-spacing:.05em}.blog-post p{margin-bottom:0;color:#27272a}.blog-post a:not(.heading-anchor){color:#09090b;font-weight:500;text-decoration:none;background-image:linear-gradient(90deg,#71717a,#71717a);background-position:0 100%;background-repeat:no-repeat;background-size:0 1px;transition:background-size .3s ease;padding-bottom:1px;border-bottom:1px solid #e4e4e7}.blog-post a:not(.heading-anchor):hover{background-size:100% 1px;color:#000;border-bottom-color:transparent}.blog-post strong{color:#09090b;font-weight:600}.blog-post em{color:#3f3f46}.blog-post ol,.blog-post ul{margin-top:1rem;margin-bottom:1rem;padding-left:1.5rem}.blog-post ul{list-style:disc}.blog-post ol{list-style:decimal}.blog-post li{padding-left:.25rem}.blog-post li+li{margin-top:.5rem}.blog-post li::marker{color:#a1a1aa;font-family:var(--font-mono),ui-monospace,monospace;font-size:.8em}.blog-post blockquote{margin:1.5rem 0;border-left:3px solid #09090b;border-radius:0 6px 6px 0;background:#f8f8fa;padding:1.25rem 1.5rem;color:#3f3f46;font-size:.975rem;line-height:1.75}.blog-post blockquote p{color:inherit;margin:0}.blog-post blockquote p+p{margin-top:.75rem}.blog-post code:not(pre code){border:1px solid #e4e4e7;border-radius:.25rem;background:#f4f4f5;color:#09090b;font-family:var(--font-mono),ui-monospace,monospace;font-size:.85em;padding:.125rem .35rem}.blog-post pre{margin:0!important;border:1px solid #27272a;border-radius:.375rem;background:#111113;color:#f4f4f5;overflow-x:auto;padding:1.1rem 0}.blog-post pre code{display:grid;min-width:max-content;background:transparent;color:inherit;font-family:var(--font-mono),ui-monospace,monospace;font-size:.82rem;line-height:1.75}.blog-post hr{margin:2.25rem 0;border:0;border-top:1px solid #e4e4e7}.blog-post img,.blog-post object{width:100%;height:auto;margin:1.5rem 0;border:1px solid #e4e4e7;border-radius:.375rem}.blog-post table{display:block;width:100%;margin:1.5rem 0;overflow-x:auto;border-collapse:collapse;font-family:var(--font-sans),ui-sans-serif,system-ui,sans-serif;font-size:.9rem;line-height:1.6}.blog-post td,.blog-post th{border-bottom:1px solid #e4e4e7;padding:.75rem .85rem;text-align:left;vertical-align:top}.blog-post th{color:#09090b;font-size:.75rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase}.heading-anchor{opacity:0;margin-left:.5rem;color:#a1a1aa;transition:opacity .2s ease,color .2s ease;font-weight:400;display:inline-block;cursor:pointer}.blog-post h2:hover .heading-anchor,.blog-post h3:hover .heading-anchor{opacity:1}.heading-anchor:hover{color:#09090b!important}@media (max-width:640px){.blog-post{font-size:.975rem;line-height:1.75}.blog-post h1{font-size:1.4rem}.blog-post h2{gap:.65rem;font-size:1.25rem}}.blog-post pre ::selection,.blog-post pre code ::selection{background-color:rgba(255,255,255,.2)!important;color:inherit!important}.blog-post pre ::-moz-selection,.blog-post pre code ::-moz-selection{background-color:rgba(255,255,255,.2)!important;color:inherit!important}