@font-face{font-family:Fraunces;font-style:normal;font-display:swap;font-weight:400;src:url(/_next/static/media/fraunces-vietnamese-400-normal.fbcbfbfd.woff2) format("woff2"),url(/_next/static/media/fraunces-vietnamese-400-normal.8cbc399f.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:Fraunces;font-style:normal;font-display:swap;font-weight:400;src:url(/_next/static/media/fraunces-latin-ext-400-normal.742ba392.woff2) format("woff2"),url(/_next/static/media/fraunces-latin-ext-400-normal.3de5a07a.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:Fraunces;font-style:normal;font-display:swap;font-weight:400;src:url(/_next/static/media/fraunces-latin-400-normal.361dab65.woff2) format("woff2"),url(/_next/static/media/fraunces-latin-400-normal.28b1a958.woff) format("woff");unicode-range:u+00??,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:Fraunces;font-style:normal;font-display:swap;font-weight:600;src:url(/_next/static/media/fraunces-vietnamese-600-normal.193671c9.woff2) format("woff2"),url(/_next/static/media/fraunces-vietnamese-600-normal.065a9a3b.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:Fraunces;font-style:normal;font-display:swap;font-weight:600;src:url(/_next/static/media/fraunces-latin-ext-600-normal.57d15a46.woff2) format("woff2"),url(/_next/static/media/fraunces-latin-ext-600-normal.28a40ed4.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:Fraunces;font-style:normal;font-display:swap;font-weight:600;src:url(/_next/static/media/fraunces-latin-600-normal.ed64c0f8.woff2) format("woff2"),url(/_next/static/media/fraunces-latin-600-normal.ba6c964e.woff) format("woff");unicode-range:u+00??,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 Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/_next/static/media/ibm-plex-sans-cyrillic-ext-400-normal.fe77cf74.woff2) format("woff2"),url(/_next/static/media/ibm-plex-sans-cyrillic-ext-400-normal.c53594e1.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 Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/_next/static/media/ibm-plex-sans-cyrillic-400-normal.03c3c250.woff2) format("woff2"),url(/_next/static/media/ibm-plex-sans-cyrillic-400-normal.f9650ffc.woff) format("woff");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/_next/static/media/ibm-plex-sans-greek-400-normal.5f160bba.woff2) format("woff2"),url(/_next/static/media/ibm-plex-sans-greek-400-normal.bedb8549.woff) format("woff");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/_next/static/media/ibm-plex-sans-vietnamese-400-normal.7f721ef5.woff2) format("woff2"),url(/_next/static/media/ibm-plex-sans-vietnamese-400-normal.072f5433.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 Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/_next/static/media/ibm-plex-sans-latin-ext-400-normal.20dd57fa.woff2) format("woff2"),url(/_next/static/media/ibm-plex-sans-latin-ext-400-normal.40b9fc05.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 Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/_next/static/media/ibm-plex-sans-latin-400-normal.13a15bcd.woff2) format("woff2"),url(/_next/static/media/ibm-plex-sans-latin-400-normal.48b78688.woff) format("woff");unicode-range:u+00??,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 Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/_next/static/media/ibm-plex-sans-cyrillic-ext-600-normal.399ec1c9.woff2) format("woff2"),url(/_next/static/media/ibm-plex-sans-cyrillic-ext-600-normal.a53cdf56.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 Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/_next/static/media/ibm-plex-sans-cyrillic-600-normal.015f312d.woff2) format("woff2"),url(/_next/static/media/ibm-plex-sans-cyrillic-600-normal.fdcd15f2.woff) format("woff");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/_next/static/media/ibm-plex-sans-greek-600-normal.6cd27d8b.woff2) format("woff2"),url(/_next/static/media/ibm-plex-sans-greek-600-normal.30fba19a.woff) format("woff");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/_next/static/media/ibm-plex-sans-vietnamese-600-normal.4aa57cdf.woff2) format("woff2"),url(/_next/static/media/ibm-plex-sans-vietnamese-600-normal.ea0cd549.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 Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/_next/static/media/ibm-plex-sans-latin-ext-600-normal.cb6ca6c6.woff2) format("woff2"),url(/_next/static/media/ibm-plex-sans-latin-ext-600-normal.73c474de.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 Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/_next/static/media/ibm-plex-sans-latin-600-normal.1cdb9a2c.woff2) format("woff2"),url(/_next/static/media/ibm-plex-sans-latin-600-normal.0eddcd6d.woff) format("woff");unicode-range:u+00??,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(/_next/static/media/ibm-plex-mono-cyrillic-ext-400-normal.66a2e865.woff2) format("woff2"),url(/_next/static/media/ibm-plex-mono-cyrillic-ext-400-normal.88f8fd5b.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(/_next/static/media/ibm-plex-mono-cyrillic-400-normal.651bc97e.woff2) format("woff2"),url(/_next/static/media/ibm-plex-mono-cyrillic-400-normal.9533b520.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(/_next/static/media/ibm-plex-mono-vietnamese-400-normal.110e2a76.woff2) format("woff2"),url(/_next/static/media/ibm-plex-mono-vietnamese-400-normal.7d495472.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(/_next/static/media/ibm-plex-mono-latin-ext-400-normal.9faee8e8.woff2) format("woff2"),url(/_next/static/media/ibm-plex-mono-latin-ext-400-normal.f14ffb91.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(/_next/static/media/ibm-plex-mono-latin-400-normal.06ac09dc.woff2) format("woff2"),url(/_next/static/media/ibm-plex-mono-latin-400-normal.e32cf7a4.woff) format("woff");unicode-range:u+00??,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{--bg:#f7f3ea;--fg:#2b2118;--muted:#6e6253;--accent:#b4441c;--line:#e3dacb;--code:#efe8da;--font-head:"Fraunces",Georgia,serif;--font-body:"IBM Plex Sans",sans-serif;--font-mono:"IBM Plex Mono",monospace;--head-weight:600;color-scheme:light}[data-theme=dark]{--bg:#1c1814;--fg:#efe7da;--muted:#a89b88;--accent:#e9825a;--line:#352e26;--code:#25201a;color-scheme:dark}*{box-sizing:border-box}body,html{background:var(--bg)}body{margin:0;color:var(--fg);font:16px/1.7 var(--font-body);-webkit-font-smoothing:antialiased}code,pre,time{font-family:var(--font-mono)}.brand,h1,h2,h3{font-family:var(--font-head);font-weight:var(--head-weight)}::selection{background:var(--accent);color:var(--bg)}.wrap{max-width:640px;margin:0 auto;padding:48px 20px}a{color:inherit;text-decoration:none}.arrow,.prose a{color:var(--accent);text-decoration:underline;text-underline-offset:3px}.nav{justify-content:space-between;margin-bottom:64px}.nav,.nav nav{display:flex;align-items:center}.nav nav{gap:16px}.nav nav a{color:var(--muted)}.nav nav a:hover{color:var(--fg)}.brand{font-size:18px}.toggle{display:grid;place-items:center;width:32px;height:32px;background:none;border:1px solid var(--line);color:var(--muted);border-radius:8px;cursor:pointer}.toggle:hover{color:var(--accent);border-color:var(--accent)}.moon,[data-theme=dark] .sun{display:none}[data-theme=dark] .moon{display:block}h1{font-size:24px;letter-spacing:-.02em;line-height:1.25;margin:0 0 16px}.section,h1{font-weight:600}.section{font-size:18px;color:var(--accent);margin:56px 0 12px}.list{list-style:none;padding:0;margin:0}.list a{display:flex;justify-content:space-between;gap:16px;padding:10px 0}.list a:hover span{color:var(--accent);text-decoration:underline;text-underline-offset:3px}.list time{font-size:13px;white-space:nowrap;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.list time,.muted{color:var(--muted)}.block,.small{font-size:14px}.block{display:block}.empty{border:1px dashed var(--line);border-radius:10px;padding:20px;text-align:center;margin:0}.empty,.todo{color:var(--muted)}.todo{border:1px dashed var(--muted);border-radius:8px;padding:12px 14px;font-family:var(--font-mono);font-size:14px}.prose h2{font-size:18px;margin-top:32px}.prose blockquote{margin:0;border-left:2px solid var(--line);padding-left:16px;color:var(--muted)}.prose pre{background:var(--code);border:1px solid var(--line);padding:14px;border-radius:8px;overflow-x:auto;font-size:14px}.prose table{border-collapse:collapse;width:100%}.prose td,.prose th{border-bottom:1px solid var(--line);text-align:left;padding:6px 8px}.prose img{max-width:100%}@media(max-width:480px){.wrap{padding-top:28px}.nav{margin-bottom:40px}.list a{flex-direction:column;gap:0}}.cover,.prose img{display:block;max-width:100%;height:auto;border-radius:10px;border:1px solid var(--line);background:var(--code)}.cover{width:100%;margin:8px 0 28px;aspect-ratio:16/9;object-fit:cover}.prose figure{margin:28px 0}.prose figure img{margin:0 auto}.prose figcaption{margin-top:8px;text-align:center;font-size:14px;color:var(--muted)}.prose figure.video{margin:28px 0}.prose .embed{position:relative;aspect-ratio:16/9;border-radius:10px;overflow:hidden;border:1px solid var(--line);background:var(--code)}.prose .embed iframe{position:absolute;inset:0;width:100%;height:100%;border:0}.prose video{display:block;width:100%;max-width:100%;height:auto;border-radius:10px;border:1px solid var(--line);background:#000}