.blog-article{--article-prose-width:720px;--article-toc-width:200px;--article-grid-gap:64px;--article-grid-width:984px;--article-breakout-width:820px;--article-body:var(--lp-body);--article-secondary:var(--lp-subtle);--article-space-paragraph:20px;--article-space-h2:64px;--article-space-h3:40px;--article-space-object:24px;background:var(--lp-bg);color:var(--article-body);padding:72px 24px 104px;position:relative}.blog-article ::selection{background:rgba(var(--lp-accent-rgb), .28);color:var(--lp-text)}.article-header{width:min(100%, var(--article-grid-width));margin:0 auto 56px}.article-header-rail{width:min(100%, var(--article-prose-width))}.article-meta,.article-byline,.article-tags{font-family:var(--font-jet-brains-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--article-secondary);flex-wrap:wrap;align-items:center;gap:10px 16px;font-size:12px;line-height:1.5;display:flex}.article-meta{margin-bottom:24px}.article-meta>span:not(:last-child):after{content:"";vertical-align:middle;background:var(--lp-border);width:3px;height:3px;margin-left:16px;display:inline-block}.article-category{color:var(--lp-accent)}.article-title{max-width:900px;font-family:var(--font-jet-brains-mono);letter-spacing:-.045em;color:var(--lp-text);text-wrap:balance;margin:0;font-size:clamp(38px,4.25vw,52px);font-weight:700;line-height:1.08}.article-dek{max-width:760px;font-family:var(--font-manrope);color:var(--article-body);text-wrap:pretty;margin:24px 0 0;font-size:20px;line-height:1.55}.article-byline{text-transform:none;letter-spacing:0;margin-top:28px}.article-tags{letter-spacing:.04em;text-transform:none;gap:8px;margin-top:18px}.article-tags span{border:1px solid var(--lp-border);background:var(--lp-surface);border-radius:4px;padding:3px 8px}.article-layout{grid-template-columns:minmax(0, var(--article-prose-width)) var(--article-toc-width);gap:var(--article-grid-gap);width:min(100%, var(--article-grid-width));align-items:start;margin:0 auto;display:grid;position:relative}.article-prose{min-width:0;font-family:var(--font-manrope);color:var(--article-body);grid-area:1/1;font-size:18.5px;line-height:1.72}.article-prose>:first-child{margin-top:0}.article-prose p{margin:0 0 var(--article-space-paragraph)}.article-introduction{width:min(100%, var(--article-grid-width));margin:0 auto var(--article-space-h2);padding-right:calc(var(--article-toc-width) + var(--article-grid-gap))}.article-prose h2,.article-prose h3{color:var(--lp-text);font-family:var(--font-jet-brains-mono);text-wrap:balance;scroll-margin-top:96px;font-weight:700;position:relative}.article-prose h2{margin:var(--article-space-h2) 0 20px;letter-spacing:-.035em;font-size:29px;line-height:1.25}.article-prose h3{margin:var(--article-space-h3) 0 16px;letter-spacing:-.025em;font-size:21px;line-height:1.35}.article-heading-anchor{color:inherit;text-decoration:none}.article-heading-anchor:after{content:"#";color:var(--lp-accent);opacity:0;margin-left:10px;font-size:.65em;transition:opacity .15s}.article-heading-anchor:hover:after,.article-heading-anchor:focus-visible:after{opacity:1}.article-prose ul,.article-prose ol{margin:0 0 24px;padding-left:26px;list-style-position:outside}.article-prose ul{list-style-type:square}.article-prose ol{list-style-type:decimal}.article-prose li{padding-left:5px}.article-prose li+li{margin-top:8px}.article-prose ul>li::marker{color:var(--lp-accent);font-size:.72em}.article-prose ol>li::marker{color:var(--lp-accent);font-family:var(--font-jet-brains-mono);font-size:.84em}.article-prose a:not(.article-heading-anchor){color:var(--lp-accent);text-underline-offset:4px;text-decoration-line:underline;text-decoration-thickness:1px;-webkit-text-decoration-color:color-mix(in srgb, var(--lp-accent) 55%, transparent);text-decoration-color:color-mix(in srgb, var(--lp-accent) 55%, transparent)}.article-prose a:not(.article-heading-anchor):hover{-webkit-text-decoration-color:var(--lp-accent);text-decoration-color:var(--lp-accent)}.article-prose :not(pre)>code{border:1px solid var(--lp-border);background:var(--lp-surface);color:var(--lp-text);font-family:var(--font-jet-brains-mono);overflow-wrap:anywhere;border-radius:4px;padding:.12em .36em;font-size:.88em}.article-prose strong{color:var(--lp-text);font-weight:700}.article-prose hr{border:0;border-top:1px solid var(--lp-border);margin:72px 0}.article-callout{border-left:2px solid var(--lp-accent);color:var(--lp-text);margin:32px 0;padding:4px 0 4px 22px}.article-callout:before{content:none}.article-callout>:last-child{margin-bottom:0}.article-standard-object,.article-breakout{margin-top:var(--article-space-object);margin-bottom:var(--article-space-object)}.article-standard-object{width:100%}.article-breakout{width:min(var(--article-breakout-width), calc(100vw - 48px));margin-left:calc((var(--article-prose-width) - var(--article-breakout-width)) / 2)}.article-code,.article-table{border:1px solid var(--lp-border);background:var(--lp-surface);border-radius:7px;overflow:hidden}.article-code-toolbar{border-bottom:1px solid var(--lp-border);min-height:36px;font-family:var(--font-jet-brains-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--article-secondary);justify-content:space-between;align-items:center;padding:0 14px 0 18px;font-size:10px;display:flex}.article-code-toolbar button{min-height:32px;color:var(--article-secondary);opacity:.66;align-items:center;gap:7px;padding:0 4px;transition:color .15s;display:inline-flex}.article-code-toolbar button:hover{color:var(--lp-accent);opacity:1}.article-code-toolbar svg{width:14px;height:14px}.article-code-content,.article-code-content>pre,.article-code-content .article-code-scroll{background:#f5f2eb!important;border-radius:0!important;margin:0!important}.article-code-content .article-code-pre{color:#3a3530!important}.dark .article-code-content,.dark .article-code-content>pre,.dark .article-code-content .article-code-scroll{background:#111413!important}.dark .article-code-content .article-code-pre{color:#c3cee3!important}.article-code-content .article-code-scroll{filter:saturate(.62);overflow-x:auto}.article-code-content .article-code-pre{min-width:max-content;font-size:14.5px;line-height:1.65;padding:20px 22px!important}.article-table{overscroll-behavior-inline:contain;overflow-x:auto}.article-table table{border-collapse:collapse;width:100%;min-width:560px;font-family:var(--font-manrope);font-size:15px;line-height:1.5}.article-table th{border-bottom:1px solid var(--lp-border);background:color-mix(in srgb, var(--lp-surface) 70%, var(--lp-bg));color:var(--lp-text);font-family:var(--font-jet-brains-mono);letter-spacing:.07em;text-align:left;text-transform:uppercase;white-space:nowrap;padding:14px 18px;font-size:12px;font-weight:700}.article-table td{border-bottom:1px solid var(--lp-border);color:var(--article-body);vertical-align:top;padding:15px 18px}.article-table td code{white-space:nowrap;overflow-wrap:normal}.article-table tr:last-child td{border-bottom:0}.article-table tbody tr:hover{background:rgba(var(--lp-accent-rgb), .025)}.article-prose img,.article-prose svg{max-width:100%;height:auto}.article-prose figcaption{color:var(--article-secondary);margin-top:10px;font-size:14px;line-height:1.5}.article-toc{border-left:1px solid var(--lp-border);scrollbar-width:thin;grid-area:1/2;max-height:calc(100vh - 120px);padding-left:20px;position:sticky;top:92px;overflow-y:auto}.article-toc>p,.article-toc-mobile summary{font-family:var(--font-jet-brains-mono);letter-spacing:.1em;text-transform:uppercase;color:var(--article-secondary);margin:0 0 14px;font-size:11px;font-weight:700}.article-toc-list{margin:0;padding:0;list-style:none}.article-toc-list li+li{margin-top:2px}.article-toc-list li[data-level="3"]{padding-left:12px}.article-toc-list a{font-family:var(--font-jet-brains-mono);color:color-mix(in srgb, var(--article-secondary) 82%, var(--lp-bg));padding:5px 0;font-size:11px;line-height:1.45;text-decoration:none;transition:color .15s;display:block}.article-toc-list a:hover,.article-toc-list a[aria-current=location]{color:var(--lp-accent)}.article-toc-list a[aria-current=location]{font-weight:700}.article-toc-mobile{grid-area:1/1;display:none}.article-afterword{width:min(100% - 48px,984px);margin:0 auto;padding:0 264px 88px 0}.article-afterword-inner{border-top:1px solid var(--lp-border);padding-top:8px}.article-afterword .lp-body,.article-afterword [class*=text-lp-muted]{font-family:var(--font-manrope)}.blog-related{border-top:1px solid var(--lp-border);width:min(100% - 48px,1180px);margin:0 auto 120px;padding-top:48px}.blog-related-card{min-height:220px}.blog-related-card h3{font-size:18px}.blog-related-title{font-family:var(--font-jet-brains-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--article-secondary);margin-bottom:28px;font-size:13px}@media (max-width:1199px){.article-layout{width:min(100%,720px);display:block}.article-header{width:min(100%, var(--article-prose-width))}.article-introduction{width:min(100%, var(--article-prose-width));padding-right:0}.article-toc{display:none}.article-toc-mobile{border:1px solid var(--lp-border);background:var(--lp-surface);border-radius:6px;margin:0 0 48px;display:block}.article-toc-mobile summary{cursor:pointer;margin:0;padding:15px 18px;list-style-position:inside}.article-toc-mobile .article-toc-list{-moz-columns:2;columns:2;-moz-column-gap:32px;column-gap:32px;padding:0 18px 16px}.article-toc-mobile li{-moz-column-break-inside:avoid;break-inside:avoid}.article-afterword{width:min(100% - 48px,720px);padding-right:0}}@media (max-width:759px){.blog-article{padding:48px 20px 76px}.article-header{margin-bottom:42px}.article-meta{gap:8px 12px;margin-bottom:20px;font-size:11px}.article-meta>span:not(:last-child):after{margin-left:12px}.article-title{letter-spacing:-.04em;font-size:clamp(34px,10vw,38px);line-height:1.12}.article-dek{margin-top:20px;font-size:18px}.article-byline{margin-top:22px;font-size:11px}.article-prose{font-size:17.5px;line-height:1.65}.article-prose p{margin-bottom:20px}.article-prose h2{font-size:26px}.article-prose h3{font-size:20px}.article-breakout{width:calc(100vw - 32px);margin-left:-4px}.article-code-content .article-code-pre{font-size:14px;padding:18px!important}.article-toc-mobile{margin-bottom:40px}.article-toc-mobile .article-toc-list{-moz-columns:1;columns:1}.article-afterword{width:calc(100% - 40px);padding-bottom:56px}.blog-related{width:calc(100% - 40px);margin-bottom:72px}}@media (prefers-reduced-motion:reduce){.article-heading-anchor:after,.article-toc-list a{transition:none}}
