:root{--bg:#fbfbf9;--fg:#1c1c1a;--muted:#6b6b66;--rule:#d9d9d3;--link:#0b5bd3;--code-bg:#f0f0ec;--accent:#b7410e;--mono:ui-monospace, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace;--sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif}@media(prefers-color-scheme:dark){:root{--bg:#141412;--fg:#e4e4df;--muted:#9a9a92;--rule:#2e2e2a;--link:#7fb2ff;--code-bg:#1e1e1b;--accent:#f08a4b}}*{box-sizing:border-box}html{font-size:16px;-webkit-text-size-adjust:100%}body{margin:0;padding:0 1rem 3rem;background:var(--bg);color:var(--fg);font-family:var(--sans);line-height:1.5}a{color:var(--link);text-decoration:none}a:hover{text-decoration:underline}.site-header,.site-footer,main{max-width:72ch;margin:0 auto}.site-header{display:flex;flex-wrap:wrap;align-items:baseline;gap:.5rem 1.5rem;padding:1rem 0;border-bottom:1px solid var(--rule);font-family:var(--mono);font-size:.9rem}.site-title{font-weight:700;color:var(--fg)}.site-nav{display:flex;gap:1rem;margin-left:auto}.site-nav a{color:var(--muted)}.site-footer{margin-top:3rem;padding-top:1rem;border-top:1px solid var(--rule);font-family:var(--mono);font-size:.8rem;color:var(--muted);display:flex;gap:1rem}h1,h2,h3,h4{line-height:1.2;margin:1.6em 0 .5em}h1{font-size:1.6rem;margin-top:1.2em}h2{font-size:1.25rem}h3{font-size:1.05rem}p,ul,ol,blockquote,table{margin:0 0 1em}hr{border:0;border-top:1px solid var(--rule);margin:2em 0}blockquote{border-left:3px solid var(--rule);margin-left:0;padding-left:1em;color:var(--muted)}.meta,time,.tag,.status,.year{font-family:var(--mono);font-size:.8rem;color:var(--muted)}.post-header .meta{margin-top:-.4rem}.tag::before{content:"#"}.status{text-transform:lowercase}.kind{text-transform:lowercase;border:1px solid var(--rule);border-radius:3px;padding:0 .3em}.status-active{color:var(--accent)}.log-list,.project-list{list-style:none;padding:0}.project-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(18rem,1fr));gap:.75rem}.project-card{border:1px solid var(--rule);border-radius:4px;padding:.75rem .9rem;display:grid;gap:.25rem}.project-card .project-name{font-weight:600;font-size:1.05rem}.project-card .summary{margin:0;color:var(--muted);font-size:.95rem}.intro{font-size:1.05rem}.log-item{display:grid;gap:.1rem 0;padding:.6rem 0;border-bottom:1px solid var(--rule)}.log-item .summary,.project-list .summary{color:var(--muted);font-size:.95rem}.proj::before{content:"/ "}.year{margin-top:2rem}.more{font-family:var(--mono);font-size:.85rem}.post-nav{display:flex;justify-content:space-between;gap:1rem;margin-top:2rem;font-family:var(--mono);font-size:.85rem}code,pre,kbd{font-family:var(--mono);font-size:.875em}code{background:var(--code-bg);padding:.1em .3em;border-radius:3px}pre{background:var(--code-bg);padding:.8rem 1rem;overflow-x:auto;border-radius:4px;line-height:1.4}pre code{background:0 0;padding:0;font-size:1em}.highlight pre{margin:0 0 1em}figure{margin:1.5rem 0;padding:0;max-width:100%}figure img{max-width:100%;height:auto;display:block}figcaption{font-family:var(--mono);font-size:.8rem;color:var(--muted);margin-top:.4rem;text-align:left}img{max-width:100%;height:auto}table{border-collapse:collapse;width:100%;font-size:.95rem}th,td{border-bottom:1px solid var(--rule);padding:.3rem .5rem;text-align:left;vertical-align:top}th{font-family:var(--mono);font-size:.8rem;color:var(--muted);font-weight:600}.chroma .k,.chroma .kd,.chroma .kn,.chroma .kr,.chroma .kt{color:#a626a4}.chroma .s,.chroma .s1,.chroma .s2,.chroma .sb{color:#50a14f}.chroma .c,.chroma .c1,.chroma .cm,.chroma .cs{color:#a0a1a7;font-style:italic}.chroma .m,.chroma .mi,.chroma .mf,.chroma .mh,.chroma .mb{color:#986801}.chroma .nf,.chroma .fm{color:#4078f2}.chroma .nb,.chroma .bp{color:#0184bc}.chroma .o,.chroma .p{color:inherit}.chroma .err{color:#e45649}@media(prefers-color-scheme:dark){.chroma .k,.chroma .kd,.chroma .kn,.chroma .kr,.chroma .kt{color:#c678dd}.chroma .s,.chroma .s1,.chroma .s2,.chroma .sb{color:#98c379}.chroma .c,.chroma .c1,.chroma .cm,.chroma .cs{color:#7f848e}.chroma .m,.chroma .mi,.chroma .mf,.chroma .mh,.chroma .mb{color:#d19a66}.chroma .nf,.chroma .fm{color:#61afef}.chroma .nb,.chroma .bp{color:#56b6c2}.chroma .err{color:#e06c75}}