/* ---------- animated scenes (a-* classes, an-* keyframes) ---------- */
/* animated parts use their own box as the pivot reference, but not elements with an SVG transform attribute: fill-box would shift every rotate(angle cx cy) in the artwork */
:where(.scene,.bdg) :where(*:not([transform])){transform-box:fill-box}
.a-drift{animation:an-drift 40s linear infinite}
@keyframes an-drift{from{transform:translateX(calc(-1 * var(--x) - 70px))}to{transform:translateX(calc(320px - var(--x) + 70px))}}
.a-sun{transform-origin:center;animation:an-sun 3s ease-in-out infinite}
@keyframes an-sun{50%{transform:scale(1.14)}}
.a-rays{transform-origin:262px 46px;transform-box:view-box;animation:an-spin 16s linear infinite}
@keyframes an-spin{to{transform:rotate(360deg)}}
/* flags: ripple the shape itself (Chrome/Edge), with a skew fallback elsewhere */
.a-flag{transform-origin:0 50%;animation:an-wave 1s ease-in-out infinite}
.a-flag.b{animation-delay:-.4s}
.a-fl{animation:an-ripple .7s ease-in-out infinite}
.a-fl.b{animation-delay:-.3s}
@keyframes an-wave{0%,100%{transform:scaleX(1) skewY(-5deg)}50%{transform:scaleX(.72) skewY(9deg)}}
@keyframes an-ripple{0%,100%{d:path("M0 0 Q8 -5 16 0 T32 0 V12 Q24 17 16 12 T0 12Z")}50%{d:path("M0 0 Q8 5 16 0 T32 0 V12 Q24 7 16 12 T0 12Z")}}
.a-raven{animation:an-hop 2.4s ease-in-out infinite}
@keyframes an-hop{0%,40%,100%{transform:translateY(0)}48%{transform:translateY(-16px)}56%{transform:translateY(0)}64%{transform:translateY(-9px)}72%{transform:translateY(0)}}
.a-wing{transform-origin:100% 100%;animation:an-flap 2.4s ease-in-out infinite}
@keyframes an-flap{0%,40%,100%{transform:rotate(0)}44%,52%,60%,68%{transform:rotate(-40deg)}48%,56%,64%{transform:rotate(15deg)}}
.a-beak{transform-origin:0 50%;animation:an-peck 2.4s ease-in-out infinite}
@keyframes an-peck{0%,10%,22%,100%{transform:rotate(0)}16%{transform:rotate(-22deg)}}
.a-window{animation:an-glow 2.2s ease-in-out infinite}
@keyframes an-glow{50%{fill:#F2C86B}}
/* flying birds */
.a-bird{animation:an-fly 11s linear infinite;opacity:0}
.a-bird.b{animation-delay:-4s;animation-duration:14s}
.a-bird.c{animation-delay:-8s;animation-duration:9s}
@keyframes an-fly{0%{transform:translate(-40px,0);opacity:1}50%{transform:translate(170px,-14px)}100%{transform:translate(380px,6px);opacity:1}}
.a-bird path{transform-origin:50% 100%;animation:an-bflap .35s ease-in-out infinite alternate}
@keyframes an-bflap{from{transform:scaleY(1)}to{transform:scaleY(-.5)}}
/* bridge */
.a-boat-drift{animation:an-sail 9s ease-in-out infinite alternate}
@keyframes an-sail{from{transform:translateX(-200px)}to{transform:translateX(18px)}}
.a-boat{transform-origin:50% 90%;animation:an-bob 1.6s ease-in-out infinite}
@keyframes an-bob{0%,100%{transform:translateY(-1px) rotate(-5deg)}50%{transform:translateY(4px) rotate(5deg)}}
.a-wake{animation:an-wake 1.6s ease-out infinite;transform-origin:100% 50%}
@keyframes an-wake{from{transform:scaleX(.3);opacity:.9}to{transform:scaleX(1.6);opacity:0}}
.a-shimmer{animation:an-shim 2s ease-in-out infinite}
.a-shimmer.c{animation-delay:-1s}
@keyframes an-shim{0%,100%{transform:translateX(-14px);opacity:.2}50%{transform:translateX(14px);opacity:.9}}
.a-water{animation:an-swell 2.6s ease-in-out infinite}
@keyframes an-swell{50%{transform:translateY(3px)}}
.a-bascule{transform-origin:0 100%;animation:an-lift 6s ease-in-out infinite}
.a-bascule.r{transform-origin:100% 100%;animation-name:an-liftr}
@keyframes an-lift{0%,40%,100%{transform:rotate(0)}55%,78%{transform:rotate(-38deg)}}
@keyframes an-liftr{0%,40%,100%{transform:rotate(0)}55%,78%{transform:rotate(38deg)}}
.a-lamp{animation:an-glow2 1.8s ease-in-out infinite}
@keyframes an-glow2{50%{opacity:.35}}
/* elizabeth tower */
.a-hand-m{transform-box:view-box!important;transform-origin:160px 79px;animation:an-spin 6s linear infinite}
.a-hand-h{transform-box:view-box!important;transform-origin:160px 79px;animation:an-spin 72s linear infinite}
.a-bell{transform-origin:50% 0;animation:an-swing 1.8s ease-in-out infinite}
@keyframes an-swing{0%,100%{transform:rotate(-14deg)}50%{transform:rotate(14deg)}}
.a-twinkle{transform-origin:center;animation:an-tw 1.4s ease-in-out infinite}
@keyframes an-tw{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(2.2);opacity:.5}}
.a-ring{transform-origin:center;animation:an-ring 1.8s ease-out infinite}
@keyframes an-ring{from{transform:scale(.4);opacity:.8}to{transform:scale(2.4);opacity:0}}
/* abbey */
.a-rose{transform-origin:center;animation:an-spin 8s linear infinite}
.a-pulse{transform-origin:center;animation:an-pl 2s ease-in-out infinite}
@keyframes an-pl{50%{transform:scale(1.25)}}
.a-glowwin{animation:an-glowwin 2.4s ease-in-out infinite}
@keyframes an-glowwin{50%{fill:#F5CE70}}

/* ---- shared kit: use via ARTKIT.an('sway', markup, {d:3, r:5}) ---- */
.a-sway{transform-origin:50% 100%;animation:an-sway var(--d,3s) ease-in-out infinite;animation-delay:var(--dl,0s)}
@keyframes an-sway{0%,100%{transform:rotate(calc(var(--r,4) * -1deg))}50%{transform:rotate(calc(var(--r,4) * 1deg))}}
.a-bobk{animation:an-bobk var(--d,2.5s) ease-in-out infinite;animation-delay:var(--dl,0s)}
@keyframes an-bobk{0%,100%{transform:translateY(calc(var(--y,3) * -1px))}50%{transform:translateY(calc(var(--y,3) * 1px))}}
.a-swingk{transform-origin:50% 0;animation:an-swingk var(--d,2s) ease-in-out infinite;animation-delay:var(--dl,0s)}
@keyframes an-swingk{0%,100%{transform:rotate(calc(var(--r,12) * -1deg))}50%{transform:rotate(calc(var(--r,12) * 1deg))}}
.a-turn{transform-origin:center;animation:an-spin var(--d,10s) linear infinite}
.a-turn-r{transform-origin:center;animation:an-spin var(--d,10s) linear infinite reverse}
.a-beat{transform-origin:center;animation:an-beat var(--d,2s) ease-in-out infinite;animation-delay:var(--dl,0s)}
@keyframes an-beat{0%,100%{transform:scale(1)}50%{transform:scale(1.18)}}
.a-blink{animation:an-blink var(--d,2s) ease-in-out infinite;animation-delay:var(--dl,0s)}
@keyframes an-blink{0%,100%{opacity:1}50%{opacity:.25}}
.a-flicker{animation:an-flicker var(--d,.9s) steps(1) infinite;animation-delay:var(--dl,0s)}
@keyframes an-flicker{0%{opacity:1}20%{opacity:.6}40%{opacity:.95}60%{opacity:.5}80%{opacity:.85}}
.a-rise{transform-origin:50% 100%;animation:an-rise var(--d,3s) ease-out infinite;animation-delay:var(--dl,0s);opacity:0}
@keyframes an-rise{0%{transform:translateY(0) scale(.5);opacity:.8}100%{transform:translateY(-26px) scale(1.5);opacity:0}}
.a-run{animation:an-run var(--d,10s) linear infinite;animation-delay:var(--dl,0s)}
@keyframes an-run{from{transform:translateX(calc(var(--x0,-60) * 1px))}to{transform:translateX(calc(var(--x1,380) * 1px))}}
.a-shuttle{animation:an-shuttle var(--d,8s) ease-in-out infinite alternate;animation-delay:var(--dl,0s)}
@keyframes an-shuttle{from{transform:translateX(calc(var(--x0,0) * 1px))}to{transform:translateX(calc(var(--x1,60) * 1px))}}
.a-ripplek{transform-origin:center;animation:an-ripple2 var(--d,3s) ease-out infinite;animation-delay:var(--dl,0s)}
@keyframes an-ripple2{from{transform:scale(.3);opacity:.8}to{transform:scale(1.5);opacity:0}}
.a-wavek{animation:an-wavek var(--d,3s) ease-in-out infinite;animation-delay:var(--dl,0s)}
@keyframes an-wavek{0%,100%{transform:translateX(calc(var(--x,8) * -1px))}50%{transform:translateX(calc(var(--x,8) * 1px))}}
.a-flapk{transform-origin:50% 100%;animation:an-flapk var(--d,.5s) ease-in-out infinite alternate}
@keyframes an-flapk{from{transform:scaleY(1)}to{transform:scaleY(-.5)}}

.a-lon-spin{transform-box:view-box!important;transform-origin:160px 104px;animation:an-spin 26s linear infinite}
.a-lon-pod{transform-origin:center;animation:an-spin 26s linear infinite reverse}
.a-lon-flame{transform-origin:50% 100%;animation:an-lon-flame 1.1s ease-in-out infinite}
@keyframes an-lon-flame{0%,100%{transform:scale(1,1) skewX(-4deg)}35%{transform:scale(.88,1.15) skewX(6deg)}70%{transform:scale(1.06,.9) skewX(0deg)}}
.a-lon-ember{animation:an-lon-ember 3s ease-out infinite;opacity:0}
@keyframes an-lon-ember{0%{transform:translate(0,0);opacity:.9}100%{transform:translate(28px,-48px);opacity:0}}
.a-lon-smoke{animation:an-lon-smoke 9s ease-in-out infinite alternate}
@keyframes an-lon-smoke{from{transform:translateX(-10px)}to{transform:translateX(16px)}}
.a-lon-jet{transform-origin:50% 100%;animation:an-lon-jet 1s ease-in-out infinite}
@keyframes an-lon-jet{0%,100%{transform:scaleY(.78);opacity:.75}50%{transform:scaleY(1.15);opacity:1}}
.a-lon-peck{transform-origin:50% 100%;animation:an-lon-peck 2.2s ease-in-out infinite}
.a-lon-peck.l{animation-name:an-lon-peckl}
@keyframes an-lon-peck{0%,58%,100%{transform:rotate(0)}66%,82%{transform:rotate(20deg)}74%,90%{transform:translateY(-2px) rotate(0)}}
@keyframes an-lon-peckl{0%,58%,100%{transform:rotate(0)}66%,82%{transform:rotate(-20deg)}74%,90%{transform:translateY(-2px) rotate(0)}}
.a-lon-ball{animation:an-lon-ball 8s ease-in-out infinite}
@keyframes an-lon-ball{0%,50%{transform:translateY(0)}56%,78%{transform:translateY(21px)}96%,100%{transform:translateY(0)}}
.a-lon-laser{animation:an-lon-laser 2.4s ease-in-out infinite}
@keyframes an-lon-laser{50%{opacity:.5}}
.a-lon-pulse{animation:an-lon-pulse 1.8s linear infinite;opacity:0}
@keyframes an-lon-pulse{0%{transform:translateY(0);opacity:0}15%{opacity:.95}100%{transform:translateY(-52px);opacity:0}}
.a-lon-shoot{animation:an-lon-shoot 7s linear infinite;opacity:0}
@keyframes an-lon-shoot{0%{transform:translate(0,0);opacity:0}3%{opacity:1}14%{transform:translate(76px,28px);opacity:0}100%{transform:translate(76px,28px);opacity:0}}


.a-edi-puff{animation:an-edi-puff var(--d,3s) ease-out infinite;animation-delay:var(--dl,0s);opacity:0}
@keyframes an-edi-puff{0%{transform:translate(0,0) scale(.4);opacity:.9}100%{transform:translate(16px,-20px) scale(1.5);opacity:0}}
.a-edi-hand{transform-box:view-box!important;transform-origin:160px 114px;animation:an-spin 6s linear infinite}
.a-edi-ball{animation:an-edi-ball 6s ease-in infinite}
@keyframes an-edi-ball{0%,60%{transform:translateY(-6px)}72%,92%{transform:translateY(10px)}100%{transform:translateY(-6px)}}
.a-edi-tail{transform-origin:100% 100%;animation:an-edi-tail .45s ease-in-out infinite alternate}
@keyframes an-edi-tail{from{transform:rotate(-22deg)}to{transform:rotate(18deg)}}
.a-edi-paint{transform-box:view-box!important;transform-origin:116px 130px;animation:an-edi-paint 2.6s ease-in-out infinite}
@keyframes an-edi-paint{0%,100%{transform:rotate(-7deg)}50%{transform:rotate(7deg)}}
.a-edi-ghost{animation:an-edi-ghost 4s ease-in-out infinite}
@keyframes an-edi-ghost{0%,100%{transform:translate(-5px,3px);opacity:.15}50%{transform:translate(7px,-6px);opacity:.6}}
