/* BlueVista — motion layer
   All scroll reveals are driven by IntersectionObserver in main.js,
   which adds .is-in to elements carrying [data-anim]. */

/* ---------- keyframes ---------- */
@keyframes fadeUp{from{opacity:0;transform:translate3d(0,34px,0)}to{opacity:1;transform:none}}
@keyframes fadeIn{from{opacity:0}to{opacity:1}}
@keyframes fadeLeft{from{opacity:0;transform:translate3d(-44px,0,0)}to{opacity:1;transform:none}}
@keyframes fadeRight{from{opacity:0;transform:translate3d(44px,0,0)}to{opacity:1;transform:none}}
@keyframes zoomIn{from{opacity:0;transform:scale(.9)}to{opacity:1;transform:none}}
@keyframes clipUp{from{opacity:0;clip-path:inset(100% 0 0 0)}to{opacity:1;clip-path:inset(0 0 0 0)}}
@keyframes kenburns{0%{transform:scale(1.04) translate3d(0,0,0)}100%{transform:scale(1.18) translate3d(-1.4%,-1.6%,0)}}
@keyframes marquee{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes pulseDot{0%{box-shadow:0 0 0 0 rgba(126,227,168,.75)}70%{box-shadow:0 0 0 12px rgba(126,227,168,0)}100%{box-shadow:0 0 0 0 rgba(126,227,168,0)}}
@keyframes scrollLine{0%{transform:translateY(-100%)}100%{transform:translateY(100%)}}
@keyframes floaty{0%,100%{transform:translateY(0)}50%{transform:translateY(-12px)}}
@keyframes drift{0%{transform:translateX(0)}100%{transform:translateX(-60px)}}
@keyframes shimmer{0%{background-position:-420px 0}100%{background-position:420px 0}}
@keyframes popIn{0%{opacity:0;transform:scale(.82)}60%{transform:scale(1.04)}100%{opacity:1;transform:scale(1)}}
@keyframes lineGrow{from{transform:scaleX(0)}to{transform:scaleX(1)}}

/* ---------- preloader ---------- */
.bv-loader{
  position:fixed;inset:0;z-index:3000;
  background:linear-gradient(160deg,#061a2f,#0a2440 55%,#0d59a8);
  display:grid;place-items:center;
  transition:opacity .6s var(--ease),visibility .6s;
}
.bv-loader.is-done{opacity:0;visibility:hidden}
.bv-loader .plane{width:56px;height:56px;fill:#fff;animation:floaty 1.6s ease-in-out infinite}
.bv-loader .bar{width:160px;height:3px;border-radius:3px;background:rgba(255,255,255,.18);overflow:hidden;margin-top:22px}
.bv-loader .bar i{display:block;height:100%;width:40%;background:var(--glacier);border-radius:3px;animation:drift 1s linear infinite alternate}

/* ---------- scroll reveal ---------- */
[data-anim]{opacity:0;will-change:transform,opacity}
[data-anim].is-in{animation-duration:.85s;animation-timing-function:var(--ease);animation-fill-mode:both}
[data-anim="up"].is-in{animation-name:fadeUp}
[data-anim="fade"].is-in{animation-name:fadeIn}
[data-anim="left"].is-in{animation-name:fadeLeft}
[data-anim="right"].is-in{animation-name:fadeRight}
[data-anim="zoom"].is-in{animation-name:zoomIn}
[data-anim="clip"].is-in{animation-name:clipUp;animation-duration:1s}
[data-anim="pop"].is-in{animation-name:popIn;animation-duration:.7s}

/* stagger children of a container marked data-stagger */
[data-stagger]>*{opacity:0}
[data-stagger].is-in>*{animation:fadeUp .8s var(--ease) both}
[data-stagger].is-in>*:nth-child(1){animation-delay:.05s}
[data-stagger].is-in>*:nth-child(2){animation-delay:.14s}
[data-stagger].is-in>*:nth-child(3){animation-delay:.23s}
[data-stagger].is-in>*:nth-child(4){animation-delay:.32s}
[data-stagger].is-in>*:nth-child(5){animation-delay:.41s}
[data-stagger].is-in>*:nth-child(6){animation-delay:.5s}
[data-stagger].is-in>*:nth-child(7){animation-delay:.59s}
[data-stagger].is-in>*:nth-child(8){animation-delay:.68s}
[data-stagger].is-in>*:nth-child(n+9){animation-delay:.75s}

/* delay helpers */
[data-delay="1"].is-in{animation-delay:.12s}
[data-delay="2"].is-in{animation-delay:.24s}
[data-delay="3"].is-in{animation-delay:.36s}
[data-delay="4"].is-in{animation-delay:.48s}
[data-delay="5"].is-in{animation-delay:.6s}

/* ---------- named effects ---------- */
.hero-media img{animation:kenburns 22s ease-out forwards}
.hero-flag .dot{animation:pulseDot 2.2s ease-out infinite}
.hero-scroll .line::after{content:"";position:absolute;inset:0;background:var(--glacier);animation:scrollLine 1.9s ease-in-out infinite}
.hero-ridge .ridge-back{transform:translateY(0);transition:transform .2s linear}
.float-card{animation:floaty 5.5s ease-in-out infinite}
.counter{font-variant-numeric:tabular-nums}

.skeleton{background:linear-gradient(90deg,#eaf4fd 25%,#f7fbff 50%,#eaf4fd 75%);background-size:840px 100%;animation:shimmer 1.4s infinite linear}

/* underline grow on section titles */
.title-line{display:block;width:70px;height:3px;border-radius:3px;background:linear-gradient(90deg,var(--blue),var(--glacier));margin-top:18px;transform:scaleX(0);transform-origin:left}
.center .title-line{margin-inline:auto}
.is-in .title-line,[data-anim].is-in .title-line{animation:lineGrow .8s .3s var(--ease) forwards}

/* button sheen */
.btn::after{
  content:"";position:absolute;top:0;left:-80%;width:45%;height:100%;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.32),transparent);
  transform:skewX(-20deg);transition:left .6s var(--ease);
}
.btn:hover::after{left:130%}

/* card image reveal on load */
.card-media img,.gal-item img{opacity:0;transition:opacity .6s var(--ease),transform 1.1s var(--ease)}
.card-media img.is-loaded,.gal-item img.is-loaded{opacity:1}

/* nav items slide in when the mobile drawer opens */
@media (max-width:860px){
  .nav-open .nav-main>div>ul>li{animation:fadeRight .5s var(--ease) both}
  .nav-open .nav-main>div>ul>li:nth-child(1){animation-delay:.08s}
  .nav-open .nav-main>div>ul>li:nth-child(2){animation-delay:.14s}
  .nav-open .nav-main>div>ul>li:nth-child(3){animation-delay:.2s}
  .nav-open .nav-main>div>ul>li:nth-child(4){animation-delay:.26s}
  .nav-open .nav-main>div>ul>li:nth-child(5){animation-delay:.32s}
  .nav-open .nav-main>div>ul>li:nth-child(6){animation-delay:.38s}
  .nav-open .nav-main>div>ul>li:nth-child(7){animation-delay:.44s}
  .nav-open .nav-main>div>ul>li:nth-child(8){animation-delay:.5s}
}

/* ---------- respect reduced motion ---------- */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.001ms!important;
    animation-iteration-count:1!important;
    transition-duration:.001ms!important;
    scroll-behavior:auto!important;
  }
  [data-anim],[data-stagger]>*{opacity:1!important;transform:none!important;clip-path:none!important}
  .hero-media img{transform:none}
  .title-line{transform:scaleX(1)}
}
