:root{--accent: rgb(8 126 164);--accent-darker: rgb(2, 96, 126);--accent-dark: rgb(2, 57, 73);--acc: 2, 57, 73;--black: 15, 18, 25;--gray: 96, 115, 159;--gray-light: 229, 233, 240;--gray-dark: 34, 41, 57;--gray-gradient: rgba(var(--gray-light), 50%), #fff;--box-shadow: 0 1px 2px rgba(var(--acc), 7%), 0 2px 8px rgba(var(--acc), 20%), 0 4px 12px rgba(var(--acc), 20%)}@font-face{font-family:Source Code Pro;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/Source-Code-Pro-Regular.woff2) format("woff2")}@font-face{font-family:Optimistic Display;src:url(/fonts/Optimistic_Display_W_Md.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Optimistic Display;src:url(/fonts/Optimistic_Display_W_MdIt.woff2) format("woff2");font-weight:500;font-style:italic;font-display:swap}@font-face{font-family:Optimistic Display;src:url(/fonts/Optimistic_Display_W_SBd.woff2) format("woff2");font-weight:600;font-style:normal;font-display:swap}@font-face{font-family:Optimistic Display;src:url(/fonts/Optimistic_Display_W_SBdIt.woff2) format("woff2");font-weight:600;font-style:italic;font-display:swap}@font-face{font-family:Optimistic Display;src:url(/fonts/Optimistic_Display_W_Bd.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Optimistic Display;src:url(/fonts/Optimistic_Display_W_BdIt.woff2) format("woff2");font-weight:700;font-style:italic;font-display:swap}@font-face{font-family:Optimistic Text;src:url(/fonts/Optimistic_Text_W_Rg.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Optimistic Text;src:url(/fonts/Optimistic_Text_W_It.woff2) format("woff2");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:Optimistic Text;src:url(/fonts/Optimistic_Text_W_Md.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Optimistic Text;src:url(/fonts/Optimistic_Text_W_MdIt.woff2) format("woff2");font-weight:500;font-style:italic;font-display:swap}@font-face{font-family:Optimistic Text;src:url(/fonts/Optimistic_Text_W_Bd.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap}@font-face{font-family:Optimistic Text;src:url(/fonts/Optimistic_Text_W_BdIt.woff2) format("woff2");font-weight:700;font-style:italic;font-display:swap}@font-face{font-family:Optimistic Display;src:url(/fonts/Optimistic_Display_Arbc_W_Md.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap;unicode-range:U+06??}@font-face{font-family:Optimistic Display;src:url(/fonts/Optimistic_Display_Arbc_W_SBd.woff2) format("woff2");font-weight:600;font-style:normal;font-display:swap;unicode-range:U+06??}@font-face{font-family:Optimistic Display;src:url(/fonts/Optimistic_Display_Arbc_W_Bd.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap;unicode-range:U+06??}@font-face{font-family:Optimistic Text;src:url(/fonts/Optimistic_Text_Arbc_W_Rg.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap;unicode-range:U+06??}@font-face{font-family:Optimistic Text;src:url(/fonts/Optimistic_Text_Arbc_W_Md.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap;unicode-range:U+06??}@font-face{font-family:Optimistic Text;src:url(/fonts/Optimistic_Text_Arbc_W_Bd.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap;unicode-range:U+06??}@font-face{font-family:Optimistic Display;src:url(/fonts/Optimistic_Display_Cyrl_W_Md.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap;unicode-range:U+0400-045f,U+2116}@font-face{font-family:Optimistic Display;src:url(/fonts/Optimistic_Display_Cyrl_W_SBd.woff2) format("woff2");font-weight:600;font-style:normal;font-display:swap;unicode-range:U+0400-045f,U+2116}@font-face{font-family:Optimistic Display;src:url(/fonts/Optimistic_Display_Cyrl_W_Bd.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap;unicode-range:U+0400-045f,U+2116}@font-face{font-family:Optimistic Text;src:url(/fonts/Optimistic_Text_Cyrl_W_Rg.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap;unicode-range:U+0400-045f,U+2116}@font-face{font-family:Optimistic Text;src:url(/fonts/Optimistic_Text_Cyrl_W_Md.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap;unicode-range:U+0400-045f,U+2116}@font-face{font-family:Optimistic Text;src:url(/fonts/Optimistic_Text_Cyrl_W_Bd.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap;unicode-range:U+0400-045f,U+2116}@font-face{font-family:Optimistic Display;src:url(/fonts/Optimistic_Display_Deva_W_Md.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap;unicode-range:U+0900-097f,U+1cd0-1cf6,U+1cf8-1cf9,U+200c-200d,U+20a8,U+20b9,U+25cc,U+a830-a839,U+a8e0-a8fb}@font-face{font-family:Optimistic Display;src:url(/fonts/Optimistic_Display_Deva_W_SBd.woff2) format("woff2");font-weight:600;font-style:normal;font-display:swap;unicode-range:U+0900-097f,U+1cd0-1cf6,U+1cf8-1cf9,U+200c-200d,U+20a8,U+20b9,U+25cc,U+a830-a839,U+a8e0-a8fb}@font-face{font-family:Optimistic Display;src:url(/fonts/Optimistic_Display_Deva_W_Bd.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap;unicode-range:U+0900-097f,U+1cd0-1cf6,U+1cf8-1cf9,U+200c-200d,U+20a8,U+20b9,U+25cc,U+a830-a839,U+a8e0-a8fb}@font-face{font-family:Optimistic Text;src:url(/fonts/Optimistic_Text_Deva_W_Rg.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap;unicode-range:U+0900-097f,U+1cd0-1cf6,U+1cf8-1cf9,U+200c-200d,U+20a8,U+20b9,U+25cc,U+a830-a839,U+a8e0-a8fb}@font-face{font-family:Optimistic Text;src:url(/fonts/Optimistic_Text_Deva_W_Md.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap;unicode-range:U+0900-097f,U+1cd0-1cf6,U+1cf8-1cf9,U+200c-200d,U+20a8,U+20b9,U+25cc,U+a830-a839,U+a8e0-a8fb}@font-face{font-family:Optimistic Text;src:url(/fonts/Optimistic_Text_Deva_W_Bd.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap;unicode-range:U+0900-097f,U+1cd0-1cf6,U+1cf8-1cf9,U+200c-200d,U+20a8,U+20b9,U+25cc,U+a830-a839,U+a8e0-a8fb}@font-face{font-family:Optimistic Display;src:url(/fonts/Optimistic_Display_Viet_W_Md.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap;unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Optimistic Display;src:url(/fonts/Optimistic_Display_Viet_W_SBd.woff2) format("woff2");font-weight:600;font-style:normal;font-display:swap;unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Optimistic Display;src:url(/fonts/Optimistic_Display_Viet_W_Bd.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap;unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Optimistic Text;src:url(/fonts/Optimistic_Text_Viet_W_Rg.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap;unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Optimistic Text;src:url(/fonts/Optimistic_Text_Viet_W_Md.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap;unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}@font-face{font-family:Optimistic Text;src:url(/fonts/Optimistic_Text_Viet_W_Bd.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap;unicode-range:U+0102-0103,U+0110-0111,U+1ea0-1ef9,U+20ab}body{margin:0;padding:0;text-align:left;font-family:Optimistic Text,-apple-system,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;background:linear-gradient(var(--gray-gradient)) no-repeat;background-size:100% 600px;word-wrap:break-word;overflow-wrap:break-word;color:rgb(var(--gray-dark));font-size:18px;line-height:1.7}h1,h2,h3,h4,h5,h6{margin:0;margin-bottom:1rem;font-family:Optimistic Display,-apple-system,ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5rem;--tw-text-opacity: 1;color:rgb(0 0 0 / var(--tw-text-opacity, 1))}html.dark h1,html.dark h2,html.dark h3,html.dark h4,html.dark h5,html.dark h6{color:var(--color-text)}h1{margin-top:2rem;margin-bottom:2rem;margin-top:0;overflow-wrap:break-word;font-size:3rem;font-weight:600;line-height:1.25}h2{margin-top:1.5rem;margin-bottom:1.5rem;font-size:1.875rem;font-weight:600;line-height:2.5rem}h3{margin-top:1rem;margin-bottom:1rem;font-size:1.5rem;font-weight:600;line-height:2.5rem}h4{margin-top:1rem;margin-bottom:1rem;font-size:1.25rem;font-weight:600;line-height:2.5rem}h5{margin-top:1rem;margin-bottom:1rem;font-size:1.125rem;font-weight:600;line-height:2.5rem}strong,b{font-weight:700}a{color:var(--accent)}a:hover{color:var(--accent-darker)}a:focus{outline-color:var(--accent)}p{margin-bottom:.5rem}textarea{width:100%;font-size:16px}input{font-size:16px}table{width:100%}img{max-width:100%;height:auto;border-radius:8px}code{font-size:1rem;line-height:1.5rem;padding:2px 5px;background-color:rgb(var(--gray-light));border-radius:3px}pre{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;padding:1.5rem}pre>code{all:unset}blockquote{margin:0;border-left-width:4px;--tw-border-opacity: 1;border-left-color:rgb(8 125 164 / var(--tw-border-opacity, 1));padding:0;padding-left:1.5rem;font-size:1.125rem;line-height:1.75rem}hr{margin-top:2rem;margin-bottom:2rem;border-top-width:1px;border-style:solid;--tw-border-opacity: 1;border-color:rgb(229 231 235 / var(--tw-border-opacity, 1))}html.dark hr{border-color:var(--color-border)}mark{border-radius:.25rem;--tw-bg-opacity: 1;background-color:rgb(186 230 253 / var(--tw-bg-opacity, 1));padding-left:.25rem;padding-right:.25rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.prose ul,.prose ol{list-style:auto;margin-bottom:.5rem;padding-left:2rem}.prose a{text-decoration-line:underline}.astro-code{margin-bottom:2rem;margin-top:2rem;border-radius:1rem;font-size:1rem;line-height:1.5rem}.prose table{width:100%;border-collapse:collapse;margin:1.5rem 0}.prose th,.prose td{border:1px solid #ddd;padding:8px}.prose th{background-color:#f4f4f4;text-align:left}.prose tr:nth-child(2n){background-color:#f9f9f9}::view-transition-old(article-image),::view-transition-new(article-image){animation-duration:.4s;animation-timing-function:cubic-bezier(.4,0,.2,1)}::view-transition-old(root),::view-transition-new(root){animation-duration:.3s}img[transition\:name^=article-image]{will-change:transform}.prose pre,.prose code,.prose table{max-width:100%;overflow-x:auto}.prose img,.prose video,.prose iframe{max-width:100%;height:auto}@keyframes ripple{0%{transform:scale(0);opacity:1}to{transform:scale(4);opacity:0}}@keyframes glow{0%,to{box-shadow:0 0 5px rgba(var(--accent),.5)}50%{box-shadow:0 0 20px rgba(var(--accent),.8),0 0 30px rgba(var(--accent),.6)}}@keyframes slideIn{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}@keyframes slideInFromLeft{0%{opacity:0;transform:translate(-100%)}to{opacity:1;transform:translate(0)}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes pulse{0%,to{opacity:1}50%{opacity:.5}}.animate-ripple{animation:ripple .6s cubic-bezier(.4,0,.2,1)}.animate-glow{animation:glow 2s cubic-bezier(.4,0,.2,1) infinite}.animate-slide-in{animation:slideIn .4s cubic-bezier(.4,0,.2,1)}.animate-slide-in-left{animation:slideInFromLeft .3s cubic-bezier(.4,0,.2,1)}.animate-fade-in{animation:fadeIn .3s cubic-bezier(.4,0,.2,1)}.animate-spin{animation:spin 1s linear infinite}.animate-pulse{animation:pulse 2s cubic-bezier(.4,0,.2,1) infinite}.stagger-1{animation-delay:.1s}.stagger-2{animation-delay:.2s}.stagger-3{animation-delay:.3s}.stagger-4{animation-delay:.4s}.stagger-5{animation-delay:.5s}.stagger-6{animation-delay:.6s}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}.animate-ripple,.animate-glow,.animate-slide-in,.animate-slide-in-left,.animate-fade-in,.animate-spin,.animate-pulse{animation:none!important}}html.dark{color-scheme:dark;--color-bg: #0b0e14;--color-bg-glow: #121a26;--color-surface: #12161f;--color-surface-2: #181d28;--color-border: #232a38;--color-border-strong: #313a4d;--color-text: #e6e9ef;--color-text-muted: #8a93a6;--color-text-faint: #5b647a;--color-accent: #2bc0e4;--color-accent-hover: #5fd3f0;--color-accent-dim: #1d8aa6;--color-accent-soft: rgba(43, 192, 228, .12);--accent: var(--color-accent);--accent-darker: var(--color-accent-hover);--accent-dark: var(--color-accent-dim)}html.dark body{background-color:var(--color-bg);background-image:radial-gradient(1200px 320px at 50% -120px,var(--color-bg-glow),transparent 70%);background-repeat:no-repeat;background-size:100% 600px;color:var(--color-text)}html.dark h1,html.dark h2,html.dark h3,html.dark h4,html.dark h5,html.dark h6,html.dark .text-black{color:var(--color-text)}html.dark .text-gray-500,html.dark .text-gray-600,html.dark .text-gray-dark{color:var(--color-text-muted)}html.dark .text-gray-700,html.dark .text-gray-800,html.dark .text-gray-900{color:var(--color-text)}html.dark .text-gray-300,html.dark .text-gray-400{color:var(--color-text-faint)}html.dark .bg-white,html.dark .bg-gray-100{background-color:var(--color-surface)}html.dark .bg-gray-200,html.dark .hover\:bg-gray-50:hover,html.dark .hover\:bg-gray-100:hover{background-color:var(--color-surface-2)}html.dark .border-gray-200,html.dark .border-gray-300,html.dark hr{border-color:var(--color-border)}html.dark .accent-icon path,html.dark .accent-icon circle{fill:var(--color-accent)}html.dark .accent-icon ellipse{stroke:var(--color-accent)}html.dark header{background-color:var(--color-surface);border-bottom:1px solid var(--color-border);box-shadow:none}html.dark .header-link{color:var(--color-text-muted)}html.dark .header-link:hover{background-color:var(--color-surface-2);color:var(--color-text)}html.dark .header-link.active{background-color:var(--color-accent-soft);color:var(--color-accent)}html.dark footer{background-color:var(--color-surface);color:var(--color-text-muted);border-top:1px solid var(--color-border)}html.dark .footer-link{color:var(--color-accent)}html.dark .search-trigger{background-color:var(--color-surface);color:var(--color-text-faint);border:1px solid var(--color-border-strong)}html.dark #search-modal-content{background-color:var(--color-surface);color:var(--color-text)}html.dark #search-input{background-color:var(--color-bg);border-color:var(--color-border);color:var(--color-text)}html.dark #search-results a{border-color:var(--color-border)}html.dark #search-results a:hover{background-color:var(--color-surface-2)}html.dark #search-results h3{color:var(--color-text)}html.dark #search-results p{color:var(--color-text-muted)}html.dark .article-preview{color:var(--color-text)}html.dark .article-preview:hover h4{color:var(--color-accent)}html.dark .prose{color:#c2cad8}html.dark .prose h2,html.dark .prose h3,html.dark .prose h4{color:var(--color-text)}html.dark code{background-color:var(--color-surface);color:#d8dee9;border:1px solid var(--color-border)}html.dark pre>code{all:unset}html.dark .astro-code{border:1px solid var(--color-border)}html.dark blockquote{border-left-color:var(--color-accent);color:var(--color-text-muted)}html.dark mark{background-color:var(--color-accent-soft);color:var(--color-text)}html.dark .prose th,html.dark .prose td{border-color:var(--color-border)}html.dark .prose th{background-color:var(--color-surface-2);color:var(--color-text)}html.dark .prose tr:nth-child(2n){background-color:var(--color-surface)}.theme-toggle{display:inline-flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;border-radius:9999px;border:1px solid #d3dce6;background:transparent;color:var(--accent);cursor:pointer;transition:background-color .2s ease,border-color .2s ease,color .2s ease}.theme-toggle:hover{background-color:#087ea414}.theme-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}html.dark .theme-toggle{border-color:var(--color-border);color:var(--color-accent)}html.dark .theme-toggle:hover{background-color:var(--color-accent-soft)}.theme-icon-sun{display:none}html.dark .theme-icon-sun{display:block}html.dark .theme-icon-moon,.logo-dark,html.dark .logo-light{display:none}html.dark .logo-dark{display:inline-block}html.dark .contact-form input,html.dark .contact-form textarea{background-color:var(--color-surface);color:var(--color-text);--tw-ring-color: var(--color-border-strong)}html.dark .contact-form input::-moz-placeholder,html.dark .contact-form textarea::-moz-placeholder{color:var(--color-text-faint)}html.dark .contact-form input::placeholder,html.dark .contact-form textarea::placeholder{color:var(--color-text-faint)}html.dark .contact-form input:focus,html.dark .contact-form textarea:focus{--tw-ring-color: var(--color-accent)}.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}.header-link[data-astro-cid-eimmu3lg]{position:relative}.header-link[data-astro-cid-eimmu3lg]:after{content:"";position:absolute;bottom:8px;left:10px;right:10px;height:2px;background-color:currentColor;transform:translate(-100%);transition:transform .3s cubic-bezier(.4,0,.2,1);opacity:0}.header-link[data-astro-cid-eimmu3lg]:hover:after{transform:translate(0);opacity:.3}.header-link[data-astro-cid-eimmu3lg].active:after{transform:translate(0);opacity:.6}#search-modal[data-astro-cid-52lozg3f].search-modal-open{opacity:1!important;background-color:#082f4999!important}#search-modal[data-astro-cid-52lozg3f].search-modal-open #search-modal-content[data-astro-cid-52lozg3f]{transform:scale(1)!important}@media(prefers-reduced-motion:reduce){#search-modal[data-astro-cid-52lozg3f]{transition:none!important}#search-modal-content[data-astro-cid-52lozg3f]{transition:none!important;transform:scale(1)!important}}
