@font-face{font-family:EB Garamond;src:url(/fonts/eb-garamond-400.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:EB Garamond;src:url(/fonts/eb-garamond-400-italic.woff2) format("woff2");font-weight:400;font-style:italic;font-display:swap}@font-face{font-family:EB Garamond;src:url(/fonts/eb-garamond-500.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap}:root{--paper: #fafafa;--ink: #1a1a1a;--muted: #6b6b66;--rule: #d6d5d0;--dim: .28}*{box-sizing:border-box}html{background:var(--paper)}body{margin:0;background:var(--paper);color:var(--ink);font-family:EB Garamond,Georgia,Times New Roman,serif;-webkit-font-smoothing:antialiased}h1,p,ul{margin:0}a{color:inherit;text-decoration:none}::selection{background:var(--ink);color:var(--paper)}:focus-visible{outline:1px solid var(--ink);outline-offset:6px}.page{min-height:100vh;min-height:100svh;display:flex;flex-direction:column;justify-content:space-between;gap:64px;padding:40px 48px}.top{display:flex;justify-content:space-between;align-items:baseline;flex-wrap:wrap;gap:8px 24px;font-size:18px;line-height:1.4}.wordmark{font-size:inherit;font-weight:500;letter-spacing:.01em}.tagline{color:var(--muted)}.tw{white-space:nowrap}.tagline .tw{white-space:normal}.tw-ch,.tw-dot{position:relative;opacity:0;animation:tw-show 1ms linear var(--at) forwards}.tw-ch:after,.tw-start:after{content:"";position:absolute;left:100%;top:.12em;bottom:.08em;width:1.5px;margin-left:1px;background:var(--ink);opacity:0}.tw-start{position:relative;-webkit-user-select:none;user-select:none;display:inline-block;width:0;height:1em;vertical-align:baseline}.tw-start:after{left:0;margin-left:-1px;animation:tw-blink .5s step-end var(--start, .1s) var(--blinks, 1.2)}.tw-ch:after{animation:tw-hold calc(var(--until) - var(--at)) linear var(--at)}.tw-ch.tw-last:after{animation:tw-blink .5s step-end var(--at) 2}.tw-dot{--at: 2.75s;animation-name:tw-dot;animation-duration:.25s;animation-timing-function:ease-out}@keyframes tw-show{to{opacity:1}}@keyframes tw-hold{0%,to{opacity:1}}@keyframes tw-blink{0%{opacity:1}50%{opacity:0}}@keyframes tw-dot{0%{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:none}}.wordmark-wrap{position:relative;display:inline-block}.spook{display:none;position:absolute;left:70%;top:100%;width:28px;margin-left:-14px;pointer-events:none;color:var(--ink)}html[data-season=halloween] .spook{display:block}.spook-drop{display:block;position:relative;height:0;opacity:0;filter:blur(2px);transition:opacity 1s ease,filter 1s ease,height 0s linear 1s}.wordmark-wrap:hover .spook-drop{height:74px;opacity:1;filter:none;transition:height .9s cubic-bezier(.34,1.56,.64,1),opacity .2s ease,filter .2s ease}.spook-swing{position:absolute;inset:0;transform-origin:50% 0;animation:swing 2.6s ease-in-out infinite}.spook-thread{position:absolute;left:50%;top:0;bottom:18px;width:1px;background:currentColor;opacity:.7}.spook-spider{position:absolute;left:0;bottom:0;width:28px;height:auto}@keyframes swing{0%,to{transform:rotate(5deg)}50%{transform:rotate(-5deg)}}.snow{display:none;position:absolute;left:0;top:100%;width:220px;height:170px;pointer-events:none;color:var(--ink);opacity:0;filter:blur(2px);transition:opacity 1s ease,filter 1s ease}html[data-season=christmas] .snow{display:block}.wordmark-wrap:hover .snow{opacity:1;filter:none;transition:opacity .3s ease,filter .3s ease}.flake{position:absolute;left:var(--x);top:0;width:var(--s);height:var(--s);opacity:0;animation:fall var(--t) linear var(--d) infinite paused}.wordmark-wrap:hover .flake{animation-play-state:running}.flake svg{display:block;width:100%;height:100%;fill:none;stroke:currentColor;stroke-width:1.1;stroke-linecap:round}@keyframes fall{0%{opacity:0;transform:translateY(-6px) rotate(0)}12%{opacity:.85}50%{transform:translate(var(--w),70px) rotate(90deg)}85%{opacity:.7}to{opacity:0;transform:translateY(150px) rotate(180deg)}}.trout{display:none;position:absolute;left:100%;top:55%;margin-left:6px;width:320px;height:150px;pointer-events:none;color:var(--ink);opacity:0;filter:blur(2px);transition:opacity 1s ease,filter 1s ease}html[data-season=trout] .trout{display:block}.wordmark-wrap:hover .trout{opacity:1;filter:none;transition:opacity .3s ease,filter .3s ease}.trout svg{display:block;overflow:visible}.trout-line{fill:none;stroke:currentColor;stroke-width:1;stroke-dasharray:100;stroke-dashoffset:100;animation:cast 1.3s cubic-bezier(.3,.6,.3,1) .1s forwards paused}.trout-water{fill:none;stroke:#7fb3d5;stroke-width:1.6;stroke-linecap:round}.trout-ripple{fill:none;stroke:#7fb3d5;stroke-width:1.3;opacity:0;transform-box:fill-box;transform-origin:center}.trout-ripple.r1{animation:ripple-out 4.6s ease-out 1.2s infinite paused}.trout-ripple.r2{animation:ripple-in 4.6s ease-out 1.2s infinite paused}.trout-fish{fill:currentColor;opacity:0;animation:jump 4.6s ease-in-out 1.2s infinite paused}.trout-fish circle{fill:var(--paper)}.wordmark-wrap:hover :is(.trout-line,.trout-ripple,.trout-fish){animation-play-state:running}@keyframes cast{to{stroke-dashoffset:0}}@keyframes jump{0%,18%{opacity:0;transform:translate(226px,126px) rotate(-50deg)}22%{opacity:1;transform:translate(232px,112px) rotate(-40deg)}33%{transform:translate(255px,82px) rotate(0)}44%{opacity:1;transform:translate(278px,112px) rotate(40deg)}48%,to{opacity:0;transform:translate(284px,126px) rotate(50deg)}}@keyframes ripple-out{0%,16%{opacity:0;transform:scale(.4)}20%{opacity:.9}40%,to{opacity:0;transform:scale(2.2)}}@keyframes ripple-in{0%,44%{opacity:0;transform:scale(.4)}48%{opacity:.9}72%,to{opacity:0;transform:scale(2.6)}}.extra{display:none;position:absolute;pointer-events:none;color:var(--ink);opacity:0;filter:blur(2px);transition:opacity 1s ease,filter 1s ease}.wordmark-wrap:hover .extra{opacity:1;filter:none;transition:opacity .3s ease,filter .3s ease}.extra svg{display:block;overflow:visible}.wordmark-wrap:hover .extra,.wordmark-wrap:hover .extra *{animation-play-state:running}html[data-season=newyear] .firework,html[data-season=spring] .bloom,html[data-season=summer] .fireflies,html[data-season=autumn] .autumn{display:block}.firework{left:100%;top:50%;margin:-52px 0 0 8px;width:90px;height:90px}.ray{stroke:currentColor;stroke-width:1.1;stroke-linecap:round;stroke-dasharray:.4 1;stroke-dashoffset:.4;opacity:0;animation:burst 2.6s cubic-bezier(.2,.7,.3,1) .15s infinite paused}.ray.gold{stroke:#f2b322;stroke-width:1.6}.spark{fill:#f2b322;opacity:0;animation:spark 2.6s ease-out .15s infinite paused}@keyframes burst{0%{stroke-dashoffset:.4;opacity:1}45%{opacity:.9}60%,to{stroke-dashoffset:-.62;opacity:0}}@keyframes spark{0%,30%{opacity:0}40%{opacity:1}75%,to{opacity:0;transform:translateY(6px)}}.bloom{left:52%;bottom:88%;margin-left:-20px;width:40px;height:48px}.stem{fill:none;stroke:currentColor;stroke-width:1.1;stroke-linecap:round;stroke-dasharray:1;stroke-dashoffset:1;animation:grow .9s ease-out forwards paused}.leaf{fill:#8fb9a3;stroke:currentColor;stroke-width:.8;transform-box:fill-box;transform-origin:0 100%;transform:scale(0);animation:open .5s ease-out .55s forwards paused}.petal{fill:#8fb9a3;stroke:currentColor;stroke-width:.8;transform-box:fill-box;transform-origin:center;transform:scale(0);animation:open .45s cubic-bezier(.34,1.56,.64,1) calc(.85s + var(--i) * .07s) forwards paused}.bud{fill:currentColor;transform-box:fill-box;transform-origin:center;transform:scale(0);animation:open .3s ease-out 1.3s forwards paused}@keyframes grow{to{stroke-dashoffset:0}}@keyframes open{to{transform:scale(1)}}.fireflies{inset:0}.firefly{position:absolute;left:0;top:0;width:4px;height:4px;border-radius:50%;background:currentColor;offset-path:path("M-14 26C12 46 70 44 104 22S126-18 84-14 18-8-14 26");offset-rotate:0deg;animation:drift 9s linear infinite paused}.firefly:after{content:"";position:absolute;inset:-5px;border-radius:50%;background:radial-gradient(circle,#ffc93de5,#ffc93d00 70%);animation:glow 1.8s ease-in-out infinite paused}@keyframes drift{to{offset-distance:100%}}@keyframes glow{0%,to{opacity:.1;transform:scale(.7)}45%{opacity:1;transform:scale(1.4)}60%{opacity:.2}}.autumn{left:72%;top:55%;width:18px;height:18px}.falling-leaf{fill:#f3e2c2;stroke:currentColor;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;animation:leaf-fall 5.5s ease-in-out infinite paused}.falling-leaf path+path{fill:none}@keyframes leaf-fall{0%{opacity:0;transform:translate(0) rotate(0)}8%{opacity:1;transform:translate(2px,4px) rotate(-10deg)}26%{transform:translate(22px,44px) rotate(38deg)}46%{transform:translate(-8px,86px) rotate(-30deg)}66%{transform:translate(18px,126px) rotate(34deg)}86%{opacity:.9;transform:translate(-4px,164px) rotate(-18deg)}to{opacity:0;transform:translate(10px,190px) rotate(10deg)}}html[data-season] body:has(.wordmark-wrap:hover) .danny-turn{transform:rotate(-9deg)}.projects{position:relative;width:100%;max-width:1100px;margin:0 auto}.project{position:relative;display:flex;align-items:center;justify-content:center;padding:22px 0 26px}.project:before,.project.last:after{content:"";position:absolute;left:0;right:0;height:1px;background:var(--rule);transform-origin:left;transform:scaleX(0);animation:draw-rule 1.2s cubic-bezier(.6,0,.2,1) .3s forwards}.project:before{top:-1px}.project.last:after{bottom:-1px;animation-delay:.45s}.project-name-wrap{position:relative;display:inline-block;isolation:isolate}.project-brush{position:absolute;inset:30% -5% -14%;z-index:-1;background:var(--paint);-webkit-mask:url(/brush/stroke.webp) center / 100% 100% no-repeat;mask:url(/brush/stroke.webp) center / 100% 100% no-repeat;clip-path:inset(0 100% 0 0);opacity:0;filter:blur(3px);transform:scale(1.02);transition:opacity 1.1s ease,filter 1.1s ease,transform 1.1s ease,clip-path 0s linear 1.1s}.project:hover .project-brush,.project:focus-visible .project-brush{clip-path:inset(0 0 0 0);opacity:1;filter:blur(0);transform:none;transition:clip-path .7s cubic-bezier(.65,0,.25,1),opacity .2s ease,filter .3s ease,transform .3s ease}.paint-study{--paint: #8fb9a3}.paint-kids{--paint: #ffc93d}.paint-fish{--paint: #7fb3d5}.project-name{display:block;font-size:76px;line-height:1;letter-spacing:-.01em;transition:opacity .4s ease}.project-icon{position:absolute;right:100%;top:50%;margin-right:24px;width:64px;height:64px;border-radius:15px;box-shadow:0 0 0 1px #0000000f;opacity:0;transform:translateY(-50%) scale(.85) rotate(-4deg);transition:opacity .4s ease,transform .5s cubic-bezier(.2,.8,.3,1.2)}.project-note{position:absolute;right:0;bottom:30px;font-size:17px;font-style:italic;color:var(--muted);opacity:0;transform:translate(-8px);transition:opacity .45s ease,transform .45s ease}.projects:hover .project-name{opacity:var(--dim)}.projects .project:hover .project-name,.projects .project:focus-visible .project-name{opacity:1;font-style:italic}.project:hover .project-icon,.project:focus-visible .project-icon{opacity:1;transform:translateY(-50%) scale(1) rotate(0)}.project:hover .project-note,.project:focus-visible .project-note{opacity:1;transform:none}.project:focus-visible{outline-offset:-1px}.danny{position:absolute;right:28px;bottom:100%;margin-bottom:-11px;width:180px;pointer-events:none;opacity:0;animation:fade-in 1.6s ease 1.6s forwards}.danny-dog{position:relative;width:100%;aspect-ratio:440 / 293;transform:scaleX(-1)}.danny-breath{position:absolute;inset:0;transform-origin:50% 90%;animation:breathe 4.5s ease-in-out 3.2s infinite}.danny-layer{position:absolute;inset:0;width:100%;height:100%;display:block}.danny-tail{transform-origin:24.5% 67.6%;animation:wag 6.5s ease-in-out 3.6s infinite}.danny-turn{position:absolute;inset:0;transform-origin:73.9% 58%;transition:transform .6s cubic-bezier(.3,.7,.3,1.2)}.danny-head{transform-origin:73.9% 58%;animation:look 11s ease-in-out 5s infinite}.projects:has(.project:hover) .danny-turn,.projects:has(.project:focus-visible) .danny-turn{transform:rotate(-5deg)}.bottom{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px 24px;font-size:15px;line-height:1.6;color:var(--muted)}.footer-links{list-style:none;padding:0;display:flex;gap:4px;margin-left:-12px}.icon-link{display:grid;place-items:center;width:44px;height:44px;color:var(--muted);transition:color .3s ease}.icon-link:hover{color:var(--ink)}.icon-link svg{width:21px;height:21px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}.rise{opacity:0;animation:rise 1.1s cubic-bezier(.2,.65,.3,1) forwards}.d1{animation-delay:.1s}.d2{animation-delay:.5s}.d3{animation-delay:.65s}.d4{animation-delay:.8s}.d6{animation-delay:1.3s}@keyframes rise{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes draw-rule{0%{transform:scaleX(0)}to{transform:scaleX(1)}}@keyframes breathe{0%,to{transform:scaleY(1)}50%{transform:scaleY(1.012)}}@keyframes wag{0%,84%,to{transform:rotate(0)}87%{transform:rotate(7deg)}90%{transform:rotate(-2deg)}93%{transform:rotate(6deg)}96%{transform:rotate(-1deg)}}@keyframes look{0%,70%,to{transform:rotate(0)}76%,88%{transform:rotate(4deg)}}@media(max-width:700px){.page{padding:28px 22px 22px;gap:0;justify-content:flex-start}.top{flex-direction:column;align-items:flex-start;gap:2px;font-size:19px}.tagline{font-size:16px}.projects{margin-top:clamp(118px,20svh,190px)}.project{flex-direction:column;padding:20px 0 22px;text-align:center}.project-name{font-size:42px}.project-icon{display:none}.project-note{position:static;display:block;margin-top:6px;font-size:16px;opacity:1;transform:none}.projects:hover .project-name{opacity:1}.projects .project:hover .project-name{font-style:normal}.projects .project:active .project-name{font-style:italic}.project-brush{top:34%;bottom:-10%}.danny{width:112px;right:0;margin-bottom:-7px}.bottom{margin-top:auto;padding-top:64px}}@media(prefers-reduced-motion:reduce){.rise,.danny,.tw-ch,.tw-dot{opacity:1;animation:none}.tw-start:after,.tw-ch:after{animation:none}.project:before,.project.last:after{transform:none;animation:none}.danny-breath,.danny-tail,.danny-head,.spook-swing,.flake,.trout-ripple,.trout-fish{animation:none}.trout-line{animation:none;stroke-dashoffset:0}.firework,.fireflies,.autumn{visibility:hidden}.stem,.leaf,.petal,.bud{animation:none;stroke-dashoffset:0;transform:none}.spook-drop,.wordmark-wrap:hover .spook-drop{transition:opacity .3s ease}.danny-turn,.project-icon,.project-note,.project-name,.project-brush{transition:none}}
