.town-life { position:absolute; inset:0; overflow:hidden; pointer-events:none; z-index:3; }
.fountain-water { position:absolute; left:30.38674%; top:43.61041%; width:41.43646%; aspect-ratio:300/280; }
.fountain-water img { display:block; width:100%; height:auto; mask:url('fountain-water-mask.svg') center/100% 100% no-repeat; animation:fountain-ripples 1.8s steps(1,end) infinite; }
@keyframes fountain-ripples { 0%,49.999% { opacity:0; } 50%,100% { opacity:1; } }
.wildlife-spot { position:absolute; height:0; pointer-events:none; }
.wildlife-spot img { display:block; width:100%; height:auto; pointer-events:none; }
.wildlife-spot button { position:absolute; top:-48px; left:-24px; width:48px; height:48px; padding:0; background:none; border:0; pointer-events:auto; }
.wildlife-spot button:focus-visible { outline:2px dashed #ffe4a2; outline-offset:3px; }
body[data-lighting="night"] .fountain-water { filter:brightness(.58) saturate(.78); }
body[data-lighting="twilight"] .fountain-water { filter:brightness(.78) saturate(1.05); }
body[data-lighting="overcast"] .fountain-water { filter:brightness(.78) saturate(.8); }
.night-queue { display:none; position:absolute; left:65%; top:30.5%; width:15%; height:auto; }
body[data-lighting="night"] .night-queue { display:block; filter:brightness(.64) saturate(.8); }
.wind-palm { position:absolute; left:6.5%; top:39.85%; width:20%; translate:-50% -50%; }
.wind-palm img { display:block; width:100%; height:auto; transform-origin:50% 52%; animation:palm-breeze 5s ease-in-out infinite alternate; }
body[data-wind="0"] .wind-palm img { animation:none; }
body[data-wind="2"] .wind-palm img { animation-name:palm-gust; animation-duration:2.8s; }
body[data-lighting="night"] .wind-palm { filter:brightness(.58) saturate(.78); }
body[data-lighting="overcast"] :is(.wind-palm,.town-discoveries) { filter:brightness(.78) saturate(.8); }
.cooking-steam { --steam-drift:40%; position:absolute; left:10%; top:75.9%; width:7%; aspect-ratio:1/1.6; translate:-50% -100%; }
body[data-wind="0"] .cooking-steam { --steam-drift:0%; }
body[data-wind="2"] .cooking-steam { --steam-drift:100%; }
.cooking-steam i { position:absolute; bottom:0; left:40%; width:22%; height:38%; border-radius:50%; background:#fff8e0; filter:blur(2px); opacity:0; animation:grill-steam 4.8s ease-out infinite; }
.cooking-steam i:nth-child(2) { animation-delay:-1.6s; }
.cooking-steam i:nth-child(3) { animation-delay:-3.2s; }
.restaurant-light { position:absolute; left:14%; top:76.4%; width:4%; aspect-ratio:1; border-radius:50%; background:radial-gradient(#ffdf8d99,#ffb44d22 45%,transparent 70%); mix-blend-mode:screen; animation:warm-lamp 5s ease-in-out infinite; }
body[data-lighting="sunny"] .restaurant-light { opacity:.15; }
.ambient-effect:not(.is-in-view), .ambient-effect:not(.is-in-view) *, .town-life.is-paused .ambient-effect, .town-life.is-paused .ambient-effect * { animation-play-state:paused; }
.rain { position:fixed; inset:0; overflow:hidden; pointer-events:none; z-index:5; }
.rain i { position:absolute; left:var(--x); top:-25px; height:var(--length); width:1px; background:#dcecffaa; animation:rain-fall var(--duration) linear var(--delay) infinite; }
.rain.is-paused i { animation-play-state:paused; }
body[data-rain="0"] .rain { display:none; }
body[data-lighting="overcast"] .town-master { filter:brightness(.78) saturate(.8); }
@keyframes palm-breeze { from { transform:rotate(-.7deg); } to { transform:rotate(1deg); } }
@keyframes palm-gust { 0%,100% { transform:rotate(-3deg) skewX(-1deg); } 50% { transform:rotate(4deg) skewX(1deg); } }
@keyframes grill-steam { 0% { opacity:0; transform:translate(0,0) scale(.5); } 20% { opacity:.24; } 100% { opacity:0; transform:translate(var(--steam-drift),-170%) scale(1.6); } }
@keyframes warm-lamp { 0%,100% { filter:brightness(.8); } 40% { filter:brightness(1.1); } 70% { filter:brightness(.9); } }
@keyframes rain-fall { to { transform:translate(-18vw,calc(100dvh + 50px)); } }
@media(prefers-reduced-motion:reduce) {
  .wind-palm img,.cooking-steam i,.restaurant-light,.rain i { animation:none!important; }
  .cooking-steam,.rain { display:none; }
  .fountain-water img { animation:none; opacity:0; }
}

/* The church's painted bell is the target; no floating bell icon over the shops. */
.egg-bell { left:65%; top:93.6%; bottom:auto; translate:-50% -50%; }
.egg-bell svg { visibility:hidden; }

.town-discoveries .tour-shop { left:86%; top:39.3%; width:17%; height:2.6%; }
.tour-buy { display:block; min-height:48px; margin:14px auto 0; padding:9px 24px; border:1px dashed #fce1a5; border-radius:3px 16px 3px 16px; background:#25605a; color:#fff1d0; font:700 17px Georgia,serif; box-shadow:0 3px #123b38; cursor:pointer; }
.tour-buy:focus-visible { outline:3px solid #795627; outline-offset:3px; }
.tour-memories { display:grid; gap:18px; text-align:left; }
.tour-memories figure { margin:0; }
.poster-dialog .tour-memories img { max-height:none; border-radius:4px; }
.tour-memories figcaption { margin:8px 0 0; font:14px/1.5 'Trebuchet MS',sans-serif; }
.photos-pending { padding:24px 0; font:16px/1.6 'Trebuchet MS',sans-serif; color:#715036; }

/* Playa clock drives light; authored weather is an independent layer. */
body[data-lighting="morning"] :is(.town-master,.town-openings) { filter:brightness(.96) saturate(.9) sepia(.08); }
body[data-lighting="morning"] :is(.town-discoveries,.wind-palm,.painted-cat) { filter:brightness(.96) saturate(.9); }
body[data-rain="2"][data-lighting="sunny"] :is(.town-master,.town-openings),
body[data-rain="2"][data-lighting="morning"] :is(.town-master,.town-openings) { filter:brightness(.78) saturate(.8); }
body[data-rain="2"][data-lighting="twilight"] :is(.town-master,.town-openings) { filter:brightness(.65) saturate(.85); }
body[data-rain="2"][data-lighting="night"] :is(.town-master,.town-openings) { filter:brightness(.48) saturate(.7); }
body[data-time-of-day="night"] .resident:is([data-resident="Lola"],[data-resident="Toño"],[data-resident="Inés"]) { display:none; }
body[data-lighting="morning"] .restaurant-light { opacity:.2; }

/* Painted residents share the master coordinate system and scale with the scenery. */
.town-areas > .resident > img { display:block; width:100%; height:auto; }
.town-areas > .resident > .resident-pose{display:none}
.town-areas > .resident > .resident-pose.is-active{display:block}
.town-areas > .resident[data-resident="Lola"]{display:grid;align-content:end}
.town-areas > .resident[data-resident="Lola"] > img{width:66.6667%;margin-inline:auto}
.town-areas > .resident[hidden]{display:none!important}
.shore-pelican { position:absolute; left:87%; top:87.6%; width:9%; height:auto; translate:-50% -100%; }
body[data-lighting="night"] .shore-pelican { filter:brightness(.58) saturate(.78); }
body[data-lighting="twilight"] .shore-pelican { filter:brightness(.78) saturate(1.05); }
body[data-lighting="morning"] .shore-pelican { filter:brightness(.96) saturate(.9); }
body[data-lighting="night"] .town-areas > .resident > img { filter:brightness(.58) saturate(.78); }
body[data-lighting="twilight"] .town-areas > .resident > img { filter:brightness(.78) saturate(1.05); }
body[data-lighting="morning"] .town-areas > .resident > img { filter:brightness(.96) saturate(.9); }
body[data-rain="2"][data-lighting="sunny"] .town-areas > .resident > img,
body[data-rain="2"][data-lighting="morning"] .town-areas > .resident > img { filter:brightness(.78) saturate(.8); }

.apartment-worker { display:none; position:absolute; height:auto; z-index:1; pointer-events:none; }
body[data-sueco-present="true"][data-time-of-day="morning"] .apartment-worker,body[data-sueco-present="true"][data-time-of-day="afternoon"] .apartment-worker { display:block; }


/* Registered painted queue state: people and doorstep replace only the club paving. */
.night-queue { left:58.01105%; top:29.73437%; width:30.38674%; }
body[data-time-of-day="evening"] .night-queue { display:block; filter:brightness(.78) saturate(1.05); }

/* Emissive light sits above the night tint, registered to painted lamps and glass. */
.town-lighting{position:absolute;inset:0;width:100%;height:100%;z-index:4;pointer-events:none;opacity:0;mix-blend-mode:screen;transition:opacity 1.2s}
body[data-lighting="twilight"] .town-lighting{opacity:.65}
body[data-lighting="night"] .town-lighting{opacity:1}
@media(prefers-reduced-motion:reduce){.town-lighting{transition:none}}
.prepared-day-review{display:grid;gap:8px;margin:14px 0;font:13px/1.5 'Trebuchet MS',sans-serif}
.prepared-day-review select,.prepared-day-review button{min-height:48px;padding:9px 12px;border:1px solid #997047;border-radius:5px;background:#fff2d6;color:#553d27;font:14px 'Trebuchet MS',sans-serif}

/* Only Simi's arm changes; the registered frame keeps his head and feet fixed. */
.simi-gesture{position:absolute;aspect-ratio:90/130;pointer-events:none}
.simi-gesture img{display:block;width:100%;height:auto;opacity:0}
.simi-gesture.is-waving img{animation:simi-wave 2.4s steps(1,end) 1}
.scene-loading .simi-gesture img{animation-play-state:paused}
@keyframes simi-wave{0%,45%{opacity:1}20%,70%,100%{opacity:0}}
.simi-gesture:not(.is-in-view) img,.town-life.is-paused .simi-gesture img{animation-play-state:paused}
body[data-lighting="night"] :is(.simi-gesture,.simi-costume){filter:brightness(.58) saturate(.78)}
body[data-lighting="twilight"] :is(.simi-gesture,.simi-costume){filter:brightness(.78) saturate(1.05)}
body[data-lighting="morning"] :is(.simi-gesture,.simi-costume){filter:brightness(.96) saturate(.9) sepia(.08)}
body[data-lighting="overcast"] :is(.simi-gesture,.simi-costume),
body[data-rain="2"]:is([data-lighting="sunny"],[data-lighting="morning"]) :is(.simi-gesture,.simi-costume){filter:brightness(.78) saturate(.8)}
body[data-rain="2"][data-lighting="twilight"] :is(.simi-gesture,.simi-costume){filter:brightness(.65) saturate(.85)}
body[data-rain="2"][data-lighting="night"] :is(.simi-gesture,.simi-costume){filter:brightness(.48) saturate(.7)}
.simi-wave-button{display:block;min-height:48px;width:100%;margin:16px 0 0;padding:12px;border:1px solid #24618c;border-radius:6px;background:#e3f1f7;color:#214a66;font:700 15px 'Trebuchet MS',sans-serif;cursor:pointer}
.simi-wave-button:focus-visible{outline:3px solid #245c83;outline-offset:3px}
@media(prefers-reduced-motion:reduce){.simi-gesture img{animation:none!important;opacity:0!important}}

/* Both roof states use the same registered walls, access door and floor. */
.rooftop-laundry{position:absolute;display:none;height:auto;pointer-events:none}
.rooftop-discovery{position:absolute;display:none;width:48px;height:48px;translate:-50% -50%;border:0;background:transparent;cursor:pointer}
.rooftop-discovery:focus-visible{outline:3px solid #fff0ba;outline-offset:3px;border-radius:50%}
body[data-rooftop-laundry="true"] :is(.rooftop-laundry,.rooftop-discovery){display:block}
body[data-rooftop-laundry="true"] .town-map .apartment-worker{display:none}
body[data-lighting="morning"] .rooftop-laundry{filter:brightness(.96) saturate(.9) sepia(.08)}

.simi-costume{position:absolute;display:none;aspect-ratio:90/130;pointer-events:none}
.simi-costume img{display:block;width:100%;height:auto}
.simi-costume.is-active{display:block}
body:not([data-simi-outfit="classic"]) .simi-gesture{display:none}

.arrival-daily-note{margin-top:20px;border-top:1px solid #b59b78;padding-top:12px;text-align:left}
.arrival-daily-note h2{font:700 15px/1.4 'Trebuchet MS',sans-serif;margin:0 0 10px}
.arrival-daily-note p{font:17px/1.65 Georgia,serif;margin:0 0 16px;color:#513c2c}
.arrival-daily-note .arrival-enter{display:block;position:static;width:100%;min-height:48px;margin:0;padding:12px;background:#295f61;color:#fff4d5;border:0;border-radius:6px;font:700 16px 'Trebuchet MS',sans-serif;cursor:pointer}
.arrival-daily-note .arrival-enter:disabled{cursor:wait;opacity:1}
.arrival-daily-note .arrival-enter.is-loading:before{content:'';display:inline-block;width:16px;height:16px;margin-right:10px;border:2px solid #fff4d54d;border-top-color:#fff4d5;border-radius:50%;vertical-align:-3px;animation:arrival-entry-spin .8s linear infinite}
@keyframes arrival-entry-spin{to{transform:rotate(360deg)}}
@media(prefers-reduced-motion:reduce){.arrival-daily-note .arrival-enter.is-loading:before{animation:none}}
.arrival-enter:focus-visible{outline:3px solid #275c83;outline-offset:4px}
.has-daily-note :is(progress,.arrival-message,.arrival-lights,.arrival-aside){display:none}
.has-daily-note .arrival-emblem{display:none}
.scene-loading-screen{overflow-y:auto}
@media(max-height:650px){.has-daily-note .arrival-ticket h1{font-size:28px}.has-daily-note .arrival-daily-note p{font-size:15px}}
