@import"https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,100..700;1,100..700&family=Roboto:ital,wght@0,100..900;1,100..900&display=swap";*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}html{font-size:18px;color:rgba(0,0,0,.8);text-align:left;font-family:Arial,sans-serif;width:100%;height:100%}body{width:100%;height:100%}button{font:inherit;color:inherit;background:none;border:none;padding:0;cursor:pointer}ul,ol{list-style:none}hr{border:none}dialog{margin:0;padding:0;border:0;background:rgba(0,0,0,0);color:inherit;font:inherit;max-width:none;max-height:none}dialog::backdrop{background:rgba(0,0,0,0)}details{margin:0;padding:0}details>summary{margin:0;padding:0;cursor:pointer}:root{--blue-900: #090b3c;--blue-800: #003c7a;--blue-700: #184ca2;--blue-600: #2259c2;--blue-500: #2678dc;--blue-400: #6fbbf7;--blue-300: #afeffb;--blue-200: #d6f2ff;--blue-100: #eafbff;--gray-900: #232323;--gray-800: #3d3d3d;--gray-700: #5d5d5d;--gray-600: #727272;--gray-500: #818181;--gray-400: #b3b3b3;--gray-300: #d5d5d5;--gray-200: #ebebeb;--gray-100: #f5f5f5;--green-900: #093c1b;--green-800: #007a1c;--green-700: #18a24f;--green-600: #22c27a;--green-500: #26dc96;--green-400: #7df76f;--green-300: #b2fbaf;--green-200: #d9ffd6;--green-100: #f2ffea;--red-900: #3c0909;--red-800: #7a0000;--red-700: #a21818;--red-600: #c22222;--red-500: #dc2626;--red-400: #f76f6f;--red-300: #fbafaf;--red-200: #ffd6d6;--red-100: #ffeaea;--neutral-900: var(--gray-900);--neutral-800: var(--gray-800);--neutral-700: var(--gray-700);--neutral-600: var(--gray-600);--neutral-500: var(--gray-500);--neutral-400: var(--gray-400);--neutral-300: var(--gray-300);--neutral-200: var(--gray-200);--neutral-100: var(--gray-100);--bg-color: #ffffff;--fg-color: rgb(2 2 2);--primary-color-900: var(--blue-900);--primary-color-800: var(--blue-800);--primary-color-700: var(--blue-700);--primary-color-600: var(--blue-600);--primary-color-500: var(--blue-500);--primary-color-400: var(--blue-400);--primary-color-300: var(--blue-300);--primary-color-200: var(--blue-200);--primary-color-100: var(--blue-100);--code-bg: #fbfbfb;--code-fg: #403f53;--mono-font: "Roboto Mono", monospace;--sans-font: "Roboto", monospace}@media(prefers-color-scheme: dark){:root{--bg-color: rgb(16 16 16);--fg-color: #dadada;--primary-color-900: var(--blue-100);--primary-color-800: var(--blue-200);--primary-color-700: var(--blue-300);--primary-color-600: var(--blue-400);--primary-color-500: var(--blue-500);--primary-color-400: var(--blue-600);--primary-color-300: var(--blue-700);--primary-color-200: var(--blue-800);--primary-color-100: var(--blue-900);--neutral-900: var(--gray-100);--neutral-800: var(--gray-200);--neutral-700: var(--gray-300);--neutral-600: var(--gray-400);--neutral-500: var(--gray-500);--neutral-400: var(--gray-600);--neutral-300: var(--gray-700);--neutral-200: var(--gray-800);--neutral-100: var(--gray-900);--code-bg: #0a0c10;--code-fg: #f0f3f6}}html{font-family:"Roboto",sans-serif;font-optical-sizing:auto;font-style:normal;font-variation-settings:"wdth" 100;width:100%;background-color:var(--bg-color);color:var(--fg-color);scroll-behavior:smooth}h1{color:var(--primary-color-900)}h2{color:var(--primary-color-800)}h3{color:var(--primary-color-700)}h6{color:var(--primary-color-700)}a{color:var(--fg-color);font-weight:500;text-decoration-color:var(--primary-color-500);text-decoration-thickness:2px}a:hover{color:var(--primary-color-500)}li::before{color:var(--primary-color-600)}code{font-family:"Roboto Mono",monospace}@media(prefers-color-scheme: dark){h6{color:var(--neutral-700)}}.columns{display:flex;flex-direction:row;margin:auto;max-width:1200px}.header{width:100%;font-size:16px;background-color:var(--blue-900);padding:24px 32px;display:flex;align-items:center;gap:24px}.header a{text-decoration:none;color:var(--blue-200)}.header a:hover{text-decoration:underline}@media(prefers-color-scheme: dark){.shiki,.shiki span{color:var(--shiki-dark) !important;background-color:var(--shiki-dark-bg) !important}}.tech-article{text-align:left;font-size:18px;line-height:1.5;max-width:65ch;width:65ch;container-type:inline-size;margin:0 auto;scrollbar-color:var(--neutral-200) var(--bg-color)}.tech-article h1{font-weight:500;font-size:42px;margin-top:48px;line-height:1.125}.tech-article h1:not(:has(+p.last-updated)){margin-bottom:32px}.tech-article h2{font-size:32px;line-height:1.25;margin-top:48px;margin-bottom:24px}.tech-article h3{font-size:24px;margin-bottom:12px;margin-top:36px;line-height:1.5}.tech-article p{margin-bottom:24px}.tech-article p.last-updated{font-size:16px;margin-top:12px;font-style:italic;margin-bottom:32px;color:var(--neutral-600)}.tech-article ol,.tech-article ul{list-style-position:inside;margin-bottom:32px;list-style-type:none;counter-reset:item}.tech-article ol li,.tech-article ul li{counter-increment:item;margin-bottom:16px}.tech-article ol li::before,.tech-article ul li::before{margin-right:8px;content:counter(item) "."}.tech-article code{color:var(--code-fg)}.tech-article pre{line-height:1.5;font-size:13px;margin-bottom:24px;width:100%;padding:24px 32px;border-radius:6px;margin-right:-32px;margin-left:-32px;background-color:var(--code-bg)}.tech-article pre code{display:block;overflow:auto}.tech-article details{background-color:var(--code-bg);width:auto;margin-bottom:24px}.tech-article details[open] summary{border-radius:6px 6px 0 0}.tech-article details summary{background-color:var(--blue-900);transition:background-color 100ms ease-in;color:var(--blue-100);padding:12px 12px;border-radius:6px}.tech-article details summary:hover{background-color:var(--blue-800)}.tech-article details>:not(summary){padding:24px 12px}.tech-article details pre{padding:24px 64px}.tech-article h1 code,.tech-article h2 code,.tech-article h3 code,.tech-article p code,.tech-article table code{letter-spacing:-0.5px;padding:2px 6px;margin:1px -1px;border-radius:3px;background-color:var(--primary-color-100);font-size:.85em}.tech-article table{width:calc(100% + 48px);margin-left:-24px;margin-right:-24px;background-color:var(--primary-color-300);color:var(--code-fg);font-size:16px;border-radius:6px;border-spacing:0;overflow:hidden}.tech-article table td,.tech-article table th{text-align:center;padding:12px}.tech-article table td:first-child,.tech-article table th:first-child{text-align:left}.tech-article table td:last-child,.tech-article table th:last-child{text-align:right}.tech-article table thead{background-color:var(--primary-color-900);color:var(--primary-color-200)}.tech-article table thead th{font-weight:normal;text-transform:uppercase}.tech-article table tbody tr:nth-child(odd){background-color:var(--primary-color-200)}@media(prefers-color-scheme: dark){.tech-article table thead{background-color:var(--primary-color-100);color:var(--primary-color-900)}}@container (width < 55ch){.tech-article p,.tech-article h1,.tech-article h2,.tech-article h3,.tech-article ol,.tech-article ul{padding:0 12px}.tech-article details{margin-left:12px;margin-right:12px}.tech-article table{border-radius:0;width:100%;margin-left:0;margin-right:0}.tech-article pre{padding:24px 12px;margin-right:0;margin-left:0;border-radius:0}.tech-article details pre{padding:8px 8px}}.nav-index{padding-top:48px;padding-right:48px;padding-left:48px;font-size:14px;width:40ch;margin:0 auto;height:fit-content}.nav-index h6{text-transform:uppercase;font-weight:normal;font-size:16px;margin-bottom:24px}.nav-index a{font-weight:normal;transition:color 200ms;color:var(--neutral-500);text-decoration:none}.nav-index a:hover{text-decoration:underline;text-decoration-color:var(--neutral-400);color:var(--neutral-800)}.nav-index li>ol{font-size:.95em;margin-top:1em;margin-left:1em}.nav-index li>ol a{color:var(--neutral-400)}.nav-index li>ol li{margin-bottom:8px}.nav-index li{margin-bottom:12px}.nav-index a.selected{color:var(--primary-color-400)}.nav-sticky{position:sticky;top:0}@media(width < 1200px){.nav-index{display:none}}.btn{text-transform:uppercase;background-color:var(--blue-500);color:var(--blue-100);text-decoration:none;padding:24px 48px;display:block;width:fit-content;font-weight:bold;border-radius:6px}.btn:hover{background-color:var(--blue-600);color:var(--blue-100)}.btn{margin-bottom:24px}.btn.btn-small{padding:12px 24px;font-size:14px}#course-index h6{text-transform:none;color:var(--primary-color-500)}#course-index h6 a{color:var(--primary-color-500)}#course-index ol{list-style-position:inside;list-style-type:none;counter-reset:item}#course-index ol li{counter-increment:item;display:flex;margin-bottom:16px;gap:12px}#course-index ol li::before{content:counter(item) ".";flex-shrink:0}#course-index ol li.selected a{color:var(--neutral-800)}pre{position:relative}pre:hover .copy-code{opacity:1}pre .copy-code{opacity:0;transition:opacity 200ms ease-in;position:absolute;top:0;right:0;font-size:10px;font-family:var(--sans-font),sans-serif;margin:12px;padding:4px 4px;border-radius:3px;background-color:var(--neutral-100);color:var(--neutral-600)}pre .copy-code:hover{background-color:var(--neutral-200)}pre .copy-code:active{background-color:var(--neutral-400)}