.bp{--bp-inset:clamp(1.1rem, 4vw, 2.5rem);--bp-side:minmax(9rem, 12rem);--bp-gutter:clamp(1.25rem, 3vw, 2.5rem);--bp-t-list:1.375rem;flex-direction:column;min-height:100vh;display:flex}.bp .ff-nav{position:sticky;inset:0 0 auto}.bp-main{flex:1 0 auto;padding-block:clamp(1.5rem,3.5vw,2.5rem) clamp(4rem,9vw,7rem)}.bp-main:focus{outline:none}.bp-main--band{padding-block-start:0}.bp-band{--_band-ink:#eceee9;background:var(--ink);color:var(--_band-ink);border-block-end:1px solid #00000059;margin-block-end:clamp(1.25rem,3vw,1.75rem);padding-block-start:clamp(1.5rem,3.5vw,2.25rem)}.bp-band :focus-visible{outline-color:var(--plate)}.bp-band ::selection{background:var(--plate);color:var(--ink)}.bp-crumbs ol{font-family:var(--font-sign);font-size:var(--t-meta);color:var(--ink-2);flex-wrap:wrap;align-items:center;gap:.25rem .6rem;margin:0 0 1rem;padding:0;font-weight:600;list-style:none;display:flex}.bp-crumbs li{align-items:center;gap:.6rem;display:flex}.bp-crumbs li+li:before{content:"/";content:"/" / "";color:var(--ink-3);font-weight:400}.bp-crumbs a{text-underline-offset:.3em;align-items:center;min-height:2rem;-webkit-text-decoration:underline #0000;text-decoration:underline #0000;text-decoration-thickness:2px;display:inline-flex}.bp-crumbs a:hover{color:var(--ink);-webkit-text-decoration-color:var(--ochre);text-decoration-color:var(--ochre)}.bp-crumbs .bp-cat{font-size:var(--t-meta);font-weight:inherit;letter-spacing:normal;text-transform:none;color:inherit}.bp-post{grid-template-columns:minmax(0,1fr);min-width:0;display:grid}.bp-head{max-width:52rem;padding:clamp(1.25rem, 3.5vw, 2rem) var(--bp-inset) clamp(1.1rem, 3vw, 1.6rem);border:1px solid var(--rule-strong);border-block-start:3px solid var(--ink);background:var(--plate-2)}.bp-head h1{max-width:22ch;font-family:var(--font-sign);letter-spacing:-.03em;overflow-wrap:anywhere;text-wrap:balance;margin:0;font-size:clamp(2rem,4.6vw,3.1rem);font-weight:700;line-height:1.04}[dir=rtl] .bp-head h1{letter-spacing:normal;line-height:1.2}.bp-lede{max-width:58ch;color:var(--ink-2);font-size:var(--t-prose);text-wrap:pretty;margin:.85rem 0 0;line-height:1.55}.bp-notice{max-width:58ch;color:var(--ink-2);background:var(--plate-2);font-size:var(--t-meta);margin:.85rem 0 0;line-height:1.5}.bp-notice a{color:var(--ink);text-underline-offset:.25em;text-decoration:underline}.bp-body{border:1px solid var(--rule-strong);background:var(--plate);min-width:0;max-width:52rem}.bp-aside{max-width:52rem;padding:1.1rem var(--bp-inset) 1.25rem;font-size:var(--t-meta);gap:1.25rem;display:grid}.bp-facts{flex-wrap:wrap;gap:.4rem 1.6rem;margin:0;display:flex}.bp-facts div{gap:.45rem;display:flex}.bp-facts dt{color:var(--ink-3)}.bp-facts dd{color:var(--ink);overflow-wrap:anywhere;margin:0;font-weight:700}.bp-toc__title{font-family:var(--font-sign);font-size:var(--t-label);letter-spacing:.1em;text-transform:uppercase;color:var(--ink);margin:0 0 .5rem;font-weight:700}[dir=rtl] .bp-toc__title{font-size:var(--t-meta);letter-spacing:normal}.bp-toc ol{border-inline-start:1px solid var(--rule-strong);margin:0;padding:0;list-style:none}.bp-toc a.bp-toc__link{color:var(--ink-2);overflow-wrap:anywhere;text-wrap:pretty;border-inline-start:2px solid #0000;margin-inline-start:-1px;padding-block:.4rem;padding-inline:.9rem 0;line-height:1.4;transition:color .16s cubic-bezier(.16,1,.3,1),border-color .16s cubic-bezier(.16,1,.3,1);display:block}.bp-toc a.bp-toc__link:hover{color:var(--ink);border-inline-start-color:var(--ochre)}.bp-toc a.bp-toc__link[aria-current=location]{color:var(--green);border-inline-start-color:var(--green);font-weight:700}.bp-prose h2[id]{scroll-margin-top:5.5rem}@media (width>=68.75rem){.bp-post{grid-template-rows:auto 1fr;grid-template-columns:minmax(0,52rem) minmax(12rem,16rem);justify-content:space-between;column-gap:3rem}.bp-head{grid-area:1/1}.bp-body{border-block-start:0;grid-area:2/1}.bp-aside{border-block-start:3px solid var(--ink);grid-area:1/2/span 2;align-self:start;gap:1.75rem;max-height:calc(100vh - 7rem);padding:0;position:sticky;top:5.5rem;overflow-y:auto}.bp-facts{gap:0;display:grid}.bp-facts div{border-block-end:1px solid var(--rule);gap:.1rem;padding-block:.6rem;display:grid}.bp-facts dt{font-family:var(--font-sign);font-size:var(--t-micro);letter-spacing:.09em;text-transform:uppercase;font-weight:600}[dir=rtl] .bp-facts dt{font-size:var(--t-meta);letter-spacing:normal}}@media (prefers-reduced-motion:reduce){.bp-toc__link{transition:none}}.bp-after{gap:clamp(1.75rem,4vw,2.5rem);max-width:52rem;margin-block-start:clamp(1.75rem,4vw,2.5rem);display:grid}.bp-next{border-block:1px solid var(--rule-strong);grid-template-columns:repeat(2,minmax(0,1fr));display:grid}.bp-next__link{min-width:0;padding:1.1rem var(--bp-inset) 1.25rem;align-content:start;gap:.4rem;display:grid}.bp-next__link--older{border-inline-start:1px solid var(--rule);text-align:end}.bp-next__dir{font-family:var(--font-sign);font-size:var(--t-label);letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);justify-self:start;align-items:center;gap:.45rem;font-weight:700;display:inline-flex}[dir=rtl] .bp-next__dir{font-size:var(--t-meta);letter-spacing:normal}.bp-next__link--older .bp-next__dir{flex-direction:row-reverse;justify-self:end}.bp-next__dir svg{width:1rem;height:1rem;transform:scaleX(var(--flip));flex:none;transition:translate .2s cubic-bezier(.16,1,.3,1)}.bp-next__link--older .bp-next__dir svg{transform:scaleX(calc(-1 * var(--flip)))}.bp-next__title{font-family:var(--font-sign);font-size:var(--bp-t-list);letter-spacing:-.015em;color:var(--ink);overflow-wrap:anywhere;text-wrap:balance;font-weight:700;line-height:1.2}[dir=rtl] .bp-next__title{letter-spacing:normal}a.bp-next__link:hover .bp-next__title{text-decoration:underline;-webkit-text-decoration-color:var(--ochre);text-decoration-color:var(--ochre);text-underline-offset:.2em;text-decoration-thickness:2px}a.bp-next__link--newer:hover svg{translate:calc(-3px * var(--flip)) 0}a.bp-next__link--older:hover svg{translate:calc(3px * var(--flip)) 0}@media (prefers-reduced-motion:reduce){.bp-next__dir svg{transition:none}}.bp-close{padding:clamp(1.25rem, 3.5vw, 1.75rem) var(--bp-inset);border:1px solid var(--green-deep);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem 2rem;display:flex}.bp-close__words{flex:22ch;min-width:12ch}.bp-close h2{letter-spacing:-.03em;max-width:none;font-size:clamp(1.6rem,3.2vw,2.3rem);line-height:1.04}.bp-close p{color:#f2f5f2d9;font-size:var(--t-body);text-wrap:pretty;margin:.4rem 0 0}@media (width<=560px){.bp-next{grid-template-columns:minmax(0,1fr)}.bp-next__link--older{border-inline-start:0;border-block-start:1px solid var(--rule);text-align:start}.bp-next__link--older .bp-next__dir{justify-self:start}.bp-next__link--none{display:none}}.bp-prose{min-width:0;padding:clamp(1.25rem, 4vw, 2.5rem) var(--bp-inset) clamp(1.75rem, 5vw, 3rem);font-size:var(--t-prose);overflow-wrap:break-word;line-height:1.65}.bp-prose>:is(p,ul,ol,h2,h3,h4,blockquote,hr){max-width:34em}.bp-prose>:first-child{margin-block-start:0}.bp-prose>:last-child{margin-block-end:0}.bp-prose p,.bp-prose ul,.bp-prose ol{margin-block:1em}.bp-prose ul,.bp-prose ol{padding-inline-start:1.4em}.bp-prose li+li{margin-block-start:.35em}.bp-prose li>p{margin-block:.35em}.bp-prose h2,.bp-prose h3{font-family:var(--font-sign);letter-spacing:-.02em;text-wrap:balance;font-weight:700}.bp-prose h2{letter-spacing:-.025em;margin-block:2.1em .6em;font-size:clamp(1.45rem,2.9vw,2rem);line-height:1.1}.bp-prose h3{margin-block:1.8em .5em;font-size:1.25rem;line-height:1.2}.bp-prose a{color:var(--ink);text-underline-offset:.18em;text-decoration:underline;text-decoration-thickness:1px}.bp-prose a:hover{text-decoration-thickness:2px}.bp-prose strong{font-weight:700}.bp-prose blockquote{border:1px solid var(--rule);background:var(--plate-2);margin:1.5em 0;padding:.9rem 1.2rem}.bp-prose blockquote>:first-child{margin-block-start:0}.bp-prose blockquote>:last-child{margin-block-end:0}.bp-prose code{font-variant-ligatures:none;border:1px solid var(--rule);background:var(--plate-2);font-family:var(--font-mrz);padding:.08em .35em;font-size:.86em}.bp-prose pre{border:1px solid var(--rule-strong);background:var(--plate-2);max-width:100%;font-family:var(--font-mrz);font-size:var(--t-meta);tab-size:2;margin:1.5em 0;padding:1rem 1.2rem;line-height:1.6;overflow-x:auto}.bp-prose pre code{font-size:inherit;background:0 0;border:0;padding:0}.bp-code{border:1px solid var(--rule-strong);background:var(--plate-2);min-width:0;max-width:100%;margin:1.5em 0}.bp-code__strip{border-block-end:1px solid var(--rule);background:var(--plate);flex-wrap:wrap;align-items:stretch;display:flex}.bp-code__field{background:var(--green);color:var(--plate);font-family:var(--font-mrz);font-size:var(--t-micro);letter-spacing:.14em;text-transform:uppercase;align-items:center;padding:.35rem .8rem;display:flex}.bp-code .ff-copy{margin-block:.3rem;margin-inline-start:auto}.bp-code pre{border:0;margin:0}.bp-prose .hljs{color:var(--ink)}.bp-prose .hljs-keyword,.bp-prose .hljs-selector-tag,.bp-prose .hljs-literal,.bp-prose .hljs-section,.bp-prose .hljs-name,.bp-prose .hljs-doctag,.bp-prose .hljs-strong{color:var(--ink);font-weight:700}.bp-prose .hljs-string,.bp-prose .hljs-regexp,.bp-prose .hljs-addition,.bp-prose .hljs-template-variable,.bp-prose .hljs-selector-attr,.bp-prose .hljs-selector-pseudo{color:var(--green-deep)}.bp-prose .hljs-comment,.bp-prose .hljs-quote,.bp-prose .hljs-meta,.bp-prose .hljs-meta .hljs-keyword{color:var(--ink-3);font-style:italic;font-weight:400}.bp-prose .hljs-number,.bp-prose .hljs-symbol,.bp-prose .hljs-bullet,.bp-prose .hljs-built_in,.bp-prose .hljs-type,.bp-prose .hljs-title,.bp-prose .hljs-attr,.bp-prose .hljs-attribute,.bp-prose .hljs-variable,.bp-prose .hljs-params,.bp-prose .hljs-link,.bp-prose .hljs-selector-id,.bp-prose .hljs-selector-class{color:var(--ink-2)}.bp-prose .hljs-emphasis{font-style:italic}.bp-prose .hljs-deletion{color:var(--ink-2);text-decoration:line-through}.bp-prose .bp-figure{border:1px solid var(--rule-strong);background:var(--plate-2);max-width:100%;margin:1.75em 0}.bp-prose .bp-figure img{max-width:100%;height:auto;margin-inline:auto;display:block}.bp-prose .bp-figure figcaption{border-block-start:1px solid var(--rule);background:var(--plate);color:var(--ink-2);font-size:var(--t-meta);padding:.6rem .9rem;line-height:1.5}.bp-prose .bp-callout{--_bg:var(--plate);--_fg:var(--ink);border:1px solid var(--rule-strong);background:var(--plate-2);margin:1.5em 0}.bp-prose .bp-callout--warning{--_bg:var(--ochre-ink);--_fg:var(--plate)}.bp-prose .bp-callout p{margin:0;padding:.85rem 1.2rem 0}.bp-prose .bp-callout p:last-child{padding-block-end:.95rem}.bp-prose .bp-callout .bp-callout__label{border-block-end:1px solid var(--rule);background:var(--_bg);color:var(--_fg);font-family:var(--font-sign);font-size:var(--t-label);letter-spacing:.1em;text-transform:uppercase;align-items:center;gap:.6rem;padding:.35rem .8rem;font-weight:700;display:flex}.bp-callout__label:before{letter-spacing:0;text-transform:none;flex:none;place-items:center;width:1.15rem;height:1.15rem;font-size:.75rem;line-height:1;display:grid}.bp-callout--note .bp-callout__label:before{content:"i";content:"i" / "";border:1.5px solid}.bp-callout--warning .bp-callout__label:before{content:"!";content:"!" / "";background:var(--_fg);color:var(--_bg);clip-path:polygon(50% 0,100% 100%,0 100%);padding-block-start:.28rem}.bp-prose table{border-collapse:collapse;max-width:100%;font-size:var(--t-body);margin:1.5em 0;line-height:1.5;display:block;overflow-x:auto}.bp-prose th,.bp-prose td{border:1px solid var(--rule-strong);text-align:start;vertical-align:top;padding:.55rem .8rem}.bp-prose th{background:var(--plate-2);font-family:var(--font-sign);font-weight:700}.bp-prose img{max-width:100%;height:auto}.bp-prose hr{border:0;border-block-start:1px solid var(--rule-strong);margin-block:2em}.bp-index-head{flex-wrap:wrap;align-items:baseline;gap:.6rem clamp(1.5rem,4vw,3rem);margin-block-end:clamp(1rem,2.5vw,1.5rem);display:flex}.bp-index-head h1{font-family:var(--font-sign);letter-spacing:-.03em;overflow-wrap:anywhere;text-wrap:balance;margin:0;font-size:clamp(2rem,4.6vw,3.1rem);font-weight:700;line-height:1.04}.bp-index-lede{max-width:58ch;color:color-mix(in oklab, currentColor 80%, transparent);font-size:var(--t-lead);letter-spacing:.005em;text-wrap:pretty;flex:30ch;margin:0;line-height:1.6}[dir=rtl] .bp-index-head h1,[dir=rtl] .bp-plate__title{letter-spacing:normal;line-height:1.15}.bp-cat{font-family:var(--font-sign);font-size:var(--t-label);letter-spacing:.1em;text-transform:uppercase;color:var(--ink);align-items:center;gap:.5rem;font-weight:700;display:inline-flex}[dir=rtl] .bp-cat{font-size:var(--t-meta);letter-spacing:normal}.bp-cat svg{flex:none;width:1rem;height:1rem}.bp-cat--tutorials svg{transform:scaleX(var(--flip))}.bp-filter{border-block-start:1px solid color-mix(in oklab, var(--_band-ink) 22%, transparent)}.bp-filter ul{flex-wrap:wrap;gap:0 1.75rem;margin:0;padding:0;list-style:none;display:flex}.bp-filter__link{min-height:2.75rem;font-family:var(--font-sign);font-size:var(--t-meta);border-block-end:2px solid #0000;align-items:center;margin-block-end:-1px;padding-block:.3rem;font-weight:500;display:flex}.bp-filter__link .bp-cat{font-size:var(--t-meta);font-weight:inherit;letter-spacing:normal;text-transform:none;color:inherit}.bp-band a.bp-filter__link{color:color-mix(in oklab, var(--_band-ink) 78%, transparent);font-weight:600}.bp-band a.bp-filter__link:hover{color:var(--_band-ink);border-block-end-color:color-mix(in oklab, var(--_band-ink) 45%, transparent)}.bp-band a.bp-filter__link[aria-current=page]{background:var(--paper);color:var(--ink);border-block-end:0;margin-block-end:0;padding-inline:.85rem;font-weight:700}.bp-plate{border:1px solid var(--rule-strong);border-block-start:3px solid var(--ink);background:var(--plate);margin-block-end:clamp(1.25rem,3vw,1.75rem);position:relative;box-shadow:inset 0 0 0 1px #fff9}.bp-plate__body{padding:clamp(1.1rem, 2.5vw, 1.5rem) var(--bp-inset) clamp(1.2rem, 2.5vw, 1.6rem);background:var(--plate-2)}@media (width>=35.0625rem){.bp-plate:not(.bp-plate--cover) .bp-plate__body{grid-template-columns:var(--bp-side) minmax(0, 1fr);column-gap:var(--bp-gutter);align-items:start;display:grid}.bp-plate:not(.bp-plate--cover) .bp-plate__meta{flex-direction:column;grid-row:1/span 2;align-items:flex-start;gap:.45rem;margin:0;padding-block-start:.55rem}.bp-plate:not(.bp-plate--cover) :is(.bp-plate__title,.bp-plate__excerpt){grid-column:2}}@media (width>=56rem){.bp-plate--cover{grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);display:grid}.bp-plate--cover .bp-plate__cover{border-block-end:0;border-inline-end:1px solid var(--rule-strong)}.bp-plate--cover .bp-plate__cover img{height:100%;max-height:22rem}.bp-plate--cover .bp-plate__body{flex-direction:column;justify-content:center;align-self:stretch;display:flex}}.bp-plate,.bp-entry{position:relative}.bp-plate__title a:after,.bp-entry__title a:after{content:"";position:absolute;inset:0}.bp-plate__title a:focus-visible,.bp-entry__title a:focus-visible{outline:none}:is(.bp-plate:has(.bp-plate__title a:focus-visible),.bp-entry:has(.bp-entry__title a:focus-visible)){outline:2px solid var(--green);outline-offset:2px}.bp-plate__meta{font-family:var(--font-mrz);font-size:var(--t-meta);color:var(--ink-3);flex-wrap:wrap;align-items:center;gap:.4rem 1.4rem;margin:0 0 .75rem;display:flex}.bp-plate__title{max-width:24ch;font-family:var(--font-sign);letter-spacing:-.03em;overflow-wrap:anywhere;text-wrap:balance;margin:0;font-size:clamp(1.6rem,3.2vw,2.3rem);font-weight:700;line-height:1.04}.bp-plate__excerpt{max-width:58ch;color:var(--ink-2);font-size:var(--t-prose);overflow-wrap:anywhere;text-wrap:pretty;margin:.7rem 0 0;line-height:1.55}.bp-plate__cover,.bp-cover{border-block-end:1px solid var(--rule-strong);background:var(--plate-2);margin:0}.bp-plate__cover img,.bp-cover img{aspect-ratio:16/9;object-fit:cover;width:100%;height:auto;max-height:28rem;display:block}.bp-ledger{border-block-start:1px solid var(--rule-strong);margin:0;padding:0;list-style:none}.bp-entry{grid-template-columns:var(--bp-side) minmax(0, 1fr) 1.25rem;align-items:start;gap:.5rem var(--bp-gutter);padding-block:1rem;padding-inline:var(--bp-inset);border-block-end:1px solid var(--rule);display:grid}.bp-entry__go{width:1.1rem;height:1.1rem;color:var(--ink-3);transform:scaleX(var(--flip));align-self:center;transition:color .16s,translate .2s cubic-bezier(.16,1,.3,1)}.bp-entry:hover .bp-entry__go{color:var(--ink);translate:calc(3px * var(--flip)) 0}@media (prefers-reduced-motion:reduce){.bp-entry__go{transition:none}}.bp-entry__side{flex-direction:column;align-items:flex-start;gap:.45rem;min-width:0;padding-block-start:.2rem;display:flex}.bp-entry__date{font-family:var(--font-mrz);font-size:var(--t-meta);color:var(--ink-3)}.bp-entry__body{min-width:0}.bp-entry__title{font-family:var(--font-sign);font-size:var(--bp-t-list);letter-spacing:-.02em;overflow-wrap:anywhere;text-wrap:balance;margin:0;font-weight:700;line-height:1.2}[dir=rtl] .bp-entry__title{letter-spacing:normal}.bp-entry__excerpt{max-width:38em;color:var(--ink-2);font-size:var(--t-body);overflow-wrap:anywhere;text-wrap:pretty;margin:.4rem 0 0;line-height:1.6}.bp-plate__title a:hover,.bp-entry__title a:hover,.bp-empty__more a:hover{text-decoration:underline;-webkit-text-decoration-color:var(--ochre);text-decoration-color:var(--ochre);text-underline-offset:.2em;text-decoration-thickness:2px}.bp-pages{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.25rem 1.5rem;margin-block-start:1.5rem;display:flex}.bp-pages__step{min-height:2.75rem;font-family:var(--font-sign);font-size:var(--t-body);color:var(--ink);align-items:center;padding-inline:.1rem;font-weight:700;display:inline-flex}a.bp-pages__step{border-block-end:2px solid var(--ink)}a.bp-pages__step:hover{border-block-end-color:var(--ochre)}span.bp-pages__step{color:var(--ink-3);font-weight:500}.bp-pages__where{font-family:var(--font-mrz);font-size:var(--t-meta);color:var(--ink-3)}.bp-empty{padding:clamp(1.5rem, 5vw, 3rem) var(--bp-inset);border-block-start:3px solid var(--ink);background:var(--plate-2)}.bp-empty__line{font-family:var(--font-sign);font-size:var(--t-prose);margin:0;font-weight:700}.bp-empty__more{margin:.75rem 0 0}.bp-empty__more a{text-underline-offset:.18em;text-decoration:underline}@media (width<=560px){.bp-entry{grid-template-columns:minmax(0,1fr)}.bp-entry__go{display:none}.bp-entry__side{flex-flow:wrap;align-items:center;gap:.3rem 1rem;padding-block-start:0}.bp-filter ul{column-gap:1.25rem}}
