/* LHSWFL 1.2.17 — site-wide motion system.
   One vocabulary for every page: shared easing and durations, entrances that are
   applied only by motion.js (content stays visible without JavaScript), and
   neutral static presentations for reduced motion and print.
   Consolidates the former home-motion.css rules; hero, plan and process
   specifics stay beside their own components. */

:root{
 --m-ease:cubic-bezier(.22,1,.36,1);          /* arrivals: quick start, long settle */
 --m-ease-inout:cubic-bezier(.65,0,.35,1);    /* sweeps and curtains */
 --m-ease-soft:cubic-bezier(.4,0,.2,1);       /* fades */
 --m-ease-reveal:cubic-bezier(.3,.75,.2,1);   /* photographic unveils: prompt start, soft landing */
 --m-fast:.4s;
 --m-base:.8s;
 --m-slow:1.15s;
 --m-cinematic:1.5s;
 --m-rise:28px;
 --m-stagger:85ms;
}
@media(max-width:767px){:root{--m-rise:16px;--m-stagger:60ms;--m-base:.65s;--m-slow:.95s;--m-cinematic:1.2s}}

/* ---------- Entrances (classes added by motion.js below the first viewport) ---------- */
.m-rise:not(.m-in),.m-card:not(.m-in) .m-caption,.m-stagger:not(.m-in)>*,.m-split:not(.m-in)>:not(:first-child){opacity:0;transform:translate3d(0,var(--m-rise),0)}
.m-fade:not(.m-in){opacity:0}
.m-rise,.m-fade,.m-card .m-caption,.m-stagger>*,.m-split>:not(:first-child){transition:opacity var(--m-base) var(--m-ease-soft) var(--m-delay,0s),transform var(--m-slow) var(--m-ease) var(--m-delay,0s)}
.m-stagger>*{--m-delay:calc(var(--m-base-delay,0s) + var(--m-i,0) * var(--m-stagger))}
.m-card .m-caption{--m-delay:calc(var(--m-base-delay,0s) + .18s)}
.m-split>:not(:first-child){--m-delay:calc(var(--m-base-delay,0s) + .2s)}

/* Headings rise out of their own baseline, as if from behind a mask. */
.m-title:not(.m-in) :is(h1,h2),.m-split:not(.m-in)>:first-child :is(h1,h2),.m-split:not(.m-in)>:is(h1,h2):first-child{clip-path:inset(-.2em -.3em 100% -.3em);transform:translate3d(0,100%,0)}
.m-title :is(h1,h2),.m-split>:first-child :is(h1,h2),.m-split>:is(h1,h2):first-child{clip-path:inset(-.2em -.3em -.35em -.3em);transition:clip-path var(--m-slow) var(--m-ease) calc(var(--m-base-delay,0s) + .08s),transform var(--m-slow) var(--m-ease) calc(var(--m-base-delay,0s) + .08s)}
/* The italic second line settles a beat later. */
.m-title:not(.m-in) :is(h1,h2) em,.m-split:not(.m-in)>:first-child em{opacity:0}
.m-title :is(h1,h2) em,.m-split>:first-child em{transition:opacity var(--m-base) var(--m-ease-soft) calc(var(--m-base-delay,0s) + .32s)}
.m-title:not(.m-in) :is(.eyebrow,.section-note),.m-split:not(.m-in)>:first-child .eyebrow{opacity:0}
.m-title :is(.eyebrow,.section-note),.m-split>:first-child .eyebrow{transition:opacity var(--m-base) var(--m-ease-soft) var(--m-base-delay,0s)}
.m-title:not(.m-in)>:is(p,.arrow-link){opacity:0;transform:translate3d(0,12px,0)}
.m-title>:is(p,.arrow-link){transition:opacity var(--m-base) var(--m-ease-soft) calc(var(--m-base-delay,0s) + .28s),transform var(--m-slow) var(--m-ease) calc(var(--m-base-delay,0s) + .28s)}

