@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/fraunces-vietnamese-wght-normal.CnvboYUG.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/fraunces-latin-ext-wght-normal.Ca2vKHc0.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Fraunces Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/fraunces-latin-wght-normal.ukD16Tqj.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Fraunces Variable;font-style:italic;font-display:swap;font-weight:100 900;src:url(/_astro/fraunces-vietnamese-wght-italic.BicUS2cM.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Fraunces Variable;font-style:italic;font-display:swap;font-weight:100 900;src:url(/_astro/fraunces-latin-ext-wght-italic.BfTTTDIL.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Fraunces Variable;font-style:italic;font-display:swap;font-weight:100 900;src:url(/_astro/fraunces-latin-wght-italic.Py8at3oI.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-cyrillic-ext-400-normal.xuaO2J-f.woff2) format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-ext-400-normal.DMdlQ8Kv.woff) format("woff");unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-cyrillic-400-normal.BSMlKf0J.woff2) format("woff2"),url(/_astro/ibm-plex-mono-cyrillic-400-normal.CEL4l2ZJ.woff) format("woff");unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:IBM Plex Mono;font-style:normal;font-display:swap;font-weight:400;src:url(/_astro/ibm-plex-mono-vietnamese-400-normal.BulugwFq.woff2) format("woff2"),url(/_astro/ibm-plex-mono-vietnamese-400-normal.DDuiU_S-.woff) format("woff");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@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");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@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");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}:root{color-scheme:dark;--bg: #121417;--bg-elev: #1a1d21;--surface-2: #23272c;--code-bg: #16191c;--fg: #e9e6e1;--muted: #a3a7ad;--border: #2c3036;--border-strong: #3d424a;--accent: #e2733a;--accent-text: #f08a52;--accent-hover: #f6a274;--accent-soft: rgb(226 115 58 / .12);--ok: #8fc79a;--warn: #e6c26e;--font-display: "Fraunces Variable", Georgia, "Times New Roman", serif;--font-sans: ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--step--2: clamp(.75rem, .73rem + .1vw, .8125rem);--step--1: clamp(.875rem, .84rem + .17vw, .9375rem);--step-0: clamp(1rem, .96rem + .2vw, 1.0625rem);--step-1: clamp(1.125rem, 1.06rem + .33vw, 1.3125rem);--step-2: clamp(1.375rem, 1.26rem + .55vw, 1.75rem);--step-3: clamp(1.75rem, 1.55rem + 1vw, 2.375rem);--step-4: clamp(2.25rem, 1.9rem + 1.75vw, 3.25rem);--lh-body: 1.65;--lh-display: 1.1;--space-3xs: .25rem;--space-2xs: .5rem;--space-xs: .75rem;--space-sm: 1rem;--space-md: 1.5rem;--space-lg: 2.5rem;--space-xl: 4rem;--space-2xl: 6rem;--measure: 68ch;--wide: 1120px;--gutter: clamp(1rem, 4vw, 2rem);--radius: 6px}*,*:before,*:after{box-sizing:border-box}*{margin:0}html{-webkit-text-size-adjust:100%;hanging-punctuation:first last}body{min-height:100svh;display:flex;flex-direction:column;background:var(--bg);color:var(--fg);font-family:var(--font-sans);font-size:var(--step-0);line-height:var(--lh-body);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}img,picture,video,svg{display:block;max-width:100%;height:auto}input,button,textarea,select{font:inherit}::selection{background:var(--accent);color:var(--bg)}h1,h2,h3,h4{font-family:var(--font-display);font-weight:600;line-height:var(--lh-display);letter-spacing:-.01em;text-wrap:balance}h1{font-size:var(--step-4);letter-spacing:-.015em}h2{font-size:var(--step-3)}h3{font-size:var(--step-1)}p{text-wrap:pretty}:is(h1,h2,h3,.display) em{color:var(--accent-text);font-style:italic;font-weight:500}a{color:inherit;text-decoration-color:var(--border-strong);text-decoration-thickness:1px;text-underline-offset:.18em}a:hover{color:var(--accent-text);text-decoration-color:currentColor}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:2px}.mono,.label,.kicker{font-family:var(--font-mono)}.label{font-size:var(--step--2);letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.kicker{font-size:var(--step--2);letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}a.kicker{text-decoration:none}a.kicker:hover{color:var(--accent-text)}.muted{color:var(--muted)}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.skip{position:absolute;left:var(--gutter);top:-3rem;padding:var(--space-2xs) var(--space-xs);background:var(--accent);color:var(--bg);z-index:10}.skip:focus{top:var(--space-xs)}.wrap{width:100%;max-width:calc(var(--wide) + 2 * var(--gutter));margin-inline:auto;padding-inline:var(--gutter)}main{flex:1}.section{padding-block:var(--space-xl)}.section+.section{border-top:1px solid var(--border)}.section-head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--space-sm);margin-bottom:var(--space-lg)}.section-head h2{font-size:var(--step-3);margin-top:var(--space-3xs)}.section-head a{font-size:var(--step--1);white-space:nowrap;color:var(--accent-text)}.site-header{border-bottom:1px solid var(--border);background:var(--bg)}.site-header .wrap{display:flex;align-items:center;justify-content:space-between;gap:var(--space-sm);min-height:4.25rem}.wordmark{display:inline-flex;align-items:center;gap:.65rem;font-family:var(--font-display);font-weight:600;font-size:var(--step-1);letter-spacing:.005em;text-decoration:none;white-space:nowrap}.wordmark .mark svg{width:2.1rem}.site-nav{display:flex;gap:clamp(.9rem,3vw,1.9rem);font-size:var(--step--1)}.site-nav a{text-decoration:none;color:var(--muted);padding-block:.3rem;border-bottom:1px solid transparent}.site-nav a:hover{color:var(--fg)}.site-nav a[aria-current=page]{color:var(--fg);border-bottom-color:var(--accent)}.site-footer{border-top:1px solid var(--border);padding-block:var(--space-lg) var(--space-xl);font-size:var(--step--1);color:var(--muted)}.site-footer .wrap{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--space-sm) var(--space-lg)}.site-footer .sig{display:inline-flex;align-items:center;gap:.6rem}.site-footer .sig .mark svg{width:1.5rem}.site-footer ul{list-style:none;padding:0;display:flex;flex-wrap:wrap;gap:var(--space-2xs) var(--space-md)}.site-footer a{color:var(--muted)}.site-footer a:hover{color:var(--accent-text)}.band .wrap{display:grid;gap:var(--space-sm);padding-block:var(--space-xl) var(--space-xl)}.band h1{max-width:22ch}.band .lede{max-width:52ch;font-family:var(--font-display);font-size:var(--step-2);line-height:1.3;color:var(--muted)}.btn{display:inline-flex;align-items:center;gap:.5em;padding:.7em 1.2em;border-radius:var(--radius);background:var(--accent);color:var(--bg);font-size:var(--step--1);font-weight:600;text-decoration:none;transition:background .15s}.btn:hover{background:var(--accent-hover);color:var(--bg)}.link-row{display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-xs) var(--space-md);font-size:var(--step--1)}.chip{display:inline-flex;align-items:center;gap:.45em;font-family:var(--font-mono);font-size:var(--step--2);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);white-space:nowrap}.chip:before{content:"";width:.5em;height:.5em;border-radius:50%;background:currentColor}.chip[data-status=shipped]{color:var(--ok)}.chip[data-status=building]{color:var(--warn)}.note{padding:var(--space-sm) var(--space-md);background:var(--bg-elev);border-left:3px solid var(--accent);border-radius:0 var(--radius) var(--radius) 0}.note>.kicker{display:block;color:var(--accent-text);margin-bottom:var(--space-3xs)}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,26rem),1fr));gap:var(--space-xl) var(--space-lg)}.card{position:relative;display:flex;flex-direction:column;gap:var(--space-xs)}.card-media{aspect-ratio:16 / 10;overflow:hidden;border-radius:var(--radius);background:var(--surface-2);border:1px solid var(--border);margin-bottom:var(--space-2xs)}.card-media img{width:100%;height:100%;object-fit:cover;transition:transform .3s ease}.card-media.top img{object-position:top}.card-media.contain img{object-fit:contain;padding:var(--space-sm)}.card-media.type{display:flex;flex-direction:column;justify-content:flex-end;padding:var(--space-md) var(--space-md) calc(var(--space-md) + 14px);background:linear-gradient(90deg,var(--accent) 1px,transparent 1px) left bottom / 96px 14px repeat-x,linear-gradient(90deg,rgb(233 230 225 / .26) 1px,transparent 1px) left bottom / 16px 6px repeat-x,var(--bg-elev)}.card-media.type .big{font-family:var(--font-display);font-size:var(--step-4);font-weight:600;line-height:1;color:var(--accent-text)}.card-media.type .sub{margin-top:var(--space-2xs);font-family:var(--font-mono);font-size:var(--step--2);letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}.card-meta{display:flex;gap:var(--space-xs);align-items:center}.card-meta .sep{color:var(--border-strong)}.card h3{font-size:var(--step-3)}.card h3 a{text-decoration:none}.card h3 a:after{content:"";position:absolute;inset:0}.card:hover h3 a{color:var(--accent-text)}.card:hover .card-media img{transform:scale(1.02)}.card .outcome{font-size:var(--step-1);line-height:1.45}.card .note{font-size:var(--step--1);color:var(--muted)}.card .source{position:relative;z-index:1;align-self:flex-start;font-size:var(--step--1);color:var(--accent-text)}@media(prefers-reduced-motion:reduce){.card-media img,.btn{transition:none}.card:hover .card-media img{transform:none}}.rows{list-style:none;padding:0}.rows li{display:grid;grid-template-columns:minmax(12rem,18rem) 1fr;gap:var(--space-2xs) var(--space-md);padding-block:var(--space-sm);border-top:1px solid var(--border)}.rows li:last-child{border-bottom:1px solid var(--border)}.row-title{display:flex;flex-direction:column;gap:var(--space-3xs);font-family:var(--font-display);font-weight:600;font-size:var(--step-1)}.row-title a{text-decoration:none}.rows p{font-size:var(--step--1)}.rows p a{color:var(--accent-text)}@media(max-width:640px){.rows li{grid-template-columns:1fr}}.dated{list-style:none;padding:0;max-width:52rem}.dated li{display:grid;grid-template-columns:7rem 1fr;gap:var(--space-2xs) var(--space-md);padding-block:var(--space-md);border-top:1px solid var(--border)}.dated li:last-child{border-bottom:1px solid var(--border)}.dated time{padding-top:.45em}.dated a{font-family:var(--font-display);font-size:var(--step-2);font-weight:600;line-height:1.2;text-decoration:none}.dated p{margin-top:var(--space-2xs);font-size:var(--step--1)}@media(max-width:560px){.dated li{grid-template-columns:1fr}}.prose{max-width:var(--measure)}.prose>*+*{margin-top:var(--space-sm)}.prose h2{font-size:var(--step-3);margin-top:var(--space-xl)}.prose h3{font-size:var(--step-2);margin-top:var(--space-lg)}.prose ul,.prose ol{padding-left:1.25em}.prose li+li{margin-top:var(--space-3xs)}.prose li::marker{color:var(--accent)}.prose a{color:var(--accent-text)}.prose strong{font-weight:600}code{font-family:var(--font-mono);font-size:.86em;background:var(--surface-2);padding:.08em .32em;border-radius:3px}pre{max-width:100%;overflow-x:auto;padding:var(--space-sm) var(--space-md);background:var(--code-bg);border:1px solid var(--border);border-radius:var(--radius);font-family:var(--font-mono);font-size:var(--step--1);line-height:1.55}pre code{background:none;padding:0;font-size:inherit}blockquote{border-left:3px solid var(--accent);padding-left:var(--space-sm);color:var(--muted);font-family:var(--font-display);font-size:var(--step-1)}hr{border:0;border-top:1px solid var(--border);margin-block:var(--space-lg)}.table-wrap{overflow-x:auto}table{width:100%;border-collapse:collapse;font-size:var(--step--1)}th,td{text-align:left;vertical-align:top;padding:var(--space-2xs) var(--space-sm) var(--space-2xs) 0;border-top:1px solid var(--border)}thead th{font-family:var(--font-mono);font-size:var(--step--2);font-weight:400;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);border-top:0}figure{margin-block:var(--space-lg)}figure img{width:100%;border-radius:var(--radius);border:1px solid var(--border)}figcaption{margin-top:var(--space-2xs);font-size:var(--step--1);color:var(--muted);max-width:var(--measure)}.arch-diagram pre{white-space:pre;font-size:var(--step--2);line-height:1.5}.metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,13rem),1fr));gap:var(--space-md);padding-block:var(--space-md);border-block:1px solid var(--border)}.metric .value{font-family:var(--font-display);font-size:var(--step-3);font-weight:600;line-height:1.1;color:var(--accent-text)}.metric .what{margin-top:var(--space-3xs);font-size:var(--step--1);color:var(--muted)}.ruler[data-astro-cid-4lfwyzro]{position:relative;height:26px}.scale[data-astro-cid-4lfwyzro]{display:block;overflow:visible}.scale[data-astro-cid-4lfwyzro] line[data-astro-cid-4lfwyzro]{stroke-width:1}.major[data-astro-cid-4lfwyzro]{stroke:var(--accent);stroke-opacity:.9}.mid[data-astro-cid-4lfwyzro]{stroke:var(--fg);stroke-opacity:.4}.minor[data-astro-cid-4lfwyzro]{stroke:var(--fg);stroke-opacity:.26}.base[data-astro-cid-4lfwyzro]{stroke:var(--fg);stroke-opacity:.22}.indicator[data-astro-cid-4lfwyzro]{position:absolute;bottom:0;left:0;opacity:0;transition:opacity .3s ease}.indicator[data-astro-cid-4lfwyzro].is-set{opacity:1}.indicator[data-astro-cid-4lfwyzro] polygon[data-astro-cid-4lfwyzro]{fill:var(--accent)}.indicator[data-astro-cid-4lfwyzro] line[data-astro-cid-4lfwyzro]{stroke:var(--accent);stroke-width:1.5}@media(prefers-reduced-motion:reduce){.indicator[data-astro-cid-4lfwyzro]{transition:none}}
