.daf-companion{position:fixed;right:24px;bottom:20px;width:110px;z-index:108;pointer-events:none;isolation:isolate}.companion-stage{position:relative;animation:boo-run 11s ease-in-out infinite}.companion-character{display:block;border:0;background:none;padding:0;width:100px;height:115px;cursor:pointer;pointer-events:auto;filter:drop-shadow(0 3px 7px #0005)}.companion-character svg{width:100%;height:100%;overflow:visible}.companion-body{animation:boo-bounce .75s ease-in-out infinite;transform-origin:center}.companion-shadow{position:absolute;left:17px;bottom:5px;width:66px;height:11px;border-radius:50%;background:#09061177;filter:blur(4px)}.companion-foot-one{transform-origin:35px 99px;animation:boo-step .6s ease-in-out infinite alternate}.companion-foot-two{transform-origin:65px 99px;animation:boo-step .6s ease-in-out infinite alternate-reverse}.companion-eye{animation:boo-blink 5s infinite;transform-origin:center;transform-box:fill-box}.companion-controls{display:flex;justify-content:center;gap:7px;margin-top:0;pointer-events:auto}.companion-controls button,.companion-restore{border:1px solid #b38caa55;background:#23162dde;color:#d8bdd9;border-radius:20px;padding:4px 8px;cursor:pointer;font:10px system-ui}.companion-message{position:absolute;right:0;bottom:143px;width:190px;padding:13px;border:1px solid #d8a96e88;border-radius:13px 13px 2px 13px;background:linear-gradient(130deg,#49304c,#291b35);box-shadow:0 8px 28px #0005;color:#ffe1b4;font:12px/1.7 system-ui;pointer-events:auto}.companion-restore{position:fixed;right:18px;bottom:18px;z-index:108;padding:8px 12px}.daf-companion:hover .companion-stage,.daf-companion.is-playing .companion-stage{animation-play-state:paused}.is-playing .companion-hand{transform-origin:78px 64px;animation:boo-wave .3s ease-in-out 8 alternate}.is-playing .companion-body{animation:boo-celebrate .65s ease-in-out 5}.is-paused *{animation-play-state:paused!important}@keyframes boo-run{0%,100%{transform:translateX(0)}25%,45%{transform:translateX(-48px)}65%,85%{transform:translateX(-12px)}}@keyframes boo-bounce{50%{transform:translateY(-5px)}}@keyframes boo-step{to{transform:rotate(15deg) translateY(-3px)}}@keyframes boo-blink{0%,43%,47%,100%{transform:scaleY(1)}45%{transform:scaleY(.1)}}@keyframes boo-wave{to{transform:rotate(22deg)}}@keyframes boo-celebrate{50%{transform:translateY(-12px) rotate(5deg)}}@media(max-width:650px){.daf-companion{right:8px;bottom:15px;width:80px}.companion-character{width:78px;height:90px}.companion-shadow{left:12px;width:55px}.companion-message{width:170px;bottom:115px}.companion-stage{animation-name:boo-bounce}.companion-controls button{font-size:9px}}@media(prefers-reduced-motion:reduce){.daf-companion *{animation:none!important}}

/* Boo travels across the viewport, rolling between the edges. */
.daf-companion{right:auto;left:12px;animation:boo-cross-page 22s linear infinite alternate;will-change:transform}
.companion-stage{animation:none}
.companion-character svg{animation:boo-roll-across 2.8s linear infinite;transform-origin:50% 55%}
.daf-companion:hover,.daf-companion.is-playing{animation-play-state:paused}
.daf-companion:hover .companion-character svg,.daf-companion.is-playing .companion-character svg{animation-play-state:paused}
.daf-companion.is-paused{animation-play-state:paused!important}
.companion-message{right:auto;left:0;max-width:calc(100vw - 135px)}
@keyframes boo-cross-page{from{transform:translateX(0)}to{transform:translateX(calc(100vw - 134px))}}
@keyframes boo-roll-across{to{transform:rotate(360deg)}}
@media(max-width:650px){.daf-companion{right:auto;left:10px;bottom:105px}.companion-stage{animation:none}@keyframes boo-cross-page{from{transform:translateX(0)}to{transform:translateX(calc(100vw - 100px))}}}
@media(prefers-reduced-motion:reduce){.daf-companion{animation:none!important}}

/* A ticklish little escape when Boo is touched. */
.is-ticklish .companion-stage{animation:boo-tickle-escape 2.4s ease-in-out!important}
.is-ticklish .companion-body{animation:boo-tickle-wiggle .14s ease-in-out 12 alternate!important}
.is-ticklish .companion-eye{transform:scaleY(.2)}
.is-ticklish .companion-hand{animation:boo-wave .12s ease-in-out 12 alternate}
@keyframes boo-tickle-wiggle{from{transform:rotate(-9deg) translateY(-3px)}to{transform:rotate(9deg) translateY(-9px)}}
@keyframes boo-tickle-escape{0%{transform:translateY(0)}12%{transform:translateY(-28px) rotate(-10deg)}28%{transform:translateY(-8px) rotate(12deg)}45%{transform:translateY(-32px) rotate(-12deg)}65%{transform:translateY(-6px) rotate(8deg)}82%{transform:translateY(-17px)}100%{transform:translateY(0)}}
@media(prefers-reduced-motion:reduce){.is-ticklish .companion-stage,.is-ticklish .companion-body{animation:none!important}}

/* Walk and play between one brief roll each minute. */
.companion-character svg{animation:boo-minute-play 60s linear infinite;transform-origin:50% 55%}
@keyframes boo-minute-play{
0%,12%,16%,35%,39%,58%,62%,80%,84%,94%{transform:translateY(0) rotate(0deg)}
14%,37%,60%,82%{transform:translateY(-12px) rotate(-6deg)}
95%{transform:translateY(-7px) rotate(0deg)}
97%{transform:translateY(-7px) rotate(360deg)}
98%,100%{transform:translateY(0) rotate(360deg)}
}

/* One crossing every three minutes; rest and play between walks. */
.daf-companion{animation:boo-three-minute-walk 180s linear infinite}
@keyframes boo-three-minute-walk{0%,87%{transform:translateX(0)}93%{transform:translateX(calc(100vw - 134px))}100%{transform:translateX(0)}}
@media(max-width:650px){@keyframes boo-three-minute-walk{0%,87%{transform:translateX(0)}93%{transform:translateX(calc(100vw - 100px))}100%{transform:translateX(0)}}}
@media(prefers-reduced-motion:reduce){.daf-companion{animation:none!important}}

/* Start Boo on the right, clear of the shop controls. */
.daf-companion{left:auto;right:20px}
.companion-message{left:auto;right:0}
@keyframes boo-three-minute-walk{0%,87%{transform:translateX(0)}93%{transform:translateX(calc(-100vw + 150px))}100%{transform:translateX(0)}}
@media(max-width:650px){.daf-companion{left:auto;right:10px}@keyframes boo-three-minute-walk{0%,87%{transform:translateX(0)}93%{transform:translateX(calc(-100vw + 100px))}100%{transform:translateX(0)}}}
