*,:before,:after{box-sizing:border-box}:root{--gutter:clamp(16px, 5.6vw, 80px);--max:1280px}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:24px}html:has(dialog[open]){overflow:hidden}body{background:var(--c-bg,#fff);color:var(--c-text,#141414);font-family:var(--font-body,system-ui, sans-serif);-webkit-font-smoothing:antialiased;text-rendering:optimizelegibility;margin:0;font-size:16px;line-height:1.5}h1,h2,h3,p,ul,ol,dl,dd{margin:0}ul,ol{padding:0;list-style:none}img,svg{max-width:100%;display:block}a{color:inherit}button{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--c-focus,#1f5eff);outline-offset:3px}.wrap{width:min(100% - 2 * var(--gutter), var(--max));margin-inline:auto}.sr-only{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{z-index:100;background:var(--c-accent);color:var(--c-accent-text);border-radius:var(--radius);padding:10px 14px;font-size:13px;position:absolute;top:8px;left:8px;transform:translateY(-200%)}.skip-link:focus{transform:none}.no-js .js-only{display:none!important}.icon{flex:none}.btn{border:1px solid var(--c-border);border-radius:var(--radius);white-space:nowrap;cursor:pointer;justify-content:center;align-items:center;gap:8px;min-height:38px;padding:0 14px;font-size:12px;font-weight:500;line-height:1.2;text-decoration:none;transition:background-color .15s,border-color .15s,color .15s;display:inline-flex}.btn-lg{min-height:46px;padding:0 32px;font-size:13px}.btn-primary{background:var(--c-accent);border-color:var(--c-accent);color:var(--c-accent-text)}.btn-primary:hover{background:color-mix(in srgb, var(--c-accent) 85%, var(--c-bg))}.btn-secondary{background:var(--c-surface);color:var(--c-text)}.btn-secondary:hover{border-color:var(--c-text)}.btn-block{justify-content:flex-start;width:100%}.icon-btn{border:1px solid var(--c-border);background:var(--c-bg);width:46px;height:36px;color:var(--c-text);cursor:pointer;place-items:center;display:inline-grid}.icon-btn:hover:not(:disabled){border-color:var(--c-text)}.icon-btn:disabled{color:var(--c-border);cursor:default}.kicker{letter-spacing:.1em;text-transform:uppercase;font-size:12px;font-weight:500}.kicker-sm{color:var(--c-muted);letter-spacing:.04em;font-size:10px}.section-label{color:var(--c-muted);text-transform:uppercase;letter-spacing:.02em;font-size:11px;font-weight:500}.section-title{font-family:var(--font-display);letter-spacing:-.01em;margin-top:30px;font-size:clamp(28px,2.2vw + 14px,40px);font-weight:400;line-height:1.25}.nav{border-bottom:1px solid var(--c-surface);align-items:center;gap:24px;min-height:95px;display:flex}.brand{align-items:center;gap:20px;margin-right:auto;text-decoration:none;display:inline-flex}.brand-mark{font-family:var(--font-display);letter-spacing:-.5px;font-size:34px;line-height:1}.brand-logo{width:37px;height:40px;-webkit-mask:var(--logo) center / contain no-repeat;mask:var(--logo) center / contain no-repeat;background:currentColor;align-self:center}.brand-text{font-size:17px;font-weight:500}.nav-links ul{gap:35px;display:flex}.nav-links a{color:var(--c-muted);padding:8px 0;font-size:13px;text-decoration:none}.nav-links a:hover,.nav-links a[aria-current]{color:var(--c-text)}.nav-links{margin-right:auto}.availability{align-items:center;gap:8px;font-size:12px;display:inline-flex}.availability-dot{background:var(--c-available,#22a559);width:8px;height:8px;box-shadow:0 0 0 3px color-mix(in srgb, var(--c-available,#22a559) 22%, transparent);border-radius:50%}.theme-toggle{border:1px solid var(--c-border);border-radius:var(--radius);background:var(--c-bg);width:42px;height:42px;color:var(--c-text);cursor:pointer;place-items:center;display:inline-grid}.theme-toggle:hover{border-color:var(--c-text)}.theme-icon-sun,.theme-toggle[aria-pressed=true] .theme-icon-moon{display:none}.theme-toggle[aria-pressed=true] .theme-icon-sun{display:block}.nav-cta{min-width:140px;min-height:42px;font-size:13px}.theme-toggle{margin-left:26px}.no-js .nav-cta,:root:not(.has-dark) .nav-cta{margin-left:50px}.intro .wrap{border-bottom:1px solid var(--c-text);padding-top:90px}.hero{font-family:var(--font-display);letter-spacing:-.04em;margin-top:40px;font-size:clamp(44px,6.5vw + 8px,100px);font-weight:400;line-height:1.24}.hero-line{display:block}.intro-grid{grid-template-columns:minmax(0,744fr) minmax(0,536fr);margin-top:76px;display:grid}.contents{margin-top:26px}.contents-title{color:var(--c-subtle);text-transform:uppercase;font-size:10px}.contents ol{gap:2px;margin-top:13px;display:grid}.contents li{align-items:baseline;gap:22px;display:flex}.contents-num{width:14px;color:var(--c-subtle);font-size:11px}.contents a{padding:4px 0;font-size:14px;text-decoration:none}.contents a:hover{text-underline-offset:3px;text-decoration:underline}.intro-text{font-size:17px;line-height:29px}.actions{flex-wrap:wrap;gap:14px;margin-top:39px;display:flex}.location{color:var(--c-muted);text-transform:uppercase;letter-spacing:.02em;padding:70px 0 44px;font-size:11px;font-weight:500}.section-inner{border-bottom:1px solid var(--c-text);padding-top:37px;padding-bottom:40px;position:relative}.section-inner:before,.section-inner:after{content:"";background:var(--c-border);width:1px;height:calc(100% - 77px);position:absolute;top:37px;left:-32px}.section-inner:after{background:var(--c-text);width:2px;height:63px;left:-32.5px}@media (width<=1199px){.section-inner:before,.section-inner:after{display:none}}.bio-grid{gap:40px;margin-top:36px;display:grid}.bio-grid.has-stack{grid-template-columns:minmax(0,600fr) minmax(0,620fr);gap:60px}.bio-grid.has-stack .bio-text{border-right:1px solid var(--c-border);padding-right:40px}.bio-title{font-family:var(--font-display);color:var(--c-text);font-size:clamp(24px,1vw + 18px,29px);line-height:1.48}.bio-p{max-width:400px;color:var(--c-muted);margin-top:21px;font-size:16px;line-height:29px}.bio-meta{color:var(--c-subtle);flex-wrap:wrap;gap:8px 70px;margin-top:38px;font-size:12px;display:flex}.stack-tabs{border-bottom:1px solid var(--c-border);gap:12px;display:flex}.stack-tab{text-align:left;min-width:132px;color:var(--c-subtle);cursor:pointer;background:0 0;border:0;padding:10px 0 16px;font-size:14px;position:relative}.stack-tab:after{content:"";background:0 0;width:110px;height:2px;position:absolute;bottom:-1px;left:0}.stack-tab[aria-selected=true]{color:var(--c-text)}.stack-tab[aria-selected=true]:after{background:var(--c-text)}.stack-tab:hover{color:var(--c-text)}.js .stack-panels{display:grid}.js .stack-panel{grid-area:1/1;min-width:0}.js .stack-panel:not([data-active]):not([data-leaving]){display:none}.stack-panel[data-leaving]{pointer-events:none}.stack[data-enter-pending] .stack-graph{visibility:hidden}.stack-panel-title{display:none}.no-js .stack-panel+.stack-panel{margin-top:40px}.no-js .stack-panel-title{font-size:14px;font-weight:500;display:block}.stack-desc{color:var(--c-subtle);margin-top:18px;font-size:12px}.stack-graph{aspect-ratio:620/240;margin:48px 0 36px;position:relative;container-type:inline-size}.stack-edges{width:100%;height:100%;position:absolute;inset:0;overflow:visible}.edge{stroke:var(--c-border);stroke-width:1px}.edge-strong{stroke:var(--c-border-strong)}.edge-g{transition:opacity .15s}.is-flow .edge{stroke:var(--c-border)}.edge-flow{stroke:var(--c-border-strong);stroke-width:1.5px;stroke-dasharray:3 9}.edge-arrow{fill:none;stroke:var(--c-border-strong);stroke-width:1.5px;stroke-linecap:round;stroke-linejoin:round}.stack.is-idle .edge-flow{animation:1.2s linear infinite edge-flow}@keyframes edge-flow{to{stroke-dashoffset:-12px}}.stack-graph.is-dimmed .edge-g:not(.is-lit),.stack-graph.is-dimmed .stack-node:not(.is-lit){opacity:.35}.edge-g.is-lit .edge,.edge-g.is-lit .edge-flow,.edge-g.is-lit .edge-arrow{stroke:var(--c-text)}.stack-node{left:var(--x);top:var(--y);background:var(--c-bg);border:1px solid var(--c-border-strong);min-width:clamp(56px,14.5cqi,90px);height:clamp(28px,6.5cqi,40px);color:var(--c-text);white-space:nowrap;place-items:center;padding:0 clamp(8px,3cqi,19px);font-size:clamp(11px,2.1cqi,13px);transition:opacity .15s;display:grid;position:absolute;transform:translate(-50%,-50%)}.stack-node.is-primary{background:var(--c-accent);border-color:var(--c-accent);color:var(--c-accent-text)}.stack-node.is-primary:after{content:"";border:1px solid var(--c-accent);opacity:0;pointer-events:none;position:absolute;inset:-1px}.stack.is-idle .stack-node.is-primary:after{animation:3s ease-out infinite node-pulse}@keyframes node-pulse{0%{opacity:.6;transform:scale(1)}60%,to{opacity:0;transform:scale(1.18,1.35)}}.stack-caption{color:var(--c-subtle);gap:24px;font-size:11px;display:flex}.stack-fig{min-width:86px;font-size:10px}.timeline-head{justify-content:space-between;align-items:flex-end;gap:24px;display:flex}.timeline-hint{color:var(--c-subtle);padding-bottom:12px;font-size:12px}.tl{margin-top:28px}.tl-control{--inset:20px}.tl-years{height:38px;position:relative}.tl-year{top:0;left:calc(var(--inset) + var(--pos) * (100% - 2 * var(--inset)));font-family:var(--font-display);color:var(--c-subtle);cursor:pointer;background:0 0;border:0;padding:6px 4px;font-size:18px;position:absolute;transform:translate(-50%)}.tl-year:first-child{left:0;transform:none}.tl-year:last-child{left:auto;right:0;transform:none}.tl-year[aria-pressed=true],.tl-year:hover{color:var(--c-text)}.tl-track{--inset:20px;touch-action:none;cursor:pointer;height:76px;position:relative}.tl-ruler{left:var(--inset);right:var(--inset);width:calc(100% - 2 * var(--inset));height:38px;position:absolute;top:20px;overflow:visible}.tl-base,.tl-tick{stroke:var(--c-border-strong);stroke-width:1px}.tl-major{stroke:var(--c-muted);stroke-width:1.3px}.tl-thumb{top:11px;left:calc(var(--inset) + var(--pos,1) * (100% - 2 * var(--inset)));background:var(--c-accent);width:12px;height:56px;color:var(--c-accent-text);cursor:grab;place-items:center;transition:left .25s;display:grid;position:absolute;transform:translate(-50%)}.tl-thumb:before{content:"";position:absolute;inset:-4px -14px}.tl.is-dragging .tl-thumb{cursor:grabbing;transition:none}.tl-body-row{justify-content:space-between;gap:24px;margin-top:24px;display:flex;position:relative}.tl-panels{flex:1;min-width:0}.js .tl-panel:not([data-active]){display:none}.tl-panel{grid-template-columns:minmax(0,660fr) minmax(0,620fr);gap:24px;display:grid}.no-js .tl-panel+.tl-panel{border-top:1px solid var(--c-border);margin-top:40px;padding-top:32px}.tl-year-static{display:none}.no-js .tl-year-static{display:inline}.tl-chapter{color:var(--c-subtle);text-transform:uppercase;letter-spacing:.02em;font-size:10px}.tl-title{font-family:var(--font-display);margin-top:14px;font-size:clamp(22px,1.2vw + 14px,28px);font-weight:400;line-height:1.3}.tl-caption{color:var(--c-subtle);margin-top:18px;font-size:12px}.tl-text{max-width:420px;color:var(--c-muted);padding-top:14px;font-size:15px;line-height:27px}.tl-arrows{flex:none;align-self:flex-end;gap:14px;display:flex}.projects-head .section-title{margin-top:26px}.projects-sub{color:var(--c-muted);margin-top:4px;font-size:14px}.projects-bar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;margin-top:10px;display:flex}.filters{flex-wrap:wrap;gap:8px;display:flex}.chip{border:1px solid var(--c-border);border-radius:var(--radius);background:var(--c-surface);cursor:pointer;min-height:38px;padding:0 14px;font-size:12px;font-weight:500}.chip:hover{border-color:var(--c-text)}.chip[aria-pressed=true]{background:var(--c-accent);border-color:var(--c-accent);color:var(--c-accent-text)}.projects-count{color:var(--c-muted);text-transform:uppercase;letter-spacing:.02em;margin-left:auto;padding-right:48px;font-size:10px}.project-grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,300px),1fr));gap:22px;margin-top:19px;display:grid}.project-card{border:1px solid var(--c-border);border-radius:var(--radius);background:var(--c-bg);flex-direction:column;padding:12px;transition:border-color .15s;display:flex;position:relative}.card-link:after{content:"";z-index:1;border-radius:var(--radius);position:absolute;inset:0}.card-actions .btn:not(.card-link){z-index:2;position:relative}.project-card:hover,.project-card:hover .card-link{border-color:var(--c-text)}.project-card[hidden]{display:none}.card-preview{aspect-ratio:388/200;background:var(--c-surface);display:block;overflow:hidden}.card-preview img{object-fit:cover;width:100%;height:100%;transition:transform .4s}.project-card:hover .card-preview img{transform:scale(1.02)}.card-preview .img-dark,:root.has-dark[data-theme=dark] .card-preview .img-light{display:none}:root.has-dark[data-theme=dark] .card-preview .img-dark{display:block}@media (prefers-color-scheme:dark){:root.has-dark:not([data-theme=light]) .card-preview .img-light{display:none}:root.has-dark:not([data-theme=light]) .card-preview .img-dark{display:block}}.card-preview-empty{height:100%;font-family:var(--font-display);color:var(--c-border-strong);place-items:center;font-size:28px;display:grid}.card-meta{text-transform:uppercase;letter-spacing:.02em;justify-content:space-between;margin:22px 12px 0;font-size:10px;font-weight:500;display:flex}.card-meta-end{align-items:center;gap:10px;display:inline-flex}.badge{border:1px solid var(--c-text);border-radius:var(--radius);text-transform:uppercase;letter-spacing:.04em;padding:3px 7px;font-size:9px;font-weight:500;line-height:1.2;display:inline-block}.card-title{font-family:var(--font-display);justify-content:space-between;align-items:center;margin:12px 12px 0;font-size:26px;font-weight:400;line-height:1.2;display:flex}.card-tagline{color:var(--c-muted);margin:7px 12px 0;font-size:13px}.card-stack{color:var(--c-subtle);flex-wrap:wrap;margin:13px 12px 0;font-size:10px;display:flex}.card-stack li+li:before{content:"·";padding:0 8px}.card-actions{grid-template-columns:1fr 1fr;gap:12px;margin:auto 0 0;padding:21px 12px 0;display:grid}.card-actions .btn{justify-content:flex-start}.projects-empty{color:var(--c-muted);margin-top:24px}.dialog{border:1px solid var(--c-border);border-radius:var(--radius);background:var(--c-bg);width:min(640px,100% - 32px);max-height:min(100% - 32px,900px);color:var(--c-text);overscroll-behavior:contain;padding:0;overflow:auto}.dialog-sm{width:min(560px,100% - 32px)}.dialog::backdrop{background:#0a0a0a73}.dialog[open]{animation:.2s dialog-in}@keyframes dialog-in{0%{opacity:0;transform:translateY(8px)}}.no-js .dialog:target{z-index:50;height:fit-content;margin:auto;display:block;position:fixed;inset:0;box-shadow:0 0 0 100vmax #0a0a0a73}.dialog-inner{padding:20px 31px 32px}.dialog-top{justify-content:space-between;align-items:center;gap:16px;display:flex}.dialog-kicker{text-transform:uppercase;letter-spacing:.04em;font-size:10px;font-weight:500}.dialog-close{justify-content:space-between;min-width:102px;min-height:42px}.dialog-title{font-family:var(--font-display);letter-spacing:-.5px;margin-top:24px;font-size:29px;font-weight:400;line-height:1.25}.dialog-title-lg{margin-top:13px;font-size:clamp(34px,3vw + 18px,44px)}.dialog-text,.dialog-lead{margin-top:18px;font-size:15px;line-height:26px}.dialog-text+.btn{min-height:42px;margin-top:25px}.panel-status{margin-top:10px}.panel-hero{border:1px solid var(--c-border);border-radius:var(--radius);background:var(--c-surface);width:100%;height:auto;margin-top:22px}.panel-gallery{scroll-snap-type:x mandatory;gap:12px;margin-top:22px;padding-bottom:6px;display:flex;overflow-x:auto}.panel-gallery li{scroll-snap-align:start;flex:none}.panel-gallery img{border:1px solid var(--c-border);border-radius:var(--radius);background:var(--c-surface);width:auto;height:320px}.panel-headline{margin-top:6px;font-size:18px}.prose{color:var(--c-muted);margin-top:22px;font-size:15px;line-height:25px}.prose>*+*{margin-top:12px}.prose ul{padding-left:1.2em;list-style:outside}.prose ol{padding-left:1.4em;list-style:decimal}.prose a{color:var(--c-text);text-underline-offset:3px}.prose img{height:auto}.panel-meta{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--radius);grid-template-columns:1fr 1fr;gap:16px;margin-top:28px;padding:16px 17px;display:grid}.panel-meta dt{color:var(--c-muted);text-transform:uppercase;letter-spacing:.04em;font-size:9px}.panel-meta dd{margin-top:12px;font-size:13px}.panel-links{flex-wrap:wrap;gap:12px;margin-top:20px;display:flex}.panel-downloads{margin-top:31px}.panel-subtitle{font-family:var(--font-display);letter-spacing:-.5px;font-size:20px;font-weight:400}.panel-sub{color:var(--c-muted);margin-top:8px;font-size:12px}.download-list{gap:12px;margin-top:25px;display:grid}.download-row{background:var(--c-surface);border:1px solid var(--c-border);border-radius:var(--radius);grid-template-columns:minmax(0,1fr) 160px;align-items:center;gap:12px;min-height:42px;padding:0 15px;text-decoration:none;display:grid}.download-row:hover{border-color:var(--c-text)}.download-label{overflow-wrap:anywhere;align-items:center;gap:10px;min-width:0;font-size:12px;font-weight:500;display:inline-flex}.download-kind{color:var(--c-muted);text-transform:uppercase;letter-spacing:.04em;font-size:9px}.download-note{color:var(--c-muted);margin-top:27px;font-size:11px}.site-footer .wrap{border-top:1px solid var(--c-border);padding:35px 0 51px}.footer-top{justify-content:space-between;align-items:flex-start;gap:24px;display:flex}.footer-title{font-family:var(--font-display);letter-spacing:-.5px;margin-top:17px;font-size:clamp(26px,1.6vw + 16px,34px);font-weight:400;line-height:1.25}.footer-cta{justify-content:flex-start;min-width:212px;margin-top:25px}.footer-bottom{color:var(--c-muted);grid-template-columns:1fr auto 1fr;align-items:center;gap:16px;margin-top:58px;font-size:11px;display:grid}.footer-links{justify-content:flex-end;gap:28px;padding-right:58px;display:flex}.footer-links a{color:var(--c-text);align-items:center;gap:6px;text-decoration:none;display:inline-flex}.footer-links a:hover{text-underline-offset:3px;text-decoration:underline}.dev-issues{z-index:60;color:#3d2500;background:#fff4e5;border-bottom:2px solid #b35c00;font:13px/1.5 ui-monospace,SFMono-Regular,Menlo,monospace;position:relative}.dev-issues summary{cursor:pointer;padding:10px 16px;font-weight:700}.dev-issues ul{padding:0 16px 12px 32px;list-style:outside}.dev-issue{margin:4px 0}.dev-issue code,.dev-issue strong{margin-right:8px}.dev-error{color:#8a1300}@media (width<=1199px){.nav-cta,.no-js .nav-cta,:root:not(.has-dark) .nav-cta,.theme-toggle{margin-left:0}.nav-links ul{gap:24px}}@media (width<=1023px){.intro-grid{grid-template-columns:1fr;gap:48px;margin-top:56px}.intro-main{order:-1}.bio-grid.has-stack{grid-template-columns:1fr;gap:56px}.bio-grid.has-stack .bio-text{border-right:0;padding-right:0}.bio-p{max-width:60ch}.tl-panel{grid-template-columns:1fr;gap:8px}.tl-text{max-width:60ch}.tl-body-row{flex-direction:column}.footer-bottom{grid-template-columns:1fr;justify-items:start}.footer-links{padding-right:0}}@media (width<=860px){.nav{flex-wrap:wrap;row-gap:4px;min-height:0;padding:18px 0 12px}.nav-links{order:3;width:100%;margin-right:0}.availability{display:none}}@media (width<=639px){.brand{gap:12px}.brand-mark{font-size:28px}.brand-text{font-size:15px}.nav-cta{display:none}.intro .wrap{padding-top:48px}.hero{letter-spacing:-.03em;margin-top:24px}.intro-text{font-size:16px;line-height:27px}.actions .btn{flex:auto;padding:0 20px}.location{padding-top:48px}.timeline-head{flex-direction:column;align-items:flex-start}.timeline-hint{padding-bottom:0}.tl-control,.tl-track{--inset:12px}.tl-year{font-size:16px}.tl-minor{display:none}.stack-tab{flex:1;min-width:0;padding-right:8px}.stack-tab:after{width:100%}.stack-graph{margin:32px 0 28px}.stack-caption{flex-direction:column;gap:4px}.projects-count{margin-left:0;padding-right:0}.footer-top{flex-direction:column}.footer-cta{min-width:0;margin-top:0}.dialog-inner{padding:16px 18px 24px}.panel-meta{grid-template-columns:1fr}.download-row{grid-template-columns:1fr;gap:2px;padding:10px 15px}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.stack .edge-flow,.stack .stack-node.is-primary:after{animation:none!important}*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
