:root,.fs-proto,.fs-mock{--fs-bg:#fff;--fs-ink:#1e2238;--fs-ink-strong:#141730;--fs-muted-fg:#565a70;--fs-ink-subtle:#666a80;--fs-primary:#2b3a8f;--fs-primary-fg:#fff;--fs-secondary:#f1f2f7;--fs-muted:#f7f8fb;--fs-border:#dde1ec;--fs-line-soft:#e9ebf3;--fs-line-hover:#c4cadb;--fs-line-strong:#8a8ea3;--fs-solid:#141838;--fs-solid-hover:#0f1230;--fs-solid-press:#0b0f2c;--fs-ghost-hover:#eef0f6;--fs-tonal-hover:#e9ebf3;--fs-shadow-chip:0 1px 1px #1417300d, 0 1px 3px #1417300d;--fs-shadow-card:0 1px 2px #1417300a, 0 3px 8px #1417300a, 0 10px 20px #14173008;--fs-shadow-sm:0 1px 2px #14173012, 0 2px 5px #1417300d;--fs-shadow-pop:0 2px 4px #1417300d, 0 6px 14px #1417300d, 0 16px 32px #1417300a;--fs-shadow-btn:0 1px 2px #14173012, 0 0 0 1px #dde1ec;--ac-amber:#e5a93c;--ac-amber-soft:#f7dfa6;--ac-amber-deep:#a8741a;--fs-ease:cubic-bezier(.23, 1, .32, 1);--fs-chart-1:#2b3a8f;--fs-chart-2:#e5a93c;--fs-status-ok:#2e9e52;--fs-chip-ok-ink:#1d6b37;--fs-status-warn:#c98a1e;--fs-status-danger:#d40924;--fs-chip-warn-surface:#fff9ec;--fs-chip-warn-line:#f4d999;--fs-chip-warn-ink:#8a5d0f;--fs-chip-info-surface:#f6faff;--fs-chip-info-line:#98c5fc;--fs-chip-info-ink:#215fab}.fs-mock{color:var(--fs-ink);font-family:var(--font-manrope), ui-sans-serif, system-ui, sans-serif}.fs-well{background:var(--fs-muted)}
.fs-proto{background:var(--fs-bg);color:var(--fs-ink);font-family:var(--font-manrope), ui-sans-serif, system-ui, sans-serif;font-size:16px;line-height:26px}@layer base{.fs-proto :is(h1,h2,h3){color:var(--fs-ink-strong);letter-spacing:-.02em;font-weight:600}}.fs-press{transition:transform .16s var(--fs-ease), background-color .2s ease, box-shadow .2s ease, color .2s ease}.fs-press:active{transform:scale(.96)}@media (prefers-reduced-motion:no-preference){.fs-proto main button:active,.fs-proto nav button:active{scale:.96}}.fs-proto :focus-visible{outline:2px solid var(--fs-primary);outline-offset:2px}.fs-proto .fs-site-footer :focus-visible{outline-color:var(--fs-bg)}.fs-proto input[type=search]:focus-visible{outline:none}@media (prefers-reduced-motion:no-preference){.fs-rise{animation:fs-rise .5s var(--fs-ease) both;animation-delay:calc(var(--i,0) * 80ms)}}@keyframes fs-rise{0%{opacity:.01;transform:translateY(12px)}}@media (prefers-reduced-motion:reduce){.fs-press,.fs-press:active{transition:none;transform:none}}.fs-stack-card{top:calc(112px + var(--i,0) * 16px);position:sticky}@media (min-width:1024px) and (min-height:760px){.fs-stack{row-gap:40vh}}.fs-broken{box-shadow:none!important;background:0 0!important;border-color:#0000!important;overflow:visible!important}.fs-broken>*{background:var(--fs-bg);box-shadow:0 0 0 1px var(--fs-border), var(--fs-shadow-card);border-radius:12px;border-color:#0000!important}.fs-broken[data-join=rows]>*{box-shadow:0 0 0 12px var(--fs-bg), 0 0 0 13px var(--fs-border)}@media (max-width:1023px),(max-height:759px){.fs-stack-card{position:relative;top:auto}}@media (prefers-reduced-motion:no-preference){.fs-faq{interpolate-size:allow-keywords}.fs-faq::details-content{block-size:0;transition:block-size .25s var(--fs-ease), content-visibility .25s allow-discrete;overflow:hidden}.fs-faq[open]::details-content{block-size:auto}}.fs-vs .fs-vs-band{background:color-mix(in oklab, var(--fs-chip-info-surface) 75%, var(--fs-bg));box-shadow:inset 1px 0 0 var(--fs-chip-info-line), inset -1px 0 0 var(--fs-chip-info-line)}.fs-vs thead .fs-vs-band{box-shadow:inset 1px 0 0 var(--fs-chip-info-line), inset -1px 0 0 var(--fs-chip-info-line), inset 0 1px 0 var(--fs-chip-info-line);border-radius:12px 12px 0 0}.fs-vs tfoot .fs-vs-band{box-shadow:inset 1px 0 0 var(--fs-chip-info-line), inset -1px 0 0 var(--fs-chip-info-line), inset 0 -1px 0 var(--fs-chip-info-line);border-radius:0 0 12px 12px}html:has(.fs-proto){scroll-padding-top:112px}.fs-proto :is(a,button,summary){cursor:pointer;touch-action:manipulation}@supports (animation-timeline:scroll()){.fs-nav-bar{animation:linear both fs-nav-line;animation-timeline:scroll(root);animation-range:0 8px}}@keyframes fs-nav-line{0%{border-color:#0000}}.fs-nav-list{scroll-target-group:auto}.fs-nav-link:target-current{background:var(--fs-ghost-hover);color:var(--fs-ink-strong)}@supports not selector(:target-current){.fs-nav-link[aria-current]{background:var(--fs-ghost-hover);color:var(--fs-ink-strong)}}.ac-mark{background:linear-gradient(180deg, transparent 62%, var(--ac-amber-soft) 62%);padding-inline:.08em}.fs-built-hub{container-type:inline-size}@media (prefers-reduced-motion:no-preference){@supports (animation-timeline:view()){.fs-built{view-timeline:--fs-built block;--fs-built-start:35%}@media (min-width:1024px){.fs-built{--fs-built-start:22%}}.fs-built-ink,.fs-built-line,.fs-built-node{animation-timing-function:linear;animation-fill-mode:both;animation-timeline:--fs-built;animation-range:cover calc(var(--fs-built-start) + var(--i) * 5.5%) cover calc(var(--fs-built-start) + (var(--i) + 1) * 5.5%)}.fs-built-ink{animation-name:fs-built-ink}.fs-built-line{stroke-dasharray:1;animation-name:fs-built-draw}.fs-built-node{animation-name:fs-built-node}}}@keyframes fs-built-node{0%{opacity:0;transform:translate(var(--dx), var(--dy)) scale(.5)}}@keyframes fs-built-ink{0%{opacity:.28}}@keyframes fs-built-draw{0%{stroke-dashoffset:1px}to{stroke-dashoffset:0}}.fs-post{--fs-mono:ui-monospace, SFMono-Regular, Menlo, monospace}.fs-post-grid{grid-template-columns:repeat(12,minmax(0,1fr));padding:0 32px;display:grid}.fs-post-hero{border-bottom:1px solid var(--fs-line-soft);padding-top:72px;padding-bottom:56px}.fs-post-hd{grid-column:5/13;max-width:732px}.fs-post-chip{border:1px solid var(--fs-line-soft);color:var(--fs-muted-fg);font-family:var(--fs-mono);margin-bottom:14px;padding:2px 8px;font-size:12px;line-height:18px;display:inline-block}.fs-post-chip:hover{color:var(--fs-ink-strong)}.fs-post-hd h1{max-width:720px;color:var(--fs-ink-strong);letter-spacing:-.01em;font-size:34px;font-weight:500;line-height:44px}.fs-post-standfirst{max-width:720px;color:var(--fs-ink);margin-top:12px;font-size:18px;line-height:29px}.fs-post-meta{grid-template-columns:repeat(8,minmax(0,1fr));margin-top:30px;display:grid}.fs-post-meta>div{grid-column:span 2}.fs-post-meta dt,.fs-rail-th{color:var(--fs-muted-fg);font-family:var(--fs-mono);letter-spacing:.02em;text-transform:uppercase;margin-bottom:7px;font-size:12px;font-weight:400;line-height:18px}.fs-post-meta dd{text-indent:-1.4em;color:var(--fs-ink-strong);padding-left:1.4em;font-size:14px;line-height:22px}.fs-post-meta dd:before{content:"└ ";color:var(--fs-ink-subtle);font-family:var(--fs-mono)}.fs-post-body{padding-top:64px;padding-bottom:32px}.fs-post-cover{border:1px solid var(--fs-line-soft);width:100%;margin-bottom:32px}.fs-rail{min-height:calc(100dvh - 165px);font-family:var(--fs-mono);flex-direction:column;grid-column:1/5;align-self:start;margin-right:32px;display:flex;position:sticky;top:133px}.fs-rail-title{opacity:0;max-height:0;color:var(--fs-ink-strong);font-family:var(--font-manrope), ui-sans-serif, system-ui, sans-serif;font-size:16px;font-weight:500;line-height:24px;overflow:hidden;transform:translateY(8px)}.fs-rail-title.on{opacity:1;max-height:240px;margin-bottom:24px;transform:none}.fs-rail-th{margin-bottom:12px}.fs-rail-tree a,.fs-rail-share :is(a,button){width:fit-content;max-width:100%;color:var(--fs-ink);font-family:var(--fs-mono);text-align:left;white-space:nowrap;text-overflow:ellipsis;padding:2px 0;font-size:13px;line-height:19px;display:block;overflow:hidden}.fs-rail-tree a:hover,.fs-rail-tree a.on,.fs-rail-share :is(a,button):hover{color:var(--fs-ink-strong)}.fs-rail .br{color:var(--fs-ink-subtle);margin-right:10px}.fs-rail-share :is(a,button):before{content:"└";color:var(--fs-ink-subtle);margin-right:10px}.fs-rail-tree a.on .br{color:var(--fs-ink)}.fs-rail-tree a.sub{padding-left:18px}.fs-rail-tree .subs{visibility:hidden;grid-template-rows:0fr;display:grid}.fs-rail-tree .subs.open{visibility:visible;grid-template-rows:1fr}.fs-rail-tree .subs:has(:focus-visible){visibility:visible;grid-template-rows:1fr}.fs-rail-tree .subs>div{min-height:0;margin:-3px;padding:3px;overflow:hidden}.fs-rail-prog{color:var(--fs-ink-subtle);letter-spacing:-.04em;white-space:nowrap;margin-top:26px;font-size:13px;line-height:19px}.fs-rail-prog b{color:var(--fs-ink-strong);font-weight:400}.fs-rail-prog span{color:var(--fs-ink);letter-spacing:0;margin-left:8px}.fs-rail-hint{color:var(--fs-muted-fg);letter-spacing:.02em;text-transform:uppercase;margin-top:12px;font-size:12px;line-height:18px}.fs-rail-share{margin-top:auto;padding-top:26px}@media (prefers-reduced-motion:no-preference){.fs-rail-title{transition:opacity .4s cubic-bezier(.19,1,.22,1),transform .4s cubic-bezier(.19,1,.22,1),max-height .4s cubic-bezier(.19,1,.22,1),margin .4s cubic-bezier(.19,1,.22,1)}.fs-rail-tree .subs{transition:grid-template-rows .3s ease-out,visibility .3s}}.fs-post-more{padding-bottom:24px}.fs-post-more-list{border-top:1px solid var(--fs-line-soft);grid-column:5/13;max-width:732px;padding-top:32px}.fs-post-more-list a{color:var(--fs-ink);gap:10px;padding:6px 0;font-size:16px;line-height:24px;display:flex}.fs-post-more-list a:hover .t{color:var(--fs-ink-strong);text-underline-offset:.2em;text-decoration:underline}.fs-post-more-list :is(.br,.m){color:var(--fs-ink-subtle);font-family:var(--fs-mono);font-size:13px}.fs-post-more-list .m{white-space:nowrap;margin-left:auto}@media (max-width:899px){.fs-post-grid{flex-direction:column;padding:0 16px;display:flex}.fs-post-hero{padding-top:40px;padding-bottom:40px}.fs-post-meta{grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.fs-post-meta>div{grid-column:auto}.fs-post-body{padding-top:40px}.fs-rail{order:2;min-height:0;margin:40px 0 0;position:static}.fs-rail :is(.fs-rail-title,.fs-rail-tree){display:none}.fs-rail-share{padding-top:0}}@media (max-width:440px){.fs-post-meta{grid-template-columns:auto 1fr;gap:6px 16px}.fs-post-meta>div{display:contents}.fs-post-meta dt{margin:0}.fs-post-meta dd{text-indent:0;padding:0}.fs-post-meta dd:before{content:none}}.fs-article{grid-column:5/13;min-width:0;max-width:732px}.fs-article .blog-post-content{color:var(--fs-ink);overflow-wrap:break-word;font-size:18px;line-height:30.6px;overflow:visible}.fs-article .blog-post-content p{margin:0 0 14px}.fs-article :is(.blog-h1,.blog-h2,.blog-h3,.blog-h4,.blog-h5,.blog-h6){color:var(--fs-ink-strong);font-family:var(--fs-mono);letter-spacing:.02em;scroll-margin-top:0;font-size:15px;font-weight:500;line-height:22px;position:relative}.fs-article :is(.blog-h1,.blog-h2){text-transform:uppercase;margin:54px 0 20px}.fs-article :is(.blog-h1,.blog-h2):first-child{margin-top:0}.fs-article :is(.blog-h3,.blog-h4,.blog-h5,.blog-h6){margin:32px 0 14px}.fs-article .heading-anchor{color:var(--fs-ink-subtle)}.fs-article .blog-link{color:inherit;text-decoration:underline;text-decoration-thickness:1px;-webkit-text-decoration-color:var(--fs-muted-fg);text-decoration-color:var(--fs-muted-fg);text-underline-offset:.2em}.fs-article .blog-link:hover{text-decoration-color:#0000}.fs-article :is(.blog-ul,.blog-ol){margin:0 0 14px;padding-left:1.25rem;line-height:1.7}.fs-article .blog-ul{list-style:outside}.fs-article .blog-ol{list-style:decimal}.fs-article .blog-li+.blog-li{margin-top:6px}.fs-article .blog-li::marker{color:var(--fs-ink-subtle)}.fs-article .blog-blockquote{background:0 0;border:0;border-radius:0;margin:24px 0;padding:0}.fs-article .blog-blockquote p{color:var(--fs-muted-fg);margin:0;font-style:normal}.fs-article .blog-hr{border:0;border-top:1px solid var(--fs-line-soft);margin:44px 0}.fs-article .inline-code{border:1px solid var(--fs-line-soft);background:var(--fs-muted);color:var(--fs-ink-strong);font-family:var(--fs-mono);border-radius:0;padding:.0625em .25em;font-size:.875em}.fs-article .code-block-wrapper{border:1px solid var(--fs-line-soft);background:var(--fs-muted);border-radius:0;margin:24px 0;padding-top:36px;position:relative;overflow:hidden}.fs-article .code-block-wrapper:before{content:"";border-bottom:1px solid var(--fs-line-soft);background:var(--fs-bg);height:36px;position:absolute;inset:0 0 auto}.fs-article :is(.code-language,.code-copy-button){z-index:1;height:36px;color:var(--fs-muted-fg);font-family:var(--fs-mono);letter-spacing:.02em;text-transform:uppercase;opacity:1;background:0 0;border:0;align-items:center;padding:0 14px;font-size:12px;display:flex;position:absolute;top:0}.fs-article .code-language{left:0}.fs-article .code-copy-button{cursor:pointer;right:0}.fs-article .code-copy-button:hover{color:var(--fs-ink-strong)}.fs-article .code-block-wrapper>div,.fs-article .code-block-wrapper code{font-family:var(--fs-mono)!important;background:0 0!important;margin:0!important;font-size:13.5px!important;line-height:23.6px!important}.fs-article .code-block-wrapper>div span{color:var(--fs-ink)!important}.fs-article .code-block-wrapper>div{overflow-x:auto;color:var(--fs-ink)!important;padding:16px!important}.fs-article .blog-table-wrapper{border:1px solid var(--fs-line-soft);margin:24px 0;overflow-x:auto}.fs-article .blog-table{border-collapse:collapse;width:100%;font-size:15px;line-height:24px}.fs-article :is(.blog-th,.blog-td){border-bottom:1px solid var(--fs-line-soft);text-align:left;vertical-align:top;padding:10px 14px}.fs-article .blog-th{background:var(--fs-muted);color:var(--fs-ink-strong);font-family:var(--fs-mono);letter-spacing:.02em;text-transform:uppercase;font-size:12px;font-weight:500}.fs-article .blog-tr:last-child .blog-td{border-bottom:0}.fs-article .blog-image-wrapper{margin:28px 0}.fs-article .blog-image-wrapper img{border:1px solid var(--fs-line-soft)}.fs-article .blog-image-caption{color:var(--fs-muted-fg);font-family:var(--fs-mono);text-align:center;margin-top:8px;font-size:12px}.fs-article details{border:1px solid var(--fs-line-soft);background:0 0;margin:24px 0}.fs-no-scrollbar{scrollbar-width:none}.fs-no-scrollbar::-webkit-scrollbar{display:none}
