@font-face{font-family:Archivo;font-style:normal;font-weight:100 900;font-stretch:62% 125%;font-display:swap;src:url(/fonts/archivo-latin-wdth-normal.woff2)format("woff2-variations")}@font-face{font-family:IBM Plex Sans;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/ibm-plex-sans-latin-400-normal.woff2)format("woff2")}@font-face{font-family:IBM Plex Sans;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/ibm-plex-sans-latin-500-normal.woff2)format("woff2")}@font-face{font-family:IBM Plex Sans;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/ibm-plex-sans-latin-600-normal.woff2)format("woff2")}@font-face{font-family:IBM Plex Sans;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/ibm-plex-sans-latin-700-normal.woff2)format("woff2")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/ibm-plex-mono-latin-400-normal.woff2)format("woff2")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/fonts/ibm-plex-mono-latin-500-normal.woff2)format("woff2")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url(/fonts/ibm-plex-mono-latin-600-normal.woff2)format("woff2")}:root{color-scheme:light;--paper:#f3f0e8;--paper-raised:#fbfaf6;--ink:#15171b;--muted:#5c6068;--rule:#cfc9bb;--rule-soft:#e2ddd1;--accent:#e8590c;--accent-text:#b83a0b;--ch2:#1f4fd1;--trace-ghost:#c4beb1;--dot:#ded8cc;--signal:var(--accent-text);--signal-wash:#f6e3d6;--probe:var(--ch2);--probe-wash:#e2e8f6;--surface:var(--paper-raised);--font-display:"Archivo", "Arial Narrow", system-ui, sans-serif;--font-text:"IBM Plex Sans", "Segoe UI", system-ui, sans-serif;--font-mono:"IBM Plex Mono", ui-monospace, "SFMono-Regular", Menlo, monospace;--text-label:.75rem;--text-small:.8125rem;--text-mono:.875rem;--step-0:1.0625rem;--step-1:1.1875rem;--step-2:1.375rem;--label-tracking:.06em;--rule-heavy:1.5px solid var(--ink);--rule-thin:.5px solid var(--rule);--container:1360px;--gutter:40px;--measure:44rem;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:24px;--space-6:32px;--space-7:48px;--space-8:64px;--space-9:80px}@media (width<=600px){:root{--gutter:24px}}*,:before,:after{box-sizing:border-box}html{background:var(--paper);color:var(--ink);font-family:var(--font-text);-webkit-text-size-adjust:100%;font-size:100%;line-height:1.6}body{background:var(--paper);flex-direction:column;min-height:100vh;margin:0;display:flex;position:relative}.page{z-index:1;width:100%;max-width:calc(var(--container) + 2 * var(--gutter));padding:0 var(--gutter);flex-direction:column;flex:1;margin:0 auto;display:flex;position:relative}.site-header{justify-content:space-between;align-items:center;gap:var(--space-3) var(--space-6);border-bottom:var(--rule-heavy);flex-wrap:wrap;padding:22px 0;display:flex}.brand{color:var(--ink);align-items:center;gap:10px;font-weight:600;text-decoration:none;display:inline-flex}.brand-mark{background:var(--accent);flex:none;width:12px;height:12px}.header-right{align-items:center;gap:var(--space-3) 28px;font-family:var(--font-mono);font-size:var(--text-mono);flex-wrap:wrap;display:flex}.site-nav{gap:var(--space-3) 28px;flex-wrap:wrap;display:flex}.site-nav a{color:var(--ink);text-decoration:none}.site-nav a:hover{color:var(--accent-text);text-decoration:underline}.ref-strip{justify-content:space-between;gap:var(--space-1) var(--space-5);border-bottom:var(--rule-thin);font-family:var(--font-mono);font-size:var(--text-label);letter-spacing:var(--label-tracking);text-transform:uppercase;color:var(--muted);flex-wrap:wrap;padding:10px 0;display:flex}.ref-strip p{margin:0}main{font-size:var(--step-0);flex:1}a{color:var(--ink);text-underline-offset:.2em;text-decoration-thickness:1px}a:hover{color:var(--accent-text)}:focus-visible{outline:2px solid var(--ink);outline-offset:2px}.label{font-family:var(--font-mono);font-size:var(--text-label);letter-spacing:var(--label-tracking);text-transform:uppercase;color:var(--muted);font-weight:400}.mono-link{font-family:var(--font-mono);font-size:var(--text-mono)}.tag{font-family:var(--font-mono);font-size:var(--text-label);color:var(--ink);border:1px solid var(--rule);white-space:nowrap;align-items:center;gap:6px;padding:3px 8px;line-height:1.4;display:inline-flex}@media (prefers-reduced-motion:no-preference){@view-transition{navigation:auto}::view-transition-old(root),::view-transition-new(root){animation-duration:.2s}::view-transition-group(lang-marker){animation-duration:.25s;animation-timing-function:cubic-bezier(.2,.8,.2,1)}::view-transition-group(*.project-title){animation-duration:.3s;animation-timing-function:cubic-bezier(.2,.8,.2,1)}}[data-vt-title]{view-transition-class:project-title}.site-footer{justify-content:space-between;gap:var(--space-2) var(--space-5);border-top:var(--rule-heavy);margin-top:var(--space-8);font-family:var(--font-mono);font-size:var(--text-label);color:var(--muted);flex-wrap:wrap;padding:22px 0 40px;display:flex}.site-footer p{margin:0}.site-footer a{color:var(--muted)}.site-footer a:hover{color:var(--accent-text)}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.dot-field[data-astro-cid-z66vr36a]{pointer-events:none;z-index:0;width:100%;height:100%;position:absolute;inset:0}.lang-switch[data-astro-cid-34uxj53s]{font-family:var(--font-mono);font-size:var(--text-mono);align-items:baseline;gap:.4em;display:inline-flex}.lang[data-astro-cid-34uxj53s]{position:relative}.sep[data-astro-cid-34uxj53s]{color:var(--muted)}.is-current[data-astro-cid-34uxj53s]{color:var(--ink);font-weight:600}a[data-astro-cid-34uxj53s].lang{color:var(--muted);text-decoration:none}a[data-astro-cid-34uxj53s].lang:hover{color:var(--accent-text);text-decoration:underline}.lang-marker[data-astro-cid-34uxj53s]{background:var(--accent);view-transition-name:lang-marker;height:1.5px;position:absolute;bottom:-3px;left:0;right:0}
