/* Each venue has a distinct entrance; interaction stays responsive. */
@keyframes lounge-unveil{from{opacity:0;clip-path:inset(100% 0 0);transform:translateY(35px)}to{opacity:1;clip-path:inset(0);transform:none}}
@keyframes neon-lock{0%{opacity:0;transform:translateX(-45px) skewX(-8deg)}65%{opacity:1;transform:translateX(6px) skewX(1deg)}100%{opacity:1;transform:none}}
@keyframes stage-unveil{from{opacity:0;clip-path:inset(0 100% 0 0);transform:translateX(-25px)}to{opacity:1;clip-path:inset(0);transform:none}}
@keyframes frame-open{from{opacity:0;transform:scale(.94)}to{opacity:1;transform:scale(1)}}
@keyframes tile-arrive{from{opacity:0;transform:translateY(45px) rotateX(15deg)}to{opacity:1;transform:none}}
.reference-backdrop{transform:translate3d(0,var(--scene-y,0px),0) scale(1.06)}
.lounge-content,.neon-content,.imperial-copy{translate:0 var(--copy-y,0px)}
.motion-progress{position:fixed;top:0;left:0;right:0;height:2px;background:var(--accent);transform:scaleX(var(--reading-progress,0));transform-origin:left;z-index:80;pointer-events:none}
.gallery-grid button{position:relative}
.gallery-grid button:after{content:'↗';position:absolute;right:14px;bottom:14px;width:38px;height:38px;display:grid;place-items:center;background:var(--bg);color:var(--accent);border:1px solid var(--accent);border-radius:50%;opacity:0;transform:translateY(12px);transition:opacity .25s,transform .35s}
.gallery-grid button:is(:hover,:focus-visible):after{opacity:1;transform:none}
@media(prefers-reduced-motion:no-preference){
 .millennium .lounge-headline span{animation:lounge-unveil 1.35s cubic-bezier(.16,1,.3,1) .3s both}
 .millennium .lounge-headline span:nth-child(2){animation-delay:.55s}
 .millennium .lounge-frame{animation:frame-open 1.4s cubic-bezier(.16,1,.3,1) both}
 .millennium .lounge-description{animation-delay:.9s}
 .millennium .lounge-content .round-explore{animation-delay:1.15s}
 .babylon .neon-content{animation:none}
 .babylon .neon-content h1{animation:neon-lock 1s cubic-bezier(.16,1,.3,1) .2s both}
 .babylon .neon-kicker,.babylon .neon-subtitle,.babylon .neon-description,.babylon .neon-access{animation:title-arrive .7s ease .65s both}
 .babylon .neon-routes{perspective:900px}
 .babylon .neon-tile{animation:tile-arrive .85s cubic-bezier(.16,1,.3,1) both;animation-delay:calc(.7s + var(--tile-index,0)*.12s)}
 .paragon .imperial-copy{animation:none}
 .paragon .imperial-copy h1{animation:stage-unveil 1.5s cubic-bezier(.16,1,.3,1) .2s both}
 .paragon .imperial-copy>.eyebrow,.paragon .imperial-copy>p,.paragon .imperial-copy>.button{animation:title-arrive .9s ease .75s both}
 .millennium .reveal{transition-duration:1s;transition-timing-function:cubic-bezier(.16,1,.3,1)}
 .babylon .reveal{transition-duration:.65s;transition-timing-function:cubic-bezier(.16,1,.3,1)}
 .babylon .reveal.pending{transform:translateX(-22px)}
 .paragon .reveal{clip-path:inset(0);transition:clip-path 1s cubic-bezier(.16,1,.3,1),opacity .8s,transform .8s;transition-delay:var(--reveal-delay,0ms)}
 .paragon .reveal.pending{clip-path:inset(0 0 18%);transform:translateY(35px)}
 .nav.open{animation:title-arrive .3s ease both}
}
@media(hover:hover) and (pointer:fine) and (prefers-reduced-motion:no-preference){
 .neon-tile{transition:translate .3s,box-shadow .3s}
 .neon-tile:hover{translate:0 -7px;box-shadow:0 0 26px #40dfff55}
 .round-explore{translate:var(--magnet-x,0px) var(--magnet-y,0px);transition:translate .25s ease-out}
 .gallery-grid button:hover img{transform:scale(1.07)}
}
@media(prefers-reduced-motion:reduce){.reference-backdrop{transform:none}.lounge-content,.neon-content,.imperial-copy{translate:none}.motion-progress{display:none}.paragon .reveal.pending{clip-path:none}.gallery-grid button:after{transform:none}}
