:root{color-scheme:light;--bg:#fafaf9;--bg-alt:#f0efec;--fg:#1c1c1a;--fg-muted:#5f5e5a;--accent:#0b6e4f;--accent-hover:#0a5a41;--border:#dcdad5;--code-bg:#f0efec;--font-body:system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;--measure:70ch;--radius:4px}[data-theme=dark]{color-scheme:dark;--bg:#121212;--bg-alt:#1b1b1b;--fg:#e6e4df;--fg-muted:#a09e98;--accent:#7dd3a0;--accent-hover:#a3e4bd;--border:#2c2c2c;--code-bg:#1b1b1b}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){color-scheme:dark;--bg:#121212;--bg-alt:#1b1b1b;--fg:#e6e4df;--fg-muted:#a09e98;--accent:#7dd3a0;--accent-hover:#a3e4bd;--border:#2c2c2c;--code-bg:#1b1b1b}}*,*::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-body);font-size:1.0625rem;line-height:1.6;display:flex;flex-direction:column;min-height:100vh}.container{width:min(100% - 2rem,var(--measure));margin-inline:auto}main.container{flex:1;padding-block:2rem 4rem}a{color:var(--accent);text-decoration-thickness:1px;text-underline-offset:.15em}a:hover{color:var(--accent-hover)}h1,h2,h3,h4{line-height:1.25;margin:2em 0 .6em;font-weight:650;letter-spacing:-.01em}h1{font-size:1.9rem;margin-top:0}h2{font-size:1.4rem}h3{font-size:1.15rem}p,ul,ol,blockquote,pre,table,figure{margin:0 0 1.2em}.lede{color:var(--fg-muted);font-size:1.1rem}.prompt{color:var(--accent);font-family:var(--font-mono)}.skip{position:absolute;left:-999px;top:0;background:var(--accent);color:var(--bg);padding:.5rem 1rem;z-index:10}.skip:focus{left:1rem}.site-header{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding-block:1.25rem;border-bottom:1px solid var(--border);flex-wrap:wrap}.brand{font-family:var(--font-mono);font-weight:700;font-size:1.05rem;color:var(--fg);text-decoration:none}.nav{display:flex;align-items:center;gap:1rem;font-family:var(--font-mono);font-size:.9rem}.nav a{color:var(--fg-muted);text-decoration:none}.nav a:hover,.nav a[aria-current=page]{color:var(--fg)}.nav a[aria-current=page]{text-decoration:underline;text-decoration-color:var(--accent);text-underline-offset:.35em}.theme-toggle{background:0 0;border:1px solid var(--border);border-radius:var(--radius);color:var(--fg-muted);cursor:pointer;padding:.3rem .4rem;line-height:0}.theme-toggle:hover{color:var(--fg);border-color:var(--fg-muted)}.icon-moon{display:none}[data-theme=dark] .icon-moon{display:inline}[data-theme=dark] .icon-sun{display:none}.site-footer{border-top:1px solid var(--border);padding-block:1.5rem 2rem;font-family:var(--font-mono);font-size:.85rem;color:var(--fg-muted)}.footer-links{display:flex;gap:1rem;flex-wrap:wrap;margin-bottom:.5rem}.footer-meta{margin:0}.section-title{font-family:var(--font-mono);font-size:1rem;font-weight:600;color:var(--fg-muted);margin-top:2.5rem}.post-card{padding-block:1.1rem;border-bottom:1px solid var(--border)}.post-card:last-of-type{border-bottom:0}.post-card-title{font-size:1.2rem;margin:0 0 .25rem}.post-card-title a{color:var(--fg);text-decoration:none}.post-card-title a:hover{color:var(--accent)}.post-card-summary{margin:.5rem 0 0;color:var(--fg-muted)}.post-meta{font-family:var(--font-mono);font-size:.82rem;color:var(--fg-muted)}.tag{font-family:var(--font-mono);font-size:.82rem;color:var(--accent);text-decoration:none}.tag:hover{text-decoration:underline}.term-list{list-style:none;padding:0;font-family:var(--font-mono);columns:2}.term-list .count{color:var(--fg-muted);font-size:.8rem}.pagination{display:flex;justify-content:space-between;align-items:center;font-family:var(--font-mono);font-size:.9rem;margin-top:2rem}.pagination-status{color:var(--fg-muted)}.page-header,.post-header{margin-bottom:2rem}.post-header .post-meta{margin-top:.5rem}.post-nav{display:flex;justify-content:space-between;gap:1rem;margin-top:3rem;padding-top:1.5rem;border-top:1px solid var(--border);font-family:var(--font-mono);font-size:.9rem}.content img{max-width:100%;height:auto;border-radius:var(--radius)}.content blockquote{border-left:3px solid var(--accent);margin-left:0;padding-left:1rem;color:var(--fg-muted)}.content hr{border:0;border-top:1px solid var(--border);margin:2.5rem 0}.content table{border-collapse:collapse;width:100%;display:block;overflow-x:auto;font-size:.95rem}.content th,.content td{border:1px solid var(--border);padding:.4rem .7rem;text-align:left}.content th{background:var(--bg-alt);font-weight:600}code,kbd,pre{font-family:var(--font-mono);font-size:.88em}code{background:var(--code-bg);padding:.12em .35em;border-radius:var(--radius)}pre{background:var(--code-bg);border:1px solid var(--border);border-radius:var(--radius);padding:1rem;overflow-x:auto;line-height:1.5}pre code{background:0 0;padding:0;font-size:inherit}.highlight pre{background:var(--code-bg)!important}.content h2 a.anchor,.content h3 a.anchor{color:var(--fg-muted);text-decoration:none}.project-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(16rem,1fr));gap:1rem;margin-top:1.5rem}.project-card{border:1px solid var(--border);border-radius:var(--radius);padding:1rem 1.1rem;background:var(--bg-alt)}.project-card-title{font-size:1.05rem;margin:0 0 .4rem}.project-card-title a{text-decoration:none}.project-card p{margin:0 0 .6rem;font-size:.95rem;color:var(--fg-muted)}.project-card .tag{color:var(--fg-muted)}.project-card-post{font-family:var(--font-mono);font-size:.85rem}@media(max-width:40rem){body{font-size:1rem}h1{font-size:1.6rem}.term-list{columns:1}.post-nav{flex-direction:column}}.figure{margin:1.5rem 0 1.8rem}.figure img{display:block;width:100%;height:auto;border-radius:var(--radius);border:1px solid var(--border)}.figure figcaption{font-family:var(--font-mono);font-size:.8rem;color:var(--fg-muted);margin-top:.5rem}.bg{background-color:#f7f7f7}.chroma{background-color:#f7f7f7;-webkit-text-size-adjust:none}.chroma .err{color:#f6f8fa;background-color:#82071e}.chroma .lnlinks{outline:none;text-decoration:none;color:inherit}.chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}.chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}.chroma .hl{background-color:#dedede}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#7f7f7f}.chroma .line{display:flex}.chroma .k{color:#cf222e}.chroma .kc{color:#cf222e}.chroma .kd{color:#cf222e}.chroma .kn{color:#cf222e}.chroma .kp{color:#cf222e}.chroma .kr{color:#cf222e}.chroma .kt{color:#cf222e}.chroma .na{color:#1f2328}.chroma .nc{color:#1f2328}.chroma .no{color:#0550ae}.chroma .nd{color:#0550ae}.chroma .ni{color:#6639ba}.chroma .nl{color:#900;font-weight:700}.chroma .nn{color:#24292e}.chroma .nx{color:#1f2328}.chroma .nt{color:#0550ae}.chroma .nb{color:#6639ba}.chroma .bp{color:#6a737d}.chroma .nv{color:#953800}.chroma .vc{color:#953800}.chroma .vg{color:#953800}.chroma .vi{color:#953800}.chroma .vm{color:#953800}.chroma .nf{color:#6639ba}.chroma .fm{color:#6639ba}.chroma .s{color:#0a3069}.chroma .sa{color:#0a3069}.chroma .sb{color:#0a3069}.chroma .sc{color:#0a3069}.chroma .dl{color:#0a3069}.chroma .sd{color:#0a3069}.chroma .s2{color:#0a3069}.chroma .se{color:#0a3069}.chroma .sh{color:#0a3069}.chroma .si{color:#0a3069}.chroma .sx{color:#0a3069}.chroma .sr{color:#0a3069}.chroma .s1{color:#0a3069}.chroma .ss{color:#032f62}.chroma .m{color:#0550ae}.chroma .mb{color:#0550ae}.chroma .mf{color:#0550ae}.chroma .mh{color:#0550ae}.chroma .mi{color:#0550ae}.chroma .il{color:#0550ae}.chroma .mo{color:#0550ae}.chroma .o{color:#0550ae}.chroma .ow{color:#0550ae}.chroma .or{color:#0550ae}.chroma .p{color:#1f2328}.chroma .c{color:#57606a}.chroma .ch{color:#57606a}.chroma .cm{color:#57606a}.chroma .c1{color:#57606a}.chroma .cs{color:#57606a}.chroma .cp{color:#57606a}.chroma .cpf{color:#57606a}.chroma .gd{color:#82071e;background-color:#ffebe9}.chroma .ge{color:#1f2328}.chroma .gi{color:#116329;background-color:#dafbe1}.chroma .go{color:#1f2328}.chroma .gl{text-decoration:underline}.chroma .w{color:#fff}[data-theme=dark] .bg{color:#e6edf3;background-color:#0d1117}[data-theme=dark] .chroma{color:#e6edf3;background-color:#0d1117;-webkit-text-size-adjust:none}[data-theme=dark] .chroma .err{color:#f85149}[data-theme=dark] .chroma .lnlinks{outline:none;text-decoration:none;color:inherit}[data-theme=dark] .chroma .lntd{vertical-align:top;padding:0;margin:0;border:0}[data-theme=dark] .chroma .lntable{border-spacing:0;padding:0;margin:0;border:0}[data-theme=dark] .chroma .hl{background-color:#6e7681}[data-theme=dark] .chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#737679}[data-theme=dark] .chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#6e7681}[data-theme=dark] .chroma .line{display:flex}[data-theme=dark] .chroma .k{color:#ff7b72}[data-theme=dark] .chroma .kc{color:#79c0ff}[data-theme=dark] .chroma .kd{color:#ff7b72}[data-theme=dark] .chroma .kn{color:#ff7b72}[data-theme=dark] .chroma .kp{color:#79c0ff}[data-theme=dark] .chroma .kr{color:#ff7b72}[data-theme=dark] .chroma .kt{color:#ff7b72}[data-theme=dark] .chroma .nc{color:#f0883e;font-weight:700}[data-theme=dark] .chroma .no{color:#79c0ff;font-weight:700}[data-theme=dark] .chroma .nd{color:#d2a8ff;font-weight:700}[data-theme=dark] .chroma .ni{color:#ffa657}[data-theme=dark] .chroma .ne{color:#f0883e;font-weight:700}[data-theme=dark] .chroma .nl{color:#79c0ff;font-weight:700}[data-theme=dark] .chroma .nn{color:#ff7b72}[data-theme=dark] .chroma .nx{color:#e6edf3}[data-theme=dark] .chroma .py{color:#79c0ff}[data-theme=dark] .chroma .nt{color:#7ee787}[data-theme=dark] .chroma .nv{color:#79c0ff}[data-theme=dark] .chroma .vc{color:#79c0ff}[data-theme=dark] .chroma .vg{color:#79c0ff}[data-theme=dark] .chroma .vi{color:#79c0ff}[data-theme=dark] .chroma .vm{color:#79c0ff}[data-theme=dark] .chroma .nf{color:#d2a8ff;font-weight:700}[data-theme=dark] .chroma .fm{color:#d2a8ff;font-weight:700}[data-theme=dark] .chroma .l{color:#a5d6ff}[data-theme=dark] .chroma .ld{color:#79c0ff}[data-theme=dark] .chroma .s{color:#a5d6ff}[data-theme=dark] .chroma .sa{color:#79c0ff}[data-theme=dark] .chroma .sb{color:#a5d6ff}[data-theme=dark] .chroma .sc{color:#a5d6ff}[data-theme=dark] .chroma .dl{color:#79c0ff}[data-theme=dark] .chroma .sd{color:#a5d6ff}[data-theme=dark] .chroma .s2{color:#a5d6ff}[data-theme=dark] .chroma .se{color:#79c0ff}[data-theme=dark] .chroma .sh{color:#79c0ff}[data-theme=dark] .chroma .si{color:#a5d6ff}[data-theme=dark] .chroma .sx{color:#a5d6ff}[data-theme=dark] .chroma .sr{color:#79c0ff}[data-theme=dark] .chroma .s1{color:#a5d6ff}[data-theme=dark] .chroma .ss{color:#a5d6ff}[data-theme=dark] .chroma .m{color:#a5d6ff}[data-theme=dark] .chroma .mb{color:#a5d6ff}[data-theme=dark] .chroma .mf{color:#a5d6ff}[data-theme=dark] .chroma .mh{color:#a5d6ff}[data-theme=dark] .chroma .mi{color:#a5d6ff}[data-theme=dark] .chroma .il{color:#a5d6ff}[data-theme=dark] .chroma .mo{color:#a5d6ff}[data-theme=dark] .chroma .o{color:#ff7b72;font-weight:700}[data-theme=dark] .chroma .ow{color:#ff7b72;font-weight:700}[data-theme=dark] .chroma .or{color:#ff7b72;font-weight:700}[data-theme=dark] .chroma .c{color:#8b949e;font-style:italic}[data-theme=dark] .chroma .ch{color:#8b949e;font-style:italic}[data-theme=dark] .chroma .cm{color:#8b949e;font-style:italic}[data-theme=dark] .chroma .c1{color:#8b949e;font-style:italic}[data-theme=dark] .chroma .cs{color:#8b949e;font-weight:700;font-style:italic}[data-theme=dark] .chroma .cp{color:#8b949e;font-weight:700;font-style:italic}[data-theme=dark] .chroma .cpf{color:#8b949e;font-weight:700;font-style:italic}[data-theme=dark] .chroma .gd{color:#ffa198;background-color:#490202}[data-theme=dark] .chroma .ge{font-style:italic}[data-theme=dark] .chroma .gr{color:#ffa198}[data-theme=dark] .chroma .gh{color:#79c0ff;font-weight:700}[data-theme=dark] .chroma .gi{color:#56d364;background-color:#0f5323}[data-theme=dark] .chroma .go{color:#8b949e}[data-theme=dark] .chroma .gp{color:#8b949e}[data-theme=dark] .chroma .gs{font-weight:700}[data-theme=dark] .chroma .gu{color:#79c0ff}[data-theme=dark] .chroma .gt{color:#ff7b72}[data-theme=dark] .chroma .gl{text-decoration:underline}[data-theme=dark] .chroma .w{color:#6e7681}