:root{--paper:#ffffff;--ink:#000000;--quiet:#555555;--link:#0000ee;--visited:#551a8b;--active:#ff0000;--hi:#dfdfdf;--lo:#808080;--face:#c0c0c0;--select:#000080;--serif:Times, "Times New Roman", "Liberation Serif", Tinos, serif;--mono:"Courier New", Courier, "Liberation Mono", monospace;--code-font:Monaco, "Lucida Console", Menlo, Consolas, "DejaVu Sans Mono", monospace;--measure:31em;--gutter:clamp(16px, 4.5vw, 72px);--field:#f6f6f6;--code-kw:#0000ff;--code-str:#a31515;--code-com:#008000;--code-typ:#2b91af;color-scheme:light}@media(prefers-color-scheme:dark){:root:not(.theme-light){--paper:#000000;--ink:#ececec;--quiet:#9a9a9a;--link:#7fa6ff;--visited:#c79bff;--active:#ff5a5a;--hi:#5a5a5a;--lo:#1c1c1c;--face:#2a2a2a;--select:#0000c8;--field:#0e0e0e;--code-kw:#569cd6;--code-str:#d69d85;--code-com:#57a64a;--code-typ:#4ec9b0;color-scheme:dark}}:root.theme-dark{--paper:#000000;--ink:#ececec;--quiet:#9a9a9a;--link:#7fa6ff;--visited:#c79bff;--active:#ff5a5a;--hi:#5a5a5a;--lo:#1c1c1c;--face:#2a2a2a;--select:#0000c8;--field:#0e0e0e;--code-kw:#569cd6;--code-str:#d69d85;--code-com:#57a64a;--code-typ:#4ec9b0;color-scheme:dark}html{background:var(--paper);color:var(--ink);font-family:var(--serif);font-size:clamp(18px,.55vw + 14px,22px);line-height:1.5;-webkit-text-size-adjust:100%;text-rendering:optimizeLegibility;font-kerning:normal}body{background:var(--paper);color:var(--ink);margin:0;padding:0 var(--gutter)3rem;max-width:1500px}::selection{background:var(--select);color:#fff}a{color:var(--link);text-decoration:underline;text-underline-offset:.12em;text-decoration-thickness:.06em}a:visited{color:var(--visited)}a:active{color:var(--active)}a:focus-visible{outline:1px dotted currentColor;outline-offset:2px}hr{height:0;margin:1.5rem 0;border:0;border-top:1px solid var(--lo);border-bottom:1px solid var(--hi)}hr.half{width:50%;margin-left:0}hr.short{width:5em;margin-left:0}tt,kbd{font-family:var(--mono);font-size:.86em}code,pre{font-family:var(--code-font);font-size:.8em}small{font-size:.78rem}.masthead{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:.25rem 2rem;padding-top:1.1rem;font-size:.9rem}.masthead .brand{font-weight:700;font-size:1.35rem;letter-spacing:-.01em}.masthead .tagline{font-style:italic;color:var(--quiet);margin-left:.5em}.theme-toggle{white-space:nowrap}html:not(.js) .theme-toggle{display:none}.theme-toggle button{font:inherit;color:var(--link);background:0 0;border:0;padding:0 .1em;cursor:pointer;text-decoration:underline;text-underline-offset:.12em;text-decoration-thickness:.06em}.theme-toggle button:active{color:var(--active)}@media(pointer:coarse){.theme-toggle button{padding:.6em .12em}}.theme-toggle button:focus-visible{outline:1px dotted currentColor;outline-offset:2px}.theme-toggle button[aria-pressed=true]{color:var(--ink);text-decoration:none;font-weight:700;cursor:default}.masthead hr{flex-basis:100%;margin:.6rem 0 0}.masthead--home{justify-content:flex-end}.headline{font-size:clamp(2.75rem,11.2vw,12.5rem);font-weight:700;line-height:.86;letter-spacing:-.02em;margin:clamp(2.5rem,7vw,6.5rem)0 0;max-width:14ch;text-wrap:balance;-webkit-hyphens:auto;hyphens:auto;overflow-wrap:break-word;margin-left:-.04em}.deck{font-style:italic;font-size:clamp(1.35rem,2.3vw,2.1rem);line-height:1.2;margin:clamp(1.25rem,2.5vw,2rem)0 clamp(1.75rem,3vw,2.5rem);max-width:24em;text-wrap:balance}table.bevel,.essay table{border-collapse:separate;border-spacing:2px;border:1px solid;border-color:var(--hi)var(--lo)var(--lo)var(--hi);font-size:.8rem;line-height:1.35}table.bevel th,table.bevel td,.essay th,.essay td{border:1px solid;border-color:var(--lo)var(--hi)var(--hi)var(--lo);padding:.35em .7em;text-align:left;vertical-align:top}table.bevel th{font-weight:700;white-space:nowrap}.essay th{font-weight:700}.odo{white-space:nowrap;font-family:var(--mono);font-weight:700}.odo span{display:inline-block;min-width:.95em;padding:0 .12em;margin-right:1px;text-align:center;background:#000;color:#fff;border:1px solid;border-color:var(--lo)var(--hi)var(--hi)var(--lo)}.essay{max-width:var(--measure);font-size:1.08rem;text-wrap:pretty}.essay p{margin:0 0 1.05em}.essay p,.deck{hanging-punctuation:first last}.essay em{font-style:italic}.essay h2,.essay h3,.essay h4{line-height:1.15;letter-spacing:-.01em;margin:2em 0 .6em;text-wrap:balance}.essay h2{font-size:1.55rem}.essay h3{font-size:1.25rem}.essay h4{font-size:1.05rem}.essay ul,.essay ol{margin:0 0 1.05em;padding-left:1.6em}.essay li{margin-bottom:.35em}.essay li>p{margin-bottom:.5em}.essay blockquote{margin:1.4em 0 1.4em 2em}.essay hr{margin:2em 0}.essay pre{box-sizing:border-box;width:max-content;min-width:100%;max-width:min(calc(100vw - 2 * var(--gutter)),64rem);margin:1.5em 0;padding:.85em 1.1em;font-size:.68rem;line-height:1.55;tab-size:4;overflow-x:auto;background:var(--field);border:1px solid;border-color:var(--lo)var(--hi)var(--hi)var(--lo)}.essay pre code{font-size:1em}.chroma .k,.chroma .kc,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr,.chroma .kt,.chroma .cp,.chroma .cpf{color:var(--code-kw)}.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .dl,.chroma .sd,.chroma .s1,.chroma .s2,.chroma .se,.chroma .sh,.chroma .si,.chroma .sx,.chroma .sr,.chroma .ss{color:var(--code-str)}.chroma .c,.chroma .ch,.chroma .cm,.chroma .c1,.chroma .cs{color:var(--code-com)}.chroma .nc{color:var(--code-typ)}.chroma .err{color:inherit;background:0 0}.essay table{margin:1.4em 0}.essay img{max-width:100%;height:auto}.essay figure{margin:1.8em 0;max-width:100%}.essay figure img{display:block;width:100%}.essay figcaption{margin-top:.6em;font-size:.8rem;font-style:italic;color:var(--quiet)}.imgrow{display:grid;grid-template-columns:repeat(var(--imgrow-cols,3),minmax(0,1fr));gap:.75rem;margin:1.8em 0}.imgrow img{display:block;width:100%;height:auto}.essay sup{line-height:0}.footnotes{margin-top:2.5em;font-size:.85rem;color:var(--quiet)}.footnotes hr{width:5em}table.ring{width:100%;max-width:42em;margin:.5rem 0}table.ring td{width:50%;vertical-align:top;padding:.7em .9em}table.ring td.next{text-align:right}table.ring .dir{font-weight:700;font-size:.95rem}.more h2{font-size:.8rem;font-weight:700;text-transform:uppercase;letter-spacing:.12em;margin:3rem 0 1.25rem}.more ul{list-style:square;margin:0;padding-left:1.1em}.more li{font-size:clamp(1.35rem,2.9vw,2.45rem);line-height:1.12;letter-spacing:-.015em;margin-bottom:.38em;max-width:22em}.more li::marker{font-size:.5em;color:var(--quiet)}.more li small{font-size:.72rem;letter-spacing:0;color:var(--quiet);white-space:nowrap;margin-left:.35em;vertical-align:.35em}.more .here{font-style:italic}@media(max-width:600px){.masthead .tagline{display:none}.masthead{column-gap:.75rem}table.bevel th,table.bevel td{padding:.35em .5em}.more li small{display:block;margin:.2em 0 0;vertical-align:baseline}}.sitename{font-size:clamp(3.5rem,21vw,24rem);font-weight:700;line-height:.8;letter-spacing:-.018em;margin:clamp(2rem,6vw,5.5rem)0 0 -.05em}.sitename .dot{margin:0 .015em 0 -.035em}.home .deck{margin-bottom:clamp(2.5rem,5vw,4.5rem)}.year{display:grid;grid-template-columns:clamp(4.5rem,13vw,12rem)1fr;column-gap:1rem;border-top:1px solid var(--lo);box-shadow:0 1px 0 var(--hi)inset;padding-top:1.1rem;margin-bottom:clamp(1.5rem,3vw,2.5rem)}.year h2{margin:0;font-size:clamp(1.4rem,2.6vw,2.3rem);line-height:1.1;letter-spacing:-.02em}.entries{list-style:none;margin:0;padding:0}.entries li{display:grid;grid-template-columns:4.5em 1fr;column-gap:1rem;margin-bottom:clamp(1.4rem,2.6vw,2.2rem)}.entries li>*{grid-column:2}.entries .when{grid-column:1;grid-row:1/span 3;font-size:.8rem;color:var(--quiet);padding-top:.9em;white-space:nowrap}.entries .t{margin:0;font-weight:400;font-size:clamp(1.5rem,3.3vw,3rem);line-height:1.06;letter-spacing:-.02em;text-wrap:balance;overflow-wrap:break-word}.entries .d{margin:.35rem 0 .1rem;font-style:italic;max-width:32em}.entries small{color:var(--quiet)}@media(max-width:700px){.sitename{font-size:27vw}.year{grid-template-columns:1fr}.year h2{margin-bottom:.9rem}.entries li{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:.5em}.entries .t,.entries .d{flex-basis:100%}.entries .when{order:3;padding-top:0;font-size:.75rem}.entries .words{order:4}.entries .words::before{content:"\00b7\00a0"}}