:root{--bg:#fff;--fg:#111;--muted:#6e6e6b;--rule:#e4e4e1;--chip:#f1f1ee;--sans:"Helvetica Neue", Helvetica, Arial, sans-serif;--mono:ui-monospace, "SF Mono", Menlo, Consolas, monospace;color-scheme:light dark}@media (prefers-color-scheme:dark){:root{--bg:#0f0f0f;--fg:#f3f3f1;--muted:#8f8f8b;--rule:#262625;--chip:#1c1c1b}}*{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--fg);font-family:var(--sans);-webkit-font-smoothing:antialiased;margin:0;font-size:17px;line-height:1.45}img,video{max-width:100%;height:auto}a{color:inherit;text-decoration:none}a:hover{text-underline-offset:3px;text-decoration:underline 2px}a:focus-visible{outline:2px solid var(--fg);outline-offset:3px;border-radius:2px}.wrap{max-width:960px;padding-left:max(24px, env(safe-area-inset-left,0px));padding-right:max(24px, env(safe-area-inset-right,0px));margin:0 auto}header.site{flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:12px 24px;padding-block:32px 0;display:flex}.wordmark{letter-spacing:-.01em;font-size:1.05rem;font-weight:700}nav.site{flex-wrap:wrap;gap:6px 22px;font-size:.95rem;font-weight:700;display:flex}nav.site a.ext:after{content:"↗";color:var(--muted);margin-left:2px;font-weight:400}nav.site a[aria-current=page]{text-underline-offset:3px;text-decoration:underline 2px}.intro{padding-block:clamp(48px,8vw,88px) clamp(36px,6vw,64px)}.intro h1{letter-spacing:-.03em;text-wrap:balance;max-width:15ch;margin:0;font-size:clamp(1.7rem,5vw,3.2rem);font-weight:700;line-height:1.05}.intro h1 .soft{color:var(--muted)}section.block{border-top:2px solid var(--fg);grid-template-columns:160px minmax(0,1fr);gap:16px 32px;padding-block:18px 64px;display:grid}section.block.view-top{margin-top:clamp(40px,7vw,72px)}.label{letter-spacing:.08em;text-transform:uppercase;padding-top:4px;font-size:.78rem;font-weight:700}.label small{letter-spacing:0;text-transform:none;color:var(--muted);font-variant-numeric:tabular-nums;margin-top:6px;font-size:.85rem;font-weight:400;display:block}.label small a{text-underline-offset:3px;text-decoration:underline}.photos{grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;display:grid}.photos a{background:var(--chip);display:block;position:relative;overflow:hidden}.photos a:hover{text-decoration:none}.photos img{aspect-ratio:1;object-fit:cover;width:100%;height:auto;transition:transform .4s;display:block}.photos a:hover img{transform:scale(1.03)}.photos .cap{color:#fff;opacity:0;white-space:nowrap;text-overflow:ellipsis;background:linear-gradient(#0000,#0000008c);padding:24px 10px 8px;font-size:.8rem;font-weight:700;transition:opacity .25s;position:absolute;inset:auto 0 0;overflow:hidden}.photos a:hover .cap,.photos a:focus-visible .cap{opacity:1}.posts{margin:0;padding:0;list-style:none}.posts li{border-bottom:1px solid var(--rule);grid-template-columns:7.5em minmax(0,1fr);align-items:baseline;gap:4px 20px;padding-block:16px;display:grid}.posts li:first-child{padding-top:2px}.posts time{color:var(--muted);font-variant-numeric:tabular-nums;font-size:.9rem}.posts a{letter-spacing:-.01em;font-size:1.05rem;font-weight:700}.posts p{color:var(--muted);max-width:62ch;margin:4px 0 0;font-size:.95rem}.more{margin:18px 0 0;font-weight:700}.projects{margin:0;padding:0;list-style:none}.projects li{border-bottom:1px solid var(--rule);grid-template-columns:minmax(0,1fr) auto auto;align-items:baseline;gap:4px 20px;padding-block:14px;display:grid}.projects li:first-child{padding-top:2px}.projects .name{letter-spacing:-.01em;font-size:1.05rem;font-weight:700}.projects .desc{color:var(--muted);max-width:58ch;margin-top:2px;font-size:.95rem;display:block}.projects .kind{color:var(--muted);white-space:nowrap;font-size:.85rem}.projects .meta{align-items:baseline;gap:14px;display:flex}.year{font-variant-numeric:tabular-nums;text-align:right;min-width:4.2ch;font-size:.9rem;font-weight:700}.pill{letter-spacing:.06em;text-transform:uppercase;background:var(--chip);color:var(--muted);white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:3px 8px;font-size:.72rem;font-weight:700;display:inline-flex}.pill:before{content:"";opacity:.6;background:currentColor;border-radius:50%;width:6px;height:6px}.article-head{gap:12px;margin-bottom:28px;display:grid}.article-head h1{letter-spacing:-.03em;text-wrap:balance;max-width:22ch;margin:0;font-size:clamp(1.7rem,4.4vw,2.6rem);font-weight:700;line-height:1.08}.article-head .meta{color:var(--muted);flex-wrap:wrap;align-items:center;gap:8px 14px;font-size:.9rem;display:flex}.prose{max-width:65ch;font-size:1.05rem;line-height:1.6}.prose>*{margin:0 0 1.1em}.prose>:last-child{margin-bottom:0}.prose a{text-underline-offset:3px;text-decoration:underline 1px}.prose a:hover{text-decoration-thickness:2px}.prose h2{letter-spacing:-.015em;margin:1.8em 0 .5em;font-size:1.25rem;line-height:1.25}.prose h3{margin:1.6em 0 .4em;font-size:1.05rem}.prose ul,.prose ol{padding-left:1.3em}.prose li+li{margin-top:.25em}.prose del{color:var(--muted)}.prose blockquote{border-left:2px solid var(--rule);color:var(--muted);margin-left:0;padding-left:1em}.prose code{font-family:var(--mono);background:var(--chip);border-radius:4px;padding:.1em .35em;font-size:.86em}.prose pre{border-radius:6px;padding:16px 18px;font-size:.9rem;line-height:1.5;overflow-x:auto;background:var(--chip)!important}.prose pre code{font-size:inherit;background:0 0;padding:0}@media (prefers-color-scheme:dark){.prose pre.astro-code,.prose pre.astro-code span{color:var(--shiki-dark)!important}}.prose img{display:block}.prose p:has(>img:only-child){margin-block:1.8em}.prose iframe.video,.prose video{aspect-ratio:16/9;background:var(--chip);border:0;width:100%;margin-block:1.8em;display:block}.prose p:has(>img+img){grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;margin-block:1.8em;display:grid}.prose p:has(>img+img) img{aspect-ratio:1;object-fit:cover;width:100%;height:auto}.file{border:1px solid var(--rule);border-radius:6px;justify-content:space-between;align-items:baseline;gap:12px;padding:14px 16px;display:flex}.prose a.file{text-decoration:none}.file span{color:var(--muted);white-space:nowrap;font-size:.85rem}.file:hover strong{text-underline-offset:3px;text-decoration:underline}.pager{border-top:1px solid var(--rule);grid-template-columns:1fr 1fr;gap:16px;margin-top:56px;padding-top:18px;display:grid}.pager a{gap:2px;font-weight:700;display:grid}.pager a small{color:var(--muted);font-size:.82rem;font-weight:400}.pager .next{text-align:right;grid-column:2}.pager a:hover{text-decoration:none}.pager a:hover span{text-underline-offset:3px;text-decoration:underline 2px}footer.site{border-top:1px solid var(--rule);color:var(--muted);flex-wrap:wrap;justify-content:space-between;gap:12px 24px;padding-block:22px 40px;font-size:.88rem;display:flex}footer.site nav{flex-wrap:wrap;gap:6px 18px;display:flex}footer.site a{color:var(--fg);font-weight:700}@media (width<=720px){section.block{grid-template-columns:minmax(0,1fr);padding-block:14px 48px}.label small{margin:0 0 0 8px;display:inline}.photos{grid-template-columns:repeat(2,minmax(0,1fr))}.photos .cap{opacity:1}.posts li{grid-template-columns:minmax(0,1fr);gap:0}.posts time{font-size:.82rem}.projects li{grid-template-columns:minmax(0,1fr) auto}.projects .kind{display:none}.prose p:has(>img+img){grid-template-columns:repeat(2,minmax(0,1fr))}.pager{grid-template-columns:minmax(0,1fr)}.pager .next{text-align:left;grid-column:1}}@media (prefers-reduced-motion:reduce){.photos img,.photos .cap{transition:none}}
