:root{--bg: #ffffff;--bg-subtle: #fafafa;--fg: #09090b;--fg-muted: #71717a;--fg-subtle: #a1a1aa;--border: #e4e4e7;--accent: #f4f4f5;--ring: #18181b;--ok-fg: #15803d;--ok-bg: rgba(22, 163, 74, .09);--warn-fg: #b45309;--warn-bg: rgba(217, 119, 6, .1);--bad-fg: #b91c1c;--bad-bg: rgba(220, 38, 38, .09);--info-fg: #6d28d9;--info-bg: rgba(124, 58, 237, .09);--radius: 8px;--container: 44rem;--font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace;color-scheme:light}@media(prefers-color-scheme:dark){:root{--bg: #09090b;--bg-subtle: #101012;--fg: #fafafa;--fg-muted: #a1a1aa;--fg-subtle: #71717a;--border: #27272a;--accent: #18181b;--ring: #d4d4d8;--ok-fg: #4ade80;--ok-bg: rgba(74, 222, 128, .1);--warn-fg: #fbbf24;--warn-bg: rgba(251, 191, 36, .1);--bad-fg: #f87171;--bad-bg: rgba(248, 113, 113, .1);--info-fg: #c4b5fd;--info-bg: rgba(196, 181, 253, .1);color-scheme:dark}}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--fg);font-family:var(--font-sans);font-size:16px;line-height:1.6;font-feature-settings:"cv02","cv03","cv04","cv11";-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::selection{background:var(--fg);color:var(--bg)}:focus-visible{outline:2px solid var(--ring);outline-offset:2px;border-radius:4px}a{color:inherit;text-decoration:none}h1,h2,h3,h4{margin:0;font-weight:600;letter-spacing:-.018em;line-height:1.25;text-wrap:balance}p{margin:0}time,.tnum{font-variant-numeric:tabular-nums}.container{width:100%;max-width:var(--container);margin-inline:auto;padding-inline:1.5rem}.container-wide{max-width:64rem}.site-header{position:sticky;top:0;z-index:20;background:color-mix(in srgb,var(--bg) 82%,transparent);backdrop-filter:saturate(180%) blur(12px);border-bottom:1px solid var(--border)}.site-header .container{display:flex;align-items:center;justify-content:space-between;height:56px}.brand{font-size:.9375rem;font-weight:600;letter-spacing:-.011em;transition:opacity .15s ease}.brand:hover{opacity:.7}.site-nav{display:flex;gap:1.25rem;font-size:.875rem;color:var(--fg-muted)}.site-nav a{transition:color .15s ease}.site-nav a:hover{color:var(--fg)}.site-nav .nav-dev{color:var(--info-fg);text-decoration:underline dashed;text-decoration-thickness:1px;text-underline-offset:3px}.site-nav .nav-dev:hover{color:var(--info-fg);opacity:.75}main{padding-block:4rem 6rem;min-height:calc(100vh - 56px - 6rem)}.site-footer{border-top:1px solid var(--border);padding-block:1.5rem;font-size:.8125rem;color:var(--fg-subtle)}.site-footer .container{display:flex;justify-content:space-between;gap:1rem;flex-wrap:wrap}.site-footer a:hover{color:var(--fg-muted)}.page-head{margin-bottom:3rem}.page-head h1{font-size:2rem;letter-spacing:-.033em}.page-head .lede{margin-top:.75rem;color:var(--fg-muted);font-size:1rem;max-width:34rem;text-wrap:pretty}.badge{display:inline-flex;align-items:center;gap:.25rem;height:1.25rem;padding-inline:.4rem;border-radius:5px;border:1px solid transparent;font-size:.6875rem;font-weight:500;letter-spacing:.02em;line-height:1;white-space:nowrap}.badge-outline{border-color:var(--border);color:var(--fg-muted)}.badge-ok{background:var(--ok-bg);color:var(--ok-fg)}.badge-warn{background:var(--warn-bg);color:var(--warn-fg)}.badge-bad{background:var(--bad-bg);color:var(--bad-fg)}.badge-info{background:var(--info-bg);color:var(--info-fg)}.post-list{display:flex;flex-direction:column;gap:.25rem;margin:0 -1rem;padding:0;list-style:none}.entry{display:block;padding:1.125rem 1rem;border-radius:var(--radius);transition:background .15s ease}.entry:hover{background:var(--accent)}.entry-meta{display:flex;align-items:center;gap:.5rem;margin-bottom:.4rem;font-size:.75rem;color:var(--fg-subtle)}.entry-title{font-size:1.0625rem;font-weight:600;letter-spacing:-.014em;line-height:1.4}.entry-desc{margin-top:.375rem;color:var(--fg-muted);font-size:.9375rem;line-height:1.6;text-wrap:pretty;display:-webkit-box;-webkit-line-clamp:3;line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.empty{color:var(--fg-muted)}.post-header{margin-bottom:2.75rem;padding-bottom:2rem;border-bottom:1px solid var(--border)}.post-header .post-date{display:block;font-size:.8125rem;color:var(--fg-subtle);margin-bottom:.875rem}.post-header h1{font-size:2.125rem;letter-spacing:-.035em;line-height:1.15}.post-header .lede{margin-top:1rem;color:var(--fg-muted);font-size:1.0625rem;line-height:1.6;text-wrap:pretty}.prose{font-size:1.0625rem;line-height:1.75;color:var(--fg)}.prose>*+*{margin-top:1.375rem}.prose h1{margin-top:3rem;margin-bottom:.25rem;font-size:1.75rem;letter-spacing:-.03em}.prose>h1:first-child{margin-top:0}.prose h2{margin-top:3rem;margin-bottom:-.25rem;font-size:1.375rem;letter-spacing:-.022em}.prose h3{margin-top:2.25rem;margin-bottom:-.5rem;font-size:1.0625rem}.prose a{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:var(--fg-subtle);transition:text-decoration-color .15s ease}.prose a:hover{text-decoration-color:var(--fg)}.prose strong{font-weight:600}.prose ul,.prose ol{padding-left:1.25rem}.prose li::marker{color:var(--fg-subtle)}.prose li+li{margin-top:.4rem}.prose li>ul,.prose li>ol{margin-top:.4rem}.prose blockquote{margin-inline:0;padding:.25rem 0 .25rem 1.25rem;border-left:2px solid var(--border);color:var(--fg-muted)}.prose blockquote p{margin:0}.prose hr{border:0;border-top:1px solid var(--border);margin-block:3rem}.prose code{font-family:var(--font-mono);font-size:.8125em;background:var(--accent);border:1px solid var(--border);border-radius:4px;padding:.1em .35em}.prose pre{background:var(--bg-subtle);border:1px solid var(--border);border-radius:var(--radius);padding:1rem 1.125rem;overflow-x:auto;font-size:.8125rem;line-height:1.6}.prose pre code{background:none;border:0;padding:0;font-size:inherit}.prose table{width:100%;border-collapse:collapse;font-size:.9375rem;display:block;overflow-x:auto}.prose th,.prose td{border-bottom:1px solid var(--border);padding:.625rem .875rem;text-align:left;vertical-align:top}.prose th{font-weight:600;font-size:.8125rem;letter-spacing:.01em;color:var(--fg-muted)}.prose tbody tr:last-child td{border-bottom:0}.prose img{max-width:100%;height:auto;border-radius:var(--radius)}@media(max-width:640px){main{padding-block:2.5rem 4rem}.page-head h1,.post-header h1{font-size:1.75rem}.post-list{margin-inline:0}.entry{padding-inline:0}}