/* Photography is unveiled upward while it settles from a slight enlargement. */
.m-unveil,.m-card .m-media{clip-path:inset(0);transition:clip-path var(--m-slow) var(--m-ease-reveal) var(--m-base-delay,0s)}
.m-unveil:not(.m-in),.m-card:not(.m-in) .m-media{clip-path:inset(100% 0 0 0)}
.m-unveil img,.m-card .m-media img{transition:transform var(--m-cinematic) var(--m-ease) var(--m-base-delay,0s)}
.m-unveil:not(.m-in) img,.m-card:not(.m-in) .m-media img{transform:scale(1.1)}
/* Films and galleries widen gently into their frame. */
.m-frame{transition:clip-path var(--m-cinematic) var(--m-ease-inout),opacity var(--m-base) var(--m-ease-soft)}
.m-frame:not(.m-in){clip-path:inset(0 4% 0 4%);opacity:0}
/* Award marks: transparent badge settles, then its text follows. */
.m-award>img{transition:opacity var(--m-base) var(--m-ease-soft),transform var(--m-slow) var(--m-ease)}
.m-award:not(.m-in)>img{opacity:0;transform:scale(.9)}
.m-award>div{transition:opacity var(--m-base) var(--m-ease-soft) .18s,transform var(--m-slow) var(--m-ease) .18s}
.m-award:not(.m-in)>div{opacity:0;transform:translate3d(0,14px,0)}
/* Entered from above (reverse scrolling, restored scroll position): no replay. */
.m-instant,.m-instant *,.m-instant *::before,.m-instant *::after{transition-duration:0s!important;transition-delay:0s!important}

