<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" href="./favicon.png" type="image/png">
<title>BASE｜PREP ADMISSIONS</title>
<meta name="description" content="Base英国本土的低龄留学机构，专为4-17岁孩子定制服务。英国预备学校申请一站式服务。">
<style>
@import url('http://fonts.googleapis.com/css2?family=Anton&display=swap');
:root {
  --blue-top:#2D7DD3;
  --blue-mid:#75B6FC;
  --blue-bottom:#A6D1FF;
  --white:#ffffff;
  --yellow:#f5fa19;
  --navy:#14324f;
  --deep:#0d2943;
  --container:1440px;
}
*{box-sizing:border-box}
html,body{margin:0;padding:0;width:100%;height:100%}
body{
  font-family:Inter,"PingFang SC","Microsoft YaHei","Helvetica Neue",Arial,sans-serif;
  color:var(--navy);
  background:#fff;
  -webkit-font-smoothing:antialiased;
}
a{color:inherit;text-decoration:none}
input,button{font:inherit}

.page{min-height:100vh;width:100%;overflow:hidden;background:#fff}
.hero{
  position:relative;
  min-height:100vh;
  overflow:hidden;
  background:linear-gradient(180deg,#2D7DD3 0%,#A6D1FF 100%);
  isolation:isolate;
}
.hero::before{
  content:"";
  position:absolute;inset:0;
  background:
    radial-gradient(circle at 18% 9%,rgba(255,255,255,.12),transparent 20%),
    radial-gradient(circle at 80% 12%,rgba(255,255,255,.06),transparent 22%);
  pointer-events:none;z-index:0;
}
.nav{
  position:absolute;left:0;right:0;top:0;z-index:30;
  height:88px;display:flex;align-items:center;
}
.nav-inner{
  width:min(calc(100% - 120px),var(--container));
  margin:0 auto;
  display:grid;grid-template-columns:1fr auto;
  align-items:center;gap:30px;
}
.brand{display:flex;align-items:center;min-width:0}
.logo{color:#fff;font-size:27px;font-weight:950;letter-spacing:-.055em;line-height:1}
.logo span{color:var(--yellow)}

.logo-image{
  display:flex;
  align-items:center;
  width:118px;
  height:42px;
}
.logo-image img{
  display:block;
  width:100%;
  height:100%;
  object-fit:contain;
  object-position:left center;
}

.brand-line{width:1px;height:26px;background:rgba(255,255,255,.45);margin:0 18px}
.brand-copy{color:rgba(255,255,255,.9);font-size:13px;white-space:nowrap}
.phone{justify-self:end;display:flex;align-items:center;gap:10px;color:#fff}
.phone-icon{
  flex:0 0 36px;
  width:36px;
  height:36px;
  aspect-ratio:1 / 1;
  border-radius:50%;
  border:1px solid rgba(255,255,255,.72);
  display:grid;
  place-items:center;
  padding:0;
}
.phone-svg{
  display:block;
  width:16px;
  height:16px;
  aspect-ratio:1 / 1;
  flex:none;
}
.phone-copy{display:flex;flex-direction:column;line-height:1.12;text-align:right}
.phone-copy small{font-size:10px;color:rgba(255,255,255,.70);margin-bottom:4px}
.phone-copy strong{font-size:17px;letter-spacing:.02em}

.stage{
  position:relative;
  width:min(calc(100% - 120px),var(--container));
  height:100vh;min-height:760px;margin:0 auto;
}
.mega{
  position:absolute;
  left:0;
  right:0;
  top:112px;
  z-index:2;
  width:100%;
  display:flex;
  justify-content:center;
  align-items:flex-start;
  overflow:visible;
  user-select:none;
  pointer-events:none;
}

.mega-inner{
  display:inline-flex;
  align-items:flex-start;
  justify-content:flex-start;
  gap:34px;
  white-space:nowrap;
  width:max-content;
  transform-origin:center top;
}

.mega span{
  display:inline-block;
  font-family:"Anton",sans-serif;
  font-size:300px;
  line-height:.8;
  letter-spacing:-8px;
  font-weight:400;
}

.mega .prep{color:#fff}

.mega .admissions{color:var(--yellow)}

.visual-wrap{
  position:absolute;z-index:50;left:50%;top:105px;
  width:min(900px,63vw);transform:translateX(-50%);pointer-events:none;
}
.visual-float{
  animation:floatVisual 5.8s ease-in-out infinite;
  transform-origin:50% 72%;
  will-change:transform;
}
.visual-img{
  width:100%;height:auto;display:block;
  filter:drop-shadow(0 26px 24px rgba(31,95,132,.13));
}
@keyframes floatVisual{
  0%{transform:translate3d(0,0,0) rotate(-.45deg)}
  25%{transform:translate3d(4px,-7px,0) rotate(.2deg)}
  50%{transform:translate3d(0,-12px,0) rotate(.55deg)}
  75%{transform:translate3d(-4px,-5px,0) rotate(-.1deg)}
  100%{transform:translate3d(0,0,0) rotate(-.45deg)}
}

.copy{
  position:absolute;left:0;bottom:340px;z-index:12;
  width:330px;color:#fff;
}
.copy .eyebrow{
  display:inline-flex;align-items:center;gap:8px;
  font-size:11px;font-weight:800;letter-spacing:.08em;
  margin-bottom:12px;color:rgba(255,255,255,.84);
}
.copy .eyebrow::before{content:"";width:28px;height:2px;background:var(--yellow)}
.copy h1{margin:0;font-size:38px;line-height:1.12;font-weight:900;letter-spacing:-.035em}
.copy h1 span{color:var(--yellow)}
.copy p{margin:18px 0 0;max-width:305px;font-size:15px;line-height:1.72;color:rgba(255,255,255,.92)}
.copy p strong{color:var(--yellow);font-weight:900}

.side-info{
  position:absolute;right:0;bottom:350px;z-index:10;
  width:180px;text-align:right;color:#fff;
}
.side-info .big{
  display:block;
  font-family:"Arial Narrow","Roboto Condensed",Impact,sans-serif;
  font-size:62px;font-weight:900;line-height:.9;letter-spacing:-.05em;
  transform:scaleY(1.18);transform-origin:right bottom;
}
.side-info .small{display:block;margin-top:14px;font-size:12px;line-height:1.55;color:rgba(255,255,255,.86)}

.form-zone{
  position:absolute;
  left:0;
  right:0;
  bottom:100px;
  z-index:20;
  background:#fff;
  border-radius:54px 54px 0 0;
  min-height:182px;
  padding:28px 58px 34px;
  box-shadow:0 -10px 40px rgba(27,90,130,.04);
}
.form-zone::before{
  content:"";position:absolute;left:50%;top:-38px;transform:translateX(-50%);
  width:280px;height:72px;border-radius:54px 54px 0 0;background:#fff;
}
.scroll-mark{
  position:absolute;
  left:50%;
  top:-10px;
  transform:translateX(-50%);
  z-index:3;
  width:42px;
  height:42px;
  border-radius:50%;
  background:#f49fc0;
  display:grid;
  place-items:center;
  color:#fff;
  overflow:hidden;
}

.scroll-arrow{
  width:18px;
  height:18px;
  display:block;
  color:#fff;
  animation:scrollArrowDown 1.8s cubic-bezier(.45,0,.25,1) infinite;
}

@keyframes scrollArrowDown{
  0%{
    transform:translateY(-6px);
    opacity:0;
  }
  28%{
    opacity:1;
  }
  58%{
    transform:translateY(1px);
    opacity:1;
  }
  100%{
    transform:translateY(7px);
    opacity:0;
  }
}
.form-inner{width:min(100%,var(--container));margin:0 auto;position:relative;z-index:2}
.form-header{display:flex;justify-content:space-between;align-items:flex-end;gap:20px;margin-bottom:16px}
.form-title{margin:0;font-size:25px;line-height:1.2;font-weight:900;color:#17324f;letter-spacing:-.025em}
.form-title span{color:#17324f}
.form-note{font-size:11px;color:#8398ab}
.inline-form{display:grid;grid-template-columns:1fr .72fr 1.15fr 1.2fr 1.5fr;gap:12px;align-items:end}
.field label{display:block;font-size:10px;font-weight:800;color:#6f879c;margin:0 0 6px 2px}
.field input{
  width:100%;height:46px;padding:0 13px;border-radius:12px;border:1px solid #d8e4ee;
  outline:none;color:#183550;background:#fbfdff;transition:.18s ease;
}
.field input::placeholder{color:#9dafbe}
.field input:focus{border-color:#76b7ef;background:#fff;box-shadow:0 0 0 4px rgba(15,111,232,.08)}
.submit{
  height:46px;border:0;border-radius:12px;cursor:pointer;
  background:var(--yellow);color:#17324f;font-size:13px;font-weight:950;
  white-space:nowrap;padding:0 18px;box-shadow:0 12px 24px rgba(227,231,18,.24);
  transition:.18s ease;
}
.submit:hover{transform:translateY(-1px);box-shadow:0 15px 28px rgba(227,231,18,.32)}

@media(max-width:1180px){
  .nav-inner,.stage{width:min(calc(100% - 68px),var(--container))}
  .brand-copy,.brand-line{display:none}
  .visual-wrap{width:min(760px,65vw);top:135px}
  .copy{width:280px;bottom:410px}
  .side-info{width:145px;bottom:420px}
  .inline-form{grid-template-columns:1fr 1fr}
  .submit{grid-column:1/-1}
  .form-zone{min-height:210px}
}
@media(max-width:850px){

  .hero{min-height:100svh;height:auto}
  .nav{height:74px}
  .nav-inner{width:calc(100% - 30px);grid-template-columns:1fr auto}
  .phone-copy small{display:none}
  .stage{width:calc(100% - 30px);height:auto;min-height:900px;padding-bottom:250px}
  .mega{top:106px;justify-content:center}
  .mega span{
  font-family:"Anton",sans-serif;
  font-size:300px;
  line-height:.8;
  letter-spacing:-8px;
  font-weight:400;
  transform:scaleX(.65);
  transform-origin:left center;
}
  .visual-wrap{top:165px;width:92vw}
  .copy{left:0;bottom:435px;width:72%}
  .side-info{display:none}
  .form-zone{position:absolute;padding:28px 20px 26px;border-radius:34px 34px 0 0}
  .form-zone::before,.scroll-mark{display:none}
  .form-header{display:block}
  .form-note{margin-top:7px}
  .inline-form{grid-template-columns:1fr 1fr}
}
@media(max-width:560px){

  .logo{font-size:22px}
  .phone-icon{display:none}
  .phone-copy strong{font-size:14px}
  .stage{min-height:880px}
  .mega{top:98px}
  .mega span{
  font-family:"Anton",sans-serif;
  font-size:300px;
  line-height:.8;
  letter-spacing:-8px;
  font-weight:400;
  transform:scaleX(.65);
  transform-origin:left center;
}
  .visual-wrap{top:155px;width:102vw}
  .copy{
    width:100%;bottom:455px;padding:15px 16px;border-radius:18px;
    background:rgba(34,126,181,.28);backdrop-filter:blur(7px);
  }
  .copy h1{font-size:31px}
  .copy p{font-size:14px}
  .form-title{font-size:22px}
  .inline-form{grid-template-columns:1fr}
  .submit{grid-column:auto}
}



/* ===== 英国私校优势 · Curved Horizontal Gallery ===== */
.more-content{
  position:relative;
  z-index:21;
  background:#fff;
  min-height:auto;
  margin-top:-100px;
  padding:105px 0 120px;
  overflow:hidden;
}
.more-content-inner{
  width:100%;
  margin:0 auto;
}
.more-content-placeholder{display:none}

.advantages-section{
  position:relative;
  background:#fff;
  overflow:hidden;
}
.advantages-head{
  width:min(calc(100% - 80px),var(--container));
  margin:0 auto 34px;
  text-align:center;
}
.advantages-kicker{
  display:inline-flex;
  align-items:center;
  gap:12px;
  color:#7790a8;
  font-size:11px;
  font-weight:900;
  letter-spacing:.13em;
}
.advantages-kicker::before,
.advantages-kicker::after{
  content:"";
  width:28px;
  height:3px;
  border-radius:999px;
  background:#f49fc0;
}
.advantages-head h2{
  margin:13px 0 0;
  color:#17324f;
  font-size:46px;
  line-height:1.15;
  font-weight:950;
  letter-spacing:-.045em;
}
.advantages-head p{
  margin:12px auto 0;
  max-width:620px;
  color:#8497a9;
  font-size:13px;
  line-height:1.7;
}
.gallery-tip{
  margin-top:10px;
  color:#a0adba;
  font-size:11px;
}

.circular-gallery{
  position:relative;
  width:100%;
  height:500px;
  overflow:hidden;
  perspective:1800px;
  perspective-origin:50% 46%;
  cursor:grab;
  user-select:none;
  touch-action:pan-y;
}
.circular-gallery:active{cursor:grabbing}

.gallery-track{
  position:absolute;
  inset:0;
  transform-style:preserve-3d;
}

.gallery-card{
  position:absolute;
  left:50%;
  top:42px;
  width:270px;
  height:360px;
  margin-left:-135px;
  border-radius:24px;
  overflow:hidden;
  transform-style:preserve-3d;
  will-change:transform,opacity,filter;
  border:1px solid rgba(23,50,79,.05);
  box-shadow:0 18px 40px rgba(35,79,114,.10);
  transition:box-shadow .2s ease;
}
.gallery-card:nth-child(odd){
  background:linear-gradient(145deg,#dff3ff 0%,#bfe4f8 100%);
}
.gallery-card:nth-child(even){
  background:linear-gradient(145deg,#e7e3bb 0%,#bbb67f 100%);
}
.gallery-card.is-active{
  box-shadow:0 26px 58px rgba(45,125,211,.18);
}

.card-inner{
  height:100%;
  padding:24px 22px 26px;
  display:flex;
  flex-direction:column;
  align-items:center;
  text-align:center;
  position:relative;
}
.card-inner::before{
  content:"";
  position:absolute;
  width:150px;
  height:150px;
  border-radius:50%;
  right:-44px;
  top:-55px;
  background:rgba(255,255,255,.18);
}
.card-number{
  position:absolute;
  left:18px;
  top:16px;
  font-family:"Anton",sans-serif;
  font-size:17px;
  color:rgba(23,50,79,.22);
}
.card-icon{
  width:108px;
  height:108px;
  margin-top:10px;
  border-radius:50%;
  background:rgba(255,255,255,.88);
  display:grid;
  place-items:center;
  box-shadow:inset 0 0 0 1px rgba(23,50,79,.04);
  position:relative;
  z-index:2;
}
.card-icon span{
  font-size:50px;
  line-height:1;
}
.gallery-card h3{
  margin:20px 0 0;
  color:#17324f;
  font-size:24px;
  line-height:1.15;
  font-weight:950;
  letter-spacing:-.02em;
}
.gallery-card p{
  margin:13px auto 0;
  max-width:215px;
  color:#526a80;
  font-size:13px;
  line-height:1.68;
}
.gallery-card .mini-line{
  width:34px;
  height:3px;
  border-radius:999px;
  background:#f49fc0;
  margin-top:auto;
}

.gallery-controls{
  display:none;
  justify-content:center;
  align-items:center;
  gap:12px;
  margin-top:-24px;
}
.gallery-control{
  width:40px;
  height:40px;
  border:0;
  border-radius:50%;
  background:#eef6ff;
  color:#2d7dd3;
  cursor:pointer;
  font-size:18px;
  transition:.2s ease;
}
.gallery-control:hover{
  background:#2d7dd3;
  color:#fff;
  transform:translateY(-2px);
}
.gallery-dots{
  display:flex;
  gap:7px;
  align-items:center;
}
.gallery-dot{
  width:7px;
  height:7px;
  padding:0;
  border:0;
  border-radius:50%;
  background:#d3dfeb;
  cursor:pointer;
  transition:.2s ease;
}
.gallery-dot.active{
  width:24px;
  border-radius:999px;
  background:#2d7dd3;
}

@media(max-width:900px){
  .advantages-head{width:calc(100% - 36px)}
  .advantages-head h2{font-size:38px}
  .circular-gallery{height:430px}
  .gallery-card{
    width:220px;
    height:320px;
    margin-left:-110px;
  }
}
@media(max-width:580px){
  .more-content{padding-top:88px}
  .advantages-head h2{font-size:32px}
  .advantages-head p{font-size:12px}
  .circular-gallery{height:400px}
  .gallery-card{
    width:205px;
    height:300px;
    margin-left:-102.5px;
  }
  .card-icon{width:86px;height:86px}
  .card-icon span{font-size:40px}
  .gallery-card h3{font-size:21px}
  .gallery-card p{font-size:12px}
}


/* ===== Smooth Curved Gallery refinement ===== */
.circular-gallery{
  height:520px;
  perspective:2200px;
  perspective-origin:50% 44%;
  overflow:hidden;
  cursor:grab;
}
.circular-gallery:active{cursor:grabbing}

.gallery-card{
  top:54px;
  width:260px;
  height:350px;
  margin-left:-130px;
  border-radius:26px;
  transform-origin:50% 55%;
  backface-visibility:hidden;
  will-change:transform,opacity,filter;
  transition:none !important;
}

.gallery-card:nth-child(odd){
  background:linear-gradient(145deg,#dff3ff 0%,#b8e0f7 100%);
}
.gallery-card:nth-child(even){
  background:linear-gradient(145deg,#e5e1b7 0%,#aaa66d 100%);
}

.gallery-card.is-active{
  box-shadow:0 28px 70px rgba(45,125,211,.18);
}

.gallery-track{
  transform-style:preserve-3d;
}

.gallery-controls{
  display:none !important;
}

@media(max-width:900px){
  .circular-gallery{height:470px}
  .gallery-card{
    width:230px;
    height:325px;
    margin-left:-115px;
  }
}
@media(max-width:580px){
  .circular-gallery{height:430px}
  .gallery-card{
    width:210px;
    height:305px;
    margin-left:-105px;
  }
}

/* ===== Desktop adaptive cloud-to-form spacing: fixed 80px, keep form visible ===== */
@media (min-width:851px){
  .hero{
    min-height:var(--adaptive-hero-height, 100vh);
    height:var(--adaptive-hero-height, 100vh);
  }
  .stage{
    height:var(--adaptive-hero-height, 100vh);
    min-height:0;
  }
  .form-zone{
    top:var(--adaptive-form-top);
    bottom:auto;
  }
}

/* ===== Bottom landmark layers: 图1底层 + 图2叠加 ===== */
.landmark-silhouette,
.landmark-outline{
  position:absolute;
  left:50%;
  top:var(--adaptive-form-top, calc(100% - 282px));
  transform:translate(-50%,-100%);
  pointer-events:none;
  user-select:none;
}
.landmark-silhouette{
  z-index:1;
  width:100%;
  margin-top:210px;
}
.landmark-silhouette img{
  display:block;
  width:100%;
  height:auto;
}
.landmark-outline{
  z-index:9;
  width:min(68vw,1400px);
  margin-top:5px;
}
.landmark-outline img{
  display:block;
  width:100%;
  height:auto;
}
@media(max-width:850px){
  .landmark-silhouette{
    top:auto;
    bottom:250px;
    width:155%;
  }
  .landmark-outline{
    top:auto;
    bottom:250px;
    width:120%;
  }
}



/* ===== 英国私校优势 · 2026-09-03 redesign ===== */
.more-content{
  margin-top:-100px;
  padding:118px 0 150px;
  background:#fff;
  overflow:hidden;
}
.advantages-section{
  position:relative;
  background:#fff;
  overflow:visible;
}
.advantages-shell{
  width:min(calc(100% - 120px),var(--container));
  margin:0 auto;
}
.advantages-head{
  width:100%;
  margin:0 0 40px;
  display:flex;
  align-items:flex-end;
  justify-content:space-between;
  gap:36px;
  text-align:left;
}
.advantages-title-wrap{
  position:relative;
  min-height:82px;
  display:block;
  overflow:visible;
}
.advantages-en{
  position:absolute;
  left:0;
  top:-2px;
  z-index:1;
  font-family:"Anton",Inter,"Arial Narrow",sans-serif;
  font-size:60px;
  line-height:.92;
  font-weight:400;
  letter-spacing:-2.4px;
  color:#dceeff;
  white-space:nowrap;
  user-select:none;
  pointer-events:none;
}
.advantages-head h2{
  position:absolute;
  left:0;
  top:28px;
  z-index:2;
  margin:0;
  color:#17324f;
  font-size:48px;
  line-height:.98;
  font-weight:950;
  letter-spacing:-.055em;
  white-space:nowrap;
}
.advantages-arrows{
  display:flex;
  align-items:center;
  justify-content:flex-end;
  gap:22px;
  padding-bottom:9px;
  margin-left:auto;
  flex:0 0 auto;
}
.advantages-arrow{
  appearance:none;
  border:0;
  background:transparent;
  padding:0;
  width:48px;
  height:36px;
  display:grid;
  place-items:center;
  cursor:pointer;
}
.advantages-arrow svg{
  width:44px;
  height:24px;
  display:block;
}
.advantages-arrow.prev{color:#d8d8d8}
.advantages-arrow.next{
  color:#101010;
  justify-items:end;
}
.advantages-arrow:hover{transform:translateX(2px)}
.advantages-arrow.prev:hover{transform:translateX(-2px)}

.advantages-grid{
  /* Keep the carousel strictly inside the same content width as the title/arrows.
     Desktop: 4 complete cards + a small preview of card 5, clipped at the right edge. */
  --adv-gap:22px;
  --adv-preview:60px;
  display:flex;
  flex-wrap:nowrap;
  gap:var(--adv-gap);
  width:100%;
  max-width:100%;
  overflow-x:auto;
  overflow-y:hidden;
  scroll-snap-type:x mandatory;
  scroll-behavior:smooth;
  scrollbar-width:none;
  -ms-overflow-style:none;
  overscroll-behavior-x:contain;
  padding:0 0 4px;
  cursor:grab;
  user-select:none;
  -webkit-user-select:none;
  touch-action:pan-y;
}
.advantages-grid.is-dragging{
  cursor:grabbing;
  scroll-snap-type:none;
  scroll-behavior:auto;
}
.advantages-grid.is-dragging .adv-card{
  pointer-events:none;
}
.advantages-grid::-webkit-scrollbar{display:none}
.adv-card{
  position:relative;
  flex:0 0 calc((100% - (var(--adv-gap) * 4) - var(--adv-preview)) / 4);
  min-width:0;
  height:405px;
  border-radius:16px;
  overflow:hidden;
  background:#dbe6ef;
  box-shadow:0 10px 34px rgba(23,50,79,.06);
  isolation:isolate;
  scroll-snap-align:start;
}
.adv-card::after{
  content:"";
  position:absolute;
  inset:0;
  z-index:1;
  background:linear-gradient(180deg,rgba(2,24,48,0) 42%,rgba(4,39,74,.18) 62%,rgba(2,40,77,.96) 100%);
  pointer-events:none;
}
.adv-card img{
  width:100%;
  height:100%;
  display:block;
  object-fit:cover;
  object-position:center;
  transition:transform .55s cubic-bezier(.2,.7,.2,1),filter .55s ease;
  pointer-events:none;
  -webkit-user-drag:none;
}
.adv-card:hover img{
  transform:scale(1.035);
  filter:saturate(1.03) contrast(1.02);
}
.adv-card-copy{
  position:absolute;
  left:28px;
  right:24px;
  bottom:25px;
  z-index:2;
  color:#fff;
}
.adv-card h3{
  margin:0;
  color:#fff;
  font-size:23px;
  line-height:1.2;
  font-weight:950;
  letter-spacing:-.02em;
}
.adv-card p{
  margin:10px 0 0;
  color:rgba(255,255,255,.94);
  font-size:14px;
  line-height:1.65;
}

/* neutralize the previous curved-gallery rules inside this section */
.advantages-section .advantages-kicker,
.advantages-section .gallery-tip,
.advantages-section .circular-gallery,
.advantages-section .gallery-controls{display:none!important}

@media(max-width:1180px){
  .advantages-shell{width:min(calc(100% - 68px),var(--container))}
  .advantages-grid{
    --adv-gap:18px;
    --adv-preview:52px;
    width:100%;
    max-width:100%;
    gap:var(--adv-gap);
  }
  .adv-card{
    flex-basis:calc((100% - (var(--adv-gap) * 3) - var(--adv-preview)) / 3);
    height:430px;
  }
}
@media(max-width:700px){
  .more-content{padding:92px 0 110px}
  .advantages-shell{width:calc(100% - 30px)}
  .advantages-head{margin-bottom:26px;align-items:center}
  .advantages-title-wrap{min-height:62px}
  .advantages-en{font-size:43px;letter-spacing:-1.2px;top:0}
  .advantages-head h2{font-size:36px;line-height:1;top:21px}
  .advantages-arrows{gap:8px;padding-bottom:0}
  .advantages-arrow{width:36px}
  .advantages-arrow svg{width:34px}
  .advantages-grid{
    --adv-gap:14px;
    --adv-preview:24px;
    width:100%;
    max-width:100%;
    gap:var(--adv-gap);
  }
  .adv-card{
    flex:0 0 min(82vw,320px);
    height:420px;
  }
  .adv-card-copy{left:22px;right:20px;bottom:22px}
  .adv-card h3{font-size:22px}
  .adv-card p{font-size:13px}
}


/* ===== Circular Gallery motion simulation — keep original cards/images/copy ===== */
#advantagesCircularDom{
  --adv-gap:22px;
  --adv-preview:60px;
  position:relative;
  width:100%;
  height:455px;
  overflow:hidden;
  cursor:grab;
  user-select:none;
  -webkit-user-select:none;
  touch-action:pan-y;
  padding:0;
  display:block;
}
#advantagesCircularDom:active{cursor:grabbing}

#advantagesCircularDom .adv-card{
  position:absolute;
  left:0;
  top:0;
  margin:0;
  flex:none;
  width:calc((100% - (var(--adv-gap) * 4) - var(--adv-preview)) / 4);
  height:405px;
  transform-origin:50% 50%;
  will-change:transform;
  transition:none!important;
  scroll-snap-align:none;
}

#advantagesCircularDom .adv-card img{
  transition:filter .35s ease!important;
}

/* keep the original card overlay/text styling exactly as before */
#advantagesCircularDom .adv-card:hover img{
  transform:none;
  filter:saturate(1.03) contrast(1.02);
}

@media(max-width:1180px){
  #advantagesCircularDom{
    --adv-gap:18px;
    --adv-preview:52px;
    height:480px;
  }
  #advantagesCircularDom .adv-card{
    width:calc((100% - (var(--adv-gap) * 3) - var(--adv-preview)) / 3);
    height:430px;
  }
}
@media(max-width:700px){
  #advantagesCircularDom{
    --adv-gap:14px;
    --adv-preview:24px;
    height:450px;
  }
  #advantagesCircularDom .adv-card{
    width:min(82vw,320px);
    height:420px;
  }
}


/* ===== v2: React Bits-like continuous plane wobble (WebGL per original card) ===== */
#advantagesCircularDom .adv-card{
  perspective:1000px;
  transform-style:preserve-3d;
}
#advantagesCircularDom .adv-card .adv-webgl{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  display:block;
  z-index:0;
  pointer-events:none;
}
#advantagesCircularDom .adv-card.webgl-ready > img{
  opacity:0;
}
#advantagesCircularDom .adv-card > img{
  position:absolute;
  inset:0;
  z-index:0;
}
#advantagesCircularDom .adv-card::after{z-index:1}
#advantagesCircularDom .adv-card-copy{z-index:2}


/* ===== Advantages title: centered group + exact overlap reference ===== */
.advantages-head{
  position:relative;
  width:100%;
  min-height:104px;
  margin:0 0 34px;
  display:flex;
  align-items:flex-start;
  justify-content:center;
  text-align:left;
}
.advantages-title-wrap{
  position:relative;
  display:inline-block;
  width:max-content;
  max-width:calc(100% - 190px);
  min-height:78px;
  margin:0 auto;
}
.advantages-en{
  position:relative;
  left:auto;
  top:auto;
  z-index:1;
  display:block;
  margin:0;
  color:#dceeff;
  font-family:"Anton",Impact,"Arial Narrow",sans-serif;
  font-size:clamp(38px,4.2vw,60px);
  line-height:.92;
  font-weight:400;
  letter-spacing:-1.2px;
  white-space:nowrap;
  user-select:none;
  pointer-events:none;
  opacity:1;
  transform:none;
}
.advantages-head h2{
  position:absolute;
  left:0;
  top:31px;
  z-index:2;
  margin:0;
  color:#173956;
  font-family:Inter,"PingFang SC","Microsoft YaHei",Arial,sans-serif;
  font-size:clamp(30px,3.35vw,48px);
  line-height:1;
  font-weight:900;
  letter-spacing:-.045em;
  white-space:nowrap;
  transform:none;
}
.advantages-arrows{
  position:absolute;
  right:0;
  top:10px;
  margin:0;
}
@media(max-width:900px){
  .advantages-head{min-height:94px;margin-bottom:28px}
  .advantages-title-wrap{max-width:calc(100% - 110px);min-height:72px}
  .advantages-en{font-size:clamp(34px,7.2vw,52px)}
  .advantages-head h2{top:28px;font-size:clamp(28px,5.8vw,42px)}
  .advantages-arrows{top:7px}
}
@media(max-width:620px){
  .advantages-head{min-height:88px;margin-bottom:24px;justify-content:flex-start}
  .advantages-title-wrap{max-width:100%;min-height:66px;margin:0}
  .advantages-en{font-size:clamp(30px,9.4vw,42px);letter-spacing:-.8px}
  .advantages-head h2{top:25px;font-size:clamp(26px,7.5vw,34px)}
  .advantages-arrows{top:64px}
}


/* ===== Advantages title — centered, separated, matched to reference ===== */
.advantages-head{
  position:relative;
  width:100%;
  min-height:132px;
  margin:0 0 34px;
  display:flex;
  align-items:flex-start;
  justify-content:center;
  text-align:center;
}

.advantages-title-wrap{
  position:relative;
  display:flex;
  flex-direction:column;
  align-items:center;
  justify-content:flex-start;
  width:auto;
  max-width:calc(100% - 190px);
  min-height:0;
  margin:0 auto;
  text-align:center;
}

.advantages-en{
  position:relative;
  left:auto;
  top:auto;
  z-index:1;
  display:block;
  margin:0;
  color:#5FA6E8;
  font-family:"Anton",Impact,"Arial Narrow",sans-serif;
  font-size:clamp(38px,3.15vw,60px);
  line-height:1;
  font-weight:400;
  letter-spacing:-1.1px;
  white-space:nowrap;
  user-select:none;
  pointer-events:none;
  opacity:1;
  transform:none;
}

.advantages-head h2{
  position:relative;
  left:auto;
  top:auto;
  z-index:2;
  display:block;
  margin:17px 0 0;
  color:#173956;
  font-family:Inter,"PingFang SC","Microsoft YaHei",Arial,sans-serif;
  font-size:clamp(28px,2.15vw,40px);
  line-height:1.08;
  font-weight:800;
  letter-spacing:-.025em;
  white-space:nowrap;
  text-align:center;
  transform:none;
}

.advantages-arrows{
  position:absolute;
  right:0;
  top:8px;
  margin:0;
}

@media(max-width:900px){
  .advantages-head{
    min-height:118px;
    margin-bottom:28px;
  }
  .advantages-title-wrap{
    max-width:calc(100% - 110px);
  }
  .advantages-en{
    font-size:clamp(34px,7vw,52px);
  }
  .advantages-head h2{
    margin-top:14px;
    font-size:clamp(26px,5.2vw,36px);
  }
  .advantages-arrows{
    top:6px;
  }
}

@media(max-width:620px){
  .advantages-head{
    min-height:112px;
    margin-bottom:24px;
    justify-content:center;
  }
  .advantages-title-wrap{
    max-width:100%;
    margin:0 auto;
  }
  .advantages-en{
    font-size:clamp(29px,8.8vw,42px);
    letter-spacing:-.7px;
  }
  .advantages-head h2{
    margin-top:12px;
    font-size:clamp(24px,6.8vw,32px);
  }
  .advantages-arrows{
    top:76px;
  }
}


/* Match “英国私校优势” color to “科学衡量能力，成功择校入门” */
.advantages-head h2{
  color:#173956 !important;
}


/* ===== Prep School Admissions Timeline · hover circles ===== */
.timeline-section{
  position:relative;
  background:#fff;
  padding:112px 0 132px;
  overflow:hidden;
}
.timeline-shell{
  position:relative;
  z-index:1;
  width:min(calc(100% - 120px),var(--container));
  margin:0 auto;
}
.timeline-head{
  text-align:center;
  margin:0 auto 88px;
}
.timeline-head-en{
  margin:0;
  font-family:"Anton",Impact,"Arial Narrow",sans-serif;
  font-size:clamp(38px,3.15vw,60px);
  line-height:1;
  font-weight:400;
  letter-spacing:-1.1px;
  color:#5FA6E8;
}
.timeline-head h2{
  margin:16px 0 0;
  font-size:clamp(28px,2.15vw,40px);
  line-height:1.08;
  font-weight:800;
  letter-spacing:-.025em;
  color:#17324f;
}
.timeline-track{
  display:grid;
  grid-template-columns:repeat(5,minmax(0,1fr));
  gap:54px;
  align-items:start;
}
.timeline-item{
  position:relative;
  min-width:0;
  text-align:center;
  cursor:pointer;
  outline:none;
}
.timeline-orb{
  --fill:50%;
  --orb-color:#5FA6E8;
  position:relative;
  width:min(176px,100%);
  aspect-ratio:1;
  margin:0 auto 24px;
  border-radius:50%;
  border:2px solid var(--orb-color);
  overflow:hidden;
  background:#fff;
  transition:border-color .28s ease, transform .28s ease, box-shadow .28s ease;
}
.timeline-orb::before{
  content:"";
  position:absolute;
  left:-1px;right:-1px;bottom:-1px;
  height:var(--fill);
  background:var(--orb-color);
  transition:height .38s cubic-bezier(.22,.78,.25,1), background-color .28s ease;
}
.timeline-age{
  display:block;
  margin-top:0;
  font-family:"Anton",Impact,"Arial Narrow",sans-serif;
  font-size:clamp(58px,5vw,86px);
  line-height:.9;
  font-weight:400;
  color:#5FA6E8;
  letter-spacing:-2px;
  transition:color .28s ease, transform .28s ease;
}
.timeline-item:hover .timeline-orb,
.timeline-item.is-active .timeline-orb,
.timeline-item:focus-visible .timeline-orb{
  --orb-color:#F39AC1;
  transform:translateY(-3px);
  box-shadow:0 16px 34px rgba(243,154,193,.16);
}
.timeline-item:hover .timeline-age,
.timeline-item.is-active .timeline-age,
.timeline-item:focus-visible .timeline-age{
  color:#F39AC1;
  transform:translateY(-2px);
}
.timeline-copy{
  max-width:1120px;
  margin:64px auto 0;
  min-height:68px;
  text-align:left;
  color:#333;
  font-size:clamp(16px,1.45vw,22px);
  line-height:1.7;
  letter-spacing:.015em;
  transition:opacity .18s ease, transform .18s ease;
}
.timeline-copy.is-changing{opacity:0;transform:translateY(5px)}

@media(max-width:1180px){
  .timeline-shell{width:min(calc(100% - 68px),var(--container))}
  .timeline-track{gap:28px}
  .timeline-orb{width:min(150px,100%)}
  .timeline-copy{margin-top:52px}
}
@media(max-width:760px){
  .timeline-section{padding:90px 0 100px}
  .timeline-shell{width:calc(100% - 30px)}
  .timeline-head{margin-bottom:52px}
  .timeline-head-en{font-size:clamp(30px,8.8vw,42px)}
  .timeline-head h2{font-size:clamp(24px,6.8vw,32px);margin-top:12px}
  .timeline-track{
    grid-template-columns:repeat(5,116px);
    gap:22px;
    overflow-x:auto;
    padding:0 2px 10px;
    scrollbar-width:none;
    scroll-snap-type:x proximity;
  }
  .timeline-track::-webkit-scrollbar{display:none}
  .timeline-item{scroll-snap-align:center}
  .timeline-orb{width:104px;margin-bottom:16px}
  .timeline-age{font-size:54px}
  .timeline-copy{margin-top:34px;font-size:15px;line-height:1.8;min-height:90px}
}

/* ===== Timeline requested fixes ===== */
.timeline-copy{
  text-align:center !important;
  margin-left:auto !important;
  margin-right:auto !important;
}

/* 16+ is a completely filled circle */
.timeline-item:last-child .timeline-orb{
  background:#5FA6E8;
}
.timeline-item:last-child .timeline-orb::before{
  height:100% !important;
  top:-1px;
  bottom:-1px;
}
.timeline-item:last-child:hover .timeline-orb,
.timeline-item:last-child.is-active .timeline-orb,
.timeline-item:last-child:focus-visible .timeline-orb{
  background:#F39AC1;
}


/* ===== Timeline whole module: move upward 50px ===== */
.timeline-section{
  transform:translateY(-100px) !important;
  margin-bottom:-100px !important;
}


/* ===== Timeline booking entry form ===== */
.timeline-booking{
  position:relative;
  width:min(calc(100% - 120px),var(--container));
  margin:-30px auto 120px;
  padding:0;
}
.timeline-booking-card{
  position:relative;
  background:#fff;
  border-radius:34px;
  padding:34px 38px 36px;
  box-shadow:0 18px 52px rgba(31,73,112,.08);
  border:1px solid rgba(45,125,211,.08);
  overflow:hidden;
}
.timeline-booking-card::before{
  content:"";
  position:absolute;
  left:0;right:0;top:0;
  height:5px;
  background:linear-gradient(90deg,#5FA6E8 0%,#7CB8F0 65%,#F39AC1 100%);
}
.timeline-booking-head{
  display:flex;
  align-items:flex-end;
  justify-content:space-between;
  gap:28px;
  margin-bottom:24px;
}
.timeline-booking-title{
  margin:0;
  color:#173956;
  font-size:clamp(24px,2.1vw,34px);
  line-height:1.35;
  font-weight:900;
  letter-spacing:-.03em;
  max-width:900px;
}
.timeline-booking-title .accent{
  color:#5FA6E8;
}
.timeline-booking-note{
  flex:0 0 auto;
  color:#8AA0B4;
  font-size:12px;
  line-height:1.5;
  white-space:nowrap;
}
.timeline-booking-form{
  display:grid;
  grid-template-columns:1fr .72fr 1.05fr 1.15fr 1.45fr;
  gap:14px;
  align-items:end;
}
.timeline-booking-field label{
  display:block;
  margin:0 0 7px 2px;
  color:#6F879C;
  font-size:11px;
  line-height:1;
  font-weight:800;
}
.timeline-booking-field input{
  width:100%;
  height:50px;
  padding:0 15px;
  border:1px solid #D9E5EF;
  border-radius:14px;
  background:#FBFDFF;
  color:#183550;
  outline:none;
  transition:.2s ease;
}
.timeline-booking-field input::placeholder{color:#A6B6C5}
.timeline-booking-field input:focus{
  background:#fff;
  border-color:#76B7EF;
  box-shadow:0 0 0 4px rgba(45,125,211,.08);
}
.timeline-booking-submit{
  height:50px;
  border:0;
  border-radius:14px;
  padding:0 22px;
  background:var(--yellow);
  color:#17324F;
  font-size:13px;
  font-weight:950;
  white-space:nowrap;
  cursor:pointer;
  box-shadow:0 12px 28px rgba(227,231,18,.22);
  transition:.2s ease;
}
.timeline-booking-submit:hover{
  transform:translateY(-1px);
  box-shadow:0 16px 34px rgba(227,231,18,.30);
}
@media(max-width:1180px){
  .timeline-booking{width:min(calc(100% - 68px),var(--container))}
  .timeline-booking-form{grid-template-columns:1fr 1fr}
  .timeline-booking-submit{grid-column:1/-1}
  .timeline-booking-head{align-items:flex-start}
}
@media(max-width:700px){
  .timeline-booking{
    width:calc(100% - 30px);
    margin:-18px auto 90px;
  }
  .timeline-booking-card{
    padding:28px 20px 24px;
    border-radius:26px;
  }
  .timeline-booking-head{display:block;margin-bottom:20px}
  .timeline-booking-note{margin-top:8px;white-space:normal}
  .timeline-booking-form{grid-template-columns:1fr}
  .timeline-booking-submit{grid-column:auto}
}


/* ===== Booking title line-break adjustment ===== */
.timeline-booking-title .booking-question{
  display:block !important;
  width:100%;
  margin-top:8px;
}
.timeline-booking-note{
  display:none !important;
}


/* ===== UK Private School Entry Requirements ===== */
.entry-req-section{
  position:relative;
  background:#fff;
  padding:110px 0 125px;
  overflow:hidden;
}
.entry-req-shell{
  width:min(calc(100% - 120px),var(--container));
  margin:0 auto;
}
.entry-req-head{
  text-align:center;
  margin-bottom:56px;
}
.entry-req-head-en{
  font-family:"Anton","Arial Narrow",sans-serif;
  font-size:clamp(38px,3.2vw,60px);
  line-height:1;
  color:#5FA6E8;
  letter-spacing:-.025em;
}
.entry-req-head h2{
  margin:14px 0 0;
  color:#173956;
  font-size:clamp(28px,2.15vw,40px);
  line-height:1.2;
  font-weight:900;
}
.entry-req-stage{
  position:relative;
  min-height:560px;
  border-radius:34px;
  overflow:hidden;
  background:
    linear-gradient(rgba(95,166,232,.07) 1px, transparent 1px),
    linear-gradient(90deg,rgba(95,166,232,.07) 1px, transparent 1px),
    #FBFDFC;
  background-size:34px 34px;
  border:1px solid #EDF3F7;
}
.entry-req-stage::before{
  content:"";
  position:absolute;
  width:390px;
  height:390px;
  border-radius:50%;
  left:50%;
  top:53%;
  transform:translate(-50%,-50%);
  background:#EAF7D9;
}
.entry-req-person{
  position:absolute;
  left:50%;
  bottom:0;
  width:320px;
  height:470px;
  transform:translateX(-50%);
  border-radius:160px 160px 28px 28px;
  overflow:hidden;
  box-shadow:0 24px 54px rgba(35,74,106,.12);
  z-index:2;
}
.entry-req-person img{
  width:100%;
  height:100%;
  display:block;
  object-fit:cover;
  object-position:center 34%;
}
.entry-req-card{
  position:absolute;
  z-index:3;
  width:310px;
  padding:22px 24px;
  border-radius:20px;
  background:rgba(255,255,255,.94);
  border:1px solid rgba(210,224,235,.95);
  box-shadow:0 18px 42px rgba(37,76,109,.10);
}
.entry-req-card::before{
  content:"";
  position:absolute;
  width:10px;
  height:10px;
  border-radius:50%;
  background:#5FA6E8;
  top:24px;
  left:20px;
}
.entry-req-card h3{
  margin:0 0 9px 16px;
  color:#173956;
  font-size:22px;
  font-weight:900;
}
.entry-req-card p{
  margin:0 0 0 16px;
  color:#607B91;
  font-size:15px;
  line-height:1.7;
}
.entry-req-card.exam{left:7%;top:17%;}
.entry-req-card.course{right:7%;top:20%;}
.entry-req-card.report{left:10%;bottom:14%;width:350px;}
.entry-req-card.report::before{background:#F39AC1;}
.entry-req-card.course::before{background:#9ACFB9;}
.entry-req-card .mini-tag{
  display:inline-block;
  margin:12px 0 0 16px;
  padding:6px 10px;
  border-radius:999px;
  background:#F4F8FB;
  color:#6A8195;
  font-size:12px;
  font-weight:800;
}
@media(max-width:1100px){
  .entry-req-shell{width:min(calc(100% - 64px),var(--container));}
  .entry-req-stage{min-height:650px;}
  .entry-req-card.exam{left:4%;top:12%;}
  .entry-req-card.course{right:4%;top:12%;}
  .entry-req-card.report{left:50%;bottom:5%;transform:translateX(-50%);}
}
@media(max-width:760px){
  .entry-req-section{padding:80px 0 90px;}
  .entry-req-shell{width:calc(100% - 30px);}
  .entry-req-stage{
    min-height:auto;
    padding:28px 18px 26px;
    display:flex;
    flex-direction:column;
    gap:16px;
  }
  .entry-req-stage::before{
    width:260px;height:260px;top:240px;
  }
  .entry-req-person{
    position:relative;
    left:auto;bottom:auto;
    transform:none;
    width:240px;height:330px;
    margin:0 auto 6px;
  }
  .entry-req-card,
  .entry-req-card.exam,
  .entry-req-card.course,
  .entry-req-card.report{
    position:relative;
    left:auto;right:auto;top:auto;bottom:auto;
    transform:none;
    width:100%;
  }
}

\n/* ===== Entry requirements visual refinement ===== */\n.entry-req-stage{\n  background:#FBFDFC !important;\n}\n.entry-req-stage::before{\n  background:rgba(95,166,232,.20) !important;\n}\n.entry-req-person{\n  width:360px !important;\n  height:500px !important;\n  border-radius:0 !important;\n  overflow:visible !important;\n  box-shadow:none !important;\n  background:transparent !important;\n}\n.entry-req-person img{\n  width:100% !important;\n  height:100% !important;\n  object-fit:contain !important;\n  object-position:center bottom !important;\n  background:transparent !important;\n}\n

/* ===== Entry requirements layout: match reference composition ===== */
.entry-req-stage{
  min-height:620px !important;
  background:#fff !important;
  border:none !important;
  border-radius:0 !important;
  overflow:visible !important;
}

/* central pale-blue circle */
.entry-req-stage::before{
  width:430px !important;
  height:430px !important;
  left:50% !important;
  top:52% !important;
  transform:translate(-50%,-50%) !important;
  background:rgba(95,166,232,.20) !important;
  z-index:0 !important;
}

/* central girl */
.entry-req-person{
  left:50% !important;
  bottom:18px !important;
  width:430px !important;
  height:520px !important;
  transform:translateX(-50%) !important;
  z-index:2 !important;
  overflow:visible !important;
  box-shadow:none !important;
}
.entry-req-person img{
  width:100% !important;
  height:100% !important;
  object-fit:contain !important;
  object-position:center bottom !important;
}

/* cards become solid blocks like the reference */
.entry-req-card{
  width:300px !important;
  min-height:150px;
  padding:24px 26px !important;
  border:none !important;
  border-radius:26px !important;
  box-shadow:none !important;
  color:#173956;
}
.entry-req-card::before{
  display:none !important;
}
.entry-req-card h3{
  margin:0 0 10px !important;
  color:#173956 !important;
  font-size:24px !important;
}
.entry-req-card p{
  margin:0 !important;
  color:#173956 !important;
  font-size:15px !important;
  line-height:1.65 !important;
}
.entry-req-card .mini-tag{
  display:none !important;
}

/* reference positions/colors */
.entry-req-card.exam{
  left:5% !important;
  top:28% !important;
  background:#5FA6E8 !important;
}

.entry-req-card.course{
  right:8% !important;
  top:41% !important;
  background:#E8EB18 !important;
}

.entry-req-card.report{
  left:auto !important;
  right:24% !important;
  top:6% !important;
  bottom:auto !important;
  width:300px !important;
  background:#F39AC1 !important;
}

/* bottom blue rule */
.entry-req-stage::after{
  content:"";
  position:absolute;
  left:4%;
  right:4%;
  bottom:0;
  height:8px;
  background:#5FA6E8;
  z-index:4;
}

@media(max-width:1100px){
  .entry-req-stage{min-height:650px !important;}
  .entry-req-card.exam{left:2% !important;}
  .entry-req-card.course{right:2% !important;}
  .entry-req-card.report{right:12% !important;}
}

@media(max-width:760px){
  .entry-req-stage{
    min-height:auto !important;
    padding:24px 14px 34px !important;
    display:flex !important;
    flex-direction:column !important;
    gap:16px !important;
  }
  .entry-req-stage::before{
    width:280px !important;
    height:280px !important;
    top:270px !important;
  }
  .entry-req-person{
    position:relative !important;
    left:auto !important;
    bottom:auto !important;
    transform:none !important;
    width:280px !important;
    height:360px !important;
    margin:0 auto !important;
  }
  .entry-req-card,
  .entry-req-card.exam,
  .entry-req-card.course,
  .entry-req-card.report{
    position:relative !important;
    left:auto !important;
    right:auto !important;
    top:auto !important;
    bottom:auto !important;
    width:100% !important;
    min-height:auto !important;
  }
  .entry-req-stage::after{
    left:0; right:0; bottom:0;
  }
}


/* ===== Entry requirements: exact proportional layout from reference ===== */
.entry-req-stage{
  position:relative !important;
  width:100% !important;
  aspect-ratio:1916 / 1178 !important;
  min-height:0 !important;
  padding:0 !important;
  background:#fff !important;
  border:none !important;
  border-radius:0 !important;
  overflow:visible !important;
}

/* center circle: approx. x 565–1309 / y 286–1030 in the reference */
.entry-req-stage::before{
  width:38.83% !important;
  height:auto !important;
  aspect-ratio:1 / 1 !important;
  left:48.90% !important;
  top:56.00% !important;
  transform:translate(-50%,-50%) !important;
  border-radius:50% !important;
  background:rgba(95,166,232,.20) !important;
  z-index:0 !important;
}

/* person: centered and scaled to the same proportion as the reference */
.entry-req-person{
  position:absolute !important;
  left:49.25% !important;
  bottom:7.85% !important;
  width:45.50% !important;
  height:69.50% !important;
  transform:translateX(-50%) !important;
  margin:0 !important;
  z-index:2 !important;
  overflow:visible !important;
  background:transparent !important;
  box-shadow:none !important;
}
.entry-req-person img{
  width:100% !important;
  height:100% !important;
  object-fit:contain !important;
  object-position:center bottom !important;
}

/* all three blocks use the same reference proportion */
.entry-req-card{
  position:absolute !important;
  width:24.79% !important;
  height:23.77% !important;
  min-height:0 !important;
  box-sizing:border-box !important;
  padding:2.0% 2.2% !important;
  border:0 !important;
  border-radius:9.2% / 15.5% !important;
  box-shadow:none !important;
  z-index:3 !important;
  display:flex !important;
  flex-direction:column !important;
  justify-content:center !important;
}

/* blue block: x 193 / y 427 */
.entry-req-card.exam{
  left:10.07% !important;
  top:36.25% !important;
  right:auto !important;
  bottom:auto !important;
  background:#5FA6E8 !important;
}

/* pink block: x 962 / y 82 */
.entry-req-card.report{
  left:50.21% !important;
  top:6.96% !important;
  right:auto !important;
  bottom:auto !important;
  width:24.79% !important;
  background:#F39AC1 !important;
}

/* yellow block: x 1268 / y 506 */
.entry-req-card.course{
  left:66.18% !important;
  top:42.95% !important;
  right:auto !important;
  bottom:auto !important;
  background:#E8EB18 !important;
}

.entry-req-card::before,
.entry-req-card .mini-tag{
  display:none !important;
}

.entry-req-card h3{
  margin:0 0 .48em !important;
  color:#173956 !important;
  font-size:clamp(16px,1.42vw,28px) !important;
  line-height:1.15 !important;
  font-weight:900 !important;
}
.entry-req-card p{
  margin:0 !important;
  color:#173956 !important;
  font-size:clamp(12px,.92vw,18px) !important;
  line-height:1.58 !important;
}

/* bottom blue line: x 110–1800 / y ≈1053 */
.entry-req-stage::after{
  content:"" !important;
  position:absolute !important;
  left:5.74% !important;
  right:6.05% !important;
  bottom:7.73% !important;
  height:2.35% !important;
  min-height:6px !important;
  background:#5FA6E8 !important;
  z-index:4 !important;
}

/* tablet keeps the same composition instead of rearranging */
@media(max-width:1100px) and (min-width:761px){
  .entry-req-card h3{
    font-size:clamp(14px,1.7vw,22px) !important;
  }
  .entry-req-card p{
    font-size:clamp(10px,1.15vw,15px) !important;
  }
}

/* mobile: preserve usability */
@media(max-width:760px){
  .entry-req-stage{
    aspect-ratio:auto !important;
    min-height:auto !important;
    padding:24px 14px 34px !important;
    display:flex !important;
    flex-direction:column !important;
    gap:16px !important;
  }
  .entry-req-stage::before{
    width:270px !important;
    height:270px !important;
    left:50% !important;
    top:245px !important;
  }
  .entry-req-person{
    position:relative !important;
    left:auto !important;
    bottom:auto !important;
    width:290px !important;
    height:360px !important;
    transform:none !important;
    margin:0 auto !important;
  }
  .entry-req-card,
  .entry-req-card.exam,
  .entry-req-card.report,
  .entry-req-card.course{
    position:relative !important;
    left:auto !important;
    right:auto !important;
    top:auto !important;
    bottom:auto !important;
    width:100% !important;
    height:auto !important;
    padding:22px !important;
    border-radius:22px !important;
  }
  .entry-req-card h3{font-size:22px !important;}
  .entry-req-card p{font-size:15px !important;}
  .entry-req-stage::after{
    left:0 !important;
    right:0 !important;
    bottom:0 !important;
    height:7px !important;
  }
}


/* ===== Entry requirements visual group: move upward 50px ===== */
.entry-req-stage{
  transform:translateY(-100px) !important;
  margin-bottom:-100px !important;
}


/* ===== Fix Chinese heading hidden behind the raised visual stage ===== */
.entry-req-head{
  position:relative !important;
  z-index:20 !important;
}
.entry-req-head h2{
  display:block !important;
  visibility:visible !important;
  opacity:1 !important;
  position:relative !important;
  z-index:21 !important;
  color:#173956 !important;
}
.entry-req-stage{
  z-index:1 !important;
}


/* ===== Move the WHOLE entry requirements module upward 50px ===== */
.entry-req-stage{
  transform:none !important;
  margin-bottom:0 !important;
}
.entry-req-section{
  transform:translateY(-50px) !important;
  margin-bottom:-50px !important;
}


/* ===== Smaller floating requirement cards ===== */
.entry-req-card{
  width:21.5% !important;
  height:20.5% !important;
  padding:1.65% 1.85% !important;
  will-change:transform;
  transform-origin:center center;
}

/* keep the three cards visually balanced around the girl */
.entry-req-card.exam{
  left:11.5% !important;
  top:37.8% !important;
  animation:reqFloatLeft 5.8s ease-in-out infinite alternate !important;
}
.entry-req-card.report{
  left:51.6% !important;
  top:8.2% !important;
  width:21.5% !important;
  animation:reqFloatTop 6.4s ease-in-out .4s infinite alternate !important;
}
.entry-req-card.course{
  left:67.0% !important;
  top:44.0% !important;
  width:21.5% !important;
  animation:reqFloatRight 6s ease-in-out .8s infinite alternate !important;
}

.entry-req-card h3{
  font-size:clamp(15px,1.25vw,24px) !important;
}
.entry-req-card p{
  font-size:clamp(11px,.82vw,16px) !important;
}

@keyframes reqFloatLeft{
  0%   { transform:translate3d(0,0,0) rotate(-.35deg); }
  50%  { transform:translate3d(3px,-7px,0) rotate(.45deg); }
  100% { transform:translate3d(-2px,5px,0) rotate(-.15deg); }
}
@keyframes reqFloatTop{
  0%   { transform:translate3d(0,0,0) rotate(.25deg); }
  50%  { transform:translate3d(-4px,6px,0) rotate(-.4deg); }
  100% { transform:translate3d(3px,-6px,0) rotate(.3deg); }
}
@keyframes reqFloatRight{
  0%   { transform:translate3d(0,0,0) rotate(-.2deg); }
  50%  { transform:translate3d(4px,6px,0) rotate(.4deg); }
  100% { transform:translate3d(-3px,-5px,0) rotate(-.3deg); }
}

@media (prefers-reduced-motion:reduce){
  .entry-req-card{
    animation:none !important;
  }
}

@media(max-width:760px){
  .entry-req-card,
  .entry-req-card.exam,
  .entry-req-card.report,
  .entry-req-card.course{
    width:100% !important;
    height:auto !important;
    animation:none !important;
  }
}


/* ===== Move visual composition only upward 80px; keep headings fixed ===== */
.entry-req-stage{
  transform:translateY(-80px) !important;
  margin-bottom:-80px !important;
}


/* ===== Admissions Process ===== */
.admissions-process-section{
  position:relative;
  margin-top:-30px;
  padding:92px 0 100px;
  background:#5FA6E8;
  border-radius:86px 86px 0 0;
  overflow:hidden;
  z-index:3;
}
.admissions-process-shell{
  width:min(calc(100% - 120px),var(--container));
  margin:0 auto;
}
.admissions-process-head{
  text-align:center;
  margin:0 auto 64px;
}
.admissions-process-head-en{
  font-family:"Anton","Arial Narrow",sans-serif;
  font-size:clamp(38px,3vw,58px);
  line-height:1;
  color:#fff;
  letter-spacing:-.02em;
}
.admissions-process-head h2{
  margin:14px 0 0;
  color:#fff;
  font-size:clamp(28px,2.1vw,40px);
  font-weight:900;
  line-height:1.2;
}
.admissions-process-grid{
  display:grid;
  grid-template-columns:repeat(5,minmax(0,1fr));
  gap:18px;
}
.admissions-process-card{
  min-height:250px;
  padding:26px 24px 24px;
  border-radius:26px;
  background:#fff;
  box-shadow:0 14px 34px rgba(23,57,86,.08);
  display:flex;
  flex-direction:column;
  justify-content:flex-start;
}
.admissions-process-index{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:38px;
  height:38px;
  border-radius:50%;
  background:rgba(95,166,232,.15);
  color:#5FA6E8;
  font-size:14px;
  font-weight:900;
  margin-bottom:18px;
}
.admissions-process-card h3{
  margin:0 0 12px;
  color:#173956;
  font-size:23px;
  line-height:1.2;
  font-weight:900;
}
.admissions-process-card p{
  margin:0;
  color:#607B91;
  font-size:15px;
  line-height:1.78;
}
.admissions-process-card:nth-child(2) .admissions-process-index{background:rgba(243,154,193,.18);color:#E77EAE;}
.admissions-process-card:nth-child(3) .admissions-process-index{background:rgba(232,235,24,.20);color:#9B9D00;}
.admissions-process-card:nth-child(4) .admissions-process-index{background:rgba(95,166,232,.15);color:#5FA6E8;}
.admissions-process-card:nth-child(5) .admissions-process-index{background:rgba(243,154,193,.18);color:#E77EAE;}

@media(max-width:1180px){
  .admissions-process-shell{
    width:min(calc(100% - 64px),var(--container));
  }
  .admissions-process-grid{
    grid-template-columns:repeat(2,minmax(0,1fr));
  }
  .admissions-process-card:last-child{
    grid-column:1/-1;
  }
}
@media(max-width:760px){
  .admissions-process-section{
    margin-top:-10px;
    padding:72px 0 80px;
    border-radius:48px 48px 0 0;
  }
  .admissions-process-shell{
    width:calc(100% - 30px);
  }
  .admissions-process-head{
    margin-bottom:42px;
  }
  .admissions-process-grid{
    grid-template-columns:1fr;
  }
  .admissions-process-card:last-child{
    grid-column:auto;
  }
}


/* ===== Admissions Process overlap refinement ===== */
/* Pull the blue process module upward so it slightly covers the bottom of the girl,
   matching the reference composition. */
.admissions-process-section{
  margin-top:-120px !important;
  z-index:10 !important;
}


/* ===== Strong visible overlap with previous girl module ===== */
.admissions-process-section{
  position:relative !important;
  transform:translateY(-210px) !important;
  margin-top:0 !important;
  margin-bottom:-210px !important;
  z-index:50 !important;
}

/* ensure previous visual stays behind the blue process panel */
.entry-req-section,
.entry-req-stage,
.entry-req-person{
  z-index:1 !important;
}


/* ===== Final overlap adjustment: another 10px upward ===== */
.admissions-process-section{
  transform:translateY(-220px) !important;
  margin-bottom:-220px !important;
  z-index:50 !important;
}

/* hide the previous module's bottom blue rule behind the process panel */
.entry-req-stage::after{
  z-index:0 !important;
}


/* ===== Admissions Process as a standalone rounded blue panel ===== */
.admissions-process-section{
  width:100% !important;
  box-sizing:border-box !important;
  background:#5FA6E8 !important;
  border-radius:86px !important;     /* all four corners rounded */
  padding:92px 0 100px !important;
  overflow:hidden !important;

  /* keep the intentional overlap with the girl above */
  transform:translateY(-220px) !important;

  /* IMPORTANT: reserve white space below for following modules */
  margin-bottom:-140px !important;
}

/* white page continues underneath the blue panel */
body{
  background:#fff !important;
}

@media(max-width:760px){
  .admissions-process-section{
    border-radius:48px !important;
  }
}


/* ===== UK Private School Assessment ===== */
.assessment-section{
  position:relative;
  background:#fff;
  padding:120px 0 125px;
  overflow:hidden;
}
.assessment-shell{
  width:min(calc(100% - 120px),var(--container));
  margin:0 auto;
}
.assessment-head{
  text-align:center;
  margin:0 auto 64px;
}
.assessment-head-en{
  font-family:"Anton","Arial Narrow",sans-serif;
  font-size:clamp(38px,3.15vw,60px);
  line-height:1;
  color:#5FA6E8;
  letter-spacing:-.025em;
}
.assessment-head h2{
  margin:14px 0 0;
  color:#173956;
  font-size:clamp(28px,2.15vw,40px);
  font-weight:900;
  line-height:1.2;
}

/* photo fan */
.assessment-visual{
  position:relative;
  width:min(900px,84%);
  height:430px;
  margin:0 auto 74px;
}
.assessment-photo{
  position:absolute;
  top:0;
  width:34%;
  height:100%;
  border-radius:30px;
  overflow:hidden;
  background:#eef4f8;
  box-shadow:0 22px 50px rgba(28,67,100,.10);
  transform-origin:center bottom;
}
.assessment-photo img{
  width:100%;
  height:100%;
  object-fit:cover;
  display:block;
}
.assessment-photo.one{
  left:3%;
  transform:rotate(-7deg);
  z-index:1;
}
.assessment-photo.two{
  left:33%;
  transform:rotate(0deg);
  z-index:3;
}
.assessment-photo.three{
  right:3%;
  transform:rotate(7deg);
  z-index:2;
}
.assessment-badge{
  position:absolute;
  top:18px;
  left:18px;
  z-index:4;
  display:inline-flex;
  align-items:center;
  gap:8px;
  padding:8px 13px;
  border-radius:999px;
  background:rgba(255,255,255,.92);
  box-shadow:0 8px 20px rgba(27,61,89,.08);
  color:#173956;
  font-size:11px;
  font-weight:900;
  letter-spacing:.05em;
  text-transform:uppercase;
  backdrop-filter:blur(10px);
  -webkit-backdrop-filter:blur(10px);
}
.assessment-badge::before{
  content:"";
  width:8px;
  height:8px;
  border-radius:50%;
  background:#5FA6E8;
}

/* three text columns */
.assessment-grid{
  display:grid;
  grid-template-columns:repeat(3,minmax(0,1fr));
  border-top:1px solid #E8EEF3;
}
.assessment-item{
  padding:34px 38px 0;
  text-align:center;
  min-height:210px;
}
.assessment-item + .assessment-item{
  border-left:1px solid #E8EEF3;
}
.assessment-item h3{
  margin:0 0 16px;
  color:#173956;
  font-size:clamp(22px,1.7vw,30px);
  font-weight:900;
  line-height:1.25;
}
.assessment-item p{
  margin:0 auto;
  max-width:360px;
  color:#607B91;
  font-size:15px;
  line-height:1.78;
}
.assessment-item .assessment-no{
  display:block;
  margin-bottom:10px;
  color:#5FA6E8;
  font-family:"Anton","Arial Narrow",sans-serif;
  font-size:clamp(36px,3vw,54px);
  line-height:1;
}
.assessment-item:nth-child(2) .assessment-no{color:#F39AC1;}
.assessment-item:nth-child(3) .assessment-no{color:#B6C800;}

@media(max-width:1050px){
  .assessment-shell{
    width:min(calc(100% - 64px),var(--container));
  }
  .assessment-visual{
    width:92%;
    height:380px;
  }
}
@media(max-width:760px){
  .assessment-section{
    padding:90px 0 95px;
  }
  .assessment-shell{
    width:calc(100% - 30px);
  }
  .assessment-visual{
    width:100%;
    height:330px;
    margin-bottom:56px;
  }
  .assessment-photo{
    width:42%;
    border-radius:22px;
  }
  .assessment-photo.one{left:0;}
  .assessment-photo.two{left:29%;}
  .assessment-photo.three{right:0;}
  .assessment-badge{
    top:12px;
    left:12px;
    padding:6px 10px;
    font-size:9px;
  }
  .assessment-grid{
    grid-template-columns:1fr;
  }
  .assessment-item{
    padding:30px 12px;
  }
  .assessment-item + .assessment-item{
    border-left:0;
    border-top:1px solid #E8EEF3;
  }
}


/* ===== Assessment title: move upward 50px only ===== */
.assessment-head{
  transform:translateY(-50px) !important;
  margin-bottom:14px !important; /* compensates the original 64px gap so the content below stays in place */
}


/* ===== Assessment content: move down 30px, title stays unchanged ===== */
.assessment-visual{
  transform:translateY(30px) !important;
}
.assessment-grid{
  transform:translateY(30px) !important;
}
/* reserve the moved-down space before the next module */
.assessment-section{
  padding-bottom:155px !important;
}


/* ===== Not Ready for UK Prep School Applications ===== */
.not-ready-section{
  position:relative;
  background:#fff;
  padding:88px 0 118px;
  transform:translateY(-50px);
  margin-bottom:-50px;
  overflow:hidden;
}
.not-ready-shell{
  width:min(calc(100% - 120px),var(--container));
  margin:0 auto;
}
.not-ready-head{
  text-align:center;
  margin:0 auto 56px;
}
.not-ready-head-en{
  font-family:"Anton","Arial Narrow",sans-serif;
  font-size:clamp(42px,4.6vw,82px);
  line-height:1;
  color:#5FA6E8;
  letter-spacing:-.03em;
}
.not-ready-head h2{
  margin:18px 0 0;
  color:#173956;
  font-size:clamp(30px,2.8vw,48px);
  line-height:1.2;
  font-weight:900;
}
.not-ready-desc{
  max-width:980px;
  margin:30px auto 0;
  text-align:center;
  color:#315773;
  font-size:clamp(15px,1.2vw,20px);
  line-height:1.75;
}

.not-ready-bubbles{
  width:min(1180px,94%);
  margin:54px auto 0;
  display:grid;
  grid-template-columns:repeat(12,1fr);
  grid-auto-rows:94px;
  gap:16px 18px;
  align-items:center;
}
.not-ready-bubble{
  display:flex;
  align-items:center;
  justify-content:center;
  text-align:center;
  min-height:82px;
  padding:0 28px;
  border-radius:999px;
  color:#173956;
  font-size:clamp(15px,1.2vw,21px);
  line-height:1.45;
  font-weight:500;
  transform:scale(1);
  transform-origin:center;
  transition:transform .55s cubic-bezier(.2,.75,.2,1), box-shadow .55s ease;
  will-change:transform;
}
.not-ready-bubble.is-active{
  transform:scale(1.08);
  box-shadow:0 18px 34px rgba(34,72,105,.12);
}
.not-ready-bubble:nth-child(1){
  grid-column:1 / span 7;
  background:#F0F10B;
}
.not-ready-bubble:nth-child(2){
  grid-column:8 / span 5;
  background:#5FA6E8;
}
.not-ready-bubble:nth-child(3){
  grid-column:1 / span 6;
  margin-left:34px;
  background:#F39AC1;
}
.not-ready-bubble:nth-child(4){
  grid-column:7 / span 5;
  margin-right:36px;
  background:#F0F10B;
}
.not-ready-bubble:nth-child(5){
  grid-column:2 / span 6;
  background:#5FA6E8;
}
.not-ready-bubble:nth-child(6){
  grid-column:8 / span 5;
  background:#F39AC1;
}

@media(max-width:950px){
  .not-ready-shell{width:min(calc(100% - 64px),var(--container));}
  .not-ready-bubbles{
    width:100%;
    grid-template-columns:1fr 1fr;
    grid-auto-rows:auto;
  }
  .not-ready-bubble,
  .not-ready-bubble:nth-child(n){
    grid-column:auto;
    margin:0;
    min-height:76px;
  }
}
@media(max-width:680px){
  .not-ready-section{padding:72px 0 88px;}
  .not-ready-shell{width:calc(100% - 30px);}
  .not-ready-bubbles{grid-template-columns:1fr;}
  .not-ready-bubble{min-height:70px;padding:0 22px;}
}
@media(prefers-reduced-motion:reduce){
  .not-ready-bubble{transition:none !important;}
}


/* ===== Restore original Not Ready typography/scale ===== */
.not-ready-section{
  padding:88px 0 118px !important;
}
.not-ready-head-en{
  font-size:clamp(38px,3.15vw,60px) !important;
}
.not-ready-head h2{
  font-size:clamp(28px,2.15vw,40px) !important;
}
.not-ready-desc{
  font-size:clamp(14px,1.05vw,18px) !important;
}


/* ===== Active bubble: bring to top + 3px white border ===== */
.not-ready-bubble{
  position:relative !important;
  z-index:1;
  box-sizing:border-box !important;
  border:3px solid transparent !important;
}
.not-ready-bubble.is-active{
  z-index:20 !important;
  border:3px solid #fff !important;
}


/* ===== Bubble text one-line + content-based width ===== */
.not-ready-bubbles{
  display:flex !important;
  flex-wrap:wrap !important;
  justify-content:center !important;
  align-items:center !important;
  gap:16px 18px !important;
  width:min(1500px,96%) !important;
  margin-left:auto !important;
  margin-right:auto !important;
}

.not-ready-bubble,
.not-ready-bubble:nth-child(n){
  grid-column:auto !important;
  width:max-content !important;
  max-width:none !important;
  min-width:0 !important;
  min-height:82px !important;
  margin:0 !important;
  padding-left:40px !important;
  padding-right:40px !important;
  white-space:nowrap !important;
  flex:0 0 auto !important;
}

@media(max-width:950px){
  .not-ready-bubbles{
    overflow-x:auto !important;
    justify-content:flex-start !important;
    flex-wrap:nowrap !important;
    padding:12px 8px 24px !important;
  }
  .not-ready-bubble,
  .not-ready-bubble:nth-child(n){
    padding-left:40px !important;
    padding-right:40px !important;
    white-space:nowrap !important;
  }
}


/* ===== Bubble layout refinement: staggered positions + correct corner radius ===== */
.not-ready-bubbles{
  display:grid !important;
  grid-template-columns:1fr 1fr !important;
  grid-auto-rows:auto !important;
  column-gap:18px !important;
  row-gap:16px !important;
  width:min(1500px,96%) !important;
  margin-left:auto !important;
  margin-right:auto !important;
  overflow:visible !important;
}

/* no pill shape: use the softer rounded-rectangle radius from the reference */
.not-ready-bubble,
.not-ready-bubble:nth-child(n){
  width:max-content !important;
  max-width:none !important;
  min-width:0 !important;
  min-height:82px !important;
  padding-left:40px !important;
  padding-right:40px !important;
  white-space:nowrap !important;
  border-radius:28px !important;
  margin:0 !important;
  flex:none !important;
}

/* deliberately stagger each row instead of lining everything up */
.not-ready-bubble:nth-child(1){
  grid-column:1 !important;
  justify-self:end !important;
  position:relative !important;
  left:18px !important;
}
.not-ready-bubble:nth-child(2){
  grid-column:2 !important;
  justify-self:start !important;
  position:relative !important;
  left:0 !important;
}
.not-ready-bubble:nth-child(3){
  grid-column:1 !important;
  justify-self:end !important;
  position:relative !important;
  left:-82px !important;
}
.not-ready-bubble:nth-child(4){
  grid-column:2 !important;
  justify-self:start !important;
  position:relative !important;
  left:-128px !important;
}
.not-ready-bubble:nth-child(5){
  grid-column:1 !important;
  justify-self:end !important;
  position:relative !important;
  left:-16px !important;
}
.not-ready-bubble:nth-child(6){
  grid-column:2 !important;
  justify-self:start !important;
  position:relative !important;
  left:-34px !important;
}

/* active bubble still scales above the rest */
.not-ready-bubble.is-active{
  z-index:30 !important;
}

@media(max-width:1100px){
  .not-ready-bubbles{
    width:100% !important;
    grid-template-columns:1fr !important;
  }
  .not-ready-bubble,
  .not-ready-bubble:nth-child(n){
    grid-column:1 !important;
    justify-self:center !important;
    left:auto !important;
    border-radius:24px !important;
  }
}

@media(max-width:680px){
  .not-ready-bubble,
  .not-ready-bubble:nth-child(n){
    min-height:70px !important;
    padding-left:40px !important;
    padding-right:40px !important;
    border-radius:22px !important;
  }
}


/* ===== Bubble spacing fix: no overlap, 20px between all bubbles ===== */
.not-ready-bubbles{
  display:flex !important;
  flex-wrap:wrap !important;
  justify-content:center !important;
  align-items:center !important;
  gap:20px !important;
  width:min(1600px,96%) !important;
  overflow:visible !important;
}

/* remove the previous offsets that caused overlap */
.not-ready-bubble,
.not-ready-bubble:nth-child(n){
  position:relative !important;
  left:auto !important;
  right:auto !important;
  top:auto !important;
  bottom:auto !important;
  grid-column:auto !important;
  justify-self:auto !important;
  margin:0 !important;
  flex:0 0 auto !important;
  width:max-content !important;
  max-width:none !important;
  padding-left:40px !important;
  padding-right:40px !important;
  white-space:nowrap !important;
  border-radius:28px !important;
}

/* create a staggered look without allowing items to collide */
.not-ready-bubble:nth-child(3){
  margin-left:-55px !important;
}
.not-ready-bubble:nth-child(4){
  margin-right:-35px !important;
}
.not-ready-bubble:nth-child(5){
  margin-left:70px !important;
}

/* active scaling remains above neighboring bubbles */
.not-ready-bubble.is-active{
  z-index:30 !important;
}

@media(max-width:1100px){
  .not-ready-bubbles{
    gap:20px !important;
  }
  .not-ready-bubble,
  .not-ready-bubble:nth-child(n){
    margin:0 !important;
  }
}


/* ===== Not Ready module: strict reference layout ===== */
.not-ready-section{
  padding:44px 0 78px !important;
  transform:translateY(-50px) !important;
  margin-bottom:-50px !important;
  overflow:visible !important;
}

.not-ready-shell{
  width:min(calc(100% - 80px), 1840px) !important;
  margin:0 auto !important;
}

.not-ready-head{
  margin:0 auto 0 !important;
  text-align:center !important;
}

.not-ready-head-en{
  font-size:clamp(42px,3.55vw,68px) !important;
  line-height:1 !important;
  letter-spacing:-.025em !important;
}

.not-ready-head h2{
  margin:20px 0 0 !important;
  font-size:clamp(30px,2.35vw,46px) !important;
  line-height:1.18 !important;
  letter-spacing:.01em !important;
}

.not-ready-desc{
  width:min(1120px,78%) !important;
  max-width:none !important;
  margin:30px auto 0 !important;
  font-size:clamp(16px,1.25vw,24px) !important;
  line-height:1.48 !important;
  color:#173956 !important;
  text-align:center !important;
}

/* Force the exact two-line break shown in the reference */
.not-ready-desc{
  text-wrap:balance;
}

/* bubble group */
.not-ready-bubbles{
  display:block !important;
  width:min(1600px,88%) !important;
  margin:52px auto 0 !important;
  overflow:visible !important;
}

.not-ready-row{
  display:flex !important;
  align-items:center !important;
  gap:20px !important;
  margin:0 !important;
  overflow:visible !important;
}
.not-ready-row + .not-ready-row{
  margin-top:20px !important;
}

/* stagger each row to match the reference */
.not-ready-row.row-1{
  justify-content:center !important;
  transform:translateX(36px);
}
.not-ready-row.row-2{
  justify-content:center !important;
  transform:translateX(-48px);
}
.not-ready-row.row-3{
  justify-content:center !important;
  transform:translateX(42px);
}

.not-ready-bubble{
  position:relative !important;
  display:flex !important;
  align-items:center !important;
  justify-content:center !important;
  width:max-content !important;
  max-width:none !important;
  min-width:0 !important;
  height:94px !important;
  min-height:94px !important;
  padding:0 40px !important;
  margin:0 !important;
  box-sizing:border-box !important;
  white-space:nowrap !important;
  border-radius:27px !important;
  border:3px solid transparent !important;
  color:#111 !important;
  font-size:clamp(18px,1.42vw,28px) !important;
  line-height:1 !important;
  font-weight:400 !important;
  letter-spacing:0 !important;
  z-index:1;
  transform-origin:center center;
}

/* Exact palette and approximate widths from the reference */
.not-ready-row.row-1 .not-ready-bubble:first-child{
  background:#F4F500 !important;
}
.not-ready-row.row-1 .not-ready-bubble:last-child{
  background:#5FA6E8 !important;
}
.not-ready-row.row-2 .not-ready-bubble:first-child{
  background:#F39AC1 !important;
}
.not-ready-row.row-2 .not-ready-bubble:last-child{
  background:#F4F500 !important;
}
.not-ready-row.row-3 .not-ready-bubble:first-child{
  background:#5FA6E8 !important;
}
.not-ready-row.row-3 .not-ready-bubble:last-child{
  background:#F39AC1 !important;
}

/* Keep the requested random one-at-a-time enlargement */
.not-ready-bubble.is-active{
  z-index:50 !important;
  border:3px solid #fff !important;
  transform:scale(1.08) !important;
  box-shadow:0 18px 36px rgba(23,57,86,.12) !important;
}

/* Responsive */
@media(max-width:1280px){
  .not-ready-bubbles{
    width:96% !important;
  }
  .not-ready-row.row-1,
  .not-ready-row.row-2,
  .not-ready-row.row-3{
    transform:none !important;
  }
  .not-ready-bubble{
    font-size:clamp(15px,1.35vw,22px) !important;
    padding:0 32px !important;
  }
}
@media(max-width:900px){
  .not-ready-shell{
    width:calc(100% - 36px) !important;
  }
  .not-ready-desc{
    width:92% !important;
  }
  .not-ready-bubbles{
    width:100% !important;
  }
  .not-ready-row{
    flex-direction:column !important;
    gap:20px !important;
  }
  .not-ready-row + .not-ready-row{
    margin-top:20px !important;
  }
  .not-ready-bubble{
    width:100% !important;
    height:auto !important;
    min-height:76px !important;
    white-space:normal !important;
    line-height:1.45 !important;
    padding:18px 28px !important;
    border-radius:24px !important;
  }
}


/* ===== More UK Private School Resources ===== */
.more-resources-section{
  position:relative;
  background:#fff;
  padding:88px 0 118px;
  overflow:hidden;
}
.more-resources-shell{
  width:min(calc(100% - 80px),1840px);
  margin:0 auto;
}
.more-resources-head{
  text-align:center;
  margin:0 auto 62px;
}
.more-resources-head-en{
  font-family:"Anton","Arial Narrow",sans-serif;
  font-size:clamp(38px,3.15vw,60px);
  line-height:1;
  color:#5FA6E8;
  letter-spacing:-.025em;
}
.more-resources-head h2{
  margin:18px 0 0;
  color:#173956;
  font-size:clamp(28px,2.15vw,40px);
  line-height:1.18;
  font-weight:900;
}

/* LogoLoop - adapted directly from the interaction rules supplied by the user */
.logoloop{
  position:relative;
  --logoloop-gap:64px;
  --logoloop-logoHeight:56px;
  --logoloop-fadeColorAuto:#ffffff;
  width:100%;
  overflow:hidden;
  padding-top:calc(var(--logoloop-logoHeight) * .18);
  padding-bottom:calc(var(--logoloop-logoHeight) * .18);
}
.logoloop__track{
  display:flex;
  width:max-content;
  will-change:transform;
  user-select:none;
  position:relative;
  z-index:0;
}
.logoloop__list{
  display:flex;
  align-items:center;
  list-style:none;
  margin:0;
  padding:0;
}
.logoloop__item{
  flex:0 0 auto;
  margin-right:var(--logoloop-gap);
  font-size:var(--logoloop-logoHeight);
  line-height:1;
  overflow:visible;
}
.logoloop__item:last-child{
  margin-right:var(--logoloop-gap);
}
.logoloop__node{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  transition:transform .3s cubic-bezier(.4,0,.2,1);
}
.logoloop__item img{
  height:var(--logoloop-logoHeight);
  width:auto;
  max-width:260px;
  display:block;
  object-fit:contain;
  image-rendering:-webkit-optimize-contrast;
  -webkit-user-drag:none;
  pointer-events:none;
  transition:transform .3s cubic-bezier(.4,0,.2,1);
}
.logoloop--scale-hover .logoloop__item:hover img,
.logoloop--scale-hover .logoloop__item:hover .logoloop__node{
  transform:scale(1.2);
  transform-origin:center center;
}
.logoloop--fade::before,
.logoloop--fade::after{
  content:'';
  position:absolute;
  top:0;
  bottom:0;
  width:clamp(36px,8%,130px);
  pointer-events:none;
  z-index:10;
}
.logoloop--fade::before{
  left:0;
  background:linear-gradient(to right,var(--logoloop-fadeColor,var(--logoloop-fadeColorAuto)) 0%,rgba(255,255,255,0) 100%);
}
.logoloop--fade::after{
  right:0;
  background:linear-gradient(to left,var(--logoloop-fadeColor,var(--logoloop-fadeColorAuto)) 0%,rgba(255,255,255,0) 100%);
}
@media(prefers-reduced-motion:reduce){
  .logoloop__track{transform:translate3d(0,0,0)!important;}
  .logoloop__item img,.logoloop__node{transition:none!important;}
}
@media(max-width:900px){
  .more-resources-shell{width:calc(100% - 36px);}
  .more-resources-section{padding:76px 0 92px;}
  .more-resources-head{margin-bottom:48px;}
  .logoloop{
    --logoloop-gap:42px;
    --logoloop-logoHeight:44px;
  }
  .logoloop__item img{max-width:210px;}
}


/* ===== Supplied logo files: display original artwork only ===== */
#ukSchoolLogoLoop .logoloop__item img{
  height:var(--logoloop-logoHeight) !important;
  width:auto !important;
  max-width:260px !important;
  object-fit:contain !important;
  filter:none !important;
  mix-blend-mode:normal !important;
}
@media(max-width:900px){
  #ukSchoolLogoLoop .logoloop__item img{
    max-width:210px !important;
  }
}


/* ===== Success Stories ===== */
.success-stories-section{
  position:relative;
  background:#fff;
  padding:96px 0 124px;
  overflow:hidden;
}
.success-stories-shell{
  width:min(calc(100% - 120px),var(--container));
  margin:0 auto;
}
.success-stories-head{
  text-align:center;
  margin:0 auto 58px;
}
.success-stories-head-en{
  font-family:"Anton","Arial Narrow",sans-serif;
  font-size:clamp(38px,3.15vw,60px);
  line-height:1;
  color:#5FA6E8;
  letter-spacing:-.025em;
}
.success-stories-head h2{
  margin:16px 0 0;
  color:#173956;
  font-size:clamp(28px,2.15vw,40px);
  line-height:1.2;
  font-weight:900;
}

/* safe-area-contained viewport */
.success-loop{
  position:relative;
  width:100%;
  overflow:hidden;
  padding:12px 0 18px;
}
.success-loop::before,
.success-loop::after{
  content:"";
  position:absolute;
  top:0;
  bottom:0;
  width:clamp(28px,5vw,90px);
  z-index:10;
  pointer-events:none;
}
.success-loop::before{
  left:0;
  background:linear-gradient(to right,#fff 0%,rgba(255,255,255,0) 100%);
}
.success-loop::after{
  right:0;
  background:linear-gradient(to left,#fff 0%,rgba(255,255,255,0) 100%);
}
.success-loop__track{
  display:flex;
  width:max-content;
  align-items:center;
  will-change:transform;
  user-select:none;
}
.success-loop__list{
  display:flex;
  align-items:center;
  gap:24px;
  list-style:none;
  margin:0;
  padding:0;
}
.success-loop__item{
  flex:0 0 auto;
  width:300px;
  height:543px;
  border-radius:20px;
  overflow:hidden;
  background:#0A4878;
  box-shadow:0 16px 34px rgba(23,57,86,.10);
  transition:transform .3s cubic-bezier(.4,0,.2,1), box-shadow .3s ease;
}
.success-loop__item:hover{
  transform:translateY(-6px);
  box-shadow:0 22px 42px rgba(23,57,86,.16);
}
.success-loop__item img{
  width:100%;
  height:100%;
  display:block;
  object-fit:cover;
  border-radius:20px;
  -webkit-user-drag:none;
  pointer-events:none;
}

@media(max-width:1100px){
  .success-stories-shell{
    width:min(calc(100% - 64px),var(--container));
  }
  .success-loop__item{
    width:270px;
    height:489px;
  }
}
@media(max-width:760px){
  .success-stories-section{
    padding:78px 0 92px;
  }
  .success-stories-shell{
    width:calc(100% - 30px);
  }
  .success-stories-head{
    margin-bottom:44px;
  }
  .success-loop__list{
    gap:18px;
  }
  .success-loop__item{
    width:220px;
    height:398px;
    border-radius:18px;
  }
  .success-loop__item img{
    border-radius:18px;
  }
}
@media(prefers-reduced-motion:reduce){
  .success-loop__track{
    transform:none !important;
  }
}


/* Final bubble spacing: horizontal 40px, vertical 20px */
.not-ready-bubbles{column-gap:40px !important;row-gap:20px !important;}
.not-ready-row{column-gap:40px !important;row-gap:20px !important;}
</style>

<style>
/* Success Stories — requested size/spacing update */
.success-loop::before,
.success-loop::after{
  display:none !important;
}
.success-loop__list{
  gap:20px !important;
}
.success-loop__item{
  width:200px !important;
  height:362px !important;
  border-radius:20px !important;
  transition:none !important;
  box-shadow:none !important;
}
.success-loop__item:hover{
  transform:none !important;
  box-shadow:none !important;
}
.success-loop__item img{
  border-radius:20px !important;
}
@media(max-width:1100px){
  .success-loop__item{
    width:200px !important;
    height:362px !important;
  }
}
@media(max-width:760px){
  .success-loop__list{
    gap:20px !important;
  }
  .success-loop__item{
    width:200px !important;
    height:362px !important;
    border-radius:20px !important;
  }
  .success-loop__item img{
    border-radius:20px !important;
  }
}
</style>


<style>
/* Success Stories — keep 20px gap also between duplicated loop groups */
.success-loop__list{
  gap:20px !important;
  margin-right:20px !important;
}
</style>


<style>
/* Success Stories — show each complete source image without top/bottom cropping */
.success-loop__item{
  width:200px !important;
  height:362px !important;
  border-radius:20px !important;
  overflow:hidden !important;
  background:#fff !important;
}
.success-loop__item img{
  width:100% !important;
  height:100% !important;
  object-fit:contain !important;
  object-position:center center !important;
  border-radius:20px !important;
}
</style>


<style>
/* Success Stories — 11 new cards, exact requested sizing */
.success-loop__item{
  flex:0 0 200px !important;
  width:200px !important;
  height:362px !important;
  margin-right:20px !important;
  border-radius:20px !important;
  overflow:hidden !important;
  background:transparent !important;
}
.success-loop__item img{
  display:block !important;
  width:100% !important;
  height:100% !important;
  object-fit:cover !important;
  object-position:center center !important;
  border-radius:20px !important;
  transform:none !important;
  transition:none !important;
}
.success-loop__item:hover,
.success-loop__item:hover img{
  transform:none !important;
}
.success-loop::before,
.success-loop::after{
  display:none !important;
  content:none !important;
}
.success-loop__list{
  gap:0 !important;
}
</style>


<style>
/* Success Stories — 整体（标题 + 成功案例图片）上移 50px */
.success-stories-shell{
  transform:translateY(-50px) !important;
}
</style>


<style>
/* ===== Final Contact CTA ===== */
.contact-cta-section{
  position:relative;
  background:#fff;
  padding:40px 0 110px;
}
.contact-cta-shell{
  width:min(calc(100% - 120px),var(--container));
  margin:0 auto;
}
.contact-cta-card{
  position:relative;
  min-height:460px;
  border-radius:34px;
  overflow:hidden;
  background:
    linear-gradient(rgba(8,36,66,.50),rgba(8,36,66,.50)),
    url('http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/school4.jpg') center 52% / cover no-repeat;
  box-shadow:0 18px 50px rgba(17,56,89,.10);
  display:flex;
  align-items:center;
  justify-content:center;
  padding:58px 64px;
}
.contact-cta-card::after{
  content:"";
  position:absolute;
  inset:0;
  background:linear-gradient(180deg,rgba(0,0,0,.02),rgba(0,0,0,.13));
  pointer-events:none;
}
.contact-cta-content{
  position:relative;
  z-index:2;
  width:min(100%,1040px);
  text-align:center;
  color:#fff;
}
.contact-cta-content h2{
  margin:0;
  font-size:clamp(34px,3.2vw,56px);
  line-height:1.12;
  font-weight:900;
  letter-spacing:-.04em;
}
.contact-cta-content p{
  margin:16px 0 34px;
  font-size:clamp(16px,1.35vw,22px);
  line-height:1.65;
  color:rgba(255,255,255,.94);
}
.contact-cta-form{
  display:grid;
  grid-template-columns:1fr .72fr 1fr 1.22fr auto;
  gap:14px;
  align-items:center;
}
.contact-cta-field input{
  width:100%;
  height:54px;
  padding:0 18px;
  border:1px solid rgba(255,255,255,.30);
  border-radius:16px;
  background:rgba(255,255,255,.16);
  color:#fff;
  outline:none;
  backdrop-filter:blur(14px);
  -webkit-backdrop-filter:blur(14px);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.12);
}
.contact-cta-field input::placeholder{
  color:rgba(255,255,255,.88);
}
.contact-cta-field input:focus{
  background:rgba(255,255,255,.22);
  border-color:rgba(255,255,255,.58);
  box-shadow:0 0 0 4px rgba(255,255,255,.10);
}
.contact-cta-submit{
  height:54px;
  min-width:118px;
  padding:0 28px;
  border:0;
  border-radius:16px;
  background:#fff;
  color:#173956;
  font-weight:900;
  cursor:pointer;
  box-shadow:0 10px 26px rgba(0,0,0,.12);
  transition:transform .2s ease, box-shadow .2s ease;
}
.contact-cta-submit:hover{
  transform:translateY(-1px);
  box-shadow:0 14px 30px rgba(0,0,0,.16);
}
@media(max-width:1180px){
  .contact-cta-shell{
    width:min(calc(100% - 68px),var(--container));
  }
  .contact-cta-form{
    grid-template-columns:1fr 1fr;
  }
  .contact-cta-submit{
    grid-column:1/-1;
    width:180px;
    justify-self:center;
  }
}
@media(max-width:700px){
  .contact-cta-section{
    padding:24px 0 72px;
  }
  .contact-cta-shell{
    width:calc(100% - 30px);
  }
  .contact-cta-card{
    min-height:520px;
    padding:46px 22px;
    border-radius:26px;
  }
  .contact-cta-form{
    grid-template-columns:1fr;
  }
  .contact-cta-submit{
    grid-column:auto;
    width:100%;
  }
}
</style>


<style>
/* 联系模块：外框高度减少 80px，并整体上移 50px */
.contact-cta-section{
  transform:translateY(-50px) !important;
  margin-bottom:-50px !important;
}
.contact-cta-card{
  min-height:380px !important; /* 原 460px，减少 80px */
  padding-top:38px !important;
  padding-bottom:38px !important;
}
@media(max-width:700px){
  .contact-cta-card{
    min-height:440px !important; /* 原移动端 520px，同样减少 80px */
  }
}
</style>


<style>
/* ===== 修正：只把“标准的私校申请节点...”这一整块白色大卡片改成蓝色 ===== */
.timeline-booking-card{
  background:#5FA6E8 !important;
  border:1px solid rgba(255,255,255,.22) !important;
  box-shadow:0 18px 52px rgba(31,73,112,.14) !important;
}

/* 顶部渐变线在蓝底上隐藏，避免重复 */
.timeline-booking-card::before{
  display:none !important;
}

/* 标题、强调文字、字段标签统一白色 */
.timeline-booking-title,
.timeline-booking-title .accent,
.timeline-booking-field label{
  color:#fff !important;
}

/* 四个输入框改为毛玻璃 */
.timeline-booking-field input{
  background:rgba(255,255,255,.14) !important;
  border:1px solid rgba(255,255,255,.42) !important;
  color:#fff !important;
  backdrop-filter:blur(16px) !important;
  -webkit-backdrop-filter:blur(16px) !important;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.15) !important;
}

.timeline-booking-field input::placeholder{
  color:rgba(255,255,255,.78) !important;
}

.timeline-booking-field input:focus{
  background:rgba(255,255,255,.20) !important;
  border-color:rgba(255,255,255,.68) !important;
  box-shadow:0 0 0 4px rgba(255,255,255,.10) !important;
}

/* 黄色预约按钮保持原样，仅保留此前要求的字号匹配 */
.timeline-booking-submit{
  color:#17324F !important;
}
</style>

<style>
/* 预约按钮文字与左侧填表输入文字保持一致 */
.timeline-booking-field input,
.timeline-booking-submit{
  font-size:16px !important;
}
</style>

<style>
/* ===== 综合能力测评：右上角云朵学生装饰 ===== */
.timeline-booking-card{
  overflow:visible !important;
  position:relative !important;
}

.timeline-booking-cloudkids{
  position:absolute;
  z-index:5;
  right:4.2%;
  top:-102px;
  width:clamp(260px,24vw,430px);
  pointer-events:none;
  transform-origin:50% 70%;
  animation:bookingCloudFloat 5.2s ease-in-out infinite;
}

.timeline-booking-cloudkids img{
  display:block;
  width:100%;
  height:auto;
  object-fit:contain;
  filter:drop-shadow(0 14px 18px rgba(40,92,130,.10));
}

.timeline-booking-head,
.timeline-booking-form{
  position:relative;
  z-index:6;
}

/* 轻微漂浮，幅度很小，避免抢正文 */
@keyframes bookingCloudFloat{
  0%   { transform:translate3d(0,0,0) rotate(-0.3deg); }
  25%  { transform:translate3d(2px,-5px,0) rotate(0deg); }
  50%  { transform:translate3d(0,-8px,0) rotate(0.25deg); }
  75%  { transform:translate3d(-2px,-4px,0) rotate(0deg); }
  100% { transform:translate3d(0,0,0) rotate(-0.3deg); }
}

@media(max-width:1180px){
  .timeline-booking-cloudkids{
    right:3%;
    top:-82px;
    width:clamp(230px,28vw,340px);
  }
}

@media(max-width:760px){
  .timeline-booking-cloudkids{
    right:-3%;
    top:-62px;
    width:210px;
    opacity:.96;
  }
}

@media(prefers-reduced-motion:reduce){
  .timeline-booking-cloudkids{
    animation:none !important;
  }
}
</style>


<style>
/* 精确修改“英国私校入学条件”模块三个彩色卡片的说明文字 */
.entry-req-card p{
  font-size:16px !important;
}
</style>


<style>
/* ===== 底部联系模块：通屏长条，保持原高度，不留底部白块 ===== */
.contact-section,
.final-contact-section,
.contact-cta-section{
  width:100% !important;
  max-width:none !important;
  margin-left:0 !important;
  margin-right:0 !important;
  margin-bottom:0 !important;
  padding-left:0 !important;
  padding-right:0 !important;
  padding-bottom:0 !important;
}

/* 实际联系背景框 */
.contact-card,
.final-contact-card,
.contact-cta{
  width:100% !important;
  max-width:none !important;
  margin:0 !important;
  border-radius:0 !important;
}

/* 页面底部不要再额外留白 */
body,
main{
  padding-bottom:0 !important;
  margin-bottom:0 !important;
}
</style>


<style>
/* 底部联系模块：真正通屏 */
.contact-cta-section{
  width:100vw !important;
  max-width:none !important;
  margin:0 !important;
  padding-left:0 !important;
  padding-right:0 !important;
}
.contact-cta-shell{
  width:100% !important;
  max-width:none !important;
  margin:0 !important;
  padding:0 !important;
}
.contact-cta-card{
  width:100% !important;
  max-width:none !important;
  margin:0 !important;
  border-radius:0 !important;
  box-sizing:border-box !important;
}
</style>


<style>
/* 底部联系通屏长条：仅上方两个角恢复圆角，下方保持直角 */
.contact-cta-card{
  border-radius:48px 48px 0 0 !important;
  overflow:hidden !important;
}
</style>


<style>
/* 最底部联系模块：使用用户刚上传的原图作为背景 */
.contact-cta-card{
  background-image:
    linear-gradient(rgba(8,36,66,.42), rgba(8,36,66,.42)),
    url("http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-01.webp") !important;
  background-size:cover !important;
  background-position:center center !important;
  background-repeat:no-repeat !important;
  border-radius:48px 48px 0 0 !important;
  overflow:hidden !important;
}
</style>


<style>
/* 首屏左右两块文字整体上移 50px，其他不变 */
.copy{
  transform:translateY(-50px) !important;
}
.side-info{
  transform:translateY(-50px) !important;
}
</style>


<style>
/* 首屏左右两块文字：在上一版基础上往下 30px（即相对原始位置上移 20px） */
.copy{
  transform:translateY(-20px) !important;
}
.side-info{
  transform:translateY(-20px) !important;
}
</style>


<style>
.not-ready-section .not-ready-desc{
  font-size:14px !important;
}
</style>


<style>
/* 气泡模块：整体缩小，文字 16px，气泡间距 40px */
.not-ready-bubbles{
  width:min(1380px,82%) !important;
  margin-top:46px !important;
}
.not-ready-row{
  gap:40px !important;
}
.not-ready-row + .not-ready-row{
  margin-top:40px !important;
}
.not-ready-bubble{
  height:70px !important;
  min-height:70px !important;
  padding:0 30px !important;
  font-size:16px !important;
  border-radius:22px !important;
}
@media(max-width:900px){
  .not-ready-row{gap:40px !important;}
  .not-ready-row + .not-ready-row{margin-top:40px !important;}
  .not-ready-bubble{font-size:16px !important; min-height:64px !important;}
}
</style>
</head>
<body>

<!-- Floating anchor navigation: hidden initially, appears only while scrolling down -->
<nav class="section-anchor-nav" id="sectionAnchorNav" aria-label="页面板块导航">
  <div class="section-anchor-nav__inner">
    <a href="#anchor-advantages" data-anchor="anchor-advantages">私校优势</a>
    <a href="#anchor-timeline" data-anchor="anchor-timeline">入学节点</a>
    <a href="#anchor-entry" data-anchor="anchor-entry">入学条件</a>
    <a href="#anchor-process" data-anchor="anchor-process">申请流程</a>
    <a href="#anchor-assessment" data-anchor="anchor-assessment">能力测评</a>
    <a href="#anchor-parent-policy" data-anchor="anchor-parent-policy">陪读政策</a>
    <a href="#anchor-about" data-anchor="anchor-about">认识我们</a>
  </div>
</nav>

<div class="page">
<section class="hero">
  <div class="landmark-silhouette" aria-hidden="true">
    <img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-02.webp" alt="" decoding="async" loading="lazy">
  </div>
  <div class="landmark-outline" aria-hidden="true">
    <img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-03.svg" alt="" decoding="async" loading="lazy">
  </div>

  <header class="nav">
    <div class="nav-inner">
      <div class="brand">
        <a class="logo logo-image" href="#" aria-label="BASE"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-04.svg" alt="BASE" decoding="async" loading="lazy"></a>
        <span class="brand-line"></span>
        <div class="brand-copy">Base英国本土的低龄留学机构，专为4-17岁孩子定制服务</div>
      </div>
<a class="phone" href="tel:4001075166">
        <span class="phone-icon">
          <svg class="phone-svg" viewBox="0 0 24 24" fill="none" aria-hidden="true">
  <path d="M6.62 10.79a15.46 15.46 0 0 0 6.59 6.59l2.2-2.2a1 1 0 0 1 1.02-.24c1.12.37 2.33.57 3.57.57a1 1 0 0 1 1 1V20a1 1 0 0 1-1 1C10.61 21 3 13.39 3 4a1 1 0 0 1 1-1h3.5a1 1 0 0 1 1 1c0 1.25.2 2.45.57 3.57a1 1 0 0 1-.25 1.02l-2.2 2.2Z"
        stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
        </span>
        <span class="phone-copy">
          <small>咨询热线</small>
          <strong>400 107 5166</strong>
        </span>
      </a>
    </div>
  </header>

  <div class="stage">
    <div class="mega" aria-hidden="true">
      <div class="mega-inner">
        <span class="prep">PREP</span>
        <span class="admissions">ADMISSIONS</span>
      </div>
    </div>

    <div class="visual-wrap">
      <div class="visual-float">
        <img class="visual-img" src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-05.png" alt="英国老师与两名中国小学生坐在云朵上的主视觉" decoding="async" loading="eager">
      </div>
    </div>

    <div class="copy">
      <div class="eyebrow">UK PREP SCHOOL · ONE-STOP SERVICE</div>
      <h1>英国预备学校申请<br><span>一站式服务</span></h1>
      <p>从学术准备、背景提升到择校、访校和面试，<strong>找我们就够了</strong></p>
    </div>

    <aside class="side-info">
      <span class="big">4–17</span>
      <span class="small">岁英国低龄留学<br>全阶段定制服务</span>
    </aside>
  </div>

  <section class="form-zone">
    <div class="scroll-mark" aria-hidden="true">
      <svg class="scroll-arrow" viewBox="0 0 24 24" fill="none">
        <path d="M6 9L12 15L18 9" stroke="currentColor" stroke-width="2.8"
              stroke-linecap="round" stroke-linejoin="round"/>
      </svg>
    </div>
    <div class="form-inner">
      <div class="form-header">
        <h2 class="form-title">科学衡量能力，<span>成功择校入门</span></h2>
        <div class="form-note"></div>
      </div>
      <form class="inline-form" id="leadForm">
        <div class="field">
          <label for="name">姓名</label>
          <input id="name" name="name" type="text" placeholder="请输入姓名">
        </div>
        <div class="field">
          <label for="age">年龄</label>
          <input id="age" name="age" type="text" placeholder="请输入年龄">
        </div>
        <div class="field">
          <label for="schoolAge">计划升学年龄</label>
          <input id="schoolAge" name="schoolAge" type="text" placeholder="请输入计划升学年龄">
        </div>
        <div class="field">
          <label for="contact">电话或微信</label>
          <input id="contact" name="contact" type="text" placeholder="请输入电话或微信">
        </div>
        <button class="submit" type="submit">预约英国私校综合能力测评</button>
      </form>
    </div>
  </section>
</section>


<section class="more-content">
  <div class="more-content-inner">
    <section id="anchor-advantages" class="advantages-section" aria-labelledby="advantages-title">
      <div class="advantages-shell">
        <div class="advantages-head">
          <div class="advantages-title-wrap">
            <div class="advantages-en">Why UK Private Schools</div>
            <h2 id="advantages-title">英国私校优势</h2>
          </div>
          <div class="advantages-arrows" aria-label="卡片浏览">
            <button class="advantages-arrow prev" type="button" aria-label="向左浏览">
              <svg viewBox="0 0 48 24" fill="none" aria-hidden="true"><path d="M22 3 13 12l9 9M14 12h29" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/></svg>
            </button>
            <button class="advantages-arrow next" type="button" aria-label="向右浏览">
              <svg viewBox="0 0 48 24" fill="none" aria-hidden="true"><path d="m26 3 9 9-9 9M34 12H5" stroke="currentColor" stroke-width="2.2" stroke-linecap="round" stroke-linejoin="round"/></svg>
            </button>
          </div>
        </div>

        <div class="advantages-grid" id="advantagesCircularDom">
          <article class="adv-card">
            <img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/school1.jpg" alt="英国私校学生与校园场景" loading="lazy" referrerpolicy="no-referrer" decoding="async">
            <div class="adv-card-copy">
              <h3>全人教育</h3>
              <p>从学术到爱好，帮助孩子成为更好的自己</p>
            </div>
          </article>
          <article class="adv-card">
            <img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/school2.jpg" alt="英国私校学生与校园场景" loading="lazy" referrerpolicy="no-referrer" decoding="async">
            <div class="adv-card-copy">
              <h3>迈向国际化</h3>
              <p>你一定希望孩子的未来有更广阔的舞台，所以现在需要走出去</p>
            </div>
          </article>
          <article class="adv-card">
            <img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/school3.jpg" alt="英国私校学生与校园场景" loading="lazy" referrerpolicy="no-referrer" decoding="async">
            <div class="adv-card-copy">
              <h3>精英为伴</h3>
              <p>你的圈子决定你的价值，学校是孩子踏入圈层的第一步</p>
            </div>
          </article>
          <article class="adv-card">
            <img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/school4.jpg" alt="英国私校学生与校园场景" loading="lazy" referrerpolicy="no-referrer" decoding="async">
            <div class="adv-card-copy">
              <h3>名校升学</h3>
              <p>从预备小学开始，英国私校教育的国际名校升学率，你知道的</p>
            </div>
          </article>
          <article class="adv-card">
            <img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/school5.webp" alt="英国私校学生与校园场景" loading="lazy" referrerpolicy="no-referrer" decoding="async">
            <div class="adv-card-copy">
              <h3>语言环境</h3>
              <p>英语目前依然是世界广泛通用语言，掌握这个工具重要</p>
            </div>
          </article>
          <article class="adv-card">
            <img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/school6.jpg" alt="英国私校学生与校园场景" loading="lazy" referrerpolicy="no-referrer" decoding="async">
            <div class="adv-card-copy">
              <h3>批判性思维</h3>
              <p>你希望孩子更独立自主，思辨的能力在交互性学习中养成</p>
            </div>
          </article>
          <article class="adv-card">
            <img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/school7.jpg" alt="英国私校学生与校园场景" loading="lazy" referrerpolicy="no-referrer" decoding="async">
            <div class="adv-card-copy">
              <h3>英国永居</h3>
              <p>18 岁以下孩子读书 7 年直接拿英国绿卡？如何实现？</p>
            </div>
          </article>
          <article class="adv-card">
            <img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/school8.webp" alt="英国私校学生与校园场景" loading="lazy" referrerpolicy="no-referrer" decoding="async">
            <div class="adv-card-copy">
              <h3>财富管理</h3>
              <p>格局和视野，让孩子驾驭财富而不被奴役。</p>
            </div>
          </article>
        </div>
      </div>
    </section>
  </div>
</section>


<section id="anchor-timeline" class="timeline-section" aria-labelledby="timeline-title">
  <div class="timeline-shell">
    <div class="timeline-head">
      <div class="timeline-head-en">Prep School Admissions Timeline</div>
      <h2 id="timeline-title">英国预备学校入学关键节点</h2>
    </div>

    <div class="timeline-track" id="timelineTrack">
      <article class="timeline-item is-active" tabindex="0" data-copy="实践考核，通过一些以游戏为主的任务，来测试孩子感知力、操控力、设计能力和语言技能。">
        <div class="timeline-orb" style="--fill:25%"></div>
        <span class="timeline-age">4+</span>
      </article>
      <article class="timeline-item" tabindex="0" data-copy="英国第二个主要入学年也就是 Year 3，主要科目就是英语和数学，有些私校会增加逻辑推理。">
        <div class="timeline-orb" style="--fill:35%"></div>
        <span class="timeline-age">7+</span>
      </article>
      <article class="timeline-item" tabindex="0" data-copy="英国私校或文法学校的 “小升初” 考试，科目包含：英语、数学、文字推理、图形推理。">
        <div class="timeline-orb" style="--fill:50%"></div>
        <span class="timeline-age">11+</span>
      </article>
      <article class="timeline-item" tabindex="0" data-copy="13 + 入学是来英国读中学阶段，是国内家庭大概率入学年。对应 Year9 是 GCSE 前重要一年，被称为 PRE‑GCSE。">
        <div class="timeline-orb" style="--fill:75%"></div>
        <span class="timeline-age">13+</span>
      </article>
      <article class="timeline-item" tabindex="0" data-copy="16 + 考试是学生选择自己在 A‑Level 阶段准备修读的科目进行相应测试，对应入读的是 Year12，需要在 GCSE 考试中达到一定的要求。">
        <div class="timeline-orb" style="--fill:100%"></div>
        <span class="timeline-age">16+</span>
      </article>
    </div>

    <div class="timeline-copy" id="timelineCopy" aria-live="polite">实践考核，通过一些以游戏为主的任务，来测试孩子感知力、操控力、设计能力和语言技能。</div>
  </div>
</section>

<section class="timeline-booking" aria-labelledby="timelineBookingTitle">
  <div class="timeline-booking-card">
  <div class="timeline-booking-cloudkids" aria-hidden="true">
    <img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-06.webp" alt="" decoding="async" loading="lazy">
  </div>
    <div class="timeline-booking-head">
      <h2 class="timeline-booking-title" id="timelineBookingTitle">
        标准的私校申请节点，非标化的私校入学要求。<span class="accent booking-question">如何提前做好准备？</span>
      </h2>
      <div class="timeline-booking-note"></div>
    </div>

    <form class="timeline-booking-form" action="#" method="post">
      <div class="timeline-booking-field">
        <label for="booking-name">姓名</label>
        <input id="booking-name" name="name" type="text" placeholder="请输入姓名">
      </div>
      <div class="timeline-booking-field">
        <label for="booking-age">年龄</label>
        <input id="booking-age" name="age" type="text" inputmode="numeric" placeholder="请输入年龄">
      </div>
      <div class="timeline-booking-field">
        <label for="booking-plan-age">计划升学年龄</label>
        <input id="booking-plan-age" name="plan_age" type="text" placeholder="请输入计划升学年龄">
      </div>
      <div class="timeline-booking-field">
        <label for="booking-contact">电话或微信</label>
        <input id="booking-contact" name="contact" type="text" placeholder="请输入电话或微信">
      </div>
      <button class="timeline-booking-submit" type="submit">预约英国私校综合能力测评</button>
    </form>
  </div>
</section>


</div>

<script>
document.getElementById('leadForm').addEventListener('submit', function(e){
  e.preventDefault();
  const btn=this.querySelector('.submit');
  const old=btn.textContent;
  btn.textContent='提交成功，我们会尽快联系您';
  btn.disabled=true;
  setTimeout(()=>{btn.textContent=old;btn.disabled=false;},2200);
});
</script>

<script>
(function(){
  function fitMegaTitle(){
    const stage = document.querySelector('.stage');
    const title = document.querySelector('.mega-inner');
    if(!stage || !title) return;

    title.style.transform = 'none';
    const naturalWidth = title.scrollWidth;
    const availableWidth = stage.clientWidth;

    if(naturalWidth > 0 && availableWidth > 0){
      const scale = availableWidth / naturalWidth;
      title.style.transform = `scale(${scale})`;
    }
  }

  if(document.fonts && document.fonts.ready){
    document.fonts.ready.then(fitMegaTitle);
  } else {
    window.addEventListener('load', fitMegaTitle);
  }
  window.addEventListener('resize', fitMegaTitle);
})();
</script>





<script>
(function(){
  const root = document.getElementById('advantagesGallery');
  if(!root) return;

  const cards = Array.from(root.querySelectorAll('.gallery-card'));
  const count = cards.length;

  let position = 0;
  let target = 0;
  let velocity = 0;
  let dragging = false;
  let lastX = 0;
  let lastTime = 0;
  let lastWheelTime = 0;

  // Continuous wrap so cards recycle seamlessly.
  function wrapDistance(v){
    while(v > count / 2) v -= count;
    while(v < -count / 2) v += count;
    return v;
  }

  function smoothstep(t){
    t = Math.max(0, Math.min(1, t));
    return t * t * (3 - 2 * t);
  }

  function render(){
    const w = root.clientWidth;

    // Wider spacing on desktop, still fluid on tablets.
    const spacing = Math.min(Math.max(w * 0.175, 205), 285);
    const centerWidth = 0.8;

    cards.forEach((card, i) => {
      const d = wrapDistance(i - position);
      const ad = Math.abs(d);

      // Horizontal distribution.
      const x = d * spacing;

      // Gentle arc: almost flat in the center, increasingly curved toward edges.
      const curved = Math.max(0, ad - centerWidth);
      const y = Math.min(
        104,
        8 * ad + 18 * curved * curved
      );

      // Natural inward tilt.
      const tiltStrength = smoothstep(Math.min(ad / 3.8, 1));
      const rotateY = -Math.sign(d) * (8 + 25 * tiltStrength);

      // Tiny Z rotation helps cards feel less rigid.
      const rotateZ = Math.sign(d) * Math.min(4.2, ad * 1.15);

      // Depth and scale.
      const z = -ad * 72;
      const scale = Math.max(0.76, 1 - ad * 0.055);

      // Subtle fading only at far edges.
      const opacity = ad > 4.7 ? 0 : Math.max(0.22, 1 - ad * 0.105);

      // Slight desaturation and blur at the extreme sides.
      const blur = Math.max(0, (ad - 3.1) * 0.45);
      const saturate = Math.max(0.78, 1 - ad * 0.035);

      card.style.transform =
        `translate3d(${x}px, ${y}px, ${z}px) rotateY(${rotateY}deg) rotateZ(${rotateZ}deg) scale(${scale})`;

      card.style.opacity = opacity;
      card.style.filter = `blur(${blur}px) saturate(${saturate})`;
      card.style.zIndex = String(1000 - Math.round(ad * 100));
      card.style.pointerEvents = ad < 3.8 ? 'auto' : 'none';
      card.classList.toggle('is-active', ad < 0.48);
    });
  }

  root.addEventListener('pointerdown', (e) => {
    dragging = true;
    root.setPointerCapture(e.pointerId);
    lastX = e.clientX;
    lastTime = performance.now();
    velocity = 0;
  });

  root.addEventListener('pointermove', (e) => {
    if(!dragging) return;

    const now = performance.now();
    const dx = e.clientX - lastX;
    const dt = Math.max(8, now - lastTime);

    // More sensitive than before, but still controlled.
    const delta = -dx / 240;
    target += delta;
    position = target;

    // Capture inertia.
    velocity = (delta / dt) * 16;

    lastX = e.clientX;
    lastTime = now;
    render();
  });

  function endDrag(){
    dragging = false;
  }

  root.addEventListener('pointerup', endDrag);
  root.addEventListener('pointercancel', endDrag);

  root.addEventListener('wheel', (e) => {
    e.preventDefault();

    const now = performance.now();
    const delta = e.deltaY || e.deltaX;

    // Trackpads feel smoother with proportional scrolling.
    const normalized = Math.max(-80, Math.min(80, delta));
    target += normalized / 260;

    // Add gentle wheel inertia.
    const dt = Math.max(16, now - lastWheelTime);
    velocity = (normalized / 260) / dt * 12;
    lastWheelTime = now;
  }, { passive:false });

  let perfVisible=true, perfLastFrame=0;
  if('IntersectionObserver' in window){
    const perfObserver=new IntersectionObserver((entries)=>{
      perfVisible=!!entries[0]?.isIntersecting;
    },{rootMargin:'180px'});
    perfObserver.observe(root);
  }
  function animate(ts){
    if(!perfVisible || document.hidden){
      setTimeout(()=>requestAnimationFrame(animate),250);
      return;
    }
    if(ts && ts-perfLastFrame < 32){
      requestAnimationFrame(animate);
      return;
    }
    perfLastFrame=ts||performance.now();
    if(!dragging){
      // Momentum.
      if(Math.abs(velocity) > 0.0008){
        target += velocity;
        velocity *= 0.955;
      }else{
        velocity = 0;
      }

      // Critically damped-like smooth follow.
      position += (target - position) * 0.075;

      // Only snap very softly once motion nearly stops.
      const nearest = Math.round(target);
      if(
        Math.abs(velocity) < 0.002 &&
        Math.abs(target - position) < 0.02
      ){
        target += (nearest - target) * 0.018;
      }
    }

    render();
    requestAnimationFrame(animate);
  }

  window.addEventListener('resize', render);
  render();
  animate();
})();
</script>

<script>
/* Keep the existing white form panel exactly 80px below the cloud image on desktop. */
(function(){
  const hero = document.querySelector('.hero');
  const visual = document.querySelector('.visual-wrap');
  const form = document.querySelector('.form-zone');
  if(!hero || !visual || !form) return;

  function syncCloudFormGap(){
    if(window.innerWidth <= 850){
      hero.style.removeProperty('--adaptive-form-top');
      hero.style.removeProperty('--adaptive-hero-height');
      return;
    }
    const heroRect = hero.getBoundingClientRect();
    const visualRect = visual.getBoundingClientRect();
    const formTop = visualRect.bottom - heroRect.top + 80;
    const heroHeight = formTop + form.offsetHeight + 100;

    /*
      Keep the cloud → white panel gap at exactly 80px.
      The hero/stage height follows the panel instead of staying at 100vh,
      so large monitors do not create a tall empty blue area.
      The existing copy/side-info bottom offsets therefore move together
      with the panel, preserving the original composition.
    */
    hero.style.setProperty('--adaptive-form-top', formTop + 'px');
    hero.style.setProperty('--adaptive-hero-height', heroHeight + 'px');
  }

  const img = visual.querySelector('img');
  if(img && !img.complete) img.addEventListener('load', syncCloudFormGap, {once:true});
  window.addEventListener('resize', syncCloudFormGap);
  if('ResizeObserver' in window){
    const ro = new ResizeObserver(syncCloudFormGap);
    ro.observe(visual);
    ro.observe(form);
  }
  requestAnimationFrame(syncCloudFormGap);
})();
</script>


<script>
(function(){
  const grid=document.getElementById('advantagesCards');
  const prev=document.querySelector('.advantages-arrow.prev');
  const next=document.querySelector('.advantages-arrow.next');
  if(!grid||!prev||!next) return;

  const move=(dir)=>{
    const card=grid.querySelector('.adv-card');
    if(!card) return;
    const gap=parseFloat(getComputedStyle(grid).gap)||14;
    grid.scrollBy({left:dir*(card.getBoundingClientRect().width+gap),behavior:'smooth'});
  };
  prev.addEventListener('click',()=>move(-1));
  next.addEventListener('click',()=>move(1));

  // Desktop mouse / pen drag scrolling. Touch keeps native horizontal swipe behavior.
  let dragging=false;
  let startX=0;
  let startScrollLeft=0;
  let moved=false;
  let activePointer=null;

  grid.addEventListener('pointerdown',(e)=>{
    if(e.pointerType==='touch') return;
    if(e.button!==0) return;
    dragging=true;
    moved=false;
    activePointer=e.pointerId;
    startX=e.clientX;
    startScrollLeft=grid.scrollLeft;
    grid.classList.add('is-dragging');
    grid.setPointerCapture?.(e.pointerId);
    e.preventDefault();
  });

  grid.addEventListener('pointermove',(e)=>{
    if(!dragging || e.pointerId!==activePointer) return;
    const dx=e.clientX-startX;
    if(Math.abs(dx)>3) moved=true;
    grid.scrollLeft=startScrollLeft-dx;
    e.preventDefault();
  });

  const endDrag=(e)=>{
    if(!dragging) return;
    if(e && activePointer!==null && e.pointerId!==activePointer) return;
    dragging=false;
    grid.classList.remove('is-dragging');
    if(activePointer!==null){
      try{ grid.releasePointerCapture?.(activePointer); }catch(_){}
    }
    activePointer=null;

    // Snap naturally to the nearest card after the drag ends.
    if(moved){
      const card=grid.querySelector('.adv-card');
      if(card){
        const gap=parseFloat(getComputedStyle(grid).gap)||14;
        const step=card.getBoundingClientRect().width+gap;
        const target=Math.round(grid.scrollLeft/step)*step;
        requestAnimationFrame(()=>grid.scrollTo({left:target,behavior:'smooth'}));
      }
    }
  };

  grid.addEventListener('pointerup',endDrag);
  grid.addEventListener('pointercancel',endDrag);
  grid.addEventListener('lostpointercapture',endDrag);
  grid.addEventListener('dragstart',(e)=>e.preventDefault());
})();
</script>





<script>
(function(){
  const root = document.getElementById('advantagesCircularDom');
  if(!root) return;
  const cards = Array.from(root.querySelectorAll('.adv-card'));
  const prev = document.querySelector('.advantages-arrow.prev');
  const next = document.querySelector('.advantages-arrow.next');
  if(!cards.length) return;

  /* ---------- tiny WebGL renderer for each existing card image ----------
     This mimics the React Bits shader behavior:
     - uTime keeps changing even when idle
     - uSpeed increases deformation while dragging
     - the DOM copy/gradient stays untouched on top
  */
  function createWebGL(card, img){
    const canvas = document.createElement('canvas');
    canvas.className = 'adv-webgl';
    card.insertBefore(canvas, card.firstChild);

    const gl = canvas.getContext('webgl', {alpha:true, antialias:true, premultipliedAlpha:false});
    if(!gl){ canvas.remove(); return null; }

    const vs = `
      precision highp float;
      attribute vec2 aPos;
      attribute vec2 aUv;
      uniform float uTime;
      uniform float uSpeed;
      uniform float uAspect;
      varying vec2 vUv;

      void main(){
        vUv = aUv;
        vec2 p = aPos;

        // React Bits-inspired continuous "breathing" deformation.
        float waveA = sin(p.x * 4.0 + uTime) * 1.5;
        float waveB = cos(p.y * 2.0 + uTime) * 1.5;
        float amp = 0.012 + min(abs(uSpeed) * 0.0035, 0.035);

        // Convert the z-wave idea into a subtle visible perspective warp in 2D.
        float z = (waveA + waveB) * amp;
        p *= 1.0 + z * 0.55;
        p.y += sin(p.x * 3.0 + uTime * 0.92) * amp * 0.48;
        p.x += cos(p.y * 2.4 + uTime * 0.83) * amp * 0.22 / max(uAspect, 0.5);

        gl_Position = vec4(p, 0.0, 1.0);
      }`;

    const fs = `
      precision highp float;
      uniform sampler2D uTex;
      uniform vec2 uImageSize;
      uniform vec2 uPlaneSize;
      varying vec2 vUv;

      void main(){
        vec2 planeRatio = uPlaneSize / uPlaneSize.y;
        vec2 imageRatio = uImageSize / uImageSize.y;
        vec2 ratio = vec2(
          min(planeRatio.x / imageRatio.x, 1.0),
          min(planeRatio.y / imageRatio.y, 1.0)
        );
        vec2 uv = vec2(
          vUv.x * ratio.x + (1.0 - ratio.x) * 0.5,
          vUv.y * ratio.y + (1.0 - ratio.y) * 0.5
        );
        gl_FragColor = texture2D(uTex, uv);
      }`;

    function shader(type, src){
      const sh = gl.createShader(type);
      gl.shaderSource(sh, src);
      gl.compileShader(sh);
      if(!gl.getShaderParameter(sh, gl.COMPILE_STATUS)){
        console.warn(gl.getShaderInfoLog(sh));
        return null;
      }
      return sh;
    }

    const program = gl.createProgram();
    const v = shader(gl.VERTEX_SHADER, vs);
    const f = shader(gl.FRAGMENT_SHADER, fs);
    if(!v || !f){ canvas.remove(); return null; }
    gl.attachShader(program, v);
    gl.attachShader(program, f);
    gl.linkProgram(program);
    if(!gl.getProgramParameter(program, gl.LINK_STATUS)){
      console.warn(gl.getProgramInfoLog(program));
      canvas.remove(); return null;
    }
    gl.useProgram(program);

    // Subdivided grid so the texture actually bends instead of moving as one flat quad.
    const cols = 34, rows = 24;
    const verts = [], uvs = [], indices = [];
    for(let y=0;y<=rows;y++){
      for(let x=0;x<=cols;x++){
        const u=x/cols, vv=y/rows;
        verts.push(u*2-1, vv*2-1);
        uvs.push(u, vv);
      }
    }
    for(let y=0;y<rows;y++){
      for(let x=0;x<cols;x++){
        const a=y*(cols+1)+x, b=a+1, c=a+(cols+1), d=c+1;
        indices.push(a,c,b, b,c,d);
      }
    }

    function buf(data, loc, size){
      const b = gl.createBuffer();
      gl.bindBuffer(gl.ARRAY_BUFFER,b);
      gl.bufferData(gl.ARRAY_BUFFER,new Float32Array(data),gl.STATIC_DRAW);
      gl.enableVertexAttribArray(loc);
      gl.vertexAttribPointer(loc,size,gl.FLOAT,false,0,0);
    }
    const aPos=gl.getAttribLocation(program,'aPos');
    const aUv=gl.getAttribLocation(program,'aUv');
    buf(verts,aPos,2); buf(uvs,aUv,2);

    const ib=gl.createBuffer();
    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER,ib);
    gl.bufferData(gl.ELEMENT_ARRAY_BUFFER,new Uint16Array(indices),gl.STATIC_DRAW);

    const tex=gl.createTexture();
    gl.bindTexture(gl.TEXTURE_2D,tex);
    gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR);
    gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR);
    gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_S,gl.CLAMP_TO_EDGE);
    gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_WRAP_T,gl.CLAMP_TO_EDGE);
    gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL,1);

    // 1px placeholder
    gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,1,1,0,gl.RGBA,gl.UNSIGNED_BYTE,new Uint8Array([220,230,239,255]));

    const source = new Image();
    source.crossOrigin='anonymous';
    source.src = img.currentSrc || img.src;
    let iw=1, ih=1;
    source.onload=()=>{
      iw=source.naturalWidth||1; ih=source.naturalHeight||1;
      gl.bindTexture(gl.TEXTURE_2D,tex);
      gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,gl.RGBA,gl.UNSIGNED_BYTE,source);
      card.classList.add('webgl-ready');
    };

    const uTime=gl.getUniformLocation(program,'uTime');
    const uSpeed=gl.getUniformLocation(program,'uSpeed');
    const uAspect=gl.getUniformLocation(program,'uAspect');
    const uImageSize=gl.getUniformLocation(program,'uImageSize');
    const uPlaneSize=gl.getUniformLocation(program,'uPlaneSize');

    function resize(){
      const r=card.getBoundingClientRect();
      const dpr=Math.min(window.devicePixelRatio||1,2);
      const w=Math.max(2,Math.round(r.width*dpr));
      const h=Math.max(2,Math.round(r.height*dpr));
      if(canvas.width!==w || canvas.height!==h){
        canvas.width=w; canvas.height=h;
      }
      gl.viewport(0,0,w,h);
      gl.uniform1f(uAspect, r.width/Math.max(1,r.height));
      gl.uniform2f(uPlaneSize,r.width,r.height);
      gl.uniform2f(uImageSize,iw,ih);
    }

    function draw(time,speed){
      resize();
      gl.useProgram(program);
      gl.uniform1f(uTime,time);
      gl.uniform1f(uSpeed,speed);
      gl.uniform2f(uImageSize,iw,ih);
      gl.drawElements(gl.TRIANGLES,indices.length,gl.UNSIGNED_SHORT,0);
    }
    return {draw};
  }

  const webgl = cards.map(()=>null);

  let current=0, target=0, last=0, velocity=0;
  let dragging=false, startX=0, startTarget=0;
  let lastT=performance.now();

  function metrics(){
    const cs=getComputedStyle(root);
    const gap=parseFloat(cs.getPropertyValue('--adv-gap'))||22;
    const w=cards[0].getBoundingClientRect().width;
    return {gap,w,step:w+gap};
  }
  function maxScroll(){
    const {step,w}=metrics();
    return Math.max(0, step*(cards.length-1)+w-root.clientWidth);
  }
  function clamp(){
    target=Math.max(0,Math.min(maxScroll(),target));
  }

  let perfLastFrame=0;
  let perfVisible=true;
  if('IntersectionObserver' in window){
    const perfObserver=new IntersectionObserver((entries)=>{
      perfVisible=!!entries[0]?.isIntersecting;
    },{rootMargin:'180px'});
    perfObserver.observe(root);
  }
  function frame(t){
    if(!perfVisible || document.hidden){
      setTimeout(()=>requestAnimationFrame(frame),250);
      return;
    }
    if(t-perfLastFrame < 32){
      requestAnimationFrame(frame);
      return;
    }
    perfLastFrame=t;
    const dt=Math.min(40,Math.max(8,t-lastT)); lastT=t;

    // Similar feel to scrollEase=.05, but slightly more visible on a normal DOM page.
    current += (target-current)*0.065;
    velocity = current-last;
    last=current;

    const {step,w}=metrics();
    const center=root.clientWidth/2;
    const half=Math.max(1,root.clientWidth/2);
    const time=t*0.004; // close to React Bits uTime += .04 per frame

    cards.forEach((card,i)=>{
      const x=i*step-current;
      const cardCenter=x+w/2;
      const nx=Math.max(-1.15,Math.min(1.15,(cardCenter-center)/half));

      // same circular-gallery concept: y follows an arc, rotation follows distance from center
      const arc=30*nx*nx;
      const rot=nx*4.6;

      // whole-card micro float + shader deformation
      const phase=t*0.0015+i*0.64;
      const idleY=Math.sin(phase)*2.2;
      const idleR=Math.cos(phase*0.86)*0.48;
      const speedLift=Math.min(5,Math.abs(velocity)*0.18);

      card.style.transform=
        `translate3d(${x}px,${arc+idleY-speedLift}px,0) rotateZ(${rot+idleR}deg)`;

      webgl[i]?.draw(time, velocity);
    });

    requestAnimationFrame(frame);
  }

  root.addEventListener('pointerdown',e=>{
    dragging=true;
    startX=e.clientX;
    startTarget=target;
    root.setPointerCapture?.(e.pointerId);
  });
  root.addEventListener('pointermove',e=>{
    if(!dragging)return;
    target=startTarget-(e.clientX-startX)*1.05;
    clamp();
  });
  function up(){
    if(!dragging)return;
    dragging=false;
    const {step}=metrics();
    target=Math.round(target/step)*step;
    clamp();
  }
  root.addEventListener('pointerup',up);
  root.addEventListener('pointercancel',up);

  // React Bits-like vertical wheel navigation
  root.addEventListener('wheel',e=>{
    if(Math.abs(e.deltaY)<2)return;
    e.preventDefault();
    target += (e.deltaY>0?1:-1) * Math.min(110,Math.abs(e.deltaY)*0.65);
    clamp();
  },{passive:false});

  prev?.addEventListener('click',()=>{
    target-=metrics().step; clamp();
  });
  next?.addEventListener('click',()=>{
    target+=metrics().step; clamp();
  });

  root.setAttribute('tabindex','0');
  root.addEventListener('keydown',e=>{
    if(e.key==='ArrowRight'){e.preventDefault();target+=metrics().step;clamp();}
    if(e.key==='ArrowLeft'){e.preventDefault();target-=metrics().step;clamp();}
  });

  window.addEventListener('resize',clamp);
  requestAnimationFrame(frame);
})();
</script>


<script>
(function(){
  const track=document.getElementById('timelineTrack');
  const copy=document.getElementById('timelineCopy');
  if(!track||!copy)return;
  const items=[...track.querySelectorAll('.timeline-item')];
  let active=items[0];
  function show(item){
    if(!item)return;
    items.forEach(el=>el.classList.toggle('is-active',el===item));
    active=item;
    copy.classList.add('is-changing');
    window.setTimeout(()=>{
      copy.textContent=item.dataset.copy||'';
      copy.classList.remove('is-changing');
    },110);
  }
  items.forEach(item=>{
    item.addEventListener('mouseenter',()=>show(item));
    item.addEventListener('focus',()=>show(item));
    item.addEventListener('click',()=>show(item));
  });
})();
</script>

<section id="anchor-entry" class="entry-req-section" aria-labelledby="entryReqTitle">
  <div class="entry-req-shell">
    <div class="entry-req-head">
      <div class="entry-req-head-en">UK Private School Entry Requirements</div>
      <h2 id="entryReqTitle">英国私校入学条件</h2>
    </div>

    <div class="entry-req-stage">
      <div class="entry-req-person">
        <img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-07.webp" alt="穿着英国校服的中国小学女生" decoding="async" loading="lazy">
      </div>

      <article class="entry-req-card exam">
        <h3>入学考试</h3>
        <p>能力测试（笔试 / 机考）/ 面试 / 访校</p>
        <span class="mini-tag">Admissions Assessment</span>
      </article>

      <article class="entry-req-card course">
        <h3>预备课程</h3>
        <p>英语、数学、科学、推理等全学科能力</p>
        <span class="mini-tag">Prep Courses</span>
      </article>

      <article class="entry-req-card report">
        <h3>私校标准化报告</h3>
        <p>笔试，面试，能力评估反馈</p>
        <span class="mini-tag">Standardised Report</span>
      </article>
    </div>
  </div>
</section>


<section id="anchor-process" class="admissions-process-section" aria-labelledby="admissionsProcessTitle">
  <div class="admissions-process-shell">
    <div class="admissions-process-head">
      <div class="admissions-process-head-en">Admissions Process</div>
      <h2 id="admissionsProcessTitle">英国私校入学申请流程</h2>
    </div>

    <div class="admissions-process-grid">
      <article class="admissions-process-card">
        <div class="admissions-process-index">01</div>
        <h3>准备阶段</h3>
        <p>学术能力提升确保笔试成绩达标，兴趣爱好培养提升综合素质，个性养成提升自理能力。</p>
      </article>

      <article class="admissions-process-card">
        <div class="admissions-process-index">02</div>
        <h3>申请阶段</h3>
        <p>准备申请材料并递交目标学校，参加目标学校笔试和面试，获得录取通知，支付入学定金。</p>
      </article>

      <article class="admissions-process-card">
        <div class="admissions-process-index">03</div>
        <h3>入境准备</h3>
        <p>办理签证手续，寄宿及监护人安排，学校开学相关办理。</p>
      </article>

      <article class="admissions-process-card">
        <div class="admissions-process-index">04</div>
        <h3>私校入学</h3>
        <p>进入目标学校入学，并开启适应期有效融入学习和生活环境。</p>
      </article>

      <article class="admissions-process-card">
        <div class="admissions-process-index">05</div>
        <h3>升学准备</h3>
        <p>获得学校成绩单、推荐信及相关活动、获奖背景提升。</p>
      </article>
    </div>
  </div>
</section>


<section id="anchor-assessment" class="assessment-section" aria-labelledby="assessmentTitle">
  <div class="assessment-shell">
    <div class="assessment-head">
      <div class="assessment-head-en">UK Private School Assessment</div>
      <h2 id="assessmentTitle">国际生英国私校入学能力测评</h2>
    </div>

    <div class="assessment-visual">
      <div class="assessment-photo one">
        <span class="assessment-badge">English</span>
        <img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-38.jpg" alt="英国学院图书馆阅读场景" decoding="async" loading="lazy">
      </div>

      <div class="assessment-photo two">
        <span class="assessment-badge">Academic</span>
        <img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-39.jpg" alt="英国学校学术测试场景" decoding="async" loading="lazy">
      </div>

      <div class="assessment-photo three">
        <span class="assessment-badge">Holistic</span>
        <img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-40.jpg" alt="英国学校综合素养活动场景" decoding="async" loading="lazy">
      </div>
    </div>

    <div class="assessment-grid">
      <article class="assessment-item">
        <span class="assessment-no">01</span>
        <h3>英语语言能力</h3>
        <p>确保孩子的 “听说读写” 能力达到英国同龄人水平。</p>
      </article>

      <article class="assessment-item">
        <span class="assessment-no">02</span>
        <h3>入学考试学术能力</h3>
        <p>英国私校入学标准在线测试，了解孩子的实际应试能力。</p>
      </article>

      <article class="assessment-item">
        <span class="assessment-no">03</span>
        <h3>全人综合素养能力</h3>
        <p>根据评估结果，定位孩子水平，推荐需要针对提升的兴趣、爱好和特长。</p>
      </article>
    </div>
  </div>
</section>


<section id="anchor-parent-policy" class="not-ready-section" aria-labelledby="notReadyTitle">
  <div class="not-ready-shell">
    <div class="not-ready-head">
      <div class="not-ready-head-en">Not Ready for UK Prep School Applications</div>
      <h2 id="notReadyTitle">英国预备学校申请，还没准备好？</h2>
      <p class="not-ready-desc">英伦云小为孩子提供英国私校过渡预备课程、英语语言训练、入学测试、申请和注册、预约<br>面试、访校、办理寄宿监护服务、体检、签证申请等一系列服务</p>
    </div>

    <div class="not-ready-bubbles" id="notReadyBubbles">
      <div class="not-ready-row row-1">
        <div class="not-ready-bubble">会说， 听得懂， 能写， 喜欢阅读， 英语语言能力全方面提升</div>
        <div class="not-ready-bubble">系统课程学习， 帮助孩子提升国际课程学习能力</div>
      </div>
      <div class="not-ready-row row-2">
        <div class="not-ready-bubble">从择校到目标学校 Pre-Test， 多对一全面指导确保升学效果</div>
        <div class="not-ready-bubble">近 20 年英国留学服务经验， 确保孩子到达梦校</div>
      </div>
      <div class="not-ready-row row-3">
        <div class="not-ready-bubble">我们拥有强大的英国留学资源， 千所英国学校服务背书</div>
        <div class="not-ready-bubble">丰富的英国私校师资资源， 启发比教育更重要</div>
      </div>
    </div>
  </div>
</section>


<script>
(function(){
  const wrap = document.getElementById('notReadyBubbles');
  if(!wrap) return;
  const bubbles = Array.from(wrap.querySelectorAll('.not-ready-bubble'));
  if(!bubbles.length) return;

  let current = -1;
  let timer = null;

  function pickRandom(){
    let next;
    do{
      next = Math.floor(Math.random() * bubbles.length);
    }while(bubbles.length > 1 && next === current);

    bubbles.forEach((el,i)=>el.classList.toggle('is-active', i === next));
    current = next;
  }

  pickRandom();
  timer = setInterval(pickRandom, 3000);
})();
</script>


<section class="more-resources-section" aria-labelledby="moreResourcesTitle">
  <div class="more-resources-shell">
    <div class="more-resources-head">
      <div class="more-resources-head-en">More UK Private School Resources Coming Soon!</div>
      <h2 id="moreResourcesTitle">更多英国私校资源，敬请期待！</h2>
    </div>

    <div class="logoloop logoloop--horizontal logoloop--fade logoloop--scale-hover"
         id="ukSchoolLogoLoop"
         role="region"
         aria-label="UK private school logos">
      <div class="logoloop__track">
        <ul class="logoloop__list" role="list">
          <li class="logoloop__item" role="listitem"><span class="logoloop__node"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-08.svg" alt="Bilton Grange Preparatory School" title="Bilton Grange Preparatory School" draggable="false" decoding="async" loading="lazy"></span></li>
          <li class="logoloop__item" role="listitem"><span class="logoloop__node"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-09.svg" alt="Brighton College" title="Brighton College" draggable="false" decoding="async" loading="lazy"></span></li>
          <li class="logoloop__item" role="listitem"><span class="logoloop__node"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-10.jpg" alt="Burgess Hill Girls" title="Burgess Hill Girls" draggable="false" decoding="async" loading="lazy"></span></li>
          <li class="logoloop__item" role="listitem"><span class="logoloop__node"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-11.webp" alt="Cardiff Sixth Form College" title="Cardiff Sixth Form College" draggable="false" decoding="async" loading="lazy"></span></li>
          <li class="logoloop__item" role="listitem"><span class="logoloop__node"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-12.webp" alt="Cheltenham College" title="Cheltenham College" draggable="false" decoding="async" loading="lazy"></span></li>
          <li class="logoloop__item" role="listitem"><span class="logoloop__node"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-13.svg" alt="Cheltenham Ladies' College" title="Cheltenham Ladies' College" draggable="false" decoding="async" loading="lazy"></span></li>
          <li class="logoloop__item" role="listitem"><span class="logoloop__node"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-14.webp" alt="Downe House" title="Downe House" draggable="false" decoding="async" loading="lazy"></span></li>
          <li class="logoloop__item" role="listitem"><span class="logoloop__node"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-15.svg" alt="Sevenoaks School" title="Sevenoaks School" draggable="false" decoding="async" loading="lazy"></span></li>
          <li class="logoloop__item" role="listitem"><span class="logoloop__node"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-16.webp" alt="Swanbourne House" title="Swanbourne House" draggable="false" decoding="async" loading="lazy"></span></li>
          <li class="logoloop__item" role="listitem"><span class="logoloop__node"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-17.webp" alt="Vinehall School" title="Vinehall School" draggable="false" decoding="async" loading="lazy"></span></li>
          <li class="logoloop__item" role="listitem"><span class="logoloop__node"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-18.webp" alt="Wells Cathedral School" title="Wells Cathedral School" draggable="false" decoding="async" loading="lazy"></span></li>
          <li class="logoloop__item" role="listitem"><span class="logoloop__node"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-19.webp" alt="Westbourne House School" title="Westbourne House School" draggable="false" decoding="async" loading="lazy"></span></li>
          <li class="logoloop__item" role="listitem"><span class="logoloop__node"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-20.svg" alt="Woldingham School" title="Woldingham School" draggable="false" decoding="async" loading="lazy"></span></li>
          <li class="logoloop__item" role="listitem"><span class="logoloop__node"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-21.webp" alt="St Mary's Calne" title="St Mary's Calne" draggable="false" decoding="async" loading="lazy"></span></li>
          <li class="logoloop__item" role="listitem"><span class="logoloop__node"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-22.webp" alt="The Stowe Group" title="The Stowe Group" draggable="false" decoding="async" loading="lazy"></span></li>
        </ul>
      </div>
    </div>
  </div>
</section>


<script>
(function(){
  const root = document.getElementById('ukSchoolLogoLoop');
  if(!root) return;

  const track = root.querySelector('.logoloop__track');
  const firstList = root.querySelector('.logoloop__list');
  if(!track || !firstList) return;

  // Duplicate the sequence enough times for a seamless continuous loop.
  const original = firstList.cloneNode(true);
  original.setAttribute('aria-hidden','true');
  track.appendChild(original);

  let seqWidth = 0;
  let offset = 0;
  let velocity = 0;
  const speed = 72;
  const tau = .25;
  let hovered = false;
  let last = null;
  let raf = null;

  function measure(){
    seqWidth = (firstList.getBoundingClientRect().width || 0) + 20;
    const viewport = root.clientWidth || 0;
    while(seqWidth > 0 && track.scrollWidth < viewport + seqWidth * 2){
      const clone = firstList.cloneNode(true);
      clone.setAttribute('aria-hidden','true');
      track.appendChild(clone);
    }
  }

  let perfVisible=true, perfLastFrame=0;
  if('IntersectionObserver' in window){
    const perfObserver=new IntersectionObserver((entries)=>{
      perfVisible=!!entries[0]?.isIntersecting;
    },{rootMargin:'160px'});
    perfObserver.observe(root);
  }

  function animate(ts){
    if(!perfVisible || document.hidden){
      setTimeout(()=>requestAnimationFrame(animate),250);
      return;
    }
    if(ts-perfLastFrame < 32){
      requestAnimationFrame(animate);
      return;
    }
    perfLastFrame=ts;
    if(last === null) last = ts;
    const dt = Math.max(0,ts-last)/1000;
    last = ts;
    const target = hovered ? 0 : speed;
    const easing = 1 - Math.exp(-dt/tau);
    velocity += (target-velocity)*easing;

    if(seqWidth > 0){
      offset = (offset + velocity*dt) % seqWidth;
      track.style.transform = `translate3d(${-offset}px,0,0)`;
    }
    raf = requestAnimationFrame(animate);
  }

  root.addEventListener('mouseenter',()=>{hovered=true;});
  root.addEventListener('mouseleave',()=>{hovered=false;});
  window.addEventListener('resize',measure);

  const imgs = Array.from(root.querySelectorAll('img'));
  let remain = imgs.length;
  const done = ()=>{ remain--; if(remain<=0) measure(); };
  if(remain===0) measure();
  imgs.forEach(img=>{
    if(img.complete) done();
    else{
      img.addEventListener('load',done,{once:true});
      img.addEventListener('error',done,{once:true});
    }
  });

  measure();
  raf = requestAnimationFrame(animate);
})();
</script>


<section class="success-stories-section" aria-labelledby="successStoriesTitle">
  <div class="success-stories-shell">
    <div class="success-stories-head">
      <div class="success-stories-head-en">Success Stories</div>
      <h2 id="successStoriesTitle">成功案例</h2>
    </div>

    <div class="success-loop" id="successStoriesLoop" role="region" aria-label="英国私校成功案例轮播">
      <div class="success-loop__track">
        <ul class="success-loop__list" role="list">
<div class="success-loop__item"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-23.jpg" alt="Success Story 1" loading="lazy" decoding="async"></div>
<div class="success-loop__item"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-24.jpg" alt="Success Story 2" loading="lazy" decoding="async"></div>
<div class="success-loop__item"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-25.jpg" alt="Success Story 3" loading="lazy" decoding="async"></div>
<div class="success-loop__item"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-26.jpg" alt="Success Story 4" loading="lazy" decoding="async"></div>
<div class="success-loop__item"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-27.jpg" alt="Success Story 5" loading="lazy" decoding="async"></div>
<div class="success-loop__item"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-28.jpg" alt="Success Story 6" loading="lazy" decoding="async"></div>
<div class="success-loop__item"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-29.jpg" alt="Success Story 7" loading="lazy" decoding="async"></div>
<div class="success-loop__item"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-30.jpg" alt="Success Story 8" loading="lazy" decoding="async"></div>
<div class="success-loop__item"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-31.jpg" alt="Success Story 9" loading="lazy" decoding="async"></div>
<div class="success-loop__item"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-32.jpg" alt="Success Story 10" loading="lazy" decoding="async"></div>
<div class="success-loop__item"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-33.jpg" alt="Success Story 11" loading="lazy" decoding="async"></div>
<div class="success-loop__item"><img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-34.jpg" alt="Success Story 12" loading="lazy" decoding="async"></div>
</ul>
      </div>
    </div>
  </div>
</section>


<script>
(function(){
  const root = document.getElementById('successStoriesLoop');
  if(!root) return;

  const track = root.querySelector('.success-loop__track');
  const firstList = root.querySelector('.success-loop__list');
  if(!track || !firstList) return;

  // Duplicate enough content to create a seamless rightward loop.
  const clone = firstList.cloneNode(true);
  clone.setAttribute('aria-hidden','true');
  track.appendChild(clone);

  let seqWidth = 0;
  let offset = 0;
  let velocity = 0;
  const speed = 46; // px/s
  const tau = .28;
  let hovered = false;
  let last = null;

  function measure(){
    seqWidth = (firstList.getBoundingClientRect().width || 0) + 20;
    const viewport = root.clientWidth || 0;
    while(seqWidth > 0 && track.scrollWidth < viewport + seqWidth * 2){
      const extra = firstList.cloneNode(true);
      extra.setAttribute('aria-hidden','true');
      track.appendChild(extra);
    }
    // start one sequence to the left so motion can travel left -> right seamlessly
    if(seqWidth > 0 && offset === 0){
      offset = -seqWidth;
    }
  }

  let perfVisible=true, perfLastFrame=0;
  if('IntersectionObserver' in window){
    const perfObserver=new IntersectionObserver((entries)=>{
      perfVisible=!!entries[0]?.isIntersecting;
    },{rootMargin:'160px'});
    perfObserver.observe(root);
  }

  function animate(ts){
    if(!perfVisible || document.hidden){
      setTimeout(()=>requestAnimationFrame(animate),250);
      return;
    }
    if(ts-perfLastFrame < 32){
      requestAnimationFrame(animate);
      return;
    }
    perfLastFrame=ts;
    if(last === null) last = ts;
    const dt = Math.max(0, ts-last) / 1000;
    last = ts;

    const target = hovered ? 0 : speed;
    const easing = 1 - Math.exp(-dt / tau);
    velocity += (target - velocity) * easing;

    if(seqWidth > 0){
      offset += velocity * dt;
      if(offset >= 0) offset -= seqWidth;
      if(offset < -seqWidth) offset += seqWidth;
      track.style.transform = `translate3d(${offset}px,0,0)`;
    }

    requestAnimationFrame(animate);
  }

  root.addEventListener('mouseenter',()=>{ hovered = true; });
  root.addEventListener('mouseleave',()=>{ hovered = false; });
  window.addEventListener('resize',measure);

  const imgs = Array.from(root.querySelectorAll('img'));
  let remaining = imgs.length;
  const done = ()=>{ remaining--; if(remaining <= 0) measure(); };
  if(remaining === 0) measure();
  imgs.forEach(img=>{
    if(img.complete) done();
    else{
      img.addEventListener('load',done,{once:true});
      img.addEventListener('error',done,{once:true});
    }
  });

  measure();
  requestAnimationFrame(animate);
})();
</script>


<section id="anchor-about" class="contact-cta-section" aria-labelledby="contactCtaTitle">
  <div class="contact-cta-shell">
    <div class="contact-cta-card">
      <div class="contact-cta-content">
        <h2 id="contactCtaTitle">马上与我们建立联系</h2>
        <p>选择英伦云小，抢申英国顶级预备学校！</p>
        <form class="contact-cta-form">
          <div class="contact-cta-field">
            <input type="text" name="name" placeholder="姓名" aria-label="姓名">
          </div>
          <div class="contact-cta-field">
            <input type="text" name="age" placeholder="年龄" aria-label="年龄">
          </div>
          <div class="contact-cta-field">
            <input type="text" name="targetAge" placeholder="计划升学年龄" aria-label="计划升学年龄">
          </div>
          <div class="contact-cta-field">
            <input type="text" name="contact" placeholder="电话或微信" aria-label="电话或微信">
          </div>
          <button class="contact-cta-submit" type="submit">确认</button>
        </form>
      </div>
    </div>
  </div>
</section>


<script>
document.addEventListener('DOMContentLoaded', function () {
  const target = Array.from(document.querySelectorAll('button, a')).find(el => el.textContent.trim() === '预约英国私校综合能力测评');
  const input = Array.from(document.querySelectorAll('input')).find(el => (el.getAttribute('placeholder') || '').includes('请输入电话或微信'));
  if (target && input) target.style.setProperty('font-size', getComputedStyle(input).fontSize, 'important');
});
</script>

<style>
/* FINAL FIX — 气泡上下间距实际改为 20px，左右仍为 40px */
.not-ready-row{
  gap:40px !important;
}
.not-ready-row + .not-ready-row{
  margin-top:20px !important;
}
@media(max-width:900px){
  .not-ready-row{
    gap:40px !important;
  }
  .not-ready-row + .not-ready-row{
    margin-top:20px !important;
  }
}
</style>


<style>
.not-ready-row:first-child { transform: translateX(60px) !important; }
</style>

<style>
/* 三行气泡位置调整 */
.not-ready-row:nth-child(1){
  transform:translateX(140px) !important;
}
.not-ready-row:nth-child(2){
  transform:translateX(-80px) !important;
}
.not-ready-row:nth-child(3){
  transform:translateX(40px) !important;
}
</style>


<!-- Fixed consultation card -->
<div class="floating-consult-card" aria-label="低龄留学免费咨询">
  <div class="floating-consult-teacher-wrap">
    <img class="floating-consult-teacher" src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-35.webp" alt="顾问老师" decoding="async" loading="lazy">
  </div>
  <div class="floating-consult-copy">
    <div class="floating-consult-title">免费咨询</div>
    <div class="floating-consult-subtitle">制定低龄留学方案</div>
  </div>
  <div class="floating-consult-qr-wrap">
    <img class="floating-consult-qr" src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-36.webp" alt="咨询二维码" decoding="async" loading="lazy">
  </div>
  <div class="floating-consult-button">扫码获取私人定制</div>
</div>

<style>
/* 右侧固定悬浮咨询卡：小体积、自适应、不挤压页面布局 */
.floating-consult-card{
  position:fixed;
  right:clamp(12px,1.4vw,28px);
  top:50%;
  transform:translateY(-50%);
  z-index:9999;
  width:clamp(154px,11.5vw,190px);
  box-sizing:border-box;
  padding:12px 12px 14px;
  border-radius:22px;
  background:rgba(255,255,255,.94);
  border:1px solid rgba(34,87,130,.10);
  box-shadow:0 14px 40px rgba(31,69,103,.18);
  backdrop-filter:blur(14px);
  -webkit-backdrop-filter:blur(14px);
  text-align:center;
}
.floating-consult-teacher-wrap{
  width:100%;
  height:clamp(92px,8.5vw,128px);
  display:flex;
  align-items:flex-end;
  justify-content:center;
  overflow:hidden;
  margin:-28px auto 2px;
  pointer-events:none;
}
.floating-consult-teacher{
  display:block;
  width:auto;
  height:clamp(124px,11vw,164px);
  max-width:112%;
  object-fit:contain;
  object-position:center bottom;
}
.floating-consult-copy{
  margin:4px 0 10px;
  line-height:1.25;
}
.floating-consult-title{
  color:#173956;
  font-size:clamp(16px,1.15vw,20px);
  font-weight:800;
  letter-spacing:.02em;
}
.floating-consult-subtitle{
  margin-top:4px;
  color:#5d7183;
  font-size:clamp(11px,.76vw,13px);
  font-weight:500;
  white-space:nowrap;
}
.floating-consult-qr-wrap{
  width:clamp(92px,7.4vw,118px);
  aspect-ratio:1/1;
  margin:0 auto 10px;
  padding:5px;
  box-sizing:border-box;
  border-radius:12px;
  background:#fff;
}
.floating-consult-qr{
  width:100%;
  height:100%;
  display:block;
  object-fit:contain;
}
.floating-consult-button{
  width:100%;
  box-sizing:border-box;
  padding:9px 8px;
  border-radius:999px;
  background:#5FA6E8;
  color:#fff;
  font-size:clamp(11px,.76vw,13px);
  line-height:1.25;
  font-weight:700;
  white-space:nowrap;
  box-shadow:0 7px 16px rgba(95,166,232,.24);
}

/* 中等屏幕稍微缩小，避免遮挡网页主体 */
@media (max-width:1200px){
  .floating-consult-card{
    right:10px;
    width:148px;
    padding:10px 10px 12px;
    border-radius:18px;
  }
  .floating-consult-teacher-wrap{
    height:88px;
    margin-top:-22px;
  }
  .floating-consult-teacher{
    height:120px;
  }
  .floating-consult-qr-wrap{
    width:86px;
  }
}

/* 手机端缩成右下角小卡片，不占主要阅读区域 */
@media (max-width:768px){
  .floating-consult-card{
    top:auto;
    bottom:14px;
    right:10px;
    transform:none;
    width:128px;
    padding:9px 9px 10px;
    border-radius:16px;
  }
  .floating-consult-teacher-wrap{
    height:62px;
    margin-top:-20px;
  }
  .floating-consult-teacher{
    height:92px;
  }
  .floating-consult-title{
    font-size:14px;
  }
  .floating-consult-subtitle{
    font-size:10px;
  }
  .floating-consult-qr-wrap{
    width:70px;
    margin-bottom:7px;
    padding:4px;
  }
  .floating-consult-button{
    font-size:10px;
    padding:7px 5px;
  }
}
</style>


<style>
/* 顾问老师完整显示：避免头顶被裁切 */
.floating-consult-teacher-wrap{
  overflow:visible !important;
  height:clamp(120px,10vw,150px) !important;
  margin:-42px auto 4px !important;
}
.floating-consult-teacher{
  width:auto !important;
  height:clamp(142px,12vw,178px) !important;
  max-width:118% !important;
  object-fit:contain !important;
  object-position:center bottom !important;
}
@media (max-width:1200px){
  .floating-consult-teacher-wrap{
    overflow:visible !important;
    height:108px !important;
    margin-top:-34px !important;
  }
  .floating-consult-teacher{
    height:136px !important;
  }
}
@media (max-width:768px){
  .floating-consult-teacher-wrap{
    overflow:visible !important;
    height:78px !important;
    margin-top:-28px !important;
  }
  .floating-consult-teacher{
    height:106px !important;
  }
}
</style>


<!-- 右下角离线留言弹窗 -->
<div class="offline-chat-widget" aria-live="polite">
  <button class="offline-chat-launcher" type="button" aria-label="展开聊天" title="展开聊天">
    <svg viewBox="0 0 24 24" aria-hidden="true">
      <path d="M4 4h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2H9l-5 4v-4H4a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2Z"></path>
      <path d="M7 9h10M7 13h7"></path>
    </svg>
  </button>

  <section class="offline-chat-panel" aria-label="英伦云小官方留言" hidden>
    <button class="offline-chat-close" type="button" aria-label="关闭弹窗" title="关闭">
      <svg viewBox="0 0 24 24" aria-hidden="true">
        <path d="M6 6l12 12M18 6 6 18"></path>
      </svg>
    </button>

    <div class="offline-chat-head">
      <div class="offline-chat-avatar">
        <img src="http://ukyxx-bucket-curriculum.oss-cn-shanghai.aliyuncs.com/pcdata/yx/img/yx/image-37.webp" alt="顾问老师头像" decoding="async" loading="lazy">
      </div>
      <div class="offline-chat-brand">
        <div class="offline-chat-brand-name">英伦云小官方</div>
        <div class="offline-chat-status"><span></span> 当前离线</div>
      </div>
    </div>

    <div class="offline-chat-body">
      <p class="offline-chat-message">
        您好，当前客服已离线，您可以留下联系方式，工作人员会第一时间给予您回复！
      </p>

      <form class="offline-chat-form" onsubmit="return false;">
        <label>
          <span>姓名</span>
          <input type="text" name="name" placeholder="请输入您的姓名" autocomplete="name">
        </label>
        <label>
          <span>手机</span>
          <input type="tel" name="phone" placeholder="请输入您的手机号" autocomplete="tel">
        </label>
        <label>
          <span>留言内容</span>
          <textarea name="message" rows="3" placeholder="请输入您想咨询的内容"></textarea>
        </label>
        <button class="offline-chat-submit" type="submit">提交留言</button>
      </form>
    </div>
  </section>
</div>

<style>
/* 离线留言弹窗：固定右下角，不占页面布局 */
.offline-chat-widget{
  position:fixed;
  right:clamp(16px,1.6vw,28px);
  bottom:clamp(16px,1.8vw,28px);
  z-index:10020;
  font-family:inherit;
}
.offline-chat-panel{
  position:absolute;
  right:0;
  bottom:68px;
  width:clamp(290px,22vw,340px);
  background:#fff;
  border:1px solid rgba(32,77,112,.10);
  border-radius:22px;
  box-shadow:0 20px 60px rgba(22,57,88,.22);
  overflow:hidden;
  transform-origin:right bottom;
  animation:offlineChatIn .32s ease both;
}
.offline-chat-panel[hidden]{display:none !important;}
@keyframes offlineChatIn{
  from{opacity:0;transform:translateY(12px) scale(.97);}
  to{opacity:1;transform:translateY(0) scale(1);}
}
.offline-chat-head{
  display:flex;
  align-items:center;
  gap:12px;
  padding:18px 46px 16px 18px;
  background:linear-gradient(135deg,#eef7ff 0%,#ffffff 100%);
  border-bottom:1px solid rgba(32,77,112,.08);
}
.offline-chat-avatar{
  width:52px;
  height:52px;
  border-radius:50%;
  overflow:hidden;
  flex:0 0 auto;
  background:#eaf3fb;
  border:2px solid #fff;
  box-shadow:0 4px 12px rgba(39,88,129,.14);
}
.offline-chat-avatar img{
  width:100%;
  height:100%;
  display:block;
  object-fit:cover;
  object-position:center 18%;
}
.offline-chat-brand-name{
  color:#173956;
  font-size:16px;
  font-weight:800;
  line-height:1.25;
}
.offline-chat-status{
  display:flex;
  align-items:center;
  gap:6px;
  margin-top:5px;
  color:#8292a0;
  font-size:12px;
}
.offline-chat-status span{
  width:7px;
  height:7px;
  border-radius:50%;
  background:#aab5bf;
}
.offline-chat-close{
  position:absolute;
  top:13px;
  right:13px;
  width:30px;
  height:30px;
  padding:0;
  border:0;
  border-radius:50%;
  background:rgba(23,57,86,.06);
  cursor:pointer;
  display:grid;
  place-items:center;
  z-index:2;
  transition:.2s ease;
}
.offline-chat-close:hover{background:rgba(23,57,86,.11);}
.offline-chat-close svg{
  width:16px;
  height:16px;
  fill:none;
  stroke:#5f7385;
  stroke-width:1.8;
  stroke-linecap:round;
}
.offline-chat-body{padding:18px;}
.offline-chat-message{
  margin:0 0 16px;
  color:#435b6d;
  font-size:13px;
  line-height:1.7;
}
.offline-chat-form{
  display:grid;
  gap:11px;
}
.offline-chat-form label{
  display:grid;
  gap:6px;
}
.offline-chat-form label>span{
  color:#2e4b61;
  font-size:12px;
  font-weight:700;
}
.offline-chat-form input,
.offline-chat-form textarea{
  width:100%;
  box-sizing:border-box;
  border:1px solid #dfe8ef;
  border-radius:11px;
  background:#f8fbfd;
  padding:10px 11px;
  color:#20394d;
  font:inherit;
  font-size:13px;
  outline:none;
  resize:none;
  transition:.2s ease;
}
.offline-chat-form input:focus,
.offline-chat-form textarea:focus{
  border-color:#77b6ec;
  background:#fff;
  box-shadow:0 0 0 3px rgba(95,166,232,.12);
}
.offline-chat-form input::placeholder,
.offline-chat-form textarea::placeholder{color:#a4b1bc;}
.offline-chat-submit{
  margin-top:2px;
  border:0;
  border-radius:11px;
  background:#5FA6E8;
  color:#fff;
  min-height:42px;
  padding:10px 14px;
  font-size:14px;
  font-weight:800;
  cursor:pointer;
  box-shadow:0 7px 16px rgba(95,166,232,.22);
  transition:.2s ease;
}
.offline-chat-submit:hover{transform:translateY(-1px);}
.offline-chat-launcher{
  width:54px;
  height:54px;
  padding:0;
  border:0;
  border-radius:50%;
  background:#5FA6E8;
  color:#fff;
  display:grid;
  place-items:center;
  margin-left:auto;
  cursor:pointer;
  box-shadow:0 10px 24px rgba(52,114,169,.30);
  transition:.2s ease;
}
.offline-chat-launcher:hover{transform:translateY(-2px) scale(1.03);}
.offline-chat-launcher svg{
  width:24px;
  height:24px;
  fill:none;
  stroke:currentColor;
  stroke-width:1.8;
  stroke-linecap:round;
  stroke-linejoin:round;
}
@media(max-width:768px){
  .offline-chat-widget{
    right:10px;
    bottom:10px;
  }
  .offline-chat-panel{
    position:fixed;
    right:10px;
    bottom:72px;
    width:min(340px,calc(100vw - 20px));
    max-height:calc(100vh - 92px);
    overflow:auto;
    border-radius:18px;
  }
  .offline-chat-launcher{
    width:50px;
    height:50px;
  }
}
</style>

<script>
(function(){
  const panel = document.querySelector('.offline-chat-panel');
  const launcher = document.querySelector('.offline-chat-launcher');
  const closeBtn = document.querySelector('.offline-chat-close');
  if(!panel || !launcher || !closeBtn) return;

  const openPanel = () => {
    panel.hidden = false;
    launcher.setAttribute('aria-expanded','true');
  };
  const closePanel = () => {
    panel.hidden = true;
    launcher.setAttribute('aria-expanded','false');
  };

  launcher.setAttribute('aria-expanded','false');
  launcher.addEventListener('click', () => panel.hidden ? openPanel() : closePanel());
  closeBtn.addEventListener('click', closePanel);

  /* 打开网页后 3 秒内自动弹出 */
  window.setTimeout(openPanel, 2200);
})();
</script>

<script>
/* 离线留言：POST /leaveMessage/save，内容前自动拼接「云小」 */
(function(){
  var LEAVE_API = 'http://wlmini.soweredu.com/leaveMessage/save';
  var submitting = false;

  function showToast(opts){
    var wrap = document.getElementById('siteSubmitToastWrap');
    if(!wrap){
      wrap = document.createElement('div');
      wrap.id = 'siteSubmitToastWrap';
      wrap.className = 'site-submit-toast-wrap';
      wrap.setAttribute('aria-live','polite');
      document.body.appendChild(wrap);
    }
    var toast = document.createElement('div');
    toast.className = 'site-submit-toast';
    var iconBg = opts.error ? '#fdecec' : '#e7f8ef';
    var iconColor = opts.error ? '#e5484d' : '#20a464';
    var icon = opts.error ? '!' : '✓';
    toast.innerHTML =
      '<div class="site-submit-toast-icon" style="background:'+iconBg+';color:'+iconColor+'">'+icon+'</div>'+
      '<div><div class="site-submit-toast-title">'+(opts.title||'')+'</div>'+
      '<div class="site-submit-toast-text">'+(opts.text||'')+'</div></div>';
    wrap.appendChild(toast);
    setTimeout(function(){
      toast.classList.add('is-leaving');
      setTimeout(function(){ toast.remove(); }, 230);
    }, 3000);
  }

  function val(form, name){
    var el = form.querySelector('[name="'+name+'"]');
    return el && typeof el.value === 'string' ? el.value.trim() : '';
  }

  function buildPayload(form){
    var name = val(form, 'name');
    var phone = val(form, 'phone').replace(/[\s\-()]/g, '');
    var content = val(form, 'message');

    if(!phone){
      showToast({error:true, title:'提交失败', text:'请输入手机号'});
      return null;
    }
    if(!/^1\d{10}$/.test(phone)){
      showToast({error:true, title:'提交失败', text:'请输入正确的11位手机号码'});
      return null;
    }
    if(!content){
      showToast({error:true, title:'提交失败', text:'请输入留言内容'});
      return null;
    }

    /* 提交时自动在留言内容前拼接「云小」 */
    if(content.indexOf('云小') !== 0){
      content = '云小' + content;
    }

    var payload = { phone: phone, content: content };
    if(name) payload.name = name;
    return payload;
  }

  function handleLeaveSubmit(form){
    if(submitting) return;
    var payload = buildPayload(form);
    if(!payload) return;

    var btn = form.querySelector('.offline-chat-submit,button[type="submit"]');
    var oldText = btn ? btn.textContent : '';
    submitting = true;
    if(btn){
      btn.disabled = true;
      btn.classList.add('form-submit-loading');
      btn.textContent = '提交中...';
    }

    console.log('[prepAdmissions] leaveMessage payload', payload);
    fetch(LEAVE_API, {
      method: 'POST',
      headers: {'Content-Type': 'application/json'},
      body: JSON.stringify(payload)
    }).then(function(res){ return res.json(); })
      .then(function(res){
        console.log('[prepAdmissions] leaveMessage response', res);
        if(String(res.code) === '1000'){
          showToast({title:'提交成功', text:'工作人员将第一时间联系您。'});
          form.reset();
        }else{
          showToast({error:true, title:'提交失败', text: res.msg || '提交失败'});
        }
      })
      .catch(function(err){
        console.error('[prepAdmissions] leaveMessage error', err);
        showToast({error:true, title:'提交失败', text:'网络异常，请稍后重试'});
      })
      .then(function(){
        submitting = false;
        if(btn){
          btn.disabled = false;
          btn.classList.remove('form-submit-loading');
          btn.textContent = oldText;
        }
      });
  }

  document.addEventListener('submit', function(e){
    var form = e.target;
    if(!form || !form.classList || !form.classList.contains('offline-chat-form')) return;
    e.preventDefault();
    e.stopPropagation();
    if(typeof e.stopImmediatePropagation === 'function') e.stopImmediatePropagation();
    handleLeaveSubmit(form);
  }, true);

  document.addEventListener('click', function(e){
    var btn = e.target && e.target.closest ? e.target.closest('.offline-chat-submit') : null;
    if(!btn) return;
    var form = btn.closest('form.offline-chat-form');
    if(!form) return;
    e.preventDefault();
    e.stopPropagation();
    if(typeof e.stopImmediatePropagation === 'function') e.stopImmediatePropagation();
    handleLeaveSubmit(form);
  }, true);
})();

</script>


<style>
/* 离线留言弹窗改到左下角 */
.offline-chat-widget{
  left:clamp(16px,1.6vw,28px) !important;
  right:auto !important;
}
.offline-chat-panel{
  left:0 !important;
  right:auto !important;
  transform-origin:left bottom !important;
}
.offline-chat-launcher{
  margin-left:0 !important;
  margin-right:auto !important;
}
@media(max-width:768px){
  .offline-chat-widget{
    left:10px !important;
    right:auto !important;
  }
  .offline-chat-panel{
    left:10px !important;
    right:auto !important;
  }
}
</style>


<style>
/* 全站手机号错误提示 */
.phone-validation-error{
  display:block;
  margin-top:6px;
  color:#e5484d;
  font-size:12px;
  line-height:1.4;
  text-align:left;
}
input.phone-validation-invalid{
  border-color:#e5484d !important;
  box-shadow:0 0 0 3px rgba(229,72,77,.10) !important;
}
</style>

<script>
(function(){
  function isPhoneField(input){
    if(!input || input.tagName !== 'INPUT') return false;
    const haystack = [
      input.type || '',
      input.name || '',
      input.id || '',
      input.placeholder || '',
      input.getAttribute('aria-label') || ''
    ].join(' ').toLowerCase();

    if(/微信|wechat|weixin/.test(haystack)) return false;

    return input.type === 'tel' ||
      /手机|手机号|手机号码|联系电话|电话|phone|mobile|tel/.test(haystack);
  }

  function normalizePhone(value){
    return (value || '').replace(/[\s\-()]/g,'');
  }

  function validPhone(value){
    const v = normalizePhone(value);
    /* 中国大陆手机号：1 开头的 11 位号码，第二位 3-9 */
    return /^1[3-9]\d{9}$/.test(v);
  }

  function getErrorEl(input){
    let el = input.parentElement && input.parentElement.querySelector(':scope > .phone-validation-error');
    if(!el){
      el = document.createElement('span');
      el.className = 'phone-validation-error';
      el.setAttribute('role','alert');
      el.hidden = true;
      input.insertAdjacentElement('afterend', el);
    }
    return el;
  }

  function validatePhone(input, showEmptyError){
    if(!isPhoneField(input)) return true;

    const error = getErrorEl(input);
    const value = input.value.trim();
    let message = '';

    if(!value){
      if(showEmptyError) message = '请输入手机号码';
    }else if(!validPhone(value)){
      message = '请输入正确的11位手机号码';
    }

    const invalid = !!message;
    input.classList.toggle('phone-validation-invalid', invalid);
    input.setAttribute('aria-invalid', invalid ? 'true' : 'false');
    error.textContent = message;
    error.hidden = !invalid;
    return !invalid;
  }

  function bindPhone(input){
    if(input.dataset.phoneValidationBound === '1') return;
    input.dataset.phoneValidationBound = '1';
    input.setAttribute('inputmode','numeric');

    input.addEventListener('blur', function(){
      validatePhone(input, false);
    });
    input.addEventListener('input', function(){
      if(input.classList.contains('phone-validation-invalid')){
        validatePhone(input, false);
      }
    });
  }

  function bindAll(root){
    (root || document).querySelectorAll('input').forEach(function(input){
      if(isPhoneField(input)) bindPhone(input);
    });
  }

  function validateForm(form){
    let ok = true;
    form.querySelectorAll('input').forEach(function(input){
      if(isPhoneField(input) && !validatePhone(input, true)) ok = false;
    });
    return ok;
  }

  document.addEventListener('DOMContentLoaded', function(){
    bindAll(document);

    /* 所有表单提交前统一校验手机号 */
    document.querySelectorAll('form').forEach(function(form){
      form.addEventListener('submit', function(e){
        if(form.querySelector('[name="contact"]') && form.querySelector('[name="name"]') && form.querySelector('[name="age"]')){
          return;
        }
        if(!validateForm(form)){
          e.preventDefault();
          e.stopImmediatePropagation();
          const first = form.querySelector('input.phone-validation-invalid');
          if(first) first.focus();
        }
      }, true);
    });

    /* 兼容页面后续动态出现的手机号输入框 */
    const observer = new MutationObserver(function(mutations){
      mutations.forEach(function(m){
        m.addedNodes.forEach(function(node){
          if(node.nodeType !== 1) return;
          if(node.matches && node.matches('input') && isPhoneField(node)) bindPhone(node);
          if(node.querySelectorAll) bindAll(node);
        });
      });
    });
    observer.observe(document.body,{childList:true,subtree:true});
  });
})();
</script>


<style>
/* 全站表单提交反馈 Toast */
.site-submit-toast-wrap{
  position:fixed;
  top:24px;
  right:24px;
  z-index:20000;
  display:grid;
  gap:10px;
  pointer-events:none;
}
.site-submit-toast{
  width:min(340px,calc(100vw - 32px));
  box-sizing:border-box;
  display:flex;
  align-items:flex-start;
  gap:11px;
  padding:14px 16px;
  background:rgba(255,255,255,.96);
  border:1px solid rgba(25,75,108,.10);
  border-radius:16px;
  box-shadow:0 14px 40px rgba(23,57,86,.18);
  backdrop-filter:blur(14px);
  -webkit-backdrop-filter:blur(14px);
  animation:siteToastIn .28s ease both;
}
.site-submit-toast-icon{
  width:24px;height:24px;border-radius:50%;
  flex:0 0 24px;
  display:grid;place-items:center;
  background:#e7f8ef;color:#20a464;
  font-size:15px;font-weight:900;
}
.site-submit-toast-title{
  color:#173956;font-size:14px;font-weight:800;line-height:1.35;
}
.site-submit-toast-text{
  margin-top:2px;color:#64798a;font-size:12px;line-height:1.5;
}
.site-submit-toast.is-leaving{animation:siteToastOut .22s ease both;}
@keyframes siteToastIn{
  from{opacity:0;transform:translateY(-10px) scale(.98)}
  to{opacity:1;transform:none}
}
@keyframes siteToastOut{
  to{opacity:0;transform:translateY(-8px) scale(.98)}
}
.form-submit-loading{
  opacity:.78 !important;
  cursor:wait !important;
  pointer-events:none !important;
}
@media(max-width:768px){
  .site-submit-toast-wrap{top:12px;right:12px;left:12px}
  .site-submit-toast{width:100%}
}
</style>

<div class="site-submit-toast-wrap" id="siteSubmitToastWrap" aria-live="polite"></div>

<script>
(function(){
  var REGISTER_API = 'http://wlmini.soweredu.com/customer/webRegister';
  var isNext = true;

  function showToast(opts){
    var wrap=document.getElementById('siteSubmitToastWrap');
    if(!wrap){
      wrap=document.createElement('div');
      wrap.id='siteSubmitToastWrap';
      wrap.className='site-submit-toast-wrap';
      wrap.setAttribute('aria-live','polite');
      document.body.appendChild(wrap);
    }
    var toast=document.createElement('div');
    toast.className='site-submit-toast';
    var iconBg = opts.error ? '#fdecec' : '#e7f8ef';
    var iconColor = opts.error ? '#e5484d' : '#20a464';
    var icon = opts.error ? '!' : '✓';
    toast.innerHTML=
      '<div class="site-submit-toast-icon" style="background:'+iconBg+';color:'+iconColor+'">'+icon+'</div>'+
      '<div><div class="site-submit-toast-title">'+(opts.title||'')+'</div>'+
      '<div class="site-submit-toast-text">'+(opts.text||'')+'</div></div>';
    wrap.appendChild(toast);
    setTimeout(function(){
      toast.classList.add('is-leaving');
      setTimeout(function(){toast.remove()},230);
    },3000);
  }

  function showSuccessToast(){
    showToast({title:'提交成功', text:'工作人员将第一时间联系您。'});
  }

  function showErrorToast(msg){
    showToast({error:true, title:'提交失败', text: msg || '请稍后重试'});
  }

  function isRegisterForm(form){
    if(!form || form.tagName !== 'FORM') return false;
    if(form.classList.contains('offline-chat-form')) return false;
    var hasName = form.querySelector('[name="name"]');
    var hasAge = form.querySelector('[name="age"]');
    var hasSchoolAge = form.querySelector('[name="schoolAge"],[name="plan_age"],[name="targetAge"]');
    var hasContact = form.querySelector('[name="contact"]');
    return !!(hasName && hasAge && hasSchoolAge && hasContact);
  }

  function fieldValue(form, selectors){
    for(var i=0;i<selectors.length;i++){
      var el = form.querySelector(selectors[i]);
      if(el && typeof el.value === 'string') return el.value.trim();
    }
    return '';
  }

  /* 与 pages/index.tsx onCheckForm1 一致 */
  function onCheckForm(form){
    var payload = {
      systemType: 'yx',
      name: fieldValue(form, ['[name="name"]']),
      age: fieldValue(form, ['[name="age"]']),
      schoolAge: fieldValue(form, ['[name="schoolAge"]','[name="plan_age"]','[name="targetAge"]']),
      phone: fieldValue(form, ['[name="contact"]'])
    };

    if(!payload.name){
      showErrorToast('请输入姓名');
      return null;
    }
    if(!payload.age){
      showErrorToast('请输入年龄');
      return null;
    }
    if(!payload.schoolAge){
      showErrorToast('请输入计划升学年龄');
      return null;
    }
    if(!payload.phone){
      showErrorToast('请输入电话或微信');
      return null;
    }
    return payload;
  }

  /* 与 pages/index.tsx onWebRegister + api webRegister 一致 */
  function onWebRegister(payload){
    if(!isNext) return Promise.resolve(false);
    isNext = false;
    console.log('[prepAdmissions] webRegister payload', payload);
    return fetch(REGISTER_API, {
      method: 'POST',
      headers: {'Content-Type': 'application/json'},
      body: JSON.stringify(payload)
    }).then(function(res){
      return res.json();
    }).then(function(res){
      console.log('[prepAdmissions] webRegister response', res);
      if(String(res.code) === '1000'){
        showSuccessToast();
        return true;
      }
      showErrorToast(res.msg || '提交失败');
      return false;
    }).catch(function(err){
      console.error('[prepAdmissions] webRegister error', err);
      showErrorToast('网络异常，请稍后重试');
      return false;
    }).then(function(ok){
      isNext = true;
      return ok;
    });
  }

  function getSubmitButton(form){
    return form.querySelector('button[type="submit"],input[type="submit"],.timeline-booking-submit,.submit,.contact-cta-submit');
  }

  function setButtonBusy(btn, busy, oldText, oldValue){
    if(!btn) return;
    if(busy){
      btn.dataset.feedbackBusy='1';
      btn.classList.add('form-submit-loading');
      btn.disabled=true;
      if(btn.tagName==='INPUT') btn.value='提交中...';
      else btn.textContent='提交中...';
    }else{
      btn.disabled=false;
      btn.classList.remove('form-submit-loading');
      btn.dataset.feedbackBusy='0';
      if(btn.tagName==='INPUT') btn.value=oldValue;
      else btn.textContent=oldText;
    }
  }

  function handleRegisterSubmit(form){
    var payload = onCheckForm(form);
    if(!payload) return;

    var btn=getSubmitButton(form);
    if(btn && btn.dataset.feedbackBusy==='1') return;

    var oldText = btn && btn.tagName!=='INPUT' ? btn.textContent : '';
    var oldValue = btn && btn.tagName==='INPUT' ? btn.value : '';
    setButtonBusy(btn, true, oldText, oldValue);

    onWebRegister(payload).then(function(ok){
      if(ok) form.reset();
      setButtonBusy(btn, false, oldText, oldValue);
    });
  }

  /* 挂在 document 捕获阶段，优先于表单上的手机号校验拦截 */
  document.addEventListener('submit', function(e){
    var form = e.target;
    if(!isRegisterForm(form)) return;
    e.preventDefault();
    e.stopPropagation();
    if(typeof e.stopImmediatePropagation === 'function') e.stopImmediatePropagation();
    handleRegisterSubmit(form);
  }, true);

  /* 按钮点击兜底，避免个别浏览器未触发 submit */
  document.addEventListener('click', function(e){
    var btn = e.target && e.target.closest
      ? e.target.closest('button[type="submit"],input[type="submit"],.timeline-booking-submit,.submit,.contact-cta-submit')
      : null;
    if(!btn) return;
    var form = btn.closest('form');
    if(!isRegisterForm(form)) return;
    e.preventDefault();
    e.stopPropagation();
    if(typeof e.stopImmediatePropagation === 'function') e.stopImmediatePropagation();
    handleRegisterSubmit(form);
  }, true);

  console.log('[prepAdmissions] webRegister binder ready');
})();
</script>


<style>
/* 性能优化：屏幕外模块延迟绘制，不改变视觉尺寸 */
@supports (content-visibility:auto){
  .timeline-section,
  .timeline-booking,
  .entry-req-section,
  .admissions-process-section,
  .assessment-section,
  .not-ready-section,
  .resources-section,
  .success-stories-section,
  .contact-cta-section{
    content-visibility:auto;
    contain-intrinsic-size:900px;
  }
}
</style>


<style>
/* 第二轮性能优化：保留视觉效果，降低持续动画/GPU占用 */
#advantagesCircularDom .adv-card > img{
  opacity:1 !important;
}
#advantagesCircularDom .adv-card .adv-webgl{
  display:none !important;
}
/* 无限漂浮动画放慢，减少重绘频率感；离屏时自动暂停 */
.visual-float{animation-duration:8.8s !important;}
.entry-req-card.exam{animation-duration:8.6s !important;}
.entry-req-card.report{animation-duration:9.2s !important;}
.entry-req-card.course{animation-duration:8.9s !important;}
.timeline-booking-cloudkids{animation-duration:8.4s !important;}
.scroll-arrow{animation-duration:2.5s !important;}
.perf-animation-paused,
.perf-animation-paused *{
  animation-play-state:paused !important;
}
</style>
<script>
(function(){
  const selectors=[
    '.hero',
    '.entry-req-section',
    '.timeline-booking',
    '.not-ready-section'
  ];
  if(!('IntersectionObserver' in window)) return;
  const io=new IntersectionObserver((entries)=>{
    entries.forEach((entry)=>{
      entry.target.classList.toggle('perf-animation-paused',!entry.isIntersecting);
    });
  },{rootMargin:'160px'});
  selectors.forEach((s)=>{
    const el=document.querySelector(s);
    if(el) io.observe(el);
  });
})();
</script>


<style>
/* 修复性能优化中的 content-visibility 对越界视觉元素的裁切。
   这些模块本身有向容器外延伸的图片/卡片，因此不做内容裁切。 */
.timeline-booking,
.entry-req-section,
.admissions-process-section,
.assessment-section{
  content-visibility:visible !important;
  contain:none !important;
}

/* 云朵学生图必须允许完整显示在蓝色卡片上方 */
.timeline-booking{
  overflow:visible !important;
}
.timeline-booking-card{
  overflow:visible !important;
}
.timeline-booking-cloudkids{
  visibility:visible !important;
  clip-path:none !important;
}
</style>


<style>
/* ===== MOBILE ONLY: 首屏重新排版，桌面端完全不动 ===== */
@media (max-width: 768px){

  /* 首屏整体允许内容自然向下延展，避免主图/文案互相遮挡 */
  .hero{
    min-height:auto !important;
    height:auto !important;
    padding-bottom:0 !important;
    overflow:visible !important;
  }

  /* 顶部英文主标题：居中，并尽量撑满手机安全区域 */
  .mega{
    position:relative !important;
    left:auto !important;
    right:auto !important;
    top:auto !important;
    width:calc(100% - 32px) !important;
    max-width:none !important;
    margin:68px auto 0 !important;
    text-align:center !important;
    z-index:24 !important;
  }

  .mega-inner{
    width:100% !important;
    max-width:none !important;
    display:flex !important;
    justify-content:center !important;
    align-items:baseline !important;
    gap:0.08em !important;
    white-space:nowrap !important;
    transform:none !important;
    text-align:center !important;
  }

  .mega .prep,
  .mega .admissions{
    display:inline-block !important;
    font-size:clamp(70px, 17.5vw, 104px) !important;
    line-height:.9 !important;
    letter-spacing:-.04em !important;
  }

  /* 主图：居中、略微缩小，并脱离对文案的遮挡 */
  .visual-wrap{
    position:relative !important;
    left:auto !important;
    top:auto !important;
    width:92vw !important;
    max-width:520px !important;
    margin:18px auto 0 !important;
    transform:none !important;
    z-index:30 !important;
    pointer-events:none !important;
  }

  .visual-float{
    animation:none !important;
    transform:none !important;
  }

  .visual-img{
    width:100% !important;
    height:auto !important;
    display:block !important;
    object-fit:contain !important;
    filter:drop-shadow(0 16px 18px rgba(31,95,132,.10)) !important;
  }

  /* 云朵下方的原有文案改为居中堆叠显示 */
  .copy{
    position:relative !important;
    left:auto !important;
    right:auto !important;
    bottom:auto !important;
    top:auto !important;
    width:calc(100% - 48px) !important;
    max-width:520px !important;
    margin:18px auto 0 !important;
    transform:none !important;
    text-align:center !important;
    z-index:28 !important;
  }

  .copy .eyebrow{
    justify-content:center !important;
    text-align:center !important;
    margin-left:auto !important;
    margin-right:auto !important;
  }

  .copy h1,
  .copy h2,
  .copy .title,
  .copy p{
    text-align:center !important;
  }

  .copy p{
    margin-left:auto !important;
    margin-right:auto !important;
  }

  /* 右侧 4–17 信息也改为居中，不再与主图叠在一起 */
  .side-info{
    position:relative !important;
    left:auto !important;
    right:auto !important;
    bottom:auto !important;
    top:auto !important;
    width:calc(100% - 48px) !important;
    max-width:520px !important;
    margin:18px auto 26px !important;
    transform:none !important;
    text-align:center !important;
    z-index:28 !important;
  }

  .side-info *{
    text-align:center !important;
  }

  /* 白色表单区回到正常文档流，排在文案之后 */
  .form-zone{
    position:relative !important;
    left:auto !important;
    right:auto !important;
    top:auto !important;
    bottom:auto !important;
    width:100% !important;
    margin:0 !important;
    transform:none !important;
    z-index:20 !important;
  }

  /* 手机端不再使用桌面端计算出来的首屏高度变量 */
  .stage{
    min-height:auto !important;
    height:auto !important;
    padding-bottom:0 !important;
  }
}
</style>


<style>
/* ===== MOBILE ONLY refinement: remove top white gap, center/lower mega title, remove translucent copy background ===== */
@media (max-width: 768px){

  /* 顶部不留白 */
  html, body{
    margin:0 !important;
    padding:0 !important;
  }
  .hero,
  .stage{
    margin-top:0 !important;
    padding-top:0 !important;
  }

  /* 顶部英文大字母：居中并下移，避开 logo / 电话 */
  .mega{
    width:calc(100% - 28px) !important;
    margin:112px auto 0 !important;
    padding:0 !important;
    text-align:center !important;
  }
  .mega-inner{
    width:100% !important;
    justify-content:center !important;
    text-align:center !important;
    transform:none !important;
  }
  .mega .prep,
  .mega .admissions{
    font-size:clamp(66px,16.8vw,98px) !important;
    line-height:.88 !important;
  }

  /* 云朵与人物稍微留一点呼吸距离 */
  .visual-wrap{
    margin-top:26px !important;
  }

  /* 主文案区域取消半透明浅色底，保持原文案 */
  .copy{
    background:transparent !important;
    box-shadow:none !important;
    border:none !important;
    backdrop-filter:none !important;
    -webkit-backdrop-filter:none !important;
    border-radius:0 !important;
    padding-left:0 !important;
    padding-right:0 !important;
  }
  .copy::before,
  .copy::after{
    display:none !important;
    content:none !important;
  }
}
</style>


<style>
/* ===== MOBILE ONLY — precise hero fix. Desktop/Web remains untouched. ===== */
@media (max-width:768px){

  /* 1) 修复顶部大块白色留白：
     不再让首个流式元素的 margin 向父级折叠，hero 从屏幕最顶部开始。 */
  html,body,.page{
    margin:0 !important;
    padding:0 !important;
  }
  body,.page{
    background:#2D7DD3 !important;
  }
  .hero{
    margin:0 !important;
    padding:0 !important;
    background:linear-gradient(180deg,#2D7DD3 0%,#A6D1FF 100%) !important;
    overflow:hidden !important;
  }
  .stage{
    position:relative !important;
    width:100% !important;
    max-width:none !important;
    margin:0 !important;
    padding:205px 0 0 !important;
    box-sizing:border-box !important;
    min-height:0 !important;
    height:auto !important;
  }

  /* 2) Logo / 电话固定在最上方安全区，不受大标题影响 */
  .nav{
    top:0 !important;
    height:82px !important;
    z-index:100 !important;
  }
  .nav-inner{
    width:calc(100% - 30px) !important;
    margin:0 auto !important;
  }

  /* 3) PREP ADMISSIONS：真正居中，并整体下移到 Logo 下方 */
  .mega{
    position:absolute !important;
    top:104px !important;
    left:50% !important;
    right:auto !important;
    width:calc(100% - 30px) !important;
    max-width:none !important;
    margin:0 !important;
    padding:0 !important;
    transform:translateX(-50%) !important;
    display:flex !important;
    justify-content:center !important;
    align-items:flex-start !important;
    overflow:visible !important;
    text-align:center !important;
    z-index:20 !important;
  }
  .mega-inner{
    display:inline-flex !important;
    width:max-content !important;
    max-width:none !important;
    gap:18px !important;
    align-items:flex-start !important;
    justify-content:center !important;
    white-space:nowrap !important;
    transform-origin:center top !important;
  }
  .mega span,
  .mega .prep,
  .mega .admissions{
    display:inline-block !important;
    font-size:96px !important;
    line-height:.82 !important;
    letter-spacing:-3px !important;
    transform:none !important;
    transform-origin:center top !important;
  }

  /* 4) 主图：大标题下方居中、略微缩小，不再压住正文 */
  .visual-wrap{
    position:relative !important;
    top:auto !important;
    left:auto !important;
    right:auto !important;
    width:90vw !important;
    max-width:500px !important;
    margin:0 auto !important;
    transform:none !important;
    z-index:30 !important;
  }
  .visual-float{
    transform:none !important;
  }
  .visual-img{
    width:100% !important;
    height:auto !important;
    object-fit:contain !important;
  }

  /* 5) 原主文案放到云朵下方居中，并彻底去掉浅色透明底 */
  .hero .stage > .copy{
    position:relative !important;
    top:auto !important;
    bottom:auto !important;
    left:auto !important;
    right:auto !important;
    width:calc(100% - 44px) !important;
    max-width:520px !important;
    margin:22px auto 28px !important;
    padding:0 !important;
    transform:none !important;

    background:none !important;
    background-color:transparent !important;
    background-image:none !important;
    border:0 !important;
    border-radius:0 !important;
    box-shadow:none !important;
    backdrop-filter:none !important;
    -webkit-backdrop-filter:none !important;

    color:#fff !important;
    text-align:center !important;
    z-index:32 !important;
  }
  .hero .stage > .copy::before,
  .hero .stage > .copy::after{
    content:none !important;
    display:none !important;
    background:none !important;
  }
  .hero .stage > .copy .eyebrow{
    display:flex !important;
    justify-content:center !important;
    align-items:center !important;
    width:100% !important;
    margin:0 auto 14px !important;
    text-align:center !important;
  }
  .hero .stage > .copy h1{
    margin:0 !important;
    text-align:center !important;
  }
  .hero .stage > .copy p{
    max-width:520px !important;
    margin:20px auto 0 !important;
    text-align:center !important;
  }

  /* 手机端保留原本隐藏逻辑，不动桌面端的 4–17 区域 */
  .side-info{
    display:none !important;
  }

  /* 表单紧接正文，不再叠压 */
  .form-zone{
    position:relative !important;
    top:auto !important;
    bottom:auto !important;
    left:auto !important;
    right:auto !important;
    width:100% !important;
    margin:0 !important;
    transform:none !important;
  }
}
</style>

<script>
/* 手机端单独精确计算 PREP ADMISSIONS 宽度。
   使用 important inline 覆盖旧版 fitMegaTitle，保证完整、居中、不裁切。 */
(function(){
  function fitMobileMega(){
    if(window.innerWidth>768) return;
    const inner=document.querySelector('.mega-inner');
    const mega=document.querySelector('.mega');
    if(!inner||!mega) return;

    inner.style.setProperty('transform','none','important');
    const natural=inner.scrollWidth;
    const available=Math.max(1,mega.clientWidth);
    const scale=Math.min(1,available/natural);
    inner.style.setProperty('transform','scale('+scale+')','important');
    inner.style.setProperty('transform-origin','center top','important');
  }
  if(document.fonts&&document.fonts.ready){
    document.fonts.ready.then(fitMobileMega);
  }
  window.addEventListener('load',fitMobileMega);
  window.addEventListener('resize',fitMobileMega);
  setTimeout(fitMobileMega,50);
})();
</script>


<style>
/* ===== MOBILE ONLY — 按用户指令重新调整，桌面端完全不动 ===== */
@media (max-width:768px){

  /* 1. 顶部 PREP ADMISSIONS：只向上 10px */
  .mega{
    top:94px !important;
  }

  /* 2. 主图 + 下方整组文案作为一个整体向上 50px
        不再分别给文案/表单加负 margin，避免文案拆散错位 */
  .visual-wrap{
    transform:translateY(-50px) !important;
  }

  .hero .stage > .copy{
    transform:translateY(-50px) !important;
    margin-top:22px !important;
    margin-bottom:28px !important;
  }

  /* 3. 保证说明文案完整在主标题下方，不被白色表单吃掉 */
  .hero .stage > .copy p{
    display:block !important;
    position:relative !important;
    margin:20px auto 0 !important;
    max-width:520px !important;
    text-align:center !important;
    line-height:1.65 !important;
    z-index:2 !important;
  }

  /* 4. 白色表单不再单独上移，跟随正常文档流 */
  .form-zone{
    margin-top:0 !important;
    transform:none !important;
  }
}
</style>


<style>
/* MOBILE ONLY：主图 + 下方整组文案在当前版本基础上再向上 40px */
@media (max-width:768px){
  .visual-wrap{
    transform:translateY(-90px) !important;
  }

  .hero .stage > .copy{
    transform:translateY(-90px) !important;
  }
}
</style>


<style>
/* MOBILE ONLY：两层建筑背景重新独立定位；桌面端完全不动 */
@media (max-width:768px){

  /* 两层都以首屏中心线为基准，避免自适应高度变化后左右错位 */
  .hero .landmark-silhouette,
  .hero .landmark-outline{
    position:absolute !important;
    left:50% !important;
    right:auto !important;
    top:auto !important;
    margin:0 !important;
    transform:translateX(-50%) !important;
    transform-origin:center bottom !important;
    pointer-events:none !important;
  }

  /* 底层建筑剪影：居中铺开 */
  .hero .landmark-silhouette{
    width:155% !important;
    bottom:0 !important;
    z-index:1 !important;
  }

  /* 上层建筑线稿：居中，底部贴近下方白色模块交界处 */
  .hero .landmark-outline{
    width:120% !important;
    bottom:4px !important;
    z-index:9 !important;
  }

  .hero .landmark-silhouette img,
  .hero .landmark-outline img{
    display:block !important;
    width:100% !important;
    height:auto !important;
    margin:0 auto !important;
  }
}
</style>


<style>
/* MOBILE ONLY：修正建筑背景被白色表单遮住的问题 */
@media (max-width:768px){
  .hero .landmark-silhouette,
  .hero .landmark-outline{
    left:50% !important;
    right:auto !important;
    top:auto !important;
    margin:0 !important;
    transform:translateX(-50%) !important;
    visibility:visible !important;
    opacity:1 !important;
  }

  /* 底层建筑剪影：位于白色模块上方蓝色区域，水平居中 */
  .hero .landmark-silhouette{
    width:155% !important;
    bottom:185px !important;
    z-index:1 !important;
  }

  /* 上层线稿：底边紧靠白色模块顶部，水平居中 */
  .hero .landmark-outline{
    width:120% !important;
    bottom:180px !important;
    z-index:9 !important;
  }

  .hero .landmark-silhouette img,
  .hero .landmark-outline img{
    display:block !important;
    width:100% !important;
    height:auto !important;
    visibility:visible !important;
    opacity:1 !important;
  }
}
</style>


<style>
/* MOBILE ONLY：两层建筑在当前可见位置基础上整体上移 120px */
@media (max-width:768px){
  .hero .landmark-silhouette{
    bottom:305px !important; /* 185 + 120 */
  }
  .hero .landmark-outline{
    bottom:300px !important; /* 180 + 120 */
  }
}
</style>


<style>
/* MOBILE ONLY：两层建筑在上一版基础上再整体上移 150px */
@media (max-width:768px){
  .hero .landmark-silhouette{
    bottom:455px !important; /* 305 + 150 */
  }
  .hero .landmark-outline{
    bottom:450px !important; /* 300 + 150 */
  }
}
</style>


<style>
@media (max-width:768px){
  .hero .stage > .copy .eyebrow::before{
    display:none !important;
    content:none !important;
  }
}
</style>


<style>
/* MOBILE ONLY：修复入学关键节点英文标题和圆圈被裁切的问题；Web端不变 */
@media (max-width:768px){

  .timeline-section{
    overflow:visible !important;
  }

  .timeline-shell{
    width:calc(100% - 30px) !important;
    overflow:visible !important;
  }

  /* 英文标题完整显示，避免 Anton 字体顶部被裁 */
  .timeline-head,
  .timeline-head-en{
    overflow:visible !important;
  }
  .timeline-head-en{
    display:block !important;
    width:100% !important;
    max-width:100% !important;
    padding-top:8px !important;
    line-height:1.12 !important;
    box-sizing:border-box !important;
    white-space:normal !important;
  }

  /* 5 个节点在手机屏内完整显示，不再让左右圆圈被横向裁掉 */
  .timeline-track{
    display:grid !important;
    grid-template-columns:repeat(5,minmax(0,1fr)) !important;
    gap:8px !important;
    width:100% !important;
    max-width:100% !important;
    overflow:visible !important;
    padding:0 0 10px !important;
  }

  .timeline-item{
    min-width:0 !important;
    width:100% !important;
  }

  .timeline-orb{
    width:min(72px,100%) !important;
    max-width:72px !important;
    margin:0 auto 14px !important;
    box-sizing:border-box !important;
  }

  .timeline-age{
    font-size:42px !important;
    letter-spacing:-1px !important;
  }
}
</style>


<style>
/* MOBILE ONLY：修正综合能力测评模块；Web端不变 */
@media (max-width:768px){

  /* 去掉这块外围多出来的蓝色底，恢复白色页面背景 */
  .timeline-booking{
    width:100% !important;
    box-sizing:border-box !important;
    padding-left:15px !important;
    padding-right:15px !important;
    margin:-18px auto 0 !important;
    background:#fff !important;
  }

  /* 保留原本蓝色圆角表单卡片 */
  .timeline-booking-card{
    width:100% !important;
    box-sizing:border-box !important;
  }

  /* 云朵学生图整体上移，避开标题文字 */
  .timeline-booking-cloudkids{
    top:-140px !important;
    right:-1% !important;
  }
}
</style>


<style>
/* MOBILE ONLY：按用户指令调整综合能力测评模块；Web端不变 */
@media (max-width:768px){

  /* 上面一句文案：20px */
  .timeline-booking-title{
    font-size:20px !important;
  }

  /* 下方“如何提前做好准备？”保持原有层级，不跟着缩小 */
  .timeline-booking-title .booking-question{
    font-size:clamp(24px,6.8vw,32px) !important;
  }

  /* 云朵学生图在上一版基础上向下移动40px：-140px → -100px */
  .timeline-booking-cloudkids{
    top:-100px !important;
  }
}
</style>


<style>
/* MOBILE ONLY：修复蓝色表单底部被黄色按钮穿出的问题；Web端不变 */
@media (max-width:768px){
  .timeline-booking{
    padding-bottom:0 !important;
    margin-bottom:90px !important;
  }

  .timeline-booking-card{
    padding-bottom:28px !important;
    overflow:visible !important;
  }

  .timeline-booking-form{
    padding-bottom:0 !important;
  }

  .timeline-booking-submit{
    position:relative !important;
    bottom:auto !important;
    margin-bottom:0 !important;
    transform:none !important;
  }
}
</style>


<style>
/* MOBILE ONLY：去掉蓝色表单卡片下方多出来的蓝色横条；Web端不变 */
@media (max-width:768px){
  .timeline-booking{
    background:transparent !important;
    margin-bottom:90px !important;
    padding-bottom:0 !important;
  }

  /* 外层页面在卡片结束后立即恢复白色 */
  .timeline-booking::before,
  .timeline-booking::after{
    content:none !important;
    display:none !important;
  }

  .timeline-booking-card{
    margin-bottom:0 !important;
  }
}
</style>


<style>
/* MOBILE ONLY：修复表单卡片外围错误蓝底；Web端不变 */
@media (max-width:768px){
  html,
  body,
  .page{
    background:#fff !important;
  }

  /* 首屏自身继续保留原蓝色渐变 */
  .hero{
    background:linear-gradient(180deg,#2D7DD3 0%,#A6D1FF 100%) !important;
  }

  /* 预约模块外围必须是透明/白底，只有圆角卡片本身是蓝色 */
  .timeline-booking{
    background:transparent !important;
  }
  .timeline-booking-card{
    background:#5FA6E8 !important;
  }
}
</style>


<style>
/* MOBILE ONLY：英国私校入学条件的3个气泡框保持 Web 端悬浮构图；文字允许折行 */
@media (max-width:760px){
  .entry-req-stage{
    position:relative !important;
    display:block !important;
    aspect-ratio:1916 / 1178 !important;
    min-height:0 !important;
    padding:0 !important;
    overflow:visible !important;
  }

  .entry-req-stage::before{
    width:38.83% !important;
    height:auto !important;
    aspect-ratio:1/1 !important;
    left:48.90% !important;
    top:56% !important;
  }

  .entry-req-person{
    position:absolute !important;
    left:49.25% !important;
    bottom:7.85% !important;
    width:45.5% !important;
    height:69.5% !important;
    transform:translateX(-50%) !important;
    margin:0 !important;
  }

  .entry-req-card,
  .entry-req-card.exam,
  .entry-req-card.report,
  .entry-req-card.course{
    position:absolute !important;
    width:31% !important;
    height:auto !important;
    min-height:84px !important;
    padding:14px 16px !important;
    border-radius:20px !important;
    box-sizing:border-box !important;
    display:flex !important;
    flex-direction:column !important;
    justify-content:center !important;
    overflow:visible !important;
  }

  .entry-req-card.exam{
    left:3% !important;
    right:auto !important;
    top:36% !important;
    bottom:auto !important;
  }
  .entry-req-card.report{
    left:49% !important;
    right:auto !important;
    top:6% !important;
    bottom:auto !important;
  }
  .entry-req-card.course{
    left:66% !important;
    right:auto !important;
    top:43% !important;
    bottom:auto !important;
  }

  .entry-req-card h3{
    margin:0 0 7px !important;
    font-size:16px !important;
    line-height:1.2 !important;
    white-space:normal !important;
    overflow-wrap:anywhere !important;
  }
  .entry-req-card p{
    margin:0 !important;
    font-size:13px !important;
    line-height:1.5 !important;
    white-space:normal !important;
    overflow-wrap:anywhere !important;
    word-break:normal !important;
  }

  .entry-req-stage::after{
    left:5.74% !important;
    right:6.05% !important;
    bottom:7.73% !important;
    height:2.35% !important;
  }
}
</style>


<style>
/* ===== MOBILE ONLY：重新整理“英国私校入学条件”模块，Web端不动 ===== */
@media (max-width:760px){

  /* 给人物 + 三个气泡足够的真实高度，不再被下一模块盖住 */
  .entry-req-stage{
    position:relative !important;
    display:block !important;
    width:100% !important;
    aspect-ratio:auto !important;
    height:650px !important;
    min-height:650px !important;
    padding:0 !important;
    overflow:visible !important;
    transform:translateY(-100px) !important;
    margin-bottom:-70px !important;
  }

  /* 中央浅蓝圆 */
  .entry-req-stage::before{
    width:300px !important;
    height:300px !important;
    aspect-ratio:1 / 1 !important;
    left:50% !important;
    top:315px !important;
    transform:translate(-50%,-50%) !important;
  }

  /* 中央人物完整展示 */
  .entry-req-person{
    position:absolute !important;
    left:50% !important;
    bottom:42px !important;
    width:310px !important;
    height:430px !important;
    transform:translateX(-50%) !important;
    margin:0 !important;
    z-index:2 !important;
  }

  /* 三个气泡都按 Web 端逻辑悬浮在人物周围 */
  .entry-req-card,
  .entry-req-card.exam,
  .entry-req-card.report,
  .entry-req-card.course{
    position:absolute !important;
    width:42% !important;
    height:auto !important;
    min-height:116px !important;
    padding:16px 18px !important;
    border-radius:22px !important;
    display:flex !important;
    flex-direction:column !important;
    justify-content:center !important;
    box-sizing:border-box !important;
    z-index:4 !important;
    overflow:visible !important;
  }

  /* 蓝色：左侧 */
  .entry-req-card.exam{
    left:2% !important;
    right:auto !important;
    top:255px !important;
    bottom:auto !important;
  }

  /* 粉色：右上 */
  .entry-req-card.report{
    left:auto !important;
    right:3% !important;
    top:72px !important;
    bottom:auto !important;
  }

  /* 黄色：右下 */
  .entry-req-card.course{
    left:auto !important;
    right:1% !important;
    top:360px !important;
    bottom:auto !important;
  }

  .entry-req-card h3{
    margin:0 0 8px !important;
    font-size:18px !important;
    line-height:1.25 !important;
    white-space:normal !important;
    word-break:break-word !important;
  }

  .entry-req-card p{
    margin:0 !important;
    font-size:14px !important;
    line-height:1.55 !important;
    white-space:normal !important;
    word-break:break-word !important;
    overflow-wrap:anywhere !important;
  }

  /* 移动端不保留这条底部蓝线，避免和下一模块打架 */
  .entry-req-stage::after{
    display:none !important;
  }

  /* 移动端取消 Web 端的向上覆盖关系：下一模块必须从该模块之后开始 */
  .admissions-process-section{
    transform:none !important;
    margin-top:0 !important;
    margin-bottom:0 !important;
    position:relative !important;
    z-index:10 !important;
  }
}
</style>


<style>
/* ===== MOBILE ONLY：压缩“英国私校入学条件”视觉组，Web端不动 ===== */
@media (max-width:760px){

  /* 整体高度压缩，减少人物下方大面积留白 */
  .entry-req-stage{
    height:520px !important;
    min-height:520px !important;
    margin-bottom:-20px !important;
  }

  /* 浅蓝圆缩小并稍微上移 */
  .entry-req-stage::before{
    width:260px !important;
    height:260px !important;
    top:275px !important;
  }

  /* 人物整体上移并略微缩小 */
  .entry-req-person{
    bottom:18px !important;
    width:285px !important;
    height:390px !important;
  }

  /* 三个气泡整体收拢 */
  .entry-req-card,
  .entry-req-card.exam,
  .entry-req-card.report,
  .entry-req-card.course{
    width:40% !important;
    min-height:102px !important;
    padding:14px 16px !important;
    border-radius:20px !important;
  }

  /* 蓝色：左中，更贴近人物 */
  .entry-req-card.exam{
    left:3% !important;
    top:215px !important;
  }

  /* 粉色：右上，更靠近人物头部 */
  .entry-req-card.report{
    right:4% !important;
    top:48px !important;
  }

  /* 黄色：右中下，收回到人物附近 */
  .entry-req-card.course{
    right:2% !important;
    top:300px !important;
  }

  .entry-req-card h3{
    font-size:17px !important;
    margin-bottom:6px !important;
  }

  .entry-req-card p{
    font-size:13px !important;
    line-height:1.45 !important;
  }

  /* 下一模块紧接当前视觉组，不再留下大白块 */
  .admissions-process-section{
    margin-top:0 !important;
  }
}
</style>


<style>
/* MOBILE ONLY：真正修复入学条件模块的位置与底部大留白；Web端不变 */
@media (max-width:760px){

  /* 原来 translateY(-100px) 只是视觉上移，但仍占原位置，所以底部留下大白块。
     改为负 margin，让整个模块在文档流里真实上移。 */
  .entry-req-stage{
    transform:none !important;
    margin-top:-100px !important;
    margin-bottom:0 !important;
    height:520px !important;
    min-height:520px !important;
  }

  /* 去掉该 section 手机端多余的底部 90px 留白 */
  .entry-req-section{
    padding-bottom:0 !important;
  }

  /* 下一模块直接衔接，不再额外位移 */
  .admissions-process-section{
    transform:none !important;
    margin-top:0 !important;
    margin-bottom:0 !important;
  }
}
</style>


<style>
/* MOBILE ONLY：人物 + 浅蓝圆 + 3个气泡作为一个视觉组整体下移50px；Web端不变 */
@media (max-width:760px){
  .entry-req-stage::before{
    transform:translate(-50%, calc(-50% + 50px)) !important;
  }

  .entry-req-person{
    transform:translate(-50%, 50px) !important;
  }

  .entry-req-card.exam,
  .entry-req-card.report,
  .entry-req-card.course{
    transform:translateY(50px) !important;
  }

  /* 给整体下移后的视觉内容补足空间，避免被下一模块裁掉 */
  .entry-req-stage{
    height:570px !important;
    min-height:570px !important;
  }
}
</style>


<style>
/* MOBILE ONLY：按当前版本继续微调；Web端不变 */
@media (max-width:760px){
  /* 浅蓝色圆圈：在当前基础上再向下 80px */
  .entry-req-stage::before{
    transform:translate(-50%, calc(-50% + 130px)) !important;
  }

  /* 粉色“私校标准化报告”框：在当前基础上再向下 50px */
  .entry-req-card.report{
    transform:translateY(100px) !important;
  }
}
</style>


<style>
/* MOBILE ONLY — 当前版本基础上继续调整，Web端完全不变 */
@media (max-width:760px){

  /* 粉色“私校标准化报告”框：当前基础上再向下 40px */
  .entry-req-card.report{
    transform:translateY(140px) !important;
  }

  /* 下方 Admissions Process 蓝色圆角模块：整体向下 60px */
  .admissions-process-section{
    transform:translateY(60px) !important;
    margin-bottom:60px !important;
  }
}
</style>


<style>
/* MOBILE ONLY：人物 + 浅蓝圆 + 蓝/粉/黄三个气泡整体上移80px；Web端不变 */
@media (max-width:760px){
  .entry-req-stage::before{
    transform:translate(-50%, calc(-50% + 50px)) !important;
  }

  .entry-req-person{
    transform:translate(-50%, -30px) !important;
  }

  .entry-req-card.exam,
  .entry-req-card.course{
    transform:translateY(-30px) !important;
  }

  .entry-req-card.report{
    transform:translateY(60px) !important;
  }

  /* 收回上一版为了下移视觉组增加的80px高度，避免底部产生空白 */
  .entry-req-stage{
    height:490px !important;
    min-height:490px !important;
  }
}
</style>


<style>
/* MOBILE ONLY：消除中间白色空档；Admissions Process 及后续整体上移，覆盖女孩底部10px */
@media (max-width:760px){

  /* 上一版这里还有 transform:translateY(60px)，先彻底取消 */
  .admissions-process-section{
    transform:none !important;

    /* 当前 entry visual stage 高度为490px，而视觉组已上移80px。
       将下一模块真实拉回文档流，避免只视觉移动后留下空白。 */
    margin-top:-210px !important;
    margin-bottom:0 !important;
    position:relative !important;
    z-index:8 !important;
  }

  /* 蓝色模块压在女孩最底部上方，形成约10px视觉覆盖 */
  .entry-req-section{
    padding-bottom:0 !important;
  }
}
</style>


<style>
/* MOBILE ONLY：精确把 Admissions Process 顶部调到仅遮住女孩约10px；Web端不变 */
@media (max-width:760px){
  .admissions-process-section{
    transform:none !important;
    margin-top:-58px !important;
    margin-bottom:0 !important;
    position:relative !important;
    z-index:8 !important;
  }
}
</style>


<style>
/* MOBILE ONLY：根据当前截图校正，蓝色 Admissions Process 顶部只压住女孩底部约10px；Web端不变 */
@media (max-width:760px){
  .admissions-process-section{
    transform:none !important;
    margin-top:-123px !important; /* 当前 -58px 基础上再上移约65px：消除约55px空隙 + 覆盖10px */
    margin-bottom:0 !important;
    position:relative !important;
    z-index:8 !important;
  }
}
</style>


<style>
/* MOBILE ONLY：压缩 Admissions Process 5个白色卡片高度；Web端不变 */
@media (max-width:760px){

  /* 5张白色步骤卡取消桌面端固定/最小高度，让高度由内容决定 */
  .process-card,
  .process-step,
  .admissions-process-card,
  .admissions-step{
    height:auto !important;
    min-height:0 !important;
  }

  /* 当前页面实际使用的步骤卡 */
  .process-step{
    padding-top:28px !important;
    padding-bottom:28px !important;
  }

  /* 如果实际卡片由列表项承载，同步压缩手机端垂直内边距 */
  .admissions-process-section .process-card,
  .admissions-process-section .process-step,
  .admissions-process-section .admissions-process-card,
  .admissions-process-section .admissions-step{
    height:auto !important;
    min-height:0 !important;
    padding-top:28px !important;
    padding-bottom:28px !important;
    box-sizing:border-box !important;
  }
}
</style>


<style>
/* MOBILE ONLY：下方气泡文案模块全部居中展示；Web端不变 */
@media (max-width:760px){

  .not-ready-bubbles{
    width:100% !important;
    display:flex !important;
    flex-direction:column !important;
    align-items:center !important;
    justify-content:center !important;
    gap:20px !important;
    overflow:visible !important;
  }

  /* 所有气泡取消 Web 端左右错位/位移 */
  .not-ready-bubble,
  .not-ready-bubbles > *{
    position:relative !important;
    left:auto !important;
    right:auto !important;
    margin-left:auto !important;
    margin-right:auto !important;
    transform:none !important;
    max-width:calc(100% - 40px) !important;
    box-sizing:border-box !important;
  }

  /* 气泡内文字也居中 */
  .not-ready-bubble,
  .not-ready-bubble p,
  .not-ready-bubbles > *{
    text-align:center !important;
  }
}
</style>


<style>
/* ===== MOBILE ONLY：真正把 6 个气泡逐行居中；Web端不变 ===== */
@media (max-width:760px){

  .not-ready-bubbles{
    width:100% !important;
    max-width:100% !important;
    margin-left:auto !important;
    margin-right:auto !important;
    overflow:visible !important;
    display:block !important;
    padding:0 !important;
  }

  /* 关键：原来真正错位的是三行 row 的 transform */
  .not-ready-row,
  .not-ready-row.row-1,
  .not-ready-row.row-2,
  .not-ready-row.row-3{
    width:100% !important;
    max-width:100% !important;
    margin:20px auto 0 !important;
    padding:0 !important;
    display:flex !important;
    flex-direction:column !important;
    align-items:center !important;
    justify-content:center !important;
    gap:20px !important;
    transform:none !important;
    left:auto !important;
    right:auto !important;
  }

  .not-ready-row:first-child{
    margin-top:0 !important;
  }

  /* 每一个气泡都在手机安全宽度内水平居中，长文字自动换行 */
  .not-ready-bubble,
  .not-ready-row .not-ready-bubble,
  .not-ready-bubble:nth-child(n){
    position:relative !important;
    left:auto !important;
    right:auto !important;
    top:auto !important;
    bottom:auto !important;
    transform:none !important;
    margin:0 auto !important;
    width:calc(100% - 30px) !important;
    max-width:760px !important;
    min-width:0 !important;
    height:auto !important;
    min-height:70px !important;
    padding:18px 24px !important;
    box-sizing:border-box !important;
    white-space:normal !important;
    overflow-wrap:anywhere !important;
    word-break:normal !important;
    text-align:center !important;
    justify-content:center !important;
  }

  /* 动画激活时只放大，不改变居中位置 */
  .not-ready-bubble.is-active{
    transform:scale(1.04) !important;
  }
}
</style>


<style>
/* ===== MOBILE ONLY：气泡与文字自适应缩小；Web端完全不变 ===== */
@media (max-width:760px){
  .not-ready-bubbles{
    gap:0 !important;
  }

  .not-ready-row,
  .not-ready-row.row-1,
  .not-ready-row.row-2,
  .not-ready-row.row-3{
    gap:14px !important;
    margin-top:14px !important;
  }

  .not-ready-row:first-child{
    margin-top:0 !important;
  }

  .not-ready-bubble,
  .not-ready-row .not-ready-bubble,
  .not-ready-bubble:nth-child(n){
    width:calc(100% - 54px) !important;
    max-width:680px !important;
    min-height:56px !important;
    padding:13px 20px !important;
    border-radius:20px !important;
    font-size:clamp(13px, 3.6vw, 16px) !important;
    line-height:1.45 !important;
    white-space:normal !important;
    text-align:center !important;
  }

  .not-ready-bubble.is-active{
    transform:scale(1.035) !important;
  }
}

@media (max-width:430px){
  .not-ready-bubble,
  .not-ready-row .not-ready-bubble,
  .not-ready-bubble:nth-child(n){
    width:calc(100% - 36px) !important;
    min-height:52px !important;
    padding:12px 16px !important;
    border-radius:18px !important;
    font-size:clamp(12px, 3.55vw, 15px) !important;
  }
}
</style>


<style>
/* ===== MOBILE ONLY：气泡和文字继续缩小，并随手机宽度自适应；Web端不变 ===== */
@media (max-width:760px){

  .not-ready-row,
  .not-ready-row.row-1,
  .not-ready-row.row-2,
  .not-ready-row.row-3{
    gap:12px !important;
    margin-top:12px !important;
  }

  .not-ready-row:first-child{
    margin-top:0 !important;
  }

  .not-ready-bubble,
  .not-ready-row .not-ready-bubble,
  .not-ready-bubble:nth-child(n){
    width:84vw !important;
    max-width:620px !important;
    min-height:48px !important;
    padding:10px 16px !important;
    border-radius:16px !important;

    /* 真正按手机视口缩放：375px屏约11px，430px屏约12.5px，最大14px */
    font-size:clamp(11px, 2.9vw, 14px) !important;
    line-height:1.42 !important;

    white-space:normal !important;
    overflow-wrap:break-word !important;
    word-break:normal !important;
    text-align:center !important;
  }

  .not-ready-bubble.is-active{
    transform:scale(1.025) !important;
  }
}

/* 更窄手机进一步收小 */
@media (max-width:430px){
  .not-ready-bubble,
  .not-ready-row .not-ready-bubble,
  .not-ready-bubble:nth-child(n){
    width:88vw !important;
    min-height:46px !important;
    padding:9px 14px !important;
    border-radius:15px !important;
    font-size:clamp(10.5px, 3vw, 13px) !important;
  }
}
</style>


<style>
/* MOBILE ONLY：气泡长度重新由文字内容决定；保持居中与自适应小字号；Web端不变 */
@media (max-width:760px){
  .not-ready-bubble,
  .not-ready-row .not-ready-bubble,
  .not-ready-bubble:nth-child(n){
    width:fit-content !important;
    max-width:88vw !important;
    min-width:0 !important;
    margin-left:auto !important;
    margin-right:auto !important;
    padding:10px 22px !important;
    box-sizing:border-box !important;
    white-space:normal !important;
    overflow-wrap:break-word !important;
    text-align:center !important;
  }
}

@media (max-width:430px){
  .not-ready-bubble,
  .not-ready-row .not-ready-bubble,
  .not-ready-bubble:nth-child(n){
    width:fit-content !important;
    max-width:90vw !important;
    padding:9px 18px !important;
  }
}
</style>


<style>
/* MOBILE ONLY：修复首屏白色表单下半部分被下一模块覆盖；Web端不变 */
@media (max-width:768px){

  /* 原因：more-content 仍继承 Web 端 margin-top:-100px + 更高 z-index，
     在手机端向上盖住了表单底部。手机端取消这个重叠。 */
  .more-content{
    margin-top:0 !important;
    position:relative !important;
    z-index:1 !important;
  }

  /* 表单完整按内容撑开，不设截断高度 */
  .form-zone{
    height:auto !important;
    min-height:0 !important;
    overflow:visible !important;
    padding-bottom:28px !important;
    position:relative !important;
    z-index:20 !important;
  }

  .form-inner,
  .inline-form{
    height:auto !important;
    overflow:visible !important;
  }

  /* 手机端保持单列，让最后一个输入框和按钮完整显示 */
  .inline-form{
    grid-template-columns:1fr !important;
  }

  .submit{
    grid-column:auto !important;
    position:relative !important;
    margin-top:0 !important;
  }

  /* 首屏容器允许表单真实高度参与排版 */
  .stage{
    overflow:visible !important;
  }
}
</style>


<style>
/* ===== MOBILE ONLY 2026-09-10：建筑双层 + 下方白色表单整体上移50px ===== */
@media (max-width:768px){
  .landmark-silhouette,
  .landmark-outline{
    transform:translate(-50%, calc(-100% - 50px)) !important;
  }

  .form-zone{
    transform:translateY(-50px) !important;
    margin-bottom:-50px !important;
  }

  /* 手机端指定副文案断句：前半句第一行，“找我们就够了”第二行 */
  .hero .stage > .copy p{
    text-align:center !important;
  }
  .hero-mobile-break{
    display:block !important;
  }
}
</style>

<script>
/* 仅手机端为“找我们就够了”增加强制换行；不改变文案，不影响 Web 端 */
(function(){
  function applyMobileHeroBreak(){
    var p = document.querySelector('.hero .stage > .copy p');
    if(!p) return;

    if(window.innerWidth <= 768){
      if(!p.dataset.mobileBreakApplied){
        p.dataset.originalHtml = p.innerHTML;
        var html = p.innerHTML;
        html = html.replace(/找我们就够了/g, '<span class="hero-mobile-break">找我们就够了</span>');
        p.innerHTML = html;
        p.dataset.mobileBreakApplied = '1';
      }
    }else if(p.dataset.mobileBreakApplied){
      p.innerHTML = p.dataset.originalHtml || p.innerHTML;
      delete p.dataset.mobileBreakApplied;
    }
  }

  document.addEventListener('DOMContentLoaded', applyMobileHeroBreak);
  window.addEventListener('resize', applyMobileHeroBreak);
  applyMobileHeroBreak();
})();
</script>


<style>
/* MOBILE ONLY：预约测评模块标题字号；Web端不变 */
@media (max-width:768px){
  .timeline-booking-title{
    font-size:16px !important;
    line-height:1.55 !important;
  }

  .timeline-booking-title .booking-question{
    display:block !important;
    font-size:20px !important;
    line-height:1.4 !important;
    margin-top:10px !important;
  }
}
</style>


<style>
/* MOBILE ONLY：Admissions Process 蓝色模块上下留白压缩；Web端不变 */
@media (max-width:760px){
  .admissions-process-section{
    /* 原始顶部 92px → 减少40px */
    padding-top:52px !important;

    /* 原始底部 100px → 减少80px */
    padding-bottom:20px !important;
  }
}
</style>


<style>
/* MOBILE ONLY：右侧咨询卡默认收起，点击展开；Web端不变 */
@media (max-width:768px){
  .floating-consult-card{
    top:50% !important;
    right:0 !important;
    width:54px !important;
    height:116px !important;
    padding:0 !important;
    border-radius:18px 0 0 18px !important;
    overflow:hidden !important;
    transform:translateY(-50%) !important;
    transition:width .28s ease,height .28s ease,padding .28s ease,border-radius .28s ease !important;
    cursor:pointer !important;
  }

  .floating-consult-card:not(.mobile-expanded) > *{
    opacity:0 !important;
    pointer-events:none !important;
  }

  .floating-consult-card:not(.mobile-expanded)::after{
    content:"免费咨询";
    position:absolute;
    inset:0;
    display:flex;
    align-items:center;
    justify-content:center;
    padding:10px 14px;
    box-sizing:border-box;
    color:#173B5A;
    font-size:15px;
    font-weight:800;
    line-height:1.25;
    writing-mode:vertical-rl;
    letter-spacing:2px;
    opacity:1;
  }

  .floating-consult-card.mobile-expanded{
    width:min(190px,52vw) !important;
    height:auto !important;
    padding:12px 12px 14px !important;
    border-radius:22px 0 0 22px !important;
    overflow:visible !important;
  }

  .floating-consult-card.mobile-expanded > *{
    opacity:1 !important;
    pointer-events:auto !important;
    transition:opacity .18s ease .12s !important;
  }

  .floating-consult-card.mobile-expanded::after{
    content:"‹";
    position:absolute;
    left:-28px;
    top:50%;
    width:28px;
    height:54px;
    transform:translateY(-50%);
    display:flex;
    align-items:center;
    justify-content:center;
    border-radius:14px 0 0 14px;
    background:rgba(255,255,255,.96);
    color:#173B5A;
    font-size:26px;
    font-weight:700;
    box-shadow:-6px 6px 18px rgba(31,69,103,.10);
  }
}
</style>


<script>
/* MOBILE ONLY：点击咨询卡展开/收起 */
(function(){
  function initMobileConsultCollapse(){
    const card=document.querySelector('.floating-consult-card');
    if(!card || card.dataset.mobileCollapseReady==='1') return;
    card.dataset.mobileCollapseReady='1';

    card.addEventListener('click',function(e){
      if(window.innerWidth>768) return;
      if(!card.classList.contains('mobile-expanded')){
        e.preventDefault();
        e.stopPropagation();
        card.classList.add('mobile-expanded');
        return;
      }
      /* 展开后点击左侧收起箭头区域或卡片空白处可收起；
         二维码/按钮等原内容仍可正常交互 */
      const r=card.getBoundingClientRect();
      if(e.clientX < r.left + 18){
        e.preventDefault();
        card.classList.remove('mobile-expanded');
      }
    });

    document.addEventListener('click',function(e){
      if(window.innerWidth<=768 && card.classList.contains('mobile-expanded') && !card.contains(e.target)){
        card.classList.remove('mobile-expanded');
      }
    });
  }
  if(document.readyState==='loading'){
    document.addEventListener('DOMContentLoaded',initMobileConsultCollapse);
  }else{
    initMobileConsultCollapse();
  }
})();
</script>


<style>
/* MOBILE ONLY：收起可以变小，但展开后恢复原本手机端完整卡片尺寸与样式；Web端不变 */
@media (max-width:768px){

  /* 展开状态：恢复原手机端完整卡片，不拉成长条、不撑满页面 */
  .floating-consult-card.mobile-expanded{
    top:auto !important;
    bottom:14px !important;
    right:10px !important;
    transform:none !important;

    width:128px !important;
    height:auto !important;
    padding:9px 9px 10px !important;
    border-radius:16px !important;
    overflow:visible !important;
    cursor:default !important;
  }

  .floating-consult-card.mobile-expanded .floating-consult-teacher-wrap{
    width:100% !important;
    height:78px !important;
    margin:-28px auto 4px !important;
    overflow:visible !important;
  }

  .floating-consult-card.mobile-expanded .floating-consult-teacher{
    width:auto !important;
    height:106px !important;
    max-width:118% !important;
  }

  .floating-consult-card.mobile-expanded .floating-consult-title{
    font-size:14px !important;
  }

  .floating-consult-card.mobile-expanded .floating-consult-subtitle{
    font-size:10px !important;
  }

  .floating-consult-card.mobile-expanded .floating-consult-qr-wrap{
    width:70px !important;
    margin:0 auto 7px !important;
    padding:4px !important;
  }

  .floating-consult-card.mobile-expanded .floating-consult-button{
    font-size:10px !important;
    padding:7px 5px !important;
  }

  /* 展开后的收起按钮做成独立小箭头，不改变卡片本体尺寸 */
  .floating-consult-card.mobile-expanded::after{
    content:"‹" !important;
    position:absolute !important;
    left:-30px !important;
    top:50% !important;
    width:30px !important;
    height:52px !important;
    transform:translateY(-50%) !important;
    display:flex !important;
    align-items:center !important;
    justify-content:center !important;
    border-radius:14px 0 0 14px !important;
    background:rgba(255,255,255,.96) !important;
    color:#173B5A !important;
    font-size:25px !important;
    font-weight:700 !important;
    writing-mode:horizontal-tb !important;
    letter-spacing:0 !important;
    box-shadow:-5px 5px 16px rgba(31,69,103,.10) !important;
  }
}
</style>


<style>
/* ===== Floating anchor navigation ===== */
.section-anchor-nav{
  position:fixed;
  left:50%;
  top:18px;
  z-index:9998;
  transform:translate(-50%,-22px);
  opacity:0;
  visibility:hidden;
  pointer-events:none;
  transition:
    opacity .24s ease,
    transform .28s cubic-bezier(.2,.7,.2,1),
    visibility .24s ease;
}

.section-anchor-nav.is-visible{
  transform:translate(-50%,0);
  opacity:1;
  visibility:visible;
  pointer-events:auto;
}

.section-anchor-nav__inner{
  display:flex;
  align-items:center;
  gap:4px;
  padding:6px;
  border-radius:999px;
  background:rgba(255,255,255,.88);
  border:1px solid rgba(23,57,86,.08);
  box-shadow:0 10px 34px rgba(25,67,101,.14);
  backdrop-filter:blur(16px);
  -webkit-backdrop-filter:blur(16px);
  white-space:nowrap;
}

.section-anchor-nav a{
  display:flex;
  align-items:center;
  justify-content:center;
  min-height:34px;
  padding:0 15px;
  border-radius:999px;
  color:#49677f;
  text-decoration:none;
  font-size:13px;
  line-height:1;
  font-weight:700;
  transition:background .2s ease,color .2s ease,transform .2s ease;
}

.section-anchor-nav a:hover{
  color:#173956;
  background:rgba(95,166,232,.12);
}

.section-anchor-nav a.is-active{
  color:#fff;
  background:#5FA6E8;
  box-shadow:0 5px 14px rgba(95,166,232,.22);
}

/* anchor landing offset so headings are not hidden behind the floating nav */
#anchor-advantages,
#anchor-timeline,
#anchor-entry,
#anchor-process,
#anchor-assessment,
#anchor-parent-policy,
#anchor-about{
  scroll-margin-top:86px;
}

@media(max-width:900px){
  .section-anchor-nav{
    top:10px;
    width:calc(100% - 20px);
    max-width:none;
  }
  .section-anchor-nav__inner{
    width:100%;
    box-sizing:border-box;
    overflow-x:auto;
    justify-content:flex-start;
    padding:5px;
    scrollbar-width:none;
    border-radius:18px;
  }
  .section-anchor-nav__inner::-webkit-scrollbar{
    display:none;
  }
  .section-anchor-nav a{
    flex:0 0 auto;
    min-height:32px;
    padding:0 12px;
    font-size:12px;
  }
  #anchor-advantages,
  #anchor-timeline,
  #anchor-entry,
  #anchor-process,
  #anchor-assessment,
  #anchor-parent-policy,
  #anchor-about{
    scroll-margin-top:68px;
  }
}
</style>


<script>
(function(){
  const nav = document.getElementById('sectionAnchorNav');
  if(!nav) return;

  const links = Array.from(nav.querySelectorAll('a[data-anchor]'));
  const sections = links
    .map(link => document.getElementById(link.dataset.anchor))
    .filter(Boolean);

  let lastY = window.scrollY || 0;
  let ticking = false;
  let navClickLock = false;

  function setActive(){
    const probe = window.innerHeight * 0.28;
    let current = sections[0] || null;

    sections.forEach(section => {
      const r = section.getBoundingClientRect();
      if(r.top <= probe) current = section;
    });

    links.forEach(link => {
      link.classList.toggle('is-active', current && link.dataset.anchor === current.id);
    });

    const active = nav.querySelector('a.is-active');
    if(active && window.innerWidth <= 900){
      active.scrollIntoView({behavior:'smooth', block:'nearest', inline:'center'});
    }
  }

  function onScroll(){
    if(ticking) return;
    ticking = true;

    requestAnimationFrame(() => {
      const y = window.scrollY || document.documentElement.scrollTop || 0;
      const delta = y - lastY;

      /* Initial page remains hidden. Show only when user is actually scrolling downward. */
      if(y < 120){
        nav.classList.remove('is-visible');
      }else if(!navClickLock){
        if(delta > 3){
          nav.classList.add('is-visible');
        }else if(delta < -3){
          nav.classList.remove('is-visible');
        }
      }

      setActive();
      lastY = y;
      ticking = false;
    });
  }

  links.forEach(link => {
    link.addEventListener('click', function(e){
      const target = document.getElementById(this.dataset.anchor);
      if(!target) return;

      e.preventDefault();
      navClickLock = true;
      nav.classList.add('is-visible');

      target.scrollIntoView({behavior:'smooth', block:'start'});

      links.forEach(a => a.classList.toggle('is-active', a === this));

      window.setTimeout(() => {
        navClickLock = false;
        lastY = window.scrollY || 0;
      }, 700);
    });
  });

  /* Hidden on initial load regardless of remembered scroll position until the user scrolls down. */
  nav.classList.remove('is-visible');
  setActive();

  window.addEventListener('scroll', onScroll, {passive:true});
  window.addEventListener('resize', setActive);
})();
</script>

</body>
</html>
