/* Water and character effects use map coordinates, never viewport coordinates. */
.living-scene{position:absolute;inset:0;pointer-events:none}.scene-svg{width:100%;height:100%;stroke:none;fill:none;overflow:visible}.river-currents .current{fill:none;stroke:#efffff;stroke-width:2.3;stroke-linecap:round;stroke-dasharray:9 37 3 23;opacity:.52;animation:stream-flow 2.6s linear infinite}.current:nth-child(2n){stroke-width:1.3;opacity:.7;animation-duration:3.5s}.jet-base{stroke:#baf3f5;stroke-width:3.2;opacity:.43;fill:none}.jet{stroke:#f0ffff;stroke-width:2.1;fill:none;stroke-dasharray:8 5 3 7;stroke-linecap:round;animation:jet-flow .8s linear infinite}.pool-ring{stroke:#f4ffff;stroke-width:1.5;fill:none;animation:fountain-rings 2.8s linear infinite}.pool-ring.second{animation-delay:-1.4s}.splash{fill:#fff;stroke:none;animation:water-drop 1.1s ease-out infinite}.splash.side{animation-name:water-drop-side}.world-effects .ripple,.world-effects .fountain-spark,.world-effects .butterfly,.world-effects .chimney{display:none}
.house-reaction{opacity:0;transition:opacity .3s}.house-reaction.is-active{opacity:1}.window-glow{fill:url(#window-light);stroke:#ffeaae55;stroke-width:1;mix-blend-mode:screen;animation:window-flicker 2.2s ease-in-out infinite}.door-light{fill:#ffd88d;opacity:.3;animation:window-flicker 2.6s infinite}.house-puff{fill:#fff8e8;filter:blur(3px);transform-box:fill-box;transform-origin:center;animation:welcome-smoke 2.7s ease-out infinite;animation-delay:var(--delay)}.house-greeting path{fill:#f6c596;stroke:#fff0cc;stroke-width:1;animation:welcome-heart 2.8s ease-out infinite}.garden-butterfly path{fill:#ffdb72;stroke:#9f7b40;stroke-width:1;animation:garden-dance 3.4s ease-in-out infinite}.garden-butterfly.other path{fill:#fff6d6;animation-delay:-1.6s}.house-reaction:not(.is-active) *{animation-play-state:paused}
.bridge-cat{left:9%;top:48%;width:140px;height:125px;overflow:visible;animation:none;mix-blend-mode:normal}.cat-performer{position:absolute;left:0;top:0;width:74px;height:91px;transform-origin:50% 95%;animation:cat-hunt 7s ease-in-out infinite;mix-blend-mode:multiply}.cat-body{width:74px;height:91px;overflow:hidden}.cat-body img{position:absolute;width:153px;left:-39px;top:-29px}.catching-paw{position:absolute;left:38px;top:38px;width:40px;height:40px;fill:#020302;stroke:none;transform-origin:15% 90%;animation:cat-swat 7s ease-in-out infinite}.catching-paw ellipse{fill:#d9a29c}.cat-shadow{position:absolute;left:10px;top:84px;width:55px;height:12px;border-radius:50%;background:#1d312737;filter:blur(3px);animation:hunt-shadow 7s infinite}.chase-butterfly{position:absolute;left:54px;top:0;width:30px;height:27px;animation:butterfly-tease 7s ease-in-out infinite}.chase-butterfly svg{width:100%;height:100%;overflow:visible;fill:#ffe197;stroke:#886e40;stroke-width:1}.wing{transform-origin:20px 20px;animation:wingbeat .18s ease-in-out infinite alternate}.wing.right{animation-direction:alternate-reverse}.butterfly-body{fill:none;stroke:#6d6441;stroke-width:1.6}
/* Hit regions include the roof and facade, not just the sign. */
.place-story{left:27.5%;top:25%;width:440px;height:370px}.place-story .place-sign{margin-top:108px}.place-cats{left:79%;top:25%;width:580px;height:355px}.place-cats .place-sign{margin-top:76px}.place-shop{left:27.5%;top:68%;width:445px;height:355px}.place-shop .place-sign{margin-top:27px}.place-journal{left:80%;top:69%;width:360px;height:260px}.place-journal .place-sign{margin-top:17px}.scene-hidden *{animation-play-state:paused!important}
@keyframes stream-flow{to{stroke-dashoffset:-144}}@keyframes jet-flow{to{stroke-dashoffset:-46}}@keyframes fountain-rings{0%{transform:scale(.55);opacity:0}20%{opacity:.75}100%{transform:scale(1.85);opacity:0}}@keyframes water-drop{0%{transform:translate(0,0);opacity:0}20%{opacity:.8}60%{transform:translate(-4px,-7px);opacity:.7}100%{transform:translate(-7px,2px);opacity:0}}@keyframes water-drop-side{0%{transform:translate(0,0);opacity:0}20%{opacity:.8}60%{transform:translate(4px,-5px);opacity:.7}100%{transform:translate(7px,2px);opacity:0}}@keyframes window-flicker{0%,100%{opacity:.45}50%{opacity:.85}}@keyframes welcome-smoke{0%{transform:translate(0,0) scale(.4);opacity:0}20%{opacity:.7}100%{transform:translate(24px,-68px) scale(2.4);opacity:0}}@keyframes welcome-heart{0%{transform:translateY(0) scale(.8);opacity:0}20%{opacity:1}100%{transform:translateY(-46px) scale(1.2);opacity:0}}@keyframes garden-dance{0%,100%{transform:translate(0,0) rotate(-15deg)}50%{transform:translate(30px,-45px) rotate(25deg)}}
@keyframes cat-hunt{0%,19%,100%{transform:translate(0,0) rotate(0)}26%{transform:translate(1px,4px) scale(1.04,.94) rotate(5deg)}36%{transform:translate(17px,-22px) rotate(-10deg) scale(.96,1.05)}46%{transform:translate(28px,0) rotate(3deg)}58%{transform:translate(28px,0) rotate(-3deg)}66%{transform:translate(40px,-17px) rotate(-8deg)}76%{transform:translate(35px,0) rotate(2deg)}90%{transform:translate(8px,-3px) rotate(-3deg)}}
@keyframes cat-swat{0%,24%,48%,57%,78%,100%{transform:rotate(32deg) scale(.35);opacity:0}29%{opacity:1;transform:rotate(0) scale(.8)}36%,65%{opacity:1;transform:rotate(-35deg) scale(1.1)}42%,71%{opacity:1;transform:rotate(12deg) scale(.9)}60%{opacity:1;transform:rotate(0) scale(.8)}}
@keyframes butterfly-tease{0%,100%{transform:translate(-7px,5px) rotate(-12deg)}18%{transform:translate(17px,15px) rotate(15deg)}33%{transform:translate(32px,-28px) rotate(-22deg)}43%{transform:translate(59px,-5px) rotate(22deg)}57%{transform:translate(49px,8px) rotate(-15deg)}65%{transform:translate(70px,-30px) rotate(25deg)}79%{transform:translate(36px,-45px) rotate(-18deg)}91%{transform:translate(7px,-24px) rotate(10deg)}}@keyframes wingbeat{from{transform:scaleX(.25)}to{transform:scaleX(1)}}@keyframes hunt-shadow{0%,19%,100%{transform:translateX(0) scale(1);opacity:.65}36%{transform:translateX(17px) scale(.7);opacity:.25}46%,58%{transform:translateX(28px) scale(1);opacity:.65}66%{transform:translateX(40px) scale(.7);opacity:.25}76%{transform:translateX(35px) scale(1);opacity:.65}90%{transform:translateX(8px);opacity:.6}}
@media(prefers-reduced-motion:reduce){.scene-svg [filter]{filter:none}.river-currents,.splash,.pool-ring,.house-puff,.house-greeting{display:none}}
/* Small props share the illustration's map coordinates and never repaint the full plate. */
.scene-props{position:absolute;inset:0;pointer-events:none;z-index:20}.prop-hotspot{position:absolute;display:block;background:transparent;pointer-events:auto;border-radius:18px}.prop-hotspot:focus-visible{outline:3px solid #fff1b5;outline-offset:2px}.van-hotspot{left:550px;top:768px;width:130px;height:110px}.lamp-hotspot{width:44px;height:44px;border-radius:50%}
.town-lamp .lamp-halo,.town-lamp .lamp-ground{fill:url(#lamp-halo);stroke:none;opacity:0;transition:opacity 1.4s ease-out}.town-lamp .lamp-cone{fill:url(#lamp-cone);stroke:none;opacity:0;transition:opacity 1.6s ease-out}.town-lamp .lamp-glass{fill:url(#lamp-bulb);stroke:none;opacity:0;transition:opacity .9s ease-out}.town-lamp.is-lit .lamp-halo{opacity:.62}.town-lamp.is-lit .lamp-cone{opacity:.36}.town-lamp.is-lit .lamp-ground{opacity:.23}.town-lamp.is-lit .lamp-glass{opacity:.82}
.tree-breeze{transform-box:fill-box;transform-origin:50% 95%;animation:tree-breeze 6.5s ease-in-out infinite;animation-delay:var(--tree-delay)}.tree-breeze path{fill:none;stroke:#55763e;stroke-width:3;stroke-linecap:round;opacity:.7}.tree-breeze .tree-leaf{fill:#83a252;stroke:#496e3d;stroke-width:1;opacity:.86}
.delivery-van .van-beam{fill:url(#car-beam);stroke:none;opacity:0;transition:opacity 1.1s ease-out}.delivery-van .van-headlight{fill:url(#car-lamp-glow);stroke:none;opacity:0;transition:opacity .9s ease-out}.delivery-van .van-puff{fill:#f8f2d4;stroke:none;opacity:0}.delivery-van.is-running .van-beam{opacity:.66}.delivery-van.is-running .van-headlight{opacity:.92}.delivery-van.is-running .van-puff{animation:van-exhaust 3.6s ease-out infinite;animation-delay:var(--delay)}
@keyframes tree-breeze{0%,100%{translate:0 0;rotate:-1deg}50%{translate:2px 0;rotate:1.5deg}}@keyframes van-exhaust{0%,15%{transform:translate(0,0) scale(.55);opacity:0}27%{opacity:.44}62%,100%{transform:translate(18px,-15px) scale(2.1);opacity:0}}
.calm-scene .tree-breeze,.calm-scene .delivery-van .van-puff{animation:none!important}.calm-scene .delivery-van .van-puff{opacity:0!important}.scene-hidden .tree-breeze,.scene-hidden .delivery-van .van-puff{animation-play-state:paused!important}
@media(prefers-reduced-motion:reduce){.tree-breeze,.delivery-van .van-puff{animation:none!important}.town-lamp *, .delivery-van .van-beam,.delivery-van .van-headlight{transition:none!important}.delivery-van .van-puff{opacity:0!important}}
