:root{--ink: #1a1a1a;--muted: #6b6b6b;--rule: #e6e6e6;--accent: #0b4dda;--bg: #fafaf7;--max-width: 640px}@media (prefers-color-scheme: dark){:root{--ink: #ececec;--muted: #9a9a9a;--rule: #2a2a2a;--accent: #7aa6ff;--bg: #111111}}*{box-sizing:border-box}html,body{margin:0;padding:0;overscroll-behavior:none}body{background:var(--bg);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,Inter,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:17px;line-height:1.6;-webkit-font-smoothing:antialiased}main{max-width:var(--max-width);margin:0 auto;padding:64px 28px 120px}main.wide{max-width:1024px}.narrow-content{max-width:640px}a{color:var(--accent);text-decoration:none;border-bottom:1px solid color-mix(in srgb,var(--accent) 35%,transparent)}a:hover{border-bottom-color:var(--accent)}h1,h2,h3{letter-spacing:-.01em;font-weight:600}h1{font-size:1.5rem;margin:0 0 .25rem}h2{font-size:1.05rem;margin:2rem 0 .5rem}h3{font-size:.95rem;margin:1.25rem 0 .25rem}p{margin:0 0 1rem}.tagline{color:var(--muted);margin:0 0 2rem;font-size:1rem}.headshot{display:block;width:192px;height:192px;border-radius:6px;object-fit:cover;margin:0 0 1.5rem}nav.site-nav{position:sticky;top:0;z-index:50;display:flex;gap:1.25rem;font-size:.95rem;flex-wrap:wrap;padding:22px max(28px,calc((100vw - var(--max-width)) / 2)) 16px;background:color-mix(in srgb,var(--bg) 72%,transparent);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);border-bottom:1px solid transparent;transition:background .2s ease,border-color .2s ease;will-change:transform;backface-visibility:hidden}nav.site-nav.wide{padding-left:max(28px,calc((100vw - 1024px)/2));padding-right:max(28px,calc((100vw - 1024px)/2))}nav.site-nav.is-scrolled{background:color-mix(in srgb,var(--bg) 85%,transparent);border-bottom-color:color-mix(in srgb,var(--ink) 10%,transparent)}@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))){nav.site-nav{background:var(--bg)}}nav.site-nav a{border-bottom:none;color:var(--muted)}nav.site-nav a:hover{color:var(--ink)}nav.site-nav a[aria-current=page]{color:var(--ink)}section{margin-top:2.25rem}ul.links{list-style:none;padding:0;margin:0;border-top:1px solid var(--rule)}ul.links li{border-bottom:1px solid var(--rule);padding:.75rem 0;display:flex;justify-content:space-between;gap:1rem}ul.links li .label{color:var(--muted)}ul.links li a{border-bottom:none}ul.entry-list{list-style:none;padding:0;margin:0}ul.entry-list li{border-bottom:1px solid var(--rule);padding:1rem 0}ul.entry-list li .entry-date{display:block;color:var(--muted);font-size:.85rem;font-variant-numeric:tabular-nums;margin-bottom:.25rem}ul.entry-list li .entry-title{display:block;font-weight:500;margin-bottom:.1rem}ul.entry-list li .entry-excerpt{color:var(--muted);font-size:.95rem}.kicker{font-size:.78rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);margin:0 0 .75rem}article.post{margin-top:1rem}article.post .post-date{color:var(--muted);font-size:.9rem;font-variant-numeric:tabular-nums;margin-bottom:.5rem}article.post h1{font-size:1.25rem}ul.icon-links{list-style:none;padding:0;margin:1.5rem 0 0;display:flex;gap:.9rem;align-items:center}ul.icon-links a{display:inline-flex;align-items:center;justify-content:center;border-bottom:none;color:var(--muted);transition:color .12s ease}ul.icon-links a:hover{color:var(--ink)}ul.icon-links .icon{height:14px;width:auto;display:block}.blog-grid{display:grid;grid-template-columns:minmax(0,640px) 1fr;gap:3rem;align-items:start}.blog-content{min-width:0}.blog-empty{color:var(--muted);font-size:.95rem;line-height:1.55;margin:1.25rem 0 0}.blog-empty a{color:var(--muted);text-decoration:underline;text-underline-offset:2px}.blog-empty a:hover{color:var(--ink)}.subscribe-aside{position:sticky;top:2rem;align-self:start;justify-self:start;width:100%;max-width:320px}@media (max-width: 900px){.blog-grid{grid-template-columns:1fr;gap:2rem}.subscribe-aside{position:static;max-width:380px;order:-1}}.sub-d{max-width:380px;border:1px solid var(--rule);border-radius:8px;padding:1.1rem 1.1rem 1rem;background:color-mix(in srgb,var(--ink) 2%,transparent)}.sub-d-title{margin:0 0 .6rem;font-size:.95rem;font-weight:500;color:var(--ink)}.sub-d form{display:flex;gap:.5rem}.sub-d input{flex:1;min-width:0;border:1px solid var(--rule);background:var(--bg);padding:.45rem .6rem;color:var(--ink);font:inherit;font-size:.9rem;border-radius:5px}.sub-d input:focus{outline:none;border-color:var(--accent)}.sub-d button{border:1px solid var(--ink);background:var(--ink);color:var(--bg);padding:.45rem .85rem;font:inherit;font-size:.88rem;border-radius:5px;cursor:pointer}.sub-d-note{margin:.55rem 0 0;font-size:.78rem;color:var(--muted)}.sub-d input:disabled,.sub-d button:disabled{opacity:.5;cursor:not-allowed}.feed{display:flex;flex-direction:column;gap:0}.feed-entry{border-top:1px solid var(--rule);padding:1.5rem 0 .5rem}.feed-entry:first-child{border-top:none;padding-top:0}.feed-entry .entry-date{color:var(--muted);font-size:.85rem;font-variant-numeric:tabular-nums;margin:0 0 .25rem}.feed-entry h2{font-size:1.1rem;margin:0 0 .75rem}.feed-entry p:last-child{margin-bottom:0}body:has(.projects-layout){display:block;height:100dvh;overflow:hidden}body:has(.projects-layout)>nav.site-nav{position:fixed;top:0;left:0;right:0;width:100%;max-width:none;margin:0}body:has(.projects-layout)>main{width:100%;height:100%;padding-top:0;padding-bottom:0;display:flex;flex-direction:column;min-height:0}body:has(.projects-layout)>main>.narrow-content{flex:0 0 auto}body:has(.projects-layout) .site-footer{display:none}body:has(.projects-layout)>main.wide{max-width:1200px}.projects-layout{display:grid;gap:2.5rem;align-items:stretch;flex:1 1 auto;min-height:0;position:relative}.projects-layout[data-mode=index]{grid-template-columns:minmax(0,760px);justify-content:center}.projects-layout[data-mode=index] .projects-detail,.projects-layout[data-mode=index] .projects-toc{display:none}.projects-layout.is-exiting[data-mode=index] .projects-column{overflow:hidden;overscroll-behavior:contain;touch-action:none}.projects-layout.is-exiting[data-mode=index] .projects-detail{display:block;position:absolute;top:0;bottom:0;left:50%;transform:translate(-50%);width:100%;max-width:720px;z-index:3;margin:0;padding-top:84px;overflow:hidden;pointer-events:none;background:var(--bg)}.projects-scroll-indicator{position:fixed;top:50%;left:1.25rem;transform:translateY(-50%);z-index:4;padding:.35rem .4rem;pointer-events:auto;transition:opacity .28s cubic-bezier(.22,1,.36,1)}.projects-layout[data-mode=single] .projects-scroll-indicator:not(.is-section-rail),.projects-layout[data-mode=index] .projects-scroll-indicator.is-section-rail{opacity:0;pointer-events:none;visibility:hidden;transition:opacity .28s cubic-bezier(.22,1,.36,1),visibility 0s linear .28s}.projects-scroll-indicator.is-section-rail[hidden]{display:none}.scroll-indicator-track{position:relative;display:flex;flex-direction:column;align-items:flex-start;gap:3px;padding:6px 2px}.scroll-dot{position:relative;display:grid;grid-template-columns:46px 1fr;align-items:center;padding:1px 0;border:none;background:transparent;cursor:pointer;color:var(--ink)}.scroll-dot:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:3px}.scroll-dot-tick{display:block;justify-self:start;width:12px;height:5px;border-radius:2px;background:color-mix(in srgb,var(--ink) 30%,transparent);transition:width .18s cubic-bezier(.22,1,.36,1),background .22s cubic-bezier(.22,1,.36,1)}.scroll-dot.is-active .scroll-dot-tick{background:var(--ink)}.projects-scroll-indicator:hover .scroll-dot-tick,.projects-scroll-indicator:has(:focus-visible) .scroll-dot-tick{width:calc(12px + var(--proximity, 0) * 26px)}.projects-scroll-indicator:hover .scroll-dot.is-active .scroll-dot-tick,.projects-scroll-indicator:has(:focus-visible) .scroll-dot.is-active .scroll-dot-tick{width:calc(22px + var(--proximity, 0) * 16px)}.projects-scroll-indicator:hover .scroll-dot:hover .scroll-dot-tick{width:38px;background:var(--ink)}.scroll-dot-label{padding-left:2px;font-size:.82rem;line-height:1.15;white-space:nowrap;color:color-mix(in srgb,var(--ink) 70%,transparent);opacity:0;transform:translate(-6px);pointer-events:none;transition:opacity .26s cubic-bezier(.22,1,.36,1),transform .26s cubic-bezier(.22,1,.36,1)}.projects-scroll-indicator:hover .scroll-dot-label,.projects-scroll-indicator:has(:focus-visible) .scroll-dot-label{opacity:1;transform:translate(0)}.scroll-indicator-thumb{display:none}.projects-backdrop{position:fixed;inset:0;background:var(--bg);opacity:0;pointer-events:none;z-index:3;transition:opacity .32s cubic-bezier(.22,1,.36,1)}.projects-scroll-indicator:hover~.projects-backdrop,.projects-scroll-indicator:has(:focus-visible)~.projects-backdrop{opacity:.72}.projects-layout[data-mode=single]{grid-template-columns:minmax(0,760px);justify-content:center}.projects-layout[data-mode=single] .projects-column{display:none}.projects-layout[data-mode=single] .projects-detail{padding-left:20px;padding-right:20px}.projects-column{list-style:none;padding:84px 20px 4rem;margin:0;display:flex;flex-direction:column;gap:1.1rem;overflow-y:auto;scrollbar-width:none;scroll-padding-top:72px;scroll-behavior:smooth;scroll-snap-type:y proximity}.projects-column .projects-row{scroll-snap-align:center;scroll-snap-stop:normal}.projects-column::-webkit-scrollbar{display:none}.projects-row{display:contents}.project-tile{position:relative;display:block;width:100%;aspect-ratio:2.2 / 1;flex:0 0 auto;padding:0;border:none;border-radius:12px;overflow:hidden;background:color-mix(in srgb,var(--ink) 6%,transparent);color:var(--ink);font:inherit;text-align:left;cursor:pointer;box-shadow:0 6px 22px -16px #0006;transition:transform .2s ease,box-shadow .22s ease}.project-tile:hover{transform:translateY(-2px);box-shadow:0 18px 44px -20px #0000008c}.project-tile:active{transform:translateY(-2px) scale(1.04);transition:transform .14s cubic-bezier(.2,.8,.2,1),box-shadow .14s ease;box-shadow:0 24px 56px -22px #0009}.project-tile:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.project-tile.is-active{box-shadow:0 10px 30px -18px #00000080,inset 0 0 0 2px color-mix(in srgb,var(--accent) 70%,transparent)}.tile-media{position:absolute;inset:0;display:flex;align-items:center;justify-content:center}.tile-media img{width:100%;height:100%;object-fit:cover;display:block}.tile-emoji{font-size:3rem;line-height:1;opacity:.85}.tile-overlay{position:absolute;left:0;right:0;bottom:0;padding:2.2rem 1.4rem 1.2rem;color:#fff;background:linear-gradient(to top,#000000d1,#00000080 55%,#0000);display:flex;flex-direction:column;gap:.2rem;pointer-events:none}.tile-title{font-weight:600;font-size:1.2rem;line-height:1.2;letter-spacing:-.005em;overflow-wrap:anywhere}.tile-date{font-size:.8rem;font-variant-numeric:tabular-nums;opacity:.88}.projects-detail{padding:84px 0 1.5rem;min-width:0;overflow-y:auto;scrollbar-width:none;scroll-padding-top:72px}.projects-detail::-webkit-scrollbar{display:none}.projects-back{position:fixed;top:72px;left:1.5rem;z-index:49;display:inline-flex;align-items:center;gap:.4rem;padding:.35rem .7rem .35rem .5rem;border:1px solid transparent;border-radius:8px;background:color-mix(in srgb,var(--bg) 85%,transparent);backdrop-filter:blur(6px);color:var(--muted);font:inherit;font-size:.88rem;cursor:pointer;transition:color .14s ease,background .14s ease,border-color .14s ease,opacity .2s ease}.projects-layout[data-mode=index] .projects-back{opacity:0;pointer-events:none;visibility:hidden}.projects-back:hover{color:var(--ink);border-color:var(--rule)}.projects-back:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.projects-back span[aria-hidden]{display:inline-block;transform:translateY(-1px);font-size:1.1em;line-height:1}.detail-hero{position:relative;width:100%;aspect-ratio:2.2 / 1;border-radius:12px;overflow:hidden;margin:0 0 1.5rem;background:color-mix(in srgb,var(--ink) 6%,transparent);box-shadow:0 6px 22px -16px #0006}.detail-cover{display:block;width:100%;height:100%;object-fit:cover}.detail-hero-overlay{position:absolute;left:0;right:0;bottom:0;padding:2.2rem 1.4rem 1.2rem;color:#fff;background:linear-gradient(to top,#000000d1,#00000080 55%,#0000);display:flex;flex-direction:column;gap:.2rem;pointer-events:none}.detail-meta{color:#ffffffe0;font-size:.8rem;font-variant-numeric:tabular-nums;margin:0;order:2}.detail-title{font-size:1.2rem;line-height:1.2;margin:0;color:#fff;font-weight:600;letter-spacing:-.005em;overflow-wrap:anywhere;order:1}.detail-body{max-width:62ch}.detail-body p:last-child{margin-bottom:0}.detail-body h2{font-size:1.05rem;margin:2rem 0 .6rem;letter-spacing:-.005em}.detail-body h2:first-child{margin-top:0}.detail-body h3{font-size:.95rem;margin:1.4rem 0 .4rem;color:var(--ink)}.detail-body p{margin:0 0 .9rem}.detail-body ul,.detail-body ol{margin:0 0 1rem;padding-left:1.25rem}.detail-body li{margin-bottom:.25rem}.detail-body strong{color:var(--ink)}.projects-toc,.toc-list,.toc-link{display:none}.mock-photo,.mock-video{position:relative;display:block;width:100%;aspect-ratio:16 / 9;margin:1.25rem 0;border-radius:10px;overflow:hidden;background:radial-gradient(120% 80% at 30% 20%,color-mix(in srgb,var(--ink) 10%,transparent),transparent 60%),linear-gradient(135deg,color-mix(in srgb,var(--ink) 6%,transparent),color-mix(in srgb,var(--ink) 3%,transparent));border:1px solid color-mix(in srgb,var(--ink) 10%,transparent)}.mock-photo:before,.mock-video:before{content:attr(aria-label);position:absolute;inset:0;display:flex;align-items:flex-end;justify-content:flex-start;padding:.9rem 1rem;font-size:.82rem;color:var(--muted);font-style:italic;text-align:left}.mock-photo:after,.mock-video:after{position:absolute;top:.75rem;left:.9rem;font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;color:color-mix(in srgb,var(--muted) 80%,transparent);font-family:-apple-system,BlinkMacSystemFont,Inter,sans-serif;font-weight:500}.mock-photo:after{content:"Photo"}.mock-video:after{content:"▶ Video";color:var(--accent)}.projects-row-inline{display:none}@media (max-width: 720px){body:has(.projects-layout){display:block;height:auto;overflow:visible}body:has(.projects-layout)>nav.site-nav{position:sticky;margin:0 auto}body:has(.projects-layout)>main{flex:none;display:block;padding-top:0;padding-bottom:120px}body:has(.projects-layout) .site-footer{display:block}.projects-layout{grid-template-columns:1fr;gap:0;height:auto;min-height:0}.projects-layout[data-mode=index],.projects-layout[data-mode=single]{grid-template-columns:1fr;justify-content:stretch}.projects-detail,.projects-layout[data-mode=index] .projects-detail,.projects-layout[data-mode=single] .projects-detail,.projects-toc,.projects-layout[data-mode=index] .projects-toc,.projects-layout[data-mode=single] .projects-toc,.projects-scroll-indicator,.projects-layout[data-mode=index] .projects-scroll-indicator,.projects-layout[data-mode=single] .projects-scroll-indicator{display:none}.projects-column,.projects-layout[data-mode=index] .projects-column,.projects-layout[data-mode=single] .projects-column{display:flex;gap:2rem;overflow:visible;padding:0}.projects-row{display:block}.project-tile{pointer-events:none;filter:none;opacity:1;transform:none!important;box-shadow:none!important;outline-color:transparent!important}.projects-row-inline{display:block;margin-top:.9rem}.projects-row-inline p:last-child{margin-bottom:0}.projects-row-inline h2{font-size:1rem;margin:1.5rem 0 .5rem}.projects-row-inline h3{font-size:.9rem;margin:1.1rem 0 .35rem}.projects-row-inline img,.projects-row-inline iframe{display:block;width:100%;height:auto;border-radius:8px;margin:1rem 0;border:0}.projects-row-inline iframe{aspect-ratio:16 / 9}}:root{--now-slide-dur: .68s;--now-slide-ease: cubic-bezier(.32, .72, 0, 1)}.now-stage{position:relative;margin-top:1rem;padding:0 64px;--card-w: 52%;--gap: 28px}.now-viewport{overflow:hidden}.now-track{list-style:none;padding:0;margin:0;width:100%;display:flex;gap:var(--gap);transition:transform var(--now-slide-dur) var(--now-slide-ease);will-change:transform;backface-visibility:hidden}.now-card{flex:0 0 var(--card-w);min-width:0;opacity:.35;transform:scale(.98);transform-origin:center center;transition:opacity var(--now-slide-dur) var(--now-slide-ease),transform var(--now-slide-dur) var(--now-slide-ease);will-change:transform,opacity;backface-visibility:hidden}.now-card.is-active{opacity:1;transform:scale(1)}@media (min-width: 721px){.now-card:not(.is-active){cursor:pointer;transition:opacity .22s ease,transform var(--now-slide-dur) var(--now-slide-ease)}.now-card:not(.is-active):hover{opacity:.75}.now-card:not(.is-active) .now-card-inner{pointer-events:none;transition:border-color .22s ease,background .22s ease}.now-card:not(.is-active):hover .now-card-inner{border-color:color-mix(in srgb,var(--ink) 40%,transparent);background:color-mix(in srgb,var(--ink) 5%,transparent)}}.now-card-inner{border:1px solid var(--rule);border-radius:12px;padding:1.5rem 1.75rem;background:color-mix(in srgb,var(--ink) 2%,transparent);min-height:460px;display:flex;flex-direction:column}.now-card-inner .entry-date{color:var(--muted);font-size:.85rem;font-variant-numeric:tabular-nums;margin:0 0 .25rem}.now-card-inner h2{font-size:1.1rem;margin:0 0 .9rem}.now-card-inner p:last-child{margin-bottom:0}.now-media{margin:0 0 1rem}.now-media-yt{position:relative;aspect-ratio:16 / 9;border-radius:8px;overflow:hidden;background:#000}.now-media-yt iframe{position:absolute;inset:0;width:100%;height:100%;border:0}.now-media-images{display:grid;gap:4px}.now-media-images.count-1{grid-template-columns:1fr}.now-media-images.count-2{grid-template-columns:1fr 1fr}.now-media-images.count-3{grid-template-columns:repeat(3,1fr)}.now-media-images.count-4{grid-template-columns:1fr 1fr}.now-media-images img{width:100%;aspect-ratio:4 / 3;object-fit:cover;border-radius:6px;display:block}.now-arrow{position:absolute;top:50%;transform:translateY(-50%);width:44px;height:44px;border-radius:999px;border:1px solid var(--rule);background:var(--bg);color:var(--ink);font-size:1.1rem;line-height:1;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;z-index:2;transition:color .12s ease,border-color .12s ease,opacity .12s ease}.now-arrow:hover:not(:disabled){border-color:var(--ink)}.now-arrow:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.now-arrow:disabled{opacity:.3;cursor:not-allowed}.now-arrow-left{left:0}.now-arrow-right{right:0}.now-timeline-wrap{margin:1.25rem 0 0;padding:.5rem 0;overflow:hidden}.now-timeline{list-style:none;padding:0;margin:0;display:flex;align-items:center;gap:4px;min-width:max-content;transition:transform var(--now-slide-dur) var(--now-slide-ease);will-change:transform;backface-visibility:hidden}.now-tick{flex:0 0 auto;border-radius:999px;position:relative}.now-tick-day{width:3px;height:3px;background:color-mix(in srgb,var(--ink) 22%,transparent);pointer-events:none}.now-tick-card{width:10px;height:10px;background:color-mix(in srgb,var(--ink) 55%,transparent);margin:0 6px;cursor:pointer;transition:background .18s ease,transform .18s ease}.now-tick-card:after{content:"";position:absolute;inset:-10px -6px;border-radius:inherit}.now-tick-card:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.now-tick-card:hover{background:color-mix(in srgb,var(--ink) 80%,transparent);transform:scale(1.2)}.now-tick-card.is-active{background:var(--accent);transform:scale(1.35)}.now-tick-card.is-active:hover{background:var(--accent);transform:scale(1.4)}@media (max-width: 720px){.now-stage{padding:0;--card-w: 100%;--gap: 0px}.now-arrow,.now-timeline-wrap{display:none}.now-viewport{overflow:visible;padding:0;margin:0}.now-track{flex-direction:column-reverse;gap:0;width:auto;transform:none!important;transition:none}.now-card{flex:0 0 auto;opacity:1;transform:none;transition:none;border-top:1px solid var(--rule);padding:1.5rem 0 .5rem}.now-card:first-child{border-top:none;padding-top:0}.now-card-inner{border:none;border-radius:0;padding:0;background:transparent;min-height:0}}footer.site-footer{margin-top:4rem;font-size:.85rem;color:var(--muted)}
