@font-face{font-family:"Departure Mono";src:url("/assets/fonts/DepartureMono-Regular.woff2") format("woff2");font-weight:400;font-style:normal;font-display:swap}
:root{color-scheme:light;--paper:#eaeae7;--ink:#282b27;--muted:#666b62;--line:#cfd1c9;--accent:#455c3c;--mono:"MonoLisa Web","MonoLisa","MonoLisa Code","MonoLisaCode",ui-monospace,"SFMono-Regular",Menlo,Consolas,monospace;--text:"MonoLisa Text Web","MonoLisa Text","MonoLisaText",var(--mono)}
*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--text);font-size:14px;line-height:1.85;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration-thickness:1px;text-underline-offset:5px}a:hover{color:var(--accent)}a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:6px}.skip-link{position:absolute;top:-80px;left:20px;padding:10px;background:white;z-index:5}.skip-link:focus{top:10px}header,main,footer{max-width:1140px;margin:auto;padding-left:48px;padding-right:48px}header{padding-top:46px;display:flex;flex-direction:column;gap:30px;align-items:start}.brand{font-family:var(--mono);font-size:clamp(24px,3.7vw,43px);font-weight:700;line-height:1.25;letter-spacing:-1.7px;text-decoration:none}.brand span{display:block;color:var(--muted);font-family:var(--text);font-size:14px;font-style:italic;font-feature-settings:"ss01" 1;font-weight:400;letter-spacing:0;margin-top:15px}nav{display:flex;flex-wrap:wrap;gap:12px 30px;font-size:12px}nav a{text-decoration:none}main{min-height:65vh;padding-top:64px;padding-bottom:90px}h1{font-family:var(--mono);font-weight:400;font-size:clamp(28px,4.6vw,47px);line-height:1.35;letter-spacing:-1.5px;margin:0 0 40px}.eyebrow{font-family:var(--mono);font-size:11px;color:var(--muted);margin:0 0 20px}.section-title{display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);padding-bottom:17px}.section-title h2{font-family:var(--mono);font-size:12px;font-weight:400;margin:0}.section-title a{font-size:11px;text-decoration:none;color:var(--muted)}.entries{list-style:none;padding:0;margin:0}.entries>li{padding:38px 0;border-bottom:1px solid var(--line)}.post-card{display:grid;grid-template-columns:1fr;gap:30px}.post-card.has-image{grid-template-columns:minmax(0,.85fr) minmax(0,1.35fr)}.post-image{display:block;align-self:start;background:#e0e1dc;overflow:hidden}.post-image img{display:block;width:100%;height:auto;max-height:490px;object-fit:contain}.post-copy{min-width:0}.post-copy time,.full-post>time{font-family:var(--mono);font-size:10px;color:var(--muted);font-variant-numeric:tabular-nums}.post-copy h3{font-family:var(--mono);font-size:clamp(18px,2.1vw,22px);font-weight:700;line-height:1.5;letter-spacing:-.65px;margin:12px 0 17px;overflow-wrap:anywhere}.post-copy h3 a{text-decoration:none}.excerpt{font-family:var(--text);font-size:12px;line-height:1.95;margin:0 0 19px}.tags{list-style:none;display:flex;flex-wrap:wrap;gap:7px 15px;padding:0;margin:18px 0}.tags li{font-family:var(--mono);font-size:10px;color:var(--muted)}.tags a{text-decoration:none;border-bottom:1px solid #b9beb2}.tags a::before{content:'#';opacity:.55}.read-more{display:inline-block;margin-top:8px;font-size:11px;text-decoration:none}.read-more span{margin-left:8px}.full-post{max-width:760px;margin:auto}.full-post>h1{font-size:clamp(25px,4.5vw,43px);margin-top:18px;letter-spacing:-1.2px}.full-post>.tags{margin-bottom:40px}.prose{overflow-wrap:anywhere}.prose h1,.prose h2,.prose h3{font-family:var(--mono);font-size:25px;font-weight:700;letter-spacing:-.7px;line-height:1.5;margin-top:45px}.prose p{margin:0 0 25px}.prose img{display:block;max-width:100%;height:auto;margin:32px auto}.prose iframe,.prose video,.prose object{max-width:100%}.prose iframe{width:100%;min-height:350px;border:0}.prose figure{margin:32px 0}.prose figcaption{color:var(--muted);font-size:12px}footer{border-top:1px solid var(--line);padding-top:23px;padding-bottom:34px;display:flex;justify-content:space-between;font-size:10px;color:var(--muted)}.pages{padding-left:20px}.pages li{margin-bottom:12px}

/* Display typography and a wandering header companion. */
header{gap:22px}.brand{font-family:var(--text);font-size:clamp(35px,6.4vw,76px);line-height:1.08;letter-spacing:-.065em;font-weight:700;font-kerning:normal;max-width:100%}.brand span{font-family:var(--text);font-size:14px;letter-spacing:0;line-height:1.8;margin-top:20px}nav{align-self:flex-start;gap:14px 30px;margin:0}main{padding-top:36px}
.dog-track{position:relative;width:100%;height:175px;margin-top:6px}.dog-walker{position:absolute;bottom:0;left:0;width:156px;will-change:transform}.dog-button{display:block;width:156px;height:104px;padding:0;border:0;background:transparent;cursor:pointer;touch-action:manipulation;-webkit-tap-highlight-color:transparent}.pixel-dog{display:block;width:100%;height:100%;overflow:visible;image-rendering:pixelated;filter:drop-shadow(0 1px 0 #ccccc5)}.facing-left .pixel-dog{transform:scaleX(-1)}.dog-body{transform-origin:35px 38px;animation:breathe 2.6s steps(2,end) infinite}.dog-tail{transform-origin:16px 26px;animation:wag .55s steps(2,end) infinite}.dog-head{transform-origin:49px 26px;animation:look 5s steps(1,end) infinite}.walking .dog-back-leg{animation:trot .45s steps(2,end) infinite}.walking .dog-front-leg{animation:trot .45s steps(2,end) infinite reverse}.dog-tongue{opacity:0}.barking .dog-head{animation:bark .2s steps(2,end) infinite}.barking .dog-tongue{opacity:1}.barking .dog-mouth{transform:translateY(2px)}.barking .dog-tail{animation-duration:.16s}.speech-bubble{position:absolute;bottom:108px;left:0;padding:11px 15px;background:#fff;font-family:var(--text);font-size:12px;line-height:1.6;opacity:0;visibility:hidden;transform:translateY(5px);transition:opacity .15s,transform .15s;z-index:3;overflow-wrap:anywhere}.speech-bubble::after{content:'';position:absolute;bottom:-7px;left:50%;width:7px;height:7px;background:#fff}.speech-bubble.visible{opacity:1;visibility:visible;transform:translateY(0)}.speech-bubble a{display:block;font-size:9px;line-height:1.5;color:var(--muted);margin-top:7px;text-decoration:none}
@keyframes breathe{0%,100%{transform:translateY(0)}50%{transform:translateY(-1px)}}@keyframes wag{0%,100%{transform:rotate(-12deg)}50%{transform:rotate(16deg)}}@keyframes look{0%,80%,100%{transform:rotate(0deg)}85%,95%{transform:rotate(-5deg)}}@keyframes bark{0%,100%{transform:translateY(0)}50%{transform:translate(1px,-2px)}}@keyframes trot{0%,100%{transform:translate(-1px,0)}50%{transform:translate(1px,-2px)}}
.profile-links,.document-links{list-style:none;padding:0;margin:0 0 38px}.profile-links li,.document-links li{border-bottom:1px solid var(--line);padding:16px 0}.profile-links a,.document-links a{display:flex;justify-content:space-between;gap:20px;text-decoration:none;overflow-wrap:anywhere}.profile-links span,.document-links span{font-size:10px;color:var(--muted);white-space:nowrap}.research-section{margin-top:45px}.original-name{color:var(--muted);font-size:12px}.project-index{margin-bottom:45px}.project-index h2{font-size:14px}.project-index ul{columns:2;list-style:none;padding:0;column-gap:30px}.project-index li{break-inside:avoid;margin-bottom:12px;font-size:12px}.artwork-figure{margin:30px 0}.prose .artwork-figure img{margin-bottom:12px}.prose .artwork-figure figcaption{font-size:12px;color:var(--ink)}.artwork-figure figcaption p{font-size:11px;color:var(--muted);margin:5px 0 28px}.artwork-figure[id]{scroll-margin-top:25px}.prose .artwork-figure h3{font-size:16px;line-height:1.5;margin:12px 0 5px}
.contact-email{display:inline-block;font-family:var(--mono);font-size:17px;font-weight:700;text-decoration:none;border-bottom:1px solid var(--muted);padding:5px 0}.contact-email span{margin-left:12px;font-weight:400}.contact-note{font-size:11px;color:var(--muted)}
@media(max-width:640px){header,main,footer{padding-left:24px;padding-right:24px}header{padding-top:29px;gap:23px}.brand{font-size:clamp(33px,8.7vw,53px);letter-spacing:-.07em}.brand span{font-size:12px;margin-top:16px}nav{gap:11px 22px;font-size:11px}main{padding-top:25px}.dog-track{height:165px;margin-top:8px}.dog-walker,.dog-button{width:140px}.dog-button{height:94px}.speech-bubble{bottom:98px;font-size:11px}.entries>li{padding:30px 0}.post-card.has-image{grid-template-columns:1fr;gap:20px}.post-image{width:100%}.post-image img{max-height:430px}.post-copy h3{font-size:19px;margin-top:10px}.excerpt{font-size:12px}.tags{gap:8px 14px}footer{gap:20px;font-size:9px}.prose iframe{min-height:240px}.full-post>h1{letter-spacing:-.8px}.profile-links a,.document-links a{flex-wrap:wrap;font-size:12px}.project-index ul{columns:1}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important}}
/* Pixel marks share a small, deliberately low-resolution grid. */
.prose .pixel-logo{display:inline-block;width:34px;height:34px;max-width:none;margin:0;image-rendering:pixelated;flex:none}.profile-links a.resource-link,.document-links a.resource-link{display:flex;align-items:center;gap:16px}.profile-links .resource-label,.document-links .resource-label{flex:1;min-width:0;font:inherit;color:var(--ink)}.profile-links .resource-meta,.document-links .resource-meta{font-size:10px;color:var(--muted);white-space:nowrap}.inline-resource{display:inline-flex;align-items:center;gap:4px;vertical-align:middle;max-width:100%}.prose .inline-resource .pixel-logo{width:24px;height:24px}.inline-resource .resource-label{min-width:0}.research-section{margin-top:34px}
/* The Art index has exactly one image for each project. */
.art-projects{list-style:none;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:40px 28px;padding:0;margin:0}.project-preview a{display:block;text-decoration:none}.prose .project-preview img{display:block;width:100%;height:245px;max-height:none;object-fit:contain;background:#e2e3de;margin:0;transition:background .2s}.project-preview a:hover img{background:#d8dcd2}.prose .project-preview h2{font-family:var(--mono);font-size:16px;font-weight:700;line-height:1.6;letter-spacing:-.4px;margin:14px 0 0}.project-preview h2 span{font-weight:400;font-size:12px;color:var(--muted)}.project-gallery{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:28px;margin-top:38px}.project-gallery figure{margin:0}.project-gallery img{display:block;width:100%;height:auto}.project-gallery figcaption{font-size:10px;color:var(--muted);margin-top:10px}.back-link{display:inline-block;font-size:11px;margin-bottom:32px}.art-detail>h1{margin-top:0}
@media(max-width:640px){.art-projects{grid-template-columns:1fr;gap:34px}.prose .project-preview img{height:265px}.project-gallery{grid-template-columns:1fr}.profile-links a.resource-link,.document-links a.resource-link{flex-wrap:nowrap;gap:10px}.prose .pixel-logo{width:28px;height:28px}.profile-links .resource-meta,.document-links .resource-meta{font-size:9px}.profile-links .resource-label{overflow-wrap:anywhere}}
/* A dog-eared page, with a few pixels out of place. */
.site-mark .mark-accent{opacity:.55}
.brand{display:grid;grid-template-columns:72px minmax(0,1fr);align-items:start;gap:20px;width:100%;font-size:clamp(35px,5.8vw,70px)}.site-mark{display:block;width:72px;height:81px;image-rendering:pixelated;margin-top:2px}.brand .brand-copy{display:block;font:inherit;color:inherit;letter-spacing:inherit;line-height:inherit;margin:0}.brand .brand-title{display:block;font:inherit;letter-spacing:inherit;line-height:inherit}.brand .brand-name{font-family:var(--text);font-size:14px;font-weight:400;color:var(--muted);letter-spacing:0;line-height:1.8;margin:20px 0 0}.captcha-page{max-width:680px;margin:auto}.captcha-page h1{margin-bottom:22px}.captcha-intro{color:var(--muted);font-size:13px;margin:0 0 34px}.captcha-terminal{border:1px solid #b8beb0;background:#e0e3d9}.terminal-label{display:flex;align-items:center;flex-wrap:wrap;gap:10px;border-bottom:1px solid #b8beb0;padding:12px 20px;font-family:var(--mono);font-size:10px}.terminal-label>span:last-child{color:var(--muted)}.terminal-dot{display:inline-block;width:6px;height:6px;background:#647f4f}.captcha-content,.captcha-success{padding:28px}.terminal-prompt{font-family:var(--mono);font-size:16px;line-height:1.75;margin:0 0 26px}.terminal-prompt>span:first-child{color:#6b805a}.captcha-options{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.captcha-options button{font:inherit;font-family:var(--mono);font-size:13px;min-height:58px;padding:10px;background:var(--paper);color:var(--ink);border:1px solid #aab39e;cursor:pointer;overflow-wrap:anywhere}.captcha-options button:hover:not(:disabled){background:#d3dcc7;border-color:#70865d}.captcha-options button:disabled{opacity:.4;cursor:default;text-decoration:line-through}.captcha-options button:focus-visible,.captcha-reroll:focus-visible,.captcha-mail:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.captcha-reroll{display:block;margin:24px 0 0;padding:0;background:transparent;border:0;border-bottom:1px solid #9aa58e;color:var(--muted);font:inherit;font-size:10px;cursor:pointer}.captcha-status{font-size:11px;line-height:1.8;color:var(--accent);padding:0 28px;margin:0 0 20px}.captcha-status:empty{display:none}.captcha-success{padding-top:30px;text-align:center}.captcha-paw{display:block;margin:0 auto 20px;image-rendering:pixelated}.captcha-success>p:first-of-type{font-family:var(--mono);font-size:20px;line-height:1.6;margin-bottom:26px}.captcha-mail{display:inline-block;padding:12px 20px;background:var(--ink);color:var(--paper);font-size:13px;text-decoration:none}.captcha-mail:hover{background:var(--accent);color:white}.captcha-mail-note{font-size:10px;color:var(--muted);margin:20px auto 0;max-width:300px}.captcha-success[hidden],.captcha-content[hidden]{display:none}.honey-field{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden}
@media(max-width:640px){.brand{grid-template-columns:36px minmax(0,1fr);gap:12px;font-size:clamp(30px,8vw,48px)}.site-mark{width:36px;height:41px}.brand .brand-name{font-size:12px;margin-top:16px}.captcha-content,.captcha-success{padding:22px}.terminal-label{padding:12px 18px;font-size:9px}.terminal-prompt{font-size:14px}.captcha-options{gap:8px}.captcha-options button{font-size:11px;min-height:60px;padding:8px 5px}.captcha-status{padding:0 22px}}
/* A friendly face for a quick bark test. */
.bark-heading{display:flex;align-items:center;justify-content:space-between;gap:28px;max-width:510px;margin-bottom:18px}.captcha-page .bark-heading h1{font-family:var(--text);font-size:clamp(24px,3vw,32px);font-weight:300;line-height:1.5;letter-spacing:-.7px;color:#4b5247;margin:0}.bark-face{display:block;flex:none;width:100px;height:100px;overflow:visible;image-rendering:pixelated;filter:drop-shadow(0 1px 0 #cbd0c3)}.bark-face-body{animation:face-bob 3.2s steps(2,end) infinite}.bark-ear-right{transform-box:fill-box;transform-origin:50% 100%;animation:face-ear 4.6s steps(2,end) infinite}.bark-eyes{transform-box:fill-box;transform-origin:center;animation:face-blink 5.4s steps(1,end) infinite}.bark-face-tongue{animation:face-tongue 2s steps(2,end) infinite}
@keyframes face-bob{0%,100%{transform:translateY(0)}50%{transform:translateY(-1px)}}@keyframes face-ear{0%,75%,100%{transform:translateY(0)}80%,90%{transform:translateY(-2px)}}@keyframes face-blink{0%,91%,95%,100%{transform:scaleY(1)}92%,94%{transform:scaleY(.2)}}@keyframes face-tongue{0%,100%{transform:translateY(0)}50%{transform:translateY(1px)}}
/* Tiny paw prints appear on preview images; the artwork itself stays still. */
.project-media{position:relative;display:block;isolation:isolate}.project-media::before,.project-media::after{content:'';position:absolute;z-index:1;pointer-events:none;width:18px;height:18px;image-rendering:pixelated;background:url('/assets/icons/paw-print.svg') center/contain no-repeat;filter:drop-shadow(0 1px 1px #404b3566);opacity:0;transition:opacity .18s}.project-media::before{right:43px;bottom:14px}.project-media::after{right:17px;bottom:35px}.project-preview a:focus-visible .project-media::before,.project-preview a:focus-visible .project-media::after{opacity:.48;animation:paw-arrive .65s steps(3,end) both}.project-preview a:focus-visible .project-media::after{animation-delay:.16s}
@media(hover:hover){.project-preview a:hover .project-media::before,.project-preview a:hover .project-media::after{opacity:.48;animation:paw-arrive .65s steps(3,end) both}.project-preview a:hover .project-media::after{animation-delay:.16s}}
@keyframes paw-arrive{0%{opacity:0;transform:translateY(4px)}50%{opacity:.25;transform:translateY(2px)}100%{opacity:.48;transform:translateY(0)}}
@media(max-width:640px){.bark-heading{gap:18px}.bark-face{width:76px;height:76px}.captcha-page .bark-heading h1{font-size:24px;letter-spacing:-.6px}.project-media::before,.project-media::after{width:16px;height:16px}}
@media(prefers-reduced-motion:reduce){.bark-face-body,.bark-ear-right,.bark-eyes,.bark-face-tongue,.project-media::before,.project-media::after{animation:none!important;transition:none!important}}
/* Small habits for a curious, distracted terrier. */
.dog-walker{z-index:1}.dog-pose{display:none}.dog-standing{display:inline}.dog-walker .dog-head{animation:none;transform-origin:49px 26px}.dog-gaze{transform-origin:49px 26px;transform:translate(var(--gaze-x,0px),var(--gaze-y,0px)) rotate(var(--gaze-angle,0deg));transition:transform .18s steps(2,end)}.dog-walker .dog-body{animation:terrier-breathe 2.8s steps(2,end) infinite}.dog-walker .dog-tail{animation:terrier-tail .75s steps(2,end) infinite}.terrier-ear-front{transform:translateY(1px)}.terrier-ear-back{animation:terrier-ear 8s steps(1,end) infinite;transform-origin:47px 15px}.dog-eye-open{transform-box:fill-box;transform-origin:center;animation:terrier-blink 5.7s steps(1,end) infinite}.dog-eye-closed,.dog-yawn-mouth{display:none}.dog-carried-bone{opacity:0}.dog-scratch-foot{display:none}.dog-scent,.dog-sleep-marks{display:none}
.walking .dog-body{animation:terrier-bounce var(--stride,.52s) steps(4,end) infinite}.walking .dog-back-leg{animation:terrier-back-step var(--stride,.52s) steps(3,end) infinite}.walking .dog-front-leg{animation:terrier-front-step var(--stride,.52s) steps(4,end) infinite}.dog-walker[data-familiar=yes] .dog-tail{animation-duration:.5s}.dog-walker[data-action=curious] .dog-head{transform:rotate(-6deg) translateY(-1px)}.dog-walker[data-action=curious] .terrier-ear-front{transform:translateY(-1px)}.dog-walker[data-action=think] .dog-head{animation:terrier-ponder .4s steps(3,end) both}.dog-walker[data-action=think] .dog-tail{animation-duration:1.2s}.dog-walker[data-action=think] .terrier-ear-back{animation:none;transform:rotate(-10deg)}.dog-walker[data-action=speak] .dog-head{animation:terrier-talk .22s steps(2,end) infinite}.dog-walker[data-action=speak] .dog-tail,.dog-walker[data-action=pleased] .dog-tail{animation-duration:.24s}.dog-walker[data-action=pleased] .dog-head{transform:rotate(-3deg)}.dog-walker[data-action=hop] .dog-body{animation:terrier-hop .3s steps(4,end) both}.dog-walker[data-action=hop] .dog-tail{animation-duration:.18s}
.dog-walker[data-action=sniff] .dog-head{animation:terrier-sniff .6s steps(3,end) infinite}.dog-walker[data-action=sniff] .dog-front-leg{transform:translateY(1px)}.dog-walker[data-action=sniff] .dog-scent{display:inline;animation:terrier-scent .7s steps(2,end) infinite}.dog-walker[data-action=sit] .dog-standing,.dog-walker[data-action=scratch] .dog-standing,.dog-walker[data-action=yawn] .dog-standing,.dog-walker[data-action=stretch] .dog-standing,.dog-walker[data-action=nap] .dog-standing{display:none}.dog-walker[data-action=sit] .dog-sitting,.dog-walker[data-action=scratch] .dog-sitting,.dog-walker[data-action=yawn] .dog-sitting{display:inline}.dog-walker[data-action=scratch] .dog-scratch-foot{display:inline;transform-origin:33px 36px;animation:terrier-scratch .18s steps(2,end) infinite}.dog-walker[data-action=scratch] .dog-head{transform:rotate(-9deg)}.dog-walker[data-action=stretch] .dog-stretching{display:inline;transform-origin:22px 32px;animation:terrier-stretch 1.8s steps(3,end) both}.dog-walker[data-action=yawn] .dog-yawn-mouth{display:inline}.dog-walker[data-action=yawn] .dog-mouth{display:none}.dog-walker[data-action=yawn] .dog-head{animation:terrier-yawn 1.8s steps(3,end) both}.dog-walker[data-action=yawn] .dog-tongue{opacity:1;transform:translateY(1px)}.dog-walker[data-action=yawn] .dog-eye-open{animation:none;transform:scaleY(.4)}.dog-walker[data-action=nap] .dog-sleeping{display:inline}.dog-walker[data-action=nap] .dog-eye-open{display:none}.dog-walker[data-action=nap] .dog-eye-closed{display:inline}.dog-walker[data-action=nap] .dog-sleep-marks{display:inline;animation:terrier-doze 2.6s steps(3,end) infinite}.dog-walker[data-action=nap] .dog-shadow{rx:27px}.dog-walker[data-action=nap] .dog-sleeping{animation:terrier-breathe 3s steps(2,end) infinite}.dog-walker[data-carrying=yes] .dog-carried-bone{opacity:1}.dog-walker[data-carrying=yes] .dog-tongue{opacity:0}.dog-walker[data-carrying=yes] .dog-tail{animation-duration:.3s}.dog-walker[data-action=chase] .terrier-ear-front{transform:translateY(-2px)}
.dog-discovery{position:absolute;bottom:12px;left:0;width:20px;height:20px;pointer-events:none;z-index:0;image-rendering:pixelated}.dog-discovery[hidden]{display:none}.dog-discovery svg{display:block;width:100%;height:100%}.discovery-bone,.discovery-pixel,.discovery-punctuation{display:none}.dog-discovery[data-kind=bone] .discovery-bone,.dog-discovery[data-kind=pixel] .discovery-pixel,.dog-discovery[data-kind=punctuation] .discovery-punctuation{display:inline}.dog-discovery[data-kind=punctuation]{animation:terrier-question 1s steps(3,end) infinite}.dog-discovery[data-kind=pixel]{opacity:.7}
@keyframes terrier-breathe{0%,100%{transform:translateY(0)}50%{transform:translateY(-1px)}}@keyframes terrier-bounce{0%,100%{transform:translateY(0)}25%{transform:translateY(-1px)}55%{transform:translateY(0)}80%{transform:translateY(-2px)}}@keyframes terrier-back-step{0%,100%{transform:translate(-1px,0)}35%{transform:translate(2px,-2px)}70%{transform:translate(1px,0)}}@keyframes terrier-front-step{0%,100%{transform:translate(1px,-1px)}30%{transform:translate(-2px,0)}65%{transform:translate(0,-2px)}80%{transform:translate(2px,0)}}@keyframes terrier-tail{0%,100%{transform:rotate(-10deg)}50%{transform:rotate(18deg)}}@keyframes terrier-blink{0%,92%,96%,100%{transform:scaleY(1)}93%,95%{transform:scaleY(.2)}}@keyframes terrier-ear{0%,86%,92%,100%{transform:rotate(0deg)}88%,90%{transform:rotate(-14deg)}}@keyframes terrier-ponder{0%{transform:rotate(-2deg)}100%{transform:rotate(-8deg) translateY(-1px)}}@keyframes terrier-talk{0%,100%{transform:translateY(0)}50%{transform:translate(1px,-1px)}}@keyframes terrier-hop{0%,100%{transform:translateY(0)}35%,55%{transform:translateY(-5px)}80%{transform:translateY(-1px)}}@keyframes terrier-sniff{0%,100%{transform:rotate(7deg) translateY(1px)}50%{transform:rotate(10deg) translateY(2px)}}@keyframes terrier-scent{0%{opacity:0;transform:translateY(1px)}50%{opacity:.7}100%{opacity:0;transform:translateY(-2px)}}@keyframes terrier-scratch{0%,100%{transform:rotate(-18deg)}50%{transform:rotate(-47deg) translateY(-2px)}}@keyframes terrier-stretch{0%,100%{transform:scaleX(1)}45%,70%{transform:scaleX(1.025) translateY(1px)}}@keyframes terrier-yawn{0%,100%{transform:rotate(0deg)}40%,70%{transform:rotate(-7deg) translateY(-1px)}}@keyframes terrier-doze{0%{opacity:0;transform:translateY(1px)}35%,65%{opacity:.7}100%{opacity:0;transform:translateY(-3px)}}@keyframes terrier-question{0%,100%{transform:translateY(0)}50%{transform:translateY(-3px)}}
@media(prefers-reduced-motion:reduce){.dog-walker *,.dog-discovery{animation:none!important;transition:none!important}.dog-gaze{transform:none}.dog-walker[data-action=hop] .dog-body,.dog-walker[data-action=think] .dog-head{transform:none}}
/* Quiet, discoverable reactions to a visitor's hand. */
.dog-walker[data-action=watch] .dog-standing{display:none}
.dog-walker[data-action=watch] .dog-sitting{display:inline}
.dog-walker[data-action=watch] .dog-head{transform:rotate(-7deg) translateY(-1px)}
.dog-walker[data-action=watch] .terrier-ear-front{transform:translateY(-2px)}
.dog-walker[data-action=watch] .dog-tail{animation-duration:.4s}
.dog-walker[data-action=pet] .dog-head{transform:rotate(-8deg) translate(-1px,-1px)}
.dog-walker[data-action=pet] .dog-eye-open{display:none}
.dog-walker[data-action=pet] .dog-eye-closed{display:inline}
.dog-walker[data-action=pet] .dog-tail{animation-duration:.19s}
.dog-walker[data-action=pet] .terrier-ear-front{transform:rotate(9deg) translateY(1px);transform-origin:55px 16px}
.dog-affection{position:absolute;top:-4px;right:17%;width:17px;height:15px;pointer-events:none;color:#ac7274;opacity:0}
.dog-affection svg{display:block;width:100%;height:100%;image-rendering:pixelated}
.facing-left .dog-affection{right:auto;left:17%}
.dog-walker[data-action=pet] .dog-affection{opacity:1;animation:terrier-loved 1.5s steps(4,end) both}
@keyframes terrier-loved{0%{opacity:0;transform:translateY(3px)}20%,70%{opacity:.85}100%{opacity:0;transform:translateY(-9px)}}
/* A fixed pixel speaker keeps sound control within reach as the dog wanders. */
.dog-companion{display:flow-root;position:relative;width:100%}
.dog-companion .dog-track{width:calc(100% - 52px)}
.dog-audio-toggle{position:absolute;right:0;bottom:12px;display:grid;place-items:center;width:44px;height:44px;padding:10px;border:1px solid transparent;background:transparent;color:var(--muted);cursor:pointer;touch-action:manipulation}
.dog-audio-toggle svg{display:block;width:24px;height:24px;image-rendering:pixelated}
.dog-audio-toggle:hover{color:var(--ink);border-color:var(--line)}
.dog-sound-muted{display:none}
.dog-audio-toggle[data-audio=off] .dog-sound-waves{display:none}
.dog-audio-toggle[data-audio=off] .dog-sound-muted{display:inline;color:#9b735d}
.dog-audio-toggle[hidden]{display:none}
/* The title shares the terrier's pixel edges; the name stays in the text face. */
.brand .brand-title{font-family:"Departure Mono",var(--mono);font-size:66px;font-weight:400;letter-spacing:-.015em;line-height:1.16;font-synthesis:none;text-wrap:balance}
@media(max-width:1000px){.brand .brand-title{font-size:55px}}
@media(max-width:640px){.brand .brand-title{font-size:33px;letter-spacing:-.02em;line-height:1.2}}
/* A quiet bibliography, with an individual pixel illustration for every text. */
.prose .reading-shortcut{font-size:12px;margin:-12px 0 34px}
.research-reading{margin-top:62px;scroll-margin-top:28px}
.reading-heading{display:flex;align-items:baseline;justify-content:space-between;gap:20px}
.prose .reading-heading h2{font-size:25px;font-weight:400;margin:0;scroll-margin-top:28px}
.reading-heading>span{font-size:10px;color:var(--muted);white-space:nowrap}
.prose .reading-intro{font-size:12px;color:var(--muted);margin:14px 0 18px}
.reading-jumps{font-size:11px;line-height:1.9;gap:5px 12px;margin-bottom:38px}
.reading-jumps a{text-decoration:none;border-bottom:1px solid var(--line)}
.prose .publication-group>h3{font-size:13px;font-weight:400;letter-spacing:0;margin:42px 0 15px;scroll-margin-top:28px}
.publication-group>h3>span{font-size:10px;color:var(--muted);margin-left:10px}
.publication-list{list-style:none;padding:0;margin:0}
.publication-list>li{border-top:1px solid var(--line)}
.publication-link{display:grid;grid-template-columns:44px minmax(0,1fr);gap:22px;padding:25px 0;text-decoration:none}
.prose .publication-icon{display:block;width:44px;height:50px;max-width:none;margin:5px 0 0;image-rendering:pixelated}
.publication-copy{min-width:0}
.prose .publication-meta{font-size:10px;color:var(--muted);margin:0 0 8px;line-height:1.6}
.publication-copy h4{font-family:var(--mono);font-size:16px;font-weight:400;line-height:1.65;letter-spacing:-.35px;margin:0 0 11px}
.prose .publication-citation{font-size:11px;color:var(--muted);line-height:1.8;margin:0 0 10px}
.publication-access{display:block;font-size:10px;color:var(--accent);text-underline-offset:4px}
.publication-link:hover .publication-access,.publication-link:focus-visible .publication-access{text-decoration:underline}
.publication-link:hover h4{color:var(--accent)}
@media(max-width:640px){.publication-link{grid-template-columns:36px minmax(0,1fr);gap:15px;padding:23px 0}.prose .publication-icon{width:36px;height:41px}.publication-copy h4{font-size:14px;letter-spacing:-.2px}.publication-meta,.publication-citation{overflow-wrap:anywhere}.reading-jumps{font-size:10px;gap:5px 8px}.research-reading{margin-top:48px}}
/* Keep long imports usable on small screens, and let a sleeping header rest. */
.full-post>h1{overflow-wrap:anywhere}
.post-greeting{margin:0 0 32px}.post-greeting picture,.post-greeting img{display:block;width:100%;height:auto}.post-greeting img,.post-image picture img{image-rendering:pixelated}
.prose pre{max-width:100%;overflow-x:auto;white-space:pre;padding:16px;background:#e0e1dc;font-size:12px;line-height:1.7}
.prose table{display:block;max-width:100%;overflow-x:auto}
.prose audio{display:block;width:100%;max-width:100%;margin:24px 0}
.dog-track[data-paused=yes] *{animation-play-state:paused!important}
header>nav a{display:inline-flex;align-items:center;min-height:44px}
.pagination{display:flex;justify-content:space-between;align-items:center;gap:14px;margin-top:36px;font-size:11px}
.pagination a{display:inline-flex;align-items:center;min-height:44px}
.pagination>span{color:var(--muted);font-size:10px}
@media(max-width:640px){.pagination{gap:8px;font-size:10px}.pagination>span{font-size:9px}}
.draft-notice{font-size:11px;padding:12px 16px;border:1px dashed #89977d;color:var(--accent);margin:0 0 28px}
.media-embed{margin:32px 0}.media-embed video{display:block;width:100%;height:auto;background:#dddeda}
.prose .media-embed iframe{display:block;width:100%;height:auto;aspect-ratio:16/10;min-height:0;border:0;background:#e0e1dc}
.prose .apple-music iframe{height:450px;aspect-ratio:auto;min-height:450px;background:transparent}
.embed-start{display:block;width:100%;min-height:100px;padding:24px;border:1px solid var(--line);background:#e0e3d9;color:var(--accent);font:inherit;cursor:pointer}
.embed-start:hover{background:#d8dfcf}.embed-source{display:inline-block;font-size:11px;margin:12px 0}.media-embed figcaption{margin-top:12px}
#preview-error{position:fixed;z-index:20;bottom:0;left:0;right:0;max-height:40vh;overflow:auto;margin:0;padding:18px;background:#fff5eb;color:#763e20;white-space:pre-wrap;font-size:12px}
/* The same terrier, with a little occupation for each part of the site. */
.dog-spectacles{display:none}
.dog-track:not([data-scene=default]){height:195px}
.dog-walker:not([data-scene=default]){width:224px;max-width:100%}
.dog-walker:not([data-scene=default]) .dog-button{width:100%;height:auto;aspect-ratio:104/64}
.dog-walker:not([data-scene=default]) .speech-bubble{bottom:148px}

/* Reading papers, turning a page, making a note, and an occasional idea. */
.dog-walker[data-scene=research] .dog-scene-reading{display:none}
.dog-walker[data-scene=research]:not([data-action=walk]) .dog-standing{display:none}
.dog-walker[data-scene=research]:not([data-action=walk]) .dog-sitting,
.dog-walker[data-scene=research]:not([data-action=walk]) .dog-scene-reading,
.dog-walker[data-scene=research]:not([data-action=walk]) .dog-spectacles{display:inline}
.dog-walker[data-scene=research] .dog-sitting .dog-head{transform:rotate(7deg) translateY(1px)}
.dog-walker[data-scene=research][data-action=eureka] .dog-head{transform:rotate(-8deg) translateY(-1px)}
.dog-scene-page,.dog-scene-pencil,.dog-scene-idea{display:none}
.dog-walker[data-action=page-turn] .dog-scene-page{display:inline;transform-origin:68px 42px;animation:dog-page-turn 1.9s steps(4,end) both}
.dog-walker[data-action=page-turn] .dog-scene-reading-paw{animation:dog-turn-paw 1.9s steps(3,end) both}
.dog-walker[data-action=annotate] .dog-scene-pencil{display:inline;animation:dog-scribble .6s steps(2,end) infinite}
.dog-walker[data-action=annotate] .dog-scene-reading-paw{animation:dog-scribble .6s steps(2,end) infinite}
.dog-walker[data-action=eureka] .dog-scene-idea{display:inline;animation:dog-idea 2.3s steps(3,end) both}
.dog-walker[data-action=eureka] .dog-tail{animation-duration:.25s}
@keyframes dog-page-turn{0%,15%{transform:scaleX(1)}45%{transform:scaleX(.1) translateY(-3px)}75%,100%{transform:scaleX(-1)}}
@keyframes dog-turn-paw{0%,100%{transform:translate(0,0)}40%,65%{transform:translate(11px,-5px)}}
@keyframes dog-scribble{0%,100%{transform:translate(0,0)}50%{transform:translate(2px,-1px)}}
@keyframes dog-idea{0%{opacity:0;transform:translateY(3px)}25%,75%{opacity:1;transform:translateY(0)}100%{opacity:0;transform:translateY(-3px)}}

/* Four slightly questionable approaches to making an artwork. */
.dog-scene-sand-ground,.dog-scene-sand,.dog-scene-pee,.dog-scene-canvas,.dog-scene-brush,.dog-scene-paw-drawing,.dog-scene-art-spark{display:none}
.dog-walker[data-action=paint] .dog-scene-canvas,.dog-walker[data-action=paint] .dog-scene-brush{display:inline}
.dog-walker[data-action=paint] .dog-head{transform:rotate(-5deg)}
.dog-walker[data-action=paint] .dog-front-leg{transform:translate(-1px,-3px)}
.dog-walker[data-action=paint] .dog-scene-brush{transform-origin:49px 34px;animation:dog-brush .8s steps(3,end) infinite}
.dog-walker[data-action=paint] .dog-scene-paint-mark{transform-origin:74px 25px;animation:dog-paint 3.2s steps(5,end) both}
.dog-walker[data-action=paint] .dog-scene-paint-peach{animation-delay:1s}
.dog-walker[data-action=paint] .dog-scene-art-spark{display:inline;animation:dog-idea 2.2s steps(3,end) infinite}
.dog-walker[data-action=sand] .dog-scene-sand-ground,.dog-walker[data-action=sand] .dog-scene-sand{display:inline}
.dog-walker[data-action=sand] .dog-back-leg{transform-origin:24px 31px;animation:dog-sand-kick .5s steps(3,end) infinite}
.dog-walker[data-action=sand] .dog-head{transform:rotate(-5deg)}
.dog-scene-sand path{animation:dog-sand .7s steps(4,end) infinite}
.dog-scene-sand path:nth-child(2){animation-delay:-.2s}.dog-scene-sand path:nth-child(3){animation-delay:-.4s}.dog-scene-sand path:nth-child(4){animation-delay:-.6s}
.dog-walker[data-action=pee] .dog-scene-pee{display:inline}
.dog-walker[data-action=pee] .dog-back-leg{transform-origin:24px 31px;transform:rotate(-65deg) translateY(-1px)}
.dog-walker[data-action=pee] .dog-body{animation:none;transform:translateY(-1px)}
.dog-walker[data-action=pee] .dog-head{transform:rotate(5deg)}
.dog-walker[data-action=pee] .dog-tail{animation-duration:1.4s}
.dog-scene-pee-arc{animation:dog-pee 1.2s steps(3,end) infinite}
.dog-walker[data-action=draw] .dog-scene-paw-drawing{display:inline;transform-origin:34px 46px;animation:dog-paint 3.8s steps(6,end) both}
.dog-walker[data-action=draw] .dog-front-leg{animation:dog-paw-draw .6s steps(3,end) infinite}
.dog-walker[data-action=draw] .dog-head{transform:rotate(9deg) translateY(1px)}
@keyframes dog-brush{0%,100%{transform:rotate(-6deg)}50%{transform:rotate(5deg) translateX(1px)}}
@keyframes dog-paint{0%{opacity:0;transform:scaleX(.1)}15%{opacity:1}100%{opacity:1;transform:scaleX(1)}}
@keyframes dog-sand-kick{0%,100%{transform:rotate(0deg)}45%{transform:rotate(42deg) translateX(-2px)}70%{transform:rotate(-10deg)}}
@keyframes dog-sand{0%{opacity:0;transform:translate(3px,0)}20%{opacity:1}65%{opacity:.8;transform:translate(-6px,-6px)}100%{opacity:0;transform:translate(-10px,1px)}}
@keyframes dog-pee{0%,100%{opacity:.5}50%{opacity:1}}
@keyframes dog-paw-draw{0%,100%{transform:translate(0,0)}30%{transform:translate(5px,-3px)}65%{transform:translate(-2px,-1px)}}

/* A companionable mug, a foam inspection, and a small sneeze. */
.dog-scene-foam,.dog-scene-beer-scent{display:none}
.dog-walker[data-action=cheers] .dog-scene-mug{animation:dog-cheers 1.8s steps(3,end) infinite}
.dog-walker[data-action=cheers] .dog-head{transform:rotate(-5deg) translate(2px,-1px)}
.dog-walker[data-action=cheers] .dog-tail{animation-duration:.3s}
.dog-walker[data-action=cheers] .dog-scene-foam,.dog-walker[data-action=sneeze] .dog-scene-foam{display:inline;animation:dog-foam-pop 1.6s steps(4,end) infinite}
.dog-walker[data-action=foam-sniff] .dog-head{transform:rotate(-9deg) translateX(3px)}
.dog-walker[data-action=foam-sniff] .dog-scene-beer-scent{display:inline;animation:terrier-scent 1s steps(3,end) infinite}
.dog-walker[data-action=sneeze] .dog-head{animation:dog-sneeze .4s steps(3,end) infinite}
@keyframes dog-cheers{0%,100%{transform:translateY(0)}35%,65%{transform:translateY(-3px)}}
@keyframes dog-foam-pop{0%{opacity:0;transform:translateY(0)}30%{opacity:1}100%{opacity:0;transform:translateY(-5px)}}
@keyframes dog-sneeze{0%,100%{transform:translateX(0)}30%{transform:translate(-2px,-2px)}65%{transform:translate(2px,1px)}}

/* The seated terrier fits in a tiny, peach-and-sage aeroplane. */
.dog-walker[data-scene=pilot] .dog-button{aspect-ratio:112/80}
.dog-walker[data-scene=pilot] .pixel-dog{transform:translateY(var(--flight-lift,-13px))}
.dog-walker[data-scene=pilot].facing-left .pixel-dog{transform:translateY(var(--flight-lift,-13px)) scaleX(-1)}
.dog-walker[data-scene=pilot] .speech-bubble{bottom:174px}
.dog-walker[data-scene=pilot] .dog-standing,.dog-walker[data-scene=pilot] .dog-stretching,.dog-walker[data-scene=pilot] .dog-sleeping,.dog-walker[data-scene=pilot] .dog-shadow{display:none!important}
.dog-walker[data-scene=pilot] .dog-sitting{display:inline!important;transform:translateY(-9px)}
.dog-walker[data-scene=pilot] .dog-spectacles{display:inline;fill:#687663}
.dog-walker[data-scene=pilot] .dog-sitting .dog-tail{display:none}
.dog-scene-propeller{transform-origin:104px 32px;animation:dog-propeller .13s steps(2,end) infinite}
.dog-scene-scarf{transform-origin:40px 22px;animation:dog-scarf .6s steps(2,end) infinite}
.dog-scene-cloud{animation:dog-cloud 11s steps(12,end) infinite}
.dog-scene-cloud-near{animation-delay:-5.5s;animation-duration:14s}
.dog-walker[data-action=bank] .dog-scene-wing{transform-origin:53px 34px;animation:dog-bank 2s steps(4,end) both}
.dog-walker[data-action=bank] .dog-head{transform:rotate(-6deg)}
@keyframes dog-propeller{0%,100%{transform:scaleY(1)}50%{transform:scaleY(.15)}}
@keyframes dog-scarf{0%,100%{transform:translateY(0)}50%{transform:translateY(-2px)}}
@keyframes dog-cloud{0%{opacity:0;transform:translateX(8px)}20%,70%{opacity:.7}100%{opacity:0;transform:translateX(-16px)}}
@keyframes dog-bank{0%,100%{transform:translateY(0)}45%,65%{transform:translate(1px,-3px)}}
@media(prefers-reduced-motion:reduce){
  .dog-walker[data-scene=pilot] .pixel-dog{transform:none}
  .dog-walker[data-scene=pilot].facing-left .pixel-dog{transform:scaleX(-1)}
}

/* Discoverable play: the paw changes the occupation, the speaker controls sound. */
.dog-play{position:absolute;right:0;bottom:62px;display:grid;place-items:center;width:44px;height:44px;padding:10px;border:1px solid transparent;background:transparent;color:var(--muted);cursor:pointer;touch-action:manipulation}
.dog-play svg{display:block;width:24px;height:24px;image-rendering:pixelated}
.dog-play:hover{color:var(--accent);border-color:var(--line)}
.dog-play:active svg{transform:translateY(2px)}
.dog-play[hidden]{display:none}
.dog-walker[data-bond=friend][data-action=pet] .dog-affection{width:22px;height:19px;color:#b17e71}
.dog-scene-question,.dog-scene-second-paper,.dog-scene-paper-plane,.dog-scene-palette,.dog-scene-paint-pot,.dog-scene-pawprints,.dog-scene-paint-paw,.dog-scene-coaster,.dog-scene-bubbles,.dog-foam-beard,.dog-scene-wind,.dog-scene-runway,.dog-scene-mail,.dog-scene-salute{display:none}

/* A difficult question, comparing sources, then a thought that takes flight. */
.dog-walker[data-scene=research][data-action=question] .dog-scene-question{display:inline;animation:dog-question 2.5s steps(3,end) infinite}
.dog-walker[data-scene=research][data-action=question] .dog-head{transform:rotate(-12deg) translateY(-1px)}
.dog-walker[data-action=compare] .dog-scene-second-paper{display:inline;animation:dog-compare-paper 1.8s steps(3,end) infinite}
.dog-walker[data-scene=research][data-action=compare] .dog-head{animation:dog-compare 1.8s steps(2,end) infinite}
.dog-walker[data-action=paper-plane] .dog-scene-paper-plane{display:inline;animation:dog-paper-flight 3.4s steps(8,end) both}
.dog-walker[data-action=follow-plane] .dog-scene-paper-plane{display:inline;transform:translate(15px,-28px);animation:dog-paper-hover 1.5s steps(4,end) infinite}
.dog-walker[data-scene=research]:is([data-action=paper-plane],[data-action=follow-plane]) .dog-head{transform:rotate(-14deg)}
.dog-walker[data-action=daydream] .dog-eye-open{display:none}
.dog-walker[data-action=daydream] .dog-eye-closed{display:inline}
.dog-walker[data-action=daydream] .dog-sleep-marks{display:inline;animation:terrier-doze 2.6s steps(3,end) infinite}
.dog-walker[data-action=daydream] .dog-head{transform:rotate(12deg) translateY(3px)}
.dog-walker[data-action=daydream] .dog-tail{animation-duration:2.2s}
.dog-walker[data-action=wake] .dog-head{animation:dog-wake 1.6s steps(4,end) both}
@keyframes dog-question{0%,100%{transform:translateY(0)}50%{transform:translateY(-2px)}}
@keyframes dog-compare-paper{0%,100%{transform:translateY(0)}50%{transform:translateY(-3px)}}
@keyframes dog-compare{0%,100%{transform:rotate(7deg)}50%{transform:rotate(-9deg)}}
@keyframes dog-paper-flight{0%,15%{transform:translate(-8px,3px)}40%{transform:translate(0,-12px)}75%,100%{transform:translate(15px,-28px)}}
@keyframes dog-paper-hover{0%,100%{transform:translate(15px,-28px)}50%{transform:translate(11px,-25px)}}
@keyframes dog-wake{0%{transform:rotate(12deg) translateY(3px)}35%{transform:rotate(-9deg)}65%,100%{transform:rotate(0deg)}}

/* The work survives between gestures; each new edition changes its palette. */
.dog-walker[data-scene=art][data-medium=paint]:is([data-action=mix],[data-action=inspect],[data-action=proud]) .dog-scene-canvas{display:inline}
.dog-walker[data-scene=art][data-medium=paint]:not([data-action=walk]) .dog-scene-paint-pot{display:inline}
.dog-walker[data-action=mix] .dog-scene-palette{display:inline;animation:dog-scribble .7s steps(3,end) infinite}
.dog-walker[data-action=mix] .dog-head{transform:rotate(9deg)}
.dog-walker[data-scene=art][data-medium=paint]:is([data-progress="2"],[data-progress="3"],[data-progress="4"]) .dog-scene-paint-paw{display:inline}
.dog-walker[data-scene=art][data-round="1"] .dog-scene-paint-mark{fill:#a4a0ba}
.dog-walker[data-scene=art][data-round="1"] .dog-scene-paint-peach{fill:#d6b575}
.dog-walker[data-scene=art][data-round="2"] .dog-scene-paint-mark{fill:#91aeb0}
.dog-walker[data-scene=art][data-round="2"] .dog-scene-paint-peach{fill:#c59b9b}
.dog-walker[data-scene=art][data-medium=earth]:is([data-action=inspect],[data-action=proud]) .dog-scene-paw-drawing,
.dog-walker[data-scene=art][data-medium=earth]:is([data-action=inspect],[data-action=proud]) .dog-scene-sand-ground{display:inline}
.dog-walker[data-scene=art][data-medium=paws]:not([data-action=walk]) .dog-scene-pawprints,
.dog-walker[data-action=stamp] .dog-scene-paint-paw{display:inline}
.dog-walker[data-action=stamp] .dog-scene-pawprints path{animation:dog-print 1.4s steps(1,end) both}
.dog-walker[data-action=stamp] .dog-scene-pawprints path:nth-child(2){animation-delay:1.2s}
.dog-walker[data-action=stamp] .dog-scene-pawprints path:nth-child(3){animation-delay:2.5s}
.dog-walker[data-action=stamp] .dog-front-leg{animation:dog-paw-draw .7s steps(3,end) infinite}
.dog-walker[data-action=shake] .dog-body{animation:dog-shake .4s steps(4,end) infinite}
.dog-walker[data-action=shake] .terrier-ear-front{animation:dog-scarf .2s steps(2,end) infinite}
.dog-walker[data-action=inspect] .dog-head{transform:rotate(-11deg) translateX(-1px)}
.dog-walker[data-action=inspect] .dog-tail{animation-duration:1.8s}
.dog-walker[data-action=proud] .dog-head{transform:rotate(-9deg) translateY(-2px)}
.dog-walker[data-action=proud] .dog-tail{animation-duration:.22s}
.dog-walker[data-action=proud] .dog-scene-art-spark{display:inline;animation:dog-idea 2.2s steps(3,end) both}
@keyframes dog-print{0%{opacity:0}100%{opacity:1}}
@keyframes dog-shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-2px)}75%{transform:translateX(2px)}}

/* A foam moustache, a balancing act, and a coaster with unexpected potential. */
.dog-walker[data-scene=beer][data-action=moustache] .dog-foam-beard,
.dog-walker[data-scene=beer][data-action=balance] .dog-foam-beard{display:inline}
.dog-walker[data-action=moustache] .dog-head{transform:rotate(-8deg) translateY(-1px)}
.dog-walker[data-action=moustache] .dog-tail{animation-duration:.28s}
.dog-walker[data-action=coaster-spin] .dog-scene-coaster{display:inline;transform-origin:60px 23px;animation:dog-coaster 1.1s steps(6,end) infinite}
.dog-walker[data-action=coaster-spin] .dog-head{transform:rotate(-8deg)}
.dog-walker[data-scene=beer][data-action=balance] .dog-scene-foam{display:inline;transform:translate(-16px,8px);animation:dog-balance .8s steps(3,end) infinite}
.dog-walker[data-scene=beer][data-action=balance] .dog-head{transform:rotate(-10deg)}
.dog-walker[data-action=bubble-chase] .dog-scene-bubbles{display:inline}
.dog-scene-bubbles path{animation:dog-bubble 2s steps(6,end) infinite}
.dog-scene-bubbles path:nth-child(2){animation-delay:-.7s}.dog-scene-bubbles path:nth-child(3){animation-delay:-1.4s}
.dog-walker[data-action=bubble-chase] .dog-head{animation:dog-bubble-look 2s steps(3,end) infinite}
.dog-walker[data-action=bubble-chase] .dog-front-leg{animation:dog-paw-draw 1s steps(3,end) infinite}
@keyframes dog-coaster{0%,100%{transform:translate(0,0) rotate(0deg)}50%{transform:translate(3px,-9px) rotate(180deg)}90%{transform:rotate(360deg)}}
@keyframes dog-balance{0%,100%{transform:translate(-16px,8px)}50%{transform:translate(-17px,7px)}}
@keyframes dog-bubble{0%{opacity:0;transform:translateY(10px)}20%,70%{opacity:1}100%{opacity:0;transform:translate(-7px,-9px)}}
@keyframes dog-bubble-look{0%,100%{transform:rotate(-3deg)}50%{transform:rotate(-14deg)}}

/* Flights have a beginning and an end, with weather and airmail along the way. */
.dog-walker[data-action=taxi] .dog-scene-propeller{animation-duration:.45s}
.dog-walker[data-action=taxi] .dog-scene-scarf{animation-duration:1.6s}
.dog-walker[data-action=taxi] .dog-scene-cloud{opacity:0;animation:none}
.dog-walker:is([data-action=taxi],[data-action=takeoff],[data-action=land]) .dog-scene-runway{display:inline}
.dog-walker[data-action=takeoff] .dog-head{transform:rotate(-8deg)}
.dog-walker[data-action=land] .dog-head{transform:rotate(6deg)}
.dog-walker[data-action=cloud-hop] .dog-scene-wing{animation:dog-bank 1.6s steps(4,end) infinite}
.dog-walker:is([data-action=turbulence],[data-action=cloud-hop]) .dog-scene-wind{display:inline;animation:dog-wind .8s steps(4,end) infinite}
.dog-walker[data-action=turbulence] .dog-head{animation:dog-shake .4s steps(4,end) infinite}
.dog-walker[data-action=turbulence] .dog-scene-wing{animation:dog-bank .6s steps(3,end) infinite}
.dog-walker[data-action=airmail] .dog-scene-mail{display:inline;animation:dog-airmail 3.6s steps(9,end) both}
.dog-walker[data-action=salute] .dog-scene-salute{display:inline;transform-origin:45px 23px;animation:dog-salute .8s steps(3,end) infinite}
.dog-walker[data-action=salute] .dog-head{transform:rotate(-5deg)}
@keyframes dog-wind{0%{opacity:0;transform:translateX(4px)}40%{opacity:1}100%{opacity:0;transform:translateX(-4px)}}
@keyframes dog-airmail{0%,15%{transform:translate(0,0)}50%{transform:translate(-12px,10px)}80%,100%{transform:translate(-32px,27px)}}
@keyframes dog-salute{0%,100%{transform:rotate(0deg)}50%{transform:rotate(-9deg)}}

.dog-walker[data-scene=research][data-action=daydream] .dog-head{transform:rotate(12deg) translateY(3px)}
.dog-walker[data-scene=research][data-action=pet] .dog-head{transform:rotate(-8deg) translate(-1px,-1px)}
.dog-walker[data-scene=art][data-medium=paint]:is([data-progress="0"],[data-progress="1"]) .dog-scene-paint-peach{display:none}
.dog-walker[data-scene=art][data-progress="2"] .dog-scene-paint-mark:not(.dog-scene-paint-peach){animation:none}
