@font-face{font-family:DM Sans;src:url(/assets/DMSans-VariableFont_opsz_wght-4BQFAdbR.woff2)format("woff2");font-weight:100 1000;font-display:swap}@font-face{font-family:"Source Serif 4";src:url(/assets/SourceSerif4-VariableFont_opsz_wght-79uAtdDp.woff2)format("woff2");font-weight:200 900;font-display:swap}:root{--font-sans:"DM Sans", ui-sans-serif, system-ui, -apple-system, sans-serif;--font-serif:"Source Serif 4", ui-serif, Georgia, Cambria, serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;--background:oklch(98.6% .002 67.8);--foreground:oklch(27.5% .075 252.9);--muted:oklch(53.65% .0706 253.27);--accent:oklch(49.8% .173 261.6);--surface-subtle:color-mix(in oklab, var(--foreground), transparent 96%);--surface-accent:color-mix(in oklab, var(--accent), transparent 96%);--border-subtle:color-mix(in oklab, var(--foreground), transparent 90%);--space-page-y:clamp(4rem, 10vw, 8rem);--space-page-x:clamp(1rem, 5vw, 4rem);--content-width:36.25rem}*{box-sizing:border-box}html{background:var(--background);min-width:320px;color:var(--foreground);font-family:var(--font-sans);font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{background:var(--background);margin:0}::selection{background:oklch(90.32% .0717 117.21)}.page{padding-inline:var(--space-page-x)}header{margin-top:var(--space-page-y)}.introduction{flex-direction:column;align-items:flex-start;gap:1rem;display:flex}.introduction-logo{width:3.25rem;height:auto;display:block;overflow:visible}@media (prefers-reduced-motion:no-preference){.logo-capsule-left{animation:.68s both logo-enter-left}.logo-capsule-right{animation:.72s 60ms both logo-enter-right}@keyframes logo-enter-left{0%{opacity:.2;animation-timing-function:cubic-bezier(.2,.8,.2,1);transform:translate(-8px,8px)}50%{opacity:1}74%{animation-timing-function:ease-out;transform:translate(1.5px,-1.5px)}to{opacity:1;transform:translate(0)}}@keyframes logo-enter-right{0%{opacity:.2;animation-timing-function:cubic-bezier(.2,.8,.2,1);transform:translate(8px,-8px)}50%{opacity:1}74%{animation-timing-function:ease-out;transform:translate(-1.5px,1.5px)}to{opacity:1;transform:translate(0)}}}main{gap:var(--space-page-y);width:100%;margin-top:var(--space-page-y);margin-bottom:var(--space-page-y);flex-direction:column;display:flex}header,section{width:100%;max-width:var(--content-width);margin-inline:auto}h1,h2,p{margin:0}h1,h2{font-size:1rem;font-weight:500}h2{font-family:var(--font-serif);margin-bottom:1.5rem}p{max-width:var(--content-width);color:var(--muted);font-size:1rem;font-weight:400;line-height:1.65}a{color:var(--muted);transition:color .3s}a:hover{color:var(--foreground)}a:focus-visible{color:var(--foreground);outline-offset:.1875rem;outline:.125rem solid}.project-link,.writing-link{color:inherit;border-radius:.5rem;margin-inline:-1rem;padding-inline:1rem;text-decoration:none}.project-link:hover,.project-link:focus-visible,.writing-link:hover,.writing-link:focus-visible{background-color:var(--surface-accent)}.social-link:hover,.social-link:focus-visible{color:var(--accent)}.project-link{padding-block:.5rem;display:block}.project-title,.writing-title{color:var(--foreground)}.project-title{display:block}.project-description,.writing-description{color:var(--muted)}.writing-list{flex-direction:column;gap:.25rem;margin:0;padding:0;list-style:none;display:flex}.writing-link{grid-template-columns:minmax(0,1fr) auto;gap:.25rem 1rem;padding-block:.75rem;display:grid}.writing-date,.article-date{color:var(--muted);font-size:.875rem}.writing-description{grid-column:1/-1;line-height:1.5}.writing-title,.writing-description{justify-self:start}.writing-title,.article-title{view-transition-class:writing-title}.writing-description,.article-description{view-transition-class:writing-description}.article-main,.message-page{width:100%;max-width:var(--content-width);margin-inline:auto}.article-main{display:block}.article-back-link{font-size:.875rem;display:inline-block}.article-header{margin-top:2.5rem}.article-time{align-items:center;gap:2rem;display:flex}.article-title{width:fit-content;max-width:100%;font-family:var(--font-serif);text-wrap:balance;font-size:clamp(2rem,7vw,3rem);line-height:1.1}.article-description{width:fit-content;margin-top:1rem}.article-date{margin-top:.75rem;display:block}.article-content{margin-top:3rem}.article-toc{z-index:10;position:fixed;top:50%;right:clamp(.75rem,2vw,2rem);transform:translateY(-50%)}.article-toc-rail{flex-direction:column;align-items:center;padding-block:.25rem;display:flex}.article-toc-mark{border-radius:.25rem;place-items:center;width:2.5rem;height:1.125rem;display:grid}.article-toc-mark span{background:color-mix(in oklab, var(--foreground), transparent 80%);border-radius:.75rem;width:1.5rem;height:.16rem}.article-toc-mark:hover span,.article-toc-mark:focus-visible span,.article-toc-mark[aria-current=location] span{background:var(--foreground)}.article-toc-mark:focus-visible,.article-toc-toggle:focus-visible{outline:.125rem solid var(--accent);outline-offset:.125rem}.article-toc-panel{visibility:hidden;opacity:0;pointer-events:none;width:min(18rem,100vw - 5rem);padding-right:.625rem;position:absolute;top:50%;right:100%;transform:translate(.375rem,-50%)}.article-toc:hover .article-toc-panel,.article-toc:focus-within .article-toc-panel{visibility:visible;opacity:1;pointer-events:auto;transform:translateY(-50%)}.article-toc-card{border:.0625rem solid var(--border-subtle);background:var(--background);max-height:calc(100vh - 2rem);box-shadow:0 .75rem 2rem color-mix(in oklab, var(--foreground), transparent 90%);border-radius:.875rem;padding:1rem;overflow-y:auto}.article-toc-title{color:var(--muted);letter-spacing:.04em;text-transform:uppercase;margin:0 0 .5rem;font-size:.75rem;font-weight:600}.article-toc-card ol{flex-direction:column;gap:.125rem;margin:0;padding:0;list-style:none;display:flex}.article-toc-card a{color:var(--muted);border-radius:.375rem;padding:.4375rem .5rem;font-size:.875rem;line-height:1.4;text-decoration:none;display:block}.article-toc-card a:hover,.article-toc-card a:focus-visible{background:var(--surface-accent);color:var(--foreground)}.article-toc-card a[aria-current=location]{color:var(--accent)}.article-toc-toggle{display:none}@media (prefers-reduced-motion:no-preference){.article-toc-panel{transition:opacity .16s ease-out,transform .16s ease-out,visibility .16s}.article-toc-mark span{transition:background-color .16s ease-out}}@media (width<=48rem),(hover:none){.article-toc{top:auto;bottom:1rem;right:1rem;transform:none}.article-toc-rail{display:none}.article-toc-toggle{border:.0625rem solid var(--border-subtle);background:var(--background);box-shadow:0 .375rem 1.25rem color-mix(in oklab, var(--foreground), transparent 90%);color:var(--foreground);font:500 .875rem var(--font-sans);cursor:pointer;border-radius:999px;align-items:center;gap:.5rem;padding:.625rem .875rem;display:flex}.article-toc-panel{width:min(18rem,100vw - 2rem);padding:0;top:auto;bottom:calc(100% + .625rem);right:0;transform:translateY(.375rem)}.article-toc:hover .article-toc-panel,.article-toc:focus-within .article-toc-panel{visibility:hidden;opacity:0;pointer-events:none;transform:translateY(.375rem)}.article-toc[data-open=true] .article-toc-panel{visibility:visible;opacity:1;pointer-events:auto;transform:translateY(0)}.article-toc-card{max-height:min(70vh,28rem)}}.article-content>*{margin-block:0}.article-content>*+*{margin-top:1.25rem}.article-content>.article-diagram{margin-inline:0}.article-diagram-trigger{cursor:zoom-in;background:0 0;border:0;border-radius:.5rem;width:100%;padding:0;display:block}.article-diagram-trigger:focus-visible,.article-image-dialog button:focus-visible{outline:.125rem solid var(--accent);outline-offset:.1875rem}.article-diagram-trigger img{border:.0625rem solid var(--border-subtle);border-radius:inherit;width:100%;height:auto;display:block}.article-image-dialog{background:var(--background);width:min(95vw,100rem);max-width:95vw;max-height:90dvh;color:var(--foreground);box-shadow:0 1.5rem 5rem color-mix(in oklab, var(--foreground), transparent 75%);border:0;border-radius:.75rem;padding:0;overflow:hidden}.article-image-dialog::backdrop{background:color-mix(in oklab, var(--foreground), transparent 20%)}.article-image-dialog-panel{flex-direction:column;max-height:90dvh;display:flex}.article-image-dialog-toolbar{border-bottom:.0625rem solid var(--border-subtle);justify-content:flex-end;gap:.5rem;padding:.5rem;display:flex}.article-image-dialog-toolbar button{border:.0625rem solid var(--border-subtle);background:var(--background);color:var(--foreground);font:inherit;cursor:pointer;border-radius:.375rem;padding:.375rem .75rem;font-size:.875rem}.article-image-dialog-viewport{overscroll-behavior:contain;min-height:0;overflow:auto}.article-image-dialog-viewport img{width:100%;height:auto;display:block}.article-image-dialog-viewport img.is-zoomed{width:auto;max-width:none}.article-content h2{color:var(--foreground);font-family:var(--font-serif);margin-top:2.75rem;margin-bottom:0;font-size:1.375rem;line-height:1.3}.article-section-heading{width:fit-content;max-width:100%;scroll-margin-top:2rem;position:relative}.article-heading-copy{max-width:100%;color:inherit;font:inherit;text-align:start;cursor:pointer;background:0 0;border:0;padding:0;display:inline-block;position:relative}.article-heading-copy-icon{width:1.5rem;height:1.5rem;color:var(--accent);font-family:var(--font-sans);opacity:0;pointer-events:none;border-radius:.25rem;place-items:center;font-size:.875rem;font-weight:500;line-height:1;display:grid;position:absolute;inset-block-start:.125rem;inset-inline-end:calc(100% + .375rem);transform:translate(-.3rem)}.article-heading-copy:hover .article-heading-copy-icon,.article-heading-copy:focus-visible .article-heading-copy-icon{opacity:1;transform:translate(0)}.article-heading-copy:focus-visible{outline:.125rem solid var(--accent);outline-offset:.1875rem}@media (prefers-reduced-motion:no-preference){.article-heading-copy-icon{transition:opacity .16s ease-out,transform .16s ease-out}}@media (hover:none){.article-heading-copy-icon{opacity:1;transform:none}}@media (width<=42rem){.article-heading-copy-icon{vertical-align:middle;opacity:1;margin-inline-start:.375rem;display:inline-grid;position:static;transform:none}}.article-content>ol{padding-inline-start:1.5rem}.article-content>ol li{color:var(--muted);line-height:1.65}.article-content>ol li+li{margin-top:.25rem}.article-content [data-rehype-pretty-code-figure]{width:100%;margin-inline:0}.article-content pre{overscroll-behavior-inline:contain;border:.0625rem solid var(--border-subtle);background-color:var(--surface-subtle);width:100%;max-width:100%;color:var(--foreground);font-family:var(--font-mono);tab-size:2;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;text-size-adjust:100%;border-radius:.5rem;margin:0;padding:2.75rem 1rem 1rem;font-size:.875rem;line-height:1.6;position:relative;overflow-x:auto}.article-content pre[data-language]:before{color:var(--muted);font-family:var(--font-sans);letter-spacing:.08em;text-transform:uppercase;content:attr(data-language);-webkit-user-select:none;user-select:none;font-size:.6875rem;font-weight:600;position:absolute;inset-block-start:.875rem;inset-inline-start:1rem}.article-content pre code{min-width:max-content;font:inherit;display:block}.article-content :not(pre)>code{background-color:color-mix(in oklab, var(--foreground), transparent 94%);color:var(--foreground);font-family:var(--font-mono);border-radius:.25rem;padding:.125em .35em;font-size:.875em}.message-page h1{font-family:var(--font-serif);margin-bottom:1rem;font-size:2rem}.message-page a{margin-top:1rem;display:inline-block}.not-found-page{gap:1.5rem}.lost-mark{color:#245bc3;width:100%}.lost-mark-board{width:100%;height:clamp(13rem,22vw,16rem);position:relative}.lost-mark-target,.lost-mark-piece{width:clamp(5rem,24vw,9rem);position:absolute;top:50%;left:50%}.lost-mark-target{opacity:.2;pointer-events:none;height:auto;overflow:visible;transform:translate(-50%,-50%)}.lost-mark-target[data-complete=true]{opacity:0}.lost-mark-piece{z-index:1;color:inherit;cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;background:0 0;border:0;padding:0}.lost-mark-piece svg{width:100%;height:auto;display:block;overflow:visible}.lost-mark-piece[data-dragging=true]{z-index:2;cursor:grabbing}.lost-mark-piece:disabled{color:inherit;cursor:default;opacity:1}.lost-mark-piece:focus-visible,.lost-mark-reset:focus-visible{outline:.125rem solid var(--accent);outline-offset:.1875rem}.lost-mark-caption{flex-wrap:wrap;justify-content:center;align-items:baseline;gap:.75rem;min-height:1.5rem;display:flex}.lost-mark-caption p,.lost-mark-clock,.lost-mark-reset{font-size:.75rem}.lost-mark-caption p{text-align:center}.lost-mark-clock{color:var(--foreground);font-variant-numeric:tabular-nums}.lost-mark-reset{color:var(--accent);text-underline-offset:.1875rem;cursor:pointer;background:0 0;border:0;padding:0;font-family:inherit;text-decoration:underline}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}@media (prefers-reduced-motion:no-preference){.lost-mark-target{transition:opacity .2s ease-out}.lost-mark-piece:not([data-dragging=true]){transition:transform .22s cubic-bezier(.22,1,.36,1)}}::view-transition{background:var(--background)}::view-transition-old(root){opacity:0;animation:none}::view-transition-new(root){opacity:1;animation:none}html:active-view-transition-type(article-enter) :is(.article-time,.article-content){visibility:hidden;opacity:0;transform:translateY(.5rem)}@media (prefers-reduced-motion:no-preference){.article-time,.article-content{transition:opacity .3s ease-out,transform .3s cubic-bezier(.22,1,.36,1)}}::view-transition-group(.writing-title){animation-duration:.48s;animation-timing-function:cubic-bezier(.22,1,.36,1)}::view-transition-group(.writing-description){animation-duration:.48s;animation-timing-function:cubic-bezier(.22,1,.36,1)}::view-transition-old(.writing-title):only-child{opacity:0;animation:none}::view-transition-old(.writing-description):only-child{opacity:0;animation:none}::view-transition-new(.writing-title):only-child{opacity:1;animation:none}::view-transition-new(.writing-description):only-child{opacity:1;animation:none}@media (prefers-reduced-motion:reduce){::view-transition-group(*){animation:none!important}::view-transition-old(*){animation:none!important}::view-transition-new(*){animation:none!important}}@media (width>=48rem){.introduction{grid-template-columns:3.25rem minmax(0,1fr);align-items:center;display:grid}}@media (width<=30rem){.article-content pre{font-size:1rem}.project-link,.writing-link{margin-inline:-.5rem;padding-inline:.5rem}.writing-link{grid-template-columns:1fr}.writing-description{grid-column:auto}}
