@font-face{font-family:OT Rayuela;font-style:normal;font-weight:500;font-display:swap;src:url(/portfolio/assets/fonts/OTRayuela-Regular.woff2) format("woff2"),url(/portfolio/assets/fonts/OTRayuela-Regular.woff) format("woff")}@font-face{font-family:PP Neue Montreal;font-style:normal;font-weight:400;font-display:swap;src:url(/portfolio/assets/fonts/PPNeueMontreal-Regular.woff2) format("woff2"),url(/portfolio/assets/fonts/PPNeueMontreal-Regular.woff) format("woff")}@font-face{font-family:PP Neue Montreal;font-style:normal;font-weight:500;font-display:swap;src:url(/portfolio/assets/fonts/PPNeueMontreal-Medium.woff2) format("woff2"),url(/portfolio/assets/fonts/PPNeueMontreal-Medium.woff) format("woff")}:root{color-scheme:light dark;--font-display:"OT Rayuela",Georgia,"Times New Roman",serif;--font-body:"PP Neue Montreal",system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",sans-serif;--font-heading-project:"PP Neue Montreal",system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",sans-serif;--font-size-00:0.75rem;--font-size-0:0.875rem;--font-size-1:1rem;--font-size-2:1.125rem;--font-size-3:1.4375rem;--font-size-4:1.75rem;--font-size-5:clamp(2rem,1.75rem + 1vw,2.5rem);--font-weight-regular:400;--font-weight-medium:500;--font-weight-semibold:600;--line-height-tight:1.25;--line-height-snug:1.45;--line-height-normal:1.625;--tracking-display:0.03rem;--space-3xs:0.25rem;--space-2xs:0.5rem;--space-xs:0.75rem;--space-s:1rem;--space-m:1.5rem;--space-l:2.25rem;--space-xl:3.375rem;--space-2xl:5rem;--space-3xl:7.5rem;--section-gap:4.5rem;--color-bg:#fafafa;--color-surface:#ffffff;--color-ink:#0a0a0a;--color-ink-muted:#525252;--color-ink-faint:#737373;--color-rule:#e5e5e5;--color-hover:#f5f5f5;--color-error:#b91c1c;--color-focus:#0a0a0a;--color-status:oklch(72% 0.17 150);--color-status-ring:oklch(72% 0.17 150/0.45);--measure:38rem;--band:60rem;--grid-min:16rem;--frame-ratio:16/9;--box-padding:var(--space-m);--box-border-color:var(--color-rule);--box-border-width:1px;--box-radius:0.75rem;--rule-width:3rem;--transition-fast:150ms ease;--focus-ring-width:2px;--content-padding-inline:clamp(3rem,1.5rem + 4.5vw,6rem)}@media (prefers-color-scheme:dark){:root{--color-bg:#0a0a0a;--color-surface:#171717;--color-ink:#fafafa;--color-ink-muted:#a3a3a3;--color-ink-faint:#8f8f8f;--color-rule:#262626;--color-hover:rgb(38 38 38/0.5);--color-error:#f87171;--color-focus:#fafafa;--color-status:oklch(78% 0.18 150);--color-status-ring:oklch(78% 0.18 150/0.45)}}.cover{display:flex;flex-direction:column;min-block-size:100vh;min-block-size:100svh;padding-inline:var(--content-padding-inline)}.cover>*{margin-block:0}.cover>.cover__main{flex-grow:1;display:flex;flex-direction:column;justify-content:center;padding-block:var(--space-xl)}.column{box-sizing:content-box;max-inline-size:var(--measure);margin-inline:auto;padding-inline:var(--gutter,0)}.stack{display:flex;flex-direction:column;justify-content:flex-start}.stack>*{margin-block:0}.stack>*+*{-webkit-margin-before:var(--space,var(--space-m));margin-block-start:var(--space,var(--space-m))}.stack-small{--space:var(--space-s)}.stack-large{--space:var(--space-l)}.stack-xlarge{--space:var(--space-xl)}.stack>:where(h1,h2,h3)+*{-webkit-margin-before:var(--space-s);margin-block-start:var(--space-s)}.stack--split>:first-child{-webkit-margin-after:auto;margin-block-end:auto}.cluster{display:flex;flex-wrap:wrap;gap:var(--space,var(--space-s));align-items:center;justify-content:var(--cluster-justify,flex-start)}.cluster--split{--cluster-justify:space-between}.cluster--end{--cluster-justify:flex-end}.box{padding:var(--box-padding);border:var(--box-border-width) solid var(--box-border-color);border-radius:var(--box-radius);background-color:var(--box-bg,transparent);display:flow-root}.box--invert{--box-bg:var(--color-ink);color:var(--color-bg);border-color:var(--color-ink)}.grid{display:grid;grid-gap:var(--space,var(--space-m));gap:var(--space,var(--space-m));grid-template-columns:repeat(auto-fit,minmax(min(var(--grid-min),100%),1fr))}.grid--center{align-items:center}.frame{aspect-ratio:var(--frame-ratio);overflow:hidden;position:relative;background-color:var(--color-rule);border-radius:var(--box-radius);outline:1px solid color-mix(in srgb,var(--color-ink) 10%,transparent);outline-offset:-1px}.frame>img,.frame>svg,.frame>video{inline-size:100%;block-size:100%;object-fit:cover;display:block}.frame--square{--frame-ratio:1/1}.frame--portrait{--frame-ratio:3/4}.frame--wide{--frame-ratio:21/9}*,:after,:before{box-sizing:border-box}*{margin:0}html{-webkit-text-size-adjust:100%}body{min-block-size:100vh;min-block-size:100svh}canvas,img,picture,svg,video{display:block;max-inline-size:100%;block-size:auto}button,input,select,textarea{font:inherit;color:inherit}ol[role=list],ul[role=list]{list-style:none;padding:0}body{font-family:var(--font-body);font-size:var(--font-size-1);line-height:var(--line-height-normal);background-color:var(--color-bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body,h1,h2,h3{font-weight:var(--font-weight-regular);color:var(--color-ink)}h1,h2,h3{font-family:var(--font-display);line-height:var(--line-height-tight);letter-spacing:var(--tracking-display);overflow-wrap:break-word}h1,h2{font-size:var(--font-size-4)}h3{font-size:var(--font-size-3)}p{overflow-wrap:break-word}li,p{color:var(--color-ink-muted)}.lead{font-size:var(--font-size-2);line-height:var(--line-height-snug)}.meta{font-size:var(--font-size-0);color:var(--color-ink-faint)}::selection{background-color:var(--color-ink);color:var(--color-bg)}.gate-card>h1:after,.page-intro>h1:after,.page-section>h2:after{content:"";display:block;inline-size:var(--rule-width);block-size:1px;background-color:var(--color-rule);border-radius:1px;-webkit-margin-before:var(--space-m);margin-block-start:var(--space-m)}a{color:var(--color-ink);text-decoration:none;transition:color var(--transition-fast),opacity var(--transition-fast)}p a:not(.company-link){text-decoration:underline;-webkit-text-decoration-color:var(--color-rule);text-decoration-color:var(--color-rule);text-underline-offset:.2em}p a:not(.company-link):hover{-webkit-text-decoration-color:currentColor;text-decoration-color:currentColor}.company-link:hover{color:var(--brand-color,var(--color-ink))}@media (prefers-color-scheme:dark){.company-link.brand-black:hover{color:#ffffff}}:focus-visible{outline:var(--focus-ring-width) solid var(--color-focus);outline-offset:2px;border-radius:2px}.skip-link{position:absolute;inset-block-start:var(--space-s);inset-inline-start:var(--space-s);z-index:100;padding:var(--space-2xs) var(--space-s);background-color:var(--color-ink);color:var(--color-bg);border-radius:var(--box-radius);transform:translateY(-300%)}.skip-link:focus{transform:none}.visually-hidden{position:absolute;inline-size:1px;block-size:1px;padding:0;margin:-1px;overflow:hidden;-webkit-clip-path:inset(50%);clip-path:inset(50%);white-space:nowrap}.page{max-inline-size:var(--measure);padding:var(--content-padding-inline);margin-inline:auto;box-sizing:content-box}.page>*+*{-webkit-margin-before:var(--section-gap);margin-block-start:var(--section-gap)}.page-intro h1{font-size:var(--font-size-4)}.page-footer{font-size:var(--font-size-0)}.page-footer,.page-footer p,.status{color:var(--color-ink-faint)}.status{font-size:var(--font-size-0);display:flex;align-items:center;gap:var(--space-2xs)}.status-dot{inline-size:.5rem;block-size:.5rem;border-radius:50%;background-color:var(--color-status);flex-shrink:0;position:relative}.status-dot:after{content:"";position:absolute;inset:0;border-radius:50%;box-shadow:0 0 0 0 var(--color-status-ring);animation:status-pulse 2.4s ease-out infinite}@keyframes status-pulse{0%{box-shadow:0 0 0 0 var(--color-status-ring)}70%{box-shadow:0 0 0 .4rem transparent}to{box-shadow:0 0 0 0 transparent}}.entry-list{display:flex;flex-direction:column;gap:var(--space-3xs);margin-inline:calc(-1 * var(--space-s))}.entry{display:block;padding:var(--space-xs) var(--space-s);border-radius:var(--box-radius);transition:background-color var(--transition-fast)}.entry:hover{background-color:var(--color-hover)}.entry-title{display:block;color:var(--color-ink)}.entry-desc{display:block;color:var(--color-ink-muted)}.entry-meta{display:block;-webkit-margin-before:var(--space-3xs);margin-block-start:var(--space-3xs)}.entry-meta,.entry-note{font-size:var(--font-size-0);color:var(--color-ink-faint)}.site-header{padding-block:var(--space-l) 0}.site-header .site-name{font-family:var(--font-display);font-size:var(--font-size-2);letter-spacing:var(--tracking-display)}.site-header .site-name:hover{opacity:.6}.site-footer{padding-block:var(--space-l);font-size:var(--font-size-0)}.site-footer,.site-footer p{color:var(--color-ink-faint)}.site-footer a{color:var(--color-ink-muted)}.site-footer a:hover{color:var(--color-ink)}.back-link{font-size:var(--font-size-0);color:var(--color-ink-faint)}.back-link:hover{color:var(--color-ink)}.box h3,.project-section h2,.project-section h3,.project-title-block h1{font-family:var(--font-heading-project);font-weight:500;text-transform:none;letter-spacing:normal}.project-title-block h1{font-size:var(--font-size-5)}.project-title-block:after{content:"";display:block;inline-size:var(--rule-width);block-size:1px;background-color:var(--color-rule);border-radius:1px;-webkit-margin-before:var(--space-m);margin-block-start:var(--space-m)}.tag{font-size:var(--font-size-0);color:var(--color-ink-faint)}.tag+.tag:before{content:"·";-webkit-margin-end:var(--space-2xs);margin-inline-end:var(--space-2xs)}.project-section h3{font-size:var(--font-size-3)}.cover .column{max-inline-size:var(--measure)}.figure-caption{font-size:var(--font-size-0);color:var(--color-ink-faint)}.box{background-color:var(--color-surface)}.box h3{font-size:var(--font-size-1);font-family:var(--font-body);font-weight:var(--font-weight-medium)}.pull-stat{font-family:var(--font-heading-project);font-weight:500;font-size:var(--font-size-4);line-height:var(--line-height-tight);color:var(--color-ink)}.prev-next{-webkit-border-before:1px solid var(--color-rule);border-block-start:1px solid var(--color-rule);-webkit-padding-before:var(--space-m);padding-block-start:var(--space-m)}.prev-next a{display:block;padding:var(--space-xs) var(--space-s);margin-inline:calc(-1 * var(--space-s));border-radius:var(--box-radius);transition:background-color var(--transition-fast)}.prev-next a:hover{background-color:var(--color-hover)}.prev-next .label{display:block;font-size:var(--font-size-0);color:var(--color-ink-faint)}.prev-next .title{display:block;color:var(--color-ink)}.gate-overlay{display:none}.is-gated{overflow:hidden}.is-gated .cover{display:none}.is-gated .gate-overlay{display:grid;place-items:center;position:fixed;inset:0;z-index:50;background-color:var(--color-bg);padding:var(--content-padding-inline);overflow:auto}.gate-card{inline-size:100%;max-inline-size:22rem}.gate-card>*+*{-webkit-margin-before:var(--space-m);margin-block-start:var(--space-m)}.gate-card>h1{font-size:var(--font-size-4)}.gate-card>p{color:var(--color-ink-muted)}.gate-card form{display:flex;flex-direction:column;gap:var(--space-s)}.gate-card input{inline-size:100%;padding:var(--space-xs) var(--space-s);background-color:var(--color-surface);border:1px solid var(--color-rule);border-radius:var(--box-radius);transition:border-color var(--transition-fast)}.gate-card input:hover{border-color:var(--color-ink-faint)}.gate-card input:focus-visible{outline:none;border-color:var(--color-ink)}.gate-card button{align-self:flex-start;padding:var(--space-2xs) var(--space-m);background-color:var(--color-ink);color:var(--color-bg);border:1px solid var(--color-ink);border-radius:var(--box-radius);cursor:pointer;transition:opacity var(--transition-fast)}.gate-card button:hover{opacity:.85}.gate-error{color:var(--color-error)}.gate-back,.gate-error{font-size:var(--font-size-0)}.gate-back{display:inline-block;color:var(--color-ink-faint)}.gate-back:hover{color:var(--color-ink)}.page--wide{max-inline-size:72rem}.wheel{--radius:1800px;--active-y:200px;--stage-height:430px;--card-width:320px;display:flex;flex-direction:column;gap:var(--space-l);-webkit-margin-before:var(--space-m);margin-block-start:var(--space-m)}.wheel-stage{position:relative;block-size:var(--stage-height);overflow:hidden;touch-action:pan-y;cursor:-webkit-grab;cursor:grab;-webkit-mask-image:linear-gradient(90deg,transparent,#000 14%,#000 86%,transparent);mask-image:linear-gradient(90deg,transparent,#000 14%,#000 86%,transparent)}.wheel-stage:active{cursor:-webkit-grabbing;cursor:grabbing}.wheel-stage:focus-visible{outline:var(--focus-ring-width) solid var(--color-focus);outline-offset:-2px;border-radius:var(--box-radius)}.wheel-track{list-style:none;margin:0;padding:0;inset-block-start:calc(var(--active-y) + var(--radius));inset-inline-start:50%;inline-size:0;block-size:0}.wheel-card,.wheel-track{position:absolute;transform-origin:0 0}.wheel-card{inset-block-start:0;inset-inline-start:0;inline-size:var(--card-width);transform:rotate(var(--a)) translateY(calc(-1 * var(--radius))) translate(-50%,-50%);transition:transform .6s cubic-bezier(.22,.61,.36,1),opacity .4s ease}.experiment-card{display:flex;flex-direction:column;block-size:100%;background-color:var(--color-surface);border:var(--box-border-width) solid var(--box-border-color);border-radius:var(--box-radius);overflow:hidden;box-shadow:0 1px 2px rgb(0 0 0/.04),0 12px 32px rgb(0 0 0/.08);opacity:.5;transition:opacity var(--transition-fast),box-shadow var(--transition-fast),transform var(--transition-fast)}.wheel-card.is-active .experiment-card{opacity:1}.experiment-card:focus-visible,.experiment-card:hover{opacity:1}.experiment-card__media{display:block;aspect-ratio:var(--frame-ratio);background-color:var(--color-hover);overflow:hidden}.experiment-card__media img{inline-size:100%;block-size:100%;object-fit:cover}.experiment-card__body{display:flex;flex-direction:column;gap:var(--space-2xs);padding:var(--space-m)}.experiment-card__title{font-family:var(--font-display);font-size:var(--font-size-3);line-height:var(--line-height-tight);letter-spacing:var(--tracking-display);color:var(--color-ink)}.experiment-card__desc{font-size:var(--font-size-1);line-height:var(--line-height-snug);color:var(--color-ink-muted);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.experiment-card__cta{-webkit-margin-before:var(--space-2xs);margin-block-start:var(--space-2xs);font-size:var(--font-size-0);font-weight:var(--font-weight-medium);color:var(--color-ink)}.experiment-card:hover .experiment-card__cta{text-decoration:underline;text-underline-offset:.2em}.wheel-controls{display:flex;align-items:center;justify-content:center;gap:var(--space-m)}.wheel-arrow{inline-size:2.75rem;block-size:2.75rem;display:grid;place-items:center;font-size:var(--font-size-2);background-color:var(--color-surface);color:var(--color-ink);border:var(--box-border-width) solid var(--box-border-color);border-radius:50%;cursor:pointer;transition:background-color var(--transition-fast),opacity var(--transition-fast)}.wheel-arrow:hover:not(:disabled){background-color:var(--color-hover)}.wheel-arrow:disabled{opacity:.35;cursor:default}.wheel-dots{display:flex;align-items:center;gap:var(--space-2xs)}.wheel-dot{inline-size:.5rem;block-size:.5rem;padding:0;border:none;border-radius:50%;background-color:var(--color-rule);cursor:pointer;transition:background-color var(--transition-fast),transform var(--transition-fast)}.wheel-dot:hover{background-color:var(--color-ink-faint)}.wheel-dot.is-active{background-color:var(--color-ink);transform:scale(1.35)}@media (max-width:48rem){.wheel{--radius:1200px;--active-y:175px;--stage-height:400px;--card-width:min(80vw,300px)}}.slider{--card-width:340px;--card-gap:var(--space-l);display:flex;flex-direction:column;gap:var(--space-l);-webkit-margin-before:var(--space-m);margin-block-start:var(--space-m)}.slider-viewport{position:relative;overflow:hidden;padding-block:var(--space-l);-webkit-mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent);mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent)}.slider-track{list-style:none;margin:0;padding:0;display:flex;align-items:stretch;gap:var(--card-gap);inline-size:100%;cursor:-webkit-grab;cursor:grab}.slider-track:active{cursor:-webkit-grabbing;cursor:grabbing}.slider-card{flex:0 0 auto;inline-size:var(--card-width)}.slider-card .experiment-card{block-size:100%;transform:scale(.9);transition:transform .4s cubic-bezier(.22,.61,.36,1),opacity var(--transition-fast),box-shadow var(--transition-fast)}.slider-card.is-active .experiment-card{transform:scale(1);opacity:1}@media (max-width:48rem){.slider{--card-width:min(78vw,300px);--card-gap:var(--space-m)}}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}