/* VIDEO-SWAP (Nov 3): each animated section is a pre-rendered clip. Fixed box sizes everywhere so nothing can jump. */
.vs-sec{position:relative;display:block;width:100%;height:100vh;height:100svh;min-height:480px;overflow:hidden;background:#050607;contain:layout paint}
.vs-stage{position:absolute;inset:0}
.vs-v{position:absolute;inset:0;display:block;width:100%;height:100%;object-fit:cover;object-position:50% 50%;background:#050607}
.vs-commercial .vs-v{object-position:50% 100%}
.vs-residential .vs-v{object-position:50% 50%}
.vs-sr{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.vs-dim{position:absolute;inset:0;z-index:8;pointer-events:none;background:rgba(3,5,7,.42);opacity:0;transition:opacity .7s ease}
.vs-sec.vs-end .vs-dim{opacity:1}
.vs-sec>.s1-card,.vs-sec>.r3-card{transition:opacity .7s ease,visibility 0s linear .7s}
.vs-sec>.s1-card.is-in,.vs-sec>.r3-card.is-in{opacity:1;visibility:visible;transition:opacity .7s ease,visibility 0s}
html.cv-mob .vs-dim{display:none}
.vs-flow{min-height:1px}
