.yarn-line{pointer-events:none;width:100%;height:100%;position:absolute;inset:0;overflow:visible}.yarn-defs{width:0;height:0;position:absolute;overflow:hidden}.knot{transform-box:fill-box;transform-origin:50%;transition:transform .15s}.knot.swell{transform:scale(1.25)}.pencil-line{fill:none;stroke:var(--pencil);stroke-width:.8px}@media (prefers-reduced-motion:reduce){.knot{transition:none}}.yarn-column{position:relative}.yarn-row{grid-template-columns:1fr 48px 1fr;grid-template-areas:"aside knot main";display:grid}.yarn-aside{text-align:right;grid-area:aside}.yarn-main{grid-area:main;min-width:0}.yarn-knot{width:0;height:0;margin-top:8.5px;margin-top:var(--knot-top,.5lh);grid-area:knot;place-self:start center}@media (width<=700px){.yarn-row{grid-template-columns:26px 1fr;grid-template-areas:".aside""knot main";column-gap:6px}.yarn-aside{text-align:left}}.masthead{text-align:center;padding-top:48px;font-size:13px;line-height:17px}.masthead.big{padding-top:96px}.masthead-name{font-size:16px;font-weight:700;line-height:20px}.masthead.big .masthead-name{font-size:25px;line-height:30px}.masthead-name a{text-decoration:none;display:inline-block}.masthead-name a:hover{text-decoration:underline}.masthead-role{margin-top:8px}.masthead-nav{justify-content:center;gap:31px;margin-top:8px;display:flex}.masthead-name a{margin-top:-24px;padding-top:24px}.masthead-nav>*{margin:-8px 0 -19px;padding:8px 0 19px}.masthead-nav [aria-current]{font-weight:700}.masthead-nav a[aria-current]{text-decoration:none}.masthead-nav a[aria-current]:hover{text-decoration:underline}@media (width<=700px){.masthead{padding:40px 0 0 var(--phone-edge);text-align:left}.yarn-sheet .masthead{padding-left:var(--yarn-edge)}.masthead-name{font-size:15px}.masthead-nav{justify-content:flex-start;gap:22px;font-size:12.5px}}@media (width>=1001px){.masthead.big{text-align:left;padding-top:0}.masthead.big .masthead-name{font-size:clamp(64px,6vw,96px);line-height:1.05}.masthead.big .masthead-line{display:block}.masthead.big .masthead-role{margin-top:22px;font-size:22px;line-height:28px}.masthead.big .masthead-nav{justify-content:flex-start;gap:43px;margin-top:30px;font-size:18px;line-height:23px}}.index-column{margin-top:46px;padding:30px 0 24px;font-size:13px;line-height:17px}.index-list{list-style:none}.index-entry .yarn-row{min-height:60px;text-decoration:none}.index-entry.rough{margin-top:240px}.index-line{display:block}a.yarn-row:hover .index-line,a.yarn-row:focus-visible .index-line{text-decoration:underline}.index-footer{text-align:center;color:var(--muted);margin-top:40px;font-size:13px;line-height:17px}.index-footer a{color:inherit;padding:13px 0;display:inline-block}@media (width<=700px){.index-column{margin-top:30px}.index-footer{padding-left:var(--yarn-edge);flex-direction:column;align-items:flex-start;display:flex}.index-footer>span{display:none}.index-footer a{padding:13px 0}.index-entry .yarn-row{min-height:0;padding-bottom:22px}}@media (width>=1001px){.sheet.index-sheet{grid-template-columns:minmax(max-content,1fr) minmax(0,2fr);align-items:center;max-width:1600px;min-height:100vh;padding:0 clamp(64px,10vw,160px) 0 clamp(48px,7vw,112px);display:grid}.index-column{margin-top:0;padding:min(42px,4.5vh) 0 0;font-size:17px;line-height:23px}.index-entry .yarn-row{min-height:min(80px,8.5vh)}.index-entry.rough{margin-top:min(190px,20vh)}.sheet.index-sheet{position:relative}.index-footer{margin:0;position:absolute;bottom:min(32px,3vh);left:clamp(48px,7vw,112px)}}.not-found{text-align:center;margin-top:72px;font-size:13px;line-height:17px}.not-found a{padding:13.5px 0;display:inline-block}@media (width<=700px){.not-found{padding-left:var(--phone-edge);text-align:left}}.role-column{margin-top:46px;padding:30px 0 48px;font-size:15px;line-height:22px}.role-head{--knot-top:15px}.role-company{font-size:24px;font-weight:700;line-height:30px}.role-line{font-size:13px;line-height:17px;display:block}.role-muted,.role-label{color:var(--muted)}.role-label{font-size:13px;font-weight:400;line-height:22px}.role-section{margin-top:28px}.role-section p+p{margin-top:10px}.role-section .yarn-main{padding-right:8px}.role-next{opacity:.62;margin-top:56px;text-decoration:none}.role-next:hover .role-line,.role-next:focus-visible .role-line{text-decoration:underline}.role-next:hover,.role-next:focus-visible{opacity:.8}@media (width<=700px){.role-column{margin-top:30px}.role-section{margin-top:22px}}.diagram{width:100%;position:relative;container-type:inline-size}.diagram svg{width:100%;height:100%;position:absolute;inset:0;overflow:visible}.diagram-label{font-size:min(13px, calc(1300cqw / var(--w)));text-align:center;white-space:nowrap;line-height:1.385;position:absolute;transform:translate(-50%,-50%)}.diagram-label>span{display:block}.diagram-label.strong>span:first-child{font-weight:700}.diagram-sub,.diagram-label.muted{color:var(--muted)}.diagram-label.wrap{white-space:normal;text-wrap:balance}.project{max-width:820px;margin:46px auto 0}.project-name{font-size:30px;font-weight:700;line-height:34px}.project-facts{color:var(--muted);margin-top:6px;font-size:13px;line-height:17px}.project-facts a{margin:-13.5px 0;padding:13.5px 0;display:inline-block}.project-diagram{margin-top:58px}.project-writeup{max-width:65ch;margin-top:58px;font-size:15px;line-height:23px}.project-writeup p+p{margin-top:12px}.project-label{color:var(--muted);margin-top:40px;font-size:13px;line-height:20px}.project-stack{font-size:13px;line-height:20px}@media (width<=700px){.project{padding-left:var(--phone-edge);margin-top:30px}.project-diagram,.project-writeup{margin-top:40px}}.print{box-sizing:border-box;border:7px solid var(--print);background:var(--placeholder);filter:drop-shadow(0 1.6px 1.8px #2a262033);width:300px;max-width:100%;position:relative}.print-img{object-fit:cover;width:100%;height:100%;display:block}.print-placeholder{height:100%;color:var(--muted);flex-direction:column;justify-content:center;align-items:center;gap:4px;font-size:12px;display:flex}.print-soon{font-size:11px}.print-tape{pointer-events:none;position:absolute;top:-7px;left:-7px;overflow:visible}.projects{max-width:800px;margin:46px auto 0;font-size:13px;line-height:17px}.projects-list{list-style:none}.projects-list li+li{margin-top:44px}.projects-row{grid-template-columns:300px 1fr;align-items:start;column-gap:32px;padding:8px 0;text-decoration:none;display:grid}.projects-name{font-size:22px;font-weight:700;line-height:26px}.projects-row:hover .projects-name,.projects-row:focus-visible .projects-name{text-underline-offset:3px;text-decoration:underline}.projects-span,.projects-stack{color:var(--muted)}.projects-span{margin-top:2px}.projects-desc{margin-top:12px;font-size:14px;line-height:19px}.projects-stack{margin-top:12px}@media (width<=700px){.projects{padding-left:var(--phone-edge);margin-top:30px}.projects-row{grid-template-columns:1fr;row-gap:18px}}.writing{max-width:800px;margin:46px auto 0;font-size:13px;line-height:17px}.writing-list{list-style:none}.writing-row{grid-template-columns:150px 1fr auto;grid-template-areas:"date main side"".thread thread";column-gap:24px;padding-top:28px;display:grid}.writing-date{color:var(--muted);grid-area:date}.writing-draft{font-style:italic}.writing-main{grid-area:main;min-width:0}.writing-title{font-size:17px;font-weight:700;line-height:20px}.writing-title a{text-decoration:none}.writing-title a:hover,.writing-title a:focus-visible{text-decoration:underline}.writing-excerpt{margin-top:6px;font-size:14px;line-height:19px}.writing-side{text-align:right;grid-area:side}.writing-side span{display:block}.writing-time{color:var(--muted)}.writing-status{color:var(--red-text)}.writing-thread{grid-area:thread;margin-top:14px}.progress-thread{display:block;overflow:visible}.writing-empty{color:var(--muted)}@media (width<=700px){.writing{padding-left:var(--phone-edge);margin-top:30px}.writing-row{grid-template-columns:1fr;grid-template-areas:"date""main""side""thread";row-gap:4px;padding-top:22px}.writing-side{text-align:left}.writing-side span{display:inline}.writing-side span+span:before{content:" · ";color:var(--muted)}.writing-title a{margin:-12px 0;padding:12px 0;display:inline-block}}.post{grid-template-columns:minmax(0,65ch) 220px;grid-template-areas:"head margin""body margin""pager.";justify-content:center;column-gap:72px;margin-top:46px;display:grid}.post-head{grid-area:head}.post-facts{color:var(--muted);font-size:13px;line-height:17px}.post-draft{font-style:italic}.post-title{margin-top:18px;font-size:30px;font-weight:700;line-height:34px}.post-margin{grid-area:margin;align-self:start;position:sticky;top:120px}.post-topbar{display:none}.margin-thread{padding-bottom:60px;font-size:12.5px;line-height:16px;position:relative}.margin-thread ol{list-style:none}.margin-entry{color:var(--muted);grid-template-columns:22px 1fr;column-gap:10px;display:grid}.margin-entry+.margin-entry{margin-top:max(0px, min(64px, (100vh - 180px) / var(--gaps,1)) - 16px)}.margin-entry.passed{color:var(--ink)}.margin-entry>:last-child{grid-column:2;min-width:0}.margin-knot{grid-area:1/1;justify-self:center;width:0;height:0;margin-top:8px}.margin-here{color:var(--red-text);white-space:nowrap;pointer-events:none;font-size:11px;line-height:16px;position:absolute;left:32px;transform:translateY(-50%)}.post-body{grid-area:body;margin-top:40px;font-size:15px;line-height:23px;display:flow-root}.post-body p{margin:0 0 18px}.post-body strong{font-weight:700}.post-body h2{clear:both;margin:36px 0 12px;font-weight:700}.post-body>h2:first-child{margin-top:0}.post-body ul,.post-body ol{margin:0 0 18px;padding-left:22px}.post-body li{margin-bottom:6px}.post-body blockquote{color:var(--muted);border-left:1px solid var(--muted);margin:26px 0;padding-left:22px}.post-body code{font-family:var(--mono);background:var(--placeholder);padding:0 3px}.code{background:var(--placeholder);margin:6px 0 24px;font-size:13px;line-height:20px}.code .bar{color:var(--muted);padding:6px 14px 0;font-size:12.5px}.code pre{font:inherit;margin:0;padding:8px 0 12px;overflow:auto}.code .cl{grid-template-columns:44px 1fr;display:grid}.code .cl i{color:var(--muted);text-align:right;-webkit-user-select:none;user-select:none;padding-right:16px;font-style:normal}.code .cl span{white-space:pre;padding-right:14px}.figure{margin:30px 0}.figure__media{width:100%;height:auto;display:block}.figure__caption{color:var(--muted);margin-top:10px;font-size:12.5px;line-height:17px}.figure--left,.figure--right{width:42%;margin-top:6px;margin-bottom:18px}.figure--left{float:left;margin-right:28px}.figure--right{float:right;margin-left:28px}.figure--wide{width:calc(100% + 56px);max-width:calc(100vw - 112px)}.gallery{clear:both;gap:16px;margin:30px 0;display:flex}.gallery .figure{flex:1;min-width:0;margin:0}.callout{clear:both;margin:26px 0;padding:2px 0 2px 22px;position:relative}.callout:before{content:"";background:var(--ink);width:1px;position:absolute;top:6px;bottom:6px;left:0}.callout__label{color:var(--muted);margin-bottom:4px;font-size:12.5px}.callout__body p{margin:0 0 12px}.callout__body p:last-child{margin-bottom:0}.post-pager{grid-area:pager;justify-content:space-between;gap:24px;margin-top:56px;font-size:13px;line-height:17px;display:flex}.post-pager-item{flex-direction:column;gap:4px;min-width:0;display:flex}.post-pager-item.older{text-align:right;margin-left:auto}.post-pager-label{color:var(--muted)}@media (width<=700px){.post{padding-left:var(--phone-edge);grid-template-columns:minmax(0,1fr);grid-template-areas:"head""body""pager";margin-top:30px}.post-margin{display:none}.post-topbar{z-index:10;background:var(--paper);padding:4px 16px;display:block;position:fixed;top:0;left:0;right:0}.post-title{font-size:24px;line-height:29px}.post-pager a{margin:-13px 0;padding:13px 0;display:inline-block}.figure--wide{width:100%;max-width:none}.figure--left,.figure--right{float:none;width:100%;margin:30px 0}.gallery{flex-direction:column}}@font-face{font-family:Courier Prime;src:url(/assets/CourierPrime-400-BbyBr73r.woff2)format("woff2");font-weight:400;font-display:swap}@font-face{font-family:Courier Prime;src:url(/assets/CourierPrime-700-D1YCjmaD.woff2)format("woff2");font-weight:700;font-display:swap}*,:before,:after{box-sizing:border-box;margin:0;padding:0}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--paper:#f3f1ec;--ink:#1c1c1a;--muted:#1c1c1aa6;--red-text:#9a2a1f;--pencil:#8c8a8499;--tape:#2e70d6db;--tape-edge:#143c8c66;--print:#fbfaf7;--placeholder:#eceae5;--mono:"Courier Prime", ui-monospace, monospace;--phone-edge:32px;--yarn-edge:13px}html{background:var(--paper)}body{background-color:var(--paper);color:var(--ink);font:400 15px/1.55 var(--mono);-webkit-font-smoothing:antialiased;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cfilter id='p' x='0' y='0' width='100%25' height='100%25'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='4' seed='3' stitchTiles='stitch' result='n'/%3E%3CfeDiffuseLighting in='n' surfaceScale='.9' lighting-color='%23F8F6F1' diffuseConstant='1.17'%3E%3CfeDistantLight azimuth='235' elevation='58'/%3E%3C/feDiffuseLighting%3E%3C/filter%3E%3Crect width='240' height='240' filter='url(%23p)'/%3E%3C/svg%3E");background-size:240px 240px;min-height:100vh}::selection{background:var(--ink);color:var(--paper)}a{color:inherit;text-underline-offset:3px;text-decoration:underline}.tape{fill:var(--tape);stroke:var(--tape-edge);stroke-width:.4px}h1,h2,h3{font-weight:400;font-size:inherit}:focus-visible{outline:1px solid var(--ink);outline-offset:3px}.visually-hidden{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.sheet{max-width:1100px;margin:0 auto;padding:0 24px 96px}@media (width<=700px){.sheet{padding:0 16px 64px}}
