@font-face{font-family:"Source Serif 4";font-style:normal;font-display:swap;font-weight:200 900;src:url(/fonts/source-serif-4-latin-wght-normal.woff2) format("woff2-variations"),url(/fonts/source-serif-4-latin-wght-normal.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:"Source Serif 4";font-style:normal;font-display:swap;font-weight:200 900;src:url(/fonts/source-serif-4-latin-ext-wght-normal.woff2) format("woff2-variations"),url(/fonts/source-serif-4-latin-ext-wght-normal.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:"Source Serif 4";font-style:italic;font-display:swap;font-weight:200 900;src:url(/fonts/source-serif-4-latin-wght-italic.woff2) format("woff2-variations"),url(/fonts/source-serif-4-latin-wght-italic.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:"Source Serif 4";font-style:italic;font-display:swap;font-weight:200 900;src:url(/fonts/source-serif-4-latin-ext-wght-italic.woff2) format("woff2-variations"),url(/fonts/source-serif-4-latin-ext-wght-italic.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:normal;font-display:swap;font-weight:100 800;src:url(/fonts/jetbrains-mono-latin-wght-normal.woff2) format("woff2-variations"),url(/fonts/jetbrains-mono-latin-wght-normal.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-display:swap;font-weight:100 800;src:url(/fonts/jetbrains-mono-latin-ext-wght-normal.woff2) format("woff2-variations"),url(/fonts/jetbrains-mono-latin-ext-wght-normal.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:JetBrains Mono;font-style:italic;font-display:swap;font-weight:100 800;src:url(/fonts/jetbrains-mono-latin-wght-italic.woff2) format("woff2-variations"),url(/fonts/jetbrains-mono-latin-wght-italic.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:italic;font-display:swap;font-weight:100 800;src:url(/fonts/jetbrains-mono-latin-ext-wght-italic.woff2) format("woff2-variations"),url(/fonts/jetbrains-mono-latin-ext-wght-italic.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-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}:root{--font-serif: "Source Serif 4", "Source Serif Pro", Charter, "Bitstream Charter", "Sitka Text", Cambria, Georgia, serif;--font-mono: "JetBrains Mono", ui-monospace, "Cascadia Mono", "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--measure: 38rem;--code: 46rem;--wide: 54rem;--gutter: clamp(1.125rem, 4vw, 2rem);--fs-label: .6875rem;--fs-xs: .75rem;--fs-sm: .875rem;--fs-body: clamp(1.0625rem, 1rem + .25vw, 1.1875rem);--fs-lede: clamp(1.3rem, 1.12rem + .75vw, 1.625rem);--fs-h3: 1.2rem;--fs-h2: clamp(1.45rem, 1.27rem + .75vw, 1.75rem);--fs-title: clamp(2.15rem, 1.45rem + 2.9vw, 3.4rem);--radius: 3px;--ease: cubic-bezier(.2, .7, .2, 1);color-scheme:light;--paper: #ffffff;--paper-2: #f6f6f5;--paper-3: #ececea;--ink: #1a1a1a;--ink-2: #474747;--ink-3: #6b6b6b;--rule: #e2e2e0;--rule-2: #c6c6c3;--accent: #0f607d;--accent-text: #0b5470;--accent-wash: #d5e7ed;--mark: #f2e3a4;--blue: #1f5fbf;--blue-wash: #e2e9f5;--violet: #6a3dbf;--violet-wash: #ebe4f6;--amber: #8a5a00;--amber-wash: #f4ead3;--green: #2f7a3b;--green-wash: #e1eee0;--red: #b3261e;--red-wash: #f6e0dc;--orange: #a84a0c;--orange-wash: #f6e5d6;--slate: #536070;--slate-wash: #e7e8ea;--series-1: #2a78d6;--series-2: #eb6834;--series-3: #1baf7a;--div-pos: #9ec5f4;--div-pos-ink: #1a1a1a;--div-mid: #ececea;--div-mid-ink: #1a1a1a;--div-neg: #f2aaa6;--div-neg-ink: #1a1a1a;--syn-comment: #6b6b6b;--syn-keyword: #6a3dbf;--syn-string: #2f6f3a;--syn-number: #8a5a00;--syn-func: #1f5fbf;--syn-key: #a8330f;--syn-builtin: #0f6a6a;--syn-punct: #474747}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){color-scheme:dark;--paper: #1c1c1c;--paper-2: #242424;--paper-3: #2e2e2e;--ink: #e6e6e6;--ink-2: #b8b8b8;--ink-3: #8f8f8f;--rule: #333333;--rule-2: #4a4a4a;--accent: #2fa9c6;--accent-text: #5cc2db;--accent-wash: #11323d;--mark: #4a3f17;--blue: #7ea9f2;--blue-wash: #19243a;--violet: #b59ef2;--violet-wash: #241d38;--amber: #e2b45c;--amber-wash: #2d2512;--green: #80c58c;--green-wash: #17291b;--red: #f28b80;--red-wash: #351b1a;--orange: #f2a26b;--orange-wash: #33210f;--slate: #a4adb9;--slate-wash: #22262c;--series-1: #3987e5;--series-2: #d95926;--series-3: #199e70;--div-pos: #256abf;--div-pos-ink: #ffffff;--div-mid: #3a3a3a;--div-mid-ink: #e6e6e6;--div-neg: #b8403f;--div-neg-ink: #ffffff;--syn-comment: #8f8f8f;--syn-keyword: #bba5f3;--syn-string: #92cf9b;--syn-number: #e2b763;--syn-func: #86b0f4;--syn-key: #ff9b76;--syn-builtin: #74c9c3;--syn-punct: #b8b8b8}}:root[data-theme=dark]{color-scheme:dark;--paper: #1c1c1c;--paper-2: #242424;--paper-3: #2e2e2e;--ink: #e6e6e6;--ink-2: #b8b8b8;--ink-3: #8f8f8f;--rule: #333333;--rule-2: #4a4a4a;--accent: #2fa9c6;--accent-text: #5cc2db;--accent-wash: #11323d;--mark: #4a3f17;--blue: #7ea9f2;--blue-wash: #19243a;--violet: #b59ef2;--violet-wash: #241d38;--amber: #e2b45c;--amber-wash: #2d2512;--green: #80c58c;--green-wash: #17291b;--red: #f28b80;--red-wash: #351b1a;--orange: #f2a26b;--orange-wash: #33210f;--slate: #a4adb9;--slate-wash: #22262c;--series-1: #3987e5;--series-2: #d95926;--series-3: #199e70;--div-pos: #256abf;--div-pos-ink: #ffffff;--div-mid: #3a3a3a;--div-mid-ink: #e6e6e6;--div-neg: #b8403f;--div-neg-ink: #ffffff;--syn-comment: #8f8f8f;--syn-keyword: #bba5f3;--syn-string: #92cf9b;--syn-number: #e2b763;--syn-func: #86b0f4;--syn-key: #ff9b76;--syn-builtin: #74c9c3;--syn-punct: #b8b8b8}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;scroll-padding-top:1.5rem;hanging-punctuation:first last}body{margin:0;min-height:100vh;display:flex;flex-direction:column;background:var(--paper);color:var(--ink);font-family:var(--font-serif);font-size:var(--fs-body);line-height:1.6;font-kerning:normal;font-optical-sizing:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}main{flex:1 0 auto}h1,h2,h3,h4,h5,h6{margin:0;font-weight:640;line-height:1.15;letter-spacing:-.012em;text-wrap:balance}p,ul,ol,dl,dd,figure,blockquote,pre{margin:0}p,li,dd{text-wrap:pretty}img,svg,video{max-width:100%;height:auto}a{color:inherit}button{font:inherit;color:inherit}code,kbd,samp,pre{font-family:var(--font-mono);font-variant-numeric:normal;font-variant-ligatures:none}::selection{background:var(--accent-wash);color:var(--ink)}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:1px}.skip-link{position:absolute;left:var(--gutter);top:-4rem;z-index:10;padding:.5rem .75rem;background:var(--ink);color:var(--paper);font-size:var(--fs-sm);text-decoration:none}.skip-link:focus{top:.75rem}.visually-hidden{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}@media(prefers-reduced-motion:reduce){:not(svg,svg *),:before,:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}.container{width:min(var(--measure),100% - 2 * var(--gutter));margin-inline:auto}.site-header{padding-block:clamp(1.25rem,3vw,1.75rem)}.header-inner{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.75rem 1.5rem}.wordmark{font-size:1.15rem;font-weight:650;line-height:1.25;color:var(--ink);text-decoration:none}.nav{display:flex;align-items:center;gap:clamp(.85rem,2.6vw,1.5rem);font-size:1rem}.nav a{padding-block:.35rem;border-bottom:1px solid transparent;color:var(--ink-2);text-decoration:none;transition:color .15s var(--ease),border-color .15s var(--ease)}.nav a:hover{color:var(--ink)}.nav a[aria-current]{color:var(--ink);border-bottom-color:var(--accent)}.theme-toggle{display:inline-grid;place-items:center;width:2rem;height:2rem;margin-right:-.4rem;padding:0;border:0;border-radius:50%;background:none;color:var(--ink-2);cursor:pointer;transition:color .15s var(--ease),background .15s var(--ease)}.theme-toggle[hidden]{display:none}.theme-toggle:hover{color:var(--ink);background:var(--paper-2)}.theme-toggle svg{display:none;width:1.05rem;height:1.05rem}.theme-toggle[data-mode=system] .icon-system,.theme-toggle[data-mode=light] .icon-light,.theme-toggle[data-mode=dark] .icon-dark{display:block}.site-footer{margin-top:clamp(4.5rem,10vw,7.5rem);padding-block:1.5rem 3rem;font-size:var(--fs-sm);color:var(--ink-3)}.footer-inner{display:flex;flex-wrap:wrap;justify-content:space-between;gap:.5rem 2rem;padding-top:1.25rem;border-top:1px solid var(--rule)}.footer-inner p{margin:0}.footer-links{display:flex;gap:1.25rem;margin:0;padding:0;list-style:none}.footer-links a{color:var(--ink-2)}.footer-links a:hover{color:var(--accent-text)}.home-art{padding-top:clamp(1.5rem,5vw,3rem)}.home-art svg{display:block;width:100%;height:auto}.bridge .br-town{stroke:var(--ink-3);opacity:.55}.bridge :is(.br-land,.br-water){stroke:var(--ink-3)}.bridge .br-water path+path{opacity:.6}.bridge :is(.br-hangers,.br-arch,.br-rail,.br-deck){stroke:var(--accent)}.bridge .br-deck{fill:var(--paper)}.bridge .br-piers{fill:var(--accent)}.intro{padding-top:clamp(2rem,7vw,4.5rem)}.home-art+.intro{padding-top:clamp(1.5rem,4vw,2.5rem)}.lede{font-size:var(--fs-lede);line-height:1.42;letter-spacing:-.006em}.lede>*+*{margin-top:.7em}.lede a{color:var(--accent-text);text-decoration-thickness:1px;text-underline-offset:.18em}.page-header{padding-top:clamp(2rem,6vw,4rem)}.page-title{font-size:var(--fs-title);line-height:1.04;letter-spacing:-.022em;overflow-wrap:anywhere}.page-dek{margin-top:1rem;font-size:var(--fs-lede);line-height:1.42;color:var(--ink-2)}.page-header+:is(.log,.projects,.term-list){margin-top:2rem}.section{margin-top:clamp(3rem,7vw,4rem)}.section-title{margin-bottom:.4rem;font-size:var(--fs-h3)}.section-more{display:inline-block;margin-top:1rem;color:var(--accent-text)}.empty{color:var(--ink-2);font-style:italic}.log{margin:0;padding:0;list-style:none}.log-item{padding-block:.9rem}.log-title{font-size:1.28rem;font-weight:620;line-height:1.25;letter-spacing:-.01em}.log-title a{color:var(--ink);text-decoration:none}.log-title a:hover{color:var(--accent-text);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.18em}.log-date{margin-top:.2rem;font-size:var(--fs-sm);color:var(--ink-3)}.log-desc{margin-top:.35rem;font-size:1rem;line-height:1.5;color:var(--ink-2)}.projects{margin:0;padding:0;list-style:none}.project{padding-block:.9rem}.project-name{font-size:1.28rem;font-weight:620;line-height:1.25}.project-name a{color:var(--ink);text-decoration:none}.project-name a:hover{color:var(--accent-text);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.18em}.project-desc{margin-top:.3rem;font-size:1rem;line-height:1.5;color:var(--ink-2)}.project-links{margin-top:.35rem;font-size:var(--fs-sm);color:var(--ink-3)}.project-links a{color:var(--accent-text)}.project-facts{margin-top:1.25rem;color:var(--ink-2)}.project-facts+.project-links{margin-top:.3rem;font-size:1rem}.project-body{margin-top:2rem}.page .project-body>*+*{margin-top:1.1em}.term-list{display:flex;flex-wrap:wrap;gap:.5rem 1.4rem;margin:0;padding:0;list-style:none}.term-list a{color:var(--accent-text)}.term-list .count{margin-left:.3em;color:var(--ink-3);font-size:var(--fs-sm)}.activity{margin:0}.activity-scroll{overflow-x:auto;direction:rtl;scrollbar-width:thin;padding-bottom:.4rem}.activity-graph{display:block;direction:ltr;width:100%;min-width:36rem;height:auto}.activity-label{font-size:10px;fill:var(--ink-3)}.activity .l0{fill:color-mix(in srgb,var(--ink) 8%,var(--paper));background:color-mix(in srgb,var(--ink) 8%,var(--paper))}.activity .l1{fill:color-mix(in srgb,var(--accent) 32%,var(--paper));background:color-mix(in srgb,var(--accent) 32%,var(--paper))}.activity .l2{fill:color-mix(in srgb,var(--accent) 56%,var(--paper));background:color-mix(in srgb,var(--accent) 56%,var(--paper))}.activity .l3{fill:color-mix(in srgb,var(--accent) 78%,var(--paper));background:color-mix(in srgb,var(--accent) 78%,var(--paper))}.activity .l4{fill:var(--accent);background:var(--accent)}.activity-graph rect:hover{stroke:var(--ink);stroke-width:1}.activity-meta{display:flex;flex-wrap:wrap;justify-content:space-between;gap:.4rem 1.5rem;margin-top:.8rem;font-size:var(--fs-sm);color:var(--ink-3)}.activity-meta a{color:var(--ink-2);text-decoration-color:var(--rule-2);text-underline-offset:.22em}.activity-meta a:hover{color:var(--accent-text)}.activity-legend{display:inline-flex;align-items:center;gap:3px;white-space:nowrap}.activity-legend i{display:inline-block;width:10px;height:10px;border-radius:2px}.activity-legend i:first-child{margin-left:.4rem}.activity-legend i:last-child{margin-right:.4rem}.post-header{width:min(var(--measure),100% - 2 * var(--gutter));margin-inline:auto;padding-top:clamp(2rem,6vw,4rem)}.post-title{font-size:var(--fs-title);font-weight:650;line-height:1.04;letter-spacing:-.024em}.post-dek{margin-top:1rem;font-size:var(--fs-lede);line-height:1.4;letter-spacing:-.005em;color:var(--ink-2)}.byline{margin-top:1.4rem;font-size:var(--fs-sm);color:var(--ink-3)}.byline .draft{color:var(--accent-text)}.post-body{display:grid;grid-template-columns:[full-start] minmax(0,1fr) [main-start] minmax(0,var(--wide)) [main-end] minmax(0,1fr) [full-end];column-gap:var(--gutter);margin-top:clamp(2rem,5vw,2.75rem)}.post-body>.prose,.post-body>.toc-inline{grid-column:main}.toc-rail{display:none}@media(min-width:88rem){.post-body>.toc-inline{display:none}.toc-rail{display:block;grid-column:full-start / main-start;grid-row:1 / span 2;justify-self:end;align-self:start;position:sticky;top:2rem;width:min(15rem,100% - 1.5rem);max-height:calc(100vh - 4rem);overflow-y:auto}}.post-end{width:min(var(--measure),100% - 2 * var(--gutter));margin:clamp(3rem,7vw,4.5rem) auto 0;padding-top:1.5rem;border-top:1px solid var(--rule);font-size:var(--fs-sm);line-height:1.55;color:var(--ink-2)}.post-end>*+*{margin-top:1.75rem}.post-end a{color:var(--accent-text)}.revisions h2{font-size:1rem;color:var(--ink)}.revisions ul{margin:.4rem 0 0;padding-left:1.2em}.revisions li+li{margin-top:.25rem}.pager{display:grid;grid-template-columns:1fr 1fr;gap:1.5rem}.pager a{display:block;color:var(--ink);text-decoration:none}.pager a:hover .pager-title{color:var(--accent-text);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.18em}.pager .pager-next{grid-column:2;text-align:right}.pager-label{color:var(--ink-3)}.pager-title{display:block;margin-top:.15rem;font-size:1.02rem;font-weight:600;line-height:1.3}.subscribe{color:var(--ink-3)}.prose{display:grid;grid-template-columns:[wide-start] minmax(0,1fr) [text-start] minmax(0,var(--measure)) [text-end] minmax(0,1fr) [wide-end];counter-reset:fig sidenote}.prose>*{grid-column:text;min-width:0}.prose>*+*{margin-top:1.2em}.prose>.wide{grid-column:wide}.prose>figure.code{grid-column:wide;justify-self:center;width:100%;max-width:var(--code)}.prose>h2{position:relative;margin-top:2.7em;font-size:var(--fs-h2)}.prose>h3{position:relative;margin-top:2.1em;font-size:var(--fs-h3);font-weight:650}.prose>h4{margin-top:1.8em;font-size:1rem;font-weight:650}.prose>:is(h2,h3,h4)+*{margin-top:.75em}.anchor{margin-left:.4em;font-size:.8em;font-weight:400;color:var(--ink-3);text-decoration:none;opacity:0;transition:opacity .15s var(--ease)}:is(h2,h3,h4):hover .anchor,.anchor:focus-visible{opacity:1}.anchor:hover{color:var(--accent-text)}.prose a:not(.anchor,.footnote-ref,.footnote-backref){color:var(--accent-text);text-decoration-line:underline;text-decoration-thickness:1px;text-underline-offset:.2em}.prose a:not(.anchor,.footnote-ref,.footnote-backref):hover{text-decoration-thickness:2px}.prose strong{font-weight:660}.prose em{font-style:italic}.prose :not(pre)>code{padding:.06em .32em;border:1px solid var(--rule);border-radius:var(--radius);background:var(--paper-2);font-size:.84em;overflow-wrap:anywhere}.prose kbd{padding:.05em .35em;border:1px solid var(--rule-2);border-bottom-width:2px;border-radius:var(--radius);font-size:.8em}.prose mark{padding:0 .12em;background:var(--mark);color:inherit}.prose abbr[title]{text-decoration:underline dotted var(--ink-3);text-underline-offset:.2em;cursor:help}.prose :is(ul,ol){padding-left:1.35em}.prose li+li,.prose li>:is(ul,ol){margin-top:.4em}.prose li::marker{color:var(--ink-3)}.prose li>p+p{margin-top:.6em}.prose>blockquote{padding-left:1.15rem;border-left:2px solid var(--rule-2);font-style:italic;color:var(--ink-2)}.prose>blockquote>*+*{margin-top:.8em}.prose>hr{justify-self:center;width:6rem;margin-block:2.6em;border:0;border-top:1px solid var(--rule-2)}.table-wrap{overflow-x:auto}.prose table{width:100%;border-collapse:collapse;font-size:var(--fs-sm);line-height:1.45;font-variant-numeric:tabular-nums}.prose th{padding:.5rem .9rem .45rem 0;border-bottom:1px solid var(--rule-2);font-weight:650;text-align:left;white-space:nowrap}.prose td{padding:.55rem .9rem .55rem 0;border-bottom:1px solid var(--rule);vertical-align:top}.prose :is(th,td).align-center{text-align:center}.prose :is(th,td).align-right{text-align:right}.prose td code{white-space:nowrap}.prose sup{line-height:0}.footnote-ref{padding:0 .1em;font-size:.75em;font-weight:600;color:var(--accent-text);text-decoration:none}.prose>.footnotes{margin-top:3.5em;font-size:var(--fs-sm);line-height:1.5;color:var(--ink-2)}.footnotes hr{width:4rem;margin:0 0 1.25rem;border:0;border-top:1px solid var(--rule-2)}.footnotes ol{padding-left:1.5em}.footnotes li+li{margin-top:.5em}.footnote-backref{margin-left:.25em;color:var(--ink-3);text-decoration:none}.footnote-backref:hover{color:var(--accent-text)}.redact{padding:0 .08em;border-radius:1px;background:var(--ink);color:transparent;cursor:help;-webkit-box-decoration-break:clone;box-decoration-break:clone;transition:color .2s var(--ease),background-color .2s var(--ease)}.redact:hover,.redact:focus-visible{background:var(--accent-wash);color:var(--ink)}.sn-ref{counter-increment:sidenote;cursor:pointer}.sn-ref:after{content:counter(sidenote);position:relative;top:-.5em;padding:0 .1em;font-size:.75em;font-weight:600;line-height:0;color:var(--accent-text)}.sn-ref:has(+.sn-toggle:focus-visible){outline:2px solid var(--accent);outline-offset:2px}.sidenote{display:none;float:left;clear:both;width:100%;margin:.6rem 0;padding:.55rem 0 .55rem .9rem;border-left:2px solid var(--accent);font-size:var(--fs-sm);line-height:1.5;color:var(--ink-2)}.sn-toggle:checked+.sidenote{display:block}.sidenote:before{content:counter(sidenote) ". ";font-size:.9em;font-weight:600;color:var(--accent-text)}@media(min-width:75rem){.sn-ref{cursor:default}.prose>:has(>.sidenote){position:relative}.sidenote,.sn-toggle:checked+.sidenote{display:block;position:absolute;left:calc(100% + 2.5rem);float:none;width:13rem;margin:.35rem 0 0;padding:0;border:0;font-size:.82rem}}figure.code{margin-inline:0;border:1px solid var(--rule);border-radius:var(--radius);background:var(--paper-2);overflow:hidden}.code-head{display:flex;align-items:center;gap:.85rem;min-height:2.1rem;padding:.3rem .5rem .3rem .95rem;border-bottom:1px solid var(--rule);font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--ink-3)}.code-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-2)}.copy{margin-left:auto;padding:.2rem .5rem;border:1px solid transparent;border-radius:2px;background:none;font-size:var(--fs-xs);color:var(--ink-3);cursor:pointer}.copy:hover{border-color:var(--rule-2);color:var(--ink)}.copy[data-state=done]{color:var(--green)}figure.code .highlight,figure.code pre{margin:0}figure.code pre{padding:.95rem 1.1rem 1rem;overflow-x:auto;background:transparent!important;font-size:.83rem;line-height:1.65;tab-size:4}figure.code pre:focus-visible{outline-offset:-2px}.chroma .hl{display:block;margin-inline:-1.1rem;padding-inline:1.1rem;background:var(--accent-wash);box-shadow:inset 2px 0 0 var(--accent)}.chroma .ln,.chroma .lnt{margin-right:1.1em;color:var(--ink-3);user-select:none}.chroma .lnlinks{color:inherit;text-decoration:none}.chroma .err{color:var(--red)}.chroma :is(.c,.ch,.cm,.c1,.cs,.cp,.cpf){color:var(--syn-comment);font-style:italic}.chroma :is(.k,.kc,.kd,.kn,.kp,.kr){color:var(--syn-keyword)}.chroma :is(.kt,.nb,.bp){color:var(--syn-builtin)}.chroma :is(.s,.sa,.sb,.sc,.dl,.sd,.s2,.se,.sh,.si,.sx,.sr,.s1,.ss){color:var(--syn-string)}.chroma :is(.m,.mb,.mf,.mh,.mi,.il,.mo,.no){color:var(--syn-number)}.chroma :is(.nf,.fm,.nc,.nn,.ne,.nd){color:var(--syn-func)}.chroma :is(.na,.nt,.py),code:is([data-lang=toml],[data-lang=ini]) .nx{color:var(--syn-key)}.chroma :is(.o,.ow,.p){color:var(--syn-punct)}.chroma .gd{color:var(--red)}.chroma .gi{color:var(--green)}.chroma :is(.gh,.gu){color:var(--syn-func);font-weight:600}.chroma .ge{font-style:italic}.chroma .gs{font-weight:600}.chroma .gp{color:var(--ink-3);user-select:none}.callout{--c: var(--slate);padding:.85rem 1.1rem .95rem;border-left:2px solid var(--c);background:color-mix(in srgb,var(--c) 6%,var(--paper))}.callout-label{margin-bottom:.3rem;font-weight:650;color:var(--c)}.callout-title{color:var(--ink)}.callout-body{font-size:.95em;line-height:1.55}.callout-body>*+*{margin-top:.7em}.callout-body :is(ul,ol){padding-left:1.25em}.callout--note{--c: var(--blue)}.callout--tip{--c: var(--green)}.callout--important{--c: var(--violet)}.callout--warning{--c: var(--amber)}.callout--caution{--c: var(--red)}.callout--invariant{--c: var(--ink);border:1px solid var(--rule-2);background:var(--paper)}.callout--scope{--c: var(--ink-3);border-left-style:dashed;background:transparent}.prose>figure{margin-inline:0}.prose>figure.wide,.prose>figure.diagram{grid-column:wide}figure>img{display:block;margin-inline:auto;border-radius:var(--radius)}figcaption{margin-top:.6rem;font-size:var(--fs-sm);line-height:1.5;color:var(--ink-2)}figure.numbered{counter-increment:fig}figure.numbered figcaption:before{content:"Figure " counter(fig) ". ";font-weight:650;color:var(--ink)}.diagram-canvas{display:block;padding:clamp(.75rem,3vw,1.6rem);border:1px solid var(--rule);border-radius:var(--radius);background:var(--paper);overflow-x:auto}.diagram-canvas>svg{display:block;width:100%;height:auto;margin-inline:auto}pre.mermaid{margin:0;width:100%;font-family:var(--font-mono);font-size:13px;line-height:1.4;text-align:center;white-space:pre}pre.mermaid:not([data-processed]){min-height:12rem;color:transparent;overflow:hidden}pre.mermaid svg{max-width:100%!important;height:auto}.diagram-error{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--red);white-space:pre-wrap;text-align:left}.d-svg{font-family:var(--font-mono)}.diagram-canvas>svg.d-svg{min-width:38rem}.d-svg .d-x-bg{fill:var(--paper);stroke:var(--red)}.d-svg .d-x-mark{stroke:var(--red);stroke-width:1.5}.d-svg text{fill:var(--ink);font-size:12px}.d-svg .d-title{font-size:11px;font-weight:600;fill:var(--ink-2)}.d-svg .d-muted{fill:var(--ink-3);font-size:10.5px}.d-svg .d-zone{fill:none;stroke:var(--rule-2);stroke-dasharray:3 4}.d-svg .d-zone--raw{fill:var(--red-wash);fill-opacity:.45;stroke:var(--red);stroke-opacity:.55}.d-svg .d-box{fill:var(--paper);stroke:var(--ink);stroke-width:1}.d-svg .d-box--agent{fill:var(--blue-wash);stroke:var(--blue)}.d-svg .d-box--step{fill:var(--violet-wash);stroke:var(--violet)}.d-svg .d-box--safe{fill:var(--green-wash);stroke:var(--green)}.d-svg .d-box--raw{fill:var(--paper);stroke:var(--red)}.d-svg .d-line{fill:none;stroke:var(--ink-2);stroke-width:1.25}.d-svg .d-line--safe{stroke:var(--green)}.d-svg .d-line--raw{stroke:var(--red)}.d-svg .d-line--blocked{stroke:var(--red);stroke-dasharray:4 4}.d-svg .d-head{fill:var(--ink-2)}.d-svg .d-head--safe{fill:var(--green)}.d-svg .d-head--raw{fill:var(--red)}.d-svg .d-boundary{fill:var(--accent)}.d-svg .d-ph{fill:var(--ink)}.d-svg .d-ph-text{fill:var(--paper);font-size:10.5px}.diagram-canvas:has(>svg.c-svg){background:var(--paper)}.diagram-canvas>svg.c-svg{min-width:38rem}.c-svg{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.c-svg text{fill:var(--ink-2);font-size:11px}.c-svg .c-title{font-family:var(--font-serif);font-size:17px;font-weight:600;fill:var(--ink)}.c-svg .c-sub{fill:var(--ink-3)}.c-svg .c-label{fill:var(--ink)}.c-svg .c-val{font-size:12px;font-weight:600;fill:var(--ink)}.c-svg .c-muted,.c-svg .c-tick{font-size:10px;fill:var(--ink-3)}.c-svg .c-grid{stroke:var(--rule)}.c-svg .c-ref{stroke:var(--ink-3)}.c-svg .c-quad{fill:var(--accent-wash);fill-opacity:.6}.c-svg .c-s1{fill:var(--series-1)}.c-svg .c-s2{fill:var(--series-2)}.c-svg .c-s3{fill:var(--series-3)}.c-svg .c-ring{stroke:var(--paper)}.c-svg .c-cell--pos{fill:var(--div-pos)}.c-svg .c-cell--mid{fill:var(--div-mid)}.c-svg .c-cell--neg{fill:var(--div-neg)}.c-svg .c-cell-t--pos{fill:var(--div-pos-ink)}.c-svg .c-cell-t--mid{fill:var(--div-mid-ink)}.c-svg .c-cell-t--neg{fill:var(--div-neg-ink)}.c-svg .c-hit{fill:transparent}.c-svg .c-marks:hover .c-mark{opacity:.35}.c-svg .c-marks .c-mark:hover{opacity:1}.compare-grid{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:stretch;border:1px solid var(--rule);border-radius:var(--radius);background:var(--paper-2)}.compare-pane{min-width:0;padding:.9rem 1.05rem 1.05rem}.compare-label{margin-bottom:.6rem;font-size:var(--fs-sm);font-weight:650}.compare-pane--raw .compare-label{color:var(--red)}.compare-pane--safe .compare-label{color:var(--green)}.compare-pane pre{margin:0;font-size:.8rem;line-height:1.75;white-space:pre-wrap;overflow-wrap:anywhere}.compare-arrow{display:grid;place-items:center;width:2.25rem;border-inline:1px solid var(--rule);font-family:var(--font-mono);font-size:.9rem;color:var(--ink-3)}.compare-arrow:before{content:"\2192"}mark.pii{padding:.05em .15em;border-bottom:1px solid var(--red);border-radius:1px;background:var(--red-wash);color:var(--ink)}.ph{padding:.12em .32em;border-radius:2px;background:var(--ink);color:var(--paper);white-space:nowrap;font-size:.94em;-webkit-box-decoration-break:clone;box-decoration-break:clone}@media(max-width:46rem){.compare-grid{grid-template-columns:minmax(0,1fr)}.compare-arrow{width:auto;height:1.9rem;border-inline:0;border-block:1px solid var(--rule)}.compare-arrow:before{content:"\2193"}}.panes-grid{display:grid;grid-template-columns:repeat(var(--panes, 2),minmax(0,1fr));border:1px solid var(--rule);border-radius:var(--radius);background:var(--paper-2)}.panes-pane{min-width:0;padding:.9rem .95rem 1.05rem}.panes-pane+.panes-pane{border-left:1px solid var(--rule)}.panes-pane .compare-label{color:var(--ink-2)}.panes-pane--raw .compare-label{color:var(--red)}.panes-pane pre{margin:0;font-size:.76rem;line-height:1.8;white-space:pre-wrap;overflow-wrap:anywhere}.ent-a{--ent: var(--blue);--ent-wash: var(--blue-wash)}.ent-b{--ent: var(--violet);--ent-wash: var(--violet-wash)}.ent-c{--ent: var(--amber);--ent-wash: var(--amber-wash)}.ent{padding:.05em .15em;border-bottom:2px solid var(--ent);border-radius:1px;background:var(--ent-wash)}.ent:has(>.ph){padding:0;border:0;background:none}.ent .ph{background:var(--ent);color:var(--paper)}mark.leak{padding:.05em .15em;border-radius:1px;background:var(--red);color:var(--paper)}@media(max-width:60rem){.panes-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.panes-pane+.panes-pane{border-left:0}.panes-pane:nth-child(2n){border-left:1px solid var(--rule)}.panes-pane:nth-child(n+3){border-top:1px solid var(--rule)}}@media(max-width:36rem){.panes-grid{grid-template-columns:minmax(0,1fr)}.panes-pane:nth-child(2n){border-left:0}.panes-pane+.panes-pane{border-top:1px solid var(--rule)}}.rdemo .rdemo-steps{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.5rem;margin:0 0 .75rem;padding:0;list-style:none;counter-reset:rdemo;font-size:var(--fs-sm);line-height:1.35;color:var(--ink-3)}.rdemo .rdemo-steps li{margin:0;padding-top:.45rem;border-top:3px solid var(--rule);counter-increment:rdemo;transition:color .3s var(--ease),border-color .3s var(--ease)}.rdemo .rdemo-steps li:before{content:counter(rdemo) " ";font-family:var(--font-mono);font-size:.85em}.rdemo[data-step="2"] [data-for="1"],.rdemo[data-step="3"] :is([data-for="1"],[data-for="2"]),.rdemo[data-step="4"] :is([data-for="1"],[data-for="2"],[data-for="3"]){border-top-color:var(--ink-3);color:var(--ink-2)}.rdemo[data-step="1"] [data-for="1"],.rdemo[data-step="2"] [data-for="2"],.rdemo[data-step="3"] [data-for="3"],.rdemo[data-step="4"] [data-for="4"]{border-top-color:var(--accent);color:var(--ink)}.rdemo-grid{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);border:1px solid var(--rule);border-radius:var(--radius);background:var(--paper-2)}.rdemo-pane{min-width:0;padding:.9rem 1.05rem 1.05rem}.rdemo-label{display:flex;flex-wrap:wrap;justify-content:space-between;gap:.2rem .75rem;margin-bottom:.6rem;font-size:var(--fs-sm)}.rdemo-file{font-family:var(--font-mono);font-size:.8rem;color:var(--ink-3)}.rdemo-state{font-weight:650;transition:color .3s var(--ease)}.rdemo-stack{display:grid}.rdemo-stack>*{grid-area:1 / 1}.rdemo-ghost,.rdemo-alt{visibility:hidden}.rdemo-state[data-on=raw]>[data-v=raw],.rdemo-state[data-on=safe]>[data-v=safe],.rdemo[data-step="1"] .rdemo-caption>[data-v="1"],.rdemo[data-step="2"] .rdemo-caption>[data-v="2"],.rdemo[data-step="3"] .rdemo-caption>[data-v="3"],.rdemo[data-step="4"] .rdemo-caption>[data-v="4"]{visibility:visible}.rdemo-state[data-on=raw]{color:var(--red)}.rdemo-state[data-on=safe],.rdemo-pane--draft .rdemo-state{color:var(--green)}.rdemo-text{font-family:var(--font-mono);font-size:.8rem;line-height:1.75;overflow-wrap:anywhere}.rdemo-text p{margin:0 0 .6em}.rdemo-text p:last-child{margin-bottom:0}.rdemo-speaker{font-weight:650}.rdemo-tok{padding:.05em .2em;border-bottom:1px solid var(--red);border-radius:2px;background:var(--red-wash);color:var(--ink);font-weight:400;transition:background-color .25s var(--ease),color .25s var(--ease),border-color .25s var(--ease)}.rdemo-tok:has(.rdemo-live){display:inline-grid;white-space:nowrap}.rdemo-tok>*{grid-area:1 / 1;justify-self:center}.rdemo-sizer{visibility:hidden}.rdemo-tok.is-busy{border-color:transparent;background:var(--paper-3)}.rdemo-tok.is-ph{border-bottom-color:transparent;background:var(--ink);color:var(--paper);white-space:nowrap}.rdemo-tok.is-restored{border-bottom-color:var(--green);background:var(--green-wash)}.rdemo-tok.is-new{animation:rdemo-pop .35s var(--ease)}@keyframes rdemo-pop{0%{opacity:0;transform:translateY(.2em)}}.rdemo-caret:after{content:"";display:inline-block;width:.55em;height:1.1em;margin-right:-.55em;vertical-align:-.2em;background:var(--accent);animation:rdemo-blink 1s steps(1) infinite}@keyframes rdemo-blink{50%{opacity:0}}.rdemo-boundary{position:relative;display:grid;place-items:center;width:2.25rem;border-inline:1px dashed var(--rule-2);overflow:hidden}.rdemo-boundary span{writing-mode:vertical-rl;transform:rotate(180deg);font-size:var(--fs-label);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3)}.rdemo-boundary:after{content:"";position:absolute;top:50%;left:-1rem;width:.9rem;height:.45rem;border-radius:1px;background:var(--ink);opacity:0}.rdemo[data-step="3"] .rdemo-boundary:after{animation:rdemo-packet 1.1s var(--ease) infinite}@keyframes rdemo-packet{0%{left:-1rem;opacity:0}25%,75%{opacity:1}to{left:2.4rem;opacity:0}}.rdemo-bar{display:flex;align-items:baseline;justify-content:space-between;gap:1rem;min-height:2.4rem;padding-top:.5rem}.rdemo-caption{margin:0;font-size:var(--fs-sm);color:var(--ink-2)}.rdemo-play{flex:none;padding:.2rem .7rem;border:1px solid var(--rule-2);border-radius:var(--radius);background:var(--paper);color:var(--ink);font:inherit;font-size:var(--fs-sm);cursor:pointer}.rdemo-play:hover{border-color:var(--accent);color:var(--accent-text)}@media(max-width:46rem){.rdemo-grid{grid-template-columns:minmax(0,1fr)}.rdemo-boundary{width:auto;height:1.9rem;border-inline:0;border-block:1px dashed var(--rule-2)}.rdemo-boundary span{writing-mode:horizontal-tb;transform:none}.rdemo-boundary:after{display:none}}@media(prefers-reduced-motion:reduce){.rdemo:not([data-motion]) :is(.rdemo-tok,.rdemo-steps li,.rdemo-state){transition:none}.rdemo:not([data-motion]) .rdemo-tok.is-new,.rdemo:not([data-motion]) .rdemo-caret:after,.rdemo:not([data-motion]) .rdemo-boundary:after{animation:none}}.toc{font-size:var(--fs-sm);line-height:1.4}.toc-label{margin-bottom:.6rem;font-size:var(--fs-sm);font-weight:650;color:var(--ink)}.toc ul{margin:0;padding:0;list-style:none}.toc a{display:block;padding:.3rem 0 .3rem .8rem;border-left:1px solid var(--rule);color:var(--ink-2);text-decoration:none;transition:color .15s var(--ease),border-color .15s var(--ease)}.toc ul ul a{padding-left:1.6rem;font-size:var(--fs-xs)}.toc a:hover{color:var(--ink)}.toc a.is-active{border-left-color:var(--accent);color:var(--ink)}.toc-inline{width:min(var(--measure),100%);justify-self:center;margin-bottom:2.25rem;border-block:1px solid var(--rule)}.toc-inline summary{padding:.6rem 0;font-weight:650;color:var(--ink);cursor:pointer}.toc-inline nav{padding-bottom:.9rem}.todo{display:block;padding:.6rem .85rem;border:1px dashed var(--amber);background:var(--amber-wash);font-family:var(--font-mono);font-size:var(--fs-xs);line-height:1.5;color:var(--ink)}.todo-label{margin-right:.5rem;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--amber)}.page{width:min(var(--measure),100% - 2 * var(--gutter));margin-inline:auto}.page .prose{display:block;margin-top:2.25rem}.page .prose>*+*{margin-top:1.2em}.page .prose>h2{margin-top:2.4em}.not-found{padding-top:clamp(3rem,12vw,7rem)}.not-found-code{font-size:var(--fs-sm);color:var(--ink-3)}.not-found h1{margin-top:.8rem;font-size:var(--fs-title);line-height:1.1;letter-spacing:-.02em}.not-found p:not(.not-found-code){margin-top:1.1rem;font-size:var(--fs-lede);line-height:1.45;color:var(--ink-2)}.not-found a{color:var(--accent-text);text-underline-offset:.2em}
