/* Optional ambient motion; removing this link leaves the illustrations static. */
.tower-led { animation: tower-led-blink 7.5s steps(1, end) infinite; }
.tower-garden-bloom { transform-box: fill-box; transform-origin: 50% 100%; animation: tower-garden-sway 9s ease-in-out infinite; }
.tower-screen-glow { animation: tower-screen-glow 12s ease-in-out infinite; }
.tower-map-beacon { animation: tower-map-beacon 9s ease-in-out infinite; }
.tower-gallery-glint { animation: tower-frame-glint 14s ease-in-out infinite; }
.tower-collectible-float { animation: tower-collectible-float 10s ease-in-out infinite; }
.tower-travel-marker { animation: tower-travel-marker 9s ease-in-out infinite; }
.tower-keynote-cue { animation: tower-keynote-cue 11s ease-in-out infinite; }
.tower-map-traveler { animation: tower-map-travel 12s linear infinite; }
.tower-heartbeat { transform-box: fill-box; transform-origin: center; animation: tower-heartbeat 6s ease-in-out infinite; }
.tower-a11y-bar { transform-box: fill-box; transform-origin: left center; animation: tower-a11y-bar 10s ease-in-out infinite; }
.tower-steam { animation: tower-steam 8s ease-out infinite; }
.tower-ambient { animation-delay: var(--life-delay, 0s); animation-play-state: paused; }
.tower-view:not([hidden]):not(.is-life-paused) .tower-floor.is-in-view .tower-ambient { animation-play-state: running; }
@keyframes tower-led-blink { 0%, 64%, 71%, 100% { opacity: 1; } 65%, 70% { opacity: .3; } }
@keyframes tower-garden-sway { 0%, 100% { transform: rotate(-2deg); } 50% { transform: rotate(2deg); } }
@keyframes tower-screen-glow { 0%, 100% { opacity: .03; } 50% { opacity: .1; } }
@keyframes tower-map-beacon { 0%, 100% { opacity: 1; } 50% { opacity: .65; } }
@keyframes tower-frame-glint { 0%, 100% { opacity: .14; } 50% { opacity: .25; } }
@keyframes tower-collectible-float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-2px); } }
@keyframes tower-travel-marker { 0%, 100% { opacity: .5; } 50% { opacity: 1; } }
@keyframes tower-keynote-cue { 0%, 100% { transform: translateX(0); opacity: .5; } 50% { transform: translateX(2px); opacity: .8; } }
@keyframes tower-map-travel {
  0%, 12% { transform: translate(0, 0); opacity: 0; }
  18% { transform: translate(0, 0); opacity: .8; }
  46% { transform: translate(0, -41px); opacity: .8; }
  82% { transform: translate(53px, -41px); opacity: .8; }
  90%, 100% { transform: translate(53px, -41px); opacity: 0; }
}
@keyframes tower-heartbeat { 0%, 42%, 70%, 100% { transform: scaleY(1); opacity: .85; } 50%, 60% { transform: scaleY(1.035); opacity: 1; } }
@keyframes tower-a11y-bar { 0%, 100% { transform: scaleX(1); } 50% { transform: scaleX(.96); } }
@keyframes tower-steam { 0%, 15% { transform: translateY(2px); opacity: 0; } 35% { opacity: .3; } 75%, 100% { transform: translateY(-4px); opacity: 0; } }
[data-reduced-motion="true"] .tower-ambient { animation: none; }
