:root{color-scheme:light;--bg:oklch(98.8% 0.004 86);--surface:oklch(100% 0 0);--fg:oklch(20% 0 0);--text:var(--fg);--muted:oklch(40% 0 0);--border:oklch(82% 0.012 82);--accent:oklch(38% 0.10 248);--link:var(--accent);--visited:oklch(38% 0.08 310);--code-bg:oklch(94% 0.012 84);--code-border:oklch(72% 0.016 82);--code-text:oklch(16% 0 0);--mark-ice:oklch(92% 0.045 230);--mark-blue:oklch(58% 0.11 242);--mark-deep:oklch(35% 0.08 246);--page:1040px;--prose:70ch;--gutter:clamp(12px, 1.6vw, 22px);--font-body:system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace}*,*::before,*::after{box-sizing:border-box}html{background:var(--bg);-webkit-text-size-adjust:100%}body{min-height:100vh;margin:0;background:var(--bg);color:var(--text);font-family:var(--font-body);font-size:17px;line-height:1.62;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased}body.blog{display:flex;flex-direction:column}button{font:inherit}a{color:var(--link);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:.18em}a:visited{color:var(--visited)}a:hover{text-decoration-thickness:2px}:focus-visible{outline:2px solid var(--link);outline-offset:2px;border-radius:1px}::selection{background:color-mix(in oklch,var(--accent) 20%,var(--bg))}p{max-width:var(--prose);margin:0;text-wrap:pretty}h1,h2,h3{margin:0;color:var(--text);font-weight:650;letter-spacing:0;line-height:1.18;text-wrap:balance}h1{max-width:17ch;font-size:44px}h2{font-size:30px}h3{font-size:19px}svg{display:block}code,pre{font-family:var(--font-mono)}pre{margin:0;overflow-x:auto;padding:14px 16px 16px;color:var(--code-text);font-size:14px;line-height:1.58;tab-size:2}.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;clip:rect(0 0 0 0);clip-path:inset(50%);overflow:hidden;white-space:nowrap}.skip{position:fixed;top:12px;left:12px;z-index:20;transform:translateY(-140%);border:1px solid var(--border);background:var(--bg);color:var(--link);padding:6px 10px}.skip:focus{transform:translateY(0)}.page{width:min(100% - (var(--gutter) * 2),var(--page));margin-inline:auto}.section{padding-block:34px;border-top:1px solid var(--border)}.section:first-child{border-top:0}.section-hero{padding-top:42px}.stack>*+*{margin-top:18px}.meta{color:var(--muted);font-family:var(--font-mono);font-size:13px;line-height:1.55}.lead{color:var(--text);font-size:19px;line-height:1.55}.svg-symbols{position:absolute;width:0;height:0}.post-content{max-width:var(--prose);margin-top:34px}.post-content>*+*{margin-top:18px}.post-content h2{margin-top:44px}.post-content ul,.post-content ol{padding-left:1.35rem}.post-content :not(pre)>code{border:1px solid var(--code-border);background:var(--code-bg);color:var(--code-text);padding:.08em .28em}.post-content .highlight{margin:24px 0;border:1px solid var(--code-border);background:var(--code-bg)}.post-content .highlight pre{background:0 0;color:var(--code-text)}@media(max-width:760px){body{font-size:16px}h1{font-size:36px}h2{font-size:26px}.section-hero{padding-top:32px}}.top{padding-block:22px 20px;border-bottom:1px solid var(--border)}.top-inner{display:flex;align-items:baseline;justify-content:space-between;gap:18px;flex-wrap:wrap}.brand{display:inline-flex;align-items:center;gap:10px;color:var(--text);text-decoration:none}.brand:visited{color:var(--text)}.brand-mark{width:36px;height:auto;flex:none}.brand-text{font-weight:650}.brand-text .slash{margin:0 2px;color:var(--muted);font-weight:400}.nav{display:flex;align-items:center;gap:10px;color:var(--muted);font-size:15px}.nav a[aria-current=page]{color:var(--text)}.command{display:grid;grid-template-columns:minmax(0,1fr)auto;gap:12px;align-items:center;max-width:100%;margin-top:22px;border:1px solid var(--code-border);background:var(--code-bg);padding:12px 12px 12px 14px}.command code{min-width:0;overflow-x:auto;color:var(--code-text);font-family:var(--font-mono);font-size:14px;line-height:1.45;white-space:nowrap}.copy-btn{border:1px solid var(--border);background:var(--bg);color:var(--muted);cursor:pointer;font-family:var(--font-mono);font-size:12px;line-height:1.2;padding:6px 10px}.copy-btn:hover,.copy-btn.is-copied{border-color:var(--text);color:var(--text)}.copy-btn.is-copied{border-color:var(--mark-blue);color:var(--mark-deep)}.comparison{margin-top:22px}.comparison-heading{display:flex;align-items:baseline;justify-content:space-between;gap:18px;flex-wrap:wrap}.code-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.code-block{min-width:0;border:1px solid var(--code-border);background:var(--code-bg)}.code-title{padding:8px 12px;border-bottom:1px solid var(--code-border);color:var(--text);font-family:var(--font-mono);font-size:12px;line-height:1.3}.definition-list{display:grid;grid-template-columns:17ch minmax(0,1fr);gap:13px 24px;max-width:var(--prose);margin:18px 0 0}.definition-list dt{color:var(--muted);font-family:var(--font-mono);font-size:13px}.definition-list dd{margin:0}.note-row,.post-row{display:grid;grid-template-columns:15ch minmax(0,1fr)auto;gap:18px;align-items:baseline;padding-top:16px}.note-row p,.post-row p{margin-top:4px;color:var(--muted);font-size:15px}.post-list>*+*{margin-top:26px;padding-top:26px;border-top:1px solid var(--border)}.list-label{display:flex;justify-content:space-between;gap:18px;margin-bottom:18px;color:var(--muted);font-family:var(--font-mono);font-size:13px}.archive-note{margin-top:26px}.post-article{max-width:var(--prose)}.post-article h1{max-width:16ch;margin-top:14px}.post-article .lead{margin-top:16px}.back-link{display:inline-flex;margin-bottom:22px;font-family:var(--font-mono);font-size:13px}.footer{margin-top:16px;padding-block:28px 40px;border-top:1px solid var(--border);color:var(--muted);font-size:15px}.footer-inner{display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap}.footer p{max-width:58ch}.footer a{overflow-wrap:anywhere}@media(prefers-reduced-motion:no-preference){.copy-btn{transition:color 120ms ease,border-color 120ms ease,transform 80ms ease}.copy-btn:active{transform:translateY(1px)}}@media(max-width:760px){.top-inner{align-items:flex-start}.nav{width:100%}.command,.code-grid,.definition-list,.note-row,.post-row{grid-template-columns:1fr}.copy-btn{justify-self:start}.definition-list{gap:2px 0}.definition-list dd+dt{margin-top:12px}.note-row,.post-row{gap:4px}}