/* =========================================================
   Moodswimming — Guest Theme
   Palette: yellow #ffcc01 · blue #02cbff · deep #08cafc
   Cheerful / playful / interactive. Bootstrap 5 + custom.
   ========================================================= */

:root {
  --ms-yellow: #ffcc01;
  --ms-yellow-soft: #ffe066;
  --ms-yellow-tint: #fff6d6;
  --ms-blue: #02cbff;
  --ms-blue-deep: #08cafc;
  --ms-navy: #123a63;
  --ms-navy-deep: #0d2c4d;
  --ms-ink: #143b5e;
  --ms-cream: #fff9e9;
  --ms-white: #ffffff;
  --ms-muted: #5b7690;

  --ms-radius: 22px;
  --ms-radius-lg: 34px;
  --ms-shadow: 0 18px 45px -20px rgba(18, 58, 99, .45);
  --ms-shadow-soft: 0 12px 30px -18px rgba(2, 203, 255, .5);
  --ms-font-head: 'Baloo 2', 'Segoe UI', system-ui, sans-serif;
  --ms-font-body: 'Nunito', 'Segoe UI', system-ui, sans-serif;
}

* { scroll-behavior: smooth; }

/* overflow-x on <body> alone propagates to the viewport and never actually clips,
   so any wide child (Bootstrap .g-5 row margins, AOS parked transforms) stretches
   the layout and drags the fixed navbar off-screen. Setting it on <html> too makes
   <body> clip its own children for real. */
html { overflow-x: hidden; }

body {
  font-family: var(--ms-font-body);
  color: var(--ms-ink);
  background: var(--ms-cream);
  overflow-x: hidden;
}

h1, h2, h3, h4, h5, .display-1, .display-2, .display-3, .display-4 {
  font-family: var(--ms-font-head);
  font-weight: 800;
  color: var(--ms-navy);
  letter-spacing: -.5px;
}

a { text-decoration: none; }
::selection { background: var(--ms-yellow); color: var(--ms-navy); }

/* ---------- Utility text ---------- */
.text-yellow { color: var(--ms-yellow) !important; }
.text-blue   { color: var(--ms-blue) !important; }
.text-navy   { color: var(--ms-navy) !important; }
.text-muted-soft { color: var(--ms-muted) !important; }
.fw-black { font-weight: 900 !important; }

.text-gradient {
  background: linear-gradient(100deg, var(--ms-blue) 0%, var(--ms-navy) 60%);
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
}
.highlight-yellow {
  position: relative;
  display: inline-block;
  z-index: 0;
}
.highlight-yellow::after {
  content: "";
  position: absolute;
  left: -.15em; right: -.15em; bottom: .05em;
  height: .42em;
  background: var(--ms-yellow);
  border-radius: 999px;
  z-index: -1;
  transform: rotate(-1.5deg);
  opacity: .85;
}

