@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")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-latin-500-normal.DSY6xOcd.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-500-normal.CB9ihrfo.woff)format("woff")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/ibm-plex-mono-latin-600-normal.BgSNZQsw.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-600-normal.DWFSQ4vo.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-ext-400-normal.BmRBH3aV.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-ext-400-normal.D3D2R8hC.woff)format("woff")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/ibm-plex-mono-latin-ext-500-normal.CAhNIIs5.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-ext-500-normal.CZ70TYgx.woff)format("woff")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/ibm-plex-mono-latin-ext-600-normal.D38SheWl.woff2)format("woff2"),url(/_astro/ibm-plex-mono-latin-ext-600-normal.DmB0ttJJ.woff)format("woff")}@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: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 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:400;src:url(/_astro/ibm-plex-sans-latin-ext-400-normal.C5H60-Va.woff2)format("woff2"),url(/_astro/ibm-plex-sans-latin-ext-400-normal.RBey6euL.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-ext-500-normal.DakdToA3.woff2)format("woff2"),url(/_astro/ibm-plex-sans-latin-ext-500-normal.D0aIdm-b.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-ext-600-normal.DOrvGEcy.woff2)format("woff2"),url(/_astro/ibm-plex-sans-latin-ext-600-normal.DIrixKbi.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-ext-400-italic.Du9zzoL2.woff2)format("woff2"),url(/_astro/ibm-plex-sans-latin-ext-400-italic.V_9i1P_m.woff)format("woff")}:root{color-scheme:light dark;--bg:#fafaf9;--code-bg:#efefec;--rule:#e4e4e7;--ink:#18181b;--ink-muted:#52525b;--ink-faint:#6b6b73;--accent:#14703a;--focus:var(--accent);--font-mono:"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;--font-sans:"IBM Plex Sans", system-ui, -apple-system, "Segoe UI", sans-serif;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-6:24px;--space-8:32px;--space-12:48px;--space-24:96px;--radius-sm:4px;--radius-md:6px;--content-width:760px;--touch-target:44px}@media (prefers-color-scheme:dark){:root{--bg:#0e0f11;--code-bg:#1a1b1e;--rule:#27272a;--ink:#e7e7e9;--ink-muted:#a1a1aa;--ink-faint:#8b8b93;--accent:#4ade80}}[data-theme=dark]{--bg:#0e0f11;--code-bg:#1a1b1e;--rule:#27272a;--ink:#e7e7e9;--ink-muted:#a1a1aa;--ink-faint:#8b8b93;--accent:#4ade80}.t-name-display{font-family:var(--font-mono);letter-spacing:-.02em;font-size:40px;font-weight:600;line-height:46px}.t-section-label{font-family:var(--font-mono);font-size:15px;font-weight:600;line-height:22px}.t-meta{font-family:var(--font-mono);font-size:14px;font-weight:400;line-height:21px}.t-meta-sm{font-family:var(--font-mono);font-size:13px;font-weight:400;line-height:20px}.t-chip{font-family:var(--font-mono);font-size:12px;font-weight:400;line-height:16px}.t-glance-value{font-family:var(--font-mono);letter-spacing:-.02em;font-size:32px;font-weight:600;line-height:38px}.t-post-title{font-family:var(--font-sans);letter-spacing:-.015em;font-size:36px;font-weight:600;line-height:43px}.t-lede{font-family:var(--font-sans);font-size:22px;font-weight:400;line-height:32px}.t-prose-h2{font-family:var(--font-sans);letter-spacing:-.01em;font-size:24px;font-weight:600;line-height:31px}.t-prose-h3{font-family:var(--font-sans);font-size:19px;font-weight:600;line-height:26px}.t-prose{font-family:var(--font-sans);font-size:17px;font-weight:400;line-height:29px}.t-title{font-family:var(--font-sans);font-size:20px;font-weight:600;line-height:26px}.t-body{font-family:var(--font-sans);font-size:16px;font-weight:400;line-height:26px}.eb-page{background:var(--bg);color:var(--ink);font-family:var(--font-sans)}.eb-page :focus-visible{outline:2px solid var(--focus);outline-offset:2px}body.eb-page{padding:0 var(--space-6);-webkit-text-size-adjust:100%;margin:0}.eb-container{max-width:var(--content-width);margin-inline:auto}.eb-section{padding-top:var(--space-24)}.eb-hero{padding-top:88px}.eb-lede{max-width:34em;margin:20px 0 0;font-size:22px;line-height:1.45}.eb-prompt{font-family:var(--font-mono);color:var(--ink-faint);margin:0;font-size:14px}.eb-name{margin:var(--space-2) 0 0;font-family:var(--font-mono);letter-spacing:-.02em;font-size:40px;font-weight:600;line-height:1.15}.eb-hero .eb-meta,.eb-hero .eb-actions{margin-top:var(--space-8)}.eb-hero__who{align-items:center;gap:var(--space-4);display:flex}.eb-hero__photo{object-fit:cover;border:1px solid var(--rule);border-radius:var(--radius-md);flex:none;width:72px;height:72px}.eb-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}@media (prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.eb-skip{top:var(--space-2);left:var(--space-2);min-height:var(--touch-target);padding:0 var(--space-4);background:var(--bg);border:1px solid var(--rule);border-radius:var(--radius-md);font-family:var(--font-mono);color:var(--ink);align-items:center;font-size:14px;text-decoration:none;display:inline-flex;position:absolute}.eb-skip:not(:focus){clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;min-height:0;margin:-1px;padding:0;overflow:hidden}.eb-header{justify-content:space-between;align-items:center;gap:var(--space-2) var(--space-6);padding:var(--space-4) 0;border-bottom:1px solid var(--rule);flex-wrap:wrap;display:flex}.eb-home{min-height:var(--touch-target);font-family:var(--font-mono);color:var(--ink);align-items:center;font-size:15px;font-weight:600;text-decoration:none;display:inline-flex}.eb-nav{font-family:var(--font-mono);flex-wrap:wrap;gap:0 20px;font-size:14px;display:flex}.eb-nav a{min-height:var(--touch-target);color:var(--ink-muted);align-items:center;text-decoration:none;display:inline-flex}.eb-nav a:hover,.eb-nav a[aria-current]{color:var(--ink)}.eb-section-head{justify-content:space-between;align-items:baseline;gap:var(--space-4);padding-bottom:var(--space-4);display:flex}.eb-section-label{font-family:var(--font-mono);color:var(--ink);margin:0;font-size:15px;font-weight:600;line-height:22px}.eb-section-count{font-family:var(--font-mono);color:var(--ink-faint);font-size:13px}.eb-actions{gap:var(--space-3);flex-wrap:wrap;display:flex}.eb-btn{min-height:var(--touch-target);padding:0 var(--space-4);border:1px solid var(--rule);border-radius:var(--radius-md);color:var(--ink);font-family:var(--font-mono);align-items:center;font-size:14px;text-decoration:none;display:inline-flex}.eb-btn:hover{border-color:var(--ink-faint)}.eb-btn--primary{border-color:var(--accent);color:var(--accent);font-weight:500}.eb-btn--primary:hover{border-color:var(--accent);text-decoration:underline}.eb-link{min-height:var(--touch-target);font-family:var(--font-mono);color:var(--accent);align-items:center;font-size:13px;text-decoration:none;display:inline-flex}.eb-link:hover{text-decoration:underline}.eb-meta{gap:var(--space-2) var(--space-4);font-family:var(--font-mono);grid-template-columns:72px minmax(0,1fr);margin:0;font-size:14px;line-height:1.5;display:grid}.eb-meta dt{color:var(--ink-faint)}.eb-meta dd{color:var(--ink);margin:0}.eb-dot{color:var(--accent)}.eb-chips{flex-wrap:wrap;gap:6px;display:flex}.eb-chip{font-family:var(--font-mono);background:var(--code-bg);color:var(--ink);padding:3px var(--space-2);border-radius:var(--radius-sm);font-size:12px;line-height:16px}.eb-row{gap:var(--space-2) 20px;border-top:1px solid var(--rule);flex-wrap:wrap;padding:28px 0;display:flex}.eb-row__index{font-family:var(--font-mono);color:var(--ink-faint);flex:0 0 28px;padding-top:3px;font-size:14px}.eb-row__body{flex:480px;min-width:0}.eb-row__head{justify-content:space-between;align-items:baseline;gap:var(--space-1) var(--space-4);flex-wrap:wrap;display:flex}.eb-row__title{color:var(--ink);margin:0;font-size:20px;font-weight:600;line-height:1.3}.eb-row__org{color:var(--ink-muted);font-weight:400}.eb-row__period{font-family:var(--font-mono);color:var(--ink-faint);font-size:13px}.eb-row__summary{max-width:38em;color:var(--ink-muted);margin:10px 0 0;font-size:16px;line-height:1.6}.eb-row .eb-chips{margin-top:14px}.eb-row .eb-link{margin-top:var(--space-1)}.eb-project{align-items:baseline;gap:var(--space-1) var(--space-4);padding:var(--space-4) 0;border-top:1px solid var(--rule);flex-wrap:wrap;display:flex}.eb-project__name{color:var(--ink);min-height:var(--touch-target);flex:0 0 158px;align-items:center;font-size:16px;font-weight:600;text-decoration:none;display:inline-flex}.eb-project__name:hover{text-decoration:underline}.eb-project__line{min-width:0;color:var(--ink-muted);flex:280px;font-size:15px;line-height:1.5}.eb-project__stack{margin-top:var(--space-1);font-family:var(--font-mono);color:var(--ink-faint);font-size:12px;display:block}.eb-status{font-family:var(--font-mono);color:var(--ink-faint);white-space:nowrap;font-size:13px}.eb-status:before{content:"● "}.eb-status--live:before{color:var(--accent)}.eb-status--active:before{color:var(--ink-muted)}.eb-status--archived:before{content:"○ ";color:var(--ink-faint)}.eb-exp{gap:var(--space-1) var(--space-6);border-top:1px solid var(--rule);flex-wrap:wrap;padding:20px 0;display:flex}.eb-exp__dates{font-family:var(--font-mono);color:var(--ink-faint);flex:0 0 150px;font-size:13px;line-height:24px}.eb-exp__body{flex:360px;min-width:0}.eb-exp__role{color:var(--ink);margin:0;font-size:16px;font-weight:600;line-height:24px}.eb-exp__company{color:var(--ink-muted);font-weight:400}.eb-exp__line{margin:var(--space-1) 0 0;color:var(--ink-muted);font-size:15px;line-height:1.55}.eb-exp__bullets{margin:var(--space-2) 0 0;color:var(--ink-muted);padding-left:20px;font-size:15px;line-height:1.55}.eb-exp__bullets li+li{margin-top:var(--space-1)}.eb-skills{gap:var(--space-3) var(--space-4);grid-template-columns:112px minmax(0,1fr);margin:0;display:grid}.eb-skills dt{font-family:var(--font-mono);color:var(--ink-faint);font-size:13px;line-height:24px}.eb-skills dd{color:var(--ink);margin:0;font-size:16px;line-height:24px}.eb-skills__also{color:var(--ink-muted)}.eb-post{gap:var(--space-1) var(--space-6);border-top:1px solid var(--rule);flex-wrap:wrap;padding:20px 0;display:flex}.eb-post__date{font-family:var(--font-mono);color:var(--ink-faint);flex:0 0 110px;font-size:13px;line-height:26px}.eb-post__body{flex:360px;min-width:0}.eb-post__title{color:var(--ink);font-size:18px;font-weight:600;line-height:26px;text-decoration:none}.eb-post__title:hover{text-decoration:underline}.eb-post__summary{color:var(--ink-muted);margin:6px 0 0;font-size:15px;line-height:1.55}.eb-post__meta{font-family:var(--font-mono);color:var(--ink-faint);margin:6px 0 0;font-size:12px}.eb-code{padding:var(--space-4);background:var(--code-bg);border-radius:var(--radius-md);font-family:var(--font-mono);color:var(--ink);margin:0;font-size:13px;line-height:1.6;overflow-x:auto}.eb-code .k{color:var(--accent)}.eb-code .c{color:var(--ink-faint)}.eb-footer{justify-content:space-between;align-items:center;gap:0 var(--space-6);margin-top:var(--space-24);padding:var(--space-4) 0 var(--space-8);border-top:1px solid var(--rule);font-family:var(--font-mono);color:var(--ink-faint);flex-wrap:wrap;font-size:13px;display:flex}.eb-footer span,.eb-footer a{min-height:var(--touch-target);align-items:center;display:inline-flex}.eb-footer nav{flex-wrap:wrap;gap:0 20px;display:flex}.eb-footer a{color:var(--ink-faint);text-decoration:none}.eb-footer a:hover{color:var(--ink)}.eb-glance{gap:0 var(--space-6);border-top:1px solid var(--rule);flex-wrap:wrap;display:flex}.eb-glance__item{min-width:0;padding:var(--space-6) 0 var(--space-2);flex:150px}.eb-glance__value{font-family:var(--font-mono);letter-spacing:-.02em;color:var(--ink);margin:0;font-size:32px;font-weight:600;line-height:38px}.eb-glance__label{color:var(--ink-muted);margin:6px 0 0;font-size:15px;line-height:1.45}.eb-glance__source{min-height:var(--touch-target);font-family:var(--font-mono);color:var(--ink-faint);text-underline-offset:3px;align-items:center;font-size:12px;text-decoration:underline;display:inline-flex}.eb-principles{border-top:1px solid var(--rule);flex-wrap:wrap;gap:0 40px;display:flex}.eb-principle{min-width:0;padding:var(--space-6) 0 var(--space-2);flex:300px}.eb-principle__n{font-family:var(--font-mono);color:var(--ink-faint);margin:0;font-size:13px}.eb-principle__title{color:var(--ink);margin:6px 0 0;font-size:18px;font-weight:600;line-height:1.35}.eb-principle__body{margin:var(--space-2) 0 0;color:var(--ink-muted);font-size:16px;line-height:1.6}.eb-contact{border-top:1px solid var(--rule);padding-top:28px}.eb-contact__lede{max-width:30em;color:var(--ink);margin:0;font-size:20px;line-height:1.5}.eb-contact__email{min-height:var(--touch-target);margin-top:var(--space-4);font-family:var(--font-mono);color:var(--accent);text-underline-offset:5px;overflow-wrap:anywhere;align-items:center;font-size:22px;font-weight:500;text-decoration:underline;display:inline-flex}.eb-contact .eb-actions{margin-top:var(--space-6)}.eb-contact__note{margin:var(--space-6) 0 0;font-family:var(--font-mono);color:var(--ink-faint);font-size:13px;line-height:1.6}.eb-pagehead{padding-top:56px}.eb-crumbs{font-family:var(--font-mono);color:var(--ink-faint);font-size:13px}.eb-crumbs a{color:var(--ink-faint);text-decoration:none}.eb-crumbs a:hover{color:var(--ink)}.eb-crumbs [aria-current]{color:var(--ink-muted)}.eb-pagehead__title{font-family:var(--font-mono);letter-spacing:-.02em;color:var(--ink);overflow-wrap:break-word;margin:20px 0 0;font-size:40px;font-weight:600;line-height:1.15}.eb-pagehead__title--post{font-family:var(--font-sans);letter-spacing:-.015em;max-width:20em;font-size:36px;line-height:1.2}.eb-pagehead__lede{margin:var(--space-4) 0 0;max-width:34em;color:var(--ink);font-size:22px;line-height:1.45}.eb-pagehead__meta{margin:var(--space-4) 0 0;font-family:var(--font-mono);color:var(--ink-faint);font-size:13px;line-height:1.6}.eb-pagehead .eb-meta{margin-top:28px}.eb-pagehead .eb-chips{margin-top:20px}.eb-decision{margin-top:var(--space-4);border-top:1px solid var(--rule);padding-top:20px}.eb-decision__title{color:var(--ink);margin:0;font-size:18px;font-weight:600;line-height:1.4}.eb-decision__id{font-family:var(--font-mono);color:var(--ink-faint);font-size:14px;font-weight:500}.eb-decision dl{gap:var(--space-2) var(--space-4);grid-template-columns:72px minmax(0,1fr);margin:14px 0 0;display:grid}.eb-decision dt{font-family:var(--font-mono);color:var(--ink-faint);font-size:13px;line-height:26px}.eb-decision dd{color:var(--ink);margin:0;font-size:16px;line-height:26px}.eb-decision dd.eb-decision__over{color:var(--ink-muted)}.eb-figure{margin:var(--space-4) 0 0}.eb-figure figcaption{font-family:var(--font-mono);color:var(--ink-faint);margin-top:10px;font-size:12px;line-height:1.5}.eb-figure--flow{padding:var(--space-6);background:var(--code-bg);border-radius:var(--radius-md)}.eb-figure--flow figcaption{margin-top:20px}.eb-flow{font-family:var(--font-mono);text-align:center;flex-direction:column;align-items:center;gap:6px;font-size:13px;line-height:1.45;display:flex}.eb-flow__node{box-sizing:border-box;width:100%;max-width:420px;padding:var(--space-3) var(--space-4);background:var(--bg);border:1px solid var(--rule);border-radius:var(--radius-md)}.eb-flow__node--key{border-color:var(--accent)}.eb-flow__node p{margin:0}.eb-flow__name{color:var(--ink);font-weight:600}.eb-flow__note{color:var(--ink-faint);margin-top:2px}.eb-flow__split{gap:var(--space-2);flex-wrap:wrap;width:100%;max-width:420px;display:flex}.eb-flow__split .eb-flow__node{flex:160px}.eb-flow__arrow{color:var(--ink-faint)}.eb-figure__placeholder{aspect-ratio:16/9;padding:var(--space-4);box-sizing:border-box;background:var(--code-bg);border-radius:var(--radius-md);font-family:var(--font-mono);color:var(--ink-faint);text-align:center;justify-content:center;align-items:center;font-size:13px;display:flex}.eb-prose{color:var(--ink);font-size:17px;line-height:1.7}.eb-prose>p,.eb-prose>ul,.eb-prose>ol{max-width:38em}.eb-prose p{margin:var(--space-4) 0 0}.eb-prose>:first-child{margin-top:0}.eb-prose h2{margin:var(--space-12) 0 0;letter-spacing:-.01em;font-size:24px;font-weight:600;line-height:1.3}.eb-prose h3{margin:40px 0 0;font-size:19px;font-weight:600;line-height:1.35}.eb-prose ul,.eb-prose ol{margin:var(--space-3) 0 0;padding-left:20px}.eb-prose li+li{margin-top:6px}.eb-prose a{color:var(--accent);text-underline-offset:3px;text-decoration:underline}.eb-prose code{font-family:var(--font-mono);background:var(--code-bg);border-radius:var(--radius-sm);padding:1px 5px;font-size:.85em}.eb-prose pre code{font-size:inherit;background:0 0;border-radius:0;padding:0}.eb-prose .eb-code{margin-top:var(--space-6)}.eb-prose blockquote{margin:var(--space-6) 0 0;border-left:2px solid var(--rule);max-width:36em;color:var(--ink-muted);padding:4px 0 4px 20px;font-style:italic}.eb-prose blockquote p:first-child{margin-top:0}.eb-table-wrap{margin-top:var(--space-6);overflow-x:auto}.eb-prose table{border-collapse:collapse;width:100%;min-width:560px;font-size:15px;line-height:1.5}.eb-prose th{text-align:left;padding:10px var(--space-4) 10px 0;border-bottom:1px solid var(--ink);font-family:var(--font-mono);font-size:13px;font-weight:600}.eb-prose td{padding:var(--space-3) var(--space-4) var(--space-3) 0;border-bottom:1px solid var(--rule);vertical-align:top}.eb-prose th:last-child,.eb-prose td:last-child{padding-right:0}.eb-pagenav{justify-content:space-between;gap:var(--space-2) var(--space-6);padding-top:var(--space-4);border-top:1px solid var(--rule);font-family:var(--font-mono);flex-wrap:wrap;margin-top:72px;font-size:14px;display:flex}.eb-pagenav a{min-height:var(--touch-target);color:var(--ink-muted);align-items:center;text-decoration:none;display:inline-flex}.eb-pagenav a:hover{color:var(--ink)}.eb-pagenav a.eb-pagenav__next{color:var(--accent)}
