@font-face{font-family:Fraunces;src:url(/fonts/fraunces-latin-full-normal.woff2)format("woff2-variations");font-weight:100 900;font-style:normal;font-display:optional}@font-face{font-family:Public Sans;src:url(/fonts/public-sans-latin-wght-normal.woff2)format("woff2-variations");font-weight:100 900;font-style:normal;font-display:optional}@font-face{font-family:Public Sans;src:url(/fonts/public-sans-latin-wght-italic.woff2)format("woff2-variations");font-weight:100 900;font-style:italic;font-display:optional}@font-face{font-family:Gochi Hand;src:url(/fonts/gochi-hand-latin-400-normal.woff2)format("woff2");font-weight:400;font-style:normal;font-display:optional}:root{color-scheme:light dark;--paper:#f3efe6;--raised:#faf7f0;--ink:#141414;--ink-soft:#26241f;--muted:#5c574f;--accent:#b83a14;--rule:#141414;--rule-soft:#d8d1c2;--sticky:#ffe066;--sticky-ink:#141414;--font-display:"Fraunces", Georgia, "Times New Roman", serif;--font-text:"Public Sans", system-ui, -apple-system, "Segoe UI", sans-serif;--font-note:"Gochi Hand", "Comic Sans MS", cursive;--display-axes:"SOFT" 50, "WONK" 1;--step--1:clamp(.83rem, .8rem + .15vw, .9rem);--step-0:clamp(1.0625rem, 1rem + .3vw, 1.125rem);--step-1:clamp(1.3rem, 1.2rem + .5vw, 1.5rem);--step-2:clamp(1.7rem, 1.4rem + 1.4vw, 2.4rem);--step-3:clamp(2.3rem, 1.6rem + 3.4vw, 4.25rem);--step-4:clamp(2.9rem, 1.5rem + 6.6vw, 7rem);--space-1:.25rem;--space-2:.5rem;--space-3:.75rem;--space-4:1rem;--space-5:1.5rem;--space-6:2.5rem;--space-7:4rem;--space-8:6.5rem;--header-h:3.5rem;--measure:64ch;--page:76rem;--gutter:clamp(1rem, 4vw, 2.5rem);--dur-fast:.15s;--dur:.25s;--dur-slow:.6s;--ease-out:cubic-bezier(.2, .7, .2, 1);--ease-in-out:cubic-bezier(.65, 0, .35, 1)}@media (prefers-color-scheme:dark){:root{--paper:#17150f;--raised:#211e17;--ink:#f3efe6;--ink-soft:#ddd6c8;--muted:#a59d8f;--accent:#f2794a;--rule:#f3efe6;--rule-soft:#3a352b}}@media (prefers-reduced-motion:reduce){:root{--dur-fast:0s;--dur:0s;--dur-slow:0s}}*,:before,:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:calc(var(--header-h) + var(--space-4))}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}body{background:var(--paper);color:var(--ink-soft);font-family:var(--font-text);font-size:var(--step-0);text-rendering:optimizelegibility;margin:0;line-height:1.6}h1,h2,h3{font-family:var(--font-display);font-variation-settings:var(--display-axes);color:var(--ink);letter-spacing:-.015em;margin:0 0 var(--space-4);text-wrap:balance;font-weight:500;line-height:1.02}h1{font-size:var(--step-4)}h2{font-size:var(--step-3)}h3{font-size:var(--step-1);line-height:1.15}p,ul,ol{margin:0 0 var(--space-4)}p{text-wrap:pretty}a{color:var(--accent);text-underline-offset:.18em;transition:text-decoration-thickness var(--dur-fast) var(--ease-out);text-decoration-thickness:1px}a:hover{text-decoration-thickness:2px}:focus-visible{outline:2px solid var(--accent);outline-offset:3px}img,video{max-width:100%;height:auto;display:block}code{background:var(--raised);padding:.1em .3em;font-family:ui-monospace,Cascadia Code,Menlo,Consolas,monospace;font-size:.9em}hr,.rule{border:0;border-top:1px solid var(--rule);margin:var(--space-6) 0}.kicker{font-family:var(--font-text);font-size:var(--step--1);letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-weight:600}.page{max-width:var(--page);padding:0 var(--gutter);margin:0 auto}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.site-header{z-index:10;justify-content:space-between;align-items:center;gap:var(--space-4);height:var(--header-h);background:var(--paper);border-bottom:1px solid var(--rule);view-transition-name:site-header;display:flex;position:sticky;top:0}.brand{font-family:var(--font-display);font-variation-settings:var(--display-axes);font-size:var(--step-0);color:var(--ink);white-space:nowrap;font-weight:600;text-decoration:none}.site-nav{gap:var(--space-4);font-size:var(--step--1);letter-spacing:.08em;text-transform:uppercase;font-weight:600;display:flex}.site-nav a{color:var(--ink);padding:var(--space-2) 0;text-decoration:none}.site-nav a:hover{color:var(--accent)}@media (width<=23.99rem){.site-nav{gap:var(--space-3);letter-spacing:.04em}}.hero{padding-top:var(--space-8);padding-bottom:var(--space-7)}.hero:has(.hero-portrait){gap:var(--space-5);display:grid}.hero-portrait{aspect-ratio:4/5;object-fit:cover;border:1px solid var(--rule-soft);background:var(--raised);order:-1;width:7.5rem;height:auto}@media (width>=48rem){.hero:has(.hero-portrait){gap:var(--space-6);grid-template-columns:1fr 13rem;align-items:start}.hero-portrait{width:100%;margin-top:var(--space-6);order:0}}@media (width>=64rem){.hero:has(.hero-portrait){grid-template-columns:1fr 18rem}}.hero h1{margin-top:var(--space-3);max-width:12ch}.hero-lede{font-size:var(--step-1);max-width:34ch;color:var(--ink-soft);line-height:1.45}.hero-links{gap:var(--space-5);margin-top:var(--space-6);flex-wrap:wrap;font-weight:600;display:flex}.section{padding-top:var(--space-7);padding-bottom:var(--space-7);border-top:1px solid var(--rule)}.section-head{gap:var(--space-2);margin-bottom:var(--space-6);display:grid}.section-head h2{margin:0}.contact-list{gap:var(--space-3);font-size:var(--step-1);padding:0;list-style:none;display:grid}.site-footer{padding-top:var(--space-5);padding-bottom:var(--space-6);border-top:1px solid var(--rule);font-size:var(--step--1);color:var(--muted)}@media (width>=64rem){.section{gap:var(--space-6);grid-template-columns:3fr 9fr;display:grid}.brand{font-size:var(--step-1)}.section>.section-head{top:calc(var(--header-h) + var(--space-5));align-self:start;position:sticky}}.skills-grid{gap:var(--space-5);grid-template-columns:repeat(auto-fit,minmax(12rem,1fr));display:grid}.skill-group ul{border-top:1px solid var(--rule-soft);padding:0;list-style:none}.skill-group li{padding:var(--space-2) 0;border-bottom:1px solid var(--rule-soft)}.work-list{border-top:1px solid var(--rule);gap:0;display:grid}.work-card{gap:var(--space-4);padding:var(--space-6) 0;border-bottom:1px solid var(--rule);display:grid;position:relative}.work-card-media{aspect-ratio:16/9;background:var(--raised);border:1px solid var(--rule-soft);position:relative;overflow:hidden}.work-card-media img{object-fit:cover;filter:grayscale();width:100%;height:100%;transition:filter var(--dur) var(--ease-out), scale var(--dur) var(--ease-out);position:absolute;inset:0}.work-card-link{color:var(--ink);transition:color var(--dur-fast) var(--ease-out);text-decoration:none}.work-card-link:before{content:"";position:absolute;inset:0}.work-card-link:after{content:"→";opacity:0;transition:opacity var(--dur-fast) var(--ease-out), translate var(--dur) var(--ease-out);margin-left:.3em;display:inline-block;translate:-.3em}.work-card-link:focus-visible{outline:none}.work-card:has(.work-card-link:focus-visible){outline:2px solid var(--accent);outline-offset:var(--space-2)}.work-card:hover .work-card-media img,.work-card:focus-within .work-card-media img{filter:none}.work-card:has(.work-card-link):hover .work-card-media img,.work-card:has(.work-card-link:focus-visible) .work-card-media img{scale:1.03}.work-card:hover .work-card-link,.work-card-link:focus-visible{color:var(--accent)}.work-card:hover .work-card-link:after,.work-card-link:focus-visible:after{opacity:1;translate:0}@media (prefers-reduced-motion:reduce){.work-card .work-card-media img{scale:none}}@media (hover:none){.work-card-media img{filter:none}}.project-card-header{align-items:baseline;gap:var(--space-3);flex-wrap:wrap;display:flex}.project-card-header h3{font-size:var(--step-2);margin:0}.work-card-summary{margin:var(--space-2) 0}.badge{font-size:var(--step--1);color:var(--accent);padding:0 var(--space-2);border:1px solid;font-weight:600}.stack-list{gap:var(--space-2) var(--space-4);font-size:var(--step--1);color:var(--muted);flex-wrap:wrap;padding:0;list-style:none;display:flex}.project-links{z-index:1;gap:var(--space-5);flex-wrap:wrap;font-weight:600;display:flex;position:relative}.project-card-compact .project-card-header h3{font-size:var(--step-1)}@media (width>=48rem){.project-card-compact:has(.work-card-media){align-items:start;gap:var(--space-5);grid-template-columns:14rem 1fr}}.case-study-head{padding-top:var(--space-7);padding-bottom:var(--space-6);border-bottom:1px solid var(--rule)}.case-study-back{font-size:var(--step--1)}.prose{max-width:var(--measure);padding-top:var(--space-6);padding-bottom:var(--space-7);display:flow-root}.prose h2{font-size:var(--step-2);margin-top:var(--space-7)}.prose h3{margin-top:var(--space-6)}.prose :where(li+li){margin-top:var(--space-2)}.prose strong{color:var(--ink)}.prose .tradeoff{margin-top:var(--space-2);padding-left:var(--space-3);border-left:2px solid var(--rule-soft);color:var(--muted);font-size:var(--step--1);display:block}.prose .tradeoff-label{text-transform:uppercase;letter-spacing:.08em;margin-right:var(--space-2);font-weight:600}.prose .link-list{border-top:1px solid var(--rule);padding:0;list-style:none}.prose .link-list li{padding:var(--space-3) 0;border-bottom:1px solid var(--rule-soft);margin:0}.prose details{border-top:1px solid var(--rule-soft);border-bottom:1px solid var(--rule-soft);padding:var(--space-3) 0;margin:var(--space-4) 0}.prose summary{cursor:pointer;color:var(--ink);font-weight:600}.figure,.prose .diagram-frame{margin:var(--space-6) 0;padding:0}.prose .diagram-frame video{background:#000;width:100%}.prose .diagram-frame img{padding:var(--space-3);background:#fff}figcaption{margin-top:var(--space-3);font-size:var(--step--1);color:var(--muted)}.aside{margin:var(--space-6) 0;padding:var(--space-4) 0 var(--space-4) var(--space-5);border-left:1px solid var(--rule)}.callout{margin:var(--space-6) 0;padding:var(--space-4) var(--space-5);border:1px solid var(--rule)}.callout-warning{border-color:var(--accent)}.sidenote-note{font-family:var(--font-note);font-size:var(--step-0);color:var(--sticky-ink);background:var(--sticky);padding:var(--space-2) var(--space-3);line-height:1.25;display:block;transform:rotate(2deg);box-shadow:0 1px #d6b84a}.sidenote-note a{color:var(--sticky-ink)}.sidenote-lead{font-size:var(--step--1);opacity:.75;display:block}.sidenote-toggle{font-family:var(--font-note);font-size:var(--step--1);background:var(--sticky);color:var(--sticky-ink);padding:0 var(--space-2);cursor:pointer}@media (width<=79.99rem){.sidenote-note{margin:var(--space-3) 0;display:none}.sidenote-checkbox:checked~.sidenote-note{display:block}.sidenote-checkbox:focus-visible+.sidenote-toggle{outline:2px solid var(--accent);outline-offset:3px}}@media (width>=80rem){.sidenote-toggle,.sidenote-checkbox{display:none}.sidenote-note{float:right;clear:right;width:15rem;margin-right:calc(-15rem - var(--space-5));margin-top:var(--space-1)}}@keyframes reveal{0%{opacity:0;translate:0 .75rem}to{opacity:1;translate:0}}.reveal{animation:reveal var(--dur-slow) var(--ease-out) both;animation-delay:calc(var(--reveal-index,0) * 80ms)}main>:nth-child(2){--reveal-index:1}main>:nth-child(3){--reveal-index:2}main>:nth-child(n+4){--reveal-index:3}.case-study-body>:nth-child(-n+6){animation:reveal var(--dur-slow) var(--ease-out) both;animation-delay:calc(var(--reveal-index,0) * 60ms)}.case-study-body>:first-child{--reveal-index:1}.case-study-body>:nth-child(2){--reveal-index:2}.case-study-body>:nth-child(3){--reveal-index:3}.case-study-body>:nth-child(4){--reveal-index:4}.case-study-body>:nth-child(5){--reveal-index:5}.case-study-body>:nth-child(6){--reveal-index:6}@view-transition{navigation:auto}::view-transition-old(root),::view-transition-new(root){animation-duration:var(--dur);animation-timing-function:var(--ease-in-out)}@media (prefers-reduced-motion:reduce){@view-transition{navigation:none}.reveal,.case-study-body>:nth-child(-n+6){animation:none}}.kit-writing{padding-top:var(--space-7);border-top:1px solid var(--rule)}.kit-still{margin-bottom:var(--space-6);overflow:hidden}.kit-type p{margin:0 0 var(--space-3);color:var(--ink)}.kit-display{font-family:var(--font-display);font-variation-settings:var(--display-axes);line-height:1}.kit-swatches{gap:var(--space-4);font-size:var(--step--1);grid-template-columns:repeat(auto-fill,minmax(8rem,1fr));padding:0;list-style:none;display:grid}.kit-swatches span{border:1px solid var(--rule-soft);height:3rem;margin-bottom:var(--space-2);display:block}
