/* =========================================================
   GoStudy — Motion layer
   ========================================================= */

/* ---- Ambient floating shapes (hero backgrounds) ---- */
.float-shape{
  position:absolute; border-radius:50%;
  filter:blur(60px); opacity:.35; pointer-events:none;
}
.float-shape.a{ animation:float-a 11s ease-in-out infinite; }
.float-shape.b{ animation:float-b 14s ease-in-out infinite; }
.float-shape.c{ animation:float-c 9s ease-in-out infinite; }
@keyframes float-a{
  0%,100%{ transform:translate(0,0) scale(1); }
  50%{ transform:translate(30px,-40px) scale(1.12); }
}
@keyframes float-b{
  0%,100%{ transform:translate(0,0) scale(1); }
  50%{ transform:translate(-40px,30px) scale(.9); }
}
@keyframes float-c{
  0%,100%{ transform:translate(0,0); }
  50%{ transform:translate(20px,26px); }
}

/* ---- Passport-stamp stamping-in effect ---- */
@keyframes stamp-in{
  0%{ opacity:0; transform:scale(2.4) rotate(-18deg); }
  55%{ opacity:1; transform:scale(.9) rotate(-8deg); }
  75%{ transform:scale(1.06) rotate(-10deg); }
  100%{ opacity:1; transform:scale(1) rotate(-9deg); }
}
.stamp-anim{ animation:stamp-in .7s cubic-bezier(.2,.9,.25,1) both; }

/* ---- Flight path line draw ---- */
.route-line path{
  stroke-dasharray:1400;
  stroke-dashoffset:1400;
  animation:draw-route 3.2s ease-out forwards;
  animation-delay:.3s;
}
@keyframes draw-route{ to{ stroke-dashoffset:0; } }

.route-dot{
  opacity:0;
  animation:dot-pop .5s ease-out forwards;
}
@keyframes dot-pop{
  0%{ opacity:0; transform:scale(0); }
  70%{ transform:scale(1.3); }
  100%{ opacity:1; transform:scale(1); }
}

/* ---- Plane glide along hero ---- */
@keyframes plane-glide{
  0%{ transform:translate(-10%,10%) rotate(-8deg); opacity:0; }
  10%{ opacity:1; }
  90%{ opacity:1; }
  100%{ transform:translate(110%,-30%) rotate(-8deg); opacity:0; }
}
.plane-glide{ animation:plane-glide 7s ease-in-out infinite; }

/* ---- Gradient text shimmer ---- */
.shimmer-text{
  background:linear-gradient(100deg,var(--gold-soft) 20%,var(--gold) 40%,#fff 50%,var(--gold) 60%,var(--gold-soft) 80%);
  background-size:250% auto;
  -webkit-background-clip:text; background-clip:text; color:transparent;
  animation:shimmer 5s linear infinite;
}
@keyframes shimmer{ to{ background-position:-250% center; } }

/* ---- Hero title staggered reveal ---- */
.reveal-word{
  display:inline-block;
  opacity:0; transform:translateY(100%);
  animation:word-up .8s cubic-bezier(.2,.8,.2,1) forwards;
}
@keyframes word-up{ to{ opacity:1; transform:translateY(0); } }

/* ---- Ticket perforation / boarding-pass tear ---- */
.ticket{
  position:relative;
  background:linear-gradient(180deg,#fff, #fbf8f0);
  border-radius:var(--radius-lg);
  box-shadow:0 30px 70px rgba(11,30,61,.25);
}
.ticket::before,.ticket::after{
  content:''; position:absolute; top:50%; width:34px; height:34px;
  background:var(--navy-ink); border-radius:50%; transform:translateY(-50%);
}
.ticket::before{ inset-inline-start:-17px; }
.ticket::after{ inset-inline-end:-17px; }
.ticket .stub-divider{
  border-inline-start:2.5px dashed #d8cfb8;
}

/* ---- Counter number pop ---- */
.count-num{ font-variant-numeric:tabular-nums; }

/* ---- Card hover lift ---- */
.hover-lift:hover{ transform:translateY(-10px); box-shadow:0 24px 50px rgba(11,30,61,.14); }

/* ---- Country card image zoom ---- */
.zoom-frame{ overflow:hidden; border-radius:var(--radius-md); }
.zoom-frame img{ transition:transform .8s cubic-bezier(.2,.8,.2,1); }
.hover-lift:hover .zoom-frame img{ transform:scale(1.08); }

/* ---- Badge pulse (new / limited seats) ---- */
.badge-pulse{ position:relative; }
.badge-pulse::after{
  content:''; position:absolute; inset:-4px; border-radius:inherit;
  border:2px solid var(--coral); opacity:.7;
  animation:badge-pulse 1.8s ease-out infinite;
}
@keyframes badge-pulse{
  0%{ transform:scale(1); opacity:.7; }
  100%{ transform:scale(1.5); opacity:0; }
}

/* ---- Marquee (countries strip) ---- */
.marquee{ overflow:hidden; position:relative; -webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent); mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent); }
.marquee-track{ display:flex; gap:60px; width:max-content; animation:marquee-scroll 26s linear infinite; }
@keyframes marquee-scroll{ from{ transform:translateX(0); } to{ transform:translateX(-50%); } }

/* ---- Form field focus glow ---- */
.field input:focus, .field select:focus, .field textarea:focus{
  box-shadow:0 0 0 4px rgba(212,169,76,.18);
}

/* ---- Success check draw ---- */
.check-circle circle{ stroke-dasharray:170; stroke-dashoffset:170; animation:draw 1s ease forwards; }
.check-circle path{ stroke-dasharray:60; stroke-dashoffset:60; animation:draw 0.5s .8s ease forwards; }
@keyframes draw{ to{ stroke-dashoffset:0; } }

/* ---- Loader dots (submit button) ---- */
.dot-loader{ display:inline-flex; gap:5px; }
.dot-loader span{
  width:7px; height:7px; border-radius:50%; background:currentColor;
  animation:dot-bounce 1s ease-in-out infinite;
}
.dot-loader span:nth-child(2){ animation-delay:.15s; }
.dot-loader span:nth-child(3){ animation-delay:.3s; }
@keyframes dot-bounce{
  0%,80%,100%{ transform:translateY(0); opacity:.5; }
  40%{ transform:translateY(-6px); opacity:1; }
}

@media (prefers-reduced-motion: reduce){
  .plane-glide,.marquee-track,.shimmer-text,.badge-pulse::after,.float-shape{ animation:none !important; }
}
