/* Motion is transform/opacity based. Every continuous effect has a visible pause
   control, respects reduced motion, and pauses when the document is hidden. */
@keyframes ticker{to{transform:translateX(-50%)}}
@keyframes float-art{0%,100%{transform:translateY(0) rotate(0deg)}50%{transform:translateY(-9px) rotate(-1deg)}}
@keyframes spark-turn{0%,100%{transform:rotate(17deg) scale(1)}50%{transform:rotate(35deg) scale(.8)}}
@keyframes confetti-drift{0%,100%{transform:translate(0,0) rotate(var(--angle))}50%{transform:translate(5px,-13px) rotate(var(--angle))}}
@keyframes loading-spin{to{transform:rotate(405deg)}}
@keyframes dialog-in{from{opacity:0;transform:translateY(18px) scale(.98)}to{opacity:1;transform:none}}
.ticker-track{animation:ticker 38s linear infinite}.poster-frame{animation:float-art 7s ease-in-out infinite}.spark{animation:spark-turn 5s ease-in-out infinite}.spark-b{animation-delay:-2s}.confetti i{animation:confetti-drift 6s ease-in-out infinite}.confetti i:nth-child(2n){animation-delay:-2s}.loading-square{animation:loading-spin 1.3s ease-in-out infinite}.will-reveal{opacity:0;transform:translateY(27px) rotate(1deg);transition:opacity .65s var(--ease),transform .65s var(--ease)}.will-reveal.is-visible{opacity:1;transform:none}.will-reveal:nth-child(2){transition-delay:70ms}.will-reveal:nth-child(3){transition-delay:140ms}
.opening{position:fixed;inset:0;z-index:800;background:var(--navy);color:white;isolation:isolate;overflow:hidden;display:grid;place-items:center}.opening-grid{position:absolute;inset:-50%;background-image:linear-gradient(#ffffff14 1px,transparent 1px),linear-gradient(90deg,#ffffff14 1px,transparent 1px);background-size:68px 68px;transform:rotate(-15deg) scale(1.5);opacity:0}.opening-center{position:relative;z-index:3;text-align:center;padding:24px;width:100%}.opening-center>p:first-child{font:800 12px/1.5 Arial,sans-serif;letter-spacing:.22em;color:var(--sky);margin-bottom:24px}.opening-number{position:absolute;left:50%;top:49%;transform:translate(-50%,-50%) rotate(-8deg);font:900 min(43vw,440px)/1 Arial,sans-serif;color:transparent;-webkit-text-stroke:1px #a6daf04d;z-index:-1;letter-spacing:-.08em}.opening-center h2{font-size:clamp(54px,13vw,168px);line-height:1.4;font-weight:1000;letter-spacing:-.09em;transform:translateY(110px) rotate(9deg) scale(.7);opacity:0;color:var(--pink);text-shadow:4px 5px 0 var(--navy),7px 8px 0 var(--paper);white-space:nowrap}.opening-center>p:nth-last-child(2){font-size:clamp(12px,2vw,24px);font-weight:900;margin-top:22px;letter-spacing:.09em;opacity:0;transform:translateY(20px)}.opening-line{height:3px;width:140px;background:#fff3;margin:37px auto 0;overflow:hidden}.opening-line i{display:block;width:100%;height:100%;background:var(--sky);transform:translateX(-100%)}.opening-slash{position:absolute;top:-50%;height:210%;width:40%;transform:translateX(-300%) rotate(24deg);pointer-events:none;z-index:2}.slash-one{left:0;background:var(--sky)}.slash-two{left:35%;background:var(--pink)}.slash-three{left:70%;background:var(--yellow)}.opening-skip{position:absolute;right:30px;top:27px;z-index:8;border:1px solid #fff7;color:white;min-height:44px;padding:11px 18px;font:800 10px Arial,sans-serif;letter-spacing:.1em;display:flex;gap:20px;align-items:center;background:#20376366}.opening-skip:hover{background:#fff2}.opening-skip span{font-size:20px}.opening-corner{position:absolute;bottom:28px;left:30px;font:800 9px Arial,sans-serif;letter-spacing:.2em}.opening.running .opening-grid{animation:intro-grid 1.8s var(--ease) both}.opening.running h2{animation:intro-punch .75s .25s var(--ease) both}.opening.running .opening-center>p:nth-last-child(2){animation:intro-sub .6s .65s var(--ease) both}.opening.running .opening-line i{animation:intro-progress 1.5s .15s linear both}.opening.running .opening-number{animation:intro-number 1.1s var(--ease) both}.opening.running .opening-slash{animation:intro-slash .8s var(--ease) both}.opening.running .slash-two{animation-delay:.075s}.opening.running .slash-three{animation-delay:.15s}
@keyframes intro-grid{from{opacity:0;transform:rotate(-25deg) scale(2)}to{opacity:1;transform:rotate(-15deg) scale(1)}}
@keyframes intro-punch{0%{opacity:0;transform:translateY(110px) rotate(9deg) scale(.7)}65%{opacity:1;transform:translateY(-8px) rotate(-5deg) scale(1.04)}100%{opacity:1;transform:translateY(0) rotate(-4deg) scale(1)}}
@keyframes intro-sub{to{opacity:1;transform:translateY(0)}}
@keyframes intro-progress{to{transform:translateX(0)}}
@keyframes intro-number{from{opacity:0;transform:translate(-50%,-30%) rotate(8deg) scale(.5)}to{opacity:1;transform:translate(-50%,-50%) rotate(-8deg) scale(1)}}
@keyframes intro-slash{0%{transform:translateX(-370%) rotate(24deg)}40%{transform:translateX(-20%) rotate(24deg)}100%{transform:translateX(530%) rotate(24deg)}}
.route-wipe{position:fixed;inset:0;pointer-events:none;z-index:750;visibility:hidden;overflow:hidden}.route-wipe i{position:absolute;inset:-30% -40%;transform:translateX(-120%) skewX(-20deg);background:var(--navy)}.route-wipe i:nth-child(2){background:var(--route-color,var(--pink));inset:-30% -15%}.route-wipe>span{position:absolute;inset:0;display:grid;place-items:center;font:900 clamp(29px,7vw,88px)/1 Arial,sans-serif;font-style:italic;color:var(--navy);letter-spacing:-.03em;opacity:0}.route-wipe.run{visibility:visible}.route-wipe.run i{animation:route-wipe .62s cubic-bezier(.75,0,.2,1) both}.route-wipe.run i:nth-child(2){animation-delay:.04s}.route-wipe.run>span{animation:route-text .56s .03s both}
@keyframes route-wipe{0%{transform:translateX(-125%) skewX(-20deg)}40%,55%{transform:translateX(0) skewX(-20deg)}100%{transform:translateX(125%) skewX(-20deg)}}
@keyframes route-text{0%,20%{opacity:0;transform:translateX(-40px)}40%,60%{opacity:1;transform:none}80%,100%{opacity:0;transform:translateX(60px)}}
.motion-off *, .motion-off *:before,.motion-off *:after{animation:none!important;transition:none!important}.document-hidden *, .document-hidden *:before,.document-hidden *:after{animation-play-state:paused!important}.motion-off .will-reveal{opacity:1;transform:none;transition:none}.motion-off .poster-scene{transform:rotate(7deg)!important}.motion-off .btn,.motion-off .exhibit-card,.motion-off .discovery-card,.motion-off .stage-block{transition:none}.motion-off,.motion-off *{scroll-behavior:auto!important}.motion-off .route-wipe{display:none!important}
@media(max-width:700px){.opening-skip{right:20px;top:18px;padding:9px 13px}.opening-center h2{text-shadow:2px 3px 0 var(--navy),4px 5px 0 var(--paper)}.opening-center>p:first-child{font-size:9px}.opening-center>p:nth-last-child(2){letter-spacing:.02em}.opening-corner{left:20px;font-size:8px}.route-wipe>span{font-size:9vw}.poster-frame{animation-duration:8s}}
@media(prefers-reduced-motion:reduce){html:not(.motion-on){scroll-behavior:auto}html:not(.motion-on) *,html:not(.motion-on) *:before,html:not(.motion-on) *:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}html:not(.motion-on) .will-reveal{opacity:1;transform:none}html:not(.motion-on) .opening,html:not(.motion-on) .route-wipe{display:none!important}html:not(.motion-on) .poster-scene{transform:rotate(7deg)!important}}

/* Global mobile-menu motion: both close button and Escape use the exit phase. */
@keyframes mobile-menu-in{from{opacity:0;transform:translateY(-22px)}to{opacity:1;transform:translateY(0)}}
@keyframes mobile-menu-out{from{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-18px)}}
@keyframes mobile-backdrop-in{from{opacity:0}to{opacity:1}}
@keyframes mobile-backdrop-out{from{opacity:1}to{opacity:0}}
.mobile-menu.is-opening{animation:mobile-menu-in .28s var(--ease) both}
.mobile-menu.is-closing{animation:mobile-menu-out .20s ease-in both;pointer-events:none}
.mobile-menu.is-opening::backdrop{animation:mobile-backdrop-in .28s ease both}
.mobile-menu.is-closing::backdrop{animation:mobile-backdrop-out .20s ease both}
.motion-off .mobile-menu,.motion-off .mobile-menu::backdrop{animation:none!important;transition:none!important}
@media(prefers-reduced-motion:reduce){html:not(.motion-on) .mobile-menu,html:not(.motion-on) .mobile-menu::backdrop{animation:none!important;transition:none!important}}
