/* Quiet, composition-aware motion. Only duplicate curtain pixels move; photographs
   and the stable room illustration never receive a whole-image colour filter. */
.cozy-room-visual{isolation:isolate}
.scene-ambience{position:absolute;inset:0;z-index:2;overflow:hidden;border-radius:inherit;pointer-events:none;--scene-cloud-duration:68s;--scene-curtain-duration:11s;--scene-cloud-opacity:.38;--scene-curtain-angle:.19deg;--scene-curtain-shift:.07%}
.scene-ambience *,.scene-ambience *::before,.scene-ambience *::after{box-sizing:border-box;pointer-events:none}
.scene-ambience-description{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
/* Masks stay inside the glass and trace around the sill plant. Weather never
   passes over the window frame, curtain, furniture, or foreground leaves. */
.scene-window{position:absolute;inset:0;overflow:hidden;clip-path:polygon(43.7% 0,70.7% 0,70.7% 31.3%,54.8% 29.9%,54.7% 28%,53.5% 26.8%,53.5% 23.9%,51.8% 22.1%,49.6% 22.2%,48.1% 21.2%,46.1% 22.1%,43.7% 21%)}
.scene-ambience--travel .scene-window{clip-path:polygon(42.5% 0,80% 0,80% 33.4%,54.8% 27.8%,53.5% 26.3%,53.2% 22.4%,51.5% 20.5%,49.5% 20%,48% 17%,46% 15.4%,43% 15.7%,42.5% 12%)}
.scene-cloud-field{position:absolute;left:43.7%;top:0;width:27%;height:21%;overflow:hidden}
.scene-ambience--travel .scene-cloud-field{left:42.5%;width:37.5%;height:23%}
.scene-cloud{position:absolute;left:-75%;top:3%;width:62%;height:auto;overflow:visible;fill:#fff4e5;opacity:var(--scene-cloud-opacity);animation:sceneCloudDrift var(--scene-cloud-duration) linear infinite;animation-delay:var(--scene-cloud-delay,0s)}
.scene-cloud--two{top:34%;width:46%;--scene-cloud-travel:400%;animation-delay:calc(var(--scene-cloud-delay,0s) - var(--scene-cloud-duration) / 2);opacity:calc(var(--scene-cloud-opacity) * .67)}
.scene-phase--dawn{--scene-cloud-opacity:.38}.scene-phase--day{--scene-cloud-opacity:.42}.scene-phase--dusk{--scene-cloud-opacity:.29}.scene-phase--night{--scene-cloud-opacity:.12}
.scene-phase--night .scene-cloud{fill:#e4d7d8}
.scene-weather--breeze{--scene-curtain-angle:.38deg;--scene-curtain-shift:.12%}
.scene-weather--cloudy{--scene-cloud-opacity:.49}
.scene-weather--cloudy.scene-phase--night{--scene-cloud-opacity:.17}
.scene-weather--rain{--scene-cloud-opacity:.31;--scene-curtain-angle:.25deg;--scene-curtain-shift:.09%}
.scene-weather--snow{--scene-cloud-opacity:.27;--scene-curtain-angle:.13deg;--scene-curtain-shift:.05%}
.scene-stars{position:absolute;left:8%;top:6%;width:82%;height:60%;opacity:0;background:radial-gradient(circle at 12% 34%,#fff6d8 0 1px,transparent 1.5px),radial-gradient(circle at 72% 20%,#fff6dc 0 1px,transparent 1.5px),radial-gradient(circle at 43% 65%,#fff4da 0 .8px,transparent 1.3px);animation:sceneStars 9s ease-in-out infinite;animation-delay:var(--scene-light-delay,0s)}
.scene-phase--night .scene-stars{opacity:.35}.scene-weather--rain .scene-stars,.scene-weather--snow .scene-stars,.scene-weather--cloudy .scene-stars{visibility:hidden}
.scene-rain,.scene-snow{position:absolute;inset:-10% 0;opacity:0;visibility:hidden;transition:opacity 1.2s ease}
.scene-rain{background-image:repeating-linear-gradient(102deg,transparent 0 27px,#fff8ed8a 28px 28.7px,transparent 29.5px 51px);background-size:91px 115px;animation:sceneRain 1.3s linear infinite;animation-delay:var(--scene-rain-delay,0s)}
.scene-weather--rain .scene-rain{visibility:visible;opacity:.38}
.scene-snow{background-image:radial-gradient(circle,#fff9ed 0 1.3px,transparent 1.8px),radial-gradient(circle,#fff9ed 0 1px,transparent 1.4px);background-size:57px 73px,91px 109px;background-position:17px 13px,38px 55px;animation:sceneSnow 13s linear infinite;animation-delay:var(--scene-snow-delay,0s)}
.scene-weather--snow .scene-snow{visibility:visible;opacity:.66}
.scene-phase--night .scene-rain{opacity:.25}.scene-phase--night .scene-snow{opacity:.42}
/* Full-size duplicates retain the exact source registration, then clip only the
   curtains. Their slow sub-pixel sway cannot move the room or create white seams. */
.scene-ambience .scene-curtain{position:absolute;inset:0;display:block;width:100%;height:100%;max-width:none;object-fit:fill;transform-origin:32% 0;animation:sceneCurtainSway var(--scene-curtain-duration) ease-in-out infinite;animation-delay:var(--scene-curtain-delay,0s);clip-path:polygon(24.3% 0,41.4% 0,41.4% 33.6%,37.8% 33%,32% 32.3%,24.3% 31.7%)}
.scene-ambience .scene-curtain--right{transform-origin:78% 0;clip-path:polygon(72.9% 0,83.7% 0,83.7% 40.1%,81.9% 40.6%,79.8% 40.4%,77.6% 40.8%,75.2% 39.5%,75.2% 37%,72.9% 37%);animation-name:sceneCurtainSwayRight;animation-delay:calc(var(--scene-curtain-delay,0s) - 1.6s)}
.scene-ambience--travel .scene-curtain--left{transform-origin:31% 0;clip-path:polygon(22.8% 0,39.4% 0,39.4% 27.7%,36.1% 28.5%,34% 30.1%,31.7% 30.7%,29.9% 29.2%,27.5% 30.2%,25% 28.8%,23% 28.4%)}
.scene-ambience--travel .scene-curtain--right{transform-origin:91% 0;clip-path:polygon(83.2% 0,97% 0,97% 27.3%,95.3% 26.5%,94.2% 25.2%,92.8% 23.7%,90.4% 24.2%,88.3% 26.1%,86% 27.1%,83.2% 28.5%)}
.scene-lamp{position:absolute;right:3%;top:27%;width:18%;height:29%;border-radius:50%;background:radial-gradient(ellipse,#ffe8b854 0,transparent 66%);opacity:0;animation:sceneLamp 9s ease-in-out infinite;animation-delay:var(--scene-light-delay,0s)}
.scene-ambience--travel .scene-lamp{right:.7%;top:24%;width:23%;height:32%}
.scene-phase--dusk .scene-lamp{opacity:.43}.scene-phase--night .scene-lamp{opacity:.68}
.scene-phase--dawn .scene-lamp,.scene-phase--day .scene-lamp{display:none}
.scene-steam{position:absolute;left:81.3%;top:38.6%;width:3%;height:8%;opacity:.38}
.scene-ambience--travel .scene-steam{left:83%;top:42%;width:4%;height:10%}
.scene-steam i{position:absolute;left:30%;bottom:0;width:25%;height:64%;border-left:1px solid #fff9ec;border-radius:50%;opacity:0;animation:sceneSteam 8s ease-out infinite;animation-delay:var(--scene-steam-delay,0s)}
.scene-steam i:nth-child(2){left:55%;height:53%;animation-delay:calc(var(--scene-steam-delay,0s) - 2.6s)}
.scene-steam i:nth-child(3){left:10%;height:46%;animation-delay:calc(var(--scene-steam-delay,0s) - 5.2s)}
@keyframes sceneCloudDrift{from{transform:translateX(0)}to{transform:translateX(var(--scene-cloud-travel,290%))}}
@keyframes sceneCurtainSway{0%,100%{transform:skewX(0deg) translateX(0)}50%{transform:skewX(var(--scene-curtain-angle)) translateX(var(--scene-curtain-shift))}}
@keyframes sceneCurtainSwayRight{0%,100%{transform:skewX(0deg) translateX(0)}50%{transform:skewX(calc(var(--scene-curtain-angle) * -.7)) translateX(calc(var(--scene-curtain-shift) * -.6))}}
@keyframes sceneRain{to{background-position:-9px 115px}}
@keyframes sceneSnow{to{background-position:29px 86px,18px 164px}}
@keyframes sceneStars{0%,100%{filter:opacity(.55)}50%{filter:opacity(1)}}
@keyframes sceneLamp{0%,100%{transform:scale(.985)}50%{transform:scale(1.018)}}
@keyframes sceneSteam{0%{opacity:0;transform:translate(0,7%) scale(.8)}20%{opacity:.64}75%{opacity:.28}100%{opacity:0;transform:translate(22%,-65%) scale(1.06)}}
html[data-scene-motion-paused=true] .scene-ambience *,html[data-scene-motion-paused=true] .scene-ambience *::before,html[data-scene-motion-paused=true] .scene-ambience *::after{animation-play-state:paused!important}
body[data-magic-motion=off] .scene-ambience *,body[data-magic-motion=off] .scene-ambience *::before,body[data-magic-motion=off] .scene-ambience *::after{animation:none!important;transition:none!important}
body[data-magic-motion=off] .scene-curtain{transform:none!important}
@media(prefers-reduced-motion:reduce){.scene-ambience *,.scene-ambience *::before,.scene-ambience *::after{animation:none!important;transition:none!important}.scene-curtain{transform:none!important}.scene-cloud--one{left:10%}.scene-cloud--two{left:57%}.scene-steam{display:none}}
@media(prefers-reduced-transparency:reduce){.scene-cloud{opacity:.25}.scene-rain,.scene-snow{opacity:.3}.scene-lamp,.scene-steam{display:none}}
@media(forced-colors:active){.scene-ambience{display:none}}
