/* ---- Motion layer (transform/opacity only) ---- */
.hero{position:relative;isolation:isolate;overflow:hidden;background:radial-gradient(circle at 70% 40%,#5a1830,#06070b 60%)}
.hero::before{content:"";position:absolute;inset:0;z-index:-3;background:var(--img) center/cover;animation:heroDrift 40s ease-in-out infinite alternate;will-change:transform}
.hero::after{content:"";position:absolute;inset:0;z-index:-1;background:linear-gradient(90deg,#06070bf0 25%,#06070b40);pointer-events:none}
.stars{position:absolute;inset:0;z-index:-2;pointer-events:none;background-image:radial-gradient(1px 1px at 12% 22%,#fff,#0000),radial-gradient(1px 1px at 68% 14%,#fff,#0000),radial-gradient(1.5px 1.5px at 84% 62%,#fff,#0000),radial-gradient(1px 1px at 41% 78%,#fff,#0000),radial-gradient(1px 1px at 93% 32%,#fff,#0000),radial-gradient(1.5px 1.5px at 56% 46%,#fff,#0000),radial-gradient(1px 1px at 24% 58%,#fff,#0000),radial-gradient(1px 1px at 76% 88%,#fff,#0000);animation:twinkle 5s ease-in-out infinite alternate}
.stars.b{background-position:37px 53px;animation-duration:7s;animation-delay:-3s}
@keyframes heroDrift{from{transform:scale(1.04) translate3d(0,0,0)}to{transform:scale(1.14) translate3d(-1.5%,-1%,0)}}
@keyframes twinkle{from{opacity:.25}to{opacity:.8}}
@keyframes fadeUp{from{opacity:0;transform:translate3d(0,22px,0)}to{opacity:1;transform:none}}
.hero>div>*{animation:fadeUp .9s cubic-bezier(.2,.7,.2,1) both}
.hero>div>:nth-child(1){animation-delay:.15s}.hero>div>:nth-child(2){animation-delay:.3s}.hero>div>:nth-child(3){animation-delay:.45s}.hero>div>:nth-child(4){animation-delay:.6s}.hero>div>:nth-child(5){animation-delay:.7s}
/* sticky header shrink/blur */
nav{transition:background-color .4s,box-shadow .4s,transform .4s,backdrop-filter .4s}
nav .logo{transition:transform .4s;transform-origin:left center}
nav.scrolled{background:#06070bd9;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);box-shadow:0 1px 0 #ffffff12;transform:translateY(-6px)}
nav.scrolled .logo{transform:scale(.88)}
/* nav underline */
.links a{position:relative}
.links a::after{content:"";position:absolute;left:0;right:0;bottom:-4px;height:1px;background:#c9a96e;transform:scaleX(0);transform-origin:right;transition:transform .35s ease}
.links a:hover::after,.links a:focus-visible::after{transform:scaleX(1);transform-origin:left}
/* buttons */
.btn{position:relative;overflow:hidden;transition:transform .25s,box-shadow .25s}
.btn::after{content:"";position:absolute;top:0;left:0;width:60%;height:100%;background:linear-gradient(100deg,#fff0,#fff6,#fff0);transform:translateX(-160%) skewX(-20deg);pointer-events:none}
.btn:hover{transform:translateY(-2px);box-shadow:0 8px 22px -8px #c9a96e88}
.btn:hover::after{transform:translateX(260%) skewX(-20deg);transition:transform .8s ease}
/* cards */
.card,.item{transition:transform .45s cubic-bezier(.2,.7,.2,1),box-shadow .45s}
.card:hover,.item:hover{transform:translateY(-5px);box-shadow:0 16px 40px -14px #000,0 0 28px -6px #c9a96e40}
.card img{transition:transform .8s cubic-bezier(.2,.7,.2,1)}
.item{overflow:hidden}.item .ph{transition:transform .8s cubic-bezier(.2,.7,.2,1)}.item:hover .ph{transform:scale(1.04)}
/* scroll reveal (only when JS adds .rv) */
.rv{opacity:0;transform:translate3d(0,26px,0);transition:opacity .8s ease,transform .8s cubic-bezier(.2,.7,.2,1);transition-delay:var(--d,0s)}
.rv.in{opacity:1;transform:none}
.card.rv.in:hover,.item.rv.in:hover{transform:translateY(-5px);transition-delay:0s}
/* lightbox + cart */
.lb.on{animation:lbFade .35s ease both}.lb.on img{animation:lbScale .45s cubic-bezier(.2,.7,.2,1) both}
@keyframes lbFade{from{opacity:0}to{opacity:1}}@keyframes lbScale{from{opacity:0;transform:scale(.94)}to{opacity:1;transform:none}}
.cart{transition:transform .5s cubic-bezier(.22,.8,.2,1),box-shadow .5s}.cart.on{box-shadow:-20px 0 60px #000a}
@media (prefers-reduced-motion:reduce){*,*::before,*::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}.rv{opacity:1!important;transform:none!important}.hero::before{transform:none}}
/* rooms hover */
.room{transition:transform .45s cubic-bezier(.2,.7,.2,1),box-shadow .45s}.room img{transition:transform .9s cubic-bezier(.2,.7,.2,1)}
.room:hover{transform:translateY(-5px);box-shadow:0 16px 40px -14px #000,0 0 28px -6px #c9a96e40}.room:hover img{transform:scale(1.03)}
/* loading placeholders (JS adds .ld; removed on load) */
@keyframes shimmer{from{transform:translateX(-100%)}to{transform:translateX(100%)}}
.ld{position:relative}.ld::before{content:"";position:absolute;inset:0;z-index:1;pointer-events:none;background:linear-gradient(100deg,#fff0 30%,#ffffff12 50%,#fff0 70%);animation:shimmer 1.4s ease-in-out infinite}
.card img,.room img{transition:opacity .6s ease,transform .8s cubic-bezier(.2,.7,.2,1),filter .6s}
.ld>img,.ld img{opacity:0;filter:blur(8px)}
.item .ph{transition:opacity .6s,filter .6s,transform .8s cubic-bezier(.2,.7,.2,1)}.item.ld .ph{opacity:.25;filter:blur(8px)}
/* button states */
.btn.busy{pointer-events:none;opacity:.75;padding-right:46px}
.btn.busy::before{content:"";position:absolute;right:18px;top:50%;width:14px;height:14px;margin-top:-7px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:spin .7s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.btn:disabled{cursor:progress}.btn.ok{background:#7fb59a;color:#06070b}.btn.ok::after{display:none}
@keyframes pop{50%{transform:scale(1.25)}}#cc.bump{display:inline-block;animation:pop .4s ease}
@media (prefers-reduced-motion:reduce){.ld::before,.btn.busy::before{animation:none!important}.ld img{filter:none}}
