:root{--art-head: var(--ink);--art-ink: #26344b;--art-ink-2: #5a6980;--art-menu: #3d4c63;--art-icon: #7b8aa1;--art-faint: #b4bfcf;--art-link: color-mix(in oklab,var(--brand),black 18%);--art-accent: var(--brand);--art-page: #ffffff;--art-band: #f3f6fa;--art-line: #e3e8ef;--art-line-strong: #cdd6e2;--art-soft: #f4f7fb;--art-tint: color-mix(in oklab,var(--brand),white 93%);--art-mark: color-mix(in srgb,var(--beacon) 38%,white);--art-code-bg: var(--deep);--art-code-ink: #e4ebf5;--art-code-line: transparent;--art-code-inline: #eef2f8;--art-font: var(--font);--art-mono: "JetBrains Mono",ui-monospace,"SFMono-Regular","DejaVu Sans Mono",Menlo,Consolas,"Liberation Mono",monospace;--art-size: 17px;--art-leading: 1.75;--art-gap: 1.15em;--art-h1: clamp(32px,2.2vw + 20px,50px);--art-h2: 28px;--art-h3: 21px;--art-measure: 720px;--art-nav-w: 240px;--art-toc-w: 200px;--art-radius: 12px}@media (width < 700px){:root{--art-size: 16.5px;--art-h2: 24px;--art-h3: 19px}}.page{padding-bottom: 96px;overflow-x: clip;background: var(--art-page)}.art-layout{display: grid;grid-template-columns: [nav] var(--art-nav-w) [main] minmax(0,1fr) [toc] var(--art-toc-w);grid-template-rows: repeat(4,auto);column-gap: 48px}.art{display: grid;grid-column: 1 / -1;grid-row: 1 / -1;grid-template-columns: subgrid;grid-template-rows: subgrid}.art > *{grid-column: main;max-width: var(--art-measure)}.art-head{grid-column: 1 / -1;grid-row: 1}.art-text{display: grid;grid-column: main / -1;grid-row: 2;grid-template-columns: subgrid;align-items: start;max-width: none}.prose{grid-column: main;max-width: var(--art-measure)}.art-cta{grid-row: 3}.art-related{grid-row: 4}.art-layout:not(:has(.art-toc)){grid-template-columns: [nav] var(--art-nav-w) [main] minmax(0,var(--art-measure))}.art-layout:not(:has(> .art-nav)){grid-template-columns: [main] minmax(0,var(--art-measure)) [toc] var(--art-toc-w);justify-content: center}.art-layout:not(:has(> .art-nav)):not(:has(.art-toc)){grid-template-columns: [main] minmax(0,var(--art-measure))}.art-nav{position: sticky;top: calc(var(--bar-h) + 32px);grid-column: nav;grid-row: 2 / -1;align-self: start;max-height: calc(100vh - var(--bar-h) - 64px);overflow-y: auto}.art-nav-title{margin: 0 0 12px;color: var(--art-ink-2);font-size: 13px;font-weight: 700}.art-nav-list{margin: 0;padding: 0;list-style: none}.art-nav-list a{display: flex;align-items: center;gap: 10px;color: var(--art-menu);font-size: 15px;line-height: 1.4;text-decoration: none;transition: color .15s}.art-nav-list .ico{width: 19px;height: 19px;color: var(--art-icon);transition: color .15s}.art-nav-list a:hover,.art-nav-list a:hover .ico{color: var(--art-link)}.art-nav-list > li:first-child a{padding-bottom: 8px;color: var(--art-link);font-weight: 600}.art-nav-list > li:first-child .ico{color: var(--art-accent)}.art-nav-list > li + li{position: relative;margin-left: 9px;border-left: 1px solid var(--art-line)}.art-nav-list > li + li a{padding: 7px 0 7px 15px}.art-nav-list a[aria-current]{color: var(--art-head);font-weight: 700}.art-nav-list a[aria-current] .ico{color: var(--art-accent)}.art-nav-list > li:has(> a[aria-current])::before{content: "";position: absolute;top: 6px;bottom: 6px;left: -1px;width: 2px;border-radius: 2px;background: var(--art-accent)}.art-head{position: relative;isolation: isolate;max-width: none;margin-bottom: 52px;padding-block: 52px 44px}.art-head::before{content: "";position: absolute;z-index: -1;inset: 0 -100vw;border-bottom: 1px solid var(--art-line);background: var(--art-band)}.crumbs ol{display: flex;flex-wrap: wrap;margin: 0 0 22px;padding: 0;color: var(--art-ink-2);font-size: 14px;list-style: none}.crumbs li + li::before{content: "/";margin-inline: 10px;color: var(--art-faint)}.crumbs a{color: inherit;text-decoration: none}.crumbs a:hover{color: var(--art-link)}.art-head h1{max-width: 16em;margin: 0;color: var(--art-head);font-size: var(--art-h1);font-weight: 800;line-height: 1.08;letter-spacing: -.03em;text-wrap: balance}.art-lede{max-width: var(--art-measure);margin: 20px 0 0;color: var(--art-ink-2);font-size: 20px;line-height: 1.6;text-wrap: pretty}.art-meta{display: flex;flex-wrap: wrap;align-items: center;gap: 12px 16px;margin-top: 30px;font-size: 14px}.art-avatar{display: grid;flex: none;place-items: center;width: 44px;height: 44px;border: 2px solid #fff;border-radius: 50%;background: var(--deep);color: #fff;font-size: 15px;font-weight: 700;box-shadow: 0 0 0 1px var(--art-line);object-fit: cover}.art-author{display: grid;margin: 0;line-height: 1.45}.art-by{color: var(--art-head);font-weight: 600}.art-by a{color: inherit}.art-role,.art-read{color: var(--art-ink-2)}.art-read{display: flex;align-items: center;gap: 6px;margin: 0;padding-left: 16px;border-left: 1px solid var(--art-line-strong)}.art-read .ico{width: 16px;height: 16px}.art-toc{position: sticky;top: calc(var(--bar-h) + 32px);grid-column: toc;grid-row: 1;max-height: calc(100vh - var(--bar-h) - 64px);overflow-y: auto;font-size: 14px}.art-toc-title{margin: 0 0 12px;color: var(--art-ink-2);font-size: 13px;font-weight: 700}.art-toc ul{margin: 0;padding: 0;border-left: 1px solid var(--art-line);list-style: none;scroll-target-group: auto}.art-toc li{position: relative;break-inside: avoid}.art-toc li a{display: block;padding: 5px 0 5px 14px;color: var(--art-ink-2);line-height: 1.45;text-decoration: none;transition: color .15s}.art-toc li a:hover{color: var(--art-link)}.art-toc a:target-current{color: var(--art-head)}.art-toc li:has(> a:target-current)::before{content: "";position: absolute;top: 5px;bottom: 5px;left: -1px;width: 2px;border-radius: 2px;background: var(--art-accent)}.art-toc-cta{margin-top: 28px;padding: 18px;border-radius: 14px;background: var(--deep);color: var(--on-deep-2)}.art-toc-cta p{margin: 0 0 14px;font-size: 14px;line-height: 1.5}.prose{color: var(--art-ink);font-family: var(--art-font);font-size: var(--art-size);line-height: var(--art-leading);overflow-wrap: break-word}.prose > :first-child{margin-top: 0}.prose > :last-child{margin-bottom: 0}.prose :where(p,ul,ol,dl,table,pre){margin: 0 0 var(--art-gap)}.prose :where(h2,h3,h4){color: var(--art-head);font-family: var(--font);font-weight: 700;letter-spacing: -.015em;text-wrap: balance;scroll-margin-top: 16px}.prose h2{margin: 2.3em 0 .65em;font-size: var(--art-h2);line-height: 1.25}.prose h3{margin: 1.9em 0 .55em;font-size: var(--art-h3);line-height: 1.3}.prose h4{margin: 1.7em 0 .5em;font-size: 1.05em;line-height: 1.4}.prose a{color: var(--art-link);text-decoration: underline;text-decoration-color: color-mix(in srgb,currentColor 35%,transparent);text-decoration-thickness: 1px;text-underline-offset: 3px;transition: text-decoration-color .15s}.prose a:hover{text-decoration-color: currentColor}.prose strong{color: var(--art-head);font-weight: 700}.prose :where(ul){padding-left: 1.5em}.prose li{margin: .45em 0;padding-left: .2em}.prose li > :where(ul,ol){margin: .45em 0 0}.prose li::marker{color: var(--art-accent)}.prose ol{padding-left: 0;list-style: none}.prose ol > li{position: relative;margin: .7em 0;padding-left: 44px}.prose ol > li::before{content: counter(list-item);position: absolute;top: .1em;left: 0;display: grid;place-items: center;width: 28px;height: 28px;border-radius: 50%;background: var(--art-tint);color: var(--art-link);font-family: var(--font);font-size: 14px;font-weight: 700;line-height: 1}.prose :where(img,video){max-width: 100%;height: auto}.prose figure{margin: 2em 0}.prose figure img{display: block;width: 100%;border: 1px solid var(--art-line);border-radius: var(--art-radius);background: var(--art-soft)}.prose figcaption{margin-top: .8em;color: var(--art-ink-2);font-family: var(--font);font-size: 14px;line-height: 1.5}.art .prose figure img{cursor: zoom-in}.art .prose figure img:focus-visible{outline: 3px solid var(--art-link);outline-offset: 3px}.art-lightbox[open]{box-sizing: border-box;position: fixed;inset: 0;display: flex;align-items: center;justify-content: center;width: auto;height: 100vh;height: 100dvh;max-width: none;max-height: none;margin: 0;padding: 48px 18px 18px;border: 0;background: rgba(0,0,0,.85)}.art-lightbox img{display: block;max-width: 100%;max-height: 100%;width: auto;height: auto;object-fit: contain}.art-lightbox-close{position: absolute;top: 10px;right: 16px;padding: 4px 10px;border: 0;background: transparent;color: #fff;font-size: 32px;line-height: 1;cursor: pointer}.prose :where(video,iframe){display: block;width: 100%;height: auto;aspect-ratio: 16 / 9;margin: 2em 0;border: 0;border-radius: var(--art-radius)}.prose blockquote{margin: 2em 0;padding: .1em 0 .1em 1.3em;border-left: 3px solid var(--art-accent);color: var(--art-head);font-size: 1.12em;line-height: 1.6}.prose blockquote p{margin: 0 0 .5em}.prose blockquote > :last-child{margin-bottom: 0}.prose cite{color: var(--art-ink-2);font-family: var(--font);font-size: 14px;font-style: normal}.prose code{padding: .15em .4em;border-radius: 6px;background: var(--art-code-inline);color: var(--art-head);font-family: var(--art-mono);font-size: .86em;-webkit-box-decoration-break: clone;box-decoration-break: clone}.prose pre{margin: 1.8em 0;padding: 20px 22px;overflow-x: auto;border: 1px solid var(--art-code-line);border-radius: var(--art-radius);background: var(--art-code-bg);color: var(--art-code-ink);font-size: 14px;line-height: 1.65;tab-size: 4}.prose pre code{padding: 0;border-radius: 0;background: none;color: inherit;font-size: inherit}.prose table{width: 100%;margin: 2em 0 1em;border-collapse: collapse;font-family: var(--font);font-size: 15px;line-height: 1.5;font-variant-numeric: tabular-nums}.prose caption{padding-top: 12px;caption-side: bottom;color: var(--art-ink-2);font-size: 14px;text-align: left}.prose :where(th,td){padding: 12px 16px;border-bottom: 1px solid var(--art-line);text-align: left;vertical-align: top}.prose th{background: var(--art-soft);color: var(--art-head);font-weight: 700}.prose thead th{border-bottom-color: var(--art-line-strong)}.prose hr{margin: 3em 0;border: 0;border-top: 1px solid var(--art-line)}.prose dl{display: grid;grid-template-columns: minmax(0,11em) 1fr;border-top: 1px solid var(--art-line)}.prose dt{grid-column: 1;padding: 12px 20px 12px 0;border-bottom: 1px solid var(--art-line);color: var(--art-head);font-family: var(--font);font-weight: 700}.prose dd{grid-column: 2;margin: 0;padding: 12px 0;border-bottom: 1px solid var(--art-line)}.prose aside{margin: 2em 0;padding: 18px 22px;border-left: 3px solid var(--art-accent);border-radius: 0 var(--art-radius) var(--art-radius) 0;background: var(--art-tint)}.prose aside > :last-child{margin-bottom: 0}.prose details{margin: 0 0 12px;border: 1px solid var(--art-line);border-radius: var(--art-radius);background: #fff}.prose summary{position: relative;padding: 16px 52px 16px 20px;color: var(--art-head);font-family: var(--font);font-size: 16px;font-weight: 600;line-height: 1.45;list-style: none;cursor: pointer}.prose summary::-webkit-details-marker{display: none}.prose summary::after{content: "";position: absolute;top: 50%;right: 22px;width: 8px;height: 8px;border-right: 2px solid var(--art-ink-2);border-bottom: 2px solid var(--art-ink-2);translate: 0 -70%;rotate: 45deg;transition: rotate .2s,translate .2s}.prose details[open] summary::after{translate: 0 -25%;rotate: 225deg}.prose details > :not(summary){margin-inline: 20px}.prose details > :last-child{margin-bottom: 18px}.prose kbd{padding: .1em .45em;border: 1px solid var(--art-line-strong);border-bottom-width: 2px;border-radius: 6px;background: #fff;color: var(--art-head);font-family: var(--art-mono);font-size: .8em}.prose :where(del,s){color: var(--art-ink-2);text-decoration-thickness: 1.5px}.prose ins{padding: 0 .15em;border-radius: 3px;background: var(--art-tint);color: var(--art-head);text-decoration: none}.prose mark{padding: 0 .15em;border-radius: 3px;background: var(--art-mark);color: inherit}.prose abbr[title]{text-decoration: underline dotted;text-underline-offset: 3px;cursor: help}.prose small{color: var(--art-ink-2);font-size: 14px}.prose :where(sup,sub){font-size: .7em;line-height: 0}.prose :is(h2,h3,h4) + *{margin-top: 0}@media (width < 700px){.prose table{display: block;overflow-x: auto}.prose dl{grid-template-columns: 1fr}.prose dt{padding-bottom: 0;border-bottom: 0}.prose dd{grid-column: 1;padding-top: 4px}}.art-cta{display: grid;grid-template-columns: 1fr auto;align-items: center;gap: 6px 32px;margin-top: 64px;padding: 32px 36px;border-radius: 18px;background: var(--deep);color: var(--on-deep-2)}.art-cta h2{margin: 0;color: #fff;font-size: 22px;letter-spacing: -.01em;text-wrap: balance}.art-cta p{grid-column: 1;margin: 0;font-size: 15px;text-wrap: pretty}.art-cta .btn{grid-column: 2;grid-row: 1 / span 2;height: 46px;padding-inline: 24px}.art-related{margin-top: 56px}.art-related h2{margin: 0 0 12px;color: var(--art-head);font-size: 18px}.art-related ul{margin: 0;padding: 0;list-style: none}.art-related li{border-top: 1px solid var(--art-line)}.art-related li:last-child{border-bottom: 1px solid var(--art-line)}.art-related a{display: block;padding: 14px 0;color: var(--art-link);font-weight: 600;text-decoration: none}.art-related a:hover{text-decoration: underline}@media (width < 1240px){.art-layout,.art-layout:not(:has(.art-toc)){grid-template-columns: [nav] var(--art-nav-w) [main] minmax(0,1fr)}.art-layout:not(:has(> .art-nav)){grid-template-columns: [main] minmax(0,var(--art-measure))}.art-text{display: block}.art-toc{position: static;max-width: var(--art-measure);max-height: none;overflow: visible;margin-bottom: 40px;padding: 18px 20px;border: 1px solid var(--art-line);border-radius: 14px;background: var(--art-soft)}.art-toc ul{border-left: 0;columns: 2;column-gap: 24px}.art-toc li a{padding-left: 0}.art-toc-cta{display: none}.art-toc li:has(> a:target-current)::before{display: none}}@media (width < 1000px){.art-layout,.art{display: block}.art-layout{max-width: calc(var(--art-measure) + var(--gutter) * 2)}.art-head{margin-bottom: 40px;padding-block: 36px 32px}.art-nav{position: static;max-height: none;margin-top: 56px;padding-top: 32px;overflow: visible;border-top: 1px solid var(--art-line)}}@media (width < 600px){.art-lede{font-size: 18px}.art-read{padding-left: 0;border-left: 0}.art-toc ul{columns: 1}.art-cta{grid-template-columns: 1fr;padding: 28px 24px}.art-cta .btn{grid-column: 1;grid-row: auto;justify-self: start;margin-top: 12px}}