@font-face{font-family:"JetBrains Mono";font-style:italic;font-weight:400 600;font-display:swap;src:url(/fonts/jetbrains-mono-italic-latin-ext.woff2) format("woff2");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-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"JetBrains Mono";font-style:italic;font-weight:400 600;font-display:swap;src:url(/fonts/jetbrains-mono-italic-latin.woff2) format("woff2");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:"JetBrains Mono";font-style:normal;font-weight:400 600;font-display:swap;src:url(/fonts/jetbrains-mono-normal-latin-ext.woff2) format("woff2");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-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"JetBrains Mono";font-style:normal;font-weight:400 600;font-display:swap;src:url(/fonts/jetbrains-mono-normal-latin.woff2) format("woff2");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:"Mona Sans";font-style:italic;font-weight:200 900;font-stretch:75% 125%;font-display:swap;src:url(/fonts/mona-sans-italic-latin-ext.woff2) format("woff2");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-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"Mona Sans";font-style:italic;font-weight:200 900;font-stretch:75% 125%;font-display:swap;src:url(/fonts/mona-sans-italic-latin.woff2) format("woff2");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:"Mona Sans";font-style:normal;font-weight:200 900;font-stretch:75% 125%;font-display:swap;src:url(/fonts/mona-sans-normal-latin-ext.woff2) format("woff2");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-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"Mona Sans";font-style:normal;font-weight:200 900;font-stretch:75% 125%;font-display:swap;src:url(/fonts/mona-sans-normal-latin.woff2) format("woff2");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{--bg: #0D141C;--surface: #141E29;--ink: #E8EDF3;--ink2: #9AA9BA;--rule: #22303F;--acc-l: 0.80;--acc-c: 0.12;--acc-a: 0.16;color-scheme:dark;--ease-out: cubic-bezier(0.23, 1, 0.32, 1);--ease-in-out: cubic-bezier(0.77, 0, 0.175, 1);--sans: "Mona Sans", system-ui, -apple-system, "Segoe UI", sans-serif;--mono: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace;--gutter: 40px;--indent: 152px}@media (prefers-color-scheme: light){:root:not(.dark){--bg: #F3F6F9;--surface: #FFFFFF;--ink: #121A23;--ink2: #4E5C6C;--rule: #D9E0E7;--acc-l: 0.49;--acc-c: 0.14;--acc-a: 0.12;color-scheme:light}}:root.light{--bg: #F3F6F9;--surface: #FFFFFF;--ink: #121A23;--ink2: #4E5C6C;--rule: #D9E0E7;--acc-l: 0.49;--acc-c: 0.14;--acc-a: 0.12;color-scheme:light}:root,[data-hue]{--acc: oklch(var(--acc-l) var(--acc-c) var(--h, 200));--acc-dim: oklch(var(--acc-l) var(--acc-c) var(--h, 200) / var(--acc-a))}*,*::before,*::after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);font-stretch:100%;font-size:18.5px;line-height:1.65;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;min-height:100dvh;display:flex;flex-direction:column}main{flex:1;width:100%}::selection{background:var(--acc);color:var(--bg)}svg{display:block}img{max-width:100%;height:auto}a{color:inherit;text-decoration-line:underline;text-decoration-color:var(--rule);text-decoration-thickness:1px;text-underline-offset:4px;transition:color 150ms ease,text-decoration-color 150ms ease}a:focus-visible,button:focus-visible{outline:2px solid var(--acc);outline-offset:3px;border-radius:4px}@media (hover: hover) and (pointer: fine){a:hover{color:var(--acc);text-decoration-color:var(--acc)}}.skip{position:absolute;left:12px;top:-48px;z-index:10;background:var(--surface);padding:8px 12px;border-radius:8px;text-decoration:none}.skip:focus{top:12px}.wrap{max-width:1240px;margin:0 auto;padding:0 var(--gutter)}h1,h2,h3{font-stretch:112%;font-weight:640;text-wrap:balance;margin:0}h1{letter-spacing:-.03em;line-height:1.02}h2{font-size:26px;line-height:1.2;letter-spacing:-.015em}h3{font-size:22px;line-height:1.25;letter-spacing:-.015em}.trace path{fill:none;stroke:var(--acc);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}.trace.big path{stroke-width:2}header.top .wrap{display:flex;justify-content:space-between;align-items:center;height:76px}.mark{display:flex;align-items:center;gap:12px;text-decoration:none;font-weight:650;font-stretch:125%;font-size:20px;letter-spacing:-.01em}nav.main{display:flex;align-items:center;gap:28px;font-size:16px}nav.main a{text-decoration:none;color:var(--ink2)}nav.main a[aria-current=page]{color:var(--ink)}.theme{all:unset;cursor:pointer;display:inline-flex;padding:6px;margin:-6px -6px -6px 0;border-radius:8px;color:var(--ink2);transition:color 150ms ease,background-color 150ms ease,transform 120ms var(--ease-out)}.theme:active{transform:scale(.92)}@media (hover: hover) and (pointer: fine){.theme:hover{color:var(--ink);background:var(--surface)}}.theme .i-moon{display:none}:root.light .theme .i-sun{display:none}:root.light .theme .i-moon{display:block}footer.foot{border-top:1px solid var(--rule);margin-top:72px}footer.foot .wrap{display:flex;flex-wrap:wrap;gap:10px 24px;justify-content:space-between;align-items:center;padding-top:22px;padding-bottom:28px;font-size:15px;color:var(--ink2)}footer.foot .l{display:flex;gap:20px}.hero{display:grid;grid-template-columns:minmax(0, 6fr) minmax(0, 5fr);gap:48px;align-items:center;padding:48px 0 40px}.hero h1{font-size:64px;margin-bottom:24px}.intro{font-size:21px;line-height:1.55;margin:0 0 24px;max-width:36ch}.links{display:flex;gap:22px;font-size:16px;color:var(--ink2)}.scope .trace{width:100%;height:auto;aspect-ratio:1;max-width:460px;margin-left:auto}.scope .cap{text-align:right;font-family:var(--mono);font-size:13px;color:var(--ink2);margin:8px 0 0;min-height:2.6em;font-variant-numeric:tabular-nums}.scope .cap b{color:var(--acc);font-weight:500}@media (prefers-reduced-motion: no-preference){.scope.draw .trace path{stroke-dasharray:var(--len);animation:trace-draw 1400ms var(--ease-out) 150ms both}}@keyframes trace-draw{from{stroke-dashoffset:var(--len)}to{stroke-dashoffset:0}}.cols{display:grid;grid-template-columns:minmax(0, 7fr) minmax(0, 5fr);gap:64px;padding-top:36px;border-top:1px solid var(--rule)}.cols h2{margin-bottom:14px}.group+.group{margin-top:40px}.all{display:inline-block;margin-top:10px;font-size:16px}.row{display:grid;grid-template-columns:40px minmax(0, 1fr) auto;gap:0 16px;align-items:center;padding:12px 10px;margin:0 -10px;border-radius:10px;text-decoration:none;transition:background-color 150ms ease}.row .t{font-size:18.5px;font-weight:560;line-height:1.3}.row .date{font-family:var(--mono);font-size:13px;color:var(--ink2);font-variant-numeric:tabular-nums}.row .d{grid-column:2/-1;font-size:15.5px;color:var(--ink2);line-height:1.45;margin-top:2px}.row:focus-visible{background:var(--surface);outline-offset:0}@media (hover: hover) and (pointer: fine){.row:hover{background:var(--surface);color:var(--ink)}.row:hover .t{color:var(--acc)}}.proj{display:grid;grid-template-columns:40px minmax(0, 1fr);gap:0 16px;padding:12px 0}.proj .name{font-weight:640;font-stretch:112%;font-size:18.5px;text-decoration:none}.proj .st{font-family:var(--mono);font-size:12.5px;color:var(--ink2);margin-left:8px}.proj p{grid-column:2;margin:2px 0 0;font-size:15.5px;line-height:1.5;color:var(--ink2)}.ihead{padding:48px 0 28px;max-width:980px;margin-left:var(--indent)}.ihead h1{font-size:58px}.ihead .lede{margin-top:14px}.ihead .meta{margin-top:16px}.index,.plist,.tags{margin-left:var(--indent);max-width:860px}.year{display:grid;grid-template-columns:96px minmax(0, 1fr);gap:0 24px;padding:20px 0;border-top:1px solid var(--rule)}.year h2{font-family:var(--mono);font-stretch:100%;font-size:13px;font-weight:400;color:var(--ink2);letter-spacing:0;padding-top:16px;font-variant-numeric:tabular-nums}.plist{border-top:1px solid var(--rule);padding-top:8px}.tagrows{border-top:1px solid var(--rule);padding-top:12px}.plist .proj{padding:18px 0;border-bottom:1px solid var(--rule)}.tags{list-style:none;padding:0;border-top:1px solid var(--rule);display:grid;grid-template-columns:repeat(2, minmax(0, 1fr));column-gap:32px;padding-top:8px}.tags a{display:grid;grid-template-columns:28px minmax(0, 1fr) auto;gap:14px;align-items:center;padding:10px 10px;margin:0 -10px;border-radius:10px;text-decoration:none}.tags .t{font-weight:560}.tags .date{font-family:var(--mono);font-size:13px;color:var(--ink2)}@media (hover: hover) and (pointer: fine){.tags a:hover{background:var(--surface);color:var(--ink)}.tags a:hover .t{color:var(--acc)}}.phead{display:grid;grid-template-columns:120px minmax(0, 1fr);gap:32px;align-items:start;padding:48px 0 36px;max-width:980px}.phead h1{font-size:58px}.lede{font-size:22px;color:var(--ink2);margin:14px 0 0;line-height:1.45;max-width:46ch}.meta{font-family:var(--mono);font-size:13.5px;color:var(--ink2);margin-top:16px;display:flex;gap:6px 18px;flex-wrap:wrap;font-variant-numeric:tabular-nums}.meta a{color:var(--ink2)}.facts{display:grid;grid-template-columns:max-content minmax(0, 1fr);gap:6px 22px;margin:20px 0 0;font-size:16px}.facts dt{font-family:var(--mono);font-size:13px;color:var(--ink2);padding-top:3px}.facts dd{margin:0}.prose{max-width:68ch;margin-left:var(--indent)}.prose.wide{max-width:980px}.prose.wide>p,.prose.wide>ul,.prose.wide>ol{max-width:62ch}.prose>*+*{margin-top:0}.prose p,.prose ul,.prose ol,.prose blockquote,.prose table{margin:0 0 20px}.prose ul,.prose ol{padding-left:1.2em}.prose li+li{margin-top:4px}.prose h2{position:relative;margin:56px 0 14px;scroll-margin-top:24px}.prose h3{position:relative;margin:40px 0 10px;scroll-margin-top:24px}.prose strong{font-weight:640}.prose hr{border:0;border-top:1px solid var(--rule);margin:40px 0}.prose blockquote{margin-left:0;padding:2px 0 2px 20px;border-left:1px solid var(--rule);color:var(--ink2);font-style:italic}.prose blockquote p:last-child{margin-bottom:0}.prose table{border-collapse:collapse;width:100%;font-size:16px;display:block;overflow-x:auto}.prose th,.prose td{text-align:left;padding:8px 14px 8px 0;border-bottom:1px solid var(--rule);vertical-align:top}.prose th{font-family:var(--mono);font-size:13px;font-weight:400;color:var(--ink2)}.hn{position:absolute;left:-72px;width:48px;top:.3em;text-align:right;font-family:var(--mono);font-size:13px;font-weight:400;color:var(--ink2);text-decoration:none;opacity:0;transition:opacity 150ms ease,color 150ms ease}.prose h2:hover .hn,.prose h3:hover .hn,.hn:focus-visible{opacity:1}.numbered>p{position:relative}.pn{position:absolute;left:-72px;width:48px;top:5px;text-align:right;font-family:var(--mono);font-size:12px;color:var(--ink2);text-decoration:none;font-variant-numeric:tabular-nums}@media (hover: hover) and (pointer: fine){.pn:hover,.hn:hover{color:var(--acc)}}.numbered>p:target{background:var(--acc-dim);box-shadow:0 0 0 10px var(--acc-dim);border-radius:2px}.numbered>p:target .pn{color:var(--acc)}.verdict{display:flex;gap:10px;align-items:baseline;color:var(--ink2);font-style:italic}.verdict .tag{font-style:normal;font-family:var(--mono);font-size:12.5px;color:var(--ink2);border:1px solid var(--rule);border-radius:999px;padding:2px 9px;white-space:nowrap}.pager{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin:64px 0 0 var(--indent);max-width:68ch;border-top:1px solid var(--rule);padding-top:20px}.pager a{text-decoration:none;display:flex;flex-direction:column;gap:4px;padding:10px;margin:-10px;border-radius:10px}.pager .next{text-align:right}.pager .k{font-family:var(--mono);font-size:12.5px;color:var(--ink2)}.pager .t{font-weight:560;line-height:1.3}@media (hover: hover) and (pointer: fine){.pager a:hover{background:var(--surface);color:var(--ink)}.pager a:hover .t{color:var(--acc)}}figure.media{margin:0 0 40px var(--indent);max-width:980px}figure.media video{display:block;width:100%;height:auto;aspect-ratio:16/9;background:var(--surface);border:1px solid var(--rule);border-radius:12px}figure.media figcaption{font-size:14.5px;color:var(--ink2);margin-top:10px}.dec{padding:22px 0;border-top:1px solid var(--rule)}.dec h3{margin:0 0 4px}.dec .id{display:block;font-family:var(--mono);font-size:12.5px;color:var(--ink2);margin-bottom:12px}.dec .three{display:grid;grid-template-columns:repeat(3, minmax(0, 1fr));gap:20px;font-size:16px;line-height:1.55}.dec dl{margin:0}.dec dt{font-family:var(--mono);font-size:12.5px;color:var(--ink2);margin-bottom:4px}.dec dt.chose{color:var(--acc)}.dec dd{margin:0}.related{margin-top:6px}figure.inline{margin:12px 0 30px}figure.inline .fig{width:100%;height:auto}figure.inline figcaption{font-size:14.5px;color:var(--ink2);margin-top:10px}.fig-port{display:none}.fig rect.box{fill:var(--surface);stroke:var(--rule);stroke-width:1.2}.fig rect.box.outer{fill:rgba(0,0,0,0)}.fig rect.relay{fill:var(--acc-dim);stroke:var(--acc);stroke-width:1.6}.fig text{font-family:var(--sans);font-size:15px;font-weight:600;fill:var(--ink)}.fig text.sub{font-family:var(--mono);font-size:12px;font-weight:400;fill:var(--ink2)}.fig text.sub.key{fill:var(--acc)}.fig .el{font-family:var(--mono);font-size:12px;font-weight:400;fill:var(--ink2)}.fig .edge{stroke:var(--acc);stroke-width:1.6;fill:none}.fig .edge.dash{stroke:var(--ink2);stroke-dasharray:4 6;stroke-width:1.2}.fig .arrow{fill:var(--acc)}.fig .arrow-dim{fill:var(--ink2)}.mermaid-fig pre.mermaid{background:var(--surface);border:1px solid var(--rule);border-radius:10px;padding:18px;overflow-x:auto}code{font-family:var(--mono);font-size:.82em;background:var(--surface);border-radius:5px;padding:1px 6px}pre{font-family:var(--mono);font-size:14.5px;line-height:1.7;background:var(--surface);border:1px solid var(--rule);border-radius:10px;padding:18px 22px;margin:0 0 24px;overflow-x:auto;tab-size:4}pre code{background:none;padding:0;font-size:inherit;border-radius:0}pre mark{background:var(--acc-dim);color:var(--acc);border-radius:3px;padding:1px 3px;box-shadow:inset 0 -1.5px 0 var(--acc)}.z-code{color:var(--ink)}.z-comment,.z-punctuation.z-definition.z-comment{color:var(--ink2);font-style:italic}.z-keyword,.z-storage,.z-keyword.z-control{color:var(--acc)}.z-string{color:var(--ink);opacity:.86}.z-constant.z-numeric,.z-constant.z-language,.z-constant.z-character{color:var(--acc);opacity:.85}.z-entity.z-name.z-function,.z-support.z-function{font-weight:500}.z-entity.z-name.z-type,.z-support.z-type,.z-storage.z-type{color:var(--acc)}.z-invalid{text-decoration:underline wavy}@media (max-width: 980px){:root{--gutter: 20px;--indent: 0px}.hero,.cols{grid-template-columns:minmax(0, 1fr);gap:28px}.hero{padding-top:24px}.hero h1{font-size:44px}.scope .trace{max-width:300px;margin:0}.scope .cap{text-align:left}.phead{grid-template-columns:minmax(0, 1fr);gap:18px;padding-top:28px}.phead .trace{width:72px;height:72px}.phead h1,.ihead h1{font-size:40px}.ihead{padding-top:28px}.row .d{display:none}nav.main{gap:16px;font-size:15px}.pn{position:static;display:inline;margin-right:8px}.hn{display:none}.verdict{display:block}.verdict .tag{display:inline-block;margin-bottom:6px}.dec .three{grid-template-columns:minmax(0, 1fr);gap:12px}.fig-land{display:none}.fig-port{display:block;max-width:400px}.year{grid-template-columns:minmax(0, 1fr)}.year h2{padding-top:0}.tags{grid-template-columns:minmax(0, 1fr)}.pager{grid-template-columns:minmax(0, 1fr)}.pager .next{text-align:left}}@media (max-width: 400px){.mark span{font-size:18px}nav.main{gap:13px}}