:root{--color-bg: #101010;--color-text: #fff;--color-accent: #FFF995;--color-text-muted: rgb(145, 145, 145);--color-slide-teal: #0C3A41;--color-slide-light: #e7e7e7;--color-slide-rust: #70270C;--font-family: "Rams", sans-serif;--font-size-lg: clamp(1.5rem, .3rem + 2vmax, 2.5rem);--line-height-lg: 1;--letter-spacing-lg: -.02em;--font-size-md: clamp(1.375rem, .4rem + 1.4vmax, 1.8rem);--line-height-md: 1.1;--letter-spacing-md: -.01em;--font-size-sm: clamp(1rem, .3rem + 1vmax, 1.25rem);--line-height-sm: 1.25;--letter-spacing-sm: 0em;--font-weight: 400;--space-xs: .1em;--space-sm: .75em;--space-md: 1.2em;--space-lg: 4em;--space-section: clamp(4rem, 20vmin, 12rem);--space-page: clamp(1rem, 1.5vw + .65rem, 2.5rem);--radius-sm: 2px;--radius-md: 4px;--transition-color: color .15s ease}@font-face{font-family:Rams;src:url(/fonts/Rams-569.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@media(pointer:fine){body{cursor:default}a[href],button,[role=link],[role=button]{cursor:pointer}input,textarea,[contenteditable=true]{cursor:text}#cursor{position:fixed;top:0;left:0;pointer-events:none;opacity:0;transition:opacity .15s linear;will-change:transform,opacity;z-index:9999}#cursor .cursor-dot{--size: var(--cursor-size, 14px);display:block;width:var(--size);height:var(--size);margin:calc(var(--size) / -2) 0 0 calc(var(--size) / -2);border-radius:50%;background:var(--color-accent);transform:translateZ(0);transition:transform .2s ease-out,background-color .2s linear,box-shadow .2s linear;will-change:transform}#cursor[data-style=ring] .cursor-dot{background:transparent;box-shadow:inset 0 0 0 1.5px var(--color-accent)}#cursor[data-style=blend]{mix-blend-mode:difference}#cursor[data-style=blend] .cursor-dot{background:#fff}#cursor[data-style=none]{display:none}#cursor.is-visible{opacity:1}#cursor.is-hovering .cursor-dot{transform:translateZ(0) scale(var(--cursor-hover, 1))}#cursor.is-disabled .cursor-dot{background:var(--color-text-muted)}#cursor[data-style=ring].is-disabled .cursor-dot{background:transparent;box-shadow:inset 0 0 0 1.5px var(--color-text-muted)}#cursor.is-down .cursor-dot{transform:translateZ(0) scale(.8)}#cursor.is-down.is-hovering .cursor-dot{transform:translateZ(0) scale(calc(var(--cursor-hover, 1) * .8))}#img-viewer-backdrop,#img-viewer,#img-viewer *{cursor:default}#img-viewer-stage{cursor:grab}#img-viewer-stage:active{cursor:grabbing}@media(prefers-reduced-motion:reduce){#cursor{transition:opacity .1s linear}#cursor .cursor-dot{transition:background-color .1s linear,box-shadow .1s linear}}}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;background:var(--color-bg)}html,body{height:100%}body{display:flex;flex-direction:column;padding:var(--space-page);background:transparent;isolation:isolate;color:var(--color-text);font-family:var(--font-family);font-size:var(--font-size-lg);font-weight:var(--font-weight);line-height:var(--line-height-lg);letter-spacing:var(--letter-spacing-lg);-webkit-font-smoothing:antialiased}.container{max-width:600px;min-width:33.33vw;padding-bottom:10vh}.bio{max-width:min(600px,30ch);min-width:0}.orange{color:var(--color-accent)}.muted{color:var(--color-text-muted)}.tight{margin:unset!important}.text-lg{font-size:var(--font-size-lg);line-height:var(--line-height-lg);letter-spacing:var(--letter-spacing-lg)}.text-md{font-size:var(--font-size-md);line-height:var(--line-height-md);letter-spacing:var(--letter-spacing-md)}.text-sm{font-size:var(--font-size-sm);line-height:var(--line-height-sm);letter-spacing:var(--letter-spacing-sm)}.spacer-lg{height:var(--space-lg)}.heading{font-size:var(--font-size-md);line-height:var(--line-height-md);letter-spacing:var(--letter-spacing-md);font-weight:inherit;color:var(--color-accent)}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}::selection{background:var(--color-accent);color:var(--color-bg)}body.loading .bio,body.loading .nav{visibility:hidden}.bio p+p{margin-top:var(--space-sm)}.line-mask{display:block;overflow:hidden;margin-bottom:-.15em}.line-inner{display:block;padding-bottom:.15em}.bio .line-inner{white-space:nowrap}@keyframes line-fade{0%{opacity:0}to{opacity:1}}@media(hover:none)and (pointer:coarse){.css-fade .case-study .line-mask:not(.case-carousel .line-mask){animation:line-fade linear both;animation-timeline:view(block 0 calc(clamp(24px,calc(24px + 30vw - 30vh),15vh) - 12px));animation-timeline:view(block 0 calc(100% - 100lvh + clamp(24px,calc(24px + 30lvw - 30lvh),15lvh) - 12px));animation-range:cover 0px cover clamp(96px,calc(96px + 30vw - 30vh),200px);animation-range:cover 0px cover clamp(96px,calc(96px + 30lvw - 30lvh),200px)}}.works,.apps,.contact,.gate,.case-study{display:none}.works .line-mask+.line-mask,.apps .line-mask+.line-mask,.contact .line-mask+.line-mask{margin-top:var(--space-xs)}.works-item{position:relative;display:grid;grid-template-columns:auto 1fr}.works-item .muted{text-align:right}.works-item>*{transition:var(--transition-color)}.works-item a{color:var(--color-text);text-decoration:none}.works-item a:after{content:"";position:absolute;inset:0}.contact .works-item a:hover{color:var(--color-accent)}@media(hover:hover){.works-item.is-hovered>*{color:var(--color-accent)}}:is(.works,.apps) .works-item{grid-template-columns:auto 1fr auto}:is(.works,.apps) .works-item>:first-child{grid-column:1}:is(.works,.apps) .works-item:before{content:"";grid-column:2;grid-row:1;align-self:end;margin:0 .4em .2em;border-bottom:1px dashed var(--color-text-muted);opacity:calc(var(--leader-opacity, .25) * var(--leader-fade, 1));-webkit-mask-image:linear-gradient(to right,transparent,#000 1em,#000 calc(100% - 1em),transparent);mask-image:linear-gradient(to right,transparent,#000 1em,#000 calc(100% - 1em),transparent)}:is(.works,.apps) .works-item>.muted{grid-column:3}@media(max-width:600px){body{padding-bottom:8rem}}.site-updated{position:fixed;right:max(var(--space-page),env(safe-area-inset-right));bottom:max(var(--space-page),env(safe-area-inset-bottom));z-index:2;color:var(--color-text-muted);font-size:.8125rem;line-height:1.25;letter-spacing:0;white-space:nowrap}.site-updated-label{appearance:none;border:0;background:none;color:inherit;font:inherit;letter-spacing:inherit;text-align:right}.site-updated-label:focus-visible{outline:1px solid var(--color-text-muted);outline-offset:4px}.nav{position:fixed;bottom:var(--space-page);left:var(--space-page);padding-top:var(--space-md);z-index:2}.nav .line-mask{display:block;overflow:hidden}.nav .line-mask+.line-mask{margin-top:var(--space-xs)}.nav a{display:block;text-decoration:none;color:var(--color-text);transition:var(--transition-color)}.nav a:hover,.nav a.active{color:var(--color-accent)}.nav .back-mask{display:none}.nav .back-mask.visible{display:block}.nav a[data-back]{font-size:var(--font-size-md)}@media not (pointer:fine){.works-item[data-to]{cursor:default}}.works-item[role=link]:focus-visible{outline:2px solid var(--color-accent);outline-offset:4px}.gate .heading{margin-bottom:var(--space-sm)}.gate a,.nightshift a{color:inherit;text-underline-offset:.15em}.gate a:hover,.nightshift a:hover{color:var(--color-accent)}.gate-form{display:flex;align-items:center;gap:var(--space-sm);flex-wrap:wrap;margin-top:var(--space-md)}.gate-input{font-family:inherit;font-weight:inherit;color:var(--color-text);background:none;border:0;border-bottom:1px solid var(--color-text-muted);border-radius:0;padding:0 0 .2em;min-width:0;flex:1 1 12ch;transition:border-color .15s ease}.gate-input::placeholder{color:var(--color-text-muted)}.gate-input:focus{outline:none;border-bottom-color:var(--color-accent)}.gate-submit{font-family:inherit;font-weight:inherit;color:var(--color-accent);background:none;border:0;padding:0 0 .2em;transition:var(--transition-color)}.gate-submit:focus-visible,.gate-input:focus-visible{outline:2px solid var(--color-accent);outline-offset:4px}.gate-error{flex:1 0 100%;margin:0;min-height:1.4em}.gate-error.is-error{color:var(--color-accent)}.carousel-slide.slide-bg-teal{background:var(--color-slide-teal)}.carousel-slide.slide-bg-light{background:var(--color-slide-light)}.carousel-slide.slide-bg-rust{background:var(--color-slide-rust)}.case-section{padding-bottom:var(--space-section)}.case-section:last-child{min-height:unset}.case-section p+p,.case-section .line-mask+p,.case-section .case-carousel-wrap+p{margin-top:var(--space-sm)}.nightshift .case-section p+.line-mask{margin-top:var(--space-sm)}.case-carousel-wrap{width:calc(100vw - 2 * var(--space-page))}.case-carousel{display:flex;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;scrollbar-width:none;gap:var(--space-page);margin-top:var(--space-md)}.case-carousel::-webkit-scrollbar{display:none}.carousel-item{flex:0 0 min(calc(100% - 2rem),clamp(20rem,30%,28rem));min-width:0;scroll-snap-align:start}.carousel-slide{aspect-ratio:1 / 1;border-radius:var(--radius-md);background:#222;display:flex;align-items:center;justify-content:center;padding:5%;overflow:hidden;position:relative;cursor:inherit}.carousel-slide img,.carousel-slide video{width:100%;object-fit:contain;border-radius:var(--radius-sm);box-shadow:0 4px 12px #00000040;transition:opacity .32s ease-out}.carousel-slide :is(img,video)[data-media-loading]{opacity:0}@media(prefers-reduced-motion:reduce){.carousel-slide img,.carousel-slide video{transition:none}}.carousel-slide img.fill{width:100%;height:100%;object-fit:cover;border-radius:0;box-shadow:none;position:absolute;inset:0}.carousel-caption{margin-top:var(--space-page);font-size:var(--font-size-sm);line-height:var(--line-height-sm);letter-spacing:var(--letter-spacing-sm)}.case-meta{margin-top:var(--space-md);display:grid;gap:var(--space-md)}.case-meta-row{display:flex;flex-direction:column;gap:var(--space-xs)}.case-img{margin-top:var(--space-lg);background:#ffffff0a;border:1px solid rgba(255,255,255,.08);border-radius:var(--radius-md);aspect-ratio:16 / 9}.case-img+p{margin-top:var(--space-sm)}.case-caption{color:var(--color-text-muted)}#img-viewer-backdrop{display:none;position:fixed;inset:0;background:#000000a6;z-index:499}#img-viewer{display:none;position:fixed;background:#101010;border-radius:var(--radius-md);z-index:500;overflow:hidden}#img-viewer-stage{width:100%;height:100%;display:flex;align-items:center;justify-content:center;overflow:hidden}#img-viewer.is-video #img-viewer-stage,#img-viewer.is-video #img-viewer-stage:active{cursor:default}#img-viewer-img{width:90%;height:90%;object-fit:contain;-webkit-user-select:none;user-select:none;-webkit-user-drag:none;pointer-events:none;border-radius:var(--radius-sm)}#img-viewer-video{max-width:90%;max-height:90%;object-fit:contain;border-radius:var(--radius-sm)}#img-viewer-close,.carousel-expand{position:absolute;width:32px;height:32px;background:#000000a6;border:none;border-radius:var(--radius-md);color:#ffffffb3;display:flex;align-items:center;justify-content:center;z-index:10;transition:color .15s ease,background .15s ease,opacity .15s ease}#img-viewer-close{top:14px;right:14px}#img-viewer-close:hover{color:var(--color-accent);background:#0009}.carousel-expand{bottom:10px;right:10px;opacity:0}.carousel-slide:hover .carousel-expand,.carousel-expand:focus-visible{opacity:1;color:var(--color-accent);background:#0009}.carousel-expand:focus-visible{outline:2px solid var(--color-accent);outline-offset:2px}@media(max-width:600px){.carousel-expand{display:none}}.finn-chart-figure{margin:var(--space-md) 0 0}.finn-chart-plot{position:relative;aspect-ratio:2 / 1}.line-mask:has(>.line-inner>.finn-chart-plot){margin:-24px;padding:24px}.line-inner:has(>.finn-chart-plot){padding-bottom:0}.finn-chart-plot svg{display:block;width:100%;height:100%;overflow:visible}.finn-chart polyline{fill:none;stroke-width:2;stroke-linejoin:round;stroke-linecap:round;vector-effect:non-scaling-stroke}.finn-chart-finn{stroke:var(--color-accent)}.finn-chart-spy{stroke:var(--color-text-muted)}.finn-chart-zero{stroke:var(--color-text-muted);stroke-width:1;stroke-dasharray:4 4;opacity:.4;vector-effect:non-scaling-stroke}.finn-chart-dot{--dot: var(--color-text-muted);position:absolute;width:8px;height:8px;margin:-4px 0 0 -4px;border-radius:50%;background:var(--dot)}.finn-chart-dot[data-series=finn]{--dot: var(--color-accent)}.finn-chart-dot:after{content:"";position:absolute;inset:0;border-radius:50%;background:var(--dot);animation:finn-pulse 2s cubic-bezier(.2,.6,.35,1) infinite}@keyframes finn-pulse{0%{transform:scale(1);opacity:.6}to{transform:scale(3.5);opacity:0}}@media(prefers-reduced-motion:reduce){.finn-chart-dot:after{animation:none;opacity:0}}.finn-chart:not([data-state=ready]) :is(.finn-chart-dot,polyline,.finn-chart-zero){visibility:hidden}.finn-chart-axis,.finn-chart-legend{display:flex;flex-wrap:wrap;justify-content:space-between;gap:var(--space-xs) var(--space-md);font-size:var(--font-size-sm);line-height:var(--line-height-sm);letter-spacing:var(--letter-spacing-sm)}.finn-chart-axis{margin-top:var(--space-sm);border-top:1px solid rgb(255 255 255 / .12);padding-top:var(--space-sm)}.finn-chart-legend{justify-content:flex-start;margin-top:var(--space-md)}.finn-chart-legend-item{display:flex;align-items:baseline;gap:.35em;font-variant-numeric:tabular-nums}.finn-chart-key{align-self:center;flex:none;width:8px;height:8px;margin-right:.15em;border-radius:50%;background:var(--color-text-muted)}.finn-chart-key.finn{background:var(--color-accent)}.finn-chart:not([data-state=ready]) [data-chart-total]{visibility:hidden}.finn-chart-stats-title{margin-top:var(--space-lg)}.finn-chart-stats{margin-top:var(--space-md);font-size:var(--font-size-sm);line-height:var(--line-height-sm);letter-spacing:var(--letter-spacing-sm);font-variant-numeric:tabular-nums}.finn-chart-stats-row{display:grid;grid-template-columns:1fr 22% 22%;padding:.5em 0;border-bottom:1px solid rgb(255 255 255 / .12);text-align:right;color:var(--color-text-muted)}.finn-chart-stats-row>[role=rowheader]{text-align:left}.finn-chart-stats-row>[role=cell]:nth-child(2){color:var(--color-text)}.finn-chart:not([data-state=ready]) .finn-chart-stats [role=cell]{visibility:hidden}:is(.works,.apps) .works-item>:is(a,span),.nav .line-inner>a,.site-updated-label{padding:.2em .25em;margin:-.2em -.25em}.nav .line-inner,.site-updated .line-inner{display:flow-root}.site-updated-label{display:inline-block}html[data-text-motion="0"] :is(.works,.apps,.nav,.site-updated) .line-mask{overflow:visible}#scene{position:fixed;inset:0;width:100%;height:100%;pointer-events:none;visibility:hidden;z-index:3;mix-blend-mode:plus-lighter;--lens-x: 0px;--lens-y: 0px;--lens-radius: 0px;--lens-presence: 0}html.gpu-ready #scene{visibility:visible;-webkit-mask-image:linear-gradient(rgb(0 0 0 / var(--transition-blend)),rgb(0 0 0 / var(--transition-blend))),radial-gradient(circle var(--lens-radius) at var(--lens-x) var(--lens-y),rgb(0 0 0 / var(--lens-presence)) 0%,rgb(0 0 0 / calc(var(--lens-presence) * .896)) 20%,rgb(0 0 0 / calc(var(--lens-presence) * .648)) 40%,rgb(0 0 0 / calc(var(--lens-presence) * .352)) 60%,rgb(0 0 0 / calc(var(--lens-presence) * .104)) 80%,transparent 100%);mask-image:linear-gradient(rgb(0 0 0 / var(--transition-blend)),rgb(0 0 0 / var(--transition-blend))),radial-gradient(circle var(--lens-radius) at var(--lens-x) var(--lens-y),rgb(0 0 0 / var(--lens-presence)) 0%,rgb(0 0 0 / calc(var(--lens-presence) * .896)) 20%,rgb(0 0 0 / calc(var(--lens-presence) * .648)) 40%,rgb(0 0 0 / calc(var(--lens-presence) * .352)) 60%,rgb(0 0 0 / calc(var(--lens-presence) * .104)) 80%,transparent 100%);-webkit-mask-composite:source-over;mask-composite:add}html.gpu-ready.gpu-transition [data-gpu]:not([data-gpu-hover]){-webkit-mask-image:linear-gradient(rgb(0 0 0 / calc(1 - var(--transition-blend))),rgb(0 0 0 / calc(1 - var(--transition-blend))));mask-image:linear-gradient(rgb(0 0 0 / calc(1 - var(--transition-blend))),rgb(0 0 0 / calc(1 - var(--transition-blend))))}html.gpu-ready [data-gpu-hover]{-webkit-mask-image:linear-gradient(rgb(0 0 0 / calc(1 - var(--transition-blend))),rgb(0 0 0 / calc(1 - var(--transition-blend)))),radial-gradient(circle var(--lens-radius) at calc(var(--lens-x) - var(--text-left)) calc(var(--lens-y) - var(--text-top)),rgb(0 0 0 / calc(1 - var(--lens-presence))) 0%,rgb(0 0 0 / calc(1 - var(--lens-presence) * .896)) 20%,rgb(0 0 0 / calc(1 - var(--lens-presence) * .648)) 40%,rgb(0 0 0 / calc(1 - var(--lens-presence) * .352)) 60%,rgb(0 0 0 / calc(1 - var(--lens-presence) * .104)) 80%,black 100%);mask-image:linear-gradient(rgb(0 0 0 / calc(1 - var(--transition-blend))),rgb(0 0 0 / calc(1 - var(--transition-blend)))),radial-gradient(circle var(--lens-radius) at calc(var(--lens-x) - var(--text-left)) calc(var(--lens-y) - var(--text-top)),rgb(0 0 0 / calc(1 - var(--lens-presence))) 0%,rgb(0 0 0 / calc(1 - var(--lens-presence) * .896)) 20%,rgb(0 0 0 / calc(1 - var(--lens-presence) * .648)) 40%,rgb(0 0 0 / calc(1 - var(--lens-presence) * .352)) 60%,rgb(0 0 0 / calc(1 - var(--lens-presence) * .104)) 80%,black 100%);-webkit-mask-composite:source-in;mask-composite:intersect}html.gpu-ready .finn-chart-plot[data-gpu-hover]{-webkit-mask-image:none;mask-image:none}html.gpu-ready.gpu-transition .finn-chart-plot[data-gpu-hover]{-webkit-mask-image:linear-gradient(rgb(0 0 0 / calc(1 - var(--transition-blend))),rgb(0 0 0 / calc(1 - var(--transition-blend))));mask-image:linear-gradient(rgb(0 0 0 / calc(1 - var(--transition-blend))),rgb(0 0 0 / calc(1 - var(--transition-blend))))}.tuner{position:fixed;top:1rem;right:1rem;z-index:10000;width:17rem;max-height:calc(100vh - 2rem);overflow-y:auto;display:grid;gap:.6rem;padding:.8rem;border-radius:8px;background:#1c1c1cf0;box-shadow:0 8px 30px #0006;color:#ddd;font:12px/1.3 ui-monospace,Menlo,monospace;letter-spacing:0;cursor:default}.tuner[data-collapsed]>:not(.tuner-head){display:none}.tuner-head{display:flex;justify-content:space-between;align-items:center}.tuner-head strong{font-weight:600;color:#fff}.tuner-section{margin-top:.4rem;color:#fff;font-weight:600}.tuner-grid.four{grid-template-columns:repeat(4,1fr)}.tuner button{font:inherit;color:inherit;background:#ffffff14;border:1px solid rgb(255 255 255 / .12);border-radius:4px;padding:.3rem .5rem;cursor:pointer}.tuner button:hover{background:#ffffff24}.tuner button[aria-pressed=true]{background:var(--color-accent);border-color:var(--color-accent);color:#111}.tuner-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:.3rem}.tuner-row{display:grid;grid-template-columns:4.5rem 1fr 3rem;gap:.4rem;align-items:center}.tuner-row output{text-align:right;color:#aaa}.tuner-row input{width:100%;accent-color:var(--color-accent)}.tuner-note{color:#888}.tuner-actions{display:flex;gap:.4rem}.tuner-actions button{flex:1}
