.site-nav ul,.footer-links{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none}.footer-links{gap:20px}.label{display:block;color:var(--muted);font-size:12px;font-weight:600}.hero{max-width:760px;padding-block:72px 68px}.hero h1{font-size:clamp(48px,6vw,76px)}.hero-lead{max-width:600px;margin-top:24px;color:var(--muted);font-size:18px;line-height:1.65}.hero-lead p+p{margin-top:16px}.hero-lead a{color:var(--ink)}.hero-actions{display:flex;align-items:center;flex-wrap:wrap;gap:16px 24px;margin-top:28px}.hero-actions .button{margin:0}.quiet-link,.more{display:inline-flex;align-items:center;gap:10px;text-decoration:none;color:var(--muted);font-size:13px}.quiet-link svg,.more svg{width:16px;height:16px}.quiet-link:hover,.more:hover{color:var(--ink)}.home-section+.home-section{margin-top:48px}.section-heading{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:20px}.section-heading h2{font:600 26px/1.25 var(--body);letter-spacing:-.025em}.section-heading p{margin-top:6px;color:var(--muted);font-size:14px}.more{flex-shrink:0}.about-panel{display:grid;grid-template-columns:minmax(160px,1fr)minmax(0,2.6fr);gap:40px;margin-top:56px;padding:36px;border:1px solid var(--border);border-radius:20px;background:var(--surface)}.about-panel h2{font:600 28px/1.25 var(--body);letter-spacing:-.025em}.about-panel .prose{font-size:15px;color:var(--muted)}.about-panel .prose>:first-child{color:var(--ink)}.about-panel .prose>:last-child{margin-bottom:0}.archive-page{padding-top:64px}.page-heading{margin-bottom:36px}.doc-title{overflow-wrap:anywhere}.doc-subtitle{max-width:660px;margin-top:20px;font-size:18px;color:var(--muted);text-wrap:pretty}.page-heading .prose{max-width:720px;margin-top:24px}.entries,.projects{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin:0;padding:0;list-style:none}.projects{grid-template-columns:repeat(3,minmax(0,1fr))}.entry,.project{min-width:0}.entry-link,.project-link{position:relative;display:flex;flex-direction:column;height:100%;padding:26px;border:1px solid var(--border);border-radius:18px;text-decoration:none;transition:border-color 150ms ease,background-color 150ms ease}.entry-link:hover,.project-link:hover{border-color:var(--muted);background:var(--surface)}.entry-date,.project-year{display:block;padding-right:28px;color:var(--muted);font-size:12px;font-variant-numeric:tabular-nums}.entry-title,.project-title{display:block;margin-top:16px;font:600 20px/1.35 var(--body);letter-spacing:-.025em;overflow-wrap:anywhere}.entry-summary,.project-summary{margin-top:12px;color:var(--muted);font-size:14px;line-height:1.6}.entry-tags{display:flex;flex-wrap:wrap;gap:6px;padding-top:20px;margin-top:auto;color:var(--muted);font-size:11px}.entry-tags>span,.project-status{display:inline-flex;align-items:center;width:fit-content;padding:3px 10px;border-radius:20px;background:var(--soft);color:var(--muted);font-size:11px;font-weight:400;line-height:1.6}.entry-arrow{position:absolute;top:26px;right:26px;color:var(--muted)}.entry-arrow svg{width:17px;height:17px}.project-body{display:flex;flex-direction:column;flex:1;align-items:flex-start}.project-status{gap:6px;margin-top:20px}.project-status::before{content:"";width:5px;height:5px;border-radius:50%;background:currentColor}.project-status[data-status=active]{color:var(--ink)}.filter-bar{display:none;margin-bottom:28px}.filter-bar.is-ready{display:block}.filter-bar>.label{margin-bottom:12px}.filter{display:flex;flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none}.filter button{display:inline-flex;align-items:baseline;gap:6px;padding:8px 14px;border:1px solid transparent;border-radius:24px;background:var(--soft);color:var(--muted);font:13px/1.5 var(--body);cursor:pointer}.filter button:hover{border-color:var(--border);color:var(--ink)}.filter button[aria-pressed=true]{background:var(--ink);color:var(--background)}.filter .count{font-size:11px;opacity:.8}.filter-empty,.empty-state{padding:28px;border:1px solid var(--border);border-radius:18px;background:var(--surface);color:var(--muted)}.filter-empty{margin-top:20px}.tag-cloud{display:flex;flex-wrap:wrap;gap:12px;margin:20px 0 0;padding:0;list-style:none}.tag-cloud a{display:inline-flex;align-items:center;gap:16px;border:1px solid var(--border);border-radius:24px;padding:10px 18px;text-decoration:none;font-size:15px}.tag-cloud a:hover{border-color:var(--muted);background:var(--surface)}.tag-cloud .count{color:var(--muted);font-size:12px;font-variant-numeric:tabular-nums}.document-page{max-width:820px;padding-top:36px}.document-page>.page-heading{margin-top:36px}.document-page>.page-heading:first-child{margin-top:20px}.document-page .doc-title{font-size:clamp(40px,5vw,60px)}.doc-meta{display:flex;align-items:center;flex-wrap:wrap;gap:10px 18px;margin-bottom:20px;color:var(--muted);font-size:12px}.doc-meta .project-status{margin-top:0}.doc-meta-tags{display:flex;flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none}.doc-meta-tags a,.doc-meta-tags>li>span{display:block;padding:3px 10px;border-radius:20px;background:var(--soft);color:var(--muted);text-decoration:none;font-size:11px}.doc-meta-tags a:hover{color:var(--ink)}.doc-body{max-width:720px;margin-top:36px}.doc-hero{margin:32px 0}.doc-hero img{display:block;width:100%;height:auto;border-radius:18px}.reference-page{max-width:1120px}.reference-page .doc-body{max-width:none}.reference-page .prose>p,.reference-page .prose>ul,.reference-page .prose>ol{max-width:720px}.prose{overflow-wrap:break-word;line-height:1.75}.prose>:first-child{margin-top:0}.prose p,.prose ul,.prose ol,.prose dl{margin-block:1.25em}.prose li+li{margin-top:.4em}.prose h1,.prose h2{margin:44px 0 16px;font:600 26px/1.3 var(--body);letter-spacing:-.025em}.prose h3{margin:32px 0 12px;font-size:21px;line-height:1.3;font-weight:600;letter-spacing:-.02em}.prose h4,.prose h5,.prose h6{margin:28px 0 10px;font-size:17px;font-weight:600;line-height:1.4}.prose a{text-decoration:underline;text-decoration-color:var(--muted)}.prose a:hover{text-decoration-color:var(--ink)}.prose strong{font-weight:600}.prose blockquote{margin:28px 0;padding:18px 24px;border:1px solid var(--border);border-radius:16px;background:var(--surface);color:var(--muted)}.prose blockquote p{margin-block:8px}.prose hr{margin:40px 0;height:1px;border:0;background:var(--border)}.prose figure{margin:32px 0}.prose img{display:block;height:auto;border-radius:14px}.prose figcaption{margin-top:10px;font-size:12px;line-height:1.5;color:var(--muted)}.prose audio{display:block;width:100%;margin-block:24px}.prose table{width:100%;margin:28px 0;border-collapse:collapse;font-size:14px;line-height:1.5}.prose>table{display:block;overflow-x:auto}.prose th{padding:12px 16px;background:var(--soft);font-size:12px;font-weight:600;text-align:left}.prose td{padding:12px 16px;border-bottom:1px solid var(--border);vertical-align:top}.prose sup a{text-decoration:none}.scroll-x{overflow-x:auto;overscroll-behavior-x:contain}.footnotes{margin-top:48px;padding-top:20px;border-top:1px solid var(--border);color:var(--muted);font-size:14px}code{font-family:var(--font-mono);font-size:.85em}:not(pre)>code{padding:.15em .4em;border:1px solid var(--border);border-radius:6px;background:var(--surface)}.prose>.highlight{margin:28px 0}pre{max-width:100%;margin:28px 0;padding:22px 24px;overflow-x:auto;border:1px solid var(--border);border-radius:16px;background:var(--surface);font-size:13px;line-height:1.7}pre code{font-size:inherit}.highlight pre{margin:0}.chroma{background:var(--surface)!important}.code-input{display:block;width:100%;max-width:360px;margin-top:10px;padding:12px 16px;border:1px solid var(--border);border-radius:12px;background:var(--surface);color:var(--ink);font:14px/1.5 var(--body)}.code-input::placeholder{color:var(--muted);opacity:1}.code-input:focus-visible{border-color:var(--ink)}.prose .acriss-table{min-width:680px;font-family:var(--font-mono);font-size:13px}.prose .acriss-table td{border:1px solid var(--border);padding:10px 12px}.prose .acriss-table tr:nth-child(even) td{background:var(--surface)}.prose .acriss-table td.highlight{background:var(--ink);color:var(--background)}@media(max-width:900px){.projects{grid-template-columns:repeat(2,minmax(0,1fr))}.about-panel{grid-template-columns:1fr;gap:24px}}@media(max-width:760px){.hero{padding-block:48px}.hero-lead{font-size:17px}.archive-page{padding-top:44px}.section-heading{align-items:flex-start}.section-heading h2{font-size:24px}.section-heading p{font-size:13px}.section-heading .more{padding-top:7px;font-size:12px;gap:6px}.doc-subtitle{font-size:16px}.entry-link,.project-link{padding:22px}.entry-title,.project-title{font-size:18px}.entry-arrow{top:22px;right:22px}.about-panel{padding:28px}.prose h1,.prose h2{font-size:24px}pre{padding:18px}}@media(max-width:540px){.personal-site .site-header{align-items:flex-start;flex-direction:column;gap:16px;padding-block:20px 16px}.personal-site .site-nav{width:100%}.site-nav ul{gap:4px}.entries,.projects{grid-template-columns:1fr}.section-heading{flex-wrap:wrap;gap:10px}.section-heading .more{padding-top:0}.about-panel{padding:24px}.document-page .doc-title{font-size:42px}}@media(prefers-color-scheme:light){.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}}@media(prefers-color-scheme:dark){.bg{color:#e6edf3;background-color:#0d1117}.chroma{color:#e6edf3;background-color:#0d1117;-webkit-text-size-adjust:none}.chroma .err{color:#f85149}.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:#6e7681}.chroma .lnt{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#737679}.chroma .ln{white-space:pre;-webkit-user-select:none;user-select:none;margin-right:.4em;padding:0 .4em;color:#6e7681}.chroma .line{display:flex}.chroma .k{color:#ff7b72}.chroma .kc{color:#79c0ff}.chroma .kd{color:#ff7b72}.chroma .kn{color:#ff7b72}.chroma .kp{color:#79c0ff}.chroma .kr{color:#ff7b72}.chroma .kt{color:#ff7b72}.chroma .nc{color:#f0883e;font-weight:700}.chroma .no{color:#79c0ff;font-weight:700}.chroma .nd{color:#d2a8ff;font-weight:700}.chroma .ni{color:#ffa657}.chroma .ne{color:#f0883e;font-weight:700}.chroma .nl{color:#79c0ff;font-weight:700}.chroma .nn{color:#ff7b72}.chroma .nx{color:#e6edf3}.chroma .py{color:#79c0ff}.chroma .nt{color:#7ee787}.chroma .nv{color:#79c0ff}.chroma .vc{color:#79c0ff}.chroma .vg{color:#79c0ff}.chroma .vi{color:#79c0ff}.chroma .vm{color:#79c0ff}.chroma .nf{color:#d2a8ff;font-weight:700}.chroma .fm{color:#d2a8ff;font-weight:700}.chroma .l{color:#a5d6ff}.chroma .ld{color:#79c0ff}.chroma .s{color:#a5d6ff}.chroma .sa{color:#79c0ff}.chroma .sb{color:#a5d6ff}.chroma .sc{color:#a5d6ff}.chroma .dl{color:#79c0ff}.chroma .sd{color:#a5d6ff}.chroma .s2{color:#a5d6ff}.chroma .se{color:#79c0ff}.chroma .sh{color:#79c0ff}.chroma .si{color:#a5d6ff}.chroma .sx{color:#a5d6ff}.chroma .sr{color:#79c0ff}.chroma .s1{color:#a5d6ff}.chroma .ss{color:#a5d6ff}.chroma .m{color:#a5d6ff}.chroma .mb{color:#a5d6ff}.chroma .mf{color:#a5d6ff}.chroma .mh{color:#a5d6ff}.chroma .mi{color:#a5d6ff}.chroma .il{color:#a5d6ff}.chroma .mo{color:#a5d6ff}.chroma .o{color:#ff7b72;font-weight:700}.chroma .ow{color:#ff7b72;font-weight:700}.chroma .or{color:#ff7b72;font-weight:700}.chroma .c{color:#8b949e;font-style:italic}.chroma .ch{color:#8b949e;font-style:italic}.chroma .cm{color:#8b949e;font-style:italic}.chroma .c1{color:#8b949e;font-style:italic}.chroma .cs{color:#8b949e;font-weight:700;font-style:italic}.chroma .cp{color:#8b949e;font-weight:700;font-style:italic}.chroma .cpf{color:#8b949e;font-weight:700;font-style:italic}.chroma .gd{color:#ffa198;background-color:#490202}.chroma .ge{font-style:italic}.chroma .gr{color:#ffa198}.chroma .gh{color:#79c0ff;font-weight:700}.chroma .gi{color:#56d364;background-color:#0f5323}.chroma .go{color:#8b949e}.chroma .gp{color:#8b949e}.chroma .gs{font-weight:700}.chroma .gu{color:#79c0ff}.chroma .gt{color:#ff7b72}.chroma .gl{text-decoration:underline}.chroma .w{color:#6e7681}}