@font-face{font-family:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/archivo-vietnamese-wght-normal.XAtsl5Q_.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:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/archivo-latin-ext-wght-normal.C4zznr8T.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:Archivo Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/archivo-latin-wght-normal.E0tuGl4L.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(/_astro/ibm-plex-mono-cyrillic-ext-400-normal.xuaO2J-f.woff2) format("woff2"),url(/_astro/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(/_astro/ibm-plex-mono-cyrillic-400-normal.BSMlKf0J.woff2) format("woff2"),url(/_astro/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(/_astro/ibm-plex-mono-vietnamese-400-normal.BulugwFq.woff2) format("woff2"),url(/_astro/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(/_astro/ibm-plex-mono-latin-ext-400-normal.BmRBH3aV.woff2) format("woff2"),url(/_astro/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(/_astro/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2) format("woff2"),url(/_astro/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}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-cyrillic-ext-500-normal.BqneJy0T.woff2) format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-ext-500-normal.BIfNGwUT.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:500;src:url(/_astro/ibm-plex-mono-cyrillic-500-normal.Bq9vWWag.woff2) format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-500-normal.Ael50iVv.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:500;src:url(/_astro/ibm-plex-mono-vietnamese-500-normal.DZ4AoWbu.woff2) format("woff2"),url(/_astro/ibm-plex-mono-vietnamese-500-normal.C8zxqsMH.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:500;src:url(/_astro/ibm-plex-mono-latin-ext-500-normal.CAhNIIs5.woff2) format("woff2"),url(/_astro/ibm-plex-mono-latin-ext-500-normal.CZ70TYgx.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:500;src:url(/_astro/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2) format("woff2"),url(/_astro/ibm-plex-mono-latin-500-normal.CB9ihrfo.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}:root{--ground: #F2F3F5;--panel: #FBFBFC;--line: #DDE1E7;--line-soft: #E8EBEF;--line-strong: #C9CED6;--ink: #0B1220;--ink-2: #4A5568;--muted: #8A93A3;--faint: #B3BAC6;--accent: #0047AB;--on-accent: #FFFFFF;--signal: #0047AB;--android: #2FA866;--ios: #0047AB;--web: #DD6F24;--ai: #7B4FD6;--pkg: #161D2B;--gold: #D9B45A;--tin: #C9CED6;--font-display: "Archivo Variable", "Archivo", system-ui, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, "SF Mono", monospace;--blur-h: 140px;--gutter: clamp(20px, 4vw, 44px);--measure: 62ch;--max: 1060px;--hdr-h: 58px}*,*:before,*:after{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:calc(var(--hdr-h) + 12px)}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation:none!important;transition:none!important}}body{margin:0;background:var(--ground);color:var(--ink);font-family:var(--font-display);font-size:16px;line-height:1.55;font-weight:400;-webkit-font-smoothing:antialiased}main,footer{position:relative;z-index:2}h1,h2,h3{margin:0;line-height:1.05;letter-spacing:-.025em;text-wrap:balance;font-weight:600}p{margin:0}img{max-width:100%;height:auto;display:block}a{color:inherit;text-decoration:none}a:focus-visible,button:focus-visible,input:focus-visible,textarea:focus-visible{outline:2px solid var(--signal);outline-offset:3px}.shell{max-width:var(--max);margin-inline:auto;padding-inline:var(--gutter)}.mono{font-family:var(--font-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-variant-numeric:tabular-nums}.label{font-family:var(--font-mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}.ref{font-family:var(--font-mono);font-size:9px;color:#0b12206b}.pagehead{padding-block:56px 36px;display:grid;gap:14px}.pagehead h1{font-size:clamp(40px,6vw,72px);letter-spacing:-.04em;line-height:.95}.pagehead p{color:var(--ink-2);max-width:52ch;font-size:17px}.prose{max-width:var(--measure);color:var(--ink-2);font-size:17px;line-height:1.6}.prose h2{color:var(--ink);font-size:22px;margin-top:40px;margin-bottom:10px}.prose p+p{margin-top:16px}.prose ul{list-style:none;padding:0;margin:0;display:grid;border-top:1px solid var(--line)}.prose li{position:relative;padding:11px 0 11px 22px;border-bottom:1px solid var(--line)}.prose li:last-child{border-bottom:0}.prose li:before{content:"";position:absolute;left:2px;top:19px;width:8px;height:5px;border-radius:1px;border:1px solid var(--muted);background:var(--panel)}.prose a{color:var(--accent);text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px}.prose a:hover{text-decoration-thickness:2px}.btn{display:inline-flex;align-items:center;gap:10px;font-family:var(--font-mono);font-size:12px;letter-spacing:.04em;padding:12px 16px;border-radius:2px;background:var(--ink);color:var(--ground);border:1px solid var(--ink);cursor:pointer;font-weight:500;transition:background .15s ease,color .15s ease}.btn:before{content:"";width:6px;height:6px;border-radius:1px;background:#3b4456;transition:background .2s,box-shadow .2s}.btn:hover:before,.btn:focus-visible:before{background:#6e96e6;box-shadow:0 0 6px #6e96e6}.btn-ghost{background:transparent;color:var(--ink)}.btn-ghost:before{background:var(--line-strong)}.btn:disabled{opacity:.6;cursor:progress}.led{position:relative;display:block;width:12px;height:20px;color:var(--c, var(--accent))}.led:before,.led:after{content:"";position:absolute;left:0;right:0;height:5px;border:1px solid #AEB4BE;background:var(--tin);border-radius:1px}.led:before{top:0}.led:after{bottom:0}.led i{position:absolute;inset:5px 1px;border-radius:1px;background:color-mix(in srgb,currentColor 55%,#fff);box-shadow:0 0 0 1px color-mix(in srgb,currentColor 60%,transparent)}.progressive-blur{position:fixed;inset:auto 0 0;height:var(--blur-h);pointer-events:none;z-index:20}.progressive-blur span{position:absolute;inset:0;display:block}.progressive-blur span:nth-child(1){z-index:1;backdrop-filter:blur(.0625px);-webkit-backdrop-filter:blur(.0625px);-webkit-mask-image:linear-gradient(rgba(0,0,0,0) 0%,#000 12.5%,#000 25%,rgba(0,0,0,0) 37.5%);mask-image:linear-gradient(#0000,#000 12.5% 25%,#0000 37.5%)}.progressive-blur span:nth-child(2){z-index:2;backdrop-filter:blur(.125px);-webkit-backdrop-filter:blur(.125px);-webkit-mask-image:linear-gradient(rgba(0,0,0,0) 12.5%,#000 25%,#000 37.5%,rgba(0,0,0,0) 50%);mask-image:linear-gradient(#0000 12.5%,#000 25% 37.5%,#0000 50%)}.progressive-blur span:nth-child(3){z-index:3;backdrop-filter:blur(.25px);-webkit-backdrop-filter:blur(.25px);-webkit-mask-image:linear-gradient(rgba(0,0,0,0) 25%,#000 37.5%,#000 50%,rgba(0,0,0,0) 62.5%);mask-image:linear-gradient(#0000 25%,#000 37.5% 50%,#0000 62.5%)}.progressive-blur span:nth-child(4){z-index:4;backdrop-filter:blur(.5px);-webkit-backdrop-filter:blur(.5px);-webkit-mask-image:linear-gradient(rgba(0,0,0,0) 37.5%,#000 50%,#000 62.5%,rgba(0,0,0,0) 75%);mask-image:linear-gradient(#0000 37.5%,#000 50% 62.5%,#0000 75%)}.progressive-blur span:nth-child(5){z-index:5;backdrop-filter:blur(1px);-webkit-backdrop-filter:blur(1px);-webkit-mask-image:linear-gradient(rgba(0,0,0,0) 50%,#000 62.5%,#000 75%,rgba(0,0,0,0) 87.5%);mask-image:linear-gradient(#0000 50%,#000 62.5% 75%,#0000 87.5%)}.progressive-blur span:nth-child(6){z-index:6;backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);-webkit-mask-image:linear-gradient(rgba(0,0,0,0) 62.5%,#000 75%,#000 87.5%,rgba(0,0,0,0) 100%);mask-image:linear-gradient(#0000 62.5%,#000 75% 87.5%,#0000)}.progressive-blur span:nth-child(7){z-index:7;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);-webkit-mask-image:linear-gradient(rgba(0,0,0,0) 75%,#000 87.5%,#000 100%);mask-image:linear-gradient(#0000 75%,#000 87.5% 100%)}.progressive-blur span:nth-child(8){z-index:8;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);-webkit-mask-image:linear-gradient(rgba(0,0,0,0) 87.5%,#000 100%);mask-image:linear-gradient(#0000 87.5%,#000)}@supports not (mask-image: linear-gradient(#000,#000)){.progressive-blur span:not(:last-child){display:none}}.hdr[data-astro-cid-3ef6ksr2]{position:sticky;top:0;z-index:10;height:var(--hdr-h);display:flex;align-items:center;gap:20px;padding-inline:var(--gutter);background:color-mix(in srgb,var(--ground) 84%,transparent);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}.brand[data-astro-cid-3ef6ksr2]{font-weight:600;font-size:15px;letter-spacing:-.01em}nav[data-astro-cid-3ef6ksr2]{margin-left:auto;display:flex;gap:20px;font-family:var(--font-mono);font-size:12px}nav[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2]{color:var(--ink-2);display:flex;align-items:center;gap:7px}nav[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2]:before{content:"";width:5px;height:5px;border-radius:1px;background:transparent;transition:background .3s,box-shadow .3s}nav[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2]:hover{color:var(--ink)}nav[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2].on{color:var(--ink)}nav[data-astro-cid-3ef6ksr2] a[data-astro-cid-3ef6ksr2].on:before{background:var(--accent);box-shadow:0 0 6px #0047ab80}@media(max-width:560px){nav[data-astro-cid-3ef6ksr2]{gap:14px;font-size:11px}}footer[data-astro-cid-sz7xmlte]{border-top:1px solid color-mix(in srgb,var(--ink) 45%,transparent);padding:20px var(--gutter) calc(26px + var(--blur-h));display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;font-family:var(--font-mono);font-size:11px;color:var(--muted)}footer[data-astro-cid-sz7xmlte].wired{border-top-color:transparent}.links[data-astro-cid-sz7xmlte]{display:flex;gap:20px;flex-wrap:wrap}.links[data-astro-cid-sz7xmlte] a[data-astro-cid-sz7xmlte]:hover{color:var(--ink)}#hex-ground[data-astro-cid-5c4w4hdq]{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;z-index:0}
