@font-face{font-family:newsreader;src:url(/fonts/newsreader-latin-wght-normal.woff2)format("woff2");font-weight:200 800;font-style:normal;font-display:swap}@font-face{font-family:newsreader;src:url(/fonts/newsreader-latin-wght-italic.woff2)format("woff2");font-weight:200 800;font-style:italic;font-display:swap}@font-face{font-family:ibm plex mono;src:url(/fonts/ibm-plex-mono-latin-400-normal.woff2)format("woff2");font-weight:400;font-display:swap}@font-face{font-family:ibm plex mono;src:url(/fonts/ibm-plex-mono-latin-500-normal.woff2)format("woff2");font-weight:500;font-display:swap}@font-face{font-family:lato;src:url(/fonts/lato-latin-300-normal.woff2)format("woff2");font-weight:300;font-display:swap}@font-face{font-family:lato;src:url(/fonts/lato-latin-400-normal.woff2)format("woff2");font-weight:400;font-display:swap}@font-face{font-family:lato;src:url(/fonts/lato-latin-700-normal.woff2)format("woff2");font-weight:700;font-display:swap}:root{--ink:#1F1F23;--text:#26262B;--muted:#5C5C66;--soft:#45454D;--rule:#E4E2DD;--bg:#FFFFFF;--code-bg:#F6F6F8;--accent:#B35200;--accent-hover:#8A3F00;--spark:#FF8B1F;--serif:"Newsreader", Georgia, "Times New Roman", serif;--mono:"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--sans:"Lato", system-ui, -apple-system, sans-serif;--text-size:clamp(19px, 0.9rem + 0.45vw, 24px);--col:calc(var(--text-size) * 34 + 64px);--logo-invert:0;--wide:clamp(1120px, 72vw, 1440px)}*,*::before,*::after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--serif);font-optical-sizing:auto;text-rendering:optimizeLegibility}img{max-width:100%;height:auto}a{color:var(--ink);text-decoration:none}a:hover{color:var(--accent)}.wrap{max-width:var(--wide);margin:0 auto;padding:0 32px}.mono{font-family:var(--mono)}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--ink:#DEDAD2;--text:#C9C5BC;--muted:#9A979F;--soft:#B3AFA7;--rule:#33333A;--bg:#1D1D20;--code-bg:#26262A;--accent:#E08A45;--accent-hover:#FFB066;--logo-invert:1;--pen:#D3CFC6;--paper:#24231F;--greenbar:#232D21;--perf:#55524A;--paper-edge:#2E2C27;--es:#D0712A;--en:#5590CC;--tip-bg:#DEDAD2;--tip-fg:#1D1D20;--mx-bg:#26262A;--mx-fg:#DEDAD2;--mx-line:#3A3A40;--mx-dim:#A3A2AA;--stain-blend:screen;--stain-filter:brightness(1.3) saturate(0.6);--stain-night-filter:brightness(1.55) saturate(0.4);color-scheme:dark}}:root[data-theme=dark]{--ink:#DEDAD2;--text:#C9C5BC;--muted:#9A979F;--soft:#B3AFA7;--rule:#33333A;--bg:#1D1D20;--code-bg:#26262A;--accent:#E08A45;--accent-hover:#FFB066;--logo-invert:1;--pen:#D3CFC6;--paper:#24231F;--greenbar:#232D21;--perf:#55524A;--paper-edge:#2E2C27;--es:#D0712A;--en:#5590CC;--tip-bg:#DEDAD2;--tip-fg:#1D1D20;--mx-bg:#26262A;--mx-fg:#DEDAD2;--mx-line:#3A3A40;--mx-dim:#A3A2AA;--stain-blend:screen;--stain-filter:brightness(1.3) saturate(0.6);--stain-night-filter:brightness(1.55) saturate(0.4);color-scheme:dark}.site-header .wrap{display:flex;flex-wrap:wrap;gap:16px;align-items:center;justify-content:space-between;padding-top:36px;padding-bottom:36px;border-bottom:1px solid var(--ink)}.site-header .logo img{display:block;height:46px;width:auto;filter:invert(var(--logo-invert))}.site-nav{display:flex;flex-wrap:wrap;align-items:center;gap:8px 28px;font-family:var(--mono);font-size:13px}.site-nav a{padding:12px 0}.site-nav a[aria-current]{color:var(--accent)}.site-footer .wrap{display:flex;flex-wrap:wrap;gap:16px;justify-content:space-between;padding-top:32px;padding-bottom:48px;border-top:1px solid var(--rule);font-family:var(--mono);font-size:12px;color:var(--muted)}.site-footer nav{display:flex;gap:20px}.home{display:flex;flex-wrap:wrap;gap:64px;padding-top:64px;padding-bottom:64px}.home .bio{flex:1 1 300px;max-width:360px}.home .bio .lede{margin:0 0 20px;font-size:28px;line-height:1.35}.home .bio p{margin:0 0 16px;font-size:18px;line-height:1.6;color:var(--soft)}.home .bio a,.prose a,.photos-intro a{color:var(--accent);text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px}.home .bio a:hover,.prose a:hover{color:var(--accent-hover)}.home .bio img{margin-top:16px;display:block;width:100%;aspect-ratio:4/3;object-fit:cover;filter:grayscale(1)}.index{flex:999 1 520px;min-width:0}.label{margin:0 0 8px;font-family:var(--mono);font-size:12px;font-weight:500;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}.year{display:flex;flex-wrap:wrap;gap:8px 32px;padding:24px 0;border-top:1px solid var(--rule)}.year>h2{flex:0 0 64px;margin:0;padding-top:6px;font-family:var(--mono);font-size:14px;font-weight:400;color:var(--accent)}.year ul{flex:1 1 360px;margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:14px}.year li{display:flex;flex-wrap:wrap;justify-content:space-between;gap:4px 16px;align-items:baseline}.year li a{font-size:22px;line-height:1.3}.year li .cat{font-family:var(--mono);font-size:12px;color:var(--muted)}.more{margin:24px 0 0;font-family:var(--mono);font-size:13px}.more a{color:var(--accent)}.archive{padding-top:56px;padding-bottom:64px;max-width:840px}.archive h1{margin:0 0 32px;font-size:48px;font-weight:400;letter-spacing:-.01em}.terms{display:flex;flex-wrap:wrap;gap:8px 20px;margin:0 0 40px;padding:0;list-style:none;font-family:var(--mono);font-size:13px}.terms a{color:var(--accent)}.post-hero{position:relative;margin:40px auto 0;max-width:var(--wide);padding:0 32px}.post-hero .frame{position:relative;display:block;background:#121214}.post-hero img{display:block;width:100%;height:clamp(420px,42vw,720px);object-fit:cover;opacity:.5}.post-hero .over{position:absolute;left:0;right:0;bottom:0;padding:0 56px 48px;color:#fff}.post-hero .meta{color:#d9d7d2}.post-hero .meta a{color:var(--spark)}.post-hero .meta a:hover{color:#ffb066}.post-hero h1{margin:0;max-width:18em;font-size:clamp(44px,2rem + 2vw,76px);line-height:1.05;font-weight:400;letter-spacing:-.015em}.post-head{max-width:var(--col);margin:0 auto;padding:72px 32px 0}.post-head h1{margin:0;font-size:56px;line-height:1.08;font-weight:400;letter-spacing:-.015em}.post-head .meta a{color:var(--accent)}.meta{margin:0 0 18px;font-family:var(--mono);font-size:12px;letter-spacing:.06em;color:var(--muted)}.prose{max-width:var(--col);margin:0 auto;padding:56px 32px 32px;font-size:var(--text-size);line-height:1.65;color:var(--text);overflow-wrap:break-word}.prose>.standfirst{margin:0 0 32px;font-size:1.2em;line-height:1.45;font-style:italic;color:var(--soft)}.prose p,.prose ul,.prose ol,.prose figure,.prose table{margin:0 0 24px}.prose li{margin-bottom:8px}.prose h2{margin:56px 0 16px;font-size:1.43em;line-height:1.25;font-weight:500;color:var(--ink)}.prose h3{margin:40px 0 12px;font-size:1.15em;line-height:1.3;font-weight:500;color:var(--ink)}.prose h4,.prose h5,.prose h6{margin:32px 0 8px;font-size:20px;font-weight:600;color:var(--ink)}.prose blockquote{margin:40px 0;padding:4px 0 4px 28px;border-left:3px solid var(--spark);font-size:1.24em;line-height:1.45;font-style:italic;color:var(--ink)}.prose blockquote p:last-child{margin-bottom:0}.prose img{display:block;margin:0 auto}.prose figure img,.prose p>img:only-child{width:100%}.prose figcaption{margin-top:8px;font-family:var(--mono);font-size:12px;color:var(--muted)}.prose hr{margin:48px auto;width:64px;border:0;border-top:1px solid var(--rule)}.prose code{font-family:var(--mono);font-size:.8em;background:var(--code-bg);padding:2px 5px;border-radius:3px}.prose pre{margin:0 0 24px;padding:20px 24px;background:var(--code-bg);border-radius:6px;overflow-x:auto;font-size:15px;line-height:1.6}.prose pre code{background:0 0;padding:0;font-size:inherit}.prose table{width:100%;border-collapse:collapse;font-size:17px;display:block;overflow-x:auto}.prose th,.prose td{padding:8px 12px;border-bottom:1px solid var(--rule);text-align:left}.prose iframe,.prose video{max-width:100%}.prose .video{position:relative;aspect-ratio:16/9;margin:0 0 24px}.prose .video iframe{position:absolute;inset:0;width:100%;height:100%;border:0}.post-nav{max-width:var(--col);margin:0 auto;padding:32px 32px 72px;border-top:1px solid var(--rule);display:flex;flex-wrap:wrap;gap:24px;justify-content:space-between;font-family:var(--mono);font-size:13px}.post-nav .all{color:var(--accent)}body.darkroom{--bg:#0B0B0C;--ink:#ECEAE5;--muted:#A9A8B0;--rule:#222226;--accent:#EE8A3D;--logo-invert:1;color-scheme:dark;background:var(--bg);color:var(--ink);font-family:var(--sans)}.darkroom a:hover{color:var(--spark)}.darkroom .site-header .wrap,.darkroom .site-footer .wrap{max-width:none;padding-left:32px;padding-right:32px;border-bottom:0}.darkroom .site-header .wrap{padding-top:28px;padding-bottom:28px}.darkroom .site-header .logo img{height:40px;filter:invert(1)}.darkroom .site-nav{font-family:var(--sans);font-size:12px;font-weight:700;letter-spacing:.16em;text-transform:uppercase}.darkroom .site-nav a[aria-current]{color:var(--spark)}.darkroom .site-footer .wrap{font-family:var(--sans);color:#8e8d96}.gallery{padding:8px 32px 72px;display:flex;flex-direction:column;gap:12px}.gallery .row{display:flex;flex-wrap:wrap;gap:12px}.tile{position:relative;display:block;flex:1 1 320px;overflow:hidden}.tile img{display:block;width:100%;height:100%;object-fit:cover;transition:transform .6s ease}.tile:hover img{transform:scale(1.02)}.tile.hero{flex:none;aspect-ratio:var(--ar,3/2);max-height:85vh}.tile.hero img{object-position:50% var(--focus,25%)}.row .tile{flex:var(--ar,1.5)1 0;aspect-ratio:var(--ar,3/2);min-width:0}.tile::after{content:"";position:absolute;inset:auto 0 0 0;height:96px;background:linear-gradient(to top,rgba(0,0,0,.55),transparent);pointer-events:none}.tile .name{z-index:1;position:absolute;left:20px;bottom:16px;font-size:12px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:#fff;text-shadow:0 1px 10px rgba(0,0,0,.7)}.photos-intro{max-width:640px;padding:24px 32px 32px;font-size:18px;font-weight:300;line-height:1.7;color:var(--muted)}.project-head{padding:24px 32px 32px;display:flex;flex-wrap:wrap;gap:12px 32px;align-items:baseline;justify-content:space-between}.project-head h1{margin:0;font-size:13px;font-weight:700;letter-spacing:.18em;text-transform:uppercase}.project-head .back{font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}.project{padding:0 32px 48px;display:flex;flex-direction:column;gap:32px;align-items:center}.project figure{margin:0;max-width:1400px;width:100%}.project img{display:block;margin:0 auto;max-height:88vh;width:auto}.project-nav{padding:24px 32px 72px;display:flex;justify-content:space-between;gap:24px;font-size:12px;font-weight:700;letter-spacing:.16em;text-transform:uppercase}@media(max-width:720px){.wrap,.post-hero,.post-head,.prose,.post-nav{padding-left:16px;padding-right:16px}.home{gap:40px;padding-top:40px}.home .bio{max-width:none}.home .bio .lede{font-size:24px}.year li a{font-size:19px}.post-hero .over{padding:0 20px 24px}.post-hero img{height:420px}.post-hero h1,.post-head h1{font-size:36px}.prose{padding-top:40px}.prose blockquote{font-size:22px;padding-left:20px}.archive h1{font-size:36px}.gallery,.project,.project-head,.photos-intro,.project-nav{padding-left:16px;padding-right:16px}.darkroom .site-header .wrap,.darkroom .site-footer .wrap{padding-left:16px;padding-right:16px}.gallery .row{flex-direction:column}.row .tile{flex:none}}.bg{background-color:#f7f7f7}.chroma{background-color:#f7f7f7;-webkit-text-size-adjust:none}.chroma .err{color:#f6f8fa;background-color:#82071e}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#dedede}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .line{display:flex}.chroma .k{color:#cf222e}.chroma .kc{color:#cf222e}.chroma .kd{color:#cf222e}.chroma .kn{color:#cf222e}.chroma .kp{color:#cf222e}.chroma .kr{color:#cf222e}.chroma .kt{color:#cf222e}.chroma .na{color:#1f2328}.chroma .nc{color:#1f2328}.chroma .no{color:#0550ae}.chroma .nd{color:#0550ae}.chroma .ni{color:#6639ba}.chroma .nl{color:#900;font-weight:700}.chroma .nn{color:#24292e}.chroma .nx{color:#1f2328}.chroma .nt{color:#0550ae}.chroma .nb{color:#6639ba}.chroma .bp{color:#6a737d}.chroma .nv{color:#953800}.chroma .vc{color:#953800}.chroma .vg{color:#953800}.chroma .vi{color:#953800}.chroma .vm{color:#953800}.chroma .nf{color:#6639ba}.chroma .fm{color:#6639ba}.chroma .s{color:#0a3069}.chroma .sa{color:#0a3069}.chroma .sb{color:#0a3069}.chroma .sc{color:#0a3069}.chroma .dl{color:#0a3069}.chroma .sd{color:#0a3069}.chroma .s2{color:#0a3069}.chroma .se{color:#0a3069}.chroma .sh{color:#0a3069}.chroma .si{color:#0a3069}.chroma .sx{color:#0a3069}.chroma .sr{color:#0a3069}.chroma .s1{color:#0a3069}.chroma .ss{color:#032f62}.chroma .m{color:#0550ae}.chroma .mb{color:#0550ae}.chroma .mf{color:#0550ae}.chroma .mh{color:#0550ae}.chroma .mi{color:#0550ae}.chroma .il{color:#0550ae}.chroma .mo{color:#0550ae}.chroma .o{color:#0550ae}.chroma .ow{color:#0550ae}.chroma .or{color:#0550ae}.chroma .p{color:#1f2328}.chroma .c{color:#57606a}.chroma .ch{color:#57606a}.chroma .cm{color:#57606a}.chroma .c1{color:#57606a}.chroma .cs{color:#57606a}.chroma .cp{color:#57606a}.chroma .cpf{color:#57606a}.chroma .gd{color:#82071e;background-color:#ffebe9}.chroma .ge{color:#1f2328}.chroma .gi{color:#116329;background-color:#dafbe1}.chroma .go{color:#1f2328}.chroma .gl{text-decoration:underline}.chroma .w{color:#fff}.prose .highlight pre,.prose .chroma{background-color:var(--code-bg)}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .chroma span{color:var(--text)}:root:not([data-theme=light]) .bg{color:#e6edf3;background-color:#0d1117}:root:not([data-theme=light]) .chroma{color:#e6edf3;background-color:#0d1117;-webkit-text-size-adjust:none}:root:not([data-theme=light]) .chroma .err{color:#f85149}:root:not([data-theme=light]) .chroma .lnlinks{outline:none;text-decoration:none;color:inherit}:root:not([data-theme=light]) .chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}:root:not([data-theme=light]) .chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}:root:not([data-theme=light]) .chroma .hl{background-color:#6e7681}:root:not([data-theme=light]) .chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#737679}:root:not([data-theme=light]) .chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#6e7681}:root:not([data-theme=light]) .chroma .line{display:flex}:root:not([data-theme=light]) .chroma .k{color:#ff7b72}:root:not([data-theme=light]) .chroma .kc{color:#79c0ff}:root:not([data-theme=light]) .chroma .kd{color:#ff7b72}:root:not([data-theme=light]) .chroma .kn{color:#ff7b72}:root:not([data-theme=light]) .chroma .kp{color:#79c0ff}:root:not([data-theme=light]) .chroma .kr{color:#ff7b72}:root:not([data-theme=light]) .chroma .kt{color:#ff7b72}:root:not([data-theme=light]) .chroma .nc{color:#f0883e;font-weight:700}:root:not([data-theme=light]) .chroma .no{color:#79c0ff;font-weight:700}:root:not([data-theme=light]) .chroma .nd{color:#d2a8ff;font-weight:700}:root:not([data-theme=light]) .chroma .ni{color:#ffa657}:root:not([data-theme=light]) .chroma .ne{color:#f0883e;font-weight:700}:root:not([data-theme=light]) .chroma .nl{color:#79c0ff;font-weight:700}:root:not([data-theme=light]) .chroma .nn{color:#ff7b72}:root:not([data-theme=light]) .chroma .nx{color:#e6edf3}:root:not([data-theme=light]) .chroma .py{color:#79c0ff}:root:not([data-theme=light]) .chroma .nt{color:#7ee787}:root:not([data-theme=light]) .chroma .nv{color:#79c0ff}:root:not([data-theme=light]) .chroma .vc{color:#79c0ff}:root:not([data-theme=light]) .chroma .vg{color:#79c0ff}:root:not([data-theme=light]) .chroma .vi{color:#79c0ff}:root:not([data-theme=light]) .chroma .vm{color:#79c0ff}:root:not([data-theme=light]) .chroma .nf{color:#d2a8ff;font-weight:700}:root:not([data-theme=light]) .chroma .fm{color:#d2a8ff;font-weight:700}:root:not([data-theme=light]) .chroma .l{color:#a5d6ff}:root:not([data-theme=light]) .chroma .ld{color:#79c0ff}:root:not([data-theme=light]) .chroma .s{color:#a5d6ff}:root:not([data-theme=light]) .chroma .sa{color:#79c0ff}:root:not([data-theme=light]) .chroma .sb{color:#a5d6ff}:root:not([data-theme=light]) .chroma .sc{color:#a5d6ff}:root:not([data-theme=light]) .chroma .dl{color:#79c0ff}:root:not([data-theme=light]) .chroma .sd{color:#a5d6ff}:root:not([data-theme=light]) .chroma .s2{color:#a5d6ff}:root:not([data-theme=light]) .chroma .se{color:#79c0ff}:root:not([data-theme=light]) .chroma .sh{color:#79c0ff}:root:not([data-theme=light]) .chroma .si{color:#a5d6ff}:root:not([data-theme=light]) .chroma .sx{color:#a5d6ff}:root:not([data-theme=light]) .chroma .sr{color:#79c0ff}:root:not([data-theme=light]) .chroma .s1{color:#a5d6ff}:root:not([data-theme=light]) .chroma .ss{color:#a5d6ff}:root:not([data-theme=light]) .chroma .m{color:#a5d6ff}:root:not([data-theme=light]) .chroma .mb{color:#a5d6ff}:root:not([data-theme=light]) .chroma .mf{color:#a5d6ff}:root:not([data-theme=light]) .chroma .mh{color:#a5d6ff}:root:not([data-theme=light]) .chroma .mi{color:#a5d6ff}:root:not([data-theme=light]) .chroma .il{color:#a5d6ff}:root:not([data-theme=light]) .chroma .mo{color:#a5d6ff}:root:not([data-theme=light]) .chroma .o{color:#ff7b72;font-weight:700}:root:not([data-theme=light]) .chroma .ow{color:#ff7b72;font-weight:700}:root:not([data-theme=light]) .chroma .or{color:#ff7b72;font-weight:700}:root:not([data-theme=light]) .chroma .c{color:#8b949e;font-style:italic}:root:not([data-theme=light]) .chroma .ch{color:#8b949e;font-style:italic}:root:not([data-theme=light]) .chroma .cm{color:#8b949e;font-style:italic}:root:not([data-theme=light]) .chroma .c1{color:#8b949e;font-style:italic}:root:not([data-theme=light]) .chroma .cs{color:#8b949e;font-weight:700;font-style:italic}:root:not([data-theme=light]) .chroma .cp{color:#8b949e;font-weight:700;font-style:italic}:root:not([data-theme=light]) .chroma .cpf{color:#8b949e;font-weight:700;font-style:italic}:root:not([data-theme=light]) .chroma .gd{color:#ffa198;background-color:#490202}:root:not([data-theme=light]) .chroma .ge{font-style:italic}:root:not([data-theme=light]) .chroma .gr{color:#ffa198}:root:not([data-theme=light]) .chroma .gh{color:#79c0ff;font-weight:700}:root:not([data-theme=light]) .chroma .gi{color:#56d364;background-color:#0f5323}:root:not([data-theme=light]) .chroma .go{color:#8b949e}:root:not([data-theme=light]) .chroma .gp{color:#8b949e}:root:not([data-theme=light]) .chroma .gs{font-weight:700}:root:not([data-theme=light]) .chroma .gu{color:#79c0ff}:root:not([data-theme=light]) .chroma .gt{color:#ff7b72}:root:not([data-theme=light]) .chroma .gl{text-decoration:underline}:root:not([data-theme=light]) .chroma .w{color:#6e7681}}:root[data-theme=dark] .chroma span{color:var(--text)}:root[data-theme=dark] .bg{color:#e6edf3;background-color:#0d1117}:root[data-theme=dark] .chroma{color:#e6edf3;background-color:#0d1117;-webkit-text-size-adjust:none}:root[data-theme=dark] .chroma .err{color:#f85149}:root[data-theme=dark] .chroma .lnlinks{outline:none;text-decoration:none;color:inherit}:root[data-theme=dark] .chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}:root[data-theme=dark] .chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}:root[data-theme=dark] .chroma .hl{background-color:#6e7681}:root[data-theme=dark] .chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#737679}:root[data-theme=dark] .chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#6e7681}:root[data-theme=dark] .chroma .line{display:flex}:root[data-theme=dark] .chroma .k{color:#ff7b72}:root[data-theme=dark] .chroma .kc{color:#79c0ff}:root[data-theme=dark] .chroma .kd{color:#ff7b72}:root[data-theme=dark] .chroma .kn{color:#ff7b72}:root[data-theme=dark] .chroma .kp{color:#79c0ff}:root[data-theme=dark] .chroma .kr{color:#ff7b72}:root[data-theme=dark] .chroma .kt{color:#ff7b72}:root[data-theme=dark] .chroma .nc{color:#f0883e;font-weight:700}:root[data-theme=dark] .chroma .no{color:#79c0ff;font-weight:700}:root[data-theme=dark] .chroma .nd{color:#d2a8ff;font-weight:700}:root[data-theme=dark] .chroma .ni{color:#ffa657}:root[data-theme=dark] .chroma .ne{color:#f0883e;font-weight:700}:root[data-theme=dark] .chroma .nl{color:#79c0ff;font-weight:700}:root[data-theme=dark] .chroma .nn{color:#ff7b72}:root[data-theme=dark] .chroma .nx{color:#e6edf3}:root[data-theme=dark] .chroma .py{color:#79c0ff}:root[data-theme=dark] .chroma .nt{color:#7ee787}:root[data-theme=dark] .chroma .nv{color:#79c0ff}:root[data-theme=dark] .chroma .vc{color:#79c0ff}:root[data-theme=dark] .chroma .vg{color:#79c0ff}:root[data-theme=dark] .chroma .vi{color:#79c0ff}:root[data-theme=dark] .chroma .vm{color:#79c0ff}:root[data-theme=dark] .chroma .nf{color:#d2a8ff;font-weight:700}:root[data-theme=dark] .chroma .fm{color:#d2a8ff;font-weight:700}:root[data-theme=dark] .chroma .l{color:#a5d6ff}:root[data-theme=dark] .chroma .ld{color:#79c0ff}:root[data-theme=dark] .chroma .s{color:#a5d6ff}:root[data-theme=dark] .chroma .sa{color:#79c0ff}:root[data-theme=dark] .chroma .sb{color:#a5d6ff}:root[data-theme=dark] .chroma .sc{color:#a5d6ff}:root[data-theme=dark] .chroma .dl{color:#79c0ff}:root[data-theme=dark] .chroma .sd{color:#a5d6ff}:root[data-theme=dark] .chroma .s2{color:#a5d6ff}:root[data-theme=dark] .chroma .se{color:#79c0ff}:root[data-theme=dark] .chroma .sh{color:#79c0ff}:root[data-theme=dark] .chroma .si{color:#a5d6ff}:root[data-theme=dark] .chroma .sx{color:#a5d6ff}:root[data-theme=dark] .chroma .sr{color:#79c0ff}:root[data-theme=dark] .chroma .s1{color:#a5d6ff}:root[data-theme=dark] .chroma .ss{color:#a5d6ff}:root[data-theme=dark] .chroma .m{color:#a5d6ff}:root[data-theme=dark] .chroma .mb{color:#a5d6ff}:root[data-theme=dark] .chroma .mf{color:#a5d6ff}:root[data-theme=dark] .chroma .mh{color:#a5d6ff}:root[data-theme=dark] .chroma .mi{color:#a5d6ff}:root[data-theme=dark] .chroma .il{color:#a5d6ff}:root[data-theme=dark] .chroma .mo{color:#a5d6ff}:root[data-theme=dark] .chroma .o{color:#ff7b72;font-weight:700}:root[data-theme=dark] .chroma .ow{color:#ff7b72;font-weight:700}:root[data-theme=dark] .chroma .or{color:#ff7b72;font-weight:700}:root[data-theme=dark] .chroma .c{color:#8b949e;font-style:italic}:root[data-theme=dark] .chroma .ch{color:#8b949e;font-style:italic}:root[data-theme=dark] .chroma .cm{color:#8b949e;font-style:italic}:root[data-theme=dark] .chroma .c1{color:#8b949e;font-style:italic}:root[data-theme=dark] .chroma .cs{color:#8b949e;font-weight:700;font-style:italic}:root[data-theme=dark] .chroma .cp{color:#8b949e;font-weight:700;font-style:italic}:root[data-theme=dark] .chroma .cpf{color:#8b949e;font-weight:700;font-style:italic}:root[data-theme=dark] .chroma .gd{color:#ffa198;background-color:#490202}:root[data-theme=dark] .chroma .ge{font-style:italic}:root[data-theme=dark] .chroma .gr{color:#ffa198}:root[data-theme=dark] .chroma .gh{color:#79c0ff;font-weight:700}:root[data-theme=dark] .chroma .gi{color:#56d364;background-color:#0f5323}:root[data-theme=dark] .chroma .go{color:#8b949e}:root[data-theme=dark] .chroma .gp{color:#8b949e}:root[data-theme=dark] .chroma .gs{font-weight:700}:root[data-theme=dark] .chroma .gu{color:#79c0ff}:root[data-theme=dark] .chroma .gt{color:#ff7b72}:root[data-theme=dark] .chroma .gl{text-decoration:underline}:root[data-theme=dark] .chroma .w{color:#6e7681}:root .prose .highlight pre,:root .prose .chroma{background-color:var(--paper)}@font-face{font-family:caveat;src:url(/fonts/caveat-latin-wght-normal.woff2)format("woff2");font-weight:400 700;font-display:swap}:root{--hand:"Caveat", "Segoe Print", "Bradley Hand", cursive;--pen:#2B2B33;--paper:#F7F6EF;--greenbar:#E2EDDA;--perf:#A9A69C;--paper-edge:#E6E3D8;--tip-bg:#1F1F23;--tip-fg:#FFFFFF;--mx-bg:#F2F1EC;--mx-fg:#1F1F23;--mx-line:#D5D3CC;--mx-dim:#5C5C66;--stain-blend:multiply;--stain-filter:none;--stain-night-filter:none;--es:#B35200;--en:#2F6FA8}.prose pre,.prose .highlight pre,.prose .chroma{--line:1.6em;--strip:30px;position:relative;padding:calc(var(--line) * .75)calc(var(--strip) + 18px);border-radius:0;line-height:1.6;background-color:var(--paper);background-image:radial-gradient(circle,var(--bg) 0 4.5px,var(--perf) 4.8px 5.8px,transparent 6.2px),radial-gradient(circle,var(--bg) 0 4.5px,var(--perf) 4.8px 5.8px,transparent 6.2px),linear-gradient(var(--perf) 50%,transparent 0),linear-gradient(var(--perf) 50%,transparent 0),repeating-linear-gradient(var(--greenbar) 0 calc(var(--line) * 2),transparent calc(var(--line) * 2) calc(var(--line) * 4));background-size:var(--strip)var(--line),var(--strip)var(--line),1px 6px,1px 6px,calc(100% - var(--strip) * 2)100%;background-position:0 calc(var(--line) * .25),100% calc(var(--line) * .25),var(--strip)0,calc(100% - var(--strip))0,var(--strip)calc(var(--line) * .75);background-repeat:repeat-y,repeat-y,repeat-y,repeat-y,no-repeat;box-shadow:0 0 0 1px var(--paper-edge),0 1px 3px rgba(60,50,30,8%)}.prose .highlight{position:relative;margin:0 0 24px}.prose .highlight pre{margin:0}@media(max-width:720px){.prose pre,.prose .highlight pre,.prose .chroma{--strip:18px;padding-left:28px;padding-right:28px;font-size:13px}}.copy-code{position:absolute;top:8px;right:38px;z-index:1;min-height:32px;padding:4px 10px;border:1px solid var(--perf);border-radius:3px;background:var(--paper);font:500 11px/1 var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);cursor:pointer;opacity:0;transition:opacity .15s}.prose .highlight:hover .copy-code,.prose pre:hover .copy-code,.copy-code:focus-visible,.copy-code.done{opacity:1}.copy-code:hover{color:var(--ink);border-color:var(--muted)}.copy-code:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media(hover:none){.copy-code{opacity:1}}@media(max-width:720px){.copy-code{right:24px}}.site-footer{overflow-x:clip}.site-footer nav{position:relative}.stain{position:absolute;z-index:2;pointer-events:none;width:var(--size,170px);height:var(--size,170px);left:calc(50% + var(--dx,0px) - var(--size,170px)/2);top:calc(var(--size,170px) * -.5 + 6px);transform:rotate(var(--r,0deg));mix-blend-mode:var(--stain-blend);filter:var(--stain-filter)}.stain svg{display:block;width:100%;height:100%;overflow:visible}.stain .stain-night,.evening .stain .stain-day{display:none}.evening .stain .stain-night{display:block}.evening .stain{filter:var(--stain-night-filter,var(--stain-filter))}@media(max-width:720px){.stain{--size:120px}}@media print{.stain{display:none}}.signoff{max-width:var(--col);margin:8px auto 40px;padding:0 32px}.signoff img{display:block;height:52px;width:auto;filter:invert(var(--logo-invert))}.js .signoff.unsigned img{-webkit-mask-image:linear-gradient(90deg,#000 40%,transparent 60%);mask-image:linear-gradient(90deg,#000 40%,transparent 60%);-webkit-mask-size:300% 100%;mask-size:300% 100%;-webkit-mask-position:100% 0;mask-position:100% 0}.js .signoff.signing img{-webkit-mask-image:linear-gradient(90deg,#000 40%,transparent 60%);mask-image:linear-gradient(90deg,#000 40%,transparent 60%);-webkit-mask-size:300% 100%;mask-size:300% 100%;animation:sign 1.8s cubic-bezier(.45,.05,.4,1)forwards}@keyframes sign{from{-webkit-mask-position:100% 0;mask-position:100% 0}to{-webkit-mask-position:0 0;mask-position:0 0}}@media(max-width:720px){.signoff{padding:0 16px}}.js .developing img{filter:brightness(2.1)contrast(.25)grayscale(1)}.js .developed img{filter:none;transition:filter 2.2s cubic-bezier(.3,0,.2,1)}.theme-toggle{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;margin:-8px -10px -8px -8px;padding:0;border:0;border-radius:20px;background:0 0;color:inherit;cursor:pointer}.theme-toggle:hover{color:var(--accent)}.theme-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.theme-toggle svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;transform:translateY(2px)}.theme-toggle .moon{display:none}.darkroom .theme-toggle{display:none}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .theme-toggle .sun{display:none}:root:not([data-theme=light]) .theme-toggle .moon{display:block}}:root[data-theme=dark] .theme-toggle .sun{display:none}:root[data-theme=dark] .theme-toggle .moon{display:block}.mx-open{min-height:0;padding:0;border:0;background:0 0;cursor:pointer;font:inherit;color:inherit}.mx-open:hover{color:var(--accent)}.mx-open kbd,.mx kbd{font-family:var(--mono);font-size:11px;padding:1px 5px;border:1px solid var(--rule);border-radius:3px}.mx{position:fixed;left:0;right:0;bottom:0;z-index:50;padding:0 max(16px,env(safe-area-inset-right,0px))env(safe-area-inset-bottom,0px)max(16px,env(safe-area-inset-left,0px));background:var(--mx-bg);color:var(--mx-fg);border-top:1px solid var(--mx-fg);font:15px/1.5 var(--mono);box-shadow:0 -8px 30px rgba(0,0,0,.12)}.mx[hidden]{display:none}.mx-list{list-style:none;margin:0;padding:6px 0;max-height:min(50vh,340px);overflow-y:auto;border-bottom:1px solid var(--mx-line)}.mx-list:empty{display:none}.mx-list li{display:flex;gap:16px;justify-content:space-between;padding:3px 8px;cursor:pointer}.mx-list li .k{flex:none;color:var(--mx-dim);font-size:12px}.mx-list li[aria-selected=true]{background:var(--mx-fg);color:var(--mx-bg)}.mx-list li[aria-selected=true] .k{color:var(--mx-line)}.mx-list mark{background:0 0;color:inherit;font-weight:500;text-decoration:underline;text-underline-offset:3px}.mx-row{display:flex;align-items:center;gap:10px;padding:10px 0}.mx-row label{flex:none;font-weight:500}.mx-row input{flex:1;min-width:0;border:0;outline:none;background:0 0;font:inherit;color:inherit;caret-color:var(--accent)}.mx-row .mx-count{flex:none;color:var(--mx-dim);font-size:12px}.mx-help{margin:0;padding:0 0 8px;color:var(--mx-dim);font-size:11.5px}.timeline{margin:8px 0 56px}.tl-head{display:flex;flex-wrap:wrap;gap:8px 24px;align-items:baseline;justify-content:space-between;margin-bottom:20px}.tl-legend{display:flex;gap:20px;margin:0;padding:0;list-style:none;font-family:var(--mono);font-size:12px;color:var(--muted)}.tl-legend li{display:flex;align-items:center;gap:8px}.tl-legend i{width:9px;height:9px;border-radius:2px;display:inline-block;background:var(--en)}.tl-legend .es i{background:var(--es)}.tl-legend b{font-weight:500;color:var(--ink);font-variant-numeric:tabular-nums}.tl-plot{position:relative}.tl-grid{display:grid;grid-template-columns:repeat(var(--n),minmax(0,1fr));grid-template-rows:auto;gap:0 clamp(3px,.9vw,8px);align-items:end;border-bottom:1px solid var(--ink)}.tl-col{grid-row:1;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:2px;align-content:start;transform:scaleY(-1);min-height:1px;padding-top:3px;border-radius:2px}a.tl-col:hover,.tl-col.is-hot{background:color-mix(in srgb,var(--ink) 5%,transparent)}.tl-col:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.tl-dot{aspect-ratio:1;border-radius:1.5px;background:var(--en)}.tl-dot.es{background:var(--es)}.tl-dot.is-hot{outline:2px solid var(--ink);outline-offset:1px;position:relative;z-index:1}.tl-note{position:relative;grid-row:1;z-index:1;font-family:var(--hand);font-size:19px;line-height:1.1;color:var(--pen);pointer-events:none}.tl-note b{font-weight:700}.tl-note svg{position:absolute;overflow:visible;fill:none;stroke:var(--pen);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}.tl-note.peak{align-self:start;padding:2px 0 0 44px;transform:rotate(-2deg);transform-origin:left top}.tl-note.peak svg{left:2px;top:6px;width:40px;height:34px}.tl-note.gap{align-self:end;text-align:center;padding-bottom:16px;transform:rotate(1.5deg)}.tl-note.gap svg{left:4%;bottom:2px;width:92%;height:10px}.tl-note.era{align-self:end;padding:0 0 62px 30%;transform:rotate(-1.5deg)}.tl-note.era svg{left:6%;bottom:14px;width:24%;height:44px}.tl-years{display:grid;grid-template-columns:repeat(var(--n),minmax(0,1fr));gap:0 clamp(3px,.9vw,8px);margin-top:8px;font-family:var(--mono);font-size:11px;color:var(--muted);text-align:center;font-variant-numeric:tabular-nums}.tl-years span{white-space:nowrap}.tl-tip{position:absolute;pointer-events:none;z-index:5;max-width:min(320px,80vw);padding:8px 10px;border-radius:4px;background:var(--tip-bg);color:var(--tip-fg);font-family:var(--mono);font-size:11.5px;line-height:1.45;box-shadow:0 4px 16px rgba(0,0,0,.18)}.tl-tip[hidden]{display:none}.tl-tip .t{display:block;margin-top:2px;font-family:var(--serif);font-size:15px;line-height:1.3}.year{scroll-margin-top:16px}.year:target,.year.is-target{animation:flash 1.6s ease-out}@keyframes flash{from{background:color-mix(in srgb,var(--accent) 10%,transparent)}to{background:0 0}}@media(max-width:640px){.tl-col{grid-template-columns:repeat(2,minmax(0,1fr))}.tl-note{font-size:15px}.tl-note.peak{padding-left:30px}.tl-note.peak svg{width:28px;height:26px}.tl-note.era{padding-bottom:48px}.tl-note.era svg{height:34px}}.prose sup{line-height:0}.prose a.footnote-ref{padding:0 2px;font-family:var(--hand);font-size:1.15em;font-weight:700;color:var(--accent);text-decoration:none}.prose .footnotes{margin-top:48px;font-family:var(--hand);font-size:1.15em;line-height:1.3;color:var(--pen)}.prose .footnotes hr{width:64px;margin:0 0 16px;border:0;border-top:1px solid var(--rule)}.prose .footnotes ol{padding-left:1.4em}.prose .footnotes li{margin-bottom:10px}.prose .footnotes p{margin:0}.prose a.footnote-backref{text-decoration:none}.sidenote{display:none}@media(min-width:1280px){.sidenote{display:block;float:right;clear:right;position:relative;width:210px;margin:0 calc(-210px - 56px)16px 0;font-family:var(--hand);font-size:20px;line-height:1.2;color:var(--pen);transform:rotate(-1.5deg)}.sidenote:nth-of-type(even){transform:rotate(1deg)}.sidenote .n{margin-right:4px;font-weight:700;color:var(--accent)}.sidenote p{margin:0}.sidenote a{color:var(--pen)}.has-sidenotes .footnotes{display:none}}.archive-wrap{display:block}.cat-margin{display:none}.cat-fold{margin:0 0 32px;font-family:var(--mono);font-size:13px}.cat-fold summary{cursor:pointer;color:var(--accent);list-style:none;padding:8px 0}.cat-fold summary::-webkit-details-marker{display:none}.cat-fold summary::before{content:"+ "}.cat-fold[open] summary::before{content:"− "}.cat-fold .terms{margin:8px 0 0}@media(min-width:1280px){.archive-wrap{display:grid;grid-template-columns:minmax(0,840px)220px;gap:56px;justify-content:center;padding:0 32px}.archive-wrap .archive{margin:0;padding-left:0;padding-right:0}.cat-fold{display:none}.cat-margin{display:block;position:sticky;top:24px;align-self:start;margin-top:150px;max-height:calc(100vh - 48px);overflow-y:auto;font-family:var(--hand);color:var(--pen);transform:rotate(-1deg)}.cat-margin h2{margin:0 0 8px;font:700 22px/1 var(--hand)}.cat-margin ul{margin:0;padding:0;list-style:none;display:flex;flex-wrap:wrap;gap:2px 12px}.cat-margin li{font-size:19px;line-height:1.25}.cat-margin a{color:var(--pen)}.cat-margin a:hover{color:var(--accent)}.cat-margin .c{font-size:15px;color:var(--muted)}}html{scroll-behavior:smooth}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.js .developing img,.js .developed img{filter:none;transition:none}.js .signoff.unsigned img,.js .signoff.signing img{-webkit-mask-image:none;mask-image:none;animation:none}.year:target,.year.is-target{animation:none}}.prose .lost-photo{position:relative;width:min(100%,320px);margin:36px auto;padding:12px 12px 14px;background:var(--paper);box-shadow:0 1px 2px rgba(40,30,10,.12),0 6px 18px rgba(40,30,10,8%);transform:rotate(var(--tilt,-1deg))}.prose .lost-photo.small{width:min(100%,240px)}.lp-window{display:grid;place-items:center;aspect-ratio:4/3;border:1.5px dashed var(--perf);background:color-mix(in srgb,var(--paper) 80%,var(--rule))}.lp-window svg{width:62%;height:auto;fill:none;stroke:var(--pen);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;opacity:.8}.lp-window svg .lp-thin{stroke-width:1.5}.lp-window svg .lp-dot{fill:var(--pen);stroke:none}.prose .lost-photo figcaption{margin-top:10px;font-family:var(--hand);font-size:20px;line-height:1.15;color:var(--pen);text-align:center}.lp-caption{display:block;font-weight:700}.lp-note{display:block;font-size:17px;color:var(--muted)}.lp-tape{position:absolute;top:-10px;width:64px;height:20px;background:color-mix(in srgb,var(--spark) 32%,transparent);opacity:.85}.lp-tape-l{left:-14px;transform:rotate(-32deg)}.lp-tape-r{right:-14px;transform:rotate(28deg)}