@font-face{font-family:Outfit;src:url(./outfit-regular-D5nSJVYk.ttf) format("truetype");font-style:normal;font-weight:400;font-display:swap}@font-face{font-family:Outfit;src:url(./outfit-medium-Bi1G6hPu.ttf) format("truetype");font-style:normal;font-weight:500 700;font-display:swap}@font-face{font-family:Unbounded;src:url(./unbounded-800-CN2Hxyoo.woff2) format("woff2");font-style:normal;font-weight:800;font-display:swap}@font-face{font-family:"Instrument Serif";src:url(./instrument-serif-italic-C4j453oU.ttf) format("truetype");font-style:italic;font-weight:400;font-display:swap}@font-face{font-family:JetBrains Mono;src:url(./jetbrains-mono-regular-B6W8R_vR.ttf) format("truetype");font-style:normal;font-weight:400 600;font-display:swap}:root{color-scheme:dark;--bg:#000;--fg:#f6f1e6;--muted:#b7aa98;--faint:#827c70;--accent:#eb0000;--punch:#ff6a2b;--line:rgba(246,241,230,.16);--mono:"JetBrains Mono",monospace;--serif:"Instrument Serif",Georgia,serif;--gutter:clamp(24px,6.1vw,116px);--right-gutter:clamp(24px,1.46vw,28px);--profile-width:clamp(320px,18.9vw,360px);--profile-gap:clamp(40px,3.36vw,64px);--rail:calc(var(--profile-width) + var(--profile-gap));--ease:cubic-bezier(.22,1,.36,1);--grid:3px }*{box-sizing:border-box}html{scroll-padding-top:56px;scrollbar-color:#494740 #000;scrollbar-width:thin}html.lenis{scroll-behavior:auto}.github-panel-scroll.has-native-scroll-overflow,.ffm-enhanced .ffm-releases.has-native-scroll-overflow{overscroll-behavior-y:contain}body{margin:0;background:var(--bg);color:var(--fg);font-family:Outfit,Arial,sans-serif;font-size:18px;line-height:1.6;-webkit-font-smoothing:antialiased}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;z-index:-1;pointer-events:none;background-color:#000;background-image:linear-gradient(#000 1px,transparent 1px),linear-gradient(90deg,#000 1px,#121212 1px);background-size:var(--grid) var(--grid);background-position:left bottom;opacity:.7}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit;cursor:pointer;border:0;background:none}button:disabled{cursor:default}a{color:inherit;text-decoration:none}button,a,summary{touch-action:manipulation}a:focus-visible,button:focus-visible,summary:focus-visible{outline:1px solid var(--fg);outline-offset:6px}::selection{background:var(--punch);color:#000}img,video,canvas{display:block;max-width:100%}.decode-overlay{position:absolute;left:0;top:0;display:block;pointer-events:none;-webkit-user-select:none;user-select:none;visibility:visible}.decode-pending,.decode-pending *:not(.decode-overlay),.decode-active,.decode-active *:not(.decode-overlay){-webkit-text-fill-color:transparent;text-decoration-color:transparent;transition:none}.decode-pending *:not(.decode-overlay),.decode-active *:not(.decode-overlay){border-color:transparent}@keyframes decode-wipe-x{0%{clip-path:inset(0 100% 0 0);opacity:0}to{clip-path:inset(0 0 0 0);opacity:1}}.decode-pending.ffm-education{border-color:transparent;background:transparent}.decode-active.ffm-education{animation:decode-wipe-x 1.15s var(--ease) both}.decode-pending .brand-mark,.decode-pending .text-link:after,.decode-pending.location:before,.decode-pending.with-github:before,.decode-pending.with-discord:before,.decode-pending .with-github:before,.decode-pending .with-discord:before{clip-path:inset(0 100% 0 0);opacity:0}.decode-active .brand-mark,.decode-active .text-link:after,.decode-active.location:before,.decode-active.with-github:before,.decode-active.with-discord:before,.decode-active .with-github:before,.decode-active .with-discord:before{animation:decode-wipe-x 1.15s var(--ease) both}img{height:auto}h1,h2,h3,p{margin:0}h1,h2,h3{font-weight:400}em{font-family:var(--serif);font-weight:400;letter-spacing:-.025em}[hidden]{display:none!important}.mono{font-family:var(--mono);font-size:10px;line-height:1.6;letter-spacing:.045em}.muted{color:var(--muted)}.quiet-link{font-size:13px;color:var(--muted);transition:color .2s}.quiet-link:hover{color:var(--fg)}.text-link{font-size:14px;display:inline-flex;gap:25px;align-items:center;position:relative;padding-bottom:8px;width:fit-content;transition:color .2s}.text-link:after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:color-mix(in oklab,var(--punch) 42%,#5c5850);pointer-events:none;transform-origin:left center}.text-link:hover{color:var(--fg)}.text-link:hover:after{background:var(--punch)}.skip-link{position:fixed;z-index:150;left:16px;top:-80px;background:var(--fg);color:#000;padding:10px 20px}.skip-link:focus{top:12px}.site-shader{position:fixed;top:0;right:0;bottom:0;left:0;z-index:-1;width:100%;height:100%;pointer-events:none;opacity:0;mix-blend-mode:screen;transition:opacity 1.8s var(--ease)}.site-shader.is-on{opacity:.3}#site-shell{position:relative;z-index:1;opacity:1;transition:opacity .65s var(--ease)}#site-shell :is(.site-nav,.location,.hero-title em,.hero-bottom,.hero-end,.missing-copy,.missing-actions,.missing-code,.ffm-wordmark,.ffm-category,.ffm-metric dt,.ffm-metric:not(:first-child) dd,.ffm-data-note,.ffm-project-links,.ffm-tabs,.ffm-panel-intro,.ffm-note-body,.ffm-note-foot,.ffm-theme-switch,.ffm-releases-heading p,.ffm-releases-heading>a,.ffm-release-row,.ffm-showcase h4,.ffm-video-caption,.ffm-video-link,.ffm-theme figcaption>span:not(.ffm-theme-swatch),.section-index,.section-heading h2,.section-description,.lab-project-copy,.lab-project-summary,.lab-build-notes,.lab-studies-heading,.lab-entry-head,.lab-entry-foot,.preview-action,.study-caption,.about-content,.working-with,.contact-intro,.contact-email-row,.copy-status,.site-footer){mix-blend-mode:difference}.with-github,.with-discord{display:inline-flex;align-items:center;gap:.42em}.with-github:before,.with-discord:before{content:"";width:.92em;height:.92em;flex:none;background:currentColor;-webkit-mask:var(--service-mark) center / contain no-repeat;mask:var(--service-mark) center / contain no-repeat}.with-github{--service-mark:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath fill='%23000' d='M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27s1.36.09 2 .27c1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.01 8.01 0 0 0 16 8c0-4.42-3.58-8-8-8z'/%3E%3C/svg%3E") }.with-discord{--service-mark:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='%23000' d='M20.317 4.369A19.791 19.791 0 0 0 16.558 3.1a.077.077 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 6.002 3.03.078.078 0 0 0 .084-.028 14.09 14.09 0 0 0 1.226-1.994.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.331c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z'/%3E%3C/svg%3E") }.lab-repo-link.with-github{gap:.42em}.lab-repo-link.with-github>span[aria-hidden]{margin-left:12px}.intro-pending #site-shell,.intro-active #site-shell{opacity:0;visibility:hidden}.intro-pending,.intro-active{overflow:hidden}.intro-leaving #site-shell{opacity:1;visibility:visible;transition-delay:.12s}.intro-leaving{overflow:hidden}.ascii-hero{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;background:#000;overflow:hidden;height:100dvh;opacity:1;transition:opacity .65s var(--ease);touch-action:none}.ascii-hero #gl{width:100%;height:100%;cursor:crosshair;touch-action:none}.intro-leaving .ascii-hero{opacity:0;pointer-events:none}.intro-bottom{position:absolute;bottom:38px;left:0;right:0;display:flex;flex-direction:column;align-items:center;gap:10px}.ascii-enter{font:13px var(--mono);border-bottom:1px solid #77746c;padding:5px 2px;min-width:65px}.ascii-enter-label{display:inline-block}.ascii-enter-arrow{margin-left:16px}.intro-scroll{display:block;font:10px var(--mono);color:#89867f}.intro-scroll.is-waiting{visibility:hidden}.site-header{height:52px;position:fixed;top:0;left:0;right:0;z-index:20;padding:12px var(--right-gutter) 10px;max-width:1920px;margin:0 auto;display:flex;align-items:center;justify-content:space-between;background:transparent;pointer-events:none;transition:transform .35s var(--ease),opacity .25s var(--ease)}.site-header a,.site-header button{pointer-events:auto}body.is-scrolled .site-header{transform:translateY(-100%);opacity:0;pointer-events:none}.brand-lockup{display:flex;align-items:center;gap:0;min-width:0}.brand{display:inline-flex;align-items:center;font:12px var(--mono);letter-spacing:-.03em;gap:10px}.brand-mark{height:22px;width:22px;background:url(/brand-a.png) center / contain no-repeat;flex:none;transform-origin:left center}.brand-alias{color:var(--faint);margin-left:-5px}.location{display:inline-flex;align-items:center;position:relative;color:var(--muted);letter-spacing:.1em;line-height:1;white-space:nowrap;padding-left:14px;margin-left:14px}.location:before{content:"";position:absolute;left:0;top:0;bottom:0;width:1px;background:var(--line)}.site-nav{display:flex;gap:30px;align-items:center;font:11px var(--mono)}.site-nav a{padding:12px 0;color:var(--muted);position:relative}.site-nav a:hover,.site-nav a[aria-current]{color:var(--fg)}.site-nav a[aria-current]:before{content:"";position:absolute;left:-10px;top:50%;width:3px;height:3px;background:var(--accent)}.page-content{max-width:1920px;margin:0 auto;padding:0 calc(var(--rail) + var(--right-gutter)) 0 var(--gutter)}.section{position:relative;padding:140px 0 128px;scroll-margin-top:20px;border-bottom:1px solid color-mix(in oklab,var(--fg) 48%,transparent)}.section-heading{position:relative;margin-bottom:42px}.section-index{color:var(--muted);display:block;margin-bottom:27px;width:fit-content;letter-spacing:.08em}.section-heading h2{font-size:clamp(40px,4.4vw,64px);line-height:1.08;letter-spacing:-.045em;width:fit-content}.section-description{font-size:17px;max-width:44ch;margin-top:-20px;margin-bottom:38px}.hero{padding-top:88px;padding-bottom:0;min-height:720px;display:flex;flex-direction:column}.missing-page .site-header,body.is-scrolled.missing-page .site-header{transform:none;opacity:1;pointer-events:auto}.missing-main{display:flex;flex-direction:column;justify-content:flex-end;min-height:100svh;padding-top:88px;padding-bottom:72px}.missing-code{color:var(--muted);letter-spacing:.12em;margin:0 0 18px}.missing-copy{max-width:38ch;margin-top:36px;font-size:17px;line-height:1.6}.missing-actions{display:flex;flex-direction:column;align-items:flex-start;gap:18px;margin-top:36px}.missing-path{color:var(--faint);letter-spacing:.04em;word-break:break-all}.hero-title{font-size:clamp(56px,5vw,96px);line-height:1.02;letter-spacing:-.055em;width:fit-content;outline:none;margin-top:36px}.hero-punch{color:var(--punch);font-weight:500}.hero-title em{color:var(--fg);letter-spacing:-.035em}.hero-bottom{display:flex;justify-content:space-between;align-items:flex-end;gap:32px;margin-top:44px}.hero-copy{font-size:17px;line-height:1.6}.hero-note{font-size:14px;margin-top:8px}.hero-actions{display:flex;flex-direction:column;gap:13px;align-items:flex-start;flex:none;padding-bottom:2px}.hero-actions .text-link{font-size:19px;line-height:1.2;letter-spacing:-.02em;gap:16px;min-height:44px;padding-bottom:13px}.hero-actions .text-link:after{height:2px;background:var(--punch)}.hero-actions .quiet-link{font-size:13px}.hero-actions .quiet-link:hover{color:var(--punch)}.hero-end{margin-top:auto;padding:52px 0 22px;display:flex;justify-content:space-between;gap:20px;color:var(--faint);font-size:9px}.inline-horse{display:none}.horse-rail{height:calc(var(--horse-draw) * var(--horse-height-ratio));width:calc(var(--horse-draw) * .8);flex:none;align-self:center;position:relative;z-index:0;overflow:hidden;isolation:isolate;pointer-events:none;opacity:0;transition:opacity .5s ease .45s,height .35s var(--ease),width .35s var(--ease)}.site-visible .horse-rail{opacity:1}#horse-canvas{display:block;width:100%;height:100%}.project-title-row{display:flex;justify-content:space-between;align-items:center;gap:24px;margin-bottom:24px}.project-title-row h3{font-size:26px;letter-spacing:-.025em}.project-category{color:var(--muted);white-space:nowrap}.project-preview{position:relative;background:#0b0a0e;border:1px solid #25232a;overflow:hidden}.preview-toolbar{display:flex;justify-content:space-between;gap:20px;padding:14px 18px;color:#929097;font-size:8px;border-bottom:1px solid #25232a}.tiny-dot{display:inline-block;width:4px;height:4px;border-radius:50%;background:#858081;vertical-align:middle;margin-right:6px}.project-preview>img{width:100%;aspect-ratio:8/5;object-fit:contain;opacity:.87}.preview-caption{display:block;padding:13px 18px;border-top:1px solid #25232a;font-size:9px;color:#a19da5}.project-detail-grid{display:grid;grid-template-columns:1.05fr 1fr;gap:55px;margin-top:34px;font-size:15px}.project-lead{font-size:23px;line-height:1.35;letter-spacing:-.02em;margin-bottom:18px}.project-lead em{font-size:26px}.project-facts{display:flex;flex-direction:column;gap:18px;padding-top:4px}.project-facts p{font-size:14px;margin-top:4px;color:var(--muted)}.fact-label{color:var(--faint);font-size:9px}.project-links{display:flex;flex-wrap:wrap;align-items:center;gap:22px;margin-top:6px}.project-links a{font-size:12px}.demo-details{margin-top:36px;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.demo-details summary{cursor:pointer;list-style:none;display:flex;align-items:center;justify-content:space-between;gap:20px;padding:18px 0;font-size:13px}.demo-details summary::-webkit-details-marker{display:none}.demo-details summary .mono{font-size:9px;color:var(--muted)}.demo-details summary>span:last-child{display:flex;gap:20px}.demo-details[open] summary>span:last-child>span{transform:rotate(90deg)}.demo-content{padding-bottom:20px}.demo-content video{width:100%;height:auto;max-height:520px;background:#080808}.demo-content p{margin-top:12px;font-size:9px}.work-section{--ffm-stage-background:#0b0b0a}.ffm-heading{margin-bottom:32px}.ffm-wordmark{margin:0;font-size:clamp(30px,3.7vw,66px);font-weight:500;line-height:1.15;letter-spacing:-.04em}.ffm-wordmark .brand-text{position:relative;display:inline-block;overflow:visible;white-space:nowrap;vertical-align:middle}.ffm-wordmark .brand-text-ghost{visibility:hidden;white-space:nowrap;pointer-events:none}.ffm-wordmark .brand-text-anim{position:absolute;top:0;right:0;bottom:0;left:0;display:inline-flex;align-items:baseline;white-space:nowrap}.ffm-wordmark .ch{display:inline-block;max-width:1.6em;opacity:1;transform:scaleX(1);transform-origin:left center;transition:max-width .55s cubic-bezier(.7,0,.3,1),opacity .4s cubic-bezier(.7,0,.3,1),transform .55s cubic-bezier(.7,0,.3,1)}.ffm-wordmark .ch-space{max-width:.4em}.ffm-wordmark [data-state=A] .ch:not([data-keep*=A]),.ffm-wordmark [data-state=B] .ch:not([data-keep*=B]),.ffm-wordmark [data-state=C] .ch:not([data-keep*=C]),.ffm-wordmark [data-state=D] .ch:not([data-keep*=D]){max-width:0;opacity:0;transform:scaleX(0)}.ffm-category-row{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin-top:22px}.ffm-product-mark{width:28px;height:28px;border-radius:5px;flex:none}.ffm-category{color:var(--muted);font-size:12px;letter-spacing:.06em}.ffm-education{border:1px solid #6b4939;border-radius:999px;color:#efa986;padding:3px 12px 4px;font-size:13px;line-height:1.4;background:#21160f;margin-left:3px}.ffm-metrics{display:grid;grid-template-columns:.8fr .8fr .8fr 1.3fr;gap:22px;margin:0;padding:24px 0 20px;border-top:1px solid var(--line)}.ffm-metric{display:flex;flex-direction:column;gap:10px;min-width:0}.ffm-metric dt{color:var(--muted);font:10px/1.4 var(--mono)}.ffm-metric dd{margin:0;font:clamp(23px,2.3vw,36px)/1.2 var(--mono);letter-spacing:-.06em;color:var(--fg)}.ffm-metric:first-child dd{color:var(--punch)}.ffm-data-note{margin:0;color:var(--faint);font:10px/1.7 var(--mono);max-width:75ch}.ffm-data-note a{text-decoration:underline;text-underline-offset:3px}.ffm-project-links{display:flex;align-items:center;gap:28px;margin:24px 0 36px}.ffm-project-links .text-link,.ffm-project-links .quiet-link{font-size:17px}[data-odometer]{position:relative;display:inline-block}.ffm-odometer-digits{display:inline-flex;align-items:flex-end;font-variant-numeric:tabular-nums;white-space:nowrap}.ffm-odometer-digit{display:block;overflow:hidden;width:1ch;height:1.2em}.ffm-odometer-reel{display:flex;flex-direction:column;will-change:transform}.ffm-odometer-reel>span{display:block;height:1.2em;line-height:1.2;text-align:center}.ffm-odometer-static{display:block;line-height:1.2}.ffm-tabs{display:flex;gap:32px;align-items:stretch;border-bottom:1px solid var(--line)}.ffm-tabs[hidden],.ffm-panel[hidden],.ffm-theme[hidden]{display:none}.ffm-tabs button{position:relative;padding:15px 0 17px;color:var(--muted);font:13px/1.4 var(--mono);white-space:nowrap;min-height:48px}.ffm-tabs button:after{position:absolute;bottom:-1px;left:0;right:0;content:"";height:2px;background:var(--punch);transform:scaleX(0);transform-origin:left;transition:transform .25s var(--ease)}.ffm-tabs button[aria-selected=true]{color:var(--fg)}.ffm-tabs button[aria-selected=true]:after{transform:scaleX(1)}.ffm-tabs button:hover{color:var(--fg)}.ffm-tabs button:focus-visible{outline-offset:4px}.ffm-stage{position:relative;overflow:hidden;margin-top:22px}.ffm-panel{outline-offset:-2px;padding:0 0 8px}.ffm-panel+.ffm-panel{margin-top:36px;border-top:1px solid var(--line);padding-top:24px}.ffm-enhanced .ffm-panel{margin-top:0;border:0;padding-top:0}.ffm-panel-intro{display:flex;justify-content:space-between;align-items:baseline;gap:18px;margin-bottom:22px;font-size:13px}.ffm-panel-intro h3{font:14px/1.6 var(--mono);margin:0}.ffm-panel-intro p{margin:0}.ffm-theme-switch{display:none;margin-left:auto;color:var(--muted);font:13px/1.4 var(--mono);min-height:44px;padding:0}.ffm-enhanced .ffm-theme-switch{display:inline-flex;align-items:center}.ffm-theme-switch:hover,.ffm-theme-switch:focus-visible{color:var(--punch)}.ffm-enhanced .ffm-panel-intro h3{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}.ffm-theme-grid{display:grid;grid-template-columns:1fr 1fr;gap:25px 20px}.ffm-enhanced .ffm-theme-grid{grid-template-columns:minmax(0,1fr);max-width:min(100%,920px)}.ffm-theme{margin:0;min-width:0}.ffm-enhanced .ffm-theme{grid-area:1 / 1;opacity:0;filter:blur(14px);pointer-events:none;z-index:0;transition:opacity .52s var(--ease),filter .52s var(--ease)}.ffm-enhanced .ffm-theme.is-current{opacity:1;filter:none;pointer-events:auto;z-index:1}.ffm-theme img{width:100%;height:auto;aspect-ratio:1310 / 831;object-fit:cover;object-position:top center;background:#0a0a09;border:1px solid #34332e;border-radius:4px}.ffm-theme figcaption{display:flex;align-items:center;justify-content:space-between;padding:10px 1px 0;font:11px/1.6 var(--mono);color:var(--muted)}.ffm-theme-swatch{width:8px;height:8px;border-radius:50%;background:var(--theme-swatch)}.ffm-notes{min-height:470px}.ffm-note-body{max-width:650px;padding:30px 0 38px}.ffm-note-body p{font-size:17px;line-height:1.7;margin:0 0 20px}.ffm-note-body .ffm-note-lead{font-size:clamp(28px,3vw,43px);letter-spacing:-.025em;line-height:1.2;margin-bottom:28px}.ffm-note-lead em{color:var(--punch)}.ffm-note-body>p:not(.ffm-note-lead){max-width:57ch}.ffm-note-foot{border-top:1px solid var(--line);padding-top:17px;display:flex;justify-content:space-between;flex-wrap:wrap;gap:14px;color:var(--muted);font-size:10px}.ffm-note-foot a:hover{color:var(--fg)}.ffm-showcases .ffm-showcase-list{display:flex;flex-direction:column;gap:42px;max-width:min(100%,920px)}.ffm-showcase h4{margin:0 0 10px;font-size:clamp(22px,2.4vw,32px);letter-spacing:-.025em;line-height:1.2;font-weight:400}.ffm-showcase h4 em{color:var(--punch)}.ffm-showcase .ffm-video-caption{margin:0 0 16px;max-width:70ch}.ffm-showcase video{display:block;width:min(100%,560px);height:auto;object-fit:contain;background:#0a0a09;border:1px solid var(--line);border-radius:4px}.ffm-showcase[data-ffm-showcase=bind] video{aspect-ratio:1280 / 720}.ffm-showcase[data-ffm-showcase=version] video{aspect-ratio:1120 / 920;width:min(100%,496px)}.ffm-video-caption{font-size:13px;line-height:1.6;max-width:70ch;margin:17px 0 5px}.ffm-video-link{font-size:12px;padding:5px 0;display:inline-block;margin-top:10px}.ffm-releases-heading{display:flex;align-items:baseline;justify-content:space-between;gap:20px;margin-bottom:24px}.ffm-releases-heading h3{margin:0;font-size:24px;font-weight:400;letter-spacing:-.02em;line-height:1.35}.ffm-releases-heading p{margin:0;font-size:13px;color:var(--muted)}.ffm-releases-heading>a{font-size:12px;color:var(--muted);margin-left:auto}.ffm-releases-heading [data-odometer]{font:30px/1.35 var(--mono);letter-spacing:-.06em;color:var(--punch)}.ffm-release-list{list-style:none;padding:0;margin:0}.ffm-enhanced .ffm-releases{max-height:680px;overflow-y:auto;scrollbar-width:thin;padding-right:12px}.ffm-release-row{border-top:1px solid var(--line);padding:0}.ffm-release-row>summary{display:grid;grid-template-columns:minmax(120px,auto) 1fr auto;gap:12px 20px;align-items:center;padding:20px 0;cursor:pointer;list-style:none}.ffm-release-row>summary::-webkit-details-marker{display:none}.ffm-release-meta{display:flex;flex-direction:column;align-items:flex-start;gap:6px;min-width:0}.ffm-release-row h4{font:16px/1.4 var(--mono);margin:0}.ffm-release-row time{font:10px/1.6 var(--mono);color:var(--faint);white-space:nowrap}.ffm-release-summary-note{font-size:13px;color:var(--muted);line-height:1.5;min-width:0}.ffm-release-toggle{width:28px;height:28px;border:1px solid var(--line);border-radius:50%;display:inline-flex;align-items:center;justify-content:center;color:var(--muted);flex:none;position:relative}.ffm-release-toggle:before,.ffm-release-toggle:after{content:"";position:absolute;background:currentColor}.ffm-release-toggle:before{width:10px;height:1px}.ffm-release-toggle:after{width:1px;height:10px;transition:opacity .2s var(--ease),transform .2s var(--ease)}.ffm-release-row[open]>summary .ffm-release-toggle{color:var(--punch);border-color:#6b4939}.ffm-release-row[open]>summary .ffm-release-toggle:after{opacity:0;transform:scaleY(0)}.ffm-release-row>summary:hover .ffm-release-toggle{color:var(--fg)}.ffm-release-changelog{padding:0 0 22px}.ffm-release-group{margin:0 0 14px}.ffm-release-group:last-child{margin-bottom:0}.ffm-release-group-label{display:block;font:10px/1.4 var(--mono);color:var(--faint);letter-spacing:.06em;margin-bottom:8px}.ffm-release-changelog ul{margin:0;padding-left:16px;font-size:14px;line-height:1.7;color:var(--muted)}.ffm-release-changelog li::marker{color:#696255}.ffm-release-row a{font-size:12px;color:var(--muted);width:fit-content}.ffm-release-row a:hover{color:var(--punch)}.ffm-release-row h4 a{font:inherit;color:var(--fg)}.ffm-enhanced [data-ffm-panel=releases]:not([hidden]) .ffm-release-row{animation:ffm-release-in .45s var(--ease) both;animation-delay:calc(var(--release-order,0) * 65ms + .12s)}@keyframes ffm-release-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@media(max-width:720px){.ffm-wordmark{font-size:clamp(25px,6.7vw,45px);letter-spacing:-.045em}.ffm-heading{margin-bottom:25px}.ffm-category-row{gap:10px;margin-top:18px}.ffm-product-mark{width:24px;height:24px}.ffm-category{font-size:10px;letter-spacing:.015em}.ffm-education{font-size:11px;padding:3px 9px;margin:0}.ffm-metrics{gap:25px 20px;grid-template-columns:1fr 1fr;padding:23px 0 18px}.ffm-metric{gap:7px}.ffm-metric dd{font-size:27px}.ffm-data-note{font-size:9px}.ffm-project-links{margin:22px 0 25px}.ffm-tabs{gap:0;justify-content:space-between}.ffm-tabs button{font-size:11px;padding:14px 0 15px}.ffm-theme-switch{font-size:11px;min-height:44px}.ffm-stage{margin-top:20px}.ffm-panel-intro{font-size:12px;margin-bottom:20px}.ffm-theme-grid{grid-template-columns:1fr;gap:24px}.ffm-note-body{padding:16px 0 14px}.ffm-note-body p{font-size:15px}.ffm-note-body .ffm-note-lead{font-size:27px}.ffm-notes{min-height:0}.ffm-note-foot{font-size:9px}.ffm-releases-heading h3{font-size:20px}.ffm-releases-heading [data-odometer]{font-size:24px}.ffm-release-row>summary{grid-template-columns:1fr auto;gap:10px 14px;padding:18px 0}.ffm-release-meta{flex-direction:row;align-items:baseline;justify-content:space-between;width:100%;grid-column:1 / -1}.ffm-release-summary-note{grid-column:1}.ffm-release-toggle{grid-column:2;grid-row:2}.ffm-release-changelog ul{font-size:13px}.ffm-enhanced .ffm-releases{max-height:620px;padding-right:6px}}.lab-projects{margin-top:42px}.lab-project{padding:34px 0 0;border-top:1px solid var(--line);scroll-margin-top:20px}.lab-project+.lab-project{margin-top:38px}.lab-project-overview{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);align-items:start;gap:clamp(24px,3vw,56px);padding-bottom:8px}.lab-project-copy,.lab-project-summary{min-width:0}.lab-project-summary{padding-top:34px}.lab-project-kicker{display:flex;flex-wrap:wrap;gap:9px 18px;margin:0 0 22px;font-size:9px;letter-spacing:.04em;color:var(--faint)}.lab-project-kicker>span{color:var(--punch)}.lab-project h3{margin:0 0 9px;font-size:clamp(27px,2.35vw,39px);font-weight:500;line-height:1.12;letter-spacing:-.04em;text-wrap:balance}.lab-title-note{color:var(--faint);font-size:.7em;white-space:nowrap}.lab-project-lead{margin:0 0 16px;font-family:var(--serif);font-style:italic;font-size:23px;line-height:1.35;color:#d0bda4}.lab-project-description{margin:0;max-width:47ch;color:var(--muted);font-size:14px;line-height:1.75}.lab-project-stack{display:flex;flex-wrap:wrap;gap:8px 16px;margin:22px 0 18px;padding:0;list-style:none;color:var(--faint);font:10px/1.5 var(--mono)}.lab-project-stack li+li:before{content:"·";color:var(--punch);margin-right:16px}.lab-repo-link{display:inline-flex;gap:28px;align-items:center;padding:4px 0;font-size:12px;color:var(--fg)}.lab-repo-link>span{color:var(--punch);transition:transform .2s var(--ease)}.lab-repo-link:hover>span{transform:translate(2px,-2px)}.lab-repo-link:hover{color:var(--punch)}.lab-build-notes>summary{display:flex;align-items:center;gap:10px 12px;width:100%;min-height:44px;padding:0;cursor:pointer;list-style:none;font-size:13px;color:var(--fg)}.lab-build-notes>summary::-webkit-details-marker{display:none}.lab-build-label{flex:none;min-width:0;letter-spacing:-.02em}.lab-build-rule{flex:1 1 48px;height:1px;min-width:32px;background:var(--line)}.lab-build-notes>summary:has(.decode-pending) .lab-build-rule{opacity:0}.lab-build-notes>summary:has(.decode-active) .lab-build-rule{animation:decode-wipe-x 1.15s var(--ease) both}.lab-disclosure{display:grid;place-items:center;flex:none;width:25px;height:25px;border:1px solid #4a4135;border-radius:50%;color:#c8a47a;font:17px var(--mono);transition:transform .2s var(--ease),color .2s,border-color .2s}.lab-build-notes[open]>summary .lab-disclosure{transform:rotate(45deg)}.lab-build-notes>summary:hover .lab-build-label{color:var(--punch)}.lab-build-notes>summary:hover .lab-disclosure{color:var(--punch);border-color:var(--punch)}.lab-build-body{display:grid;grid-template-columns:1fr 1fr;gap:24px 36px;padding:18px 0 22px}.lab-build-body>div{min-width:0}.lab-build-body [data-decode].decode-pending,.lab-build-body [data-decode].decode-active{visibility:hidden}.lab-build-body h4{margin:0 0 12px;color:var(--fg);font-size:15px;font-weight:500}.lab-build-body p{margin:0 0 14px;color:var(--muted);font-size:14px;line-height:1.85}.lab-build-body code{font:11px/1.6 var(--mono);color:var(--fg)}.lab-source-links{grid-column:1 / -1;display:flex;align-items:baseline;flex-wrap:wrap;gap:10px 22px;border-top:1px solid var(--line);padding-top:18px}.lab-source-links>.mono{color:var(--faint);font-size:8px;letter-spacing:.03em}.lab-source-links>a{color:#d1b899;font-size:11px;text-underline-offset:4px}.lab-source-links>a:hover{text-decoration:underline;color:var(--fg)}.lab-studies-heading{display:flex;justify-content:space-between;align-items:baseline;gap:12px 24px;margin:80px 0 24px}.lab-studies-heading h3{margin:0;font-size:32px;font-weight:400;line-height:1.2;letter-spacing:-.035em}.lab-studies-heading h3 em{font-family:var(--serif)}.lab-studies-heading p{margin:0;color:var(--faint);font-size:9px}@media(min-width:1200px)and (max-width:1399px),(max-width:760px){.lab-project-overview{grid-template-columns:1fr;gap:26px}.lab-project-description{max-width:58ch}.lab-project-summary{padding-top:0}.lab-build-body{grid-template-columns:1fr;gap:10px}}@media(max-width:480px){.lab-projects{margin-top:30px}.lab-project{padding-top:26px}.lab-project+.lab-project{margin-top:25px}.lab-project-kicker{font-size:8px;gap:8px 14px;margin-bottom:18px}.lab-project h3{font-size:30px}.lab-project-lead{font-size:22px}.lab-build-body p{font-size:14px}.lab-studies-heading{align-items:start;flex-direction:column;margin-top:60px}}@media print{.lab-project{break-inside:avoid}.lab-projects,.lab-projects *{color:#222!important}.lab-build-notes::details-content{content-visibility:visible}}.lab-list{display:grid;grid-template-columns:1fr 1fr;gap:28px}.lab-entry{min-width:0;border-top:1px solid var(--line);display:flex;flex-direction:column}.lab-entry-head{padding-top:20px}.lab-entry-head>.mono{font-size:9px}.lab-entry-head h3{font-size:21px;line-height:1.25;letter-spacing:-.025em;margin-top:16px;margin-bottom:10px}.lab-entry-head p{font-size:14px;line-height:1.6;max-width:33ch}.wordmark-preview{position:relative;width:100%;height:230px;padding:0;display:grid;place-items:center;overflow:hidden}.wordmark-preview canvas{width:100%;height:auto;position:relative;z-index:1}.wordmark-placeholder{position:absolute;font-size:42px;font-weight:500;letter-spacing:-.06em}.wordmark-preview.has-preview .wordmark-placeholder{display:none}.preview-action{position:absolute;bottom:20px;font-size:8px;color:var(--muted);opacity:.7;transition:opacity .2s}.wordmark-preview:hover .preview-action{opacity:1}.lab-entry-foot{display:flex;flex-wrap:wrap;gap:12px;justify-content:space-between;align-items:center;margin-top:auto;padding:16px 0;border-top:1px solid var(--line)}.lab-entry-foot .mono{font-size:8px}.lab-entry-foot>.quiet-link{font-size:11px}.horse-study-stage{position:relative;height:230px;display:grid;place-items:center;overflow:hidden}.horse-study-stage canvas{width:190px;height:200px}.study-caption{position:absolute;bottom:4px;right:0;font-size:8px;color:var(--faint)}.pose-controls{display:flex;gap:4px}.pose-controls button{font:9px var(--mono);padding:5px 8px;letter-spacing:.04em;border:1px solid transparent;color:var(--muted);transition:color .2s,border-color .2s}.pose-controls button[aria-pressed=true]{color:var(--fg);border-color:#67645b}.pose-controls button:hover{color:var(--fg)}.about-section .section-heading{margin-bottom:36px}.about-content{max-width:590px;margin-left:auto;display:flex;flex-direction:column;gap:20px;font-size:17px}.about-lead{font-size:24px;line-height:1.4;letter-spacing:-.02em;max-width:32ch}.about-content .text-link{margin-top:7px;font-size:13px}.working-with{border-top:1px solid var(--line);margin-top:45px;padding-top:20px;display:flex;justify-content:space-between;align-items:center;gap:24px}.working-with>.mono{font-size:8px}.technology-list{display:flex;flex-wrap:wrap;list-style:none;padding:0;margin:0;gap:18px;color:var(--muted);font:11px var(--mono)}.contact-section{border-bottom:0;padding-bottom:90px}.contact-intro{font-size:17px;max-width:40ch;margin-bottom:30px}.contact-email-row{display:flex;align-items:center;justify-content:space-between;gap:24px;border-bottom:1px solid var(--line);padding-bottom:18px}.contact-email{font-size:clamp(23px,2.75vw,38px);letter-spacing:-.035em;line-height:1.4}.contact-email span{font-family:Outfit,sans-serif;margin-left:12px;font-size:.75em}.contact-email:hover{color:var(--punch)}.copy-email{font-size:9px;white-space:nowrap;padding:10px 0;color:var(--muted)}.copy-email:hover{color:var(--fg)}.copy-status{min-height:20px;font-size:10px;color:var(--muted);margin-top:9px;margin-bottom:8px}.site-footer{margin:0 var(--gutter);padding:24px 0 28px;border-top:1px solid var(--line);display:flex;justify-content:space-between;align-items:center;gap:24px;color:var(--muted)}.site-footer>.mono,.site-footer button{font-size:9px}.footer-note{font-family:var(--serif);font-size:18px;font-style:italic;color:var(--muted)}.section-index,.project-category,.hero-end,.preview-toolbar,.preview-caption,.lab-entry-head>.mono,.lab-entry-foot>.mono,.working-with>.mono,.fact-label,.copy-email,.site-footer>.mono,.site-footer button{font-size:10px}@media(min-width:1280px){:root{--grid:5px }}@media(max-width:1250px){.project-detail-grid{gap:30px}.working-with{align-items:flex-start;flex-direction:column}}@media(max-width:1199px){:root{--rail:0px }.horse-rail{display:none}.page-content{padding-right:var(--gutter)}.hero{min-height:min(660px,calc(100svh - 56px))}.hero-title{font-size:clamp(56px,8vw,80px)}.hero-bottom{flex-direction:row;align-items:flex-end;padding-right:130px}.hero-actions{flex-direction:column;align-items:flex-start;gap:12px}.inline-horse{display:block;width:96px;height:120px;position:absolute;right:0;bottom:0;pointer-events:none}.hero>.inline-horse{bottom:88px}.section-heading{padding-right:118px}.section-heading>.inline-horse{bottom:-12px}.about-content{margin-left:0}.working-with{flex-direction:row}.section{padding-top:86px;padding-bottom:90px}.hero{padding-top:72px;padding-bottom:0}.hero-end{padding-top:50px}.lab-entry-head p{max-width:40ch}}@media(max-width:720px){:root{--gutter:24px }.site-header{height:48px;padding:10px var(--gutter) 8px}.brand{font-size:11px;gap:8px}.brand-alias{display:none}.site-nav{gap:20px;font-size:10px}.site-nav a{padding:15px 0}.site-nav a:last-child span{display:none}.hero{min-height:600px}.location{display:none}.hero-actions .text-link{font-size:18px}.hero-title{font-size:clamp(36px,8.9vw,64px);letter-spacing:-.04em;line-height:1.1}.hero-copy{font-size:16px}.hero-note{font-size:13px}.hero-bottom{display:block;margin-top:25px;padding-right:0}.hero-copy{max-width:28ch}.desktop-break{display:none}.hero-actions{margin-top:26px;flex-direction:column;gap:13px}.hero>.inline-horse{bottom:100px;right:0;width:88px;height:110px}.hero-end{font-size:7px;gap:12px;padding-bottom:18px}.hero-end>span:first-child{max-width:24ch}.hero-end>span:last-child{white-space:nowrap;align-self:end}.section{padding-top:76px;padding-bottom:80px}.hero{padding-top:64px;padding-bottom:0}.section-heading{padding-right:85px;margin-bottom:32px}.section-index{font-size:8px;margin-bottom:22px}.section-heading h2{font-size:clamp(34px,8.5vw,48px)}.section-heading>.inline-horse{width:75px;height:96px;bottom:-7px}.section-description{font-size:15px;margin-top:-7px;margin-bottom:30px;max-width:28ch}.project-title-row{align-items:flex-start;gap:10px;flex-direction:column;margin-bottom:20px}.project-title-row h3{font-size:25px}.project-category{font-size:8px}.preview-toolbar{padding:11px 12px;font-size:7px}.preview-toolbar>span:last-child{max-width:17ch;text-align:right}.preview-caption{font-size:8px;padding:11px 12px}.project-detail-grid{grid-template-columns:1fr;gap:27px;margin-top:25px;font-size:15px}.project-lead{font-size:24px}.project-facts{padding-top:22px;border-top:1px solid var(--line);gap:19px}.project-links{margin-top:7px}.demo-details{margin-top:27px}.demo-details summary{font-size:12px}.demo-details summary .mono{font-size:8px}.lab-list{grid-template-columns:1fr;gap:35px}.lab-entry-head h3{font-size:23px}.lab-entry-head p{font-size:15px;max-width:34ch}.wordmark-preview,.horse-study-stage{height:225px}.lab-entry-foot>.mono{font-size:8px}.pose-controls button{padding:10px;min-height:44px;min-width:38px}.lab-entry-foot{padding:12px 0}.about-content{font-size:16px;gap:18px}.about-lead{font-size:23px}.working-with{align-items:flex-start;flex-direction:column;gap:16px;margin-top:30px}.technology-list{font-size:10px;gap:18px}.contact-intro{font-size:16px}.contact-email-row{align-items:flex-start;flex-direction:column;gap:12px}.contact-email{font-size:clamp(23px,6.6vw,34px)}.copy-email{padding:5px 0;font-size:9px;min-height:44px}.site-footer{flex-wrap:wrap;gap:18px;padding:23px 0}.site-footer>.mono{font-size:8px}.site-footer button{font-size:8px}.footer-note{display:none}.intro-bottom{bottom:34px}}@media(max-width:370px){:root{--gutter:18px }.site-nav{gap:15px}.brand{font-size:10px}.hero>.inline-horse{width:70px;right:-4px}.hero-copy{max-width:25ch}.hero-end{font-size:6px}.section-heading{padding-right:70px}.section-heading>.inline-horse{width:65px}}@media(max-width:720px){.site-nav{font-size:11px}.section-index,.project-category,.hero-end,.preview-caption,.lab-entry-head>.mono,.lab-entry-foot>.mono,.working-with>.mono,.fact-label,.copy-email,.site-footer>.mono,.site-footer button{font-size:10px}.preview-toolbar{font-size:9px}.hero-end>span:last-child{white-space:normal;text-align:right;max-width:16ch}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}.horse-rail{transition:none}}@media print{body{background:#fff;color:#000}body:before,.site-shader,.ascii-hero,.horse-rail,.inline-horse,.site-nav,.copy-email,[data-replay-intro]{display:none!important}#site-shell :is(.site-nav,.location,.hero-title em,.hero-bottom,.hero-end,.missing-copy,.missing-actions,.missing-code,.ffm-wordmark,.ffm-category,.ffm-metric dt,.ffm-metric:not(:first-child) dd,.ffm-data-note,.ffm-project-links,.ffm-tabs,.ffm-panel-intro,.ffm-note-body,.ffm-note-foot,.ffm-theme-switch,.ffm-releases-heading p,.ffm-releases-heading>a,.ffm-release-row,.ffm-showcase h4,.ffm-video-caption,.ffm-video-link,.ffm-theme figcaption>span:not(.ffm-theme-swatch),.section-index,.section-heading h2,.section-description,.lab-project-copy,.lab-project-summary,.lab-build-notes,.lab-studies-heading,.lab-entry-head,.lab-entry-foot,.preview-action,.study-caption,.about-content,.working-with,.contact-intro,.contact-email-row,.copy-status,.site-footer){mix-blend-mode:normal}#site-shell{visibility:visible!important;opacity:1!important}.page-content{padding:0}.site-header{position:static;background:none}.section{padding:30px 0;break-inside:avoid}.hero{min-height:0}.muted{color:#444}.hero-punch{color:#c2410c}.section-heading h2,.hero-title{font-size:36px}.lab-list{display:block}.lab-entry{margin-top:20px}a{color:inherit}}
