@font-face{font-family:Inconsolata;font-style:normal;font-display:swap;font-weight:400;src:url(/_next/static/media/inconsolata-vietnamese-400-normal.788ea873.woff2) format("woff2"),url(/_next/static/media/inconsolata-vietnamese-400-normal.0fdec2a6.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:Inconsolata;font-style:normal;font-display:swap;font-weight:400;src:url(/_next/static/media/inconsolata-latin-ext-400-normal.e91396bf.woff2) format("woff2"),url(/_next/static/media/inconsolata-latin-ext-400-normal.8c9bd94c.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:Inconsolata;font-style:normal;font-display:swap;font-weight:400;src:url(/_next/static/media/inconsolata-latin-400-normal.eb50e0cc.woff2) format("woff2"),url(/_next/static/media/inconsolata-latin-400-normal.7bb81ff1.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:Inconsolata;font-style:normal;font-display:swap;font-weight:500;src:url(/_next/static/media/inconsolata-vietnamese-500-normal.f421ca05.woff2) format("woff2"),url(/_next/static/media/inconsolata-vietnamese-500-normal.7eba8ac2.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:Inconsolata;font-style:normal;font-display:swap;font-weight:500;src:url(/_next/static/media/inconsolata-latin-ext-500-normal.dc765ce4.woff2) format("woff2"),url(/_next/static/media/inconsolata-latin-ext-500-normal.c86f8225.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:Inconsolata;font-style:normal;font-display:swap;font-weight:500;src:url(/_next/static/media/inconsolata-latin-500-normal.bb0edead.woff2) format("woff2"),url(/_next/static/media/inconsolata-latin-500-normal.e6b731e9.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:Inconsolata;font-style:normal;font-display:swap;font-weight:700;src:url(/_next/static/media/inconsolata-vietnamese-700-normal.3e0dc04d.woff2) format("woff2"),url(/_next/static/media/inconsolata-vietnamese-700-normal.e9ec3748.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:Inconsolata;font-style:normal;font-display:swap;font-weight:700;src:url(/_next/static/media/inconsolata-latin-ext-700-normal.c52a2c3c.woff2) format("woff2"),url(/_next/static/media/inconsolata-latin-ext-700-normal.25b98403.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:Inconsolata;font-style:normal;font-display:swap;font-weight:700;src:url(/_next/static/media/inconsolata-latin-700-normal.c4521b9b.woff2) format("woff2"),url(/_next/static/media/inconsolata-latin-700-normal.66b31c0c.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:Gilda Display;font-style:normal;font-display:swap;font-weight:400;src:url(/_next/static/media/gilda-display-latin-ext-400-normal.ca62c908.woff2) format("woff2"),url(/_next/static/media/gilda-display-latin-ext-400-normal.91aa55c6.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:Gilda Display;font-style:normal;font-display:swap;font-weight:400;src:url(/_next/static/media/gilda-display-latin-400-normal.0df660af.woff2) format("woff2"),url(/_next/static/media/gilda-display-latin-400-normal.93f634b0.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{--ink:#1f1f1d;--soft:#3a3a37;--muted:#75736d;--faint:#a8a6a0;--line:#cdcbc4;--rule:#d8d6cf;--paper:#fbfaf7;--chip:#4a4844;--sepia:#7d6547;--code-bg:#f3f2ee;--code-line:#e3e1d9}*{box-sizing:border-box;margin:0;padding:0}html{height:100%}body{min-height:100%;font-family:Inconsolata,monospace;font-size:14.5px;line-height:1.72;color:var(--ink);background:var(--paper);-webkit-font-smoothing:antialiased;padding:62px 40px 80px;animation:fade .55s ease both}@keyframes fade{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}a{color:inherit}.layout{max-width:1060px;margin:0 auto;display:flex;min-height:calc(100vh - 142px)}.sidebar{width:304px;flex:none;align-self:flex-start;position:sticky;top:62px;padding-right:44px}.name{font-family:Gilda Display,serif;font-size:33px;font-weight:400;letter-spacing:.3px;line-height:1.1}.name a{text-decoration:none}.tagline{font-weight:700;margin-top:14px;font-size:14px}.bio{color:var(--muted);margin-top:9px}.socials{display:flex;gap:9px;margin-top:20px}.social{width:35px;height:35px;border-radius:3px;background:var(--chip);color:#fff;display:flex;align-items:center;justify-content:center;transition:background .18s ease,transform .18s ease}.social svg{width:15px;height:15px;display:block}.social:hover{background:#000;transform:translateY(-1px)}.signal{margin-top:30px;border:1px dashed var(--line);padding:22px 22px 24px}.signal-title{font-size:14px;font-weight:700;letter-spacing:.2px}.signal p{color:var(--muted);margin-top:12px}.signal p:first-of-type{margin-top:14px}.signup-btn{display:inline-flex;align-items:center;gap:7px;margin-top:18px;font-size:13.5px;color:#fff;background:var(--chip);padding:10px 18px;border-radius:2px;text-decoration:none;transition:background .18s ease,transform .18s ease}.signup-btn:hover{background:#000;transform:translateY(-1px)}.signup-btn .material-symbol{font-size:15px}.side-footer{margin-top:26px;font-size:12px;color:var(--faint);letter-spacing:.3px}.content{flex:1 1;min-width:0;border-left:1px dashed var(--line);padding-left:44px}.block{margin-bottom:46px}.block:last-child{margin-bottom:0}.section-title{font-family:Gilda Display,serif;font-size:23px;font-weight:400;letter-spacing:.3px;margin-bottom:19px}.rows{list-style:none}.row{display:flex;align-items:flex-start;gap:13px;padding:7px 0}.row-icon{width:22px;height:1.72em;flex:none;display:flex;align-items:center;justify-content:center;color:#595959}.row-icon .brand-icon{width:16px;height:16px;display:block}.row-text{color:var(--muted)}.row-text b{color:var(--ink);font-weight:500}.row-link{color:var(--ink);text-decoration:none;display:inline-flex;align-items:center;gap:6px;border-bottom:1px solid transparent;transition:border-color .16s ease}.row-link .material-symbol{font-size:16px;color:var(--faint)}.row-link:hover{border-color:var(--soft)}.row-link:hover .material-symbol{color:var(--soft)}.row.is-soon .row-icon,.row.is-soon .row-text{opacity:.5}.soon{color:var(--faint);font-size:11.5px;letter-spacing:.4px;text-transform:uppercase;margin-left:8px;align-self:center}.material-symbol{font-family:Material Symbols Rounded;font-variation-settings:"FILL" 0,"wght" 100,"GRAD" 0,"opsz" 24;font-size:21px;line-height:1;-webkit-user-select:none;user-select:none}.row-icon .material-symbol{color:var(--soft)}.back{display:inline-flex;align-items:center;gap:6px;color:var(--muted);text-decoration:none;font-size:13px;transition:color .16s ease}.back:hover{color:var(--ink)}.back .material-symbol{font-size:16px}.eyebrow{margin-top:26px;font-size:11.5px;letter-spacing:1.6px;text-transform:uppercase;color:var(--faint)}.article-title{font-family:Gilda Display,serif;font-size:34px;font-weight:400;line-height:1.16;letter-spacing:.2px;margin-top:8px}.lede{color:var(--sepia);margin-top:14px;font-size:15px}.article{margin-top:6px}.article h2{font-family:Gilda Display,serif;font-size:21px;font-weight:400;letter-spacing:.2px;margin:36px 0 12px}.article p{margin:0 0 14px;color:var(--soft)}.article ul{margin:0 0 14px;padding-left:4px;list-style:none}.article li{position:relative;padding-left:20px;margin-bottom:7px;color:var(--soft)}.article li:before{content:"–";position:absolute;left:2px;color:var(--faint)}.article strong{font-weight:700;color:var(--ink)}.article code{font-family:Inconsolata,monospace;background:#eeede8;padding:1px 5px;font-size:.92em}.article code,.article pre{border:1px solid var(--code-line);border-radius:2px}.article pre{background:var(--code-bg);padding:14px 16px;margin:0 0 16px;overflow-x:auto}.article pre code{background:none;border:none;padding:0;font-size:13px;line-height:1.6;color:var(--ink)}.article table{border-collapse:collapse;width:100%;margin:0 0 16px;font-size:13px}.article td,.article th{border:1px solid var(--rule);padding:8px 12px;text-align:left;vertical-align:top}.article th{background:#f1f0ec;font-weight:700}.article td{color:var(--soft)}.article hr{border:none;border-top:1px dashed var(--line);margin:30px 0}.article .diagram{display:block;width:100%;height:auto;margin:30px auto 6px}.article .diagram-caption{font-family:Inconsolata,monospace;font-size:11.5px;letter-spacing:.6px;color:var(--faint);text-align:center;margin:0 0 30px}.article .pull-quote{font-family:Gilda Display,serif;font-size:22px;line-height:1.4;color:var(--ink);border-left:2px solid var(--ink);padding:4px 0 4px 20px;margin:30px 0;letter-spacing:.2px}.article .pull-quote em{font-style:italic;color:var(--soft)}.article .stages{display:grid;grid-template-columns:repeat(2,1fr);gap:18px;margin:26px 0 32px}.article .stage{border:1px dashed var(--line);padding:22px 22px 20px;position:relative;background:transparent}.article .stage-num{font-family:Inconsolata,monospace;font-size:11px;letter-spacing:1.4px;color:var(--faint);display:block;margin-bottom:8px}.article .stage h3{font-family:Gilda Display,serif;font-size:19px;font-weight:400;letter-spacing:.2px;color:var(--ink);margin:0 0 10px}.article .stage p{color:var(--soft);font-size:13.5px;line-height:1.65;margin:0 0 14px}.article .stage-io{display:flex;gap:18px;border-top:1px dashed var(--line);padding-top:12px;margin-top:auto}.article .stage-io>div{flex:1 1;min-width:0}.article .stage-io b{display:block;font-family:Inconsolata,monospace;font-size:10px;letter-spacing:1.4px;color:var(--faint);font-weight:700;margin-bottom:4px;text-transform:uppercase}.article .stage-io span{font-size:12.5px;color:var(--ink)}.article .safety-nets{display:grid;gap:12px;margin:22px 0 30px}.article .safety-net{display:flex;gap:16px;padding:16px 18px;background:var(--code-bg);border:1px solid var(--code-line);border-radius:2px;align-items:flex-start}.article .safety-net .material-symbol{font-size:22px;color:var(--soft);flex:none;line-height:1.4}.article .safety-net-body strong{display:block;color:var(--ink);font-weight:700;font-size:14px;margin-bottom:3px}.article .safety-net-body span{color:var(--soft);font-size:13.5px;line-height:1.6}.article .principles{margin:22px 0 30px;counter-reset:principle}.article .principle{position:relative;padding:18px 0 18px 56px;border-top:1px dashed var(--line)}.article .principle:last-child{border-bottom:1px dashed var(--line)}.article .principle:before{counter-increment:principle;content:"0" counter(principle);position:absolute;left:0;top:14px;font-family:Gilda Display,serif;font-size:26px;color:var(--faint);letter-spacing:.5px;line-height:1}.article .principle strong{display:block;color:var(--ink);font-weight:700;font-size:14px;margin-bottom:4px}.article .principle span{color:var(--soft);font-size:14px;line-height:1.65}@media (max-width:720px){.article .stages{grid-template-columns:1fr}.article .pull-quote{font-size:19px}}.notfound h1{font-family:Gilda Display,serif;font-size:34px;font-weight:400}.notfound p{color:var(--muted);margin-top:12px;margin-bottom:16px}@media (max-width:720px){body{padding:40px 24px 60px}.layout{flex-direction:column;min-height:0}.sidebar{position:static;width:auto;padding-right:0}.content{border-left:none;border-top:1px dashed var(--line);padding-left:0;padding-top:38px;margin-top:38px}.article-title{font-size:28px}}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:fixed;top:-60px;left:16px;z-index:100;background:var(--ink);color:white;padding:10px 16px}.skip-link:focus{top:16px}a:focus-visible,button:focus-visible{outline:2px solid var(--sepia);outline-offset:4px}.back>svg,.row-link>svg,.signup-btn>svg{width:16px;height:16px;flex:none}.row-link>svg{color:var(--faint)}.brand-icon{fill:currentColor}.article-meta{font-size:12px;color:var(--muted);margin:14px 0 24px}.article img,.cover-image{max-width:100%;height:auto}.article h3{margin:24px 0 10px}.article ol{padding-left:24px;margin-bottom:16px}.article ol li{padding-left:0}.article ol li:before{content:none}.article a{overflow-wrap:anywhere}.article table{display:block;overflow-x:auto}.consent{position:fixed;bottom:18px;left:18px;right:18px;margin:auto;max-width:600px;background:var(--paper);padding:20px;border:1px solid var(--line);box-shadow:0 4px 24px #0002;z-index:50}.consent>div{display:flex;gap:12px;margin-top:12px}button{font:inherit;cursor:pointer;padding:8px 12px;color:var(--ink);background:var(--paper);border:1px solid var(--line)}.privacy-choice{position:fixed;bottom:8px;right:12px;font-size:11px;padding:3px 8px;color:var(--muted)}@media (prefers-reduced-motion:reduce){body{animation:none}*,:after,:before{transition:none!important;scroll-behavior:auto!important}}