:root{--font-mono:ui-monospace, "Berkeley Mono", "JetBrains Mono", "IBM Plex Mono",
    "SF Mono", "Cascadia Code", Menlo, Consolas, monospace;--fs-base:15.5px;--lh-body:1.7;--measure:72ch;--bg:#0c0e11;--bg-elev:#14181d;--bg-code:#11141b;--code-fg:#c0caf5;--code-bg:#11141b;--code-comment:#565f89;--code-keyword:#bb9af7;--code-string:#9ece6a;--code-number:#ff9e64;--code-function:#7aa2f7;--code-type:#2ac3de;--code-builtin:#e0af68;--code-operator:#89ddff;--code-variable:#c0caf5;--code-error:#f7768e;--code-tag:#f7768e;--code-attr:#e0af68;--code-meta:#7aa2f7;--code-deleted:#f7768e;--code-inserted:#9ece6a;--ink:#d8d6cc;--ink-strong:#f0eee5;--ink-soft:#8a877d;--ink-faint:#555149;--rule:#1d2229;--accent:#c93636}*,*::before,*::after{box-sizing:border-box}html{font-size:var(--fs-base);background:var(--bg);color-scheme:dark;-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font-mono);font-size:.9375rem;line-height:var(--lh-body);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}::selection{background:var(--accent);color:var(--bg)}.chroma ::selection,pre.chroma ::selection,.prose pre ::selection{background:rgba(122,162,247,.28);color:var(--code-fg)}a{color:var(--ink-strong);text-decoration:underline;text-decoration-color:var(--accent);text-decoration-thickness:1px;text-underline-offset:4px}a:hover{color:var(--accent)}.frame{max-width:56rem;margin:0 auto;padding:2.75rem 2.25rem}.wordmark{font-family:var(--font-mono);font-size:1rem;font-weight:700;letter-spacing:.04em;color:var(--ink-strong);margin:0 0 .25rem}.wordmark--small{font-size:1rem}.nav{margin:.5rem 0 3.5rem;font-size:.85rem;display:flex;flex-wrap:wrap;gap:0 1.75rem;padding:.5rem 0 .75rem;border-bottom:1px solid var(--rule)}.nav a{color:var(--ink-soft);text-decoration:none;padding:0}.nav a:hover{color:var(--accent)}.nav a.is-current{color:var(--ink-strong)}.section{margin:3rem 0}.section-title{font-family:var(--font-mono);font-size:.78rem;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-soft);margin:0 0 1.25rem}.intro{font-size:.95rem;line-height:1.7;color:var(--ink);max-width:var(--measure);margin:.25rem 0 2rem}.intro p{margin:0 0 1rem}.post-list{list-style:none;padding:0;margin:0}.post-list li{display:grid;grid-template-columns:6rem 1fr;gap:0 1.25rem;align-items:baseline;padding:.85rem 0;border-bottom:1px solid var(--rule)}.post-list .date{color:var(--ink-faint);font-size:.82rem;font-variant-numeric:tabular-nums;letter-spacing:.04em}.post-list a{color:var(--ink-strong);text-decoration:none;font-weight:500}.post-list a:hover{color:var(--accent)}.post-list-meta{grid-column:2;color:var(--ink-soft);font-size:.85rem;margin-top:.2rem;line-height:1.55}.page-head{margin-bottom:2rem}.page-head--tight{margin-bottom:1.25rem}.page-title{font-family:var(--font-mono);font-size:1.4rem;font-weight:700;margin:.25rem 0 .75rem;line-height:1.3;color:var(--ink-strong);letter-spacing:-.005em}.breadcrumb{font-family:var(--font-mono);font-size:.78rem;color:var(--ink-faint);margin-bottom:.5rem}.breadcrumb a{color:var(--ink-soft);text-decoration:none}.breadcrumb a:hover{color:var(--accent)}.post-meta{font-family:var(--font-mono);font-size:.78rem;color:var(--ink-soft);margin:.5rem 0 1.75rem;display:flex;flex-wrap:wrap;gap:0 1.5rem;letter-spacing:.02em}.post-meta .date{color:var(--ink);font-variant-numeric:tabular-nums}.post-meta .meta{color:var(--ink-soft)}.sev{font-family:var(--font-mono);font-size:.78rem;letter-spacing:.04em}.sev-critical{color:var(--accent)}.sev-high{color:var(--ink)}.sev-medium{color:var(--ink-soft)}.sev-low{color:var(--ink-faint)}.prose{font-family:var(--font-mono);font-size:.95rem;line-height:var(--lh-body);color:var(--ink);max-width:var(--measure)}.prose h2,.prose h3,.prose h4{font-family:var(--font-mono);font-weight:700;color:var(--ink-strong);margin:2.5rem 0 .85rem;letter-spacing:0}.prose h2{font-size:.95rem;text-transform:lowercase;border-bottom:1px solid var(--rule);padding-bottom:.4rem}.prose h3{font-size:.92rem;color:var(--ink-strong)}.prose h4{font-size:.85rem;color:var(--ink-soft)}.prose p{margin:0 0 1.1rem}.prose a{color:var(--ink-strong);text-decoration:underline;text-decoration-color:var(--accent);text-underline-offset:3px}.prose a:hover{color:var(--accent)}.prose ul,.prose ol{margin:0 0 1.1rem;padding-left:1.5rem}.prose li{margin:.2rem 0}.prose li::marker{color:var(--ink-faint)}.prose blockquote{margin:1.25rem 0;padding:.2rem 0 .2rem 1.1rem;border-left:2px solid var(--rule);color:var(--ink-soft)}.prose hr{border:0;border-top:1px solid var(--rule);margin:2rem 0}.prose code,code.inline{font-family:var(--font-mono);font-size:.86em;background:var(--bg-code);padding:.1em .4em;border:1px solid var(--rule);color:var(--code-fg);border-radius:2px}.prose pre,pre.chroma{font-family:var(--font-mono);font-size:.85rem;line-height:1.6;background:var(--bg-code);color:var(--code-fg);padding:1.1rem 1.25rem;border:1px solid var(--rule);overflow-x:auto;margin:1.5rem 0;border-radius:2px;box-shadow:inset 0 0 0 1px rgba(122,162,247,4%)}.prose pre code,pre.chroma code{background:0 0;border:0;padding:0;font-size:1em;color:inherit;border-radius:0}.chroma{background:0 0;color:var(--code-fg)}.chroma .c,.chroma .ch,.chroma .cm,.chroma .c1,.chroma .cs,.chroma .cp,.chroma .cpf{color:var(--code-comment);font-style:italic}.chroma .k,.chroma .kc,.chroma .kd,.chroma .kn,.chroma .kp,.chroma .kr{color:var(--code-keyword)}.chroma .kt{color:var(--code-type)}.chroma .s,.chroma .sa,.chroma .sb,.chroma .sc,.chroma .dl,.chroma .sd,.chroma .s2,.chroma .se,.chroma .sh,.chroma .si,.chroma .sx,.chroma .sr,.chroma .s1,.chroma .ss{color:var(--code-string)}.chroma .m,.chroma .mb,.chroma .mf,.chroma .mh,.chroma .mi,.chroma .mo,.chroma .il{color:var(--code-number)}.chroma .n{color:var(--code-fg)}.chroma .na{color:var(--code-attr)}.chroma .nb,.chroma .bp{color:var(--code-builtin)}.chroma .nc{color:var(--code-type)}.chroma .nd{color:var(--code-attr)}.chroma .ne{color:var(--code-keyword)}.chroma .nf,.chroma .fm{color:var(--code-function)}.chroma .ni{color:var(--code-keyword)}.chroma .nl{color:var(--code-meta)}.chroma .nn{color:var(--code-fg)}.chroma .no{color:var(--code-builtin)}.chroma .nt{color:var(--code-tag)}.chroma .nv,.chroma .vc,.chroma .vg,.chroma .vi,.chroma .vm{color:var(--code-variable)}.chroma .nx{color:var(--code-function)}.chroma .py{color:var(--code-meta)}.chroma .o{color:var(--code-operator)}.chroma .ow{color:var(--code-keyword)}.chroma .p{color:var(--code-fg)}.chroma .err{color:var(--code-error);text-decoration:underline wavy var(--code-error)}.chroma .gd{color:var(--code-deleted);background:rgba(247,118,142,8%);display:inline-block;width:100%}.chroma .gi{color:var(--code-inserted);background:rgba(158,206,106,8%);display:inline-block;width:100%}.chroma .gh{color:var(--code-meta);font-weight:700}.chroma .gu{color:var(--code-comment);font-weight:700}.chroma .gs{font-weight:700}.chroma .ge{font-style:italic}.chroma .gr{color:var(--code-error)}.chroma .gt{color:var(--code-error)}.chroma .gp{color:var(--code-comment)}.chroma .ln,.chroma .lnt{color:var(--ink-faint);margin-right:.85rem;user-select:none}.chroma .hl{background:rgba(122,162,247,7%);display:inline-block;width:100%}.contact-list{font-family:var(--font-mono);font-size:.9rem;display:grid;grid-template-columns:6rem 1fr;gap:.35rem 1rem;margin:0 0 2.5rem}.contact-list dt{color:var(--ink-soft)}.contact-list dd{margin:0;color:var(--ink-strong);word-break:break-all}.contact-list code{background:var(--bg-code);border:1px solid var(--rule);padding:.05em .4em;font-size:.86em}.foot-meta{margin-top:2.5rem;padding-top:1rem;border-top:1px solid var(--rule);font-family:var(--font-mono);font-size:.78rem;color:var(--ink-soft)}.foot-meta a{color:var(--ink-soft);text-decoration:none}.foot-meta a:hover{color:var(--accent)}.foot{margin-top:5rem;padding-top:1.25rem;border-top:1px solid var(--rule);font-family:var(--font-mono);font-size:.72rem;color:var(--ink-faint);display:flex;flex-wrap:wrap;gap:.5rem 2rem;letter-spacing:.04em}.foot a{color:var(--ink-soft);text-decoration:none}.foot a:hover{color:var(--accent)}@media(max-width:720px){.frame{padding:1.75rem 1.25rem}.nav{font-size:.82rem;gap:0 1.25rem}.post-list li{grid-template-columns:5rem 1fr;gap:0 1rem}}@media(max-width:480px){.post-list li{grid-template-columns:1fr;gap:.1rem 0}.post-list-meta{grid-column:1}}@media print{body{background:#fff;color:#000}.nav,.foot{display:none}}