@font-face{font-family:Work Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./work-sans-vietnamese-wght-normal.BKsN3ITN.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Work Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./work-sans-latin-ext-wght-normal.B5dZ8C4S.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Work Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(./work-sans-latin-wght-normal.Bl-S9Xys.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-mono-cyrillic-ext-400-normal.xuaO2J-f.woff2) format("woff2"),url(./ibm-plex-mono-cyrillic-ext-400-normal.DMdlQ8Kv.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-mono-cyrillic-400-normal.BSMlKf0J.woff2) format("woff2"),url(./ibm-plex-mono-cyrillic-400-normal.CEL4l2ZJ.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-mono-vietnamese-400-normal.BulugwFq.woff2) format("woff2"),url(./ibm-plex-mono-vietnamese-400-normal.DDuiU_S-.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-mono-latin-ext-400-normal.BmRBH3aV.woff2) format("woff2"),url(./ibm-plex-mono-latin-ext-400-normal.D3D2R8hC.woff) format("woff");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(./ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2) format("woff2"),url(./ibm-plex-mono-latin-400-normal.CvHOgSBP.woff) format("woff");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}*,*:before,*:after{box-sizing:border-box}*{margin:0}body{line-height:1.5;-webkit-font-smoothing:antialiased}img,picture,video,canvas,svg{display:block;max-width:100%}input,button,textarea,select{font:inherit}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}#root,#__next{isolation:isolate}:root{--color-neutral-700: #18181a;--color-neutral-600: #373739;--color-neutral-500: #50504d;--color-neutral-200: #e2e1e1;--color-neutral-100: #fcfcfc;--color-brand-500: #4964fd;--color-brand-400: #6679e9;--color-brand-300: rgb(205, 211, 245);--color-secondary-200: #f1e2bb;--bg-neutral-default: var(--color-neutral-100);--bg-neutral-soft: var(--color-neutral-200);--fg-neutral-default: var(--color-neutral-600);--fg-neutral-mild: var(--color-neutral-500);--fg-brand-strong: var(--color-brand-500);--fg-brand-mild: var(--color-brand-400);--fg-brand-soft: var(--color-brand-300);--fg-secondary-default: var(--color-secondary-200);--4px: .25rem;--8px: .5rem;--10px: .625rem;--12px: .75rem;--14px: .875rem;--16px: 1rem;--18px: 1.125rem;--20px: 1.25rem;--22px: 1.275rem;--24px: 1.5rem;--28px: 1.75rem;--32px: 2rem;--36px: 2.25rem;--48px: 3rem;--52px: 3.25rem;--64px: 4rem;--72px: 4.5rem;--78px: 4.875rem;--80px: 5rem;--96px: 6rem;--112px: 7rem;--128px: 8rem;--font-bold: 700;--font-normal: 400;--font-mono: "IBM Plex Mono", monospace;--font-sans: "Work Sans Variable", sans-serif;--layout-max-width: 1600px;--layout-y-padding: 20px;--layout-x-padding: 20px}@media (min-width: 768px){:root{--layout-x-padding: 32px}}.dark{--bg-neutral-default: var(--color-neutral-700);--bg-neutral-soft: var(--color-neutral-600);--fg-neutral-default: var(--color-neutral-200);--fg-neutral-mild: var(--color-neutral-200);--fg-brand-strong: var(--color-brand-400);--fg-brand-mild: var(--color-brand-400);--fg-brand-soft: var(--color-brand-300)}html,body{margin:0;width:100%;height:100%;scroll-behavior:smooth;scrollbar-gutter:stable}:is(html,body)>div{height:100%}body{font-family:var(--font-sans);color:var(--fg-neutral-default);font-size:var(--16px);line-height:1.4;-webkit-font-smoothing:antialiased;background-color:var(--bg-neutral-default);transition:background-color .2s ease}a{color:inherit}a:focus-visible{outline-offset:4px}p{margin-bottom:var(--16px)}.grid-layout{width:90%;margin:0 auto;max-width:1600px;display:grid;grid-template-columns:repeat(6,1fr)}.prose{line-height:1.5;text-wrap:pretty}.prose:target,.prose [id]{scroll-margin-top:120px}.prose p,.prose li{font-size:var(--18px)}.prose h1,.prose h2{font-size:var(--24px);font-weight:700;margin:1.5em 0 1em;color:var(--fg-brand-strong)}.prose h3{font-size:var(--20px);font-weight:700;margin:1.5em 0 1em;color:var(--fg-brand-strong)}.prose p>code{background-color:var(--bg-neutral-soft);padding:2px 4px;border-radius:4px;font-size:var(--16px)}.prose pre{padding:var(--16px) var(--16px) var(--4px);border-radius:var(--8px);margin:1.5em -1rem}.prose pre code{display:block;max-width:100%;overflow-x:auto;padding-bottom:var(--12px)}.prose pre code::-webkit-scrollbar-thumb{background:#f5f5f499;border-radius:2px}.prose pre code::-webkit-scrollbar{height:4px;background-color:inherit}.prose li{margin-bottom:var(--8px)}.prose li:last-of-type{margin-bottom:var(--16px)}.prose img{margin:var(--24px) auto}.prose [id]{position:relative}.prose [id] .heading-link{position:absolute;top:0;bottom:0;left:0;margin:auto;display:flex;align-items:center;justify-content:center;width:var(--20px);height:var(--20px);translate:-130% 0;border-radius:50%;opacity:0;transition:opacity .2s ease}.prose [id] .heading-link:hover,.prose [id] .heading-link:focus-visible{opacity:1}.prose [id]:hover .heading-link{opacity:1}@media (max-width: 768px){.mobile-hide{display:none}}.lil-gui{height:fit-content}/**
 * Coldark Theme for Prism.js
 * Theme variation: Dark
 * Tested with HTML, CSS, JS, JSON, PHP, YAML, Bash script
 * @author Armand Philippot <contact@armandphilippot.com>
 * @homepage https://github.com/ArmandPhilippot/coldark-prism
 * @license MIT
 */code[class*=language-],pre[class*=language-]{color:#e3eaf2;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]::-moz-selection,pre[class*=language-] ::-moz-selection,code[class*=language-]::-moz-selection,code[class*=language-] ::-moz-selection{background:#3c526d}pre[class*=language-]::selection,pre[class*=language-] ::selection,code[class*=language-]::selection,code[class*=language-] ::selection{background:#3c526d}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#111b27}:not(pre)>code[class*=language-]{padding:.1em .3em;border-radius:.3em;white-space:normal}.token.comment,.token.prolog,.token.doctype,.token.cdata{color:#8da1b9}.token.punctuation{color:#e3eaf2}.token.delimiter.important,.token.selector .parent,.token.tag,.token.tag .token.punctuation{color:#6cc}.token.attr-name,.token.boolean,.token.boolean.important,.token.number,.token.constant,.token.selector .token.attribute{color:#e6d37a}.token.class-name,.token.key,.token.parameter,.token.property,.token.property-access,.token.variable{color:#6cb8e6}.token.attr-value,.token.inserted,.token.color,.token.selector .token.value,.token.string,.token.string .token.url-link{color:#91d076}.token.builtin,.token.keyword-array,.token.package,.token.regex{color:#f4adf4}.token.function,.token.selector .token.class,.token.selector .token.id{color:#c699e3}.token.atrule .token.rule,.token.combinator,.token.keyword,.token.operator,.token.pseudo-class,.token.pseudo-element,.token.selector,.token.unit{color:#e9ae7e}.token.deleted,.token.important{color:#cd6660}.token.keyword-this,.token.this{color:#6cb8e6}.token.important,.token.keyword-this,.token.this,.token.bold{font-weight:700}.token.delimiter.important{font-weight:inherit}.token.italic{font-style:italic}.token.entity{cursor:help}.language-markdown .token.title,.language-markdown .token.title .token.punctuation{color:#6cb8e6;font-weight:700}.language-markdown .token.blockquote.punctuation{color:#f4adf4}.language-markdown .token.code{color:#6cc}.language-markdown .token.hr.punctuation{color:#6cb8e6}.language-markdown .token.url .token.content{color:#91d076}.language-markdown .token.url-link{color:#e6d37a}.language-markdown .token.list.punctuation{color:#f4adf4}.language-markdown .token.table-header,.language-json .token.operator{color:#e3eaf2}.language-scss .token.variable{color:#6cc}.token.token.tab:not(:empty):before,.token.token.cr:before,.token.token.lf:before,.token.token.space:before{color:#8da1b9}div.code-toolbar>.toolbar.toolbar>.toolbar-item>a,div.code-toolbar>.toolbar.toolbar>.toolbar-item>button{color:#111b27;background:#6cb8e6}div.code-toolbar>.toolbar.toolbar>.toolbar-item>a:hover,div.code-toolbar>.toolbar.toolbar>.toolbar-item>a:focus,div.code-toolbar>.toolbar.toolbar>.toolbar-item>button:hover,div.code-toolbar>.toolbar.toolbar>.toolbar-item>button:focus{color:#111b27;background:#6cb8e6da;text-decoration:none}div.code-toolbar>.toolbar.toolbar>.toolbar-item>span,div.code-toolbar>.toolbar.toolbar>.toolbar-item>span:hover,div.code-toolbar>.toolbar.toolbar>.toolbar-item>span:focus{color:#111b27;background:#8da1b9}.line-highlight.line-highlight{background:#3c526d5f;background:linear-gradient(to right,#3c526d5f 70%,#3c526d55)}.line-highlight.line-highlight:before,.line-highlight.line-highlight[data-end]:after{background-color:#8da1b9;color:#111b27;box-shadow:0 1px #3c526d}pre[id].linkable-line-numbers.linkable-line-numbers span.line-numbers-rows>span:hover:before{background-color:#8da1b918}.line-numbers.line-numbers .line-numbers-rows{border-right:1px solid #0b121b;background:#0b121b7a}.line-numbers .line-numbers-rows>span:before{color:#8da1b9da}.rainbow-braces .token.token.punctuation.brace-level-1,.rainbow-braces .token.token.punctuation.brace-level-5,.rainbow-braces .token.token.punctuation.brace-level-9{color:#e6d37a}.rainbow-braces .token.token.punctuation.brace-level-2,.rainbow-braces .token.token.punctuation.brace-level-6,.rainbow-braces .token.token.punctuation.brace-level-10{color:#f4adf4}.rainbow-braces .token.token.punctuation.brace-level-3,.rainbow-braces .token.token.punctuation.brace-level-7,.rainbow-braces .token.token.punctuation.brace-level-11{color:#6cb8e6}.rainbow-braces .token.token.punctuation.brace-level-4,.rainbow-braces .token.token.punctuation.brace-level-8,.rainbow-braces .token.token.punctuation.brace-level-12{color:#c699e3}pre.diff-highlight>code .token.token.deleted:not(.prefix),pre>code.diff-highlight .token.token.deleted:not(.prefix){background-color:#cd66601f}pre.diff-highlight>code .token.token.inserted:not(.prefix),pre>code.diff-highlight .token.token.inserted:not(.prefix){background-color:#91d0761f}.command-line .command-line-prompt{border-right:1px solid #0b121b}.command-line .command-line-prompt>span:before{color:#8da1b9da}.main.svelte-12qhfyh{max-width:var(--layout-max-width);margin:0 auto;padding:0 var(--layout-x-padding);min-height:100vh}@media (min-width: 768px){.main.svelte-12qhfyh{padding:var(--layout-y-padding) var(--layout-x-padding)}}
