/* V7: visible, staged transformation: shutter -> scanner -> dispersal -> reveal */
.room-stage{overflow:hidden;contain:paint}
.motion-halo,.motion-shutter,.motion-ring,.motion-scanner,.motion-line,.motion-particles{position:absolute;pointer-events:none}
.motion-halo{inset:0;z-index:1;background:radial-gradient(ellipse at 50% 55%,#9dffe63d 0%,#59edb112 42%,transparent 72%);opacity:0;transform:scale(.65)}
.room-stage.is-animating .motion-halo{animation:v7halo 2s ease-out both}
@keyframes v7halo{0%{opacity:0;transform:scale(.5)}35%{opacity:1}100%{opacity:.28;transform:scale(1.3)}}
.motion-shutter{top:0;bottom:0;width:50%;z-index:6;background:linear-gradient(100deg,#082d38e8,#165866df);backdrop-filter:blur(3px);opacity:0}
.shutter-left{left:0;transform:translateX(-110%);border-right:1px solid #bbffec88}
.shutter-right{right:0;transform:translateX(110%);border-left:1px solid #bbffec88}
.room-stage.is-animating .shutter-left{animation:v7left 1.05s cubic-bezier(.22,1,.36,1) both}
.room-stage.is-animating .shutter-right{animation:v7right 1.05s cubic-bezier(.22,1,.36,1) both}
@keyframes v7left{0%{opacity:0;transform:translateX(-110%)}25%{opacity:.8;transform:translateX(0)}48%{opacity:.7;transform:translateX(0)}100%{opacity:0;transform:translateX(-110%)}}
@keyframes v7right{0%{opacity:0;transform:translateX(110%)}25%{opacity:.8;transform:translateX(0)}48%{opacity:.7;transform:translateX(0)}100%{opacity:0;transform:translateX(110%)}}
.motion-scanner{left:-20%;top:0;bottom:0;width:28%;z-index:8;opacity:0;transform:skewX(-15deg);background:linear-gradient(90deg,transparent,#a4ffdc19 20%,#c9fff29c 48%,#a4ffdc18 56%,transparent);filter:blur(5px)}
.room-stage.is-animating .motion-scanner{animation:v7scan 1.5s .18s cubic-bezier(.2,.7,.2,1) both}
@keyframes v7scan{0%{opacity:0;left:-35%}20%{opacity:1}78%{opacity:.9}100%{opacity:0;left:115%}}
.motion-line{left:0;right:0;top:50%;height:1px;z-index:7;opacity:0;background:linear-gradient(90deg,transparent,#ccfff7,transparent);box-shadow:0 0 25px 4px #a5ffe788}
.room-stage.is-animating .motion-line{animation:v7line 1.15s .4s ease-in-out both}
@keyframes v7line{0%{opacity:0;transform:scaleX(.05) translateY(-80px)}45%{opacity:1;transform:scaleX(1) translateY(0)}100%{opacity:0;transform:scaleX(.4) translateY(95px)}}
.motion-ring{z-index:7;left:50%;top:52%;width:130px;height:130px;margin:-65px 0 0 -65px;border:1px solid #bdffeac9;border-radius:50%;box-shadow:0 0 30px #85ffdc77,inset 0 0 18px #85ffdc44;opacity:0}
.room-stage.is-animating .ring-one{animation:v7ring 1.5s .5s ease-out both}
.room-stage.is-animating .ring-two{animation:v7ring 1.5s .73s ease-out both}
@keyframes v7ring{0%{opacity:0;transform:scale(.15)}18%{opacity:.9}100%{opacity:0;transform:scale(4.3)}}
.motion-particles{inset:0;z-index:8;overflow:hidden}
.motion-particles i{position:absolute;left:var(--px);top:var(--py);width:4px;height:4px;border-radius:50%;opacity:0;background:#e4fff7;box-shadow:0 0 13px 3px #9effdc}
.motion-particles i:nth-child(1){--px:23%;--py:65%;--dx:-80px;--dy:-90px;--dl:.36s}
.motion-particles i:nth-child(2){--px:35%;--py:44%;--dx:55px;--dy:-130px;--dl:.52s}
.motion-particles i:nth-child(3){--px:48%;--py:70%;--dx:-34px;--dy:-170px;--dl:.42s}
.motion-particles i:nth-child(4){--px:58%;--py:57%;--dx:100px;--dy:-80px;--dl:.61s}
.motion-particles i:nth-child(5){--px:73%;--py:77%;--dx:44px;--dy:-145px;--dl:.48s}
.motion-particles i:nth-child(6){--px:18%;--py:34%;--dx:77px;--dy:-100px;--dl:.67s}
.motion-particles i:nth-child(7){--px:67%;--py:25%;--dx:-45px;--dy:-110px;--dl:.51s}
.motion-particles i:nth-child(8){--px:83%;--py:46%;--dx:-70px;--dy:-140px;--dl:.71s}
.motion-particles i:nth-child(9){--px:43%;--py:29%;--dx:50px;--dy:-60px;--dl:.55s}
.motion-particles i:nth-child(10){--px:29%;--py:80%;--dx:-50px;--dy:-105px;--dl:.79s}
.motion-particles i:nth-child(11){--px:55%;--py:85%;--dx:70px;--dy:-90px;--dl:.61s}
.motion-particles i:nth-child(12){--px:77%;--py:60%;--dx:-55px;--dy:-70px;--dl:.83s}
.room-stage.is-animating .motion-particles i{animation:v7spark 1.5s var(--dl) cubic-bezier(.16,1,.3,1) both}
@keyframes v7spark{0%{opacity:0;transform:translate(0,0) scale(.2)}18%{opacity:1}100%{opacity:0;transform:translate(var(--dx),var(--dy)) scale(.1)}}
.room-stage .room-object{transition:transform 1.5s cubic-bezier(.16,1,.3,1),opacity 1.25s ease,filter 1.2s ease!important}
.room-stage.is-animating .room-outcome span{animation:v7word 1.15s .55s cubic-bezier(.16,1,.3,1) both!important}
@keyframes v7word{0%{opacity:0;filter:blur(24px);transform:translateY(34px) scale(.72)}100%{opacity:1;filter:blur(0);transform:translateY(0) scale(1)}}
.room-stage.is-restoring .room-outcome{transition:opacity .45s,transform .6s!important}
.room-stage.is-cleared:not(.is-animating) .motion-halo{opacity:.28;transform:scale(1.3)}
/* quiet finishing touches across existing pages */
@media(hover:hover) and (pointer:fine){.site-nav a,.nav-links a{transition:color .25s,transform .25s}.site-nav a:hover,.nav-links a:hover{transform:translateY(-2px)}}
@media(prefers-reduced-motion:reduce){.room-stage.is-animating .motion-halo,.room-stage.is-animating .motion-shutter,.room-stage.is-animating .motion-scanner,.room-stage.is-animating .motion-line,.room-stage.is-animating .motion-ring,.room-stage.is-animating .motion-particles i,.room-stage.is-animating .room-outcome span{animation:none!important;opacity:0!important}.room-stage.is-cleared .room-outcome span{opacity:1!important}}
