:root{--paper: #FAF9F6;--paper-2: #F3F2ED;--paper-3: #EBE9E1;--ink: #15171B;--ink-2: #383C43;--muted: #6B6F77;--rule: #DFDDD5;--rule-2: #CFCCC2;--accent: #1D3BD8;--accent-ink: #16309F;--accent-soft: #E7EAFC;--lime: #D9F05C;--live: #1B8F52;--serif: "Iowan Old Style", "Palatino Linotype", Palatino, "Book Antiqua", Georgia, "Times New Roman", serif;--sans: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI Variable Text", "Segoe UI", system-ui, "Helvetica Neue", Arial, sans-serif;--mono: ui-monospace, "Cascadia Mono", "SF Mono", SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;--gut: clamp(20px, 5vw, 56px);--maxw: 1140px}*{box-sizing:border-box}html{overflow-x:clip;scroll-behavior:smooth;-webkit-text-size-adjust:100%}body{margin:0;overflow-x:clip;background:var(--paper);color:var(--ink);font-family:var(--sans);font-size:17px;line-height:1.62;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}h1,h2,h3{margin:0;font-family:var(--serif);font-weight:600;letter-spacing:-.018em}p{margin:0}ul,ol{margin:0;padding:0;list-style:none}img{max-width:100%}a{color:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:2px}.skip{position:absolute;left:-9999px;top:8px;z-index:200;background:var(--ink);color:var(--paper);padding:10px 16px;font:600 14px/1 var(--sans);border-radius:4px}.skip:focus{left:16px}.wrap{width:100%;max-width:var(--maxw);margin-inline:auto;padding-inline:var(--gut)}.eyebrow{font-family:var(--mono);font-size:11.5px;letter-spacing:.15em;text-transform:uppercase;color:var(--muted);margin:0}.site-head{position:sticky;top:0;z-index:100;background:#faf9f6e6;background:color-mix(in srgb,var(--paper) 88%,transparent);backdrop-filter:saturate(180%) blur(12px);-webkit-backdrop-filter:saturate(180%) blur(12px);border-bottom:1px solid transparent;transition:border-color .3s ease,background .3s ease}.site-head.is-stuck{border-bottom-color:var(--rule)}.head-in{display:flex;align-items:center;gap:20px;height:66px}.brand{display:inline-flex;align-items:baseline;gap:10px;text-decoration:none;font-family:var(--serif);font-size:19px;font-weight:600;letter-spacing:-.01em;white-space:nowrap}.brand .handle{font-family:var(--mono);font-size:12px;letter-spacing:.06em;color:var(--muted)}.site-nav{margin-left:auto;display:flex;align-items:center;gap:clamp(14px,2.4vw,30px)}.site-nav a.navlink{position:relative;text-decoration:none;font-size:14.5px;color:var(--ink-2);padding:4px 1px;transition:color .2s ease}.site-nav a.navlink:after{content:"";position:absolute;left:0;right:0;bottom:0;height:1.5px;background:var(--accent);transform:scaleX(0);transform-origin:left;transition:transform .28s cubic-bezier(.2,.7,.3,1)}.site-nav a.navlink:hover{color:var(--accent)}.site-nav a.navlink:hover:after{transform:scaleX(1)}.btn{display:inline-flex;align-items:center;gap:9px;text-decoration:none;font:500 14.5px/1 var(--sans);padding:11px 17px;border-radius:999px;border:1px solid var(--rule-2);background:transparent;color:var(--ink);white-space:nowrap;transition:background .2s ease,border-color .2s ease,transform .12s ease,color .2s ease}.btn:hover{border-color:var(--ink);background:var(--paper-2)}.btn:active{transform:translateY(1px)}.btn--solid{background:var(--accent);border-color:var(--accent);color:#fff}.btn--solid:hover{background:var(--accent-ink);border-color:var(--accent-ink);color:#fff}.btn--lg{font-size:16px;padding:14px 24px}.btn .arr{font-family:var(--mono);font-size:13px;opacity:.75}@media(max-width:760px){.site-nav .navlink{display:none}}.hero{position:relative;padding-top:clamp(56px,9vw,104px);padding-bottom:clamp(48px,7vw,88px);overflow:hidden}#mesh{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;pointer-events:none;z-index:0}.hero>.wrap{position:relative;z-index:1}.hero-loc{display:flex;align-items:center;gap:12px;margin-bottom:clamp(22px,3vw,34px)}.hero-loc .bar{width:34px;height:1.5px;background:var(--accent)}h1.lede{font-size:clamp(2.4rem,5.7vw,4.6rem);line-height:1.04;letter-spacing:-.028em;max-width:30ch;margin-bottom:clamp(26px,3.4vw,40px)}h1.lede .ln{display:block}.swipe{-webkit-box-decoration-break:clone;box-decoration-break:clone;background-image:linear-gradient(var(--lime),var(--lime));background-repeat:no-repeat;background-position:0 84%;background-size:100% .4em;padding-inline:.06em}.hero-copy p{font-size:clamp(1.02rem,1.35vw,1.16rem);color:var(--ink-2);max-width:54ch}.hero-copy p+p{margin-top:1em}.hero-actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:30px}.dot{width:7px;height:7px;border-radius:50%;background:var(--live);flex:none}.facets{border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);background:var(--paper-2);padding-block:clamp(36px,5vw,58px)}.facets-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(24px,4vw,52px)}@media(max-width:880px){.facets-grid{grid-template-columns:minmax(0,1fr);gap:30px}}.facet h3{font-family:var(--mono);font-size:11.5px;font-weight:600;letter-spacing:.17em;text-transform:uppercase;color:var(--accent);margin-bottom:12px}.facet p{font-size:15.6px;color:var(--ink-2)}section[id]{scroll-margin-top:86px}.band{padding-block:clamp(64px,9vw,116px)}.sec-head{margin-bottom:clamp(34px,4.6vw,56px);max-width:76ch}.sec-head .eyebrow{margin-bottom:16px}.sec-head h2{font-size:clamp(1.85rem,3.7vw,2.85rem);line-height:1.1;letter-spacing:-.024em}.sec-head .sub{margin-top:14px;color:var(--muted);font-size:16.5px;max-width:52ch}.commits{border-bottom:1px solid var(--rule)}.dots-panel{background:#fff;border:1px solid var(--rule);border-radius:4px;padding:clamp(16px,2.4vw,28px);box-shadow:0 1px #15171b08,0 18px 42px -34px #15171b6b}#contrib{display:block;width:100%}.dots-foot{margin-top:18px;padding-top:15px;border-top:1px dashed var(--rule-2);display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px 24px}.dots-note{font-family:var(--mono);font-size:11px;line-height:1.6;letter-spacing:.02em;color:var(--muted);max-width:66ch}.dots-note a{color:var(--accent);text-decoration:none;border-bottom:1px solid transparent}.dots-note a:hover{border-bottom-color:var(--accent)}.dots-key{display:flex;align-items:center;gap:5px;font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);white-space:nowrap}.dots-key i{width:10px;height:10px;border-radius:2px;display:block}.dots-key .k0{background:#e8e6de}.dots-key .k1{background:#d5dbf6}.dots-key .k2{background:#a8b5ee}.dots-key .k3{background:#6a82e2}.dots-key .k4{background:#1d3bd8}.dots-key .lo{margin-right:3px}.dots-key .hi{margin-left:3px}.co-list{border-top:1px solid var(--ink)}.co{display:grid;grid-template-columns:108px minmax(0,1fr);gap:clamp(14px,3vw,40px);padding-block:clamp(24px,3vw,34px);border-bottom:1px solid var(--rule);transition:background .25s ease}.co:hover{background:linear-gradient(90deg,#1d3bd80b,#1d3bd800 62%)}@media(max-width:700px){.co{grid-template-columns:minmax(0,1fr);gap:8px}}.co-year{font-family:var(--mono);font-size:12.5px;letter-spacing:.04em;color:var(--muted);padding-top:.5em;transition:color .25s ease;white-space:nowrap}.co:hover .co-year{color:var(--accent)}.co-name{font-size:clamp(1.4rem,2.5vw,1.95rem);line-height:1.16;display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 14px}.co-role{font-family:var(--sans);font-size:13.5px;font-weight:500;letter-spacing:0;color:var(--muted);text-transform:none}.co-desc{margin-top:10px;color:var(--ink-2);font-size:16px;max-width:62ch}.chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:15px}.chip{display:inline-flex;align-items:center;gap:7px;font-family:var(--mono);font-size:11.4px;letter-spacing:.05em;padding:5px 11px;border-radius:999px;border:1px solid var(--rule-2);color:var(--ink-2);background:#fff}.chip--win{background:var(--accent);border-color:var(--accent);color:#fff}.chip--now{border-color:#a8cdb8;border-color:color-mix(in srgb,var(--live) 45%,var(--rule-2));color:var(--live);background:#fff}.chip--soft{background:var(--paper-2);color:var(--muted)}.proj-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(28px,3.6vw,44px) clamp(22px,2.6vw,32px)}@media(max-width:1000px){.proj-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:600px){.proj-grid{grid-template-columns:minmax(0,1fr)}}.proj{display:flex;flex-direction:column;min-width:0}.frame{position:relative;isolation:isolate;aspect-ratio:16 / 10;border:1px solid var(--rule);border-radius:4px;background:var(--paper-2);overflow:hidden;transition:border-color .25s ease,transform .3s cubic-bezier(.2,.7,.3,1),box-shadow .3s ease}.proj:hover .frame{border-color:var(--rule-2);transform:translateY(-3px);box-shadow:0 18px 40px -30px #15171b99}.frame--shot{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:18px;text-align:center;background-color:var(--paper-2);background-image:radial-gradient(var(--rule-2) 1px,transparent 1px);background-size:13px 13px;background-position:center}.frame--shot:before,.frame--shot:after{content:"";position:absolute;width:13px;height:13px;border:1px solid var(--rule-2)}.frame--shot:before{top:10px;left:10px;border-right:0;border-bottom:0}.frame--shot:after{bottom:10px;right:10px;border-left:0;border-top:0}.shot-name{font-family:var(--mono);font-size:clamp(10.5px,1.05vw,12.5px);letter-spacing:.11em;text-transform:uppercase;color:var(--ink-2);background:var(--paper-2);padding:1px 8px;max-width:100%;overflow-wrap:anywhere}.shot-kind{font-family:var(--mono);font-size:10px;letter-spacing:.17em;text-transform:uppercase;color:var(--muted);background:var(--paper-2);padding:1px 8px}.frame--log{background:#fff;padding:15px 16px;display:flex;align-items:center}.log{font-family:var(--mono);font-size:clamp(8.5px,.86vw,10.4px);line-height:1.8;color:var(--muted);white-space:pre;overflow:hidden}.log b{color:var(--ink-2);font-weight:500}.log .ok{color:var(--live)}.log .hit{color:var(--accent);font-weight:600}.frame--sim{background:#fff}.frame--sim canvas{display:block;width:100%;height:100%}.frame--sim .simcap{position:absolute;left:12px;bottom:10px;font-family:var(--mono);font-size:10.5px;letter-spacing:.07em;color:var(--muted);background:#ffffffd1;padding:2px 6px;border-radius:2px}.proj-body{padding-top:16px}.proj-year{font-family:var(--mono);font-size:11px;letter-spacing:.13em;color:var(--muted);margin-bottom:6px;transition:color .25s ease}.proj:hover .proj-year{color:var(--accent)}.proj h3{font-size:clamp(1.24rem,2vw,1.5rem);line-height:1.2;display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 12px}.proj-url{font-family:var(--mono);font-size:11.6px;letter-spacing:.03em;color:var(--accent);text-decoration:none;border-bottom:1px solid transparent;transition:border-color .2s ease}.proj-url:hover{border-bottom-color:var(--accent)}.proj p{margin-top:10px;color:var(--ink-2);font-size:15.7px;max-width:52ch}.tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:14px}.tags li{font-family:var(--mono);font-size:10.8px;letter-spacing:.05em;color:var(--muted);border:1px solid var(--rule);border-radius:3px;padding:3px 8px;background:var(--paper-2)}.posts{border-top:1px solid var(--ink)}.post{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:18px;align-items:center;padding-block:clamp(20px,2.6vw,28px);border-bottom:1px solid var(--rule);text-decoration:none;transition:background .25s ease,padding-inline .25s ease}.post:hover{background:linear-gradient(90deg,#1d3bd80b,#1d3bd800 62%)}.post h3{font-size:clamp(1.16rem,1.9vw,1.42rem);line-height:1.24;transition:color .2s ease}.post:hover h3{color:var(--accent)}.post p{margin-top:7px;color:var(--muted);font-size:15.3px;max-width:58ch}.post .go{font-family:var(--mono);font-size:13px;color:var(--muted);transition:transform .25s cubic-bezier(.2,.7,.3,1),color .2s ease}.post:hover .go{color:var(--accent);transform:translate(4px)}.contact{border-top:1px solid var(--rule);background:var(--paper-2)}.contact-grid{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,.95fr);gap:clamp(30px,5vw,70px);align-items:start}@media(max-width:860px){.contact-grid{grid-template-columns:minmax(0,1fr)}}.contact h2{font-size:clamp(2.1rem,4.6vw,3.3rem);line-height:1.06;letter-spacing:-.028em}.contact .pitch{margin-top:18px;color:var(--ink-2);font-size:17px;max-width:46ch}.mail{display:inline-block;margin-top:26px;font-family:var(--serif);font-size:clamp(1.35rem,3.1vw,2rem);letter-spacing:-.02em;color:var(--accent);text-decoration:none;border-bottom:2px solid rgba(29,59,216,.28);padding-bottom:2px;transition:border-color .25s ease;overflow-wrap:anywhere}.mail:hover{border-bottom-color:var(--accent)}.links{display:grid;gap:1px;background:var(--rule);border:1px solid var(--rule);border-radius:4px;overflow:hidden}.links a{display:flex;align-items:baseline;gap:14px;background:var(--paper-2);padding:15px 18px;text-decoration:none;font-family:var(--mono);font-size:13.2px;color:var(--ink-2);transition:background .2s ease,color .2s ease}.links a:hover{background:#fff;color:var(--accent)}.links a .lk{width:74px;flex:none;font-size:10.8px;letter-spacing:.13em;text-transform:uppercase;color:var(--muted)}.links a:hover .lk{color:var(--accent)}.contact-foot{margin-top:24px;display:flex;flex-wrap:wrap;gap:12px;align-items:center}.site-foot{border-top:1px solid var(--rule);background:var(--paper-2);padding-block:30px}.foot-in{display:flex;flex-wrap:wrap;gap:10px 24px;align-items:center;justify-content:space-between;font-family:var(--mono);font-size:11.5px;letter-spacing:.05em;color:var(--muted)}.foot-in a{color:var(--muted);text-decoration:none;border-bottom:1px solid var(--rule-2)}.foot-in a:hover{color:var(--accent);border-bottom-color:var(--accent)}.js-anim .reveal{opacity:0;transform:translateY(16px);transition:opacity .7s cubic-bezier(.2,.7,.3,1),transform .7s cubic-bezier(.2,.7,.3,1)}.js-anim .reveal.is-in{opacity:1;transform:none}.js-anim .hero-loc,.js-anim h1.lede,.js-anim .hero-copy,.js-anim .dock{opacity:0;transform:translateY(18px);animation:rise .85s cubic-bezier(.2,.7,.3,1) forwards}.js-anim .hero-loc{animation-delay:.05s}.js-anim h1.lede{animation-delay:.14s}.js-anim .hero-copy{animation-delay:.26s}.js-anim .dock{animation-delay:.36s}@keyframes rise{to{opacity:1;transform:none}}.js-anim .swipe{background-size:0% .4em;animation:swipe .66s cubic-bezier(.3,.8,.35,1) .62s forwards}@keyframes swipe{to{background-size:100% .4em}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}}.frame--img{background:var(--paper-2);padding:0}.frame--img img{display:block;width:100%;height:100%;object-fit:cover;object-position:top center}.proj>a.frame-link{display:block;text-decoration:none;color:inherit}.proj h3 a.proj-title{text-decoration:none;border-bottom:1px solid transparent;transition:color .2s ease,border-color .2s ease}.proj h3 a.proj-title:hover{color:var(--accent);border-bottom-color:var(--accent)}.page-head{border-bottom:1px solid var(--rule);background:var(--paper-2);padding-block:clamp(40px,6vw,72px)}.crumbs{display:flex;align-items:center;gap:8px;font-family:var(--mono);font-size:11.5px;letter-spacing:.13em;text-transform:uppercase;color:var(--muted);margin-bottom:18px}.crumbs a{color:var(--muted);text-decoration:none;border-bottom:1px solid transparent}.crumbs a:hover{color:var(--accent);border-bottom-color:var(--accent)}.detail-title{font-size:clamp(2.1rem,5vw,3.4rem);line-height:1.05;letter-spacing:-.028em}.detail-tagline{margin-top:16px;font-size:clamp(1.05rem,1.6vw,1.28rem);color:var(--ink-2);max-width:56ch}.detail-meta{display:flex;flex-wrap:wrap;align-items:center;gap:10px 18px;margin-top:24px}.detail-grid{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(0,1fr);gap:clamp(28px,4.4vw,60px);align-items:start}@media(max-width:900px){.detail-grid{grid-template-columns:minmax(0,1fr)}}.detail-shot{border:1px solid var(--rule);border-radius:4px;overflow:hidden;background:var(--paper-2);box-shadow:0 1px #15171b08,0 24px 54px -40px #15171b80}.detail-shot img{display:block;width:100%;height:auto}.detail-body p{color:var(--ink-2);font-size:16.5px;max-width:62ch}.detail-body p+p{margin-top:1em}.detail-side{display:grid;gap:1px;background:var(--rule);border:1px solid var(--rule);border-radius:4px;overflow:hidden}.detail-side .row{background:#fff;padding:15px 18px;display:flex;align-items:baseline;gap:14px;font-family:var(--mono);font-size:13px;color:var(--ink-2);text-decoration:none;transition:background .2s ease,color .2s ease;overflow-wrap:anywhere}a.row:hover{background:var(--paper-2);color:var(--accent)}.detail-side .row .lk{width:74px;flex:none;font-size:10.8px;letter-spacing:.13em;text-transform:uppercase;color:var(--muted)}a.row:hover .lk{color:var(--accent)}.detail-nav{border-top:1px solid var(--rule);margin-top:clamp(40px,6vw,72px);padding-top:22px;display:flex;flex-wrap:wrap;gap:14px 28px;justify-content:space-between;font-family:var(--mono);font-size:12.5px}.detail-nav a{color:var(--muted);text-decoration:none;border-bottom:1px solid transparent}.detail-nav a:hover{color:var(--accent);border-bottom-color:var(--accent)}.nf{padding-block:clamp(80px,14vw,180px);text-align:center}.nf h1{font-size:clamp(2.2rem,6vw,3.6rem);letter-spacing:-.03em}.nf p{margin-top:16px;color:var(--muted);max-width:44ch;margin-inline:auto}.nf .btn{margin-top:30px}.dots-stats{display:flex;flex-wrap:wrap;gap:8px 26px;margin-bottom:16px;font-family:var(--mono);font-size:11.5px;letter-spacing:.05em;color:var(--muted)}.dots-stats b{color:var(--ink);font-weight:600}.dots-empty{font-family:var(--mono);font-size:12px;color:var(--muted);padding:40px 0;text-align:center}
