/* Motion layer. Every effect is switched on by an html.fx-<unlock> class from the price ladder.
   Vertical motion only (no sideways travel), transform/opacity/clip-path only, nothing loops forever
   except the Ken Burns slideshow, which site.js pauses when the hero is off-screen or the tab is hidden. */
.js [data-rv]{opacity:0;transition:opacity 1s ease var(--d,0ms)}
.js [data-rv].in{opacity:1}
.js.fx-stagger [data-rv]{transform:translateY(28px);transition:opacity .9s ease var(--d,0ms),transform 1.1s cubic-bezier(.2,.7,.2,1) var(--d,0ms)}
.js.fx-stagger [data-rv].in{transform:none}

/* hold hero type until web fonts are ready (no font-swap layout shift); site.js adds .fonts-ok (1.5s cap) */
.js:not(.fonts-ok) [data-hero] :is(h1,p,.btns,.facts,.mast,.bru__name,.script,.her__badge,.sticker,ol){visibility:hidden}

/* hover lift + photo zoom */
.fx-hover .sig-card,.fx-hover .tm,.fx-hover .prod,.fx-hover .q,.fx-hover .pkg,.fx-hover .loc{transition:transform .5s cubic-bezier(.2,.7,.2,1),box-shadow .5s,opacity .9s}
.fx-hover .sig-card:hover,.fx-hover .prod:hover,.fx-hover .q:hover,.fx-hover .pkg:hover,.fx-hover .loc:hover{transform:translateY(-6px);box-shadow:0 30px 50px -34px rgba(0,0,0,.45)}
.fx-hover .gt:hover img,.fx-hover .sig-card:hover img,.fx-hover .tm:hover img,.fx-hover .prod:hover img{transform:scale(1.05)}
.fx-hover .sig-card img,.fx-hover .tm img,.fx-hover .prod img{transition:transform 1.2s cubic-bezier(.2,.7,.2,1)}

/* cinematic hero entrance (runs once) */
@keyframes vc-settle{from{transform:scale(1.14)}to{transform:scale(1)}}
@keyframes vc-rise{from{opacity:0;transform:translateY(34px)}to{opacity:1;transform:none}}
.js.fx-heroin [data-hero] .hm > picture img,.js.fx-heroin [data-hero] .hm__s.is-on:first-child img,.js.fx-heroin .phero__m img{animation:vc-settle 2.6s cubic-bezier(.2,.7,.2,1) both}
.js.fx-heroin [data-hero] .eyebrow,.js.fx-heroin [data-hero] .h1:not([data-split]),.js.fx-heroin [data-hero] .hero__lede,.js.fx-heroin [data-hero] .btns,.js.fx-heroin [data-hero] .facts{animation:vc-rise 1.1s cubic-bezier(.2,.7,.2,1) both}
.js.fx-heroin [data-hero] .eyebrow{animation-delay:.15s}
.js.fx-heroin [data-hero] .h1{animation-delay:.3s}
.js.fx-heroin [data-hero] .hero__lede{animation-delay:.5s}
.js.fx-heroin [data-hero] .btns{animation-delay:.65s}
.js.fx-heroin [data-hero] .facts{animation-delay:.85s}

/* curtain photo entrances: inset wipe from the bottom + scale 1.18 → 1.02 */
.js.fx-curtain .cur{clip-path:inset(100% 0 0 0);transition:clip-path 1.4s cubic-bezier(.7,0,.2,1)}
.js.fx-curtain .cur img{transform:scale(1.18);transition:transform 2.2s cubic-bezier(.2,.7,.2,1)}
.js.fx-curtain .cur.in{clip-path:inset(0 0 0 0)}
.js.fx-curtain .cur.in img{transform:scale(1.02)}

/* parallax (transform set by site.js on the figure's picture) */
.fx-parallax [data-par]{overflow:hidden}
.fx-parallax [data-par] > picture{will-change:transform}
.fx-parallax .cta__bg > picture{height:100%}

/* line-draw ornaments */
.js.fx-linedraw svg.ld path{stroke-dasharray:var(--len,400);stroke-dashoffset:var(--len,400);transition:stroke-dashoffset 2.2s cubic-bezier(.6,0,.2,1)}
.js.fx-linedraw svg.ld circle{opacity:0;transition:opacity .6s 1.6s}
.js.fx-linedraw svg.ld.in path{stroke-dashoffset:0}
.js.fx-linedraw svg.ld.in circle{opacity:1}

/* split-text headlines */
.sw{display:inline-block;overflow:hidden;vertical-align:bottom;padding-bottom:.06em;margin-bottom:-.06em}
.sw > span{display:inline-block;transform:translateY(108%);transition:transform 1.05s cubic-bezier(.2,.75,.15,1) var(--wd,0ms)}
.split-in .sw > span{transform:none}

/* smooth hover-zoom gallery */
.fx-hoverzoom .hz .gt img{transition:transform 1.8s cubic-bezier(.2,.7,.2,1),filter 1.2s}
.fx-hoverzoom .hz .gt:hover img{transform:scale(1.09)}
.fx-hoverzoom .hz:hover .gt:not(:hover) img{filter:saturate(.7) brightness(.9)}

/* Ken Burns slideshow */
@keyframes vc-kb{from{transform:scale(1.02) translateY(0)}to{transform:scale(1.15) translateY(-2.5%)}}
.fx-kenburns .hm--slides .hm__s.is-on img,.fx-kenburns .hm--slides .hm__s.was-on img{animation:vc-kb 10s linear both}
.fx-kenburns .hm--slides.is-paused .hm__s img{animation-play-state:paused}

/* page-transition curtain */
.ptc{visibility:hidden;position:fixed;inset:0;z-index:400;background:var(--dark);color:var(--on-dark);display:grid;place-items:center;transform:translateY(101%);pointer-events:none;font:var(--dw) clamp(1.6rem,1rem + 2vw,2.6rem)/1 var(--f-display)}
.ptc.is-cover,.ptc.is-in,.ptc.is-out{visibility:visible}
.ptc.is-cover{transform:none}
.ptc.is-in{transform:none;transition:transform .55s cubic-bezier(.7,0,.3,1)}
.ptc.is-out{transform:translateY(-101%);transition:transform .8s cubic-bezier(.7,0,.3,1)}

/* magnetic buttons */
.fx-magnetic .mag{transition:transform .35s cubic-bezier(.2,.7,.2,1),background .35s,color .35s,box-shadow .35s}

@media (prefers-reduced-motion:reduce){
  .js [data-rv],.js .cur,.js .cur img,.sw > span,.js svg.ld path{opacity:1!important;transform:none!important;clip-path:none!important;transition:none!important;animation:none!important;stroke-dashoffset:0!important}
  [data-hero] *,.hm__s img{animation:none!important}
  .hm__s{transition:none}
  html{scroll-behavior:auto}
}