/* ---------- Scroll-linked depth and dividers (values written by motion.js) ---------- */
.m-depth{overflow:hidden}
.m-depth>img,.m-depth>.photo>img,.m-depth>.m-media>.photo>img{translate:0 var(--m-depth,0%);scale:var(--m-depth-scale,1.06)}
@media(max-width:767px){.m-depth{--m-depth-scale:1.04}}
.m-rule{position:relative}
.m-rule::after{content:'';position:absolute;left:0;right:0;bottom:-14px;height:1px;background:var(--gold,#b99a5b);opacity:.55;transform:scaleX(var(--m-rule,0));transform-origin:left;pointer-events:none}
/* The Seagrove film widens to full bleed as it arrives. */
.m-widen{clip-path:inset(0 var(--m-inset,0px) 0 var(--m-inset,0px))}
.m-widen video{scale:var(--m-widen-scale,1)}

/* ---------- Opening: the logo intro lifts like a curtain over the arriving page ---------- */
.logo-intro{clip-path:inset(0)}
.intro-pending .logo-intro.intro-running{animation:none}
.logo-intro.intro-leaving{clip-path:inset(0 0 100% 0);transition:clip-path .65s var(--m-ease-inout)}
.logo-intro .logo-loader{transition:opacity .38s var(--m-ease-soft),transform .65s var(--m-ease-inout)}
.logo-intro.intro-leaving .logo-loader{opacity:0;transform:translate3d(0,-32px,0)}
.logo-intro.intro-leaving .skip-intro{opacity:0;transition:opacity .2s}
/* Last-resort dismissal if the inline intro script could not run to completion. */
@keyframes m-intro-failsafe{to{opacity:0;visibility:hidden;pointer-events:none}}
.intro-pending .logo-intro:not(.intro-running){animation:m-intro-failsafe .01s 8s forwards}

/* ---------- Arrival choreography (html.m-enter is set by the inline intro script) ---------- */
@keyframes m-arrive{from{opacity:0;transform:translate3d(0,var(--m-rise),0)}to{opacity:1;transform:none}}
@keyframes m-mask-rise{from{clip-path:inset(-.2em -.3em 100% -.3em);transform:translate3d(0,100%,0)}to{clip-path:inset(-.2em -.3em -.35em -.3em);transform:none}}
@keyframes m-fade-in{from{opacity:0}to{opacity:1}}
@keyframes m-unveil-frame{from{clip-path:inset(100% 0 0 0)}to{clip-path:inset(0)}}
@keyframes m-settle{from{transform:scale(1.08)}to{transform:none}}
@media(prefers-reduced-motion:no-preference){
 .m-enter .page-heading>.eyebrow{animation:m-fade-in .9s var(--m-ease-soft) .1s both}
 .m-enter .page-heading h1{animation:m-mask-rise 1.15s var(--m-ease) .18s both}
 .m-enter .page-heading>p{animation:m-arrive 1s var(--m-ease) .42s both}
 .m-enter .page-heading .breadcrumbs{animation:m-fade-in .9s var(--m-ease-soft) .5s both}
 .m-enter .photo.page-hero{animation:m-unveil-frame 1.4s var(--m-ease-inout) .3s both}
 .m-enter .photo.page-hero>img{animation:m-settle 2s var(--m-ease) .3s both}
 .m-enter .construction-hero-copy>*{animation:m-arrive 1.05s var(--m-ease) both}
 .m-enter .construction-hero-copy>:nth-child(1){animation-delay:.25s}
 .m-enter .construction-hero-copy>:nth-child(2){animation-name:m-mask-rise;animation-delay:.35s}
 .m-enter .construction-hero-copy>:nth-child(3){animation-delay:.6s}
 .m-enter .model-address{animation:m-arrive 1s var(--m-ease) .5s both}
 .m-enter .model-media{animation:m-fade-in 1.1s var(--m-ease-soft) .62s both}
}

/* ---------- Accordions (height animated by motion.js; icon turns immediately) ---------- */
details.m-closing>summary .lhs-icon{transform:none!important}
details.m-closing>summary>span{transform:none!important}

/* ---------- Links ---------- */
.arrow-link{position:relative}
.arrow-link::after{content:'';position:absolute;left:0;right:0;bottom:-1px;height:1px;background:var(--gold,#b99a5b);transform:scaleX(0);transform-origin:right;transition:transform .7s var(--m-ease);pointer-events:none}
.arrow-link:is(:hover,:focus-visible)::after{transform:scaleX(1);transform-origin:left}
.hero-bottom>.arrow-link::after{bottom:-6px}

/* ---------- Full-screen menu: routes arrive in sequence each time it opens ---------- */
.full-menu .menu-grid nav>*{animation:none}
.full-menu .menu-grid nav>:nth-child(1){--m-i:0}.full-menu .menu-grid nav>:nth-child(2){--m-i:1}.full-menu .menu-grid nav>:nth-child(3){--m-i:2}.full-menu .menu-grid nav>:nth-child(4){--m-i:3}.full-menu .menu-grid nav>:nth-child(5){--m-i:4}.full-menu .menu-grid nav>:nth-child(6){--m-i:5}.full-menu .menu-grid nav>:nth-child(7){--m-i:6}.full-menu .menu-grid nav>:nth-child(8){--m-i:7}.full-menu .menu-grid nav>:nth-child(9){--m-i:8}.full-menu .menu-grid nav>:nth-child(10){--m-i:9}
@keyframes m-menu-item{from{opacity:0;transform:translate3d(0,18px,0)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:no-preference){
 .full-menu.is-open .menu-grid nav>*{animation:m-menu-item .75s var(--m-ease) both;animation-delay:calc(.16s + var(--m-i,0) * 38ms)}
 .full-menu.is-open .menu-aside>*{animation:m-arrive .9s var(--m-ease) .42s both}
 .full-menu.is-open .menu-aside>.photo{animation:m-unveil-frame 1.1s var(--m-ease-inout) .3s both}
 .full-menu:not(.is-open) .menu-grid,.full-menu:not(.is-open) .menu-aside{opacity:0;transition:opacity .25s var(--m-ease-soft)}
 .full-menu.is-open .menu-grid,.full-menu.is-open .menu-aside{opacity:1}
}

/* ---------- Lightbox ---------- */
@keyframes m-lightbox-in{from{opacity:0;transform:scale(.97)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:no-preference){
 .lightbox.is-open .lightbox-image-wrap{animation:m-lightbox-in .55s var(--m-ease) both}
 .lightbox-image-wrap img{transition:opacity .35s var(--m-ease-soft),transform .25s var(--m-ease)}
 .lightbox-image-wrap.m-loading img{opacity:0}
}

/* ---------- Architectural drawings: always the whole sheet, never cropped or zoomed ---------- */
.gallery-image[data-title$="Floor plan"]>.photo{background:#fff}
.gallery-image[data-title$="Floor plan"] img{object-fit:contain}
.gallery-image[data-title$="Floor plan"]:hover img{transform:none}

/* ---------- Reduced motion: complete static presentation ---------- */
@media(prefers-reduced-motion:reduce){
 .logo-intro{display:none!important}
 .m-rise,.m-fade,.m-card,.m-card *,.m-stagger>*,.m-split *,.m-title *,.m-unveil,.m-unveil img,.m-frame,.m-award *{opacity:1!important;transform:none!important;clip-path:none!important;transition:none!important}
 .m-depth>img,.m-depth>.photo>img,.m-depth>.m-media>.photo>img,.m-widen video{translate:none!important;scale:none!important}
 .m-widen{clip-path:none!important}
 .m-rule::after{transform:none}
 .arrow-link::after{transition:none}
}

/* ---------- Print: every motion state resolves to the finished layout ---------- */
@media print{
 *,*::before,*::after{transition:none!important}
 .m-rise,.m-fade,.m-card,.m-card *,.m-stagger>*,.m-split *,.m-title *,.m-unveil,.m-unveil img,.m-frame,.m-award *,.page-heading *,.photo.page-hero,.photo.page-hero>img,.construction-hero-copy>*{opacity:1!important;transform:none!important;clip-path:none!important;animation:none!important;transition:none!important}
 .m-depth>img,.m-depth>.photo>img,.m-depth>.m-media>.photo>img,.m-widen video{translate:none!important;scale:none!important}
 .m-widen{clip-path:none!important}
 .m-rule::after,.arrow-link::after{display:none}
}
