/* Source-texture props: fixed hinge, local backing, no full-scene movement. */
.town-microprops{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:1;overflow:hidden}
.microprop-slot-lift,.microprop-pennant-fold,.microprop-paper-lift{transform-box:view-box;transform-origin:0 0}
.microprop-slot-lift{animation:microprop-slot-breathe 18.7s -10.8s ease-in-out infinite}
/* Hinged at the existing brass lip; opens approximately 3.6 source pixels. */
@keyframes microprop-slot-breathe{0%,47%,65%,100%{transform:scaleY(1)}53%{transform:scaleY(.48)}57%{transform:scaleY(.61)}}
.microprop-pennant-fold{animation:microprop-pennant-breeze 7.6s -2.6s ease-in-out infinite}
.microprop-pennant-backing{animation:microprop-pennant-backing 7.6s -2.6s ease-in-out infinite}
@keyframes microprop-pennant-breeze{0%,100%{transform:skewX(0) scaleY(1)}31%{transform:skewX(2.8deg) scaleY(.98)}63%{transform:skewX(.6deg) scaleY(.995)}}
@keyframes microprop-pennant-backing{0%,100%{opacity:0}14%,88%{opacity:1}}
.microprop-paper-lift{animation:microprop-paper-lift 13.8s -6.4s ease-in-out infinite}
.microprop-paper-backing{animation:microprop-paper-backing 13.8s -6.4s ease-in-out infinite}
@keyframes microprop-paper-lift{0%,38%,72%,100%{transform:scaleY(1)}51%{transform:scaleY(.90)}59%{transform:scaleY(.95)}}
@keyframes microprop-paper-backing{0%,38%,72%,100%{opacity:0}45%,66%{opacity:1}}
.ambience-paused .town-microprops *,.ambience-background .town-microprops *,body:has(dialog[open]) .town-microprops *{animation-play-state:paused!important}
/* User pause returns the untouched photo, matching the existing ambient layer. */
.ambience-paused .town-microprops{visibility:hidden}
.reduced .town-microprops{display:none}
/* Keep the original darkened photograph instead of an independently lit patch. */
.object-light .town-microprops{display:none}
@media(prefers-reduced-motion:reduce){.town-microprops{display:none}}