/* ---------- Backgrounds ---------- */
.bg-cream  { background: var(--ms-cream) !important; }
.bg-yellow-tint { background: var(--ms-yellow-tint) !important; }
.bg-sky {
  background: linear-gradient(180deg, #e8faff 0%, #ffffff 100%) !important;
}
.section-navy {
  background: radial-gradient(120% 120% at 20% 0%, #1b4d7e 0%, var(--ms-navy-deep) 70%);
  color: #eaf4ff;
}
.section-navy h1, .section-navy h2, .section-navy h3, .section-navy h4 { color: #fff; }

.section { padding: 96px 0; position: relative; }
.section-sm { padding: 64px 0; position: relative; }
@media (max-width: 767px){ .section{ padding:64px 0;} .section-sm{padding:44px 0;} }

/* ---------- Buttons ---------- */
.btn { font-family: var(--ms-font-head); font-weight: 700; border-radius: 999px; padding: .72rem 1.7rem; transition: transform .18s ease, box-shadow .18s ease, background .18s ease; }
.btn:active { transform: scale(.96); }

.btn-sun {
  background: var(--ms-yellow);
  color: var(--ms-navy);
  box-shadow: 0 10px 22px -8px rgba(255, 204, 1, .8);
  border: none;
}
.btn-sun:hover { background: #ffd733; color: var(--ms-navy); transform: translateY(-3px); box-shadow: 0 16px 28px -8px rgba(255, 204, 1, .9); }

.btn-wave {
  background: var(--ms-blue);
  color: #fff;
  border: none;
  box-shadow: 0 10px 22px -8px rgba(2, 203, 255, .8);
}
.btn-wave:hover { background: var(--ms-blue-deep); color: #fff; transform: translateY(-3px); }

.btn-outline-navy {
  border: 2px solid var(--ms-navy);
  color: var(--ms-navy);
  background: transparent;
}
.btn-outline-navy:hover { background: var(--ms-navy); color: #fff; transform: translateY(-3px); }

.btn-ghost-light { border: 2px solid rgba(255,255,255,.6); color:#fff; }
.btn-ghost-light:hover { background:#fff; color: var(--ms-navy); }

/* ---------- Navbar ---------- */
.ms-navbar {
  transition: background .3s ease, box-shadow .3s ease, padding .3s ease;
  padding: .9rem 0;
  background: transparent;
}
.ms-navbar.scrolled {
  background: rgba(255, 249, 233, .92);
  backdrop-filter: blur(10px);
  box-shadow: 0 8px 30px -18px rgba(18,58,99,.5);
  padding: .55rem 0;
}
.ms-navbar .navbar-brand img { height: 64px; width: auto; }
.ms-navbar .nav-link {
  font-family: var(--ms-font-head);
  font-weight: 700;
  color: var(--ms-navy) !important;
  margin: 0 .35rem;
  position: relative;
}
.ms-navbar .nav-link::after {
  content:""; position:absolute; left:.6rem; right:.6rem; bottom:.3rem; height:3px;
  background: var(--ms-yellow); border-radius:99px; transform: scaleX(0); transform-origin:left;
  transition: transform .25s ease;
}
.ms-navbar .nav-link:hover::after, .ms-navbar .nav-link.active::after { transform: scaleX(1); }
.navbar-toggler { border:none; }
.navbar-toggler:focus { box-shadow:none; }

/* ---------- Hero ---------- */
.hero {
  position: relative;
  padding: 160px 0 120px;
  background: linear-gradient(180deg, var(--ms-yellow-tint) 0%, #fffdf5 55%, #eafaff 100%);
  overflow: hidden;
}
.hero-ghost-word {
  position: absolute;
  top: 96px; left: 50%; transform: translateX(-50%);
  font-family: var(--ms-font-head);
  font-weight: 900;
  font-size: clamp(4rem, 16vw, 15rem);
  color: rgba(2, 203, 255, .08);
  letter-spacing: 4px;
  white-space: nowrap;
  pointer-events: none;
  user-select: none;
  z-index: 0;
}
.hero .container { position: relative; z-index: 3; }
.hero-badge {
  display:inline-flex; align-items:center; gap:.5rem;
  background:#fff; color: var(--ms-navy);
  border-radius:999px; padding:.4rem 1rem; font-weight:700;
  box-shadow: var(--ms-shadow-soft); font-family: var(--ms-font-head);
}
.hero h1 { font-size: clamp(2.4rem, 5.4vw, 4.4rem); line-height: 1.02; }
.hero-lead { font-size: 1.15rem; color: var(--ms-muted); max-width: 34rem; }

/* Hero art blob */
.hero-blob { position: relative; }
.hero-blob .blob-bg {
  position:absolute; inset:-6% -4%;
  background: radial-gradient(circle at 30% 30%, var(--ms-blue) 0%, var(--ms-blue-deep) 60%, #0aa6e0 100%);
  border-radius: 46% 54% 55% 45% / 52% 44% 56% 48%;
  animation: blobMorph 12s ease-in-out infinite;
  box-shadow: var(--ms-shadow);
}
@keyframes blobMorph {
  0%,100% { border-radius: 46% 54% 55% 45% / 52% 44% 56% 48%; }
  33% { border-radius: 58% 42% 40% 60% / 45% 58% 42% 55%; }
  66% { border-radius: 42% 58% 62% 38% / 60% 42% 58% 40%; }
}

/* Hero video (animation) — morphing blob shape, like the original art */
.hero-media {
  position: relative;
  max-width: 460px;
  aspect-ratio: 1 / 1;
  margin-inline: auto;
}
.hero-media .hero-video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  background: var(--ms-blue-soft, #eaf8ff);
  box-shadow: var(--ms-shadow);
  /* Bentuk blob dibuat STATIS. Border-radius TIDAK boleh dianimasikan di
     elemen <video>: Firefox me-repaint layer video tiap frame sehingga
     background biru menyembul di sela repaint -> tampak "kedip" (Chromium tak
     kena karena video tetap di tekstur GPU). Hanya transform (floatY) yang
     dianimasikan karena ramah-GPU & tak memicu repaint video. */
  border-radius: 46% 54% 55% 45% / 52% 44% 56% 48%;
  animation: floatY 6s ease-in-out infinite;
  transform: translateZ(0);
  will-change: transform;
  backface-visibility: hidden;
}
@media (max-width: 991.98px) {
  .hero-media { max-width: 380px; margin-top: .5rem; }
}
@media (max-width: 767.98px) {
  .hero .col-lg-6:last-child {
    display: none;
  }
}

/* ---------- Floating vector shapes ---------- */
.floaty { position:absolute; pointer-events:none; z-index:1; opacity:.9; }
.float-slow  { animation: floatY 7s ease-in-out infinite; }
.float-med   { animation: floatY 5s ease-in-out infinite; }
.float-fast  { animation: floatY 3.6s ease-in-out infinite; }
.spin-slow   { animation: spin 22s linear infinite; }
@keyframes floatY { 0%,100%{ transform: translateY(0) rotate(0);} 50%{ transform: translateY(-22px) rotate(4deg);} }
@keyframes spin { to { transform: rotate(360deg);} }

/* bubbles rising */
.bubbles { position:absolute; inset:0; overflow:hidden; pointer-events:none; z-index:1; }
.bubble {
  position:absolute; bottom:-40px; border-radius:50%;
  background: radial-gradient(circle at 30% 30%, rgba(255,255,255,.9), rgba(2,203,255,.35));
  border: 1px solid rgba(255,255,255,.6);
  animation: rise linear infinite;
}
@keyframes rise {
  0% { transform: translateY(0) translateX(0) scale(.7); opacity:0; }
  10% { opacity:.9; }
  90% { opacity:.7; }
  100% { transform: translateY(-115vh) translateX(30px) scale(1.1); opacity:0; }
}

/* ---------- Wave dividers ---------- */
.wave-divider { line-height:0; display:block; }
.wave-divider svg { width:100%; height:auto; display:block; }

/* ---------- Cards ---------- */
.ms-card {
  background:#fff;
  border-radius: var(--ms-radius);
  box-shadow: var(--ms-shadow);
  border: 1px solid rgba(2,203,255,.08);
  padding: 1.6rem;
  /* JANGAN pakai height:100% di sini. Kolom Bootstrap adalah flex item yang
     di-stretch, sehingga height:100% jadi tinggi definit dan kartu tunggal
     ikut meregang setinggi kolom (bug kotak putih raksasa di halaman booking).
     Untuk kartu grid yang perlu tinggi seragam, pakai utility .h-100. */
  transition: transform .25s ease, box-shadow .25s ease;
  position: relative;
  overflow: hidden;
}
.ms-card:hover { transform: translateY(-8px); box-shadow: 0 26px 55px -22px rgba(18,58,99,.5); }
.ms-card .card-icon {
  width: 60px; height:60px; border-radius: 18px;
  display:grid; place-items:center; margin-bottom:1rem;
  background: var(--ms-yellow-tint); color: var(--ms-navy);
}

/* course card */
.course-card { display:flex; flex-direction:column; }
.course-thumb {
  height: 150px; border-radius: 18px; margin-bottom: 1rem;
  display:grid; place-items:center; color:#fff; position:relative; overflow:hidden;
}
.course-thumb .big-emoji { font-size:3.2rem; filter: drop-shadow(0 6px 10px rgba(0,0,0,.2)); }
.price-tag {
  font-family: var(--ms-font-head); font-weight:800; color: var(--ms-navy);
  font-size:1.35rem;
}
.price-tag small { font-weight:600; color: var(--ms-muted); font-size:.8rem; }
.badge-soft {
  background: var(--ms-yellow-tint); color:#a6790a; font-weight:700;
  border-radius:999px; padding:.3rem .8rem; font-size:.78rem;
}
.badge-sky { background: #e0f7ff; color:#0784a8; }

/* coach card */
.coach-card { text-align:center; }
.coach-avatar {
  width: 110px; height:110px; border-radius:50%;
  margin: 0 auto 1rem; display:grid; place-items:center;
  font-family: var(--ms-font-head); font-weight:800; font-size:2.2rem; color:#fff;
  box-shadow: 0 12px 26px -12px rgba(18,58,99,.6);
  border: 4px solid #fff;
}

/* achievement / medal */
.medal {
  width:54px;height:54px;border-radius:50%;
  display:grid;place-items:center;font-size:1.5rem;
  background: linear-gradient(135deg, var(--ms-yellow), #ffb400);
  box-shadow: 0 8px 18px -8px rgba(255,180,0,.9);
}
.medal img { width:62%; height:62%; object-fit:contain; }
.medal.medal--light { background:#fff; box-shadow: var(--ms-shadow-soft); }
.medal.medal--light img { width:66%; height:66%; }

/* flaticon sticker icons on cards */
.course-thumb .big-emoji-img { width:84px; height:84px; object-fit:contain; filter: drop-shadow(0 7px 11px rgba(0,0,0,.28)); }
/* foto program — full-bleed dalam container, tidak di-crop/zoom */
.course-thumb--photo { display:block; }
.course-thumb--photo img { width:100%; height:100%; object-fit:cover; display:block; }
.gallery-item .g-ico-img { width:96px; height:96px; object-fit:contain; filter: drop-shadow(0 7px 12px rgba(0,0,0,.3)); }
.ms-ico-img { object-fit:contain; }

/* gallery */
.gallery-item {
  border-radius: var(--ms-radius);
  overflow:hidden; position:relative; display:block;
  min-height: 210px; color:#fff;
  box-shadow: var(--ms-shadow);
  transition: transform .25s ease;
}
.gallery-item:hover { transform: translateY(-6px) scale(1.01); }
.gallery-item.js-gallery-open { cursor:pointer; }
.gallery-item.js-gallery-open .g-thumb { transition: transform .3s ease; }
.gallery-item.js-gallery-open:hover .g-thumb { transform: scale(1.06); }

/* lightbox preview foto galeri */
.g-photo-preview { width:100%; max-height:80vh; object-fit:contain; border-radius:.75rem; box-shadow: var(--ms-shadow); background:#000; }
.gallery-item .g-thumb { width:100%; height:100%; object-fit:cover; display:block; }
.gallery-item .g-overlay {
  position:absolute; inset:0; padding:1.1rem;
  display:flex; flex-direction:column; justify-content:flex-end;
  background: linear-gradient(180deg, rgba(13,44,77,0) 35%, rgba(13,44,77,.82) 100%);
}
.gallery-item .g-tag {
  align-self:flex-start; background: var(--ms-yellow); color: var(--ms-navy);
  font-weight:700; border-radius:999px; padding:.15rem .7rem; font-size:.72rem; margin-bottom:.4rem;
}
.play-badge {
  position:absolute; top:50%; left:50%; transform:translate(-50%,-50%);
  width:56px;height:56px;border-radius:50%; background:rgba(255,255,255,.9); color:var(--ms-blue);
  display:grid;place-items:center; font-size:1.3rem; box-shadow:var(--ms-shadow);
}

/* testimonial */
.testi-card {
  background:#fff; border-radius: var(--ms-radius); padding:1.8rem;
  box-shadow: var(--ms-shadow); height:100%; position:relative;
}
.testi-card .quote-mark { font-family:var(--ms-font-head); font-size:3.4rem; line-height:.6; color:var(--ms-yellow); }
.stars { color: var(--ms-yellow); letter-spacing:2px; }
.avatar-mini { width:46px;height:46px;border-radius:50%;display:grid;place-items:center;color:#fff;font-weight:800;font-family:var(--ms-font-head); }

/* stat pills */
.stat-pill { text-align:center; }
.stat-pill .num { font-family:var(--ms-font-head); font-weight:900; font-size:2.6rem; color:var(--ms-yellow); line-height:1; }
.stat-pill .lbl { color:#cfe6ff; font-weight:600; }

/* feature check list */
.check-list { list-style:none; padding:0; margin:0; }
.check-list li { display:flex; gap:.7rem; align-items:flex-start; margin-bottom:.85rem; }
.check-list li .tick {
  flex:0 0 auto; width:26px;height:26px;border-radius:50%;
  background: var(--ms-blue); color:#fff; display:grid;place-items:center; font-size:.8rem; margin-top:2px;
}

/* logos strip */
.cert-strip { display:flex; gap:2rem; align-items:center; justify-content:center; flex-wrap:wrap; }
.cert-chip {
  background: var(--ms-yellow); border-radius:16px; padding:.7rem 1.2rem; font-weight:800; font-family:var(--ms-font-head);
  color:var(--ms-navy); box-shadow: var(--ms-shadow-soft); display:flex; gap:.5rem; align-items:center;
}
.cert-chip-ico { width:24px; height:24px; object-fit:contain; flex-shrink:0; }
.feature-ico-tile { box-shadow: 0 6px 14px rgba(0,0,0,.18); }

/* ---------- Forms ---------- */
.ms-form .form-control, .ms-form .form-select {
  border-radius: 16px; border:2px solid #e6eef5; padding:.8rem 1rem; font-weight:600;
  background:#fff;
}
.ms-form .form-control:focus, .ms-form .form-select:focus {
  border-color: var(--ms-blue); box-shadow: 0 0 0 .2rem rgba(2,203,255,.18);
}
.ms-form label { font-weight:700; color:var(--ms-navy); margin-bottom:.35rem; font-family:var(--ms-font-head); }

/* ---------- FAQ ---------- */
.faq .accordion-item { border:none; margin-bottom:1rem; border-radius:18px !important; overflow:hidden; box-shadow: var(--ms-shadow-soft); }
.faq .accordion-button {
  font-family:var(--ms-font-head); font-weight:700; color:var(--ms-navy); background:#fff; padding:1.1rem 1.3rem;
}
.faq .accordion-button:not(.collapsed) { background: var(--ms-yellow-tint); color:var(--ms-navy); box-shadow:none; }
.faq .accordion-button:focus { box-shadow:none; }
.faq .accordion-body { background:#fff; color:var(--ms-muted); font-weight:600; }

/* ---------- Footer ---------- */
.ms-footer { background: var(--ms-navy-deep); color:#cfe1f2; padding-top:90px; position:relative; }
.ms-footer h5 { color:#fff; margin-bottom:1rem; }
.ms-footer a { color:#cfe1f2; }
.ms-footer a:hover { color: var(--ms-yellow); }
.ms-footer .foot-social a {
  width:42px;height:42px;border-radius:50%; display:grid;place-items:center;
  background: rgba(255,255,255,.08); color:#fff; transition: background .2s ease, transform .2s ease;
}
.ms-footer .d-inline-flex img{
    height: 42px;
  }
@media (max-width: 767.98px) {
  .ms-footer {
    padding-top: 10px;
  }
  .ms-footer .d-inline-flex img{
    height: 80px;
  }
}
.ms-footer .foot-social a:hover { background: var(--ms-yellow); color:var(--ms-navy); transform:translateY(-3px); }
.ms-footer .foot-bottom { border-top:1px solid rgba(255,255,255,.1); }

/* section heading kicker */
.kicker {
  display:inline-block; font-family:var(--ms-font-head); font-weight:800;
  color: var(--ms-blue); text-transform:uppercase; letter-spacing:2px; font-size:.8rem; margin-bottom:.6rem;
}

/* breadcrumb-ish page hero */
.page-hero {
  padding: 150px 0 70px;
  background: linear-gradient(180deg, var(--ms-yellow-tint), #eafaff);
  position:relative; overflow:hidden; text-align:center;
}
.page-hero h1 { font-size: clamp(2.2rem, 5vw, 3.4rem); }
.page-hero .crumbs { color: var(--ms-muted); font-weight:700; }
.page-hero .crumbs a { color: var(--ms-blue); }

/* floating whatsapp */
.wa-float {
  position:fixed; right:20px; bottom:22px; z-index:1030;
  width:58px;height:58px;border-radius:50%;
  background:#25d366; color:#fff; display:grid;place-items:center; font-size:1.6rem;
  box-shadow: 0 12px 26px -8px rgba(37,211,102,.8);
  animation: floatY 3.6s ease-in-out infinite;
}
.wa-float:hover { color:#fff; transform: scale(1.08); }

/* reveal helper (fallback if AOS missing) */
[data-aos]{ }

/* small screens tweaks */
@media (max-width: 991px){
  .ms-navbar { background: rgba(255,249,233,.96); backdrop-filter: blur(10px); }
  .hero { padding: 130px 0 90px; }
  /* keep content clear of the fixed bottom bar */
  body { padding-bottom: calc(76px + env(safe-area-inset-bottom, 0px)); }
  .wa-float { bottom: calc(94px + env(safe-area-inset-bottom, 0px)); right: 16px; }
}

/* ============================================================
   BRANCH PICKER (navbar)
   ============================================================ */
.branch-pick {
  display: inline-flex; align-items: center; gap: .5rem;
  background: #fff; border: 2px solid #e6eef5; border-radius: 999px;
  padding: .42rem .95rem; font-family: var(--ms-font-head); font-weight: 800;
  color: var(--ms-navy); font-size: .92rem; line-height: 1;
  box-shadow: var(--ms-shadow-soft); transition: border-color .15s ease, transform .15s ease;
}
.branch-pick:hover, .branch-pick:focus { border-color: var(--ms-blue); color: var(--ms-navy); }
.branch-pick:active { transform: scale(.97); }
.branch-pick > i.fa-location-dot { color: var(--ms-blue); font-size: 1rem; }
.branch-pick__label { color: var(--ms-muted); font-weight: 700; font-size: .78rem; }
.branch-pick::after { margin-left: .15rem; border-top-color: var(--ms-muted); }
/* mobile: cabang jadi elemen paling menonjol setelah logo */
.branch-pick--sm {
  padding: .4rem .8rem; font-size: .95rem; max-width: 46vw;
  border-color: var(--ms-yellow); background: var(--ms-yellow-tint);
}
.branch-pick--sm .branch-pick__name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.branch-menu { border: none; border-radius: 18px; box-shadow: var(--ms-shadow); padding: .5rem; min-width: 15rem; }
.branch-menu__head {
  font-family: var(--ms-font-head); font-weight: 800; color: var(--ms-muted);
  font-size: .72rem; letter-spacing: 1px; text-transform: uppercase; padding: .4rem .75rem .5rem;
}
.branch-menu .dropdown-item {
  display: flex; align-items: center; gap: .6rem; border-radius: 12px;
  padding: .6rem .75rem; font-weight: 700; color: var(--ms-navy);
}
.branch-menu .dropdown-item i.fa-location-dot { color: var(--ms-blue); width: 1rem; }
.branch-menu .dropdown-item:hover { background: var(--ms-sky); }
.branch-menu .dropdown-item.active { background: var(--ms-yellow-tint); color: var(--ms-navy); }
.branch-menu .dropdown-item.active i.fa-check { color: #2fae5f; }
.branch-menu__tag {
  background: var(--ms-yellow); color: var(--ms-navy); font-size: .62rem; font-weight: 800;
  border-radius: 999px; padding: .12rem .5rem; letter-spacing: .3px;
}

/* ============================================================
   BOOKING FLOW
   ============================================================ */
.booking-wrap { padding-top: 122px; padding-bottom: 3rem; min-height: 100vh; background: var(--ms-sky); }

/* --- stepper --- */
.stepper { display: flex; align-items: center; gap: .35rem; overflow-x: auto; padding: .25rem 0 .6rem; }
.stepper::-webkit-scrollbar { height: 0; }
.stepper__item { display: flex; align-items: center; gap: .45rem; flex: 0 0 auto; }
.stepper__dot {
  width: 30px; height: 30px; border-radius: 50%; display: grid; place-items: center;
  font-family: var(--ms-font-head); font-weight: 800; font-size: .84rem;
  background: #fff; color: var(--ms-muted); border: 2px solid #e0ecf6;
}
.stepper__label { font-family: var(--ms-font-head); font-weight: 800; font-size: .82rem; color: var(--ms-muted); white-space: nowrap; }
.stepper__bar { width: 22px; height: 3px; border-radius: 2px; background: #e0ecf6; flex: 0 0 auto; }
.stepper__item.is-done .stepper__dot { background: #2fae5f; border-color: #2fae5f; color: #fff; }
.stepper__item.is-done .stepper__label { color: var(--ms-navy); }
.stepper__item.is-active .stepper__dot { background: var(--ms-blue); border-color: var(--ms-blue); color: #fff; box-shadow: 0 6px 14px -6px rgba(2,203,255,.9); }
.stepper__item.is-active .stepper__label { color: var(--ms-navy); }

/* --- selectable option card --- */
.pick {
  display: block; width: 100%; text-align: left; cursor: pointer;
  background: #fff; border: 2px solid #e6eef5; border-radius: 18px;
  padding: 1rem 1.1rem; transition: border-color .15s ease, transform .15s ease, box-shadow .15s ease;
  position: relative; height: 100%;
}
.pick:hover { border-color: var(--ms-blue); transform: translateY(-2px); box-shadow: var(--ms-shadow-soft); }
.pick input { position: absolute; opacity: 0; pointer-events: none; }
.pick__title { font-family: var(--ms-font-head); font-weight: 800; color: var(--ms-navy); font-size: 1.02rem; line-height: 1.25; }
.pick__meta { color: var(--ms-muted); font-size: .86rem; font-weight: 600; }
.pick__price { font-family: var(--ms-font-head); font-weight: 800; color: var(--ms-navy); font-size: 1.12rem; }
.pick__ico { width: 46px; height: 46px; object-fit: contain; flex-shrink: 0; }
.pick__check {
  position: absolute; top: .8rem; right: .9rem; width: 22px; height: 22px; border-radius: 50%;
  border: 2px solid #dbe7f1; display: grid; place-items: center; color: #fff; font-size: .62rem;
}
@media (max-width: 991px){
  .pick__check {width: 15px; height: 15px; font-size: .5rem; top: .6rem; right: .7rem;}
}
.pick input:checked ~ .pick__check { background: var(--ms-blue); border-color: var(--ms-blue); }
.pick:has(input:checked) { border-color: var(--ms-blue); background: #f6fdff; box-shadow: var(--ms-shadow-soft); }

.pill-free { background: #e5f9ec; color: #1c7a44; font-weight: 800; font-size: .72rem; border-radius: 999px; padding: .2rem .6rem; }
.pill-paid { background: var(--ms-yellow-tint); color: #a6790a; font-weight: 800; font-size: .72rem; border-radius: 999px; padding: .2rem .6rem; }

/* --- price summary --- */
.summary-card { position: sticky; top: 122px; border-radius: 20px; background: #fff; box-shadow: var(--ms-shadow); padding: 1.25rem; }
.summary-row { display: flex; justify-content: space-between; gap: 1rem; font-size: .92rem; padding: .38rem 0; color: var(--ms-ink); }
.summary-row span:last-child { font-weight: 700; white-space: nowrap; }
.summary-row--muted span { color: var(--ms-muted); font-weight: 600; }
.summary-total { border-top: 2px dashed #e6eef5; margin-top: .5rem; padding-top: .7rem; display: flex; justify-content: space-between; align-items: baseline; }
.summary-total b { font-family: var(--ms-font-head); font-size: 1.5rem; color: var(--ms-navy); }
.summary-empty { color: var(--ms-muted); font-size: .88rem; font-weight: 600; }

/* --- ticket note (peringatan tiket, bukan tagihan) --- */
.ticket-note {
  display: flex; align-items: flex-start; gap: .7rem;
  border-radius: 16px; padding: .9rem 1rem; font-size: .86rem;
  /* Default = kotak info biru lembut. Dulu base ini transparan sehingga
     catatan polos tampil "melayang" tanpa kotak, tidak konsisten dengan
     varian --warn/--ok yang berkotak. Sekarang SEMUA ticket-note berkotak. */
  background: #eef6fc; border: 1px solid #d3e6f4;
}
.ticket-note i { font-size: 1.05rem; margin-top: .15rem; flex-shrink: 0; color: #0d78c4; }
.ticket-note b { display: block; font-family: var(--ms-font-head); font-weight: 800; color: var(--ms-navy); margin-bottom: .15rem; }
.ticket-note span { display: block; color: var(--ms-ink); font-weight: 600; line-height: 1.45; }
.ticket-note__hint { color: var(--ms-muted) !important; font-size: .8rem; font-weight: 600; margin-top: .35rem; }
.ticket-note--warn { background: #fff6df; border: 1px solid #ffe08a; }
.ticket-note--warn i { color: #a6790a; }
.ticket-note--ok { background: #e5f9ec; border: 1px solid #b7ecc7; }
.ticket-note--ok i { color: #1c7a44; }
.ticket-note--ok b { color: #1c7a44; }
.ticket-note--danger { background: #fdeaea; border: 1px solid #f3b4b4; }
.ticket-note--danger i { color: #c0392b; }
.ticket-note--danger b { color: #c0392b; }
.ticket-note--info { background: #eaf2ff; border: 1px solid #b3d1ff; }
.ticket-note--info i { color: #1a5dab; }
.ticket-note--info b { color: #1a5dab; }

/* --- jadwal per sesi --- */
.session-row {
  display: flex; align-items: flex-start; gap: .9rem;
  padding: .9rem 0; border-bottom: 1px solid #eef2f6;
}
.session-row:last-child { border-bottom: none; padding-bottom: 0; }
.session-row.is-set .session-row__no { background: #e5f9ec; color: #1c7a44; }
.session-row__no {
  flex-shrink: 0; width: 34px; height: 34px; border-radius: 10px;
  display: grid; place-items: center; margin-top: .1rem;
  background: var(--ms-yellow-tint); color: var(--ms-navy);
  font-family: var(--ms-font-head); font-weight: 800; font-size: .9rem;
}
.session-row__form { flex: 1 1 auto; min-width: 0; }
.session-row__fields { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; }
.session-row__fields .form-control,
.session-row__fields .form-select {
  width: auto; flex: 1 1 200px; min-width: 160px;
  border-radius: 12px; border: 2px solid #e6eef5; padding: .5rem .75rem; font-weight: 600; font-size: .88rem;
}
.session-row__meta { display: flex; flex-wrap: wrap; gap: .8rem; margin-top: .55rem; font-size: .82rem; }
.session-ticket { color: #a6790a; font-weight: 700; display: inline-flex; align-items: center; gap: .35rem; }
.session-ticket i { font-size: .85rem; }
.session-ticket b { color: var(--ms-navy); font-weight: 800; }
.session-ticket--ok { color: #1c7a44; }
.session-reloc { color: var(--ms-muted); font-weight: 600; display: inline-flex; align-items: center; gap: .35rem; }

@media (max-width: 575.98px) {
  .session-row { flex-direction: column; }
  .session-row__fields .form-control,
  .session-row__fields .form-select { flex-basis: 100%; }
}

/* --- google button --- */
.btn-google {
  display: inline-flex; align-items: center; justify-content: center; gap: .7rem; width: 100%;
  background: #fff; border: 2px solid #dbe7f1; border-radius: 16px; padding: .85rem 1.2rem;
  font-family: var(--ms-font-head); font-weight: 800; color: #2b3a4a; font-size: 1rem;
  transition: border-color .15s ease, box-shadow .15s ease;
}
.btn-google:hover { border-color: #b9d3e8; box-shadow: var(--ms-shadow-soft); color: #2b3a4a; }
.btn-google svg { width: 20px; height: 20px; flex-shrink: 0; }

@media (max-width: 991.98px) {
  .booking-wrap { padding-top: 104px; }
  .summary-card { position: static; }
  .stepper__label { display: none; }
  .stepper__item.is-active .stepper__label { display: inline; }
}

/* tarif tiket di kartu pilihan kolam */
.pick__ticket {
  font-family: var(--ms-font-head); font-weight: 800; color: var(--ms-navy);
  font-size: .9rem; white-space: nowrap;
}
.pick__ticket small { font-weight: 600; color: var(--ms-muted); font-size: .68rem; }
.pick__ticket--free { color: #1c7a44; }

/* profil di navbar saat sudah login (menggantikan tombol Masuk) */
.nav-profile {
  display: inline-flex; align-items: center; gap: .5rem;
  background: #fff; border: 2px solid var(--ms-yellow); border-radius: 999px;
  padding: .28rem .8rem .28rem .3rem; text-decoration: none;
  box-shadow: var(--ms-shadow-soft); transition: transform .15s ease, border-color .15s ease;
}
.nav-profile:hover { transform: translateY(-2px); border-color: var(--ms-blue); }
.nav-profile img, .nav-profile__initial {
  width: 30px; height: 30px; border-radius: 50%; object-fit: cover; flex-shrink: 0;
}
.nav-profile__initial {
  display: grid; place-items: center; background: var(--ms-navy); color: #fff;
  font-family: var(--ms-font-head); font-weight: 800; font-size: .82rem;
}
.nav-profile__name {
  font-family: var(--ms-font-head); font-weight: 800; color: var(--ms-navy); font-size: .88rem;
  max-width: 8rem; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.nav-profile i { color: var(--ms-muted); font-size: .7rem; }

/* chip profil versi mobile — lebih ringkas agar muat bersama logo & cabang */
.nav-profile--sm {
  padding: .22rem .6rem .22rem .24rem; gap: .38rem;
}
.nav-profile--sm img, .nav-profile--sm .nav-profile__initial { width: 26px; height: 26px; }
.nav-profile--sm .nav-profile__name { font-size: .8rem; max-width: 4.5rem; }
.nav-profile--sm i { font-size: .62rem; }

/* tombol batalkan booking — merah lembut, tidak mendominasi tombol utama */
.btn-cancel {
  border: 2px solid #f3d2d2; color: #c0392b; background: #fff5f5;
}
.btn-cancel:hover { background: #ffe9e9; border-color: #e8b4b4; color: #a5281a; }

/* ===== Dropdown akun (navbar & dashboard) ===== */
.nav-profile { border: none; font: inherit; cursor: pointer; }
.nav-profile::after { display: none; }           /* buang caret bawaan Bootstrap */
.nav-profile .fa-chevron-down { font-size: .7rem; opacity: .55; transition: transform .18s ease; }
.nav-profile[aria-expanded="true"] .fa-chevron-down { transform: rotate(180deg); }

.account-menu {
  --bs-dropdown-min-width: 15rem;
  border: none; border-radius: 16px; padding: .5rem;
  box-shadow: 0 12px 32px rgba(16, 42, 67, .16);
}
.account-menu__head {
  padding: .6rem .75rem .7rem; margin-bottom: .25rem;
  border-bottom: 1px solid rgba(16, 42, 67, .08);
  display: flex; flex-direction: column; line-height: 1.3;
}
.account-menu__name { font-weight: 800; color: var(--ms-navy); font-size: .95rem; }
.account-menu__mail {
  font-weight: 600; font-size: .8rem; color: #7b8794;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.account-menu .dropdown-item {
  display: flex; align-items: center; gap: .65rem;
  border-radius: 10px; padding: .6rem .75rem;
  font-weight: 700; color: var(--ms-navy); width: 100%;
  border: none; background: none; text-align: left;
}
.account-menu .dropdown-item i { width: 1.1rem; text-align: center; color: var(--ms-blue); }
.account-menu .dropdown-item:hover { background: #fff7dd; }
.account-menu__out { color: #c0392b !important; }
.account-menu__out i { color: #c0392b !important; }
.account-menu__out:hover { background: #ffeaea !important; }
.account-menu__soon { opacity: .55; cursor: default; }
.account-menu__soon:hover { background: none !important; }
.account-menu__soon small {
  margin-left: auto; font-size: .68rem; font-weight: 800;
  color: #7b8794; background: #eef1f4; padding: .12rem .45rem; border-radius: 99px;
}

/* Avatar topbar dashboard jadi tombol */
.dash-topbar__avabtn { border: none; background: none; padding: 0; line-height: 0; cursor: pointer; }

/* ===== SweetAlert2 bertema Mood Swimming ===== */
.ms-swal {
  border-radius: var(--ms-radius) !important;
  padding: 1.75rem 1.5rem 1.5rem !important;
  font-family: var(--ms-font-body);
  box-shadow: 0 24px 60px -20px rgba(18, 58, 99, .5) !important;
  border-top: 6px solid var(--ms-yellow);
}
.ms-swal__title {
  font-family: var(--ms-font-head) !important;
  font-weight: 800 !important;
  color: var(--ms-navy) !important;
  font-size: 1.45rem !important;
  padding: 0 !important;
}
.ms-swal__text {
  color: var(--ms-muted) !important;
  font-weight: 600 !important;
  font-size: .98rem !important;
  margin-top: .6rem !important;
}
.ms-swal__actions { gap: .5rem; margin-top: 1.5rem !important; }
.ms-swal__actions .btn { font-weight: 800; border-radius: 999px; }
.ms-swal__list {
  text-align: left; margin: .5rem 0 0; padding-left: 1.1rem;
  color: var(--ms-muted); font-weight: 600; font-size: .92rem;
}
.ms-swal__list li { margin-bottom: .25rem; }

/* Ikon Swal disesuaikan ke palet kita */
.ms-swal__icon.swal2-warning { border-color: var(--ms-yellow) !important; color: #e0a800 !important; }
.ms-swal__icon.swal2-success [class^='swal2-success-line'] { background-color: var(--ms-blue) !important; }
.ms-swal__icon.swal2-success .swal2-success-ring { border-color: rgba(2, 203, 255, .35) !important; }
.ms-swal__icon.swal2-info { border-color: var(--ms-blue) !important; color: var(--ms-blue) !important; }

/* Toast pojok kanan atas */
.ms-swal--toast {
  border-radius: 16px !important;
  border-top: none !important;
  border-left: 6px solid var(--ms-yellow);
  padding: .85rem 1rem !important;
  box-shadow: 0 12px 32px -12px rgba(18, 58, 99, .45) !important;
}
.ms-swal__toasttitle {
  font-family: var(--ms-font-head) !important;
  font-weight: 700 !important;
  color: var(--ms-navy) !important;
  font-size: .95rem !important;
}
.ms-swal--toast .swal2-timer-progress-bar { background: var(--ms-yellow) !important; }
.swal2-container.swal2-top-end { padding-top: 5.5rem; }   /* di bawah navbar */

/* Layar kecil: popup jangan mepet tepi */
@media (max-width: 575.98px) {
  .ms-swal { width: calc(100vw - 2rem) !important; }
  .ms-swal__actions { flex-direction: column-reverse; }
  .ms-swal__actions .btn { width: 100%; margin: 0 !important; }
}

/* sesi yang sudah dipresensi tidak bisa diubah jadwalnya */
.session-row.is-locked { opacity: .7; }

/* =========================================================
   RESPONSIVE — perbaikan tampilan ponsel
   Ditulis paling akhir supaya menimpa aturan dasar di atas
   tanpa perlu !important.
   ========================================================= */

/* ---------- Badge kartu program ----------
   Dulu dua badge dipasang position-absolute (satu left, satu right) sehingga
   saling menimpa di kartu sempit. Sekarang satu baris flex yang membungkus. */
.course-thumb__badges {
  position: absolute; top: 10px; left: 10px; right: 10px;
  display: flex; flex-wrap: wrap; gap: .35rem;
  justify-content: space-between; align-items: flex-start;
  pointer-events: none;
}
.course-thumb__badges .badge-soft { pointer-events: auto; }
.badge-featured { background: var(--ms-yellow); color: var(--ms-navy); }

/* Baris harga + tombol. Boleh membungkus, tapi isinya tidak boleh terpotong:
   "Mulai dari" dan label tombol tetap satu baris. */
.course-card__foot {
  display: flex; align-items: center; justify-content: space-between;
  gap: .6rem; flex-wrap: wrap;
}
.course-card__foot .btn { white-space: nowrap; }
.price-tag small { white-space: nowrap; }

/* ---------- Navbar ponsel ----------
   Baris navbar TIDAK boleh membungkus. Kalau chip profil turun ke baris kedua,
   navbar fixed jadi tinggi dan menutupi isi halaman, sekaligus membuat
   dropdown-menu-end miliknya menjulur ke luar layar (bug utama di ponsel).
   Aman dipakai karena navbar ini tidak punya navbar-toggler — #msNav selalu
   display:none di bawah lg, navigasinya lewat bottom bar. */
@media (max-width: 991.98px) {
  .ms-navbar { padding: .5rem 0; }
  .ms-navbar > .container { flex-wrap: nowrap; gap: .4rem; }

  .ms-navbar .navbar-brand { flex: 0 0 auto; margin-right: 0; min-width: 0; }
  .ms-navbar .navbar-brand img { height: 46px; }

  .branch-pick--sm { max-width: 38vw; min-width: 0; flex: 0 1 auto; }
  .nav-profile--sm { flex: 0 0 auto; }

  /* Jaring pengaman: dropdown apa pun di navbar tidak boleh melebihi layar. */
  .ms-navbar .dropdown-menu {
    max-width: calc(100vw - 1.5rem);
    min-width: min(15rem, calc(100vw - 1.5rem));
  }
  .account-menu__mail { overflow-wrap: anywhere; }
}

@media (max-width: 575.98px) {
  .ms-navbar .navbar-brand img { height: 42px; }
  .branch-pick--sm { max-width: 34vw; font-size: .86rem; padding: .35rem .65rem; }
  .nav-profile--sm { padding-left: .3rem; padding-right: .5rem; }
  .nav-profile--sm .nav-profile__name { max-width: 3.4rem; }
}

@media (max-width: 389.98px) {
  .ms-navbar .navbar-brand img { height: 38px; }
  .branch-pick--sm { max-width: 32vw; }
  /* Layar sangat sempit: cukup avatar + caret, nama disembunyikan. */
  .nav-profile--sm .nav-profile__name { display: none; }
}

/* ---------- Kartu lebih padat di ponsel ----------
   Padding 1.6rem menyisakan terlalu sedikit ruang teks pada kolom 2-per-baris
   selebar ~156px, sehingga nama coach pecah 3-4 baris. */
@media (max-width: 575.98px) {
  .ms-card { padding: 1.05rem; }
  .testi-card { padding: 1.25rem; }

  .coach-avatar {
    width: 78px; height: 78px; font-size: 1.5rem;
    border-width: 3px; margin-bottom: .7rem;
  }
  .coach-card h5 { font-size: 1rem; line-height: 1.2; }
  .coach-card .badge-soft { font-size: .7rem; padding: .25rem .6rem; }
  .coach-card .small { font-size: .74rem; }

  .course-thumb { height: 128px; }
  .price-tag { font-size: 1.15rem; }
  .stat-pill .num { font-size: 2rem; }
  .cert-strip { gap: .75rem; }
  .cert-chip { padding: .5rem .85rem; font-size: .85rem; }
  .gallery-item { min-height: 168px; }
}

/* ---------- Hero & page hero ----------
   Padding atas dulu disetel untuk navbar dua baris; navbar sekarang selalu
   satu baris dan lebih pendek, jadi jaraknya dirapatkan. */
@media (max-width: 767.98px) {
  .hero { padding: 112px 0 76px; }
  .page-hero { padding: 112px 0 52px; }
  .page-hero h1 { font-size: clamp(1.75rem, 7.5vw, 2.4rem); }
}

@media (max-width: 575.98px) {
  .hero h1 { font-size: clamp(1.95rem, 8.5vw, 2.6rem); }
  .hero-lead { font-size: 1rem; }
  /* Dua CTA sejajar terlalu sesak; jadikan satu kolom penuh. */
  .hero .btn-lg { width: 100%; padding: .7rem 1.2rem; font-size: 1rem; }
}

/* ---------- Tombol WhatsApp mengambang ----------
   Ukuran 58px menutupi tombol "Lihat Detail" di kartu program. Dikecilkan dan
   digeser lebih ke tepi supaya lebih jarang menabrak isi. */
@media (max-width: 575.98px) {
  .wa-float {
    width: 48px; height: 48px; font-size: 1.3rem; right: 12px;
    bottom: calc(88px + env(safe-area-inset-bottom, 0px));
  }
}

/* ---------- Anti-jebol horizontal ----------
   Media & tabel adalah penyebab paling sering scroll ke samping di ponsel. */
img, video, svg { max-width: 100%; }
.table-responsive { -webkit-overflow-scrolling: touch; }
