/* The original still remains sharp. All motion is sparse and in scene coordinates. */
.town-ambience{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:1;overflow:hidden;transition:opacity .45s}
.ambient-cloud{fill:none;stroke:#dae0dc;stroke-width:13;opacity:0;animation:ambient-cloud-drift 26s -8s linear infinite}
.ambient-smoke{fill:none;stroke:#d6ccd0;stroke-width:8;filter:url(#ambient-vapour);opacity:0;animation:ambient-smoke-rise 10s -3s ease-out infinite}
.second-smoke{animation-delay:-8s;stroke-width:5}
.ambient-chimney-wisp{fill:none;stroke:#c9c2c8;stroke-width:4;stroke-linecap:round;filter:url(#ambient-vapour);opacity:0;animation:ambient-chimney-breathe 13s -4s ease-out infinite}
.ambient-chimney-wisp.late-wisp{stroke-width:2.5;animation-delay:-10s;animation-duration:17s}
.ambient-tea-ripple{fill:none;stroke:#e8c58c;stroke-width:.55;opacity:0;transform:scale(.2);animation:ambient-tea-ripple 9s -3s ease-out infinite}
.ambient-tea-ripple.late-ripple{animation-delay:-3.8s}
@keyframes ambient-chimney-breathe{0%{opacity:0;transform:translate(0,3px) scaleX(.7)}12%{opacity:.3}50%{opacity:.2}82%,100%{opacity:0;transform:translate(11px,-27px) scaleX(1.4)}}
@keyframes ambient-tea-ripple{0%{opacity:0;transform:scale(.15)}8%{opacity:.45}27%{opacity:0;transform:scale(1.2)}100%{opacity:0;transform:scale(1.2)}}
.ambient-steam{fill:none;stroke:#fff4dd;stroke-width:4;filter:url(#ambient-vapour);opacity:0;animation:ambient-steam-rise 5.8s var(--delay) ease-out infinite}
.second-wisp{stroke-width:2.5;animation-duration:8s}
.ambient-dust{fill:#ffe6b0}.ambient-mote{opacity:0;animation:ambient-mote-drift 13s var(--delay) ease-in-out infinite}.desk-dust .ambient-mote{animation-duration:17s}
.ambient-fireflies{fill:#ffe3a0;opacity:1;transition:opacity 1s}.ambient-firefly{opacity:0;animation:ambient-firefly-wander 12s var(--delay) ease-in-out infinite}
.ambient-pollen{fill:#e4cf99;opacity:0;animation:ambient-pollen-lift 16s -5s ease-out infinite}
.ambient-petal{fill:url(#ambient-petal-shade);opacity:0;animation:ambient-petal-drift 18s -2s ease-in-out infinite}.later-petal{animation-delay:-11s;animation-duration:23s}
.ambient-lantern{opacity:0;animation:ambient-wick 7.3s -2s ease-in-out infinite}.ambient-lantern image{filter:brightness(1.42) saturate(.95)}
.object-light .town-ambience{opacity:.38}.object-light .ambient-lantern,.object-light .ambient-glass-light{display:none}.object-light .ambient-fireflies{opacity:1}
.scene-tools .scene-motion{width:36px;min-width:36px;padding:8px}.scene-motion svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round}.scene-motion .ambient-play-icon{display:none;fill:currentColor;stroke:none}.scene-motion[aria-pressed=true] .ambient-play-icon{display:block}.scene-motion[aria-pressed=true] .ambient-pause-icon{display:none}.scene-motion:disabled{opacity:.45;cursor:default}
@media(max-width:760px){.scene-tools{left:max(8px,env(safe-area-inset-left));right:max(8px,env(safe-area-inset-right));flex-direction:row;justify-content:space-between;pointer-events:none}.scene-tools button{pointer-events:auto}.scene-tools .scene-motion{width:34px;min-width:34px;height:34px}}
.ambience-paused .town-ambience{opacity:0}.ambience-paused .town-ambience *,.ambience-background .town-ambience *,body:has(dialog[open]) .town-ambience *{animation-play-state:paused!important}
.reduced .town-ambience{display:none}
@media(prefers-reduced-motion:reduce){.town-ambience{display:none}}
/* Always a few visible details, rather than long stretches of zero opacity. */
.ambient-glass-light{opacity:0;animation:ambient-glass-light-light 9s -3s ease-in-out infinite}.upstairs-glass{animation-duration:13s;animation-delay:-8s}.ambient-glass-light image{filter:brightness(1.28) saturate(.92)}
@keyframes ambient-cloud-drift{0%{opacity:0;transform:translateX(-46px)}14%,75%{opacity:.3}100%{opacity:0;transform:translateX(95px)}}
@keyframes ambient-smoke-rise{0%{opacity:0;transform:translate(0,6px) scaleX(.75)}18%{opacity:.32}65%{opacity:.22}100%{opacity:0;transform:translate(16px,-32px) scaleX(1.3)}}
@keyframes ambient-steam-rise{0%{opacity:0;transform:translate(0,3px) scaleX(.8)}18%{opacity:.65}55%{opacity:.45;transform:translate(5px,-17px) scaleX(1.15)}100%{opacity:0;transform:translate(12px,-38px) scaleX(1.3)}}
@keyframes ambient-mote-drift{0%{opacity:0;transform:translate(0,0)}16%,65%{opacity:.65}100%{opacity:0;transform:translate(17px,-38px)}}
@keyframes ambient-firefly-wander{0%{opacity:0;transform:translate(0,0)}17%{opacity:.85}32%{opacity:.22;transform:translate(14px,-10px)}55%{opacity:.9;transform:translate(29px,-6px)}82%{opacity:.18}100%{opacity:0;transform:translate(44px,-26px)}}
@keyframes ambient-pollen-lift{0%{opacity:0;transform:translate(0,0)}12%,50%{opacity:.6}100%{opacity:0;transform:translate(32px,-47px)}}
@keyframes ambient-petal-drift{0%{opacity:0;transform:translate(0,0) rotate(0deg)}8%{opacity:.9}36%{opacity:.8;transform:translate(48px,5px) rotate(60deg)}65%{opacity:.65;transform:translate(94px,18px) rotate(145deg)}90%,100%{opacity:0;transform:translate(144px,28px) rotate(220deg)}}
@keyframes ambient-wick{0%,100%{opacity:.1}22%{opacity:.48}43%{opacity:.18}76%{opacity:.6}}
@keyframes ambient-glass-light-light{0%,100%{opacity:.08}46%{opacity:.7}72%{opacity:.3}}

.ambient-glass-light{transform:none;mix-blend-mode:normal;background:none}.desk-glass{animation-duration:11s;animation-delay:-4s}

/* Readable physical movement without moving the photograph or any character. */
.ambient-leaf-sprig{transform-origin:0 -16px;animation:ambient-leaf-breeze 6s -2s ease-in-out infinite;filter:drop-shadow(1px 2px 1px #26331866)}
.ambient-moth-route{animation:ambient-moth-flight 11s -3s ease-in-out infinite}.ambient-moth-wing{transform-box:fill-box;transform-origin:50% 50%;animation:ambient-moth-flap .19s ease-in-out infinite alternate}.wing-right{animation-delay:-.07s}
.ambient-pinwheel{animation:ambient-paper-spin 12s -1.5s cubic-bezier(.36,.05,.45,1) infinite;filter:drop-shadow(1px 1px 1px #422b2255)}.discover-pinwheel .ambient-pinwheel{animation-duration:1.5s}
.ambient-ribbon-tail{transform-origin:0 0;animation:ambient-ribbon-breeze 5.8s -1.2s ease-in-out infinite}
@keyframes ambient-leaf-breeze{0%,100%{transform:rotate(-3deg)}35%{transform:rotate(6deg)}65%{transform:rotate(1deg)}}
@keyframes ambient-moth-flight{0%,100%{transform:translate(-7px,9px) rotate(-15deg);opacity:.8}26%{transform:translate(20px,-9px) rotate(22deg);opacity:1}55%{transform:translate(6px,-27px) rotate(-20deg);opacity:.9}78%{transform:translate(-15px,-10px) rotate(18deg);opacity:1}}
@keyframes ambient-moth-flap{from{transform:scaleX(.35)}to{transform:scaleX(1)}}
@keyframes ambient-paper-spin{0%{transform:rotate(0deg)}18%{transform:rotate(22deg)}42%{transform:rotate(156deg)}65%{transform:rotate(227deg)}82%{transform:rotate(249deg)}100%{transform:rotate(360deg)}}
@keyframes ambient-ribbon-breeze{0%,100%{transform:rotate(-4deg) skewX(-3deg)}40%{transform:rotate(9deg) skewX(4deg)}70%{transform:rotate(1deg)}}
