.astro-route-announcer{position:absolute;left:0;top:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap;width:1px;height:1px}footer[data-astro-cid-ak3upacl]{background:var(--bg-surface)}.icon{display:inline-flex}.icon-sm svg{width:16px;height:16px}.icon-md svg{width:24px;height:24px}.btn-theme-toggle[data-astro-cid-zrysfokl] .sun[data-astro-cid-zrysfokl]{display:none}.btn-theme-toggle[data-astro-cid-zrysfokl] .moon[data-astro-cid-zrysfokl]{display:inline-flex}:root[data-theme=dark] .btn-theme-toggle[data-astro-cid-zrysfokl] .sun[data-astro-cid-zrysfokl]{display:inline-flex}:root[data-theme=dark] .btn-theme-toggle[data-astro-cid-zrysfokl] .moon[data-astro-cid-zrysfokl]{display:none}.scroll-to-top[data-astro-cid-m4uxnspl]{position:fixed;bottom:1.125rem;right:max(50% - var(--container) / 2 + 1rem,1rem);z-index:50;box-shadow:var(--shadow-lg)}.hidden[data-astro-cid-m4uxnspl]{display:none}@layer reset,base,components,utilities;@font-face{font-family:Inter;src:url(/fonts/Inter-Regular.woff2) format("truetype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Inter;src:url(/fonts/Inter-Bold.woff2) format("truetype");font-weight:700;font-style:normal;font-display:swap}@keyframes fadeInUp{to{opacity:1;transform:translateY(0)}}@layer reset{*,:after,:before{margin:0;padding:0;box-sizing:border-box}html{font-family:system-ui,Segoe UI,Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";line-height:1.15;-webkit-text-size-adjust:100%;tab-size:4}body{margin:0}b,strong{font-weight:bolder}code,pre{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;font-size:1em}small{font-size:80%}button,input{font-family:inherit;font-size:100%;line-height:1.15;margin:0}[type=button],[type=submit],button{-webkit-appearance:button;appearance:button}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}ul{padding-left:1rem}@media(prefers-reduced-motion:reduce){:root{--transition-duration: 0ms}}}@layer base{:root{--primary: #8f5ef1;--primary-hover: #5829b5;--primary-active: #3d1b83;--primary-rgb: 143, 94, 241;--on-primary: #ffffff;--secondary: #595959;--secondary-hover: #4d4d4d;--secondary-active: #414141;--secondary-rgb: 89, 89, 89;--on-secondary: #ffffff;--success: #16a085;--success-hover: #138f77;--success-active: #0f7e69;--success-rgb: 22, 160, 133;--on-success: #ffffff;--warning: #ffc557;--warning-hover: #f0b84f;--warning-active: #e0a843;--warning-rgb: 255, 197, 87;--on-warning: #000000;--error: #eb4242;--error-hover: #d73a3a;--error-active: #c73232;--error-rgb: 235, 66, 66;--on-error: #ffffff;--white: #ffffff;--white-hover: #f2f2f2;--white-active: #e6e6e6;--white-rgb: 255, 255, 255;--on-white: #000000;--black: #000000;--black-hover: #1a1a1a;--black-active: #333333;--black-rgb: 0, 0, 0;--on-black: #ffffff;--gray-50: hsl(0, 0%, 95%);--gray-50-rgb: 242.25, 242.25, 242.25;--gray-100: hsl(0, 0%, 90%);--gray-100-rgb: 229.5, 229.5, 229.5;--gray-150: hsl(0, 0%, 85%);--gray-150-rgb: 216.75, 216.75, 216.75;--gray-200: hsl(0, 0%, 80%);--gray-200-rgb: 204, 204, 204;--gray-250: hsl(0, 0%, 75%);--gray-250-rgb: 191.25, 191.25, 191.25;--gray-300: hsl(0, 0%, 70%);--gray-300-rgb: 178.5, 178.5, 178.5;--gray-350: hsl(0, 0%, 65%);--gray-350-rgb: 165.75, 165.75, 165.75;--gray-400: hsl(0, 0%, 60%);--gray-400-rgb: 153, 153, 153;--gray-450: hsl(0, 0%, 55%);--gray-450-rgb: 140.25, 140.25, 140.25;--gray-500: hsl(0, 0%, 50%);--gray-500-rgb: 127.5, 127.5, 127.5;--gray-550: hsl(0, 0%, 45%);--gray-550-rgb: 114.75, 114.75, 114.75;--gray-600: hsl(0, 0%, 40%);--gray-600-rgb: 102, 102, 102;--gray-650: hsl(0, 0%, 35%);--gray-650-rgb: 89.25, 89.25, 89.25;--gray-700: hsl(0, 0%, 30%);--gray-700-rgb: 76.5, 76.5, 76.5;--gray-750: hsl(0, 0%, 25%);--gray-750-rgb: 63.75, 63.75, 63.75;--gray-800: hsl(0, 0%, 20%);--gray-800-rgb: 51, 51, 51;--gray-850: hsl(0, 0%, 15%);--gray-850-rgb: 38.25, 38.25, 38.25;--gray-900: hsl(0, 0%, 10%);--gray-900-rgb: 25.5, 25.5, 25.5;--gray-950: hsl(0, 0%, 5%);--gray-950-rgb: 12.75, 12.75, 12.75;--spacer-0: 0;--spacer-1: .25rem;--spacer-2: .5rem;--spacer-3: 1rem;--spacer-4: 1.5rem;--spacer-5: 3rem;--line-height: 1.8;--font-size: 16px;--font-weight: 400;--font-family: "Inter", sans-serif;--body-bg-color: #fdfdfd;--bg-surface: var(--white);--bg-surface-hover: var(--gray-50);--bg-surface-active: var(--gray-100);--text-color: var(--gray-950);--text-color-inverse: var(--gray-50);--text-color-muted: var(--gray-550);--text-color-subtle: var(--gray-400);--highlight: rgba(0, 0, 0, .15);--border-width: 1px;--border-color: var(--gray-100);--border-radius-sm: .25rem;--border-radius: .5rem;--border-radius-lg: .75rem;--disabled-text-color: var(--gray-600);--disabled-bg-color: var(--gray-300);--disabled-border-color: var(--gray-50);--shadow-sm: 0 .125rem .25rem rgba(0, 0, 0, .075);--shadow: 0 .25rem 1rem rgba(0, 0, 0, .15);--shadow-lg: 0 1rem 2rem rgba(0, 0, 0, .175);--focus-outline-color: rgba(var(--primary-rgb), .5);--focus-outline-style: solid;--focus-outline-width: 2.5px;--focus-outline-error: var(--focus-outline-width) var(--focus-outline-style) rgba(var(--error-rgb), .5);--focus-offset: 0px;--container: 900px;--transition-duration: .2s;--transition-easing: ease-out;--bg-opacity: 1}}@layer base{:root{--h1: 500 2.25rem var(--font-family);--h2: 500 2rem var(--font-family);--h3: 500 1.45rem var(--font-family);--h4: 500 1.35rem var(--font-family);--h5: 500 1.25rem var(--font-family);--h6: 500 1rem var(--font-family);--font-size-xs: .75rem;--font-size-sm: .875rem;--font-size-md: 1rem;--font-size-lg: 1.125rem;--font-size-xl: 1.25rem;--font-size-xxl: 1.5rem;--font-size-xxxl: 2rem}small{font-size:.833rem}h1,.h1,h2,.h2,h3,.h3,h4,.h4,h5,.h5,h6,.h6{margin:0;margin-bottom:.5rem}h1,.h1{font:var(--h1);letter-spacing:-1px;line-height:1.2}h2,.h2{font:var(--h2);line-height:1.25}h3,.h3{font:var(--h3);line-height:1.3}h4,.h4{font:var(--h4);line-height:1.35}h5,.h5{font:var(--h5);line-height:1.4}h6,.h6{font:var(--h6);line-height:1.45}a{--link-text-color: var(--primary);--link-focus-outline-width: var(--focus-outline-width);--link-focus-outline-style: var(--focus-outline-style);--link-focus-outline-color: var(--focus-outline-color);--link-transition-duration: var(--transition-duration, .18s);--link-transition-easing: var(--transition-easing, ease-out);color:var(--link-text-color);fill:var(--link-text-color);text-decoration:none;transition:color var(--link-transition-duration) var(--link-transition-easing),background-color var(--link-transition-duration) var(--link-transition-easing),box-shadow var(--link-transition-duration) var(--link-transition-easing),border-color var(--link-transition-duration) var(--link-transition-easing),outline-offset var(--link-transition-duration) var(--link-transition-easing)}a:hover{text-decoration:underline}a:focus{outline:var(--link-focus-outline-width) var(--link-focus-outline-style) var(--link-focus-outline-color);outline-offset:var(--focus-offset)}p{--paragraph-margin: 0 0 .5rem 0;margin:var(--paragraph-margin)}}@layer base{.text-center{text-align:center}.text-body{color:var(--text-color)}.text-muted{color:var(--text-color-muted)}.text-subtle{color:var(--text-color-subtle)}.text-primary{color:var(--primary);fill:var(--primary)}.text-xxl{font-size:var(--font-size-xxl)}}@layer utilities{.position-fixed{position:fixed}.container{max-width:var(--container);margin-left:auto;margin-right:auto;padding-left:var(--spacer-3);padding-right:var(--spacer-3);width:100%}.rounded-circle{border-radius:50%}.shadow-sm{box-shadow:var(--shadow-sm)}.w-100{width:100%}.w-50{width:50%}.top-0{top:0}.left-0{left:0}.d-inline-block{display:inline-block}.hidden{visibility:hidden}}@layer utilities{.ms-auto{margin-left:auto}.p-2{padding:.5rem}.p-3{padding:1rem}.mt-0{margin-top:0}.mb-0{margin-bottom:0}.mt-1{margin-top:.25rem}.mb-1{margin-bottom:.25rem}.mt-2{margin-top:.5rem}.me-2{margin-right:.5rem}.mb-2{margin-bottom:.5rem}.ms-2{margin-left:.5rem}.mt-3{margin-top:1rem}.pt-3{padding-top:1rem}.mb-3{margin-bottom:1rem}.pb-3{padding-bottom:1rem}.mt-4{margin-top:1.5rem}.pt-4{padding-top:1.5rem}.pb-4{padding-bottom:1.5rem}.mt-5{margin-top:3rem}.pt-5{padding-top:3rem}.pb-5{padding-bottom:3rem}}@layer utilities{@media(min-width:768px){.mt-md-0{margin-top:0}.mb-md-5{margin-bottom:3rem}}@media(min-width:992px){.mt-lg-4{margin-top:1.5rem}}}@layer utilities{.d-flex{display:flex}.d-inline-flex{display:inline-flex}.flex-column{flex-direction:column}.justify-content-center{justify-content:center}.justify-content-between{justify-content:space-between}.align-items-center{align-items:center}.flex-grow-1{flex-grow:1}.flex-shrink-0{flex-shrink:0}}@layer utilities{}@layer utilities{.grid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));column-gap:1rem;row-gap:1rem}.col-12{grid-column:span 12}}@layer utilities{@media(min-width:576px){.col-sm-6{grid-column:span 6}}@media(min-width:768px){.col-md-4{grid-column:span 4}.col-md-8{grid-column:span 8}}}@layer utilities{.gap-1{gap:.25rem}.gap-2{gap:.5rem}.gap-3{gap:1rem}}@layer utilities{}@layer utilities{.border{border:var(--border-width) solid var(--border-color)}.border-t{border-top:var(--border-width) solid var(--border-color)}.border-b{border-bottom:var(--border-width) solid var(--border-color)}}@layer components{.btn{--button-border-width: var(--border-width);--button-border-radius: var(--border-radius);--button-focus-outline-width: var(--focus-outline-width);--button-focus-outline-style: var(--focus-outline-style);--button-focus-outline-color: var(--focus-outline-color);--button-font-size: var(--font-size);--button-padding-y: .25rem;--button-padding-x: 1rem;--button-disabled-text-color: var(--disabled-text-color);--button-disabled-bg-color: var(--disabled-bg-color);--button-disabled-border-color: var(--disabled-border-color);--button-transition-duration: var(--transition-duration, .2s);font-size:var(--button-font-size);display:inline-flex;align-items:center;justify-content:center;gap:var(--spacer-2);border-width:var(--button-border-width);border-style:solid;border-color:transparent;background-color:transparent;color:var(--text-color);fill:currentColor;transition:color var(--button-transition-duration) ease,background-color var(--button-transition-duration) ease,box-shadow var(--button-transition-duration) ease,border-color var(--button-transition-duration) ease;-webkit-tap-highlight-color:transparent;touch-action:manipulation;border-radius:var(--button-border-radius);line-height:var(--line-height);padding:var(--button-padding-y) var(--button-padding-x)}.btn:hover{cursor:pointer;text-decoration:none}.btn:focus-visible{outline:var(--button-focus-outline-width) var(--button-focus-outline-style) var(--button-focus-outline-color);outline-offset:var(--focus-offset)}.btn:disabled{cursor:not-allowed;pointer-events:none;box-shadow:none;outline:0;color:var(--button-disabled-text-color);background-color:var(--button-disabled-bg-color);border-color:var(--button-disabled-border-color)}.btn-primary{--button-color: var(--primary);--button-color-hover: var(--primary-hover);--button-color-active: var(--primary-active);--button-color-rgb: var(--primary-rgb);--button-on-color: var(--on-primary)}.btn-sm{--button-padding-y: .2rem;--button-padding-x: .75rem;--button-font-size: .875rem}}@layer components{.card{--card-header-padding: var(--spacer-3) var(--spacer-3) 0 var(--spacer-3);--card-header-border-bottom: 0;--card-body-padding: var(--spacer-3);--card-bg-color: var(--bg-surface);--card-border-width: var(--border-width);--card-border-color: var(--border-color);--card-border-radius: var(--border-radius);--card-bg-hover-color: var(--bg-surface-hover);--card-title-spacer-y: var(--spacer-2);--card-subtitle-color: var(--text-color-muted);--card-transition-duration: var(--transition-duration, .2s);background-color:var(--card-bg-color);border:var(--card-border-width) solid var(--card-border-color);border-radius:var(--card-border-radius);transition:color var(--card-transition-duration) ease,background-color var(--card-transition-duration) ease,box-shadow var(--card-transition-duration) ease,border-color var(--card-transition-duration) ease}.card.action:hover{background-color:var(--card-bg-hover-color)}.card .card-title{margin-bottom:var(--card-title-spacer-y)}.card .card-body{padding:var(--card-body-padding)}}@layer components{.chip{--chip-label-font-size: .9rem;--chip-label-padding: 0 7px;--chip-border-radius: 16px;--chip-border-width: var(--border-width);--chip-highlight: var(--highlight);--chip-transition-duration: var(--transition-duration, .2s);display:inline-flex;border-width:var(--chip-border-width);border-style:solid;background-color:transparent;border-color:transparent;color:var(--text-color);font-size:var(--chip-label-font-size);transition:color var(--chip-transition-duration) ease,background-color var(--chip-transition-duration) ease,box-shadow var(--chip-transition-duration) ease,border-color var(--chip-transition-duration) ease;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.chip:hover{cursor:pointer;text-decoration:none}.chip{border-radius:var(--chip-border-radius);line-height:var(--line-height)}.chip:hover{background-color:var(--chip-highlight);border-color:var(--chip-highlight)}.chip .chip-label{display:inline-flex;flex-shrink:0;padding:var(--chip-label-padding);margin:0}.chip .chip-label>*{margin:0;padding:0}.chip-secondary-outline{color:var(--secondary);background-color:transparent;border-color:var(--secondary)}.chip-secondary-outline:hover,.chip-secondary-outline:active{color:var(--on-secondary);background-color:var(--secondary-hover);border-color:var(--secondary-hover)}}@layer components{.form-control{--input-bg-color: var(--bg-surface);--input-border-width: var(--border-width);--input-border-color: var(--border-color);--form-control-disabled-text-color: var(--disabled-text-color);--form-control-disabled-bg-color: var(--disabled-bg-color);--form-control-disabled-border-color: var(--disabled-border-color);--form-control-focus-outline-width: var(--focus-outline-width);--form-control-focus-outline-style: var(--focus-outline-style);--form-control-focus-outline-color: var(--focus-outline-color);--form-control-transition-duration: var(--transition-duration, .18s);--form-control-transition-easing: var(--transition-easing, ease-out);display:block;width:100%;max-width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:var(--line-height);-webkit-appearance:none;-moz-appearance:none;appearance:none;color:var(--text-color);background-color:var(--input-bg-color);background-clip:padding-box;border:var(--input-border-width) solid var(--input-border-color);border-radius:var(--border-radius);transition:color var(--form-control-transition-duration) var(--form-control-transition-easing),background-color var(--form-control-transition-duration) var(--form-control-transition-easing),box-shadow var(--form-control-transition-duration) var(--form-control-transition-easing),border-color var(--form-control-transition-duration) var(--form-control-transition-easing),outline-offset var(--form-control-transition-duration) var(--form-control-transition-easing)}.form-control:focus{background-color:var(--input-bg-color);border-color:var(--primary-hover);outline:var(--form-control-focus-outline-width) var(--form-control-focus-outline-style) var(--form-control-focus-outline-color);outline-offset:var(--focus-offset)}.form-control:disabled{opacity:1;cursor:not-allowed;pointer-events:none;box-shadow:none;outline:0;color:var(--form-control-disabled-text-color);background-color:var(--form-control-disabled-bg-color);border-color:var(--form-control-disabled-border-color)}.form-control::placeholder{color:var(--gray-500)}}@layer components{.icon-btn{--icon-button-border-width: var(--border-width);--icon-button-padding: .25rem;--icon-button-width: 40px;--icon-button-min-width: 40px;--icon-button-height: 40px;--icon-button-border-radius: 100%;--icon-button-focus-outline-width: var(--focus-outline-width);--icon-button-focus-outline-style: var(--focus-outline-style);--icon-button-focus-outline-color: var(--focus-outline-color);--icon-button-svg-width: 18px;--icon-button-svg-height: 18px;--icon-button-transition-duration: var(--transition-duration, .2s);padding:var(--icon-button-padding);min-width:var(--icon-button-min-width);width:var(--icon-button-width);height:var(--icon-button-height);border-radius:var(--icon-button-border-radius);display:inline-flex;align-items:center;justify-content:center;border-width:var(--icon-button-border-width, var(--border-width));border-style:solid;background-color:transparent;border-color:transparent;fill:var(--text-color);color:var(--text-color);transition:color var(--icon-button-transition-duration) ease,background-color var(--icon-button-transition-duration) ease,box-shadow var(--icon-button-transition-duration) ease,border-color var(--icon-button-transition-duration) ease;-webkit-tap-highlight-color:transparent;touch-action:manipulation}.icon-btn svg{max-width:var(--icon-button-svg-width);max-height:var(--icon-button-svg-width);overflow:visible}.icon-btn:hover{cursor:pointer;text-decoration:none;background-color:var(--icon-button-highlight, var(--highlight))}.icon-btn:disabled{color:var(--gray-800);fill:var(--gray-800);cursor:not-allowed;outline:0;background-color:var(--icon-button-disabled-bg-color, var(--disabled-bg-color))}.icon-btn:focus-visible{outline:var(--icon-button-focus-outline-width) var(--icon-button-focus-outline-style) var(--icon-button-focus-outline-color);outline-offset:var(--focus-offset);background-color:var(--icon-button-highlight, var(--highlight))}.icon-btn-md{min-width:40px;width:40px;height:40px}.icon-btn-md svg{max-width:20px;max-height:20px}.icon-btn-primary-contained{color:var(--on-primary);fill:var(--on-primary);background-color:var(--primary)}.icon-btn-primary-contained:hover,.icon-btn-primary-contained:active,.icon-btn-primary-contained:focus-visible{outline:var(--icon-button-focus-outline-width) var(--icon-button-focus-outline-style) var(--primary-hover);background-color:var(--primary-hover)}.icon-btn-primary-contained:disabled{color:var(--primary-hover);fill:var(--primary-hover);cursor:not-allowed;box-shadow:none;background-color:var(--icon-button-disabled-bg-color, var(--disabled-bg-color));outline:0}}@layer components{.navbar{--navbar-bg-color: var(--bg-surface);--navbar-text-color: var(--text-color);color:var(--navbar-text-color);padding-top:.6rem;padding-bottom:.6rem;background-color:var(--navbar-bg-color);min-height:60px;display:flex;align-items:center}.navbar a{--link-text-color: var(--navbar-text-color)}}.astro-code{font-size:.9rem;border-radius:var(--border-radius)!important;border:1px solid var(--border-color);margin:1rem 0!important;padding:1rem;background-color:var(--bg-surface)!important}.astro-code:focus{outline:var(--focus-outline);outline-offset:var(--focus-offset)}:root[data-theme=dark] .astro-code,:root[data-theme=dark] .astro-code span{color:var(--shiki-dark)!important;font-style:var(--shiki-dark-font-style)!important;font-weight:var(--shiki-dark-font-weight)!important;text-decoration:var(--shiki-dark-text-decoration)!important}:root{--container: 1100px;--line-height: 1.85}html{scroll-behavior:smooth;-webkit-text-size-adjust:100%;scroll-padding-top:6rem}html,body{line-height:var(--line-height);height:100%}body{font-family:var(--font-family);color:var(--text-color);background-color:var(--body-bg-color);font-size:var(--font-size);font-weight:var(--font-weight);padding-top:64px}.grid-layout{display:grid;grid-template-rows:1fr auto;min-height:100vh}.post-content{min-height:0}.post-content h2,.post-content h3,.post-content h4,.post-content h5,.post-content h6{margin-bottom:1rem}.post-content h2:not(:first-child),.post-content h3:not(:first-child),.post-content h4:not(:first-child),.post-content h5:not(:first-child),.post-content h6:not(:first-child){margin-top:2rem}.link-list{list-style:none;margin:0;padding:0}.link-list li,menu,ul{margin-bottom:.5rem}.text-body{color:var(--text-color);fill:var(--text-color)}:root[data-theme=dark]{--body-bg-color: var(--gray-800);--bg-surface: var(--gray-750);--text-color: var(--gray-50);--text-color-inverse: var(--gray-900);--text-color-muted: var(--gray-350);--highlight: rgba(255, 255, 255, .1);--border-color: var(--gray-700);--disabled-font-color: var(--gray-700);--disabled-bg-color: var(--gray-450);--disabled-border-color: var(--gray-550);--bg-surface-hover: var(--gray-700)}.hero{padding:5rem 0}
