@font-face{font-family:Fira Code Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/_astro/fira-code-cyrillic-ext-wght-normal.DhYMMuQd.woff2) format("woff2-variations");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Fira Code Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/_astro/fira-code-cyrillic-wght-normal.Y3u8pIsh.woff2) format("woff2-variations");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:Fira Code Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/_astro/fira-code-greek-ext-wght-normal.wWus70Ix.woff2) format("woff2-variations");unicode-range:U+1F00-1FFF}@font-face{font-family:Fira Code Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/_astro/fira-code-greek-wght-normal.B2SviObF.woff2) format("woff2-variations");unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:Fira Code Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/_astro/fira-code-symbols2-wght-normal.CE6EOz_n.woff2) format("woff2-variations");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:Fira Code Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/_astro/fira-code-latin-ext-wght-normal.Dvfvaomy.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:Fira Code Variable;font-style:normal;font-display:swap;font-weight:300 700;src:url(/_astro/fira-code-latin-wght-normal.CHoedHDv.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:League Spartan Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/league-spartan-vietnamese-wght-normal.COdtqR7n.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:League Spartan Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/league-spartan-latin-ext-wght-normal.DdUHL39C.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:League Spartan Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/league-spartan-latin-wght-normal.0z8Zi79b.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}@layer reset,base,typography,layout,utilities,longform,theme;@font-face{font-family:Literata;src:url(/fonts/Literata-self-compiled-Mar2019.woff2) format("woff2");font-style:normal;font-display:swap}@font-face{font-family:Literata;src:url(/fonts/Literata-Italic-self-compiled-Mar2019.woff2) format("woff2");font-style:italic;font-display:swap}@property --color-accent{syntax: "<color>"; inherits: true; initial-value: oklch(70% .18 25);}@property --surface-raised{syntax: "<color>"; inherits: true; initial-value: #ffffff;}@property --hue-coral{syntax: "<number>"; inherits: true; initial-value: 25;}@property --hue-pink{syntax: "<number>"; inherits: true; initial-value: 350;}@property --hue-orange{syntax: "<number>"; inherits: true; initial-value: 55;}@property --hue-purple{syntax: "<number>"; inherits: true; initial-value: 300;}@property --hue-yellow{syntax: "<number>"; inherits: true; initial-value: 95;}@property --hue-green{syntax: "<number>"; inherits: true; initial-value: 165;}@property --hue-blue{syntax: "<number>"; inherits: true; initial-value: 250;}@property --hue-grey{syntax: "<number>"; inherits: true; initial-value: 210;}@property --duration-fast{syntax: "<time>"; inherits: true; initial-value: .15s;}@property --duration-normal{syntax: "<time>"; inherits: true; initial-value: .2s;}@property --duration-slow{syntax: "<time>"; inherits: true; initial-value: .3s;}:root{--hue-coral: 25;--hue-pink: 350;--hue-orange: 55;--hue-purple: 300;--hue-yellow: 95;--hue-green: 165;--hue-blue: 250;--hue-grey: 210;--color-white: oklch(100% 0 0);--color-black: oklch(0% 0 0);--color-coral: light-dark(oklch(70% .18 var(--hue-coral)), oklch(80% .14 var(--hue-coral)));--color-pink: light-dark(oklch(55% .15 var(--hue-pink)), oklch(70% .13 var(--hue-pink)));--color-orange: light-dark(oklch(78% .16 var(--hue-orange)), oklch(80% .14 var(--hue-orange)));--color-purple: light-dark(oklch(60% .14 var(--hue-purple)), oklch(72% .12 var(--hue-purple)));--color-yellow: light-dark(oklch(90% .16 var(--hue-yellow)), oklch(82% .12 var(--hue-yellow)));--color-green: light-dark(oklch(65% .12 var(--hue-green)), oklch(72% .1 var(--hue-green)));--color-blue: light-dark(oklch(62% .15 var(--hue-blue)), oklch(70% .13 var(--hue-blue)));--color-ink: oklch(28% .01 var(--hue-grey));--color-charcoal: oklch(24.35% 0 0);--color-beige: oklch(96% .02 85);--color-accent: var(--color-coral);--color-visited: var(--color-purple);--color-highlight: var(--color-yellow);--color-background: light-dark(var(--color-beige), var(--color-charcoal));--color-background-secondary: light-dark( oklch(from var(--color-beige) calc(l + .02) c h), oklch(from var(--color-charcoal) calc(l - .04) c h) );--color-text: light-dark(var(--color-ink), var(--color-beige));--color-text-secondary: light-dark( oklch(55% .01 var(--hue-grey)), oklch(75% .01 var(--hue-grey)) );--color-border: light-dark( oklch(from var(--color-black) l c h / .1), oklch(from var(--color-white) l c h / .1) );--surface-raised: light-dark(var(--color-white), oklch(16% 0 0));--font-ui: "League Spartan Variable", "Inter", "Helvetica Neue", Helvetica, Arial, sans-serif;--font-prose: "Literata", Georgia, "Times New Roman", serif;--font-code: "Fira Code Variable", "Fira Code", "Inconsolata", monospace;--space-3xs: clamp(.25rem, .2241rem + .1105vw, .3125rem);--space-2xs: clamp(.5rem, .4482rem + .221vw, .625rem);--space-xs: clamp(.75rem, .6723rem + .3315vw, .9375rem);--space-s: clamp(1rem, .8964rem + .442vw, 1.25rem);--space-m: clamp(1.5rem, 1.3446rem + .663vw, 1.875rem);--space-l: clamp(2rem, 1.7928rem + .884vw, 2.5rem);--space-xl: clamp(3rem, 2.6892rem + 1.326vw, 3.75rem);--space-2xl: clamp(4rem, 3.5856rem + 1.768vw, 5rem);--space-3xl: clamp(6rem, 5.3785rem + 2.6519vw, 7.5rem);--space-3xs-2xs: clamp(.25rem, .0946rem + .663vw, .625rem);--space-2xs-xs: clamp(.5rem, .3187rem + .7735vw, .9375rem);--space-xs-s: clamp(.75rem, .5428rem + .884vw, 1.25rem);--space-s-m: clamp(1rem, .6374rem + 1.547vw, 1.875rem);--space-m-l: clamp(1.5rem, 1.0856rem + 1.768vw, 2.5rem);--space-l-xl: clamp(2rem, 1.2749rem + 3.0939vw, 3.75rem);--space-xl-2xl: clamp(3rem, 2.1713rem + 3.5359vw, 5rem);--space-2xl-3xl: clamp(4rem, 2.5497rem + 6.1878vw, 7.5rem);--step--2: clamp(.6944rem, .6907rem + .016vw, .7035rem);--step--1: clamp(.8333rem, .7901rem + .1846vw, .9377rem);--step-0: clamp(1rem, .8964rem + .442vw, 1.25rem);--step-1: clamp(1.2rem, 1.0068rem + .8243vw, 1.6663rem);--step-2: clamp(1.44rem, 1.1163rem + 1.381vw, 2.2211rem);--step-3: clamp(1.728rem, 1.2172rem + 2.1794vw, 2.9607rem);--step-4: clamp(2.0736rem, 1.2975rem + 3.3115vw, 3.9467rem);--step-5: clamp(2.4883rem, 1.3395rem + 4.9018vw, 5.2609rem);--font-size-xs: var(--step--2);--font-size-sm: var(--step--1);--font-size-base: var(--step-0);--font-size-md: var(--step-1);--font-size-lg: var(--step-2);--font-size-xl: var(--step-3);--font-size-2xl: var(--step-4);--font-size-3xl: var(--step-5);--leading-none: .9;--leading-tight: 1.1;--leading-snug: 1.2;--leading-normal: 1.5;--leading-loose: 1.7;--tracking-tight: -.02ch;--tracking-normal: 0;--tracking-wide: .05ch;--tracking-wider: .1ch;--measure-standard: 80ch;--font-weight-light: 300;--font-weight-normal: 350;--font-weight-regular: 400;--font-weight-medium: 500;--font-weight-semibold: 600;--font-weight-bold: 700;--border-width-hairline: 1px;--border-width-base: 2px;--border-width-thick: 4px;--border-width-heavy: 6px;--border-width-accent: 1rem;--radius-xs: .125rem;--radius-sm: .25rem;--radius-md: .5rem;--radius-lg: .75rem;--radius-full: 9999px;--duration-fast: .15s;--duration-normal: .2s;--duration-slow: .3s;--ease-in-out: cubic-bezier(.4, 0, .2, 1);--shadow-small: drop-shadow(0px 1px 3px rgba(16, 24, 40, .1)) drop-shadow(0px 1px 2px rgba(16, 24, 40, .1));--shadow-medium: drop-shadow(0px 1px 3px rgba(16, 24, 40, .1)) drop-shadow(0px 4px 6px rgba(16, 24, 40, .1))}@layer reset{:where(*,*:before,*:after){box-sizing:border-box}:where(*){margin-block:0}:where(:focus-visible){outline:2px solid var(--color-blue);outline-offset:5px;border-radius:1px}@media(prefers-reduced-motion:no-preference){:where(html){interpolate-size:allow-keywords}}:where(html){-moz-text-size-adjust:none;-webkit-text-size-adjust:none;text-size-adjust:none;scrollbar-gutter:stable}:where(body){line-height:1.5;-webkit-font-smoothing:antialiased;min-height:100vh;position:relative;padding:0;margin:0}:where(img,picture,video,canvas,svg){display:block;max-width:100%}:where(img,picture){height:auto}:where(img){border:0}:where(input,button,textarea,select){font:inherit}:where(button,input,label){line-height:1.1}:where(textarea){field-sizing:content}:where(fieldset){min-inline-size:0}:where([type=search]){-webkit-appearance:textfield;appearance:textfield}:where(input:is([type=tel],[type=url],[type=email],[type=number]):not(:placeholder-shown)){direction:ltr}:where(iframe){border:0;overflow:hidden}:where(p,h1,h2,h3,h4,h5,h6){overflow-wrap:break-word}:where(h1,h2,h3,h4,h5,h6){text-wrap:balance}:where(p,blockquote){text-wrap:pretty}:where(:target){scroll-margin-block:5ex}:where(pre){white-space:pre-wrap}:where([hidden]:not([hidden=until-found])){display:none!important}:where(ul[role=list],ol[role=list]){list-style:none}:where(abbr){font-variant:all-small-caps;text-decoration:underline;text-decoration-style:dashed;text-decoration-color:color-mix(in srgb,currentColor,transparent 50%);text-decoration-thickness:max(.08em,1px);text-underline-offset:.2em;text-decoration-skip-ink:none}:where(abbr[title]){cursor:help}:where(sup,sub){font-size:.7em;line-height:1}:where(del){text-decoration:line-through;text-decoration-color:color-mix(in srgb,currentColor,transparent 50%);text-decoration-thickness:1px;text-underline-offset:.2em}@media(forced-colors:active){:where(mark){color:HighlightText;background-color:Highlight}}@media(prefers-reduced-motion:no-preference){html:focus-within{scroll-behavior:smooth}}@media(prefers-reduced-motion:reduce){*{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}}@layer base{html{color-scheme:light dark;accent-color:var(--color-accent);color:var(--color-text);scroll-behavior:smooth}body{background-color:var(--color-background)}mark{background-color:var(--color-highlight);border-radius:.05em}table{border-collapse:collapse;width:100%;margin:2em 0;font-size:1em;background-color:var(--color-background-secondary);caption-side:bottom}th,td{border:1px solid var(--color-border);padding:.2em .5em;text-align:left;vertical-align:baseline}th{font-weight:600;text-transform:uppercase;background-color:var(--color-background-secondary);border-bottom-width:2px}summary{cursor:default}button,input[type=button],input[type=submit],input[type=reset]{display:inline-flex;align-items:center;justify-content:center;gap:.5cap;font-family:var(--font-ui);font-weight:var(--font-weight-medium);line-height:1;cursor:pointer;border:var(--border-width-hairline) solid var(--color-border);border-radius:var(--radius-sm);padding:.4em .75em;background-color:var(--color-background-secondary);color:inherit;text-box:trim-both cap alphabetic;svg{width:1.25cap;height:1.25cap;flex-shrink:0}}}@layer typography{html{font-variant-ligatures:common-ligatures;hanging-punctuation:first allow-end last}body{font-family:var(--font-prose);font-size:var(--font-size-base);font-weight:var(--font-weight-normal);line-height:var(--leading-normal)}h1,h2,h3,h4,h5,h6{font-weight:var(--font-weight-semibold);line-height:var(--leading-snug);margin-top:1.5em;border-bottom:var(--border-width-hairline) solid var(--color-border);padding-bottom:.3em}h1{font-size:var(--font-size-xl)}h2{font-size:var(--font-size-lg)}h3{font-size:var(--font-size-md)}h4,h5,h6{font-size:var(--font-size-base)}a{color:var(--color-accent);text-decoration:underline;text-decoration-thickness:max(.08em,1px);text-underline-offset:.2em;text-decoration-skip-ink:auto;transition:color var(--duration-fast) var(--ease-in-out),text-decoration-color var(--duration-fast) var(--ease-in-out)}a:visited{color:var(--color-visited)}a:hover,a:focus{color:var(--color-accent)}a:not(:is(:hover,:focus)){text-decoration-color:color-mix(in srgb,currentColor,transparent 60%)}ul,ol{padding-left:var(--space-m)}li{padding-left:var(--space-xs);margin-top:var(--space-xs)}li:first-child{margin-top:0}li>ul,li>ol{margin-top:var(--space-xs)}li::marker{color:var(--color-accent)}ul{list-style-type:"•"}blockquote{border-left:var(--border-width-thick) solid var(--color-accent);padding-left:var(--space-m);font-style:italic;margin-left:0}blockquote figcaption{margin-top:var(--space-2xs);text-align:right;padding-left:var(--space-m)}blockquote cite{font-family:var(--font-ui);font-size:var(--font-size-sm);font-style:normal;color:var(--color-text-secondary)}:where(p,ul,ol,blockquote,pre,figure,table){margin-top:1.25em}:where(p,ul,ol,blockquote,pre,figure,table):first-child{margin-top:0}:not(pre)>code{font-family:var(--font-code);font-size:var(--font-size-sm);font-variant-numeric:normal;background-color:var(--color-background-secondary);border:var(--border-width-hairline) solid var(--color-border);padding:.1em .4em;border-radius:var(--radius-sm)}strong{font-weight:var(--font-weight-bold)}kbd{font-family:var(--font-ui);font-size:.875em;font-weight:var(--font-weight-medium);font-variant-numeric:normal;padding:.1em .4em;background-color:var(--color-background-secondary);border:var(--border-width-hairline) solid var(--color-border);border-radius:var(--radius-sm);box-shadow:inset 0 -1px 0 var(--color-border);white-space:nowrap}}@layer layout{.flow>*+*{margin-top:var(--space-m)}.flow>*+:is(h1,h2){margin-top:var(--space-xl)}.flow>*+h3{margin-top:var(--space-l)}.list-reset{list-style:none;margin:0;padding:0;gap:var(--space-xs);& li{padding-left:0;margin-top:0}}.all-caps{text-transform:uppercase;letter-spacing:var(--tracking-wide)}}@layer utilities{.ui-style{font-family:var(--font-ui);font-weight:var(--font-weight-normal);line-height:var(--leading-snug);& a{text-decoration:none;color:inherit;transition:color var(--duration-fast) ease-in-out}& a:visited{color:inherit}& a:hover,a:focus{color:var(--color-accent)}:is(h1,h2,h3,h4,h5,h6){border-bottom:none;padding-bottom:0;margin-top:0}& li::marker{color:inherit}:where(p,ul,ol,blockquote){margin-top:var(--space-m)}}.dark-surface{background-color:var(--color-charcoal);color:var(--color-beige)}.cq{container-type:inline-size}.card-surface{background-color:var(--surface-raised);border:var(--border-width-hairline) solid var(--color-border);border-radius:var(--radius-sm);filter:var(--shadow-small)}.img-cover{width:100%;height:100%;object-fit:cover}.content-trim{>:first-child{margin-top:0}>:last-child{margin-bottom:0}}.external-arrow{font-family:system-ui,-apple-system,sans-serif;font-size:.7em;vertical-align:.1em;opacity:.5;font-weight:600;margin-left:.18em}.sr-only,.hidden-microformat{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}}svg[id^=mermaid-]{display:block;margin:var(--space-l) auto;padding:var(--space-m);border-radius:var(--radius-sm);max-width:100%;height:auto;background-color:light-dark(var(--color-background-secondary),#ffffff)}::view-transition-group(.note-card){animation-duration:.35s;animation-timing-function:ease-in-out}::view-transition-group(site-footer){animation-duration:.25s;animation-timing-function:ease-in-out}@property --_thumb-bg{syntax: "<color>"; inherits: false; initial-value: transparent;}.theme-toggle[data-astro-cid-zs7jgplt]{--_size: var(--theme-toggle-thumb-size, clamp(1.75rem, 4vw, 2.25rem));--_pad: var(--theme-toggle-padding, var(--space-3xs));--_gap: var(--theme-toggle-gap, var(--space-3xs));--_pos: 1;display:inline-grid;grid-template-columns:repeat(3,var(--_size));gap:var(--_gap);padding:var(--_pad);position:relative;border-radius:var(--radius-full);border:var(--border-width-hairline) solid color-mix(in oklch,var(--color-text) 12%,transparent);background:color-mix(in oklch,var(--color-background) 80%,var(--color-background-secondary));&[data-astro-cid-zs7jgplt]:before{content:"";position:absolute;inset-block:var(--_pad);width:var(--_size);border-radius:var(--radius-full);pointer-events:none;translate:calc(var(--_pad) + (var(--_size) + var(--_gap)) * var(--_pos)) 0;background:var(--_thumb-bg, color-mix(in oklch, var(--color-text) 10%, var(--color-background-secondary)));transition:translate var(--duration-fast) var(--ease-in-out)}&[data-astro-cid-zs7jgplt]:has([data-theme-option=light][aria-checked=true]){--_pos: 0;--_thumb-bg: color-mix(in oklch, var(--color-accent) 45%, var(--color-background))}&[data-astro-cid-zs7jgplt]:has([data-theme-option=dark][aria-checked=true]){--_pos: 2;--_thumb-bg: color-mix(in oklch, var(--color-accent) 25%, var(--color-background))}& button[data-astro-cid-zs7jgplt]{display:grid;place-items:center;aspect-ratio:1;padding:0;border:0;border-radius:var(--radius-full);background:transparent;color:color-mix(in oklch,var(--color-text) 40%,transparent);cursor:pointer;z-index:1;transition:color var(--duration-fast) var(--ease-in-out);&[aria-checked=true]{color:var(--color-text)}&[data-astro-cid-zs7jgplt]:hover{color:color-mix(in oklch,var(--color-text) 70%,transparent)}&[data-astro-cid-zs7jgplt]:focus-visible{outline:var(--border-width-base) solid color-mix(in oklch,var(--color-accent) 65%,transparent);outline-offset:2px}}& svg[data-astro-cid-zs7jgplt]{width:1.25em;height:1.25em}@media(prefers-reduced-motion:reduce){&[data-astro-cid-zs7jgplt]:before{transition:none}}}.nav-open[data-astro-cid-gd57ff7c]{position:absolute;top:var(--space-s);left:var(--space-s);aspect-ratio:1;padding:var(--space-2xs);z-index:1000;background:oklch(from var(--color-background-secondary) l c h / .8);color:var(--color-accent);border:none}.main-navigation[data-astro-cid-gd57ff7c]{position:fixed;left:-100%;min-width:18rem;min-height:100vh;z-index:1000;border-right:var(--border-width-accent) solid var(--color-accent);padding:var(--space-s);transition:left var(--duration-normal) var(--ease-in-out)}.main-navigation[data-astro-cid-gd57ff7c].open{left:0}.nav-close[data-astro-cid-gd57ff7c]{position:absolute;top:var(--space-2xs);right:var(--space-2xs);padding:var(--space-3xs);background:transparent;border:none}.nav-links[data-astro-cid-gd57ff7c]{margin-block:var(--space-m);padding-left:calc(var(--space-s) * 2);li{margin-top:var(--space-2xs)}a.active{color:var(--color-accent)}}.theme-toggle-wrapper[data-astro-cid-gd57ff7c]{display:flex;justify-content:center}
