.campaign{position:relative;container-type:inline-size}
.campaign-image picture>img{transform:translateZ(0)}
.campaign-motion{--ghost-lift:clamp(10px,2.2cqi,32px);--ghost-sway:clamp(3px,.55cqi,10px);--bat-lift:clamp(2px,.4cqi,6px);--bat-sway:clamp(1px,.15cqi,3px);--bat-tilt:4deg;--pumpkin-hop:clamp(5px,.8cqi,14px);--sparkle-halo:clamp(.8px,.24cqi,1.4px);position:absolute;top:0;left:0;width:100%;pointer-events:none;isolation:isolate}
.campaign-clean-patch,.campaign-sprite,.campaign-moon{position:absolute;display:block}
.campaign-clean-patch,.campaign-sprite{background-repeat:no-repeat}
.campaign-clean-patch{
  mask-image:linear-gradient(to right,transparent,#000 var(--patch-feather,8%),#000 calc(100% - var(--patch-feather,8%)),transparent),linear-gradient(to bottom,transparent,#000 var(--patch-feather,8%),#000 calc(100% - var(--patch-feather,8%)),transparent);
  mask-composite:intersect;
  -webkit-mask-image:linear-gradient(to right,transparent,#000 var(--patch-feather,8%),#000 calc(100% - var(--patch-feather,8%)),transparent),linear-gradient(to bottom,transparent,#000 var(--patch-feather,8%),#000 calc(100% - var(--patch-feather,8%)),transparent);
  -webkit-mask-composite:source-in;
}
.campaign-sprite{transform-origin:center;animation-duration:var(--duration,6s);animation-delay:var(--delay,0s);animation-timing-function:ease-in-out;animation-iteration-count:infinite;animation-play-state:paused}
.campaign-ghost{animation-name:campaign-ghost-float}
.campaign-bat{animation-name:campaign-bat-drift}
.campaign-pumpkin{animation-name:campaign-pumpkin-hop;transform-origin:center bottom}
.campaign-sparkle{position:absolute;display:block;opacity:0;animation:campaign-sparkle-twinkle 3.4s ease-in-out infinite paused;animation-delay:var(--delay,0s);filter:drop-shadow(0 0 var(--sparkle-halo) #fff)}
.campaign-sparkle:before{content:'';position:absolute;inset:0;background:#fff;clip-path:polygon(50% 0,61% 38%,100% 50%,61% 62%,50% 100%,39% 62%,0 50%,39% 38%)}
.campaign-moon{background:#93a9ff;mix-blend-mode:screen;mask-image:radial-gradient(ellipse,#000 20%,transparent 70%);opacity:.04;animation:campaign-moon-glow 4.2s ease-in-out infinite paused}
.campaign-motion.is-running .campaign-sprite,.campaign-motion.is-running .campaign-sparkle,.campaign-motion.is-running .campaign-moon{animation-play-state:running}
@keyframes campaign-ghost-float{0%,100%{transform:translate(calc(var(--ghost-sway)*-1),4px) rotate(-3deg)}50%{transform:translate(var(--ghost-sway),calc(var(--ghost-lift)*-1)) rotate(4deg)}}
@keyframes campaign-bat-drift{0%,100%{transform:translate(calc(var(--bat-sway)*-1),0) rotate(calc(var(--bat-tilt)*-1))}50%{transform:translate(var(--bat-sway),calc(var(--bat-lift)*-1)) rotate(var(--bat-tilt))}}
@keyframes campaign-pumpkin-hop{0%,42%,78%,100%{transform:translateY(0) rotate(0)}48%{transform:translateY(0) rotate(-1deg)}58%{transform:translateY(calc(var(--pumpkin-hop)*-1)) rotate(2deg)}68%{transform:translateY(0) rotate(-1deg)}74%{transform:translateY(0) rotate(0)}}
@keyframes campaign-sparkle-twinkle{0%,100%{opacity:0;transform:scale(.6)}15%{opacity:.15;transform:scale(.75)}35%,50%{opacity:1;transform:scale(1.32)}75%{opacity:.4;transform:scale(.9)}}
@keyframes campaign-moon-glow{0%,100%{opacity:.04}50%{opacity:.35}}
@media(prefers-reduced-motion:reduce){:root:not([data-sunshine-motion="normal"]) .campaign-motion{display:none!important}}
