@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-sans-latin-400-normal.CDDApCn2.woff2)format("woff2"),url(/_astro/ibm-plex-sans-latin-400-normal.CYLoc0-x.woff)format("woff")}@font-face{font-family:IBM Plex Sans;font-style:italic;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-sans-latin-400-italic.CZTNEAuW.woff2)format("woff2"),url(/_astro/ibm-plex-sans-latin-400-italic.CsGl1sm0.woff)format("woff")}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-sans-latin-500-normal.6ng42L7E.woff2)format("woff2"),url(/_astro/ibm-plex-sans-latin-500-normal.BgVn5rGT.woff)format("woff")}@font-face{font-family:IBM Plex Sans;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/ibm-plex-sans-latin-600-normal.CuJfVYMP.woff2)format("woff2"),url(/_astro/ibm-plex-sans-latin-600-normal.Cu4Hd6ag.woff)format("woff")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-latin-400-normal.DMJ8VG8y.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-400-normal.CvHOgSBP.woff)format("woff")}:root{--paper:#fff;--paper-deep:#f3f3f3;--ink:#111;--ink-muted:#5c5c5c;--rule:#e4e4e4;--accent:#1a3c6e;--accent-hover:#0f2748;--font-sans:"IBM Plex Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;--measure:38rem;--page:72rem;--gutter:clamp(1.25rem, 4vw, 2.5rem);--meta:11rem}*,:before,:after{box-sizing:border-box}html{background:var(--paper);color:var(--ink);font-family:var(--font-sans);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizelegibility;font-size:112.5%;line-height:1.55}body{flex-direction:column;min-height:100vh;margin:0;display:flex}img,svg,video{max-width:100%;height:auto}a{color:var(--accent);text-decoration-color:color-mix(in srgb, var(--accent) 35%, var(--rule));text-underline-offset:.18em;text-decoration-thickness:1px}a:hover{color:var(--accent-hover);text-decoration-color:var(--accent-hover)}:focus-visible{outline:2px solid var(--accent);outline-offset:3px}::selection{background:color-mix(in srgb, var(--accent) 18%, var(--paper));color:var(--ink)}.skip-link{left:var(--gutter);z-index:10;background:var(--ink);color:var(--paper);font-family:var(--font-sans);padding:.4rem .7rem;font-size:.8rem;text-decoration:none;position:absolute;top:-4rem}.skip-link:focus{top:.6rem}.site-header,.site-footer,.page,.spread{width:100%;max-width:var(--page);padding-inline:var(--gutter);margin-inline:auto}.site-header{border-bottom:1px solid var(--rule);font-family:var(--font-sans);letter-spacing:.06em;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:.75rem 1.5rem;padding-block:1.15rem 1rem;font-size:.78rem;display:flex}.wordmark{color:var(--ink);font-weight:500;text-decoration:none}.wordmark:hover{color:var(--accent)}.nav{gap:1.15rem;margin:0;padding:0;list-style:none;display:flex}.nav a{color:var(--ink-muted);text-decoration:none}.nav a:hover,.nav a[aria-current=page]{color:var(--ink)}.nav a[aria-current=page]{text-underline-offset:.28em;text-decoration:underline 1px;text-decoration-color:var(--rule)}.site-main{flex:1;padding-block:2.75rem 4rem}.site-footer{border-top:1px solid var(--rule);color:var(--ink-muted);font-family:var(--font-sans);letter-spacing:.04em;justify-content:space-between;gap:1rem;padding-block:1rem 1.5rem;font-size:.75rem;display:flex}.site-footer a{color:var(--ink-muted);text-decoration:none}.site-footer a:hover{color:var(--accent)}.masthead{max-width:var(--measure);margin-bottom:2.75rem}.masthead h1{letter-spacing:-.03em;margin:0;font-size:clamp(2.4rem,6vw,3.4rem);font-weight:600;line-height:1.05}.tagline{color:var(--ink-muted);margin:.7rem 0 0;font-size:1.15rem;font-weight:400;line-height:1.4}.desk{border-top:1px solid var(--rule);gap:2.5rem;padding-top:2rem;display:grid}@media (width>=52rem){.desk{grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);align-items:start;gap:3.5rem}}.desk-section h2{font-family:var(--font-sans);letter-spacing:.12em;text-transform:uppercase;color:var(--ink-muted);margin:0 0 1rem;font-size:.72rem;font-weight:500}.empty{color:var(--ink-muted);margin:0;font-style:italic}.entry-list{margin:0;padding:0;list-style:none}.entry-list li+li{border-top:1px solid var(--rule);margin-top:.15rem}.entry{color:inherit;gap:.2rem 1.25rem;padding-block:.95rem;text-decoration:none;display:grid}.entry:hover .entry-title{color:var(--accent)}.entry-title{letter-spacing:-.015em;color:var(--ink);margin:0;font-size:1.15rem;font-weight:600;line-height:1.25}.entry-blurb{color:var(--ink-muted);margin:0;font-size:.95rem}.entry-meta{font-family:var(--font-sans);letter-spacing:.04em;color:var(--ink-muted);margin:.15rem 0 0;font-size:.72rem}@media (width>=40rem){.entry{grid-template-columns:minmax(0,1fr) auto;align-items:baseline}.entry-blurb{grid-column:1}.entry-meta{text-align:right;white-space:nowrap;grid-area:1/2;margin:0}}.page-title{letter-spacing:-.03em;margin:0 0 .4rem;font-size:clamp(2rem,5vw,2.7rem);font-weight:600;line-height:1.1}.page-lead{max-width:var(--measure);color:var(--ink-muted);margin:0 0 2rem}.spread{max-width:var(--measure);gap:1.25rem;margin-inline:auto;display:grid}.spread-meta{font-family:var(--font-sans);letter-spacing:.03em;color:var(--ink-muted);font-size:.75rem;line-height:1.5}.spread-meta time,.spread-meta p{margin:0}.tags{flex-wrap:wrap;gap:.35rem .7rem;margin:.55rem 0 0;padding:0;list-style:none;display:flex}.tags li{text-transform:lowercase}.spread-main h1{letter-spacing:-.03em;margin:0 0 .5rem;font-size:clamp(2rem,5vw,2.8rem);font-weight:600;line-height:1.12}.lede{color:var(--ink-muted);margin:0 0 1.75rem;font-size:1.08rem;line-height:1.45}@media (width>=64rem){.spread{grid-template-columns:var(--meta) minmax(0, var(--measure));justify-content:center;align-items:start;column-gap:2.5rem}.spread-meta{text-align:right;padding-top:.55rem;position:sticky;top:1.75rem}.tags{justify-content:flex-end}}.project-links{margin:.7rem 0 0;padding:0;list-style:none}.project-links a{color:var(--accent)}.prose{font-size:1.02rem;line-height:1.68}.prose>:first-child{margin-top:0}.prose h2,.prose h3,.prose h4{letter-spacing:-.015em;font-weight:600;line-height:1.25}.prose h2{margin:2.2rem 0 .7rem;font-size:1.45rem}.prose h3{margin:1.8rem 0 .5rem;font-size:1.18rem}.prose p,.prose ul,.prose ol{margin:0 0 1.05rem}.prose li+li{margin-top:.3rem}.prose blockquote{border-left:1.5px solid var(--accent);color:var(--ink-muted);margin:1.4rem 0;padding:0 0 0 1rem;font-style:italic}.prose blockquote p:last-child{margin-bottom:0}.prose hr{border:0;border-top:1px solid var(--rule);margin:2rem 0}.prose code{font-family:var(--font-mono);background:var(--paper-deep);padding:.1em .32em;font-size:.86em}.prose pre{background:var(--paper-deep);margin:1.3rem 0;padding:1rem 1.1rem;font-size:.84rem;line-height:1.55;overflow-x:auto}.prose pre code{font-size:inherit;background:0 0;padding:0}.prose img{margin:1.4rem 0;display:block}.prose figure{margin:1.5rem 0}.prose figcaption{font-family:var(--font-sans);color:var(--ink-muted);margin-top:.4rem;font-size:.78rem}.prose table{border-collapse:collapse;width:100%;margin:1.3rem 0;font-size:.95rem}.prose th,.prose td{border-bottom:1px solid var(--rule);text-align:left;padding:.4rem .55rem}.margin-note{background:color-mix(in srgb, var(--paper-deep) 70%, var(--paper));font-family:var(--font-sans);color:var(--ink-muted);margin:1rem 0;padding:.7rem .85rem;font-size:.82rem;line-height:1.45;display:block}@media (width>=72rem){.prose{overflow:visible}.margin-note{float:right;clear:right;text-align:left;background:0 0;width:11.5rem;margin:.3rem -13.5rem 1rem 1.5rem;padding:0}}.about{max-width:var(--measure)}.about p{margin:0 0 1.05rem;font-size:1.05rem}.not-found{max-width:var(--measure)}.not-found h1{letter-spacing:-.03em;margin:0 0 .6rem;font-size:clamp(2rem,5vw,2.7rem);font-weight:600}.not-found p{color:var(--ink-muted)}@media print{.site-header,.site-footer,.skip-link{display:none}html{background:#fff;font-size:12pt}.site-main{padding:0}a{color:inherit;text-decoration:none}}
