/* Shared floating layers keep architecture, actors and input geometry aligned. */
.building-ambient{pointer-events:none;overflow:hidden;color:var(--tower-muted)}
.building-ambient-scene{position:absolute;max-width:none}
.building-ambient-particle{fill:currentColor;opacity:0;animation:building-mote-rise var(--ambient-duration,9s) var(--ambient-delay,0s) linear infinite}
.building-ambient-ember,.building-ambient-spark{color:var(--campaign-gold)}
.building-ambient-snow{fill:none;stroke:currentColor;stroke-width:1;animation-name:building-snow-fall}
.building-ambient-water{fill:none;stroke:currentColor;stroke-width:1;animation-name:building-water-ring}
.building-ambient-orb{color:var(--tower-muted);animation-name:building-orb-drift}
.building-ambient-soul{color:var(--tower-muted);animation-name:building-orb-drift}
.building-ambient-window{fill:var(--campaign-gold);filter:blur(2px);opacity:.08;animation:building-window-breathe 5.7s var(--ambient-delay,0s) ease-in-out infinite}
.building-ambient-bird{fill:none;stroke:currentColor;stroke-width:1.5;opacity:0;animation:building-bird-flight 23s -5s linear infinite}
.building-ambient-mist{fill:currentColor;filter:blur(12px);opacity:.035;animation:building-mist-flow 14s -4s ease-in-out infinite}
.building-ambient-cold{fill:var(--p2)}
@keyframes building-mote-rise{0%{opacity:0;transform:translate(0,20px)}20%{opacity:.70}75%{opacity:.45}100%{opacity:0;transform:translate(12px,-44px)}}
@keyframes building-snow-fall{0%{opacity:0;transform:translate(0,-36px)}20%{opacity:.55}80%{opacity:.5}100%{opacity:0;transform:translate(16px,32px)}}
@keyframes building-water-ring{0%{opacity:0;transform:scale(.3)}25%{opacity:.5}100%{opacity:0;transform:scale(1.7)}}
@keyframes building-orb-drift{0%,100%{opacity:0;transform:translate(0,8px)}35%{opacity:.55}65%{opacity:.35;transform:translate(8px,-16px)}}
@keyframes building-window-breathe{0%,100%{opacity:.10}37%{opacity:.32}61%{opacity:.16}83%{opacity:.25}}
@keyframes building-bird-flight{0%,67%,100%{opacity:0;transform:translate(0,0)}70%{opacity:.55;transform:translate(0,0)}93%{opacity:.55}96%{opacity:0;transform:translate(-480px,-58px)}}
@keyframes building-mist-flow{0%,100%{opacity:.025;transform:translate(-16px,0)}50%{opacity:.055;transform:translate(16px,-4px)}}
#campaign-scenery[hidden] .building-ambient *,#overlay:not(.solo-select-mode) .solo-entry-art .building-ambient *{animation-play-state:paused}
.building-float{animation:building-hover 6.8s -1.7s ease-in-out infinite}
.building-float-scene{position:absolute;inset:0;pointer-events:none}
.building-float-entry{animation-name:building-entry-hover;animation-duration:7.6s}
#solo-training-art .building-float-entry{animation-delay:-3.8s}
.building-float-scene #campaign-scene-image{-webkit-mask-image:linear-gradient(to bottom,transparent,var(--text) 3%,var(--text) 97%,transparent);mask-image:linear-gradient(to bottom,transparent,var(--text) 3%,var(--text) 97%,transparent)}
/* Feather the bitmap bounds while keeping only the pendant tip opaque at the bottom. */
#campaign-scenery[data-mode="map"] .building-float-scene #campaign-scene-image{
  -webkit-mask-image:radial-gradient(ellipse 2.4% 6% at 59.45% 100%,var(--text) 80%,transparent 100%),linear-gradient(to bottom,transparent,var(--text) 1%,var(--text) 97%,transparent);
  mask-image:radial-gradient(ellipse 2.4% 6% at 59.45% 100%,var(--text) 80%,transparent 100%),linear-gradient(to bottom,transparent,var(--text) 1%,var(--text) 97%,transparent);
  -webkit-mask-composite:source-over;
  mask-composite:add;
}
#campaign-floor-arrow{overflow:visible}
#campaign-floor-arrow>path{animation:building-arrow-point 1.25s ease-in-out infinite}
@keyframes building-hover{0%,100%{transform:translateY(5px)}50%{transform:translateY(-5px)}}
@keyframes building-entry-hover{0%,100%{transform:translateY(14px)}50%{transform:translateY(-14px)}}
@keyframes building-arrow-point{0%,100%{transform:translateX(-8px)}50%{transform:translateX(0)}}
#campaign-scenery[hidden] .building-float,#campaign-scenery[hidden] #campaign-floor-arrow>path,#overlay:not(.solo-select-mode) .building-float-entry{animation-play-state:paused}
@media(prefers-reduced-motion:reduce){.building-ambient *,.building-float,#campaign-floor-arrow>path{animation:none!important}.building-ambient-particle,.building-ambient-bird{opacity:0}.building-ambient-window{opacity:.25}.building-ambient-mist{opacity:.025}}
