@font-face{font-family:Ubuntu;font-style:italic;font-weight:400;font-display:swap;src:url(../media/e0185bfe60ea7956-s.0g-ofpdclvy4f.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Ubuntu;font-style:italic;font-weight:400;font-display:swap;src:url(../media/37bb14efcb823801-s.1647rnx_2wc4l.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Ubuntu;font-style:italic;font-weight:400;font-display:swap;src:url(../media/5c33c989223029ea-s.1lm1iqxxb0bu0.woff2)format("woff2");unicode-range:U+1F??}@font-face{font-family:Ubuntu;font-style:italic;font-weight:400;font-display:swap;src:url(../media/e85c3a327a222681-s.3emmi_jejgoif.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Ubuntu;font-style:italic;font-weight:400;font-display:swap;src:url(../media/b4500023717fa2e9-s.245t__27_z6qc.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Ubuntu;font-style:italic;font-weight:400;font-display:swap;src:url(../media/bcccc008c7b50e95-s.p.369ysb_p77jod.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Ubuntu;font-style:italic;font-weight:700;font-display:swap;src:url(../media/9f3778ce41197635-s.25yljikc_netl.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Ubuntu;font-style:italic;font-weight:700;font-display:swap;src:url(../media/c87fcc68dded858b-s.3ugyw7yd44xy8.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Ubuntu;font-style:italic;font-weight:700;font-display:swap;src:url(../media/253c42c8b306509a-s.1bv1v84hhq_u5.woff2)format("woff2");unicode-range:U+1F??}@font-face{font-family:Ubuntu;font-style:italic;font-weight:700;font-display:swap;src:url(../media/e98b3674efc67854-s.04v7c5qmloxnb.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Ubuntu;font-style:italic;font-weight:700;font-display:swap;src:url(../media/8ff4b66c57a05416-s.3n5p-psxtgomf.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Ubuntu;font-style:italic;font-weight:700;font-display:swap;src:url(../media/4d8317c93ee732c4-s.p.0m0qyut8jzol1.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Ubuntu;font-style:normal;font-weight:400;font-display:swap;src:url(../media/49f63022355b874d-s.3lbsujm2n8k6s.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Ubuntu;font-style:normal;font-weight:400;font-display:swap;src:url(../media/da99beadb68683ca-s.2dudn6bv_poz-.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Ubuntu;font-style:normal;font-weight:400;font-display:swap;src:url(../media/c8480d661ce86a95-s.26d5xshw2vdh3.woff2)format("woff2");unicode-range:U+1F??}@font-face{font-family:Ubuntu;font-style:normal;font-weight:400;font-display:swap;src:url(../media/ed4419e06e4417f3-s.0mu4-ortg8fin.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Ubuntu;font-style:normal;font-weight:400;font-display:swap;src:url(../media/35dab0372a508468-s.1t7520p5sfc1t.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Ubuntu;font-style:normal;font-weight:400;font-display:swap;src:url(../media/216579b50e548914-s.p.1ay1jy0-bfc4a.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Ubuntu;font-style:normal;font-weight:700;font-display:swap;src:url(../media/893ae83aca20c19d-s.2no1p4ni73x31.woff2)format("woff2");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Ubuntu;font-style:normal;font-weight:700;font-display:swap;src:url(../media/c02ac0fa909c6aa5-s.03xlgvoej3q4l.woff2)format("woff2");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Ubuntu;font-style:normal;font-weight:700;font-display:swap;src:url(../media/dd1c5fae9520065d-s.2fnu8uymfvayr.woff2)format("woff2");unicode-range:U+1F??}@font-face{font-family:Ubuntu;font-style:normal;font-weight:700;font-display:swap;src:url(../media/ae8db9675a5da745-s.3xr16g8q2rvfk.woff2)format("woff2");unicode-range:U+370-377,U+37A-37F,U+384-38A,U+38C,U+38E-3A1,U+3A3-3FF}@font-face{font-family:Ubuntu;font-style:normal;font-weight:700;font-display:swap;src:url(../media/798f80a4b3a62ae7-s.3dpa8acchrchc.woff2)format("woff2");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C4,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Ubuntu;font-style:normal;font-weight:700;font-display:swap;src:url(../media/1bc7fc94203521e3-s.p.0gm5xa07u9y0b.woff2)format("woff2");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Ubuntu Fallback;src:local(Arial);ascent-override:91.32%;descent-override:18.52%;line-gap-override:2.74%;size-adjust:102.06%}.ubuntu_aabe90dd-module__mvz-pG__className{font-family:Ubuntu,Ubuntu Fallback}.ubuntu_aabe90dd-module__mvz-pG__variable{--font-body:"Ubuntu", "Ubuntu Fallback"}
:root{--max-width:1100px;--header-height:64px;--line-height:1.6;--font-sans:var(--font-body), system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono:ui-monospace, SFMono-Regular, "SF Mono", Menlo, monospace;--bg:#fff;--surface:#f6f8fa;--code-bg:var(--surface);--text:#1f2328;--muted:#57606a;--border:#d0d7de;--accent:#27e7bd;--accent-text:#0a7f65;--on-accent:#0d1117;--secondary:#3882e8;--secondary-text:#285ea7;--code-block-bg:#0d1117;--code-block-text:#e6edf3;--callout-note-border:var(--accent);--callout-note-bg:#e0fff8;--callout-info-border:var(--secondary);--callout-info-bg:#e7f0fc;--callout-tip-border:#1a7f37;--callout-tip-bg:#dafbe1;--callout-warning-border:#9a6700;--callout-warning-bg:#fff8c5;--callout-danger-border:#cf222e;--callout-danger-bg:#ffebe9;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--bg:#0d1117;--surface:#161b22;--text:#e6edf3;--muted:#8b949e;--border:#30363d;--accent:#27e7bd;--accent-text:#27e7bd;--secondary-text:#6fa8ff;--code-block-bg:#0b0d10;--callout-note-bg:#0d2f2a;--callout-info-bg:#132236;--callout-tip-border:#3fb950;--callout-tip-bg:#0f2e1c;--callout-warning-border:#d29922;--callout-warning-bg:#3a2d00;--callout-danger-border:#f85149;--callout-danger-bg:#3d1418;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}@media (prefers-color-scheme:dark){:root:not([data-theme]){--bg:#0d1117;--surface:#161b22;--text:#e6edf3;--muted:#8b949e;--border:#30363d;--accent:#27e7bd;--accent-text:#27e7bd;--secondary-text:#6fa8ff;--code-block-bg:#0b0d10;--callout-note-bg:#0d2f2a;--callout-info-bg:#132236;--callout-tip-border:#3fb950;--callout-tip-bg:#0f2e1c;--callout-warning-border:#d29922;--callout-warning-bg:#3a2d00;--callout-danger-border:#f85149;--callout-danger-bg:#3d1418;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}*{box-sizing:border-box}html{scroll-behavior:smooth}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition:none!important}}body{background:var(--bg);min-height:100dvh;color:var(--text);font-family:var(--font-sans);line-height:var(--line-height);flex-direction:column;margin:0;display:flex}main{flex:1}.container{width:100%;max-width:var(--max-width);margin:0 auto;padding:0 1rem}.site-header{z-index:10;height:var(--header-height);background:var(--bg);border-bottom:1px solid var(--border);align-items:center;display:flex;position:sticky;top:0}.site-header nav{align-items:center;gap:1rem;width:100%;display:flex}.site-title{color:var(--text);margin-right:auto;font-weight:700;text-decoration:none}.theme-toggle{border:1px solid var(--border);background:var(--surface);color:var(--text);cursor:pointer;border-radius:6px;justify-content:center;align-items:center;padding:.35rem;line-height:0;display:inline-flex}.theme-toggle:hover{border-color:var(--accent);color:var(--accent-text)}.theme-toggle:focus-visible{outline:2px solid var(--accent-text);outline-offset:2px}.button{border:1px solid var(--border);background:var(--surface);color:var(--text);font:inherit;cursor:pointer;border-radius:6px;align-items:center;padding:.45rem .9rem;display:inline-flex}.button:hover{border-color:var(--accent);color:var(--accent-text)}.button:focus-visible{outline:2px solid var(--accent-text);outline-offset:2px}a{color:var(--accent-text)}.layout-with-toc{grid-template-columns:260px minmax(0,1fr);align-items:stretch;gap:2rem;display:grid}@media (max-width:900px){.layout-with-toc{grid-template-columns:minmax(0,1fr)}.toc-sidebar{display:none}}.prose :is(h1,h2,h3,h4,h5,h6){scroll-margin-top:calc(var(--header-height) + 12px)}.prose{font-size:1.05rem}.prose h2{border-bottom:1px solid var(--border);margin-top:2.5rem;padding-bottom:.3rem}.prose h3{margin-top:2rem}.prose img,.prose-image{border-radius:6px;max-width:100%;height:auto}.prose-image-fallback{aspect-ratio:16/9;border:1px solid var(--border);border-radius:6px;display:block;overflow:hidden}.prose-image-fallback img{object-fit:contain;width:100%;height:100%}.prose :not(pre)>code{background:var(--code-bg);font-family:var(--font-mono);border-radius:4px;padding:.15em .35em;font-size:.9em}.prose pre{background:var(--code-block-bg);color:var(--code-block-text);border-radius:8px;padding:1rem;overflow-x:auto}.prose pre code{font-family:var(--font-mono);background:0 0;padding:0;font-size:.9rem}.prose figure{margin:1rem 0}.prose table{border-collapse:collapse;width:100%}.prose :is(th,td){border:1px solid var(--border);text-align:left;padding:.5rem .75rem}.prose blockquote{border-left:3px solid var(--border);color:var(--muted);margin:1rem 0;padding-left:1rem}.prose :is(.contains-task-list,.task-list-item){list-style:none}.prose .contains-task-list{padding-left:0}.prose .task-list-item input[type=checkbox]{margin-right:.4rem}.callout{border-left:4px solid var(--callout-note-border);background:var(--callout-note-bg);border-radius:0 6px 6px 0;margin:1.5rem 0;padding:.75rem 1rem}.callout__title{margin:0 0 .25rem;font-weight:700}.callout--tip{border-color:var(--callout-tip-border);background:var(--callout-tip-bg)}.callout--warning{border-color:var(--callout-warning-border);background:var(--callout-warning-bg)}.callout--danger{border-color:var(--callout-danger-border);background:var(--callout-danger-bg)}.callout--info{border-color:var(--callout-info-border);background:var(--callout-info-bg)}.callout--info a{color:var(--secondary-text)}.callout--note{border-color:var(--callout-note-border);background:var(--callout-note-bg)}.toc{--toc-marker-left:calc(-1rem - 1px);top:calc(var(--header-height) + 16px);border-left:1px solid var(--border);padding-left:1rem;font-size:.9rem;position:sticky}.toc__title{color:var(--muted);text-transform:uppercase;letter-spacing:.05em;margin:0 0 .5rem;font-size:.75rem;font-weight:700}.toc__list{margin:0;padding:0;list-style:none}.toc__item{position:relative}.toc__item:has(>.toc__link.is-active):before{content:"";top:0;bottom:0;left:var(--toc-marker-left);background:var(--accent-text);border-radius:1px;width:2px;position:absolute}.toc__item--h3{padding-left:1rem}.toc__link{color:var(--muted);padding:.15rem 0;text-decoration:none;display:block}.toc__link:hover{color:var(--text)}.toc__link.is-active{color:var(--accent-text);font-weight:600}.toc-disclosure{border:1px solid var(--border);background:var(--surface);border-radius:8px;margin:1rem 0 0;padding:.6rem .9rem}.toc-disclosure__summary{cursor:pointer;color:var(--muted);letter-spacing:.05em;text-transform:uppercase;font-size:.75rem;font-weight:700}.toc-disclosure .toc{--toc-marker-left:-.4rem;border-left:0;margin-top:.5rem;padding-left:0;position:static}@media (min-width:901px){.toc-disclosure{display:none}}.post-list{gap:1.5rem;padding:0;list-style:none;display:grid}.post-card{border:1px solid var(--border);border-radius:8px;padding:1rem}.post-card h2{margin-top:0}.post-card__cover{border-radius:6px;width:100%;height:auto;margin-bottom:.75rem;display:block}.post-card__excerpt{color:var(--muted);margin:.4rem 0}.post-cover{border-radius:8px;width:100%;height:auto;margin:1.5rem 0;display:block}.draft-banner{border:1px dashed var(--accent);color:var(--accent-text);border-radius:6px;margin:1rem 0;padding:.5rem .75rem;font-size:.9rem}.meta{color:var(--muted);font-size:.875rem}@media (min-width:768px){body{font-size:1.0625rem}}a:focus-visible{outline:2px solid var(--accent-text);outline-offset:2px;border-radius:2px}.page{--measure:680px;max-width:var(--measure);padding:2rem 0 3rem}.section{margin-top:3rem}.button{text-decoration:none;transition:border-color .15s,color .15s,background-color .15s}.intro__header{align-items:center;gap:1.25rem;display:flex}.intro__avatar{object-fit:cover;border:2px solid var(--border);border-radius:50%;flex:none;width:80px;height:80px}.intro__name{margin:0;font-size:1.6rem;line-height:1.25}.intro__role{color:var(--muted);font-family:var(--font-mono);margin:.15rem 0 0;font-size:.8rem}.intro .prose{font-size:inherit}.intro .prose p{margin:1rem 0}.stack-list{flex-wrap:wrap;gap:.4rem;margin:0;padding:0;list-style:none;display:flex}.stack-list li{border:1px solid var(--border);background:var(--surface);font-family:var(--font-mono);border-radius:4px;padding:.1rem .5rem;font-size:.75rem}.case-study__header{margin-top:1.5rem}.case-study__period{color:var(--muted);font-family:var(--font-mono);margin:0;font-size:.75rem}.case-study__header h1{margin:.25rem 0 .5rem;line-height:1.2}.case-study__lead{color:var(--muted);margin:0;font-size:1.1rem}.case-study__stack{margin-top:2.5rem}.case-study__stack h2{border-bottom:1px solid var(--border);padding-bottom:.3rem}.diagram{margin:1.75rem 0}.diagram svg{width:100%;max-width:460px;height:auto;margin:0 auto;display:block}.diagram figcaption{text-align:center;margin-top:.5rem}.diagram__box{fill:var(--surface);stroke:var(--border);stroke-width:1.5px}.diagram__box--accent{stroke:var(--accent);stroke-width:2px}.diagram__line{stroke:var(--muted);stroke-width:1.5px}.diagram__arrowhead{fill:var(--muted)}.diagram__title{fill:var(--text);font-size:17px;font-weight:700}.diagram__muted,.diagram__label{fill:var(--muted);font-size:14px}.diagram__item{fill:var(--text);font-size:15px}.diagram__mono{fill:var(--accent-text);font-family:var(--font-mono);font-size:13px}.language-toggle{border:1px solid var(--border);font-family:var(--font-mono);border-radius:6px;margin:0;padding:0;font-size:.75rem;list-style:none;display:flex;overflow:hidden}.language-toggle a{color:var(--muted);padding:.3rem .5rem;text-decoration:none;transition:color .15s,background-color .15s;display:block}.language-toggle a:hover{color:var(--text)}.language-toggle a[aria-current=true]{background:var(--accent);color:var(--on-accent);font-weight:700}.language-toggle a:focus-visible{outline-offset:-2px}@media (max-width:420px){.site-header nav{gap:.6rem;font-size:.9rem}}.site-title{white-space:nowrap}.footer{padding:30px 0}
